/** 全局配置结构(对应 public/config/config.js) */ export interface RoleItem { key: string label: string org: string /** 是否可看全区数据 */ allData?: boolean /** 数据范围:街镇(村/镇级角色) */ town?: string /** 数据范围:村居(仅村级角色) */ village?: string } export interface AppConfig { systemName: string systemLogoChar: string systemTitle: string systemSubtitle: string requestTimeout: number /** 业务 API 前缀,开发默认 /api(Vite 代理到 sjnmtybt-server) */ apiBase: string /** 是否使用本地 mock 数据 */ useMock: boolean /** 当前模拟角色 key */ currentRole: string /** 当前发放周期 YYYY-MM */ currentMonth: string /** 七种角色 */ roles: RoleItem[] /** 角色 → 可访问路由 path */ rolePermissions: Record /** 告警只读角色 */ alertReadonlyRoles: string[] } declare global { interface Window { AppConfig?: Partial } } const fallbackConfig: AppConfig = { systemName: '松江区农民土地退养补助金发放管理平台', systemLogoChar: '松', systemTitle: '农民土地退养补助金', systemSubtitle: '发放管理平台', requestTimeout: 15000, apiBase: '/api', useMock: false, currentRole: 'admin', currentMonth: '2026-08', roles: [ { key: 'village', label: '村合作社', org: '叶榭镇叶榭村合作社', allData: false, town: '叶榭镇', village: '叶榭村', }, { key: 'town', label: '镇经发中心', org: '叶榭镇经济发展中心', allData: false, town: '叶榭镇', }, { key: 'social', label: '镇社区事务受理中心', org: '叶榭镇社区事务受理中心', allData: false, town: '叶榭镇', }, { key: 'leader', label: '分管领导', org: '叶榭镇社区事务受理中心', allData: false, town: '叶榭镇', }, { key: 'agri', label: '区农委', org: '松江区农业农村委员会', allData: true }, { key: 'hr', label: '区人社局', org: '松江区人力资源和社会保障局', allData: true }, { key: 'admin', label: '系统管理员', org: '区数据局运维账号', allData: true }, ], rolePermissions: { village: ['/dashboard', '/base', '/alerts'], town: ['/dashboard', '/approvals', '/reports'], social: [ '/dashboard', '/insurance', '/status', '/special', '/monthly', '/disk', '/alerts', '/reports', ], leader: ['/dashboard', '/approvals', '/reports', '/alerts'], agri: ['/dashboard', '/reports'], hr: ['/dashboard', '/reports', '/alerts'], admin: [ '/dashboard', '/base', '/insurance', '/approvals', '/status', '/special', '/monthly', '/disk', '/alerts', '/reports', ], }, alertReadonlyRoles: ['hr', 'leader'], } /** 读取全局配置(合并 window.AppConfig) */ export function getAppConfig(): AppConfig { return { ...fallbackConfig, ...window.AppConfig, roles: window.AppConfig?.roles ?? fallbackConfig.roles, rolePermissions: { ...fallbackConfig.rolePermissions, ...window.AppConfig?.rolePermissions, }, alertReadonlyRoles: window.AppConfig?.alertReadonlyRoles ?? fallbackConfig.alertReadonlyRoles, } }