'use client'; import { useEffect, useState } from 'react'; import { useForm, useFieldArray } from 'react-hook-form'; import { zodResolver } from '@hookform/resolvers/zod'; import * as z from 'zod'; import { Card, CardContent, CardHeader, CardTitle } from '@/components/ui/card'; import { Button } from '@/components/ui/button'; import { Input } from '@/components/ui/input'; import { Textarea } from '@/components/ui/textarea'; import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from '@/components/ui/select'; import { Form, FormControl, FormField, FormItem, FormLabel, FormMessage } from '@/components/ui/form'; import { Dialog, DialogContent, DialogHeader, DialogTitle, DialogTrigger } from '@/components/ui/dialog'; import { Switch } from '@/components/ui/switch'; import { useUser } from '@/components/user-context'; import { DIRECTION_LABELS } from '@/lib/constants'; import type { Template } from '@/types/database'; import { toast } from 'sonner'; import { Plus, Pencil, Trash2, Files, Loader2, X } from 'lucide-react'; import { getErrorMessage } from '@/lib/error-utils'; import { AlertDialog, AlertDialogAction, AlertDialogCancel, AlertDialogContent, AlertDialogDescription, AlertDialogFooter, AlertDialogHeader, AlertDialogTitle, } from '@/components/ui/alert-dialog'; const templateItemSchema = z.object({ title: z.string().min(1, '标题不能为空'), metricName: z.string().min(1, '指标名称不能为空'), unit: z.string().min(1, '单位不能为空'), direction: z.enum(['increase', 'decrease']), targetValue: z.number().positive('目标值必须大于0'), }); const templateSchema = z.object({ name: z.string().min(1, '名称不能为空'), description: z.string().optional(), project_type: z.string().optional(), items: z.array(templateItemSchema).min(1, '至少需要一个模板项'), }); type TemplateFormValues = z.infer; export default function AdminTemplatesPage() { // Force re-compile const { currentUser } = useUser(); const [templates, setTemplates] = useState([]); const [isLoading, setIsLoading] = useState(true); const [isDialogOpen, setIsDialogOpen] = useState(false); const [editingTemplate, setEditingTemplate] = useState