From 13fe096a7c41be6c8ba7747634aa57447dcf0955 Mon Sep 17 00:00:00 2001 From: moux1024 <403053463@qq.com> Date: Fri, 26 Sep 2025 15:29:53 +0800 Subject: [PATCH 1/6] =?UTF-8?q?=E6=96=B0=E5=A2=9E=20h5Tab=E9=85=8D?= =?UTF-8?q?=E7=BD=AE=E5=92=8C=E8=B0=83=E7=94=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- components/layout/top-bar.tsx | 10 +- components/pages/home-page2.tsx | 38 +- package-lock.json | 657 +++++++++++++++++++++++++------- package.json | 18 +- 4 files changed, 551 insertions(+), 172 deletions(-) diff --git a/components/layout/top-bar.tsx b/components/layout/top-bar.tsx index 92d6839..b79a0fe 100644 --- a/components/layout/top-bar.tsx +++ b/components/layout/top-bar.tsx @@ -112,8 +112,12 @@ export function TopBar({ collapsed, isDesktop=true }: { collapsed: boolean, isDe // 处理自定义金额购买 const handleCustomAmountBuy = async () => { const amount = parseInt(customAmount); - if (isNaN(amount) || amount <= 0) { - console.error("请输入有效的Token数量"); + if (isNaN(amount) || amount < 50) { + showInsufficientPointsNotification({ + current_balance: credits, + required_tokens: 50, + message: "Minimum purchase is 50 credits.", + }); return; } await handleBuyTokens(amount); @@ -454,7 +458,7 @@ export function TopBar({ collapsed, isDesktop=true }: { collapsed: boolean, isDe onChange={(e) => setCustomAmount(e.target.value)} placeholder="Custom amount" className="flex-1 px-2 py-1 text-xs bg-white/10 text-white placeholder-white/60 border border-white/20 rounded focus:outline-none focus:border-blue-400" - min="1" + min="50" disabled={isBuyingTokens} /> From edc1587ef7bc58fccd2ef3f4170358ee816e6a7b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=8C=97=E6=9E=B3?= <7854742+wang_rumeng@user.noreply.gitee.com> Date: Fri, 26 Sep 2025 20:03:33 +0800 Subject: [PATCH 5/6] JAVA_BASE_URL --- lib/auth.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/auth.ts b/lib/auth.ts index c575852..9450907 100644 --- a/lib/auth.ts +++ b/lib/auth.ts @@ -687,7 +687,7 @@ export const registerUserWithInvite = async ({ */ export const sendVerificationLink = async (email: string) => { try { - const response = await fetch(`${BASE_URL}/api/user/sendVerificationLink?email=${email}`); + const response = await fetch(`${JAVA_BASE_URL}/api/user/sendVerificationLink?email=${email}`); const data = await response.json(); if(!data.success){ throw new Error(data.message||data.msg) From 339671c73849b5f411021116d6bd2b861b12c6c8 Mon Sep 17 00:00:00 2001 From: moux1024 <403053463@qq.com> Date: Fri, 26 Sep 2025 21:04:10 +0800 Subject: [PATCH 6/6] =?UTF-8?q?=E6=9B=B4=E6=96=B0=20=E5=A5=97=E9=A4=90?= =?UTF-8?q?=E4=BF=A1=E6=81=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/pricing/page.tsx | 15 ++++-- components/pages/home-page2.tsx | 88 ++++++++++++++++++-------------- components/ui/VideoCoverflow.tsx | 4 +- 3 files changed, 64 insertions(+), 43 deletions(-) diff --git a/app/pricing/page.tsx b/app/pricing/page.tsx index 04d142d..93ff639 100644 --- a/app/pricing/page.tsx +++ b/app/pricing/page.tsx @@ -62,6 +62,9 @@ function HomeModule5() { { title: string; price: number; + originalPrice: number; + monthlyPrice: number; + discountMsg: string; credits: string; buttonText: string; features: string[]; @@ -75,6 +78,9 @@ function HomeModule5() { billingType === "month" ? plan.price_month / 100 : plan.price_year / 100, + originalPrice: plan.price_month / 100, + monthlyPrice: billingType === "month" ? 0 : plan.price_year / 1200, + discountMsg: `Saves $${(plan.price_month * 12 - plan.price_year) / 100} by billing yearly!`, credits: plan.description, buttonText: plan.is_free ? "Try For Free" : "Subscribe Now", issubscribed: plan.is_subscribed, @@ -226,7 +232,7 @@ function HomeModule5() { xl:text-[3.375rem] 2xl:text-[3.75rem]" > - ${plan.price} + ${plan.monthlyPrice || plan.price} - / {billingType === "month" ? "month" : "year"} + / month + {plan.originalPrice !== plan.price ? (
+ ${plan.originalPrice} +
) : null}

- * Billed monthly until cancelled + * {plan.discountMsg}