CN-928 fix: 调整时区方案
This commit is contained in:
@@ -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()
|
||||||
|
|||||||
@@ -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'
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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,
|
||||||
|
|||||||
@@ -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 })
|
||||||
|
|
||||||
|
|||||||
@@ -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 {
|
||||||
|
|||||||
@@ -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: [
|
||||||
|
|||||||
@@ -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 })
|
||||||
|
|
||||||
|
|||||||
@@ -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 {
|
||||||
|
|||||||
Reference in New Issue
Block a user