'use client' import Image from 'next/image' import { AlertTriangle, Trash2 } from 'lucide-react' import { Button } from '@/components/ui/button' import { Dialog, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogTitle, } from '@/components/ui/dialog' import { Spinner } from '@/components/ui/spinner' import { Level } from '@/types' interface DeleteConfirmDialogProps { open: boolean onOpenChange: (open: boolean) => void level: Level | null /** 列表里的行号(0-based),用于展示 #序号 */ index?: number isLoading?: boolean onConfirm: () => void } /** * 关卡删除二次确认弹窗。 * 展示关卡预览(双图 + 答案)让用户确认删除对象,而不是盲点。 * - 确认按钮 autoFocus:Enter 直接确认,Esc 由 Radix Dialog 默认关闭 * - 删除中禁用所有交互并显示 Spinner */ export function DeleteConfirmDialog({ open, onOpenChange, level, index, isLoading = false, onConfirm, }: DeleteConfirmDialogProps) { return ( { // 删除进行中不允许关闭,避免中途点取消造成状态不一致 if (isLoading && !next) return onOpenChange(next) }} > {/* 红色警告图标 + 软光晕,视觉焦点 */}
确认删除此关卡? 删除后将立即从小程序端下线,且 无法恢复 。请确认无误。 {/* 关卡预览卡片 */} {level && (
待删除关卡 {typeof index === 'number' && index >= 0 && ( #{index + 1} )}
{level.image1Url ? ( 图片1 ) : null}
{level.image2Url ? ( 图片2 ) : null}
{level.answer}
{level.punchline ? (
{level.punchline}
) : (
(无谐音梗)
)}
)}
) }