init: 管理会计OS初始代码
包含前后端完整代码: - 前端:Vue3+Vite+ElementPlus - 后端:FastAPI+SQLAlchemy - 模块:驾驶舱/KPI/战略地图/预警/预算/成本/预测/改善行动 - 当前版本:v1.0.0
This commit is contained in:
@@ -0,0 +1,87 @@
|
||||
/**
|
||||
* 角色权限配置 — 管理会计OS
|
||||
* 4角色: ceo(总经理), finance(财务), business(业务), it(IT运维)
|
||||
*/
|
||||
|
||||
// 各角色可访问的路由列表
|
||||
export const ROLE_ROUTES: Record<string, string[]> = {
|
||||
ceo: ['/my-dashboard', '/dashboard', '/kpis', '/maps', '/maps-review', '/maps/canvas', '/maps/review', '/alerts', '/notifications', '/org', '/users', '/permissions', '/budget', '/deviations', '/cost', '/predict', '/action-plans', '/knowledge', '/guide'],
|
||||
finance: ['/my-dashboard', '/dashboard', '/kpis', '/maps', '/maps-review', '/maps/canvas', '/maps/review', '/alerts', '/data', '/budget', '/deviations', '/cost', '/predict', '/action-plans', '/knowledge', '/guide'],
|
||||
business: ['/my-dashboard', '/dashboard', '/kpis', '/alerts', '/deviations', '/budget', '/action-plans', '/knowledge', '/guide'],
|
||||
it: ['/my-dashboard', '/dashboard', '/kpis', '/alerts', '/data', '/org', '/users', '/permissions', '/budget', '/deviations', '/cost', '/predict', '/action-plans', '/knowledge', '/guide'],
|
||||
}
|
||||
|
||||
// 可操作的CRUD权限
|
||||
export const ROLE_ACTIONS: Record<string, string[]> = {
|
||||
ceo: ['read'],
|
||||
finance: ['read', 'write', 'import', 'export'],
|
||||
business: ['read', 'write'],
|
||||
it: ['read', 'write', 'delete', 'admin'],
|
||||
}
|
||||
|
||||
// 菜单项定义(带角色限制)
|
||||
export interface MenuItem {
|
||||
path: string
|
||||
label: string
|
||||
icon: string
|
||||
roles: string[]
|
||||
group?: string // 分组标识,仅首位项标记
|
||||
}
|
||||
|
||||
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'], group: '数据基础' },
|
||||
{ path: '/data', label: '数据管理', icon: 'Connection', roles: ['ceo', 'finance', 'it'] },
|
||||
|
||||
// ── 分析决策 ──
|
||||
{ path: '/dashboard', label: '驾驶舱', icon: 'DataBoard', roles: ['ceo', 'finance', 'business', 'it'], group: '分析决策' },
|
||||
{ path: '/maps', label: '战略地图', icon: 'DataBoard', roles: ['ceo', 'finance'] },
|
||||
{ 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: '/budget', label: '预算管理', icon: 'Coin', roles: ['ceo', 'finance', 'business', 'it'] },
|
||||
|
||||
// ── 行动管理 ──
|
||||
{ path: '/alerts', label: '预警中心', icon: 'WarningFilled', roles: ['ceo', 'finance', 'business', 'it'], group: '行动管理' },
|
||||
{ path: '/action-plans', label: '改善行动', icon: 'Edit', roles: ['ceo', 'finance', 'business', 'it'] },
|
||||
|
||||
// ── 系统管理 ──
|
||||
{ path: '/org', label: '组织管理', icon: 'Collection', roles: ['ceo', 'it'], group: '系统管理' },
|
||||
{ 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'] },
|
||||
]
|
||||
|
||||
// 角色名称映射
|
||||
export const ROLE_LABELS: Record<string, string> = {
|
||||
ceo: '总经理',
|
||||
finance: '财务部',
|
||||
business: '业务部',
|
||||
it: 'IT部',
|
||||
}
|
||||
|
||||
/**
|
||||
* 检查用户是否有权访问某路由
|
||||
*/
|
||||
export function hasRouteAccess(role: string, path: string): boolean {
|
||||
const allowed = ROLE_ROUTES[role]
|
||||
if (!allowed) return false
|
||||
// 精确匹配或前缀匹配(如 /kpis/123 匹配 /kpis)
|
||||
return allowed.some(r => path === r || path.startsWith(r + '/'))
|
||||
}
|
||||
|
||||
/**
|
||||
* 检查用户是否有指定操作权限
|
||||
*/
|
||||
export function hasAction(role: string, action: string): boolean {
|
||||
const actions = ROLE_ACTIONS[role]
|
||||
return actions ? actions.includes(action) : false
|
||||
}
|
||||
Reference in New Issue
Block a user