diff --git a/frontend/src/pages/admin/AdminGroupsPage.tsx b/frontend/src/pages/admin/AdminGroupsPage.tsx index 2a8cb29..d636e06 100644 --- a/frontend/src/pages/admin/AdminGroupsPage.tsx +++ b/frontend/src/pages/admin/AdminGroupsPage.tsx @@ -1,5 +1,5 @@ import { useState, useEffect, useCallback, useMemo } from "react"; -import { Table, Button, Modal, Input, Checkbox, Tag, App, Spin, Empty, Select, Tooltip } from "antd"; +import { Table, Button, Modal, Input, Checkbox, Tag, App, Spin, Empty, Select } from "antd"; import { Plus, Pencil, Trash2, UserPlus, Crown, ShieldCheck } from "lucide-react"; import { useAuth } from "../../contexts/AuthContext"; import { isSuperAdmin } from "../../constants/task"; @@ -385,36 +385,47 @@ export default function AdminGroupsPage() { ) : detail.members.length === 0 ? ( ) : ( - /* 标签云而非表格:成员多时一人一行要滚很久,标签能一行放好几个。 - 有权限时:点标签正文切换组长、点 × 移除;无权限时纯展示。 */ -
+ /* 方块网格:每个成员一格,只显示中文名,全部铺开不做滚动。 + 自动按容器宽度铺排(auto-fill),窗口越宽一行放得越多。 + 有权限时:点方块切换组长、悬停右上角出现移除;无权限时纯展示。 */ +
{detail.members.map((m) => ( - { e.preventDefault(); handleRemoveMember(m.user_id); }} - className="!m-0 !px-2.5 !py-1 !text-sm" + title={ + detail.can_manage_members + ? `${m.display_name}(${m.user_id})· ${m.is_leader ? "点击取消组长" : "点击设为组长"}` + : `${m.display_name}(${m.user_id})` + } + onClick={() => { + if (detail.can_manage_members) handleToggleLeader(m.user_id, !m.is_leader); + }} + className={`group relative flex h-11 select-none items-center justify-center rounded-lg border px-2 text-sm transition-colors ${ + m.is_leader + ? "border-amber-300 bg-amber-50 font-medium text-amber-800" + : "border-gray-200 bg-white text-gray-700" + } ${ + detail.can_manage_members + ? "cursor-pointer hover:border-blue-300 hover:bg-blue-50" + : "" + }`} > - - { - if (detail.can_manage_members) handleToggleLeader(m.user_id, !m.is_leader); - }} + {m.is_leader && ( + + )} + {m.display_name} + + {/* 移除:默认藏起来,悬停该方块才出现,避免误点 */} + {detail.can_manage_members && ( + + )} +
))}
)}