diff --git a/src/components/providers/ProviderCard.tsx b/src/components/providers/ProviderCard.tsx index 2e16ad6e2..792960340 100644 --- a/src/components/providers/ProviderCard.tsx +++ b/src/components/providers/ProviderCard.tsx @@ -1,4 +1,4 @@ -import { useMemo, useState, useEffect } from "react"; +import { useMemo, useState, useEffect, useRef } from "react"; import { GripVertical, ChevronDown, ChevronUp } from "lucide-react"; import { useTranslation } from "react-i18next"; import type { @@ -149,6 +149,10 @@ export function ProviderCard({ // 多套餐默认展开 const [isExpanded, setIsExpanded] = useState(false); + // 操作按钮容器 ref,用于动态计算宽度 + const actionsRef = useRef(null); + const [actionsWidth, setActionsWidth] = useState(0); + // 当检测到多套餐时自动展开 useEffect(() => { if (hasMultiplePlans) { @@ -156,6 +160,20 @@ export function ProviderCard({ } }, [hasMultiplePlans]); + // 动态获取操作按钮宽度 + useEffect(() => { + if (actionsRef.current) { + const updateWidth = () => { + const width = actionsRef.current?.offsetWidth || 0; + setActionsWidth(width); + }; + updateWidth(); + // 监听窗口大小变化 + window.addEventListener("resize", updateWidth); + return () => window.removeEventListener("resize", updateWidth); + } + }, [onTest, onOpenTerminal]); // 按钮数量可能变化时重新计算 + const handleOpenWebsite = () => { if (!isClickableUrl) { return; @@ -281,10 +299,13 @@ export function ProviderCard({ -
+
{/* 用量信息区域 - hover 时向左移动,为操作按钮腾出空间 */} -
-
+
+
{/* 多套餐时显示套餐数量,单套餐时显示详细信息 */} {hasMultiplePlans ? (
@@ -329,8 +350,11 @@ export function ProviderCard({
- {/* 操作按钮区域 - 绝对定位在右侧,hover 时滑入 */} -
+ {/* 操作按钮区域 - 绝对定位在右侧,hover 时滑入,与用量信息保持间距 */} +