activity points

This commit is contained in:
heheer 2025-12-23 14:39:44 +08:00 committed by archer
parent e53242e8bc
commit 60d042a0cf
No known key found for this signature in database
GPG Key ID: 4446499B846D4A9E
5 changed files with 35 additions and 3 deletions

View File

@ -26,7 +26,8 @@ export const BillSchema = z.object({
standSubLevel: z.enum(StandardSubLevelEnum).optional().meta({ description: '订阅等级' }),
month: z.number().optional().meta({ description: '月数' }),
datasetSize: z.number().optional().meta({ description: '数据集大小' }),
extraPoints: z.number().optional().meta({ description: '额外积分' })
extraPoints: z.number().optional().meta({ description: '额外积分' }),
activityBonusPoints: z.number().optional().meta({ description: '活动赠送积分' })
})
.meta({ description: '元数据' }),
refundData: z

View File

@ -22,6 +22,9 @@ export type TeamStandardSubPlanItemType = {
ticketResponseTime?: number;
customDomain?: number;
// Activity promotion fields
annualBonusPoints?: number;
// Custom plan specific fields
priceDescription?: string;
customFormUrl?: string;
@ -37,6 +40,7 @@ export type PointsPackageItem = {
points: number;
month: number;
price: number;
activityBonusPoints?: number;
};
export type SubPlanType = {
@ -77,6 +81,9 @@ export type TeamSubSchema = {
ticketResponseTime?: number;
customDomain?: number;
// Activity promotion fields
annualBonusPoints?: number;
totalPoints: number;
surplusPoints: number;

View File

@ -38,6 +38,8 @@ const StandardPlanContentList = ({
...standardSubLevelMap[level as `${StandardSubLevelEnum}`],
totalPoints:
standplan?.totalPoints ?? plan.totalPoints * (mode === SubModeEnum.month ? 1 : 12),
annualBonusPoints:
mode === SubModeEnum.month ? 0 : standplan?.annualBonusPoints ?? plan.annualBonusPoints,
requestsPerMinute: standplan?.requestsPerMinute ?? plan.requestsPerMinute,
maxTeamMember: standplan?.maxTeamMember ?? plan.maxTeamMember,
maxAppAmount: standplan?.maxApp ?? plan.maxAppAmount,
@ -56,6 +58,7 @@ const StandardPlanContentList = ({
level,
mode,
standplan?.totalPoints,
standplan?.annualBonusPoints,
standplan?.requestsPerMinute,
standplan?.maxTeamMember,
standplan?.maxApp,
@ -68,6 +71,7 @@ const StandardPlanContentList = ({
standplan?.ticketResponseTime,
standplan?.customDomain
]);
console.log('planContent', planContent);
return planContent ? (
<Grid gap={4} fontSize={'sm'} fontWeight={500}>
@ -76,7 +80,9 @@ const StandardPlanContentList = ({
<Flex alignItems={'center'}>
<Box fontWeight={'bold'} color={'myGray.600'}>
{t('common:n_ai_points', {
amount: planContent.totalPoints
amount: planContent.annualBonusPoints
? `${planContent.totalPoints} + ${planContent.annualBonusPoints}`
: planContent.totalPoints
})}
</Box>
<ModelPriceModal>

View File

@ -150,7 +150,24 @@ const ExtraPlan = ({ onPaySuccess }: { onPaySuccess?: () => void }) => {
}}
onClick={() => setSelectedPackageIndex(index)}
transition={'all 0.2s'}
position={'relative'}
>
{pkg.activityBonusPoints && pkg.activityBonusPoints > 0 && (
<Box
position={'absolute'}
top={[1, 2]}
right={[1, 2]}
fontSize={['10px', 'xs']}
fontWeight={'bold'}
color={'red.600'}
bg={'red.50'}
px={[1, 2]}
py={[0.5, 1]}
borderRadius={'sm'}
>
+{formatNumberWithUnit(pkg.activityBonusPoints, i18n.language)}
</Box>
)}
<Box fontSize={'24px'} fontWeight={'medium'} color={'myGray.600'}>
{formatNumberWithUnit(pkg.points, i18n.language)}{' '}
{t('common:support.wallet.subscription.point')}

View File

@ -41,7 +41,7 @@ const Standard = ({
const [packageChange, setPackageChange] = useState<PackageChangeStatusEnum>();
const { subPlans, feConfigs } = useSystemStore();
const [selectSubMode, setSelectSubMode] = useState<`${SubModeEnum}`>(SubModeEnum.month);
const [selectSubMode, setSelectSubMode] = useState<`${SubModeEnum}`>(SubModeEnum.year);
const NEW_PLAN_LEVELS = [
StandardSubLevelEnum.free,
@ -99,6 +99,7 @@ const Standard = ({
maxDatasetAmount: myStandardPlan?.maxDataset || value.maxDatasetAmount,
chatHistoryStoreDuration: value.chatHistoryStoreDuration,
maxDatasetSize: value.maxDatasetSize,
annualBonusPoints: selectSubMode === SubModeEnum.month ? 0 : value.annualBonusPoints,
totalPoints: value.totalPoints * (selectSubMode === SubModeEnum.month ? 1 : 12),
// custom plan