"use client"; import { Alert, Form, Input, Modal } from "antd"; import { useState } from "react"; type ReasonActionModalProps = { open: boolean; title: string; okText: string; danger?: boolean; confirmLoading?: boolean; onCancel: () => void; onSubmit: (reason: string) => Promise | void; }; type ReasonFormValues = { reason: string; }; export function ReasonActionModal({ open, title, okText, danger = false, confirmLoading = false, onCancel, onSubmit, }: ReasonActionModalProps) { const [form] = Form.useForm(); const [actionLoading, setActionLoading] = useState(false); const [actionError, setActionError] = useState(); async function submit(values: ReasonFormValues) { setActionError(undefined); setActionLoading(true); try { await onSubmit(values.reason.trim()); } catch (error) { setActionError(error instanceof Error ? error.message : "操作失败,请稍后再试"); } finally { setActionLoading(false); } } return ( form.submit()} afterOpenChange={(visible) => { if (visible) form.resetFields(); setActionError(undefined); }} destroyOnHidden >
{actionError ? : null}
); }