feature: 新增伏笔管理系统,支持可视化追踪、AI智能关联回收及章节生成时的伏笔提醒

This commit is contained in:
xiamuceer-j
2026-01-19 17:24:37 +08:00
parent 927072d16f
commit 5f25deb289
19 changed files with 4068 additions and 91 deletions
+12 -12
View File
@@ -1630,7 +1630,7 @@ export default function Chapters() {
icon={<EditOutlined />}
onClick={() => handleOpenEditor(item.id)}
>
</Button>,
(() => {
const task = analysisTasksMap[item.id];
@@ -1650,7 +1650,7 @@ export default function Chapters() {
''
}
>
{isAnalyzing ? '分析中' : '查看分析'}
{isAnalyzing ? '分析中' : '分析'}
</Button>
);
})(),
@@ -1659,7 +1659,7 @@ export default function Chapters() {
icon={<SettingOutlined />}
onClick={() => handleOpenModal(item.id)}
>
</Button>,
]}
>
@@ -1716,7 +1716,7 @@ export default function Chapters() {
icon={<EditOutlined />}
onClick={() => handleOpenEditor(item.id)}
size="small"
title="编辑内容"
title="编辑"
/>
{(() => {
const task = analysisTasksMap[item.id];
@@ -1734,7 +1734,7 @@ export default function Chapters() {
title={
!hasContent ? '请先生成章节内容' :
isAnalyzing ? '分析中' :
'查看分析'
'分析'
}
/>
);
@@ -1744,7 +1744,7 @@ export default function Chapters() {
icon={<SettingOutlined />}
onClick={() => handleOpenModal(item.id)}
size="small"
title="修改信息"
title="修改"
/>
</Space>
)}
@@ -1815,7 +1815,7 @@ export default function Chapters() {
icon={<EditOutlined />}
onClick={() => handleOpenEditor(item.id)}
>
</Button>,
(() => {
const task = analysisTasksMap[item.id];
@@ -1835,7 +1835,7 @@ export default function Chapters() {
''
}
>
{isAnalyzing ? '分析中' : '查看分析'}
{isAnalyzing ? '分析中' : '分析'}
</Button>
);
})(),
@@ -1844,7 +1844,7 @@ export default function Chapters() {
icon={<SettingOutlined />}
onClick={() => handleOpenModal(item.id)}
>
</Button>,
// 只在 one-to-many 模式下显示删除按钮
...(currentProject.outline_mode === 'one-to-many' ? [
@@ -1940,7 +1940,7 @@ export default function Chapters() {
icon={<EditOutlined />}
onClick={() => handleOpenEditor(item.id)}
size="small"
title="编辑内容"
title="编辑"
/>
{(() => {
const task = analysisTasksMap[item.id];
@@ -1958,7 +1958,7 @@ export default function Chapters() {
title={
!hasContent ? '请先生成章节内容' :
isAnalyzing ? '分析中' :
'查看分析'
'分析'
}
/>
);
@@ -1968,7 +1968,7 @@ export default function Chapters() {
icon={<SettingOutlined />}
onClick={() => handleOpenModal(item.id)}
size="small"
title="修改信息"
title="修改"
/>
{/* 只在 one-to-many 模式下显示删除按钮 */}
{currentProject.outline_mode === 'one-to-many' && (
File diff suppressed because it is too large Load Diff
+7
View File
@@ -16,6 +16,7 @@ import {
FundOutlined,
HeartOutlined,
TrophyOutlined,
BulbOutlined,
} from '@ant-design/icons';
import { useStore } from '../store';
import { useCharacterSync, useOutlineSync, useChapterSync } from '../store/hooks';
@@ -140,6 +141,11 @@ export default function ProjectDetail() {
icon: <FundOutlined />,
label: <Link to={`/project/${projectId}/chapter-analysis`}></Link>,
},
{
key: 'foreshadows',
icon: <BulbOutlined />,
label: <Link to={`/project/${projectId}/foreshadows`}></Link>,
},
{
key: 'writing-styles',
icon: <EditOutlined />,
@@ -162,6 +168,7 @@ export default function ProjectDetail() {
if (path.includes('/outline')) return 'outline';
if (path.includes('/characters')) return 'characters';
if (path.includes('/chapter-analysis')) return 'chapter-analysis';
if (path.includes('/foreshadows')) return 'foreshadows';
if (path.includes('/chapters')) return 'chapters';
if (path.includes('/writing-styles')) return 'writing-styles';
if (path.includes('/sponsor')) return 'sponsor';
+1 -1
View File
@@ -122,7 +122,7 @@ export default function ProjectWizardNew() {
narrative_perspective: '第三人称',
character_count: 5,
target_words: 100000,
outline_mode: 'one-to-many', // 默认为细化模式
outline_mode: 'one-to-one', // 默认为传统模式(1-1
}}
>
<Form.Item