import { useEffect, useState } from 'react'; import { useUiStore } from '../../store/uiStore'; /** 全局 toast 消息容器(右上角,自动消失)。 */ export function ToastContainer() { const toasts = useUiStore((s) => s.toasts); const removeToast = useUiStore((s) => s.removeToast); if (toasts.length === 0) return null; return (
{toasts.map((t) => (
{t.msg}
))}
); } /** 全局确认/输入弹窗(替代 window.confirm / window.prompt)。 */ export function GlobalDialog() { const dialog = useUiStore((s) => s.dialog); const resolveDialog = useUiStore((s) => s.resolveDialog); const [value, setValue] = useState(''); useEffect(() => { if (dialog) setValue(dialog.defaultValue || ''); }, [dialog]); if (!dialog) return null; const isPrompt = dialog.kind === 'prompt'; return (
{dialog.danger ? '!' : '?'}

{dialog.title}

{dialog.message}

{isPrompt && ( setValue(e.target.value)} onKeyDown={(e) => { if (e.key === 'Enter') resolveDialog(value.trim()); if (e.key === 'Escape') resolveDialog(null); }} className="mt-2 w-full bg-gray-800 border border-gray-600 rounded px-2 py-1.5 text-xs text-white focus:outline-none focus:border-blue-500" /> )}
); }