123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123 |
- import Taro from '@tarojs/taro';
- import api from './server/index';
- import { setApp } from './config';
- import bookStore from '@src/store/book'
- import { enumDictList, getRechargeTemplate } from './server/index/index';
- import indexStore from './store/index'
- export interface ResData {
- code: number,
- data: any,
- fail: boolean,
- msg: string,
- success: boolean
- }
- //拦截器
- let isOpne = false //弹窗是否开启
- // 因没有权限等待的请求
- let pendingRequests: any[] = [];
- // 请求拦截器
- const requestInterceptor = (chain) => {
- // 展示loding弹窗逻辑
- if (app.isLoding && !isOpne) {
- isOpne = true
- Taro.showLoading({ title: "加载中..." })
- }
- const requestParams = chain.requestParams;
- requestParams.url = requestParams.url?.match(/^http[s]?:\/\//ig) ? requestParams.url : app.apiUrl + requestParams.url
- // 是登录接口token换成inittoken
- let token = requestParams.url.match(/(\/jsCodeLogin)|(\/appComponent\/list)/ig) ? app.initToken : app.token
- // 不存在token并且不是init和login接口关闭请求
- if (!token && !requestParams.url.match(/(\/jsCodeLogin)|(\/loginInitialize)/ig)) {
- // 打印日志或执行一些清理操作
- console.log("Token 无效,取消请求,并存入待请求列表,授权后重新请求");
- // 存入待请求列表
- pendingRequests.push(chain);
- // 返回一个被拒绝的Promise以中断请求
- return new Promise(() => { });
- }
- //分类列表假如上次请求的频道没变就不再获取
- if (requestParams.url.includes('/app/bookCategory/list')) {
- if (requestParams.data.workDirection === bookStore.oldWorkDirection) {
- log("阻止参数不变获取分类")
- return new Promise(() => { });
- } else {
- //赋值本次的请求
- bookStore.setData({ oldWorkDirection: requestParams.data.workDirection })
- }
- }
- requestParams.header = {
- ...requestParams.header,
- "Token": token
- }
- // 继续请求
- return chain.proceed(requestParams);
- };
- // 响应拦截器
- const responseInterceptor = (chain) => {
- return chain.proceed(chain.requestParams).then(async (response) => {
- const { data } = response;
- let { code } = data
- // 在这里处理返回的数据
- switch (code) {
- case 200:
- // 初始化接口调用登录接口,登录接口存在自己的执行判断
- if (chain.requestParams.url.includes("loginInitialize")) {
- // 存放初始token和app信息
- setApp({ initToken: data.data.token, appInfo: data.data.appInfo,payVersion:data.data.appInfo.iosPayment })
- // 获取枚举
- enumDictList()
- // 登录
- let user: any = await api.login()
- // 存放user信息到本地
- Taro.setStorageSync("userInfo", user)
- // 获取充值模板
- await getRechargeTemplate()
- // 判断是否需要隐藏支付
- if(app.system === "ios"){
- let iosShowPay = app?.proVersion? app?.payVersion >= app?.proVersion : false
- console.log("是ios",iosShowPay)
- setApp({iosShowPay})
- }else{
- setApp({iosShowPay:true})
- }
- console.log("获取当前APP", app); // 获取当前小程序版本号,
- // 设置已登录状态让页面刷新接口
- indexStore.setData({ isLogin: true })
- // 检测待请求列表中是否存在请求,存在就执行请求
- while (pendingRequests.length > 0) {
- console.log("存在待请求")
- const pendingChain = pendingRequests.shift();
- Taro.request(pendingChain.requestParams);
- }
- }
- break;
- case 300:
- log("token过期,重新登录", data)
- setApp({ token: "" })
- await api.loginInit(app.appId)
- // 重新执行当前请求
- console.log("登录后重新请求===>")
- const newRequestParams = chain.requestParams;
- return Taro.request(newRequestParams).then(newResponse => newResponse.data);
- default:
- log("未知错误", data)
- Taro.showToast({
- title: data.msg,
- icon: 'error',
- duration: 1000
- })
- break;
- }
- //关闭login弹窗
- if (isOpne) {
- isOpne = false
- Taro.hideLoading()
- }
- return data;
- });
- };
- // 添加请求拦截器
- Taro.addInterceptor(requestInterceptor);
- // 添加响应拦截器
- Taro.addInterceptor(responseInterceptor);
|