# 简记 Memo - 项目重构规划文档 > 本文档面向前后端开发人员,统一规划「复盘、心情、待办、账单」四大核心模块的业务功能、接口定义与 UI 设计规范。 > 版本:v2.0 > 日期:2026-07-28 --- ## 一、项目概述与现状分析 ### 1.1 产品定位 「简记 Memo」是一款轻量级个人生活记录小程序,聚焦每日四大维度:**待办事项、账单收支、心情记录、每日复盘**。通过 AI 智能识别降低记录门槛,结合成长激励体系提升用户粘性。 ### 1.2 现有架构问题 | 问题类别 | 具体表现 | 影响 | |---------|---------|------| | **数据层** | 复盘模块仅使用本地 `uni.setStorageSync`,未接入后端 | 数据无法跨设备同步,易丢失 | | **接口层** | 首页需并发调用 3+ 接口获取当日数据 | 加载慢、代码冗余 | | **UI 层** | 四个核心页面头部、卡片、按钮、弹窗样式均不统一 | 体验割裂,维护成本高 | | **交互层** | 日历组件在首页/复盘/待办中重复实现 | 代码冗余,行为不一致 | | **交互层** | 列表滑动操作在待办和账单中实现方式不同 | 用户学习成本高 | ### 1.3 重构目标 1. **数据统一**:复盘模块全面接入后端,四模块数据全部云端同步 2. **接口聚合**:提供首页聚合接口,减少请求次数 3. **UI 统一**:制定设计规范,四模块页面风格、布局、交互高度一致 4. **组件复用**:抽取公共组件(日历、列表项、筛选器、模态框、空状态) 5. **操作丝滑**:统一动画曲线、过渡时长、触摸反馈 --- ## 二、四大模块业务功能定义 ### 2.1 模块总览 ``` ┌─────────────────────────────────────────────────────────────┐ │ 首页 (Dashboard) │ │ ┌─────────┐ ┌─────────┐ ┌─────────┐ ┌─────────┐ │ │ │ 待办 │ │ 账单 │ │ 心情 │ │ 复盘 │ 快捷入口 │ │ │ 3/5 │ │ +120 │ │ 😊 │ │ 已记录 │ │ │ └─────────┘ └─────────┘ └─────────┘ └─────────┘ │ │ ───────────────────────────────────────────────────────── │ │ AI 智能输入框:"开会花了50块,下午要写周报,心情不错" │ │ ───────────────────────────────────────────────────────── │ │ 今日概览:完成进度环 + 最近待办 + 最近账单 │ └─────────────────────────────────────────────────────────────┘ │ ┌─────────┬─────────┼─────────┬─────────┐ ▼ ▼ ▼ ▼ ▼ ┌──────┐ ┌──────┐ ┌──────┐ ┌──────┐ ┌──────┐ │ 待办 │ │ 心情 │ │ 账单 │ │ 复盘 │ │ 我的 │ │ 列表 │ │ 记录 │ │ 明细 │ │ 编辑 │ │ 中心 │ └──────┘ └──────┘ └──────┘ └──────┘ └──────┘ ``` ### 2.2 待办模块(Todo) **核心功能**: - 按日期创建、编辑、删除待办事项 - 支持优先级(高/中/低)、分类(工作/生活/学习)、时间段设置 - 支持批量选择与批量操作(完成/删除) - 按时间范围筛选(今日/本周/本月/自定义) - 按状态筛选(全部/待办/已完成) - 日历视图展示任务分布(有无任务、完成状态标记) - 关键词搜索 **新增功能规划**: - 待办重复规则(每日/每周/每月重复) - 待办提醒推送(依赖服务端定时任务) ### 2.3 心情模块(Mood) **核心功能**: - 每日选择心情 emoji(20 种表情) - 文字记录当日心情与感悟(200 字以内) - AI 心语小笺:根据心情生成治愈文案并生成分享卡片 - 心情日历:按月查看心情分布(已有 `moodCalendar` 页面) **新增功能规划**: - 心情周报/月报统计(情绪趋势曲线 + 高频心情标签) - 心情标签词云 ### 2.4 账单模块(Bill) **核心功能**: - 记录支出/收入账单(金额、分类、渠道、备注、日期) - 分类管理(预设 23 个分类 + 自定义分类) - 月度预算设置与进度追踪 - 多维度筛选(时间:今日/本周/本月/上月/本年/自定义;类型:全部/支出/收入) - 分类统计(支出/收入占比、横向滚动卡片) - 账单导出 **新增功能规划**: - 年度收支趋势图 - 自定义分类支持图标与颜色完整自定义 ### 2.5 复盘模块(Review) **核心功能**: - 按日期进行每日复盘 - 采用 **KPT 复盘法**:Keep(保持)、Problem(问题)、Try(尝试) - 复盘历史列表查看 - 复盘内容搜索 > **设计决策**:仅保留 KPT 一种复盘方法。理由:KPT 更简洁实用,3 个维度覆盖日常复盘需求,填写门槛低,适合小程序场景。GRAI 法(4 维度)更适合企业级项目复盘,个人日记场景偏重。 **重要改造点**: - 当前复盘数据仅保存在本地 Storage,**已全面接入后端接口** - 新增复盘历史列表页 - API 响应兼容嵌套格式 `{kpt: {keep, problem, try}}` 和扁平格式 `{keep, problem, try}` --- ## 三、接口文档 ### 3.1 接口设计原则 1. 统一请求方式:`POST` 2. 统一响应格式: ```json { "code": 200, "message": "success", "data": { ... } } ``` 3. 日期格式:`YYYY-MM-DD` 4. 月份格式:`YYYY-MM` ### 3.2 现有接口保留清单 以下接口已稳定运行,本次规划**完全保留**,仅做部分参数优化建议: #### 用户模块 | 接口 | 路径 | 说明 | |-----|------|------| | 微信登录 | `POST /user/login` | 保留 | | 获取用户信息 | `POST /user/info` | 保留 | | 更新用户信息 | `POST /user/edit` | 保留 | | 退出登录 | `POST /user/logout` | 保留 | | 获取用户配置 | `POST /user/config/info` | 保留 | | 编辑用户配置 | `POST /user/config/edit` | 保留 | | 获取头像列表 | `POST /user/avatar/list` | 保留 | #### 待办模块 | 接口 | 路径 | 说明 | |-----|------|------| | 添加待办 | `POST /todo/add` | 保留 | | 获取待办列表 | `POST /todo/list` | 保留,建议支持 `start_date` + `end_date` 范围查询 | | 删除待办 | `POST /todo/delete` | 保留 | | 完成/取消完成 | `POST /todo/done` | 保留 | | 编辑待办 | `POST /todo/edit` | 保留 | #### 账单模块 | 接口 | 路径 | 说明 | |-----|------|------| | 添加账单 | `POST /bill/add` | 保留 | | 编辑账单 | `POST /bill/edit` | 保留 | | 获取账单列表 | `POST /bill/list` | 保留,建议支持 `start_time` + `end_time` | | 删除账单 | `POST /bill/delete` | 保留 | | 获取月度统计 | `POST /bill/stat/month` | 保留 | | 获取分类统计 | `POST /bill/stat/category` | 保留 | | 导出账单 | `POST /bill/export` | 保留 | #### 预算模块 | 接口 | 路径 | 说明 | |-----|------|------| | 获取月度预算 | `POST /budget/get` | 保留 | | 设置月度预算 | `POST /budget/set` | 保留 | | 删除月度预算 | `POST /budget/delete` | 保留 | #### 分类管理模块 | 接口 | 路径 | 说明 | |-----|------|------| | 获取自定义分类 | `POST /category/list` | 保留 | | 添加自定义分类 | `POST /category/add` | 保留 | | 删除自定义分类 | `POST /category/delete` | 保留 | #### 心情模块 | 接口 | 路径 | 说明 | |-----|------|------| | 获取某天心情 | `POST /mood/get` | 保留 | | 保存心情 | `POST /mood/save` | 保留 | | 获取心情列表 | `POST /mood/list` | 保留 | | 删除心情 | `POST /mood/delete` | 保留 | | 获取 AI 心情结果 | `POST /ai/mood/result` | 保留 | | 重新生成 AI 心情 | `POST /ai/mood/regenerate` | 保留 | #### 成长系统模块 | 接口 | 路径 | 说明 | |-----|------|------| | 获取成长信息 | `POST /growth/info` | 保留 | | 获取成就列表 | `POST /growth/achievements` | 保留 | | 获取成长规则 | `POST /growth/rules` | 保留 | #### AI 模块 | 接口 | 路径 | 说明 | |-----|------|------| | AI 智能分类 | `POST /ai/classify` | 保留 | #### 邮箱/安全模块 | 接口 | 路径 | 说明 | |-----|------|------| | 获取图形验证码 | `POST /captcha/digit` | 保留 | | 发送邮箱验证码 | `POST /user/email/code` | 保留 | | 设置/修改邮箱 | `POST /user/email/set` | 保留 | | 邮箱登录 | `POST /user/email/login` | 保留 | | 注册 | `POST /user/register` | 保留 | | 重置密码 | `POST /user/reset-password` | 保留 | | 修改密码 | `POST /user/change-password` | 保留 | | 检查邮箱存在 | `POST /user/email/exists` | 保留 | | 绑定微信 | `POST /user/bind-wechat` | 保留 | | 检查微信绑定 | `POST /user/check-wechat` | 保留 | --- ### 3.3 复盘模块接口(已全面接入后端) 复盘模块已从本地 `uni.setStorageSync` 迁移至后端接口。前端同时兼容嵌套格式和扁平格式的响应数据。 #### 3.3.1 保存复盘 ```http POST /review/save ``` **请求参数**: | 字段 | 类型 | 必填 | 说明 | |-----|------|------|------| | date | string | 是 | 日期 YYYY-MM-DD | | method | string | 是 | 复盘方法:固定为 `kpt` | | kpt | object | 是 | KPT 数据 | | kpt.keep | string | 否 | 保持 | | kpt.problem | string | 否 | 问题 | | kpt.try | string | 否 | 尝试 | > 注:GRAI 法已移除,method 固定传 `kpt`。后端保留 `grai` 字段兼容历史数据。 **响应数据**: ```json { "id": "review_123", "date": "2026-07-28", "method": "kpt", "kpt": { "keep": "今天按时完成了所有待办", "problem": "下午注意力不集中", "try": "明天尝试番茄工作法" }, "created_at": "2026-07-28T22:00:00Z", "updated_at": "2026-07-28T22:00:00Z" } ``` > **兼容说明**:前端同时支持后端返回嵌套格式 `{kpt: {keep, problem, try}}` 和扁平格式 `{keep, problem, try}`,确保接口对接顺畅。 #### 3.3.2 获取单日复盘 ```http POST /review/get ``` **请求参数**: | 字段 | 类型 | 必填 | 说明 | |-----|------|------|------| | date | string | 是 | 日期 YYYY-MM-DD | **响应数据**:同保存复盘响应,无数据时返回 `null` #### 3.3.3 获取复盘列表 ```http POST /review/list ``` **请求参数**: | 字段 | 类型 | 必填 | 说明 | |-----|------|------|------| | startDate | string | 否 | 开始日期 YYYY-MM-DD | | endDate | string | 否 | 结束日期 YYYY-MM-DD | | method | string | 否 | 筛选方法:`kpt`(历史可能含 `grai` 数据) | | keyword | string | 否 | 搜索关键词(搜索 keep/problem/try/goal 等字段) | | page | number | 否 | 页码,默认 1 | | pageSize | number | 否 | 每页条数,默认 20 | **响应数据**: ```json { "list": [ { "id": "review_123", "date": "2026-07-28", "method": "kpt", "summary": "今天按时完成了所有待办...", "created_at": "2026-07-28T22:00:00Z" } ], "total": 100, "page": 1, "pageSize": 20 } ``` #### 3.3.4 删除复盘 ```http POST /review/delete ``` **请求参数**: | 字段 | 类型 | 必填 | 说明 | |-----|------|------|------| | id | string | 是 | 复盘 ID | --- ### 3.4 新增接口 #### 3.4.1 首页聚合数据接口(推荐优先实现) **目的**:替代首页并发请求 `getTodoList` + `getBillList` + `getMoodByDate`,一接口返回当日全部概况。 ```http POST /dashboard/daily ``` **请求参数**: | 字段 | 类型 | 必填 | 说明 | |-----|------|------|------| | date | string | 是 | 日期 YYYY-MM-DD,不传默认今天 | **响应数据**: ```json { "date": "2026-07-28", "todo": { "total": 5, "done": 3, "undone": 2, "list": [ { "id": "1", "title": "写周报", "done": 0, "priority": 1, "category": "work" } ] }, "bill": { "expend": 128.5, "income": 0, "balance": -128.5, "list": [ { "id": "1", "type": 1, "money": 28.5, "cate": "food", "note": "午餐" } ] }, "mood": { "recorded": true, "emoji": "😊", "content": "今天心情不错,工作顺利", "ai_generated": true, "ai_text": "阳光正好,微风不燥..." }, "review": { "recorded": true, "method": "kpt" }, "growth": { "todayExp": 45, "maxDailyExp": 120, "streakDays": 7 } } ``` #### 3.4.2 待办统计接口 ```http POST /todo/stat ``` **请求参数**: | 字段 | 类型 | 必填 | 说明 | |-----|------|------|------| | start_date | string | 是 | 开始日期 | | end_date | string | 是 | 结束日期 | **响应数据**: ```json { "total": 50, "done": 42, "undone": 8, "completion_rate": 84.0, "by_category": { "work": { "total": 20, "done": 18 }, "life": { "total": 20, "done": 16 }, "study": { "total": 10, "done": 8 } }, "by_priority": { "1": { "total": 10, "done": 9 }, "2": { "total": 25, "done": 21 }, "3": { "total": 15, "done": 12 } } } ``` #### 3.4.3 心情统计接口 ```http POST /mood/stat ``` **请求参数**: | 字段 | 类型 | 必填 | 说明 | |-----|------|------|------| | month | string | 是 | 月份 YYYY-MM | **响应数据**: ```json { "month": "2026-07", "total_days": 28, "recorded_days": 25, "mood_distribution": { "😊": 10, "😌": 8, "😔": 4, "😤": 2, "😴": 1 }, "weekly_trend": [ { "week": "W1", "avg_score": 4.2 }, { "week": "W2", "avg_score": 3.8 }, { "week": "W3", "avg_score": 4.5 }, { "week": "W4", "avg_score": 4.0 } ], "top_phrases": ["开心", "平静", "工作顺利"] } ``` #### 3.4.4 账单聚合统计接口(整合现有接口) **目的**:将 `getMonthStat` + `getCateStat` 整合为一个更灵活的统计接口。 ```http POST /bill/stat/aggregate ``` **请求参数**: | 字段 | 类型 | 必填 | 说明 | |-----|------|------|------| | start_date | string | 是 | 开始日期 | | end_date | string | 是 | 结束日期 | | type | number | 否 | 类型筛选 1-支出 2-收入,不传则全部 | **响应数据**: ```json { "total_expend": 3250.5, "total_income": 8000.0, "balance": 4749.5, "budget": { "amount": 5000, "used": 3250.5, "remaining": 1749.5, "progress": 65.0 }, "by_category": [ { "cate": "food", "label": "餐饮", "icon": "🍚", "color": "#ff6b6b", "expend": 1200, "income": 0, "expend_rate": 36.9, "income_rate": 0 } ], "by_channel": [ { "channel": "wechat", "label": "微信", "amount": 2000 } ], "daily_trend": [ { "date": "2026-07-01", "expend": 100, "income": 0 }, { "date": "2026-07-02", "expend": 50, "income": 8000 } ] } ``` --- ### 3.5 接口整合与废弃建议 | 现有接口 | 建议 | 说明 | |---------|------|------| | `POST /bill/stat/month` | **保留但标记为兼容** | 建议前端逐步迁移到 `/bill/stat/aggregate` | | `POST /bill/stat/category` | **保留但标记为兼容** | 同上 | | `POST /review/save` | **修复接入** | 后端需确保接口可用,前端需替换本地存储逻辑 | | `POST /review/get` | **修复接入** | 同上 | | `POST /review/list` | **修复接入** | 同上,前端需新增复盘列表页 | | `POST /review/delete` | **修复接入** | 同上 | --- ## 四、统一 UI 设计规范 ### 4.1 设计原则 1. **温暖自然**:沿用现有暖陶/抹茶/暮蓝等主题色系,保持低饱和度、手作感 2. **统一间距**:建立 4rpx 基栅格,所有间距为 4 的倍数 3. **统一圆角**:卡片 20rpx,按钮 14rpx,标签 12rpx,头像/图标 16rpx 4. **统一阴影**:仅卡片使用阴影 `0 8rpx 24rpx ${shadowLight}`,避免过度层级 5. **操作反馈**:所有可点击元素添加 `:active` 态,缩放 0.96-0.98,过渡 0.2s ### 4.2 页面布局骨架(四模块统一) 所有核心模块页面采用统一的 **三段式布局**: ``` ┌─────────────────────────────────────┐ │ Page Header (固定高度 ~120rpx) │ │ ┌──────┬──────────────┬────────┐ │ │ │ 返回 │ 标题+日期 │ 操作Btn │ │ │ └──────┴──────────────┴────────┘ │ ├─────────────────────────────────────┤ │ Filter Bar (可选,固定或吸顶) │ │ [全部][今日][本周][本月] ... │ ├─────────────────────────────────────┤ │ │ │ Main Content (scroll-view) │ │ ┌─────────────────────────────┐ │ │ │ Stat Cards 统计卡片 │ │ │ └─────────────────────────────┘ │ │ ┌─────────────────────────────┐ │ │ │ Content List / Form │ │ │ └─────────────────────────────┘ │ │ │ ├─────────────────────────────────────┤ │ Footer Action (固定底部) │ │ ┌─────────────────────────────┐ │ │ │ [ 保存 / 添加 / 提交 ] │ │ │ └─────────────────────────────┘ │ └─────────────────────────────────────┘ ``` ### 4.3 色彩规范(基于现有主题系统) 沿用 `utils/theme.js` 中的 `THEME_PRESETS`,确保所有页面 100% 使用 `themeConfig` 绑定,禁止硬编码颜色。 | 用途 | 主题变量 | 默认值(暖陶) | |-----|---------|--------------| | 页面背景 | `themeConfig.bgColor` | `#FAF6F0` | | 卡片背景 | `themeConfig.cardBgColor` | `#FFFCF8` | | 主文本 | `themeConfig.textPrimary` | `#3D3630` | | 次要文本 | `themeConfig.textSecondary` | `#7A7066` | | 禁用文本 | `themeConfig.textDisabled` | `#B0A89E` | | 主题色 | `themeConfig.primaryColor` | `#C68E3F` | | 辅助色 | `themeConfig.secondaryColor` | `#4A9E7F` | | 成功/收入 | `themeConfig.successColor` | `#5B9E6E` | | 危险/支出 | `themeConfig.dangerColor` | `#C75B4A` | | 警告 | `themeConfig.warningColor` | `#D4A24A` | | 边框 | `themeConfig.borderColor` | `#E8E2DA` | | 轻边框 | `themeConfig.borderLight` | `#F2EDE6` | | 渐变按钮 | `themeConfig.gradientSoft` | `linear-gradient(135deg, #C68E3F, #D4AA60)` | | 阴影轻 | `themeConfig.shadowLight` | `rgba(61,54,48,0.04)` | ### 4.4 字体规范 | 元素 | 字号 | 字重 | 行高 | |-----|------|------|------| | 页面大标题 | 36rpx | 700 | 1.2 | | 页面副标题/日期 | 24rpx | 500 | 1.4 | | 卡片标题 | 30rpx | 700 | 1.3 | | 正文内容 | 28rpx | 400 | 1.6 | | 标签/辅助文字 | 22rpx | 500 | 1.4 | | 金额数字 | 34rpx | 700 | 1.0 | | 按钮文字 | 32rpx | 600 | 1.0 | ### 4.5 公共组件规范 #### 4.5.1 页面头部(PageHeader) ```vue ``` **样式规范**: - 高度:自适应,内边距 `24rpx 36rpx` - 顶部安全区:`padding-top: calc(24rpx + env(safe-area-inset-top))` - 标题字号:36rpx,700 - 副标题字号:24rpx,500 - 右侧按钮:68rpx × 68rpx,圆角 20rpx,背景 `cardBgColor` - 按钮点击态:`transform: scale(0.93); transition: all 0.25s ease` #### 4.5.2 统一卡片(AppCard) ```vue ``` **样式规范**: - 背景:`themeConfig.cardBgColor` - 圆角:20rpx - 内边距:24rpx(可根据内容调整 20-32rpx) - 阴影:`0 8rpx 24rpx ${themeConfig.shadowLight}` - 边框:2rpx solid transparent(仅作为占位,实际靠阴影区分层级) #### 4.5.3 统一按钮 **主按钮(底部固定)**: - 宽度:100%(减去左右边距) - 高度:108rpx - 圆角:100rpx(全圆角胶囊) - 背景:`themeConfig.gradientVibrant` - 文字:32rpx,#fff,600 - 阴影:`0 12rpx 36rpx ${themeConfig.shadowColor}` - 禁用态:`opacity: 0.5; pointer-events: none` **次要按钮(模态框内)**: - 高度:88rpx-96rpx - 圆角:14rpx - 取消按钮:背景 `rgba(0,0,0,0.05)`,文字 `textSecondary` - 确认按钮:背景 `gradientSoft`,文字 #fff **胶囊筛选标签**: - 内边距:10rpx 24rpx - 圆角:22rpx - 默认态:背景 `borderColor`,文字 `textSecondary` - 激活态:背景 `primaryColor`,文字 #fff - 过渡:`all 0.25s ease` #### 4.5.4 统一模态框(BottomSheet / CenterModal) **底部弹出(用于新增/编辑)**: - 宽度:100% - 圆角:顶部 24rpx - 背景:`cardBgColor` - 动画:`slideUp 0.3s ease` - 最大高度:85vh - 底部安全区:`padding-bottom: calc(24rpx + env(safe-area-inset-bottom))` **居中弹窗(用于确认/设置)**: - 宽度:600rpx - 圆角:20rpx - 背景:`cardBgColor` - 动画:`popUp 0.25s ease` #### 4.5.5 统一日历组件(InlineCalendar) 当前首页、复盘页各自实现了一套日历。**必须抽取为统一组件**。 **组件能力**: - 月份切换(上一月/下一月) - 日期选择回调 - 标记日期(传入有数据的日期数组) - 今日高亮 - 选中态高亮(背景 `gradientSoft`,文字 #fff) **样式规范**: - 背景:`cardBgColor` - 圆角:20rpx - 内边距:24rpx - 星期标题:20rpx,600,`textSecondary` - 日期格子:72rpx × 72rpx,圆角 10rpx - 非当月日期:`opacity: 0.25` - 数据标记点:8rpx 圆点,`primaryColor` #### 4.5.6 统一列表项(SwipeableItem) 当前待办和账单的滑动删除/编辑逻辑各自实现,需统一。 **组件能力**: - 左滑/右滑露出操作按钮 - 支持多个操作按钮(编辑、删除、完成) - 点击主区域收起滑动菜单 - 同时只允许一项展开 **样式规范**: - 滑动按钮宽度:80rpx/个 - 按钮高度:100% - 编辑按钮:`primaryColor` - 删除按钮:`dangerColor` - 完成按钮:`successColor` - 文字:24rpx,#fff - 滑动过渡:`transform 0.3s ease` #### 4.5.7 统一空状态(EmptyState) 当前已存在 `components/EmptyState.vue`,**所有列表页面强制使用**。 **规范**: - 图标:48rpx emoji 或 FaIcon - 标题:26rpx,600,`textSecondary` - 描述:22rpx,`textDisabled` - 操作按钮(可选):主按钮样式 mini 版 --- ## 五、各模块页面详细设计 ### 5.1 首页(pages/index/index) **定位**:今日 Dashboard,聚合展示 + AI 快速录入。 **布局调整**: 1. **顶部问候区**:保留现有头像 + 问候语 + 日期显示,统一样式 2. **AI 智能记录卡片**: - 优化为更明显的录入入口 - 快捷标签横向滚动(替代当前换行) - 结果提示条动画优化 3. **快捷入口四宫格**: - 统一为 AppCard 样式 - 图标背景色使用各模块主题色 + 15% 透明度 - 待办显示 `待完成/总数`,账单显示 `今日收支`,心情显示 `今日emoji或未记录`,复盘显示 `已完成/未记录` 4. **今日概览卡片**: - 保留完成进度环 - 增加「复盘状态」行:今日是否已复盘 - 最近待办列表最多展示 3 条(当前 2 条) - 增加「最近账单」3 条预览(新增) **数据加载优化**: - 优先调用新增接口 `POST /dashboard/daily` - 失败时降级为现有并发请求 --- ### 5.2 待办模块(pages/todo/todo) **定位**:任务管理中心,强调高效规划与批量操作。 **布局重构**: ``` ┌─────────────────────────────────────┐ │ Header: 待办清单 / 高效规划每一天 │ │ [批量模式Btn] │ ├─────────────────────────────────────┤ │ SearchBar: 🔍 搜索待办 │ ├─────────────────────────────────────┤ │ FilterRow1: [今日][本周][本月][自定义]│ │ FilterRow2: [全部][待办][已完成] │ ├─────────────────────────────────────┤ │ InlineCalendar(时间筛非今日时显示) │ ├─────────────────────────────────────┤ │ ListHeader: ● 任务列表 12项 │ ├─────────────────────────────────────┤ │ ┌─────────────────────────────┐ │ │ │ ☐ 🔴 写周报 14:00 │ │ │ │ 工作 · 今天 │ │ │ └─────────────────────────────┘ │ │ ┌─────────────────────────────┐ │ │ │ ☑ 🟡 买咖啡豆 │ │ │ │ 生活 · 今天 [已完成] │ │ │ └─────────────────────────────┘ │ ├─────────────────────────────────────┤ │ EmptyState(无数据时) │ ├─────────────────────────────────────┤ │ [+] 悬浮添加按钮 │ └─────────────────────────────────────┘ ``` **样式统一**: - 页面背景:`bgColor` - 所有卡片使用 AppCard 规范 - 任务列表项使用 SwipeableItem 组件 - 优先级标识统一为圆形徽章(🔴🟡🟢 或 FaIcon),尺寸 40rpx - 批量操作底部栏:固定底部,背景 `cardBgColor`,阴影 `shadowMedium` **交互优化**: - 任务完成动画:点击后 checkbox 缩放弹跳 `cubic-bezier(0.34, 1.56, 0.64, 1)` - 新增/编辑弹窗统一为 BottomSheet,字段分区:标题 > 日期/优先级 > 时间段 > 分类 > 备注 --- ### 5.3 心情模块(pages/mood/mood) **定位**:情绪记录与治愈空间,强调温暖与仪式感。 **布局重构**: ``` ┌─────────────────────────────────────┐ │ Header: 记录心情 / 7月28日 │ │ [心情日历Btn] │ ├─────────────────────────────────────┤ │ Hero区域: │ │ ┌─────────────────────────────┐ │ │ │ 今天心情如何? │ │ │ │ 选择最贴合此刻感受的... │ │ │ └─────────────────────────────┘ │ ├─────────────────────────────────────┤ │ MoodSelector(5列网格) │ │ 😊 😌 😔 😤 😴 │ │ 😰 😄 🤔 😢 😎 │ │ ... │ ├─────────────────────────────────────┤ │ SelectedBanner(选中后展示) │ │ ┌─────────────────────────────┐ │ │ │ 😊 开心 │ │ │ │ 今天是开心的一天 │ │ │ └─────────────────────────────┘ │ ├─────────────────────────────────────┤ │ InputCard: 想对自己说 │ │ ┌─────────────────────────────┐ │ │ │ 记录此刻的心情与感悟... │ │ │ │ ─────────── 0/200 │ │ │ └─────────────────────────────┘ │ ├─────────────────────────────────────┤ │ QuickPhrases: 快捷短语流式布局 │ │ [今天很棒!] [工作很累] [加油呀] ... │ ├─────────────────────────────────────┤ │ [ 发送心情 ✨ ] │ └─────────────────────────────────────┘ ``` **样式统一**: - 心情选项卡片:110rpx × 110rpx,圆形,背景 `cardBgColor` - 选中态:缩放 1.15,背景 `primaryColor + 12%`,边框 `primaryColor` - 过渡动画:`all 0.35s cubic-bezier(0.34, 1.56, 0.64, 1)` - 文字输入区:AppCard 样式,内边距 28rpx - 进度条:10rpx 高度,圆角 100rpx,背景 `borderLight`,填充 `gradientSoft` **交互优化**: - 心情选中后,banner 区域淡入上移 - 保存成功后触发 AI 生成,弹窗使用居中 Modal,展示加载/成功/失败状态 - AI 结果卡片支持「换一换」和「保存图片」 --- ### 5.4 账单模块(pages/bill/bill) **定位**:收支明细与财务概览,强调数据清晰与预算控制。 **布局重构**: ``` ┌─────────────────────────────────────┐ │ Header: 记账 / 记录每一笔收支 │ │ [预算设置Btn] │ ├─────────────────────────────────────┤ │ SearchBar: 🔍 搜索备注/分类 │ ├─────────────────────────────────────┤ │ FilterRow1: [全部][支出][收入] │ │ FilterRow2: [今日][本周][本月][上月]..│ ├─────────────────────────────────────┤ │ BudgetCard(本月/上月预算进度,可选) │ │ 本月预算 ¥5000 [========>--] 65% │ ├─────────────────────────────────────┤ │ StatGrid(4宫格统计卡片) │ │ ┌──────┐┌──────┐┌──────┐┌──────┐ │ │ │总支出 ││总收入 ││周期结余││累计结余│ │ │ │¥3250 ││¥8000 ││+¥4749││+¥4749│ │ │ └──────┘└──────┘└──────┘└──────┘ │ ├─────────────────────────────────────┤ │ CateStat(分类统计) │ │ [餐饮¥1200] [交通¥300] [购物¥800]... │ ├─────────────────────────────────────┤ │ BillList(账单列表) │ │ ┌─────────────────────────────┐ │ │ │ 🍚 餐饮 午餐 -¥28.5 │ │ │ │ 微信 · 07/28 │ │ │ └─────────────────────────────┘ │ ├─────────────────────────────────────┤ │ [+] 悬浮添加按钮 │ └─────────────────────────────────────┘ ``` **样式统一**: - 统计 4 宫格:每个格子为 AppCard,内部图标 48rpx,金额 26rpx 700,标签 20rpx - 分类统计:≤2 个时纵向满宽卡片,>2 个时横向滚动卡片(宽度 200rpx) - 分类图标:56rpx × 56rpx,圆角 16rpx,白色图标文字 - 账单列表项:高度 140rpx,使用 SwipeableItem,左滑显示编辑+删除 - 金额颜色:支出 `dangerColor`,收入 `successColor` **交互优化**: - 分类统计卡片点击后筛选对应分类,列表实时过滤 - 记账弹窗(BottomSheet)分区:类型切换(支出/收入大按钮)> 金额输入(大字号)> 快捷金额 > 分类网格 > 渠道选择 > 备注 > 日期 > 底部按钮 - 金额输入框获得焦点时自动弹出数字键盘 --- ### 5.5 复盘模块(pages/review/review + 新增 reviewList) **定位**:每日反思与成长记录,强调结构化思考。 **重大改造**: 1. 现有 `review.vue` 改为**复盘编辑页** 2. 新增 `pages/review/reviewList.vue` 为**复盘历史列表页** 3. 所有数据从本地 Storage 迁移到后端接口 4. **仅保留 KPT 复盘法**,移除 GRAI 方法切换 #### 5.5.1 复盘编辑页(review.vue) ``` ┌─────────────────────────────────────┐ │ Header: 今日复盘 / 7月28日 │ │ [日历Btn] [历史Btn] │ ├─────────────────────────────────────┤ │ IntroCard: 💡 KPT复盘法 │ │ 通过记录做得好的、遇到的问题... │ ├─────────────────────────────────────┤ │ Card 1: Keep(保持) │ │ ┌─────────────────────────────┐ │ │ │ 💡 做得好的地方 │ │ │ │ ─────────────────────────── │ │ │ │ 今天按时完成了所有待办... │ │ │ │ ─────────── 45/500 │ │ │ └─────────────────────────────┘ │ │ Card 2: Problem(问题) │ │ ┌─────────────────────────────┐ │ │ │ ⚠️ 遇到的挑战 │ │ │ │ ─────────────────────────── │ │ │ │ 下午注意力不集中... │ │ │ │ ─────────── 12/500 │ │ │ └─────────────────────────────┘ │ │ Card 3: Try(尝试) │ │ ┌─────────────────────────────┐ │ │ │ 🚀 改进方向 │ │ │ │ ─────────────────────────── │ │ │ │ 明天尝试番茄工作法... │ │ │ │ ─────────── 28/500 │ │ │ └─────────────────────────────┘ │ ├─────────────────────────────────────┤ │ [ 保存复盘 ✨ ] │ └─────────────────────────────────────┘ ``` **样式统一**: - 介绍卡片:AppCard,左侧图标 56rpx,圆角 16rpx - 输入卡片:AppCard,内边距 26rpx - 卡片头部:图标 wrap 60rpx + 标题 30rpx 700 + 副标题 24rpx - 输入框:min-height 160rpx,28rpx,行高 1.8 - 底部进度条:8rpx 高度 + 字数统计 **交互优化**: - 日期切换使用 InlineCalendar 组件 - 离开页面时自动保存草稿到本地 Storage #### 5.5.2 复盘历史列表页(新增 reviewList.vue) **路由**:`pages/review/reviewList` ``` ┌─────────────────────────────────────┐ │ Header: 复盘历史 / 回顾与成长 │ ├─────────────────────────────────────┤ │ Filter: 🔍搜索 │ ├─────────────────────────────────────┤ │ ┌─────────────────────────────┐ │ │ │ 07月28日 周一 │ │ │ │ 保持:今天按时完成了所有待办... │ │ │ └─────────────────────────────┘ │ │ ┌─────────────────────────────┐ │ │ │ 07月27日 周日 │ │ │ │ 保持:专注度很高... │ │ │ └─────────────────────────────┘ │ └─────────────────────────────────────┘ ``` - 列表项使用 AppCard,点击后进入复盘编辑页查看详情 - 支持按日期范围筛选 --- ### 5.6 我的心情日历(pages/moodCalendar/moodCalendar) **定位**:月度心情可视化回顾。 **布局优化**: - 顶部月份切换器统一样式(与 InlineCalendar 一致) - 日历格子内展示当日心情 emoji(28rpx) - 底部增加「本月心情统计」卡片: - 心情分布横向条形图 - 高频词汇标签 - 平均心情评分 --- ## 六、公共组件开发清单 | 组件名 | 路径 | 用途 | 优先级 | |-------|------|------|--------| | `PageHeader` | `components/PageHeader.vue` | 统一页面头部 | 高 | | `AppCard` | `components/AppCard.vue` | 统一卡片容器 | 高 | | `InlineCalendar` | `components/InlineCalendar.vue` | 内联日历(选择/展示) | 高 | | `SwipeableItem` | `components/SwipeableItem.vue` | 滑动列表项 | 高 | | `CapsuleFilter` | `components/CapsuleFilter.vue` | 胶囊筛选标签组 | 高 | | `BottomSheet` | `components/BottomSheet.vue` | 底部弹出模态框 | 高 | | `CenterModal` | `components/CenterModal.vue` | 居中模态框 | 高 | | `StatCard` | `components/StatCard.vue` | 统计数字卡片 | 中 | | `ProgressBar` | `components/ProgressBar.vue` | 进度条(预算/经验等) | 中 | | `EmptyState` | `components/EmptyState.vue` | 空状态(已存在,需推广到所有页面) | 高 | --- ## 七、数据结构定义 ### 7.1 待办项(TodoItem) ```typescript interface TodoItem { id: string; title: string; date: string; // YYYY-MM-DD done: number; // 0-未完成 1-已完成 priority: number; // 1-高 2-中 3-低 category: string; // work / life / study start_time?: string; // HH:MM end_time?: string; // HH:MM remark?: string; repeat_type?: number; // 0-不重复 1-每日 2-每周 3-每月 created_at: string; updated_at: string; } ``` ### 7.2 账单项(BillItem) ```typescript interface BillItem { id: string; type: number; // 1-支出 2-收入 money: string; // 金额字符串,保留两位小数 cate: string; // 分类 value channel?: string; // 支付渠道 note?: string; date: string; // YYYY-MM-DD created_at: string; } ``` ### 7.3 心情项(MoodItem) ```typescript interface MoodItem { id: string; date: string; // YYYY-MM-DD emoji: string; // emoji 字符 content?: string; // 文字内容 ai_text?: string; // AI 生成文案 ai_image_url?: string; generate_count?: number; created_at: string; } ``` ### 7.4 复盘项(ReviewItem) ```typescript interface ReviewItem { id: string; date: string; // YYYY-MM-DD method: 'kpt'; // 固定为 kpt(历史数据可能含 'grai') kpt?: { keep: string; problem: string; try: string; }; created_at: string; updated_at: string; } ``` --- ## 八、开发顺序建议 ### 第一阶段:基础设施 ✅ 已完成 1. ✅ 开发公共组件:`AppCard`、`PageHeader`、`CapsuleFilter`、`BottomSheet`、`CenterModal` 2. ✅ 开发 `InlineCalendar`、`SwipeableItem`、`ProgressBar`、`SkeletonScreen` 组件 3. ✅ 开发 `themeMixin`、`growthModalMixin`、`moodMixin` 混入 4. ✅ 实现请求缓存(`apiCache.js`)和请求去重机制 ### 第二阶段:接口对接 ✅ 已完成 1. ✅ 前端复盘模块全面接入后端 API(`saveReview`、`getReviewByDate`、`getReviewList`、`deleteReview`) 2. ✅ 新增聚合接口 `getDashboardDaily`(首页 3 合 1) 3. ✅ 新增统计接口 `getTodoStat`、`getMoodStat`、`getBillAggregateStat` 4. ✅ 移除复盘模块本地 Storage 逻辑(保留草稿自动保存) 5. ✅ 修复字体加载 ERR_CACHE_MISS(移除 CSS @font-face 本地路径) ### 第三阶段:页面重构 ✅ 已完成 1. ✅ 重构 `pages/review/review.vue`,接入后端 + 统一 UI + 仅保留 KPT 法 2. ✅ 新增 `pages/review/reviewList.vue` 复盘历史列表 3. ✅ 重构 `pages/todo/todo.vue`,接入公共组件 4. ✅ 重构 `pages/mood/mood.vue`,接入公共组件 5. ✅ 重构 `pages/bill/bill.vue`,接入公共组件 6. ✅ 优化 `pages/index/index.vue`,接入聚合接口 ### 第四阶段:体验优化 ✅ 已完成 1. ✅ 统一所有页面过渡动画(pageFadeIn、cardEnter、theme-transition) 2. ✅ 优化列表加载骨架屏(SkeletonScreen 组件,支持 list/card/stats/dashboard/form 布局) 3. ✅ 空状态全覆盖(EmptyState 组件) 4. ✅ 请求缓存与去重(apiCache.js + request.js cache 选项) --- ## 九、注意事项 1. **复盘数据迁移**:复盘由本地改为云端,老用户本地数据需考虑提示「历史数据将保留在本地,新复盘将同步到云端」,或在版本更新时提供一次性上传引导。 2. **接口兼容性**:`POST /todo/list` 现有参数为 `date`,建议后端同时支持 `start_date` + `end_date` 以适配日历范围查询,保持向后兼容。 3. **主题一致性**:所有重构页面必须 100% 使用 `themeConfig` 变量,禁止任何硬编码颜色值。 4. **安全区适配**:所有固定底部操作栏必须添加 `env(safe-area-inset-bottom)` 适配。 5. **性能优化**:列表页使用虚拟滚动或分页加载,避免一次性渲染大量数据。 6. **字体加载**:微信小程序中字体仅通过 JS `uni.loadFontFace()` + base64 加载,CSS `@font-face` 本地路径会导致 ERR_CACHE_MISS,已移除。 7. **复盘方法简化**:仅保留 KPT 复盘法,GRAI 法已移除。历史数据可能包含 GRAI 记录,列表页兼容展示。 --- *文档结束。如有疑问请在开发群中沟通确认。*