IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> JavaScript知识库 -> 【vue+element-ui】表格内嵌套输入框和上传图片的功能 -> 正文阅读

[JavaScript知识库]【vue+element-ui】表格内嵌套输入框和上传图片的功能

表格内嵌套上传图片实现:
在这里插入图片描述
Data中我绑定的table格式:

tableData: [
  {
    reasonName: "消除",//左边小标题
    reasonValue: "",//第一行的“公司措施”
    jituanValue: "",//第一行的“集团措施”
    uploadFilePath1:[],//第一行的“整改前照片”
    uploadFilePath2:[],//第一行的“整改后照片”
    uploadFilePath3:[],//第一行的“事故6个月后照片”
  },
],

上传图片的接口返回的成功数据:
在这里插入图片描述

template中的el-table以及其包含的el-input和el-upload

<el-table border :data="tableData" style="width: 100%">
	 <el-table-column label=" " prop="reasonName" />
	 <el-table-column label="正确措施及落实到位(公司)">
	   <template slot-scope="scope">
	     <el-input size="mini" v-model="scope.row.reasonValue" />
	   </template>
	 </el-table-column>
	 <el-table-column label="正确措施及落实到位(集团)">
	   <template slot-scope="scope">
	     <el-input size="mini" v-model="scope.row.jituanValue" placeholder="审批人填写区"/>
	   </template>
	 </el-table-column>
	 <el-table-column label="整改前照片">
	   <template slot-scope="scope">
	     <el-upload
	       action="/file/file/uploadDocOrImg"
	       list-type="picture-card"
	       :file-list="scope.row.uploadFilePath1"
	       :auto-upload="true"
	       :on-success="
	         (response, file, fileList) =>
	           handleSuccess(
	             response,
	             file,
	             fileList,
	             scope.$index,
	             1
	           )
	       "
	     >
	       <i slot="default" class="el-icon-plus"></i>
	       <div slot="file" slot-scope="{ file }">
	         <img
	           class="el-upload-list__item-thumbnail"
	           :src="path + file.uploadFilePath"
	           alt=""
	         />
	         <span class="el-upload-list__item-actions">
	           <span
	             class="el-upload-list__item-preview"
	             @click="handlePictureCardPreview(file)"
	           >
	             <i class="el-icon-zoom-in"></i>
	           </span>
	           <span
	             class="el-upload-list__item-delete"
	             @click="handleRemove(file, scope.$index, 1)"
	           >
	             <i class="el-icon-delete"></i>
	           </span>
	         </span>
	       </div>
	     </el-upload>
	     <el-dialog :visible.sync="dialogVisible" append-to-body>
	       <img width="100%" :src="path + dialogImageUrl" alt="" />
	     </el-dialog>
	   </template>
	 </el-table-column>
	 <el-table-column label="整改后照片">
	   <template slot-scope="scope">
	     <el-upload
	       action="/file/file/uploadDocOrImg"
	       list-type="picture-card"
	       :file-list="scope.row.uploadFilePath2"
	       :auto-upload="true"
	       :on-success="
	         (response, file, fileList) =>
	           handleSuccess(
	             response,
	             file,
	             fileList,
	             scope.$index,
	             2
	           )
	       "
	     >
	       <i slot="default" class="el-icon-plus"></i>
	       <div slot="file" slot-scope="{ file }">
	         <img
	           class="el-upload-list__item-thumbnail"
	           :src="path + file.uploadFilePath"
	           alt=""
	         />
	         <span class="el-upload-list__item-actions">
	           <span
	             class="el-upload-list__item-preview"
	             @click="handlePictureCardPreview(file)"
	           >
	             <i class="el-icon-zoom-in"></i>
	           </span>
	           <span
	             class="el-upload-list__item-delete"
	             @click="handleRemove(file, scope.$index, 2)"
	           >
	             <i class="el-icon-delete"></i>
	           </span>
	         </span>
	       </div>
	     </el-upload>
	   </template>
	 </el-table-column>
	 <el-table-column label="事故6个月后措施执行情况照片">
	   <template slot-scope="scope">
	     <el-upload
	       action="/file/file/uploadDocOrImg"
	       list-type="picture-card"
	       :file-list="scope.row.uploadFilePath3"
	       :auto-upload="true"
	       :on-success="
	         (response, file, fileList) =>
	           handleSuccess(
	             response,
	             file,
	             fileList,
	             scope.$index,
	             3
	           )
	       "
	     >
	       <i slot="default" class="el-icon-plus"></i>
	       <div slot="file" slot-scope="{ file }">
	         <img
	           class="el-upload-list__item-thumbnail"
	           :src="path + file.uploadFilePath"
	           alt=""
	         />
	         <span class="el-upload-list__item-actions">
	           <span
	             class="el-upload-list__item-preview"
	             @click="handlePictureCardPreview(file)"
	           >
	             <i class="el-icon-zoom-in"></i>
	           </span>
	           <span
	             class="el-upload-list__item-delete"
	             @click="handleRemove(file, scope.$index, 3)"
	           >
	             <i class="el-icon-delete"></i>
	           </span>
	         </span>
	       </div>
	     </el-upload>
	   </template>
	 </el-table-column>
	</el-table>

提取上传部分主要代码:

<el-table-column label="整改前照片">
  <template slot-scope="scope">
    <el-upload
      action="你自己的上传路径"
      list-type="picture-card"
      :file-list="scope.row.uploadFilePath1"   //你自己的图片列表
      :auto-upload="true"
      :on-success="
        (response, file, fileList) =>   //改造图片上传成功函数
          handleSuccess(
            response,
            file,
            fileList,
            scope.$index,
            1  //因为我一行是三个图片列表,都用这个函数,so这里1代表第一组图片
          )
      "
    >
      <i slot="default" class="el-icon-plus"></i>
      <div slot="file" slot-scope="{ file }">
        <img
          class="el-upload-list__item-thumbnail"
          :src="file.你接收的那个地址"
          alt=""
        />
        <span class="el-upload-list__item-actions">
          <span
            class="el-upload-list__item-preview"
            @click="handlePictureCardPreview(file)"//预览函数
          >
            <i class="el-icon-zoom-in"></i>
          </span>
          <span
            class="el-upload-list__item-delete"
            @click="handleRemove(file, scope.$index, 1)"//删除函数
          >
            <i class="el-icon-delete"></i>
          </span>
        </span>
      </div>
    </el-upload>
    <el-dialog :visible.sync="dialogVisible" append-to-body> //预览弹出框
      <img width="100%" :src="dialogImageUrl" alt="" />
    </el-dialog>
  </template>
</el-table-column>

JS
如果成功我需要给我的tabledata中push完成的对象数据
点击删除tabledata需要删除对应图片

handleSuccess(res, file, fileList, index, flag) {
      let aaaa = {
        uploadFilePath: res.data.uploadFilePath,
        fileName: res.data.fileName,
      };
      switch (flag) {
      //找到第一组 往进push 下面同理
        case 1:
          this.tableData[index].uploadFilePath1.push(aaaa);
          break;
        case 2:
          this.tableData[index].uploadFilePath2.push(aaaa);
          break;
        case 3:
          this.tableData[index].uploadFilePath3.push(aaaa);
          break;
      }
    },
    handleRemove(file, index, flag) {
      switch (flag) {
        case 1:
          for (
            let i = 0;
            i < this.tableData[index].uploadFilePath1.length;
            i++
          ) {
            let element = this.tableData[index].uploadFilePath1[i];
            if (element.uploadFilePath == file.uploadFilePath) {
              this.tableData[index].uploadFilePath1.splice(i, 1);
            }
          }
          break;
        case 2:
          for (
            let i = 0;
            i < this.tableData[index].uploadFilePath2.length;
            i++
          ) {
            let element = this.tableData[index].uploadFilePath2[i];
            if (element.uploadFilePath == file.uploadFilePath) {
              this.tableData[index].uploadFilePath2.splice(i, 1);
            }
          }
          break;
        case 3:
          for (
            let i = 0;
            i < this.tableData[index].uploadFilePath3.length;
            i++
          ) {
            let element = this.tableData[index].uploadFilePath3[i];
            if (element.uploadFilePath == file.uploadFilePath) {
              this.tableData[index].uploadFilePath3.splice(i, 1);
            }
          }
          break;
      }
    },
    handlePictureCardPreview(file) {
      this.dialogImageUrl = file.uploadFilePath;
      this.dialogVisible = true;
    },

然后你就得到了这样的上传表格!
在这里插入图片描述
回传也很简单,只要给tabledata中对应的uploadFilePath123相应赋值即可

 this.measureTableData = [
    {
      reasonName: "消除",
      reasonValue:this.editObjOne.xcPlanCompany || "",
      jituanValue: this.editObjOne.xcPlanGroup || "",
      uploadFilePath1:this.editObjOne.xcFrontImage || [],
      uploadFilePath2:this.editObjOne.xcAfterImage || [],
      uploadFilePath3:this.editObjOne.xcSixAfterImage || [],
    },
    ...
]
  JavaScript知识库 最新文章
ES6的相关知识点
react 函数式组件 & react其他一些总结
Vue基础超详细
前端JS也可以连点成线(Vue中运用 AntVG6)
Vue事件处理的基本使用
Vue后台项目的记录 (一)
前后端分离vue跨域,devServer配置proxy代理
TypeScript
初识vuex
vue项目安装包指令收集
上一篇文章      下一篇文章      查看所有文章
加:2022-03-06 12:53:25  更:2022-03-06 12:56:55 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 8:57:56-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码