import React, { useState, useEffect } from 'react'; import { Drawer, Form, Input, Button, DatePicker, Select, Space, App } from 'antd'; import { SaveOutlined } from '@ant-design/icons'; import dayjs from 'dayjs'; import apiClient from '../utils/apiClient'; import { buildApiUrl, API_ENDPOINTS } from '../config/api'; const { TextArea } = Input; const MeetingFormDrawer = ({ open, onClose, onSuccess, meetingId = null }) => { const { message } = App.useApp(); const [form] = Form.useForm(); const [loading, setLoading] = useState(false); const [fetching, setFetching] = useState(false); const [users, setUsers] = useState([]); const [prompts, setPrompts] = useState([]); const isEdit = Boolean(meetingId); useEffect(() => { if (!open) return; fetchOptions(); if (isEdit) { fetchMeeting(); } else { form.resetFields(); form.setFieldsValue({ meeting_time: dayjs() }); } }, [open, meetingId]); const fetchOptions = async () => { try { const [uRes, pRes] = await Promise.all([ apiClient.get(buildApiUrl(API_ENDPOINTS.USERS.LIST)), apiClient.get(buildApiUrl(API_ENDPOINTS.PROMPTS.ACTIVE('MEETING_TASK'))), ]); setUsers(uRes.data.users || []); setPrompts(pRes.data.prompts || []); } catch {} }; const fetchMeeting = async () => { setFetching(true); try { const res = await apiClient.get(buildApiUrl(API_ENDPOINTS.MEETINGS.DETAIL(meetingId))); const meeting = res.data; form.setFieldsValue({ title: meeting.title, meeting_time: dayjs(meeting.meeting_time), attendee_ids: meeting.attendee_ids || meeting.attendees?.map((a) => a.user_id).filter(Boolean) || [], prompt_id: meeting.prompt_id, tags: meeting.tags?.map((t) => t.name) || [], description: meeting.description, }); } catch { message.error('加载会议数据失败'); } finally { setFetching(false); } }; const handleSubmit = async () => { try { const values = await form.validateFields(); setLoading(true); const payload = { ...values, meeting_time: values.meeting_time.format('YYYY-MM-DD HH:mm:ss'), attendee_ids: values.attendee_ids || [], tags: values.tags?.join(',') || '', }; if (isEdit) { await apiClient.put(buildApiUrl(API_ENDPOINTS.MEETINGS.UPDATE(meetingId)), payload); message.success('会议更新成功'); } else { const res = await apiClient.post(buildApiUrl(API_ENDPOINTS.MEETINGS.CREATE), payload); if (res.code === '200') { message.success('会议创建成功'); onSuccess?.(res.data.meeting_id); onClose(); return; } } onSuccess?.(); onClose(); } catch (error) { if (!error?.errorFields) { message.error(error?.response?.data?.message || error?.response?.data?.detail || '操作失败'); } } finally { setLoading(false); } }; return ( } >