import {
Input,
Button,
InputNumber,
Checkbox,
Card,
Empty,
Spin,
Divider,
Tooltip,
Progress,
} from 'antd';
import {
QuestionCircleOutlined,
ReloadOutlined,
EyeOutlined,
} from '@ant-design/icons';
import { useDocumentDetail } from '~/hooks/dify-dataset-manager/document-detail';
import type { DocumentDetailProps } from '~/types/dify-dataset-manager/document-detail';
import { INDEXING_STATUS_CONFIG } from '~/types/dify-dataset-manager/document-detail';
/**
* 文档详情组件
* 显示文档的分段设置,支持修改并重新处理
*/
export default function DocumentDetail({
datasetId,
document,
}: DocumentDetailProps) {
const {
settings,
previewSegments,
previewLoading,
showPreview,
saving,
isProcessing,
indexingStatus,
updateSettings,
handleReset,
handlePreview,
handleSaveAndProcess,
} = useDocumentDetail(datasetId, document);
if (!document) {
return (
);
}
return (
{/* 左侧设置区域 */}
{/* 分段设置 */}
分段设置
{/* 分块模式 */}
{/*
*/}
{/* 分段标识符 */}
updateSettings('separator', e.target.value)}
placeholder="\n\n"
disabled={isProcessing}
className="setting-input"
/>
{/* 分段最大长度 */}
updateSettings('maxTokens', value || 500)}
min={100}
max={4000}
disabled={isProcessing}
className="setting-input-number"
/>
characters
{/* 分段重叠长度 */}
updateSettings('chunkOverlap', value || 50)}
min={0}
max={500}
disabled={isProcessing}
className="setting-input-number"
/>
characters
{/* 文本预处理规则 */}
文本预处理规则
updateSettings('removeExtraSpaces', e.target.checked)}
disabled={isProcessing}
>
替换掉连续的空格、换行符和制表符
updateSettings('removeUrlsEmails', e.target.checked)}
disabled={isProcessing}
>
删除所有 URL 和电子邮件地址
{/* 索引方式 */}
索引方式
!isProcessing && updateSettings('indexingTechnique', 'high_quality')}
>
高质量
推荐
!isProcessing && updateSettings('indexingTechnique', 'economy')}
>
经济
{/* 操作按钮 */}
}
onClick={handlePreview}
loading={previewLoading}
disabled={isProcessing}
>
预览块
}
onClick={handleReset}
disabled={isProcessing}
>
重置
{/* 保存并处理按钮 */}
{/* 右侧预览区域 */}
预览
{document.name}
{showPreview ? `${previewSegments.length} 段块` : '0 段块'}
}
className="preview-card"
>
{/* 处理进度显示 */}
{isProcessing && indexingStatus && (
正在处理文档...
{INDEXING_STATUS_CONFIG[indexingStatus]?.text || '处理中...'}
)}
{/* 预览内容 */}
{!isProcessing && (
<>
{previewLoading ? (
) : !showPreview ? (
) : previewSegments.length === 0 ? (
) : (
{previewSegments.map((segment, index) => (
#{index + 1}
{segment.word_count} 字符
{segment.content}
))}
)}
>
)}
);
}