|
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174 |
- 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: () => (<> <ProBreadcrumb /></>),
- avatarProps: {
- src: 'https://gw.alipayobjects.com/zos/antfincdn/efFD%24IOql2/weixintupian_20170331104822.jpg',
- size: 'small',
- title: '管理员',
- render: (props, dom) => {
- return (
- <Dropdown
- menu={{
- items: [
- {
- key: 'logout',
- icon: <LogoutOutlined />,
- label: '退出登录',
- }
- ],
- onClick: ({ key }) => {
- sessionStorage.clear();
- history.replace('/login');
- }
- }}
- >
- {dom}
- </Dropdown>
- );
- }
- },
- 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;
- }
- ]
- }
-
-
-
|