diff --git a/CHANGELOG.md b/CHANGELOG.md index 05eec703..5d0ec389 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,11 +1,17 @@ # 更新日志 -## v3.2.8 +## v4.0.0 +非兼容版本,重大重构,引入算力概念,将系统中所有的能力(AI对话,MJ绘画,SD绘画,DALL绘画)全部使用算力来兑换。 +只要你的算力值余额不为0,你就可以进行任何操作。比如一次 GPT3.5 对话消耗1个单位算力,一次 GPT4 对话消耗10个算力。一次 MJ 对话消耗15个算力... + +* 功能重构:重构整体系统,全部采用算力来进行结算 * 功能优化:SD 绘画页面采用 websocket 替换 http 轮询机制,节省带宽 * 功能优化:移动端聊天页面图片支持预览和放大功能 * 功能优化:MJ 和 SD 页面数据分页加载,解决一次性加载太多数据导致页面卡顿的问题 -* 功能优化:手机端 MJ 增加提示词翻译功能 -* 功能优化:控制台订单管理页面显示未支付订单,并提供订单删除功能。 -* 功能新增:移动端支持充值 +* 功能优化:**前端不登录也可以预览功能,只有在发起操作的时候才需要登录** +* 功能优化:控制台订单管理页面显示未支付订单,并提供订单删除功能 +* 功能新增:支持H5支付 +* 功能优化:支持数学公式的识别和美化输出 +* 功能新增:新增算力消费日志功能 ## v3.2.7 * 功能重构:采用 Vant 重构移动页面,新增 MidJourney 功能 diff --git a/api/handler/admin/power_log_handler.go b/api/handler/admin/power_log_handler.go new file mode 100644 index 00000000..80ce8879 --- /dev/null +++ b/api/handler/admin/power_log_handler.go @@ -0,0 +1,71 @@ +package admin + +import ( + "chatplus/core" + "chatplus/core/types" + "chatplus/handler" + "chatplus/store/model" + "chatplus/store/vo" + "chatplus/utils" + "chatplus/utils/resp" + + "github.com/gin-gonic/gin" + "gorm.io/gorm" +) + +type PowerLogHandler struct { + handler.BaseHandler +} + +func NewPowerLogHandler(app *core.AppServer, db *gorm.DB) *PowerLogHandler { + return &PowerLogHandler{BaseHandler: handler.BaseHandler{App: app, DB: db}} +} + +func (h *PowerLogHandler) List(c *gin.Context) { + var data struct { + Username string `json:"username"` + Type int `json:"type"` + Model string `json:"model"` + Date []string `json:"date"` + Page int `json:"page"` + PageSize int `json:"page_size"` + } + if err := c.ShouldBindJSON(&data); err != nil { + resp.ERROR(c, types.InvalidArgs) + return + } + + session := h.DB.Session(&gorm.Session{}) + if data.Model != "" { + session = session.Where("model", data.Model) + } + if data.Type > 0 { + session = session.Where("type", data.Type) + } + if len(data.Date) == 2 { + start := data.Date[0] + " 00:00:00" + end := data.Date[1] + " 00:00:00" + session = session.Where("created_at >= ? AND created_at <= ?", start, end) + } + + var total int64 + session.Model(&model.PowerLog{}).Count(&total) + var items []model.PowerLog + var list = make([]vo.PowerLog, 0) + offset := (data.Page - 1) * data.PageSize + res := session.Order("id DESC").Offset(offset).Limit(data.PageSize).Find(&items) + if res.Error == nil { + for _, item := range items { + var log vo.PowerLog + err := utils.CopyObject(item, &log) + if err != nil { + continue + } + log.Id = item.Id + log.CreatedAt = item.CreatedAt.Unix() + log.TypeStr = item.Type.String() + list = append(list, log) + } + } + resp.SUCCESS(c, vo.NewPage(total, data.Page, data.PageSize, list)) +} diff --git a/api/handler/power_log_handler.go b/api/handler/power_log_handler.go index 9bfa3219..0da40d50 100644 --- a/api/handler/power_log_handler.go +++ b/api/handler/power_log_handler.go @@ -47,7 +47,7 @@ func (h *PowerLogHandler) List(c *gin.Context) { var items []model.PowerLog var list = make([]vo.PowerLog, 0) offset := (data.Page - 1) * data.PageSize - res := session.Debug().Order("id DESC").Offset(offset).Limit(data.PageSize).Find(&items) + res := session.Order("id DESC").Offset(offset).Limit(data.PageSize).Find(&items) if res.Error == nil { for _, item := range items { var log vo.PowerLog diff --git a/api/main.go b/api/main.go index 69089814..ab8b3eb4 100644 --- a/api/main.go +++ b/api/main.go @@ -139,6 +139,7 @@ func main() { fx.Provide(admin.NewProductHandler), fx.Provide(admin.NewOrderHandler), fx.Provide(admin.NewChatHandler), + fx.Provide(admin.NewPowerLogHandler), // 创建服务 fx.Provide(sms.NewSendServiceManager), @@ -407,6 +408,10 @@ func main() { group := s.Engine.Group("/api/powerLog/") group.POST("list", h.List) }), + fx.Invoke(func(s *core.AppServer, h *admin.PowerLogHandler) { + group := s.Engine.Group("/api/admin/powerLog/") + group.POST("list", h.List) + }), fx.Invoke(func(s *core.AppServer, db *gorm.DB) { err := s.Run(db) if err != nil { diff --git a/web/src/components/admin/AdminSidebar.vue b/web/src/components/admin/AdminSidebar.vue index afa7068c..3a94c671 100644 --- a/web/src/components/admin/AdminSidebar.vue +++ b/web/src/components/admin/AdminSidebar.vue @@ -126,6 +126,11 @@ const items = [ index: '/admin/system', title: '系统设置', }, + { + icon: 'log', + index: '/admin/powerLog', + title: '用户算力日志', + }, { icon: 'log', index: '/admin/loginLog', diff --git a/web/src/router.js b/web/src/router.js index 6c30c3ca..d510af6f 100644 --- a/web/src/router.js +++ b/web/src/router.js @@ -162,6 +162,12 @@ const routes = [ meta: {title: '对话管理'}, component: () => import('@/views/admin/ChatList.vue'), }, + { + path: '/admin/powerLog', + name: 'admin-power-log', + meta: {title: '算力日志'}, + component: () => import('@/views/admin/PowerLog.vue'), + }, ] }, diff --git a/web/src/views/admin/PowerLog.vue b/web/src/views/admin/PowerLog.vue new file mode 100644 index 00000000..eac6d37c --- /dev/null +++ b/web/src/views/admin/PowerLog.vue @@ -0,0 +1,147 @@ + + + + + + + + + + + + + + 搜索 + + + + + + + + + {{ scope.row.type_str }} + + + + + + +{{ scope.row.amount }} + -{{ scope.row.amount }} + + + + + + + {{ dateFormat(scope.row['created_at']) }} + + + + + + + + + + + + + + + + + + \ No newline at end of file