From 89436d24ed310784e7d8ad05ab53a083f6bfa123 Mon Sep 17 00:00:00 2001 From: zhouyonggao <1971162852@qq.com> Date: Fri, 19 Dec 2025 00:08:01 +0800 Subject: [PATCH] =?UTF-8?q?fix(date-picker):=20=E4=BC=98=E5=8C=96=E6=97=A5?= =?UTF-8?q?=E6=9C=9F=E9=80=89=E6=8B=A9=E7=A6=81=E7=94=A8=E9=80=BB=E8=BE=91?= =?UTF-8?q?=E4=B8=8E=E9=87=8D=E6=B8=B2=E6=9F=93?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 修改 disabledDate 函数,支持基于已选开始或结束时间的前后一年范围限制 - 增加对未选择时间范围时默认不禁用日期的判断 - 新增 watch 监听 exportForm.dateRange,强制触发日期选择器重新渲染 - 通过修改日期选择器 DOM 元素的 key 值实现强制刷新 - 确保日期选择禁用逻辑和视图状态同步更新 --- web/main.js | 45 ++++++++++++++++++++++++++++++++++++++++----- 1 file changed, 40 insertions(+), 5 deletions(-) diff --git a/web/main.js b/web/main.js index 8aca80d..c29068d 100644 --- a/web/main.js +++ b/web/main.js @@ -194,11 +194,34 @@ const app = createApp({ * @returns {boolean} 是否禁用 */ const disabledDate = (date) => { - if (!date) return false; - const today = new Date(); - const oneYearAgo = new Date(today.getFullYear() - 1, today.getMonth(), today.getDate()); - const oneYearLater = new Date(today.getFullYear() + 1, today.getMonth(), today.getDate()); - return date < oneYearAgo || date > oneYearLater; + if (!date || !state.exportForm.dateRange) return false; + + // 如果已经选择了开始时间,计算结束时间限制 + if (state.exportForm.dateRange[0]) { + const startTime = new Date(state.exportForm.dateRange[0]); + const oneYearLater = new Date(startTime); + oneYearLater.setFullYear(startTime.getFullYear() + 1); + + const oneYearEarlier = new Date(startTime); + oneYearEarlier.setFullYear(startTime.getFullYear() - 1); + + return date < oneYearEarlier || date > oneYearLater; + } + + // 如果已经选择了结束时间,计算开始时间限制 + if (state.exportForm.dateRange[1]) { + const endTime = new Date(state.exportForm.dateRange[1]); + const oneYearLater = new Date(endTime); + oneYearLater.setFullYear(endTime.getFullYear() + 1); + + const oneYearEarlier = new Date(endTime); + oneYearEarlier.setFullYear(endTime.getFullYear() - 1); + + return date < oneYearEarlier || date > oneYearLater; + } + + // 默认情况下不禁用任何日期 + return false; }; const dateShortcuts = [ @@ -954,6 +977,18 @@ const app = createApp({ loadResellers(); }); + // 时间范围变化时强制重新渲染日期选择器 + Vue.watch(() => state.exportForm.dateRange, () => { + // 触发日期选择器重新计算禁用状态 + if (exportFormRef.value) { + // 通过修改 key 强制组件重新渲染 + const datePicker = exportFormRef.value.$el.querySelector('.el-date-editor'); + if (datePicker) { + datePicker.key = Date.now(); + } + } + }, { deep: true }); + Vue.watch(() => state.exportForm.ymtCreatorId, () => { state.exportForm.ymtMerchantId = null; state.exportForm.ymtActivityId = null;