From 0113bf60fd986236c0fdd3e9cb827ea3a48b52ec Mon Sep 17 00:00:00 2001 From: erio Date: Fri, 10 Apr 2026 16:12:28 +0800 Subject: [PATCH] feat(payment): renewal modal, clean confirm card, platform color refresh - Replace gradient header in subscription confirm with clean card layout matching sub2apipay design (platform accent text instead of full gradient) - Add renewal plan selection modal: when group has multiple plans show picker, single plan skips directly to payment method selection - Restyle SubscriptionsView with platform-specific colors (badge, border, button) instead of hardcoded purple - Update platformColors to match sub2apipay style (transparent badges, subtle borders with /20 opacity) --- backend/cmd/server/VERSION | 2 +- frontend/src/i18n/locales/en.ts | 1 + frontend/src/i18n/locales/zh.ts | 1 + frontend/src/utils/platformColors.ts | 38 +++--- frontend/src/views/user/PaymentView.vue | 112 +++++++++++++++--- frontend/src/views/user/SubscriptionsView.vue | 45 ++++--- 6 files changed, 144 insertions(+), 55 deletions(-) diff --git a/backend/cmd/server/VERSION b/backend/cmd/server/VERSION index 647ae0439b..4d125dd8e2 100644 --- a/backend/cmd/server/VERSION +++ b/backend/cmd/server/VERSION @@ -1 +1 @@ -0.1.108.149 +0.1.108.150 diff --git a/frontend/src/i18n/locales/en.ts b/frontend/src/i18n/locales/en.ts index 31db41ba2d..85ea0e61c4 100644 --- a/frontend/src/i18n/locales/en.ts +++ b/frontend/src/i18n/locales/en.ts @@ -5173,6 +5173,7 @@ export default { }, subscribeNow: 'Subscribe Now', renewNow: 'Renew', + selectPlan: 'Select Plan', planFeatures: 'Features', planCard: { rate: 'Rate', diff --git a/frontend/src/i18n/locales/zh.ts b/frontend/src/i18n/locales/zh.ts index 8f071afbdc..5a7990ce40 100644 --- a/frontend/src/i18n/locales/zh.ts +++ b/frontend/src/i18n/locales/zh.ts @@ -5370,6 +5370,7 @@ export default { }, subscribeNow: '立即开通', renewNow: '续费', + selectPlan: '选择套餐', planFeatures: '功能特性', planCard: { rate: '倍率', diff --git a/frontend/src/utils/platformColors.ts b/frontend/src/utils/platformColors.ts index 2db64d427b..d4a60e8ad9 100644 --- a/frontend/src/utils/platformColors.ts +++ b/frontend/src/utils/platformColors.ts @@ -7,29 +7,29 @@ export type Platform = 'anthropic' | 'openai' | 'antigravity' | 'gemini' -// ── Badge (bg + text) ─────────────────────────────────────────────── +// ── Badge (bg + text + border, for inline badges with border) ─────── const BADGE: Record = { - anthropic: 'bg-orange-100 text-orange-700 dark:bg-orange-900/30 dark:text-orange-400', - openai: 'bg-emerald-100 text-emerald-700 dark:bg-emerald-900/30 dark:text-emerald-400', - antigravity: 'bg-purple-100 text-purple-700 dark:bg-purple-900/30 dark:text-purple-400', - gemini: 'bg-blue-100 text-blue-700 dark:bg-blue-900/30 dark:text-blue-400', + anthropic: 'bg-orange-500/10 text-orange-600 border-orange-500/30 dark:text-orange-400', + openai: 'bg-green-500/10 text-green-600 border-green-500/30 dark:text-green-400', + antigravity: 'bg-purple-500/10 text-purple-600 border-purple-500/30 dark:text-purple-400', + gemini: 'bg-blue-500/10 text-blue-600 border-blue-500/30 dark:text-blue-400', } -const BADGE_DEFAULT = 'bg-gray-100 text-gray-600 dark:bg-dark-700 dark:text-gray-300' +const BADGE_DEFAULT = 'bg-slate-500/10 text-slate-600 border-slate-500/30 dark:text-slate-400' -// ── Light badge (softer bg) ───────────────────────────────────────── +// ── Light badge (softer bg, no border) ────────────────────────────── const BADGE_LIGHT: Record = { - anthropic: 'bg-orange-50 text-orange-600 dark:bg-orange-900/30 dark:text-orange-300', - openai: 'bg-emerald-50 text-emerald-600 dark:bg-emerald-900/30 dark:text-emerald-300', - antigravity: 'bg-purple-50 text-purple-600 dark:bg-purple-900/30 dark:text-purple-300', - gemini: 'bg-blue-50 text-blue-600 dark:bg-blue-900/30 dark:text-blue-300', + anthropic: 'bg-orange-500/10 text-orange-600 dark:bg-orange-500/10 dark:text-orange-300', + openai: 'bg-green-500/10 text-green-600 dark:bg-green-500/10 dark:text-green-300', + antigravity: 'bg-purple-500/10 text-purple-600 dark:bg-purple-500/10 dark:text-purple-300', + gemini: 'bg-blue-500/10 text-blue-600 dark:bg-blue-500/10 dark:text-blue-300', } // ── Border ────────────────────────────────────────────────────────── const BORDER: Record = { - anthropic: 'border-orange-100 dark:border-orange-900/30', - openai: 'border-emerald-100 dark:border-emerald-900/30', - antigravity: 'border-purple-100 dark:border-purple-900/30', - gemini: 'border-blue-100 dark:border-blue-900/30', + anthropic: 'border-orange-500/20 dark:border-orange-500/20', + openai: 'border-green-500/20 dark:border-green-500/20', + antigravity: 'border-purple-500/20 dark:border-purple-500/20', + gemini: 'border-blue-500/20 dark:border-blue-500/20', } const BORDER_DEFAULT = 'border-gray-200 dark:border-dark-700' @@ -62,10 +62,10 @@ const ICON_DEFAULT = 'text-primary-500 dark:text-primary-400' // ── Button (solid bg) ─────────────────────────────────────────────── const BUTTON: Record = { - anthropic: 'bg-orange-500 text-white hover:bg-orange-600 dark:bg-orange-600 dark:hover:bg-orange-500', - openai: 'bg-emerald-500 text-white hover:bg-emerald-600 dark:bg-emerald-600 dark:hover:bg-emerald-500', - antigravity: 'bg-purple-500 text-white hover:bg-purple-600 dark:bg-purple-600 dark:hover:bg-purple-500', - gemini: 'bg-blue-500 text-white hover:bg-blue-600 dark:bg-blue-600 dark:hover:bg-blue-500', + anthropic: 'bg-orange-500 text-white hover:bg-orange-600 active:bg-orange-700 dark:bg-orange-500/80 dark:hover:bg-orange-500', + openai: 'bg-green-600 text-white hover:bg-green-700 active:bg-green-800 dark:bg-green-600/80 dark:hover:bg-green-600', + antigravity: 'bg-purple-500 text-white hover:bg-purple-600 active:bg-purple-700 dark:bg-purple-500/80 dark:hover:bg-purple-500', + gemini: 'bg-blue-500 text-white hover:bg-blue-600 active:bg-blue-700 dark:bg-blue-500/80 dark:hover:bg-blue-500', } const BUTTON_DEFAULT = 'bg-primary-500 text-white hover:bg-primary-600 dark:bg-primary-600 dark:hover:bg-primary-500' diff --git a/frontend/src/views/user/PaymentView.vue b/frontend/src/views/user/PaymentView.vue index 360877cf03..055e42f2c3 100644 --- a/frontend/src/views/user/PaymentView.vue +++ b/frontend/src/views/user/PaymentView.vue @@ -99,21 +99,49 @@