diff --git a/frontend/admin-web/src/app/(dashboard)/users/page.tsx b/frontend/admin-web/src/app/(dashboard)/users/page.tsx index fa66f9c3..fbbd33b9 100644 --- a/frontend/admin-web/src/app/(dashboard)/users/page.tsx +++ b/frontend/admin-web/src/app/(dashboard)/users/page.tsx @@ -49,11 +49,32 @@ export default function UsersPage() { const [keyword, setKeyword] = useState(''); const [showFilters, setShowFilters] = useState(false); const [selectedRows, setSelectedRows] = useState([]); + // 用户状态/认种状态筛选 + // 可选值: '' (全部) | 'ACTIVE' (正常) | 'FROZEN' (冻结) | 'adopted' (已认种) | 'not_adopted' (未认种) + const [statusFilter, setStatusFilter] = useState(''); const [pagination, setPagination] = useState({ current: 1, pageSize: 10, }); + // 根据 statusFilter 映射为 API 查询参数 + // 'ACTIVE'/'FROZEN' → status 参数(后端 DTO 校验要求大写) + // 'adopted' → minAdoptions: 1(personalAdoptionCount >= 1) + // 'not_adopted' → maxAdoptions: 0(personalAdoptionCount = 0) + const filterParams = (() => { + switch (statusFilter) { + case 'ACTIVE': + case 'FROZEN': + return { status: statusFilter }; + case 'adopted': + return { minAdoptions: 1 }; + case 'not_adopted': + return { maxAdoptions: 0 }; + default: + return {}; + } + })(); + // 使用 React Query hooks 获取用户列表 const { data: usersData, @@ -62,6 +83,7 @@ export default function UsersPage() { refetch, } = useUsers({ keyword: keyword || undefined, + ...filterParams, page: pagination.current, pageSize: pagination.pageSize, sortBy: 'registeredAt', @@ -290,10 +312,19 @@ export default function UsersPage() { - { + setStatusFilter(e.target.value); + setPagination((prev) => ({ ...prev, current: 1 })); + }} + > - - + + + + )}