当前位置: 首页 > news >正文

Ant Design vue 多层for循环form表单自定义校验

数据结构如下:三维数组。

 

注意:<a-form-model>一定得写在for外面!!!!

<!-- 弹出框 -->
<a-modal:title="title":dialog-style="{ top: '20px' }":visible="visible":confirmLoading="confirmLoading":width="1450"@ok="() => handleSubmit()"@cancel="() => handleCancel()"> <a-form-model ref="formRef" :model="model" class="dialogMaxHeight" :rules="rules">  <div v-for="(item, lIndx) in model.result" :key="item.id" v-show="curTabId === item.id"><div class="group-item"  v-for="(con, cIndx) in item.contentList" :key="con.id"><!-- 两层for写法--><div class="inner"> <a-row style="padding: 8px 0"> <a-col :span="12"><a-form-model-item label="自评分" :labelCol="labelCol" :wrapperCol="wrapperCol" :prop="'result.' + lIndx + '.contentList.' + cIndx + '.selfScore'":rules="[{ required: parseInt(item.typeId) == 2 ? true : false, validator: validateSelfScore, trigger: ['change', 'blur'] }]" > <a-input-number  :disabled="isDisabledAuth('selfScore')" placeholder="" :min="getMinScore(con.scoringStandard)" :max="getMaxScore(con.scoringStandard)" v-model="con.selfScore"  style="width: 10rem" /><span style="padding: 0 5px">分</span></a-form-model-item></a-col>  </a-row></div> <!-- 三层for写法--><div class="con"><a-row style="padding: 8px 0"> <a-col :span="12"><a-form-model-item label="自评分" :labelCol="labelCol" :wrapperCol="wrapperCol" :prop="'result.' + lIndx + '.contentList.' + cIndx + '.list.' + gIndex +  '.selfScore'":rules="[{ required: parseInt(item.id) === 2 ? true : false, validator: validateSelfScoreLev2, trigger: ['change', 'blur'] }]"   > <a-input-number :disabled="isDisabledAuth('selfScore')" placeholder="" :min="getMinScore(group.scoringStandard)" :max="getMaxScore(group.scoringStandard)" v-model="group.selfScore" style="width: 10rem" /><span style="padding: 0 5px">分</span></a-form-model-item></a-col>  </a-row></div> </div>  </div> 
</a-form-model>   
</a-modal>                       export default {
methods: { /* 原始未重构写法 和prop里数据结构一致  */validateSelfScore (rule, value, callback) {// 校验自评分const oneIndex = rule.field.split('.')[1]const twoIndex = rule.field.split('.')[3]const rowData = this.model.result[oneIndex].contentList[twoIndex]const rowData2 = this.model.result[oneIndex].contentList[twoIndex].list[threeIndex]if(!value && value === '' || value === null) {callback(new Error(`请输入${rowData.content ? rowData.content: ''}自评分!`))} else {callback()}}, // 重构后validateSelfScore (rule, value, callback) {// 校验自评分(仅一级信用)// const oneIndex = rule.field.split('.')[1]// const twoIndex = rule.field.split('.')[3]// const rowData = this.model.result[oneIndex].contentList[twoIndex]if(this.isDisabledAuth('selfScore') === false) { // 物业btn未禁用this.getValidRowCall(rule).then(res => {const rowData = this.model.result[res.oneIndex].contentList[res.twoIndex] // typeId诚信信息必校验if(parseInt(rowData.typeId) == 2) {if(!value && (value === '' || value === null)) {// if(rowData.content) this.$message.warning(`请输入${rowData.content ? rowData.content: ''}自评分!`)callback(new Error(`请输入${rowData.content ? rowData.content: ''}自评分!`))} else {callback()}    } else {callback()}})} else {callback()}},// 三维数组校验 和prop里数据结构一致threeIndex validateSelfScoreLev2 (rule, value, callback) {// 校验自评分(二级信用)// const rowData = this.model.result[oneIndex].contentList[twoIndex].list[threeIndex]if(this.isDisabledAuth('selfScore') === false) { // 物业btn未禁用this.getValidRowCall(rule).then(res => {const rowData = this.model.result[res.oneIndex].contentList[res.twoIndex].list[res.threeIndex]// typeId诚信信息必校验if(parseInt(rowData.typeId) == 2) {if(!value && (value === '' || value === null)) {callback(new Error(`请输入${rowData.content ? rowData.content: ''}自评分!`))} else {callback()}} else {callback()}})} else {callback()}},handleSubmit () { // form表单提交this.$refs.formRef.validate(valid => { if (valid) { this.$message.warning('验证通过。。。');    } else{this.$message.warning('验证未通过。。。');return false;}})},} 
}

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • css中的伪类
  • 打卡第58天------图论
  • Stable Diffusion 必备插件推荐,菜鸟轻松成高手!(附插件整合包)
  • 基于爬山法MPPT和PI的直驱式永磁同步风力发电机控制系统simulink建模与仿真
  • string的模拟实现与深浅拷贝
  • 嵌入式全栈开发学习笔记---Linux系统编程(进程间通信)
  • Trying to update a textarea with string from an OpenAI request
  • 使用Python+docx+openpyxl将Word表格转换为Excel表格
  • 如何处理时间序列异常值?理解、检测和替换时间序列中的异常值
  • 掌握Go语言中的Channel:并发编程的核心
  • 集成电路学习:什么是CPU中央处理器
  • 神仙插件 LightFlow!一键复用SD WebUI工作流,AI绘画StableDiffusion抄作业必备神器!
  • 【Python篇】Python 类和对象:详细讲解(上篇)
  • 海外新闻稿发布:企业如何充分利用数字化媒体进行
  • [imx9]DDR test Tool for imx9
  • IE9 : DOM Exception: INVALID_CHARACTER_ERR (5)
  • 《用数据讲故事》作者Cole N. Knaflic:消除一切无效的图表
  • Apache Spark Streaming 使用实例
  • IOS评论框不贴底(ios12新bug)
  • OpenStack安装流程(juno版)- 添加网络服务(neutron)- controller节点
  • vue-loader 源码解析系列之 selector
  • windows下mongoDB的环境配置
  • 函数式编程与面向对象编程[4]:Scala的类型关联Type Alias
  • 那些年我们用过的显示性能指标
  • 爬虫进阶 -- 神级程序员:让你的爬虫就像人类的用户行为!
  • 微信如何实现自动跳转到用其他浏览器打开指定页面下载APP
  • 小程序button引导用户授权
  • 没有任何编程基础可以直接学习python语言吗?学会后能够做什么? ...
  • 树莓派用上kodexplorer也能玩成私有网盘
  • ​七周四次课(5月9日)iptables filter表案例、iptables nat表应用
  • ​一文看懂数据清洗:缺失值、异常值和重复值的处理
  • ‌分布式计算技术与复杂算法优化:‌现代数据处理的基石
  • ## 1.3.Git命令
  • #免费 苹果M系芯片Macbook电脑MacOS使用Bash脚本写入(读写)NTFS硬盘教程
  • %check_box% in rails :coditions={:has_many , :through}
  • (173)FPGA约束:单周期时序分析或默认时序分析
  • (2)空速传感器
  • (el-Transfer)操作(不使用 ts):Element-plus 中 Select 组件动态设置 options 值需求的解决过程
  • (八)光盘的挂载与解挂、挂载CentOS镜像、rpm安装软件详细学习笔记
  • (附源码)ssm本科教学合格评估管理系统 毕业设计 180916
  • (免费领源码)Java#Springboot#mysql农产品销售管理系统47627-计算机毕业设计项目选题推荐
  • (免费领源码)Java#ssm#MySQL 创意商城03663-计算机毕业设计项目选题推荐
  • (十一)JAVA springboot ssm b2b2c多用户商城系统源码:服务网关Zuul高级篇
  • (四)docker:为mysql和java jar运行环境创建同一网络,容器互联
  • (完整代码)R语言中利用SVM-RFE机器学习算法筛选关键因子
  • (一)appium-desktop定位元素原理
  • ****Linux下Mysql的安装和配置
  • *算法训练(leetcode)第四十七天 | 并查集理论基础、107. 寻找存在的路径
  • .apk文件,IIS不支持下载解决
  • .Net OpenCVSharp生成灰度图和二值图
  • .NET Remoting Basic(10)-创建不同宿主的客户端与服务器端
  • .NET WPF 抖动动画
  • .Net 基于.Net8开发的一个Asp.Net Core Webapi小型易用框架
  • .net使用excel的cells对象没有value方法——学习.net的Excel工作表问题
  • .NET下ASPX编程的几个小问题