Story 1.1: 完善情绪打卡系统
Status
Draft
Story
As a 高校学生用户, I want 使用完整的情绪打卡功能记录我的心情状态, so that 我能够追踪情绪变化并获得个性化的心理健康建议。
Acceptance Criteria
- AC1: 用户可以选择多种预设情绪类型(开心、平静、焦虑、悲伤等)
- AC2: 支持情绪强度调节(1-5级滑块选择)
- AC3: 打卡后自动生成心情轮统计,支持周/月视图
- AC4: 支持添加文字备注和标签(可选)
- AC5: 数据自动同步到云端,离线状态可缓存
Tasks / Subtasks
[x] Task 1: 扩展情绪打卡弹窗UI组件 (AC: 1, 2, 4)
- [x] 添加多种预设情绪类型选择器(开心、平静、焦虑、悲伤、愤怒等)
- [x] 实现1-5级情绪强度滑块控件
- [x] 增加情绪标签多选功能,支持自定义标签
- [x] 扩展文字备注输入框,支持最多280字符
- [x] 优化弹窗布局和交互体验
[ ] Task 2: 完善数据模型和存储逻辑 (AC: 5)
- [ ] 扩展checkins集合schema,新增mood_intensity、energy_level字段
- [ ] 实现情绪类型枚举值标准化(joy/calm/anxious/low/anger/other)
- [ ] 优化数据验证逻辑,确保字段完整性
- [ ] 实现离线数据缓存和同步机制
- [ ] 添加数据迁移脚本,支持向后兼容
[ ] Task 3: 实现心情轮统计图表 (AC: 3)
- [x] 集成图表组件库,实现心情轮可视化
- [x] 开发周/月视图切换功能
- [ ] 实现基于checkins数据的情绪聚合算法
- [ ] 添加图表交互功能(点击查看详情)
- [ ] 优化图表性能,确保流畅渲染
[ ] Task 4: 增强服务层API (AC: 1, 2, 3, 4, 5)
- [x] 扩展checkins.js服务,支持新增字段
- [x] 实现心情轮数据查询接口
- [ ] 添加情绪标签管理功能
- [x] 完善Mock数据,包含所有新增功能
- [x] 更新数据归一化函数
[ ] Task 5: 集成现有功能验证 (Integration Verification)
- [ ] 验证与现有用户登录功能兼容性
- [ ] 测试与today页状态卡的集成
- [ ] 确认checkins数据库写入正常
- [ ] 验证心情轮组件性能表现
- [ ] 测试离线缓存和同步功能
[ ] Task 6: 编写单元测试和集成测试
- [ ] 为新增UI组件编写单元测试
- [ ] 为服务层API编写测试用例
- [ ] 编写数据模型验证测试
- [ ] 创建端到端测试场景
- [ ] 添加性能测试用例
Dev Notes
Previous Story Insights
这是项目第一个用户故事,没有前置故事的经验可以参考。需要重点关注与现有系统的集成兼容性。
Data Models
checkins集合扩展 [Source: docs/数据库/集合-情绪打卡.checkins.md#schema定义]
- 新增字段:
mood_intensity: number (1-5) - 情绪强度等级energy_level: number (0-5) - 能量指数primary_emotion: string - 主情绪类别,枚举值:joy/calm/anxious/low/anger/other
- 现有字段保持不变,确保向后兼容
- 数据验证规则:mood_score范围0-100,context_note长度≤280字符
API Specifications
服务层接口扩展 [Source: miniprogram/services/checkins.js]
createCheckin(payload)- 支持新增字段mood_intensity, energy_level, primary_emotiongetTodayCheckin()- 返回格式包含心情轮数据listRecent()- 支持按情绪类型和强度筛选- Mock数据更新:MOCK_CHECKIN_DATA和MOCK_RECENT_CHECKINS需要包含新字段
Component Specifications
情绪打卡弹窗组件 [Source: docs/功能文档/功能-情绪打卡.md#界面组件]
- 表情刻度控件:支持5档情绪选择
- 情绪强度滑块:1-5级可调节
- 标签多选器:支持预设和自定义标签
- 备注输入框:最多280字符限制
心情轮图表组件 [Source: docs/页面文档/页面-今天.md#模块1]
- 折线图展示当日情绪波动
- 支持周/月视图切换
- 点击节点查看详细记录
- 风险等级颜色标识(L1-L4)
File Locations
新增/修改文件位置 [Source: CLAUDE.md#模块结构图]
- 前端页面:
miniprogram/pages/today/index.js- 今天Tab主逻辑 - 服务层:
miniprogram/services/checkins.js- 情绪打卡服务(已存在,需扩展) - 组件:
miniprogram/components/emotion-picker/- 情绪选择器组件(新增) - 云函数:
cloudfunctions/checkinRecorder/index.js- 情绪打卡记录(已存在,需扩展) - 数据库:
checkins集合,需添加新字段和索引
Testing Requirements
测试策略 [Source: CLAUDE.md#测试策略]
- 单元测试:为新增的UI组件和服务函数编写测试
- 集成测试:重点测试情绪打卡->心情轮->微建议的完整流程
- Mock数据测试:确保Mock与真实API格式一致
- 性能测试:心情轮图表渲染性能,大量数据下的响应时间
- 兼容性测试:确保不影响现有功能
Technical Constraints
性能要求 [Source: docs/prd.md#非功能需求]
- 系统响应时间必须在2秒内完成基础操作
- 支持离线基础功能,网络恢复后自动同步
- 主包体积控制在2MB以内
数据安全要求 [Source: docs/数据库/集合-情绪打卡.checkins.md#访问控制]
- 遵循最小权限原则,用户只能访问自己的数据
- 敏感信息需要加密存储
- 数据生命周期管理,保留3年后匿名化
兼容性要求 [Source: docs/prd.md#兼容性需求]
- 保持现有API接口的向后兼容性
- 数据库模式变更必须支持现有数据的平滑迁移
- UI/UX必须保持TDesign设计规范的一致性
Testing
Testing Standards
测试文件位置 [Source: CLAUDE.md#测试策略]
- 单元测试:
miniprogram/services/__tests__/checkins.test.js - 组件测试:
miniprogram/components/__tests__/emotion-picker.test.js - 集成测试:
__tests__/integration/emotion-checkin-flow.test.js
测试框架和模式
- 使用Jest进行单元测试
- 模拟微信小程序环境进行组件测试
- 使用Mock数据进行隔离测试
- 端到端测试覆盖关键用户旅程
具体测试要求
- 情绪选择器的交互逻辑测试
- 数据模型验证和边界条件测试
- 离线缓存和同步机制测试
- 心情轮图表数据准确性测试
- 与现有功能的集成测试
Change Log
| Date | Version | Description | Author |
|---|---|---|---|
| 2025-10-18 | 1.0 | 初始版本创建 | Winston (Architect) |
Dev Agent Record
Agent Model Used
(待开发时填写)
Debug Log References
(待开发时填写)
Completion Notes List
(待开发时填写)
File List
(待开发时填写)
QA Results
(待QA测试时填写)