"use client"; import { useState } from "react"; import { useQuery, useMutation, useQueryClient } from "@tanstack/react-query"; import api from "@/lib/api"; import { Button } from "@/components/ui/button"; import { Card, CardContent, CardHeader, CardTitle } from "@/components/ui/card"; import { Badge } from "@/components/ui/badge"; import { Textarea } from "@/components/ui/textarea"; import { Dialog, DialogContent, DialogHeader, DialogTitle } from "@/components/ui/dialog"; import { toast } from "sonner"; interface Review { id: string; app_id: string; version: string; submit_comment?: string; submitted_at: string; app_name?: string; app_description?: string; app_icon?: string; submitter_name: string; } export default function ReviewsPage() { const queryClient = useQueryClient(); const [rejectDialog, setRejectDialog] = useState(null); const [rejectComment, setRejectComment] = useState(""); const { data: reviews } = useQuery({ queryKey: ["pendingReviews"], queryFn: () => api.get("/api/v1/admin/reviews"), }); const approve = useMutation({ mutationFn: (id: string) => api.post(`/api/v1/admin/reviews/${id}/approve`), onSuccess: () => { queryClient.invalidateQueries({ queryKey: ["pendingReviews"] }); toast.success("已通过审核"); }, onError: (err: Error) => toast.error(err.message), }); const reject = useMutation({ mutationFn: ({ id, comment }: { id: string; comment: string }) => api.post(`/api/v1/admin/reviews/${id}/reject`, { comment }), onSuccess: () => { queryClient.invalidateQueries({ queryKey: ["pendingReviews"] }); setRejectDialog(null); setRejectComment(""); toast.success("已驳回"); }, onError: (err: Error) => toast.error(err.message), }); return (

审核队列

{reviews?.length || 0} 待审核
{reviews?.length === 0 ? ( 暂无待审核应用 ) : (
{reviews?.map((review) => (
{review.app_icon || "🤖"}
{review.app_name}

{review.app_description}

v{review.version}
提交者: {review.submitter_name} | 提交时间: {new Date(review.submitted_at).toLocaleString("zh-CN")} {review.submit_comment && ( <> | 说明: {review.submit_comment} )}
))}
)} setRejectDialog(null)}> 驳回审核