hookehuyr

docs: 更新项目文档

- lessons-learned.md: 新增"状态标记组件模式"案例
- README.md: 添加最新更新章节(计划书状态标记、UI优化)
- CLAUDE.md: 更新最新功能和常见问题表格

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
...@@ -31,6 +31,7 @@ pnpm dev:tt # 字节跳动小程序开发 ...@@ -31,6 +31,7 @@ pnpm dev:tt # 字节跳动小程序开发
31 ### 🆕 最新更新(2026-02) 31 ### 🆕 最新更新(2026-02)
32 32
33 **计划书功能优化** 33 **计划书功能优化**
34 +- ✅ 添加计划书卡片状态标记("生成中"/"已完成",黄色/绿色背景)
34 - ✅ 修复嵌套弹窗层级冲突(使用 provide/inject 模式) 35 - ✅ 修复嵌套弹窗层级冲突(使用 provide/inject 模式)
35 - ✅ 优化页面滚动加载并清理调试代码 36 - ✅ 优化页面滚动加载并清理调试代码
36 - ✅ 修复搜索栏清空按钮点击无效 37 - ✅ 修复搜索栏清空按钮点击无效
...@@ -41,10 +42,17 @@ pnpm dev:tt # 字节跳动小程序开发 ...@@ -41,10 +42,17 @@ pnpm dev:tt # 字节跳动小程序开发
41 - ✅ 增大产品中心和详情页的字体与图标尺寸 42 - ✅ 增大产品中心和详情页的字体与图标尺寸
42 - ✅ 添加全局背景色 43 - ✅ 添加全局背景色
43 - ✅ 增大全局字体和图标尺寸以提升可读性 44 - ✅ 增大全局字体和图标尺寸以提升可读性
45 +- ✅ 优化首页网格导航视觉体验
46 +- ✅ 重构"我的"页面为专业高端风格
47 +- ✅ 优化 ProductCard 组件视觉样式
48 +- ✅ 统一视觉柔和度和整体设计一致性
44 49
45 **认证优化** 50 **认证优化**
46 - ✅ 修复 401 重定向死循环和返回报错问题 51 - ✅ 修复 401 重定向死循环和返回报错问题
47 52
53 +**代码质量**
54 +- ✅ 从版本控制中移除本地配置文件 settings.local.json
55 +
48 **新增功能** 56 **新增功能**
49 - ✅ 消息列表和消息详情页 57 - ✅ 消息列表和消息详情页
50 - ✅ 产品中心页 58 - ✅ 产品中心页
...@@ -64,6 +72,7 @@ pnpm dev:tt # 字节跳动小程序开发 ...@@ -64,6 +72,7 @@ pnpm dev:tt # 字节跳动小程序开发
64 | SVG 图标加载失败(500 错误) | 使用 `import` 导入 | [经验教训](docs/lessons-learned.md#静态资源加载问题) | 72 | SVG 图标加载失败(500 错误) | 使用 `import` 导入 | [经验教训](docs/lessons-learned.md#静态资源加载问题) |
65 | 代码重复 3 次 | 抽取为 Composable | [经验教训](docs/lessons-learned.md#组件抽取与复用) | 73 | 代码重复 3 次 | 抽取为 Composable | [经验教训](docs/lessons-learned.md#组件抽取与复用) |
66 | 组件对象响应式警告 | 使用 `shallowRef` + `markRaw` | [经验教训](docs/lessons-learned.md#性能优化) | 74 | 组件对象响应式警告 | 使用 `shallowRef` + `markRaw` | [经验教训](docs/lessons-learned.md#性能优化) |
75 +| 业务状态标记显示 | 使用条件类名 + 语义化颜色 | [经验教训](docs/lessons-learned.md#案例-4-状态标记组件模式) |
67 | 嵌套弹窗层级冲突 | 使用 provide/inject 模式 | 最近提交记录(3357bed) | 76 | 嵌套弹窗层级冲突 | 使用 provide/inject 模式 | 最近提交记录(3357bed) |
68 | 401 重定向死循环 | 检查重定向拦截器逻辑 | 最近提交记录(6d2a4ec) | 77 | 401 重定向死循环 | 检查重定向拦截器逻辑 | 最近提交记录(6d2a4ec) |
69 78
......
...@@ -45,6 +45,24 @@ pnpm lint ...@@ -45,6 +45,24 @@ pnpm lint
45 -**组件复用** - "第 3 次出现原则"抽取 Composables 45 -**组件复用** - "第 3 次出现原则"抽取 Composables
46 -**可复用组件** - TabBar、NavHeader、IconFont 46 -**可复用组件** - TabBar、NavHeader、IconFont
47 47
48 +## 🆕 最新更新(2026-02)
49 +
50 +### 计划书功能优化
51 +-**状态标记** - 添加计划书卡片状态标记("生成中" / "已完成")
52 + - 黄色背景表示"生成中"状态
53 + - 绿色背景表示"已完成"状态
54 + - 使用条件类名动态切换样式
55 +
56 +### 视觉优化
57 +-**首页网格导航** - 优化导航图标视觉体验
58 +-**产品卡片** - 优化 ProductCard 组件视觉样式
59 +-**页面风格** - 重构"我的"页面为专业高端风格
60 +-**统一视觉** - 优化视觉柔和度和整体统一性
61 +
62 +### 代码质量
63 +-**移除本地配置** - 从版本控制中移除本地配置文件 settings.local.json
64 +-**文档更新** - 完善开发文档和经验教训总结
65 +
48 ## ⚡ 常见问题 66 ## ⚡ 常见问题
49 67
50 ### NutUI 组件使用陷阱 68 ### NutUI 组件使用陷阱
......
...@@ -2394,6 +2394,92 @@ const onConfirm = () => { ...@@ -2394,6 +2394,92 @@ const onConfirm = () => {
2394 2394
2395 --- 2395 ---
2396 2396
2397 +### 案例 4: 状态标记组件模式
2398 +
2399 +**问题**: 多个页面需要展示不同状态的业务对象(计划书、订单等)
2400 +
2401 +**解决方案**: 创建通用的状态标记组件模式
2402 +
2403 +```vue
2404 +<!-- 状态标记组件模式 -->
2405 +<template>
2406 + <view class="plan-item">
2407 + <!-- 状态标记:右上角显示 -->
2408 + <view class="ml-[24rpx]">
2409 + <view
2410 + :class="[
2411 + 'status-badge',
2412 + item.status === 'processing' ? 'status-processing' : 'status-generated'
2413 + ]"
2414 + >
2415 + {{ item.status === 'processing' ? '生成中' : '已完成' }}
2416 + </view>
2417 + </view>
2418 + </view>
2419 +</template>
2420 +
2421 +<style lang="less" scoped>
2422 +// 通用状态标记样式
2423 +.status-badge {
2424 + padding: 8rpx 16rpx;
2425 + border-radius: 9999rpx; // 圆角胶囊形状
2426 + font-size: 22rpx;
2427 + font-weight: 500;
2428 + white-space: nowrap;
2429 +}
2430 +
2431 +// 处理中状态:黄色背景
2432 +.status-processing {
2433 + background-color: #FEF3C7;
2434 + color: #D97706;
2435 +}
2436 +
2437 +// 已完成状态:绿色背景
2438 +.status-generated {
2439 + background-color: #D1FAE5;
2440 + color: #059669;
2441 +}
2442 +</style>
2443 +```
2444 +
2445 +**核心要点**:
2446 +1. **状态映射函数**: 将后端状态值映射为前端统一状态值
2447 + ```javascript
2448 + const mapOrderStatus = (status) => {
2449 + // 后端状态值 -> 前端状态值
2450 + const statusMap = {
2451 + '3': 'processing', // 生成中
2452 + '5': 'completed' // 已完成
2453 + }
2454 + return statusMap[status] || 'unknown'
2455 + }
2456 + ```
2457 +
2458 +2. **条件类名绑定**: 使用 `:class` 动态切换样式
2459 + ```vue
2460 + :class="[
2461 + 'status-badge',
2462 + item.status === 'processing' ? 'status-processing' : 'status-generated'
2463 + ]"
2464 + ```
2465 +
2466 +3. **视觉设计原则**:
2467 + -**颜色语义化**: 处理中用黄色,已完成用绿色
2468 + -**圆角胶囊**: `border-radius: 9999rpx` 实现完全圆角
2469 + -**内边距适中**: `padding: 8rpx 16rpx` 确保文字不拥挤
2470 + -**字体大小**: 22rpx 既不突兀也清晰可读
2471 +
2472 +4. **位置布局**: 放在卡片右上角,使用 `ml-[24rpx]` 与标题区隔开
2473 +
2474 +**收益**:
2475 +- 统一的状态展示模式,易于复用
2476 +- 清晰的视觉反馈,用户一目了然
2477 +- 易于扩展新状态(如"失败"、"待审核"等)
2478 +
2479 +**使用场景**: 计划书页面、订单列表、审批流程等
2480 +
2481 +---
2482 +
2397 ## 总结 2483 ## 总结
2398 2484
2399 ### 🎯 核心经验 2485 ### 🎯 核心经验
...@@ -2410,6 +2496,7 @@ const onConfirm = () => { ...@@ -2410,6 +2496,7 @@ const onConfirm = () => {
2410 10. **跨页面通信**: ⭐ **使用事件总线模式,LoadMoreList 页面避免使用 `useDidShow`**(防止意外刷新) 2496 10. **跨页面通信**: ⭐ **使用事件总线模式,LoadMoreList 页面避免使用 `useDidShow`**(防止意外刷新)
2411 11. **Mock 数据切换**: ⭐ **使用环境变量 `process.env.NODE_ENV` 自动判断,禁止硬编码** 2497 11. **Mock 数据切换**: ⭐ **使用环境变量 `process.env.NODE_ENV` 自动判断,禁止硬编码**
2412 12. **⚠️ 写代码前必查**: 先搜索项目中是否有类似实现,保持写法一致 2498 12. **⚠️ 写代码前必查**: 先搜索项目中是否有类似实现,保持写法一致
2499 +13. **状态标记模式**: ⭐ **使用条件类名 + 语义化颜色展示业务状态**(如"生成中"用黄色,"已完成"用绿色)
2413 2500
2414 ### 📚 推荐阅读 2501 ### 📚 推荐阅读
2415 2502
...@@ -2425,10 +2512,12 @@ const onConfirm = () => { ...@@ -2425,10 +2512,12 @@ const onConfirm = () => {
2425 2512
2426 --- 2513 ---
2427 2514
2428 -**最后更新**: 2026-02-09 2515 +**最后更新**: 2026-02-11
2429 **维护者**: Claude Code 2516 **维护者**: Claude Code
2430 **项目**: Manulife WeApp 2517 **项目**: Manulife WeApp
2431 2518
2432 **更新记录**: 2519 **更新记录**:
2520 +- 2026-02-11: 新增"状态标记组件模式"案例,记录计划书卡片状态标记实现经验
2433 - 2026-02-08: 新增 "跨页面通信" 章节,记录事件总线实现和 useDidShow 陷阱解决方案 2521 - 2026-02-08: 新增 "跨页面通信" 章节,记录事件总线实现和 useDidShow 陷阱解决方案
2434 - 2026-02-08: 新增 "开发工作流" 章节,记录 Mock 数据环境自动切换模式 2522 - 2026-02-08: 新增 "开发工作流" 章节,记录 Mock 数据环境自动切换模式
2523 +- 2026-02-09: 新增 "AmountKeyboard 组件开发案例"
......