forked from github/dataease
feat(查询组件): 日期范围组件,默认值没有本月、本年等 #11283
This commit is contained in:
parent
c78f4ef398
commit
52f71875ab
@ -3,11 +3,12 @@ import { toRefs, PropType, onBeforeMount, watch, computed } from 'vue'
|
|||||||
import { Calendar } from '@element-plus/icons-vue'
|
import { Calendar } from '@element-plus/icons-vue'
|
||||||
import { type DatePickType } from 'element-plus-secondary'
|
import { type DatePickType } from 'element-plus-secondary'
|
||||||
import type { ManipulateType } from 'dayjs'
|
import type { ManipulateType } from 'dayjs'
|
||||||
import { getAround } from './time-format-dayjs'
|
import { getAround, getCustomRange } from './time-format-dayjs'
|
||||||
interface SelectConfig {
|
interface SelectConfig {
|
||||||
regularOrTrends: string
|
regularOrTrends: string
|
||||||
regularOrTrendsValue: [Date, Date]
|
regularOrTrendsValue: [Date, Date]
|
||||||
intervalType: string
|
intervalType: string
|
||||||
|
relativeToCurrentRange: string
|
||||||
timeNum: number
|
timeNum: number
|
||||||
relativeToCurrentType: ManipulateType
|
relativeToCurrentType: ManipulateType
|
||||||
around: string
|
around: string
|
||||||
@ -27,6 +28,7 @@ const props = defineProps({
|
|||||||
regularOrTrends: 'fixed',
|
regularOrTrends: 'fixed',
|
||||||
timeNum: 0,
|
timeNum: 0,
|
||||||
intervalType: 'none',
|
intervalType: 'none',
|
||||||
|
relativeToCurrentRange: 'custom',
|
||||||
relativeToCurrentType: 'year',
|
relativeToCurrentType: 'year',
|
||||||
around: 'f',
|
around: 'f',
|
||||||
timeGranularity: 'date',
|
timeGranularity: 'date',
|
||||||
@ -50,6 +52,7 @@ const timeConfig = computed(() => {
|
|||||||
timeNum,
|
timeNum,
|
||||||
relativeToCurrentType,
|
relativeToCurrentType,
|
||||||
around,
|
around,
|
||||||
|
relativeToCurrentRange,
|
||||||
intervalType,
|
intervalType,
|
||||||
regularOrTrends,
|
regularOrTrends,
|
||||||
timeGranularity,
|
timeGranularity,
|
||||||
@ -62,6 +65,7 @@ const timeConfig = computed(() => {
|
|||||||
relativeToCurrentType,
|
relativeToCurrentType,
|
||||||
around,
|
around,
|
||||||
intervalType,
|
intervalType,
|
||||||
|
relativeToCurrentRange,
|
||||||
regularOrTrends,
|
regularOrTrends,
|
||||||
timeGranularity,
|
timeGranularity,
|
||||||
timeNumRange,
|
timeNumRange,
|
||||||
@ -87,10 +91,13 @@ watch(
|
|||||||
)
|
)
|
||||||
|
|
||||||
const init = () => {
|
const init = () => {
|
||||||
|
console.log('relativeToCurrentRange')
|
||||||
|
|
||||||
const {
|
const {
|
||||||
timeNum,
|
timeNum,
|
||||||
relativeToCurrentType,
|
relativeToCurrentType,
|
||||||
around,
|
around,
|
||||||
|
relativeToCurrentRange,
|
||||||
regularOrTrends,
|
regularOrTrends,
|
||||||
timeNumRange,
|
timeNumRange,
|
||||||
relativeToCurrentTypeRange,
|
relativeToCurrentTypeRange,
|
||||||
@ -117,6 +124,11 @@ const init = () => {
|
|||||||
timeNumRange
|
timeNumRange
|
||||||
)
|
)
|
||||||
|
|
||||||
|
if (!!relativeToCurrentRange && relativeToCurrentRange !== 'custom') {
|
||||||
|
config.value.regularOrTrendsValue = getCustomRange(relativeToCurrentRange)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
config.value.regularOrTrendsValue = [startTime, endTime]
|
config.value.regularOrTrendsValue = [startTime, endTime]
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -576,16 +576,21 @@ const isInRange = (ele, startWindowTime, timeStamp) => {
|
|||||||
if (intervalType === 'timeInterval') {
|
if (intervalType === 'timeInterval') {
|
||||||
const startTime =
|
const startTime =
|
||||||
regularOrTrends === 'fixed'
|
regularOrTrends === 'fixed'
|
||||||
? regularOrTrendsValue[0]
|
? new Date(
|
||||||
|
dayjs(new Date(regularOrTrendsValue[0])).startOf(noTime).format('YYYY/MM/DD HH:mm:ss')
|
||||||
|
)
|
||||||
: getAround(relativeToCurrentType, around === 'f' ? 'subtract' : 'add', timeNum)
|
: getAround(relativeToCurrentType, around === 'f' ? 'subtract' : 'add', timeNum)
|
||||||
const endTime =
|
const endTime =
|
||||||
regularOrTrends === 'fixed'
|
regularOrTrends === 'fixed'
|
||||||
? regularOrTrendsValue[1]
|
? new Date(
|
||||||
|
dayjs(new Date(regularOrTrendsValue[1])).endOf(noTime).format('YYYY/MM/DD HH:mm:ss')
|
||||||
|
)
|
||||||
: getAround(
|
: getAround(
|
||||||
relativeToCurrentTypeRange,
|
relativeToCurrentTypeRange,
|
||||||
aroundRange === 'f' ? 'subtract' : 'add',
|
aroundRange === 'f' ? 'subtract' : 'add',
|
||||||
timeNumRange
|
timeNumRange
|
||||||
)
|
)
|
||||||
|
|
||||||
return (
|
return (
|
||||||
startWindowTime < +new Date(startTime) - 1000 ||
|
startWindowTime < +new Date(startTime) - 1000 ||
|
||||||
timeStamp > +new Date(endTime) ||
|
timeStamp > +new Date(endTime) ||
|
||||||
@ -760,7 +765,7 @@ const validate = () => {
|
|||||||
'end-config'
|
'end-config'
|
||||||
)
|
)
|
||||||
: new Date(ele.defaultValue[1])
|
: new Date(ele.defaultValue[1])
|
||||||
if (!relativeToCurrentRange || relativeToCurrentRange === 'custom') {
|
if (!!relativeToCurrentRange && relativeToCurrentRange !== 'custom') {
|
||||||
;[startTime, endTime] = getCustomRange(relativeToCurrentRange)
|
;[startTime, endTime] = getCustomRange(relativeToCurrentRange)
|
||||||
}
|
}
|
||||||
if (+startTime > +endTime) {
|
if (+startTime > +endTime) {
|
||||||
@ -1032,6 +1037,10 @@ const parameterCompletion = () => {
|
|||||||
Object.entries(attributes).forEach(([key, val]) => {
|
Object.entries(attributes).forEach(([key, val]) => {
|
||||||
!curComponent.value[key] && (curComponent.value[key] = val)
|
!curComponent.value[key] && (curComponent.value[key] = val)
|
||||||
})
|
})
|
||||||
|
|
||||||
|
if (!curComponent.value.timeRange.relativeToCurrentRange) {
|
||||||
|
curComponent.value.timeRange.relativeToCurrentRange = 'custom'
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
const handleCondition = item => {
|
const handleCondition = item => {
|
||||||
|
@ -11,6 +11,7 @@ const props = defineProps({
|
|||||||
dynamicWindow: false,
|
dynamicWindow: false,
|
||||||
maximumSingleQuery: 0,
|
maximumSingleQuery: 0,
|
||||||
regularOrTrends: 'fixed',
|
regularOrTrends: 'fixed',
|
||||||
|
relativeToCurrentRange: 'custom',
|
||||||
regularOrTrendsValue: '',
|
regularOrTrendsValue: '',
|
||||||
relativeToCurrent: 'custom',
|
relativeToCurrent: 'custom',
|
||||||
timeNum: 0,
|
timeNum: 0,
|
||||||
@ -173,6 +174,85 @@ const relativeToCurrentList = computed(() => {
|
|||||||
}
|
}
|
||||||
]
|
]
|
||||||
})
|
})
|
||||||
|
|
||||||
|
const relativeToCurrentListRange = computed(() => {
|
||||||
|
let list = []
|
||||||
|
if (!timeRange.value) return list
|
||||||
|
switch (props.timeGranularityMultiple) {
|
||||||
|
case 'yearrange':
|
||||||
|
list = [
|
||||||
|
{
|
||||||
|
label: '今年',
|
||||||
|
value: 'thisYear'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
label: '去年',
|
||||||
|
value: 'lastYear'
|
||||||
|
}
|
||||||
|
]
|
||||||
|
break
|
||||||
|
case 'monthrange':
|
||||||
|
list = [
|
||||||
|
{
|
||||||
|
label: '本月',
|
||||||
|
value: 'thisMonth'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
label: '上月',
|
||||||
|
value: 'lastMonth'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
label: '最近 3 个 月',
|
||||||
|
value: 'LastThreeMonths'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
label: '最近 6 个 月',
|
||||||
|
value: 'LastSixMonths'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
label: '最近 12 个 月',
|
||||||
|
value: 'LastTwelveMonths'
|
||||||
|
}
|
||||||
|
]
|
||||||
|
break
|
||||||
|
case 'daterange':
|
||||||
|
case 'datetimerange':
|
||||||
|
list = [
|
||||||
|
{
|
||||||
|
label: '今天',
|
||||||
|
value: 'today'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
label: '昨天',
|
||||||
|
value: 'yesterday'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
label: '最近 3 天',
|
||||||
|
value: 'LastThreeDays'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
label: '月初至今',
|
||||||
|
value: 'monthBeginning'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
label: '年初至今',
|
||||||
|
value: 'yearBeginning'
|
||||||
|
}
|
||||||
|
]
|
||||||
|
break
|
||||||
|
|
||||||
|
default:
|
||||||
|
break
|
||||||
|
}
|
||||||
|
|
||||||
|
return [
|
||||||
|
...list,
|
||||||
|
{
|
||||||
|
label: '自定义',
|
||||||
|
value: 'custom'
|
||||||
|
}
|
||||||
|
]
|
||||||
|
})
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<template>
|
<template>
|
||||||
@ -200,7 +280,7 @@ const relativeToCurrentList = computed(() => {
|
|||||||
</el-radio-group>
|
</el-radio-group>
|
||||||
</div>
|
</div>
|
||||||
<template v-if="dynamicTime && timeRange.intervalType !== 'timeInterval'">
|
<template v-if="dynamicTime && timeRange.intervalType !== 'timeInterval'">
|
||||||
<div class="setting">
|
<div class="setting" v-if="timeRange.intervalType !== 'timeInterval'">
|
||||||
<div class="setting-label">相对当前</div>
|
<div class="setting-label">相对当前</div>
|
||||||
<div class="setting-value select">
|
<div class="setting-value select">
|
||||||
<el-select v-model="timeRange.relativeToCurrent">
|
<el-select v-model="timeRange.relativeToCurrent">
|
||||||
@ -236,26 +316,12 @@ const relativeToCurrentList = computed(() => {
|
|||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
<template v-else-if="dynamicTime && timeRange.intervalType === 'timeInterval'">
|
<template v-else-if="dynamicTime && timeRange.intervalType === 'timeInterval'">
|
||||||
<div
|
<div class="setting">
|
||||||
class="setting"
|
<div class="setting-label">相对当前</div>
|
||||||
:class="
|
<div class="setting-value select">
|
||||||
['yearrange', 'monthrange'].includes(timeGranularityMultiple) && 'is-year-month-range'
|
<el-select v-model="timeRange.relativeToCurrentRange">
|
||||||
"
|
|
||||||
>
|
|
||||||
<div class="setting-label">开始时间</div>
|
|
||||||
<div class="setting-input range">
|
|
||||||
<el-input-number v-model="timeRange.timeNum" :min="0" controls-position="right" />
|
|
||||||
<el-select v-model="timeRange.relativeToCurrentType">
|
|
||||||
<el-option
|
<el-option
|
||||||
v-for="item in relativeToCurrentTypeList"
|
v-for="item in relativeToCurrentListRange"
|
||||||
:key="item.value"
|
|
||||||
:label="item.label"
|
|
||||||
:value="item.value"
|
|
||||||
/>
|
|
||||||
</el-select>
|
|
||||||
<el-select v-model="timeRange.around">
|
|
||||||
<el-option
|
|
||||||
v-for="item in aroundList"
|
|
||||||
:key="item.value"
|
:key="item.value"
|
||||||
:label="item.label"
|
:label="item.label"
|
||||||
:value="item.value"
|
:value="item.value"
|
||||||
@ -263,37 +329,68 @@ const relativeToCurrentList = computed(() => {
|
|||||||
</el-select>
|
</el-select>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div
|
<template v-if="timeRange.relativeToCurrentRange === 'custom'">
|
||||||
class="setting"
|
<div
|
||||||
:class="
|
class="setting"
|
||||||
['yearrange', 'monthrange'].includes(timeGranularityMultiple) && 'is-year-month-range'
|
:class="
|
||||||
"
|
['yearrange', 'monthrange'].includes(timeGranularityMultiple) &&
|
||||||
>
|
'is-year-month-range'
|
||||||
<div class="setting-label">结束时间</div>
|
"
|
||||||
<div class="setting-input range">
|
>
|
||||||
<el-input-number
|
<div class="setting-label">开始时间</div>
|
||||||
v-model="timeRange.timeNumRange"
|
<div class="setting-input range">
|
||||||
:min="0"
|
<el-input-number v-model="timeRange.timeNum" :min="0" controls-position="right" />
|
||||||
controls-position="right"
|
<el-select v-model="timeRange.relativeToCurrentType">
|
||||||
/>
|
<el-option
|
||||||
<el-select v-model="timeRange.relativeToCurrentTypeRange">
|
v-for="item in relativeToCurrentTypeList"
|
||||||
<el-option
|
:key="item.value"
|
||||||
v-for="item in relativeToCurrentTypeList"
|
:label="item.label"
|
||||||
:key="item.value"
|
:value="item.value"
|
||||||
:label="item.label"
|
/>
|
||||||
:value="item.value"
|
</el-select>
|
||||||
/>
|
<el-select v-model="timeRange.around">
|
||||||
</el-select>
|
<el-option
|
||||||
<el-select v-model="timeRange.aroundRange">
|
v-for="item in aroundList"
|
||||||
<el-option
|
:key="item.value"
|
||||||
v-for="item in aroundList"
|
:label="item.label"
|
||||||
:key="item.value"
|
:value="item.value"
|
||||||
:label="item.label"
|
/>
|
||||||
:value="item.value"
|
</el-select>
|
||||||
/>
|
</div>
|
||||||
</el-select>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
<div
|
||||||
|
class="setting"
|
||||||
|
:class="
|
||||||
|
['yearrange', 'monthrange'].includes(timeGranularityMultiple) &&
|
||||||
|
'is-year-month-range'
|
||||||
|
"
|
||||||
|
>
|
||||||
|
<div class="setting-label">结束时间</div>
|
||||||
|
<div class="setting-input range">
|
||||||
|
<el-input-number
|
||||||
|
v-model="timeRange.timeNumRange"
|
||||||
|
:min="0"
|
||||||
|
controls-position="right"
|
||||||
|
/>
|
||||||
|
<el-select v-model="timeRange.relativeToCurrentTypeRange">
|
||||||
|
<el-option
|
||||||
|
v-for="item in relativeToCurrentTypeList"
|
||||||
|
:key="item.value"
|
||||||
|
:label="item.label"
|
||||||
|
:value="item.value"
|
||||||
|
/>
|
||||||
|
</el-select>
|
||||||
|
<el-select v-model="timeRange.aroundRange">
|
||||||
|
<el-option
|
||||||
|
v-for="item in aroundList"
|
||||||
|
:key="item.value"
|
||||||
|
:label="item.label"
|
||||||
|
:value="item.value"
|
||||||
|
/>
|
||||||
|
</el-select>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
</template>
|
</template>
|
||||||
</div>
|
</div>
|
||||||
<div class="parameters" :class="dynamicTime && 'setting'">
|
<div class="parameters" :class="dynamicTime && 'setting'">
|
||||||
|
@ -299,11 +299,19 @@ const disabledDate = val => {
|
|||||||
if (intervalType === 'timeInterval') {
|
if (intervalType === 'timeInterval') {
|
||||||
const startTime =
|
const startTime =
|
||||||
regularOrTrends === 'fixed'
|
regularOrTrends === 'fixed'
|
||||||
? regularOrTrendsValue[0]
|
? new Date(
|
||||||
|
dayjs(new Date(regularOrTrendsValue[0]))
|
||||||
|
.startOf(queryTimeType.value)
|
||||||
|
.format('YYYY/MM/DD HH:mm:ss')
|
||||||
|
)
|
||||||
: getAround(relativeToCurrentType, around === 'f' ? 'subtract' : 'add', timeNum)
|
: getAround(relativeToCurrentType, around === 'f' ? 'subtract' : 'add', timeNum)
|
||||||
const endTime =
|
const endTime =
|
||||||
regularOrTrends === 'fixed'
|
regularOrTrends === 'fixed'
|
||||||
? regularOrTrendsValue[1]
|
? new Date(
|
||||||
|
dayjs(new Date(regularOrTrendsValue[1]))
|
||||||
|
.endOf(queryTimeType.value)
|
||||||
|
.format('YYYY/MM/DD HH:mm:ss')
|
||||||
|
)
|
||||||
: getAround(
|
: getAround(
|
||||||
relativeToCurrentTypeRange,
|
relativeToCurrentTypeRange,
|
||||||
aroundRange === 'f' ? 'subtract' : 'add',
|
aroundRange === 'f' ? 'subtract' : 'add',
|
||||||
|
@ -233,6 +233,7 @@ interface TimeRange {
|
|||||||
regularOrTrends: string
|
regularOrTrends: string
|
||||||
regularOrTrendsValue: string
|
regularOrTrendsValue: string
|
||||||
relativeToCurrent: string
|
relativeToCurrent: string
|
||||||
|
relativeToCurrentRange: string
|
||||||
timeNum: number
|
timeNum: number
|
||||||
relativeToCurrentType: ManipulateType
|
relativeToCurrentType: ManipulateType
|
||||||
around: string
|
around: string
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
import { dvMainStoreWithOut } from '@/store/modules/data-visualization/dvMain'
|
import { dvMainStoreWithOut } from '@/store/modules/data-visualization/dvMain'
|
||||||
import { storeToRefs } from 'pinia'
|
import { storeToRefs } from 'pinia'
|
||||||
import { getDynamicRange, getCustomTime } from '@/custom-component/v-query/time-format'
|
import { getDynamicRange, getCustomTime } from '@/custom-component/v-query/time-format'
|
||||||
|
import { getCustomRange } from '@/custom-component/v-query/time-format-dayjs'
|
||||||
const dvMainStore = dvMainStoreWithOut()
|
const dvMainStore = dvMainStoreWithOut()
|
||||||
const { componentData } = storeToRefs(dvMainStore)
|
const { componentData } = storeToRefs(dvMainStore)
|
||||||
|
|
||||||
@ -266,6 +267,7 @@ export const searchQuery = (queryComponentList, filter, curComponentId, firstLoa
|
|||||||
timeNum,
|
timeNum,
|
||||||
relativeToCurrentType,
|
relativeToCurrentType,
|
||||||
around,
|
around,
|
||||||
|
relativeToCurrentRange,
|
||||||
arbitraryTime,
|
arbitraryTime,
|
||||||
timeGranularity,
|
timeGranularity,
|
||||||
timeNumRange,
|
timeNumRange,
|
||||||
@ -275,7 +277,7 @@ export const searchQuery = (queryComponentList, filter, curComponentId, firstLoa
|
|||||||
arbitraryTimeRange
|
arbitraryTimeRange
|
||||||
} = item
|
} = item
|
||||||
|
|
||||||
const startTime = getCustomTime(
|
let startTime = getCustomTime(
|
||||||
timeNum,
|
timeNum,
|
||||||
relativeToCurrentType,
|
relativeToCurrentType,
|
||||||
timeGranularity,
|
timeGranularity,
|
||||||
@ -284,7 +286,7 @@ export const searchQuery = (queryComponentList, filter, curComponentId, firstLoa
|
|||||||
timeGranularityMultiple,
|
timeGranularityMultiple,
|
||||||
'start-panel'
|
'start-panel'
|
||||||
)
|
)
|
||||||
const endTime = getCustomTime(
|
let endTime = getCustomTime(
|
||||||
timeNumRange,
|
timeNumRange,
|
||||||
relativeToCurrentTypeRange,
|
relativeToCurrentTypeRange,
|
||||||
timeGranularity,
|
timeGranularity,
|
||||||
@ -293,6 +295,10 @@ export const searchQuery = (queryComponentList, filter, curComponentId, firstLoa
|
|||||||
timeGranularityMultiple,
|
timeGranularityMultiple,
|
||||||
'end-panel'
|
'end-panel'
|
||||||
)
|
)
|
||||||
|
|
||||||
|
if (!!relativeToCurrentRange && relativeToCurrentRange !== 'custom') {
|
||||||
|
;[startTime, endTime] = getCustomRange(relativeToCurrentRange)
|
||||||
|
}
|
||||||
item.defaultValue = [startTime, endTime]
|
item.defaultValue = [startTime, endTime]
|
||||||
item.selectValue = [startTime, endTime]
|
item.selectValue = [startTime, endTime]
|
||||||
selectValue = [startTime, endTime]
|
selectValue = [startTime, endTime]
|
||||||
|
Loading…
Reference in New Issue
Block a user