const install = (Vue, vm) => { 
 | 
    // 是否正在刷新的标记 
 | 
    let isRefreshing = false 
 | 
    // 重试队列,每一项将是一个待执行的函数形式 
 | 
    let requests = [] 
 | 
     
 | 
    // 请求拦截器 
 | 
    uni.$u.http.interceptors.request.use((config) => { 
 | 
        uni.showLoading({ 
 | 
            title: '加载中', 
 | 
            mask: true 
 | 
        }); 
 | 
        const cookies = vm.$store.state.cookies || '' 
 | 
        if (cookies) { 
 | 
            config.header['doumee-auth-token'] = cookies; 
 | 
        } 
 | 
        return config 
 | 
    }, config => { 
 | 
        return Promise.reject(config) 
 | 
    }) 
 | 
     
 | 
    // 响应拦截器 
 | 
    uni.$u.http.interceptors.response.use((response) => { 
 | 
        uni.hideLoading(); 
 | 
        // 登录过期 
 | 
        if (response.data.code === 401 && vm.$store.state.cookies) { 
 | 
            if (!isRefreshing) {    // 是否已经执行刷新 
 | 
                isRefreshing = true 
 | 
                uni.login({ 
 | 
                    provider: 'weixin', 
 | 
                    success: async function (loginRes) { 
 | 
                        let { code } = loginRes; 
 | 
                        uni.request({ 
 | 
                            url: vm.$baseUrl + 'system/loginByWxMini', 
 | 
                            method: "POST", 
 | 
                            data: { code }, 
 | 
                            success: (res) => { 
 | 
                                isRefreshing = false 
 | 
                                if (res.data.data) { 
 | 
                                    vm.$store.commit('setCookies', res.data.data) 
 | 
                                    vm.$u.api.getUserInfo() 
 | 
                                        .then(user => { 
 | 
                                            vm.$store.commit('setUserInfo', user.data) 
 | 
                                        }) 
 | 
                                    // 已经刷新了token,将所有队列中的请求进行重试 
 | 
                                    requests.forEach(item => item(res.data.data)) 
 | 
                                    requests = [] 
 | 
                                } else { 
 | 
                                    uni.navigateTo({ 
 | 
                                        url: '/pages/login/login' 
 | 
                                    }) 
 | 
                                } 
 | 
                            } 
 | 
                        }); 
 | 
                    } 
 | 
                }); 
 | 
            } 
 | 
            return new Promise((resolve) => { 
 | 
                // 将resolve放进队列,用一个函数形式来保存,等token刷新后直接执行 
 | 
                requests.push(token => { 
 | 
                    response.config.header['doumee-auth-token'] = token 
 | 
                    resolve(uni.$u.http.request(response.config)); 
 | 
                }) 
 | 
            }) 
 | 
        } else if (response.data.code === 401 && !vm.$store.state.cookies) { 
 | 
            uni.navigateTo({ 
 | 
                url: '/pages/login/login' 
 | 
            }) 
 | 
        } 
 | 
        if (response.data.code !== 200) { 
 | 
            uni.showToast({ 
 | 
                title: response.data.message, 
 | 
                icon: "none", 
 | 
                duration: 2000 
 | 
            }); 
 | 
        } 
 | 
        return response.data; 
 | 
    }, (response) => { 
 | 
        uni.hideLoading(); 
 | 
        return Promise.reject(response) 
 | 
    }) 
 | 
} 
 | 
  
 | 
export default { install } 
 |