|
@@ -1,15 +1,18 @@
|
|
|
-import { useCallback } from 'react';
|
|
|
|
|
|
|
+import { useCallback, useEffect } from 'react';
|
|
|
|
|
|
|
|
|
|
+import { FormInstance } from 'antd';
|
|
|
import { Trans, useTranslation } from 'react-i18next';
|
|
import { Trans, useTranslation } from 'react-i18next';
|
|
|
|
|
+import { useSearchParams } from 'react-router-dom';
|
|
|
|
|
|
|
|
import LoginForm from '@/components/LoginForm';
|
|
import LoginForm from '@/components/LoginForm';
|
|
|
-import { message } from '@/utils/antdAppInstance';
|
|
|
|
|
import { PayUrlShowType } from '@/defines';
|
|
import { PayUrlShowType } from '@/defines';
|
|
|
import { useAppUrls } from '@/hooks/useAppUrls';
|
|
import { useAppUrls } from '@/hooks/useAppUrls';
|
|
|
import { dialogModel } from '@/models/dialogModel';
|
|
import { dialogModel } from '@/models/dialogModel';
|
|
|
import { fetchGetUserConfig, fetchPayOrderCreate } from '@/services/config';
|
|
import { fetchGetUserConfig, fetchPayOrderCreate } from '@/services/config';
|
|
|
import { getToken } from '@/utils/authUtils';
|
|
import { getToken } from '@/utils/authUtils';
|
|
|
|
|
+import { decryptUrlParams } from '@/utils/requestCrypto';
|
|
|
import { currentUnixTimestamp } from '@/utils/timeUtils';
|
|
import { currentUnixTimestamp } from '@/utils/timeUtils';
|
|
|
|
|
+import { message } from '@/utils/antdAppInstance';
|
|
|
|
|
|
|
|
import { PayQrContent } from './components/OrderSummary/PayQrContent';
|
|
import { PayQrContent } from './components/OrderSummary/PayQrContent';
|
|
|
import { PayWaitingContent } from './components/OrderSummary/PayWaitingContent';
|
|
import { PayWaitingContent } from './components/OrderSummary/PayWaitingContent';
|
|
@@ -180,11 +183,40 @@ function useJumpToPayDialog() {
|
|
|
);
|
|
);
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
-export function useAction(): UseActionReturn {
|
|
|
|
|
|
|
+export interface UseActionParams {
|
|
|
|
|
+ form: FormInstance<{ planId: string; payMethod: string }>;
|
|
|
|
|
+ plans: Plan[];
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+export function useAction(params?: UseActionParams): UseActionReturn {
|
|
|
|
|
+ const form = params?.form;
|
|
|
|
|
+ const plans = params?.plans ?? [];
|
|
|
|
|
+ const [searchParams] = useSearchParams();
|
|
|
const openLoginDialog = useLoginDialog();
|
|
const openLoginDialog = useLoginDialog();
|
|
|
const openQrPayDialog = useQrPayDialog();
|
|
const openQrPayDialog = useQrPayDialog();
|
|
|
const openJumpToPayDialog = useJumpToPayDialog();
|
|
const openJumpToPayDialog = useJumpToPayDialog();
|
|
|
|
|
|
|
|
|
|
+ useEffect(() => {
|
|
|
|
|
+ if (!form || plans.length === 0) return;
|
|
|
|
|
+ const encrypted = searchParams.get('d');
|
|
|
|
|
+ if (encrypted) {
|
|
|
|
|
+ decryptUrlParams<{ planId: string }>(encrypted).then((decrypted) => {
|
|
|
|
|
+ const id = decrypted?.planId;
|
|
|
|
|
+ if (id && plans.some((p) => p.id === id)) {
|
|
|
|
|
+ form.setFieldsValue({ planId: id });
|
|
|
|
|
+ return;
|
|
|
|
|
+ }
|
|
|
|
|
+ const defaultPlan = plans.find((p) => p.isDefault);
|
|
|
|
|
+ if (defaultPlan) form.setFieldsValue({ planId: defaultPlan.id });
|
|
|
|
|
+ });
|
|
|
|
|
+ return;
|
|
|
|
|
+ }
|
|
|
|
|
+ const defaultPlan = plans.find((p) => p.isDefault);
|
|
|
|
|
+ if (defaultPlan) {
|
|
|
|
|
+ form.setFieldsValue({ planId: defaultPlan.id });
|
|
|
|
|
+ }
|
|
|
|
|
+ }, [form, plans, searchParams]);
|
|
|
|
|
+
|
|
|
const handlePayNow = useCallback(
|
|
const handlePayNow = useCallback(
|
|
|
(selectedPlan: Plan, selectedPayMethod: string) => {
|
|
(selectedPlan: Plan, selectedPayMethod: string) => {
|
|
|
const token = getToken();
|
|
const token = getToken();
|