feat(user): Add user Detail

This commit is contained in:
web@ppanel 2025-02-08 14:47:23 +07:00
parent fdaf11b654
commit 3a3d2236e2
91 changed files with 2514 additions and 708 deletions

View File

@ -1,6 +1,8 @@
'use client'; 'use client';
import { ProTable } from '@/components/pro-table'; import { ProTable } from '@/components/pro-table';
import { getUserLoginLogs } from '@/services/admin/user';
import { Badge } from '@workspace/ui/components/badge';
import { formatDate } from '@workspace/ui/utils'; import { formatDate } from '@workspace/ui/utils';
import { useTranslations } from 'next-intl'; import { useTranslations } from 'next-intl';
import { useParams } from 'next/navigation'; import { useParams } from 'next/navigation';
@ -10,17 +12,19 @@ export default function UserLoginHistory() {
const { id } = useParams<{ id: string }>(); const { id } = useParams<{ id: string }>();
return ( return (
<ProTable< <ProTable<API.UserLoginLog, Record<string, unknown>>
{
ip: string;
user_agent: string;
created_at: string;
},
Record<string, unknown>
>
columns={[ columns={[
{ {
accessorKey: 'ip', accessorKey: 'success',
header: t('loginStatus'),
cell: ({ row }) => (
<Badge variant={row.getValue('success') ? 'default' : 'destructive'}>
{row.getValue('success') ? t('success') : t('failed')}
</Badge>
),
},
{
accessorKey: 'login_ip',
header: t('loginIp'), header: t('loginIp'),
}, },
{ {
@ -33,16 +37,15 @@ export default function UserLoginHistory() {
cell: ({ row }) => formatDate(row.getValue('created_at')), cell: ({ row }) => formatDate(row.getValue('created_at')),
}, },
]} ]}
params={[
{
key: 'search',
placeholder: t('searchIp'),
},
]}
request={async (pagination, filter) => { request={async (pagination, filter) => {
const { data } = await getUserLoginLogs({
user_id: Number(id),
...pagination,
...filter,
});
return { return {
list: [], list: data.data?.list || [],
total: 0, total: data.data?.total || 0,
}; };
}} }}
/> />

View File

@ -1,17 +1,48 @@
'use client'; 'use client';
import {
createUserAuthMethod,
deleteUserAuthMethod,
updateUserAuthMethod,
} from '@/services/admin/user';
import { Badge } from '@workspace/ui/components/badge'; import { Badge } from '@workspace/ui/components/badge';
import { Button } from '@workspace/ui/components/button'; import { Button } from '@workspace/ui/components/button';
import { Card, CardContent, CardHeader, CardTitle } from '@workspace/ui/components/card'; import { Card, CardContent, CardHeader, CardTitle } from '@workspace/ui/components/card';
import { EnhancedInput } from '@workspace/ui/custom-components/enhanced-input'; import { EnhancedInput } from '@workspace/ui/custom-components/enhanced-input';
import { useTranslations } from 'next-intl';
import { useState } from 'react'; import { useState } from 'react';
import { toast } from 'sonner';
export function AuthMethodsForm({ user }: { user: API.User }) { export function AuthMethodsForm({ user }: { user: API.User }) {
const t = useTranslations('user');
const [emailChanges, setEmailChanges] = useState<Record<string, string>>({}); const [emailChanges, setEmailChanges] = useState<Record<string, string>>({});
const handleRemoveAuth = async (authType: string) => {}; const handleRemoveAuth = async (authType: string) => {
const handleUpdateEmail = async (authType: string) => {}; await deleteUserAuthMethod({
const handleCreateEmail = async (email: string) => {}; user_id: user.id,
auth_type: authType,
});
toast.success(t('deleteSuccess'));
};
const handleUpdateEmail = async (email: string) => {
await updateUserAuthMethod({
user_id: user.id,
auth_type: 'email',
auth_identifier: email,
});
toast.success(t('updateSuccess'));
};
const handleCreateEmail = async (email: string) => {
await createUserAuthMethod({
user_id: user.id,
auth_type: 'email',
auth_identifier: email,
});
toast.success(t('createSuccess'));
};
const handleEmailChange = (authType: string, value: string) => { const handleEmailChange = (authType: string, value: string) => {
setEmailChanges((prev) => ({ setEmailChanges((prev) => ({
@ -34,7 +65,7 @@ export function AuthMethodsForm({ user }: { user: API.User }) {
const handleEmailAction = () => { const handleEmailAction = () => {
const email = emailChanges['email']; const email = emailChanges['email'];
if (isEmailExists) { if (isEmailExists) {
handleUpdateEmail('email'); handleUpdateEmail(email as string);
} else { } else {
handleCreateEmail(email as string); handleCreateEmail(email as string);
} }
@ -43,7 +74,7 @@ export function AuthMethodsForm({ user }: { user: API.User }) {
return ( return (
<Card> <Card>
<CardHeader> <CardHeader>
<CardTitle>Authentication Settings</CardTitle> <CardTitle>{t('authMethodsTitle')}</CardTitle>
</CardHeader> </CardHeader>
<CardContent className='space-y-6'> <CardContent className='space-y-6'>
<div className='space-y-6'> <div className='space-y-6'>
@ -52,14 +83,14 @@ export function AuthMethodsForm({ user }: { user: API.User }) {
<div className='flex items-center justify-between'> <div className='flex items-center justify-between'>
<div className='font-medium uppercase'>email</div> <div className='font-medium uppercase'>email</div>
<Badge variant={defaultEmailMethod.verified ? 'default' : 'destructive'}> <Badge variant={defaultEmailMethod.verified ? 'default' : 'destructive'}>
{defaultEmailMethod.verified ? 'Verified' : 'Unverified'} {defaultEmailMethod.verified ? t('verified') : t('unverified')}
</Badge> </Badge>
</div> </div>
<div className='flex items-center gap-2'> <div className='flex items-center gap-2'>
<div className='flex-1'> <div className='flex-1'>
<EnhancedInput <EnhancedInput
value={defaultEmailMethod.auth_identifier} value={defaultEmailMethod.auth_identifier}
placeholder='Please enter email' placeholder={t('pleaseEnterEmail')}
onValueChange={(value) => handleEmailChange('email', value as string)} onValueChange={(value) => handleEmailChange('email', value as string)}
/> />
</div> </div>
@ -70,7 +101,7 @@ export function AuthMethodsForm({ user }: { user: API.User }) {
(isEmailExists && emailChanges['email'] === defaultEmailMethod.auth_identifier) (isEmailExists && emailChanges['email'] === defaultEmailMethod.auth_identifier)
} }
> >
{isEmailExists ? 'Update' : 'Add'} {isEmailExists ? t('update') : t('add')}
</Button> </Button>
</div> </div>
</CardContent> </CardContent>
@ -82,7 +113,7 @@ export function AuthMethodsForm({ user }: { user: API.User }) {
<div className='flex items-center justify-between'> <div className='flex items-center justify-between'>
<div className='font-medium uppercase'>{method.auth_type}</div> <div className='font-medium uppercase'>{method.auth_type}</div>
<Badge variant={method.verified ? 'default' : 'destructive'}> <Badge variant={method.verified ? 'default' : 'destructive'}>
{method.verified ? 'Verified' : 'Unverified'} {method.verified ? t('verified') : t('unverified')}
</Badge> </Badge>
</div> </div>
<div className='flex items-center gap-4'> <div className='flex items-center gap-4'>
@ -94,7 +125,7 @@ export function AuthMethodsForm({ user }: { user: API.User }) {
size='sm' size='sm'
onClick={() => handleRemoveAuth(method.auth_type)} onClick={() => handleRemoveAuth(method.auth_type)}
> >
Remove {t('remove')}
</Button> </Button>
</div> </div>
</CardContent> </CardContent>

View File

@ -1,7 +1,7 @@
'use client'; 'use client';
import useGlobalStore from '@/config/use-global'; import useGlobalStore from '@/config/use-global';
import { updateUser } from '@/services/admin/user'; import { updateUserBasicInfo } from '@/services/admin/user';
import { zodResolver } from '@hookform/resolvers/zod'; import { zodResolver } from '@hookform/resolvers/zod';
import { Button } from '@workspace/ui/components/button'; import { Button } from '@workspace/ui/components/button';
import { Card, CardContent, CardHeader, CardTitle } from '@workspace/ui/components/card'; import { Card, CardContent, CardHeader, CardTitle } from '@workspace/ui/components/card';
@ -18,6 +18,7 @@ import { Switch } from '@workspace/ui/components/switch';
import { EnhancedInput } from '@workspace/ui/custom-components/enhanced-input'; import { EnhancedInput } from '@workspace/ui/custom-components/enhanced-input';
import { UploadImage } from '@workspace/ui/custom-components/upload-image'; import { UploadImage } from '@workspace/ui/custom-components/upload-image';
import { unitConversion } from '@workspace/ui/utils'; import { unitConversion } from '@workspace/ui/utils';
import { useTranslations } from 'next-intl';
import { useForm } from 'react-hook-form'; import { useForm } from 'react-hook-form';
import { toast } from 'sonner'; import { toast } from 'sonner';
import * as z from 'zod'; import * as z from 'zod';
@ -37,6 +38,8 @@ const basicInfoSchema = z.object({
type BasicInfoValues = z.infer<typeof basicInfoSchema>; type BasicInfoValues = z.infer<typeof basicInfoSchema>;
export function BasicInfoForm({ user }: { user: API.User }) { export function BasicInfoForm({ user }: { user: API.User }) {
const t = useTranslations('user');
const { common } = useGlobalStore(); const { common } = useGlobalStore();
const { currency } = common; const { currency } = common;
@ -55,11 +58,12 @@ export function BasicInfoForm({ user }: { user: API.User }) {
}); });
async function onSubmit(data: BasicInfoValues) { async function onSubmit(data: BasicInfoValues) {
await updateUser({ await updateUserBasicInfo({
id: user.id, user_id: user.id,
telegram: user.telegram,
...data, ...data,
} as API.UpdateUserRequest); } as API.UpdateUserBasiceInfoRequest);
toast.success('Saved successfully'); toast.success(t('updateSuccess'));
} }
return ( return (
@ -67,9 +71,9 @@ export function BasicInfoForm({ user }: { user: API.User }) {
<form onSubmit={form.handleSubmit(onSubmit)}> <form onSubmit={form.handleSubmit(onSubmit)}>
<Card> <Card>
<CardHeader className='flex flex-row items-center justify-between'> <CardHeader className='flex flex-row items-center justify-between'>
<CardTitle>Basic Information</CardTitle> <CardTitle>{t('basicInfoTitle')}</CardTitle>
<Button type='submit' size='sm'> <Button type='submit' size='sm'>
Save {t('save')}
</Button> </Button>
</CardHeader> </CardHeader>
<CardContent className='space-y-4'> <CardContent className='space-y-4'>
@ -78,7 +82,7 @@ export function BasicInfoForm({ user }: { user: API.User }) {
name='enable' name='enable'
render={({ field }) => ( render={({ field }) => (
<FormItem className='flex items-center justify-between space-x-2'> <FormItem className='flex items-center justify-between space-x-2'>
<FormLabel>Account Enable</FormLabel> <FormLabel>{t('accountEnable')}</FormLabel>
<FormControl> <FormControl>
<Switch checked={field.value} onCheckedChange={field.onChange} /> <Switch checked={field.value} onCheckedChange={field.onChange} />
</FormControl> </FormControl>
@ -91,7 +95,7 @@ export function BasicInfoForm({ user }: { user: API.User }) {
name='is_admin' name='is_admin'
render={({ field }) => ( render={({ field }) => (
<FormItem className='flex items-center justify-between space-x-2'> <FormItem className='flex items-center justify-between space-x-2'>
<FormLabel>Administrator</FormLabel> <FormLabel>{t('administrator')}</FormLabel>
<FormControl> <FormControl>
<Switch checked={field.value} onCheckedChange={field.onChange} /> <Switch checked={field.value} onCheckedChange={field.onChange} />
</FormControl> </FormControl>
@ -104,7 +108,7 @@ export function BasicInfoForm({ user }: { user: API.User }) {
name='balance' name='balance'
render={({ field }) => ( render={({ field }) => (
<FormItem> <FormItem>
<FormLabel>Balance</FormLabel> <FormLabel>{t('balance')}</FormLabel>
<FormControl> <FormControl>
<EnhancedInput <EnhancedInput
type='number' type='number'
@ -127,7 +131,7 @@ export function BasicInfoForm({ user }: { user: API.User }) {
name='commission' name='commission'
render={({ field }) => ( render={({ field }) => (
<FormItem> <FormItem>
<FormLabel>Commission</FormLabel> <FormLabel>{t('commission')}</FormLabel>
<FormControl> <FormControl>
<EnhancedInput <EnhancedInput
type='number' type='number'
@ -150,7 +154,7 @@ export function BasicInfoForm({ user }: { user: API.User }) {
name='gift_amount' name='gift_amount'
render={({ field }) => ( render={({ field }) => (
<FormItem> <FormItem>
<FormLabel>Gift Amount</FormLabel> <FormLabel>{t('giftAmount')}</FormLabel>
<FormControl> <FormControl>
<EnhancedInput <EnhancedInput
type='number' type='number'
@ -175,7 +179,7 @@ export function BasicInfoForm({ user }: { user: API.User }) {
name='refer_code' name='refer_code'
render={({ field }) => ( render={({ field }) => (
<FormItem> <FormItem>
<FormLabel>Referral Code</FormLabel> <FormLabel>{t('referralCode')}</FormLabel>
<FormControl> <FormControl>
<EnhancedInput <EnhancedInput
value={field.value} value={field.value}
@ -193,7 +197,7 @@ export function BasicInfoForm({ user }: { user: API.User }) {
name='referer_id' name='referer_id'
render={({ field }) => ( render={({ field }) => (
<FormItem> <FormItem>
<FormLabel>Referrer (User ID)</FormLabel> <FormLabel>{t('referrerUserId')}</FormLabel>
<FormControl> <FormControl>
<EnhancedInput <EnhancedInput
type='number' type='number'
@ -213,7 +217,7 @@ export function BasicInfoForm({ user }: { user: API.User }) {
name='avatar' name='avatar'
render={({ field }) => ( render={({ field }) => (
<FormItem> <FormItem>
<FormLabel>Avatar</FormLabel> <FormLabel>{t('avatar')}</FormLabel>
<FormControl> <FormControl>
<EnhancedInput <EnhancedInput
value={field.value} value={field.value}
@ -238,9 +242,9 @@ export function BasicInfoForm({ user }: { user: API.User }) {
name='password' name='password'
render={({ field }) => ( render={({ field }) => (
<FormItem> <FormItem>
<FormLabel>Password</FormLabel> <FormLabel>{t('password')}</FormLabel>
<FormControl> <FormControl>
<Input type='password' placeholder='Leave empty to keep unchanged' {...field} /> <Input type='password' placeholder={t('passwordPlaceholder')} {...field} />
</FormControl> </FormControl>
<FormMessage /> <FormMessage />
</FormItem> </FormItem>

View File

@ -1,10 +1,12 @@
'use client'; 'use client';
import { updateUserNotifySetting } from '@/services/admin/user';
import { zodResolver } from '@hookform/resolvers/zod'; import { zodResolver } from '@hookform/resolvers/zod';
import { Button } from '@workspace/ui/components/button'; import { Button } from '@workspace/ui/components/button';
import { Card, CardContent, CardHeader, CardTitle } from '@workspace/ui/components/card'; import { Card, CardContent, CardHeader, CardTitle } from '@workspace/ui/components/card';
import { Form, FormControl, FormField, FormItem, FormLabel } from '@workspace/ui/components/form'; import { Form, FormControl, FormField, FormItem, FormLabel } from '@workspace/ui/components/form';
import { Switch } from '@workspace/ui/components/switch'; import { Switch } from '@workspace/ui/components/switch';
import { useTranslations } from 'next-intl';
import { useForm } from 'react-hook-form'; import { useForm } from 'react-hook-form';
import { toast } from 'sonner'; import { toast } from 'sonner';
import * as z from 'zod'; import * as z from 'zod';
@ -21,6 +23,8 @@ const notifySettingsSchema = z.object({
type NotifySettingsValues = z.infer<typeof notifySettingsSchema>; type NotifySettingsValues = z.infer<typeof notifySettingsSchema>;
export function NotifySettingsForm({ user }: { user: API.User }) { export function NotifySettingsForm({ user }: { user: API.User }) {
const t = useTranslations('user');
const form = useForm<NotifySettingsValues>({ const form = useForm<NotifySettingsValues>({
resolver: zodResolver(notifySettingsSchema), resolver: zodResolver(notifySettingsSchema),
defaultValues: { defaultValues: {
@ -34,7 +38,11 @@ export function NotifySettingsForm({ user }: { user: API.User }) {
}); });
async function onSubmit(data: NotifySettingsValues) { async function onSubmit(data: NotifySettingsValues) {
toast.warning('In Development...'); await updateUserNotifySetting({
...data,
user_id: user.id,
});
toast.success(t('updateSuccess'));
} }
return ( return (
@ -42,9 +50,9 @@ export function NotifySettingsForm({ user }: { user: API.User }) {
<form onSubmit={form.handleSubmit(onSubmit)}> <form onSubmit={form.handleSubmit(onSubmit)}>
<Card> <Card>
<CardHeader className='flex flex-row items-center justify-between'> <CardHeader className='flex flex-row items-center justify-between'>
<CardTitle>Notification Settings</CardTitle> <CardTitle>{t('notifySettingsTitle')}</CardTitle>
<Button type='submit' size='sm'> <Button type='submit' size='sm'>
Save {t('save')}
</Button> </Button>
</CardHeader> </CardHeader>
<CardContent className='space-y-4'> <CardContent className='space-y-4'>
@ -54,7 +62,7 @@ export function NotifySettingsForm({ user }: { user: API.User }) {
name='enable_email_notify' name='enable_email_notify'
render={({ field }) => ( render={({ field }) => (
<FormItem className='flex items-center justify-between space-x-2'> <FormItem className='flex items-center justify-between space-x-2'>
<FormLabel>Email Notifications</FormLabel> <FormLabel>{t('emailNotifications')}</FormLabel>
<FormControl> <FormControl>
<Switch checked={field.value} onCheckedChange={field.onChange} /> <Switch checked={field.value} onCheckedChange={field.onChange} />
</FormControl> </FormControl>
@ -67,7 +75,7 @@ export function NotifySettingsForm({ user }: { user: API.User }) {
name='enable_telegram_notify' name='enable_telegram_notify'
render={({ field }) => ( render={({ field }) => (
<FormItem className='flex items-center justify-between space-x-2'> <FormItem className='flex items-center justify-between space-x-2'>
<FormLabel>Telegram Notifications</FormLabel> <FormLabel>{t('telegramNotifications')}</FormLabel>
<FormControl> <FormControl>
<Switch checked={field.value} onCheckedChange={field.onChange} /> <Switch checked={field.value} onCheckedChange={field.onChange} />
</FormControl> </FormControl>
@ -80,7 +88,7 @@ export function NotifySettingsForm({ user }: { user: API.User }) {
name='enable_balance_notify' name='enable_balance_notify'
render={({ field }) => ( render={({ field }) => (
<FormItem className='flex items-center justify-between space-x-2'> <FormItem className='flex items-center justify-between space-x-2'>
<FormLabel>Balance Change Notifications</FormLabel> <FormLabel>{t('balanceNotifications')}</FormLabel>
<FormControl> <FormControl>
<Switch checked={field.value} onCheckedChange={field.onChange} /> <Switch checked={field.value} onCheckedChange={field.onChange} />
</FormControl> </FormControl>
@ -93,7 +101,7 @@ export function NotifySettingsForm({ user }: { user: API.User }) {
name='enable_login_notify' name='enable_login_notify'
render={({ field }) => ( render={({ field }) => (
<FormItem className='flex items-center justify-between space-x-2'> <FormItem className='flex items-center justify-between space-x-2'>
<FormLabel>Login Notifications</FormLabel> <FormLabel>{t('loginNotifications')}</FormLabel>
<FormControl> <FormControl>
<Switch checked={field.value} onCheckedChange={field.onChange} /> <Switch checked={field.value} onCheckedChange={field.onChange} />
</FormControl> </FormControl>
@ -106,7 +114,7 @@ export function NotifySettingsForm({ user }: { user: API.User }) {
name='enable_subscribe_notify' name='enable_subscribe_notify'
render={({ field }) => ( render={({ field }) => (
<FormItem className='flex items-center justify-between space-x-2'> <FormItem className='flex items-center justify-between space-x-2'>
<FormLabel>Subscription Notifications</FormLabel> <FormLabel>{t('subscriptionNotifications')}</FormLabel>
<FormControl> <FormControl>
<Switch checked={field.value} onCheckedChange={field.onChange} /> <Switch checked={field.value} onCheckedChange={field.onChange} />
</FormControl> </FormControl>
@ -119,7 +127,7 @@ export function NotifySettingsForm({ user }: { user: API.User }) {
name='enable_trade_notify' name='enable_trade_notify'
render={({ field }) => ( render={({ field }) => (
<FormItem className='flex items-center justify-between space-x-2'> <FormItem className='flex items-center justify-between space-x-2'>
<FormLabel>Trade Notifications</FormLabel> <FormLabel>{t('tradeNotifications')}</FormLabel>
<FormControl> <FormControl>
<Switch checked={field.value} onCheckedChange={field.onChange} /> <Switch checked={field.value} onCheckedChange={field.onChange} />
</FormControl> </FormControl>

View File

@ -2,66 +2,40 @@
import { Display } from '@/components/display'; import { Display } from '@/components/display';
import { ProTable, ProTableActions } from '@/components/pro-table'; import { ProTable, ProTableActions } from '@/components/pro-table';
import { createUserSubscribe, getUserSubscribe, updateUserSubscribe } from '@/services/admin/user';
import { Button } from '@workspace/ui/components/button'; import { Button } from '@workspace/ui/components/button';
import { ConfirmButton } from '@workspace/ui/custom-components/confirm-button'; import { ConfirmButton } from '@workspace/ui/custom-components/confirm-button';
import { formatDate } from '@workspace/ui/utils'; import { formatDate } from '@workspace/ui/utils';
import { useTranslations } from 'next-intl';
import { useRef, useState } from 'react'; import { useRef, useState } from 'react';
import { toast } from 'sonner';
import { SubscriptionDetail } from './subscription-detail'; import { SubscriptionDetail } from './subscription-detail';
import { SubscriptionForm } from './subscription-form'; import { SubscriptionForm } from './subscription-form';
// 模拟数据 export default function UserSubscription({ userId }: { userId: number }) {
const mockData: API.Subscribe[] = [ const t = useTranslations('user');
{
id: 1,
name: 'Basic Package',
description: 'Basic Traffic Package',
unit_price: 9.9,
unit_time: '30d',
discount: [],
replacement: 0,
inventory: 100,
traffic: 1073741824, // 1GB
speed_limit: 10,
device_limit: 3,
quota: 0,
group_id: 1,
server_group: [1],
server: [1, 2],
show: true,
sell: true,
sort: 1,
deduction_ratio: 0,
allow_deduction: false,
reset_cycle: 30,
renewal_reset: true,
created_at: Date.now(),
updated_at: Date.now(),
},
// 可以添加更多模拟数据...
];
interface Props {
userId: string;
}
export default function UserSubscription({ userId }: Props) {
const [loading, setLoading] = useState(false); const [loading, setLoading] = useState(false);
const ref = useRef<ProTableActions>(null); const ref = useRef<ProTableActions>(null);
return ( return (
<ProTable<API.Subscribe, Record<string, unknown>> <ProTable<API.UserSubscribe, Record<string, unknown>>
action={ref} action={ref}
header={{ header={{
title: 'Subscription List', title: t('subscriptionList'),
toolbar: ( toolbar: (
<SubscriptionForm <SubscriptionForm
key='create' key='create'
trigger={<Button>Create</Button>} trigger={t('add')}
title='Create Subscription' title={t('createSubscription')}
loading={loading} loading={loading}
userId={userId} userId={userId}
onSubmit={async (values) => { onSubmit={async (values) => {
console.log('创建订阅:', values); await createUserSubscribe({
user_id: userId,
...values,
});
toast.success(t('createSuccess'));
ref.current?.refresh();
return true; return true;
}} }}
/> />
@ -74,34 +48,67 @@ export default function UserSubscription({ userId }: Props) {
}, },
{ {
accessorKey: 'name', accessorKey: 'name',
header: '名称', header: t('subscriptionName'),
cell: ({ row }) => row.original.subscribe.name,
},
{
accessorKey: 'upload',
header: t('upload'),
cell: ({ row }) => <Display type='traffic' value={row.getValue('upload')} />,
},
{
accessorKey: 'download',
header: t('download'),
cell: ({ row }) => <Display type='traffic' value={row.getValue('download')} />,
}, },
{ {
accessorKey: 'traffic', accessorKey: 'traffic',
header: '流量', header: t('totalTraffic'),
cell: ({ row }) => <Display type='traffic' value={row.getValue('traffic')} />, cell: ({ row }) => <Display type='traffic' value={row.getValue('traffic')} unlimited />,
}, },
{ {
accessorKey: 'speed_limit', accessorKey: 'speed_limit',
header: '限速', header: t('speedLimit'),
cell: ({ row }) => `${row.getValue('speed_limit')} Mbps`, cell: ({ row }) => {
const speed = row.original?.subscribe?.speed_limit;
return <Display type='trafficSpeed' value={speed} />;
},
}, },
{ {
accessorKey: 'device_limit', accessorKey: 'device_limit',
header: '设备限制', header: t('deviceLimit'),
cell: ({ row }) => {
const limit = row.original?.subscribe?.device_limit;
return <Display type='number' value={limit} unlimited />;
},
},
{
accessorKey: 'reset_time',
header: t('resetTime'),
cell: ({ row }) => {
return <Display type='number' value={row.getValue('reset_time')} unlimited />;
},
},
{
accessorKey: 'expire_time',
header: t('expireTime'),
cell: ({ row }) =>
row.getValue('expire_time') ? formatDate(row.getValue('expire_time')) : t('permanent'),
}, },
{ {
accessorKey: 'created_at', accessorKey: 'created_at',
header: '创建时间', header: t('createdAt'),
cell: ({ row }) => formatDate(row.getValue('created_at')), cell: ({ row }) => formatDate(row.getValue('created_at')),
}, },
]} ]}
request={async () => { request={async (pagination) => {
// 模拟异步请求 const { data } = await getUserSubscribe({
await new Promise((resolve) => setTimeout(resolve, 1000)); user_id: userId,
...pagination,
});
return { return {
list: mockData, list: data.data?.list || [],
total: mockData.length, total: data.data?.total || 0,
}; };
}} }}
actions={{ actions={{
@ -109,31 +116,38 @@ export default function UserSubscription({ userId }: Props) {
return [ return [
<SubscriptionForm <SubscriptionForm
key='edit' key='edit'
trigger={<Button>Edit</Button>} trigger={t('edit')}
title='Edit Subscription' title={t('editSubscription')}
loading={loading} loading={loading}
userId={userId} userId={userId}
initialData={row} initialData={row}
onSubmit={async (values) => { onSubmit={async (values) => {
console.log('编辑订阅:', values); await updateUserSubscribe({
user_id: userId,
user_subscribe_id: row.id,
...values,
});
toast.success(t('updateSuccess'));
ref.current?.refresh();
return true; return true;
}} }}
/>, />,
<SubscriptionDetail <SubscriptionDetail
key='detail' key='detail'
trigger={<Button variant='secondary'>Details</Button>} trigger={<Button variant='secondary'>{t('detail')}</Button>}
subscriptionId={row.id.toString()} userId={userId}
subscriptionId={row.id}
/>, />,
<ConfirmButton <ConfirmButton
key='delete' key='delete'
trigger={<Button variant='destructive'>Delete</Button>} trigger={<Button variant='destructive'>{t('delete')}</Button>}
title='Confirm Delete' title={t('confirmDelete')}
description='Are you sure to delete this subscription?' description={t('deleteSubscriptionDescription')}
onConfirm={async () => { onConfirm={async () => {
console.log('删除订阅:', row.id); console.log('删除订阅:', row.id);
}} }}
cancelText='Cancel' cancelText={t('cancel')}
confirmText='Confirm' confirmText={t('confirm')}
/>, />,
]; ];
}, },

View File

@ -2,6 +2,13 @@
import { Display } from '@/components/display'; import { Display } from '@/components/display';
import { ProTable } from '@/components/pro-table'; import { ProTable } from '@/components/pro-table';
import {
getUserSubscribeDevices,
getUserSubscribeLogs,
getUserSubscribeTrafficLogs,
kickOfflineByUserDevice,
} from '@/services/admin/user';
import { Badge } from '@workspace/ui/components/badge';
import { Button } from '@workspace/ui/components/button'; import { Button } from '@workspace/ui/components/button';
import { import {
Dialog, Dialog,
@ -10,132 +17,182 @@ import {
DialogTitle, DialogTitle,
DialogTrigger, DialogTrigger,
} from '@workspace/ui/components/dialog'; } from '@workspace/ui/components/dialog';
import { Switch } from '@workspace/ui/components/switch';
import { Tabs, TabsContent, TabsList, TabsTrigger } from '@workspace/ui/components/tabs'; import { Tabs, TabsContent, TabsList, TabsTrigger } from '@workspace/ui/components/tabs';
import { ConfirmButton } from '@workspace/ui/custom-components/confirm-button'; import { ConfirmButton } from '@workspace/ui/custom-components/confirm-button';
import { formatDate } from '@workspace/ui/utils'; import { formatDate } from '@workspace/ui/utils';
import { useTranslations } from 'next-intl';
import { ReactNode, useState } from 'react'; import { ReactNode, useState } from 'react';
import { toast } from 'sonner'; import { toast } from 'sonner';
// 模拟数据 export function SubscriptionDetail({
const mockLogs = [ trigger,
{ id: 1, action: 'Create Subscription', created_at: Date.now() - 86400000 }, userId,
{ id: 2, action: 'Update Traffic', created_at: Date.now() - 3600000 }, subscriptionId,
]; }: {
const mockTrafficLogs = [
{ id: 1, traffic: 104857600, created_at: Date.now() - 86400000 },
{ id: 2, traffic: 52428800, created_at: Date.now() - 3600000 },
];
const mockDevices = [
{ id: 1, ip: '192.168.1.1', last_seen_at: Date.now() - 300000 },
{ id: 2, ip: '192.168.1.2', last_seen_at: Date.now() - 600000 },
];
interface Props {
trigger: ReactNode; trigger: ReactNode;
subscriptionId: string; userId: number;
} subscriptionId: number;
}) {
export function SubscriptionDetail({ trigger }: Props) { const t = useTranslations('user');
const [open, setOpen] = useState(false); const [open, setOpen] = useState(false);
// 模拟下线设备的函数
const handleOfflineDevice = async (deviceId: number) => {
// TODO: 调用实际的API
console.log('下线设备:', deviceId);
toast.success('设备已下线');
};
return ( return (
<Dialog open={open} onOpenChange={setOpen}> <Dialog open={open} onOpenChange={setOpen}>
<DialogTrigger asChild>{trigger}</DialogTrigger> <DialogTrigger asChild>{trigger}</DialogTrigger>
<DialogContent className='max-w-5xl'> <DialogContent className='max-w-5xl'>
<DialogHeader> <DialogHeader>
<DialogTitle>Subscription Details</DialogTitle> <DialogTitle>{t('subscriptionDetails')}</DialogTitle>
</DialogHeader> </DialogHeader>
<div className='mt-4'> <div className='mt-4'>
<Tabs defaultValue='logs'> <Tabs defaultValue='logs'>
<TabsList className='w-full'> <TabsList className='w-full'>
<TabsTrigger value='logs' className='flex-1'> <TabsTrigger value='logs' className='flex-1'>
Subscription Logs {t('subscriptionLogs')}
</TabsTrigger> </TabsTrigger>
<TabsTrigger value='traffic' className='flex-1'> <TabsTrigger value='traffic' className='flex-1'>
Traffic Logs {t('trafficLogs')}
</TabsTrigger> </TabsTrigger>
<TabsTrigger value='devices' className='flex-1'> <TabsTrigger value='devices' className='flex-1'>
Online Devices {t('onlineDevices')}
</TabsTrigger> </TabsTrigger>
</TabsList> </TabsList>
<TabsContent value='logs'> <TabsContent value='logs'>
<ProTable <ProTable<API.UserSubscribeLog, Record<string, unknown>>
columns={[
{
accessorKey: 'action',
header: 'Action',
},
{
accessorKey: 'created_at',
header: 'Time',
cell: ({ row }) => formatDate(row.getValue('created_at')),
},
]}
request={async () => ({
list: mockLogs,
total: mockLogs.length,
})}
/>
</TabsContent>
<TabsContent value='traffic'>
<ProTable
columns={[
{
accessorKey: 'traffic',
header: 'Traffic',
cell: ({ row }) => <Display type='traffic' value={row.getValue('traffic')} />,
},
{
accessorKey: 'created_at',
header: 'Time',
cell: ({ row }) => formatDate(row.getValue('created_at')),
},
]}
request={async () => ({
list: mockTrafficLogs,
total: mockTrafficLogs.length,
})}
/>
</TabsContent>
<TabsContent value='devices'>
<ProTable
columns={[ columns={[
{ {
accessorKey: 'ip', accessorKey: 'ip',
header: 'IP', header: 'IP',
}, },
{ {
accessorKey: 'last_seen_at', accessorKey: 'user_agent',
header: 'Last Seen', header: 'User Agent',
cell: ({ row }) => formatDate(row.getValue('last_seen_at')), },
{
accessorKey: 'token',
header: 'Token',
},
{
accessorKey: 'created_at',
header: 'Time',
cell: ({ row }) => formatDate(row.getValue('created_at')),
}, },
]} ]}
request={async () => ({ request={async (pagination) => {
list: mockDevices, const { data } = await getUserSubscribeLogs({
total: mockDevices.length, user_id: userId,
})} subscribe_id: subscriptionId,
...pagination,
});
return {
list: data.data?.list || [],
total: data.data?.total || 0,
};
}}
/>
</TabsContent>
<TabsContent value='traffic'>
<ProTable<API.TrafficLog, Record<string, unknown>>
columns={[
{
accessorKey: 'download',
header: 'Download',
cell: ({ row }) => <Display type='traffic' value={row.getValue('download')} />,
},
{
accessorKey: 'upload',
header: 'Upload',
cell: ({ row }) => <Display type='traffic' value={row.getValue('upload')} />,
},
{
accessorKey: 'timestamp',
header: 'Time',
cell: ({ row }) => formatDate(row.getValue('timestamp')),
},
]}
request={async (pagination) => {
const { data } = await getUserSubscribeTrafficLogs({
user_id: userId,
subscribe_id: subscriptionId,
...pagination,
});
return {
list: data.data?.list || [],
total: data.data?.total || 0,
};
}}
/>
</TabsContent>
<TabsContent value='devices'>
<ProTable<API.UserDevice, Record<string, unknown>>
columns={[
{
accessorKey: 'enabled',
header: 'Enabled',
cell: ({ row }) => (
<Switch
checked={row.getValue('enabled')}
onChange={(checked) => {
console.log('Switch:', checked);
}}
/>
),
},
{
accessorKey: 'id',
header: 'ID',
},
{
accessorKey: 'imei',
header: 'IMEI',
},
{
accessorKey: 'user_agent',
header: 'User Agent',
},
{
accessorKey: 'ip',
header: 'IP',
},
{
accessorKey: 'online',
header: 'Online',
cell: ({ row }) => (
<Badge variant={row.getValue('online') ? 'default' : 'destructive'}>
{row.getValue('online') ? 'Online' : 'Offline'}
</Badge>
),
},
{
accessorKey: 'updated_at',
header: 'Last Seen',
cell: ({ row }) => formatDate(row.getValue('updated_at')),
},
]}
request={async (pagination) => {
const { data } = await getUserSubscribeDevices({
user_id: userId,
subscribe_id: subscriptionId,
...pagination,
});
return {
list: data.data?.list || [],
total: data.data?.total || 0,
};
}}
actions={{ actions={{
render: (row) => { render: (row) => {
if (!row.imei) return [];
return [ return [
<ConfirmButton <ConfirmButton
key='offline' key='offline'
trigger={ trigger={<Button variant='destructive'>{t('confirmOffline')}</Button>}
<Button variant='destructive' size='sm'> title={t('confirmOffline')}
线
</Button>
}
title='Confirm Offline'
description={`Are you sure to offline IP ${row.ip}?`} description={`Are you sure to offline IP ${row.ip}?`}
onConfirm={() => handleOfflineDevice(row.id)} onConfirm={async () => {
await kickOfflineByUserDevice({ id: row.id });
toast.success('已通知下线');
}}
cancelText='Cancel' cancelText='Cancel'
confirmText='Confirm' confirmText='Confirm'
/>, />,

View File

@ -1,5 +1,8 @@
'use client'; 'use client';
import { getSubscribeList } from '@/services/admin/subscribe';
import { zodResolver } from '@hookform/resolvers/zod';
import { useQuery } from '@tanstack/react-query';
import { Button } from '@workspace/ui/components/button'; import { Button } from '@workspace/ui/components/button';
import { import {
Form, Form,
@ -9,26 +12,42 @@ import {
FormLabel, FormLabel,
FormMessage, FormMessage,
} from '@workspace/ui/components/form'; } from '@workspace/ui/components/form';
import { Input } from '@workspace/ui/components/input'; import { ScrollArea } from '@workspace/ui/components/scroll-area';
import { import {
Sheet, Sheet,
SheetContent, SheetContent,
SheetFooter,
SheetHeader, SheetHeader,
SheetTitle, SheetTitle,
SheetTrigger, SheetTrigger,
} from '@workspace/ui/components/sheet'; } from '@workspace/ui/components/sheet';
import { Combobox } from '@workspace/ui/custom-components/combobox';
import { DatePicker } from '@workspace/ui/custom-components/date-picker';
import { EnhancedInput } from '@workspace/ui/custom-components/enhanced-input';
import { Icon } from '@workspace/ui/custom-components/icon';
import { unitConversion } from '@workspace/ui/utils';
import { useTranslations } from 'next-intl';
import { ReactNode, useState } from 'react'; import { ReactNode, useState } from 'react';
import { useForm } from 'react-hook-form'; import { useForm } from 'react-hook-form';
import { z } from 'zod';
interface Props { interface Props {
trigger: ReactNode; trigger: ReactNode;
title: string; title: string;
loading?: boolean; loading?: boolean;
userId: string; userId: number;
initialData?: API.Subscribe; initialData?: API.UserSubscribe;
onSubmit: (values: any) => Promise<boolean>; onSubmit: (values: any) => Promise<boolean>;
} }
const formSchema = z.object({
subscribe_id: z.number().optional(),
traffic: z.number().optional(),
speed_limit: z.number().optional(),
device_limit: z.number().optional(),
expired_at: z.number().nullish().optional(),
});
export function SubscriptionForm({ export function SubscriptionForm({
trigger, trigger,
title, title,
@ -37,14 +56,18 @@ export function SubscriptionForm({
initialData, initialData,
onSubmit, onSubmit,
}: Props) { }: Props) {
const t = useTranslations('user');
const [open, setOpen] = useState(false); const [open, setOpen] = useState(false);
const form = useForm({ const form = useForm({
resolver: zodResolver(formSchema),
defaultValues: { defaultValues: {
user_id: userId, user_id: userId,
name: initialData?.name || '', subscribe_id: initialData?.subscribe_id || 0,
traffic: initialData?.traffic || 0, traffic: initialData?.traffic || 0,
speed_limit: initialData?.speed_limit || 0, upload: initialData?.upload || 0,
device_limit: initialData?.device_limit || 0, download: initialData?.download || 0,
expired_at: initialData?.expire_time || 0,
...(initialData && { id: initialData.id }), ...(initialData && { id: initialData.id }),
}, },
}); });
@ -57,70 +80,169 @@ export function SubscriptionForm({
} }
}; };
const { data: subscribe } = useQuery({
queryKey: ['getSubscribeList', 'all'],
queryFn: async () => {
const { data } = await getSubscribeList({
page: 1,
size: 9999,
});
return data.data?.list as API.Subscribe[];
},
});
return ( return (
<Sheet open={open} onOpenChange={setOpen}> <Sheet open={open} onOpenChange={setOpen}>
<SheetTrigger asChild>{trigger}</SheetTrigger> <SheetTrigger asChild>
<Button
onClick={() => {
form.reset();
setOpen(true);
}}
>
{trigger}
</Button>
</SheetTrigger>
<SheetContent side='right'> <SheetContent side='right'>
<SheetHeader> <SheetHeader>
<SheetTitle>{title}</SheetTitle> <SheetTitle>{title}</SheetTitle>
</SheetHeader> </SheetHeader>
<Form {...form}> <ScrollArea className='h-[calc(100dvh-48px-36px-36px-env(safe-area-inset-top))]'>
<form onSubmit={form.handleSubmit(handleSubmit)} className='mt-4 space-y-4'> <Form {...form}>
<FormField <form onSubmit={form.handleSubmit(handleSubmit)} className='mt-4 space-y-4'>
control={form.control} <FormField
name='name' control={form.control}
render={({ field }) => ( name='subscribe_id'
<FormItem> render={({ field }) => (
<FormLabel>Name</FormLabel> <FormItem>
<FormControl> <FormLabel>{t('subscription')}</FormLabel>
<Input {...field} /> <FormControl>
</FormControl> <Combobox<number, false>
<FormMessage /> placeholder='Select Subscription'
</FormItem> value={field.value}
)} onChange={(value) => {
/> form.setValue(field.name, value);
<FormField }}
control={form.control} options={subscribe?.map((item: API.Subscribe) => ({
name='traffic' value: item.id,
render={({ field }) => ( label: item.name,
<FormItem> }))}
<FormLabel>Traffic (Bytes)</FormLabel> />
<FormControl> </FormControl>
<Input type='number' {...field} /> <FormMessage />
</FormControl> </FormItem>
<FormMessage /> )}
</FormItem> />
)} <FormField
/> control={form.control}
<FormField name='traffic'
control={form.control} render={({ field }) => (
name='speed_limit' <FormItem>
render={({ field }) => ( <FormLabel>{t('trafficLimit')}</FormLabel>
<FormItem> <FormControl>
<FormLabel>Speed Limit (Mbps)</FormLabel> <EnhancedInput
<FormControl> placeholder={t('unlimited')}
<Input type='number' {...field} /> type='number'
</FormControl> {...field}
<FormMessage /> formatInput={(value) => unitConversion('bytesToGb', value)}
</FormItem> formatOutput={(value) => unitConversion('gbToBytes', value)}
)} suffix='GB'
/> onValueChange={(value) => {
<FormField form.setValue(field.name, value as number);
control={form.control} }}
name='device_limit' />
render={({ field }) => ( </FormControl>
<FormItem> <FormMessage />
<FormLabel>Device Limit</FormLabel> </FormItem>
<FormControl> )}
<Input type='number' {...field} /> />
</FormControl> <FormField
<FormMessage /> control={form.control}
</FormItem> name='upload'
)} render={({ field }) => (
/> <FormItem>
<Button type='submit'>Submit</Button> <FormLabel>{t('uploadTraffic')}</FormLabel>
</form> <FormControl>
</Form> <EnhancedInput
placeholder='0'
type='number'
{...field}
formatInput={(value) => unitConversion('bytesToGb', value)}
formatOutput={(value) => unitConversion('gbToBytes', value)}
suffix='GB'
onValueChange={(value) => {
form.setValue(field.name, value as number);
}}
/>
</FormControl>
<FormMessage />
</FormItem>
)}
/>
<FormField
control={form.control}
name='download'
render={({ field }) => (
<FormItem>
<FormLabel>{t('downloadTraffic')}</FormLabel>
<FormControl>
<EnhancedInput
placeholder='0'
type='number'
{...field}
formatInput={(value) => unitConversion('bytesToGb', value)}
formatOutput={(value) => unitConversion('gbToBytes', value)}
suffix='GB'
onValueChange={(value) => {
form.setValue(field.name, value as number);
}}
/>
</FormControl>
<FormMessage />
</FormItem>
)}
/>
<FormField
control={form.control}
name='expired_at'
render={({ field }) => (
<FormItem>
<FormLabel>{t('expiredAt')}</FormLabel>
<FormControl>
<DatePicker
placeholder={t('permanent')}
value={field.value}
onChange={(value) => {
if (value === field.value) {
form.setValue(field.name, 0);
} else {
form.setValue(field.name, value!);
}
}}
/>
</FormControl>
<FormMessage />
</FormItem>
)}
/>
</form>
</Form>
</ScrollArea>
<SheetFooter className='flex-row justify-end gap-2 pt-3'>
<Button
variant='outline'
disabled={loading}
onClick={() => {
setOpen(false);
}}
>
{t('cancel')}
</Button>
<Button disabled={loading} onClick={form.handleSubmit(handleSubmit)}>
{loading && <Icon icon='mdi:loading' className='mr-2 animate-spin' />}
{t('confirm')}
</Button>
</SheetFooter>
</SheetContent> </SheetContent>
</Sheet> </Sheet>
); );

View File

@ -2,7 +2,7 @@
import { Display } from '@/components/display'; import { Display } from '@/components/display';
import { ProTable, ProTableActions } from '@/components/pro-table'; import { ProTable, ProTableActions } from '@/components/pro-table';
import { createUser, deleteUser, getUserList, updateUser } from '@/services/admin/user'; import { createUser, deleteUser, getUserList, updateUserBasicInfo } from '@/services/admin/user';
import { Badge } from '@workspace/ui/components/badge'; import { Badge } from '@workspace/ui/components/badge';
import { Button } from '@workspace/ui/components/button'; import { Button } from '@workspace/ui/components/button';
import { Switch } from '@workspace/ui/components/switch'; import { Switch } from '@workspace/ui/components/switch';
@ -58,10 +58,10 @@ export default function Page() {
<Switch <Switch
defaultChecked={row.getValue('enable')} defaultChecked={row.getValue('enable')}
onCheckedChange={async (checked) => { onCheckedChange={async (checked) => {
await updateUser({ await updateUserBasicInfo({
...row.original, ...row.original,
enable: checked, enable: checked,
} as unknown as API.UpdateUserRequest); } as unknown as API.UpdateUserBasiceInfoRequest);
toast.success(t('updateSuccess')); toast.success(t('updateSuccess'));
ref.current?.refresh(); ref.current?.refresh();
}} }}

View File

@ -45,6 +45,7 @@
"60002": "Toto předplatné nelze momentálně použít, zkuste to prosím později.", "60002": "Toto předplatné nelze momentálně použít, zkuste to prosím později.",
"60003": "Bylo zjištěno existující předplatné. Zrušte ho, než budete pokračovat.", "60003": "Bylo zjištěno existující předplatné. Zrušte ho, než budete pokračovat.",
"60004": "Nelze momentálně odstranit, protože předplatné má aktivní uživatele.", "60004": "Nelze momentálně odstranit, protože předplatné má aktivní uživatele.",
"60005": "Režim jednotného předplatného překročil limit uživatelů",
"70001": "Ověřovací kód je nesprávný, zadejte ho prosím znovu.", "70001": "Ověřovací kód je nesprávný, zadejte ho prosím znovu.",
"80001": "Úkol nebyl úspěšně přidán do fronty, zkuste to prosím později.", "80001": "Úkol nebyl úspěšně přidán do fronty, zkuste to prosím později.",
"90001": "Vypněte prosím režim DEBUG a zkuste to znovu.", "90001": "Vypněte prosím režim DEBUG a zkuste to znovu.",

View File

@ -1,31 +1,49 @@
{ {
"accountEnable": "Povolení účtu",
"actions": "akce", "actions": "akce",
"add": "Přidat",
"administrator": "Administrátor",
"areaCode": "Směrový kód", "areaCode": "Směrový kód",
"areaCodePlaceholder": "Kód oblasti", "areaCodePlaceholder": "Kód oblasti",
"auth": "Autentizace", "auth": "Autentizace",
"authIdentifier": "Identifikátor ověření", "authIdentifier": "Identifikátor ověření",
"authIdentifierPlaceholder": "Zadejte identifikátor ověření", "authIdentifierPlaceholder": "Zadejte identifikátor ověření",
"authMethodsTitle": "Nastavení ověřování",
"authType": "Typ ověření", "authType": "Typ ověření",
"authUser": "Autentizovaný uživatel", "authUser": "Autentizovaný uživatel",
"avatar": "Avatar",
"balance": "Zůstatek", "balance": "Zůstatek",
"balanceNotifications": "Oznámení o změně zůstatku",
"balancePlaceholder": "Zůstatek", "balancePlaceholder": "Zůstatek",
"basicInfoTitle": "Základní informace",
"cancel": "zrušit", "cancel": "zrušit",
"commission": "Provize", "commission": "Provize",
"commissionPlaceholder": "Zadejte provizi", "commissionPlaceholder": "Zadejte provizi",
"confirm": "Potvrdit", "confirm": "Potvrdit",
"confirmDelete": "Opravdu chcete smazat?", "confirmDelete": "Opravdu chcete smazat?",
"confirmOffline": "Potvrdit offline",
"create": "Vytvořit", "create": "Vytvořit",
"createSubscription": "Vytvořit předplatné",
"createSuccess": "Vytvoření úspěšné", "createSuccess": "Vytvoření úspěšné",
"createUser": "Vytvořit uživatele", "createUser": "Vytvořit uživatele",
"createdAt": "Datum registrace", "createdAt": "Datum registrace",
"delete": "smazat", "delete": "smazat",
"deleteDescription": "Po odstranění nelze data obnovit, prosím, postupujte opatrně.", "deleteDescription": "Po odstranění nelze data obnovit, prosím, postupujte opatrně.",
"deleteSubscriptionDescription": "Opravdu chcete smazat toto předplatné?",
"deleteSuccess": "Úspěšně odstraněno", "deleteSuccess": "Úspěšně odstraněno",
"detail": "Detail", "detail": "Detail",
"deviceLimit": "Limit zařízení",
"download": "Stáhnout",
"downloadTraffic": "Stáhnout provoz",
"edit": "Upravit", "edit": "Upravit",
"editSubscription": "Upravit předplatné",
"editUser": "Upravit uživatele", "editUser": "Upravit uživatele",
"email": "e-mail", "email": "e-mail",
"emailNotifications": "E-mailová oznámení",
"enable": "Povolit", "enable": "Povolit",
"expireTime": "Čas vypršení",
"expiredAt": "Platnost vypršela",
"failed": "Neúspěch",
"giftAmount": "Částka dárku", "giftAmount": "Částka dárku",
"giftAmountPlaceholder": "Zadejte částku dárku", "giftAmountPlaceholder": "Zadejte částku dárku",
"invalidEmailFormat": "Neplatný formát e-mailu", "invalidEmailFormat": "Neplatný formát e-mailu",
@ -33,18 +51,47 @@
"inviteCodePlaceholder": "Zadejte kód pozvánky (ponechte prázdné pro vygenerování)", "inviteCodePlaceholder": "Zadejte kód pozvánky (ponechte prázdné pro vygenerování)",
"loading": "Načítání...", "loading": "Načítání...",
"loginIp": "Přihlašovací IP", "loginIp": "Přihlašovací IP",
"loginNotifications": "Oznámení o přihlášení",
"loginStatus": "Stav přihlášení",
"loginTime": "Čas přihlášení", "loginTime": "Čas přihlášení",
"manager": "Manažer", "manager": "Manažer",
"notifySettingsTitle": "Nastavení oznámení",
"onlineDevices": "Online zařízení",
"password": "Heslo", "password": "Heslo",
"passwordPlaceholder": "Zadejte nové heslo (volitelné)", "passwordPlaceholder": "Zadejte nové heslo (volitelné)",
"permanent": "Trvalý",
"pleaseEnterEmail": "Prosím, zadejte e-mail",
"referer": "Doporučitel", "referer": "Doporučitel",
"refererId": "ID doporučitele", "refererId": "ID doporučitele",
"refererIdPlaceholder": "Zadejte ID doporučitele", "refererIdPlaceholder": "Zadejte ID doporučitele",
"referralCode": "Doporučovací kód",
"referrerUserId": "Odesílatel (uživatelské ID)",
"remove": "Odstranit",
"resetTime": "Obnovit čas",
"save": "Uložit",
"searchIp": "Vyhledat IP adresu", "searchIp": "Vyhledat IP adresu",
"selectAuthType": "Vyberte typ ověření", "selectAuthType": "Vyberte typ ověření",
"speedLimit": "Rychlostní limit",
"subscription": "Předplatné",
"subscriptionDetails": "Podrobnosti o předplatném",
"subscriptionList": "Seznam předplatných",
"subscriptionLogs": "Záznamy o předplatném",
"subscriptionName": "Název předplatného",
"subscriptionNotifications": "Oznámení o předplatném",
"success": "Úspěch",
"telegramNotifications": "Telegram oznámení",
"telephone": "Telefonní číslo", "telephone": "Telefonní číslo",
"telephonePlaceholder": "Zadejte telefonní číslo", "telephonePlaceholder": "Zadejte telefonní číslo",
"totalTraffic": "Celkový provoz",
"tradeNotifications": "Obchodní oznámení",
"trafficLimit": "Limit provozu",
"trafficLogs": "Protokoly provozu",
"unlimited": "Neomezený",
"unverified": "Neověřeno",
"update": "Aktualizovat",
"updateSuccess": "Aktualizace byla úspěšná", "updateSuccess": "Aktualizace byla úspěšná",
"upload": "Nahrát",
"uploadTraffic": "Nahrát provoz",
"userAgent": "Uživatelský agent", "userAgent": "Uživatelský agent",
"userEmail": "Uživatelský e-mail", "userEmail": "Uživatelský e-mail",
"userEmailPlaceholder": "Zadejte e-mail uživatele", "userEmailPlaceholder": "Zadejte e-mail uživatele",

View File

@ -45,6 +45,7 @@
"60002": "Das Abonnement kann derzeit nicht verwendet werden, bitte versuchen Sie es später erneut.", "60002": "Das Abonnement kann derzeit nicht verwendet werden, bitte versuchen Sie es später erneut.",
"60003": "Ein bestehendes Abonnement wurde erkannt. Bitte kündigen Sie es, bevor Sie fortfahren.", "60003": "Ein bestehendes Abonnement wurde erkannt. Bitte kündigen Sie es, bevor Sie fortfahren.",
"60004": "Kann derzeit nicht gelöscht werden, da das Abonnement aktive Benutzer hat.", "60004": "Kann derzeit nicht gelöscht werden, da das Abonnement aktive Benutzer hat.",
"60005": "Im Single-Abo-Modus wurde das Benutzerlimit überschritten",
"70001": "Der Bestätigungscode ist falsch, bitte erneut eingeben.", "70001": "Der Bestätigungscode ist falsch, bitte erneut eingeben.",
"80001": "Die Aufgabe wurde nicht erfolgreich in die Warteschlange aufgenommen, bitte versuchen Sie es später erneut.", "80001": "Die Aufgabe wurde nicht erfolgreich in die Warteschlange aufgenommen, bitte versuchen Sie es später erneut.",
"90001": "Bitte deaktivieren Sie den DEBUG-Modus und versuchen Sie es erneut.", "90001": "Bitte deaktivieren Sie den DEBUG-Modus und versuchen Sie es erneut.",

View File

@ -1,31 +1,49 @@
{ {
"accountEnable": "Konto aktivieren",
"actions": "Aktionen", "actions": "Aktionen",
"add": "Hinzufügen",
"administrator": "Administrator",
"areaCode": "Vorwahl", "areaCode": "Vorwahl",
"areaCodePlaceholder": "Vorwahl", "areaCodePlaceholder": "Vorwahl",
"auth": "Authentifizierung", "auth": "Authentifizierung",
"authIdentifier": "Authentifizierungskennung", "authIdentifier": "Authentifizierungskennung",
"authIdentifierPlaceholder": "Geben Sie die Authentifizierungskennung ein", "authIdentifierPlaceholder": "Geben Sie die Authentifizierungskennung ein",
"authMethodsTitle": "Authentifizierungseinstellungen",
"authType": "Authentifizierungstyp", "authType": "Authentifizierungstyp",
"authUser": "Authentifizierter Benutzer", "authUser": "Authentifizierter Benutzer",
"avatar": "Avatar",
"balance": "Kontostand", "balance": "Kontostand",
"balanceNotifications": "Benachrichtigungen über Kontostandsänderungen",
"balancePlaceholder": "Kontostand", "balancePlaceholder": "Kontostand",
"basicInfoTitle": "Grundinformationen",
"cancel": "Abbrechen", "cancel": "Abbrechen",
"commission": "Provision", "commission": "Provision",
"commissionPlaceholder": "Provision eingeben", "commissionPlaceholder": "Provision eingeben",
"confirm": "Bestätigen", "confirm": "Bestätigen",
"confirmDelete": "Sind Sie sicher, dass Sie löschen möchten?", "confirmDelete": "Sind Sie sicher, dass Sie löschen möchten?",
"confirmOffline": "Offline bestätigen",
"create": "Erstellen", "create": "Erstellen",
"createSubscription": "Abonnement erstellen",
"createSuccess": "Erstellung erfolgreich", "createSuccess": "Erstellung erfolgreich",
"createUser": "Benutzer erstellen", "createUser": "Benutzer erstellen",
"createdAt": "Registrierungsdatum", "createdAt": "Registrierungsdatum",
"delete": "Löschen", "delete": "Löschen",
"deleteDescription": "Nach dem Löschen können die Daten nicht wiederhergestellt werden. Bitte gehen Sie vorsichtig vor.", "deleteDescription": "Nach dem Löschen können die Daten nicht wiederhergestellt werden. Bitte gehen Sie vorsichtig vor.",
"deleteSubscriptionDescription": "Sind Sie sicher, dass Sie dieses Abonnement löschen möchten?",
"deleteSuccess": "Erfolgreich gelöscht", "deleteSuccess": "Erfolgreich gelöscht",
"detail": "Detail", "detail": "Detail",
"deviceLimit": "Gerätelimit",
"download": "Herunterladen",
"downloadTraffic": "Download-Verkehr",
"edit": "Bearbeiten", "edit": "Bearbeiten",
"editSubscription": "Abonnement bearbeiten",
"editUser": "Benutzer bearbeiten", "editUser": "Benutzer bearbeiten",
"email": "E-Mail", "email": "E-Mail",
"emailNotifications": "E-Mail-Benachrichtigungen",
"enable": "Aktivieren", "enable": "Aktivieren",
"expireTime": "Ablaufzeit",
"expiredAt": "Abgelaufen am",
"failed": "Fehlgeschlagen",
"giftAmount": "Geschenkbetrag", "giftAmount": "Geschenkbetrag",
"giftAmountPlaceholder": "Geben Sie den Geschenkbetrag ein", "giftAmountPlaceholder": "Geben Sie den Geschenkbetrag ein",
"invalidEmailFormat": "Ungültiges E-Mail-Format", "invalidEmailFormat": "Ungültiges E-Mail-Format",
@ -33,18 +51,47 @@
"inviteCodePlaceholder": "Einladungscode eingeben (leer lassen, um zu generieren)", "inviteCodePlaceholder": "Einladungscode eingeben (leer lassen, um zu generieren)",
"loading": "Laden...", "loading": "Laden...",
"loginIp": "Login-IP", "loginIp": "Login-IP",
"loginNotifications": "Anmeldebenachrichtigungen",
"loginStatus": "Anmeldestatus",
"loginTime": "Anmeldezeit", "loginTime": "Anmeldezeit",
"manager": "Manager", "manager": "Manager",
"notifySettingsTitle": "Benachrichtigungseinstellungen",
"onlineDevices": "Online-Geräte",
"password": "Passwort", "password": "Passwort",
"passwordPlaceholder": "Neues Passwort eingeben (optional)", "passwordPlaceholder": "Neues Passwort eingeben (optional)",
"permanent": "Dauerhaft",
"pleaseEnterEmail": "Bitte E-Mail eingeben",
"referer": "Empfehler", "referer": "Empfehler",
"refererId": "Referenz-ID", "refererId": "Referenz-ID",
"refererIdPlaceholder": "Geben Sie die Referenz-ID ein", "refererIdPlaceholder": "Geben Sie die Referenz-ID ein",
"referralCode": "Empfehlungscode",
"referrerUserId": "Empfehler (Benutzer-ID)",
"remove": "Entfernen",
"resetTime": "Zeit zurücksetzen",
"save": "Speichern",
"searchIp": "IP-Adresse suchen", "searchIp": "IP-Adresse suchen",
"selectAuthType": "Authentifizierungstyp auswählen", "selectAuthType": "Authentifizierungstyp auswählen",
"speedLimit": "Geschwindigkeitsbegrenzung",
"subscription": "Abonnement",
"subscriptionDetails": "Abonnementdetails",
"subscriptionList": "Abonnementsliste",
"subscriptionLogs": "Abonnementprotokolle",
"subscriptionName": "Abonnementname",
"subscriptionNotifications": "Abonnement-Benachrichtigungen",
"success": "Erfolg",
"telegramNotifications": "Telegram-Benachrichtigungen",
"telephone": "Telefonnummer", "telephone": "Telefonnummer",
"telephonePlaceholder": "Telefonnummer eingeben", "telephonePlaceholder": "Telefonnummer eingeben",
"totalTraffic": "Gesamtverkehr",
"tradeNotifications": "Handelsbenachrichtigungen",
"trafficLimit": "Verkehrslimit",
"trafficLogs": "Verkehrsprotokolle",
"unlimited": "Unbegrenzt",
"unverified": "Unbestätigt",
"update": "Aktualisieren",
"updateSuccess": "Aktualisierung erfolgreich", "updateSuccess": "Aktualisierung erfolgreich",
"upload": "Hochladen",
"uploadTraffic": "Datenverkehr hochladen",
"userAgent": "Benutzeragent", "userAgent": "Benutzeragent",
"userEmail": "Benutzer-E-Mail", "userEmail": "Benutzer-E-Mail",
"userEmailPlaceholder": "Benutzer-E-Mail eingeben", "userEmailPlaceholder": "Benutzer-E-Mail eingeben",

View File

@ -45,6 +45,7 @@
"60002": "Unable to use the subscription at the moment, please try again later.", "60002": "Unable to use the subscription at the moment, please try again later.",
"60003": "An existing subscription is detected. Please cancel it before proceeding.", "60003": "An existing subscription is detected. Please cancel it before proceeding.",
"60004": "Unable to delete at the moment as the subscription has active users.", "60004": "Unable to delete at the moment as the subscription has active users.",
"60005": "Single subscription mode has exceeded user limit",
"70001": "Incorrect verification code, please re-enter.", "70001": "Incorrect verification code, please re-enter.",
"80001": "Task was not successfully queued, please try again later.", "80001": "Task was not successfully queued, please try again later.",
"90001": "Please disable DEBUG mode and try again.", "90001": "Please disable DEBUG mode and try again.",

View File

@ -1,31 +1,49 @@
{ {
"accountEnable": "Account Enable",
"actions": "Actions", "actions": "Actions",
"add": "Add",
"administrator": "Administrator",
"areaCode": "Area Code", "areaCode": "Area Code",
"areaCodePlaceholder": "Area code", "areaCodePlaceholder": "Area code",
"auth": "Auth", "auth": "Auth",
"authIdentifier": "Auth Identifier", "authIdentifier": "Auth Identifier",
"authIdentifierPlaceholder": "Enter auth identifier", "authIdentifierPlaceholder": "Enter auth identifier",
"authMethodsTitle": "Authentication Settings",
"authType": "Auth Type", "authType": "Auth Type",
"authUser": "Auth User", "authUser": "Auth User",
"avatar": "Avatar",
"balance": "Balance", "balance": "Balance",
"balanceNotifications": "Balance Change Notifications",
"balancePlaceholder": "Balance", "balancePlaceholder": "Balance",
"basicInfoTitle": "Basic Information",
"cancel": "Cancel", "cancel": "Cancel",
"commission": "Commission", "commission": "Commission",
"commissionPlaceholder": "Enter commission", "commissionPlaceholder": "Enter commission",
"confirm": "Confirm", "confirm": "Confirm",
"confirmDelete": "Are you sure you want to delete?", "confirmDelete": "Confirm Delete",
"confirmOffline": "Confirm Offline",
"create": "Create", "create": "Create",
"createSubscription": "Create Subscription",
"createSuccess": "Create successful", "createSuccess": "Create successful",
"createUser": "Create User", "createUser": "Create User",
"createdAt": "Created At", "createdAt": "Created At",
"delete": "Delete", "delete": "Delete",
"deleteDescription": "Data cannot be recovered after deletion, please proceed with caution.", "deleteDescription": "Data cannot be recovered after deletion, please proceed with caution.",
"deleteSubscriptionDescription": "Are you sure to delete this subscription?",
"deleteSuccess": "Delete successful", "deleteSuccess": "Delete successful",
"detail": "Detail", "detail": "Detail",
"deviceLimit": "Device Limit",
"download": "Download",
"downloadTraffic": "Download Traffic",
"edit": "Edit", "edit": "Edit",
"editSubscription": "Edit Subscription",
"editUser": "Edit User", "editUser": "Edit User",
"email": "Email", "email": "Email",
"emailNotifications": "Email Notifications",
"enable": "Enable", "enable": "Enable",
"expireTime": "Expire Time",
"expiredAt": "Expired At",
"failed": "Failed",
"giftAmount": "Gift Amount", "giftAmount": "Gift Amount",
"giftAmountPlaceholder": "Enter gift amount", "giftAmountPlaceholder": "Enter gift amount",
"invalidEmailFormat": "Invalid email format", "invalidEmailFormat": "Invalid email format",
@ -33,18 +51,47 @@
"inviteCodePlaceholder": "Enter invite code (leave blank to generate)", "inviteCodePlaceholder": "Enter invite code (leave blank to generate)",
"loading": "Loading...", "loading": "Loading...",
"loginIp": "Login IP", "loginIp": "Login IP",
"loginNotifications": "Login Notifications",
"loginStatus": "Login Status",
"loginTime": "Login Time", "loginTime": "Login Time",
"manager": "Manager", "manager": "Manager",
"notifySettingsTitle": "Notification Settings",
"onlineDevices": "Online Devices",
"password": "Password", "password": "Password",
"passwordPlaceholder": "Enter new password (optional)", "passwordPlaceholder": "Enter new password (optional)",
"permanent": "Permanent",
"pleaseEnterEmail": "Please enter email",
"referer": "Referer", "referer": "Referer",
"refererId": "Referer ID", "refererId": "Referer ID",
"refererIdPlaceholder": "Enter referer ID", "refererIdPlaceholder": "Enter referer ID",
"referralCode": "Referral Code",
"referrerUserId": "Referrer (User ID)",
"remove": "Remove",
"resetTime": "Reset Time",
"save": "Save",
"searchIp": "Search IP address", "searchIp": "Search IP address",
"selectAuthType": "Select auth type", "selectAuthType": "Select auth type",
"speedLimit": "Speed Limit",
"subscription": "Subscription",
"subscriptionDetails": "Subscription Details",
"subscriptionList": "Subscription List",
"subscriptionLogs": "Subscription Logs",
"subscriptionName": "Subscription Name",
"subscriptionNotifications": "Subscription Notifications",
"success": "Success",
"telegramNotifications": "Telegram Notifications",
"telephone": "Phone Number", "telephone": "Phone Number",
"telephonePlaceholder": "Enter phone number", "telephonePlaceholder": "Enter phone number",
"totalTraffic": "Total Traffic",
"tradeNotifications": "Trade Notifications",
"trafficLimit": "Traffic Limit",
"trafficLogs": "Traffic Logs",
"unlimited": "Unlimited",
"unverified": "Unverified",
"update": "Update",
"updateSuccess": "Update successful", "updateSuccess": "Update successful",
"upload": "Upload",
"uploadTraffic": "Upload Traffic",
"userAgent": "User Agent", "userAgent": "User Agent",
"userEmail": "User Email", "userEmail": "User Email",
"userEmailPlaceholder": "Enter user email", "userEmailPlaceholder": "Enter user email",

View File

@ -45,6 +45,7 @@
"60002": "No se puede usar la suscripción por el momento, por favor intente más tarde.", "60002": "No se puede usar la suscripción por el momento, por favor intente más tarde.",
"60003": "Se ha detectado una suscripción existente. Por favor, cancélala antes de continuar.", "60003": "Se ha detectado una suscripción existente. Por favor, cancélala antes de continuar.",
"60004": "No se puede eliminar en este momento ya que la suscripción tiene usuarios activos.", "60004": "No se puede eliminar en este momento ya que la suscripción tiene usuarios activos.",
"60005": "El modo de suscripción única ha superado el límite de usuarios",
"70001": "El código de verificación es incorrecto, por favor ingréselo nuevamente.", "70001": "El código de verificación es incorrecto, por favor ingréselo nuevamente.",
"80001": "La tarea no se agregó exitosamente a la cola, por favor intente de nuevo más tarde.", "80001": "La tarea no se agregó exitosamente a la cola, por favor intente de nuevo más tarde.",
"90001": "Por favor desactive el modo DEBUG e intente nuevamente.", "90001": "Por favor desactive el modo DEBUG e intente nuevamente.",

View File

@ -1,31 +1,49 @@
{ {
"accountEnable": "Habilitar cuenta",
"actions": "acciones", "actions": "acciones",
"add": "Agregar",
"administrator": "Administrador",
"areaCode": "Código de Área", "areaCode": "Código de Área",
"areaCodePlaceholder": "Código de área", "areaCodePlaceholder": "Código de área",
"auth": "Autenticación", "auth": "Autenticación",
"authIdentifier": "Identificador de Autenticación", "authIdentifier": "Identificador de Autenticación",
"authIdentifierPlaceholder": "Ingrese el identificador de autenticación", "authIdentifierPlaceholder": "Ingrese el identificador de autenticación",
"authMethodsTitle": "Configuración de Autenticación",
"authType": "Tipo de Autenticación", "authType": "Tipo de Autenticación",
"authUser": "Usuario Autenticado", "authUser": "Usuario Autenticado",
"avatar": "Avatar",
"balance": "Saldo", "balance": "Saldo",
"balanceNotifications": "Notificaciones de Cambio de Saldo",
"balancePlaceholder": "Saldo", "balancePlaceholder": "Saldo",
"basicInfoTitle": "Información Básica",
"cancel": "Cancelar", "cancel": "Cancelar",
"commission": "Comisión", "commission": "Comisión",
"commissionPlaceholder": "Ingrese comisión", "commissionPlaceholder": "Ingrese comisión",
"confirm": "Confirmar", "confirm": "Confirmar",
"confirmDelete": "¿Está seguro de que desea eliminar?", "confirmDelete": "¿Está seguro de que desea eliminar?",
"confirmOffline": "Confirmar sin conexión",
"create": "Crear", "create": "Crear",
"createSubscription": "Crear suscripción",
"createSuccess": "Creación exitosa", "createSuccess": "Creación exitosa",
"createUser": "Crear usuario", "createUser": "Crear usuario",
"createdAt": "Fecha de registro", "createdAt": "Fecha de registro",
"delete": "eliminar", "delete": "eliminar",
"deleteDescription": "Después de eliminar, los datos no se podrán recuperar. Proceda con precaución.", "deleteDescription": "Después de eliminar, los datos no se podrán recuperar. Proceda con precaución.",
"deleteSubscriptionDescription": "¿Está seguro de que desea eliminar esta suscripción?",
"deleteSuccess": "Eliminación exitosa", "deleteSuccess": "Eliminación exitosa",
"detail": "Detalle", "detail": "Detalle",
"deviceLimit": "Límite de Dispositivos",
"download": "Descargar",
"downloadTraffic": "Descargar Tráfico",
"edit": "editar", "edit": "editar",
"editSubscription": "Editar suscripción",
"editUser": "Editar usuario", "editUser": "Editar usuario",
"email": "correo electrónico", "email": "correo electrónico",
"emailNotifications": "Notificaciones por correo electrónico",
"enable": "Habilitar", "enable": "Habilitar",
"expireTime": "Tiempo de Expiración",
"expiredAt": "Fecha de vencimiento",
"failed": "Fallido",
"giftAmount": "Monto del Regalo", "giftAmount": "Monto del Regalo",
"giftAmountPlaceholder": "Ingrese el monto del regalo", "giftAmountPlaceholder": "Ingrese el monto del regalo",
"invalidEmailFormat": "Formato de correo electrónico no válido", "invalidEmailFormat": "Formato de correo electrónico no válido",
@ -33,18 +51,47 @@
"inviteCodePlaceholder": "Introduce el código de invitación (déjalo en blanco para generar uno)", "inviteCodePlaceholder": "Introduce el código de invitación (déjalo en blanco para generar uno)",
"loading": "Cargando...", "loading": "Cargando...",
"loginIp": "IP de inicio de sesión", "loginIp": "IP de inicio de sesión",
"loginNotifications": "Notificaciones de inicio de sesión",
"loginStatus": "Estado de inicio de sesión",
"loginTime": "Hora de inicio de sesión", "loginTime": "Hora de inicio de sesión",
"manager": "Gerente", "manager": "Gerente",
"notifySettingsTitle": "Configuración de Notificaciones",
"onlineDevices": "Dispositivos en línea",
"password": "Contraseña", "password": "Contraseña",
"passwordPlaceholder": "Ingrese nueva contraseña (opcional)", "passwordPlaceholder": "Ingrese nueva contraseña (opcional)",
"permanent": "Permanente",
"pleaseEnterEmail": "Por favor, introduce el correo electrónico",
"referer": "Recomendador", "referer": "Recomendador",
"refererId": "ID del Referente", "refererId": "ID del Referente",
"refererIdPlaceholder": "Ingrese el ID del referente", "refererIdPlaceholder": "Ingrese el ID del referente",
"referralCode": "Código de Referencia",
"referrerUserId": "Referente (ID de usuario)",
"remove": "Eliminar",
"resetTime": "Restablecer Tiempo",
"save": "Guardar",
"searchIp": "Buscar dirección IP", "searchIp": "Buscar dirección IP",
"selectAuthType": "Seleccionar tipo de autenticación", "selectAuthType": "Seleccionar tipo de autenticación",
"speedLimit": "Límite de Velocidad",
"subscription": "Suscripción",
"subscriptionDetails": "Detalles de la suscripción",
"subscriptionList": "Lista de Suscripción",
"subscriptionLogs": "Registros de Suscripción",
"subscriptionName": "Nombre de la Suscripción",
"subscriptionNotifications": "Notificaciones de suscripción",
"success": "Éxito",
"telegramNotifications": "Notificaciones de Telegram",
"telephone": "Número de Teléfono", "telephone": "Número de Teléfono",
"telephonePlaceholder": "Ingrese número de teléfono", "telephonePlaceholder": "Ingrese número de teléfono",
"totalTraffic": "Tráfico Total",
"tradeNotifications": "Notificaciones de Comercio",
"trafficLimit": "Límite de Tráfico",
"trafficLogs": "Registros de Tráfico",
"unlimited": "Ilimitado",
"unverified": "No verificado",
"update": "Actualizar",
"updateSuccess": "Actualización exitosa", "updateSuccess": "Actualización exitosa",
"upload": "Subir",
"uploadTraffic": "Subir Tráfico",
"userAgent": "Agente de Usuario", "userAgent": "Agente de Usuario",
"userEmail": "Correo Electrónico del Usuario", "userEmail": "Correo Electrónico del Usuario",
"userEmailPlaceholder": "Introduce el correo electrónico del usuario", "userEmailPlaceholder": "Introduce el correo electrónico del usuario",

View File

@ -45,6 +45,7 @@
"60002": "No se puede usar la suscripción por el momento, por favor intenta más tarde.", "60002": "No se puede usar la suscripción por el momento, por favor intenta más tarde.",
"60003": "Se ha detectado una suscripción existente. Por favor, cancélala antes de continuar.", "60003": "Se ha detectado una suscripción existente. Por favor, cancélala antes de continuar.",
"60004": "No se puede eliminar en este momento ya que la suscripción tiene usuarios activos.", "60004": "No se puede eliminar en este momento ya que la suscripción tiene usuarios activos.",
"60005": "El modo de suscripción única ha excedido el límite de usuarios",
"70001": "El código de verificación es incorrecto, por favor ingrésalo de nuevo.", "70001": "El código de verificación es incorrecto, por favor ingrésalo de nuevo.",
"80001": "La tarea no se agregó exitosamente a la cola, por favor intenta de nuevo más tarde.", "80001": "La tarea no se agregó exitosamente a la cola, por favor intenta de nuevo más tarde.",
"90001": "Por favor desactiva el modo DEBUG e intenta de nuevo.", "90001": "Por favor desactiva el modo DEBUG e intenta de nuevo.",

View File

@ -1,31 +1,49 @@
{ {
"accountEnable": "Habilitar Cuenta",
"actions": "acciones", "actions": "acciones",
"add": "Agregar",
"administrator": "Administrador",
"areaCode": "Código de Área", "areaCode": "Código de Área",
"areaCodePlaceholder": "Código de área", "areaCodePlaceholder": "Código de área",
"auth": "Autenticación", "auth": "Autenticación",
"authIdentifier": "Identificador de Autenticación", "authIdentifier": "Identificador de Autenticación",
"authIdentifierPlaceholder": "Ingrese identificador de autenticación", "authIdentifierPlaceholder": "Ingrese identificador de autenticación",
"authMethodsTitle": "Configuración de Autenticación",
"authType": "Tipo de Autenticación", "authType": "Tipo de Autenticación",
"authUser": "Usuario Autenticado", "authUser": "Usuario Autenticado",
"avatar": "Avatar",
"balance": "Saldo", "balance": "Saldo",
"balanceNotifications": "Notificaciones de Cambio de Saldo",
"balancePlaceholder": "Saldo", "balancePlaceholder": "Saldo",
"basicInfoTitle": "Información Básica",
"cancel": "Cancelar", "cancel": "Cancelar",
"commission": "Comisión", "commission": "Comisión",
"commissionPlaceholder": "Ingrese comisión", "commissionPlaceholder": "Ingrese comisión",
"confirm": "Confirmar", "confirm": "Confirmar",
"confirmDelete": "¿Está seguro de que desea eliminar?", "confirmDelete": "¿Está seguro de que desea eliminar?",
"confirmOffline": "Confirmar sin conexión",
"create": "Crear", "create": "Crear",
"createSubscription": "Crear Suscripción",
"createSuccess": "Creación exitosa", "createSuccess": "Creación exitosa",
"createUser": "Crear usuario", "createUser": "Crear usuario",
"createdAt": "Fecha de registro", "createdAt": "Fecha de registro",
"delete": "Eliminar", "delete": "Eliminar",
"deleteDescription": "Después de eliminar, los datos no se pueden recuperar. Proceda con precaución.", "deleteDescription": "Después de eliminar, los datos no se pueden recuperar. Proceda con precaución.",
"deleteSubscriptionDescription": "¿Está seguro de que desea eliminar esta suscripción?",
"deleteSuccess": "Eliminación exitosa", "deleteSuccess": "Eliminación exitosa",
"detail": "Detalle", "detail": "Detalle",
"deviceLimit": "Límite de Dispositivos",
"download": "Descargar",
"downloadTraffic": "Descargar Tráfico",
"edit": "editar", "edit": "editar",
"editSubscription": "Editar Suscripción",
"editUser": "Editar usuario", "editUser": "Editar usuario",
"email": "correo electrónico", "email": "correo electrónico",
"emailNotifications": "Notificaciones por Correo Electrónico",
"enable": "Habilitar", "enable": "Habilitar",
"expireTime": "Tiempo de Expiración",
"expiredAt": "Fecha de vencimiento",
"failed": "Fallido",
"giftAmount": "Monto del Regalo", "giftAmount": "Monto del Regalo",
"giftAmountPlaceholder": "Ingrese el monto del regalo", "giftAmountPlaceholder": "Ingrese el monto del regalo",
"invalidEmailFormat": "Formato de correo electrónico no válido", "invalidEmailFormat": "Formato de correo electrónico no válido",
@ -33,18 +51,47 @@
"inviteCodePlaceholder": "Ingresa el código de invitación (déjalo en blanco para generar uno)", "inviteCodePlaceholder": "Ingresa el código de invitación (déjalo en blanco para generar uno)",
"loading": "Cargando...", "loading": "Cargando...",
"loginIp": "IP de inicio de sesión", "loginIp": "IP de inicio de sesión",
"loginNotifications": "Notificaciones de inicio de sesión",
"loginStatus": "Estado de Inicio de Sesión",
"loginTime": "Hora de Inicio de Sesión", "loginTime": "Hora de Inicio de Sesión",
"manager": "Gerente", "manager": "Gerente",
"notifySettingsTitle": "Configuración de Notificaciones",
"onlineDevices": "Dispositivos en línea",
"password": "Contraseña", "password": "Contraseña",
"passwordPlaceholder": "Ingresa nueva contraseña (opcional)", "passwordPlaceholder": "Ingresa nueva contraseña (opcional)",
"permanent": "Permanente",
"pleaseEnterEmail": "Por favor, ingresa el correo electrónico",
"referer": "Recomendador", "referer": "Recomendador",
"refererId": "ID del Referente", "refererId": "ID del Referente",
"refererIdPlaceholder": "Ingrese ID del referente", "refererIdPlaceholder": "Ingrese ID del referente",
"referralCode": "Código de Referencia",
"referrerUserId": "Referente (ID de Usuario)",
"remove": "Eliminar",
"resetTime": "Restablecer Tiempo",
"save": "Guardar",
"searchIp": "Buscar dirección IP", "searchIp": "Buscar dirección IP",
"selectAuthType": "Seleccionar tipo de autenticación", "selectAuthType": "Seleccionar tipo de autenticación",
"speedLimit": "Límite de Velocidad",
"subscription": "Suscripción",
"subscriptionDetails": "Detalles de la Suscripción",
"subscriptionList": "Lista de Suscripción",
"subscriptionLogs": "Registros de Suscripción",
"subscriptionName": "Nombre de la Suscripción",
"subscriptionNotifications": "Notificaciones de Suscripción",
"success": "Éxito",
"telegramNotifications": "Notificaciones de Telegram",
"telephone": "Número de Teléfono", "telephone": "Número de Teléfono",
"telephonePlaceholder": "Ingrese número de teléfono", "telephonePlaceholder": "Ingrese número de teléfono",
"totalTraffic": "Tráfico Total",
"tradeNotifications": "Notificaciones de Comercio",
"trafficLimit": "Límite de Tráfico",
"trafficLogs": "Registros de Tráfico",
"unlimited": "Ilimitado",
"unverified": "No verificado",
"update": "Actualizar",
"updateSuccess": "Actualización exitosa", "updateSuccess": "Actualización exitosa",
"upload": "Subir",
"uploadTraffic": "Subir Tráfico",
"userAgent": "Agente de Usuario", "userAgent": "Agente de Usuario",
"userEmail": "Correo Electrónico del Usuario", "userEmail": "Correo Electrónico del Usuario",
"userEmailPlaceholder": "Ingresa el correo electrónico del usuario", "userEmailPlaceholder": "Ingresa el correo electrónico del usuario",

View File

@ -45,6 +45,7 @@
"60002": "در حال حاضر نمی‌توان از اشتراک استفاده کرد، لطفاً بعداً دوباره تلاش کنید.", "60002": "در حال حاضر نمی‌توان از اشتراک استفاده کرد، لطفاً بعداً دوباره تلاش کنید.",
"60003": "یک اشتراک موجود شناسایی شد. لطفاً قبل از ادامه آن را لغو کنید.", "60003": "یک اشتراک موجود شناسایی شد. لطفاً قبل از ادامه آن را لغو کنید.",
"60004": "در حال حاضر امکان حذف وجود ندارد زیرا اشتراک دارای کاربران فعال است.", "60004": "در حال حاضر امکان حذف وجود ندارد زیرا اشتراک دارای کاربران فعال است.",
"60005": "حالت اشتراک تک از حد مجاز کاربران عبور کرده است",
"70001": "کد تأیید نادرست است، لطفاً دوباره وارد کنید.", "70001": "کد تأیید نادرست است، لطفاً دوباره وارد کنید.",
"80001": "وظیفه به‌طور موفقیت‌آمیز در صف قرار نگرفت، لطفاً بعداً دوباره تلاش کنید.", "80001": "وظیفه به‌طور موفقیت‌آمیز در صف قرار نگرفت، لطفاً بعداً دوباره تلاش کنید.",
"90001": "لطفاً حالت DEBUG را غیرفعال کرده و دوباره تلاش کنید.", "90001": "لطفاً حالت DEBUG را غیرفعال کرده و دوباره تلاش کنید.",

View File

@ -1,31 +1,49 @@
{ {
"accountEnable": "فعال‌سازی حساب",
"actions": "اقدامات", "actions": "اقدامات",
"add": "افزودن",
"administrator": "مدیر",
"areaCode": "کد منطقه", "areaCode": "کد منطقه",
"areaCodePlaceholder": "کد منطقه", "areaCodePlaceholder": "کد منطقه",
"auth": "احراز هویت", "auth": "احراز هویت",
"authIdentifier": "شناسه احراز هویت", "authIdentifier": "شناسه احراز هویت",
"authIdentifierPlaceholder": "شناسه احراز هویت را وارد کنید", "authIdentifierPlaceholder": "شناسه احراز هویت را وارد کنید",
"authMethodsTitle": "تنظیمات احراز هویت",
"authType": "نوع احراز هویت", "authType": "نوع احراز هویت",
"authUser": "کاربر تأیید شده", "authUser": "کاربر تأیید شده",
"avatar": "آواتار",
"balance": "تعادل", "balance": "تعادل",
"balanceNotifications": "اعلان‌های تغییر موجودی",
"balancePlaceholder": "موجودی", "balancePlaceholder": "موجودی",
"basicInfoTitle": "اطلاعات پایه",
"cancel": "لغو", "cancel": "لغو",
"commission": "کمیسیون", "commission": "کمیسیون",
"commissionPlaceholder": "کمیسیون را وارد کنید", "commissionPlaceholder": "کمیسیون را وارد کنید",
"confirm": "تأیید", "confirm": "تأیید",
"confirmDelete": "آیا مطمئن هستید که می‌خواهید حذف کنید؟", "confirmDelete": "آیا مطمئن هستید که می‌خواهید حذف کنید؟",
"confirmOffline": "تأیید آفلاین",
"create": "ایجاد", "create": "ایجاد",
"createSubscription": "ایجاد اشتراک",
"createSuccess": "ایجاد با موفقیت انجام شد", "createSuccess": "ایجاد با موفقیت انجام شد",
"createUser": "ایجاد کاربر", "createUser": "ایجاد کاربر",
"createdAt": "ایجاد شده در", "createdAt": "ایجاد شده در",
"delete": "حذف", "delete": "حذف",
"deleteDescription": "پس از حذف، داده‌ها قابل بازیابی نیستند، لطفاً با احتیاط ادامه دهید.", "deleteDescription": "پس از حذف، داده‌ها قابل بازیابی نیستند، لطفاً با احتیاط ادامه دهید.",
"deleteSubscriptionDescription": "آیا مطمئن هستید که می‌خواهید این اشتراک را حذف کنید؟",
"deleteSuccess": "حذف با موفقیت انجام شد", "deleteSuccess": "حذف با موفقیت انجام شد",
"detail": "جزئیات", "detail": "جزئیات",
"deviceLimit": "محدودیت دستگاه",
"download": "دانلود",
"downloadTraffic": "ترافیک دانلود",
"edit": "ویرایش", "edit": "ویرایش",
"editSubscription": "ویرایش اشتراک",
"editUser": "ویرایش کاربر", "editUser": "ویرایش کاربر",
"email": "ایمیل", "email": "ایمیل",
"emailNotifications": "اعلان‌های ایمیل",
"enable": "فعال کردن", "enable": "فعال کردن",
"expireTime": "زمان انقضا",
"expiredAt": "منقضی شده در",
"failed": "ناموفق",
"giftAmount": "مقدار هدیه", "giftAmount": "مقدار هدیه",
"giftAmountPlaceholder": "مبلغ هدیه را وارد کنید", "giftAmountPlaceholder": "مبلغ هدیه را وارد کنید",
"invalidEmailFormat": "فرمت ایمیل نامعتبر است", "invalidEmailFormat": "فرمت ایمیل نامعتبر است",
@ -33,18 +51,47 @@
"inviteCodePlaceholder": "کد دعوت را وارد کنید (برای تولید خالی بگذارید)", "inviteCodePlaceholder": "کد دعوت را وارد کنید (برای تولید خالی بگذارید)",
"loading": "در حال بارگذاری...", "loading": "در حال بارگذاری...",
"loginIp": "آی‌پی ورود", "loginIp": "آی‌پی ورود",
"loginNotifications": "اعلان‌های ورود",
"loginStatus": "وضعیت ورود",
"loginTime": "زمان ورود", "loginTime": "زمان ورود",
"manager": "مدیر", "manager": "مدیر",
"notifySettingsTitle": "تنظیمات اعلان‌ها",
"onlineDevices": "دستگاه‌های آنلاین",
"password": "رمز عبور", "password": "رمز عبور",
"passwordPlaceholder": "رمز عبور جدید را وارد کنید (اختیاری)", "passwordPlaceholder": "رمز عبور جدید را وارد کنید (اختیاری)",
"permanent": "دائمی",
"pleaseEnterEmail": "لطفاً ایمیل خود را وارد کنید",
"referer": "ارجاع‌دهنده", "referer": "ارجاع‌دهنده",
"refererId": "شناسه معرف", "refererId": "شناسه معرف",
"refererIdPlaceholder": "شناسه معرف را وارد کنید", "refererIdPlaceholder": "شناسه معرف را وارد کنید",
"referralCode": "کد ارجاع",
"referrerUserId": "ارجاع‌دهنده (شناسه کاربر)",
"remove": "حذف",
"resetTime": "زمان بازنشانی",
"save": "ذخیره",
"searchIp": "جستجوی آدرس IP", "searchIp": "جستجوی آدرس IP",
"selectAuthType": "نوع احراز هویت را انتخاب کنید", "selectAuthType": "نوع احراز هویت را انتخاب کنید",
"speedLimit": "محدودیت سرعت",
"subscription": "اشتراک",
"subscriptionDetails": "جزئیات اشتراک",
"subscriptionList": "لیست اشتراک",
"subscriptionLogs": "گزارش‌های اشتراک",
"subscriptionName": "نام اشتراک",
"subscriptionNotifications": "اعلان‌های اشتراک",
"success": "موفقیت",
"telegramNotifications": "اعلان‌های تلگرام",
"telephone": "شماره تلفن", "telephone": "شماره تلفن",
"telephonePlaceholder": "شماره تلفن را وارد کنید", "telephonePlaceholder": "شماره تلفن را وارد کنید",
"totalTraffic": "کل ترافیک",
"tradeNotifications": "اعلان‌های تجارت",
"trafficLimit": "محدودیت ترافیک",
"trafficLogs": "گزارش‌های ترافیک",
"unlimited": "نامحدود",
"unverified": "تأیید نشده",
"update": "به‌روزرسانی",
"updateSuccess": "به‌روزرسانی با موفقیت انجام شد", "updateSuccess": "به‌روزرسانی با موفقیت انجام شد",
"upload": "بارگذاری",
"uploadTraffic": "بارگذاری ترافیک",
"userAgent": "عامل کاربر", "userAgent": "عامل کاربر",
"userEmail": "ایمیل کاربر", "userEmail": "ایمیل کاربر",
"userEmailPlaceholder": "ایمیل کاربر را وارد کنید", "userEmailPlaceholder": "ایمیل کاربر را وارد کنید",

View File

@ -45,6 +45,7 @@
"60002": "Tilausta ei voi käyttää tällä hetkellä, yritä myöhemmin uudelleen.", "60002": "Tilausta ei voi käyttää tällä hetkellä, yritä myöhemmin uudelleen.",
"60003": "Olemassa oleva tilaus havaittu. Peruuta se ennen jatkamista.", "60003": "Olemassa oleva tilaus havaittu. Peruuta se ennen jatkamista.",
"60004": "Ei voi poistaa tällä hetkellä, koska tilauksella on aktiivisia käyttäjiä.", "60004": "Ei voi poistaa tällä hetkellä, koska tilauksella on aktiivisia käyttäjiä.",
"60005": "Yksittäisen tilauksen tila on ylittänyt käyttäjärajan",
"70001": "Vahvistuskoodi on virheellinen, syötä se uudelleen.", "70001": "Vahvistuskoodi on virheellinen, syötä se uudelleen.",
"80001": "Tehtävää ei lisätty jonoon, yritä myöhemmin uudelleen.", "80001": "Tehtävää ei lisätty jonoon, yritä myöhemmin uudelleen.",
"90001": "Sulje DEBUG-tila ja yritä uudelleen.", "90001": "Sulje DEBUG-tila ja yritä uudelleen.",

View File

@ -1,31 +1,49 @@
{ {
"accountEnable": "Tilin aktivointi",
"actions": "toiminnot", "actions": "toiminnot",
"add": "Lisää",
"administrator": "Ylläpitäjä",
"areaCode": "Alueen koodi", "areaCode": "Alueen koodi",
"areaCodePlaceholder": "Alueen koodi", "areaCodePlaceholder": "Alueen koodi",
"auth": "Tunnistus", "auth": "Tunnistus",
"authIdentifier": "Tunnistautumistunnus", "authIdentifier": "Tunnistautumistunnus",
"authIdentifierPlaceholder": "Syötä tunnistautumistunnus", "authIdentifierPlaceholder": "Syötä tunnistautumistunnus",
"authMethodsTitle": "Todennusasetukset",
"authType": "Todennustyyppi", "authType": "Todennustyyppi",
"authUser": "Todennus Käyttäjä", "authUser": "Todennus Käyttäjä",
"avatar": "Avatar",
"balance": "Saldo", "balance": "Saldo",
"balanceNotifications": "Saldon muutosilmoitukset",
"balancePlaceholder": "Saldo", "balancePlaceholder": "Saldo",
"basicInfoTitle": "Perustiedot",
"cancel": "Peruuta", "cancel": "Peruuta",
"commission": "Komissio", "commission": "Komissio",
"commissionPlaceholder": "Syötä komissio", "commissionPlaceholder": "Syötä komissio",
"confirm": "Vahvista", "confirm": "Vahvista",
"confirmDelete": "Oletko varma, että haluat poistaa?", "confirmDelete": "Oletko varma, että haluat poistaa?",
"confirmOffline": "Vahvista offline-tila",
"create": "Luo", "create": "Luo",
"createSubscription": "Luo tilaus",
"createSuccess": "Luonti onnistui", "createSuccess": "Luonti onnistui",
"createUser": "Luo käyttäjä", "createUser": "Luo käyttäjä",
"createdAt": "Rekisteröitymisaika", "createdAt": "Rekisteröitymisaika",
"delete": "poista", "delete": "poista",
"deleteDescription": "Poistamisen jälkeen tietoja ei voi palauttaa, ole varovainen.", "deleteDescription": "Poistamisen jälkeen tietoja ei voi palauttaa, ole varovainen.",
"deleteSubscriptionDescription": "Haluatko varmasti poistaa tämän tilauksen?",
"deleteSuccess": "Poisto onnistui", "deleteSuccess": "Poisto onnistui",
"detail": "Yksityiskohta", "detail": "Yksityiskohta",
"deviceLimit": "Laiterajoitus",
"download": "Lataa",
"downloadTraffic": "Lataa liikenne",
"edit": "muokkaa", "edit": "muokkaa",
"editSubscription": "Muokkaa tilausta",
"editUser": "Muokkaa käyttäjää", "editUser": "Muokkaa käyttäjää",
"email": "sähköposti", "email": "sähköposti",
"emailNotifications": "Sähköposti-ilmoitukset",
"enable": "Ota käyttöön", "enable": "Ota käyttöön",
"expireTime": "Vanhentumisaika",
"expiredAt": "Vanhentunut",
"failed": "Epäonnistui",
"giftAmount": "Lahjan määrä", "giftAmount": "Lahjan määrä",
"giftAmountPlaceholder": "Syötä lahjan määrä", "giftAmountPlaceholder": "Syötä lahjan määrä",
"invalidEmailFormat": "Virheellinen sähköpostimuoto", "invalidEmailFormat": "Virheellinen sähköpostimuoto",
@ -33,18 +51,47 @@
"inviteCodePlaceholder": "Syötä kutsukoodi (jätä tyhjäksi luodaksesi uuden)", "inviteCodePlaceholder": "Syötä kutsukoodi (jätä tyhjäksi luodaksesi uuden)",
"loading": "Ladataan...", "loading": "Ladataan...",
"loginIp": "Kirjautumis-IP", "loginIp": "Kirjautumis-IP",
"loginNotifications": "Kirjautumisilmoitukset",
"loginStatus": "Kirjautumistila",
"loginTime": "Kirjautumisaika", "loginTime": "Kirjautumisaika",
"manager": "Johtaja", "manager": "Johtaja",
"notifySettingsTitle": "Ilmoitusasetukset",
"onlineDevices": "Verkossa olevat laitteet",
"password": "Salasana", "password": "Salasana",
"passwordPlaceholder": "Syötä uusi salasana (valinnainen)", "passwordPlaceholder": "Syötä uusi salasana (valinnainen)",
"permanent": "Pysyvä",
"pleaseEnterEmail": "Ole hyvä ja syötä sähköpostiosoite",
"referer": "Suosittelija", "referer": "Suosittelija",
"refererId": "Viittaajan ID", "refererId": "Viittaajan ID",
"refererIdPlaceholder": "Syötä suosittelijan ID", "refererIdPlaceholder": "Syötä suosittelijan ID",
"referralCode": "Suosituskoodi",
"referrerUserId": "Viittaaja (Käyttäjän ID)",
"remove": "Poista",
"resetTime": "Nollaa aika",
"save": "Tallenna",
"searchIp": "Etsi IP-osoite", "searchIp": "Etsi IP-osoite",
"selectAuthType": "Valitse todennustyyppi", "selectAuthType": "Valitse todennustyyppi",
"speedLimit": "Nopeusrajoitus",
"subscription": "Tilaus",
"subscriptionDetails": "Tilaustiedot",
"subscriptionList": "Tilauksen lista",
"subscriptionLogs": "Tilaushistoria",
"subscriptionName": "Tilauksen nimi",
"subscriptionNotifications": "Tilausilmoitukset",
"success": "Onnistuminen",
"telegramNotifications": "Telegram-ilmoitukset",
"telephone": "Puhelinnumero", "telephone": "Puhelinnumero",
"telephonePlaceholder": "Syötä puhelinnumero", "telephonePlaceholder": "Syötä puhelinnumero",
"totalTraffic": "Kokonaisliikenne",
"tradeNotifications": "Kauppailmoitukset",
"trafficLimit": "Liikenteen rajoitus",
"trafficLogs": "Liikennelokit",
"unlimited": "Rajoittamaton",
"unverified": "Vahvistamaton",
"update": "Päivitä",
"updateSuccess": "Päivitys onnistui", "updateSuccess": "Päivitys onnistui",
"upload": "Lataa",
"uploadTraffic": "Lähetä liikenne",
"userAgent": "Käyttäjäagentti", "userAgent": "Käyttäjäagentti",
"userEmail": "Käyttäjän sähköposti", "userEmail": "Käyttäjän sähköposti",
"userEmailPlaceholder": "Syötä käyttäjän sähköpostiosoite", "userEmailPlaceholder": "Syötä käyttäjän sähköpostiosoite",

View File

@ -45,6 +45,7 @@
"60002": "Impossible d'utiliser cet abonnement pour le moment, veuillez réessayer plus tard.", "60002": "Impossible d'utiliser cet abonnement pour le moment, veuillez réessayer plus tard.",
"60003": "Un abonnement existant a été détecté. Veuillez l'annuler avant de continuer.", "60003": "Un abonnement existant a été détecté. Veuillez l'annuler avant de continuer.",
"60004": "Impossible de supprimer pour le moment car l'abonnement a des utilisateurs actifs.", "60004": "Impossible de supprimer pour le moment car l'abonnement a des utilisateurs actifs.",
"60005": "Le mode d'abonnement unique a dépassé la limite d'utilisateurs",
"70001": "Le code de vérification est incorrect, veuillez le ressaisir.", "70001": "Le code de vérification est incorrect, veuillez le ressaisir.",
"80001": "La tâche n'a pas été ajoutée avec succès à la file d'attente, veuillez réessayer plus tard.", "80001": "La tâche n'a pas été ajoutée avec succès à la file d'attente, veuillez réessayer plus tard.",
"90001": "Veuillez désactiver le mode DEBUG et réessayer.", "90001": "Veuillez désactiver le mode DEBUG et réessayer.",

View File

@ -1,31 +1,49 @@
{ {
"accountEnable": "Activation du compte",
"actions": "actions", "actions": "actions",
"add": "Ajouter",
"administrator": "Administrateur",
"areaCode": "Indicatif régional", "areaCode": "Indicatif régional",
"areaCodePlaceholder": "Indicatif régional", "areaCodePlaceholder": "Indicatif régional",
"auth": "Auth", "auth": "Auth",
"authIdentifier": "Identifiant d'authentification", "authIdentifier": "Identifiant d'authentification",
"authIdentifierPlaceholder": "Entrez l'identifiant d'authentification", "authIdentifierPlaceholder": "Entrez l'identifiant d'authentification",
"authMethodsTitle": "Paramètres d'authentification",
"authType": "Type d'authentification", "authType": "Type d'authentification",
"authUser": "Utilisateur Auth", "authUser": "Utilisateur Auth",
"avatar": "Avatar",
"balance": "Solde", "balance": "Solde",
"balanceNotifications": "Notifications de changement de solde",
"balancePlaceholder": "Solde", "balancePlaceholder": "Solde",
"basicInfoTitle": "Informations de base",
"cancel": "Annuler", "cancel": "Annuler",
"commission": "Commission", "commission": "Commission",
"commissionPlaceholder": "Entrez la commission", "commissionPlaceholder": "Entrez la commission",
"confirm": "Confirmer", "confirm": "Confirmer",
"confirmDelete": "Êtes-vous sûr de vouloir supprimer ?", "confirmDelete": "Êtes-vous sûr de vouloir supprimer ?",
"confirmOffline": "Confirmer hors ligne",
"create": "Créer", "create": "Créer",
"createSubscription": "Créer un abonnement",
"createSuccess": "Création réussie", "createSuccess": "Création réussie",
"createUser": "Créer un utilisateur", "createUser": "Créer un utilisateur",
"createdAt": "Date d'inscription", "createdAt": "Date d'inscription",
"delete": "Supprimer", "delete": "Supprimer",
"deleteDescription": "Une fois supprimées, les données ne peuvent pas être récupérées. Veuillez procéder avec prudence.", "deleteDescription": "Une fois supprimées, les données ne peuvent pas être récupérées. Veuillez procéder avec prudence.",
"deleteSubscriptionDescription": "Êtes-vous sûr de vouloir supprimer cet abonnement ?",
"deleteSuccess": "Suppression réussie", "deleteSuccess": "Suppression réussie",
"detail": "Détail", "detail": "Détail",
"deviceLimit": "Limite d'appareil",
"download": "Télécharger",
"downloadTraffic": "Télécharger le trafic",
"edit": "Éditer", "edit": "Éditer",
"editSubscription": "Modifier l'abonnement",
"editUser": "Modifier l'utilisateur", "editUser": "Modifier l'utilisateur",
"email": "e-mail", "email": "e-mail",
"emailNotifications": "Notifications par e-mail",
"enable": "Activer", "enable": "Activer",
"expireTime": "Date d'expiration",
"expiredAt": "Expiré le",
"failed": "Échoué",
"giftAmount": "Montant du cadeau", "giftAmount": "Montant du cadeau",
"giftAmountPlaceholder": "Entrez le montant du cadeau", "giftAmountPlaceholder": "Entrez le montant du cadeau",
"invalidEmailFormat": "Format d'email invalide", "invalidEmailFormat": "Format d'email invalide",
@ -33,18 +51,47 @@
"inviteCodePlaceholder": "Entrez le code d'invitation (laissez vide pour générer)", "inviteCodePlaceholder": "Entrez le code d'invitation (laissez vide pour générer)",
"loading": "Chargement...", "loading": "Chargement...",
"loginIp": "IP de connexion", "loginIp": "IP de connexion",
"loginNotifications": "Notifications de connexion",
"loginStatus": "Statut de connexion",
"loginTime": "Heure de connexion", "loginTime": "Heure de connexion",
"manager": "Gestionnaire", "manager": "Gestionnaire",
"notifySettingsTitle": "Paramètres de notification",
"onlineDevices": "Appareils en ligne",
"password": "Mot de passe", "password": "Mot de passe",
"passwordPlaceholder": "Entrez un nouveau mot de passe (facultatif)", "passwordPlaceholder": "Entrez un nouveau mot de passe (facultatif)",
"permanent": "Permanent",
"pleaseEnterEmail": "Veuillez entrer votre adresse e-mail",
"referer": "Référent", "referer": "Référent",
"refererId": "ID du référent", "refererId": "ID du référent",
"refererIdPlaceholder": "Entrez l'ID du référent", "refererIdPlaceholder": "Entrez l'ID du référent",
"referralCode": "Code de parrainage",
"referrerUserId": "Référent (ID utilisateur)",
"remove": "Supprimer",
"resetTime": "Réinitialiser l'heure",
"save": "Enregistrer",
"searchIp": "Rechercher une adresse IP", "searchIp": "Rechercher une adresse IP",
"selectAuthType": "Sélectionner le type d'authentification", "selectAuthType": "Sélectionner le type d'authentification",
"speedLimit": "Limite de vitesse",
"subscription": "Abonnement",
"subscriptionDetails": "Détails de l'abonnement",
"subscriptionList": "Liste des abonnements",
"subscriptionLogs": "Journaux d'abonnement",
"subscriptionName": "Nom de l'abonnement",
"subscriptionNotifications": "Notifications d'abonnement",
"success": "Succès",
"telegramNotifications": "Notifications Telegram",
"telephone": "Numéro de téléphone", "telephone": "Numéro de téléphone",
"telephonePlaceholder": "Entrez le numéro de téléphone", "telephonePlaceholder": "Entrez le numéro de téléphone",
"totalTraffic": "Trafic Total",
"tradeNotifications": "Notifications de commerce",
"trafficLimit": "Limite de trafic",
"trafficLogs": "Journaux de trafic",
"unlimited": "Illimité",
"unverified": "Non vérifié",
"update": "Mettre à jour",
"updateSuccess": "Mise à jour réussie", "updateSuccess": "Mise à jour réussie",
"upload": "Téléverser",
"uploadTraffic": "Télécharger le trafic",
"userAgent": "Agent utilisateur", "userAgent": "Agent utilisateur",
"userEmail": "E-mail de l'utilisateur", "userEmail": "E-mail de l'utilisateur",
"userEmailPlaceholder": "Entrez l'email de l'utilisateur", "userEmailPlaceholder": "Entrez l'email de l'utilisateur",

View File

@ -45,6 +45,7 @@
"60002": "अस्थायी रूप से इस सदस्यता का उपयोग नहीं किया जा सकता, कृपया थोड़ी देर बाद पुनः प्रयास करें।", "60002": "अस्थायी रूप से इस सदस्यता का उपयोग नहीं किया जा सकता, कृपया थोड़ी देर बाद पुनः प्रयास करें।",
"60003": "एक मौजूदा सदस्यता का पता चला है। कृपया आगे बढ़ने से पहले इसे रद्द करें।", "60003": "एक मौजूदा सदस्यता का पता चला है। कृपया आगे बढ़ने से पहले इसे रद्द करें।",
"60004": "वर्तमान में हटाने में असमर्थ क्योंकि सदस्यता में सक्रिय उपयोगकर्ता हैं।", "60004": "वर्तमान में हटाने में असमर्थ क्योंकि सदस्यता में सक्रिय उपयोगकर्ता हैं।",
"60005": "एकल सदस्यता मोड ने उपयोगकर्ता सीमा से अधिक कर दिया है",
"70001": "सत्यापन कोड गलत है, कृपया पुनः दर्ज करें।", "70001": "सत्यापन कोड गलत है, कृपया पुनः दर्ज करें।",
"80001": "कार्य सफलतापूर्वक कतार में नहीं जोड़ा गया, कृपया थोड़ी देर बाद पुनः प्रयास करें।", "80001": "कार्य सफलतापूर्वक कतार में नहीं जोड़ा गया, कृपया थोड़ी देर बाद पुनः प्रयास करें।",
"90001": "कृपया DEBUG मोड बंद करें और फिर पुनः प्रयास करें।", "90001": "कृपया DEBUG मोड बंद करें और फिर पुनः प्रयास करें।",

View File

@ -1,31 +1,49 @@
{ {
"accountEnable": "खाता सक्षम करें",
"actions": "क्रियाएँ", "actions": "क्रियाएँ",
"add": "जोड़ें",
"administrator": "प्रशासक",
"areaCode": "क्षेत्र कोड", "areaCode": "क्षेत्र कोड",
"areaCodePlaceholder": "क्षेत्र कोड", "areaCodePlaceholder": "क्षेत्र कोड",
"auth": "प्रमाणीकरण", "auth": "प्रमाणीकरण",
"authIdentifier": "प्रमाणीकरण पहचानकर्ता", "authIdentifier": "प्रमाणीकरण पहचानकर्ता",
"authIdentifierPlaceholder": "प्रमाणिक पहचानकर्ता दर्ज करें", "authIdentifierPlaceholder": "प्रमाणिक पहचानकर्ता दर्ज करें",
"authMethodsTitle": "प्रमाणीकरण सेटिंग्स",
"authType": "प्रमाणीकरण प्रकार", "authType": "प्रमाणीकरण प्रकार",
"authUser": "प्रमाणित उपयोगकर्ता", "authUser": "प्रमाणित उपयोगकर्ता",
"avatar": "अवतार",
"balance": "शेष", "balance": "शेष",
"balanceNotifications": "बैलेंस परिवर्तन सूचनाएं",
"balancePlaceholder": "शेष", "balancePlaceholder": "शेष",
"basicInfoTitle": "मूल जानकारी",
"cancel": "रद्द करें", "cancel": "रद्द करें",
"commission": "आयोग", "commission": "आयोग",
"commissionPlaceholder": "कमीशन दर्ज करें", "commissionPlaceholder": "कमीशन दर्ज करें",
"confirm": "पुष्टि करें", "confirm": "पुष्टि करें",
"confirmDelete": "क्या आप वाकई हटाना चाहते हैं?", "confirmDelete": "क्या आप वाकई हटाना चाहते हैं?",
"confirmOffline": "ऑफ़लाइन की पुष्टि करें",
"create": "सृजन", "create": "सृजन",
"createSubscription": "सदस्यता बनाएं",
"createSuccess": "सृजन सफल", "createSuccess": "सृजन सफल",
"createUser": "उपयोगकर्ता बनाएं", "createUser": "उपयोगकर्ता बनाएं",
"createdAt": "पंजीकरण समय", "createdAt": "पंजीकरण समय",
"delete": "हटाएं", "delete": "हटाएं",
"deleteDescription": "हटाने के बाद डेटा पुनर्प्राप्त नहीं किया जा सकता है, कृपया सावधानीपूर्वक कार्य करें।", "deleteDescription": "हटाने के बाद डेटा पुनर्प्राप्त नहीं किया जा सकता है, कृपया सावधानीपूर्वक कार्य करें।",
"deleteSubscriptionDescription": "क्या आप वाकई इस सदस्यता को हटाना चाहते हैं?",
"deleteSuccess": "हटाने में सफलता", "deleteSuccess": "हटाने में सफलता",
"detail": "विवरण", "detail": "विवरण",
"deviceLimit": "डिवाइस सीमा",
"download": "डाउनलोड",
"downloadTraffic": "डाउनलोड ट्रैफिक",
"edit": "संपादित करें", "edit": "संपादित करें",
"editSubscription": "सदस्यता संपादित करें",
"editUser": "उपयोगकर्ता संपादित करें", "editUser": "उपयोगकर्ता संपादित करें",
"email": "ईमेल", "email": "ईमेल",
"emailNotifications": "ईमेल सूचनाएं",
"enable": "सक्षम करें", "enable": "सक्षम करें",
"expireTime": "समाप्ति समय",
"expiredAt": "समाप्ति तिथि",
"failed": "असफल",
"giftAmount": "उपहार राशि", "giftAmount": "उपहार राशि",
"giftAmountPlaceholder": "उपहार राशि दर्ज करें", "giftAmountPlaceholder": "उपहार राशि दर्ज करें",
"invalidEmailFormat": "अमान्य ईमेल प्रारूप", "invalidEmailFormat": "अमान्य ईमेल प्रारूप",
@ -33,18 +51,47 @@
"inviteCodePlaceholder": "आमंत्रण कोड दर्ज करें (उत्पन्न करने के लिए खाली छोड़ें)", "inviteCodePlaceholder": "आमंत्रण कोड दर्ज करें (उत्पन्न करने के लिए खाली छोड़ें)",
"loading": "लोड हो रहा है...", "loading": "लोड हो रहा है...",
"loginIp": "लॉगिन आईपी", "loginIp": "लॉगिन आईपी",
"loginNotifications": "लॉगिन सूचनाएं",
"loginStatus": "लॉगिन स्थिति",
"loginTime": "लॉगिन समय", "loginTime": "लॉगिन समय",
"manager": "प्रबंधक", "manager": "प्रबंधक",
"notifySettingsTitle": "सूचना सेटिंग्स",
"onlineDevices": "ऑनलाइन डिवाइस",
"password": "पासवर्ड", "password": "पासवर्ड",
"passwordPlaceholder": "नया पासवर्ड दर्ज करें (वैकल्पिक)", "passwordPlaceholder": "नया पासवर्ड दर्ज करें (वैकल्पिक)",
"permanent": "स्थायी",
"pleaseEnterEmail": "कृपया ईमेल दर्ज करें",
"referer": "सिफारिशकर्ता", "referer": "सिफारिशकर्ता",
"refererId": "रेफरर आईडी", "refererId": "रेफरर आईडी",
"refererIdPlaceholder": "रेफरर आईडी दर्ज करें", "refererIdPlaceholder": "रेफरर आईडी दर्ज करें",
"referralCode": "रेफरल कोड",
"referrerUserId": "रेफरर (उपयोगकर्ता आईडी)",
"remove": "हटाएं",
"resetTime": "समय रीसेट करें",
"save": "सहेजें",
"searchIp": "आईपी पता खोजें", "searchIp": "आईपी पता खोजें",
"selectAuthType": "प्रमाणीकरण प्रकार चुनें", "selectAuthType": "प्रमाणीकरण प्रकार चुनें",
"speedLimit": "गति सीमा",
"subscription": "सदस्यता",
"subscriptionDetails": "सदस्यता विवरण",
"subscriptionList": "सदस्यता सूची",
"subscriptionLogs": "सदस्यता लॉग्स",
"subscriptionName": "सदस्यता नाम",
"subscriptionNotifications": "सदस्यता सूचनाएं",
"success": "सफलता",
"telegramNotifications": "टेलीग्राम सूचनाएं",
"telephone": "फ़ोन नंबर", "telephone": "फ़ोन नंबर",
"telephonePlaceholder": "फ़ोन नंबर दर्ज करें", "telephonePlaceholder": "फ़ोन नंबर दर्ज करें",
"totalTraffic": "कुल ट्रैफ़िक",
"tradeNotifications": "व्यापार सूचनाएं",
"trafficLimit": "ट्रैफिक सीमा",
"trafficLogs": "ट्रैफिक लॉग्स",
"unlimited": "असीमित",
"unverified": "असत्यापित",
"update": "अपडेट",
"updateSuccess": "अपडेट सफल", "updateSuccess": "अपडेट सफल",
"upload": "अपलोड करें",
"uploadTraffic": "अपलोड ट्रैफिक",
"userAgent": "उपयोगकर्ता एजेंट", "userAgent": "उपयोगकर्ता एजेंट",
"userEmail": "उपयोगकर्ता ईमेल", "userEmail": "उपयोगकर्ता ईमेल",
"userEmailPlaceholder": "उपयोगकर्ता ईमेल दर्ज करें", "userEmailPlaceholder": "उपयोगकर्ता ईमेल दर्ज करें",

View File

@ -45,6 +45,7 @@
"60002": "Az előfizetés jelenleg nem használható, kérjük, próbálja meg később újra.", "60002": "Az előfizetés jelenleg nem használható, kérjük, próbálja meg később újra.",
"60003": "Létező előfizetés észlelve. Kérjük, törölje azt a folytatás előtt.", "60003": "Létező előfizetés észlelve. Kérjük, törölje azt a folytatás előtt.",
"60004": "Jelenleg nem törölhető, mivel az előfizetésnek aktív felhasználói vannak.", "60004": "Jelenleg nem törölhető, mivel az előfizetésnek aktív felhasználói vannak.",
"60005": "Az egyszeres előfizetési módban túllépték a felhasználói limitet",
"70001": "A megerősítő kód hibás, kérjük, írja be újra.", "70001": "A megerősítő kód hibás, kérjük, írja be újra.",
"80001": "A feladat nem került sikeresen a sorba, kérjük, próbálja meg később újra.", "80001": "A feladat nem került sikeresen a sorba, kérjük, próbálja meg később újra.",
"90001": "Kérjük, kapcsolja ki a DEBUG módot, majd próbálja újra.", "90001": "Kérjük, kapcsolja ki a DEBUG módot, majd próbálja újra.",

View File

@ -1,31 +1,49 @@
{ {
"accountEnable": "Fiók engedélyezése",
"actions": "műveletek", "actions": "műveletek",
"add": "Hozzáadás",
"administrator": "Rendszergazda",
"areaCode": "Körzetszám", "areaCode": "Körzetszám",
"areaCodePlaceholder": "Körzetszám", "areaCodePlaceholder": "Körzetszám",
"auth": "Hitelesítés", "auth": "Hitelesítés",
"authIdentifier": "Hitelesítési azonosító", "authIdentifier": "Hitelesítési azonosító",
"authIdentifierPlaceholder": "Adja meg az azonosítót", "authIdentifierPlaceholder": "Adja meg az azonosítót",
"authMethodsTitle": "Hitelesítési beállítások",
"authType": "Hitelesítési típus", "authType": "Hitelesítési típus",
"authUser": "Hitelesített felhasználó", "authUser": "Hitelesített felhasználó",
"avatar": "Avatar",
"balance": "Egyenleg", "balance": "Egyenleg",
"balanceNotifications": "Egyenlegváltozás Értesítések",
"balancePlaceholder": "Egyenleg", "balancePlaceholder": "Egyenleg",
"basicInfoTitle": "Alapvető információk",
"cancel": "Mégse", "cancel": "Mégse",
"commission": "Jutalék", "commission": "Jutalék",
"commissionPlaceholder": "Adja meg a jutalékot", "commissionPlaceholder": "Adja meg a jutalékot",
"confirm": "Megerősítés", "confirm": "Megerősítés",
"confirmDelete": "Biztosan törölni szeretné?", "confirmDelete": "Biztosan törölni szeretné?",
"confirmOffline": "Megerősítés offline",
"create": "Létrehozás", "create": "Létrehozás",
"createSubscription": "Előfizetés létrehozása",
"createSuccess": "Sikeres létrehozás", "createSuccess": "Sikeres létrehozás",
"createUser": "Felhasználó létrehozása", "createUser": "Felhasználó létrehozása",
"createdAt": "Regisztráció ideje", "createdAt": "Regisztráció ideje",
"delete": "törlés", "delete": "törlés",
"deleteDescription": "A törlés után az adatok nem állíthatók vissza, kérjük, járjon el körültekintően.", "deleteDescription": "A törlés után az adatok nem állíthatók vissza, kérjük, járjon el körültekintően.",
"deleteSubscriptionDescription": "Biztosan törölni szeretné ezt az előfizetést?",
"deleteSuccess": "Sikeres törlés", "deleteSuccess": "Sikeres törlés",
"detail": "Részlet", "detail": "Részlet",
"deviceLimit": "Eszközkorlát",
"download": "Letöltés",
"downloadTraffic": "Forgalmi adatok letöltése",
"edit": "szerkesztés", "edit": "szerkesztés",
"editSubscription": "Előfizetés szerkesztése",
"editUser": "Felhasználó szerkesztése", "editUser": "Felhasználó szerkesztése",
"email": "e-mail", "email": "e-mail",
"emailNotifications": "Email értesítések",
"enable": "Engedélyezés", "enable": "Engedélyezés",
"expireTime": "Lejárati idő",
"expiredAt": "Lejárati dátum",
"failed": "Sikertelen",
"giftAmount": "Ajándék Összeg", "giftAmount": "Ajándék Összeg",
"giftAmountPlaceholder": "Adja meg az ajándék összegét", "giftAmountPlaceholder": "Adja meg az ajándék összegét",
"invalidEmailFormat": "Érvénytelen e-mail formátum", "invalidEmailFormat": "Érvénytelen e-mail formátum",
@ -33,18 +51,47 @@
"inviteCodePlaceholder": "Adja meg a meghívó kódot (hagyja üresen a generáláshoz)", "inviteCodePlaceholder": "Adja meg a meghívó kódot (hagyja üresen a generáláshoz)",
"loading": "Betöltés...", "loading": "Betöltés...",
"loginIp": "Bejelentkezési IP", "loginIp": "Bejelentkezési IP",
"loginNotifications": "Bejelentkezési értesítések",
"loginStatus": "Bejelentkezési állapot",
"loginTime": "Bejelentkezési idő", "loginTime": "Bejelentkezési idő",
"manager": "Menedzser", "manager": "Menedzser",
"notifySettingsTitle": "Értesítési beállítások",
"onlineDevices": "Online eszközök",
"password": "Jelszó", "password": "Jelszó",
"passwordPlaceholder": "Adjon meg új jelszót (opcionális)", "passwordPlaceholder": "Adjon meg új jelszót (opcionális)",
"permanent": "Állandó",
"pleaseEnterEmail": "Kérjük, adja meg az e-mail címet",
"referer": "Ajánló", "referer": "Ajánló",
"refererId": "Hivatkozó azonosító", "refererId": "Hivatkozó azonosító",
"refererIdPlaceholder": "Adja meg az ajánló azonosítóját", "refererIdPlaceholder": "Adja meg az ajánló azonosítóját",
"referralCode": "Ajánlókód",
"referrerUserId": "Ajánló (Felhasználói azonosító)",
"remove": "Eltávolítás",
"resetTime": "Visszaállítási idő",
"save": "Mentés",
"searchIp": "IP-cím keresése", "searchIp": "IP-cím keresése",
"selectAuthType": "Válassza ki az azonosítás típusát", "selectAuthType": "Válassza ki az azonosítás típusát",
"speedLimit": "Sebességhatár",
"subscription": "Előfizetés",
"subscriptionDetails": "Előfizetési részletek",
"subscriptionList": "Előfizetési lista",
"subscriptionLogs": "Előfizetési naplók",
"subscriptionName": "Előfizetés neve",
"subscriptionNotifications": "Előfizetési értesítések",
"success": "Siker",
"telegramNotifications": "Telegram értesítések",
"telephone": "Telefonszám", "telephone": "Telefonszám",
"telephonePlaceholder": "Adja meg a telefonszámot", "telephonePlaceholder": "Adja meg a telefonszámot",
"totalTraffic": "Összes forgalom",
"tradeNotifications": "Kereskedelmi értesítések",
"trafficLimit": "Forgalmi korlát",
"trafficLogs": "Forgalmi naplók",
"unlimited": "Korlátlan",
"unverified": "Nem ellenőrzött",
"update": "Frissítés",
"updateSuccess": "Sikeres frissítés", "updateSuccess": "Sikeres frissítés",
"upload": "Feltöltés",
"uploadTraffic": "Forgalom feltöltése",
"userAgent": "Felhasználói ügynök", "userAgent": "Felhasználói ügynök",
"userEmail": "Felhasználó e-mail", "userEmail": "Felhasználó e-mail",
"userEmailPlaceholder": "Adja meg a felhasználó e-mail címét", "userEmailPlaceholder": "Adja meg a felhasználó e-mail címét",

View File

@ -45,6 +45,7 @@
"60002": "このサブスクリプションは現在使用できません。しばらくしてから再試行してください。", "60002": "このサブスクリプションは現在使用できません。しばらくしてから再試行してください。",
"60003": "既存のサブスクリプションが検出されました。続行する前にキャンセルしてください。", "60003": "既存のサブスクリプションが検出されました。続行する前にキャンセルしてください。",
"60004": "サブスクリプションにアクティブなユーザーがいるため、現在削除できません。", "60004": "サブスクリプションにアクティブなユーザーがいるため、現在削除できません。",
"60005": "シングルサブスクリプションモードでは、ユーザー制限を超えました",
"70001": "認証コードが間違っています。再入力してください。", "70001": "認証コードが間違っています。再入力してください。",
"80001": "タスクがキューに正常に追加されませんでした。しばらくしてから再試行してください。", "80001": "タスクがキューに正常に追加されませんでした。しばらくしてから再試行してください。",
"90001": "DEBUGモードをオフにしてから再試行してください。", "90001": "DEBUGモードをオフにしてから再試行してください。",

View File

@ -1,31 +1,49 @@
{ {
"accountEnable": "アカウント有効化",
"actions": "アクション", "actions": "アクション",
"add": "追加",
"administrator": "管理者",
"areaCode": "市外局番", "areaCode": "市外局番",
"areaCodePlaceholder": "市外局番", "areaCodePlaceholder": "市外局番",
"auth": "認証", "auth": "認証",
"authIdentifier": "認証識別子", "authIdentifier": "認証識別子",
"authIdentifierPlaceholder": "認証IDを入力してください", "authIdentifierPlaceholder": "認証IDを入力してください",
"authMethodsTitle": "認証設定",
"authType": "認証タイプ", "authType": "認証タイプ",
"authUser": "認証ユーザー", "authUser": "認証ユーザー",
"avatar": "アバター",
"balance": "残高", "balance": "残高",
"balanceNotifications": "残高変更通知",
"balancePlaceholder": "残高", "balancePlaceholder": "残高",
"basicInfoTitle": "基本情報",
"cancel": "キャンセル", "cancel": "キャンセル",
"commission": "手数料", "commission": "手数料",
"commissionPlaceholder": "手数料を入力してください", "commissionPlaceholder": "手数料を入力してください",
"confirm": "確認", "confirm": "確認",
"confirmDelete": "削除してもよろしいですか?", "confirmDelete": "削除してもよろしいですか?",
"confirmOffline": "オフラインを確認",
"create": "作成", "create": "作成",
"createSubscription": "サブスクリプションを作成",
"createSuccess": "作成成功", "createSuccess": "作成成功",
"createUser": "ユーザーを作成", "createUser": "ユーザーを作成",
"createdAt": "登録日時", "createdAt": "登録日時",
"delete": "削除", "delete": "削除",
"deleteDescription": "削除後はデータを復元できませんので、慎重に操作してください。", "deleteDescription": "削除後はデータを復元できませんので、慎重に操作してください。",
"deleteSubscriptionDescription": "このサブスクリプションを削除してもよろしいですか?",
"deleteSuccess": "削除に成功しました", "deleteSuccess": "削除に成功しました",
"detail": "詳細", "detail": "詳細",
"deviceLimit": "デバイス制限",
"download": "ダウンロード",
"downloadTraffic": "ダウンロードトラフィック",
"edit": "編集", "edit": "編集",
"editSubscription": "サブスクリプションを編集",
"editUser": "ユーザー編集", "editUser": "ユーザー編集",
"email": "メールアドレス", "email": "メールアドレス",
"emailNotifications": "メール通知",
"enable": "有効", "enable": "有効",
"expireTime": "有効期限",
"expiredAt": "有効期限",
"failed": "失敗しました",
"giftAmount": "ギフト金額", "giftAmount": "ギフト金額",
"giftAmountPlaceholder": "ギフト金額を入力してください", "giftAmountPlaceholder": "ギフト金額を入力してください",
"invalidEmailFormat": "無効なメール形式です", "invalidEmailFormat": "無効なメール形式です",
@ -33,18 +51,47 @@
"inviteCodePlaceholder": "招待コードを入力してください(生成するには空白のままにしてください)", "inviteCodePlaceholder": "招待コードを入力してください(生成するには空白のままにしてください)",
"loading": "読み込み中...", "loading": "読み込み中...",
"loginIp": "ログインIP", "loginIp": "ログインIP",
"loginNotifications": "ログイン通知",
"loginStatus": "ログイン状況",
"loginTime": "ログイン時間", "loginTime": "ログイン時間",
"manager": "マネージャー", "manager": "マネージャー",
"notifySettingsTitle": "通知設定",
"onlineDevices": "オンラインデバイス",
"password": "パスワード", "password": "パスワード",
"passwordPlaceholder": "新しいパスワードを入力してください(任意)", "passwordPlaceholder": "新しいパスワードを入力してください(任意)",
"permanent": "永久",
"pleaseEnterEmail": "メールアドレスを入力してください",
"referer": "推薦者", "referer": "推薦者",
"refererId": "リファラーID", "refererId": "リファラーID",
"refererIdPlaceholder": "紹介者IDを入力してください", "refererIdPlaceholder": "紹介者IDを入力してください",
"referralCode": "紹介コード",
"referrerUserId": "紹介者ユーザーID",
"remove": "削除",
"resetTime": "リセット時間",
"save": "保存",
"searchIp": "IPアドレスを検索", "searchIp": "IPアドレスを検索",
"selectAuthType": "認証タイプを選択", "selectAuthType": "認証タイプを選択",
"speedLimit": "速度制限",
"subscription": "サブスクリプション",
"subscriptionDetails": "サブスクリプションの詳細",
"subscriptionList": "購読リスト",
"subscriptionLogs": "サブスクリプションログ",
"subscriptionName": "サブスクリプション名",
"subscriptionNotifications": "サブスクリプション通知",
"success": "成功",
"telegramNotifications": "Telegram通知",
"telephone": "電話番号", "telephone": "電話番号",
"telephonePlaceholder": "電話番号を入力してください", "telephonePlaceholder": "電話番号を入力してください",
"totalTraffic": "総トラフィック",
"tradeNotifications": "取引通知",
"trafficLimit": "トラフィック制限",
"trafficLogs": "トラフィックログ",
"unlimited": "無制限",
"unverified": "未確認",
"update": "更新",
"updateSuccess": "更新が成功しました", "updateSuccess": "更新が成功しました",
"upload": "アップロード",
"uploadTraffic": "アップロードトラフィック",
"userAgent": "ユーザーエージェント", "userAgent": "ユーザーエージェント",
"userEmail": "ユーザーのメール", "userEmail": "ユーザーのメール",
"userEmailPlaceholder": "ユーザーのメールアドレスを入力してください", "userEmailPlaceholder": "ユーザーのメールアドレスを入力してください",

View File

@ -45,6 +45,7 @@
"60002": "현재 구독을 사용할 수 없습니다. 잠시 후 다시 시도해 주세요.", "60002": "현재 구독을 사용할 수 없습니다. 잠시 후 다시 시도해 주세요.",
"60003": "기존 구독이 감지되었습니다. 계속하기 전에 취소해 주세요.", "60003": "기존 구독이 감지되었습니다. 계속하기 전에 취소해 주세요.",
"60004": "구독에 활성 사용자가 있어 현재 삭제할 수 없습니다.", "60004": "구독에 활성 사용자가 있어 현재 삭제할 수 없습니다.",
"60005": "단일 구독 모드가 사용자 한도를 초과했습니다",
"70001": "인증 코드가 잘못되었습니다. 다시 입력해 주세요.", "70001": "인증 코드가 잘못되었습니다. 다시 입력해 주세요.",
"80001": "작업이 큐에 성공적으로 추가되지 않았습니다. 잠시 후 다시 시도해 주세요.", "80001": "작업이 큐에 성공적으로 추가되지 않았습니다. 잠시 후 다시 시도해 주세요.",
"90001": "DEBUG 모드를 끈 후 다시 시도해 주세요.", "90001": "DEBUG 모드를 끈 후 다시 시도해 주세요.",

View File

@ -1,31 +1,49 @@
{ {
"accountEnable": "계정 활성화",
"actions": "작업", "actions": "작업",
"add": "추가",
"administrator": "관리자",
"areaCode": "지역 코드", "areaCode": "지역 코드",
"areaCodePlaceholder": "지역 코드", "areaCodePlaceholder": "지역 코드",
"auth": "인증", "auth": "인증",
"authIdentifier": "인증 식별자", "authIdentifier": "인증 식별자",
"authIdentifierPlaceholder": "인증 식별자를 입력하세요", "authIdentifierPlaceholder": "인증 식별자를 입력하세요",
"authMethodsTitle": "인증 설정",
"authType": "인증 유형", "authType": "인증 유형",
"authUser": "인증 사용자", "authUser": "인증 사용자",
"avatar": "아바타",
"balance": "잔액", "balance": "잔액",
"balanceNotifications": "잔액 변경 알림",
"balancePlaceholder": "잔액", "balancePlaceholder": "잔액",
"basicInfoTitle": "기본 정보",
"cancel": "취소", "cancel": "취소",
"commission": "커미션", "commission": "커미션",
"commissionPlaceholder": "수수료 입력", "commissionPlaceholder": "수수료 입력",
"confirm": "확인", "confirm": "확인",
"confirmDelete": "삭제하시겠습니까?", "confirmDelete": "삭제하시겠습니까?",
"confirmOffline": "오프라인 확인",
"create": "생성", "create": "생성",
"createSubscription": "구독 생성",
"createSuccess": "생성 성공", "createSuccess": "생성 성공",
"createUser": "사용자 생성", "createUser": "사용자 생성",
"createdAt": "가입 시간", "createdAt": "가입 시간",
"delete": "삭제", "delete": "삭제",
"deleteDescription": "삭제 후 데이터는 복구할 수 없으니 신중하게 진행하세요.", "deleteDescription": "삭제 후 데이터는 복구할 수 없으니 신중하게 진행하세요.",
"deleteSubscriptionDescription": "이 구독을 삭제하시겠습니까?",
"deleteSuccess": "삭제 성공", "deleteSuccess": "삭제 성공",
"detail": "세부사항", "detail": "세부사항",
"deviceLimit": "기기 제한",
"download": "다운로드",
"downloadTraffic": "트래픽 다운로드",
"edit": "편집", "edit": "편집",
"editSubscription": "구독 수정",
"editUser": "사용자 편집", "editUser": "사용자 편집",
"email": "이메일", "email": "이메일",
"emailNotifications": "이메일 알림",
"enable": "사용", "enable": "사용",
"expireTime": "만료 시간",
"expiredAt": "만료일",
"failed": "실패",
"giftAmount": "선물 금액", "giftAmount": "선물 금액",
"giftAmountPlaceholder": "선물 금액 입력", "giftAmountPlaceholder": "선물 금액 입력",
"invalidEmailFormat": "잘못된 이메일 형식입니다", "invalidEmailFormat": "잘못된 이메일 형식입니다",
@ -33,18 +51,47 @@
"inviteCodePlaceholder": "초대 코드를 입력하세요 (생성을 원하시면 비워두세요)", "inviteCodePlaceholder": "초대 코드를 입력하세요 (생성을 원하시면 비워두세요)",
"loading": "로딩 중...", "loading": "로딩 중...",
"loginIp": "로그인 IP", "loginIp": "로그인 IP",
"loginNotifications": "로그인 알림",
"loginStatus": "로그인 상태",
"loginTime": "로그인 시간", "loginTime": "로그인 시간",
"manager": "매니저", "manager": "매니저",
"notifySettingsTitle": "알림 설정",
"onlineDevices": "온라인 기기",
"password": "비밀번호", "password": "비밀번호",
"passwordPlaceholder": "새 비밀번호 입력 (선택 사항)", "passwordPlaceholder": "새 비밀번호 입력 (선택 사항)",
"permanent": "영구적인",
"pleaseEnterEmail": "이메일을 입력하세요",
"referer": "추천인", "referer": "추천인",
"refererId": "추천인 ID", "refererId": "추천인 ID",
"refererIdPlaceholder": "추천인 ID를 입력하세요", "refererIdPlaceholder": "추천인 ID를 입력하세요",
"referralCode": "추천 코드",
"referrerUserId": "추천인 (사용자 ID)",
"remove": "제거",
"resetTime": "재설정 시간",
"save": "저장",
"searchIp": "IP 주소 검색", "searchIp": "IP 주소 검색",
"selectAuthType": "인증 유형 선택", "selectAuthType": "인증 유형 선택",
"speedLimit": "속도 제한",
"subscription": "구독",
"subscriptionDetails": "구독 세부 정보",
"subscriptionList": "구독 목록",
"subscriptionLogs": "구독 로그",
"subscriptionName": "구독 이름",
"subscriptionNotifications": "구독 알림",
"success": "성공",
"telegramNotifications": "텔레그램 알림",
"telephone": "전화번호", "telephone": "전화번호",
"telephonePlaceholder": "전화번호 입력", "telephonePlaceholder": "전화번호 입력",
"totalTraffic": "총 트래픽",
"tradeNotifications": "거래 알림",
"trafficLimit": "트래픽 제한",
"trafficLogs": "트래픽 로그",
"unlimited": "무제한",
"unverified": "확인되지 않음",
"update": "업데이트",
"updateSuccess": "업데이트 성공", "updateSuccess": "업데이트 성공",
"upload": "업로드",
"uploadTraffic": "업로드 트래픽",
"userAgent": "사용자 에이전트", "userAgent": "사용자 에이전트",
"userEmail": "사용자 이메일", "userEmail": "사용자 이메일",
"userEmailPlaceholder": "사용자 이메일 입력", "userEmailPlaceholder": "사용자 이메일 입력",

View File

@ -45,6 +45,7 @@
"60002": "Kan for øyeblikket ikke bruke abonnementet, vennligst prøv igjen senere.", "60002": "Kan for øyeblikket ikke bruke abonnementet, vennligst prøv igjen senere.",
"60003": "Et eksisterende abonnement er oppdaget. Vennligst avbryt det før du fortsetter.", "60003": "Et eksisterende abonnement er oppdaget. Vennligst avbryt det før du fortsetter.",
"60004": "Kan ikke slettes for øyeblikket da abonnementet har aktive brukere.", "60004": "Kan ikke slettes for øyeblikket da abonnementet har aktive brukere.",
"60005": "Enkel abonnementsmodus har overskredet brukergrensen",
"70001": "Verifikasjonskoden er feil, vennligst skriv den inn på nytt.", "70001": "Verifikasjonskoden er feil, vennligst skriv den inn på nytt.",
"80001": "Oppgaven ble ikke vellykket lagt til i køen, vennligst prøv igjen senere.", "80001": "Oppgaven ble ikke vellykket lagt til i køen, vennligst prøv igjen senere.",
"90001": "Vennligst deaktiver DEBUG-modus og prøv igjen.", "90001": "Vennligst deaktiver DEBUG-modus og prøv igjen.",

View File

@ -1,31 +1,49 @@
{ {
"accountEnable": "Aktiver konto",
"actions": "handlinger", "actions": "handlinger",
"add": "Legg til",
"administrator": "Administrator",
"areaCode": "Retningsnummer", "areaCode": "Retningsnummer",
"areaCodePlaceholder": "Retningsnummer", "areaCodePlaceholder": "Retningsnummer",
"auth": "Autentisering", "auth": "Autentisering",
"authIdentifier": "Autentiseringsidentifikator", "authIdentifier": "Autentiseringsidentifikator",
"authIdentifierPlaceholder": "Skriv inn autentiseringsidentifikator", "authIdentifierPlaceholder": "Skriv inn autentiseringsidentifikator",
"authMethodsTitle": "Autentiseringsinnstillinger",
"authType": "Autentiseringstype", "authType": "Autentiseringstype",
"authUser": "Autentisert Bruker", "authUser": "Autentisert Bruker",
"avatar": "Avatar",
"balance": "Balanse", "balance": "Balanse",
"balanceNotifications": "Varsler om saldoendringer",
"balancePlaceholder": "Balanse", "balancePlaceholder": "Balanse",
"basicInfoTitle": "Grunnleggende Informasjon",
"cancel": "Avbryt", "cancel": "Avbryt",
"commission": "Kommisjon", "commission": "Kommisjon",
"commissionPlaceholder": "Skriv inn provisjon", "commissionPlaceholder": "Skriv inn provisjon",
"confirm": "bekreft", "confirm": "bekreft",
"confirmDelete": "Er du sikker på at du vil slette?", "confirmDelete": "Er du sikker på at du vil slette?",
"confirmOffline": "Bekreft frakoblet",
"create": "opprett", "create": "opprett",
"createSubscription": "Opprett abonnement",
"createSuccess": "Opprettelse vellykket", "createSuccess": "Opprettelse vellykket",
"createUser": "Opprett bruker", "createUser": "Opprett bruker",
"createdAt": "Registreringstidspunkt", "createdAt": "Registreringstidspunkt",
"delete": "slett", "delete": "slett",
"deleteDescription": "Data kan ikke gjenopprettes etter sletting, vær forsiktig.", "deleteDescription": "Data kan ikke gjenopprettes etter sletting, vær forsiktig.",
"deleteSubscriptionDescription": "Er du sikker på at du vil slette dette abonnementet?",
"deleteSuccess": "Sletting vellykket", "deleteSuccess": "Sletting vellykket",
"detail": "Detalj", "detail": "Detalj",
"deviceLimit": "Enhetsgrense",
"download": "Last ned",
"downloadTraffic": "Last ned trafikk",
"edit": "rediger", "edit": "rediger",
"editSubscription": "Rediger abonnement",
"editUser": "Rediger bruker", "editUser": "Rediger bruker",
"email": "e-post", "email": "e-post",
"emailNotifications": "E-postvarsler",
"enable": "Aktiver", "enable": "Aktiver",
"expireTime": "Utløpstid",
"expiredAt": "Utløpt Dato",
"failed": "Mislyktes",
"giftAmount": "Gavebeløp", "giftAmount": "Gavebeløp",
"giftAmountPlaceholder": "Skriv inn gavebeløp", "giftAmountPlaceholder": "Skriv inn gavebeløp",
"invalidEmailFormat": "Ugyldig e-postformat", "invalidEmailFormat": "Ugyldig e-postformat",
@ -33,18 +51,47 @@
"inviteCodePlaceholder": "Skriv inn invitasjonskode (la stå tom for å generere)", "inviteCodePlaceholder": "Skriv inn invitasjonskode (la stå tom for å generere)",
"loading": "Laster inn...", "loading": "Laster inn...",
"loginIp": "Innloggings-IP", "loginIp": "Innloggings-IP",
"loginNotifications": "Påloggingsvarsler",
"loginStatus": "Innloggingsstatus",
"loginTime": "Innloggingstid", "loginTime": "Innloggingstid",
"manager": "Leder", "manager": "Leder",
"notifySettingsTitle": "Varslingsinnstillinger",
"onlineDevices": "Tilkoblede enheter",
"password": "Passord", "password": "Passord",
"passwordPlaceholder": "Skriv inn nytt passord (valgfritt)", "passwordPlaceholder": "Skriv inn nytt passord (valgfritt)",
"permanent": "Permanent",
"pleaseEnterEmail": "Vennligst skriv inn e-post",
"referer": "Henviser", "referer": "Henviser",
"refererId": "Henvisnings-ID", "refererId": "Henvisnings-ID",
"refererIdPlaceholder": "Skriv inn referanse-ID", "refererIdPlaceholder": "Skriv inn referanse-ID",
"referralCode": "Henvisningskode",
"referrerUserId": "Henviser (Bruker-ID)",
"remove": "Fjern",
"resetTime": "Tilbakestill tid",
"save": "Lagre",
"searchIp": "Søk IP-adresse", "searchIp": "Søk IP-adresse",
"selectAuthType": "Velg autentiseringstype", "selectAuthType": "Velg autentiseringstype",
"speedLimit": "Fartsgrense",
"subscription": "Abonnement",
"subscriptionDetails": "Abonnementsdetaljer",
"subscriptionList": "Abonnementsliste",
"subscriptionLogs": "Abonnementslogger",
"subscriptionName": "Abonnementsnavn",
"subscriptionNotifications": "Abonnementsvarsler",
"success": "Suksess",
"telegramNotifications": "Telegramvarsler",
"telephone": "Telefonnummer", "telephone": "Telefonnummer",
"telephonePlaceholder": "Skriv inn telefonnummer", "telephonePlaceholder": "Skriv inn telefonnummer",
"totalTraffic": "Total trafikk",
"tradeNotifications": "Handelsvarsler",
"trafficLimit": "Trafikkgrense",
"trafficLogs": "Trafikklogger",
"unlimited": "Ubegrenset",
"unverified": "Ubekreftet",
"update": "Oppdater",
"updateSuccess": "Oppdatering vellykket", "updateSuccess": "Oppdatering vellykket",
"upload": "Last opp",
"uploadTraffic": "Last opp trafikk",
"userAgent": "Brukeragent", "userAgent": "Brukeragent",
"userEmail": "Brukerens e-post", "userEmail": "Brukerens e-post",
"userEmailPlaceholder": "Skriv inn brukers e-post", "userEmailPlaceholder": "Skriv inn brukers e-post",

View File

@ -45,6 +45,7 @@
"60002": "Nie można tymczasowo użyć tej subskrypcji, spróbuj ponownie później.", "60002": "Nie można tymczasowo użyć tej subskrypcji, spróbuj ponownie później.",
"60003": "Wykryto istniejącą subskrypcję. Proszę ją anulować przed kontynuacją.", "60003": "Wykryto istniejącą subskrypcję. Proszę ją anulować przed kontynuacją.",
"60004": "Nie można usunąć w tej chwili, ponieważ subskrypcja ma aktywnych użytkowników.", "60004": "Nie można usunąć w tej chwili, ponieważ subskrypcja ma aktywnych użytkowników.",
"60005": "Tryb pojedynczej subskrypcji przekroczył limit użytkowników",
"70001": "Kod weryfikacyjny jest nieprawidłowy, wprowadź ponownie.", "70001": "Kod weryfikacyjny jest nieprawidłowy, wprowadź ponownie.",
"80001": "Zadanie nie zostało pomyślnie dodane do kolejki, spróbuj ponownie później.", "80001": "Zadanie nie zostało pomyślnie dodane do kolejki, spróbuj ponownie później.",
"90001": "Wyłącz tryb DEBUG i spróbuj ponownie.", "90001": "Wyłącz tryb DEBUG i spróbuj ponownie.",

View File

@ -1,31 +1,49 @@
{ {
"accountEnable": "Aktywacja konta",
"actions": "działania", "actions": "działania",
"add": "Dodaj",
"administrator": "Administrator",
"areaCode": "Kod obszaru", "areaCode": "Kod obszaru",
"areaCodePlaceholder": "Kod obszaru", "areaCodePlaceholder": "Kod obszaru",
"auth": "Autoryzacja", "auth": "Autoryzacja",
"authIdentifier": "Identyfikator uwierzytelniania", "authIdentifier": "Identyfikator uwierzytelniania",
"authIdentifierPlaceholder": "Wprowadź identyfikator uwierzytelniający", "authIdentifierPlaceholder": "Wprowadź identyfikator uwierzytelniający",
"authMethodsTitle": "Ustawienia uwierzytelniania",
"authType": "Typ uwierzytelniania", "authType": "Typ uwierzytelniania",
"authUser": "Użytkownik uwierzytelniony", "authUser": "Użytkownik uwierzytelniony",
"avatar": "Awatar",
"balance": "saldo", "balance": "saldo",
"balanceNotifications": "Powiadomienia o zmianie salda",
"balancePlaceholder": "Saldo", "balancePlaceholder": "Saldo",
"basicInfoTitle": "Podstawowe informacje",
"cancel": "Anuluj", "cancel": "Anuluj",
"commission": "Prowizja", "commission": "Prowizja",
"commissionPlaceholder": "Wprowadź prowizję", "commissionPlaceholder": "Wprowadź prowizję",
"confirm": "Potwierdź", "confirm": "Potwierdź",
"confirmDelete": "Czy na pewno chcesz usunąć?", "confirmDelete": "Czy na pewno chcesz usunąć?",
"confirmOffline": "Potwierdź tryb offline",
"create": "Utwórz", "create": "Utwórz",
"createSubscription": "Utwórz subskrypcję",
"createSuccess": "Utworzono pomyślnie", "createSuccess": "Utworzono pomyślnie",
"createUser": "Utwórz użytkownika", "createUser": "Utwórz użytkownika",
"createdAt": "Czas rejestracji", "createdAt": "Czas rejestracji",
"delete": "usuń", "delete": "usuń",
"deleteDescription": "Po usunięciu danych nie można ich odzyskać, prosimy o ostrożność.", "deleteDescription": "Po usunięciu danych nie można ich odzyskać, prosimy o ostrożność.",
"deleteSubscriptionDescription": "Czy na pewno chcesz usunąć tę subskrypcję?",
"deleteSuccess": "Usunięto pomyślnie", "deleteSuccess": "Usunięto pomyślnie",
"detail": "Szczegóły", "detail": "Szczegóły",
"deviceLimit": "Limit urządzeń",
"download": "Pobierz",
"downloadTraffic": "Pobierz Ruch",
"edit": "edytuj", "edit": "edytuj",
"editSubscription": "Edytuj subskrypcję",
"editUser": "Edytuj użytkownika", "editUser": "Edytuj użytkownika",
"email": "e-mail", "email": "e-mail",
"emailNotifications": "Powiadomienia e-mailowe",
"enable": "Włącz", "enable": "Włącz",
"expireTime": "Czas wygaśnięcia",
"expiredAt": "Data wygaśnięcia",
"failed": "Niepowodzenie",
"giftAmount": "Kwota Prezentu", "giftAmount": "Kwota Prezentu",
"giftAmountPlaceholder": "Wprowadź kwotę prezentu", "giftAmountPlaceholder": "Wprowadź kwotę prezentu",
"invalidEmailFormat": "Nieprawidłowy format adresu e-mail", "invalidEmailFormat": "Nieprawidłowy format adresu e-mail",
@ -33,18 +51,47 @@
"inviteCodePlaceholder": "Wprowadź kod zaproszenia (pozostaw puste, aby wygenerować)", "inviteCodePlaceholder": "Wprowadź kod zaproszenia (pozostaw puste, aby wygenerować)",
"loading": "Ładowanie...", "loading": "Ładowanie...",
"loginIp": "IP logowania", "loginIp": "IP logowania",
"loginNotifications": "Powiadomienia o logowaniu",
"loginStatus": "Status logowania",
"loginTime": "Czas logowania", "loginTime": "Czas logowania",
"manager": "Menedżer", "manager": "Menedżer",
"notifySettingsTitle": "Ustawienia powiadomień",
"onlineDevices": "Urządzenia online",
"password": "Hasło", "password": "Hasło",
"passwordPlaceholder": "Wprowadź nowe hasło (opcjonalnie)", "passwordPlaceholder": "Wprowadź nowe hasło (opcjonalnie)",
"permanent": "Stały",
"pleaseEnterEmail": "Proszę wprowadzić adres e-mail",
"referer": "Polecający", "referer": "Polecający",
"refererId": "Identyfikator polecającego", "refererId": "Identyfikator polecającego",
"refererIdPlaceholder": "Wprowadź identyfikator polecającego", "refererIdPlaceholder": "Wprowadź identyfikator polecającego",
"referralCode": "Kod polecający",
"referrerUserId": "Polecający (ID użytkownika)",
"remove": "Usuń",
"resetTime": "Zresetuj czas",
"save": "Zapisz",
"searchIp": "Wyszukaj adres IP", "searchIp": "Wyszukaj adres IP",
"selectAuthType": "Wybierz typ uwierzytelniania", "selectAuthType": "Wybierz typ uwierzytelniania",
"speedLimit": "Ograniczenie prędkości",
"subscription": "Subskrypcja",
"subscriptionDetails": "Szczegóły subskrypcji",
"subscriptionList": "Lista subskrypcji",
"subscriptionLogs": "Dzienniki subskrypcji",
"subscriptionName": "Nazwa subskrypcji",
"subscriptionNotifications": "Powiadomienia o subskrypcji",
"success": "Sukces",
"telegramNotifications": "Powiadomienia Telegram",
"telephone": "Numer telefonu", "telephone": "Numer telefonu",
"telephonePlaceholder": "Wprowadź numer telefonu", "telephonePlaceholder": "Wprowadź numer telefonu",
"totalTraffic": "Całkowity Ruch",
"tradeNotifications": "Powiadomienia o transakcjach",
"trafficLimit": "Limit ruchu",
"trafficLogs": "Dzienniki Ruchu",
"unlimited": "Nieograniczony",
"unverified": "Niezweryfikowane",
"update": "Aktualizuj",
"updateSuccess": "Aktualizacja zakończona pomyślnie", "updateSuccess": "Aktualizacja zakończona pomyślnie",
"upload": "Prześlij",
"uploadTraffic": "Przesyłanie Ruchu",
"userAgent": "Agent użytkownika", "userAgent": "Agent użytkownika",
"userEmail": "Email użytkownika", "userEmail": "Email użytkownika",
"userEmailPlaceholder": "Wprowadź adres e-mail użytkownika", "userEmailPlaceholder": "Wprowadź adres e-mail użytkownika",

View File

@ -45,6 +45,7 @@
"60002": "Não é possível usar a assinatura no momento, por favor, tente novamente mais tarde.", "60002": "Não é possível usar a assinatura no momento, por favor, tente novamente mais tarde.",
"60003": "Uma assinatura existente foi detectada. Cancele-a antes de prosseguir.", "60003": "Uma assinatura existente foi detectada. Cancele-a antes de prosseguir.",
"60004": "Não é possível excluir no momento, pois a assinatura possui usuários ativos.", "60004": "Não é possível excluir no momento, pois a assinatura possui usuários ativos.",
"60005": "O modo de assinatura única excedeu o limite de usuários",
"70001": "Código de verificação incorreto, por favor, digite novamente.", "70001": "Código de verificação incorreto, por favor, digite novamente.",
"80001": "A tarefa não foi adicionada à fila com sucesso, por favor, tente novamente mais tarde.", "80001": "A tarefa não foi adicionada à fila com sucesso, por favor, tente novamente mais tarde.",
"90001": "Por favor, desative o modo DEBUG e tente novamente.", "90001": "Por favor, desative o modo DEBUG e tente novamente.",

View File

@ -1,31 +1,49 @@
{ {
"accountEnable": "Habilitar Conta",
"actions": "ações", "actions": "ações",
"add": "Adicionar",
"administrator": "Administrador",
"areaCode": "Código de Área", "areaCode": "Código de Área",
"areaCodePlaceholder": "Código de área", "areaCodePlaceholder": "Código de área",
"auth": "Autenticação", "auth": "Autenticação",
"authIdentifier": "Identificador de Autenticação", "authIdentifier": "Identificador de Autenticação",
"authIdentifierPlaceholder": "Digite o identificador de autenticação", "authIdentifierPlaceholder": "Digite o identificador de autenticação",
"authMethodsTitle": "Configurações de Autenticação",
"authType": "Tipo de Autenticação", "authType": "Tipo de Autenticação",
"authUser": "Usuário Autenticado", "authUser": "Usuário Autenticado",
"avatar": "Avatar",
"balance": "Saldo", "balance": "Saldo",
"balanceNotifications": "Notificações de Alteração de Saldo",
"balancePlaceholder": "Saldo", "balancePlaceholder": "Saldo",
"basicInfoTitle": "Informações Básicas",
"cancel": "Cancelar", "cancel": "Cancelar",
"commission": "Comissão", "commission": "Comissão",
"commissionPlaceholder": "Insira a comissão", "commissionPlaceholder": "Insira a comissão",
"confirm": "confirmar", "confirm": "confirmar",
"confirmDelete": "Você tem certeza de que deseja excluir?", "confirmDelete": "Você tem certeza de que deseja excluir?",
"confirmOffline": "Confirmar Offline",
"create": "Criar", "create": "Criar",
"createSubscription": "Criar Assinatura",
"createSuccess": "Criação bem-sucedida", "createSuccess": "Criação bem-sucedida",
"createUser": "Criar Usuário", "createUser": "Criar Usuário",
"createdAt": "Data de Registro", "createdAt": "Data de Registro",
"delete": "Excluir", "delete": "Excluir",
"deleteDescription": "Após a exclusão, os dados não poderão ser recuperados. Proceda com cautela.", "deleteDescription": "Após a exclusão, os dados não poderão ser recuperados. Proceda com cautela.",
"deleteSubscriptionDescription": "Tem certeza de que deseja excluir esta assinatura?",
"deleteSuccess": "Exclusão bem-sucedida", "deleteSuccess": "Exclusão bem-sucedida",
"detail": "Detalhe", "detail": "Detalhe",
"deviceLimit": "Limite de Dispositivos",
"download": "Baixar",
"downloadTraffic": "Baixar Tráfego",
"edit": "editar", "edit": "editar",
"editSubscription": "Editar Assinatura",
"editUser": "Editar Usuário", "editUser": "Editar Usuário",
"email": "e-mail", "email": "e-mail",
"emailNotifications": "Notificações por Email",
"enable": "Habilitar", "enable": "Habilitar",
"expireTime": "Tempo de Expiração",
"expiredAt": "Expirado Em",
"failed": "Falhou",
"giftAmount": "Valor do Presente", "giftAmount": "Valor do Presente",
"giftAmountPlaceholder": "Insira o valor do presente", "giftAmountPlaceholder": "Insira o valor do presente",
"invalidEmailFormat": "Formato de e-mail inválido", "invalidEmailFormat": "Formato de e-mail inválido",
@ -33,18 +51,47 @@
"inviteCodePlaceholder": "Digite o código de convite (deixe em branco para gerar)", "inviteCodePlaceholder": "Digite o código de convite (deixe em branco para gerar)",
"loading": "Carregando...", "loading": "Carregando...",
"loginIp": "IP de Login", "loginIp": "IP de Login",
"loginNotifications": "Notificações de Login",
"loginStatus": "Status de Login",
"loginTime": "Hora de Login", "loginTime": "Hora de Login",
"manager": "Gerente", "manager": "Gerente",
"notifySettingsTitle": "Configurações de Notificação",
"onlineDevices": "Dispositivos Online",
"password": "Senha", "password": "Senha",
"passwordPlaceholder": "Digite a nova senha (opcional)", "passwordPlaceholder": "Digite a nova senha (opcional)",
"permanent": "Permanente",
"pleaseEnterEmail": "Por favor, insira o e-mail",
"referer": "Referente", "referer": "Referente",
"refererId": "ID do Referente", "refererId": "ID do Referente",
"refererIdPlaceholder": "Digite o ID do referenciador", "refererIdPlaceholder": "Digite o ID do referenciador",
"referralCode": "Código de Indicação",
"referrerUserId": "Referente (ID do Usuário)",
"remove": "Remover",
"resetTime": "Redefinir Tempo",
"save": "Salvar",
"searchIp": "Pesquisar endereço IP", "searchIp": "Pesquisar endereço IP",
"selectAuthType": "Selecione o tipo de autenticação", "selectAuthType": "Selecione o tipo de autenticação",
"speedLimit": "Limite de Velocidade",
"subscription": "Assinatura",
"subscriptionDetails": "Detalhes da Assinatura",
"subscriptionList": "Lista de Assinaturas",
"subscriptionLogs": "Registros de Assinatura",
"subscriptionName": "Nome da Assinatura",
"subscriptionNotifications": "Notificações de Assinatura",
"success": "Sucesso",
"telegramNotifications": "Notificações do Telegram",
"telephone": "Número de Telefone", "telephone": "Número de Telefone",
"telephonePlaceholder": "Digite o número de telefone", "telephonePlaceholder": "Digite o número de telefone",
"totalTraffic": "Tráfego Total",
"tradeNotifications": "Notificações de Comércio",
"trafficLimit": "Limite de Tráfego",
"trafficLogs": "Registros de Tráfego",
"unlimited": "Ilimitado",
"unverified": "Não verificado",
"update": "Atualizar",
"updateSuccess": "Atualização bem-sucedida", "updateSuccess": "Atualização bem-sucedida",
"upload": "Enviar",
"uploadTraffic": "Carregar Tráfego",
"userAgent": "Agente do Usuário", "userAgent": "Agente do Usuário",
"userEmail": "E-mail do Usuário", "userEmail": "E-mail do Usuário",
"userEmailPlaceholder": "Digite o e-mail do usuário", "userEmailPlaceholder": "Digite o e-mail do usuário",

View File

@ -45,6 +45,7 @@
"60002": "Nu se poate utiliza momentan acest abonament, vă rugăm să încercați din nou mai târziu.", "60002": "Nu se poate utiliza momentan acest abonament, vă rugăm să încercați din nou mai târziu.",
"60003": "A fost detectat un abonament existent. Vă rugăm să-l anulați înainte de a continua.", "60003": "A fost detectat un abonament existent. Vă rugăm să-l anulați înainte de a continua.",
"60004": "Nu se poate șterge în acest moment, deoarece abonamentul are utilizatori activi.", "60004": "Nu se poate șterge în acest moment, deoarece abonamentul are utilizatori activi.",
"60005": "Modul de abonament unic a depășit limita de utilizatori",
"70001": "Codul de verificare este incorect, vă rugăm să îl introduceți din nou.", "70001": "Codul de verificare este incorect, vă rugăm să îl introduceți din nou.",
"80001": "Sarcina nu a fost adăugată cu succes în coadă, vă rugăm să încercați din nou mai târziu.", "80001": "Sarcina nu a fost adăugată cu succes în coadă, vă rugăm să încercați din nou mai târziu.",
"90001": "Vă rugăm să dezactivați modul DEBUG și să încercați din nou.", "90001": "Vă rugăm să dezactivați modul DEBUG și să încercați din nou.",

View File

@ -1,31 +1,49 @@
{ {
"accountEnable": "Activare Cont",
"actions": "acțiuni", "actions": "acțiuni",
"add": "Adaugă",
"administrator": "Administrator",
"areaCode": "Prefix telefonic", "areaCode": "Prefix telefonic",
"areaCodePlaceholder": "Prefix telefonic", "areaCodePlaceholder": "Prefix telefonic",
"auth": "Autentificare", "auth": "Autentificare",
"authIdentifier": "Identificator de autentificare", "authIdentifier": "Identificator de autentificare",
"authIdentifierPlaceholder": "Introduceți identificatorul de autentificare", "authIdentifierPlaceholder": "Introduceți identificatorul de autentificare",
"authMethodsTitle": "Setări de Autentificare",
"authType": "Tip de autentificare", "authType": "Tip de autentificare",
"authUser": "Utilizator Autentificat", "authUser": "Utilizator Autentificat",
"avatar": "Avatar",
"balance": "Sold", "balance": "Sold",
"balanceNotifications": "Notificări de Schimbare a Soldului",
"balancePlaceholder": "Sold", "balancePlaceholder": "Sold",
"basicInfoTitle": "Informații de bază",
"cancel": "Anulare", "cancel": "Anulare",
"commission": "Comision", "commission": "Comision",
"commissionPlaceholder": "Introduceți comisionul", "commissionPlaceholder": "Introduceți comisionul",
"confirm": "Confirmare", "confirm": "Confirmare",
"confirmDelete": "Sunteți sigur că doriți să ștergeți?", "confirmDelete": "Sunteți sigur că doriți să ștergeți?",
"confirmOffline": "Confirmare Offline",
"create": "crea", "create": "crea",
"createSubscription": "Creează Abonament",
"createSuccess": "Creat cu succes", "createSuccess": "Creat cu succes",
"createUser": "Creează utilizator", "createUser": "Creează utilizator",
"createdAt": "Data înregistrării", "createdAt": "Data înregistrării",
"delete": "șterge", "delete": "șterge",
"deleteDescription": "După ștergere, datele nu pot fi recuperate, vă rugăm să acționați cu prudență.", "deleteDescription": "După ștergere, datele nu pot fi recuperate, vă rugăm să acționați cu prudență.",
"deleteSubscriptionDescription": "Sigur doriți să ștergeți acest abonament?",
"deleteSuccess": "Ștergere reușită", "deleteSuccess": "Ștergere reușită",
"detail": "Detaliu", "detail": "Detaliu",
"deviceLimit": "Limită dispozitiv",
"download": "Descarcă",
"downloadTraffic": "Descărcare Trafic",
"edit": "editează", "edit": "editează",
"editSubscription": "Editează Abonamentul",
"editUser": "Editare utilizator", "editUser": "Editare utilizator",
"email": "e-mail", "email": "e-mail",
"emailNotifications": "Notificări prin email",
"enable": "Activare", "enable": "Activare",
"expireTime": "Timp de expirare",
"expiredAt": "Expiră la",
"failed": "Eșuat",
"giftAmount": "Sumă Cadou", "giftAmount": "Sumă Cadou",
"giftAmountPlaceholder": "Introduceți suma cadoului", "giftAmountPlaceholder": "Introduceți suma cadoului",
"invalidEmailFormat": "Format de email invalid", "invalidEmailFormat": "Format de email invalid",
@ -33,18 +51,47 @@
"inviteCodePlaceholder": "Introduceți codul de invitație (lăsați necompletat pentru a genera)", "inviteCodePlaceholder": "Introduceți codul de invitație (lăsați necompletat pentru a genera)",
"loading": "Se încarcă...", "loading": "Se încarcă...",
"loginIp": "IP de autentificare", "loginIp": "IP de autentificare",
"loginNotifications": "Notificări de autentificare",
"loginStatus": "Stare autentificare",
"loginTime": "Ora de autentificare", "loginTime": "Ora de autentificare",
"manager": "Manager", "manager": "Manager",
"notifySettingsTitle": "Setări notificări",
"onlineDevices": "Dispozitive Online",
"password": "Parolă", "password": "Parolă",
"passwordPlaceholder": "Introduceți o parolă nouă (opțional)", "passwordPlaceholder": "Introduceți o parolă nouă (opțional)",
"permanent": "Permanent",
"pleaseEnterEmail": "Vă rugăm să introduceți adresa de email",
"referer": "Referent", "referer": "Referent",
"refererId": "ID Referent", "refererId": "ID Referent",
"refererIdPlaceholder": "Introduceți ID-ul referentului", "refererIdPlaceholder": "Introduceți ID-ul referentului",
"referralCode": "Cod de recomandare",
"referrerUserId": "Referent (ID Utilizator)",
"remove": "Elimină",
"resetTime": "Resetează Timpul",
"save": "Salvează",
"searchIp": "Caută adresa IP", "searchIp": "Caută adresa IP",
"selectAuthType": "Selectați tipul de autentificare", "selectAuthType": "Selectați tipul de autentificare",
"speedLimit": "Limită de viteză",
"subscription": "Abonament",
"subscriptionDetails": "Detalii abonament",
"subscriptionList": "Listă de abonamente",
"subscriptionLogs": "Jurnale de abonament",
"subscriptionName": "Numele Abonamentului",
"subscriptionNotifications": "Notificări de abonament",
"success": "Succes",
"telegramNotifications": "Notificări Telegram",
"telephone": "Număr de telefon", "telephone": "Număr de telefon",
"telephonePlaceholder": "Introduceți numărul de telefon", "telephonePlaceholder": "Introduceți numărul de telefon",
"totalTraffic": "Trafic Total",
"tradeNotifications": "Notificări de tranzacționare",
"trafficLimit": "Limită de trafic",
"trafficLogs": "Jurnale de trafic",
"unlimited": "Nelimitat",
"unverified": "Neverificat",
"update": "Actualizare",
"updateSuccess": "Actualizare reușită", "updateSuccess": "Actualizare reușită",
"upload": "Încărcare",
"uploadTraffic": "Încărcare Trafic",
"userAgent": "Agent Utilizator", "userAgent": "Agent Utilizator",
"userEmail": "Email utilizator", "userEmail": "Email utilizator",
"userEmailPlaceholder": "Introduceți emailul utilizatorului", "userEmailPlaceholder": "Introduceți emailul utilizatorului",

View File

@ -45,6 +45,7 @@
"60002": "Подписка временно недоступна, пожалуйста, попробуйте позже.", "60002": "Подписка временно недоступна, пожалуйста, попробуйте позже.",
"60003": "Обнаружена существующая подписка. Пожалуйста, отмените ее перед продолжением.", "60003": "Обнаружена существующая подписка. Пожалуйста, отмените ее перед продолжением.",
"60004": "Невозможно удалить в данный момент, так как у подписки есть активные пользователи.", "60004": "Невозможно удалить в данный момент, так как у подписки есть активные пользователи.",
"60005": "Режим одиночной подписки превысил лимит пользователей.",
"70001": "Код подтверждения неверен, пожалуйста, введите его снова.", "70001": "Код подтверждения неверен, пожалуйста, введите его снова.",
"80001": "Задача не была успешно добавлена в очередь, пожалуйста, попробуйте позже.", "80001": "Задача не была успешно добавлена в очередь, пожалуйста, попробуйте позже.",
"90001": "Пожалуйста, отключите режим DEBUG и попробуйте снова.", "90001": "Пожалуйста, отключите режим DEBUG и попробуйте снова.",

View File

@ -1,31 +1,49 @@
{ {
"accountEnable": "Включение аккаунта",
"actions": "действия", "actions": "действия",
"add": "Добавить",
"administrator": "Администратор",
"areaCode": "Код региона", "areaCode": "Код региона",
"areaCodePlaceholder": "Код региона", "areaCodePlaceholder": "Код региона",
"auth": "Авторизация", "auth": "Авторизация",
"authIdentifier": "Идентификатор аутентификации", "authIdentifier": "Идентификатор аутентификации",
"authIdentifierPlaceholder": "Введите идентификатор аутентификации", "authIdentifierPlaceholder": "Введите идентификатор аутентификации",
"authMethodsTitle": "Настройки аутентификации",
"authType": "Тип аутентификации", "authType": "Тип аутентификации",
"authUser": "Авторизованный пользователь", "authUser": "Авторизованный пользователь",
"avatar": "Аватар",
"balance": "Баланс", "balance": "Баланс",
"balanceNotifications": "Уведомления об изменении баланса",
"balancePlaceholder": "Баланс", "balancePlaceholder": "Баланс",
"basicInfoTitle": "Основная информация",
"cancel": "Отмена", "cancel": "Отмена",
"commission": "Комиссия", "commission": "Комиссия",
"commissionPlaceholder": "Введите комиссию", "commissionPlaceholder": "Введите комиссию",
"confirm": "Подтвердить", "confirm": "Подтвердить",
"confirmDelete": "Вы уверены, что хотите удалить?", "confirmDelete": "Вы уверены, что хотите удалить?",
"confirmOffline": "Подтвердить офлайн",
"create": "Создать", "create": "Создать",
"createSubscription": "Создать подписку",
"createSuccess": "Создание успешно", "createSuccess": "Создание успешно",
"createUser": "Создать пользователя", "createUser": "Создать пользователя",
"createdAt": "Время регистрации", "createdAt": "Время регистрации",
"delete": "Удалить", "delete": "Удалить",
"deleteDescription": "После удаления данные не могут быть восстановлены, пожалуйста, действуйте осторожно.", "deleteDescription": "После удаления данные не могут быть восстановлены, пожалуйста, действуйте осторожно.",
"deleteSubscriptionDescription": "Вы уверены, что хотите удалить эту подписку?",
"deleteSuccess": "Удаление успешно", "deleteSuccess": "Удаление успешно",
"detail": "Детали", "detail": "Детали",
"deviceLimit": "Лимит устройств",
"download": "Скачать",
"downloadTraffic": "Скачать трафик",
"edit": "редактировать", "edit": "редактировать",
"editSubscription": "Редактировать подписку",
"editUser": "Редактировать пользователя", "editUser": "Редактировать пользователя",
"email": "Электронная почта", "email": "Электронная почта",
"emailNotifications": "Уведомления по электронной почте",
"enable": "Включить", "enable": "Включить",
"expireTime": "Время истечения",
"expiredAt": "Срок действия истек",
"failed": "Не удалось",
"giftAmount": "Сумма подарка", "giftAmount": "Сумма подарка",
"giftAmountPlaceholder": "Введите сумму подарка", "giftAmountPlaceholder": "Введите сумму подарка",
"invalidEmailFormat": "Неверный формат электронной почты", "invalidEmailFormat": "Неверный формат электронной почты",
@ -33,18 +51,47 @@
"inviteCodePlaceholder": "Введите код приглашения (оставьте пустым для генерации)", "inviteCodePlaceholder": "Введите код приглашения (оставьте пустым для генерации)",
"loading": "Загрузка...", "loading": "Загрузка...",
"loginIp": "IP-адрес входа", "loginIp": "IP-адрес входа",
"loginNotifications": "Уведомления о входе",
"loginStatus": "Статус входа",
"loginTime": "Время входа", "loginTime": "Время входа",
"manager": "Менеджер", "manager": "Менеджер",
"notifySettingsTitle": "Настройки уведомлений",
"onlineDevices": "Подключенные устройства",
"password": "Пароль", "password": "Пароль",
"passwordPlaceholder": "Введите новый пароль (необязательно)", "passwordPlaceholder": "Введите новый пароль (необязательно)",
"permanent": "Постоянный",
"pleaseEnterEmail": "Пожалуйста, введите адрес электронной почты",
"referer": "Реферер", "referer": "Реферер",
"refererId": "ID реферера", "refererId": "ID реферера",
"refererIdPlaceholder": "Введите ID реферера", "refererIdPlaceholder": "Введите ID реферера",
"referralCode": "Реферальный код",
"referrerUserId": "Реферер (ID пользователя)",
"remove": "Удалить",
"resetTime": "Сброс времени",
"save": "Сохранить",
"searchIp": "Поиск IP-адреса", "searchIp": "Поиск IP-адреса",
"selectAuthType": "Выберите тип аутентификации", "selectAuthType": "Выберите тип аутентификации",
"speedLimit": "Ограничение скорости",
"subscription": "Подписка",
"subscriptionDetails": "Детали подписки",
"subscriptionList": "Список подписок",
"subscriptionLogs": "Журналы подписки",
"subscriptionName": "Название подписки",
"subscriptionNotifications": "Уведомления о подписке",
"success": "Успех",
"telegramNotifications": "Уведомления Telegram",
"telephone": "Номер телефона", "telephone": "Номер телефона",
"telephonePlaceholder": "Введите номер телефона", "telephonePlaceholder": "Введите номер телефона",
"totalTraffic": "Общий трафик",
"tradeNotifications": "Уведомления о торговле",
"trafficLimit": "Лимит трафика",
"trafficLogs": "Журналы трафика",
"unlimited": "Неограниченный",
"unverified": "Неподтверждено",
"update": "Обновить",
"updateSuccess": "Обновление успешно", "updateSuccess": "Обновление успешно",
"upload": "Загрузить",
"uploadTraffic": "Загрузка трафика",
"userAgent": "Пользовательский агент", "userAgent": "Пользовательский агент",
"userEmail": "Электронная почта пользователя", "userEmail": "Электронная почта пользователя",
"userEmailPlaceholder": "Введите электронную почту пользователя", "userEmailPlaceholder": "Введите электронную почту пользователя",

View File

@ -45,6 +45,7 @@
"60002": "ไม่สามารถใช้การสมัครสมาชิกนี้ได้ในขณะนี้ กรุณาลองใหม่อีกครั้งในภายหลัง", "60002": "ไม่สามารถใช้การสมัครสมาชิกนี้ได้ในขณะนี้ กรุณาลองใหม่อีกครั้งในภายหลัง",
"60003": "ตรวจพบการสมัครสมาชิกที่มีอยู่ กรุณายกเลิกก่อนดำเนินการต่อ", "60003": "ตรวจพบการสมัครสมาชิกที่มีอยู่ กรุณายกเลิกก่อนดำเนินการต่อ",
"60004": "ไม่สามารถลบได้ในขณะนี้เนื่องจากการสมัครมีผู้ใช้ที่ใช้งานอยู่", "60004": "ไม่สามารถลบได้ในขณะนี้เนื่องจากการสมัครมีผู้ใช้ที่ใช้งานอยู่",
"60005": "โหมดการสมัครสมาชิกรายเดียวได้เกินขีดจำกัดของผู้ใช้",
"70001": "รหัสยืนยันไม่ถูกต้อง กรุณาป้อนใหม่อีกครั้ง", "70001": "รหัสยืนยันไม่ถูกต้อง กรุณาป้อนใหม่อีกครั้ง",
"80001": "งานไม่สำเร็จในการเข้าคิว กรุณาลองใหม่อีกครั้งในภายหลัง", "80001": "งานไม่สำเร็จในการเข้าคิว กรุณาลองใหม่อีกครั้งในภายหลัง",
"90001": "กรุณาปิดโหมด DEBUG ก่อนลองใหม่อีกครั้ง", "90001": "กรุณาปิดโหมด DEBUG ก่อนลองใหม่อีกครั้ง",

View File

@ -1,31 +1,49 @@
{ {
"accountEnable": "เปิดใช้งานบัญชี",
"actions": "การดำเนินการ", "actions": "การดำเนินการ",
"add": "เพิ่ม",
"administrator": "ผู้ดูแลระบบ",
"areaCode": "รหัสพื้นที่", "areaCode": "รหัสพื้นที่",
"areaCodePlaceholder": "รหัสพื้นที่", "areaCodePlaceholder": "รหัสพื้นที่",
"auth": "การยืนยันตัวตน", "auth": "การยืนยันตัวตน",
"authIdentifier": "ตัวระบุการยืนยันตัวตน", "authIdentifier": "ตัวระบุการยืนยันตัวตน",
"authIdentifierPlaceholder": "กรอกตัวระบุการยืนยันตัวตน", "authIdentifierPlaceholder": "กรอกตัวระบุการยืนยันตัวตน",
"authMethodsTitle": "การตั้งค่าการยืนยันตัวตน",
"authType": "ประเภทการยืนยันตัวตน", "authType": "ประเภทการยืนยันตัวตน",
"authUser": "ผู้ใช้ที่ได้รับอนุญาต", "authUser": "ผู้ใช้ที่ได้รับอนุญาต",
"avatar": "อวตาร",
"balance": "ยอดคงเหลือ", "balance": "ยอดคงเหลือ",
"balanceNotifications": "การแจ้งเตือนการเปลี่ยนแปลงยอดเงิน",
"balancePlaceholder": "ยอดคงเหลือ", "balancePlaceholder": "ยอดคงเหลือ",
"basicInfoTitle": "ข้อมูลพื้นฐาน",
"cancel": "ยกเลิก", "cancel": "ยกเลิก",
"commission": "คอมมิชชั่น", "commission": "คอมมิชชั่น",
"commissionPlaceholder": "กรอกค่าคอมมิชชั่น", "commissionPlaceholder": "กรอกค่าคอมมิชชั่น",
"confirm": "ยืนยัน", "confirm": "ยืนยัน",
"confirmDelete": "คุณแน่ใจหรือว่าต้องการลบ?", "confirmDelete": "คุณแน่ใจหรือว่าต้องการลบ?",
"confirmOffline": "ยืนยันออฟไลน์",
"create": "สร้าง", "create": "สร้าง",
"createSubscription": "สร้างการสมัครสมาชิก",
"createSuccess": "สร้างสำเร็จ", "createSuccess": "สร้างสำเร็จ",
"createUser": "สร้างผู้ใช้", "createUser": "สร้างผู้ใช้",
"createdAt": "เวลาที่ลงทะเบียน", "createdAt": "เวลาที่ลงทะเบียน",
"delete": "ลบ", "delete": "ลบ",
"deleteDescription": "หลังจากลบแล้วจะไม่สามารถกู้คืนข้อมูลได้ โปรดดำเนินการด้วยความระมัดระวัง", "deleteDescription": "หลังจากลบแล้วจะไม่สามารถกู้คืนข้อมูลได้ โปรดดำเนินการด้วยความระมัดระวัง",
"deleteSubscriptionDescription": "คุณแน่ใจหรือไม่ว่าต้องการลบการสมัครสมาชิกนี้?",
"deleteSuccess": "ลบสำเร็จ", "deleteSuccess": "ลบสำเร็จ",
"detail": "รายละเอียด", "detail": "รายละเอียด",
"deviceLimit": "จำกัดอุปกรณ์",
"download": "ดาวน์โหลด",
"downloadTraffic": "ดาวน์โหลดการจราจร",
"edit": "แก้ไข", "edit": "แก้ไข",
"editSubscription": "แก้ไขการสมัครสมาชิก",
"editUser": "แก้ไขผู้ใช้", "editUser": "แก้ไขผู้ใช้",
"email": "อีเมล", "email": "อีเมล",
"emailNotifications": "การแจ้งเตือนทางอีเมล",
"enable": "เปิดใช้งาน", "enable": "เปิดใช้งาน",
"expireTime": "เวลาหมดอายุ",
"expiredAt": "วันหมดอายุ",
"failed": "ล้มเหลว",
"giftAmount": "จำนวนเงินของขวัญ", "giftAmount": "จำนวนเงินของขวัญ",
"giftAmountPlaceholder": "กรอกจำนวนเงินของขวัญ", "giftAmountPlaceholder": "กรอกจำนวนเงินของขวัญ",
"invalidEmailFormat": "รูปแบบอีเมลไม่ถูกต้อง", "invalidEmailFormat": "รูปแบบอีเมลไม่ถูกต้อง",
@ -33,18 +51,47 @@
"inviteCodePlaceholder": "กรอกรหัสเชิญ (เว้นว่างไว้เพื่อสร้างใหม่)", "inviteCodePlaceholder": "กรอกรหัสเชิญ (เว้นว่างไว้เพื่อสร้างใหม่)",
"loading": "กำลังโหลด...", "loading": "กำลังโหลด...",
"loginIp": "ไอพีที่เข้าสู่ระบบ", "loginIp": "ไอพีที่เข้าสู่ระบบ",
"loginNotifications": "การแจ้งเตือนการเข้าสู่ระบบ",
"loginStatus": "สถานะการเข้าสู่ระบบ",
"loginTime": "เวลาเข้าสู่ระบบ", "loginTime": "เวลาเข้าสู่ระบบ",
"manager": "ผู้จัดการ", "manager": "ผู้จัดการ",
"notifySettingsTitle": "การตั้งค่าการแจ้งเตือน",
"onlineDevices": "อุปกรณ์ที่ออนไลน์",
"password": "รหัสผ่าน", "password": "รหัสผ่าน",
"passwordPlaceholder": "กรุณาใส่รหัสผ่านใหม่ (ไม่บังคับ)", "passwordPlaceholder": "กรุณาใส่รหัสผ่านใหม่ (ไม่บังคับ)",
"permanent": "ถาวร",
"pleaseEnterEmail": "กรุณาใส่อีเมล",
"referer": "ผู้แนะนำ", "referer": "ผู้แนะนำ",
"refererId": "รหัสผู้แนะนำ", "refererId": "รหัสผู้แนะนำ",
"refererIdPlaceholder": "กรอก ID ผู้แนะนำ", "refererIdPlaceholder": "กรอก ID ผู้แนะนำ",
"referralCode": "รหัสแนะนำ",
"referrerUserId": "ผู้อ้างอิง (รหัสผู้ใช้)",
"remove": "ลบ",
"resetTime": "รีเซ็ตเวลา",
"save": "บันทึก",
"searchIp": "ค้นหาที่อยู่ IP", "searchIp": "ค้นหาที่อยู่ IP",
"selectAuthType": "เลือกประเภทการยืนยันตัวตน", "selectAuthType": "เลือกประเภทการยืนยันตัวตน",
"speedLimit": "จำกัดความเร็ว",
"subscription": "การสมัครสมาชิก",
"subscriptionDetails": "รายละเอียดการสมัครสมาชิก",
"subscriptionList": "รายการสมัครสมาชิก",
"subscriptionLogs": "บันทึกการสมัครสมาชิก",
"subscriptionName": "ชื่อการสมัครสมาชิก",
"subscriptionNotifications": "การแจ้งเตือนการสมัครสมาชิก",
"success": "สำเร็จ",
"telegramNotifications": "การแจ้งเตือนทาง Telegram",
"telephone": "หมายเลขโทรศัพท์", "telephone": "หมายเลขโทรศัพท์",
"telephonePlaceholder": "กรอกหมายเลขโทรศัพท์", "telephonePlaceholder": "กรอกหมายเลขโทรศัพท์",
"totalTraffic": "การจราจรทั้งหมด",
"tradeNotifications": "การแจ้งเตือนการซื้อขาย",
"trafficLimit": "ขีดจำกัดการจราจร",
"trafficLogs": "บันทึกการจราจร",
"unlimited": "ไม่จำกัด",
"unverified": "ยังไม่ได้รับการยืนยัน",
"update": "อัปเดต",
"updateSuccess": "อัปเดตสำเร็จ", "updateSuccess": "อัปเดตสำเร็จ",
"upload": "อัปโหลด",
"uploadTraffic": "อัปโหลดทราฟฟิก",
"userAgent": "ตัวแทนผู้ใช้", "userAgent": "ตัวแทนผู้ใช้",
"userEmail": "อีเมลผู้ใช้", "userEmail": "อีเมลผู้ใช้",
"userEmailPlaceholder": "กรอกอีเมลผู้ใช้", "userEmailPlaceholder": "กรอกอีเมลผู้ใช้",

View File

@ -45,6 +45,7 @@
"60002": "Bu abonelik şu anda kullanılamıyor, lütfen daha sonra tekrar deneyin.", "60002": "Bu abonelik şu anda kullanılamıyor, lütfen daha sonra tekrar deneyin.",
"60003": "Mevcut bir abonelik tespit edildi. Lütfen devam etmeden önce iptal edin.", "60003": "Mevcut bir abonelik tespit edildi. Lütfen devam etmeden önce iptal edin.",
"60004": "Aboneliğin aktif kullanıcıları olduğu için şu anda silinemiyor.", "60004": "Aboneliğin aktif kullanıcıları olduğu için şu anda silinemiyor.",
"60005": "Tek abonelik modu kullanıcı sınırını aştı",
"70001": "Doğrulama kodu hatalı, lütfen tekrar girin.", "70001": "Doğrulama kodu hatalı, lütfen tekrar girin.",
"80001": "Görev kuyruğa başarıyla eklenemedi, lütfen daha sonra tekrar deneyin.", "80001": "Görev kuyruğa başarıyla eklenemedi, lütfen daha sonra tekrar deneyin.",
"90001": "Lütfen DEBUG modunu kapatıp tekrar deneyin.", "90001": "Lütfen DEBUG modunu kapatıp tekrar deneyin.",

View File

@ -1,31 +1,49 @@
{ {
"accountEnable": "Hesap Etkinleştir",
"actions": "eylemler", "actions": "eylemler",
"add": "Ekle",
"administrator": "Yönetici",
"areaCode": "Alan Kodu", "areaCode": "Alan Kodu",
"areaCodePlaceholder": "Alan kodu", "areaCodePlaceholder": "Alan kodu",
"auth": "Kimlik Doğrulama", "auth": "Kimlik Doğrulama",
"authIdentifier": "Kimlik Doğrulama Tanımlayıcısı", "authIdentifier": "Kimlik Doğrulama Tanımlayıcısı",
"authIdentifierPlaceholder": "Kimlik doğrulama tanımlayıcısını girin", "authIdentifierPlaceholder": "Kimlik doğrulama tanımlayıcısını girin",
"authMethodsTitle": "Kimlik Doğrulama Ayarları",
"authType": "Kimlik Doğrulama Türü", "authType": "Kimlik Doğrulama Türü",
"authUser": "Yetkili Kullanıcı", "authUser": "Yetkili Kullanıcı",
"avatar": "Avatar",
"balance": "Bakiye", "balance": "Bakiye",
"balanceNotifications": "Bakiye Değişiklik Bildirimleri",
"balancePlaceholder": "Bakiye", "balancePlaceholder": "Bakiye",
"basicInfoTitle": "Temel Bilgiler",
"cancel": "İptal", "cancel": "İptal",
"commission": "Komisyon", "commission": "Komisyon",
"commissionPlaceholder": "Komisyonu girin", "commissionPlaceholder": "Komisyonu girin",
"confirm": "Onayla", "confirm": "Onayla",
"confirmDelete": "Silmek istediğinizden emin misiniz?", "confirmDelete": "Silmek istediğinizden emin misiniz?",
"confirmOffline": "Çevrimdışı Onayla",
"create": "oluştur", "create": "oluştur",
"createSubscription": "Abonelik Oluştur",
"createSuccess": "Başarıyla oluşturuldu", "createSuccess": "Başarıyla oluşturuldu",
"createUser": "Kullanıcı Oluştur", "createUser": "Kullanıcı Oluştur",
"createdAt": "Kayıt Tarihi", "createdAt": "Kayıt Tarihi",
"delete": "sil", "delete": "sil",
"deleteDescription": "Silindikten sonra veriler kurtarılamaz, lütfen dikkatli olun.", "deleteDescription": "Silindikten sonra veriler kurtarılamaz, lütfen dikkatli olun.",
"deleteSubscriptionDescription": "Bu aboneliği silmek istediğinizden emin misiniz?",
"deleteSuccess": "Başarıyla silindi", "deleteSuccess": "Başarıyla silindi",
"detail": "Detay", "detail": "Detay",
"deviceLimit": "Cihaz Sınırı",
"download": "İndir",
"downloadTraffic": "Trafiği İndir",
"edit": "düzenle", "edit": "düzenle",
"editSubscription": "Aboneliği Düzenle",
"editUser": "Kullanıcıyı Düzenle", "editUser": "Kullanıcıyı Düzenle",
"email": "e-posta", "email": "e-posta",
"emailNotifications": "E-posta Bildirimleri",
"enable": "etkinleştir", "enable": "etkinleştir",
"expireTime": "Sona Erme Zamanı",
"expiredAt": "Son Kullanma Tarihi",
"failed": "Başarısız",
"giftAmount": "Hediye Miktarı", "giftAmount": "Hediye Miktarı",
"giftAmountPlaceholder": "Hediye tutarını girin", "giftAmountPlaceholder": "Hediye tutarını girin",
"invalidEmailFormat": "Geçersiz e-posta formatı", "invalidEmailFormat": "Geçersiz e-posta formatı",
@ -33,18 +51,47 @@
"inviteCodePlaceholder": "Davet kodunu girin (oluşturmak için boş bırakın)", "inviteCodePlaceholder": "Davet kodunu girin (oluşturmak için boş bırakın)",
"loading": "Yükleniyor...", "loading": "Yükleniyor...",
"loginIp": "Giriş IP'si", "loginIp": "Giriş IP'si",
"loginNotifications": "Giriş Bildirimleri",
"loginStatus": "Giriş Durumu",
"loginTime": "Giriş Zamanı", "loginTime": "Giriş Zamanı",
"manager": "Yönetici", "manager": "Yönetici",
"notifySettingsTitle": "Bildirim Ayarları",
"onlineDevices": "Çevrimiçi Cihazlar",
"password": "Şifre", "password": "Şifre",
"passwordPlaceholder": "Yeni şifreyi girin (isteğe bağlı)", "passwordPlaceholder": "Yeni şifreyi girin (isteğe bağlı)",
"permanent": "Kalıcı",
"pleaseEnterEmail": "Lütfen e-posta adresinizi girin",
"referer": "Referans", "referer": "Referans",
"refererId": "Referans Kimliği", "refererId": "Referans Kimliği",
"refererIdPlaceholder": "Referans kimliğini girin", "refererIdPlaceholder": "Referans kimliğini girin",
"referralCode": "Referans Kodu",
"referrerUserId": "Yönlendiren (Kullanıcı Kimliği)",
"remove": "Kaldır",
"resetTime": "Sıfırlama Zamanı",
"save": "Kaydet",
"searchIp": "IP adresi ara", "searchIp": "IP adresi ara",
"selectAuthType": "Kimlik doğrulama türünü seçin", "selectAuthType": "Kimlik doğrulama türünü seçin",
"speedLimit": "Hız Sınırı",
"subscription": "Abonelik",
"subscriptionDetails": "Abonelik Ayrıntıları",
"subscriptionList": "Abonelik Listesi",
"subscriptionLogs": "Abonelik Kayıtları",
"subscriptionName": "Abonelik Adı",
"subscriptionNotifications": "Abonelik Bildirimleri",
"success": "Başarı",
"telegramNotifications": "Telegram Bildirimleri",
"telephone": "Telefon Numarası", "telephone": "Telefon Numarası",
"telephonePlaceholder": "Telefon numarasını girin", "telephonePlaceholder": "Telefon numarasını girin",
"totalTraffic": "Toplam Trafik",
"tradeNotifications": "Ticaret Bildirimleri",
"trafficLimit": "Trafik Limiti",
"trafficLogs": "Trafik Günlükleri",
"unlimited": "Sınırsız",
"unverified": "Doğrulanmamış",
"update": "Güncelle",
"updateSuccess": "Güncelleme başarılı", "updateSuccess": "Güncelleme başarılı",
"upload": "Yükle",
"uploadTraffic": "Yükleme Trafiği",
"userAgent": "Kullanıcı Aracısı", "userAgent": "Kullanıcı Aracısı",
"userEmail": "Kullanıcı E-postası", "userEmail": "Kullanıcı E-postası",
"userEmailPlaceholder": "Kullanıcı e-postasını girin", "userEmailPlaceholder": "Kullanıcı e-postasını girin",

View File

@ -45,6 +45,7 @@
"60002": "Тимчасово неможливо використовувати цю підписку, спробуйте пізніше.", "60002": "Тимчасово неможливо використовувати цю підписку, спробуйте пізніше.",
"60003": "Виявлено існуючу підписку. Будь ласка, скасуйте її перед продовженням.", "60003": "Виявлено існуючу підписку. Будь ласка, скасуйте її перед продовженням.",
"60004": "Неможливо видалити, оскільки підписка має активних користувачів.", "60004": "Неможливо видалити, оскільки підписка має активних користувачів.",
"60005": "Режим одиночної підписки перевищив ліміт користувачів",
"70001": "Код перевірки неправильний, введіть його знову.", "70001": "Код перевірки неправильний, введіть його знову.",
"80001": "Завдання не вдалося додати до черги, спробуйте пізніше.", "80001": "Завдання не вдалося додати до черги, спробуйте пізніше.",
"90001": "Вимкніть режим DEBUG і спробуйте знову.", "90001": "Вимкніть режим DEBUG і спробуйте знову.",

View File

@ -1,31 +1,49 @@
{ {
"accountEnable": "Увімкнення облікового запису",
"actions": "дії", "actions": "дії",
"add": "Додати",
"administrator": "Адміністратор",
"areaCode": "Код регіону", "areaCode": "Код регіону",
"areaCodePlaceholder": "Код області", "areaCodePlaceholder": "Код області",
"auth": "Авторизація", "auth": "Авторизація",
"authIdentifier": "Ідентифікатор автентифікації", "authIdentifier": "Ідентифікатор автентифікації",
"authIdentifierPlaceholder": "Введіть ідентифікатор авторизації", "authIdentifierPlaceholder": "Введіть ідентифікатор авторизації",
"authMethodsTitle": "Налаштування автентифікації",
"authType": "Тип автентифікації", "authType": "Тип автентифікації",
"authUser": "Авторизований користувач", "authUser": "Авторизований користувач",
"avatar": "Аватар",
"balance": "Баланс", "balance": "Баланс",
"balanceNotifications": "Сповіщення про зміну балансу",
"balancePlaceholder": "Баланс", "balancePlaceholder": "Баланс",
"basicInfoTitle": "Основна інформація",
"cancel": "Скасувати", "cancel": "Скасувати",
"commission": "Комісія", "commission": "Комісія",
"commissionPlaceholder": "Введіть комісію", "commissionPlaceholder": "Введіть комісію",
"confirm": "Підтвердити", "confirm": "Підтвердити",
"confirmDelete": "Ви впевнені, що хочете видалити?", "confirmDelete": "Ви впевнені, що хочете видалити?",
"confirmOffline": "Підтвердити офлайн",
"create": "створити", "create": "створити",
"createSubscription": "Створити підписку",
"createSuccess": "Створено успішно", "createSuccess": "Створено успішно",
"createUser": "Створити користувача", "createUser": "Створити користувача",
"createdAt": "Час реєстрації", "createdAt": "Час реєстрації",
"delete": "Видалити", "delete": "Видалити",
"deleteDescription": "Після видалення дані не можна буде відновити, будь ласка, дійте обережно.", "deleteDescription": "Після видалення дані не можна буде відновити, будь ласка, дійте обережно.",
"deleteSubscriptionDescription": "Ви впевнені, що хочете видалити цю підписку?",
"deleteSuccess": "Видалення успішне", "deleteSuccess": "Видалення успішне",
"detail": "Деталі", "detail": "Деталі",
"deviceLimit": "Ліміт пристроїв",
"download": "Завантажити",
"downloadTraffic": "Завантажити трафік",
"edit": "редагувати", "edit": "редагувати",
"editSubscription": "Редагувати підписку",
"editUser": "Редагувати користувача", "editUser": "Редагувати користувача",
"email": "електронна пошта", "email": "електронна пошта",
"emailNotifications": "Сповіщення електронною поштою",
"enable": "Увімкнути", "enable": "Увімкнути",
"expireTime": "Час закінчення",
"expiredAt": "Термін дії закінчився",
"failed": "Не вдалося",
"giftAmount": "Сума подарунка", "giftAmount": "Сума подарунка",
"giftAmountPlaceholder": "Введіть суму подарунка", "giftAmountPlaceholder": "Введіть суму подарунка",
"invalidEmailFormat": "Неправильний формат електронної пошти", "invalidEmailFormat": "Неправильний формат електронної пошти",
@ -33,18 +51,47 @@
"inviteCodePlaceholder": "Введіть код запрошення (залиште порожнім для генерації)", "inviteCodePlaceholder": "Введіть код запрошення (залиште порожнім для генерації)",
"loading": "Завантаження...", "loading": "Завантаження...",
"loginIp": "IP-адреса входу", "loginIp": "IP-адреса входу",
"loginNotifications": "Сповіщення про вхід",
"loginStatus": "Статус входу",
"loginTime": "Час входу", "loginTime": "Час входу",
"manager": "Менеджер", "manager": "Менеджер",
"notifySettingsTitle": "Налаштування сповіщень",
"onlineDevices": "Пристрої в мережі",
"password": "Пароль", "password": "Пароль",
"passwordPlaceholder": "Введіть новий пароль (необов'язково)", "passwordPlaceholder": "Введіть новий пароль (необов'язково)",
"permanent": "Постійний",
"pleaseEnterEmail": "Будь ласка, введіть електронну пошту",
"referer": "Реферер", "referer": "Реферер",
"refererId": "Ідентифікатор реферера", "refererId": "Ідентифікатор реферера",
"refererIdPlaceholder": "Введіть ID реферера", "refererIdPlaceholder": "Введіть ID реферера",
"referralCode": "Реферальний код",
"referrerUserId": "Реферер (ID користувача)",
"remove": "Видалити",
"resetTime": "Скинути час",
"save": "Зберегти",
"searchIp": "Пошук IP-адреси", "searchIp": "Пошук IP-адреси",
"selectAuthType": "Виберіть тип автентифікації", "selectAuthType": "Виберіть тип автентифікації",
"speedLimit": "Обмеження швидкості",
"subscription": "Підписка",
"subscriptionDetails": "Деталі підписки",
"subscriptionList": "Список підписок",
"subscriptionLogs": "Журнали підписки",
"subscriptionName": "Назва підписки",
"subscriptionNotifications": "Сповіщення про підписку",
"success": "Успіх",
"telegramNotifications": "Сповіщення Telegram",
"telephone": "Номер телефону", "telephone": "Номер телефону",
"telephonePlaceholder": "Введіть номер телефону", "telephonePlaceholder": "Введіть номер телефону",
"totalTraffic": "Загальний трафік",
"tradeNotifications": "Сповіщення про торгівлю",
"trafficLimit": "Ліміт трафіку",
"trafficLogs": "Журнали трафіку",
"unlimited": "Необмежено",
"unverified": "Непідтверджено",
"update": "Оновити",
"updateSuccess": "Оновлення успішне", "updateSuccess": "Оновлення успішне",
"upload": "Завантажити",
"uploadTraffic": "Завантажити трафік",
"userAgent": "Агент користувача", "userAgent": "Агент користувача",
"userEmail": "Електронна пошта користувача", "userEmail": "Електронна пошта користувача",
"userEmailPlaceholder": "Введіть електронну адресу користувача", "userEmailPlaceholder": "Введіть електронну адресу користувача",

View File

@ -45,6 +45,7 @@
"60002": "Tạm thời không thể sử dụng đăng ký này, vui lòng thử lại sau.", "60002": "Tạm thời không thể sử dụng đăng ký này, vui lòng thử lại sau.",
"60003": "Phát hiện đăng ký hiện có. Vui lòng hủy trước khi tiếp tục.", "60003": "Phát hiện đăng ký hiện có. Vui lòng hủy trước khi tiếp tục.",
"60004": "Không thể xóa vào lúc này vì đăng ký có người dùng đang hoạt động.", "60004": "Không thể xóa vào lúc này vì đăng ký có người dùng đang hoạt động.",
"60005": "Chế độ đăng ký đơn đã vượt quá giới hạn người dùng.",
"70001": "Mã xác nhận không chính xác, vui lòng nhập lại.", "70001": "Mã xác nhận không chính xác, vui lòng nhập lại.",
"80001": "Nhiệm vụ không được thêm vào hàng đợi thành công, vui lòng thử lại sau.", "80001": "Nhiệm vụ không được thêm vào hàng đợi thành công, vui lòng thử lại sau.",
"90001": "Vui lòng tắt chế độ DEBUG trước khi thử lại.", "90001": "Vui lòng tắt chế độ DEBUG trước khi thử lại.",

View File

@ -1,31 +1,49 @@
{ {
"accountEnable": "Kích hoạt tài khoản",
"actions": "Hành động", "actions": "Hành động",
"add": "Thêm",
"administrator": "Quản trị viên",
"areaCode": "Mã Vùng", "areaCode": "Mã Vùng",
"areaCodePlaceholder": "Mã vùng", "areaCodePlaceholder": "Mã vùng",
"auth": "Xác thực", "auth": "Xác thực",
"authIdentifier": "Định danh Xác thực", "authIdentifier": "Định danh Xác thực",
"authIdentifierPlaceholder": "Nhập mã xác thực", "authIdentifierPlaceholder": "Nhập mã xác thực",
"authMethodsTitle": "Cài Đặt Xác Thực",
"authType": "Loại xác thực", "authType": "Loại xác thực",
"authUser": "Người Dùng Xác Thực", "authUser": "Người Dùng Xác Thực",
"avatar": "Hình đại diện",
"balance": "Số dư", "balance": "Số dư",
"balanceNotifications": "Thông Báo Thay Đổi Số Dư",
"balancePlaceholder": "Số dư", "balancePlaceholder": "Số dư",
"basicInfoTitle": "Thông Tin Cơ Bản",
"cancel": "Hủy", "cancel": "Hủy",
"commission": "Hoa hồng", "commission": "Hoa hồng",
"commissionPlaceholder": "Nhập hoa hồng", "commissionPlaceholder": "Nhập hoa hồng",
"confirm": "Xác nhận", "confirm": "Xác nhận",
"confirmDelete": "Bạn có chắc chắn muốn xóa không?", "confirmDelete": "Bạn có chắc chắn muốn xóa không?",
"confirmOffline": "Xác nhận Ngoại tuyến",
"create": "Tạo", "create": "Tạo",
"createSubscription": "Tạo Đăng Ký",
"createSuccess": "Tạo thành công", "createSuccess": "Tạo thành công",
"createUser": "Tạo người dùng", "createUser": "Tạo người dùng",
"createdAt": "Thời gian đăng ký", "createdAt": "Thời gian đăng ký",
"delete": "Xóa", "delete": "Xóa",
"deleteDescription": "Sau khi xóa, dữ liệu không thể khôi phục, hãy thao tác cẩn thận.", "deleteDescription": "Sau khi xóa, dữ liệu không thể khôi phục, hãy thao tác cẩn thận.",
"deleteSubscriptionDescription": "Bạn có chắc chắn muốn xóa đăng ký này không?",
"deleteSuccess": "Xóa thành công", "deleteSuccess": "Xóa thành công",
"detail": "Chi tiết", "detail": "Chi tiết",
"deviceLimit": "Giới hạn thiết bị",
"download": "Tải về",
"downloadTraffic": "Tải xuống Lưu lượng",
"edit": "Chỉnh sửa", "edit": "Chỉnh sửa",
"editSubscription": "Chỉnh sửa Đăng ký",
"editUser": "Chỉnh sửa người dùng", "editUser": "Chỉnh sửa người dùng",
"email": "Email", "email": "Email",
"emailNotifications": "Thông báo qua Email",
"enable": "Kích hoạt", "enable": "Kích hoạt",
"expireTime": "Thời gian hết hạn",
"expiredAt": "Ngày hết hạn",
"failed": "Thất bại",
"giftAmount": "Số tiền quà tặng", "giftAmount": "Số tiền quà tặng",
"giftAmountPlaceholder": "Nhập số tiền quà tặng", "giftAmountPlaceholder": "Nhập số tiền quà tặng",
"invalidEmailFormat": "Định dạng email không hợp lệ", "invalidEmailFormat": "Định dạng email không hợp lệ",
@ -33,18 +51,47 @@
"inviteCodePlaceholder": "Nhập mã mời (để trống để tạo mới)", "inviteCodePlaceholder": "Nhập mã mời (để trống để tạo mới)",
"loading": "Đang tải...", "loading": "Đang tải...",
"loginIp": "Địa chỉ IP đăng nhập", "loginIp": "Địa chỉ IP đăng nhập",
"loginNotifications": "Thông báo Đăng nhập",
"loginStatus": "Trạng thái đăng nhập",
"loginTime": "Thời gian đăng nhập", "loginTime": "Thời gian đăng nhập",
"manager": "Quản lý", "manager": "Quản lý",
"notifySettingsTitle": "Cài Đặt Thông Báo",
"onlineDevices": "Thiết bị trực tuyến",
"password": "Mật khẩu", "password": "Mật khẩu",
"passwordPlaceholder": "Nhập mật khẩu mới (không bắt buộc)", "passwordPlaceholder": "Nhập mật khẩu mới (không bắt buộc)",
"permanent": "Vĩnh viễn",
"pleaseEnterEmail": "Vui lòng nhập email",
"referer": "Người giới thiệu", "referer": "Người giới thiệu",
"refererId": "ID người giới thiệu", "refererId": "ID người giới thiệu",
"refererIdPlaceholder": "Nhập mã người giới thiệu", "refererIdPlaceholder": "Nhập mã người giới thiệu",
"referralCode": "Mã Giới Thiệu",
"referrerUserId": "Người giới thiệu (ID người dùng)",
"remove": "Xóa",
"resetTime": "Thời Gian Đặt Lại",
"save": "Lưu",
"searchIp": "Tìm kiếm địa chỉ IP", "searchIp": "Tìm kiếm địa chỉ IP",
"selectAuthType": "Chọn loại xác thực", "selectAuthType": "Chọn loại xác thực",
"speedLimit": "Giới hạn tốc độ",
"subscription": "Đăng ký",
"subscriptionDetails": "Chi Tiết Đăng Ký",
"subscriptionList": "Danh sách đăng ký",
"subscriptionLogs": "Nhật ký Đăng ký",
"subscriptionName": "Tên Đăng Ký",
"subscriptionNotifications": "Thông báo Đăng ký",
"success": "Thành công",
"telegramNotifications": "Thông báo Telegram",
"telephone": "Số điện thoại", "telephone": "Số điện thoại",
"telephonePlaceholder": "Nhập số điện thoại", "telephonePlaceholder": "Nhập số điện thoại",
"totalTraffic": "Tổng Lưu Lượng",
"tradeNotifications": "Thông báo Giao dịch",
"trafficLimit": "Giới hạn lưu lượng",
"trafficLogs": "Nhật ký lưu lượng",
"unlimited": "Không giới hạn",
"unverified": "Chưa được xác minh",
"update": "Cập nhật",
"updateSuccess": "Cập nhật thành công", "updateSuccess": "Cập nhật thành công",
"upload": "Tải lên",
"uploadTraffic": "Tải lên Lưu lượng",
"userAgent": "Tác nhân người dùng", "userAgent": "Tác nhân người dùng",
"userEmail": "Email Người Dùng", "userEmail": "Email Người Dùng",
"userEmailPlaceholder": "Nhập email người dùng", "userEmailPlaceholder": "Nhập email người dùng",

View File

@ -45,6 +45,7 @@
"60002": "暂时无法使用该订阅,请稍后再试。", "60002": "暂时无法使用该订阅,请稍后再试。",
"60003": "检测到已有订阅。请取消后再继续。", "60003": "检测到已有订阅。请取消后再继续。",
"60004": "暂时无法删除,订阅存在正常激活的用户。", "60004": "暂时无法删除,订阅存在正常激活的用户。",
"60005": "单一订阅模式已超过用户限制.",
"70001": "验证码有误,请重新输入。", "70001": "验证码有误,请重新输入。",
"80001": "任务未成功加入队列,请稍后重试。", "80001": "任务未成功加入队列,请稍后重试。",
"90001": "请关闭 DEBUG 模式后再试。", "90001": "请关闭 DEBUG 模式后再试。",

View File

@ -1,31 +1,49 @@
{ {
"accountEnable": "账户启用",
"actions": "操作", "actions": "操作",
"add": "添加",
"administrator": "管理员",
"areaCode": "区号", "areaCode": "区号",
"areaCodePlaceholder": "区号", "areaCodePlaceholder": "区号",
"auth": "认证", "auth": "认证",
"authIdentifier": "认证标识符", "authIdentifier": "认证标识符",
"authIdentifierPlaceholder": "输入认证标识符", "authIdentifierPlaceholder": "输入认证标识符",
"authMethodsTitle": "身份验证设置",
"authType": "认证类型", "authType": "认证类型",
"authUser": "授权用户", "authUser": "授权用户",
"avatar": "头像",
"balance": "余额", "balance": "余额",
"balanceNotifications": "余额变动通知",
"balancePlaceholder": "余额", "balancePlaceholder": "余额",
"basicInfoTitle": "基本信息",
"cancel": "取消", "cancel": "取消",
"commission": "佣金", "commission": "佣金",
"commissionPlaceholder": "输入佣金", "commissionPlaceholder": "输入佣金",
"confirm": "确认", "confirm": "确认",
"confirmDelete": "您确定要删除吗?", "confirmDelete": "您确定要删除吗?",
"confirmOffline": "确认离线",
"create": "创建", "create": "创建",
"createSubscription": "创建订阅",
"createSuccess": "创建成功", "createSuccess": "创建成功",
"createUser": "创建用户", "createUser": "创建用户",
"createdAt": "注册时间", "createdAt": "注册时间",
"delete": "删除", "delete": "删除",
"deleteDescription": "删除后无法恢复数据,请谨慎操作。", "deleteDescription": "删除后无法恢复数据,请谨慎操作。",
"deleteSubscriptionDescription": "您确定要删除此订阅吗?",
"deleteSuccess": "删除成功", "deleteSuccess": "删除成功",
"detail": "详情", "detail": "详情",
"deviceLimit": "设备限制",
"download": "下载",
"downloadTraffic": "下载流量",
"edit": "编辑", "edit": "编辑",
"editSubscription": "编辑订阅",
"editUser": "编辑用户", "editUser": "编辑用户",
"email": "邮箱", "email": "邮箱",
"emailNotifications": "电子邮件通知",
"enable": "启用", "enable": "启用",
"expireTime": "过期时间",
"expiredAt": "过期时间",
"failed": "失败",
"giftAmount": "礼物金额", "giftAmount": "礼物金额",
"giftAmountPlaceholder": "输入礼品金额", "giftAmountPlaceholder": "输入礼品金额",
"invalidEmailFormat": "电子邮件格式无效", "invalidEmailFormat": "电子邮件格式无效",
@ -33,18 +51,47 @@
"inviteCodePlaceholder": "输入邀请码(留空以生成)", "inviteCodePlaceholder": "输入邀请码(留空以生成)",
"loading": "加载中...", "loading": "加载中...",
"loginIp": "登录IP", "loginIp": "登录IP",
"loginNotifications": "登录通知",
"loginStatus": "登录状态",
"loginTime": "登录时间", "loginTime": "登录时间",
"manager": "经理", "manager": "经理",
"notifySettingsTitle": "通知设置",
"onlineDevices": "在线设备",
"password": "密码", "password": "密码",
"passwordPlaceholder": "输入新密码(可选)", "passwordPlaceholder": "输入新密码(可选)",
"permanent": "永久",
"pleaseEnterEmail": "请输入电子邮件",
"referer": "推荐人", "referer": "推荐人",
"refererId": "推荐人ID", "refererId": "推荐人ID",
"refererIdPlaceholder": "输入推荐人ID", "refererIdPlaceholder": "输入推荐人ID",
"referralCode": "推荐码",
"referrerUserId": "推荐人用户ID",
"remove": "移除",
"resetTime": "重置时间",
"save": "保存",
"searchIp": "搜索IP地址", "searchIp": "搜索IP地址",
"selectAuthType": "选择认证类型", "selectAuthType": "选择认证类型",
"speedLimit": "限速",
"subscription": "订阅",
"subscriptionDetails": "订阅详情",
"subscriptionList": "订阅列表",
"subscriptionLogs": "订阅日志",
"subscriptionName": "订阅名称",
"subscriptionNotifications": "订阅通知",
"success": "成功",
"telegramNotifications": "Telegram 通知",
"telephone": "电话号码", "telephone": "电话号码",
"telephonePlaceholder": "输入电话号码", "telephonePlaceholder": "输入电话号码",
"totalTraffic": "总流量",
"tradeNotifications": "交易通知",
"trafficLimit": "流量限制",
"trafficLogs": "流量日志",
"unlimited": "无限",
"unverified": "未验证",
"update": "更新",
"updateSuccess": "更新成功", "updateSuccess": "更新成功",
"upload": "上传",
"uploadTraffic": "上传流量",
"userAgent": "用户代理", "userAgent": "用户代理",
"userEmail": "用户邮箱", "userEmail": "用户邮箱",
"userEmailPlaceholder": "输入用户邮箱", "userEmailPlaceholder": "输入用户邮箱",

View File

@ -45,6 +45,7 @@
"60002": "暫時無法使用該訂閱,請稍後再試。", "60002": "暫時無法使用該訂閱,請稍後再試。",
"60003": "偵測到現有訂閱。請取消後再繼續。", "60003": "偵測到現有訂閱。請取消後再繼續。",
"60004": "暫時無法刪除,訂閱存在正常啟用的用戶。", "60004": "暫時無法刪除,訂閱存在正常啟用的用戶。",
"60005": "單一訂閱模式已超過用戶限制.",
"70001": "驗證碼有誤,請重新輸入。", "70001": "驗證碼有誤,請重新輸入。",
"80001": "任務未成功加入隊列,請稍後重試。", "80001": "任務未成功加入隊列,請稍後重試。",
"90001": "請關閉 DEBUG 模式後再試。", "90001": "請關閉 DEBUG 模式後再試。",

View File

@ -1,31 +1,49 @@
{ {
"accountEnable": "帳戶啟用",
"actions": "操作", "actions": "操作",
"add": "新增",
"administrator": "管理員",
"areaCode": "地區代碼", "areaCode": "地區代碼",
"areaCodePlaceholder": "區號", "areaCodePlaceholder": "區號",
"auth": "認證", "auth": "認證",
"authIdentifier": "認證識別碼", "authIdentifier": "認證識別碼",
"authIdentifierPlaceholder": "輸入認證識別碼", "authIdentifierPlaceholder": "輸入認證識別碼",
"authMethodsTitle": "身份驗證設定",
"authType": "認證類型", "authType": "認證類型",
"authUser": "授權用戶", "authUser": "授權用戶",
"avatar": "頭像",
"balance": "餘額", "balance": "餘額",
"balanceNotifications": "結餘變動通知",
"balancePlaceholder": "結餘", "balancePlaceholder": "結餘",
"basicInfoTitle": "基本資料",
"cancel": "取消", "cancel": "取消",
"commission": "佣金", "commission": "佣金",
"commissionPlaceholder": "輸入佣金", "commissionPlaceholder": "輸入佣金",
"confirm": "確認", "confirm": "確認",
"confirmDelete": "您確定要刪除嗎?", "confirmDelete": "您確定要刪除嗎?",
"confirmOffline": "確認離線",
"create": "建立", "create": "建立",
"createSubscription": "建立訂閱",
"createSuccess": "建立成功", "createSuccess": "建立成功",
"createUser": "建立使用者", "createUser": "建立使用者",
"createdAt": "註冊時間", "createdAt": "註冊時間",
"delete": "刪除", "delete": "刪除",
"deleteDescription": "刪除後無法恢復資料,請謹慎操作。", "deleteDescription": "刪除後無法恢復資料,請謹慎操作。",
"deleteSubscriptionDescription": "您確定要刪除此訂閱嗎?",
"deleteSuccess": "刪除成功", "deleteSuccess": "刪除成功",
"detail": "詳情", "detail": "詳情",
"deviceLimit": "裝置限制",
"download": "下載",
"downloadTraffic": "下載流量",
"edit": "編輯", "edit": "編輯",
"editSubscription": "編輯訂閱",
"editUser": "編輯使用者", "editUser": "編輯使用者",
"email": "電子郵件", "email": "電子郵件",
"emailNotifications": "電郵通知",
"enable": "啟用", "enable": "啟用",
"expireTime": "到期時間",
"expiredAt": "到期時間",
"failed": "失敗",
"giftAmount": "禮物金額", "giftAmount": "禮物金額",
"giftAmountPlaceholder": "輸入禮物金額", "giftAmountPlaceholder": "輸入禮物金額",
"invalidEmailFormat": "電郵格式無效", "invalidEmailFormat": "電郵格式無效",
@ -33,18 +51,47 @@
"inviteCodePlaceholder": "輸入邀請碼(留空以生成)", "inviteCodePlaceholder": "輸入邀請碼(留空以生成)",
"loading": "載入中...", "loading": "載入中...",
"loginIp": "登入 IP", "loginIp": "登入 IP",
"loginNotifications": "登入通知",
"loginStatus": "登入狀態",
"loginTime": "登入時間", "loginTime": "登入時間",
"manager": "經理", "manager": "經理",
"notifySettingsTitle": "通知設定",
"onlineDevices": "在線裝置",
"password": "密碼", "password": "密碼",
"passwordPlaceholder": "輸入新密碼(可選)", "passwordPlaceholder": "輸入新密碼(可選)",
"permanent": "永久",
"pleaseEnterEmail": "請輸入電郵地址",
"referer": "推薦人", "referer": "推薦人",
"refererId": "推薦人 ID", "refererId": "推薦人 ID",
"refererIdPlaceholder": "輸入推薦人 ID", "refererIdPlaceholder": "輸入推薦人 ID",
"referralCode": "推薦碼",
"referrerUserId": "推薦人(用戶 ID",
"remove": "移除",
"resetTime": "重設時間",
"save": "儲存",
"searchIp": "搜尋IP地址", "searchIp": "搜尋IP地址",
"selectAuthType": "選擇認證類型", "selectAuthType": "選擇認證類型",
"speedLimit": "速度限制",
"subscription": "訂閱",
"subscriptionDetails": "訂閱詳情",
"subscriptionList": "訂閱列表",
"subscriptionLogs": "訂閱日誌",
"subscriptionName": "訂閱名稱",
"subscriptionNotifications": "訂閱通知",
"success": "成功",
"telegramNotifications": "Telegram 通知",
"telephone": "電話號碼", "telephone": "電話號碼",
"telephonePlaceholder": "輸入電話號碼", "telephonePlaceholder": "輸入電話號碼",
"totalTraffic": "總流量",
"tradeNotifications": "交易通知",
"trafficLimit": "流量限制",
"trafficLogs": "流量日誌",
"unlimited": "無限",
"unverified": "未經驗證",
"update": "更新",
"updateSuccess": "更新成功", "updateSuccess": "更新成功",
"upload": "上載",
"uploadTraffic": "上載流量",
"userAgent": "用戶代理", "userAgent": "用戶代理",
"userEmail": "用戶電郵", "userEmail": "用戶電郵",
"userEmailPlaceholder": "輸入用戶電郵", "userEmailPlaceholder": "輸入用戶電郵",

View File

@ -67,7 +67,7 @@
"zh-CN", "zh-CN",
"zh-HK" "zh-HK"
], ],
"modelName": "gpt-4o", "modelName": "gpt-4o-mini",
"experimental": { "experimental": {
"jsonMode": true "jsonMode": true
}, },

View File

@ -0,0 +1,93 @@
// @ts-ignore
/* eslint-disable */
import request from '@/utils/request';
/** Get auth method config GET /v1/admin/auth-method/config */
export async function getAuthMethodConfig(
// 叠加生成的Param类型 (非body参数swagger默认没有生成对象)
params: API.GetAuthMethodConfigParams,
options?: { [key: string]: any },
) {
return request<API.Response & { data?: API.AuthMethodConfig }>('/v1/admin/auth-method/config', {
method: 'GET',
params: {
...params,
},
...(options || {}),
});
}
/** Update auth method config PUT /v1/admin/auth-method/config */
export async function updateAuthMethodConfig(
body: API.UpdataAuthMethodConfigRequest,
options?: { [key: string]: any },
) {
return request<API.Response & { data?: API.AuthMethodConfig }>('/v1/admin/auth-method/config', {
method: 'PUT',
headers: {
'Content-Type': 'application/json',
},
data: body,
...(options || {}),
});
}
/** Get email support platform GET /v1/admin/auth-method/email_platform */
export async function getEmailPlatform(options?: { [key: string]: any }) {
return request<API.Response & { data?: API.PlatformResponse }>(
'/v1/admin/auth-method/email_platform',
{
method: 'GET',
...(options || {}),
},
);
}
/** Get auth method list GET /v1/admin/auth-method/list */
export async function getAuthMethodList(options?: { [key: string]: any }) {
return request<API.Response & { data?: API.GetAuthMethodListResponse }>(
'/v1/admin/auth-method/list',
{
method: 'GET',
...(options || {}),
},
);
}
/** Get sms support platform GET /v1/admin/auth-method/sms_platform */
export async function getSmsPlatform(options?: { [key: string]: any }) {
return request<API.Response & { data?: API.PlatformResponse }>(
'/v1/admin/auth-method/sms_platform',
{
method: 'GET',
...(options || {}),
},
);
}
/** Test email send POST /v1/admin/auth-method/test_email_send */
export async function testEmailSend(
body: API.TestEmailSendRequest,
options?: { [key: string]: any },
) {
return request<API.Response & { data?: any }>('/v1/admin/auth-method/test_email_send', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
},
data: body,
...(options || {}),
});
}
/** Test sms send POST /v1/admin/auth-method/test_sms_send */
export async function testSmsSend(body: API.TestSmsSendRequest, options?: { [key: string]: any }) {
return request<API.Response & { data?: any }>('/v1/admin/auth-method/test_sms_send', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
},
data: body,
...(options || {}),
});
}

View File

@ -3,6 +3,7 @@
// API 更新时间: // API 更新时间:
// API 唯一标识: // API 唯一标识:
import * as announcement from './announcement'; import * as announcement from './announcement';
import * as authMethod from './authMethod';
import * as console from './console'; import * as console from './console';
import * as coupon from './coupon'; import * as coupon from './coupon';
import * as document from './document'; import * as document from './document';
@ -17,6 +18,7 @@ import * as tool from './tool';
import * as user from './user'; import * as user from './user';
export default { export default {
announcement, announcement,
authMethod,
console, console,
coupon, coupon,
document, document,

View File

@ -154,6 +154,62 @@ export async function getNodeList(
}); });
} }
/** Update rule group PUT /v1/admin/server/rule_group */
export async function updateRuleGroup(
body: API.UpdateRuleGroupRequest,
options?: { [key: string]: any },
) {
return request<API.Response & { data?: any }>('/v1/admin/server/rule_group', {
method: 'PUT',
headers: {
'Content-Type': 'application/json',
},
data: body,
...(options || {}),
});
}
/** Create rule group POST /v1/admin/server/rule_group */
export async function createRuleGroup(
body: API.CreateRuleGroupRequest,
options?: { [key: string]: any },
) {
return request<API.Response & { data?: any }>('/v1/admin/server/rule_group', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
},
data: body,
...(options || {}),
});
}
/** Delete rule group DELETE /v1/admin/server/rule_group */
export async function deleteRuleGroup(
body: API.DeleteRuleGroupRequest,
options?: { [key: string]: any },
) {
return request<API.Response & { data?: any }>('/v1/admin/server/rule_group', {
method: 'DELETE',
headers: {
'Content-Type': 'application/json',
},
data: body,
...(options || {}),
});
}
/** Get rule group list GET /v1/admin/server/rule_group_list */
export async function getRuleGroupList(options?: { [key: string]: any }) {
return request<API.Response & { data?: API.GetRuleGroupResponse }>(
'/v1/admin/server/rule_group_list',
{
method: 'GET',
...(options || {}),
},
);
}
/** Node sort POST /v1/admin/server/sort */ /** Node sort POST /v1/admin/server/sort */
export async function nodeSort(body: API.NodeSortRequest, options?: { [key: string]: any }) { export async function nodeSort(body: API.NodeSortRequest, options?: { [key: string]: any }) {
return request<API.Response & { data?: any }>('/v1/admin/server/sort', { return request<API.Response & { data?: any }>('/v1/admin/server/sort', {

View File

@ -152,29 +152,6 @@ export async function updateCurrencyConfig(
}); });
} }
/** Get email smtp config GET /v1/admin/system/email_config */
export async function getEmailSmtpConfig(options?: { [key: string]: any }) {
return request<API.Response & { data?: API.EmailSmtpConfig }>('/v1/admin/system/email_config', {
method: 'GET',
...(options || {}),
});
}
/** Update email smtp config PUT /v1/admin/system/email_config */
export async function updateEmailSmtpConfig(
body: API.EmailSmtpConfig,
options?: { [key: string]: any },
) {
return request<API.Response & { data?: any }>('/v1/admin/system/email_config', {
method: 'PUT',
headers: {
'Content-Type': 'application/json',
},
data: body,
...(options || {}),
});
}
/** Get Node Multiplier GET /v1/admin/system/get_node_multiplier */ /** Get Node Multiplier GET /v1/admin/system/get_node_multiplier */
export async function getNodeMultiplier(options?: { [key: string]: any }) { export async function getNodeMultiplier(options?: { [key: string]: any }) {
return request<API.Response & { data?: API.GetNodeMultiplierResponse }>( return request<API.Response & { data?: API.GetNodeMultiplierResponse }>(
@ -226,47 +203,6 @@ export async function updateNodeConfig(body: API.NodeConfig, options?: { [key: s
}); });
} }
/** Get oauth config GET /v1/admin/system/oauth_config */
export async function getOAuthConfig(options?: { [key: string]: any }) {
return request<API.Response & { data?: API.GetOAuthConfigResponse }>(
'/v1/admin/system/oauth_config',
{
method: 'GET',
...(options || {}),
},
);
}
/** Update oauth config PUT /v1/admin/system/oauth_config */
export async function updateOAuthConfig(
body: API.UpdateOAuthConfig,
options?: { [key: string]: any },
) {
return request<API.Response & { data?: any }>('/v1/admin/system/oauth_config', {
method: 'PUT',
headers: {
'Content-Type': 'application/json',
},
data: body,
...(options || {}),
});
}
/** Get OAuth Config By Platform GET /v1/admin/system/oauth/platform */
export async function getOAuthByPlatform(
// 叠加生成的Param类型 (非body参数swagger默认没有生成对象)
params: API.GetOAuthByPlatformParams,
options?: { [key: string]: any },
) {
return request<API.Response & { data?: API.OAuthMethod }>('/v1/admin/system/oauth/platform', {
method: 'GET',
params: {
...params,
},
...(options || {}),
});
}
/** Get register config GET /v1/admin/system/register_config */ /** Get register config GET /v1/admin/system/register_config */
export async function getRegisterConfig(options?: { [key: string]: any }) { export async function getRegisterConfig(options?: { [key: string]: any }) {
return request<API.Response & { data?: API.RegisterConfig }>('/v1/admin/system/register_config', { return request<API.Response & { data?: API.RegisterConfig }>('/v1/admin/system/register_config', {
@ -333,37 +269,6 @@ export async function updateSiteConfig(body: API.SiteConfig, options?: { [key: s
}); });
} }
/** Get sms config GET /v1/admin/system/sms_config */
export async function getSmsConfig(options?: { [key: string]: any }) {
return request<API.Response & { data?: API.SmsConfig }>('/v1/admin/system/sms_config', {
method: 'GET',
...(options || {}),
});
}
/** Get sms config PUT /v1/admin/system/sms_config */
export async function updateSmsConfig(body: API.SmsConfig, options?: { [key: string]: any }) {
return request<API.Response & { data?: any }>('/v1/admin/system/sms_config', {
method: 'PUT',
headers: {
'Content-Type': 'application/json',
},
data: body,
...(options || {}),
});
}
/** Get sms config GET /v1/admin/system/sms_platform */
export async function getSmsPlatform(options?: { [key: string]: any }) {
return request<API.Response & { data?: API.SmsPlatformResponse }>(
'/v1/admin/system/sms_platform',
{
method: 'GET',
...(options || {}),
},
);
}
/** Get subscribe config GET /v1/admin/system/subscribe_config */ /** Get subscribe config GET /v1/admin/system/subscribe_config */
export async function getSubscribeConfig(options?: { [key: string]: any }) { export async function getSubscribeConfig(options?: { [key: string]: any }) {
return request<API.Response & { data?: API.SubscribeConfig }>( return request<API.Response & { data?: API.SubscribeConfig }>(
@ -421,33 +326,6 @@ export async function updateTelegramConfig(
}); });
} }
/** Test email smtp POST /v1/admin/system/test_email */
export async function testEmailSmtp(
body: API.TestEmailSmtpRequest,
options?: { [key: string]: any },
) {
return request<API.Response & { data?: any }>('/v1/admin/system/test_email', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
},
data: body,
...(options || {}),
});
}
/** Test sms send POST /v1/admin/system/test_sms */
export async function testSmsSend(body: API.SendSmsRequest, options?: { [key: string]: any }) {
return request<API.Response & { data?: any }>('/v1/admin/system/test_sms', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
},
data: body,
...(options || {}),
});
}
/** Get Team of Service Config GET /v1/admin/system/tos_config */ /** Get Team of Service Config GET /v1/admin/system/tos_config */
export async function getTosConfig(options?: { [key: string]: any }) { export async function getTosConfig(options?: { [key: string]: any }) {
return request<API.Response & { data?: API.TosConfig }>('/v1/admin/system/tos_config', { return request<API.Response & { data?: API.TosConfig }>('/v1/admin/system/tos_config', {

View File

@ -66,15 +66,16 @@ declare namespace API {
}; };
type AuthConfig = { type AuthConfig = {
sms: SmsAuthenticateConfig; sms: MobileAuthenticateConfig;
email: EmailAuthticateConfig; email: EmailAuthticateConfig;
register: RegisterConfig; register: RegisterConfig;
}; };
type AuthMethod = { type AuthMethodConfig = {
auth_type: string; id: number;
auth_identifier: string; method: string;
verified: boolean; config: Record<string, any>;
enabled: boolean;
}; };
type BatchDeleteCouponRequest = { type BatchDeleteCouponRequest = {
@ -204,6 +205,13 @@ declare namespace API {
subscribe_id?: number; subscribe_id?: number;
}; };
type CreateRuleGroupRequest = {
name: string;
icon: string;
description: string;
enable: boolean;
};
type CreateSubscribeGroupRequest = { type CreateSubscribeGroupRequest = {
name: string; name: string;
description: string; description: string;
@ -260,6 +268,13 @@ declare namespace API {
is_admin: boolean; is_admin: boolean;
}; };
type CreateUserSubscribeRequest = {
user_id: number;
expired_at: number;
traffic: number;
subscribe_id: number;
};
type CurrencyConfig = { type CurrencyConfig = {
currency_unit: string; currency_unit: string;
currency_symbol: string; currency_symbol: string;
@ -293,6 +308,10 @@ declare namespace API {
id: number; id: number;
}; };
type DeleteRuleGroupRequest = {
id: number;
};
type DeleteSubscribeGroupRequest = { type DeleteSubscribeGroupRequest = {
id: number; id: number;
}; };
@ -301,6 +320,11 @@ declare namespace API {
id: number; id: number;
}; };
type DeleteUserAuthMethodRequest = {
user_id: number;
auth_type: string;
};
type DeleteUserDeivceRequest = { type DeleteUserDeivceRequest = {
id: number; id: number;
}; };
@ -320,26 +344,10 @@ declare namespace API {
}; };
type EmailAuthticateConfig = { type EmailAuthticateConfig = {
email_enabled: boolean; enable: boolean;
email_enable_verify: boolean; enable_verify: boolean;
email_enable_domain_suffix: boolean; enable_domain_suffix: boolean;
email_domain_suffix_list: string; domain_suffix_list: string;
};
type EmailSmtpConfig = {
email_enabled: boolean;
email_smtp_host: string;
email_smtp_port: number;
email_smtp_user: string;
email_smtp_pass: string;
email_smtp_from: string;
email_smtp_ssl: boolean;
verify_email_template: string;
maintenance_email_template: string;
expiration_email_template: string;
email_enable_verify: boolean;
email_enable_domain_suffix: boolean;
email_domain_suffix_list: string;
}; };
type EpayConfig = { type EpayConfig = {
@ -392,6 +400,18 @@ declare namespace API {
id: number; id: number;
}; };
type GetAuthMethodConfigParams = {
method: string;
};
type GetAuthMethodConfigRequest = {
method: string;
};
type GetAuthMethodListResponse = {
list: AuthMethodConfig[];
};
type GetCouponListParams = { type GetCouponListParams = {
page: number; page: number;
size: number; size: number;
@ -476,18 +496,6 @@ declare namespace API {
list: Server[]; list: Server[];
}; };
type GetOAuthByPlatformParams = {
platform: string;
};
type GetOAuthByPlatformRequest = {
platform: string;
};
type GetOAuthConfigResponse = {
list: OAuthMethod[];
};
type GetOrderListParams = { type GetOrderListParams = {
page: number; page: number;
size: number; size: number;
@ -511,6 +519,11 @@ declare namespace API {
list: Order[]; list: Order[];
}; };
type GetRuleGroupResponse = {
total: number;
list: ServerRuleGroup[];
};
type GetSmsListParams = { type GetSmsListParams = {
page: number; page: number;
size: number; size: number;
@ -525,7 +538,7 @@ declare namespace API {
type GetSmsListResponse = { type GetSmsListResponse = {
total: number; total: number;
list: Sms[]; list: SMS[];
}; };
type GetSubscribeDetailsParams = { type GetSubscribeDetailsParams = {
@ -594,7 +607,7 @@ declare namespace API {
}; };
type GetUserAuthMethodResponse = { type GetUserAuthMethodResponse = {
auth_methods: AuthMethod[]; auth_methods: UserAuthMethod[];
}; };
type GetUserDetailParams = { type GetUserDetailParams = {
@ -618,6 +631,97 @@ declare namespace API {
list: User[]; list: User[];
}; };
type GetUserLoginLogsParams = {
page: number;
size: number;
user_id: number;
};
type GetUserLoginLogsRequest = {
page: number;
size: number;
user_id: number;
};
type GetUserLoginLogsResponse = {
list: UserLoginLog[];
total: number;
};
type GetUserSubscribeDevicesParams = {
page: number;
size: number;
user_id: number;
subscribe_id: number;
};
type GetUserSubscribeDevicesRequest = {
page: number;
size: number;
user_id: number;
subscribe_id: number;
};
type GetUserSubscribeDevicesResponse = {
list: UserDevice[];
total: number;
};
type GetUserSubscribeListRequest = {
page: number;
size: number;
user_id: number;
};
type GetUserSubscribeListResponse = {
list: UserSubscribe[];
total: number;
};
type GetUserSubscribeLogsParams = {
page: number;
size: number;
user_id: number;
subscribe_id?: number;
};
type GetUserSubscribeLogsRequest = {
page: number;
size: number;
user_id: number;
subscribe_id?: number;
};
type GetUserSubscribeLogsResponse = {
list: UserSubscribeLog[];
total: number;
};
type GetUserSubscribeParams = {
page: number;
size: number;
user_id: number;
};
type GetUserSubscribeTrafficLogsParams = {
page: number;
size: number;
user_id: number;
subscribe_id: number;
};
type GetUserSubscribeTrafficLogsRequest = {
page: number;
size: number;
user_id: number;
subscribe_id: number;
};
type GetUserSubscribeTrafficLogsResponse = {
list: TrafficLog[];
total: number;
};
type Hysteria2 = { type Hysteria2 = {
port: number; port: number;
hop_ports: string; hop_ports: string;
@ -632,10 +736,21 @@ declare namespace API {
only_first_purchase: boolean; only_first_purchase: boolean;
}; };
type KickOfflineRequest = {
id: number;
};
type LogResponse = { type LogResponse = {
list: Record<string, any>; list: Record<string, any>;
}; };
type MobileAuthenticateConfig = {
enable: boolean;
limit: number;
interval: number;
expire_time: number;
};
type NodeConfig = { type NodeConfig = {
node_secret: string; node_secret: string;
node_pull_interval: number; node_pull_interval: number;
@ -658,16 +773,6 @@ declare namespace API {
last_at: number; last_at: number;
}; };
type OAuthMethod = {
id: number;
platform: string;
config: Record<string, any>;
redirect: string;
enabled: boolean;
created_at: number;
updated_at: number;
};
type OnlineUser = { type OnlineUser = {
uid: number; uid: number;
ip: string; ip: string;
@ -739,6 +844,16 @@ declare namespace API {
enable: boolean; enable: boolean;
}; };
type PlatformInfo = {
platform: string;
platform_url: string;
platform_field_description: Record<string, any>;
};
type PlatformResponse = {
list: PlatformInfo[];
};
type RegisterConfig = { type RegisterConfig = {
stop_register: boolean; stop_register: boolean;
enable_trial: boolean; enable_trial: boolean;
@ -773,12 +888,6 @@ declare namespace API {
reality_short_id: string; reality_short_id: string;
}; };
type SendSmsRequest = {
content: string;
area_code: string;
telephone: string;
};
type Server = { type Server = {
id: number; id: number;
tags: string[]; tags: string[];
@ -808,6 +917,16 @@ declare namespace API {
updated_at: number; updated_at: number;
}; };
type ServerRuleGroup = {
id: number;
name: string;
icon: string;
description: string;
enable: boolean;
created_at: number;
updated_at: number;
};
type ServerStatus = { type ServerStatus = {
cpu: number; cpu: number;
mem: number; mem: number;
@ -854,7 +973,7 @@ declare namespace API {
site_logo: string; site_logo: string;
}; };
type Sms = { type SMS = {
id: string; id: string;
content: string; content: string;
platform: string; platform: string;
@ -864,36 +983,6 @@ declare namespace API {
created_at: number; created_at: number;
}; };
type SmsAuthenticateConfig = {
sms_enabled: boolean;
sms_limit: number;
sms_interval: number;
sms_expire_time: number;
};
type SmsConfig = {
sms_enabled: boolean;
sms_key: string;
sms_secret: string;
sms_template: string;
sms_template_code: string;
sms_template_param: string;
sms_platform: string;
sms_limit: number;
sms_interval: number;
sms_expire_time: number;
};
type SmsPlatformInfo = {
platform: string;
platform_url: string;
platform_field_description: Record<string, any>;
};
type SmsPlatformResponse = {
list: SmsPlatformInfo[];
};
type SortItem = { type SortItem = {
id: number; id: number;
sort: number; sort: number;
@ -996,10 +1085,15 @@ declare namespace API {
telegram_web_hook_domain: string; telegram_web_hook_domain: string;
}; };
type TestEmailSmtpRequest = { type TestEmailSendRequest = {
email: string; email: string;
}; };
type TestSmsSendRequest = {
area_code: string;
telephone: string;
};
type Ticket = { type Ticket = {
id: number; id: number;
title: string; title: string;
@ -1025,6 +1119,16 @@ declare namespace API {
tos_content: string; tos_content: string;
}; };
type TrafficLog = {
id: number;
server_id: number;
user_id: number;
subscribe_id: number;
download: number;
upload: number;
timestamp: number;
};
type TransportConfig = { type TransportConfig = {
path: string; path: string;
host: string; host: string;
@ -1044,6 +1148,13 @@ declare namespace API {
security_config: SecurityConfig; security_config: SecurityConfig;
}; };
type UpdataAuthMethodConfigRequest = {
id: number;
method: string;
config: Record<string, any>;
enabled: boolean;
};
type UpdateAlipayF2fRequest = { type UpdateAlipayF2fRequest = {
id: number; id: number;
name: string; name: string;
@ -1150,14 +1261,6 @@ declare namespace API {
sort: number; sort: number;
}; };
type UpdateOAuthConfig = {
id: number;
platform: string;
config: Record<string, any>;
redirect: string;
enabled: boolean;
};
type UpdateOrderStatusRequest = { type UpdateOrderStatusRequest = {
id: number; id: number;
status: number; status: number;
@ -1165,6 +1268,14 @@ declare namespace API {
trade_no?: string; trade_no?: string;
}; };
type UpdateRuleGroupRequest = {
id: number;
name: string;
icon: string;
description: string;
enable: boolean;
};
type UpdateStripeRequest = { type UpdateStripeRequest = {
id: number; id: number;
name: string; name: string;
@ -1214,8 +1325,14 @@ declare namespace API {
status: number; status: number;
}; };
type UpdateUserRequest = { type UpdateUserAuthMethodRequest = {
id: number; user_id: number;
auth_type: string;
auth_identifier: string;
};
type UpdateUserBasiceInfoRequest = {
user_id: number;
password: string; password: string;
avatar: string; avatar: string;
balance: number; balance: number;
@ -1226,6 +1343,10 @@ declare namespace API {
referer_id: number; referer_id: number;
enable: boolean; enable: boolean;
is_admin: boolean; is_admin: boolean;
};
type UpdateUserNotifySettingRequest = {
user_id: number;
enable_email_notify: boolean; enable_email_notify: boolean;
enable_telegram_notify: boolean; enable_telegram_notify: boolean;
enable_balance_notify: boolean; enable_balance_notify: boolean;
@ -1234,6 +1355,16 @@ declare namespace API {
enable_trade_notify: boolean; enable_trade_notify: boolean;
}; };
type UpdateUserSubscribeRequest = {
user_subscribe_id: number;
subscribe_id: number;
traffic: number;
expired_at: number;
upload: number;
download: number;
status: number;
};
type User = { type User = {
id: number; id: number;
avatar: string; avatar: string;
@ -1252,7 +1383,8 @@ declare namespace API {
enable_login_notify: boolean; enable_login_notify: boolean;
enable_subscribe_notify: boolean; enable_subscribe_notify: boolean;
enable_trade_notify: boolean; enable_trade_notify: boolean;
auth_methods: AuthMethod[]; auth_methods: UserAuthMethod[];
user_devices: UserDevice[];
created_at: number; created_at: number;
updated_at: number; updated_at: number;
deleted_at?: number; deleted_at?: number;
@ -1266,6 +1398,12 @@ declare namespace API {
enable: boolean; enable: boolean;
}; };
type UserAuthMethod = {
auth_type: string;
auth_identifier: string;
verified: boolean;
};
type UserBalanceLog = { type UserBalanceLog = {
id: number; id: number;
user_id: number; user_id: number;
@ -1278,15 +1416,24 @@ declare namespace API {
type UserDevice = { type UserDevice = {
id: number; id: number;
user_id: number; ip: string;
device_number: string; imei: string;
user_agent: string;
online: boolean; online: boolean;
last_online: number;
enabled: boolean; enabled: boolean;
created_at: number; created_at: number;
updated_at: number; updated_at: number;
}; };
type UserLoginLog = {
id: number;
user_id: number;
login_ip: string;
user_agent: string;
success: boolean;
created_at: number;
};
type UserStatistics = { type UserStatistics = {
date?: string; date?: string;
register: number; register: number;
@ -1319,6 +1466,16 @@ declare namespace API {
updated_at: number; updated_at: number;
}; };
type UserSubscribeLog = {
id: number;
user_id: number;
user_subscribe_id: number;
token: string;
ip: string;
user_agent: string;
created_at: number;
};
type UserTrafficData = { type UserTrafficData = {
user_id: number; user_id: number;
email: string; email: string;

View File

@ -2,18 +2,6 @@
/* eslint-disable */ /* eslint-disable */
import request from '@/utils/request'; import request from '@/utils/request';
/** Update user PUT /v1/admin/user/ */
export async function updateUser(body: API.UpdateUserRequest, options?: { [key: string]: any }) {
return request<API.Response & { data?: any }>('/v1/admin/user/', {
method: 'PUT',
headers: {
'Content-Type': 'application/json',
},
data: body,
...(options || {}),
});
}
/** Create user POST /v1/admin/user/ */ /** Create user POST /v1/admin/user/ */
export async function createUser(body: API.CreateUserRequest, options?: { [key: string]: any }) { export async function createUser(body: API.CreateUserRequest, options?: { [key: string]: any }) {
return request<API.Response & { data?: any }>('/v1/admin/user/', { return request<API.Response & { data?: any }>('/v1/admin/user/', {
@ -52,6 +40,21 @@ export async function getUserAuthMethod(options?: { [key: string]: any }) {
); );
} }
/** Update user auth method PUT /v1/admin/user/auth_method */
export async function updateUserAuthMethod(
body: API.UpdateUserAuthMethodRequest,
options?: { [key: string]: any },
) {
return request<API.Response & { data?: any }>('/v1/admin/user/auth_method', {
method: 'PUT',
headers: {
'Content-Type': 'application/json',
},
data: body,
...(options || {}),
});
}
/** Create user auth method POST /v1/admin/user/auth_method */ /** Create user auth method POST /v1/admin/user/auth_method */
export async function createUserAuthMethod( export async function createUserAuthMethod(
body: API.CreateUserAuthMethodRequest, body: API.CreateUserAuthMethodRequest,
@ -67,6 +70,36 @@ export async function createUserAuthMethod(
}); });
} }
/** Delete user auth method DELETE /v1/admin/user/auth_method */
export async function deleteUserAuthMethod(
body: API.DeleteUserAuthMethodRequest,
options?: { [key: string]: any },
) {
return request<API.Response & { data?: any }>('/v1/admin/user/auth_method', {
method: 'DELETE',
headers: {
'Content-Type': 'application/json',
},
data: body,
...(options || {}),
});
}
/** Update user basic info PUT /v1/admin/user/basic */
export async function updateUserBasicInfo(
body: API.UpdateUserBasiceInfoRequest,
options?: { [key: string]: any },
) {
return request<API.Response & { data?: any }>('/v1/admin/user/basic', {
method: 'PUT',
headers: {
'Content-Type': 'application/json',
},
data: body,
...(options || {}),
});
}
/** Batch delete user DELETE /v1/admin/user/batch */ /** Batch delete user DELETE /v1/admin/user/batch */
export async function batchDeleteUser( export async function batchDeleteUser(
body: API.BatchDeleteUserRequest, body: API.BatchDeleteUserRequest,
@ -106,7 +139,7 @@ export async function getUserDetail(
} }
/** User device PUT /v1/admin/user/device */ /** User device PUT /v1/admin/user/device */
export async function updaeUserDevice(body: API.UserDevice, options?: { [key: string]: any }) { export async function updateUserDevice(body: API.UserDevice, options?: { [key: string]: any }) {
return request<API.Response & { data?: any }>('/v1/admin/user/device', { return request<API.Response & { data?: any }>('/v1/admin/user/device', {
method: 'PUT', method: 'PUT',
headers: { headers: {
@ -132,6 +165,21 @@ export async function deleteUserDevice(
}); });
} }
/** kick offline user device PUT /v1/admin/user/device/kick_offline */
export async function kickOfflineByUserDevice(
body: API.KickOfflineRequest,
options?: { [key: string]: any },
) {
return request<API.Response & { data?: any }>('/v1/admin/user/device/kick_offline', {
method: 'PUT',
headers: {
'Content-Type': 'application/json',
},
data: body,
...(options || {}),
});
}
/** Get user list GET /v1/admin/user/list */ /** Get user list GET /v1/admin/user/list */
export async function getUserList( export async function getUserList(
// 叠加生成的Param类型 (非body参数swagger默认没有生成对象) // 叠加生成的Param类型 (非body参数swagger默认没有生成对象)
@ -146,3 +194,138 @@ export async function getUserList(
...(options || {}), ...(options || {}),
}); });
} }
/** Get user login logs GET /v1/admin/user/login/logs */
export async function getUserLoginLogs(
// 叠加生成的Param类型 (非body参数swagger默认没有生成对象)
params: API.GetUserLoginLogsParams,
options?: { [key: string]: any },
) {
return request<API.Response & { data?: API.GetUserLoginLogsResponse }>(
'/v1/admin/user/login/logs',
{
method: 'GET',
params: {
...params,
},
...(options || {}),
},
);
}
/** Update user notify setting PUT /v1/admin/user/notify */
export async function updateUserNotifySetting(
body: API.UpdateUserNotifySettingRequest,
options?: { [key: string]: any },
) {
return request<API.Response & { data?: any }>('/v1/admin/user/notify', {
method: 'PUT',
headers: {
'Content-Type': 'application/json',
},
data: body,
...(options || {}),
});
}
/** Get user subcribe GET /v1/admin/user/subscribe */
export async function getUserSubscribe(
// 叠加生成的Param类型 (非body参数swagger默认没有生成对象)
params: API.GetUserSubscribeParams,
options?: { [key: string]: any },
) {
return request<API.Response & { data?: API.GetUserSubscribeListResponse }>(
'/v1/admin/user/subscribe',
{
method: 'GET',
params: {
...params,
},
...(options || {}),
},
);
}
/** Update user subcribe PUT /v1/admin/user/subscribe */
export async function updateUserSubscribe(
body: API.UpdateUserSubscribeRequest,
options?: { [key: string]: any },
) {
return request<API.Response & { data?: any }>('/v1/admin/user/subscribe', {
method: 'PUT',
headers: {
'Content-Type': 'application/json',
},
data: body,
...(options || {}),
});
}
/** Create user subcribe POST /v1/admin/user/subscribe */
export async function createUserSubscribe(
body: API.CreateUserSubscribeRequest,
options?: { [key: string]: any },
) {
return request<API.Response & { data?: any }>('/v1/admin/user/subscribe', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
},
data: body,
...(options || {}),
});
}
/** Get user subcribe devices GET /v1/admin/user/subscribe/device */
export async function getUserSubscribeDevices(
// 叠加生成的Param类型 (非body参数swagger默认没有生成对象)
params: API.GetUserSubscribeDevicesParams,
options?: { [key: string]: any },
) {
return request<API.Response & { data?: API.GetUserSubscribeDevicesResponse }>(
'/v1/admin/user/subscribe/device',
{
method: 'GET',
params: {
...params,
},
...(options || {}),
},
);
}
/** Get user subcribe logs GET /v1/admin/user/subscribe/logs */
export async function getUserSubscribeLogs(
// 叠加生成的Param类型 (非body参数swagger默认没有生成对象)
params: API.GetUserSubscribeLogsParams,
options?: { [key: string]: any },
) {
return request<API.Response & { data?: API.GetUserSubscribeLogsResponse }>(
'/v1/admin/user/subscribe/logs',
{
method: 'GET',
params: {
...params,
},
...(options || {}),
},
);
}
/** Get user subcribe traffic logs GET /v1/admin/user/subscribe/traffic_logs */
export async function getUserSubscribeTrafficLogs(
// 叠加生成的Param类型 (非body参数swagger默认没有生成对象)
params: API.GetUserSubscribeTrafficLogsParams,
options?: { [key: string]: any },
) {
return request<API.Response & { data?: API.GetUserSubscribeTrafficLogsResponse }>(
'/v1/admin/user/subscribe/traffic_logs',
{
method: 'GET',
params: {
...params,
},
...(options || {}),
},
);
}

View File

@ -64,15 +64,16 @@ declare namespace API {
}; };
type AuthConfig = { type AuthConfig = {
sms: SmsAuthenticateConfig; sms: MobileAuthenticateConfig;
email: EmailAuthticateConfig; email: EmailAuthticateConfig;
register: RegisterConfig; register: RegisterConfig;
}; };
type AuthMethod = { type AuthMethodConfig = {
auth_type: string; id: number;
auth_identifier: string; method: string;
verified: boolean; config: Record<string, any>;
enabled: boolean;
}; };
type CheckUserParams = { type CheckUserParams = {
@ -124,26 +125,10 @@ declare namespace API {
}; };
type EmailAuthticateConfig = { type EmailAuthticateConfig = {
email_enabled: boolean; enable: boolean;
email_enable_verify: boolean; enable_verify: boolean;
email_enable_domain_suffix: boolean; enable_domain_suffix: boolean;
email_domain_suffix_list: string; domain_suffix_list: string;
};
type EmailSmtpConfig = {
email_enabled: boolean;
email_smtp_host: string;
email_smtp_port: number;
email_smtp_user: string;
email_smtp_pass: string;
email_smtp_from: string;
email_smtp_ssl: boolean;
verify_email_template: string;
maintenance_email_template: string;
expiration_email_template: string;
email_enable_verify: boolean;
email_enable_domain_suffix: boolean;
email_domain_suffix_list: string;
}; };
type Follow = { type Follow = {
@ -213,6 +198,13 @@ declare namespace API {
token: string; token: string;
}; };
type MobileAuthenticateConfig = {
enable: boolean;
limit: number;
interval: number;
expire_time: number;
};
type NodeConfig = { type NodeConfig = {
node_secret: string; node_secret: string;
node_pull_interval: number; node_pull_interval: number;
@ -247,16 +239,6 @@ declare namespace API {
redirect: string; redirect: string;
}; };
type OAuthMethod = {
id: number;
platform: string;
config: Record<string, any>;
redirect: string;
enabled: boolean;
created_at: number;
updated_at: number;
};
type OnlineUser = { type OnlineUser = {
uid: number; uid: number;
ip: string; ip: string;
@ -399,6 +381,16 @@ declare namespace API {
updated_at: number; updated_at: number;
}; };
type ServerRuleGroup = {
id: number;
name: string;
icon: string;
description: string;
enable: boolean;
created_at: number;
updated_at: number;
};
type ServerStatus = { type ServerStatus = {
cpu: number; cpu: number;
mem: number; mem: number;
@ -419,26 +411,6 @@ declare namespace API {
site_logo: string; site_logo: string;
}; };
type SmsAuthenticateConfig = {
sms_enabled: boolean;
sms_limit: number;
sms_interval: number;
sms_expire_time: number;
};
type SmsConfig = {
sms_enabled: boolean;
sms_key: string;
sms_secret: string;
sms_template: string;
sms_template_code: string;
sms_template_param: string;
sms_platform: string;
sms_limit: number;
sms_interval: number;
sms_expire_time: number;
};
type SortItem = { type SortItem = {
id: number; id: number;
sort: number; sort: number;
@ -556,6 +528,16 @@ declare namespace API {
tos_content: string; tos_content: string;
}; };
type TrafficLog = {
id: number;
server_id: number;
user_id: number;
subscribe_id: number;
download: number;
upload: number;
timestamp: number;
};
type TransportConfig = { type TransportConfig = {
path: string; path: string;
host: string; host: string;
@ -593,7 +575,8 @@ declare namespace API {
enable_login_notify: boolean; enable_login_notify: boolean;
enable_subscribe_notify: boolean; enable_subscribe_notify: boolean;
enable_trade_notify: boolean; enable_trade_notify: boolean;
auth_methods: AuthMethod[]; auth_methods: UserAuthMethod[];
user_devices: UserDevice[];
created_at: number; created_at: number;
updated_at: number; updated_at: number;
deleted_at?: number; deleted_at?: number;
@ -607,6 +590,12 @@ declare namespace API {
enable: boolean; enable: boolean;
}; };
type UserAuthMethod = {
auth_type: string;
auth_identifier: string;
verified: boolean;
};
type UserBalanceLog = { type UserBalanceLog = {
id: number; id: number;
user_id: number; user_id: number;
@ -619,15 +608,24 @@ declare namespace API {
type UserDevice = { type UserDevice = {
id: number; id: number;
user_id: number; ip: string;
device_number: string; imei: string;
user_agent: string;
online: boolean; online: boolean;
last_online: number;
enabled: boolean; enabled: boolean;
created_at: number; created_at: number;
updated_at: number; updated_at: number;
}; };
type UserLoginLog = {
id: number;
user_id: number;
login_ip: string;
user_agent: string;
success: boolean;
created_at: number;
};
type UserLoginRequest = { type UserLoginRequest = {
email: string; email: string;
password: string; password: string;
@ -660,6 +658,16 @@ declare namespace API {
updated_at: number; updated_at: number;
}; };
type UserSubscribeLog = {
id: number;
user_id: number;
user_subscribe_id: number;
token: string;
ip: string;
user_agent: string;
created_at: number;
};
type VeifyConfig = { type VeifyConfig = {
turnstile_site_key: string; turnstile_site_key: string;
enable_login_verify: boolean; enable_login_verify: boolean;

View File

@ -47,6 +47,7 @@
"60002": "Toto předplatné nelze momentálně použít, zkuste to prosím později.", "60002": "Toto předplatné nelze momentálně použít, zkuste to prosím později.",
"60003": "Bylo zjištěno existující předplatné. Zrušte ho, než budete pokračovat.", "60003": "Bylo zjištěno existující předplatné. Zrušte ho, než budete pokračovat.",
"60004": "Nelze momentálně odstranit, protože předplatné má aktivní uživatele.", "60004": "Nelze momentálně odstranit, protože předplatné má aktivní uživatele.",
"60005": "Režim jediné předplatné překročil limit uživatelů.",
"70001": "Ověřovací kód je nesprávný, zadejte ho prosím znovu.", "70001": "Ověřovací kód je nesprávný, zadejte ho prosím znovu.",
"80001": "Úkol nebyl úspěšně přidán do fronty, zkuste to prosím později.", "80001": "Úkol nebyl úspěšně přidán do fronty, zkuste to prosím později.",
"undefined": "Došlo k chybě systému, zkuste to prosím později." "undefined": "Došlo k chybě systému, zkuste to prosím později."

View File

@ -47,6 +47,7 @@
"60002": "Das Abonnement kann derzeit nicht verwendet werden, bitte versuchen Sie es später erneut.", "60002": "Das Abonnement kann derzeit nicht verwendet werden, bitte versuchen Sie es später erneut.",
"60003": "Ein bestehendes Abonnement wurde erkannt. Bitte kündigen Sie es, bevor Sie fortfahren.", "60003": "Ein bestehendes Abonnement wurde erkannt. Bitte kündigen Sie es, bevor Sie fortfahren.",
"60004": "Kann derzeit nicht gelöscht werden, da das Abonnement aktive Benutzer hat.", "60004": "Kann derzeit nicht gelöscht werden, da das Abonnement aktive Benutzer hat.",
"60005": "Im Ein-Abonnement-Modus wurde das Benutzerlimit überschritten.",
"70001": "Der Bestätigungscode ist falsch, bitte erneut eingeben.", "70001": "Der Bestätigungscode ist falsch, bitte erneut eingeben.",
"80001": "Die Aufgabe konnte nicht erfolgreich in die Warteschlange aufgenommen werden, bitte versuchen Sie es später erneut.", "80001": "Die Aufgabe konnte nicht erfolgreich in die Warteschlange aufgenommen werden, bitte versuchen Sie es später erneut.",
"undefined": "Es ist ein Systemfehler aufgetreten, bitte versuchen Sie es später erneut." "undefined": "Es ist ein Systemfehler aufgetreten, bitte versuchen Sie es später erneut."

View File

@ -47,6 +47,7 @@
"60002": "Unable to use the subscription at the moment, please try again later.", "60002": "Unable to use the subscription at the moment, please try again later.",
"60003": "An existing subscription is detected. Please cancel it before proceeding.", "60003": "An existing subscription is detected. Please cancel it before proceeding.",
"60004": "Unable to delete at the moment as the subscription has active users.", "60004": "Unable to delete at the moment as the subscription has active users.",
"60005": "Single subscription mode has exceeded user limit.",
"70001": "Incorrect verification code, please re-enter.", "70001": "Incorrect verification code, please re-enter.",
"80001": "Task could not be successfully added to the queue, please try again later.", "80001": "Task could not be successfully added to the queue, please try again later.",
"undefined": "An error occurred in the system, please try again later." "undefined": "An error occurred in the system, please try again later."

View File

@ -47,6 +47,7 @@
"60002": "No se puede usar la suscripción por el momento, por favor intente de nuevo más tarde.", "60002": "No se puede usar la suscripción por el momento, por favor intente de nuevo más tarde.",
"60003": "Se ha detectado una suscripción existente. Por favor, cancélala antes de continuar.", "60003": "Se ha detectado una suscripción existente. Por favor, cancélala antes de continuar.",
"60004": "No se puede eliminar en este momento ya que la suscripción tiene usuarios activos.", "60004": "No se puede eliminar en este momento ya que la suscripción tiene usuarios activos.",
"60005": "El modo de suscripción única ha excedido el límite de usuarios.",
"70001": "El código de verificación es incorrecto, por favor ingréselo de nuevo.", "70001": "El código de verificación es incorrecto, por favor ingréselo de nuevo.",
"80001": "La tarea no se agregó exitosamente a la cola, por favor intente de nuevo más tarde.", "80001": "La tarea no se agregó exitosamente a la cola, por favor intente de nuevo más tarde.",
"undefined": "Ocurrió un error en el sistema, por favor intente de nuevo más tarde." "undefined": "Ocurrió un error en el sistema, por favor intente de nuevo más tarde."

View File

@ -47,6 +47,7 @@
"60002": "No se puede usar la suscripción por el momento, por favor intenta más tarde.", "60002": "No se puede usar la suscripción por el momento, por favor intenta más tarde.",
"60003": "Se ha detectado una suscripción existente. Por favor, cancélala antes de continuar.", "60003": "Se ha detectado una suscripción existente. Por favor, cancélala antes de continuar.",
"60004": "No se puede eliminar en este momento ya que la suscripción tiene usuarios activos.", "60004": "No se puede eliminar en este momento ya que la suscripción tiene usuarios activos.",
"60005": "El modo de suscripción única ha excedido el límite de usuarios.",
"70001": "El código de verificación es incorrecto, por favor ingrésalo de nuevo.", "70001": "El código de verificación es incorrecto, por favor ingrésalo de nuevo.",
"80001": "La tarea no se agregó exitosamente a la cola, por favor intenta de nuevo más tarde.", "80001": "La tarea no se agregó exitosamente a la cola, por favor intenta de nuevo más tarde.",
"undefined": "Ocurrió un error en el sistema, por favor intenta de nuevo más tarde." "undefined": "Ocurrió un error en el sistema, por favor intenta de nuevo más tarde."

View File

@ -47,6 +47,7 @@
"60002": "در حال حاضر نمی‌توان از اشتراک استفاده کرد، لطفاً بعداً دوباره تلاش کنید.", "60002": "در حال حاضر نمی‌توان از اشتراک استفاده کرد، لطفاً بعداً دوباره تلاش کنید.",
"60003": "یک اشتراک موجود شناسایی شد. لطفاً قبل از ادامه آن را لغو کنید.", "60003": "یک اشتراک موجود شناسایی شد. لطفاً قبل از ادامه آن را لغو کنید.",
"60004": "در حال حاضر امکان حذف وجود ندارد زیرا اشتراک دارای کاربران فعال است.", "60004": "در حال حاضر امکان حذف وجود ندارد زیرا اشتراک دارای کاربران فعال است.",
"60005": "حالت اشتراک تک کاربر از حد مجاز کاربران فراتر رفته است.",
"70001": "کد تأیید نادرست است، لطفاً دوباره وارد کنید.", "70001": "کد تأیید نادرست است، لطفاً دوباره وارد کنید.",
"80001": "وظیفه نتوانست به‌طور موفقیت‌آمیز به صف اضافه شود، لطفاً بعداً دوباره تلاش کنید.", "80001": "وظیفه نتوانست به‌طور موفقیت‌آمیز به صف اضافه شود، لطفاً بعداً دوباره تلاش کنید.",
"undefined": "خطایی در سیستم رخ داده است، لطفاً بعداً دوباره تلاش کنید." "undefined": "خطایی در سیستم رخ داده است، لطفاً بعداً دوباره تلاش کنید."

View File

@ -47,6 +47,7 @@
"60002": "Tilausta ei voi käyttää tällä hetkellä, yritä myöhemmin uudelleen.", "60002": "Tilausta ei voi käyttää tällä hetkellä, yritä myöhemmin uudelleen.",
"60003": "Olemassa oleva tilaus havaittu. Peruuta se ennen jatkamista.", "60003": "Olemassa oleva tilaus havaittu. Peruuta se ennen jatkamista.",
"60004": "Ei voi poistaa tällä hetkellä, koska tilauksella on aktiivisia käyttäjiä.", "60004": "Ei voi poistaa tällä hetkellä, koska tilauksella on aktiivisia käyttäjiä.",
"60005": "Yksittäisen tilauksen tila on ylittänyt käyttäjämäärän rajan.",
"70001": "Vahvistuskoodi on virheellinen, syötä se uudelleen.", "70001": "Vahvistuskoodi on virheellinen, syötä se uudelleen.",
"80001": "Tehtävää ei lisätty jonoon, yritä myöhemmin uudelleen.", "80001": "Tehtävää ei lisätty jonoon, yritä myöhemmin uudelleen.",
"undefined": "Järjestelmässä tapahtui virhe, yritä myöhemmin uudelleen." "undefined": "Järjestelmässä tapahtui virhe, yritä myöhemmin uudelleen."

View File

@ -47,6 +47,7 @@
"60002": "Impossible d'utiliser cet abonnement pour le moment, veuillez réessayer plus tard.", "60002": "Impossible d'utiliser cet abonnement pour le moment, veuillez réessayer plus tard.",
"60003": "Un abonnement existant a été détecté. Veuillez l'annuler avant de continuer.", "60003": "Un abonnement existant a été détecté. Veuillez l'annuler avant de continuer.",
"60004": "Impossible de supprimer pour le moment car l'abonnement a des utilisateurs actifs.", "60004": "Impossible de supprimer pour le moment car l'abonnement a des utilisateurs actifs.",
"60005": "Le mode d'abonnement unique a dépassé la limite d'utilisateurs.",
"70001": "Le code de vérification est incorrect, veuillez le ressaisir.", "70001": "Le code de vérification est incorrect, veuillez le ressaisir.",
"80001": "La tâche n'a pas été ajoutée avec succès à la file d'attente, veuillez réessayer plus tard.", "80001": "La tâche n'a pas été ajoutée avec succès à la file d'attente, veuillez réessayer plus tard.",
"undefined": "Une erreur système s'est produite, veuillez réessayer plus tard." "undefined": "Une erreur système s'est produite, veuillez réessayer plus tard."

View File

@ -47,6 +47,7 @@
"60002": "अभी के लिए इस सदस्यता का उपयोग नहीं किया जा सकता, कृपया थोड़ी देर बाद पुनः प्रयास करें।", "60002": "अभी के लिए इस सदस्यता का उपयोग नहीं किया जा सकता, कृपया थोड़ी देर बाद पुनः प्रयास करें।",
"60003": "एक मौजूदा सदस्यता का पता चला है। कृपया आगे बढ़ने से पहले इसे रद्द करें।", "60003": "एक मौजूदा सदस्यता का पता चला है। कृपया आगे बढ़ने से पहले इसे रद्द करें।",
"60004": "वर्तमान में हटाने में असमर्थ क्योंकि सदस्यता में सक्रिय उपयोगकर्ता हैं।", "60004": "वर्तमान में हटाने में असमर्थ क्योंकि सदस्यता में सक्रिय उपयोगकर्ता हैं।",
"60005": "सिंगल सब्सक्रिप्शन मोड में उपयोगकर्ता सीमा पार हो गई है।",
"70001": "सत्यापन कोड गलत है, कृपया पुनः दर्ज करें।", "70001": "सत्यापन कोड गलत है, कृपया पुनः दर्ज करें।",
"80001": "कार्य सफलतापूर्वक कतार में नहीं जोड़ा गया, कृपया थोड़ी देर बाद पुनः प्रयास करें।", "80001": "कार्य सफलतापूर्वक कतार में नहीं जोड़ा गया, कृपया थोड़ी देर बाद पुनः प्रयास करें।",
"undefined": "सिस्टम में त्रुटि हुई है, कृपया थोड़ी देर बाद पुनः प्रयास करें।" "undefined": "सिस्टम में त्रुटि हुई है, कृपया थोड़ी देर बाद पुनः प्रयास करें।"

View File

@ -47,6 +47,7 @@
"60002": "Az előfizetés jelenleg nem használható, kérjük, próbálja meg később újra.", "60002": "Az előfizetés jelenleg nem használható, kérjük, próbálja meg később újra.",
"60003": "Létező előfizetés észlelve. Kérjük, törölje azt a folytatás előtt.", "60003": "Létező előfizetés észlelve. Kérjük, törölje azt a folytatás előtt.",
"60004": "Jelenleg nem törölhető, mivel az előfizetésnek aktív felhasználói vannak.", "60004": "Jelenleg nem törölhető, mivel az előfizetésnek aktív felhasználói vannak.",
"60005": "Az egyedi előfizetés mód túllépte a felhasználói limitet.",
"70001": "A megerősítő kód hibás, kérjük, írja be újra.", "70001": "A megerősítő kód hibás, kérjük, írja be újra.",
"80001": "A feladat nem került sikeresen a sorba, kérjük, próbálja meg később újra.", "80001": "A feladat nem került sikeresen a sorba, kérjük, próbálja meg később újra.",
"undefined": "Rendszerhiba történt, kérjük, próbálja meg később újra." "undefined": "Rendszerhiba történt, kérjük, próbálja meg később újra."

View File

@ -47,6 +47,7 @@
"60002": "このサブスクリプションは一時的に使用できません。しばらくしてから再試行してください。", "60002": "このサブスクリプションは一時的に使用できません。しばらくしてから再試行してください。",
"60003": "既存のサブスクリプションが検出されました。続行する前にキャンセルしてください。", "60003": "既存のサブスクリプションが検出されました。続行する前にキャンセルしてください。",
"60004": "サブスクリプションにアクティブなユーザーがいるため、現在削除できません。", "60004": "サブスクリプションにアクティブなユーザーがいるため、現在削除できません。",
"60005": "シングルサブスクリプションモードではユーザー数の上限を超えました。",
"70001": "認証コードが間違っています。再入力してください。", "70001": "認証コードが間違っています。再入力してください。",
"80001": "タスクがキューに正常に追加されませんでした。しばらくしてから再試行してください。", "80001": "タスクがキューに正常に追加されませんでした。しばらくしてから再試行してください。",
"undefined": "システムエラーが発生しました。しばらくしてから再試行してください。" "undefined": "システムエラーが発生しました。しばらくしてから再試行してください。"

View File

@ -47,6 +47,7 @@
"60002": "현재 구독을 사용할 수 없습니다. 잠시 후 다시 시도해 주세요.", "60002": "현재 구독을 사용할 수 없습니다. 잠시 후 다시 시도해 주세요.",
"60003": "기존 구독이 감지되었습니다. 계속하기 전에 취소해 주세요.", "60003": "기존 구독이 감지되었습니다. 계속하기 전에 취소해 주세요.",
"60004": "구독에 활성 사용자가 있어 현재 삭제할 수 없습니다.", "60004": "구독에 활성 사용자가 있어 현재 삭제할 수 없습니다.",
"60005": "단일 구독 모드가 사용자 한도를 초과했습니다.",
"70001": "인증 코드가 잘못되었습니다. 다시 입력해 주세요.", "70001": "인증 코드가 잘못되었습니다. 다시 입력해 주세요.",
"80001": "작업이 큐에 성공적으로 추가되지 않았습니다. 잠시 후 다시 시도해 주세요.", "80001": "작업이 큐에 성공적으로 추가되지 않았습니다. 잠시 후 다시 시도해 주세요.",
"undefined": "시스템에 오류가 발생했습니다. 잠시 후 다시 시도해 주세요." "undefined": "시스템에 오류가 발생했습니다. 잠시 후 다시 시도해 주세요."

View File

@ -47,6 +47,8 @@
"60002": "Kan for øyeblikket ikke bruke abonnementet, vennligst prøv igjen senere.", "60002": "Kan for øyeblikket ikke bruke abonnementet, vennligst prøv igjen senere.",
"60003": "Et eksisterende abonnement er oppdaget. Vennligst avbryt det før du fortsetter.", "60003": "Et eksisterende abonnement er oppdaget. Vennligst avbryt det før du fortsetter.",
"60004": "Kan ikke slettes for øyeblikket da abonnementet har aktive brukere.", "60004": "Kan ikke slettes for øyeblikket da abonnementet har aktive brukere.",
"60005": "Abonnementet har nådd maks antall brukere.",
"60005": "Enkelt abonnementsmodus har overskredet brukergrensen.",
"70001": "Verifikasjonskoden er feil, vennligst skriv inn på nytt.", "70001": "Verifikasjonskoden er feil, vennligst skriv inn på nytt.",
"80001": "Oppgaven ble ikke vellykket lagt til i køen, vennligst prøv igjen senere.", "80001": "Oppgaven ble ikke vellykket lagt til i køen, vennligst prøv igjen senere.",
"undefined": "Det oppstod en systemfeil, vennligst prøv igjen senere." "undefined": "Det oppstod en systemfeil, vennligst prøv igjen senere."

View File

@ -47,6 +47,7 @@
"60002": "Nie można tymczasowo użyć tej subskrypcji, spróbuj ponownie później.", "60002": "Nie można tymczasowo użyć tej subskrypcji, spróbuj ponownie później.",
"60003": "Wykryto istniejącą subskrypcję. Proszę ją anulować przed kontynuacją.", "60003": "Wykryto istniejącą subskrypcję. Proszę ją anulować przed kontynuacją.",
"60004": "Nie można usunąć w tej chwili, ponieważ subskrypcja ma aktywnych użytkowników.", "60004": "Nie można usunąć w tej chwili, ponieważ subskrypcja ma aktywnych użytkowników.",
"60005": "Tryb pojedynczej subskrypcji przekroczył limit użytkowników.",
"70001": "Kod weryfikacyjny jest nieprawidłowy, wprowadź go ponownie.", "70001": "Kod weryfikacyjny jest nieprawidłowy, wprowadź go ponownie.",
"80001": "Zadanie nie zostało pomyślnie dodane do kolejki, spróbuj ponownie później.", "80001": "Zadanie nie zostało pomyślnie dodane do kolejki, spróbuj ponownie później.",
"undefined": "Wystąpił błąd systemu, spróbuj ponownie później." "undefined": "Wystąpił błąd systemu, spróbuj ponownie później."

View File

@ -47,6 +47,8 @@
"60002": "Não é possível usar a assinatura no momento, por favor, tente novamente mais tarde.", "60002": "Não é possível usar a assinatura no momento, por favor, tente novamente mais tarde.",
"60003": "Uma assinatura existente foi detectada. Cancele-a antes de prosseguir.", "60003": "Uma assinatura existente foi detectada. Cancele-a antes de prosseguir.",
"60004": "Não é possível excluir no momento, pois a assinatura possui usuários ativos.", "60004": "Não é possível excluir no momento, pois a assinatura possui usuários ativos.",
"60005": "A assinatura atingiu o número máximo de usuários.",
"60005": "O modo de assinatura única excedeu o limite de usuários.",
"70001": "O código de verificação está incorreto, por favor, digite novamente.", "70001": "O código de verificação está incorreto, por favor, digite novamente.",
"80001": "A tarefa não foi adicionada à fila com sucesso, por favor, tente novamente mais tarde.", "80001": "A tarefa não foi adicionada à fila com sucesso, por favor, tente novamente mais tarde.",
"undefined": "Ocorreu um erro no sistema, por favor, tente novamente mais tarde." "undefined": "Ocorreu um erro no sistema, por favor, tente novamente mais tarde."

View File

@ -47,6 +47,7 @@
"60002": "Nu se poate utiliza momentan acest abonament, vă rugăm să încercați din nou mai târziu.", "60002": "Nu se poate utiliza momentan acest abonament, vă rugăm să încercați din nou mai târziu.",
"60003": "A fost detectat un abonament existent. Vă rugăm să-l anulați înainte de a continua.", "60003": "A fost detectat un abonament existent. Vă rugăm să-l anulați înainte de a continua.",
"60004": "Nu se poate șterge în acest moment, deoarece abonamentul are utilizatori activi.", "60004": "Nu se poate șterge în acest moment, deoarece abonamentul are utilizatori activi.",
"60005": "Modul de abonament unic a depășit limita de utilizatori.",
"70001": "Codul de verificare este incorect, vă rugăm să îl introduceți din nou.", "70001": "Codul de verificare este incorect, vă rugăm să îl introduceți din nou.",
"80001": "Sarcina nu a fost adăugată cu succes în coadă, vă rugăm să încercați din nou mai târziu.", "80001": "Sarcina nu a fost adăugată cu succes în coadă, vă rugăm să încercați din nou mai târziu.",
"undefined": "A apărut o eroare în sistem, vă rugăm să încercați din nou mai târziu." "undefined": "A apărut o eroare în sistem, vă rugăm să încercați din nou mai târziu."

View File

@ -47,6 +47,7 @@
"60002": "Подписка временно недоступна, пожалуйста, попробуйте позже.", "60002": "Подписка временно недоступна, пожалуйста, попробуйте позже.",
"60003": "Обнаружена существующая подписка. Пожалуйста, отмените ее перед продолжением.", "60003": "Обнаружена существующая подписка. Пожалуйста, отмените ее перед продолжением.",
"60004": "Невозможно удалить в данный момент, так как у подписки есть активные пользователи.", "60004": "Невозможно удалить в данный момент, так как у подписки есть активные пользователи.",
"60005": "Одиночный режим подписки превысил лимит пользователей.",
"70001": "Код подтверждения неверен, пожалуйста, введите его снова.", "70001": "Код подтверждения неверен, пожалуйста, введите его снова.",
"80001": "Задача не была успешно добавлена в очередь, пожалуйста, попробуйте позже.", "80001": "Задача не была успешно добавлена в очередь, пожалуйста, попробуйте позже.",
"undefined": "Произошла ошибка в системе, пожалуйста, попробуйте позже." "undefined": "Произошла ошибка в системе, пожалуйста, попробуйте позже."

View File

@ -47,6 +47,7 @@
"60002": "ไม่สามารถใช้การสมัครสมาชิกนี้ได้ในขณะนี้ กรุณาลองใหม่อีกครั้งในภายหลัง", "60002": "ไม่สามารถใช้การสมัครสมาชิกนี้ได้ในขณะนี้ กรุณาลองใหม่อีกครั้งในภายหลัง",
"60003": "ตรวจพบการสมัครสมาชิกที่มีอยู่ กรุณายกเลิกก่อนดำเนินการต่อ", "60003": "ตรวจพบการสมัครสมาชิกที่มีอยู่ กรุณายกเลิกก่อนดำเนินการต่อ",
"60004": "ไม่สามารถลบได้ในขณะนี้เนื่องจากการสมัครมีผู้ใช้ที่ใช้งานอยู่", "60004": "ไม่สามารถลบได้ในขณะนี้เนื่องจากการสมัครมีผู้ใช้ที่ใช้งานอยู่",
"60005": "โหมดการสมัครสมาชิกเดี่ยวเกินขีดจำกัดจำนวนผู้ใช้แล้ว.",
"70001": "รหัสยืนยันไม่ถูกต้อง กรุณาใส่ใหม่อีกครั้ง", "70001": "รหัสยืนยันไม่ถูกต้อง กรุณาใส่ใหม่อีกครั้ง",
"80001": "งานไม่สำเร็จในการเข้าคิว กรุณาลองใหม่อีกครั้งในภายหลัง", "80001": "งานไม่สำเร็จในการเข้าคิว กรุณาลองใหม่อีกครั้งในภายหลัง",
"undefined": "ระบบเกิดข้อผิดพลาด กรุณาลองใหม่อีกครั้งในภายหลัง" "undefined": "ระบบเกิดข้อผิดพลาด กรุณาลองใหม่อีกครั้งในภายหลัง"

View File

@ -47,6 +47,7 @@
"60002": "Bu abonelik şu anda kullanılamıyor, lütfen daha sonra tekrar deneyin.", "60002": "Bu abonelik şu anda kullanılamıyor, lütfen daha sonra tekrar deneyin.",
"60003": "Mevcut bir abonelik tespit edildi. Lütfen devam etmeden önce iptal edin.", "60003": "Mevcut bir abonelik tespit edildi. Lütfen devam etmeden önce iptal edin.",
"60004": "Aboneliğin aktif kullanıcıları olduğu için şu anda silinemiyor.", "60004": "Aboneliğin aktif kullanıcıları olduğu için şu anda silinemiyor.",
"60005": "Tekli abonelik moduğu kullanıcı sınırını aştı.",
"70001": "Doğrulama kodu hatalı, lütfen tekrar girin.", "70001": "Doğrulama kodu hatalı, lütfen tekrar girin.",
"80001": "Görev sıraya başarıyla eklenemedi, lütfen daha sonra tekrar deneyin.", "80001": "Görev sıraya başarıyla eklenemedi, lütfen daha sonra tekrar deneyin.",
"undefined": "Sistem hatası oluştu, lütfen daha sonra tekrar deneyin." "undefined": "Sistem hatası oluştu, lütfen daha sonra tekrar deneyin."

View File

@ -47,6 +47,7 @@
"60002": "Тимчасово неможливо використовувати цю підписку, будь ласка, спробуйте пізніше.", "60002": "Тимчасово неможливо використовувати цю підписку, будь ласка, спробуйте пізніше.",
"60003": "Виявлено існуючу підписку. Будь ласка, скасуйте її перед продовженням.", "60003": "Виявлено існуючу підписку. Будь ласка, скасуйте її перед продовженням.",
"60004": "Неможливо видалити, оскільки підписка має активних користувачів.", "60004": "Неможливо видалити, оскільки підписка має активних користувачів.",
"60005": "Режим однієї підписки перевищив ліміт користувачів.",
"70001": "Код перевірки неправильний, будь ласка, введіть знову.", "70001": "Код перевірки неправильний, будь ласка, введіть знову.",
"80001": "Завдання не вдалося додати до черги, будь ласка, спробуйте пізніше.", "80001": "Завдання не вдалося додати до черги, будь ласка, спробуйте пізніше.",
"undefined": "Сталася системна помилка, будь ласка, спробуйте пізніше." "undefined": "Сталася системна помилка, будь ласка, спробуйте пізніше."

View File

@ -47,6 +47,7 @@
"60002": "Tạm thời không thể sử dụng đăng ký này, vui lòng thử lại sau.", "60002": "Tạm thời không thể sử dụng đăng ký này, vui lòng thử lại sau.",
"60003": "Phát hiện đăng ký hiện có. Vui lòng hủy trước khi tiếp tục.", "60003": "Phát hiện đăng ký hiện có. Vui lòng hủy trước khi tiếp tục.",
"60004": "Không thể xóa vào lúc này vì đăng ký có người dùng đang hoạt động.", "60004": "Không thể xóa vào lúc này vì đăng ký có người dùng đang hoạt động.",
"60005": "Chế độ đăng ký đơn đã vượt quá giới hạn người dùng.",
"70001": "Mã xác nhận không chính xác, vui lòng nhập lại.", "70001": "Mã xác nhận không chính xác, vui lòng nhập lại.",
"80001": "Nhiệm vụ không được thêm vào hàng đợi thành công, vui lòng thử lại sau.", "80001": "Nhiệm vụ không được thêm vào hàng đợi thành công, vui lòng thử lại sau.",
"undefined": "Hệ thống xảy ra lỗi, vui lòng thử lại sau." "undefined": "Hệ thống xảy ra lỗi, vui lòng thử lại sau."

View File

@ -47,6 +47,7 @@
"60002": "暂时无法使用该订阅,请稍后再试。", "60002": "暂时无法使用该订阅,请稍后再试。",
"60003": "检测到已有订阅。请取消后再继续。", "60003": "检测到已有订阅。请取消后再继续。",
"60004": "暂时无法删除,订阅存在正常激活的用户。", "60004": "暂时无法删除,订阅存在正常激活的用户。",
"60005": "单一订阅模式已超出用户上限。",
"70001": "验证码有误,请重新输入。", "70001": "验证码有误,请重新输入。",
"80001": "任务未成功加入队列,请稍后重试。", "80001": "任务未成功加入队列,请稍后重试。",
"undefined": "系统发生错误,请稍后重试" "undefined": "系统发生错误,请稍后重试"

View File

@ -47,6 +47,7 @@
"60002": "暫時無法使用該訂閱,請稍後再試。", "60002": "暫時無法使用該訂閱,請稍後再試。",
"60003": "偵測到現有訂閱。請取消後再繼續。", "60003": "偵測到現有訂閱。請取消後再繼續。",
"60004": "暫時無法刪除,訂閱存在正常啟用的用戶。", "60004": "暫時無法刪除,訂閱存在正常啟用的用戶。",
"60005": "單一訂閱模式已超出用戶上限。",
"70001": "驗證碼有誤,請重新輸入。", "70001": "驗證碼有誤,請重新輸入。",
"80001": "任務未成功加入隊列,請稍後重試。", "80001": "任務未成功加入隊列,請稍後重試。",
"undefined": "系統發生錯誤,請稍後重試" "undefined": "系統發生錯誤,請稍後重試"

View File

@ -74,7 +74,7 @@
"zh-CN", "zh-CN",
"zh-HK" "zh-HK"
], ],
"modelName": "gpt-4o", "modelName": "gpt-4o-mini",
"experimental": { "experimental": {
"jsonMode": true "jsonMode": true
}, },

View File

@ -32,6 +32,7 @@ export async function appleLoginCallback(
return request<API.Response & { data?: any }>('/v1/auth/oauth/callback/apple', { return request<API.Response & { data?: any }>('/v1/auth/oauth/callback/apple', {
method: 'POST', method: 'POST',
data: formData, data: formData,
requestType: 'form',
...(options || {}), ...(options || {}),
}); });
} }

View File

@ -64,15 +64,16 @@ declare namespace API {
}; };
type AuthConfig = { type AuthConfig = {
sms: SmsAuthenticateConfig; sms: MobileAuthenticateConfig;
email: EmailAuthticateConfig; email: EmailAuthticateConfig;
register: RegisterConfig; register: RegisterConfig;
}; };
type AuthMethod = { type AuthMethodConfig = {
auth_type: string; id: number;
auth_identifier: string; method: string;
verified: boolean; config: Record<string, any>;
enabled: boolean;
}; };
type CheckUserParams = { type CheckUserParams = {
@ -124,26 +125,10 @@ declare namespace API {
}; };
type EmailAuthticateConfig = { type EmailAuthticateConfig = {
email_enabled: boolean; enable: boolean;
email_enable_verify: boolean; enable_verify: boolean;
email_enable_domain_suffix: boolean; enable_domain_suffix: boolean;
email_domain_suffix_list: string; domain_suffix_list: string;
};
type EmailSmtpConfig = {
email_enabled: boolean;
email_smtp_host: string;
email_smtp_port: number;
email_smtp_user: string;
email_smtp_pass: string;
email_smtp_from: string;
email_smtp_ssl: boolean;
verify_email_template: string;
maintenance_email_template: string;
expiration_email_template: string;
email_enable_verify: boolean;
email_enable_domain_suffix: boolean;
email_domain_suffix_list: string;
}; };
type Follow = { type Follow = {
@ -213,6 +198,13 @@ declare namespace API {
token: string; token: string;
}; };
type MobileAuthenticateConfig = {
enable: boolean;
limit: number;
interval: number;
expire_time: number;
};
type NodeConfig = { type NodeConfig = {
node_secret: string; node_secret: string;
node_pull_interval: number; node_pull_interval: number;
@ -247,16 +239,6 @@ declare namespace API {
redirect: string; redirect: string;
}; };
type OAuthMethod = {
id: number;
platform: string;
config: Record<string, any>;
redirect: string;
enabled: boolean;
created_at: number;
updated_at: number;
};
type OnlineUser = { type OnlineUser = {
uid: number; uid: number;
ip: string; ip: string;
@ -399,6 +381,16 @@ declare namespace API {
updated_at: number; updated_at: number;
}; };
type ServerRuleGroup = {
id: number;
name: string;
icon: string;
description: string;
enable: boolean;
created_at: number;
updated_at: number;
};
type ServerStatus = { type ServerStatus = {
cpu: number; cpu: number;
mem: number; mem: number;
@ -419,26 +411,6 @@ declare namespace API {
site_logo: string; site_logo: string;
}; };
type SmsAuthenticateConfig = {
sms_enabled: boolean;
sms_limit: number;
sms_interval: number;
sms_expire_time: number;
};
type SmsConfig = {
sms_enabled: boolean;
sms_key: string;
sms_secret: string;
sms_template: string;
sms_template_code: string;
sms_template_param: string;
sms_platform: string;
sms_limit: number;
sms_interval: number;
sms_expire_time: number;
};
type SortItem = { type SortItem = {
id: number; id: number;
sort: number; sort: number;
@ -556,6 +528,16 @@ declare namespace API {
tos_content: string; tos_content: string;
}; };
type TrafficLog = {
id: number;
server_id: number;
user_id: number;
subscribe_id: number;
download: number;
upload: number;
timestamp: number;
};
type TransportConfig = { type TransportConfig = {
path: string; path: string;
host: string; host: string;
@ -593,7 +575,8 @@ declare namespace API {
enable_login_notify: boolean; enable_login_notify: boolean;
enable_subscribe_notify: boolean; enable_subscribe_notify: boolean;
enable_trade_notify: boolean; enable_trade_notify: boolean;
auth_methods: AuthMethod[]; auth_methods: UserAuthMethod[];
user_devices: UserDevice[];
created_at: number; created_at: number;
updated_at: number; updated_at: number;
deleted_at?: number; deleted_at?: number;
@ -607,6 +590,12 @@ declare namespace API {
enable: boolean; enable: boolean;
}; };
type UserAuthMethod = {
auth_type: string;
auth_identifier: string;
verified: boolean;
};
type UserBalanceLog = { type UserBalanceLog = {
id: number; id: number;
user_id: number; user_id: number;
@ -619,15 +608,24 @@ declare namespace API {
type UserDevice = { type UserDevice = {
id: number; id: number;
user_id: number; ip: string;
device_number: string; imei: string;
user_agent: string;
online: boolean; online: boolean;
last_online: number;
enabled: boolean; enabled: boolean;
created_at: number; created_at: number;
updated_at: number; updated_at: number;
}; };
type UserLoginLog = {
id: number;
user_id: number;
login_ip: string;
user_agent: string;
success: boolean;
created_at: number;
};
type UserLoginRequest = { type UserLoginRequest = {
email: string; email: string;
password: string; password: string;
@ -660,6 +658,16 @@ declare namespace API {
updated_at: number; updated_at: number;
}; };
type UserSubscribeLog = {
id: number;
user_id: number;
user_subscribe_id: number;
token: string;
ip: string;
user_agent: string;
created_at: number;
};
type VeifyConfig = { type VeifyConfig = {
turnstile_site_key: string; turnstile_site_key: string;
enable_login_verify: boolean; enable_login_verify: boolean;

View File

@ -58,15 +58,16 @@ declare namespace API {
}; };
type AuthConfig = { type AuthConfig = {
sms: SmsAuthenticateConfig; sms: MobileAuthenticateConfig;
email: EmailAuthticateConfig; email: EmailAuthticateConfig;
register: RegisterConfig; register: RegisterConfig;
}; };
type AuthMethod = { type AuthMethodConfig = {
auth_type: string; id: number;
auth_identifier: string; method: string;
verified: boolean; config: Record<string, any>;
enabled: boolean;
}; };
type BindOAuthCallbackRequest = { type BindOAuthCallbackRequest = {
@ -155,26 +156,10 @@ declare namespace API {
}; };
type EmailAuthticateConfig = { type EmailAuthticateConfig = {
email_enabled: boolean; enable: boolean;
email_enable_verify: boolean; enable_verify: boolean;
email_enable_domain_suffix: boolean; enable_domain_suffix: boolean;
email_domain_suffix_list: string; domain_suffix_list: string;
};
type EmailSmtpConfig = {
email_enabled: boolean;
email_smtp_host: string;
email_smtp_port: number;
email_smtp_user: string;
email_smtp_pass: string;
email_smtp_from: string;
email_smtp_ssl: boolean;
verify_email_template: string;
maintenance_email_template: string;
expiration_email_template: string;
email_enable_verify: boolean;
email_enable_domain_suffix: boolean;
email_domain_suffix_list: string;
}; };
type Follow = { type Follow = {
@ -190,8 +175,38 @@ declare namespace API {
list: PaymentConfig[]; list: PaymentConfig[];
}; };
type GetLoginLogParams = {
page: number;
size: number;
};
type GetLoginLogRequest = {
page: number;
size: number;
};
type GetLoginLogResponse = {
list: UserLoginLog[];
total: number;
};
type GetOAuthMethodsResponse = { type GetOAuthMethodsResponse = {
methods: AuthMethod[]; methods: UserAuthMethod[];
};
type GetSubscribeLogParams = {
page: number;
size: number;
};
type GetSubscribeLogRequest = {
page: number;
size: number;
};
type GetSubscribeLogResponse = {
list: UserSubscribeLog[];
total: number;
}; };
type GetUserTicketDetailRequest = { type GetUserTicketDetailRequest = {
@ -235,6 +250,13 @@ declare namespace API {
only_first_purchase: boolean; only_first_purchase: boolean;
}; };
type MobileAuthenticateConfig = {
enable: boolean;
limit: number;
interval: number;
expire_time: number;
};
type NodeConfig = { type NodeConfig = {
node_secret: string; node_secret: string;
node_pull_interval: number; node_pull_interval: number;
@ -253,16 +275,6 @@ declare namespace API {
last_at: number; last_at: number;
}; };
type OAuthMethod = {
id: number;
platform: string;
config: Record<string, any>;
redirect: string;
enabled: boolean;
created_at: number;
updated_at: number;
};
type OnlineUser = { type OnlineUser = {
uid: number; uid: number;
ip: string; ip: string;
@ -559,6 +571,16 @@ declare namespace API {
updated_at: number; updated_at: number;
}; };
type ServerRuleGroup = {
id: number;
name: string;
icon: string;
description: string;
enable: boolean;
created_at: number;
updated_at: number;
};
type ServerStatus = { type ServerStatus = {
cpu: number; cpu: number;
mem: number; mem: number;
@ -579,26 +601,6 @@ declare namespace API {
site_logo: string; site_logo: string;
}; };
type SmsAuthenticateConfig = {
sms_enabled: boolean;
sms_limit: number;
sms_interval: number;
sms_expire_time: number;
};
type SmsConfig = {
sms_enabled: boolean;
sms_key: string;
sms_secret: string;
sms_template: string;
sms_template_code: string;
sms_template_param: string;
sms_platform: string;
sms_limit: number;
sms_interval: number;
sms_expire_time: number;
};
type SortItem = { type SortItem = {
id: number; id: number;
sort: number; sort: number;
@ -689,6 +691,16 @@ declare namespace API {
tos_content: string; tos_content: string;
}; };
type TrafficLog = {
id: number;
server_id: number;
user_id: number;
subscribe_id: number;
download: number;
upload: number;
timestamp: number;
};
type TransportConfig = { type TransportConfig = {
path: string; path: string;
host: string; host: string;
@ -717,18 +729,14 @@ declare namespace API {
}; };
type UpdateUserNotifyRequest = { type UpdateUserNotifyRequest = {
enable_email_notify: boolean;
enable_telegram_notify: boolean;
enable_balance_notify: boolean; enable_balance_notify: boolean;
enable_login_notify: boolean; enable_login_notify: boolean;
enable_subscribe_notify: boolean; enable_subscribe_notify: boolean;
enable_trade_notify: boolean; enable_trade_notify: boolean;
}; };
type UpdateUserNotifySettingRequet = {
telegram: number;
enable_email_notify: boolean;
enable_telegram_notify: boolean;
};
type UpdateUserPasswordRequest = { type UpdateUserPasswordRequest = {
password: string; password: string;
}; };
@ -756,7 +764,8 @@ declare namespace API {
enable_login_notify: boolean; enable_login_notify: boolean;
enable_subscribe_notify: boolean; enable_subscribe_notify: boolean;
enable_trade_notify: boolean; enable_trade_notify: boolean;
auth_methods: AuthMethod[]; auth_methods: UserAuthMethod[];
user_devices: UserDevice[];
created_at: number; created_at: number;
updated_at: number; updated_at: number;
deleted_at?: number; deleted_at?: number;
@ -770,6 +779,12 @@ declare namespace API {
enable: boolean; enable: boolean;
}; };
type UserAuthMethod = {
auth_type: string;
auth_identifier: string;
verified: boolean;
};
type UserBalanceLog = { type UserBalanceLog = {
id: number; id: number;
user_id: number; user_id: number;
@ -782,15 +797,24 @@ declare namespace API {
type UserDevice = { type UserDevice = {
id: number; id: number;
user_id: number; ip: string;
device_number: string; imei: string;
user_agent: string;
online: boolean; online: boolean;
last_online: number;
enabled: boolean; enabled: boolean;
created_at: number; created_at: number;
updated_at: number; updated_at: number;
}; };
type UserLoginLog = {
id: number;
user_id: number;
login_ip: string;
user_agent: string;
success: boolean;
created_at: number;
};
type UserSubscribe = { type UserSubscribe = {
id: number; id: number;
user_id: number; user_id: number;
@ -809,6 +833,16 @@ declare namespace API {
updated_at: number; updated_at: number;
}; };
type UserSubscribeLog = {
id: number;
user_id: number;
user_subscribe_id: number;
token: string;
ip: string;
user_agent: string;
created_at: number;
};
type VerifyConfig = { type VerifyConfig = {
turnstile_site_key: string; turnstile_site_key: string;
turnstile_secret: string; turnstile_secret: string;

View File

@ -106,6 +106,21 @@ export async function queryUserInfo(options?: { [key: string]: any }) {
}); });
} }
/** Get Login Log GET /v1/public/user/login_log */
export async function getLoginLog(
// 叠加生成的Param类型 (非body参数swagger默认没有生成对象)
params: API.GetLoginLogParams,
options?: { [key: string]: any },
) {
return request<API.Response & { data?: API.GetLoginLogResponse }>('/v1/public/user/login_log', {
method: 'GET',
params: {
...params,
},
...(options || {}),
});
}
/** Update User Notify PUT /v1/public/user/notify */ /** Update User Notify PUT /v1/public/user/notify */
export async function updateUserNotify( export async function updateUserNotify(
body: API.UpdateUserNotifyRequest, body: API.UpdateUserNotifyRequest,
@ -121,21 +136,6 @@ export async function updateUserNotify(
}); });
} }
/** Update User Notify Setting PUT /v1/public/user/notify_setting */
export async function updateUserNotifySetting(
body: API.UpdateUserNotifySettingRequet,
options?: { [key: string]: any },
) {
return request<API.Response & { data?: any }>('/v1/public/user/notify_setting', {
method: 'PUT',
headers: {
'Content-Type': 'application/json',
},
data: body,
...(options || {}),
});
}
/** Get OAuth Methods GET /v1/public/user/oauth_methods */ /** Get OAuth Methods GET /v1/public/user/oauth_methods */
export async function getOAuthMethods(options?: { [key: string]: any }) { export async function getOAuthMethods(options?: { [key: string]: any }) {
return request<API.Response & { data?: API.GetOAuthMethodsResponse }>( return request<API.Response & { data?: API.GetOAuthMethodsResponse }>(
@ -173,6 +173,24 @@ export async function queryUserSubscribe(options?: { [key: string]: any }) {
); );
} }
/** Get Subscribe Log GET /v1/public/user/subscribe_log */
export async function getSubscribeLog(
// 叠加生成的Param类型 (非body参数swagger默认没有生成对象)
params: API.GetSubscribeLogParams,
options?: { [key: string]: any },
) {
return request<API.Response & { data?: API.GetSubscribeLogResponse }>(
'/v1/public/user/subscribe_log',
{
method: 'GET',
params: {
...params,
},
...(options || {}),
},
);
}
/** Reset User Subscribe Token PUT /v1/public/user/subscribe_token */ /** Reset User Subscribe Token PUT /v1/public/user/subscribe_token */
export async function resetUserSubscribeToken( export async function resetUserSubscribeToken(
body: API.ResetUserSubscribeTokenRequest, body: API.ResetUserSubscribeTokenRequest,

View File

@ -23,7 +23,7 @@ export function DatePicker({
const handleSelect = (selectedDate: Date | undefined) => { const handleSelect = (selectedDate: Date | undefined) => {
setDate(selectedDate); setDate(selectedDate);
if (onChange) { if (onChange) {
onChange(selectedDate?.getTime()); onChange(selectedDate?.getTime() || 0);
} }
}; };