本次已完成市场专员、地区经理在小程序中的存储业务入口,以及由 mobile-oa-h5 承载的六类业务功能:预签约订单、协议单、催缴、缴费、样本和运费。小程序只负责受控入口和 WebView 宿主,业务列表、详情、表单与有限动作均在 H5 中实现。
业务链路为:
mobile-h5 首页菜单
-> /pages/market/webview/index?entry=<固定入口>
-> mobile-oa-h5 固定角色路由
-> /api/mini/market/{specialist|manager}/...
客户端不能传入任意 H5 URL、租户、现场 scope 或销售/经理身份来扩大权限。
菜单迁移为每个移动端虚拟根创建两个目录和十二个叶子,不自动写入角色菜单关系:
| 角色组 | 六个固定入口 |
|---|---|
| 市场专员 | specialist-presign、specialist-protocol、specialist-payment-chase、specialist-payment、specialist-sample、specialist-freight |
| 地区经理 | manager-presign、manager-protocol、manager-payment-chase、manager-payment、manager-sample、manager-freight |
首页接口返回 groupTitle 区分角色组。目录本身没有可进入 path;入口 icon 按设计保持空置。未知 entry、原型链键和任意 URL 均被白名单拒绝。
所有移动市场接口同时应用:
现场范围为:
sales_user_id = 当前用户;is_leader=1)或单据 region_manager_user_id = 当前用户;详情和所有写操作均重新校验范围。涉及并发写入的样本办理、运费关联和批次头修改使用 MySQL current read、稳定锁顺序与锁后权限复核,避免 REPEATABLE READ 旧快照授权。
| 模块 | 实际开放动作 | 明确不开放 |
|---|---|---|
| 预签约订单 | 列表、详情、新建、编辑、原子转正式 | 删除、财务确认;终态继续编辑/转换 |
| 协议单 | 细胞/科研双来源列表、详情、新建、编辑 | 审核、作废、退款、财务动作、转换 |
| 催缴 | 逾期未清与未来 30 天未清查询,跳转登记缴费 | 催缴编辑实体、发送/标记催缴 |
| 缴费 | v2 样本缴费查看、登记/编辑草稿、提交财务确认、确认中撤回 | 财务确认/拒绝、删除、退款、开票、修改应缴计划 |
| 样本 | 双来源进度查看;细胞储存证/保险轻量办理 | 科研样本写入、接收/质检/生产/入库状态、实验室码 |
| 运费 | scope 内批次查看、新建、样本关联/解绑;own-only 批次头编辑 | 修改含范围外明细的共享批次头、查看隐藏明细/数量 |
后端返回 allowedActions,H5 再与模块静态白名单取交集。按钮隐藏不是授权手段,直达写接口重复执行状态和范围校验。
visibleItemCount,不返回总关联数、隐藏数、共享标志或他人明细;移动表单 options 使用固定资源接口,不提供任意字典或全租户用户搜索。地区、医院和人员均按当前角色与业务单范围收敛;样本办理人员限定为该样本当前父单地区内的启用人员。
附件上传规则:
ftyp box 和品牌;本期未增加不安全的移动端附件下载接口。
建议按以下顺序执行:
docs/sql/migrations/2026-10-10-market-field-scope-indexes.sqldocs/sql/migrations/2026-10-10-presign-convert-unique.sqldocs/sql/migrations/2026-10-11-market-payment-indexes.sqldocs/sql/migrations/2026-10-11-market-sample-indexes.sqldocs/sql/migrations/2026-10-11-market-freight-indexes.sqldocs/sql/migrations/2026-10-10-market-mobile-menus.sql迁移前应先备份相关表,并处理脚本报告的历史重复预签转换、重复运费批次号或重复有效样本关联。菜单迁移后由管理员将十二个叶子权限分配给对应角色。
回滚采用数据库备份恢复或经审核的反向 DDL;不建议在未核对线上索引依赖时直接删除索引/生成列。菜单回滚应按迁移自然键删除新增叶子与空目录,不处理既有角色授权以外的数据。
2026-10-11 最终验证:
215 passed;11 passed;912 passed, 4 failed;后续已修复 CBC 测试契约和 3 项协议排序问题,复验为 916 passed, 0 failed;compileall:通过;0 errors, 5 warnings,5 项为脚本既有实体告警;该脚本未注册本次 market DTO,本次字段白名单由 test_market_* 覆盖;mobile-h5:5/5 passed;mobile-oa-h5:62/62 passed;mobile-oa-h5 Vite 构建:通过,保留既有大 chunk 警告;git diff --check:通过;6122 nodes / 33427 edges / 40 communities。MySQL 验证使用隔离启动的 MySQL 5.7.24 临时实例,六份迁移连续执行两轮均成功。两个测试租户各得到 2 个目录和 12 个叶子,sys_role_menu 未增加;索引、生成列和重复数据预检符合预期。临时数据库验证后已删除。
自动化测试和构建已完成。以下环境相关项目尚未在本任务中执行,因此不声明通过:
部署到测试环境后应按实施计划 Task 11 Step 4 的七项矩阵完成并留存截图/录屏。
mobile-h5 Node 测试有未声明 type: module 的重解析警告,不影响当前运行结果;