Commit b97fe8733b898389f7d7ed69868cba8b5ed69af4
Merge branch 'perf/daterange' into 'main_dev'
perf: 优化时期选择起始时间范围 See merge request yunteng/thingskit-view!231
Showing
2 changed files
with
40 additions
and
29 deletions
@@ -74,9 +74,10 @@ export const useChartDataFetch = ( | @@ -74,9 +74,10 @@ export const useChartDataFetch = ( | ||
74 | const {requestParams} = toRaw(targetComponent.request) | 74 | const {requestParams} = toRaw(targetComponent.request) |
75 | const {Params} = requestParams | 75 | const {Params} = requestParams |
76 | const {entityType, startTs, endTs} = Params | 76 | const {entityType, startTs, endTs} = Params |
77 | - const days = Math.ceil(((endTs as unknown as number) - (startTs as unknown as number)) / (1 * 60 * 60 * 24 * 1000)) | 77 | + let days = Math.ceil(((endTs as unknown as number) - (startTs as unknown as number)) / (1 * 60 * 60 * 24 * 1000)) |
78 | if (entityType === 'DEVICE') { | 78 | if (entityType === 'DEVICE') { |
79 | - startTsValue = Date.now() - (days <= 32 ? 2592000000 : days <= 8 ? 604800000 : days <= 2 ? 86400000 : startTs as unknown as number) | 79 | + days = days <= 2 ? 1 : days<= 8 ? 7 : 30 |
80 | + startTsValue = dayjs().subtract(days - 1, 'day').startOf('day').valueOf() | ||
80 | startTsValue = dayjs(startTsValue).startOf('day').valueOf() | 81 | startTsValue = dayjs(startTsValue).startOf('day').valueOf() |
81 | endTsValue = dayjs().endOf('day').valueOf() | 82 | endTsValue = dayjs().endOf('day').valueOf() |
82 | ;(toRaw(targetComponent.request).requestParams.Params.startTs as unknown as number) = startTsValue as number | 83 | ;(toRaw(targetComponent.request).requestParams.Params.startTs as unknown as number) = startTsValue as number |
1 | <script lang="ts" setup> | 1 | <script lang="ts" setup> |
2 | -import { NFormItem, NGi, NGrid, NSelect, NDatePicker, NInputNumber } from 'naive-ui'; | ||
3 | -import { defaultIntervalOptions, aggergationOptions } from '../DynamicForm/timeInterval' | ||
4 | -import { unref, computed, ref, watch } from 'vue'; | ||
5 | -import { isObject } from '@/utils/external/is'; | 2 | +import {NFormItem, NGi, NGrid, NSelect, NDatePicker, NInputNumber} from 'naive-ui'; |
3 | +import {defaultIntervalOptions, aggergationOptions} from '../DynamicForm/timeInterval' | ||
4 | +import {unref, computed, ref, watch} from 'vue'; | ||
5 | +import {isObject} from '@/utils/external/is'; | ||
6 | +import dayjs from "dayjs"; | ||
6 | 7 | ||
7 | interface Value { | 8 | interface Value { |
8 | agg?: Nullable<string> | 9 | agg?: Nullable<string> |
@@ -13,12 +14,12 @@ interface Value { | @@ -13,12 +14,12 @@ interface Value { | ||
13 | } | 14 | } |
14 | 15 | ||
15 | const props = withDefaults( | 16 | const props = withDefaults( |
16 | - defineProps<{ | ||
17 | - value?: Value | ||
18 | - }>(), | ||
19 | - { | ||
20 | - value: () => ({}) | ||
21 | - } | 17 | + defineProps<{ |
18 | + value?: Value | ||
19 | + }>(), | ||
20 | + { | ||
21 | + value: () => ({}) | ||
22 | + } | ||
22 | ) | 23 | ) |
23 | 24 | ||
24 | const emit = defineEmits<{ | 25 | const emit = defineEmits<{ |
@@ -33,16 +34,22 @@ const interval = ref() | @@ -33,16 +34,22 @@ const interval = ref() | ||
33 | const limit = ref(7) | 34 | const limit = ref(7) |
34 | const rangeShortcuts = { | 35 | const rangeShortcuts = { |
35 | 昨天: () => { | 36 | 昨天: () => { |
36 | - const cur = new Date().getTime() | ||
37 | - return [cur - 86400000, cur] as const | 37 | + return [ |
38 | + dayjs().startOf('day').valueOf(), | ||
39 | + dayjs().endOf('day').valueOf() | ||
40 | + ] as const | ||
38 | }, | 41 | }, |
39 | 最近7天: () => { | 42 | 最近7天: () => { |
40 | - const cur = new Date().getTime() | ||
41 | - return [cur - 604800000, cur] as const | 43 | + return [ |
44 | + dayjs().subtract(6, 'day').startOf('day').valueOf(), | ||
45 | + dayjs().endOf('day').valueOf() | ||
46 | + ] as const | ||
42 | }, | 47 | }, |
43 | 最近30天: () => { | 48 | 最近30天: () => { |
44 | - const cur = new Date().getTime() | ||
45 | - return [cur - 2592000000, cur] as const | 49 | + return [ |
50 | + dayjs().subtract(29, 'day').startOf('day').valueOf(), | ||
51 | + dayjs().endOf('day').valueOf() | ||
52 | + ] as const | ||
46 | } | 53 | } |
47 | } | 54 | } |
48 | 55 | ||
@@ -69,32 +76,32 @@ const getIntervalTimeOptions = computed(() => { | @@ -69,32 +76,32 @@ const getIntervalTimeOptions = computed(() => { | ||
69 | 76 | ||
70 | const handleTimePerionChange = (value: number[]) => { | 77 | const handleTimePerionChange = (value: number[]) => { |
71 | const [startTs, endTs] = value || [] | 78 | const [startTs, endTs] = value || [] |
72 | - emit('update:value', { ...props.value, startTs, endTs, interval: null }) | ||
73 | - emit('change', { ...props.value || {}, startTs, endTs, interval: null }) | 79 | + emit('update:value', {...props.value, startTs, endTs, interval: null}) |
80 | + emit('change', {...props.value || {}, startTs, endTs, interval: null}) | ||
74 | } | 81 | } |
75 | 82 | ||
76 | const handleAggChange = (value: string) => { | 83 | const handleAggChange = (value: string) => { |
77 | - const _value = { ...props.value, agg: value, ...(value === 'NONE' ? { limit: 7 } : {}) } | 84 | + const _value = {...props.value, agg: value, ...(value === 'NONE' ? {limit: 7} : {})} |
78 | Reflect.deleteProperty(_value, value === 'NONE' ? 'interval' : 'limit') | 85 | Reflect.deleteProperty(_value, value === 'NONE' ? 'interval' : 'limit') |
79 | emit('update:value', _value) | 86 | emit('update:value', _value) |
80 | emit('change', _value) | 87 | emit('change', _value) |
81 | } | 88 | } |
82 | 89 | ||
83 | const handleIntervalChange = (value: number) => { | 90 | const handleIntervalChange = (value: number) => { |
84 | - const _value = { ...props.value, interval: value } | 91 | + const _value = {...props.value, interval: value} |
85 | emit('update:value', _value) | 92 | emit('update:value', _value) |
86 | emit('change', _value) | 93 | emit('change', _value) |
87 | } | 94 | } |
88 | 95 | ||
89 | const handleLimitChange = (value: Nullable<number>) => { | 96 | const handleLimitChange = (value: Nullable<number>) => { |
90 | - const _value = { ...props.value, limit: value } | 97 | + const _value = {...props.value, limit: value} |
91 | emit('update:value', _value) | 98 | emit('update:value', _value) |
92 | emit('change', _value) | 99 | emit('change', _value) |
93 | } | 100 | } |
94 | 101 | ||
95 | watch(() => props.value, (target) => { | 102 | watch(() => props.value, (target) => { |
96 | if (target && isObject(target)) { | 103 | if (target && isObject(target)) { |
97 | - const { agg: _agg, interval: _interval, startTs, endTs, limit: _limit } = target || {} | 104 | + const {agg: _agg, interval: _interval, startTs, endTs, limit: _limit} = target || {} |
98 | if (startTs && endTs) { | 105 | if (startTs && endTs) { |
99 | timePeriod.value = [startTs!, endTs!] | 106 | timePeriod.value = [startTs!, endTs!] |
100 | } else { | 107 | } else { |
@@ -111,26 +118,29 @@ watch(() => props.value, (target) => { | @@ -111,26 +118,29 @@ watch(() => props.value, (target) => { | ||
111 | <NGrid :cols="24"> | 118 | <NGrid :cols="24"> |
112 | <NGi :span="16"> | 119 | <NGi :span="16"> |
113 | <NFormItem :show-label="false"> | 120 | <NFormItem :show-label="false"> |
114 | - <NDatePicker :shortcuts="rangeShortcuts" v-model:value="timePeriod" type="datetimerange" placeholder="请选择时间范围" | ||
115 | - @update-value="handleTimePerionChange" clearable :default-time="['00:00:00', '23:59:59']"></NDatePicker> | 121 | + <NDatePicker :shortcuts="rangeShortcuts" v-model:value="timePeriod" type="datetimerange" |
122 | + placeholder="请选择时间范围" | ||
123 | + @update-value="handleTimePerionChange" clearable | ||
124 | + :default-time="['00:00:00', '23:59:59']"></NDatePicker> | ||
116 | </NFormItem> | 125 | </NFormItem> |
117 | </NGi> | 126 | </NGi> |
118 | <NGi :span="4"> | 127 | <NGi :span="4"> |
119 | <NFormItem :show-label="false"> | 128 | <NFormItem :show-label="false"> |
120 | <NSelect v-model:value="agg" @update:value="handleAggChange" :options="aggergationOptions" label-field="name" | 129 | <NSelect v-model:value="agg" @update:value="handleAggChange" :options="aggergationOptions" label-field="name" |
121 | - value-field="id" placeholder="聚合方式" clearable></NSelect> | 130 | + value-field="id" placeholder="聚合方式" clearable></NSelect> |
122 | </NFormItem> | 131 | </NFormItem> |
123 | </NGi> | 132 | </NGi> |
124 | <NGi v-if="!getShowLimit" :span="4"> | 133 | <NGi v-if="!getShowLimit" :span="4"> |
125 | <NFormItem :show-label="false"> | 134 | <NFormItem :show-label="false"> |
126 | <NSelect v-model:value="interval" @update:value="handleIntervalChange" :options="getIntervalTimeOptions" | 135 | <NSelect v-model:value="interval" @update:value="handleIntervalChange" :options="getIntervalTimeOptions" |
127 | - label-field="name" value-field="id" placeholder="间隔时间" clearable></NSelect> | 136 | + label-field="name" value-field="id" placeholder="间隔时间" clearable></NSelect> |
128 | </NFormItem> | 137 | </NFormItem> |
129 | </NGi> | 138 | </NGi> |
130 | <NGi v-if="getShowLimit" :span="4"> | 139 | <NGi v-if="getShowLimit" :span="4"> |
131 | <NFormItem :show-label="false"> | 140 | <NFormItem :show-label="false"> |
132 | <NInputNumber v-model:value="limit" :default-value="7" @update:value="handleLimitChange" | 141 | <NInputNumber v-model:value="limit" :default-value="7" @update:value="handleLimitChange" |
133 | - :parse="(input: string) => parseInt(input)" :min="7" :max="50000" :step="1" placeholder="请输入最大条数" /> | 142 | + :parse="(input: string) => parseInt(input)" :min="7" :max="50000" :step="1" |
143 | + placeholder="请输入最大条数"/> | ||
134 | </NFormItem> | 144 | </NFormItem> |
135 | </NGi> | 145 | </NGi> |
136 | </NGrid> | 146 | </NGrid> |