import { useState, useEffect, useRef } from 'react'; import type { RequestConfig } from "@umijs/max"; import { Layout, Modal, Dropdown, Image, Flex, Col, ConfigProvider, Button, Space } from "antd"; import { HomeOutlined, LogoutOutlined, FileTextOutlined } from '@ant-design/icons'; import { baseUrl } from './constants/index' import routes from '../config/routes' import { history, useModel, Link } from '@umijs/max'; import { filterRoutesByAccess, findAccessIndex } from './utils/RouteHelper' import LoginIndex from '@/components/Login/Index/index' import FooterIndex from '@/components/Common/Footer/index' export async function getInitialState(): Promise<{ permissions: object }> { const role = localStorage.getItem('role'); let permissions = {} switch (role) { case 'personal': permissions = { managejobseeker: true, managejobseekerhome: true, managejobseekerresume: true, managejobseekerdetail: true, managejobseekerrecommend: true, managejobseekerresetting: true, talentjobdetail: true, talentCompanydetail: true, talentResumedetail: true, talentfairdetail: true, talentinformationdetail: true } break; case 'company': permissions = { company: true, companyhome: true, companydepartment: true, companypost: true, companyresume: true, companysearch: true, companyfair: true, companysetting: true, talentjobdetail: true, talentCompanydetail: true, talentResumedetail: true, talentfairdetail: true, talentinformationdetail: true } break; default: permissions = { talent: true, talenthome: true, talentsearch: true, talentfair: true, talentinformation: true, talentdownload: true, talentabout: true, talentjobdetail: true, talentCompanydetail: true, talentResumedetail: true, talentfairdetail: true, talentinformationdetail: true, sciencetechnologypark: true, sciencetechnologyparkhome: true, sciencetechnologyparkabout: true, sciencetechnologyparknews: true, sciencetechnologyparkcompany: true, sciencetechnologyparknotice: true, sciencetechnologyparkconversion: true, sciencetechnologyparkactivity: true, sciencetechnologyparkconstruct: true, sciencetechnologyparkpartymembercenter: true, partner: true, } }; return { permissions }; } export const layout = () => { const [openPreview, setOpenPreview] = useState(false); const { initialState, loading, error, refresh, setInitialState } = useModel('@@initialState'); return { title: '菊城人才网', logo: '/images/onlylogo.jpg', headerTitleRender: (logo, title, props) => { return ( <>
{ localStorage.setItem('role', 'common') history.replace('/talent/home'); window.location.reload() } }> {logo}
菊城人才网
); }, menuRender: false, layout: 'top', token: { pageContainer: { paddingBlockPageContainerContent: 40, paddingInlinePageContainerContent: 314, colorBgPageContainer: '#f5f5f5' }, header: { colorTextMenuSelected: '#19be6e', heightLayoutHeader: 90, }, }, onPageChange: (location) => { const role = localStorage.getItem('role'); switch (role) { case 'personal': setInitialState((s) => ({ ...s, permissions: { managejobseeker: true, managejobseekerhome: true, managejobseekerdetail: true, managejobseekerresume: true, managejobseekerrecommend: true, managejobseekerresetting: true, talentjobdetail: true, talentCompanydetail: true, talentResumedetail: true, talentfairdetail: true, talentinformationdetail: true }, })); break; case 'company': setInitialState((s) => ({ ...s, permissions: { managecompany: true, managecompanyhome: true, managecompanypost: true, managecompanyresume: true, managecompanyrecommend: true, managecompanyinfo: true, managecompanydepartment: true, managecompanyfair: true, managecompanysetting: true, talentjobdetail: true, talentCompanydetail: true, talentResumedetail: true, talentfairdetail: true, talentinformationdetail: true }, })); break; default: setInitialState((s) => ({ ...s, permissions: { talent: true, talenthome: true, talentsearchjob: true, talentsearchcompany: true, talentfair: true, talentinformation: true, talentdownload: true, talentabout: true, talentjobdetail: true, talentCompanydetail: true, talentResumedetail: true, talentfairdetail: true, talentinformationdetail: true, sciencetechnologypark: true, sciencetechnologyparkhome: true, sciencetechnologyparkabout: true, sciencetechnologyparknews: true, sciencetechnologyparkcompany: true, sciencetechnologyparknotice: true, sciencetechnologyparkconversion: true, sciencetechnologyparkactivity: true, sciencetechnologyparkconstruct: true, sciencetechnologyparkpartymembercenter: true, sciencetechnologyparkformationdetail: true, partner: true, }, })); } }, menuDataRender: () => { if (localStorage.getItem('path') == '/talent/search/job' || localStorage.getItem('path') == '/talent/search/company' || localStorage.getItem('path') == '/talent/home' || localStorage.getItem('path') == '/talent/fair' || localStorage.getItem('path') == '/talent/information' || localStorage.getItem('path') == '/talent/about') { localStorage.setItem('role', 'common') } if (localStorage.getItem('path') == '/manage/jobseeker/resume' || localStorage.getItem('path') == '/manage/jobseeker/home' || localStorage.getItem('path') == '/manage/jobseeker/recommend' || localStorage.getItem('path') == '/manage/jobseeker/setting') { localStorage.setItem('role', 'personal') } if (localStorage.getItem('path') == '/manage/company/home' || localStorage.getItem('path') == '/manage/company/info' || localStorage.getItem('path') == '/manage/company/post' || localStorage.getItem('path') == '/manage/company/resume' || localStorage.getItem('path') == '/manage/company/recommend' || localStorage.getItem('path') == '/manage/company/department' || localStorage.getItem('path') == '/manage/company/fair' || localStorage.getItem('path') == '/manage/company/setting' ) { localStorage.setItem('role', 'company') } const role = localStorage.getItem('role'); switch (role) { case 'personal': routes[4].flatMenu = true; setInitialState((s) => ({ ...s, permissions: { managejobseeker: true, managejobseekerhome: true, managejobseekerresume: true, managejobseekerrecommend: true, managejobseekerresetting: true, talentjobdetail: true, talentCompanydetail: true, talentResumedetail: true, talentfairdetail: true, talentinformationdetail: true } })); return [routes[4]] case 'company': routes[5].flatMenu = true; setInitialState((s) => ({ ...s, permissions: { managecompany: true, managecompanyhome: true, managecompanypost: true, managecompanyresume: true, managecompanyrecommend: true, managecompanyinfo: true, managecompanydepartment: true, managecompanysetting: true, talentjobdetail: true, talentCompanydetail: true, talentResumedetail: true, talentfairdetail: true, talentinformationdetail: true }, })); return [routes[5]] default: setInitialState((s) => ({ ...s, permissions: { talent: true, talenthome: true, talentsearch: true, talentfair: true, talentinformation: true, talentdownload: true, talentabout: true, talentjobdetail: true, talentCompanydetail: true, talentResumedetail: true, talentfairdetail: true, talentinformationdetail: true, sciencetechnologypark: true, sciencetechnologyparkhome: true, sciencetechnologyparkabout: true, sciencetechnologyparknews: true, sciencetechnologyparkcompany: true, sciencetechnologyparknotice: true, sciencetechnologyparkconversion: true, sciencetechnologyparkactivity: true, sciencetechnologyparkconstruct: true, sciencetechnologyparkpartymembercenter: true, sciencetechnologyparkformationdetail: true, partner: true, }, })); if (localStorage.getItem('idx') != null && localStorage.getItem('idx') != '-1') { let idx = localStorage.getItem('idx') if (Number(idx) == 1) { routes[Number(idx)].flatMenu = true; routes[2].flatMenu = false; } if (Number(idx) == 2) { routes[Number(idx)].flatMenu = true; routes[1].flatMenu = false; } if (Number(idx) == 3) { routes[2].flatMenu = true; } } else { routes[1].flatMenu = false; routes[2].flatMenu = true; } return [routes[0], routes[1], routes[2], routes[3]] // return [routes[0], routes[3]] } }, footerRender: () => { return (<> ) }, avatarProps: { src: 'https://gw.alipayobjects.com/zos/antfincdn/efFD%24IOql2/weixintupian_20170331104822.jpg', size: 'small', title: '王二狗', render: (props, dom) => { let roleItem: any = [] if (localStorage.getItem('companyid')) { roleItem = [ { key: 'company', icon: , label: '企业中心', }, { key: 'talent', icon: , label: '求职首页', }, { key: 'logout', icon: , label: '退出登录', } ] } else { roleItem = [ { key: 'resume', icon: , label: '我的简历', }, { key: 'talent', icon: , label: '求职首页', }, { key: 'logout', icon: , label: '退出登录', } ] } return ( <> { localStorage.getItem('token') ? { console.log(key); switch (key) { case 'resume': localStorage.setItem('role', 'personal') history.replace('/manage/jobseeker/home'); window.location.reload() break; case 'company': localStorage.setItem('role', 'company') history.replace('/manage/company/home'); window.location.reload() break; case 'talent': localStorage.setItem('role', 'common') history.replace('/talent/home'); window.location.reload() break; case 'logout': localStorage.clear(); localStorage.setItem('role', 'common') history.replace('/'); window.location.reload() break; } } }} > {dom} : } {/* 登录 */} setOpenPreview(false)} destroyOnClose maskClosable={false} style={{ minWidth: 540 }} > { console.log(isLogin) setOpenPreview(isLogin) }}> ); } } }; }; export const onRouteChange = ({ location }) => { localStorage.setItem('path', location.pathname) let routes_idx = findAccessIndex(routes, location?.pathname) if (routes_idx) { localStorage.setItem('idx', routes_idx.parentIndex.toString()) } } export const request: RequestConfig = { baseURL: baseUrl, errorConfig: { // 错误抛出 errorThrower: (res) => { const { success, data, errorCode, errorMessage, showType } = res; if (!success) { } }, }, // 配置请求头 requestInterceptors: [ (config: object) => { // 拦截请求配置,进行个性化处理。 const token = localStorage.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) localStorage.clear(); history.push('/talent/home'); window.location.reload() 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) } case 601: if (data.errors && Object.keys(data.errors).length > 0) { msgModel(data.errors, data.code) } else { msgModel(data.msg, data.code) } default: } return response; } ] }