mirror of
https://github.com/perfect-panel/ppanel-web.git
synced 2026-02-06 11:40:28 -05:00
✨ feat(api): Add Time Period Configuration
This commit is contained in:
parent
fec80f592d
commit
837157cc42
@ -1,13 +1,20 @@
|
||||
'use client';
|
||||
|
||||
import { getNodeConfig, updateNodeConfig } from '@/services/admin/system';
|
||||
import { Icon } from '@iconify/react';
|
||||
import {
|
||||
getNodeConfig,
|
||||
getNodeMultiplier,
|
||||
setNodeMultiplier,
|
||||
updateNodeConfig,
|
||||
} from '@/services/admin/system';
|
||||
import { useQuery } from '@tanstack/react-query';
|
||||
import { Button } from '@workspace/ui/components/button';
|
||||
import { Label } from '@workspace/ui/components/label';
|
||||
import { Table, TableBody, TableCell, TableRow } from '@workspace/ui/components/table';
|
||||
import { EnhancedInput } from '@workspace/ui/custom-components/enhanced-input';
|
||||
import { DicesIcon } from 'lucide-react';
|
||||
import { nanoid } from 'nanoid';
|
||||
import { useTranslations } from 'next-intl';
|
||||
import { useState } from 'react';
|
||||
import { toast } from 'sonner';
|
||||
|
||||
export default function Node() {
|
||||
@ -36,62 +43,175 @@ export default function Node() {
|
||||
}
|
||||
}
|
||||
|
||||
const [timeSlots, setTimeSlots] = useState<API.TimePeriod[]>([]);
|
||||
|
||||
const { data: NodeMultiplier, refetch: refetchNodeMultiplier } = useQuery({
|
||||
queryKey: ['getNodeMultiplier'],
|
||||
queryFn: async () => {
|
||||
const { data } = await getNodeMultiplier();
|
||||
if (timeSlots.length === 0) {
|
||||
setTimeSlots(data.data?.periods || []);
|
||||
}
|
||||
return data.data?.periods || [];
|
||||
},
|
||||
});
|
||||
|
||||
const addTimeSlot = () => {
|
||||
setTimeSlots([...timeSlots, { start_time: '', end_time: '', multiplier: 1 }]);
|
||||
};
|
||||
|
||||
const removeTimeSlot = (index: number) => {
|
||||
setTimeSlots(timeSlots.filter((_, i) => i !== index));
|
||||
};
|
||||
|
||||
const updateTimeSlot = (index: number, field: keyof API.TimePeriod, value: string | number) => {
|
||||
const updatedSlots = timeSlots.map((slot, i) => {
|
||||
if (i === index) {
|
||||
return { ...slot, [field]: value };
|
||||
}
|
||||
return slot;
|
||||
});
|
||||
setTimeSlots(updatedSlots);
|
||||
};
|
||||
|
||||
return (
|
||||
<Table>
|
||||
<TableBody>
|
||||
<TableRow>
|
||||
<TableCell>
|
||||
<Label>{t('communicationKey')}</Label>
|
||||
<p className='text-muted-foreground text-xs'>{t('communicationKeyDescription')}</p>
|
||||
</TableCell>
|
||||
<TableCell className='text-right'>
|
||||
<EnhancedInput
|
||||
placeholder={t('inputPlaceholder')}
|
||||
value={data?.node_secret}
|
||||
onValueBlur={(value) => updateConfig('node_secret', value)}
|
||||
suffix={
|
||||
<Icon
|
||||
icon='uil:arrow-random'
|
||||
onClick={() => {
|
||||
updateConfig('node_secret', nanoid());
|
||||
}}
|
||||
<>
|
||||
<Table>
|
||||
<TableBody>
|
||||
<TableRow>
|
||||
<TableCell>
|
||||
<Label>{t('communicationKey')}</Label>
|
||||
<p className='text-muted-foreground text-xs'>{t('communicationKeyDescription')}</p>
|
||||
</TableCell>
|
||||
<TableCell className='text-right'>
|
||||
<EnhancedInput
|
||||
placeholder={t('inputPlaceholder')}
|
||||
value={data?.node_secret}
|
||||
onValueBlur={(value) => updateConfig('node_secret', value)}
|
||||
suffix={
|
||||
<DicesIcon
|
||||
onClick={() => {
|
||||
updateConfig('node_secret', nanoid());
|
||||
}}
|
||||
/>
|
||||
}
|
||||
/>
|
||||
</TableCell>
|
||||
</TableRow>
|
||||
<TableRow>
|
||||
<TableCell>
|
||||
<Label>{t('nodePullInterval')}</Label>
|
||||
<p className='text-muted-foreground text-xs'>{t('nodePullIntervalDescription')}</p>
|
||||
</TableCell>
|
||||
<TableCell className='text-right'>
|
||||
<EnhancedInput
|
||||
type='number'
|
||||
min={0}
|
||||
onValueBlur={(value) => updateConfig('node_pull_interval', value)}
|
||||
suffix='S'
|
||||
value={data?.node_pull_interval}
|
||||
placeholder={t('inputPlaceholder')}
|
||||
/>
|
||||
</TableCell>
|
||||
</TableRow>
|
||||
<TableRow>
|
||||
<TableCell>
|
||||
<Label>{t('nodePushInterval')}</Label>
|
||||
<p className='text-muted-foreground text-xs'>{t('nodePushIntervalDescription')}</p>
|
||||
</TableCell>
|
||||
<TableCell className='text-right'>
|
||||
<EnhancedInput
|
||||
type='number'
|
||||
min={0}
|
||||
value={data?.node_push_interval}
|
||||
onValueBlur={(value) => updateConfig('node_push_interval', value)}
|
||||
placeholder={t('inputPlaceholder')}
|
||||
/>
|
||||
</TableCell>
|
||||
</TableRow>
|
||||
<TableRow>
|
||||
<TableCell>
|
||||
<Label>{t('dynamicMultiplier')}</Label>
|
||||
<p className='text-muted-foreground text-xs'>{t('dynamicMultiplierDescription')}</p>
|
||||
</TableCell>
|
||||
<TableCell className='flex justify-end gap-2'>
|
||||
<Button
|
||||
size='sm'
|
||||
variant='outline'
|
||||
onClick={() => {
|
||||
setTimeSlots(NodeMultiplier || []);
|
||||
}}
|
||||
>
|
||||
{t('reset')}
|
||||
</Button>
|
||||
<Button
|
||||
size='sm'
|
||||
onClick={() => {
|
||||
setNodeMultiplier({
|
||||
periods: timeSlots,
|
||||
}).then(async () => {
|
||||
const result = await refetchNodeMultiplier();
|
||||
if (result.data) setTimeSlots(result.data);
|
||||
toast.success(t('saveSuccess'));
|
||||
});
|
||||
}}
|
||||
>
|
||||
{t('save')}
|
||||
</Button>
|
||||
</TableCell>
|
||||
</TableRow>
|
||||
</TableBody>
|
||||
</Table>
|
||||
<div className='px-2'>
|
||||
<div className='mt-4 grid gap-4'>
|
||||
{timeSlots.map((slot, index) => (
|
||||
<div key={index} className='flex flex-col items-end gap-2 lg:flex-row'>
|
||||
<div>
|
||||
<Label>{t('startTime')}</Label>
|
||||
<EnhancedInput
|
||||
key={`${index}-start-time`}
|
||||
type='time'
|
||||
value={slot.start_time}
|
||||
onValueChange={(value) => updateTimeSlot(index, 'start_time', value as string)}
|
||||
/>
|
||||
}
|
||||
/>
|
||||
</TableCell>
|
||||
</TableRow>
|
||||
<TableRow>
|
||||
<TableCell>
|
||||
<Label>{t('nodePullInterval')}</Label>
|
||||
<p className='text-muted-foreground text-xs'>{t('nodePullIntervalDescription')}</p>
|
||||
</TableCell>
|
||||
<TableCell className='text-right'>
|
||||
<EnhancedInput
|
||||
type='number'
|
||||
min={0}
|
||||
onValueBlur={(value) => updateConfig('node_pull_interval', value)}
|
||||
suffix='S'
|
||||
value={data?.node_pull_interval}
|
||||
placeholder={t('inputPlaceholder')}
|
||||
/>
|
||||
</TableCell>
|
||||
</TableRow>
|
||||
<TableRow>
|
||||
<TableCell>
|
||||
<Label>{t('nodePushInterval')}</Label>
|
||||
<p className='text-muted-foreground text-xs'>{t('nodePushIntervalDescription')}</p>
|
||||
</TableCell>
|
||||
<TableCell className='text-right'>
|
||||
<EnhancedInput
|
||||
type='number'
|
||||
min={0}
|
||||
value={data?.node_push_interval}
|
||||
onValueBlur={(value) => updateConfig('node_push_interval', value)}
|
||||
placeholder={t('inputPlaceholder')}
|
||||
/>
|
||||
</TableCell>
|
||||
</TableRow>
|
||||
</TableBody>
|
||||
</Table>
|
||||
</div>
|
||||
|
||||
<div>
|
||||
<Label>{t('endTime')}</Label>
|
||||
<EnhancedInput
|
||||
key={`${index}-end-time`}
|
||||
type='time'
|
||||
value={slot.end_time}
|
||||
onValueChange={(value) => updateTimeSlot(index, 'end_time', value as string)}
|
||||
/>
|
||||
</div>
|
||||
|
||||
<div>
|
||||
<Label>{t('multiplier')}</Label>
|
||||
<EnhancedInput
|
||||
key={`${index}-multiplier`}
|
||||
type='number'
|
||||
value={slot.multiplier}
|
||||
onValueChange={(value) => updateTimeSlot(index, 'multiplier', value as number)}
|
||||
min={1}
|
||||
step='0.1'
|
||||
/>
|
||||
</div>
|
||||
<Button
|
||||
variant='destructive'
|
||||
onClick={() => {
|
||||
removeTimeSlot(index);
|
||||
}}
|
||||
>
|
||||
{t('delete')}
|
||||
</Button>
|
||||
</div>
|
||||
))}
|
||||
</div>
|
||||
<Button onClick={addTimeSlot} variant='outline' className='mt-4 w-full'>
|
||||
{t('addTimeSlot')}
|
||||
</Button>
|
||||
</div>
|
||||
</>
|
||||
);
|
||||
}
|
||||
|
||||
@ -45,14 +45,23 @@
|
||||
"saveSuccess": "Úspěšně uloženo"
|
||||
},
|
||||
"node": {
|
||||
"addTimeSlot": "Přidat časový úsek",
|
||||
"communicationKey": "Komunikační klíč",
|
||||
"communicationKeyDescription": "Klíč pro komunikaci uzlu, aby se zajistilo, že data nebudou zachycena jinými osobami",
|
||||
"delete": "Smazat",
|
||||
"dynamicMultiplier": "Dynamický násobitel",
|
||||
"dynamicMultiplierDescription": "Dynamický násobitel označuje zpracování posunutých dat s různými násobiteli pro různé uzly během různých časových období.",
|
||||
"endTime": "Čas konce",
|
||||
"inputPlaceholder": "Prosím zadejte",
|
||||
"multiplier": "Násobitel",
|
||||
"nodePullInterval": "Interval stahování uzlu",
|
||||
"nodePullIntervalDescription": "Frekvence, s jakou uzel získává data z panelu (v sekundách)",
|
||||
"nodePushInterval": "Interval odesílání uzlu",
|
||||
"nodePushIntervalDescription": "Frekvence, s jakou uzel odesílá data do panelu",
|
||||
"saveSuccess": "Úspěšně uloženo"
|
||||
"reset": "Resetovat",
|
||||
"save": "Uložit",
|
||||
"saveSuccess": "Úspěšně uloženo",
|
||||
"startTime": "Čas začátku"
|
||||
},
|
||||
"register": {
|
||||
"emailSuffixWhitelist": "Seznam povolených přípon e-mailů",
|
||||
|
||||
@ -45,14 +45,23 @@
|
||||
"saveSuccess": "Erfolgreich gespeichert"
|
||||
},
|
||||
"node": {
|
||||
"addTimeSlot": "Zeitfenster hinzufügen",
|
||||
"communicationKey": "Kommunikationsschlüssel",
|
||||
"communicationKeyDescription": "Schlüssel für die Kommunikation des Knotens, um sicherzustellen, dass Daten nicht von anderen abgefangen werden",
|
||||
"delete": "Löschen",
|
||||
"dynamicMultiplier": "Dynamischer Multiplikator",
|
||||
"dynamicMultiplierDescription": "Dynamischer Multiplikator bezieht sich auf die Verarbeitung von übermittelten Daten mit unterschiedlichen Multiplikatoren für verschiedene Knoten während unterschiedlicher Zeiträume.",
|
||||
"endTime": "Endzeit",
|
||||
"inputPlaceholder": "Bitte eingeben",
|
||||
"multiplier": "Multiplikator",
|
||||
"nodePullInterval": "Knotenabfrageintervall",
|
||||
"nodePullIntervalDescription": "Häufigkeit, mit der der Knoten Daten vom Panel abruft (Sekunden)",
|
||||
"nodePushInterval": "Knotenübertragungsintervall",
|
||||
"nodePushIntervalDescription": "Häufigkeit, mit der der Knoten Daten an das Panel überträgt",
|
||||
"saveSuccess": "Erfolgreich gespeichert"
|
||||
"reset": "Zurücksetzen",
|
||||
"save": "Speichern",
|
||||
"saveSuccess": "Erfolgreich gespeichert",
|
||||
"startTime": "Startzeit"
|
||||
},
|
||||
"register": {
|
||||
"emailSuffixWhitelist": "E-Mail-Suffix-Whitelist",
|
||||
|
||||
@ -45,14 +45,23 @@
|
||||
"saveSuccess": "Save Successful"
|
||||
},
|
||||
"node": {
|
||||
"addTimeSlot": "Add Time Slot",
|
||||
"communicationKey": "Communication Key",
|
||||
"communicationKeyDescription": "Key for node communication to ensure data security",
|
||||
"delete": "Delete",
|
||||
"dynamicMultiplier": "Dynamic Multiplier",
|
||||
"dynamicMultiplierDescription": "Dynamic Multiplier refers to processing pushed data with different multipliers for different nodes during different time periods.",
|
||||
"endTime": "End Time",
|
||||
"inputPlaceholder": "Enter",
|
||||
"multiplier": "Multiplier",
|
||||
"nodePullInterval": "Node Pull Interval",
|
||||
"nodePullIntervalDescription": "Frequency (in seconds) for nodes to fetch data from the panel",
|
||||
"nodePushInterval": "Node Push Interval",
|
||||
"nodePushIntervalDescription": "Frequency for nodes to push data to the panel",
|
||||
"saveSuccess": "Save Successful"
|
||||
"reset": "Reset",
|
||||
"save": "Save",
|
||||
"saveSuccess": "Save Successful",
|
||||
"startTime": "Start Time"
|
||||
},
|
||||
"register": {
|
||||
"emailSuffixWhitelist": "Email Suffix Whitelist",
|
||||
|
||||
@ -45,14 +45,23 @@
|
||||
"saveSuccess": "Guardado exitosamente"
|
||||
},
|
||||
"node": {
|
||||
"addTimeSlot": "Agregar Franja Horaria",
|
||||
"communicationKey": "Clave de comunicación",
|
||||
"communicationKeyDescription": "Clave para la comunicación del nodo, para asegurar que los datos no sean interceptados por otros",
|
||||
"delete": "Eliminar",
|
||||
"dynamicMultiplier": "Multiplicador Dinámico",
|
||||
"dynamicMultiplierDescription": "El Multiplicador Dinámico se refiere al procesamiento de datos enviados con diferentes multiplicadores para diferentes nodos durante distintos períodos de tiempo.",
|
||||
"endTime": "Hora de Fin",
|
||||
"inputPlaceholder": "Por favor, ingrese",
|
||||
"multiplier": "Multiplicador",
|
||||
"nodePullInterval": "Intervalo de extracción del nodo",
|
||||
"nodePullIntervalDescription": "Frecuencia con la que el nodo obtiene datos del panel (segundos)",
|
||||
"nodePushInterval": "Intervalo de envío del nodo",
|
||||
"nodePushIntervalDescription": "Frecuencia con la que el nodo envía datos al panel",
|
||||
"saveSuccess": "Guardado exitosamente"
|
||||
"reset": "Restablecer",
|
||||
"save": "Guardar",
|
||||
"saveSuccess": "Guardado exitosamente",
|
||||
"startTime": "Hora de Inicio"
|
||||
},
|
||||
"register": {
|
||||
"emailSuffixWhitelist": "Lista blanca de sufijos de correo electrónico",
|
||||
|
||||
@ -45,14 +45,23 @@
|
||||
"saveSuccess": "Guardado exitosamente"
|
||||
},
|
||||
"node": {
|
||||
"addTimeSlot": "Agregar Franja Horaria",
|
||||
"communicationKey": "Clave de comunicación",
|
||||
"communicationKeyDescription": "Clave para la comunicación del nodo, para asegurar que los datos no sean interceptados por otros",
|
||||
"delete": "Eliminar",
|
||||
"dynamicMultiplier": "Multiplicador Dinámico",
|
||||
"dynamicMultiplierDescription": "El Multiplicador Dinámico se refiere al procesamiento de datos enviados con diferentes multiplicadores para diferentes nodos durante distintos períodos de tiempo.",
|
||||
"endTime": "Hora de Fin",
|
||||
"inputPlaceholder": "Por favor ingrese",
|
||||
"multiplier": "Multiplicador",
|
||||
"nodePullInterval": "Intervalo de extracción del nodo",
|
||||
"nodePullIntervalDescription": "Frecuencia con la que el nodo obtiene datos del panel (segundos)",
|
||||
"nodePushInterval": "Intervalo de envío del nodo",
|
||||
"nodePushIntervalDescription": "Frecuencia con la que el nodo envía datos al panel",
|
||||
"saveSuccess": "Guardado exitosamente"
|
||||
"reset": "Restablecer",
|
||||
"save": "Guardar",
|
||||
"saveSuccess": "Guardado exitosamente",
|
||||
"startTime": "Hora de Inicio"
|
||||
},
|
||||
"register": {
|
||||
"emailSuffixWhitelist": "Lista blanca de sufijos de correo electrónico",
|
||||
|
||||
@ -45,14 +45,23 @@
|
||||
"saveSuccess": "ذخیرهسازی موفقیتآمیز"
|
||||
},
|
||||
"node": {
|
||||
"addTimeSlot": "افزودن بازه زمانی",
|
||||
"communicationKey": "کلید ارتباطی",
|
||||
"communicationKeyDescription": "کلید برای ارتباط گره به منظور اطمینان از امنیت دادهها",
|
||||
"delete": "حذف",
|
||||
"dynamicMultiplier": "ضریب پویا",
|
||||
"dynamicMultiplierDescription": "ضریب پویا به پردازش دادههای ارسال شده با ضرایب مختلف برای گرههای مختلف در دورههای زمانی مختلف اشاره دارد.",
|
||||
"endTime": "زمان پایان",
|
||||
"inputPlaceholder": "وارد کنید",
|
||||
"multiplier": "ضریب",
|
||||
"nodePullInterval": "فاصله زمانی کشیدن گره",
|
||||
"nodePullIntervalDescription": "فرکانس (به ثانیه) برای گرهها جهت دریافت داده از پنل",
|
||||
"nodePushInterval": "فاصله زمانی فشار گره",
|
||||
"nodePushIntervalDescription": "فرکانس برای گرهها جهت ارسال داده به پنل",
|
||||
"saveSuccess": "ذخیره با موفقیت انجام شد"
|
||||
"reset": "بازنشانی",
|
||||
"save": "ذخیره",
|
||||
"saveSuccess": "ذخیره با موفقیت انجام شد",
|
||||
"startTime": "زمان شروع"
|
||||
},
|
||||
"register": {
|
||||
"emailSuffixWhitelist": "لیست سفید پسوند ایمیل",
|
||||
|
||||
@ -45,14 +45,23 @@
|
||||
"saveSuccess": "Tallennus onnistui"
|
||||
},
|
||||
"node": {
|
||||
"addTimeSlot": "Lisää aikaväli",
|
||||
"communicationKey": "Viestintäavain",
|
||||
"communicationKeyDescription": "Solmun viestinnän avain, joka varmistaa, että tiedot eivät joudu muiden sieppaamiksi",
|
||||
"delete": "Poista",
|
||||
"dynamicMultiplier": "Dynaaminen Kerroin",
|
||||
"dynamicMultiplierDescription": "Dynaaminen Kerroin viittaa siihen, että käsitellään siirrettyä dataa eri kertoimilla eri solmuille eri ajanjaksoina.",
|
||||
"endTime": "Lopetusaika",
|
||||
"inputPlaceholder": "Ole hyvä ja syötä",
|
||||
"multiplier": "Kerroin",
|
||||
"nodePullInterval": "Solmun noutoväli",
|
||||
"nodePullIntervalDescription": "Kuinka usein solmu hakee tietoja paneelista (sekunteina)",
|
||||
"nodePushInterval": "Solmun lähetysväli",
|
||||
"nodePushIntervalDescription": "Kuinka usein solmu lähettää tietoja paneeliin",
|
||||
"saveSuccess": "Tallennus onnistui"
|
||||
"reset": "Nollaa",
|
||||
"save": "Tallenna",
|
||||
"saveSuccess": "Tallennus onnistui",
|
||||
"startTime": "Aloitusaika"
|
||||
},
|
||||
"register": {
|
||||
"emailSuffixWhitelist": "Sähköpostin jälkiliitteen sallittu luettelo",
|
||||
|
||||
@ -45,14 +45,23 @@
|
||||
"saveSuccess": "Enregistrement réussi"
|
||||
},
|
||||
"node": {
|
||||
"addTimeSlot": "Ajouter un créneau horaire",
|
||||
"communicationKey": "Clé de communication",
|
||||
"communicationKeyDescription": "Clé pour la communication du nœud, afin de garantir que les données ne soient pas interceptées par d'autres",
|
||||
"delete": "Supprimer",
|
||||
"dynamicMultiplier": "Multiplicateur Dynamique",
|
||||
"dynamicMultiplierDescription": "Le Multiplicateur Dynamique fait référence au traitement des données poussées avec différents multiplicateurs pour différents nœuds pendant différentes périodes.",
|
||||
"endTime": "Heure de Fin",
|
||||
"inputPlaceholder": "Veuillez entrer",
|
||||
"multiplier": "Multiplicateur",
|
||||
"nodePullInterval": "Intervalle de récupération du nœud",
|
||||
"nodePullIntervalDescription": "Fréquence à laquelle le nœud récupère les données du panneau (en secondes)",
|
||||
"nodePushInterval": "Intervalle de poussée du nœud",
|
||||
"nodePushIntervalDescription": "Fréquence à laquelle le nœud pousse les données vers le panneau",
|
||||
"saveSuccess": "Enregistrement réussi"
|
||||
"reset": "Réinitialiser",
|
||||
"save": "Enregistrer",
|
||||
"saveSuccess": "Enregistrement réussi",
|
||||
"startTime": "Heure de Début"
|
||||
},
|
||||
"register": {
|
||||
"emailSuffixWhitelist": "Liste blanche des suffixes d'email",
|
||||
|
||||
@ -45,14 +45,23 @@
|
||||
"saveSuccess": "सफलतापूर्वक सहेजा गया"
|
||||
},
|
||||
"node": {
|
||||
"addTimeSlot": "समय स्लॉट जोड़ें",
|
||||
"communicationKey": "संचार कुंजी",
|
||||
"communicationKeyDescription": "डेटा को अन्य लोगों द्वारा अवरोधित होने से बचाने के लिए नोड संचार की कुंजी",
|
||||
"delete": "हटाएं",
|
||||
"dynamicMultiplier": "डायनामिक मल्टीप्लायर",
|
||||
"dynamicMultiplierDescription": "डायनामिक मल्टीप्लायर का मतलब है विभिन्न समय अवधियों के दौरान विभिन्न नोड्स के लिए अलग-अलग मल्टीप्लायर के साथ प्रोसेस किए गए डेटा को प्रोसेस करना।",
|
||||
"endTime": "समाप्ति समय",
|
||||
"inputPlaceholder": "कृपया दर्ज करें",
|
||||
"multiplier": "मल्टीप्लायर",
|
||||
"nodePullInterval": "नोड पुल अंतराल",
|
||||
"nodePullIntervalDescription": "पैनल से डेटा प्राप्त करने के लिए नोड की आवृत्ति (सेकंड में)",
|
||||
"nodePushInterval": "नोड पुश अंतराल",
|
||||
"nodePushIntervalDescription": "नोड द्वारा डेटा को पैनल पर भेजने की आवृत्ति",
|
||||
"saveSuccess": "सफलतापूर्वक सहेजा गया"
|
||||
"reset": "रीसेट",
|
||||
"save": "सहेजें",
|
||||
"saveSuccess": "सफलतापूर्वक सहेजा गया",
|
||||
"startTime": "प्रारंभ समय"
|
||||
},
|
||||
"register": {
|
||||
"emailSuffixWhitelist": "ईमेल प्रत्यय श्वेतसूची",
|
||||
|
||||
@ -45,14 +45,23 @@
|
||||
"saveSuccess": "Sikeres mentés"
|
||||
},
|
||||
"node": {
|
||||
"addTimeSlot": "Időrés hozzáadása",
|
||||
"communicationKey": "Kommunikációs kulcs",
|
||||
"communicationKeyDescription": "A csomópontok közötti kommunikáció kulcsa, amely biztosítja, hogy az adatokat ne lehessen elfogni mások által",
|
||||
"delete": "Törlés",
|
||||
"dynamicMultiplier": "Dinamikus Szorzó",
|
||||
"dynamicMultiplierDescription": "A Dinamikus Szorzó arra utal, hogy a különböző csomópontoknál különböző szorzókkal dolgozzák fel a továbbított adatokat különböző időszakokban.",
|
||||
"endTime": "Befejezési Idő",
|
||||
"inputPlaceholder": "Kérjük, írja be",
|
||||
"multiplier": "Szorzó",
|
||||
"nodePullInterval": "Csomópont lehívási intervallum",
|
||||
"nodePullIntervalDescription": "A csomópont milyen gyakran kér le adatokat a panelről (másodpercben)",
|
||||
"nodePushInterval": "Csomópont küldési intervallum",
|
||||
"nodePushIntervalDescription": "A csomópont milyen gyakran küld adatokat a panelre",
|
||||
"saveSuccess": "Sikeres mentés"
|
||||
"reset": "Visszaállítás",
|
||||
"save": "Mentés",
|
||||
"saveSuccess": "Sikeres mentés",
|
||||
"startTime": "Kezdési Idő"
|
||||
},
|
||||
"register": {
|
||||
"emailSuffixWhitelist": "E-mail végződés fehérlista",
|
||||
|
||||
@ -45,14 +45,23 @@
|
||||
"saveSuccess": "保存に成功しました"
|
||||
},
|
||||
"node": {
|
||||
"addTimeSlot": "時間枠を追加",
|
||||
"communicationKey": "通信キー",
|
||||
"communicationKeyDescription": "ノード通信のためのキーで、データが他人に傍受されないようにします",
|
||||
"delete": "削除",
|
||||
"dynamicMultiplier": "動的乗数",
|
||||
"dynamicMultiplierDescription": "動的乗数は、異なる時間帯に異なるノードに対して異なる乗数でプッシュされたデータを処理することを指します。",
|
||||
"endTime": "終了時間",
|
||||
"inputPlaceholder": "入力してください",
|
||||
"multiplier": "乗数",
|
||||
"nodePullInterval": "ノード取得間隔",
|
||||
"nodePullIntervalDescription": "ノードがパネルからデータを取得する頻度(秒)",
|
||||
"nodePushInterval": "ノード送信間隔",
|
||||
"nodePushIntervalDescription": "ノードがデータをパネルに送信する頻度",
|
||||
"saveSuccess": "保存成功"
|
||||
"reset": "リセット",
|
||||
"save": "保存",
|
||||
"saveSuccess": "保存成功",
|
||||
"startTime": "開始時間"
|
||||
},
|
||||
"register": {
|
||||
"emailSuffixWhitelist": "メールサフィックスホワイトリスト",
|
||||
|
||||
@ -45,14 +45,23 @@
|
||||
"saveSuccess": "저장 성공"
|
||||
},
|
||||
"node": {
|
||||
"addTimeSlot": "시간 슬롯 추가",
|
||||
"communicationKey": "통신 키",
|
||||
"communicationKeyDescription": "데이터가 다른 사람에게 가로채이지 않도록 보장하는 노드 통신 키",
|
||||
"delete": "삭제",
|
||||
"dynamicMultiplier": "동적 배수",
|
||||
"dynamicMultiplierDescription": "동적 배수는 서로 다른 시간대에 서로 다른 노드에 대해 다른 배수를 사용하여 처리된 데이터를 의미합니다.",
|
||||
"endTime": "종료 시간",
|
||||
"inputPlaceholder": "입력하세요",
|
||||
"multiplier": "배수",
|
||||
"nodePullInterval": "노드 가져오기 간격",
|
||||
"nodePullIntervalDescription": "노드가 패널에서 데이터를 가져오는 빈도(초)",
|
||||
"nodePushInterval": "노드 푸시 간격",
|
||||
"nodePushIntervalDescription": "노드가 데이터를 패널로 푸시하는 빈도",
|
||||
"saveSuccess": "저장 성공"
|
||||
"reset": "재설정",
|
||||
"save": "저장",
|
||||
"saveSuccess": "저장 성공",
|
||||
"startTime": "시작 시간"
|
||||
},
|
||||
"register": {
|
||||
"emailSuffixWhitelist": "이메일 접미사 화이트리스트",
|
||||
|
||||
@ -45,14 +45,23 @@
|
||||
"saveSuccess": "Lagret vellykket"
|
||||
},
|
||||
"node": {
|
||||
"addTimeSlot": "Legg til tidsluke",
|
||||
"communicationKey": "Kommunikasjonsnøkkel",
|
||||
"communicationKeyDescription": "Nøkkelen for kommunikasjon mellom noder, for å sikre at data ikke blir avlyttet av andre",
|
||||
"delete": "Slett",
|
||||
"dynamicMultiplier": "Dynamisk Multiplikator",
|
||||
"dynamicMultiplierDescription": "Dynamisk Multiplikator refererer til behandling av dyttet data med forskjellige multiplikatorer for forskjellige noder i ulike tidsperioder.",
|
||||
"endTime": "Sluttid",
|
||||
"inputPlaceholder": "Vennligst skriv inn",
|
||||
"multiplier": "Multiplikator",
|
||||
"nodePullInterval": "Node hentingsintervall",
|
||||
"nodePullIntervalDescription": "Frekvensen (i sekunder) som noden henter data fra panelet",
|
||||
"nodePushInterval": "Node push-intervall",
|
||||
"nodePushIntervalDescription": "Frekvensen som noden sender data til panelet",
|
||||
"saveSuccess": "Lagring vellykket"
|
||||
"reset": "Tilbakestill",
|
||||
"save": "Lagre",
|
||||
"saveSuccess": "Lagring vellykket",
|
||||
"startTime": "Starttid"
|
||||
},
|
||||
"register": {
|
||||
"emailSuffixWhitelist": "E-post suffiks hviteliste",
|
||||
|
||||
@ -45,14 +45,23 @@
|
||||
"saveSuccess": "Zapisano pomyślnie"
|
||||
},
|
||||
"node": {
|
||||
"addTimeSlot": "Dodaj przedział czasowy",
|
||||
"communicationKey": "Klucz komunikacyjny",
|
||||
"communicationKeyDescription": "Klucz do komunikacji węzła, aby zapewnić, że dane nie zostaną przechwycone przez inne osoby",
|
||||
"delete": "Usuń",
|
||||
"dynamicMultiplier": "Mnożnik dynamiczny",
|
||||
"dynamicMultiplierDescription": "Mnożnik dynamiczny odnosi się do przetwarzania przesyłanych danych z różnymi mnożnikami dla różnych węzłów w różnych okresach czasu.",
|
||||
"endTime": "Czas zakończenia",
|
||||
"inputPlaceholder": "Proszę wprowadzić",
|
||||
"multiplier": "Mnożnik",
|
||||
"nodePullInterval": "Interwał pobierania węzła",
|
||||
"nodePullIntervalDescription": "Częstotliwość, z jaką węzeł pobiera dane z panelu (w sekundach)",
|
||||
"nodePushInterval": "Interwał wysyłania węzła",
|
||||
"nodePushIntervalDescription": "Częstotliwość, z jaką węzeł wysyła dane do panelu",
|
||||
"saveSuccess": "Zapisano pomyślnie"
|
||||
"reset": "Resetuj",
|
||||
"save": "Zapisz",
|
||||
"saveSuccess": "Zapisano pomyślnie",
|
||||
"startTime": "Czas rozpoczęcia"
|
||||
},
|
||||
"register": {
|
||||
"emailSuffixWhitelist": "Biała lista sufiksów e-mail",
|
||||
|
||||
@ -45,14 +45,23 @@
|
||||
"saveSuccess": "Salvo com sucesso"
|
||||
},
|
||||
"node": {
|
||||
"addTimeSlot": "Adicionar Faixa de Horário",
|
||||
"communicationKey": "Chave de Comunicação",
|
||||
"communicationKeyDescription": "Chave para comunicação do nó, garantindo que os dados não sejam interceptados por terceiros",
|
||||
"delete": "Excluir",
|
||||
"dynamicMultiplier": "Multiplicador Dinâmico",
|
||||
"dynamicMultiplierDescription": "Multiplicador Dinâmico refere-se ao processamento de dados enviados com diferentes multiplicadores para diferentes nós durante diferentes períodos de tempo.",
|
||||
"endTime": "Hora de Término",
|
||||
"inputPlaceholder": "Por favor, insira",
|
||||
"multiplier": "Multiplicador",
|
||||
"nodePullInterval": "Intervalo de Extração do Nó",
|
||||
"nodePullIntervalDescription": "Frequência com que o nó obtém dados do painel (segundos)",
|
||||
"nodePushInterval": "Intervalo de Envio do Nó",
|
||||
"nodePushIntervalDescription": "Frequência com que o nó envia dados para o painel",
|
||||
"saveSuccess": "Salvo com sucesso"
|
||||
"reset": "Redefinir",
|
||||
"save": "Salvar",
|
||||
"saveSuccess": "Salvo com sucesso",
|
||||
"startTime": "Hora de Início"
|
||||
},
|
||||
"register": {
|
||||
"emailSuffixWhitelist": "Lista branca de sufixos de e-mail",
|
||||
|
||||
@ -45,14 +45,23 @@
|
||||
"saveSuccess": "Salvare reușită"
|
||||
},
|
||||
"node": {
|
||||
"addTimeSlot": "Adaugă Interval Orar",
|
||||
"communicationKey": "Cheie de comunicare",
|
||||
"communicationKeyDescription": "Cheia de comunicare a nodului, pentru a asigura că datele nu sunt interceptate de alții",
|
||||
"delete": "Ștergere",
|
||||
"dynamicMultiplier": "Multiplicator Dinamic",
|
||||
"dynamicMultiplierDescription": "Multiplicatorul Dinamic se referă la procesarea datelor transmise cu multiplicatori diferiți pentru noduri diferite în perioade de timp diferite.",
|
||||
"endTime": "Ora de Sfârșit",
|
||||
"inputPlaceholder": "Vă rugăm să introduceți",
|
||||
"multiplier": "Multiplicator",
|
||||
"nodePullInterval": "Interval de extragere a nodului",
|
||||
"nodePullIntervalDescription": "Frecvența cu care nodul obține date de la panou (secunde)",
|
||||
"nodePushInterval": "Interval de împingere a nodului",
|
||||
"nodePushIntervalDescription": "Frecvența cu care nodul trimite date către panou",
|
||||
"saveSuccess": "Salvare reușită"
|
||||
"reset": "Resetare",
|
||||
"save": "Salvare",
|
||||
"saveSuccess": "Salvare reușită",
|
||||
"startTime": "Ora de Începere"
|
||||
},
|
||||
"register": {
|
||||
"emailSuffixWhitelist": "Lista albă a sufixelor de e-mail",
|
||||
|
||||
@ -45,14 +45,23 @@
|
||||
"saveSuccess": "Успешно сохранено"
|
||||
},
|
||||
"node": {
|
||||
"addTimeSlot": "Добавить временной интервал",
|
||||
"communicationKey": "Ключ связи",
|
||||
"communicationKeyDescription": "Ключ для связи узла, чтобы гарантировать, что данные не будут перехвачены другими",
|
||||
"delete": "Удалить",
|
||||
"dynamicMultiplier": "Динамический множитель",
|
||||
"dynamicMultiplierDescription": "Динамический множитель относится к обработке переданных данных с различными множителями для разных узлов в разные периоды времени.",
|
||||
"endTime": "Время окончания",
|
||||
"inputPlaceholder": "Пожалуйста, введите",
|
||||
"multiplier": "Множитель",
|
||||
"nodePullInterval": "Интервал извлечения узла",
|
||||
"nodePullIntervalDescription": "Частота, с которой узел получает данные с панели (в секундах)",
|
||||
"nodePushInterval": "Интервал отправки узла",
|
||||
"nodePushIntervalDescription": "Частота, с которой узел отправляет данные на панель",
|
||||
"saveSuccess": "Успешно сохранено"
|
||||
"reset": "Сбросить",
|
||||
"save": "Сохранить",
|
||||
"saveSuccess": "Успешно сохранено",
|
||||
"startTime": "Время начала"
|
||||
},
|
||||
"register": {
|
||||
"emailSuffixWhitelist": "Белый список суффиксов электронной почты",
|
||||
|
||||
@ -45,14 +45,23 @@
|
||||
"saveSuccess": "บันทึกสำเร็จ"
|
||||
},
|
||||
"node": {
|
||||
"addTimeSlot": "เพิ่มช่วงเวลา",
|
||||
"communicationKey": "คีย์การสื่อสาร",
|
||||
"communicationKeyDescription": "คีย์สำหรับการสื่อสารของโหนด เพื่อให้มั่นใจว่าข้อมูลจะไม่ถูกดักจับโดยผู้อื่น",
|
||||
"delete": "ลบ",
|
||||
"dynamicMultiplier": "ตัวคูณแบบไดนามิก",
|
||||
"dynamicMultiplierDescription": "ตัวคูณแบบไดนามิกหมายถึงการประมวลผลข้อมูลที่ถูกส่งด้วยตัวคูณที่แตกต่างกันสำหรับโหนดต่างๆ ในช่วงเวลาที่แตกต่างกัน",
|
||||
"endTime": "เวลาสิ้นสุด",
|
||||
"inputPlaceholder": "กรุณาใส่ข้อมูล",
|
||||
"multiplier": "ตัวคูณ",
|
||||
"nodePullInterval": "ช่วงเวลาการดึงข้อมูลของโหนด",
|
||||
"nodePullIntervalDescription": "ความถี่ที่โหนดดึงข้อมูลจากแผงควบคุม (วินาที)",
|
||||
"nodePushInterval": "ช่วงเวลาการส่งข้อมูลของโหนด",
|
||||
"nodePushIntervalDescription": "ความถี่ที่โหนดส่งข้อมูลไปยังแผงควบคุม",
|
||||
"saveSuccess": "บันทึกสำเร็จ"
|
||||
"reset": "รีเซ็ต",
|
||||
"save": "บันทึก",
|
||||
"saveSuccess": "บันทึกสำเร็จ",
|
||||
"startTime": "เวลาเริ่มต้น"
|
||||
},
|
||||
"register": {
|
||||
"emailSuffixWhitelist": "รายการอนุญาตโดเมนอีเมล",
|
||||
|
||||
@ -45,14 +45,23 @@
|
||||
"saveSuccess": "Başarıyla kaydedildi"
|
||||
},
|
||||
"node": {
|
||||
"addTimeSlot": "Zaman Dilimi Ekle",
|
||||
"communicationKey": "İletişim Anahtarı",
|
||||
"communicationKeyDescription": "Verilerin başkaları tarafından ele geçirilmemesini sağlamak için düğüm iletişim anahtarı",
|
||||
"delete": "Sil",
|
||||
"dynamicMultiplier": "Dinamik Çarpan",
|
||||
"dynamicMultiplierDescription": "Dinamik Çarpan, farklı zaman dilimlerinde farklı düğümler için farklı çarpanlarla işlenen veriyi ifade eder.",
|
||||
"endTime": "Bitiş Zamanı",
|
||||
"inputPlaceholder": "Lütfen giriniz",
|
||||
"multiplier": "Çarpan",
|
||||
"nodePullInterval": "Düğüm Çekme Aralığı",
|
||||
"nodePullIntervalDescription": "Düğümün panelden veri alma sıklığı (saniye)",
|
||||
"nodePushInterval": "Düğüm Gönderme Aralığı",
|
||||
"nodePushIntervalDescription": "Düğümün verileri panele gönderme sıklığı",
|
||||
"saveSuccess": "Başarıyla kaydedildi"
|
||||
"reset": "Sıfırla",
|
||||
"save": "Kaydet",
|
||||
"saveSuccess": "Başarıyla kaydedildi",
|
||||
"startTime": "Başlangıç Zamanı"
|
||||
},
|
||||
"register": {
|
||||
"emailSuffixWhitelist": "E-posta Soneki Beyaz Listesi",
|
||||
|
||||
@ -45,14 +45,23 @@
|
||||
"saveSuccess": "Успішно збережено"
|
||||
},
|
||||
"node": {
|
||||
"addTimeSlot": "Додати часовий проміжок",
|
||||
"communicationKey": "Ключ зв'язку",
|
||||
"communicationKeyDescription": "Ключ для зв'язку вузла, щоб забезпечити захист даних від перехоплення",
|
||||
"delete": "Видалити",
|
||||
"dynamicMultiplier": "Динамічний Множник",
|
||||
"dynamicMultiplierDescription": "Динамічний множник відноситься до обробки переданих даних з різними множниками для різних вузлів протягом різних періодів часу.",
|
||||
"endTime": "Час Закінчення",
|
||||
"inputPlaceholder": "Будь ласка, введіть",
|
||||
"multiplier": "Множник",
|
||||
"nodePullInterval": "Інтервал отримання вузла",
|
||||
"nodePullIntervalDescription": "Частота отримання даних вузлом з панелі (в секундах)",
|
||||
"nodePushInterval": "Інтервал відправки вузла",
|
||||
"nodePushIntervalDescription": "Частота відправки даних вузлом на панель",
|
||||
"saveSuccess": "Збережено успішно"
|
||||
"reset": "Скинути",
|
||||
"save": "Зберегти",
|
||||
"saveSuccess": "Збережено успішно",
|
||||
"startTime": "Час Початку"
|
||||
},
|
||||
"register": {
|
||||
"emailSuffixWhitelist": "Білий список суфіксів електронної пошти",
|
||||
|
||||
@ -45,14 +45,23 @@
|
||||
"saveSuccess": "Lưu thành công"
|
||||
},
|
||||
"node": {
|
||||
"addTimeSlot": "Thêm Khung Giờ",
|
||||
"communicationKey": "Khóa giao tiếp",
|
||||
"communicationKeyDescription": "Khóa giao tiếp của nút để đảm bảo dữ liệu không bị chặn bởi người khác",
|
||||
"delete": "Xóa",
|
||||
"dynamicMultiplier": "Hệ số động",
|
||||
"dynamicMultiplierDescription": "Hệ số động đề cập đến việc xử lý dữ liệu đẩy với các hệ số khác nhau cho các nút khác nhau trong các khoảng thời gian khác nhau.",
|
||||
"endTime": "Thời gian kết thúc",
|
||||
"inputPlaceholder": "Vui lòng nhập",
|
||||
"multiplier": "Hệ số",
|
||||
"nodePullInterval": "Khoảng thời gian kéo nút",
|
||||
"nodePullIntervalDescription": "Tần suất nút lấy dữ liệu từ bảng điều khiển (giây)",
|
||||
"nodePushInterval": "Khoảng thời gian đẩy nút",
|
||||
"nodePushIntervalDescription": "Tần suất nút đẩy dữ liệu lên bảng điều khiển",
|
||||
"saveSuccess": "Lưu thành công"
|
||||
"reset": "Đặt lại",
|
||||
"save": "Lưu",
|
||||
"saveSuccess": "Lưu thành công",
|
||||
"startTime": "Thời gian bắt đầu"
|
||||
},
|
||||
"register": {
|
||||
"emailSuffixWhitelist": "Danh sách trắng hậu tố email",
|
||||
|
||||
@ -45,14 +45,23 @@
|
||||
"saveSuccess": "保存成功"
|
||||
},
|
||||
"node": {
|
||||
"addTimeSlot": "添加时间段",
|
||||
"communicationKey": "通信密钥",
|
||||
"communicationKeyDescription": "节点通信的密钥,以确保数据不被他人拦截",
|
||||
"delete": "删除",
|
||||
"dynamicMultiplier": "动态倍率",
|
||||
"dynamicMultiplierDescription": "动态倍率是指在不同时间段内,对不同的节点推送的数据进行不同的倍率处理",
|
||||
"endTime": "结束时间",
|
||||
"inputPlaceholder": "请输入",
|
||||
"multiplier": "倍率",
|
||||
"nodePullInterval": "节点拉取间隔",
|
||||
"nodePullIntervalDescription": "节点从面板获取数据的频率(秒)",
|
||||
"nodePushInterval": "节点推送间隔",
|
||||
"nodePushIntervalDescription": "节点将数据推送到面板的频率",
|
||||
"saveSuccess": "保存成功"
|
||||
"reset": "重置",
|
||||
"save": "保存",
|
||||
"saveSuccess": "保存成功",
|
||||
"startTime": "开始时间"
|
||||
},
|
||||
"register": {
|
||||
"emailSuffixWhitelist": "电子邮件后缀白名单",
|
||||
|
||||
@ -45,14 +45,23 @@
|
||||
"saveSuccess": "保存成功"
|
||||
},
|
||||
"node": {
|
||||
"addTimeSlot": "新增時間段",
|
||||
"communicationKey": "通訊密鑰",
|
||||
"communicationKeyDescription": "節點通訊的密鑰,以確保數據不被他人攔截",
|
||||
"delete": "刪除",
|
||||
"dynamicMultiplier": "動態乘數",
|
||||
"dynamicMultiplierDescription": "動態乘數指的是在不同時間段內,對不同節點的推送數據使用不同的乘數進行處理。",
|
||||
"endTime": "結束時間",
|
||||
"inputPlaceholder": "請輸入",
|
||||
"multiplier": "乘數",
|
||||
"nodePullInterval": "節點拉取間隔",
|
||||
"nodePullIntervalDescription": "節點從面板獲取數據的頻率(秒)",
|
||||
"nodePushInterval": "節點推送間隔",
|
||||
"nodePushIntervalDescription": "節點將數據推送到面板的頻率",
|
||||
"saveSuccess": "保存成功"
|
||||
"reset": "重設",
|
||||
"save": "儲存",
|
||||
"saveSuccess": "保存成功",
|
||||
"startTime": "開始時間"
|
||||
},
|
||||
"register": {
|
||||
"emailSuffixWhitelist": "電子郵件後綴白名單",
|
||||
|
||||
@ -104,6 +104,17 @@ export async function updateEmailSmtpConfig(
|
||||
});
|
||||
}
|
||||
|
||||
/** Get Node Multiplier GET /v1/admin/system/get_node_multiplier */
|
||||
export async function getNodeMultiplier(options?: { [key: string]: any }) {
|
||||
return request<API.Response & { data?: API.GetNodeMultiplierResponse }>(
|
||||
'/v1/admin/system/get_node_multiplier',
|
||||
{
|
||||
method: 'GET',
|
||||
...(options || {}),
|
||||
},
|
||||
);
|
||||
}
|
||||
|
||||
/** Get invite config GET /v1/admin/system/invite_config */
|
||||
export async function getInviteConfig(options?: { [key: string]: any }) {
|
||||
return request<API.Response & { data?: API.InviteConfig }>('/v1/admin/system/invite_config', {
|
||||
@ -167,6 +178,21 @@ export async function updateRegisterConfig(
|
||||
});
|
||||
}
|
||||
|
||||
/** Set Node Multiplier POST /v1/admin/system/set_node_multiplier */
|
||||
export async function setNodeMultiplier(
|
||||
body: API.SetNodeMultiplierRequest,
|
||||
options?: { [key: string]: any },
|
||||
) {
|
||||
return request<API.Response & { data?: any }>('/v1/admin/system/set_node_multiplier', {
|
||||
method: 'POST',
|
||||
headers: {
|
||||
'Content-Type': 'application/json',
|
||||
},
|
||||
data: body,
|
||||
...(options || {}),
|
||||
});
|
||||
}
|
||||
|
||||
/** setting telegram bot POST /v1/admin/system/setting_telegram_bot */
|
||||
export async function settingTelegramBot(options?: { [key: string]: any }) {
|
||||
return request<API.Response & { data?: any }>('/v1/admin/system/setting_telegram_bot', {
|
||||
|
||||
14
apps/admin/services/admin/typings.d.ts
vendored
14
apps/admin/services/admin/typings.d.ts
vendored
@ -375,6 +375,10 @@ declare namespace API {
|
||||
search?: string;
|
||||
};
|
||||
|
||||
type GetNodeMultiplierResponse = {
|
||||
periods: TimePeriod[];
|
||||
};
|
||||
|
||||
type GetNodeServerListRequest = {
|
||||
page: number;
|
||||
size: number;
|
||||
@ -686,6 +690,10 @@ declare namespace API {
|
||||
download: number;
|
||||
};
|
||||
|
||||
type SetNodeMultiplierRequest = {
|
||||
periods: TimePeriod[];
|
||||
};
|
||||
|
||||
type Shadowsocks = {
|
||||
method: string;
|
||||
port: number;
|
||||
@ -792,6 +800,12 @@ declare namespace API {
|
||||
count: number;
|
||||
};
|
||||
|
||||
type TimePeriod = {
|
||||
start_time: string;
|
||||
end_time: string;
|
||||
multiplier: number;
|
||||
};
|
||||
|
||||
type TosConfig = {
|
||||
tos_content: string;
|
||||
};
|
||||
|
||||
6
apps/admin/services/common/typings.d.ts
vendored
6
apps/admin/services/common/typings.d.ts
vendored
@ -373,6 +373,12 @@ declare namespace API {
|
||||
updated_at: number;
|
||||
};
|
||||
|
||||
type TimePeriod = {
|
||||
start_time: string;
|
||||
end_time: string;
|
||||
multiplier: number;
|
||||
};
|
||||
|
||||
type TosConfig = {
|
||||
tos_content: string;
|
||||
};
|
||||
|
||||
@ -41,6 +41,7 @@ export function getRedirectUrl() {
|
||||
}
|
||||
|
||||
export function Logout() {
|
||||
if (!isBrowser()) return;
|
||||
const cookies = new Cookies(null, { path: '/' });
|
||||
cookies.remove('Authorization');
|
||||
const pathname = location.pathname;
|
||||
|
||||
6
apps/user/services/common/typings.d.ts
vendored
6
apps/user/services/common/typings.d.ts
vendored
@ -373,6 +373,12 @@ declare namespace API {
|
||||
updated_at: number;
|
||||
};
|
||||
|
||||
type TimePeriod = {
|
||||
start_time: string;
|
||||
end_time: string;
|
||||
multiplier: number;
|
||||
};
|
||||
|
||||
type TosConfig = {
|
||||
tos_content: string;
|
||||
};
|
||||
|
||||
6
apps/user/services/user/typings.d.ts
vendored
6
apps/user/services/user/typings.d.ts
vendored
@ -521,6 +521,12 @@ declare namespace API {
|
||||
updated_at: number;
|
||||
};
|
||||
|
||||
type TimePeriod = {
|
||||
start_time: string;
|
||||
end_time: string;
|
||||
multiplier: number;
|
||||
};
|
||||
|
||||
type TosConfig = {
|
||||
tos_content: string;
|
||||
};
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user