ViewUI表格Table嵌套From表单-动态校验数据合法性的解决方法

项目场景:

项目需求:在表格中实现动态加减数据,并且每行表格内的输入框,都要动态校验数据,校验不通过,不让提交数据,并且由于表格内部空间较小,我仅保留红边框提示,文字提示给隐藏了,不然表格内的框会很大很难看。

如果,你需要提示的话,不要show-message属性

            <Form ref="formDynamic"
                  :model="obj"
                  :label-width="15"
                  :show-message="false" //去掉这一行代码就显示校验错误信息了
                  inline
            >

问题描述

提示:在表格中实现动态加减数据,并且每行表格内的输入框,都要动态校验数据

在这里插入图片描述

在这里插入图片描述

原因分析:

提示:这里我并没有用viewUI的table组件,用的是原生html做的表格,然后样式做成和table组件相似,我不用table组件,是因为组件限制太多,组件用v-for渲染表格达不到项目需求,并且内部prop也检测不到校验。

这边的代码是精简的,里面核心的代码就在这,如果不是很明白的话,下面有全部代码

           <Form ref="formDynamic"
                  :model="obj"
                  :label-width="15"
                  :show-message="false"
                  inline
            >
              	<table id="formDynamic" style="border:  1px solid #e8eaec;border-collapse: collapse;">
                	<th style="border:  1px solid #e8eaec;padding: 8px 0;background-color: #f8f8f9">保险费用</th>
                	<tr v-for="(item, index) in obj.modelData"
	                    :key="index"
	                    style="border:  1px solid #e8eaec"
                	>
                    <td style="border:  1px solid #e8eaec;padding: 7px">
	                    <FormItem
	                        label=" "
	                        :prop="'modelData.'+index+'.insuranceFee'"
	                        :rules="[{required: true, type:'number', message: '请输入', trigger: 'blur'},
	                        {pattern:/^(0|([1-9]\d*))(\.\d{1,2})?$/, message: '请输入正数'}]"
	                    >
	                      <Input
	                          v-model.trim.number="obj.modelData[index].insuranceFee"
	                          :show-word-limit='true'
	                          :maxlength="10"
	                          :disabled="Boolean(flag)"
	                      ></Input>
                    	</FormItem>
	                  </td>
                  </tr>
                </table>
             </Form>

解决方案:

提示:全部代码:

  <template>
            <Form ref="formDynamic"
                  :model="obj"
                  :label-width="15"
                  :show-message="false"
                  inline
            >
              <table id="formDynamic" style="border:  1px solid #e8eaec;border-collapse: collapse;">
                <th style="border:  1px solid #e8eaec;padding: 8px 0;background-color: #f8f8f9">保险编号</th>
                <th style="border:  1px solid #e8eaec;padding: 8px 0;background-color: #f8f8f9">保险费用</th>
                <th style="border:  1px solid #e8eaec;padding: 8px 0;background-color: #f8f8f9">保险类型</th>
                <th style="border:  1px solid #e8eaec;padding: 8px 0;background-color: #f8f8f9">保险应收</th>
                <th style="border:  1px solid #e8eaec;padding: 8px 0;background-color: #f8f8f9">保险实收</th>
                <th style="border:  1px solid #e8eaec;padding: 8px 0;background-color: #f8f8f9">保单欠款</th>
                <th style="border:  1px solid #e8eaec;padding: 8px 0;background-color: #f8f8f9">收费开始时间</th>
                <th style="border:  1px solid #e8eaec;padding: 8px 0;background-color: #f8f8f9">收费截止时间</th>
                <th style="border:  1px solid #e8eaec;padding: 8px 0;background-color: #f8f8f9">备注</th>
                <th style="border:  1px solid #e8eaec;padding: 8px 0;background-color: #f8f8f9">操作</th>
                <tr v-for="(item, index) in obj.modelData"
                    :key="index"
                    style="border:  1px solid #e8eaec"
                >
                  <!--                  保险编号-->
                  <td style="border:  1px solid #e8eaec;padding: 7px">
                    <FormItem
                        label=" "
                        :prop="'modelData.'+index+'.insuranceId'"
                        style="width: 120px"
                        :rules="{required: true, message: '请输入', trigger: 'change'}">
                      <Select
                          v-if="!Boolean(flag)"
                          transfer
                          v-model="obj.modelData[index].insuranceId"
                          @on-change="changeBd(item,index)"
                      >
                        <Option
                            v-for="item in policyData"
                            :value="item.id"
                            :key="item.id"
                        >{{ item.insuranceCode }}
                        </Option
                        >
                      </Select>
                      <Input v-else :disabled='Boolean(flag)' v-model="obj.modelData[index].insuranceCode"></Input>
                    </FormItem>
                  </td>
                  <!--                  保险费用-->
                  <td style="border:  1px solid #e8eaec;padding: 7px">
                    <FormItem
                        label=" "
                        :prop="'modelData.'+index+'.insuranceFee'"
                        :rules="[{required: true, type:'number', message: '请输入', trigger: 'blur'},
                        {pattern:/^(0|([1-9]\d*))(\.\d{1,2})?$/, message: '请输入正数'}]"
                    >
                      <Input
                          v-model.trim.number="obj.modelData[index].insuranceFee"
                          :show-word-limit='true'
                          :maxlength="10"
                          :disabled="Boolean(flag)"
                      ></Input>
                    </FormItem>
                  </td>
                  <!--                  保险类型-->
                  <td style="border:  1px solid #e8eaec;padding: 7px">
                    <FormItem
                        label=" "
                        :prop="'modelData.'+index+'.insuranceType'"
                        :rules="{required: true, message: '请输入'}">
                      <Input type="text" disabled v-model="item.insuranceType" placeholder="请输入..."></Input>
                    </FormItem>
                  </td>
                  <!--                  保险应收-->
                  <td style="border:  1px solid #e8eaec;padding: 7px">
                    <FormItem
                        label=" "
                        :prop="'modelData.'+index+'.insuranceReceivables'"
                        :rules="[{required: true, type:'number',  message: '请输入', trigger: 'blur'},
                        {pattern:/^(0|([1-9]\d*))(\.\d{1,2})?$/, message: '请输入正数'}]"
                    >
                      <Input
                          v-model.trim.number="obj.modelData[index].insuranceReceivables"
                          @on-change="calculateCost(item,index)"
                          :show-word-limit='true'
                          :maxlength="10"
                          :disabled="Boolean(flag)"
                          @input="e => handleInput(e,'insuranceReceivables')"
                      ></Input>
                    </FormItem>
                  </td>
                  <!--                  保险实收-->
                  <td style="border:  1px solid #e8eaec;padding: 7px">
                    <FormItem
                        label=" "
                        :prop="'modelData.'+index+'.insurancePaid'"
                        :rules="[{required: true, type:'number',  message: '请输入', trigger: 'blur'},
                        {pattern:/^(0|([1-9]\d*))(\.\d{1,2})?$/, message: '请输入正数'}]"
                    >
                      <Input
                          v-model.trim.number="obj.modelData[index].insurancePaid"
                          @on-change="calculateCost(item,index)"
                          :show-word-limit='true'
                          :maxlength="10"
                      ></Input>
                    </FormItem>
                  </td>
                  <!--                  保险欠款-->
                  <td style="border:  1px solid #e8eaec;padding: 7px">
                    <FormItem
                        label=" "
                        :prop="'modelData.'+index+'.insuranceDebt'"
                        :rules="[{required: true, validator: '',  message: '请输入',type:'number', trigger: 'blur'},
                        {pattern:/^(0|([1-9]\d*))(\.\d{1,2})?$/, message: '请输入正数'}]"
                    >
                      <Input
                          v-model.trim.number="obj.modelData[index].insuranceDebt"
                          disabled=""
                      ></Input>
                    </FormItem>
                  </td>
                  <!--                  收费开始时间-->
                  <td style="border:  1px solid #e8eaec;padding: 7px">
                    <FormItem
                        label=" "
                        :prop="'modelData.'+index+'.startTime'"
                        :rules="{required: true, message: '请输入'}">
                      <DatePicker type="date"
                                  transfer
                                  format="yyyy-MM-dd"
                                  @on-change="obj.modelData[index].startTime = $event, setOptions($event,item,index,'start')"
                                  placeholder="开始时间"
                                  v-model="obj.modelData[index].startTime"
                                  :disabled="Boolean(flag)"
                      >
                        <!--                    @on-change="modelData[index].startTime = $event"-->
                      </DatePicker>
                    </FormItem>
                  </td>
                  <!--                  收费截止时间-->
                  <td style="border:  1px solid #e8eaec;padding: 7px">
                    <FormItem
                        label=" "
                        :prop="'modelData.'+index+'.endTime'"
                        :rules="{required: true, message: '请输入'}">
                      <DatePicker type="date"
                                  transfer
                                  format="yyyy-MM-dd"
                                  :options='timeOptions[timeIndex]'
                                  placeholder="截止时间"
                                  @on-change="obj.modelData[index].endTime = $event"
                                  @on-open-change="setOptions($event,item,index, 'end')"
                                  v-model="obj.modelData[index].endTime"
                                  :disabled="Boolean(flag)"
                      >
                      </DatePicker>
                    </FormItem>
                  </td>
                  <!--                  备注-->
                  <td style="border:  1px solid #e8eaec;padding: 7px">
                    <FormItem
                        label=""
                        :label-width="0"
                        :prop="'modelData.'+index+'.remark'"
                    >
                      <Input
                          v-model="obj.modelData[index].remark"
                          :show-word-limit='true'
                          :maxlength="100"
                          :disabled="Boolean(flag)"
                      ></Input>
                    </FormItem>
                  </td>
                  <!--                  操作-->
                  <td style="border:  1px solid #e8eaec;padding: 0px 7px 0px 7px;width: 180px;text-align: center">
                    <Button type="primary" style="" @click="cuteFTP(row,index)"
                            v-permission="'alliance:business:record:insurance:upload'"
                    >上传
                    </Button>
                    <Poptip
                        v-if="!flag"
                        confirm
                        :transfer="true"
                        title="你确定删除吗?"
                        @on-ok="delInsurance(index)"
                    >
                      <Button type="error">
                        <Icon type="md-trash"/>
                        删除
                      </Button>
                    </Poptip>
                  </td>
                </tr>
              </table>
            </Form>
          </template>

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【JVM】Java内存泄露的排查思路?

文章目录 Java内存为什么会泄露&#xff1f;java内存泄露的排查思路 Java内存为什么会泄露&#xff1f; Java内存泄露&#xff08;Memory Leak&#xff09;是指在Java程序中&#xff0c;无用的对象占用了堆内存&#xff0c;但无法被垃圾回收器回收释放&#xff0c;从而导致可用…

根据Dockerfile创建容器案例讲解

-f为dokerfile的路径&#xff0c; -t为新镜像的名称及版本。 后面这个点是寻址路径。

深入篇【C++】手搓模拟实现二叉搜索树(递归/非递归版本)常见应用场景(K模型与KV模型)

深入篇【C】手搓模拟实现二叉搜索树(递归/非递归版本&#xff09;&&常见应用场景 Ⅰ.二叉搜索树概念Ⅱ.二叉搜索树模拟实现(递归与非递归)①.定义结点②.构造二叉树③.插入结点④.删除结点(重要)⑤.查找结点⑥.析构二叉树⑦.拷贝二叉树⑧.二叉树赋值 Ⅲ.二叉搜索树应用…

Docker服务编排Docker Compose介绍

1.服务编排概念 2.Docker Compose介绍 3.Docker Compose安装及使用

蓝桥杯每日N题(杨辉三角形)

大家好 我是寸铁 希望这篇题解对你有用&#xff0c;麻烦动动手指点个赞或关注&#xff0c;感谢您的关注 不清楚蓝桥杯考什么的点点下方&#x1f447; 考点秘籍 想背纯享模版的伙伴们点点下方&#x1f447; 蓝桥杯省一你一定不能错过的模板大全(第一期) 蓝桥杯省一你一定不…

【Docker】 使用Docker-Compose 搭建基于 WordPress 的博客网站

引 本文将使用流行的博客搭建工具 WordPress 搭建一个私人博客站点。部署过程中使用到了 Docker 、MySQL 。站点搭建完成后经行了发布文章的体验。 WordPress WordPress 是一个广泛使用的开源内容管理系统&#xff08;CMS&#xff09;&#xff0c;用于构建和管理网站、博客和…

[Go版]算法通关村第十一关白银——位运算的高频算法题

目录 专题1&#xff1a;位移的妙用题目&#xff1a;位1的个数&#xff08;也被称为汉明重量&#xff09;解法1&#xff1a;遍历所有位&#xff0c;判断每个位的数字是否是1Go代码 解法2&#xff1a;依次消除每个1的位 numnum&(num-1)Go代码 题目&#xff1a;比特位计数思路…

C#引用Web Service 类型方法,添加搜索本地服务器Web Service 接口调用方法

首先保证现在网络能调用web service接口&#xff0c;右键项目添加服务引用 ![![在这里插入图片描述](https://img-blog.csdnimg.cn/555ba4fa5e2a418f8f85539a9406bcd6.png) 点击高级 添加web服务 输入搜索的服务器接口&#xff0c;选中你要添加调用的方法即可 添加完成调用方…

win10在vmware16.2.3上安装macos13.1系统

第一步、安装vmware版本信息如下 第二步、下载unlocker426放到安装文件夹 第三步、管理员身份运行unlock.exe 第四步、运行vmware新建虚拟机 第五步、启动新创建的虚拟机macOS13.1并选择语言 第六步、选择磁盘工具抹掉格式化安装磁盘 第七步、格式化完成后退出磁盘工具 第八步、…

DAY4,ARM(用c语言点亮LED灯,封装库代码,软件编程控制硬件)

---gpio.h头文件--- #ifndef __LED_H__ #define __LED_H__//1RCC_MP_AHB4ENSETR寄存器封装 #define RCC_MP_AHB4ENSETR (*(volatile unsigned int*)0x50000a28)//2GPIO封装结构体 typedef struct {volatile unsigned int MODER;volatile unsigned int OTYPER;volatile unsigne…

SpringBoot集成Solr(二)搜索数据

SpringBoot集成Solr&#xff08;二&#xff09;搜索数据 1.1 构建查询条件 //创建 solr查询参数对象 SolrQuery query new SolrQuery(); StringBuilder params new StringBuilder(); params.append(" subject_s:*").append(text).append("*"); params.a…

【深度学习 | 感知器 MLP(BP神经网络)】掌握感知的艺术: 感知器和MLP-BP如何革新神经网络

&#x1f935;‍♂️ 个人主页: AI_magician &#x1f4e1;主页地址&#xff1a; 作者简介&#xff1a;CSDN内容合伙人&#xff0c;全栈领域优质创作者。 &#x1f468;‍&#x1f4bb;景愿&#xff1a;旨在于能和更多的热爱计算机的伙伴一起成长&#xff01;&#xff01;&…

.NET Core发布到IIS

项目介绍 1、开发工具Visual Studio 2017&#xff0c;语言C#&#xff0c;SQL SERVER&#xff0c;WIN10 2、本地IIS&#xff0c;手机上或其他用户在和本地在同一个局域网内访问,同时要把防火墙关掉 3、IIS全名Internet Information Services&#xff0c;用来发布网站 先决条件 安…

渗透测试面试题汇总(附答题解析+配套资料)

注&#xff1a;所有的资料都整理成了PDF&#xff0c;面试题和答案将会持续更新&#xff0c;因为无论如何也不可能覆盖所有的面试题。 一、思路流程 1、信息收集 a、服务器的相关信息&#xff08;真实ip&#xff0c;系统类型&#xff0c;版本&#xff0c;开放端口&#xff0c;…

lvs集群与nat模式

一&#xff0c;什么是集群&#xff1a; 集群&#xff0c;群集&#xff0c;Cluster&#xff0c;由多台主机构成&#xff0c;但是对外只表现为一个整体&#xff0c;只提供一个访问入口&#xff08;域名与ip地址&#xff09;&#xff0c;相当于一台大型计算机。 二&#xff0c;集…

== 和 equals 的对比 [面试题]

和 equals 的对比[面试题] 文章目录 和 equals 的对比[面试题]1. 和 equals 简介2. Object 类中 equals() 源码3. String 类中 equals() 源码4. Integer 类中 equals() 源码5. 如何重写 equals 方法 1. 和 equals 简介 是一个比较运算符 &#xff1a;既可以判断基本数据类型…

ArcGIS Maps SDK for JavaScript系列之三:在Vue3中使用ArcGIS API加载三维地球

目录 SceneView类的常用属性SceneView类的常用方法vue3中使用SceneView类创建三维地球项目准备引入ArcGIS API创建Vue组件在OnMounted中调用初始化函数initArcGisMap创建Camera对象Camera的常用属性Camera的常用方法 要在Vue 3中使用ArcGIS API for JavaScript加载和展示三维地…

Linux多线程【初识线程】

✨个人主页&#xff1a; 北 海 &#x1f389;所属专栏&#xff1a; Linux学习之旅 &#x1f383;操作环境&#xff1a; CentOS 7.6 阿里云远程服务器 文章目录 &#x1f307;前言&#x1f3d9;️正文1、什么是线程&#xff1f;1.1、基本概念1.2、线程理解1.3、进程与线程的关系…

双向-->带头-->循环链表

目录 一、双向带头循环链表概述 1.什么是双向带头循环链表 2.双向带头循环链表的优势 3.双向带头循环链表简图 二、双向带头循环链表的增删查改图解及代码实现 1.双向带头循环链表的头插 2.双向带头循环链表的尾插 3.双向带头循环链表的头删 4.双向带头循环链表的尾删…

Linux - 借助 inotifywait,轻松实现 Linux 文件/目录事件监听

文章目录 inotify-tools 依赖包使用示例 inotify-tools 依赖包 [rootVM-24-3-centos ~]# yum install inotify-tools Loaded plugins: fastestmirror, langpacks Repository epel is listed more than once in the configuration Determining fastest mirrors ...... ...... ..…