diff --git a/README.md b/README.md index 441ac67..b02b46f 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-C`(DOING);`M08-B` 的可独立工程内容已完成,真实商户、微信和硬件现场验收保持 `BLOCKED_EXTERNAL`。 -- 最近工程提交:`90e230c` / `M08-B现场执行记录追溯`,联调检查项可追加多次执行结果,历史随搜索、快照、报告、CSV 和归档包保留。 -- 下一工程目标:继续 M08-C,完成管理员/员工小程序的门店概况、房态与订单管理首段闭环。 +- 最近工程提交:`b70ada0` / `M08-C管理员房态运营入口`,同一小程序按角色显示授权门店、完整房态和门店订单,STAFF 只读、管理员可审计调整房态。 +- 下一工程目标:继续 M08-C,补订单筛选、订单处置和管理员代下单。 ## 版本递进 diff --git a/docs/api-changelog/2026-08-10-M08-C-management.md b/docs/api-changelog/2026-08-10-M08-C-management.md new file mode 100644 index 0000000..aba9257 --- /dev/null +++ b/docs/api-changelog/2026-08-10-M08-C-management.md @@ -0,0 +1,9 @@ +# 2026-08-10 M08-C 管理员/员工小程序 API + +| 方法 | 路径 | 权限 | 结果 | +|---|---|---|---| +| GET | `/app-api/management/stores` | `store.operation.read/write`、`tenant.manage` 或平台管理员 | 返回当前账号授权范围内门店。 | +| GET | `/app-api/management/stores/:storeId/rooms` | 读权限且门店在授权范围 | 返回包含停用房间在内的完整配置/运营房态。 | +| PATCH | `/app-api/management/rooms/:id/status` | 写权限且门店在授权范围 | 调整配置状态或运营状态并写审计;STAFF 只读账号返回 403。 | + +房态请求体必须包含 `storeId`、非空 `reason`,并至少包含 `configurationStatus` 或 `operationalStatus` 之一。接口继续使用统一 Bearer 会话与服务端门店范围,不信任前端隐藏按钮。 diff --git a/docs/current-baseline.md b/docs/current-baseline.md index d13ba08..4147798 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-C 管理员/员工小程序门店概况、房态与订单管理 +> next_engineering_target: 继续 M08-C 管理员/员工小程序订单筛选、处置和代下单 > 事实源:当前工作区、Git 历史、状态文档、Windows/WSL 检查脚本。 ## 总体结论 diff --git a/docs/db-changelog/2026-08-10-M08-C-management.md b/docs/db-changelog/2026-08-10-M08-C-management.md new file mode 100644 index 0000000..5dffa67 --- /dev/null +++ b/docs/db-changelog/2026-08-10-M08-C-management.md @@ -0,0 +1,7 @@ +# 2026-08-10 M08-C 管理员/员工权限迁移 + +- 版本:`2026081001_m08c_staff_management_access` +- up:为所有有效 STAFF 角色补 `profile.read` 和 `store.operation.read`,不授予写权限。 +- down:只删除 STAFF 的这两项角色权限,不删除角色、用户或门店授权。 +- verify:允许空 STAFF 角色集合;存在 STAFF 角色时要求每个有效角色同时拥有两项权限。 +- WSL MySQL 8.4.10 已完成 `up → verify → down → up → verify`。 diff --git a/docs/devlogs/2026-08-10-M08-C-管理员员工端.md b/docs/devlogs/2026-08-10-M08-C-管理员员工端.md new file mode 100644 index 0000000..0df1825 --- /dev/null +++ b/docs/devlogs/2026-08-10-M08-C-管理员员工端.md @@ -0,0 +1,30 @@ +# M08-C 管理员/员工端 + +## 2026-08-10 门店概况、房态与订单总览 + +- `ENGINEERING_DELTA=YES` +- 同一微信小程序根据 `/app-api/auth/me` 的角色动态展示“门店管理”入口;`STAFF`、`STORE_ADMIN`、`TENANT_ADMIN`、`PLATFORM_ADMIN` 可进入,保洁角色继续使用独立任务入口。 +- 新增门店运营页,按授权门店切换,展示房间总数、空闲、占用、待处理和活跃订单,并列出完整房态和近期订单。 +- 新增 `/app-api/management/stores`、`/app-api/management/stores/:storeId/rooms` 和 `/app-api/management/rooms/:id/status`;读取要求 `store.operation.read`,房态调整和启停要求 `store.operation.write` 或租户/平台管理权限。 +- 房态写操作记录 `ROOM_STATUS_UPDATED` 审计日志,metadata 包含门店、配置状态、运营状态和操作原因。 +- 新增 `2026081001_m08c_staff_management_access` up/down/verify,为既有 STAFF 角色补 `profile.read`、`store.operation.read` 最小只读权限;后续登录动态补权逻辑同步更新。 +- 新增 `scripts/check-miniapp-m08-c.mjs` 并接入 Windows 全量门禁,覆盖角色入口、页面注册、管理 API、只读/可写按钮和迁移。 +- WSL MySQL 8.4.10 往返期间发现并修复两处既有内部问题:M08-A 充值迁移验证的 5 列/2 索引期望漏项导致 M08-B 规则错位;定价仓储误读不存在的 `qipai_rooms.room_category_id`,已改为迁移真实字段 `category_id` 并补契约断言。 + +## 测试证据 + +- `powershell -ExecutionPolicy Bypass -File scripts/dev/windows/test-all.ps1`:退出码 0;后端全量测试、后台生产构建、M08-A/B/C 静态验收、迁移计划、固定域名、敏感信息、仓库完整性全部通过。 +- WSL 原生临时副本 + MySQL 8.4.10:`up → verify → down → up → verify` 退出码 0;136 条 up、114 条 verify、130 条 down,临时库与账号自动清理。 +- `GET /app-api/management/stores` 与授权门店房态读取:200;STORE_ADMIN 房态更新:200;只有 `store.operation.read` 的 STAFF 房态写入:403。 +- 已知非阻塞提示:参考目录既有 xjar 超过 100MB;Element Plus 产物 chunk 超过 500kB;WSL npm 报告 4 个 high audit 项及 Node 26 allow-scripts 提示,未执行破坏性自动升级。 + +## 变更影响 + +- 数据库:新增 STAFF 最小只读权限迁移,可回滚。 +- API:新增 3 个小程序管理端点;既有后台管理 API 不变。 +- 部署:后端、小程序和数据库迁移有变化;生产更新时必须先备份,再由菜单更新流程执行迁移与后端/小程序发布,未自动部署生产。 +- 工程提交:`b70ada0`,已推送并验证 `HEAD == origin/main`。 + +## 状态 + +M08-C 保持 `DOING`。门店概况、授权房态、订单总览和最小房态操作已完成;下一工程增量继续订单筛选、订单处置和管理员代下单,不移动到 M08-D。 diff --git a/docs/feature-status.md b/docs/feature-status.md index b21f1e0..b8af644 100644 --- a/docs/feature-status.md +++ b/docs/feature-status.md @@ -4,6 +4,8 @@ > 2026-08-10 M08-B 增量:工程提交 `90e230c` 为 `SYS-001`、`CLN-002`、`CLN-005` 补齐现场联调多次执行记录追溯;历史已纳入搜索、v2 快照(兼容 v1 导入)、CSV、交接报告与归档包。M08-B 可独立工程内容完成,真实商户/微信/硬件验收保持 `BLOCKED_EXTERNAL`,游标进入 M08-C。 +> 2026-08-10 M08-C 增量:工程提交 `b70ada0` 为 `AUTH-001`、`AUTH-002`、`ROOM-002`、`ADM-001` 建立管理员/员工小程序首段闭环;角色入口、授权门店、完整房态、订单总览、STAFF 只读、管理员房态写入与审计、可回滚权限迁移均已通过 Windows 全量和 WSL MySQL 8.4.10 往返。M08-C 保持 `DOING`,继续订单处置与代下单。 + | ID | 功能 | 模块子阶段 | 状态 | 最近提交 | 测试/验收证据 | 阻塞原因 | 下一步 | |---|---|---|---|---|---|---|---| | ENV-001 | 固定 Windows 工作区 | M00-A/M00-B | DONE | 远端 HEAD | 已确认 `D:\qipai`,Git 根、main 分支、固定 origin 和 push 校验通过。 | - | 后续每模块继续复检。 | @@ -62,4 +64,3 @@ - diff --git a/docs/module-status.md b/docs/module-status.md index a4d19b8..f3e7e23 100644 --- a/docs/module-status.md +++ b/docs/module-status.md @@ -7,11 +7,11 @@ execution_cursor: stage_status: DOING last_completed_stage: M07-D next_stage: M08-C - last_engineering_commit: `90e230c` + last_engineering_commit: `b70ada0` last_push_verified: true base_branch: main blocked_reason: "M08-A 真机合法域名、真实微信支付和实物开门验证缺微信后台/商户/硬件现场条件;M08-B 可独立工程内容已完成并补齐多次现场执行记录追溯,真实商户凭据、微信后台配置、生产小额转账和实物硬件结果保持 BLOCKED_EXTERNAL,已按规则旁路进入 M08-C。M06-G 真实硬件联调仍缺生产 MQTT 账号/ACL、DeviceID、控制箱、门锁、插座和现场配线。" - updated_at: 2026-08-10T09:46:46+08:00 + updated_at: 2026-08-10T10:08:00+08:00 ``` | 模块 | 状态 | 最近提交 | 最近开发日志 | 备注 |