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;