From 1b0116539f79680f5b2f41f669833c36fd50f7c5 Mon Sep 17 00:00:00 2001 From: Sean Du Date: Thu, 4 Jun 2026 19:30:41 +0800 Subject: [PATCH] webui: Add profile reset defaults - Add a reset action for profile values in the admin page - Restore reset values to the auto-created user defaults instead of the bootstrap user - Remind users to re-login after saving or resetting profile changes Signed-off-by: Sean Du --- internal/handler/ghome/account/login.go | 4 +- internal/handler/webui/profile.go | 48 ++++++++++++++++++++++++ internal/model/user/userpref.go | 18 +++++++++ static/templates/admin/profile.html | 50 ++++++++++++++++++++++++- 4 files changed, 116 insertions(+), 4 deletions(-) diff --git a/internal/handler/ghome/account/login.go b/internal/handler/ghome/account/login.go index 9f2f553..b3d0e98 100644 --- a/internal/handler/ghome/account/login.go +++ b/internal/handler/ghome/account/login.go @@ -136,8 +136,8 @@ func addUser(dbSession *xorm.Session, phone, password string, isDefault bool) (g awardID := 1 // 音乃木坂学生 backgroundID := 1 // 初始背景 unitID := 31 // 初始高坂穂乃果 - userName := "音乃木坂学生" - userDesc := "你好。" + userName := usermodel.DefaultAutoUserName + userDesc := usermodel.DefaultAutoUserDesc // 是否初始化 if isDefault { // 初始化默认用户 diff --git a/internal/handler/webui/profile.go b/internal/handler/webui/profile.go index 489bace..4d5259b 100644 --- a/internal/handler/webui/profile.go +++ b/internal/handler/webui/profile.go @@ -135,7 +135,55 @@ func updateProfile(ctx *gin.Context) { }) } +func resetProfile(ctx *gin.Context) { + pref := usermodel.UserPref{} + exists, err := db.UserEng.Table(new(usermodel.UserPref)). + Where("user_id = ?", ctx.GetInt("userid")).Get(&pref) + if err != nil || !exists { + ctx.JSON(http.StatusOK, webuischema.Msg{ + Code: 1, + Message: "用户资料读取失败!", + }) + return + } + + pref.ResetProfileDefaults() + pref.UpdateTime = time.Now().Unix() + + _, err = db.UserEng.Table(new(usermodel.UserPref)). + Where("user_id = ?", ctx.GetInt("userid")). + Cols( + "user_name", + "user_level", + "user_desc", + "invite_code", + "user_exp", + "next_exp", + "game_coin", + "sns_coin", + "energy_max", + "over_max_energy", + "profile_version", + "update_time", + ). + Update(&pref) + if err != nil { + ctx.JSON(http.StatusOK, webuischema.Msg{ + Code: 1, + Message: "重置失败!", + }) + return + } + + ctx.JSON(http.StatusOK, webuischema.Msg{ + Code: 0, + Message: "已恢复默认值!", + Redirect: "/admin/profile", + }) +} + func init() { router.AddHandler("admin", "GET", "/profile", middleware.WebAuth, profilePage) router.AddHandler("admin", "POST", "/profile", middleware.WebAuth, updateProfile) + router.AddHandler("admin", "POST", "/profile/reset", middleware.WebAuth, resetProfile) } diff --git a/internal/model/user/userpref.go b/internal/model/user/userpref.go index 030a973..ff73016 100644 --- a/internal/model/user/userpref.go +++ b/internal/model/user/userpref.go @@ -8,6 +8,8 @@ import ( const CurrentUserPrefProfileVersion = 1 const ( + DefaultAutoUserName = "音乃木坂学生" + DefaultAutoUserDesc = "你好。" DefaultUserLevel = 1028 DefaultUserExp = 1089696 DefaultUserNextExp = 1207185 @@ -65,6 +67,22 @@ func (u *UserPref) ApplyProfileDefaults() { u.ProfileVersion = CurrentUserPrefProfileVersion } +func (u *UserPref) ResetProfileDefaults() { + u.UserName = DefaultAutoUserName + u.UserDesc = DefaultAutoUserDesc + u.UserLevel = DefaultUserLevel + u.UserExp = DefaultUserExp + u.NextExp = DefaultUserNextExp + u.GameCoin = DefaultUserGameCoin + u.SnsCoin = DefaultUserSnsCoin + u.EnergyMax = DefaultUserEnergyMax + u.OverMaxEnergy = DefaultUserOverMaxEnergy + if u.UserID > 0 { + u.InviteCode = strconv.Itoa(u.UserID) + } + u.ProfileVersion = CurrentUserPrefProfileVersion +} + func (u UserPref) NeedsProfileMigration() bool { return u.ProfileVersion < CurrentUserPrefProfileVersion } diff --git a/static/templates/admin/profile.html b/static/templates/admin/profile.html index 25fc02f..eb0f1f3 100644 --- a/static/templates/admin/profile.html +++ b/static/templates/admin/profile.html @@ -7,6 +7,25 @@ SIF 小助手 {{ template "admin/nav/css.html" . }} + @@ -90,7 +109,10 @@
- +
+ + +
@@ -105,11 +127,35 @@ $("#save-profile").click(function () { $.post("/admin/profile", $("form").serialize(), function (res) { - layer.msg(res.message || "请求完成"); + var message = res.message || "请求完成"; + if (res.code === 0) { + message += " 请重新登录游戏生效。"; + } + layer.msg(message); }).fail(function () { layer.msg("请求失败,请稍后再试"); }); }); + + $("#reset-profile").click(function () { + layer.confirm("将数值项和用户 ID 恢复为默认安全值,是否继续?", function (index) { + $.post("/admin/profile/reset", function (res) { + var message = res.message || "请求完成"; + if (res.code === 0) { + message += " 请重新登录游戏生效。"; + } + layer.msg(message); + if (res.code === 0) { + setTimeout(function () { + window.location.reload(); + }, 1800); + } + }).fail(function () { + layer.msg("请求失败,请稍后再试"); + }); + layer.close(index); + }); + }); });