index.jsx 7.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236
  1. import {
  2. AlipayCircleOutlined,
  3. LockOutlined,
  4. MobileOutlined,
  5. TaobaoCircleOutlined,
  6. UserOutlined,
  7. WeiboCircleOutlined,
  8. } from '@ant-design/icons';
  9. import { Alert, message,notification} from 'antd';
  10. import React, { useState, useEffect } from 'react';
  11. import ProForm, { ProFormCaptcha, ProFormCheckbox, ProFormText, ProFormDependency, ProFormSelect } from '@ant-design/pro-form';
  12. import { useIntl, Link, history, FormattedMessage, SelectLang, useModel } from 'umi';
  13. import Footer from '@/components/Footer';
  14. import { login, getSubHosp } from '@/services/user';
  15. import { getFakeCaptcha } from '@/services/ant-design-pro/login';
  16. import styles from './index.less';
  17. import CustomDialog from '@/components/Dialog';
  18. import { getQueryString } from '../../../utils.js';
  19. const LoginMessage = ({ content }) => (
  20. <Alert
  21. style={{
  22. marginBottom: 24,
  23. }}
  24. message={content}
  25. type="error"
  26. showIcon
  27. />
  28. );
  29. const Login = () => {
  30. const [submitting, setSubmitting] = useState(false);
  31. const [userLoginState, setUserLoginState] = useState({});
  32. const [type, setType] = useState('account');
  33. const [subHospList, setSubHospList] = useState([]);
  34. const { initialState, setInitialState } = useModel('@@initialState');
  35. const intl = useIntl();
  36. // const fetchUserInfo = async () => {
  37. // const userInfo = await initialState?.fetchUserInfo?.();
  38. // console.log({userInfo});
  39. // if (userInfo) {
  40. // await setInitialState((s) => ({ ...s, currentUser: userInfo }));
  41. // }
  42. // };
  43. const { fetchSubHosp, sign } = initialState;
  44. const handleSubmit = async (values) => {
  45. setSubmitting(true);
  46. try {
  47. // 登录
  48. const loginResp = await login({ ...values, hospSign: sign });
  49. const {status,msg,data} = loginResp;
  50. // console.log({status,msg,data});
  51. if (status == 200) {
  52. const defaultloginSuccessMessage = intl.formatMessage({
  53. id: 'pages.login.success',
  54. defaultMessage: '登录成功!',
  55. });
  56. if (localStorage.getItem('userData') == null || localStorage.getItem('userData') == undefined) {
  57. localStorage.setItem('userData',null);
  58. }
  59. if (localStorage.getItem('loginParams') == null || localStorage.getItem('loginParams') == undefined) {
  60. localStorage.setItem('loginParams',null);
  61. }
  62. localStorage.setItem('loginParams',JSON.stringify({hospSign:sign}));
  63. localStorage.setItem('userData',JSON.stringify(data));
  64. message.success(defaultloginSuccessMessage);
  65. await setInitialState((s) => ({ ...s, currentUser:data }));
  66. /** 此方法会跳转到 redirect 参数所在的位置 */
  67. if (!history) return;
  68. const { query } = history.location;
  69. const { redirect } = query;
  70. history.push(redirect || '/');
  71. return;
  72. }else {
  73. notification.error({
  74. message:msg
  75. })
  76. }
  77. setUserLoginState(data);
  78. } catch (error) {
  79. console.log({error});
  80. const defaultloginFailureMessage = intl.formatMessage({
  81. id: 'pages.login.failure',
  82. defaultMessage: '登录失败,请重试!',
  83. });
  84. message.error(defaultloginFailureMessage);
  85. }
  86. setSubmitting(false);
  87. };
  88. //登录类型
  89. const { status, type: loginType } = userLoginState;
  90. useEffect(() => {
  91. fetchSubHosp().then(res => {
  92. if (res&&res.success) {
  93. const temp = res.map(item => ({
  94. 'value': item.id,
  95. 'label': item.name
  96. }))
  97. setSubHospList(temp);
  98. }
  99. })
  100. }, []);
  101. return (
  102. <div className={styles.container}>
  103. <div className={styles.content}>
  104. <div className={styles.top}>
  105. <div className={styles.header}>
  106. <Link to="/">
  107. <img alt="logo" className={styles.logo} src="/KC-color.png" />
  108. <span className={styles.title}>全成本核算管理系统</span>
  109. </Link>
  110. </div>
  111. </div>
  112. <div className={styles.main}>
  113. <ProForm
  114. initialValues={{
  115. autoLogin: true,
  116. }}
  117. submitter={{
  118. searchConfig: {
  119. submitText: intl.formatMessage({
  120. id: 'pages.login.submit',
  121. defaultMessage: '登录',
  122. }),
  123. },
  124. render: (_, dom) => dom.pop(),
  125. submitButtonProps: {
  126. loading: submitting,
  127. size: 'large',
  128. style: {
  129. width: '100%',
  130. },
  131. },
  132. }}
  133. onFinish={async (values) => {
  134. handleSubmit(values);
  135. }}
  136. >
  137. {status === 'error' && loginType === 'account' && (
  138. <LoginMessage
  139. content={intl.formatMessage({
  140. id: 'pages.login.accountLogin.errorMessage',
  141. defaultMessage: '账户或密码错误!',
  142. })}
  143. />
  144. )}
  145. {type === 'account' && (
  146. <>
  147. <ProFormText
  148. name="account"
  149. fieldProps={{
  150. size: 'large',
  151. prefix: <UserOutlined className={styles.prefixIcon} />,
  152. }}
  153. placeholder={'用户名:'}
  154. rules={[
  155. {
  156. required: true,
  157. message: (
  158. <FormattedMessage
  159. id="pages.login.username.required"
  160. defaultMessage="请输入用户名!"
  161. />
  162. ),
  163. },
  164. ]}
  165. />
  166. <ProFormText.Password
  167. name="password"
  168. fieldProps={{
  169. size: 'large',
  170. prefix: <LockOutlined className={styles.prefixIcon} />,
  171. }}
  172. placeholder={'密码:'}
  173. rules={[
  174. {
  175. required: true,
  176. message: (
  177. <FormattedMessage
  178. id="pages.login.password.required"
  179. defaultMessage="请输入密码!"
  180. />
  181. ),
  182. },
  183. ]}
  184. />
  185. </>
  186. )}
  187. <ProFormDependency name={['name', ['name2', 'text']]}>
  188. {({ name, name2 }) => {
  189. return (
  190. <ProFormSelect
  191. options={
  192. subHospList
  193. }
  194. width="md"
  195. name="useMode"
  196. label='请选择分院'
  197. />
  198. );
  199. }}
  200. </ProFormDependency>
  201. <div
  202. style={{
  203. marginBottom: 24,
  204. }}
  205. >
  206. </div>
  207. </ProForm>
  208. </div>
  209. </div>
  210. <Footer />
  211. </div>
  212. );
  213. };
  214. export default Login;