docs(M08-D-R1): 回填后台架构返工与游标

This commit is contained in:
Codex
2026-08-10 20:59:17 +08:00
parent 3faf86872d
commit b507e87999
5 changed files with 41 additions and 17 deletions
+3 -3
View File
@@ -120,9 +120,9 @@ WSL 已验证:EMQX `5.8.9`、MQTTX CLI `1.13.0`、EMQX 服务 `active (running
项目已开发部分模块。具体完成度不得从 README 猜测,必须以现有代码、测试、数据库迁移、Git 历史以及 `docs/current-baseline.md``docs/module-status.md``docs/feature-status.md` 为准。 项目已开发部分模块。具体完成度不得从 README 猜测,必须以现有代码、测试、数据库迁移、Git 历史以及 `docs/current-baseline.md``docs/module-status.md``docs/feature-status.md` 为准。
- 当前执行游标:`M08-D-R1`DOING);`M09-A-RECOVERY``M06-C-R1``M06-E-R1``M06-R-REGRESSION` 已完成,真实团购商家授权、微信和硬件现场验收保持 `BLOCKED_EXTERNAL` - 当前执行游标:`M09-B`DOING);`M09-A-RECOVERY``M06-C-R1``M06-E-R1``M06-R-REGRESSION``M08-D-R1` 已完成,真实团购商家授权、微信和硬件现场验收保持 `BLOCKED_EXTERNAL`
- 最近工程提交:`da5751f`,四个静态检查已使用 `fileURLToPath` 并通过中文/空格路径回归;Windows 后端全量与 WSL MySQL 8.4.10 的 144 up、124 verify、140 down 往返通过。 - 最近工程提交:`3faf868`,后台 12 个业务入口已迁入 Vue Router 权限路由和按路由懒加载;最大 JS 分块 217,195 B375/768/1440 响应式与全仓门禁通过。
- 下一工程目标:执行 M08-D-R1,在保留现有功能页面的前提下补 Vue Router、服务端权限菜单绑定、路由级懒加载、构建分包与三档响应式门禁 - 下一工程目标:执行 M09-B,复用既有清洁任务、照片、验收、驳回与免清洁链路,按 V5.6 收口图片规则、权限、失败恢复和缺口测试
## 版本递进 ## 版本递进
+7 -7
View File
@@ -1,8 +1,8 @@
# 当前开发成果基线 # 当前开发成果基线
> V5.0 首次核验日期:2026-06-16 > V5.0 首次核验日期:2026-06-16
> audited_commit: `da5751f` > audited_commit: `3faf868`
> next_engineering_target: 按 V5.6 固定队列执行 M08-D-R1,引入权限路由、领域懒加载并收口后台构建体积与三档响应式 > next_engineering_target: 按 V5.6 固定队列执行 M09-B,复用既有保洁业务链路收口图片、验收、驳回和清洁规则
> 事实源:当前工作区、Git 历史、状态文档、Windows/WSL 检查脚本。 > 事实源:当前工作区、Git 历史、状态文档、Windows/WSL 检查脚本。
## 总体结论 ## 总体结论
@@ -12,7 +12,7 @@
| 总纲版本 | V5.6 已成为当前权威总纲,V5.4 及更早版本仅作历史备份 | 根目录 `V5.6.md` 的第 29 章固定队列 | 必须按 V5.6 游标开发,不得回退到历史队列 | | 总纲版本 | V5.6 已成为当前权威总纲,V5.4 及更早版本仅作历史备份 | 根目录 `V5.6.md` 的第 29 章固定队列 | 必须按 V5.6 游标开发,不得回退到历史队列 |
| Git 远端 | `origin=ssh://git@git.txyundm.cn:2222/panda/qipai.git`,分支 `main` | `git rev-list main...origin/main``0 0` | 本地与远端同步 | | Git 远端 | `origin=ssh://git@git.txyundm.cn:2222/panda/qipai.git`,分支 `main` | `git rev-list main...origin/main``0 0` | 本地与远端同步 |
| 正式后端 | 已完成 Fastify、迁移兼容、outbox/worker、多应用租户、微信与后台密码身份/可撤销会话、六角色 RBAC、门店范围,以及 M03-M08 业务 APIM09-A 已完成事务收口,M06-C/E-R1 已完成控制箱、门锁与插座协议纠偏并通过 M06-R 全量回归 | `backend/src/**``database/migrations/**``backend/tests/**`、工程提交 `9b2f055``dabc656``aed36f0``36b3b2f``da5751f` | M01-M04、M07 已完成;M05/M06/M08 可独立工程内容完成但外部联调保持 PARTIAL;当前进入 M08-D-R1 | | 正式后端 | 已完成 Fastify、迁移兼容、outbox/worker、多应用租户、微信与后台密码身份/可撤销会话、六角色 RBAC、门店范围,以及 M03-M08 业务 APIM09-A 已完成事务收口,M06-C/E-R1 已完成控制箱、门锁与插座协议纠偏并通过 M06-R 全量回归 | `backend/src/**``database/migrations/**``backend/tests/**`、工程提交 `9b2f055``dabc656``aed36f0``36b3b2f``da5751f` | M01-M04、M07 已完成;M05/M06/M08 可独立工程内容完成但外部联调保持 PARTIAL;当前进入 M08-D-R1 |
| 后台管理端 | 已建立 Vue3 + Vite + TypeScript + Element Plus 工程,完成正式租户账号登录、短期访问令牌、轮换刷新令牌、当前会话、注销、401 自动续期/清理和服务端权限菜单,并覆盖 M08-D 计划内运营工作区;应用页按平台/租户权限分层,敏感审计 metadata 递归脱敏且不读写 AppSecret | `admin/src/App.vue``admin/src/components/AdminLoginPanel.vue``admin/src/api.ts``backend/src/routes/admin-auth.ts``backend/src/auth/admin-auth-repository.ts``scripts/check-admin-m08-d.mjs` | 功能切片保留,M08-D-R1 正在补 Vue Router、路由级权限/懒加载、首屏分包和 375/768/1440 响应式门禁;当前构建的 Element chunk 923.28 KiB 是本阶段待消除问题 | | 后台管理端 | 已建立 Vue3 + Vite + TypeScript + Element Plus 工程,完成正式租户账号登录、短期访问令牌、轮换刷新令牌、当前会话、注销、401 单航班续期/清理和服务端权限菜单12 个业务入口均为 Vue Router 深链接,菜单与 capability 双重门禁,业务页按路由懒加载,失败可重载恢复 | `admin/src/App.vue``admin/src/router.ts``admin/src/navigation.mjs``admin/src/session.ts``scripts/check-admin-m08-d-r1.mjs`、工程提交 `3faf868` | M08-D-R1 已完成;最大 JS 分块由 923.28 KiB 降至 217,195 B,入口 gzip 74.94 KiB375/768/1440 无横向溢出,进入 M09-B |
| 微信小程序 | 已纳管微信原生模板,并完成顾客端订单、充值、权益明细、下单抵扣主体链路、保洁任务端照片上传/补做主体链路,以及管理员门店/房态/订单/代下单/验券/会员/员工/保洁/设备/经营统计 | `miniapp/pages/index``miniapp/pages/store/detail``miniapp/pages/room/detail``miniapp/pages/orders/*``miniapp/pages/recharge/*``miniapp/pages/profile/*``miniapp/pages/cleaner/*``miniapp/pages/manager/*``miniapp/utils/api.js``scripts/check-miniapp-m08-a.mjs``scripts/check-miniapp-m08-c.mjs` | M08-A/B/C/D 可独立工程内容完成,执行游标进入 M09-A;真实团购、微信和硬件现场验收保持外部阻塞,M08 维持 PARTIAL | | 微信小程序 | 已纳管微信原生模板,并完成顾客端订单、充值、权益明细、下单抵扣主体链路、保洁任务端照片上传/补做主体链路,以及管理员门店/房态/订单/代下单/验券/会员/员工/保洁/设备/经营统计 | `miniapp/pages/index``miniapp/pages/store/detail``miniapp/pages/room/detail``miniapp/pages/orders/*``miniapp/pages/recharge/*``miniapp/pages/profile/*``miniapp/pages/cleaner/*``miniapp/pages/manager/*``miniapp/utils/api.js``scripts/check-miniapp-m08-a.mjs``scripts/check-miniapp-m08-c.mjs` | M08-A/B/C/D 可独立工程内容完成,执行游标进入 M09-A;真实团购、微信和硬件现场验收保持外部阻塞,M08 维持 PARTIAL |
| 数据库迁移 | 已形成 M01-B 至 M08-D 连续 up/down/verify 计划、最小脱敏 seed、旧库 fixture、执行 CLI、验证结果门禁和 MySQL 8 集成测试;M09-A 事务并发与 M06-C/E-R1 协议落库均纳入同一往返测试 | `database/migrations/**``database/seeds/2026061601_m01b_minimal_seed.sql``backend/src/db/migration-runner.ts``backend/tests/mysql-migration-roundtrip.test.mjs` | WSL MySQL 8.4.10 已完成 144 up、124 verify、140 down;另实测插座十进制 `workInfo`、三类失败结果、closeReason 3-7 告警、温度冲突死信和复位口令脱敏 | | 数据库迁移 | 已形成 M01-B 至 M08-D 连续 up/down/verify 计划、最小脱敏 seed、旧库 fixture、执行 CLI、验证结果门禁和 MySQL 8 集成测试;M09-A 事务并发与 M06-C/E-R1 协议落库均纳入同一往返测试 | `database/migrations/**``database/seeds/2026061601_m01b_minimal_seed.sql``backend/src/db/migration-runner.ts``backend/tests/mysql-migration-roundtrip.test.mjs` | WSL MySQL 8.4.10 已完成 144 up、124 verify、140 down;另实测插座十进制 `workInfo`、三类失败结果、closeReason 3-7 告警、温度冲突死信和复位口令脱敏 |
| M00 部署脚本 | 已有菜单、状态、HTTPS、Certbot、EMQX、备份检查模板 | `setup.sh``scripts/setup/``deploy/` | PARTIAL,生产未执行 | | M00 部署脚本 | 已有菜单、状态、HTTPS、Certbot、EMQX、备份检查模板 | `setup.sh``scripts/setup/``deploy/` | PARTIAL,生产未执行 |
@@ -24,7 +24,7 @@
## 状态校准 ## 状态校准
- `docs/module-status.md` 中 M00 仍为 `PARTIAL` 是正确的:生产 Ubuntu 初始化、部署与运维验收尚未执行;后端、后台和小程序源码已在后续模块建立。 - `docs/module-status.md` 中 M00 仍为 `PARTIAL` 是正确的:生产 Ubuntu 初始化、部署与运维验收尚未执行;后端、后台和小程序源码已在后续模块建立。
- M01-M04 与 M07 已具备模块工程验收;M05、M06、M08 因真实厂商/硬件/生产条件保持 `PARTIAL`M09-A-RECOVERY、M06-C/E-R1M06-R-REGRESSION 已完成,当前按 V5.6 执行 M08-D-R1M10 尚未进入。 - M01-M04 与 M07 已具备模块工程验收;M05、M06、M08 因真实厂商/硬件/生产条件保持 `PARTIAL`M09-A-RECOVERY、M06-C/E-R1M06-R-REGRESSION 与 M08-D-R1 已完成,当前按 V5.6 执行 M09-BM10 尚未进入。
- 任何“目录存在”只能证明骨架存在,不能证明模块完成。 - 任何“目录存在”只能证明骨架存在,不能证明模块完成。
## Git 历史敏感信息核验 ## Git 历史敏感信息核验
@@ -35,6 +35,6 @@
## 下一步 ## 下一步
1. 执行 M08-D-R1:保留既有业务组件,引入 Vue Router、服务端 capability 绑定、路由守卫和领域懒加载 1. 执行 M09-B:审计并复用既有照片上传、提交验收、驳回补做和免清洁链路,不建立第二套领域实现
2. 消除当前 923.28 KiB Element 单块警告,补深链接、刷新恢复、401 单飞、懒加载失败及 375/768/1440 三档自动化检查 2. 对照 V5.6 补齐图片数量/格式/大小、任务状态与权限、失败恢复、重复提交和回归测试缺口
3. 完成 M08-D-R1 后进入 M09-B;M06-G 真实硬件联调仍等待生产 MQTT 账号/ACL、DeviceID 和现场实物配线,不阻断内部主队列。 3. M09-B 完成后进入 M09-C;M06-G 真实硬件联调仍等待生产 MQTT 账号/ACL、DeviceID 和现场实物配线,不阻断内部主队列。
@@ -308,3 +308,25 @@ M08-D 保持 `DOING`。审计日志与系统配置增量完成;下一工程增
### 状态 ### 状态
M08-D 可独立工程内容完成。M08 真实微信、团购和硬件现场验收继续保持 `PARTIAL/BLOCKED_EXTERNAL`,执行游标按规则进入 M09-A 保洁任务状态机复核与补齐。 M08-D 可独立工程内容完成。M08 真实微信、团购和硬件现场验收继续保持 `PARTIAL/BLOCKED_EXTERNAL`,执行游标按规则进入 M09-A 保洁任务状态机复核与补齐。
## 2026-08-10 M08-D-R1 后台架构与性能返工
- `ENGINEERING_DELTA=YES`
- 保留既有 12 个业务功能页,将 `App.vue` 收口为登录、会话恢复、权限布局和 `RouterView`;业务页通过 `/overview``/stores``/orders``/payments``/third-party``/people``/cleaning``/devices``/apps``/content``/franchise``/system` 独立深链接访问。
- 路由同时校验服务端 `menus` 和 capability/平台角色,未授权深链接确定回落到首个可访问入口;刷新通过 `/auth/me` 恢复身份,401 继续复用单航班令牌轮换,懒加载失败展示可重载恢复界面。
- 清洁工作台从 `App.vue` 原样抽入 `CleaningWorkspace.vue`;旧 M08-B/D 静态门禁同步兼容新结构,未重写第二套业务流程。
- Element Plus 改为组件按需解析,12 个业务页均生成独立异步块;最大 JS 分块为 217,195 B,入口 gzip 74.94 KiB,原 923.28 KiB 单块警告消除。总门禁新增原生命令失败退出检查,避免子命令失败被后续命令掩盖。
### 测试证据
- `admin/npm run verify:r1`:类型检查、Vite 生产构建、深链接/菜单/capability/刷新回落测试、源码架构检查和产物分块检查通过;`npm audit --omit=dev` 为 0 个漏洞。
- in-app Browser 生产预览:1440×900、768×900、375×812 三档均无横向溢出;375 下卡片边界为 18–357.33 px,输入框和按钮全部位于视口内;控制台 warning/error 为 0。
- Windows `scripts/dev/windows/test-all.ps1`:69.1 秒退出码 0;包含后端全测、迁移契约、M08-B/C/D 兼容门禁、M08-D-R1 源码/产物门禁、Vue 类型检查/生产构建、敏感信息和仓库完整性检查。
- 构建仅保留 `@vueuse/core` 的第三方 PURE 注释位置提示,不隐藏 warning;所有 JS 分块均低于 Vite 500 KiB 阈值。
### 变更影响与状态
- 数据库/API:无迁移、无接口语义变更;继续复用既有后台会话与权限响应。
- 后台:新增 Vue Router、按需组件解析、路由会话状态和三档响应式收口;未自动部署生产。
- 工程提交:`3faf868`,已推送并验证 `HEAD == origin/main`
- M08-D-R1 完成;M08 因真实微信、团购和硬件现场条件继续保持 `PARTIAL/BLOCKED_EXTERNAL`。执行游标进入 M09-B。
+2
View File
@@ -42,6 +42,8 @@
> 2026-08-10 M06-R-REGRESSION:工程提交 `da5751f` 将四个静态检查统一改为 `fileURLToPath`,并增加真实中文/空格临时路径回归。控制箱、Sub-1G 与智慧插座协议 fixture、Windows 后端全量、Vue 构建、四项静态检查以及 WSL MySQL 8.4.10 的 144 up、124 verify、140 down 往返全部通过;`ISSUE-013` 关闭,实物联调仍由 `ISSUE-014` 保持 `BLOCKED_EXTERNAL`。游标进入 M08-D-R1。 > 2026-08-10 M06-R-REGRESSION:工程提交 `da5751f` 将四个静态检查统一改为 `fileURLToPath`,并增加真实中文/空格临时路径回归。控制箱、Sub-1G 与智慧插座协议 fixture、Windows 后端全量、Vue 构建、四项静态检查以及 WSL MySQL 8.4.10 的 144 up、124 verify、140 down 往返全部通过;`ISSUE-013` 关闭,实物联调仍由 `ISSUE-014` 保持 `BLOCKED_EXTERNAL`。游标进入 M08-D-R1。
> 2026-08-10 M08-D-R1:工程提交 `3faf868` 保留全部既有后台功能页,并将 12 个入口迁入 Vue Router 深链接、服务端菜单与 capability 双重守卫和路由级懒加载;401 单航班续期、刷新恢复和懒加载失败均有确定恢复边界。Element Plus 政策改为按需解析,最大 JS 分块从 923.28 KiB 降至 217,195 B,入口 gzip 74.94 KiB375/768/1440 响应式实测、全仓回归、敏感信息与仓库完整性门禁通过。游标进入 M09-B。
| ID | 功能 | 模块子阶段 | 状态 | 最近提交 | 测试/验收证据 | 阻塞原因 | 下一步 | | ID | 功能 | 模块子阶段 | 状态 | 最近提交 | 测试/验收证据 | 阻塞原因 | 下一步 |
|---|---|---|---|---|---|---|---| |---|---|---|---|---|---|---|---|
| ENV-001 | 固定 Windows 工作区 | M00-A/M00-B | DONE | 远端 HEAD | 已确认 `D:\qipai`Git 根、main 分支、固定 origin 和 push 校验通过。 | - | 后续每模块继续复检。 | | ENV-001 | 固定 Windows 工作区 | M00-A/M00-B | DONE | 远端 HEAD | 已确认 `D:\qipai`Git 根、main 分支、固定 origin 和 push 校验通过。 | - | 后续每模块继续复检。 |
+7 -7
View File
@@ -3,15 +3,15 @@
```yaml ```yaml
execution_cursor: execution_cursor:
current_module: M08 current_module: M08
current_stage: M08-D-R1 current_stage: M09-B
stage_status: DOING stage_status: DOING
last_completed_stage: M06-R-REGRESSION last_completed_stage: M08-D-R1
next_stage: M09-B next_stage: M09-C
last_engineering_commit: `da5751f` last_engineering_commit: `3faf868`
last_push_verified: true last_push_verified: true
base_branch: main base_branch: main
blocked_reason: "M08-A 真机合法域名、真实微信支付和实物开门验证缺微信后台/商户/硬件现场条件;M08-B 可独立工程内容已完成,真实商户凭据、微信后台配置、生产小额转账和实物硬件结果保持 BLOCKED_EXTERNALM08-C 可独立工程内容已完成,真实美团/抖音/快手商家授权与真机验券保持 BLOCKED_EXTERNAL,已按规则旁路进入 M08-D。M06-G 真实硬件联调仍缺生产 MQTT 账号/ACL、DeviceID、控制箱、门锁、插座和现场配线。" blocked_reason: "M08-A 真机合法域名、真实微信支付和实物开门验证缺微信后台/商户/硬件现场条件;M08-B 可独立工程内容已完成,真实商户凭据、微信后台配置、生产小额转账和实物硬件结果保持 BLOCKED_EXTERNALM08-C 可独立工程内容已完成,真实美团/抖音/快手商家授权与真机验券保持 BLOCKED_EXTERNAL,已按规则旁路进入 M08-D。M06-G 真实硬件联调仍缺生产 MQTT 账号/ACL、DeviceID、控制箱、门锁、插座和现场配线。"
updated_at: 2026-08-10T20:22:51+08:00 updated_at: 2026-08-10T20:58:40+08:00
``` ```
| 模块 | 状态 | 最近提交 | 最近开发日志 | 备注 | | 模块 | 状态 | 最近提交 | 最近开发日志 | 备注 |
@@ -24,7 +24,7 @@ execution_cursor:
| M05 会员、余额、套餐、优惠券 | PARTIAL | `1680d73` | docs/devlogs/2026-06-22-M05-D-分账与收款配置.md | M05-A/B/C/D 工程闭环已完成:统一支付、微信支付退款、团购直订、门店收款账户、分账接收方、比例策略、授权门禁、幂等分账和对账查询均通过 Windows 与 WSL MySQL 回归;真实微信/团购/分账权限未提供,模块保持 PARTIAL/BLOCKED_EXTERNAL。 | | M05 会员、余额、套餐、优惠券 | PARTIAL | `1680d73` | docs/devlogs/2026-06-22-M05-D-分账与收款配置.md | M05-A/B/C/D 工程闭环已完成:统一支付、微信支付退款、团购直订、门店收款账户、分账接收方、比例策略、授权门禁、幂等分账和对账查询均通过 Windows 与 WSL MySQL 回归;真实微信/团购/分账权限未提供,模块保持 PARTIAL/BLOCKED_EXTERNAL。 |
| M06 设备、MQTT 与真实硬件联动 | PARTIAL | `da5751f` | docs/devlogs/2026-06-24-M06-E-智慧插座.md | M06-C/E-R1 已按原件校正控制箱、Sub-1G 与智慧插座 Wire/事件/脱敏;M06-R 已通过 Windows 后端全量、MQTT fixture、四项静态检查的中文/空格路径回归及 WSL MySQL 8.4.10 完整往返。M06-G 仍缺生产 MQTT 账号/ACL、DeviceID 和实物配线,保持 BLOCKED_EXTERNAL。 | | M06 设备、MQTT 与真实硬件联动 | PARTIAL | `da5751f` | docs/devlogs/2026-06-24-M06-E-智慧插座.md | M06-C/E-R1 已按原件校正控制箱、Sub-1G 与智慧插座 Wire/事件/脱敏;M06-R 已通过 Windows 后端全量、MQTT fixture、四项静态检查的中文/空格路径回归及 WSL MySQL 8.4.10 完整往返。M06-G 仍缺生产 MQTT 账号/ACL、DeviceID 和实物配线,保持 BLOCKED_EXTERNAL。 |
| M07 会员、余额、充值、优惠券和套餐营销 | DONE | `ed0d455` | docs/devlogs/2026-06-24-M07-D-会员管理.md | M07-A 已完成现金/赠送双余额账本;M07-B 已完成充值优惠;M07-C 已完成优惠券/套餐权益底表和冻结、确认、退回的可靠补偿核销服务;M07-D 已完成会员画像、订单、消费、余额、充值、优惠券和套餐聚合查询。 | | M07 会员、余额、充值、优惠券和套餐营销 | DONE | `ed0d455` | docs/devlogs/2026-06-24-M07-D-会员管理.md | M07-A 已完成现金/赠送双余额账本;M07-B 已完成充值优惠;M07-C 已完成优惠券/套餐权益底表和冻结、确认、退回的可靠补偿核销服务;M07-D 已完成会员画像、订单、消费、余额、充值、优惠券和套餐聚合查询。 |
| M08 微信原生小程序完整业务 | PARTIAL | `0511008` | docs/devlogs/2026-08-10-M08-D-Vue平台后台.md | M08-A/B/C/D 功能切片已完成;当前执行 M08-D-R1,把既有 Vue 运营工作区迁入权限路由领域懒加载三档响应式架构。真实微信、团购和硬件现场验收按 BLOCKED_EXTERNAL 保持 PARTIAL。 | | M08 微信原生小程序完整业务 | PARTIAL | `3faf868` | docs/devlogs/2026-08-10-M08-D-Vue平台后台.md | M08-A/B/C/D 功能切片 M08-D-R1 架构返工已完成;12 个权限路由领域懒加载,最大 JS 分块 217,195 B三档响应式门禁通过。真实微信、团购和硬件现场验收按 BLOCKED_EXTERNAL 保持 PARTIAL。 |
| M09 保洁任务、结算、商品和库存 | DOING | `9b2f055` | docs/devlogs/2026-06-25-M08-B-保洁端.md | M09-A-RECOVERY 已完成:状态、负责人/成员和事件同事务;真实 MySQL 8.4.10 已验证 claim 单赢家、失败回滚、重指派清理、`SKIP LOCKED` 回收和订单唯一建任务。完成 M08-D-R1 后按 V5.6 固定队列进入 M09-B。 | | M09 保洁任务、结算、商品和库存 | DOING | `9b2f055` | docs/devlogs/2026-06-25-M08-B-保洁端.md | M09-A-RECOVERY 已完成事务与并发收口;当前执行 M09-B,复用既有任务照片、验收、驳回、免清洁和清洁规则链路做领域收口与缺口测试。 |
| M10 部署、域名、验收和运维闭环 | TODO | - | - | - | | M10 部署、域名、验收和运维闭环 | TODO | - | - | - |