import { useState } from "react"; import { useMutation, useQuery, useQueryClient } from "@tanstack/react-query"; import { archiveAnnouncement, createAnnouncement, fetchAnnouncements, updateAnnouncement } from "../api/announcements"; import { PageHeader } from "../components/common/PageHeader"; import { Button } from "../components/ui/button"; import { Input } from "../components/ui/input"; import { Label } from "../components/ui/label"; import { toast } from "sonner"; export function PortalAnnouncementsPage() { const queryClient = useQueryClient(); const [title, setTitle] = useState(""); const [summary, setSummary] = useState(""); const [linkUrl, setLinkUrl] = useState(""); const [priority, setPriority] = useState("100"); const listQuery = useQuery({ queryKey: ["announcements", "manage"], queryFn: () => fetchAnnouncements(true) }); const refresh = () => queryClient.invalidateQueries({ queryKey: ["announcements"] }); const createMutation = useMutation({ mutationFn: () => createAnnouncement({ title, summary, linkUrl: linkUrl || null, priority: Number(priority || 100) }), onSuccess: async () => { setTitle(""); setSummary(""); setLinkUrl(""); setPriority("100"); await refresh(); toast.success("公告已创建"); }, }); const archiveMutation = useMutation({ mutationFn: archiveAnnouncement, onSuccess: async () => { await refresh(); toast.success("公告已归档"); }, }); const toggleMutation = useMutation({ mutationFn: ({ id, enabled }: { id: string; enabled: boolean }) => updateAnnouncement(id, { enabled }), onSuccess: async () => { await refresh(); toast.success("公告状态已更新"); }, }); return (