app.tsx 5.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211
  1. import { PageLoading } from '@ant-design/pro-layout';
  2. import { history, useModel } from 'umi';
  3. import { checkToken, reFreshCheckToken, queryUser } from '@/services/sagacare_service/environment';
  4. import { projectObj } from '@/config/api.js';
  5. import { decrypt, deal_locationsearch } from '@/config/screate.js';
  6. import UserStorage from '@/config/sagacare/sagacare_user';
  7. const loginPath = '/noAuth';
  8. /** 获取用户信息比较慢的时候会展示一个 loading */
  9. export const initialStateConfig = {
  10. loading: <PageLoading />,
  11. };
  12. /**
  13. * @see https://umijs.org/zh-CN/plugins/plugin-initial-state
  14. * */
  15. export async function getInitialState(): Promise<{
  16. // settings?: Partial<LayoutSettings>;
  17. currentUser?: API.CurrentUser;
  18. fetchUser?: () => Promise<API.CurrentUser | undefined>;
  19. //loading?: boolean;
  20. //fetchUserInfo?: () => Promise<API.CurrentUser | undefined>;
  21. }> {
  22. const { location } = history;
  23. let currentUser = {};
  24. let access_token: any = location.query.access_token;
  25. let refresh_token: any = location.query.refresh_token;
  26. var dealRes = deal_locationsearch();
  27. var persagyToken = dealRes[0];
  28. let deCode = decodeURIComponent(persagyToken);
  29. let userName = persagyToken && decrypt(deCode);
  30. //如果有值 存起来
  31. if (access_token) {
  32. localStorage.setItem('access_token', access_token);
  33. }
  34. if (refresh_token) {
  35. localStorage.setItem('refresh_token', refresh_token);
  36. }
  37. const fetchUser = async () => {
  38. try {
  39. access_token = localStorage.getItem('access_token');
  40. //if (!access_token) return; //随后去掉
  41. //验证acces_token 获取用户数据
  42. const res = await checkToken({ token: access_token });
  43. var resUser = res.data;
  44. } catch (err) {
  45. history.push(loginPath);
  46. }
  47. if (resUser) {
  48. //获取用户信息 并储存
  49. var userObj = UserStorage.getInstance();
  50. userObj.setUser(resUser);
  51. return resUser;
  52. } else {
  53. // history.push(loginPath);
  54. return undefined;
  55. }
  56. };
  57. const queryUserFunc = async () => {
  58. try {
  59. //验证acces_token 获取用户数据
  60. const res2 = await queryUser({ criteria: { username: userName } });
  61. var resUser = res2.content[0];
  62. } catch (err) {
  63. history.push(loginPath);
  64. }
  65. if (resUser) {
  66. //获取用户信息 并储存
  67. var userObj = UserStorage.getInstance();
  68. userObj.setUser(resUser);
  69. return resUser;
  70. } else {
  71. history.push(loginPath);
  72. return undefined;
  73. }
  74. };
  75. //projectId = 'Pj1101080259';
  76. if (projectObj.projectId == 'Pj3301100002') {
  77. //之江项目 验证token
  78. if (userName) {
  79. currentUser = await queryUserFunc();
  80. } else {
  81. history.push(loginPath);
  82. }
  83. } else {
  84. //非之江项目
  85. let tempUser = {
  86. name: '行政测试',
  87. phone: '17611228068',
  88. id: '9a1ecfbacb6b4f249bf2dd3ec7793ead',
  89. };
  90. var userObj = UserStorage.getInstance();
  91. userObj.setUser(tempUser);
  92. }
  93. const reFreshUser = async () => {
  94. refresh_token = localStorage.getItem('refresh_token');
  95. //刷新token 续约token
  96. const res = await reFreshCheckToken({
  97. zjfreshtoken: refresh_token,
  98. });
  99. if (res.refresh_token) {
  100. console.log('refresh_token', res.refresh_token);
  101. localStorage.setItem('refresh_token', res.refresh_token);
  102. localStorage.setItem('access_token', res.access_token);
  103. } else {
  104. //如果刷新token失败
  105. //history.push(loginPath);
  106. }
  107. //1分钟后再执行
  108. setTimeout(() => {
  109. // reFreshUser();
  110. }, 60000);
  111. };
  112. return {
  113. currentUser,
  114. fetchUser,
  115. };
  116. }
  117. export const request = {
  118. requestInterceptors: [
  119. (url: any, options: any) => {
  120. return {
  121. url,
  122. options: {
  123. ...options,
  124. interceptors: true,
  125. },
  126. };
  127. },
  128. ],
  129. responseInterceptors: [
  130. async (response: any) => {
  131. return response;
  132. },
  133. ],
  134. errorHandler: (error: any) => {
  135. const { response } = error;
  136. if (!response) {
  137. // message.error('您的网络发生异常,无法连接服务器');
  138. }
  139. throw error;
  140. },
  141. };
  142. // ProLayout 支持的api https://procomponents.ant.design/components/layout
  143. // export const layout: RunTimeLayoutConfig = ({ initialState, setInitialState }) => {
  144. // return {
  145. // rightContentRender: () => <RightContent />,
  146. // disableContentMargin: false,
  147. // waterMarkProps: {
  148. // content: initialState?.currentUser?.name,
  149. // },
  150. // footerRender: () => <Footer />,
  151. // onPageChange: () => {
  152. // const { location } = history;
  153. // // 如果没有登录,重定向到 login
  154. // if (!initialState?.currentUser && location.pathname !== loginPath) {
  155. // history.push(loginPath);
  156. // }
  157. // },
  158. // links: isDev
  159. // ? [
  160. // <Link to="/umi/plugin/openapi" target="_blank">
  161. // <LinkOutlined />
  162. // <span>OpenAPI 文档</span>
  163. // </Link>,
  164. // <Link to="/~docs">
  165. // <BookOutlined />
  166. // <span>业务组件文档</span>
  167. // </Link>,
  168. // ]
  169. // : [],
  170. // menuHeaderRender: undefined,
  171. // // 自定义 403 页面
  172. // // unAccessible: <div>unAccessible</div>,
  173. // // 增加一个 loading 的状态
  174. // childrenRender: (children, props) => {
  175. // // if (initialState?.loading) return <PageLoading />;
  176. // return (
  177. // <>
  178. // {children}
  179. // {!props.location?.pathname?.includes('/login') && (
  180. // <SettingDrawer
  181. // enableDarkTheme
  182. // settings={initialState?.settings}
  183. // onSettingChange={(settings) => {
  184. // setInitialState((preInitialState) => ({
  185. // ...preInitialState,
  186. // settings,
  187. // }));
  188. // }}
  189. // />
  190. // )}
  191. // </>
  192. // );
  193. // },
  194. // ...initialState?.settings,
  195. // };
  196. // };