Commit 87d47feb5f2af91e6e7de3ca547818dd187ccd4d

Authored by xp.Huang
2 parents 2316e68a b6d57a96

Merge branch 'merge' into 'main'

update(*): 升级至V1.2.3 / V2.2.0(2023/03/16)版本

See merge request yunteng/thingskit-view!15
Showing 111 changed files with 1515 additions and 279 deletions
@@ -27,6 +27,7 @@ @@ -27,6 +27,7 @@
27 "axios": "^0.27.2", 27 "axios": "^0.27.2",
28 "color": "^4.2.3", 28 "color": "^4.2.3",
29 "crypto-js": "^4.1.1", 29 "crypto-js": "^4.1.1",
  30 + "dayjs": "^1.11.7",
30 "dom-helpers": "^5.2.1", 31 "dom-helpers": "^5.2.1",
31 "echarts-liquidfill": "^3.1.0", 32 "echarts-liquidfill": "^3.1.0",
32 "echarts-stat": "^1.2.0", 33 "echarts-stat": "^1.2.0",
@@ -25,6 +25,7 @@ specifiers: @@ -25,6 +25,7 @@ specifiers:
25 color: ^4.2.3 25 color: ^4.2.3
26 commitlint: ^17.0.2 26 commitlint: ^17.0.2
27 crypto-js: ^4.1.1 27 crypto-js: ^4.1.1
  28 + dayjs: ^1.11.7
28 default-passive-events: ^2.0.0 29 default-passive-events: ^2.0.0
29 dom-helpers: ^5.2.1 30 dom-helpers: ^5.2.1
30 echarts: ^5.3.2 31 echarts: ^5.3.2
@@ -82,6 +83,7 @@ dependencies: @@ -82,6 +83,7 @@ dependencies:
82 axios: 0.27.2 83 axios: 0.27.2
83 color: 4.2.3 84 color: 4.2.3
84 crypto-js: 4.1.1 85 crypto-js: 4.1.1
  86 + dayjs: 1.11.7
85 dom-helpers: 5.2.1 87 dom-helpers: 5.2.1
86 echarts-liquidfill: 3.1.0_echarts@5.3.3 88 echarts-liquidfill: 3.1.0_echarts@5.3.3
87 echarts-stat: 1.2.0 89 echarts-stat: 1.2.0
@@ -2008,6 +2010,10 @@ packages: @@ -2008,6 +2010,10 @@ packages:
2008 engines: {node: '>=0.11'} 2010 engines: {node: '>=0.11'}
2009 dev: false 2011 dev: false
2010 2012
  2013 + /dayjs/1.11.7:
  2014 + resolution: {integrity: sha512-+Yw9U6YO5TQohxLcIkrXBeY73WP3ejHWVvx8XCk3gxvQDCTEmS48ZrSZCKciI7Bhl/uCMyxYtE9UqRILmFphkQ==}
  2015 + dev: false
  2016 +
2011 /debug/2.6.9: 2017 /debug/2.6.9:
2012 resolution: {integrity: sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==} 2018 resolution: {integrity: sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==}
2013 peerDependencies: 2019 peerDependencies:
@@ -37,7 +37,6 @@ import { icon } from '@/plugins' @@ -37,7 +37,6 @@ import { icon } from '@/plugins'
37 import { useUserStore } from '@/store/external/module/user' 37 import { useUserStore } from '@/store/external/module/user'
38 const { ChatboxEllipsesIcon, PersonIcon, LogOutOutlineIcon, SettingsSharpIcon } = icon.ionicons5 38 const { ChatboxEllipsesIcon, PersonIcon, LogOutOutlineIcon, SettingsSharpIcon } = icon.ionicons5
39 39
40 -  
41 const t = window['$t'] 40 const t = window['$t']
42 41
43 const modelShowInfo = ref(false) 42 const modelShowInfo = ref(false)
  1 +<template>
  2 + <n-radio-group :value="props.modelValue || INHERIT_VALUE" @update:value="handleChange">
  3 + <n-space>
  4 + <n-tooltip :show-arrow="false" trigger="hover" v-for="item in rendererList" :key="item.value">
  5 + <template #trigger>
  6 + <n-radio :value="item.value">
  7 + {{ item.value }}
  8 + </n-radio>
  9 + </template>
  10 + {{ item.desc }}
  11 + </n-tooltip>
  12 + </n-space>
  13 + </n-radio-group>
  14 +</template>
  15 +<script setup lang="ts">
  16 +import { type EchartsRenderer } from '@/settings/chartThemes'
  17 +
  18 +const props = defineProps<{ modelValue?: EchartsRenderer; includeInherit?: boolean }>()
  19 +const emits = defineEmits(['update:modelValue'])
  20 +
  21 +const INHERIT_VALUE = 'inherit'
  22 +
  23 +const handleChange = (val: EchartsRenderer & typeof INHERIT_VALUE) => {
  24 + emits('update:modelValue', val === INHERIT_VALUE ? undefined : val)
  25 +}
  26 +
  27 +const rendererList = [
  28 + {
  29 + value: 'svg',
  30 + desc: '在缩放场景下具有更好的表现'
  31 + },
  32 + {
  33 + value: 'canvas',
  34 + desc: '数据量较大(经验判断 > 1k)、较多交互时,建议选择'
  35 + },
  36 + ...(props.includeInherit
  37 + ? [
  38 + {
  39 + value: INHERIT_VALUE,
  40 + desc: '默认继承全局配置'
  41 + }
  42 + ]
  43 + : [])
  44 +]
  45 +</script>
1 <template> 1 <template>
  2 + <collapse-item name="渲染器">
  3 + <setting-item-box :alone="true">
  4 + <template #name>
  5 + <n-text>全局</n-text>
  6 + <n-tooltip trigger="hover">
  7 + <template #trigger>
  8 + <n-icon size="21" :depth="3">
  9 + <help-outline-icon></help-outline-icon>
  10 + </n-icon>
  11 + </template>
  12 + <n-text>所有echarts图表组件默认都将采用所选的渲染器进行渲染</n-text>
  13 + </n-tooltip>
  14 + </template>
  15 + <EchartsRendererSetting v-model="themeSetting.renderer" />
  16 + </setting-item-box>
  17 + <setting-item-box :alone="true">
  18 + <template #name>
  19 + <n-text>当前</n-text>
  20 + <n-tooltip trigger="hover">
  21 + <template #trigger>
  22 + <n-icon size="21" :depth="3">
  23 + <help-outline-icon></help-outline-icon>
  24 + </n-icon>
  25 + </template>
  26 + <n-text>仅当前组件采用指定渲染器渲染</n-text>
  27 + </n-tooltip>
  28 + </template>
  29 + <EchartsRendererSetting v-model="optionData.renderer" includeInherit />
  30 + </setting-item-box>
  31 + </collapse-item>
2 <collapse-item v-if="title" name="标题"> 32 <collapse-item v-if="title" name="标题">
3 <template #header> 33 <template #header>
4 <n-switch v-model:value="title.show" size="small"></n-switch> 34 <n-switch v-model:value="title.show" size="small"></n-switch>
@@ -283,6 +313,11 @@ import { PropType, computed } from 'vue' @@ -283,6 +313,11 @@ import { PropType, computed } from 'vue'
283 import { GlobalThemeJsonType } from '@/settings/chartThemes/index' 313 import { GlobalThemeJsonType } from '@/settings/chartThemes/index'
284 import { axisConfig } from '@/packages/chartConfiguration/echarts/index' 314 import { axisConfig } from '@/packages/chartConfiguration/echarts/index'
285 import { CollapseItem, SettingItemBox, SettingItem, GlobalSettingPosition } from '@/components/Pages/ChartItemSetting' 315 import { CollapseItem, SettingItemBox, SettingItem, GlobalSettingPosition } from '@/components/Pages/ChartItemSetting'
  316 +import { icon } from '@/plugins'
  317 +import { useChartEditStore } from '@/store/modules/chartEditStore/chartEditStore'
  318 +import EchartsRendererSetting from './EchartsRendererSetting.vue'
  319 +
  320 +const { HelpOutlineIcon } = icon.ionicons5
286 321
287 const props = defineProps({ 322 const props = defineProps({
288 optionData: { 323 optionData: {
@@ -296,6 +331,12 @@ const props = defineProps({ @@ -296,6 +331,12 @@ const props = defineProps({
296 } 331 }
297 }) 332 })
298 333
  334 +const chartEditStore = useChartEditStore()
  335 +const themeSetting = computed(() => {
  336 + const chartThemeSetting = chartEditStore.getEditCanvasConfig.chartThemeSetting
  337 + return chartThemeSetting
  338 +})
  339 +
299 const title = computed(() => { 340 const title = computed(() => {
300 return props.optionData.title 341 return props.optionData.title
301 }) 342 })
@@ -36,7 +36,7 @@ @@ -36,7 +36,7 @@
36 </div> 36 </div>
37 <div class="model-footer"> 37 <div class="model-footer">
38 中国色列表来自于: 38 中国色列表来自于:
39 - <n-a href="http://zhongguose.com">http://zhongguose.com</n-a> 39 + <n-a href="http://zhongguose.com" target="_blank">http://zhongguose.com</n-a>
40 </div> 40 </div>
41 </div> 41 </div>
42 </n-modal> 42 </n-modal>
@@ -157,6 +157,7 @@ $height: 85vh; @@ -157,6 +157,7 @@ $height: 85vh;
157 } 157 }
158 } 158 }
159 .model-footer { 159 .model-footer {
  160 + z-index: 1;
160 text-align: end; 161 text-align: end;
161 } 162 }
162 } 163 }
@@ -7,15 +7,38 @@ export enum BaseEvent { @@ -7,15 +7,38 @@ export enum BaseEvent {
7 // 移入 7 // 移入
8 ON_MOUSE_ENTER = 'mouseenter', 8 ON_MOUSE_ENTER = 'mouseenter',
9 // 移出 9 // 移出
10 - ON_MOUSE_LEAVE = 'mouseleave', 10 + ON_MOUSE_LEAVE = 'mouseleave'
  11 +}
  12 +
  13 +// 组件交互回调事件
  14 +export enum InteractEvents {
  15 + INTERACT_ON = 'interactOn',
  16 + INTERACT_COMPONENT_ID = 'interactComponentId',
  17 + INTERACT_FN = 'interactFn'
  18 +}
  19 +
  20 +// 全局组件交互回调事件触发的类型(当然可以自定义名称)
  21 +export enum InteractEventOn {
  22 + CLICK = 'click',
  23 + CHANGE = 'change'
  24 +}
  25 +
  26 +// 确定交互组件触发类型 key名称
  27 +export const COMPONENT_INTERACT_EVENT_KET = 'componentInteractEventKey'
  28 +
  29 +// 交互式组件的触发配置
  30 +export type InteractActionsType = {
  31 + interactType: InteractEventOn
  32 + interactName: string
  33 + componentEmitEvents: { [T: string]: { value: any; label: string }[] }
11 } 34 }
12 35
13 // vue3 生命周期事件 36 // vue3 生命周期事件
14 -export enum EventLife { 37 +export enum EventLife {
15 // 渲染之后 38 // 渲染之后
16 VNODE_MOUNTED = 'vnodeMounted', 39 VNODE_MOUNTED = 'vnodeMounted',
17 // 渲染之前 40 // 渲染之前
18 - VNODE_BEFORE_MOUNT = 'vnodeBeforeMount', 41 + VNODE_BEFORE_MOUNT = 'vnodeBeforeMount'
19 } 42 }
20 43
21 // 内置字符串函数对象列表 44 // 内置字符串函数对象列表
@@ -4,4 +4,5 @@ export * from '@/hooks/useCode.hook' @@ -4,4 +4,5 @@ export * from '@/hooks/useCode.hook'
4 export * from '@/hooks/useChartDataFetch.hook' 4 export * from '@/hooks/useChartDataFetch.hook'
5 export * from '@/hooks/useChartDataPondFetch.hook' 5 export * from '@/hooks/useChartDataPondFetch.hook'
6 export * from '@/hooks/useLifeHandler.hook' 6 export * from '@/hooks/useLifeHandler.hook'
7 -export * from '@/hooks/useLang.hook'  
  7 +export * from '@/hooks/useLang.hook'
  8 +export * from '@/hooks/useChartInteract.hook'
  1 +import { inject, type Ref } from 'vue'
  2 +import { EchartsRenderer } from '@/settings/chartThemes'
  3 +import { SCALE_KEY } from '@/views/preview/hooks/useScale.hook'
  4 +import { use } from 'echarts/core'
  5 +import { CanvasRenderer, SVGRenderer } from 'echarts/renderers'
  6 +
  7 +use([CanvasRenderer, SVGRenderer])
  8 +
  9 +type InitOptions = {
  10 + renderer: EchartsRenderer
  11 + devicePixelRatio?: number
  12 +}
  13 +
  14 +// 获取需要给当前echarts组件设置什么初始值
  15 +export function useCanvasInitOptions(option: any, themeSetting: any) {
  16 + const renderer = option.renderer || themeSetting.renderer
  17 + const initOptions: InitOptions = { renderer }
  18 + const scaleRef = inject<Ref<{ width: number; height: number }>>(SCALE_KEY) || { value: { width: 1, height: 1 } }
  19 +
  20 + if (renderer === 'canvas') {
  21 + initOptions.devicePixelRatio = Math.ceil(
  22 + Math.max(window.devicePixelRatio, scaleRef.value.width, scaleRef.value.height)
  23 + )
  24 + }
  25 + return initOptions
  26 +}
1 -import { ref, toRefs, toRaw } from 'vue' 1 +import { ref, toRefs, toRaw, watch } from 'vue'
2 import type VChart from 'vue-echarts' 2 import type VChart from 'vue-echarts'
3 import { customizeHttp } from '@/api/http' 3 import { customizeHttp } from '@/api/http'
4 import { useChartDataPondFetch } from '@/hooks/' 4 import { useChartDataPondFetch } from '@/hooks/'
@@ -87,8 +87,18 @@ export const useChartDataFetch = ( @@ -87,8 +87,18 @@ export const useChartDataFetch = (
87 } 87 }
88 } 88 }
89 89
90 - // 立即调用  
91 - fetchFn() 90 + // 普通初始化与组件交互处理监听
  91 + watch(
  92 + () => targetComponent.request,
  93 + () => {
  94 + fetchFn()
  95 + },
  96 + {
  97 + immediate: true,
  98 + deep: true
  99 + }
  100 + )
  101 +
92 // 定时时间 102 // 定时时间
93 const time = targetInterval && targetInterval.value ? targetInterval.value : globalRequestInterval.value 103 const time = targetInterval && targetInterval.value ? targetInterval.value : globalRequestInterval.value
94 // 单位 104 // 单位
  1 +import { toRefs } from 'vue'
  2 +import { CreateComponentType } from '@/packages/index.d'
  3 +import { useChartEditStore } from '@/store/modules/chartEditStore/chartEditStore'
  4 +
  5 +// 获取类型
  6 +type ChartEditStoreType = typeof useChartEditStore
  7 +
  8 +// Params 参数修改触发 api 更新图表请求
  9 +export const useChartInteract = (
  10 + chartConfig: CreateComponentType,
  11 + useChartEditStore: ChartEditStoreType,
  12 + param: { [T: string]: any },
  13 + interactEventOn: string
  14 +) => {
  15 + const chartEditStore = useChartEditStore()
  16 + const { interactEvents } = chartConfig.events
  17 + const fnOnEvent = interactEvents.filter(item => {
  18 + return item.interactOn === interactEventOn
  19 + })
  20 +
  21 + if (fnOnEvent.length === 0) return
  22 + fnOnEvent.forEach(item => {
  23 + const index = chartEditStore.fetchTargetIndex(item.interactComponentId)
  24 + if (index === -1) return
  25 + const { Params, Header } = toRefs(chartEditStore.componentList[index].request.requestParams)
  26 + Object.keys(item.interactFn).forEach(key => {
  27 + if (Params.value[key]) {
  28 + Params.value[key] = param[item.interactFn[key]]
  29 + }
  30 + if (Header.value[key]) {
  31 + Header.value[key] = param[item.interactFn[key]]
  32 + }
  33 + })
  34 + })
  35 +}
  36 +
  37 +// 联动事件触发的 type 变更时,清除当前绑定内容
  38 +export const clearInteractEvent = (chartConfig: CreateComponentType) => {
  39 +
  40 +}
1 <template> 1 <template>
2 <v-chart 2 <v-chart
3 ref="vChartRef" 3 ref="vChartRef"
  4 + :init-options="initOptions"
4 :theme="themeColor" 5 :theme="themeColor"
5 :option="option" 6 :option="option"
6 :manual-update="isPreview()" 7 :manual-update="isPreview()"
@@ -14,6 +15,7 @@ @@ -14,6 +15,7 @@
14 <script setup lang="ts"> 15 <script setup lang="ts">
15 import { ref, nextTick, computed, watch, PropType } from 'vue' 16 import { ref, nextTick, computed, watch, PropType } from 'vue'
16 import VChart from 'vue-echarts' 17 import VChart from 'vue-echarts'
  18 +import { useCanvasInitOptions } from '@/hooks/useCanvasInitOptions.hook'
17 import { use } from 'echarts/core' 19 import { use } from 'echarts/core'
18 import { CanvasRenderer } from 'echarts/renderers' 20 import { CanvasRenderer } from 'echarts/renderers'
19 import { BarChart } from 'echarts/charts' 21 import { BarChart } from 'echarts/charts'
@@ -41,6 +43,8 @@ const props = defineProps({ @@ -41,6 +43,8 @@ const props = defineProps({
41 } 43 }
42 }) 44 })
43 45
  46 +const initOptions = useCanvasInitOptions(props.chartConfig.option, props.themeSetting)
  47 +
44 use([DatasetComponent, CanvasRenderer, BarChart, GridComponent, TooltipComponent, LegendComponent]) 48 use([DatasetComponent, CanvasRenderer, BarChart, GridComponent, TooltipComponent, LegendComponent])
45 49
46 const replaceMergeArr = ref<string[]>() 50 const replaceMergeArr = ref<string[]>()
1 <template> 1 <template>
2 <v-chart 2 <v-chart
3 ref="vChartRef" 3 ref="vChartRef"
  4 + :init-options="initOptions"
4 :theme="themeColor" 5 :theme="themeColor"
5 :option="option" 6 :option="option"
6 :manual-update="isPreview()" 7 :manual-update="isPreview()"
@@ -14,6 +15,7 @@ @@ -14,6 +15,7 @@
14 <script setup lang="ts"> 15 <script setup lang="ts">
15 import { ref, nextTick, computed, watch, PropType } from 'vue' 16 import { ref, nextTick, computed, watch, PropType } from 'vue'
16 import VChart from 'vue-echarts' 17 import VChart from 'vue-echarts'
  18 +import { useCanvasInitOptions } from '@/hooks/useCanvasInitOptions.hook'
17 import { use } from 'echarts/core' 19 import { use } from 'echarts/core'
18 import { CanvasRenderer } from 'echarts/renderers' 20 import { CanvasRenderer } from 'echarts/renderers'
19 import { BarChart } from 'echarts/charts' 21 import { BarChart } from 'echarts/charts'
@@ -40,6 +42,8 @@ const props = defineProps({ @@ -40,6 +42,8 @@ const props = defineProps({
40 } 42 }
41 }) 43 })
42 44
  45 +const initOptions = useCanvasInitOptions(props.chartConfig.option, props.themeSetting)
  46 +
43 use([DatasetComponent, CanvasRenderer, BarChart, GridComponent, TooltipComponent, LegendComponent]) 47 use([DatasetComponent, CanvasRenderer, BarChart, GridComponent, TooltipComponent, LegendComponent])
44 48
45 const replaceMergeArr = ref<string[]>() 49 const replaceMergeArr = ref<string[]>()
1 <template> 1 <template>
2 <v-chart 2 <v-chart
3 ref="vChartRef" 3 ref="vChartRef"
  4 + :init-options="initOptions"
4 :theme="themeColor" 5 :theme="themeColor"
5 :option="option" 6 :option="option"
6 :manual-update="isPreview()" 7 :manual-update="isPreview()"
@@ -15,6 +16,7 @@ @@ -15,6 +16,7 @@
15 <script setup lang="ts"> 16 <script setup lang="ts">
16 import { PropType, computed, watch, ref, nextTick } from 'vue' 17 import { PropType, computed, watch, ref, nextTick } from 'vue'
17 import VChart from 'vue-echarts' 18 import VChart from 'vue-echarts'
  19 +import { useCanvasInitOptions } from '@/hooks/useCanvasInitOptions.hook'
18 import { use } from 'echarts/core' 20 import { use } from 'echarts/core'
19 import { CanvasRenderer } from 'echarts/renderers' 21 import { CanvasRenderer } from 'echarts/renderers'
20 import { LineChart } from 'echarts/charts' 22 import { LineChart } from 'echarts/charts'
@@ -41,6 +43,8 @@ const props = defineProps({ @@ -41,6 +43,8 @@ const props = defineProps({
41 } 43 }
42 }) 44 })
43 45
  46 +const initOptions = useCanvasInitOptions(props.chartConfig.option, props.themeSetting)
  47 +
44 use([DatasetComponent, CanvasRenderer, LineChart, GridComponent, TooltipComponent, LegendComponent]) 48 use([DatasetComponent, CanvasRenderer, LineChart, GridComponent, TooltipComponent, LegendComponent])
45 49
46 const replaceMergeArr = ref<string[]>() 50 const replaceMergeArr = ref<string[]>()
1 <template> 1 <template>
2 - <v-chart ref="vChartRef" :theme="themeColor" :option="option.value" :manual-update="isPreview()" autoresize> 2 + <v-chart ref="vChartRef" :init-options="initOptions" :theme="themeColor" :option="option.value" :manual-update="isPreview()" autoresize>
3 </v-chart> 3 </v-chart>
4 </template> 4 </template>
5 5
6 <script setup lang="ts"> 6 <script setup lang="ts">
7 import { reactive, watch, PropType } from 'vue' 7 import { reactive, watch, PropType } from 'vue'
8 import VChart from 'vue-echarts' 8 import VChart from 'vue-echarts'
  9 +import { useCanvasInitOptions } from '@/hooks/useCanvasInitOptions.hook'
9 import { use, graphic } from 'echarts/core' 10 import { use, graphic } from 'echarts/core'
10 import { CanvasRenderer } from 'echarts/renderers' 11 import { CanvasRenderer } from 'echarts/renderers'
11 import { LineChart } from 'echarts/charts' 12 import { LineChart } from 'echarts/charts'
@@ -32,6 +33,8 @@ const props = defineProps({ @@ -32,6 +33,8 @@ const props = defineProps({
32 } 33 }
33 }) 34 })
34 35
  36 +const initOptions = useCanvasInitOptions(props.chartConfig.option, props.themeSetting)
  37 +
35 use([DatasetComponent, CanvasRenderer, LineChart, GridComponent, TooltipComponent, LegendComponent]) 38 use([DatasetComponent, CanvasRenderer, LineChart, GridComponent, TooltipComponent, LegendComponent])
36 const chartEditStore = useChartEditStore() 39 const chartEditStore = useChartEditStore()
37 40
1 <template> 1 <template>
2 - <v-chart ref="vChartRef" :theme="themeColor" :option="option.value" :manual-update="isPreview()" autoresize></v-chart> 2 + <v-chart ref="vChartRef" :init-options="initOptions" :theme="themeColor" :option="option.value" :manual-update="isPreview()" autoresize></v-chart>
3 </template> 3 </template>
4 4
5 <script setup lang="ts"> 5 <script setup lang="ts">
6 import { reactive, watch, PropType } from 'vue' 6 import { reactive, watch, PropType } from 'vue'
7 import VChart from 'vue-echarts' 7 import VChart from 'vue-echarts'
  8 +import { useCanvasInitOptions } from '@/hooks/useCanvasInitOptions.hook'
8 import { use, graphic } from 'echarts/core' 9 import { use, graphic } from 'echarts/core'
9 import { CanvasRenderer } from 'echarts/renderers' 10 import { CanvasRenderer } from 'echarts/renderers'
10 import { LineChart } from 'echarts/charts' 11 import { LineChart } from 'echarts/charts'
@@ -31,6 +32,8 @@ const props = defineProps({ @@ -31,6 +32,8 @@ const props = defineProps({
31 } 32 }
32 }) 33 })
33 34
  35 +const initOptions = useCanvasInitOptions(props.chartConfig.option, props.themeSetting)
  36 +
34 use([DatasetComponent, CanvasRenderer, LineChart, GridComponent, TooltipComponent, LegendComponent]) 37 use([DatasetComponent, CanvasRenderer, LineChart, GridComponent, TooltipComponent, LegendComponent])
35 const chartEditStore = useChartEditStore() 38 const chartEditStore = useChartEditStore()
36 39
1 <template> 1 <template>
2 - <v-chart ref="vChartRef" :theme="themeColor" :option="option.value" :manual-update="isPreview()" autoresize> 2 + <v-chart ref="vChartRef" :init-options="initOptions" :theme="themeColor" :option="option.value" :manual-update="isPreview()" autoresize>
3 </v-chart> 3 </v-chart>
4 </template> 4 </template>
5 5
6 <script setup lang="ts"> 6 <script setup lang="ts">
7 import { PropType, watch, reactive } from 'vue' 7 import { PropType, watch, reactive } from 'vue'
8 import VChart from 'vue-echarts' 8 import VChart from 'vue-echarts'
  9 +import { useCanvasInitOptions } from '@/hooks/useCanvasInitOptions.hook'
9 import { use } from 'echarts/core' 10 import { use } from 'echarts/core'
10 import { CanvasRenderer } from 'echarts/renderers' 11 import { CanvasRenderer } from 'echarts/renderers'
11 import { LineChart } from 'echarts/charts' 12 import { LineChart } from 'echarts/charts'
@@ -32,6 +33,8 @@ const props = defineProps({ @@ -32,6 +33,8 @@ const props = defineProps({
32 } 33 }
33 }) 34 })
34 35
  36 +const initOptions = useCanvasInitOptions(props.chartConfig.option, props.themeSetting)
  37 +
35 use([DatasetComponent, CanvasRenderer, LineChart, GridComponent, TooltipComponent, LegendComponent]) 38 use([DatasetComponent, CanvasRenderer, LineChart, GridComponent, TooltipComponent, LegendComponent])
36 39
37 const chartEditStore = useChartEditStore() 40 const chartEditStore = useChartEditStore()
1 <template> 1 <template>
2 - <v-chart ref="vChartRef" :theme="themeColor" :option="option.value" :manual-update="isPreview()" autoresize> 2 + <v-chart ref="vChartRef" :init-options="initOptions" :theme="themeColor" :option="option.value" :manual-update="isPreview()" autoresize>
3 </v-chart> 3 </v-chart>
4 </template> 4 </template>
5 5
@@ -7,6 +7,7 @@ @@ -7,6 +7,7 @@
7 import { PropType, reactive, watch, ref, nextTick } from 'vue' 7 import { PropType, reactive, watch, ref, nextTick } from 'vue'
8 import config, { includes } from './config' 8 import config, { includes } from './config'
9 import VChart from 'vue-echarts' 9 import VChart from 'vue-echarts'
  10 +import { useCanvasInitOptions } from '@/hooks/useCanvasInitOptions.hook'
10 import { use, registerMap } from 'echarts/core' 11 import { use, registerMap } from 'echarts/core'
11 import { EffectScatterChart, MapChart } from 'echarts/charts' 12 import { EffectScatterChart, MapChart } from 'echarts/charts'
12 import { CanvasRenderer } from 'echarts/renderers' 13 import { CanvasRenderer } from 'echarts/renderers'
@@ -32,6 +33,8 @@ const props = defineProps({ @@ -32,6 +33,8 @@ const props = defineProps({
32 } 33 }
33 }) 34 })
34 35
  36 +const initOptions = useCanvasInitOptions(props.chartConfig.option, props.themeSetting)
  37 +
35 use([ 38 use([
36 MapChart, 39 MapChart,
37 DatasetComponent, 40 DatasetComponent,
1 <template> 1 <template>
2 - <v-chart ref="vChartRef" :theme="themeColor" :option="option" :manual-update="isPreview()" autoresize></v-chart> 2 + <v-chart ref="vChartRef" :init-options="initOptions" :theme="themeColor" :option="option" :manual-update="isPreview()" autoresize></v-chart>
3 </template> 3 </template>
4 4
5 <script setup lang="ts"> 5 <script setup lang="ts">
6 import { computed, PropType } from 'vue' 6 import { computed, PropType } from 'vue'
7 import VChart from 'vue-echarts' 7 import VChart from 'vue-echarts'
  8 +import { useCanvasInitOptions } from '@/hooks/useCanvasInitOptions.hook'
8 import { use } from 'echarts/core' 9 import { use } from 'echarts/core'
9 import { CanvasRenderer } from 'echarts/renderers' 10 import { CanvasRenderer } from 'echarts/renderers'
10 import { FunnelChart } from 'echarts/charts' 11 import { FunnelChart } from 'echarts/charts'
@@ -31,6 +32,8 @@ const props = defineProps({ @@ -31,6 +32,8 @@ const props = defineProps({
31 } 32 }
32 }) 33 })
33 34
  35 +const initOptions = useCanvasInitOptions(props.chartConfig.option, props.themeSetting)
  36 +
34 use([DatasetComponent, CanvasRenderer, FunnelChart, GridComponent, TooltipComponent, LegendComponent]) 37 use([DatasetComponent, CanvasRenderer, FunnelChart, GridComponent, TooltipComponent, LegendComponent])
35 38
36 const option = computed(() => { 39 const option = computed(() => {
1 <template> 1 <template>
2 - <v-chart ref="vChartRef" :theme="themeColor" :option="option" :manual-update="isPreview()" autoresize></v-chart> 2 + <v-chart ref="vChartRef" :init-options="initOptions" :theme="themeColor" :option="option" :manual-update="isPreview()" autoresize></v-chart>
3 </template> 3 </template>
4 4
5 <script setup lang="ts"> 5 <script setup lang="ts">
6 import { ref, watch, computed, PropType } from 'vue' 6 import { ref, watch, computed, PropType } from 'vue'
7 import VChart from 'vue-echarts' 7 import VChart from 'vue-echarts'
  8 +import { useCanvasInitOptions } from '@/hooks/useCanvasInitOptions.hook'
8 import dataJson from './data.json' 9 import dataJson from './data.json'
9 import { use } from 'echarts/core' 10 import { use } from 'echarts/core'
10 import { CanvasRenderer } from 'echarts/renderers' 11 import { CanvasRenderer } from 'echarts/renderers'
@@ -38,6 +39,8 @@ const props = defineProps({ @@ -38,6 +39,8 @@ const props = defineProps({
38 } 39 }
39 }) 40 })
40 41
  42 +const initOptions = useCanvasInitOptions(props.chartConfig.option, props.themeSetting)
  43 +
41 use([ 44 use([
42 DatasetComponent, 45 DatasetComponent,
43 CanvasRenderer, 46 CanvasRenderer,
1 <template> 1 <template>
2 - <v-chart ref="vChartRef" :theme="themeColor" :option="option" :manual-update="isPreview()" autoresize></v-chart> 2 + <v-chart ref="vChartRef" :init-options="initOptions" :theme="themeColor" :option="option" :manual-update="isPreview()" autoresize></v-chart>
3 </template> 3 </template>
4 4
5 <script setup lang="ts"> 5 <script setup lang="ts">
6 import { ref, computed, PropType, watch } from 'vue' 6 import { ref, computed, PropType, watch } from 'vue'
7 import VChart from 'vue-echarts' 7 import VChart from 'vue-echarts'
  8 +import { useCanvasInitOptions } from '@/hooks/useCanvasInitOptions.hook'
8 import dataJson from './data.json' 9 import dataJson from './data.json'
9 import { use } from 'echarts/core' 10 import { use } from 'echarts/core'
10 import { CanvasRenderer } from 'echarts/renderers' 11 import { CanvasRenderer } from 'echarts/renderers'
@@ -32,6 +33,8 @@ const props = defineProps({ @@ -32,6 +33,8 @@ const props = defineProps({
32 } 33 }
33 }) 34 })
34 35
  36 +const initOptions = useCanvasInitOptions(props.chartConfig.option, props.themeSetting)
  37 +
35 use([DatasetComponent, CanvasRenderer, RadarChart, GridComponent, TooltipComponent, LegendComponent]) 38 use([DatasetComponent, CanvasRenderer, RadarChart, GridComponent, TooltipComponent, LegendComponent])
36 39
37 const vChartRef = ref<typeof VChart>() 40 const vChartRef = ref<typeof VChart>()
1 <template> 1 <template>
2 - <v-chart ref="vChartRef" :theme="themeColor" :option="option" :manual-update="isPreview()" autoresize></v-chart> 2 + <v-chart ref="vChartRef" :init-options="initOptions" :theme="themeColor" :option="option" :manual-update="isPreview()" autoresize></v-chart>
3 </template> 3 </template>
4 4
5 <script setup lang="ts"> 5 <script setup lang="ts">
6 import { ref, computed, PropType, watch } from 'vue' 6 import { ref, computed, PropType, watch } from 'vue'
7 import VChart from 'vue-echarts' 7 import VChart from 'vue-echarts'
  8 +import { useCanvasInitOptions } from '@/hooks/useCanvasInitOptions.hook'
8 import dataJson from './data.json' 9 import dataJson from './data.json'
9 import { use } from 'echarts/core' 10 import { use } from 'echarts/core'
10 import { CanvasRenderer } from 'echarts/renderers' 11 import { CanvasRenderer } from 'echarts/renderers'
@@ -31,6 +32,8 @@ const props = defineProps({ @@ -31,6 +32,8 @@ const props = defineProps({
31 } 32 }
32 }) 33 })
33 34
  35 +const initOptions = useCanvasInitOptions(props.chartConfig.option, props.themeSetting)
  36 +
34 use([CanvasRenderer, TreemapChart]) 37 use([CanvasRenderer, TreemapChart])
35 38
36 const vChartRef = ref<typeof VChart>() 39 const vChartRef = ref<typeof VChart>()
1 <template> 1 <template>
2 - <v-chart :theme="themeColor" :option="option.value" autoresize></v-chart> 2 + <v-chart :theme="themeColor" :init-options="initOptions" :option="option.value" autoresize></v-chart>
3 </template> 3 </template>
4 4
5 <script setup lang="ts"> 5 <script setup lang="ts">
6 import { PropType, watch, reactive } from 'vue' 6 import { PropType, watch, reactive } from 'vue'
7 import VChart from 'vue-echarts' 7 import VChart from 'vue-echarts'
  8 +import { useCanvasInitOptions } from '@/hooks/useCanvasInitOptions.hook'
8 import { use } from 'echarts/core' 9 import { use } from 'echarts/core'
9 import 'echarts-liquidfill/src/liquidFill.js' 10 import 'echarts-liquidfill/src/liquidFill.js'
10 import { CanvasRenderer } from 'echarts/renderers' 11 import { CanvasRenderer } from 'echarts/renderers'
@@ -30,6 +31,8 @@ const props = defineProps({ @@ -30,6 +31,8 @@ const props = defineProps({
30 } 31 }
31 }) 32 })
32 33
  34 +const initOptions = useCanvasInitOptions(props.chartConfig.option, props.themeSetting)
  35 +
33 use([CanvasRenderer, GridComponent]) 36 use([CanvasRenderer, GridComponent])
34 37
35 const chartEditStore = useChartEditStore() 38 const chartEditStore = useChartEditStore()
1 <template> 1 <template>
2 - <v-chart :theme="themeColor" :option="option.value" autoresize> </v-chart> 2 + <v-chart :theme="themeColor" :init-options="initOptions" :option="option.value" autoresize> </v-chart>
3 </template> 3 </template>
4 4
5 <script setup lang="ts"> 5 <script setup lang="ts">
6 import { PropType, reactive, watch } from 'vue' 6 import { PropType, reactive, watch } from 'vue'
7 import VChart from 'vue-echarts' 7 import VChart from 'vue-echarts'
  8 +import { useCanvasInitOptions } from '@/hooks/useCanvasInitOptions.hook'
8 import { use } from 'echarts/core' 9 import { use } from 'echarts/core'
9 import { CanvasRenderer } from 'echarts/renderers' 10 import { CanvasRenderer } from 'echarts/renderers'
10 import { PieChart } from 'echarts/charts' 11 import { PieChart } from 'echarts/charts'
@@ -29,6 +30,8 @@ const props = defineProps({ @@ -29,6 +30,8 @@ const props = defineProps({
29 } 30 }
30 }) 31 })
31 32
  33 +const initOptions = useCanvasInitOptions(props.chartConfig.option, props.themeSetting)
  34 +
32 use([DatasetComponent, CanvasRenderer, PieChart, GridComponent, TooltipComponent, LegendComponent, TitleComponent]) 35 use([DatasetComponent, CanvasRenderer, PieChart, GridComponent, TooltipComponent, LegendComponent, TitleComponent])
33 36
34 const option = reactive({ 37 const option = reactive({
1 <template> 1 <template>
2 - <v-chart ref="vChartRef" :theme="themeColor" :option="option" :manual-update="isPreview()" autoresize></v-chart> 2 + <v-chart ref="vChartRef" :init-options="initOptions" :theme="themeColor" :option="option" :manual-update="isPreview()" autoresize></v-chart>
3 </template> 3 </template>
4 4
5 <script setup lang="ts"> 5 <script setup lang="ts">
6 import { computed, PropType, reactive, watch } from 'vue' 6 import { computed, PropType, reactive, watch } from 'vue'
7 import VChart from 'vue-echarts' 7 import VChart from 'vue-echarts'
  8 +import { useCanvasInitOptions } from '@/hooks/useCanvasInitOptions.hook'
8 import { use } from 'echarts/core' 9 import { use } from 'echarts/core'
9 import { CanvasRenderer } from 'echarts/renderers' 10 import { CanvasRenderer } from 'echarts/renderers'
10 import { PieChart } from 'echarts/charts' 11 import { PieChart } from 'echarts/charts'
@@ -30,6 +31,8 @@ const props = defineProps({ @@ -30,6 +31,8 @@ const props = defineProps({
30 } 31 }
31 }) 32 })
32 33
  34 +const initOptions = useCanvasInitOptions(props.chartConfig.option, props.themeSetting)
  35 +
33 use([DatasetComponent, CanvasRenderer, PieChart, GridComponent, TooltipComponent, LegendComponent]) 36 use([DatasetComponent, CanvasRenderer, PieChart, GridComponent, TooltipComponent, LegendComponent])
34 37
35 const option = computed(() => { 38 const option = computed(() => {
1 <template> 1 <template>
2 <v-chart 2 <v-chart
3 ref="vChartRef" 3 ref="vChartRef"
  4 + :init-options="initOptions"
4 :theme="themeColor" 5 :theme="themeColor"
5 :option="option" 6 :option="option"
6 :manual-update="isPreview()" 7 :manual-update="isPreview()"
@@ -13,6 +14,7 @@ @@ -13,6 +14,7 @@
13 <script setup lang="ts"> 14 <script setup lang="ts">
14 import { PropType, computed, watch, ref, nextTick } from 'vue' 15 import { PropType, computed, watch, ref, nextTick } from 'vue'
15 import VChart from 'vue-echarts' 16 import VChart from 'vue-echarts'
  17 +import { useCanvasInitOptions } from '@/hooks/useCanvasInitOptions.hook'
16 import { use } from 'echarts/core' 18 import { use } from 'echarts/core'
17 import { CanvasRenderer } from 'echarts/renderers' 19 import { CanvasRenderer } from 'echarts/renderers'
18 import { ScatterChart, EffectScatterChart } from 'echarts/charts' 20 import { ScatterChart, EffectScatterChart } from 'echarts/charts'
@@ -46,6 +48,8 @@ const props = defineProps({ @@ -46,6 +48,8 @@ const props = defineProps({
46 } 48 }
47 }) 49 })
48 50
  51 +const initOptions = useCanvasInitOptions(props.chartConfig.option, props.themeSetting)
  52 +
49 use([ 53 use([
50 DatasetComponent, 54 DatasetComponent,
51 CanvasRenderer, 55 CanvasRenderer,
1 <template> 1 <template>
2 <v-chart 2 <v-chart
3 ref="vChartRef" 3 ref="vChartRef"
  4 + :init-options="initOptions"
4 :theme="themeColor" 5 :theme="themeColor"
5 :option="option" 6 :option="option"
6 :manual-update="isPreview()" 7 :manual-update="isPreview()"
@@ -13,6 +14,7 @@ @@ -13,6 +14,7 @@
13 <script setup lang="ts"> 14 <script setup lang="ts">
14 import { PropType, computed, ref } from 'vue' 15 import { PropType, computed, ref } from 'vue'
15 import VChart from 'vue-echarts' 16 import VChart from 'vue-echarts'
  17 +import { useCanvasInitOptions } from '@/hooks/useCanvasInitOptions.hook'
16 import ecStat from 'echarts-stat' 18 import ecStat from 'echarts-stat'
17 import { use, registerTransform } from 'echarts/core' 19 import { use, registerTransform } from 'echarts/core'
18 import { CanvasRenderer } from 'echarts/renderers' 20 import { CanvasRenderer } from 'echarts/renderers'
@@ -47,6 +49,8 @@ const props = defineProps({ @@ -47,6 +49,8 @@ const props = defineProps({
47 } 49 }
48 }) 50 })
49 51
  52 +const initOptions = useCanvasInitOptions(props.chartConfig.option, props.themeSetting)
  53 +
50 use([ 54 use([
51 DatasetComponent, 55 DatasetComponent,
52 CanvasRenderer, 56 CanvasRenderer,
1 -import { ConfigType, PackagesCategoryEnum } from '@/packages/index.d' 1 +import { ConfigType, PackagesCategoryEnum, ChartFrameEnum } from '@/packages/index.d'
2 import { ChatCategoryEnum, ChatCategoryEnumName } from '../../index.d' 2 import { ChatCategoryEnum, ChatCategoryEnumName } from '../../index.d'
3 3
4 export const Border01Config: ConfigType = { 4 export const Border01Config: ConfigType = {
@@ -9,5 +9,6 @@ export const Border01Config: ConfigType = { @@ -9,5 +9,6 @@ export const Border01Config: ConfigType = {
9 category: ChatCategoryEnum.BORDER, 9 category: ChatCategoryEnum.BORDER,
10 categoryName: ChatCategoryEnumName.BORDER, 10 categoryName: ChatCategoryEnumName.BORDER,
11 package: PackagesCategoryEnum.DECORATES, 11 package: PackagesCategoryEnum.DECORATES,
  12 + chartFrame: ChartFrameEnum.STATIC,
12 image: 'border01.png' 13 image: 'border01.png'
13 } 14 }
1 -import image from '@/assets/images/chart/decorates/border02.png'  
2 -import { ConfigType, PackagesCategoryEnum } from '@/packages/index.d' 1 +import { ConfigType, PackagesCategoryEnum, ChartFrameEnum} from '@/packages/index.d'
3 import { ChatCategoryEnum, ChatCategoryEnumName } from '../../index.d' 2 import { ChatCategoryEnum, ChatCategoryEnumName } from '../../index.d'
4 3
5 export const Border02Config: ConfigType = { 4 export const Border02Config: ConfigType = {
@@ -10,5 +9,6 @@ export const Border02Config: ConfigType = { @@ -10,5 +9,6 @@ export const Border02Config: ConfigType = {
10 category: ChatCategoryEnum.BORDER, 9 category: ChatCategoryEnum.BORDER,
11 categoryName: ChatCategoryEnumName.BORDER, 10 categoryName: ChatCategoryEnumName.BORDER,
12 package: PackagesCategoryEnum.DECORATES, 11 package: PackagesCategoryEnum.DECORATES,
  12 + chartFrame: ChartFrameEnum.STATIC,
13 image: 'border02.png' 13 image: 'border02.png'
14 } 14 }
1 -import { ConfigType, PackagesCategoryEnum } from '@/packages/index.d' 1 +import { ConfigType, PackagesCategoryEnum, ChartFrameEnum } from '@/packages/index.d'
2 import { ChatCategoryEnum, ChatCategoryEnumName } from '../../index.d' 2 import { ChatCategoryEnum, ChatCategoryEnumName } from '../../index.d'
3 3
4 export const Border03Config: ConfigType = { 4 export const Border03Config: ConfigType = {
@@ -9,5 +9,6 @@ export const Border03Config: ConfigType = { @@ -9,5 +9,6 @@ export const Border03Config: ConfigType = {
9 category: ChatCategoryEnum.BORDER, 9 category: ChatCategoryEnum.BORDER,
10 categoryName: ChatCategoryEnumName.BORDER, 10 categoryName: ChatCategoryEnumName.BORDER,
11 package: PackagesCategoryEnum.DECORATES, 11 package: PackagesCategoryEnum.DECORATES,
  12 + chartFrame: ChartFrameEnum.STATIC,
12 image: 'border03.png' 13 image: 'border03.png'
13 } 14 }
1 -import { ConfigType, PackagesCategoryEnum } from '@/packages/index.d' 1 +import { ConfigType, PackagesCategoryEnum, ChartFrameEnum } from '@/packages/index.d'
2 import { ChatCategoryEnum, ChatCategoryEnumName } from '../../index.d' 2 import { ChatCategoryEnum, ChatCategoryEnumName } from '../../index.d'
3 3
4 export const Border04Config: ConfigType = { 4 export const Border04Config: ConfigType = {
@@ -9,5 +9,6 @@ export const Border04Config: ConfigType = { @@ -9,5 +9,6 @@ export const Border04Config: ConfigType = {
9 category: ChatCategoryEnum.BORDER, 9 category: ChatCategoryEnum.BORDER,
10 categoryName: ChatCategoryEnumName.BORDER, 10 categoryName: ChatCategoryEnumName.BORDER,
11 package: PackagesCategoryEnum.DECORATES, 11 package: PackagesCategoryEnum.DECORATES,
  12 + chartFrame: ChartFrameEnum.STATIC,
12 image: 'border04.png' 13 image: 'border04.png'
13 } 14 }
1 -import { ConfigType, PackagesCategoryEnum } from '@/packages/index.d' 1 +import { ConfigType, PackagesCategoryEnum, ChartFrameEnum } from '@/packages/index.d'
2 import { ChatCategoryEnum, ChatCategoryEnumName } from '../../index.d' 2 import { ChatCategoryEnum, ChatCategoryEnumName } from '../../index.d'
3 3
4 export const Border05Config: ConfigType = { 4 export const Border05Config: ConfigType = {
@@ -9,5 +9,6 @@ export const Border05Config: ConfigType = { @@ -9,5 +9,6 @@ export const Border05Config: ConfigType = {
9 category: ChatCategoryEnum.BORDER, 9 category: ChatCategoryEnum.BORDER,
10 categoryName: ChatCategoryEnumName.BORDER, 10 categoryName: ChatCategoryEnumName.BORDER,
11 package: PackagesCategoryEnum.DECORATES, 11 package: PackagesCategoryEnum.DECORATES,
  12 + chartFrame: ChartFrameEnum.STATIC,
12 image: 'border05.png' 13 image: 'border05.png'
13 } 14 }
1 -import { ConfigType, PackagesCategoryEnum } from '@/packages/index.d' 1 +import { ConfigType, PackagesCategoryEnum, ChartFrameEnum } from '@/packages/index.d'
2 import { ChatCategoryEnum, ChatCategoryEnumName } from '../../index.d' 2 import { ChatCategoryEnum, ChatCategoryEnumName } from '../../index.d'
3 3
4 export const Border06Config: ConfigType = { 4 export const Border06Config: ConfigType = {
@@ -9,5 +9,6 @@ export const Border06Config: ConfigType = { @@ -9,5 +9,6 @@ export const Border06Config: ConfigType = {
9 category: ChatCategoryEnum.BORDER, 9 category: ChatCategoryEnum.BORDER,
10 categoryName: ChatCategoryEnumName.BORDER, 10 categoryName: ChatCategoryEnumName.BORDER,
11 package: PackagesCategoryEnum.DECORATES, 11 package: PackagesCategoryEnum.DECORATES,
  12 + chartFrame: ChartFrameEnum.STATIC,
12 image: 'border06.png' 13 image: 'border06.png'
13 } 14 }
1 -import { ConfigType, PackagesCategoryEnum } from '@/packages/index.d' 1 +import { ConfigType, PackagesCategoryEnum, ChartFrameEnum } from '@/packages/index.d'
2 import { ChatCategoryEnum, ChatCategoryEnumName } from '../../index.d' 2 import { ChatCategoryEnum, ChatCategoryEnumName } from '../../index.d'
3 3
4 export const Border07Config: ConfigType = { 4 export const Border07Config: ConfigType = {
@@ -9,5 +9,6 @@ export const Border07Config: ConfigType = { @@ -9,5 +9,6 @@ export const Border07Config: ConfigType = {
9 category: ChatCategoryEnum.BORDER, 9 category: ChatCategoryEnum.BORDER,
10 categoryName: ChatCategoryEnumName.BORDER, 10 categoryName: ChatCategoryEnumName.BORDER,
11 package: PackagesCategoryEnum.DECORATES, 11 package: PackagesCategoryEnum.DECORATES,
  12 + chartFrame: ChartFrameEnum.STATIC,
12 image: 'border07.png' 13 image: 'border07.png'
13 } 14 }
1 -import { ConfigType, PackagesCategoryEnum } from '@/packages/index.d' 1 +import { ConfigType, PackagesCategoryEnum, ChartFrameEnum } from '@/packages/index.d'
2 import { ChatCategoryEnum, ChatCategoryEnumName } from '../../index.d' 2 import { ChatCategoryEnum, ChatCategoryEnumName } from '../../index.d'
3 3
4 export const Border08Config: ConfigType = { 4 export const Border08Config: ConfigType = {
@@ -9,5 +9,6 @@ export const Border08Config: ConfigType = { @@ -9,5 +9,6 @@ export const Border08Config: ConfigType = {
9 category: ChatCategoryEnum.BORDER, 9 category: ChatCategoryEnum.BORDER,
10 categoryName: ChatCategoryEnumName.BORDER, 10 categoryName: ChatCategoryEnumName.BORDER,
11 package: PackagesCategoryEnum.DECORATES, 11 package: PackagesCategoryEnum.DECORATES,
  12 + chartFrame: ChartFrameEnum.STATIC,
12 image: 'border08.png' 13 image: 'border08.png'
13 } 14 }
1 -import { ConfigType, PackagesCategoryEnum } from '@/packages/index.d' 1 +import { ConfigType, PackagesCategoryEnum, ChartFrameEnum } from '@/packages/index.d'
2 import { ChatCategoryEnum, ChatCategoryEnumName } from '../../index.d' 2 import { ChatCategoryEnum, ChatCategoryEnumName } from '../../index.d'
3 3
4 export const Border09Config: ConfigType = { 4 export const Border09Config: ConfigType = {
@@ -9,5 +9,6 @@ export const Border09Config: ConfigType = { @@ -9,5 +9,6 @@ export const Border09Config: ConfigType = {
9 category: ChatCategoryEnum.BORDER, 9 category: ChatCategoryEnum.BORDER,
10 categoryName: ChatCategoryEnumName.BORDER, 10 categoryName: ChatCategoryEnumName.BORDER,
11 package: PackagesCategoryEnum.DECORATES, 11 package: PackagesCategoryEnum.DECORATES,
  12 + chartFrame: ChartFrameEnum.STATIC,
12 image: 'border09.png' 13 image: 'border09.png'
13 } 14 }
1 -import { ConfigType, PackagesCategoryEnum } from '@/packages/index.d' 1 +import { ConfigType, PackagesCategoryEnum, ChartFrameEnum } from '@/packages/index.d'
2 import { ChatCategoryEnum, ChatCategoryEnumName } from '../../index.d' 2 import { ChatCategoryEnum, ChatCategoryEnumName } from '../../index.d'
3 3
4 export const Border10Config: ConfigType = { 4 export const Border10Config: ConfigType = {
@@ -9,5 +9,6 @@ export const Border10Config: ConfigType = { @@ -9,5 +9,6 @@ export const Border10Config: ConfigType = {
9 category: ChatCategoryEnum.BORDER, 9 category: ChatCategoryEnum.BORDER,
10 categoryName: ChatCategoryEnumName.BORDER, 10 categoryName: ChatCategoryEnumName.BORDER,
11 package: PackagesCategoryEnum.DECORATES, 11 package: PackagesCategoryEnum.DECORATES,
  12 + chartFrame: ChartFrameEnum.STATIC,
12 image: 'border10.png' 13 image: 'border10.png'
13 } 14 }
1 -import { ConfigType, PackagesCategoryEnum } from '@/packages/index.d' 1 +import { ConfigType, PackagesCategoryEnum, ChartFrameEnum } from '@/packages/index.d'
2 import { ChatCategoryEnum, ChatCategoryEnumName } from '../../index.d' 2 import { ChatCategoryEnum, ChatCategoryEnumName } from '../../index.d'
3 3
4 export const Border11Config: ConfigType = { 4 export const Border11Config: ConfigType = {
@@ -9,5 +9,6 @@ export const Border11Config: ConfigType = { @@ -9,5 +9,6 @@ export const Border11Config: ConfigType = {
9 category: ChatCategoryEnum.BORDER, 9 category: ChatCategoryEnum.BORDER,
10 categoryName: ChatCategoryEnumName.BORDER, 10 categoryName: ChatCategoryEnumName.BORDER,
11 package: PackagesCategoryEnum.DECORATES, 11 package: PackagesCategoryEnum.DECORATES,
  12 + chartFrame: ChartFrameEnum.STATIC,
12 image: 'border11.png' 13 image: 'border11.png'
13 } 14 }
1 -import { ConfigType, PackagesCategoryEnum } from '@/packages/index.d' 1 +import { ConfigType, PackagesCategoryEnum, ChartFrameEnum } from '@/packages/index.d'
2 import { ChatCategoryEnum, ChatCategoryEnumName } from '../../index.d' 2 import { ChatCategoryEnum, ChatCategoryEnumName } from '../../index.d'
3 3
4 export const Border12Config: ConfigType = { 4 export const Border12Config: ConfigType = {
@@ -9,5 +9,6 @@ export const Border12Config: ConfigType = { @@ -9,5 +9,6 @@ export const Border12Config: ConfigType = {
9 category: ChatCategoryEnum.BORDER, 9 category: ChatCategoryEnum.BORDER,
10 categoryName: ChatCategoryEnumName.BORDER, 10 categoryName: ChatCategoryEnumName.BORDER,
11 package: PackagesCategoryEnum.DECORATES, 11 package: PackagesCategoryEnum.DECORATES,
  12 + chartFrame: ChartFrameEnum.STATIC,
12 image: 'border12.png' 13 image: 'border12.png'
13 } 14 }
1 -import { ConfigType, PackagesCategoryEnum } from '@/packages/index.d' 1 +import { ConfigType, PackagesCategoryEnum, ChartFrameEnum } from '@/packages/index.d'
2 import { ChatCategoryEnum, ChatCategoryEnumName } from '../../index.d' 2 import { ChatCategoryEnum, ChatCategoryEnumName } from '../../index.d'
3 3
4 export const Border13Config: ConfigType = { 4 export const Border13Config: ConfigType = {
@@ -9,5 +9,6 @@ export const Border13Config: ConfigType = { @@ -9,5 +9,6 @@ export const Border13Config: ConfigType = {
9 category: ChatCategoryEnum.BORDER, 9 category: ChatCategoryEnum.BORDER,
10 categoryName: ChatCategoryEnumName.BORDER, 10 categoryName: ChatCategoryEnumName.BORDER,
11 package: PackagesCategoryEnum.DECORATES, 11 package: PackagesCategoryEnum.DECORATES,
  12 + chartFrame: ChartFrameEnum.STATIC,
12 image: 'border13.png' 13 image: 'border13.png'
13 } 14 }
1 -import { ConfigType, PackagesCategoryEnum } from '@/packages/index.d' 1 +import { ConfigType, PackagesCategoryEnum, ChartFrameEnum } from '@/packages/index.d'
2 import { ChatCategoryEnum,ChatCategoryEnumName } from '../../index.d' 2 import { ChatCategoryEnum,ChatCategoryEnumName } from '../../index.d'
3 3
4 export const Decorates01Config: ConfigType = { 4 export const Decorates01Config: ConfigType = {
@@ -9,5 +9,6 @@ export const Decorates01Config: ConfigType = { @@ -9,5 +9,6 @@ export const Decorates01Config: ConfigType = {
9 category: ChatCategoryEnum.DECORATE, 9 category: ChatCategoryEnum.DECORATE,
10 categoryName: ChatCategoryEnumName.DECORATE, 10 categoryName: ChatCategoryEnumName.DECORATE,
11 package: PackagesCategoryEnum.DECORATES, 11 package: PackagesCategoryEnum.DECORATES,
  12 + chartFrame: ChartFrameEnum.STATIC,
12 image: 'decorates01.png' 13 image: 'decorates01.png'
13 } 14 }
1 -import { ConfigType, PackagesCategoryEnum } from '@/packages/index.d' 1 +import { ConfigType, PackagesCategoryEnum, ChartFrameEnum } from '@/packages/index.d'
2 import { ChatCategoryEnum,ChatCategoryEnumName } from '../../index.d' 2 import { ChatCategoryEnum,ChatCategoryEnumName } from '../../index.d'
3 3
4 export const Decorates02Config: ConfigType = { 4 export const Decorates02Config: ConfigType = {
@@ -9,5 +9,6 @@ export const Decorates02Config: ConfigType = { @@ -9,5 +9,6 @@ export const Decorates02Config: ConfigType = {
9 category: ChatCategoryEnum.DECORATE, 9 category: ChatCategoryEnum.DECORATE,
10 categoryName: ChatCategoryEnumName.DECORATE, 10 categoryName: ChatCategoryEnumName.DECORATE,
11 package: PackagesCategoryEnum.DECORATES, 11 package: PackagesCategoryEnum.DECORATES,
  12 + chartFrame: ChartFrameEnum.STATIC,
12 image: 'decorates02.png' 13 image: 'decorates02.png'
13 } 14 }
1 -import { ConfigType, PackagesCategoryEnum } from '@/packages/index.d' 1 +import { ConfigType, PackagesCategoryEnum, ChartFrameEnum } from '@/packages/index.d'
2 import { ChatCategoryEnum, ChatCategoryEnumName } from '../../index.d' 2 import { ChatCategoryEnum, ChatCategoryEnumName } from '../../index.d'
3 3
4 export const Decorates03Config: ConfigType = { 4 export const Decorates03Config: ConfigType = {
@@ -9,5 +9,6 @@ export const Decorates03Config: ConfigType = { @@ -9,5 +9,6 @@ export const Decorates03Config: ConfigType = {
9 category: ChatCategoryEnum.DECORATE, 9 category: ChatCategoryEnum.DECORATE,
10 categoryName: ChatCategoryEnumName.DECORATE, 10 categoryName: ChatCategoryEnumName.DECORATE,
11 package: PackagesCategoryEnum.DECORATES, 11 package: PackagesCategoryEnum.DECORATES,
12 - image: 'decorates01.png' 12 + chartFrame: ChartFrameEnum.STATIC,
  13 + image: 'decorates03.png'
13 } 14 }
1 -import { ConfigType, PackagesCategoryEnum } from '@/packages/index.d' 1 +import { ConfigType, PackagesCategoryEnum, ChartFrameEnum } from '@/packages/index.d'
2 import { ChatCategoryEnum, ChatCategoryEnumName } from '../../index.d' 2 import { ChatCategoryEnum, ChatCategoryEnumName } from '../../index.d'
3 3
4 export const Decorates04Config: ConfigType = { 4 export const Decorates04Config: ConfigType = {
@@ -9,5 +9,6 @@ export const Decorates04Config: ConfigType = { @@ -9,5 +9,6 @@ export const Decorates04Config: ConfigType = {
9 category: ChatCategoryEnum.DECORATE, 9 category: ChatCategoryEnum.DECORATE,
10 categoryName: ChatCategoryEnumName.DECORATE, 10 categoryName: ChatCategoryEnumName.DECORATE,
11 package: PackagesCategoryEnum.DECORATES, 11 package: PackagesCategoryEnum.DECORATES,
  12 + chartFrame: ChartFrameEnum.STATIC,
12 image: 'decorates04.png' 13 image: 'decorates04.png'
13 } 14 }
1 -import image from '@/assets/images/chart/decorates/decorates05.png'  
2 -import { ConfigType, PackagesCategoryEnum } from '@/packages/index.d' 1 +import { ConfigType, PackagesCategoryEnum, ChartFrameEnum } from '@/packages/index.d'
3 import { ChatCategoryEnum, ChatCategoryEnumName } from '../../index.d' 2 import { ChatCategoryEnum, ChatCategoryEnumName } from '../../index.d'
4 3
5 export const Decorates05Config: ConfigType = { 4 export const Decorates05Config: ConfigType = {
@@ -10,5 +9,6 @@ export const Decorates05Config: ConfigType = { @@ -10,5 +9,6 @@ export const Decorates05Config: ConfigType = {
10 category: ChatCategoryEnum.DECORATE, 9 category: ChatCategoryEnum.DECORATE,
11 categoryName: ChatCategoryEnumName.DECORATE, 10 categoryName: ChatCategoryEnumName.DECORATE,
12 package: PackagesCategoryEnum.DECORATES, 11 package: PackagesCategoryEnum.DECORATES,
  12 + chartFrame: ChartFrameEnum.STATIC,
13 image: 'decorates05.png' 13 image: 'decorates05.png'
14 } 14 }
@@ -9,6 +9,6 @@ export const Decorates06Config: ConfigType = { @@ -9,6 +9,6 @@ export const Decorates06Config: ConfigType = {
9 category: ChatCategoryEnum.DECORATE, 9 category: ChatCategoryEnum.DECORATE,
10 categoryName: ChatCategoryEnumName.DECORATE, 10 categoryName: ChatCategoryEnumName.DECORATE,
11 package: PackagesCategoryEnum.DECORATES, 11 package: PackagesCategoryEnum.DECORATES,
12 - chartFrame: ChartFrameEnum.COMMON, 12 + chartFrame: ChartFrameEnum.STATIC,
13 image: 'decorates06.png' 13 image: 'decorates06.png'
14 } 14 }
1 -import { ConfigType, PackagesCategoryEnum } from '@/packages/index.d' 1 +import { ConfigType, PackagesCategoryEnum, ChartFrameEnum } from '@/packages/index.d'
2 import { ChatCategoryEnum, ChatCategoryEnumName } from '../../index.d' 2 import { ChatCategoryEnum, ChatCategoryEnumName } from '../../index.d'
3 3
4 export const CountDownConfig: ConfigType = { 4 export const CountDownConfig: ConfigType = {
@@ -9,5 +9,6 @@ export const CountDownConfig: ConfigType = { @@ -9,5 +9,6 @@ export const CountDownConfig: ConfigType = {
9 category: ChatCategoryEnum.MORE, 9 category: ChatCategoryEnum.MORE,
10 categoryName: ChatCategoryEnumName.MORE, 10 categoryName: ChatCategoryEnumName.MORE,
11 package: PackagesCategoryEnum.DECORATES, 11 package: PackagesCategoryEnum.DECORATES,
  12 + chartFrame: ChartFrameEnum.COMMON,
12 image: 'countdown.png' 13 image: 'countdown.png'
13 } 14 }
1 -import { ConfigType, PackagesCategoryEnum } from '@/packages/index.d' 1 +import { ConfigType, PackagesCategoryEnum, ChartFrameEnum } from '@/packages/index.d'
2 import { ChatCategoryEnum, ChatCategoryEnumName } from '../../index.d' 2 import { ChatCategoryEnum, ChatCategoryEnumName } from '../../index.d'
3 3
4 export const FlipperNumberConfig: ConfigType = { 4 export const FlipperNumberConfig: ConfigType = {
@@ -9,5 +9,6 @@ export const FlipperNumberConfig: ConfigType = { @@ -9,5 +9,6 @@ export const FlipperNumberConfig: ConfigType = {
9 category: ChatCategoryEnum.MORE, 9 category: ChatCategoryEnum.MORE,
10 categoryName: ChatCategoryEnumName.MORE, 10 categoryName: ChatCategoryEnumName.MORE,
11 package: PackagesCategoryEnum.DECORATES, 11 package: PackagesCategoryEnum.DECORATES,
  12 + chartFrame: ChartFrameEnum.COMMON,
12 image: 'flipper-number.png' 13 image: 'flipper-number.png'
13 } 14 }
1 -import { ConfigType, PackagesCategoryEnum } from '@/packages/index.d' 1 +import { ConfigType, PackagesCategoryEnum, ChartFrameEnum } from '@/packages/index.d'
2 import { ChatCategoryEnum, ChatCategoryEnumName } from '../../index.d' 2 import { ChatCategoryEnum, ChatCategoryEnumName } from '../../index.d'
3 3
4 export const NumberConfig: ConfigType = { 4 export const NumberConfig: ConfigType = {
@@ -9,5 +9,6 @@ export const NumberConfig: ConfigType = { @@ -9,5 +9,6 @@ export const NumberConfig: ConfigType = {
9 category: ChatCategoryEnum.MORE, 9 category: ChatCategoryEnum.MORE,
10 categoryName: ChatCategoryEnumName.MORE, 10 categoryName: ChatCategoryEnumName.MORE,
11 package: PackagesCategoryEnum.DECORATES, 11 package: PackagesCategoryEnum.DECORATES,
  12 + chartFrame: ChartFrameEnum.COMMON,
12 image: 'number.png' 13 image: 'number.png'
13 } 14 }
1 -import { ConfigType, PackagesCategoryEnum } from '@/packages/index.d' 1 +import { ConfigType, PackagesCategoryEnum, ChartFrameEnum } from '@/packages/index.d'
2 import { ChatCategoryEnum,ChatCategoryEnumName } from '../../index.d' 2 import { ChatCategoryEnum,ChatCategoryEnumName } from '../../index.d'
3 3
4 export const TimeCommonConfig: ConfigType = { 4 export const TimeCommonConfig: ConfigType = {
@@ -9,5 +9,6 @@ export const TimeCommonConfig: ConfigType = { @@ -9,5 +9,6 @@ export const TimeCommonConfig: ConfigType = {
9 category: ChatCategoryEnum.MORE, 9 category: ChatCategoryEnum.MORE,
10 categoryName: ChatCategoryEnumName.MORE, 10 categoryName: ChatCategoryEnumName.MORE,
11 package: PackagesCategoryEnum.DECORATES, 11 package: PackagesCategoryEnum.DECORATES,
  12 + chartFrame: ChartFrameEnum.STATIC,
12 image: 'time.png' 13 image: 'time.png'
13 } 14 }
@@ -9,6 +9,6 @@ export const ThreeEarth01Config: ConfigType = { @@ -9,6 +9,6 @@ export const ThreeEarth01Config: ConfigType = {
9 category: ChatCategoryEnum.THREE, 9 category: ChatCategoryEnum.THREE,
10 categoryName: ChatCategoryEnumName.THREE, 10 categoryName: ChatCategoryEnumName.THREE,
11 package: PackagesCategoryEnum.DECORATES, 11 package: PackagesCategoryEnum.DECORATES,
12 - chartFrame: ChartFrameEnum.STATIC, 12 + chartFrame: ChartFrameEnum.COMMON,
13 image: 'threeEarth01.png' 13 image: 'threeEarth01.png'
14 } 14 }
  1 +import dayjs from 'dayjs'
  2 +import cloneDeep from 'lodash/cloneDeep'
  3 +import { PublicConfigClass } from '@/packages/public'
  4 +import { CreateComponentType } from '@/packages/index.d'
  5 +import { chartInitConfig } from '@/settings/designSetting'
  6 +import { COMPONENT_INTERACT_EVENT_KET } from '@/enums/eventEnum'
  7 +import { interactActions, ComponentInteractEventEnum } from './interact'
  8 +import { InputsDateConfig } from './index'
  9 +
  10 +export const option = {
  11 + // 时间组件展示类型,必须和 interactActions 中定义的数据一致
  12 + [COMPONENT_INTERACT_EVENT_KET]: ComponentInteractEventEnum.DATE,
  13 + // 下拉展示
  14 + isPanel: 0,
  15 + dataset: dayjs().valueOf()
  16 +}
  17 +
  18 +export default class Config extends PublicConfigClass implements CreateComponentType {
  19 + public key = InputsDateConfig.key
  20 + public attr = { ...chartInitConfig, w: 260, h: 32, zIndex: -1 }
  21 + public chartConfig = cloneDeep(InputsDateConfig)
  22 + public interactActions = interactActions
  23 + public option = cloneDeep(option)
  24 +}
  1 +<template>
  2 + <collapse-item name="展示方式" :expanded="true">
  3 + <setting-item-box name="选择方式">
  4 + <n-select
  5 + v-model:value="optionData.isPanel"
  6 + size="small"
  7 + :options="panelOptions"
  8 + />
  9 + </setting-item-box>
  10 + </collapse-item>
  11 +
  12 + <collapse-item name="时间配置" :expanded="true">
  13 + <setting-item-box name="基础">
  14 + <setting-item name="类型">
  15 + <n-select
  16 + v-model:value="optionData.componentInteractEventKey"
  17 + size="small"
  18 + :options="datePickerTypeOptions"
  19 + />
  20 + </setting-item>
  21 + </setting-item-box>
  22 +
  23 + <setting-item-box name="默认值" :alone="true">
  24 + <n-date-picker
  25 + size="small"
  26 + v-model:value="optionData.dataset"
  27 + :type="optionData.componentInteractEventKey"
  28 + />
  29 + </setting-item-box>
  30 + </collapse-item>
  31 +</template>
  32 +
  33 +<script lang="ts" setup>
  34 +import { PropType } from 'vue'
  35 +import { icon } from '@/plugins'
  36 +import { CollapseItem, SettingItemBox, SettingItem } from '@/components/Pages/ChartItemSetting'
  37 +import { option } from './config'
  38 +import { ComponentInteractEventEnum } from './interact'
  39 +
  40 +const { HelpOutlineIcon } = icon.ionicons5
  41 +
  42 +const props = defineProps({
  43 + optionData: {
  44 + type: Object as PropType<typeof option>,
  45 + required: true
  46 + }
  47 +})
  48 +
  49 +const panelOptions = [
  50 + {
  51 + label: '下拉展示',
  52 + value: 0
  53 + },
  54 + {
  55 + label: '面板展示',
  56 + value: 1
  57 + }
  58 +]
  59 +
  60 +const datePickerTypeOptions = [
  61 + {
  62 + label: '日期',
  63 + value: ComponentInteractEventEnum.DATE
  64 + },
  65 + {
  66 + label: '日期时间',
  67 + value: ComponentInteractEventEnum.DATE_TIME
  68 + },
  69 + {
  70 + label: '日期范围',
  71 + value: ComponentInteractEventEnum.DATE_RANGE
  72 + },
  73 + {
  74 + label: '月份',
  75 + value: ComponentInteractEventEnum.MONTH
  76 + },
  77 + {
  78 + label: '月份范围',
  79 + value: ComponentInteractEventEnum.MONTH_RANGE
  80 + },
  81 + {
  82 + label: '年份',
  83 + value: ComponentInteractEventEnum.YEAR
  84 + },
  85 + {
  86 + label: '年份范围',
  87 + value: ComponentInteractEventEnum.YEAR_RANGE
  88 + },
  89 + {
  90 + label: '季度',
  91 + value: ComponentInteractEventEnum.QUARTER
  92 + },
  93 + {
  94 + label: '季度范围',
  95 + value: ComponentInteractEventEnum.QUARTER_RANGE
  96 + }
  97 +]
  98 +</script>
  1 +import { ConfigType, PackagesCategoryEnum, ChartFrameEnum } from '@/packages/index.d'
  2 +import { ChatCategoryEnum, ChatCategoryEnumName } from '../../index.d'
  3 +
  4 +export const InputsDateConfig: ConfigType = {
  5 + key: 'InputsDate',
  6 + chartKey: 'VInputsDate',
  7 + conKey: 'VCInputsDate',
  8 + title: '时间选择器',
  9 + category: ChatCategoryEnum.INPUTS,
  10 + categoryName: ChatCategoryEnumName.INPUTS,
  11 + package: PackagesCategoryEnum.INFORMATIONS,
  12 + chartFrame: ChartFrameEnum.STATIC,
  13 + image: 'inputs_date.png'
  14 +}
  1 +<template>
  2 + <n-date-picker
  3 + v-model:value="option.dataset"
  4 + :panel="!!chartConfig.option.isPanel"
  5 + :type="chartConfig.option.componentInteractEventKey"
  6 + :style="`width:${w}px;`"
  7 + @update:value="onChange"
  8 + />
  9 +</template>
  10 +
  11 +<script setup lang="ts">
  12 +import { PropType, toRefs, ref, shallowReactive, watch } from 'vue'
  13 +import dayjs from 'dayjs'
  14 +import { CreateComponentType } from '@/packages/index.d'
  15 +import { useChartEditStore } from '@/store/modules/chartEditStore/chartEditStore'
  16 +import { useChartInteract } from '@/hooks'
  17 +import { InteractEventOn } from '@/enums/eventEnum'
  18 +import { ComponentInteractParamsEnum } from './interact'
  19 +
  20 +const props = defineProps({
  21 + chartConfig: {
  22 + type: Object as PropType<CreateComponentType>,
  23 + required: true
  24 + }
  25 +})
  26 +
  27 +const { w, h } = toRefs(props.chartConfig.attr)
  28 +const rangeDate = ref<number | number[]>()
  29 +
  30 +const option = shallowReactive({
  31 + dataset: props.chartConfig.option.dataset
  32 +})
  33 +
  34 +// 监听事件改变
  35 +const onChange = (v: number | number[]) => {
  36 + if (v instanceof Array) {
  37 + // 存储到联动数据
  38 + useChartInteract(
  39 + props.chartConfig,
  40 + useChartEditStore,
  41 + {
  42 + [ComponentInteractParamsEnum.DATE_START]: v[0] | dayjs().valueOf(),
  43 + [ComponentInteractParamsEnum.DATE_END]: v[1] | dayjs().valueOf(),
  44 + [ComponentInteractParamsEnum.DATE_RANGE]: `${v[0]}-${v[1]}`
  45 + },
  46 + InteractEventOn.CHANGE
  47 + )
  48 + } else {
  49 + // 存储到联动数据
  50 + useChartInteract(
  51 + props.chartConfig,
  52 + useChartEditStore,
  53 + { [ComponentInteractParamsEnum.DATE]: v },
  54 + InteractEventOn.CHANGE
  55 + )
  56 + }
  57 +}
  58 +
  59 +// 手动更新
  60 +watch(
  61 + () => props.chartConfig.option.dataset,
  62 + (newData: number | number[]) => {
  63 + option.dataset = newData
  64 + // 关联目标组件首次请求带上默认内容
  65 + onChange(newData)
  66 + },
  67 + {
  68 + immediate: true
  69 + }
  70 +)
  71 +</script>
  72 +
  73 +<style lang="scss" scoped>
  74 +@include deep() {
  75 + .n-input {
  76 + height: v-bind('h + "px"');
  77 + display: flex;
  78 + align-items: center;
  79 + }
  80 +}
  81 +</style>
  1 +import { InteractEventOn, InteractActionsType } from '@/enums/eventEnum'
  2 +
  3 +// 时间组件类型
  4 +export enum ComponentInteractEventEnum {
  5 + DATE = 'date',
  6 + DATE_TIME = 'datetime',
  7 + DATE_RANGE = 'daterange',
  8 + DATE_TIME_RANGE = 'datetimerange',
  9 + MONTH = 'month',
  10 + MONTH_RANGE = 'monthrange',
  11 + YEAR = 'year',
  12 + YEAR_RANGE = 'yearrange',
  13 + QUARTER = 'quarter',
  14 + QUARTER_RANGE = 'quarterrange'
  15 +}
  16 +
  17 +// 联动参数
  18 +export enum ComponentInteractParamsEnum {
  19 + DATE = 'date',
  20 + DATE_START = 'dateStart',
  21 + DATE_END = 'dateEnd',
  22 + DATE_RANGE = 'daterange'
  23 +}
  24 +
  25 +const time = [
  26 + {
  27 + value: ComponentInteractParamsEnum.DATE,
  28 + label: '日期'
  29 + }
  30 +]
  31 +
  32 +const timeRange = [
  33 + {
  34 + value: ComponentInteractParamsEnum.DATE_START,
  35 + label: '开始时间'
  36 + },
  37 + {
  38 + value: ComponentInteractParamsEnum.DATE_END,
  39 + label: '结束时间'
  40 + },
  41 + {
  42 + value: ComponentInteractParamsEnum.DATE_RANGE,
  43 + label: '日期范围'
  44 + }
  45 +]
  46 +
  47 +// 定义组件触发回调事件
  48 +export const interactActions: InteractActionsType[] = [
  49 + {
  50 + interactType: InteractEventOn.CHANGE,
  51 + interactName: '选择完成',
  52 + componentEmitEvents: {
  53 + [ComponentInteractEventEnum.DATE]: time,
  54 + [ComponentInteractEventEnum.DATE_TIME]: time,
  55 + [ComponentInteractEventEnum.DATE_RANGE]: timeRange,
  56 + [ComponentInteractEventEnum.MONTH]: time,
  57 + [ComponentInteractEventEnum.MONTH_RANGE]: timeRange,
  58 + [ComponentInteractEventEnum.QUARTER]: time,
  59 + [ComponentInteractEventEnum.QUARTER_RANGE]: timeRange,
  60 + [ComponentInteractEventEnum.YEAR]: time,
  61 + [ComponentInteractEventEnum.YEAR_RANGE]: timeRange,
  62 + }
  63 + }
  64 +]
  1 +import cloneDeep from 'lodash/cloneDeep'
  2 +import { PublicConfigClass } from '@/packages/public'
  3 +import { CreateComponentType } from '@/packages/index.d'
  4 +import { chartInitConfig } from '@/settings/designSetting'
  5 +import { COMPONENT_INTERACT_EVENT_KET } from '@/enums/eventEnum'
  6 +import { interactActions, ComponentInteractEventEnum } from './interact'
  7 +import { InputsSelectConfig } from './index'
  8 +
  9 +export const option = {
  10 + // 时间组件展示类型,必须和 interactActions 中定义的数据一致
  11 + [COMPONENT_INTERACT_EVENT_KET]: ComponentInteractEventEnum.DATA,
  12 + // 默认值
  13 + selectValue: '1',
  14 + // 暴露配置内容给用户
  15 + dataset: [
  16 + {
  17 + label: '选项1',
  18 + value: '1'
  19 + },
  20 + {
  21 + label: '选项2',
  22 + value: '2'
  23 + },
  24 + {
  25 + label: '选项3',
  26 + value: '3'
  27 + }
  28 + ]
  29 +}
  30 +
  31 +export default class Config extends PublicConfigClass implements CreateComponentType {
  32 + public key = InputsSelectConfig.key
  33 + public attr = { ...chartInitConfig, w: 260, h: 32, zIndex: -1 }
  34 + public chartConfig = cloneDeep(InputsSelectConfig)
  35 + public interactActions = interactActions
  36 + public option = cloneDeep(option)
  37 +}
  1 +<template>
  2 + <collapse-item name="下拉配置" :expanded="true">
  3 + <setting-item-box name="默认值" :alone="true">
  4 + <n-select size="small" v-model:value="optionData.selectValue" :options="optionData.dataset" />
  5 + </setting-item-box>
  6 + </collapse-item>
  7 +</template>
  8 +
  9 +<script lang="ts" setup>
  10 +import { PropType } from 'vue'
  11 +import { CollapseItem, SettingItemBox } from '@/components/Pages/ChartItemSetting'
  12 +import { option } from './config'
  13 +
  14 +defineProps({
  15 + optionData: {
  16 + type: Object as PropType<typeof option>,
  17 + required: true
  18 + }
  19 +})
  20 +</script>
  1 +import { ConfigType, PackagesCategoryEnum, ChartFrameEnum } from '@/packages/index.d'
  2 +import { ChatCategoryEnum, ChatCategoryEnumName } from '../../index.d'
  3 +
  4 +export const InputsSelectConfig: ConfigType = {
  5 + key: 'InputsSelect',
  6 + chartKey: 'VInputsSelect',
  7 + conKey: 'VCInputsSelect',
  8 + title: '下拉选择器',
  9 + category: ChatCategoryEnum.INPUTS,
  10 + categoryName: ChatCategoryEnumName.INPUTS,
  11 + package: PackagesCategoryEnum.INFORMATIONS,
  12 + chartFrame: ChartFrameEnum.STATIC,
  13 + image: 'inputs_select.png'
  14 +}
  1 +<template>
  2 + <n-select
  3 + v-model:value="option.value.selectValue"
  4 + :options="option.value.dataset"
  5 + :style="`width:${w}px;`"
  6 + @update:value="onChange"
  7 + />
  8 +</template>
  9 +
  10 +<script setup lang="ts">
  11 +import { PropType, toRefs, ref, shallowReactive, watch } from 'vue'
  12 +import { CreateComponentType } from '@/packages/index.d'
  13 +import { useChartEditStore } from '@/store/modules/chartEditStore/chartEditStore'
  14 +import { useChartInteract } from '@/hooks'
  15 +import { InteractEventOn } from '@/enums/eventEnum'
  16 +import { ComponentInteractParamsEnum } from './interact'
  17 +
  18 +const props = defineProps({
  19 + chartConfig: {
  20 + type: Object as PropType<CreateComponentType>,
  21 + required: true
  22 + }
  23 +})
  24 +
  25 +const { w, h } = toRefs(props.chartConfig.attr)
  26 +const option = shallowReactive({
  27 + value: {
  28 + selectValue: props.chartConfig.option.selectValue,
  29 + dataset: props.chartConfig.option.dataset
  30 + }
  31 +})
  32 +
  33 +// 监听事件改变
  34 +const onChange = (v: string) => {
  35 + // 存储到联动数据
  36 + useChartInteract(
  37 + props.chartConfig,
  38 + useChartEditStore,
  39 + { [ComponentInteractParamsEnum.DATA]: v },
  40 + InteractEventOn.CHANGE
  41 + )
  42 +}
  43 +
  44 +// 手动更新
  45 +watch(
  46 + () => props.chartConfig.option,
  47 + (newData: any) => {
  48 + option.value = newData
  49 + onChange(newData.selectValue)
  50 + },
  51 + {
  52 + immediate: true,
  53 + deep: true
  54 + }
  55 +)
  56 +</script>
  57 +
  58 +<style lang="scss" scoped>
  59 +@include deep() {
  60 + .n-base-selection-label {
  61 + height: v-bind('h + "px"');
  62 + display: flex;
  63 + align-items: center;
  64 + }
  65 +}
  66 +</style>
  1 +import { InteractEventOn, InteractActionsType } from '@/enums/eventEnum'
  2 +
  3 +// 时间组件类型
  4 +export enum ComponentInteractEventEnum {
  5 + DATA = 'data'
  6 +}
  7 +
  8 +// 联动参数
  9 +export enum ComponentInteractParamsEnum {
  10 + DATA = 'data'
  11 +}
  12 +
  13 +// 定义组件触发回调事件
  14 +export const interactActions: InteractActionsType[] = [
  15 + {
  16 + interactType: InteractEventOn.CHANGE,
  17 + interactName: '选择完成',
  18 + componentEmitEvents: {
  19 + [ComponentInteractEventEnum.DATA]: [
  20 + {
  21 + value: ComponentInteractParamsEnum.DATA,
  22 + label: '选择项'
  23 + }
  24 + ]
  25 + }
  26 + }
  27 +]
  1 +import cloneDeep from 'lodash/cloneDeep'
  2 +import { PublicConfigClass } from '@/packages/public'
  3 +import { CreateComponentType } from '@/packages/index.d'
  4 +import { chartInitConfig } from '@/settings/designSetting'
  5 +import { COMPONENT_INTERACT_EVENT_KET } from '@/enums/eventEnum'
  6 +import { interactActions, ComponentInteractEventEnum } from './interact'
  7 +import { InputsTabConfig } from './index'
  8 +
  9 +export const option = {
  10 + // 时间组件展示类型,必须和 interactActions 中定义的数据一致
  11 + [COMPONENT_INTERACT_EVENT_KET]: ComponentInteractEventEnum.DATA,
  12 + // 默认值
  13 + tabLabel: '选项1',
  14 + // 样式
  15 + tabType: 'segment',
  16 + // 暴露配置内容给用户
  17 + dataset: [
  18 + {
  19 + label: '选项1',
  20 + value: '1'
  21 + },
  22 + {
  23 + label: '选项2',
  24 + value: '2'
  25 + },
  26 + {
  27 + label: '选项3',
  28 + value: '3'
  29 + }
  30 + ]
  31 +}
  32 +
  33 +export default class Config extends PublicConfigClass implements CreateComponentType {
  34 + public key = InputsTabConfig.key
  35 + public attr = { ...chartInitConfig, w: 460, h: 32, zIndex: -1 }
  36 + public chartConfig = cloneDeep(InputsTabConfig)
  37 + public interactActions = interactActions
  38 + public option = cloneDeep(option)
  39 +}
  1 +<template>
  2 + <collapse-item name="标签页配置" :expanded="true">
  3 + <setting-item-box name="默认值" :alone="true">
  4 + <n-select size="small" v-model:value="optionData.tabType" :options="tabTypeOptions" />
  5 + </setting-item-box>
  6 + </collapse-item>
  7 +</template>
  8 +
  9 +<script lang="ts" setup>
  10 +import { PropType } from 'vue'
  11 +import { CollapseItem, SettingItemBox } from '@/components/Pages/ChartItemSetting'
  12 +import { option } from './config'
  13 +
  14 +defineProps({
  15 + optionData: {
  16 + type: Object as PropType<typeof option>,
  17 + required: true
  18 + }
  19 +})
  20 +
  21 +const tabTypeOptions = [
  22 + {
  23 + label: '线条',
  24 + value: 'bar'
  25 + },
  26 + {
  27 + label: '分段',
  28 + value: 'segment'
  29 + }
  30 +]
  31 +</script>
  1 +import { ConfigType, PackagesCategoryEnum, ChartFrameEnum } from '@/packages/index.d'
  2 +import { ChatCategoryEnum, ChatCategoryEnumName } from '../../index.d'
  3 +
  4 +export const InputsTabConfig: ConfigType = {
  5 + key: 'InputsTab',
  6 + chartKey: 'VInputsTab',
  7 + conKey: 'VCInputsTab',
  8 + title: '标签选择器',
  9 + category: ChatCategoryEnum.INPUTS,
  10 + categoryName: ChatCategoryEnumName.INPUTS,
  11 + package: PackagesCategoryEnum.INFORMATIONS,
  12 + chartFrame: ChartFrameEnum.STATIC,
  13 + image: 'inputs_tab.png'
  14 +}
  1 +<template>
  2 + <n-tabs :type="option.value.tabType" @update:value="onChange">
  3 + <n-tab v-for="(item, index) in option.value.dataset" :name="item.label" :key="index"> {{ item.label }} </n-tab>
  4 + </n-tabs>
  5 +</template>
  6 +
  7 +<script setup lang="ts">
  8 +import { PropType, toRefs, shallowReactive, watch } from 'vue'
  9 +import cloneDeep from 'lodash/cloneDeep'
  10 +import { CreateComponentType } from '@/packages/index.d'
  11 +import { useChartEditStore } from '@/store/modules/chartEditStore/chartEditStore'
  12 +import { useChartInteract } from '@/hooks'
  13 +import { InteractEventOn } from '@/enums/eventEnum'
  14 +import { ComponentInteractParamsEnum } from './interact'
  15 +
  16 +const props = defineProps({
  17 + chartConfig: {
  18 + type: Object as PropType<CreateComponentType>,
  19 + required: true
  20 + }
  21 +})
  22 +
  23 +const { w, h } = toRefs(props.chartConfig.attr)
  24 +const option = shallowReactive({
  25 + value: cloneDeep(props.chartConfig.option)
  26 +})
  27 +
  28 +// 监听事件改变
  29 +const onChange = (v: string) => {
  30 + if (v === undefined) return
  31 + const selectItem = option.value.dataset.find((item: { label: string; value: any }) => item.label === v)
  32 + // 存储到联动数据
  33 + useChartInteract(
  34 + props.chartConfig,
  35 + useChartEditStore,
  36 + { [ComponentInteractParamsEnum.DATA]: selectItem.value },
  37 + InteractEventOn.CHANGE
  38 + )
  39 +}
  40 +
  41 +// 手动更新
  42 +watch(
  43 + () => props.chartConfig.option,
  44 + (newData: any) => {
  45 + option.value = newData
  46 + onChange(newData.tabValue)
  47 + },
  48 + {
  49 + immediate: true,
  50 + deep: true
  51 + }
  52 +)
  53 +</script>
  1 +import { InteractEventOn, InteractActionsType } from '@/enums/eventEnum'
  2 +
  3 +// 时间组件类型
  4 +export enum ComponentInteractEventEnum {
  5 + DATA = 'data'
  6 +}
  7 +
  8 +// 联动参数
  9 +export enum ComponentInteractParamsEnum {
  10 + DATA = 'data'
  11 +}
  12 +
  13 +// 定义组件触发回调事件
  14 +export const interactActions: InteractActionsType[] = [
  15 + {
  16 + interactType: InteractEventOn.CHANGE,
  17 + interactName: '选择完成',
  18 + componentEmitEvents: {
  19 + [ComponentInteractEventEnum.DATA]: [
  20 + {
  21 + value: ComponentInteractParamsEnum.DATA,
  22 + label: '选择项'
  23 + }
  24 + ]
  25 + }
  26 + }
  27 +]
  1 +import { InputsDateConfig } from './InputsDate/index'
  2 +import { InputsSelectConfig } from './InputsSelect/index'
  3 +import { InputsTabConfig } from './InputsTab/index'
  4 +
  5 +export default [InputsDateConfig, InputsSelectConfig, InputsTabConfig]
1 <template> 1 <template>
  2 + <global-setting :optionData="optionData"></global-setting>
2 <collapse-item name="词云" expanded> 3 <collapse-item name="词云" expanded>
3 <setting-item-box name="形状"> 4 <setting-item-box name="形状">
4 <setting-item> 5 <setting-item>
@@ -45,7 +46,7 @@ @@ -45,7 +46,7 @@
45 import { PropType, computed } from 'vue' 46 import { PropType, computed } from 'vue'
46 import { option, ShapeEnumList } from './config' 47 import { option, ShapeEnumList } from './config'
47 // eslint-disable-next-line no-unused-vars 48 // eslint-disable-next-line no-unused-vars
48 -import { CollapseItem, SettingItemBox, SettingItem } from '@/components/Pages/ChartItemSetting' 49 +import { GlobalSetting, CollapseItem, SettingItemBox, SettingItem } from '@/components/Pages/ChartItemSetting'
49 50
50 const props = defineProps({ 51 const props = defineProps({
51 optionData: { 52 optionData: {
1 <template> 1 <template>
2 <v-chart 2 <v-chart
3 ref="vChartRef" 3 ref="vChartRef"
  4 + :init-options="initOptions"
4 :theme="themeColor" 5 :theme="themeColor"
5 :option="option" 6 :option="option"
6 :manual-update="isPreview()" 7 :manual-update="isPreview()"
@@ -12,6 +13,7 @@ @@ -12,6 +13,7 @@
12 <script setup lang="ts"> 13 <script setup lang="ts">
13 import { ref, computed, watch, PropType } from 'vue' 14 import { ref, computed, watch, PropType } from 'vue'
14 import VChart from 'vue-echarts' 15 import VChart from 'vue-echarts'
  16 +import { useCanvasInitOptions } from '@/hooks/useCanvasInitOptions.hook'
15 import 'echarts-wordcloud' 17 import 'echarts-wordcloud'
16 import { use } from 'echarts/core' 18 import { use } from 'echarts/core'
17 import { CanvasRenderer } from 'echarts/renderers' 19 import { CanvasRenderer } from 'echarts/renderers'
@@ -38,6 +40,8 @@ const props = defineProps({ @@ -38,6 +40,8 @@ const props = defineProps({
38 } 40 }
39 }) 41 })
40 42
  43 +const initOptions = useCanvasInitOptions(props.chartConfig.option, props.themeSetting)
  44 +
41 use([CanvasRenderer, GridComponent, TooltipComponent]) 45 use([CanvasRenderer, GridComponent, TooltipComponent])
42 46
43 const replaceMergeArr = ref<string[]>() 47 const replaceMergeArr = ref<string[]>()
1 -import { ConfigType, PackagesCategoryEnum } from '@/packages/index.d' 1 +import { ConfigType, PackagesCategoryEnum, ChartFrameEnum } from '@/packages/index.d'
2 import { ChatCategoryEnum,ChatCategoryEnumName } from '../../index.d' 2 import { ChatCategoryEnum,ChatCategoryEnumName } from '../../index.d'
3 3
4 export const TextBarrageConfig: ConfigType = { 4 export const TextBarrageConfig: ConfigType = {
@@ -9,5 +9,6 @@ export const TextBarrageConfig: ConfigType = { @@ -9,5 +9,6 @@ export const TextBarrageConfig: ConfigType = {
9 category: ChatCategoryEnum.TEXT, 9 category: ChatCategoryEnum.TEXT,
10 categoryName: ChatCategoryEnumName.TEXT, 10 categoryName: ChatCategoryEnumName.TEXT,
11 package: PackagesCategoryEnum.INFORMATIONS, 11 package: PackagesCategoryEnum.INFORMATIONS,
  12 + chartFrame: ChartFrameEnum.COMMON,
12 image: 'text_barrage.png' 13 image: 'text_barrage.png'
13 } 14 }
1 -import { ConfigType, PackagesCategoryEnum } from '@/packages/index.d' 1 +import { ConfigType, PackagesCategoryEnum, ChartFrameEnum } from '@/packages/index.d'
2 import { ChatCategoryEnum,ChatCategoryEnumName } from '../../index.d' 2 import { ChatCategoryEnum,ChatCategoryEnumName } from '../../index.d'
3 3
4 export const TextCommonConfig: ConfigType = { 4 export const TextCommonConfig: ConfigType = {
@@ -9,5 +9,6 @@ export const TextCommonConfig: ConfigType = { @@ -9,5 +9,6 @@ export const TextCommonConfig: ConfigType = {
9 category: ChatCategoryEnum.TEXT, 9 category: ChatCategoryEnum.TEXT,
10 categoryName: ChatCategoryEnumName.TEXT, 10 categoryName: ChatCategoryEnumName.TEXT,
11 package: PackagesCategoryEnum.INFORMATIONS, 11 package: PackagesCategoryEnum.INFORMATIONS,
  12 + chartFrame: ChartFrameEnum.COMMON,
12 image: 'text_static.png' 13 image: 'text_static.png'
13 } 14 }
1 export enum ChatCategoryEnum { 1 export enum ChatCategoryEnum {
2 TEXT = 'Texts', 2 TEXT = 'Texts',
3 TITLE = 'Titles', 3 TITLE = 'Titles',
  4 + INPUTS = 'Inputs',
4 MORE = 'Mores' 5 MORE = 'Mores'
5 } 6 }
6 7
7 export enum ChatCategoryEnumName { 8 export enum ChatCategoryEnumName {
8 TEXT = '文本', 9 TEXT = '文本',
9 TITLE = '标题', 10 TITLE = '标题',
  11 + // 控件 => 数据录入
  12 + INPUTS = '控件',
10 MORE = '更多' 13 MORE = '更多'
11 } 14 }
1 import Texts from './Texts' 1 import Texts from './Texts'
  2 +import Inputs from './Inputs'
2 import Mores from './Mores' 3 import Mores from './Mores'
3 4
4 -export const InformationList = [...Texts, ...Mores] 5 +export const InformationList = [...Texts, ...Inputs, ...Mores]
@@ -6,7 +6,7 @@ import { ClockConfig } from '@/packages/components/external/Decorates/Mores/Icon @@ -6,7 +6,7 @@ import { ClockConfig } from '@/packages/components/external/Decorates/Mores/Icon
6 export function useInjectLib(packagesList: EPackagesType) { 6 export function useInjectLib(packagesList: EPackagesType) {
7 packagesList[EPackagesCategoryEnum.COMPOSES] = ComposesList 7 packagesList[EPackagesCategoryEnum.COMPOSES] = ComposesList
8 8
9 - addWidgetToCategoryByCategoryName(packagesList, PackagesCategoryEnum.DECORATES, ClockConfig) 9 + // addWidgetToCategoryByCategoryName(packagesList, PackagesCategoryEnum.DECORATES, ClockConfig)
10 } 10 }
11 11
12 /** 12 /**
1 -import { BaseEvent, EventLife } from '@/enums/eventEnum' 1 +import { BaseEvent, EventLife, InteractEvents, InteractEventOn, InteractActionsType } from '@/enums/eventEnum'
2 import type { GlobalThemeJsonType } from '@/settings/chartThemes/index' 2 import type { GlobalThemeJsonType } from '@/settings/chartThemes/index'
3 import type { RequestConfigType } from '@/store/modules/chartEditStore/chartEditStore.d' 3 import type { RequestConfigType } from '@/store/modules/chartEditStore/chartEditStore.d'
4 4
@@ -120,13 +120,19 @@ export interface PublicConfigType { @@ -120,13 +120,19 @@ export interface PublicConfigType {
120 } 120 }
121 filter?: string 121 filter?: string
122 status: StatusType 122 status: StatusType
  123 + interactActions?: InteractActionsType[],
123 events: { 124 events: {
124 baseEvent: { 125 baseEvent: {
125 [K in BaseEvent]?: string 126 [K in BaseEvent]?: string
126 - }, 127 + }
127 advancedEvents: { 128 advancedEvents: {
128 [K in EventLife]?: string 129 [K in EventLife]?: string
129 } 130 }
  131 + interactEvents: {
  132 + [InteractEvents.INTERACT_ON]: InteractEventOn | undefined
  133 + [InteractEvents.INTERACT_COMPONENT_ID]: string | undefined
  134 + [InteractEvents.INTERACT_FN]: { [name: string]: string }
  135 + }[]
130 } 136 }
131 } 137 }
132 138
@@ -14,7 +14,7 @@ export const packagesList: PackagesType = { @@ -14,7 +14,7 @@ export const packagesList: PackagesType = {
14 [PackagesCategoryEnum.CHARTS]: ChartList, 14 [PackagesCategoryEnum.CHARTS]: ChartList,
15 [PackagesCategoryEnum.INFORMATIONS]: InformationList, 15 [PackagesCategoryEnum.INFORMATIONS]: InformationList,
16 [PackagesCategoryEnum.TABLES]: TableList, 16 [PackagesCategoryEnum.TABLES]: TableList,
17 - [PackagesCategoryEnum.DECORATES]: DecorateList, 17 + [PackagesCategoryEnum.DECORATES]: DecorateList
18 } 18 }
19 19
20 /** 20 /**
@@ -102,7 +102,8 @@ export class PublicConfigClass implements PublicConfigType { @@ -102,7 +102,8 @@ export class PublicConfigClass implements PublicConfigType {
102 advancedEvents: { 102 advancedEvents: {
103 [EventLife.VNODE_MOUNTED]: undefined, 103 [EventLife.VNODE_MOUNTED]: undefined,
104 [EventLife.VNODE_BEFORE_MOUNT]: undefined 104 [EventLife.VNODE_BEFORE_MOUNT]: undefined
105 - } 105 + },
  106 + interactEvents: []
106 } 107 }
107 } 108 }
108 109
@@ -67,8 +67,7 @@ import { @@ -67,8 +67,7 @@ import {
67 EyeOutline as EyeOutlineIcon, 67 EyeOutline as EyeOutlineIcon,
68 EyeOffOutline as EyeOffOutlineIcon, 68 EyeOffOutline as EyeOffOutlineIcon,
69 Albums as AlbumsIcon, 69 Albums as AlbumsIcon,
70 - Analytics as AnalyticsIcon,  
71 - SaveOutline as SaveIcon 70 + Analytics as AnalyticsIcon
72 } from '@vicons/ionicons5' 71 } from '@vicons/ionicons5'
73 72
74 import { 73 import {
@@ -295,10 +294,7 @@ const carbon = { @@ -295,10 +294,7 @@ const carbon = {
295 FilterIcon, 294 FilterIcon,
296 FilterEditIcon, 295 FilterEditIcon,
297 // 图层 296 // 图层
298 - LaptopIcon,  
299 - // 保存  
300 - // THINGS_KIT  
301 - SaveIcon 297 + LaptopIcon
302 } 298 }
303 299
304 // https://www.xicons.org/#/ 还有很多 300 // https://www.xicons.org/#/ 还有很多
@@ -5,6 +5,13 @@ import { loginCheck } from '@/utils' @@ -5,6 +5,13 @@ import { loginCheck } from '@/utils'
5 export function createRouterGuards(router: Router) { 5 export function createRouterGuards(router: Router) {
6 // 前置 6 // 前置
7 router.beforeEach(async (to, from, next) => { 7 router.beforeEach(async (to, from, next) => {
  8 + // http://localhost:3000/#/chart/preview/792622755697790976?t=123
  9 + // 把外部动态参数放入window.route.params,后续API动态接口可以用window.route?.params?.t来拼接参数
  10 + // @ts-ignore
  11 + if (!window.route) window.route = {params: {}}
  12 + // @ts-ignore
  13 + Object.assign(window.route.params, to.query)
  14 +
8 const Loading = window['$loading']; 15 const Loading = window['$loading'];
9 Loading && Loading.start(); 16 Loading && Loading.start();
10 const isErrorPage = router.getRoutes().findIndex((item) => item.name === to.name); 17 const isErrorPage = router.getRoutes().findIndex((item) => item.name === to.name);
@@ -64,10 +64,13 @@ export const chartColorsSearch = { @@ -64,10 +64,13 @@ export const chartColorsSearch = {
64 roma: ['#e01f54', '#5e4ea5', 'rgba(137, 52, 72, 0.3)', 'rgba(224, 31, 84, 0.5)', 'rgba(94, 78, 165, 0.5)'], 64 roma: ['#e01f54', '#5e4ea5', 'rgba(137, 52, 72, 0.3)', 'rgba(224, 31, 84, 0.5)', 'rgba(94, 78, 165, 0.5)'],
65 } 65 }
66 66
  67 +export type EchartsRenderer = 'svg' | 'canvas';
  68 +
67 // 默认主题详细配置 69 // 默认主题详细配置
68 type ThemeJsonType = typeof themeJson 70 type ThemeJsonType = typeof themeJson
69 export interface GlobalThemeJsonType extends Partial<ThemeJsonType> { 71 export interface GlobalThemeJsonType extends Partial<ThemeJsonType> {
70 dataset?: any, 72 dataset?: any,
  73 + renderer?: EchartsRenderer,
71 [T:string]: any 74 [T:string]: any
72 } 75 }
73 -export const globalThemeJson = {...themeJson, dataset: null,} 76 +export const globalThemeJson = {...themeJson, dataset: null, renderer: 'svg' as const }
@@ -6,7 +6,7 @@ import designColor from './designColor.json' @@ -6,7 +6,7 @@ import designColor from './designColor.json'
6 export const lang = LangEnum.ZH 6 export const lang = LangEnum.ZH
7 7
8 // 水印文字 8 // 水印文字
9 -export const watermarkText = 'GoView 低代码平台' 9 +export const watermarkText = "GoView 低代码平台"
10 10
11 // 分组名称 11 // 分组名称
12 export const groupTitle = '分组' 12 export const groupTitle = '分组'
@@ -17,7 +17,7 @@ export const theme = { @@ -17,7 +17,7 @@ export const theme = {
17 darkTheme: false, 17 darkTheme: false,
18 //默认主题色 18 //默认主题色
19 appTheme: '#51d6a9', 19 appTheme: '#51d6a9',
20 - appThemeDetail: null 20 + appThemeDetail: null,
21 } 21 }
22 22
23 // 图表初始配置(px) 23 // 图表初始配置(px)
@@ -28,7 +28,7 @@ export const chartInitConfig = { @@ -28,7 +28,7 @@ export const chartInitConfig = {
28 h: 300, 28 h: 300,
29 // 不建议动 offset 29 // 不建议动 offset
30 offsetX: 0, 30 offsetX: 0,
31 - offsetY: 0 31 + offsetY: 0,
32 } 32 }
33 33
34 // dialog 图标的大小 34 // dialog 图标的大小
@@ -44,7 +44,7 @@ export const asideCollapsedWidth = 60 @@ -44,7 +44,7 @@ export const asideCollapsedWidth = 60
44 export const maskClosable = false 44 export const maskClosable = false
45 45
46 // 全局边框圆角 46 // 全局边框圆角
47 -export const borderRadius = '6px' 47 +export const borderRadius = '4px'
48 48
49 // 轮播间隔 49 // 轮播间隔
50 export const carouselInterval = 4000 50 export const carouselInterval = 4000
@@ -159,7 +159,8 @@ export const fetchRouteParams = () => { @@ -159,7 +159,8 @@ export const fetchRouteParams = () => {
159 */ 159 */
160 export const fetchRouteParamsLocation = () => { 160 export const fetchRouteParamsLocation = () => {
161 try { 161 try {
162 - return document.location.hash.split('/').pop() || '' 162 + // 防止添加query参数的时候,解析ID异常
  163 + return document.location.hash.split('?')[0].split('/').pop() || ''
163 } catch (error) { 164 } catch (error) {
164 window['$message'].warning('查询路由信息失败,请联系管理员!') 165 window['$message'].warning('查询路由信息失败,请联系管理员!')
165 return '' 166 return ''
@@ -10,7 +10,7 @@ @@ -10,7 +10,7 @@
10 <slot name="icon"></slot> 10 <slot name="icon"></slot>
11 </div> 11 </div>
12 </n-space> 12 </n-space>
13 - <n-space align="center" style="gap: 4px"> 13 + <n-space class="go-flex-no-wrap" align="center" style="gap: 4px">
14 <slot name="top-right"></slot> 14 <slot name="top-right"></slot>
15 <n-icon v-show="backIcon" size="20" class="go-cursor-pointer go-d-block" @click="backHandle"> 15 <n-icon v-show="backIcon" size="20" class="go-cursor-pointer go-d-block" @click="backHandle">
16 <chevron-back-outline-icon></chevron-back-outline-icon> 16 <chevron-back-outline-icon></chevron-back-outline-icon>
@@ -13,7 +13,7 @@ @@ -13,7 +13,7 @@
13 draggable 13 draggable
14 @dragstart="dragStartHandle($event, item)" 14 @dragstart="dragStartHandle($event, item)"
15 @dragend="dragendHandle" 15 @dragend="dragendHandle"
16 - @dblclick="dblclickHandle(item)" 16 + @dblclick="dblclickHandle(item)"
17 > 17 >
18 <div class="list-header"> 18 <div class="list-header">
19 <mac-os-control-btn class="list-header-control-btn" :mini="true" :disabled="true"></mac-os-control-btn> 19 <mac-os-control-btn class="list-header-control-btn" :mini="true" :disabled="true"></mac-os-control-btn>
@@ -3,21 +3,34 @@ @@ -3,21 +3,34 @@
3 <n-form inline :label-width="45" size="small" label-placement="left"> 3 <n-form inline :label-width="45" size="small" label-placement="left">
4 <n-form-item label="宽度"> 4 <n-form-item label="宽度">
5 <!-- 尺寸选择 --> 5 <!-- 尺寸选择 -->
6 - <n-input-number size="small" v-model:value="canvasConfig.width" :disabled="editCanvas.lockScale"  
7 - :validator="validator" @update:value="changeSizeHandle"></n-input-number> 6 + <n-input-number
  7 + size="small"
  8 + v-model:value="canvasConfig.width"
  9 + :disabled="editCanvas.lockScale"
  10 + :validator="validator"
  11 + @update:value="changeSizeHandle"
  12 + ></n-input-number>
8 </n-form-item> 13 </n-form-item>
9 <n-form-item label="高度"> 14 <n-form-item label="高度">
10 - <n-input-number size="small" v-model:value="canvasConfig.height" :disabled="editCanvas.lockScale"  
11 - :validator="validator" @update:value="changeSizeHandle"></n-input-number> 15 + <n-input-number
  16 + size="small"
  17 + v-model:value="canvasConfig.height"
  18 + :disabled="editCanvas.lockScale"
  19 + :validator="validator"
  20 + @update:value="changeSizeHandle"
  21 + ></n-input-number>
12 </n-form-item> 22 </n-form-item>
13 </n-form> 23 </n-form>
14 24
15 - <n-card class="upload-box">  
16 - <n-upload v-model:file-list="uploadFileListRef" :show-file-list="false" :customRequest="customRequest"  
17 - :onBeforeUpload="beforeUploadHandle"> 25 + <div class="upload-box">
  26 + <n-upload
  27 + v-model:file-list="uploadFileListRef"
  28 + :show-file-list="false"
  29 + :customRequest="customRequest"
  30 + :onBeforeUpload="beforeUploadHandle"
  31 + >
18 <n-upload-dragger> 32 <n-upload-dragger>
19 - <!-- THINGS_KIT 路径转换,同步生产环境与开发环境的保存的静态资源文件路径不一致 -->  
20 - <img v-if="canvasConfig.backgroundImage" class="upload-show" :src="getPath(canvasConfig.backgroundImage)" alt="背景" /> 33 + <img v-if="canvasConfig.backgroundImage" class="upload-show" :src="canvasConfig.backgroundImage" alt="背景" />
21 <div class="upload-img" v-show="!canvasConfig.backgroundImage"> 34 <div class="upload-img" v-show="!canvasConfig.backgroundImage">
22 <img src="@/assets/images/canvas/noImage.png" /> 35 <img src="@/assets/images/canvas/noImage.png" />
23 <n-text class="upload-desc" depth="3"> 36 <n-text class="upload-desc" depth="3">
@@ -26,22 +39,33 @@ @@ -26,22 +39,33 @@
26 </div> 39 </div>
27 </n-upload-dragger> 40 </n-upload-dragger>
28 </n-upload> 41 </n-upload>
29 - </n-card> 42 + </div>
30 <n-space vertical :size="12"> 43 <n-space vertical :size="12">
31 <n-space> 44 <n-space>
32 <!-- THINGS_KIT 新增预置背景选择 --> 45 <!-- THINGS_KIT 新增预置背景选择 -->
33 <SelectBackgroundImage /> 46 <SelectBackgroundImage />
34 <n-text>背景颜色</n-text> 47 <n-text>背景颜色</n-text>
35 <div class="picker-height"> 48 <div class="picker-height">
36 - <n-color-picker v-if="!switchSelectColorLoading" size="small" style="width: 250px"  
37 - v-model:value="canvasConfig.background" :showPreview="true" :swatches="swatchesColors"></n-color-picker> 49 + <n-color-picker
  50 + v-if="!switchSelectColorLoading"
  51 + size="small"
  52 + style="width: 250px"
  53 + v-model:value="canvasConfig.background"
  54 + :showPreview="true"
  55 + :swatches="swatchesColors"
  56 + ></n-color-picker>
38 </div> 57 </div>
39 </n-space> 58 </n-space>
40 <n-space> 59 <n-space>
41 <n-text>应用类型</n-text> 60 <n-text>应用类型</n-text>
42 - <n-select size="small" style="width: 250px" v-model:value="selectColorValue"  
43 - :disabled="!canvasConfig.backgroundImage" :options="selectColorOptions"  
44 - @update:value="selectColorValueHandle" /> 61 + <n-select
  62 + size="small"
  63 + style="width: 250px"
  64 + v-model:value="selectColorValue"
  65 + :disabled="!canvasConfig.backgroundImage"
  66 + :options="selectColorOptions"
  67 + @update:value="selectColorValueHandle"
  68 + />
45 </n-space> 69 </n-space>
46 <n-space> 70 <n-space>
47 <n-text>背景控制</n-text> 71 <n-text>背景控制</n-text>
@@ -55,9 +79,14 @@ @@ -55,9 +79,14 @@
55 <n-space> 79 <n-space>
56 <n-text>适配方式</n-text> 80 <n-text>适配方式</n-text>
57 <n-button-group> 81 <n-button-group>
58 - <n-button v-for="item in previewTypeList" :key="item.key"  
59 - :type="canvasConfig.previewScaleType === item.key ? 'primary' : 'tertiary'" ghost size="small"  
60 - @click="selectPreviewType(item.key)"> 82 + <n-button
  83 + v-for="item in previewTypeList"
  84 + :key="item.key"
  85 + :type="canvasConfig.previewScaleType === item.key ? 'primary' : 'tertiary'"
  86 + ghost
  87 + size="small"
  88 + @click="selectPreviewType(item.key)"
  89 + >
61 <n-tooltip :show-arrow="false" trigger="hover"> 90 <n-tooltip :show-arrow="false" trigger="hover">
62 <template #trigger> 91 <template #trigger>
63 <n-icon class="select-preview-icon" size="18"> 92 <n-icon class="select-preview-icon" size="18">
@@ -77,8 +106,13 @@ @@ -77,8 +106,13 @@
77 106
78 <!-- 主题选择和全局配置 --> 107 <!-- 主题选择和全局配置 -->
79 <n-tabs class="tabs-box" size="small" type="segment"> 108 <n-tabs class="tabs-box" size="small" type="segment">
80 - <n-tab-pane v-for="item in globalTabList" :key="item.key" :name="item.key" size="small"  
81 - display-directive="show:lazy"> 109 + <n-tab-pane
  110 + v-for="item in globalTabList"
  111 + :key="item.key"
  112 + :name="item.key"
  113 + size="small"
  114 + display-directive="show:lazy"
  115 + >
82 <template #tab> 116 <template #tab>
83 <n-space> 117 <n-space>
84 <span>{{ item.title }}</span> 118 <span>{{ item.title }}</span>
@@ -96,7 +130,7 @@ @@ -96,7 +130,7 @@
96 <script setup lang="ts"> 130 <script setup lang="ts">
97 import { ref, nextTick, watch } from 'vue' 131 import { ref, nextTick, watch } from 'vue'
98 import { backgroundImageSize } from '@/settings/designSetting' 132 import { backgroundImageSize } from '@/settings/designSetting'
99 -import { swatchesColors } from '@/settings/chartThemes' 133 +import { swatchesColors } from '@/settings/chartThemes/index'
100 import { FileTypeEnum } from '@/enums/fileTypeEnum' 134 import { FileTypeEnum } from '@/enums/fileTypeEnum'
101 import { useChartEditStore } from '@/store/modules/chartEditStore/chartEditStore' 135 import { useChartEditStore } from '@/store/modules/chartEditStore/chartEditStore'
102 import { EditCanvasConfigEnum } from '@/store/modules/chartEditStore/chartEditStore.d' 136 import { EditCanvasConfigEnum } from '@/store/modules/chartEditStore/chartEditStore.d'
@@ -259,14 +293,11 @@ const selectPreviewType = (key: PreviewScaleEnum) => { @@ -259,14 +293,11 @@ const selectPreviewType = (key: PreviewScaleEnum) => {
259 <style lang="scss" scoped> 293 <style lang="scss" scoped>
260 $uploadWidth: 326px; 294 $uploadWidth: 326px;
261 $uploadHeight: 193px; 295 $uploadHeight: 193px;
262 -  
263 @include go(canvas-setting) { 296 @include go(canvas-setting) {
264 padding-top: 20px; 297 padding-top: 20px;
265 -  
266 .upload-box { 298 .upload-box {
267 cursor: pointer; 299 cursor: pointer;
268 margin-bottom: 20px; 300 margin-bottom: 20px;
269 -  
270 @include deep() { 301 @include deep() {
271 .n-card__content { 302 .n-card__content {
272 padding: 0; 303 padding: 0;
@@ -276,48 +307,40 @@ $uploadHeight: 193px; @@ -276,48 +307,40 @@ $uploadHeight: 193px;
276 .n-upload-dragger { 307 .n-upload-dragger {
277 padding: 5px; 308 padding: 5px;
278 width: $uploadWidth; 309 width: $uploadWidth;
  310 + background-color: rgba(0, 0, 0, 0);
279 } 311 }
280 } 312 }
281 -  
282 .upload-show { 313 .upload-show {
283 width: -webkit-fill-available; 314 width: -webkit-fill-available;
284 height: $uploadHeight; 315 height: $uploadHeight;
285 border-radius: 5px; 316 border-radius: 5px;
286 } 317 }
287 -  
288 .upload-img { 318 .upload-img {
289 display: flex; 319 display: flex;
290 flex-direction: column; 320 flex-direction: column;
291 align-items: center; 321 align-items: center;
292 -  
293 img { 322 img {
294 height: 150px; 323 height: 150px;
295 } 324 }
296 -  
297 .upload-desc { 325 .upload-desc {
298 padding: 10px 0; 326 padding: 10px 0;
299 } 327 }
300 } 328 }
301 } 329 }
302 -  
303 .icon-position { 330 .icon-position {
304 padding-top: 2px; 331 padding-top: 2px;
305 } 332 }
306 -  
307 .picker-height { 333 .picker-height {
308 min-height: 35px; 334 min-height: 35px;
309 } 335 }
310 -  
311 .clear-btn { 336 .clear-btn {
312 padding-left: 2.25em; 337 padding-left: 2.25em;
313 padding-right: 2.25em; 338 padding-right: 2.25em;
314 } 339 }
315 -  
316 .select-preview-icon { 340 .select-preview-icon {
317 - padding-right: .68em;  
318 - padding-left: .68em; 341 + padding-right: 0.68em;
  342 + padding-left: 0.68em;
319 } 343 }
320 -  
321 .tabs-box { 344 .tabs-box {
322 margin-top: 20px; 345 margin-top: 20px;
323 } 346 }
@@ -135,8 +135,9 @@ const sendHandle = async () => { @@ -135,8 +135,9 @@ const sendHandle = async () => {
135 showMatching.value = true 135 showMatching.value = true
136 return 136 return
137 } 137 }
138 - window['$message'].warning('数据异常,请检查参数!') 138 + window['$message'].warning('没有拿到返回值,请检查接口!')
139 } catch (error) { 139 } catch (error) {
  140 + console.error(error);
140 loading.value = false 141 loading.value = false
141 window['$message'].warning('数据异常,请检查参数!') 142 window['$message'].warning('数据异常,请检查参数!')
142 } 143 }
@@ -132,8 +132,9 @@ const fetchTargetData = async () => { @@ -132,8 +132,9 @@ const fetchTargetData = async () => {
132 sourceData.value = res 132 sourceData.value = res
133 return 133 return
134 } 134 }
135 - window['$message'].warning('数据异常,请检查参数!') 135 + window['$message'].warning('没有拿到返回值,请检查接口!')
136 } catch (error) { 136 } catch (error) {
  137 + console.error(error);
137 window['$message'].warning('数据异常,请检查参数!') 138 window['$message'].warning('数据异常,请检查参数!')
138 } 139 }
139 } 140 }
@@ -114,10 +114,6 @@ const sendHandle = async () => { @@ -114,10 +114,6 @@ const sendHandle = async () => {
114 } 114 }
115 loading.value = true 115 loading.value = true
116 try { 116 try {
117 - // const res = await customizeHttp(  
118 - // toRaw(pondData.value?.dataPondRequestConfig),  
119 - // toRaw(chartEditStore.getRequestGlobalConfig)  
120 - // )  
121 const res = await customizeHttp(toRaw(targetData.value.request), toRaw(chartEditStore.getRequestGlobalConfig)) 117 const res = await customizeHttp(toRaw(targetData.value.request), toRaw(chartEditStore.getRequestGlobalConfig))
122 loading.value = false 118 loading.value = false
123 if (res) { 119 if (res) {
@@ -126,8 +122,9 @@ const sendHandle = async () => { @@ -126,8 +122,9 @@ const sendHandle = async () => {
126 showMatching.value = true 122 showMatching.value = true
127 return 123 return
128 } 124 }
129 - window['$message'].warning('数据异常,请检查参数!') 125 + window['$message'].warning('没有拿到返回值,请检查接口!')
130 } catch (error) { 126 } catch (error) {
  127 + console.error(error);
131 loading.value = false 128 loading.value = false
132 window['$message'].warning('数据异常,请检查参数!') 129 window['$message'].warning('数据异常,请检查参数!')
133 } 130 }
@@ -16,9 +16,10 @@ @@ -16,9 +16,10 @@
16 import { computed } from 'vue' 16 import { computed } from 'vue'
17 import { loadAsyncComponent } from '@/utils' 17 import { loadAsyncComponent } from '@/utils'
18 import { SettingItemBox } from '@/components/Pages/ChartItemSetting' 18 import { SettingItemBox } from '@/components/Pages/ChartItemSetting'
  19 +import { RequestDataTypeEnum } from '@/enums/httpEnum'
  20 +import { ChartFrameEnum } from '@/packages/index.d'
19 import { useTargetData } from '../hooks/useTargetData.hook' 21 import { useTargetData } from '../hooks/useTargetData.hook'
20 import { SelectCreateDataType, SelectCreateDataEnum } from './index.d' 22 import { SelectCreateDataType, SelectCreateDataEnum } from './index.d'
21 -import { RequestDataTypeEnum } from '@/enums/httpEnum'  
22 23
23 const ChartDataStatic = loadAsyncComponent(() => import('./components/ChartDataStatic/index.vue')) 24 const ChartDataStatic = loadAsyncComponent(() => import('./components/ChartDataStatic/index.vue'))
24 const ChartDataAjax = loadAsyncComponent(() => import('./components/ChartDataAjax/index.vue')) 25 const ChartDataAjax = loadAsyncComponent(() => import('./components/ChartDataAjax/index.vue'))
@@ -44,6 +45,9 @@ const selectOptions: SelectCreateDataType[] = [ @@ -44,6 +45,9 @@ const selectOptions: SelectCreateDataType[] = [
44 45
45 // 无数据源 46 // 无数据源
46 const isNotData = computed(() => { 47 const isNotData = computed(() => {
47 - return typeof targetData.value?.option?.dataset === 'undefined' 48 + return (
  49 + targetData.value.chartConfig?.chartFrame === ChartFrameEnum.STATIC ||
  50 + typeof targetData.value?.option?.dataset === 'undefined'
  51 + )
48 }) 52 })
49 </script> 53 </script>
1 <template> 1 <template>
2 - <n-collapse-item title="高级事件配置" name="2"> 2 + <n-collapse-item title="高级事件配置" name="3">
3 <template #header-extra> 3 <template #header-extra>
4 <n-button type="primary" tertiary size="small" @click.stop="showModal = true"> 4 <n-button type="primary" tertiary size="small" @click.stop="showModal = true">
5 <template #icon> 5 <template #icon>
1 <template> 1 <template>
2 - <n-collapse-item title="基础事件配置" name="1"> 2 + <n-collapse-item title="基础事件配置" name="2">
3 <template #header-extra> 3 <template #header-extra>
4 <n-button type="primary" tertiary size="small" @click.stop="showModal = true"> 4 <n-button type="primary" tertiary size="small" @click.stop="showModal = true">
5 <template #icon> 5 <template #icon>
  1 +import ChartEventInteraction from './index.vue'
  2 +
  3 +export { ChartEventInteraction }
  1 +<template>
  2 + <n-collapse-item title="组件交互" name="1" v-if="interactActions.length">
  3 + <template #header-extra>
  4 + <n-button type="primary" tertiary size="small" @click.stop="evAddEventsFn">
  5 + <template #icon>
  6 + <n-icon>
  7 + <add-icon />
  8 + </n-icon>
  9 + </template>
  10 + 新增
  11 + </n-button>
  12 + </template>
  13 +
  14 + <!-- 无数据 -->
  15 + <div v-if="!targetData.events.interactEvents.length" class="no-data go-flex-center">
  16 + <img :src="noData" alt="暂无数据" />
  17 + <n-text :depth="3">暂无内容</n-text>
  18 + </div>
  19 +
  20 + <n-card
  21 + v-for="(item, cardIndex) in targetData.events.interactEvents"
  22 + :key="cardIndex"
  23 + class="n-card-shallow"
  24 + size="small"
  25 + >
  26 + <n-space justify="space-between">
  27 + <n-text>关联组件 - {{ cardIndex + 1 }}</n-text>
  28 + <n-button type="error" text size="small" @click="evDeleteEventsFn(cardIndex)">
  29 + <template #icon>
  30 + <n-icon>
  31 + <close-icon />
  32 + </n-icon>
  33 + </template>
  34 + </n-button>
  35 + </n-space>
  36 +
  37 + <n-divider style="margin: 10px 0" />
  38 +
  39 + <n-tag :bordered="false" type="primary"> 选择目标组件 </n-tag>
  40 +
  41 + <setting-item-box name="触发事件" :alone="true">
  42 + <n-input-group v-if="interactActions">
  43 + <n-select
  44 + class="select-type-options"
  45 + v-model:value="item.interactOn"
  46 + size="tiny"
  47 + :options="interactActions"
  48 + />
  49 + </n-input-group>
  50 + </setting-item-box>
  51 +
  52 + <setting-item-box :alone="true">
  53 + <template #name>
  54 + <n-text>绑定</n-text>
  55 + <n-tooltip trigger="hover">
  56 + <template #trigger>
  57 + <n-icon size="21" :depth="3">
  58 + <help-outline-icon></help-outline-icon>
  59 + </n-icon>
  60 + </template>
  61 + <n-text>不支持「静态组件」和「分组」</n-text>
  62 + </n-tooltip>
  63 + </template>
  64 + <n-select
  65 + class="select-type-options"
  66 + value-field="id"
  67 + label-field="title"
  68 + size="tiny"
  69 + filterable
  70 + placeholder="仅展示符合条件的组件"
  71 + v-model:value="item.interactComponentId"
  72 + :options="fnEventsOptions()"
  73 + />
  74 + </setting-item-box>
  75 +
  76 + <setting-item-box v-if="fnDimensionsAndSource(item.interactOn).length" name="查询结果" :alone="true">
  77 + <n-table size="small" striped>
  78 + <thead>
  79 + <tr>
  80 + <th v-for="item in ['参数', '说明']" :key="item">{{ item }}</th>
  81 + </tr>
  82 + </thead>
  83 + <tbody>
  84 + <tr v-for="(cItem, index) in fnDimensionsAndSource(item.interactOn)" :key="index">
  85 + <td>{{ cItem.value }}</td>
  86 + <td>{{ cItem.label }}</td>
  87 + </tr>
  88 + </tbody>
  89 + </n-table>
  90 + </setting-item-box>
  91 +
  92 + <n-tag :bordered="false" type="primary"> 关联目标组件请求参数 </n-tag>
  93 +
  94 + <setting-item-box
  95 + :name="requestParamsItem"
  96 + v-for="requestParamsItem in requestParamsTypeList"
  97 + :key="requestParamsItem"
  98 + >
  99 + <setting-item
  100 + v-for="(ovlValue, ovlKey, index) in fnGetRequest(item.interactComponentId, requestParamsItem)"
  101 + :key="index"
  102 + :name="`${ovlKey}`"
  103 + >
  104 + <n-select
  105 + size="tiny"
  106 + v-model:value="item.interactFn[ovlKey]"
  107 + :options="fnDimensionsAndSource(item.interactOn)"
  108 + clearable
  109 + ></n-select>
  110 + </setting-item>
  111 + <n-text
  112 + v-show="JSON.stringify(fnGetRequest(item.interactComponentId, requestParamsItem)) === '{}'"
  113 + class="go-pt-1"
  114 + depth="3"
  115 + >
  116 + 暂无数据
  117 + </n-text>
  118 + </setting-item-box>
  119 + </n-card>
  120 + </n-collapse-item>
  121 +</template>
  122 +
  123 +<script lang="ts" setup>
  124 +import { VNodeChild, computed } from 'vue'
  125 +import { SelectOption, SelectGroupOption } from 'naive-ui'
  126 +import { SettingItemBox, SettingItem, CollapseItem } from '@/components/Pages/ChartItemSetting'
  127 +import { CreateComponentType, CreateComponentGroupType, ChartFrameEnum } from '@/packages/index.d'
  128 +import { RequestParamsTypeEnum } from '@/enums/httpEnum'
  129 +import { InteractEventOn, COMPONENT_INTERACT_EVENT_KET } from '@/enums/eventEnum'
  130 +import { icon } from '@/plugins'
  131 +import noData from '@/assets/images/canvas/noData.png'
  132 +import { goDialog } from '@/utils'
  133 +import { useTargetData } from '../../../hooks/useTargetData.hook'
  134 +
  135 +const { CloseIcon, AddIcon, HelpOutlineIcon } = icon.ionicons5
  136 +const { targetData, chartEditStore } = useTargetData()
  137 +const requestParamsTypeList = [RequestParamsTypeEnum.PARAMS, RequestParamsTypeEnum.HEADER]
  138 +
  139 +// 获取组件交互事件列表
  140 +const interactActions = computed(() => {
  141 + const interactActions = targetData.value.interactActions
  142 + if (!interactActions) return []
  143 + return interactActions.map(value => ({
  144 + label: value.interactName,
  145 + value: value.interactType
  146 + }))
  147 +})
  148 +
  149 +// 获取组件事件
  150 +const option = computed(() => {
  151 + return targetData.value.option
  152 +})
  153 +
  154 +// 绑定组件数据 request
  155 +const fnGetRequest = (id: string | undefined, key: RequestParamsTypeEnum) => {
  156 + if (!id) return {}
  157 + return chartEditStore.componentList[chartEditStore.fetchTargetIndex(id)]?.request.requestParams[key]
  158 +}
  159 +
  160 +// 查询结果
  161 +const fnDimensionsAndSource = (interactOn: InteractEventOn | undefined) => {
  162 + if (!interactOn || !targetData.value.interactActions) return []
  163 + const tableData = targetData.value.interactActions.find(item => {
  164 + return item.interactType === interactOn
  165 + })
  166 +
  167 + return tableData?.componentEmitEvents[option.value[COMPONENT_INTERACT_EVENT_KET]] || []
  168 +}
  169 +
  170 +// 绑定组件列表
  171 +const fnEventsOptions = (): Array<SelectOption | SelectGroupOption> => {
  172 + const filterOptionList = chartEditStore.componentList.filter(item => {
  173 + // 排除自己
  174 + const isNotSelf = item.id !== targetData.value.id
  175 + // 排除静态组件
  176 + const isNotStatic = item.chartConfig.chartFrame !== ChartFrameEnum.STATIC
  177 + // 排除分组
  178 + const isNotGroup = !item.isGroup
  179 +
  180 + return isNotSelf && isNotStatic && isNotGroup
  181 + })
  182 +
  183 + const mapOptionList = filterOptionList.map(item => ({
  184 + id: item.id,
  185 + title: item.chartConfig.title,
  186 + disabled: false
  187 + }))
  188 +
  189 + targetData.value.events.interactEvents?.forEach(iaItem => {
  190 + mapOptionList.forEach(optionItem => {
  191 + if (optionItem.id === iaItem.interactComponentId) {
  192 + optionItem.disabled = true
  193 + }
  194 + })
  195 + })
  196 +
  197 + return mapOptionList
  198 +}
  199 +
  200 +// 新增模块
  201 +const evAddEventsFn = () => {
  202 + targetData.value.events.interactEvents.push({
  203 + interactOn: undefined,
  204 + interactComponentId: undefined,
  205 + interactFn: {}
  206 + })
  207 +}
  208 +
  209 +// 删除模块
  210 +const evDeleteEventsFn = (index: number) => {
  211 + goDialog({
  212 + message: '是否删除此关联交互模块?',
  213 + onPositiveCallback: () => {
  214 + targetData.value.events.interactEvents.splice(index, 1)
  215 + }
  216 + })
  217 +}
  218 +</script>
  219 +
  220 +<style lang="scss" scoped>
  221 +.mill-chart-target-data {
  222 + :deep(pre) {
  223 + white-space: pre-wrap;
  224 + word-wrap: break-word;
  225 + }
  226 +}
  227 +
  228 +.n-input-group {
  229 + height: 30px;
  230 +}
  231 +
  232 +.no-data {
  233 + flex-direction: column;
  234 + width: 100%;
  235 + img {
  236 + width: 120px;
  237 + }
  238 +}
  239 +
  240 +:deep(.n-base-selection .n-base-selection-label) {
  241 + height: 32px;
  242 +}
  243 +</style>
@@ -5,6 +5,7 @@ @@ -5,6 +5,7 @@
5 组件 id: 5 组件 id:
6 <n-text>{{ targetData.id }}</n-text> 6 <n-text>{{ targetData.id }}</n-text>
7 </n-text> 7 </n-text>
  8 + <chart-event-interaction></chart-event-interaction>
8 <chart-event-base-handle></chart-event-base-handle> 9 <chart-event-base-handle></chart-event-base-handle>
9 <chart-event-advanced-handle></chart-event-advanced-handle> 10 <chart-event-advanced-handle></chart-event-advanced-handle>
10 </n-collapse> 11 </n-collapse>
@@ -12,6 +13,7 @@ @@ -12,6 +13,7 @@
12 13
13 <script setup lang="ts"> 14 <script setup lang="ts">
14 import { ref } from 'vue' 15 import { ref } from 'vue'
  16 +import { ChartEventInteraction } from './components/ChartEventInteraction'
15 import { ChartEventAdvancedHandle } from './components/ChartEventAdvancedHandle' 17 import { ChartEventAdvancedHandle } from './components/ChartEventAdvancedHandle'
16 import { ChartEventBaseHandle } from './components/ChartEventBaseHandle' 18 import { ChartEventBaseHandle } from './components/ChartEventBaseHandle'
17 import { useTargetData } from '../hooks/useTargetData.hook' 19 import { useTargetData } from '../hooks/useTargetData.hook'
@@ -13,10 +13,11 @@ @@ -13,10 +13,11 @@
13 13
14 <!-- 缩放比例 --> 14 <!-- 缩放比例 -->
15 <n-select 15 <n-select
16 - :disabled="lockScale" 16 + ref="selectInstRef"
17 class="scale-btn" 17 class="scale-btn"
18 v-model:value="filterValue" 18 v-model:value="filterValue"
19 size="mini" 19 size="mini"
  20 + :disabled="lockScale"
20 :options="filterOptions" 21 :options="filterOptions"
21 @update:value="selectHandle" 22 @update:value="selectHandle"
22 ></n-select> 23 ></n-select>
@@ -52,6 +53,7 @@ @@ -52,6 +53,7 @@
52 </template> 53 </template>
53 54
54 <script setup lang="ts"> 55 <script setup lang="ts">
  56 +import { SelectInst } from 'naive-ui'
55 import { reactive, ref, toRefs, watchEffect } from 'vue' 57 import { reactive, ref, toRefs, watchEffect } from 'vue'
56 import { icon } from '@/plugins' 58 import { icon } from '@/plugins'
57 import { EditHistory } from '../EditHistory/index' 59 import { EditHistory } from '../EditHistory/index'
@@ -59,15 +61,18 @@ import EditShortcutKey from '../EditShortcutKey/index.vue' @@ -59,15 +61,18 @@ import EditShortcutKey from '../EditShortcutKey/index.vue'
59 import { useDesignStore } from '@/store/modules/designStore/designStore' 61 import { useDesignStore } from '@/store/modules/designStore/designStore'
60 import { useChartEditStore } from '@/store/modules/chartEditStore/chartEditStore' 62 import { useChartEditStore } from '@/store/modules/chartEditStore/chartEditStore'
61 import { EditCanvasTypeEnum } from '@/store/modules/chartEditStore/chartEditStore.d' 63 import { EditCanvasTypeEnum } from '@/store/modules/chartEditStore/chartEditStore.d'
  64 +import { useChartLayoutStore } from '@/store/modules/chartLayoutStore/chartLayoutStore'
  65 +import { ChartLayoutStoreEnum } from '@/store/modules/chartLayoutStore/chartLayoutStore.d'
62 66
63 const { LockClosedOutlineIcon, LockOpenOutlineIcon } = icon.ionicons5 67 const { LockClosedOutlineIcon, LockOpenOutlineIcon } = icon.ionicons5
64 68
65 // 全局颜色 69 // 全局颜色
66 const designStore = useDesignStore() 70 const designStore = useDesignStore()
67 const themeColor = ref(designStore.getAppTheme) 71 const themeColor = ref(designStore.getAppTheme)
68 - 72 +const chartLayoutStore = useChartLayoutStore()
69 const chartEditStore = useChartEditStore() 73 const chartEditStore = useChartEditStore()
70 const { lockScale, scale } = toRefs(chartEditStore.getEditCanvas) 74 const { lockScale, scale } = toRefs(chartEditStore.getEditCanvas)
  75 +const selectInstRef = ref<SelectInst | null>(null)
71 76
72 // 缩放选项 77 // 缩放选项
73 let filterOptions = [ 78 let filterOptions = [
@@ -98,7 +103,9 @@ const filterValue = ref('') @@ -98,7 +103,9 @@ const filterValue = ref('')
98 103
99 // 用户自选择 104 // 用户自选择
100 const selectHandle = (v: number) => { 105 const selectHandle = (v: number) => {
  106 + selectInstRef.value?.blur()
101 if (v === 0) { 107 if (v === 0) {
  108 + chartLayoutStore.setItemUnHandle(ChartLayoutStoreEnum.RE_POSITION_CANVAS, true)
102 chartEditStore.computedScale() 109 chartEditStore.computedScale()
103 return 110 return
104 } 111 }
@@ -48,10 +48,10 @@ const useSyncUpdateHandle = () => { @@ -48,10 +48,10 @@ const useSyncUpdateHandle = () => {
48 // document.hasFocus() && syncData() 48 // document.hasFocus() && syncData()
49 // }, editToJsonInterval) 49 // }, editToJsonInterval)
50 50
51 - // 2、失焦同步数据  
52 - addEventListener('blur', syncData) 51 + // 失焦同步数据(暂不开启)
  52 + // addEventListener('blur', syncData)
53 53
54 - // 【监听JSON代码 刷新工作台图表】 54 + // 监听编辑器保存事件 刷新工作台图表
55 addEventListener(SavePageEnum.JSON, updateFn) 55 addEventListener(SavePageEnum.JSON, updateFn)
56 56
57 // 监听编辑页关闭 57 // 监听编辑页关闭
@@ -74,7 +74,7 @@ const useSyncUpdateHandle = () => { @@ -74,7 +74,7 @@ const useSyncUpdateHandle = () => {
74 use() 74 use()
75 } 75 }
76 } 76 }
77 - 77 +
78 return watchHandler 78 return watchHandler
79 } 79 }
80 80
@@ -178,7 +178,6 @@ const updateToSession = (id: string) => { @@ -178,7 +178,6 @@ const updateToSession = (id: string) => {
178 } 178 }
179 } 179 }
180 180
181 -  
182 // 配置列表 181 // 配置列表
183 const btnList: BtnListType[] = [ 182 const btnList: BtnListType[] = [
184 { 183 {
1 <template> 1 <template>
2 <!-- <edit-rule></edit-rule> --> 2 <!-- <edit-rule></edit-rule> -->
3 - <content-box id="go-chart-edit-layout" :flex="true" :showTop="false" :showBottom="true" :depth="1" :xScroll="true"  
4 - :disabledScroll="true" @mousedown="mousedownHandleUnStop" @drop="dragHandle" @dragover="dragoverHandle"  
5 - @dragenter="dragoverHandle"> 3 + <content-box
  4 + id="go-chart-edit-layout"
  5 + :flex="true"
  6 + :showTop="false"
  7 + :showBottom="true"
  8 + :depth="1"
  9 + :xScroll="true"
  10 + :disabledScroll="true"
  11 + @mousedown="mousedownHandleUnStop"
  12 + @drop="dragHandle"
  13 + @dragover="dragoverHandle"
  14 + @dragenter="dragoverHandle"
  15 + >
6 <edit-rule> 16 <edit-rule>
7 <!-- 画布主体 --> 17 <!-- 画布主体 -->
8 <div id="go-chart-edit-content" @contextmenu="handleContextMenu"> 18 <div id="go-chart-edit-content" @contextmenu="handleContextMenu">
9 <!-- 展示 --> 19 <!-- 展示 -->
10 <edit-range> 20 <edit-range>
11 <!-- 滤镜预览 --> 21 <!-- 滤镜预览 -->
12 - <div :style="{  
13 - ...getFilterStyle(chartEditStore.getEditCanvasConfig),  
14 - ...rangeStyle  
15 - }"> 22 + <div
  23 + :style="{
  24 + ...getFilterStyle(chartEditStore.getEditCanvasConfig),
  25 + ...rangeStyle
  26 + }"
  27 + >
16 <!-- 图表 --> 28 <!-- 图表 -->
17 <div v-for="(item, index) in chartEditStore.getComponentList" :key="item.id"> 29 <div v-for="(item, index) in chartEditStore.getComponentList" :key="item.id">
18 <!-- 分组 --> 30 <!-- 分组 -->
19 - <edit-group v-if="item.isGroup" :groupData="(item as CreateComponentGroupType)"  
20 - :groupIndex="index"></edit-group> 31 + <edit-group
  32 + v-if="item.isGroup"
  33 + :groupData="(item as CreateComponentGroupType)"
  34 + :groupIndex="index"
  35 + ></edit-group>
21 36
22 <!-- 单组件 --> 37 <!-- 单组件 -->
23 - <edit-shape-box v-else :data-id="item.id" :index="index" :style="{ 38 + <edit-shape-box
  39 + v-else
  40 + :data-id="item.id"
  41 + :index="index"
  42 + :style="{
24 ...useComponentStyle(item.attr, index), 43 ...useComponentStyle(item.attr, index),
25 ...getBlendModeStyle(item.styles) as any 44 ...getBlendModeStyle(item.styles) as any
26 - }" :item="item" @click="mouseClickHandle($event, item)" @mousedown="mousedownHandle($event, item)"  
27 - @mouseenter="mouseenterHandle($event, item)" @mouseleave="mouseleaveHandle($event, item)"  
28 - @contextmenu="handleContextMenu($event, item, optionsHandle)">  
29 - <component class="edit-content-chart" :class="animationsClass(item.styles.animations)"  
30 - :is="item.chartConfig.chartKey" :chartConfig="item" :themeSetting="themeSetting"  
31 - :themeColor="themeColor" :style="{ 45 + }"
  46 + :item="item"
  47 + @click="mouseClickHandle($event, item)"
  48 + @mousedown="mousedownHandle($event, item)"
  49 + @mouseenter="mouseenterHandle($event, item)"
  50 + @mouseleave="mouseleaveHandle($event, item)"
  51 + @contextmenu="handleContextMenu($event, item, optionsHandle)"
  52 + >
  53 + <component
  54 + class="edit-content-chart"
  55 + :class="animationsClass(item.styles.animations)"
  56 + :is="item.chartConfig.chartKey"
  57 + :chartConfig="item"
  58 + :themeSetting="themeSetting"
  59 + :themeColor="themeColor"
  60 + :style="{
32 ...useSizeStyle(item.attr), 61 ...useSizeStyle(item.attr),
33 ...getFilterStyle(item.styles), 62 ...getFilterStyle(item.styles),
34 ...getTransformStyle(item.styles) 63 ...getTransformStyle(item.styles)
35 - }"></component> 64 + }"
  65 + ></component>
36 </edit-shape-box> 66 </edit-shape-box>
37 </div> 67 </div>
38 </div> 68 </div>
@@ -53,7 +83,7 @@ @@ -53,7 +83,7 @@
53 </template> 83 </template>
54 84
55 <script lang="ts" setup> 85 <script lang="ts" setup>
56 -import { onMounted, computed } from 'vue' 86 +import { onMounted, computed, provide } from 'vue'
57 import { chartColors } from '@/settings/chartThemes/index' 87 import { chartColors } from '@/settings/chartThemes/index'
58 import { MenuEnum } from '@/enums/editPageEnum' 88 import { MenuEnum } from '@/enums/editPageEnum'
59 import { CreateComponentType, CreateComponentGroupType } from '@/packages/index.d' 89 import { CreateComponentType, CreateComponentGroupType } from '@/packages/index.d'
@@ -61,7 +91,7 @@ import { animationsClass, getFilterStyle, getTransformStyle, getBlendModeStyle, @@ -61,7 +91,7 @@ import { animationsClass, getFilterStyle, getTransformStyle, getBlendModeStyle,
61 import { useContextMenu } from '@/views/chart/hooks/useContextMenu.hook' 91 import { useContextMenu } from '@/views/chart/hooks/useContextMenu.hook'
62 import { MenuOptionsItemType } from '@/views/chart/hooks/useContextMenu.hook.d' 92 import { MenuOptionsItemType } from '@/views/chart/hooks/useContextMenu.hook.d'
63 import { useChartEditStore } from '@/store/modules/chartEditStore/chartEditStore' 93 import { useChartEditStore } from '@/store/modules/chartEditStore/chartEditStore'
64 - 94 +import { SCALE_KEY } from '@/views/preview/hooks/useScale.hook'
65 import { useLayout } from './hooks/useLayout.hook' 95 import { useLayout } from './hooks/useLayout.hook'
66 import { useAddKeyboard } from '../hooks/useKeyboard.hook' 96 import { useAddKeyboard } from '../hooks/useKeyboard.hook'
67 import { dragHandle, dragoverHandle, mousedownHandleUnStop, useMouseHandle } from './hooks/useDrag.hook' 97 import { dragHandle, dragoverHandle, mousedownHandleUnStop, useMouseHandle } from './hooks/useDrag.hook'
@@ -82,6 +112,8 @@ const chartEditStore = useChartEditStore() @@ -82,6 +112,8 @@ const chartEditStore = useChartEditStore()
82 const { handleContextMenu } = useContextMenu() 112 const { handleContextMenu } = useContextMenu()
83 const { dataSyncFetch, intervalDataSyncUpdate } = useSyncRemote() 113 const { dataSyncFetch, intervalDataSyncUpdate } = useSyncRemote()
84 114
  115 +// 编辑时注入scale变量,消除警告
  116 +provide(SCALE_KEY, null);
85 117
86 // 布局处理 118 // 布局处理
87 useLayout() 119 useLayout()
@@ -139,6 +171,7 @@ const rangeStyle = computed(() => { @@ -139,6 +171,7 @@ const rangeStyle = computed(() => {
139 const backgroundImage = chartEditStore.getEditCanvasConfig.backgroundImage 171 const backgroundImage = chartEditStore.getEditCanvasConfig.backgroundImage
140 const selectColor = chartEditStore.getEditCanvasConfig.selectColor 172 const selectColor = chartEditStore.getEditCanvasConfig.selectColor
141 const backgroundColor = background ? background : undefined 173 const backgroundColor = background ? background : undefined
  174 +
142 const computedBackground = selectColor 175 const computedBackground = selectColor
143 ? { background: backgroundColor } 176 ? { background: backgroundColor }
144 // : { background: `url(${backgroundImage}) no-repeat center center / cover !important` } 177 // : { background: `url(${backgroundImage}) no-repeat center center / cover !important` }
@@ -37,7 +37,7 @@ @@ -37,7 +37,7 @@
37 <n-button size="small" type="primary" ghost @click="dataSyncUpdate()"> 37 <n-button size="small" type="primary" ghost @click="dataSyncUpdate()">
38 <template #icon> 38 <template #icon>
39 <n-icon> 39 <n-icon>
40 - <SaveIcon></SaveIcon> 40 + <Save />
41 </n-icon> 41 </n-icon>
42 </template> 42 </template>
43 </n-button> 43 </n-button>
@@ -53,6 +53,7 @@ @@ -53,6 +53,7 @@
53 import { toRefs, Ref, reactive, computed } from 'vue' 53 import { toRefs, Ref, reactive, computed } from 'vue'
54 import { renderIcon, goDialog, goHome } from '@/utils' 54 import { renderIcon, goDialog, goHome } from '@/utils'
55 import { icon } from '@/plugins' 55 import { icon } from '@/plugins'
  56 +import { Save } from '@vicons/carbon'
56 import { useRemoveKeyboard } from '../../hooks/useKeyboard.hook' 57 import { useRemoveKeyboard } from '../../hooks/useKeyboard.hook'
57 58
58 import { useChartEditStore } from '@/store/modules/chartEditStore/chartEditStore' 59 import { useChartEditStore } from '@/store/modules/chartEditStore/chartEditStore'
@@ -65,12 +66,11 @@ import { useChartLayoutStore } from '@/store/modules/chartLayoutStore/chartLayou @@ -65,12 +66,11 @@ import { useChartLayoutStore } from '@/store/modules/chartLayoutStore/chartLayou
65 import { ChartLayoutStoreEnum } from '@/store/modules/chartLayoutStore/chartLayoutStore.d' 66 import { ChartLayoutStoreEnum } from '@/store/modules/chartLayoutStore/chartLayoutStore.d'
66 67
67 const { LayersIcon, BarChartIcon, PrismIcon, HomeIcon, ArrowBackIcon, ArrowForwardIcon } = icon.ionicons5 68 const { LayersIcon, BarChartIcon, PrismIcon, HomeIcon, ArrowBackIcon, ArrowForwardIcon } = icon.ionicons5
68 -const { SaveIcon } = icon.carbon  
69 const { setItem } = useChartLayoutStore() 69 const { setItem } = useChartLayoutStore()
70 -const { dataSyncUpdate } = useSyncRemote()  
71 const { getLayers, getCharts, getDetails } = toRefs(useChartLayoutStore()) 70 const { getLayers, getCharts, getDetails } = toRefs(useChartLayoutStore())
72 const chartEditStore = useChartEditStore() 71 const chartEditStore = useChartEditStore()
73 const chartHistoryStore = useChartHistoryStore() 72 const chartHistoryStore = useChartHistoryStore()
  73 +const { dataSyncUpdate } = useSyncRemote()
74 74
75 interface ItemType<T> { 75 interface ItemType<T> {
76 key: T 76 key: T
@@ -139,10 +139,10 @@ const clickHistoryHandle = (item: ItemType<HistoryStackEnum>) => { @@ -139,10 +139,10 @@ const clickHistoryHandle = (item: ItemType<HistoryStackEnum>) => {
139 switch (item.key) { 139 switch (item.key) {
140 case HistoryStackEnum.BACK_STACK: 140 case HistoryStackEnum.BACK_STACK:
141 chartEditStore.setBack() 141 chartEditStore.setBack()
142 - break 142 + break;
143 case HistoryStackEnum.FORWARD_STACK: 143 case HistoryStackEnum.FORWARD_STACK:
144 chartEditStore.setForward() 144 chartEditStore.setForward()
145 - break 145 + break;
146 } 146 }
147 } 147 }
148 148
@@ -10,7 +10,7 @@ @@ -10,7 +10,7 @@
10 </template> 10 </template>
11 11
12 <script setup lang="ts"> 12 <script setup lang="ts">
13 -import { computed, shallowReactive } from 'vue' 13 +import { computed } from 'vue'
14 import { renderIcon, goDialog, fetchPathByName, routerTurnByPath, setSessionStorage, getLocalStorage } from '@/utils' 14 import { renderIcon, goDialog, fetchPathByName, routerTurnByPath, setSessionStorage, getLocalStorage } from '@/utils'
15 import { PreviewEnum } from '@/enums/pageEnum' 15 import { PreviewEnum } from '@/enums/pageEnum'
16 import { StorageEnum } from '@/enums/storageEnum' 16 import { StorageEnum } from '@/enums/storageEnum'
@@ -65,7 +65,7 @@ const sendHandle = () => { @@ -65,7 +65,7 @@ const sendHandle = () => {
65 }) 65 })
66 } 66 }
67 67
68 -const btnList = shallowReactive([ 68 +const btnList = [
69 { 69 {
70 select: true, 70 select: true,
71 title: '同步内容', 71 title: '同步内容',
@@ -85,7 +85,7 @@ const btnList = shallowReactive([ @@ -85,7 +85,7 @@ const btnList = shallowReactive([
85 icon: renderIcon(SendIcon), 85 icon: renderIcon(SendIcon),
86 event: sendHandle 86 event: sendHandle
87 } 87 }
88 -]) 88 +]
89 89
90 const comBtnList = computed(() => { 90 const comBtnList = computed(() => {
91 if (chartEditStore.getEditCanvas.isCodeEdit) { 91 if (chartEditStore.getEditCanvas.isCodeEdit) {
@@ -199,9 +199,8 @@ const changeLayerType = (value: LayerModeEnum) => { @@ -199,9 +199,8 @@ const changeLayerType = (value: LayerModeEnum) => {
199 199
200 <style lang="scss" scoped> 200 <style lang="scss" scoped>
201 $wight: 200px; 201 $wight: 200px;
202 -@include go(content-layers) { 202 +@include go('content-layers') {
203 width: $wight; 203 width: $wight;
204 - flex-shrink: 0;  
205 overflow: hidden; 204 overflow: hidden;
206 @extend .go-transition; 205 @extend .go-transition;
207 .not-layer-text { 206 .not-layer-text {
@@ -53,7 +53,8 @@ const componentVersionUpdatePolyfill = (newObject: any, sources: any) => { @@ -53,7 +53,8 @@ const componentVersionUpdatePolyfill = (newObject: any, sources: any) => {
53 advancedEvents: { 53 advancedEvents: {
54 [EventLife.VNODE_MOUNTED]: undefined, 54 [EventLife.VNODE_MOUNTED]: undefined,
55 [EventLife.VNODE_BEFORE_MOUNT]: undefined 55 [EventLife.VNODE_BEFORE_MOUNT]: undefined
56 - } 56 + },
  57 + interactEvents: []
57 } 58 }
58 } 59 }
59 return newObject 60 return newObject
@@ -135,7 +136,7 @@ export const useSync = () => { @@ -135,7 +136,7 @@ export const useSync = () => {
135 callBack?: (componentInstance: CreateComponentType) => void 136 callBack?: (componentInstance: CreateComponentType) => void
136 ) => { 137 ) => {
137 // 补充 class 上的方法 138 // 补充 class 上的方法
138 - const newComponent: CreateComponentType = await createComponent(_componentInstance.chartConfig) 139 + let newComponent: CreateComponentType = await createComponent(_componentInstance.chartConfig)
139 if (callBack) { 140 if (callBack) {
140 if (changeId) { 141 if (changeId) {
141 callBack(componentMerge(newComponent, { ..._componentInstance, id: getUUID() })) 142 callBack(componentMerge(newComponent, { ..._componentInstance, id: getUUID() }))
@@ -163,7 +164,7 @@ export const useSync = () => { @@ -163,7 +164,7 @@ export const useSync = () => {
163 const listLength = projectData[key].length; 164 const listLength = projectData[key].length;
164 for (const comItem of projectData[key]) { 165 for (const comItem of projectData[key]) {
165 // 设置加载数量 166 // 设置加载数量
166 - const percentage = parseInt((parseFloat(`${++loadIndex / listLength}`) * 100).toString()) 167 + let percentage = parseInt((parseFloat(`${++loadIndex / listLength}`) * 100).toString())
167 chartLayoutStore.setItemUnHandle(ChartLayoutStoreEnum.PERCENTAGE, percentage) 168 chartLayoutStore.setItemUnHandle(ChartLayoutStoreEnum.PERCENTAGE, percentage)
168 // 判断类型 169 // 判断类型
169 if (comItem.isGroup) { 170 if (comItem.isGroup) {
@@ -258,12 +258,10 @@ $carousel-image-height: 60vh; @@ -258,12 +258,10 @@ $carousel-image-height: 60vh;
258 margin-top: -$--header-height; 258 margin-top: -$--header-height;
259 height: $go-login-height; 259 height: $go-login-height;
260 width: 100vw; 260 width: 100vw;
261 -  
262 &-carousel { 261 &-carousel {
263 width: $carousel-width; 262 width: $carousel-width;
264 margin-top: 100px; 263 margin-top: 100px;
265 min-width: 500px; 264 min-width: 500px;
266 -  
267 &-img { 265 &-img {
268 display: block; 266 display: block;
269 margin: 0 auto; 267 margin: 0 auto;
@@ -275,7 +273,6 @@ $carousel-image-height: 60vh; @@ -275,7 +273,6 @@ $carousel-image-height: 60vh;
275 display: flex; 273 display: flex;
276 flex-direction: column; 274 flex-direction: column;
277 margin: 0 160px; 275 margin: 0 160px;
278 -  
279 &-container { 276 &-container {
280 width: $width; 277 width: $width;
281 } 278 }
@@ -311,18 +308,15 @@ $carousel-image-height: 60vh; @@ -311,18 +308,15 @@ $carousel-image-height: 60vh;
311 width: 100vw; 308 width: 100vw;
312 height: 100vh; 309 height: 100vh;
313 background: url('@/assets/images/login/login-bg.png') no-repeat 0 -120px; 310 background: url('@/assets/images/login/login-bg.png') no-repeat 0 -120px;
314 -  
315 .bg-slot { 311 .bg-slot {
316 width: $carousel-width; 312 width: $carousel-width;
317 } 313 }
318 -  
319 .bg-img-box { 314 .bg-img-box {
320 position: relative; 315 position: relative;
321 display: flex; 316 display: flex;
322 flex-wrap: wrap; 317 flex-wrap: wrap;
323 width: 770px; 318 width: 770px;
324 margin-right: -20px; 319 margin-right: -20px;
325 -  
326 &-li { 320 &-li {
327 img { 321 img {
328 margin-right: 20px; 322 margin-right: 20px;
@@ -335,15 +329,12 @@ $carousel-image-height: 60vh; @@ -335,15 +329,12 @@ $carousel-image-height: 60vh;
335 } 329 }
336 } 330 }
337 } 331 }
338 -  
339 @media only screen and (max-width: 1200px) { 332 @media only screen and (max-width: 1200px) {
340 -  
341 .bg-img-box, 333 .bg-img-box,
342 .bg-slot, 334 .bg-slot,
343 .go-login-carousel { 335 .go-login-carousel {
344 display: none !important; 336 display: none !important;
345 } 337 }
346 -  
347 .go-login-box-footer { 338 .go-login-box-footer {
348 position: relative; 339 position: relative;
349 } 340 }
1 <template> 1 <template>
2 <div 2 <div
3 class="chart-item" 3 class="chart-item"
4 - v-for="(item, index) in localStorageInfo.componentList" 4 + v-for="(item, index) in chartEditStore.componentList"
5 :class="animationsClass(item.styles.animations)" 5 :class="animationsClass(item.styles.animations)"
6 :key="item.id" 6 :key="item.id"
7 :style="{ 7 :style="{
@@ -52,30 +52,29 @@ import { useLifeHandler } from '@/hooks' @@ -52,30 +52,29 @@ import { useLifeHandler } from '@/hooks'
52 const { initDataPond, clearMittDataPondMap } = useChartDataPondFetch() 52 const { initDataPond, clearMittDataPondMap } = useChartDataPondFetch()
53 const chartEditStore = useChartEditStore() 53 const chartEditStore = useChartEditStore()
54 54
55 -const props = defineProps({  
56 - localStorageInfo: {  
57 - type: Object as PropType<ChartEditStorageType>,  
58 - required: true  
59 - }  
60 -}) 55 +// const props = defineProps({
  56 +// localStorageInfo: {
  57 +// type: Object as PropType<ChartEditStorageType>,
  58 +// required: true
  59 +// }
  60 +// })
61 61
62 // 主题色 62 // 主题色
63 const themeSetting = computed(() => { 63 const themeSetting = computed(() => {
64 - const chartThemeSetting = props.localStorageInfo.editCanvasConfig.chartThemeSetting 64 + const chartThemeSetting = chartEditStore.editCanvasConfig.chartThemeSetting
65 return chartThemeSetting 65 return chartThemeSetting
66 }) 66 })
67 67
68 -  
69 // 配置项 68 // 配置项
70 const themeColor = computed(() => { 69 const themeColor = computed(() => {
71 - const colorCustomMergeData = colorCustomMerge(props.localStorageInfo.editCanvasConfig.chartCustomThemeColorInfo)  
72 - return colorCustomMergeData[props.localStorageInfo.editCanvasConfig.chartThemeColor] 70 + const colorCustomMergeData = colorCustomMerge(chartEditStore.editCanvasConfig.chartCustomThemeColorInfo)
  71 + return colorCustomMergeData[chartEditStore.editCanvasConfig.chartThemeColor]
73 }) 72 })
74 73
75 // 组件渲染结束初始化数据池 74 // 组件渲染结束初始化数据池
76 clearMittDataPondMap() 75 clearMittDataPondMap()
77 onMounted(() => { 76 onMounted(() => {
78 - initDataPond(props.localStorageInfo.requestGlobalConfig) 77 + initDataPond(chartEditStore.requestGlobalConfig)
79 }) 78 })
80 </script> 79 </script>
81 80
1 -import { ref, onMounted, onUnmounted} from 'vue' 1 +import { ref, provide, onMounted, onUnmounted } from 'vue'
2 import { usePreviewFitScale, usePreviewScrollYScale, usePreviewScrollXScale, usePreviewFullScale } from '@/hooks/index' 2 import { usePreviewFitScale, usePreviewScrollYScale, usePreviewScrollXScale, usePreviewFullScale } from '@/hooks/index'
3 import type { ChartEditStorageType } from '../index.d' 3 import type { ChartEditStorageType } from '../index.d'
4 import { PreviewScaleEnum } from '@/enums/styleEnum' 4 import { PreviewScaleEnum } from '@/enums/styleEnum'
5 5
  6 +export const SCALE_KEY = 'scale-value'
  7 +
6 export const useScale = (localStorageInfo: ChartEditStorageType) => { 8 export const useScale = (localStorageInfo: ChartEditStorageType) => {
7 const entityRef = ref() 9 const entityRef = ref()
8 const previewRef = ref() 10 const previewRef = ref()
9 const width = ref(localStorageInfo.editCanvasConfig.width) 11 const width = ref(localStorageInfo.editCanvasConfig.width)
10 const height = ref(localStorageInfo.editCanvasConfig.height) 12 const height = ref(localStorageInfo.editCanvasConfig.height)
  13 + const scaleRef = ref({ width: 1, height: 1 })
  14 +
  15 + provide(SCALE_KEY, scaleRef);
  16 +
  17 + const updateScaleRef = (scale: { width: number; height: number }) => {
  18 + // 这里需要解构,保证赋值给scaleRef的为一个新对象
  19 + // 因为scale始终为同一引用
  20 + scaleRef.value = { ...scale }
  21 + }
11 22
12 // 屏幕适配 23 // 屏幕适配
13 onMounted(() => { 24 onMounted(() => {
@@ -17,6 +28,7 @@ export const useScale = (localStorageInfo: ChartEditStorageType) => { @@ -17,6 +28,7 @@ export const useScale = (localStorageInfo: ChartEditStorageType) => {
17 width.value as number, 28 width.value as number,
18 height.value as number, 29 height.value as number,
19 previewRef.value, 30 previewRef.value,
  31 + updateScaleRef
20 ) 32 )
21 calcRate() 33 calcRate()
22 windowResize() 34 windowResize()
@@ -34,6 +46,7 @@ export const useScale = (localStorageInfo: ChartEditStorageType) => { @@ -34,6 +46,7 @@ export const useScale = (localStorageInfo: ChartEditStorageType) => {
34 const dom = entityRef.value 46 const dom = entityRef.value
35 dom.style.width = `${width.value * scale.width}px` 47 dom.style.width = `${width.value * scale.width}px`
36 dom.style.height = `${height.value * scale.height}px` 48 dom.style.height = `${height.value * scale.height}px`
  49 + updateScaleRef(scale)
37 } 50 }
38 ) 51 )
39 calcRate() 52 calcRate()
@@ -53,6 +66,7 @@ export const useScale = (localStorageInfo: ChartEditStorageType) => { @@ -53,6 +66,7 @@ export const useScale = (localStorageInfo: ChartEditStorageType) => {
53 const dom = entityRef.value 66 const dom = entityRef.value
54 dom.style.width = `${width.value * scale.width}px` 67 dom.style.width = `${width.value * scale.width}px`
55 dom.style.height = `${height.value * scale.height}px` 68 dom.style.height = `${height.value * scale.height}px`
  69 + updateScaleRef(scale)
56 } 70 }
57 ) 71 )
58 calcRate() 72 calcRate()
@@ -68,6 +82,7 @@ export const useScale = (localStorageInfo: ChartEditStorageType) => { @@ -68,6 +82,7 @@ export const useScale = (localStorageInfo: ChartEditStorageType) => {
68 width.value as number, 82 width.value as number,
69 height.value as number, 83 height.value as number,
70 previewRef.value, 84 previewRef.value,
  85 + updateScaleRef
71 ) 86 )
72 calcRate() 87 calcRate()
73 windowResize() 88 windowResize()
@@ -81,6 +96,7 @@ export const useScale = (localStorageInfo: ChartEditStorageType) => { @@ -81,6 +96,7 @@ export const useScale = (localStorageInfo: ChartEditStorageType) => {
81 96
82 return { 97 return {
83 entityRef, 98 entityRef,
84 - previewRef 99 + previewRef,
  100 + scaleRef
85 } 101 }
86 } 102 }
1 <template> 1 <template>
2 - <div :class="`go-preview ${localStorageInfo.editCanvasConfig.previewScaleType}`">  
3 - <template v-if="showEntity">  
4 - <!-- 实体区域 -->  
5 - <div ref="entityRef" class="go-preview-entity">  
6 - <!-- 缩放层 -->  
7 - <div ref="previewRef" class="go-preview-scale">  
8 - <!-- 展示层 -->  
9 - <div :style="previewRefStyle" v-if="show">  
10 - <!-- 渲染层 -->  
11 - <preview-render-list :localStorageInfo="localStorageInfo"></preview-render-list>  
12 - </div>  
13 - </div>  
14 - </div>  
15 - </template>  
16 - <template v-else>  
17 - <!-- 缩放层 -->  
18 - <div ref="previewRef" class="go-preview-scale">  
19 - <!-- 展示层 -->  
20 - <div :style="previewRefStyle" v-if="show">  
21 - <!-- 渲染层 -->  
22 - <preview-render-list :localStorageInfo="localStorageInfo"></preview-render-list>  
23 - </div>  
24 - </div>  
25 - </template>  
26 - </div> 2 + <suspense>
  3 + <suspense-index></suspense-index>
  4 + </suspense>
27 </template> 5 </template>
28 6
29 <script setup lang="ts"> 7 <script setup lang="ts">
30 -import { computed } from 'vue'  
31 -import { PreviewRenderList } from './components/PreviewRenderList'  
32 -import { getFilterStyle, setTitle } from '@/utils'  
33 -  
34 -// THINGS_KIT 预览逻辑修改  
35 -// import { getEditCanvasConfigStyle, getSessionStorageInfo } from './utils'  
36 -import { getEditCanvasConfigStyle } from './utils'  
37 -import { getSessionStorageInfo } from './external/usePreview'  
38 -  
39 -import { useComInstall } from './hooks/useComInstall.hook'  
40 -import { useScale } from './hooks/useScale.hook'  
41 -import { useStore } from './hooks/useStore.hook'  
42 -import { PreviewScaleEnum } from '@/enums/styleEnum'  
43 -import type { ChartEditStorageType } from './index.d'  
44 -  
45 -const localStorageInfo: ChartEditStorageType = await getSessionStorageInfo() as ChartEditStorageType  
46 -setTitle(`预览-${localStorageInfo.editCanvasConfig.projectName}`)  
47 -  
48 -const previewRefStyle = computed(() => {  
49 - return {  
50 - ...getEditCanvasConfigStyle(localStorageInfo.editCanvasConfig),  
51 - ...getFilterStyle(localStorageInfo.editCanvasConfig)  
52 - }  
53 -})  
54 -  
55 -const showEntity = computed(() => {  
56 - const type = localStorageInfo.editCanvasConfig.previewScaleType  
57 - return type === PreviewScaleEnum.SCROLL_Y || type === PreviewScaleEnum.SCROLL_X  
58 -})  
59 -  
60 -useStore(localStorageInfo)  
61 -const { entityRef, previewRef } = useScale(localStorageInfo)  
62 -const { show } = useComInstall(localStorageInfo) 8 +import suspenseIndex from './suspenseIndex.vue'
63 </script> 9 </script>
64 -  
65 -<style lang="scss" scoped>  
66 -@include go('preview') {  
67 - position: relative;  
68 - height: 100vh;  
69 - width: 100vw;  
70 - @include background-image('background-image');  
71 - &.fit,  
72 - &.full {  
73 - display: flex;  
74 - align-items: center;  
75 - justify-content: center;  
76 - overflow: hidden;  
77 - .go-preview-scale {  
78 - transform-origin: center center;  
79 - }  
80 - }  
81 - &.scrollY {  
82 - overflow-x: hidden;  
83 -  
84 - .go-preview-scale {  
85 - transform-origin: left top;  
86 - }  
87 - }  
88 -  
89 - &.scrollX {  
90 - overflow-y: hidden;  
91 -  
92 - .go-preview-scale {  
93 - transform-origin: left top;  
94 - }  
95 - }  
96 -  
97 - .go-preview-entity {  
98 - overflow: hidden;  
99 - }  
100 -}  
101 -</style>  
  1 +<template>
  2 + <div :class="`go-preview ${chartEditStore.editCanvasConfig.previewScaleType}`">
  3 + <template v-if="showEntity">
  4 + <!-- 实体区域 -->
  5 + <div ref="entityRef" class="go-preview-entity">
  6 + <!-- 缩放层 -->
  7 + <div ref="previewRef" class="go-preview-scale">
  8 + <!-- 展示层 -->
  9 + <div :style="previewRefStyle" v-if="show">
  10 + <!-- 渲染层 -->
  11 + <preview-render-list></preview-render-list>
  12 + </div>
  13 + </div>
  14 + </div>
  15 + </template>
  16 + <template v-else>
  17 + <!-- 缩放层 -->
  18 + <div ref="previewRef" class="go-preview-scale">
  19 + <!-- 展示层 -->
  20 + <div :style="previewRefStyle" v-if="show">
  21 + <!-- 渲染层 -->
  22 + <preview-render-list></preview-render-list>
  23 + </div>
  24 + </div>
  25 + </template>
  26 + </div>
  27 +</template>
  28 +
  29 +<script setup lang="ts">
  30 +import { computed } from 'vue'
  31 +import { PreviewRenderList } from './components/PreviewRenderList'
  32 +import { getFilterStyle, setTitle } from '@/utils'
  33 +import { getEditCanvasConfigStyle, getSessionStorageInfo } from './utils'
  34 +import { useComInstall } from './hooks/useComInstall.hook'
  35 +import { useScale } from './hooks/useScale.hook'
  36 +import { useStore } from './hooks/useStore.hook'
  37 +import { PreviewScaleEnum } from '@/enums/styleEnum'
  38 +import type { ChartEditStorageType } from './index.d'
  39 +import { useChartEditStore } from '@/store/modules/chartEditStore/chartEditStore'
  40 +
  41 +// const localStorageInfo: ChartEditStorageType = getSessionStorageInfo() as ChartEditStorageType
  42 +
  43 +await getSessionStorageInfo()
  44 +const chartEditStore = useChartEditStore() as unknown as ChartEditStorageType
  45 +
  46 +setTitle(`预览-${chartEditStore.editCanvasConfig.projectName}`)
  47 +
  48 +const previewRefStyle = computed(() => {
  49 + return {
  50 + ...getEditCanvasConfigStyle(chartEditStore.editCanvasConfig),
  51 + ...getFilterStyle(chartEditStore.editCanvasConfig)
  52 + }
  53 +})
  54 +
  55 +const showEntity = computed(() => {
  56 + const type = chartEditStore.editCanvasConfig.previewScaleType
  57 + return type === PreviewScaleEnum.SCROLL_Y || type === PreviewScaleEnum.SCROLL_X
  58 +})
  59 +
  60 +useStore(chartEditStore)
  61 +const { entityRef, previewRef } = useScale(chartEditStore)
  62 +const { show } = useComInstall(chartEditStore)
  63 +</script>
  64 +
  65 +<style lang="scss" scoped>
  66 +@include go('preview') {
  67 + position: relative;
  68 + height: 100vh;
  69 + width: 100vw;
  70 + @include background-image('background-image');
  71 + &.fit,
  72 + &.full {
  73 + display: flex;
  74 + align-items: center;
  75 + justify-content: center;
  76 + overflow: hidden;
  77 + .go-preview-scale {
  78 + transform-origin: center center;
  79 + }
  80 + }
  81 + &.scrollY {
  82 + overflow-x: hidden;
  83 + .go-preview-scale {
  84 + transform-origin: left top;
  85 + }
  86 + }
  87 + &.scrollX {
  88 + overflow-y: hidden;
  89 + .go-preview-scale {
  90 + transform-origin: left top;
  91 + }
  92 + }
  93 + .go-preview-entity {
  94 + overflow: hidden;
  95 + }
  96 +}
  97 +</style>
1 import { getSessionStorage } from '@/utils' 1 import { getSessionStorage } from '@/utils'
2 import { StorageEnum } from '@/enums/storageEnum' 2 import { StorageEnum } from '@/enums/storageEnum'
3 import { ChartEditStorage } from '@/store/modules/chartEditStore/chartEditStore.d' 3 import { ChartEditStorage } from '@/store/modules/chartEditStore/chartEditStore.d'
  4 +import { useChartEditStore } from '@/store/modules/chartEditStore/chartEditStore'
  5 +
  6 +const chartEditStore = useChartEditStore()
4 7
5 export interface ChartEditStorageType extends ChartEditStorage { 8 export interface ChartEditStorageType extends ChartEditStorage {
6 id: string 9 id: string
@@ -16,11 +19,15 @@ export const getSessionStorageInfo = () => { @@ -16,11 +19,15 @@ export const getSessionStorageInfo = () => {
16 StorageEnum.GO_CHART_STORAGE_LIST 19 StorageEnum.GO_CHART_STORAGE_LIST
17 ) 20 )
18 21
19 - if(!storageList) return  
20 -  
21 - for (let i = 0; i < storageList.length; i++) {  
22 - if (id.toString() === storageList[i]['id']) {  
23 - return storageList[i] 22 + if (storageList) {
  23 + for (let i = 0; i < storageList.length; i++) {
  24 + if (id.toString() === storageList[i]['id']) {
  25 + const { editCanvasConfig, requestGlobalConfig, componentList } = storageList[i]
  26 + chartEditStore.editCanvasConfig = editCanvasConfig
  27 + chartEditStore.requestGlobalConfig = requestGlobalConfig
  28 + chartEditStore.componentList = componentList
  29 + return storageList[i]
  30 + }
24 } 31 }
25 } 32 }
26 } 33 }