From 50dc18a224f5803fc7b3b35bf191e5d0379fc2e0 Mon Sep 17 00:00:00 2001 From: hailin Date: Tue, 3 Feb 2026 07:58:24 -0800 Subject: [PATCH] =?UTF-8?q?feat(admin-web):=20=E7=94=A8=E6=88=B7=E7=AE=A1?= =?UTF-8?q?=E7=90=86=E9=AB=98=E7=BA=A7=E7=AD=9B=E9=80=89=E5=A2=9E=E5=8A=A0?= =?UTF-8?q?"=E5=B7=B2=E8=AE=A4=E7=A7=8D/=E6=9C=AA=E8=AE=A4=E7=A7=8D"?= =?UTF-8?q?=E8=BF=87=E6=BB=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 在用户管理页面的"用户状态"下拉框中新增"已认种"和"未认种"两个筛选选项。 实现方式: - 复用后端已有的 minAdoptions/maxAdoptions 查询参数 - "已认种"映射为 minAdoptions=1(personalAdoptionCount >= 1) - "未认种"映射为 maxAdoptions=0(personalAdoptionCount = 0) - 与原有"正常/冻结"状态筛选互斥(同一下拉框) - 切换筛选时自动重置分页到第 1 页 后端无改动:admin-service 的 ListUsersDto 和 UserQueryRepository 已支持 minAdoptions/maxAdoptions 参数及对应的 WHERE 条件。 Co-Authored-By: Claude Opus 4.5 --- .../src/app/(dashboard)/users/page.tsx | 37 +++++++++++++++++-- 1 file changed, 34 insertions(+), 3 deletions(-) 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 })); + }} + > - - + + + + )}