@@ -10534,6 +10544,38 @@ function showTokenHelp(job) {
else { alert(msg); }
}
+
+/* ββ Procurement: Transceiver-Suche ββββββββββββββββββββββββββββββββββββββ */
+async function procTxSearch() {
+ var q = (el('proc-tx-search').value || '').trim();
+ var box = el('proc-tx-results');
+ if (!q) { box.innerHTML = '
Bitte Part-Number oder Name eingeben.
'; return; }
+ box.innerHTML = '
Sucheβ¦
';
+ try {
+ var d = await api('/api/transceivers?q=' + encodeURIComponent(q) + '&limit=25');
+ var rows = d.data || [];
+ if (!rows.length) { box.innerHTML = '
Kein Transceiver gefunden fΓΌr β' + esc(q) + '".
'; return; }
+ var seen = {};
+ var html = '
' + (d.total || rows.length) + ' Treffer β klicken fΓΌr Details (Preise, Anbieter, VerfΓΌgbarkeit, Preisverlauf):
';
+ html += '
';
+ rows.forEach(function(r) {
+ // dedupe by part_number (mehrere OEM-Zeilen)
+ var key = (r.part_number || r.id);
+ if (seen[key]) return; seen[key] = 1;
+ var spd = (typeof fmtSpd === 'function') ? fmtSpd(r.speed_gbps) : (r.speed_gbps + 'G');
+ html += '
'
+ + '' + esc(r.part_number || r.standard_name || 'β') + ''
+ + '' + esc(r.form_factor || '') + ' Β· ' + spd + (r.reach_label ? ' Β· ' + esc(r.reach_label) : '') + ''
+ + '' + esc(r.vendor_name || '') + ''
+ + '
';
+ });
+ html += '
';
+ box.innerHTML = html;
+ } catch (e) {
+ box.innerHTML = '
Suche fehlgeschlagen: ' + esc(e.message) + '
';
+ }
+}
+
async function loadProcurementPulse() {
var pulse = el('ov-proc-pulse');
var moversCard = el('ov-movers-card');