knowledge base pages (#43)

* feat: Update site name to DataMate and refine text for AI data processing

* feat: Refactor settings page and implement model access functionality

- Created a new ModelAccess component for managing model configurations.
- Removed the old Settings component and replaced it with a new SettingsPage component that integrates ModelAccess, SystemConfig, and WebhookConfig.
- Added SystemConfig component for managing system settings.
- Implemented WebhookConfig component for managing webhook configurations.
- Updated API functions for model management in settings.apis.ts.
- Adjusted routing to point to the new SettingsPage component.

* feat: Implement Data Collection Page with Task Management and Execution Log

- Created DataCollectionPage component to manage data collection tasks.
- Added TaskManagement and ExecutionLog components for task handling and logging.
- Integrated task operations including start, stop, edit, and delete functionalities.
- Implemented filtering and searching capabilities in task management.
- Introduced SimpleCronScheduler for scheduling tasks with cron expressions.
- Updated CreateTask component to utilize new scheduling and template features.
- Enhanced BasicInformation component to conditionally render fields based on visibility settings.
- Refactored ImportConfiguration component to remove NAS import section.

* feat: Update task creation API endpoint and enhance task creation form with new fields and validation

* Refactor file upload and operator management components

- Removed unnecessary console logs from file download and export functions.
- Added size property to TaskItem interface for better task management.
- Simplified TaskUpload component by utilizing useFileSliceUpload hook for file upload logic.
- Enhanced OperatorPluginCreate component to handle file uploads and parsing more efficiently.
- Updated ConfigureStep component to use Ant Design Form for better data handling and validation.
- Improved PreviewStep component to navigate back to the operator market.
- Added support for additional file types in UploadStep component.
- Implemented delete operator functionality in OperatorMarketPage with confirmation prompts.
- Cleaned up unused API functions in operator.api.ts to streamline the codebase.
- Fixed number formatting utility to handle zero values correctly.

* Refactor Knowledge Generation to Knowledge Base

- Created new API service for Knowledge Base operations including querying, creating, updating, and deleting knowledge bases and files.
- Added constants for Knowledge Base status and type mappings.
- Defined models for Knowledge Base and related files.
- Removed obsolete Knowledge Base creation and home components, replacing them with new implementations under the Knowledge Base structure.
- Updated routing to reflect the new Knowledge Base paths.
- Adjusted menu items to align with the new Knowledge Base terminology.
- Modified ModelAccess interface to include modelName and type properties.

* feat: Implement Knowledge Base Page with CRUD operations and data management

- Added KnowledgeBasePage component for displaying and managing knowledge bases.
- Integrated search and filter functionalities with SearchControls component.
- Implemented CreateKnowledgeBase component for creating and editing knowledge bases.
- Enhanced AddDataDialog for file uploads and dataset selections.
- Introduced TableTransfer component for managing data transfers between tables.
- Updated API functions for knowledge base operations, including file management.
- Refactored knowledge base model to include file status and metadata.
- Adjusted routing to point to the new KnowledgeBasePage.
This commit is contained in:
chenghh-9609
2025-10-31 10:03:42 +08:00
committed by GitHub
parent d89811f238
commit c6958d1511
16 changed files with 974 additions and 769 deletions

View File

@@ -120,10 +120,11 @@ const MockAPI = {
queryKnowledgeBaseByIdUsingGet: "/knowledge-base/:baseId", // 根据ID获取知识库详情
updateKnowledgeBaseByIdUsingPut: "/knowledge-base/:baseId", // 更新知识库
deleteKnowledgeBaseByIdUsingDelete: "/knowledge-base/:baseId", // 删除知识库
queryKnowledgeGenerationTasksUsingPost: "/knowledge-base/tasks", // 获取知识生成任务列表
addKnowledgeGenerationFilesUsingPost: "/knowledge-base/:baseId/files", // 添加文件到知识库
queryKnowledgeGenerationFilesByIdUsingGet: "/knowledge-base/:baseId/files/:fileId", // 根据ID获取知识生成文件详情
deleteKnowledgeGenerationTaskByIdUsingDelete: "/knowledge-base/:baseId/files", // 删除知识生成文件
addKnowledgeBaseFilesUsingPost: "/knowledge-base/:baseId/files", // 添加文件到知识库
queryKnowledgeBaseFilesGet: "/knowledge-base/:baseId/files", // 根据ID获取知识生成文件列表
queryKnowledgeBaseFilesByIdUsingGet:
"/knowledge-base/:baseId/files/:fileId", // 根据ID获取知识生成文件详情
deleteKnowledgeBaseTaskByIdUsingDelete: "/knowledge-base/:baseId/files/:id", // 删除知识生成文件
// 算子市场
queryOperatorsUsingPost: "/operators/list", // 获取算子列表

View File

@@ -161,8 +161,6 @@ module.exports = function (router) {
);
}
if (type) {
console.log("filter type:", type);
filteredDatasets = filteredDatasets.filter(
(dataset) => dataset.datasetType === type
);

View File

@@ -22,6 +22,29 @@ function KnowledgeBaseItem() {
const knowledgeBaseList = new Array(50).fill(null).map(KnowledgeBaseItem);
function fileItem() {
return {
id: Mock.Random.guid().replace(/[^a-zA-Z0-9]/g, ""),
createdAt: Mock.Random.datetime("yyyy-MM-dd HH:mm:ss"),
updatedAt: Mock.Random.datetime("yyyy-MM-dd HH:mm:ss"),
createdBy: Mock.Random.cname(),
updatedBy: Mock.Random.cname(),
knowledgeBaseId: Mock.Random.pick(knowledgeBaseList).id,
fileId: Mock.Random.guid().replace(/[^a-zA-Z0-9]/g, ""),
fileName: Mock.Random.ctitle(5, 15),
chunkCount: Mock.Random.integer(1, 100),
metadata: {},
status: Mock.Random.pick([
"UNPROCESSED",
"PROCESSING",
"PROCESSED",
"PROCESS_FAILED",
]),
};
}
const fileList = new Array(20).fill(null).map(fileItem);
module.exports = function (router) {
// 获取知识库列表
router.post(API.queryKnowledgeBasesUsingPost, (req, res) => {
@@ -56,15 +79,16 @@ module.exports = function (router) {
});
// 获取知识库详情
router.get(
new RegExp(API.queryKnowledgeBaseByIdUsingGet.replace(":baseId", "(\\w+)")),
(req, res) => {
const id = req.params.baseId;
const item =
knowledgeBaseList.find((kb) => kb.id === id) || KnowledgeBaseItem();
res.send(item);
}
);
router.get(API.queryKnowledgeBaseByIdUsingGet, (req, res) => {
const id = req.params.baseId;
const item =
knowledgeBaseList.find((kb) => kb.id === id) || KnowledgeBaseItem();
res.send({
code: "0",
msg: "Success",
data: item,
});
});
// 更新知识库
router.put(API.updateKnowledgeBaseByIdUsingPut, (req, res) => {
@@ -90,72 +114,63 @@ module.exports = function (router) {
}
});
// 获取知识生成任务列表
router.post(API.queryKnowledgeGenerationTasksUsingPost, (req, res) => {
const tasks = Mock.mock({
"data|10": [
{
id: "@guid",
name: "@ctitle(5,15)",
status: '@pick(["pending","running","success","failed"])',
createdAt: "@datetime",
updatedAt: "@datetime",
progress: "@integer(0,100)",
},
],
total: 10,
current: 1,
pageSize: 10,
// 添加文件到知识库
router.post(API.addKnowledgeBaseFilesUsingPost, (req, res) => {
const file = Mock.mock({
id: "@guid",
name: "@ctitle(5,15)",
size: "@integer(1000,1000000)",
status: "uploaded",
createdAt: "@datetime",
});
res.send(tasks);
res.status(201).send(file);
});
// 添加文件到知识库
router.post(
new RegExp(
API.addKnowledgeGenerationFilesUsingPost.replace(":baseId", "(\\w+)")
),
(req, res) => {
const file = Mock.mock({
id: "@guid",
name: "@ctitle(5,15)",
size: "@integer(1000,1000000)",
status: "uploaded",
createdAt: "@datetime",
});
res.status(201).send(file);
}
);
// 获取知识生成文件详情
router.get(
new RegExp(
API.queryKnowledgeGenerationFilesByIdUsingGet
.replace(":baseId", "(\\w+)")
.replace(":fileId", "(\\w+)")
),
(req, res) => {
const file = Mock.mock({
id: req.params.fileId,
name: "@ctitle(5,15)",
size: "@integer(1000,1000000)",
status: "uploaded",
createdAt: "@datetime",
});
res.send(file);
router.get(API.queryKnowledgeBaseFilesGet, (req, res) => {
const { keyword, page, size } = req.query;
let filteredList = fileList;
if (keyword) {
filteredList = fileList.filter((file) => file.fileName.includes(keyword));
}
);
const start = page * size;
const end = start + size;
const totalElements = filteredList.length;
const paginatedList = filteredList.slice(start, end);
res.send({
code: "0",
msg: "Success",
data: {
totalElements,
page,
size,
content: paginatedList,
},
});
});
router.get(API.queryKnowledgeBaseFilesByIdUsingGet, (req, res) => {
const { baseId, fileId } = req.params;
const item =
fileList.find(
(file) => file.knowledgeBaseId === baseId && file.id === fileId
) || fileItem();
res.send({
code: "0",
msg: "Success",
data: item,
});
});
// 删除知识生成文件
router.delete(
new RegExp(
API.deleteKnowledgeGenerationTaskByIdUsingDelete.replace(
":baseId",
"(\\w+)"
)
),
(req, res) => {
res.send({ success: true });
router.delete(API.deleteKnowledgeBaseTaskByIdUsingDelete, (req, res) => {
const { id } = req.params;
const idx = fileList.findIndex((file) => file.id === id);
if (idx >= 0) {
fileList.splice(idx, 1);
res.status(200).send({ success: true });
return;
}
);
res.status(404).send({ message: "Not found" });
});
};