From 627883e89a9072c6b36acdb5da349979e5307a2c Mon Sep 17 00:00:00 2001 From: Lemon-miaow Date: Sat, 4 Jul 2026 09:40:14 +0800 Subject: [PATCH] fix(panel): refine reset password messages and fix empty email placeholder in mock api response --- panel/dev/mockApi.ts | 2 +- panel/src/i18n/resources/en-US/admin.json | 9 +++++---- panel/src/i18n/resources/zh-CN/admin.json | 9 +++++---- panel/src/pages/admin/UserDetailPage.tsx | 6 +++++- 4 files changed, 16 insertions(+), 10 deletions(-) diff --git a/panel/dev/mockApi.ts b/panel/dev/mockApi.ts index 73b12bc..4a938cb 100644 --- a/panel/dev/mockApi.ts +++ b/panel/dev/mockApi.ts @@ -1045,7 +1045,7 @@ async function handleUserRoute(ctx: SessionContext): Promise { if (is("POST", ctx) && subAction === "reset-password") { acc.mustChangePassword = true; acc.updated_at = new Date().toISOString(); - sendJSON(ctx.res, 200, { ok: true }); + sendJSON(ctx.res, 200, { ok: true, email: acc.email || "" }); return true; } diff --git a/panel/src/i18n/resources/en-US/admin.json b/panel/src/i18n/resources/en-US/admin.json index 11aae9a..8fac263 100644 --- a/panel/src/i18n/resources/en-US/admin.json +++ b/panel/src/i18n/resources/en-US/admin.json @@ -175,18 +175,19 @@ "users_danger_enable_desc": "Allow this user to log in again.", "users_danger_enable_btn": "Enable", "users_danger_reset_pw": "Reset Password", - "users_danger_reset_pw_desc": "A high-entropy random password will be generated and the user will be forced to change it on next login. All active sessions are revoked immediately.", - "users_danger_reset_pw_desc_email": "A high-entropy random password will be generated and sent to {{email}}. The user will be forced to change it on next login. All active sessions are revoked immediately.", + "users_danger_reset_pw_desc": "A random password will be generated and the user will be forced to change it on next login. All active sessions are revoked immediately.", + "users_danger_reset_pw_desc_email": "A random password will be generated and sent to {{email}}. The user will be forced to change it on next login. All active sessions are revoked immediately.", "users_danger_reset_pw_btn": "Reset Password", "users_danger_reset_pw_confirm": "Reset Password", "users_pw_reset_ok": "Password reset. The new password was sent to {{email}}.", + "users_pw_reset_ok_no_email": "Password reset. Since this user has no email address, it was logged server-side.", "users_danger_disable_dlg_title": "Disable User", "users_danger_disable_dlg_desc": "This user will be unable to log in. All active sessions will be revoked immediately.", "users_danger_enable_dlg_title": "Enable User", "users_danger_enable_dlg_desc": "This user will be able to log in again.", "users_danger_reset_pw_dlg_title": "Reset Password", - "users_danger_reset_pw_dlg_desc_email": "A high-entropy random password will be generated and sent to {{email}}. The user will be forced to change it on next login. All existing sessions will be revoked.", - "users_danger_reset_pw_dlg_desc_no_email": "A high-entropy random password will be generated. Since this user has no email address, it will be logged server-side. The user will be forced to change it on next login. All existing sessions will be revoked.", + "users_danger_reset_pw_dlg_desc_email": "A random password will be generated and sent to {{email}}. The user will be forced to change it on next login. All existing sessions will be revoked.", + "users_danger_reset_pw_dlg_desc_no_email": "A random password will be generated. Since this user has no email address, it will be logged server-side. The user will be forced to change it on next login. All existing sessions will be revoked.", "users_danger_delete_dlg_title": "Delete User", "users_danger_delete_dlg_desc": "This action is permanent. The user's owned servers will be released, all sessions revoked, and the account permanently disabled. This cannot be undone through the panel.", "users_danger_delete": "Delete User", diff --git a/panel/src/i18n/resources/zh-CN/admin.json b/panel/src/i18n/resources/zh-CN/admin.json index 5472fa8..a5e06f3 100644 --- a/panel/src/i18n/resources/zh-CN/admin.json +++ b/panel/src/i18n/resources/zh-CN/admin.json @@ -175,18 +175,19 @@ "users_danger_enable_desc": "允许此用户重新登录。", "users_danger_enable_btn": "启用", "users_danger_reset_pw": "重置密码", - "users_danger_reset_pw_desc": "将生成高熵随机密码,用户下次登录时将被强制修改密码。所有活跃会话将被立即撤销。", - "users_danger_reset_pw_desc_email": "将生成高熵随机密码并发送至 {{email}}。用户下次登录时将被强制修改密码。所有活跃会话将被立即撤销。", + "users_danger_reset_pw_desc": "将生成随机密码,用户下次登录时将被强制修改密码。所有活跃会话将被立即撤销。", + "users_danger_reset_pw_desc_email": "将生成随机密码并发送至 {{email}}。用户下次登录时将被强制修改密码。所有活跃会话将被立即撤销。", "users_danger_reset_pw_btn": "重置密码", "users_danger_reset_pw_confirm": "确认重置", "users_pw_reset_ok": "密码已重置,新密码已发送至 {{email}}。", + "users_pw_reset_ok_no_email": "密码已重置。该用户未设置邮箱,新密码已记录在服务端日志中。", "users_danger_disable_dlg_title": "禁用用户", "users_danger_disable_dlg_desc": "此用户将无法登录。所有活跃会话将被立即撤销。", "users_danger_enable_dlg_title": "启用用户", "users_danger_enable_dlg_desc": "此用户将可以重新登录。", "users_danger_reset_pw_dlg_title": "重置密码", - "users_danger_reset_pw_dlg_desc_email": "将生成高熵随机密码并发送至 {{email}}。用户下次登录时将被强制修改密码。所有现有会话将被撤销。", - "users_danger_reset_pw_dlg_desc_no_email": "将生成高熵随机密码。由于此用户未设置邮箱地址,密码将记录在服务端日志中。用户下次登录时将被强制修改密码。所有现有会话将被撤销。", + "users_danger_reset_pw_dlg_desc_email": "将生成随机密码并发送至 {{email}}。用户下次登录时将被强制修改密码。所有现有会话将被撤销。", + "users_danger_reset_pw_dlg_desc_no_email": "将生成随机密码。由于此用户未设置邮箱地址,密码将记录在服务端日志中。用户下次登录时将被强制修改密码。所有现有会话将被撤销。", "users_danger_delete_dlg_title": "删除用户", "users_danger_delete_dlg_desc": "此操作不可逆。该用户拥有的所有服务器将被释放,所有会话将被撤销,账号将被永久禁用。此操作无法通过面板撤销。", "users_danger_delete": "删除用户", diff --git a/panel/src/pages/admin/UserDetailPage.tsx b/panel/src/pages/admin/UserDetailPage.tsx index 9363447..2ad2054 100644 --- a/panel/src/pages/admin/UserDetailPage.tsx +++ b/panel/src/pages/admin/UserDetailPage.tsx @@ -825,7 +825,11 @@ function DangerDialogs({ setErr(null); try { const r = await api.resetUserPassword(user.id); - setOk(t("users_pw_reset_ok", { email: r.email })); + if (r.email) { + setOk(t("users_pw_reset_ok", { email: r.email })); + } else { + setOk(t("users_pw_reset_ok_no_email")); + } setLoading(false); } catch (e) { setErr(humanizeError(e));