Ersetzt durch added, farben

This commit is contained in:
2026-02-18 10:22:44 +01:00
parent 441ba313aa
commit 58325e8583
6 changed files with 82 additions and 16 deletions

View File

@@ -6,4 +6,5 @@ Ben8 (Deutscher Text)
Hersteller
Text -> Text aus der tabelle TEXT durch TextId verknüpft
PrsVK -> Aus Tabelle TSSAEF verknüpft durch Teil
Ersatz (Ersetzte durch) -> Aus Tabelle TSSAEF, Spalte Ersatz

View File

@@ -207,8 +207,10 @@ server.setRequestHandler(CallToolRequestSchema, async (request) => {
t.Ben7,
t.Ben8,
t.Hersteller,
t.Stat,
txt.Text AS [Text],
ts.PrsVk AS PrsVK
ts.PrsVk AS PrsVK,
ts.Ersatz AS Ersatz
FROM TEILE t WITH (NOLOCK)
OUTER APPLY (
SELECT TOP 1 [Text]
@@ -217,7 +219,7 @@ server.setRequestHandler(CallToolRequestSchema, async (request) => {
ORDER BY LfdNr
) txt
OUTER APPLY (
SELECT TOP 1 PrsVk
SELECT TOP 1 PrsVk, Ersatz
FROM TSSAEF WITH (NOLOCK)
WHERE Teil = t.Teil
ORDER BY ISN

View File

@@ -160,12 +160,40 @@
}
.record {
background: #f9f9f9;
padding: 15px;
display: flex;
margin-bottom: 10px;
border-radius: 6px;
border-left: 4px solid #667eea;
overflow: hidden;
background: #f9f9f9;
}
.record-status-bar {
width: 16px;
flex-shrink: 0;
display: flex;
align-items: center;
justify-content: center;
padding: 8px 0;
}
.record-status-label {
writing-mode: vertical-rl;
text-orientation: mixed;
transform: rotate(180deg);
color: rgba(255,255,255,0.95);
font-size: 11px;
font-weight: 600;
white-space: nowrap;
letter-spacing: 0.5px;
}
.record-body {
flex: 1;
padding: 15px;
}
/* Status-Farben (siehe status.txt): aktiv=grün, inaktiv/löschbar=rot, prüfbar=orange, pseudoteil=grün */
.record-status-bar.record--aktiv { background: #2e7d32; }
.record-status-bar.record--inaktiv { background: #c62828; }
.record-status-bar.record--loeschbar { background: #c62828; }
.record-status-bar.record--pruefbar { background: #e65100; }
.record-status-bar.record--pseudoteil { background: #2e7d32; }
.record-field {
display: flex;
@@ -396,11 +424,37 @@
{ key: 'Ben8', label: 'Deutscher Text' },
{ key: 'Hersteller', label: 'Hersteller' },
{ key: 'Text', label: 'Zusatztext' },
{ key: 'PrsVK', label: 'Verkaufspreis in €' }
{ key: 'PrsVK', label: 'Verkaufspreis in €' },
{ key: 'Ersatz', label: 'Ersetzt durch' }
];
function getStatusClass(stat) {
const s = (stat == null ? '' : String(stat).trim());
if (s === 'i') return 'record--inaktiv';
if (s === 'l') return 'record--loeschbar';
if (s === 'L') return 'record--pruefbar';
if (s === 'p') return 'record--pseudoteil';
return 'record--aktiv'; // "" oder leer = aktiv
}
function getStatusLabel(stat) {
const s = (stat == null ? '' : String(stat).trim());
if (s === 'i') return 'Inaktiv';
if (s === 'l') return 'Löschbar';
if (s === 'L') return 'Prüfbar';
if (s === 'p') return 'Pseudoteil';
return 'Aktiv';
}
function renderRecord(record) {
let html = '<div class="record">';
const statusClass = getStatusClass(record.Stat);
const statusLabel = getStatusLabel(record.Stat);
let html = `
<div class="record">
<div class="record-status-bar ${statusClass}">
<span class="record-status-label">${escapeHtml(statusLabel)}</span>
</div>
<div class="record-body">`;
for (const { key, label } of DISPLAY_COLUMNS) {
if (!(key in record)) continue;
const value = record[key];
@@ -409,10 +463,11 @@
<div class="record-field">
<span class="field-name">${escapeHtml(label)}:</span>
<span class="field-value">${displayValue}</span>
</div>
`;
</div>`;
}
html += '</div>';
html += `
</div>
</div>`;
return html;
}

View File

@@ -1,4 +1,4 @@
<!DOCTYPE html>
#<!DOCTYPE html>
<html lang="de">
<head>
<meta charset="UTF-8">

View File

@@ -20,8 +20,8 @@ const TEILE_SEARCH_COLUMNS = [
'Hersteller'
];
// Ausgabe-Spalten für Suchergebnisse (nur diese 8 Felder, siehe Spalten.txt)
// Text aus TEXT (TEILE.MemoID = TEXT.TextId), PrsVK aus TSSAEF (Teil = Teil)
// Ausgabe-Spalten für Suchergebnisse (siehe Spalten.txt)
// Text aus TEXT (TEILE.MemoID = TEXT.TextId), PrsVK + Ersatz aus TSSAEF (Teil = Teil)
const TEILE_OUTPUT_COLUMNS = [
'Teil',
'Bez',
@@ -30,7 +30,8 @@ const TEILE_OUTPUT_COLUMNS = [
'Ben8',
'Hersteller',
'Text', // aus Tabelle TEXT
'PrsVK' // aus Tabelle TSSAEF
'PrsVK', // aus Tabelle TSSAEF
'Ersatz' // aus Tabelle TSSAEF (Ersetzte durch)
];
const SEARCH_CONFIG = [
@@ -100,8 +101,10 @@ const fullTextSearch = async (searchTerm) => {
t.Ben7,
t.Ben8,
t.Hersteller,
t.Stat,
txt.Text AS [Text],
ts.PrsVk AS PrsVK
ts.PrsVk AS PrsVK,
ts.Ersatz AS Ersatz
FROM [${tableConfig.tableName}] t WITH (NOLOCK)
OUTER APPLY (
SELECT TOP 1 [Text]
@@ -110,7 +113,7 @@ const fullTextSearch = async (searchTerm) => {
ORDER BY LfdNr
) txt
OUTER APPLY (
SELECT TOP 1 PrsVk
SELECT TOP 1 PrsVk, Ersatz
FROM TSSAEF WITH (NOLOCK)
WHERE Teil = t.Teil
ORDER BY ISN

5
status.txt Normal file
View File

@@ -0,0 +1,5 @@
i = inaktiv -> rot
"" = aktiv -> grün
L = prüfbar -> orange
l = löschbar -> rot
p = pseudoteil -> grün