"use client"; import { useState } from "react"; import { Globe, Loader2, Save, UserPlus, } from "lucide-react"; import { apiUpdateSiteSettings, type PublicSettings, } from "@/lib/api"; import { toast } from "@/lib/toast"; function Switch({ checked, disabled, onChange, label, }: { checked: boolean; disabled?: boolean; onChange: () => void; label: string; }) { return ( ); } export default function SettingsAdmin({ initial }: { initial: PublicSettings }) { const [siteName, setSiteName] = useState(initial.site_name); const [siteDescription, setSiteDescription] = useState(initial.site_description); const [allowRegister, setAllowRegister] = useState(initial.allow_register); const [savedName, setSavedName] = useState(initial.site_name); const [savedDesc, setSavedDesc] = useState(initial.site_description); const [saving, setSaving] = useState(false); const [togglingReg, setTogglingReg] = useState(false); const dirty = siteName.trim() !== savedName || siteDescription.trim() !== savedDesc; const saveIdentity = async () => { if (saving) return; const name = siteName.trim(); if (!name) { toast("站点名称不能为空"); return; } setSaving(true); try { const res = await apiUpdateSiteSettings({ site_name: name, site_description: siteDescription.trim(), }); setSiteName(res.site_name); setSiteDescription(res.site_description); setSavedName(res.site_name); setSavedDesc(res.site_description); toast("站点信息已保存", "ok"); } catch (e) { toast(e instanceof Error ? e.message : "保存失败"); } finally { setSaving(false); } }; const toggleRegister = async () => { if (togglingReg) return; const next = !allowRegister; setTogglingReg(true); try { const res = await apiUpdateSiteSettings({ allow_register: next }); setAllowRegister(res.allow_register); toast(res.allow_register ? "已开放注册" : "已关闭注册", "ok"); } catch (e) { toast(e instanceof Error ? e.message : "保存失败"); } finally { setTogglingReg(false); } }; return (

站点设置

配置站点名称、简介与注册开关;主题色请到「外观」页调整

基本信息

用于页眉品牌、页脚版权与 SEO 元信息

setSiteName(e.target.value)} placeholder="姜十三论坛" />