import { useState, useCallback, useEffect } from "react"; import { motion, AnimatePresence } from "framer-motion"; import { useSearchParams } from "react-router-dom"; import { SendCard } from "./SendCard"; import { Spin, Empty, Input, Alert, Pagination } from "antd"; import { api, useTerm } from "@nice/client"; import DepartmentSelect from "@web/src/components/models/department/department-select"; import debounce from "lodash/debounce"; import { SearchOutlined } from "@ant-design/icons"; import WriteHeader from "./WriteHeader"; export default function WriteLetterPage() { const [searchParams] = useSearchParams(); const termId = searchParams.get("termId"); const [searchQuery, setSearchQuery] = useState(""); const [selectedDept, setSelectedDept] = useState(); const [currentPage, setCurrentPage] = useState(1); const pageSize = 10; const { getTerm } = useTerm(); const { data, isLoading, error } = api.staff.findManyWithPagination.useQuery({ page: currentPage, pageSize, where: { deptId: selectedDept, OR: [ { showname: { contains: searchQuery, }, }, { username: { contains: searchQuery, }, }, ], }, orderBy: { order: "desc", }, // orderBy:{ // } }); const resetPage = useCallback(() => { setCurrentPage(1); }, []); // Reset page when search or department changes useEffect(() => { resetPage(); }, [searchQuery, selectedDept, resetPage]); return (
{/* Search and Filter Section */}
} placeholder="搜索领导姓名或职级..." onChange={debounce( (e) => setSearchQuery(e.target.value), 300 )} size="large" />
{error && ( )}
{isLoading ? (
) : data?.items.length > 0 ? ( {data?.items.map((item: any) => ( ))} ) : ( )}
{/* Pagination */} {data?.items.length > 0 && (
{ setCurrentPage(page); window.scrollTo(0, 0); }} showSizeChanger={false} showTotal={(total) => `共 ${total} 条记录`} />
)}
); }