4.4 KiB
4.4 KiB
报价、合同审批人设置合并至系统管理
日期: 2026-08-08
状态: 设计已确认(方案 A)
选定方案: A — 单页上下分区、各自保存;菜单迁入「系统管理」;软隐藏 CRM 旧菜单
相关页面: 新 /#/system/approver-setting;旧 CRM 路由侧栏不可见
1. 目标
- 【CRM管理】下不再展示【报价单审批人设置】、【合同审批人设置】。
- 【系统管理】下新增菜单【报价、合同审批人设置】,进入后同一页:
- 上方:报价单审批人设置(默认审批人 + 状态 + 重置/保存)
- 下方:合同审批人设置(同上)
- 分区各自保存,改哪块存哪块;行为与现网两页一致。
- 提供幂等 SQL 迁移:插入新菜单、软隐藏旧菜单、将曾拥有任一旧菜单的角色挂上新菜单。
2. 非目标
- 不合并后端数据表或统一为一个 save API。
- 不改报价/合同「提交审批」预填逻辑。
- 不物理删除旧
sys_menu、不强制清理旧sys_role_menu。 - 不抽公共组件(YAGNI;两区块可内联在同一页面)。
3. 已确认决策
| 项 | 结论 |
|---|---|
| 保存方式 | 分区各自「重置 / 保存」 |
| 菜单位置 | 「系统管理」下 |
| 菜单名称 | 报价、合同审批人设置 |
| 旧菜单 | visible='0' 软隐藏;前端路由 isHide: true |
| 实现路径 | 方案 A — 新页面拼装两套现有表单逻辑 |
4. 架构
web-admin/src/views/system/approver-setting/index.vue # 新建:上下两 panel
web-admin/src/router/modules/sqxp.ts # 系统管理子路由 + 旧 CRM 路由隐藏
docs/sql/migrations/2026-08-08-merge-approver-setting-menu.sql
docs/web-admin-ui-pattern-index.md # 对照行更新(可选)
backend/app/api/crm_quote_routes.py # save 权限改为 system:approverSetting
backend/app/api/crm_contract_routes.py # 同上
4.1 页面约定
| 项 | 约定 |
|---|---|
| 路由 | path approver-setting,component /system/approver-setting/index |
| 菜单 perms / menuCode | system:approverSetting |
| 布局 | page-container 内两个 section.panel,纵向排列,间距与现有多 panel 页一致 |
| 上 panel 标题 | 报价单审批人设置 |
| 下 panel 标题 | 合同审批人设置 |
| 用户下拉 | fetchUserOptions 只加载一次,两区共用 |
| API | 仍调用现有 quote/contract approver-setting get/save |
| UI | Fresh Mint;label-position="top";按钮带图标(RefreshLeft / Check) |
旧页 crm/quote/approver-setting、crm/contract/approver-setting 源码可保留(直链仍可用),侧栏不展示。
4.2 权限(必做小改)
现网 save 接口守卫为:
crm:quote:approverSettingcrm:contract:approverSetting
菜单合并后,若角色仅有新菜单 system:approverSetting,保存会 403。因此:
- 两处 save 的
require_menu_code(...)改为system:approverSetting。 - GET 仍为
require_admin_or_super_admin(不变)。 - SQL:为曾拥有任一旧菜单的角色插入新菜单
sys_role_menu(幂等)。 super_admin仍放行,不依赖角色菜单。
4.3 菜单 SQL
| 项 | 值 |
|---|---|
| 新菜单 id | SYS_APPROVER_SETTING(与 SYS_OPERLOG 风格一致) |
| parent_id | SYSM000000000000000000000000000001 |
| path | approver-setting |
| component | /system/approver-setting/index |
| perms | system:approverSetting |
| order_num | 9(操作日志之后) |
| 旧菜单 id | CRM3000000000000000000000000015、CRM3000000000000000000000000026 → visible='0' |
开发环境 VITE_ACCESS_MODE=frontend 时侧栏以 sqxp.ts 为准,须前后端一并生效。
5. 验收
- 【CRM管理】侧栏不再出现两个旧审批人设置菜单。
- 【系统管理】出现【报价、合同审批人设置】,进入后上下两区可见。
- 上区保存只影响报价默认审批人;下区只影响合同。
- 重置各自重新拉取对应 get 接口。
- 原有「曾配置过的」角色打开新页后可成功保存(非仅 super_admin)。
- 报价/合同提交审批预填行为与改前一致。
6. 自检
- 无 TBD/占位符
- 与「分区各自保存」「挂系统管理」决策一致
- 覆盖权限守卫缺口(避免只改菜单导致保存 403)
- 范围限于菜单/页面合并 + 最小权限对齐,不扩后端业务