index.tsx 8.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191
  1. /*
  2. * @Author: your name
  3. * @Date: 2021-11-09 14:58:08
  4. * @LastEditTime: 2021-11-19 16:42:22
  5. * @LastEditors: Please set LastEditors
  6. * @Description: 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
  7. * @FilePath: /KC-MiddlePlatform/src/pages/login/index.tsx
  8. */
  9. import React, { useRef, useEffect, useState } from 'react'
  10. import { Select, message } from 'antd';
  11. import './style.less'
  12. import { useModel, history } from 'umi';
  13. import { Form, Input, Button, Checkbox } from 'antd';
  14. import logo from '../../../public/images/kc-logo.png'
  15. import KCSelect from '@/components/kc-select';
  16. import { getSubHosp, login,getHospSubSystemList } from '@/service/login';
  17. const { Option } = Select;
  18. const LoginPage: React.FC<any> = () => {
  19. const [transitionObj, setTransitionObj] = useState<string>();
  20. const [transformObj, setTransformObj] = useState<string>();
  21. const loginPageRef = useRef<HTMLDivElement>(null);
  22. const [subHospList, setSubHospList] = useState<{ name: string, value: string | number }[]>([]); //分院列表
  23. const [ifSelectSystem,setIfSelectSystem] = useState(false); //是否跳转到选择系统界面
  24. const [ifLoading,setIfLoading] = useState(false);
  25. const [systemList,setSystemList] = useState<SystemListItem[]>([]); //可选平台列表
  26. const { initialState, setInitialState } = useModel('@@initialState');
  27. const onMouseMoveHandle = (mouseEvent: any) => {
  28. // console.log({mouseEvent});
  29. const loginPage = loginPageRef.current;
  30. if (loginPage) {
  31. let centerX = loginPage.offsetLeft + loginPage.offsetWidth / 2, //div中心点到页面左边距离
  32. centerY = loginPage.offsetTop + loginPage.offsetHeight / 2;
  33. let deltaX = mouseEvent.pageX - centerX,
  34. deltaY = mouseEvent.pageY - centerY;
  35. let percentageX = deltaX / centerX, //向左或向右的 偏差率
  36. percentageY = deltaY / centerY;
  37. let deg = 20; //控制 偏差的 程度
  38. // console.log(percentageX*20,percentageY*20);
  39. setTransformObj(`translate(${percentageX * deg}px,${percentageY * deg}px)`);
  40. // setTransformObj('rotateX(' + percentageY * deg + 'deg)');
  41. }
  42. }
  43. const onMouseLeaveHandle = () => {
  44. setTransformObj(`translate(0px,0px)`);
  45. setTransitionObj('all 0.2s linear');
  46. }
  47. const getSubHospFunc = async () => {
  48. const { list } = await getSubHosp();
  49. setSubHospList(list);
  50. }
  51. const getHospSubSystemListFunc = async ()=>{
  52. const data = await getHospSubSystemList();
  53. if(data)setSystemList(data);
  54. }
  55. const onFinish = async (values:LoginPageTypes.LoginInfo) => {
  56. setIfLoading(true);
  57. const resp = await login(values);
  58. setIfLoading(false);
  59. if (resp) {
  60. message.success('登录成功!');
  61. await getHospSubSystemListFunc();
  62. await setInitialState((s) => ({ ...s, userData: resp,systemLists:systemList }));
  63. localStorage.setItem('KC-MiddlePlatformUserData', JSON.stringify(resp));
  64. if(systemList.length>1){
  65. //当前医院拥有多个子平台时,进入选择
  66. setIfSelectSystem(true);
  67. }else {
  68. //否则直接进入首页
  69. const { query } = history.location;
  70. const { redirect } = query as { redirect: string };
  71. history.push(redirect || '/');
  72. return;
  73. }
  74. setIfLoading(false);
  75. }
  76. }
  77. const selectSysHandle = (systemInfo:LoginPageTypes.SystemListItem)=>{
  78. const { query } = history.location;
  79. const { redirect } = query as { redirect: string };
  80. history.push(redirect || '/');
  81. }
  82. useEffect(() => {
  83. //根据hospSign获取分院信息
  84. getSubHospFunc();
  85. }, []);
  86. return (
  87. <div className='loginPage' onMouseMove={onMouseMoveHandle} onMouseLeave={onMouseLeaveHandle} ref={loginPageRef}>
  88. <div className='circleBigOne' style={{ transform: transformObj, transition: transitionObj }}></div>
  89. <div className='circleBigerOne' ></div>
  90. <div className='circleLittleOne' style={{ transform: transformObj, transition: transitionObj }}></div>
  91. <div className='loginBlock'>
  92. {
  93. ifSelectSystem ? (
  94. <div className='systemSelector'>
  95. {
  96. systemList.map((t)=>(
  97. <div className='sysItem' key={t.id} onClick={()=>selectSysHandle(t)}>
  98. <img className='icon' src={t.icon} alt="" />
  99. <span className='sysName'>{t.name}</span>
  100. </div>
  101. ))
  102. }
  103. </div>
  104. ) : (
  105. <>
  106. <div className='left'>
  107. <img className='bannerImg' src={require('../../../public/images/loginBannner.png')} />
  108. </div>
  109. <div className='rightLoginArea'>
  110. <div className='subHospSelector'>
  111. {
  112. subHospList.length > 0 && (
  113. <KCSelect allowClear={false} style={{ width: 200 }} defaultValue={subHospList[0].value} suffixIcon={<img style={{ width: '10px', height: '6px' }} src={require('../../../public/images/arrow.png')} />}>
  114. {
  115. subHospList.map(item => {
  116. return (
  117. <Option value={item.value} key={item.value}>{item.name}</Option>
  118. )
  119. })
  120. }
  121. </KCSelect>
  122. )
  123. }
  124. </div>
  125. <div className='systemName'>欢迎进入医务管理系统</div>
  126. <Form
  127. onFinish={onFinish}
  128. >
  129. <Form.Item
  130. name="account"
  131. rules={[{ required: true, message: 'Please input your username!' }]}
  132. >
  133. <Input className='input' />
  134. </Form.Item>
  135. <Form.Item
  136. name="password"
  137. rules={[{ required: true, message: 'Please input your password!' }]}
  138. >
  139. <Input.Password className='input' />
  140. </Form.Item>
  141. <Form.Item >
  142. <Button className='loginBtn' type="primary" htmlType="submit" loading={ifLoading} >
  143. 登录
  144. </Button>
  145. </Form.Item>
  146. <Form.Item name="remember" valuePropName="checked">
  147. <Checkbox className='checkBtn'>记住密码</Checkbox>
  148. </Form.Item>
  149. </Form>
  150. </div>
  151. </>
  152. )
  153. }
  154. </div>
  155. <div className='bottomLogo'>
  156. <img className='logo' src={logo} />
  157. <div className='copyright'>© 2021 康程智医(成都)技术部出品</div>
  158. </div>
  159. </div>
  160. )
  161. }
  162. export default LoginPage;