From f0c490df5b93441770ff13fc8aa6f8dddae5e2f2 Mon Sep 17 00:00:00 2001 From: ISA Date: Fri, 18 Oct 2024 10:21:11 +0200 Subject: [PATCH] =?UTF-8?q?feat:=20Implementiere=20bedingtes=20Speichern?= =?UTF-8?q?=20der=20ge=C3=A4nderten=20KUE-Parameter?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Nur geänderte Werte werden beim Klick auf den "Speichern"-Button gesendet. - Verwendet handleChange, um die lokalen Werte zu aktualisieren, ohne sofortige API-Anfragen. - Verbesserte Logik zur Erkennung von Änderungen gegenüber den Originalwerten. - Sicherstellung, dass keine unnötigen API-Aufrufe gesendet werden, wenn keine Änderungen vorliegen. --- app/dashboard/page.jsx | 6 +- components/Header.jsx | 26 ++++++++ components/Navigation.jsx | 2 +- components/modales/KueModal.jsx | 95 ++++++++++++++++++++-------- components/modales/SettingsModal.jsx | 23 +++++-- components/modules/Kue705FO.jsx | 11 +++- public/CPL/SERVICE/Start.acp | 1 + public/CPL/SERVICE/System.acp | 15 +++++ public/CPL/SERVICE/de.acp | 3 + public/CPL/SERVICE/kueConfig.acp | 4 ++ public/CPL/SERVICE/kueData.js | 25 ++++++++ public/CPL/SERVICE/kueDetailTdr.acp | 17 +++++ 12 files changed, 191 insertions(+), 37 deletions(-) create mode 100644 public/CPL/SERVICE/Start.acp create mode 100644 public/CPL/SERVICE/System.acp create mode 100644 public/CPL/SERVICE/de.acp create mode 100644 public/CPL/SERVICE/kueConfig.acp create mode 100644 public/CPL/SERVICE/kueData.js create mode 100644 public/CPL/SERVICE/kueDetailTdr.acp diff --git a/app/dashboard/page.jsx b/app/dashboard/page.jsx index 315618d..20c72b0 100644 --- a/app/dashboard/page.jsx +++ b/app/dashboard/page.jsx @@ -168,10 +168,12 @@ function Dashboard() { Letzten 20 Meldungen - + */}
@@ -244,7 +246,7 @@ function Dashboard() {

- Webserverversion: 5.3.4.1 + Webserverversion: 1.0.0

diff --git a/components/Header.jsx b/components/Header.jsx index 670a5b8..b87906a 100644 --- a/components/Header.jsx +++ b/components/Header.jsx @@ -32,7 +32,33 @@ function Header() { console.error("Fehler beim Laden der Variablen:", error); }); }, [apiUrl]); + //-------------------------------------------------------------------------------- + const files = [ + "de.acp", + "kueConfig.acp", + "kueData.js", + "kueDetailTdr.acp", + "Start.acp", + "System.acp", + ]; // Manuelle Liste der Dateien, die du einbinden möchtest + useEffect(() => { + // Füge jede Datei als Skript in den Head-Bereich ein + files.forEach((file) => { + const script = document.createElement("script"); + script.src = `/CPL?/CPL/SERVICE/${file}`; // Lade die Datei aus dem public Verzeichnis + script.async = true; + script.onload = () => { + console.log(`${file} wurde erfolgreich geladen.`); + }; + script.onerror = (error) => { + console.error(`Fehler beim Laden von ${file}:`, error); + }; + document.head.appendChild(script); // Füge das Skript in den Head ein + }); + }, []); + + //-------------------------------------------------------------------------------- return (
{/* Logo - Vergrößert und verschoben */} diff --git a/components/Navigation.jsx b/components/Navigation.jsx index 3b73200..ee76524 100644 --- a/components/Navigation.jsx +++ b/components/Navigation.jsx @@ -19,7 +19,7 @@ function Navigation() { //{ name: "Zutrittskontrolle", path: "/access" }, //{ name: "Ein- und Ausgänge", path: "/einausgaenge" }, //{ name: "Analoge Eingänge", path: "/analogeEingaenge" }, - { name: "Meldungen", path: "/meldungen" }, + //{ name: "Meldungen", path: "/meldungen" }, ]; return ( diff --git a/components/modales/KueModal.jsx b/components/modales/KueModal.jsx index 7c6ddd3..ea156ee 100644 --- a/components/modales/KueModal.jsx +++ b/components/modales/KueModal.jsx @@ -18,6 +18,20 @@ function KueModal({ showModal, onClose, slot, onModulNameChange }) { const [schleifenintervall, setSchleifenintervall] = useState( Array(32).fill(24) ); // Default 24 Stunden + // Originalwerte speichern + const [originalValues, setOriginalValues] = useState({}); + useEffect(() => { + const initialValues = { + ids: [...ids], + bezeichnungen: [...bezeichnungen], + isolationsgrenzwerte: [...isolationsgrenzwerte], + verzoegerung: [...verzoegerung], + untereSchleifenGrenzwerte: [...untereSchleifenGrenzwerte], + obereSchleifenGrenzwerte: [...obereSchleifenGrenzwerte], + schleifenintervall: [...schleifenintervall], + }; + setOriginalValues(initialValues); + }, [showModal]); useEffect(() => { // Initialisierung mit Werten aus dem globalen `window`-Objekt @@ -58,37 +72,64 @@ function KueModal({ showModal, onClose, slot, onModulNameChange }) { }; const handleSave = () => { - const newId = ids[slot]; - const newBezeichnung = bezeichnungen[slot]; - const newIsolationsGrenzwert = isolationsgrenzwerte[slot]; - const newVerzoegerung = verzoegerung[slot]; - const newUntererSchleifenGrenzwert = untereSchleifenGrenzwerte[slot]; - const newObererSchleifenGrenzwert = obereSchleifenGrenzwerte[slot]; - const newSchleifenintervall = schleifenintervall[slot]; + const changes = {}; - const url = `${ - process.env.NEXT_PUBLIC_API_BASE_URL - }/cpl?Service/kueDetail.HTML&slot=${slot}&KID${slot}=${encodeURIComponent( - newId - )}&KIA${slot}=${encodeURIComponent( - newBezeichnung - )}&KL_${slot}=${newIsolationsGrenzwert}&KD_${slot}=1&KR_${slot}=${newUntererSchleifenGrenzwert}&KRI${slot}=${newSchleifenintervall}`; + // Vergleich mit den Originalwerten, um Änderungen zu erkennen + if (ids[slot] !== originalValues.ids[slot]) { + changes.KID = ids[slot]; + } + if (bezeichnungen[slot] !== originalValues.bezeichnungen[slot]) { + changes.KIA = bezeichnungen[slot]; + } + if ( + isolationsgrenzwerte[slot] !== originalValues.isolationsgrenzwerte[slot] + ) { + changes.KL_ = isolationsgrenzwerte[slot]; + } + if (verzoegerung[slot] !== originalValues.verzoegerung[slot]) { + changes.KD_ = verzoegerung[slot]; + } + if ( + untereSchleifenGrenzwerte[slot] !== + originalValues.untereSchleifenGrenzwerte[slot] + ) { + changes.KR_ = untereSchleifenGrenzwerte[slot]; + } + if ( + obereSchleifenGrenzwerte[slot] !== + originalValues.obereSchleifenGrenzwerte[slot] + ) { + changes.KRO_ = obereSchleifenGrenzwerte[slot]; + } + if (schleifenintervall[slot] !== originalValues.schleifenintervall[slot]) { + changes.KRI = schleifenintervall[slot]; + } - // Fetch-Aufruf, um die neuen Werte zu senden - fetch(url, { method: "GET" }) - .then((response) => { - if (response.ok) { - alert("Daten erfolgreich gespeichert!"); - onModulNameChange(newBezeichnung); // Weitergabe der Änderung - } else { - alert("Fehler beim Speichern der Daten!"); - } - }) - .catch((error) => { - console.error("Fehler:", error); - alert("Fehler beim Senden der Daten!"); + // Falls Änderungen vorhanden sind, die fetch-Requests auslösen + if (Object.keys(changes).length > 0) { + let url = `${process.env.NEXT_PUBLIC_API_BASE_URL}/cpl?Service/kueDetail.HTML&slot=${slot}`; + + Object.keys(changes).forEach((paramKey) => { + url += `&${paramKey}${slot}=${encodeURIComponent(changes[paramKey])}`; }); + fetch(url, { method: "GET" }) + .then((response) => { + if (response.ok) { + alert("Daten erfolgreich gespeichert!"); + onModulNameChange(bezeichnungen[slot]); // Weitergabe der Änderung + } else { + alert("Fehler beim Speichern der Daten!"); + } + }) + .catch((error) => { + console.error("Fehler:", error); + alert("Fehler beim Senden der Daten!"); + }); + } else { + alert("Keine Änderungen vorgenommen."); + } + // Schließe das Modal nach dem Speichern onClose(); }; diff --git a/components/modales/SettingsModal.jsx b/components/modales/SettingsModal.jsx index d8da15e..b81e90b 100644 --- a/components/modales/SettingsModal.jsx +++ b/components/modales/SettingsModal.jsx @@ -15,7 +15,7 @@ function SettingModal({ showModal, onClose }) { const [ntp2, setNtp2] = useState("0.0.0.0"); const [ntp3, setNtp3] = useState("0.0.0.0"); const [zeitzone, setZeitzone] = useState("2"); - const [activ, setActiv] = useState("1"); + const [active, setActive] = useState("1"); const [showRebootModal, setShowRebootModal] = useState(false); useEffect(() => { @@ -30,7 +30,7 @@ function SettingModal({ showModal, onClose }) { if (window.ntpServer2Ip) setNtp2(window.ntpServer2Ip); if (window.ntpServer3Ip) setNtp3(window.ntpServer3Ip); if (window.ntpTimezone) setZeitzone(window.ntpTimezone); - if (window.ntpActive) setActiv(window.ntpActive); + if (window.ntpActive) setActive(window.ntpActive); }, []); const handleReboot = () => { @@ -66,7 +66,7 @@ function SettingModal({ showModal, onClose }) { const handleSubmit = () => { if (window.confirm("Möchten Sie die Änderungen wirklich übernehmen?")) { - const url = `CPL?KUEdetail.ACP&SNNA=${name}&SEI01=${ip}&SEI02=${subnet}&SEI03=${gateway}&SNIP1=${ntp1}&SNIP2=${ntp2}&SNIP3=${ntp3}&SNTZ=${zeitzone}&SNAC=${activ}`; + const url = `CPL?KUEdetail.ACP&SNNA=${name}&SEI01=${ip}&SEI02=${subnet}&SEI03=${gateway}&SNIP1=${ntp1}&SNIP2=${ntp2}&SNIP3=${ntp3}&SNTZ=${zeitzone}&SNAC=${active}`; fetch(url) .then((response) => { @@ -149,6 +149,7 @@ function SettingModal({ showModal, onClose }) { className="border border-gray-300 rounded p-2 w-full" value={mac1} onChange={(e) => setMac1(e.target.value)} + disabled />
@@ -160,6 +161,7 @@ function SettingModal({ showModal, onClose }) { className="border border-gray-300 rounded p-2 w-full" value={mac2} onChange={(e) => setMac2(e.target.value)} + disabled />
@@ -203,6 +205,15 @@ function SettingModal({ showModal, onClose }) { value={systemUhr} disabled /> + {/* Button für Systemzeit übernehmen */} +
+ +
@@ -252,12 +263,12 @@ function SettingModal({ showModal, onClose }) { />
- + setActiv(e.target.value)} + value={active} + onChange={(e) => setActive(e.target.value)} />
diff --git a/components/modules/Kue705FO.jsx b/components/modules/Kue705FO.jsx index d2ff9bc..d9827b2 100644 --- a/components/modules/Kue705FO.jsx +++ b/components/modules/Kue705FO.jsx @@ -185,6 +185,14 @@ function Kue705FO({ } }; + // Bestimme, welche Funktion ausgeführt wird, basierend auf dem aktiven Button + const handleRefreshClick = () => { + if (activeButton === "Schleife") { + goLoop(); // Wenn Schleife aktiv ist, starte goLoop + } else if (activeButton === "TDR") { + goTDR(); // Wenn TDR aktiv ist, starte goTDR + } + }; return (
{isModulPresent ? ( @@ -249,8 +257,9 @@ function Kue705FO({
diff --git a/public/CPL/SERVICE/Start.acp b/public/CPL/SERVICE/Start.acp new file mode 100644 index 0000000..324932a --- /dev/null +++ b/public/CPL/SERVICE/Start.acp @@ -0,0 +1 @@ +var last20Messages=<%=SAM01%> \ No newline at end of file diff --git a/public/CPL/SERVICE/System.acp b/public/CPL/SERVICE/System.acp new file mode 100644 index 0000000..94687fb --- /dev/null +++ b/public/CPL/SERVICE/System.acp @@ -0,0 +1,15 @@ +var deviceName="<%=SAN01%>"; +var mac1="<%=SEM01%>"; +var mac2="<%=SEM02%>"; +var ip="<%=SEI01%>"; +var subnet="<%=SES01%>"; +var gateway="<%=SEG01%>"; +var datetime="<%=SCL01%>"; +var opcState="<%=SOS01%>"; +var opcSessions="<%=SOC01%>"; +var opcName="<%=SON01%>"; +var ntp1="<%=STP01%>"; +var ntp2="<%=STP02%>"; +var ntp3="<%=STP03%>"; +var ntpTimezone="<%=STT00%>"; +var ntpActive="<%=STA00%>"; \ No newline at end of file diff --git a/public/CPL/SERVICE/de.acp b/public/CPL/SERVICE/de.acp new file mode 100644 index 0000000..4e1faf7 --- /dev/null +++ b/public/CPL/SERVICE/de.acp @@ -0,0 +1,3 @@ +var de=[<%=DES80%>,<%=DES81%>,<%=DES82%>,<%=DES83%>]; +var counter=[<%=DEC80%>,<%=DEC81%>,<%=DEC82%>,<%=DEC83%>]; +var flutter=[<%=DEF80%>,<%=DEF81%>,<%=DEF82%>,<%=DEF83%>]; \ No newline at end of file diff --git a/public/CPL/SERVICE/kueConfig.acp b/public/CPL/SERVICE/kueConfig.acp new file mode 100644 index 0000000..eb6aaa0 --- /dev/null +++ b/public/CPL/SERVICE/kueConfig.acp @@ -0,0 +1,4 @@ +var kueOnline=[<%=KSO80%>,<%=KSO81%>,<%=KSO82%>,<%=KSO83%>]; +var kueID=[<%=KSI80%>,<%=KSI81%>,<%=KSI82%>,<%=KSI83%>]; +var kueName=[<%=KSA80%>,<%=KSA81%>,<%=KSA82%>,<%=KSA83%>]; +var kueIso=[<%=KIM80%>,<%=KIM81%>,<%=KIM82%>,<%=KIM83%>]; \ No newline at end of file diff --git a/public/CPL/SERVICE/kueData.js b/public/CPL/SERVICE/kueData.js new file mode 100644 index 0000000..21e4449 --- /dev/null +++ b/public/CPL/SERVICE/kueData.js @@ -0,0 +1,25 @@ + +var kueOnline=[<%=KSO80%>,<%=KSO81%>,<%=KSO82%>,<%=KSO83%>]; +var kueIso=[<%=KIM80%>,<%=KIM81%>,<%=KIM82%>,<%=KIM83%>]; +var kueValid=[<%=KIV80%>,<%=KIV81%>,<%=KIV82%>,<%=KIV83%>]; +var kueAlarm1=[<%=KIA80%>,<%=KIA81%>,<%=KIA82%>,<%=KIA83%>]; +var kueAlarm2=[<%=KRA80%>,<%=KRA81%>,<%=KRA82%>,<%=KRA83%>]; +var kueRes=[<%=KRM80%>,<%=KRM81%>,<%=KRM82%>,<%=KRM83%>]; +var kueCableBreak=[<%=KSC80%>,<%=KSC81%>,<%=KSC82%>,<%=KSC83%>]; +var kueGroundFault=[<%=KSG80%>,<%=KSG81%>,<%=KSG82%>,<%=KSG83%>]; +var kueLimit1=[<%=KIG80%>,<%=KIG81%>,<%=KIG82%>,<%=KIG83%>]; +var kueLimit2Low=[<%=KRG80%>,<%=KRG81%>,<%=KRG82%>,<%=KRG83%>]; +var kueLimit2High=[<%=KRH80%>,<%=KRH81%>,<%=KRH82%>,<%=KRH83%>]; +var kueDelay1=[<%=KID80%>,<%=KID81%>,<%=KID82%>,<%=KID83%>]; +var kueLoopInterval=[<%=KRI80%>,<%=KRI81%>,<%=KRI82%>,<%=KRI83%>]; +var kueID=[<%=KSI80%>,<%=KSI81%>,<%=KSI82%>,<%=KSI83%>]; +var kueName=[<%=KSA80%>,<%=KSA81%>,<%=KSA82%>,<%=KSA83%>]; +var kueVersion=[<%=KSV80%>,<%=KSV81%>,<%=KSV82%>,<%=KSV83%>]; +var kueOverflow=[<%=KIW80%>,<%=KIW81%>,<%=KIW82%>,<%=KIW83%>]; +var kue100V=[<%=KSS80%>,<%=KSS81%>,<%=KSS82%>,<%=KSS83%>]; +var kueResidence=[<%=KSN80%>,<%=KSN81%>,<%=KSN82%>,<%=KSN83%>]; +var kueBooting=[<%=KSB80%>,<%=KSB81%>,<%=KSB82%>,<%=KSB83%>]; + + + + diff --git a/public/CPL/SERVICE/kueDetailTdr.acp b/public/CPL/SERVICE/kueDetailTdr.acp new file mode 100644 index 0000000..243f0f5 --- /dev/null +++ b/public/CPL/SERVICE/kueDetailTdr.acp @@ -0,0 +1,17 @@ +var kueOnline=[<%=KSO80%>,<%=KSO81%>,<%=KSO82%>,<%=KSO83%>]; +var kueValid=[<%=KIV80%>,<%=KIV81%>,<%=KIV82%>,<%=KIV83%>]; + + +var kueID=[<%=KSI80%>,<%=KSI81%>,<%=KSI82%>,<%=KSI83%>]; +var kueName=[<%=KSA80%>,<%=KSA81%>,<%=KSA82%>,<%=KSA83%>]; +var kueVersion=[<%=KSV80%>,<%=KSV81%>,<%=KSV82%>,<%=KSV83%>]; + + +var tdrAtten=[<%=KTD80%>,<%=KTD81%>,<%=KTD82%>,<%=KTD83%>]; +var tdrPulse=[<%=KTP80%>,<%=KTP81%>,<%=KTP82%>,<%=KTP83%>]; +var tdrSpeed=[<%=KTS80%>,<%=KTS81%>,<%=KTS82%>,<%=KTS83%>]; +var tdrAmp=[<%=KTA80%>,<%=KTA81%>,<%=KTA82%>,<%=KTA83%>]; +var tdrTrigger=[<%=KTE80%>,<%=KTE81%>,<%=KTE82%>,<%=KTE83%>]; +var tdrLocation=[<%=KTF80%>,<%=KTF81%>,<%=KTF82%>,<%=KTF83%>]; +var tdrActive=[<%=KTX80%>,<%=KTX81%>,<%=KTX82%>,<%=KTX83%>]; +var tdrLast=[<%=KTL80%>,<%=KTL81%>,<%=KTL82%>,<%=KTL83%>]; \ No newline at end of file