From ee469dfd654c76ea68145b92439fc6e431309c1c Mon Sep 17 00:00:00 2001 From: roymondchen Date: Mon, 26 Aug 2024 14:24:12 +0800 Subject: [PATCH] =?UTF-8?q?refactor:=20=E5=8F=8A=E6=97=B6=E9=87=8A?= =?UTF-8?q?=E6=94=BE=E6=B2=A1=E7=94=A8=E5=8F=98=E9=87=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- packages/design/src/Popover.vue | 1 + packages/editor/src/components/SearchInput.vue | 1 + packages/form/src/containers/Table.vue | 2 ++ runtime/vue-runtime-help/src/hooks/use-dsl.ts | 10 ++++++++-- 4 files changed, 12 insertions(+), 2 deletions(-) diff --git a/packages/design/src/Popover.vue b/packages/design/src/Popover.vue index 3cdf3317..ef2a27be 100644 --- a/packages/design/src/Popover.vue +++ b/packages/design/src/Popover.vue @@ -140,6 +140,7 @@ const mouseleaveHandler = () => { timer = globalThis.setTimeout(() => { popoverVisible.value = false; + timer = null; }, 350); }; diff --git a/packages/editor/src/components/SearchInput.vue b/packages/editor/src/components/SearchInput.vue index d5af36ce..cfe0d28e 100644 --- a/packages/editor/src/components/SearchInput.vue +++ b/packages/editor/src/components/SearchInput.vue @@ -32,6 +32,7 @@ const filterTextChangeHandler = () => { timer && clearTimeout(timer); timer = setTimeout(() => { emit('search', filterText.value); + timer = null; }, 300); }; diff --git a/packages/form/src/containers/Table.vue b/packages/form/src/containers/Table.vue index 6f972a90..8ec062bc 100644 --- a/packages/form/src/containers/Table.vue +++ b/packages/form/src/containers/Table.vue @@ -500,6 +500,7 @@ const upHandler = (index: number) => { timer = setTimeout(() => { swapArray(index, index - 1); + timer = undefined; }, 300); }; @@ -525,6 +526,7 @@ const downHandler = (index: number) => { timer = setTimeout(() => { swapArray(index, index + 1); + timer = undefined; }, 300); }; diff --git a/runtime/vue-runtime-help/src/hooks/use-dsl.ts b/runtime/vue-runtime-help/src/hooks/use-dsl.ts index bc56a26b..2038e47d 100644 --- a/runtime/vue-runtime-help/src/hooks/use-dsl.ts +++ b/runtime/vue-runtime-help/src/hooks/use-dsl.ts @@ -1,4 +1,4 @@ -import { nextTick, reactive, ref } from 'vue-demi'; +import { nextTick, onBeforeUnmount, reactive, ref } from 'vue-demi'; import Core from '@tmagic/core'; import type { ChangeEvent } from '@tmagic/data-source'; @@ -8,7 +8,7 @@ import { isPage, replaceChildNode } from '@tmagic/utils'; export const useDsl = (app: Core | undefined) => { const pageConfig = ref(app?.page?.data || {}); - app?.dataSourceManager?.on('update-data', (nodes: MNode[], sourceId: string, changeEvent: ChangeEvent) => { + const updateDataHandler = (nodes: MNode[], sourceId: string, changeEvent: ChangeEvent) => { nodes.forEach((node) => { if (isPage(node)) { pageConfig.value = node; @@ -22,6 +22,12 @@ export const useDsl = (app: Core | undefined) => { nextTick(() => { app.emit('replaced-node', { nodes, sourceId, ...changeEvent }); }); + }; + + app?.dataSourceManager?.on('update-data', updateDataHandler); + + onBeforeUnmount(() => { + app?.dataSourceManager?.off('update-data', updateDataHandler); }); return {