From 7d202fc73ad44f09f6f449954ed7dc7419f068ab Mon Sep 17 00:00:00 2001 From: web Date: Fri, 25 Jul 2025 07:07:31 -0700 Subject: [PATCH] =?UTF-8?q?=F0=9F=90=9B=20fix(order):=20Preserve=20last=20?= =?UTF-8?q?successful=20order=20on=20error=20during=20order=20creation?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/user/components/subscribe/purchase.tsx | 24 +++++++++++++++------ apps/user/components/subscribe/renewal.tsx | 24 +++++++++++++++------ 2 files changed, 36 insertions(+), 12 deletions(-) diff --git a/apps/user/components/subscribe/purchase.tsx b/apps/user/components/subscribe/purchase.tsx index 89fad07..d86d478 100644 --- a/apps/user/components/subscribe/purchase.tsx +++ b/apps/user/components/subscribe/purchase.tsx @@ -13,7 +13,7 @@ import { Separator } from '@workspace/ui/components/separator'; import { LoaderCircle } from 'lucide-react'; import { useTranslations } from 'next-intl'; import { useRouter } from 'next/navigation'; -import { useCallback, useEffect, useState, useTransition } from 'react'; +import { useCallback, useEffect, useRef, useState, useTransition } from 'react'; import { SubscribeBilling } from './billing'; import { SubscribeDetail } from './detail'; @@ -33,16 +33,28 @@ export default function Purchase({ subscribe, setSubscribe }: Readonly(null); const { data: order } = useQuery({ enabled: !!subscribe?.id, queryKey: ['preCreateOrder', params], queryFn: async () => { - const { data } = await preCreateOrder({ - ...params, - subscribe_id: subscribe?.id as number, - } as API.PurchaseOrderRequest); - return data.data; + try { + const { data } = await preCreateOrder({ + ...params, + subscribe_id: subscribe?.id as number, + } as API.PurchaseOrderRequest); + const result = data.data; + if (result) { + lastSuccessOrderRef.current = result; + } + return result; + } catch (error) { + if (lastSuccessOrderRef.current) { + return lastSuccessOrderRef.current; + } + throw error; + } }, }); diff --git a/apps/user/components/subscribe/renewal.tsx b/apps/user/components/subscribe/renewal.tsx index b067e85..97479ea 100644 --- a/apps/user/components/subscribe/renewal.tsx +++ b/apps/user/components/subscribe/renewal.tsx @@ -19,7 +19,7 @@ import { Separator } from '@workspace/ui/components/separator'; import { LoaderCircle } from 'lucide-react'; import { useTranslations } from 'next-intl'; import { useRouter } from 'next/navigation'; -import { useCallback, useEffect, useState, useTransition } from 'react'; +import { useCallback, useEffect, useRef, useState, useTransition } from 'react'; import { SubscribeBilling } from './billing'; import { SubscribeDetail } from './detail'; @@ -40,16 +40,28 @@ export default function Renewal({ id, subscribe }: Readonly) { user_subscribe_id: id, }); const [loading, startTransition] = useTransition(); + const lastSuccessOrderRef = useRef(null); const { data: order } = useQuery({ enabled: !!subscribe.id && open, queryKey: ['preCreateOrder', params], queryFn: async () => { - const { data } = await preCreateOrder({ - ...params, - subscribe_id: subscribe.id, - } as API.PurchaseOrderRequest); - return data.data; + try { + const { data } = await preCreateOrder({ + ...params, + subscribe_id: subscribe.id, + } as API.PurchaseOrderRequest); + const result = data.data; + // 请求成功时保存数据 + if (result) { + lastSuccessOrderRef.current = result; + } + return result; + } catch (error) { + if (lastSuccessOrderRef.current) { + return lastSuccessOrderRef.current; + } + } }, });