You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

182 lines
5.8 KiB
JavaScript

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

/**
* 对象属性合并,与 Object.assign 语法不同
* @param target
* @param source
* @returns {{}}
*/
function configDeepMerge (target, source) {
const merged = {}
for (const each in source) {
if (target.hasOwnProperty(each) && source.hasOwnProperty(each)) {
if (
typeof target[each] === 'object' &&
typeof source[each] === 'object'
) {
merged[each] = configDeepMerge(target[each], source[each])
} else {
merged[each] = source[each]
}
} else if (source.hasOwnProperty(each)) {
merged[each] = source[each]
}
}
for (const eachTarget in target) {
if (!(eachTarget in source) && target.hasOwnProperty(eachTarget)) {
merged[eachTarget] = target[eachTarget]
}
}
return merged
}
// 自动注册路由
function registerRouters (config, router) {
// 没有router对象不注册路由
if (!router) {
return
}
const routers = [
// 页面管理
{
path: config?.routers?.pageManagementUrl || '/management',
redirect: config?.routers?.pageListUrl || '/big-screen-list',
component: () => import('data-room-ui/Layout/BigScreenHomeLayout'),
children: [
{
path: config?.routers?.pageListUrl || '/big-screen-list',
name: 'BigScreenList',
component: () =>
require.ensure([], () => require('data-room-ui/BigScreenMag')),
meta: {
title: '大屏管理'
}
},
{
path: config?.routers?.templateListUrl || '/big-screen-template',
name: 'BigScreenTemplate',
component: () =>
require.ensure([], () => require('data-room-ui/BigScreenTempMag')),
meta: {
title: '模版管理'
}
},
{
path: config?.routers?.dataSourceUrl || '/big-screen-dataSource',
component: () => import('data-room-ui/DataSourceManagement'),
meta: {
title: '数据源管理'
}
},
{
path: config?.routers?.dataSetUrl || '/big-screen-dataSet',
component: () => import('data-room-ui/DataSetManagement'),
meta: {
title: '数据集管理'
}
},
{
path: config?.routers?.mapData || '/big-screen-map-data',
component: () => import('data-room-ui/MapDataManagement'),
meta: {
title: '地图数据管理'
}
},
{
path: config?.routers?.SourceUrl || '/big-screen-source',
component: () => import('data-room-ui/SourceManagement'),
meta: {
title: '资源库'
}
},
{
path: config?.routers?.componentUrl || '/big-screen-components',
component: () => import('data-room-ui/BigScreenComponentMag'),
meta: {
title: '资源管理'
}
}
]
},
{
path: config?.routers?.designUrl || '/big-screen/design',
name: 'BigScreenDesign',
component: () =>
require.ensure([], () => require('data-room-ui/BigScreenDesign'))
},
{
path: config?.routers?.previewUrl || '/big-screen/preview',
name: 'BigScreenPreview',
component: () =>
require.ensure([], () => require('data-room-ui/BigScreenRun'))
},
{
path: '/dataRoom-redirect',
name: 'Redirect',
component: () => import('data-room-ui/Layout/Redirect/index.vue')
},
{
path: config?.routers?.bizComponentDesignUrl || '/big-screen-biz-component-design',
component: () => import('data-room-ui/BizComponent'),
meta: {
title: '业务组件'
}
},
{
path: config?.routers?.bizComponentPreviewUrl || '/big-screen-biz-component-preview',
component: () => import('data-room-ui/BizComponent/Preview.vue'),
meta: {
title: '业务组件预览'
}
}
]
// 如果router有addRoutes方法
if (router?.addRoutes) {
router?.addRoutes(routers)
} else {
// eslint-disable-next-line no-unused-expressions
routers?.forEach((route) => {
// eslint-disable-next-line no-unused-expressions
router?.addRoute(route)
})
}
}
// 注册配置
function registerTheme (config) {
const defaultTheme = {
'--bs-el-color-primary': '#409EFF', // elment-ui主题色激活
'--bs-background-1': '#151a26', // 整体背景色
'--bs-background-2': '#232832', // 布局背景色
'--bs-el-background-1': '#151A26', // 组件背景色,输入框...
'--bs-el-background-2': '#35393F', // 组件背景色,按钮、分页、加载...
'--bs-el-background-3': '#303640', // 组件背景色表格头部、下拉框hover...
'--bs-el-title': '#ffffff', // 标题字体颜色
'--bs-el-text': '#ffffff', // 一般字体颜色
'--bs-el-border': 'transparent', // 边框颜色
'--bs-el-color-primary-active': '64, 158, 255'
}
const mergedTheme = { ...defaultTheme, ...config?.customTheme }
const style = document.createElement('style')
style.type = 'text/css'
let themeStr = ''
for (const key in mergedTheme) {
themeStr += `${key}:${mergedTheme[key]};`
}
// 给body添加class bs-body-theme-wrap
document.body.classList.add('bs-body-theme-wrap')
style.innerHTML = `.bs-body-theme-wrap {${themeStr}}`
document.getElementsByTagName('head')[0].appendChild(style)
}
// 注册配置
export default function (config, router) {
window.BS_CONFIG = {}
window.BS_CONFIG = configDeepMerge(window.BS_CONFIG, config)
if (!config?.httpConfigs?.fileUrlPrefix) {
// 如果没有配置文件访问前缀使用baseURL加上/static作为文件前缀
window.BS_CONFIG.httpConfigs.fileUrlPrefix = window.BS_CONFIG.httpConfigs.baseURL + '/static'
}
// 注册路由
registerRouters(config, router)
// 注册自定义主题
registerTheme(config)
}