feat: account linking and merge UI for cabinet

Add Connected Accounts page (link/unlink OAuth providers), Link OAuth
Callback handler, and Merge Accounts page with subscription comparison
and user choice. Includes API methods, TypeScript types, routes in
App.tsx, navigation from Profile, and i18n for all 4 locales (ru, en,
zh, fa). Merge page works without JWT auth (validated by merge token).
This commit is contained in:
Fringg
2026-03-04 07:25:45 +03:00
parent 8157ca5f02
commit 93f97d45be
12 changed files with 1253 additions and 2 deletions

View File

@@ -3033,6 +3033,29 @@
"promoOffers": "促销活动",
"promoOffersDesc": "接收特别优惠和折扣",
"unavailable": "通知设置不可用"
},
"accounts": {
"title": "关联账户",
"subtitle": "管理您的登录方式",
"linked": "已关联",
"notLinked": "未关联",
"link": "关联",
"unlink": "取消关联",
"unlinkConfirm": "确定吗?取消关联后,您将无法通过此服务登录。",
"cannotUnlinkLast": "无法取消最后一种登录方式",
"linkSuccess": "账户关联成功",
"unlinkSuccess": "账户取消关联成功",
"linkError": "关联账户失败",
"unlinkError": "取消关联失败",
"goToAccounts": "关联账户",
"providers": {
"telegram": "Telegram",
"email": "邮箱",
"google": "Google",
"yandex": "Yandex",
"discord": "Discord",
"vk": "VK"
}
}
},
"theme": {
@@ -3357,5 +3380,32 @@
"requests": "请求数",
"ipHistory": "IP历史"
}
},
"merge": {
"title": "合并账户",
"description": "此登录方式已关联到另一个账户。您可以将两个账户合并为一个。",
"currentAccount": "您的当前账户",
"foundAccount": "发现的账户",
"authMethods": "登录方式",
"subscription": "订阅",
"noSubscription": "无订阅",
"traffic": "流量",
"devices": "设备",
"balance": "余额",
"until": "至 {{date}}",
"keepThisSubscription": "保留此订阅",
"chooseSubscription": "选择要保留的订阅",
"afterMerge": "合并后",
"allAuthMethodsMerged": "所有登录方式将合并",
"balanceSummed": "余额:{{amount}} ₽(合计)",
"unselectedSubscriptionDeleted": "未选择的订阅将被删除",
"historyPreserved": "交易记录将保留",
"confirm": "合并账户",
"cancel": "取消",
"expired": "合并链接已过期,请重试。",
"success": "账户合并成功!",
"error": "合并失败,请稍后重试。",
"expiresIn": "剩余 {{minutes}} 分钟",
"merging": "合并中..."
}
}