|
@@ -1,13 +1,62 @@
|
|
|
<template>
|
|
<template>
|
|
|
- <div>
|
|
|
|
|
- 水波
|
|
|
|
|
- </div>
|
|
|
|
|
|
|
+ <v-chart ref="vChartRef" :theme="themeColor" :option="option" :manual-update="isPreview()" autoresize></v-chart>
|
|
|
</template>
|
|
</template>
|
|
|
|
|
|
|
|
<script setup lang="ts">
|
|
<script setup lang="ts">
|
|
|
|
|
+import { ref, computed, PropType, watch } from 'vue'
|
|
|
|
|
+import VChart from 'vue-echarts'
|
|
|
|
|
+import dataJson from './data.json'
|
|
|
|
|
+import { use } from 'echarts/core'
|
|
|
|
|
+import { CanvasRenderer } from 'echarts/renderers'
|
|
|
|
|
+import { TreemapChart } from 'echarts/charts'
|
|
|
|
|
+import { includes } from './config'
|
|
|
|
|
+import { mergeTheme } from '@/packages/public/chart'
|
|
|
|
|
+import { useChartDataFetch } from '@/hooks'
|
|
|
|
|
+import { CreateComponentType } from '@/packages/index.d'
|
|
|
|
|
+import { useChartEditStore } from '@/store/modules/chartEditStore/chartEditStore'
|
|
|
|
|
+import { isPreview } from '@/utils'
|
|
|
|
|
|
|
|
-</script>
|
|
|
|
|
|
|
+const props = defineProps({
|
|
|
|
|
+ themeSetting: {
|
|
|
|
|
+ type: Object,
|
|
|
|
|
+ required: true
|
|
|
|
|
+ },
|
|
|
|
|
+ themeColor: {
|
|
|
|
|
+ type: Object,
|
|
|
|
|
+ required: true
|
|
|
|
|
+ },
|
|
|
|
|
+ chartConfig: {
|
|
|
|
|
+ type: Object as PropType<CreateComponentType>,
|
|
|
|
|
+ required: true
|
|
|
|
|
+ }
|
|
|
|
|
+})
|
|
|
|
|
+
|
|
|
|
|
+use([CanvasRenderer, TreemapChart])
|
|
|
|
|
+
|
|
|
|
|
+const vChartRef = ref<typeof VChart>()
|
|
|
|
|
|
|
|
-<style lang="scss" scoped>
|
|
|
|
|
|
|
+const option = computed(() => {
|
|
|
|
|
+ return mergeTheme(props.chartConfig.option, props.themeSetting, includes)
|
|
|
|
|
+})
|
|
|
|
|
|
|
|
-</style>
|
|
|
|
|
|
|
+const dataSetHandle = (dataset: typeof dataJson) => {
|
|
|
|
|
+ if (dataset) {
|
|
|
|
|
+ props.chartConfig.option.series[0].data = dataset
|
|
|
|
|
+ vChartRef.value?.setOption(props.chartConfig.option)
|
|
|
|
|
+ }
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+watch(
|
|
|
|
|
+ () => props.chartConfig.option.dataset,
|
|
|
|
|
+ newData => {
|
|
|
|
|
+ dataSetHandle(newData)
|
|
|
|
|
+ },
|
|
|
|
|
+ {
|
|
|
|
|
+ deep: false
|
|
|
|
|
+ }
|
|
|
|
|
+)
|
|
|
|
|
+
|
|
|
|
|
+useChartDataFetch(props.chartConfig, useChartEditStore, (newData: typeof dataJson) => {
|
|
|
|
|
+ dataSetHandle(newData)
|
|
|
|
|
+})
|
|
|
|
|
+</script>
|