'use client'; import { querySubscribeList } from '@/services/user/subscribe'; import { useQuery } from '@tanstack/react-query'; import { Tabs, TabsList, TabsTrigger } from '@workspace/ui/components/tabs'; import { useTranslations } from 'next-intl'; import { useMemo, useRef, useState } from 'react'; import { LoginDialogProvider } from '@/app/auth/LoginDialogContext'; import { TabContent } from '@/components/main/OfferDialog/TabContent'; import { ProcessedPlanData } from '@/components/main/OfferDialog/types'; import Purchase from '@/components/subscribe/purchase'; import { unitConversion } from '@workspace/ui/utils'; export default function Page() { const t = useTranslations('subscribe'); const [tabValue, setTabValue] = useState<'year' | 'month'>('year'); const { data, isLoading, error, refetch } = useQuery({ queryKey: ['querySubscribeList'], queryFn: async () => { const { data } = await querySubscribeList(); return data.data?.list?.filter((v) => v.unit_time === 'Month') || []; }, }); // 处理套餐数据的工具函数 const processPlanData = (item: API.Subscribe, isYearly: boolean): ProcessedPlanData => { if (isYearly) { const discountItem = item.discount?.find((v) => v.quantity === 12); return { ...item, origin_price: unitConversion('centsToDollars', item.unit_price * 12).toString(), // 原价 discount_price: unitConversion( 'centsToDollars', item.unit_price * ((discountItem?.discount || 100) / 100) * 12, ).toString(), // 优惠价格 }; } else { return { ...item, origin_price: '', // 月付没有原价 discount_price: unitConversion('centsToDollars', item.unit_price).toString(), // 月付价格 }; } }; // 使用 useMemo 优化数据处理性能 const yearlyPlans: ProcessedPlanData[] = useMemo( () => (data || []).map((item) => processPlanData(item, true)), [data], ); const monthlyPlans: ProcessedPlanData[] = useMemo( () => (data || []).map((item) => processPlanData(item, false)), [data], ); // 处理订阅点击 const handleSubscribe = (plan: ProcessedPlanData) => { console.log('用户选择了套餐:', plan); // 这里可以添加订阅逻辑,比如跳转到支付页面或显示确认对话框 PurchaseRef.current.show(plan, tabValue); }; const PurchaseRef = useRef<{ show: (subscribe: API.Subscribe, tabValue: string) => void; hide: () => void; }>(null); return ( <>
选择套餐
选择最适合您的服务套餐
setTabValue(value as 'year' | 'month')} > 年付套餐 月付套餐
); }