From ecf09d55412833da10d1e8e920d51cb237708459 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=88=98=E7=BF=94=E5=AE=87-=E6=97=85=E7=AE=A1=E5=AE=B6?= <153298343@qq.com> Date: Wed, 22 Mar 2023 13:29:21 +0800 Subject: [PATCH] up --- src/utils/downloadRequest.js | 92 +++++++++++++++++++++++++++++ src/views/contract/contractList.vue | 45 +++++++++----- 2 files changed, 123 insertions(+), 14 deletions(-) create mode 100644 src/utils/downloadRequest.js diff --git a/src/utils/downloadRequest.js b/src/utils/downloadRequest.js new file mode 100644 index 0000000..bf7630d --- /dev/null +++ b/src/utils/downloadRequest.js @@ -0,0 +1,92 @@ +import axios from 'axios' +import { getToken } from '@/utils/auth' +import { Loading, Message } from 'element-ui' + +/* + * @params {string} url 请求拼接地址 + * @params {object} info 请求参数params或data + */ + +let loading; +export async function download(url,method='get',info,filename){ + + loading = Loading.service({ + lock:true, + background:"rgba(0,0,0,0.4)", + text:"文件正在生成中..." + }) + + let options = { + baseURL:process.env.VUE_APP_DOMIAN, + url, + method, + responseType: 'blob', + timeout:10000, + headers: { + Accept: 'application/json','Content-Type':'application/json; charset=utf-8', + withCredentials: true, + Authorization:"Bearer " + getToken() + }, + } + if(method === 'get'){ + Object.defineProperty(options,'params',{ + value:info, + enumerable:true, + writable:false + }) + } + if(method === 'post'){ + Object.defineProperty(options,'data',{ + value:info, + enumerable:true, + writable:false + }) + } + + try { + const response = await axios.request(options) + + loading.close() + + // 提取文件名 + if(!filename){ + filename = response.headers['content-disposition']?.match( + /filename=(.*)/ + )[1] || '' + } + + // 将二进制流转为blob + const blob = new Blob([response.data], { type: 'application/octet-stream' }) + if (typeof window.navigator.msSaveBlob !== 'undefined') { + // 兼容IE,window.navigator.msSaveBlob:以本地方式保存文件 + window.navigator.msSaveBlob(blob, decodeURI(filename)) + } else { + // 创建新的URL并指向File对象或者Blob对象的地址 + const blobURL = window.URL.createObjectURL(blob) + // 创建a标签,用于跳转至下载链接 + const tempLink = document.createElement('a') + tempLink.style.display = 'none' + tempLink.href = blobURL + tempLink.setAttribute('download', decodeURI(filename)) + // 兼容:某些浏览器不支持HTML5的download属性 + if (typeof tempLink.download === 'undefined') { + tempLink.setAttribute('target', '_blank') + } + // 挂载a标签 + document.body.appendChild(tempLink) + tempLink.click() + document.body.removeChild(tempLink) + // 释放blob URL地址 + window.URL.revokeObjectURL(blobURL) + } + }catch (err){ + console.error(err) + loading.close() + Message({ + type:'error', + message:err + }) + } +} + + diff --git a/src/views/contract/contractList.vue b/src/views/contract/contractList.vue index c404e05..68d300f 100644 --- a/src/views/contract/contractList.vue +++ b/src/views/contract/contractList.vue @@ -146,7 +146,7 @@ @click=" select = {showDatePicker:'',ageIndex:1,startDate:'',endDate:'',type:'',department:'',purchaseModality:'',purchaseMethods:'',priceMin:null,priceMax:null,status:''}"> 重置 - + @@ -503,7 +503,10 @@ import detail from "./components/detailContract" import paymentRegistration from "./components/paymentRegistration"; import contractSign from "@/views/contract/components/contractSign"; import contractPaymentRegistration from "@/views/contract/components/contractPaymentRegistration"; - + + import { + download + } from '@/utils/downloadRequest' export default { components: { editor, @@ -1509,6 +1512,20 @@ export default { this.select.pageIndex = 1; this.getContracts(); }, + + + + downloadExel() { + + download( + '/api/admin/contract/index', + 'get', { + is_auth: 1, + is_export: 1, + ...this.select + }, + '合同列表.xlsx') + }, //获取合同列表 async getContracts(is_export) { @@ -1520,18 +1537,18 @@ export default { }) let tokens = getToken(); - if (is_export) { - this.select.is_export == 1 - var url = "/api/admin/contract/index?is_auth=1&token=" + tokens - Object.keys(this.select).map((key, item) => { - url += "&" + key + "=" + this.select[key]; - }); - url = location.host + url; - console.log(url) - window.open("http://" + url, '_blank') - this.select.is_export = 0 - return; - } + // if (is_export) { + // this.select.is_export == 1 + // var url = "/api/admin/contract/index?is_auth=1&token=" + tokens + // Object.keys(this.select).map((key, item) => { + // url += "&" + key + "=" + this.select[key]; + // }); + // url = location.host + url; + // console.log(url) + // window.open("http://" + url, '_blank') + // this.select.is_export = 0 + // return; + // } this.list = res.list.data this.total = res.list.total