token失效重新获取

1,externalHttp
import externalaxios from 'axios';
import {externalApi} from '@/service/api/api';
import {Message} from 'element-ui';
import {encrypt} from "@/utils/aes-util";
// externalaxios.defaults.timeout = 30000;
// externalaxios.defaults.baseURL = '';


// ****************************************************************************************

function getLocalToken() {
  const token = window.sessionStorage.getItem('externalLogintoken')
  return token
}


// ****************************************************************************************over

const service = externalaxios.create({
  baseURL: '',
  headers: {
    'Content-Type': 'application/json',
    'token': getLocalToken() // headers塞token
  },
  timeout: 60000
})

service.setToken = (token) => {
  service.defaults.headers['token'] = token
  window.sessionStorage.setItem('externalLogintoken', token)
}


//http request 拦截器
service.interceptors.request.use(config => {

      if (sessionStorage.getItem("externalLogintoken")) {
        var token = sessionStorage.getItem("externalLogintoken");
      } else {
        var token = null;
      }

      // config.data = JSON.stringify(config.data);
      let encrypted = ""
      if (token && token.length > 16) {
        const key = token.substring(0, 16)
        encrypted = encrypt(key, new Date().getTime())
      }

      config.headers = Object.assign({
        'Content-Type': 'application/json;charset=UTF-8',
        'token': token,
        'Accept-Enypto-Time': encrypted.toString()

      }, config.headers);
      return config;
    },
    error => {
      return Promise.reject(err);
    }
);


//http response 拦截器
// 是否正在刷新的标记
let isRefreshing = false
// 重试队列,每一项将是一个待执行的函数形式
let requests = []

service.interceptors.response.use(response => {
      const {code} = response.data

      if (code == 401) {
        sessionStorage.removeItem("externalLogintoken");
        const config = response.config
        if (!isRefreshing) {
          isRefreshing = true
          return refreshToken().then(res => {
            service.setToken(res.token)
            const {token} = res.token
            config.headers['token'] = res.token
            window.sessionStorage.setItem('externalLogintoken', res.token)
            config.baseURL = ''
            // 已经刷新了token,将所有队列中的请求进行重试
            requests.forEach(cb => cb(token))
            requests = []
            return service(config)
          }).catch(res => {
            console.error('refreshtoken error =>', res)
            //window.location.href = '/'
          }).finally(() => {
            isRefreshing = false
          })
        } else {
          // 正在刷新token,将返回一个未执行resolve的promise
          return new Promise((resolve) => {
            // 将resolve放进队列,用一个函数形式来保存,等token刷新后直接执行
            requests.push((token) => {
              config.baseURL = ''
              config.headers['token'] = sessionStorage.getItem("externalLogintoken")
              resolve(service(config))
            })
          })
        }
      } else if (code == 70101) {
        // token 获取失败
        Message({
          message: "授权失败,请稍后重试",
          type: "error",
          duration: 5 * 1000
        });
        requests = []
      }

      return response;
    },
    error => {
      return Promise.reject(error)
    }
)
export default service;


/**
 * 封装get方法
 * @param url
 * @param data
 * @returns {Promise}
 */
export function externalget(url, params = {}) {
  return new Promise((resolve, reject) => {
    service.get(url, {params: params})
        .then(response => {
          if (response) {
            resolve(response.data);
          } else {
            resolve(null);
          }
        })
        .catch(err => {
          reject(err)
        })
  })
}

export function getExal(url, params = {}) {
  return new Promise((resolve, reject) => {
    service.get(url, {
      responseType: "blob"
    })
        .then(response => {
          if (response) {
            resolve(response);
          } else {
            resolve(null);
          }
        })
        .catch(err => {
          reject(err)
        })
  })
}


export function externalpost(url, data = {}) {
  return new Promise((resolve, reject) => {
    service.post(url, data)
        .then(response => {
          if (response) {
            resolve(response.data);
          } else {
            resolve(null);
          }

        }, err => {

          reject(err)
        })
  })
}

export function externalput(url, data = {}) {
  return new Promise((resolve, reject) => {
    service.put(url, data)
        .then(response => {
          resolve(response.data);
        }, err => {
          reject(err)
        })
  })
}


/**
 * 封装patch请求
 * @param url
 * @param data
 * @returns {Promise}
 */

// export function patch(url, data = {}) {
//   return new Promise((resolve, reject) => {
//     externalaxios.patch(url, data)
//       .then(response => {
//         resolve(response.data);
//       }, err => {
//         reject(err)
//       })
//   })
// }

// /**
//  * 封装put请求
//  * @param url
//  * @param data
//  * @returns {Promise}
//  */

// export function put(url, data = {}) {
//   return new Promise((resolve, reject) => {
//     externalaxios.put(url, data)
//       .then(response => {
//         resolve(response.data);
//       }, err => {
//         reject(err)
//       })
//   })
// }

// /**
//  * 封装delete方法
//  * @param url
//  * @param data
//  * @returns {Promise}
//  */
// export function deletes(url, params = {}) {
//   return new Promise((resolve, reject) => {
//     externalaxios.delete(url, {
//       params: params
//     })
//       .then(response => {
//         resolve(response.data);
//       })
//       .catch(err => {
//         reject(err)
//       })
//   })
// }


function refreshToken() {
  return externalApi.externalToken().then(res => res.data)
}


2.这是api
/*
 * @Author: your name
 * @Date: 2021-06-03 15:32:47
 * @LastEditTime: 2021-08-25 14:43:24
 * @LastEditors: Please set LastEditors
 * @Description: In User Settings Edit
 * @FilePath: \shangyuan-supplychain-gypms\src\common\js\api.js
 */

import {deletes, get, post, put} from '../../service/http/http'
//新项目里面所需的方法外部
import {externalget, externalpost, getExal} from '../../service/http/externalHttp'

//库存模块api
export const stockApi = {
  Addwarehouse(params) {
    return post(`/supplychain-apis/storehouse`,
        params
    );
  },
  Editwarehouse(params) {
    return put(`/supplychain-apis/storehouse`, params);
  },
  Delwarehouse(id) {
    return deletes(`/supplychain-apis/storehouse/${id}`,);
  },
  Getwarehouse(pagedata, pageindex) {
    return get('/supplychain-apis/storehouse' + '?pageSize=' + pagedata + '&pageIndex=' + pageindex);
  },
  GetgoodsList(id) {
    return get('/supplychain-apis/product/info/find-storehouse-io-product' + '?storehouseInfoId=' + id);
  },
  GetgoodshaveList(id) {
    return get('/supplychain-apis/storehouse/io/find-stock-by-storehouse-id' + '?storehouseInfoId=' + id);
  },
  Warehouseadjust(params) {
    return post(`/supplychain-apis/storehouse/io/stock-transfer`,
        params
    );
  },
  Inputstore(params) {
    return post(`/supplychain-apis/storehouse/io/in`,
        params
    );
  },
  Deliveryin(params) {
    return post(`/supplychain-apis/storehouse/io/out`,
        params
    );
  },

  InputDetail(id) {
    return get(`/supplychain-apis/storehouse/io/${id}`,);
  },

  Inventorylist(val) {
    return get('/supplychain-apis/storehouse/io/stock-list',val );
  },

  allWarehousedata() {
    return get(`/supplychain-apis/storehouse`)
  },

  details(val) {
    return get('/supplychain-apis/storehouse/io/details',val);
  },

  Orderquery(objdata) {
    return get(`/supplychain-apis/yg/order/quoted-order-list` +
        "?agencyId=" + objdata.objagency +
        "&syFactoryId=" + objdata.objenterprise +
        "&pageIndex=" + objdata.size +
        "&pageSize=" + objdata.page +
        "&beginDate=" + objdata.beginDate +
        "&endDate=" + objdata.endDate +
        "&salesSubItemName=" + objdata.salesSubItemName +
        "&orderId=" + objdata.orderId +
        "&supplierId=" + objdata.supplierId +
        "&salesItemCode=" + objdata.salesItemCode +
        "&queryTime=" + objdata.queryTime +
        "&canteenId=" + objdata.canteenId +
        "&orderUpdateTime=" + objdata.orderUpdateTime
    );
  },
  AcceptanceListquery(objdata) {
    return get(`/supplychain-apis/yg/order/quoted-delivery-list` +
        "?agencyId=" + objdata.objagency +
        "&syFactoryId=" + objdata.objenterprise +
        "&pageIndex=" + objdata.size +
        "&pageSize=" + objdata.page +
        "&beginDate=" + objdata.beginDate +
        "&endDate=" + objdata.endDate +
        "&salesSubItemName=" + objdata.salesSubItemName +
        "&deliveryId=" + objdata.deliveryId +
        "&supplierId=" + objdata.supplierId +
        "&salesItemCode=" + objdata.salesItemCode +
        "&queryTime=" + objdata.queryTime +
        "&canteenId=" + objdata.canteenId +
        "&orderUpdateTime=" + objdata.orderUpdateTime +
        "&poundState=" + objdata.poundState
    );
  },

  requireGenerate(objdata) {
    return get(`/supplychain-apis/sorting/generate/yg-order/` + objdata
    );

  }

}



//分拣模块需要的新增接口
export const sortingmoduleApi = {
  requeststyle() {
    return get(`/supplychain-apis/sorting/config/get-label-style`)
  },
  modifystyle(params) {
    return post(`/supplychain-apis/sorting/config/edit-label-style`,
        params
    );
  },
  getSetConfig() {
    return get(`/supplychain-apis/sorting/config`,);
  },
  updatePrintLabelPolicy(val) {
    return post(`/supplychain-apis/sorting/config/print-label-strategy/update`+"?value=" + val);
  },



}


//报价模块api 需要token
export const externalApi = {
  imgurlapi: "http://172.16.92.54:8090",
  //xxxxxxxxx
  externalSign(phone, message) {
    return externalpost(`/supplychain-apis/account/login` + "?mobile=" + phone + "&verCode=" + message);
  },

  externalToken() {
    return externalpost(`/supplychain-apis/account/yg-auth-token-verify`);
  },
  mechanismaggregate(valid) {
    return externalget(`/tendering-external-api/brand/purchase/cycle/select-agency-list` +
        "?syFactoryId=" + valid +
        "&page=" + '' +
        "&size=" + ''
    );
  },
  requestsupplierlist(valid, startdata, enddata) {
    return externalget(`/tendering-external-api/brand/purchase/cycle/quoted-order-supplier-list` +
        "?syFactoryId=" + valid +
        "&beginDate=" + startdata +
        "&endDate=" + enddata
    );
  },
  requestsupplierAcceptance(valid, startdata, enddata) {
    return externalget(`/tendering-external-api/brand/purchase/cycle/quoted-delivery-supplier-list` +
        "?syFactoryId=" + valid +
        "&beginDate=" + startdata +
        "&endDate=" + enddata
    );
  },
  requestschool(valid, startdata, enddata) {
    return externalget(`/tendering-external-api/brand/purchase/cycle/quoted-order-canteen-list` +
        "?syFactoryId=" + valid +
        "&beginDate=" + startdata +
        "&endDate=" + enddata
    );
  },
  Acceptanceschool(valid, startdata, enddata) {
    return externalget(`/tendering-external-api/brand/purchase/cycle/quoted-delivery-canteen-list` +
        "?syFactoryId=" + valid +
        "&beginDate=" + startdata +
        "&endDate=" + enddata
    );
  },
  requestcategory(valid) {
    return externalget(`/tendering-external-api/brand/purchase/cycle/select-sales-item-by-sy-factory-id` +
        "?syFactoryId=" + valid
    );
  },
  requesthelpday(val, id) {
    return externalget(`/tendering-external-api/brand/purchase/cycle/quoted-order-date-list` +
        "?planSupplierMonth=" + val +
        "&syFactoryId=" + id
    );
  },
  Acceptanceday(val, id) {
    return externalget(`/tendering-external-api/brand/purchase/cycle/quoted-delivery-date-list` +
        "?planSupplierMonth=" + val +
        "&syFactoryId=" + id
    );
  },
  requestgetcycle(objdata) {
    return externalget(`/tendering-external-api/brand/purchase/cycle/select-cycle-list` +
        "?agencyId=" + objdata.objagency +
        "&syFactoryId=" + objdata.objenterprise +
        "&page=" + objdata.size +
        "&size=" + objdata.page
    );
  },
  requestgoodsList(objdata) {
    return externalget(`/tendering-external-api/brand/purchase/cycle/quoted-order-list` +
        "?agencyId=" + objdata.objagency +
        "&syFactoryId=" + objdata.objenterprise +
        "&pageIndex=" + objdata.size +
        "&pageSize=" + objdata.page +
        "&beginDate=" + objdata.beginDate +
        "&endDate=" + objdata.endDate +
        "&salesSubItemName=" + objdata.salesSubItemName +
        "&orderId=" + objdata.orderId +
        "&supplierId=" + objdata.supplierId +
        "&salesItemCode=" + objdata.salesItemCode
    );
  },
  acceptance(objdata) {
    return externalget(`/tendering-external-api/brand/purchase/cycle/quoted-delivery-list` +
        "?agencyId=" + objdata.objagency +
        "&syFactoryId=" + objdata.objenterprise +
        "&pageIndex=" + objdata.size +
        "&pageSize=" + objdata.page +
        "&beginDate=" + objdata.beginDate +
        "&endDate=" + objdata.endDate +
        "&salesSubItemName=" + objdata.salesSubItemName +
        "&orderId=" + objdata.orderId +
        "&supplierId=" + objdata.supplierId +
        "&salesItemCode=" + objdata.salesItemCode +
        "&queryTime=" + objdata.queryTime +
        "&canteenId=" + objdata.canteenId +
        "&orderUpdateTime=" + objdata.orderUpdateTime
    );
  },
  requestquotedprice(syFactoryId, cycleId) {
    return externalget(`/tendering-external-api/brand/purchase/cycle/select-cycle-price-list` +
        "?syFactoryId=" + syFactoryId +
        "&cycleId=" + cycleId
    );
  },
  requestSummarylist(obj) {
    return externalget(`/tendering-external-api/sy/order/supplier-order/salessubitem-summary` +
        "?supplierId=" + obj.supplierId
        + "&supplyDateEnd=" + obj.supplyDateEnd
        + "&supplyDateStart=" + obj.supplyDateStart
        + "&salesItemCode=" + obj.salesItemCode
        + "&salesSubItemName=" + obj.salesSubItemName
        + "&pageIndex=" + obj.pageIndex
        + "&pageSize=" + obj.pageSize
    );
  },
  detailcollect(obj) {
    return externalget(`/tendering-external-api/sy/order/supplier-order/salessubitem-summary/detail` +
        "?supplierId=" + obj.supplierId
        + "&supplyDate=" + obj.supplyDate
        + "&salesSubItemCode=" + obj.salesSubItemCode
    );
  },
  requireTarget(id) {
    return externalget(`/tendering-external-api/brand/purchase/cycle/find-dinnerTarget-by-canteenId` +
        "?canteenId=" + id
    );
  },
  watchDetail(syFactoryId, cycleId) {
    return externalget(`/tendering-external-api/brand/purchase/cycle/select-history-cycle-price-list` +
        "?syFactoryId=" + syFactoryId +
        "&cycleId=" + cycleId
    );
  },
  changesale(postdata) {
    return externalpost(`/tendering-external-api/brand/purchase/cycle/update-sales-status`, postdata);
  },
  UpdateNameinfo(postdata) {
    return externalpost(`/tendering-external-api/brand/purchase/cycle/update-quote-sales-sub-item`, postdata);
  },
  Bulkquotation(postdata) {
    return externalpost(`/tendering-external-api/brand/purchase/cycle/bulk-quotation`, postdata);
  },
  changeDownPrice(postdata) {
    return externalpost(`/tendering-external-api/brand/purchase/cycle/price-reduction`, postdata);
  },
  requestExalorder(syFactoryId, cycleId) {
    return getExal(`/tendering-external-api/brand/purchase/cycle/export-cycle-price-list` +
        "?syFactoryId=" + syFactoryId +
        "&cycleId=" + cycleId
    );
  },
  AcceptanceExal(syFactoryId, cycleId) {
    return getExal(`/tendering-external-api/brand/purchase/cycle/export-cycle-price-list` +
        "?syFactoryId=" + syFactoryId +
        "&cycleId=" + cycleId
    );
  },
  ProInfo() {
    return externalget(`/tendering-external-api/quick/check/sys/item/select-item`
    );
  },
  PageQuickCheck(postdata) {
    return externalget("/tendering-external-api/quick/check/item/jc/page-quick-check"
        + "?quickCheckDate=" + postdata.quickCheckDate
        + "&quickCheckUnitId=" + postdata.quickCheckUnitId //9132050966895287XQ
        + "&quickCheckItemCode=" + postdata.quickCheckItemCode
        + "&quickCheckSubItemCode=" + postdata.quickCheckSubItemCode
        + "&page=" + postdata.page
        + "&size=" + postdata.size
    );
  },
  QuickCheckprint(postdata) {
    return externalget("/tendering-external-api/quick/check/item/jc/page-quick-check"
        + "?quickCheckDate=" + postdata.quickCheckDate
        + "&quickCheckUnitId=" + postdata.quickCheckUnitId //9132050966895287XQ
        + "&quickCheckItemCode=" + postdata.quickCheckItemCode
        + "&quickCheckSubItemCode=" + postdata.quickCheckSubItemCode
    );
  },
  haveJcInfo(postdata) {
    return externalget("/tendering-external-api/quick/check/item/jc/list-by-date"
        + "?quickCheckDate=" + postdata.quickCheckDate
        + "&quickCheckUnitId=" + postdata.quickCheckUnitId //9132050966895287XQ
    );
  },
  DetailInfo(postdata) {
    return externalget("/tendering-external-api/quick/check/item/jc/select-byId/" + postdata
    );
  },
}





代码块
代码块
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,080评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,422评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,630评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,554评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,662评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,856评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,014评论 3 408
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,752评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,212评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,541评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,687评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,347评论 4 331
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,973评论 3 315
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,777评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,006评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,406评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,576评论 2 349

推荐阅读更多精彩内容