diff --git a/server/handler_admin_role.go b/server/handler_admin_role.go index eaf9ab81..812ceb39 100644 --- a/server/handler_admin_role.go +++ b/server/handler_admin_role.go @@ -2,20 +2,25 @@ package server import ( "encoding/json" - "github.com/gin-gonic/gin" "net/http" "openai/types" + + "github.com/gin-gonic/gin" ) // GetChatRoleListHandle 获取聊天角色列表 func (s *Server) GetChatRoleListHandle(c *gin.Context) { - sessionId := c.GetHeader(types.TokenName) - session := s.ChatSession[sessionId] - user, err := GetUser(session.Username) - if err != nil { - c.JSON(http.StatusOK, types.BizVo{Code: types.Failed, Message: "Hacker Access!!!"}) - return + var user *types.User + username := c.Query("username") + if username != "" { + u, err := GetUser(username) + if err != nil { + c.JSON(http.StatusOK, types.BizVo{Code: types.Failed, Message: "Hacker Access!!!"}) + return + } + user = u } + var rolesOrder = []string{"gpt", "teacher", "translator", "english_trainer", "weekly_report", "girl_friend", "kong_zi", "lu_xun", "steve_jobs", "elon_musk", "red_book", "dou_yin", "programmer", "seller", "good_comment", "psychiatrist", "artist"} @@ -23,10 +28,11 @@ func (s *Server) GetChatRoleListHandle(c *gin.Context) { var roles = GetChatRoles() for _, k := range rolesOrder { // 确认当前用户是否订阅了当前角色 - if v, ok := user.ChatRoles[k]; !ok || v != 1 { - continue + if user != nil { + if v, ok := user.ChatRoles[k]; !ok || v != 1 { + continue + } } - if v, ok := roles[k]; ok && v.Enable { res = append(res, struct { Key string `json:"key"` diff --git a/utils/leveldb.go b/utils/leveldb.go index ae839dc4..9015bb11 100644 --- a/utils/leveldb.go +++ b/utils/leveldb.go @@ -2,6 +2,7 @@ package utils import ( "encoding/json" + "github.com/syndtr/goleveldb/leveldb" "github.com/syndtr/goleveldb/leveldb/util" ) @@ -40,13 +41,59 @@ func (db *LevelDB) Get(key string) ([]byte, error) { func (db *LevelDB) Search(prefix string) []string { var items = make([]string, 0) iter := db.driver.NewIterator(util.BytesPrefix([]byte(prefix)), nil) + defer iter.Release() + for iter.Next() { items = append(items, string(iter.Value())) } - iter.Release() return items } +type PageVo struct { + Items []string + Page int + PageSize int + Total int + TotalPage int +} + +func (db *LevelDB) SearchPage(prefix string, page int, pageSize int) *PageVo { + var items = make([]string, 0) + iter := db.driver.NewIterator(util.BytesPrefix([]byte(prefix)), nil) + defer iter.Release() + + res := &PageVo{Page: page, PageSize: pageSize} + // 计算数据总数和总页数 + total := 0 + for iter.Next() { + total++ + } + res.TotalPage = (total + pageSize - 1) / pageSize + res.Total = total + + // 计算目标页码的起始和结束位置 + start := (page - 1) * pageSize + if start > total { + return nil + } + end := start + pageSize + if end > total { + end = total + } + + // 跳转到目标页码的起始位置 + count := 0 + for iter.Next() { + if count >= start { + items = append(items, string(iter.Value())) + } + count++ + } + iter.Release() + res.Items = items + return res +} + func (db *LevelDB) Delete(key string) error { return db.driver.Delete([]byte(key), nil) } diff --git a/web/src/views/admin/UserList.vue b/web/src/views/admin/UserList.vue index 3b71062e..dfb9e034 100644 --- a/web/src/views/admin/UserList.vue +++ b/web/src/views/admin/UserList.vue @@ -1,24 +1,242 @@ + + \ No newline at end of file