// import { getToken, removeToken } from "./auth.js"; import $config from "@/config/index.js"; const http = uni.$u.http; const errorCode = { '401': '认证失败,无法访问系统资源', '403': '当前操作没有权限', '404': '访问资源不存在', 'default': '系统未知错误,请反馈给管理员' } const showToast = (text) => { uni.hideToast() uni.showToast({ title: text, icon: 'none' }) } let goLogin = false; const login_path = 'pages/login/index' const onLogin = (msg) => { if (goLogin) return; goLogin = true const pages = getCurrentPages(); const route = pages[pages.length - 1].route; if (!route || route !== login_path) { try { // if (getToken()) { // showToast(msg); // } // removeToken(); setTimeout(() => { uni.reLaunch({ url: `/${login_path}`, complete: () => { goLogin = false; } }) }, 500) } catch (e) { //TODO handle the exception goLogin = false; } } else { goLogin = false; }; } // console.log("$config = ", $config) http.setConfig((config) => { /* config 为默认全局配置*/ config.baseURL = $config.baseURL; /* 根域名 */ // 超时 config.timeout = 10000; // config.headers = { // 'Content-Type': 'application/json;charset=utf-8', // 'Content-Language': 'zh_CN' // } // if (config.isToken == false) { // } else { // config.header['apiToken'] = getToken(); // } /* 请求之前拦截器 */ // config.header['client'] = 'applet'; config.header['client'] = 'app'; // 单商户 // config.header['merchant-id'] = uni.getStorageSync('merchantId') || 1; // return config; // console.log("config = ", config) return config }) // 请求拦截 http.interceptors.request.use((config) => { // 可使用async await 做异步操作 // 初始化请求拦截器时,会执行此方法,此时data为undefined,赋予默认{} // 是否需要设置 token // console.log("interceptors = ", config) // const isToken = (config.headers || {}).isToken === false // if (getToken()) { // config.header['Authorization'] = 'Bearer ' + getToken() // 让每个请求携带自定义token 请根据实际情况自行修改 // // config.header['apiToken'] = getToken(); // } // config.data = config.data || {} // 根据custom参数中配置的是否需要token,添加对应的请求头 // if (config?.custom?.auth) { // // 可以在此通过vm引用vuex中的变量,具体值在vm.$store.state中 // config.header.token = vm.$store.state.userInfo.token // } return config // return false }, config => { // 可使用async await 做异步操作 return Promise.reject(config) }) // 响应拦截 http.interceptors.response.use((res) => { // console.log("res = ", res) /* 对响应成功做点什么 可使用async await 做异步操作*/ // 未设置状态码则默认成功状态 const code = res.data.code || 200; // 获取错误信息 const msg = errorCode[code] || res.data.msg || errorCode['default'] const { data } = res.data // console.log("msg =============== ", res) // console.log("data res= ", res) if (code === 401) { onLogin("登录状态已过期") return Promise.reject() } else if (code === 500) { showToast(msg) return Promise.reject(new Error(msg)) } else if (code === 50001) { return Promise.reject(res.data) } else if (code !== 200) { showToast(msg) return Promise.reject('error') } else { return data || data === false ? data : res.data } // 二进制数据则直接返回 // if (res.request.responseType === 'blob' || res.request.responseType === 'arraybuffer') { // return res.data // } else { // } }, (response) => { // console.log("msg ======111111111111========= ", response.data) const res = response.data || {}; let { message } = response; if (res?.msg) { message = res.msg; } else if (message == "Network Error") { message = "后端接口连接异常"; } else if (message.includes("timeout")) { message = "系统接口请求超时"; } else if (message.includes("Request failed with status code")) { message = "系统接口" + message.substr(message.length - 3) + "异常"; } showToast(message) console.log('err' + response) // 对响应错误做点什么 (statusCode !== 200) return Promise.reject(response) }) export default http