el-upload多个文件,动态增加+预览word 、excel、ppt、pdf、png、jpg文件

 el-upload多个文件,动态增加

 

<template>
  <span>
    <el-row v-for="(v, i) in RecordOperation.upload" :key="i">
      <el-col :span="6">
        <el-form-item>
          <el-input
            v-model.trim="v.fileName"
            style="width: 130px"
            placeholder="请输入证书名称"
            v-on:input="InputSearch($event, i)"
          ></el-input>
        </el-form-item>
      </el-col>
      <el-col :span="12">
        <el-form-item>
          <el-upload
            ref="upload"
            :limit="1"
            list-type="picture"
            :headers="RecordOperation.upload[i].headers"
            :action="url"
            :data="RecordOperation.upload[i].data"
            :disabled="RecordOperation.upload[i].isUploading"
            :on-change="handleFileChange.bind(null, { index: i, data: v })"
            :on-progress="handleFileUploadProgress"
            :on-success="handleFileSuccess"
            :on-preview="handelPreview"
          >
            <el-col :span="14">
              <!-- <img v-if="RecordOperation.upload[i].fileUrl" :src="RecordOperation.upload[i].fileUrl"/>  -->
              <el-button @click="submitFileForm(i)" icon="el-icon-upload2"
                >上传附件</el-button
              >
            </el-col>
            <el-col :span="12">
              <img
                class="el-upload-list__item-thumbnail"
                :src="RecordOperation.upload[i].fileUrl"
                alt=""
                @click.stop="dialogFormVisible = false"
              />
              <div style="justify-content: center; align-items: center"></div>
              <div style="width: 400px" @click.stop="dialogFormVisible = false">
                {{
                  RecordOperation.upload[i].fileUrl.split("/")[
                    RecordOperation.upload[i].fileUrl.split("/").length - 1
                  ]
                }}
                <i
                  el-icon--right
                  class="el-icon-zoom-in"
                  v-show="RecordOperation.upload[i].fileUrl"
                  @click="
                    handlePictureCardPreview(RecordOperation.upload[i].fileUrl)
                  "
                ></i>
              </div>
              <span class="el-upload-list__item-actions">
                <span
                  class="el-upload-list__item-preview"
                  @click.stop="dialogFormVisible = false"
                  @click="
                    handlePictureCardPreview(RecordOperation.upload[i].fileUrl)
                  "
                >
                </span>
                <span
                  v-if="!disabled"
                  class="el-upload-list__item-delete"
                  @click="handleRemove(i, file)"
                >
                  <i class="el-icon-delete"></i>
                </span>
              </span>
            </el-col>
          </el-upload>
          <el-dialog :visible.sync="dialogVisible" :width="fileWidth">
            <img v-if="showImg" width="100%" :src="dialogImageUrl" alt="" />
            <iframe
              v-if="showPdf"
              @click.stop="dialogFormVisible = false"
              :src="dialogImageUrl"
              style="width: 100%; height: 80vh"
            ></iframe>
            <div v-if="showDoc == true">
                  <iframe
                    frameborder="0"
                    :src="
                      'https://view.officeapps.live.com/op/view.aspx?src=' +
                      dialogImageUrl
                    "
                    width="100%"
                    height="800px"
                  >
                  </iframe>
                </div>
          </el-dialog>
        </el-form-item>
      </el-col>

      <el-col :span="2" class="right">
        <el-button
          style=""
          @click="delDynamicPic(i, RecordOperation.upload)"
          @click.stop="dialogFormVisible = false"
          icon="el-icon-delete"
        ></el-button>
      </el-col>
      <el-col :span="2" class="right">
        <el-button
          icon="el-icon-plus"
          style="color: black"
          @click="addDynamicPic(i, RecordOperation.upload)"
          @click.stop="dialogFormVisible = false"
        ></el-button>
      </el-col>
    </el-row>
  </span>
</template>
<script>
import Input from "./Input.vue";
import { deleteFile, getFilePage } from "@/api/infra/file";
import { getToken } from "@/utils/auth";
import download from "downloadjs";
export default {
  components: { Input },
  created() {},
  data() {
    return {
      dialogImageUrl: "",
      dialogVisible: false,
      disabled: false,
      open: false,
      url: process.env.VUE_APP_BASE_API + "/admin-api/infra/file/upload", // 请求地址
      RecordOperation: {
        upload: [
          {
            open: false, // 是否显示弹出层
            title: "", // 弹出层标题
            isUploading: false, // 是否禁用上传
            url: process.env.VUE_APP_BASE_API + "/admin-api/infra/file/upload", // 请求地址
            headers: { Authorization: "Bearer " + getToken() }, // 设置上传的请求头部
            data: {}, // 上传的额外数据,用于文件名,
            fileUrl: "",
            fileName: "",
          },
        ],
      },
      responseUrl: "",
      showImg: false,
      showPdf: false,
      showDoc: false,
      fileWidth: "min-width = 300px",
      upFilename: "",
      Imgdata: [],
    };
  },
  methods: {
    getImgData(data) {
      let _arr = [];
      data.certificateFileList.map((item, index) => {
        _arr.push(
          Object.assign({}, item, {
            data: { path: "" },
            headers: { Authorization: "Bearer " + getToken() },
          })
        );
      });
      console.log(data);
      this.Imgdata = data;
      this.RecordOperation.upload = _arr;
      console.log(this.RecordOperation.upload);
    },
    handleRemove(i, file, fileList) {
      console.log(i);
      console.log(fileList);
      console.log("file", file);
      // 1.获取将要删除图片的临时路径
      const filePath = file.response.data.tmp_path;
      // 2.从pics数组中,找到图片对应的索引值
      // const i = this.formData.pics.findIndex(x => x.pic === filePath)
      // 3.调用splice方法,移除图片信息
      this.formData.splice(i, 1);
    },
    handlePictureCardPreview(file) {
      console.log(file);
      this.dialogImageUrl = file;
      let type = file;
      if (
        type.indexOf("doc") != -1 ||
        type.indexOf("docx") != -1 ||
        type.indexOf("xls") != -1 ||
        type.indexOf("xlsx") != -1 ||
        type.indexOf("ppt") != -1
      ) {
        this.dialogVisible = true;
        this.fileWidth = "80%";
        this.showDoc = true;
      } else if (type.indexOf("pdf") != -1) {
        this.dialogVisible = true;
        this.fileWidth = "80%";
        this.showPdf = true;
        this.showDoc = false;
        // this.showImg = false;
      } else if (
        type.indexOf("jpg") != -1 ||
        type.indexOf("png") != -1 ||
        type.indexOf("jpeg") != -1
      ) {
        this.dialogVisible = true;
        this.showImg = true;
        this.showPdf = false;
        this.showDoc = false;
      } else {
        this.$message("当前文件暂不支持预览");
        this.download(file);
      }
    },
    download(file) {
      download(file.split(",")[0]);
    },
    handelPreview() {
      // this.PreviewPath = this.RecordOperation.upload[0].data.path;
    },
    /** 新增按钮操作 */
    handleAdd() {
      console.log("this.RecordOperation", this.RecordOperation.upload);
      this.open = true;
      this.RecordOperation.upload.title = "上传文件";
    },
    /** 处理上传的文件发生变化 */
    handleFileChange(obj, file, fileList) {
      console.log(obj, file, fileList);

      // this.upFilename=this.RecordOperation.upload[obj.index].data.path
      this.RecordOperation.upload[obj.index].data.path = file.name;
      this.RecordOperation.upload[obj.index].fileUrl = this.responseUrl;
      console.log(this.RecordOperation.upload[obj.index].fileUrl);
    },
    /** 处理文件上传中 */
    handleFileUploadProgress(event, file, fileList) {
      this.RecordOperation.upload.isUploading = true; // 禁止修改
    },
    /** 发起文件上传 */
    submitFileForm(i, file) {
      console.log(file);
      console.log("上传成功", this.$refs.upload[i]);
      this.$refs.upload[i].submit();
    },
    /** 文件上传成功处理 */
    handleFileSuccess(response, file, fileList) {
      console.log(response, file, fileList);
      this.responseUrl = response.data;
      // 清理
      this.RecordOperation.upload[0].isUploading = false;
      // this.$refs.upload[0].clearFiles();
      // 提示成功,并刷新
      this.$modal.msgSuccess("上传成功");
      console.log(this.RecordOperation.upload);
      this.Imgdata = this.RecordOperation.upload;
      console.log(this.Imgdata);
      this.$emit("getuploadData", this.RecordOperation.upload);
    },
    InputSearch(e, i) {
      this.$emit("getuploadData", this.RecordOperation.upload);
    },
    /** 删除按钮操作 */
    handleDelete(row) {
      const id = row.id;
      this.$modal
        .confirm('是否确认删除文件编号为"' + id + '"的数据项?')
        .then(function () {
          return deleteFile(id);
        })
        .then(() => {
          this.getList();
          this.$modal.msgSuccess("删除成功");
        })
        .catch(() => {});
    },
    // 移除动态建设图片
    delDynamicPic(i, list) {
      console.log(list);
      this.$confirm("确认删除该条记录?", "提示", {
        confirmButtonText: "确定",
        cancelButtonText: "取消",
        type: "warning",
      }).then(() => {
        list.splice(i, 1);
        console.log(list);
        this.$emit("delDynamicPic", list);
      });
    },
    addDynamicPic(i, list) {
      console.log(i);
      console.log(list);
      list.push({
        open: false, // 是否显示弹出层
        title: "", // 弹出层标题
        isUploading: false, // 是否禁用上传
        // url: process.env.VUE_APP_BASE_API + "/admin-api/infra/file/upload", // 请求地址
        headers: { Authorization: "Bearer " + getToken() }, // 设置上传的请求头部
        data: {
          path: "",
        }, // 上传的额外数据,用于文件名
        fileUrl: "",
      });
      console.log(list);
    },
  },
};
</script>
<style>
.el-upload-list {
  width: 50px;
}
.btn btn-primary {
  display: inline-block;
}
.el-upload-list__item-status-label {
  right: -250px;
}

.el-upload-list__item-name {
  display: inline-block;
  padding-left: 18px;
}
.el-upload-list__item .el-icon-close {
  right: -250px;
}
</style>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值