|
@@ -1,191 +1,229 @@
|
|
|
/*
|
|
|
* @Author: your name
|
|
|
* @Date: 2021-11-09 14:58:08
|
|
|
- * @LastEditTime: 2021-11-19 16:42:22
|
|
|
+ * @LastEditTime: 2021-12-16 15:17:06
|
|
|
* @LastEditors: Please set LastEditors
|
|
|
* @Description: 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
|
|
|
* @FilePath: /KC-MiddlePlatform/src/pages/login/index.tsx
|
|
|
*/
|
|
|
|
|
|
-
|
|
|
-import React, { useRef, useEffect, useState } from 'react'
|
|
|
+import React, { useRef, useEffect, useState } from 'react';
|
|
|
import { Select, message } from 'antd';
|
|
|
-import './style.less'
|
|
|
+import './style.less';
|
|
|
|
|
|
import { useModel, history } from 'umi';
|
|
|
|
|
|
import { Form, Input, Button, Checkbox } from 'antd';
|
|
|
|
|
|
-import logo from '../../../public/images/kc-logo.png'
|
|
|
+import logo from '../../../public/images/kc-logo.png';
|
|
|
|
|
|
import KCSelect from '@/components/kc-select';
|
|
|
|
|
|
-import { getSubHosp, login,getHospSubSystemList } from '@/service/login';
|
|
|
+import { getSubHosp, login, getHospSubSystemList } from '@/service/login';
|
|
|
|
|
|
const { Option } = Select;
|
|
|
|
|
|
const LoginPage: React.FC<any> = () => {
|
|
|
- const [transitionObj, setTransitionObj] = useState<string>();
|
|
|
- const [transformObj, setTransformObj] = useState<string>();
|
|
|
- const loginPageRef = useRef<HTMLDivElement>(null);
|
|
|
- const [subHospList, setSubHospList] = useState<{ name: string, value: string | number }[]>([]); //分院列表
|
|
|
- const [ifSelectSystem,setIfSelectSystem] = useState(false); //是否跳转到选择系统界面
|
|
|
- const [ifLoading,setIfLoading] = useState(false);
|
|
|
- const [systemList,setSystemList] = useState<SystemListItem[]>([]); //可选平台列表
|
|
|
- const { initialState, setInitialState } = useModel('@@initialState');
|
|
|
-
|
|
|
-
|
|
|
- const onMouseMoveHandle = (mouseEvent: any) => {
|
|
|
- // console.log({mouseEvent});
|
|
|
- const loginPage = loginPageRef.current;
|
|
|
- if (loginPage) {
|
|
|
- let centerX = loginPage.offsetLeft + loginPage.offsetWidth / 2, //div中心点到页面左边距离
|
|
|
- centerY = loginPage.offsetTop + loginPage.offsetHeight / 2;
|
|
|
-
|
|
|
- let deltaX = mouseEvent.pageX - centerX,
|
|
|
- deltaY = mouseEvent.pageY - centerY;
|
|
|
-
|
|
|
- let percentageX = deltaX / centerX, //向左或向右的 偏差率
|
|
|
- percentageY = deltaY / centerY;
|
|
|
- let deg = 20; //控制 偏差的 程度
|
|
|
- // console.log(percentageX*20,percentageY*20);
|
|
|
- setTransformObj(`translate(${percentageX * deg}px,${percentageY * deg}px)`);
|
|
|
- // setTransformObj('rotateX(' + percentageY * deg + 'deg)');
|
|
|
- }
|
|
|
-
|
|
|
- }
|
|
|
-
|
|
|
- const onMouseLeaveHandle = () => {
|
|
|
- setTransformObj(`translate(0px,0px)`);
|
|
|
- setTransitionObj('all 0.2s linear');
|
|
|
+ const [transitionObj, setTransitionObj] = useState<string>();
|
|
|
+ const [transformObj, setTransformObj] = useState<string>();
|
|
|
+ const loginPageRef = useRef<HTMLDivElement>(null);
|
|
|
+ const [subHospList, setSubHospList] = useState<
|
|
|
+ { name: string; value: string | number }[]
|
|
|
+ >([]); //分院列表
|
|
|
+ const [ifSelectSystem, setIfSelectSystem] = useState(false); //是否跳转到选择系统界面
|
|
|
+ const [ifLoading, setIfLoading] = useState(false);
|
|
|
+ const [systemList, setSystemList] = useState<SystemListItem[]>([]); //可选平台列表
|
|
|
+ const { setInitialState } = useModel('@@initialState');
|
|
|
+
|
|
|
+ const onMouseMoveHandle = (mouseEvent: any) => {
|
|
|
+ // console.log({mouseEvent});
|
|
|
+ const loginPage = loginPageRef.current;
|
|
|
+ if (loginPage) {
|
|
|
+ let centerX = loginPage.offsetLeft + loginPage.offsetWidth / 2, //div中心点到页面左边距离
|
|
|
+ centerY = loginPage.offsetTop + loginPage.offsetHeight / 2;
|
|
|
+
|
|
|
+ let deltaX = mouseEvent.pageX - centerX,
|
|
|
+ deltaY = mouseEvent.pageY - centerY;
|
|
|
+
|
|
|
+ let percentageX = deltaX / centerX, //向左或向右的 偏差率
|
|
|
+ percentageY = deltaY / centerY;
|
|
|
+ let deg = 20; //控制 偏差的 程度
|
|
|
+ // console.log(percentageX*20,percentageY*20);
|
|
|
+ setTransformObj(
|
|
|
+ `translate(${percentageX * deg}px,${percentageY * deg}px)`,
|
|
|
+ );
|
|
|
+ // setTransformObj('rotateX(' + percentageY * deg + 'deg)');
|
|
|
}
|
|
|
-
|
|
|
- const getSubHospFunc = async () => {
|
|
|
- const { list } = await getSubHosp();
|
|
|
- setSubHospList(list);
|
|
|
- }
|
|
|
-
|
|
|
- const getHospSubSystemListFunc = async ()=>{
|
|
|
- const data = await getHospSubSystemList();
|
|
|
- if(data)setSystemList(data);
|
|
|
- }
|
|
|
-
|
|
|
- const onFinish = async (values:LoginPageTypes.LoginInfo) => {
|
|
|
- setIfLoading(true);
|
|
|
- const resp = await login(values);
|
|
|
- setIfLoading(false);
|
|
|
- if (resp) {
|
|
|
- message.success('登录成功!');
|
|
|
- await getHospSubSystemListFunc();
|
|
|
- await setInitialState((s) => ({ ...s, userData: resp,systemLists:systemList }));
|
|
|
- localStorage.setItem('KC-MiddlePlatformUserData', JSON.stringify(resp));
|
|
|
-
|
|
|
- if(systemList.length>1){
|
|
|
- //当前医院拥有多个子平台时,进入选择
|
|
|
- setIfSelectSystem(true);
|
|
|
- }else {
|
|
|
- //否则直接进入首页
|
|
|
- const { query } = history.location;
|
|
|
- const { redirect } = query as { redirect: string };
|
|
|
- history.push(redirect || '/');
|
|
|
- return;
|
|
|
- }
|
|
|
- setIfLoading(false);
|
|
|
-
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- const selectSysHandle = (systemInfo:LoginPageTypes.SystemListItem)=>{
|
|
|
+ };
|
|
|
+
|
|
|
+ const onMouseLeaveHandle = () => {
|
|
|
+ setTransformObj(`translate(0px,0px)`);
|
|
|
+ setTransitionObj('all 0.2s linear');
|
|
|
+ };
|
|
|
+
|
|
|
+ //获取当前账号分院列表
|
|
|
+ const getSubHospFunc = async () => {
|
|
|
+ const { list } = await getSubHosp();
|
|
|
+ setSubHospList(list);
|
|
|
+ };
|
|
|
+
|
|
|
+ //获取当前账号所有子应用列表
|
|
|
+ const getHospSubSystemListFunc = async (): Promise<SystemListItem[]> => {
|
|
|
+ const data = await getHospSubSystemList();
|
|
|
+ if (data) setSystemList(data);
|
|
|
+ return data;
|
|
|
+ };
|
|
|
+
|
|
|
+ const onFinish = async (values: LoginPageTypes.LoginInfo) => {
|
|
|
+ setIfLoading(true);
|
|
|
+ const resp = await login(values);
|
|
|
+ setIfLoading(false);
|
|
|
+ if (resp) {
|
|
|
+ // message.success('登录成功!');
|
|
|
+ const data = await getHospSubSystemListFunc();
|
|
|
+ await setInitialState((s) => ({
|
|
|
+ ...s,
|
|
|
+ userData: resp,
|
|
|
+ systemLists: data,
|
|
|
+ }));
|
|
|
+ localStorage.setItem('KC-MiddlePlatformUserData', JSON.stringify(resp));
|
|
|
+
|
|
|
+ if (data.length > 1) {
|
|
|
+ //当前医院拥有多个子平台时,进入选择
|
|
|
+ setIfSelectSystem(true);
|
|
|
+ } else {
|
|
|
+ //否则直接进入首页
|
|
|
const { query } = history.location;
|
|
|
const { redirect } = query as { redirect: string };
|
|
|
- history.push(redirect || '/');
|
|
|
+ history.replace(redirect || '/');
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ setIfLoading(false);
|
|
|
}
|
|
|
-
|
|
|
- useEffect(() => {
|
|
|
- //根据hospSign获取分院信息
|
|
|
- getSubHospFunc();
|
|
|
- }, []);
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
- return (
|
|
|
- <div className='loginPage' onMouseMove={onMouseMoveHandle} onMouseLeave={onMouseLeaveHandle} ref={loginPageRef}>
|
|
|
- <div className='circleBigOne' style={{ transform: transformObj, transition: transitionObj }}></div>
|
|
|
- <div className='circleBigerOne' ></div>
|
|
|
- <div className='circleLittleOne' style={{ transform: transformObj, transition: transitionObj }}></div>
|
|
|
- <div className='loginBlock'>
|
|
|
- {
|
|
|
- ifSelectSystem ? (
|
|
|
- <div className='systemSelector'>
|
|
|
- {
|
|
|
- systemList.map((t)=>(
|
|
|
- <div className='sysItem' key={t.id} onClick={()=>selectSysHandle(t)}>
|
|
|
- <img className='icon' src={t.icon} alt="" />
|
|
|
- <span className='sysName'>{t.name}</span>
|
|
|
- </div>
|
|
|
- ))
|
|
|
- }
|
|
|
- </div>
|
|
|
- ) : (
|
|
|
- <>
|
|
|
- <div className='left'>
|
|
|
- <img className='bannerImg' src={require('../../../public/images/loginBannner.png')} />
|
|
|
- </div>
|
|
|
- <div className='rightLoginArea'>
|
|
|
- <div className='subHospSelector'>
|
|
|
- {
|
|
|
- subHospList.length > 0 && (
|
|
|
- <KCSelect allowClear={false} style={{ width: 200 }} defaultValue={subHospList[0].value} suffixIcon={<img style={{ width: '10px', height: '6px' }} src={require('../../../public/images/arrow.png')} />}>
|
|
|
- {
|
|
|
- subHospList.map(item => {
|
|
|
- return (
|
|
|
- <Option value={item.value} key={item.value}>{item.name}</Option>
|
|
|
- )
|
|
|
- })
|
|
|
- }
|
|
|
- </KCSelect>
|
|
|
- )
|
|
|
- }
|
|
|
- </div>
|
|
|
- <div className='systemName'>欢迎进入医务管理系统</div>
|
|
|
- <Form
|
|
|
- onFinish={onFinish}
|
|
|
- >
|
|
|
- <Form.Item
|
|
|
- name="account"
|
|
|
- rules={[{ required: true, message: 'Please input your username!' }]}
|
|
|
- >
|
|
|
- <Input className='input' />
|
|
|
- </Form.Item>
|
|
|
-
|
|
|
- <Form.Item
|
|
|
- name="password"
|
|
|
- rules={[{ required: true, message: 'Please input your password!' }]}
|
|
|
- >
|
|
|
- <Input.Password className='input' />
|
|
|
- </Form.Item>
|
|
|
-
|
|
|
- <Form.Item >
|
|
|
- <Button className='loginBtn' type="primary" htmlType="submit" loading={ifLoading} >
|
|
|
- 登录
|
|
|
- </Button>
|
|
|
- </Form.Item>
|
|
|
- <Form.Item name="remember" valuePropName="checked">
|
|
|
- <Checkbox className='checkBtn'>记住密码</Checkbox>
|
|
|
- </Form.Item>
|
|
|
- </Form>
|
|
|
- </div>
|
|
|
- </>
|
|
|
- )
|
|
|
- }
|
|
|
+ };
|
|
|
+
|
|
|
+ const selectSysHandle = async (systemInfo: SystemListItem) => {
|
|
|
+ await setInitialState((s) => ({
|
|
|
+ ...s,
|
|
|
+ currentSelectedSys: systemInfo,
|
|
|
+ openedSysLists: [systemInfo],
|
|
|
+ }));
|
|
|
+ const { query } = history.location;
|
|
|
+ const { redirect } = query as { redirect: string };
|
|
|
+ history.push(redirect || '/');
|
|
|
+ };
|
|
|
+
|
|
|
+ useEffect(() => {
|
|
|
+ //根据hospSign获取分院信息
|
|
|
+ getSubHospFunc();
|
|
|
+ }, []);
|
|
|
+
|
|
|
+ return (
|
|
|
+ <div
|
|
|
+ className="loginPage"
|
|
|
+ onMouseMove={onMouseMoveHandle}
|
|
|
+ onMouseLeave={onMouseLeaveHandle}
|
|
|
+ ref={loginPageRef}
|
|
|
+ >
|
|
|
+ <div
|
|
|
+ className="circleBigOne"
|
|
|
+ style={{ transform: transformObj, transition: transitionObj }}
|
|
|
+ ></div>
|
|
|
+ <div className="circleBigerOne"></div>
|
|
|
+ <div
|
|
|
+ className="circleLittleOne"
|
|
|
+ style={{ transform: transformObj, transition: transitionObj }}
|
|
|
+ ></div>
|
|
|
+ <div className="loginBlock">
|
|
|
+ {ifSelectSystem ? (
|
|
|
+ <div className="systemSelector">
|
|
|
+ {systemList.map((t) => (
|
|
|
+ <div
|
|
|
+ className="sysItem"
|
|
|
+ key={t.id}
|
|
|
+ onClick={() => selectSysHandle(t)}
|
|
|
+ >
|
|
|
+ <img className="icon" src={t.icon} alt="" />
|
|
|
+ <span className="sysName">{t.name}</span>
|
|
|
+ </div>
|
|
|
+ ))}
|
|
|
+ </div>
|
|
|
+ ) : (
|
|
|
+ <>
|
|
|
+ <div className="left">
|
|
|
+ <img
|
|
|
+ className="bannerImg"
|
|
|
+ src={require('../../../public/images/loginBannner.png')}
|
|
|
+ />
|
|
|
</div>
|
|
|
- <div className='bottomLogo'>
|
|
|
- <img className='logo' src={logo} />
|
|
|
- <div className='copyright'>© 2021 康程智医(成都)技术部出品</div>
|
|
|
+ <div className="rightLoginArea">
|
|
|
+ <div className="subHospSelector">
|
|
|
+ {subHospList.length > 0 && (
|
|
|
+ <KCSelect
|
|
|
+ allowClear={false}
|
|
|
+ style={{ width: 200 }}
|
|
|
+ defaultValue={subHospList[0].value}
|
|
|
+ suffixIcon={
|
|
|
+ <img
|
|
|
+ style={{ width: '10px', height: '6px' }}
|
|
|
+ src={require('../../../public/images/arrow.png')}
|
|
|
+ />
|
|
|
+ }
|
|
|
+ >
|
|
|
+ {subHospList.map((item) => {
|
|
|
+ return (
|
|
|
+ <Option value={item.value} key={item.value}>
|
|
|
+ {item.name}
|
|
|
+ </Option>
|
|
|
+ );
|
|
|
+ })}
|
|
|
+ </KCSelect>
|
|
|
+ )}
|
|
|
+ </div>
|
|
|
+ <div className="systemName">欢迎进入医务管理系统</div>
|
|
|
+ <Form onFinish={onFinish}>
|
|
|
+ <Form.Item
|
|
|
+ name="account"
|
|
|
+ rules={[
|
|
|
+ { required: true, message: 'Please input your username!' },
|
|
|
+ ]}
|
|
|
+ >
|
|
|
+ <Input className="input" />
|
|
|
+ </Form.Item>
|
|
|
+
|
|
|
+ <Form.Item
|
|
|
+ name="password"
|
|
|
+ rules={[
|
|
|
+ { required: true, message: 'Please input your password!' },
|
|
|
+ ]}
|
|
|
+ >
|
|
|
+ <Input.Password className="input" />
|
|
|
+ </Form.Item>
|
|
|
+
|
|
|
+ <Form.Item>
|
|
|
+ <Button
|
|
|
+ className="loginBtn"
|
|
|
+ type="primary"
|
|
|
+ htmlType="submit"
|
|
|
+ loading={ifLoading}
|
|
|
+ >
|
|
|
+ 登录
|
|
|
+ </Button>
|
|
|
+ </Form.Item>
|
|
|
+ <Form.Item name="remember" valuePropName="checked">
|
|
|
+ <Checkbox className="checkBtn">记住密码</Checkbox>
|
|
|
+ </Form.Item>
|
|
|
+ </Form>
|
|
|
</div>
|
|
|
- </div>
|
|
|
- )
|
|
|
-}
|
|
|
-
|
|
|
-export default LoginPage;
|
|
|
+ </>
|
|
|
+ )}
|
|
|
+ </div>
|
|
|
+ <div className="bottomLogo">
|
|
|
+ <img className="logo" src={logo} />
|
|
|
+ <div className="copyright">© 2021 康程智医(成都)技术部出品</div>
|
|
|
+ </div>
|
|
|
+ </div>
|
|
|
+ );
|
|
|
+};
|
|
|
+
|
|
|
+export default LoginPage;
|