vue3.0 +ts +vantdesginVue 手动上传excel文件( 不使用上传服务器功能,不支持多文件一起上传)

vue3.0 +ts +vantdesginVue 手动上传excel文件( 不使用上传服务器功能,不支持多文件一起上传)

注意点: 必须是post请求 ,

在这里插入图片描述

在这里插入图片描述


<a-button
  type="primary"
    style="float: right; margin: 4px 0px 0px 15px"
    @click="clickImport"
    >批量导入</a-button
  >
<!-- 批量导入 -->
    <a-modal v-model:visible="importVisible" :maskClosable="false" title="批量导入" width="50%" :afterClose="closeImport">
      <div style="width: 80%;  margin: 0px auto">
        <a-upload-dragger
          v-model:fileList="fileList"
          name="file"
          :remove="handleRemove"
          :before-upload="beforeUpload"
        >
          <p class="ant-upload-drag-icon">
            <InboxOutlined />
          </p>
          <p class="ant-upload-text">将文件拖到此处或点击上传</p>
          <p class="ant-upload-hint">只支持excel文件</p>
        </a-upload-dragger>
        <p :successTip="successTip" style="margin:0px;color:green;">{{successTip}}</p>
        <p :failTip="failTip" style="margin:0px;color:red;">{{failTip}}</p>
        <a @click="DownImportFile">{{hrefFile}}</a>
      </div>
      <template #footer>
        <a-button @click="closeImport">取消</a-button>
        <a-button type="primary" @click="bulkImport"  :disabled="fileList.length === 0" :loading="uploading">{{
          uploading ? '导入中' : '开始导入'
        }}</a-button>
      </template>
    </a-modal>
// 类型接口
interface FileItem {
  uid: string;
  name?: string;
  status?: string;
  response?: string;
  url?: string;
  preview?: string;
  originFileObj?: any;
  file: string | Blob;
}

----------------------------定义-----------------------------------
	// 批量导入弹窗开关
    const importVisible = ref<boolean>(false);
    // 上传文件
    const fileList = ref<any>([]);
    // 导入中
    const uploading = ref<boolean>(false);
    // 导入到服务器后返回的文件名称
    const fileName = ref<string>('')
    // 导入成功数量
    const successTip = ref<string>('')
    // 导入失败数量
    const failTip = ref<string>('')
    // 下载导入文件地址
    const hrefFile = ref<string>('')
    // 保存上传文件file
    const importFlie=ref<any>()


-------------------方法-------------------------------------------
 // 点击批量导入
    function clickImport() {
      importVisible.value = true;
    }
    // 移除要导入的文件
    function handleRemove(file: FileItem){
      const index = fileList.value.indexOf(file);
      const newFileList = fileList.value.slice();
      newFileList.splice(index, 1);
      fileList.value = newFileList;
    };
    // 导入前
    function beforeUpload(file: FileItem) {
      importFlie.value = file
      fileList.value = [...fileList.value, file];
      const isJpgOrPng = file.type === 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' || file.type === 'application/vnd.ms-excel';
      if (!isJpgOrPng) {
        message.error('上传图片文件格式错误!');
         nextTick(()=>{
          fileList.value=[]
        })
      }
      const isLt10M = file.size / 1024 / 1024 <= 10;
      if (!isLt10M) {
        message.error('上传的图片必须小于 10MB!');
         nextTick(()=>{
          fileList.value=[]
        })
      }
      return isJpgOrPng && isLt10M && false;
    }
  // 点击确定导入
    async function bulkImport() {
      const formData = new FormData();
      formData.append('file',importFlie.value);
      formData.append('wellId', props.wellInformation.id);
      formData.append('catalogueId', dataObject.value.id);
      let res = await dataBaseManagementApi.importInformation(formData);
      if(res.success){
        uploading.value = false;
        fileList.value = []
        successTip.value = res.obj?.successMsg;
        failTip.value = res.obj?.failedMsg;
        hrefFile.value = res.obj?.fileErrName
      }else{
        uploading.value = false;
        fileList.value = []
        successTip.value = res.obj?.successMsg;
        failTip.value = res.obj?.failedMsg;
        hrefFile.value = res.obj?.fileErrName
        message.error(res.msg)
      }
    }
    // 下载导入文件
    async function DownImportFile(){
      await dataManagementApi.downImportErrorFile(props.wellInformation.id,dataObject.value.id,hrefFile.value,dataObject.value.requestUrl);
    }

    // 关闭导入弹窗
    function closeImport(){
      importVisible.value=false,
      successTip.value = '',
      failTip.value = '',
      hrefFile.value='',
      fileList.value = [];
      search('sousuo');// 掉一次查询接口
    }
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值