You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
142 lines
5.3 KiB
142 lines
5.3 KiB
'use strict';
|
|
import React, { useEffect, useRef } from 'react';
|
|
import { connect } from 'react-redux';
|
|
import { push } from 'react-router-redux';
|
|
import { Form, Button, Toast } from '@douyinfe/semi-ui';
|
|
import { login, LOGIN_SUCCESS } from '../actions/auth';
|
|
import { IconLock, IconUser } from '@douyinfe/semi-icons';
|
|
import '../style.less'
|
|
|
|
const Login = props => {
|
|
const { dispatch, user, error, actions, apiRoot, isRequesting } = props
|
|
const form = useRef();
|
|
|
|
useEffect(() => {
|
|
if (error) {
|
|
Toast.error(error);
|
|
form.current.setValue('password', '')
|
|
}
|
|
}, [error])
|
|
|
|
useEffect(() => {
|
|
if (user && user.authorized) {
|
|
dispatch(push('/console'));
|
|
localStorage.setItem('poms_open_sider', JSON.stringify([]))
|
|
localStorage.removeItem('poms_selected_sider')
|
|
}
|
|
}, [user])
|
|
|
|
return (
|
|
<div style={{
|
|
// height: '100vh',
|
|
// backgroundImage: "url('/assets/images/background/loginBackground.gif')",
|
|
// backgroundSize: 'cover',
|
|
// backgroundRepeat: 'no-repeat',
|
|
// position: 'relative',
|
|
}}>
|
|
<video
|
|
autoPlay loop muted
|
|
style={{
|
|
width: "100%", objectFit: "cover", objectPosition: 'left top', height: 'calc(100vh - 4px)'
|
|
}}
|
|
src="/assets/video/login_bg.mp4"
|
|
type="video/mp4"
|
|
/>
|
|
{/* <img src='/assets/images/background/loginBackground.gif' style={{
|
|
width: "100%",
|
|
height: 'calc(100vh - 4px)',
|
|
objectFit: "cover",
|
|
objectPosition: 'left top',
|
|
position: 'absolute',
|
|
top: 0,
|
|
left: 0,
|
|
zIndex: "5"
|
|
}} /> */}
|
|
<div style={{
|
|
width: 600,
|
|
height: 90,
|
|
objectFit: "cover",
|
|
objectPosition: 'left top',
|
|
position: 'absolute',
|
|
top: 139,
|
|
left: 41,
|
|
zIndex: 5,
|
|
fontSize: 14,
|
|
color: ' #005ABD',
|
|
display:'flex',
|
|
flexDirection: 'column',
|
|
justifyContent: 'space-between',
|
|
}}>
|
|
<div><span style={{ fontFamily: 'YouSheBiaoTiHei', }}>POMS运维中台管理系统—</span> 为企业数字化转型提供安全、稳定、高效的数字化运维底座</div>
|
|
<div><span style={{ fontFamily: 'YouSheBiaoTiHei', }}>高效—</span> 为运维智能化升级提供领先的创新技术和平台管理</div>
|
|
<div><span style={{ fontFamily: 'YouSheBiaoTiHei', }}>智能—</span>助力数字化转型和智能化升级一步到位</div>
|
|
</div>
|
|
<div style={{
|
|
width: 512,
|
|
height: '100%',
|
|
padding: '45px 60px',
|
|
background: 'rgb(255 255 255 / 50%)',
|
|
backdropFilter: "saturate(100%) contrast(100%) blur(17px)",
|
|
position: 'absolute',
|
|
top: 0,
|
|
right: 0,
|
|
zIndex: "6",
|
|
textAlign: 'center',
|
|
}}>
|
|
<div style={{
|
|
width: 388,
|
|
marginTop: "40%"
|
|
}}>
|
|
<img src="/assets/images/background/user_login.png" alt="" style={{ width: 324, height: 24, marginBottom: 71 }} />
|
|
<Form
|
|
onSubmit={values => {
|
|
dispatch(login(values.username, values.password)).then(res => {
|
|
const data = res.payload.user
|
|
dispatch(actions.layout.initWebSocket({ ioUrl: apiRoot, token: data.token, pomsUserId: data.pomsUserInfo.id }))
|
|
})
|
|
}}
|
|
getFormApi={formApi => form.current = formApi}
|
|
>
|
|
<Form.Input
|
|
className='inputbgc'
|
|
field='username'
|
|
noLabel={true}
|
|
label='用户名'
|
|
placeholder='请输入账号'
|
|
prefix={<IconUser style={{ color: '#1859C1', marginRight: 14, marginLeft: 8 }} />}
|
|
style={{ background: '#FFFFFF', height: 46, marginBottom: 33, border: '1px solid #E0EFFF', borderRadius: '4px' }}
|
|
/>
|
|
<Form.Input
|
|
field='password'
|
|
noLabel={true}
|
|
mode="password"
|
|
autoComplete=""
|
|
placeholder='请输入密码'
|
|
label='密码'
|
|
prefix={<IconLock style={{ color: '#1859C1', marginRight: 14, marginLeft: 8 }} />}
|
|
style={{ background: '#FFFFFF', height: 46, border: '1px solid #E0EFFF', borderRadius: '4px' }}
|
|
/>
|
|
<img src="/assets/images/background/xiangqi.png" style={{ width: 112, height: 14, margin: "4px 0 0 278px" }} />
|
|
<Button htmlType='submit' block theme="solid" loading={isRequesting} style={{ marginTop: 56, height: 46, backgroundColor: '#005ABD', borderRadius: '3px' }}>立即登录</Button>
|
|
|
|
</Form>
|
|
|
|
</div>
|
|
|
|
</div>
|
|
</div>
|
|
);
|
|
}
|
|
|
|
function mapStateToProps (state) {
|
|
const { auth, global } = state;
|
|
return {
|
|
user: auth.user,
|
|
error: auth.error,
|
|
actions: global.actions,
|
|
apiRoot: global.apiRoot,
|
|
isRequesting: auth.isRequesting
|
|
}
|
|
}
|
|
|
|
export default connect(mapStateToProps)(Login);
|