docs: 更新项目文档
- lessons-learned.md: 新增"状态标记组件模式"案例 - README.md: 添加最新更新章节(计划书状态标记、UI优化) - CLAUDE.md: 更新最新功能和常见问题表格 Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
Showing
3 changed files
with
117 additions
and
1 deletions
| ... | @@ -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 组件开发案例" | ... | ... |
-
Please register or login to post a comment