Files
leaudit-platform-frontend/app/components/dify-dataset-manager/index.tsx
T
TanWenyan 3f5c23123b feat: 添加对话应用选择和知识库切换功能
- 新增对话应用管理模块(dify-chat-apps),支持获取和切换对话应用
- 优化对话应用切换后自动刷新会话列表功能
- 知识库管理页面新增下拉选择器,支持切换不同知识库
- API 层支持 app_id 参数传递,实现多应用会话隔离

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-12-08 01:44:34 +08:00

145 lines
4.3 KiB
TypeScript

import { Spin } from 'antd';
import DatasetLayout from './layout';
import DocumentList from './document-list';
import DocumentDetail from './document-detail';
import RetrieveTest from './retrieve-test';
import DatasetSettings from './dataset-settings';
import AreaDatasetConfig from './area-dataset-config';
import { useDatasetManager } from '~/hooks/dify-dataset-manager';
import '../../styles/components/dify-dataset-manager/index.css';
/**
* 知识库管理主组件
* 带左侧菜单栏的完整布局
*/
export default function DatasetManager() {
const {
// 状态
dataset,
loadingDataset,
documents,
loadingDocuments,
documentTotal,
documentPage,
documentPageSize,
inited,
error,
activeTab,
selectedDocument,
// 知识库列表(基于权限)
availableDatasets,
loadingAvailableDatasets,
// 方法
handlePageChange,
handleDocumentDeleted,
handleDocumentStatusChanged,
handleRefresh,
handleViewDocument,
handleBackToDocuments,
handleTabChange,
handleDatasetUpdated,
handleDatasetChange,
} = useDatasetManager();
// 加载中状态
if (!inited || loadingDataset) {
return (
<div className="dataset-manager-wrapper">
<div className="dataset-loading-state">
<Spin size="large" />
<span className="loading-text">...</span>
</div>
</div>
);
}
// 错误状态
if (error) {
return (
<div className="dataset-manager-wrapper">
<div className="dataset-error-state">
<i className="ri-error-warning-line error-icon"></i>
<h3></h3>
<p>{error}</p>
</div>
</div>
);
}
/**
* 渲染右侧内容区
*/
const renderContent = () => {
// 文档菜单
if (activeTab === 'documents') {
// 如果选中了文档,显示文档详情
if (selectedDocument) {
return (
<DocumentDetail
datasetId={dataset?.id || ''}
document={selectedDocument}
/>
);
}
// 否则显示文档列表
return (
<DocumentList
datasetId={dataset?.id || ''}
datasetName={dataset?.name || ''}
documents={documents}
loading={loadingDocuments}
total={documentTotal}
page={documentPage}
pageSize={documentPageSize}
onPageChange={handlePageChange}
onDocumentDeleted={handleDocumentDeleted}
onDocumentStatusChanged={handleDocumentStatusChanged}
onRefresh={handleRefresh}
onViewDocument={handleViewDocument}
/>
);
}
// 召回测试菜单
if (activeTab === 'retrieve') {
return <RetrieveTest datasetId={dataset?.id || ''} />;
}
// 配置管理菜单
if (activeTab === 'area-config') {
return <AreaDatasetConfig />;
}
// 设置菜单
if (activeTab === 'settings') {
return (
<DatasetSettings
dataset={dataset}
onDatasetUpdated={handleDatasetUpdated}
/>
);
}
return null;
};
return (
<div className="dataset-manager-wrapper">
<DatasetLayout
dataset={dataset}
activeTab={activeTab}
onTabChange={handleTabChange}
showBackButton={activeTab === 'documents' && !!selectedDocument}
onBack={handleBackToDocuments}
availableDatasets={availableDatasets}
loadingAvailableDatasets={loadingAvailableDatasets}
onDatasetChange={handleDatasetChange}
>
{renderContent()}
</DatasetLayout>
</div>
);
}