import styles from '@/page/Login/index.module.scss' import { useEffect, useState } from "react"; import { useNavigate } from 'react-router-dom'; import { Input, Button, Checkbox, message, Modal } from "antd" import { storage } from '@/utils' import { GetCheckUser, PostAnonLogin, PostLogin } from '@/api/Login' import * as CryptoJS from 'crypto-js'; import ImageUrl from '@/utils/package/imageUrl' import { v4 as uuidv4 } from 'uuid'; import { GetCheckoutRoomNum, GetRoomInfo, GetRoomRtcToken } from '@/api/Home/Index'; const Login: React.FC = () => { const navigate = useNavigate(); const [accountPasswordStatus, setAccountPasswordStatus] = useState(false); const [version, setVersion] = useState('') const [operation, setOperation] = useState<{ isRememberPassword: boolean; isAutoLogin: boolean; account: string; password: string; options: { label: string; value: string }[]; optionsValue: string[]; }>({ isRememberPassword: false, isAutoLogin: false, account: '', password: '', options: [ { label: '记住密码', value: 'isRememberPassword' }, { label: '自动登录', value: 'isAutoLogin' }, ], optionsValue: [] }); const [anonInfo, setAnonInfo] = useState({ deviceId: '', nickName: '', roomNum: '', }) const [nameModal, setNameModal] = useState(false) useEffect(() => { window.electron.setMainWindowSize({ width: 752, height: 520, key: 'login' }) if (storage.getItem('login')) { const login = JSON.parse(storage.getItem('login') as string); const data = { isRememberPassword: login.isRememberPassword, isAutoLogin: login.isAutoLogin, optionsValue: login.optionsValue, } if (login.isRememberPassword) { setOperation({ ...operation, ...data, account: login.account, password: login.password, }) } else { setOperation({ ...operation, ...data, }) } } window.electron.getVersion().then(res => { setVersion(res) }) }, []); // 退出 const quitClick = (): void => { window.electron.setViewStatus('quit') } // 重置 const resetClick = (): void => { setOperation({ ...operation, account: '', password: '', }) setAccountPasswordStatus(false) } // 继续 const continueClick = (): any => { if (!operation.account) { return message.error('请输入账号!') } if (storage.getItem('login')) { const login = JSON.parse(storage.getItem('login') as string); if (login.account !== operation.account) { setOperation({ ...operation, password: '', }) } } GetCheckUser(operation.account).then(res => { if (res.code === 200) { res.data ? setAccountPasswordStatus(true) : message.error('账号不存在!') } }) } // 设置勾选 const changeOptionsValue = (checkedValues: string[]): void => { if (checkedValues.indexOf('isAutoLogin') >= 0 && checkedValues.indexOf('isRememberPassword') === -1) { checkedValues.push('isRememberPassword') } setOperation({ ...operation, optionsValue: checkedValues, }) storage.setItem('login', JSON.stringify({ isRememberPassword: checkedValues.includes('isRememberPassword'), isAutoLogin: checkedValues.includes('isAutoLogin'), account: operation.account, password: operation.password, optionsValue: checkedValues, })) }; const getRoomRtcToken = async (roomNum: string, callBack: Function): Promise => { Promise.all([GetRoomRtcToken(roomNum), GetRoomRtcToken(roomNum + 'a')]).then(res => { if (res[0].code === 200 && res[1].code === 200) { callBack({ token: res[0].data, tokenA: res[1].data, }) } else { storage.setItem('loading', false) } }).catch(() => { storage.setItem('loading', false) }) } // 登录 const loginClick = (): void => { if (operation.password === '') { message.error('请输入密码'); return; } PostLogin({ account: operation.account, pwd: CryptoJS.MD5(operation.password).toString(CryptoJS.enc.Hex) }).then(res => { if (res.code === 200) { message.success('登录成功!') storage.setItem('login', JSON.stringify({ isRememberPassword: operation.optionsValue.includes('isRememberPassword'), isAutoLogin: operation.optionsValue.includes('isAutoLogin'), account: operation.account, password: operation.password, optionsValue: operation.optionsValue, })) storage.setItem('user', JSON.stringify(res.data)) storage.setItem('userLogin', true) window.electron.getWindowSize().then((res: any) => { window.electron.setMainWindowSize({ width: Math.ceil(res.width / 1.5), height: Math.ceil(res.height / 1.3), }) }) window.electron.startSignalr(res.data) navigate('/home') } }) } return ( <>
{ setOperation({ ...operation, account: e.target.value }) }} disabled={accountPasswordStatus} className={`${styles.loginInputIcon} drag`} style={{ marginBottom: '12px' }} placeholder="请输入账号" prefix={} suffix={ (accountPasswordStatus && operation.account ? 重置 : null) } /> {!accountPasswordStatus ?
: null} {accountPasswordStatus ?
{ setOperation({ ...operation, password: e.target.value }) }} className={`${styles.loginInputIcon} drag`} style={{ marginBottom: '36px' }} placeholder="请输入密码" prefix={} />
: null}
游客登录
{ setAnonInfo({ ...anonInfo, roomNum: e.target.value }) }} />
{ if (!anonInfo.roomNum) { return message.error('请输入房间号!') } GetCheckoutRoomNum(anonInfo.roomNum).then(res => { if (res.code === 200) { if (res.data) { window.electron.getRegistry().then(async (res: any) => { const uuid = uuidv4(); if (!res) { window.electron.setRegistry(uuid) } setAnonInfo({ ...anonInfo, deviceId: res ? res.value : uuid, nickName: storage.getItem('nickName') || '' }) storage.getItem('nickName') setNameModal(true) }) } else { message.error('房间号不存在!') } } }) }} >
版本号:{version}
{ setAnonInfo({ ...anonInfo, nickName: e.target.value }) storage.setItem('nickName', e.target.value) }} />
) } export default Login