From 3bb714d15c41f2ad367784e3fab6e26fe60ea3f4 Mon Sep 17 00:00:00 2001 From: "web@ppanel" Date: Wed, 9 Apr 2025 03:27:22 -0400 Subject: [PATCH] =?UTF-8?q?=F0=9F=90=9B=20fix(user):=20Update=20user=20sub?= =?UTF-8?q?scribe=20display?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- CHANGELOG.md | 21 +- apps/admin/services/admin/typings.d.ts | 1 + apps/admin/services/common/common.ts | 18 + apps/admin/services/common/typings.d.ts | 12 + .../app/(main)/(user)/dashboard/content.tsx | 447 ++++++++++-------- apps/user/locales/cs-CZ/dashboard.json | 3 + apps/user/locales/de-DE/dashboard.json | 3 + apps/user/locales/en-US/dashboard.json | 3 + apps/user/locales/es-ES/dashboard.json | 3 + apps/user/locales/es-MX/dashboard.json | 3 + apps/user/locales/fa-IR/dashboard.json | 3 + apps/user/locales/fi-FI/dashboard.json | 3 + apps/user/locales/fr-FR/dashboard.json | 3 + apps/user/locales/hi-IN/dashboard.json | 3 + apps/user/locales/hu-HU/dashboard.json | 3 + apps/user/locales/ja-JP/dashboard.json | 3 + apps/user/locales/ko-KR/dashboard.json | 3 + apps/user/locales/no-NO/dashboard.json | 3 + apps/user/locales/pl-PL/dashboard.json | 3 + apps/user/locales/pt-BR/dashboard.json | 3 + apps/user/locales/ro-RO/dashboard.json | 3 + apps/user/locales/ru-RU/dashboard.json | 3 + apps/user/locales/th-TH/dashboard.json | 3 + apps/user/locales/tr-TR/dashboard.json | 3 + apps/user/locales/uk-UA/dashboard.json | 3 + apps/user/locales/vi-VN/dashboard.json | 3 + apps/user/locales/zh-CN/dashboard.json | 3 + apps/user/locales/zh-HK/dashboard.json | 3 + apps/user/services/common/common.ts | 18 + apps/user/services/common/typings.d.ts | 12 + apps/user/services/user/typings.d.ts | 1 + 31 files changed, 393 insertions(+), 206 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 77d8e2a..44cb317 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,24 +1,23 @@ + # Changelog # [1.0.0-beta.34](https://github.com/perfect-panel/ppanel-web/compare/v1.0.0-beta.33...v1.0.0-beta.34) (2025-04-02) - ### ✨ Features -* **admin**: Add application and rule management entries to localization files ([8b43e69](https://github.com/perfect-panel/ppanel-web/commit/8b43e69)) -* **api**: Add an interface to obtain user subscription details, update related type definitions and localized text ([cf5c39c](https://github.com/perfect-panel/ppanel-web/commit/cf5c39c)) -* **user**: Integrate subscription list into user management, update request parameters and types ([8d49dac](https://github.com/perfect-panel/ppanel-web/commit/8d49dac)) - +- **admin**: Add application and rule management entries to localization files ([8b43e69](https://github.com/perfect-panel/ppanel-web/commit/8b43e69)) +- **api**: Add an interface to obtain user subscription details, update related type definitions and localized text ([cf5c39c](https://github.com/perfect-panel/ppanel-web/commit/cf5c39c)) +- **user**: Integrate subscription list into user management, update request parameters and types ([8d49dac](https://github.com/perfect-panel/ppanel-web/commit/8d49dac)) ### 🐛 Bug Fixes -* **admin**: Hidden versions and system upgrades ([64cd842](https://github.com/perfect-panel/ppanel-web/commit/64cd842)) -* **admin**: Modify the label type in the rule form to a string array ([a7aa5fe](https://github.com/perfect-panel/ppanel-web/commit/a7aa5fe)) -* **node**: Handle potential null value for online users count ([fa2fb28](https://github.com/perfect-panel/ppanel-web/commit/fa2fb28)) -* **subscribe**: Add value prop to field in subscription form for proper state management ([328838d](https://github.com/perfect-panel/ppanel-web/commit/328838d)) -* **subscribe**: Refactor discount calculations and default selection logic in subscription forms ([423b240](https://github.com/perfect-panel/ppanel-web/commit/423b240)) -* **subscribe**: Update default selection logic in subscription form to ensure proper state management ([ef15374](https://github.com/perfect-panel/ppanel-web/commit/ef15374)) +- **admin**: Hidden versions and system upgrades ([64cd842](https://github.com/perfect-panel/ppanel-web/commit/64cd842)) +- **admin**: Modify the label type in the rule form to a string array ([a7aa5fe](https://github.com/perfect-panel/ppanel-web/commit/a7aa5fe)) +- **node**: Handle potential null value for online users count ([fa2fb28](https://github.com/perfect-panel/ppanel-web/commit/fa2fb28)) +- **subscribe**: Add value prop to field in subscription form for proper state management ([328838d](https://github.com/perfect-panel/ppanel-web/commit/328838d)) +- **subscribe**: Refactor discount calculations and default selection logic in subscription forms ([423b240](https://github.com/perfect-panel/ppanel-web/commit/423b240)) +- **subscribe**: Update default selection logic in subscription form to ensure proper state management ([ef15374](https://github.com/perfect-panel/ppanel-web/commit/ef15374)) diff --git a/apps/admin/services/admin/typings.d.ts b/apps/admin/services/admin/typings.d.ts index 84f5449..0d6b734 100644 --- a/apps/admin/services/admin/typings.d.ts +++ b/apps/admin/services/admin/typings.d.ts @@ -1748,6 +1748,7 @@ declare namespace API { subscribe: Subscribe; start_time: number; expire_time: number; + finished_at: number; reset_time: number; traffic: number; download: number; diff --git a/apps/admin/services/common/common.ts b/apps/admin/services/common/common.ts index 99d74e8..c942f7d 100644 --- a/apps/admin/services/common/common.ts +++ b/apps/admin/services/common/common.ts @@ -25,6 +25,24 @@ export async function getApplication(options?: { [key: string]: any }) { }); } +/** Check verification code POST /v1/common/check_verification_code */ +export async function checkVerificationCode( + body: API.CheckVerificationCodeRequest, + options?: { [key: string]: any }, +) { + return request( + '/v1/common/check_verification_code', + { + method: 'POST', + headers: { + 'Content-Type': 'application/json', + }, + data: body, + ...(options || {}), + }, + ); +} + /** Get verification code POST /v1/common/send_code */ export async function sendEmailCode(body: API.SendCodeRequest, options?: { [key: string]: any }) { return request('/v1/common/send_code', { diff --git a/apps/admin/services/common/typings.d.ts b/apps/admin/services/common/typings.d.ts index 3dbdacf..75a9b95 100644 --- a/apps/admin/services/common/typings.d.ts +++ b/apps/admin/services/common/typings.d.ts @@ -121,6 +121,17 @@ declare namespace API { telephone: string; }; + type CheckVerificationCodeRequest = { + method: 'email' | 'mobile'; + account: string; + code: string; + type: number; + }; + + type CheckVerificationCodeRespone = { + status: boolean; + }; + type CloseOrderRequest = { orderNo: string; }; @@ -910,6 +921,7 @@ declare namespace API { subscribe: Subscribe; start_time: number; expire_time: number; + finished_at: number; reset_time: number; traffic: number; download: number; diff --git a/apps/user/app/(main)/(user)/dashboard/content.tsx b/apps/user/app/(main)/(user)/dashboard/content.tsx index 39736ad..fdb17b6 100644 --- a/apps/user/app/(main)/(user)/dashboard/content.tsx +++ b/apps/user/app/(main)/(user)/dashboard/content.tsx @@ -32,6 +32,7 @@ import { Card, CardContent, CardHeader, CardTitle } from '@workspace/ui/componen import { Separator } from '@workspace/ui/components/separator'; import { Tabs, TabsList, TabsTrigger } from '@workspace/ui/components/tabs'; import { Icon } from '@workspace/ui/custom-components/icon'; +import { cn } from '@workspace/ui/lib/utils'; import { differenceInDays, formatDate, isBrowser } from '@workspace/ui/utils'; import { useTranslations } from 'next-intl'; import Image from 'next/image'; @@ -88,6 +89,12 @@ export default function Content() { refetchOnWindowFocus: false, }); + const statusWatermarks = { + 2: t('finished'), + 3: t('expired'), + 4: t('deducted'), + }; + return ( <> {userSubscribe.length ? ( @@ -159,209 +166,259 @@ export default function Content() { )} - {userSubscribe.map((item) => ( - - - - {item.subscribe.name} -

{formatDate(item.start_time)}

-
-
- - - - - - - {t('prompt')} - - {t('confirmResetSubscription')} - - - - {t('cancel')} - { - await resetUserSubscribeToken({ - user_subscribe_id: item.id, - }); - await refetch(); - toast.success(t('resetSuccess')); - }} - > - {t('confirm')} - - - - - - - -
-
- -
    -
  • - {t('used')} - - - -
  • -
  • - {t('totalTraffic')} - - - -
  • -
  • - {t('nextResetDays')} - - {item.reset_time - ? differenceInDays(new Date(item.reset_time), new Date()) - : t('noReset')} - -
  • -
  • - {t('expirationDays')} - - {} - {item.expire_time - ? differenceInDays(new Date(item.expire_time), new Date()) || t('unknown') - : t('noLimit')} - -
  • -
- - - {getUserSubscribe(item.token, protocol)?.map((url, index) => ( - - -
- - {t('subscriptionUrl')} {index + 1} - + {userSubscribe.map((item) => { + return ( + - ))} + + +
+ {applications + ?.filter((application) => { + const platformApps = application.platform?.[platform]; + return platformApps && platformApps.length > 0; + }) + .map((application) => { + const platformApps = application.platform?.[platform]; + const app = + platformApps?.find((item) => item.is_default) || + platformApps?.[0]; + if (!app) return null; + + const handleCopy = (text: string, result: boolean) => { + if (result) { + const href = getAppSubLink(application.subscribe_type, url); + const showSuccessMessage = () => { + toast.success( + <> +

{t('copySuccess')}

+
+

{t('manualImportMessage')}

+ , + ); + }; + + if (isBrowser() && href) { + window.location.href = href; + const checkRedirect = setTimeout(() => { + if (window.location.href !== href) { + showSuccessMessage(); + } + clearTimeout(checkRedirect); + }, 1000); + return; + } + + showSuccessMessage(); + } + }; + + return ( +
+ {application.name} + + {application.icon && ( + {application.name} + )} +
+ + + + + +
+
+ ); + })} +
+ {t('qrCode')} + + {t('scanToSubscribe')} +
+
+
+ + ))} + + + + ); + })} ) : ( <> diff --git a/apps/user/locales/cs-CZ/dashboard.json b/apps/user/locales/cs-CZ/dashboard.json index 5fec8a1..12d2a71 100644 --- a/apps/user/locales/cs-CZ/dashboard.json +++ b/apps/user/locales/cs-CZ/dashboard.json @@ -5,8 +5,11 @@ "copy": "kopírovat", "copyFailure": "Kopírování selhalo, prosím zkopírujte ručně", "copySuccess": "Kopírování úspěšné", + "deducted": "Zrušeno", "download": "stáhnout", "expirationDays": "Doba platnosti/dny", + "expired": "Vypršelo", + "finished": "Provoz vyčerpán", "import": "Importovat", "latestAnnouncement": "Nejnovější oznámení", "manualImportMessage": "Tato aplikace momentálně nepodporuje spuštění, prosím importujte ručně, adresa předplatného byla automaticky zkopírována", diff --git a/apps/user/locales/de-DE/dashboard.json b/apps/user/locales/de-DE/dashboard.json index bd31574..8785969 100644 --- a/apps/user/locales/de-DE/dashboard.json +++ b/apps/user/locales/de-DE/dashboard.json @@ -5,8 +5,11 @@ "copy": "Kopieren", "copyFailure": "Kopieren fehlgeschlagen, bitte manuell kopieren", "copySuccess": "Kopieren erfolgreich", + "deducted": "Storniert", "download": "Herunterladen", "expirationDays": "Ablaufzeit/Tage", + "expired": "Abgelaufen", + "finished": "Verkehr erschöpft", "import": "Importieren", "latestAnnouncement": "Neueste Ankündigung", "manualImportMessage": "Diese App unterstützt derzeit keine Aktivierung. Bitte manuell importieren, die Abonnementadresse wurde automatisch kopiert.", diff --git a/apps/user/locales/en-US/dashboard.json b/apps/user/locales/en-US/dashboard.json index 4b60c3b..f28acda 100644 --- a/apps/user/locales/en-US/dashboard.json +++ b/apps/user/locales/en-US/dashboard.json @@ -5,8 +5,11 @@ "copy": "Copy", "copyFailure": "Copy failed, please copy manually", "copySuccess": "Copy successful", + "deducted": "Canceled", "download": "Download", "expirationDays": "Expiration Days", + "expired": "Expired", + "finished": "Traffic exhausted", "import": "Import", "latestAnnouncement": "Latest Announcement", "manualImportMessage": "This app does not support activation. Please import manually. The subscription address has been copied.", diff --git a/apps/user/locales/es-ES/dashboard.json b/apps/user/locales/es-ES/dashboard.json index 57254e1..881b110 100644 --- a/apps/user/locales/es-ES/dashboard.json +++ b/apps/user/locales/es-ES/dashboard.json @@ -5,8 +5,11 @@ "copy": "Copiar", "copyFailure": "Error al copiar, por favor copia manualmente", "copySuccess": "Copia exitosa", + "deducted": "Cancelado", "download": "descargar", "expirationDays": "Días de vencimiento", + "expired": "Caducado", + "finished": "Tráfico agotado", "import": "importar", "latestAnnouncement": "Último anuncio", "manualImportMessage": "Esta aplicación no admite la activación por el momento. Por favor, importe manualmente. La dirección de suscripción ha sido copiada automáticamente.", diff --git a/apps/user/locales/es-MX/dashboard.json b/apps/user/locales/es-MX/dashboard.json index f6602fd..994573c 100644 --- a/apps/user/locales/es-MX/dashboard.json +++ b/apps/user/locales/es-MX/dashboard.json @@ -5,8 +5,11 @@ "copy": "copiar", "copyFailure": "Error al copiar, por favor copia manualmente", "copySuccess": "Copia exitosa", + "deducted": "Cancelado", "download": "descargar", "expirationDays": "Días de vencimiento", + "expired": "Expirado", + "finished": "Tráfico agotado", "import": "Importar", "latestAnnouncement": "Último anuncio", "manualImportMessage": "Esta aplicación no admite la activación por el momento, por favor importe manualmente, la dirección de suscripción se ha copiado automáticamente", diff --git a/apps/user/locales/fa-IR/dashboard.json b/apps/user/locales/fa-IR/dashboard.json index 4f39cca..fafbb14 100644 --- a/apps/user/locales/fa-IR/dashboard.json +++ b/apps/user/locales/fa-IR/dashboard.json @@ -5,8 +5,11 @@ "copy": "کپی", "copyFailure": "کپی ناموفق بود، لطفاً به صورت دستی کپی کنید", "copySuccess": "کپی با موفقیت انجام شد", + "deducted": "لغو شده", "download": "دانلود", "expirationDays": "روزهای انقضا", + "expired": "منقضی شده", + "finished": "ترافیک تمام شده", "import": "وارد کردن", "latestAnnouncement": "آخرین اعلامیه", "manualImportMessage": "این برنامه از فعال‌سازی پشتیبانی نمی‌کند. لطفاً به صورت دستی وارد کنید. آدرس اشتراک کپی شده است.", diff --git a/apps/user/locales/fi-FI/dashboard.json b/apps/user/locales/fi-FI/dashboard.json index 796574b..f600c1a 100644 --- a/apps/user/locales/fi-FI/dashboard.json +++ b/apps/user/locales/fi-FI/dashboard.json @@ -5,8 +5,11 @@ "copy": "kopioi", "copyFailure": "Kopiointi epäonnistui, kopioi manuaalisesti", "copySuccess": "Kopiointi onnistui", + "deducted": "Peruutettu", "download": "lataa", "expirationDays": "Vanhentumispäivät", + "expired": "Vanhentunut", + "finished": "Liikenne loppunut", "import": "Tuo", "latestAnnouncement": "Viimeisin ilmoitus", "manualImportMessage": "Tämä sovellus ei tue herätystä tällä hetkellä, tuo manuaalisesti, tilausosoite on kopioitu automaattisesti", diff --git a/apps/user/locales/fr-FR/dashboard.json b/apps/user/locales/fr-FR/dashboard.json index d73e9e3..e10a869 100644 --- a/apps/user/locales/fr-FR/dashboard.json +++ b/apps/user/locales/fr-FR/dashboard.json @@ -5,8 +5,11 @@ "copy": "Copier", "copyFailure": "Échec de la copie, veuillez copier manuellement", "copySuccess": "Copie réussie", + "deducted": "Annulé", "download": "télécharger", "expirationDays": "Date d'expiration/jours", + "expired": "Expiré", + "finished": "Trafic épuisé", "import": "Importer", "latestAnnouncement": "Dernière annonce", "manualImportMessage": "Cette application ne prend pas encore en charge l'activation, veuillez importer manuellement, l'adresse d'abonnement a été copiée automatiquement", diff --git a/apps/user/locales/hi-IN/dashboard.json b/apps/user/locales/hi-IN/dashboard.json index b779e93..08ee90f 100644 --- a/apps/user/locales/hi-IN/dashboard.json +++ b/apps/user/locales/hi-IN/dashboard.json @@ -5,8 +5,11 @@ "copy": "प्रतिलिपि", "copyFailure": "प्रतिलिपि बनाने में विफल, कृपया मैन्युअल रूप से प्रतिलिपि बनाएँ", "copySuccess": "प्रतिलिपि सफल", + "deducted": "रद्द किया गया", "download": "डाउनलोड", "expirationDays": "समाप्ति समय/दिन", + "expired": "समाप्त", + "finished": "ट्रैफ़िक समाप्त", "import": "आयात", "latestAnnouncement": "नवीनतम घोषणा", "manualImportMessage": "यह ऐप फिलहाल जागृत करने का समर्थन नहीं करता है, कृपया मैन्युअल रूप से आयात करें, सदस्यता पता स्वचालित रूप से कॉपी कर लिया गया है।", diff --git a/apps/user/locales/hu-HU/dashboard.json b/apps/user/locales/hu-HU/dashboard.json index 0a3ec7c..49d6c81 100644 --- a/apps/user/locales/hu-HU/dashboard.json +++ b/apps/user/locales/hu-HU/dashboard.json @@ -5,8 +5,11 @@ "copy": "Másolás", "copyFailure": "Másolás sikertelen, kérjük, másolja kézzel", "copySuccess": "Sikeres másolás", + "deducted": "Törölve", "download": "letöltés", "expirationDays": "Lejárati idő/nap", + "expired": "Lejárt", + "finished": "Forgalom kimerült", "import": "importálás", "latestAnnouncement": "Legújabb bejelentés", "manualImportMessage": "Ez az alkalmazás jelenleg nem támogatja az ébresztést, kérjük, importálja manuálisan, az előfizetési cím automatikusan másolva lett", diff --git a/apps/user/locales/ja-JP/dashboard.json b/apps/user/locales/ja-JP/dashboard.json index a946e29..0208e94 100644 --- a/apps/user/locales/ja-JP/dashboard.json +++ b/apps/user/locales/ja-JP/dashboard.json @@ -5,8 +5,11 @@ "copy": "コピー", "copyFailure": "コピーに失敗しました。手動でコピーしてください", "copySuccess": "コピー成功", + "deducted": "キャンセルされた", "download": "ダウンロード", "expirationDays": "有効期限/日", + "expired": "期限切れ", + "finished": "トラフィックが使い切られました", "import": "インポート", "latestAnnouncement": "最新のお知らせ", "manualImportMessage": "このアプリは現在起動をサポートしていません。手動でインポートしてください。サブスクリプションアドレスは自動的にコピーされました。", diff --git a/apps/user/locales/ko-KR/dashboard.json b/apps/user/locales/ko-KR/dashboard.json index cbddcc2..07058cf 100644 --- a/apps/user/locales/ko-KR/dashboard.json +++ b/apps/user/locales/ko-KR/dashboard.json @@ -5,8 +5,11 @@ "copy": "복사", "copyFailure": "복사 실패, 수동으로 복사하세요", "copySuccess": "복사 성공", + "deducted": "취소됨", "download": "다운로드", "expirationDays": "만료일/일", + "expired": "만료됨", + "finished": "트래픽 소진됨", "import": "가져오기", "latestAnnouncement": "최신 공지", "manualImportMessage": "이 앱은 현재 호출을 지원하지 않습니다. 수동으로 가져오세요. 구독 주소가 자동으로 복사되었습니다.", diff --git a/apps/user/locales/no-NO/dashboard.json b/apps/user/locales/no-NO/dashboard.json index a1dc7e5..0775be9 100644 --- a/apps/user/locales/no-NO/dashboard.json +++ b/apps/user/locales/no-NO/dashboard.json @@ -5,8 +5,11 @@ "copy": "kopier", "copyFailure": "Kopiering mislyktes, vennligst kopier manuelt", "copySuccess": "Kopiering vellykket", + "deducted": "Avbrutt", "download": "last ned", "expirationDays": "Utløpsdato/dager", + "expired": "Utløpt", + "finished": "Trafikk brukt opp", "import": "Importer", "latestAnnouncement": "Siste kunngjøring", "manualImportMessage": "Denne appen støtter foreløpig ikke oppstart, vennligst importer manuelt, abonnementsadressen er automatisk kopiert", diff --git a/apps/user/locales/pl-PL/dashboard.json b/apps/user/locales/pl-PL/dashboard.json index c15bc6f..ed148f7 100644 --- a/apps/user/locales/pl-PL/dashboard.json +++ b/apps/user/locales/pl-PL/dashboard.json @@ -5,8 +5,11 @@ "copy": "kopiuj", "copyFailure": "Kopiowanie nie powiodło się, proszę skopiować ręcznie", "copySuccess": "Skopiowano pomyślnie", + "deducted": "Anulowane", "download": "pobierz", "expirationDays": "Czas wygaśnięcia/dni", + "expired": "Wygasło", + "finished": "Wykończony ruch", "import": "Importuj", "latestAnnouncement": "Najnowsze ogłoszenie", "manualImportMessage": "Ta aplikacja tymczasowo nie obsługuje wywoływania, proszę zaimportować ręcznie, adres subskrypcji został automatycznie skopiowany", diff --git a/apps/user/locales/pt-BR/dashboard.json b/apps/user/locales/pt-BR/dashboard.json index eab91f4..627a61d 100644 --- a/apps/user/locales/pt-BR/dashboard.json +++ b/apps/user/locales/pt-BR/dashboard.json @@ -5,8 +5,11 @@ "copy": "Copiar", "copyFailure": "Falha ao copiar, por favor copie manualmente", "copySuccess": "Cópia bem-sucedida", + "deducted": "Cancelado", "download": "baixar", "expirationDays": "Data de expiração/dias", + "expired": "Expirado", + "finished": "Tráfego esgotado", "import": "Importar", "latestAnnouncement": "Último Anúncio", "manualImportMessage": "Este aplicativo não suporta ativação no momento, por favor, importe manualmente. O endereço de assinatura foi copiado automaticamente.", diff --git a/apps/user/locales/ro-RO/dashboard.json b/apps/user/locales/ro-RO/dashboard.json index 0989928..a117942 100644 --- a/apps/user/locales/ro-RO/dashboard.json +++ b/apps/user/locales/ro-RO/dashboard.json @@ -5,8 +5,11 @@ "copy": "Copiază", "copyFailure": "Copierea a eșuat, vă rugăm să copiați manual", "copySuccess": "Copiere reușită", + "deducted": "Anulat", "download": "descărcare", "expirationDays": "Zile până la expirare", + "expired": "Expirat", + "finished": "Trafic epuizat", "import": "Import", "latestAnnouncement": "Ultimul anunț", "manualImportMessage": "Această aplicație nu suportă momentan activarea, vă rugăm să importați manual, adresa de abonament a fost copiată automat", diff --git a/apps/user/locales/ru-RU/dashboard.json b/apps/user/locales/ru-RU/dashboard.json index 847bc88..85bd191 100644 --- a/apps/user/locales/ru-RU/dashboard.json +++ b/apps/user/locales/ru-RU/dashboard.json @@ -5,8 +5,11 @@ "copy": "Копировать", "copyFailure": "Не удалось скопировать, пожалуйста, скопируйте вручную", "copySuccess": "Копирование успешно", + "deducted": "Отменено", "download": "скачать", "expirationDays": "Срок действия/дни", + "expired": "Истекло", + "finished": "Трафик исчерпан", "import": "Импорт", "latestAnnouncement": "Последнее объявление", "manualImportMessage": "Это приложение временно не поддерживает вызов, пожалуйста, импортируйте вручную, адрес подписки уже скопирован", diff --git a/apps/user/locales/th-TH/dashboard.json b/apps/user/locales/th-TH/dashboard.json index 22c3290..db6c267 100644 --- a/apps/user/locales/th-TH/dashboard.json +++ b/apps/user/locales/th-TH/dashboard.json @@ -5,8 +5,11 @@ "copy": "คัดลอก", "copyFailure": "คัดลอกไม่สำเร็จ กรุณาคัดลอกด้วยตนเอง", "copySuccess": "คัดลอกสำเร็จ", + "deducted": "ยกเลิก", "download": "ดาวน์โหลด", "expirationDays": "วันหมดอายุ/วัน", + "expired": "หมดอายุ", + "finished": "การใช้งานหมด", "import": "นำเข้า", "latestAnnouncement": "ประกาศล่าสุด", "manualImportMessage": "แอปนี้ยังไม่รองรับการเปิดใช้งาน กรุณานำเข้าด้วยตนเอง ที่อยู่การสมัครสมาชิกได้ถูกคัดลอกอัตโนมัติแล้ว", diff --git a/apps/user/locales/tr-TR/dashboard.json b/apps/user/locales/tr-TR/dashboard.json index 22d2243..018ff51 100644 --- a/apps/user/locales/tr-TR/dashboard.json +++ b/apps/user/locales/tr-TR/dashboard.json @@ -5,8 +5,11 @@ "copy": "kopyala", "copyFailure": "Kopyalama başarısız oldu, lütfen elle kopyalayın", "copySuccess": "Kopyalama başarılı", + "deducted": "İptal edildi", "download": "indir", "expirationDays": "Son Kullanma Süresi/Gün", + "expired": "Süresi dolmuş", + "finished": "Trafik tükendi", "import": "İçe Aktar", "latestAnnouncement": "Son Duyuru", "manualImportMessage": "Bu uygulama şu anda uyandırmayı desteklemiyor, lütfen elle içe aktarın, abone adresi otomatik olarak kopyalandı", diff --git a/apps/user/locales/uk-UA/dashboard.json b/apps/user/locales/uk-UA/dashboard.json index 2815aae..93262ee 100644 --- a/apps/user/locales/uk-UA/dashboard.json +++ b/apps/user/locales/uk-UA/dashboard.json @@ -5,8 +5,11 @@ "copy": "Копіювати", "copyFailure": "Не вдалося скопіювати, будь ласка, скопіюйте вручну", "copySuccess": "Скопійовано успішно", + "deducted": "Скасовано", "download": "завантажити", "expirationDays": "Термін дії/дні", + "expired": "Термін закінчився", + "finished": "Трафік вичерпано", "import": "Імпорт", "latestAnnouncement": "Останнє оголошення", "manualImportMessage": "Цей додаток тимчасово не підтримує виклик, будь ласка, імпортуйте вручну, адресу підписки вже скопійовано", diff --git a/apps/user/locales/vi-VN/dashboard.json b/apps/user/locales/vi-VN/dashboard.json index e469aab..acc9aaa 100644 --- a/apps/user/locales/vi-VN/dashboard.json +++ b/apps/user/locales/vi-VN/dashboard.json @@ -5,8 +5,11 @@ "copy": "Sao chép", "copyFailure": "Sao chép thất bại, vui lòng sao chép thủ công", "copySuccess": "Sao chép thành công", + "deducted": "Đã hủy", "download": "tải xuống", "expirationDays": "Thời gian hết hạn/ngày", + "expired": "Hết hạn", + "finished": "Lưu lượng đã sử dụng", "import": "Nhập khẩu", "latestAnnouncement": "Thông báo mới nhất", "manualImportMessage": "Ứng dụng này hiện không hỗ trợ kích hoạt, vui lòng nhập thủ công, địa chỉ đăng ký đã được sao chép tự động", diff --git a/apps/user/locales/zh-CN/dashboard.json b/apps/user/locales/zh-CN/dashboard.json index b152f21..fee6525 100644 --- a/apps/user/locales/zh-CN/dashboard.json +++ b/apps/user/locales/zh-CN/dashboard.json @@ -5,8 +5,11 @@ "copy": "复制", "copyFailure": "复制失败,请手动复制", "copySuccess": "复制成功", + "deducted": "已取消", "download": "下载", "expirationDays": "到期时间/天", + "expired": "已过期", + "finished": "流量已用尽", "import": "导入", "latestAnnouncement": "最新公告", "manualImportMessage": "该应用暂不支持唤起,请手动导入,已自动复制订阅地址", diff --git a/apps/user/locales/zh-HK/dashboard.json b/apps/user/locales/zh-HK/dashboard.json index e9681f8..22c0e6c 100644 --- a/apps/user/locales/zh-HK/dashboard.json +++ b/apps/user/locales/zh-HK/dashboard.json @@ -5,8 +5,11 @@ "copy": "複製", "copyFailure": "複製失敗,請手動複製", "copySuccess": "複製成功", + "deducted": "已取消", "download": "下載", "expirationDays": "到期時間/天", + "expired": "已過期", + "finished": "流量已用盡", "import": "匯入", "latestAnnouncement": "最新公告", "manualImportMessage": "該應用暫不支援喚起,請手動導入,已自動複製訂閱地址", diff --git a/apps/user/services/common/common.ts b/apps/user/services/common/common.ts index 99d74e8..c942f7d 100644 --- a/apps/user/services/common/common.ts +++ b/apps/user/services/common/common.ts @@ -25,6 +25,24 @@ export async function getApplication(options?: { [key: string]: any }) { }); } +/** Check verification code POST /v1/common/check_verification_code */ +export async function checkVerificationCode( + body: API.CheckVerificationCodeRequest, + options?: { [key: string]: any }, +) { + return request( + '/v1/common/check_verification_code', + { + method: 'POST', + headers: { + 'Content-Type': 'application/json', + }, + data: body, + ...(options || {}), + }, + ); +} + /** Get verification code POST /v1/common/send_code */ export async function sendEmailCode(body: API.SendCodeRequest, options?: { [key: string]: any }) { return request('/v1/common/send_code', { diff --git a/apps/user/services/common/typings.d.ts b/apps/user/services/common/typings.d.ts index 3dbdacf..75a9b95 100644 --- a/apps/user/services/common/typings.d.ts +++ b/apps/user/services/common/typings.d.ts @@ -121,6 +121,17 @@ declare namespace API { telephone: string; }; + type CheckVerificationCodeRequest = { + method: 'email' | 'mobile'; + account: string; + code: string; + type: number; + }; + + type CheckVerificationCodeRespone = { + status: boolean; + }; + type CloseOrderRequest = { orderNo: string; }; @@ -910,6 +921,7 @@ declare namespace API { subscribe: Subscribe; start_time: number; expire_time: number; + finished_at: number; reset_time: number; traffic: number; download: number; diff --git a/apps/user/services/user/typings.d.ts b/apps/user/services/user/typings.d.ts index a260e2c..13d8a66 100644 --- a/apps/user/services/user/typings.d.ts +++ b/apps/user/services/user/typings.d.ts @@ -1010,6 +1010,7 @@ declare namespace API { subscribe: Subscribe; start_time: number; expire_time: number; + finished_at: number; reset_time: number; traffic: number; download: number;