// 运行时配置 import type { RequestConfig } from 'umi'; import { queryCurrent, queryAccess } from '@/Project/services/user'; import { STORAGE_TYPE, LocalService } from './Frameworks/SysStorage'; import { message } from 'antd'; // 全局初始化数据配置,用于 Layout 用户信息和权限初始化 // 更多信息见文档:https://next.umijs.org/docs/api/runtime-config#getinitialstate export async function getInitialState(): Promise { let currentUser = {}, access = {}; let app = window.GT_APP; // 非登录页获取用户信息 if (app?.isActive && !app.funcLogin.IsActive) { try { currentUser = (await queryCurrent()).data; } catch (error) {} try { access = await queryAccess(46); } catch (error) {} } return { currentUser, access, projectId: 46 }; } // axios配置 export const request: RequestConfig = { errorConfig: { errorThrower(res: Api.IResponseStructure) { // const { data, code, msg } = res; // if (code !== 200) { // const error: any = new Error(msg); // error.name = 'AjaxError'; // error.info = { code, msg, data }; // throw error; // } console.log('errorThrower', res); }, errorHandler(error: any, opts: any) { if (opts?.skipErrorHandler) throw error; // 我们的 errorThrower 抛出的错误。 if (error.name === 'AjaxError') { const errorInfo: Api.IResponseStructure | undefined = error.info; const inLoginPage = window.GT_APP.funcLogin.IsActive; if (!inLoginPage && errorInfo) { message.error(errorInfo.msg || errorInfo.data); } } else if (error.response) { // Axios 的错误 // 请求成功发出且服务器也响应了状态码,但状态代码超出了 2xx 的范围 message.error(`网络连接错误,请稍后重试(${error.response.status})`); } else if (error.request) { // 请求已经成功发起,但没有收到响应 // \`error.request\` 在浏览器中是 XMLHttpRequest 的实例, // 而在node.js中是 http.ClientRequest 的实例 message.error('网络连接错误,请稍后重试(服务器未返回数据)。'); } else { // 发送请求时出了点问题 message.error('网络连接错误,请稍后重试(请求发送失败)。'); } }, }, requestInterceptors: [ (config: any) => { if (!config.headers) config.headers = {}; config.headers['JWT-TOKEN'] = LocalService.getItem(STORAGE_TYPE.token); return config; }, ], responseInterceptors: [ (res) => { const resData = res.data as Api.IResponseStructure; const { code, msg, data } = resData; if (code !== 200) { const error: any = new Error(msg); error.name = 'AjaxError'; error.info = { code, msg, data }; throw error; } return res; }, ], };