From 14524f0559a17aa6ae564b2d8ed9b7407cb714cf Mon Sep 17 00:00:00 2001 From: GeekMaster Date: Mon, 1 Sep 2025 10:58:15 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E9=87=8D=E6=96=B0=E7=94=9F?= =?UTF-8?q?=E6=88=90=E7=9A=84=20Bug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- api/handler/chat_handler.go | 18 ++++++ api/handler/chat_openai_handler.go | 4 +- api/service/migration_service.go | 2 + web/src/components/ChatReply.vue | 39 ++++++------ web/src/views/ChatPlus.vue | 98 +++++++++++++++++------------- 5 files changed, 99 insertions(+), 62 deletions(-) diff --git a/api/handler/chat_handler.go b/api/handler/chat_handler.go index bb223e67..899d7d07 100644 --- a/api/handler/chat_handler.go +++ b/api/handler/chat_handler.go @@ -40,6 +40,7 @@ import ( const ( ChatEventStart = "start" ChatEventEnd = "end" + ChatEventComplete = "complete" ChatEventError = "error" ChatEventMessageDelta = "message_delta" ChatEventTitle = "title" @@ -539,6 +540,7 @@ func (h *ChatHandler) subUserPower(userVo vo.User, input ChatInput, promptTokens } func (h *ChatHandler) saveChatHistory( + c *gin.Context, req types.ApiRequest, usage Usage, message types.Message, @@ -609,6 +611,22 @@ func (h *ChatHandler) saveChatHistory( logger.Error("failed to save reply history message: ", err) } + // 发送完整聊天记录给前端 + var messageVo vo.ChatMessage + err = utils.CopyObject(historyReplyMsg, &messageVo) + if err == nil { + // 解析内容 + var content vo.MsgContent + err = utils.JsonDecode(historyReplyMsg.Content, &content) + if err != nil { + content.Text = historyReplyMsg.Content + } + messageVo.Content = content + messageVo.CreatedAt = historyReplyMsg.CreatedAt.Unix() + messageVo.UpdatedAt = historyReplyMsg.UpdatedAt.Unix() + pushMessage(c, ChatEventComplete, messageVo) + } + // 更新用户算力 if input.ChatModel.Power > 0 { h.subUserPower(userVo, input, promptTokens, replyTokens) diff --git a/api/handler/chat_openai_handler.go b/api/handler/chat_openai_handler.go index 6a71c405..91a6f59a 100644 --- a/api/handler/chat_openai_handler.go +++ b/api/handler/chat_openai_handler.go @@ -226,7 +226,7 @@ func (h *ChatHandler) sendOpenAiMessage( TotalTokens: 0, } message.Content = usage.Content - h.saveChatHistory(req, usage, message, input, userVo, promptCreatedAt, replyCreatedAt) + h.saveChatHistory(c, req, usage, message, input, userVo, promptCreatedAt, replyCreatedAt) } } else { // 非流式输出 var respVo OpenAIResVo @@ -242,7 +242,7 @@ func (h *ChatHandler) sendOpenAiMessage( pushMessage(c, "text", content) respVo.Usage.Prompt = input.Prompt respVo.Usage.Content = content - h.saveChatHistory(req, respVo.Usage, respVo.Choices[0].Message, input, userVo, promptCreatedAt, time.Now()) + h.saveChatHistory(c, req, respVo.Usage, respVo.Choices[0].Message, input, userVo, promptCreatedAt, time.Now()) } return nil diff --git a/api/service/migration_service.go b/api/service/migration_service.go index e050d59a..26292b27 100644 --- a/api/service/migration_service.go +++ b/api/service/migration_service.go @@ -159,6 +159,8 @@ func (s *MigrationService) MigrateConfigContent() error { // 数据表迁移 func (s *MigrationService) TableMigration() { + // 新数据表 + s.db.AutoMigrate(&model.Moderation{}) // 订单字段整理 if s.db.Migrator().HasColumn(&model.Order{}, "pay_type") { s.db.Migrator().RenameColumn(&model.Order{}, "pay_type", "channel") diff --git a/web/src/components/ChatReply.vue b/web/src/components/ChatReply.vue index 58fd6cda..3d028630 100644 --- a/web/src/components/ChatReply.vue +++ b/web/src/components/ChatReply.vue @@ -168,7 +168,7 @@ const md = new MarkdownIt({ const codeIndex = parseInt(Date.now()) + Math.floor(Math.random() * 10000000) // 显示复制代码按钮和展开/收起按钮 const copyBtn = `
- 展开 + 收起 复制