element ui实现多层级复杂表单的操作(添加与回显)之表单操作交互操作

大家好,我是雄雄,欢迎关注微信公众号:雄雄的小课堂

前言

现在是2022年5月3日11:47:15!劳动节假期已经过去了三天了,今天是被封家里的第7天,也是解封的第一天。

说实话,在家里的工作效率一点都不如公司的高,这两天完善了下系统中一个复杂表单的操作,大致实现的是这样的功能:

  • 一个设备下是可以添加多个采集类型的

  • 每个采集类型下面可以添加多个元素个数

  • 根据元素个数不同,来添加其他信息

由于内容有点多,所以我分了三篇来整理,分别是:

  1. element ui实现多层级复杂表单的操作(添加与回显)之表单操作交互操作
  2. element ui实现多层级复杂表单的操作(添加与回显)之添加功能实现
  3. element ui实现多层级复杂表单的操作(添加与回显)之回显功能实现

实现效果图如下:

有些地方打码了,不过不影响整个效果的展示。这个写起来还是有点复杂的,尤其是在回显内容的时候,费了不少周折,下面来分享一下这块儿功能的实现。

实现思路

  • 声明一个变量,用来存放采集数据的个数。

  • 通过v-for循环,展示页面中有多少个采集数据的表单个数。

  • 点击最下面新增的按钮时,会添加一个采集数据的表单,所以这块儿内容我们得动态操作,我这边的方法是,v-model="xxx[index]"的方式实现,index用来区分当前是第几个,在后面取值的时候也方便。

  • 继续身边一个formList变量,作为下面表格的表单,也是根据元素个数来循环的

  • 注意:凡是在循环中的,v-model都不可以一样,否则会造成数值错乱的情况(多个表单中的值一样)

实现展示多个采集数据表单

html代码:

<div v-for="(item,index) in attribute" v-if="index < checkList.length"><el-row :gutter="10" style="margin-top: 20px;"><el-row><el-col :span="12"><span style="font-size: 15px;font-weight: 600;margin: 5px 0 0 30px;">采集数据</span></el-col></el-row><el-row style="margin-top: 20px;"><el-col :span="8"><el-form-itemlabel="采集数据类型:"prop="checkList":rules="[{required: true,message: '请选择采集数据类型',trigger: 'blur',},]"><el-select v-model="deviceDataCheck[index]" @change="deviceDataCheckChange($event,[index])" placeholder="请选择采集数据类型"><el-optionv-for="item in checkList":key="item.dictKey":label="item.dictValue":value="item.dictKey"></el-option></el-select></el-form-item></el-col><el-col :span="8"><el-form-itemlabel="固定:"prop="":rules="[{required: false,message: '示例:100或者250',trigger: 'blur',},]"><el-input-number style="width: 80%;" :min="1" v-model="samplingFrequency[index]" placeholder="示例:100" :step="1"></el-input-number></el-form-item></el-col><el-col :span="8"><el-form-itemlabel="类别式:"prop="schemeOfDataSourceType":rules="[{required: true,message: '大于或等于1的整数',trigger: 'blur',},]"><el-select v-model="schemeOfDataSourceType[index]" placeholder="请选择 类别描述方式"><el-optionv-for="item in schemeOfDataSourceTypeList":key="item.dictKey":label="item.dictValue":value="item.dictKey"></el-option></el-select></el-form-item></el-col></el-row><el-row><el-col :span="8"><el-form-item label="数据元素个数:" prop="countOfCompound" :rules="[{required: false,message: '大于或等于1的整数',trigger: 'blur',}]"><el-input-number style="width: 80%;":disabled="isCountOfComw[index]" :min="1" v-model="countOfCompound[index]"@change="handleChange($event,[index])" placeholder="示例:1" controls-position="right"></el-input-number></el-form-item></el-col><el-col :span="8"><el-form-itemlabel="测量:"prop="measurePeriodExist":rules="[{required: true,message: '请选择',trigger: 'blur',},]"><el-selectv-model="measurePeriodst[index]"@change="forceUpdateChange"placeholder="请选择"><el-optionv-for="item in measurePeriod":key="item.dictKey":label="item.dictValue":value="item.dictKey"></el-option></el-select></el-form-item></el-col><el-col v-if="countOfCompound[index] != null" :span="24" style="margin-bottom: 30px"><el-col :span="24" style="margin-bottom: 0px"><el-col style="text-align: center;line-height: 40px;border: 1px solid #dcdfe6;margin-bottom: 0px;" :span="3">序号</el-col><el-col style="text-align: center;line-height: 40px;border: 1px solid #dcdfe6;margin-bottom: 0px;":span="5">采集数据类型</el-col><el-colstyle="text-align: center;line-height: 40px;border: 1px solid #dcdfe6;margin-bottom: 0px;":span="4">类别</el-col><el-colstyle="text-align: center;line-height: 40px;border: 1px solid #dcdfe6;margin-bottom: 0px;":span="4">单位</el-col><el-colstyle="text-align: center;line-height: 40px;border: 1px solid #dcdfe6;margin-bottom: 0px;":span="3">类型</el-col><el-colstyle="text-align: center;line-height: 40px;border: 1px solid #dcdfe6;margin-bottom: 0px;":span="5">类型</el-col></el-col><el-divider></el-divider></div>

页面中有多少采集数据的表单取决于,点了多少下新增的按钮,默认只有一个,点一下新增按钮就多加一个 ,所以此时我们需要声明一个用来记录采集数据个数的变量。在data中声明:

attribute: [1],

然后在method中写新增的点击事件:

//新增采集数据属性按钮addAttribute(){//小于采集数据类型的话可以加if(this.attribute.length<this.checkList.length){this.attribute.push(this.attribute.length+1);}},

checkList的值是采集数据类型的下拉,先声明在使用,代码如下:

checkList: [],

mounted中构造checkList集合:

//采集数据类型getDictionary({ code: "deviceData" }).then((res) => {this.checkList = res.data.data;let arr = [];for(let i = 0; i < this.checkList.length; i++) {arr[i] = true;}this.isCountOfCompoundShow = [arr];});

注意此处加了个判断,当时考虑的是,采集数据不可以无限新增,取决于采集数据下面的采集数据类型下拉,下拉中有多少个值,就可以新加多少个,为了直观展示,可以看看下面的图:

现在我们就实现了,点击新增按钮时,动态的添加一个采集数据表单,默认之后一个,最多只能添加采集数据类型下拉框中的个数。

根据元素个数,动态生成表格

因为下面表格中的行数是由上面元素个数来决定的,所以需要编写元素个数数字表单的改变事件。此处还有个地方需要验证,即上面采集数据类型如果不写的话,下面元素个数是禁用状态,无法操作。

html代码

<el-row><el-col :span="8"><el-form-item label="数据元素个数:" prop="countOfCompound" :rules="[{required: false,message: '大于或等于1的整数',trigger: 'blur',}]"><el-input-number style="width: 80%;":disabled="isCountOfCompoundShow[index]" :min="1" v-model="countOfCompound[index]"@change="handleChange($event,[index])" placeholder="示例:1" controls-position="right"></el-input-number></el-form-item></el-col><el-col :span="8"><el-form-itemlabel="测:"prop="measurePeriodExist":rules="[{required: true,message: '请选择是',trigger: 'blur',},]"><el-selectv-model="measurePeriodExist[index]"@change="forceUpdateChange"placeholder="请选择"><el-optionv-for="item in measurePeriodExistList":key="item.dictKey":label="item.dictValue":value="item.dictKey"></el-option></el-select></el-form-item></el-col><el-col v-if="countOfCompound[index] != null" :span="24" style="margin-bottom: 30px"><el-col :span="24" style="margin-bottom: 0px"><el-col style="text-align: center;line-height: 40px;border: 1px solid #dcdfe6;margin-bottom: 0px;" :span="3">序号</el-col><el-col style="text-align: center;line-height: 40px;border: 1px solid #dcdfe6;margin-bottom: 0px;":span="5">采集数据类型</el-col><el-colstyle="text-align: center;line-height: 40px;border: 1px solid #dcdfe6;margin-bottom: 0px;":span="4">数据源各元素类别</el-col><el-colstyle="text-align: center;line-height: 40px;border: 1px solid #dcdfe6;margin-bottom: 0px;":span="4">数值单位</el-col><el-colstyle="text-align: center;line-height: 40px;border: 1px solid #dcdfe6;margin-bottom: 0px;":span="3">数据类型</el-col><el-colstyle="text-align: center;line-height: 40px;border: 1px solid #dcdfe6;margin-bottom: 0px;":span="5">度量属性类型</el-col></el-col><!--表格--><el-col v-for="(items, indexL) in formList[index]" :key="indexL" :span="24" style="margin-bottom: 0px; height: 40px"><!-- 序号 --><el-col style="text-align: center;line-height: 40px;border: 1px solid #dcdfe6;margin-bottom: 0px;height: 40px;" :span="3">{{ indexL + 1 }}</el-col><!-- 采集数据类型 --><el-col style="text-align: center;line-height: 40px;border: 1px solid #dcdfe6;margin-bottom: 0px;height: 40px;" :span="5"><span v-if="deviceDataCheck[index] == 'hr'">心率</span><span v-if="deviceDataCheck[index] == 'rri'">RRI</span></el-col><!-- 数据源各元素类别 --><el-col style="text-align: center;line-height: 40px;border: 1px solid #dcdfe6;margin-bottom: 0px;height: 40px;" :span="4"><el-form-item prop="dataSourceType":rules="[{required: true,message: '请选择数据源类别',trigger: 'blur',},]"label-width="0px"><el-select v-model="items.dataSourceType" @change="forceUpdateChange" style="width: 100%" placeholder="请选择数据源各元素类别"><el-option v-for="item in dataSourceTypeList" :key="item.dictKey" :label="item.dictValue" :value="item.dictKey"></el-option></el-select></el-form-item></el-col><!-- 数值单位 --><el-col style="text-align: center;line-height: 40px;border: 1px solid #dcdfe6;margin-bottom: 0px;height: 40px;" :span="4"><el-form-itemprop="unitCode":rules="[{required: true,message: '请选择数值单位',trigger: 'blur',},]"label-width="0px"><el-selectv-model="items.unitCode"@change="forceUpdateChange"style="width: 100%"placeholder="请选择 数值单位"><el-optionv-for="item in unitCodeList":key="item.dictKey":label="item.dictValue":value="item.dictKey"></el-option></el-select></el-form-item></el-col><!-- 数据类型 --><el-col style="text-align: center;line-height: 40px;border: 1px solid #dcdfe6;margin-bottom: 0px;height: 40px;" :span="3"><el-form-itemprop="dataType":rules="[{required: true,message: '请选择采集数据类型',trigger: 'blur',},]"label-width="0px"><el-selectv-model="items.dataType"@change="forceUpdateChange"style="width: 100%"placeholder="请选择 数据类型"><el-optionv-for="item in dataTypeList":key="item.dictKey":label="item.dictValue":value="item.dictKey"></el-option></el-select></el-form-item></el-col><!-- 度量属性类型 --><el-col style="text-align: center;line-height: 40px;border: 1px solid #dcdfe6;margin-bottom: 0px;height: 40px;" :span="5"><el-form-itemprop="metricSpec":rules="[{required: true,message: '请选择度量属性类型',trigger: 'blur',},]"label-width="0px"><el-selectv-model="items.metricSpec"@change="forceUpdateChange"style="width: 100%"placeholder="请选择 度量属性类型"><el-optionv-for="item in metricSpecList":key="item.dictKey":label="item.dictValue":value="item.dictKey"></el-option></el-select></el-form-item></el-col></el-col></el-col></el-row>

接下来就是元素个数数字表单的改变事件:

 //元素个数的改变事件handleChange(value,index) {this.formList[index] = [];let num = this.formList[index].length;for (let i = 0; i < value - num; i++) {this.formList[index].push({dataSourceType: "",unitCode: "",dataType: "",metricSpec: "",//checkType: this.checkList[0].dictValue,});}},

以上内容即可实现静态页面表单的交互。

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

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

相关文章

TypeScript 2.5 发布,增加语言级重构

在 TypeScript 2.5 版本中&#xff0c;Microsoft 专注于提高开发人员的生产力&#xff0c;其范围已经超出了代码编辑器所提供的常见功能。 习惯于类型语言&#xff08;如 C&#xff03;&#xff09;的开发人员喜欢使用那些可以轻松执行常见重构的工具。现在 TypeScript 可以利…

element ui实现多层级复杂表单的操作(添加与回显)之添加功能实现

大家好&#xff0c;我是雄雄&#xff0c;欢迎关注微信公众号&#xff1a;雄雄的小课堂 前言 现在是2022年5月3日13:35:15&#xff01;文接上篇。[element ui实现多层级复杂表单的操作&#xff08;添加与回显&#xff09;之表单操作交互操作](element ui实现多层级复杂表单的操…

Entity Framework Core Like 查询揭秘

在Entity Framework Core 2.0中增加一个很酷的功能&#xff1a;EF.Functions.Like()&#xff0c;最终解析为SQL中的Like语句&#xff0c;以便于在 LINQ 查询中直接调用。 不过Entity Framework 中默认提供了StartsWith、Contains和EndsWith方法用于解决模糊查询&#xff0c;那…

element ui实现多层级复杂表单的操作(添加与回显)之回显功能实现

大家好&#xff0c;我是雄雄&#xff0c;欢迎关注微信公众号&#xff1a;雄雄的小课堂 前言 现在是2022年5月3日17:02:30&#xff01;文接上两篇。 [element ui实现多层级复杂表单的操作&#xff08;添加与回显&#xff09;之表单操作交互操作](element ui实现多层级复杂表单…

在Mac的Docker中运行DotNetCore2.0

最近学习Angular4&#xff0c;服务端准备使用DotNetCore API来实现&#xff0c;本文简单介绍下在Mac中怎样将DotNetCore程序部署在Docker中&#xff0c;并使用Nginx做反向代理让程序可以跑起来。 具体步骤如下 安装Docker拉取DotNetCore镜像使用VS For Mac创建DotNetCore应用…

springboot实现复杂业务下的更新操作

大家好&#xff0c;我是雄雄&#xff0c;欢迎关注微信公众号&#xff1a;雄雄的小课堂 前言 现在是2022年5月4日19:25:55&#xff01;今天写了个这样的功能&#xff1a; 某用户在一天内有多个训练项目&#xff0c;比如&#xff1a;晨跑&#xff0c;有氧训练&#xff0c;跳绳这…

elementui解决el-dialog不清空内容的问题,el-dialog关闭时销毁子组件

大家好&#xff0c;我是雄雄&#xff0c;欢迎关注微信公众号&#xff1a;雄雄的小课堂 前言 现在是2022年5月5日22:48:21&#xff01; 今天在使用element-ui中的el-dialog的时候遇到了个这样的问题&#xff1a;页面上点击添加的按钮&#xff0c;弹出el-dialog对话框&#xff…

MySQL 中的重做日志,回滚日志以及二进制日志的简单总结

转载自 MySQL 中的重做日志&#xff0c;回滚日志以及二进制日志的简单总结 MySQL中有六种日志文件&#xff0c;分别是&#xff1a;重做日志&#xff08;redo log&#xff09;、回滚日志&#xff08;undo log&#xff09;、二进制日志&#xff08;binlog&#xff09;、错误日志…

c语言分离三位数

#include<stdio.h> main(){ int k,l,m,n;printf("请输入一个三位数"); scanf("%d",&k);lk/100;mk/10%10;nk%10;printf("这个三位数的百位是:%d\n",l);printf("这个三位数的十位是:%d\n",m);printf("这个三位数的个位是…

分布式ID自增算法 Snowflake

近在尝试EF的多数据库移植&#xff0c;但是原始项目中主键用的Sqlserver的GUID。MySQL没法移植了。 其实发现GUID也没法保证数据的递增性&#xff0c;又不太想使用int递增主键&#xff0c;就开始探索别的ID形式。 后来发现twitter的Snowflake算法。 一开始我尝试过直接引用N…

java中,根据指定日期显示出前n天的日期

大家好&#xff0c;我是雄雄&#xff0c;欢迎关注微信公众号&#xff1a;雄雄的小课堂 今天分享的是&#xff1a;在java中&#xff0c;根据指定日期显示出前n天的日期 效果如下&#xff1a; 大家注意观察上面的时间&#xff0c;我传入的时间是&#xff1a;2022年5月9日21:28:…

jdbc实现批量给多个表中更新数据(解析Excel表数据插入到数据库中)

大家好&#xff0c;我是雄雄&#xff0c;欢迎关注微信公众号&#xff1a;雄雄的小课堂 前言 现在是&#xff1a;2022年5月19日08:01:51 今天遇到了个这样的需求&#xff0c;解析excel表中的数据&#xff0c;以JDBC的方式&#xff0c;将数据批量更新至不同的数据表中。注意&am…

.Net Core 全局配置读取管理方法 ConfigurationManager

最近在学习.Net Core的过程中&#xff0c;发现.Net Framework中常用的ConfigurationManager在Core中竟然被干掉了。 也能理解。Core中使用的配置文件全是Json&#xff0c;不像Framework使用的XML&#xff0c;暂时不支持也是能理解的&#xff0c;但是毕竟全局配置文件这种东西还…

Http 持久连接与 HttpClient 连接池

转载自 Http 持久连接与 HttpClient 连接池 一、背景 HTTP协议是无状态的协议&#xff0c;即每一次请求都是互相独立的。因此它的最初实现是&#xff0c;每一个http请求都会打开一个tcp socket连接&#xff0c;当交互完毕后会关闭这个连接。 HTTP协议是全双工的协议&#x…

jdbc解析excel文件,批量插入数据至库中

“大家好&#xff0c;我是雄雄&#xff0c;欢迎关注微信公众号&#xff1a;雄雄的小课堂”前言现在是&#xff1a;2022年5月20日09:32:38今天遇到了个这样的需求&#xff0c;解析excel表中的数据&#xff0c;以JDBC的方式&#xff0c;将数据批量更新至不同的数据表中。注意&…

线程2

public class test{/*** 测试延迟继承* param args*/public static void main(String[] args) {Cat catnew Cat();cat.start();//启动线程&#xff0c;会导致run函数的运行Dog dognew Dog();//创建一个线程对象Thread tnew Thread(dog);t.start();}} //继承Thread创建线程 clas…

.NET及.NET Core系统架构

.NET 官方架构指南 Microservices and Docker Containers Web Applications with ASP.NET 官网地址&#xff1a;https://www.microsoft.com/net/learn/architecture 三层及多层架构 Multitier Architecture ASP.NET N-Tier Architecture Schema Visual Studio N-Tier Examp…

Spring Boot 自动配置的 “魔法” 是如何实现的?

转载自 Spring Boot 自动配置的 “魔法” 是如何实现的&#xff1f; Spring Boot是Spring旗下众多的子项目之一&#xff0c;其理念是约定优于配置&#xff0c;它通过实现了自动配置&#xff08;大多数用户平时习惯设置的配置作为默认配置&#xff09;的功能来为用户快速构建出…

解决vue登录信息不及时更新问题

大家好&#xff0c;我是雄雄&#xff0c;欢迎关注微信公众号&#xff1a;雄雄的小课堂 前言 现在是&#xff1a;2022年5月20日09:59:34 前面写过一篇文章&#xff0c;基于bladex框架实现的模拟登录&#xff0c;后来在测试的过程中发现了个问题&#xff0c;即A系统在跳转到本系…

学习ASP.NET Core,怎能不了解请求处理管道[2]: 服务器在管道中的“龙头”地位

ASP.NET Core管道由注册的服务器和一系列中间件构成。我们在上一篇中深入剖析了中间件&#xff0c;现在我们来了解一下服务器。服务器是ASP .NET Core管道的第一个节点&#xff0c;它负责完整请求的监听和接收&#xff0c;最终对请求的响应同样也由它完成。[本文已经同步到《AS…