element+vue 之动态form

news2024/9/27 15:29:39

在这里插入图片描述

1.页面部分

   <div v-for="(item,index) in formList" :key="index">
                        <el-col :span="6" v-if="item.inputType==0">
                            <el-form-item :label="item.conditionName" :prop="item.conditionCode"
                                :rules="{required: item.required==0?false:true, message:item.placeHolder?item.placeHolder:'请输入', trigger: 'change' }">
                                <el-input v-model.trim="detailForm[item.conditionCode]" :placeholder="item.placeHolder"
                                    clearable></el-input>
                            </el-form-item>
                        </el-col>
                        <el-col :span="6" v-else-if="item.inputType==1">
                            <el-form-item :label="item.conditionName" :prop="item.conditionCode"
                                :rules="{required: item.required==0?false:true, message: item.placeHolder?item.placeHolder:'请输入', trigger: 'change' }">
                                <el-input v-model.number="detailForm[item.conditionCode]"
                                    :placeholder="item.placeHolder" clearable></el-input>
                            </el-form-item>
                        </el-col>
                        <el-col :span="24" v-else-if="item.inputType==2">
                            <el-form-item :label="item.conditionName" :prop="item.conditionCode" :rows="3"
                                :rules="{required: item.required==0?false:true, message:item.placeHolder?item.placeHolder:'请输入', trigger: 'change' }">
                                <el-input clearable style="width: 100%" v-model.trim="detailForm[item.conditionCode]"
                                    autocomplete="off" placeholder="请输入" type="textarea" maxlength="100"></el-input>
                            </el-form-item>
                        </el-col>

                        <el-col :span="24" v-else-if="item.inputType==3">
                            <el-form-item :label="item.conditionName" :prop="item.conditionCode"
                                :rules="{required: item.required==0?false:true, message:item.placeHolder?item.placeHolder:'请选择', trigger: 'change' }">
                                <!-- <el-input v-model="detailForm[item.conditionCode]" v-show="false" /> -->
                                <el-upload list-type="picture-card" action="#" :headers="headers" multiple
                                    :before-upload="beforeUpload" :http-request="f_upload" :on-remove="handleRemoveUrl"
                                    :on-preview="handlePictureCardPreview" :file-list="fileImgurl"
                                    accept=".jpg,.jpeg,.png,.bmp">
                                    <i slot="default" class="el-icon-plus"></i>
                                    <div class="el-upload__tip" slot="tip">
                                        仅支持JPGJPEGPNGBMP格式文件
                                    </div>
                                </el-upload>
                                <el-dialog :visible.sync="dialogVisible" :modal-append-to-body="false">
                                    <img width="100%" :src="dialogImageUrl" alt="">
                                </el-dialog>
                            </el-form-item>
                        </el-col>
                        <el-col :span="24" v-else-if="item.inputType==4 && item.singleton==0">
                            <el-form-item :label="item.conditionName" :prop="item.conditionCode"
                                :rules="{required: item.required==0?false:true, message:item.placeHolder?item.placeHolder:'请选择', trigger: 'change' }">
                                <el-checkbox-group v-model="detailForm[item.conditionCode]">
                                    <el-col :span="24" v-if="item.optionList">
                                        <el-checkbox v-for="(it,ind) in item.optionList" :label="it.name"
                                            :key="ind"></el-checkbox>
                                    </el-col>
                                </el-checkbox-group>
                            </el-form-item>
                        </el-col>
                        <el-col :span="6" v-else-if="item.inputType==4 && item.singleton==1">
                            <el-form-item :label="item.conditionName" :prop="item.conditionCode"
                                :rules="{required: item.required==0?false:true, message:item.placeHolder?item.placeHolder:'请选择', trigger: 'change' }">
                                <el-radio-group v-model="detailForm[item.conditionCode]">
                                    <el-col :span="24" v-if="item.optionList">
                                        <el-radio v-for="(it,ind)  in item.optionList" :label="it.name"
                                            :key="ind">{{it.name}}</el-radio>
                                    </el-col>
                                </el-radio-group>
                            </el-form-item>
                        </el-col>
                        <el-col :span="6" v-else-if="item.inputType==5">
                            <el-form-item :label="item.conditionName" :prop="item.conditionCode"
                                :rules="{required: item.required==0?false:true, message:item.placeHolder?item.placeHolder:'请选择', trigger: 'change' }">
                                <el-select v-model="detailForm[item.conditionCode]" placeholder="请选择"
                                    style="width: 100%" v-if="item.optionList"
                                    :multiple="item.inputType==5 && item.singleton==0">
                                    <el-option v-for="(it,ind) in item.optionList" :key="ind" :label="it.name"
                                        :value="it.name">
                                    </el-option>
                                </el-select>
                            </el-form-item>
                        </el-col>
                    </div>

2.数据格式

在这里插入图片描述

 "decisionConditionList": [
            {
                "conditionCode": "carHygiene",//表单键
                "conditionName": "车辆卫生",//表单名称
                "inputType": 5,//表单类型
                "conditionValueList": [
                    "是"
                ],//表单值
                "required": 1,//是否必填
                "singleton": 0,
                "placeHolder": "请选择",
                "optionList": [
                    {
                        "name": "是",
                        "defaultType": 0
                    },
                    {
                        "name": "否",
                        "defaultType": null
                    }
                ]
            },
            {
                "conditionCode": "productSpotCheck",
                "conditionName": "是否抽检",
                "inputType": 4,
                "conditionValueList": [
                    "否"
                ],
                "required": 1,
                "singleton": 1,
                "placeHolder": "请选择",
                "optionList": [
                    {
                        "name": "是",
                        "defaultType": 0
                    },
                    {
                        "name": "否",
                        "defaultType": 1
                    }
                ]
            },
            {
                "conditionCode": "carPlateNum",
                "conditionName": "车辆号",
                "inputType": 0,
                "conditionValueList": [
                    "1"
                ],
                "required": 1,
                "singleton": null,
                "placeHolder": "请输入",
                "optionList": null
            },
            {
                "conditionCode": "carPlate",
                "conditionName": "车辆数量",
                "inputType": 1,
                "conditionValueList": [
                    "1"
                ],
                "required": 0,
                "singleton": null,
                "placeHolder": "请输入",
                "optionList": null
            },
            {
                "conditionCode": "problemDesc",
                "conditionName": "问题类型",
                "inputType": 4,
                "conditionValueList": [
                    "问题一"
                ],
                "required": 1,
                "singleton": 0,
                "placeHolder": "请选择",
                "optionList": [
                    {
                        "name": "问题一",
                        "defaultType": 0
                    },
                    {
                        "name": "问题二",
                        "defaultType": 0
                    },
                    {
                        "name": "问题三",
                        "defaultType": 0
                    },
                    {
                        "name": "问题四",
                        "defaultType": 0
                    }
                ]
            },
            {
                "conditionCode": "imgUrl",
                "conditionName": "图片",
                "inputType": 3,
                "conditionValueList": [
                    "https://warehouse-permanent.obs.cn-east-3.myhuaweicloud.com/74cc681c-fe39-429c-886e-8e086378c2ef.png",
                    "https://warehouse-permanent.obs.cn-east-3.myhuaweicloud.com/5b312d59-8c40-431b-ad99-ac908bbb7707.png"
                ],
                "required": 1,
                "singleton": null,
                "placeHolder": "请选择",
                "optionList": null
            },
            {
                "conditionCode": "remarkTwo",
                "conditionName": "备注",
                "inputType": 2,
                "conditionValueList": [
                    "1"
                ],
                "required": 0,
                "singleton": null,
                "placeHolder": "1",
                "optionList": null
            }
        ],

3.数据处理 因为后端给的数据都是数组 表单有些需要数组有些需要字符串

 this.formList = res.data.data.decisionConditionList;
                        if (this.formList) {
                            this.formList.forEach(a => {
                                if (a.inputType == 4 && a.singleton == 0 || a.inputType == 5 && a.singleton == 0) {
                                    this.$set(this.detailForm, a.conditionCode, a.conditionValueList ? a.conditionValueList : [])
                                } else if (a.inputType == 3) {
                                    var fileImgurl = []
                                    if (a.conditionValueList) {
                                        a.conditionValueList.forEach((item, index) => {
                                            fileImgurl.push(
                                                Object.assign({}, { url: item })
                                            )
                                        })
                                       this.fileImgurl=fileImgurl
                                    }
                                    this.$set(this.detailForm, a.conditionCode, a.conditionValueList ? a.conditionValueList : [])
                                }
                                else {
                                    this.$set(this.detailForm, a.conditionCode, a.conditionValueList ? a.conditionValueList.toString() : '')
                                }
                            })
                        }

4.关于图片部分的js

  // 上传之前
            beforeUpload(file) {
                if (!this.checkFileType(file)) {
                    return false
                }
                this.$forceUpdate()
            },

            // 效验文件类型
            checkFileType(file) {
                let allowTypesSet = new Set(["jpg", "jpeg", "png", "bmp", "pdf"])
                let fileType = file.name.replace(/.+\./, "")
                if (!allowTypesSet.has(fileType)) {
                    this.$message({
                        type: "warning",
                        message: "不支持该文件类型"
                    })
                    return false
                }
                return true
            },
            //预览图片
            handlePictureCardPreview(file) {
                this.dialogImageUrl = file.url;
                this.dialogVisible = true;
            },
            //删除图片
            handleRemoveUrl(file, fileList) {
                if (fileList.length) {
                    this.fileImgurl.filter((item, index) => {
                        if (item.url == file.url) {
                            this.fileImgurl.splice(index, 1);
                        }
                    });
                    let results = this.fileImgurl.map(n => n.url);
                    this.formList.forEach(index => {
                        if (index.inputType == 3) {
                            this.$set(this.detailForm, index.conditionCode, results)
                        }
                    })
                } else {
                    this.formList.forEach(index => {
                        if (index.inputType == 3) {
                            this.$set(this.detailForm, index.conditionCode, [])
                        }
                    })
                    this.fileImgurl = []
                }
            },
            // 导入
            f_upload(data) {
                const formData = new FormData()
                formData.append("file", data.file)
                this.handlefileUpload(formData)
            },
            //上传方法
            handlefileUpload(formData) {
                fileUpload(formData)
                    .then((res) => {
                        const { code, msg } = res.data
                        if (code == 200) {
                            this.formList.forEach(a => {
                                if (a.inputType == 3) {
                                    var arr = a.conditionValueList ? a.conditionValueList : [];
                                    arr.push(res.data.data)
                                    this.$set(this.detailForm, a.conditionCode, arr)
                                }
                            })
                            this.fileImgurl.push({ url: res.data.data })
                        } else {
                            const title = "操作失败"
                            const type = "error"
                            this.$notification(title, type, msg)
                        }
                    })
                    .catch(() => { })
            },

4.提交

//提交这里还是要按照上面的格式提交

 this.formList.forEach((item, index) => {
          this.detailForm.decisionConditionList.push(
                 Object.assign({},item, { conditionValueList: item.inputType == 4 && item.singleton == 0 || item.inputType == 5 && item.singleton == 0 || item.inputType == 3 ? this.detailForm[item.conditionCode] : [this.detailForm[item.conditionCode]] })
            )
        })

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

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

相关文章

Agents改变游戏规则,亚马逊云科技生成式AI让基础模型加速工作流

最近&#xff0c;Stability AI正式发布了下一代文生图模型——Stable Diffusion XL 1.0这次的1.0版本是Stability AI的旗舰版生图模型&#xff0c;也是最先进的开源生图模型。 在目前的开放式图像模型中&#xff0c;SDXL 1.0是参数数量最多的。官方表示&#xff0c;这次采用的…

Jenkins触发器时间、次数设定

触发器触发条件介绍 触发器触发条件公式&#xff1a;由5颗星组成 * * * * * 分别代表&#xff1a;分钟(0-59) 小时(0-23) 日期(1-31) 月份(1-12) 星期(0-6) 企业项目中常用场景介绍 场景1&#xff1a;接口脚本部分测试通过&#xff0c;部分还在进行&#xff0c;回归测试脚本执行…

解密HTTP代理爬虫中的IP代理选择与管理策略

在当今数据驱动的世界中&#xff0c;HTTP代理爬虫作为一项重要的数据采集工具&#xff0c;其成功与否往往取决于IP代理的选择与管理策略。作为一家专业的HTTP代理产品供应商&#xff0c;我们深知IP代理在数据采集中的重要性。在本文中&#xff0c;我们将分享一些关于HTTP代理爬…

Spring集成Junit

目录 1、简介 2、Junit存在的问题 3、回顾Junit注解 4、集成步骤 4.1、导入坐标 4.2、Runwith 4.3、ContextConfiguration 4.4、Autowired 4.5、Test 4.6、代码 5、补充说明 5.1、Runwith 5.2、BlockJUnit4ClassRunner 5.3、没有配置Runwith ⭐作者介绍&#xff1…

Jmeter-获取接口响应头(Response headers)信息进行关联

文章目录 Jmeter-获取接口响应头&#xff08;Response headers&#xff09;信息进行关联使用正则表达式提取器将Set-Cookie的值提取出来在其余接口中关联该提取信息运行查看关联是否成功 Jmeter-获取接口响应头&#xff08;Response headers&#xff09;信息进行关联 获取某一…

Spark 3.1.1 遇到的 from_json regexp_replace组合表达式慢问题的解决

背景 目前公司在从spark 2.4.x升级到3.1.1的时候&#xff0c;遇到了一类SQL极慢的情况&#xff0c;该SQL的如下(只列举了关键的)&#xff1a; select device_personas.* from(selectdevice_id, ads_id, from_json(regexp_replace(device_personas, (?<(\\{|,))"devic…

ospf于mgre中应用(直连与星型拓扑)

题目 地址配置 R1&#xff1a; R2&#xff1a; R3&#xff1a; R4&#xff1a; R5&#xff1a; ISP&#xff1a; R1/2/3的星型拓扑结构 R1配置&#xff1a; interface Tunnel0/0/0 ip address 192.168.6.1 255.255.255.0 tunnel-protocol gre p2mp source 200.1.1.1 ospf …

DB2 数据库基础使用

1.启动步骤 Last login: Sun Jul 23 09:38:48 2023 from 192.168.56.101 [rootlocalhost ~]# cd /usr/local/src/expc [rootlocalhost expc]# cd /opt/ibm/db2/V10.5/instance/ [rootlocalhost instance]# su - db2inst1 Last login: Sun Jul 23 09:40:13 UTC 2023 on pts/0 […

网络安全(秋招)如何拿到offer?(含面试题)

以下为网络安全各个方向涉及的面试题&#xff0c;星数越多代表问题出现的几率越大&#xff0c;祝各位都能找到满意的工作。 注&#xff1a;本套面试题&#xff0c;已整理成pdf文档&#xff0c;但内容还在持续更新中&#xff0c;因为无论如何都不可能覆盖所有的面试问题&#xf…

美术:动画

一、3dmax动画 动画制作流程:模型 -> 骨骼(Bone/Biped) -> 蒙皮(Skin/Bone Pro) -> 动画 1.基础 1.1创建bones骨骼 骨骼分为2种,一种是bones另一种是biped。它们的区别是用bones需要自己创建骨骼系统(比如人,动物,怪物等的骨骼)会使用到很多的约束、参数关…

STM32CubeMx之FreeRTOS的中断优先级+配置

编译运行即可 例如我编写的是一个灯亮500ms 一个等200ms的亮灭 如果他们的优先级是同等的&#xff0c;那么任务都可以实现&#xff0c;时间片会自动切换 但是如果亮500ms的灯 任务优先级更高 还用HALdelay的话 就会让任务二饿死&#xff0c;从而就会只看到任务一的内容 解…

Django Rest_Framework(三)

文章目录 1. 认证Authentication2. 权限Permissions使用提供的权限举例自定义权限 3. 限流Throttling基本使用可选限流类 4. 过滤Filtering5. 排序Ordering6. 分页Pagination可选分页器 7. 异常处理 ExceptionsREST framework定义的异常 8. 自动生成接口文档coreapi安装依赖设置…

C语言参悟-数据类型

C语言的数据类型 一、概述二、基础数据类型1. 整数1. 计算2. 索引 2. 浮点数3. 字符4. 字符串5. 指针 三、特殊数据类型1. 枚举2. 共用体2. struct结构体 四、数据类型修饰符1. const2. unsigned、signed 一、概述 编程语言为抽象这个物理世界提供了依据&#xff0c;其中对于描…

[Docker实现测试部署CI/CD----自由风格和流水线的CD操作(6)]

目录 12、自由风格的CD操作发布 V1.0.0 版本修改代码并推送GitLab 中项目打 Tag 发布 V2.0.0 版本Jenkins 配置 tag 参数添加 Git 参数添加 checkout 命令修改构建命令配置修改 SSH 配置 部署 v1.0.0重新构建工程构建结果 部署 v2.0.0重新构建工程访问 部署v3.0.0 13、流水线任…

Delphi Architect Crack,部署支持Swagger

Delphi Architect Crack,部署支持Swagger 单一代码库-用更少的编码工作为所有主要平台创建应用程序。写一次&#xff0c;到处编译。 Windows-使用最新的用户界面控件、WinRT API和HighDPI相关功能&#xff0c;使Windows的VCL应用程序现代化。 远程桌面-使用改进的VCL和IDE远程桌…

Java问题排查工具Arthas安装教程

Java问题排查工具Arthas入门教程 什么是阿里Arthas&#xff1f; 在生产环境经常遇到大量的日志&#xff0c;同时还有一些性能问题&#xff0c;需要进行进程分析&#xff0c;排查&#xff0c;有时候确实比较花时间&#xff0c;所以可以借助一些开源的框架来实现&#xff0c;Art…

全志F1C200S嵌入式驱动开发(从DDR中截取内存)

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】 linux内核起来的时候,不一定所有的内存都是分配给linux使用的。有的时候,我们是希望能够截留一部分内存的。为什么保留这部分内存呢?这里面可以有很多的用途。比如说,第一,如果…

Python GUI编程(Tkinter)

Python GUI编程(Tkinter) Python 提供了多个图形开发界面的库&#xff0c;几个常用 Python GUI 库如下&#xff1a; Tkinter&#xff1a; Tkinter 模块(Tk 接口)是 Python 的标准 Tk GUI 工具包的接口 .Tk 和 Tkinter 可以在大多数的 Unix 平台下使用,同样可以应用在 Windows …

Qt下载慢/无法下载解决方式

文章目录 一. Qt在线安装下载二. 安装方式 一. Qt在线安装下载 官网下载&#xff1a;https://www.qt.io/download清华源下载&#xff1a;https://mirrors.tuna.tsinghua.edu.cn/qt/official_releases/online_installers/ 二. 安装方式 进入下载好的目录 在目录栏输入CMD&…

vue+element中如何设置单个el-date-picker开始时间和结束时间关联

功能&#xff1a;选了开始时间&#xff0c;则结束时间只能选择开始时间之后的&#xff1b;选了结束时间&#xff0c;则开始时间只能选择结束时间之前的 重点是picker-options属性 图示&#xff1a; 代码展示: // body 内部<el-form-item><el-date-pickerv-model&qu…