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 @@
>
-
+
+
+
@@ -76,7 +78,7 @@
-
+
{{ dateFormat(scope.row['last_used']) }}
@@ -85,12 +87,22 @@
- 删除
+
+ 删除
+
+
+
+
@@ -111,7 +123,6 @@ export default defineComponent({
components: {Plus},
data() {
return {
- title: "系统管理",
apiKey: '',
form: {},
apiKeys: [],
@@ -143,13 +154,12 @@ export default defineComponent({
},
},
methods: {
- saveConfig: function (e) {
- this.form['temperature'] = parseFloat(this.form['temperature'])
- this.form['chat_context_expire_time'] = parseInt(this.form['chat_context_expire_time'])
- this.form['max_tokens'] = parseInt(this.form['max_tokens'])
+ saveConfig: function () {
+ this.form['temperature'] = parseFloat(this.form.temperature)
+ this.form['chat_context_expire_time'] = parseInt(this.form.chat_context_expire_time)
+ this.form['max_tokens'] = parseInt(this.form.max_tokens)
httpPost("/api/admin/config/set", this.form).then(() => {
ElMessage.success("保存成功");
- e.currentTarget.blur()
}).catch((e) => {
console.log(e.message);
ElMessage.error("保存失败");
@@ -164,21 +174,21 @@ export default defineComponent({
httpPost('api/admin/apikey/add', {api_key: this.apiKey.trim()}).then(() => {
ElMessage.success('添加成功')
- this.apiKeys.push({value: this.apiKey, last_used: 0})
+ this.apiKeys.unshift({value: this.apiKey, last_used: 0})
this.apiKey = ''
}).catch((e) => {
- ElMessage.error('添加失败,'+e.message)
+ ElMessage.error('添加失败,' + e.message)
})
},
- removeApiKey:function (key) {
+ removeApiKey: function (key) {
httpPost('api/admin/apikey/remove', {api_key: key}).then(() => {
ElMessage.success('删除成功')
- this.apiKeys = removeArrayItem(this.apiKeys, key, function (v1,v2) {
+ this.apiKeys = removeArrayItem(this.apiKeys, key, function (v1, v2) {
return v1.value === v2
})
}).catch((e) => {
- ElMessage.error('删除失败,'+e.message)
+ ElMessage.error('删除失败,' + e.message)
})
}
}
diff --git a/web/src/views/admin/UserList.vue b/web/src/views/admin/UserList.vue
index dfb9e034..f5fe3bfb 100644
--- a/web/src/views/admin/UserList.vue
+++ b/web/src/views/admin/UserList.vue
@@ -1,30 +1,36 @@
-
+
- 新增
+
+
+
+ 新增
-
- 批量新增
+
+
+
+
+ 批量新增
-
-
-
-
+
+
+
+
- 未激活
- {{dateFormat(scope.row.active_time)}}
+ 未激活
+ {{ scope.row.active_time }}
-
+
- 未激活
- {{dateFormat(scope.row.expired_time)}}
+ 未激活
+ {{ scope.row.expired_time }}
@@ -36,8 +42,20 @@
- 编辑
- 删除
+ 编辑
+
+
+ 删除
+
+
+
@@ -46,37 +64,37 @@
-
+
-
+
-
+
-
+
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -108,127 +259,160 @@
-
\ No newline at end of file