registerConfig.js 5.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166
  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('packages/Layout/BigScreenHomeLayout'),
  42. children: [
  43. {
  44. path: config?.routers?.pageListUrl || '/big-screen-list',
  45. name: 'BigScreenList',
  46. component: () =>
  47. require.ensure([], () => require('packages/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('packages/BigScreenTempMag')),
  57. meta: {
  58. title: '模版管理'
  59. }
  60. },
  61. {
  62. path: config?.routers?.dataSourceUrl || '/big-screen-dataSource',
  63. component: () => import('packages/DataSourceManagement'),
  64. meta: {
  65. title: '数据源管理'
  66. }
  67. },
  68. {
  69. path: config?.routers?.dataSetUrl || '/big-screen-dataSet',
  70. component: () => import('packages/DataSetManagement'),
  71. meta: {
  72. title: '数据集管理'
  73. }
  74. },
  75. {
  76. path: config?.routers?.SourceUrl || '/big-screen-source',
  77. component: () => import('packages/SourceManagement'),
  78. meta: {
  79. title: '资源库'
  80. }
  81. },
  82. {
  83. path: config?.routers?.componentUrl || '/big-screen-components',
  84. component: () => import('packages/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('packages/BigScreenDesign'))
  96. },
  97. {
  98. path: config?.routers?.previewUrl || '/big-screen/preview',
  99. name: 'Preview',
  100. component: () =>
  101. require.ensure([], () => require('packages/BigScreenRun'))
  102. },
  103. {
  104. path: config?.routers?.bizComponentDesignUrl || '/big-screen-biz-component-design',
  105. component: () => import('packages/BizComponent'),
  106. meta: {
  107. title: '业务组件'
  108. }
  109. },
  110. {
  111. path: config?.routers?.bizComponentPreviewUrl || '/big-screen-biz-component-preview',
  112. component: () => import('packages/BizComponent/Preview.vue'),
  113. meta: {
  114. title: '业务组件预览'
  115. }
  116. }
  117. ]
  118. // 如果router有addRoutes方法
  119. if (router?.addRoutes) {
  120. router?.addRoutes(routers)
  121. } else {
  122. // eslint-disable-next-line no-unused-expressions
  123. routers?.forEach((route) => {
  124. // eslint-disable-next-line no-unused-expressions
  125. router?.addRoute(route)
  126. })
  127. }
  128. }
  129. // 注册配置
  130. function registerTheme (config) {
  131. const defaultTheme = {
  132. '--bs-el-color-primary': '#409EFF', // elment-ui主题色,激活
  133. '--bs-background-1': '#151a26', // 整体背景色
  134. '--bs-background-2': '#232832', // 布局背景色
  135. '--bs-el-background-1': '#151A26', // 组件背景色,输入框...
  136. '--bs-el-background-2': '#35393F', // 组件背景色,按钮、分页、加载...
  137. '--bs-el-background-3': '#303640', // 组件背景色,表格头部、下拉框hover...
  138. '--bs-el-title': '#ffffff', // 标题字体颜色
  139. '--bs-el-text': '#ffffff', // 一般字体颜色
  140. '--bs-el-border': 'transparent', // 边框颜色
  141. '--bs-el-color-primary-active': '64, 158, 255'
  142. }
  143. const mergedTheme = { ...defaultTheme, ...config?.customTheme }
  144. const style = document.createElement('style')
  145. style.type = 'text/css'
  146. let themeStr = ''
  147. for (const key in mergedTheme) {
  148. themeStr += `${key}:${mergedTheme[key]};`
  149. }
  150. // 给body添加class bs-body-theme-wrap
  151. document.body.classList.add('bs-body-theme-wrap')
  152. style.innerHTML = `.bs-body-theme-wrap {${themeStr}}`
  153. document.getElementsByTagName('head')[0].appendChild(style)
  154. }
  155. // 注册配置
  156. export default function (config, router) {
  157. window.BS_CONFIG = {}
  158. window.BS_CONFIG = configDeepMerge(window.BS_CONFIG, config)
  159. // 注册路由
  160. registerRouters(config, router)
  161. // 注册自定义主题
  162. registerTheme(config)
  163. }