Commit f1e326ce authored by 周宏民's avatar 周宏民

feat: 节水登录页添加验证码

parent 4660202e
Pipeline #94859 passed with stages
...@@ -18,7 +18,8 @@ ...@@ -18,7 +18,8 @@
"title": "能源-定额平台" "title": "能源-定额平台"
}, },
{ {
"title": "节水主题一" "title": "节水主题一",
"isVerificationCode": true
}, },
{ {
"title": "新春" "title": "新春"
......
...@@ -95,11 +95,17 @@ const appReducer = (state = initialState, action) => { ...@@ -95,11 +95,17 @@ const appReducer = (state = initialState, action) => {
// 验证码开启 系统配置表里配置 // 验证码开启 系统配置表里配置
temp.isVerification = action.data.isVerification || ''; temp.isVerification = action.data.isVerification || '';
// 验证码配置 站点设置里配置 只针对该站点 // 验证码配置 站点设置里配置 只针对该站点
temp.isVerificationCode = action.data.VerificationConfig?.IsVerificationCode || false; temp.isVerificationCode =
temp.verificationCodeTimeOut = action.data.VerificationConfig?.VerificationCodeTimeOut || 1; action.data?.isVerificationCode ||
temp.verificationCodeType = temp.isVerificationCode action.data?.IsVerificationCode ||
? action.data.VerificationConfig?.VerificationCodeType || '' action.data.VerificationConfig?.IsVerificationCode ||
: ''; false;
temp.verificationCodeTimeOut =
action.data.verificationCodeTimeOut || action.data.VerificationConfig?.VerificationCodeTimeOut || 1;
temp.verificationCodeType =
action.data.verificationCodeType || temp.isVerificationCode
? action.data.VerificationConfig?.VerificationCodeType || ''
: '';
// temp.isVerificationCode 为false 时,不能用短信验证码 // temp.isVerificationCode 为false 时,不能用短信验证码
// 密码校验 // 密码校验
temp.PasswordAuth = action.data.PasswordAuth || '否'; temp.PasswordAuth = action.data.PasswordAuth || '否';
......
...@@ -11,7 +11,9 @@ const { UserName, Password, Submit } = LoginForm; ...@@ -11,7 +11,9 @@ const { UserName, Password, Submit } = LoginForm;
const ValidateCode = props => { const ValidateCode = props => {
const [count, setCount] = useState(0); const [count, setCount] = useState(0);
const codeUrl = window?.globalConfig?.hasGateWay ? '/PandaCore/Identity/GetVerificationCode' : '/PandaCore/GCK/BussinessAuth/GetVerificationCode'; const codeUrl = window?.globalConfig?.hasGateWay
? '/PandaCore/Identity/GetVerificationCode'
: '/PandaCore/GCK/BussinessAuth/GetVerificationCode';
useEffect(() => { useEffect(() => {
window.share.event.on('loginError', handError); window.share.event.on('loginError', handError);
...@@ -55,81 +57,85 @@ const ValidateCode = props => { ...@@ -55,81 +57,85 @@ const ValidateCode = props => {
); );
}; };
const FormLogin = props => ( const FormLogin = props => {
<div className={styles.form_login}> const { isVerificationCode, isVerification, verificationCodeType } = window.globalConfig;
<LoginContext.Provider> const isValidate = (isVerification || 0) * 1 === 1 || isVerificationCode;
<Form return (
form={props.form} <div className={styles.form_login}>
onFinish={values => { <LoginContext.Provider>
if (props.onSubmit) { <Form
props.onSubmit(values); form={props.form}
} onFinish={values => {
}} if (props.onSubmit) {
> props.onSubmit(values);
{props.status === 'error' && props.type === 'account' && !props.submitting && ( }
<LoginMessage }}
content={useIntl().formatMessage({ >
id: 'pages.login.accountLogin.errorMessage', {props.status === 'error' && props.type === 'account' && !props.submitting && (
<LoginMessage
content={useIntl().formatMessage({
id: 'pages.login.accountLogin.errorMessage',
})}
/>
)}
<UserName
name="userName"
placeholder={useIntl().formatMessage({
id: 'pages.login.username.placeholder',
})} })}
rules={[
{
required: true,
message: useIntl().formatMessage({
id: 'pages.login.username.required',
}),
},
]}
/> />
)} <Password
<UserName name="password"
name="userName" placeholder={useIntl().formatMessage({
placeholder={useIntl().formatMessage({ id: 'pages.login.password.placeholder',
id: 'pages.login.username.placeholder', })}
})} rules={[
rules={[ {
{ required: true,
required: true, message: useIntl().formatMessage({
message: useIntl().formatMessage({ id: 'pages.login.password.required',
id: 'pages.login.username.required', }),
}), },
}, ]}
]} />
/> {isValidate ? (
<Password <Form.Item shouldUpdate noStyle>
name="password" {({ getFieldValue, validateFields }) => (
placeholder={useIntl().formatMessage({ <Form.Item
id: 'pages.login.password.placeholder', name="validateCode"
})} rules={[
rules={[ {
required: true,
message: '请输入验证码',
},
]}
>
<ValidateCode />
</Form.Item>
)}
</Form.Item>
) : null}
<div className={styles.checkbox_wrap}>
{ {
required: true, // <Checkbox checked={props.autoLogin} onChange={e => props.setAutoLogin(e.target.checked)}>
message: useIntl().formatMessage({ // {'记住密码'}
id: 'pages.login.password.required', // </Checkbox>
}), // <a href="#">忘记密码?</a>
}, }
]} </div>
/> <Submit loading={props.submitting}>{useIntl().formatMessage({ id: 'pages.login.submit' })}</Submit>
{window?.globalConfig?.isVerification == 1 ? ( </Form>
<Form.Item shouldUpdate noStyle> </LoginContext.Provider>
{({ getFieldValue, validateFields }) => ( </div>
<Form.Item );
name="validateCode" };
rules={[
{
required: true,
message: '请输入验证码',
},
]}
>
<ValidateCode />
</Form.Item>
)}
</Form.Item>
) : null}
<div className={styles.checkbox_wrap}>
{
// <Checkbox checked={props.autoLogin} onChange={e => props.setAutoLogin(e.target.checked)}>
// {'记住密码'}
// </Checkbox>
// <a href="#">忘记密码?</a>
}
</div>
<Submit loading={props.submitting}>{useIntl().formatMessage({ id: 'pages.login.submit' })}</Submit>
</Form>
</LoginContext.Provider>
</div>
);
export default FormLogin; export default FormLogin;
...@@ -145,6 +145,7 @@ class HuaNongLogin extends Component { ...@@ -145,6 +145,7 @@ class HuaNongLogin extends Component {
loginMode: this.props.loginMode, loginMode: this.props.loginMode,
updateLoginMode: this.props.updateLoginMode, updateLoginMode: this.props.updateLoginMode,
}; };
return <FormLogin {...params} />; return <FormLogin {...params} />;
} }
getCurrentTime(callback) { getCurrentTime(callback) {
...@@ -239,7 +240,9 @@ class HuaNongLogin extends Component { ...@@ -239,7 +240,9 @@ class HuaNongLogin extends Component {
this.clearTime(); this.clearTime();
} }
render() { render() {
const { isVerificationCode, isVerification } = window.globalConfig;
const isValidate = (isVerification || 0) * 1 === 1 || isVerificationCode;
return ( return (
<HelmetProvider> <HelmetProvider>
<div className={styles.quota} style={{ 'background': `url(${bigNew ? this.props.global.transformDevAssetsBaseURL(bigNew) : require("@/assets/images/login/节水/" + big)}) no-repeat` }}> <div className={styles.quota} style={{ 'background': `url(${bigNew ? this.props.global.transformDevAssetsBaseURL(bigNew) : require("@/assets/images/login/节水/" + big)}) no-repeat` }}>
...@@ -258,7 +261,7 @@ class HuaNongLogin extends Component { ...@@ -258,7 +261,7 @@ class HuaNongLogin extends Component {
</div> </div>
</div> </div>
<div className={styles.wrap_content}> <div className={styles.wrap_content}>
<div className={classNames(styles.from, this.props.global.isVerification == 1 ? styles.from_validate : '')}> <div className={classNames(styles.from, isValidate ? styles.from_validate : '')}>
<div className={styles.slogan}> <div className={styles.slogan}>
<div className={styles.slogan_back} style={{ background: `url( ${!slogan ? require("@/assets/images/login/节水/建桥宣传语.png") : this.props.global.transformDevAssetsBaseURL(slogan)}) center no-repeat` }} /> <div className={styles.slogan_back} style={{ background: `url( ${!slogan ? require("@/assets/images/login/节水/建桥宣传语.png") : this.props.global.transformDevAssetsBaseURL(slogan)}) center no-repeat` }} />
</div> </div>
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment