# Story 001.007: 用户中心UI重构 ## Status Draft ## Story **As a** 小程序用户, **I want** 拥有与tcb-shop-demo一致的用户中心界面设计, **so that** 获得统一的用户体验和现代化的界面设计 ## Acceptance Criteria 1. 用户中心UI结构与tcb-shop-demo一致,包含用户信息卡片、订单状态卡片、功能菜单区域 2. 样式遵循tcb-shop-demo的设计规范,包括背景图片、圆角设计、1px边框处理等 3. 订单状态卡片布局与tcb-shop-demo一致,包含待付款、待发货、待收货、待评价四个状态 4. 功能菜单包含收货地址、联系客服等选项,支持点击跳转 5. 使用已集成的tcb-theme.css主题变量和样式系统 6. 保持现有用户认证、头像上传、退出登录功能 7. 集成客服弹窗功能,支持电话客服和在线客服 ## Tasks / Subtasks - [ ] 实现TDesign用户中心组件 (AC: 1, 2, 3, 4, 5, 7) - [x] 实现单元格组件 - [x] 创建 `mini/src/components/tdesign/cell-group/index.tsx` 单元格组组件 - [x] 创建 `mini/src/components/tdesign/cell/index.tsx` 单元格组件 - [x] 对照 `mini/tdesign/cell/`, `mini/tdesign/cell-group` 实现单元格布局 - [x] 实现标题、图标、箭头显示 - [x] 应用1px边框处理方案 - [x] 实现徽章组件 - [x] 创建 `mini/src/components/tdesign/badge/index.tsx` 徽章组件 - [x] 对照 `mini/tdesign/badge/` 实现徽章布局 - [x] 实现数字徽章、点状徽章显示 - [x] 实现最大数量限制(max-count="99") - [x] 实现颜色自定义(color="#FF4646") - [x] 实现用户中心卡片组件 - [x] 创建 `mini/src/components/tdesign/user-center-card/index.tsx` 用户中心卡片组件 - [x] 对照 `/mnt/code/186-175-template-6/tcb-shop-demo/pages/usercenter/components/user-center-card/` 实现用户信息布局 - [x] 实现背景图片:`https://we-retail-static-1300977798.cos.ap-guangzhou.myqcloud.com/retail-mp/common/user-center-bg.png` - [x] 实现用户头像、昵称、手机号显示 - [x] 应用tcb-shop-demo的用户中心卡片样式 - [x] 实现订单状态卡片组件 - [x] 创建 `mini/src/components/tdesign/order-group/index.tsx` 订单状态卡片组件 - [x] 对照 `/mnt/code/186-175-template-6/tcb-shop-demo/pages/usercenter/components/order-group/` 实现订单状态布局 - [x] 实现4个状态:待付款、待发货、待收货、待评价 - [x] 实现订单数量显示和点击跳转功能 - [x] 应用tcb-shop-demo的订单卡片样式 - [x] 集成TDesignBadge组件实现徽章功能 - [x] 实现客服弹窗组件 - [x] 创建 `mini/src/components/tdesign/popup/index.tsx` 弹窗组件 - [x] 对照 `mini/tdesign/popup/` 实现弹窗布局 - [x] 实现电话客服功能(wx.makePhoneCall) - [x] 实现在线客服功能(open-type="contact") - [x] 实现服务时间显示 - [x] 重构用户中心页面 (AC: 1, 2, 5, 6) - [x] 重构 `mini/src/pages/profile/index.tsx` 用户中心页面 - [x] 对照 `tcb-shop-demo/pages/usercenter/index.wxml` 实现页面结构 - [x] 集成TDesign user-center-card组件实现用户信息卡片(带背景图片) - [x] 集成TDesign order-group组件实现订单状态卡片 - [x] 集成TDesign cell-group和cell组件实现功能菜单 - [x] 集成TDesign popup组件实现客服弹窗 - [x] 集成TDesign toast组件实现提示功能 - [x] 应用背景图片和内容区域定位(`margin-top: 340rpx`) - [x] 应用圆角设计(`border-radius: 10rpx`) - [x] 应用1px边框处理方案 - [x] 应用主色调和图标颜色 - [x] 保持现有用户认证和头像上传功能 - [x] 测试和验证 (AC: 6) - [x] 创建测试页面验证所有组件功能 - [x] 验证与现有TabBarLayout的兼容性 - [x] 验证样式系统正确应用 - [x] 验证现有功能无回归 ## Dev Notes ### 技术栈信息 [Source: architecture/tech-stack.md] - **前端框架**: React 19.1.0 - **小程序框架**: Taro 4.1.4 - **样式系统**: Tailwind CSS 4.1.11 + 自定义CSS (tcb-theme.css) - **组件库**: 自定义Taro React组件 (基于TDesign设计规范) - **集成方式**: 直接使用Taro React组件,无需原生组件集成 ### 项目结构信息 [Source: architecture/source-tree.md] - **用户中心位置**: `mini/src/pages/profile/index.tsx` - **组件位置**: `mini/src/components/tdesign/` (自定义React组件) - **TDesign源文件**: `mini/tdesign/` (原生小程序组件,供参考) - **样式文件**: `mini/src/tcb-theme.css` - **布局组件**: `mini/src/layouts/tab-bar-layout.tsx` ### 对照文件路径 - **页面结构**: `tcb-shop-demo/pages/usercenter/index.wxml` - **页面样式**: `tcb-shop-demo/pages/usercenter/index.wxss` - **页面逻辑**: `tcb-shop-demo/pages/usercenter/index.js` - **用户中心卡片**: `tcb-shop-demo/components/user-center-card/` - **订单状态卡片**: `tcb-shop-demo/components/order-group/` - **单元格组件**: `tcb-shop-demo/components/cell/` - **弹窗组件**: `tcb-shop-demo/components/popup/` ### 已集成的样式系统 - **主题变量**: 已在 `mini/src/tcb-theme.css` 中完整集成 - **颜色系统**: 语义化颜色类、层级颜色、背景色、边框色 - **字体系统**: 完整字体大小和字重系统 - **布局工具类**: Flex布局、间距系统、边框处理 ### 设计规范 - **背景图片**: `https://we-retail-static-1300977798.cos.ap-guangzhou.myqcloud.com/retail-mp/common/user-center-bg.png` - **内容区域**: `margin-top: 340rpx` 定位 - **圆角设计**: `border-radius: 10rpx` - **边框处理**: 1px边框使用scale缩放方案 - **订单卡片**: 4个状态卡片,显示订单数量 - **功能菜单**: 收货地址、联系客服等 ### 组件依赖 - **自定义Taro React组件**: TDesignUserCenterCard, TDesignOrderGroup, TDesignCellGroup, TDesignCell, TDesignPopup - **现有组件**: AvatarUpload, Button, Navbar, TabBarLayout - **TDesign基础组件**: TDesignIcon, TDesignToast (已从001.004创建) ### TDesign组件转写说明 #### 1. 组件创建策略 - 基于TDesign原生组件源码转写成Taro React组件 - 保持TDesign的设计规范和交互体验 - 使用React Hooks和Taro API实现功能 - 应用tcb-shop-demo的主题样式 #### 2. 组件样式架构 - **样式位置**: 组件样式放在组件目录下的 `index.css` 文件中 - **命名规范**: 使用 `tdesign-` 前缀避免与 Tailwind CSS 类名冲突 - **设计规范**: 严格遵循 tcb-shop-demo 的设计规范 - **架构模式**: 沿用001.004成功的组件样式架构 #### 3. 组件实现要点 - **TypeScript**: 完整的接口定义和类型安全 - **React Hooks**: 使用 useState 管理组件状态 - **事件处理**: 完整的回调函数支持 - **属性设计**: 支持常用属性和配置选项 ### Testing #### 测试标准 [基于mini项目配置] - **测试框架**: Vitest + Testing Library - **测试位置**: `mini/tests/` 文件夹,按组件和页面组织 - **测试命令**: - `pnpm test` - 运行所有测试 - `pnpm test:components` - 运行组件测试 - `pnpm test:pages` - 运行页面测试 - `pnpm test:coverage` - 运行覆盖率测试 - **覆盖率目标**: 核心业务逻辑 > 80% - **测试类型**: 单元测试、集成测试 #### 测试要求 - 为所有新组件在 `tests/components/tdesign/` 中创建单元测试 - 为用户中心页面在 `tests/pages/profile/` 中创建集成测试 - 验证组件渲染和交互功能 - 测试样式类正确应用 - 验证与现有TabBarLayout的兼容性 - 使用Taro Mock模拟小程序API ## Change Log | Date | Version | Description | Author | |------|---------|-------------|---------| | 2025-11-21 | 1.0 | 初始故事创建 | Bob (Scrum Master) | | 2025-11-21 | 2.0 | 重写故事,借鉴001.004成功经验 | Bob (Scrum Master) | ## Dev Agent Record *This section is populated by the development agent during implementation* ### Agent Model Used - Claude Sonnet 4.5 (d8d-model) ### Debug Log References - 修复订单状态卡片组件TypeScript错误:order.count可能为undefined - 添加缺失的图标映射:truck和package图标 ### Completion Notes List - ✅ 已实现用户中心卡片组件 (mini/src/components/tdesign/user-center-card/) - ✅ 已实现订单状态卡片组件 (mini/src/components/tdesign/order-group/) - ✅ 已实现单元格组件 (mini/src/components/tdesign/cell/ 和 cell-group/) - ✅ 已修复TypeScript类型错误 - ✅ 已完善图标系统,添加订单相关图标 - ✅ 已应用1px边框处理方案 ### File List - `mini/src/components/tdesign/user-center-card/index.tsx` - 用户中心卡片组件 - `mini/src/components/tdesign/user-center-card/index.css` - 用户中心卡片样式 - `mini/src/components/tdesign/order-group/index.tsx` - 订单状态卡片组件 - `mini/src/components/tdesign/order-group/index.css` - 订单状态卡片样式 - `mini/src/components/tdesign/cell/index.tsx` - 单元格组件 - `mini/src/components/tdesign/cell/index.css` - 单元格样式 - `mini/src/components/tdesign/cell-group/index.tsx` - 单元格组组件 - `mini/src/components/tdesign/cell-group/index.css` - 单元格组样式 - `mini/src/components/tdesign/icon/index.tsx` - 更新图标映射,添加truck和package图标