'use client' import {Suspense, use, useContext, useEffect, useMemo, useState} from 'react' import {PurchaseFormContext} from '@/components/composites/purchase/short/form' import {RadioGroup} from '@/components/ui/radio-group' import {FormField} from '@/components/ui/form' import FormOption from '@/components/composites/purchase/option' import Image from 'next/image' import alipay from '../_assets/alipay.svg' import wechat from '../_assets/wechat.svg' import balance from '../_assets/balance.svg' import {useProfileStore} from '@/components/stores/profile' import RechargeModal from '@/components/composites/recharge' import Pay from '@/components/composites/purchase/pay' import {buttonVariants} from '@/components/ui/button' import Link from 'next/link' import {merge} from '@/lib/utils' import {useFormContext, useWatch} from 'react-hook-form' import {Schema} from '@/components/composites/purchase/long/form' import {Card} from '@/components/ui/card' import {getPrice, CreateResourceReq} from '@/actions/resource' interface PriceData { price: string discounted_price?: string discounted?: number } export default function Right() { const {control} = useFormContext() const method = useWatch({control, name: 'pay_type'}) const mode = useWatch({control, name: 'type'}) const live = useWatch({control, name: 'live'}) const quota = useWatch({control, name: 'quota'}) const expire = useWatch({control, name: 'expire'}) const dailyLimit = useWatch({control, name: 'daily_limit'}) const [priceData, setPriceData] = useState({ price: '0.00', discounted_price: '0.00', discounted: 0, }) useEffect(() => { const price = async () => { const params: CreateResourceReq = { type: 2, long: { live: Number(live), mode: Number(mode), quota: Number(mode) === 1 ? Number(dailyLimit) : Number(quota), expire: Number(mode) === 1 ? Number(expire) : undefined, }, } try { const priceValue = await getPrice(params) console.log(priceValue, 'priceValue') if (priceValue.success && priceValue.data?.price) { const data: PriceData = priceValue.data setPriceData({ price: data.price, discounted_price: data.discounted_price ?? data.price ?? '', discounted: data.discounted, }) } } catch (error) { console.error('获取价格失败:', error) setPriceData({ price: '0.00', discounted_price: '0.00', discounted: 0, }) } } price() }, [dailyLimit, expire, live, quota, mode]) const {price, discounted_price: discountedPrice = '', discounted} = priceData return (

订单详情

  • 套餐名称 {mode === '2' ? `包量套餐` : `包时套餐`}
  • IP 时效 {live} {' '} 小时
  • {mode === '2' ? ( <>
  • 购买 IP 量 {quota} 个
  • 实价 ¥{price}
  • ) : ( <>
  • 套餐时长 {expire} 天
  • 每日限额 {dailyLimit} 个
  • 原价 ¥{price}
  • 总折扣 -¥{discounted}
  • )}

实付价格 ¥{discountedPrice}

) } function BalanceOrLogin(props: { method: 'wechat' | 'alipay' | 'balance' discountedPrice: string mode: string live: string quota: number expire: string dailyLimit: number }) { const profile = use(useProfileStore(store => store.profile)) return profile ? ( <> {({id, field}) => (

余额icon 账户余额

{profile?.balance}

余额 icon 余额 微信 logo 微信 支付宝 logo 支付宝
)}
) : ( 登录后支付 ) }