vue3弹窗中循环生成表单的校验和重置问题

应用场景:

1、弹框里的表单是根据后台返回的时段生成的,后台返回几个时段,就渲染几组表单。

       -1- 重置:遍历每个表单,获取当前表单的引用,在resetFields()

       -2- 校验:创建一个数组来存储每个表单的校验结果,遍历每个表单,获取当前表单的引用,校验当前表单,将校验结果存储到数组中,判断到最后一个表单的时候,检查所有的校验结果,校验通过,执行提交操作,否则,执行失败操作。

2、hour 和 hourSupHeat 不可编辑,需计算 hourSupHeat = hour * supHeat,

        这里需要监听 initFormdata的变化,再循环item,再监听每个item里的supHeat,然后计算结果,我这里需要的结果是字符串形式,所以转了String。

3、表单限制只能输入数字,限制2位或3位小数,rules规则里使用正则表达式匹配,hourSupHeat 鼠标移入有公式提示,el-tooltip,使用 label 插槽把 icon 放到文字后面。

数据结构:数组对象形式

initFormData:[{ start: '9', end: '16', supTemp: '', supPres: '', hour: '8', supHeat: '', supFlow: '', hourSupHeat: '' },{ start: '16', end: '9', supTemp: '', supPres: '', hour: '16', supHeat: '', supFlow: '', hourSupHeat: '' },
]

效果显示:

<template><PatrolDialog :show="show" @close="show = false" @define="save(ruleFormRef)" @cancel="cancel(ruleFormRef)" beforeClose@handleBeforeClose="handleBeforeClose(ruleFormRef)" width="600px" top="10vh"><template #title><div class="dialog-title"><img :src="weatherStationIcon" />{{ title }}</div></template><div class="formPart"><div class="item" v-for="(item, index) in initFormData" :key="index"><div class="time" style="padding-bottom: var(--base-padding); color: var(--gdky-primary-color);"> [{{ item.start}}时-{{ item.end }}时]</div><el-form ref="ruleFormRef" :model="item" :rules="rules" label-position="top"><el-row :gutter="16"><el-col :span="8"><el-form-item label="供温 ℃" prop="supTemp"><el-input v-model="item.supTemp" style="width:100%" placeholder="请输入" /></el-form-item></el-col><el-col :span="8"><el-form-item label="供压 MPa" prop="supPres"><el-input v-model="item.supPres" style="width:100%" placeholder="请输入" /></el-form-item></el-col><el-col :span="8"><el-form-item label="时段 h" prop="hour"><el-input v-model="item.hour" disabled style="width:100%" placeholder="请输入" /></el-form-item></el-col></el-row><el-row :gutter="16"><el-col :span="8"><el-form-item label="供热 GJ/h" prop="supHeat"><el-input v-model="item.supHeat" style="width:100%" placeholder="请输入" /></el-form-item></el-col><el-col :span="8"><el-form-item label="供流 t/h" prop="supFlow"><el-input v-model="item.supFlow" style="width:100%" placeholder="请输入" /></el-form-item></el-col><el-col :span="8"><el-tooltip class="box-item" effect="dark" content="应供热量*时间段小时数" placement="top"><el-form-item prop="hourSupHeat"><template #label><div><span>时段供热 GJ</span><i class="iconfont icon-xiangqing1" style="font-size: 14px; padding-left: 5px;"></i></div></template><el-input v-model="item.hourSupHeat" disabled style="width:100%" placeholder="请输入" /></el-form-item></el-tooltip></el-col></el-row></el-form><div style="border-bottom:2px dashed rgba(215, 215, 215, 0.4);margin-bottom: 16px;"></div></div></div></PatrolDialog>
</template><script>
import { reactive, toRefs, computed, watch, ref, onMounted } from 'vue'
import PatrolDialog from '@/views/Components/PatrolDialog.vue'
import weatherStationIcon from '@/assets/imgs/title_img.png'
import { ElMessage } from 'element-plus'
import { debounce } from 'lodash-es'
import { getUpdateTimeDataList } from '@/api/PlatTool/CustomModules/HeatSourceDispatch/index'const initFormData = ref([{ start: '9', end: '16', supTemp: '', supPres: '', hour: '8', supHeat: '', supFlow: '', hourSupHeat: '' },{ start: '16', end: '9', supTemp: '', supPres: '', hour: '16', supHeat: '', supFlow: '', hourSupHeat: '' },
])
const ruleFormRef = ref([])
export default {components: {PatrolDialog},setup(_, { emit }) {const state = reactive({show: false,weatherStationIcon, // icontitle: '',curRow: null,rules: {supTemp: [{ required: true, message: '请输入数字', trigger: 'blur' },{pattern: /^\d+(\.\d{0,2})?$/,message: '请输入数字,最多保留两位小数',trigger: 'blur',},],supPres: [{ required: true, message: '请输入数字', trigger: 'blur' },{pattern: /^\d+(\.\d{0,3})?$/,message: '请输入数字,最多保留三位小数',trigger: 'blur',},],supHeat: [{ required: true, message: '请输入数字', trigger: 'blur' },{pattern: /^\d+(\.\d{0,2})?$/,message: '请输入数字,最多保留两位小数',trigger: 'blur',},],supFlow: [{ required: true, message: '请输入数字', trigger: 'blur' },{pattern: /^\d+(\.\d{0,2})?$/,message: '请输入数字,最多保留两位小数',trigger: 'blur',},],},})const methods = {// 打开弹窗async open(curRow) {state.show = true;state.curRow = curRow;state.title = `修改表单数据[${curRow.outletName}]`// 设置选项initFormData.value = curRow.timeDataList// initFormData = [//   { start: '9', end: '12', supTemp: '45', supPres: '12', hour: '11', supHeat: '2', supFlow: '7', hourSupHeat: '22' },//   { start: '15', end: '18', supTemp: '66', supPres: '36', hour: '2', supHeat: '10', supFlow: '5', hourSupHeat: '20' },//   { start: '18', end: '23', supTemp: '89', supPres: '65', hour: '3', supHeat: '33', supFlow: '6', hourSupHeat: '99' },//   { start: '23', end: '9', supTemp: '36', supPres: '55', hour: '4', supHeat: '1', supFlow: '3', hourSupHeat: '4' }// ]},// 保存save(ruleFormRef) {// 创建一个数组来存储每个表单的校验结果const formValidationResults = [];// 循环遍历每个表单for (let i = 0; i < ruleFormRef.length; i++) {// 获取当前表单的引用const formRef = ruleFormRef[i];// 校验当前表单formRef.validate((valid) => {// 将校验结果存储到数组中formValidationResults[i] = valid;if (i === ruleFormRef.length - 1) {const allFormsValid = formValidationResults.every((result) => result);if (allFormsValid) {// 执行提交操作methods.submitForms();} else {console.log('error submit!')ElMessage.error('修改失败')}}});}},submitForms() {let data = {outletId: state.curRow.outletId,getTime: state.curRow.getTime,timeDataList: initFormData.value}getUpdateTimeDataList(data).then(res => {if (res.code == '0') {ElMessage.success('修改成功');// 刷新表格数据emit('saveSuccess');state.show = false;} else {ElMessage.error(`修改失败:${res?.msg}`);}}).catch(err => {console.log(err)ElMessage.error('修改失败')})},// 重置cancel(formEl) {if (!formEl) return// 循环遍历每个表单for (let i = 0; i < formEl.length; i++) {// 获取当前表单的引用const formRef = formEl[i];formRef.resetFields()}},handleBeforeClose(formEl) {if (!formEl) return// 循环遍历每个表单for (let i = 0; i < formEl.length; i++) {// 获取当前表单的引用const formRef = formEl[i];formRef.resetFields()}state.show = false},}watch(initFormData,debounce((newVal, oldVal) => {newVal.forEach(item => {// 监听item.supHeat的变化watch(() => item.supHeat, (newVal, oldVal) => {// 更新item.hourSupHeat的值item.hourSupHeat = String(item.supHeat * item.hour);});});}, 300),{ deep: true });onMounted(() => {})return {...toRefs(state),...methods,initFormData,ruleFormRef}}
}
</script>
<style lang='less' scoped>
.dialog-title {display: flex;font-size: 16px;font-family: MicrosoftYaHeiSemibold;color: var(--gdky-main-content-color);line-height: 24px;padding-bottom: var(--base-padding);img {margin-right: 8px;}
}.formPart {display: flex;flex-direction: column;justify-content: center;overflow: hidden;
}
</style>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/109174.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java线程

1. 总体路线 pom依赖 <properties> <maven.compiler.source>1.8</maven.compiler.source> <maven.compiler.target>1.8</maven.compiler.target> </properties> <dependencies><dependency> <groupId>org.projectlombo…

Jmeter执行接口自动化测试-如何初始化清空旧数据

需求分析&#xff1a; 每次执行完自动化测试&#xff0c;我们不会执行删除接口把数据删除&#xff0c;而需要留着手工测试&#xff0c;此时会导致下次执行测试有旧数据我们手工可能也会新增数据&#xff0c;导致下次执行自动化测试有旧数据 下面介绍两种清空数据的方法 一、通过…

QT的QStringList的使用

初始 化 默认构造函数创建一个空列表。可以使用初始值设定项列表构造函数创建包含元素的列表&#xff1a; QStringList fonts { "Arial", "Helvetica", "Times" }; 添加字符串 可以使用insert 、append&#xff08;&#xff09; 和 operator…

产品需求分析师的基本职责(合集)

产品需求分析师的基本职责1 职责 1、主要对用友司库云产品进行调研及产品规划; 2、根据司库云业务需求进行详细需求的用户故事、原型设计、需求分析、详细需求文档编写等; 3、进行产品的需求管理、需求验证、产品演示等需求工作; 4、配合开发、UE人员完成对产品的开发任务;…

酒店报修管理系统哪家好?设备巡检系统对酒店运营有什么帮助?

酒店报修管理系统是一款关键的软件工具&#xff0c;可以帮助酒店员工和客户更有效地管理酒店的各项运营活动。下面我们将通过问答形式&#xff0c;深入探讨酒店管理系统的特性和功效&#xff0c;以便了解它如何提升酒店员工的工作效率&#xff0c;以及如何将酒店的各个部门和员…

DNDC模型土壤碳储量、温室气体排放、农田减排、土地变化、气候变化中的实践应用

查看原文>>>DNDC模型土壤碳储量、温室气体排放、农田减排、土地变化、气候变化中的实践应用 目录 一、DNDC模型介绍 二、DNDC初步操作 三、遥感和GIS基础 四、DNDC气象数据 五、DNDC土地数据 六、DNDC土壤数据 七、DNDC结果分析 八、DNDC率定验证 九、土壤碳…

【Hello Algorithm】暴力递归到动态规划(四)

动态规划的数组压缩技巧 - 机器人走格子问题 题目是leetcode62题目原题 表示如下 一个机器人位于一个 m x n 网格的左上角 &#xff08;起始点在下图中标记为 “Start” &#xff09;。 机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角&#xff08;在下图中…

分享Java NET Python三大技术下AutojsPro7云控代码

引言 有图有真相&#xff0c;那短视频就更是真相了。下面是三大语言的短视频。 Java源码版云控示例&#xff1a; Java源码版云控示例在线视频 Net源码版云控示例&#xff1a; Net源码版云控示例在线视频亚丁号-知识付费平台 支付后可见 扫码付费可见 Python源码版云控示例&…

openGauss Meetup(天津站)精彩回顾 | openGauss天津用户组正式成立

由openGauss社区、天开发展集团、天津市软件行业协会、天大智图&#xff08;天津&#xff09;科技有限公司联合主办的“openGauss Meetup • 天津站”已于10月13日落下帷幕&#xff0c;此次活动邀请到众多业内技术专家&#xff0c;从技术创新、学术创新、发展创新、以及生态共建…

基于内存的分布式NoSQL数据库Redis(五)数据存储与RDB设计

文章目录 知识点18&#xff1a;数据存储设计知识点19&#xff1a;Redis持久化&#xff1a;RDB设计知识点20&#xff1a;Redis持久化&#xff1a;RDB测试后记 知识点18&#xff1a;数据存储设计 目标&#xff1a;掌握常见数据存储的设计 实施 问题 数据存储如何保证数据安全&am…

QT实现凸凹边形等距缩放

参考&#xff1a;https://blog.csdn.net/weixin_39383896/article/details/99615371和https://blog.csdn.net/qq_15821883/article/details/117421400 代码逻辑思路&#xff1a; 1、获取向量AB、BC的坐标。 2、计算向量AB、BC的长度。 3、根据点乘获取cosθ大小。 4、根据cosθ…

数据结构之手撕顺序表(讲解➕源代码)

0.引言 在本章之后&#xff0c;就要求大家对于指针、结构体、动态开辟等相关的知识要熟练的掌握&#xff0c;如果有小伙伴对上面相关的知识还不是很清晰&#xff0c;要先弄明白再过来接着学习哦&#xff01; 那进入正题&#xff0c;在讲解顺序表之前&#xff0c;我们先来介绍…

代码随想录算法训练营第23期day25| 216.组合总和III 、17.电话号码的字母组合

目录 一、&#xff08;leetcode 216&#xff09;组合总和III 剪枝 二、&#xff08;leetcode 17&#xff09;电话号码的字母组合 思路 一、&#xff08;leetcode 216&#xff09;组合总和III 力扣题目链接 状态&#xff1a;已AC&#xff0c;就是在77题的前提下&#xff0c…

Unity3D 程序员常用的核心类及方法详解

Unity3D是一款强大的游戏引擎&#xff0c;广泛应用于游戏开发领域。作为Unity3D程序员&#xff0c;掌握常用的核心类及方法是非常重要的。本文将详细介绍Unity3D中程序员常用的核心类及方法&#xff0c;并给出代码实现。 对惹&#xff0c;这里有一个游戏开发交流小组&#xff…

基于ssm的旅游管理系统

功能如下图所示 摘要 基于SSM框架的旅游管理系统代表了信息技术在旅行业中的崭新机遇&#xff0c;为旅行企业提供了强大的工具&#xff0c;以应对现代旅游市场的复杂挑战。这个系统的研发和实施具有广泛的研究意义&#xff0c;它深刻影响了旅游业的发展&#xff0c;具体表现如下…

简单测试一下 展锐的 UDX710 性能

最近在接触 联通5G CPE VN007 &#xff0c;发现使用的是 展锐的Unisoc UDX710 CPU&#xff0c;正好简单的测试一下这颗CPU CPU信息 UDX710 是一颗 双核 ARM Cortex-A55 处理器&#xff0c;主频高达 1.35GHz processor : 0 BogoMIPS : 52.00 Features : fp…

QT最小化到托盘显示

一、效果&#xff1a; 程序关闭后&#xff0c;程序并没有退出&#xff0c;而是放入了托盘中&#xff1b;点击恢复原始大小&#xff0c;或者双击托盘图标&#xff0c;可以恢复程序原来的窗口。如下图。 那qt是如何实现这样的办法呢&#xff0c;其实就是用到了 QSystemTrayIcon类…

2023.10.17 关于 wait 和 notify 的使用

目录 引言 方法的使用 引入实例&#xff08;wait 不带参数版本&#xff09; wait 方法执行流程 wait 和 notify 组合实例 wait 带参数版本 notify 和 notifyAll 的区别 经典例题 总结 引言 线程最大的问题是抢占式执行&#xff0c;随机调度虽然线程在内核里的调度是随…

【前端学习】—JS判断数据类型的方式有哪些(八)

【前端学习】—JS判断数据类型的方式有哪些&#xff08;八&#xff09; 一、JS中判断数据类型的场景 二、JS中有哪些数据类型 三、JS判断数据类型的方式有哪些 const arr[]; const object{};const number1; const stringstring;//typeofconst typetypeof arr; console.log(type…

从头开始机器学习:神经网络

一、说明 如果你还没有做过逻辑回归&#xff0c;你会在这里挣扎。我强烈建议在开始之前查看它。您在逻辑回归方面的能力将影响您学习神经网络的难易程度和速度。 二、神经网络简介 神经网络是一个神经元网络。这些神经元是逻辑回归函数&#xff0c;它们被链接在一起形成一个网络…