From afc8f907ceddc48bc500fb2cb249377eb2cbf132 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=A5=94=E8=B7=91=E7=9A=84=E9=9D=A2=E6=9D=A1?= <1262327911@qq.com> Date: Sat, 12 Nov 2022 17:20:11 +0800 Subject: [PATCH] =?UTF-8?q?perf:=20=E4=BC=98=E5=8C=96=E4=BF=AE=E6=94=B9jso?= =?UTF-8?q?n=E7=9A=84=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../EditTools/hooks/useSyncUpdate.hook.ts | 61 +++++++++++++++++++ .../components/EditTools/index.vue | 56 ++--------------- 2 files changed, 66 insertions(+), 51 deletions(-) create mode 100644 src/views/chart/ContentEdit/components/EditTools/hooks/useSyncUpdate.hook.ts diff --git a/src/views/chart/ContentEdit/components/EditTools/hooks/useSyncUpdate.hook.ts b/src/views/chart/ContentEdit/components/EditTools/hooks/useSyncUpdate.hook.ts new file mode 100644 index 00000000..73ea2eee --- /dev/null +++ b/src/views/chart/ContentEdit/components/EditTools/hooks/useSyncUpdate.hook.ts @@ -0,0 +1,61 @@ +import { watch } from 'vue' +import { useRoute } from 'vue-router' +import { useChartEditStore } from '@/store/modules/chartEditStore/chartEditStore' +import { useSync } from '@/views/chart/hooks/useSync.hook' +import { ChartEnum } from '@/enums/pageEnum' +import { SavePageEnum } from '@/enums/editPageEnum' +import { editToJsonInterval } from '@/settings/designSetting' + +const { updateComponent } = useSync() +const chartEditStore = useChartEditStore() + +// 侦听器更新 +const useSyncUpdateHandle = () => { + const routerParamsInfo = useRoute() + // 定义侦听器变量 + let timer: any + const updateFn = (e: any) => updateComponent(e!.detail, true, false) + const syncData = () => { + if (routerParamsInfo.name == ChartEnum.CHART_HOME_NAME) { + dispatchEvent(new CustomEvent(SavePageEnum.CHART, { detail: chartEditStore.getStorageInfo })) + } + } + + // 开启侦听 + const use = () => { + // 1、定时同步数据 + timer = setInterval(() => { + // 窗口激活并且处于工作台 + document.hasFocus() && syncData() + }, editToJsonInterval) + // 2、失焦同步数据 + addEventListener('blur', syncData) + + // 【监听JSON代码 刷新工作台图表】 + addEventListener(SavePageEnum.JSON, updateFn) + } + + // 关闭侦听 + const unUse = () => { + clearInterval(timer) + removeEventListener(SavePageEnum.JSON, updateFn) + removeEventListener('blur', syncData) + } + + // 路由变更时处理 + const watchHandler = (toName: any, fromName: any) => { + if (fromName == ChartEnum.CHART_HOME_NAME) { + unUse() + } + if (toName == ChartEnum.CHART_HOME_NAME) { + use() + } + } + + return watchHandler +} + +export const useSyncUpdate = () => { + const routerParamsInfo = useRoute() + watch(() => routerParamsInfo.name, useSyncUpdateHandle(), { immediate: true }) +} \ No newline at end of file diff --git a/src/views/chart/ContentEdit/components/EditTools/index.vue b/src/views/chart/ContentEdit/components/EditTools/index.vue index 4bb39d79..f2d2d97d 100644 --- a/src/views/chart/ContentEdit/components/EditTools/index.vue +++ b/src/views/chart/ContentEdit/components/EditTools/index.vue @@ -62,20 +62,18 @@