registerConfig.js 5.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178
  1. /**
  2. * 对象属性合并,与 Object.assign 语法不同
  3. * @param target
  4. * @param source
  5. * @returns {{}}
  6. */
  7. function configDeepMerge (target, source) {
  8. const merged = {}
  9. for (const each in source) {
  10. if (target.hasOwnProperty(each) && source.hasOwnProperty(each)) {
  11. if (
  12. typeof target[each] === 'object' &&
  13. typeof source[each] === 'object'
  14. ) {
  15. merged[each] = configDeepMerge(target[each], source[each])
  16. } else {
  17. merged[each] = source[each]
  18. }
  19. } else if (source.hasOwnProperty(each)) {
  20. merged[each] = source[each]
  21. }
  22. }
  23. for (const eachTarget in target) {
  24. if (!(eachTarget in source) && target.hasOwnProperty(eachTarget)) {
  25. merged[eachTarget] = target[eachTarget]
  26. }
  27. }
  28. return merged
  29. }
  30. // 自动注册路由
  31. function registerRouters (config, router) {
  32. // 没有router对象不注册路由
  33. if (!router) {
  34. return
  35. }
  36. const routers = [
  37. // 页面管理
  38. {
  39. path: config?.routers?.pageManagementUrl || '/management',
  40. redirect: config?.routers?.pageListUrl || '/big-screen-list',
  41. component: () => import('data-room-ui/Layout/BigScreenHomeLayout'),
  42. children: [
  43. {
  44. path: config?.routers?.pageListUrl || '/big-screen-list',
  45. name: 'BigScreenList',
  46. component: () =>
  47. require.ensure([], () => require('data-room-ui/BigScreenMag')),
  48. meta: {
  49. title: '大屏管理'
  50. }
  51. },
  52. {
  53. path: config?.routers?.templateListUrl || '/big-screen-template',
  54. name: 'Template',
  55. component: () =>
  56. require.ensure([], () => require('data-room-ui/BigScreenTempMag')),
  57. meta: {
  58. title: '模版管理'
  59. }
  60. },
  61. {
  62. path: config?.routers?.dataSourceUrl || '/big-screen-dataSource',
  63. component: () => import('data-room-ui/DataSourceManagement'),
  64. meta: {
  65. title: '数据源管理'
  66. }
  67. },
  68. {
  69. path: config?.routers?.dataSetUrl || '/big-screen-dataSet',
  70. component: () => import('data-room-ui/DataSetManagement'),
  71. meta: {
  72. title: '数据集管理'
  73. }
  74. },
  75. {
  76. path: '/big-screen-map-data',
  77. component: () => import('data-room-ui/MapDataManagement'),
  78. meta: {
  79. title: '地图数据管理'
  80. }
  81. },
  82. {
  83. path: config?.routers?.SourceUrl || '/big-screen-source',
  84. component: () => import('data-room-ui/SourceManagement'),
  85. meta: {
  86. title: '资源库'
  87. }
  88. },
  89. {
  90. path: config?.routers?.componentUrl || '/big-screen-components',
  91. component: () => import('data-room-ui/BigScreenComponentMag'),
  92. meta: {
  93. title: '资源管理'
  94. }
  95. }
  96. ]
  97. },
  98. {
  99. path: config?.routers?.designUrl || '/big-screen/design',
  100. name: 'Design',
  101. component: () =>
  102. require.ensure([], () => require('data-room-ui/BigScreenDesign'))
  103. },
  104. {
  105. path: config?.routers?.previewUrl || '/big-screen/preview',
  106. name: 'Preview',
  107. component: () =>
  108. require.ensure([], () => require('data-room-ui/BigScreenRun'))
  109. },
  110. {
  111. path: '/dataRoom-redirect',
  112. name: 'Redirect',
  113. component: () =>import('data-room-ui/Layout/Redirect/index.vue'),
  114. },
  115. {
  116. path: config?.routers?.bizComponentDesignUrl || '/big-screen-biz-component-design',
  117. component: () => import('data-room-ui/BizComponent'),
  118. meta: {
  119. title: '业务组件'
  120. }
  121. },
  122. {
  123. path: config?.routers?.bizComponentPreviewUrl || '/big-screen-biz-component-preview',
  124. component: () => import('data-room-ui/BizComponent/Preview.vue'),
  125. meta: {
  126. title: '业务组件预览'
  127. }
  128. }
  129. ]
  130. // 如果router有addRoutes方法
  131. if (router?.addRoutes) {
  132. router?.addRoutes(routers)
  133. } else {
  134. // eslint-disable-next-line no-unused-expressions
  135. routers?.forEach((route) => {
  136. // eslint-disable-next-line no-unused-expressions
  137. router?.addRoute(route)
  138. })
  139. }
  140. }
  141. // 注册配置
  142. function registerTheme (config) {
  143. const defaultTheme = {
  144. '--bs-el-color-primary': '#409EFF', // elment-ui主题色,激活
  145. '--bs-background-1': '#151a26', // 整体背景色
  146. '--bs-background-2': '#232832', // 布局背景色
  147. '--bs-el-background-1': '#151A26', // 组件背景色,输入框...
  148. '--bs-el-background-2': '#35393F', // 组件背景色,按钮、分页、加载...
  149. '--bs-el-background-3': '#303640', // 组件背景色,表格头部、下拉框hover...
  150. '--bs-el-title': '#ffffff', // 标题字体颜色
  151. '--bs-el-text': '#ffffff', // 一般字体颜色
  152. '--bs-el-border': 'transparent', // 边框颜色
  153. '--bs-el-color-primary-active': '64, 158, 255'
  154. }
  155. const mergedTheme = { ...defaultTheme, ...config?.customTheme }
  156. const style = document.createElement('style')
  157. style.type = 'text/css'
  158. let themeStr = ''
  159. for (const key in mergedTheme) {
  160. themeStr += `${key}:${mergedTheme[key]};`
  161. }
  162. // 给body添加class bs-body-theme-wrap
  163. document.body.classList.add('bs-body-theme-wrap')
  164. style.innerHTML = `.bs-body-theme-wrap {${themeStr}}`
  165. document.getElementsByTagName('head')[0].appendChild(style)
  166. }
  167. // 注册配置
  168. export default function (config, router) {
  169. window.BS_CONFIG = {}
  170. window.BS_CONFIG = configDeepMerge(window.BS_CONFIG, config)
  171. // 注册路由
  172. registerRouters(config, router)
  173. // 注册自定义主题
  174. registerTheme(config)
  175. }