excel数据导入组件封装
封装一个导入excel数据的文件
首先封装一个相似的组件,首先须要留神的是,相似性能,vue-element-admin曾经提供了,咱们只须要革新即可 代码地址
相似功能性的组件,咱们要会应用和封装即可
excel导入性能须要应用npm包xlsx
,所以须要装置xlsx
插件
$ npm i xlsx
将vue-element-admin提供的导入性能新建一个组件,地位: src/components/UploadExcel
注册全局的导入excel组件
import UploadExcel from './UploadExcel'export default { install(Vue) { Vue.component('UploadExcel', UploadExcel) // 注册导入excel组件 }}
批改款式和布局
<template> <div class="upload-excel"> <div class="btn-upload"> <el-button :loading="loading" size="mini" type="primary" @click="handleUpload"> 点击上传 </el-button> </div> <input ref="excel-upload-input" class="excel-upload-input" type="file" accept=".xlsx, .xls" @change="handleClick"> <div class="drop" @drop="handleDrop" @dragover="handleDragover" @dragenter="handleDragover"> <i class="el-icon-upload" /> <span>将文件拖到此处</span> </div> </div></template><style scoped lang="scss">.upload-excel { display: flex; justify-content: center; margin-top: 100px; .excel-upload-input{ display: none; z-index: -9999; } .btn-upload , .drop{ border: 1px dashed #bbb; width: 350px; height: 160px; text-align: center; line-height: 160px; } .drop{ line-height: 80px; color: #bbb; i { font-size: 60px; display: block; } }}</style>
excel数据导入
建设公共导入的页面路由
新建一个公共的导入页面,挂载路由 src/router/index.js
{ path: '/import', component: Layout, hidden: true, // 暗藏在左侧菜单中 children: [{ path: '', // 二级路由path什么都不写 示意二级默认路由 component: () => import('@/views/import') }] },
创立import路由组件 src/views/import/index.vue
<template> <!-- 公共导入组件 --> <upload-excel :on-success="success" /></template>
剖析excel导入代码,封装接口
封装导入的api接口
/** * * 封装一个导入的接口 * * ***/export function importEmployee(data) { return request({ url: '/user/data', method: 'post', data })}
实现excel导入
获取导入的excel数据, 导入excel接口
async success({ header, results }) { const userRelations = { '手机号': 'mobile', '姓名': 'username', '工号': 'workNumber' } const arr = [] results.forEach(item => { const userInfo = {} Object.keys(item).forEach(key => { userInfo[userRelations[key]] = item[key] }) arr.push(userInfo) }) await importEmployee(arr) // 调用导入接口 this.$router.back() }
为了让这个页面能够服务更多的导入性能,咱们能够在页面中用参数来判断
data() { return { type: this.$route.query.type } },
当excel中有日期格局的时候,理论转化的值为一个数字,咱们须要一个办法进行转化
formatDate(numb, format) { const time = new Date((numb - 1) * 24 * 3600000 + 1) time.setYear(time.getFullYear() - 70) const year = time.getFullYear() + '' const month = time.getMonth() + 1 + '' const date = time.getDate() - 1 + '' if (format && format.length === 1) { return year + format + month + format + date } return year + (month < 10 ? '0' + month : month) + (date < 10 ? '0' + date : date) }
小结
这样咱们就能够来做咱们的我的项目了, js高程第四版链接: https://pan.baidu.com/s/18P8k... 能够加公众号获取提取码.
若有不懂的中央,请加q群147936127交换或者vx: ltby52119,谢谢~