125927e0e8
   TODO: 补充说明书链接 Reviewed-on: https://git.genarrative.world/git/GenarrativeAI/Genarrative/pulls/86 Co-authored-by: 王德宇 <kvtodev@outlook.com> Co-committed-by: 王德宇 <kvtodev@outlook.com>
98 lines
2.7 KiB
TypeScript
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);
|
|
}
|