fix: 修复更名退款逻辑、审核列表显示及更名消耗确认提示
- 首次更名审核被拒不再退款,首次免费未扣费不产生退款 - 审核列表提交者列改用 UID,当前用户名列显示当前用户名 - 更名消耗提示改为确认弹窗,首次/非首次动态显示不同文案
This commit is contained in:
@ -50,17 +50,17 @@ func (ac *AuditController) ListAudits(c *gin.Context) {
|
||||
return
|
||||
}
|
||||
|
||||
// 为每个审核记录附加提交者的用户名
|
||||
// 为每个审核记录附加提交者的当前用户名
|
||||
type auditItem struct {
|
||||
model.AuditSubmission
|
||||
SubmitterUsername string `json:"submitter_username"`
|
||||
CurrentUsername string `json:"current_username"`
|
||||
}
|
||||
|
||||
items := make([]auditItem, 0, len(result.Items))
|
||||
for _, a := range result.Items {
|
||||
item := auditItem{AuditSubmission: a}
|
||||
if user, err := ac.userRepo.FindByID(a.UserID); err == nil {
|
||||
item.SubmitterUsername = user.Username
|
||||
item.CurrentUsername = user.Username
|
||||
}
|
||||
items = append(items, item)
|
||||
}
|
||||
|
||||
@ -58,15 +58,23 @@ func (sc *SettingsController) SettingsPage(c *gin.Context) {
|
||||
// 查询待审核类型(用于前端显示审核提示)
|
||||
pendingTypes, _ := sc.auditService.GetPendingTypes(uid)
|
||||
|
||||
// 是否已完成首次改名(用于前端确认弹窗显示消耗提示)
|
||||
hasCompletedRename := false
|
||||
if sc.levelSvc != nil {
|
||||
completed, _ := sc.levelSvc.HasCompletedTask(uid, "username")
|
||||
hasCompletedRename = completed
|
||||
}
|
||||
|
||||
data := gin.H{
|
||||
"Title": "个人设置",
|
||||
"ExtraCSS": "/static/css/settings.css",
|
||||
"ActiveTab": tab,
|
||||
"User": user,
|
||||
"RoleName": model.RoleDisplayNames[user.Role],
|
||||
"StatusName": model.StatusDisplayNames[user.Status],
|
||||
"PendingTypes": pendingTypes,
|
||||
"AuditTypes": model.AuditTypeNames,
|
||||
"Title": "个人设置",
|
||||
"ExtraCSS": "/static/css/settings.css",
|
||||
"ActiveTab": tab,
|
||||
"User": user,
|
||||
"RoleName": model.RoleDisplayNames[user.Role],
|
||||
"StatusName": model.StatusDisplayNames[user.Status],
|
||||
"PendingTypes": pendingTypes,
|
||||
"AuditTypes": model.AuditTypeNames,
|
||||
"HasCompletedRename": hasCompletedRename,
|
||||
}
|
||||
|
||||
// 登录管理 tab 需要额外数据
|
||||
|
||||
@ -45,18 +45,28 @@ func (s *AuditService) review(reviewerID uint, submissionID uint, approved bool,
|
||||
} else {
|
||||
submission.Status = model.AuditStatusRejected
|
||||
submission.RejectReason = &reason
|
||||
// 通知用户审核被拒(改名审核追加域能返还提示)
|
||||
|
||||
// 改名审核被拒 → 仅非首次改名(已扣费)才退还域能
|
||||
// 首次改名免费,被拒不退还
|
||||
shouldRefund := false
|
||||
if submission.AuditType == model.AuditTypeUsername && s.energyRefundSvc != nil {
|
||||
if s.levelSvc != nil {
|
||||
hasCompleted, _ := s.levelSvc.HasCompletedTask(submission.UserID, "username")
|
||||
shouldRefund = hasCompleted
|
||||
}
|
||||
if shouldRefund {
|
||||
_ = s.energyRefundSvc.RefundOnRenameReject(submission.UserID)
|
||||
}
|
||||
}
|
||||
|
||||
// 通知用户审核被拒(仅实际退款时追加域能返还提示)
|
||||
if s.notifier != nil {
|
||||
reasonMsg := reason
|
||||
if submission.AuditType == model.AuditTypeUsername {
|
||||
if shouldRefund {
|
||||
reasonMsg += "。扣除的域能已被返还"
|
||||
}
|
||||
s.notifier.NotifyAuditRejected(submission.UserID, submission.AuditType, reasonMsg, submission.ID)
|
||||
}
|
||||
// 改名审核被拒 → 返还域能
|
||||
if submission.AuditType == model.AuditTypeUsername && s.energyRefundSvc != nil {
|
||||
_ = s.energyRefundSvc.RefundOnRenameReject(submission.UserID)
|
||||
}
|
||||
}
|
||||
return s.auditRepo.Update(submission)
|
||||
}
|
||||
|
||||
@ -40,6 +40,7 @@ type auditNotifier interface {
|
||||
// auditTaskCompleter 审核通过时触发首次任务奖励的接口
|
||||
type auditTaskCompleter interface {
|
||||
CompleteTask(userID uint, taskType string) (newExp int, levelUp bool, err error)
|
||||
HasCompletedTask(userID uint, taskType string) (bool, error)
|
||||
}
|
||||
|
||||
// energyRenameRefunder 改名审核被拒时返还域能的接口(ISP)
|
||||
|
||||
Reference in New Issue
Block a user