小編給大家分享一下vue + element-ui如何實(shí)現(xiàn)導(dǎo)入導(dǎo)出功能,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!

赤壁網(wǎng)站制作公司哪家好,找創(chuàng)新互聯(lián)!從網(wǎng)頁設(shè)計(jì)、網(wǎng)站建設(shè)、微信開發(fā)、APP開發(fā)、響應(yīng)式網(wǎng)站開發(fā)等網(wǎng)站項(xiàng)目制作,到程序開發(fā),運(yùn)營維護(hù)。創(chuàng)新互聯(lián)自2013年起到現(xiàn)在10年的時(shí)間,我們擁有了豐富的建站經(jīng)驗(yàn)和運(yùn)維經(jīng)驗(yàn),來保證我們的工作的順利進(jìn)行。專注于網(wǎng)站建設(shè)就選創(chuàng)新互聯(lián)。
前言
眾所周知,ElementUI,是一個(gè)比較完善的UI庫,但是使用它需要有一點(diǎn)vue的基礎(chǔ)。在開始本文的正文之前,我們先來看看安裝的方法吧。
安裝ElementUI模塊
cnpm install element-ui -S
在main.js中引入
import ElementUI from 'element-ui' import 'element-ui/lib/theme-default/index.css'
全局安裝
Vue.use(ElementUI)
當(dāng)我們安裝完記得重新運(yùn)行,cnpm run dev ,現(xiàn)在就可以直接使用elementUI了。
vue + element-ui導(dǎo)入導(dǎo)出功能
1.前段后臺管理系統(tǒng)中數(shù)據(jù)展示一般都是用表格,表格會涉及到導(dǎo)入和導(dǎo)出;
2.導(dǎo)入是利用element-ui的Upload 上傳組件;
<el-upload class="upload-demo" :action="importUrl"//上傳的路徑 :name ="name"//上傳的文件字段名 :headers="importHeaders"//請求頭格式 :on-preview="handlePreview"//可以通過 file.response 拿到服務(wù)端返回?cái)?shù)據(jù) :on-remove="handleRemove"//文件移除 :before-upload="beforeUpload"//上傳前配置 :on-error="uploadFail"//上傳錯(cuò)誤 :on-success="uploadSuccess"//上傳成功 :file-list="fileList"//上傳的文件列表 :with-credentials="withCredentials">//是否支持cookie信息發(fā)送 </el-upload>
3.導(dǎo)出是利用file的一個(gè)對象blob;通過調(diào)用后臺接口拿到數(shù)據(jù),然后用數(shù)據(jù)來實(shí)例化blob,利用a標(biāo)簽的href屬性鏈接到blob對象
export const downloadTemplate = function (scheduleType) {
axios.get('/rest/schedule/template', {
params: {
"scheduleType": scheduleType
},
responseType: 'arraybuffer'
}).then((response) => {
//創(chuàng)建一個(gè)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.貼上整個(gè)小demo的完整代碼,在后臺開發(fā)可以直接拿過去用(vue文件)
<template>
<div>
<el-table
ref="multipleTable"
:data="tableData3"
tooltip-effect="dark"
border
@selection-change="handleSelectionChange">
<el-table-column
type="selection"
width="55">
</el-table-column>
<el-table-column
label="日期"
width="120">
<template slot-scope="scope">{{ scope.row.date }}</template>
</el-table-column>
<el-table-column
prop="name"
label="姓名"
width="120">
</el-table-column>
<el-table-column
prop="address"
label="地址"
show-overflow-tooltip>
</el-table-column>
</el-table>
<div >
<el-button @click="toggleSelection([tableData3[1], tableData3[2]])">切換第二、第三行的選中狀態(tài)</el-button>
<el-button @click="toggleSelection()">取消選擇</el-button>
<el-button type="primary" @click="importData">導(dǎo)入</el-button>
<el-button type="primary" @click="outportData">導(dǎo)出</el-button>
</div>
<!-- 導(dǎo)入 -->
<el-dialog title="導(dǎo)入" :visible.sync="dialogImportVisible" :modal-append-to-body="false" :close-on-click-modal="false" class="dialog-import">
<div :class="{'import-content': importFlag === 1, 'hide-dialog': importFlag !== 1}">
<el-upload class="upload-demo"
: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">
<!-- 是否支持發(fā)送cookie信息 -->
<el-button size="small" type="primary" :disabled="processing">{{uploadTip}}</el-button>
<div slot="tip" class="el-upload__tip">只能上傳excel文件</div>
</el-upload>
<div class="download-template">
<a class="btn-download" @click="download">
<i class="icon-download"></i>下載模板</a>
</div>
</div>
<div :class="{'import-failure': importFlag === 2, 'hide-dialog': importFlag !== 2}" >
<div class="failure-tips">
<i class="el-icon-warning"></i>導(dǎo)入失敗</div>
<div class="failure-reason">
<h5>失敗原因</h5>
<ul>
<li v-for="(error,index) in errorResults" :key="index">第{{error.rowIdx + 1}}行,錯(cuò)誤:{{error.column}},{{error.value}},{{error.errorInfo}}</li>
</ul>
</div>
</div>
</el-dialog>
<!-- 導(dǎo)出 -->
</div>
</template>
<script>
import * as scheduleApi from '@/api/schedule'
export default {
data() {
return {
tableData3: [
{
date: "2016-05-03",
name: "王小虎",
address: "上海市普陀區(qū)金沙江路 1518 弄"
},
{
date: "2016-05-02",
name: "王小虎",
address: "上海市普陀區(qū)金沙江路 1518 弄"
},
{
date: "2016-05-04",
name: "王小虎",
address: "上海市普陀區(qū)金沙江路 1518 弄"
},
{
date: "2016-05-01",
name: "王小虎",
address: "上海市普陀區(qū)金沙江路 1518 弄"
},
{
date: "2016-05-08",
name: "王小虎",
address: "上海市普陀區(qū)金沙江路 1518 弄"
},
{
date: "2016-05-06",
name: "王小虎",
address: "上海市普陀區(qū)金沙江路 1518 弄"
},
{
date: "2016-05-07",
name: "王小虎",
address: "上海市普陀區(qū)金沙江路 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:'點(diǎn)擊上傳',
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) {
//復(fù)選框選擇回填函數(shù),val返回一整行的數(shù)據(jù)
this.multipleSelection = val;
},
importData() {
this.importFlag = 1
this.fileList = []
this.uploadTip = '點(diǎn)擊上傳'
this.processing = false
this.dialogImportVisible = true
},
outportData() {
scheduleApi.downloadTemplate()
},
handlePreview(file) {
//可以通過 file.response 拿到服務(wù)端返回?cái)?shù)據(jù)
},
handleRemove(file, fileList) {
//文件移除
},
beforeUpload(file){
//上傳前配置
this.importHeaders.cityCode='上海'//可以配置請求頭
let excelfileExtend = ".xls,.xlsx"//設(shè)置文件格式
let fileExtend = file.name.substring(file.name.lastIndexOf('.')).toLowerCase();
if (excelfileExtend.indexOf(fileExtend) <= -1) {
this.$message.error('文件格式錯(cuò)誤')
return false
}
this.uploadTip = '正在處理中...'
this.processing = true
},
//上傳錯(cuò)誤
uploadFail(err, file, fileList) {
this.uploadTip = '點(diǎn)擊上傳'
this.processing = false
this.$message.error(err)
},
//上傳成功
uploadSuccess(response, file, fileList) {
this.uploadTip = '點(diǎn)擊上傳'
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('導(dǎo)入成功')
this.doSearch()
}
},
//下載模板
download() {
//調(diào)用后臺模板方法,和導(dǎo)出類似
scheduleApi.downloadTemplate()
},
}
};
</script>
<style scoped>
.hide-dialog{
display:none;
}
</style>5.js文件,調(diào)用接口
import axios from 'axios'
// 下載模板
export const downloadTemplate = function (scheduleType) {
axios.get('/rest/schedule/template', {
params: {
"scheduleType": scheduleType
},
responseType: 'arraybuffer'
}).then((response) => {
//創(chuàng)建一個(gè)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()
})
}以上是“vue + element-ui如何實(shí)現(xiàn)導(dǎo)入導(dǎo)出功能”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對大家有所幫助,如果還想學(xué)習(xí)更多知識,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道!
名稱欄目:vue+element-ui如何實(shí)現(xiàn)導(dǎo)入導(dǎo)出功能
網(wǎng)站路徑:http://www.chinadenli.net/article44/peeohe.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供品牌網(wǎng)站設(shè)計(jì)、網(wǎng)站內(nèi)鏈、搜索引擎優(yōu)化、建站公司、動(dòng)態(tài)網(wǎng)站、域名注冊
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)