From 13a1d1f8ebdb71de112f72aed7dba3dd190ef4b4 Mon Sep 17 00:00:00 2001 From: ulleo Date: Thu, 1 Aug 2024 14:34:37 +0800 Subject: [PATCH] =?UTF-8?q?fix(=E5=9B=BE=E8=A1=A8)=EF=BC=9A=E5=8F=8C?= =?UTF-8?q?=E8=BD=B4=E7=B1=BB=E5=9E=8B=E5=9B=BE=E8=A1=A8=E6=97=A0=E6=B3=95?= =?UTF-8?q?=E6=A0=B9=E6=8D=AE=E7=BB=B4=E5=BA=A6=E8=BF=9B=E8=A1=8C=E8=87=AA?= =?UTF-8?q?=E5=AE=9A=E4=B9=89=E9=A2=9C=E8=89=B2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/models/chart/editor.d.ts | 1 + .../editor/editor-style/ChartStyle.vue | 15 + .../components/CustomColorStyleSelect.vue | 108 ++++- .../components/DualBasicStyleSelector.vue | 420 ++++++++++++++++++ .../panel/charts/others/chart-mix-common.ts | 46 +- .../js/panel/charts/others/chart-mix.ts | 348 +++++++++++++-- .../components/js/panel/types/impl/g2plot.ts | 4 + 7 files changed, 880 insertions(+), 62 deletions(-) create mode 100644 core/core-frontend/src/views/chart/components/editor/editor-style/components/DualBasicStyleSelector.vue diff --git a/core/core-frontend/src/models/chart/editor.d.ts b/core/core-frontend/src/models/chart/editor.d.ts index 7196366466..58b3bd8a86 100644 --- a/core/core-frontend/src/models/chart/editor.d.ts +++ b/core/core-frontend/src/models/chart/editor.d.ts @@ -1,6 +1,7 @@ declare type EditorProperty = | 'background-overall-component' | 'basic-style-selector' + | 'dual-basic-style-selector' | 'label-selector' | 'tooltip-selector' | 'x-axis-selector' diff --git a/core/core-frontend/src/views/chart/components/editor/editor-style/ChartStyle.vue b/core/core-frontend/src/views/chart/components/editor/editor-style/ChartStyle.vue index 4596694f2b..dfe016730d 100644 --- a/core/core-frontend/src/views/chart/components/editor/editor-style/ChartStyle.vue +++ b/core/core-frontend/src/views/chart/components/editor/editor-style/ChartStyle.vue @@ -14,6 +14,7 @@ import { storeToRefs } from 'pinia' import CollapseSwitchItem from '@/components/collapse-switch-item/src/CollapseSwitchItem.vue' import { ElCollapse, ElCollapseItem } from 'element-plus-secondary' import BasicStyleSelector from '@/views/chart/components/editor/editor-style/components/BasicStyleSelector.vue' +import DualBasicStyleSelector from '@/views/chart/components/editor/editor-style/components/DualBasicStyleSelector.vue' import ComponentPosition from '@/components/visualization/common/ComponentPosition.vue' import BackgroundOverallCommon from '@/components/visualization/component-background/BackgroundOverallCommon.vue' import TableHeaderSelector from '@/views/chart/components/editor/editor-style/components/table/TableHeaderSelector.vue' @@ -242,6 +243,20 @@ watch( @onMiscChange="onMiscChange" /> + + + chart: ChartObj + sub?: boolean }>(), { - themes: 'light' + themes: 'light', + sub: false } ) const dvMainStore = dvMainStoreWithOut() @@ -34,7 +36,7 @@ const { batchOptStatus } = storeToRefs(dvMainStore) const emits = defineEmits(['update:modelValue', 'changeBasicStyle']) const changeChartType = () => { if (isColorGradient.value) { - state.value.basicStyleForm.colorScheme = 'default' + state.value.basicStyleForm[colorSchemeName.value] = 'default' changeColorOption({ value: 'default' }) } } @@ -50,28 +52,79 @@ const seriesColorState = reactive({ curColorIndex: 0, seriesColorPickerId: 'body' }) + +const instance = ref() + +const colorsName = computed(() => { + return props.sub ? 'subColors' : 'colors' +}) +const colorSchemeName = computed(() => { + return props.sub ? 'subColorScheme' : 'colorScheme' +}) +const seriesColorName = computed(() => { + return props.sub ? 'subSeriesColor' : 'seriesColor' +}) + +const needSetSeriesColor = computed(() => { + return ( + instance.value?.propertyInner?.['basic-style-selector']?.includes('seriesColor') || + instance.value?.propertyInner?.['dual-basic-style-selector']?.includes('seriesColor') + ) +}) + +const needSetSubSeriesColor = computed(() => { + return instance.value?.propertyInner?.['dual-basic-style-selector']?.includes('subSeriesColor') +}) + const setupSeriesColor = () => { if (batchOptStatus.value || !props.chart) { return } - const instance = chartViewManager.getChartView( + + instance.value = chartViewManager.getChartView( props.chart.render, props.chart.type ) as G2PlotChartView - if (!instance?.propertyInner?.['basic-style-selector'].includes('seriesColor')) { - return + + if (!props.sub) { + if (!needSetSeriesColor.value) { + return + } + } else { + if (!needSetSubSeriesColor.value) { + return + } } - const viewData = dvMainStore.getViewOriginData(props.chart.id) + let viewData = dvMainStore.getViewOriginData(props.chart.id) if (!viewData) { return } - const newSeriesColor = instance.setupSeriesColor(props.chart, viewData.data) + + if (props.chart.type.includes('chart-mix')) { + if (props.sub) { + viewData = viewData.right?.data?.[0] + } else { + viewData = viewData.left?.data?.[0] + } + } + if (!viewData) { + return + } + + const sFunction = props.sub + ? instance.value?.setupSubSeriesColor + : instance.value.setupSeriesColor + if (!sFunction) { + return + } + const newSeriesColor = sFunction(props.chart, viewData.data) const oldSeriesColor = - props.chart.customAttr.basicStyle.seriesColor?.reduce((p, n) => { + props.chart.customAttr.basicStyle[seriesColorName.value]?.reduce((p, n) => { p[n.id] = n return p }, {}) || {} + newSeriesColor?.forEach(item => { const oldColorItem = oldSeriesColor[item.id] if (oldColorItem) { @@ -116,7 +169,7 @@ const changeSeriesColor = () => { } }) if (changed) { - state.value.basicStyleForm.seriesColor = seriesColorState.seriesColor + state.value.basicStyleForm[seriesColorName.value] = seriesColorState.seriesColor changeBasicStyle('seriesColor') } } @@ -154,7 +207,7 @@ const colorCaseSelectorRef = ref>() const customColorPickerRef = ref>() function selectColorCase(option) { - state.value.basicStyleForm.colorScheme = option.value + state.value.basicStyleForm[colorSchemeName.value] = option.value colorCaseSelectorRef.value?.hide() changeColorOption(option) } @@ -162,13 +215,14 @@ function selectColorCase(option) { const changeColorOption = (option?) => { let isGradient = option?.value?.endsWith('_split_gradient') || isColorGradient.value const getColorItems = isGradient ? getMapColorCases(colorCases) : colorCases - const items = getColorItems.filter(ele => ele.value === state.value.basicStyleForm.colorScheme) - + const items = getColorItems.filter( + ele => ele.value === state.value.basicStyleForm[colorSchemeName.value] + ) if (items.length > 0) { - state.value.basicStyleForm.colors = [...items[0].colors] - state.value.customColor = state.value.basicStyleForm.colors[0] + state.value.basicStyleForm[colorsName.value] = [...items[0].colors] + state.value.customColor = state.value.basicStyleForm[colorsName.value][0] state.value.colorIndex = 0 - state.value.basicStyleForm.seriesColor?.forEach((c, i) => { + state.value.basicStyleForm[seriesColorName.value]?.forEach((c, i) => { const length = items[0].colors.length c.color = items[0].colors[i % length] }) @@ -181,22 +235,22 @@ const resetCustomColor = () => { const switchColorCase = () => { const { colorIndex, customColor, basicStyleForm } = state.value - const colors = basicStyleForm.colors + const colors = basicStyleForm[colorsName.value] if (isColorGradient.value) { let startColor = colorIndex === 0 ? customColor : colors[0] let endColor = colorIndex === 0 ? colors[8] : customColor - basicStyleForm.colors = stepsColor(startColor, endColor, 9, 1) + basicStyleForm[colorsName.value] = stepsColor(startColor, endColor, 9, 1) } else { colors[colorIndex] = customColor } changeBasicStyle() } const isColorGradient = computed(() => - state.value.basicStyleForm.colorScheme.endsWith('_split_gradient') + state.value.basicStyleForm[colorSchemeName.value].endsWith('_split_gradient') ) const showColorGradientIndex = index => { - return index === 0 || index === state.value.basicStyleForm.colors.length - 1 + return index === 0 || index === state.value.basicStyleForm[colorsName.value].length - 1 } const switchColor = (index, c) => { if (isColorGradient.value && !showColorGradientIndex(index)) { @@ -279,7 +333,7 @@ const colorItemBorderColor = (index, state) => {