diff --git a/frontend/components.d.ts b/frontend/components.d.ts index 7300ae99..84c702ee 100644 --- a/frontend/components.d.ts +++ b/frontend/components.d.ts @@ -68,6 +68,7 @@ declare module 'vue' { MyDialog: typeof import('./src/components/MyDialog.vue')['default'] NodeEditDialog: typeof import('./src/components/strategy-map/NodeEditDialog.vue')['default'] ProfitBreakdown: typeof import('./src/components/charts/ProfitBreakdown.vue')['default'] + RiskCell: typeof import('./src/components/charts/RiskCell.vue')['default'] RouterLink: typeof import('vue-router')['RouterLink'] RouterView: typeof import('vue-router')['RouterView'] StrategyLayer: typeof import('./src/components/strategy-map/StrategyLayer.vue')['default'] diff --git a/frontend/src/components/charts/RiskCell.vue b/frontend/src/components/charts/RiskCell.vue new file mode 100644 index 00000000..b6e79f29 --- /dev/null +++ b/frontend/src/components/charts/RiskCell.vue @@ -0,0 +1,33 @@ + + + + + diff --git a/frontend/src/layouts/MainLayout.vue b/frontend/src/layouts/MainLayout.vue index 94fc3536..5759476e 100644 --- a/frontend/src/layouts/MainLayout.vue +++ b/frontend/src/layouts/MainLayout.vue @@ -64,13 +64,13 @@ const iconMap: Record = { DataBoard, Collection, Edit, } -// 分组图标映射 +// 分组图标映射 — PDCA五组 const groupIcons: Record = { - '数据基础': DataBoard, - '分析决策': TrendCharts, - '行动管理': Edit, - '系统管理': Tools, - '帮助支持': Document, + '规划与目标': DataBoard, + '执行与控制': Edit, + '监控与评价': TrendCharts, + '复盘与改进': DataAnalysis, + '系统与支持': Tools, } function groupIcon(label: string) { diff --git a/frontend/src/permission.ts b/frontend/src/permission.ts index c7fac7f0..da74c228 100644 --- a/frontend/src/permission.ts +++ b/frontend/src/permission.ts @@ -29,42 +29,49 @@ export interface MenuItem { } export const MENU_ITEMS: MenuItem[] = [ - // ── 个人视角 ── - { path: '/my-dashboard', label: '我的工作台', icon: 'Monitor', roles: ['ceo', 'finance', 'business', 'it'], group: '数据基础' }, - - // ── 数据基础 ── - { path: '/kpis', label: 'KPI字典', icon: 'Document', roles: ['ceo', 'finance', 'business', 'it'] }, - { path: '/data', label: '数据管理', icon: 'Connection', roles: ['ceo', 'finance', 'it'] }, - - // ── 分析决策 ── - { path: '/dashboard', label: '驾驶舱', icon: 'DataBoard', roles: ['ceo', 'finance', 'business', 'it'], group: '分析决策' }, + // ══════════════════════════════════════════════════════════════ + // GROUP 1: 规划与目标(Plan) + // ══════════════════════════════════════════════════════════════ + { path: '/my-dashboard', label: '我的工作台', icon: 'Monitor', roles: ['ceo', 'finance', 'business', 'it'], group: '规划与目标' }, { path: '/maps', label: '战略地图', icon: 'DataBoard', roles: ['ceo', 'finance'] }, - { path: '/customer', label: '客户维度', icon: 'User', roles: ['ceo', 'finance', 'business', 'it'] }, - { path: '/learning-dashboard', label: '学习成长看板', icon: 'Reading', roles: ['ceo', 'finance', 'it'] }, - { path: '/maps-review', label: '战略回顾会', icon: 'TrendCharts', roles: ['ceo', 'finance'] }, - { path: '/deviations', label: '差异分析', icon: 'DataAnalysis', roles: ['ceo', 'finance', 'business', 'it'] }, - { path: '/cost', label: '成本分析', icon: 'Money', roles: ['ceo', 'finance', 'it'] }, - { path: '/predict', label: '预测模拟', icon: 'DataLine', roles: ['ceo', 'finance', 'it'] }, + { path: '/kpis', label: 'KPI字典', icon: 'Document', roles: ['ceo', 'finance', 'business', 'it'] }, { path: '/budget', label: '预算管理', icon: 'Coin', roles: ['ceo', 'finance', 'business', 'it'] }, - - // ── 高级分析 ── - { path: '/reports', label: '管理报表', icon: 'DataAnalysis', roles: ['ceo', 'finance', 'business'] }, { path: '/alignment', label: '战略执行看板', icon: 'Opportunity', roles: ['ceo', 'finance', 'business', 'it'] }, - { path: '/dupont-analysis', label: '杜邦分析', icon: 'TrendCharts', roles: ['ceo', 'finance', 'it'] }, - // ── 行动管理 ── - { path: '/alerts', label: '预警中心', icon: 'WarningFilled', roles: ['ceo', 'finance', 'business', 'it'], group: '行动管理' }, + // ══════════════════════════════════════════════════════════════ + // GROUP 2: 执行与控制(Do) + // ══════════════════════════════════════════════════════════════ + { path: '/cost', label: '成本分析', icon: 'Money', roles: ['ceo', 'finance', 'it'], group: '执行与控制' }, + { path: '/deviations', label: '差异分析', icon: 'DataAnalysis', roles: ['ceo', 'finance', 'business', 'it'] }, { path: '/action-plans', label: '改善行动', icon: 'Edit', roles: ['ceo', 'finance', 'business', 'it'] }, - // ── 系统管理 ── - { path: '/org', label: '组织管理', icon: 'Collection', roles: ['ceo', 'it'], group: '系统管理' }, + // ══════════════════════════════════════════════════════════════ + // GROUP 3: 监控与评价(Check) + // ══════════════════════════════════════════════════════════════ + { path: '/dashboard', label: '驾驶舱', icon: 'DataBoard', roles: ['ceo', 'finance', 'business', 'it'], group: '监控与评价' }, + { path: '/reports', label: '管理报表', icon: 'DataAnalysis', roles: ['ceo', 'finance', 'business'] }, + { path: '/dupont-analysis', label: '杜邦分析', icon: 'TrendCharts', roles: ['ceo', 'finance', 'it'] }, + { path: '/customer', label: '客户维度', icon: 'User', roles: ['ceo', 'finance', 'business', 'it'] }, + { path: '/learning-dashboard', label: '学习成长看板', icon: 'Reading', roles: ['ceo', 'finance', 'it'] }, + { path: '/alerts', label: '预警中心', icon: 'WarningFilled', roles: ['ceo', 'finance', 'business', 'it'] }, + { path: '/data', label: '数据管理', icon: 'Connection', roles: ['ceo', 'finance', 'it'] }, + + // ══════════════════════════════════════════════════════════════ + // GROUP 4: 复盘与改进(Act) + // ══════════════════════════════════════════════════════════════ + { path: '/maps-review', label: '战略回顾会', icon: 'TrendCharts', roles: ['ceo', 'finance'], group: '复盘与改进' }, + { path: '/predict', label: '预测模拟', icon: 'DataLine', roles: ['ceo', 'finance', 'it'] }, + { path: '/data-quality', label: '数据质量', icon: 'WarningFilled', roles: ['ceo', 'finance', 'it'] }, + + // ══════════════════════════════════════════════════════════════ + // GROUP 5: 系统与支持(Infra) + // ══════════════════════════════════════════════════════════════ + { path: '/knowledge', label: 'CMA知识库', icon: 'Document', roles: ['ceo', 'finance', 'business', 'it'], group: '系统与支持' }, + { path: '/guide', label: '新手引导', icon: 'Edit', roles: ['ceo', 'finance', 'business', 'it'] }, + { path: '/org', label: '组织管理', icon: 'Collection', roles: ['ceo', 'it'] }, { path: '/users', label: '用户管理', icon: 'User', roles: ['ceo', 'it'] }, { path: '/notifications', label: '通知配置', icon: 'Bell', roles: ['ceo', 'it'] }, { path: '/permissions', label: '系统设置', icon: 'Setting', roles: ['ceo', 'it'] }, - - // ── 帮助支持 ── - { path: '/knowledge', label: 'CMA知识库', icon: 'Document', roles: ['ceo', 'finance', 'business', 'it'], group: '帮助支持' }, - { path: '/guide', label: '新手引导', icon: 'Edit', roles: ['ceo', 'finance', 'business', 'it'] }, ] // 角色名称映射 diff --git a/menu-evaluation-report.md b/menu-evaluation-report.md new file mode 100644 index 00000000..20e4eaf5 --- /dev/null +++ b/menu-evaluation-report.md @@ -0,0 +1,219 @@ +# 菜单结构评估报告 — cma.sxbh.ltd + +> 评估人:财务Bot(CMA理论专家) +> 评估日期:2026-07-16 +> 对标框架:CMA-PDCA(Plan-Do-Check-Act)管理循环 + +--- + +## 1. 当前菜单结构快照 + +| 分组 | 菜单项 | 项数 | 角色范围 | +|:----|:-------|:---:|:--------| +| **数据基础** | 我的工作台·KPI字典·数据管理 | 3 | ceo/finance/business/it | +| **分析决策** | 驾驶舱·战略地图·客户维度·学习成长看板·战略回顾会·差异分析·成本分析·预测模拟·预算管理 | 9 | 全角色子集 | +| **高级分析** | 管理报表·战略执行看板·杜邦分析 | 3 | ceo/finance/business+it | +| **行动管理** | 预警中心·改善行动 | 2 | 全角色 | +| **系统管理** | 组织管理·用户管理·通知配置·系统设置 | 4 | ceo/it | +| **帮助支持** | CMA知识库·新手引导 | 2 | 全角色 | + +**路由中存在但未在菜单中显示的页面**:`/data-quality`(数据质量)、`/bi-reports`(BI报表) + +--- + +## 2. 当前问题分析 + +### 🔴 问题1:「分析决策」分组过载(9项→需拆分) + +这是菜单中最大的单一分组,容纳了从战略规划到执行监控的全流程功能: + +``` +分析决策(9项) +├── 驾驶舱 ← C(检查)阶段 +├── 战略地图 ← P(计划)阶段 +├── 客户维度 ← C(检查) +├── 学习成长看板 ← C(检查) +├── 战略回顾会 ← A(改进)阶段 +├── 差异分析 ← D(执行)阶段 +├── 成本分析 ← D(执行) +├── 预测模拟 ← A(改进) +└── 预算管理 ← P(计划) +``` + +**后果**:一个分组涵盖PDCA全部四个阶段,管理者无法按工作流节奏导航。每个决策前需要在这9项之间反复跳跃。 + +### 🔴 问题2:CMA-PDCA工作流被分裂在多个分组中 + +以「预算管理→差异分析→改善行动」这条典型PDCA链路为例: + +``` +P:预算管理 → 藏在「分析决策」分组(第9项) +D:差异分析 → 也在「分析决策」分组(第6项) +C:驾驶舱 → 也在「分析决策」分组(第1项) +A:改善行动 → 跳到「行动管理」分组 +``` + +同一管理链路横跨多个分组,管理者需要**跨组查找**才能完成一个闭环。 + +### 🔴 问题3:「高级分析」分组缺乏管理逻辑 + +「管理报表」「战略执行看板」「杜邦分析」三者本质都是**检查(Check)阶段的绩效评价工具**,不应单独成组。将它们抽离「分析决策」称为「高级」缺乏管理理论支撑,反而暗示其他分析是「低级」的。 + +### 🔴 问题4:「我的工作台」归属不当 + +被归入「数据基础」分组,但其定位是**个人视角入口**(待办、快速导航、通知摘要),与KPI字典、数据管理没有直接关联。应独立于功能分组之外,作为系统默认首页。 + +### 🔴 问题5:新增功能未在菜单层级体现 + +6个新增功能通过**Tab内嵌**方式加入,菜单上完全不可见: + +| 新增功能 | 所在页面 | Tab名称 | 发现成本 | +|:---------|:---------|:--------|:--------:| +| 成本法对比 | /cost | 成本法对比 | 需进入成本分析→翻到第6个Tab | +| 风险矩阵热力图 | /alerts | 风险矩阵 | 需进入预警中心→切换Tab | +| COSO内控自检表 | /action-plans | COSO内控自检 | 需进入改善行动→切换Tab | +| 预算方法三选一向导 | /budget | 编制方法 | 需进入预算管理→翻Tab | +| 职业道德自测题 | /knowledge | 职业道德自测 | 需进入知识库→切换Tab | +| 本量利分析 | /predict | 本量利分析 | 需进入预测模拟→切换Tab | + +管理者**无法从菜单感知这些功能的存在**,只能靠口口相传或逐个点击发现。 + +### 🔴 问题6:分组数量略多且不均衡 + +6个分组中,最大9项(分析决策),最小2项(行动管理、帮助支持)。管理者每天面对的是一个「一头沉」的侧边栏。 + +--- + +## 3. 对标CMA-PDCA工作流 + +| CMA阶段 | 管理活动 | 当前对应菜单 | 当前分组 | 状态 | +|:--------|:---------|:-----------|:--------|:----:| +| **P — 计划** | 战略目标分解 | 战略地图 | 分析决策 | ✅ 存在但位置不对 | +| | KPI设定与对齐 | KPI字典·战略执行看板 | 数据基础·高级分析 | ⚠️ 分裂在2个分组 | +| | 预算编制 | 预算管理 | 分析决策 | ✅ 存在但位置不对 | +| **D — 执行** | 成本核算与控制 | 成本分析 | 分析决策 | ✅ 存在但位置不对 | +| | 差异追踪 | 差异分析 | 分析决策 | ✅ 存在但位置不对 | +| | 改善行动实施 | 改善行动 | 行动管理 | ⚠️ 与计划/检查分离 | +| **C — 检查** | 综合驾驶舱监控 | 驾驶舱 | 分析决策 | ✅ 存在但位置不对 | +| | 客户/学习维度透视 | 客户维度·学习成长看板 | 分析决策 | ✅ 存在但位置不对 | +| | 预警与风险管理 | 预警中心 | 行动管理 | ⚠️ 与检查分离 | +| | 管理报表决策 | 管理报表·杜邦分析 | 高级分析 | ⚠️ 被标签为「高级」 | +| **A — 改进** | 战略回顾复盘 | 战略回顾会 | 分析决策 | ✅ 存在但位置不对 | +| | 预测模拟推演 | 预测模拟 | 分析决策 | ✅ 存在但位置不对 | +| | 管理决策分析 | 杜邦分析·本量利分析 | 高级分析·Tab隐藏 | ❌ 分散且隐藏 | + +**关键发现**:当前菜单**没有任何一个分组与PDCA阶段对齐**,管理者必须在6个分组之间跳跃才能完成一个PDCA循环。 + +--- + +## 4. 建议方案(PDCA对齐重组) + +### 设计原则 + +1. **PDCA四阶段 + 基础设施** = 5个分组,单组不超过7项 +2. 「我的工作台」作为**独立入口**,不归属任何功能分组 +3. Tab内嵌功能中的高价值项**提升为独立菜单项** +4. 「分析决策」「高级分析」等无管理理论支撑的命名**废弃** + +### 建议分组结构 + +``` +┌─────────────────────────────────────────────────┐ +│ 我的工作台(独立置顶,不分组的快捷入口) │ +├─────────────────────────────────────────────────┤ +│ 📋 ① 规划与目标设定(P) │ +│ ├ 战略地图 → /maps │ +│ ├ KPI字典 → /kpis │ +│ ├ 战略执行看板 → /alignment │ +│ ├ 预算管理 → /budget │ +│ └ 预算方法向导 → /budget?tab=method │ +├─────────────────────────────────────────────────┤ +│ ⚙️ ② 执行与控制(D) │ +│ ├ 成本分析 → /cost │ +│ │ ├ 成本总览·标准成本·ABC作业 │ +│ │ └ 成本法对比(Tab内,可见) │ +│ ├ 差异分析 → /deviations │ +│ ├ 改善行动 → /action-plans │ +│ │ └ COSO内控自检(Tab内,可见) │ +│ └ 本量利分析 → /predict?tab=cvp │ +├─────────────────────────────────────────────────┤ +│ 📊 ③ 监控与评价(C) │ +│ ├ 驾驶舱 → /dashboard │ +│ ├ 管理报表 → /reports │ +│ ├ BI报表 → /bi-reports │ +│ ├ 杜邦分析 → /dupont-analysis │ +│ ├ 客户维度 → /customer │ +│ ├ 学习成长看板 → /learning-dashboard │ +│ └ 预警中心 → /alerts │ +│ └ 风险矩阵(Tab内,可见) │ +├─────────────────────────────────────────────────┤ +│ 🔄 ④ 复盘与改进(A) │ +│ ├ 战略回顾会 → /maps-review │ +│ ├ 预测模拟 → /predict │ +│ ├ 数据质量 → /data-quality │ +│ └ 数据管理 → /data │ +├─────────────────────────────────────────────────┤ +│ ⚙️ ⑤ 系统与支持(Infra) │ +│ ├ CMA知识库 → /knowledge │ +│ │ └ 职业道德自测(Tab内,可见) │ +│ ├ 新手引导 → /guide │ +│ ├ 组织管理 → /org │ +│ ├ 用户管理 → /users │ +│ ├ 通知配置 → /notifications │ +│ └ 系统设置 → /permissions │ +└─────────────────────────────────────────────────┘ +``` + +### 分组对标分析 + +| 新分组 | PDCA阶段 | 项数 | CMA理论支撑 | +|:-------|:---------|:---:|:-----------| +| ① 规划与目标设定 | Plan | 5 | CMA P1 战略规划、预算编制、KPI体系 | +| ② 执行与控制 | Do | 4(+Tab) | CMA P1 成本管理、差异分析、内控 | +| ③ 监控与评价 | Check | 7 | CMA P1 绩效评价、BSC、风险管理 | +| ④ 复盘与改进 | Act | 4 | CMA P2 决策分析、预测技术 | +| ⑤ 系统与支持 | Infra | 6 | 系统运维+知识管理 | + +**分组内在逻辑**:管理者每天按**P→D→C→A**的顺序依次展开即可完成完整管理闭环,不需要跨组跳跃。 + +### 新增功能的融入方案 + +| 功能 | 当前隐藏位置 | 建议处理 | +|:----|:-----------|:--------| +| 成本法对比 | /cost Tab#6 | 保留为Tab,在CostDashboard内将Tab顺序提前至第2位(紧跟「成本总览」后),无需提升为独立菜单 | +| 风险矩阵 | /alerts Tab | 保留为Tab,建议在菜单项上标注小标记 ⚠️ 提醒「含风险矩阵」 | +| COSO内控自检 | /action-plans Tab | 保留为Tab,在菜单项上标注 | +| 预算方法向导 | /budget Tab:编制方法 | ✅ **建议提升为独立菜单项**(用于CMA备考教学场景),放在「规划与目标设定」组 | +| 职业道德自测 | /knowledge Tab | 保留为Tab,在知识库名称后标注「含自测」 | +| 本量利分析 | /predict Tab | ✅ **建议提升为预测模拟的子菜单或前置Tab**,这是CMA P2核心考点 | + +--- + +## 5. 实施建议 + +### 修改范围 + +| 文件 | 修改内容 | 工作量 | +|:----|:--------|:------| +| `frontend/src/permission.ts` | 重写 MENU_ITEMS 数组:调整分组标识、菜单顺序、新增项 | ⭐ 小(~40行变更) | +| `frontend/src/layouts/MainLayout.vue` | 调整分组图标映射(groupIcons)以匹配新分组名 | ⭐ 小(~10行变更) | +| `frontend/src/router/index.ts` | 若预算方法向导提升为独立路由,需添加对应 path | ⭐ 极小(可选) | + +### 推荐实施步骤 + +1. **第一步**:修改 `permission.ts` 的分组标识和菜单顺序(零风险,纯前端配置变更) +2. **第二步**:同步更新 `MainLayout.vue` 中 `groupIcons` 映射 +3. **第三步**(可选):为「预算方法向导」创建独立路由和Vue组件 +4. **第四步**:验证各角色菜单渲染无误 + +### 风险 + +- **低风险**:分组名和顺序变更不影响后端API,也不影响路由逻辑 +- **需要同步确认**:用户在浏览器中可能缓存旧的JS bundle,部署后需强制刷新(可通过版本号变更触发) +- **新增独立路由**(预算方法向导)需要确认是否已有独立视图或仍用BudgetManagement页面内Tab跳转 + +--- + +## 6. 总结 + +当前菜单结构的核心问题是**分组逻辑与CMA管理理论脱节**:最大的分组(分析决策)9项混装PDCA四个阶段,管理者每天跨组导航成本高。建议按照 **P(规划)→D(执行)→C(监控)→A(改进)** 的四阶段工作流重组,将「我的工作台」独立置顶,新增功能适当提升可见性。改动仅涉及前端配置层,风险低、收益直接。