🐛 fix(auth): Update authentication configuration and localization strings
This commit is contained in:
parent
3a3d2236e2
commit
47f2c5853c
@ -33,8 +33,8 @@ export default function RegisterForm({
|
|||||||
try {
|
try {
|
||||||
const domain = email.split('@')[1];
|
const domain = email.split('@')[1];
|
||||||
const isValid =
|
const isValid =
|
||||||
!auth.email.email_enable_verify ||
|
!auth.email.enable_verify ||
|
||||||
auth.email?.email_domain_suffix_list.split('\n').includes(domain || '');
|
auth.email?.domain_suffix_list.split('\n').includes(domain || '');
|
||||||
return !isValid;
|
return !isValid;
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
console.log('Error checking user:', error);
|
console.log('Error checking user:', error);
|
||||||
@ -52,7 +52,7 @@ export default function RegisterForm({
|
|||||||
}),
|
}),
|
||||||
password: z.string(),
|
password: z.string(),
|
||||||
repeat_password: z.string(),
|
repeat_password: z.string(),
|
||||||
code: auth.email.email_enable_verify ? z.string() : z.string().nullish(),
|
code: auth.email.enable_verify ? z.string() : z.string().nullish(),
|
||||||
invite: invite.forced_invite ? z.string() : z.string().nullish(),
|
invite: invite.forced_invite ? z.string() : z.string().nullish(),
|
||||||
cf_token:
|
cf_token:
|
||||||
verify.enable_register_verify && verify.turnstile_site_key
|
verify.enable_register_verify && verify.turnstile_site_key
|
||||||
@ -120,7 +120,7 @@ export default function RegisterForm({
|
|||||||
</FormItem>
|
</FormItem>
|
||||||
)}
|
)}
|
||||||
/>
|
/>
|
||||||
{auth.email.email_enable_verify && (
|
{auth.email.enable_verify && (
|
||||||
<FormField
|
<FormField
|
||||||
control={form.control}
|
control={form.control}
|
||||||
name='code'
|
name='code'
|
||||||
|
|||||||
@ -32,7 +32,7 @@ export default function ResetForm({
|
|||||||
const formSchema = z.object({
|
const formSchema = z.object({
|
||||||
email: z.string().email(t('email')),
|
email: z.string().email(t('email')),
|
||||||
password: z.string(),
|
password: z.string(),
|
||||||
code: auth?.email?.email_enable_verify ? z.string() : z.string().nullish(),
|
code: auth?.email?.enable_verify ? z.string() : z.string().nullish(),
|
||||||
cf_token:
|
cf_token:
|
||||||
verify.enable_register_verify && verify.turnstile_site_key
|
verify.enable_register_verify && verify.turnstile_site_key
|
||||||
? z.string()
|
? z.string()
|
||||||
@ -72,7 +72,7 @@ export default function ResetForm({
|
|||||||
)}
|
)}
|
||||||
/>
|
/>
|
||||||
|
|
||||||
{auth?.email?.email_enable_verify && (
|
{auth?.email?.enable_verify && (
|
||||||
<FormField
|
<FormField
|
||||||
control={form.control}
|
control={form.control}
|
||||||
name='code'
|
name='code'
|
||||||
|
|||||||
@ -1,6 +1,6 @@
|
|||||||
'use client';
|
'use client';
|
||||||
|
|
||||||
import { getOAuthByPlatform, updateOAuthConfig } from '@/services/admin/system';
|
import { getAuthMethodConfig, updateAuthMethodConfig } from '@/services/admin/authMethod';
|
||||||
import { useQuery } from '@tanstack/react-query';
|
import { useQuery } from '@tanstack/react-query';
|
||||||
import { Label } from '@workspace/ui/components/label';
|
import { Label } from '@workspace/ui/components/label';
|
||||||
import { Switch } from '@workspace/ui/components/switch';
|
import { Switch } from '@workspace/ui/components/switch';
|
||||||
@ -14,21 +14,21 @@ export default function Page() {
|
|||||||
const t = useTranslations('apple');
|
const t = useTranslations('apple');
|
||||||
|
|
||||||
const { data, refetch } = useQuery({
|
const { data, refetch } = useQuery({
|
||||||
queryKey: ['getOAuthByPlatform', 'apple'],
|
queryKey: ['getAuthMethodConfig', 'apple'],
|
||||||
queryFn: async () => {
|
queryFn: async () => {
|
||||||
const { data } = await getOAuthByPlatform({
|
const { data } = await getAuthMethodConfig({
|
||||||
platform: 'apple',
|
method: 'apple',
|
||||||
});
|
});
|
||||||
return data.data;
|
return data.data;
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
|
||||||
async function updateConfig(key: keyof API.UpdateOAuthConfig, value: unknown) {
|
async function updateConfig(key: keyof API.UpdataAuthMethodConfigRequest, value: unknown) {
|
||||||
try {
|
try {
|
||||||
await updateOAuthConfig({
|
await updateAuthMethodConfig({
|
||||||
...data,
|
...data,
|
||||||
[key]: value,
|
[key]: value,
|
||||||
} as API.UpdateOAuthConfig);
|
} as API.UpdataAuthMethodConfigRequest);
|
||||||
toast.success(t('saveSuccess'));
|
toast.success(t('saveSuccess'));
|
||||||
refetch();
|
refetch();
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
@ -132,8 +132,13 @@ export default function Page() {
|
|||||||
<TableCell className='text-right'>
|
<TableCell className='text-right'>
|
||||||
<EnhancedInput
|
<EnhancedInput
|
||||||
placeholder='https://your-domain.com/v1/auth/oauth/callback/apple'
|
placeholder='https://your-domain.com/v1/auth/oauth/callback/apple'
|
||||||
value={data?.redirect}
|
value={data?.config.redirect_url}
|
||||||
onValueBlur={(value) => updateConfig('redirect', value)}
|
onValueBlur={(value) =>
|
||||||
|
updateConfig('config', {
|
||||||
|
...data?.config,
|
||||||
|
redirect_url: value,
|
||||||
|
})
|
||||||
|
}
|
||||||
/>
|
/>
|
||||||
</TableCell>
|
</TableCell>
|
||||||
</TableRow>
|
</TableRow>
|
||||||
|
|||||||
@ -1,6 +1,10 @@
|
|||||||
'use client';
|
'use client';
|
||||||
|
|
||||||
import { getEmailSmtpConfig, testEmailSmtp, updateEmailSmtpConfig } from '@/services/admin/system';
|
import {
|
||||||
|
getAuthMethodConfig,
|
||||||
|
testEmailSend,
|
||||||
|
updateAuthMethodConfig,
|
||||||
|
} from '@/services/admin/authMethod';
|
||||||
import { useQuery } from '@tanstack/react-query';
|
import { useQuery } from '@tanstack/react-query';
|
||||||
import { Button } from '@workspace/ui/components/button';
|
import { Button } from '@workspace/ui/components/button';
|
||||||
import {
|
import {
|
||||||
@ -23,14 +27,16 @@ import { toast } from 'sonner';
|
|||||||
|
|
||||||
export default function Page() {
|
export default function Page() {
|
||||||
const t = useTranslations('email');
|
const t = useTranslations('email');
|
||||||
const ref = useRef<Partial<API.EmailSmtpConfig>>({});
|
const ref = useRef<Partial<API.AuthMethodConfig>>({});
|
||||||
const [email, setEmail] = useState<string>();
|
const [email, setEmail] = useState<string>();
|
||||||
|
|
||||||
const { data, refetch, isFetching } = useQuery({
|
const { data, refetch, isFetching } = useQuery({
|
||||||
queryKey: ['getEmailSmtpConfig'],
|
queryKey: ['getAuthMethodConfig', 'email'],
|
||||||
queryFn: async () => {
|
queryFn: async () => {
|
||||||
const { data } = await getEmailSmtpConfig();
|
const { data } = await getAuthMethodConfig({
|
||||||
ref.current = data.data as API.EmailSmtpConfig;
|
method: 'email',
|
||||||
|
});
|
||||||
|
ref.current = data.data as API.AuthMethodConfig;
|
||||||
return data.data;
|
return data.data;
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
@ -38,10 +44,10 @@ export default function Page() {
|
|||||||
async function updateConfig(key: string, value: unknown) {
|
async function updateConfig(key: string, value: unknown) {
|
||||||
if (data?.[key] === value) return;
|
if (data?.[key] === value) return;
|
||||||
try {
|
try {
|
||||||
await updateEmailSmtpConfig({
|
await updateAuthMethodConfig({
|
||||||
...ref.current,
|
...ref.current,
|
||||||
[key]: value,
|
[key]: value,
|
||||||
} as API.EmailSmtpConfig);
|
} as API.UpdataAuthMethodConfigRequest);
|
||||||
toast.success(t('saveSuccess'));
|
toast.success(t('saveSuccess'));
|
||||||
refetch();
|
refetch();
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
@ -59,94 +65,193 @@ export default function Page() {
|
|||||||
<TabsContent value='basic'>
|
<TabsContent value='basic'>
|
||||||
<Table>
|
<Table>
|
||||||
<TableBody>
|
<TableBody>
|
||||||
{[
|
<TableRow>
|
||||||
{
|
<TableCell>
|
||||||
key: 'email_enabled',
|
<Label>{t('enable')}</Label>
|
||||||
label: t('enable'),
|
<p className='text-muted-foreground text-xs'>{t('enableDescription')}</p>
|
||||||
description: t('enableDescription'),
|
</TableCell>
|
||||||
component: 'switch',
|
<TableCell className='text-right'>
|
||||||
},
|
<Switch
|
||||||
{
|
checked={data?.enabled}
|
||||||
key: 'enable_email_verify',
|
onCheckedChange={(checked) => updateConfig('enabled', checked)}
|
||||||
label: t('emailVerification'),
|
/>
|
||||||
description: t('emailVerificationDescription'),
|
</TableCell>
|
||||||
component: 'switch',
|
</TableRow>
|
||||||
},
|
<TableRow>
|
||||||
{
|
<TableCell>
|
||||||
key: 'enable_email_domain_suffix',
|
<Label>{t('emailVerification')}</Label>
|
||||||
label: t('emailSuffixWhitelist'),
|
<p className='text-muted-foreground text-xs'>{t('emailVerificationDescription')}</p>
|
||||||
description: t('emailSuffixWhitelistDescription'),
|
</TableCell>
|
||||||
component: 'switch',
|
<TableCell className='text-right'>
|
||||||
},
|
<Switch
|
||||||
{
|
checked={data?.config?.enable_verify}
|
||||||
key: 'email_domain_suffix_list',
|
onCheckedChange={(checked) =>
|
||||||
label: t('whitelistSuffixes'),
|
updateConfig('config', { ...data?.config, enable_verify: checked })
|
||||||
description: t('whitelistSuffixesDescription'),
|
}
|
||||||
component: 'textarea',
|
/>
|
||||||
},
|
</TableCell>
|
||||||
{
|
</TableRow>
|
||||||
key: 'email_smtp_host',
|
<TableRow>
|
||||||
label: t('smtpServerAddress'),
|
<TableCell>
|
||||||
description: t('smtpServerAddressDescription'),
|
<Label>{t('emailSuffixWhitelist')}</Label>
|
||||||
},
|
<p className='text-muted-foreground text-xs'>
|
||||||
{
|
{t('emailSuffixWhitelistDescription')}
|
||||||
key: 'email_smtp_port',
|
</p>
|
||||||
label: t('smtpServerPort'),
|
</TableCell>
|
||||||
description: t('smtpServerPortDescription'),
|
<TableCell className='text-right'>
|
||||||
type: 'number',
|
<Switch
|
||||||
},
|
checked={data?.config?.enable_domain_suffix}
|
||||||
{
|
onCheckedChange={(checked) =>
|
||||||
key: 'email_smtp_ssl',
|
updateConfig('config', { ...data?.config, enable_domain_suffix: checked })
|
||||||
label: t('smtpEncryptionMethod'),
|
}
|
||||||
description: t('smtpEncryptionMethodDescription'),
|
/>
|
||||||
component: 'switch',
|
</TableCell>
|
||||||
},
|
</TableRow>
|
||||||
{
|
<TableRow>
|
||||||
key: 'email_smtp_user',
|
<TableCell className='align-top'>
|
||||||
label: t('smtpAccount'),
|
<Label>{t('whitelistSuffixes')}</Label>
|
||||||
description: t('smtpAccountDescription'),
|
<p className='text-muted-foreground text-xs'>{t('whitelistSuffixesDescription')}</p>
|
||||||
},
|
</TableCell>
|
||||||
{
|
<TableCell className='text-right'>
|
||||||
key: 'email_smtp_pass',
|
<Textarea
|
||||||
label: t('smtpPassword'),
|
className='h-32'
|
||||||
description: t('smtpPasswordDescription'),
|
placeholder={t('whitelistSuffixesPlaceholder')}
|
||||||
type: 'password',
|
defaultValue={data?.config?.domain_suffix_list}
|
||||||
},
|
onBlur={(e) =>
|
||||||
{
|
updateConfig('config', { ...data?.config, domain_suffix_list: e.target.value })
|
||||||
key: 'email_smtp_from',
|
}
|
||||||
label: t('senderAddress'),
|
/>
|
||||||
description: t('senderAddressDescription'),
|
</TableCell>
|
||||||
},
|
</TableRow>
|
||||||
].map(({ key, label, description, type = 'text', component = 'input' }) => (
|
<TableRow>
|
||||||
<TableRow key={key}>
|
<TableCell>
|
||||||
<TableCell className={component === 'textarea' ? 'align-top' : undefined}>
|
<Label>{t('smtpServerAddress')}</Label>
|
||||||
<Label>{label}</Label>
|
<p className='text-muted-foreground text-xs'>{t('smtpServerAddressDescription')}</p>
|
||||||
<p className='text-muted-foreground text-xs'>{description}</p>
|
</TableCell>
|
||||||
</TableCell>
|
<TableCell className='text-right'>
|
||||||
<TableCell className='text-right'>
|
<EnhancedInput
|
||||||
{component === 'input' ? (
|
placeholder={t('inputPlaceholder')}
|
||||||
<EnhancedInput
|
value={data?.config?.platform_config?.host}
|
||||||
placeholder={t('inputPlaceholder')}
|
onValueBlur={(value) =>
|
||||||
value={data?.[key]}
|
updateConfig('config', {
|
||||||
type={type}
|
...data?.config,
|
||||||
onValueBlur={(value) => updateConfig(key, value)}
|
platform_config: {
|
||||||
/>
|
...data?.platform_config,
|
||||||
) : component === 'switch' ? (
|
host: value,
|
||||||
<Switch
|
},
|
||||||
checked={data?.[key]}
|
})
|
||||||
onCheckedChange={(checked) => updateConfig(key, checked)}
|
}
|
||||||
/>
|
/>
|
||||||
) : (
|
</TableCell>
|
||||||
<Textarea
|
</TableRow>
|
||||||
className='h-32'
|
<TableRow>
|
||||||
placeholder={t('whitelistSuffixesPlaceholder')}
|
<TableCell>
|
||||||
defaultValue={data?.[key]}
|
<Label>{t('smtpServerPort')}</Label>
|
||||||
onBlur={(e) => updateConfig(key, e.target.value)}
|
<p className='text-muted-foreground text-xs'>{t('smtpServerPortDescription')}</p>
|
||||||
/>
|
</TableCell>
|
||||||
)}
|
<TableCell className='text-right'>
|
||||||
</TableCell>
|
<EnhancedInput
|
||||||
</TableRow>
|
placeholder={t('inputPlaceholder')}
|
||||||
))}
|
value={data?.config?.platform_config?.port}
|
||||||
|
type='number'
|
||||||
|
onValueBlur={(value) =>
|
||||||
|
updateConfig('config', {
|
||||||
|
...data?.config,
|
||||||
|
platform_config: {
|
||||||
|
...data?.platform_config,
|
||||||
|
port: value,
|
||||||
|
},
|
||||||
|
})
|
||||||
|
}
|
||||||
|
/>
|
||||||
|
</TableCell>
|
||||||
|
</TableRow>
|
||||||
|
<TableRow>
|
||||||
|
<TableCell>
|
||||||
|
<Label>{t('smtpEncryptionMethod')}</Label>
|
||||||
|
<p className='text-muted-foreground text-xs'>
|
||||||
|
{t('smtpEncryptionMethodDescription')}
|
||||||
|
</p>
|
||||||
|
</TableCell>
|
||||||
|
<TableCell className='text-right'>
|
||||||
|
<Switch
|
||||||
|
checked={data?.config?.platform_config?.ssl}
|
||||||
|
onCheckedChange={(checked) =>
|
||||||
|
updateConfig('config', {
|
||||||
|
...data?.config,
|
||||||
|
platform_config: {
|
||||||
|
...data?.platform_config,
|
||||||
|
ssl: checked,
|
||||||
|
},
|
||||||
|
})
|
||||||
|
}
|
||||||
|
/>
|
||||||
|
</TableCell>
|
||||||
|
</TableRow>
|
||||||
|
<TableRow>
|
||||||
|
<TableCell>
|
||||||
|
<Label>{t('smtpAccount')}</Label>
|
||||||
|
<p className='text-muted-foreground text-xs'>{t('smtpAccountDescription')}</p>
|
||||||
|
</TableCell>
|
||||||
|
<TableCell className='text-right'>
|
||||||
|
<EnhancedInput
|
||||||
|
placeholder={t('inputPlaceholder')}
|
||||||
|
value={data?.config?.platform_config?.user}
|
||||||
|
onValueBlur={(value) =>
|
||||||
|
updateConfig('config', {
|
||||||
|
...data?.config,
|
||||||
|
platform_config: {
|
||||||
|
...data?.platform_config,
|
||||||
|
user: value,
|
||||||
|
},
|
||||||
|
})
|
||||||
|
}
|
||||||
|
/>
|
||||||
|
</TableCell>
|
||||||
|
</TableRow>
|
||||||
|
<TableRow>
|
||||||
|
<TableCell>
|
||||||
|
<Label>{t('smtpPassword')}</Label>
|
||||||
|
<p className='text-muted-foreground text-xs'>{t('smtpPasswordDescription')}</p>
|
||||||
|
</TableCell>
|
||||||
|
<TableCell className='text-right'>
|
||||||
|
<EnhancedInput
|
||||||
|
placeholder={t('inputPlaceholder')}
|
||||||
|
value={data?.config?.platform_config?.pass}
|
||||||
|
type='password'
|
||||||
|
onValueBlur={(value) =>
|
||||||
|
updateConfig('config', {
|
||||||
|
...data?.config,
|
||||||
|
platform_config: {
|
||||||
|
...data?.platform_config,
|
||||||
|
pass: value,
|
||||||
|
},
|
||||||
|
})
|
||||||
|
}
|
||||||
|
/>
|
||||||
|
</TableCell>
|
||||||
|
</TableRow>
|
||||||
|
<TableRow>
|
||||||
|
<TableCell>
|
||||||
|
<Label>{t('senderAddress')}</Label>
|
||||||
|
<p className='text-muted-foreground text-xs'>{t('senderAddressDescription')}</p>
|
||||||
|
</TableCell>
|
||||||
|
<TableCell className='text-right'>
|
||||||
|
<EnhancedInput
|
||||||
|
placeholder={t('inputPlaceholder')}
|
||||||
|
value={data?.config?.platform_config?.from}
|
||||||
|
onValueBlur={(value) =>
|
||||||
|
updateConfig('config', {
|
||||||
|
...data?.config,
|
||||||
|
platform_config: {
|
||||||
|
...data?.platform_config,
|
||||||
|
from: value,
|
||||||
|
},
|
||||||
|
})
|
||||||
|
}
|
||||||
|
/>
|
||||||
|
</TableCell>
|
||||||
|
</TableRow>
|
||||||
<TableRow>
|
<TableRow>
|
||||||
<TableCell>
|
<TableCell>
|
||||||
<Label>{t('sendTestEmail')}</Label>
|
<Label>{t('sendTestEmail')}</Label>
|
||||||
@ -164,7 +269,7 @@ export default function Page() {
|
|||||||
onClick={async () => {
|
onClick={async () => {
|
||||||
if (!email) return;
|
if (!email) return;
|
||||||
try {
|
try {
|
||||||
await testEmailSmtp({ email });
|
await testEmailSend({ email });
|
||||||
toast.success(t('sendSuccess'));
|
toast.success(t('sendSuccess'));
|
||||||
} catch {
|
} catch {
|
||||||
toast.error(t('sendFailure'));
|
toast.error(t('sendFailure'));
|
||||||
@ -193,8 +298,13 @@ export default function Page() {
|
|||||||
<CardContent>
|
<CardContent>
|
||||||
<HTMLEditor
|
<HTMLEditor
|
||||||
placeholder={t('inputPlaceholder')}
|
placeholder={t('inputPlaceholder')}
|
||||||
value={data?.[templateKey as keyof API.EmailSmtpConfig] as string}
|
value={data?.config?.[templateKey] as string}
|
||||||
onBlur={(value) => updateConfig(templateKey, value)}
|
onBlur={(value) =>
|
||||||
|
updateConfig('config', {
|
||||||
|
...data?.config,
|
||||||
|
[templateKey]: value,
|
||||||
|
})
|
||||||
|
}
|
||||||
/>
|
/>
|
||||||
</CardContent>
|
</CardContent>
|
||||||
</Card>
|
</Card>
|
||||||
|
|||||||
@ -1,6 +1,6 @@
|
|||||||
'use client';
|
'use client';
|
||||||
|
|
||||||
import { getOAuthByPlatform, updateOAuthConfig } from '@/services/admin/system';
|
import { getAuthMethodConfig, updateAuthMethodConfig } from '@/services/admin/authMethod';
|
||||||
import { useQuery } from '@tanstack/react-query';
|
import { useQuery } from '@tanstack/react-query';
|
||||||
import { Label } from '@workspace/ui/components/label';
|
import { Label } from '@workspace/ui/components/label';
|
||||||
import { Switch } from '@workspace/ui/components/switch';
|
import { Switch } from '@workspace/ui/components/switch';
|
||||||
@ -13,21 +13,21 @@ export default function Page() {
|
|||||||
const t = useTranslations('facebook');
|
const t = useTranslations('facebook');
|
||||||
|
|
||||||
const { data, refetch } = useQuery({
|
const { data, refetch } = useQuery({
|
||||||
queryKey: ['getOAuthByPlatform', 'facebook'],
|
queryKey: ['getAuthMethodConfig', 'facebook'],
|
||||||
queryFn: async () => {
|
queryFn: async () => {
|
||||||
const { data } = await getOAuthByPlatform({
|
const { data } = await getAuthMethodConfig({
|
||||||
platform: 'facebook',
|
method: 'facebook',
|
||||||
});
|
});
|
||||||
return data.data;
|
return data.data;
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
|
||||||
async function updateConfig(key: keyof API.UpdateOAuthConfig, value: unknown) {
|
async function updateConfig(key: keyof API.UpdataAuthMethodConfigRequest, value: unknown) {
|
||||||
try {
|
try {
|
||||||
await updateOAuthConfig({
|
await updateAuthMethodConfig({
|
||||||
...data,
|
...data,
|
||||||
[key]: value,
|
[key]: value,
|
||||||
} as API.UpdateOAuthConfig);
|
} as API.UpdataAuthMethodConfigRequest);
|
||||||
toast.success(t('saveSuccess'));
|
toast.success(t('saveSuccess'));
|
||||||
refetch();
|
refetch();
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
@ -94,8 +94,13 @@ export default function Page() {
|
|||||||
<TableCell className='text-right'>
|
<TableCell className='text-right'>
|
||||||
<EnhancedInput
|
<EnhancedInput
|
||||||
placeholder='https://your-domain.com/v1/auth/oauth/callback/facebook'
|
placeholder='https://your-domain.com/v1/auth/oauth/callback/facebook'
|
||||||
value={data?.redirect}
|
value={data?.config.redirect_url}
|
||||||
onValueBlur={(value) => updateConfig('redirect', value)}
|
onValueBlur={(value) =>
|
||||||
|
updateConfig('config', {
|
||||||
|
...data?.config,
|
||||||
|
redirect_url: value,
|
||||||
|
})
|
||||||
|
}
|
||||||
/>
|
/>
|
||||||
</TableCell>
|
</TableCell>
|
||||||
</TableRow>
|
</TableRow>
|
||||||
|
|||||||
@ -1,6 +1,6 @@
|
|||||||
'use client';
|
'use client';
|
||||||
|
|
||||||
import { getOAuthByPlatform, updateOAuthConfig } from '@/services/admin/system';
|
import { getAuthMethodConfig, updateAuthMethodConfig } from '@/services/admin/authMethod';
|
||||||
import { useQuery } from '@tanstack/react-query';
|
import { useQuery } from '@tanstack/react-query';
|
||||||
import { Label } from '@workspace/ui/components/label';
|
import { Label } from '@workspace/ui/components/label';
|
||||||
import { Switch } from '@workspace/ui/components/switch';
|
import { Switch } from '@workspace/ui/components/switch';
|
||||||
@ -13,21 +13,21 @@ export default function Page() {
|
|||||||
const t = useTranslations('github');
|
const t = useTranslations('github');
|
||||||
|
|
||||||
const { data, refetch } = useQuery({
|
const { data, refetch } = useQuery({
|
||||||
queryKey: ['getOAuthByPlatform', 'github'],
|
queryKey: ['getAuthMethodConfig', 'github'],
|
||||||
queryFn: async () => {
|
queryFn: async () => {
|
||||||
const { data } = await getOAuthByPlatform({
|
const { data } = await getAuthMethodConfig({
|
||||||
platform: 'github',
|
method: 'github',
|
||||||
});
|
});
|
||||||
return data.data;
|
return data.data;
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
|
||||||
async function updateConfig(key: keyof API.UpdateOAuthConfig, value: unknown) {
|
async function updateConfig(key: keyof API.UpdataAuthMethodConfigRequest, value: unknown) {
|
||||||
try {
|
try {
|
||||||
await updateOAuthConfig({
|
await updateAuthMethodConfig({
|
||||||
...data,
|
...data,
|
||||||
[key]: value,
|
[key]: value,
|
||||||
} as API.UpdateOAuthConfig);
|
} as API.UpdataAuthMethodConfigRequest);
|
||||||
toast.success(t('saveSuccess'));
|
toast.success(t('saveSuccess'));
|
||||||
refetch();
|
refetch();
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
@ -93,8 +93,13 @@ export default function Page() {
|
|||||||
<TableCell className='text-right'>
|
<TableCell className='text-right'>
|
||||||
<EnhancedInput
|
<EnhancedInput
|
||||||
placeholder='https://your-domain.com/v1/auth/oauth/callback/github'
|
placeholder='https://your-domain.com/v1/auth/oauth/callback/github'
|
||||||
value={data?.redirect}
|
value={data?.config.redirect_url}
|
||||||
onValueBlur={(value) => updateConfig('redirect', value)}
|
onValueBlur={(value) =>
|
||||||
|
updateConfig('config', {
|
||||||
|
...data?.config,
|
||||||
|
redirect_url: value,
|
||||||
|
})
|
||||||
|
}
|
||||||
/>
|
/>
|
||||||
</TableCell>
|
</TableCell>
|
||||||
</TableRow>
|
</TableRow>
|
||||||
|
|||||||
@ -1,6 +1,6 @@
|
|||||||
'use client';
|
'use client';
|
||||||
|
|
||||||
import { getOAuthByPlatform, updateOAuthConfig } from '@/services/admin/system';
|
import { getAuthMethodConfig, updateAuthMethodConfig } from '@/services/admin/authMethod';
|
||||||
import { useQuery } from '@tanstack/react-query';
|
import { useQuery } from '@tanstack/react-query';
|
||||||
import { Label } from '@workspace/ui/components/label';
|
import { Label } from '@workspace/ui/components/label';
|
||||||
import { Switch } from '@workspace/ui/components/switch';
|
import { Switch } from '@workspace/ui/components/switch';
|
||||||
@ -13,21 +13,21 @@ export default function Page() {
|
|||||||
const t = useTranslations('google');
|
const t = useTranslations('google');
|
||||||
|
|
||||||
const { data, refetch } = useQuery({
|
const { data, refetch } = useQuery({
|
||||||
queryKey: ['getOAuthByPlatform', 'google'],
|
queryKey: ['getAuthMethodConfig', 'google'],
|
||||||
queryFn: async () => {
|
queryFn: async () => {
|
||||||
const { data } = await getOAuthByPlatform({
|
const { data } = await getAuthMethodConfig({
|
||||||
platform: 'google',
|
method: 'google',
|
||||||
});
|
});
|
||||||
return data.data;
|
return data.data;
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
|
||||||
async function updateConfig(key: keyof API.UpdateOAuthConfig, value: unknown) {
|
async function updateConfig(key: keyof API.UpdataAuthMethodConfigRequest, value: unknown) {
|
||||||
try {
|
try {
|
||||||
await updateOAuthConfig({
|
await updateAuthMethodConfig({
|
||||||
...data,
|
...data,
|
||||||
[key]: value,
|
[key]: value,
|
||||||
} as API.UpdateOAuthConfig);
|
} as API.UpdataAuthMethodConfigRequest);
|
||||||
toast.success(t('saveSuccess'));
|
toast.success(t('saveSuccess'));
|
||||||
refetch();
|
refetch();
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
@ -94,8 +94,13 @@ export default function Page() {
|
|||||||
<TableCell className='text-right'>
|
<TableCell className='text-right'>
|
||||||
<EnhancedInput
|
<EnhancedInput
|
||||||
placeholder='https://your-domain.com/v1/auth/oauth/callback/google'
|
placeholder='https://your-domain.com/v1/auth/oauth/callback/google'
|
||||||
value={data?.redirect}
|
value={data?.config.redirect_url}
|
||||||
onValueBlur={(value) => updateConfig('redirect', value)}
|
onValueBlur={(value) =>
|
||||||
|
updateConfig('config', {
|
||||||
|
...data?.config,
|
||||||
|
redirect_url: value,
|
||||||
|
})
|
||||||
|
}
|
||||||
/>
|
/>
|
||||||
</TableCell>
|
</TableCell>
|
||||||
</TableRow>
|
</TableRow>
|
||||||
|
|||||||
@ -1,13 +1,13 @@
|
|||||||
'use client';
|
'use client';
|
||||||
|
|
||||||
import { ProTable, ProTableActions } from '@/components/pro-table';
|
import { ProTable, ProTableActions } from '@/components/pro-table';
|
||||||
import { getSmsList } from '@/services/admin/sms';
|
|
||||||
import {
|
import {
|
||||||
getSmsConfig,
|
getAuthMethodConfig,
|
||||||
getSmsPlatform,
|
getSmsPlatform,
|
||||||
testSmsSend,
|
testSmsSend,
|
||||||
updateSmsConfig,
|
updateAuthMethodConfig,
|
||||||
} from '@/services/admin/system';
|
} from '@/services/admin/authMethod';
|
||||||
|
import { getSmsList } from '@/services/admin/sms';
|
||||||
import { useQuery } from '@tanstack/react-query';
|
import { useQuery } from '@tanstack/react-query';
|
||||||
import { Badge } from '@workspace/ui/components/badge';
|
import { Badge } from '@workspace/ui/components/badge';
|
||||||
import { Button } from '@workspace/ui/components/button';
|
import { Button } from '@workspace/ui/components/button';
|
||||||
@ -25,6 +25,7 @@ import { Tabs, TabsContent, TabsList, TabsTrigger } from '@workspace/ui/componen
|
|||||||
import { Textarea } from '@workspace/ui/components/textarea';
|
import { Textarea } from '@workspace/ui/components/textarea';
|
||||||
import { AreaCodeSelect } from '@workspace/ui/custom-components/area-code-select';
|
import { AreaCodeSelect } from '@workspace/ui/custom-components/area-code-select';
|
||||||
import { EnhancedInput } from '@workspace/ui/custom-components/enhanced-input';
|
import { EnhancedInput } from '@workspace/ui/custom-components/enhanced-input';
|
||||||
|
import TagInput from '@workspace/ui/custom-components/tag-input';
|
||||||
import { formatDate } from '@workspace/ui/utils';
|
import { formatDate } from '@workspace/ui/utils';
|
||||||
import { useTranslations } from 'next-intl';
|
import { useTranslations } from 'next-intl';
|
||||||
import Link from 'next/link';
|
import Link from 'next/link';
|
||||||
@ -34,9 +35,11 @@ import { toast } from 'sonner';
|
|||||||
export default function Page() {
|
export default function Page() {
|
||||||
const t = useTranslations('phone');
|
const t = useTranslations('phone');
|
||||||
const { data, refetch, isFetching } = useQuery({
|
const { data, refetch, isFetching } = useQuery({
|
||||||
queryKey: ['getSmsConfig'],
|
queryKey: ['getAuthMethodConfig', 'mobile'],
|
||||||
queryFn: async () => {
|
queryFn: async () => {
|
||||||
const { data } = await getSmsConfig();
|
const { data } = await getAuthMethodConfig({
|
||||||
|
method: 'mobile',
|
||||||
|
});
|
||||||
return data.data;
|
return data.data;
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
@ -49,25 +52,27 @@ export default function Page() {
|
|||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
|
||||||
const selectedPlatform = platforms?.find((platform) => platform.platform === data?.sms_platform);
|
const selectedPlatform = platforms?.find(
|
||||||
|
(platform) => platform.platform === data?.config?.platform,
|
||||||
|
);
|
||||||
const { platform_url, platform_field_description: platformConfig } = selectedPlatform ?? {};
|
const { platform_url, platform_field_description: platformConfig } = selectedPlatform ?? {};
|
||||||
|
|
||||||
async function updateConfig(key: string, value: unknown) {
|
async function updateConfig(key: string, value: unknown) {
|
||||||
if (data?.[key] === value) return;
|
if (data?.[key] === value) return;
|
||||||
|
|
||||||
try {
|
try {
|
||||||
await updateSmsConfig({
|
await updateAuthMethodConfig({
|
||||||
...data,
|
...data,
|
||||||
[key]: value,
|
[key]: value,
|
||||||
} as API.SmsConfig);
|
} as API.UpdataAuthMethodConfigRequest);
|
||||||
toast.success(t('updateSuccess'));
|
toast.success(t('updateSuccess'));
|
||||||
refetch();
|
refetch();
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
/* empty */
|
/* empty */
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
const [params, setParams] = useState<API.SendSmsRequest>({
|
const [params, setParams] = useState<API.TestSmsSendRequest>({
|
||||||
telephone: '',
|
telephone: '',
|
||||||
content: t('testSmsContent'),
|
|
||||||
area_code: '1',
|
area_code: '1',
|
||||||
});
|
});
|
||||||
|
|
||||||
@ -88,8 +93,8 @@ export default function Page() {
|
|||||||
</TableCell>
|
</TableCell>
|
||||||
<TableCell className='text-right'>
|
<TableCell className='text-right'>
|
||||||
<Switch
|
<Switch
|
||||||
checked={data?.sms_enabled}
|
checked={data?.enabled}
|
||||||
onCheckedChange={(checked) => updateConfig('sms_enabled', checked)}
|
onCheckedChange={(checked) => updateConfig('enabled', checked)}
|
||||||
disabled={isFetching}
|
disabled={isFetching}
|
||||||
/>
|
/>
|
||||||
</TableCell>
|
</TableCell>
|
||||||
@ -103,8 +108,13 @@ export default function Page() {
|
|||||||
<EnhancedInput
|
<EnhancedInput
|
||||||
type='number'
|
type='number'
|
||||||
min={0}
|
min={0}
|
||||||
value={data?.sms_expire_time ?? 300}
|
value={data?.config?.expire_time ?? 300}
|
||||||
onValueBlur={(value) => updateConfig('sms_expire_time', value)}
|
onValueBlur={(value) =>
|
||||||
|
updateConfig('config', {
|
||||||
|
...data?.config,
|
||||||
|
expire_time: value,
|
||||||
|
})
|
||||||
|
}
|
||||||
suffix='S'
|
suffix='S'
|
||||||
disabled={isFetching}
|
disabled={isFetching}
|
||||||
placeholder={t('placeholders.expireTime')}
|
placeholder={t('placeholders.expireTime')}
|
||||||
@ -119,9 +129,14 @@ export default function Page() {
|
|||||||
<TableCell className='text-right'>
|
<TableCell className='text-right'>
|
||||||
<EnhancedInput
|
<EnhancedInput
|
||||||
type='number'
|
type='number'
|
||||||
value={data?.sms_interval ?? 60}
|
value={data?.config?.interval ?? 60}
|
||||||
min={0}
|
min={0}
|
||||||
onValueBlur={(value) => updateConfig('sms_interval', value)}
|
onValueBlur={(value) =>
|
||||||
|
updateConfig('config', {
|
||||||
|
...data?.config,
|
||||||
|
interval: value,
|
||||||
|
})
|
||||||
|
}
|
||||||
suffix='S'
|
suffix='S'
|
||||||
disabled={isFetching}
|
disabled={isFetching}
|
||||||
placeholder={t('placeholders.interval')}
|
placeholder={t('placeholders.interval')}
|
||||||
@ -136,14 +151,48 @@ export default function Page() {
|
|||||||
<TableCell className='text-right'>
|
<TableCell className='text-right'>
|
||||||
<EnhancedInput
|
<EnhancedInput
|
||||||
type='number'
|
type='number'
|
||||||
value={data?.sms_limit ?? 20}
|
value={data?.config?.limit ?? 20}
|
||||||
min={0}
|
min={0}
|
||||||
onValueBlur={(value) => updateConfig('sms_limit', value)}
|
onValueBlur={(value) =>
|
||||||
|
updateConfig('config', {
|
||||||
|
...data?.config,
|
||||||
|
limit: value,
|
||||||
|
})
|
||||||
|
}
|
||||||
disabled={isFetching}
|
disabled={isFetching}
|
||||||
placeholder={t('placeholders.limit')}
|
placeholder={t('placeholders.limit')}
|
||||||
/>
|
/>
|
||||||
</TableCell>
|
</TableCell>
|
||||||
</TableRow>
|
</TableRow>
|
||||||
|
<TableRow>
|
||||||
|
<TableCell>
|
||||||
|
<Label>{t('whitelistValidation')}</Label>
|
||||||
|
<p className='text-muted-foreground text-xs'>{t('whitelistValidationTip')}</p>
|
||||||
|
</TableCell>
|
||||||
|
<TableCell className='text-right'>
|
||||||
|
<Switch
|
||||||
|
defaultValue={data?.config?.enable_whitelist}
|
||||||
|
onCheckedChange={(checked) =>
|
||||||
|
updateConfig('config', { ...data?.config, enable_whitelist: checked })
|
||||||
|
}
|
||||||
|
/>
|
||||||
|
</TableCell>
|
||||||
|
</TableRow>
|
||||||
|
<TableRow>
|
||||||
|
<TableCell>
|
||||||
|
<Label>{t('whitelistAreaCode')}</Label>
|
||||||
|
<p className='text-muted-foreground text-xs'>{t('whitelistAreaCodeTip')}</p>
|
||||||
|
</TableCell>
|
||||||
|
<TableCell className='w-1/2 text-right'>
|
||||||
|
<TagInput
|
||||||
|
placeholder='1, 852, 886, 888'
|
||||||
|
value={data?.config?.whitelist || []}
|
||||||
|
onChange={(value) =>
|
||||||
|
updateConfig('config', { ...data?.config, whitelist: value })
|
||||||
|
}
|
||||||
|
/>
|
||||||
|
</TableCell>
|
||||||
|
</TableRow>
|
||||||
<TableRow>
|
<TableRow>
|
||||||
<TableCell>
|
<TableCell>
|
||||||
<Label>{t('platform')}</Label>
|
<Label>{t('platform')}</Label>
|
||||||
@ -151,8 +200,13 @@ export default function Page() {
|
|||||||
</TableCell>
|
</TableCell>
|
||||||
<TableCell className='flex items-center gap-1 text-right'>
|
<TableCell className='flex items-center gap-1 text-right'>
|
||||||
<Select
|
<Select
|
||||||
value={data?.sms_platform}
|
value={data?.platform}
|
||||||
onValueChange={(value) => updateConfig('sms_platform', value)}
|
onValueChange={(value) =>
|
||||||
|
updateConfig('config', {
|
||||||
|
...data?.config,
|
||||||
|
platform: value,
|
||||||
|
})
|
||||||
|
}
|
||||||
disabled={isFetching}
|
disabled={isFetching}
|
||||||
>
|
>
|
||||||
<SelectTrigger>
|
<SelectTrigger>
|
||||||
@ -177,70 +231,128 @@ export default function Page() {
|
|||||||
</TableRow>
|
</TableRow>
|
||||||
<TableRow>
|
<TableRow>
|
||||||
<TableCell>
|
<TableCell>
|
||||||
<Label>Key</Label>
|
<Label>{t('accessLabel')}</Label>
|
||||||
<p className='text-muted-foreground text-xs'>
|
<p className='text-muted-foreground text-xs'>
|
||||||
{t('platformConfigTip', { key: platformConfig?.sms_key })}
|
{t('platformConfigTip', { key: platformConfig?.access })}
|
||||||
</p>
|
</p>
|
||||||
</TableCell>
|
</TableCell>
|
||||||
<TableCell className='text-right'>
|
<TableCell className='text-right'>
|
||||||
<EnhancedInput
|
<EnhancedInput
|
||||||
value={data?.sms_key ?? ''}
|
value={data?.config?.platform_config.access ?? ''}
|
||||||
onValueBlur={(value) => updateConfig('sms_key', value)}
|
onValueBlur={(value) =>
|
||||||
|
updateConfig('config', {
|
||||||
|
...data?.config,
|
||||||
|
platform_config: {
|
||||||
|
...data?.config?.platform_config,
|
||||||
|
access: value,
|
||||||
|
},
|
||||||
|
})
|
||||||
|
}
|
||||||
disabled={isFetching}
|
disabled={isFetching}
|
||||||
placeholder={t('platformConfigTip', { key: platformConfig?.sms_key })}
|
placeholder={t('platformConfigTip', { key: platformConfig?.access })}
|
||||||
/>
|
/>
|
||||||
</TableCell>
|
</TableCell>
|
||||||
</TableRow>
|
</TableRow>
|
||||||
<TableRow>
|
{platformConfig?.endpoint && (
|
||||||
<TableCell>
|
|
||||||
<Label>Secret</Label>
|
|
||||||
<p className='text-muted-foreground text-xs'>
|
|
||||||
{t('platformConfigTip', { key: platformConfig?.sms_secret })}
|
|
||||||
</p>
|
|
||||||
</TableCell>
|
|
||||||
<TableCell className='text-right'>
|
|
||||||
<EnhancedInput
|
|
||||||
value={data?.sms_secret ?? ''}
|
|
||||||
onValueBlur={(value) => updateConfig('sms_secret', value)}
|
|
||||||
disabled={isFetching}
|
|
||||||
type='password'
|
|
||||||
placeholder={t('platformConfigTip', { key: platformConfig?.sms_secret })}
|
|
||||||
/>
|
|
||||||
</TableCell>
|
|
||||||
</TableRow>
|
|
||||||
{platformConfig?.sms_template_code && (
|
|
||||||
<TableRow>
|
<TableRow>
|
||||||
<TableCell>
|
<TableCell>
|
||||||
<Label>{t('templateCode')}</Label>
|
<Label>{t('endpointLabel')}</Label>
|
||||||
<p className='text-muted-foreground text-xs'>
|
<p className='text-muted-foreground text-xs'>
|
||||||
{t('platformConfigTip', { key: platformConfig?.sms_template_code })}
|
{t('platformConfigTip', { key: platformConfig?.endpoint })}
|
||||||
</p>
|
</p>
|
||||||
</TableCell>
|
</TableCell>
|
||||||
<TableCell className='text-right'>
|
<TableCell className='text-right'>
|
||||||
<EnhancedInput
|
<EnhancedInput
|
||||||
value={data?.sms_template_code ?? ''}
|
value={data?.config?.platform_config.endpoint ?? ''}
|
||||||
onValueBlur={(value) => updateConfig('sms_template_code', value)}
|
onValueBlur={(value) =>
|
||||||
|
updateConfig('config', {
|
||||||
|
...data?.config,
|
||||||
|
platform_config: {
|
||||||
|
...data?.config?.platform_config,
|
||||||
|
endpoint: value,
|
||||||
|
},
|
||||||
|
})
|
||||||
|
}
|
||||||
disabled={isFetching}
|
disabled={isFetching}
|
||||||
placeholder={t('platformConfigTip', { key: platformConfig?.sms_template_code })}
|
placeholder={t('platformConfigTip', { key: platformConfig?.endpoint })}
|
||||||
/>
|
/>
|
||||||
</TableCell>
|
</TableCell>
|
||||||
</TableRow>
|
</TableRow>
|
||||||
)}
|
)}
|
||||||
{platformConfig?.sms_template_param && (
|
<TableRow>
|
||||||
|
<TableCell>
|
||||||
|
<Label>{t('secretLabel')}</Label>
|
||||||
|
<p className='text-muted-foreground text-xs'>
|
||||||
|
{t('platformConfigTip', { key: platformConfig?.secret })}
|
||||||
|
</p>
|
||||||
|
</TableCell>
|
||||||
|
<TableCell className='text-right'>
|
||||||
|
<EnhancedInput
|
||||||
|
value={data?.config?.platform_config?.secret ?? ''}
|
||||||
|
onValueBlur={(value) =>
|
||||||
|
updateConfig('config', {
|
||||||
|
...data?.config,
|
||||||
|
platform_config: {
|
||||||
|
...data?.config?.platform_config,
|
||||||
|
secret: value,
|
||||||
|
},
|
||||||
|
})
|
||||||
|
}
|
||||||
|
disabled={isFetching}
|
||||||
|
type='password'
|
||||||
|
placeholder={t('platformConfigTip', { key: platformConfig?.secret })}
|
||||||
|
/>
|
||||||
|
</TableCell>
|
||||||
|
</TableRow>
|
||||||
|
{platformConfig?.template_code && (
|
||||||
<TableRow>
|
<TableRow>
|
||||||
<TableCell>
|
<TableCell>
|
||||||
<Label>{t('templateParam')}</Label>
|
<Label>{t('templateCodeLabel')}</Label>
|
||||||
<p className='text-muted-foreground text-xs'>
|
<p className='text-muted-foreground text-xs'>
|
||||||
{t('platformConfigTip', { key: platformConfig?.sms_template_param })}
|
{t('platformConfigTip', { key: platformConfig?.template_code })}
|
||||||
</p>
|
</p>
|
||||||
</TableCell>
|
</TableCell>
|
||||||
<TableCell className='text-right'>
|
<TableCell className='text-right'>
|
||||||
<EnhancedInput
|
<EnhancedInput
|
||||||
value={data?.sms_template_param ?? 'code'}
|
value={data?.config?.platform_config?.template_code ?? 'code'}
|
||||||
onValueBlur={(value) => updateConfig('sms_template_param', value)}
|
onValueBlur={(value) =>
|
||||||
|
updateConfig('config', {
|
||||||
|
...data?.config,
|
||||||
|
platform_config: {
|
||||||
|
...data?.config?.platform_config,
|
||||||
|
template_code: value,
|
||||||
|
},
|
||||||
|
})
|
||||||
|
}
|
||||||
|
disabled={isFetching}
|
||||||
|
placeholder={t('platformConfigTip', { key: platformConfig?.template_code })}
|
||||||
|
/>
|
||||||
|
</TableCell>
|
||||||
|
</TableRow>
|
||||||
|
)}
|
||||||
|
{platformConfig?.sign_name && (
|
||||||
|
<TableRow>
|
||||||
|
<TableCell>
|
||||||
|
<Label>{t('signNameLabel')}</Label>
|
||||||
|
<p className='text-muted-foreground text-xs'>
|
||||||
|
{t('platformConfigTip', { key: platformConfig?.sign_name })}
|
||||||
|
</p>
|
||||||
|
</TableCell>
|
||||||
|
<TableCell className='text-right'>
|
||||||
|
<EnhancedInput
|
||||||
|
value={data?.config?.platform_config?.sign_name ?? ''}
|
||||||
|
onValueBlur={(value) =>
|
||||||
|
updateConfig('config', {
|
||||||
|
...data?.config,
|
||||||
|
platform_config: {
|
||||||
|
...data?.config?.platform_config,
|
||||||
|
sign_name: value,
|
||||||
|
},
|
||||||
|
})
|
||||||
|
}
|
||||||
disabled={isFetching}
|
disabled={isFetching}
|
||||||
placeholder={t('platformConfigTip', {
|
placeholder={t('platformConfigTip', {
|
||||||
key: platformConfig?.sms_template_param,
|
key: platformConfig?.sign_name,
|
||||||
})}
|
})}
|
||||||
/>
|
/>
|
||||||
</TableCell>
|
</TableCell>
|
||||||
@ -250,15 +362,23 @@ export default function Page() {
|
|||||||
<TableCell>
|
<TableCell>
|
||||||
<Label>{t('template')}</Label>
|
<Label>{t('template')}</Label>
|
||||||
<p className='text-muted-foreground text-xs'>
|
<p className='text-muted-foreground text-xs'>
|
||||||
{t('templateTip', { code: platformConfig?.sms_template })}
|
{t('templateTip', { code: platformConfig?.code_variable })}
|
||||||
</p>
|
</p>
|
||||||
</TableCell>
|
</TableCell>
|
||||||
<TableCell className='text-right'>
|
<TableCell className='text-right'>
|
||||||
<Textarea
|
<Textarea
|
||||||
defaultValue={data?.sms_template ?? ''}
|
defaultValue={data?.platform_config?.template ?? ''}
|
||||||
onBlur={(e) => updateConfig('sms_template', e.target.value)}
|
onBlur={(e) =>
|
||||||
|
updateConfig('config', {
|
||||||
|
...data?.config,
|
||||||
|
platform_config: {
|
||||||
|
...data?.config?.platform_config,
|
||||||
|
template: e.target.value,
|
||||||
|
},
|
||||||
|
})
|
||||||
|
}
|
||||||
disabled={isFetching}
|
disabled={isFetching}
|
||||||
placeholder={t('placeholders.template', { code: platformConfig?.sms_template })}
|
placeholder={t('placeholders.template', { code: platformConfig?.code_variable })}
|
||||||
/>
|
/>
|
||||||
</TableCell>
|
</TableCell>
|
||||||
</TableRow>
|
</TableRow>
|
||||||
@ -315,7 +435,7 @@ function LogsTable() {
|
|||||||
const ref = useRef<ProTableActions>(null);
|
const ref = useRef<ProTableActions>(null);
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<ProTable<API.Sms, { telephone: string }>
|
<ProTable<API.SMS, { telephone: string }>
|
||||||
action={ref}
|
action={ref}
|
||||||
header={{
|
header={{
|
||||||
title: t('SmsList'),
|
title: t('SmsList'),
|
||||||
|
|||||||
@ -1,6 +1,6 @@
|
|||||||
'use client';
|
'use client';
|
||||||
|
|
||||||
import { getOAuthByPlatform, updateOAuthConfig } from '@/services/admin/system';
|
import { getAuthMethodConfig, updateAuthMethodConfig } from '@/services/admin/authMethod';
|
||||||
import { useQuery } from '@tanstack/react-query';
|
import { useQuery } from '@tanstack/react-query';
|
||||||
import { Label } from '@workspace/ui/components/label';
|
import { Label } from '@workspace/ui/components/label';
|
||||||
import { Switch } from '@workspace/ui/components/switch';
|
import { Switch } from '@workspace/ui/components/switch';
|
||||||
@ -13,21 +13,21 @@ export default function Page() {
|
|||||||
const t = useTranslations('telegram');
|
const t = useTranslations('telegram');
|
||||||
|
|
||||||
const { data, refetch } = useQuery({
|
const { data, refetch } = useQuery({
|
||||||
queryKey: ['getOAuthByPlatform', 'telegram'],
|
queryKey: ['getAuthMethodConfig', 'telegram'],
|
||||||
queryFn: async () => {
|
queryFn: async () => {
|
||||||
const { data } = await getOAuthByPlatform({
|
const { data } = await getAuthMethodConfig({
|
||||||
platform: 'telegram',
|
method: 'telegram',
|
||||||
});
|
});
|
||||||
return data.data;
|
return data.data;
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
|
||||||
async function updateConfig(key: keyof API.UpdateOAuthConfig, value: unknown) {
|
async function updateConfig(key: keyof API.UpdataAuthMethodConfigRequest, value: unknown) {
|
||||||
try {
|
try {
|
||||||
await updateOAuthConfig({
|
await updateAuthMethodConfig({
|
||||||
...data,
|
...data,
|
||||||
[key]: value,
|
[key]: value,
|
||||||
} as API.UpdateOAuthConfig);
|
} as API.UpdataAuthMethodConfigRequest);
|
||||||
toast.success(t('saveSuccess'));
|
toast.success(t('saveSuccess'));
|
||||||
refetch();
|
refetch();
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
@ -94,8 +94,13 @@ export default function Page() {
|
|||||||
<TableCell className='text-right'>
|
<TableCell className='text-right'>
|
||||||
<EnhancedInput
|
<EnhancedInput
|
||||||
placeholder='https://your-domain.com/v1/auth/oauth/callback/telegram'
|
placeholder='https://your-domain.com/v1/auth/oauth/callback/telegram'
|
||||||
value={data?.redirect}
|
value={data?.config.redirect_url}
|
||||||
onValueBlur={(value) => updateConfig('redirect', value)}
|
onValueBlur={(value) =>
|
||||||
|
updateConfig('config', {
|
||||||
|
...data?.config,
|
||||||
|
redirect_url: value,
|
||||||
|
})
|
||||||
|
}
|
||||||
/>
|
/>
|
||||||
</TableCell>
|
</TableCell>
|
||||||
</TableRow>
|
</TableRow>
|
||||||
|
|||||||
@ -17,7 +17,7 @@ import { cn } from '@workspace/ui/lib/utils';
|
|||||||
import { formatDate } from '@workspace/ui/utils';
|
import { formatDate } from '@workspace/ui/utils';
|
||||||
import { UserDetail } from '../user/user-detail';
|
import { UserDetail } from '../user/user-detail';
|
||||||
|
|
||||||
export default function Page(props: { userId?: string }) {
|
export default function Page(props: any) {
|
||||||
const t = useTranslations('order');
|
const t = useTranslations('order');
|
||||||
|
|
||||||
const statusOptions = [
|
const statusOptions = [
|
||||||
|
|||||||
@ -5,7 +5,7 @@ import UserLoginHistory from './user-login-history';
|
|||||||
import { UserProfileForm } from './user-profile';
|
import { UserProfileForm } from './user-profile';
|
||||||
import UserSubscription from './user-subscription';
|
import UserSubscription from './user-subscription';
|
||||||
|
|
||||||
export default async function Page({ params }: { params: Promise<{ id: string }> }) {
|
export default async function Page({ params }: { params: Promise<{ id: number }> }) {
|
||||||
const t = await getTranslations('user');
|
const t = await getTranslations('user');
|
||||||
const { id } = await params;
|
const { id } = await params;
|
||||||
return (
|
return (
|
||||||
|
|||||||
@ -30,12 +30,14 @@ export default function UserSubscription({ userId }: { userId: number }) {
|
|||||||
loading={loading}
|
loading={loading}
|
||||||
userId={userId}
|
userId={userId}
|
||||||
onSubmit={async (values) => {
|
onSubmit={async (values) => {
|
||||||
|
setLoading(true);
|
||||||
await createUserSubscribe({
|
await createUserSubscribe({
|
||||||
user_id: userId,
|
user_id: userId,
|
||||||
...values,
|
...values,
|
||||||
});
|
});
|
||||||
toast.success(t('createSuccess'));
|
toast.success(t('createSuccess'));
|
||||||
ref.current?.refresh();
|
ref.current?.refresh();
|
||||||
|
setLoading(false);
|
||||||
return true;
|
return true;
|
||||||
}}
|
}}
|
||||||
/>
|
/>
|
||||||
@ -122,6 +124,7 @@ export default function UserSubscription({ userId }: { userId: number }) {
|
|||||||
userId={userId}
|
userId={userId}
|
||||||
initialData={row}
|
initialData={row}
|
||||||
onSubmit={async (values) => {
|
onSubmit={async (values) => {
|
||||||
|
setLoading(true);
|
||||||
await updateUserSubscribe({
|
await updateUserSubscribe({
|
||||||
user_id: userId,
|
user_id: userId,
|
||||||
user_subscribe_id: row.id,
|
user_subscribe_id: row.id,
|
||||||
@ -129,6 +132,7 @@ export default function UserSubscription({ userId }: { userId: number }) {
|
|||||||
});
|
});
|
||||||
toast.success(t('updateSuccess'));
|
toast.success(t('updateSuccess'));
|
||||||
ref.current?.refresh();
|
ref.current?.refresh();
|
||||||
|
setLoading(false);
|
||||||
return true;
|
return true;
|
||||||
}}
|
}}
|
||||||
/>,
|
/>,
|
||||||
@ -144,7 +148,7 @@ export default function UserSubscription({ userId }: { userId: number }) {
|
|||||||
title={t('confirmDelete')}
|
title={t('confirmDelete')}
|
||||||
description={t('deleteSubscriptionDescription')}
|
description={t('deleteSubscriptionDescription')}
|
||||||
onConfirm={async () => {
|
onConfirm={async () => {
|
||||||
console.log('删除订阅:', row.id);
|
console.log('Delete subscription:', row.id);
|
||||||
}}
|
}}
|
||||||
cancelText={t('cancel')}
|
cancelText={t('cancel')}
|
||||||
confirmText={t('confirm')}
|
confirmText={t('confirm')}
|
||||||
|
|||||||
@ -16,23 +16,23 @@ export const useGlobalStore = create<GlobalStore>((set) => ({
|
|||||||
site_logo: '',
|
site_logo: '',
|
||||||
},
|
},
|
||||||
verify: {
|
verify: {
|
||||||
|
turnstile_site_key: '',
|
||||||
enable_login_verify: false,
|
enable_login_verify: false,
|
||||||
enable_register_verify: false,
|
enable_register_verify: false,
|
||||||
enable_reset_password_verify: false,
|
enable_reset_password_verify: false,
|
||||||
turnstile_site_key: '',
|
|
||||||
},
|
},
|
||||||
auth: {
|
auth: {
|
||||||
sms: {
|
mobile: {
|
||||||
sms_enabled: false,
|
enable: false,
|
||||||
sms_limit: 0,
|
limit: 0,
|
||||||
sms_interval: 0,
|
interval: 0,
|
||||||
sms_expire_time: 0,
|
expire_time: 0,
|
||||||
},
|
},
|
||||||
email: {
|
email: {
|
||||||
email_enabled: false,
|
enable: false,
|
||||||
email_enable_verify: false,
|
enable_verify: false,
|
||||||
email_enable_domain_suffix: false,
|
enable_domain_suffix: false,
|
||||||
email_domain_suffix_list: '',
|
domain_suffix_list: '',
|
||||||
},
|
},
|
||||||
register: {
|
register: {
|
||||||
stop_register: false,
|
stop_register: false,
|
||||||
@ -42,31 +42,14 @@ export const useGlobalStore = create<GlobalStore>((set) => ({
|
|||||||
ip_register_limit_duration: 0,
|
ip_register_limit_duration: 0,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
register: {
|
|
||||||
stop_register: false,
|
|
||||||
enable_email_verify: false,
|
|
||||||
enable_email_domain_suffix: false,
|
|
||||||
email_domain_suffix_list: '',
|
|
||||||
enable_trial: false,
|
|
||||||
enable_ip_register_limit: false,
|
|
||||||
ip_register_limit: 0,
|
|
||||||
ip_register_limit_duration: 0,
|
|
||||||
sms: {
|
|
||||||
sms_enabled: false,
|
|
||||||
sms_limit: 0,
|
|
||||||
sms_interval: 0,
|
|
||||||
sms_expire_time: 0,
|
|
||||||
},
|
|
||||||
},
|
|
||||||
invite: {
|
invite: {
|
||||||
forced_invite: false,
|
forced_invite: false,
|
||||||
referral_percentage: 0,
|
referral_percentage: 0,
|
||||||
only_first_purchase: false,
|
only_first_purchase: false,
|
||||||
},
|
},
|
||||||
currency: {
|
currency: {
|
||||||
currency_unit: 'USD',
|
currency_unit: '',
|
||||||
currency_symbol: '$',
|
currency_symbol: '',
|
||||||
access_key: '',
|
|
||||||
},
|
},
|
||||||
subscribe: {
|
subscribe: {
|
||||||
single_model: false,
|
single_model: false,
|
||||||
|
|||||||
@ -1,11 +1,13 @@
|
|||||||
{
|
{
|
||||||
"SmsList": "Seznam SMS záznamů",
|
"SmsList": "Seznam SMS záznamů",
|
||||||
|
"accessLabel": "Přístup",
|
||||||
"applyPlatform": "Použít platformu",
|
"applyPlatform": "Použít platformu",
|
||||||
"areaCode": "Směrový kód",
|
"areaCode": "Směrový kód",
|
||||||
"content": "Obsah",
|
"content": "Obsah",
|
||||||
"createdAt": "Čas odeslání",
|
"createdAt": "Čas odeslání",
|
||||||
"enable": "Povolit",
|
"enable": "Povolit",
|
||||||
"enableTip": "Po povolení budou povoleny funkce registrace, přihlášení, připojení a odpojení mobilního telefonu",
|
"enableTip": "Po povolení budou povoleny funkce registrace, přihlášení, připojení a odpojení mobilního telefonu",
|
||||||
|
"endpointLabel": "Koncový bod",
|
||||||
"expireTime": "Čas vypršení",
|
"expireTime": "Čas vypršení",
|
||||||
"expireTimeTip": "Doba platnosti ověřovacího kódu SMS (v sekundách)",
|
"expireTimeTip": "Doba platnosti ověřovacího kódu SMS (v sekundách)",
|
||||||
"interval": "Interval",
|
"interval": "Interval",
|
||||||
@ -24,18 +26,25 @@
|
|||||||
"platformConfigTip": "Vyplňte prosím poskytnutou konfiguraci {key}",
|
"platformConfigTip": "Vyplňte prosím poskytnutou konfiguraci {key}",
|
||||||
"platformTip": "Vyberte prosím platformu pro SMS",
|
"platformTip": "Vyberte prosím platformu pro SMS",
|
||||||
"search": "Vyhledat telefonní číslo",
|
"search": "Vyhledat telefonní číslo",
|
||||||
|
"secretLabel": "Tajný klíč",
|
||||||
"sendFailed": "Odeslání se nezdařilo",
|
"sendFailed": "Odeslání se nezdařilo",
|
||||||
"sendSuccess": "Úspěšně odesláno",
|
"sendSuccess": "Úspěšně odesláno",
|
||||||
"settings": "Nastavení",
|
"settings": "Nastavení",
|
||||||
|
"signNameLabel": "Název podpisu",
|
||||||
"status": "Stav",
|
"status": "Stav",
|
||||||
"telephone": "Telefonní číslo",
|
"telephone": "Telefonní číslo",
|
||||||
"template": "Šablona SMS",
|
"template": "Šablona SMS",
|
||||||
"templateCode": "Kód šablony",
|
"templateCode": "Kód šablony",
|
||||||
|
"templateCodeLabel": "Kód šablony",
|
||||||
"templateParam": "Parametr šablony",
|
"templateParam": "Parametr šablony",
|
||||||
"templateTip": "Vyplňte prosím šablonu SMS, ponechte {code} uprostřed, jinak funkce SMS nebude fungovat",
|
"templateTip": "Vyplňte prosím šablonu SMS, ponechte {code} uprostřed, jinak funkce SMS nebude fungovat",
|
||||||
"testSms": "Odeslat testovací SMS",
|
"testSms": "Odeslat testovací SMS",
|
||||||
"testSmsContent": "Toto je testovací zpráva",
|
"testSmsContent": "Toto je testovací zpráva",
|
||||||
"testSmsPhone": "Zadejte telefonní číslo",
|
"testSmsPhone": "Zadejte telefonní číslo",
|
||||||
"testSmsTip": "Odeslat testovací SMS pro ověření vaší konfigurace",
|
"testSmsTip": "Odeslat testovací SMS pro ověření vaší konfigurace",
|
||||||
"updateSuccess": "Aktualizace úspěšná"
|
"updateSuccess": "Aktualizace úspěšná",
|
||||||
|
"whitelistAreaCode": "Kód oblasti v bílém seznamu",
|
||||||
|
"whitelistAreaCodeTip": "Zadejte kódy oblastí v bílém seznamu, např. 1, 852, 886, 888",
|
||||||
|
"whitelistValidation": "Ověření bílého seznamu",
|
||||||
|
"whitelistValidationTip": "Pokud je povoleno, mohou SMS odesílat pouze kódy oblastí v bílém seznamu"
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,11 +1,13 @@
|
|||||||
{
|
{
|
||||||
"SmsList": "SMS-Protokollliste",
|
"SmsList": "SMS-Protokollliste",
|
||||||
|
"accessLabel": "Zugriff",
|
||||||
"applyPlatform": "Plattform anwenden",
|
"applyPlatform": "Plattform anwenden",
|
||||||
"areaCode": "Vorwahl",
|
"areaCode": "Vorwahl",
|
||||||
"content": "Inhalt",
|
"content": "Inhalt",
|
||||||
"createdAt": "Sendezeit",
|
"createdAt": "Sendezeit",
|
||||||
"enable": "Aktivieren",
|
"enable": "Aktivieren",
|
||||||
"enableTip": "Nach der Aktivierung werden die Funktionen zur Registrierung, Anmeldung, Bindung und Entbindung von Mobiltelefonen aktiviert",
|
"enableTip": "Nach der Aktivierung werden die Funktionen zur Registrierung, Anmeldung, Bindung und Entbindung von Mobiltelefonen aktiviert",
|
||||||
|
"endpointLabel": "Endpunkt",
|
||||||
"expireTime": "Ablaufzeit",
|
"expireTime": "Ablaufzeit",
|
||||||
"expireTimeTip": "Gültigkeitsdauer des SMS-Bestätigungscodes (Sekunden)",
|
"expireTimeTip": "Gültigkeitsdauer des SMS-Bestätigungscodes (Sekunden)",
|
||||||
"interval": "Intervall",
|
"interval": "Intervall",
|
||||||
@ -24,18 +26,25 @@
|
|||||||
"platformConfigTip": "Bitte füllen Sie die bereitgestellte {key}-Konfiguration aus",
|
"platformConfigTip": "Bitte füllen Sie die bereitgestellte {key}-Konfiguration aus",
|
||||||
"platformTip": "Bitte wählen Sie die SMS-Plattform aus",
|
"platformTip": "Bitte wählen Sie die SMS-Plattform aus",
|
||||||
"search": "Telefonnummer suchen",
|
"search": "Telefonnummer suchen",
|
||||||
|
"secretLabel": "Geheimnis",
|
||||||
"sendFailed": "Senden fehlgeschlagen",
|
"sendFailed": "Senden fehlgeschlagen",
|
||||||
"sendSuccess": "Erfolgreich gesendet",
|
"sendSuccess": "Erfolgreich gesendet",
|
||||||
"settings": "Einstellungen",
|
"settings": "Einstellungen",
|
||||||
|
"signNameLabel": "Signaturname",
|
||||||
"status": "Status",
|
"status": "Status",
|
||||||
"telephone": "Telefonnummer",
|
"telephone": "Telefonnummer",
|
||||||
"template": "SMS-Vorlage",
|
"template": "SMS-Vorlage",
|
||||||
"templateCode": "Vorlagen-Code",
|
"templateCode": "Vorlagen-Code",
|
||||||
|
"templateCodeLabel": "Vorlagen-Code",
|
||||||
"templateParam": "Vorlagenparameter",
|
"templateParam": "Vorlagenparameter",
|
||||||
"templateTip": "Bitte füllen Sie die SMS-Vorlage aus und lassen Sie {code} in der Mitte stehen, da sonst die SMS-Funktion nicht funktioniert.",
|
"templateTip": "Bitte füllen Sie die SMS-Vorlage aus und lassen Sie {code} in der Mitte stehen, da sonst die SMS-Funktion nicht funktioniert.",
|
||||||
"testSms": "Test-SMS senden",
|
"testSms": "Test-SMS senden",
|
||||||
"testSmsContent": "Dies ist eine Testnachricht",
|
"testSmsContent": "Dies ist eine Testnachricht",
|
||||||
"testSmsPhone": "Telefonnummer eingeben",
|
"testSmsPhone": "Telefonnummer eingeben",
|
||||||
"testSmsTip": "Senden Sie eine Test-SMS, um Ihre Konfiguration zu überprüfen",
|
"testSmsTip": "Senden Sie eine Test-SMS, um Ihre Konfiguration zu überprüfen",
|
||||||
"updateSuccess": "Aktualisierung erfolgreich"
|
"updateSuccess": "Aktualisierung erfolgreich",
|
||||||
|
"whitelistAreaCode": "Whitelist Bereichscode",
|
||||||
|
"whitelistAreaCodeTip": "Bitte geben Sie die Whitelist Bereichscodes ein, z.B. 1, 852, 886, 888",
|
||||||
|
"whitelistValidation": "Whitelist Überprüfung",
|
||||||
|
"whitelistValidationTip": "Wenn aktiviert, können nur Bereichscodes in der Whitelist SMS senden"
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,11 +1,13 @@
|
|||||||
{
|
{
|
||||||
"SmsList": "SMS Log List",
|
"SmsList": "SMS Log List",
|
||||||
|
"accessLabel": "Access",
|
||||||
"applyPlatform": "Apply Platform",
|
"applyPlatform": "Apply Platform",
|
||||||
"areaCode": "Area Code",
|
"areaCode": "Area Code",
|
||||||
"content": "Content",
|
"content": "Content",
|
||||||
"createdAt": "Send Time",
|
"createdAt": "Send Time",
|
||||||
"enable": "Enable",
|
"enable": "Enable",
|
||||||
"enableTip": "After enabling, mobile phone registration, login, binding, and unbinding functions will be enabled",
|
"enableTip": "After enabling, mobile phone registration, login, binding, and unbinding functions will be enabled",
|
||||||
|
"endpointLabel": "Endpoint",
|
||||||
"expireTime": "Expire Time",
|
"expireTime": "Expire Time",
|
||||||
"expireTimeTip": "SMS verification code validity period (seconds)",
|
"expireTimeTip": "SMS verification code validity period (seconds)",
|
||||||
"interval": "Interval",
|
"interval": "Interval",
|
||||||
@ -24,18 +26,25 @@
|
|||||||
"platformConfigTip": "Please fill in the provided {key} configuration",
|
"platformConfigTip": "Please fill in the provided {key} configuration",
|
||||||
"platformTip": "Please select SMS platform",
|
"platformTip": "Please select SMS platform",
|
||||||
"search": "Search phone number",
|
"search": "Search phone number",
|
||||||
|
"secretLabel": "Secret",
|
||||||
"sendFailed": "Send Failed",
|
"sendFailed": "Send Failed",
|
||||||
"sendSuccess": "Send Success",
|
"sendSuccess": "Send Success",
|
||||||
"settings": "Settings",
|
"settings": "Settings",
|
||||||
|
"signNameLabel": "Sign Name",
|
||||||
"status": "Status",
|
"status": "Status",
|
||||||
"telephone": "Phone Number",
|
"telephone": "Phone Number",
|
||||||
"template": "SMS Template",
|
"template": "SMS Template",
|
||||||
"templateCode": "Template Code",
|
"templateCode": "Template Code",
|
||||||
|
"templateCodeLabel": "Template Code",
|
||||||
"templateParam": "Template Parameter",
|
"templateParam": "Template Parameter",
|
||||||
"templateTip": "Please fill in the SMS template, keep {code} in the middle, otherwise SMS function will not work",
|
"templateTip": "Please fill in the SMS template, keep {code} in the middle, otherwise SMS function will not work",
|
||||||
"testSms": "Send Test SMS",
|
"testSms": "Send Test SMS",
|
||||||
"testSmsContent": "This is a test message",
|
"testSmsContent": "This is a test message",
|
||||||
"testSmsPhone": "Enter phone number",
|
"testSmsPhone": "Enter phone number",
|
||||||
"testSmsTip": "Send a test SMS to verify your configuration",
|
"testSmsTip": "Send a test SMS to verify your configuration",
|
||||||
"updateSuccess": "Update Success"
|
"updateSuccess": "Update Success",
|
||||||
|
"whitelistAreaCode": "Whitelist Area Code",
|
||||||
|
"whitelistAreaCodeTip": "Please enter whitelist area codes, e.g., 1, 852, 886, 888",
|
||||||
|
"whitelistValidation": "Whitelist Verification",
|
||||||
|
"whitelistValidationTip": "When enabled, only area codes in the whitelist can send SMS"
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,11 +1,13 @@
|
|||||||
{
|
{
|
||||||
"SmsList": "Lista de Registro de SMS",
|
"SmsList": "Lista de Registro de SMS",
|
||||||
|
"accessLabel": "Acceso",
|
||||||
"applyPlatform": "Aplicar Plataforma",
|
"applyPlatform": "Aplicar Plataforma",
|
||||||
"areaCode": "Código de Área",
|
"areaCode": "Código de Área",
|
||||||
"content": "Contenido",
|
"content": "Contenido",
|
||||||
"createdAt": "Hora de envío",
|
"createdAt": "Hora de envío",
|
||||||
"enable": "Habilitar",
|
"enable": "Habilitar",
|
||||||
"enableTip": "Después de habilitar, se activarán las funciones de registro, inicio de sesión, vinculación y desvinculación del teléfono móvil",
|
"enableTip": "Después de habilitar, se activarán las funciones de registro, inicio de sesión, vinculación y desvinculación del teléfono móvil",
|
||||||
|
"endpointLabel": "Punto final",
|
||||||
"expireTime": "Tiempo de Expiración",
|
"expireTime": "Tiempo de Expiración",
|
||||||
"expireTimeTip": "Periodo de validez del código de verificación por SMS (segundos)",
|
"expireTimeTip": "Periodo de validez del código de verificación por SMS (segundos)",
|
||||||
"interval": "Intervalo",
|
"interval": "Intervalo",
|
||||||
@ -24,18 +26,25 @@
|
|||||||
"platformConfigTip": "Por favor, complete la configuración proporcionada de {key}",
|
"platformConfigTip": "Por favor, complete la configuración proporcionada de {key}",
|
||||||
"platformTip": "Por favor, seleccione la plataforma de SMS",
|
"platformTip": "Por favor, seleccione la plataforma de SMS",
|
||||||
"search": "Buscar número de teléfono",
|
"search": "Buscar número de teléfono",
|
||||||
|
"secretLabel": "Secreto",
|
||||||
"sendFailed": "Envío fallido",
|
"sendFailed": "Envío fallido",
|
||||||
"sendSuccess": "Envío exitoso",
|
"sendSuccess": "Envío exitoso",
|
||||||
"settings": "Configuración",
|
"settings": "Configuración",
|
||||||
|
"signNameLabel": "Nombre de firma",
|
||||||
"status": "Estado",
|
"status": "Estado",
|
||||||
"telephone": "Número de Teléfono",
|
"telephone": "Número de Teléfono",
|
||||||
"template": "Plantilla de SMS",
|
"template": "Plantilla de SMS",
|
||||||
"templateCode": "Código de Plantilla",
|
"templateCode": "Código de Plantilla",
|
||||||
|
"templateCodeLabel": "Código de plantilla",
|
||||||
"templateParam": "Parámetro de Plantilla",
|
"templateParam": "Parámetro de Plantilla",
|
||||||
"templateTip": "Por favor, complete la plantilla de SMS, mantenga {code} en el medio, de lo contrario, la función de SMS no funcionará",
|
"templateTip": "Por favor, complete la plantilla de SMS, mantenga {code} en el medio, de lo contrario, la función de SMS no funcionará",
|
||||||
"testSms": "Enviar SMS de prueba",
|
"testSms": "Enviar SMS de prueba",
|
||||||
"testSmsContent": "Este es un mensaje de prueba",
|
"testSmsContent": "Este es un mensaje de prueba",
|
||||||
"testSmsPhone": "Ingrese número de teléfono",
|
"testSmsPhone": "Ingrese número de teléfono",
|
||||||
"testSmsTip": "Envía un SMS de prueba para verificar tu configuración",
|
"testSmsTip": "Envía un SMS de prueba para verificar tu configuración",
|
||||||
"updateSuccess": "Actualización Exitosa"
|
"updateSuccess": "Actualización Exitosa",
|
||||||
|
"whitelistAreaCode": "Código de área en lista blanca",
|
||||||
|
"whitelistAreaCodeTip": "Por favor, introduce los códigos de área en la lista blanca, por ejemplo, 1, 852, 886, 888",
|
||||||
|
"whitelistValidation": "Verificación de lista blanca",
|
||||||
|
"whitelistValidationTip": "Cuando está habilitado, solo los códigos de área en la lista blanca pueden enviar SMS"
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,11 +1,13 @@
|
|||||||
{
|
{
|
||||||
"SmsList": "Lista de Registro de SMS",
|
"SmsList": "Lista de Registro de SMS",
|
||||||
|
"accessLabel": "Acceso",
|
||||||
"applyPlatform": "Aplicar Plataforma",
|
"applyPlatform": "Aplicar Plataforma",
|
||||||
"areaCode": "Código de Área",
|
"areaCode": "Código de Área",
|
||||||
"content": "Contenido",
|
"content": "Contenido",
|
||||||
"createdAt": "Hora de Envío",
|
"createdAt": "Hora de Envío",
|
||||||
"enable": "Habilitar",
|
"enable": "Habilitar",
|
||||||
"enableTip": "Después de habilitar, se activarán las funciones de registro, inicio de sesión, vinculación y desvinculación del teléfono móvil",
|
"enableTip": "Después de habilitar, se activarán las funciones de registro, inicio de sesión, vinculación y desvinculación del teléfono móvil",
|
||||||
|
"endpointLabel": "Punto final",
|
||||||
"expireTime": "Tiempo de Expiración",
|
"expireTime": "Tiempo de Expiración",
|
||||||
"expireTimeTip": "Periodo de validez del código de verificación por SMS (segundos)",
|
"expireTimeTip": "Periodo de validez del código de verificación por SMS (segundos)",
|
||||||
"interval": "Intervalo",
|
"interval": "Intervalo",
|
||||||
@ -24,18 +26,25 @@
|
|||||||
"platformConfigTip": "Por favor, complete la configuración proporcionada de {key}",
|
"platformConfigTip": "Por favor, complete la configuración proporcionada de {key}",
|
||||||
"platformTip": "Por favor, seleccione la plataforma de SMS",
|
"platformTip": "Por favor, seleccione la plataforma de SMS",
|
||||||
"search": "Buscar número de teléfono",
|
"search": "Buscar número de teléfono",
|
||||||
|
"secretLabel": "Secreto",
|
||||||
"sendFailed": "Envío Fallido",
|
"sendFailed": "Envío Fallido",
|
||||||
"sendSuccess": "Envío Exitoso",
|
"sendSuccess": "Envío Exitoso",
|
||||||
"settings": "Configuración",
|
"settings": "Configuración",
|
||||||
|
"signNameLabel": "Nombre de firma",
|
||||||
"status": "Estado",
|
"status": "Estado",
|
||||||
"telephone": "Número de Teléfono",
|
"telephone": "Número de Teléfono",
|
||||||
"template": "Plantilla de SMS",
|
"template": "Plantilla de SMS",
|
||||||
"templateCode": "Código de Plantilla",
|
"templateCode": "Código de Plantilla",
|
||||||
|
"templateCodeLabel": "Código de plantilla",
|
||||||
"templateParam": "Parámetro de Plantilla",
|
"templateParam": "Parámetro de Plantilla",
|
||||||
"templateTip": "Por favor, complete la plantilla de SMS, mantenga {code} en el medio, de lo contrario, la función de SMS no funcionará",
|
"templateTip": "Por favor, complete la plantilla de SMS, mantenga {code} en el medio, de lo contrario, la función de SMS no funcionará",
|
||||||
"testSms": "Enviar SMS de Prueba",
|
"testSms": "Enviar SMS de Prueba",
|
||||||
"testSmsContent": "Este es un mensaje de prueba",
|
"testSmsContent": "Este es un mensaje de prueba",
|
||||||
"testSmsPhone": "Ingrese número de teléfono",
|
"testSmsPhone": "Ingrese número de teléfono",
|
||||||
"testSmsTip": "Envía un SMS de prueba para verificar tu configuración",
|
"testSmsTip": "Envía un SMS de prueba para verificar tu configuración",
|
||||||
"updateSuccess": "Actualización Exitosa"
|
"updateSuccess": "Actualización Exitosa",
|
||||||
|
"whitelistAreaCode": "Código de área en lista blanca",
|
||||||
|
"whitelistAreaCodeTip": "Por favor ingrese los códigos de área en la lista blanca, ej., 1, 852, 886, 888",
|
||||||
|
"whitelistValidation": "Verificación de lista blanca",
|
||||||
|
"whitelistValidationTip": "Cuando está habilitado, solo los códigos de área en la lista blanca pueden enviar SMS"
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,11 +1,13 @@
|
|||||||
{
|
{
|
||||||
"SmsList": "لیست گزارش پیامک",
|
"SmsList": "لیست گزارش پیامک",
|
||||||
|
"accessLabel": "دسترسی",
|
||||||
"applyPlatform": "اعمال پلتفرم",
|
"applyPlatform": "اعمال پلتفرم",
|
||||||
"areaCode": "کد منطقه",
|
"areaCode": "کد منطقه",
|
||||||
"content": "محتوا",
|
"content": "محتوا",
|
||||||
"createdAt": "زمان ارسال",
|
"createdAt": "زمان ارسال",
|
||||||
"enable": "فعال کردن",
|
"enable": "فعال کردن",
|
||||||
"enableTip": "پس از فعالسازی، عملکردهای ثبتنام، ورود، اتصال و قطع اتصال تلفن همراه فعال خواهند شد",
|
"enableTip": "پس از فعالسازی، عملکردهای ثبتنام، ورود، اتصال و قطع اتصال تلفن همراه فعال خواهند شد",
|
||||||
|
"endpointLabel": "نقطه پایانی",
|
||||||
"expireTime": "زمان انقضا",
|
"expireTime": "زمان انقضا",
|
||||||
"expireTimeTip": "مدت اعتبار کد تأیید پیامکی (ثانیه)",
|
"expireTimeTip": "مدت اعتبار کد تأیید پیامکی (ثانیه)",
|
||||||
"interval": "فاصله زمانی",
|
"interval": "فاصله زمانی",
|
||||||
@ -24,18 +26,25 @@
|
|||||||
"platformConfigTip": "لطفاً پیکربندی {key} ارائه شده را پر کنید",
|
"platformConfigTip": "لطفاً پیکربندی {key} ارائه شده را پر کنید",
|
||||||
"platformTip": "لطفاً پلتفرم پیامک را انتخاب کنید",
|
"platformTip": "لطفاً پلتفرم پیامک را انتخاب کنید",
|
||||||
"search": "جستجوی شماره تلفن",
|
"search": "جستجوی شماره تلفن",
|
||||||
|
"secretLabel": "رمز",
|
||||||
"sendFailed": "ارسال ناموفق بود",
|
"sendFailed": "ارسال ناموفق بود",
|
||||||
"sendSuccess": "ارسال موفقیتآمیز",
|
"sendSuccess": "ارسال موفقیتآمیز",
|
||||||
"settings": "تنظیمات",
|
"settings": "تنظیمات",
|
||||||
|
"signNameLabel": "نام امضا",
|
||||||
"status": "وضعیت",
|
"status": "وضعیت",
|
||||||
"telephone": "شماره تلفن",
|
"telephone": "شماره تلفن",
|
||||||
"template": "قالب پیامک",
|
"template": "قالب پیامک",
|
||||||
"templateCode": "کد الگو",
|
"templateCode": "کد الگو",
|
||||||
|
"templateCodeLabel": "کد الگو",
|
||||||
"templateParam": "پارامتر الگو",
|
"templateParam": "پارامتر الگو",
|
||||||
"templateTip": "لطفاً قالب پیامک را پر کنید، {code} را در وسط نگه دارید، در غیر این صورت عملکرد پیامک کار نخواهد کرد",
|
"templateTip": "لطفاً قالب پیامک را پر کنید، {code} را در وسط نگه دارید، در غیر این صورت عملکرد پیامک کار نخواهد کرد",
|
||||||
"testSms": "ارسال پیامک آزمایشی",
|
"testSms": "ارسال پیامک آزمایشی",
|
||||||
"testSmsContent": "این یک پیام آزمایشی است",
|
"testSmsContent": "این یک پیام آزمایشی است",
|
||||||
"testSmsPhone": "شماره تلفن را وارد کنید",
|
"testSmsPhone": "شماره تلفن را وارد کنید",
|
||||||
"testSmsTip": "ارسال یک پیامک آزمایشی برای تأیید تنظیمات شما",
|
"testSmsTip": "ارسال یک پیامک آزمایشی برای تأیید تنظیمات شما",
|
||||||
"updateSuccess": "بهروزرسانی با موفقیت انجام شد"
|
"updateSuccess": "بهروزرسانی با موفقیت انجام شد",
|
||||||
|
"whitelistAreaCode": "کد منطقه لیست سفید",
|
||||||
|
"whitelistAreaCodeTip": "لطفاً کدهای منطقه لیست سفید را وارد کنید، مثلاً 1، 852، 886، 888",
|
||||||
|
"whitelistValidation": "تأیید لیست سفید",
|
||||||
|
"whitelistValidationTip": "زمانی که فعال باشد، فقط کدهای منطقه در لیست سفید میتوانند پیامک ارسال کنند"
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,11 +1,13 @@
|
|||||||
{
|
{
|
||||||
"SmsList": "SMS-luettelolista",
|
"SmsList": "SMS-luettelolista",
|
||||||
|
"accessLabel": "Pääsy",
|
||||||
"applyPlatform": "Hae alustaa",
|
"applyPlatform": "Hae alustaa",
|
||||||
"areaCode": "Alueen koodi",
|
"areaCode": "Alueen koodi",
|
||||||
"content": "Sisältö",
|
"content": "Sisältö",
|
||||||
"createdAt": "Lähetysaika",
|
"createdAt": "Lähetysaika",
|
||||||
"enable": "Ota käyttöön",
|
"enable": "Ota käyttöön",
|
||||||
"enableTip": "Kun otat tämän käyttöön, matkapuhelimen rekisteröinti-, kirjautumis-, sitomis- ja purkutoiminnot otetaan käyttöön",
|
"enableTip": "Kun otat tämän käyttöön, matkapuhelimen rekisteröinti-, kirjautumis-, sitomis- ja purkutoiminnot otetaan käyttöön",
|
||||||
|
"endpointLabel": "Päätepiste",
|
||||||
"expireTime": "Vanhentumisaika",
|
"expireTime": "Vanhentumisaika",
|
||||||
"expireTimeTip": "Tekstiviestivarmennuskoodin voimassaoloaika (sekunteina)",
|
"expireTimeTip": "Tekstiviestivarmennuskoodin voimassaoloaika (sekunteina)",
|
||||||
"interval": "Aikaväli",
|
"interval": "Aikaväli",
|
||||||
@ -24,18 +26,25 @@
|
|||||||
"platformConfigTip": "Täytä annettu {key} -määritys",
|
"platformConfigTip": "Täytä annettu {key} -määritys",
|
||||||
"platformTip": "Valitse SMS-alusta",
|
"platformTip": "Valitse SMS-alusta",
|
||||||
"search": "Hae puhelinnumeroa",
|
"search": "Hae puhelinnumeroa",
|
||||||
|
"secretLabel": "Salaisuus",
|
||||||
"sendFailed": "Lähetys epäonnistui",
|
"sendFailed": "Lähetys epäonnistui",
|
||||||
"sendSuccess": "Lähetys onnistui",
|
"sendSuccess": "Lähetys onnistui",
|
||||||
"settings": "Asetukset",
|
"settings": "Asetukset",
|
||||||
|
"signNameLabel": "Allekirjoitusnimi",
|
||||||
"status": "Tila",
|
"status": "Tila",
|
||||||
"telephone": "Puhelinnumero",
|
"telephone": "Puhelinnumero",
|
||||||
"template": "SMS-malli",
|
"template": "SMS-malli",
|
||||||
"templateCode": "Mallikoodi",
|
"templateCode": "Mallikoodi",
|
||||||
|
"templateCodeLabel": "Mallikoodi",
|
||||||
"templateParam": "Malliparametri",
|
"templateParam": "Malliparametri",
|
||||||
"templateTip": "Täytä SMS-malli, pidä {code} keskellä, muuten SMS-toiminto ei toimi",
|
"templateTip": "Täytä SMS-malli, pidä {code} keskellä, muuten SMS-toiminto ei toimi",
|
||||||
"testSms": "Lähetä testiviesti",
|
"testSms": "Lähetä testiviesti",
|
||||||
"testSmsContent": "Tämä on testiviesti",
|
"testSmsContent": "Tämä on testiviesti",
|
||||||
"testSmsPhone": "Syötä puhelinnumero",
|
"testSmsPhone": "Syötä puhelinnumero",
|
||||||
"testSmsTip": "Lähetä testiviesti varmistaaksesi asetuksesi",
|
"testSmsTip": "Lähetä testiviesti varmistaaksesi asetuksesi",
|
||||||
"updateSuccess": "Päivitys onnistui"
|
"updateSuccess": "Päivitys onnistui",
|
||||||
|
"whitelistAreaCode": "Valkoisen listan aluekoodi",
|
||||||
|
"whitelistAreaCodeTip": "Syötä valkoisen listan aluekoodit, esim. 1, 852, 886, 888",
|
||||||
|
"whitelistValidation": "Valkoisen listan vahvistus",
|
||||||
|
"whitelistValidationTip": "Kun tämä on käytössä, vain valkoisen listan aluekoodit voivat lähettää SMS-viestejä"
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,11 +1,13 @@
|
|||||||
{
|
{
|
||||||
"SmsList": "Liste des journaux SMS",
|
"SmsList": "Liste des journaux SMS",
|
||||||
|
"accessLabel": "Accès",
|
||||||
"applyPlatform": "Plateforme d'application",
|
"applyPlatform": "Plateforme d'application",
|
||||||
"areaCode": "Indicatif régional",
|
"areaCode": "Indicatif régional",
|
||||||
"content": "Contenu",
|
"content": "Contenu",
|
||||||
"createdAt": "Heure d'envoi",
|
"createdAt": "Heure d'envoi",
|
||||||
"enable": "Activer",
|
"enable": "Activer",
|
||||||
"enableTip": "Après activation, les fonctions d'enregistrement, de connexion, de liaison et de déliaison par téléphone mobile seront activées",
|
"enableTip": "Après activation, les fonctions d'enregistrement, de connexion, de liaison et de déliaison par téléphone mobile seront activées",
|
||||||
|
"endpointLabel": "Point de terminaison",
|
||||||
"expireTime": "Date d'expiration",
|
"expireTime": "Date d'expiration",
|
||||||
"expireTimeTip": "Période de validité du code de vérification par SMS (secondes)",
|
"expireTimeTip": "Période de validité du code de vérification par SMS (secondes)",
|
||||||
"interval": "Intervalle",
|
"interval": "Intervalle",
|
||||||
@ -24,18 +26,25 @@
|
|||||||
"platformConfigTip": "Veuillez remplir la configuration {key} fournie",
|
"platformConfigTip": "Veuillez remplir la configuration {key} fournie",
|
||||||
"platformTip": "Veuillez sélectionner la plateforme SMS",
|
"platformTip": "Veuillez sélectionner la plateforme SMS",
|
||||||
"search": "Rechercher un numéro de téléphone",
|
"search": "Rechercher un numéro de téléphone",
|
||||||
|
"secretLabel": "Secret",
|
||||||
"sendFailed": "Échec de l'envoi",
|
"sendFailed": "Échec de l'envoi",
|
||||||
"sendSuccess": "Envoi réussi",
|
"sendSuccess": "Envoi réussi",
|
||||||
"settings": "Paramètres",
|
"settings": "Paramètres",
|
||||||
|
"signNameLabel": "Nom de l'expéditeur",
|
||||||
"status": "Statut",
|
"status": "Statut",
|
||||||
"telephone": "Numéro de téléphone",
|
"telephone": "Numéro de téléphone",
|
||||||
"template": "Modèle SMS",
|
"template": "Modèle SMS",
|
||||||
"templateCode": "Code du modèle",
|
"templateCode": "Code du modèle",
|
||||||
|
"templateCodeLabel": "Code de modèle",
|
||||||
"templateParam": "Paramètre de Modèle",
|
"templateParam": "Paramètre de Modèle",
|
||||||
"templateTip": "Veuillez remplir le modèle de SMS, gardez {code} au milieu, sinon la fonction SMS ne fonctionnera pas",
|
"templateTip": "Veuillez remplir le modèle de SMS, gardez {code} au milieu, sinon la fonction SMS ne fonctionnera pas",
|
||||||
"testSms": "Envoyer un SMS de test",
|
"testSms": "Envoyer un SMS de test",
|
||||||
"testSmsContent": "Ceci est un message de test",
|
"testSmsContent": "Ceci est un message de test",
|
||||||
"testSmsPhone": "Entrez le numéro de téléphone",
|
"testSmsPhone": "Entrez le numéro de téléphone",
|
||||||
"testSmsTip": "Envoyez un SMS de test pour vérifier votre configuration",
|
"testSmsTip": "Envoyez un SMS de test pour vérifier votre configuration",
|
||||||
"updateSuccess": "Mise à jour réussie"
|
"updateSuccess": "Mise à jour réussie",
|
||||||
|
"whitelistAreaCode": "Code de zone sur liste blanche",
|
||||||
|
"whitelistAreaCodeTip": "Veuillez entrer les codes de zone sur liste blanche, par exemple, 1, 852, 886, 888",
|
||||||
|
"whitelistValidation": "Vérification de la liste blanche",
|
||||||
|
"whitelistValidationTip": "Lorsqu'elle est activée, seuls les codes de zone figurant sur la liste blanche peuvent envoyer des SMS"
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,11 +1,13 @@
|
|||||||
{
|
{
|
||||||
"SmsList": "एसएमएस लॉग सूची",
|
"SmsList": "एसएमएस लॉग सूची",
|
||||||
|
"accessLabel": "पहुँच",
|
||||||
"applyPlatform": "प्लेटफ़ॉर्म लागू करें",
|
"applyPlatform": "प्लेटफ़ॉर्म लागू करें",
|
||||||
"areaCode": "क्षेत्र कोड",
|
"areaCode": "क्षेत्र कोड",
|
||||||
"content": "सामग्री",
|
"content": "सामग्री",
|
||||||
"createdAt": "भेजने का समय",
|
"createdAt": "भेजने का समय",
|
||||||
"enable": "सक्षम करें",
|
"enable": "सक्षम करें",
|
||||||
"enableTip": "सक्षम करने के बाद, मोबाइल फोन पंजीकरण, लॉगिन, बाइंडिंग, और अनबाइंडिंग कार्यक्षमताएँ सक्षम हो जाएँगी",
|
"enableTip": "सक्षम करने के बाद, मोबाइल फोन पंजीकरण, लॉगिन, बाइंडिंग, और अनबाइंडिंग कार्यक्षमताएँ सक्षम हो जाएँगी",
|
||||||
|
"endpointLabel": "अंतिम बिंदु",
|
||||||
"expireTime": "समाप्ति समय",
|
"expireTime": "समाप्ति समय",
|
||||||
"expireTimeTip": "एसएमएस सत्यापन कोड की वैधता अवधि (सेकंड)",
|
"expireTimeTip": "एसएमएस सत्यापन कोड की वैधता अवधि (सेकंड)",
|
||||||
"interval": "अंतराल",
|
"interval": "अंतराल",
|
||||||
@ -24,18 +26,25 @@
|
|||||||
"platformConfigTip": "कृपया दिए गए {key} कॉन्फ़िगरेशन को भरें",
|
"platformConfigTip": "कृपया दिए गए {key} कॉन्फ़िगरेशन को भरें",
|
||||||
"platformTip": "कृपया एसएमएस प्लेटफ़ॉर्म चुनें",
|
"platformTip": "कृपया एसएमएस प्लेटफ़ॉर्म चुनें",
|
||||||
"search": "फ़ोन नंबर खोजें",
|
"search": "फ़ोन नंबर खोजें",
|
||||||
|
"secretLabel": "गुप्त",
|
||||||
"sendFailed": "भेजना विफल",
|
"sendFailed": "भेजना विफल",
|
||||||
"sendSuccess": "सफलतापूर्वक भेजा गया",
|
"sendSuccess": "सफलतापूर्वक भेजा गया",
|
||||||
"settings": "सेटिंग्स",
|
"settings": "सेटिंग्स",
|
||||||
|
"signNameLabel": "साइन नाम",
|
||||||
"status": "स्थिति",
|
"status": "स्थिति",
|
||||||
"telephone": "फ़ोन नंबर",
|
"telephone": "फ़ोन नंबर",
|
||||||
"template": "एसएमएस टेम्पलेट",
|
"template": "एसएमएस टेम्पलेट",
|
||||||
"templateCode": "टेम्पलेट कोड",
|
"templateCode": "टेम्पलेट कोड",
|
||||||
|
"templateCodeLabel": "टेम्पलेट कोड",
|
||||||
"templateParam": "टेम्पलेट पैरामीटर",
|
"templateParam": "टेम्पलेट पैरामीटर",
|
||||||
"templateTip": "कृपया एसएमएस टेम्पलेट भरें, {code} को बीच में रखें, अन्यथा एसएमएस कार्यक्षमता काम नहीं करेगी",
|
"templateTip": "कृपया एसएमएस टेम्पलेट भरें, {code} को बीच में रखें, अन्यथा एसएमएस कार्यक्षमता काम नहीं करेगी",
|
||||||
"testSms": "परीक्षण एसएमएस भेजें",
|
"testSms": "परीक्षण एसएमएस भेजें",
|
||||||
"testSmsContent": "यह एक परीक्षण संदेश है",
|
"testSmsContent": "यह एक परीक्षण संदेश है",
|
||||||
"testSmsPhone": "फ़ोन नंबर दर्ज करें",
|
"testSmsPhone": "फ़ोन नंबर दर्ज करें",
|
||||||
"testSmsTip": "अपनी कॉन्फ़िगरेशन की पुष्टि करने के लिए एक परीक्षण एसएमएस भेजें",
|
"testSmsTip": "अपनी कॉन्फ़िगरेशन की पुष्टि करने के लिए एक परीक्षण एसएमएस भेजें",
|
||||||
"updateSuccess": "अद्यतन सफल"
|
"updateSuccess": "अद्यतन सफल",
|
||||||
|
"whitelistAreaCode": "व्हाइटलिस्ट क्षेत्र कोड",
|
||||||
|
"whitelistAreaCodeTip": "कृपया व्हाइटलिस्ट क्षेत्र कोड दर्ज करें, जैसे, 1, 852, 886, 888",
|
||||||
|
"whitelistValidation": "व्हाइटलिस्ट सत्यापन",
|
||||||
|
"whitelistValidationTip": "जब सक्षम किया जाता है, केवल व्हाइटलिस्ट में क्षेत्र कोड एसएमएस भेज सकते हैं"
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,11 +1,13 @@
|
|||||||
{
|
{
|
||||||
"SmsList": "SMS naplólista",
|
"SmsList": "SMS naplólista",
|
||||||
|
"accessLabel": "Hozzáférés",
|
||||||
"applyPlatform": "Alkalmazási Platform",
|
"applyPlatform": "Alkalmazási Platform",
|
||||||
"areaCode": "Körzetszám",
|
"areaCode": "Körzetszám",
|
||||||
"content": "Tartalom",
|
"content": "Tartalom",
|
||||||
"createdAt": "Küldés ideje",
|
"createdAt": "Küldés ideje",
|
||||||
"enable": "Engedélyez",
|
"enable": "Engedélyez",
|
||||||
"enableTip": "A bekapcsolás után a mobiltelefon regisztráció, bejelentkezés, kötés és oldás funkciók elérhetővé válnak",
|
"enableTip": "A bekapcsolás után a mobiltelefon regisztráció, bejelentkezés, kötés és oldás funkciók elérhetővé válnak",
|
||||||
|
"endpointLabel": "Végpont",
|
||||||
"expireTime": "Lejárati idő",
|
"expireTime": "Lejárati idő",
|
||||||
"expireTimeTip": "Az SMS ellenőrző kód érvényességi ideje (másodpercben)",
|
"expireTimeTip": "Az SMS ellenőrző kód érvényességi ideje (másodpercben)",
|
||||||
"interval": "Intervallum",
|
"interval": "Intervallum",
|
||||||
@ -24,18 +26,25 @@
|
|||||||
"platformConfigTip": "Kérjük, töltse ki a megadott {key} konfigurációt",
|
"platformConfigTip": "Kérjük, töltse ki a megadott {key} konfigurációt",
|
||||||
"platformTip": "Kérjük, válassza ki az SMS platformot",
|
"platformTip": "Kérjük, válassza ki az SMS platformot",
|
||||||
"search": "Telefonszám keresése",
|
"search": "Telefonszám keresése",
|
||||||
|
"secretLabel": "Titok",
|
||||||
"sendFailed": "Küldés sikertelen",
|
"sendFailed": "Küldés sikertelen",
|
||||||
"sendSuccess": "Sikeres küldés",
|
"sendSuccess": "Sikeres küldés",
|
||||||
"settings": "Beállítások",
|
"settings": "Beállítások",
|
||||||
|
"signNameLabel": "Aláírás Neve",
|
||||||
"status": "Állapot",
|
"status": "Állapot",
|
||||||
"telephone": "Telefonszám",
|
"telephone": "Telefonszám",
|
||||||
"template": "SMS sablon",
|
"template": "SMS sablon",
|
||||||
"templateCode": "Sablon kód",
|
"templateCode": "Sablon kód",
|
||||||
|
"templateCodeLabel": "Sablon Kód",
|
||||||
"templateParam": "Sablon Paraméter",
|
"templateParam": "Sablon Paraméter",
|
||||||
"templateTip": "Kérjük, töltse ki az SMS sablont, tartsa meg a {code} elemet középen, különben az SMS funkció nem fog működni",
|
"templateTip": "Kérjük, töltse ki az SMS sablont, tartsa meg a {code} elemet középen, különben az SMS funkció nem fog működni",
|
||||||
"testSms": "Teszt SMS küldése",
|
"testSms": "Teszt SMS küldése",
|
||||||
"testSmsContent": "Ez egy tesztüzenet",
|
"testSmsContent": "Ez egy tesztüzenet",
|
||||||
"testSmsPhone": "Adja meg a telefonszámot",
|
"testSmsPhone": "Adja meg a telefonszámot",
|
||||||
"testSmsTip": "Küldjön egy teszt SMS-t a konfiguráció ellenőrzéséhez",
|
"testSmsTip": "Küldjön egy teszt SMS-t a konfiguráció ellenőrzéséhez",
|
||||||
"updateSuccess": "Sikeres frissítés"
|
"updateSuccess": "Sikeres frissítés",
|
||||||
|
"whitelistAreaCode": "Fehérlista Területi Kód",
|
||||||
|
"whitelistAreaCodeTip": "Kérjük, adja meg a fehérlista területi kódokat, pl. 1, 852, 886, 888",
|
||||||
|
"whitelistValidation": "Fehérlista Ellenőrzés",
|
||||||
|
"whitelistValidationTip": "Ha engedélyezve van, csak a fehérlistán szereplő területi kódok küldhetnek SMS-t"
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,11 +1,13 @@
|
|||||||
{
|
{
|
||||||
"SmsList": "SMSログリスト",
|
"SmsList": "SMSログリスト",
|
||||||
|
"accessLabel": "アクセス",
|
||||||
"applyPlatform": "プラットフォームを適用",
|
"applyPlatform": "プラットフォームを適用",
|
||||||
"areaCode": "市外局番",
|
"areaCode": "市外局番",
|
||||||
"content": "コンテンツ",
|
"content": "コンテンツ",
|
||||||
"createdAt": "送信時間",
|
"createdAt": "送信時間",
|
||||||
"enable": "有効にする",
|
"enable": "有効にする",
|
||||||
"enableTip": "有効にすると、携帯電話の登録、ログイン、バインド、アンバインド機能が有効になります",
|
"enableTip": "有効にすると、携帯電話の登録、ログイン、バインド、アンバインド機能が有効になります",
|
||||||
|
"endpointLabel": "エンドポイント",
|
||||||
"expireTime": "有効期限",
|
"expireTime": "有効期限",
|
||||||
"expireTimeTip": "SMS認証コードの有効期間(秒)",
|
"expireTimeTip": "SMS認証コードの有効期間(秒)",
|
||||||
"interval": "間隔",
|
"interval": "間隔",
|
||||||
@ -24,18 +26,25 @@
|
|||||||
"platformConfigTip": "指定された{key}の設定を入力してください",
|
"platformConfigTip": "指定された{key}の設定を入力してください",
|
||||||
"platformTip": "SMSプラットフォームを選択してください",
|
"platformTip": "SMSプラットフォームを選択してください",
|
||||||
"search": "電話番号を検索",
|
"search": "電話番号を検索",
|
||||||
|
"secretLabel": "シークレット",
|
||||||
"sendFailed": "送信に失敗しました",
|
"sendFailed": "送信に失敗しました",
|
||||||
"sendSuccess": "送信成功",
|
"sendSuccess": "送信成功",
|
||||||
"settings": "設定",
|
"settings": "設定",
|
||||||
|
"signNameLabel": "サイン名",
|
||||||
"status": "ステータス",
|
"status": "ステータス",
|
||||||
"telephone": "電話番号",
|
"telephone": "電話番号",
|
||||||
"template": "SMSテンプレート",
|
"template": "SMSテンプレート",
|
||||||
"templateCode": "テンプレートコード",
|
"templateCode": "テンプレートコード",
|
||||||
|
"templateCodeLabel": "テンプレートコード",
|
||||||
"templateParam": "テンプレートパラメータ",
|
"templateParam": "テンプレートパラメータ",
|
||||||
"templateTip": "SMSテンプレートに記入してください。{code}を中央に保持しないと、SMS機能が動作しません。",
|
"templateTip": "SMSテンプレートに記入してください。{code}を中央に保持しないと、SMS機能が動作しません。",
|
||||||
"testSms": "テストSMSを送信",
|
"testSms": "テストSMSを送信",
|
||||||
"testSmsContent": "これはテストメッセージです",
|
"testSmsContent": "これはテストメッセージです",
|
||||||
"testSmsPhone": "電話番号を入力してください",
|
"testSmsPhone": "電話番号を入力してください",
|
||||||
"testSmsTip": "設定を確認するためにテストSMSを送信する",
|
"testSmsTip": "設定を確認するためにテストSMSを送信する",
|
||||||
"updateSuccess": "更新が成功しました"
|
"updateSuccess": "更新が成功しました",
|
||||||
|
"whitelistAreaCode": "ホワイトリストエリアコード",
|
||||||
|
"whitelistAreaCodeTip": "ホワイトリストエリアコードを入力してください。例:1、852、886、888",
|
||||||
|
"whitelistValidation": "ホワイトリスト検証",
|
||||||
|
"whitelistValidationTip": "有効にすると、ホワイトリストにあるエリアコードのみがSMSを送信できます"
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,11 +1,13 @@
|
|||||||
{
|
{
|
||||||
"SmsList": "SMS 로그 목록",
|
"SmsList": "SMS 로그 목록",
|
||||||
|
"accessLabel": "접근",
|
||||||
"applyPlatform": "플랫폼 적용",
|
"applyPlatform": "플랫폼 적용",
|
||||||
"areaCode": "지역 코드",
|
"areaCode": "지역 코드",
|
||||||
"content": "콘텐츠",
|
"content": "콘텐츠",
|
||||||
"createdAt": "전송 시간",
|
"createdAt": "전송 시간",
|
||||||
"enable": "활성화",
|
"enable": "활성화",
|
||||||
"enableTip": "활성화 후, 휴대폰 등록, 로그인, 연결 및 연결 해제 기능이 활성화됩니다",
|
"enableTip": "활성화 후, 휴대폰 등록, 로그인, 연결 및 연결 해제 기능이 활성화됩니다",
|
||||||
|
"endpointLabel": "엔드포인트",
|
||||||
"expireTime": "만료 시간",
|
"expireTime": "만료 시간",
|
||||||
"expireTimeTip": "SMS 인증 코드 유효 기간 (초)",
|
"expireTimeTip": "SMS 인증 코드 유효 기간 (초)",
|
||||||
"interval": "간격",
|
"interval": "간격",
|
||||||
@ -24,18 +26,25 @@
|
|||||||
"platformConfigTip": "제공된 {key} 설정을 입력해 주세요",
|
"platformConfigTip": "제공된 {key} 설정을 입력해 주세요",
|
||||||
"platformTip": "SMS 플랫폼을 선택하세요",
|
"platformTip": "SMS 플랫폼을 선택하세요",
|
||||||
"search": "전화번호 검색",
|
"search": "전화번호 검색",
|
||||||
|
"secretLabel": "비밀",
|
||||||
"sendFailed": "전송 실패",
|
"sendFailed": "전송 실패",
|
||||||
"sendSuccess": "전송 성공",
|
"sendSuccess": "전송 성공",
|
||||||
"settings": "설정",
|
"settings": "설정",
|
||||||
|
"signNameLabel": "서명 이름",
|
||||||
"status": "상태",
|
"status": "상태",
|
||||||
"telephone": "전화번호",
|
"telephone": "전화번호",
|
||||||
"template": "SMS 템플릿",
|
"template": "SMS 템플릿",
|
||||||
"templateCode": "템플릿 코드",
|
"templateCode": "템플릿 코드",
|
||||||
|
"templateCodeLabel": "템플릿 코드",
|
||||||
"templateParam": "템플릿 매개변수",
|
"templateParam": "템플릿 매개변수",
|
||||||
"templateTip": "SMS 템플릿을 작성해 주세요. {code}를 중간에 유지해야 SMS 기능이 작동합니다.",
|
"templateTip": "SMS 템플릿을 작성해 주세요. {code}를 중간에 유지해야 SMS 기능이 작동합니다.",
|
||||||
"testSms": "테스트 SMS 보내기",
|
"testSms": "테스트 SMS 보내기",
|
||||||
"testSmsContent": "이것은 테스트 메시지입니다",
|
"testSmsContent": "이것은 테스트 메시지입니다",
|
||||||
"testSmsPhone": "전화번호를 입력하세요",
|
"testSmsPhone": "전화번호를 입력하세요",
|
||||||
"testSmsTip": "구성을 확인하기 위해 테스트 SMS를 전송하세요",
|
"testSmsTip": "구성을 확인하기 위해 테스트 SMS를 전송하세요",
|
||||||
"updateSuccess": "업데이트 성공"
|
"updateSuccess": "업데이트 성공",
|
||||||
|
"whitelistAreaCode": "허용된 지역 코드",
|
||||||
|
"whitelistAreaCodeTip": "허용된 지역 코드를 입력하세요. 예: 1, 852, 886, 888",
|
||||||
|
"whitelistValidation": "허용 목록 검증",
|
||||||
|
"whitelistValidationTip": "활성화되면, 허용 목록에 있는 지역 코드만 SMS를 보낼 수 있습니다."
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,11 +1,13 @@
|
|||||||
{
|
{
|
||||||
"SmsList": "SMS-loggliste",
|
"SmsList": "SMS-loggliste",
|
||||||
|
"accessLabel": "Tilgang",
|
||||||
"applyPlatform": "Søk Plattform",
|
"applyPlatform": "Søk Plattform",
|
||||||
"areaCode": "Retningsnummer",
|
"areaCode": "Retningsnummer",
|
||||||
"content": "Innhold",
|
"content": "Innhold",
|
||||||
"createdAt": "Sendetid",
|
"createdAt": "Sendetid",
|
||||||
"enable": "Aktiver",
|
"enable": "Aktiver",
|
||||||
"enableTip": "Etter aktivering vil funksjonene for registrering, innlogging, binding og frakobling av mobiltelefon bli aktivert",
|
"enableTip": "Etter aktivering vil funksjonene for registrering, innlogging, binding og frakobling av mobiltelefon bli aktivert",
|
||||||
|
"endpointLabel": "Endepunkt",
|
||||||
"expireTime": "Utløpstid",
|
"expireTime": "Utløpstid",
|
||||||
"expireTimeTip": "Gyldighetsperiode for SMS-bekreftelseskode (sekunder)",
|
"expireTimeTip": "Gyldighetsperiode for SMS-bekreftelseskode (sekunder)",
|
||||||
"interval": "Intervall",
|
"interval": "Intervall",
|
||||||
@ -24,18 +26,25 @@
|
|||||||
"platformConfigTip": "Vennligst fyll inn den oppgitte {key} konfigurasjonen",
|
"platformConfigTip": "Vennligst fyll inn den oppgitte {key} konfigurasjonen",
|
||||||
"platformTip": "Vennligst velg SMS-plattform",
|
"platformTip": "Vennligst velg SMS-plattform",
|
||||||
"search": "Søk telefonnummer",
|
"search": "Søk telefonnummer",
|
||||||
|
"secretLabel": "Hemmelighet",
|
||||||
"sendFailed": "Sending mislyktes",
|
"sendFailed": "Sending mislyktes",
|
||||||
"sendSuccess": "Sendt Vellykket",
|
"sendSuccess": "Sendt Vellykket",
|
||||||
"settings": "Innstillinger",
|
"settings": "Innstillinger",
|
||||||
|
"signNameLabel": "Signaturnavn",
|
||||||
"status": "Status",
|
"status": "Status",
|
||||||
"telephone": "Telefonnummer",
|
"telephone": "Telefonnummer",
|
||||||
"template": "SMS-mal",
|
"template": "SMS-mal",
|
||||||
"templateCode": "Malkode",
|
"templateCode": "Malkode",
|
||||||
|
"templateCodeLabel": "Malekode",
|
||||||
"templateParam": "Malparameter",
|
"templateParam": "Malparameter",
|
||||||
"templateTip": "Vennligst fyll ut SMS-malen, behold {code} i midten, ellers vil ikke SMS-funksjonen fungere",
|
"templateTip": "Vennligst fyll ut SMS-malen, behold {code} i midten, ellers vil ikke SMS-funksjonen fungere",
|
||||||
"testSms": "Send test-SMS",
|
"testSms": "Send test-SMS",
|
||||||
"testSmsContent": "Dette er en testmelding",
|
"testSmsContent": "Dette er en testmelding",
|
||||||
"testSmsPhone": "Skriv inn telefonnummer",
|
"testSmsPhone": "Skriv inn telefonnummer",
|
||||||
"testSmsTip": "Send en test-SMS for å verifisere konfigurasjonen din",
|
"testSmsTip": "Send en test-SMS for å verifisere konfigurasjonen din",
|
||||||
"updateSuccess": "Oppdatering Vellykket"
|
"updateSuccess": "Oppdatering Vellykket",
|
||||||
|
"whitelistAreaCode": "Hviteliste områdekode",
|
||||||
|
"whitelistAreaCodeTip": "Vennligst skriv inn hviteliste områdekoder, f.eks. 1, 852, 886, 888",
|
||||||
|
"whitelistValidation": "Hviteliste verifisering",
|
||||||
|
"whitelistValidationTip": "Når aktivert, kan kun områdekoder i hvitelisten sende SMS"
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,11 +1,13 @@
|
|||||||
{
|
{
|
||||||
"SmsList": "Lista dziennika SMS",
|
"SmsList": "Lista dziennika SMS",
|
||||||
|
"accessLabel": "Dostęp",
|
||||||
"applyPlatform": "Zastosuj Platformę",
|
"applyPlatform": "Zastosuj Platformę",
|
||||||
"areaCode": "Kod obszaru",
|
"areaCode": "Kod obszaru",
|
||||||
"content": "Treść",
|
"content": "Treść",
|
||||||
"createdAt": "Czas wysłania",
|
"createdAt": "Czas wysłania",
|
||||||
"enable": "Włącz",
|
"enable": "Włącz",
|
||||||
"enableTip": "Po włączeniu zostaną aktywowane funkcje rejestracji, logowania, wiązania i odwiązywania telefonu komórkowego",
|
"enableTip": "Po włączeniu zostaną aktywowane funkcje rejestracji, logowania, wiązania i odwiązywania telefonu komórkowego",
|
||||||
|
"endpointLabel": "Punkt końcowy",
|
||||||
"expireTime": "Czas wygaśnięcia",
|
"expireTime": "Czas wygaśnięcia",
|
||||||
"expireTimeTip": "Okres ważności kodu weryfikacyjnego SMS (sekundy)",
|
"expireTimeTip": "Okres ważności kodu weryfikacyjnego SMS (sekundy)",
|
||||||
"interval": "Interwał",
|
"interval": "Interwał",
|
||||||
@ -24,18 +26,25 @@
|
|||||||
"platformConfigTip": "Proszę wypełnić podaną konfigurację {key}",
|
"platformConfigTip": "Proszę wypełnić podaną konfigurację {key}",
|
||||||
"platformTip": "Proszę wybrać platformę SMS",
|
"platformTip": "Proszę wybrać platformę SMS",
|
||||||
"search": "Wyszukaj numer telefonu",
|
"search": "Wyszukaj numer telefonu",
|
||||||
|
"secretLabel": "Sekret",
|
||||||
"sendFailed": "Wysyłanie nie powiodło się",
|
"sendFailed": "Wysyłanie nie powiodło się",
|
||||||
"sendSuccess": "Wysłano pomyślnie",
|
"sendSuccess": "Wysłano pomyślnie",
|
||||||
"settings": "Ustawienia",
|
"settings": "Ustawienia",
|
||||||
|
"signNameLabel": "Nazwa podpisu",
|
||||||
"status": "Status",
|
"status": "Status",
|
||||||
"telephone": "Numer telefonu",
|
"telephone": "Numer telefonu",
|
||||||
"template": "Szablon SMS",
|
"template": "Szablon SMS",
|
||||||
"templateCode": "Kod szablonu",
|
"templateCode": "Kod szablonu",
|
||||||
|
"templateCodeLabel": "Kod szablonu",
|
||||||
"templateParam": "Parametr Szablonu",
|
"templateParam": "Parametr Szablonu",
|
||||||
"templateTip": "Proszę wypełnić szablon SMS, zachowując {code} w środku, w przeciwnym razie funkcja SMS nie będzie działać",
|
"templateTip": "Proszę wypełnić szablon SMS, zachowując {code} w środku, w przeciwnym razie funkcja SMS nie będzie działać",
|
||||||
"testSms": "Wyślij testowy SMS",
|
"testSms": "Wyślij testowy SMS",
|
||||||
"testSmsContent": "To jest wiadomość testowa",
|
"testSmsContent": "To jest wiadomość testowa",
|
||||||
"testSmsPhone": "Wprowadź numer telefonu",
|
"testSmsPhone": "Wprowadź numer telefonu",
|
||||||
"testSmsTip": "Wyślij testowy SMS, aby zweryfikować swoją konfigurację",
|
"testSmsTip": "Wyślij testowy SMS, aby zweryfikować swoją konfigurację",
|
||||||
"updateSuccess": "Aktualizacja zakończona pomyślnie"
|
"updateSuccess": "Aktualizacja zakończona pomyślnie",
|
||||||
|
"whitelistAreaCode": "Kod obszaru białej listy",
|
||||||
|
"whitelistAreaCodeTip": "Proszę wprowadzić kody obszarów białej listy, np. 1, 852, 886, 888",
|
||||||
|
"whitelistValidation": "Weryfikacja białej listy",
|
||||||
|
"whitelistValidationTip": "Po włączeniu, tylko kody obszarów na białej liście mogą wysyłać SMS"
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,11 +1,13 @@
|
|||||||
{
|
{
|
||||||
"SmsList": "Lista de Registro de SMS",
|
"SmsList": "Lista de Registro de SMS",
|
||||||
|
"accessLabel": "Acesso",
|
||||||
"applyPlatform": "Aplicar Plataforma",
|
"applyPlatform": "Aplicar Plataforma",
|
||||||
"areaCode": "Código de Área",
|
"areaCode": "Código de Área",
|
||||||
"content": "Conteúdo",
|
"content": "Conteúdo",
|
||||||
"createdAt": "Hora de Envio",
|
"createdAt": "Hora de Envio",
|
||||||
"enable": "Habilitar",
|
"enable": "Habilitar",
|
||||||
"enableTip": "Após a ativação, as funções de registro, login, vinculação e desvinculação de telefone celular serão ativadas",
|
"enableTip": "Após a ativação, as funções de registro, login, vinculação e desvinculação de telefone celular serão ativadas",
|
||||||
|
"endpointLabel": "Endpoint",
|
||||||
"expireTime": "Tempo de Expiração",
|
"expireTime": "Tempo de Expiração",
|
||||||
"expireTimeTip": "Período de validade do código de verificação por SMS (segundos)",
|
"expireTimeTip": "Período de validade do código de verificação por SMS (segundos)",
|
||||||
"interval": "Intervalo",
|
"interval": "Intervalo",
|
||||||
@ -24,18 +26,25 @@
|
|||||||
"platformConfigTip": "Por favor, preencha a configuração fornecida {key}",
|
"platformConfigTip": "Por favor, preencha a configuração fornecida {key}",
|
||||||
"platformTip": "Por favor, selecione a plataforma de SMS",
|
"platformTip": "Por favor, selecione a plataforma de SMS",
|
||||||
"search": "Pesquisar número de telefone",
|
"search": "Pesquisar número de telefone",
|
||||||
|
"secretLabel": "Segredo",
|
||||||
"sendFailed": "Envio Falhou",
|
"sendFailed": "Envio Falhou",
|
||||||
"sendSuccess": "Envio bem-sucedido",
|
"sendSuccess": "Envio bem-sucedido",
|
||||||
"settings": "Configurações",
|
"settings": "Configurações",
|
||||||
|
"signNameLabel": "Nome da Assinatura",
|
||||||
"status": "Status",
|
"status": "Status",
|
||||||
"telephone": "Número de Telefone",
|
"telephone": "Número de Telefone",
|
||||||
"template": "Modelo de SMS",
|
"template": "Modelo de SMS",
|
||||||
"templateCode": "Código do Modelo",
|
"templateCode": "Código do Modelo",
|
||||||
|
"templateCodeLabel": "Código do Modelo",
|
||||||
"templateParam": "Parâmetro de Modelo",
|
"templateParam": "Parâmetro de Modelo",
|
||||||
"templateTip": "Por favor, preencha o modelo de SMS, mantenha {code} no meio, caso contrário, a função de SMS não funcionará",
|
"templateTip": "Por favor, preencha o modelo de SMS, mantenha {code} no meio, caso contrário, a função de SMS não funcionará",
|
||||||
"testSms": "Enviar SMS de Teste",
|
"testSms": "Enviar SMS de Teste",
|
||||||
"testSmsContent": "Esta é uma mensagem de teste",
|
"testSmsContent": "Esta é uma mensagem de teste",
|
||||||
"testSmsPhone": "Digite o número de telefone",
|
"testSmsPhone": "Digite o número de telefone",
|
||||||
"testSmsTip": "Envie um SMS de teste para verificar sua configuração",
|
"testSmsTip": "Envie um SMS de teste para verificar sua configuração",
|
||||||
"updateSuccess": "Atualização bem-sucedida"
|
"updateSuccess": "Atualização bem-sucedida",
|
||||||
|
"whitelistAreaCode": "Código de Área da Lista Branca",
|
||||||
|
"whitelistAreaCodeTip": "Por favor, insira os códigos de área da lista branca, ex: 1, 852, 886, 888",
|
||||||
|
"whitelistValidation": "Verificação da Lista Branca",
|
||||||
|
"whitelistValidationTip": "Quando ativado, apenas os códigos de área na lista branca podem enviar SMS"
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,11 +1,13 @@
|
|||||||
{
|
{
|
||||||
"SmsList": "Listă Jurnal SMS",
|
"SmsList": "Listă Jurnal SMS",
|
||||||
|
"accessLabel": "Acces",
|
||||||
"applyPlatform": "Aplică Platformă",
|
"applyPlatform": "Aplică Platformă",
|
||||||
"areaCode": "Prefix telefonic",
|
"areaCode": "Prefix telefonic",
|
||||||
"content": "Conținut",
|
"content": "Conținut",
|
||||||
"createdAt": "Ora trimiterii",
|
"createdAt": "Ora trimiterii",
|
||||||
"enable": "Activează",
|
"enable": "Activează",
|
||||||
"enableTip": "După activare, funcțiile de înregistrare, autentificare, asociere și disociere a telefonului mobil vor fi activate",
|
"enableTip": "După activare, funcțiile de înregistrare, autentificare, asociere și disociere a telefonului mobil vor fi activate",
|
||||||
|
"endpointLabel": "Punct de acces",
|
||||||
"expireTime": "Timp de expirare",
|
"expireTime": "Timp de expirare",
|
||||||
"expireTimeTip": "Perioada de valabilitate a codului de verificare prin SMS (secunde)",
|
"expireTimeTip": "Perioada de valabilitate a codului de verificare prin SMS (secunde)",
|
||||||
"interval": "Interval",
|
"interval": "Interval",
|
||||||
@ -24,18 +26,25 @@
|
|||||||
"platformConfigTip": "Vă rugăm să completați configurația {key} furnizată",
|
"platformConfigTip": "Vă rugăm să completați configurația {key} furnizată",
|
||||||
"platformTip": "Vă rugăm să selectați platforma SMS",
|
"platformTip": "Vă rugăm să selectați platforma SMS",
|
||||||
"search": "Caută număr de telefon",
|
"search": "Caută număr de telefon",
|
||||||
|
"secretLabel": "Secret",
|
||||||
"sendFailed": "Trimitere eșuată",
|
"sendFailed": "Trimitere eșuată",
|
||||||
"sendSuccess": "Trimitere reușită",
|
"sendSuccess": "Trimitere reușită",
|
||||||
"settings": "Setări",
|
"settings": "Setări",
|
||||||
|
"signNameLabel": "Nume semnătură",
|
||||||
"status": "Stare",
|
"status": "Stare",
|
||||||
"telephone": "Număr de telefon",
|
"telephone": "Număr de telefon",
|
||||||
"template": "Șablon SMS",
|
"template": "Șablon SMS",
|
||||||
"templateCode": "Cod Șablon",
|
"templateCode": "Cod Șablon",
|
||||||
|
"templateCodeLabel": "Cod șablon",
|
||||||
"templateParam": "Parametru Șablon",
|
"templateParam": "Parametru Șablon",
|
||||||
"templateTip": "Vă rugăm să completați șablonul SMS, păstrați {code} în mijloc, altfel funcția SMS nu va funcționa",
|
"templateTip": "Vă rugăm să completați șablonul SMS, păstrați {code} în mijloc, altfel funcția SMS nu va funcționa",
|
||||||
"testSms": "Trimite SMS de test",
|
"testSms": "Trimite SMS de test",
|
||||||
"testSmsContent": "Acesta este un mesaj de test",
|
"testSmsContent": "Acesta este un mesaj de test",
|
||||||
"testSmsPhone": "Introduceți numărul de telefon",
|
"testSmsPhone": "Introduceți numărul de telefon",
|
||||||
"testSmsTip": "Trimite un SMS de test pentru a verifica configurația ta",
|
"testSmsTip": "Trimite un SMS de test pentru a verifica configurația ta",
|
||||||
"updateSuccess": "Actualizare reușită"
|
"updateSuccess": "Actualizare reușită",
|
||||||
|
"whitelistAreaCode": "Coduri de zonă pe lista albă",
|
||||||
|
"whitelistAreaCodeTip": "Vă rugăm să introduceți codurile de zonă pe lista albă, de exemplu, 1, 852, 886, 888",
|
||||||
|
"whitelistValidation": "Verificare listă albă",
|
||||||
|
"whitelistValidationTip": "Când este activat, doar codurile de zonă din lista albă pot trimite SMS-uri"
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,11 +1,13 @@
|
|||||||
{
|
{
|
||||||
"SmsList": "Список журнала SMS",
|
"SmsList": "Список журнала SMS",
|
||||||
|
"accessLabel": "Доступ",
|
||||||
"applyPlatform": "Применить платформу",
|
"applyPlatform": "Применить платформу",
|
||||||
"areaCode": "Код региона",
|
"areaCode": "Код региона",
|
||||||
"content": "Содержание",
|
"content": "Содержание",
|
||||||
"createdAt": "Время отправки",
|
"createdAt": "Время отправки",
|
||||||
"enable": "Включить",
|
"enable": "Включить",
|
||||||
"enableTip": "После включения будут доступны функции регистрации, входа, привязки и отвязки мобильного телефона",
|
"enableTip": "После включения будут доступны функции регистрации, входа, привязки и отвязки мобильного телефона",
|
||||||
|
"endpointLabel": "Конечная точка",
|
||||||
"expireTime": "Время истечения",
|
"expireTime": "Время истечения",
|
||||||
"expireTimeTip": "Срок действия кода подтверждения по SMS (в секундах)",
|
"expireTimeTip": "Срок действия кода подтверждения по SMS (в секундах)",
|
||||||
"interval": "Интервал",
|
"interval": "Интервал",
|
||||||
@ -24,18 +26,25 @@
|
|||||||
"platformConfigTip": "Пожалуйста, заполните предоставленную конфигурацию {key}",
|
"platformConfigTip": "Пожалуйста, заполните предоставленную конфигурацию {key}",
|
||||||
"platformTip": "Пожалуйста, выберите платформу SMS",
|
"platformTip": "Пожалуйста, выберите платформу SMS",
|
||||||
"search": "Поиск номера телефона",
|
"search": "Поиск номера телефона",
|
||||||
|
"secretLabel": "Секрет",
|
||||||
"sendFailed": "Не удалось отправить",
|
"sendFailed": "Не удалось отправить",
|
||||||
"sendSuccess": "Успешно отправлено",
|
"sendSuccess": "Успешно отправлено",
|
||||||
"settings": "Настройки",
|
"settings": "Настройки",
|
||||||
|
"signNameLabel": "Имя подписи",
|
||||||
"status": "Статус",
|
"status": "Статус",
|
||||||
"telephone": "Номер телефона",
|
"telephone": "Номер телефона",
|
||||||
"template": "Шаблон SMS",
|
"template": "Шаблон SMS",
|
||||||
"templateCode": "Код шаблона",
|
"templateCode": "Код шаблона",
|
||||||
|
"templateCodeLabel": "Код шаблона",
|
||||||
"templateParam": "Параметр шаблона",
|
"templateParam": "Параметр шаблона",
|
||||||
"templateTip": "Пожалуйста, заполните шаблон SMS, оставьте {code} в середине, иначе функция SMS не будет работать",
|
"templateTip": "Пожалуйста, заполните шаблон SMS, оставьте {code} в середине, иначе функция SMS не будет работать",
|
||||||
"testSms": "Отправить тестовое SMS",
|
"testSms": "Отправить тестовое SMS",
|
||||||
"testSmsContent": "Это тестовое сообщение",
|
"testSmsContent": "Это тестовое сообщение",
|
||||||
"testSmsPhone": "Введите номер телефона",
|
"testSmsPhone": "Введите номер телефона",
|
||||||
"testSmsTip": "Отправьте тестовое SMS, чтобы проверить вашу конфигурацию",
|
"testSmsTip": "Отправьте тестовое SMS, чтобы проверить вашу конфигурацию",
|
||||||
"updateSuccess": "Обновление успешно"
|
"updateSuccess": "Обновление успешно",
|
||||||
|
"whitelistAreaCode": "Код региона в белом списке",
|
||||||
|
"whitelistAreaCodeTip": "Пожалуйста, введите коды регионов в белом списке, например, 1, 852, 886, 888",
|
||||||
|
"whitelistValidation": "Проверка белого списка",
|
||||||
|
"whitelistValidationTip": "При включении только коды регионов из белого списка могут отправлять SMS"
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,11 +1,13 @@
|
|||||||
{
|
{
|
||||||
"SmsList": "รายการบันทึก SMS",
|
"SmsList": "รายการบันทึก SMS",
|
||||||
|
"accessLabel": "การเข้าถึง",
|
||||||
"applyPlatform": "สมัครแพลตฟอร์ม",
|
"applyPlatform": "สมัครแพลตฟอร์ม",
|
||||||
"areaCode": "รหัสพื้นที่",
|
"areaCode": "รหัสพื้นที่",
|
||||||
"content": "เนื้อหา",
|
"content": "เนื้อหา",
|
||||||
"createdAt": "เวลาที่ส่ง",
|
"createdAt": "เวลาที่ส่ง",
|
||||||
"enable": "เปิดใช้งาน",
|
"enable": "เปิดใช้งาน",
|
||||||
"enableTip": "หลังจากเปิดใช้งานแล้ว ฟังก์ชันการลงทะเบียน การเข้าสู่ระบบ การผูก และการยกเลิกการผูกโทรศัพท์มือถือจะถูกเปิดใช้งาน",
|
"enableTip": "หลังจากเปิดใช้งานแล้ว ฟังก์ชันการลงทะเบียน การเข้าสู่ระบบ การผูก และการยกเลิกการผูกโทรศัพท์มือถือจะถูกเปิดใช้งาน",
|
||||||
|
"endpointLabel": "จุดสิ้นสุด",
|
||||||
"expireTime": "เวลาหมดอายุ",
|
"expireTime": "เวลาหมดอายุ",
|
||||||
"expireTimeTip": "ระยะเวลาหมดอายุของรหัสยืนยันทาง SMS (วินาที)",
|
"expireTimeTip": "ระยะเวลาหมดอายุของรหัสยืนยันทาง SMS (วินาที)",
|
||||||
"interval": "ช่วงเวลา",
|
"interval": "ช่วงเวลา",
|
||||||
@ -24,18 +26,25 @@
|
|||||||
"platformConfigTip": "กรุณากรอกการตั้งค่าที่ให้ไว้ {key}",
|
"platformConfigTip": "กรุณากรอกการตั้งค่าที่ให้ไว้ {key}",
|
||||||
"platformTip": "กรุณาเลือกแพลตฟอร์ม SMS",
|
"platformTip": "กรุณาเลือกแพลตฟอร์ม SMS",
|
||||||
"search": "ค้นหาเบอร์โทรศัพท์",
|
"search": "ค้นหาเบอร์โทรศัพท์",
|
||||||
|
"secretLabel": "ความลับ",
|
||||||
"sendFailed": "ส่งไม่สำเร็จ",
|
"sendFailed": "ส่งไม่สำเร็จ",
|
||||||
"sendSuccess": "ส่งสำเร็จ",
|
"sendSuccess": "ส่งสำเร็จ",
|
||||||
"settings": "การตั้งค่า",
|
"settings": "การตั้งค่า",
|
||||||
|
"signNameLabel": "ชื่อผู้ลงนาม",
|
||||||
"status": "สถานะ",
|
"status": "สถานะ",
|
||||||
"telephone": "หมายเลขโทรศัพท์",
|
"telephone": "หมายเลขโทรศัพท์",
|
||||||
"template": "เทมเพลต SMS",
|
"template": "เทมเพลต SMS",
|
||||||
"templateCode": "รหัสเทมเพลต",
|
"templateCode": "รหัสเทมเพลต",
|
||||||
|
"templateCodeLabel": "รหัสแม่แบบ",
|
||||||
"templateParam": "พารามิเตอร์แม่แบบ",
|
"templateParam": "พารามิเตอร์แม่แบบ",
|
||||||
"templateTip": "กรุณากรอกเทมเพลต SMS โดยคง {code} ไว้ตรงกลาง มิฉะนั้นฟังก์ชัน SMS จะไม่ทำงาน",
|
"templateTip": "กรุณากรอกเทมเพลต SMS โดยคง {code} ไว้ตรงกลาง มิฉะนั้นฟังก์ชัน SMS จะไม่ทำงาน",
|
||||||
"testSms": "ส่ง SMS ทดสอบ",
|
"testSms": "ส่ง SMS ทดสอบ",
|
||||||
"testSmsContent": "นี่คือข้อความทดสอบ",
|
"testSmsContent": "นี่คือข้อความทดสอบ",
|
||||||
"testSmsPhone": "กรุณาใส่หมายเลขโทรศัพท์",
|
"testSmsPhone": "กรุณาใส่หมายเลขโทรศัพท์",
|
||||||
"testSmsTip": "ส่ง SMS ทดสอบเพื่อตรวจสอบการตั้งค่าของคุณ",
|
"testSmsTip": "ส่ง SMS ทดสอบเพื่อตรวจสอบการตั้งค่าของคุณ",
|
||||||
"updateSuccess": "อัปเดตสำเร็จ"
|
"updateSuccess": "อัปเดตสำเร็จ",
|
||||||
|
"whitelistAreaCode": "รหัสพื้นที่ในรายการอนุญาต",
|
||||||
|
"whitelistAreaCodeTip": "กรุณาใส่รหัสพื้นที่ในรายการอนุญาต เช่น 1, 852, 886, 888",
|
||||||
|
"whitelistValidation": "การตรวจสอบรายการอนุญาต",
|
||||||
|
"whitelistValidationTip": "เมื่อเปิดใช้งาน จะอนุญาตให้ส่ง SMS เฉพาะรหัสพื้นที่ในรายการอนุญาตเท่านั้น"
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,11 +1,13 @@
|
|||||||
{
|
{
|
||||||
"SmsList": "SMS Günlük Listesi",
|
"SmsList": "SMS Günlük Listesi",
|
||||||
|
"accessLabel": "Erişim",
|
||||||
"applyPlatform": "Platforma Başvur",
|
"applyPlatform": "Platforma Başvur",
|
||||||
"areaCode": "Alan Kodu",
|
"areaCode": "Alan Kodu",
|
||||||
"content": "İçerik",
|
"content": "İçerik",
|
||||||
"createdAt": "Gönderim Zamanı",
|
"createdAt": "Gönderim Zamanı",
|
||||||
"enable": "Etkinleştir",
|
"enable": "Etkinleştir",
|
||||||
"enableTip": "Etkinleştirildikten sonra, cep telefonu kaydı, giriş, bağlama ve bağlantı kesme işlevleri etkinleştirilecektir",
|
"enableTip": "Etkinleştirildikten sonra, cep telefonu kaydı, giriş, bağlama ve bağlantı kesme işlevleri etkinleştirilecektir",
|
||||||
|
"endpointLabel": "Uç Nokta",
|
||||||
"expireTime": "Sona Erme Süresi",
|
"expireTime": "Sona Erme Süresi",
|
||||||
"expireTimeTip": "SMS doğrulama kodu geçerlilik süresi (saniye)",
|
"expireTimeTip": "SMS doğrulama kodu geçerlilik süresi (saniye)",
|
||||||
"interval": "Aralık",
|
"interval": "Aralık",
|
||||||
@ -24,18 +26,25 @@
|
|||||||
"platformConfigTip": "Lütfen sağlanan {key} yapılandırmasını doldurun",
|
"platformConfigTip": "Lütfen sağlanan {key} yapılandırmasını doldurun",
|
||||||
"platformTip": "Lütfen SMS platformunu seçin",
|
"platformTip": "Lütfen SMS platformunu seçin",
|
||||||
"search": "Telefon numarası ara",
|
"search": "Telefon numarası ara",
|
||||||
|
"secretLabel": "Gizli Anahtar",
|
||||||
"sendFailed": "Gönderim Başarısız",
|
"sendFailed": "Gönderim Başarısız",
|
||||||
"sendSuccess": "Gönderim Başarılı",
|
"sendSuccess": "Gönderim Başarılı",
|
||||||
"settings": "Ayarlar",
|
"settings": "Ayarlar",
|
||||||
|
"signNameLabel": "İmza Adı",
|
||||||
"status": "Durum",
|
"status": "Durum",
|
||||||
"telephone": "Telefon Numarası",
|
"telephone": "Telefon Numarası",
|
||||||
"template": "SMS Şablonu",
|
"template": "SMS Şablonu",
|
||||||
"templateCode": "Şablon Kodu",
|
"templateCode": "Şablon Kodu",
|
||||||
|
"templateCodeLabel": "Şablon Kodu",
|
||||||
"templateParam": "Şablon Parametresi",
|
"templateParam": "Şablon Parametresi",
|
||||||
"templateTip": "Lütfen SMS şablonunu doldurun, {code} ortada kalacak şekilde, aksi takdirde SMS işlevi çalışmaz",
|
"templateTip": "Lütfen SMS şablonunu doldurun, {code} ortada kalacak şekilde, aksi takdirde SMS işlevi çalışmaz",
|
||||||
"testSms": "Test SMS Gönder",
|
"testSms": "Test SMS Gönder",
|
||||||
"testSmsContent": "Bu bir test mesajıdır",
|
"testSmsContent": "Bu bir test mesajıdır",
|
||||||
"testSmsPhone": "Telefon numarasını girin",
|
"testSmsPhone": "Telefon numarasını girin",
|
||||||
"testSmsTip": "Yapılandırmanızı doğrulamak için bir test SMS'i gönderin",
|
"testSmsTip": "Yapılandırmanızı doğrulamak için bir test SMS'i gönderin",
|
||||||
"updateSuccess": "Güncelleme Başarılı"
|
"updateSuccess": "Güncelleme Başarılı",
|
||||||
|
"whitelistAreaCode": "Beyaz Liste Alan Kodu",
|
||||||
|
"whitelistAreaCodeTip": "Lütfen beyaz liste alan kodlarını girin, örneğin, 1, 852, 886, 888",
|
||||||
|
"whitelistValidation": "Beyaz Liste Doğrulaması",
|
||||||
|
"whitelistValidationTip": "Etkinleştirildiğinde, yalnızca beyaz listedeki alan kodları SMS gönderebilir"
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,11 +1,13 @@
|
|||||||
{
|
{
|
||||||
"SmsList": "Список журналу SMS",
|
"SmsList": "Список журналу SMS",
|
||||||
|
"accessLabel": "Доступ",
|
||||||
"applyPlatform": "Застосувати платформу",
|
"applyPlatform": "Застосувати платформу",
|
||||||
"areaCode": "Код регіону",
|
"areaCode": "Код регіону",
|
||||||
"content": "Зміст",
|
"content": "Зміст",
|
||||||
"createdAt": "Час відправлення",
|
"createdAt": "Час відправлення",
|
||||||
"enable": "Увімкнути",
|
"enable": "Увімкнути",
|
||||||
"enableTip": "Після увімкнення будуть доступні функції реєстрації, входу, прив'язки та відв'язки мобільного телефону",
|
"enableTip": "Після увімкнення будуть доступні функції реєстрації, входу, прив'язки та відв'язки мобільного телефону",
|
||||||
|
"endpointLabel": "Кінцева точка",
|
||||||
"expireTime": "Час закінчення",
|
"expireTime": "Час закінчення",
|
||||||
"expireTimeTip": "Термін дії коду перевірки SMS (секунди)",
|
"expireTimeTip": "Термін дії коду перевірки SMS (секунди)",
|
||||||
"interval": "Інтервал",
|
"interval": "Інтервал",
|
||||||
@ -24,18 +26,25 @@
|
|||||||
"platformConfigTip": "Будь ласка, заповніть надану конфігурацію {key}",
|
"platformConfigTip": "Будь ласка, заповніть надану конфігурацію {key}",
|
||||||
"platformTip": "Будь ласка, виберіть платформу SMS",
|
"platformTip": "Будь ласка, виберіть платформу SMS",
|
||||||
"search": "Пошук номера телефону",
|
"search": "Пошук номера телефону",
|
||||||
|
"secretLabel": "Секрет",
|
||||||
"sendFailed": "Не вдалося надіслати",
|
"sendFailed": "Не вдалося надіслати",
|
||||||
"sendSuccess": "Відправлено успішно",
|
"sendSuccess": "Відправлено успішно",
|
||||||
"settings": "Налаштування",
|
"settings": "Налаштування",
|
||||||
|
"signNameLabel": "Назва підпису",
|
||||||
"status": "Статус",
|
"status": "Статус",
|
||||||
"telephone": "Номер телефону",
|
"telephone": "Номер телефону",
|
||||||
"template": "Шаблон SMS",
|
"template": "Шаблон SMS",
|
||||||
"templateCode": "Код шаблону",
|
"templateCode": "Код шаблону",
|
||||||
|
"templateCodeLabel": "Код шаблону",
|
||||||
"templateParam": "Параметр Шаблону",
|
"templateParam": "Параметр Шаблону",
|
||||||
"templateTip": "Будь ласка, заповніть шаблон SMS, залиште {code} посередині, інакше функція SMS не працюватиме",
|
"templateTip": "Будь ласка, заповніть шаблон SMS, залиште {code} посередині, інакше функція SMS не працюватиме",
|
||||||
"testSms": "Надіслати тестове SMS",
|
"testSms": "Надіслати тестове SMS",
|
||||||
"testSmsContent": "Це тестове повідомлення",
|
"testSmsContent": "Це тестове повідомлення",
|
||||||
"testSmsPhone": "Введіть номер телефону",
|
"testSmsPhone": "Введіть номер телефону",
|
||||||
"testSmsTip": "Надіслати тестове SMS, щоб перевірити вашу конфігурацію",
|
"testSmsTip": "Надіслати тестове SMS, щоб перевірити вашу конфігурацію",
|
||||||
"updateSuccess": "Оновлення успішне"
|
"updateSuccess": "Оновлення успішне",
|
||||||
|
"whitelistAreaCode": "Код області білого списку",
|
||||||
|
"whitelistAreaCodeTip": "Будь ласка, введіть коди областей білого списку, наприклад, 1, 852, 886, 888",
|
||||||
|
"whitelistValidation": "Перевірка білого списку",
|
||||||
|
"whitelistValidationTip": "При увімкненні лише коди областей у білому списку можуть надсилати SMS"
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,11 +1,13 @@
|
|||||||
{
|
{
|
||||||
"SmsList": "Danh sách nhật ký SMS",
|
"SmsList": "Danh sách nhật ký SMS",
|
||||||
|
"accessLabel": "Truy cập",
|
||||||
"applyPlatform": "Nền tảng ứng dụng",
|
"applyPlatform": "Nền tảng ứng dụng",
|
||||||
"areaCode": "Mã vùng",
|
"areaCode": "Mã vùng",
|
||||||
"content": "Nội dung",
|
"content": "Nội dung",
|
||||||
"createdAt": "Thời gian gửi",
|
"createdAt": "Thời gian gửi",
|
||||||
"enable": "Kích hoạt",
|
"enable": "Kích hoạt",
|
||||||
"enableTip": "Sau khi kích hoạt, các chức năng đăng ký, đăng nhập, liên kết và hủy liên kết điện thoại di động sẽ được kích hoạt",
|
"enableTip": "Sau khi kích hoạt, các chức năng đăng ký, đăng nhập, liên kết và hủy liên kết điện thoại di động sẽ được kích hoạt",
|
||||||
|
"endpointLabel": "Điểm cuối",
|
||||||
"expireTime": "Thời Gian Hết Hạn",
|
"expireTime": "Thời Gian Hết Hạn",
|
||||||
"expireTimeTip": "Thời gian hiệu lực của mã xác minh SMS (giây)",
|
"expireTimeTip": "Thời gian hiệu lực của mã xác minh SMS (giây)",
|
||||||
"interval": "Khoảng thời gian",
|
"interval": "Khoảng thời gian",
|
||||||
@ -24,18 +26,25 @@
|
|||||||
"platformConfigTip": "Vui lòng điền vào cấu hình {key} được cung cấp",
|
"platformConfigTip": "Vui lòng điền vào cấu hình {key} được cung cấp",
|
||||||
"platformTip": "Vui lòng chọn nền tảng SMS",
|
"platformTip": "Vui lòng chọn nền tảng SMS",
|
||||||
"search": "Tìm số điện thoại",
|
"search": "Tìm số điện thoại",
|
||||||
|
"secretLabel": "Mật khẩu",
|
||||||
"sendFailed": "Gửi Thất Bại",
|
"sendFailed": "Gửi Thất Bại",
|
||||||
"sendSuccess": "Gửi thành công",
|
"sendSuccess": "Gửi thành công",
|
||||||
"settings": "Cài đặt",
|
"settings": "Cài đặt",
|
||||||
|
"signNameLabel": "Tên ký hiệu",
|
||||||
"status": "Trạng thái",
|
"status": "Trạng thái",
|
||||||
"telephone": "Số điện thoại",
|
"telephone": "Số điện thoại",
|
||||||
"template": "Mẫu SMS",
|
"template": "Mẫu SMS",
|
||||||
"templateCode": "Mã Mẫu",
|
"templateCode": "Mã Mẫu",
|
||||||
|
"templateCodeLabel": "Mã mẫu",
|
||||||
"templateParam": "Tham số Mẫu",
|
"templateParam": "Tham số Mẫu",
|
||||||
"templateTip": "Vui lòng điền vào mẫu SMS, giữ {code} ở giữa, nếu không chức năng SMS sẽ không hoạt động",
|
"templateTip": "Vui lòng điền vào mẫu SMS, giữ {code} ở giữa, nếu không chức năng SMS sẽ không hoạt động",
|
||||||
"testSms": "Gửi SMS Thử",
|
"testSms": "Gửi SMS Thử",
|
||||||
"testSmsContent": "Đây là một tin nhắn thử nghiệm",
|
"testSmsContent": "Đây là một tin nhắn thử nghiệm",
|
||||||
"testSmsPhone": "Nhập số điện thoại",
|
"testSmsPhone": "Nhập số điện thoại",
|
||||||
"testSmsTip": "Gửi một tin nhắn SMS thử nghiệm để xác minh cấu hình của bạn",
|
"testSmsTip": "Gửi một tin nhắn SMS thử nghiệm để xác minh cấu hình của bạn",
|
||||||
"updateSuccess": "Cập nhật thành công"
|
"updateSuccess": "Cập nhật thành công",
|
||||||
|
"whitelistAreaCode": "Mã khu vực trong danh sách trắng",
|
||||||
|
"whitelistAreaCodeTip": "Vui lòng nhập mã khu vực trong danh sách trắng, ví dụ: 1, 852, 886, 888",
|
||||||
|
"whitelistValidation": "Xác minh danh sách trắng",
|
||||||
|
"whitelistValidationTip": "Khi được kích hoạt, chỉ các mã khu vực trong danh sách trắng mới có thể gửi SMS"
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,11 +1,13 @@
|
|||||||
{
|
{
|
||||||
"SmsList": "短信日志列表",
|
"SmsList": "短信日志列表",
|
||||||
|
"accessLabel": "访问",
|
||||||
"applyPlatform": "申请平台",
|
"applyPlatform": "申请平台",
|
||||||
"areaCode": "区号",
|
"areaCode": "区号",
|
||||||
"content": "内容",
|
"content": "内容",
|
||||||
"createdAt": "发送时间",
|
"createdAt": "发送时间",
|
||||||
"enable": "启用",
|
"enable": "启用",
|
||||||
"enableTip": "启用后,将启用手机注册、登录、绑定和解绑功能",
|
"enableTip": "启用后,将启用手机注册、登录、绑定和解绑功能",
|
||||||
|
"endpointLabel": "端点",
|
||||||
"expireTime": "过期时间",
|
"expireTime": "过期时间",
|
||||||
"expireTimeTip": "短信验证码有效期(秒)",
|
"expireTimeTip": "短信验证码有效期(秒)",
|
||||||
"interval": "间隔",
|
"interval": "间隔",
|
||||||
@ -24,18 +26,25 @@
|
|||||||
"platformConfigTip": "请填写提供的{key}配置",
|
"platformConfigTip": "请填写提供的{key}配置",
|
||||||
"platformTip": "请选择短信平台",
|
"platformTip": "请选择短信平台",
|
||||||
"search": "搜索电话号码",
|
"search": "搜索电话号码",
|
||||||
|
"secretLabel": "密钥",
|
||||||
"sendFailed": "发送失败",
|
"sendFailed": "发送失败",
|
||||||
"sendSuccess": "发送成功",
|
"sendSuccess": "发送成功",
|
||||||
"settings": "设置",
|
"settings": "设置",
|
||||||
|
"signNameLabel": "签名名称",
|
||||||
"status": "状态",
|
"status": "状态",
|
||||||
"telephone": "电话号码",
|
"telephone": "电话号码",
|
||||||
"template": "短信模板",
|
"template": "短信模板",
|
||||||
"templateCode": "模板代码",
|
"templateCode": "模板代码",
|
||||||
|
"templateCodeLabel": "模板代码",
|
||||||
"templateParam": "模板参数",
|
"templateParam": "模板参数",
|
||||||
"templateTip": "请填写短信模板,保持 {code} 在中间,否则短信功能将无法正常工作",
|
"templateTip": "请填写短信模板,保持 {code} 在中间,否则短信功能将无法正常工作",
|
||||||
"testSms": "发送测试短信",
|
"testSms": "发送测试短信",
|
||||||
"testSmsContent": "这是一条测试消息",
|
"testSmsContent": "这是一条测试消息",
|
||||||
"testSmsPhone": "输入电话号码",
|
"testSmsPhone": "输入电话号码",
|
||||||
"testSmsTip": "发送测试短信以验证您的配置",
|
"testSmsTip": "发送测试短信以验证您的配置",
|
||||||
"updateSuccess": "更新成功"
|
"updateSuccess": "更新成功",
|
||||||
|
"whitelistAreaCode": "白名单区号",
|
||||||
|
"whitelistAreaCodeTip": "请输入白名单区号,例如:1, 852, 886, 888",
|
||||||
|
"whitelistValidation": "白名单验证",
|
||||||
|
"whitelistValidationTip": "启用后,仅白名单中的区号可以发送短信"
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,11 +1,13 @@
|
|||||||
{
|
{
|
||||||
"SmsList": "SMS 日誌列表",
|
"SmsList": "SMS 日誌列表",
|
||||||
|
"accessLabel": "訪問",
|
||||||
"applyPlatform": "申請平台",
|
"applyPlatform": "申請平台",
|
||||||
"areaCode": "地區代碼",
|
"areaCode": "地區代碼",
|
||||||
"content": "內容",
|
"content": "內容",
|
||||||
"createdAt": "發送時間",
|
"createdAt": "發送時間",
|
||||||
"enable": "啟用",
|
"enable": "啟用",
|
||||||
"enableTip": "啟用後,將啟用手機註冊、登入、綁定和解綁功能",
|
"enableTip": "啟用後,將啟用手機註冊、登入、綁定和解綁功能",
|
||||||
|
"endpointLabel": "端點",
|
||||||
"expireTime": "到期時間",
|
"expireTime": "到期時間",
|
||||||
"expireTimeTip": "SMS 驗證碼有效期(秒)",
|
"expireTimeTip": "SMS 驗證碼有效期(秒)",
|
||||||
"interval": "間隔",
|
"interval": "間隔",
|
||||||
@ -24,18 +26,25 @@
|
|||||||
"platformConfigTip": "請填寫提供的 {key} 配置",
|
"platformConfigTip": "請填寫提供的 {key} 配置",
|
||||||
"platformTip": "請選擇短信平台",
|
"platformTip": "請選擇短信平台",
|
||||||
"search": "搜尋電話號碼",
|
"search": "搜尋電話號碼",
|
||||||
|
"secretLabel": "密鑰",
|
||||||
"sendFailed": "發送失敗",
|
"sendFailed": "發送失敗",
|
||||||
"sendSuccess": "發送成功",
|
"sendSuccess": "發送成功",
|
||||||
"settings": "設定",
|
"settings": "設定",
|
||||||
|
"signNameLabel": "簽名名稱",
|
||||||
"status": "狀態",
|
"status": "狀態",
|
||||||
"telephone": "電話號碼",
|
"telephone": "電話號碼",
|
||||||
"template": "短信範本",
|
"template": "短信範本",
|
||||||
"templateCode": "模板代碼",
|
"templateCode": "模板代碼",
|
||||||
|
"templateCodeLabel": "模板代碼",
|
||||||
"templateParam": "模板參數",
|
"templateParam": "模板參數",
|
||||||
"templateTip": "請填寫短信模板,保持 {code} 在中間,否則短信功能將無法運作",
|
"templateTip": "請填寫短信模板,保持 {code} 在中間,否則短信功能將無法運作",
|
||||||
"testSms": "發送測試短信",
|
"testSms": "發送測試短信",
|
||||||
"testSmsContent": "這是一條測試訊息",
|
"testSmsContent": "這是一條測試訊息",
|
||||||
"testSmsPhone": "輸入電話號碼",
|
"testSmsPhone": "輸入電話號碼",
|
||||||
"testSmsTip": "發送測試短信以驗證您的配置",
|
"testSmsTip": "發送測試短信以驗證您的配置",
|
||||||
"updateSuccess": "更新成功"
|
"updateSuccess": "更新成功",
|
||||||
|
"whitelistAreaCode": "白名單區域代碼",
|
||||||
|
"whitelistAreaCodeTip": "請輸入白名單區域代碼,例如:1, 852, 886, 888",
|
||||||
|
"whitelistValidation": "白名單驗證",
|
||||||
|
"whitelistValidationTip": "啟用後,只有白名單中的區域代碼可以發送短信"
|
||||||
}
|
}
|
||||||
|
|||||||
3
apps/admin/services/admin/typings.d.ts
vendored
3
apps/admin/services/admin/typings.d.ts
vendored
@ -66,7 +66,7 @@ declare namespace API {
|
|||||||
};
|
};
|
||||||
|
|
||||||
type AuthConfig = {
|
type AuthConfig = {
|
||||||
sms: MobileAuthenticateConfig;
|
mobile: MobileAuthenticateConfig;
|
||||||
email: EmailAuthticateConfig;
|
email: EmailAuthticateConfig;
|
||||||
register: RegisterConfig;
|
register: RegisterConfig;
|
||||||
};
|
};
|
||||||
@ -1362,7 +1362,6 @@ declare namespace API {
|
|||||||
expired_at: number;
|
expired_at: number;
|
||||||
upload: number;
|
upload: number;
|
||||||
download: number;
|
download: number;
|
||||||
status: number;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
type User = {
|
type User = {
|
||||||
|
|||||||
@ -32,7 +32,6 @@ export async function appleLoginCallback(
|
|||||||
return request<API.Response & { data?: any }>('/v1/auth/oauth/callback/apple', {
|
return request<API.Response & { data?: any }>('/v1/auth/oauth/callback/apple', {
|
||||||
method: 'POST',
|
method: 'POST',
|
||||||
data: formData,
|
data: formData,
|
||||||
requestType: 'form',
|
|
||||||
...(options || {}),
|
...(options || {}),
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|||||||
2
apps/admin/services/common/typings.d.ts
vendored
2
apps/admin/services/common/typings.d.ts
vendored
@ -64,7 +64,7 @@ declare namespace API {
|
|||||||
};
|
};
|
||||||
|
|
||||||
type AuthConfig = {
|
type AuthConfig = {
|
||||||
sms: MobileAuthenticateConfig;
|
mobile: MobileAuthenticateConfig;
|
||||||
email: EmailAuthticateConfig;
|
email: EmailAuthticateConfig;
|
||||||
register: RegisterConfig;
|
register: RegisterConfig;
|
||||||
};
|
};
|
||||||
|
|||||||
@ -33,8 +33,8 @@ export default function RegisterForm({
|
|||||||
try {
|
try {
|
||||||
const domain = email.split('@')[1];
|
const domain = email.split('@')[1];
|
||||||
const isValid =
|
const isValid =
|
||||||
!auth.email.email_enable_verify ||
|
!auth.email.enable_verify ||
|
||||||
auth.email?.email_domain_suffix_list.split('\n').includes(domain || '');
|
auth.email?.domain_suffix_list.split('\n').includes(domain || '');
|
||||||
return !isValid;
|
return !isValid;
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
console.log('Error checking user:', error);
|
console.log('Error checking user:', error);
|
||||||
@ -52,7 +52,7 @@ export default function RegisterForm({
|
|||||||
}),
|
}),
|
||||||
password: z.string(),
|
password: z.string(),
|
||||||
repeat_password: z.string(),
|
repeat_password: z.string(),
|
||||||
code: auth.email.email_enable_verify ? z.string() : z.string().nullish(),
|
code: auth.email.enable_verify ? z.string() : z.string().nullish(),
|
||||||
invite: invite.forced_invite ? z.string().min(1) : z.string().nullish(),
|
invite: invite.forced_invite ? z.string().min(1) : z.string().nullish(),
|
||||||
cf_token:
|
cf_token:
|
||||||
verify.enable_register_verify && verify.turnstile_site_key
|
verify.enable_register_verify && verify.turnstile_site_key
|
||||||
@ -125,7 +125,7 @@ export default function RegisterForm({
|
|||||||
</FormItem>
|
</FormItem>
|
||||||
)}
|
)}
|
||||||
/>
|
/>
|
||||||
{auth.email.email_enable_verify && (
|
{auth.email.enable_verify && (
|
||||||
<FormField
|
<FormField
|
||||||
control={form.control}
|
control={form.control}
|
||||||
name='code'
|
name='code'
|
||||||
|
|||||||
@ -32,7 +32,7 @@ export default function ResetForm({
|
|||||||
const formSchema = z.object({
|
const formSchema = z.object({
|
||||||
email: z.string().email(t('email')),
|
email: z.string().email(t('email')),
|
||||||
password: z.string(),
|
password: z.string(),
|
||||||
code: auth?.email?.email_enable_verify ? z.string() : z.string().nullish(),
|
code: auth?.email?.enable_verify ? z.string() : z.string().nullish(),
|
||||||
cf_token:
|
cf_token:
|
||||||
verify.enable_register_verify && verify.turnstile_site_key
|
verify.enable_register_verify && verify.turnstile_site_key
|
||||||
? z.string()
|
? z.string()
|
||||||
@ -60,7 +60,7 @@ export default function ResetForm({
|
|||||||
)}
|
)}
|
||||||
/>
|
/>
|
||||||
|
|
||||||
{auth?.email?.email_enable_verify && (
|
{auth?.email?.enable_verify && (
|
||||||
<FormField
|
<FormField
|
||||||
control={form.control}
|
control={form.control}
|
||||||
name='code'
|
name='code'
|
||||||
|
|||||||
@ -35,7 +35,7 @@ export default function ResetForm({
|
|||||||
telephone_area_code: z.string(),
|
telephone_area_code: z.string(),
|
||||||
telephone: z.string(),
|
telephone: z.string(),
|
||||||
password: z.string(),
|
password: z.string(),
|
||||||
code: auth?.email?.email_enable_verify ? z.string() : z.string().nullish(),
|
code: auth?.email?.enable_verify ? z.string() : z.string().nullish(),
|
||||||
cf_token:
|
cf_token:
|
||||||
verify.enable_register_verify && verify.turnstile_site_key
|
verify.enable_register_verify && verify.turnstile_site_key
|
||||||
? z.string()
|
? z.string()
|
||||||
|
|||||||
@ -22,23 +22,23 @@ export const useGlobalStore = create<GlobalStore>((set, get) => ({
|
|||||||
site_logo: '',
|
site_logo: '',
|
||||||
},
|
},
|
||||||
verify: {
|
verify: {
|
||||||
|
turnstile_site_key: '',
|
||||||
enable_login_verify: false,
|
enable_login_verify: false,
|
||||||
enable_register_verify: false,
|
enable_register_verify: false,
|
||||||
enable_reset_password_verify: false,
|
enable_reset_password_verify: false,
|
||||||
turnstile_site_key: '',
|
|
||||||
},
|
},
|
||||||
auth: {
|
auth: {
|
||||||
sms: {
|
mobile: {
|
||||||
sms_enabled: false,
|
enable: false,
|
||||||
sms_limit: 0,
|
limit: 0,
|
||||||
sms_interval: 0,
|
interval: 0,
|
||||||
sms_expire_time: 0,
|
expire_time: 0,
|
||||||
},
|
},
|
||||||
email: {
|
email: {
|
||||||
email_enabled: false,
|
enable: false,
|
||||||
email_enable_verify: false,
|
enable_verify: false,
|
||||||
email_enable_domain_suffix: false,
|
enable_domain_suffix: false,
|
||||||
email_domain_suffix_list: '',
|
domain_suffix_list: '',
|
||||||
},
|
},
|
||||||
register: {
|
register: {
|
||||||
stop_register: false,
|
stop_register: false,
|
||||||
@ -56,7 +56,6 @@ export const useGlobalStore = create<GlobalStore>((set, get) => ({
|
|||||||
currency: {
|
currency: {
|
||||||
currency_unit: 'USD',
|
currency_unit: 'USD',
|
||||||
currency_symbol: '$',
|
currency_symbol: '$',
|
||||||
access_key: '',
|
|
||||||
},
|
},
|
||||||
subscribe: {
|
subscribe: {
|
||||||
single_model: false,
|
single_model: false,
|
||||||
|
|||||||
@ -47,7 +47,6 @@
|
|||||||
"60002": "Kan for øyeblikket ikke bruke abonnementet, vennligst prøv igjen senere.",
|
"60002": "Kan for øyeblikket ikke bruke abonnementet, vennligst prøv igjen senere.",
|
||||||
"60003": "Et eksisterende abonnement er oppdaget. Vennligst avbryt det før du fortsetter.",
|
"60003": "Et eksisterende abonnement er oppdaget. Vennligst avbryt det før du fortsetter.",
|
||||||
"60004": "Kan ikke slettes for øyeblikket da abonnementet har aktive brukere.",
|
"60004": "Kan ikke slettes for øyeblikket da abonnementet har aktive brukere.",
|
||||||
"60005": "Abonnementet har nådd maks antall brukere.",
|
|
||||||
"60005": "Enkelt abonnementsmodus har overskredet brukergrensen.",
|
"60005": "Enkelt abonnementsmodus har overskredet brukergrensen.",
|
||||||
"70001": "Verifikasjonskoden er feil, vennligst skriv inn på nytt.",
|
"70001": "Verifikasjonskoden er feil, vennligst skriv inn på nytt.",
|
||||||
"80001": "Oppgaven ble ikke vellykket lagt til i køen, vennligst prøv igjen senere.",
|
"80001": "Oppgaven ble ikke vellykket lagt til i køen, vennligst prøv igjen senere.",
|
||||||
|
|||||||
@ -47,7 +47,6 @@
|
|||||||
"60002": "Não é possível usar a assinatura no momento, por favor, tente novamente mais tarde.",
|
"60002": "Não é possível usar a assinatura no momento, por favor, tente novamente mais tarde.",
|
||||||
"60003": "Uma assinatura existente foi detectada. Cancele-a antes de prosseguir.",
|
"60003": "Uma assinatura existente foi detectada. Cancele-a antes de prosseguir.",
|
||||||
"60004": "Não é possível excluir no momento, pois a assinatura possui usuários ativos.",
|
"60004": "Não é possível excluir no momento, pois a assinatura possui usuários ativos.",
|
||||||
"60005": "A assinatura atingiu o número máximo de usuários.",
|
|
||||||
"60005": "O modo de assinatura única excedeu o limite de usuários.",
|
"60005": "O modo de assinatura única excedeu o limite de usuários.",
|
||||||
"70001": "O código de verificação está incorreto, por favor, digite novamente.",
|
"70001": "O código de verificação está incorreto, por favor, digite novamente.",
|
||||||
"80001": "A tarefa não foi adicionada à fila com sucesso, por favor, tente novamente mais tarde.",
|
"80001": "A tarefa não foi adicionada à fila com sucesso, por favor, tente novamente mais tarde.",
|
||||||
|
|||||||
2
apps/user/services/common/typings.d.ts
vendored
2
apps/user/services/common/typings.d.ts
vendored
@ -64,7 +64,7 @@ declare namespace API {
|
|||||||
};
|
};
|
||||||
|
|
||||||
type AuthConfig = {
|
type AuthConfig = {
|
||||||
sms: MobileAuthenticateConfig;
|
mobile: MobileAuthenticateConfig;
|
||||||
email: EmailAuthticateConfig;
|
email: EmailAuthticateConfig;
|
||||||
register: RegisterConfig;
|
register: RegisterConfig;
|
||||||
};
|
};
|
||||||
|
|||||||
2
apps/user/services/user/typings.d.ts
vendored
2
apps/user/services/user/typings.d.ts
vendored
@ -58,7 +58,7 @@ declare namespace API {
|
|||||||
};
|
};
|
||||||
|
|
||||||
type AuthConfig = {
|
type AuthConfig = {
|
||||||
sms: MobileAuthenticateConfig;
|
mobile: MobileAuthenticateConfig;
|
||||||
email: EmailAuthticateConfig;
|
email: EmailAuthticateConfig;
|
||||||
register: RegisterConfig;
|
register: RegisterConfig;
|
||||||
};
|
};
|
||||||
|
|||||||
@ -1,5 +1,6 @@
|
|||||||
import { Badge } from '@workspace/ui/components/badge';
|
import { Badge } from '@workspace/ui/components/badge';
|
||||||
import { Input } from '@workspace/ui/components/input';
|
import { Input } from '@workspace/ui/components/input';
|
||||||
|
import { cn } from '@workspace/ui/lib/utils';
|
||||||
import { X } from 'lucide-react';
|
import { X } from 'lucide-react';
|
||||||
import React, { useEffect, useState } from 'react';
|
import React, { useEffect, useState } from 'react';
|
||||||
|
|
||||||
@ -8,9 +9,16 @@ interface TagInputProps {
|
|||||||
onChange?: (tags: string[]) => void;
|
onChange?: (tags: string[]) => void;
|
||||||
placeholder?: string;
|
placeholder?: string;
|
||||||
separator?: string;
|
separator?: string;
|
||||||
|
className?: string;
|
||||||
}
|
}
|
||||||
|
|
||||||
export function TagInput({ value = [], onChange, placeholder, separator = ',' }: TagInputProps) {
|
export function TagInput({
|
||||||
|
value = [],
|
||||||
|
onChange,
|
||||||
|
placeholder,
|
||||||
|
separator = ',',
|
||||||
|
className,
|
||||||
|
}: TagInputProps) {
|
||||||
const [inputValue, setInputValue] = useState('');
|
const [inputValue, setInputValue] = useState('');
|
||||||
const [tags, setTags] = useState<string[]>(value);
|
const [tags, setTags] = useState<string[]>(value);
|
||||||
|
|
||||||
@ -19,7 +27,6 @@ export function TagInput({ value = [], onChange, placeholder, separator = ',' }:
|
|||||||
}, [value]);
|
}, [value]);
|
||||||
|
|
||||||
function normalizeInput(input: string) {
|
function normalizeInput(input: string) {
|
||||||
// 将中文逗号替换为英文逗号
|
|
||||||
return input.replace(/,/g, ',');
|
return input.replace(/,/g, ',');
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -58,7 +65,12 @@ export function TagInput({ value = [], onChange, placeholder, separator = ',' }:
|
|||||||
}
|
}
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<div className='border-input focus-within:ring-primary flex min-h-9 w-full flex-wrap items-center gap-2 rounded-md border bg-transparent p-2 shadow-sm transition-colors focus-within:ring-1'>
|
<div
|
||||||
|
className={cn(
|
||||||
|
'border-input focus-within:ring-primary flex min-h-9 w-full flex-wrap items-center gap-2 rounded-md border bg-transparent p-2 shadow-sm transition-colors focus-within:ring-1',
|
||||||
|
className,
|
||||||
|
)}
|
||||||
|
>
|
||||||
{tags.map((tag, index) => (
|
{tags.map((tag, index) => (
|
||||||
<Badge
|
<Badge
|
||||||
key={tag}
|
key={tag}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user