diff --git a/apps/admin/config/constants.ts b/apps/admin/config/constants.ts index d6f7dba..f572573 100644 --- a/apps/admin/config/constants.ts +++ b/apps/admin/config/constants.ts @@ -4,10 +4,10 @@ import packageJSON from '../package.json'; export const locales = packageJSON.i18n.outputLocales; export const defaultLocale = packageJSON.i18n.entry; -export const NEXT_PUBLIC_DEFAULT_LANGUAGE = env('NEXT_PUBLIC_DEFAULT_LANGUAGE') || defaultLocale; +export const NEXT_PUBLIC_DEFAULT_LANGUAGE = env('NEXT_PUBLIC_DEFAULT_LANGUAGE') ?? defaultLocale; -export const NEXT_PUBLIC_SITE_URL = env('NEXT_PUBLIC_SITE_URL'); -export const NEXT_PUBLIC_API_URL = env('NEXT_PUBLIC_API_URL'); +export const NEXT_PUBLIC_SITE_URL = env('NEXT_PUBLIC_SITE_URL') ?? process.env.NEXT_PUBLIC_SITE_URL; +export const NEXT_PUBLIC_API_URL = env('NEXT_PUBLIC_API_URL') ?? process.env.NEXT_PUBLIC_API_URL; export const NEXT_PUBLIC_DEFAULT_USER_EMAIL = env('NEXT_PUBLIC_DEFAULT_USER_EMAIL'); export const NEXT_PUBLIC_DEFAULT_USER_PASSWORD = env('NEXT_PUBLIC_DEFAULT_USER_PASSWORD'); diff --git a/apps/admin/services/admin/index.ts b/apps/admin/services/admin/index.ts index 32cbdf0..944988e 100644 --- a/apps/admin/services/admin/index.ts +++ b/apps/admin/services/admin/index.ts @@ -1,5 +1,5 @@ // @ts-ignore - + // API 更新时间: // API 唯一标识: import * as announcement from './announcement'; diff --git a/apps/admin/utils/request.ts b/apps/admin/utils/request.ts index da05f77..b7005b6 100644 --- a/apps/admin/utils/request.ts +++ b/apps/admin/utils/request.ts @@ -1,7 +1,7 @@ import { NEXT_PUBLIC_API_URL, NEXT_PUBLIC_SITE_URL } from '@/config/constants'; import { getTranslations } from '@/locales/utils'; import { isBrowser } from '@workspace/ui/utils'; -import requset, { InternalAxiosRequestConfig } from 'axios'; +import axios, { InternalAxiosRequestConfig } from 'axios'; import { toast } from 'sonner'; import { getAuthorization, Logout } from './common'; @@ -10,6 +10,7 @@ async function handleError(response: any) { if ([40002, 40003, 40004].includes(code)) return Logout(); if (response?.config?.skipErrorHandler) return; if (!isBrowser()) return; + const t = await getTranslations('common'); const message = t(`request.${code}`) !== `request.${code}` @@ -19,21 +20,24 @@ async function handleError(response: any) { toast.error(message); } -requset.defaults.baseURL = NEXT_PUBLIC_API_URL || NEXT_PUBLIC_SITE_URL; -// axios.defaults.withCredentials = true; -// axios.defaults.timeout = 10000; +const requset = axios.create({ + baseURL: NEXT_PUBLIC_API_URL || NEXT_PUBLIC_SITE_URL, + // timeout: 10000, + // withCredentials: true, +}); requset.interceptors.request.use( async ( config: InternalAxiosRequestConfig & { Authorization?: string; + skipErrorHandler?: boolean; }, ) => { const Authorization = getAuthorization(config.Authorization); if (Authorization) config.headers.Authorization = Authorization; return config; }, - (error) => Promise.reject(error), + (error) => Promise.reject(new Error(error)), ); requset.interceptors.response.use( @@ -47,7 +51,7 @@ requset.interceptors.response.use( }, async (error) => { await handleError(error); - return Promise.reject(error); + return Promise.reject(new Error(error)); }, ); diff --git a/apps/user/app/(main)/(user)/affiliate/page.tsx b/apps/user/app/(main)/(user)/affiliate/page.tsx index 10cfcf5..81b03d5 100644 --- a/apps/user/app/(main)/(user)/affiliate/page.tsx +++ b/apps/user/app/(main)/(user)/affiliate/page.tsx @@ -1,104 +1,5 @@ -'use client'; -import { Display } from '@/components/display'; -import { Empty } from '@/components/empty'; -import { ProList } from '@/components/pro-list'; -import useGlobalStore from '@/config/use-global'; -import { queryUserAffiliate } from '@/services/user/user'; -import { Button } from '@workspace/ui/components/button'; -import { - Card, - CardContent, - CardDescription, - CardHeader, - CardTitle, -} from '@workspace/ui/components/card'; -import { formatDate } from '@workspace/ui/utils'; -import { Copy } from 'lucide-react'; -import { useTranslations } from 'next-intl'; -import { useState } from 'react'; -import { CopyToClipboard } from 'react-copy-to-clipboard'; -import { toast } from 'sonner'; +import Affiliate from '@/components/affiliate'; export default function Page() { - const t = useTranslations('affiliate'); - const { user, common } = useGlobalStore(); - const [sum, setSum] = useState(); - - return ( -
- - - {t('totalCommission')} - {t('commissionInfo')} - - -
- - - - - ({t('commissionRate')}: {common?.invite?.referral_percentage}%) - -
-
-
- - - {t('inviteCode')} - - -
- - {user?.refer_code} - - { - if (result) { - toast.success(t('copySuccess')); - } - }} - > - - -
-
-
- > - request={async (pagination, filter) => { - const response = await queryUserAffiliate({ ...pagination, ...filter }); - setSum(response.data.data?.sum); - return { - list: response.data.data?.list || [], - total: response.data.data?.total || 0, - }; - }} - header={{ - title: t('inviteRecords'), - }} - renderItem={(item) => { - return ( - - -
    -
  • - {t('userEmail')} - {item.email} -
  • -
  • - {t('registrationTime')} - -
  • -
-
-
- ); - }} - empty={} - /> -
- ); + return ; } diff --git a/apps/user/components/affiliate/index.tsx b/apps/user/components/affiliate/index.tsx new file mode 100644 index 0000000..a5f1d79 --- /dev/null +++ b/apps/user/components/affiliate/index.tsx @@ -0,0 +1,105 @@ +'use client'; + +import { Display } from '@/components/display'; +import { Empty } from '@/components/empty'; +import { ProList } from '@/components/pro-list'; +import useGlobalStore from '@/config/use-global'; +import { queryUserAffiliate } from '@/services/user/user'; +import { Button } from '@workspace/ui/components/button'; +import { + Card, + CardContent, + CardDescription, + CardHeader, + CardTitle, +} from '@workspace/ui/components/card'; +import { formatDate } from '@workspace/ui/utils'; +import { Copy } from 'lucide-react'; +import { useTranslations } from 'next-intl'; +import { useState } from 'react'; +import { CopyToClipboard } from 'react-copy-to-clipboard'; +import { toast } from 'sonner'; + +export default function Affiliate() { + const t = useTranslations('affiliate'); + const { user, common } = useGlobalStore(); + const [sum, setSum] = useState(); + + return ( +
+ + + {t('totalCommission')} + {t('commissionInfo')} + + +
+ + + + + ({t('commissionRate')}: {common?.invite?.referral_percentage}%) + +
+
+
+ + + {t('inviteCode')} + + +
+ + {user?.refer_code} + + { + if (result) { + toast.success(t('copySuccess')); + } + }} + > + + +
+
+
+ > + request={async (pagination, filter) => { + const response = await queryUserAffiliate({ ...pagination, ...filter }); + setSum(response.data.data?.sum); + return { + list: response.data.data?.list || [], + total: response.data.data?.total || 0, + }; + }} + header={{ + title: t('inviteRecords'), + }} + renderItem={(item) => { + return ( + + +
    +
  • + {t('userEmail')} + {item.email} +
  • +
  • + {t('registrationTime')} + +
  • +
+
+
+ ); + }} + empty={} + /> +
+ ); +} diff --git a/apps/user/components/subscribe/recharge.tsx b/apps/user/components/subscribe/recharge.tsx index 2a47fe3..0d13ee6 100644 --- a/apps/user/components/subscribe/recharge.tsx +++ b/apps/user/components/subscribe/recharge.tsx @@ -23,7 +23,7 @@ import Image from 'next/image'; import { useRouter } from 'next/navigation'; import { useEffect, useState, useTransition } from 'react'; -export default function Recharge(props: ButtonProps) { +export default function Recharge(props: Readonly) { const t = useTranslations('subscribe'); const { common } = useGlobalStore(); const { currency } = common; @@ -38,6 +38,7 @@ export default function Recharge(props: ButtonProps) { }); const { data: paymentMethods } = useQuery({ + enabled: open, queryKey: ['getAvailablePaymentMethods'], queryFn: async () => { const { data } = await getAvailablePaymentMethods(); diff --git a/apps/user/config/constants.ts b/apps/user/config/constants.ts index 5f1c39c..1c5a6d7 100644 --- a/apps/user/config/constants.ts +++ b/apps/user/config/constants.ts @@ -4,10 +4,10 @@ import packageJSON from '../package.json'; export const locales = packageJSON.i18n.outputLocales; export const defaultLocale = packageJSON.i18n.entry; -export const NEXT_PUBLIC_DEFAULT_LANGUAGE = env('NEXT_PUBLIC_DEFAULT_LANGUAGE') || locales[0]; +export const NEXT_PUBLIC_DEFAULT_LANGUAGE = env('NEXT_PUBLIC_DEFAULT_LANGUAGE') ?? defaultLocale; -export const NEXT_PUBLIC_SITE_URL = env('NEXT_PUBLIC_SITE_URL'); -export const NEXT_PUBLIC_API_URL = env('NEXT_PUBLIC_API_URL'); +export const NEXT_PUBLIC_SITE_URL = env('NEXT_PUBLIC_SITE_URL') ?? process.env.NEXT_PUBLIC_SITE_URL; +export const NEXT_PUBLIC_API_URL = env('NEXT_PUBLIC_API_URL') ?? process.env.NEXT_PUBLIC_API_URL; export const NEXT_PUBLIC_DEFAULT_USER_EMAIL = env('NEXT_PUBLIC_DEFAULT_USER_EMAIL'); export const NEXT_PUBLIC_DEFAULT_USER_PASSWORD = env('NEXT_PUBLIC_DEFAULT_USER_PASSWORD'); diff --git a/apps/user/utils/request.ts b/apps/user/utils/request.ts index 835ab4f..b7005b6 100644 --- a/apps/user/utils/request.ts +++ b/apps/user/utils/request.ts @@ -1,7 +1,7 @@ import { NEXT_PUBLIC_API_URL, NEXT_PUBLIC_SITE_URL } from '@/config/constants'; import { getTranslations } from '@/locales/utils'; import { isBrowser } from '@workspace/ui/utils'; -import requset, { InternalAxiosRequestConfig } from 'axios'; +import axios, { InternalAxiosRequestConfig } from 'axios'; import { toast } from 'sonner'; import { getAuthorization, Logout } from './common'; @@ -20,9 +20,11 @@ async function handleError(response: any) { toast.error(message); } -requset.defaults.baseURL = NEXT_PUBLIC_API_URL || NEXT_PUBLIC_SITE_URL; -// axios.defaults.withCredentials = true; -// axios.defaults.timeout = 10000; +const requset = axios.create({ + baseURL: NEXT_PUBLIC_API_URL || NEXT_PUBLIC_SITE_URL, + // timeout: 10000, + // withCredentials: true, +}); requset.interceptors.request.use( async ( @@ -35,7 +37,7 @@ requset.interceptors.request.use( if (Authorization) config.headers.Authorization = Authorization; return config; }, - (error) => Promise.reject(error), + (error) => Promise.reject(new Error(error)), ); requset.interceptors.response.use( @@ -49,7 +51,7 @@ requset.interceptors.response.use( }, async (error) => { await handleError(error); - return Promise.reject(error); + return Promise.reject(new Error(error)); }, );