diff --git a/data-room-ui/packages/BigScreenDesign/OverallSetting/index.vue b/data-room-ui/packages/BigScreenDesign/OverallSetting/index.vue
index 1276af85..e70b1764 100644
--- a/data-room-ui/packages/BigScreenDesign/OverallSetting/index.vue
+++ b/data-room-ui/packages/BigScreenDesign/OverallSetting/index.vue
@@ -115,6 +115,12 @@
+
定时器
@@ -188,6 +194,7 @@ import ColorPicker from 'data-room-ui/ColorPicker/index.vue'
import BgImg from './BgImgDialog.vue'
import { mapState, mapMutations } from 'vuex'
import { getThemeConfig } from 'data-room-ui/js/api/bigScreenApi'
+import OverallThemeSet from 'data-room-ui/OverallThemeSet/index.vue'
// import _ from 'lodash'
import cloneDeep from 'lodash/cloneDeep'
import { G2 } from '@antv/g2plot'
@@ -196,7 +203,8 @@ export default {
components: {
ColorPicker,
SettingTitle,
- BgImg
+ BgImg,
+ OverallThemeSet
},
directives: {
block: {
diff --git a/data-room-ui/packages/PlotRender/index.vue b/data-room-ui/packages/PlotRender/index.vue
index 71ebedbc..12a7ef7f 100644
--- a/data-room-ui/packages/PlotRender/index.vue
+++ b/data-room-ui/packages/PlotRender/index.vue
@@ -19,6 +19,8 @@ import commonMixins from 'data-room-ui/js/mixins/commonMixins'
import { mapState, mapMutations } from 'vuex'
import * as g2Plot from '@antv/g2plot'
import plotList, { getCustomPlots } from '../G2Plots/plotList'
+import { settingToTheme } from 'data-room-ui/js/utils/themeFormatting'
+
export default {
name: 'PlotCustomComponent',
mixins: [commonMixins, linkageMixins],
@@ -69,6 +71,7 @@ export default {
methods: {
...mapMutations('bigScreen', ['changeChartConfig']),
chartInit () {
+
let config = this.config
// key和code相等,说明是一进来刷新,调用list接口
if (this.config.code === this.config.key || this.isPreview) {
@@ -157,7 +160,7 @@ export default {
config.option.data = data
} else {
// 数据返回失败则赋前端的模拟数据
- config.option.data = this.plotList?.find(plot => plot.name === config.name)?.option?.data
+ config.option.data = this.plotList?.find(plot => plot.name === config.name)?.option?.data || config?.option?.data
}
return config
},
@@ -180,6 +183,9 @@ export default {
this.chart.update(config.option)
}
this.changeChartConfig(config)
+ // 将设置好的主题保存起来
+ console.log('changeStyle')
+ config.theme = settingToTheme(config, this.customTheme)
return config
}
}
diff --git a/data-room-ui/packages/RemoteComponents/index.vue b/data-room-ui/packages/RemoteComponents/index.vue
index 2f753338..2f222c96 100644
--- a/data-room-ui/packages/RemoteComponents/index.vue
+++ b/data-room-ui/packages/RemoteComponents/index.vue
@@ -176,7 +176,7 @@ export default {
config.option.data = data
} else {
// 数据返回失败则赋前端的模拟数据
- config.option.data = this.plotList?.find(plot => plot.name === config.name)?.option?.data
+ config.option.data = this.plotList?.find(plot => plot.name === config.name)?.option?.data || config?.option?.data
}
return config
},
diff --git a/data-room-ui/packages/Render/index.vue b/data-room-ui/packages/Render/index.vue
index d845567e..cbe886fe 100644
--- a/data-room-ui/packages/Render/index.vue
+++ b/data-room-ui/packages/Render/index.vue
@@ -82,6 +82,8 @@ import 'vue-draggable-resizable-gorkys/dist/VueDraggableResizable.css'
import { randomString } from '../js/utils'
import { compile } from 'tiny-sass-compiler/dist/tiny-sass-compiler.esm-browser.prod.js'
import plotList, { getCustomPlots } from '../G2Plots/plotList'
+import { settingToTheme } from 'data-room-ui/js/utils/themeFormatting'
+
export default {
name: 'BigScreenRender',
components: {
@@ -326,6 +328,13 @@ export default {
option
}
config.key = config.code
+ // TODO:新添加一个组件时应该有默认的两套主题
+ console.log('add')
+ // 先暂时只考虑g2组件
+ if (['customComponent'].includes(chart.type)){
+ config.theme = settingToTheme(config, 'dark')
+ config.theme = settingToTheme(config, 'light')
+ }
this.addItem(config)
},
addSourceChart (chart, position) {
diff --git a/data-room-ui/packages/js/store/actions.js b/data-room-ui/packages/js/store/actions.js
index b1c69ed6..58b4f906 100644
--- a/data-room-ui/packages/js/store/actions.js
+++ b/data-room-ui/packages/js/store/actions.js
@@ -6,6 +6,8 @@ import { getScreenInfo, getDataSetDetails, getDataByDataSetId } from '../api/big
import { stringToFunction } from '../utils/evalFunctions'
import { EventBus } from '../utils/eventBus'
import plotList from 'data-room-ui/G2Plots/plotList'
+import { settingToTheme, themeToSetting } from 'data-room-ui/js/utils/themeFormatting'
+
export default {
// 初始化页面数据
initLayout ({ commit, dispatch }, code) {
@@ -69,6 +71,7 @@ export function handleResData (data) {
let originalConfig = {}
pageInfo.chartList.forEach((chart) => {
if (!['customComponent', 'remoteComponent'].includes(chart.type)) {
+ // TODO:一般组件也需要添加主题的兼容处理
originalConfig = { option: { ...setModules[chart.type] }, ...dataModules[chart.type] }
// 如果没有版本号,或者版本号修改了则需要进行旧数据兼容
if ((!chart.version) || chart.version !== originalConfig.version) {
@@ -90,9 +93,16 @@ export function handleResData (data) {
chart = compatibility(chart, originalConfig)
}
}
+ // 初始化时应该判断,是否存在theme配置,没有的话添加默认的两套主题,这是为了兼容旧组件
+ if (!chart.theme) {
+ chart.theme = settingToTheme(chart, 'dark')
+ chart.theme = settingToTheme(chart, 'light')
+ }
}
chart.key = chart.code
})
+ // 主题兼容
+ pageInfo.chartList = themeToSetting(pageInfo.chartList, pageInfo.pageConfig.customTheme)
// 存储修改后的配置
localStorage.setItem('pageInfo', JSON.stringify(pageInfo))
return pageInfo
diff --git a/data-room-ui/packages/js/utils/themeFormatting.js b/data-room-ui/packages/js/utils/themeFormatting.js
new file mode 100644
index 00000000..80ffa149
--- /dev/null
+++ b/data-room-ui/packages/js/utils/themeFormatting.js
@@ -0,0 +1,41 @@
+/**
+* @Description: 主题设置格式化
+* @author liu.shiyi
+* @date 2023/8/17 14:47
+*/
+// 将组件中的setting里面的主题设置(颜色)存放到theme里面
+export function settingToTheme (config, type) {
+ // 考虑与上一次保存过的主题进行合并
+ // 排除掉主题非暗黑非明亮的情况
+ if (['dark', 'light'].includes(type)) {
+ const theme = { dark: { ...config?.theme?.dark }, light: { ...config?.theme?.light } }
+ config.setting.forEach((setItem) => {
+ if (['gradual', 'colorPicker'].includes(setItem.type)) {
+ theme[type][setItem.field] = setItem.value
+ }
+ })
+ return theme
+ } else {
+ return {}
+ }
+}
+// 将保存的theme主题设置(颜色)存放到chartList
+export function themeToSetting (chartList, type) {
+ // 排除掉主题非暗黑非明亮的情况
+ if (['dark', 'light'].includes(type)) {
+ chartList.forEach(chart => {
+ chart.option.theme = type
+ chart.key = new Date().getTime()
+ if (chart.theme && chart.theme[type]) {
+ for (const item of chart.setting) {
+ // 检查 obj 中是否存在与 item.field 相对应的属性
+ if (Object.prototype.hasOwnProperty.call(chart.theme[type], item.field)) {
+ // 更新 setting 中对应项的 value 值为 theme 中的属性值
+ item.value = chart.theme[type][item.field]
+ }
+ }
+ }
+ })
+ }
+ return chartList
+}