Files
supersonic/webapp/packages/supersonic-fe/src/pages/Login/index.tsx

138 lines
4.8 KiB
TypeScript

// import type { FC } from 'react';
import styles from './style.less';
import { Button, Form, Input, message, Space } from 'antd';
import { LockOutlined, UserOutlined } from '@ant-design/icons';
import RegisterForm from './components/RegisterForm';
// import ForgetPwdForm from './components/ForgetPwdForm';
import S2Icon, { ICON } from '@/components/S2Icon';
import React, { useState } from 'react';
import { useForm } from 'antd/lib/form/Form';
import type { RegisterFormDetail } from './components/types';
import { postUserLogin, userRegister } from './services';
import { AUTH_TOKEN_KEY } from '@/common/constants';
import { queryCurrentUser } from '@/services/user';
import { history, useModel } from 'umi';
// import { setToken as setChatSdkToken } from 'supersonic-chat-sdk';
const { Item } = Form;
const LoginPage: React.FC = () => {
const [createModalVisible, setCreateModalVisible] = useState<boolean>(false);
// const [forgetModalVisible, setForgetModalVisible] = useState<boolean>(false);
const [form] = useForm();
const { initialState = {}, setInitialState } = useModel('@@initialState');
// 通过用户信息进行登录
const loginDone = async (values: RegisterFormDetail) => {
const { code, data, msg } = await postUserLogin(values);
if (code === 200) {
localStorage.setItem(AUTH_TOKEN_KEY, data);
// setChatSdkToken(data || '');
const { code: queryUserCode, data: queryUserData } = await queryCurrentUser();
if (queryUserCode === 200) {
const currentUser = {
...queryUserData,
staffName: queryUserData.staffName || queryUserData.name,
};
setInitialState({ ...initialState, currentUser });
}
history.push('/');
return;
}
message.success(msg);
};
// 处理登录按钮响应
const handleLogin = async () => {
const { validateFields } = form;
const content = await validateFields();
await loginDone(content);
};
// 处理注册弹窗确定按钮
const handleRegister = async (values: RegisterFormDetail) => {
const { code } = await userRegister({ ...values });
if (code === 200) {
message.success('注册成功');
setCreateModalVisible(false);
// 注册完自动帮用户登录
await loginDone(values);
}
};
// 相应注册按钮
const handleRegisterBtn = () => {
setCreateModalVisible(true);
};
// // 忘记密码弹窗确定响应
// const handleForgetPwd = async (values: RegisterFormDetail) => {
// await getUserForgetPwd({ ...values });
// message.success('发送邮件成功,请在收到邮件后进入邮件链接进行密码重置');
// setForgetModalVisible(false);
// };
// // 响应忘记密码按钮
// const handleForgetPwdBtn = () => {
// setForgetModalVisible(true);
// };
return (
<div className={styles.loginWarp}>
<div className={styles.content}>
<div className={styles.formContent}>
<div className={styles.formBox}>
<Form form={form} labelCol={{ span: 6 }} colon={false}>
<div className={styles.loginMain}>
<h3 className={styles.title}>
<Space>
<S2Icon
icon={ICON.iconlogobiaoshi}
size={30}
color="#296DF3"
style={{ display: 'inline-block', marginTop: 8 }}
/>
<div>(SuperSonic)</div>
</Space>
</h3>
<Item name="name" rules={[{ required: true }]} label="">
<Input size="large" placeholder="用户名: admin" prefix={<UserOutlined />} />
</Item>
<Item name="password" rules={[{ required: true }]} label="">
<Input
size="large"
type="password"
placeholder="密码: admin"
onPressEnter={handleLogin}
prefix={<LockOutlined />}
/>
</Item>
<Button className={styles.signInBtn} type="primary" onClick={handleLogin}>
</Button>
<div className={styles.tool}>
<Button className={styles.button} onClick={handleRegisterBtn}>
</Button>
{/* <Button className={styles.button} type="link" onClick={handleForgetPwdBtn}>
忘记密码
</Button> */}
</div>
</div>
</Form>
</div>
</div>
</div>
<RegisterForm
onCancel={() => {
setCreateModalVisible(false);
}}
onSubmit={handleRegister}
createModalVisible={createModalVisible}
/>
</div>
);
};
export default LoginPage;