feat: 完善登录流程、UI适配及协议文档更新

本次提交包含以下修改:
1. 新增微信登录相关服务及页面逻辑,实现首次微信绑定手机号流程
2. 优化产品匹配卡片 UI,移除不必要状态显示
3. 调整首页 scroll-view 属性及 banner 背景样式
4. 完善积分规则校验逻辑,增加时区及策略格式验证
5. 更新协议草案文档,补充资料清单及功能说明
6. 修复分析结果路由路径,适配新的匹配结果页面
7. 调整品牌 Logo 安卓端字体对齐样式
This commit is contained in:
hujun
2026-10-22 11:24:15 +08:00
parent e5406c23a6
commit 2c9d3feab5
36 changed files with 1246 additions and 212 deletions
@@ -0,0 +1,44 @@
# 照片、积分与 Token 后端发布计划
> 执行方式:本会话逐项执行,使用独立发布目录固定文件和证据;不提交或推送工作树。
目标:按用户最新授权将积分一期、累计 Token 和额度管理部署到现有正式后端,并启用照片服务配置;保持照片所属用户和有效同意校验。
范围依据:`docs/积分规则与开发契约.md`、后端 `database/ai-token-usage.md`、`docs/照片存储配置落地-20261013.md`。目标为 `airz.hqling.cloud`、`/www/wwwroot/xctai.cn`、`127.0.0.1:3306/airz`;用户自行发行小程序。
## 约束与恢复边界
- 保护两仓既有改动。只发布固定运行文件、必要迁移和资源版本,不整仓覆盖,不修改模型选择、产品配置、历史报告或既有积分。
- 积分每日10分、上海每日一次,不补签、不连续加成、不过期、不联动等级;其他奖励和兑换关闭。
- Token跨模型按用户累计,失败有有效用量也记,不补历史;现有用户额度默认NULL不限,不擅自设置数额。
- 照片开关使用 `enabled = "true"`;仅供本人保存、查看和删除。若线上无正式资料协议,则保留协议/同意门禁,不能伪造协议审核或用户确认。
- 外部入口维护、排空在途任务并正常停止worker后才执行DDL和替换。MySQL DDL非原子;异常时不盲目重跑或恢复整库,先保留现场并修复。
- 上线后可能产生新积分、用量和照片;之后保留新数据并优先向前修复,不自动回滚结构或清除累计记录。
## 1. 发布材料与只读预检
- [x] 在 `D:/AAdesk/202609/airz-backups/photo-points-token-production-20261019-r1` 保存两仓摘要、明确授权及当前文件快照,设置仅本人/SYSTEM可读。
- [x] 固定15份Token后端/后台运行文件,包含新 `AiTokenUsage.php`;加入两份原迁移入口及schema作为配套材料,保留独立积分和照片运行依赖的摘要。
- [x] 执行相关纯测试、PHP/JS语法、归档路径与字节核验;不启动本机默认App或真实模型。
- [x] 通过已登录宝塔专用终端核对线上版本、源文件、环境摘要、三服务、活动调用和队列、存储权限、协议状态及迁移预检,发现漂移则先定位。
## 2. 维护、备份与配套迁移
- [x] 备份Nginx/环境/站点版本/worker配置与将替换的源码;临时维护门禁生效后排空并停止worker/PHP。
- [x] 保存正式全库灾难备份和各表结构/业务行指纹;仅在服务器私有目录保存凭据和数据库正文。
- [x] 执行 `migrate_points.php --env=<服务器私有INI> --target=127.0.0.1:3306/airz --apply --writes-stopped --backup-dir=<服务器私有目录>`,保留其双表完整备份和结果。
- [x] 执行 `migrate_ai_token_usage.php --connection=<服务器私有JSON> --apply`,随后两入口再次检查,确认无待迁移项且原业务列数据保持。
## 3. 发布、配置与维护内验证
- [x] 原子替换固定源码,保持原属主/权限;清理仅相关后台模板缓存并保留原件,更新资源版本。
- [x] 配置完整积分一期参数并启用;保留原环境其他字节,模型维持Pro。照片目录保持原私有目录,启用开关但保留有效同意限制。
- [x] 启动PHP,独立应用回读积分/照片/Token运行状态;模型构造阻断,读取原报告/匹配/产品、本人积分及额度,不创建正式评估或伪造用量。
- [x] 确认仅预期DDL、资源版本及配置变化,全部原业务行投影保持;HTTPS验证错误码、鉴权、敏感路径及新后台静态资源。
## 4. 恢复服务与交接
- [x] 验证备份可定位、源码可定向恢复,明确结构迁移后的恢复限制;通过后启动唯一worker并恢复原Nginx入口。
- [x] 核验worker命令、PID、ready心跳、服务状态、日志与公网HTTPS;记录照片实际可用程度,不能把开关启用等同于已发布正式协议。
- [x] 下载脱敏回执并核摘要,清理临时传输/连接配置,保留受限备份;关闭本轮专用终端,不退出用户原有面板。
- [x] 更新发布回执和新会话交接;小程序新增积分文案和校验需用户重新编译发行,真机与真实模型调用边界如实说明。
@@ -0,0 +1,55 @@
# 微信首次绑定手机号实施计划
> 本轮用户已明确授权开发,按任务实施并审查;不再询问执行方式。后端任务由subagent-driven-development子代理执行,前端和集成由主代理负责;禁止提交、推送、发布和生产写入。
**Goal:** 微信小程序首次登录必须通过手输手机号和短信验证码绑定到统一账户,后续微信直接登录。
**Architecture:** 服务端验证微信code,以临时票据隔离未完成绑定;专用短信挑战、身份映射双唯一约束、协议确认及现有Token共同完成认证。前端复用登录页,迟到结果不写会话;未来App复用公共账户协议。
**Tech Stack:** PHP7.4、ThinkPHP/FastAdmin、MySQL5.7、Redis、uni-app x/UTS、HBuilderX5.26。
**Spec:** ../specs/2026-10-21-wechat-sms-login-design.md
## Global Constraints
- 保留全部既有未提交改动;不改生产.env,不连接生产存储,不发送真实短信/微信请求/收费模型调用。
- 在两个当前工作区承接最新状态:功能分支和仓库外逐文件快照,不从干净HEAD遗漏既有开发成果。
- 新微信/短信渠道默认关闭;Android/iOS原生微信授权不在本轮启用。
- 文本UTF-8无BOM,关键约束中文注释;不自行提交/推送/PR/部署。
## Task 1: 后端绑定闭环与隔离测试
Files: 新增微信提供方边界、服务端小程序实现、票据服务、绑定业务、v1微信控制器、关闭配置、独立身份表迁移及tests/wechat_login.php;修改application/route.php和SmsVerification用途白名单。禁止修改已有脏schema.sql及其他无关改动。
Consumes/produces: 实现Spec的三个精确JSON端点及认证结果;前端只消费该契约。
- [x] 创建缺功能失败断言并运行,记录RED。
- [x] 实现默认关闭、code2Session验证、票据及新表、绑定专用短信挑战、账户关联/新建、冲突拒绝与同意事务。
- [x] 在全新隔离存储运行真实持久化/HTTP/并发检查,覆盖Spec列出的失败分支;不使用生产.env。394检查/85本机HTTP通过,主代理独立复跑通过。
- [x] 回归短信引擎/账户和密码会话,PHP语法检查;自查并提交审查资料,不创建Git提交。71/271/284回归及13PHP语法通过。
## Task 2: 前端绑定交互和会话隔离
Files: 新增packages/account/services/wechat-login.uts和scripts/test-wechat-login.cjs;修改packages/account/login/login.uvue;必要时仅复用auth.uts的现有会话接受逻辑。
Consumes: Task1三个端点;Produces: 微信授权/首次绑号/取消/过期/协议变化及成功回跳。
- [x] 编写执行真实UTS服务/页面逻辑的失败测试,覆盖绑定前不保存Token及迟到响应不覆盖会话。
- [x] 实现小程序授权适配和JSON服务,返回结果先验证页面代次和会话再保存。
- [x] 在现有登录页增加绑定状态、专用短信发送及取消入口;保留协议、手机号、密码和回跳行为,移除未实现的一键登录入口。
- [x] 运行新行为测试和现有协议/登录回归(19+30通过)。
## Task 3: 集成、构建和交付
- [x] 独立审查后端和前端最终差异,修复有证据的问题。前端审查通过;整体审查I1回滚异常漏撤销Token/M1路由消费s漏查均补RED/GREEN并定向复核通过。
- [x] HBuilderX小程序编译;Browser插件未提供时使用现有Playwright做受控渲染和关键交互,证据保存在仓库外。17:28再次29页编译通过;390×844/1280×900验证完成,未触达真实API。
- [x] 校验既有未提交文件摘要保持(本轮明确更新的交接文档除外),清理本轮合成存储、Token及所属进程。原有无关改动字节保持;隔离表/Redis空、库已删除、所属服务退出、端口释放、测试明文凭据移除;浏览器/Vite关闭。
- [x] 更新本地开发说明、交接和计划状态,明确正式迁移/渠道凭据/真实短信/微信真机/App仍待,不发布。
## 交付记录
本地交付说明:docs/微信与手机号登录开发-20261021.md;私密证据根目录:D:/AAdesk/202609/airz-backups/wechat-sms-login-20261021-r1。
用户后续决定:保留Android/iOS运营商本机号码一键登录作为App待接入功能,与短信登录共用现有userId;最新要求暂缓渠道准备、先还原登录页一键登录按钮,未接通时点击展示原“暂未开放”提示,完成服务开通、服务端核验及真机验证后启用实际认证。实际认证仍为后续App范围,不把它计入上方已完成的小程序/短信开发,也不代替现有微信首次绑定短信验证。
清理脚本发送Redis SHUTDOWN后收到正常连接重置,已定向确认所属两PID消失、端口释放及隔离库目录删除后完成凭据移除,回执backend/cleanup.json。此为测试工具收尾异常,非业务失败。两仓库分支保持codex/wechat-sms-login-20261021,未提交/推送/PR/上线。