// @ts-nocheck import React, { useEffect, useState,useRef } from 'react'; import styles from './styles.less'; import { loginService } from '@/service'; import classnames from 'classnames'; import { Screen_svg } from '@/data'; export const sleep = (t) => new Promise((r) => setTimeout(r, t)); const QRCode = (props: any) => { const { onRegisterClick, onResetPwdClick, isShowQRCode, setIsShowQRCode, onSuccess, ...restProps } = props; const [qRInfo, setQRInfo] = useState(null); const isExeCallback = useRef(null) useEffect(() => { (async () => { if (isShowQRCode) { isExeCallback.current = true const qrCache = JSON.parse(localStorage?.getItem('qrCache') || '{}') let qrRes = qrCache if(!qrRes?.data){ qrRes = await loginService.getQRCode(); localStorage.setItem('qrCache',JSON.stringify(qrRes)) } setQRInfo({ ...qrRes?.data, image: 'data:image/png;base64,' + qrRes?.data?.image, error: !qrRes?.data?.image, }); handleCheckLogin(qrRes?.data?.scene); }else{ isExeCallback.current = false } })(); return () => isExeCallback.current = false }, [isShowQRCode]); const handleCheckLogin = async (scene: string) => { const qrLoginRes = await loginService.handleQRCodeLogin({ scene, }); if (qrLoginRes?.data?.token) { localStorage.removeItem('qrCache') if (onSuccess) { onSuccess(qrLoginRes?.data?.token); } return; } await sleep(2000); if(isExeCallback?.current){ handleCheckLogin(scene); } }; return (
); }; export default QRCode;