Excel导入操作

html 复制代码
<template>
  <el-dialog
    width="500px"
    title="员工导入"
    :visible="showExcelDialog"
    @close="$emit('update:showExcelDialog', false)"
  >
    <el-row type="flex" justify="center">
      <div class="upload-excel">
        <input
          ref="excel-upload-input"
          class="excel-upload-input"
          type="file"
          accept=".xlsx, .xls"
          @change="uploadChange"
        />
        <div class="drop">
          <i class="el-icon-upload" />
          <el-button type="text" @click="getTemplate">下载导入模板</el-button>
          <span
            >将文件拖到此处或
            <el-button type="text" @click="handleUpload">点击上传</el-button>
          </span>
        </div>
      </div>
    </el-row>
    <el-row type="flex" justify="end">
      <!-- update:props属性名,值 直接修改 .sync修饰符的属性值 -->
      <el-button
        size="mini"
        type="primary"
        @click="$emit('update:showExcelDialog', false)"
        >取消</el-button
      >
    </el-row>
  </el-dialog>
</template>

点击上传-弹出文件选择框

html 复制代码
 <el-button type="text" @click="handleUpload">点击上传</el-button>
javascript 复制代码
methods:{
  // 上传
  handleUpload() {
    this.$refs["excel-upload-input"].click();// this.$refs.属性名 和 this.$refs[属性名] 等价
  },
}

监听文件改变-上传excel-关闭弹层

javascript 复制代码
 <input
     ref="excel-upload-input"
      class="excel-upload-input"
      type="file"
      accept=".xlsx, .xls"
      @change="uploadChange"
  >
  async uploadChange(event) {
      console.log(event.target.files)
      // 调用上传接口
      // uploadExcel() // 参数  form-data 需要文件file
      const files = event.target.files // input的文件列表
      if (files.length > 0) {
        // 大于0 说明有文件要上传
        const data = new FormData()
        // file: file类型
        data.append('file', files[0]) // 将文件参数加入到formData中
        try {
          await uploadExcel(data)
          // 成功
          this.$emit('uploadSuccess') // 通知父组件 我上传成功
          this.$emit('update:showExcelDialog', false) // 关闭弹层
          // this.$refs['excel-upload-input'].value = ''
        } catch (error) {
          // 捕获失败
          // this.$refs['excel-upload-input'].value = ''
        } finally {
          // 不论成功或者失败都会执行finally
          this.$refs['excel-upload-input'].value = ''
        }
      }
}
//接口
export function uploadExcel(data) {
  return request({
    url: "/sys/user/import",
    method: "post",
    data, // form-data类型 因为要上传文件类型
  });
}

上传成功

1、首先封装一个员工导入组件,利用elementUI提供的组件铺设静态页面,

2、给导入模板绑定点击事件,弹出弹层,封装下载Excel模板接口,调用接口,这里和导出一样,需要用到file-saver来下载模板。

3、给点击上传按钮绑定点击事件,这里我们使用的是模拟点击,其实真正被点击的是input文本框,由于它放置页面不太协调,所以采用模拟点击。

4、封装上传Excel模板文件接口,这里上传data必须是formdata类型,因为要上传文件类型,调用接口,监听change事件,当用户选择了文件,而且这个文件和上次的不一样,就会触发change,所以这里使用e.target.files,files是数组,如果files的长度大于0,说明有文件要上传,此时就把文件封装到formdata对象中,根据文档提示,这里需要file类型,然后将文件参数加入到formData中,成功就提示父组件刷新页面,关闭弹层,失败就清空文件,这里即使上传成功也一样要清空文件,所以使用finally来控制。

相关推荐
在掘金21 小时前
【kk-utils】Excel工具——实践篇(一)
前端·excel
在掘金2 天前
【kk-utils】Excel工具——excel-js
前端·excel
安全菜鸟2 天前
DeepSeek 接入 Excel 完整教程
excel
陌漠ardently2 天前
正则表达式和excel文件保存(python)
python·mysql·excel
CodeJourney.2 天前
从PPT到DeepSeek开启信息可视化的全新之旅
数据库·人工智能·算法·excel·流程图
inxunoffice3 天前
批量将文件夹名称、文件夹路径提取到 Excel 清单
excel
inxunoffice3 天前
导入 Excel 批量替换文件夹名称
excel
CodeJourney.3 天前
利用DeepSeek实现文档到流程图的高效转换:技术应用与实践探索
数据库·人工智能·算法·excel·流程图
小军要奋进3 天前
用excel做九乘九乘法表
笔记·excel