feat: add knowledge directory management for documents and FAQs

- Implemented directory validation in Create and Update knowledge document services.
- Added directory selection in document and FAQ edit dialogs with a new KnowledgeDirectoryPanel component.
- Enhanced API to support fetching, creating, updating, and deleting knowledge directories.
- Updated data models to include directory information for knowledge documents and FAQs.
- Added translations for directory-related messages in English and Chinese.
This commit is contained in:
mlogclub
2026-06-02 15:37:50 +08:00
parent 32af090ab8
commit 853ae71b3d
26 changed files with 1442 additions and 19 deletions
@@ -40,6 +40,10 @@ func (s *knowledgeFAQService) FindPageByParams(queryParams *params.QueryParams)
return repositories.KnowledgeFAQRepository.FindPageByParams(sqls.DB(), queryParams)
}
func (s *knowledgeFAQService) Count(cnd *sqls.Cnd) int64 {
return repositories.KnowledgeFAQRepository.Count(sqls.DB(), cnd)
}
func (s *knowledgeFAQService) CreateKnowledgeFAQ(req request.CreateKnowledgeFAQRequest, operator *dto.AuthPrincipal) (*models.KnowledgeFAQ, error) {
if operator == nil {
return nil, errorsx.Unauthorized("未登录或登录已过期")
@@ -48,6 +52,9 @@ func (s *knowledgeFAQService) CreateKnowledgeFAQ(req request.CreateKnowledgeFAQR
if err != nil {
return nil, err
}
if _, err := KnowledgeDirectoryService.RequireUsableDirectory(req.KnowledgeBaseID, req.DirectoryID); err != nil {
return nil, err
}
item, err := s.buildKnowledgeFAQModel(req)
if err != nil {
return nil, err
@@ -78,12 +85,16 @@ func (s *knowledgeFAQService) UpdateKnowledgeFAQ(req request.UpdateKnowledgeFAQR
if _, err := s.requireFAQKnowledgeBase(req.KnowledgeBaseID); err != nil {
return err
}
if _, err := KnowledgeDirectoryService.RequireUsableDirectory(req.KnowledgeBaseID, req.DirectoryID); err != nil {
return err
}
item, err := s.buildKnowledgeFAQModel(req.CreateKnowledgeFAQRequest)
if err != nil {
return err
}
if err := repositories.KnowledgeFAQRepository.Updates(sqls.DB(), req.ID, map[string]any{
"knowledge_base_id": item.KnowledgeBaseID,
"directory_id": item.DirectoryID,
"question": item.Question,
"answer": item.Answer,
"similar_questions": item.SimilarQuestions,
@@ -127,6 +138,7 @@ func (s *knowledgeFAQService) buildKnowledgeFAQModel(req request.CreateKnowledge
}
return &models.KnowledgeFAQ{
KnowledgeBaseID: req.KnowledgeBaseID,
DirectoryID: req.DirectoryID,
Question: req.Question,
Answer: req.Answer,
SimilarQuestions: string(similarQuestions),