From 970d37bd9bff7299ea996cc38aff464787116513 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=8E=8B=E5=98=89=E8=B1=AA?= <42510293+ziyujiahao@users.noreply.github.com> Date: Wed, 3 Jun 2026 14:34:52 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E4=BF=AE=E5=A4=8D=E7=BC=96=E8=BE=91?= =?UTF-8?q?=E7=8A=B6=E6=80=81=E4=B8=8B=E6=9C=89=E6=9F=A5=E8=AF=A2=E7=BB=84?= =?UTF-8?q?=E4=BB=B6=E7=9A=84=E5=88=A0=E9=99=A4=E4=B9=8B=E5=90=8E=E5=9B=BE?= =?UTF-8?q?=E8=A1=A8=E8=BF=98=E6=98=AF=E7=BB=B4=E6=8C=81=E8=BF=87=E6=BB=A4?= =?UTF-8?q?=E7=8A=B6=E6=80=81=E9=97=AE=E9=A2=98=20(#18211)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../custom-component/v-query/Component.vue | 38 +------------- .../custom-component/v-query/QueryUtils.ts | 52 +++++++++++++++++++ .../modules/data-visualization/dvMain.ts | 4 ++ 3 files changed, 57 insertions(+), 37 deletions(-) create mode 100644 core/core-frontend/src/custom-component/v-query/QueryUtils.ts diff --git a/core/core-frontend/src/custom-component/v-query/Component.vue b/core/core-frontend/src/custom-component/v-query/Component.vue index d7e012c48a..4c39ae6984 100644 --- a/core/core-frontend/src/custom-component/v-query/Component.vue +++ b/core/core-frontend/src/custom-component/v-query/Component.vue @@ -33,6 +33,7 @@ import { dvMainStoreWithOut } from '@/store/modules/data-visualization/dvMain' import { comInfo } from './com-info' import { useEmitt } from '@/hooks/web/useEmitt' import StyleInject from './StyleInject.vue' +import { getKeyList, reRenderAll } from '@/custom-component/v-query/QueryUtils' const props = defineProps({ view: { type: Object, @@ -341,29 +342,6 @@ const releaseSelect = id => { unMountSelect.value = unMountSelect.value.filter(ele => ele !== id) } -const getKeyList = next => { - let checkedFieldsMapArr = Object.entries(next.checkedFieldsMap).filter(ele => - next.checkedFields.includes(ele[0]) - ) - if (next.displayType === '9') { - checkedFieldsMapArr = ( - next.treeCheckedList?.length - ? next.treeCheckedList.filter((_, index) => index < next.treeFieldList.length) - : next.treeFieldList.map(() => { - return { - checkedFields: [...next.checkedFields], - checkedFieldsMap: cloneDeep(next.checkedFieldsMap) - } - }) - ) - .map(item => - Object.entries(item.checkedFieldsMap).filter(ele => item.checkedFields.includes(ele[0])) - ) - .flat() - } - return checkedFieldsMapArr.filter(ele => !!ele[1]).map(ele => ele[0]) -} - const fillRequireVal = arr => { element.value.propValue?.forEach(next => { if (arr.some(itx => next.checkedFields.includes(itx)) && next.required) { @@ -663,20 +641,6 @@ const addCriteriaConfigOut = () => { queryConfig.value.setConditionOut() } -const reRenderAll = (oldArr, newArr) => { - const newArrIds = newArr.map(ele => ele.id) - const emitterList = (oldArr || []).reduce((pre, next) => { - if (newArrIds.includes(next.id)) return pre - const keyList = getKeyList(next) - pre = [...new Set([...keyList, ...pre])] - return pre - }, []) - if (!emitterList.length) return - emitterList.forEach(ele => { - emitter.emit(`query-data-${ele}`) - }) -} - const delQueryConfig = index => { const com = cloneDeep(unref(list)) list.value.splice(index, 1) diff --git a/core/core-frontend/src/custom-component/v-query/QueryUtils.ts b/core/core-frontend/src/custom-component/v-query/QueryUtils.ts new file mode 100644 index 0000000000..ba34069842 --- /dev/null +++ b/core/core-frontend/src/custom-component/v-query/QueryUtils.ts @@ -0,0 +1,52 @@ +import { cloneDeep } from 'lodash-es' +import { useEmitt } from '@/hooks/web/useEmitt' +const { emitter } = useEmitt() + +export const reRenderAll = (oldArr, newArr) => { + const newArrIds = newArr.map(ele => ele.id) + const emitterList = (oldArr || []).reduce((pre, next) => { + if (newArrIds.includes(next.id)) return pre + const keyList = getKeyList(next) + pre = [...new Set([...keyList, ...pre])] + return pre + }, []) + if (!emitterList.length) return + emitterList.forEach(ele => { + emitter.emit(`query-data-${ele}`) + }) +} + +export const reRenderAfterDelete = oldArr => { + const emitterList = (oldArr || []).reduce((pre, next) => { + const keyList = getKeyList(next) + pre = [...new Set([...keyList, ...pre])] + return pre + }, []) + if (!emitterList.length) return + emitterList.forEach(ele => { + emitter.emit(`query-data-${ele}`) + }) +} + +export const getKeyList = next => { + let checkedFieldsMapArr = Object.entries(next.checkedFieldsMap).filter(ele => + next.checkedFields.includes(ele[0]) + ) + if (next.displayType === '9') { + checkedFieldsMapArr = ( + next.treeCheckedList?.length + ? next.treeCheckedList.filter((_, index) => index < next.treeFieldList.length) + : next.treeFieldList.map(() => { + return { + checkedFields: [...next.checkedFields], + checkedFieldsMap: cloneDeep(next.checkedFieldsMap) + } + }) + ) + .map(item => + Object.entries(item.checkedFieldsMap).filter(ele => item.checkedFields.includes(ele[0])) + ) + .flat() + } + return checkedFieldsMapArr.filter(ele => !!ele[1]).map(ele => ele[0]) +} diff --git a/core/core-frontend/src/store/modules/data-visualization/dvMain.ts b/core/core-frontend/src/store/modules/data-visualization/dvMain.ts index e4f3a70662..1afb57ae5b 100644 --- a/core/core-frontend/src/store/modules/data-visualization/dvMain.ts +++ b/core/core-frontend/src/store/modules/data-visualization/dvMain.ts @@ -31,6 +31,7 @@ import { filterParamsOptions } from '@/utils/componentUtils' import { formatterItem } from '@/views/chart/components/js/formatter' +import { reRenderAfterDelete } from '@/custom-component/v-query/QueryUtils' const { t } = useI18n() export const dvMainStore = defineStore('dataVisualization', { @@ -594,8 +595,11 @@ export const dvMainStore = defineStore('dataVisualization', { } if (/\d/.test(index)) { + const deletedComponent = componentData[index] this.curComponentIndex = null componentData.splice(index, 1) + // VQuery 组件 + deletedComponent?.component === 'VQuery' && reRenderAfterDelete(deletedComponent.propValue) } }, updateCurDvInfo(dvInfo) {