vue2+elementui,动态生成的表单校验

话不多,先上一段视频,看看是不是你们需要的效果 

elementui动态生成表单校验

附上代码

<template><div class="home"><div class="home-box"><!-- <menuHtml></menuHtml> --><div class="home-div"><div style="margin-top: 20px;display:flex;justify-content: space-between;"><div><span class="blueBlock">&nbsp;</span><span class="title">问卷编辑</span></div><div><span style="color:#F56C6C;">问卷编辑完成,千万不要忘记点击保存哦<i class="el-icon-thumb"style="transform: rotate(90deg);"></i></span><el-button type="primary" plain size="mini" icon="el-icon-s-claim"@click="save('form')">保存</el-button></div></div><el-form abel-position='top' :model="form" ref="form"><div class="content"><div class="content-top"><el-form-item prop="title" :rules="{required: true, message: '  ', trigger: 'blur' }"><el-input size="small" v-model="form.title" placeholder="请输入问卷标题"><el-button slot="append" @click="addQuestion()" icon="el-icon-circle-plus-outline">添加问题</el-button></el-input></el-form-item></div><div class="content-box"><div class="content-center" v-for="(question,index) in form.questionList"><el-form-item><el-radio v-model="question.type" :label="1">单选</el-radio><el-radio v-model="question.type" :label="2">多选</el-radio><el-radio v-model="question.type" :label="3">开放式问题</el-radio></el-form-item><el-form-item class="question" :prop="'questionList.'+index+'.name'":rules="{required: true, message: '', trigger: 'blur' }"><el-input placeholder="请输入问题" size="small" v-model="question.name"><template slot="prepend">Q{{index+1}}.</template></el-input><div @click="delQuestion(index)"><i class="el-icon-delete-solid"></i><span>删除</span></div></el-form-item><el-form-item v-if="question.type==3" :prop="'questionList.'+index+'.answer2'":rules="{required: true, message: '  ', trigger: 'blur' }"><el-input type="textarea" :rows="4" placeholder="请输入答案" v-model="question.answer2"resize="none"></el-input></el-form-item><el-form-item v-else><div class="answer" v-for="(answer,index1) in question.answerList"><el-form-item :prop="'questionList.'+index+'.answerList.'+index1+'.name'" :rules="{required: true, message: '  ', trigger: 'blur' }"><el-input size="small" placeholder="请输入答案" v-model="answer.name"><template slot="prepend">{{chars[index1]}}.</template></el-input></el-form-item><div class="answer-right"><el-button @click="delAnswer(index,index1,question)" size="mini"icon="el-icon-minus" circle type="danger" plain></el-button><el-button v-if="question.answerList.length==index1+1"@click="addAnswer(index,index1)" size="mini" icon="el-icon-plus" circletype="primary" plain></el-button></div></div></el-form-item><el-form-item label="正确答案" v-if="question.type==1" :prop="'questionList.'+index+'.answer'" :rules="{required: true, message: '  ', trigger: 'blur' }"><el-select size="mini" v-model="question.answer" placeholder="请选择答案"><el-option v-for="(item,index2) in question.answerList" :key="index2":label="chars[index2]" :value="index2"></el-option></el-select></el-form-item><el-form-item label="正确答案" v-if="question.type==2":prop="'questionList.'+index+'.answer1'" :rules="{required: true, message: '  ', trigger: 'blur' }"><el-select size="mini" multiple v-model="question.answer1" placeholder="请选择答案"><el-option v-for="(item,index2) in question.answerList" :key="index2":label="chars[index2]" :value="index2"></el-option></el-select></el-form-item></div></div></div></el-form></div></div></div>
</template><script>// import menuHtml from '../../../view/leaf-content/menuHtml.vue'export default {name: 'addWjByTeacher',components: {// menuHtml,},props: [],data() {return {chars: ['A', 'B', 'C', 'D'],form: {title: '',// questionList: [],questionList: [{type: 1, //1.单选,2:多选,3开放式问题questionTitle: '',answerList: [{}],answer: '', //单选答案answer1: [], //多选答案answer2: '', //开放式问题答案}, {type: 2, //1.单选,2:多选,3开放式问题questionTitle: '',answerList: [{}],answer: '',answer1: [],answer2: '',}, {type: 3, //1.单选,2:多选,3开放式问题questionTitle: '',answerList: [{}],answer: '',answer1: [],answer2: '',}],}}},methods: {addQuestion() { //添加问题this.form.questionList.push({type: 1, //1.单选,2:多选,3开放式问题questionTitle: '',answerList: [{}],answer: '',});},delQuestion(index) { //删除问题this.form.questionList.splice(index, 1);},addAnswer(questionIndex, answerIndex) { //添加答案console.log(answerIndex);if (answerIndex < 3) {this.form.questionList[questionIndex].answerList.push({});}},delAnswer(questionIndex, answerIndex, question) { //删除答案if (answerIndex >= 1) {this.form.questionList[questionIndex].answerList.splice(answerIndex, 1);}//判断单选还是多选,要一同清空掉答案if (question.type == 1) {// this.form.questionList[questionIndex].answerListquestion.answer = "";} else if (question.type == 2) {question.answer1 = "";}},save(formName) { //保存问题this.$refs[formName].validate((valid) => {if (valid) {alert('submit!');} else {console.log('error submit!!');return false;}});},},mounted() {},destroyed() {},created() {}}
</script><style scoped>@import '../../../../assets/css/screenBase.css';.home {margin-top: 100px;}.home-box {margin: 0 auto;display: flex;align-items: flex-start;width: 1000px;justify-content: center}.home-div {width: 1000px;height: 650px;background-color: #fff;border-radius: 10px;/* 	padding-top: 20px; */padding-right: 40px;padding-left: 40px;/* padding-bottom: 20px; */}.blueBlock {height: 8px;width: 2px;background-color: #226cd3;margin-right: 10px;}.title {font-weight: 600;font-size: 24px;}.content {display: flex;flex-direction: column;align-items: flex-start;width: 900px;}.el-form-item {margin-bottom: 0px;}.content-top {margin-top: 20px;display: flex;}.content-top /deep/ input {width: 800px;}.content-center {width: 880px;background-color: #e9f5f136;border-radius: 10px;margin-top: 5px;padding: 10px;box-shadow: 0 2px 4px rgba(0, 0, 0, .12), 0 0 6px rgba(0, 0, 0, .04);}.content-box {/* margin-top: 20px; */padding: 5px;height: 500px;overflow: hidden;overflow-y: auto;}/deep/.el-form--label-top .el-form-item__label {padding: 0px;}.btn {margin-top: 40px;text-align: center;}.question {}.question /deep/.el-form-item__content {display: flex;align-items: flex-start;justify-content: flex-start;}/* .answer /deep/.el-form-item__content {display: flex;align-items: flex-start;justify-content: flex-start;width: 750px;} */.question /deep/ input {width: 550px;}.question div {width: 100px;text-align: center;}.question i {color: #F56C6C;margin-right: 5px;}.answer /deep/ .el-input-group--prepend {width: 500px;}.answer /deep/ .el-input__inner {width: 500px;}.answer-right {width: 100px;display: flex;align-items: flex-start;/* text-align: center; */}.answer-right span {width: 25px;height: 25px;line-height: 25px;text-align: center;display: inline-block;background: #FFFFFF;border-radius: 8px;border: 1px solid #CCD3E7;}.answer-right i {color: #000;font-weight: 600;}.answer {display: flex;align-items: center;}
</style>

最主要的地方,因为我是双层的循环遍历,先看第一层的注意地方

最最最最最最最主要的地方,这是第二层的地方

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

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

相关文章

k8s AIOps

k8s AIOps 主要介绍下k8sgpt 官站 github 介绍 k8sgpt 是一个用于扫描Kubernetes集群、诊断和分级问题的工具。它以简单的英语呈现问题&#xff0c;并将站点可靠性工程&#xff08;SRE&#xff09;的经验编码到其分析器中。通过AI丰富问题的解释&#xff0c;k8sgpt帮助提取最…

【C++】初识C++

【C】初识C 文章概括关键字&#xff08;C98&#xff09;命名空间命名空间的定义命名空间的特性 输入与输出C中的输入输出输入输出的命名空间 缺省参数函数重载引用引用的概念引用的特性引用地使用场景引用做参数引用做返回值 常引用常引用的俩个例子 引用与指针的区别 内联函数…

web端中使用vue3 实现 移动端的上拉滚动加载功能

需要再web端实现上拉加载 纯属web端的东西 类似这样的功能效果 能够在web端实现滚动分页 overflow-y: scroll;首先给这个大盒子 一个 css 样式 支持滚动 再给固定高度 这个盒子里的内容就能立马滚动起来 给这个盒子一个ref 的属性 以及 有原生滚动事件 scroll const handle…

通过龙讯旷腾PWmat发《The Journal of Chemical Physics》 :基于第一性原理分子动力学热力学积分的离子溶剂化自由能计算

背景导读 离子溶解是电化学中一个重要的过程。电化学反应中许多重要的参数&#xff0c;例如电化学还原电位、无限稀释活度系数、亨利定律溶解常数和离子溶解度等&#xff0c;都与离子的溶剂化能有关。然而&#xff0c;由于测量技术和数据处理的困难&#xff0c;离子溶剂化能的…

vCenter7.0安装部署

vCenter7.0安装部署 一、准备环境二、创建新的虚拟机1.创建虚拟机2.第3-5步可直接默认安装并同意许可协议。3.其他设置4.第一阶段直接点完成即可 三、进入第二阶段安装&#xff08;输入ip&#xff1a;5480进入安装界面&#xff09; 一、准备环境 准备一台exsi&#xff0c;并登…

MySQL之查询性能优化(九)

查询性能优化 MySQL查询优化器的局限性 UNION的限制 有时&#xff0c;MySQL无法将限制条件从外层"下推"到内层&#xff0c;这使得原本能够限制部分返回结果的条件无法应用到内层查询的优化上。如果希望UNION的各个子句能够根据LIMIT只取部分结果集&#xff0c;或者…

项目沟通管理

目录 1.概述 2.项目沟通的重要性和必要性 2.1.项目沟通的重要性 2.2.项目沟通的必要性 2.3.具体措施 3.三个过程 3.1.规划沟通管理 3.2.管理沟通 3.3.监督沟通 3.4.对应过程组 4.应用场景 4.1.十个应用场景 4.2.新产品开发项目需要与多个部门协调沟通 5.总结 1.概…

调节效应多元统计回归

什么是调节效应&#xff0c;给个例子说明一下: 背景 假设我们有一个国家的经济数据&#xff0c;我们希望研究产业数字化是否调节了环境规制对产业结构调整的影响。 步骤 1. 假设检验 原假设 (H0)&#xff1a; 产业数字化对环境规制与产业结构调整之间的关系没有调节作用。…

银河麒麟V10_系统如何自定义添加桌面右键菜单选项

本篇博客取自《银河麒麟桌面操作系统软件适配常见问题指导手册》官网可以下载。 环境 系统版本 适用系统&#xff1a;V10&#xff08;SP1&#xff09;适用架构&#xff1a;X86、ARM、MIPS 其他版本和架构可做参考。 解决方案 使用下面的这个demo 编译就可以看到效果 peony…

每日一题——Python实现PAT甲级1063 Set Similarity(举一反三+思想解读+逐步优化)

一个认为一切根源都是“自己不够强”的INTJ 个人主页&#xff1a;用哲学编程-CSDN博客专栏&#xff1a;每日一题——举一反三Python编程学习Python内置函数 Python-3.12.0文档解读 目录 我的写法 优点 改进建议 时间复杂度分析 空间复杂度分析 总结 我要更强 优化方…

【C语言】指针(4)

一、回顾 在这之前&#xff0c;我们学习了很多关于指针的内容&#xff0c;我们先在这里简单的回顾一下。 1、一级指针 int* p; -- 整形指针-指向整形的指针 char* p; ... void* p;... ... 2、二级指针 int** p; char** p; ... 3、数组指针 -- 指向数组的指针 int (*p)[ ]…

3038. 相同分数的最大操作数目 I(Rust模拟击败100%Rust用户)

题目 给你一个整数数组 nums &#xff0c;如果 nums 至少 包含 2 个元素&#xff0c;你可以执行以下操作&#xff1a; 选择 nums 中的前两个元素并将它们删除。 一次操作的 分数 是被删除元素的和。 在确保 所有操作分数相同 的前提下&#xff0c;请你求出 最多 能进行多少次…

Python | Leetcode Python题解之第136题只出现一次的数字

题目&#xff1a; 题解&#xff1a; class Solution:def singleNumber(self, nums: List[int]) -> int:return reduce(lambda x, y: x ^ y, nums)

Vue07-MVVM模型

一、MVVM模型的定义 M&#xff1a;模型&#xff08;model&#xff09;&#xff1a;对应data中的数据&#xff1b;V&#xff1a;视图&#xff08;view&#xff09;&#xff1a;模版&#xff1b;VM&#xff1a;视图模型&#xff08;ViewModel&#xff09;Vue的实例对象。 Vue.js…

WSDM2022推荐系统相关论文整理(一)

2022年第15届国际网络搜索与数据挖掘会议WSDM在2022年2月21日到25日于线上举行&#xff0c;共收到了786份有效投稿&#xff0c;最终录取篇数为159篇&#xff0c;录取率为20.23%。作为主流的搜索与数据挖掘会议&#xff0c;论文的话题主要侧重于搜索、推荐以及数据挖掘领域&…

第二证券炒股知识:北交所的股票是a股吗?是主板吗?

北交所的股票是a股&#xff0c;但不属于主板&#xff0c;是一个单独的板块。 A股主板是在上海证券买卖所或许深圳证券买卖所上市的公司&#xff0c;主板通常是大盘股&#xff0c;多为商场占有率高、规划大、盈余安稳良好的大型企业。沪市主板以600、601或603最初&#xff0c;深…

(学习笔记)数据基建-数据安全

&#xff08;学习笔记&#xff09;数据基建-数据安全 数据安全数据安全实施难点数据安全保障流程数据安全措施实施阶段数据安全如何量化产出数据安全思考 数据安全 数据安全问题是最近比较热的话题&#xff0c;数据泄漏引发的用户信任危机事件也比比皆是&#xff0c;以及跨部门…

一个案例,剖析攻防演练中威胁溯源的正确姿势

一年一度的攻防演练即将拉开帷幕。“威胁溯源”一直是演练活动中一个十分重要的工作项&#xff0c;它不仅有助于理解和分析攻击的来源、方法和动机&#xff0c;还能够显著提升整体安全防护水位&#xff0c;提升组件与人员的联动协作能力。在真实的攻击场景中&#xff0c;溯源工…

verilog 232串口通信程序

1,串口通信协议: 通常串口的一次发送或接收由四个部分组成:起始位S、数据位D0~D7(一般为 6 位~8 位之间可变,数据低位在前)、校验位(奇校验、偶检验或不需要校验位)、停止位(通常为1位、1.5位、2位)。停止位必须为逻辑 1。在一次串口通信过程中,数据接收与发送双方…

[STM32]定位器与PWM的LED控制

目录 1. 深入了解STM32定时器原理&#xff0c;掌握脉宽调制pwm生成方法。 (1)STM32定时器原理 原理概述 STM32定时器的常见模式 使用步骤 (2)脉宽调制pwm生成方法。 2. 实验 (1)LED亮灭 代码 测试效果 (2)呼吸灯 代码 测试效果 3.总结 1. 深入了解STM32定时器原…