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 | 74 | const {requestParams} = toRaw(targetComponent.request) |
| 75 | 75 | const {Params} = requestParams |
| 76 | 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 | 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 | 81 | startTsValue = dayjs(startTsValue).startOf('day').valueOf() |
| 81 | 82 | endTsValue = dayjs().endOf('day').valueOf() |
| 82 | 83 | ;(toRaw(targetComponent.request).requestParams.Params.startTs as unknown as number) = startTsValue as number | ... | ... |
| 1 | 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 | 8 | interface Value { |
| 8 | 9 | agg?: Nullable<string> |
| ... | ... | @@ -13,12 +14,12 @@ interface Value { |
| 13 | 14 | } |
| 14 | 15 | |
| 15 | 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 | 25 | const emit = defineEmits<{ |
| ... | ... | @@ -33,16 +34,22 @@ const interval = ref() |
| 33 | 34 | const limit = ref(7) |
| 34 | 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 | 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 | 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 | 76 | |
| 70 | 77 | const handleTimePerionChange = (value: number[]) => { |
| 71 | 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 | 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 | 85 | Reflect.deleteProperty(_value, value === 'NONE' ? 'interval' : 'limit') |
| 79 | 86 | emit('update:value', _value) |
| 80 | 87 | emit('change', _value) |
| 81 | 88 | } |
| 82 | 89 | |
| 83 | 90 | const handleIntervalChange = (value: number) => { |
| 84 | - const _value = { ...props.value, interval: value } | |
| 91 | + const _value = {...props.value, interval: value} | |
| 85 | 92 | emit('update:value', _value) |
| 86 | 93 | emit('change', _value) |
| 87 | 94 | } |
| 88 | 95 | |
| 89 | 96 | const handleLimitChange = (value: Nullable<number>) => { |
| 90 | - const _value = { ...props.value, limit: value } | |
| 97 | + const _value = {...props.value, limit: value} | |
| 91 | 98 | emit('update:value', _value) |
| 92 | 99 | emit('change', _value) |
| 93 | 100 | } |
| 94 | 101 | |
| 95 | 102 | watch(() => props.value, (target) => { |
| 96 | 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 | 105 | if (startTs && endTs) { |
| 99 | 106 | timePeriod.value = [startTs!, endTs!] |
| 100 | 107 | } else { |
| ... | ... | @@ -111,26 +118,29 @@ watch(() => props.value, (target) => { |
| 111 | 118 | <NGrid :cols="24"> |
| 112 | 119 | <NGi :span="16"> |
| 113 | 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 | 125 | </NFormItem> |
| 117 | 126 | </NGi> |
| 118 | 127 | <NGi :span="4"> |
| 119 | 128 | <NFormItem :show-label="false"> |
| 120 | 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 | 131 | </NFormItem> |
| 123 | 132 | </NGi> |
| 124 | 133 | <NGi v-if="!getShowLimit" :span="4"> |
| 125 | 134 | <NFormItem :show-label="false"> |
| 126 | 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 | 137 | </NFormItem> |
| 129 | 138 | </NGi> |
| 130 | 139 | <NGi v-if="getShowLimit" :span="4"> |
| 131 | 140 | <NFormItem :show-label="false"> |
| 132 | 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 | 144 | </NFormItem> |
| 135 | 145 | </NGi> |
| 136 | 146 | </NGrid> | ... | ... |