diff --git a/frontend/src/app/knowledge/[id]/base/page.tsx b/frontend/src/app/knowledge/[id]/base/page.tsx
index 603e6625..94e1d9ea 100644
--- a/frontend/src/app/knowledge/[id]/base/page.tsx
+++ b/frontend/src/app/knowledge/[id]/base/page.tsx
@@ -2,11 +2,13 @@
import { Button, Table } from 'antd';
import type { TableColumnsType } from 'antd';
+import dynamic from 'next/dynamic';
+import Link from 'next/link';
import React, { useState } from 'react';
import { Flexbox } from 'react-layout-kit';
-import ModalAddFile from './features/ModalAddFile';
-
+// import ModalAddFile from './features/ModalAddFile';
+const ModalAddFile = dynamic(() => import('./features/ModalAddFile'));
interface DataType {
address: string;
age: number;
@@ -14,94 +16,82 @@ interface DataType {
name: string;
}
-const columns: TableColumnsType = [
- {
- dataIndex: 'index',
- title: '序号',
- },
- {
- dataIndex: 'name',
- title: '文档名称',
- },
- {
- dataIndex: 'loader',
- title: '文档加载器',
- },
- {
- dataIndex: 'loader',
- title: '文档加载器',
- },
- {
- dataIndex: 'splitter',
- title: '分词器',
- },
- {
- dataIndex: 'source',
- title: '源文件',
- },
- {
- dataIndex: 'vector',
- title: '向量库',
- },
-];
-
const data: DataType[] = [];
for (let i = 0; i < 46; i++) {
data.push({
address: `London, Park Lane no. ${i}`,
age: 32,
+ index: i,
key: i,
name: `Edward King ${i}`,
});
}
-const App: React.FC = () => {
+const App: React.FC<{ params }> = ({ params }) => {
const [selectedRowKeys, setSelectedRowKeys] = useState([]);
const [loading, setLoading] = useState(false);
-
- const start = () => {
- setLoading(true);
- // ajax request after empty completing
- setTimeout(() => {
- setSelectedRowKeys([]);
- setLoading(false);
- }, 1000);
- };
-
+ const [isShowModal, setModal] = useState(false);
const onSelectChange = (newSelectedRowKeys: React.Key[]) => {
console.log('selectedRowKeys changed:', newSelectedRowKeys);
setSelectedRowKeys(newSelectedRowKeys);
};
-
+ const columns: TableColumnsType = [
+ {
+ dataIndex: 'index',
+ title: '序号',
+ },
+ {
+ dataIndex: 'name',
+ render: (text) => {text},
+ title: '文档名称',
+ },
+ {
+ dataIndex: 'loader',
+ title: '文档加载器',
+ },
+ {
+ dataIndex: 'loader',
+ title: '文档加载器',
+ },
+ {
+ dataIndex: 'splitter',
+ title: '分词器',
+ },
+ {
+ dataIndex: 'source',
+ title: '源文件',
+ },
+ {
+ dataIndex: 'vector',
+ title: '向量库',
+ },
+ ];
const rowSelection = {
onChange: onSelectChange,
selectedRowKeys,
};
const hasSelected = selectedRowKeys.length > 0;
-
+ console.log(params);
return (
<>
-
-
+ setModal(true)} type="primary">
添加文件
@@ -110,10 +100,11 @@ const App: React.FC = () => {
columns={columns}
dataSource={data}
rowSelection={rowSelection}
+ size="middle"
style={{ width: '100%' }}
/>
-
+
>
);
};
diff --git a/frontend/src/app/knowledge/[id]/config/page.tsx b/frontend/src/app/knowledge/[id]/config/page.tsx
index 6b607537..ac67ac9e 100644
--- a/frontend/src/app/knowledge/[id]/config/page.tsx
+++ b/frontend/src/app/knowledge/[id]/config/page.tsx
@@ -1,53 +1,58 @@
'use client';
import { Form, type ItemGroup } from '@lobehub/ui';
-import { Form as AntForm, Input, InputNumber, Slider, Switch } from 'antd';
+import { Form as AntForm, Button, Input, InputNumber, Switch } from 'antd';
import { Settings } from 'lucide-react';
import { memo, useCallback } from 'react';
+import { Flexbox } from 'react-layout-kit';
import { FORM_STYLE } from '@/const/layoutTokens';
const KnowledgeBaseConfig = memo(() => {
const [form] = AntForm.useForm();
- const handleConfigChange = useCallback(() => {
- console.log(321);
- }, []);
+ const handleConfigChange = useCallback(async () => {
+ try {
+ const values = await form.validateFields();
+ console.log('Success:', values);
+ } catch (errorInfo) {
+ console.log('Failed:', errorInfo);
+ }
+ }, [form]);
const system: ItemGroup = {
children: [
{
children: ,
- desc: '名称',
label: '知识库名称',
name: 'name',
+ rules: [{ message: '请输入知识库名称', required: true }],
},
{
children: ,
- desc: '简介',
label: '知识库简介',
name: 'intro',
+ rules: [{ message: '请输入知识库简介', required: true }],
},
{
children: ,
- desc: '321',
label: '单段文本最大长度',
name: 'paragraphMaxLength',
+ rules: [{ message: '请输入知识库名称', required: true }],
},
{
children: ,
- desc: '321',
label: '相邻文本重合长度',
name: 'paragraphOverlapLength',
+ rules: [{ message: '请输入知识库名称', required: true }],
},
{
- children: ,
- desc: '321',
+ children: ,
label: '文本匹配条数',
name: 'paragraphMatchCount',
+ rules: [{ message: '请输入知识库名称', required: true }],
},
{
- children: ,
- desc: '321',
+ children: ,
label: '开启中文标题加强',
name: 'chineseTitleEnhance',
},
@@ -56,7 +61,16 @@ const KnowledgeBaseConfig = memo(() => {
title: '知识库设置',
};
- return ;
+ return (
+ <>
+
+
+
+ 保存
+
+
+ >
+ );
});
export default KnowledgeBaseConfig;
diff --git a/frontend/src/app/knowledge/[id]/features/KnowledgeBaseConfig.tsx b/frontend/src/app/knowledge/[id]/features/KnowledgeBaseConfig.tsx
deleted file mode 100644
index 2a7af4dd..00000000
--- a/frontend/src/app/knowledge/[id]/features/KnowledgeBaseConfig.tsx
+++ /dev/null
@@ -1,31 +0,0 @@
-import { Form, type ItemGroup } from '@lobehub/ui';
-import { Form as AntForm, Input } from 'antd';
-import { AppWindow } from 'lucide-react';
-import { memo, useCallback } from 'react';
-
-import { FORM_STYLE } from '@/const/layoutTokens';
-
-// 参考settings/llm/Anthropic/index.tsx的代码生成一个名为KnowledgeBaseConfig.tsx的表单组件
-const KnowledgeBaseConfig = memo(() => {
- const [form] = AntForm.useForm();
-
- const handleConfigChange = useCallback(() => {
- console.log(321);
- }, []);
- const system: ItemGroup = {
- children: [
- {
- children: ,
- desc: '知识库名称321',
- label: '知识库名称',
- name: 'password',
- },
- ],
- icon: AppWindow,
- title: '321',
- };
-
- return ;
-});
-
-export default KnowledgeBaseConfig;
diff --git a/frontend/src/app/knowledge/[id]/layout.tsx b/frontend/src/app/knowledge/[id]/layout.tsx
index e3efe0b4..a2806266 100644
--- a/frontend/src/app/knowledge/[id]/layout.tsx
+++ b/frontend/src/app/knowledge/[id]/layout.tsx
@@ -1,6 +1,5 @@
'use client';
-import { createStyles } from 'antd-style';
import { PropsWithChildren, memo } from 'react';
import { Center, Flexbox } from 'react-layout-kit';
@@ -9,16 +8,12 @@ import { SidebarTabKey } from '@/store/global/initialState';
import KnowledgeTabs from './tabs';
-const useStyles = createStyles(({ stylish, token, css }) => ({
- container: {
- paddingLeft: 20,
- paddingRight: 20,
- position: 'relative',
- },
-}));
-
-export default memo(({ children, params }: PropsWithChildren) => {
+interface LayoutProps extends PropsWithChildren {
+ params: Record;
+}
+export default memo(({ children, params }) => {
console.log(params);
+
return (
@@ -32,6 +27,7 @@ export default memo(({ children, params }: PropsWithChildren) => {
图标占位
知识库名称
+
diff --git a/frontend/src/app/knowledge/[id]/page.tsx b/frontend/src/app/knowledge/[id]/page.tsx
deleted file mode 100644
index bbf5adb9..00000000
--- a/frontend/src/app/knowledge/[id]/page.tsx
+++ /dev/null
@@ -1,11 +0,0 @@
-'use client';
-
-import dynamic from 'next/dynamic';
-import { memo } from 'react';
-
-const KnowledgeBaseConfig = dynamic(() => import('./features/KnowledgeBaseConfig'));
-const KnowledgeDetail = memo(() => {
- return ;
-});
-
-export default KnowledgeDetail;
diff --git a/frontend/src/app/knowledge/[id]/tabs/index.tsx b/frontend/src/app/knowledge/[id]/tabs/index.tsx
index 9c036bee..eac91458 100644
--- a/frontend/src/app/knowledge/[id]/tabs/index.tsx
+++ b/frontend/src/app/knowledge/[id]/tabs/index.tsx
@@ -1,27 +1,35 @@
import { Settings2, Webhook } from 'lucide-react';
-import Link from 'next/link';
-import { memo } from 'react';
-
-import { KnowledgeTabs } from '@/store/global/initialState';
+import { useRouter } from 'next/navigation';
+import { memo, useState } from 'react';
import Item from './TabItem';
+export enum KnowledgeTabs {
+ Base = 'base',
+ Config = 'config',
+}
+
export interface KnowledgeTabsProps {
activeTab?: KnowledgeTabs;
params: Record;
}
-const KnowledgeTabsBox = memo(({ activeTab, params }) => {
+const KnowledgeTabsBox = memo(({ params }) => {
console.log(params);
+ const [activeTab, setActiveTab] = useState(KnowledgeTabs.Base);
const items = [
{ icon: Webhook, label: '知识库', value: KnowledgeTabs.Base },
{ icon: Settings2, label: '配置', value: KnowledgeTabs.Config },
];
-
+ const router = useRouter();
+ const handleTabClick = (value: KnowledgeTabs) => {
+ setActiveTab(value);
+ router.push(`/knowledge/${params.id}/${value}`);
+ };
return items.map(({ value, icon, label }) => (
-
+ handleTabClick(value)}>
-
+
));
});
diff --git a/frontend/src/store/global/initialState.ts b/frontend/src/store/global/initialState.ts
index 00d70059..0494ffe9 100644
--- a/frontend/src/store/global/initialState.ts
+++ b/frontend/src/store/global/initialState.ts
@@ -2,7 +2,7 @@ import { GlobalCommonState, initialCommonState } from './slices/common/initialSt
import { GlobalPreferenceState, initialPreferenceState } from './slices/preference/initialState';
import { GlobalSettingsState, initialSettingsState } from './slices/settings/initialState';
-export { KnowledgeTabs, SettingsTabs, SidebarTabKey } from './slices/common/initialState';
+export { SettingsTabs, SidebarTabKey } from './slices/common/initialState';
export type GlobalState = GlobalCommonState & GlobalSettingsState & GlobalPreferenceState;
diff --git a/frontend/src/store/global/slices/common/initialState.ts b/frontend/src/store/global/slices/common/initialState.ts
index 84540c7b..77a9f0da 100644
--- a/frontend/src/store/global/slices/common/initialState.ts
+++ b/frontend/src/store/global/slices/common/initialState.ts
@@ -15,11 +15,6 @@ export enum SettingsTabs {
TTS = 'tts',
}
-export enum KnowledgeTabs {
- Base = 'base',
- Config = 'config',
-}
-
export interface Guide {
// Topic 引导
topic?: boolean;