Commit 89225bce1c42020af66bf64484943e83b91161e4
1 parent
837f7254
feat(src/packages): 图表双折线支持导入多个数据源
Showing
3 changed files
with
77 additions
and
72 deletions
| ... | ... | @@ -7,11 +7,38 @@ import cloneDeep from 'lodash/cloneDeep' |
| 7 | 7 | import dataJson from './data.json' |
| 8 | 8 | |
| 9 | 9 | export const includes = ['legend', 'xAxis', 'yAxis', 'grid'] |
| 10 | - | |
| 10 | +export const seriesItem = { | |
| 11 | + type: 'line', | |
| 12 | + smooth: false, | |
| 13 | + symbolSize: 5, //设定实心点的大小 | |
| 14 | + label: { | |
| 15 | + show: true, | |
| 16 | + position: 'top', | |
| 17 | + color: '#fff', | |
| 18 | + fontSize: 12 | |
| 19 | + }, | |
| 20 | + lineStyle: { | |
| 21 | + width: 3, | |
| 22 | + type: 'solid' | |
| 23 | + }, | |
| 24 | + areaStyle: { | |
| 25 | + opacity: 0.8, | |
| 26 | + color: new graphic.LinearGradient(0, 0, 0, 1, [ | |
| 27 | + { | |
| 28 | + offset: 0, | |
| 29 | + color: chartColorsSearch[defaultTheme][3] | |
| 30 | + }, | |
| 31 | + { | |
| 32 | + offset: 1, | |
| 33 | + color: 'rgba(0,0,0,0)' | |
| 34 | + } | |
| 35 | + ]) | |
| 36 | + } | |
| 37 | +} | |
| 11 | 38 | // 其它配置项比如新增(动画) |
| 12 | 39 | const otherConfig = { |
| 13 | 40 | // 轮播动画 |
| 14 | - isCarousel: false, | |
| 41 | + isCarousel: false | |
| 15 | 42 | } |
| 16 | 43 | const option = { |
| 17 | 44 | ...otherConfig, |
| ... | ... | @@ -31,63 +58,7 @@ const option = { |
| 31 | 58 | type: 'value' |
| 32 | 59 | }, |
| 33 | 60 | dataset: { ...dataJson }, |
| 34 | - series: [ | |
| 35 | - { | |
| 36 | - type: 'line', | |
| 37 | - smooth: false, | |
| 38 | - symbolSize: 5, //设定实心点的大小 | |
| 39 | - label: { | |
| 40 | - show: true, | |
| 41 | - position: 'top', | |
| 42 | - color: '#fff', | |
| 43 | - fontSize: 12 | |
| 44 | - }, | |
| 45 | - lineStyle: { | |
| 46 | - width: 3, | |
| 47 | - type: 'solid' | |
| 48 | - }, | |
| 49 | - areaStyle: { | |
| 50 | - opacity: 0.8, | |
| 51 | - color: new graphic.LinearGradient(0, 0, 0, 1, [ | |
| 52 | - { | |
| 53 | - offset: 0, | |
| 54 | - color: chartColorsSearch[defaultTheme][3] | |
| 55 | - }, | |
| 56 | - { | |
| 57 | - offset: 1, | |
| 58 | - color: 'rgba(0,0,0,0)' | |
| 59 | - } | |
| 60 | - ]) | |
| 61 | - } | |
| 62 | - }, | |
| 63 | - { | |
| 64 | - type: 'line', | |
| 65 | - smooth: false, | |
| 66 | - label: { | |
| 67 | - show: true, | |
| 68 | - position: 'top', | |
| 69 | - color: '#fff', | |
| 70 | - fontSize: 12 | |
| 71 | - }, | |
| 72 | - lineStyle: { | |
| 73 | - width: 3, | |
| 74 | - type: 'solid' | |
| 75 | - }, | |
| 76 | - areaStyle: { | |
| 77 | - opacity: 0.8, | |
| 78 | - color: new graphic.LinearGradient(0, 0, 0, 1, [ | |
| 79 | - { | |
| 80 | - offset: 0, | |
| 81 | - color: chartColorsSearch[defaultTheme][4] | |
| 82 | - }, | |
| 83 | - { | |
| 84 | - offset: 1, | |
| 85 | - color: 'rgba(0,0,0,0)' | |
| 86 | - } | |
| 87 | - ]) | |
| 88 | - } | |
| 89 | - } | |
| 90 | - ] | |
| 61 | + series: [seriesItem, seriesItem] | |
| 91 | 62 | } |
| 92 | 63 | |
| 93 | 64 | export default class Config extends PublicConfigClass implements CreateComponentType { | ... | ... |
| ... | ... | @@ -12,13 +12,13 @@ |
| 12 | 12 | </template> |
| 13 | 13 | |
| 14 | 14 | <script setup lang="ts"> |
| 15 | -import { reactive, watch, PropType, onMounted } from 'vue' | |
| 15 | +import { reactive, watch, PropType, onMounted, ref, nextTick } from 'vue' | |
| 16 | 16 | import VChart from 'vue-echarts' |
| 17 | 17 | import { useCanvasInitOptions } from '@/hooks/useCanvasInitOptions.hook' |
| 18 | 18 | import { use, graphic } from 'echarts/core' |
| 19 | 19 | import { CanvasRenderer } from 'echarts/renderers' |
| 20 | 20 | import { LineChart } from 'echarts/charts' |
| 21 | -import config, { includes } from './config' | |
| 21 | +import config, { includes, seriesItem } from './config' | |
| 22 | 22 | import { mergeTheme } from '@/packages/public/chart' |
| 23 | 23 | import { useChartEditStore } from '@/store/modules/chartEditStore/chartEditStore' |
| 24 | 24 | import { chartColorsSearch, defaultTheme } from '@/settings/chartThemes/index' |
| ... | ... | @@ -27,6 +27,7 @@ import { useChartDataFetch } from '@/hooks' |
| 27 | 27 | import { isPreview, colorGradientCustomMerge } from '@/utils' |
| 28 | 28 | import dataJson from './data.json' |
| 29 | 29 | import { useFullScreen } from '../../utls/fullScreen' |
| 30 | +import isObject from 'lodash/isObject' | |
| 30 | 31 | |
| 31 | 32 | const props = defineProps({ |
| 32 | 33 | themeSetting: { |
| ... | ... | @@ -106,12 +107,12 @@ watch( |
| 106 | 107 | } |
| 107 | 108 | ) |
| 108 | 109 | |
| 109 | -watch( | |
| 110 | - () => props.chartConfig.option.dataset, | |
| 111 | - () => { | |
| 112 | - option.value = props.chartConfig.option | |
| 113 | - } | |
| 114 | -) | |
| 110 | +// watch( | |
| 111 | +// () => props.chartConfig.option.dataset, | |
| 112 | +// () => { | |
| 113 | +// option.value = props.chartConfig.option | |
| 114 | +// } | |
| 115 | +// ) | |
| 115 | 116 | let seriesDataNum = -1 |
| 116 | 117 | let seriesDataMaxLength = 0 |
| 117 | 118 | let intervalInstance: any = null |
| ... | ... | @@ -194,7 +195,36 @@ const updateVChart = (newData: any) => { |
| 194 | 195 | }) |
| 195 | 196 | } |
| 196 | 197 | |
| 197 | -const {vChartRef} = useChartDataFetch(props.chartConfig, useChartEditStore, (newData) => { | |
| 198 | +const replaceMergeArr = ref<string[]>() | |
| 199 | + | |
| 200 | +// dataset 无法变更条数的补丁 | |
| 201 | +watch( | |
| 202 | + () => props.chartConfig.option.dataset, | |
| 203 | + (newData: { dimensions: any }, oldData) => { | |
| 204 | + try { | |
| 205 | + option.value = mergeTheme(props.chartConfig.option, props.themeSetting, includes) | |
| 206 | + if (!isObject(newData) || !('dimensions' in newData)) return | |
| 207 | + if (Array.isArray(newData?.dimensions)) { | |
| 208 | + const seriesArr = [] | |
| 209 | + for (let i = 0; i < newData.dimensions.length - 1; i++) { | |
| 210 | + seriesArr.push(seriesItem) | |
| 211 | + } | |
| 212 | + replaceMergeArr.value = ['series'] | |
| 213 | + props.chartConfig.option.series = seriesArr | |
| 214 | + nextTick(() => { | |
| 215 | + replaceMergeArr.value = [] | |
| 216 | + }) | |
| 217 | + } | |
| 218 | + } catch (error) { | |
| 219 | + console.log(error) | |
| 220 | + } | |
| 221 | + }, | |
| 222 | + { | |
| 223 | + deep: false | |
| 224 | + } | |
| 225 | +) | |
| 226 | + | |
| 227 | +const { vChartRef } = useChartDataFetch(props.chartConfig, useChartEditStore, newData => { | |
| 198 | 228 | // addPieInterval(newData) |
| 199 | 229 | updateVChart(newData) |
| 200 | 230 | }) | ... | ... |
| ... | ... | @@ -11,7 +11,7 @@ export const hideAsideComponentsObj = { |
| 11 | 11 | Lines: [ |
| 12 | 12 | 'VLineCommon', //折线图 |
| 13 | 13 | 'VLineGradients', //双折线渐变面积图 |
| 14 | - 'ExternalVCOverrideLineGradients' //重写双折线渐变面积图 | |
| 14 | + // 'ExternalVCOverrideLineGradients' //重写双折线渐变面积图 | |
| 15 | 15 | ], |
| 16 | 16 | Pies: [ |
| 17 | 17 | 'VPieCircle' //饼图-环形 |
| ... | ... | @@ -22,7 +22,10 @@ export const hideAsideComponentsObj = { |
| 22 | 22 | Mores: [ |
| 23 | 23 | 'VProcess', //NaiveUI-进度 |
| 24 | 24 | 'VImage', //图片 |
| 25 | - 'VImageCarousel' //轮播图 | |
| 25 | + 'VImageCarousel', //轮播图 | |
| 26 | + 'VVideo', //视频 | |
| 27 | + 'VIframe', //远程网页 | |
| 28 | + 'VWaterPolo' //水球图 | |
| 26 | 29 | ], |
| 27 | 30 | Texts: [ |
| 28 | 31 | 'VTextGradient', //渐变文字 |
| ... | ... | @@ -35,7 +38,7 @@ export const hideAsideComponentsObj = { |
| 35 | 38 | 'VLineLinearSingle', //单折线渐变图 |
| 36 | 39 | 'VLineGradientSingle', //单折线渐变面积图 |
| 37 | 40 | 'VLineGradients', //双折线渐变面积图 |
| 38 | - 'ExternalVCOverrideLineGradients', //重写双折线渐变面积图 | |
| 41 | + // 'ExternalVCOverrideLineGradients', //重写双折线渐变面积图 | |
| 39 | 42 | 'VPieCircle', //饼图-环形 |
| 40 | 43 | 'VMapBase', //地图(可选省份) |
| 41 | 44 | 'VProcess', //NaiveUI-进度 |
| ... | ... | @@ -45,6 +48,7 @@ export const hideAsideComponentsObj = { |
| 45 | 48 | 'VVideo', //视频 |
| 46 | 49 | 'VIframe', //远程网页 |
| 47 | 50 | 'VImage', //图片 |
| 48 | - 'VImageCarousel' //轮播图 | |
| 51 | + 'VImageCarousel', //轮播图 | |
| 52 | + 'VWaterPolo' //水球图 | |
| 49 | 53 | ] |
| 50 | 54 | } | ... | ... |