el-upload封装

el-upload封装

uploadBtn.vue

<template>
  <div>
    <el-button type="primary" @click="importDialog = true" class="btn-search">
      导入
      <!--  -->
      <el-dialog v-el-drag-dialog
        title="导入"
        :visible.sync="importDialog"
        width="30%"
        :append-to-body="true"
        custom-class="form-dialog"
      >
        <div>
          <el-upload
            action=""
            :limit="1"
            ref="upload"
            class="upload-demo"
            :auto-upload="false"
            list-type="picture-card"
            :on-change="uploadChange"
            :http-request="handleUpload"
            :on-exceed="handleExceed"
          >
            <i slot="default" class="el-icon-plus"></i>
            <div slot="file" slot-scope="{ file }">
              <img
                class="el-upload-list__item-thumbnail"
                :src="file.url"
                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)"
                >
                  <i class="el-icon-delete"></i>
                </span>
              </span>
            </div>
          </el-upload>
        </div>
        <div slot="footer" class="centerInfo">
          <!-- <el-button @click="crud.cancelCU" class="cancelbtn">取消</el-button> -->
          <el-button type="primary" @click="submitDialogImgMode1"
            >确认</el-button
          >
        </div>
      </el-dialog>
      <el-dialog v-el-drag-dialog :visible.sync="dialogVisible">
        <img width="100%" :src="dialogImageUrl" alt="" />
      </el-dialog>
    </el-button>
    <span class="el-icon-circle-check" v-if="flagFile"></span>
  </div>
</template>

<script>
import crudGasAuthTemplate from "@/api/business/gasAuthTemplate";
export default {
  data() {
    return {
      // 导入模态框
      importDialog: false,
      // 是否选择上传文件
      isSelected: false,
      dialogImageUrl: "",
      dialogVisible: false,
      fileId: this.downloadFileId,
      flagFile: false
    };
  },
  props: ["downloadFileId"],
  methods: {
    uploadChange(file) {
      this.isSelected = true;
      console.log(this.isSelected);
    },
    handleRemove(file) {
      this.$refs.upload.handleRemove(file);
    },
    handlePictureCardPreview(file) {
      this.dialogImageUrl = file.url;
      this.dialogVisible = true;
    },
    handleUpload(fileObject) {
      let files = fileObject.file;
      let formData = new window.FormData();
      formData.append("file", files); //传文件
      crudGasAuthTemplate.uploadImage(formData).then((res) => {
        this.isSelected = false;
        this.flagFile = res;
        this.$emit("dataImage", res, this.fileId);
        // this.form.image1 = res;
      });
    },
    // 只允许传入一个文件
    handleExceed(files, fileList) {
      this.$message.warning(
        `当前限制选择 1 个图片,本次选择了 ${files.length} 个图片,共选择了 ${
          files.length + fileList.length
        } 个图片`
      );
    },
    submitDialogImgMode1() {
      if (!this.isSelected) {
        this.$message.warning("请选择要上传的文件!");
        return false;
      }
      this.$refs.upload.submit();
      this.importDialog = false;
    }
  }
};
</script>
<style scoped>
.el-icon-circle-check {
  color: #67c23a;
}
</style>

Api.js

export function uploadImage(formdata) {
  return request({
    url: 'api/gasAuthTemplate/uploadImage',
    method: 'post',
    headers: {
      'Content-Type': 'multipart/form-data'
    },
    data: formdata
  })
}

index.vue使用

                <el-form-item label="logo图标">
                  <div class="between">
                    <img :src="baseApi + form.image1" alt="" class="imgFix" />
                    <uploadBtn @dataImage="show" :downloadFileId="1" />
                  </div>
                </el-form-item>
                <el-form-item label="app图标">
                  <div class="between">
                    <img :src="baseApi + form.image2" alt="" class="imgFix" />
                    <uploadBtn @dataImage="show" :downloadFileId="2" />
                  </div>
                </el-form-item>
                <el-form-item label="背景图片">
                  <div class="between">
                    <img :src="baseApi + form.image3" alt="" class="imgFix" />
                    <uploadBtn @dataImage="show" :downloadFileId="3" />
                  </div>
                </el-form-item>
                <el-form-item label="banner图片">
                  <div class="between">
                    <img :src="baseApi + form.image4" alt="" class="imgFix" />
                    <uploadBtn @dataImage="show" :downloadFileId="4" />
                  </div>
                </el-form-item>
import uploadBtn from "@/components/UploadBtn";
export default {
  name: "defaultTemplate",
  props: ["value"],
  components: {
    uploadBtn
  },
  data() {
    return {
    
    };
  },
  computed: {
    ...mapGetters(["baseApi"])
  },
  methods: {
    show(obj, id) {
      switch (id) {
        case 1:
          this.form.image1 = obj;
          break;
        case 2:
          this.form.image2 = obj;
          break;
        case 3:
          this.form.image3 = obj;
          break;
        case 4:
          this.form.image4 = obj;
          break;
        default:
          break;
      }
    }
  }
};
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值