Du kannst nicht mehr als 25 Themen auswählen Themen müssen mit entweder einem Buchstaben oder einer Ziffer beginnen. Sie können Bindestriche („-“) enthalten und bis zu 35 Zeichen lang sein.

vor 9 Monaten
vor 9 Monaten
vor 9 Monaten
vor 9 Monaten
vor 9 Monaten
vor 9 Monaten
vor 9 Monaten
vor 8 Monaten
vor 8 Monaten
vor 9 Monaten
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175
  1. import type { RequestConfig } from "@umijs/max";
  2. import { message, Modal, Dropdown, MenuProps, theme } from "antd";
  3. import { BulbOutlined, LogoutOutlined } from '@ant-design/icons';
  4. import routes from '../config/routes'
  5. import { history } from '@umijs/max';
  6. import {
  7. ProBreadcrumb,
  8. } from '@ant-design/pro-components';
  9. import { GetUserMenulist } from '@/apis/api';
  10. export async function getInitialState(): Promise<{ permissions: object[] }> {
  11. const token = sessionStorage.getItem('token');
  12. let permissions = [];
  13. if (!token) {
  14. sessionStorage.clear();
  15. history.push('/login');
  16. return { permissions };
  17. }
  18. try {
  19. const res = await GetUserMenulist();
  20. permissions = flattenPermissions(res.data.menulist);
  21. } catch (error) {
  22. console.error('Failed to fetch user permissions:', error);
  23. }
  24. if (permissions.length === 0) {
  25. history.push('/login');
  26. }
  27. return { permissions };
  28. }
  29. function flattenPermissions(permissions: { id: number; action: string; childs?: { id: number; action: string }[] }[]): string[] {
  30. const flattenedPermissions: string[] = [];
  31. permissions.forEach(permission => {
  32. flattenedPermissions.push(permission.action);
  33. if (permission.childs) {
  34. flattenedPermissions.push(...flattenPermissions(permission.childs));
  35. }
  36. });
  37. return flattenedPermissions;
  38. }
  39. export const layout = () => {
  40. return {
  41. name: '菊城人才市场',
  42. logo: '/images/logo_1.jpg',
  43. // copy from pro site
  44. navTheme: 'dark',
  45. primaryColor: '#1890ff',
  46. layout: 'mix',
  47. contentWidth: 'Fluid',
  48. fixedHeader: true,
  49. fixSiderbar: true,
  50. // splitMenus: true,
  51. siderWidth: 240,
  52. title: '菊城人才市场',
  53. pwa: false,
  54. iconfontUrl: '',
  55. headerContentRender: () => (<> <ProBreadcrumb /></>),
  56. avatarProps: {
  57. src: 'https://gw.alipayobjects.com/zos/antfincdn/efFD%24IOql2/weixintupian_20170331104822.jpg',
  58. size: 'small',
  59. title: '管理员',
  60. render: (props, dom) => {
  61. return (
  62. <Dropdown
  63. menu={{
  64. items: [
  65. {
  66. key: 'logout',
  67. icon: <LogoutOutlined />,
  68. label: '退出登录',
  69. }
  70. ],
  71. onClick: ({ key }) => {
  72. sessionStorage.clear();
  73. history.replace('/login');
  74. }
  75. }}
  76. >
  77. {dom}
  78. </Dropdown>
  79. );
  80. }
  81. },
  82. token: {
  83. sider: {
  84. //侧边菜单的配置 ,这里具体看文档
  85. colorBgMenuItemSelected: '#19be6e',
  86. colorTextMenuItemSelected: '#ffffff',
  87. },
  88. },
  89. };
  90. };
  91. export function onRouteChange({
  92. location,
  93. }) {
  94. sessionStorage.setItem('path', location.pathname)
  95. }
  96. console.log(2313,process.env.NODE_ENV)
  97. const baseUrl = process.env.NODE_ENV == 'production' ? 'https://admin1.jcjob.cn/api' : 'https://rcsc-test.jcjob.cn/api'
  98. export const request: RequestConfig = {
  99. baseURL: baseUrl,
  100. errorConfig: {
  101. // 错误抛出
  102. errorThrower: (res) => {
  103. const { success, data, errorCode, errorMessage, showType } = res;
  104. if (!success) {
  105. }
  106. },
  107. },
  108. // 配置请求头
  109. requestInterceptors: [
  110. (config: object) => {
  111. // 拦截请求配置,进行个性化处理。
  112. const token = sessionStorage.getItem('token');
  113. if (token) {
  114. config.headers.Authorization = `${token}`;
  115. }
  116. return config;
  117. },
  118. ],
  119. // 配置响应拦截
  120. responseInterceptors: [
  121. (response) => {
  122. const msgModel = (val: String, code: number) => {
  123. Modal.error({
  124. title: val,
  125. centered: true
  126. });
  127. }
  128. // 拦截响应数据,进行个性化处理
  129. const { data } = response;
  130. switch (data.code) {
  131. case -1:
  132. msgModel(data.msg, data.code)
  133. break;
  134. case 0:
  135. break;
  136. case 1:
  137. return response;
  138. break;
  139. case 401:
  140. msgModel(data.msg, data.code)
  141. sessionStorage.clear();
  142. history.push('/login');
  143. break;
  144. case 403:
  145. msgModel(data.msg, data.code)
  146. break;
  147. case 404:
  148. break;
  149. case 600:
  150. if (data.errors && Object.keys(data.errors).length > 0) {
  151. msgModel(data.errors, data.code)
  152. } else {
  153. msgModel(data.msg, data.code)
  154. }
  155. }
  156. return response;
  157. }
  158. ]
  159. }