feat(P11-P12): 落地治理开关与移动端MVP(G0-G6/H1/M1-M4)

- 新增 Feature Flag 模型、评估服务与管理 API(erp_sync/invoice_verification)\n- 完成 ERP 与验真灰度收口(路由/服务/作业统一判定)\n- 补齐 pay 与手动 sync 的 department_id 灰度上下文\n- 增加管理后台开关页、PWA 基础设施与移动拍照/审批页面\n- 增加回归脚本、安全基线与压测脚本,更新文档与执行合同\n\nIssue: G0,G1,G2,G3,G4,G5,G6,H1,M1,M2,M3,M4
这个提交包含在:
2026-02-11 20:33:30 +08:00
父节点 3813d1955e
当前提交 3b221a2202
共修改 44 个文件,包含 6760 行新增和 74 行删除
+16 -4
查看文件
@@ -1,8 +1,8 @@
# hyb-oa 实现状态矩阵(P5-P10)
# hyb-oa 实现状态矩阵(P5-P12)
**快照日期**:2026-02-10
**范围**:`F1-F42`(含 `F19b/F19c/F19d`)+ `R1-S2` + `P9A1-P9D1` + `P10E1-P10G1`,共 80 项。
**事实源**:`issues/2026-02-09_13-39-02-p5-blueprint-v3.csv` + `issues/2026-02-09_23-30-00-p6-p8-remaining-work-master.csv` + `issues/2026-02-10_09-42-31-p9-maintenance-performance-matrix.csv` + `issues/2026-02-10_10-35-30-p10-production-hardening.csv`(执行合同)
**快照日期**:2026-02-11
**范围**:`F1-F42`(含 `F19b/F19c/F19d`)+ `R1-S2` + `P9A1-P9D1` + `P10E1-P10G1` + `G0-G6` + `H1` + `M1-M4`,共 92 项。
**事实源**:`issues/2026-02-09_13-39-02-p5-blueprint-v3.csv` + `issues/2026-02-09_23-30-00-p6-p8-remaining-work-master.csv` + `issues/2026-02-10_09-42-31-p9-maintenance-performance-matrix.csv` + `issues/2026-02-10_10-35-30-p10-production-hardening.csv` + `issues/2026-02-11-p11-p12-governance-mobile.csv`(执行合同)
**说明**:
- 本矩阵用于全局读图(审计/交接/回归覆盖追踪),不替代 `issues/*.csv` 的执行合同职责。
@@ -93,3 +93,15 @@
| P10M1 | invoicePool二阶段拆分(读路径) | §16(维护性治理) | 2026-02-10_10-35-30-p10-production-hardening.csv | 2026-02-10_10-35-30-p10-production-hardening.csv | 2026-02-10 | DONE | node --check invoicePool 主/子模块 | none |
| P10M2 | invoicePool二阶段拆分回归与基线更新 | §16(回归与文档) | 2026-02-10_10-35-30-p10-production-hardening.csv | 2026-02-10_10-35-30-p10-production-hardening.csv | 2026-02-10 | DONE | server/scripts/regression-verification.sh + regression-workflow-actions.sh | none |
| P10G1 | 矩阵与执行合同同步到P10 | §16(状态治理) | 2026-02-10_10-35-30-p10-production-hardening.csv | 2026-02-10_10-35-30-p10-production-hardening.csv | 2026-02-10 | DONE | scripts/check-minimal.sh | 覆盖 P5-P10 全量 |
| G0 | P11/P12执行合同建档 | §16(执行合同治理) | 2026-02-11-p11-p12-governance-mobile.csv | 2026-02-11-p11-p12-governance-mobile.csv | 2026-02-11 | DONE | manual | none |
| G1 | Feature Flag模型与评估服务 | §16(灰度治理) | 2026-02-11-p11-p12-governance-mobile.csv | 2026-02-11-p11-p12-governance-mobile.csv | 2026-02-11 | DONE | cd server && npm run prisma:validate | none |
| G2 | 开关管理API与审计 | §16(灰度治理) | 2026-02-11-p11-p12-governance-mobile.csv | 2026-02-11-p11-p12-governance-mobile.csv | 2026-02-11 | DONE | node --check server/src/routes/featureFlags.js | none |
| G3 | ERP灰度接入(pay+手动sync) | §16(外部集成灰度) | 2026-02-11-p11-p12-governance-mobile.csv | 2026-02-11-p11-p12-governance-mobile.csv | 2026-02-11 | DONE | server/scripts/regression-integrations.sh | 补齐department_id上下文 |
| G4 | 验真开关统一收口(路由+服务+作业) | §16(验真灰度) | 2026-02-11-p11-p12-governance-mobile.csv | 2026-02-11-p11-p12-governance-mobile.csv | 2026-02-11 | DONE | server/scripts/regression-verification.sh | 判定统一收口 |
| G5 | 管理后台开关页 | §16(运营治理) | 2026-02-11-p11-p12-governance-mobile.csv | 2026-02-11-p11-p12-governance-mobile.csv | 2026-02-11 | DONE | client:typecheck/build | none |
| G6 | 回归脚本与文档收口 | §16(回归工程化) | 2026-02-11-p11-p12-governance-mobile.csv | 2026-02-11-p11-p12-governance-mobile.csv | 2026-02-11 | DONE | server/scripts/regression-feature-flags.sh | none |
| H1 | 安全与压测门槛 | §16(非功能治理) | 2026-02-11-p11-p12-governance-mobile.csv | 2026-02-11-p11-p12-governance-mobile.csv | 2026-02-11 | DONE | server/scripts/security-baseline.sh + benchmark-dashboard.sh | none |
| M1 | PWA基础设施 | §16(移动端治理) | 2026-02-11-p11-p12-governance-mobile.csv | 2026-02-11-p11-p12-governance-mobile.csv | 2026-02-11 | DONE | client:typecheck/build | none |
| M2 | 移动拍照与离线上传队列 | §16(移动端治理) | 2026-02-11-p11-p12-governance-mobile.csv | 2026-02-11-p11-p12-governance-mobile.csv | 2026-02-11 | DONE | manual + client:typecheck/build | iOS前台恢复重放 |
| M3 | 移动审批快捷处理 | §16(移动端治理) | 2026-02-11-p11-p12-governance-mobile.csv | 2026-02-11-p11-p12-governance-mobile.csv | 2026-02-11 | DONE | manual + client:typecheck/build | none |
| M4 | P12验收与收口 | §16(状态治理) | 2026-02-11-p11-p12-governance-mobile.csv | 2026-02-11-p11-p12-governance-mobile.csv | 2026-02-11 | DONE | docs/mobile/pwa-regression-checklist.md | none |
+38
查看文件
@@ -0,0 +1,38 @@
# PWA 回归清单(P12)
## 前置条件
- `client` 已完成构建:`cd client && npm run build`
- 浏览器支持 PWA(Chrome/Safari 最新版)
- 服务端 API 可用
## 场景 A:安装与离线壳
1. 打开系统首页,确认可出现安装入口(浏览器原生 UI)。
2. 安装到桌面后重新打开,确认可进入系统壳页面。
3. 断网后刷新,确认仍可打开壳页面(离线壳生效)。
期望:离线壳可访问,不应白屏崩溃。
## 场景 B:移动拍照离线上传
1. 访问 `移动拍照` 页面。
2. 断网,选择图片文件,点击“立即上传”。
3. 确认提示“已加入待上传队列”。
4. 恢复网络,点击“同步队列”或等待自动重放。
5. 进入票据中心确认文件已上传。
期望:离线缓存成功,联网可重放成功。
## 场景 C:移动审批快捷动作
1. 使用审批角色访问 `移动审批` 页面。
2. 选择待办任务,依次测试 `通过` / `驳回` / `退回` / `转审`。
3. 返回待办列表与详情页确认状态同步刷新。
期望:动作闭环,错误提示可读。
## 场景 D:权限与边界
1. 非审批角色访问 `移动审批`,应被拒绝(403页)。
2. 非上传角色访问 `移动拍照`,应被拒绝(403页)。
期望:权限守卫生效。
## 备注
- iOS 场景仅保证前台恢复后的重放,不承诺后台持续同步。
+27
查看文件
@@ -0,0 +1,27 @@
# 非功能基线(P10.5)
更新时间:2026-02-11
## 安全基线
- 使用 `server/scripts/security-baseline.sh` 检查关键安全配置与核心路由语法。
- 发布前要求:
- `JWT_SECRET` 非默认值。
- `ERP_SYNC_ENABLED` / `INVOICE_VERIFICATION_ENABLED` 通过 Feature Flag 治理,默认保持关闭。
- `npm audit --omit=dev --audit-level=high` 输出需评审并记录处理策略。
## 性能基线(Dashboard)
- 使用 `server/scripts/benchmark-dashboard.sh` 对以下端点做基线采样:
- `/api/dashboard/expense-overview`
- `/api/dashboard/trends`
- `/api/dashboard/top-categories`
- `/api/dashboard/approval-efficiency`
- 默认采样次数:`ITERATIONS=10`。
- 建议阈值(测试环境):
- 平均响应(avg)< 500ms
- 最大响应(max)< 1500ms
## 回滚原则
- 若非功能指标异常,先执行配置回滚而非代码回滚:
1. 将 `erp_sync` 和 `invoice_verification` 设为 `force_off`。
2. 必要时将 env 硬闸 `ERP_SYNC_ENABLED=false`、`INVOICE_VERIFICATION_ENABLED=false`。
- 保留审计与历史数据,不做 destructive 数据回滚。