diff --git a/apps/admin/app/dashboard/system/node.tsx b/apps/admin/app/dashboard/system/node.tsx index 486826e..9e73f26 100644 --- a/apps/admin/app/dashboard/system/node.tsx +++ b/apps/admin/app/dashboard/system/node.tsx @@ -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([]); + + 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 ( - - - - - -

{t('communicationKeyDescription')}

-
- - updateConfig('node_secret', value)} - suffix={ - { - updateConfig('node_secret', nanoid()); - }} + <> +
+ + + + +

{t('communicationKeyDescription')}

+
+ + updateConfig('node_secret', value)} + suffix={ + { + updateConfig('node_secret', nanoid()); + }} + /> + } + /> + +
+ + + +

{t('nodePullIntervalDescription')}

+
+ + updateConfig('node_pull_interval', value)} + suffix='S' + value={data?.node_pull_interval} + placeholder={t('inputPlaceholder')} + /> + +
+ + + +

{t('nodePushIntervalDescription')}

+
+ + updateConfig('node_push_interval', value)} + placeholder={t('inputPlaceholder')} + /> + +
+ + + +

{t('dynamicMultiplierDescription')}

+
+ + + + +
+
+
+
+
+ {timeSlots.map((slot, index) => ( +
+
+ + updateTimeSlot(index, 'start_time', value as string)} /> - } - /> - - - - - -

{t('nodePullIntervalDescription')}

-
- - updateConfig('node_pull_interval', value)} - suffix='S' - value={data?.node_pull_interval} - placeholder={t('inputPlaceholder')} - /> - -
- - - -

{t('nodePushIntervalDescription')}

-
- - updateConfig('node_push_interval', value)} - placeholder={t('inputPlaceholder')} - /> - -
- - +
+ +
+ + updateTimeSlot(index, 'end_time', value as string)} + /> +
+ +
+ + updateTimeSlot(index, 'multiplier', value as number)} + min={1} + step='0.1' + /> +
+ +
+ ))} +
+ +
+ ); } diff --git a/apps/admin/locales/cs-CZ/system.json b/apps/admin/locales/cs-CZ/system.json index d23168b..0b5e300 100644 --- a/apps/admin/locales/cs-CZ/system.json +++ b/apps/admin/locales/cs-CZ/system.json @@ -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ů", diff --git a/apps/admin/locales/de-DE/system.json b/apps/admin/locales/de-DE/system.json index 8bdd714..3fc34d1 100644 --- a/apps/admin/locales/de-DE/system.json +++ b/apps/admin/locales/de-DE/system.json @@ -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", diff --git a/apps/admin/locales/en-US/system.json b/apps/admin/locales/en-US/system.json index f9c43d4..50799eb 100644 --- a/apps/admin/locales/en-US/system.json +++ b/apps/admin/locales/en-US/system.json @@ -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", diff --git a/apps/admin/locales/es-ES/system.json b/apps/admin/locales/es-ES/system.json index 195b7f8..b50b4aa 100644 --- a/apps/admin/locales/es-ES/system.json +++ b/apps/admin/locales/es-ES/system.json @@ -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", diff --git a/apps/admin/locales/es-MX/system.json b/apps/admin/locales/es-MX/system.json index d628285..e0593f5 100644 --- a/apps/admin/locales/es-MX/system.json +++ b/apps/admin/locales/es-MX/system.json @@ -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", diff --git a/apps/admin/locales/fa-IR/system.json b/apps/admin/locales/fa-IR/system.json index 0d4cc8e..5d75a9f 100644 --- a/apps/admin/locales/fa-IR/system.json +++ b/apps/admin/locales/fa-IR/system.json @@ -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": "لیست سفید پسوند ایمیل", diff --git a/apps/admin/locales/fi-FI/system.json b/apps/admin/locales/fi-FI/system.json index cc7b206..e9c65d8 100644 --- a/apps/admin/locales/fi-FI/system.json +++ b/apps/admin/locales/fi-FI/system.json @@ -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", diff --git a/apps/admin/locales/fr-FR/system.json b/apps/admin/locales/fr-FR/system.json index 48a093d..9db3317 100644 --- a/apps/admin/locales/fr-FR/system.json +++ b/apps/admin/locales/fr-FR/system.json @@ -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", diff --git a/apps/admin/locales/hi-IN/system.json b/apps/admin/locales/hi-IN/system.json index 3594279..71ee520 100644 --- a/apps/admin/locales/hi-IN/system.json +++ b/apps/admin/locales/hi-IN/system.json @@ -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": "ईमेल प्रत्यय श्वेतसूची", diff --git a/apps/admin/locales/hu-HU/system.json b/apps/admin/locales/hu-HU/system.json index 04b62b7..8b6ed71 100644 --- a/apps/admin/locales/hu-HU/system.json +++ b/apps/admin/locales/hu-HU/system.json @@ -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", diff --git a/apps/admin/locales/ja-JP/system.json b/apps/admin/locales/ja-JP/system.json index 12b7700..4440167 100644 --- a/apps/admin/locales/ja-JP/system.json +++ b/apps/admin/locales/ja-JP/system.json @@ -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": "メールサフィックスホワイトリスト", diff --git a/apps/admin/locales/ko-KR/system.json b/apps/admin/locales/ko-KR/system.json index c238ace..0ae5749 100644 --- a/apps/admin/locales/ko-KR/system.json +++ b/apps/admin/locales/ko-KR/system.json @@ -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": "이메일 접미사 화이트리스트", diff --git a/apps/admin/locales/no-NO/system.json b/apps/admin/locales/no-NO/system.json index b5cb18a..75713ff 100644 --- a/apps/admin/locales/no-NO/system.json +++ b/apps/admin/locales/no-NO/system.json @@ -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", diff --git a/apps/admin/locales/pl-PL/system.json b/apps/admin/locales/pl-PL/system.json index 0626555..7a81a84 100644 --- a/apps/admin/locales/pl-PL/system.json +++ b/apps/admin/locales/pl-PL/system.json @@ -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", diff --git a/apps/admin/locales/pt-BR/system.json b/apps/admin/locales/pt-BR/system.json index e9f1160..86778f6 100644 --- a/apps/admin/locales/pt-BR/system.json +++ b/apps/admin/locales/pt-BR/system.json @@ -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", diff --git a/apps/admin/locales/ro-RO/system.json b/apps/admin/locales/ro-RO/system.json index 7be2cb4..f3aefc8 100644 --- a/apps/admin/locales/ro-RO/system.json +++ b/apps/admin/locales/ro-RO/system.json @@ -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", diff --git a/apps/admin/locales/ru-RU/system.json b/apps/admin/locales/ru-RU/system.json index 922be8b..d9f1ec7 100644 --- a/apps/admin/locales/ru-RU/system.json +++ b/apps/admin/locales/ru-RU/system.json @@ -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": "Белый список суффиксов электронной почты", diff --git a/apps/admin/locales/th-TH/system.json b/apps/admin/locales/th-TH/system.json index e37daed..c85bfcd 100644 --- a/apps/admin/locales/th-TH/system.json +++ b/apps/admin/locales/th-TH/system.json @@ -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": "รายการอนุญาตโดเมนอีเมล", diff --git a/apps/admin/locales/tr-TR/system.json b/apps/admin/locales/tr-TR/system.json index b41250a..5a0ce4a 100644 --- a/apps/admin/locales/tr-TR/system.json +++ b/apps/admin/locales/tr-TR/system.json @@ -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", diff --git a/apps/admin/locales/uk-UA/system.json b/apps/admin/locales/uk-UA/system.json index 3c27ad0..e075a52 100644 --- a/apps/admin/locales/uk-UA/system.json +++ b/apps/admin/locales/uk-UA/system.json @@ -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": "Білий список суфіксів електронної пошти", diff --git a/apps/admin/locales/vi-VN/system.json b/apps/admin/locales/vi-VN/system.json index 2098a1d..35003d4 100644 --- a/apps/admin/locales/vi-VN/system.json +++ b/apps/admin/locales/vi-VN/system.json @@ -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", diff --git a/apps/admin/locales/zh-CN/system.json b/apps/admin/locales/zh-CN/system.json index 41d3d16..b871256 100644 --- a/apps/admin/locales/zh-CN/system.json +++ b/apps/admin/locales/zh-CN/system.json @@ -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": "电子邮件后缀白名单", diff --git a/apps/admin/locales/zh-HK/system.json b/apps/admin/locales/zh-HK/system.json index 623797f..c3a210e 100644 --- a/apps/admin/locales/zh-HK/system.json +++ b/apps/admin/locales/zh-HK/system.json @@ -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": "電子郵件後綴白名單", diff --git a/apps/admin/services/admin/system.ts b/apps/admin/services/admin/system.ts index c168ddc..4d0c0e6 100644 --- a/apps/admin/services/admin/system.ts +++ b/apps/admin/services/admin/system.ts @@ -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( + '/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('/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('/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('/v1/admin/system/setting_telegram_bot', { diff --git a/apps/admin/services/admin/typings.d.ts b/apps/admin/services/admin/typings.d.ts index 98f81af..3d9d0aa 100644 --- a/apps/admin/services/admin/typings.d.ts +++ b/apps/admin/services/admin/typings.d.ts @@ -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; }; diff --git a/apps/admin/services/common/typings.d.ts b/apps/admin/services/common/typings.d.ts index 87055dc..8d8023e 100644 --- a/apps/admin/services/common/typings.d.ts +++ b/apps/admin/services/common/typings.d.ts @@ -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; }; diff --git a/apps/admin/utils/common.ts b/apps/admin/utils/common.ts index 0c2f1d9..793d7bb 100644 --- a/apps/admin/utils/common.ts +++ b/apps/admin/utils/common.ts @@ -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; diff --git a/apps/user/services/common/typings.d.ts b/apps/user/services/common/typings.d.ts index 87055dc..8d8023e 100644 --- a/apps/user/services/common/typings.d.ts +++ b/apps/user/services/common/typings.d.ts @@ -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; }; diff --git a/apps/user/services/user/typings.d.ts b/apps/user/services/user/typings.d.ts index 879f690..55e2ec3 100644 --- a/apps/user/services/user/typings.d.ts +++ b/apps/user/services/user/typings.d.ts @@ -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; };