diff --git a/core/core-frontend/src/custom-component/v-query/ConditionDefaultConfiguration.vue b/core/core-frontend/src/custom-component/v-query/ConditionDefaultConfiguration.vue index 9a9fc4966e..056f788416 100644 --- a/core/core-frontend/src/custom-component/v-query/ConditionDefaultConfiguration.vue +++ b/core/core-frontend/src/custom-component/v-query/ConditionDefaultConfiguration.vue @@ -3,6 +3,7 @@ import icon_admin_outlined from '@/assets/svg/icon_admin_outlined.svg' import { ElSelect } from 'element-plus-secondary' import { computed, ref, toRefs } from 'vue' import RangeFilterTime from '@/custom-component/v-query/RangeFilterTime.vue' +import FilterTime from '@/custom-component/v-query/FilterTime.vue' import { useI18n } from '@/hooks/web/useI18n' import DynamicTime from '@/custom-component/v-query/DynamicTime.vue' import DynamicTimeRange from '@/custom-component/v-query/DynamicTimeRange.vue' @@ -408,7 +409,7 @@ defineExpose({ -
+
@@ -435,9 +436,15 @@ defineExpose({ + +import type { DatePickType } from 'element-plus-secondary' +import { toRefs, computed } from 'vue' +import { type TimeRange } from './time-format' +import { useI18n } from '@/hooks/web/useI18n' +import DynamicTime from './DynamicTimeFiltering.vue' +import DynamicTimeRange from './DynamicTimeRangeFiltering.vue' +const props = withDefaults( + defineProps<{ + timeRange: TimeRange + timeGranularity: DatePickType + }>(), + { + timeRange: () => ({ + intervalType: 'none', + dynamicWindow: false, + maximumSingleQuery: 0, + regularOrTrends: 'fixed', + relativeToCurrentRange: 'custom', + regularOrTrendsValue: '', + relativeToCurrent: 'custom', + timeNum: 0, + relativeToCurrentType: 'year', + around: 'f', + timeNumRange: 0, + relativeToCurrentTypeRange: 'year', + aroundRange: 'f' + }), + timeGranularity: 'year' + } +) + +const { t } = useI18n() +const intervalTypeList = [ + { + label: t('chart.line_symbol_none'), + value: 'none' + }, + { + label: t('v_query.start_at'), + value: 'start' + }, + { + label: t('v_query.end_at'), + value: 'end' + }, + { + label: t('v_query.time_interval'), + value: 'timeInterval' + } +] + +const regularOrTrendsTitle = computed(() => { + return intervalTypeList.find(ele => ele.value === timeRange.value.intervalType).label +}) +const { timeRange } = toRefs(props) +const dynamicTime = computed(() => { + return timeRange.value.regularOrTrends !== 'fixed' +}) +const filterTypeCom = computed(() => { + const { intervalType } = timeRange.value + return intervalType === 'timeInterval' ? DynamicTimeRange : DynamicTime +}) +const timeGranularityMultiple = computed(() => { + return (props.timeGranularity + 'range') as DatePickType +}) +const aroundList = [ + { + label: t('dynamic_time.before'), + value: 'f' + }, + { + label: t('dynamic_time.after'), + value: 'b' + } +] +const relativeToCurrentTypeList = computed(() => { + if (!timeRange.value) return [] + let index = ['year', 'month', 'date', 'datetime'].indexOf(props.timeGranularity) + 1 + return [ + { + label: t('dynamic_time.year'), + value: 'year' + }, + { + label: t('dynamic_time.month'), + value: 'month' + }, + { + label: t('dynamic_time.date'), + value: 'day' + } + ].slice(0, index) +}) + +const relativeToCurrentList = computed(() => { + let list = [] + if (!timeRange.value) return list + switch (props.timeGranularity) { + case 'year': + list = [ + { + label: t('dynamic_year.current'), + value: 'thisYear' + }, + { + label: t('dynamic_year.last'), + value: 'lastYear' + } + ] + break + case 'month': + list = [ + { + label: t('cron.this_month'), + value: 'thisMonth' + }, + { + label: t('dynamic_month.last'), + value: 'lastMonth' + } + ] + break + case 'date': + list = [ + { + label: t('dynamic_time.today'), + value: 'today' + }, + { + label: t('dynamic_time.yesterday'), + value: 'yesterday' + }, + { + label: t('dynamic_time.firstOfMonth'), + value: 'monthBeginning' + }, + { + label: t('dynamic_time.firstOfYear'), + value: 'yearBeginning' + } + ] + break + case 'datetime': + list = [ + { + label: t('dynamic_time.today'), + value: 'today' + }, + { + label: t('dynamic_time.yesterday'), + value: 'yesterday' + }, + { + label: t('dynamic_time.firstOfMonth'), + value: 'monthBeginning' + }, + { + label: t('dynamic_time.firstOfYear'), + value: 'yearBeginning' + } + ] + break + + default: + break + } + + return [ + ...list, + { + label: t('dynamic_time.custom'), + value: 'custom' + } + ] +}) + +const relativeToCurrentListRange = computed(() => { + let list = [] + if (!timeRange.value) return list + switch (props.timeGranularity) { + case 'year': + list = [ + { + label: t('dynamic_year.current'), + value: 'thisYear' + }, + { + label: t('dynamic_year.last'), + value: 'lastYear' + } + ] + break + case 'month': + list = [ + { + label: t('cron.this_month'), + value: 'thisMonth' + }, + { + label: t('dynamic_month.dynamic_month'), + value: 'lastMonth' + }, + { + label: t('v_query.last_3_months'), + value: 'LastThreeMonths' + }, + { + label: t('v_query.last_6_months'), + value: 'LastSixMonths' + }, + { + label: t('v_query.last_12_months'), + value: 'LastTwelveMonths' + } + ] + break + case 'date': + case 'datetime': + list = [ + { + label: t('dynamic_time.today'), + value: 'today' + }, + { + label: t('dynamic_time.yesterday'), + value: 'yesterday' + }, + { + label: t('v_query.last_3_days'), + value: 'LastThreeDays' + }, + { + label: t('v_query.month_to_date'), + value: 'monthBeginning' + }, + { + label: t('v_query.year_to_date'), + value: 'yearBeginning' + } + ] + break + + default: + break + } + + return [ + ...list, + { + label: t('dynamic_time.custom'), + value: 'custom' + } + ] +}) + + + + + + diff --git a/core/core-frontend/src/custom-component/v-query/Time.vue b/core/core-frontend/src/custom-component/v-query/Time.vue index 5db223c6e0..cf9eac8136 100644 --- a/core/core-frontend/src/custom-component/v-query/Time.vue +++ b/core/core-frontend/src/custom-component/v-query/Time.vue @@ -443,6 +443,8 @@ const formatDate = computed(() => { v-else :key="config.timeGranularity + 1" v-model="selectValue" + @visible-change="visibleChange" + :disabled-date="disabledDate" :type="config.timeGranularity" @change="handleValueChange" :style="selectStyle" 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 1655625485..de6f7eecaa 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 @@ -240,7 +240,7 @@ interface TimeRange { timeNumRange: number relativeToCurrentTypeRange: ManipulateType aroundRange: string - timeGranularityMultiple: string + timeGranularityMultiple?: string } export { TimeRange,