1.拦截器:针对后端返回红色status
export const request: RequestConfig = {
timeout: 2000,
errorConfig: {
adaptor: (resData) => {
return {
...resData,
success: resData?.message,
errorMessage: resData?.detail,
showType: 2
};
},
},
requestInterceptors: [
(url, options) => {
const anguanAccess = localStorage.getItem('anguanAccess');
if (url !== '/ding/api/user/login' && !anguanAccess) {
message.error('用户登录token不存在');
history.push("/login");
}
return {
url,
options: {
...options,
headers: {
...options.headers,
Authorization: 'Bearer ' + anguanAccess,
}
}
};
},
],
responseInterceptors: [
async (response) => {
const result = await response.clone().json();
if (response.status === 401 || request?.code === 401) {
history.push('/login');
}
return response;
},
],
};
2.layout配置
layout: {
name: 'XX平台',
layout: 'side',
logo: '/images/logo.png',
navTheme: 'dark',
primaryColor: '#1890ff',
// 流式/定宽
contentWidth: 'Fluid',
fixedHeader: true,
fixSiderbar: true,
// 色弱模式
pwa: false,
headerHeight: 48,
// 分割一级菜单到表头
splitMenus: false,
},
3.表单校验
rules={[
({ getFieldValue }) => ({
validator() {
const ruleList = getFieldValue(['ruleList', index]);
if (
ruleList?.resourceNameFilter ||
(ruleList?.resourceGroupIdFilter &&
ruleList?.resourceGroupIdFilter?.length > 0) ||
(ruleList?.resourceTagFilterArr &&
ruleList?.resourceTagFilterArr.some(
(item: any) => item?.resourceTagKey,
))
) {
return Promise.resolve();
}
return Promise.reject(
new Error('3条筛选规则中,请至少填写一项'),
);
},
}),
]}