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 3b5975a713..3d3e267168 100644 --- a/core/core-frontend/src/custom-component/v-query/Component.vue +++ b/core/core-frontend/src/custom-component/v-query/Component.vue @@ -253,11 +253,13 @@ const releaseSelect = id => { } const getKeyList = next => { - let checkedFieldsMapArr = Object.entries(next.checkedFieldsMap) + let checkedFieldsMapArr = Object.entries(next.checkedFieldsMap).filter(ele => + next.checkedFields.includes(ele[0]) + ) if (next.displayType === '9') { checkedFieldsMapArr = ( next.treeCheckedList?.length - ? next.treeCheckedList + ? next.treeCheckedList.filter((_, index) => index < next.treeFieldList.length) : next.treeFieldList.map(() => { return { checkedFields: [...next.checkedFields], @@ -265,13 +267,12 @@ const getKeyList = next => { } }) ) - .map(item => Object.entries(item.checkedFieldsMap)) + .map(item => + Object.entries(item.checkedFieldsMap).filter(ele => item.checkedFields.includes(ele[0])) + ) .flat() } - return checkedFieldsMapArr - .filter(ele => next.checkedFields.includes(ele[0])) - .filter(ele => !!ele[1]) - .map(ele => ele[0]) + return checkedFieldsMapArr.filter(ele => !!ele[1]).map(ele => ele[0]) } const queryDataForId = id => { let requiredName = '' diff --git a/core/core-frontend/src/custom-component/v-query/QueryConditionConfiguration.vue b/core/core-frontend/src/custom-component/v-query/QueryConditionConfiguration.vue index fa9c44cf72..85cbc9ecf7 100644 --- a/core/core-frontend/src/custom-component/v-query/QueryConditionConfiguration.vue +++ b/core/core-frontend/src/custom-component/v-query/QueryConditionConfiguration.vue @@ -335,6 +335,7 @@ const handleCheckedFieldsChangeTree = (value: string[]) => { isIndeterminate.value = checkedCount > 0 && checkedCount < fields.value.length setSameId() if (curComponent.value.displayType === '8') return + setTreeDefault() setType() } @@ -482,6 +483,26 @@ const timeTypeChange = () => { timeDialogShow.value = false } +const setTreeDefault = () => { + if (curComponent.value.displayType !== '9') return + if (!!curComponent.value.checkedFields.length) { + let tableId = '' + fields.value.forEach(ele => { + if ( + curComponent.value.checkedFields.includes(ele.componentId) && + curComponent.value.checkedFieldsMap[ele.componentId] && + !tableId + ) { + tableId = datasetFieldList.value.find(itx => itx.id === ele.componentId)?.tableId + } + }) + if (tableId && !curComponent.value.treeDatasetId) { + curComponent.value.treeDatasetId = tableId + getOptions(curComponent.value.treeDatasetId, curComponent.value) + } + } +} + const numTypeChange = () => { if (!curComponent.value.checkedFieldsMapArrNum[currentComponentId]) { curComponent.value.checkedFieldsMapArrNum[currentComponentId] = [] @@ -687,6 +708,7 @@ const setParameters = field => { if (notChangeType) return setType() + setTreeDefault() } const setType = () => { @@ -747,6 +769,7 @@ const setTypeChange = () => { ) { curComponent.value.timeGranularityMultiple = curComponent.value.timeGranularity } + setTreeDefault() }) } @@ -1155,7 +1178,23 @@ const validate = () => { return true } + if ( + ele.displayType === '0' && + ele.defaultValueCheck && + ((Array.isArray(ele.defaultValue) && !ele.defaultValue.length) || !ele.defaultValue) + ) { + ElMessage.error(t('report.filter.title')) + return true + } + if (ele.displayType === '9') { + if ( + ele.defaultValueCheck && + ((Array.isArray(ele.defaultValue) && !ele.defaultValue.length) || !ele.defaultValue) + ) { + ElMessage.error(t('report.filter.title')) + return true + } if (!ele.treeDatasetId) { ElMessage.error(t('data_set.dataset_cannot_be')) return true @@ -1401,10 +1440,6 @@ const validate = () => { return false } - if ([1].includes(+ele.displayType)) { - return false - } - if ( ele.displayType !== '9' && ele.optionValueSource === 2 && @@ -1427,6 +1462,7 @@ const handleBeforeClose = () => { defaultConfigurationRef.value?.mult() defaultConfigurationRef.value?.single() handleDialogClick() + curComponent.value.id = '' dialogVisible.value = false } const emits = defineEmits(['queryData']) @@ -1765,6 +1801,7 @@ const handleCondition = (item, idx = 0) => { nextTick(() => { if (curComponent.value.displayType === '9') { handleRelationshipChart(idx) + getOptions(curComponent.value.treeDatasetId, curComponent.value) } curComponent.value.showError = showError.value curComponent.value.auto && (document.querySelector('.chart-field').scrollTop = 0) @@ -3660,7 +3697,7 @@ defineExpose({ .field-tree_name { margin-left: 8px; - max-width: 100px; + width: 100px; } .field-relationship_chart { diff --git a/core/core-frontend/src/custom-component/v-query/Tree.vue b/core/core-frontend/src/custom-component/v-query/Tree.vue index f095051e19..40b3eb74a1 100644 --- a/core/core-frontend/src/custom-component/v-query/Tree.vue +++ b/core/core-frontend/src/custom-component/v-query/Tree.vue @@ -88,14 +88,14 @@ const handleValueChange = () => { config.value.defaultValue = value } +const changeFromId = ref(false) watch( - () => config.value.defaultValue, - val => { - if (config.value.multiple) { - treeValue.value = Array.isArray(val) ? [...val] : val - } + () => config.value.id, + () => { + changeFromId.value = true + init() nextTick(() => { - multiple.value = config.value.multiple + changeFromId.value = false }) } ) @@ -103,13 +103,17 @@ watch( watch( () => config.value.treeFieldList, () => { + if (changeFromId.value) return treeValue.value = config.value.multiple ? [] : undefined + config.value.defaultValue = config.value.multiple ? [] : undefined + config.value.selectValue = config.value.multiple ? [] : undefined showOrHide.value = false getTreeOption() } ) const init = () => { + loading.value = true const { defaultValueCheck, multiple: plus, defaultValue } = config.value if (defaultValueCheck) { config.value.selectValue = Array.isArray(defaultValue) @@ -126,12 +130,6 @@ const init = () => { getTreeOption() } -watch( - () => config.value.id, - () => { - init() - } -) const showOrHide = ref(true) const queryConditionWidth = inject('com-width', Function, true) const isConfirmSearch = inject('is-confirm-search', Function, true) @@ -151,7 +149,7 @@ const showWholePath = ref(false) watch( () => config.value.multiple, val => { - if (!props.isConfig) return + if (!props.isConfig || changeFromId.value) return showWholePath.value = false if (val) { treeValue.value = [] diff --git a/core/core-frontend/src/custom-component/v-query/TreeFieldDialog.vue b/core/core-frontend/src/custom-component/v-query/TreeFieldDialog.vue index f26dba7046..1d3671b9c7 100644 --- a/core/core-frontend/src/custom-component/v-query/TreeFieldDialog.vue +++ b/core/core-frontend/src/custom-component/v-query/TreeFieldDialog.vue @@ -39,7 +39,7 @@ const cancelClick = () => { const setCascadeArrBack = () => { let isError = false const arr = cloneDeep(treeList.value).map(item => { - if (!item.field) { + if (!item.field?.id) { isError = true } return item.field diff --git a/core/core-frontend/src/hooks/web/useFilter.ts b/core/core-frontend/src/hooks/web/useFilter.ts index 9d7aa1d30d..dd1114a574 100644 --- a/core/core-frontend/src/hooks/web/useFilter.ts +++ b/core/core-frontend/src/hooks/web/useFilter.ts @@ -290,7 +290,8 @@ export const searchQuery = (queryComponentList, filter, curComponentId, firstLoa item.treeCheckedList.forEach((itx, idx) => { if ( itx.checkedFields.includes(curComponentId) && - itx.checkedFieldsMap[curComponentId] + itx.checkedFieldsMap[curComponentId] && + idx < item.treeFieldList.length ) { relationshipChartIndex.push(idx) }