mirror of
https://gitee.com/beijing_hongye_huicheng/lilishop-uniapp.git
synced 2026-11-07 01:18:53 +08:00
- 删除 afterSales.vue 独立页面,将售后入口统一至 myOrder 页面 - 修改售后相关页面跳转路径为 /pages/order/myOrder?status=5 - 重构 applySuccess 页面,增加微信订阅消息授权与视觉优化 - 重构预存款明细页面,增加收支筛选与日志解析功能 - 新增 store 端 API 基础地址配置
156 lines
4.2 KiB
JavaScript
156 lines
4.2 KiB
JavaScript
import api from "@/config/api.js";
|
||
import Request from "@/lib/request/index.js";
|
||
import Foundation from "@/utils/Foundation.js";
|
||
import { md5 } from "@/utils/md5.js";
|
||
import storage from "@/utils/storage.js";
|
||
import uuid from "@/utils/uuid.modified.js";
|
||
|
||
let isStoreNavigateTo = false;
|
||
|
||
function cleanStoreAuth() {
|
||
uni.showToast({
|
||
title: "商家登录状态已过期,请重新登录",
|
||
icon: "none",
|
||
duration: 1800,
|
||
});
|
||
|
||
storage.clearStoreAuth();
|
||
|
||
if (!isStoreNavigateTo) {
|
||
isStoreNavigateTo = true;
|
||
setTimeout(() => {
|
||
isStoreNavigateTo = false;
|
||
uni.reLaunch({
|
||
url: "/pages-sub/merchant/pages/login/index",
|
||
});
|
||
}, 1200);
|
||
}
|
||
}
|
||
|
||
const storeHttp = new Request();
|
||
|
||
const ensureUuid = () => {
|
||
if (!storage.getUuid()) {
|
||
storage.setUuid(uuid.v1());
|
||
}
|
||
};
|
||
|
||
storeHttp.setConfig((config) => {
|
||
ensureUuid();
|
||
config.baseURL = api.store;
|
||
config.header = {
|
||
...config.header,
|
||
};
|
||
config.validateStatus = () => true;
|
||
return config;
|
||
});
|
||
|
||
storeHttp.interceptors.request.use(
|
||
(config) => {
|
||
ensureUuid();
|
||
const token = storage.getStoreAccessToken();
|
||
if (token) {
|
||
const nonce = Foundation.randomString(6);
|
||
const timestamp = parseInt(new Date().getTime() / 1000);
|
||
const sign = md5(nonce + timestamp + token);
|
||
const _params = { nonce, timestamp, sign };
|
||
config.params = { ...(config.params || {}), ..._params };
|
||
config.header.accessToken = token;
|
||
}
|
||
config.header = {
|
||
...config.header,
|
||
uuid: storage.getUuid(),
|
||
};
|
||
return config;
|
||
},
|
||
(config) => Promise.reject(config)
|
||
);
|
||
|
||
let isStoreRefreshing = false;
|
||
let storeRequests = [];
|
||
|
||
function refreshTokenApi(refreshToken) {
|
||
return uni.request({
|
||
url: `${api.store}/passport/login/refresh/${refreshToken}`,
|
||
method: "GET",
|
||
header: {
|
||
uuid: storage.getUuid(),
|
||
},
|
||
});
|
||
}
|
||
|
||
storeHttp.interceptors.response.use(
|
||
async (response) => {
|
||
isStoreNavigateTo = false;
|
||
try {
|
||
uni.hideLoading();
|
||
} catch (e) {}
|
||
|
||
const token = storage.getStoreAccessToken();
|
||
const refreshToken = storage.getStoreRefreshToken();
|
||
|
||
// 403 / 401 并且有 refreshToken,尝试刷新
|
||
if (
|
||
token &&
|
||
refreshToken &&
|
||
(response.statusCode === 403 || response.statusCode === 401 || response.data?.code === 403)
|
||
) {
|
||
if (!isStoreRefreshing) {
|
||
isStoreRefreshing = true;
|
||
storage.removeStoreAccessToken();
|
||
try {
|
||
const [err, res] = await refreshTokenApi(refreshToken);
|
||
const data = res?.data || err?.data;
|
||
if (data && data.success && data.result) {
|
||
const { accessToken: newAccessToken, refreshToken: newRefreshToken } = data.result;
|
||
storage.setStoreAccessToken(newAccessToken);
|
||
if (newRefreshToken) {
|
||
storage.setStoreRefreshToken(newRefreshToken);
|
||
}
|
||
response.header = response.header || {};
|
||
response.header.accessToken = `${newAccessToken}`;
|
||
storeRequests.forEach((cb) => cb(newAccessToken));
|
||
storeRequests = [];
|
||
return storeHttp.request(response.config);
|
||
} else {
|
||
cleanStoreAuth();
|
||
return Promise.reject(data);
|
||
}
|
||
} catch (e) {
|
||
cleanStoreAuth();
|
||
return Promise.reject(e);
|
||
} finally {
|
||
isStoreRefreshing = false;
|
||
}
|
||
} else {
|
||
return new Promise((resolve) => {
|
||
storeRequests.push((newToken) => {
|
||
response.header = response.header || {};
|
||
response.header.accessToken = `${newToken}`;
|
||
resolve(storeHttp.request(response.config));
|
||
});
|
||
});
|
||
}
|
||
} else if (
|
||
(!token && (response.statusCode === 403 || response.statusCode === 401)) ||
|
||
response.data?.code === 403 ||
|
||
response.data?.code === 401
|
||
) {
|
||
cleanStoreAuth();
|
||
} else if ((response.statusCode === 200 && response.data && !response.data.success) || response.statusCode === 400) {
|
||
if (response.data?.message) {
|
||
uni.showToast({
|
||
title: response.data.message,
|
||
icon: "none",
|
||
duration: 2000,
|
||
});
|
||
}
|
||
}
|
||
return response;
|
||
},
|
||
(error) => error
|
||
);
|
||
|
||
export { storeHttp };
|
||
export default storeHttp;
|