feat: 添加对话应用选择和知识库切换功能
- 新增对话应用管理模块(dify-chat-apps),支持获取和切换对话应用 - 优化对话应用切换后自动刷新会话列表功能 - 知识库管理页面新增下拉选择器,支持切换不同知识库 - API 层支持 app_id 参数传递,实现多应用会话隔离 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
@@ -1,10 +1,12 @@
|
||||
import { Button, Tooltip } from 'antd';
|
||||
import { Button, Tooltip, Select, Spin } from 'antd';
|
||||
import {
|
||||
FileTextOutlined,
|
||||
SearchOutlined,
|
||||
SettingOutlined,
|
||||
ArrowLeftOutlined,
|
||||
DatabaseOutlined,
|
||||
AppstoreOutlined,
|
||||
SwapOutlined,
|
||||
} from '@ant-design/icons';
|
||||
import type { DatasetLayoutProps, MenuTab, MenuItem } from '~/types/dify-dataset-manager/layout';
|
||||
|
||||
@@ -19,28 +21,63 @@ export default function DatasetLayout({
|
||||
showBackButton = false,
|
||||
onBack,
|
||||
children,
|
||||
availableDatasets = [],
|
||||
loadingAvailableDatasets = false,
|
||||
onDatasetChange,
|
||||
}: DatasetLayoutProps) {
|
||||
const menuItems: MenuItem[] = [
|
||||
{ key: 'documents', icon: <FileTextOutlined />, label: '文档' },
|
||||
{ key: 'retrieve', icon: <SearchOutlined />, label: '召回测试' },
|
||||
{ key: 'area-config', icon: <AppstoreOutlined />, label: '配置管理' },
|
||||
{ key: 'settings', icon: <SettingOutlined />, label: '设置' },
|
||||
];
|
||||
|
||||
// 是否显示知识库选择器(有多个知识库时显示)
|
||||
const showDatasetSelector = availableDatasets.length > 1;
|
||||
|
||||
return (
|
||||
<div className="dataset-layout">
|
||||
{/* 左侧侧边栏 */}
|
||||
<aside className="dataset-sidebar">
|
||||
{/* 知识库信息 */}
|
||||
{/* 知识库信息 / 选择器 */}
|
||||
<div className="sidebar-header">
|
||||
<div className="dataset-icon">
|
||||
<DatabaseOutlined />
|
||||
</div>
|
||||
<div className="dataset-info">
|
||||
<Tooltip title={dataset?.name} placement="right">
|
||||
<h2 className="dataset-name">{dataset?.name || '知识库'}</h2>
|
||||
</Tooltip>
|
||||
<span className="dataset-type">本地文档</span>
|
||||
</div>
|
||||
{showDatasetSelector ? (
|
||||
/* 多个知识库时显示下拉选择器 */
|
||||
<div className="dataset-selector">
|
||||
<Select
|
||||
value={dataset?.id}
|
||||
onChange={onDatasetChange}
|
||||
loading={loadingAvailableDatasets}
|
||||
className="dataset-select"
|
||||
placeholder="选择知识库"
|
||||
suffixIcon={<SwapOutlined />}
|
||||
popupMatchSelectWidth={false}
|
||||
dropdownStyle={{ minWidth: 200 }}
|
||||
>
|
||||
{availableDatasets.map(ds => (
|
||||
<Select.Option key={ds.dataset_id} value={ds.dataset_id}>
|
||||
<div className="dataset-option">
|
||||
<span className="dataset-option-name">{ds.dataset_name}</span>
|
||||
{ds.is_default && <span className="dataset-option-tag">默认</span>}
|
||||
{ds.is_public && <span className="dataset-option-tag public">公共</span>}
|
||||
</div>
|
||||
</Select.Option>
|
||||
))}
|
||||
</Select>
|
||||
<span className="dataset-type">本地文档</span>
|
||||
</div>
|
||||
) : (
|
||||
/* 单个或无知识库时显示名称 */
|
||||
<div className="dataset-info">
|
||||
<Tooltip title={dataset?.name} placement="right">
|
||||
<h2 className="dataset-name">{dataset?.name || '知识库'}</h2>
|
||||
</Tooltip>
|
||||
<span className="dataset-type">本地文档</span>
|
||||
</div>
|
||||
)}
|
||||
</div>
|
||||
|
||||
{/* 统计信息 */}
|
||||
|
||||
Reference in New Issue
Block a user