fix: Speicherintervall (KLO) wird jetzt korrekt gesendet und gespeichert
- Fehler behoben: Speicherintervall wurde nicht an CGI gesendet, wenn Schleifenintervall unverändert blieb - Redux-Dispatch korrigiert: speicherintervall → memoryInterval angepasst
This commit is contained in:
@@ -18,7 +18,7 @@ interface HandleSaveParams {
|
||||
untereSchleifenGrenzwerte: number[];
|
||||
obereSchleifenGrenzwerte: number[];
|
||||
schleifenintervall: number[];
|
||||
speicherintervall: number[]; // ✅ NEU hinzugefügt
|
||||
speicherintervall: number[];
|
||||
originalValues: OriginalValues;
|
||||
slot: number;
|
||||
dispatch: (action: any) => void;
|
||||
@@ -26,7 +26,6 @@ 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);
|
||||
@@ -87,26 +86,20 @@ const handleSave = async ({
|
||||
schleifenintervall[slot],
|
||||
originalValues.schleifenintervall[slot]
|
||||
)
|
||||
)
|
||||
if (
|
||||
isDifferent(
|
||||
speicherintervall[slot],
|
||||
originalValues.speicherintervall[slot]
|
||||
)
|
||||
) {
|
||||
changesForFile.KME = speicherintervall[slot];
|
||||
}
|
||||
|
||||
{
|
||||
) {
|
||||
changesForFile.KRI = schleifenintervall[slot];
|
||||
}
|
||||
if (
|
||||
isDifferent(speicherintervall[slot], originalValues.speicherintervall[slot])
|
||||
) {
|
||||
changesForFile.KLO = speicherintervall[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: `win_kue${key}`,
|
||||
@@ -127,11 +120,10 @@ const handleSave = async ({
|
||||
}
|
||||
|
||||
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}`;
|
||||
const url = `/CPL?/kabelueberwachung.html&${cgiParams}`;
|
||||
|
||||
console.log("📡 Sende an CPL (CGI) →", url);
|
||||
|
||||
@@ -150,7 +142,6 @@ const handleSave = async ({
|
||||
}
|
||||
}
|
||||
|
||||
// Redux und UI aktualisieren
|
||||
onModulNameChange(ids[slot]);
|
||||
|
||||
dispatch(
|
||||
@@ -161,6 +152,7 @@ const handleSave = async ({
|
||||
untereSchleifenGrenzwerte: [...untereSchleifenGrenzwerte],
|
||||
obereSchleifenGrenzwerte: [...obereSchleifenGrenzwerte],
|
||||
schleifenintervall: [...schleifenintervall],
|
||||
memoryInterval: [...speicherintervall],
|
||||
})
|
||||
);
|
||||
} else {
|
||||
|
||||
@@ -102,25 +102,25 @@ const GeneralSettings: React.FC = () => {
|
||||
</div>
|
||||
|
||||
{/* Systemzeit */}
|
||||
<div className="flex flex-col md:flex-row md:items-center gap-1 col-span-2">
|
||||
<div className="flex-1">
|
||||
<label className="block text-xs md:text-sm font-medium">
|
||||
Systemzeit:
|
||||
</label>
|
||||
<div className="col-span-2">
|
||||
<label className="block text-xs md:text-sm font-medium mb-1">
|
||||
Systemzeit:
|
||||
</label>
|
||||
<div className="flex flex-row gap-2">
|
||||
<input
|
||||
type="text"
|
||||
className="border border-gray-300 rounded h-8 p-1 w-full text-xs"
|
||||
value={systemUhr}
|
||||
disabled
|
||||
/>
|
||||
<button
|
||||
type="button"
|
||||
className="bg-littwin-blue text-white px-4 py-2 h-8 text-xs rounded whitespace-nowrap"
|
||||
onClick={() => handleSetDateTime()}
|
||||
>
|
||||
Systemzeit übernehmen
|
||||
</button>
|
||||
</div>
|
||||
<button
|
||||
type="button"
|
||||
className="bg-littwin-blue text-white px-2 py-1 rounded w-full md:w-auto text-xs"
|
||||
onClick={() => handleSetDateTime()}
|
||||
>
|
||||
Systemzeit übernehmen
|
||||
</button>
|
||||
</div>
|
||||
|
||||
{/* Netzwerk */}
|
||||
@@ -161,7 +161,7 @@ const GeneralSettings: React.FC = () => {
|
||||
{isAdminLoggedIn ? (
|
||||
<button
|
||||
type="button"
|
||||
className="bg-red-500 text-white px-2 py-1 rounded text-xs"
|
||||
className="bg-littwin-blue text-white px-4 py-2 h-8 text-xs rounded whitespace-nowrap"
|
||||
onClick={logoutAdmin}
|
||||
>
|
||||
Admin abmelden
|
||||
@@ -185,7 +185,7 @@ const GeneralSettings: React.FC = () => {
|
||||
/>
|
||||
<button
|
||||
type="button"
|
||||
className="flex flex-row bg-littwin-blue text-white px-1 rounded text-xs whitespace-nowrap justify-center items-center "
|
||||
className="bg-littwin-blue text-white px-4 py-2 h-8 text-xs rounded whitespace-nowrap"
|
||||
onClick={handleLogin}
|
||||
>
|
||||
Admin anmelden
|
||||
@@ -205,7 +205,7 @@ const GeneralSettings: React.FC = () => {
|
||||
<div className="col-span-2 flex flex-wrap md:justify-between gap-1 mt-2">
|
||||
<button
|
||||
type="button"
|
||||
className="bg-littwin-blue text-white px-2 py-1 rounded text-xs w-full md:w-auto"
|
||||
className="bg-littwin-blue text-white px-4 py-2 h-8 text-xs rounded whitespace-nowrap"
|
||||
onClick={() => handleReboot()}
|
||||
>
|
||||
Neustart CPL
|
||||
@@ -213,7 +213,7 @@ const GeneralSettings: React.FC = () => {
|
||||
|
||||
<button
|
||||
type="button"
|
||||
className="bg-littwin-blue text-white px-2 py-1 rounded text-xs w-full md:w-auto"
|
||||
className="bg-littwin-blue text-white px-4 py-2 h-8 text-xs rounded whitespace-nowrap"
|
||||
onClick={() =>
|
||||
handleGeneralSubmit(
|
||||
{
|
||||
|
||||
@@ -6,5 +6,5 @@
|
||||
2: Patch oder Hotfix (Bugfixes oder kleine Änderungen).
|
||||
|
||||
*/
|
||||
const webVersion = "1.6.279";
|
||||
const webVersion = "1.6.280";
|
||||
export default webVersion;
|
||||
|
||||
Reference in New Issue
Block a user