✨ feat(user): Add user Detail
This commit is contained in:
parent
fdaf11b654
commit
3a3d2236e2
@ -1,6 +1,8 @@
|
||||
'use client';
|
||||
|
||||
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 { useTranslations } from 'next-intl';
|
||||
import { useParams } from 'next/navigation';
|
||||
@ -10,17 +12,19 @@ export default function UserLoginHistory() {
|
||||
const { id } = useParams<{ id: string }>();
|
||||
|
||||
return (
|
||||
<ProTable<
|
||||
{
|
||||
ip: string;
|
||||
user_agent: string;
|
||||
created_at: string;
|
||||
},
|
||||
Record<string, unknown>
|
||||
>
|
||||
<ProTable<API.UserLoginLog, Record<string, unknown>>
|
||||
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'),
|
||||
},
|
||||
{
|
||||
@ -33,16 +37,15 @@ export default function UserLoginHistory() {
|
||||
cell: ({ row }) => formatDate(row.getValue('created_at')),
|
||||
},
|
||||
]}
|
||||
params={[
|
||||
{
|
||||
key: 'search',
|
||||
placeholder: t('searchIp'),
|
||||
},
|
||||
]}
|
||||
request={async (pagination, filter) => {
|
||||
const { data } = await getUserLoginLogs({
|
||||
user_id: Number(id),
|
||||
...pagination,
|
||||
...filter,
|
||||
});
|
||||
return {
|
||||
list: [],
|
||||
total: 0,
|
||||
list: data.data?.list || [],
|
||||
total: data.data?.total || 0,
|
||||
};
|
||||
}}
|
||||
/>
|
||||
|
||||
@ -1,17 +1,48 @@
|
||||
'use client';
|
||||
|
||||
import {
|
||||
createUserAuthMethod,
|
||||
deleteUserAuthMethod,
|
||||
updateUserAuthMethod,
|
||||
} from '@/services/admin/user';
|
||||
import { Badge } from '@workspace/ui/components/badge';
|
||||
import { Button } from '@workspace/ui/components/button';
|
||||
import { Card, CardContent, CardHeader, CardTitle } from '@workspace/ui/components/card';
|
||||
import { EnhancedInput } from '@workspace/ui/custom-components/enhanced-input';
|
||||
import { useTranslations } from 'next-intl';
|
||||
import { useState } from 'react';
|
||||
import { toast } from 'sonner';
|
||||
|
||||
export function AuthMethodsForm({ user }: { user: API.User }) {
|
||||
const t = useTranslations('user');
|
||||
|
||||
const [emailChanges, setEmailChanges] = useState<Record<string, string>>({});
|
||||
|
||||
const handleRemoveAuth = async (authType: string) => {};
|
||||
const handleUpdateEmail = async (authType: string) => {};
|
||||
const handleCreateEmail = async (email: string) => {};
|
||||
const handleRemoveAuth = async (authType: string) => {
|
||||
await deleteUserAuthMethod({
|
||||
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) => {
|
||||
setEmailChanges((prev) => ({
|
||||
@ -34,7 +65,7 @@ export function AuthMethodsForm({ user }: { user: API.User }) {
|
||||
const handleEmailAction = () => {
|
||||
const email = emailChanges['email'];
|
||||
if (isEmailExists) {
|
||||
handleUpdateEmail('email');
|
||||
handleUpdateEmail(email as string);
|
||||
} else {
|
||||
handleCreateEmail(email as string);
|
||||
}
|
||||
@ -43,7 +74,7 @@ export function AuthMethodsForm({ user }: { user: API.User }) {
|
||||
return (
|
||||
<Card>
|
||||
<CardHeader>
|
||||
<CardTitle>Authentication Settings</CardTitle>
|
||||
<CardTitle>{t('authMethodsTitle')}</CardTitle>
|
||||
</CardHeader>
|
||||
<CardContent 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='font-medium uppercase'>email</div>
|
||||
<Badge variant={defaultEmailMethod.verified ? 'default' : 'destructive'}>
|
||||
{defaultEmailMethod.verified ? 'Verified' : 'Unverified'}
|
||||
{defaultEmailMethod.verified ? t('verified') : t('unverified')}
|
||||
</Badge>
|
||||
</div>
|
||||
<div className='flex items-center gap-2'>
|
||||
<div className='flex-1'>
|
||||
<EnhancedInput
|
||||
value={defaultEmailMethod.auth_identifier}
|
||||
placeholder='Please enter email'
|
||||
placeholder={t('pleaseEnterEmail')}
|
||||
onValueChange={(value) => handleEmailChange('email', value as string)}
|
||||
/>
|
||||
</div>
|
||||
@ -70,7 +101,7 @@ export function AuthMethodsForm({ user }: { user: API.User }) {
|
||||
(isEmailExists && emailChanges['email'] === defaultEmailMethod.auth_identifier)
|
||||
}
|
||||
>
|
||||
{isEmailExists ? 'Update' : 'Add'}
|
||||
{isEmailExists ? t('update') : t('add')}
|
||||
</Button>
|
||||
</div>
|
||||
</CardContent>
|
||||
@ -82,7 +113,7 @@ export function AuthMethodsForm({ user }: { user: API.User }) {
|
||||
<div className='flex items-center justify-between'>
|
||||
<div className='font-medium uppercase'>{method.auth_type}</div>
|
||||
<Badge variant={method.verified ? 'default' : 'destructive'}>
|
||||
{method.verified ? 'Verified' : 'Unverified'}
|
||||
{method.verified ? t('verified') : t('unverified')}
|
||||
</Badge>
|
||||
</div>
|
||||
<div className='flex items-center gap-4'>
|
||||
@ -94,7 +125,7 @@ export function AuthMethodsForm({ user }: { user: API.User }) {
|
||||
size='sm'
|
||||
onClick={() => handleRemoveAuth(method.auth_type)}
|
||||
>
|
||||
Remove
|
||||
{t('remove')}
|
||||
</Button>
|
||||
</div>
|
||||
</CardContent>
|
||||
|
||||
@ -1,7 +1,7 @@
|
||||
'use client';
|
||||
|
||||
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 { Button } from '@workspace/ui/components/button';
|
||||
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 { UploadImage } from '@workspace/ui/custom-components/upload-image';
|
||||
import { unitConversion } from '@workspace/ui/utils';
|
||||
import { useTranslations } from 'next-intl';
|
||||
import { useForm } from 'react-hook-form';
|
||||
import { toast } from 'sonner';
|
||||
import * as z from 'zod';
|
||||
@ -37,6 +38,8 @@ const basicInfoSchema = z.object({
|
||||
type BasicInfoValues = z.infer<typeof basicInfoSchema>;
|
||||
|
||||
export function BasicInfoForm({ user }: { user: API.User }) {
|
||||
const t = useTranslations('user');
|
||||
|
||||
const { common } = useGlobalStore();
|
||||
const { currency } = common;
|
||||
|
||||
@ -55,11 +58,12 @@ export function BasicInfoForm({ user }: { user: API.User }) {
|
||||
});
|
||||
|
||||
async function onSubmit(data: BasicInfoValues) {
|
||||
await updateUser({
|
||||
id: user.id,
|
||||
await updateUserBasicInfo({
|
||||
user_id: user.id,
|
||||
telegram: user.telegram,
|
||||
...data,
|
||||
} as API.UpdateUserRequest);
|
||||
toast.success('Saved successfully');
|
||||
} as API.UpdateUserBasiceInfoRequest);
|
||||
toast.success(t('updateSuccess'));
|
||||
}
|
||||
|
||||
return (
|
||||
@ -67,9 +71,9 @@ export function BasicInfoForm({ user }: { user: API.User }) {
|
||||
<form onSubmit={form.handleSubmit(onSubmit)}>
|
||||
<Card>
|
||||
<CardHeader className='flex flex-row items-center justify-between'>
|
||||
<CardTitle>Basic Information</CardTitle>
|
||||
<CardTitle>{t('basicInfoTitle')}</CardTitle>
|
||||
<Button type='submit' size='sm'>
|
||||
Save
|
||||
{t('save')}
|
||||
</Button>
|
||||
</CardHeader>
|
||||
<CardContent className='space-y-4'>
|
||||
@ -78,7 +82,7 @@ export function BasicInfoForm({ user }: { user: API.User }) {
|
||||
name='enable'
|
||||
render={({ field }) => (
|
||||
<FormItem className='flex items-center justify-between space-x-2'>
|
||||
<FormLabel>Account Enable</FormLabel>
|
||||
<FormLabel>{t('accountEnable')}</FormLabel>
|
||||
<FormControl>
|
||||
<Switch checked={field.value} onCheckedChange={field.onChange} />
|
||||
</FormControl>
|
||||
@ -91,7 +95,7 @@ export function BasicInfoForm({ user }: { user: API.User }) {
|
||||
name='is_admin'
|
||||
render={({ field }) => (
|
||||
<FormItem className='flex items-center justify-between space-x-2'>
|
||||
<FormLabel>Administrator</FormLabel>
|
||||
<FormLabel>{t('administrator')}</FormLabel>
|
||||
<FormControl>
|
||||
<Switch checked={field.value} onCheckedChange={field.onChange} />
|
||||
</FormControl>
|
||||
@ -104,7 +108,7 @@ export function BasicInfoForm({ user }: { user: API.User }) {
|
||||
name='balance'
|
||||
render={({ field }) => (
|
||||
<FormItem>
|
||||
<FormLabel>Balance</FormLabel>
|
||||
<FormLabel>{t('balance')}</FormLabel>
|
||||
<FormControl>
|
||||
<EnhancedInput
|
||||
type='number'
|
||||
@ -127,7 +131,7 @@ export function BasicInfoForm({ user }: { user: API.User }) {
|
||||
name='commission'
|
||||
render={({ field }) => (
|
||||
<FormItem>
|
||||
<FormLabel>Commission</FormLabel>
|
||||
<FormLabel>{t('commission')}</FormLabel>
|
||||
<FormControl>
|
||||
<EnhancedInput
|
||||
type='number'
|
||||
@ -150,7 +154,7 @@ export function BasicInfoForm({ user }: { user: API.User }) {
|
||||
name='gift_amount'
|
||||
render={({ field }) => (
|
||||
<FormItem>
|
||||
<FormLabel>Gift Amount</FormLabel>
|
||||
<FormLabel>{t('giftAmount')}</FormLabel>
|
||||
<FormControl>
|
||||
<EnhancedInput
|
||||
type='number'
|
||||
@ -175,7 +179,7 @@ export function BasicInfoForm({ user }: { user: API.User }) {
|
||||
name='refer_code'
|
||||
render={({ field }) => (
|
||||
<FormItem>
|
||||
<FormLabel>Referral Code</FormLabel>
|
||||
<FormLabel>{t('referralCode')}</FormLabel>
|
||||
<FormControl>
|
||||
<EnhancedInput
|
||||
value={field.value}
|
||||
@ -193,7 +197,7 @@ export function BasicInfoForm({ user }: { user: API.User }) {
|
||||
name='referer_id'
|
||||
render={({ field }) => (
|
||||
<FormItem>
|
||||
<FormLabel>Referrer (User ID)</FormLabel>
|
||||
<FormLabel>{t('referrerUserId')}</FormLabel>
|
||||
<FormControl>
|
||||
<EnhancedInput
|
||||
type='number'
|
||||
@ -213,7 +217,7 @@ export function BasicInfoForm({ user }: { user: API.User }) {
|
||||
name='avatar'
|
||||
render={({ field }) => (
|
||||
<FormItem>
|
||||
<FormLabel>Avatar</FormLabel>
|
||||
<FormLabel>{t('avatar')}</FormLabel>
|
||||
<FormControl>
|
||||
<EnhancedInput
|
||||
value={field.value}
|
||||
@ -238,9 +242,9 @@ export function BasicInfoForm({ user }: { user: API.User }) {
|
||||
name='password'
|
||||
render={({ field }) => (
|
||||
<FormItem>
|
||||
<FormLabel>Password</FormLabel>
|
||||
<FormLabel>{t('password')}</FormLabel>
|
||||
<FormControl>
|
||||
<Input type='password' placeholder='Leave empty to keep unchanged' {...field} />
|
||||
<Input type='password' placeholder={t('passwordPlaceholder')} {...field} />
|
||||
</FormControl>
|
||||
<FormMessage />
|
||||
</FormItem>
|
||||
|
||||
@ -1,10 +1,12 @@
|
||||
'use client';
|
||||
|
||||
import { updateUserNotifySetting } from '@/services/admin/user';
|
||||
import { zodResolver } from '@hookform/resolvers/zod';
|
||||
import { Button } from '@workspace/ui/components/button';
|
||||
import { Card, CardContent, CardHeader, CardTitle } from '@workspace/ui/components/card';
|
||||
import { Form, FormControl, FormField, FormItem, FormLabel } from '@workspace/ui/components/form';
|
||||
import { Switch } from '@workspace/ui/components/switch';
|
||||
import { useTranslations } from 'next-intl';
|
||||
import { useForm } from 'react-hook-form';
|
||||
import { toast } from 'sonner';
|
||||
import * as z from 'zod';
|
||||
@ -21,6 +23,8 @@ const notifySettingsSchema = z.object({
|
||||
type NotifySettingsValues = z.infer<typeof notifySettingsSchema>;
|
||||
|
||||
export function NotifySettingsForm({ user }: { user: API.User }) {
|
||||
const t = useTranslations('user');
|
||||
|
||||
const form = useForm<NotifySettingsValues>({
|
||||
resolver: zodResolver(notifySettingsSchema),
|
||||
defaultValues: {
|
||||
@ -34,7 +38,11 @@ export function NotifySettingsForm({ user }: { user: API.User }) {
|
||||
});
|
||||
|
||||
async function onSubmit(data: NotifySettingsValues) {
|
||||
toast.warning('In Development...');
|
||||
await updateUserNotifySetting({
|
||||
...data,
|
||||
user_id: user.id,
|
||||
});
|
||||
toast.success(t('updateSuccess'));
|
||||
}
|
||||
|
||||
return (
|
||||
@ -42,9 +50,9 @@ export function NotifySettingsForm({ user }: { user: API.User }) {
|
||||
<form onSubmit={form.handleSubmit(onSubmit)}>
|
||||
<Card>
|
||||
<CardHeader className='flex flex-row items-center justify-between'>
|
||||
<CardTitle>Notification Settings</CardTitle>
|
||||
<CardTitle>{t('notifySettingsTitle')}</CardTitle>
|
||||
<Button type='submit' size='sm'>
|
||||
Save
|
||||
{t('save')}
|
||||
</Button>
|
||||
</CardHeader>
|
||||
<CardContent className='space-y-4'>
|
||||
@ -54,7 +62,7 @@ export function NotifySettingsForm({ user }: { user: API.User }) {
|
||||
name='enable_email_notify'
|
||||
render={({ field }) => (
|
||||
<FormItem className='flex items-center justify-between space-x-2'>
|
||||
<FormLabel>Email Notifications</FormLabel>
|
||||
<FormLabel>{t('emailNotifications')}</FormLabel>
|
||||
<FormControl>
|
||||
<Switch checked={field.value} onCheckedChange={field.onChange} />
|
||||
</FormControl>
|
||||
@ -67,7 +75,7 @@ export function NotifySettingsForm({ user }: { user: API.User }) {
|
||||
name='enable_telegram_notify'
|
||||
render={({ field }) => (
|
||||
<FormItem className='flex items-center justify-between space-x-2'>
|
||||
<FormLabel>Telegram Notifications</FormLabel>
|
||||
<FormLabel>{t('telegramNotifications')}</FormLabel>
|
||||
<FormControl>
|
||||
<Switch checked={field.value} onCheckedChange={field.onChange} />
|
||||
</FormControl>
|
||||
@ -80,7 +88,7 @@ export function NotifySettingsForm({ user }: { user: API.User }) {
|
||||
name='enable_balance_notify'
|
||||
render={({ field }) => (
|
||||
<FormItem className='flex items-center justify-between space-x-2'>
|
||||
<FormLabel>Balance Change Notifications</FormLabel>
|
||||
<FormLabel>{t('balanceNotifications')}</FormLabel>
|
||||
<FormControl>
|
||||
<Switch checked={field.value} onCheckedChange={field.onChange} />
|
||||
</FormControl>
|
||||
@ -93,7 +101,7 @@ export function NotifySettingsForm({ user }: { user: API.User }) {
|
||||
name='enable_login_notify'
|
||||
render={({ field }) => (
|
||||
<FormItem className='flex items-center justify-between space-x-2'>
|
||||
<FormLabel>Login Notifications</FormLabel>
|
||||
<FormLabel>{t('loginNotifications')}</FormLabel>
|
||||
<FormControl>
|
||||
<Switch checked={field.value} onCheckedChange={field.onChange} />
|
||||
</FormControl>
|
||||
@ -106,7 +114,7 @@ export function NotifySettingsForm({ user }: { user: API.User }) {
|
||||
name='enable_subscribe_notify'
|
||||
render={({ field }) => (
|
||||
<FormItem className='flex items-center justify-between space-x-2'>
|
||||
<FormLabel>Subscription Notifications</FormLabel>
|
||||
<FormLabel>{t('subscriptionNotifications')}</FormLabel>
|
||||
<FormControl>
|
||||
<Switch checked={field.value} onCheckedChange={field.onChange} />
|
||||
</FormControl>
|
||||
@ -119,7 +127,7 @@ export function NotifySettingsForm({ user }: { user: API.User }) {
|
||||
name='enable_trade_notify'
|
||||
render={({ field }) => (
|
||||
<FormItem className='flex items-center justify-between space-x-2'>
|
||||
<FormLabel>Trade Notifications</FormLabel>
|
||||
<FormLabel>{t('tradeNotifications')}</FormLabel>
|
||||
<FormControl>
|
||||
<Switch checked={field.value} onCheckedChange={field.onChange} />
|
||||
</FormControl>
|
||||
|
||||
@ -2,66 +2,40 @@
|
||||
|
||||
import { Display } from '@/components/display';
|
||||
import { ProTable, ProTableActions } from '@/components/pro-table';
|
||||
import { createUserSubscribe, getUserSubscribe, updateUserSubscribe } from '@/services/admin/user';
|
||||
import { Button } from '@workspace/ui/components/button';
|
||||
import { ConfirmButton } from '@workspace/ui/custom-components/confirm-button';
|
||||
import { formatDate } from '@workspace/ui/utils';
|
||||
import { useTranslations } from 'next-intl';
|
||||
import { useRef, useState } from 'react';
|
||||
import { toast } from 'sonner';
|
||||
import { SubscriptionDetail } from './subscription-detail';
|
||||
import { SubscriptionForm } from './subscription-form';
|
||||
|
||||
// 模拟数据
|
||||
const mockData: API.Subscribe[] = [
|
||||
{
|
||||
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) {
|
||||
export default function UserSubscription({ userId }: { userId: number }) {
|
||||
const t = useTranslations('user');
|
||||
const [loading, setLoading] = useState(false);
|
||||
const ref = useRef<ProTableActions>(null);
|
||||
|
||||
return (
|
||||
<ProTable<API.Subscribe, Record<string, unknown>>
|
||||
<ProTable<API.UserSubscribe, Record<string, unknown>>
|
||||
action={ref}
|
||||
header={{
|
||||
title: 'Subscription List',
|
||||
title: t('subscriptionList'),
|
||||
toolbar: (
|
||||
<SubscriptionForm
|
||||
key='create'
|
||||
trigger={<Button>Create</Button>}
|
||||
title='Create Subscription'
|
||||
trigger={t('add')}
|
||||
title={t('createSubscription')}
|
||||
loading={loading}
|
||||
userId={userId}
|
||||
onSubmit={async (values) => {
|
||||
console.log('创建订阅:', values);
|
||||
await createUserSubscribe({
|
||||
user_id: userId,
|
||||
...values,
|
||||
});
|
||||
toast.success(t('createSuccess'));
|
||||
ref.current?.refresh();
|
||||
return true;
|
||||
}}
|
||||
/>
|
||||
@ -74,34 +48,67 @@ export default function UserSubscription({ userId }: Props) {
|
||||
},
|
||||
{
|
||||
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',
|
||||
header: '流量',
|
||||
cell: ({ row }) => <Display type='traffic' value={row.getValue('traffic')} />,
|
||||
header: t('totalTraffic'),
|
||||
cell: ({ row }) => <Display type='traffic' value={row.getValue('traffic')} unlimited />,
|
||||
},
|
||||
{
|
||||
accessorKey: 'speed_limit',
|
||||
header: '限速',
|
||||
cell: ({ row }) => `${row.getValue('speed_limit')} Mbps`,
|
||||
header: t('speedLimit'),
|
||||
cell: ({ row }) => {
|
||||
const speed = row.original?.subscribe?.speed_limit;
|
||||
return <Display type='trafficSpeed' value={speed} />;
|
||||
},
|
||||
},
|
||||
{
|
||||
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',
|
||||
header: '创建时间',
|
||||
header: t('createdAt'),
|
||||
cell: ({ row }) => formatDate(row.getValue('created_at')),
|
||||
},
|
||||
]}
|
||||
request={async () => {
|
||||
// 模拟异步请求
|
||||
await new Promise((resolve) => setTimeout(resolve, 1000));
|
||||
request={async (pagination) => {
|
||||
const { data } = await getUserSubscribe({
|
||||
user_id: userId,
|
||||
...pagination,
|
||||
});
|
||||
return {
|
||||
list: mockData,
|
||||
total: mockData.length,
|
||||
list: data.data?.list || [],
|
||||
total: data.data?.total || 0,
|
||||
};
|
||||
}}
|
||||
actions={{
|
||||
@ -109,31 +116,38 @@ export default function UserSubscription({ userId }: Props) {
|
||||
return [
|
||||
<SubscriptionForm
|
||||
key='edit'
|
||||
trigger={<Button>Edit</Button>}
|
||||
title='Edit Subscription'
|
||||
trigger={t('edit')}
|
||||
title={t('editSubscription')}
|
||||
loading={loading}
|
||||
userId={userId}
|
||||
initialData={row}
|
||||
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;
|
||||
}}
|
||||
/>,
|
||||
<SubscriptionDetail
|
||||
key='detail'
|
||||
trigger={<Button variant='secondary'>Details</Button>}
|
||||
subscriptionId={row.id.toString()}
|
||||
trigger={<Button variant='secondary'>{t('detail')}</Button>}
|
||||
userId={userId}
|
||||
subscriptionId={row.id}
|
||||
/>,
|
||||
<ConfirmButton
|
||||
key='delete'
|
||||
trigger={<Button variant='destructive'>Delete</Button>}
|
||||
title='Confirm Delete'
|
||||
description='Are you sure to delete this subscription?'
|
||||
trigger={<Button variant='destructive'>{t('delete')}</Button>}
|
||||
title={t('confirmDelete')}
|
||||
description={t('deleteSubscriptionDescription')}
|
||||
onConfirm={async () => {
|
||||
console.log('删除订阅:', row.id);
|
||||
}}
|
||||
cancelText='Cancel'
|
||||
confirmText='Confirm'
|
||||
cancelText={t('cancel')}
|
||||
confirmText={t('confirm')}
|
||||
/>,
|
||||
];
|
||||
},
|
||||
|
||||
@ -2,6 +2,13 @@
|
||||
|
||||
import { Display } from '@/components/display';
|
||||
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 {
|
||||
Dialog,
|
||||
@ -10,132 +17,182 @@ import {
|
||||
DialogTitle,
|
||||
DialogTrigger,
|
||||
} from '@workspace/ui/components/dialog';
|
||||
import { Switch } from '@workspace/ui/components/switch';
|
||||
import { Tabs, TabsContent, TabsList, TabsTrigger } from '@workspace/ui/components/tabs';
|
||||
import { ConfirmButton } from '@workspace/ui/custom-components/confirm-button';
|
||||
import { formatDate } from '@workspace/ui/utils';
|
||||
import { useTranslations } from 'next-intl';
|
||||
import { ReactNode, useState } from 'react';
|
||||
import { toast } from 'sonner';
|
||||
|
||||
// 模拟数据
|
||||
const mockLogs = [
|
||||
{ id: 1, action: 'Create Subscription', created_at: Date.now() - 86400000 },
|
||||
{ id: 2, action: 'Update Traffic', created_at: Date.now() - 3600000 },
|
||||
];
|
||||
|
||||
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 {
|
||||
export function SubscriptionDetail({
|
||||
trigger,
|
||||
userId,
|
||||
subscriptionId,
|
||||
}: {
|
||||
trigger: ReactNode;
|
||||
subscriptionId: string;
|
||||
}
|
||||
|
||||
export function SubscriptionDetail({ trigger }: Props) {
|
||||
userId: number;
|
||||
subscriptionId: number;
|
||||
}) {
|
||||
const t = useTranslations('user');
|
||||
const [open, setOpen] = useState(false);
|
||||
|
||||
// 模拟下线设备的函数
|
||||
const handleOfflineDevice = async (deviceId: number) => {
|
||||
// TODO: 调用实际的API
|
||||
console.log('下线设备:', deviceId);
|
||||
toast.success('设备已下线');
|
||||
};
|
||||
|
||||
return (
|
||||
<Dialog open={open} onOpenChange={setOpen}>
|
||||
<DialogTrigger asChild>{trigger}</DialogTrigger>
|
||||
<DialogContent className='max-w-5xl'>
|
||||
<DialogHeader>
|
||||
<DialogTitle>Subscription Details</DialogTitle>
|
||||
<DialogTitle>{t('subscriptionDetails')}</DialogTitle>
|
||||
</DialogHeader>
|
||||
<div className='mt-4'>
|
||||
<Tabs defaultValue='logs'>
|
||||
<TabsList className='w-full'>
|
||||
<TabsTrigger value='logs' className='flex-1'>
|
||||
Subscription Logs
|
||||
{t('subscriptionLogs')}
|
||||
</TabsTrigger>
|
||||
<TabsTrigger value='traffic' className='flex-1'>
|
||||
Traffic Logs
|
||||
{t('trafficLogs')}
|
||||
</TabsTrigger>
|
||||
<TabsTrigger value='devices' className='flex-1'>
|
||||
Online Devices
|
||||
{t('onlineDevices')}
|
||||
</TabsTrigger>
|
||||
</TabsList>
|
||||
<TabsContent value='logs'>
|
||||
<ProTable
|
||||
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
|
||||
<ProTable<API.UserSubscribeLog, Record<string, unknown>>
|
||||
columns={[
|
||||
{
|
||||
accessorKey: 'ip',
|
||||
header: 'IP',
|
||||
},
|
||||
{
|
||||
accessorKey: 'last_seen_at',
|
||||
header: 'Last Seen',
|
||||
cell: ({ row }) => formatDate(row.getValue('last_seen_at')),
|
||||
accessorKey: 'user_agent',
|
||||
header: 'User Agent',
|
||||
},
|
||||
{
|
||||
accessorKey: 'token',
|
||||
header: 'Token',
|
||||
},
|
||||
{
|
||||
accessorKey: 'created_at',
|
||||
header: 'Time',
|
||||
cell: ({ row }) => formatDate(row.getValue('created_at')),
|
||||
},
|
||||
]}
|
||||
request={async () => ({
|
||||
list: mockDevices,
|
||||
total: mockDevices.length,
|
||||
})}
|
||||
request={async (pagination) => {
|
||||
const { data } = await getUserSubscribeLogs({
|
||||
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={{
|
||||
render: (row) => {
|
||||
if (!row.imei) return [];
|
||||
return [
|
||||
<ConfirmButton
|
||||
key='offline'
|
||||
trigger={
|
||||
<Button variant='destructive' size='sm'>
|
||||
下线
|
||||
</Button>
|
||||
}
|
||||
title='Confirm Offline'
|
||||
trigger={<Button variant='destructive'>{t('confirmOffline')}</Button>}
|
||||
title={t('confirmOffline')}
|
||||
description={`Are you sure to offline IP ${row.ip}?`}
|
||||
onConfirm={() => handleOfflineDevice(row.id)}
|
||||
onConfirm={async () => {
|
||||
await kickOfflineByUserDevice({ id: row.id });
|
||||
toast.success('已通知下线');
|
||||
}}
|
||||
cancelText='Cancel'
|
||||
confirmText='Confirm'
|
||||
/>,
|
||||
|
||||
@ -1,5 +1,8 @@
|
||||
'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 {
|
||||
Form,
|
||||
@ -9,26 +12,42 @@ import {
|
||||
FormLabel,
|
||||
FormMessage,
|
||||
} from '@workspace/ui/components/form';
|
||||
import { Input } from '@workspace/ui/components/input';
|
||||
import { ScrollArea } from '@workspace/ui/components/scroll-area';
|
||||
import {
|
||||
Sheet,
|
||||
SheetContent,
|
||||
SheetFooter,
|
||||
SheetHeader,
|
||||
SheetTitle,
|
||||
SheetTrigger,
|
||||
} 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 { useForm } from 'react-hook-form';
|
||||
import { z } from 'zod';
|
||||
|
||||
interface Props {
|
||||
trigger: ReactNode;
|
||||
title: string;
|
||||
loading?: boolean;
|
||||
userId: string;
|
||||
initialData?: API.Subscribe;
|
||||
userId: number;
|
||||
initialData?: API.UserSubscribe;
|
||||
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({
|
||||
trigger,
|
||||
title,
|
||||
@ -37,14 +56,18 @@ export function SubscriptionForm({
|
||||
initialData,
|
||||
onSubmit,
|
||||
}: Props) {
|
||||
const t = useTranslations('user');
|
||||
const [open, setOpen] = useState(false);
|
||||
|
||||
const form = useForm({
|
||||
resolver: zodResolver(formSchema),
|
||||
defaultValues: {
|
||||
user_id: userId,
|
||||
name: initialData?.name || '',
|
||||
subscribe_id: initialData?.subscribe_id || 0,
|
||||
traffic: initialData?.traffic || 0,
|
||||
speed_limit: initialData?.speed_limit || 0,
|
||||
device_limit: initialData?.device_limit || 0,
|
||||
upload: initialData?.upload || 0,
|
||||
download: initialData?.download || 0,
|
||||
expired_at: initialData?.expire_time || 0,
|
||||
...(initialData && { id: initialData.id }),
|
||||
},
|
||||
});
|
||||
@ -57,23 +80,54 @@ 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 (
|
||||
<Sheet open={open} onOpenChange={setOpen}>
|
||||
<SheetTrigger asChild>{trigger}</SheetTrigger>
|
||||
<SheetTrigger asChild>
|
||||
<Button
|
||||
onClick={() => {
|
||||
form.reset();
|
||||
setOpen(true);
|
||||
}}
|
||||
>
|
||||
{trigger}
|
||||
</Button>
|
||||
</SheetTrigger>
|
||||
<SheetContent side='right'>
|
||||
<SheetHeader>
|
||||
<SheetTitle>{title}</SheetTitle>
|
||||
</SheetHeader>
|
||||
<ScrollArea className='h-[calc(100dvh-48px-36px-36px-env(safe-area-inset-top))]'>
|
||||
<Form {...form}>
|
||||
<form onSubmit={form.handleSubmit(handleSubmit)} className='mt-4 space-y-4'>
|
||||
<FormField
|
||||
control={form.control}
|
||||
name='name'
|
||||
name='subscribe_id'
|
||||
render={({ field }) => (
|
||||
<FormItem>
|
||||
<FormLabel>Name</FormLabel>
|
||||
<FormLabel>{t('subscription')}</FormLabel>
|
||||
<FormControl>
|
||||
<Input {...field} />
|
||||
<Combobox<number, false>
|
||||
placeholder='Select Subscription'
|
||||
value={field.value}
|
||||
onChange={(value) => {
|
||||
form.setValue(field.name, value);
|
||||
}}
|
||||
options={subscribe?.map((item: API.Subscribe) => ({
|
||||
value: item.id,
|
||||
label: item.name,
|
||||
}))}
|
||||
/>
|
||||
</FormControl>
|
||||
<FormMessage />
|
||||
</FormItem>
|
||||
@ -84,9 +138,19 @@ export function SubscriptionForm({
|
||||
name='traffic'
|
||||
render={({ field }) => (
|
||||
<FormItem>
|
||||
<FormLabel>Traffic (Bytes)</FormLabel>
|
||||
<FormLabel>{t('trafficLimit')}</FormLabel>
|
||||
<FormControl>
|
||||
<Input type='number' {...field} />
|
||||
<EnhancedInput
|
||||
placeholder={t('unlimited')}
|
||||
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>
|
||||
@ -94,12 +158,22 @@ export function SubscriptionForm({
|
||||
/>
|
||||
<FormField
|
||||
control={form.control}
|
||||
name='speed_limit'
|
||||
name='upload'
|
||||
render={({ field }) => (
|
||||
<FormItem>
|
||||
<FormLabel>Speed Limit (Mbps)</FormLabel>
|
||||
<FormLabel>{t('uploadTraffic')}</FormLabel>
|
||||
<FormControl>
|
||||
<Input type='number' {...field} />
|
||||
<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>
|
||||
@ -107,20 +181,68 @@ export function SubscriptionForm({
|
||||
/>
|
||||
<FormField
|
||||
control={form.control}
|
||||
name='device_limit'
|
||||
name='download'
|
||||
render={({ field }) => (
|
||||
<FormItem>
|
||||
<FormLabel>Device Limit</FormLabel>
|
||||
<FormLabel>{t('downloadTraffic')}</FormLabel>
|
||||
<FormControl>
|
||||
<Input type='number' {...field} />
|
||||
<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>
|
||||
)}
|
||||
/>
|
||||
<Button type='submit'>Submit</Button>
|
||||
</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>
|
||||
</Sheet>
|
||||
);
|
||||
|
||||
@ -2,7 +2,7 @@
|
||||
|
||||
import { Display } from '@/components/display';
|
||||
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 { Button } from '@workspace/ui/components/button';
|
||||
import { Switch } from '@workspace/ui/components/switch';
|
||||
@ -58,10 +58,10 @@ export default function Page() {
|
||||
<Switch
|
||||
defaultChecked={row.getValue('enable')}
|
||||
onCheckedChange={async (checked) => {
|
||||
await updateUser({
|
||||
await updateUserBasicInfo({
|
||||
...row.original,
|
||||
enable: checked,
|
||||
} as unknown as API.UpdateUserRequest);
|
||||
} as unknown as API.UpdateUserBasiceInfoRequest);
|
||||
toast.success(t('updateSuccess'));
|
||||
ref.current?.refresh();
|
||||
}}
|
||||
|
||||
@ -45,6 +45,7 @@
|
||||
"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.",
|
||||
"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.",
|
||||
"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.",
|
||||
|
||||
@ -1,31 +1,49 @@
|
||||
{
|
||||
"accountEnable": "Povolení účtu",
|
||||
"actions": "akce",
|
||||
"add": "Přidat",
|
||||
"administrator": "Administrátor",
|
||||
"areaCode": "Směrový kód",
|
||||
"areaCodePlaceholder": "Kód oblasti",
|
||||
"auth": "Autentizace",
|
||||
"authIdentifier": "Identifikátor ověření",
|
||||
"authIdentifierPlaceholder": "Zadejte identifikátor ověření",
|
||||
"authMethodsTitle": "Nastavení ověřování",
|
||||
"authType": "Typ ověření",
|
||||
"authUser": "Autentizovaný uživatel",
|
||||
"avatar": "Avatar",
|
||||
"balance": "Zůstatek",
|
||||
"balanceNotifications": "Oznámení o změně zůstatku",
|
||||
"balancePlaceholder": "Zůstatek",
|
||||
"basicInfoTitle": "Základní informace",
|
||||
"cancel": "zrušit",
|
||||
"commission": "Provize",
|
||||
"commissionPlaceholder": "Zadejte provizi",
|
||||
"confirm": "Potvrdit",
|
||||
"confirmDelete": "Opravdu chcete smazat?",
|
||||
"confirmOffline": "Potvrdit offline",
|
||||
"create": "Vytvořit",
|
||||
"createSubscription": "Vytvořit předplatné",
|
||||
"createSuccess": "Vytvoření úspěšné",
|
||||
"createUser": "Vytvořit uživatele",
|
||||
"createdAt": "Datum registrace",
|
||||
"delete": "smazat",
|
||||
"deleteDescription": "Po odstranění nelze data obnovit, prosím, postupujte opatrně.",
|
||||
"deleteSubscriptionDescription": "Opravdu chcete smazat toto předplatné?",
|
||||
"deleteSuccess": "Úspěšně odstraněno",
|
||||
"detail": "Detail",
|
||||
"deviceLimit": "Limit zařízení",
|
||||
"download": "Stáhnout",
|
||||
"downloadTraffic": "Stáhnout provoz",
|
||||
"edit": "Upravit",
|
||||
"editSubscription": "Upravit předplatné",
|
||||
"editUser": "Upravit uživatele",
|
||||
"email": "e-mail",
|
||||
"emailNotifications": "E-mailová oznámení",
|
||||
"enable": "Povolit",
|
||||
"expireTime": "Čas vypršení",
|
||||
"expiredAt": "Platnost vypršela",
|
||||
"failed": "Neúspěch",
|
||||
"giftAmount": "Částka dárku",
|
||||
"giftAmountPlaceholder": "Zadejte částku dárku",
|
||||
"invalidEmailFormat": "Neplatný formát e-mailu",
|
||||
@ -33,18 +51,47 @@
|
||||
"inviteCodePlaceholder": "Zadejte kód pozvánky (ponechte prázdné pro vygenerování)",
|
||||
"loading": "Načítání...",
|
||||
"loginIp": "Přihlašovací IP",
|
||||
"loginNotifications": "Oznámení o přihlášení",
|
||||
"loginStatus": "Stav přihlášení",
|
||||
"loginTime": "Čas přihlášení",
|
||||
"manager": "Manažer",
|
||||
"notifySettingsTitle": "Nastavení oznámení",
|
||||
"onlineDevices": "Online zařízení",
|
||||
"password": "Heslo",
|
||||
"passwordPlaceholder": "Zadejte nové heslo (volitelné)",
|
||||
"permanent": "Trvalý",
|
||||
"pleaseEnterEmail": "Prosím, zadejte e-mail",
|
||||
"referer": "Doporučitel",
|
||||
"refererId": "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",
|
||||
"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",
|
||||
"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á",
|
||||
"upload": "Nahrát",
|
||||
"uploadTraffic": "Nahrát provoz",
|
||||
"userAgent": "Uživatelský agent",
|
||||
"userEmail": "Uživatelský e-mail",
|
||||
"userEmailPlaceholder": "Zadejte e-mail uživatele",
|
||||
|
||||
@ -45,6 +45,7 @@
|
||||
"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.",
|
||||
"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.",
|
||||
"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.",
|
||||
|
||||
@ -1,31 +1,49 @@
|
||||
{
|
||||
"accountEnable": "Konto aktivieren",
|
||||
"actions": "Aktionen",
|
||||
"add": "Hinzufügen",
|
||||
"administrator": "Administrator",
|
||||
"areaCode": "Vorwahl",
|
||||
"areaCodePlaceholder": "Vorwahl",
|
||||
"auth": "Authentifizierung",
|
||||
"authIdentifier": "Authentifizierungskennung",
|
||||
"authIdentifierPlaceholder": "Geben Sie die Authentifizierungskennung ein",
|
||||
"authMethodsTitle": "Authentifizierungseinstellungen",
|
||||
"authType": "Authentifizierungstyp",
|
||||
"authUser": "Authentifizierter Benutzer",
|
||||
"avatar": "Avatar",
|
||||
"balance": "Kontostand",
|
||||
"balanceNotifications": "Benachrichtigungen über Kontostandsänderungen",
|
||||
"balancePlaceholder": "Kontostand",
|
||||
"basicInfoTitle": "Grundinformationen",
|
||||
"cancel": "Abbrechen",
|
||||
"commission": "Provision",
|
||||
"commissionPlaceholder": "Provision eingeben",
|
||||
"confirm": "Bestätigen",
|
||||
"confirmDelete": "Sind Sie sicher, dass Sie löschen möchten?",
|
||||
"confirmOffline": "Offline bestätigen",
|
||||
"create": "Erstellen",
|
||||
"createSubscription": "Abonnement erstellen",
|
||||
"createSuccess": "Erstellung erfolgreich",
|
||||
"createUser": "Benutzer erstellen",
|
||||
"createdAt": "Registrierungsdatum",
|
||||
"delete": "Löschen",
|
||||
"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",
|
||||
"detail": "Detail",
|
||||
"deviceLimit": "Gerätelimit",
|
||||
"download": "Herunterladen",
|
||||
"downloadTraffic": "Download-Verkehr",
|
||||
"edit": "Bearbeiten",
|
||||
"editSubscription": "Abonnement bearbeiten",
|
||||
"editUser": "Benutzer bearbeiten",
|
||||
"email": "E-Mail",
|
||||
"emailNotifications": "E-Mail-Benachrichtigungen",
|
||||
"enable": "Aktivieren",
|
||||
"expireTime": "Ablaufzeit",
|
||||
"expiredAt": "Abgelaufen am",
|
||||
"failed": "Fehlgeschlagen",
|
||||
"giftAmount": "Geschenkbetrag",
|
||||
"giftAmountPlaceholder": "Geben Sie den Geschenkbetrag ein",
|
||||
"invalidEmailFormat": "Ungültiges E-Mail-Format",
|
||||
@ -33,18 +51,47 @@
|
||||
"inviteCodePlaceholder": "Einladungscode eingeben (leer lassen, um zu generieren)",
|
||||
"loading": "Laden...",
|
||||
"loginIp": "Login-IP",
|
||||
"loginNotifications": "Anmeldebenachrichtigungen",
|
||||
"loginStatus": "Anmeldestatus",
|
||||
"loginTime": "Anmeldezeit",
|
||||
"manager": "Manager",
|
||||
"notifySettingsTitle": "Benachrichtigungseinstellungen",
|
||||
"onlineDevices": "Online-Geräte",
|
||||
"password": "Passwort",
|
||||
"passwordPlaceholder": "Neues Passwort eingeben (optional)",
|
||||
"permanent": "Dauerhaft",
|
||||
"pleaseEnterEmail": "Bitte E-Mail eingeben",
|
||||
"referer": "Empfehler",
|
||||
"refererId": "Referenz-ID",
|
||||
"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",
|
||||
"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",
|
||||
"telephonePlaceholder": "Telefonnummer eingeben",
|
||||
"totalTraffic": "Gesamtverkehr",
|
||||
"tradeNotifications": "Handelsbenachrichtigungen",
|
||||
"trafficLimit": "Verkehrslimit",
|
||||
"trafficLogs": "Verkehrsprotokolle",
|
||||
"unlimited": "Unbegrenzt",
|
||||
"unverified": "Unbestätigt",
|
||||
"update": "Aktualisieren",
|
||||
"updateSuccess": "Aktualisierung erfolgreich",
|
||||
"upload": "Hochladen",
|
||||
"uploadTraffic": "Datenverkehr hochladen",
|
||||
"userAgent": "Benutzeragent",
|
||||
"userEmail": "Benutzer-E-Mail",
|
||||
"userEmailPlaceholder": "Benutzer-E-Mail eingeben",
|
||||
|
||||
@ -45,6 +45,7 @@
|
||||
"60002": "Unable to use the subscription at the moment, please try again later.",
|
||||
"60003": "An existing subscription is detected. Please cancel it before proceeding.",
|
||||
"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.",
|
||||
"80001": "Task was not successfully queued, please try again later.",
|
||||
"90001": "Please disable DEBUG mode and try again.",
|
||||
|
||||
@ -1,31 +1,49 @@
|
||||
{
|
||||
"accountEnable": "Account Enable",
|
||||
"actions": "Actions",
|
||||
"add": "Add",
|
||||
"administrator": "Administrator",
|
||||
"areaCode": "Area Code",
|
||||
"areaCodePlaceholder": "Area code",
|
||||
"auth": "Auth",
|
||||
"authIdentifier": "Auth Identifier",
|
||||
"authIdentifierPlaceholder": "Enter auth identifier",
|
||||
"authMethodsTitle": "Authentication Settings",
|
||||
"authType": "Auth Type",
|
||||
"authUser": "Auth User",
|
||||
"avatar": "Avatar",
|
||||
"balance": "Balance",
|
||||
"balanceNotifications": "Balance Change Notifications",
|
||||
"balancePlaceholder": "Balance",
|
||||
"basicInfoTitle": "Basic Information",
|
||||
"cancel": "Cancel",
|
||||
"commission": "Commission",
|
||||
"commissionPlaceholder": "Enter commission",
|
||||
"confirm": "Confirm",
|
||||
"confirmDelete": "Are you sure you want to delete?",
|
||||
"confirmDelete": "Confirm Delete",
|
||||
"confirmOffline": "Confirm Offline",
|
||||
"create": "Create",
|
||||
"createSubscription": "Create Subscription",
|
||||
"createSuccess": "Create successful",
|
||||
"createUser": "Create User",
|
||||
"createdAt": "Created At",
|
||||
"delete": "Delete",
|
||||
"deleteDescription": "Data cannot be recovered after deletion, please proceed with caution.",
|
||||
"deleteSubscriptionDescription": "Are you sure to delete this subscription?",
|
||||
"deleteSuccess": "Delete successful",
|
||||
"detail": "Detail",
|
||||
"deviceLimit": "Device Limit",
|
||||
"download": "Download",
|
||||
"downloadTraffic": "Download Traffic",
|
||||
"edit": "Edit",
|
||||
"editSubscription": "Edit Subscription",
|
||||
"editUser": "Edit User",
|
||||
"email": "Email",
|
||||
"emailNotifications": "Email Notifications",
|
||||
"enable": "Enable",
|
||||
"expireTime": "Expire Time",
|
||||
"expiredAt": "Expired At",
|
||||
"failed": "Failed",
|
||||
"giftAmount": "Gift Amount",
|
||||
"giftAmountPlaceholder": "Enter gift amount",
|
||||
"invalidEmailFormat": "Invalid email format",
|
||||
@ -33,18 +51,47 @@
|
||||
"inviteCodePlaceholder": "Enter invite code (leave blank to generate)",
|
||||
"loading": "Loading...",
|
||||
"loginIp": "Login IP",
|
||||
"loginNotifications": "Login Notifications",
|
||||
"loginStatus": "Login Status",
|
||||
"loginTime": "Login Time",
|
||||
"manager": "Manager",
|
||||
"notifySettingsTitle": "Notification Settings",
|
||||
"onlineDevices": "Online Devices",
|
||||
"password": "Password",
|
||||
"passwordPlaceholder": "Enter new password (optional)",
|
||||
"permanent": "Permanent",
|
||||
"pleaseEnterEmail": "Please enter email",
|
||||
"referer": "Referer",
|
||||
"refererId": "Referer ID",
|
||||
"refererIdPlaceholder": "Enter referer ID",
|
||||
"referralCode": "Referral Code",
|
||||
"referrerUserId": "Referrer (User ID)",
|
||||
"remove": "Remove",
|
||||
"resetTime": "Reset Time",
|
||||
"save": "Save",
|
||||
"searchIp": "Search IP address",
|
||||
"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",
|
||||
"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",
|
||||
"upload": "Upload",
|
||||
"uploadTraffic": "Upload Traffic",
|
||||
"userAgent": "User Agent",
|
||||
"userEmail": "User Email",
|
||||
"userEmailPlaceholder": "Enter user email",
|
||||
|
||||
@ -45,6 +45,7 @@
|
||||
"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.",
|
||||
"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.",
|
||||
"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.",
|
||||
|
||||
@ -1,31 +1,49 @@
|
||||
{
|
||||
"accountEnable": "Habilitar cuenta",
|
||||
"actions": "acciones",
|
||||
"add": "Agregar",
|
||||
"administrator": "Administrador",
|
||||
"areaCode": "Código de Área",
|
||||
"areaCodePlaceholder": "Código de área",
|
||||
"auth": "Autenticación",
|
||||
"authIdentifier": "Identificador de Autenticación",
|
||||
"authIdentifierPlaceholder": "Ingrese el identificador de autenticación",
|
||||
"authMethodsTitle": "Configuración de Autenticación",
|
||||
"authType": "Tipo de Autenticación",
|
||||
"authUser": "Usuario Autenticado",
|
||||
"avatar": "Avatar",
|
||||
"balance": "Saldo",
|
||||
"balanceNotifications": "Notificaciones de Cambio de Saldo",
|
||||
"balancePlaceholder": "Saldo",
|
||||
"basicInfoTitle": "Información Básica",
|
||||
"cancel": "Cancelar",
|
||||
"commission": "Comisión",
|
||||
"commissionPlaceholder": "Ingrese comisión",
|
||||
"confirm": "Confirmar",
|
||||
"confirmDelete": "¿Está seguro de que desea eliminar?",
|
||||
"confirmOffline": "Confirmar sin conexión",
|
||||
"create": "Crear",
|
||||
"createSubscription": "Crear suscripción",
|
||||
"createSuccess": "Creación exitosa",
|
||||
"createUser": "Crear usuario",
|
||||
"createdAt": "Fecha de registro",
|
||||
"delete": "eliminar",
|
||||
"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",
|
||||
"detail": "Detalle",
|
||||
"deviceLimit": "Límite de Dispositivos",
|
||||
"download": "Descargar",
|
||||
"downloadTraffic": "Descargar Tráfico",
|
||||
"edit": "editar",
|
||||
"editSubscription": "Editar suscripción",
|
||||
"editUser": "Editar usuario",
|
||||
"email": "correo electrónico",
|
||||
"emailNotifications": "Notificaciones por correo electrónico",
|
||||
"enable": "Habilitar",
|
||||
"expireTime": "Tiempo de Expiración",
|
||||
"expiredAt": "Fecha de vencimiento",
|
||||
"failed": "Fallido",
|
||||
"giftAmount": "Monto del Regalo",
|
||||
"giftAmountPlaceholder": "Ingrese el monto del regalo",
|
||||
"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)",
|
||||
"loading": "Cargando...",
|
||||
"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",
|
||||
"manager": "Gerente",
|
||||
"notifySettingsTitle": "Configuración de Notificaciones",
|
||||
"onlineDevices": "Dispositivos en línea",
|
||||
"password": "Contraseña",
|
||||
"passwordPlaceholder": "Ingrese nueva contraseña (opcional)",
|
||||
"permanent": "Permanente",
|
||||
"pleaseEnterEmail": "Por favor, introduce el correo electrónico",
|
||||
"referer": "Recomendador",
|
||||
"refererId": "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",
|
||||
"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",
|
||||
"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",
|
||||
"upload": "Subir",
|
||||
"uploadTraffic": "Subir Tráfico",
|
||||
"userAgent": "Agente de Usuario",
|
||||
"userEmail": "Correo Electrónico del Usuario",
|
||||
"userEmailPlaceholder": "Introduce el correo electrónico del usuario",
|
||||
|
||||
@ -45,6 +45,7 @@
|
||||
"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.",
|
||||
"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.",
|
||||
"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.",
|
||||
|
||||
@ -1,31 +1,49 @@
|
||||
{
|
||||
"accountEnable": "Habilitar Cuenta",
|
||||
"actions": "acciones",
|
||||
"add": "Agregar",
|
||||
"administrator": "Administrador",
|
||||
"areaCode": "Código de Área",
|
||||
"areaCodePlaceholder": "Código de área",
|
||||
"auth": "Autenticación",
|
||||
"authIdentifier": "Identificador de Autenticación",
|
||||
"authIdentifierPlaceholder": "Ingrese identificador de autenticación",
|
||||
"authMethodsTitle": "Configuración de Autenticación",
|
||||
"authType": "Tipo de Autenticación",
|
||||
"authUser": "Usuario Autenticado",
|
||||
"avatar": "Avatar",
|
||||
"balance": "Saldo",
|
||||
"balanceNotifications": "Notificaciones de Cambio de Saldo",
|
||||
"balancePlaceholder": "Saldo",
|
||||
"basicInfoTitle": "Información Básica",
|
||||
"cancel": "Cancelar",
|
||||
"commission": "Comisión",
|
||||
"commissionPlaceholder": "Ingrese comisión",
|
||||
"confirm": "Confirmar",
|
||||
"confirmDelete": "¿Está seguro de que desea eliminar?",
|
||||
"confirmOffline": "Confirmar sin conexión",
|
||||
"create": "Crear",
|
||||
"createSubscription": "Crear Suscripción",
|
||||
"createSuccess": "Creación exitosa",
|
||||
"createUser": "Crear usuario",
|
||||
"createdAt": "Fecha de registro",
|
||||
"delete": "Eliminar",
|
||||
"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",
|
||||
"detail": "Detalle",
|
||||
"deviceLimit": "Límite de Dispositivos",
|
||||
"download": "Descargar",
|
||||
"downloadTraffic": "Descargar Tráfico",
|
||||
"edit": "editar",
|
||||
"editSubscription": "Editar Suscripción",
|
||||
"editUser": "Editar usuario",
|
||||
"email": "correo electrónico",
|
||||
"emailNotifications": "Notificaciones por Correo Electrónico",
|
||||
"enable": "Habilitar",
|
||||
"expireTime": "Tiempo de Expiración",
|
||||
"expiredAt": "Fecha de vencimiento",
|
||||
"failed": "Fallido",
|
||||
"giftAmount": "Monto del Regalo",
|
||||
"giftAmountPlaceholder": "Ingrese el monto del regalo",
|
||||
"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)",
|
||||
"loading": "Cargando...",
|
||||
"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",
|
||||
"manager": "Gerente",
|
||||
"notifySettingsTitle": "Configuración de Notificaciones",
|
||||
"onlineDevices": "Dispositivos en línea",
|
||||
"password": "Contraseña",
|
||||
"passwordPlaceholder": "Ingresa nueva contraseña (opcional)",
|
||||
"permanent": "Permanente",
|
||||
"pleaseEnterEmail": "Por favor, ingresa el correo electrónico",
|
||||
"referer": "Recomendador",
|
||||
"refererId": "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",
|
||||
"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",
|
||||
"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",
|
||||
"upload": "Subir",
|
||||
"uploadTraffic": "Subir Tráfico",
|
||||
"userAgent": "Agente de Usuario",
|
||||
"userEmail": "Correo Electrónico del Usuario",
|
||||
"userEmailPlaceholder": "Ingresa el correo electrónico del usuario",
|
||||
|
||||
@ -45,6 +45,7 @@
|
||||
"60002": "در حال حاضر نمیتوان از اشتراک استفاده کرد، لطفاً بعداً دوباره تلاش کنید.",
|
||||
"60003": "یک اشتراک موجود شناسایی شد. لطفاً قبل از ادامه آن را لغو کنید.",
|
||||
"60004": "در حال حاضر امکان حذف وجود ندارد زیرا اشتراک دارای کاربران فعال است.",
|
||||
"60005": "حالت اشتراک تک از حد مجاز کاربران عبور کرده است",
|
||||
"70001": "کد تأیید نادرست است، لطفاً دوباره وارد کنید.",
|
||||
"80001": "وظیفه بهطور موفقیتآمیز در صف قرار نگرفت، لطفاً بعداً دوباره تلاش کنید.",
|
||||
"90001": "لطفاً حالت DEBUG را غیرفعال کرده و دوباره تلاش کنید.",
|
||||
|
||||
@ -1,31 +1,49 @@
|
||||
{
|
||||
"accountEnable": "فعالسازی حساب",
|
||||
"actions": "اقدامات",
|
||||
"add": "افزودن",
|
||||
"administrator": "مدیر",
|
||||
"areaCode": "کد منطقه",
|
||||
"areaCodePlaceholder": "کد منطقه",
|
||||
"auth": "احراز هویت",
|
||||
"authIdentifier": "شناسه احراز هویت",
|
||||
"authIdentifierPlaceholder": "شناسه احراز هویت را وارد کنید",
|
||||
"authMethodsTitle": "تنظیمات احراز هویت",
|
||||
"authType": "نوع احراز هویت",
|
||||
"authUser": "کاربر تأیید شده",
|
||||
"avatar": "آواتار",
|
||||
"balance": "تعادل",
|
||||
"balanceNotifications": "اعلانهای تغییر موجودی",
|
||||
"balancePlaceholder": "موجودی",
|
||||
"basicInfoTitle": "اطلاعات پایه",
|
||||
"cancel": "لغو",
|
||||
"commission": "کمیسیون",
|
||||
"commissionPlaceholder": "کمیسیون را وارد کنید",
|
||||
"confirm": "تأیید",
|
||||
"confirmDelete": "آیا مطمئن هستید که میخواهید حذف کنید؟",
|
||||
"confirmOffline": "تأیید آفلاین",
|
||||
"create": "ایجاد",
|
||||
"createSubscription": "ایجاد اشتراک",
|
||||
"createSuccess": "ایجاد با موفقیت انجام شد",
|
||||
"createUser": "ایجاد کاربر",
|
||||
"createdAt": "ایجاد شده در",
|
||||
"delete": "حذف",
|
||||
"deleteDescription": "پس از حذف، دادهها قابل بازیابی نیستند، لطفاً با احتیاط ادامه دهید.",
|
||||
"deleteSubscriptionDescription": "آیا مطمئن هستید که میخواهید این اشتراک را حذف کنید؟",
|
||||
"deleteSuccess": "حذف با موفقیت انجام شد",
|
||||
"detail": "جزئیات",
|
||||
"deviceLimit": "محدودیت دستگاه",
|
||||
"download": "دانلود",
|
||||
"downloadTraffic": "ترافیک دانلود",
|
||||
"edit": "ویرایش",
|
||||
"editSubscription": "ویرایش اشتراک",
|
||||
"editUser": "ویرایش کاربر",
|
||||
"email": "ایمیل",
|
||||
"emailNotifications": "اعلانهای ایمیل",
|
||||
"enable": "فعال کردن",
|
||||
"expireTime": "زمان انقضا",
|
||||
"expiredAt": "منقضی شده در",
|
||||
"failed": "ناموفق",
|
||||
"giftAmount": "مقدار هدیه",
|
||||
"giftAmountPlaceholder": "مبلغ هدیه را وارد کنید",
|
||||
"invalidEmailFormat": "فرمت ایمیل نامعتبر است",
|
||||
@ -33,18 +51,47 @@
|
||||
"inviteCodePlaceholder": "کد دعوت را وارد کنید (برای تولید خالی بگذارید)",
|
||||
"loading": "در حال بارگذاری...",
|
||||
"loginIp": "آیپی ورود",
|
||||
"loginNotifications": "اعلانهای ورود",
|
||||
"loginStatus": "وضعیت ورود",
|
||||
"loginTime": "زمان ورود",
|
||||
"manager": "مدیر",
|
||||
"notifySettingsTitle": "تنظیمات اعلانها",
|
||||
"onlineDevices": "دستگاههای آنلاین",
|
||||
"password": "رمز عبور",
|
||||
"passwordPlaceholder": "رمز عبور جدید را وارد کنید (اختیاری)",
|
||||
"permanent": "دائمی",
|
||||
"pleaseEnterEmail": "لطفاً ایمیل خود را وارد کنید",
|
||||
"referer": "ارجاعدهنده",
|
||||
"refererId": "شناسه معرف",
|
||||
"refererIdPlaceholder": "شناسه معرف را وارد کنید",
|
||||
"referralCode": "کد ارجاع",
|
||||
"referrerUserId": "ارجاعدهنده (شناسه کاربر)",
|
||||
"remove": "حذف",
|
||||
"resetTime": "زمان بازنشانی",
|
||||
"save": "ذخیره",
|
||||
"searchIp": "جستجوی آدرس IP",
|
||||
"selectAuthType": "نوع احراز هویت را انتخاب کنید",
|
||||
"speedLimit": "محدودیت سرعت",
|
||||
"subscription": "اشتراک",
|
||||
"subscriptionDetails": "جزئیات اشتراک",
|
||||
"subscriptionList": "لیست اشتراک",
|
||||
"subscriptionLogs": "گزارشهای اشتراک",
|
||||
"subscriptionName": "نام اشتراک",
|
||||
"subscriptionNotifications": "اعلانهای اشتراک",
|
||||
"success": "موفقیت",
|
||||
"telegramNotifications": "اعلانهای تلگرام",
|
||||
"telephone": "شماره تلفن",
|
||||
"telephonePlaceholder": "شماره تلفن را وارد کنید",
|
||||
"totalTraffic": "کل ترافیک",
|
||||
"tradeNotifications": "اعلانهای تجارت",
|
||||
"trafficLimit": "محدودیت ترافیک",
|
||||
"trafficLogs": "گزارشهای ترافیک",
|
||||
"unlimited": "نامحدود",
|
||||
"unverified": "تأیید نشده",
|
||||
"update": "بهروزرسانی",
|
||||
"updateSuccess": "بهروزرسانی با موفقیت انجام شد",
|
||||
"upload": "بارگذاری",
|
||||
"uploadTraffic": "بارگذاری ترافیک",
|
||||
"userAgent": "عامل کاربر",
|
||||
"userEmail": "ایمیل کاربر",
|
||||
"userEmailPlaceholder": "ایمیل کاربر را وارد کنید",
|
||||
|
||||
@ -45,6 +45,7 @@
|
||||
"60002": "Tilausta ei voi käyttää tällä hetkellä, yritä myöhemmin uudelleen.",
|
||||
"60003": "Olemassa oleva tilaus havaittu. Peruuta se ennen jatkamista.",
|
||||
"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.",
|
||||
"80001": "Tehtävää ei lisätty jonoon, yritä myöhemmin uudelleen.",
|
||||
"90001": "Sulje DEBUG-tila ja yritä uudelleen.",
|
||||
|
||||
@ -1,31 +1,49 @@
|
||||
{
|
||||
"accountEnable": "Tilin aktivointi",
|
||||
"actions": "toiminnot",
|
||||
"add": "Lisää",
|
||||
"administrator": "Ylläpitäjä",
|
||||
"areaCode": "Alueen koodi",
|
||||
"areaCodePlaceholder": "Alueen koodi",
|
||||
"auth": "Tunnistus",
|
||||
"authIdentifier": "Tunnistautumistunnus",
|
||||
"authIdentifierPlaceholder": "Syötä tunnistautumistunnus",
|
||||
"authMethodsTitle": "Todennusasetukset",
|
||||
"authType": "Todennustyyppi",
|
||||
"authUser": "Todennus Käyttäjä",
|
||||
"avatar": "Avatar",
|
||||
"balance": "Saldo",
|
||||
"balanceNotifications": "Saldon muutosilmoitukset",
|
||||
"balancePlaceholder": "Saldo",
|
||||
"basicInfoTitle": "Perustiedot",
|
||||
"cancel": "Peruuta",
|
||||
"commission": "Komissio",
|
||||
"commissionPlaceholder": "Syötä komissio",
|
||||
"confirm": "Vahvista",
|
||||
"confirmDelete": "Oletko varma, että haluat poistaa?",
|
||||
"confirmOffline": "Vahvista offline-tila",
|
||||
"create": "Luo",
|
||||
"createSubscription": "Luo tilaus",
|
||||
"createSuccess": "Luonti onnistui",
|
||||
"createUser": "Luo käyttäjä",
|
||||
"createdAt": "Rekisteröitymisaika",
|
||||
"delete": "poista",
|
||||
"deleteDescription": "Poistamisen jälkeen tietoja ei voi palauttaa, ole varovainen.",
|
||||
"deleteSubscriptionDescription": "Haluatko varmasti poistaa tämän tilauksen?",
|
||||
"deleteSuccess": "Poisto onnistui",
|
||||
"detail": "Yksityiskohta",
|
||||
"deviceLimit": "Laiterajoitus",
|
||||
"download": "Lataa",
|
||||
"downloadTraffic": "Lataa liikenne",
|
||||
"edit": "muokkaa",
|
||||
"editSubscription": "Muokkaa tilausta",
|
||||
"editUser": "Muokkaa käyttäjää",
|
||||
"email": "sähköposti",
|
||||
"emailNotifications": "Sähköposti-ilmoitukset",
|
||||
"enable": "Ota käyttöön",
|
||||
"expireTime": "Vanhentumisaika",
|
||||
"expiredAt": "Vanhentunut",
|
||||
"failed": "Epäonnistui",
|
||||
"giftAmount": "Lahjan määrä",
|
||||
"giftAmountPlaceholder": "Syötä lahjan määrä",
|
||||
"invalidEmailFormat": "Virheellinen sähköpostimuoto",
|
||||
@ -33,18 +51,47 @@
|
||||
"inviteCodePlaceholder": "Syötä kutsukoodi (jätä tyhjäksi luodaksesi uuden)",
|
||||
"loading": "Ladataan...",
|
||||
"loginIp": "Kirjautumis-IP",
|
||||
"loginNotifications": "Kirjautumisilmoitukset",
|
||||
"loginStatus": "Kirjautumistila",
|
||||
"loginTime": "Kirjautumisaika",
|
||||
"manager": "Johtaja",
|
||||
"notifySettingsTitle": "Ilmoitusasetukset",
|
||||
"onlineDevices": "Verkossa olevat laitteet",
|
||||
"password": "Salasana",
|
||||
"passwordPlaceholder": "Syötä uusi salasana (valinnainen)",
|
||||
"permanent": "Pysyvä",
|
||||
"pleaseEnterEmail": "Ole hyvä ja syötä sähköpostiosoite",
|
||||
"referer": "Suosittelija",
|
||||
"refererId": "Viittaajan 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",
|
||||
"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",
|
||||
"telephonePlaceholder": "Syötä puhelinnumero",
|
||||
"totalTraffic": "Kokonaisliikenne",
|
||||
"tradeNotifications": "Kauppailmoitukset",
|
||||
"trafficLimit": "Liikenteen rajoitus",
|
||||
"trafficLogs": "Liikennelokit",
|
||||
"unlimited": "Rajoittamaton",
|
||||
"unverified": "Vahvistamaton",
|
||||
"update": "Päivitä",
|
||||
"updateSuccess": "Päivitys onnistui",
|
||||
"upload": "Lataa",
|
||||
"uploadTraffic": "Lähetä liikenne",
|
||||
"userAgent": "Käyttäjäagentti",
|
||||
"userEmail": "Käyttäjän sähköposti",
|
||||
"userEmailPlaceholder": "Syötä käyttäjän sähköpostiosoite",
|
||||
|
||||
@ -45,6 +45,7 @@
|
||||
"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.",
|
||||
"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.",
|
||||
"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.",
|
||||
|
||||
@ -1,31 +1,49 @@
|
||||
{
|
||||
"accountEnable": "Activation du compte",
|
||||
"actions": "actions",
|
||||
"add": "Ajouter",
|
||||
"administrator": "Administrateur",
|
||||
"areaCode": "Indicatif régional",
|
||||
"areaCodePlaceholder": "Indicatif régional",
|
||||
"auth": "Auth",
|
||||
"authIdentifier": "Identifiant d'authentification",
|
||||
"authIdentifierPlaceholder": "Entrez l'identifiant d'authentification",
|
||||
"authMethodsTitle": "Paramètres d'authentification",
|
||||
"authType": "Type d'authentification",
|
||||
"authUser": "Utilisateur Auth",
|
||||
"avatar": "Avatar",
|
||||
"balance": "Solde",
|
||||
"balanceNotifications": "Notifications de changement de solde",
|
||||
"balancePlaceholder": "Solde",
|
||||
"basicInfoTitle": "Informations de base",
|
||||
"cancel": "Annuler",
|
||||
"commission": "Commission",
|
||||
"commissionPlaceholder": "Entrez la commission",
|
||||
"confirm": "Confirmer",
|
||||
"confirmDelete": "Êtes-vous sûr de vouloir supprimer ?",
|
||||
"confirmOffline": "Confirmer hors ligne",
|
||||
"create": "Créer",
|
||||
"createSubscription": "Créer un abonnement",
|
||||
"createSuccess": "Création réussie",
|
||||
"createUser": "Créer un utilisateur",
|
||||
"createdAt": "Date d'inscription",
|
||||
"delete": "Supprimer",
|
||||
"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",
|
||||
"detail": "Détail",
|
||||
"deviceLimit": "Limite d'appareil",
|
||||
"download": "Télécharger",
|
||||
"downloadTraffic": "Télécharger le trafic",
|
||||
"edit": "Éditer",
|
||||
"editSubscription": "Modifier l'abonnement",
|
||||
"editUser": "Modifier l'utilisateur",
|
||||
"email": "e-mail",
|
||||
"emailNotifications": "Notifications par e-mail",
|
||||
"enable": "Activer",
|
||||
"expireTime": "Date d'expiration",
|
||||
"expiredAt": "Expiré le",
|
||||
"failed": "Échoué",
|
||||
"giftAmount": "Montant du cadeau",
|
||||
"giftAmountPlaceholder": "Entrez le montant du cadeau",
|
||||
"invalidEmailFormat": "Format d'email invalide",
|
||||
@ -33,18 +51,47 @@
|
||||
"inviteCodePlaceholder": "Entrez le code d'invitation (laissez vide pour générer)",
|
||||
"loading": "Chargement...",
|
||||
"loginIp": "IP de connexion",
|
||||
"loginNotifications": "Notifications de connexion",
|
||||
"loginStatus": "Statut de connexion",
|
||||
"loginTime": "Heure de connexion",
|
||||
"manager": "Gestionnaire",
|
||||
"notifySettingsTitle": "Paramètres de notification",
|
||||
"onlineDevices": "Appareils en ligne",
|
||||
"password": "Mot de passe",
|
||||
"passwordPlaceholder": "Entrez un nouveau mot de passe (facultatif)",
|
||||
"permanent": "Permanent",
|
||||
"pleaseEnterEmail": "Veuillez entrer votre adresse e-mail",
|
||||
"referer": "Référent",
|
||||
"refererId": "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",
|
||||
"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",
|
||||
"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",
|
||||
"upload": "Téléverser",
|
||||
"uploadTraffic": "Télécharger le trafic",
|
||||
"userAgent": "Agent utilisateur",
|
||||
"userEmail": "E-mail de l'utilisateur",
|
||||
"userEmailPlaceholder": "Entrez l'email de l'utilisateur",
|
||||
|
||||
@ -45,6 +45,7 @@
|
||||
"60002": "अस्थायी रूप से इस सदस्यता का उपयोग नहीं किया जा सकता, कृपया थोड़ी देर बाद पुनः प्रयास करें।",
|
||||
"60003": "एक मौजूदा सदस्यता का पता चला है। कृपया आगे बढ़ने से पहले इसे रद्द करें।",
|
||||
"60004": "वर्तमान में हटाने में असमर्थ क्योंकि सदस्यता में सक्रिय उपयोगकर्ता हैं।",
|
||||
"60005": "एकल सदस्यता मोड ने उपयोगकर्ता सीमा से अधिक कर दिया है",
|
||||
"70001": "सत्यापन कोड गलत है, कृपया पुनः दर्ज करें।",
|
||||
"80001": "कार्य सफलतापूर्वक कतार में नहीं जोड़ा गया, कृपया थोड़ी देर बाद पुनः प्रयास करें।",
|
||||
"90001": "कृपया DEBUG मोड बंद करें और फिर पुनः प्रयास करें।",
|
||||
|
||||
@ -1,31 +1,49 @@
|
||||
{
|
||||
"accountEnable": "खाता सक्षम करें",
|
||||
"actions": "क्रियाएँ",
|
||||
"add": "जोड़ें",
|
||||
"administrator": "प्रशासक",
|
||||
"areaCode": "क्षेत्र कोड",
|
||||
"areaCodePlaceholder": "क्षेत्र कोड",
|
||||
"auth": "प्रमाणीकरण",
|
||||
"authIdentifier": "प्रमाणीकरण पहचानकर्ता",
|
||||
"authIdentifierPlaceholder": "प्रमाणिक पहचानकर्ता दर्ज करें",
|
||||
"authMethodsTitle": "प्रमाणीकरण सेटिंग्स",
|
||||
"authType": "प्रमाणीकरण प्रकार",
|
||||
"authUser": "प्रमाणित उपयोगकर्ता",
|
||||
"avatar": "अवतार",
|
||||
"balance": "शेष",
|
||||
"balanceNotifications": "बैलेंस परिवर्तन सूचनाएं",
|
||||
"balancePlaceholder": "शेष",
|
||||
"basicInfoTitle": "मूल जानकारी",
|
||||
"cancel": "रद्द करें",
|
||||
"commission": "आयोग",
|
||||
"commissionPlaceholder": "कमीशन दर्ज करें",
|
||||
"confirm": "पुष्टि करें",
|
||||
"confirmDelete": "क्या आप वाकई हटाना चाहते हैं?",
|
||||
"confirmOffline": "ऑफ़लाइन की पुष्टि करें",
|
||||
"create": "सृजन",
|
||||
"createSubscription": "सदस्यता बनाएं",
|
||||
"createSuccess": "सृजन सफल",
|
||||
"createUser": "उपयोगकर्ता बनाएं",
|
||||
"createdAt": "पंजीकरण समय",
|
||||
"delete": "हटाएं",
|
||||
"deleteDescription": "हटाने के बाद डेटा पुनर्प्राप्त नहीं किया जा सकता है, कृपया सावधानीपूर्वक कार्य करें।",
|
||||
"deleteSubscriptionDescription": "क्या आप वाकई इस सदस्यता को हटाना चाहते हैं?",
|
||||
"deleteSuccess": "हटाने में सफलता",
|
||||
"detail": "विवरण",
|
||||
"deviceLimit": "डिवाइस सीमा",
|
||||
"download": "डाउनलोड",
|
||||
"downloadTraffic": "डाउनलोड ट्रैफिक",
|
||||
"edit": "संपादित करें",
|
||||
"editSubscription": "सदस्यता संपादित करें",
|
||||
"editUser": "उपयोगकर्ता संपादित करें",
|
||||
"email": "ईमेल",
|
||||
"emailNotifications": "ईमेल सूचनाएं",
|
||||
"enable": "सक्षम करें",
|
||||
"expireTime": "समाप्ति समय",
|
||||
"expiredAt": "समाप्ति तिथि",
|
||||
"failed": "असफल",
|
||||
"giftAmount": "उपहार राशि",
|
||||
"giftAmountPlaceholder": "उपहार राशि दर्ज करें",
|
||||
"invalidEmailFormat": "अमान्य ईमेल प्रारूप",
|
||||
@ -33,18 +51,47 @@
|
||||
"inviteCodePlaceholder": "आमंत्रण कोड दर्ज करें (उत्पन्न करने के लिए खाली छोड़ें)",
|
||||
"loading": "लोड हो रहा है...",
|
||||
"loginIp": "लॉगिन आईपी",
|
||||
"loginNotifications": "लॉगिन सूचनाएं",
|
||||
"loginStatus": "लॉगिन स्थिति",
|
||||
"loginTime": "लॉगिन समय",
|
||||
"manager": "प्रबंधक",
|
||||
"notifySettingsTitle": "सूचना सेटिंग्स",
|
||||
"onlineDevices": "ऑनलाइन डिवाइस",
|
||||
"password": "पासवर्ड",
|
||||
"passwordPlaceholder": "नया पासवर्ड दर्ज करें (वैकल्पिक)",
|
||||
"permanent": "स्थायी",
|
||||
"pleaseEnterEmail": "कृपया ईमेल दर्ज करें",
|
||||
"referer": "सिफारिशकर्ता",
|
||||
"refererId": "रेफरर आईडी",
|
||||
"refererIdPlaceholder": "रेफरर आईडी दर्ज करें",
|
||||
"referralCode": "रेफरल कोड",
|
||||
"referrerUserId": "रेफरर (उपयोगकर्ता आईडी)",
|
||||
"remove": "हटाएं",
|
||||
"resetTime": "समय रीसेट करें",
|
||||
"save": "सहेजें",
|
||||
"searchIp": "आईपी पता खोजें",
|
||||
"selectAuthType": "प्रमाणीकरण प्रकार चुनें",
|
||||
"speedLimit": "गति सीमा",
|
||||
"subscription": "सदस्यता",
|
||||
"subscriptionDetails": "सदस्यता विवरण",
|
||||
"subscriptionList": "सदस्यता सूची",
|
||||
"subscriptionLogs": "सदस्यता लॉग्स",
|
||||
"subscriptionName": "सदस्यता नाम",
|
||||
"subscriptionNotifications": "सदस्यता सूचनाएं",
|
||||
"success": "सफलता",
|
||||
"telegramNotifications": "टेलीग्राम सूचनाएं",
|
||||
"telephone": "फ़ोन नंबर",
|
||||
"telephonePlaceholder": "फ़ोन नंबर दर्ज करें",
|
||||
"totalTraffic": "कुल ट्रैफ़िक",
|
||||
"tradeNotifications": "व्यापार सूचनाएं",
|
||||
"trafficLimit": "ट्रैफिक सीमा",
|
||||
"trafficLogs": "ट्रैफिक लॉग्स",
|
||||
"unlimited": "असीमित",
|
||||
"unverified": "असत्यापित",
|
||||
"update": "अपडेट",
|
||||
"updateSuccess": "अपडेट सफल",
|
||||
"upload": "अपलोड करें",
|
||||
"uploadTraffic": "अपलोड ट्रैफिक",
|
||||
"userAgent": "उपयोगकर्ता एजेंट",
|
||||
"userEmail": "उपयोगकर्ता ईमेल",
|
||||
"userEmailPlaceholder": "उपयोगकर्ता ईमेल दर्ज करें",
|
||||
|
||||
@ -45,6 +45,7 @@
|
||||
"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.",
|
||||
"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.",
|
||||
"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.",
|
||||
|
||||
@ -1,31 +1,49 @@
|
||||
{
|
||||
"accountEnable": "Fiók engedélyezése",
|
||||
"actions": "műveletek",
|
||||
"add": "Hozzáadás",
|
||||
"administrator": "Rendszergazda",
|
||||
"areaCode": "Körzetszám",
|
||||
"areaCodePlaceholder": "Körzetszám",
|
||||
"auth": "Hitelesítés",
|
||||
"authIdentifier": "Hitelesítési azonosító",
|
||||
"authIdentifierPlaceholder": "Adja meg az azonosítót",
|
||||
"authMethodsTitle": "Hitelesítési beállítások",
|
||||
"authType": "Hitelesítési típus",
|
||||
"authUser": "Hitelesített felhasználó",
|
||||
"avatar": "Avatar",
|
||||
"balance": "Egyenleg",
|
||||
"balanceNotifications": "Egyenlegváltozás Értesítések",
|
||||
"balancePlaceholder": "Egyenleg",
|
||||
"basicInfoTitle": "Alapvető információk",
|
||||
"cancel": "Mégse",
|
||||
"commission": "Jutalék",
|
||||
"commissionPlaceholder": "Adja meg a jutalékot",
|
||||
"confirm": "Megerősítés",
|
||||
"confirmDelete": "Biztosan törölni szeretné?",
|
||||
"confirmOffline": "Megerősítés offline",
|
||||
"create": "Létrehozás",
|
||||
"createSubscription": "Előfizetés létrehozása",
|
||||
"createSuccess": "Sikeres létrehozás",
|
||||
"createUser": "Felhasználó létrehozása",
|
||||
"createdAt": "Regisztráció ideje",
|
||||
"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.",
|
||||
"deleteSubscriptionDescription": "Biztosan törölni szeretné ezt az előfizetést?",
|
||||
"deleteSuccess": "Sikeres törlés",
|
||||
"detail": "Részlet",
|
||||
"deviceLimit": "Eszközkorlát",
|
||||
"download": "Letöltés",
|
||||
"downloadTraffic": "Forgalmi adatok letöltése",
|
||||
"edit": "szerkesztés",
|
||||
"editSubscription": "Előfizetés szerkesztése",
|
||||
"editUser": "Felhasználó szerkesztése",
|
||||
"email": "e-mail",
|
||||
"emailNotifications": "Email értesítések",
|
||||
"enable": "Engedélyezés",
|
||||
"expireTime": "Lejárati idő",
|
||||
"expiredAt": "Lejárati dátum",
|
||||
"failed": "Sikertelen",
|
||||
"giftAmount": "Ajándék Összeg",
|
||||
"giftAmountPlaceholder": "Adja meg az ajándék összegét",
|
||||
"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)",
|
||||
"loading": "Betöltés...",
|
||||
"loginIp": "Bejelentkezési IP",
|
||||
"loginNotifications": "Bejelentkezési értesítések",
|
||||
"loginStatus": "Bejelentkezési állapot",
|
||||
"loginTime": "Bejelentkezési idő",
|
||||
"manager": "Menedzser",
|
||||
"notifySettingsTitle": "Értesítési beállítások",
|
||||
"onlineDevices": "Online eszközök",
|
||||
"password": "Jelszó",
|
||||
"passwordPlaceholder": "Adjon meg új jelszót (opcionális)",
|
||||
"permanent": "Állandó",
|
||||
"pleaseEnterEmail": "Kérjük, adja meg az e-mail címet",
|
||||
"referer": "Ajánló",
|
||||
"refererId": "Hivatkozó azonosí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",
|
||||
"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",
|
||||
"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",
|
||||
"upload": "Feltöltés",
|
||||
"uploadTraffic": "Forgalom feltöltése",
|
||||
"userAgent": "Felhasználói ügynök",
|
||||
"userEmail": "Felhasználó e-mail",
|
||||
"userEmailPlaceholder": "Adja meg a felhasználó e-mail címét",
|
||||
|
||||
@ -45,6 +45,7 @@
|
||||
"60002": "このサブスクリプションは現在使用できません。しばらくしてから再試行してください。",
|
||||
"60003": "既存のサブスクリプションが検出されました。続行する前にキャンセルしてください。",
|
||||
"60004": "サブスクリプションにアクティブなユーザーがいるため、現在削除できません。",
|
||||
"60005": "シングルサブスクリプションモードでは、ユーザー制限を超えました",
|
||||
"70001": "認証コードが間違っています。再入力してください。",
|
||||
"80001": "タスクがキューに正常に追加されませんでした。しばらくしてから再試行してください。",
|
||||
"90001": "DEBUGモードをオフにしてから再試行してください。",
|
||||
|
||||
@ -1,31 +1,49 @@
|
||||
{
|
||||
"accountEnable": "アカウント有効化",
|
||||
"actions": "アクション",
|
||||
"add": "追加",
|
||||
"administrator": "管理者",
|
||||
"areaCode": "市外局番",
|
||||
"areaCodePlaceholder": "市外局番",
|
||||
"auth": "認証",
|
||||
"authIdentifier": "認証識別子",
|
||||
"authIdentifierPlaceholder": "認証IDを入力してください",
|
||||
"authMethodsTitle": "認証設定",
|
||||
"authType": "認証タイプ",
|
||||
"authUser": "認証ユーザー",
|
||||
"avatar": "アバター",
|
||||
"balance": "残高",
|
||||
"balanceNotifications": "残高変更通知",
|
||||
"balancePlaceholder": "残高",
|
||||
"basicInfoTitle": "基本情報",
|
||||
"cancel": "キャンセル",
|
||||
"commission": "手数料",
|
||||
"commissionPlaceholder": "手数料を入力してください",
|
||||
"confirm": "確認",
|
||||
"confirmDelete": "削除してもよろしいですか?",
|
||||
"confirmOffline": "オフラインを確認",
|
||||
"create": "作成",
|
||||
"createSubscription": "サブスクリプションを作成",
|
||||
"createSuccess": "作成成功",
|
||||
"createUser": "ユーザーを作成",
|
||||
"createdAt": "登録日時",
|
||||
"delete": "削除",
|
||||
"deleteDescription": "削除後はデータを復元できませんので、慎重に操作してください。",
|
||||
"deleteSubscriptionDescription": "このサブスクリプションを削除してもよろしいですか?",
|
||||
"deleteSuccess": "削除に成功しました",
|
||||
"detail": "詳細",
|
||||
"deviceLimit": "デバイス制限",
|
||||
"download": "ダウンロード",
|
||||
"downloadTraffic": "ダウンロードトラフィック",
|
||||
"edit": "編集",
|
||||
"editSubscription": "サブスクリプションを編集",
|
||||
"editUser": "ユーザー編集",
|
||||
"email": "メールアドレス",
|
||||
"emailNotifications": "メール通知",
|
||||
"enable": "有効",
|
||||
"expireTime": "有効期限",
|
||||
"expiredAt": "有効期限",
|
||||
"failed": "失敗しました",
|
||||
"giftAmount": "ギフト金額",
|
||||
"giftAmountPlaceholder": "ギフト金額を入力してください",
|
||||
"invalidEmailFormat": "無効なメール形式です",
|
||||
@ -33,18 +51,47 @@
|
||||
"inviteCodePlaceholder": "招待コードを入力してください(生成するには空白のままにしてください)",
|
||||
"loading": "読み込み中...",
|
||||
"loginIp": "ログインIP",
|
||||
"loginNotifications": "ログイン通知",
|
||||
"loginStatus": "ログイン状況",
|
||||
"loginTime": "ログイン時間",
|
||||
"manager": "マネージャー",
|
||||
"notifySettingsTitle": "通知設定",
|
||||
"onlineDevices": "オンラインデバイス",
|
||||
"password": "パスワード",
|
||||
"passwordPlaceholder": "新しいパスワードを入力してください(任意)",
|
||||
"permanent": "永久",
|
||||
"pleaseEnterEmail": "メールアドレスを入力してください",
|
||||
"referer": "推薦者",
|
||||
"refererId": "リファラーID",
|
||||
"refererIdPlaceholder": "紹介者IDを入力してください",
|
||||
"referralCode": "紹介コード",
|
||||
"referrerUserId": "紹介者(ユーザーID)",
|
||||
"remove": "削除",
|
||||
"resetTime": "リセット時間",
|
||||
"save": "保存",
|
||||
"searchIp": "IPアドレスを検索",
|
||||
"selectAuthType": "認証タイプを選択",
|
||||
"speedLimit": "速度制限",
|
||||
"subscription": "サブスクリプション",
|
||||
"subscriptionDetails": "サブスクリプションの詳細",
|
||||
"subscriptionList": "購読リスト",
|
||||
"subscriptionLogs": "サブスクリプションログ",
|
||||
"subscriptionName": "サブスクリプション名",
|
||||
"subscriptionNotifications": "サブスクリプション通知",
|
||||
"success": "成功",
|
||||
"telegramNotifications": "Telegram通知",
|
||||
"telephone": "電話番号",
|
||||
"telephonePlaceholder": "電話番号を入力してください",
|
||||
"totalTraffic": "総トラフィック",
|
||||
"tradeNotifications": "取引通知",
|
||||
"trafficLimit": "トラフィック制限",
|
||||
"trafficLogs": "トラフィックログ",
|
||||
"unlimited": "無制限",
|
||||
"unverified": "未確認",
|
||||
"update": "更新",
|
||||
"updateSuccess": "更新が成功しました",
|
||||
"upload": "アップロード",
|
||||
"uploadTraffic": "アップロードトラフィック",
|
||||
"userAgent": "ユーザーエージェント",
|
||||
"userEmail": "ユーザーのメール",
|
||||
"userEmailPlaceholder": "ユーザーのメールアドレスを入力してください",
|
||||
|
||||
@ -45,6 +45,7 @@
|
||||
"60002": "현재 구독을 사용할 수 없습니다. 잠시 후 다시 시도해 주세요.",
|
||||
"60003": "기존 구독이 감지되었습니다. 계속하기 전에 취소해 주세요.",
|
||||
"60004": "구독에 활성 사용자가 있어 현재 삭제할 수 없습니다.",
|
||||
"60005": "단일 구독 모드가 사용자 한도를 초과했습니다",
|
||||
"70001": "인증 코드가 잘못되었습니다. 다시 입력해 주세요.",
|
||||
"80001": "작업이 큐에 성공적으로 추가되지 않았습니다. 잠시 후 다시 시도해 주세요.",
|
||||
"90001": "DEBUG 모드를 끈 후 다시 시도해 주세요.",
|
||||
|
||||
@ -1,31 +1,49 @@
|
||||
{
|
||||
"accountEnable": "계정 활성화",
|
||||
"actions": "작업",
|
||||
"add": "추가",
|
||||
"administrator": "관리자",
|
||||
"areaCode": "지역 코드",
|
||||
"areaCodePlaceholder": "지역 코드",
|
||||
"auth": "인증",
|
||||
"authIdentifier": "인증 식별자",
|
||||
"authIdentifierPlaceholder": "인증 식별자를 입력하세요",
|
||||
"authMethodsTitle": "인증 설정",
|
||||
"authType": "인증 유형",
|
||||
"authUser": "인증 사용자",
|
||||
"avatar": "아바타",
|
||||
"balance": "잔액",
|
||||
"balanceNotifications": "잔액 변경 알림",
|
||||
"balancePlaceholder": "잔액",
|
||||
"basicInfoTitle": "기본 정보",
|
||||
"cancel": "취소",
|
||||
"commission": "커미션",
|
||||
"commissionPlaceholder": "수수료 입력",
|
||||
"confirm": "확인",
|
||||
"confirmDelete": "삭제하시겠습니까?",
|
||||
"confirmOffline": "오프라인 확인",
|
||||
"create": "생성",
|
||||
"createSubscription": "구독 생성",
|
||||
"createSuccess": "생성 성공",
|
||||
"createUser": "사용자 생성",
|
||||
"createdAt": "가입 시간",
|
||||
"delete": "삭제",
|
||||
"deleteDescription": "삭제 후 데이터는 복구할 수 없으니 신중하게 진행하세요.",
|
||||
"deleteSubscriptionDescription": "이 구독을 삭제하시겠습니까?",
|
||||
"deleteSuccess": "삭제 성공",
|
||||
"detail": "세부사항",
|
||||
"deviceLimit": "기기 제한",
|
||||
"download": "다운로드",
|
||||
"downloadTraffic": "트래픽 다운로드",
|
||||
"edit": "편집",
|
||||
"editSubscription": "구독 수정",
|
||||
"editUser": "사용자 편집",
|
||||
"email": "이메일",
|
||||
"emailNotifications": "이메일 알림",
|
||||
"enable": "사용",
|
||||
"expireTime": "만료 시간",
|
||||
"expiredAt": "만료일",
|
||||
"failed": "실패",
|
||||
"giftAmount": "선물 금액",
|
||||
"giftAmountPlaceholder": "선물 금액 입력",
|
||||
"invalidEmailFormat": "잘못된 이메일 형식입니다",
|
||||
@ -33,18 +51,47 @@
|
||||
"inviteCodePlaceholder": "초대 코드를 입력하세요 (생성을 원하시면 비워두세요)",
|
||||
"loading": "로딩 중...",
|
||||
"loginIp": "로그인 IP",
|
||||
"loginNotifications": "로그인 알림",
|
||||
"loginStatus": "로그인 상태",
|
||||
"loginTime": "로그인 시간",
|
||||
"manager": "매니저",
|
||||
"notifySettingsTitle": "알림 설정",
|
||||
"onlineDevices": "온라인 기기",
|
||||
"password": "비밀번호",
|
||||
"passwordPlaceholder": "새 비밀번호 입력 (선택 사항)",
|
||||
"permanent": "영구적인",
|
||||
"pleaseEnterEmail": "이메일을 입력하세요",
|
||||
"referer": "추천인",
|
||||
"refererId": "추천인 ID",
|
||||
"refererIdPlaceholder": "추천인 ID를 입력하세요",
|
||||
"referralCode": "추천 코드",
|
||||
"referrerUserId": "추천인 (사용자 ID)",
|
||||
"remove": "제거",
|
||||
"resetTime": "재설정 시간",
|
||||
"save": "저장",
|
||||
"searchIp": "IP 주소 검색",
|
||||
"selectAuthType": "인증 유형 선택",
|
||||
"speedLimit": "속도 제한",
|
||||
"subscription": "구독",
|
||||
"subscriptionDetails": "구독 세부 정보",
|
||||
"subscriptionList": "구독 목록",
|
||||
"subscriptionLogs": "구독 로그",
|
||||
"subscriptionName": "구독 이름",
|
||||
"subscriptionNotifications": "구독 알림",
|
||||
"success": "성공",
|
||||
"telegramNotifications": "텔레그램 알림",
|
||||
"telephone": "전화번호",
|
||||
"telephonePlaceholder": "전화번호 입력",
|
||||
"totalTraffic": "총 트래픽",
|
||||
"tradeNotifications": "거래 알림",
|
||||
"trafficLimit": "트래픽 제한",
|
||||
"trafficLogs": "트래픽 로그",
|
||||
"unlimited": "무제한",
|
||||
"unverified": "확인되지 않음",
|
||||
"update": "업데이트",
|
||||
"updateSuccess": "업데이트 성공",
|
||||
"upload": "업로드",
|
||||
"uploadTraffic": "업로드 트래픽",
|
||||
"userAgent": "사용자 에이전트",
|
||||
"userEmail": "사용자 이메일",
|
||||
"userEmailPlaceholder": "사용자 이메일 입력",
|
||||
|
||||
@ -45,6 +45,7 @@
|
||||
"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.",
|
||||
"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.",
|
||||
"80001": "Oppgaven ble ikke vellykket lagt til i køen, vennligst prøv igjen senere.",
|
||||
"90001": "Vennligst deaktiver DEBUG-modus og prøv igjen.",
|
||||
|
||||
@ -1,31 +1,49 @@
|
||||
{
|
||||
"accountEnable": "Aktiver konto",
|
||||
"actions": "handlinger",
|
||||
"add": "Legg til",
|
||||
"administrator": "Administrator",
|
||||
"areaCode": "Retningsnummer",
|
||||
"areaCodePlaceholder": "Retningsnummer",
|
||||
"auth": "Autentisering",
|
||||
"authIdentifier": "Autentiseringsidentifikator",
|
||||
"authIdentifierPlaceholder": "Skriv inn autentiseringsidentifikator",
|
||||
"authMethodsTitle": "Autentiseringsinnstillinger",
|
||||
"authType": "Autentiseringstype",
|
||||
"authUser": "Autentisert Bruker",
|
||||
"avatar": "Avatar",
|
||||
"balance": "Balanse",
|
||||
"balanceNotifications": "Varsler om saldoendringer",
|
||||
"balancePlaceholder": "Balanse",
|
||||
"basicInfoTitle": "Grunnleggende Informasjon",
|
||||
"cancel": "Avbryt",
|
||||
"commission": "Kommisjon",
|
||||
"commissionPlaceholder": "Skriv inn provisjon",
|
||||
"confirm": "bekreft",
|
||||
"confirmDelete": "Er du sikker på at du vil slette?",
|
||||
"confirmOffline": "Bekreft frakoblet",
|
||||
"create": "opprett",
|
||||
"createSubscription": "Opprett abonnement",
|
||||
"createSuccess": "Opprettelse vellykket",
|
||||
"createUser": "Opprett bruker",
|
||||
"createdAt": "Registreringstidspunkt",
|
||||
"delete": "slett",
|
||||
"deleteDescription": "Data kan ikke gjenopprettes etter sletting, vær forsiktig.",
|
||||
"deleteSubscriptionDescription": "Er du sikker på at du vil slette dette abonnementet?",
|
||||
"deleteSuccess": "Sletting vellykket",
|
||||
"detail": "Detalj",
|
||||
"deviceLimit": "Enhetsgrense",
|
||||
"download": "Last ned",
|
||||
"downloadTraffic": "Last ned trafikk",
|
||||
"edit": "rediger",
|
||||
"editSubscription": "Rediger abonnement",
|
||||
"editUser": "Rediger bruker",
|
||||
"email": "e-post",
|
||||
"emailNotifications": "E-postvarsler",
|
||||
"enable": "Aktiver",
|
||||
"expireTime": "Utløpstid",
|
||||
"expiredAt": "Utløpt Dato",
|
||||
"failed": "Mislyktes",
|
||||
"giftAmount": "Gavebeløp",
|
||||
"giftAmountPlaceholder": "Skriv inn gavebeløp",
|
||||
"invalidEmailFormat": "Ugyldig e-postformat",
|
||||
@ -33,18 +51,47 @@
|
||||
"inviteCodePlaceholder": "Skriv inn invitasjonskode (la stå tom for å generere)",
|
||||
"loading": "Laster inn...",
|
||||
"loginIp": "Innloggings-IP",
|
||||
"loginNotifications": "Påloggingsvarsler",
|
||||
"loginStatus": "Innloggingsstatus",
|
||||
"loginTime": "Innloggingstid",
|
||||
"manager": "Leder",
|
||||
"notifySettingsTitle": "Varslingsinnstillinger",
|
||||
"onlineDevices": "Tilkoblede enheter",
|
||||
"password": "Passord",
|
||||
"passwordPlaceholder": "Skriv inn nytt passord (valgfritt)",
|
||||
"permanent": "Permanent",
|
||||
"pleaseEnterEmail": "Vennligst skriv inn e-post",
|
||||
"referer": "Henviser",
|
||||
"refererId": "Henvisnings-ID",
|
||||
"refererIdPlaceholder": "Skriv inn referanse-ID",
|
||||
"referralCode": "Henvisningskode",
|
||||
"referrerUserId": "Henviser (Bruker-ID)",
|
||||
"remove": "Fjern",
|
||||
"resetTime": "Tilbakestill tid",
|
||||
"save": "Lagre",
|
||||
"searchIp": "Søk IP-adresse",
|
||||
"selectAuthType": "Velg autentiseringstype",
|
||||
"speedLimit": "Fartsgrense",
|
||||
"subscription": "Abonnement",
|
||||
"subscriptionDetails": "Abonnementsdetaljer",
|
||||
"subscriptionList": "Abonnementsliste",
|
||||
"subscriptionLogs": "Abonnementslogger",
|
||||
"subscriptionName": "Abonnementsnavn",
|
||||
"subscriptionNotifications": "Abonnementsvarsler",
|
||||
"success": "Suksess",
|
||||
"telegramNotifications": "Telegramvarsler",
|
||||
"telephone": "Telefonnummer",
|
||||
"telephonePlaceholder": "Skriv inn telefonnummer",
|
||||
"totalTraffic": "Total trafikk",
|
||||
"tradeNotifications": "Handelsvarsler",
|
||||
"trafficLimit": "Trafikkgrense",
|
||||
"trafficLogs": "Trafikklogger",
|
||||
"unlimited": "Ubegrenset",
|
||||
"unverified": "Ubekreftet",
|
||||
"update": "Oppdater",
|
||||
"updateSuccess": "Oppdatering vellykket",
|
||||
"upload": "Last opp",
|
||||
"uploadTraffic": "Last opp trafikk",
|
||||
"userAgent": "Brukeragent",
|
||||
"userEmail": "Brukerens e-post",
|
||||
"userEmailPlaceholder": "Skriv inn brukers e-post",
|
||||
|
||||
@ -45,6 +45,7 @@
|
||||
"60002": "Nie można tymczasowo użyć tej subskrypcji, spróbuj ponownie później.",
|
||||
"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.",
|
||||
"60005": "Tryb pojedynczej subskrypcji przekroczył limit użytkowników",
|
||||
"70001": "Kod weryfikacyjny jest nieprawidłowy, wprowadź ponownie.",
|
||||
"80001": "Zadanie nie zostało pomyślnie dodane do kolejki, spróbuj ponownie później.",
|
||||
"90001": "Wyłącz tryb DEBUG i spróbuj ponownie.",
|
||||
|
||||
@ -1,31 +1,49 @@
|
||||
{
|
||||
"accountEnable": "Aktywacja konta",
|
||||
"actions": "działania",
|
||||
"add": "Dodaj",
|
||||
"administrator": "Administrator",
|
||||
"areaCode": "Kod obszaru",
|
||||
"areaCodePlaceholder": "Kod obszaru",
|
||||
"auth": "Autoryzacja",
|
||||
"authIdentifier": "Identyfikator uwierzytelniania",
|
||||
"authIdentifierPlaceholder": "Wprowadź identyfikator uwierzytelniający",
|
||||
"authMethodsTitle": "Ustawienia uwierzytelniania",
|
||||
"authType": "Typ uwierzytelniania",
|
||||
"authUser": "Użytkownik uwierzytelniony",
|
||||
"avatar": "Awatar",
|
||||
"balance": "saldo",
|
||||
"balanceNotifications": "Powiadomienia o zmianie salda",
|
||||
"balancePlaceholder": "Saldo",
|
||||
"basicInfoTitle": "Podstawowe informacje",
|
||||
"cancel": "Anuluj",
|
||||
"commission": "Prowizja",
|
||||
"commissionPlaceholder": "Wprowadź prowizję",
|
||||
"confirm": "Potwierdź",
|
||||
"confirmDelete": "Czy na pewno chcesz usunąć?",
|
||||
"confirmOffline": "Potwierdź tryb offline",
|
||||
"create": "Utwórz",
|
||||
"createSubscription": "Utwórz subskrypcję",
|
||||
"createSuccess": "Utworzono pomyślnie",
|
||||
"createUser": "Utwórz użytkownika",
|
||||
"createdAt": "Czas rejestracji",
|
||||
"delete": "usuń",
|
||||
"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",
|
||||
"detail": "Szczegóły",
|
||||
"deviceLimit": "Limit urządzeń",
|
||||
"download": "Pobierz",
|
||||
"downloadTraffic": "Pobierz Ruch",
|
||||
"edit": "edytuj",
|
||||
"editSubscription": "Edytuj subskrypcję",
|
||||
"editUser": "Edytuj użytkownika",
|
||||
"email": "e-mail",
|
||||
"emailNotifications": "Powiadomienia e-mailowe",
|
||||
"enable": "Włącz",
|
||||
"expireTime": "Czas wygaśnięcia",
|
||||
"expiredAt": "Data wygaśnięcia",
|
||||
"failed": "Niepowodzenie",
|
||||
"giftAmount": "Kwota Prezentu",
|
||||
"giftAmountPlaceholder": "Wprowadź kwotę prezentu",
|
||||
"invalidEmailFormat": "Nieprawidłowy format adresu e-mail",
|
||||
@ -33,18 +51,47 @@
|
||||
"inviteCodePlaceholder": "Wprowadź kod zaproszenia (pozostaw puste, aby wygenerować)",
|
||||
"loading": "Ładowanie...",
|
||||
"loginIp": "IP logowania",
|
||||
"loginNotifications": "Powiadomienia o logowaniu",
|
||||
"loginStatus": "Status logowania",
|
||||
"loginTime": "Czas logowania",
|
||||
"manager": "Menedżer",
|
||||
"notifySettingsTitle": "Ustawienia powiadomień",
|
||||
"onlineDevices": "Urządzenia online",
|
||||
"password": "Hasło",
|
||||
"passwordPlaceholder": "Wprowadź nowe hasło (opcjonalnie)",
|
||||
"permanent": "Stały",
|
||||
"pleaseEnterEmail": "Proszę wprowadzić adres e-mail",
|
||||
"referer": "Polecający",
|
||||
"refererId": "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",
|
||||
"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",
|
||||
"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",
|
||||
"upload": "Prześlij",
|
||||
"uploadTraffic": "Przesyłanie Ruchu",
|
||||
"userAgent": "Agent użytkownika",
|
||||
"userEmail": "Email użytkownika",
|
||||
"userEmailPlaceholder": "Wprowadź adres e-mail użytkownika",
|
||||
|
||||
@ -45,6 +45,7 @@
|
||||
"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.",
|
||||
"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.",
|
||||
"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.",
|
||||
|
||||
@ -1,31 +1,49 @@
|
||||
{
|
||||
"accountEnable": "Habilitar Conta",
|
||||
"actions": "ações",
|
||||
"add": "Adicionar",
|
||||
"administrator": "Administrador",
|
||||
"areaCode": "Código de Área",
|
||||
"areaCodePlaceholder": "Código de área",
|
||||
"auth": "Autenticação",
|
||||
"authIdentifier": "Identificador de Autenticação",
|
||||
"authIdentifierPlaceholder": "Digite o identificador de autenticação",
|
||||
"authMethodsTitle": "Configurações de Autenticação",
|
||||
"authType": "Tipo de Autenticação",
|
||||
"authUser": "Usuário Autenticado",
|
||||
"avatar": "Avatar",
|
||||
"balance": "Saldo",
|
||||
"balanceNotifications": "Notificações de Alteração de Saldo",
|
||||
"balancePlaceholder": "Saldo",
|
||||
"basicInfoTitle": "Informações Básicas",
|
||||
"cancel": "Cancelar",
|
||||
"commission": "Comissão",
|
||||
"commissionPlaceholder": "Insira a comissão",
|
||||
"confirm": "confirmar",
|
||||
"confirmDelete": "Você tem certeza de que deseja excluir?",
|
||||
"confirmOffline": "Confirmar Offline",
|
||||
"create": "Criar",
|
||||
"createSubscription": "Criar Assinatura",
|
||||
"createSuccess": "Criação bem-sucedida",
|
||||
"createUser": "Criar Usuário",
|
||||
"createdAt": "Data de Registro",
|
||||
"delete": "Excluir",
|
||||
"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",
|
||||
"detail": "Detalhe",
|
||||
"deviceLimit": "Limite de Dispositivos",
|
||||
"download": "Baixar",
|
||||
"downloadTraffic": "Baixar Tráfego",
|
||||
"edit": "editar",
|
||||
"editSubscription": "Editar Assinatura",
|
||||
"editUser": "Editar Usuário",
|
||||
"email": "e-mail",
|
||||
"emailNotifications": "Notificações por Email",
|
||||
"enable": "Habilitar",
|
||||
"expireTime": "Tempo de Expiração",
|
||||
"expiredAt": "Expirado Em",
|
||||
"failed": "Falhou",
|
||||
"giftAmount": "Valor do Presente",
|
||||
"giftAmountPlaceholder": "Insira o valor do presente",
|
||||
"invalidEmailFormat": "Formato de e-mail inválido",
|
||||
@ -33,18 +51,47 @@
|
||||
"inviteCodePlaceholder": "Digite o código de convite (deixe em branco para gerar)",
|
||||
"loading": "Carregando...",
|
||||
"loginIp": "IP de Login",
|
||||
"loginNotifications": "Notificações de Login",
|
||||
"loginStatus": "Status de Login",
|
||||
"loginTime": "Hora de Login",
|
||||
"manager": "Gerente",
|
||||
"notifySettingsTitle": "Configurações de Notificação",
|
||||
"onlineDevices": "Dispositivos Online",
|
||||
"password": "Senha",
|
||||
"passwordPlaceholder": "Digite a nova senha (opcional)",
|
||||
"permanent": "Permanente",
|
||||
"pleaseEnterEmail": "Por favor, insira o e-mail",
|
||||
"referer": "Referente",
|
||||
"refererId": "ID do Referente",
|
||||
"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",
|
||||
"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",
|
||||
"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",
|
||||
"upload": "Enviar",
|
||||
"uploadTraffic": "Carregar Tráfego",
|
||||
"userAgent": "Agente do Usuário",
|
||||
"userEmail": "E-mail do Usuário",
|
||||
"userEmailPlaceholder": "Digite o e-mail do usuário",
|
||||
|
||||
@ -45,6 +45,7 @@
|
||||
"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.",
|
||||
"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.",
|
||||
"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.",
|
||||
|
||||
@ -1,31 +1,49 @@
|
||||
{
|
||||
"accountEnable": "Activare Cont",
|
||||
"actions": "acțiuni",
|
||||
"add": "Adaugă",
|
||||
"administrator": "Administrator",
|
||||
"areaCode": "Prefix telefonic",
|
||||
"areaCodePlaceholder": "Prefix telefonic",
|
||||
"auth": "Autentificare",
|
||||
"authIdentifier": "Identificator de autentificare",
|
||||
"authIdentifierPlaceholder": "Introduceți identificatorul de autentificare",
|
||||
"authMethodsTitle": "Setări de Autentificare",
|
||||
"authType": "Tip de autentificare",
|
||||
"authUser": "Utilizator Autentificat",
|
||||
"avatar": "Avatar",
|
||||
"balance": "Sold",
|
||||
"balanceNotifications": "Notificări de Schimbare a Soldului",
|
||||
"balancePlaceholder": "Sold",
|
||||
"basicInfoTitle": "Informații de bază",
|
||||
"cancel": "Anulare",
|
||||
"commission": "Comision",
|
||||
"commissionPlaceholder": "Introduceți comisionul",
|
||||
"confirm": "Confirmare",
|
||||
"confirmDelete": "Sunteți sigur că doriți să ștergeți?",
|
||||
"confirmOffline": "Confirmare Offline",
|
||||
"create": "crea",
|
||||
"createSubscription": "Creează Abonament",
|
||||
"createSuccess": "Creat cu succes",
|
||||
"createUser": "Creează utilizator",
|
||||
"createdAt": "Data înregistrării",
|
||||
"delete": "șterge",
|
||||
"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ă",
|
||||
"detail": "Detaliu",
|
||||
"deviceLimit": "Limită dispozitiv",
|
||||
"download": "Descarcă",
|
||||
"downloadTraffic": "Descărcare Trafic",
|
||||
"edit": "editează",
|
||||
"editSubscription": "Editează Abonamentul",
|
||||
"editUser": "Editare utilizator",
|
||||
"email": "e-mail",
|
||||
"emailNotifications": "Notificări prin email",
|
||||
"enable": "Activare",
|
||||
"expireTime": "Timp de expirare",
|
||||
"expiredAt": "Expiră la",
|
||||
"failed": "Eșuat",
|
||||
"giftAmount": "Sumă Cadou",
|
||||
"giftAmountPlaceholder": "Introduceți suma cadoului",
|
||||
"invalidEmailFormat": "Format de email invalid",
|
||||
@ -33,18 +51,47 @@
|
||||
"inviteCodePlaceholder": "Introduceți codul de invitație (lăsați necompletat pentru a genera)",
|
||||
"loading": "Se încarcă...",
|
||||
"loginIp": "IP de autentificare",
|
||||
"loginNotifications": "Notificări de autentificare",
|
||||
"loginStatus": "Stare autentificare",
|
||||
"loginTime": "Ora de autentificare",
|
||||
"manager": "Manager",
|
||||
"notifySettingsTitle": "Setări notificări",
|
||||
"onlineDevices": "Dispozitive Online",
|
||||
"password": "Parolă",
|
||||
"passwordPlaceholder": "Introduceți o parolă nouă (opțional)",
|
||||
"permanent": "Permanent",
|
||||
"pleaseEnterEmail": "Vă rugăm să introduceți adresa de email",
|
||||
"referer": "Referent",
|
||||
"refererId": "ID Referent",
|
||||
"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",
|
||||
"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",
|
||||
"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ă",
|
||||
"upload": "Încărcare",
|
||||
"uploadTraffic": "Încărcare Trafic",
|
||||
"userAgent": "Agent Utilizator",
|
||||
"userEmail": "Email utilizator",
|
||||
"userEmailPlaceholder": "Introduceți emailul utilizatorului",
|
||||
|
||||
@ -45,6 +45,7 @@
|
||||
"60002": "Подписка временно недоступна, пожалуйста, попробуйте позже.",
|
||||
"60003": "Обнаружена существующая подписка. Пожалуйста, отмените ее перед продолжением.",
|
||||
"60004": "Невозможно удалить в данный момент, так как у подписки есть активные пользователи.",
|
||||
"60005": "Режим одиночной подписки превысил лимит пользователей.",
|
||||
"70001": "Код подтверждения неверен, пожалуйста, введите его снова.",
|
||||
"80001": "Задача не была успешно добавлена в очередь, пожалуйста, попробуйте позже.",
|
||||
"90001": "Пожалуйста, отключите режим DEBUG и попробуйте снова.",
|
||||
|
||||
@ -1,31 +1,49 @@
|
||||
{
|
||||
"accountEnable": "Включение аккаунта",
|
||||
"actions": "действия",
|
||||
"add": "Добавить",
|
||||
"administrator": "Администратор",
|
||||
"areaCode": "Код региона",
|
||||
"areaCodePlaceholder": "Код региона",
|
||||
"auth": "Авторизация",
|
||||
"authIdentifier": "Идентификатор аутентификации",
|
||||
"authIdentifierPlaceholder": "Введите идентификатор аутентификации",
|
||||
"authMethodsTitle": "Настройки аутентификации",
|
||||
"authType": "Тип аутентификации",
|
||||
"authUser": "Авторизованный пользователь",
|
||||
"avatar": "Аватар",
|
||||
"balance": "Баланс",
|
||||
"balanceNotifications": "Уведомления об изменении баланса",
|
||||
"balancePlaceholder": "Баланс",
|
||||
"basicInfoTitle": "Основная информация",
|
||||
"cancel": "Отмена",
|
||||
"commission": "Комиссия",
|
||||
"commissionPlaceholder": "Введите комиссию",
|
||||
"confirm": "Подтвердить",
|
||||
"confirmDelete": "Вы уверены, что хотите удалить?",
|
||||
"confirmOffline": "Подтвердить офлайн",
|
||||
"create": "Создать",
|
||||
"createSubscription": "Создать подписку",
|
||||
"createSuccess": "Создание успешно",
|
||||
"createUser": "Создать пользователя",
|
||||
"createdAt": "Время регистрации",
|
||||
"delete": "Удалить",
|
||||
"deleteDescription": "После удаления данные не могут быть восстановлены, пожалуйста, действуйте осторожно.",
|
||||
"deleteSubscriptionDescription": "Вы уверены, что хотите удалить эту подписку?",
|
||||
"deleteSuccess": "Удаление успешно",
|
||||
"detail": "Детали",
|
||||
"deviceLimit": "Лимит устройств",
|
||||
"download": "Скачать",
|
||||
"downloadTraffic": "Скачать трафик",
|
||||
"edit": "редактировать",
|
||||
"editSubscription": "Редактировать подписку",
|
||||
"editUser": "Редактировать пользователя",
|
||||
"email": "Электронная почта",
|
||||
"emailNotifications": "Уведомления по электронной почте",
|
||||
"enable": "Включить",
|
||||
"expireTime": "Время истечения",
|
||||
"expiredAt": "Срок действия истек",
|
||||
"failed": "Не удалось",
|
||||
"giftAmount": "Сумма подарка",
|
||||
"giftAmountPlaceholder": "Введите сумму подарка",
|
||||
"invalidEmailFormat": "Неверный формат электронной почты",
|
||||
@ -33,18 +51,47 @@
|
||||
"inviteCodePlaceholder": "Введите код приглашения (оставьте пустым для генерации)",
|
||||
"loading": "Загрузка...",
|
||||
"loginIp": "IP-адрес входа",
|
||||
"loginNotifications": "Уведомления о входе",
|
||||
"loginStatus": "Статус входа",
|
||||
"loginTime": "Время входа",
|
||||
"manager": "Менеджер",
|
||||
"notifySettingsTitle": "Настройки уведомлений",
|
||||
"onlineDevices": "Подключенные устройства",
|
||||
"password": "Пароль",
|
||||
"passwordPlaceholder": "Введите новый пароль (необязательно)",
|
||||
"permanent": "Постоянный",
|
||||
"pleaseEnterEmail": "Пожалуйста, введите адрес электронной почты",
|
||||
"referer": "Реферер",
|
||||
"refererId": "ID реферера",
|
||||
"refererIdPlaceholder": "Введите ID реферера",
|
||||
"referralCode": "Реферальный код",
|
||||
"referrerUserId": "Реферер (ID пользователя)",
|
||||
"remove": "Удалить",
|
||||
"resetTime": "Сброс времени",
|
||||
"save": "Сохранить",
|
||||
"searchIp": "Поиск IP-адреса",
|
||||
"selectAuthType": "Выберите тип аутентификации",
|
||||
"speedLimit": "Ограничение скорости",
|
||||
"subscription": "Подписка",
|
||||
"subscriptionDetails": "Детали подписки",
|
||||
"subscriptionList": "Список подписок",
|
||||
"subscriptionLogs": "Журналы подписки",
|
||||
"subscriptionName": "Название подписки",
|
||||
"subscriptionNotifications": "Уведомления о подписке",
|
||||
"success": "Успех",
|
||||
"telegramNotifications": "Уведомления Telegram",
|
||||
"telephone": "Номер телефона",
|
||||
"telephonePlaceholder": "Введите номер телефона",
|
||||
"totalTraffic": "Общий трафик",
|
||||
"tradeNotifications": "Уведомления о торговле",
|
||||
"trafficLimit": "Лимит трафика",
|
||||
"trafficLogs": "Журналы трафика",
|
||||
"unlimited": "Неограниченный",
|
||||
"unverified": "Неподтверждено",
|
||||
"update": "Обновить",
|
||||
"updateSuccess": "Обновление успешно",
|
||||
"upload": "Загрузить",
|
||||
"uploadTraffic": "Загрузка трафика",
|
||||
"userAgent": "Пользовательский агент",
|
||||
"userEmail": "Электронная почта пользователя",
|
||||
"userEmailPlaceholder": "Введите электронную почту пользователя",
|
||||
|
||||
@ -45,6 +45,7 @@
|
||||
"60002": "ไม่สามารถใช้การสมัครสมาชิกนี้ได้ในขณะนี้ กรุณาลองใหม่อีกครั้งในภายหลัง",
|
||||
"60003": "ตรวจพบการสมัครสมาชิกที่มีอยู่ กรุณายกเลิกก่อนดำเนินการต่อ",
|
||||
"60004": "ไม่สามารถลบได้ในขณะนี้เนื่องจากการสมัครมีผู้ใช้ที่ใช้งานอยู่",
|
||||
"60005": "โหมดการสมัครสมาชิกรายเดียวได้เกินขีดจำกัดของผู้ใช้",
|
||||
"70001": "รหัสยืนยันไม่ถูกต้อง กรุณาป้อนใหม่อีกครั้ง",
|
||||
"80001": "งานไม่สำเร็จในการเข้าคิว กรุณาลองใหม่อีกครั้งในภายหลัง",
|
||||
"90001": "กรุณาปิดโหมด DEBUG ก่อนลองใหม่อีกครั้ง",
|
||||
|
||||
@ -1,31 +1,49 @@
|
||||
{
|
||||
"accountEnable": "เปิดใช้งานบัญชี",
|
||||
"actions": "การดำเนินการ",
|
||||
"add": "เพิ่ม",
|
||||
"administrator": "ผู้ดูแลระบบ",
|
||||
"areaCode": "รหัสพื้นที่",
|
||||
"areaCodePlaceholder": "รหัสพื้นที่",
|
||||
"auth": "การยืนยันตัวตน",
|
||||
"authIdentifier": "ตัวระบุการยืนยันตัวตน",
|
||||
"authIdentifierPlaceholder": "กรอกตัวระบุการยืนยันตัวตน",
|
||||
"authMethodsTitle": "การตั้งค่าการยืนยันตัวตน",
|
||||
"authType": "ประเภทการยืนยันตัวตน",
|
||||
"authUser": "ผู้ใช้ที่ได้รับอนุญาต",
|
||||
"avatar": "อวตาร",
|
||||
"balance": "ยอดคงเหลือ",
|
||||
"balanceNotifications": "การแจ้งเตือนการเปลี่ยนแปลงยอดเงิน",
|
||||
"balancePlaceholder": "ยอดคงเหลือ",
|
||||
"basicInfoTitle": "ข้อมูลพื้นฐาน",
|
||||
"cancel": "ยกเลิก",
|
||||
"commission": "คอมมิชชั่น",
|
||||
"commissionPlaceholder": "กรอกค่าคอมมิชชั่น",
|
||||
"confirm": "ยืนยัน",
|
||||
"confirmDelete": "คุณแน่ใจหรือว่าต้องการลบ?",
|
||||
"confirmOffline": "ยืนยันออฟไลน์",
|
||||
"create": "สร้าง",
|
||||
"createSubscription": "สร้างการสมัครสมาชิก",
|
||||
"createSuccess": "สร้างสำเร็จ",
|
||||
"createUser": "สร้างผู้ใช้",
|
||||
"createdAt": "เวลาที่ลงทะเบียน",
|
||||
"delete": "ลบ",
|
||||
"deleteDescription": "หลังจากลบแล้วจะไม่สามารถกู้คืนข้อมูลได้ โปรดดำเนินการด้วยความระมัดระวัง",
|
||||
"deleteSubscriptionDescription": "คุณแน่ใจหรือไม่ว่าต้องการลบการสมัครสมาชิกนี้?",
|
||||
"deleteSuccess": "ลบสำเร็จ",
|
||||
"detail": "รายละเอียด",
|
||||
"deviceLimit": "จำกัดอุปกรณ์",
|
||||
"download": "ดาวน์โหลด",
|
||||
"downloadTraffic": "ดาวน์โหลดการจราจร",
|
||||
"edit": "แก้ไข",
|
||||
"editSubscription": "แก้ไขการสมัครสมาชิก",
|
||||
"editUser": "แก้ไขผู้ใช้",
|
||||
"email": "อีเมล",
|
||||
"emailNotifications": "การแจ้งเตือนทางอีเมล",
|
||||
"enable": "เปิดใช้งาน",
|
||||
"expireTime": "เวลาหมดอายุ",
|
||||
"expiredAt": "วันหมดอายุ",
|
||||
"failed": "ล้มเหลว",
|
||||
"giftAmount": "จำนวนเงินของขวัญ",
|
||||
"giftAmountPlaceholder": "กรอกจำนวนเงินของขวัญ",
|
||||
"invalidEmailFormat": "รูปแบบอีเมลไม่ถูกต้อง",
|
||||
@ -33,18 +51,47 @@
|
||||
"inviteCodePlaceholder": "กรอกรหัสเชิญ (เว้นว่างไว้เพื่อสร้างใหม่)",
|
||||
"loading": "กำลังโหลด...",
|
||||
"loginIp": "ไอพีที่เข้าสู่ระบบ",
|
||||
"loginNotifications": "การแจ้งเตือนการเข้าสู่ระบบ",
|
||||
"loginStatus": "สถานะการเข้าสู่ระบบ",
|
||||
"loginTime": "เวลาเข้าสู่ระบบ",
|
||||
"manager": "ผู้จัดการ",
|
||||
"notifySettingsTitle": "การตั้งค่าการแจ้งเตือน",
|
||||
"onlineDevices": "อุปกรณ์ที่ออนไลน์",
|
||||
"password": "รหัสผ่าน",
|
||||
"passwordPlaceholder": "กรุณาใส่รหัสผ่านใหม่ (ไม่บังคับ)",
|
||||
"permanent": "ถาวร",
|
||||
"pleaseEnterEmail": "กรุณาใส่อีเมล",
|
||||
"referer": "ผู้แนะนำ",
|
||||
"refererId": "รหัสผู้แนะนำ",
|
||||
"refererIdPlaceholder": "กรอก ID ผู้แนะนำ",
|
||||
"referralCode": "รหัสแนะนำ",
|
||||
"referrerUserId": "ผู้อ้างอิง (รหัสผู้ใช้)",
|
||||
"remove": "ลบ",
|
||||
"resetTime": "รีเซ็ตเวลา",
|
||||
"save": "บันทึก",
|
||||
"searchIp": "ค้นหาที่อยู่ IP",
|
||||
"selectAuthType": "เลือกประเภทการยืนยันตัวตน",
|
||||
"speedLimit": "จำกัดความเร็ว",
|
||||
"subscription": "การสมัครสมาชิก",
|
||||
"subscriptionDetails": "รายละเอียดการสมัครสมาชิก",
|
||||
"subscriptionList": "รายการสมัครสมาชิก",
|
||||
"subscriptionLogs": "บันทึกการสมัครสมาชิก",
|
||||
"subscriptionName": "ชื่อการสมัครสมาชิก",
|
||||
"subscriptionNotifications": "การแจ้งเตือนการสมัครสมาชิก",
|
||||
"success": "สำเร็จ",
|
||||
"telegramNotifications": "การแจ้งเตือนทาง Telegram",
|
||||
"telephone": "หมายเลขโทรศัพท์",
|
||||
"telephonePlaceholder": "กรอกหมายเลขโทรศัพท์",
|
||||
"totalTraffic": "การจราจรทั้งหมด",
|
||||
"tradeNotifications": "การแจ้งเตือนการซื้อขาย",
|
||||
"trafficLimit": "ขีดจำกัดการจราจร",
|
||||
"trafficLogs": "บันทึกการจราจร",
|
||||
"unlimited": "ไม่จำกัด",
|
||||
"unverified": "ยังไม่ได้รับการยืนยัน",
|
||||
"update": "อัปเดต",
|
||||
"updateSuccess": "อัปเดตสำเร็จ",
|
||||
"upload": "อัปโหลด",
|
||||
"uploadTraffic": "อัปโหลดทราฟฟิก",
|
||||
"userAgent": "ตัวแทนผู้ใช้",
|
||||
"userEmail": "อีเมลผู้ใช้",
|
||||
"userEmailPlaceholder": "กรอกอีเมลผู้ใช้",
|
||||
|
||||
@ -45,6 +45,7 @@
|
||||
"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.",
|
||||
"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.",
|
||||
"80001": "Görev kuyruğa başarıyla eklenemedi, lütfen daha sonra tekrar deneyin.",
|
||||
"90001": "Lütfen DEBUG modunu kapatıp tekrar deneyin.",
|
||||
|
||||
@ -1,31 +1,49 @@
|
||||
{
|
||||
"accountEnable": "Hesap Etkinleştir",
|
||||
"actions": "eylemler",
|
||||
"add": "Ekle",
|
||||
"administrator": "Yönetici",
|
||||
"areaCode": "Alan Kodu",
|
||||
"areaCodePlaceholder": "Alan kodu",
|
||||
"auth": "Kimlik Doğrulama",
|
||||
"authIdentifier": "Kimlik Doğrulama Tanımlayıcısı",
|
||||
"authIdentifierPlaceholder": "Kimlik doğrulama tanımlayıcısını girin",
|
||||
"authMethodsTitle": "Kimlik Doğrulama Ayarları",
|
||||
"authType": "Kimlik Doğrulama Türü",
|
||||
"authUser": "Yetkili Kullanıcı",
|
||||
"avatar": "Avatar",
|
||||
"balance": "Bakiye",
|
||||
"balanceNotifications": "Bakiye Değişiklik Bildirimleri",
|
||||
"balancePlaceholder": "Bakiye",
|
||||
"basicInfoTitle": "Temel Bilgiler",
|
||||
"cancel": "İptal",
|
||||
"commission": "Komisyon",
|
||||
"commissionPlaceholder": "Komisyonu girin",
|
||||
"confirm": "Onayla",
|
||||
"confirmDelete": "Silmek istediğinizden emin misiniz?",
|
||||
"confirmOffline": "Çevrimdışı Onayla",
|
||||
"create": "oluştur",
|
||||
"createSubscription": "Abonelik Oluştur",
|
||||
"createSuccess": "Başarıyla oluşturuldu",
|
||||
"createUser": "Kullanıcı Oluştur",
|
||||
"createdAt": "Kayıt Tarihi",
|
||||
"delete": "sil",
|
||||
"deleteDescription": "Silindikten sonra veriler kurtarılamaz, lütfen dikkatli olun.",
|
||||
"deleteSubscriptionDescription": "Bu aboneliği silmek istediğinizden emin misiniz?",
|
||||
"deleteSuccess": "Başarıyla silindi",
|
||||
"detail": "Detay",
|
||||
"deviceLimit": "Cihaz Sınırı",
|
||||
"download": "İndir",
|
||||
"downloadTraffic": "Trafiği İndir",
|
||||
"edit": "düzenle",
|
||||
"editSubscription": "Aboneliği Düzenle",
|
||||
"editUser": "Kullanıcıyı Düzenle",
|
||||
"email": "e-posta",
|
||||
"emailNotifications": "E-posta Bildirimleri",
|
||||
"enable": "etkinleştir",
|
||||
"expireTime": "Sona Erme Zamanı",
|
||||
"expiredAt": "Son Kullanma Tarihi",
|
||||
"failed": "Başarısız",
|
||||
"giftAmount": "Hediye Miktarı",
|
||||
"giftAmountPlaceholder": "Hediye tutarını girin",
|
||||
"invalidEmailFormat": "Geçersiz e-posta formatı",
|
||||
@ -33,18 +51,47 @@
|
||||
"inviteCodePlaceholder": "Davet kodunu girin (oluşturmak için boş bırakın)",
|
||||
"loading": "Yükleniyor...",
|
||||
"loginIp": "Giriş IP'si",
|
||||
"loginNotifications": "Giriş Bildirimleri",
|
||||
"loginStatus": "Giriş Durumu",
|
||||
"loginTime": "Giriş Zamanı",
|
||||
"manager": "Yönetici",
|
||||
"notifySettingsTitle": "Bildirim Ayarları",
|
||||
"onlineDevices": "Çevrimiçi Cihazlar",
|
||||
"password": "Şifre",
|
||||
"passwordPlaceholder": "Yeni şifreyi girin (isteğe bağlı)",
|
||||
"permanent": "Kalıcı",
|
||||
"pleaseEnterEmail": "Lütfen e-posta adresinizi girin",
|
||||
"referer": "Referans",
|
||||
"refererId": "Referans Kimliği",
|
||||
"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",
|
||||
"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ı",
|
||||
"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ı",
|
||||
"upload": "Yükle",
|
||||
"uploadTraffic": "Yükleme Trafiği",
|
||||
"userAgent": "Kullanıcı Aracısı",
|
||||
"userEmail": "Kullanıcı E-postası",
|
||||
"userEmailPlaceholder": "Kullanıcı e-postasını girin",
|
||||
|
||||
@ -45,6 +45,7 @@
|
||||
"60002": "Тимчасово неможливо використовувати цю підписку, спробуйте пізніше.",
|
||||
"60003": "Виявлено існуючу підписку. Будь ласка, скасуйте її перед продовженням.",
|
||||
"60004": "Неможливо видалити, оскільки підписка має активних користувачів.",
|
||||
"60005": "Режим одиночної підписки перевищив ліміт користувачів",
|
||||
"70001": "Код перевірки неправильний, введіть його знову.",
|
||||
"80001": "Завдання не вдалося додати до черги, спробуйте пізніше.",
|
||||
"90001": "Вимкніть режим DEBUG і спробуйте знову.",
|
||||
|
||||
@ -1,31 +1,49 @@
|
||||
{
|
||||
"accountEnable": "Увімкнення облікового запису",
|
||||
"actions": "дії",
|
||||
"add": "Додати",
|
||||
"administrator": "Адміністратор",
|
||||
"areaCode": "Код регіону",
|
||||
"areaCodePlaceholder": "Код області",
|
||||
"auth": "Авторизація",
|
||||
"authIdentifier": "Ідентифікатор автентифікації",
|
||||
"authIdentifierPlaceholder": "Введіть ідентифікатор авторизації",
|
||||
"authMethodsTitle": "Налаштування автентифікації",
|
||||
"authType": "Тип автентифікації",
|
||||
"authUser": "Авторизований користувач",
|
||||
"avatar": "Аватар",
|
||||
"balance": "Баланс",
|
||||
"balanceNotifications": "Сповіщення про зміну балансу",
|
||||
"balancePlaceholder": "Баланс",
|
||||
"basicInfoTitle": "Основна інформація",
|
||||
"cancel": "Скасувати",
|
||||
"commission": "Комісія",
|
||||
"commissionPlaceholder": "Введіть комісію",
|
||||
"confirm": "Підтвердити",
|
||||
"confirmDelete": "Ви впевнені, що хочете видалити?",
|
||||
"confirmOffline": "Підтвердити офлайн",
|
||||
"create": "створити",
|
||||
"createSubscription": "Створити підписку",
|
||||
"createSuccess": "Створено успішно",
|
||||
"createUser": "Створити користувача",
|
||||
"createdAt": "Час реєстрації",
|
||||
"delete": "Видалити",
|
||||
"deleteDescription": "Після видалення дані не можна буде відновити, будь ласка, дійте обережно.",
|
||||
"deleteSubscriptionDescription": "Ви впевнені, що хочете видалити цю підписку?",
|
||||
"deleteSuccess": "Видалення успішне",
|
||||
"detail": "Деталі",
|
||||
"deviceLimit": "Ліміт пристроїв",
|
||||
"download": "Завантажити",
|
||||
"downloadTraffic": "Завантажити трафік",
|
||||
"edit": "редагувати",
|
||||
"editSubscription": "Редагувати підписку",
|
||||
"editUser": "Редагувати користувача",
|
||||
"email": "електронна пошта",
|
||||
"emailNotifications": "Сповіщення електронною поштою",
|
||||
"enable": "Увімкнути",
|
||||
"expireTime": "Час закінчення",
|
||||
"expiredAt": "Термін дії закінчився",
|
||||
"failed": "Не вдалося",
|
||||
"giftAmount": "Сума подарунка",
|
||||
"giftAmountPlaceholder": "Введіть суму подарунка",
|
||||
"invalidEmailFormat": "Неправильний формат електронної пошти",
|
||||
@ -33,18 +51,47 @@
|
||||
"inviteCodePlaceholder": "Введіть код запрошення (залиште порожнім для генерації)",
|
||||
"loading": "Завантаження...",
|
||||
"loginIp": "IP-адреса входу",
|
||||
"loginNotifications": "Сповіщення про вхід",
|
||||
"loginStatus": "Статус входу",
|
||||
"loginTime": "Час входу",
|
||||
"manager": "Менеджер",
|
||||
"notifySettingsTitle": "Налаштування сповіщень",
|
||||
"onlineDevices": "Пристрої в мережі",
|
||||
"password": "Пароль",
|
||||
"passwordPlaceholder": "Введіть новий пароль (необов'язково)",
|
||||
"permanent": "Постійний",
|
||||
"pleaseEnterEmail": "Будь ласка, введіть електронну пошту",
|
||||
"referer": "Реферер",
|
||||
"refererId": "Ідентифікатор реферера",
|
||||
"refererIdPlaceholder": "Введіть ID реферера",
|
||||
"referralCode": "Реферальний код",
|
||||
"referrerUserId": "Реферер (ID користувача)",
|
||||
"remove": "Видалити",
|
||||
"resetTime": "Скинути час",
|
||||
"save": "Зберегти",
|
||||
"searchIp": "Пошук IP-адреси",
|
||||
"selectAuthType": "Виберіть тип автентифікації",
|
||||
"speedLimit": "Обмеження швидкості",
|
||||
"subscription": "Підписка",
|
||||
"subscriptionDetails": "Деталі підписки",
|
||||
"subscriptionList": "Список підписок",
|
||||
"subscriptionLogs": "Журнали підписки",
|
||||
"subscriptionName": "Назва підписки",
|
||||
"subscriptionNotifications": "Сповіщення про підписку",
|
||||
"success": "Успіх",
|
||||
"telegramNotifications": "Сповіщення Telegram",
|
||||
"telephone": "Номер телефону",
|
||||
"telephonePlaceholder": "Введіть номер телефону",
|
||||
"totalTraffic": "Загальний трафік",
|
||||
"tradeNotifications": "Сповіщення про торгівлю",
|
||||
"trafficLimit": "Ліміт трафіку",
|
||||
"trafficLogs": "Журнали трафіку",
|
||||
"unlimited": "Необмежено",
|
||||
"unverified": "Непідтверджено",
|
||||
"update": "Оновити",
|
||||
"updateSuccess": "Оновлення успішне",
|
||||
"upload": "Завантажити",
|
||||
"uploadTraffic": "Завантажити трафік",
|
||||
"userAgent": "Агент користувача",
|
||||
"userEmail": "Електронна пошта користувача",
|
||||
"userEmailPlaceholder": "Введіть електронну адресу користувача",
|
||||
|
||||
@ -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.",
|
||||
"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.",
|
||||
"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.",
|
||||
"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.",
|
||||
|
||||
@ -1,31 +1,49 @@
|
||||
{
|
||||
"accountEnable": "Kích hoạt tài khoản",
|
||||
"actions": "Hành động",
|
||||
"add": "Thêm",
|
||||
"administrator": "Quản trị viên",
|
||||
"areaCode": "Mã Vùng",
|
||||
"areaCodePlaceholder": "Mã vùng",
|
||||
"auth": "Xác thực",
|
||||
"authIdentifier": "Định danh 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",
|
||||
"authUser": "Người Dùng Xác Thực",
|
||||
"avatar": "Hình đại diện",
|
||||
"balance": "Số dư",
|
||||
"balanceNotifications": "Thông Báo Thay Đổi Số Dư",
|
||||
"balancePlaceholder": "Số dư",
|
||||
"basicInfoTitle": "Thông Tin Cơ Bản",
|
||||
"cancel": "Hủy",
|
||||
"commission": "Hoa hồng",
|
||||
"commissionPlaceholder": "Nhập hoa hồng",
|
||||
"confirm": "Xác nhận",
|
||||
"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",
|
||||
"createSubscription": "Tạo Đăng Ký",
|
||||
"createSuccess": "Tạo thành công",
|
||||
"createUser": "Tạo người dùng",
|
||||
"createdAt": "Thời gian đăng ký",
|
||||
"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.",
|
||||
"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",
|
||||
"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",
|
||||
"editSubscription": "Chỉnh sửa Đăng ký",
|
||||
"editUser": "Chỉnh sửa người dùng",
|
||||
"email": "Email",
|
||||
"emailNotifications": "Thông báo qua Email",
|
||||
"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",
|
||||
"giftAmountPlaceholder": "Nhập số tiền quà tặng",
|
||||
"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)",
|
||||
"loading": "Đang tải...",
|
||||
"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",
|
||||
"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",
|
||||
"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",
|
||||
"refererId": "ID 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",
|
||||
"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",
|
||||
"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",
|
||||
"upload": "Tải lên",
|
||||
"uploadTraffic": "Tải lên Lưu lượng",
|
||||
"userAgent": "Tác nhân người dùng",
|
||||
"userEmail": "Email Người Dùng",
|
||||
"userEmailPlaceholder": "Nhập email người dùng",
|
||||
|
||||
@ -45,6 +45,7 @@
|
||||
"60002": "暂时无法使用该订阅,请稍后再试。",
|
||||
"60003": "检测到已有订阅。请取消后再继续。",
|
||||
"60004": "暂时无法删除,订阅存在正常激活的用户。",
|
||||
"60005": "单一订阅模式已超过用户限制.",
|
||||
"70001": "验证码有误,请重新输入。",
|
||||
"80001": "任务未成功加入队列,请稍后重试。",
|
||||
"90001": "请关闭 DEBUG 模式后再试。",
|
||||
|
||||
@ -1,31 +1,49 @@
|
||||
{
|
||||
"accountEnable": "账户启用",
|
||||
"actions": "操作",
|
||||
"add": "添加",
|
||||
"administrator": "管理员",
|
||||
"areaCode": "区号",
|
||||
"areaCodePlaceholder": "区号",
|
||||
"auth": "认证",
|
||||
"authIdentifier": "认证标识符",
|
||||
"authIdentifierPlaceholder": "输入认证标识符",
|
||||
"authMethodsTitle": "身份验证设置",
|
||||
"authType": "认证类型",
|
||||
"authUser": "授权用户",
|
||||
"avatar": "头像",
|
||||
"balance": "余额",
|
||||
"balanceNotifications": "余额变动通知",
|
||||
"balancePlaceholder": "余额",
|
||||
"basicInfoTitle": "基本信息",
|
||||
"cancel": "取消",
|
||||
"commission": "佣金",
|
||||
"commissionPlaceholder": "输入佣金",
|
||||
"confirm": "确认",
|
||||
"confirmDelete": "您确定要删除吗?",
|
||||
"confirmOffline": "确认离线",
|
||||
"create": "创建",
|
||||
"createSubscription": "创建订阅",
|
||||
"createSuccess": "创建成功",
|
||||
"createUser": "创建用户",
|
||||
"createdAt": "注册时间",
|
||||
"delete": "删除",
|
||||
"deleteDescription": "删除后无法恢复数据,请谨慎操作。",
|
||||
"deleteSubscriptionDescription": "您确定要删除此订阅吗?",
|
||||
"deleteSuccess": "删除成功",
|
||||
"detail": "详情",
|
||||
"deviceLimit": "设备限制",
|
||||
"download": "下载",
|
||||
"downloadTraffic": "下载流量",
|
||||
"edit": "编辑",
|
||||
"editSubscription": "编辑订阅",
|
||||
"editUser": "编辑用户",
|
||||
"email": "邮箱",
|
||||
"emailNotifications": "电子邮件通知",
|
||||
"enable": "启用",
|
||||
"expireTime": "过期时间",
|
||||
"expiredAt": "过期时间",
|
||||
"failed": "失败",
|
||||
"giftAmount": "礼物金额",
|
||||
"giftAmountPlaceholder": "输入礼品金额",
|
||||
"invalidEmailFormat": "电子邮件格式无效",
|
||||
@ -33,18 +51,47 @@
|
||||
"inviteCodePlaceholder": "输入邀请码(留空以生成)",
|
||||
"loading": "加载中...",
|
||||
"loginIp": "登录IP",
|
||||
"loginNotifications": "登录通知",
|
||||
"loginStatus": "登录状态",
|
||||
"loginTime": "登录时间",
|
||||
"manager": "经理",
|
||||
"notifySettingsTitle": "通知设置",
|
||||
"onlineDevices": "在线设备",
|
||||
"password": "密码",
|
||||
"passwordPlaceholder": "输入新密码(可选)",
|
||||
"permanent": "永久",
|
||||
"pleaseEnterEmail": "请输入电子邮件",
|
||||
"referer": "推荐人",
|
||||
"refererId": "推荐人ID",
|
||||
"refererIdPlaceholder": "输入推荐人ID",
|
||||
"referralCode": "推荐码",
|
||||
"referrerUserId": "推荐人(用户ID)",
|
||||
"remove": "移除",
|
||||
"resetTime": "重置时间",
|
||||
"save": "保存",
|
||||
"searchIp": "搜索IP地址",
|
||||
"selectAuthType": "选择认证类型",
|
||||
"speedLimit": "限速",
|
||||
"subscription": "订阅",
|
||||
"subscriptionDetails": "订阅详情",
|
||||
"subscriptionList": "订阅列表",
|
||||
"subscriptionLogs": "订阅日志",
|
||||
"subscriptionName": "订阅名称",
|
||||
"subscriptionNotifications": "订阅通知",
|
||||
"success": "成功",
|
||||
"telegramNotifications": "Telegram 通知",
|
||||
"telephone": "电话号码",
|
||||
"telephonePlaceholder": "输入电话号码",
|
||||
"totalTraffic": "总流量",
|
||||
"tradeNotifications": "交易通知",
|
||||
"trafficLimit": "流量限制",
|
||||
"trafficLogs": "流量日志",
|
||||
"unlimited": "无限",
|
||||
"unverified": "未验证",
|
||||
"update": "更新",
|
||||
"updateSuccess": "更新成功",
|
||||
"upload": "上传",
|
||||
"uploadTraffic": "上传流量",
|
||||
"userAgent": "用户代理",
|
||||
"userEmail": "用户邮箱",
|
||||
"userEmailPlaceholder": "输入用户邮箱",
|
||||
|
||||
@ -45,6 +45,7 @@
|
||||
"60002": "暫時無法使用該訂閱,請稍後再試。",
|
||||
"60003": "偵測到現有訂閱。請取消後再繼續。",
|
||||
"60004": "暫時無法刪除,訂閱存在正常啟用的用戶。",
|
||||
"60005": "單一訂閱模式已超過用戶限制.",
|
||||
"70001": "驗證碼有誤,請重新輸入。",
|
||||
"80001": "任務未成功加入隊列,請稍後重試。",
|
||||
"90001": "請關閉 DEBUG 模式後再試。",
|
||||
|
||||
@ -1,31 +1,49 @@
|
||||
{
|
||||
"accountEnable": "帳戶啟用",
|
||||
"actions": "操作",
|
||||
"add": "新增",
|
||||
"administrator": "管理員",
|
||||
"areaCode": "地區代碼",
|
||||
"areaCodePlaceholder": "區號",
|
||||
"auth": "認證",
|
||||
"authIdentifier": "認證識別碼",
|
||||
"authIdentifierPlaceholder": "輸入認證識別碼",
|
||||
"authMethodsTitle": "身份驗證設定",
|
||||
"authType": "認證類型",
|
||||
"authUser": "授權用戶",
|
||||
"avatar": "頭像",
|
||||
"balance": "餘額",
|
||||
"balanceNotifications": "結餘變動通知",
|
||||
"balancePlaceholder": "結餘",
|
||||
"basicInfoTitle": "基本資料",
|
||||
"cancel": "取消",
|
||||
"commission": "佣金",
|
||||
"commissionPlaceholder": "輸入佣金",
|
||||
"confirm": "確認",
|
||||
"confirmDelete": "您確定要刪除嗎?",
|
||||
"confirmOffline": "確認離線",
|
||||
"create": "建立",
|
||||
"createSubscription": "建立訂閱",
|
||||
"createSuccess": "建立成功",
|
||||
"createUser": "建立使用者",
|
||||
"createdAt": "註冊時間",
|
||||
"delete": "刪除",
|
||||
"deleteDescription": "刪除後無法恢復資料,請謹慎操作。",
|
||||
"deleteSubscriptionDescription": "您確定要刪除此訂閱嗎?",
|
||||
"deleteSuccess": "刪除成功",
|
||||
"detail": "詳情",
|
||||
"deviceLimit": "裝置限制",
|
||||
"download": "下載",
|
||||
"downloadTraffic": "下載流量",
|
||||
"edit": "編輯",
|
||||
"editSubscription": "編輯訂閱",
|
||||
"editUser": "編輯使用者",
|
||||
"email": "電子郵件",
|
||||
"emailNotifications": "電郵通知",
|
||||
"enable": "啟用",
|
||||
"expireTime": "到期時間",
|
||||
"expiredAt": "到期時間",
|
||||
"failed": "失敗",
|
||||
"giftAmount": "禮物金額",
|
||||
"giftAmountPlaceholder": "輸入禮物金額",
|
||||
"invalidEmailFormat": "電郵格式無效",
|
||||
@ -33,18 +51,47 @@
|
||||
"inviteCodePlaceholder": "輸入邀請碼(留空以生成)",
|
||||
"loading": "載入中...",
|
||||
"loginIp": "登入 IP",
|
||||
"loginNotifications": "登入通知",
|
||||
"loginStatus": "登入狀態",
|
||||
"loginTime": "登入時間",
|
||||
"manager": "經理",
|
||||
"notifySettingsTitle": "通知設定",
|
||||
"onlineDevices": "在線裝置",
|
||||
"password": "密碼",
|
||||
"passwordPlaceholder": "輸入新密碼(可選)",
|
||||
"permanent": "永久",
|
||||
"pleaseEnterEmail": "請輸入電郵地址",
|
||||
"referer": "推薦人",
|
||||
"refererId": "推薦人 ID",
|
||||
"refererIdPlaceholder": "輸入推薦人 ID",
|
||||
"referralCode": "推薦碼",
|
||||
"referrerUserId": "推薦人(用戶 ID)",
|
||||
"remove": "移除",
|
||||
"resetTime": "重設時間",
|
||||
"save": "儲存",
|
||||
"searchIp": "搜尋IP地址",
|
||||
"selectAuthType": "選擇認證類型",
|
||||
"speedLimit": "速度限制",
|
||||
"subscription": "訂閱",
|
||||
"subscriptionDetails": "訂閱詳情",
|
||||
"subscriptionList": "訂閱列表",
|
||||
"subscriptionLogs": "訂閱日誌",
|
||||
"subscriptionName": "訂閱名稱",
|
||||
"subscriptionNotifications": "訂閱通知",
|
||||
"success": "成功",
|
||||
"telegramNotifications": "Telegram 通知",
|
||||
"telephone": "電話號碼",
|
||||
"telephonePlaceholder": "輸入電話號碼",
|
||||
"totalTraffic": "總流量",
|
||||
"tradeNotifications": "交易通知",
|
||||
"trafficLimit": "流量限制",
|
||||
"trafficLogs": "流量日誌",
|
||||
"unlimited": "無限",
|
||||
"unverified": "未經驗證",
|
||||
"update": "更新",
|
||||
"updateSuccess": "更新成功",
|
||||
"upload": "上載",
|
||||
"uploadTraffic": "上載流量",
|
||||
"userAgent": "用戶代理",
|
||||
"userEmail": "用戶電郵",
|
||||
"userEmailPlaceholder": "輸入用戶電郵",
|
||||
|
||||
@ -67,7 +67,7 @@
|
||||
"zh-CN",
|
||||
"zh-HK"
|
||||
],
|
||||
"modelName": "gpt-4o",
|
||||
"modelName": "gpt-4o-mini",
|
||||
"experimental": {
|
||||
"jsonMode": true
|
||||
},
|
||||
|
||||
93
apps/admin/services/admin/authMethod.ts
Normal file
93
apps/admin/services/admin/authMethod.ts
Normal 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 || {}),
|
||||
});
|
||||
}
|
||||
@ -3,6 +3,7 @@
|
||||
// API 更新时间:
|
||||
// API 唯一标识:
|
||||
import * as announcement from './announcement';
|
||||
import * as authMethod from './authMethod';
|
||||
import * as console from './console';
|
||||
import * as coupon from './coupon';
|
||||
import * as document from './document';
|
||||
@ -17,6 +18,7 @@ import * as tool from './tool';
|
||||
import * as user from './user';
|
||||
export default {
|
||||
announcement,
|
||||
authMethod,
|
||||
console,
|
||||
coupon,
|
||||
document,
|
||||
|
||||
@ -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 */
|
||||
export async function nodeSort(body: API.NodeSortRequest, options?: { [key: string]: any }) {
|
||||
return request<API.Response & { data?: any }>('/v1/admin/server/sort', {
|
||||
|
||||
@ -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 */
|
||||
export async function getNodeMultiplier(options?: { [key: string]: any }) {
|
||||
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 */
|
||||
export async function getRegisterConfig(options?: { [key: string]: any }) {
|
||||
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 */
|
||||
export async function getSubscribeConfig(options?: { [key: string]: any }) {
|
||||
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 */
|
||||
export async function getTosConfig(options?: { [key: string]: any }) {
|
||||
return request<API.Response & { data?: API.TosConfig }>('/v1/admin/system/tos_config', {
|
||||
|
||||
359
apps/admin/services/admin/typings.d.ts
vendored
359
apps/admin/services/admin/typings.d.ts
vendored
@ -66,15 +66,16 @@ declare namespace API {
|
||||
};
|
||||
|
||||
type AuthConfig = {
|
||||
sms: SmsAuthenticateConfig;
|
||||
sms: MobileAuthenticateConfig;
|
||||
email: EmailAuthticateConfig;
|
||||
register: RegisterConfig;
|
||||
};
|
||||
|
||||
type AuthMethod = {
|
||||
auth_type: string;
|
||||
auth_identifier: string;
|
||||
verified: boolean;
|
||||
type AuthMethodConfig = {
|
||||
id: number;
|
||||
method: string;
|
||||
config: Record<string, any>;
|
||||
enabled: boolean;
|
||||
};
|
||||
|
||||
type BatchDeleteCouponRequest = {
|
||||
@ -204,6 +205,13 @@ declare namespace API {
|
||||
subscribe_id?: number;
|
||||
};
|
||||
|
||||
type CreateRuleGroupRequest = {
|
||||
name: string;
|
||||
icon: string;
|
||||
description: string;
|
||||
enable: boolean;
|
||||
};
|
||||
|
||||
type CreateSubscribeGroupRequest = {
|
||||
name: string;
|
||||
description: string;
|
||||
@ -260,6 +268,13 @@ declare namespace API {
|
||||
is_admin: boolean;
|
||||
};
|
||||
|
||||
type CreateUserSubscribeRequest = {
|
||||
user_id: number;
|
||||
expired_at: number;
|
||||
traffic: number;
|
||||
subscribe_id: number;
|
||||
};
|
||||
|
||||
type CurrencyConfig = {
|
||||
currency_unit: string;
|
||||
currency_symbol: string;
|
||||
@ -293,6 +308,10 @@ declare namespace API {
|
||||
id: number;
|
||||
};
|
||||
|
||||
type DeleteRuleGroupRequest = {
|
||||
id: number;
|
||||
};
|
||||
|
||||
type DeleteSubscribeGroupRequest = {
|
||||
id: number;
|
||||
};
|
||||
@ -301,6 +320,11 @@ declare namespace API {
|
||||
id: number;
|
||||
};
|
||||
|
||||
type DeleteUserAuthMethodRequest = {
|
||||
user_id: number;
|
||||
auth_type: string;
|
||||
};
|
||||
|
||||
type DeleteUserDeivceRequest = {
|
||||
id: number;
|
||||
};
|
||||
@ -320,26 +344,10 @@ declare namespace API {
|
||||
};
|
||||
|
||||
type EmailAuthticateConfig = {
|
||||
email_enabled: boolean;
|
||||
email_enable_verify: boolean;
|
||||
email_enable_domain_suffix: boolean;
|
||||
email_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;
|
||||
enable: boolean;
|
||||
enable_verify: boolean;
|
||||
enable_domain_suffix: boolean;
|
||||
domain_suffix_list: string;
|
||||
};
|
||||
|
||||
type EpayConfig = {
|
||||
@ -392,6 +400,18 @@ declare namespace API {
|
||||
id: number;
|
||||
};
|
||||
|
||||
type GetAuthMethodConfigParams = {
|
||||
method: string;
|
||||
};
|
||||
|
||||
type GetAuthMethodConfigRequest = {
|
||||
method: string;
|
||||
};
|
||||
|
||||
type GetAuthMethodListResponse = {
|
||||
list: AuthMethodConfig[];
|
||||
};
|
||||
|
||||
type GetCouponListParams = {
|
||||
page: number;
|
||||
size: number;
|
||||
@ -476,18 +496,6 @@ declare namespace API {
|
||||
list: Server[];
|
||||
};
|
||||
|
||||
type GetOAuthByPlatformParams = {
|
||||
platform: string;
|
||||
};
|
||||
|
||||
type GetOAuthByPlatformRequest = {
|
||||
platform: string;
|
||||
};
|
||||
|
||||
type GetOAuthConfigResponse = {
|
||||
list: OAuthMethod[];
|
||||
};
|
||||
|
||||
type GetOrderListParams = {
|
||||
page: number;
|
||||
size: number;
|
||||
@ -511,6 +519,11 @@ declare namespace API {
|
||||
list: Order[];
|
||||
};
|
||||
|
||||
type GetRuleGroupResponse = {
|
||||
total: number;
|
||||
list: ServerRuleGroup[];
|
||||
};
|
||||
|
||||
type GetSmsListParams = {
|
||||
page: number;
|
||||
size: number;
|
||||
@ -525,7 +538,7 @@ declare namespace API {
|
||||
|
||||
type GetSmsListResponse = {
|
||||
total: number;
|
||||
list: Sms[];
|
||||
list: SMS[];
|
||||
};
|
||||
|
||||
type GetSubscribeDetailsParams = {
|
||||
@ -594,7 +607,7 @@ declare namespace API {
|
||||
};
|
||||
|
||||
type GetUserAuthMethodResponse = {
|
||||
auth_methods: AuthMethod[];
|
||||
auth_methods: UserAuthMethod[];
|
||||
};
|
||||
|
||||
type GetUserDetailParams = {
|
||||
@ -618,6 +631,97 @@ declare namespace API {
|
||||
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 = {
|
||||
port: number;
|
||||
hop_ports: string;
|
||||
@ -632,10 +736,21 @@ declare namespace API {
|
||||
only_first_purchase: boolean;
|
||||
};
|
||||
|
||||
type KickOfflineRequest = {
|
||||
id: number;
|
||||
};
|
||||
|
||||
type LogResponse = {
|
||||
list: Record<string, any>;
|
||||
};
|
||||
|
||||
type MobileAuthenticateConfig = {
|
||||
enable: boolean;
|
||||
limit: number;
|
||||
interval: number;
|
||||
expire_time: number;
|
||||
};
|
||||
|
||||
type NodeConfig = {
|
||||
node_secret: string;
|
||||
node_pull_interval: number;
|
||||
@ -658,16 +773,6 @@ declare namespace API {
|
||||
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 = {
|
||||
uid: number;
|
||||
ip: string;
|
||||
@ -739,6 +844,16 @@ declare namespace API {
|
||||
enable: boolean;
|
||||
};
|
||||
|
||||
type PlatformInfo = {
|
||||
platform: string;
|
||||
platform_url: string;
|
||||
platform_field_description: Record<string, any>;
|
||||
};
|
||||
|
||||
type PlatformResponse = {
|
||||
list: PlatformInfo[];
|
||||
};
|
||||
|
||||
type RegisterConfig = {
|
||||
stop_register: boolean;
|
||||
enable_trial: boolean;
|
||||
@ -773,12 +888,6 @@ declare namespace API {
|
||||
reality_short_id: string;
|
||||
};
|
||||
|
||||
type SendSmsRequest = {
|
||||
content: string;
|
||||
area_code: string;
|
||||
telephone: string;
|
||||
};
|
||||
|
||||
type Server = {
|
||||
id: number;
|
||||
tags: string[];
|
||||
@ -808,6 +917,16 @@ declare namespace API {
|
||||
updated_at: number;
|
||||
};
|
||||
|
||||
type ServerRuleGroup = {
|
||||
id: number;
|
||||
name: string;
|
||||
icon: string;
|
||||
description: string;
|
||||
enable: boolean;
|
||||
created_at: number;
|
||||
updated_at: number;
|
||||
};
|
||||
|
||||
type ServerStatus = {
|
||||
cpu: number;
|
||||
mem: number;
|
||||
@ -854,7 +973,7 @@ declare namespace API {
|
||||
site_logo: string;
|
||||
};
|
||||
|
||||
type Sms = {
|
||||
type SMS = {
|
||||
id: string;
|
||||
content: string;
|
||||
platform: string;
|
||||
@ -864,36 +983,6 @@ declare namespace API {
|
||||
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 = {
|
||||
id: number;
|
||||
sort: number;
|
||||
@ -996,10 +1085,15 @@ declare namespace API {
|
||||
telegram_web_hook_domain: string;
|
||||
};
|
||||
|
||||
type TestEmailSmtpRequest = {
|
||||
type TestEmailSendRequest = {
|
||||
email: string;
|
||||
};
|
||||
|
||||
type TestSmsSendRequest = {
|
||||
area_code: string;
|
||||
telephone: string;
|
||||
};
|
||||
|
||||
type Ticket = {
|
||||
id: number;
|
||||
title: string;
|
||||
@ -1025,6 +1119,16 @@ declare namespace API {
|
||||
tos_content: string;
|
||||
};
|
||||
|
||||
type TrafficLog = {
|
||||
id: number;
|
||||
server_id: number;
|
||||
user_id: number;
|
||||
subscribe_id: number;
|
||||
download: number;
|
||||
upload: number;
|
||||
timestamp: number;
|
||||
};
|
||||
|
||||
type TransportConfig = {
|
||||
path: string;
|
||||
host: string;
|
||||
@ -1044,6 +1148,13 @@ declare namespace API {
|
||||
security_config: SecurityConfig;
|
||||
};
|
||||
|
||||
type UpdataAuthMethodConfigRequest = {
|
||||
id: number;
|
||||
method: string;
|
||||
config: Record<string, any>;
|
||||
enabled: boolean;
|
||||
};
|
||||
|
||||
type UpdateAlipayF2fRequest = {
|
||||
id: number;
|
||||
name: string;
|
||||
@ -1150,14 +1261,6 @@ declare namespace API {
|
||||
sort: number;
|
||||
};
|
||||
|
||||
type UpdateOAuthConfig = {
|
||||
id: number;
|
||||
platform: string;
|
||||
config: Record<string, any>;
|
||||
redirect: string;
|
||||
enabled: boolean;
|
||||
};
|
||||
|
||||
type UpdateOrderStatusRequest = {
|
||||
id: number;
|
||||
status: number;
|
||||
@ -1165,6 +1268,14 @@ declare namespace API {
|
||||
trade_no?: string;
|
||||
};
|
||||
|
||||
type UpdateRuleGroupRequest = {
|
||||
id: number;
|
||||
name: string;
|
||||
icon: string;
|
||||
description: string;
|
||||
enable: boolean;
|
||||
};
|
||||
|
||||
type UpdateStripeRequest = {
|
||||
id: number;
|
||||
name: string;
|
||||
@ -1214,8 +1325,14 @@ declare namespace API {
|
||||
status: number;
|
||||
};
|
||||
|
||||
type UpdateUserRequest = {
|
||||
id: number;
|
||||
type UpdateUserAuthMethodRequest = {
|
||||
user_id: number;
|
||||
auth_type: string;
|
||||
auth_identifier: string;
|
||||
};
|
||||
|
||||
type UpdateUserBasiceInfoRequest = {
|
||||
user_id: number;
|
||||
password: string;
|
||||
avatar: string;
|
||||
balance: number;
|
||||
@ -1226,6 +1343,10 @@ declare namespace API {
|
||||
referer_id: number;
|
||||
enable: boolean;
|
||||
is_admin: boolean;
|
||||
};
|
||||
|
||||
type UpdateUserNotifySettingRequest = {
|
||||
user_id: number;
|
||||
enable_email_notify: boolean;
|
||||
enable_telegram_notify: boolean;
|
||||
enable_balance_notify: boolean;
|
||||
@ -1234,6 +1355,16 @@ declare namespace API {
|
||||
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 = {
|
||||
id: number;
|
||||
avatar: string;
|
||||
@ -1252,7 +1383,8 @@ declare namespace API {
|
||||
enable_login_notify: boolean;
|
||||
enable_subscribe_notify: boolean;
|
||||
enable_trade_notify: boolean;
|
||||
auth_methods: AuthMethod[];
|
||||
auth_methods: UserAuthMethod[];
|
||||
user_devices: UserDevice[];
|
||||
created_at: number;
|
||||
updated_at: number;
|
||||
deleted_at?: number;
|
||||
@ -1266,6 +1398,12 @@ declare namespace API {
|
||||
enable: boolean;
|
||||
};
|
||||
|
||||
type UserAuthMethod = {
|
||||
auth_type: string;
|
||||
auth_identifier: string;
|
||||
verified: boolean;
|
||||
};
|
||||
|
||||
type UserBalanceLog = {
|
||||
id: number;
|
||||
user_id: number;
|
||||
@ -1278,15 +1416,24 @@ declare namespace API {
|
||||
|
||||
type UserDevice = {
|
||||
id: number;
|
||||
user_id: number;
|
||||
device_number: string;
|
||||
ip: string;
|
||||
imei: string;
|
||||
user_agent: string;
|
||||
online: boolean;
|
||||
last_online: number;
|
||||
enabled: boolean;
|
||||
created_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 = {
|
||||
date?: string;
|
||||
register: number;
|
||||
@ -1319,6 +1466,16 @@ declare namespace API {
|
||||
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 = {
|
||||
user_id: number;
|
||||
email: string;
|
||||
|
||||
@ -2,18 +2,6 @@
|
||||
/* eslint-disable */
|
||||
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/ */
|
||||
export async function createUser(body: API.CreateUserRequest, options?: { [key: string]: any }) {
|
||||
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 */
|
||||
export async function createUserAuthMethod(
|
||||
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 */
|
||||
export async function batchDeleteUser(
|
||||
body: API.BatchDeleteUserRequest,
|
||||
@ -106,7 +139,7 @@ export async function getUserDetail(
|
||||
}
|
||||
|
||||
/** 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', {
|
||||
method: 'PUT',
|
||||
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 */
|
||||
export async function getUserList(
|
||||
// 叠加生成的Param类型 (非body参数swagger默认没有生成对象)
|
||||
@ -146,3 +194,138 @@ export async function getUserList(
|
||||
...(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 || {}),
|
||||
},
|
||||
);
|
||||
}
|
||||
|
||||
126
apps/admin/services/common/typings.d.ts
vendored
126
apps/admin/services/common/typings.d.ts
vendored
@ -64,15 +64,16 @@ declare namespace API {
|
||||
};
|
||||
|
||||
type AuthConfig = {
|
||||
sms: SmsAuthenticateConfig;
|
||||
sms: MobileAuthenticateConfig;
|
||||
email: EmailAuthticateConfig;
|
||||
register: RegisterConfig;
|
||||
};
|
||||
|
||||
type AuthMethod = {
|
||||
auth_type: string;
|
||||
auth_identifier: string;
|
||||
verified: boolean;
|
||||
type AuthMethodConfig = {
|
||||
id: number;
|
||||
method: string;
|
||||
config: Record<string, any>;
|
||||
enabled: boolean;
|
||||
};
|
||||
|
||||
type CheckUserParams = {
|
||||
@ -124,26 +125,10 @@ declare namespace API {
|
||||
};
|
||||
|
||||
type EmailAuthticateConfig = {
|
||||
email_enabled: boolean;
|
||||
email_enable_verify: boolean;
|
||||
email_enable_domain_suffix: boolean;
|
||||
email_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;
|
||||
enable: boolean;
|
||||
enable_verify: boolean;
|
||||
enable_domain_suffix: boolean;
|
||||
domain_suffix_list: string;
|
||||
};
|
||||
|
||||
type Follow = {
|
||||
@ -213,6 +198,13 @@ declare namespace API {
|
||||
token: string;
|
||||
};
|
||||
|
||||
type MobileAuthenticateConfig = {
|
||||
enable: boolean;
|
||||
limit: number;
|
||||
interval: number;
|
||||
expire_time: number;
|
||||
};
|
||||
|
||||
type NodeConfig = {
|
||||
node_secret: string;
|
||||
node_pull_interval: number;
|
||||
@ -247,16 +239,6 @@ declare namespace API {
|
||||
redirect: string;
|
||||
};
|
||||
|
||||
type OAuthMethod = {
|
||||
id: number;
|
||||
platform: string;
|
||||
config: Record<string, any>;
|
||||
redirect: string;
|
||||
enabled: boolean;
|
||||
created_at: number;
|
||||
updated_at: number;
|
||||
};
|
||||
|
||||
type OnlineUser = {
|
||||
uid: number;
|
||||
ip: string;
|
||||
@ -399,6 +381,16 @@ declare namespace API {
|
||||
updated_at: number;
|
||||
};
|
||||
|
||||
type ServerRuleGroup = {
|
||||
id: number;
|
||||
name: string;
|
||||
icon: string;
|
||||
description: string;
|
||||
enable: boolean;
|
||||
created_at: number;
|
||||
updated_at: number;
|
||||
};
|
||||
|
||||
type ServerStatus = {
|
||||
cpu: number;
|
||||
mem: number;
|
||||
@ -419,26 +411,6 @@ declare namespace API {
|
||||
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 = {
|
||||
id: number;
|
||||
sort: number;
|
||||
@ -556,6 +528,16 @@ declare namespace API {
|
||||
tos_content: string;
|
||||
};
|
||||
|
||||
type TrafficLog = {
|
||||
id: number;
|
||||
server_id: number;
|
||||
user_id: number;
|
||||
subscribe_id: number;
|
||||
download: number;
|
||||
upload: number;
|
||||
timestamp: number;
|
||||
};
|
||||
|
||||
type TransportConfig = {
|
||||
path: string;
|
||||
host: string;
|
||||
@ -593,7 +575,8 @@ declare namespace API {
|
||||
enable_login_notify: boolean;
|
||||
enable_subscribe_notify: boolean;
|
||||
enable_trade_notify: boolean;
|
||||
auth_methods: AuthMethod[];
|
||||
auth_methods: UserAuthMethod[];
|
||||
user_devices: UserDevice[];
|
||||
created_at: number;
|
||||
updated_at: number;
|
||||
deleted_at?: number;
|
||||
@ -607,6 +590,12 @@ declare namespace API {
|
||||
enable: boolean;
|
||||
};
|
||||
|
||||
type UserAuthMethod = {
|
||||
auth_type: string;
|
||||
auth_identifier: string;
|
||||
verified: boolean;
|
||||
};
|
||||
|
||||
type UserBalanceLog = {
|
||||
id: number;
|
||||
user_id: number;
|
||||
@ -619,15 +608,24 @@ declare namespace API {
|
||||
|
||||
type UserDevice = {
|
||||
id: number;
|
||||
user_id: number;
|
||||
device_number: string;
|
||||
ip: string;
|
||||
imei: string;
|
||||
user_agent: string;
|
||||
online: boolean;
|
||||
last_online: number;
|
||||
enabled: boolean;
|
||||
created_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 = {
|
||||
email: string;
|
||||
password: string;
|
||||
@ -660,6 +658,16 @@ declare namespace API {
|
||||
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 = {
|
||||
turnstile_site_key: string;
|
||||
enable_login_verify: boolean;
|
||||
|
||||
@ -47,6 +47,7 @@
|
||||
"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.",
|
||||
"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.",
|
||||
"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."
|
||||
|
||||
@ -47,6 +47,7 @@
|
||||
"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.",
|
||||
"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.",
|
||||
"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."
|
||||
|
||||
@ -47,6 +47,7 @@
|
||||
"60002": "Unable to use the subscription at the moment, please try again later.",
|
||||
"60003": "An existing subscription is detected. Please cancel it before proceeding.",
|
||||
"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.",
|
||||
"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."
|
||||
|
||||
@ -47,6 +47,7 @@
|
||||
"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.",
|
||||
"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.",
|
||||
"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."
|
||||
|
||||
@ -47,6 +47,7 @@
|
||||
"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.",
|
||||
"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.",
|
||||
"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."
|
||||
|
||||
@ -47,6 +47,7 @@
|
||||
"60002": "در حال حاضر نمیتوان از اشتراک استفاده کرد، لطفاً بعداً دوباره تلاش کنید.",
|
||||
"60003": "یک اشتراک موجود شناسایی شد. لطفاً قبل از ادامه آن را لغو کنید.",
|
||||
"60004": "در حال حاضر امکان حذف وجود ندارد زیرا اشتراک دارای کاربران فعال است.",
|
||||
"60005": "حالت اشتراک تک کاربر از حد مجاز کاربران فراتر رفته است.",
|
||||
"70001": "کد تأیید نادرست است، لطفاً دوباره وارد کنید.",
|
||||
"80001": "وظیفه نتوانست بهطور موفقیتآمیز به صف اضافه شود، لطفاً بعداً دوباره تلاش کنید.",
|
||||
"undefined": "خطایی در سیستم رخ داده است، لطفاً بعداً دوباره تلاش کنید."
|
||||
|
||||
@ -47,6 +47,7 @@
|
||||
"60002": "Tilausta ei voi käyttää tällä hetkellä, yritä myöhemmin uudelleen.",
|
||||
"60003": "Olemassa oleva tilaus havaittu. Peruuta se ennen jatkamista.",
|
||||
"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.",
|
||||
"80001": "Tehtävää ei lisätty jonoon, yritä myöhemmin uudelleen.",
|
||||
"undefined": "Järjestelmässä tapahtui virhe, yritä myöhemmin uudelleen."
|
||||
|
||||
@ -47,6 +47,7 @@
|
||||
"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.",
|
||||
"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.",
|
||||
"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."
|
||||
|
||||
@ -47,6 +47,7 @@
|
||||
"60002": "अभी के लिए इस सदस्यता का उपयोग नहीं किया जा सकता, कृपया थोड़ी देर बाद पुनः प्रयास करें।",
|
||||
"60003": "एक मौजूदा सदस्यता का पता चला है। कृपया आगे बढ़ने से पहले इसे रद्द करें।",
|
||||
"60004": "वर्तमान में हटाने में असमर्थ क्योंकि सदस्यता में सक्रिय उपयोगकर्ता हैं।",
|
||||
"60005": "सिंगल सब्सक्रिप्शन मोड में उपयोगकर्ता सीमा पार हो गई है।",
|
||||
"70001": "सत्यापन कोड गलत है, कृपया पुनः दर्ज करें।",
|
||||
"80001": "कार्य सफलतापूर्वक कतार में नहीं जोड़ा गया, कृपया थोड़ी देर बाद पुनः प्रयास करें।",
|
||||
"undefined": "सिस्टम में त्रुटि हुई है, कृपया थोड़ी देर बाद पुनः प्रयास करें।"
|
||||
|
||||
@ -47,6 +47,7 @@
|
||||
"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.",
|
||||
"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.",
|
||||
"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."
|
||||
|
||||
@ -47,6 +47,7 @@
|
||||
"60002": "このサブスクリプションは一時的に使用できません。しばらくしてから再試行してください。",
|
||||
"60003": "既存のサブスクリプションが検出されました。続行する前にキャンセルしてください。",
|
||||
"60004": "サブスクリプションにアクティブなユーザーがいるため、現在削除できません。",
|
||||
"60005": "シングルサブスクリプションモードではユーザー数の上限を超えました。",
|
||||
"70001": "認証コードが間違っています。再入力してください。",
|
||||
"80001": "タスクがキューに正常に追加されませんでした。しばらくしてから再試行してください。",
|
||||
"undefined": "システムエラーが発生しました。しばらくしてから再試行してください。"
|
||||
|
||||
@ -47,6 +47,7 @@
|
||||
"60002": "현재 구독을 사용할 수 없습니다. 잠시 후 다시 시도해 주세요.",
|
||||
"60003": "기존 구독이 감지되었습니다. 계속하기 전에 취소해 주세요.",
|
||||
"60004": "구독에 활성 사용자가 있어 현재 삭제할 수 없습니다.",
|
||||
"60005": "단일 구독 모드가 사용자 한도를 초과했습니다.",
|
||||
"70001": "인증 코드가 잘못되었습니다. 다시 입력해 주세요.",
|
||||
"80001": "작업이 큐에 성공적으로 추가되지 않았습니다. 잠시 후 다시 시도해 주세요.",
|
||||
"undefined": "시스템에 오류가 발생했습니다. 잠시 후 다시 시도해 주세요."
|
||||
|
||||
@ -47,6 +47,8 @@
|
||||
"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.",
|
||||
"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.",
|
||||
"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."
|
||||
|
||||
@ -47,6 +47,7 @@
|
||||
"60002": "Nie można tymczasowo użyć tej subskrypcji, spróbuj ponownie później.",
|
||||
"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.",
|
||||
"60005": "Tryb pojedynczej subskrypcji przekroczył limit użytkowników.",
|
||||
"70001": "Kod weryfikacyjny jest nieprawidłowy, wprowadź go ponownie.",
|
||||
"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."
|
||||
|
||||
@ -47,6 +47,8 @@
|
||||
"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.",
|
||||
"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.",
|
||||
"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."
|
||||
|
||||
@ -47,6 +47,7 @@
|
||||
"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.",
|
||||
"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.",
|
||||
"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."
|
||||
|
||||
@ -47,6 +47,7 @@
|
||||
"60002": "Подписка временно недоступна, пожалуйста, попробуйте позже.",
|
||||
"60003": "Обнаружена существующая подписка. Пожалуйста, отмените ее перед продолжением.",
|
||||
"60004": "Невозможно удалить в данный момент, так как у подписки есть активные пользователи.",
|
||||
"60005": "Одиночный режим подписки превысил лимит пользователей.",
|
||||
"70001": "Код подтверждения неверен, пожалуйста, введите его снова.",
|
||||
"80001": "Задача не была успешно добавлена в очередь, пожалуйста, попробуйте позже.",
|
||||
"undefined": "Произошла ошибка в системе, пожалуйста, попробуйте позже."
|
||||
|
||||
@ -47,6 +47,7 @@
|
||||
"60002": "ไม่สามารถใช้การสมัครสมาชิกนี้ได้ในขณะนี้ กรุณาลองใหม่อีกครั้งในภายหลัง",
|
||||
"60003": "ตรวจพบการสมัครสมาชิกที่มีอยู่ กรุณายกเลิกก่อนดำเนินการต่อ",
|
||||
"60004": "ไม่สามารถลบได้ในขณะนี้เนื่องจากการสมัครมีผู้ใช้ที่ใช้งานอยู่",
|
||||
"60005": "โหมดการสมัครสมาชิกเดี่ยวเกินขีดจำกัดจำนวนผู้ใช้แล้ว.",
|
||||
"70001": "รหัสยืนยันไม่ถูกต้อง กรุณาใส่ใหม่อีกครั้ง",
|
||||
"80001": "งานไม่สำเร็จในการเข้าคิว กรุณาลองใหม่อีกครั้งในภายหลัง",
|
||||
"undefined": "ระบบเกิดข้อผิดพลาด กรุณาลองใหม่อีกครั้งในภายหลัง"
|
||||
|
||||
@ -47,6 +47,7 @@
|
||||
"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.",
|
||||
"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.",
|
||||
"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."
|
||||
|
||||
@ -47,6 +47,7 @@
|
||||
"60002": "Тимчасово неможливо використовувати цю підписку, будь ласка, спробуйте пізніше.",
|
||||
"60003": "Виявлено існуючу підписку. Будь ласка, скасуйте її перед продовженням.",
|
||||
"60004": "Неможливо видалити, оскільки підписка має активних користувачів.",
|
||||
"60005": "Режим однієї підписки перевищив ліміт користувачів.",
|
||||
"70001": "Код перевірки неправильний, будь ласка, введіть знову.",
|
||||
"80001": "Завдання не вдалося додати до черги, будь ласка, спробуйте пізніше.",
|
||||
"undefined": "Сталася системна помилка, будь ласка, спробуйте пізніше."
|
||||
|
||||
@ -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.",
|
||||
"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.",
|
||||
"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.",
|
||||
"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."
|
||||
|
||||
@ -47,6 +47,7 @@
|
||||
"60002": "暂时无法使用该订阅,请稍后再试。",
|
||||
"60003": "检测到已有订阅。请取消后再继续。",
|
||||
"60004": "暂时无法删除,订阅存在正常激活的用户。",
|
||||
"60005": "单一订阅模式已超出用户上限。",
|
||||
"70001": "验证码有误,请重新输入。",
|
||||
"80001": "任务未成功加入队列,请稍后重试。",
|
||||
"undefined": "系统发生错误,请稍后重试"
|
||||
|
||||
@ -47,6 +47,7 @@
|
||||
"60002": "暫時無法使用該訂閱,請稍後再試。",
|
||||
"60003": "偵測到現有訂閱。請取消後再繼續。",
|
||||
"60004": "暫時無法刪除,訂閱存在正常啟用的用戶。",
|
||||
"60005": "單一訂閱模式已超出用戶上限。",
|
||||
"70001": "驗證碼有誤,請重新輸入。",
|
||||
"80001": "任務未成功加入隊列,請稍後重試。",
|
||||
"undefined": "系統發生錯誤,請稍後重試"
|
||||
|
||||
@ -74,7 +74,7 @@
|
||||
"zh-CN",
|
||||
"zh-HK"
|
||||
],
|
||||
"modelName": "gpt-4o",
|
||||
"modelName": "gpt-4o-mini",
|
||||
"experimental": {
|
||||
"jsonMode": true
|
||||
},
|
||||
|
||||
@ -32,6 +32,7 @@ export async function appleLoginCallback(
|
||||
return request<API.Response & { data?: any }>('/v1/auth/oauth/callback/apple', {
|
||||
method: 'POST',
|
||||
data: formData,
|
||||
requestType: 'form',
|
||||
...(options || {}),
|
||||
});
|
||||
}
|
||||
|
||||
126
apps/user/services/common/typings.d.ts
vendored
126
apps/user/services/common/typings.d.ts
vendored
@ -64,15 +64,16 @@ declare namespace API {
|
||||
};
|
||||
|
||||
type AuthConfig = {
|
||||
sms: SmsAuthenticateConfig;
|
||||
sms: MobileAuthenticateConfig;
|
||||
email: EmailAuthticateConfig;
|
||||
register: RegisterConfig;
|
||||
};
|
||||
|
||||
type AuthMethod = {
|
||||
auth_type: string;
|
||||
auth_identifier: string;
|
||||
verified: boolean;
|
||||
type AuthMethodConfig = {
|
||||
id: number;
|
||||
method: string;
|
||||
config: Record<string, any>;
|
||||
enabled: boolean;
|
||||
};
|
||||
|
||||
type CheckUserParams = {
|
||||
@ -124,26 +125,10 @@ declare namespace API {
|
||||
};
|
||||
|
||||
type EmailAuthticateConfig = {
|
||||
email_enabled: boolean;
|
||||
email_enable_verify: boolean;
|
||||
email_enable_domain_suffix: boolean;
|
||||
email_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;
|
||||
enable: boolean;
|
||||
enable_verify: boolean;
|
||||
enable_domain_suffix: boolean;
|
||||
domain_suffix_list: string;
|
||||
};
|
||||
|
||||
type Follow = {
|
||||
@ -213,6 +198,13 @@ declare namespace API {
|
||||
token: string;
|
||||
};
|
||||
|
||||
type MobileAuthenticateConfig = {
|
||||
enable: boolean;
|
||||
limit: number;
|
||||
interval: number;
|
||||
expire_time: number;
|
||||
};
|
||||
|
||||
type NodeConfig = {
|
||||
node_secret: string;
|
||||
node_pull_interval: number;
|
||||
@ -247,16 +239,6 @@ declare namespace API {
|
||||
redirect: string;
|
||||
};
|
||||
|
||||
type OAuthMethod = {
|
||||
id: number;
|
||||
platform: string;
|
||||
config: Record<string, any>;
|
||||
redirect: string;
|
||||
enabled: boolean;
|
||||
created_at: number;
|
||||
updated_at: number;
|
||||
};
|
||||
|
||||
type OnlineUser = {
|
||||
uid: number;
|
||||
ip: string;
|
||||
@ -399,6 +381,16 @@ declare namespace API {
|
||||
updated_at: number;
|
||||
};
|
||||
|
||||
type ServerRuleGroup = {
|
||||
id: number;
|
||||
name: string;
|
||||
icon: string;
|
||||
description: string;
|
||||
enable: boolean;
|
||||
created_at: number;
|
||||
updated_at: number;
|
||||
};
|
||||
|
||||
type ServerStatus = {
|
||||
cpu: number;
|
||||
mem: number;
|
||||
@ -419,26 +411,6 @@ declare namespace API {
|
||||
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 = {
|
||||
id: number;
|
||||
sort: number;
|
||||
@ -556,6 +528,16 @@ declare namespace API {
|
||||
tos_content: string;
|
||||
};
|
||||
|
||||
type TrafficLog = {
|
||||
id: number;
|
||||
server_id: number;
|
||||
user_id: number;
|
||||
subscribe_id: number;
|
||||
download: number;
|
||||
upload: number;
|
||||
timestamp: number;
|
||||
};
|
||||
|
||||
type TransportConfig = {
|
||||
path: string;
|
||||
host: string;
|
||||
@ -593,7 +575,8 @@ declare namespace API {
|
||||
enable_login_notify: boolean;
|
||||
enable_subscribe_notify: boolean;
|
||||
enable_trade_notify: boolean;
|
||||
auth_methods: AuthMethod[];
|
||||
auth_methods: UserAuthMethod[];
|
||||
user_devices: UserDevice[];
|
||||
created_at: number;
|
||||
updated_at: number;
|
||||
deleted_at?: number;
|
||||
@ -607,6 +590,12 @@ declare namespace API {
|
||||
enable: boolean;
|
||||
};
|
||||
|
||||
type UserAuthMethod = {
|
||||
auth_type: string;
|
||||
auth_identifier: string;
|
||||
verified: boolean;
|
||||
};
|
||||
|
||||
type UserBalanceLog = {
|
||||
id: number;
|
||||
user_id: number;
|
||||
@ -619,15 +608,24 @@ declare namespace API {
|
||||
|
||||
type UserDevice = {
|
||||
id: number;
|
||||
user_id: number;
|
||||
device_number: string;
|
||||
ip: string;
|
||||
imei: string;
|
||||
user_agent: string;
|
||||
online: boolean;
|
||||
last_online: number;
|
||||
enabled: boolean;
|
||||
created_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 = {
|
||||
email: string;
|
||||
password: string;
|
||||
@ -660,6 +658,16 @@ declare namespace API {
|
||||
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 = {
|
||||
turnstile_site_key: string;
|
||||
enable_login_verify: boolean;
|
||||
|
||||
166
apps/user/services/user/typings.d.ts
vendored
166
apps/user/services/user/typings.d.ts
vendored
@ -58,15 +58,16 @@ declare namespace API {
|
||||
};
|
||||
|
||||
type AuthConfig = {
|
||||
sms: SmsAuthenticateConfig;
|
||||
sms: MobileAuthenticateConfig;
|
||||
email: EmailAuthticateConfig;
|
||||
register: RegisterConfig;
|
||||
};
|
||||
|
||||
type AuthMethod = {
|
||||
auth_type: string;
|
||||
auth_identifier: string;
|
||||
verified: boolean;
|
||||
type AuthMethodConfig = {
|
||||
id: number;
|
||||
method: string;
|
||||
config: Record<string, any>;
|
||||
enabled: boolean;
|
||||
};
|
||||
|
||||
type BindOAuthCallbackRequest = {
|
||||
@ -155,26 +156,10 @@ declare namespace API {
|
||||
};
|
||||
|
||||
type EmailAuthticateConfig = {
|
||||
email_enabled: boolean;
|
||||
email_enable_verify: boolean;
|
||||
email_enable_domain_suffix: boolean;
|
||||
email_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;
|
||||
enable: boolean;
|
||||
enable_verify: boolean;
|
||||
enable_domain_suffix: boolean;
|
||||
domain_suffix_list: string;
|
||||
};
|
||||
|
||||
type Follow = {
|
||||
@ -190,8 +175,38 @@ declare namespace API {
|
||||
list: PaymentConfig[];
|
||||
};
|
||||
|
||||
type GetLoginLogParams = {
|
||||
page: number;
|
||||
size: number;
|
||||
};
|
||||
|
||||
type GetLoginLogRequest = {
|
||||
page: number;
|
||||
size: number;
|
||||
};
|
||||
|
||||
type GetLoginLogResponse = {
|
||||
list: UserLoginLog[];
|
||||
total: number;
|
||||
};
|
||||
|
||||
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 = {
|
||||
@ -235,6 +250,13 @@ declare namespace API {
|
||||
only_first_purchase: boolean;
|
||||
};
|
||||
|
||||
type MobileAuthenticateConfig = {
|
||||
enable: boolean;
|
||||
limit: number;
|
||||
interval: number;
|
||||
expire_time: number;
|
||||
};
|
||||
|
||||
type NodeConfig = {
|
||||
node_secret: string;
|
||||
node_pull_interval: number;
|
||||
@ -253,16 +275,6 @@ declare namespace API {
|
||||
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 = {
|
||||
uid: number;
|
||||
ip: string;
|
||||
@ -559,6 +571,16 @@ declare namespace API {
|
||||
updated_at: number;
|
||||
};
|
||||
|
||||
type ServerRuleGroup = {
|
||||
id: number;
|
||||
name: string;
|
||||
icon: string;
|
||||
description: string;
|
||||
enable: boolean;
|
||||
created_at: number;
|
||||
updated_at: number;
|
||||
};
|
||||
|
||||
type ServerStatus = {
|
||||
cpu: number;
|
||||
mem: number;
|
||||
@ -579,26 +601,6 @@ declare namespace API {
|
||||
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 = {
|
||||
id: number;
|
||||
sort: number;
|
||||
@ -689,6 +691,16 @@ declare namespace API {
|
||||
tos_content: string;
|
||||
};
|
||||
|
||||
type TrafficLog = {
|
||||
id: number;
|
||||
server_id: number;
|
||||
user_id: number;
|
||||
subscribe_id: number;
|
||||
download: number;
|
||||
upload: number;
|
||||
timestamp: number;
|
||||
};
|
||||
|
||||
type TransportConfig = {
|
||||
path: string;
|
||||
host: string;
|
||||
@ -717,18 +729,14 @@ declare namespace API {
|
||||
};
|
||||
|
||||
type UpdateUserNotifyRequest = {
|
||||
enable_email_notify: boolean;
|
||||
enable_telegram_notify: boolean;
|
||||
enable_balance_notify: boolean;
|
||||
enable_login_notify: boolean;
|
||||
enable_subscribe_notify: boolean;
|
||||
enable_trade_notify: boolean;
|
||||
};
|
||||
|
||||
type UpdateUserNotifySettingRequet = {
|
||||
telegram: number;
|
||||
enable_email_notify: boolean;
|
||||
enable_telegram_notify: boolean;
|
||||
};
|
||||
|
||||
type UpdateUserPasswordRequest = {
|
||||
password: string;
|
||||
};
|
||||
@ -756,7 +764,8 @@ declare namespace API {
|
||||
enable_login_notify: boolean;
|
||||
enable_subscribe_notify: boolean;
|
||||
enable_trade_notify: boolean;
|
||||
auth_methods: AuthMethod[];
|
||||
auth_methods: UserAuthMethod[];
|
||||
user_devices: UserDevice[];
|
||||
created_at: number;
|
||||
updated_at: number;
|
||||
deleted_at?: number;
|
||||
@ -770,6 +779,12 @@ declare namespace API {
|
||||
enable: boolean;
|
||||
};
|
||||
|
||||
type UserAuthMethod = {
|
||||
auth_type: string;
|
||||
auth_identifier: string;
|
||||
verified: boolean;
|
||||
};
|
||||
|
||||
type UserBalanceLog = {
|
||||
id: number;
|
||||
user_id: number;
|
||||
@ -782,15 +797,24 @@ declare namespace API {
|
||||
|
||||
type UserDevice = {
|
||||
id: number;
|
||||
user_id: number;
|
||||
device_number: string;
|
||||
ip: string;
|
||||
imei: string;
|
||||
user_agent: string;
|
||||
online: boolean;
|
||||
last_online: number;
|
||||
enabled: boolean;
|
||||
created_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 = {
|
||||
id: number;
|
||||
user_id: number;
|
||||
@ -809,6 +833,16 @@ declare namespace API {
|
||||
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 = {
|
||||
turnstile_site_key: string;
|
||||
turnstile_secret: string;
|
||||
|
||||
@ -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 */
|
||||
export async function updateUserNotify(
|
||||
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 */
|
||||
export async function getOAuthMethods(options?: { [key: string]: any }) {
|
||||
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 */
|
||||
export async function resetUserSubscribeToken(
|
||||
body: API.ResetUserSubscribeTokenRequest,
|
||||
|
||||
@ -23,7 +23,7 @@ export function DatePicker({
|
||||
const handleSelect = (selectedDate: Date | undefined) => {
|
||||
setDate(selectedDate);
|
||||
if (onChange) {
|
||||
onChange(selectedDate?.getTime());
|
||||
onChange(selectedDate?.getTime() || 0);
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user