Files
Genarrative/src/components/rpg-entry/rpgEntryProfileFundsViewModel.ts
T
k88936 125927e0e8 Ai game creator app home sidebar (#86)
![shotmd-1784186268.jpg](/attachments/c828773c-4f1a-4654-b76d-c944b82ec023)
![shotmd-1784186877.jpg](/attachments/f1782ba3-245a-40c1-8caa-cbd7e4cce74b)
![shotmd-1784186948-compressed.webp](/attachments/f3d02ac3-db7a-439b-9a84-7aceefad9048)
TODO: 补充说明书链接

Reviewed-on: https://git.genarrative.world/git/GenarrativeAI/Genarrative/pulls/86
Co-authored-by: 王德宇 <kvtodev@outlook.com>
Co-committed-by: 王德宇 <kvtodev@outlook.com>
2026-07-20 15:03:23 +08:00

98 lines
2.7 KiB
TypeScript

import type {
ProfileMembership,
ProfileRechargeProduct,
} from '../../../packages/shared/src/contracts/runtime';
export { formatRechargePrice } from '../../../packages/shared/src/utils/format';
function formatMembershipPeriodPrefix(periodDays: number) {
if (periodDays === 30) {
return '每月';
}
if (periodDays === 7) {
return '每周';
}
if (periodDays > 0) {
return `每${periodDays}天`;
}
return '每周期';
}
export function buildRechargeProductValueLabel(product: ProfileRechargeProduct) {
if (product.kind === 'membership') {
const membershipPeriodPoints = product.membershipPeriodPoints;
const membershipPeriodDays =
product.membershipPeriodDays > 0
? product.membershipPeriodDays
: product.durationDays;
return membershipPeriodPoints > 0
? `${formatMembershipPeriodPrefix(membershipPeriodDays)}${membershipPeriodPoints}泥点`
: `${product.durationDays}天`;
}
return `${product.pointsAmount}${
product.bonusPoints > 0 ? `+${product.bonusPoints}` : ''
}泥点`;
}
export function getMembershipTierLabel(tier: ProfileMembership['tier']) {
switch (tier) {
case 'starter':
return 'Starter';
case 'basic':
return 'Basic';
case 'pro':
return 'Pro';
case 'ultimate':
return 'Ultimate';
case 'month':
return '月卡';
case 'season':
return '季卡';
case 'year':
return '年卡';
default:
return '普通用户';
}
}
export function buildMembershipLabel(
membership: ProfileMembership | null | undefined,
formatTime: (value: string) => string,
) {
if (membership?.status !== 'active') {
return '普通用户';
}
const tierLabel =
membership.tier === 'normal' ? '会员' : getMembershipTierLabel(membership.tier);
const resetLabel = membership.cycleResetsAt
? ` · ${formatTime(membership.cycleResetsAt)}重置`
: '';
if (membership.tier === 'normal') {
return membership.expiresAt
? `会员至 ${formatTime(membership.expiresAt)}${resetLabel}`
: `会员已生效${resetLabel}`;
}
return membership.expiresAt
? `${tierLabel}${formatTime(membership.expiresAt)}${resetLabel}`
: `${tierLabel} 已生效${resetLabel}`;
}
export function buildMembershipCycleLabel(
membership: ProfileMembership | null | undefined,
formatTime: (value: string) => string,
) {
if (membership?.status !== 'active') {
return '普通用户';
}
if (membership.cycleRemainingPoints > 0) {
const resetLabel = membership.cycleResetsAt
? ` · ${formatTime(membership.cycleResetsAt)}重置`
: '';
return `本周期剩余 ${membership.cycleRemainingPoints} 泥点${resetLabel}`;
}
return buildMembershipLabel(membership, formatTime);
}