import type { RequestConfig } from "@umijs/max";
import { message, Modal, Dropdown, MenuProps, theme } from "antd";
import { BulbOutlined, LogoutOutlined } from '@ant-design/icons';
import { baseUrl } from './constants/index'
import routes from '../config/routes'
import { history } from '@umijs/max';
import {
ProBreadcrumb,
} from '@ant-design/pro-components';
import { GetUserMenulist } from '@/apis/api';
export async function getInitialState(): Promise<{ permissions: object[] }> {
const token = sessionStorage.getItem('token');
let permissions = [];
if (!token) {
sessionStorage.clear();
history.push('/login');
return { permissions };
}
try {
const res = await GetUserMenulist();
permissions = flattenPermissions(res.data.menulist);
} catch (error) {
console.error('Failed to fetch user permissions:', error);
}
if (permissions.length === 0) {
history.push('/login');
}
return { permissions };
}
function flattenPermissions(permissions: { id: number; action: string; childs?: { id: number; action: string }[] }[]): string[] {
const flattenedPermissions: string[] = [];
permissions.forEach(permission => {
flattenedPermissions.push(permission.action);
if (permission.childs) {
flattenedPermissions.push(...flattenPermissions(permission.childs));
}
});
return flattenedPermissions;
}
export const layout = () => {
return {
name: '菊城人才市场',
logo: '/images/logo_1.jpg',
// copy from pro site
navTheme: 'dark',
primaryColor: '#1890ff',
layout: 'mix',
contentWidth: 'Fluid',
fixedHeader: true,
fixSiderbar: true,
// splitMenus: true,
siderWidth: 240,
title: '菊城人才市场',
pwa: false,
iconfontUrl: '',
headerContentRender: () => (<> >),
avatarProps: {
src: 'https://gw.alipayobjects.com/zos/antfincdn/efFD%24IOql2/weixintupian_20170331104822.jpg',
size: 'small',
title: '管理员',
render: (props, dom) => {
return (
,
label: '退出登录',
}
],
onClick: ({ key }) => {
sessionStorage.clear();
history.replace('/login');
}
}}
>
{dom}
);
}
},
token: {
sider: {
//侧边菜单的配置 ,这里具体看文档
colorBgMenuItemSelected: '#19be6e',
colorTextMenuItemSelected: '#ffffff',
},
},
};
};
export function onRouteChange({
location,
}) {
sessionStorage.setItem('path', location.pathname)
}
export const request: RequestConfig = {
baseURL: baseUrl,
errorConfig: {
// 错误抛出
errorThrower: (res) => {
const { success, data, errorCode, errorMessage, showType } = res;
if (!success) {
}
},
},
// 配置请求头
requestInterceptors: [
(config: object) => {
// 拦截请求配置,进行个性化处理。
const token = sessionStorage.getItem('token');
if (token) {
config.headers.Authorization = `${token}`;
}
return config;
},
],
// 配置响应拦截
responseInterceptors: [
(response) => {
const msgModel = (val: String, code: number) => {
Modal.error({
title: val,
centered: true
});
}
// 拦截响应数据,进行个性化处理
const { data } = response;
switch (data.code) {
case -1:
msgModel(data.msg, data.code)
break;
case 0:
break;
case 1:
return response;
break;
case 401:
msgModel(data.msg, data.code)
sessionStorage.clear();
history.push('/login');
break;
case 403:
msgModel(data.msg, data.code)
break;
case 404:
break;
case 600:
if (data.errors && Object.keys(data.errors).length > 0) {
msgModel(data.errors, data.code)
} else {
msgModel(data.msg, data.code)
}
}
return response;
}
]
}