From 514dd6c76a09551ef8be834358ba3d858568b077 Mon Sep 17 00:00:00 2001 From: RockYang Date: Wed, 24 Apr 2024 19:00:28 +0800 Subject: [PATCH] show license info in admin active page, optimize markdown generate prompt --- api/core/types/config.go | 10 ++--- api/handler/admin/config_handler.go | 6 +++ api/handler/markmap_handler.go | 21 +++++++++- api/main.go | 1 + api/service/license_service.go | 9 +++-- web/src/views/admin/SysConfig.vue | 60 ++++++++++++++++++++++++++--- 6 files changed, 91 insertions(+), 16 deletions(-) diff --git a/api/core/types/config.go b/api/core/types/config.go index 4c59875a..33c0ece8 100644 --- a/api/core/types/config.go +++ b/api/core/types/config.go @@ -119,11 +119,11 @@ type RedisConfig struct { const LicenseKey = "Geek-AI-License" type License struct { - Key string // 许可证书密钥 - MachineId string // 机器码 - UserNum int // 用户数量 - ExpiredAt int64 // 过期时间 - IsActive bool // 是否激活 + Key string `json:"key"` // 许可证书密钥 + MachineId string `json:"machine_id"` // 机器码 + UserNum int `json:"user_num"` // 用户数量 + ExpiredAt int64 `json:"expired_at"` // 过期时间 + IsActive bool `json:"is_active"` // 是否激活 } func (c RedisConfig) Url() string { diff --git a/api/handler/admin/config_handler.go b/api/handler/admin/config_handler.go index 5aacb9f2..a597d374 100644 --- a/api/handler/admin/config_handler.go +++ b/api/handler/admin/config_handler.go @@ -115,3 +115,9 @@ func (h *ConfigHandler) Active(c *gin.Context) { resp.SUCCESS(c, info.HostID) } + +// GetLicense 获取 License 信息 +func (h *ConfigHandler) GetLicense(c *gin.Context) { + license := h.licenseService.GetLicense() + resp.SUCCESS(c, license) +} diff --git a/api/handler/markmap_handler.go b/api/handler/markmap_handler.go index f3fe0897..c9465486 100644 --- a/api/handler/markmap_handler.go +++ b/api/handler/markmap_handler.go @@ -103,7 +103,26 @@ func (h *MarkMapHandler) sendMessage(client *types.WsClient, prompt string, mode } messages := make([]interface{}, 0) - messages = append(messages, types.Message{Role: "system", Content: "你是一位非常优秀的思维导图助手,你会把用户的所有提问都总结成思维导图,然后以 Markdown 格式输出。不要输出任何解释性的语句。"}) + messages = append(messages, types.Message{Role: "system", Content: ` +你是一位非常优秀的思维导图助手,你会把用户的所有提问都总结成思维导图,然后以 Markdown 格式输出。markdown 只需要输出一级标题,二级标题,三级标题,四级标题,最多输出四级,除此之外不要输出任何其他 markdown 标记。下面是一个合格的例子: +# Geek-AI 助手 + +## 完整的开源系统 +### 前端开源 +### 后端开源 + +## 支持各种大模型 +### OpenAI +### Azure +### 文心一言 +### 通义千问 + +## 集成多种收费方式 +### 支付宝 +### 微信 + +另外,除此之外不要任何解释性语句。 +`}) messages = append(messages, types.Message{Role: "user", Content: prompt}) var req = types.ApiRequest{ Model: chatModel.Value, diff --git a/api/main.go b/api/main.go index 1c7177ad..e1c05ee5 100644 --- a/api/main.go +++ b/api/main.go @@ -291,6 +291,7 @@ func main() { group.POST("config/update", h.Update) group.GET("config/get", h.Get) group.POST("active", h.Active) + group.GET("config/get/license", h.GetLicense) }), fx.Invoke(func(s *core.AppServer, h *admin.ManagerHandler) { group := s.Engine.Group("/api/admin/") diff --git a/api/service/license_service.go b/api/service/license_service.go index 0a7d7a65..73a0bbe9 100644 --- a/api/service/license_service.go +++ b/api/service/license_service.go @@ -61,16 +61,17 @@ func (s *LicenseService) ActiveLicense(license string, machineId string) error { } if res.Code != types.Success { - return fmt.Errorf( "激活失败:%v", res.Message) + return fmt.Errorf("激活失败:%v", res.Message) } - err = s.levelDB.Put(types.LicenseKey, types.License{ + s.license = types.License{ Key: license, MachineId: machineId, UserNum: res.Data.UserNum, ExpiredAt: res.Data.ExpiredAt, - IsActive: true, - }) + IsActive: true, + } + err = s.levelDB.Put(types.LicenseKey, s.license) if err != nil { return fmt.Errorf("保存许可证书失败:%v", err) } diff --git a/web/src/views/admin/SysConfig.vue b/web/src/views/admin/SysConfig.vue index 732c4b38..8297c79c 100644 --- a/web/src/views/admin/SysConfig.vue +++ b/web/src/views/admin/SysConfig.vue @@ -260,9 +260,42 @@
+ + + + {{ license.key }} + + + + {{ dateFormat(license.expired_at) }} + + + + {{ license.user_num }} + + + + {{ license.machine_id }} + + + - + @@ -284,6 +317,7 @@ import {InfoFilled, UploadFilled} from "@element-plus/icons-vue"; import MdEditor from "md-editor-v3"; import 'md-editor-v3/lib/style.css'; import Menu from "@/views/admin/Menu.vue"; +import {dateFormat} from "@/utils/libs"; const activeName = ref('basic') const system = ref({models: []}) @@ -292,6 +326,7 @@ const systemFormRef = ref(null) const models = ref([]) const openAIModels = ref([]) const notice = ref("") +const license = ref({is_active: false}) onMounted(() => { // 加载系统配置 @@ -315,8 +350,17 @@ onMounted(() => { ElMessage.error("获取模型失败:" + e.message) }) + fetchLicense() }) +const fetchLicense = () => { + httpGet("/api/admin/config/get/license").then(res => { + license.value = res.data + }).catch(e => { + ElMessage.error("获取 License 失败:" + e.message) + }) +} + const rules = reactive({ title: [{required: true, message: '请输入网站标题', trigger: 'blur',}], admin_title: [{required: true, message: '请输入控制台标题', trigger: 'blur',}], @@ -345,13 +389,14 @@ const save = function (key) { } // 激活授权 -const license = ref("") +const licenseKey = ref("") const active = () => { - if (license.value === "") { + if (licenseKey.value === "") { return ElMessage.error("请输入授权码") } - httpPost("/api/admin/active", {license: license.value}).then(res => { + httpPost("/api/admin/active", {license: licenseKey.value}).then(res => { ElMessage.success("授权成功,机器编码为:" + res.data) + fetchLicense() }).catch(e => { ElMessage.error(e.message) }) @@ -401,10 +446,9 @@ const onUploadImg = (files, callback) => { }).catch(e => { ElMessage.error('图片上传失败:' + e.message) }) - - }; +