diff --git a/core/core-frontend/package.json b/core/core-frontend/package.json index 673abee0e9..71aeda025a 100644 --- a/core/core-frontend/package.json +++ b/core/core-frontend/package.json @@ -25,7 +25,7 @@ "axios": "^1.3.3", "crypto-js": "^4.1.1", "dayjs": "^1.11.9", - "element-plus-secondary": "^0.5.8", + "element-plus-secondary": "^0.5.9", "element-resize-detector": "^1.2.4", "file-saver": "^2.0.5", "flv.js": "^1.6.2", 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 4eee3ecf30..b6eef02194 100644 --- a/core/core-frontend/src/custom-component/v-query/QueryConditionConfiguration.vue +++ b/core/core-frontend/src/custom-component/v-query/QueryConditionConfiguration.vue @@ -108,22 +108,11 @@ const isIndeterminate = ref(false) const datasetTree = shallowRef([]) const fields = ref() const parameters = ref([]) -const parametersFilter = computed(() => { - return parameters.value.filter(ele => { - if (curComponent.value.displayType === '2') { - return [2, 3].includes(ele.deType) - } - if (curComponent.value.displayType === '7') { - return [1, 7].includes(ele.deType) - } - return ele.deType === +curComponent.value.displayType - }) -}) const { queryElement } = toRefs(props) const getDetype = (id, arr) => { - return arr.find(ele => ele.id === id)?.deType + return arr.flat().find(ele => ele.id === id)?.deType } const visiblePopover = ref(false) const handleVisiblePopover = ev => { @@ -142,11 +131,19 @@ const showTypeError = computed(() => { if (!curComponent.value) return false if (!curComponent.value.checkedFields?.length) return false if (!fields.value?.length) return false + if (!!curComponent.value.parameters.length) { + const timeArr = curComponent.value.parameters.map(ele => ele.type[1]) + if (timeArr.length !== new Set(timeArr).size) { + return true + } + } let displayTypeField = null return curComponent.value.checkedFields.some(id => { const arr = fields.value.find(ele => ele.componentId === id) const checkId = curComponent.value.checkedFieldsMap?.[id] - const field = (arr?.list || []).find(ele => checkId === ele.id) + const field = Object.values(arr?.fields || {}) + .flat() + .find(ele => checkId === ele.id) if (!field) return false if (displayTypeField === null) { displayTypeField = field?.deType @@ -181,12 +178,32 @@ const handleCheckedFieldsChange = (value: string[]) => { const inputCom = ref() +const setParameters = () => { + const fieldArr = Object.values(curComponent.value.checkedFieldsMap).filter(ele => !!ele) + curComponent.value.parameters = fields.value + .map(ele => Object.values(ele?.fields || {}).flat()) + .flat() + .filter(ele => fieldArr.includes(ele.id) && !!ele.variableName) + nextTick(() => { + if (isTimeParameter.value) { + curComponent.value.timeGranularity = typeTimeMap[curComponent.value.parameters[0].type[1]] + } + + if (!!curComponent.value.parameters.length) { + curComponent.value.conditionType = 0 + } + }) + setType() +} + const setType = () => { if (curComponent.value.checkedFields?.length) { const [id] = curComponent.value.checkedFields const arr = fields.value.find(ele => ele.componentId === id) const checkId = curComponent.value.checkedFieldsMap?.[id] - const field = (arr?.list || []).find(ele => checkId === ele.id) + const field = Object.values(arr?.fields || {}) + .flat() + .find(ele => checkId === ele.id) if (field?.deType !== undefined) { let displayType = curComponent.value.displayType @@ -220,6 +237,47 @@ const setTypeChange = () => { }) } +const isTimeParameter = computed(() => { + return curComponent.value.parameters?.some(ele => ele.deType === 1 && !!ele.variableName) +}) + +const timeList = [ + { + label: '年', + value: 'year' + }, + { + label: '年月', + value: 'month' + }, + { + label: '年月日', + value: 'date' + }, + { + label: '年月日时分秒', + value: 'datetime' + } +] + +const typeTimeMap = { + 'DATETIME-YEAR': 'year', + 'YYYY-MM': 'month', + 'YYYY/MM': 'month', + 'YYYY-MM-DD': 'date', + 'YYYY/MM/DD': 'date', + 'YYYY-MM-DD HH:mm:ss': 'datetime', + 'YYYY/MM/DD HH:mm:ss': 'datetime' +} + +const timeParameterList = computed(() => { + if (!isTimeParameter.value) return timeList + const [_, y] = curComponent.value.parameters?.filter( + ele => ele.deType === 1 && !!ele.variableName + )[0].type + return timeList.filter(ele => ele.value === typeTimeMap[y]) +}) + const cancelClick = () => { visiblePopover.value = false dialogVisible.value = false @@ -542,7 +600,9 @@ const validate = () => { ele.checkedFields.some(id => { const arr = fields.value.find(itx => itx.componentId === id) const checkId = ele.checkedFieldsMap?.[id] - const field = (arr?.list || []).find(itx => checkId === itx.id) + const field = Object.values(arr?.fields || {}) + .flat() + .find(itx => checkId === itx.id) if (!field) return false if (displayTypeField === null) { displayTypeField = field?.deType @@ -642,14 +702,6 @@ const init = (queryId: string) => { const datasetMapKeyList = Object.keys(datasetMap) - nextTick(() => { - getSqlParams([ - ...new Set(datasetFieldList.value.map(ele => ele.tableId).filter(ele => !!ele)) - ]).then(res => { - parameters.value = res || [] - }) - }) - if (datasetFieldIdList.every(ele => datasetMapKeyList.includes(ele))) { fields.value = datasetFieldList.value .map(ele => { @@ -660,15 +712,14 @@ const init = (queryId: string) => { } const params = [...new Set(datasetFieldList.value.map(ele => ele.tableId).filter(ele => !!ele))] if (!params.length) return - getDsDetailsWithPerm(params) - .then(res => { - res - .filter(ele => !!ele) - .forEach(ele => { - const { dimensionList, quotaList } = ele.fields - ele.list = [...dimensionList, ...quotaList] - datasetMap[ele.id] = ele - }) + Promise.all([getDsDetailsWithPerm(params), getSqlParams(params)]) + .then(([dq, p]) => { + dq.filter(ele => !!ele).forEach(ele => { + ele.activelist = 'dimensionList' + ele.fields.parameterList = p.filter(itx => itx.datasetGroupId === ele.id) + ele.hasParameter = !!ele.fields.parameterList.length + datasetMap[ele.id] = ele + }) fields.value = datasetFieldList.value .map(ele => { if (!datasetMap[ele.tableId]) return null @@ -1169,9 +1220,10 @@ defineExpose({ > {{ field.name }} + @@ -1209,8 +1278,8 @@ defineExpose({ :className="`field-icon-${fieldType[ele.deType]}`" > - - {{ ele.name }} + + {{ ele.name || ele.variableName }} @@ -1276,7 +1345,7 @@ defineExpose({
时间粒度
-