Commit b97fe8733b898389f7d7ed69868cba8b5ed69af4

Authored by xp.Huang
2 parents 2bc4c607 1a890c96

Merge branch 'perf/daterange' into 'main_dev'

perf: 优化时期选择起始时间范围

See merge request yunteng/thingskit-view!231
@@ -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>