接口地址修改

This commit is contained in:
fengxiangdebaozi committed 2026-06-10 18:58:55 +08:00
1 parent 19aeba5fab
commit cf5550ab0a
2 files changed
+66 -24

No files matched your search

@@ -62,8 +62,13 @@ export const sidebarMenuItems: MenuItem[] = [
path: "/page/strategy/qa/multi-agent-roundtable", path: "/page/strategy/qa/multi-agent-roundtable",
}, },
// { id: "expert-qa", label: "专家问答", icon: Brain, path: "/page/strategy/qa/expert-qa" }, // { id: "expert-qa", label: "专家问答", icon: Brain, path: "/page/strategy/qa/expert-qa" },
{ id: "qa-zzjc", label: "zzjc支持", icon: Bot }, {
{ id: "qa-zzxd", label: "zzXD应用", icon: Layout }, id: "qa-zzjc",
label: "zzjc支持",
icon: Bot,
path: "/page/strategy/agents/6bf/chats/new",
},
{ id: "qa-zzxd", label: "zzXD应用", icon: Layout, path: "/page/strategy/agents/10d69686718349688e58a8790cb61024/chats/new", },
{ id: "qa-research", label: "课题研究", icon: FileText, path: "/page/canvas/ai-writing" }, { id: "qa-research", label: "课题研究", icon: FileText, path: "/page/canvas/ai-writing" },
], ],
}, },
@@ -289,6 +289,43 @@ function ChainCard({
const deletedCount = chain.seats.length - survivingCount; const deletedCount = chain.seats.length - survivingCount;
const usable = survivingCount >= CHAIN_MIN_SEATS; const usable = survivingCount >= CHAIN_MIN_SEATS;
// ── 席位编排(体现「同层并行 · 层间串行」)─────────────────────────────
// 名称回退表:实时 name(nameById)→ 落库快照(seat.name)→ agent_id。
const seatById = new Map(chain.seats.map((s) => [s.agent_id, s] as const));
// 带 stages(分层编排)按 stages 渲染(过滤空阶段);否则每席位各成一段、顺序串行。
const stages =
chain.stages && chain.stages.length > 0
? chain.stages.filter((s) => s.length > 0)
: chain.seats.map((s) => [s.agent_id]);
// 跨阶段累加的全局序号 —— 决定头像配色,与展平 seats 顺序对齐。
const orderById = new Map<string, number>();
let seatOrder = 0;
for (const stageIds of stages) {
for (const id of stageIds) {
orderById.set(id, seatOrder);
seatOrder += 1;
}
}
// 单个席位 tag:存活按配色,已删除置灰删除线(保留旧行为)。
const seatTag = (agentId: string) => {
const alive = isExisting(agentId);
const label = nameById.get(agentId) ?? seatById.get(agentId)?.name ?? agentId;
return (
<span
key={`tag-${agentId}`}
className={cn(
"rounded border px-1.5 py-0.5 text-[11px] font-medium",
alive
? chainTagClasses(getAvatarTypeFor(agentId, orderById.get(agentId) ?? 0))
: "border-dashed border-border bg-muted text-muted-foreground/60 line-through",
)}
title={alive ? undefined : "该智能体已不存在"}
>
{label}
</span>
);
};
return ( return (
<button <button
type="button" type="button"
@@ -322,36 +359,36 @@ function ChainCard({
<div className="mt-1 line-clamp-1 text-xs text-muted-foreground">{chain.description}</div> <div className="mt-1 line-clamp-1 text-xs text-muted-foreground">{chain.description}</div>
)} )}
{/* 智能体名 tag(按顺序,← 箭头连接) */} {/* 席位编排:按 stage 分组——并行阶段竖向并列在虚线框里,阶段之间用 → 串联。
不用 <Fragment>:dev 期 tagger 会往 Fragment 注入 data-lov-id 触发 React 警告,
这里用带 key 的扁平数组(箭头 + 阶段),注入落到真实元素上即可。 */}
<div className="mt-2 flex flex-wrap items-center gap-1"> <div className="mt-2 flex flex-wrap items-center gap-1">
{chain.seats.flatMap((seat, i) => { {stages.flatMap((stageIds, stageIdx) => {
const alive = isExisting(seat.agent_id);
const label = nameById.get(seat.agent_id) ?? seat.name ?? seat.agent_id;
// 不用 <Fragment>:dev 期 tagger 会往 Fragment 注入 data-lov-id 触发 React 警告,
// 这里改成带 key 的扁平数组(箭头 + tag),注入落到真实元素上即可。
const nodes: ReactNode[] = []; const nodes: ReactNode[] = [];
if (i > 0) { if (stageIdx > 0) {
nodes.push( nodes.push(
<ArrowRightIcon <ArrowRightIcon
key={`arrow-${seat.agent_id}`} key={`arrow-${stageIdx}`}
className="size-3 shrink-0 text-muted-foreground/50" className="size-3 shrink-0 text-muted-foreground/50"
/>, />,
); );
} }
nodes.push( if (stageIds.length > 1) {
<span // 并行阶段:席位竖向并列在虚线框里,左上角标「并行 N」。
key={`tag-${seat.agent_id}`} nodes.push(
className={cn( <div
"rounded border px-1.5 py-0.5 text-[11px] font-medium", key={`stage-${stageIdx}`}
alive className="relative flex flex-col gap-1 rounded-lg border border-dashed border-primary/40 bg-primary/[0.04] px-1.5 pb-1.5 pt-2.5"
? chainTagClasses(getAvatarTypeFor(seat.agent_id, i)) >
: "border-dashed border-border bg-muted text-muted-foreground/60 line-through", <span className="pointer-events-none absolute -top-2 left-1.5 rounded-full bg-card px-1.5 text-[10px] font-semibold leading-tight text-primary">
)} 并行 {stageIds.length}
title={alive ? undefined : "该智能体已不存在"} </span>
> {stageIds.map((id) => seatTag(id))}
{label} </div>,
</span>, );
); } else {
nodes.push(seatTag(stageIds[0]));
}
return nodes; return nodes;
})} })}
</div> </div>