admin-vben5/apps/web-antd/src/forward/request.ts

65 lines
1.7 KiB
TypeScript
Raw Normal View History

2024-06-02 20:50:51 +08:00
/**
*
*/
import type { HttpResponse } from '@vben-core/request';
2024-06-02 20:50:51 +08:00
import { preferences } from '@vben-core/preferences';
import { RequestClient } from '@vben-core/request';
2024-06-02 20:50:51 +08:00
import { message } from 'ant-design-vue';
import { useAccessStore } from '#/store';
2024-06-02 20:50:51 +08:00
2024-06-23 13:19:55 +08:00
/**
*
* Create a request instance
*/
2024-06-02 20:50:51 +08:00
function createRequestClient() {
const client = new RequestClient({
baseURL: import.meta.env.VITE_GLOB_API_URL,
// 为每个请求携带 Authorization
makeAuthorization: () => {
return {
// 默认
key: 'Authorization',
tokenHandler: () => {
const accessStore = useAccessStore();
2024-06-30 14:09:44 +08:00
return {
refreshToken: `${accessStore.refreshToken}`,
token: `${accessStore.accessToken}`,
2024-06-30 14:09:44 +08:00
};
2024-06-02 20:50:51 +08:00
},
unAuthorizedHandler: async () => {
const accessStore = useAccessStore();
accessStore.setAccessToken(null);
if (preferences.app.loginExpiredMode === 'modal') {
accessStore.openLoginExpiredModal = true;
} else {
// 退出登录
await accessStore.logout();
}
},
2024-06-02 20:50:51 +08:00
};
},
makeErrorMessage: (msg) => message.error(msg),
2024-06-02 20:50:51 +08:00
});
client.addResponseInterceptor<HttpResponse>((response) => {
const { data: responseData, status } = response;
2024-06-02 20:50:51 +08:00
const { code, data, message: msg } = responseData;
if (status >= 200 && status < 400 && code === 0) {
return data;
}
throw new Error(msg);
});
return client;
2024-06-02 20:50:51 +08:00
}
2024-06-30 14:09:44 +08:00
const requestClient = createRequestClient();
2024-06-02 20:50:51 +08:00
// 其他配置的请求方法
// const { request: xxxRequest } = createRequest();
2024-06-30 14:09:44 +08:00
export { requestClient };