# 全系统测试 + 阶段3业务组件抽象执行计划 ## 任务概述 用户要求先执行全系统测试,测试通过后执行阶段3的业务组件抽象。本计划分为两个主要阶段: 1. **全系统测试**:运行现有E2E测试套件,验证系统功能完整性 2. **阶段3业务组件抽象**:创建配置化组件,解决架构债务 --- ## 第一阶段:全系统测试 ### 1.1 测试前准备 - [ ] 确认 dev server 正在运行(端口3015) - [ ] 检查 Playwright 依赖是否已安装 - [ ] 验证数据库连接状态(`meoo-cli cloud status`) ### 1.2 执行测试套件 项目包含3个E2E测试文件: - `e2e/auth.setup.ts` - 认证设置 - `e2e/core-workflow.spec.ts` - 核心工作流测试 - `e2e/collaboration-workflow.spec.ts` - 协作工作流测试 - `e2e/full-workflow.spec.ts` - 全流程模拟测试(采购商→纺织厂完整流程) **执行命令**: ```bash # 运行所有E2E测试 pnpm exec playwright test # 或仅运行特定测试文件 pnpm exec playwright test e2e/full-workflow.spec.ts ``` ### 1.3 测试结果验证 - [ ] 所有测试用例通过 - [ ] 无控制台错误 - [ ] 无运行时异常 - [ ] 数据一致性验证通过 ### 1.4 测试失败处理策略 如果测试失败: 1. 分析失败原因(UI变更、数据问题、网络问题) 2. 修复代码或测试用例 3. 重新运行测试直至全部通过 4. 记录测试结果到 AGENTS.md --- ## 第二阶段:阶段3业务组件抽象 根据 AGENTS.md 中的优化路线图,阶段3包含以下任务: ### 2.1 创建 DashboardLayout 配置化组件 **目标**:统一三个角色 Dashboard 的布局结构,消除 ~70% 的代码重复 **文件位置**:`src/components/layout/DashboardLayout.tsx` **设计要点**: - 接收 `role` 参数(purchaser/textile/washing) - 根据角色自动应用对应主题色(amber/emerald/violet) - 统一 Header、统计卡片区域、快捷操作区域的布局 - 支持自定义内容插槽(children) - 集成 NotificationCenter、HelpCenter 等通用组件 **替换目标**: - `src/pages/purchaser/Dashboard.tsx` - `src/pages/textile/Dashboard.tsx` - `src/pages/washing/Dashboard.tsx` ### 2.2 创建 PaymentCard 组件 **目标**:统一采购商和水洗厂的付款展示 **文件位置**:`src/components/PaymentCard.tsx` **设计要点**: - 支持付款方/收款方两种视角 - 显示金额、状态、时间等关键信息 - 支持主题色适配 - 提供操作按钮(确认、详情等) **替换目标**: - `src/pages/purchaser/AccountsPayable.tsx` 中的内联实现 - `src/pages/washing/PaymentPending.tsx` 中的内联实现 ### 2.3 创建 AccountProfileCard 组件 **目标**:统一三个角色的账户信息弹窗 **文件位置**:`src/components/AccountProfileCard.tsx` **设计要点**: - 显示用户头像、名称、公司信息 - 支持头像上传功能 - 集成功能菜单(账号管理、用户手册、反馈、关于) - 支持主题色适配 **替换目标**: - 3个 Dashboard 中的账户卡片弹窗内联实现 ### 2.4 创建 ImageUploader 组件 **目标**:统一图片上传功能,消除4+处重复实现 **文件位置**:`src/components/ImageUploader.tsx` **设计要点**: - 支持预览、重新上传、删除 - 文件大小和格式验证 - 上传进度显示 - 错误处理和用户反馈 - 集成 Supabase Storage **替换目标**: - `src/components/warehouse/ProductForm.tsx` 中的图片上传 - 其他需要图片上传的场景 ### 2.5 创建 WashingLayout 组件(解决架构债务) **目标**:为水洗厂创建独立 Layout 组件,与采购商/纺织厂保持一致 **文件位置**:`src/components/layout/WashingLayout.tsx` **设计要点**: - 参考 PurchaserLayout 和 TextileLayout 的结构 - 使用 violet 主题色 - 包含6项导航:首页、计划总览、待处理坯布、已完成坯布、成品仓库、待结款 - 支持移动端折叠导航 **路由调整**: - 将水洗厂的扁平路由改为嵌套路由模式 - 更新 `src/App.tsx` 中的路由配置 ### 2.6 统一实时订阅至 useRealtime **目标**:将所有直接使用 `supabase.channel` 的地方迁移到 `useRealtime` Hook **涉及文件**: - `src/pages/textile/PlanOverview.tsx` - 直接订阅 inventory_records - 其他绕过单例管理器的页面 **实施步骤**: 1. 识别所有直接使用 `supabase.channel` 的位置 2. 评估是否适合迁移到 useRealtime 3. 逐步替换并验证功能 --- ## 执行顺序与依赖关系 ``` 全系统测试 ↓ (测试通过后) DashboardLayout (基础,其他组件可能依赖) ↓ WashingLayout (解决架构债务,优先级高) ↓ AccountProfileCard (3个Dashboard都使用) ↓ PaymentCard (财务模块) ↓ ImageUploader (产品管理) ↓ 统一实时订阅 (最后优化) ``` --- ## 验证标准 每个组件完成后需验证: - [ ] TypeScript 类型检查通过 (`pnpm run typecheck`) - [ ] Dev server 正常启动 (`pnpm run dev`) - [ ] 相关页面功能正常 - [ ] 移动端响应式正常 - [ ] 主题色正确应用 --- ## 风险与注意事项 1. **测试环境依赖**:E2E测试需要 dev server 运行在 localhost:3015 2. **数据库状态**:测试可能修改数据库数据,建议在测试前备份 3. **组件替换风险**:替换内联实现时需保持功能完全一致 4. **路由变更**:WashingLayout 会改变路由结构,需全面测试 5. **向后兼容**:新组件应支持现有所有功能,避免破坏性变更 --- ## 预期产出 完成本计划后: - 全系统测试报告(通过/失败统计) - 5个新的共享组件 - 3个 Dashboard 代码量减少约 50% - 水洗厂获得独立 Layout,架构债务解决 - 实时更新机制统一,内存泄漏风险降低