import { baseURL } from './env.js' import { api } from './api.js' // 请求拦截 const fetch = (url, opt) => { uni.showLoading({ mask: true }) let urls = (api[opt.url]?.url || api[url]?.url); let params = opt.params ? ('?' + Object.keys(opt.params).map(key => key + '=' + opt.params[key]).join('&')) : '' opt.url = uni.$baseUrl + urls + params opt.method = opt.method || "GET"; var header = {} // 是否禁用token if (!opt.hideToken) { if (uni.getStorageSync('token')) { header = { Authorization: 'Bearer ' + uni.getStorageSync('token') } } } // 带入租户编号 if (url === "login") opt.header["tenant-id"] = 122; opt.header = { ...opt.header, ...header } // console.log(opt); opt.data = opt.data || {}; return new Promise((resolve, reject) => { let options = {} Object.keys(opt).map(key => { if (key !== "params") { return options[key] = opt[key] } }) // uni.request(options) // .then(res => { // // 响应拦截 // const { // code // } = res.data // if (code == 200) { // resolve(res.data) // console.log("请求成功") // } // if (code == 401) { // uni.reLaunch({ // url: "/pages/login/loginPage" // }) // // console.log("未授权,跳转回登录页") // } // uni.hideLoading(); // resolve(res.data); // // resolve(res.data) // }) // .catch(err => { // uni.hideLoading(); // // 异常处理 // console.info("网络异常", err); // reject(err) // }) uni.request(options) .then(res => { if (!res || !res.data) { resolve({ code: -1, msg: '接口返回数据异常' }); return; } const { code } = res.data; if (code == 0 || code == 200) { resolve(res.data); console.log("请求成功"); return; } if (code == 401) { uni.reLaunch({ url: "/pages/login/loginPage" }); resolve(res.data); return; } // 关键:所有情况都 resolve,不改调用方写法 resolve(res.data); }) .catch(err => { console.info("网络异常", err); let msg = '网络异常'; if (err?.errMsg?.includes('timeout')) { msg = '请求超时,请稍后重试'; } else if (err?.errMsg === 'request:fail') { msg = '网络连接失败,请检查网络'; } else if (err?.errMsg?.includes('request:fail abort')) { msg = '请正确配置地址'; } else if (err?.errMsg) { msg = err.errMsg; } resolve({ code: -1, msg }); }) .finally(() => { uni.hideLoading(); }); }) } export { fetch }