From 5722fe159af64b10d44a135cb30910eed93b2f18 Mon Sep 17 00:00:00 2001 From: duxingchen Date: Fri, 28 Aug 2026 13:31:03 +0800 Subject: [PATCH] =?UTF-8?q?feat(=E6=93=8D=E4=BD=9C=E7=BB=9F=E8=AE=A1):=20?= =?UTF-8?q?=E4=BA=BA=E5=91=98=E7=AD=9B=E9=80=89=E6=94=B9=E4=B8=BA=E4=BA=BA?= =?UTF-8?q?=E5=90=8D=E5=AE=AB=E6=A0=BC=E5=A4=9A=E9=80=89=20+=20=E8=A1=A8?= =?UTF-8?q?=E5=A4=B4=E5=8D=87=E9=99=8D=E5=BA=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 人员选择从下拉改为移动端风格的人名宫格网格,支持多选(可同时看多人),全部=清空 - 接收/转交/上传备注/总次数 表头点击升降序(三态:无→升→降→无) - 移除不再使用的 antd Select --- frontend/src/pages/admin/AdminDashboard.tsx | 133 +++++++++++++------- 1 file changed, 90 insertions(+), 43 deletions(-) diff --git a/frontend/src/pages/admin/AdminDashboard.tsx b/frontend/src/pages/admin/AdminDashboard.tsx index 8f1a66d..d1db25f 100644 --- a/frontend/src/pages/admin/AdminDashboard.tsx +++ b/frontend/src/pages/admin/AdminDashboard.tsx @@ -1,10 +1,11 @@ import { useEffect, useState, useCallback } from "react"; import { Package, ClipboardList, Bell, TrendingUp, AlertTriangle, - RefreshCw, Loader2, AlertCircle, ArrowRight, Clock, MessageCircle, CheckCircle2, Users, + RefreshCw, Loader2, AlertCircle, ArrowRight, ArrowUp, ArrowDown, ArrowUpDown, + Clock, MessageCircle, CheckCircle2, Users, } from "lucide-react"; import { useNavigate } from "react-router-dom"; -import { Radio, DatePicker, Drawer, Input, Select } from "antd"; +import { Radio, DatePicker, Drawer, Input } from "antd"; import dayjs, { type Dayjs } from "dayjs"; import { fetchDashboardStats, fetchWipTasks, fetchDashboardMessages, fetchCompletedTasks, fetchRejectedTasks, fetchUserOperations, @@ -273,7 +274,8 @@ export default function AdminDashboard() { const [opsDrawerOpen, setOpsDrawerOpen] = useState(false); const [opStats, setOpStats] = useState([]); const [opLoading, setOpLoading] = useState(false); - const [opFilterUser, setOpFilterUser] = useState(""); // 人员选择,'' = 全部 + const [opFilterUsers, setOpFilterUsers] = useState>(new Set()); // 多选人员,空 = 全部 + const [opSort, setOpSort] = useState<{ key: string; order: "asc" | "desc" } | null>(null); const navigate = useNavigate(); @@ -341,10 +343,29 @@ export default function AdminDashboard() { const openOpsDrawer = () => { setOpsDrawerOpen(true); - setOpFilterUser(""); + setOpFilterUsers(new Set()); + setOpSort(null); loadUserOperations(); }; + // 人员多选切换 + const toggleOpFilterUser = (id: string) => { + setOpFilterUsers(prev => { + const next = new Set(prev); + if (next.has(id)) next.delete(id); else next.add(id); + return next; + }); + }; + + // 表头升降序:无 → 升序 → 降序 → 无 + const toggleOpSort = (key: string) => { + setOpSort(prev => { + if (!prev || prev.key !== key) return { key, order: "asc" }; + if (prev.order === "asc") return { key, order: "desc" }; + return null; + }); + }; + const onMsgSearch = (value: string) => { setMsgKeyword(value); loadMessages(value); @@ -683,19 +704,26 @@ export default function AdminDashboard() { size="large" styles={{ body: { padding: 16, background: "#f8fafc" } }} > - {/* 人员选择 */} -
-