import React from 'react'; import { Row, Col, Form, Input, Button, Card, message, Image } from 'antd'; import { useSelector } from 'react-redux'; import { RootState } from '../../states/store'; import { SystemMode } from '../../states/systemModeSlice'; import loginBrand from 'src/assets/imgs/login-brand.jpeg'; import { useDispatch } from 'react-redux'; import { login as loginApi } from '../../API/security/userActions'; import { setUserInfo, type UserInfoState } from '../../states/user_info'; // 同时导入 setUserInfo 和类型 UserInfoState import handleEmergencyOperation from '../../domain/patient/handleEmergencyOperation'; import { setSystemMode } from '../../states/systemModeSlice'; const Login: React.FC = () => { const [form] = Form.useForm(); const dispatch = useDispatch(); const systemMode = useSelector((state: RootState) => state.systemMode.mode); const userInfo = useSelector((state: RootState) => state.userInfo); console.log(`========${systemMode}`); if (systemMode === SystemMode.Emergency) { return null; } //非急诊,但已经登录,不显示login if (systemMode === SystemMode.Normal && !!userInfo && userInfo.uid !== 0) { return null; } // 2. 登录请求函数 const loginRequest = async (values: { username: string; password: string; }) => { const res = await loginApi(values.username, values.password); return res.data; }; // 3. handleFinish 处理流程 const handleFinish = async (values: { username: string; password: string; }) => { try { const result = await loginRequest(values); if (result.code === '0x000000') { // 4. 转换为 UserInfoState 类型 const userInfo: UserInfoState = { token: result.data.token, expire: result.data.expire, uid: result.data.uid, name: result.data.name, avatar: result.data.avatar, }; // 5. 分发 redux action dispatch(setUserInfo(userInfo)); dispatch(setSystemMode(SystemMode.Normal)); message.success('登录成功'); //todo 更详细的提示与异步过程 } else { message.error(result.description || '登录失败'); } } catch (e) { message.error(`网络错误: ${e instanceof Error ? e.message : '未知错误'}`); } }; return (
{/* 右侧区域可用于展示插画或品牌信息,当前留空 */} Brand Logo
); }; export default Login;