import { createSignal } from "solid-js"; import { Button } from "../Button"; import { InnerInput } from "../FormElements/Input/input"; import { FormItem } from "../FormItem"; import { Icon } from "../Icon"; import { Image } from "../Image"; import { Space } from "../Layout"; import useValidation from "../utils/useValidation"; import { UserNameProps } from "./UserName"; import { useLoginContext } from "./Login"; import { CountDown } from "./CountDown"; export interface CaptchaProps extends UserNameProps { action?: string onGetCaptcha?():void field?: string countDownNumber?: number } export function Captcha (props: CaptchaProps) { const [action, setAction] = createSignal(props.action ?? ''); const [counting, setCounting] = createSignal(false); const name = props.name ?? 'captcha'; const icon = props.icon ?? ; const rules = {require: useValidation().required, ...props.rules}; const messages = {require: "请输入验证码!", ...props.messages}; const placeholder = props.placeholder ?? '请输入验证码'; const size = props.size ?? 'large'; const countDownNumber = props.countDownNumber ?? 60; const text = () => { return action() ? : counting() ? { setCounting(false); }}/> : '获取验证码'; } const ctx: any = useLoginContext(); const onGetCaptcha = async () => { const url = action(); if (url) { const urls = url.split('?'); const params = new URLSearchParams(urls[1]); params.set('_', `${Date.now()}`); setAction(urls[0] + '?' + params.toString()); } else { const form = ctx?.form; if (props.field && form) { const valid = await form.checkField(props.field); if (!valid) { return; } } setCounting(true); props.onGetCaptcha && props.onGetCaptcha(); } } return }