下载功能
一般后端会返回文件流的形式
前端会收到一堆乱码
前端需要对乱码进行转译 成正常的
可以先创建一个公共的方法文件,这样就可以在项目的任何地方使用
utils.js
import { getToken } from \'@/common/utils/common/auth\'; import axios from \'axios\'; import { getLocalItem, Constants } from \'@/common/utils/common/cache\'; export function $fileDownload(url, config = {}) { let downloadUrl = process.env.VUE_APP_LIMS + url; let method = config.method || \'get\'; axios .request({ url: downloadUrl, method: method, headers: { Authorization: getToken(), \'Content-Type\': \'application/json\', \'User-Lang\': getLocalItem(Constants.LOCALE) }, data: config.data, responseType: \'blob\' }) .then( response => { console.log(response) let filename = response.headers[\'content-disposition\']; // 取出文件名字 console.log(filename) if (filename) { let index = filename.indexOf(\'fileName=\'); console.log(index) if (index >= 0) { console.log(index) filename = filename.substr(index + 9); filename = decodeURI(filename); } console.log(index) filename = filename.substr(index + 21); filename = decodeURI(filename); } let fileDownload = require(\'js-file-download\'); fileDownload(response.data, filename); if (typeof config.resolve === \'function\') { config.resolve(); } }, error => { let hasError = true; if (error.response) { const status = error.response.status; if (status === 401) { hasError = false; } } if (hasError) { this.$showError(\'下载出错,请稍后再试\'); } if (typeof config.reject === \'function\') { config.reject(); } } ); }
页面使用
import { $fileDownload } from "@/modules/lims/utils/utils";
async tipsZPGCalendar() { // let data = { // startDate: this.startDate, // endDate: this.endDate, // } // let config = { // data: data, // resolve: () => { // }, // reject: () => { // }, // }; let url = \'/capitalPlan/reportSearchZPGCalendar?startDate=\' + this.startDate + \'&endDate=\' + this.endDate const hh = await $fileDownload(url) },
handleClick() { let str = `参拍日期,项目名称\n`; for (let i = 0; i < this.list.length; i++) { let landProjects = []; for (let j = 0; j < this.list[i].landProjects.length; j++) { landProjects.push(this.list[i].landProjects[j]["projectName"]); } landProjects.join(","); str += `${this.list[i]["dateStr"]},${landProjects}`; str += "\n"; } //encodeURIComponent解决中文乱码 let uri = "data:text/csv;charset=utf-8,\ufeff" + encodeURIComponent(str); //通过创建a标签实现 let link = document.createElement("a"); link.href = uri; //对下载的文件命名 link.download = `参拍日历数据表${this.year}-${this.month}.xls`; document.body.appendChild(link); link.click(); document.body.removeChild(link); },