app.ts
3.72 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
// 运行时配置
import { RequestConfig, history } from '@umijs/max';
import '@inspir/assembly-css/dist/special.css';
import { message } from 'antd';
import { RESPONSE_CODE } from './constants/enum';
import { RunTimeLayoutConfig } from '@umijs/max';
import GlobleHeader from './components/UserHeader';
import './style/global.css';
import { getUserInfo } from './utils';
// 全局初始化数据配置,用于 Layout 用户信息和权限初始化
// 更多信息见文档:https://umijs.org/docs/api/runtime-config#getinitialstate
export async function getInitialState() {
return getUserInfo();
}
export const layout: RunTimeLayoutConfig = () => {
return {
headerRender: GlobleHeader,
siderWidth: '190px',
layout: 'mix',
// 其他属性见:https://procomponents.ant.design/components/layout#prolayout
};
};
// export const layout = () => {
// return {
// menu: {
// locale: false,
// header: GlobleHeader,
// headerRender:GlobleHeader,
// rightContentRender: () => GlobleHeader,
// // footerRender: () => <Footer />,
// },
// // collapsed: true,
// // breakpoint:false
// };
// };
export const request: RequestConfig = {
// 错误处理
errorHandler: (error) => {
console.log(
'%c [ error ]-35',
'font-size:13px; background:pink; color:#bf2c9f;',
error,
);
const { response, data } = error;
if (response && response.status) {
// 401重定向
if (response.status === 401) {
if (!location.pathname.includes('login')) {
localStorage.removeItem('token');
localStorage.removeItem('userInfo');
message.error('token失效,请重新登录!');
history.push('/login');
return null;
}
}
}
return data;
},
// 请求处理
requestInterceptors: [
(url: string, options) => {
const controller = new AbortController(); // create a controller
const { signal } = controller;
let authHeader: { Authorization?: string; systemid?: string } = {};
if (localStorage.getItem('token')) {
authHeader = {
Authorization: localStorage.getItem('token') || undefined,
};
}
// const requestOption: AxiosRequestConfig = {
// method: options.method || 'get',
// };
// if (options.header) {
// requestOption.headers = options.header;
// }
// if (options.body) {
// options.data = options.body;
// }
if (options.query) {
options.params = options.query;
}
return {
url: '/api' + url,
options: {
...options,
signal,
interceptors: true,
headers: authHeader,
},
};
},
],
responseInterceptors: [
// 一个二元组,第一个元素是 request 拦截器,第二个元素是错误处理
[
(response) => {
// 不再需要异步处理读取返回体内容,可直接在data中读出,部分字段可在 config 中找到
const { data = {} as any } = response;
if (
data.result !== RESPONSE_CODE.SUCCESS &&
data.result !== undefined
) {
message.error(data.message);
}
if (data.result === 401) {
history.push('/login');
}
// do something
return response;
},
(error: any) => {
if (error?.response?.status === 401) {
if (!location.pathname.includes('login')) {
localStorage.removeItem('token');
localStorage.removeItem('userInfo');
message.error('token失效,请重新登录!');
history.push('/login');
}
}
return Promise.reject(error);
},
],
],
};