|
@@ -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>
|