From 20f6d0fc512868a2d2261d37fcabc7ab1f085ec7 Mon Sep 17 00:00:00 2001 From: yuxuanhui Date: Sun, 13 Sep 2026 15:09:56 +0800 Subject: [PATCH] feat(research): separate template editing and backtest preparation tabs --- frontend/src/research/ResearchWorkspace.tsx | 588 ++++++++++++-------- frontend/tests/research-outcomes.spec.ts | 1 + frontend/tests/semi-ai.spec.ts | 18 +- 3 files changed, 362 insertions(+), 245 deletions(-) diff --git a/frontend/src/research/ResearchWorkspace.tsx b/frontend/src/research/ResearchWorkspace.tsx index 05d2053..a222d54 100644 --- a/frontend/src/research/ResearchWorkspace.tsx +++ b/frontend/src/research/ResearchWorkspace.tsx @@ -13,6 +13,7 @@ import { Input, InputNumber, Table, + Tabs, TextArea, Toast, Typography, @@ -56,6 +57,7 @@ export function ResearchWorkspace({ onAction: (action: UIAction) => void; onContext: (context: PageContext) => void; }) { + const [detailTab, setDetailTab] = useState("editor"); const [detailOpen, setDetailOpen] = useState(false); const [detailMode, setDetailMode] = useState<"editor" | "experiment">( "editor", @@ -152,6 +154,7 @@ export function ResearchWorkspace({ ["open_experiment", "open_template", "open_variant"].includes(action.type) ) { setDetailOpen(true); + setDetailTab("editor"); setDetailMode( action.type === "open_experiment" ? "experiment" : "editor", ); @@ -263,6 +266,7 @@ export function ResearchWorkspace({ parent_alpha_ids: parent ? parent.split(/[,,\s]+/).filter(Boolean) : [], }); setExperiment(next); + setDetailTab("prepare"); await refresh(); } const combination = Object.values(template.variables) @@ -310,6 +314,7 @@ export function ResearchWorkspace({ setAsset(null); setTemplate(blankTemplate()); setExperiment(null); + setDetailTab("editor"); setDetailMode("editor"); setDetailOpen(true); }} @@ -381,6 +386,7 @@ export function ResearchWorkspace({ setAsset(next); setTemplate(next.content); setExperiment(null); + setDetailTab("editor"); setDetailMode("editor"); setDetailOpen(true); }) @@ -541,247 +547,339 @@ export function ResearchWorkspace({ description="此模板已删除,当前显示保留的历史版本;可另存新模板继续编辑。" /> )} -
-

研究输入与假设

- {page === "variants" && ( - <> -
- - -
-

- {method === "structure" - ? "神笔马良:保留种子与改动依据,研究新的表达式。" - : "缘分一道桥:保持表达式,为各目标市场重新固定输入后检查可用范围。"} -

- - - )} - -

- 从数据准备选择集合;每个集合可包含同范围下多个数据集的字段。 -

- {page === "variants" && method === "settings" ? ( + {page === "templates" && ( + + )} +