import React, { useEffect, useState } from 'react'; import { Modal, Form, Select, Button, Card, Typography, message } from 'antd'; import { CloseOutlined, PlusOutlined, EditOutlined, CaretRightFilled } from '@ant-design/icons'; import VideoSelectModal from '../videoSelectModal'; import EditTitleCoverModal from '../editTitleCoverModal'; import { VideoItem } from '../types'; // Import from common types import { GzhPlanDataType, GzhPlanType } from '../../hooks/useGzhPlanList'; import { useAccountOptions } from '../../hooks/useAccountOptions'; const { Option } = Select; const { Paragraph } = Typography; interface AddPunlishPlanModalProps { visible: boolean; onCancel: () => void; onOk: (values: GzhPlanDataType) => void; // Pass form values on OK actionType: 'add' | 'edit'; planType: GzhPlanType; editPlanData?: GzhPlanDataType; isSubmiting?: boolean; } const AddPunlishPlanModal: React.FC = ({ visible, isSubmiting, onCancel, onOk, actionType, planType, editPlanData }) => { const [form] = Form.useForm(); const type = Form.useWatch('type', form); const selectVideoType = Form.useWatch('selectVideoType', form); const [selectedVideos, setSelectedVideos] = useState([]); const [isVideoSelectVisible, setIsVideoSelectVisible] = useState(false); const [playingVideo, setPlayingVideo] = useState(null); // State for video player modal const [editingVideo, setEditingVideo] = useState(null); // State for editing modal const { accountOptions, getAccountList } = useAccountOptions(); useEffect(() => { if (actionType === 'edit') { form.setFieldsValue({...editPlanData, type: editPlanData?.type.toString()}); setSelectedVideos(editPlanData?.videoList || []); } else { setSelectedVideos([]); form.setFieldsValue({ id: undefined, type: planType, publishStage: 1, selectVideoType: 0, accountId: undefined, scene: 0, videoList: [] }); } }, [actionType, editPlanData, visible]); useEffect(() => { getAccountList({accountType: planType}); }, [planType]); const onTypeChange = (value: string) => { form.setFieldsValue({ accountId: undefined }); getAccountList({ accountType: value }); } const handleOk = () => { form .validateFields() .then((values) => { // Ensure at least one video is selected before submitting if (selectedVideos.length === 0) { message.error('请至少选择一个视频'); // Use Antd message return; } const formData = { ...values }; if (formData.type === GzhPlanType.自动回复) { formData.scene = 0; } formData.videoList = selectedVideos; onOk(formData); }) .catch((info) => { console.log('Validate Failed:', info); }); }; const removeVideo = (idToRemove: number) => { setSelectedVideos(currentVideos => currentVideos.filter(video => video.videoId !== idToRemove)); }; const openVideoSelector = () => { setIsVideoSelectVisible(true); }; const handleVideoSelectionOk = (newlySelectedVideos: VideoItem[]) => { // Merge existing custom data with newly selected videos const currentCustomData = new Map>(); selectedVideos.forEach(v => { if (v.videoId) { currentCustomData.set(v.videoId, { customTitle: v.customTitle, customCover: v.customCover, customCoverType: v.customCoverType }); } }); const mergedVideos = newlySelectedVideos.map(newVideo => { const customData = currentCustomData.get(newVideo.videoId); return { ...newVideo, ...customData }; }); setSelectedVideos(mergedVideos); setIsVideoSelectVisible(false); }; const handleVideoSelectionCancel = () => { setIsVideoSelectVisible(false); }; const playVideo = (video: VideoItem) => { setPlayingVideo(video); }; const closeVideoPlayer = () => { setPlayingVideo(null); }; const openEditModal = (video: VideoItem) => { setEditingVideo(video); }; const handleEditOk = (updatedData: Partial) => { console.log('updatedData', updatedData); setSelectedVideos(currentVideos => currentVideos.map(v => v.videoId === editingVideo?.videoId ? { ...v, ...updatedData } : v ) ); setEditingVideo(null); // Close modal }; const handleEditCancel = () => { setEditingVideo(null); }; return ( <> 取消 , , ]} zIndex={10} >
{ selectVideoType === 0 ? (
{selectedVideos.map((video) => (
))} {/* Add Video Button - Conditionally Rendered */} {selectedVideos.length < 3 && (
添加视频
)} ) : (
视频由系统自动选取,不可手动选择
) }
{/* Video Selection Drawer */} v.videoId)} // Pass current selection IDs /> {/* Video Player Modal */} {playingVideo && ( )} {/* Edit Title/Cover Modal */} ); }; export default AddPunlishPlanModal;