vue表格显示多图片多文件

一、数据格式用数组存起来:测试数据上传了一张图片和一个文档
在这里插入图片描述

二、UI显示

 <el-table-column prop="files" label="月度文件下载">
          <div slot-scope="{ row }">
            <div v-if="row.files">
              <div v-for="(item, index) in row.files" :key="index">
                <div v-if="isImgFile(item)">
                  <el-popover placement="left" trigger="click" width="400">
                    <img
                      :src="baseUrl + '/file/download?filePath=' + item"
                      width="100%"
                    />
                    <img
                      slot="reference"
                      :src="baseUrl + '/file/download?filePath=' + item"
                      alt="暂无文件"
                      style="
                        max-height: 70px;
                        max-width: 70px;
                        padding: 5px;
                        cursor: pointer;
                      "
                    />
                  </el-popover>
                </div>
                <div v-else>
                  <el-link class="linkCss" @click="downLoadfile(item)">{{
                    item
                  }}</el-link>
                </div>
              </div>
            </div>
            <div v-else>
              <span>暂未上传</span>
            </div>
          </div>
        </el-table-column>

三、后台拿到的数据是json字符串 转成json对象 用点.属性 点出来
在这里插入图片描述
拿到数组对象的jsonData属性转成json对象 获取file数据 逗号截取存成数组

 // 获取数据
    getData(data) {
      getMonthProductdata(data).then(val => {
        if (val.code === 200) {
          this.tableData = val.data.list
          if (this.tableData.length == 0) {
            this.$message.warning('暂无数据')
          } else {
            var imageUrls = [] 
            val.data.list.map(item => {
              if (item.jsonData) {
                var fileArr = JSON.parse(item.jsonData)
                if (fileArr.file) {
                  imageUrls = fileArr.file.split(',')
                  item.files = imageUrls //新增file属性 存数组进去,在界面循环展示
                } 
              }
            }) 
          }
          console.log(this.tableData, 'tableData')
        }
      }).catch((res) => {
        this.$message.error(res);
      });
    },

四、判断是图片还是文件:在界面循环展示的时候引用这个方法 图片返回true

   isImgFile(fileName) {
      // console.log(fileName, 'fileName')
      //后缀获取
      let suffix = '';
      // 获取类型结果
      let result = '';
      const flieArr = fileName.split('.');
      suffix = flieArr[flieArr.length - 1];
      if (suffix != "") {
        suffix = suffix.toLocaleLowerCase();
        // 图片格式
        const imglist = ['png', 'jpg', 'jpeg', 'bmp', 'gif'];
        // 进行图片匹配
        result = imglist.find(item => item === suffix);
        if (result) {
          return true;
        }
      }
      return false;
    },

五、图片的展示用image展示,文档的话用链接点击就下载

   downLoadfile(fileName) {
      let url = process.env.VUE_APP_BASE_API + '/file/download?filePath=' + fileName
      window.location.href = url
    },

示例:表格展示样式可以自行调调
在这里插入图片描述

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值