@ -1,7 +1,7 @@
import { AlipayCircleOutlined , TaobaoCircleOutlined , WeiboCircleOutlined } from '@ant-design/icons' ;
import { AlipayCircleOutlined , TaobaoCircleOutlined , WeiboCircleOutlined } from '@ant-design/icons' ;
import { Alert , Checkbox } from 'antd' ;
import { Alert , Checkbox } from 'antd' ;
import React , { useState } from 'react' ;
import React , { useState } from 'react' ;
import { Link , connect , Dispatch } from 'umi' ;
import { Link , connect , Dispatch , useIntl , FormattedMessage } from 'umi' ;
import { StateType } from '@/models/login' ;
import { StateType } from '@/models/login' ;
import { LoginParamsType } from '@/services/login' ;
import { LoginParamsType } from '@/services/login' ;
import { ConnectState } from '@/models/connect' ;
import { ConnectState } from '@/models/connect' ;
@ -34,6 +34,7 @@ const Login: React.FC<LoginProps> = (props) => {
const { status , type : loginType } = userLogin ;
const { status , type : loginType } = userLogin ;
const [ autoLogin , setAutoLogin ] = useState ( true ) ;
const [ autoLogin , setAutoLogin ] = useState ( true ) ;
const [ type , setType ] = useState < string > ( 'account' ) ;
const [ type , setType ] = useState < string > ( 'account' ) ;
const intl = useIntl ( ) ;
const handleSubmit = ( values : LoginParamsType ) = > {
const handleSubmit = ( values : LoginParamsType ) = > {
const { dispatch } = props ;
const { dispatch } = props ;
@ -45,84 +46,148 @@ const Login: React.FC<LoginProps> = (props) => {
return (
return (
< div className = { styles . main } >
< div className = { styles . main } >
< LoginForm activeKey = { type } onTabChange = { setType } onSubmit = { handleSubmit } >
< LoginForm activeKey = { type } onTabChange = { setType } onSubmit = { handleSubmit } >
< Tab key = "account" tab = "账户密码登录" >
< Tab
key = "account"
tab = { intl . formatMessage ( {
id : 'pages.login.accountLogin.tab' ,
defaultMessage : '账户密码登录' ,
} ) }
>
{ status === 'error' && loginType === 'account' && ! submitting && (
{ status === 'error' && loginType === 'account' && ! submitting && (
< LoginMessage content = "账户或密码错误(admin/ant.design)" / >
< LoginMessage
content = { intl . formatMessage ( {
id : 'pages.login.accountLogin.errorMessage' ,
defaultMessage : '账户或密码错误(admin/ant.design)' ,
} ) }
/ >
) }
) }
< UserName
< UserName
name = "userName"
name = "userName"
placeholder = "用户名: admin or user"
placeholder = { intl . formatMessage ( {
id : 'pages.login.username.placeholder' ,
defaultMessage : '用户名: admin or user' ,
} ) }
rules = { [
rules = { [
{
{
required : true ,
required : true ,
message : '请输入用户名!' ,
message : (
< FormattedMessage
id = "pages.login.username.required"
defaultMessage = "请输入用户名!"
/ >
) ,
} ,
} ,
] }
] }
/ >
/ >
< Password
< Password
name = "password"
name = "password"
placeholder = "密码: ant.design"
placeholder = { intl . formatMessage ( {
id : 'pages.login.password.placeholder' ,
defaultMessage : '密码: ant.design' ,
} ) }
rules = { [
rules = { [
{
{
required : true ,
required : true ,
message : '请输入密码!' ,
message : (
< FormattedMessage
id = "pages.login.password.required"
defaultMessage = "请输入密码!"
/ >
) ,
} ,
} ,
] }
] }
/ >
/ >
< / Tab >
< / Tab >
< Tab key = "mobile" tab = "手机号登录" >
< Tab
key = "mobile"
tab = { intl . formatMessage ( {
id : 'pages.login.phoneLogin.tab' ,
defaultMessage : '手机号登录' ,
} ) }
>
{ status === 'error' && loginType === 'mobile' && ! submitting && (
{ status === 'error' && loginType === 'mobile' && ! submitting && (
< LoginMessage content = "验证码错误" / >
< LoginMessage
content = { intl . formatMessage ( {
id : 'pages.login.phoneLogin.errorMessage' ,
defaultMessage : '验证码错误' ,
} ) }
/ >
) }
) }
< Mobile
< Mobile
name = "mobile"
name = "mobile"
placeholder = "手机号"
placeholder = { intl . formatMessage ( {
id : 'pages.login.phoneNumber.placeholder' ,
defaultMessage : '手机号' ,
} ) }
rules = { [
rules = { [
{
{
required : true ,
required : true ,
message : '请输入手机号!' ,
message : (
< FormattedMessage
id = "pages.login.phoneNumber.required"
defaultMessage = "请输入手机号!"
/ >
) ,
} ,
} ,
{
{
pattern : /^1\d{10}$/ ,
pattern : /^1\d{10}$/ ,
message : '手机号格式错误!' ,
message : (
< FormattedMessage
id = "pages.login.phoneNumber.invalid"
defaultMessage = "手机号格式错误!"
/ >
) ,
} ,
} ,
] }
] }
/ >
/ >
< Captcha
< Captcha
name = "captcha"
name = "captcha"
placeholder = "验证码"
placeholder = { intl . formatMessage ( {
id : 'pages.login.captcha.placeholder' ,
defaultMessage : '验证码' ,
} ) }
countDown = { 120 }
countDown = { 120 }
getCaptchaButtonText = ""
getCaptchaButtonText = ""
getCaptchaSecondText = "秒"
getCaptchaSecondText = { intl . formatMessage ( {
id : 'pages.getCaptchaSecondText' ,
defaultMessage : '秒' ,
} ) }
rules = { [
rules = { [
{
{
required : true ,
required : true ,
message : '请输入验证码!' ,
message : (
< FormattedMessage
id = "pages.login.captcha.required"
defaultMessage = "请输入验证码!"
/ >
) ,
} ,
} ,
] }
] }
/ >
/ >
< / Tab >
< / Tab >
< div >
< div >
< Checkbox checked = { autoLogin } onChange = { ( e ) = > setAutoLogin ( e . target . checked ) } >
< Checkbox checked = { autoLogin } onChange = { ( e ) = > setAutoLogin ( e . target . checked ) } >
自 动 登 录
< FormattedMessage id = "pages.login.rememberMe" defaultMessage = "自动登录" / >
< / Checkbox >
< / Checkbox >
< a
< a
style = { {
style = { {
float : 'right' ,
float : 'right' ,
} }
} }
>
>
忘 记 密 码
< FormattedMessage id = "pages.login.forgotPassword" defaultMessage = "忘记密码" / >
< / a >
< / a >
< / div >
< / div >
< Submit loading = { submitting } > 登 录 < / Submit >
< Submit loading = { submitting } >
< FormattedMessage id = "pages.login.submit" defaultMessage = "登录" / >
< / Submit >
< div className = { styles . other } >
< div className = { styles . other } >
其 他 登 录 方 式
< FormattedMessage id = "pages.login.loginWith" defaultMessage = "其他登录方式" / >
< AlipayCircleOutlined className = { styles . icon } / >
< AlipayCircleOutlined className = { styles . icon } / >
< TaobaoCircleOutlined className = { styles . icon } / >
< TaobaoCircleOutlined className = { styles . icon } / >
< WeiboCircleOutlined className = { styles . icon } / >
< WeiboCircleOutlined className = { styles . icon } / >
< Link className = { styles . register } to = "/user/register" >
< Link className = { styles . register } to = "/user/register" >
注 册 账 户
< FormattedMessage id = "pages.login.registerAccount" defaultMessage = "注册账户" / >
< / Link >
< / Link >
< / div >
< / div >
< / LoginForm >
< / LoginForm >