ProComponents组件高度封装,其中的login组件使用起来一头雾水
import { LockOutlined, MobileOutlined, UserOutlined, } from '@ant-design/icons';
import { LoginForm, ProFormCaptcha, ProFormCheckbox, ProFormText, } from '@ant-design/pro-components';
import { message, Tabs } from 'antd';
import { useState } from 'react';
import React from 'react';
import { useModel, history } from 'umi';
const iconStyles = {
marginInlineStart: '16px',
color: 'rgba(0, 0, 0, 0.2)',
fontSize: '24px',
verticalAlign: 'middle',
cursor: 'pointer',
};
export default () => {
const [loginType, setLoginType] = useState('account');
// 先从全局获得初始值
const { setInitialState } = useModel('@@initialState');
// 只有通过校验之后才会触发这个方法
const onFinish = (values) => {
console.log('Success:', values);
//1.修改全局的initialstate,让layout有机会进入主面板
setInitialState({ //通过这个函数传值过去
isLogin: true,
userInfo: values
})
//2.实现路由跳转
history.push('/access')
};
//return之前还有一个密码输入错误的自定义函数,我给删掉了
return (
<div className='login'>
<LoginForm
onFinish={onFinish}
logo="https://github.githubassets.com/images/modules/logos_page/Octocat.png"
title="Github"
subTitle="全球最大的代码托管平台"
>
<Tabs centered activeKey={loginType} onChange={(activeKey) => setLoginType(activeKey)}>
<Tabs.TabPane key={'account'} tab={'账号密码登录'} />
<Tabs.TabPane key={'phone'} tab={'手机号登录'} />
</Tabs>
{loginType === 'account' && (<>
<ProFormText name="username"
fieldProps={{
size: 'large',
prefix: <UserOutlined className={'prefixIcon'} />,
}}
placeholder={'用户名: admin or user'} rules={[
{
required: true,
message: '请输入用户名!',
},
]} />
<ProFormText.Password name="password"
fieldProps={{
size: 'large',
prefix: <LockOutlined className={'prefixIcon'} />,
}} placeholder={'密码: ant.design'} rules={[
{
required: true,
message: '请输入密码!',
},
]} />
</>)}
{loginType === 'phone' && (<>
<ProFormText fieldProps={{
size: 'large', prefix: <MobileOutlined className={'prefixIcon'} />,
}} name="mobile" placeholder={'手机号'} rules={[
{
required: true,
message: '请输入手机号!',
},
{
pattern: /^1\d{10}$/,
message: '手机号格式错误!',
},
]} />
<ProFormCaptcha fieldProps={{
size: 'large',
prefix: <LockOutlined className={'prefixIcon'} />,
}} captchaProps={{
size: 'large',
}} placeholder={'请输入验证码'} captchaTextRender={(timing, count) => {
if (timing) {
return `${count} ${'获取验证码'}`;
}
return '获取验证码';
}} name="captcha" rules={[
{
required: true,
message: '请输入验证码!',
},
]} onGetCaptcha={async () => {
message.success('获取验证码成功!验证码为:1234');
}} />
</>)}
<div style={{
marginBlockEnd: 24,
}}>
<ProFormCheckbox noStyle name="autoLogin">
自动登录
</ProFormCheckbox>
<a style={{
float: 'right',
}}>
忘记密码
</a>
</div>
</LoginForm>
</div>);
};