feat(kabelname): Anzeige des Kabelnamens statt Bezeichnung unter jedem Modul (Änderungswunsch)

This commit is contained in:
ISA
2025-06-16 14:03:19 +02:00
parent 860ab1d7c2
commit ad73dcf054
7 changed files with 39 additions and 10 deletions

View File

@@ -4,6 +4,21 @@ Alle Änderungen und Versionen des CPLv4.0 Frontends chronologisch dokumentiert.
--- ---
## [1.6.407] 2025-06-16
### Feature: Kabelname statt Bezeichnung
- In `Kue705FO.tsx` wird jetzt **der Kabelname (`kueName`)** unterhalb jedes Moduls angezeigt, statt der bisherigen Kabelbezeichnung (`kueID`)
- Im Einstellungsmodal (`KueEinstellung.tsx`) wurde:
- `kueID` als **readOnly** markiert (nicht mehr beschreibbar)
- Ein neues editierbares Feld für `kueName` hinzugefügt
- Hochkommas `'` werden automatisch entfernt
- Änderungen werden dauerhaft per `&KIA${slot}=${name}` an das CPL-Gerät gesendet
- State & `window.win_kueName` werden synchronisiert, damit Änderungen sofort und dauerhaft angezeigt werden
- Debug-Funktion für `fetch`-Monitoring entfernt
---
## [1.6.403] 2025-05-13 ## [1.6.403] 2025-05-13
### Sicherheit & UI ### Sicherheit & UI

View File

@@ -41,6 +41,7 @@ const Kue705FO: React.FC<Kue705FOProps> = ({
); );
const dispatch = useDispatch(); const dispatch = useDispatch();
const { kueName } = useSelector((state: RootState) => state.kueDataSlice);
const chartRef = useRef(null); const chartRef = useRef(null);
@@ -262,7 +263,7 @@ const Kue705FO: React.FC<Kue705FOProps> = ({
<div className="absolute top-[2.5rem] left-[4.688rem] w-[2.5rem] h-[0.188rem] bg-white z-0"></div> <div className="absolute top-[2.5rem] left-[4.688rem] w-[2.5rem] h-[0.188rem] bg-white z-0"></div>
<div className="absolute bottom-[1.25rem] left-0 right-0 text-black text-[0.625rem] bg-gray-300 p-[0.063rem] text-center"> <div className="absolute bottom-[1.25rem] left-0 right-0 text-black text-[0.625rem] bg-gray-300 p-[0.063rem] text-center">
{currentModulName || `Modul ${slotIndex + 1}`} {kueName?.[slotIndex] || `Modul ${slotIndex + 1}`}
</div> </div>
<div className="absolute bottom-[0.063rem] right-[0.063rem] text-black text-[0.5rem]"> <div className="absolute bottom-[0.063rem] right-[0.063rem] text-black text-[0.5rem]">

View File

@@ -3,6 +3,7 @@ import { setKueData } from "../../../../../redux/slices/kueDataSlice";
export interface OriginalValues { export interface OriginalValues {
kueID: string[]; kueID: string[];
kueName: string[];
isolationsgrenzwerte: number[]; isolationsgrenzwerte: number[];
verzoegerung: number[]; verzoegerung: number[];
untereSchleifenGrenzwerte: number[]; untereSchleifenGrenzwerte: number[];
@@ -13,6 +14,7 @@ export interface OriginalValues {
export interface HandleSaveParams { export interface HandleSaveParams {
ids: string[]; ids: string[];
kueName: string[];
isolationsgrenzwerte: number[]; isolationsgrenzwerte: number[];
verzoegerung: number[]; verzoegerung: number[];
untereSchleifenGrenzwerte: number[]; untereSchleifenGrenzwerte: number[];
@@ -21,6 +23,7 @@ export interface HandleSaveParams {
speicherintervall: number[]; speicherintervall: number[];
originalValues: { originalValues: {
kueID: string[]; kueID: string[];
kueName: string[];
isolationsgrenzwerte: number[]; isolationsgrenzwerte: number[];
verzoegerung: number[]; verzoegerung: number[];
untereSchleifenGrenzwerte: number[]; untereSchleifenGrenzwerte: number[];
@@ -46,6 +49,7 @@ const isDifferent = (a: any, b: any): boolean => {
const handleSave = async ({ const handleSave = async ({
ids, ids,
kueName,
isolationsgrenzwerte, isolationsgrenzwerte,
verzoegerung, verzoegerung,
untereSchleifenGrenzwerte, untereSchleifenGrenzwerte,
@@ -63,6 +67,11 @@ const handleSave = async ({
if (isDifferent(ids[slot], originalValues.kueID[slot])) { if (isDifferent(ids[slot], originalValues.kueID[slot])) {
changesForFile.KID = ids[slot]; changesForFile.KID = ids[slot];
} }
if (isDifferent(kueName[slot], originalValues.kueName[slot])) {
changesForFile.KIA = kueName[slot];
}
if ( if (
isDifferent( isDifferent(
isolationsgrenzwerte[slot], isolationsgrenzwerte[slot],
@@ -111,6 +120,7 @@ const handleSave = async ({
if (isDev) { if (isDev) {
const keyMap: Record<string, string> = { const keyMap: Record<string, string> = {
KID: "win_kueID", KID: "win_kueID",
KIA: "win_kueName",
KL_: "win_kueLimit1", KL_: "win_kueLimit1",
KD_: "win_kueDelay1", KD_: "win_kueDelay1",
KR_: "win_kueLimit2Low", KR_: "win_kueLimit2Low",
@@ -166,6 +176,7 @@ const handleSave = async ({
dispatch( dispatch(
setKueData({ setKueData({
kueID: [...ids], kueID: [...ids],
kueName: [...kueName],
isolationsgrenzwerte: [...isolationsgrenzwerte], isolationsgrenzwerte: [...isolationsgrenzwerte],
verzoegerung: [...verzoegerung], verzoegerung: [...verzoegerung],
untereSchleifenGrenzwerte: [...untereSchleifenGrenzwerte], untereSchleifenGrenzwerte: [...untereSchleifenGrenzwerte],

View File

@@ -1,8 +1,6 @@
// KueEinstellung.tsx final überarbeitet: formData wird direkt nach dem Speichern aktualisiert
"use client"; "use client";
import { useState } from "react"; import { useState, useEffect } from "react";
import { useDispatch, useSelector } from "react-redux"; import { useDispatch, useSelector } from "react-redux";
import type { RootState } from "../../../../../redux/store"; import type { RootState } from "../../../../../redux/store";
import handleSave from "../handlers/handleSave"; import handleSave from "../handlers/handleSave";
@@ -78,8 +76,11 @@ export default function KueEinstellung({
const handleSaveWrapper = async () => { const handleSaveWrapper = async () => {
const updatedKueID = [...kueID]; const updatedKueID = [...kueID];
updatedKueID[slot] = formData.kueID; //updatedKueID[slot] = formData.kueID;
/* if (Object.isFrozen(kueID)) {
console.warn("kueID ist readonly!");
}
*/
const updatedKueName = [...kueName]; const updatedKueName = [...kueName];
updatedKueName[slot] = formData.kueName; updatedKueName[slot] = formData.kueName;
@@ -116,7 +117,7 @@ export default function KueEinstellung({
// 🔧 handleSave aufrufen mit allen Daten // 🔧 handleSave aufrufen mit allen Daten
await handleSave({ await handleSave({
slot, slot,
ids: updatedKueID, ids: kueID,
kueName: updatedKueName, kueName: updatedKueName,
isolationsgrenzwerte: updatedLimit1, isolationsgrenzwerte: updatedLimit1,
verzoegerung: updatedDelay1, verzoegerung: updatedDelay1,
@@ -135,7 +136,7 @@ export default function KueEinstellung({
speicherintervall: memoryInterval, speicherintervall: memoryInterval,
}, },
dispatch, dispatch,
onModulNameChange, onModulNameChange: onModulNameChange ?? (() => {}),
onClose, onClose,
}); });
}; };

View File

@@ -6,5 +6,5 @@
2: Patch oder Hotfix (Bugfixes oder kleine Änderungen). 2: Patch oder Hotfix (Bugfixes oder kleine Änderungen).
*/ */
const webVersion = "1.6.406"; const webVersion = "1.6.407";
export default webVersion; export default webVersion;

View File

@@ -16,7 +16,7 @@ interface KueDataState {
//----------------------- //-----------------------
kueOnline: number[]; kueOnline: number[];
kueID: string[]; kueID: string[];
kueName?: string[]; kueName: string[];
kuePSTmMinus96V: number[]; kuePSTmMinus96V: number[];
kueAlarm1: number[]; kueAlarm1: number[];
kueAlarm2: number[]; kueAlarm2: number[];

View File

@@ -68,6 +68,7 @@ export async function loadWindowVariables(): Promise<{
? { ? {
kueOnline: win.win_kueOnline || [], kueOnline: win.win_kueOnline || [],
kueID: win.win_kueID || [], kueID: win.win_kueID || [],
kueName: win.win_kueName || [],
kuePSTmMinus96V: win.win_kuePSTmMinus96V || [], kuePSTmMinus96V: win.win_kuePSTmMinus96V || [],
kueAlarm1: win.win_kueAlarm1 || [], kueAlarm1: win.win_kueAlarm1 || [],
kueAlarm2: win.win_kueAlarm2 || [], kueAlarm2: win.win_kueAlarm2 || [],