TalkofFood_Design/project_document/plan-20250725-search-result-refactor-plan.md
L.star aa2a7ae542 feat(search): Refactor SearchResultView into modular components
Decomposed the main SearchResultView into smaller, reusable components under 'src/components/SearchResult/' to improve maintainability and scalability.

- Added specific components for different result types like SummaryCard, AdditiveList, MaterialCard, and PrepackagedList.
- Updated 'router/index.ts' to reflect the new structure.
- Included project planning and proposal documents in 'project_document/'.
2025-07-25 18:41:30 +08:00

65 lines
5.3 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# SearchResultView 重构实施计划
**项目ID:** shihuashishuo-ui
**任务:** 重构 `shihuashishuo-ui/src/views/核心体验页/SearchResultView-搜索结果页.vue`
**阶段:** 计划 (PLAN)
**创建者:** AR/LD
**时间:** 2025-07-25
**关联提案:** `project_document/innovate-20250725-search-result-refactor-proposal.md`
## 1. 总体目标
`SearchResultView.vue` 按照深度组件化方案进行重构,拆分为视图、列表、卡片三层结构,以提高代码的可维护性、复用性和可读性。
## 2. 实施任务清单
### 任务 1[重构-准备] 1. 创建搜索结果子组件目录
- **ID:** `657c0d09-4bc3-405f-964b-0150f69a41bf`
- **描述:** 为所有新创建的搜索结果子组件创建一个统一的存放目录,保持项目结构的清晰性。
- **实现指南:** 在 `shihuashishuo-ui/src/components/` 路径下创建一个名为 `SearchResult` 的新文件夹。
- **验证标准:** 确认 `shihuashishuo-ui/src/components/SearchResult` 目录已成功创建。
- **依赖任务:** 无
### 任务 2[重构-卡片层] 2. 创建原子卡片(Card)组件文件
- **ID:** `6bd9cc67-3fa6-4e67-8e8c-bce840573987`
- **描述:** 创建所有结果类型的原子卡片Vue组件文件。这些组件是UI展示的最小单元只负责渲染自身UI。
- **实现指南:** 在 `shihuashishuo-ui/src/components/SearchResult/` 目录下创建以下四个文件:`PrepackagedCard.vue`, `AdditiveCard.vue`, `MaterialCard.vue`, `SummaryCard.vue`。每个文件都应包含空的 `<template>`, `<script setup lang="ts">`, 和 `<style scoped>` 结构。
- **验证标准:** 确认四个卡片组件文件已在指定目录下创建且包含基础的SFC结构。
- **依赖任务:** `[重构-准备] 1. 创建搜索结果子组件目录`
### 任务 3[重构-卡片层] 3. 迁移内容到原子卡片组件
- **ID:** `fd187d9f-28e8-484f-954a-79aa5b562a41`
- **描述:** 将 `SearchResultView.vue` 中对应各类结果的模板(HTML)和样式(CSS)代码,分别迁移到对应的原子卡片组件中。
- **实现指南:**
1. **PrepackagedCard.vue**: 剪切旧文件中 `.result-item.product-card` 的HTML结构和相关CSS粘贴到此组件。定义 `item: Object` prop接收数据。
2. **AdditiveCard.vue**: 剪切旧文件中 `.result-item.additive-card` 的HTML结构和相关CSS粘贴到此组件。定义 `item: Object` prop。
3. **MaterialCard.vue**: 剪切旧文件中 `.result-item.material-card` 的HTML结构和相关CSS粘贴到此组件。定义 `item: Object` prop。
4. **SummaryCard.vue**: 剪切旧文件中用于“食谱”和“资讯”的通用 `.result-item` 结构和CSS粘贴到此组件。定义 `item: Object` prop。
- **验证标准:** 每个卡片组件都能基于传入的 `item` prop 正确渲染UI且样式与原设计一致。
- **依赖任务:** `[重构-卡片层] 2. 创建原子卡片(Card)组件文件`
### 任务 4[重构-列表层] 4. 创建列表(List)组件
- **ID:** `2e400764-be58-499b-9970-3ae9901823b2`
- **描述:** 创建负责渲染各种卡片列表的组件。这些组件作为中间层,连接视图和原子卡片。
- **实现指南:** 在 `shihuashishuo-ui/src/components/SearchResult/` 目录下创建以下五个文件:`PrepackagedList.vue`, `AdditiveList.vue`, `MaterialList.vue`, `RecipeList.vue`, `ArticleList.vue`。在每个文件中,导入对应的卡片组件,定义 `items: Array` prop并在模板中使用 `v-for` 循环渲染卡片组件。监听卡片点击事件并向上emit `item-click` 事件。
- **验证标准:** 每个列表组件都能根据传入的 `items` 数组正确渲染出对应的卡片列表。
- **依赖任务:** `[重构-卡片层] 3. 迁移内容到原子卡片组件`
### 任务 5[重构-视图层] 5. 重构SearchResultView容器组件
- **ID:** `3c8cd9df-1095-499c-92af-7488db595ab7`
- **描述:** 改造顶层视图 `SearchResultView.vue`,移除所有硬编码的列表和卡片逻辑,替换为动态组件渲染机制。
- **实现指南:**
1. 从模板中删除所有 `.result-item` 的HTML结构。
2.`<script>` 中导入所有列表组件并创建一个Tab ID到组件的映射对象。
3. 在模板的 `<main>` 区域,使用 `<component :is="componentMap[activeTab]" :items="filteredResults" @item-click="goToResult" />` 来动态渲染列表。
4. 调整数据处理逻辑,确保 `filteredResults` 能为不同列表提供正确的数据。
5.`<style>` 中删除所有已迁移到子组件的样式。
- **验证标准:** 页面功能与重构前完全一致。`SearchResultView.vue` 的代码行数显著减少不再包含任何卡片或列表的具体UI实现。
- **依赖任务:** `[重构-列表层] 4. 创建列表(List)组件`
### 任务 6[重构-收尾] 6. 最终审查与清理
- **ID:** `4efef42f-a16a-4868-a6b1-0b858a22fcc4`
- **描述:** 在完成核心重构后,进行最后的代码审查和清理,确保没有冗余代码、未使用的变量或样式。
- **实现指南:** 仔细检查 `SearchResultView.vue` 文件删除所有在重构过程中遗留的、现已无用的注释、变量、方法和CSS规则。运行项目检查浏览器控制台是否有任何错误或警告。
- **验证标准:** 项目可正常编译和运行,无任何与本次重构相关的控制台错误或警告。代码整洁,无冗余。
- **依赖任务:** `[重构-视图层] 5. 重构SearchResultView容器组件`