aura-web/src/pages/LoginPage/components/LoginFormCard.tsx

100 lines
3.6 KiB
TypeScript

import { Button, Form, Input, Tabs } from 'antd';
import type { LoginPageLogic, LoginTab } from '../LoginPageLogic';
export default function LoginFormCard({ logic }: { logic: LoginPageLogic }) {
const { tab, setTab, loading, onLogin, onRegister } = logic;
const [loginForm] = Form.useForm();
const [registerForm] = Form.useForm();
const handleRegister = async (values: any) => {
const result = await onRegister(values);
if (result) {
loginForm.setFieldsValue({
phone: result.phone,
password: result.password,
});
}
};
return (
<div className="login-card">
<div className="login-card-header">
<h2 className="login-card-title"></h2>
<div className="login-card-subtitle">使</div>
</div>
<Tabs
activeKey={tab}
onChange={(key) => setTab(key as LoginTab)}
items={[
{
key: 'login',
label: '登录',
children: (
<Form
form={loginForm}
layout="vertical"
onFinish={onLogin}
className="login-form"
>
<Form.Item
name="phone"
label="手机号"
rules={[
{ required: true, message: '请填写手机号' },
]}
>
<Input placeholder="13800138000" size="large" autoFocus />
</Form.Item>
<Form.Item name="password" label="密码" rules={[{ required: true }]}>
<Input.Password placeholder="••••••" size="large" />
</Form.Item>
<Button type="primary" htmlType="submit" loading={loading} block size="large" className="login-submit-btn">
</Button>
</Form>
)
},
{
key: 'register',
label: '注册',
children: (
<Form
form={registerForm}
layout="vertical"
onFinish={handleRegister}
className="login-form"
>
<Form.Item
name="phone"
label="手机号"
rules={[
{ required: true, message: '请填写手机号' },
{ pattern: /^1[3-9]\d{9}$/, message: '请输入正确的手机号格式' }
]}
>
<Input placeholder="13800138000" size="large" />
</Form.Item>
<Form.Item name="name" label="昵称" rules={[{ required: true }]}>
<Input placeholder="张三" size="large" />
</Form.Item>
<Form.Item name="password" label="密码" rules={[{ required: true, min: 6, message: '至少 6 位' }]}>
<Input.Password placeholder="••••••" size="large" />
</Form.Item>
<Form.Item name="inviteCode" label="邀请码(可选)">
<Input placeholder="如果你是被邀请的用户" size="large" />
</Form.Item>
<Button type="primary" htmlType="submit" loading={loading} block size="large" className="login-submit-btn">
</Button>
</Form>
)
}
]}
/>
<div className="login-footer"></div>
</div>
);
}