"use client" import { create } from "zustand" import { Role, ROLES } from "@/lib/permissions" import { EMAIL_CONFIG } from "@/config" import { useEffect } from "react" interface Config { defaultRole: Exclude emailDomains: string emailDomainsArray: string[] adminContact: string maxEmails: number } interface ConfigStore { config: Config | null loading: boolean error: string | null fetch: () => Promise } const useConfigStore = create((set) => ({ config: null, loading: false, error: null, fetch: async () => { try { set({ loading: true, error: null }) const res = await fetch("/api/config") if (!res.ok) throw new Error("获取配置失败") const data = await res.json() as Config set({ config: { defaultRole: data.defaultRole || ROLES.CIVILIAN, emailDomains: data.emailDomains, emailDomainsArray: data.emailDomains.split(','), adminContact: data.adminContact || "", maxEmails: Number(data.maxEmails) || EMAIL_CONFIG.MAX_ACTIVE_EMAILS }, loading: false }) } catch (error) { set({ error: error instanceof Error ? error.message : "获取配置失败", loading: false }) } } })) export function useConfig() { const store = useConfigStore() useEffect(() => { if (!store.config && !store.loading) { store.fetch() } }, [store.config, store.loading]) return store }