diff --git a/controller/user.go b/controller/user.go index 8fd10b82..f382fdaf 100644 --- a/controller/user.go +++ b/controller/user.go @@ -7,6 +7,7 @@ import ( "one-api/common" "one-api/model" "strconv" + "time" "github.com/gin-contrib/sessions" "github.com/gin-gonic/gin" @@ -80,6 +81,11 @@ func setupLogin(user *model.User, c *gin.Context) { Role: user.Role, Status: user.Status, } + user.LastLoginAt = time.Now().Unix() + err = user.Update(false) + if err != nil { + common.SysError(fmt.Sprintf("update user last_login_at err: %s", err.Error())) + } c.JSON(http.StatusOK, gin.H{ "message": "", "success": true, diff --git a/model/user.go b/model/user.go index 7c771840..f9d21777 100644 --- a/model/user.go +++ b/model/user.go @@ -28,6 +28,8 @@ type User struct { Group string `json:"group" gorm:"type:varchar(32);default:'default'"` AffCode string `json:"aff_code" gorm:"type:varchar(32);column:aff_code;uniqueIndex"` InviterId int `json:"inviter_id" gorm:"type:int;column:inviter_id;index"` + CreatedAt int64 `json:"created_at"` + LastLoginAt int64 `json:"last_login_at"` } func GetMaxUserId() int { diff --git a/web/src/components/LogsTable.js b/web/src/components/LogsTable.js index bacb7689..5aeb8bfe 100644 --- a/web/src/components/LogsTable.js +++ b/web/src/components/LogsTable.js @@ -3,15 +3,8 @@ import { Button, Form, Header, Label, Pagination, Segment, Select, Table } from import { API, isAdmin, showError, timestamp2string } from '../helpers'; import { ITEMS_PER_PAGE } from '../constants'; -import { renderQuota } from '../helpers/render'; +import { renderQuota, renderTimestamp } from '../helpers/render'; -function renderTimestamp(timestamp) { - return ( - <> - {timestamp2string(timestamp)} - > - ); -} const MODE_OPTIONS = [ { key: 'all', text: '全部用户', value: 'all' }, diff --git a/web/src/components/UsersTable.js b/web/src/components/UsersTable.js index f8fb0a75..597fcdea 100644 --- a/web/src/components/UsersTable.js +++ b/web/src/components/UsersTable.js @@ -4,7 +4,7 @@ import { Link } from 'react-router-dom'; import { API, showError, showSuccess } from '../helpers'; import { ITEMS_PER_PAGE } from '../constants'; -import { renderGroup, renderNumber, renderQuota, renderText } from '../helpers/render'; +import { renderGroup, renderNumber, renderQuota, renderText, renderTimestamp } from '../helpers/render'; function renderRole(role) { switch (role) { @@ -207,6 +207,22 @@ const UsersTable = () => { > 状态 +