'use client' export const runtime = 'edge' import { useEffect } from "react" import { zodResolver } from "@hookform/resolvers/zod" import { useForm } from "react-hook-form" import * as z from "zod" import { Card, CardContent, CardHeader, CardTitle } from "@/registry/new-york/ui/card" import { Input } from "@/registry/new-york/ui/input" import { Button } from "@/registry/new-york/ui/button" import { useToast } from "@/registry/new-york/hooks/use-toast" import { Tabs, TabsContent, TabsList, TabsTrigger } from "@/registry/new-york/ui/tabs" import { Icons } from "@/components/icons" import { Textarea } from "@/registry/new-york/ui/textarea" import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from "@/registry/new-york/ui/select" import { Form, FormControl, FormDescription, FormField, FormItem, FormLabel, FormMessage, } from "@/registry/new-york/ui/form" import { SiteConfigService} from "@/services/siteConfigService" import type { SiteConfig } from "@/types/site" import { Toaster } from "@/registry/new-york/ui/toaster" const formSchema = z.object({ basic: z.object({ title: z.string().min(2, { message: "标题至少需要2个字符.", }), description: z.string().min(10, { message: "描述至少需要10个字符.", }), keywords: z.string(), }), appearance: z.object({ logo: z.string().regex(/^(https?:\/\/|\/)\S+$/i, { message: "请输入有效的URL地址或相对路径", }), favicon: z.string().regex(/^(https?:\/\/|\/)\S+$/i, { message: "请输入有效的URL地址或相对路径", }), theme: z.enum(['light', 'dark', 'system']), }), navigation: z.object({ linkTarget: z.enum(['_blank', '_self']), }), }) export default function SiteSettings() { const { toast } = useToast() const form = useForm>({ resolver: zodResolver(formSchema), defaultValues: { basic: { title: "", description: "", keywords: "", }, appearance: { logo: "", favicon: "", theme: "system", }, navigation: { linkTarget: "_blank", }, }, }) useEffect(() => { const loadConfig = async () => { const siteConfigService = new SiteConfigService(); const config = await siteConfigService.getSiteConfig(); if (config) { form.reset(config); } } loadConfig() }, []) async function onSubmit(values: z.infer) { try { const siteConfigService = new SiteConfigService(); await siteConfigService.updateSiteConfig(values); toast({ title: "成功", description: "站点信息已保存", }); } catch (error) { toast({ title: "错误", description: "保存失败", variant: "destructive", }); } } return ( <>
基本信息 外观设置 导航设置 基本信息
( 网站标题 这将显示在浏览器标签页和搜索结果中 )} /> ( 网站描述