123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166 |
- // 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
|