+
+
- {agent.description && (
-
- {agent.description}
+
+
+
+ {agent.name || agent.agent_id}
- )}
+ {agent.description && (
+
+ {agent.description}
+
+ )}
+
-
+ {/* 加入按钮:只有点它才加入(点卡片其它区域是看详情)。已加入显示「已加入」。 */}
+
{inChain ? (
已加入
) : (
-
{
+ e.stopPropagation();
+ onAdd();
+ }}
className={cn(
- "border border-transparent bg-muted px-2 py-1 text-[10px] font-semibold text-muted-foreground transition-all group-hover:border-primary/30 group-hover:bg-primary/10 group-hover:text-primary",
+ "inline-flex items-center gap-1 border border-primary/30 bg-primary/5 px-2 py-1 text-[10px] font-semibold text-primary transition-all hover:bg-primary/10",
R_CTRL,
)}
>
- 点击加入
-
+
+ 加入
+
)}
@@ -968,6 +1014,7 @@ function StagesColumn({
onMergeSeat,
onSplitSeat,
onStageGoalChange,
+ onSeatDetail,
}: {
stageGroups: StageGroups;
seatCount: number;
@@ -980,6 +1027,7 @@ function StagesColumn({
onMergeSeat: (agentId: string, targetStageIdx: number) => void;
onSplitSeat: (agentId: string) => void;
onStageGoalChange: (stageIdx: number, goal: string) => void;
+ onSeatDetail: (agentId: string, name?: string) => void;
}) {
// 跨 Stage 的全局序号(头像编号):每个 Stage 起始累加。
const stageStartIndex = useMemo(() => {
@@ -1073,6 +1121,7 @@ function StagesColumn({
onMergeSeat={onMergeSeat}
onSplitSeat={onSplitSeat}
onGoalChange={(goal) => onStageGoalChange(stageIdx, goal)}
+ onSeatDetail={onSeatDetail}
/>
))}
@@ -1097,6 +1146,7 @@ function StageSection({
onMergeSeat,
onSplitSeat,
onGoalChange,
+ onSeatDetail,
}: {
stageIdx: number;
group: StageGroup;
@@ -1110,6 +1160,7 @@ function StageSection({
onMergeSeat: (agentId: string, targetStageIdx: number) => void;
onSplitSeat: (agentId: string) => void;
onGoalChange: (goal: string) => void;
+ onSeatDetail: (agentId: string, name?: string) => void;
}) {
const { setNodeRef, isOver } = useDroppable({ id: STAGE_PREFIX + stageIdx });
const seats = group.seats;
@@ -1238,6 +1289,7 @@ function StageSection({
onMergeUp={() => onMergeSeat(seat.agent_id, stageIdx - 1)}
onMergeDown={() => onMergeSeat(seat.agent_id, stageIdx + 1)}
onSplit={() => onSplitSeat(seat.agent_id)}
+ onDetail={() => onSeatDetail(seat.agent_id, seat.name)}
/>
))}
@@ -1259,6 +1311,7 @@ function SeatStrip({
onMergeUp,
onMergeDown,
onSplit,
+ onDetail,
}: {
seat: ChainSeat;
globalIndex: number;
@@ -1270,6 +1323,7 @@ function SeatStrip({
onMergeUp: () => void;
onMergeDown: () => void;
onSplit: () => void;
+ onDetail: () => void;
}) {
const { attributes, listeners, setNodeRef, transform, transition, isDragging } =
useSortable({ id: SEAT_PREFIX + seat.agent_id });
@@ -1319,8 +1373,19 @@ function SeatStrip({
)}
- {/* 控制:并入上一阶段 / 独立成阶段 / 并入下一阶段 / 移除 */}
+ {/* 控制:查看详情 / 并入上一阶段 / 独立成阶段 / 并入下一阶段 / 移除 */}