换地址

This commit is contained in:
丁杰 2026-06-01 16:42:22 +08:00
parent 126e236cc2
commit 90edc49e80
1 changed files with 241 additions and 258 deletions

View File

@ -1,78 +1,66 @@
import { import { getToken, setToken, removeToken } from "./auth";
getToken, import { setVersion } from "../utils/version.js";
setToken, import { getBaseUrl } from "../utils/version.js";
removeToken
} from './auth'
import {
setVersion
} from '../utils/version.js'
import {
getBaseUrl
} from '../utils/version.js'
let baseURL; let baseURL;
setVersion() setVersion();
let isRefreshing = false let isRefreshing = false;
let subscribers = [] let subscribers = [];
// 订阅 Token 刷新 // 订阅 Token 刷新
function subscribeTokenRefresh(cb) { function subscribeTokenRefresh(cb) {
subscribers.push(cb) subscribers.push(cb);
} }
// 发布 Token 刷新完成 // 发布 Token 刷新完成
function onRrefreshed(token) { function onRrefreshed(token) {
subscribers.forEach(cb => cb(token)) subscribers.forEach((cb) => cb(token));
subscribers = [] subscribers = [];
} }
// 请求拦截器 // 请求拦截器
const requestInterceptor = (options) => { const requestInterceptor = (options) => {
// 获取token // 获取token
const token = uni.getStorageSync('accessToken') const token = uni.getStorageSync("accessToken");
if (token) { if (token) {
options.header = { options.header = {
...options.header, ...options.header,
'Authorization': `Bearer ${token}` Authorization: `Bearer ${token}`,
} };
} }
// #ifdef H5 // #ifdef H5
// H5端跨域处理 // H5端跨域处理
options.header = { options.header = {
...options.header, ...options.header,
'Access-Control-Allow-Origin': '*' "Access-Control-Allow-Origin": "*",
} };
// #endif // #endif
return options return options;
} };
// 响应拦截器 // 响应拦截器
const responseInterceptor = async (options, response, resolve, reject) => { const responseInterceptor = async (options, response, resolve, reject) => {
const { const { statusCode, data } = response;
statusCode,
data
} = response
// 请求成功 // 请求成功
if (statusCode >= 200 && statusCode < 300) { if (statusCode >= 200 && statusCode < 300) {
return data return data;
} }
// 处理错误 // 处理错误
if (statusCode === 401) { if (statusCode === 401) {
return await handleUnauthorized(options, resolve, reject);
return await handleUnauthorized(options, resolve, reject)
} }
// 其他错误 // 其他错误
uni.showToast({ uni.showToast({
title: data.message || '请求失败', title: data.message || "请求失败",
icon: 'none' icon: "none",
}) });
return Promise.reject(data) return Promise.reject(data);
} };
// 创建 uni.request 的封装 // 创建 uni.request 的封装
// const request = (options) => { // const request = (options) => {
// return new Promise((resolve, reject) => { // return new Promise((resolve, reject) => {
@ -96,55 +84,52 @@ const responseInterceptor = async (options, response, resolve, reject) => {
// 请求方法 // 请求方法
const request = async (options, isUpdate) => { const request = async (options, isUpdate) => {
// 合并配置 // 合并配置
let url = uni.getStorageSync('baseUrl') let url = uni.getStorageSync("baseUrl");
if (uni.getStorageSync('setVersion').VersionCode == '') { if (uni.getStorageSync("setVersion").VersionCode == "") {
setVersion() setVersion();
} }
if (!url) { if (!url) {
await new Promise((resolve, reject) => { await new Promise((resolve, reject) => {
uni.request({ uni.request({
url: 'https://api.mrrwlkj.top/api/openPuc/getSjApiUrl', // 接口地址 url: "https://api.mrrwlkj.top/api/openPuc/getSjApiUrl", // 接口地址
method: 'GET', // 请求方法(默认 GET method: "GET", // 请求方法(默认 GET
header: { header: {
'Content-Type': 'application/json', // 请求头 "Content-Type": "application/json", // 请求头
'VersionCode': uni.getStorageSync('setVersion').VersionCode, VersionCode: uni.getStorageSync("setVersion").VersionCode,
'DeviceBrand': uni.getStorageSync('setVersion').DeviceBrand, DeviceBrand: uni.getStorageSync("setVersion").DeviceBrand,
'DeviceType': uni.getStorageSync('setVersion').DeviceType DeviceType: uni.getStorageSync("setVersion").DeviceType,
}, },
success: (res) => { success: (res) => {
if (res.data.code == 200) { if (res.data.code == 200) {
uni.setStorageSync('baseUrl', res.data.data.url) uni.setStorageSync("baseUrl", res.data.data.url);
url = res.data.data.url url = res.data.data.url;
resolve(url) resolve(url);
} }
console.log('请求成功', res.data); console.log("请求成功", res.data);
}, },
fail: (err) => { fail: (err) => {
console.log('请求失败', err); console.log("请求失败", err);
}, },
complete: () => { complete: () => {
console.log('请求完成(无论成功失败都会执行)'); console.log("请求完成(无论成功失败都会执行)");
} },
});
}); });
})
} }
if (process.env.NODE_ENV === "development") {
if (process.env.NODE_ENV === 'development') {
baseURL = url; // 发布到生产环境时,此处代码会被摇树移除掉。 baseURL = url; // 发布到生产环境时,此处代码会被摇树移除掉。
//baseURL = 'http://60.247.146.5:93'; // 发布到生产环境时,此处代码会被摇树移除掉。 baseURL = "http://116.63.163.121:93"; // 发布到生产环境时,此处代码会被摇树移除掉。
//baseURL = 'http://60.247.146.5:96'; // 发布到生产环境时,此处代码会被摇树移除掉。 //baseURL = 'http://60.247.146.5:96'; // 发布到生产环境时,此处代码会被摇树移除掉。
//baseURL = 'https://app.mrrweb.com.cn'; //baseURL = 'https://app.mrrweb.com.cn';
} else { } else {
baseURL = url; // 发布到生产环境时,此处代码会被摇树移除掉。 baseURL = url; // 发布到生产环境时,此处代码会被摇树移除掉。
baseURL = 'http://60.247.146.5:93'; // 发布到生产环境时,此处代码会被摇树移除掉。 baseURL = "http://116.63.163.121:93"; // 发布到生产环境时,此处代码会被摇树移除掉。
//baseURL = 'http://60.247.146.5:96'; // 发布到生产环境时,此处代码会被摇树移除掉。 //baseURL = 'http://60.247.146.5:96'; // 发布到生产环境时,此处代码会被摇树移除掉。
//baseURL = 'https://app.mrrweb.com.cn'; //baseURL = 'https://app.mrrweb.com.cn';
console.log('生产环境'); console.log("生产环境");
} }
// 基础配置 // 基础配置
@ -154,24 +139,22 @@ const request = async (options, isUpdate) => {
// baseURL: 'https://app.mrrweb.com.cn', // APP和H5的生产URL // baseURL: 'https://app.mrrweb.com.cn', // APP和H5的生产URL
header: { header: {
'content-type': 'application/json', "content-type": "application/json",
'VersionCode': uni.getStorageSync('setVersion').VersionCode, VersionCode: uni.getStorageSync("setVersion").VersionCode,
'DeviceBrand': uni.getStorageSync('setVersion').DeviceBrand, DeviceBrand: uni.getStorageSync("setVersion").DeviceBrand,
'DeviceType': uni.getStorageSync('setVersion').DeviceType DeviceType: uni.getStorageSync("setVersion").DeviceType,
}, },
timeout: 60000 // 超时时间 timeout: 60000, // 超时时间
} };
options = { options = {
...config, ...config,
...options, ...options,
url: !isUpdate ? `${config.baseURL}${options.url}` : options.url url: !isUpdate ? `${config.baseURL}${options.url}` : options.url,
} };
// 请求拦截 // 请求拦截
options = requestInterceptor(options) options = requestInterceptor(options);
// 发起请求 // 发起请求
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
@ -179,8 +162,8 @@ const request = async (options, isUpdate) => {
// H5端添加loading // H5端添加loading
if (!options.hideLoading) { if (!options.hideLoading) {
uni.showLoading({ uni.showLoading({
title: '加载中...' title: "加载中...",
}) });
} }
// #endif // #endif
@ -189,92 +172,92 @@ const request = async (options, isUpdate) => {
success: (res) => { success: (res) => {
// #ifdef H5 // #ifdef H5
if (!options.hideLoading) { if (!options.hideLoading) {
uni.hideLoading() uni.hideLoading();
} }
// #endif // #endif
resolve(responseInterceptor(options, res, resolve, reject)) resolve(responseInterceptor(options, res, resolve, reject));
}, },
fail: (err) => { fail: (err) => {
// #ifdef H5 // #ifdef H5
if (!options.hideLoading) { if (!options.hideLoading) {
uni.hideLoading() uni.hideLoading();
} }
// #endif // #endif
// 网络错误处理 // 网络错误处理
let errorMsg = '网络错误,请稍后重试' let errorMsg = "网络错误,请稍后重试";
// #ifdef H5 // #ifdef H5
if (err.errMsg.includes('timeout')) { if (err.errMsg.includes("timeout")) {
errorMsg = '请求超时,请检查网络' errorMsg = "请求超时,请检查网络";
} }
// #endif // #endif
uni.showToast({ uni.showToast({
title: errorMsg, title: errorMsg,
icon: 'none' icon: "none",
}) });
reject(err) reject(err);
} },
}) });
}) });
} };
// 处理 401 未授权 // 处理 401 未授权
async function handleUnauthorized(originalRequest, resolve, reject) { async function handleUnauthorized(originalRequest, resolve, reject) {
if (!getToken()) { if (!getToken()) {
return redirectToLogin() return redirectToLogin();
} }
// 如果正在刷新 Token将请求加入队列 // 如果正在刷新 Token将请求加入队列
if (isRefreshing) { if (isRefreshing) {
return subscribeTokenRefresh(token => { return subscribeTokenRefresh((token) => {
originalRequest.header['Authorization'] = `Bearer ${token}` originalRequest.header["Authorization"] = `Bearer ${token}`;
request(originalRequest, true).then(resolve).catch(reject) request(originalRequest, true).then(resolve).catch(reject);
}) });
} }
isRefreshing = true isRefreshing = true;
try { try {
const newToken = await refreshToken() const newToken = await refreshToken();
setToken(newToken) setToken(newToken);
onRrefreshed(newToken) onRrefreshed(newToken);
// 用新 Token 重试原始请求 // 用新 Token 重试原始请求
originalRequest.header['Authorization'] = `Bearer ${newToken}` originalRequest.header["Authorization"] = `Bearer ${newToken}`;
const response = await request(originalRequest, true) const response = await request(originalRequest, true);
// resolve(response) // resolve(response)
return response return response;
} catch (error) { } catch (error) {
removeToken() removeToken();
redirectToLogin() redirectToLogin();
// reject(error) // reject(error)
return error return error;
} finally { } finally {
isRefreshing = false isRefreshing = false;
} }
} }
// 刷新 Token // 刷新 Token
async function refreshToken() { async function refreshToken() {
const refreshToken = uni.getStorageSync('refreshToken') const refreshToken = uni.getStorageSync("refreshToken");
if (!refreshToken) { if (!refreshToken) {
throw new Error('No refresh token') throw new Error("No refresh token");
} }
const res = await request({ const res = await request({
url: '/sj/refreshtoken', url: "/sj/refreshtoken",
data: { data: {
refresh_token: uni.getStorageSync('refreshToken'), refresh_token: uni.getStorageSync("refreshToken"),
deviceid: getApp().globalData.deviceid deviceid: getApp().globalData.deviceid,
}, },
method: 'POST' method: "POST",
}) });
if (res.state == 1 || res.code == 200) { if (res.state == 1 || res.code == 200) {
uni.setStorageSync('accessToken', res.access_token) uni.setStorageSync("accessToken", res.access_token);
uni.setStorageSync('refreshToken', res.refresh_token) uni.setStorageSync("refreshToken", res.refresh_token);
return res.access_token return res.access_token;
} }
throw new Error('Refresh token failed') throw new Error("Refresh token failed");
} }
// 跳转到登录页 // 跳转到登录页
@ -285,7 +268,7 @@ function redirectToLogin() {
//一键登录测试 //一键登录测试
// uni.oprPresentLogin() // uni.oprPresentLogin()
uni.navigateTo({ uni.navigateTo({
url: '/pages/blogPopup/blogPopup' url: "/pages/blogPopup/blogPopup",
}); });
} }
@ -296,9 +279,9 @@ export default {
return request({ return request({
url, url,
data, data,
method: 'GET', method: "GET",
...options ...options,
}) });
}, },
// POST请求 // POST请求
@ -306,9 +289,9 @@ export default {
return request({ return request({
url, url,
data, data,
method: 'POST', method: "POST",
...options ...options,
}) });
}, },
// PUT请求 // PUT请求
@ -316,9 +299,9 @@ export default {
return request({ return request({
url, url,
data, data,
method: 'PUT', method: "PUT",
...options ...options,
}) });
}, },
// DELETE请求 // DELETE请求
@ -326,8 +309,8 @@ export default {
return request({ return request({
url, url,
data, data,
method: 'DELETE', method: "DELETE",
...options ...options,
}) });
} },
} };