registerConfig.js 5.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171
  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: config?.routers?.SourceUrl || '/big-screen-source',
  77. component: () => import('data-room-ui/SourceManagement'),
  78. meta: {
  79. title: '资源库'
  80. }
  81. },
  82. {
  83. path: config?.routers?.componentUrl || '/big-screen-components',
  84. component: () => import('data-room-ui/BigScreenComponentMag'),
  85. meta: {
  86. title: '资源管理'
  87. }
  88. }
  89. ]
  90. },
  91. {
  92. path: config?.routers?.designUrl || '/big-screen/design',
  93. name: 'Design',
  94. component: () =>
  95. require.ensure([], () => require('data-room-ui/BigScreenDesign'))
  96. },
  97. {
  98. path: config?.routers?.previewUrl || '/big-screen/preview',
  99. name: 'Preview',
  100. component: () =>
  101. require.ensure([], () => require('data-room-ui/BigScreenRun'))
  102. },
  103. {
  104. path: '/dataRoom-redirect',
  105. name: 'Redirect',
  106. component: () =>import('data-room-ui/Layout/Redirect/index.vue'),
  107. },
  108. {
  109. path: config?.routers?.bizComponentDesignUrl || '/big-screen-biz-component-design',
  110. component: () => import('data-room-ui/BizComponent'),
  111. meta: {
  112. title: '业务组件'
  113. }
  114. },
  115. {
  116. path: config?.routers?.bizComponentPreviewUrl || '/big-screen-biz-component-preview',
  117. component: () => import('data-room-ui/BizComponent/Preview.vue'),
  118. meta: {
  119. title: '业务组件预览'
  120. }
  121. }
  122. ]
  123. // 如果router有addRoutes方法
  124. if (router?.addRoutes) {
  125. router?.addRoutes(routers)
  126. } else {
  127. // eslint-disable-next-line no-unused-expressions
  128. routers?.forEach((route) => {
  129. // eslint-disable-next-line no-unused-expressions
  130. router?.addRoute(route)
  131. })
  132. }
  133. }
  134. // 注册配置
  135. function registerTheme (config) {
  136. const defaultTheme = {
  137. '--bs-el-color-primary': '#409EFF', // elment-ui主题色,激活
  138. '--bs-background-1': '#151a26', // 整体背景色
  139. '--bs-background-2': '#232832', // 布局背景色
  140. '--bs-el-background-1': '#151A26', // 组件背景色,输入框...
  141. '--bs-el-background-2': '#35393F', // 组件背景色,按钮、分页、加载...
  142. '--bs-el-background-3': '#303640', // 组件背景色,表格头部、下拉框hover...
  143. '--bs-el-title': '#ffffff', // 标题字体颜色
  144. '--bs-el-text': '#ffffff', // 一般字体颜色
  145. '--bs-el-border': 'transparent', // 边框颜色
  146. '--bs-el-color-primary-active': '64, 158, 255'
  147. }
  148. const mergedTheme = { ...defaultTheme, ...config?.customTheme }
  149. const style = document.createElement('style')
  150. style.type = 'text/css'
  151. let themeStr = ''
  152. for (const key in mergedTheme) {
  153. themeStr += `${key}:${mergedTheme[key]};`
  154. }
  155. // 给body添加class bs-body-theme-wrap
  156. document.body.classList.add('bs-body-theme-wrap')
  157. style.innerHTML = `.bs-body-theme-wrap {${themeStr}}`
  158. document.getElementsByTagName('head')[0].appendChild(style)
  159. }
  160. // 注册配置
  161. export default function (config, router) {
  162. window.BS_CONFIG = {}
  163. window.BS_CONFIG = configDeepMerge(window.BS_CONFIG, config)
  164. // 注册路由
  165. registerRouters(config, router)
  166. // 注册自定义主题
  167. registerTheme(config)
  168. }