fix: CGI-API-Aufruf in Produktionsumgebung per fetch statt location.href

- CGI-Endpunkte der CPL-Hardware werden jetzt per fetch im Hintergrund aufgerufen
- Kein Tab-Wechsel oder Seitenreload mehr bei "Speichern"
- Entwicklung nutzt weiterhin Next.js API-Routen
- Nutzer erhält einheitliches Feedback per alert
This commit is contained in:
ISA
2025-04-22 13:33:58 +02:00
parent 44ae17f6e8
commit c35826e1a0
6 changed files with 46 additions and 14 deletions

View File

@@ -24,6 +24,7 @@ interface HandleSaveParams {
onClose: () => void;
}
// Vergleich: robust für Zahlen und Strings
const isDifferent = (a: any, b: any): boolean => {
const aNum = Number(a);
const bNum = Number(b);
@@ -49,7 +50,7 @@ const handleSave = async ({
const changesForFile: Record<string, any> = {};
if (isDifferent(ids[slot], originalValues.kueID[slot])) {
changesForFile.win_kueID = ids[slot];
changesForFile.KID = ids[slot];
}
if (
isDifferent(
@@ -57,10 +58,10 @@ const handleSave = async ({
originalValues.isolationsgrenzwerte[slot]
)
) {
changesForFile.win_kueLimit1 = isolationsgrenzwerte[slot];
changesForFile.KL_ = isolationsgrenzwerte[slot];
}
if (isDifferent(verzoegerung[slot], originalValues.verzoegerung[slot])) {
changesForFile.win_kueDelay1 = verzoegerung[slot];
changesForFile.KD_ = verzoegerung[slot];
}
if (
isDifferent(
@@ -68,7 +69,7 @@ const handleSave = async ({
originalValues.untereSchleifenGrenzwerte[slot]
)
) {
changesForFile.win_kueLimit2Low = untereSchleifenGrenzwerte[slot];
changesForFile.KR_ = untereSchleifenGrenzwerte[slot];
}
if (
isDifferent(
@@ -76,7 +77,7 @@ const handleSave = async ({
originalValues.obereSchleifenGrenzwerte[slot]
)
) {
changesForFile.win_kueLimit2High = obereSchleifenGrenzwerte[slot];
changesForFile.KRO_ = obereSchleifenGrenzwerte[slot];
}
if (
isDifferent(
@@ -84,19 +85,22 @@ const handleSave = async ({
originalValues.schleifenintervall[slot]
)
) {
changesForFile.win_kueLoopInterval = schleifenintervall[slot];
changesForFile.KRI = schleifenintervall[slot];
}
if (Object.keys(changesForFile).length > 0) {
const isDev = window.location.hostname === "localhost";
const isProd = !isDev;
if (isDev) {
// Entwicklung: interne Next.js API
for (const [key, value] of Object.entries(changesForFile)) {
const params = new URLSearchParams({
key,
key: `win_kue${key}`,
value: String(value),
slot: String(slot),
});
const response = await fetch(
`/api/cpl/updateKueDataAPIHandler?${params.toString()}`
);
@@ -105,9 +109,35 @@ const handleSave = async ({
return;
}
}
alert("✅ Daten erfolgreich gespeichert!");
}
alert("✅ Daten erfolgreich gespeichert!");
if (isProd) {
// Produktion: echte CPL-Hardware CGI-Aufruf
const cgiParams = Object.entries(changesForFile)
.map(([key, value]) => `${key}${slot}=${encodeURIComponent(value)}`)
.join(";");
const url = `/CPL?KUEdetail.ACP&${cgiParams}`;
console.log("📡 Sende an CPL (CGI) →", url);
try {
const response = await fetch(url);
if (!response.ok) {
alert("❌ Fehler beim Senden an die CPL-Hardware");
return;
}
alert("✅ Daten erfolgreich an die CPL-Hardware gesendet!");
} catch (error) {
console.error("❌ Netzwerkfehler beim CPL-Aufruf:", error);
alert("❌ Netzwerkfehler beim Senden an die CPL-Hardware");
return;
}
}
// Redux und UI aktualisieren
onModulNameChange(ids[slot]);
dispatch(