From 495e3569e299a394ccf7cc81330ae3aaa26ace9e Mon Sep 17 00:00:00 2001 From: wangys <3401275564@qq.com> Date: Fri, 7 Nov 2025 16:09:00 +0800 Subject: [PATCH] =?UTF-8?q?=E7=9F=A5=E8=AF=86=E5=BA=93=E6=96=87=E6=A1=A3?= =?UTF-8?q?=E6=95=B0=E9=87=8F=E5=90=8C=E6=AD=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/impl/AiUploadFileServiceImpl.java | 20 +++++- .../manage/ai/KnowledgeManagementView.vue | 68 +++++++++++++++---- .../manage/ai/components/KnowledgeInfo.vue | 6 +- 3 files changed, 74 insertions(+), 20 deletions(-) diff --git a/schoolNewsServ/ai/src/main/java/org/xyzh/ai/service/impl/AiUploadFileServiceImpl.java b/schoolNewsServ/ai/src/main/java/org/xyzh/ai/service/impl/AiUploadFileServiceImpl.java index 5c87ceb..09d4caa 100644 --- a/schoolNewsServ/ai/src/main/java/org/xyzh/ai/service/impl/AiUploadFileServiceImpl.java +++ b/schoolNewsServ/ai/src/main/java/org/xyzh/ai/service/impl/AiUploadFileServiceImpl.java @@ -278,14 +278,19 @@ public class AiUploadFileServiceImpl implements AiUploadFileService { uploadFile.setDeleted(false); int rows = uploadFileMapper.insertUploadFile(uploadFile); + knowledge.setDocumentCount(knowledge.getDocumentCount() + 1); + int knowledgeRows = knowledgeMapper.updateKnowledge(knowledge); if (rows > 0) { log.info("知识库文件上传成功: uploadFileId={}, sysFileId={}, fileName={}", uploadFile.getID(), sysFile.getID(), originalFilename); // 9. 异步更新向量化状态 asyncUpdateVectorStatus(uploadFile.getID()); - + resultDomain.success("文件上传成功", uploadFile); + if (knowledgeRows <=0) { + resultDomain.setMessage("知识库文件数量更新失败"); + } return resultDomain; } else { resultDomain.fail("保存文件记录失败"); @@ -330,7 +335,9 @@ public class AiUploadFileServiceImpl implements AiUploadFileService { failedFiles.add(file.getOriginalFilename() + ": " + uploadResult.getMessage()); } } - + TbAiKnowledge knowledge = knowledgeMapper.selectKnowledgeById(knowledgeId); + knowledge.setDocumentCount(knowledge.getDocumentCount() + uploadedFiles.size()); + int knowledgeRows = knowledgeMapper.updateKnowledge(knowledge); if (!failedFiles.isEmpty()) { String message = "部分文件上传失败: " + String.join(", ", failedFiles); log.warn(message); @@ -338,7 +345,9 @@ public class AiUploadFileServiceImpl implements AiUploadFileService { } else { resultDomain.success("批量上传成功", uploadedFiles); } - + if (knowledgeRows <=0) { + resultDomain.setMessage("知识库文件数量更新失败"); + } return resultDomain; } catch (Exception e) { @@ -386,9 +395,14 @@ public class AiUploadFileServiceImpl implements AiUploadFileService { deleteEntity.setID(fileId); int rows = uploadFileMapper.deleteUploadFile(deleteEntity); + knowledge.setDocumentCount(knowledge.getDocumentCount() - 1); + int knowledgeRows = knowledgeMapper.updateKnowledge(knowledge); if (rows > 0) { log.info("文件删除成功: {} - {}", fileId, file.getFileName()); resultDomain.success("文件删除成功", true); + if (knowledgeRows <=0) { + resultDomain.setMessage("知识库文件数量更新失败"); + } return resultDomain; } else { resultDomain.fail("文件删除失败"); diff --git a/schoolNewsWeb/src/views/admin/manage/ai/KnowledgeManagementView.vue b/schoolNewsWeb/src/views/admin/manage/ai/KnowledgeManagementView.vue index 5777a19..b4b1ef9 100644 --- a/schoolNewsWeb/src/views/admin/manage/ai/KnowledgeManagementView.vue +++ b/schoolNewsWeb/src/views/admin/manage/ai/KnowledgeManagementView.vue @@ -12,8 +12,9 @@ -
- +
+
+
+ .knowledge-management-container { position: relative; - padding: 24px; + // padding: 24px; background: #F5F5F7; - min-height: calc(100vh - 60px); + height: calc(100vh - 40px - 44px - 24px - 110px); } .knowledge-list-container { background: #FFFFFF; - border: 1px solid rgba(0, 0, 0, 0.1); - border-radius: 14px; - padding: 24px; - max-width: 1600px; - margin: 0 auto; + border: 1px solid rgba(0, 0, 0, 0.1); + border-radius: 14px; + padding: 24px; + height: 100%; + margin: 0 auto; + display: flex; + flex-direction: column; + align-items: flex-end; } .list-header { @@ -228,6 +234,7 @@ function handleSizeChange(size: number) { justify-content: space-between; align-items: center; margin-bottom: 24px; + width: 100%; .list-title { font-size: 18px; @@ -253,18 +260,49 @@ function handleSizeChange(size: number) { } } +.knowledge-list-content{ + width: 100%; + overflow-y: auto; + height: 100%; + + // 自定义滚动条样式 + &::-webkit-scrollbar { + width: 6px; + } + + &::-webkit-scrollbar-track { + background: transparent; + border-radius: 3px; + } + + &::-webkit-scrollbar-thumb { + background: #D1D5DB; + border-radius: 3px; + + &:hover { + background: #9CA3AF; + } + } +} .knowledge-grid { - display: grid; - grid-template-columns: repeat(auto-fill, minmax(320px, 1fr)); + display: flex; + width: 100%; + gap: 20px; - margin-bottom: 24px; + margin-top: 12px; + + .knowledge-card { + width: 33%; + } } :deep(.el-pagination) { display: flex; - justify-content: center; + justify-content: flex-end; padding-top: 24px; border-top: 1px solid #F3F3F5; + margin-top: auto; // 推到容器底部 + width: 100%; .el-pager li { &.is-active { diff --git a/schoolNewsWeb/src/views/admin/manage/ai/components/KnowledgeInfo.vue b/schoolNewsWeb/src/views/admin/manage/ai/components/KnowledgeInfo.vue index b8708e8..89b5c10 100644 --- a/schoolNewsWeb/src/views/admin/manage/ai/components/KnowledgeInfo.vue +++ b/schoolNewsWeb/src/views/admin/manage/ai/components/KnowledgeInfo.vue @@ -23,10 +23,10 @@
- + 📚

{{ knowledge.title }}

@@ -230,6 +230,7 @@ import { import type { AiKnowledge, AiUploadFile } from '@/types/ai'; import { fileUploadApi } from '@/apis/ai'; import { DocumentSegmentDialog } from './'; +import { FILE_DOWNLOAD_URL } from '@/config'; defineOptions({ name: 'KnowledgeInfo' @@ -476,6 +477,7 @@ function formatFileSize(bytes: number | undefined): string { display: flex; flex-direction: column; z-index: 10; + box-sizing: border-box; } .panel-header {