import axios from "axios";
import { appletLogin,pswLogin,sysLoginWx } from '../api/userInfo.js'
import { UniAdapter } from "uniapp-axios-adapter";
let wxToken='';
let type = uni.getStorageSync("loginType");//获取上次登录方式
const service = axios.create({
baseURL: 'http://192.168.11.140:9092/dx-procure',//后端ip
timeout: 35000,
adapter: UniAdapter,//指定适配器
});
service.interceptors.request.use(
(config) => {
return config;
// application/json: 表示请求或响应的主体是 JSON 格式的数据。
// application/x-www-form-urlencoded: 通常用于 HTML 表单提交,数据被编码为键值对形式。
// multipart/form-data: 用于发送表单数据,支持传输二进制数据和大文件。
// text/plain: 纯文本格式。
// application/xml 或 text/xml: XML 数据格式。
// application/pdf: PDF 文件。
// image/jpeg、image/png、image/svg+xml 等: 图像文件格式。
// audio/mpeg、audio/wav、audio/ogg 等: 音频文件格式。
// video/mp4、video/webm、video/quicktime 等: 视频文件格式
},
(error) => {
return Promise.reject(error);
}
);
service.interceptors.response.use(
async (response) => {
switch (response.data.status) {
case 206:
break;
case 401:
break;
case 403:
break;
case 500:
break;
case 201://需要前端重新登录的状态码,以下是重点
if (type) {//若上次登录过
if (response.config.data) {
let requestData = JSON.parse(response.config.data); // 将字符串数据转换为对象
requestData.wxToken = await appLogin(); // 在对象中更新 wxToken
//重新设置好最新的token之后重新运行任务队列
response.config.data = JSON.stringify(requestData);
return axios(response.config).then((res) => {
return res.data; // 返回后端的响应数据
});
}
} else {//从未登录过
uni.showToast({
title: "请重新进入小程序",
icon: 'none',
duration: 1000
});
setTimeout(() => {
uni.redirectTo({
url: '/pages/userInfo/login'
});
}, 1000);
}
break;
default:
return Promise.resolve(response.data);
}
if (response.data.status !== 201) return Promise.resolve(response.data);
},
(err) => {
// 当状态码不是200时的错误处理
return Promise.reject(err);
}
);
//以下是获取token的方法后去重新登录的方法
async function appLogin() {
let jsCode = await getAppCode();
let data = {
apiKey: 'admin',
apiSecret: 'admin2024@123',
params: {
jsCode
}
}
return new Promise((resolve, reject) => {
appletLogin(data).then((res) => {
if (res.status === 200) {
wxToken = res.data.wxToken;
if (type === 'wx') wxLogin();
else accountLogin();
resolve(wxToken);
}
});
});
}
function getAppCode() {
return new Promise((resolve, reject) => {
uni.login({
provider: 'weixin',
success(res) {
resolve(res.code);
},
fail(err) {}
});
});
}
function wxLogin() {
let data = {
apiKey: 'admin',
apiSecret: 'admin2024@123',
wxToken
};
sysLoginWx(data).then((res) => {
if (res.status === 200) {
uni.setStorageSync('sysToken', res.data.sysToken);
uni.setStorageSync('wxToken', wxToken);
}
});
}
function accountLogin() {
let data = {
apiKey: 'admin',
apiSecret: 'admin2024@123',
wxToken,
params: {
accountPsw: uni.getStorageSync('accountPsw'),
accountId: uni.getStorageSync('accountId')
}
};
pswLogin(data).then((res) => {
if (res.status === 200) {
uni.setStorageSync('wxToken', wxToken);
uni.setStorageSync('sysToken', res.data.personId);
}
});
}
export default service;