From 5a1a8610e5022f4a507eb50fcd42d22e385f277f Mon Sep 17 00:00:00 2001 From: "weicw1996@qq.com" Date: Tue, 29 Sep 2026 05:01:44 +0800 Subject: [PATCH] =?UTF-8?q?refactor(search):=20=E6=90=9C=E7=B4=A2=E7=BB=93?= =?UTF-8?q?=E6=9E=9C=E9=A1=B5=E8=A1=A5=E7=B1=BB=E5=9E=8B=E5=B9=B6=E5=8E=BB?= =?UTF-8?q?=E6=8E=89=E9=87=8D=E5=A4=8D=E7=9A=84=20usePageSeo=20=E8=B0=83?= =?UTF-8?q?=E7=94=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 代码审查(standards)发现的唯一 should-fix 项:新增的搜索结果页通篇用 any, 而仓库既有 Article / CaseItem / Tender 类型且 sibling 页面一律在用。 - 引入 Article、CaseItem、Tender 类型,新增 SearchResponse / Section 描述 /api/search 的响应形状(Section 用联合类型表达「成功 | 故障」, 让 `'error' in s` 的判别在类型层面成立) - section() 改为泛型 + 按 key 推导载荷类型,去掉 7 处 any - 补充注释说明为何用 useFetch 而非 useRequestFetch(匿名只读页无需转 Cookie,与各列表页一致) 同时处理一个 nitpick:search.vue 与 SearchResult.vue 重复调用 usePageSeo, 且页面层那次漏传 siteInfo(后写覆盖先写,重复设置只造成「哪次生效」的歧义)。 按 sibling 惯例只保留组件内那次(它带 siteInfo,且标题能带回关键词)。 行为未变:回归实测「消防」总数 9、23 条详情链接;「测试」标书命中 2 条、 价格 0.01 与截止时间正常渲染、默认 Tab 正确落在标书(第一个非空类)。 eslint 对该文件从 7 个 warning 降到 0。 --- app/components/SearchResult.vue | 48 ++++++++++++++++++++++++--------- app/pages/search.vue | 5 +++- 2 files changed, 40 insertions(+), 13 deletions(-) diff --git a/app/components/SearchResult.vue b/app/components/SearchResult.vue index b4e4d1e..ad43528 100644 --- a/app/components/SearchResult.vue +++ b/app/components/SearchResult.vue @@ -135,6 +135,22 @@