需求记录
本文档按业务域记录已落地需求和维护约束。若需求变更,应同步更新相关代码、测试与三端说明书。
1. 账号与个人中心
| 需求 | 状态 | 关键位置 |
|---|---|---|
| 小程序、Web 均支持手机号密码登录/注册 | 已实现 | backend/app/routers/auth.py、miniapp/src/api/auth.ts、web/src/api/auth.ts |
| 登录后用户可修改密码 | 已实现 | POST /api/auth/password、miniapp/src/pages/profile/index.vue、web/src/pages/Profile/index.tsx |
| Web 支持 refresh token 自动续期 | 已实现 | backend/app/services/auth_service.py、web/src/api/refresh.ts |
| 小程序保留“记住我”偏好 | 已实现 | miniapp/src/api/token.ts、miniapp/src/stores/auth.ts |
约束:
- 密码校验以后端 Pydantic 模型和服务层为准。
- 认证接口不走 RLS 注入,业务数据接口必须走
CurrentSecureUser和 RLS。
2. 隐私政策与用户协议
| 需求 | 状态 | 关键位置 |
|---|---|---|
| 小程序不得默认勾选用户协议/隐私政策 | 已实现 | miniapp/src/subpkg-extra/pages/login/index.vue |
| 用户需主动阅读/选择后才能继续登录注册 | 已实现 | agreement、privacy 分包页面 |
| 未勾选协议时登录/注册按钮置灰不可点击 | 已实现 | login/index.vue(disabled: loading || !agreementChecked) |
| 首次进入首页不强制授权手机号、头像、昵称 | 已实现 | 登录后置,浏览体验优先 |
| 用户协议和隐私政策入口可点击、可返回 | 已实现 | agreement/index.vue、privacy/index.vue |
| 隐私政策打开不再空白(不依赖微信官方隐私弹窗) | 已实现 | openPrivacy() 直接跳本地 privacy 页 |
| 个人中心可随时查看协议/隐私政策 | 已实现 | miniapp/src/pages/profile/index.vue |
验收重点:
- 真机打开首页不弹强制授权。
- 登录页协议默认未勾选,按钮置灰直至主动勾选。
- 点击协议/隐私能完整打开页面并返回,内容非空白。
3. 小程序导航与页面结构
| 需求 | 状态 | 关键位置 |
|---|---|---|
| 智米军师作为首页 | 已实现 | miniapp/src/pages.json、pages/chat/index.vue |
| 文章管理合并到生成文章模块,并改名历史记录 | 已实现 | CustomTabBar.vue、pages/article-list/index.vue |
| 原文章管理入口替换为个人中心 | 已实现 | pages/profile/index.vue |
| 封面神器保留独立 Tab | 已实现 | pages/cover-tool/index.vue |
维护约束:
- 新增页面必须同步
pages.json与CustomTabBar.vue。 - 分包页面不能反向依赖主包内不允许引用的位置。
4. 智米军师
| 需求 | 状态 | 关键位置 |
|---|---|---|
| Web 和小程序均支持聊天助手 | 已实现 | web/src/pages/Chat、miniapp/src/pages/chat |
| 支持 WS 流式回复和重连 | 已实现 | backend/app/services/chat_ws.py、useChat.ts |
| 支持媒体上传和签名媒体 URL | 已实现 | backend/app/routers/chat.py、chat_storage.py |
| 小程序输入框随键盘上浮 | 已实现 | miniapp/src/composables/useKeyboardDock.ts |
| 用户切换后聊天状态重置 | 已实现 | stores/chat.ts、useChat.ts |
验收重点:
- 手机真机键盘弹出时输入框可见。
- WS ticket 过期/4001 时可重新取票重连。
- 上传媒体 URL 不应 401 失效过快。
5. 文章生成与历史记录
| 需求 | 状态 | 关键位置 |
|---|---|---|
| 四步文章生成向导 | 已实现 | useArticleWizard、article_service.py |
| 生成任务有阶段进度 | 已实现 | task_service.py、useTaskPolling.ts |
| 图片/文本方向分析结果压缩控制 | 已实现 | upload_service.py、article_service.py |
| Web 文章编辑支持乐观锁 | 已实现 | If-Match、articles.version |
| 历史记录可查看文章详情 | 已实现 | article-list、article-detail |
维护约束:
- LLM 失败必须提供兜底,不能直接让用户流程变成 500。
- 多图分析和主题生成要限制输入长度,避免超时和成本失控。
6. 封面神器
| 需求 | 状态 | 关键位置 |
|---|---|---|
| 创建封面项目、上传素材、AI 分析、风格、出图、选择封面 | 已实现 | /api/cover/*、cover_service.py、CoverTool |
| 生成过程异步执行并可恢复轮询 | 已实现 | generate_covers_background、前端轮询目标 style covers |
| 上传图片自动 EXIF 转正和压缩 | 已实现 | _compress_reference_image |
| 支持删除素材图片 | 已实现 | DELETE /projects/{id}/images/{image_id} |
| 列表支持删除项目,且为硬删除 | 已实现 | DELETE /projects/{id}、小程序/Web 删除入口 |
| 生成封面要保留原图主体、包装、Logo、道具 | 已实现 | compose_cover_prompt |
| 同一风格下候选图要有结构差异 | 已实现 | COVER_VARIATIONS |
| 引入归藏社交卡片 prompt skill | 已实现 | GUIZANG_SOCIAL_CARD_SKILL |
| 图片中文字必须清晰且禁止乱码 | 已实现 | TEXT_RENDERING_CONSTRAINT |
验收重点:
- 删除项目后数据库和本地
cover-tool/{project_id}目录都应消失。 - 生成完成以“目标风格已有封面”为准,不只看项目状态。
- 真机中图片 URL 需要保留签名参数,避免 401。
维护约束:
- 即梦出图尺寸必须使用 64 的倍数标准组合(3:4 → 896×1152 等),禁止按面积反推宽高,否则算法报
50501 height or width invalid。 - 即梦单账号在途任务并发有限,生成任务需串行(
_jimeng_generation_lock),避免 429。
7. 管理后台
| 需求 | 状态 | 关键位置 |
|---|---|---|
| 商家管理、规则管理、知识库管理 | 已实现 | admin/src/pages/*、backend/app/routers/admin.py |
| LLM 功能级配置 | 已实现 | llm_function_configs、ModelConfig.tsx |
| 封面 AI 配置与诊断 | 已实现 | cover_ai_configs、/api/admin/cover-ai/diagnose |
| 管理端内网访问控制 | 已实现 | AdminIntranetMiddleware、nginx 配置 |
| 会话管理和人工接管 | 已实现 | ChatSessions.tsx、chat_ws.py |
维护约束:
- 模型配置变更是全局影响,必须先测试再保存。
- 管理端不得暴露完整 API Key,只显示布尔状态或来源。