+ {task.plan_markdown && !currentReport && !isWriting ?
+ 报告写作配置写作只使用已保存计划和 {task.selected_source_ids.length} 条已选资料。
+
+ setTargetLength(event.target.value)} className="h-8 text-xs" aria-label="报告目标字数" />
+
+
+ : null}
+
+ {isWriting && reportJob ?
+ {reportJob.action === "followup" ? "正在回答报告追问" : reportJob.action === "rewrite" ? "正在全文改写" : "正在撰写研究报告"}
真实报告只在任务成功完成后提交;取消或失败不会覆盖已保存版本。
+ {["理解要求", "流式写入", "校验报告", "保存版本"].map((label, index) => - {index + 1}. {label}
)}
{reasoning ? 模型思考过程(不会写入报告)
{reasoning} : null}
+ : null}
+
+ {currentReport ?
+ {task.subject}{latestCommittedJob?.report_summary || task.report_summary || `${currentReport.length} 字`}
{latestRewrite ? : null}
+ onSourceSelect(selectedSources[index - 1]?.chunk_id ?? null)} />
+ : null}
+
+ {currentReport && !isWriting ?
+ 继续完善报告全文改写会保存原版本;追问只生成回答,不会覆盖报告。
+ setTargetLength(event.target.value)} className="h-8 text-xs" aria-label="改写目标字数" />
+ : null}
+
+ {(jobDraft || completedFollowups.length) ?
报告追问回答基于当前报告和已选资料,不会自动发起新检索。{jobDraft ?
: null}{completedFollowups.slice(0, 3).map((job) => job.id === reportJob?.id && jobDraft ? null : )} : null}
+
+
证据工作台
{isCollecting ? "正在收集内部证据…" : `已收集 ${task.sources.length} 条去重资料;报告引用可点击定位`}
{isCollecting ?
:
}
+ {isCollecting ?
正在执行 {task.queries.length} 个检索方向
: task.sources.length ?
资料列表
{task.sources.map((item, index) =>
)}
{source?.title || source?.filename || "资料预览"}
{source?.knowledge_base_name || "知识库"} · 段落 {typeof source?.chunk_index === "number" ? source.chunk_index + 1 : "-"}
{source?.content || "请选择一条资料查看内容。"}
{source?.url ? : null} :
未发现可用资料
}
+
+
{ if (!open) setDiffJob(null); }}
+ fileName={`${task.subject}.md`}
+ original={diffJob?.original_report || ""}
+ rewritten={diffJob?.report_markdown || ""}
+ />
+ ;
+}
diff --git a/frontend-web/src/pages/StrategyRoutes.tsx b/frontend-web/src/pages/StrategyRoutes.tsx
index bcce5f92..70b7da6a 100644
--- a/frontend-web/src/pages/StrategyRoutes.tsx
+++ b/frontend-web/src/pages/StrategyRoutes.tsx
@@ -26,6 +26,7 @@ import PositionRoundtablePage from "@/position-roundtable/pages/PositionRoundtab
import EightBfRoundtablePage from "@/eightbf-roundtable/pages/EightBfRoundtablePage";
import DashboardAgentPage from "@/roundtable-planning/pages/DashboardAgentPage";
import DeepResearchPage from "./DeepResearchPage";
+import EnterpriseResearchPage from "./EnterpriseResearchPage";
import BusinessChainListPage from "@/roundtable-planning/pages/BusinessChainListPage";
import BusinessChainEditorPage from "@/roundtable-planning/pages/BusinessChainEditorPage";
import "@/roundtable-planning/styles/roundtable-planning.css";
@@ -117,6 +118,7 @@ export default function StrategyRoutes() {
}
/>