English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
前言
众所周知,ElementUI是一个相对完善的UI库,但是使用它需要有一定的Vue基础。在开始本文正文之前,我们先来看看安装方法。
安装ElementUI模块
cnpm install element-ui -S
引入main.js中
import ElementUI from 'element-ui' import 'element-ui/lib/theme-default/index.css'
instalación global
Vue.use(ElementUI)
recuerde reiniciar después de la instalación, cnpm run dev, ahora puede usar directamente elementUI.
vue + element-función de importación y exportación ui
1. en la gestión de sistemas de backend de frontend, la presentación de datos generalmente se hace con tablas, las tablas involucran la importación y exportación;
2. la importación utiliza element-componente de subida de archivos ui;
<el-upload class="upload-demo" :action="importUrl"//ruta de carga :name ="name"//nombre del campo de archivo cargado :headers="importHeaders"//formato de encabezado de solicitud :on-preview="handlePreview"//Se puede obtener los datos devueltos por el servidor a través de file.response :on-remove="handleRemove"//Remoción de archivo :before-upload="beforeUpload"//Configuración antes de la subida :on-error="uploadFail"//Error en la subida :on-success="uploadSuccess"//Subida exitosa :file-list="fileList"//lista de archivos cargados :with-credentials="withCredentials">//¿Soporta el envío de información de cookie? </<el-upload>
3. la exportación utiliza un objeto blob de file; llama a la interfaz de backend para obtener los datos, luego usa los datos para instanciar blob y usa el atributo href del tag a para enlazar al objeto blob
export const downloadTemplate = function (scheduleType) { axios.get('/rest/schedule/template', { params: { "scheduleType": scheduleType }, responseType: 'arraybuffer' }).then((response) => { //Crear un objeto blob, un tipo de file let blob = new Blob([response.data], { type: 'application/x-xls' }) let link = document.createElement('a') link.href = window.URL.createObjectURL(blob) //configurar el nombre del archivo descargado link.download = fileNames[scheduleType] + '_' + response.headers.datestr + '.xls' link.click() } }
4. pegue todo el código del pequeño demo completo, en el desarrollo de backend puede usarlo directamente (archivo vue)
<template> <div> <el-table ref="multipleTable" :data="tableData3" tooltip-effect="dark" border style="width: 80%" @selection-change="handleSelectionChange"> <el-table-column type="selection" width="55"> </<el-table-column> <el-table-column label="fecha" width="120"> <template slot-scope="scope">{{ scope.row.date }}</<template> </<el-table-column> <el-table-column prop="name" label="nombre" width="120"> </<el-table-column> <el-table-column prop="address" label="dirección" show-overflow-tooltip> </<el-table-column> </<el-table> <div style="margin-top: 20px"> <el-button @click="toggleSelection([tableData3[1], tableData3[2])">cambiar el estado seleccionado de la segunda y tercera fila</<el-button> <el-button @click="toggleSelection()">deshacer la selección</<el-button> <el-button type="primary" @click="importData">importar</<el-button> <el-button type="primary" @click="outportData">exportar</<el-button> </<div> <!-- Importar --> <el-dialog title="[1#]" :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"> <!-- 是否支持发送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>导入失败</<div> <div class="failure-reason"> <h4>失败原因</h4> <ul> <li v-for="(error,index) in errorResults" :key="index">第{{error.rowIdx + 1}}行,错误:{{error.column}},{{error.value}},{{error.errorInfo}}</<li> </<ul> </<div> </<div> </<el-<dialog> <!-- Exportar --> </<div> </<template> <script> import * como scheduleApi desde '@/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 interfaz de backend+'rest/schedule/import/ importHeaders:{ enctype:'multipart/form-data', cityCode: '' }, name: 'import', fileList: [], withCredentials: true, processing: false, uploadTip: 'Haga clic para subir', 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) { //función de relleno de selección de casillas de verificación, val devuelve una línea de datos completa this.multipleSelection = val; }, importData() { this.importFlag = 1 this.fileList = [] this.uploadTip = 'Haga clic para subir' this.processing = false this.dialogImportVisible = true }, outportData() { scheduleApi.downloadTemplate() }, handlePreview(file) { //Se puede obtener los datos devueltos por el servidor a través de file.response }, handleRemove(file, fileList) { //Remoción de archivo }, beforeUpload(file){ //Configuración antes de la subida this.importHeaders.cityCode='Shanghai'//Puede configurar los encabezados de solicitud let excelfileExtend = ".xls,.xlsx"//Configurar formato de archivo let fileExtend = file.name.substring(file.name.lastIndexOf('.')).toLowerCase(); if (excelfileExtend.indexOf(fileExtend) <= -1) { this.$message.error('Formato de archivo incorrecto') return false } this.uploadTip = 'En proceso...' this.processing = true }, //Error en la subida uploadFail(err, file, fileList) { this.uploadTip = 'Haga clic para subir' this.processing = false this.$message.error(err) }, //Subida exitosa uploadSuccess(response, file, fileList) { this.uploadTip = 'Haga clic para subir' 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('Importación exitosa') this.doSearch() } }, //Descargar plantilla download() { //Llamar al método de plantilla en el servidor, similar a exportar scheduleApi.downloadTemplate() }, } }; </script> <style scoped> .hide-dialog{ display:none; } </style>
5.js archivo, invocar interfaz
import axios from 'axios' // Descargar plantilla export const downloadTemplate = function (scheduleType) { axios.get('/rest/schedule/template', { params: { "scheduleType": scheduleType }, responseType: 'arraybuffer' }).then((response) => { //Crear un objeto blob, un tipo de 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() } }
Resumen
Este es el contenido completo de este artículo, espero que el contenido de este artículo tenga cierta valoración de referencia para el aprendizaje o el trabajo de todos, si tienen alguna pregunta, pueden dejar comentarios para la comunicación, gracias por el apoyo a Tutorial de Gritar.
Declaración: Este artículo se comparte en línea, pertenece al propietario original, el contenido se contribuye y sube por los usuarios de Internet, este sitio no posee los derechos de propiedad, no se ha procesado editorialmente por humanos y no asume responsabilidad por las responsabilidades legales relacionadas. Si encuentra contenido sospechoso de copyright, por favor envíe un correo electrónico a: notice#w para informar, y proporcione la evidencia relevante.3Declaración: El contenido de este artículo se obtiene de la red, pertenece al propietario original, el contenido se contribuye y sube por los usuarios de Internet, este sitio no posee los derechos de propiedad, no se ha procesado editorialmente por humanos y no asume responsabilidad por las responsabilidades legales relacionadas. Si encuentra contenido sospechoso de copyright, por favor envíe un correo electrónico a: notice#w para informar, y proporcione la evidencia relevante. Una vez que se verifique, este sitio eliminará inmediatamente el contenido sospechoso de infracción.