From d78351ddea4bac352f63cfa383e11d5e3deb8e1f Mon Sep 17 00:00:00 2001 From: dataeaseShu Date: Mon, 11 Mar 2024 18:38:36 +0800 Subject: [PATCH] =?UTF-8?q?fix(=E6=9F=A5=E8=AF=A2=E7=BB=84=E4=BB=B6):=20?= =?UTF-8?q?=E6=97=A5=E6=9C=9F=E7=AD=9B=E9=80=89=E7=BB=84=E4=BB=B6=E5=8F=AF?= =?UTF-8?q?=E8=AE=BE=E7=BD=AE=E6=9F=A5=E8=AF=A2=E7=9A=84=E8=B5=B7=E5=A7=8B?= =?UTF-8?q?=E6=97=A5=E6=9C=9F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../v-query/DynamicTimeFiltering.vue | 145 ++++++ .../v-query/DynamicTimeRange.vue | 2 +- .../v-query/DynamicTimeRangeFiltering.vue | 137 +++++ .../v-query/QueryConditionConfiguration.vue | 69 ++- .../v-query/RangeFilterTime.vue | 486 ++++++++++++++++++ .../custom-component/v-query/time-format.ts | 17 +- 6 files changed, 850 insertions(+), 6 deletions(-) create mode 100644 core/core-frontend/src/custom-component/v-query/DynamicTimeFiltering.vue create mode 100644 core/core-frontend/src/custom-component/v-query/DynamicTimeRangeFiltering.vue create mode 100644 core/core-frontend/src/custom-component/v-query/RangeFilterTime.vue diff --git a/core/core-frontend/src/custom-component/v-query/DynamicTimeFiltering.vue b/core/core-frontend/src/custom-component/v-query/DynamicTimeFiltering.vue new file mode 100644 index 0000000000..391a6be21f --- /dev/null +++ b/core/core-frontend/src/custom-component/v-query/DynamicTimeFiltering.vue @@ -0,0 +1,145 @@ + + + diff --git a/core/core-frontend/src/custom-component/v-query/DynamicTimeRange.vue b/core/core-frontend/src/custom-component/v-query/DynamicTimeRange.vue index 1c30ea34a3..07f4900409 100644 --- a/core/core-frontend/src/custom-component/v-query/DynamicTimeRange.vue +++ b/core/core-frontend/src/custom-component/v-query/DynamicTimeRange.vue @@ -1,5 +1,5 @@ + + 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 bf622cbe69..ea771f4b2a 100644 --- a/core/core-frontend/src/custom-component/v-query/QueryConditionConfiguration.vue +++ b/core/core-frontend/src/custom-component/v-query/QueryConditionConfiguration.vue @@ -19,6 +19,7 @@ import DynamicTimeRange from './DynamicTimeRange.vue' import { getDatasetTree } from '@/api/dataset' import { Tree } from '@/views/visualized/data/dataset/form/CreatDsGroup.vue' import draggable from 'vuedraggable' +import RangeFilterTime from './RangeFilterTime.vue' const { t } = useI18n() const dvMainStore = dvMainStoreWithOut() @@ -120,7 +121,11 @@ const { queryElement } = toRefs(props) const getDetype = (id, arr) => { return arr.find(ele => ele.id === id)?.deType } - +const visiblePopover = ref(false) +const handleVisiblePopover = ev => { + ev.stopPropagation() + visiblePopover.value = !visiblePopover.value +} const showConfiguration = computed(() => { if (!curComponent.value) return false if (!curComponent.value.checkedFields?.length) return false @@ -162,6 +167,7 @@ const handleCheckAllChange = (val: boolean) => { isIndeterminate.value = false } const handleCheckedFieldsChange = (value: string[]) => { + handleDialogClick() const checkedCount = value.length checkAll.value = checkedCount === fields.value.length isIndeterminate.value = checkedCount > 0 && checkedCount < fields.value.length @@ -194,6 +200,7 @@ const setType = () => { } const setTypeChange = () => { + handleDialogClick() nextTick(() => { curComponent.value.field.id = '' inputCom.value?.displayTypeChange?.() @@ -496,7 +503,21 @@ const parameterCompletion = () => { timeNumRange: 0, relativeToCurrentTypeRange: 'year', aroundRange: 'f', - arbitraryTimeRange: new Date() + arbitraryTimeRange: new Date(), + timeRange: { + intervalType: 'none', + dynamicWindow: false, + maximumSingleQuery: 0, + regularOrTrends: 'fixed', + regularOrTrendsValue: '', + relativeToCurrent: 'custom', + timeNum: 0, + relativeToCurrentType: 'year', + around: 'f', + timeNumRange: 0, + relativeToCurrentTypeRange: 'year', + aroundRange: 'f' + } } Object.entries(attributes).forEach(([key, val]) => { !curComponent.value[key] && (curComponent.value[key] = val) @@ -504,6 +525,7 @@ const parameterCompletion = () => { } const handleCondition = item => { + handleDialogClick() if (activeConditionForRename.id) return activeCondition.value = item.id curComponent.value = conditions.value.find(ele => ele.id === item.id) @@ -557,7 +579,9 @@ const showError = computed(() => { } return (optionValueSource === 1 && !field.id) || (optionValueSource === 2 && !valueSource.length) }) - +const handleDialogClick = () => { + visiblePopover.value = false +} const relativeToCurrentList = computed(() => { let list = [] if (!curComponent.value) return list @@ -682,6 +706,7 @@ const timeGranularityChange = (val: string) => { } const timeGranularityMultipleChange = (val: string) => { + handleDialogClick() if ( ['yearrange', 'monthrange', 'datetimerange'].indexOf(val) < ['year', 'month', 'date'].indexOf(curComponent.value.relativeToCurrentType) @@ -797,7 +822,7 @@ defineExpose({ @mousedown.stop @mousedup.stop > -
+
查询条件 @@ -1186,6 +1211,35 @@ defineExpose({
+
+
+ +
+
+ + + + + 已配置 +
+
@@ -1616,6 +1670,13 @@ defineExpose({ border-radius: 2px; background: rgba(31, 35, 41, 0.1); margin-left: 8px; + + &.range-filter-time-flag { + display: inline-block; + padding: 1px 4px; + line-height: 14px; + margin-left: 4px; + } } .flex-align-center { diff --git a/core/core-frontend/src/custom-component/v-query/RangeFilterTime.vue b/core/core-frontend/src/custom-component/v-query/RangeFilterTime.vue new file mode 100644 index 0000000000..4d8c91ac42 --- /dev/null +++ b/core/core-frontend/src/custom-component/v-query/RangeFilterTime.vue @@ -0,0 +1,486 @@ + + + + + + diff --git a/core/core-frontend/src/custom-component/v-query/time-format.ts b/core/core-frontend/src/custom-component/v-query/time-format.ts index 1705023e75..8d0bee32cd 100644 --- a/core/core-frontend/src/custom-component/v-query/time-format.ts +++ b/core/core-frontend/src/custom-component/v-query/time-format.ts @@ -219,8 +219,23 @@ function getDynamicRange({ return selectValue } - +interface TimeRange { + intervalType: string + dynamicWindow: boolean + maximumSingleQuery: number + regularOrTrends: string + regularOrTrendsValue: string + relativeToCurrent: string + timeNum: number + relativeToCurrentType: string + around: string + timeNumRange: number + relativeToCurrentTypeRange: string + aroundRange: string + timeGranularityMultiple: string +} export { + TimeRange, getThisYear, getLastYear, getThisMonth,