feat(admin-web/auth): support phone-or-email login and dim shell on expiry
Login form takes a phone-or-email identifier; user info now exposes phone so the shell can fall back through name → phone → email. When membership expires, the app stays on the current route but renders a minimal blocked state in the shell instead of redirecting to a dedicated page; an Axios interceptor flips the local session into the blocked state when the API returns trial/subscription errors. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -94,6 +94,7 @@ const enUS = {
|
||||
tenantAdminLogin: "Tenant Admin Login",
|
||||
loginAndEnter: "Sign in to workspace",
|
||||
email: "Email",
|
||||
loginIdentifier: "Phone / Email",
|
||||
password: "Password",
|
||||
defaultTestAccount: "Default account",
|
||||
defaultTestPassword: "Default password",
|
||||
@@ -101,6 +102,7 @@ const enUS = {
|
||||
membershipBlocked: {
|
||||
eyebrow: "Access Paused",
|
||||
title: "This tenant plan is unavailable",
|
||||
expiredMessage: "Membership expired. Please renew or contact support.",
|
||||
reasonTrialExpired: "The free trial's 3-day page access window has ended. All business pages are now locked. Please contact an administrator to reactivate trial access.",
|
||||
reasonRequired: "This tenant does not have an active plan. All business pages are now locked. Please contact an administrator.",
|
||||
reasonInactive: "This tenant plan has expired or been disabled. All business pages are now locked. Please contact an administrator to restore access.",
|
||||
@@ -118,6 +120,7 @@ const enUS = {
|
||||
localeLabel: "Language",
|
||||
quotaTitle: "Plan & Quota",
|
||||
quotaStatus: "Healthy",
|
||||
membershipExpiresAt: "Expires",
|
||||
remainingQuota: "Article quota",
|
||||
aiPoints: "AI points",
|
||||
resetAt: "Reset at",
|
||||
|
||||
@@ -94,6 +94,7 @@ const zhCN = {
|
||||
tenantAdminLogin: "租户后台登录",
|
||||
loginAndEnter: "登录并进入工作台",
|
||||
email: "邮箱",
|
||||
loginIdentifier: "手机号 / 邮箱",
|
||||
password: "密码",
|
||||
defaultTestAccount: "默认测试账号",
|
||||
defaultTestPassword: "默认测试密码",
|
||||
@@ -101,6 +102,7 @@ const zhCN = {
|
||||
membershipBlocked: {
|
||||
eyebrow: "访问已暂停",
|
||||
title: "当前租户套餐不可用",
|
||||
expiredMessage: "会员到期,请充值或联系客服",
|
||||
reasonTrialExpired: "免费试用的 3 天页面可访问期已经结束,当前业务页面已全部关闭,请联系管理员重新开通试用权限。",
|
||||
reasonRequired: "当前租户尚未开通有效套餐,业务页面已全部关闭,请联系管理员处理。",
|
||||
reasonInactive: "当前租户套餐已失效或已停用,业务页面已全部关闭,请联系管理员恢复访问。",
|
||||
@@ -118,6 +120,7 @@ const zhCN = {
|
||||
localeLabel: "语言",
|
||||
quotaTitle: "套餐与额度",
|
||||
quotaStatus: "状态正常",
|
||||
membershipExpiresAt: "会员到期",
|
||||
remainingQuota: "生成文章",
|
||||
aiPoints: "AI 点数",
|
||||
resetAt: "重置时间",
|
||||
|
||||
Reference in New Issue
Block a user