CN-928 fix: 调整时区方案

This commit is contained in:
chenjinsong
2023-03-13 16:48:37 +08:00
parent b1e67452a5
commit f4a8ef68c0
8 changed files with 62 additions and 34 deletions

View File

@@ -79,7 +79,7 @@
<script> <script>
import { ref, computed, watch, reactive } from 'vue' import { ref, computed, watch, reactive } from 'vue'
import { storageKey } from '@/utils/constants' import { storageKey } from '@/utils/constants'
import { getMillisecond, timestampToList } from '@/utils/date-util' import { getMillisecond, millTimestampDiffFromTz, timestampToList } from '@/utils/date-util'
import { useStore } from 'vuex' import { useStore } from 'vuex'
export default { export default {
@@ -220,8 +220,9 @@ export default {
* @param val开始/结束时间数组 * @param val开始/结束时间数组
*/ */
const timeArrChange = (val) => { const timeArrChange = (val) => {
myStartTime.value = getMillisecond(val[0]) // 按服务器时区修正时间戳
myEndTime.value = getMillisecond(val[1]) myStartTime.value = getMillisecond(val[0]) + millTimestampDiffFromTz()
myEndTime.value = getMillisecond(val[1]) + millTimestampDiffFromTz()
isCustom.value = true isCustom.value = true
dateRangeValue.value = -1 dateRangeValue.value = -1
returnValue() returnValue()

View File

@@ -1,5 +1,5 @@
import _ from 'lodash' import _ from 'lodash'
import { storageKey } from '@/utils/constants' import {storageKey} from '@/utils/constants'
// 将时间转化为秒 // 将时间转化为秒
export function getSecond (time) { export function getSecond (time) {
@@ -47,7 +47,7 @@ export function toTime (date) {
} }
// 时间格式转换 // 时间格式转换
export function dateFormat (date, format = 'YYYY-MM-DD HH:mm:ss') { export function dateFormat (date, format = 'YYYY-MM-DD HH:mm:ss') {
let d = date let d
// date不是数字则视为utc时区的时间字符串例如2022-02-22 22:22 // date不是数字则视为utc时区的时间字符串例如2022-02-22 22:22
if (isNaN(date)) { if (isNaN(date)) {
d = window.$dayJs(date).valueOf() + parseInt(localStorage.getItem(storageKey.timezoneLocalOffset)) * 3600000 d = window.$dayJs(date).valueOf() + parseInt(localStorage.getItem(storageKey.timezoneLocalOffset)) * 3600000
@@ -93,6 +93,47 @@ export function timestampToList (time) {
const m = date.getMinutes() const m = date.getMinutes()
const s = date.getSeconds() const s = date.getSeconds()
const arr = [Y, M, D, H, m, s] return [Y, M, D, H, m, s]
return arr }
/**
* 返回浏览器本地时区和服务器时区的毫秒差
* @returns {number}
*/
export function millTimestampDiffFromTz () {
return parseInt(localStorage.getItem(storageKey.timezoneLocalOffset)) * 3600 * 1000 - window.$dayJs.tz().utcOffset() * 60 * 1000
}
/**
* echarts时间类型横坐标formatter
* @returns {String}
*/
export function xAxisTimeFormatter (value) {
const date = new Date(value - millTimestampDiffFromTz())
const dayStart = new Date(value - millTimestampDiffFromTz())
dayStart.setHours(0)
dayStart.setMinutes(0)
dayStart.setSeconds(0)
dayStart.setMilliseconds(0)
const hourStart = new Date(value - millTimestampDiffFromTz())
hourStart.setMinutes(0)
hourStart.setSeconds(0)
hourStart.setMilliseconds(0)
const HHmm = (date.getHours() < 10 ? `0${date.getHours()}` : date.getHours()) +
':' +
(date.getMinutes() < 10 ? `0${date.getMinutes()}` : date.getMinutes())
// 如果是一天的开始
if (date.getTime() === dayStart.getTime()) {
return '{day|' + dayStart.getDate() + '}'
} else if (date.getTime() === hourStart.getTime()) {
return '{hour|' + HHmm + '}'
} else {
return HHmm
}
}
export const xAxisTimeRich = {
day: {
fontWeight: 'bold'
},
hour: {
fontWeight: 'bold'
}
} }

View File

@@ -370,17 +370,12 @@ export default {
} }
}, },
setup (props) { setup (props) {
const { currentRoute } = useRouter() const dateRangeValue = 60
function isEntityDetail (r) {
return r.indexOf('entityDetail') > -1
}
const dateRangeValue = isEntityDetail(currentRoute.value.path) ? 60 * 24 : 60
const { startTime, endTime } = getNowTime(dateRangeValue) const { startTime, endTime } = getNowTime(dateRangeValue)
// entity详情内的chart时间工具不是公共的需要单独定义 // entity详情内的chart时间工具不是公共的需要单独定义
const chartTimeFilter = ref({ startTime, endTime, dateRangeValue }) const chartTimeFilter = ref({ startTime, endTime, dateRangeValue })
// 复制一份prop中需要被组件v-model的内容避免报错 // 复制一份prop中需要被组件v-model的内容避免报错
const copyOrderPieTable = props.orderPieTable const copyOrderPieTable = ref(props.orderPieTable)
return { return {
chartTimeFilter, chartTimeFilter,
chartTableTopOptions, chartTableTopOptions,

View File

@@ -107,11 +107,8 @@ export default {
const { params } = useRoute() const { params } = useRoute()
panelType = props.entity ? props.entity.type : panelTypeAndRouteMapping[params.typeName] panelType = props.entity ? props.entity.type : panelTypeAndRouteMapping[params.typeName]
function isEntityDetail (t) {
return [4, 5, 6].indexOf(t) > -1
}
// date // date
const dateRangeValue = isEntityDetail(panelType) ? 60 * 24 : 60 const dateRangeValue = 60
const { startTime, endTime } = getNowTime(dateRangeValue) const { startTime, endTime } = getNowTime(dateRangeValue)
const timeFilter = ref({ startTime, endTime, dateRangeValue }) const timeFilter = ref({ startTime, endTime, dateRangeValue })

View File

@@ -239,19 +239,16 @@ export default {
panelType = props.entity ? props.entity.type : panelTypeAndRouteMapping[params.typeName] panelType = props.entity ? props.entity.type : panelTypeAndRouteMapping[params.typeName]
} }
function isEntityDetail (t) {
return [4, 5, 6].indexOf(t) > -1
}
// 获取url携带的range、startTime、endTime // 获取url携带的range、startTime、endTime
const rangeParam = query.range const rangeParam = query.range
const startTimeParam = query.startTime const startTimeParam = query.startTime
const endTimeParam = query.endTime const endTimeParam = query.endTime
// 若url携带了使用携带的值否则使用默认值。 // 若url携带了使用携带的值否则使用默认值。
const dateRangeValue = rangeParam ? parseInt(query.range) : (isEntityDetail(panelType) ? 60 * 24 : 60) const dateRangeValue = rangeParam ? parseInt(query.range) : 60
const timeFilter = ref({ dateRangeValue }) const timeFilter = ref({ dateRangeValue })
if (!startTimeParam || !endTimeParam) { if (!startTimeParam || !endTimeParam) {
const { startTime, endTime } = getNowTime(isEntityDetail(panelType) ? 60 * 24 : 60) const { startTime, endTime } = getNowTime(60)
timeFilter.value.startTime = startTime timeFilter.value.startTime = startTime
timeFilter.value.endTime = endTime timeFilter.value.endTime = endTime
} else { } else {

View File

@@ -8,6 +8,7 @@ import {
} from '@/utils/constants' } from '@/utils/constants'
import unitConvert from '@/utils/unit-convert' import unitConvert from '@/utils/unit-convert'
import { axisFormatter } from '@/views/charts/charts/tools' import { axisFormatter } from '@/views/charts/charts/tools'
import { xAxisTimeFormatter, xAxisTimeRich } from '@/utils/date-util'
export const pieChartOption1 = { export const pieChartOption1 = {
tooltip: { tooltip: {
@@ -185,15 +186,11 @@ export const stackedLineChartOption = {
xAxis: [ xAxis: [
{ {
type: 'time', type: 'time',
splitNumber: 8 splitNumber: 8,
// axisLabel: { axisLabel: {
// formatter: function (value) { formatter: xAxisTimeFormatter,
// const data = new Date(value) rich: xAxisTimeRich
// const h = data.getHours() > 9 ? data.getHours() : '0' + data.getHours() }
// const m = data.getMinutes() > 9 ? data.getMinutes() : '0' + data.getMinutes()
// return h + ':' + m
// }
// }
} }
], ],
yAxis: [ yAxis: [

View File

@@ -864,7 +864,7 @@ export default {
setup () { setup () {
const { params } = useRoute() const { params } = useRoute()
const pageType = params.typeName const pageType = params.typeName
const dateRangeValue = 60 * 24 const dateRangeValue = 60
const { startTime, endTime } = getNowTime(dateRangeValue) const { startTime, endTime } = getNowTime(dateRangeValue)
const timeFilter = ref({ startTime, endTime, dateRangeValue }) const timeFilter = ref({ startTime, endTime, dateRangeValue })

View File

@@ -717,7 +717,7 @@ export default {
} }
}, },
setup () { setup () {
const dateRangeValue = 60 * 24 const dateRangeValue = 60
const { startTime, endTime } = getNowTime(dateRangeValue) const { startTime, endTime } = getNowTime(dateRangeValue)
const timeFilter = ref({ startTime, endTime, dateRangeValue }) const timeFilter = ref({ startTime, endTime, dateRangeValue })
return { return {