From 5a028173b5778304127e20a2c75464f3baa010dd Mon Sep 17 00:00:00 2001 From: xuwei-fit2cloud Date: Wed, 21 Jan 2026 17:06:06 +0800 Subject: [PATCH 1/2] update: xpack index --- de-xpack | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/de-xpack b/de-xpack index 0641b18562..42a1c22217 160000 --- a/de-xpack +++ b/de-xpack @@ -1 +1 @@ -Subproject commit 0641b1856238481e41ac59204dd90183c0c19830 +Subproject commit 42a1c2221749e2e847ce7466e8e8a7d570da2ffa From a580960878d5ca2cf2c2d8e97d060a9e5407a8ef 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, 21 Jan 2026 17:09:32 +0800 Subject: [PATCH 2/2] =?UTF-8?q?refactor:=20=E4=BC=98=E5=8C=96=E6=89=8B?= =?UTF-8?q?=E5=8A=A8=E8=BE=93=E5=85=A5=E8=BF=87=E6=BB=A4=E7=BB=84=E4=BB=B6?= =?UTF-8?q?=E5=A4=87=E9=80=89=E9=A1=B9=E9=BB=98=E8=AE=A4=E5=80=BC=E5=8C=B9?= =?UTF-8?q?=E9=85=8D=E6=96=B9=E5=BC=8F=20(#17850)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/custom-component/v-query/Select.vue | 74 +++++++++++++------ 1 file changed, 52 insertions(+), 22 deletions(-) diff --git a/core/core-frontend/src/custom-component/v-query/Select.vue b/core/core-frontend/src/custom-component/v-query/Select.vue index 2353cb72a7..323863f64a 100644 --- a/core/core-frontend/src/custom-component/v-query/Select.vue +++ b/core/core-frontend/src/custom-component/v-query/Select.vue @@ -304,19 +304,7 @@ const handleFieldIdDefaultChange = (val: string[]) => { ? [...selectValue.value] : selectValue.value } - if (config.value?.required && config.value?.optionFilter?.length > 0) { - const isValid = selectValue.value?.some(value => - options.value?.some(option => option.value === value) - ) - if (!isValid) { - config.value.selectValue = null - ElMessage({ - message: `【${config.value?.name}】${t('v_query.before_querying')}`, - type: 'error', - duration: 3000 - }) - } - } + requiredComp() if (options.value) setEmptyData() }) } @@ -642,6 +630,36 @@ watch( } ) +const requiredComp = () => { + if (config.value?.required && config.value?.optionFilter?.length > 0) { + const isValid = hasIntersection(options.value, selectValue.value) + if (!isValid) { + config.value.selectValue = null + ElMessage({ + message: `【${config.value?.name}】${t('v_query.before_querying')}`, + type: 'error', + duration: 3000 + }) + } + } +} + +const hasIntersection = (options, selectValue) => { + if (!Array.isArray(options) || options.length === 0) { + return false + } + if (selectValue == null) { + return false + } + const selectedValues = Array.isArray(selectValue) ? selectValue : [selectValue] + if (selectedValues.length === 0) { + return false + } + const optionValues = options.map(option => option.value) + + return selectedValues.some(value => optionValues.includes(value)) +} + const setOptions = (num: number) => { if (num !== config.value.optionValueSource) return const { @@ -682,16 +700,28 @@ const setOptions = (num: number) => { break case 2: options.value = cloneDeep( - (valueSource || []).map(ele => { - return { - label: `${ele}`, - value: `${ele}`, - checked: Array.isArray(selectValue.value) - ? selectValue.value.includes(`${ele}`) - : selectValue.value === ele - } - }) + (valueSource || []) + .filter(ele => { + return ( + ele !== null && + ((config.value.optionFilter && + config.value.optionFilter.length > 0 && + config.value.optionFilter.includes(ele)) || + !config.value.optionFilter || + config.value.optionFilter.length === 0) + ) + }) + .map(ele => { + return { + label: `${ele}`, + value: `${ele}`, + checked: Array.isArray(selectValue.value) + ? selectValue.value.includes(`${ele}`) + : selectValue.value === ele + } + }) ) + requiredComp() setEmptyData() break default: