vue项目动态新增表单、图片、文件

摘要:
1“icon=”el icon delete“type=”危险“plain@click=“removeRow(索引)”>40px“>el buttontype=“warning”@click=“addRow”>pushData(){this.$nextTick(()=>key=“item.id”>divclass=“row img key”>

vue项目动态新增表单、图片、文件第1张

<div class="type_box" v-for="(item,index) in attrList" :key="item.id">
                <div class="add-row">
                    <span class="label-span">key</span>
                    <el-input v-model="item.attrKey" />
                    <span class="label-span">value</span>
                    <el-input v-model="item.attrValue" />
                    <div class="right_box">
                        <el-button class="delete-btn"  v-if="attrList.length > 1" icon="el-icon-delete" type="danger"  plain  @click="removeRow(index)" ></el-button>
                    </div>
                </div>
                <div class="footer-btn" style="line-height: 40px" >
                    <el-button type="warning"  @click="addRow">新增文本</el-button>
                </div>
            </div>
data(){
    return{
      attrList: [{attrKey: "",attrValue: ""}],
    }
}
    // 删除行
      removeRow(index) {
        this.attrList.splice(index, 1);
      },
// 增加文本行
      addRow() {
        var attrLength = this.attrList.length;
        if (attrLength != 0) {
          if (
            (this.attrList[attrLength - 1].attrKey == "") |
            (this.attrList[attrLength - 1].attrValue == "")
          ) {
            this.$message.warning("请填写上一属性完整后再新增");
          } else {
            this.pushData();
          }
        } else {
          this.pushData();
        }
      },
      pushData() {
        this.$nextTick(() => {
          this.attrList.push({
            attrKey: "",
            attrValue: ""
          });
        });
        this.$forceUpdate(); //强制刷新,解决页面不会重新渲染的问题
      },

vue项目动态新增表单、图片、文件第2张

 vue项目动态新增表单、图片、文件第3张

<div class="type_box" v-for="(item,index) in imgAttrList" :key="item.id">
                <div class="add-row-img">
                    <div class="row-img-key">
                        <span class="label-span">key</span>
                        <el-input v-model="item.attrKey" />
                    </div>
                    <div class="row-img-value">
                        <span class="label-span">value</span>
                        <div class="photo-box">
                            <div class="block" style="height: 148px;position: relative" v-if="item.imgUrl" >
                                <img style="height: 100%" :src="showImgUrl+item.imgUrl" @click="viewImg" />
                            </div>
                            <div class="upload-img" style=" 148px" v-else>
                                <input id="upload-img-btn" type="file" name="file" style=" 100%;height: 148px;position: absolute;left: 0; opacity: 0" @change="uploadImg" >
                                <i class="el-icon-plus avatar-uploader-icon upload_img" @click="uploadImgBtn"></i>
                            </div>
                        </div>
                    </div>
                    <div class="right_box">
                        <el-button class="delete-btn" v-if="imgAttrList.length > 1" icon="el-icon-delete" type="danger" plain @click="removeRowImg(index)" ></el-button>
                    </div>
                </div>
                <div class="footer-btn">
                    <el-button type="warning"  @click="addRowImg">新增图片</el-button>
                </div>
            </div>
<div class="type_box" v-for="(item,index) in attrListFile" :key="item.id">
                <div class="add-row-file">
                    <div class="row-img-key" style="line-height: 148px">
                        <span class="label-span">key</span>
                        <el-input v-model="item.attrKey" />
                    </div>
                    <div class="row-img-value" style="line-height: 148px">
                        <span class="label-span">value</span>
                        <div class="file-box" v-if="item.fileName" >
                            <div class="block">
                                <p>{{item.fileName}}</p>
                            </div>
                        </div>
                        <div class="photo-box" style=" 148px" v-else>
                            <div class="upload-img">
                                <input id="upload-file-btn" type="file" name="file" style=" 100%;height: 148px; opacity: 0;position: absolute;left: 0;" @change="uploadFile" >
                                <i class="el-icon-upload avatar-uploader-icon upload_file" @click="uploadFileBtn"></i>
                            </div>
                        </div>
                    </div>
                    <div class="right_box" style="line-height: 148px">
                        <el-button class="delete-btn" v-if="attrListFile.length > 1" icon="el-icon-delete" type="danger" plain @click="removeRowFile(index)" ></el-button>
                    </div>
                </div>
                <div class="footer-btn">
                    <el-button type="warning"  @click="addRowFle">新增文件</el-button>
                </div>
            </div>
data(){
    return{
        dataList: [],
        pictureList: [],
        fileList: [],

        attrList: [{attrKey: "",attrValue: ""}],
        imgAttrList: [{ attrKey: "", attrValue: "" }],
        attrListFile: [ { attrKey: "", attrValue: "" } ],
    }
}
      uploadImgBtn(){
        document.getElementById("upload-img-btn").click();
      },
      uploadImg(e){
        const file = e.target.files[0];
        let files = (/image/).test(file.type)
        if (!files) {
          alert("请确保文件为图像类型");
          return false;
        }
        const param = new FormData();
        param.append('fileType', 0);
        param.append('file', file);

        let url = net.baseUrl+'admin/device/asset/file/upload'
        axios.post(url, param, {
          headers: {
            'Content-Type': 'multipart/form-data',
            'token':this.signInfo.token
          },
        }).then(res => {
          if(res.data.retcode === 1){
            const img_list = res.data.data
            let resultImgList = this.imgAttrList

            resultImgList.push({
              attrKey:resultImgList[resultImgList.length - 1].attrKey,
              attrValue:img_list,
              imgUrl: img_list.fileNo
            })
            this.imgAttrList = resultImgList.filter((item, index) => {
              return item.imgUrl
            });

          }else {
            net.message(this, res.data.retmsg, "warning");
          }
        })
      },
      addRowImg(){
        var attrLength = this.imgAttrList.length;
        if (attrLength != 0) {
          if (
            (this.imgAttrList[attrLength - 1].attrKey == "") || (this.imgAttrList[attrLength - 1].attrValue == "")
          ) {
            this.$message.warning("请填写上一属性完整后再新增");
          } else {
            this.pushDataImg();
          }
        } else {
          this.pushDataImg();
        }
      },
      pushDataImg(){
        this.$nextTick(() => {
          this.imgAttrList.push({
            attrKey: "",
            attrValue: ""
          });
        });
        this.$forceUpdate();
      },
      removeRowImg(index){
        this.imgAttrList.splice(index, 1);
      },

      /*  文件附件   */

      uploadFileBtn(){
        document.getElementById("upload-file-btn").click();
      },
      uploadFile(e){
        const file = e.target.files[0];
        const param = new FormData();
        param.append('fileType', 1);
        param.append('file', file);

        let url = net.baseUrl+'admin/device/asset/file/upload'
        axios.post(url, param, {
          headers: {
            'Content-Type': 'multipart/form-data',
            'token':this.signInfo.token
          },
        }).then(res => {
          if(res.data.retcode === 1){
            const img_list = res.data.data
            let resultFileList = this.attrListFile
            resultFileList.push({
              attrKey:resultFileList[resultFileList.length - 1].attrKey,
              attrValue:img_list,
              fileName: img_list.fileName
            })
            this.attrListFile = resultFileList.filter((item, index) => {
              return item.fileName
            });
          }else {
            net.message(this, res.data.retmsg, "warning");
          }
        })
      },
      addRowFle(){
        var attrLength = this.attrListFile.length;
        if (attrLength != 0) {
          if (
            (this.attrListFile[attrLength - 1].attrKey == "") || (this.attrListFile[attrLength - 1].attrValue == "")
          ) {
            this.$message.warning("请填写上一属性完整后再新增");
          } else {
            this.pushFilsData();
          }
        } else {
          this.pushFilsData();
        }
      },
      pushFilsData(){
        this.$nextTick(() => {
          this.attrListFile.push({
            attrKey: "",
            attrValue: ""
          });
        });
        this.$forceUpdate(); //强制刷新,解决页面不会重新渲染的问题
      },
      removeRowFile(index){
        this.attrListFile.splice(index, 1);
      },

免责声明:文章转载自《vue项目动态新增表单、图片、文件》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇java 实现redis缓存AutoMapper小结下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

IHttpHandler接口

IHttpHandler接口:定义Asp.net为了使用自定义Http处理程序同步处理Http Web请求而实现的协定。 说明:一旦定义的自己的HttpHandler,对系统的HttpHandler将是覆盖关系。 命名空间:System.Web 程序集:System.Web 语法:public interface IHttpHandler IHttpH...

[npm]npm audit fix

npm官网上查阅了对于npm audit fix的相关介绍。 npm audit : npm@5.10.0 & npm@6,允许开发人员分析复杂的代码,并查明特定的漏洞和缺陷。 npm audit fix :npm@6.1.0,  检测项目依赖中的漏洞并自动安装需要更新的有漏洞的依赖,而不必再自己进行跟踪和修复。 npm-audit 官网地址:do...

k8s架构

  master节点 k8s的集群由master和node组成,节点上运行着若干k8s服务。 master节点之上运行着的后台服务有kube-apiserver 、kube-scheduler、kube-controller-manager、etcd和pod网络。如下图所示 1. API Server(kube-apiserver) API Server...

【CCS仿真】如何将CCS仿真时memory中的数据以Hex、Integer、 Long 、Float、 Addressable Unit类型保存到PC

2013-12-04 19:07:05 将在CCS中仿真的数据导入电脑上时,可以选择不同的数据类型,以便分析,具体方法如下: 在CCS菜单中,选择File—>Data—>Save,弹出以下窗口:                         在文件名中输入要保存的文件的名字,在保存类型中可以选择保存的文件类型以及格式。文件类型有dat文件与...

关于apache 虚拟主机配置访问403的问题

 <Directory />    Options FollowSymLinks    Order allow,deny    Allow from all</Directory>各位 如果httpd.conf里面的这个配置已经改成上面这样了 但是我配置的下面的虚拟主机还是访问403是怎么回事呢?已经百度过了 全部都是一样的结果就是...

Httpwebrequest并发连接数设置

前段时间用.net写了一个win服务,用来作Http并发请求,但发现请求数达到一定数量就停止了,剩余的并发请求出现了很多超时情况。 查了资料发现,原来Httpwebrequest有一个默认连接数限制。win2003默认10个,一般个人操作系统2个。要想增加并发请求,必须修改Http的连接数。有两种方法可以修改: 1,在代码中修改: ServicePoi...