web-report/front/components/LoginComponent.tsx
2023-08-21 23:45:47 +08:00

95 lines
3.2 KiB
TypeScript

import {Button, Form, Divider, Modal, Row, Col, Space, Notification} from '@douyinfe/semi-ui'
import {useState} from "react";
import {useNavigate} from "react-router-dom";
import {useUserinfoStore} from "../store/userinfoStore.ts";
type FieldType = {
account: string;
password: string;
};
const {Input, Checkbox} = Form
export const LoginComponent = () => {
const [loading, setLoading] = useState(false);
const navigate = useNavigate();
const {login} = useUserinfoStore()
const onFinish = async (values: FieldType) => {
setLoading(true);
try {
const user = await login(values)
setVisible(true);
navigate('/dashboard')
} catch (err) {
// 登录失败
console.log(err)
// 登录失败
Notification.error({
content: '登录失败,请检查用户名和密码'
})
}
setLoading(false);
};
const [visible, setVisible] = useState(false);
const hideModal = () => setVisible(false)
return (<div>
<Modal
centered
visible={visible}
width={450}
footer={null}
maskClosable={false}
title='登录'
onCancel={hideModal}
>
<Form
onSubmit={onFinish}
>
<Form.Input
field="username"
placeholder="请输入用户名"
noLabel
rules={[{required: true, message: '用户名不可空'}]}
/>
<Form.Input
type="password"
field="password"
placeholder="请输入登录密码"
noLabel
rules={[{required: true, message: '密码不可空'}]}
/>
<div className='flex align-center space-between'>
<Form.Checkbox
field="remember"
value={false}
noLabel
></Form.Checkbox>
<Space>
<Button theme='light' onClick={hideModal}></Button>
<Button type='primary' theme='solid' loading={loading} htmlType="submit"></Button>
</Space>
</div>
</Form>
{/*<div style={{ padding: '30px 0 20px' }}>*/}
{/* <Divider>OR</Divider>*/}
{/* <div className="text-center" style={{ marginTop: 20 }}>*/}
{/* <Space>*/}
{/* <Button icon={<GoogleOutlined />}>GOOGLE</Button>*/}
{/* <Button theme='solid' type="primary" icon={<GithubOutlined />}>GITHUB</Button>*/}
{/* </Space>*/}
{/* </div>*/}
{/*</div>*/}
</Modal>
{visible ? 'xxx' : '0000'}
<Button type="primary" onClick={() => {
setVisible(true)
// Modal.success({ title: 'This is a success message', content: 'bla bla bla...' });
}}></Button>
</div>)
}