2025-06-25 14:43:44 +08:00
|
|
|
'use client'
|
2025-11-20 12:10:16 +08:00
|
|
|
import {ReactNode, useState} from 'react'
|
2025-05-19 11:04:40 +08:00
|
|
|
import {merge} from '@/lib/utils'
|
2025-05-22 14:59:22 +08:00
|
|
|
import {Tabs, TabsContent, TabsList, TabsTrigger} from '@/components/ui/tabs'
|
|
|
|
|
import LongForm from '@/components/composites/purchase/long/form'
|
|
|
|
|
import ShortForm from '@/components/composites/purchase/short/form'
|
2025-11-20 12:10:16 +08:00
|
|
|
import {useSearchParams} from 'next/navigation'
|
2025-06-11 19:07:30 +08:00
|
|
|
export type TabType = 'short' | 'long' | 'fixed' | 'custom'
|
2025-04-08 11:21:58 +08:00
|
|
|
|
2025-06-16 12:04:25 +08:00
|
|
|
type PurchaseProps = {
|
2025-11-20 12:10:16 +08:00
|
|
|
defaultTab: TabType
|
2025-06-16 12:04:25 +08:00
|
|
|
}
|
|
|
|
|
|
2025-06-25 14:43:44 +08:00
|
|
|
export default function Purchase(props: PurchaseProps) {
|
2025-11-20 12:10:16 +08:00
|
|
|
const [tab, setTab] = useState(props.defaultTab)
|
|
|
|
|
|
|
|
|
|
const params = useSearchParams()
|
|
|
|
|
const updateTab = async (tab: string) => {
|
|
|
|
|
setTab(tab as TabType)
|
|
|
|
|
const newParams = new URLSearchParams(params)
|
|
|
|
|
newParams.set('type', tab)
|
|
|
|
|
window.history.pushState({}, '', `?${newParams.toString()}`)
|
|
|
|
|
}
|
2025-06-25 14:43:44 +08:00
|
|
|
|
2025-04-08 11:21:58 +08:00
|
|
|
return (
|
2025-06-16 12:04:25 +08:00
|
|
|
<div className="flex flex-col gap-4">
|
2025-11-20 12:10:16 +08:00
|
|
|
<Tabs value={tab} onValueChange={updateTab} className="gap-4">
|
2025-06-16 12:04:25 +08:00
|
|
|
<TabsList className="w-full p-2 bg-white rounded-lg justify-start md:justify-center overflow-auto">
|
|
|
|
|
<Tab value="short">短效动态</Tab>
|
|
|
|
|
<Tab value="long">长效静态</Tab>
|
|
|
|
|
<Tab value="fixed">固定套餐</Tab>
|
|
|
|
|
<Tab value="custom">定制套餐</Tab>
|
|
|
|
|
</TabsList>
|
|
|
|
|
<TabsContent value="short">
|
|
|
|
|
<ShortForm/>
|
|
|
|
|
</TabsContent>
|
|
|
|
|
<TabsContent value="long">
|
|
|
|
|
<LongForm/>
|
|
|
|
|
</TabsContent>
|
|
|
|
|
</Tabs>
|
|
|
|
|
</div>
|
2025-04-08 11:21:58 +08:00
|
|
|
)
|
|
|
|
|
}
|
|
|
|
|
|
2025-05-19 11:04:40 +08:00
|
|
|
function Tab(props: {
|
|
|
|
|
value: string
|
|
|
|
|
children: ReactNode
|
|
|
|
|
}) {
|
|
|
|
|
return (
|
2025-06-16 12:04:25 +08:00
|
|
|
<TabsTrigger
|
|
|
|
|
className={merge(
|
|
|
|
|
`w-36 h-12 text-base font-normal flex-none`,
|
|
|
|
|
`data-[state=active]:text-primary data-[state=active]:bg-primary-muted`,
|
|
|
|
|
)}
|
|
|
|
|
value={props.value}
|
2025-06-11 19:07:30 +08:00
|
|
|
>
|
2025-06-16 12:04:25 +08:00
|
|
|
{props.children}
|
|
|
|
|
</TabsTrigger>
|
2025-05-19 11:04:40 +08:00
|
|
|
)
|
|
|
|
|
}
|