diff --git a/server/handler_admin_user.go b/server/handler_admin_user.go index cbd4c668..869d17b4 100644 --- a/server/handler_admin_user.go +++ b/server/handler_admin_user.go @@ -100,7 +100,7 @@ func (s *Server) BatchAddUserHandle(c *gin.Context) { } - var users = make([]types.User, 0) + var users = make([]UserVo, 0) for i := 0; i < data.Number; i++ { name := utils.RandString(12) _, err := GetUser(name) @@ -117,7 +117,7 @@ func (s *Server) BatchAddUserHandle(c *gin.Context) { Status: true} err = PutUser(user) if err == nil { - users = append(users, user) + users = append(users, user2vo(user)) } } @@ -165,7 +165,7 @@ func (s *Server) SetUserHandle(c *gin.Context) { user.RemainingCalls = int(v.(float64)) } if v, ok := data["expired_time"]; ok { - user.ExpiredTime = int64(v.(float64)) + user.ExpiredTime = utils.Str2stamp(v.(string)) } if v, ok := data["api_key"]; ok { user.ApiKey = v.(string) @@ -218,6 +218,19 @@ func (s *Server) RemoveUserHandle(c *gin.Context) { c.JSON(http.StatusOK, types.BizVo{Code: types.Success, Message: types.OkMsg}) } +type UserVo struct { + Name string `json:"name"` + MaxCalls int `json:"max_calls"` // 最多调用次数,如果为 0 则表示不限制 + RemainingCalls int `json:"remaining_calls"` // 剩余调用次数 + EnableHistory bool `json:"enable_history"` // 是否启用聊天记录 + Status bool `json:"status"` // 当前状态 + Term int `json:"term" default:"30"` // 会员有效期,单位:天 + ActiveTime string `json:"active_time"` // 激活时间 + ExpiredTime string `json:"expired_time"` // 到期时间 + ApiKey string `json:"api_key"` // OpenAI API KEY + ChatRoles []string `json:"chat_roles"` // 当前用户已订阅的聊天角色 map[role_key] => 0/1 +} + // GetUserListHandle 获取用户列表 func (s *Server) GetUserListHandle(c *gin.Context) { username := c.PostForm("username") @@ -231,5 +244,29 @@ func (s *Server) GetUserListHandle(c *gin.Context) { return } - c.JSON(http.StatusOK, types.BizVo{Code: types.Success, Message: types.OkMsg, Data: GetUsers()}) + users := make([]UserVo, 0) + for _, u := range GetUsers() { + users = append(users, user2vo(u)) + } + + c.JSON(http.StatusOK, types.BizVo{Code: types.Success, Message: types.OkMsg, Data: users}) +} + +// 将 User 实体转为 UserVo 实体 +func user2vo(user types.User) UserVo { + vo := UserVo{ + Name: user.Name, + MaxCalls: user.MaxCalls, + RemainingCalls: user.RemainingCalls, + EnableHistory: user.EnableHistory, + Status: user.Status, + Term: user.Term, + ActiveTime: utils.Stamp2str(user.ActiveTime), + ExpiredTime: utils.Stamp2str(user.ExpiredTime), + ChatRoles: make([]string, 0), + } + for k := range user.ChatRoles { + vo.ChatRoles = append(vo.ChatRoles, k) + } + return vo } diff --git a/utils/utils.go b/utils/utils.go index c3c2e322..e2bbeecc 100644 --- a/utils/utils.go +++ b/utils/utils.go @@ -34,3 +34,21 @@ func ContainsStr(slice []string, item string) bool { } return false } + +// Stamp2str 时间戳转字符串 +func Stamp2str(timestamp int64) string { + if timestamp == 0 { + return "" + } + return time.Unix(timestamp, 0).Format("2006-01-02 15:04:05") +} + +// Str2stamp 字符串转时间戳 +func Str2stamp(str string) int64 { + layout := "2006-01-02 15:04:05" + t, err := time.Parse(layout, str) + if err != nil { + return 0 + } + return t.Unix() +} diff --git a/web/src/views/Admin.vue b/web/src/views/Admin.vue index 4bf6f259..a597e304 100644 --- a/web/src/views/Admin.vue +++ b/web/src/views/Admin.vue @@ -319,7 +319,6 @@ $borderColor = #4676d0; .el-main { --el-main-padding: 0; - overflow: hidden; margin: 0; background-image url("~@/assets/img/bg_01.jpeg") diff --git a/web/src/views/ChatPlus.vue b/web/src/views/ChatPlus.vue index 555be57b..99a15638 100644 --- a/web/src/views/ChatPlus.vue +++ b/web/src/views/ChatPlus.vue @@ -819,6 +819,7 @@ export default defineComponent({ background-color #232425 cursor pointer } + .text { margin-left 10px; font-size 12px; diff --git a/web/src/views/admin/SysConfig.vue b/web/src/views/admin/SysConfig.vue index ec495926..dfb3c0dc 100644 --- a/web/src/views/admin/SysConfig.vue +++ b/web/src/views/admin/SysConfig.vue @@ -48,7 +48,7 @@ - + @@ -65,7 +65,9 @@ >