From 93d83e81b9db1f2b94a4331ae3860a36a331f8d1 Mon Sep 17 00:00:00 2001 From: Codex Date: Mon, 10 Aug 2026 13:30:50 +0800 Subject: [PATCH] =?UTF-8?q?docs(M08-D):=20=E5=9B=9E=E5=A1=AB=E5=AE=A1?= =?UTF-8?q?=E8=AE=A1=E6=97=A5=E5=BF=97=E4=B8=8E=E7=B3=BB=E7=BB=9F=E9=85=8D?= =?UTF-8?q?=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 4 +-- .../2026-08-10-M08-D-admin-overview.md | 10 ++++++++ docs/current-baseline.md | 6 ++--- .../2026-08-10-M08-D-admin-overview.md | 2 ++ docs/devlogs/2026-08-10-M08-D-Vue平台后台.md | 25 +++++++++++++++++++ docs/feature-status.md | 2 ++ docs/module-status.md | 6 ++--- 7 files changed, 47 insertions(+), 8 deletions(-) diff --git a/README.md b/README.md index 610d29b..0422e3e 100644 --- a/README.md +++ b/README.md @@ -121,8 +121,8 @@ 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`。 -- 最近工程提交:`aa4a6bd` / `M08-D加盟申请与跟进运营`,小程序可幂等提交加盟意向,Vue 后台可筛选、分派、跟进和受控流转,完整历史与审计按租户隔离。 -- 下一工程目标:继续 M08-D,补审计日志与系统配置运营页面。 +- 最近工程提交:`7e170e8` / `M08-D审计日志与系统配置`,Vue 后台可筛选并导出租户审计、查看脱敏详情和系统概况,安全维护租户名称、时区与平台级启停状态。 +- 下一工程目标:继续 M08-D,补后台登录、自动续期、401 清理和会话入口,替换手工粘贴访问令牌。 ## 版本递进 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 e1163ef..1c62c5d 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 @@ -85,3 +85,13 @@ | POST | `/admin-api/franchise-applications/:id/follow-ups` | 新增电话、微信、面谈或备注记录,更新下次跟进时间,并执行 `NEW → CONTACTED → QUALIFIED → CONVERTED/REJECTED` 受控流转。 | 联系电话只进入受权限保护的业务表和响应,不写入审计 metadata;`CONVERTED` 表示已签约待开通,不创建租户,真实开通编排留在 M10-C。 + +## 审计日志与系统配置增量 + +| 方法 | 路径 | 权限与变更 | +|---|---|---| +| GET | `/admin-api/audit-logs` | `tenant.manage` 或平台管理权限;支持操作、资源类型、操作人、关键字、时间和分页筛选,默认 30 天、最长 366 天。响应掩码 IP,并递归过滤 token、密码、密钥、证书、手机号、OpenID、接收方和券码等 metadata。 | +| GET | `/admin-api/system/overview` | 返回目标租户基本信息、门店/用户/活动会话/应用绑定/当日审计计数和最新 schema 迁移;租户管理员只能读取本租户。 | +| PUT | `/admin-api/system/tenant` | 租户管理员可维护本租户名称和有效 IANA 时区;只有平台管理员可以显式指定其他 tenantId 或变更租户 `ACTIVE/DISABLED`,写入 `TENANT_SYSTEM_CONFIG_UPDATED` 审计。 | + +平台管理员跨租户操作必须显式提供 `tenantId`,省略时仍只作用于其当前会话租户;分页参数在路由和仓储层双重钳制。 diff --git a/docs/current-baseline.md b/docs/current-baseline.md index bb52994..98ec979 100644 --- a/docs/current-baseline.md +++ b/docs/current-baseline.md @@ -2,7 +2,7 @@ > V5.0 首次核验日期:2026-06-16 > audited_commit: `4ae9296` -> next_engineering_target: 继续 M08-D Vue 平台后台,补广告与装修管理页面 +> next_engineering_target: 继续 M08-D Vue 平台后台,补后台登录、续期、401 清理和会话入口 > 事实源:当前工作区、Git 历史、状态文档、Windows/WSL 检查脚本。 ## 总体结论 @@ -12,7 +12,7 @@ | 总纲版本 | 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 运营总览、门店/房间、订单、资金、渠道、用户、设备和多小程序/租户配置工作区;应用页按平台/租户权限分层且不读写 AppSecret | `admin/src/App.vue`、`admin/src/components/PlatformAppsPanel.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`、`admin/src/components/CleaningTasksPanel.vue`、`admin/src/components/CleaningSettlementsPanel.vue`、`admin/src/components/CleaningStatisticsPanel.vue`、`admin/src/components/CleanersPanel.vue`、`admin/src/components/CleaningFieldHandoffPanel.vue`、`scripts/check-admin-m08-b.mjs`、`scripts/check-admin-m08-d.mjs` | M08-D 保持 DOING;业务读写由后端校验租户、权限和数据范围并写审计;下一增量补广告与装修管理页面 | +| 后台管理端 | 已建立 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,并验证租户隔离和旧金额整数分转换;不导入真实旧数据 | | M00 部署脚本 | 已有菜单、状态、HTTPS、Certbot、EMQX、备份检查模板 | `setup.sh`、`scripts/setup/`、`deploy/` | PARTIAL,生产未执行 | @@ -35,6 +35,6 @@ ## 下一步 -1. 继续 M08-D:在已完成的运营模块基础上补广告与装修管理页面。 +1. 继续 M08-D:在已完成的运营模块基础上补后台登录、访问令牌续期、401 清理和当前会话入口。 2. 继续复用 M02 权限、M03 门店、M04 订单、M05 支付/团购、M06 设备和 M07 会员能力,不重复初始化后台工程。 3. M06-G 真实硬件联调仍等待生产 MQTT 账号/ACL、DeviceID 和现场实物配线。 diff --git a/docs/db-changelog/2026-08-10-M08-D-admin-overview.md b/docs/db-changelog/2026-08-10-M08-D-admin-overview.md index e9cb22b..e54dd53 100644 --- a/docs/db-changelog/2026-08-10-M08-D-admin-overview.md +++ b/docs/db-changelog/2026-08-10-M08-D-admin-overview.md @@ -11,3 +11,5 @@ - 会员与员工用户管理增量无 schema 变化;会员聚合继续读取用户、钱包、权益、充值、订单和流水表,员工写操作继续复用角色、门店范围、会话和审计表。新增 `userType=STAFF` 仅增加参数化查询过滤,不改变索引或数据模型。 - 设备运营增量无 schema 变化;Vue 后台复用设备资产、通道、父子链路、状态快照、告警、维护、命令和审计表,不新增现场状态旁路或客户端成功标记。 - 多小程序与租户配置增量无 schema 变化;复用 `qipai_platform_apps`、`qipai_tenant_apps`、`qipai_tenant_configs` 和审计表。AppSecret、支付密钥和证书不写入这些表。 +- 审计日志与系统配置增量无 schema 变化;复用 `qipai_audit_logs`、`qipai_tenants`、`qipai_auth_sessions` 和 `qipai_schema_migrations`。查询响应递归脱敏 metadata 和来源 IP,租户名称/时区/平台级启停更新写入审计。 +- WSL MySQL 8.4.10 临时库完成 141 up、120 verify、137 down 的 `up → verify → down → up → verify`;真实验证租户审计筛选、手机号/API key 脱敏、系统概况与配置更新审计。 diff --git a/docs/devlogs/2026-08-10-M08-D-Vue平台后台.md b/docs/devlogs/2026-08-10-M08-D-Vue平台后台.md index a8b1d4f..33b70ff 100644 --- a/docs/devlogs/2026-08-10-M08-D-Vue平台后台.md +++ b/docs/devlogs/2026-08-10-M08-D-Vue平台后台.md @@ -257,3 +257,28 @@ M08-D 保持 `DOING`。广告与装修管理增量完成;下一工程增量补 ### 状态 M08-D 保持 `DOING`。加盟申请与跟进运营完成;下一工程增量补审计日志与系统配置。 + +## 2026-08-10 审计日志与系统配置 + +- `ENGINEERING_DELTA=YES` +- 新增租户级审计查询仓储与 API,支持操作、资源类型、操作人、关键字、时间窗和分页;响应掩码 IPv4/IPv6,并递归过滤 token、密码、密钥、证书、手机号、OpenID、接收方和券码等 metadata。 +- 新增系统概况和租户配置 API,展示门店、用户、活动会话、应用绑定、当日审计与最新迁移;租户管理员只能更新本租户名称和有效 IANA 时区,租户启停及跨租户目标只允许平台管理员且必须显式指定。 +- Vue 后台新增“日志配置”工作区,提供筛选、脱敏详情、当前页 CSV 导出、系统指标、租户配置和 schema 迁移状态。 + +### 测试证据 + +- Windows `scripts/dev/windows/test-all.ps1`:65.6 秒退出码 0;后端全测、系统运营路由、M08-D 静态门禁、Vue TypeScript/生产构建通过。提交前新增文件触发的 untracked 提示在工程提交后已消除。 +- WSL 原生临时副本 + MySQL 8.4.10:23.5 秒退出码 0;141 条 up、120 条 verify、137 条 down 完成 `up → verify → down → up → verify`。 +- MySQL 实测租户范围、审计筛选、递归手机号/API key 脱敏、IP 掩码、系统概况、配置更新和操作人审计;路由测试覆盖跨租户拒绝、366 天上限、无效时区、租户管理员启停拒绝和平台显式跨租户更新。 +- 既有 Element Plus 大 chunk 和参考 xjar 超 100MB 警告保持非阻塞,未执行破坏性自动升级。 + +### 变更影响 + +- 数据库:无迁移;复用租户、会话、应用绑定、迁移历史和审计表。 +- API:新增 `GET /admin-api/audit-logs`、`GET /admin-api/system/overview`、`PUT /admin-api/system/tenant`。 +- 后台:新增响应式安全审计与系统配置入口;未自动部署生产。 +- 工程提交:`7e170e8`,已推送并验证 `HEAD == origin/main`。 + +### 状态 + +M08-D 保持 `DOING`。审计日志与系统配置增量完成;下一工程增量补后台登录、访问令牌续期、401 清理和当前会话入口,替换手工粘贴令牌。 diff --git a/docs/feature-status.md b/docs/feature-status.md index 82bbe40..9d22674 100644 --- a/docs/feature-status.md +++ b/docs/feature-status.md @@ -34,6 +34,8 @@ > 2026-08-10 M08-D 增量:工程提交 `aa4a6bd` 为 `BKG-008`、`FRN-001` 建立小程序加盟申请和 Vue 后台跟进队列;申请按 AppID/tenant 解析、clientRequestId 幂等,后台支持状态/负责人/关键字筛选、详情、同租户有效员工分派、下次跟进和受控状态机,跟进人与审计完整且联系电话不进入审计元数据。Windows 全量与 WSL MySQL 8.4.10 的 141 up、120 verify、137 down 往返通过,M08-D 继续审计日志与系统配置。 +> 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 继续后台登录与会话入口。 + | ID | 功能 | 模块子阶段 | 状态 | 最近提交 | 测试/验收证据 | 阻塞原因 | 下一步 | |---|---|---|---|---|---|---|---| | ENV-001 | 固定 Windows 工作区 | M00-A/M00-B | DONE | 远端 HEAD | 已确认 `D:\qipai`,Git 根、main 分支、固定 origin 和 push 校验通过。 | - | 后续每模块继续复检。 | diff --git a/docs/module-status.md b/docs/module-status.md index 1e5cc55..4d16d02 100644 --- a/docs/module-status.md +++ b/docs/module-status.md @@ -7,11 +7,11 @@ execution_cursor: stage_status: DOING last_completed_stage: M08-C next_stage: M08-D - last_engineering_commit: `aa4a6bd` + last_engineering_commit: `7e170e8` 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:17:35+08:00 + updated_at: 2026-08-10T13:29:20+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 | `aa4a6bd` | docs/devlogs/2026-08-10-M08-D-Vue平台后台.md | M08-A 顾客端、M08-B 保洁端和 M08-C 管理员/员工端的可独立工程内容已完成,真实微信、团购和硬件现场验收按 BLOCKED_EXTERNAL 旁路。M08-D 已建立 Vue 运营总览及门店、订单、资金、渠道、用户、保洁、设备、多应用租户、媒体装修广告和加盟跟进工作区;继续审计日志与系统配置。 | +| 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 | - | - | - | | M10 部署、域名、验收和运维闭环 | TODO | - | - | - |