From c02480f67cfd4f3a31fc428df6cdc7139a193b61 Mon Sep 17 00:00:00 2001 From: fit2cloud-chenyw Date: Wed, 17 Aug 2022 05:09:28 -0400 Subject: [PATCH] =?UTF-8?q?feat(=E4=BB=AA=E8=A1=A8=E6=9D=BF-=E6=97=A5?= =?UTF-8?q?=E6=9C=9F=E8=BF=87=E6=BB=A4=E5=99=A8):=20=E6=97=A5=E6=9C=9F?= =?UTF-8?q?=E8=BF=87=E6=BB=A4=E5=99=A8=E5=BF=AB=E6=8D=B7=E9=80=89=E9=A1=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/components/widget/DeWidget/DeDate.vue | 20 +++ .../serviceImpl/TimeDateRangeServiceImpl.js | 116 ++++++++++++++---- .../widget/serviceImpl/TimeDateServiceImpl.js | 9 ++ .../serviceImpl/TimeMonthServiceImpl.js | 7 ++ .../widget/serviceImpl/TimeYearServiceImpl.js | 3 + frontend/src/lang/en.js | 3 + frontend/src/lang/tw.js | 3 + frontend/src/lang/zh.js | 6 +- frontend/src/styles/index.scss | 4 + .../filter/defaultValue/DeDateDefault.vue | 20 ++- .../defaultValue/DeDateRangeDefault.vue | 8 +- 11 files changed, 170 insertions(+), 29 deletions(-) diff --git a/frontend/src/components/widget/DeWidget/DeDate.vue b/frontend/src/components/widget/DeWidget/DeDate.vue index 56320c7dae..b14c72202f 100644 --- a/frontend/src/components/widget/DeWidget/DeDate.vue +++ b/frontend/src/components/widget/DeWidget/DeDate.vue @@ -14,6 +14,7 @@ :format="labelFormat" :size="size" :editable="false" + :picker-options="pickerOptions" @change="dateChange" @focus="toFocus" @blur="onBlur" @@ -99,6 +100,25 @@ export default { return result + ' ' + this.element.options.attrs.accuracy } return null + }, + pickerOptions() { + const widget = ApplicationContext.getService(this.element.serviceName) + if (this.element.options.attrs.type === 'daterange' && widget.shortcuts) { + const cuts = widget.shortcuts() + const result = cuts.map(cut => { + return { + text: this.$t(cut.text), + onClick: picker => { + const param = cut.callBack() + picker.$emit('pick', param) + } + } + }) + return { + shortcuts: result + } + } + return null } }, diff --git a/frontend/src/components/widget/serviceImpl/TimeDateRangeServiceImpl.js b/frontend/src/components/widget/serviceImpl/TimeDateRangeServiceImpl.js index c290b45e50..ec41b71476 100644 --- a/frontend/src/components/widget/serviceImpl/TimeDateRangeServiceImpl.js +++ b/frontend/src/components/widget/serviceImpl/TimeDateRangeServiceImpl.js @@ -89,64 +89,101 @@ class TimeDateRangeServiceImpl extends WidgetService { defaultSetting() { return dialogPanel.options.attrs.default } - getStartDayOfWeek() { + getStartDayOfWeek(step) { var now = new Date() // 当前日期 var nowDayOfWeek = now.getDay() var nowDay = now.getDate() // 当前日 var nowMonth = now.getMonth() // 当前月 var day = nowDayOfWeek || 7 - return new Date(now.getFullYear(), nowMonth, nowDay + 1 - day) + var resultDay = nowDay + 1 - day + if (step !== null) { + resultDay += (step * 7) + } + return new Date(now.getFullYear(), nowMonth, resultDay) } - getEndDayOfWeek() { + getEndDayOfWeek(step) { var now = new Date() // 当前日期 var nowDayOfWeek = now.getDay() var nowDay = now.getDate() // 当前日 var nowMonth = now.getMonth() // 当前月 var day = nowDayOfWeek || 7 - return new Date(now.getFullYear(), nowMonth, nowDay + 7 - day) + var resultDay = nowDay + 7 - day + if (step !== null) { + resultDay += (step * 7) + } + return new Date(now.getFullYear(), nowMonth, resultDay) } - getStartDayOfMonth() { + getStartDayOfMonth(step) { var now = new Date() var nowMonth = now.getMonth() // 当前月 + if (step !== null) { + nowMonth += step + } var monthStartDate = new Date(now.getFullYear(), nowMonth, 1) return monthStartDate } - getEndDayOfMonth() { + getEndDayOfMonth(step) { var now = new Date() var nowMonth = now.getMonth() // 当前月 - var monthEndDate = new Date(now.getFullYear(), nowMonth, this.getMonthDays()) + var days = this.getMonthDays() + + if (step !== null) { + nowMonth += step + days = this.getMonthDays(step) + } + + var monthEndDate = new Date(now.getFullYear(), nowMonth, days) return monthEndDate } - getStartQuarter() { + getStartQuarter(step) { var now = new Date() var nowMonth = now.getMonth() - const startMonth = Math.floor((nowMonth / 3)) * 3 + var startMonth = Math.floor((nowMonth / 3)) * 3 + if (step !== null) { + startMonth += (step * 3) + } return new Date(now.getFullYear(), startMonth, 1) } - getEndQuarter() { + getEndQuarter(step) { var now = new Date() var nowMonth = now.getMonth() const quar = Math.floor(nowMonth / 3) - const endMonth = quar * 3 + 2 + var endMonth = quar * 3 + 2 + + if (step !== null) { + endMonth += (step * 3) + } + const days = (endMonth === 5 || endMonth === 8) ? 30 : 31 return new Date(now.getFullYear(), endMonth, days) } - getStartYear() { + getStartYear(step) { var now = new Date() - return new Date(now.getFullYear(), 0, 1) + var year = now.getFullYear() + if (step !== null) { + year += step + } + return new Date(year, 0, 1) } - getEndYear() { + getEndYear(step) { var now = new Date() - return new Date(now.getFullYear(), 11, 31) + var year = now.getFullYear() + if (step !== null) { + year += step + } + return new Date(year, 11, 31) } /** * 获得本月天数 * * @returns */ - getMonthDays() { + getMonthDays(step) { var now = new Date() var nowMonth = now.getMonth() // 当前月 + if (step !== null) { + nowMonth += step + } var monthStartDate = new Date(now.getFullYear(), nowMonth, 1) var monthEndDate = new Date(now.getFullYear(), nowMonth + 1, 1) var days = (monthEndDate - monthStartDate) / (1000 * 60 * 60 * 24) @@ -188,19 +225,31 @@ class TimeDateRangeServiceImpl extends WidgetService { if (element.options.attrs.default === null || typeof element.options.attrs.default === 'undefined' || !element.options.attrs.default.isDynamic) return null if (element.options.attrs.default.dkey === 0) { - // 本周 - return [this.getStartDayOfWeek().getTime(), this.getEndDayOfWeek().getTime()] + return [this.getStartDayOfWeek(0).getTime(), this.getEndDayOfWeek(0).getTime()] + } + if (element.options.attrs.default.dkey === 5) { // 上周 + return [this.getStartDayOfWeek(-1).getTime(), this.getEndDayOfWeek(-1).getTime()] } if (element.options.attrs.default.dkey === 1) { - return [this.getStartDayOfMonth().getTime(), this.getEndDayOfMonth().getTime()] + return [this.getStartDayOfMonth(0).getTime(), this.getEndDayOfMonth(0).getTime()] + } + if (element.options.attrs.default.dkey === 6) { // 上月 + return [this.getStartDayOfMonth(-1).getTime(), this.getEndDayOfMonth(-1).getTime()] } if (element.options.attrs.default.dkey === 2) { - return [this.getStartQuarter().getTime(), this.getEndQuarter().getTime()] + return [this.getStartQuarter(0).getTime(), this.getEndQuarter(0).getTime()] } + if (element.options.attrs.default.dkey === 7) { // 上季 + return [this.getStartQuarter(-1).getTime(), this.getEndQuarter(-1).getTime()] + } + if (element.options.attrs.default.dkey === 3) { - return [this.getStartYear().getTime(), this.getEndYear().getTime()] + return [this.getStartYear(0).getTime(), this.getEndYear(0).getTime()] + } + if (element.options.attrs.default.dkey === 8) { // 上年 + return [this.getStartYear(-1).getTime(), this.getEndYear(-1).getTime()] } if (element.options.attrs.default.dkey === 4) { @@ -294,6 +343,31 @@ class TimeDateRangeServiceImpl extends WidgetService { isTimeWidget() { return true } + formatShortValues(values) { + if (!values || values.length === 0) { + return [] + } + const labelFormat = 'yyyy-MM-dd' + let start = values[0] + let end = values[values.length - 1] + start = timeSection(start, 'datetime', labelFormat)[0] + end = timeSection(end, 'datetime', labelFormat)[1] + const results = [start, end] + return results + } + shortcuts() { + return [ + { 'text': 'dynamic_time.cweek', 'callBack': () => this.formatShortValues([this.getStartDayOfWeek(0).getTime(), this.getEndDayOfWeek(0).getTime()]) }, + { 'text': 'dynamic_month.current', 'callBack': () => this.formatShortValues([this.getStartDayOfMonth(0).getTime(), this.getEndDayOfMonth(0).getTime()]) }, + { 'text': 'dynamic_time.cquarter', 'callBack': () => this.formatShortValues([this.getStartQuarter(0).getTime(), this.getEndQuarter(0).getTime()]) }, + { 'text': 'dynamic_year.current', 'callBack': () => this.formatShortValues([this.getStartYear(0).getTime(), this.getEndYear(0).getTime()]) }, + + { 'text': 'dynamic_time.lweek', 'callBack': () => this.formatShortValues([this.getStartDayOfWeek(-1).getTime(), this.getEndDayOfWeek(-1).getTime()]) }, + { 'text': 'dynamic_month.last', 'callBack': () => this.formatShortValues([this.getStartDayOfMonth(-1).getTime(), this.getEndDayOfMonth(-1).getTime()]) }, + { 'text': 'dynamic_time.lquarter', 'callBack': () => this.formatShortValues([this.getStartQuarter(-1).getTime(), this.getEndQuarter(-1).getTime()]) }, + { 'text': 'dynamic_year.last', 'callBack': () => this.formatShortValues([this.getStartYear(-1).getTime(), this.getEndYear(-1).getTime()]) } + ] + } } const timeDateRangeServiceImpl = new TimeDateRangeServiceImpl() export default timeDateRangeServiceImpl diff --git a/frontend/src/components/widget/serviceImpl/TimeDateServiceImpl.js b/frontend/src/components/widget/serviceImpl/TimeDateServiceImpl.js index fdc7de677b..bac5546a24 100644 --- a/frontend/src/components/widget/serviceImpl/TimeDateServiceImpl.js +++ b/frontend/src/components/widget/serviceImpl/TimeDateServiceImpl.js @@ -29,6 +29,7 @@ const dialogPanel = { { value: 0, text: 'dynamic_time.today' }, { value: 1, text: 'dynamic_time.yesterday' }, { value: 2, text: 'dynamic_time.firstOfMonth' }, + { value: 4, text: 'dynamic_time.firstOfYear' }, { value: 3, text: 'dynamic_time.custom' } ], custom: { @@ -101,6 +102,9 @@ class TimeDateServiceImpl extends WidgetService { defaultSetting() { return dialogPanel.options.attrs.default } + customValue() { + return 3 + } dynamicDateFormNow(element) { if (element.options.attrs.default === null || typeof element.options.attrs.default === 'undefined' || !element.options.attrs.default.isDynamic) return null @@ -119,6 +123,11 @@ class TimeDateServiceImpl extends WidgetService { var nowYear = now.getFullYear() return new Date(nowYear, nowMonth, 1).getTime() } + if (element.options.attrs.default.dkey === 4) { + const now = new Date() + const nowYear = now.getFullYear() + return new Date(nowYear, 0, 1).getTime() + } if (element.options.attrs.default.dkey === 3) { const dynamicPrefix = parseInt(element.options.attrs.default.dynamicPrefix) diff --git a/frontend/src/components/widget/serviceImpl/TimeMonthServiceImpl.js b/frontend/src/components/widget/serviceImpl/TimeMonthServiceImpl.js index 7a5ed3699a..a8c3e195e0 100644 --- a/frontend/src/components/widget/serviceImpl/TimeMonthServiceImpl.js +++ b/frontend/src/components/widget/serviceImpl/TimeMonthServiceImpl.js @@ -27,6 +27,7 @@ const dialogPanel = { { value: 0, text: 'dynamic_month.current' }, { value: 1, text: 'dynamic_month.last' }, { value: 2, text: 'dynamic_month.firstOfYear' }, + { value: 4, text: 'dynamic_month.sameMonthLastYear' }, { value: 3, text: 'dynamic_time.custom' } ], custom: { @@ -91,6 +92,9 @@ class TimeMonthServiceImpl extends WidgetService { defaultSetting() { return dialogPanel.options.attrs.default } + customValue() { + return 3 + } dynamicDateFormNow(element) { const now = new Date() const nowMonth = now.getMonth() @@ -108,6 +112,9 @@ class TimeMonthServiceImpl extends WidgetService { if (element.options.attrs.default.dkey === 2) { return new Date(nowYear, 0, 1).getTime() } + if (element.options.attrs.default.dkey === 4) { + return new Date(nowYear - 1, nowMonth, 1).getTime() + } if (element.options.attrs.default.dkey === 3) { const dynamicPrefix = parseInt(element.options.attrs.default.dynamicPrefix) diff --git a/frontend/src/components/widget/serviceImpl/TimeYearServiceImpl.js b/frontend/src/components/widget/serviceImpl/TimeYearServiceImpl.js index 7c164340a5..1e4b50c2fa 100644 --- a/frontend/src/components/widget/serviceImpl/TimeYearServiceImpl.js +++ b/frontend/src/components/widget/serviceImpl/TimeYearServiceImpl.js @@ -77,6 +77,9 @@ class TimeYearServiceImpl extends WidgetService { const value = JSON.parse(JSON.stringify(dialogPanel)) return value } + customValue() { + return 2 + } initDrawPanel() { const value = JSON.parse(JSON.stringify(drawPanel)) diff --git a/frontend/src/lang/en.js b/frontend/src/lang/en.js index 56403d13ce..08b1b60545 100644 --- a/frontend/src/lang/en.js +++ b/frontend/src/lang/en.js @@ -2213,6 +2213,7 @@ export default { today: 'Today', yesterday: 'Yesterday', firstOfMonth: 'Month Beginning', + firstOfYear: 'Year Beginning', custom: 'Custom', date: 'date', week: 'week', @@ -2224,8 +2225,10 @@ export default { set: 'Set', cweek: 'This Week', + lweek: 'Last Week', cmonth: 'This Month', cquarter: 'This Quarter', + lquarter: 'Last Quarter', cyear: 'This Year', openHomePage: 'Show Home Page' }, diff --git a/frontend/src/lang/tw.js b/frontend/src/lang/tw.js index 41735c472e..c70bcf38ac 100644 --- a/frontend/src/lang/tw.js +++ b/frontend/src/lang/tw.js @@ -2223,6 +2223,7 @@ export default { today: '今天', yesterday: '昨天', firstOfMonth: '月初', + firstOfYear: '年初', custom: '自定義', date: '日', week: '周', @@ -2234,8 +2235,10 @@ export default { set: '設置', cweek: '本周', + lweek: '上周', cmonth: '本月', cquarter: '本季', + lquarter: '上季', cyear: '本年' }, dynamic_year: { diff --git a/frontend/src/lang/zh.js b/frontend/src/lang/zh.js index 9cad52a97c..3935c95323 100644 --- a/frontend/src/lang/zh.js +++ b/frontend/src/lang/zh.js @@ -2235,6 +2235,7 @@ export default { today: '今天', yesterday: '昨天', firstOfMonth: '月初', + firstOfYear: '年初', custom: '自定义', date: '日', week: '周', @@ -2246,8 +2247,10 @@ export default { set: '设置', cweek: '本周', + lweek: '上周', cmonth: '本月', cquarter: '本季', + lquarter: '上季', cyear: '本年' }, dynamic_year: { @@ -2261,7 +2264,8 @@ export default { dynamic: '动态年月', current: '当月', last: '上月', - firstOfYear: '当年首月' + firstOfYear: '当年首月', + sameMonthLastYear: '去年同月' }, wizard: { welcome_title: '欢迎使用DataEase', diff --git a/frontend/src/styles/index.scss b/frontend/src/styles/index.scss index 45ed875c0d..d2eea00f1d 100644 --- a/frontend/src/styles/index.scss +++ b/frontend/src/styles/index.scss @@ -978,3 +978,7 @@ div:focus { .user-import-class>.el-dialog__body { padding-bottom: 1px; } + +.date-filter-poper>.el-scrollbar>.el-select-dropdown__wrap { + max-height: 230px !important; +} \ No newline at end of file diff --git a/frontend/src/views/panel/filter/defaultValue/DeDateDefault.vue b/frontend/src/views/panel/filter/defaultValue/DeDateDefault.vue index 33fdfe6d53..cd37800882 100644 --- a/frontend/src/views/panel/filter/defaultValue/DeDateDefault.vue +++ b/frontend/src/views/panel/filter/defaultValue/DeDateDefault.vue @@ -1,6 +1,6 @@