import { PageLoading } from '@ant-design/pro-layout'; import { notification,Modal,message } from 'antd'; import { history, Link ,useModel} from 'umi'; import RightContent from '@/components/RightContent'; import Footer from '@/components/Footer'; import { currentUser as queryCurrentUser,outLogin } from './services/ant-design-pro/api'; import { BookOutlined, LinkOutlined } from '@ant-design/icons'; import {getQueryString} from './utils'; import { stringify } from 'querystring'; import {getSubHosp} from './services/user'; const defaultMenus = [ { path: '/', name: 'welcome', icon: 'smile', children: [ { path: '/welcome', name: 'one', icon: 'smile', children: [ { path: '/welcome/welcome', name: 'two', icon: 'smile', exact: true, }, ], }, ], }, { path: '/responsibilityCenter', name: 'demo', icon: 'heart', }, ]; const isDev = process.env.NODE_ENV === 'development'; const loginPath = '/user/login'; let requestMethod = 'get'; /** 获取用户信息比较慢的时候会展示一个 loading */ export const initialStateConfig = { loading: , }; /** * @see https://umijs.org/zh-CN/plugins/plugin-initial-state * */ export async function getInitialState() { const fetchUserInfo = async () => { const userData = localStorage.getItem('userData'); if(userData){ return JSON.parse(userData); } return undefined; }; // 如果是登录页面,不执行 //医院标识 const sign = getQueryString('hospSign'); const fetchSubHosp = async ()=>{ // try { // const msg = await getSubHosp(sign); // } catch (error) { // } } if (history.location.pathname !== loginPath) { const currentUser = await fetchUserInfo(); return { fetchUserInfo, currentUser, settings: {}, isExpired:false, fetchSubHosp, sign }; } return { fetchUserInfo, settings: {}, fetchSubHosp, sign }; } /** * 退出登录,并且将当前的 url 保存 */ const loginOut = async () => { // await outLogin(); const { query = {}, pathname } = history.location; const { redirect,hospSign } = query; // Note: There may be security issues, please note const loginParams = localStorage.getItem('loginParams'); let sign; if(loginParams){ const {hospSign,hospId} = JSON.parse(loginParams); sign = hospSign; } // &hospSign=${sign} // console.log({redirect,hospSign}) if (window.location.pathname !== `/user/login` && !redirect) { history.replace({ pathname: `/user/login`, search: stringify({ redirect: pathname, hospSign:sign }), }); } }; /** * 异常处理程序 200: '服务器成功返回请求的数据。', 201: '新建或修改数据成功。', 202: '一个请求已经进入后台排队(异步任务)。', 204: '删除数据成功。', 400: '发出的请求有错误,服务器没有进行新建或修改数据的操作。', 401: '用户没有权限(令牌、用户名、密码错误)。', 403: '用户得到授权,但是访问是被禁止的。', 404: '发出的请求针对的是不存在的记录,服务器没有进行操作。', 405: '请求方法不被允许。', 406: '请求的格式不可得。', 410: '请求的资源被永久删除,且不会再得到的。', 422: '当创建一个对象时,发生一个验证错误。', 500: '服务器发生错误,请检查服务器。', 502: '网关错误。', 503: '服务不可用,服务器暂时过载或维护。', 504: '网关超时。', //-----English 200: The server successfully returned the requested data. ', 201: New or modified data is successful. ', 202: A request has entered the background queue (asynchronous task). ', 204: Data deleted successfully. ', 400: 'There was an error in the request sent, and the server did not create or modify data. ', 401: The user does not have permission (token, username, password error). ', 403: The user is authorized, but access is forbidden. ', 404: The request sent was for a record that did not exist. ', 405: The request method is not allowed. ', 406: The requested format is not available. ', 410': 'The requested resource is permanently deleted and will no longer be available. ', 422: When creating an object, a validation error occurred. ', 500: An error occurred on the server, please check the server. ', 502: Gateway error. ', 503: The service is unavailable. ', 504: The gateway timed out. ', * @see cd */ //请求拦截器 const authHeaderInterceptor = (url, options) => { console.log({options}); const {method} = options; if(method == 'post'){ requestMethod='post' }else{ requestMethod='get' } const userData = localStorage.getItem('userData'); let authHeader = {}; if(userData){ const {token} = JSON.parse(userData); authHeader.token = token; } return { url: `${url}`, options: { ...options, interceptors: true, headers: authHeader }, }; }; //响应拦截器 const demoResponseInterceptors = async (response, options) => { // response.headers.append('interceptors', 'yes yo'); // console.log({response}); const {status} = response; if(status != 200){ if(status == 500){ notification.error({ message: '抱歉,服务器出现错误!' }); } if(status == 404){ notification.error({ message: '抱歉,服务器未找到请求!' }); } return {}; } const _response = await response.clone().json(); const {status:dataStatus,msg,errorMessage,errorCode} = _response; //success返回 if(dataStatus == 200){ if(requestMethod=='post'&&history.location.pathname != loginPath){ message.success('操作成功!'); } return response; }else{ if(errorCode==499){ // setInitialState((s) => ({ ...s, isExpired:true})); Modal.confirm({ title:'抱歉,登录已过期请重新登录!', onOk:()=>{ loginOut(); } }); }else{ notification.error({ message:errorMessage, duration: 5, }); } return {} } } export const request = { errorHandler: (error) => { console.log({error}); const { response } = error; if (!response) { notification.error({ description: '您的网络发生异常,无法连接服务器', message: '网络异常', }); } throw error; }, // 新增自动添加AccessToken的请求前拦截器 requestInterceptors: [authHeaderInterceptor], responseInterceptors: [demoResponseInterceptors], }; // ProLayout 支持的api https://procomponents.ant.design/components/layout export const layout = ({ initialState }) => { return { rightContentRender: () => , disableContentMargin: false, waterMarkProps: { content:'', }, footerRender: () =>