fix: 注销恢复流程文案统一为'撤销注销',消除歧义

- '恢复'易误解为故障恢复,改为'撤销注销'明确表达取消注销操作
- 涉及后端错误提示、API 响应、前端弹窗及按钮文案共 9 处
This commit is contained in:
2026-05-31 01:26:04 +08:00
parent a62039e6bb
commit 0bcaadceb4
5 changed files with 10 additions and 10 deletions

View File

@ -11,7 +11,7 @@ var (
ErrInvalidCred = errors.New("邮箱或密码错误") ErrInvalidCred = errors.New("邮箱或密码错误")
ErrUserNotFound = errors.New("用户不存在") ErrUserNotFound = errors.New("用户不存在")
ErrUserBanned = errors.New("该账号已被封禁") ErrUserBanned = errors.New("该账号已被封禁")
ErrUserDeleted = errors.New("该账号已申请注销,登录即自动恢复") ErrUserDeleted = errors.New("该账号正在注销,登录即撤销注销")
// 统一返回,避免泄露用户存在性、软删除状态等内部信息 // 统一返回,避免泄露用户存在性、软删除状态等内部信息
ErrUserLocked = errors.New("邮箱或密码错误") ErrUserLocked = errors.New("邮箱或密码错误")
ErrWeakPassword = errors.New("密码需至少 8 位,且包含字母和数字") ErrWeakPassword = errors.New("密码需至少 8 位,且包含字母和数字")
@ -32,7 +32,7 @@ var (
// 密码 & 注销相关 // 密码 & 注销相关
ErrIncorrectPassword = errors.New("当前密码错误") ErrIncorrectPassword = errors.New("当前密码错误")
ErrLoginBeforeDelete = errors.New("请先登录再注销") ErrLoginBeforeDelete = errors.New("请先登录再注销")
ErrNeedsConfirmRestore = errors.New("需要二次确认恢复账号") ErrNeedsConfirmRestore = errors.New("需要二次确认撤销注销")
ErrOwnerCannotDelete = errors.New("站长不可自主注销,请先转让站长权限") ErrOwnerCannotDelete = errors.New("站长不可自主注销,请先转让站长权限")
ErrRegistrationDisabled = errors.New("注册功能已关闭") ErrRegistrationDisabled = errors.New("注册功能已关闭")
ErrMaintenanceMode = errors.New("社区正在维护中,仅站长可登录") ErrMaintenanceMode = errors.New("社区正在维护中,仅站长可登录")

View File

@ -69,7 +69,7 @@ func (ac *AuthController) Login(c *gin.Context) {
c.JSON(http.StatusOK, gin.H{ c.JSON(http.StatusOK, gin.H{
"success": true, "success": true,
"action": "confirm_restore", "action": "confirm_restore",
"message": "你的账号正在注销中,登录将中止注销流程", "message": "你的账号正在注销中,登录将撤销注销并恢复账号",
}) })
default: default:
common.Error(c, http.StatusInternalServerError, "登录失败,请稍后重试") common.Error(c, http.StatusInternalServerError, "登录失败,请稍后重试")
@ -118,5 +118,5 @@ func (ac *AuthController) ConfirmRestore(c *gin.Context) {
} }
common.SetSessionCookie(c, sid, req.RememberMe, ac.cfg) common.SetSessionCookie(c, sid, req.RememberMe, ac.cfg)
common.OkWithMessage(c, user, "账号已恢复,欢迎回来") common.OkWithMessage(c, user, "注销已撤销,欢迎回来")
} }

View File

@ -55,5 +55,5 @@ func (sc *SettingsController) DeleteAccount(c *gin.Context) {
return return
} }
common.OkMessage(c, "账号已注销7 天内重新登录即可恢复") common.OkMessage(c, "账号已注销7 天内重新登录即可撤销注销")
} }

View File

@ -212,7 +212,7 @@
<div class="settings-card settings-card-danger"> <div class="settings-card settings-card-danger">
<div class="settings-card-header"> <div class="settings-card-header">
<h2>注销账号</h2> <h2>注销账号</h2>
<p class="settings-card-desc">账号将在 7 天后正式注销,期间可随时重新登录恢复</p> <p class="settings-card-desc">账号将在 7 天后正式注销,期间可随时重新登录撤销注销</p>
</div> </div>
<div class="settings-card-body"> <div class="settings-card-body">
<div class="form-group"> <div class="form-group">
@ -634,7 +634,7 @@
showSettingsToast('请输入密码确认', true); showSettingsToast('请输入密码确认', true);
return; return;
} }
if (!confirm('确定要注销账号吗?\n\n注销后 7 天内重新登录可自动恢复,期满后将永久删除。')) { if (!confirm('确定要注销账号吗?\n\n注销后 7 天内重新登录可撤销注销,期满后将永久删除。')) {
return; return;
} }
deleteAccountBtn.disabled = true; deleteAccountBtn.disabled = true;

View File

@ -82,7 +82,7 @@
loginInProgress = false; loginInProgress = false;
submitBtn.disabled = false; submitBtn.disabled = false;
submitBtn.textContent = '登录'; submitBtn.textContent = '登录';
if (confirm(resp.message + '\n\n确认继续登录将中止注销流程。')) { if (confirm(resp.message + '\n\n确认登录将撤销注销并恢复账号。')) {
doConfirmRestore(email, password); doConfirmRestore(email, password);
} }
} else if (xhr.status === 200 && resp && resp.success) { } else if (xhr.status === 200 && resp && resp.success) {
@ -106,7 +106,7 @@
if (loginInProgress) return; if (loginInProgress) return;
loginInProgress = true; loginInProgress = true;
submitBtn.disabled = true; submitBtn.disabled = true;
submitBtn.textContent = '恢复中...'; submitBtn.textContent = '撤销注销中...';
var xhr = new XMLHttpRequest(); var xhr = new XMLHttpRequest();
xhr.open('POST', '/api/auth/confirm-restore', true); xhr.open('POST', '/api/auth/confirm-restore', true);
@ -117,7 +117,7 @@
try { resp = JSON.parse(xhr.responseText); } catch (err) { resp = null; } try { resp = JSON.parse(xhr.responseText); } catch (err) { resp = null; }
if (xhr.status === 200 && resp && resp.success) { if (xhr.status === 200 && resp && resp.success) {
window.MetaLab.toast(toast, resp.message || '账号已恢复,欢迎回来', false); window.MetaLab.toast(toast, resp.message || '注销已撤销,欢迎回来', false);
setTimeout(function () { setTimeout(function () {
window.location.href = getRedirect(); window.location.href = getRedirect();
}, 800); }, 800);