优化资源调用,减少页面大小

This commit is contained in:
2025-12-04 19:07:48 +08:00
parent db891c883f
commit 8958796956
34 changed files with 84 additions and 93 deletions

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 MiB

View File

@@ -0,0 +1,3 @@
<svg width="44" height="78" viewBox="0 0 44 78" fill="none" xmlns="http://www.w3.org/2000/svg">
<path id="Vector" d="M42.1191 35.139C43.2285 36.231 44.2588 37.7129 43.9418 39.117C44.1795 40.521 43.07 41.847 42.1191 42.939L7.6472 76.713C5.90387 78.429 3.05096 78.429 1.30753 76.713C-0.435894 74.997 -0.435796 72.189 1.30753 70.4731L34.1153 39.039L1.30763 7.52691C-0.435794 5.81098 -0.435794 3.00291 1.30763 1.28699C3.05106 -0.42894 5.90387 -0.429039 7.6472 1.28699L42.1191 35.139Z" fill="#E3E3E3"/>
</svg>

After

Width:  |  Height:  |  Size: 505 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 186 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 169 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 176 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 142 KiB

View File

@@ -0,0 +1,10 @@
<svg width="18" height="18" viewBox="0 0 18 18" fill="none" xmlns="http://www.w3.org/2000/svg">
<g id="&#229;&#183;&#178;&#229;&#139;&#190;&#233;&#128;&#137;32 12" clip-path="url(#clip0_77_98)">
<path id="Vector" d="M3.46154 0H14.5385C15.4565 0 16.337 0.364697 16.9861 1.01386C17.6353 1.66303 18 2.54348 18 3.46154V14.5385C18 15.4565 17.6353 16.337 16.9861 16.9861C16.337 17.6353 15.4565 18 14.5385 18H3.46154C2.54348 18 1.66303 17.6353 1.01386 16.9861C0.364697 16.337 0 15.4565 0 14.5385L0 3.46154C0 2.54348 0.364697 1.66303 1.01386 1.01386C1.66303 0.364697 2.54348 0 3.46154 0ZM3.46154 1.38462C2.9107 1.38462 2.38243 1.60343 1.99293 1.99293C1.60343 2.38243 1.38462 2.9107 1.38462 3.46154V14.5385C1.38462 14.8112 1.43834 15.0813 1.54271 15.3333C1.64709 15.5852 1.80007 15.8142 1.99293 16.0071C2.18579 16.1999 2.41475 16.3529 2.66673 16.4573C2.91872 16.5617 3.18879 16.6154 3.46154 16.6154H14.5385C14.8112 16.6154 15.0813 16.5617 15.3333 16.4573C15.5852 16.3529 15.8142 16.1999 16.0071 16.0071C16.1999 15.8142 16.3529 15.5852 16.4573 15.3333C16.5617 15.0813 16.6154 14.8112 16.6154 14.5385V3.46154C16.6154 3.18879 16.5617 2.91872 16.4573 2.66673C16.3529 2.41475 16.1999 2.18579 16.0071 1.99293C15.8142 1.80007 15.5852 1.64709 15.3333 1.54271C15.0813 1.43834 14.8112 1.38462 14.5385 1.38462H3.46154ZM13.743 5.92338C13.8041 5.98151 13.8531 6.0511 13.8873 6.12818C13.9214 6.20526 13.9401 6.28831 13.9421 6.3726C13.9442 6.45689 13.9296 6.54076 13.8993 6.61941C13.8689 6.69806 13.8233 6.76996 13.7652 6.831L8.50085 12.3348C8.49877 12.3376 8.49392 12.339 8.48977 12.3432L8.48285 12.3528C8.44477 12.3902 8.39977 12.4096 8.35615 12.4359C8.32846 12.4512 8.307 12.474 8.27862 12.4858C8.20213 12.5178 8.12007 12.5345 8.03714 12.5347C7.95421 12.5349 7.87205 12.5188 7.79538 12.4872C7.77323 12.4782 7.75523 12.4588 7.73308 12.447C7.68462 12.4214 7.63477 12.3972 7.59185 12.357C7.58838 12.3542 7.587 12.3494 7.58285 12.3452C7.57938 12.3432 7.57592 12.3418 7.57315 12.339L4.92162 9.58638C4.86293 9.5258 4.81679 9.45421 4.78585 9.37574C4.75491 9.29727 4.73978 9.21346 4.74132 9.12912C4.74287 9.04479 4.76106 8.96159 4.79485 8.8843C4.82864 8.80702 4.87737 8.73717 4.93823 8.67877C4.99877 8.62 5.07035 8.57379 5.14882 8.5428C5.2273 8.5118 5.31113 8.49664 5.3955 8.49819C5.47986 8.49973 5.56308 8.51795 5.64037 8.5518C5.71766 8.58564 5.78749 8.63444 5.84585 8.69538L8.03354 10.9648L12.834 5.94415C12.8923 5.88305 12.9621 5.83404 13.0393 5.79992C13.1166 5.7658 13.1998 5.74724 13.2842 5.74532C13.3686 5.74339 13.4526 5.75812 13.5313 5.78868C13.6101 5.81923 13.682 5.86501 13.743 5.92338Z" fill="#FF6B00"/>
</g>
<defs>
<clipPath id="clip0_77_98">
<rect width="18" height="18" fill="white"/>
</clipPath>
</defs>
</svg>

After

Width:  |  Height:  |  Size: 2.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 540 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 97 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 44 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 32 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 39 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 38 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 110 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 MiB

View File

@@ -9,7 +9,7 @@ import {useForm} from 'react-hook-form'
import {z} from 'zod'
import {zodResolver} from '@hookform/resolvers/zod'
import Image from 'next/image'
import check from './_assets/check.svg'
import check from '@/assets/check-accent.svg'
import banner from './_assets/Mask-group.webp'
import group from './_assets/Group.webp'
import {merge} from '@/lib/utils'

View File

@@ -3,7 +3,6 @@ import BreadCrumb from '@/components/bread-crumb'
import Wrap from '@/components/wrap'
import {ReactNode} from 'react'
import Image from 'next/image'
import React, {useState} from 'react'
import {useRouter} from 'next/navigation'
import s1 from './_assets/1.webp'
import s2 from './_assets/2.webp'
@@ -17,7 +16,8 @@ import s9 from './_assets/9.webp'
import s10 from './_assets/10.webp'
import s11 from './_assets/11.webp'
import s12 from './_assets/12.webp'
import check from '../customized/_assets/check.svg'
import check_main from '@/assets/check-main.svg'
import check_accent from '@/assets/check-accent.svg'
import {Button} from '@/components/ui/button'
import {merge} from '@/lib/utils'
export type CollectPageProps = {}
@@ -40,15 +40,15 @@ export default function CollectPage(props: CollectPageProps) {
<p className="mt-10 text-gray-500">沿 </p>
<div className="mt-24 max-md:mt-14 flex gap-8 max-md:flex-col">
<p className="flex gap-4 items-center">
<Image src="/check.svg" alt="checkbox" width={24} height={24}/>
<Image src={check_main} alt="checkbox" width={24} height={24}/>
<span className={`lg:text-md `}>广</span>
</p>
<p className="flex gap-4 items-center">
<Image src="/check.svg" alt="checkbox" width={24} height={24}/>
<Image src={check_main} alt="checkbox" width={24} height={24}/>
<span className={`lg:text-md `}></span>
</p>
<p className="flex gap-4 items-center">
<Image src="/check.svg" alt="checkbox" width={24} height={24}/>
<Image src={check_main} alt="checkbox" width={24} height={24}/>
<span className={`lg:text-md `}></span>
</p>
</div>
@@ -242,27 +242,27 @@ export default function CollectPage(props: CollectPageProps) {
<div className="grid grid-cols-3 gap-4">
<div className="flex gap-2 items-center">
<Image src={check} alt="特性" width={20} height={20}/>
<Image src={check_accent} alt="特性" width={20} height={20}/>
<span>IP时效3-30()</span>
</div>
<div className="flex gap-2 items-center">
<Image src={check} alt="特性" width={20} height={20}/>
<Image src={check_accent} alt="特性" width={20} height={20}/>
<span>IP覆盖全国各地</span>
</div>
<div className="flex gap-2 items-center">
<Image src={check} alt="特性" width={20} height={20}/>
<Image src={check_accent} alt="特性" width={20} height={20}/>
<span>线</span>
</div>
<div className="flex gap-2 items-center">
<Image src={check} alt="特性" width={20} height={20}/>
<Image src={check_accent} alt="特性" width={20} height={20}/>
<span></span>
</div>
<div className="flex gap-2 items-center">
<Image src={check} alt="特性" width={20} height={20}/>
<Image src={check_accent} alt="特性" width={20} height={20}/>
<span>0.03s</span>
</div>
<div className="flex gap-2 items-center">
<Image src={check} alt="特性" width={20} height={20}/>
<Image src={check_accent} alt="特性" width={20} height={20}/>
<span>IP线路</span>
</div>
</div>

View File

@@ -1,4 +1,5 @@
import Wrap from '@/components/wrap'
import Image from 'next/image'
export type FooterProps = {}
@@ -8,7 +9,7 @@ export default function Footer(props: FooterProps) {
<Wrap className="flex flex-col px-4 py-8 lg:p-12">
<div className="flex-auto overflow-hidden flex flex-wrap justify-between">
<div className="flex flex-col lg:items-center gap-2 lg:gap-6 max-lg:w-1/2">
<img src="/qrcode.svg" alt="logo" className="flex-none w-20 h-20 sm:w-44 sm:h-44 bg-gray-100"/>
<Image src="/qrcode.svg" alt="logo" width={80} height={80} className="flex-none size-20 sm:size-44 bg-gray-100"/>
<span className="text-sm "></span>
</div>

View File

@@ -1,10 +1,28 @@
'use client'
import {ReactNode} from 'react'
import Wrap from '@/components/wrap'
import Image from 'next/image'
import Image, {StaticImageData} from 'next/image'
import React from 'react'
import {useRouter} from 'next/navigation'
import {useProfileStore} from '@/components/stores-provider'
import check_main from '@/assets/check-main.svg'
import banner from './_assets/banner.webp'
import map from './_assets/map.webp'
import next from './_assets/next.svg'
import s1_1 from './_assets/s1-1.webp'
import s1_2 from './_assets/s1-2.webp'
import s1_3 from './_assets/s1-3.webp'
import s1_4 from './_assets/s1-4.webp'
import s1_check from './_assets/s1-check.svg'
import s3_main from './_assets/s3-main.webp'
import s4_1_main from './_assets/s4-1-main.webp'
import s4_2_main from './_assets/s4-2-main.webp'
import s4_1_1 from './_assets/s4-1-1.webp'
import s4_1_2 from './_assets/s4-1-2.webp'
import s4_1_3 from './_assets/s4-1-3.webp'
import s4_2_1 from './_assets/s4-2-1.webp'
import s4_2_2 from './_assets/s4-2-2.webp'
import s4_2_3 from './_assets/s4-2-3.webp'
export default function Home() {
const router = useRouter()
@@ -15,22 +33,23 @@ export default function Home() {
<main className="flex flex-col gap-16 lg:gap-32 mb-16 lg:mb-32">
{/* banner */}
<section className={`w-full bg-[url('/banner.webp')] bg-cover bg-position-[center_right_40%]`}>
<Wrap className="pt-64 pb-48 max-md:pt-32 max-md:pb-24">
<section className="w-full relative">
<Image src={banner} alt="banner" className="absolute inset-0 h-full object-cover"/>
<Wrap className="relative pt-64 pb-48 max-md:pt-32 max-md:pb-24">
<h1 className="text-4xl"></h1>
<p className="mt-10 text-gray-500">IP代理服务</p>
<div className="mt-24 max-md:mt-14 flex gap-8 max-md:flex-col">
<p className="flex gap-4 items-center">
<Image src="/check.svg" alt="checkbox" width={24} height={24}/>
<Image src={check_main} alt="checkbox" width={24} height={24}/>
<span className={`lg:text-lg `}>200+</span>
</p>
<p className="flex gap-4 items-center">
<Image src="/check.svg" alt="checkbox" width={24} height={24}/>
<Image src={check_main} alt="checkbox" width={24} height={24}/>
<span className={`lg:text-lg `}>300+</span>
</p>
<p className="flex gap-4 items-center">
<Image src="/check.svg" alt="checkbox" width={24} height={24}/>
<Image src={check_main} alt="checkbox" width={24} height={24}/>
<span className={`lg:text-lg `}>&</span>
</p>
</div>
@@ -77,7 +96,8 @@ export default function Home() {
<p className="mt-9 max-lg:mt-2 text-5xl bg-linear-to-t from-blue-500 to-cyan-400 bg-clip-text text-transparent font-bold pb-2 -mb-2">99%</p>
</li>
</ul>
<img src="/map.webp" alt="map" className="w-[1200px]"/>
<Image src={map} alt="map" className="w-[1200px]"/>
</Section>
{/* 优势 1 */}
@@ -87,32 +107,32 @@ export default function Home() {
`grid grid-cols-1 md:grid-cols-2 lg:grid-cols-4 gap-8`,
].join(' ')}>
<Sec3Item
icon="s1-1"
icon={s1_1}
title="短期动态IP池"
terms={[
{icon: `s1-check`, text: `IP时效3-30分钟(可定制)`},
{icon: `s1-check`, text: `支持高并发提取`},
{icon: s1_check, text: `IP时效3-30分钟(可定制)`},
{icon: s1_check, text: `支持高并发提取`},
]}/>
<Sec3Item
icon="s1-2"
icon={s1_2}
title="长期静态IP池"
terms={[
{icon: `s1-check`, text: `IP覆盖全国各地`},
{icon: `s1-check`, text: `平均响应时长0.03s`},
{icon: s1_check, text: `IP覆盖全国各地`},
{icon: s1_check, text: `平均响应时长0.03s`},
]}/>
<Sec3Item
icon="s1-3"
icon={s1_3}
title="固定IP池"
terms={[
{icon: `s1-check`, text: `稳定长输不掉线`},
{icon: `s1-check`, text: `全国热门静态IP线路`},
{icon: s1_check, text: `稳定长输不掉线`},
{icon: s1_check, text: `全国热门静态IP线路`},
]}/>
<Sec3Item
icon="s1-4"
icon={s1_4}
title="企业级定制池"
terms={[
{icon: `s1-check`, text: `可视化监控设计`},
{icon: `s1-check`, text: `技术团队现场支持`},
{icon: s1_check, text: `可视化监控设计`},
{icon: s1_check, text: `技术团队现场支持`},
]}/>
</ul>
</Section>
@@ -121,19 +141,19 @@ export default function Home() {
<Section title="HTTP 产品优势">
<div className="flex gap-36">
<ul className="flex-1 flex flex-col gap-6">
<Sec4Item icon="s4-1-1" title="安全合规" description="国内三大运营商支持"/>
<Sec4Item icon="s4-1-2" title="稳定链接" description="IP纯净度高达99.9%"/>
<Sec4Item icon="s4-1-3" title="超匿名性" description="稳定传输,保护隐私安全"/>
<Sec4Item icon={s4_1_1} title="安全合规" description="国内三大运营商支持"/>
<Sec4Item icon={s4_1_2} title="稳定链接" description="IP纯净度高达99.9%"/>
<Sec4Item icon={s4_1_3} title="超匿名性" description="稳定传输,保护隐私安全"/>
</ul>
<img src="/s4-1-main.webp" alt="s2-1-main" className="w-0 flex-1 object-contain max-lg:hidden"/>
<Image src={s4_1_main} alt="s2-1-main" className="w-0 flex-1 object-contain max-lg:hidden"/>
</div>
<div className="flex gap-36">
<img src="/s4-2-main.webp" alt="s2-1-main" className="w-0 flex-1 object-contain max-lg:hidden"/>
<Image src={s4_2_main} alt="s2-1-main" className="w-0 flex-1 object-contain max-lg:hidden"/>
<ul className="flex-1 flex flex-col gap-6">
<Sec4Item icon="s4-2-1" title="API接口文档" description="与第三方软件轻松集成"/>
<Sec4Item icon="s4-2-2" title="多种编程语言代码" description="C语言、GO语言、Python..."/>
<Sec4Item icon="s4-2-3" title="双重认证方式" description="API提取+账密认证"/>
<Sec4Item icon={s4_2_1} title="API接口文档" description="与第三方软件轻松集成"/>
<Sec4Item icon={s4_2_2} title="多种编程语言代码" description="C语言、GO语言、Python..."/>
<Sec4Item icon={s4_2_3} title="双重认证方式" description="API提取+账密认证"/>
</ul>
</div>
</Section>
@@ -142,7 +162,7 @@ export default function Home() {
<Section title="行业资讯">
<div className="flex gap-8 max-md:gap-4">
<button className="px-4 max-md:-mx-4">
<img src="/next.svg" alt="prev" className="rotate-180"/>
<Image src={next} alt="prev" className="rotate-180"/>
</button>
<div
@@ -150,7 +170,7 @@ export default function Home() {
`shadow-[4px_4px_20px_4px] shadow-blue-50 rounded-lg`,
`flex p-14 md:gap-14 max-md:flex-col max-md:p-4`,
].join(' ')}>
<img src="/s3-main.webp" alt="tumb" className="w-2/3 md:flex-1 md:w-0 object-cover max-md:self-center"/>
<Image src={s3_main} alt="tumb" className="w-2/3 md:flex-1 md:w-0 object-cover max-md:self-center"/>
<div className="flex-2 flex flex-col justify-between gap-4">
<h3 className="flex justify-between">
<span className="text-xl"></span>
@@ -162,14 +182,14 @@ export default function Home() {
<div className="flex justify-end">
<a href="#" className="text-sm text-gray-500 flex items-center gap-4">
<img src="/next.svg" alt="more" className="h-4 fill-gray-400"/>
<Image src={next} alt="more" className="h-4 fill-gray-400"/>
</a>
</div>
</div>
</div>
<button className="px-4 max-md:-mx-4">
<img src="/next.svg" alt="prev"/>
<Image src={next} alt="prev"/>
</button>
</div>
</Section>
@@ -192,10 +212,10 @@ function Section(props: {
}
function Sec3Item(props: {
icon: string
icon: StaticImageData
title: string
terms: {
icon: string
icon: StaticImageData
text: string
}[]
}) {
@@ -205,13 +225,13 @@ function Sec3Item(props: {
`p-8 flex flex-col gap-5 shadow-[4px_4px_20px_4px] shadow-blue-50 bg-white rounded-lg`,
`max-md:items-center`,
].join(' ')}>
<img src={`/${props.icon}.webp`} alt="s1-1" aria-hidden className="w-44 h-44 object-cover"/>
<Image src={props.icon} alt="s1-1" aria-hidden className="self-center w-44 h-44 object-cover"/>
<h3 className="text-xl">{props.title}</h3>
<div className="flex flex-col gap-3">
{props.terms.map((item, index) => {
return (
<p key={index} className="text-sm text-gray-500 flex gap-3 items-center">
<img src={`/${item.icon}.svg`} alt="check" aria-hidden className="w-5 h-5"/>
<Image src={item.icon} alt="check" aria-hidden className="w-5 h-5"/>
<span>{item.text}</span>
</p>
)
@@ -222,13 +242,13 @@ function Sec3Item(props: {
}
function Sec4Item(props: {
icon: string
icon: StaticImageData
title: string
description: string
}) {
return (
<li className="flex gap-8 items-center p-4 lg:p-8 shadow-[4px_4px_20px_4px] shadow-blue-50 rounded-lg">
<img src={`/${props.icon}.webp`} alt="s2-1-1" aria-hidden className="w-24 h-24 object-contain"/>
<Image src={props.icon} alt="s2-1-1" aria-hidden className="w-24 h-24 object-contain"/>
<div className="flex flex-col gap-3">
<h3 className="text-xl">{props.title}</h3>
<p>{props.description}</p>

View File

@@ -15,7 +15,7 @@ import {useState} from 'react'
import {statisticsResourceUsage} from '@/actions/dashboard'
import {ExtraResp} from '@/lib/api'
import {toast} from 'sonner'
import {addDays, compareAsc, format, subDays} from 'date-fns'
import {compareAsc, format, subDays} from 'date-fns'
import {Label} from '@/components/ui/label'
import {ChartConfig, ChartContainer} from '@/components/ui/chart'
import {CartesianGrid, XAxis, YAxis, Tooltip, Area, AreaChart, Legend} from 'recharts'

View File

@@ -2,15 +2,9 @@
import {ReactNode} from 'react'
import {Metadata} from 'next'
import './globals.css'
import localFont from 'next/font/local'
import {Toaster} from '@/components/ui/sonner'
import StoresProvider from '@/components/stores-provider'
import Effects from '@/app/effects'
import {getProfile} from '@/actions/auth'
const font = localFont({
src: './NotoSansSC-VariableFont_wght.ttf',
})
export async function generateMetadata(): Promise<Metadata> {
return {
@@ -25,7 +19,7 @@ export default async function RootLayout({
}>) {
return (
<html lang="zh-CN">
<body className={`${font.className}`}>
<body>
<StoresProvider>
<Effects>{children}</Effects>
</StoresProvider>

View File

Before

Width:  |  Height:  |  Size: 2.6 KiB

After

Width:  |  Height:  |  Size: 2.6 KiB

View File

@@ -0,0 +1,4 @@
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<rect width="24" height="24" rx="2" fill="#2470F9"/>
<path d="M9.42868 17.6575C9.15888 17.6491 8.90283 17.5364 8.71438 17.3432L4.45011 13.1003C4.25501 12.898 4.146 12.6278 4.146 12.3467C4.146 12.0656 4.25501 11.7955 4.45011 11.5932C4.54836 11.4942 4.66521 11.4157 4.79393 11.3622C4.92265 11.3086 5.06069 11.281 5.20011 11.281C5.33952 11.281 5.47757 11.3086 5.60628 11.3622C5.735 11.4157 5.85185 11.4942 5.95011 11.5932L9.42868 15.0932L18.3144 7.31458C18.4115 7.21501 18.5276 7.13588 18.6558 7.08186C18.784 7.02783 18.9217 7 19.0608 7C19.1999 7 19.3376 7.02783 19.4658 7.08186C19.594 7.13588 19.7101 7.21501 19.8072 7.31458C19.9061 7.41284 19.9846 7.52969 20.0382 7.65841C20.0918 7.78712 20.1194 7.92517 20.1194 8.06458C20.1194 8.204 20.0918 8.34204 20.0382 8.47076C19.9846 8.59948 19.9061 8.71633 19.8072 8.81458L10.1787 17.3432C9.98014 17.5431 9.71043 17.6561 9.42868 17.6575Z" fill="white"/>
</svg>

After

Width:  |  Height:  |  Size: 997 B

View File

@@ -6,11 +6,10 @@ import {Button} from '@/components/ui/button'
import {Minus, Plus} from 'lucide-react'
import FormOption from '@/components/composites/purchase/option'
import Image from 'next/image'
import check from '@/components/composites/purchase/_assets/check.svg'
import check from '../_assets/check.svg'
import {Schema} from '@/components/composites/purchase/long/form'
import {useFormContext} from 'react-hook-form'
import {Card} from '@/components/ui/card'
import {min} from 'date-fns'
export default function Center() {
const form = useFormContext<Schema>()

View File

@@ -5,9 +5,9 @@ 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 '@/components/composites/purchase/_assets/alipay.svg'
import wechat from '@/components/composites/purchase/_assets/wechat.svg'
import balance from '@/components/composites/purchase/_assets/balance.svg'
import alipay from '../_assets/alipay.svg'
import wechat from '../_assets/wechat.svg'
import balance from '../_assets/balance.svg'
import {useProfileStore} from '@/components/stores-provider'
import RechargeModal from '@/components/composites/recharge'
import Pay from '@/components/composites/purchase/pay'

View File

@@ -6,7 +6,7 @@ import {Button} from '@/components/ui/button'
import {Minus, Plus} from 'lucide-react'
import FormOption from '@/components/composites/purchase/option'
import Image from 'next/image'
import check from '@/components/composites/purchase/_assets/check.svg'
import check from '../_assets/check.svg'
import {useFormContext} from 'react-hook-form'
import {Schema} from '@/components/composites/purchase/short/form'
import {Card} from '@/components/ui/card'

View File

@@ -5,9 +5,9 @@ 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 '@/components/composites/purchase/_assets/alipay.svg'
import wechat from '@/components/composites/purchase/_assets/wechat.svg'
import balance from '@/components/composites/purchase/_assets/balance.svg'
import alipay from '../_assets/alipay.svg'
import wechat from '../_assets/wechat.svg'
import balance from '../_assets/balance.svg'
import {useProfileStore} from '@/components/stores-provider'
import RechargeModal from '@/components/composites/recharge'
import {buttonVariants} from '@/components/ui/button'