This commit is contained in:
ryan
2026-07-13 15:08:40 +08:00
parent 08e8eea932
commit 1eff7878a1
441 changed files with 26491 additions and 18405 deletions
@@ -1,10 +1,10 @@
"use client"
'use client';
import {useEffect} from "react"
import {zodResolver} from "@hookform/resolvers/zod"
import {Loader2} from "lucide-react"
import {useForm} from "react-hook-form"
import {z} from "zod"
import {useEffect} from 'react';
import {zodResolver} from '@hookform/resolvers/zod';
import {Loader2} from 'lucide-react';
import {useForm} from 'react-hook-form';
import {z} from 'zod';
import {
AlertDialog,
@@ -14,22 +14,22 @@ import {
AlertDialogFooter,
AlertDialogHeader,
AlertDialogTitle,
} from "@/components/ui/alert-dialog"
import {Button} from "@/components/ui/button"
import {Input} from "@/components/ui/input"
import {Label} from "@/components/ui/label"
} from '@/components/ui/alert-dialog';
import {Button} from '@/components/ui/button';
import {Input} from '@/components/ui/input';
import {Label} from '@/components/ui/label';
const cleanupSchema = z.object({
keepCount: z.number().int().min(3, "最少保留 3 个历史快照"),
})
keepCount: z.number().int().min(3, '最少保留 3 个历史快照'),
});
type CleanupFormValues = z.infer<typeof cleanupSchema>
type CleanupFormValues = z.infer<typeof cleanupSchema>;
interface CleanupDialogProps {
open: boolean
onOpenChange: (open: boolean) => void
onConfirm: (keepCount: number) => void
loading: boolean
open: boolean;
onOpenChange: (open: boolean) => void;
onConfirm: (keepCount: number) => void;
loading: boolean;
}
export function CleanupDialog({
@@ -41,17 +41,17 @@ export function CleanupDialog({
const form = useForm<CleanupFormValues>({
resolver: zodResolver(cleanupSchema),
defaultValues: { keepCount: 10 },
})
});
useEffect(() => {
if (open) {
form.reset({ keepCount: 10 })
form.reset({ keepCount: 10 });
}
}, [form, open])
}, [form, open]);
const handleConfirm = form.handleSubmit((values) => {
onConfirm(values.keepCount)
})
onConfirm(values.keepCount);
});
return (
<AlertDialog open={open} onOpenChange={onOpenChange}>
@@ -63,35 +63,43 @@ export function CleanupDialog({
</AlertDialogDescription>
</AlertDialogHeader>
<div className="space-y-2">
<Label htmlFor="keepCount">保留最近快照个数</Label>
<div className='space-y-2'>
<Label htmlFor='keepCount'>保留最近快照个数</Label>
<Input
id="keepCount"
type="number"
id='keepCount'
type='number'
min={3}
disabled={loading}
{...form.register("keepCount", { valueAsNumber: true })}
{...form.register('keepCount', { valueAsNumber: true })}
/>
<p className="text-xs text-muted-foreground">默认为 10 个,最少需保留 3 个。</p>
<p className='text-xs text-muted-foreground'>
默认为 10 个,最少需保留 3 个。
</p>
{form.formState.errors.keepCount ? (
<p className="text-xs text-destructive">{form.formState.errors.keepCount.message}</p>
<p className='text-xs text-destructive'>
{form.formState.errors.keepCount.message}
</p>
) : null}
</div>
<AlertDialogFooter>
<AlertDialogCancel disabled={loading}>取消</AlertDialogCancel>
<Button variant="destructive" onClick={() => void handleConfirm()} disabled={loading}>
<Button
variant='destructive'
onClick={() => void handleConfirm()}
disabled={loading}
>
{loading ? (
<>
<Loader2 className="size-4 animate-spin mr-1" />
<Loader2 className='size-4 animate-spin mr-1' />
清理中...
</>
) : (
"确认清理"
'确认清理'
)}
</Button>
</AlertDialogFooter>
</AlertDialogContent>
</AlertDialog>
)
}
);
}