From 866a91e3cd2277eeeeba8f957d090002606b53de Mon Sep 17 00:00:00 2001 From: lld <15027638633@163.com> Date: Fri, 27 Feb 2026 17:21:32 +0800 Subject: [PATCH] =?UTF-8?q?=E8=87=AA=E5=8A=A8=E5=8C=96=E8=AE=BE=E7=BD=AE?= =?UTF-8?q?=E6=A0=A1=E9=AA=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pages/home/control/automatic.vue | 30 ++++++++++++++++++++++------ utils/agri.js | 34 +++++++++++++++++++++++++++++++- 2 files changed, 57 insertions(+), 7 deletions(-) diff --git a/pages/home/control/automatic.vue b/pages/home/control/automatic.vue index b95109b..2e1f999 100644 --- a/pages/home/control/automatic.vue +++ b/pages/home/control/automatic.vue @@ -220,12 +220,13 @@ // 优化:抽离魔法值常量 import UniPopup from "../../../uni_modules/uni-popup/components/uni-popup/uni-popup.vue"; // 引入弹窗组件 import mqttUtil from '@/utils/mqtt'; -import {addLimit, getAgriByImei, updateLimit} from "../../../api/system/assets/limit"; +import {addLimit, updateLimit} from "../../../api/system/assets/limit"; import store from "../../../store"; import {addRemark, updateRemark} from "../../../api/system/assets/remark"; import {generateUniqueId} from "../../../utils/agri"; import UniSection from "../../../components/uni-section/uni-section.vue"; import UniFormsItem from "../../../uni_modules/uni-forms/components/uni-forms-item/uni-forms-item.vue"; +import { checkTimeConflict } from "@/utils/agri" export default { dicts: ['sys_data_map'], @@ -810,18 +811,34 @@ export default { tip: '温度控制未设置,请设置后重新尝试!', validate: (rollerParam, term) => !(term && term.length > 0) }, + { + tip: '温度控制设置条数超过上限!请调整后重试', + validate: (rollerParam, term) => term && term.length > 5 + }, { tip: '温度控制运行时间填写不完整,请检查填写后重新尝试!', - validate: (rollerParam, term) => term.filter(item => !((item.startTime && item.startTime!=='请选择时间') || - (item.endTime && item.endTime !== '请选择时间'))) + validate: (rollerParam, term) => term.some(item => !(item.startTime && item.startTime!=='请选择时间' && + item.endTime && item.endTime !== '请选择时间')) + }, + { + tip: '温度控制运行时间起不能大于止,请检查填写后重新尝试!', + validate: (rollerParam, term) => term.some(item => !(item.startTime > item.endTime)) + }, + { + tip: '温度控制运行时间存在冲突,请检查填写后重新尝试!', + validate: (rollerParam, term) => { + // 调用时间冲突判断函数 + const { isConflict } = checkTimeConflict(term); + return isConflict; // 有冲突 → 返回true(校验失败) + } }, { tip: '温度控制适宜温度填写不完整,请填写后重新尝试!', - validate: (rollerParam, term) => term.filter(item => !(item.temp && item.temp!=='选择')) + validate: (rollerParam, term) => term.some(item => !(item.temp && item.temp!=='选择')) }, { tip: '温度控制风口开合大小填写不完整,请填写后重新尝试!', - validate: (rollerParam, term) => term.filter(item => !(item.vent && item.vent!=='选择')) + validate: (rollerParam, term) => term.some(item => !(item.vent && item.vent!=='选择')) } ]; @@ -845,7 +862,8 @@ export default { } // todo 校验、后端保存 - } + }, + } }; diff --git a/utils/agri.js b/utils/agri.js index b225bd3..faf088b 100644 --- a/utils/agri.js +++ b/utils/agri.js @@ -233,4 +233,36 @@ export function generateUniqueId() { const timestamp = Date.now(); const random = Math.floor(Math.random() * 10000).toString().padStart(4, '0'); return (timestamp + random).toString(); // 转成字符串,避免数字精度丢失 -} \ No newline at end of file +} + +// 极简版:判断时间列表是否存在冲突(支持HH:mm/HH:mm:ss) +const checkTimeConflict = list => { + // 时间转分钟数的极简写法 + const toMin = t => { + const [h, m] = t.split(':').map(Number); + return h * 60 + (m || 0); + }; + + // 过滤有效数据 + 双层循环判断冲突 + const valid = list.filter(i => i.startTime && i.endTime); + for (let i = 0; i < valid.length; i++) { + const [aS, aE] = [toMin(valid[i].startTime), toMin(valid[i].endTime)]; + for (let j = i + 1; j < valid.length; j++) { + const [bS, bE] = [toMin(valid[j].startTime), toMin(valid[j].endTime)]; + if (!(aE <= bS || bE <= aS)) return { isConflict: true, conflict: [valid[i], valid[j]] }; + } + } + return { isConflict: false }; +}; + +// ===================== 测试用例 ===================== +/* +const rollerList = [ + { imei: '123', roller: 'jm1', startTime: '08:00', endTime: '12:00' }, + { imei: '123', roller: 'jm1', startTime: '10:00', endTime: '14:00' }, + { imei: '123', roller: 'jm1', startTime: '15:00', endTime: '18:00' } +]; + +// 调用(一行搞定) +const { isConflict, conflict } = checkTimeConflict(rollerList); +console.log(isConflict ? `冲突:${JSON.stringify(conflict)}` : '无冲突');*/