|
@@ -5,128 +5,131 @@ import { useUserStore } from '@/store';
|
|
|
import { getToken } from '@/utils/auth';
|
|
import { getToken } from '@/utils/auth';
|
|
|
|
|
|
|
|
export interface HttpResponse<T = unknown> {
|
|
export interface HttpResponse<T = unknown> {
|
|
|
- status: number;
|
|
|
|
|
- msg: string;
|
|
|
|
|
- code: number;
|
|
|
|
|
- data: T;
|
|
|
|
|
|
|
+ status: number;
|
|
|
|
|
+ msg: string;
|
|
|
|
|
+ code: number;
|
|
|
|
|
+ data: T;
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+if (import.meta.env.VITE_API_BASE_URL) {
|
|
|
|
|
+ axios.defaults.baseURL = import.meta.env.VITE_API_BASE_URL;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
let API_SCOPE = 'admin';
|
|
let API_SCOPE = 'admin';
|
|
|
-if (window.apiserver) axios.defaults.baseURL = window.apiserver;
|
|
|
|
|
-if (window.apiscope) API_SCOPE = window.apiscope;
|
|
|
|
|
|
|
+if (import.meta.env.VITE_API_BASE_SCOPE) {
|
|
|
|
|
+ API_SCOPE = import.meta.env.VITE_API_BASE_SCOPE;
|
|
|
|
|
+}
|
|
|
|
|
|
|
|
axios.interceptors.request.use(
|
|
axios.interceptors.request.use(
|
|
|
- (config: AxiosRequestConfig) => {
|
|
|
|
|
- // let each request carry token
|
|
|
|
|
- // this example using the JWT token
|
|
|
|
|
- // Authorization is a custom headers key
|
|
|
|
|
- // please modify it according to the actual situation
|
|
|
|
|
|
|
+ (config: AxiosRequestConfig) => {
|
|
|
|
|
+ // let each request carry token
|
|
|
|
|
+ // this example using the JWT token
|
|
|
|
|
+ // Authorization is a custom headers key
|
|
|
|
|
+ // please modify it according to the actual situation
|
|
|
|
|
|
|
|
- const token = getToken();
|
|
|
|
|
- if (token) {
|
|
|
|
|
- if (!config.headers) {
|
|
|
|
|
- config.headers = {};
|
|
|
|
|
- }
|
|
|
|
|
- if (API_SCOPE) {
|
|
|
|
|
- config.headers.scope = API_SCOPE;
|
|
|
|
|
- }
|
|
|
|
|
- config.headers.Authorization = `Bearer ${token}`;
|
|
|
|
|
- }
|
|
|
|
|
- return config;
|
|
|
|
|
- },
|
|
|
|
|
- (error) => {
|
|
|
|
|
- // do something
|
|
|
|
|
- return Promise.reject(error);
|
|
|
|
|
|
|
+ const token = getToken();
|
|
|
|
|
+ if (token) {
|
|
|
|
|
+ if (!config.headers) {
|
|
|
|
|
+ config.headers = {
|
|
|
|
|
+ };
|
|
|
|
|
+ }
|
|
|
|
|
+ if (API_SCOPE) {
|
|
|
|
|
+ config.headers.scope = API_SCOPE;
|
|
|
|
|
+ }
|
|
|
|
|
+ config.headers.Authorization = `Bearer ${token}`;
|
|
|
}
|
|
}
|
|
|
|
|
+ return config;
|
|
|
|
|
+ },
|
|
|
|
|
+ (error) => {
|
|
|
|
|
+ // do something
|
|
|
|
|
+ return Promise.reject(error);
|
|
|
|
|
+ }
|
|
|
);
|
|
);
|
|
|
// add response interceptors
|
|
// add response interceptors
|
|
|
axios.interceptors.response.use(
|
|
axios.interceptors.response.use(
|
|
|
- (response: AxiosResponse<HttpResponse>) => {
|
|
|
|
|
- const res = response.data;
|
|
|
|
|
- // if the custom code is not 20000, it is judged as an error.
|
|
|
|
|
- if (res.code !== 200) {
|
|
|
|
|
- Message.error({
|
|
|
|
|
- content: res.msg || 'Error',
|
|
|
|
|
- duration: 5 * 1000,
|
|
|
|
|
- });
|
|
|
|
|
- // 50008: Illegal token; 50012: Other clients logged in; 50014: Token expired;
|
|
|
|
|
- if (
|
|
|
|
|
- [401].includes(res.code) &&
|
|
|
|
|
- response.config.url !== '/api/user/info'
|
|
|
|
|
- ) {
|
|
|
|
|
- Modal.error({
|
|
|
|
|
- title: 'Confirm logout',
|
|
|
|
|
- content:
|
|
|
|
|
- 'You have been logged out, you can cancel to stay on this page, or log in again',
|
|
|
|
|
- okText: 'Re-Login',
|
|
|
|
|
- async onOk() {
|
|
|
|
|
- const userStore = useUserStore();
|
|
|
|
|
|
|
+ (response: AxiosResponse<HttpResponse>) => {
|
|
|
|
|
+ const res = response.data;
|
|
|
|
|
+ // if the custom code is not 20000, it is judged as an error.
|
|
|
|
|
+ if (res.code !== 200) {
|
|
|
|
|
+ Message.error({
|
|
|
|
|
+ content: res.msg || 'Error',
|
|
|
|
|
+ duration: 5 * 1000,
|
|
|
|
|
+ });
|
|
|
|
|
+ // 50008: Illegal token; 50012: Other clients logged in; 50014: Token expired;
|
|
|
|
|
+ if (
|
|
|
|
|
+ [401].includes(res.code) &&
|
|
|
|
|
+ response.config.url !== '/api/user/info'
|
|
|
|
|
+ ) {
|
|
|
|
|
+ Modal.error({
|
|
|
|
|
+ title: 'Confirm logout',
|
|
|
|
|
+ content:
|
|
|
|
|
+ 'You have been logged out, you can cancel to stay on this page, or log in again',
|
|
|
|
|
+ okText: 'Re-Login',
|
|
|
|
|
+ async onOk() {
|
|
|
|
|
+ const userStore = useUserStore();
|
|
|
|
|
|
|
|
- await userStore.logout();
|
|
|
|
|
- window.location.reload();
|
|
|
|
|
- },
|
|
|
|
|
- });
|
|
|
|
|
- }
|
|
|
|
|
- return Promise.reject(new Error(res.msg || 'Error'));
|
|
|
|
|
- }
|
|
|
|
|
- return res;
|
|
|
|
|
- },
|
|
|
|
|
- (error) => {
|
|
|
|
|
- const result = error.response;
|
|
|
|
|
-
|
|
|
|
|
- if (error.response) {
|
|
|
|
|
- if (
|
|
|
|
|
- error.response.request.responseType === 'arraybuffer' &&
|
|
|
|
|
- error.response.data.toString() === '[object ArrayBuffer]'
|
|
|
|
|
- ) {
|
|
|
|
|
- const text = Buffer.from(error.response.data).toString('utf8');
|
|
|
|
|
- result.data = JSON.parse(text);
|
|
|
|
|
- }
|
|
|
|
|
- } else {
|
|
|
|
|
- Message.error({
|
|
|
|
|
- content: error.msg || 'Request Error',
|
|
|
|
|
- duration: 5 * 1000,
|
|
|
|
|
- });
|
|
|
|
|
- return Promise.reject(error);
|
|
|
|
|
- }
|
|
|
|
|
-
|
|
|
|
|
- if (result.data.code !== 200) {
|
|
|
|
|
- const url = result.data.config?.url;
|
|
|
|
|
- // 50008: Illegal token; 50012: Other clients logged in; 50014: Token expired;
|
|
|
|
|
- if (result.data.code === 401 && url !== '/api/user/info') {
|
|
|
|
|
- Modal.error({
|
|
|
|
|
- title: 'Confirm logout',
|
|
|
|
|
- content:
|
|
|
|
|
- 'You have been logged out, you can cancel to stay on this page, or log in again',
|
|
|
|
|
- okText: 'Re-Login',
|
|
|
|
|
- async onOk() {
|
|
|
|
|
- const userStore = useUserStore();
|
|
|
|
|
|
|
+ await userStore.logout();
|
|
|
|
|
+ window.location.reload();
|
|
|
|
|
+ },
|
|
|
|
|
+ });
|
|
|
|
|
+ }
|
|
|
|
|
+ return Promise.reject(new Error(res.msg || 'Error'));
|
|
|
|
|
+ }
|
|
|
|
|
+ return res;
|
|
|
|
|
+ },
|
|
|
|
|
+ (error) => {
|
|
|
|
|
+ const result = error.response;
|
|
|
|
|
|
|
|
- await userStore.logout();
|
|
|
|
|
- window.location.reload();
|
|
|
|
|
- },
|
|
|
|
|
- });
|
|
|
|
|
- } else {
|
|
|
|
|
- Message.error({
|
|
|
|
|
- content: result.data.msg || 'Error',
|
|
|
|
|
- duration: 5 * 1000,
|
|
|
|
|
- });
|
|
|
|
|
- }
|
|
|
|
|
- }
|
|
|
|
|
|
|
+ if (error.response) {
|
|
|
|
|
+ if (error.response.request.responseType === 'arraybuffer' && error.response.data.toString() === '[object ArrayBuffer]') {
|
|
|
|
|
+ const text = Buffer.from(error.response.data).toString('utf8');
|
|
|
|
|
+ result.data = JSON.parse(text);
|
|
|
|
|
+ }
|
|
|
|
|
+ } else {
|
|
|
|
|
+ Message.error({
|
|
|
|
|
+ content: error.msg || 'Request Error',
|
|
|
|
|
+ duration: 5 * 1000,
|
|
|
|
|
+ });
|
|
|
|
|
+ return Promise.reject(error);
|
|
|
|
|
+ }
|
|
|
|
|
|
|
|
- if (result && typeof result.data.code !== 'undefined') {
|
|
|
|
|
- const err = new Error(result.data.msg);
|
|
|
|
|
- Message.error({
|
|
|
|
|
- content: err.message || 'Request Error',
|
|
|
|
|
- duration: 5 * 1000,
|
|
|
|
|
- });
|
|
|
|
|
- return Promise.reject(err);
|
|
|
|
|
- }
|
|
|
|
|
|
|
+ if (result.data.code !== 200) {
|
|
|
|
|
+ const url = result.data.config?.url
|
|
|
|
|
+ // 50008: Illegal token; 50012: Other clients logged in; 50014: Token expired;
|
|
|
|
|
+ if (result.data.code === 401 && url !== '/api/user/info') {
|
|
|
|
|
+ Modal.error({
|
|
|
|
|
+ title: 'Confirm logout',
|
|
|
|
|
+ content:
|
|
|
|
|
+ 'You have been logged out, you can cancel to stay on this page, or log in again',
|
|
|
|
|
+ okText: 'Re-Login',
|
|
|
|
|
+ async onOk() {
|
|
|
|
|
+ const userStore = useUserStore();
|
|
|
|
|
|
|
|
|
|
+ await userStore.logout();
|
|
|
|
|
+ window.location.reload();
|
|
|
|
|
+ },
|
|
|
|
|
+ });
|
|
|
|
|
+ } else {
|
|
|
Message.error({
|
|
Message.error({
|
|
|
- content: error.msg || 'Request Error',
|
|
|
|
|
- duration: 5 * 1000,
|
|
|
|
|
|
|
+ content: result.data.msg || 'Error',
|
|
|
|
|
+ duration: 5 * 1000,
|
|
|
});
|
|
});
|
|
|
- return Promise.reject(error);
|
|
|
|
|
|
|
+ }
|
|
|
}
|
|
}
|
|
|
|
|
+
|
|
|
|
|
+ if (result && typeof (result.data.code) !== 'undefined') {
|
|
|
|
|
+ const err = new Error(result.data.msg);
|
|
|
|
|
+ Message.error({
|
|
|
|
|
+ content: err.message || 'Request Error',
|
|
|
|
|
+ duration: 5 * 1000,
|
|
|
|
|
+ });
|
|
|
|
|
+ return Promise.reject(err);
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ Message.error({
|
|
|
|
|
+ content: error.msg || 'Request Error',
|
|
|
|
|
+ duration: 5 * 1000,
|
|
|
|
|
+ });
|
|
|
|
|
+ return Promise.reject(error);
|
|
|
|
|
+ }
|
|
|
);
|
|
);
|