From f62a3aa63a045deefabd15657be2dd9c4f614231 Mon Sep 17 00:00:00 2001 From: dark Date: Fri, 13 Sep 2024 23:42:36 +0800 Subject: [PATCH] =?UTF-8?q?=E6=BB=91=E5=8A=A8=E6=A0=A1=E9=AA=8C=E7=A0=81?= =?UTF-8?q?=E5=A2=9E=E5=8A=A0reset=E9=87=8D=E7=BD=AE=E6=96=B9=E6=B3=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/components/captcha/SlideCapt.tsx | 32 ++++++++++++++++++++++++++++---- src/pages/use/login/index.tsx | 30 ++++++++++++++++++------------ 2 files changed, 46 insertions(+), 16 deletions(-) diff --git a/src/components/captcha/SlideCapt.tsx b/src/components/captcha/SlideCapt.tsx index 30ad2da..0c4002b 100644 --- a/src/components/captcha/SlideCapt.tsx +++ b/src/components/captcha/SlideCapt.tsx @@ -1,4 +1,4 @@ -import React, { memo, useCallback, useEffect, useState } from 'react' +import React, { forwardRef, memo, useCallback, useEffect, useState, useImperativeHandle } from 'react' import { Popover, message } from 'antd' import GoCaptcha from 'go-captcha-react' import { SlideCaptchaCheckData } from './types.ts' @@ -17,7 +17,18 @@ export interface SlideCaptProps { onChange?: (value?: string) => void } -const SlideCapt = ({ config, api, value, onChange }: SlideCaptProps) => { +export type SlideCaptRef = { + reset: () => void +} + + +const SlideCapt = forwardRef(( + { + config, + api, + value, + onChange, + }: SlideCaptProps, ref) => { const { styles } = useStyle() const [ open, setOpen ] = useState(false) @@ -85,7 +96,20 @@ const SlideCapt = ({ config, api, value, onChange }: SlideCaptProps) => { }, 1000) }) - }, [ api.checkCaptcha, setData, state, setState, setOpen, innerKey, fetchCaptcha ]) + }, [ api.checkCaptcha, setData, state, setState, setOpen, innerKey, onChange, fetchCaptcha ]) + + useImperativeHandle(ref, () => { + return { + reset() { + setState(prevState => ({ + ...prevState, type: 'default', title: '点击进行校验', + })) + setKey(undefined) + onChange?.(undefined) + refresh() + } + } + }, [ fetchCaptcha, setState, setKey ]) useEffect(() => { @@ -134,6 +158,6 @@ const SlideCapt = ({ config, api, value, onChange }: SlideCaptProps) => { ) -} +}) export default memo(SlideCapt) \ No newline at end of file diff --git a/src/pages/use/login/index.tsx b/src/pages/use/login/index.tsx index a9dce92..d9daedc 100644 --- a/src/pages/use/login/index.tsx +++ b/src/pages/use/login/index.tsx @@ -11,9 +11,9 @@ import { telegramLoginAtom, upLoginAtom, } from '@/store/system/user.ts' -import React, { memo, useEffect, useLayoutEffect, useState } from 'react' +import React, { memo, useEffect, useLayoutEffect, useRef, useState } from 'react' import systemServ from '@/service/system.ts' -import SlideCapt from '@/components/captcha/SlideCapt.tsx' +import SlideCapt, { SlideCaptRef } from '@/components/captcha/SlideCapt.tsx' const { Title, Text, Link } = Typography const { TabPane } = Tabs @@ -28,6 +28,8 @@ const Login = memo(() => { const { mutate: emailLoginMutate } = useAtomValue(emailLoginAtom) const { mutate: telegramLoginMutate } = useAtomValue(telegramLoginAtom) + const slideCaptRef = useRef() + const uphandleSubmit = (values: any) => { console.log(values) upLoginFun(values) @@ -118,7 +120,13 @@ const Login = memo(() => { height: '400px', }} > - + { + if (key === '1') { + slideCaptRef.current?.reset() + } + }} + style={{ marginTop: '50px' }}>
@@ -132,17 +140,15 @@ const Login = memo(() => { autoComplete="off" /> - -
- -
+
{/**/} {/* } />*/}