这次给大家带来element-ui实现导入导出,element-ui实现导入导出的注意事项有哪些,下面就是实战案例,一起来看一下。
前言
众所周知,ElementUI,是一个比较完善的UI库,但是使用它需要有一点vue的基础。在开始本文的正文之前,我们先来看看安装的方法吧。
安装ElementUI模块cnpm install element-ui -S
在main.js中引入import ElementUI from 'element-ui'
import 'element-ui/lib/theme-default/index.css'
全局安装Vue.use(ElementUI)
当我们安装完记得重新运行,cnpm run dev,现在就可以直接使用elementUI了。
vue + element-ui导入导出功能
1.前段后台管理系统中数据展示一般都是用表格,表格会涉及到导入和导出;
2.导入是利用element-ui的Upload 上传组件;
:action="importUrl"//上传的路径
:name ="name"//上传的文件字段名
:headers="importHeaders"//请求头格式
:on-preview="handlePreview"//可以通过 file.response 拿到服务端返回数据
:on-remove="handleRemove"//文件移除
:before-upload="beforeUpload"//上传前配置
:on-error="uploadFail"//上传错误
:on-success="uploadSuccess"//上传成功
:file-list="fileList"//上传的文件列表
:with-credentials="withCredentials">//是否支持cookie信息发送
3.导出是利用file的一个对象blob;通过调用后台接口拿到数据,然后用数据来实例化blob,利用a标签的href属性链接到blob对象export const downloadTemplate = function (scheduleType) {
axios.get('/rest/schedule/template', {
params: {
"scheduleType": scheduleType
},
responseType: 'arraybuffer'
}).then((response) => {
//创建一个blob对象,file的一种
let blob = new Blob([response.data], { type: 'application/x-xls' })
let link = document.createElement('a')
link.href = window.URL.createObjectURL(blob)
//配置下载的文件名
link.download = fileNames[scheduleType] + '_' + response.headers.datestr + '.xls'
link.click()
})
}
4.贴上整个小demo的完整代码,在后台开发可以直接拿过去用(vue文件)
ref="multipleTable"
:data="tableData3"
tooltip-effect="dark"
border
style="width: 80%"
@selection-change="handleSelectionChange">
type="selection"
width="55">
label="日期"
width="120">
{{ scope.row.date }}
prop="name"
label="姓名"
width="120">
prop="address"
label="地址"
show-overflow-tooltip>
切换第二、第三行的选中状态
取消选择
导入
导出
:action="importUrl"
:name ="name"
:headers="importHeaders"
:on-preview="handlePreview"
:on-remove="handleRemove"
:before-upload="beforeUpload"
:on-error="uploadFail"
:on-success="uploadSuccess"
:file-list="fileList"
:with-credentials="withCredentials">
{{uploadTip}}
只能上传excel文件
下载模板
导入失败
失败原因
- 第{{error.rowIdx + 1}}行,错误:{{error.column}},{{error.value}},{{error.errorInfo}}
import * as scheduleApi from '@/api/schedule'
export default {
data() {
return {
tableData3: [
{
date: "2016-05-03",
name: "王小虎",
address: "上海市普陀区金沙江路 1518 弄"
},
{
date: "2016-05-02",
name: "王小虎",
address: "上海市普陀区金沙江路 1518 弄"
},
{
date: "2016-05-04",
name: "王小虎",
address: "上海市普陀区金沙江路 1518 弄"
},
{
date: "2016-05-01",
name: "王小虎",
address: "上海市普陀区金沙江路 1518 弄"
},
{
date: "2016-05-08",
name: "王小虎",
address: "上海市普陀区金沙江路 1518 弄"
},
{
date: "2016-05-06",
name: "王小虎",
address: "上海市普陀区金沙江路 1518 弄"
},
{
date: "2016-05-07",
name: "王小虎",
address: "上海市普陀区金沙江路 1518 弄"
}
],
multipleSelection: [],
importUrl:'www.baidu.com',//后台接口config.admin_url+'rest/schedule/import/'
importHeaders:{
enctype:'multipart/form-data',
cityCode:''
},
name: 'import',
fileList: [],
withCredentials: true,
processing: false,
uploadTip:'点击上传',
importFlag:1,
dialogImportVisible:false,
errorResults:[]
};
},
methods: {
toggleSelection(rows) {
if (rows) {
rows.forEach(row => {
this.$refs.multipleTable.toggleRowSelection(row);
});
} else {
this.$refs.multipleTable.clearSelection();
}
},
handleSelectionChange(val) {
//复选框选择回填函数,val返回一整行的数据
this.multipleSelection = val;
},
importData() {
this.importFlag = 1
this.fileList = []
this.uploadTip = '点击上传'
this.processing = false
this.dialogImportVisible = true
},
outportData() {
scheduleApi.downloadTemplate()
},
handlePreview(file) {
//可以通过 file.response 拿到服务端返回数据
},
handleRemove(file, fileList) {
//文件移除
},
beforeUpload(file){
//上传前配置
this.importHeaders.cityCode='上海'//可以配置请求头
let excelfileExtend = ".xls,.xlsx"//设置文件格式
let fileExtend = file.name.substring(file.name.lastIndexOf('.')).toLowerCase();
if (excelfileExtend.indexOf(fileExtend) <= -1) {
this.$message.error('文件格式错误')
return false
}
this.uploadTip = '正在处理中...'
this.processing = true
},
//上传错误
uploadFail(err, file, fileList) {
this.uploadTip = '点击上传'
this.processing = false
this.$message.error(err)
},
//上传成功
uploadSuccess(response, file, fileList) {
this.uploadTip = '点击上传'
this.processing = false
if (response.status === -1) {
this.errorResults = response.data
if (this.errorResults) {
this.importFlag = 2
} else {
this.dialogImportVisible = false
this.$message.error(response.errorMsg)
}
} else {
this.importFlag = 3
this.dialogImportVisible = false
this.$message.info('导入成功')
this.doSearch()
}
},
//下载模板
download() {
//调用后台模板方法,和导出类似
scheduleApi.downloadTemplate()
},
}
};
.hide-dialog{
display:none;
}
5.js文件,调用接口import axios from 'axios'
// 下载模板
export const downloadTemplate = function (scheduleType) {
axios.get('/rest/schedule/template', {
params: {
"scheduleType": scheduleType
},
responseType: 'arraybuffer'
}).then((response) => {
//创建一个blob对象,file的一种
let blob = new Blob([response.data], { type: 'application/x-xls' })
let link = document.createElement('a')
link.href = window.URL.createObjectURL(blob)
link.download = fileNames[scheduleType] + '_' + response.headers.datestr + '.xls'
link.click()
})
}
相信看了本文案例你已经掌握了方法,更多精彩请关注php中文网其它相关文章!
推荐阅读: