import { Button, Input, Pagination } from "antd"; import { PlusOutlined } from "@ant-design/icons"; import { useNavigate } from "react-router-dom"; import { api } from "@nice/client"; import { PostType } from "@nice/common"; import { useAuth } from "@web/src/providers/auth-provider"; import { ExampleCard } from "./ExampleCard"; import { useState, useEffect, useMemo } from "react"; export function ExampleContent() { const navigate = useNavigate(); const { user, hasSomePermissions, isAuthenticated } = useAuth(); const [exampleList, setExampleList] = useState([]); const [loading, setLoading] = useState(true); const [currentPage, setCurrentPage] = useState(1); const [searchTerm, setSearchTerm] = useState(""); const pageSize = 10; // 每页显示5条案例 const isDomainAdmin = useMemo(() => { return hasSomePermissions("MANAGE_DOM_STAFF", "MANAGE_ANY_STAFF"); }, [hasSomePermissions]); const { data, isLoading } = api.post.findManyWithPagination.useQuery( { page: currentPage, pageSize: pageSize, where: { type: PostType.EXAMPLE, isPublic: true, deletedAt: null, title: searchTerm ? { contains: searchTerm, mode: "insensitive" } : undefined, }, orderBy: { updatedAt: "desc", }, }, { enabled: true, } ); useEffect(() => { if (data?.items) { setExampleList(data.items); setLoading(false); } else if (!isLoading) { setExampleList([]); setLoading(false); } }, [data, isLoading]); useEffect(() => { if (searchTerm) { setCurrentPage(1); } }, [searchTerm]); const handleAddExample = () => { navigate("/example"); }; const handlePageChange = (page) => { setCurrentPage(page); }; const handleSearch = (value: string) => { setSearchTerm(value); }; return (
setSearchTerm(e.target.value)} style={{ width: 300 }} /> {isDomainAdmin && ( )}
{loading || isLoading ? (
加载中...
) : exampleList.length > 0 ? ( <>
{exampleList.map((example) => ( ))}
{/* 分页组件 */}
) : (
{searchTerm ? `未找到标题包含"${searchTerm}"的案例` : "暂无案例分析"}
)}
); }