diff --git a/src/components/Pages/ChartItemSetting/EchartsRendererSetting.vue b/src/components/Pages/ChartItemSetting/EchartsRendererSetting.vue
new file mode 100644
index 00000000..f7624fef
--- /dev/null
+++ b/src/components/Pages/ChartItemSetting/EchartsRendererSetting.vue
@@ -0,0 +1,45 @@
+
+
+
+
+
+
+ {{ item.value }}
+
+
+ {{ item.desc }}
+
+
+
+
+
diff --git a/src/components/Pages/ChartItemSetting/GlobalSetting.vue b/src/components/Pages/ChartItemSetting/GlobalSetting.vue
index 35a74235..a416e69c 100644
--- a/src/components/Pages/ChartItemSetting/GlobalSetting.vue
+++ b/src/components/Pages/ChartItemSetting/GlobalSetting.vue
@@ -1,4 +1,34 @@
+
+
+
+ 全局
+
+
+
+
+
+
+ 所有echarts图表组件默认都将采用所选的渲染器进行渲染
+
+
+
+
+
+
+ 当前
+
+
+
+
+
+
+ 仅当前组件采用指定渲染器渲染
+
+
+
+
+
@@ -283,6 +313,11 @@ import { PropType, computed } from 'vue'
import { GlobalThemeJsonType } from '@/settings/chartThemes/index'
import { axisConfig } from '@/packages/chartConfiguration/echarts/index'
import { CollapseItem, SettingItemBox, SettingItem, GlobalSettingPosition } from '@/components/Pages/ChartItemSetting'
+import { icon } from '@/plugins'
+import { useChartEditStore } from '@/store/modules/chartEditStore/chartEditStore'
+import EchartsRendererSetting from './EchartsRendererSetting.vue'
+
+const { HelpOutlineIcon } = icon.ionicons5
const props = defineProps({
optionData: {
@@ -296,6 +331,12 @@ const props = defineProps({
}
})
+const chartEditStore = useChartEditStore()
+const themeSetting = computed(() => {
+ const chartThemeSetting = chartEditStore.getEditCanvasConfig.chartThemeSetting
+ return chartThemeSetting
+})
+
const title = computed(() => {
return props.optionData.title
})
diff --git a/src/hooks/useCanvasInitOptions.hook.ts b/src/hooks/useCanvasInitOptions.hook.ts
new file mode 100644
index 00000000..d8521eef
--- /dev/null
+++ b/src/hooks/useCanvasInitOptions.hook.ts
@@ -0,0 +1,26 @@
+import { inject, type Ref } from 'vue'
+import { EchartsRenderer } from '@/settings/chartThemes'
+import { SCALE_KEY } from '@/views/preview/hooks/useScale.hook'
+import { use } from 'echarts/core'
+import { CanvasRenderer, SVGRenderer } from 'echarts/renderers'
+
+use([CanvasRenderer, SVGRenderer])
+
+type InitOptions = {
+ renderer: EchartsRenderer
+ devicePixelRatio?: number
+}
+
+// 获取需要给当前echarts组件设置什么初始值
+export function useCanvasInitOptions(option: any, themeSetting: any) {
+ const renderer = option.renderer || themeSetting.renderer
+ const initOptions: InitOptions = { renderer }
+ const scaleRef = inject[>(SCALE_KEY) || { value: { width: 1, height: 1 } }
+
+ if (renderer === 'canvas') {
+ initOptions.devicePixelRatio = Math.ceil(
+ Math.max(window.devicePixelRatio, scaleRef.value.width, scaleRef.value.height)
+ )
+ }
+ return initOptions
+}
diff --git a/src/packages/components/Charts/Bars/BarCommon/index.vue b/src/packages/components/Charts/Bars/BarCommon/index.vue
index 77f6da02..6c8bcd2d 100644
--- a/src/packages/components/Charts/Bars/BarCommon/index.vue
+++ b/src/packages/components/Charts/Bars/BarCommon/index.vue
@@ -1,6 +1,7 @@
import { ref, nextTick, computed, watch, PropType } from 'vue'
import VChart from 'vue-echarts'
+import { useCanvasInitOptions } from '@/hooks/useCanvasInitOptions.hook'
import { use } from 'echarts/core'
import { CanvasRenderer } from 'echarts/renderers'
import { BarChart } from 'echarts/charts'
@@ -41,6 +43,8 @@ const props = defineProps({
}
})
+const initOptions = useCanvasInitOptions(props.chartConfig.option, props.themeSetting)
+
use([DatasetComponent, CanvasRenderer, BarChart, GridComponent, TooltipComponent, LegendComponent])
const replaceMergeArr = ref()
diff --git a/src/packages/components/Charts/Bars/BarCrossrange/index.vue b/src/packages/components/Charts/Bars/BarCrossrange/index.vue
index c8d2957a..683d777b 100644
--- a/src/packages/components/Charts/Bars/BarCrossrange/index.vue
+++ b/src/packages/components/Charts/Bars/BarCrossrange/index.vue
@@ -1,6 +1,7 @@
import { ref, nextTick, computed, watch, PropType } from 'vue'
import VChart from 'vue-echarts'
+import { useCanvasInitOptions } from '@/hooks/useCanvasInitOptions.hook'
import { use } from 'echarts/core'
import { CanvasRenderer } from 'echarts/renderers'
import { BarChart } from 'echarts/charts'
@@ -40,6 +42,8 @@ const props = defineProps({
}
})
+const initOptions = useCanvasInitOptions(props.chartConfig.option, props.themeSetting)
+
use([DatasetComponent, CanvasRenderer, BarChart, GridComponent, TooltipComponent, LegendComponent])
const replaceMergeArr = ref()
diff --git a/src/packages/components/Charts/Lines/LineCommon/index.vue b/src/packages/components/Charts/Lines/LineCommon/index.vue
index 33149e84..c2163eb7 100644
--- a/src/packages/components/Charts/Lines/LineCommon/index.vue
+++ b/src/packages/components/Charts/Lines/LineCommon/index.vue
@@ -1,6 +1,7 @@
import { PropType, computed, watch, ref, nextTick } from 'vue'
import VChart from 'vue-echarts'
+import { useCanvasInitOptions } from '@/hooks/useCanvasInitOptions.hook'
import { use } from 'echarts/core'
import { CanvasRenderer } from 'echarts/renderers'
import { LineChart } from 'echarts/charts'
@@ -41,6 +43,8 @@ const props = defineProps({
}
})
+const initOptions = useCanvasInitOptions(props.chartConfig.option, props.themeSetting)
+
use([DatasetComponent, CanvasRenderer, LineChart, GridComponent, TooltipComponent, LegendComponent])
const replaceMergeArr = ref()
diff --git a/src/packages/components/Charts/Lines/LineGradientSingle/index.vue b/src/packages/components/Charts/Lines/LineGradientSingle/index.vue
index 0bd33cfe..b96ffa71 100644
--- a/src/packages/components/Charts/Lines/LineGradientSingle/index.vue
+++ b/src/packages/components/Charts/Lines/LineGradientSingle/index.vue
@@ -1,11 +1,12 @@
-
+
]