From 77adf24e64110e292f3fc5b57984483a35d65fe8 Mon Sep 17 00:00:00 2001 From: MaysWind Date: Fri, 29 Jan 2021 00:17:20 +0800 Subject: [PATCH] show friendly date range name when forward/backward date range --- src/lib/utils.js | 40 +++++++++++++++++++++ src/views/mobile/statistics/Transaction.vue | 40 +++++++++++++-------- 2 files changed, 66 insertions(+), 14 deletions(-) diff --git a/src/lib/utils.js b/src/lib/utils.js index 37f5a7d7..8dadf0a2 100644 --- a/src/lib/utils.js +++ b/src/lib/utils.js @@ -77,6 +77,18 @@ function getDayOfWeek(date) { return moment(date).format('dddd'); } +function getHour(date) { + return moment(date).hour(); +} + +function getMinute(date) { + return moment(date).minute(); +} + +function getSecond(date) { + return moment(date).second(); +} + function getUnixTimeBeforeUnixTime(unixTime, amount, unit) { return moment.unix(unixTime).subtract(amount, unit).unix(); } @@ -125,6 +137,30 @@ function getThisYearLastUnixTime() { return moment.unix(getThisYearFirstUnixTime()).add(1, 'years').subtract(1, 'seconds').unix(); } +function getShiftedtDateRange(minTime, maxTime, scale) { + const minDateTime = parseDateFromUnixTime(minTime); + const maxDateTime = parseDateFromUnixTime(maxTime); + + const isFirstTimeOfDay = getHour(minDateTime) === 0 && getMinute(minDateTime) === 0; + const isLastTimeOfDay = getHour(maxDateTime) === 23 && getMinute(maxDateTime) === 59; + + if (!isFirstTimeOfDay || !isLastTimeOfDay) { + const range = (maxTime - minTime + 1) * scale; + + return { + minTime: minTime + range, + maxTime: maxTime + range + }; + } + + const range = (maxTime - minTime + 1) * scale; + + return { + minTime: minTime + range, + maxTime: maxTime + range + }; +} + function getDateRangeByDateType(dateType) { let maxTime = 0; let minTime = 0; @@ -498,6 +534,9 @@ export default { getYearAndMonth, getDay, getDayOfWeek, + getHour, + getMinute, + getSecond, getUnixTimeBeforeUnixTime, getMinuteFirstUnixTime, getMinuteLastUnixTime, @@ -509,6 +548,7 @@ export default { getThisMonthLastUnixTime, getThisYearFirstUnixTime, getThisYearLastUnixTime, + getShiftedtDateRange, getDateRangeByDateType, copyObjectTo, copyArrayTo, diff --git a/src/views/mobile/statistics/Transaction.vue b/src/views/mobile/statistics/Transaction.vue index c0c054da..512a6ff3 100644 --- a/src/views/mobile/statistics/Transaction.vue +++ b/src/views/mobile/statistics/Transaction.vue @@ -144,13 +144,13 @@ - + {{ dateRangeName(query) }} - + @@ -554,20 +554,32 @@ export default { this.reload(null); }, - backwardDateRange(startTime, endTime) { - this.$store.dispatch('updateTransactionStatisticsFilter', { - dateType: this.$constants.datetime.allDateRanges.Custom.type, - startTime: startTime - (endTime - startTime), - endTime: startTime - 1 - }); + shiftDateRange(startTime, endTime, scale) { + if (this.query.dateType === this.$constants.datetime.allDateRanges.All.type) { + return; + } + + const newDateRange = this.$utilities.getShiftedtDateRange(startTime, endTime, scale); + let newDateType = this.$constants.datetime.allDateRanges.Custom.type; + + for (let dateRangeField in this.$constants.datetime.allDateRanges) { + if (!Object.prototype.hasOwnProperty.call(this.$constants.datetime.allDateRanges, dateRangeField)) { + continue; + } + + const dateRangeType = this.$constants.datetime.allDateRanges[dateRangeField]; + const dateRange = this.$utilities.getDateRangeByDateType(dateRangeType.type); + + if (dateRange && dateRange.minTime === newDateRange.minTime && dateRange.maxTime === newDateRange.maxTime) { + newDateType = dateRangeType.type; + break; + } + } - this.reload(null); - }, - forwardDateRange(startTime, endTime) { this.$store.dispatch('updateTransactionStatisticsFilter', { - dateType: this.$constants.datetime.allDateRanges.Custom.type, - startTime: endTime + 1, - endTime: endTime + (endTime - startTime) + dateType: newDateType, + startTime: newDateRange.minTime, + endTime: newDateRange.maxTime }); this.reload(null);