diff --git a/packages/shared/src/components/PlatformProfileRechargeModal/index.test.tsx b/packages/shared/src/components/PlatformProfileRechargeModal/index.test.tsx
index 0de7d8fd2..c1c5d6b41 100644
--- a/packages/shared/src/components/PlatformProfileRechargeModal/index.test.tsx
+++ b/packages/shared/src/components/PlatformProfileRechargeModal/index.test.tsx
@@ -291,6 +291,7 @@ describe('PlatformProfileRechargeModal', () => {
screen.getByRole('button', { name: 'Plus 年付 当前套餐' }),
).toHaveProperty('disabled', true);
expect(screen.getByText('当前 Plus · 年付')).toBeTruthy();
+ expect(screen.getAllByText(/可同周期补差升档/).length).toBeGreaterThan(0);
await user.click(screen.getByRole('button', { name: 'Max 年付 补差升级' }));
@@ -307,6 +308,39 @@ describe('PlatformProfileRechargeModal', () => {
expect(onSubmitMembershipCheckout).toHaveBeenCalledWith('max', 'yearly');
});
+ test('已是最高的 max 档不再提示可补差升档', () => {
+ render(
+ ,
+ );
+
+ expect(screen.getByText('当前 Max · 年付')).toBeTruthy();
+ expect(screen.queryByText(/可同周期补差升档/)).toBeNull();
+ expect(screen.getByText('周期切换需等到期后')).toBeTruthy();
+ });
+
test('keeps an active member as member when their current plan is disabled', async () => {
const user = userEvent.setup();
const onRequestMembershipQuote = vi.fn();
diff --git a/packages/shared/src/components/PlatformProfileRechargeModal/index.tsx b/packages/shared/src/components/PlatformProfileRechargeModal/index.tsx
index 10a92df03..9d2451282 100644
--- a/packages/shared/src/components/PlatformProfileRechargeModal/index.tsx
+++ b/packages/shared/src/components/PlatformProfileRechargeModal/index.tsx
@@ -594,9 +594,12 @@ function PlatformRechargeTabNav({
function PlatformMembershipStatusCard({
membership,
currentPlan,
+ hasUpgradePath,
}: {
membership: ProfileMembership;
currentPlan: ProfileMembershipPlanRecord | null;
+ /** 是否存在更高档位可补差升级;已是最高的 max 档时为 false。 */
+ hasUpgradePath: boolean;
}) {
const planTitle = currentPlan?.title ?? '会员';
const cycleLabel = membership.cycleKind === 'yearly' ? '年付' : '月付';
@@ -620,9 +623,15 @@ function PlatformMembershipStatusCard({
- 可同周期补差升档
-
- 周期切换需等到期后
+ {hasUpgradePath ? (
+ <>
+ 可同周期补差升档
+
+ 周期切换需等到期后
+ >
+ ) : (
+ '周期切换需等到期后'
+ )}
);
@@ -1362,6 +1371,13 @@ export function PlatformProfileRechargeModal({
) ?? null,
[center?.membershipPlans, membership?.plan],
);
+ // 已是最高的 max 档时没有可升级目标,状态卡不应再提示「可同周期补差升档」。
+ const hasUpgradePath = useMemo(
+ () =>
+ currentPlanRecord !== null &&
+ membershipPlans.some((plan) => plan.rank > currentPlanRecord.rank),
+ [currentPlanRecord, membershipPlans],
+ );
const [activeTab, setActiveTab] =
useState('subscription');
const [cycleKind, setCycleKind] =
@@ -1488,6 +1504,7 @@ export function PlatformProfileRechargeModal({
) : null}