gcz il y a 4 ans
Parent
commit
0ab1a8275e
5 fichiers modifiés avec 87 ajouts et 4 suppressions
  1. 4 1
      src/api/order.js
  2. 4 0
      src/main.js
  3. 15 0
      src/utils/index.js
  4. 35 1
      src/utils/request.js
  5. 29 2
      src/views/oms/order/index.vue

+ 4 - 1
src/api/order.js

@@ -70,9 +70,12 @@ export function logisticsCompany() {
 }
 
 export function exportExcel(data) {
-  return request({
+  return request({    
     url:'/order/list/excel',
     method:'get',
+    headers: {'responseType': 'blob','biz-source-param': 'BLG','Content-Type': 'application/x-www-form-urlencoded'},
     params:data
   })
 }
+
+

+ 4 - 0
src/main.js

@@ -16,6 +16,10 @@ import store from './store'
 import '@/icons' // icon
 import '@/permission' // permission control
 
+import { download } from '@/utils/request'
+
+Vue.prototype.download = download
+
 Vue.use(ElementUI, { locale })
 Vue.use(VCharts)
 

+ 15 - 0
src/utils/index.js

@@ -84,3 +84,18 @@ export function qqMapTransBMap(lng, lat) {
           lat: lats 
     } 
 }
+
+  /**
+   * 参数处理
+   * @param {*} params  参数
+   */
+  export function tansParams(params) {
+    let result = ''
+    Object.keys(params).forEach((key) => {
+      if (!Object.is(params[key], undefined) && !Object.is(params[key], null)) {
+        result += encodeURIComponent(key) + '=' + encodeURIComponent(params[key]) + '&'
+      }
+    })
+    return result
+  }
+  

+ 35 - 1
src/utils/request.js

@@ -2,6 +2,7 @@ import axios from 'axios'
 import { Message, MessageBox } from 'element-ui'
 import store from '../store'
 import { getToken } from '@/utils/auth'
+import { tansParams } from "@/utils/index";
 
 // 创建axios实例
 const service = axios.create({
@@ -13,6 +14,8 @@ const service = axios.create({
 service.interceptors.request.use(config => {
   if (store.getters.token) {
     config.headers['Authorization'] = getToken() // 让每个请求携带自定义token 请根据实际情况自行修改
+    // config.headers['Content-Type'] = 'application/x-www-form-urlencoded'
+    // config.headers['responseType'] = 'blob'
   }
   return config
 }, error => {
@@ -28,7 +31,7 @@ service.interceptors.response.use(
   * code为非200是抛错 可结合自己业务进行修改
   */
     const res = response.data
-    if (res.code !== 200) {
+    if (res.code&&res.code !== 200) {
       Message({
         message: res.message,
         type: 'error',
@@ -63,4 +66,35 @@ service.interceptors.response.use(
   }
 )
 
+
+// 通用下载方法
+export function download(url, params, filename) {
+  return service.post(url, params, {
+    transformRequest: [(params) => {
+      return tansParams(params)
+    }],
+    headers: {
+        'Content-Type': 'application/x-www-form-urlencoded'
+    },
+    responseType: 'blob'
+  }).then((data) => {
+    const content = data
+    const blob = new Blob([content])
+    if ('download' in document.createElement('a')) {
+      const elink = document.createElement('a')
+      elink.download = filename
+      elink.style.display = 'none'
+      elink.href = URL.createObjectURL(blob)
+      document.body.appendChild(elink)
+      elink.click()
+      URL.revokeObjectURL(elink.href)
+      document.body.removeChild(elink)
+    } else {
+      navigator.msSaveBlob(blob, filename)
+    }
+  }).catch((r) => {
+    console.error(r)
+  })
+}
+
 export default service

+ 29 - 2
src/views/oms/order/index.vue

@@ -509,12 +509,39 @@
         this.listQuery.startTime =  formatDate(startDate, 'yyyy-MM-dd hh:mm:ss');
         this.listQuery.endTime =  formatDate(endDate, 'yyyy-MM-dd hh:mm:ss');
       },
-      handleExportExcel(){
+      handleExportExcel(fileName){
+        if(!fileName || typeof fileName != "string"){
+          fileName = "订单"
+        }
         exportExcel(this.listQuery).then(res => {
-          console.log(res)
+          console.log('new Blob([res])',new Blob([res]));
+          if (!res) {
+            this.$message("文件下载失败")
+            return
+          }
+          if (typeof window.navigator.msSaveBlob !== 'undefined') {
+            window.navigator.msSaveBlob(new Blob([res]), fileName+'.xlsx')
+          }else{
+            let blob = new Blob([res], {
+              type: 'application/vnd.ms-excel'
+            });
+            console.log('blob',blob);
+            let url = window.URL.createObjectURL(blob)
+            // let url = window.URL.createObjectURL(new Blob([res]))
+            let link = document.createElement('a')
+            link.style.display = 'none'
+            link.href = url
+            link.setAttribute('download', fileName+new Date().getTime()+'.xlsx')
+            document.body.appendChild(link)
+            link.click()
+            document.body.removeChild(link); //下载完成移除元素
+            window.URL.revokeObjectURL(url); //释放掉blob对象
+          }
+          // console.log(res)
         }).catch(err =>{
           console.log(err)
         });
+
       },