From 1f9d373c08a5c165c1476f6cd674d0074e718140 Mon Sep 17 00:00:00 2001 From: logan Date: Sun, 31 May 2026 23:22:08 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E5=AE=A1=E6=89=B9=E6=B5=81=E7=A8=8B?= =?UTF-8?q?=E7=BC=96=E8=BE=91=E5=99=A8=E6=8C=89=E6=AD=A5=E9=AA=A4=E7=B1=BB?= =?UTF-8?q?=E5=9E=8B=E8=BF=87=E6=BB=A4=E5=8F=AF=E9=80=89=E7=94=A8=E6=88=B7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 审核阶段: 只显示 admin/superadmin/dba/auditor 角色用户 - 执行阶段: 只显示 admin/superadmin/dba 角色用户 - 全选按钮也基于过滤后的用户列表 - UserDropdown 改用 fixed 定位避免 overflow 裁剪 --- frontend/src/pages/WorkflowPage.tsx | 40 ++++++++++++++++++++++++----- 1 file changed, 33 insertions(+), 7 deletions(-) diff --git a/frontend/src/pages/WorkflowPage.tsx b/frontend/src/pages/WorkflowPage.tsx index 58c8873..201dbdd 100644 --- a/frontend/src/pages/WorkflowPage.tsx +++ b/frontend/src/pages/WorkflowPage.tsx @@ -1,4 +1,4 @@ -import { useState, useEffect, useCallback } from 'react'; +import { useState, useEffect, useCallback, useRef } from 'react'; import { Plus, Edit2, Eye, ToggleLeft, ToggleRight, GitBranch, Users, CheckCircle, ArrowRight, Shield, Trash2, X, ChevronDown, ChevronUp, @@ -99,15 +99,30 @@ interface UserDropdownProps { function UserDropdown({ users, selectedIds, label, onToggle, onToggleAll, onClear, getUserName }: UserDropdownProps) { const [open, setOpen] = useState(false); + const triggerRef = useRef(null); const ids = Array.isArray(selectedIds) ? selectedIds : []; const allSelected = ids.length === users.length && users.length > 0; + const [dropdownPos, setDropdownPos] = useState({ top: 0, left: 0, width: 0 }); + + const updatePos = () => { + if (triggerRef.current) { + const rect = triggerRef.current.getBoundingClientRect(); + setDropdownPos({ top: rect.bottom + 4, left: rect.left, width: rect.width }); + } + }; + + const handleToggle = () => { + if (!open) updatePos(); + setOpen(!open); + }; return (
{/* Trigger */}
)} - {/* Dropdown */} + {/* Dropdown — fixed positioning to escape overflow clipping */} {open && ( <>
setOpen(false)} /> -
+
{/* Select all / Clear */}