import { useCallback, useState } from 'react'; import { sendSmsCode } from '../api'; export interface UseSmsCodeReturn { /** * 发送短信验证码(失败抛出,由页面提示)。 * @param phone 手机号 * @param purpose 验证码用途(后端固定值):验证码登录传 'login',重置密码传 'reset-password' */ send: (phone: string, purpose: string) => Promise; /** 发送进行中(用于防重复点击) */ loading: boolean; /** 发送失败的错误 */ error: Error | null; } /** * 发送短信验证码。 * 验证码登录(P2)与重置密码(P2R)共用,倒计时由 CountdownButton 组件自管。 */ export function useSmsCode(): UseSmsCodeReturn { const [loading, setLoading] = useState(false); const [error, setError] = useState(null); const send = useCallback(async (phone: string, purpose: string) => { setLoading(true); setError(null); try { await sendSmsCode({ phone, purpose }); } catch (e) { const err = e instanceof Error ? e : new Error('验证码发送失败,请稍后重试'); setError(err); throw err; } finally { setLoading(false); } }, []); return { send, loading, error }; }