From 788d7a7f789ea3cf9db5f7cc73c8bb232d095283 Mon Sep 17 00:00:00 2001 From: duxingchen Date: Fri, 28 Aug 2026 13:54:43 +0800 Subject: [PATCH] =?UTF-8?q?fix(=E6=93=8D=E4=BD=9C=E7=BB=9F=E8=AE=A1):=20?= =?UTF-8?q?=E5=85=A8=E4=B8=8D=E9=80=89=E7=94=9F=E6=95=88=E2=80=94=E2=80=94?= =?UTF-8?q?=E9=BB=98=E8=AE=A4=E5=85=A8=E9=80=89=EF=BC=8C=E5=85=A8=E4=B8=8D?= =?UTF-8?q?=E9=80=89=E5=90=8E=E6=98=BE=E7=A4=BA=E7=A9=BA=E6=80=81=E6=8F=90?= =?UTF-8?q?=E7=A4=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 打开抽屉默认全选所有人(宫格高亮+显示全部) - 点「全不选」清空选择,表格显示『未选择任何人员』空态,不再退化为全部 - 首次加载自动全选;用户操作过筛选后不覆盖 --- frontend/src/pages/admin/AdminDashboard.tsx | 26 +++++++++++++++++---- 1 file changed, 22 insertions(+), 4 deletions(-) diff --git a/frontend/src/pages/admin/AdminDashboard.tsx b/frontend/src/pages/admin/AdminDashboard.tsx index 95ddee2..91e479c 100644 --- a/frontend/src/pages/admin/AdminDashboard.tsx +++ b/frontend/src/pages/admin/AdminDashboard.tsx @@ -274,7 +274,8 @@ export default function AdminDashboard() { const [opsDrawerOpen, setOpsDrawerOpen] = useState(false); const [opStats, setOpStats] = useState([]); const [opLoading, setOpLoading] = useState(false); - const [opFilterUsers, setOpFilterUsers] = useState>(new Set()); // 多选人员,空 = 全部 + const [opFilterUsers, setOpFilterUsers] = useState>(new Set()); // 多选人员 + const [opFilterTouched, setOpFilterTouched] = useState(false); // 用户是否主动操作过筛选 const [opSort, setOpSort] = useState<{ key: string; order: "asc" | "desc" } | null>(null); // 操作明细下钻 const [opDetailOpen, setOpDetailOpen] = useState(false); @@ -349,12 +350,21 @@ export default function AdminDashboard() { const openOpsDrawer = () => { setOpsDrawerOpen(true); setOpFilterUsers(new Set()); + setOpFilterTouched(false); setOpSort(null); loadUserOperations(); }; + // 首次加载完成后默认全选(显示全部);用户操作过筛选后不再自动覆盖 + useEffect(() => { + if (!opFilterTouched && opStats.length > 0) { + setOpFilterUsers(new Set(opStats.map(u => u.user_id))); + } + }, [opStats, opFilterTouched]); + // 人员多选切换 const toggleOpFilterUser = (id: string) => { + setOpFilterTouched(true); setOpFilterUsers(prev => { const next = new Set(prev); if (next.has(id)) next.delete(id); else next.add(id); @@ -362,8 +372,14 @@ export default function AdminDashboard() { }); }; // 全选 / 全不选 - const selectAllUsers = () => setOpFilterUsers(new Set(opStats.map(u => u.user_id))); - const clearAllUsers = () => setOpFilterUsers(new Set()); + const selectAllUsers = () => { + setOpFilterTouched(true); + setOpFilterUsers(new Set(opStats.map(u => u.user_id))); + }; + const clearAllUsers = () => { + setOpFilterTouched(true); + setOpFilterUsers(new Set()); + }; // 表头升降序:无 → 升序 → 降序 → 无 const toggleOpSort = (key: string) => { @@ -758,10 +774,12 @@ export default function AdminDashboard() { ) : opStats.length === 0 ? (
该时段暂无操作记录
+ ) : opFilterUsers.size === 0 ? ( +
未选择任何人员,请点击「全选」或选择人员
) : ( (() => { // 过滤 + 排序后的数据 - let list = opFilterUsers.size > 0 ? opStats.filter(u => opFilterUsers.has(u.user_id)) : opStats; + let list = opStats.filter(u => opFilterUsers.has(u.user_id)); if (opSort) { const key = opSort.key; const getVal = (u: UserOperation) => key === "receive" ? u.receive_count : key === "transfer" ? u.transfer_count : key === "record" ? u.record_count : u.total;