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[];
|
untereSchleifenGrenzwerte: number[];
|
||||||
obereSchleifenGrenzwerte: number[];
|
obereSchleifenGrenzwerte: number[];
|
||||||
schleifenintervall: number[];
|
schleifenintervall: number[];
|
||||||
speicherintervall: number[]; // ✅ NEU hinzugefügt
|
speicherintervall: number[];
|
||||||
originalValues: OriginalValues;
|
originalValues: OriginalValues;
|
||||||
slot: number;
|
slot: number;
|
||||||
dispatch: (action: any) => void;
|
dispatch: (action: any) => void;
|
||||||
@@ -26,7 +26,6 @@ interface HandleSaveParams {
|
|||||||
onClose: () => void;
|
onClose: () => void;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Vergleich: robust für Zahlen und Strings
|
|
||||||
const isDifferent = (a: any, b: any): boolean => {
|
const isDifferent = (a: any, b: any): boolean => {
|
||||||
const aNum = Number(a);
|
const aNum = Number(a);
|
||||||
const bNum = Number(b);
|
const bNum = Number(b);
|
||||||
@@ -87,26 +86,20 @@ const handleSave = async ({
|
|||||||
schleifenintervall[slot],
|
schleifenintervall[slot],
|
||||||
originalValues.schleifenintervall[slot]
|
originalValues.schleifenintervall[slot]
|
||||||
)
|
)
|
||||||
)
|
) {
|
||||||
if (
|
|
||||||
isDifferent(
|
|
||||||
speicherintervall[slot],
|
|
||||||
originalValues.speicherintervall[slot]
|
|
||||||
)
|
|
||||||
) {
|
|
||||||
changesForFile.KME = speicherintervall[slot];
|
|
||||||
}
|
|
||||||
|
|
||||||
{
|
|
||||||
changesForFile.KRI = schleifenintervall[slot];
|
changesForFile.KRI = schleifenintervall[slot];
|
||||||
}
|
}
|
||||||
|
if (
|
||||||
|
isDifferent(speicherintervall[slot], originalValues.speicherintervall[slot])
|
||||||
|
) {
|
||||||
|
changesForFile.KLO = speicherintervall[slot];
|
||||||
|
}
|
||||||
|
|
||||||
if (Object.keys(changesForFile).length > 0) {
|
if (Object.keys(changesForFile).length > 0) {
|
||||||
const isDev = window.location.hostname === "localhost";
|
const isDev = window.location.hostname === "localhost";
|
||||||
const isProd = !isDev;
|
const isProd = !isDev;
|
||||||
|
|
||||||
if (isDev) {
|
if (isDev) {
|
||||||
// Entwicklung: interne Next.js API
|
|
||||||
for (const [key, value] of Object.entries(changesForFile)) {
|
for (const [key, value] of Object.entries(changesForFile)) {
|
||||||
const params = new URLSearchParams({
|
const params = new URLSearchParams({
|
||||||
key: `win_kue${key}`,
|
key: `win_kue${key}`,
|
||||||
@@ -127,11 +120,10 @@ const handleSave = async ({
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (isProd) {
|
if (isProd) {
|
||||||
// Produktion: echte CPL-Hardware CGI-Aufruf
|
|
||||||
const cgiParams = Object.entries(changesForFile)
|
const cgiParams = Object.entries(changesForFile)
|
||||||
.map(([key, value]) => `${key}${slot}=${encodeURIComponent(value)}`)
|
.map(([key, value]) => `${key}${slot}=${encodeURIComponent(value)}`)
|
||||||
.join(";");
|
.join(";");
|
||||||
const url = `/CPL?KUEdetail.ACP&${cgiParams}`;
|
const url = `/CPL?/kabelueberwachung.html&${cgiParams}`;
|
||||||
|
|
||||||
console.log("📡 Sende an CPL (CGI) →", url);
|
console.log("📡 Sende an CPL (CGI) →", url);
|
||||||
|
|
||||||
@@ -150,7 +142,6 @@ const handleSave = async ({
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Redux und UI aktualisieren
|
|
||||||
onModulNameChange(ids[slot]);
|
onModulNameChange(ids[slot]);
|
||||||
|
|
||||||
dispatch(
|
dispatch(
|
||||||
@@ -161,6 +152,7 @@ const handleSave = async ({
|
|||||||
untereSchleifenGrenzwerte: [...untereSchleifenGrenzwerte],
|
untereSchleifenGrenzwerte: [...untereSchleifenGrenzwerte],
|
||||||
obereSchleifenGrenzwerte: [...obereSchleifenGrenzwerte],
|
obereSchleifenGrenzwerte: [...obereSchleifenGrenzwerte],
|
||||||
schleifenintervall: [...schleifenintervall],
|
schleifenintervall: [...schleifenintervall],
|
||||||
|
memoryInterval: [...speicherintervall],
|
||||||
})
|
})
|
||||||
);
|
);
|
||||||
} else {
|
} else {
|
||||||
|
|||||||
@@ -102,25 +102,25 @@ const GeneralSettings: React.FC = () => {
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
{/* Systemzeit */}
|
{/* Systemzeit */}
|
||||||
<div className="flex flex-col md:flex-row md:items-center gap-1 col-span-2">
|
<div className="col-span-2">
|
||||||
<div className="flex-1">
|
<label className="block text-xs md:text-sm font-medium mb-1">
|
||||||
<label className="block text-xs md:text-sm font-medium">
|
Systemzeit:
|
||||||
Systemzeit:
|
</label>
|
||||||
</label>
|
<div className="flex flex-row gap-2">
|
||||||
<input
|
<input
|
||||||
type="text"
|
type="text"
|
||||||
className="border border-gray-300 rounded h-8 p-1 w-full text-xs"
|
className="border border-gray-300 rounded h-8 p-1 w-full text-xs"
|
||||||
value={systemUhr}
|
value={systemUhr}
|
||||||
disabled
|
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>
|
</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>
|
</div>
|
||||||
|
|
||||||
{/* Netzwerk */}
|
{/* Netzwerk */}
|
||||||
@@ -161,7 +161,7 @@ const GeneralSettings: React.FC = () => {
|
|||||||
{isAdminLoggedIn ? (
|
{isAdminLoggedIn ? (
|
||||||
<button
|
<button
|
||||||
type="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}
|
onClick={logoutAdmin}
|
||||||
>
|
>
|
||||||
Admin abmelden
|
Admin abmelden
|
||||||
@@ -185,7 +185,7 @@ const GeneralSettings: React.FC = () => {
|
|||||||
/>
|
/>
|
||||||
<button
|
<button
|
||||||
type="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}
|
onClick={handleLogin}
|
||||||
>
|
>
|
||||||
Admin anmelden
|
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">
|
<div className="col-span-2 flex flex-wrap md:justify-between gap-1 mt-2">
|
||||||
<button
|
<button
|
||||||
type="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()}
|
onClick={() => handleReboot()}
|
||||||
>
|
>
|
||||||
Neustart CPL
|
Neustart CPL
|
||||||
@@ -213,7 +213,7 @@ const GeneralSettings: React.FC = () => {
|
|||||||
|
|
||||||
<button
|
<button
|
||||||
type="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={() =>
|
onClick={() =>
|
||||||
handleGeneralSubmit(
|
handleGeneralSubmit(
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -6,5 +6,5 @@
|
|||||||
2: Patch oder Hotfix (Bugfixes oder kleine Änderungen).
|
2: Patch oder Hotfix (Bugfixes oder kleine Änderungen).
|
||||||
|
|
||||||
*/
|
*/
|
||||||
const webVersion = "1.6.279";
|
const webVersion = "1.6.280";
|
||||||
export default webVersion;
|
export default webVersion;
|
||||||
|
|||||||
Reference in New Issue
Block a user