// 引入配置文件 import config from "@/common/config.js"; // #ifdef MP-WEIXIN import wxApp from "@/common/wecaht.min.app.js" import { getToken, clearToken } from '@/common/token.js' // #endif const filterNoToken = ["/api/auth/refreshToken", "/api/auth/login"]; export default { config: { baseUrl: config.apiUrl, header: { 'Content-Type': 'application/json;charset=UTF-8', }, data: {}, method: "GET", dataType: "json", }, async request(options = {}) { // 请求拦截器 uni.addInterceptor('request', { invoke: (request) => { // 在发送请求之前的处理逻辑,例如添加请求头、请求日志等 // request.header = { // 'Content-Type': 'application/json', // 设置请求头 // // 在这里可以添加其他自定义请求头 // }; // console.log('Request:', request); return request; }, }); // 响应拦截器 uni.addInterceptor('response', { invoke: (response) => { // 在接收到响应数据之后的处理逻辑,例如统一处理错误码、响应日志等 // console.log('Response:', response); return response; }, }); options.header = options.header || this.config.header; options.method = options.method || this.config.method; options.dataType = options.dataType || this.config.dataType; let version = 'web'; // #ifdef MP-WEIXIN // 微信小程序处理 options.header.appid = wxApp.getWXAppId(); options.header.source = 'wxapp'; // 过滤不需要token的api if (filterNoToken.indexOf(options.url) === -1) { // console.log('getTokenString ',options.url ) options.header.Authorization = await (this.getTokenString()); } // #endif options.url = this.config.baseUrl + options.url; console.log('options.url ', options.url) return new Promise((resolve, reject) => { options.success = (e) => { console.log(e, 'successsuccesssuccesssuccesssuccess') let res = e.data; if (e.statusCode === 200) { if (res.code == 500201) { // 未登录 clearToken(); getToken(); if (filterNoToken.indexOf(options.url) === -1) { return this.request(options); } } else { if (res.code != 0) { uni.showToast({ title: res.msg, duration: 1000, icon: 'none' }); } } resolve(res); } else { uni.showToast({ title: "网络异常,请稍后再试", duration: 1000, icon: 'none' }); reject(new Error('Request failed')); } } options.fail = (err) => { console.log(err) reject(err); } uni.request(options) }) }, get(url, data, options = {}) { options.url = url; options.data = data; options.method = 'GET'; return this.request(options); }, post(url, data, options = {}) { options.url = url; options.data = data; options.method = 'POST'; return this.request(options); }, // 上传图片 upload(url, options = {}) { options.url = this.config.baseUrl + url; options.header = options.header || this.config.header; options.fileType = options.fileType || "image"; options.formData = options.formData || {}; options.filePath = options.filePath; options.name = options.name; // TODO:token增加等操作 if (options.token) { // 验证是否登录 if (!this.checkToken(options.checkToken)) return; // 验证权限 if (!this.checkAuth(options.checkAuth)) return; options.header.token = User.token; } return uni.uploadFile(options); }, // 错误处理 errorCheck(err, res, errfun = false, resfun = false) { if (err) { typeof errfun === 'function' && errfun(); uni.showToast({ title: '加载失败', icon: "none" }); return false; } if (res.data.errorCode) { typeof errfun === 'function' && resfun(); uni.showToast({ title: res.data.msg, icon: "none" }); return false; } return true; }, async getTokenString() { // console.log('getTokenString-----start'); await getToken(); let token = uni.getStorageSync('token'); // token格式化 if (token && typeof token === "string") { token = JSON.parse(token); } // console.log('getTokenString--end', token); return token.token; } }