feat(api): 集成后端API,实现数据持久化和用户登录

- 新增token管理和用户信息状态,支持基于token的自动登录
- 实现登录或注册接口调用,自动根据URL参数完成身份验证
- 从后端加载交易记录、消息和待办提醒,替代本地缓存读写
- 对交易记录的增删改操作同步到数据库,确保数据一致性
- 对消息和提醒的增删改操作支持服务器同步,提升数据可靠性
- 优化消息发送逻辑,先保存用户消息,再处理AI回复并存库
- 添加待办提醒切换状态API调用,确保状态同步服务器
- 改进界面互动,支持文件与头像上传功能,更新管家形象
- 采用异步处理并增加错误捕获和用户提示,增强稳定性
This commit is contained in:
2026-01-22 18:25:42 +08:00
parent c06e74bd01
commit 194de6ec06
7 changed files with 1595 additions and 499 deletions

View File

@@ -1,4 +1,5 @@
# App_02_记账
- 应用信息
- 应用名称
- 记账
@@ -9,83 +10,158 @@
- 应用描述
- 一个精明、毒舌但实际上很负责任的财务经理。说话喜欢带刺,吐槽用户乱花钱,但关键时刻会给出靠谱建议。
- 数据结构
- Project 项目分类
- name 名称(name)
- desc 背景(context)
- target 目标(goal)
- value 价值(value)
- 枚举数据
- TransactionType 交易类型
- EXPENSE = "expense"
- INCOME = "income"
- ExpenseCategory 支出分类
- FOOD = "餐饮"
- SHOPPING = "购物"
- TRANSPORT = "交通"
- HOUSING = "住房"
- ENTERTAINMENT = "娱乐"
- MEDICAL = "医疗"
- SOCIAL = "人情"
- EDUCATION = "学习"
- FINANCE = "金融"
- CHILD = "孩子"
- PET = "宠物"
- CAR = "汽车"
- BEAUTY = "美容"
- BUSINESS = "经营"
- MISC = "杂项"
- IncomeCategory 收入分类
- SALARY = "工资"
- BONUS = "奖金"
- INVESTMENT = "理财"
- PARTTIME = "兼职"
- GIFT = "红包"
- OTHER = "其他收入"
- MessageRole 消息角色
- USER = "user"
- ASSISTANT = "assistant"
- ReminderFrequency 提醒频率
- MONTHLY = "monthly"
- ONCE = "once"
- Common 通用属性
- seq 排序
- isEnabled 是否启用
- creator 创建人
- Member
- Task 任务项目
- title 标题(title)
- project 分类(projectId)
- Project
- desc 描述(notes)
- startDate 开始日期(date)
- startTime 开始时间(startTime)
- isCompleted 是否完成(isCompleted)
- created_at 创建时间(createdAt)
- creator 创建人
- Member
- created_at 创建时间
- updated_at 更新时间
- Transaction 交易记录
- item 交易项目名称
- amount: float 交易金额
- type: TransactionType 交易类型
- category: ExpenseCategory | IncomeCategory 交易分类
- date 交易日期 YYYY-MM-DD
- timestamp: int 时间戳(毫秒)
- Message 聊天消息
- role: MessageRole 消息角色
- content 消息内容
- timestamp: int 时间戳(毫秒)
- transaction_id 关联的交易ID
- Budget 预算
- member_id 会员ID
- budgets: dict 预算字典 {名称: 金额}
- month 预算月份 YYYY-MM
- Reminder 账单提醒
- member_id 会员ID
- title 提醒标题
- amount: float 金额(可选)
- frequency: ReminderFrequency 频率
- target_date 目标日期: DD(每月) 或 YYYY-MM-DD(单次)
- is_completed: bool 完成状态
- AISettings AI助手设置
- member_id 会员ID
- name AI助手名称
- persona AI性格描述
- avatar 头像Base64编码
- UserPreference 用户偏好设置
- member_id 会员ID
- custom_preset_name 自定义预设名称
- custom_preset_description 自定义预设描述
- theme_index: int 主题索引
- API接口
- auth 授权
- POST /mp/auth/get_token
- Auth 授权
- POST /api/wx/get_token
- 获取token
- GET /mp/auth/profile
- GET /api/wx/profile
- 获取个人信息
- 项目
- GET /mp/todo/projects
- 项目列表
- GET /mp/todo/projects/{project_id}
- 获取项目详细
- POST /mp/todo/projects
- 创建项目
- PUT /mp/todo/projects/{project_id}
- 更新项目
- DELETE /mp/todo/projects/{project_id}
- 删除项目
- 任务
- GET /mp/todo/tasks
- 任务列表
- GET /mp/todo/tasks/{task_id}
- 获取任务详细
- POST /mp/todo/tasks
- 创建任务
- PUT /mp/todo/tasks/{task_id}
- 更新任务
- DELETE /mp/todo/tasks/{task_id}
- 删除项目
- PUT /mp/todo/tasks/{task_id}/completed
- 设置为已完成
- PUT /mp/todo/tasks/{task_id}/uncompleted
- 设置为未完成
- transaction Bill: 交易记录
- GET /api/bill/transactions
- 获取分页交易记录
- GET /api/bill/transactions/{id}
- 获取交易记录详情
- POST /api/bill/transactions
- 创建交易记录
- PUT /api/bill/transactions/{id}
- 更新交易记录
- DELETE /api/bill/transactions/{id}
- 删除交易记录
- Message Bill: 聊天消息
- GET /api/bill/messages
- 获取分页聊天消息
- GET /api/bill/messages/{id}
- 获取聊天消息详情
- POST /api/bill/messages
- 创建聊天消息
- PUT /api/bill/messages/{id}
- 更新聊天消息
- DELETE /api/bill/messages/{id}
- 删除聊天消息
- Budget Bill: 预算
- GET /api/bill/budgets
- 获取分页预算
- GET /api/bill/budgets/{id}
- 获取预算详情
- POST /api/bill/transactions
- 创建交易记录
- PUT /api/bill/transactions/{id}
- 更新交易记录
- DELETE /api/bill/transactions/{id}
- 删除交易记录
- BillReminder Bill: 账单提醒
- GET /api/bill/bill_reminders
- 获取分页账单提醒
- GET /api/bill/bill_reminders/{id}
- 获取账单提醒详情
- POST /api/bill/transactions
- 创建交易记录
- PUT /api/bill/transactions/{id}
- 更新交易记录
- DELETE /api/bill/transactions/{id}
- 删除交易记录
- AISettings AI助手设置
- GET /api/h5/ai_settings
- 获取AI助手设置
- PUT /api/h5/ai_settings
- 更新AI助手设置
- POST /api/h5/ai_settings/reset
- 重置AI助手设置
- UserPreference 用户偏好设置
- GET /api/h5/user_preference
- 获取用户偏好设置
- PUT /api/h5/user_preference
- 更新用户偏好设置
- 问题/需求
- 单用户转换为多用户模式
- 增加登录验证
- 增加creator字段
- 登录问题
- 小程序跳转到H5, 需要检测登录状态
- 如果已经登录, 需要把登录信息传递到H5首页
- 如果未登录跳转至小程序登录页
- URL传递参数openid和mobile
- H5端首页先检测token状态
- 如果存在并且未过期, 则携带token获取用户信息
- 如果不存在则通过openid和mobile获取token, 并获取用户信息
- 新建项目问题
- 目前是实时更新模式, 保存到本地缓存没问题, 但是要持久化到数据库就会报错
- 增加保存按钮, 点击保存后提交接口, 并同步本地数据
- 分别处理本地新建项目和提交接口新建项目的逻辑, 并处理错误提示, 例如项目名称重复
- 任务过滤查询
- 日期等于今天的任务
- 日期小于今日的任务
- 查询所有任务匹配到日历中
- 今日任务和日历中任务的匹配调节
- 测试任务2没有显示在今日任务中
- 最可能原因是日期转换过程中的时区差异。当API返回的日期时间字符串 "2026-01-14T00:00:00" 在客户端进行时区转换时,可能会因为客户端的时区设置导致日期变成 2026-01-13 或其他日期,从而不满足 t.date === systemDate 的条件。
- 多个在增删改查操作中存在的时区转换问题
- 语音接口识别
- 接口鲁棒性调试
- 识别消息对接创建交易记录接口
- 约定和调试大模型返回数据
- 开发任务
- 小程序跳转时增加登录判断和URL传参(openid和mobile)
- 1小时/人
- H5首页接收openid和mobile参数
- 0.5小时/人
- H5首页token检测并获取, 通过接口获取用户信息
@@ -94,11 +170,19 @@
- 2小时/人
- 开发H5端获取用户信息接口
- 1.5小时/人
- 开发项目增删改查接口
- 开发交易记录增删改查接口
- 4小时/人
- 开发任务增删改查接口和已完成/未完成接口
- 5小时/人
- 开发任务按时间过滤列表接口
- 2小时/人
- 调试H5页面交互, 调用项目和任务接口
- 6~10小时/人
- 开发聊天增删改查接口
- 6小时/人
- 开发预算增删改查接口
- 4小时/人
- 开发账单提醒增删改查完成接口
- 6小时/人
- 开发AI助手设置增删改查接口
- 4小时/人
- 开发用户偏好设置增删改查接口
- 3小时/人
- 调试H5页面交互, 调用交易记录、聊天、预算、账单提醒、助手设置、用户偏好接口
- 8~12小时/人
- 切换线上配置,打包、发布到线上服务器
- 2小时/人