由于前端项目使用的是Vue-cli3.0 + TypeScript的架构,所以该组件也是基于ts语法封装的,组件的完整代码如下:

<template>
  <div id="myImport">
    <el-button type="primary" plain @click="importDialogVisible = true">导入</el-button>
    <!-- 导入弹窗 -->
    <el-dialog :title="name + '导入'" :visible.sync="importDialogVisible" width="560px"
          :close-on-click-modal="false" @close="fileList = []">
      <div>
        <div style="color: #2D2D2D;margin-bottom: 20px;">导入文件</div>
        <el-upload class="upload-demo"
            ref="upload"
            :action="url"
            name="excelFile"
            :headers="importHeaders"
            :on-change="changeUpload"
            :on-success="uploadSuccess"
            :file-list="fileList"
            :limit="1"
            :multiple="false"
            :auto-upload="false"
          >
            <el-button slot="trigger" type="primary">选取文件</el-button>
            <div slot="tip" class="el-upload__tip"></div>
        </el-upload>
        <br><br>
        <div><span style="color: #5C5C5C;font-size: 12px;border-bottom: 1px solid #5C5C5C;">{{name + '模板下载'}}</span></div>
        <el-button style="position: relative;right: -420px;" type="primary" @click="submitUpload">导入</el-button>
      </div>
    </el-dialog>
  </div>
</template>

<script lang="ts">
import { Component, Prop, Emit, Vue, Ref } from 'vue-property-decorator'

@Component
export default class MyImport extends Vue {
  @Prop({ default: '' }) private url!: string
  @Prop({ default: '' }) private name!: string

  private importDialogVisible: boolean = false
  private importHeaders: Object = {'token': sessionStorage.getItem('token')}
  private fileList: Array<any> = []

  @Ref() readonly upload!: any

  public changeUpload(file: File, fileList: Array<any>) {
    let index: number = file.name.lastIndexOf('.')
    let suffix: string = file.name.substring(index + 1).toUpperCase()
    if (suffix !== 'XLS' && suffix !== 'XLSX') {
      this.$message.error('只支持导入execl文件')
      this.upload.clearFiles()
      return false
    }
    this.fileList = fileList
  }

  public submitUpload() {
    if(this.fileList.length == 0) {
      this.$message.error('请选择要导入的文件')
      return false
    }
    this.upload.submit()
  }

  @Emit('uploadSuccess')
  public uploadSuccess(res: any) {
    this.importDialogVisible = false;
    return res
  }
}
</script>

<style lang="scss">
  #myImport {
    display: inline-block;
    margin-left: 10px;
    .el-dialog {
      text-align: initial;
      .el-dialog__header {
        background-color: #824C96;
        padding: 6px;
        .el-dialog__title {
          color: #fff;
          font-size: 14px;
          margin-left: 10px;
        }
        .el-dialog__close {
          color: #fff;
          position: relative;
          top: -10px;
          right: -10px;
        }
      }
    }
  }
</style>

Vue与ts集成的语法风格请查看vue-property-decorator官方文档。

具体应用呢就是在对应的.vue文件引入该组件,假设组件名称为my-import,然后在页面对应位置加入以下代码:

    <div class="btn-item">
        <el-button type="primary">查询</el-button>
        <el-button type="primary" plain>重置</el-button>
        <el-button type="primary" plain>导出</el-button>
        <!--导入组件-->
        <my-import :url="url" :name="name" @uploadSuccess="uploadSuccess"></my-import>
      </div>

其中url为后台导入接口路径,name为导入信息名称,uploadSuccess为导入成功的回调。

代码运行后的展示效果如下:

基于ElementUI封装Excel数据导入组件的更多相关文章

  1. 基于NPOI的Excel数据导入

    从Excel导入数据最令人头疼的是数据格式的兼容性,特别是日期类型的兼容性.为了能够无脑导入日期,折腾了一天的NPOI.在经过测试确实可以导入任意格式的合法日期后,写下这篇小文,与大家共享.完整代码请 ...

  2. 基于element-ui封装一个Table模板组件

    大家在做后台管理系统的时候,写的最多的可能就是表格页面了,一般分三部分:搜索功能区.表格内容区和分页器区.一般这些功能都是使用第三方组件库实现,比如说element-ui,或者vuetify.这两个组 ...

  3. java基于xml配置的通用excel单表数据导入组件(五、Action处理类)

    package xxxxxx.manage.importexcel; import java.io.File; import java.util.HashMap; import java.util.M ...

  4. 效率最高的Excel数据导入---(c#调用SSIS Package将数据库数据导入到Excel文件中【附源代码下载】) 转

    效率最高的Excel数据导入---(c#调用SSIS Package将数据库数据导入到Excel文件中[附源代码下载])    本文目录: (一)背景 (二)数据库数据导入到Excel的方法比较   ...

  5. kettle将Excel数据导入oracle

    导读 Excel数据导入Oracle数据库的方法: 1.使用PL SQL 工具附带的功能,效率比较低 可参考这篇文章的介绍:http://www.2cto.com/database/201212/17 ...

  6. 批量Excel数据导入Oracle数据库

    由于一直基于Oracle数据库上做开发,因此常常会需要把大量的Excel数据导入到Oracle数据库中,其实如果从事SqlServer数据库的开发,那么思路也是一样的,本文主要介绍如何导入Excel数 ...

  7. 代码执行批量Excel数据导入Oracle数据库

    由于基于Oracle数据库上做开发,因此常常会需要把大量的Excel数据导入到Oracle数据库中,其实如果从事SqlServer数据库的开发,那么思路也是一样的,本文主要介绍如何导入Excel数据进 ...

  8. Java代码实现excel数据导入到Oracle

    1.首先需要两个jar包jxl.jar,ojdbc.jar(注意版本,版本不合适会报版本错误)2.代码: Java代码   import java.io.File; import java.io.Fi ...

  9. 将Excel数据导入mysql数据库的几种方法

    将Excel数据导入mysql数据库的几种方法 “我的面试感悟”有奖征文大赛结果揭晓! 前几天需要将Excel表格中的数据导入到mysql数据库中,在网上查了半天,研究了半天,总结出以下几种方法,下面 ...

随机推荐

  1. jquery find 推荐

    https://codeplayer.vip/p/j7soa 这篇写的还是不错的,备用. // 返回jQuery对象所有匹配元素的标识信息数组 // 每个元素形如:tagName或tagName#id ...

  2. 洛谷 P3958 奶酪 并查集

    目录 题面 题目链接 题面 题目描述 输入输出格式 输入格式 输出格式: 输入输出样例 输入样例 输出样例 说明 思路 AC代码 总结 题面 题目链接 P3958 奶酪 题面 题目描述 现有一块大奶酪 ...

  3. Kubernetes Ingress日志分析入门

    本文主要介绍如何基于日志服务构建Kubernetes Ingress日志分析平台,并提供一些简单的动手实验方便大家快速了解日志服务相关功能. 部署Ingress日志方案 登录容器服务管理控制台. 将上 ...

  4. 【JZOJ1637】【ZJOI2009】狼和羊的故事

    题目描述 "狼爱上羊啊爱的疯狂,谁让他们真爱了一场:狼爱上羊啊并不荒唐,他们说有爱就有方向......" Orez听到这首歌,心想:狼和羊如此和谐,为什么不尝试羊狼合养呢?说干就干 ...

  5. hdu 3466 01背包变形【背包dp】

    http://acm.hdu.edu.cn/showproblem.php?pid=3466 有两个物品P,Q,V分别为 3 5 6, 5 10 5,如果先dp第一个再dp第二个,背包容量至少要为3+ ...

  6. poj 2184 Cow Exhibition(01背包)

    Cow Exhibition Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 10882   Accepted: 4309 D ...

  7. cocos2d-x游戏开发(十五)游戏载入动画loading界面

    这个资源载入的loading界面demo是在玩客网做逆转三国的时候随手写的,尽管我在那仅仅待了2个礼拜.可是也算參与了一个商业游戏项目了,学到不少东西.当时使用的cocos2d-x还是1.0版的,我用 ...

  8. Gym - 101617D_Jumping Haybales(BFS)

    Sample Input 4 2 .### #... .#.. #.#. 3 1 .#. .#. .#. Sample Output 4 -1 题意:给一个n*n的图,每次最多能跳k个格子,只能向南( ...

  9. oracle函数 REPLACE(c1,c2[,c3])

    [功能]将字符表达式值中,部分相同字符串,替换成新的字符串 [参数] c1   希望被替换的字符或变量 c2   被替换的字符串 c3   要替换的字符串,默认为空(即删除之意,不是空格) [返回]字 ...

  10. 学linux内核与学linux操作系统有什么区别!?

    linux内核包括:进程管理,存储管理,IO管理,文件系统等功能.linux操作系统则是linux内核再加上像shell或图形界面和其他的实用软件,比内核庞大的多.建议先学shell命令和linux下 ...