diff --git a/frontend/components.d.ts b/frontend/components.d.ts index f3d4178..7409d23 100644 --- a/frontend/components.d.ts +++ b/frontend/components.d.ts @@ -22,7 +22,9 @@ declare module 'vue' { ElEmpty: typeof import('element-plus/es')['ElEmpty'] ElIcon: typeof import('element-plus/es')['ElIcon'] ElInput: typeof import('element-plus/es')['ElInput'] + ElOption: typeof import('element-plus/es')['ElOption'] ElPagination: typeof import('element-plus/es')['ElPagination'] + ElSelect: typeof import('element-plus/es')['ElSelect'] ElTag: typeof import('element-plus/es')['ElTag'] HelloWorld: typeof import('./src/components/HelloWorld.vue')['default'] RouterLink: typeof import('vue-router')['RouterLink'] diff --git a/frontend/public/default.png b/frontend/public/default.png new file mode 100644 index 0000000..d4e4af0 Binary files /dev/null and b/frontend/public/default.png differ diff --git a/frontend/src/api/search.ts b/frontend/src/api/search.ts new file mode 100644 index 0000000..00408b6 --- /dev/null +++ b/frontend/src/api/search.ts @@ -0,0 +1,16 @@ +//进行接口API的统一管理 +import { request } from "./axios"; + +export class search { + /** + * @description 首页搜索数据 + * @param {string} keyword - 关键字 + * @param {string} type - 类型 + * @param {number} page - 页码 + * @param {number} limit - 每页条数 + * @return {Promise} 返回请求结果 + */ + static async getArticleDetail(keyword: string, type: string, page: number = 1, limit: number = 10) { + return request("/index/search/apiSearch", { keyword, type, page, limit }, "get"); + } +} diff --git a/frontend/src/assets/less/global.less b/frontend/src/assets/less/global.less index 7e59938..fd37282 100644 --- a/frontend/src/assets/less/global.less +++ b/frontend/src/assets/less/global.less @@ -5,6 +5,8 @@ :root { --white:#fff; --primary-color: #409eff; + --primary-hover-color: #3c4ccf; + --primary-light-bg: #e7f3ff; --success-color: #67c23a; --warning-color: #e6a23c; --danger-color: #f56c6c; @@ -21,6 +23,7 @@ --background-color: #f5f5f5; --background-color-page: #f0f2f5; + --background-color-hover: #f7f8fd; } // 全局重置样式 diff --git a/frontend/src/router/index.ts b/frontend/src/router/index.ts index 6c8bd06..b7b4e19 100644 --- a/frontend/src/router/index.ts +++ b/frontend/src/router/index.ts @@ -47,6 +47,11 @@ const router = createRouter({ name: "downloadGames", component: () => import("@/views/downloadGames/index.vue"), }, + { + path: "/search", + name: "search", + component: () => import("@/views/components/search.vue"), + }, ], }); diff --git a/frontend/src/views/components/ResourceList.vue b/frontend/src/views/components/ResourceList.vue index 2250620..872e957 100644 --- a/frontend/src/views/components/ResourceList.vue +++ b/frontend/src/views/components/ResourceList.vue @@ -81,7 +81,11 @@ @@ -537,6 +544,11 @@ onMounted(() => { justify-content: space-between; margin: 30px 0; + .prev, + .next { + width: 50%; + } + a { color: #333; } diff --git a/frontend/src/views/components/detail_resource.vue b/frontend/src/views/components/detail_resource.vue index b49200c..5848dbc 100644 --- a/frontend/src/views/components/detail_resource.vue +++ b/frontend/src/views/components/detail_resource.vue @@ -5,6 +5,7 @@ import { ElMessage } from "element-plus"; import Header from "@/views/components/header.vue"; import Footer from "@/views/components/footer.vue"; import { resource as resourceApi } from "@/api/resource"; +import defaultImage from "@/assets/imgs/default.png"; const route = useRoute(); const router = useRouter(); // 新增:引入useRouter @@ -27,7 +28,9 @@ const pageInfo = computed(() => ({ // 获取图片地址 const getImageUrl = (imagePath: string) => { - if (!imagePath) return "/src/assets/imgs/default.png"; + if (!imagePath) { + return defaultImage; + } return import.meta.env.VITE_API_DOMAIN + imagePath; }; @@ -158,14 +161,12 @@ const fetchResourceDetail = async () => { try { const response: any = await resourceApi.getResourceDetail(resourceId.value); - - console.log("获取资源详情响应:", response); - if (response?.data?.code === 0 && response?.data?.data) { - resourceData.value = response.data.data.resource; + if (response.data.code === 0) { + resourceData.value = response.data.data; + console.log(resourceData.value); prevResource.value = response.data.data.prev_resource; nextResource.value = response.data.data.next_resource; relatedResources.value = response.data.data.related_resources || []; - console.log("资源数据加载完成:", resourceData.value?.title); } else { console.error("API响应格式错误:", response); ElMessage.error("获取资源详情失败:数据格式错误"); @@ -196,8 +197,6 @@ watch( ); onMounted(() => { - // 移除原有的fetchResourceDetail调用,由watch接管 - // 页面加载时滚动到顶部 window.scrollTo(0, 0); }); @@ -217,9 +216,7 @@ onMounted(() => { 首页 - {{ - pageInfo.name - }} + {{ resourceData.cate }} 详情 @@ -332,6 +329,11 @@ onMounted(() => { @click="handleContentClick" > +
+ -------- THE END -------- +
+ +
免责声明:
@@ -519,7 +521,7 @@ onMounted(() => { .top-content { width: 100%; height: 400px; - background-color: #0081ff; + background-color: var(--primary-color); position: relative; .top-content-main { @@ -611,10 +613,10 @@ onMounted(() => { } .value { - border: 1px #0d6efd dashed; + border: 1px var(--primary-color) dashed; padding: 3px 6px; font-size: 13px; - background-color: #0081ff12; + background-color: var(--primary-light-bg); border-radius: 5px; } } @@ -626,11 +628,11 @@ onMounted(() => { align-items: center; .codebtn { - color: #0d6efd; + color: var(--primary-color); margin-left: 20px; padding: 6px 20px; border-radius: 8px; - border: 1px solid #0d6efd; + border: 1px solid var(--primary-color); cursor: pointer; transition: all 0.3s ease; background-color: #fff; diff --git a/frontend/src/views/components/footer.vue b/frontend/src/views/components/footer.vue index 2f70c48..c5b2df3 100644 --- a/frontend/src/views/components/footer.vue +++ b/frontend/src/views/components/footer.vue @@ -1,4 +1,13 @@ diff --git a/frontend/src/views/components/header.vue b/frontend/src/views/components/header.vue index 6307c2d..2ef9a96 100644 --- a/frontend/src/views/components/header.vue +++ b/frontend/src/views/components/header.vue @@ -1,12 +1,22 @@ + + + +