From d52dfbfef4e30fd5203a5519a040d6b3f2ce57b3 Mon Sep 17 00:00:00 2001 From: RockYang Date: Tue, 4 Jun 2024 16:21:08 +0800 Subject: [PATCH] fixed bug markmap generation --- api/handler/markmap_handler.go | 58 ++++++++++++---------------------- api/service/dalle/service.go | 5 +-- api/utils/openai.go | 2 +- web/src/router.js | 18 +++++++++-- web/src/views/Home.vue | 26 ++++++++------- web/src/views/Index.vue | 17 ++++++---- 6 files changed, 63 insertions(+), 63 deletions(-) diff --git a/api/handler/markmap_handler.go b/api/handler/markmap_handler.go index bf67ab7b..d6565444 100644 --- a/api/handler/markmap_handler.go +++ b/api/handler/markmap_handler.go @@ -183,45 +183,29 @@ func (h *MarkMapHandler) sendMessage(client *types.WsClient, prompt string, mode utils.ReplyChunkMessage(client, types.WsMessage{Type: types.WsEnd}) } else { - body, err := io.ReadAll(response.Body) - if err != nil { - return fmt.Errorf("读取响应失败: %v", err) - } - var res types.ApiError - err = json.Unmarshal(body, &res) - if err != nil { - return fmt.Errorf("解析响应失败: %v", err) - } - - // OpenAI API 调用异常处理 - if strings.Contains(res.Error.Message, "This key is associated with a deactivated account") { - // remove key - h.DB.Where("value = ?", apiKey).Delete(&model.ApiKey{}) - return errors.New("请求 OpenAI API 失败:API KEY 所关联的账户被禁用。") - } else if strings.Contains(res.Error.Message, "You exceeded your current quota") { - return errors.New("请求 OpenAI API 失败:API KEY 触发并发限制,请稍后再试。") - } else { - return fmt.Errorf("请求 OpenAI API 失败:%v", res.Error.Message) - } + body, _ := io.ReadAll(response.Body) + return fmt.Errorf("请求 OpenAI API 失败:%s", string(body)) } // 扣减算力 - res = h.DB.Model(&model.User{}).Where("id", userId).UpdateColumn("power", gorm.Expr("power - ?", chatModel.Power)) - if res.Error == nil { - // 记录算力消费日志 - var u model.User - h.DB.Where("id", userId).First(&u) - h.DB.Create(&model.PowerLog{ - UserId: u.Id, - Username: u.Username, - Type: types.PowerConsume, - Amount: chatModel.Power, - Mark: types.PowerSub, - Balance: u.Power, - Model: chatModel.Value, - Remark: fmt.Sprintf("AI绘制思维导图,模型名称:%s, ", chatModel.Value), - CreatedAt: time.Now(), - }) + if chatModel.Power > 0 { + res = h.DB.Model(&model.User{}).Where("id", userId).UpdateColumn("power", gorm.Expr("power - ?", chatModel.Power)) + if res.Error == nil { + // 记录算力消费日志 + var u model.User + h.DB.Where("id", userId).First(&u) + h.DB.Create(&model.PowerLog{ + UserId: u.Id, + Username: u.Username, + Type: types.PowerConsume, + Amount: chatModel.Power, + Mark: types.PowerSub, + Balance: u.Power, + Model: chatModel.Value, + Remark: fmt.Sprintf("AI绘制思维导图,模型名称:%s, ", chatModel.Value), + CreatedAt: time.Now(), + }) + } } return nil @@ -235,7 +219,7 @@ func (h *MarkMapHandler) doRequest(req types.ApiRequest, chatModel model.ChatMod } // use the last unused key if apiKey.Id == 0 { - res = h.DB.Where("platform", types.OpenAI). + res = h.DB.Where("platform", types.OpenAI.Value). Where("type", "chat"). Where("enabled", true).Order("last_used_at ASC").First(apiKey) } diff --git a/api/service/dalle/service.go b/api/service/dalle/service.go index fa209f20..dc66927b 100644 --- a/api/service/dalle/service.go +++ b/api/service/dalle/service.go @@ -153,10 +153,7 @@ func (s *Service) Image(task types.DallTask, sync bool) (string, error) { } else { request = request.SetHeader("Authorization", "Bearer "+apiKey.Value) } - r, err := request.SetHeader("Authorization", "Bearer "+apiKey.Value). - SetBody(reqBody). - SetErrorResult(&errRes). - SetSuccessResult(&res).Post(apiKey.ApiURL) + r, err := request.SetBody(reqBody).SetErrorResult(&errRes).SetSuccessResult(&res).Post(apiKey.ApiURL) if err != nil { return "", fmt.Errorf("error with send request: %v", err) } diff --git a/api/utils/openai.go b/api/utils/openai.go index 86a976a5..9f012c2f 100644 --- a/api/utils/openai.go +++ b/api/utils/openai.go @@ -54,7 +54,7 @@ type apiErrRes struct { func OpenAIRequest(db *gorm.DB, prompt string) (string, error) { var apiKey model.ApiKey - res := db.Where("platform = ?", types.OpenAI.Value).Where("type", "chat").Where("enabled = ?", true).First(&apiKey) + res := db.Where("platform IN ?", []string{types.OpenAI.Value, types.Azure.Value}).Where("type", "chat").Where("enabled = ?", true).First(&apiKey) if res.Error != nil { return "", fmt.Errorf("error with fetch OpenAI API KEY:%v", res.Error) } diff --git a/web/src/router.js b/web/src/router.js index 64fdecb6..de19cfff 100644 --- a/web/src/router.js +++ b/web/src/router.js @@ -6,19 +6,20 @@ // * +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ import {createRouter, createWebHistory} from "vue-router"; +import {ref} from "vue"; +import {httpGet} from "@/utils/http"; const routes = [ { name: 'Index', path: '/', - meta: {title: process.env.VUE_APP_TITLE}, + meta: {title: "首页"}, component: () => import('@/views/Index.vue'), }, { name: 'home', path: '/home', redirect: '/chat', - meta: {title: '首页'}, component: () => import('@/views/Home.vue'), children: [ { @@ -273,11 +274,22 @@ const router = createRouter({ routes: routes, }) +const active = ref(false) +const title = ref('') +httpGet("/api/config/license").then(res => { + active.value = res.data.de_copy +}).catch(() => {}) +httpGet("/api/config/get?key=system").then(res => { + title.value = res.data.title +}).catch(()=>{}) + let prevRoute = null // dynamic change the title when router change router.beforeEach((to, from, next) => { - if (to.meta.title) { + if (!active.value) { document.title = `${to.meta.title} | ${process.env.VUE_APP_TITLE}` + } else { + document.title = `${to.meta.title} | ${title.value}` } prevRoute = from next() diff --git a/web/src/views/Home.vue b/web/src/views/Home.vue index 87043d42..80abdf45 100644 --- a/web/src/views/Home.vue +++ b/web/src/views/Home.vue @@ -46,19 +46,21 @@ {{ loginUser.nickname }} - - - - 用户手册 - - +
+ + + + 用户手册 + + - - - - Geek-AI {{ version }} - - + + + + Geek-AI {{ version }} + + +
diff --git a/web/src/views/Index.vue b/web/src/views/Index.vue index 16f958b5..ae0cdfd6 100644 --- a/web/src/views/Index.vue +++ b/web/src/views/Index.vue @@ -26,8 +26,11 @@ - 登录 - 注册 + + + 登录 + 注册 + @@ -69,6 +72,7 @@ import FooterBar from "@/components/FooterBar.vue"; import {httpGet} from "@/utils/http"; import {ElMessage} from "element-plus"; import {isMobile} from "@/utils/libs"; +import {checkSession} from "@/action/session"; const router = useRouter() @@ -83,6 +87,7 @@ const licenseConfig = ref({}) // const size = Math.max(window.innerWidth * 0.5, window.innerHeight * 0.8) const winHeight = window.innerHeight - 150 const bgClass = ref('fixed-bg') +const isLogin = ref(false) onMounted(() => { httpGet("/api/config/get?key=system").then(res => { @@ -100,11 +105,11 @@ onMounted(() => { }).catch(e => { ElMessage.error("获取 License 配置:" + e.message) }) - init() -}) -const init = () => { -} + checkSession().then(() => { + isLogin.value = true + }).catch(()=>{}) +})