'use client'; import { Display } from '@/components/display'; import Recharge from '@/components/subscribe/recharge'; import ResetTraffic from '@/components/subscribe/reset-traffic'; import useGlobalStore from '@/config/use-global'; import { getStat } from '@/services/common/common'; import { queryUserSubscribe } from '@/services/user/user'; import { useQuery } from '@tanstack/react-query'; import { AiroButton } from '@workspace/airo-ui/components/AiroButton'; import { Button } from '@workspace/airo-ui/components/button'; import { Card } from '@workspace/airo-ui/components/card'; import { useTranslations } from 'next-intl'; import Link from 'next/link'; import { useRef } from 'react'; import SubScribeCard from './components/SubscribeCard/index'; import { AnnouncementDialog, DialogRef, } from '@/app/(main)/(content)/(user)/dashboard/components/Announcement/Dialog'; import { Popup, PopupRef, } from '@/app/(main)/(content)/(user)/dashboard/components/Announcement/Popup'; import { Empty } from '@/components/empty'; import SvgIcon from '@/components/SvgIcon'; import { queryAnnouncement } from '@/services/user/announcement'; import { queryOrderList } from '@/services/user/order'; import { formatDate } from '@workspace/airo-ui/utils'; const platforms: (keyof API.ApplicationPlatform)[] = [ 'windows', 'macos', 'linux', 'ios', 'android', 'harmony', ]; export default function Content() { const t = useTranslations('dashboard'); const { data: userSubscribe = {}, refetch } = useQuery({ queryKey: ['queryUserSubscribe'], queryFn: async () => { const { data } = await queryUserSubscribe(); const activeList = data.data?.list?.filter((v) => v.status === 1); return activeList[0] ?? {}; }, }); const { data } = useQuery({ queryKey: ['getStat'], queryFn: async () => { const { data } = await getStat({ skipErrorHandler: true, }); return data.data; }, refetchOnWindowFocus: false, }); const { data: announcementData } = useQuery({ queryKey: ['queryAnnouncement'], queryFn: async () => { const { data } = await queryAnnouncement({ page: 1, size: 5, // pinned: false, // popup: false, }); return data.data?.announcements || []; }, }); const { data: orderData } = useQuery({ queryKey: ['orderData'], queryFn: async () => { const { data } = await queryOrderList({ status: 5, page: 1, size: 1 }); return data?.data?.list?.[0] ?? {}; }, }); const statusWatermarks = { 2: t('finished'), 3: t('expired'), 4: t('deducted'), }; const { user } = useGlobalStore(); const totalAssets = (user?.balance || 0) + (user?.commission || 0) + (user?.gift_amount || 0); const popupRef = useRef(null); const dialogRef = useRef(null); function openPopupWindow(item) { // features 字符串用于控制窗口的特性 const pageWidth = 600; // 弹出窗口的宽度 const pageHeight = 550; // 弹出窗口的高度 const { availLeft, // 返回浏览器可用空间左边距离屏幕(系统桌面)左边界的距离。 availHeight, // 浏览器在显示屏上的可用高度,即当前屏幕高度 availWidth, // 浏览器在显示屏上的可用宽度,即当前屏幕宽度 } = window.screen; const pageTop = (availHeight - pageHeight) / 2; // 窗口的垂直位置 let pageLeft = (availWidth - pageWidth) / 2; // 窗口的水平位置; pageLeft += availLeft; // 加上屏幕偏移值 const features = `width=${pageWidth},height=${pageHeight},left=${pageLeft},top=${pageTop},toolbar=no,location=no,menubar=no`; console.log(features); window.open(item.download, item.title, features); } return ( <>
{/* 快捷下载 Card */}

{t('quickDownloads')}

{t('selectOS')}
{[ { label: 'iOS', icon: 'Group 77', href: 'https://apps.apple.com/us/app/shadowrocket/id932747118?l=zh-Hans-CN', }, { label: 'Mac', icon: 'Group 77', href: 'https://apps.apple.com/us/app/shadowrocket/id932747118?l=zh-Hans-CN', }, { label: 'Win', icon: 'Group 75', href: 'https://down.airoport.xin/Hiddify-Windows-Setup-x64.msix', }, { label: 'Android', icon: 'Group 75', href: 'https://down.airoport.xin/Hiddify-Android-universal.apk', }, ].map((v) => { return (
{v.label}
); })}
{t('freeAppleID')} { openPopupWindow({ download: 'https://getsapp.net/StKNQY', title: 'Shadowrocket', }); }} > {t('get')}
{/* 我的订阅 Card */}

{t('mySubscription')}

{t('beginnerTutorial')}
{/* 账户概况 Card */}

{t('accountOverview')}

{user?.auth_methods?.[0]?.auth_identifier}

{userSubscribe?.status === 1 && orderData ? orderData?.quantity === 1 ? t('annualMonthPlanUser') : t('annualYearPlanUser') : t('noYPlan')}
{t('accountBalance')}
{/* 套餐状态 Card */}

{t('planStatus')} {userSubscribe?.status === 1 ? ( {t('inEffect')} ) : ( {t('notEffect')} )}

{t('planExpirationTime')} {formatDate(userSubscribe?.expire_time, false) || t('None')}
{userSubscribe?.subscribe?.name ? ( userSubscribe?.subscribe?.name ) : ( {t('noPlanAvailable')} )}
{t('availableDevices')}
{Array.from({ length: userSubscribe?.subscribe?.device_limit || 6 }).map( (_, index) => { return (
1 ? 'bg-[#225BA9]' : 'bg-[#D9D9D9]'}`} >
); }, )}
{t('online')} {data?.online_device || 0}/{userSubscribe?.subscribe?.device_limit || 0}
{t('usedTrafficTotalTraffic')} {userSubscribe?.subscribe?.device_limit ? ( <> / ) : ( '0GB/0GB' )} {t('remaining')} {userSubscribe?.status === 1 ? ( <> {100 - Math.round( (((userSubscribe?.upload || 0) + (userSubscribe?.download || 0)) / (userSubscribe?.traffic || 1)) * 100, )} ) : ( 0 )} %
{/* 网站公告 Card */}

{t('siteAnnouncements')}

{announcementData?.length ? ( ) : null}
{announcementData?.length ? ( <>
{/* 置顶公告 */} {announcementData?.map((item) => { return (

{item.pinned && ( {t('pinnedAnnouncement')} )} {item.content}

popupRef.current?.open(item)} > {t('viewDetails')}
); })}
) : ( )}
); }