'use client'; import React, { useState, useEffect } from 'react'; import { motion, AnimatePresence } from 'framer-motion'; import { Upload, Library, Search, Music2, ChevronDown } from 'lucide-react'; import { cn } from '@/public/lib/utils'; interface ReplaceMusicModalProps { isOpen: boolean; activeReplaceMethod: string; onClose: () => void; onMusicSelect: (music: any) => void; } export function ReplaceMusicModal({ isOpen, activeReplaceMethod, onClose, onMusicSelect }: ReplaceMusicModalProps) { const [activeMethod, setActiveMethod] = useState(activeReplaceMethod); const [searchQuery, setSearchQuery] = useState(''); useEffect(() => { setActiveMethod(activeReplaceMethod); }, [activeReplaceMethod]); // 模拟音乐库数据 const mockLibraryMusics = [ { id: 1, name: 'Upbeat Pop', duration: '02:35', genre: '流行音乐', url: 'https://example.com/music1.mp3' }, { id: 2, name: 'Chill Lofi', duration: '03:15', genre: '轻音乐', url: 'https://example.com/music2.mp3' }, { id: 3, name: 'Epic Orchestra', duration: '04:20', genre: '管弦乐', url: 'https://example.com/music3.mp3' }, ]; const handleFileUpload = (event: React.ChangeEvent) => { const file = event.target.files?.[0]; if (file) { // 处理文件上传 console.log('Uploading file:', file); } }; return ( {isOpen && ( <> {/* 背景遮罩 */} {/* 弹窗内容 */}
{/* 标题栏 */}

Replace music

{/* 主要内容区域 */}
{/* 替换方式选择 */}
setActiveMethod('upload')} whileHover={{ scale: 1.02 }} whileTap={{ scale: 0.98 }} > Upload music setActiveMethod('library')} whileHover={{ scale: 1.02 }} whileTap={{ scale: 0.98 }} > Library
{/* 内容区域 */} {activeMethod === 'upload' && ( )} {activeMethod === 'library' && ( {/* 搜索框 */}
setSearchQuery(e.target.value)} />
{/* 音乐列表 */}
{mockLibraryMusics.map((music) => ( onMusicSelect(music)} >

{music.name}

{music.duration}

{music.genre}

))}
)}
{/* 底部操作栏 */}
Reset Apply
)}
); }