import { App as AntApp, DatePicker, Form, Input, Modal, Select } from "antd"; import dayjs from "dayjs"; import { useEffect, useState } from "react"; import type { CreateMaterialRequest, Material, MaterialType } from "../types"; interface AddMaterialModalProps { onAdd: (body: CreateMaterialRequest) => Promise; onOpenChange: (open: boolean) => void; open: boolean; } interface FormValues { associatedDate: dayjs.Dayjs; description: string; materialType: MaterialType; } const MATERIAL_TYPE_OPTIONS = [ { label: "通用", value: "general" }, { label: "会议", value: "meeting" }, ]; export function AddMaterialModal({ onAdd, onOpenChange, open }: AddMaterialModalProps) { const { message } = AntApp.useApp(); const [form] = Form.useForm(); const [submitting, setSubmitting] = useState(false); useEffect(() => { if (!open) return; form.resetFields(); }, [form, open]); const handleFinish = async (values: FormValues) => { const body: CreateMaterialRequest = { associatedDate: values.associatedDate.format("YYYY-MM-DD"), description: values.description, materialType: values.materialType, }; setSubmitting(true); try { await onAdd(body); message.success("素材已添加"); onOpenChange(false); } catch (e: unknown) { message.error(`添加失败:${e instanceof Error ? e.message : "未知错误"}`); } finally { setSubmitting(false); } }; return ( onOpenChange(false)} onOk={() => void form.submit()} open={open} title="新增素材" >
void handleFinish(values)} >