From dc2cc89d37ab1b37f4de44ebc441e7936c96b2d1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=8E=E5=B8=85=E6=AD=A6?= Date: Thu, 26 Jun 2025 14:43:15 +0800 Subject: [PATCH] =?UTF-8?q?feat=EF=BC=9A1.=E6=97=B6=E9=97=B4=E7=AD=9B?= =?UTF-8?q?=E9=80=89=E7=BB=84=E4=BB=B6=E5=A2=9E=E5=8A=A0=E5=8F=AF=E9=80=89?= =?UTF-8?q?=E8=8C=83=E5=9B=B4=E9=85=8D=E7=BD=AE=202.=E5=A2=9E=E5=8A=A0?= =?UTF-8?q?=E5=90=AF=E7=94=A8=E5=BF=AB=E6=8D=B7=E9=80=89=E6=8B=A9=E5=BC=80?= =?UTF-8?q?=E5=85=B3=E9=85=8D=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../tools/configure/form/widget-form-time.js | 55 +++++++++++++++ .../designer/widget/form/widgetFormTime.vue | 67 ++++++++++++++++--- 2 files changed, 113 insertions(+), 9 deletions(-) diff --git a/report-ui/src/views/bigscreenDesigner/designer/tools/configure/form/widget-form-time.js b/report-ui/src/views/bigscreenDesigner/designer/tools/configure/form/widget-form-time.js index 14657ffc..681fc863 100644 --- a/report-ui/src/views/bigscreenDesigner/designer/tools/configure/form/widget-form-time.js +++ b/report-ui/src/views/bigscreenDesigner/designer/tools/configure/form/widget-form-time.js @@ -38,6 +38,14 @@ export const widgetFormTime = { placeholder: '', value: 'rgba(115,170,229,.5)', }, + { + type: 'el-switch', + label: '启用快捷选择', + name: 'shortcuts', + required: false, + placeholder: '', + value: true, + }, /* { type: 'el-select', label: '触发事件', @@ -51,6 +59,53 @@ export const widgetFormTime = { ], value: 'change', },*/ + [{ + name: '可选范围', + list: [ + { + type: 'el-input-number', + label: '前置范围', + name: 'beforeNumber', + required: false, + placeholder: '', + value: undefined, + }, + { + type: 'el-select', + label: '类型', + name: 'beforeType', + required: false, + placeholder: '', + selectOptions: [ + { code: 'year', name: '年' }, + { code: 'month', name: '月' }, + { code: 'day', name: '天' }, + ], + value: 'month', + }, + { + type: 'el-input-number', + label: '后置范围', + name: 'afterNumber', + required: false, + placeholder: '', + value: undefined, + }, + { + type: 'el-select', + label: '类型', + name: 'afterType', + required: false, + placeholder: '', + selectOptions: [ + { code: 'year', name: '年' }, + { code: 'month', name: '月' }, + { code: 'day', name: '天' }, + ], + value: 'month', + }, + ] + }], [{ name: '组件联动', list: [ diff --git a/report-ui/src/views/bigscreenDesigner/designer/widget/form/widgetFormTime.vue b/report-ui/src/views/bigscreenDesigner/designer/widget/form/widgetFormTime.vue index 4c4c679c..30040563 100644 --- a/report-ui/src/views/bigscreenDesigner/designer/widget/form/widgetFormTime.vue +++ b/report-ui/src/views/bigscreenDesigner/designer/widget/form/widgetFormTime.vue @@ -9,7 +9,7 @@ :style="styleObj" v-model="timeValue" :value-format="valueFormat" - :picker-options="datetimeRangePickerOptions" + :picker-options="pickerOptions" :type="dateType" @[eventChange]="change" /> @@ -20,6 +20,7 @@ import { targetWidgetLinkageLogic, } from "@/views/bigscreenDesigner/designer/linkageLogic"; import miment from 'miment' +import moment from 'moment' export default { name: "WidgetFormTime", @@ -38,7 +39,21 @@ export default { optionsData: {}, optionsSetup: {}, //日期时间快捷选项 - datetimeRangePickerOptions: { + // datetimeRangePickerOptions: { + // // disabledDate(time){ + // // return time.getTime() > Date.now() + // // } + // }, + beforeNumber: '', + beforeType: 'month', + afterNumber: '', + afterType: 'month', + }; + }, + computed: { + pickerOptions() { + const options = { + disabledDate: {}, shortcuts: [{ text: '今天', onClick(picker) { @@ -98,14 +113,39 @@ export default { new Date(start.setHours(0, 0, 0, 0)); picker.$emit('pick', [start, end]); } - }], - // disabledDate(time){ - // return time.getTime() > Date.now() - // } + }] + }; + if (!this.optionsSetup.shortcuts) { + delete options.shortcuts; } - }; - }, - computed: { + const today = moment().startOf('day'); + + // 处理开始日期限制(不能选择 today - beforeNumber beforeType 之前的日期) + if (this.beforeNumber !== '') { + const beforeValue = parseInt(this.beforeNumber, 10); + if (!isNaN(beforeValue)) { + const startDate = moment(today).subtract(beforeValue, this.beforeType); + options.disabledDate = (time) => { + return moment(time).isBefore(startDate); + }; + } + } + + // 处理结束日期限制(不能选择 today + afterNumber afterType 之后的日期) + if (this.afterNumber !== '') { + const afterValue = parseInt(this.afterNumber, 10); + if (!isNaN(afterValue)) { + const endDate = moment(today).add(afterValue, this.afterType); + const originalDisabledDate = options.disabledDate || (() => false); + + options.disabledDate = (time) => { + return originalDisabledDate(time) || moment(time).isAfter(endDate); + }; + } + } + + return options; + }, styleObj() { return { position: this.ispreview ? "absolute" : "static", @@ -135,6 +175,7 @@ export default { this.optionsSetup = val.setup; this.optionsData = val.data; this.optionsStyle = val.position; + this.setRangeConfig(); }, deep: true, }, @@ -145,8 +186,16 @@ export default { this.optionsStyle = this.value.position; targetWidgetLinkageLogic(this); // 联动-目标组件逻辑 + this.setRangeConfig(); }, methods: { + setRangeConfig () { + const optionsSetup = this.optionsSetup; + this.beforeNumber = optionsSetup.beforeNumber; + this.beforeType = optionsSetup.beforeType; + this.afterNumber = optionsSetup.afterNumber; + this.afterType = optionsSetup.afterType; + }, change(event) { const formTimeData = {} formTimeData['startTime'] = event[0] //startTime -- Gitee