import { notification } from 'antd'; import { useRouter } from 'next/router'; type NotificationType = 'success' | 'info' | 'warning' | 'error'; const darkGlassStyle = { background: 'rgba(30, 32, 40, 0.95)', backdropFilter: 'blur(10px)', WebkitBackdropFilter: 'blur(10px)', border: '1px solid rgba(255, 255, 255, 0.08)', borderRadius: '8px', boxShadow: '0 4px 16px rgba(0, 0, 0, 0.4)', padding: '12px 16px', }; const messageStyle = { fontSize: '13px', fontWeight: 500, color: '#ffffff', marginBottom: '6px', display: 'flex', alignItems: 'center', gap: '6px', }; const iconStyle = { color: '#F6B266', // 警告图标颜色 background: 'rgba(246, 178, 102, 0.15)', padding: '4px', borderRadius: '6px', display: 'flex', alignItems: 'center', justifyContent: 'center', }; const descriptionStyle = { fontSize: '12px', color: 'rgba(255, 255, 255, 0.65)', marginBottom: '12px', lineHeight: '1.5', }; const btnStyle = { color: 'rgb(250 173 20 / 90%)', background: 'transparent', border: 'none', cursor: 'pointer', padding: 0, fontSize: '12px', fontWeight: 500, textDecoration: 'underline', textUnderlineOffset: '2px', textDecorationColor: 'rgb(250 173 20 / 60%)', transition: 'all 0.2s ease', }; /** 场记板动画样式 */ const clapperboardStyle = { position: 'relative' as const, width: '40px', height: '40px', marginRight: '12px', animation: 'clap 2s infinite', }; /** 场记板文字样式 */ const sceneTextStyle = { fontSize: '14px', fontFamily: 'monospace', color: '#F6B266', marginBottom: '8px', letterSpacing: '0.5px', }; /** 队列信息样式 */ const queueInfoStyle = { display: 'flex', alignItems: 'center', fontSize: '13px', color: 'rgba(255, 255, 255, 0.9)', marginBottom: '12px', background: 'rgba(246, 178, 102, 0.1)', padding: '8px 12px', borderRadius: '6px', }; /** * 场记板SVG组件 */ const Clapperboard = () => (
); /** * 显示队列等待通知 * @param position - 当前队列位置 * @param estimatedMinutes - 预计等待分钟数 */ export const showQueueNotification = (position: number, estimatedMinutes: number) => { // 生成场景号和镜次号 const sceneNumber = Math.floor(Math.random() * 5) + 1; const takeNumber = Math.floor(Math.random() * 3) + 1; notification.open({ message: null, description: (
{/* 场记板和场景信息 */}
Scene {sceneNumber} - Take {takeNumber}
AI Director's Cut
{/* 队列信息 */}
🎬 您的作品正在第 {position} 位等待制作
{/* 预计等待时间 */}
预计等待时间:约 {estimatedMinutes} 分钟
{/* 取消按钮 */}
), duration: 0, // 保持通知直到用户关闭 placement: 'topRight', style: { ...darkGlassStyle, border: '1px solid rgba(246, 178, 102, 0.2)', }, className: 'movie-queue-notification', closeIcon: ( ), }); }; // 添加必要的CSS动画 const styles = ` @keyframes clap { 0%, 100% { transform: rotate(0deg); } 5% { transform: rotate(-15deg); } 10% { transform: rotate(0deg); } } .movie-queue-notification { animation: slideIn 0.3s ease-out; } @keyframes slideIn { from { transform: translateX(100%); opacity: 0; } to { transform: translateX(0); opacity: 1; } } `; // 将样式注入到页面 if (typeof document !== 'undefined') { const styleSheet = document.createElement('style'); styleSheet.textContent = styles; document.head.appendChild(styleSheet); } // 保持现有的notification配置 notification.config({ maxCount: 3, });