appConfig.ts 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131
  1. /** 全局配置结构(对应 public/config/config.js) */
  2. export interface RoleItem {
  3. key: string
  4. label: string
  5. org: string
  6. /** 是否可看全区数据 */
  7. allData?: boolean
  8. /** 数据范围:街镇(村/镇级角色) */
  9. town?: string
  10. /** 数据范围:村居(仅村级角色) */
  11. village?: string
  12. }
  13. export interface AppConfig {
  14. systemName: string
  15. systemLogoChar: string
  16. systemTitle: string
  17. systemSubtitle: string
  18. requestTimeout: number
  19. /** 业务 API 前缀,开发默认 /api(Vite 代理到 sjnmtybt-server) */
  20. apiBase: string
  21. /** 是否使用本地 mock 数据 */
  22. useMock: boolean
  23. /** 当前模拟角色 key */
  24. currentRole: string
  25. /** 当前发放周期 YYYY-MM */
  26. currentMonth: string
  27. /** 七种角色 */
  28. roles: RoleItem[]
  29. /** 角色 → 可访问路由 path */
  30. rolePermissions: Record<string, string[]>
  31. /** 告警只读角色 */
  32. alertReadonlyRoles: string[]
  33. }
  34. declare global {
  35. interface Window {
  36. AppConfig?: Partial<AppConfig>
  37. }
  38. }
  39. const fallbackConfig: AppConfig = {
  40. systemName: '松江区农民土地退养补助金发放管理平台',
  41. systemLogoChar: '松',
  42. systemTitle: '农民土地退养补助金',
  43. systemSubtitle: '发放管理平台',
  44. requestTimeout: 15000,
  45. apiBase: '/api',
  46. useMock: false,
  47. currentRole: 'admin',
  48. currentMonth: '2026-08',
  49. roles: [
  50. {
  51. key: 'village',
  52. label: '村合作社',
  53. org: '叶榭镇叶榭村合作社',
  54. allData: false,
  55. town: '叶榭镇',
  56. village: '叶榭村',
  57. },
  58. {
  59. key: 'town',
  60. label: '镇经发中心',
  61. org: '叶榭镇经济发展中心',
  62. allData: false,
  63. town: '叶榭镇',
  64. },
  65. {
  66. key: 'social',
  67. label: '镇社区事务受理中心',
  68. org: '叶榭镇社区事务受理中心',
  69. allData: false,
  70. town: '叶榭镇',
  71. },
  72. {
  73. key: 'leader',
  74. label: '分管领导',
  75. org: '叶榭镇社区事务受理中心',
  76. allData: false,
  77. town: '叶榭镇',
  78. },
  79. { key: 'agri', label: '区农委', org: '松江区农业农村委员会', allData: true },
  80. { key: 'hr', label: '区人社局', org: '松江区人力资源和社会保障局', allData: true },
  81. { key: 'admin', label: '系统管理员', org: '区数据局运维账号', allData: true },
  82. ],
  83. rolePermissions: {
  84. village: ['/dashboard', '/base', '/alerts'],
  85. town: ['/dashboard', '/approvals', '/reports'],
  86. social: [
  87. '/dashboard',
  88. '/insurance',
  89. '/status',
  90. '/special',
  91. '/monthly',
  92. '/disk',
  93. '/alerts',
  94. '/reports',
  95. ],
  96. leader: ['/dashboard', '/approvals', '/reports', '/alerts'],
  97. agri: ['/dashboard', '/reports'],
  98. hr: ['/dashboard', '/reports', '/alerts'],
  99. admin: [
  100. '/dashboard',
  101. '/base',
  102. '/insurance',
  103. '/approvals',
  104. '/status',
  105. '/special',
  106. '/monthly',
  107. '/disk',
  108. '/alerts',
  109. '/reports',
  110. ],
  111. },
  112. alertReadonlyRoles: ['hr', 'leader'],
  113. }
  114. /** 读取全局配置(合并 window.AppConfig) */
  115. export function getAppConfig(): AppConfig {
  116. return {
  117. ...fallbackConfig,
  118. ...window.AppConfig,
  119. roles: window.AppConfig?.roles ?? fallbackConfig.roles,
  120. rolePermissions: {
  121. ...fallbackConfig.rolePermissions,
  122. ...window.AppConfig?.rolePermissions,
  123. },
  124. alertReadonlyRoles:
  125. window.AppConfig?.alertReadonlyRoles ?? fallbackConfig.alertReadonlyRoles,
  126. }
  127. }