"use client" import { Button } from "@/components/ui/button" import { Settings } from "lucide-react" import { useToast } from "@/components/ui/use-toast" import { useState, useEffect } from "react" import { Role, ROLES } from "@/lib/permissions" import { Input } from "@/components/ui/input" import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue, } from "@/components/ui/select" import { EMAIL_CONFIG } from "@/config" export function WebsiteConfigPanel() { const [defaultRole, setDefaultRole] = useState("") const [emailDomains, setEmailDomains] = useState("") const [adminContact, setAdminContact] = useState("") const [maxEmails, setMaxEmails] = useState(EMAIL_CONFIG.MAX_ACTIVE_EMAILS.toString()) const [loading, setLoading] = useState(false) const { toast } = useToast() useEffect(() => { fetchConfig() }, []) const fetchConfig = async () => { const res = await fetch("/api/config") if (res.ok) { const data = await res.json() as { defaultRole: Exclude, emailDomains: string, adminContact: string, maxEmails: string } setDefaultRole(data.defaultRole) setEmailDomains(data.emailDomains) setAdminContact(data.adminContact) setMaxEmails(data.maxEmails || EMAIL_CONFIG.MAX_ACTIVE_EMAILS.toString()) } } const handleSave = async () => { setLoading(true) try { const res = await fetch("/api/config", { method: "POST", headers: { "Content-Type": "application/json" }, body: JSON.stringify({ defaultRole, emailDomains, adminContact, maxEmails: maxEmails || EMAIL_CONFIG.MAX_ACTIVE_EMAILS.toString() }), }) if (!res.ok) throw new Error("保存失败") toast({ title: "保存成功", description: "网站设置已更新", }) } catch (error) { toast({ title: "保存失败", description: error instanceof Error ? error.message : "请稍后重试", variant: "destructive", }) } finally { setLoading(false) } } return (

网站设置

新用户默认角色:
邮箱域名:
setEmailDomains(e.target.value)} placeholder="多个域名用逗号分隔,如: moemail.app,bitibiti.com" />
管理员联系方式:
setAdminContact(e.target.value)} placeholder="如: 微信号、邮箱等" />
最大邮箱数量:
setMaxEmails(e.target.value)} placeholder={`默认为 ${EMAIL_CONFIG.MAX_ACTIVE_EMAILS}`} />
) }