diff --git a/src/utils/downloadRequest.js b/src/utils/downloadRequest.js new file mode 100644 index 0000000..3dfce31 --- /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_BASE_API, + 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/utils/request.js b/src/utils/request.js index 6a85292..c1679c8 100644 --- a/src/utils/request.js +++ b/src/utils/request.js @@ -11,13 +11,19 @@ import { let loading ; // create an axios instance +let baseUrl = '' +if(window.location.origin.indexOf('localhost')>-1){ + baseUrl = process.env.VUE_APP_BASE_API +}else{ + baseUrl = window.location.origin + '/' +} +console.log(baseUrl,window.location.origin) const service = axios.create({ - baseURL: process.env.VUE_APP_BASE_API, // url = base url + request url + baseURL: baseUrl, // url = base url + request url // withCredentials: true, // send cookies when cross-domain requests - timeout: 10000, // request timeout + timeout: 100000, // request timeout isLoading:true }) - // request interceptor service.interceptors.request.use( config => { diff --git a/src/views/dashboard/index.vue b/src/views/dashboard/index.vue index d1dfd99..13a0026 100644 --- a/src/views/dashboard/index.vue +++ b/src/views/dashboard/index.vue @@ -1,461 +1,533 @@ - - - - - - - - - - - - - - {select.rows = e;select.page = 1;getList()}" - @pageIndexChange="e => {select.page = e;getList()}"> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/src/views/order/index.vue b/src/views/order/index.vue index 45e40d9..81638f5 100644 --- a/src/views/order/index.vue +++ b/src/views/order/index.vue @@ -22,6 +22,8 @@ 查询 + 导出 + @@ -57,6 +59,9 @@ import operate from '@/views/order/component/operate.vue' import LxHeader from '@/components/LxHeader/index.vue' import {getList,log} from '@/api/order' + import { + download + } from '@/utils/downloadRequest' export default { components: { LxHeader, @@ -299,6 +304,17 @@ export default { console.log(res) this.data = res.data this.total = res.total + }, + downloadExel() { + + download( + '/api/merchant/order/get-list', + 'get', { + is_export: 1, + ...this.select + }, + '订单列表.xlsx') + } }, computed: {},