From a53c0d4bdb0535199ab0e9ade17a7d6dd6118dbe Mon Sep 17 00:00:00 2001 From: jianneng-fit2cloud Date: Tue, 3 Dec 2024 21:38:10 +0800 Subject: [PATCH] =?UTF-8?q?fix(=E5=9B=BE=E8=A1=A8):=20=E4=BF=AE=E5=A4=8D?= =?UTF-8?q?=E6=9B=B4=E6=96=B0=E5=9B=BE=E8=A1=A8=E6=95=B0=E6=8D=AE=E6=97=B6?= =?UTF-8?q?=EF=BC=8C=E5=AD=98=E5=9C=A8=E5=9B=BE=E8=A1=A8=E5=86=85=E5=AE=B9?= =?UTF-8?q?=E4=B8=8D=E6=98=BE=E7=A4=BA=E7=9A=84=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../views/chart/components/views/index.vue | 67 +++++++++++++------ 1 file changed, 45 insertions(+), 22 deletions(-) diff --git a/core/core-frontend/src/views/chart/components/views/index.vue b/core/core-frontend/src/views/chart/components/views/index.vue index a7d0e15b19..deb0783458 100644 --- a/core/core-frontend/src/views/chart/components/views/index.vue +++ b/core/core-frontend/src/views/chart/components/views/index.vue @@ -617,6 +617,8 @@ onBeforeMount(() => { const listenerEnable = computed(() => { return !showPosition.value.includes('viewDialog') }) +// 存储所有数据集字段,用于判断图表拖入的字段是否存在 +const viewAllDatasetFields = new Map() const showEmpty = ref(false) const checkFieldIsAllowEmpty = (allField?) => { showEmpty.value = false @@ -632,47 +634,68 @@ const checkFieldIsAllowEmpty = (allField?) => { return } const axisConfigMap = new Map(Object.entries(chartView.axisConfig)) - // 验证拖入的字段是否包含在当前数据集字段中,如果一个都不在数据集字段中,则显示空图表 + // 验证拖入的字段是否包含在当前数据集字段中,如果有一个不在数据集字段中,则显示空图表 let includeDatasetField = false if (allField && allField.length > 0) { - axisConfigMap.forEach((value, key) => { - if (view.value?.[key]?.length > 0) { - view.value[key].forEach(item => { - if (!allField.find(field => field.id === item.id)) { - includeDatasetField = true - return false - } - }) - if (includeDatasetField) { - return false + viewAllDatasetFields.set(view.value.id, allField) + outerLoop: for (const [key, value] of axisConfigMap) { + // 只判断必须的 + if (value['allowEmpty']) continue + if (!view.value?.[key]?.length) continue + for (const item of view.value[key]) { + if (!allField.find(field => field.id === item.id)) { + includeDatasetField = true + break outerLoop } } - }) + } } if (includeDatasetField) { showEmpty.value = true return } - axisConfigMap.forEach((value, key) => { - // 不允许为空,并且没限制长度 - if (!value['allowEmpty'] && !value['limit'] && view.value?.[key]?.length === 0) { - showEmpty.value = true - return false + for (const [key, value] of axisConfigMap) { + // 跳过允许为空的配置项 + if (value['allowEmpty']) continue + + // 如果有数据集字段并且字段值存在且不为空 + if (viewAllDatasetFields.get(view.value?.id)) { + if (!view.value?.[key]?.length) continue + // 检查图表字段是否有不在数据集中 + for (const item of view.value[key]) { + if (!viewAllDatasetFields.get(view.value?.id).find(field => field.id === item.id)) { + includeDatasetField = true + break + } + } + // 如果有不在数据集中 + if (includeDatasetField) { + showEmpty.value = true + break + } } - // 不允许为空, 限制长度 + + // 如果没有限制长度,且值为空,标记为空并跳出 + if (!value['limit'] && view.value?.[key]?.length === 0) { + showEmpty.value = true + break + } + + // 如果有限制长度,且字段长度不足,标记为空并跳出 if ( - !value['allowEmpty'] && value['limit'] && (!view.value?.[key] || view.value?.[key]?.length < parseInt(value['limit'])) ) { showEmpty.value = true - return false + break } + + // 如果是table-info类型且字段为空,标记为空并跳出 if (view.value?.type === 'table-info' && view.value?.[key]?.length === 0) { showEmpty.value = true - return false + break } - }) + } } } const changeChartType = () => {