From b35af9037f256657f38f922e7b8a9bed9eb9aee9 Mon Sep 17 00:00:00 2001 From: Codex Date: Mon, 10 Aug 2026 13:58:49 +0800 Subject: [PATCH] =?UTF-8?q?docs(M08-D):=20=E5=9B=9E=E5=A1=AB=E5=90=8E?= =?UTF-8?q?=E5=8F=B0=E7=99=BB=E5=BD=95=E4=B8=8E=E4=BC=9A=E8=AF=9D=E5=85=A5?= =?UTF-8?q?=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 8 +++--- .../2026-08-10-M08-D-admin-overview.md | 12 +++++++++ docs/current-baseline.md | 20 +++++++------- .../2026-08-10-M08-D-admin-password-auth.md | 8 ++++++ docs/devlogs/2026-08-10-M08-D-Vue平台后台.md | 26 +++++++++++++++++++ docs/feature-status.md | 8 +++--- docs/module-status.md | 16 ++++++------ 7 files changed, 73 insertions(+), 25 deletions(-) create mode 100644 docs/db-changelog/2026-08-10-M08-D-admin-password-auth.md diff --git a/README.md b/README.md index 0422e3e..be55898 100644 --- a/README.md +++ b/README.md @@ -19,7 +19,7 @@ ## 目录 - `backend/`:Fastify + TypeScript 后端 API;若实际后端位于仓库根目录,以 `docs/repository-map.md` 为准 -- `admin/`:Vue3 后台管理端,已接入 M08-B 保洁运营工作台、运营待处理入口、运营待处理导出、待验收任务批量验收/驳回、免清洁标记、批量免清洁与统计展示、协作者管理、任务成员导出、任务详情照片预览、任务操作流水、任务流水导出、任务详情协作分账、任务列表导出、任务详情导出、结算详情、结算详情导出、待结算候选预览与导出、结算列表导出、结算批量同步微信状态、结算转账状态筛选、微信确认参数展示与导出、微信转账预检资料展示与导出、真实转账前自动预检拦截、统计明细、每日趋势、保洁员绩效排行、统计导出、保洁员资料管理、保洁员列表导出、保洁员待补资料导出、微信绑定状态、保洁员选择器、任务/结算/统计筛选、联调检查项搜索、联调筛选结果导出与筛选清除、联调负责人筛选、联调负责人看板、联调执行阶段看板、联调期限记录、联调逾期清单、联调风险清单导出和联调归档包导出,必须适配桌面、平板和手机 +- `admin/`:Vue3 后台管理端,已完成租户账号登录、短期访问令牌、轮换刷新令牌、当前会话、注销和 401 自动清理,并接入 M08-B 保洁运营工作台及 M08-D 计划内运营工作区;必须适配桌面、平板和手机 - `miniapp/`:微信原生小程序,已接入顾客端主链路与保洁端任务大厅、我的任务、照片上传、驳回补做和保洁员统计看板 - `database/`:迁移、种子和兼容 SQL - `deploy/`:Nginx、PM2、EMQX 模板与部署版本 @@ -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` 为准。 -- 当前执行游标:`M08-D`(DOING);`M08-C` 的可独立工程内容已完成,真实团购商家授权、微信和硬件现场验收保持 `BLOCKED_EXTERNAL`。 -- 最近工程提交:`7e170e8` / `M08-D审计日志与系统配置`,Vue 后台可筛选并导出租户审计、查看脱敏详情和系统概况,安全维护租户名称、时区与平台级启停状态。 -- 下一工程目标:继续 M08-D,补后台登录、自动续期、401 清理和会话入口,替换手工粘贴访问令牌。 +- 当前执行游标:`M09-A`(DOING);`M08-D` 可独立工程内容已完成,真实团购商家授权、微信和硬件现场验收保持 `BLOCKED_EXTERNAL`。 +- 最近工程提交:`0511008` / `M08-D后台登录与可撤销会话`,Vue 后台已使用正式密码登录、轮换刷新令牌、当前会话、401 自动续期/清理和服务端权限菜单。 +- 下一工程目标:进入 M09-A,复核并补齐保洁任务状态机、订单结束自动建任务、事务抢单、管理员指派和超时回收。 ## 版本递进 diff --git a/docs/api-changelog/2026-08-10-M08-D-admin-overview.md b/docs/api-changelog/2026-08-10-M08-D-admin-overview.md index 1c62c5d..3e6e54f 100644 --- a/docs/api-changelog/2026-08-10-M08-D-admin-overview.md +++ b/docs/api-changelog/2026-08-10-M08-D-admin-overview.md @@ -95,3 +95,15 @@ | PUT | `/admin-api/system/tenant` | 租户管理员可维护本租户名称和有效 IANA 时区;只有平台管理员可以显式指定其他 tenantId 或变更租户 `ACTIVE/DISABLED`,写入 `TENANT_SYSTEM_CONFIG_UPDATED` 审计。 | 平台管理员跨租户操作必须显式提供 `tenantId`,省略时仍只作用于其当前会话租户;分页参数在路由和仓储层双重钳制。 + +## 后台登录与可撤销会话增量 + +| 方法 | 路径 | 权限与变更 | +|---|---|---| +| POST | `/admin-api/auth/login` | 以租户代码、规范化登录名和密码登录;仅有效 STAFF 管理角色可用,连续失败 5 次锁定 15 分钟,成功/失败均留审计。每 IP 每分钟最多 10 次。 | +| POST | `/admin-api/auth/refresh` | 使用绑定 session UUID 的随机刷新令牌换取新访问/刷新令牌;数据库只保存 SHA-256,更新使用旧哈希条件保证单次轮换并拒绝重放。每 IP 每分钟最多 30 次。 | +| GET | `/admin-api/auth/me` | 返回脱敏当前用户和服务端计算的 roles、capabilities、storeIds、menus,不返回手机号和凭据。 | +| POST | `/admin-api/auth/logout` | 撤销当前服务端会话;后续访问令牌立即失效。 | +| PUT | `/admin-api/auth/credentials/:userId` | `tenant.manage` 或平台管理权限;为目标租户有效 STAFF 设置唯一登录名和强密码,密码最少 12 位且含字母、数字和特殊字符,更新后撤销该用户全部活动会话。 | + +访问令牌保持现有 JWT 契约,刷新令牌不写明文数据库;Vue 客户端同一时刻只发起一次续期请求,续期或重试仍为 401 时清理本地会话并返回登录页。 diff --git a/docs/current-baseline.md b/docs/current-baseline.md index 98ec979..3317649 100644 --- a/docs/current-baseline.md +++ b/docs/current-baseline.md @@ -1,8 +1,8 @@ # 当前开发成果基线 > V5.0 首次核验日期:2026-06-16 -> audited_commit: `4ae9296` -> next_engineering_target: 继续 M08-D Vue 平台后台,补后台登录、续期、401 清理和会话入口 +> audited_commit: `0511008` +> next_engineering_target: 进入 M09-A,复核并补齐保洁任务状态机、自动建任务、事务抢单、指派和超时回收 > 事实源:当前工作区、Git 历史、状态文档、Windows/WSL 检查脚本。 ## 总体结论 @@ -11,10 +11,10 @@ |---|---|---|---| | 总纲版本 | V5.4 已成为当前权威总纲,旧版已保留为历史备份 | 根目录存在 `V5.4.md` 及旧版总纲 | 可继续按 V5.4 的执行游标开发 | | Git 远端 | `origin=ssh://git@git.txyundm.cn:2222/panda/qipai.git`,分支 `main` | `git rev-list main...origin/main` 为 `0 0` | 本地与远端同步 | -| 正式后端 | 已完成 Fastify、迁移兼容、outbox/worker、多应用租户、微信身份/会话,以及六角色 RBAC 和门店范围 | `backend/src/auth/**`、`database/migrations/2026061805_m02c_rbac.*.sql`、`backend/tests/**` | M01、M02-A/B/C DONE;MySQL 已验证 capability 和跨租户门店授权拒绝;下一阶段 M02-D | -| 后台管理端 | 已建立 Vue3 + Vite + TypeScript + Element Plus 工程,接入 M08-B 保洁工作台,并新增 M08-D 运营总览、门店/房间、订单、资金、渠道、用户、设备、多小程序/租户、媒体装修广告、加盟跟进、审计日志和系统配置工作区;应用页按平台/租户权限分层,敏感审计 metadata 递归脱敏且不读写 AppSecret | `admin/src/App.vue`、`admin/src/components/PlatformAppsPanel.vue`、`admin/src/components/ContentManagementPanel.vue`、`admin/src/components/FranchisePanel.vue`、`admin/src/components/LogsSystemPanel.vue`、`admin/src/components/OperationsOverviewPanel.vue`、`admin/src/components/StoresRoomsPanel.vue`、`admin/src/components/OrdersPanel.vue`、`admin/src/components/PaymentsPanel.vue`、`admin/src/components/ThirdPartyPanel.vue`、`admin/src/components/MembersStaffPanel.vue`、`admin/src/components/DevicesPanel.vue`、`scripts/check-admin-m08-b.mjs`、`scripts/check-admin-m08-d.mjs` | M08-D 保持 DOING;业务读写由后端校验租户、权限和数据范围并写审计;下一增量用正式后台登录与可撤销会话替换手工令牌输入 | -| 微信小程序 | 已纳管微信原生模板,并完成顾客端订单、充值、权益明细、下单抵扣主体链路、保洁任务端照片上传/补做主体链路,以及管理员门店/房态/订单/代下单/验券/会员/员工/保洁/设备/经营统计 | `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 PARTIAL;M08-A 顾客端工程闭环按外部阻塞旁路;M08-B 可独立工程内容已完成;M08-C 可独立工程内容已完成并通过 Windows 与 MySQL 模块回归,游标进入 M08-D;真实团购、微信和硬件现场验收保持外部阻塞 | -| 数据库迁移 | 已新增 M01-B 核心 schema up/down/verify SQL、最小脱敏 seed、旧库结构 fixture、迁移计划/执行 CLI、验证结果数量门禁和 MySQL 8 集成测试 | `database/migrations/2026061601_m01b_core_schema.*.sql`、`database/seeds/2026061601_m01b_minimal_seed.sql`、`database/fixtures/2026061801_m01b_legacy_schema.sql`、`backend/src/db/migration-runner.ts`、`backend/tests/mysql-migration-roundtrip.test.mjs` | M01-B DONE;WSL MySQL 8.4.9 已验证 8 条旧库 fixture、11 条 up、3 条 verify、10 条 down,并验证租户隔离和旧金额整数分转换;不导入真实旧数据 | +| 正式后端 | 已完成 Fastify、迁移兼容、outbox/worker、多应用租户、微信与后台密码身份/可撤销会话、六角色 RBAC、门店范围,以及 M03-M08 业务 API | `backend/src/**`、`database/migrations/**`、`backend/tests/**` | M01-M04、M07 已完成;M05/M06/M08 可独立工程内容完成但外部联调保持 PARTIAL;当前进入 M09-A | +| 后台管理端 | 已建立 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 可独立工程内容完成;真实外部联调仍使 M08 保持 PARTIAL,游标进入 M09-A | +| 微信小程序 | 已纳管微信原生模板,并完成顾客端订单、充值、权益明细、下单抵扣主体链路、保洁任务端照片上传/补做主体链路,以及管理员门店/房态/订单/代下单/验券/会员/员工/保洁/设备/经营统计 | `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 集成测试;最新迁移新增后台凭据及刷新令牌哈希 | `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 往返,并实测 scrypt 登录、刷新轮换与无明文密码 | | M00 部署脚本 | 已有菜单、状态、HTTPS、Certbot、EMQX、备份检查模板 | `setup.sh`、`scripts/setup/`、`deploy/` | PARTIAL,生产未执行 | | 发布清单 dry-run | 可基于当前 HEAD 输出 `deployed=false` 的 release manifest,记录后端/后台/迁移尚未生成而跳过 | `scripts/setup/deploy-business.sh --dry-run .`、`scripts/dev/windows/check-release-manifest.ps1` | 可在 M00 验证结构;真实构建与生产发布待 M01/M09 后接入 | | 参考资料 | 已有清单、脱敏日志、页面/接口/表结构摘要 | `docs/reference-*`、`docs/db-schema-inventory.md` | PARTIAL,仍需按模块迁移正式实现 | @@ -23,8 +23,8 @@ ## 状态校准 -- `docs/module-status.md` 中 M00 仍为 `PARTIAL` 是正确的:生产 Ubuntu 未执行,正式后端/后台/小程序未生成。 -- M01-M10 仍未具备可验收业务实现,保持 `TODO` 或 `PARTIAL`。 +- `docs/module-status.md` 中 M00 仍为 `PARTIAL` 是正确的:生产 Ubuntu 初始化、部署与运维验收尚未执行;后端、后台和小程序源码已在后续模块建立。 +- M01-M04 与 M07 已具备模块工程验收;M05、M06、M08 因真实厂商/硬件/生产条件保持 `PARTIAL`,M09-A 正在开发,M10 尚未进入。 - 任何“目录存在”只能证明骨架存在,不能证明模块完成。 ## Git 历史敏感信息核验 @@ -35,6 +35,6 @@ ## 下一步 -1. 继续 M08-D:在已完成的运营模块基础上补后台登录、访问令牌续期、401 清理和当前会话入口。 -2. 继续复用 M02 权限、M03 门店、M04 订单、M05 支付/团购、M06 设备和 M07 会员能力,不重复初始化后台工程。 +1. 进入 M09-A:对照 V5.4 复核并补齐订单结束自动建保洁任务、完整状态机、事务抢单、管理员指派和超时回收。 +2. 复用 M08-B 已有保洁任务、协作与后台工作台,不重复建立状态模型;先以代码、迁移和真实 MySQL 测试确认缺口。 3. M06-G 真实硬件联调仍等待生产 MQTT 账号/ACL、DeviceID 和现场实物配线。 diff --git a/docs/db-changelog/2026-08-10-M08-D-admin-password-auth.md b/docs/db-changelog/2026-08-10-M08-D-admin-password-auth.md new file mode 100644 index 0000000..20a6298 --- /dev/null +++ b/docs/db-changelog/2026-08-10-M08-D-admin-password-auth.md @@ -0,0 +1,8 @@ +# 2026-08-10 M08-D 后台密码认证 + +- 版本:`2026081004_m08d_admin_password_auth` +- up:新增 `qipai_admin_credentials`,按租户唯一约束登录名和 STAFF 用户,保存 scrypt 哈希、失败次数、锁定时间、密码变更及最近登录时间。 +- 会话扩展:`qipai_auth_sessions` 新增 `refresh_token_hash`、`refresh_expires_at` 和活动刷新过期索引;刷新令牌只保存 SHA-256,不保存可直接使用的明文。 +- down:先删除刷新索引与两列,再删除后台凭据表和迁移版本;与既有顾客微信登录会话兼容。 +- verify:检查凭据表、会话列、唯一/刷新索引和迁移版本。 +- WSL MySQL 8.4.10 已完成 144 up、124 verify、140 down 的 `up → verify → down → up → verify` 往返;实测 scrypt 登录、失败审计、刷新轮换、旧令牌拒绝及无明文密码。 diff --git a/docs/devlogs/2026-08-10-M08-D-Vue平台后台.md b/docs/devlogs/2026-08-10-M08-D-Vue平台后台.md index 33b70ff..029fb9e 100644 --- a/docs/devlogs/2026-08-10-M08-D-Vue平台后台.md +++ b/docs/devlogs/2026-08-10-M08-D-Vue平台后台.md @@ -282,3 +282,29 @@ M08-D 保持 `DOING`。加盟申请与跟进运营完成;下一工程增量补 ### 状态 M08-D 保持 `DOING`。审计日志与系统配置增量完成;下一工程增量补后台登录、访问令牌续期、401 清理和当前会话入口,替换手工粘贴令牌。 + +## 2026-08-10 后台登录与可撤销会话 + +- `ENGINEERING_DELTA=YES` +- 新增租户代码、后台账号和密码登录页,替换手工粘贴访问令牌;恢复页面时通过 `/auth/me` 重新取得服务端权限,菜单按 roles/capabilities 生成。 +- 新增 scrypt 密码凭据、连续失败锁定、成功/失败审计、短期 JWT、随机刷新令牌 SHA-256 存储和并发安全单次轮换;注销、密码更新、用户禁用及权限版本变化继续即时撤销会话。 +- Vue 请求层新增 request ID、401 单飞续期、令牌轮换同步与失败清理;员工工作区可由租户管理员设置唯一登录名和强密码,旧会话自动撤销。 + +### 测试证据 + +- Windows `scripts/dev/windows/test-all.ps1`:34.2 秒完成后端全测、迁移计划、M08 静态门禁和 Vue TypeScript/生产构建;新增文件暂存后,直接执行仓库完整性、敏感信息和空白门禁均通过。 +- WSL 原生临时副本 + MySQL 8.4.10:23.7 秒退出码 0;144 条 up、124 条 verify、140 条 down 完成 `up → verify → down → up → verify`。 +- MySQL 实测真实 scrypt 凭据、错误密码失败审计、成功登录、刷新令牌轮换、旧令牌拒绝和数据库无明文密码;路由测试覆盖锁定、当前会话、弱密码拒绝、凭据设置及注销。 +- Windows 参考包检查结束时曾遇临时解压目录占用提示,不影响仓库、构建或测试;既有 Element Plus 大 chunk 和参考 xjar 超 100MB 仍为非阻塞提示。 + +### 变更影响 + +- 数据库:新增 `2026081004_m08d_admin_password_auth` 可逆迁移,扩展既有会话表并新增后台凭据表。 +- API:新增后台登录、刷新、当前会话、注销和 STAFF 登录凭据设置接口。 +- 后台:正式登录页替换手工令牌;菜单和当前用户由服务端会话驱动,401 自动续期或安全退出。 +- 部署:后端、后台静态产物和迁移有变化;未自动部署生产。 +- 工程提交:`0511008`,已推送并验证 `HEAD == origin/main`。 + +### 状态 + +M08-D 可独立工程内容完成。M08 真实微信、团购和硬件现场验收继续保持 `PARTIAL/BLOCKED_EXTERNAL`,执行游标按规则进入 M09-A 保洁任务状态机复核与补齐。 diff --git a/docs/feature-status.md b/docs/feature-status.md index 9d22674..2c0c450 100644 --- a/docs/feature-status.md +++ b/docs/feature-status.md @@ -36,6 +36,8 @@ > 2026-08-10 M08-D 增量:工程提交 `7e170e8` 为 `AUTH-002`、`TEN-001` 建立租户级安全审计与系统配置工作区;审计支持操作/资源/人员/时间筛选、IP 和递归敏感 metadata 脱敏、详情和当前页 CSV,系统概况展示租户、门店、用户、会话、应用绑定与最新迁移。租户管理员跨租户和启停操作被拒绝,平台跨租户必须显式指定 tenantId。Windows 65.6 秒全量与 WSL MySQL 8.4.10 的 141 up、120 verify、137 down 往返通过,M08-D 继续后台登录与会话入口。 +> 2026-08-10 M08-D 增量:工程提交 `0511008` 为 `AUTH-001`、`AUTH-002`、`BKG-002` 建立正式后台密码登录和可撤销会话入口;密码使用 scrypt,连续失败锁定,刷新令牌仅存 SHA-256 并单次轮换,凭据重置撤销旧会话。Vue 后台替换手工粘贴令牌,401 单飞续期失败后清理本地会话,菜单从服务端权限生成。Windows 全量主体、敏感信息/完整性门禁与 WSL MySQL 8.4.10 的 144 up、124 verify、140 down 往返通过;M08-D 可独立工程内容完成,游标进入 M09-A。 + | ID | 功能 | 模块子阶段 | 状态 | 最近提交 | 测试/验收证据 | 阻塞原因 | 下一步 | |---|---|---|---|---|---|---|---| | ENV-001 | 固定 Windows 工作区 | M00-A/M00-B | DONE | 远端 HEAD | 已确认 `D:\qipai`,Git 根、main 分支、固定 origin 和 push 校验通过。 | - | 后续每模块继续复检。 | @@ -54,14 +56,14 @@ | SYS-001 | 微信原生小程序 | M00-C/M08 | PARTIAL | `96c5fa4` | 微信原生模板已接入顾客端登录态、选店跳转、门店详情、房间列表、报价、预占、测试支付、订单生产微信预支付调起、充值微信支付调起、余额支付、优惠券/套餐下单抵扣参数与可视化选择器、受控 Wi-Fi、订单列表、订单详情、状态历史、取消入口、订单权限开门入口、续费、同门店换房、分享口令生成、个人中心余额/权益/账单汇总、充值计划/充值单入口、优惠券/套餐明细,以及保洁端任务大厅、我的任务、接单、开始、照片上传、提交验收、驳回补做入口、统计和管理侧验收/驳回/免清洁/批量验收/批量驳回/批量免清洁/指派/结算/多人协作/发放 API;后端已接入微信商家转账适配、转账中间态落库、主动轮询同步、微信转账通知回调、微信转账预检、结算详情、管理统计、员工角色筛选、统计趋势、统计按保洁员筛选、待结算候选筛选、任务事件流水、保洁员微信绑定状态、结算转账状态筛选和非生产 Mock 门禁;后台已建立保洁运营工作台,可维护任务协作者、导出单任务成员分账、查看任务详情、照片预览、操作流水和协作分账、批量验收/批量驳回待验收任务、单条或批量标记任务免清洁、导出当前任务列表、单任务详情和单任务操作流水、查看并导出结算单详情、预览并导出待结算候选任务、导出结算列表、批量同步微信转账状态、按转账状态筛选结算单、在结算详情和导出中查看微信确认参数、在微信转账预检中查看并导出凭据/授权/通知 URL/平台证书/OpenID 资料和检查项、发起真实转账前自动预检并在阻断项未处理时禁用 API 发起、统计明细、每日趋势、保洁员绩效排行、保洁员端统计看板、导出当前统计结果、管理保洁员手机号/资料完整度、导出当前保洁员列表、导出当前待补资料保洁员清单、通过保洁员选择器完成任务指派/协作者/结算生成人员选择,按门店和保洁员筛选任务/结算/统计/候选,通过首屏运营待处理入口跳转待验收、驳回补做、待确认结算和待发放队列,并可导出待处理队列摘要,查看微信转账真实商户前置条件,提供真实商户/微信/转账/硬件现场联调清单并支持本地记录、场次信息、关键字搜索、筛选结果 CSV 导出、状态筛选、联调负责人筛选、联调负责人看板、联调执行阶段看板、联调期限记录、联调逾期清单、批量标记、阻断摘要复制、JSON 快照导入导出、分类进度展示、验收结论复制、最后更新时间、证据记录、待补证据清单、联调交接报告、联调风险清单导出、联调归档包导出、收口签署字段和收口归档门禁;`admin npm run build` 和 `node scripts/check-admin-m08-b.mjs` 通过。 | M08-A 真机联调缺微信后台/商户/硬件条件;M08-B 真实商户现场执行和更完整管理界面待继续。 | 继续 M08-B,补更完整保洁运营管理界面和真实商户现场执行记录。 | | CFG-001 | 小程序品牌自定义 | M02-A/M03/M08 | PARTIAL | `c7f27bc` | 已建立 AppID/tenant 品牌配置和 bootstrap;Vue 后台可维护品牌名称、Logo、主题色、客服/加盟电话、分享标题/图片、默认门店和非敏感扩展配置,默认门店强制同租户,更新有审计。 | 媒体选择器与多 AppID 真机展示仍需后续验收。 | M08-D 后续接入媒体资产选择;M10 做多 AppID 真机验收。 | | BKG-010 | 后台多小程序管理 | M02-A/M08/M10 | PARTIAL | `c7f27bc` | Vue 后台已提供逻辑应用与租户绑定列表、启停、默认应用和品牌配置;租户管理员只能改本租户配置,平台管理员才可新增应用/绑定;AppSecret、支付密钥和证书始终只在服务端环境配置。 | 多 AppID 微信后台配置和真机登录未验证。 | M10 配置真实 AppID/AppSecret 并验证租户选择、品牌和登录隔离。 | -| AUTH-001 | 多端统一小程序身份 | M02-B/M02-C/M08 | PARTIAL | `5a300a8` | 已实现微信 code 交换适配器、租户/AppID 隔离身份、JWT、服务端会话、当前用户和注销;禁用、角色/门店范围变化及管理员重置均使旧会话立即失效。 | 缺真实 AppSecret 真机联调和小程序动态角色界面。 | M08 完成小程序角色界面与真机登录。 | -| AUTH-002 | 多级权限 | M02-B/M02-C/M08 | PARTIAL | `5a300a8` | 已建立六类角色、权限目录、用户角色和门店范围;后台员工 API 同时执行 capability、租户和门店范围校验,越权分配被拒绝并记录审计。 | 后续业务资源接口和前端按钮/菜单仍需逐模块接入。 | M03 起所有管理接口复用 capability 与数据范围;M08 完成前端菜单按钮控制。 | +| AUTH-001 | 多端统一小程序身份 | M02-B/M02-C/M08 | PARTIAL | `0511008` | 已实现微信 code 身份、租户/AppID 隔离 JWT 与可撤销会话,并新增后台租户代码/账号/scrypt 密码登录、短期访问令牌、刷新轮换、当前会话和注销;禁用、角色/门店范围、凭据更新及管理员重置均使旧会话失效。 | 缺真实 AppSecret 真机联调和生产后台账号验收。 | M10 使用真实微信与生产后台账号完成端到端登录、续期和注销验收。 | +| AUTH-002 | 多级权限 | M02-B/M02-C/M08 | PARTIAL | `0511008` | 已建立六类角色、权限目录、用户角色和门店范围;管理接口执行 capability、租户和门店范围校验,后台菜单由服务端 access profile 生成,401 续期失败清理会话,关键写操作记录审计。 | 真实生产角色矩阵和跨租户平台账号尚未验收。 | M09 继续复用权限边界;M10 用生产角色矩阵复验菜单与服务端越权拒绝。 | | CLN-001 | 保洁人员管理 | M08-B/M09 | PARTIAL | `M08-B保洁员待补资料导出增量` | `CLEANER` 角色已接入 `cleaning.task.read/write` 和 `cleaning.statistics.read`,保洁接口按登录态、capability 和门店范围裁剪任务大厅;后台已可按 `CLEANER` 角色筛选员工,创建保洁员,编辑姓名/手机号/门店范围/备注,启停账号并重置会话;员工列表返回头像 URL 和微信小程序 openid 绑定状态,后台展示“已绑微信/未绑微信”和资料完整度标签,并复用该列表作为任务指派、协作者管理和生成结算单的可搜索保洁员选择源;保洁员管理页可导出当前筛选页 CSV,带出资料完整度、微信绑定、门店范围、脱敏手机号、最近登录/IP 和备注,也可单独导出待补资料清单,列出未绑定微信、未配置门店范围和缺姓名等缺口。 | 真实商户现场联调和更完整管理界面仍待继续。 | 继续 M08-B/M09,补更完整保洁运营管理界面。 | | CLN-002 | 保洁任务大厅 | M08-B/M09 | PARTIAL | `96c5fa4` | 新增 `qipai_cleaning_tasks`、`qipai_cleaning_task_events`、`GET /app-api/cleaning/tasks/hall`、`GET /app-api/cleaning/tasks/mine`、接单、开始、照片上传、提交验收、驳回补做接口;订单 `FINISHED` 时同事务幂等创建 `WAITING` 保洁任务;管理侧已支持任务查询、按状态/门店/负责人或协作者筛选、任务详情、照片预览、任务事件流水、任务详情协作分账、指派、验收、驳回、免清洁、批量验收、批量驳回、批量免清洁、超时回收、协作者查看/添加/移除、待结算候选筛选与后台预览/导出、正式结算单生成/确认、发放成功标记、发放失败记录、微信转账发放、转账预检、主动同步、批量同步、微信通知回调、结算单详情、结算详情导出、结算转账状态筛选、微信确认参数展示与导出、管理统计、每日趋势、统计按保洁员筛选和保洁员资料管理;小程序 `pages/cleaner/tasks` 已调用真实 app-api 并支持相机/相册上传;后台 `admin/` 已提供任务筛选、当前任务列表导出、单任务详情导出、单任务流水导出、单任务成员导出、待验收任务多选批量验收/驳回、可免清洁任务多选批量标记、保洁员选择器指派、验收、驳回、免清洁、超时回收、任务成员协作管理、任务详情操作流水和协作分账、结算详情、结算详情导出、待结算候选预览导出、结算列表导出、结算批量同步微信状态、转账状态筛选、微信确认参数展示与导出、统计明细、每日趋势、保洁员绩效排行、保洁员端统计看板、统计保洁员筛选、保洁员资料、待补资料导出、手机号维护、微信绑定状态、结算微信转账预检资料展示导出和转账前自动拦截界面、运营待处理快捷入口、运营待处理导出、真实商户/微信/转账/硬件现场联调清单、联调检查项搜索、联调筛选结果导出与筛选清除、联调状态筛选、联调负责人筛选、联调负责人看板、联调执行阶段看板、联调期限记录、联调逾期清单、联调批量标记、联调阻断摘要复制、联调场次信息记录、联调 JSON 快照导入导出、联调分类进度、联调验收结论复制、联调更新时间、联调证据记录、待补证据清单、联调交接报告、联调风险清单导出、联调归档包导出、收口签署字段和收口归档门禁。 | 真实商户现场执行和更完整管理界面仍待继续。 | 继续 M08-B,补更完整保洁运营管理界面。 | | CLN-003 | 保洁统计 | M08-B/M09 | PARTIAL | `642659c` | 新增 `GET /app-api/cleaning/stats`,返回当前保洁员负责人/协作者任务状态计数、任务总数、完成数、驳回数、完成率、待结算金额和已结算金额,小程序展示已抢、进行、待验、完成、任务总数、完成率、驳回、待结算和已结算金额;管理侧新增 `GET /admin-api/cleaning/statistics`,按租户、门店范围、日期、门店和保洁员筛选返回状态分布、门店明细、免清洁统计、结算口径、成员分账排行和每日趋势,保洁员筛选同时覆盖负责人/协作者任务口径、结算单口径和每日已发放金额;后台首屏汇总改为使用管理侧统计接口,统计页支持今日、近7天、本月快捷周期、每日趋势条形展示、免清洁汇总/门店/趋势展示和可搜索保洁员筛选,任务/结算/统计列表支持门店和保洁员筛选以辅助定位统计异常,并可导出当前筛选条件下的汇总、任务状态、结算口径、每日趋势、门店明细、免清洁数量和成员分账 CSV。 | 真实商户现场联调和更完整管理界面待继续。 | M08-B/M09-C 补更完整管理界面。 | | CLN-005 | 保洁驳回/免清洁 | M08-B/M09 | PARTIAL | `eb838f5` | 已支持管理侧驳回、批量驳回和保洁员驳回补做;已新增 `POST /admin-api/cleaning/tasks/:taskId/exempt`,后台任务列表提供免清洁按钮、批量免清洁和 `EXEMPT` 筛选,仓储将可处理任务置为 `EXEMPT`、奖励归零并移除未结算协作者;待结算候选继续只取 `COMPLETED` 且未结算任务,免清洁任务不进入结算;管理统计 summary、门店明细、每日趋势和统计导出均新增免清洁数量,便于核对不结算口径。 | 真实商户现场执行仍待继续。 | 继续 M08-B/M09,补现场验收记录和更完整运营管理界面。 | | STAFF-001 | 员工账号 | M02-D/M08 | PARTIAL | `93f06d2` | 已实现创建员工、分配角色/门店、禁用、备注、重置会话和审计;管理员小程序已展示员工概况,Vue 后台可按角色/状态搜索并完成完整生命周期管理,权限变化即时撤销活动会话。 | 真实员工微信绑定和生产账号生命周期验收待补。 | M10 以真实员工账号验证绑定、门店切换、禁用和重新登录。 | -| BKG-002 | 后台用户管理 | M02-D/M08 | PARTIAL | `93f06d2` | 已实现分页筛选 API、注册/登录时间、状态、角色、门店范围以及手机号/IP 脱敏;Vue 后台新增会员与 STAFF 用户分栏,员工全部角色查询强制 `userType=STAFF`,避免混入顾客。 | 尚缺平台级跨租户用户视图和真实生产数据验收。 | M08-D 后续保持租户隔离;M10 补生产账号验收。 | +| BKG-002 | 后台用户管理 | M02-D/M08 | PARTIAL | `0511008` | 已实现分页筛选、注册/登录时间、状态、角色、门店范围、手机号/IP 脱敏及会员/STAFF 分栏;租户管理员可为同租户有效 STAFF 设置唯一登录名和强密码,更新凭据会撤销其活动会话且不返回密码哈希。 | 尚缺平台级跨租户用户视图和真实生产数据验收。 | M10 以生产平台/租户账号复验跨租户用户视图、凭据重置和审计。 | | TEN-001 | 多门店支持 | M02/M03 | PARTIAL | `15139b3` | 门店 CRUD 与门店管理员数据范围已实现;跨门店写操作在 Windows 和 WSL MySQL 实测被拒绝。 | 地图选店、前端切换与完整订单数据范围待后续阶段。 | M03-C 接入地图选店,M04 起业务资源继承门店范围。 | | STORE-001 | 门店运营配置 | M03-A/M08 | PARTIAL | `1ca783e` | 已实现地址、经纬度、营业状态、每周营业时间、时区、客服电话、Wi-Fi、通知地址和排序;Vue 后台支持授权范围内门店筛选、详情、新增、编辑和归档,列表只返回 Wi-Fi 是否已配置,编辑留空不会清除原密码。 | 通宵场、延时关灯和清洁策略仍需与订单/设备联动补齐。 | M08-D 后续页面继续复用门店选择;M10 做生产配置验收。 | | ROOM-001 | 房间配置 | M03-A/M04/M08 | PARTIAL | `1ca783e` | 已实现房型、整数分价格、工作日/节假日/通宵/全天价、最低消费、押金、最低时长、提前规则、禁用时段、标签、图片和软删除;Vue 后台支持筛选、新增、完整编辑、配置启停、运营房态、停用时段和归档。 | 节假日日历与真实运营价格复算仍需生产验收。 | M08-D 订单页复用房间信息;M10 做生产数据验收。 | diff --git a/docs/module-status.md b/docs/module-status.md index 4d16d02..66168be 100644 --- a/docs/module-status.md +++ b/docs/module-status.md @@ -2,16 +2,16 @@ ```yaml execution_cursor: - current_module: M08 - current_stage: M08-D + current_module: M09 + current_stage: M09-A stage_status: DOING - last_completed_stage: M08-C - next_stage: M08-D - last_engineering_commit: `7e170e8` + last_completed_stage: M08-D + next_stage: M09-A + last_engineering_commit: `0511008` last_push_verified: true base_branch: main blocked_reason: "M08-A 真机合法域名、真实微信支付和实物开门验证缺微信后台/商户/硬件现场条件;M08-B 可独立工程内容已完成,真实商户凭据、微信后台配置、生产小额转账和实物硬件结果保持 BLOCKED_EXTERNAL;M08-C 可独立工程内容已完成,真实美团/抖音/快手商家授权与真机验券保持 BLOCKED_EXTERNAL,已按规则旁路进入 M08-D。M06-G 真实硬件联调仍缺生产 MQTT 账号/ACL、DeviceID、控制箱、门锁、插座和现场配线。" - updated_at: 2026-08-10T13:29:20+08:00 + updated_at: 2026-08-10T13:55:05+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。 | | M06 设备、MQTT 与真实硬件联动 | PARTIAL | `d01f771` | docs/devlogs/2026-06-24-M06-G-真实硬件联调.md | M06-A 至 F 已完成 MQTT、拓扑、协议幂等、控制箱、Sub-1G 门锁、智慧插座和订单自动联动任务;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 已完成会员画像、订单、消费、余额、充值、优惠券和套餐聚合查询。 | -| M08 微信原生小程序完整业务 | PARTIAL | `7e170e8` | docs/devlogs/2026-08-10-M08-D-Vue平台后台.md | M08-A 顾客端、M08-B 保洁端和 M08-C 管理员/员工端的可独立工程内容已完成,真实微信、团购和硬件现场验收按 BLOCKED_EXTERNAL 旁路。M08-D 已建立 Vue 运营总览及门店、订单、资金、渠道、用户、保洁、设备、多应用租户、媒体装修广告、加盟跟进、审计日志和系统配置工作区;继续后台登录与会话入口。 | -| M09 后台管理端完整业务 | TODO | - | - | - | +| M08 微信原生小程序完整业务 | PARTIAL | `0511008` | docs/devlogs/2026-08-10-M08-D-Vue平台后台.md | M08-A/B/C/D 可独立工程内容已完成;Vue 后台已覆盖正式密码登录、短期访问令牌、轮换刷新令牌、401 清理、服务端权限菜单及计划内运营工作区。真实微信、团购和硬件现场验收按 BLOCKED_EXTERNAL 保持 PARTIAL,执行游标已旁路进入 M09-A。 | +| M09 保洁任务、结算、商品和库存 | DOING | `0511008` | - | 游标已进入 M09-A;先对照 V5.4 复核既有保洁任务状态机、订单结束自动建任务、抢单事务锁、指派和超时回收,再补齐缺口。 | | M10 部署、域名、验收和运维闭环 | TODO | - | - | - |