Update form Summary

This commit is contained in:
nguyentrungthat 2026-05-12 14:22:45 +07:00
parent f4c07fa318
commit 91b2bdba7b
3 changed files with 50 additions and 49 deletions

View File

@ -1918,11 +1918,6 @@ Ports Missing/Down: ${missing.length}\n\n`
snapConfig: LineConfig snapConfig: LineConfig
snapPhysical: PhysicalPortTest snapPhysical: PhysicalPortTest
reason: string reason: string
outputTestLog: string
userTest: {
dpelp: { name: string; time: number }
physical: { name: string; time: number }
}
}) => { }) => {
if (this.debounceSendSummaryReport) clearTimeout(this.debounceSendSummaryReport) if (this.debounceSendSummaryReport) clearTimeout(this.debounceSendSummaryReport)
const timeZone = process.env.TIME_ZONE || 'Australia/Sydney' const timeZone = process.env.TIME_ZONE || 'Australia/Sydney'
@ -1960,7 +1955,7 @@ Ports Missing/Down: ${missing.length}\n\n`
const aiIssue = issues.length > 0 ? issues.join('\n') : '' const aiIssue = issues.length > 0 ? issues.join('\n') : ''
let summaryStatus = 'PASS' let summaryStatus = 'PASS'
const match = aiIssue.match(/^RESULT:\s*(PASS WITH WARNING|PASS|FAIL|INSUFFICIENT DATA)/im) const match = aiIssue.match(/RESULT:\s*(PASS WITH WARNING|PASS|FAIL|INSUFFICIENT DATA)/im)
if (match) { if (match) {
const status = match[1] const status = match[1]
summaryStatus = status summaryStatus = status
@ -2016,6 +2011,7 @@ Ports Missing/Down: ${missing.length}\n\n`
const productPN = escapeHtml(String(config?.inventory?.pid || '')) const productPN = escapeHtml(String(config?.inventory?.pid || ''))
const productSN = escapeHtml(String(config?.inventory?.sn || '')) const productSN = escapeHtml(String(config?.inventory?.sn || ''))
const productVid = escapeHtml(String(config?.inventory?.vid || '')) const productVid = escapeHtml(String(config?.inventory?.vid || ''))
const iosName = escapeHtml(String(dataShowVersion?.SOFTWARE_IMAGE || ''))
const iosVersion = escapeHtml(String(dataShowVersion?.VERSION || '')) const iosVersion = escapeHtml(String(dataShowVersion?.VERSION || ''))
const macAddress = escapeHtml(String(dataShowVersion?.MAC_ADDRESS || '')) const macAddress = escapeHtml(String(dataShowVersion?.MAC_ADDRESS || ''))
const memDisplay = escapeHtml(memText !== '—' ? memText : '-') const memDisplay = escapeHtml(memText !== '—' ? memText : '-')
@ -2153,7 +2149,7 @@ Ports Missing/Down: ${missing.length}\n\n`
<tr><td style="padding-bottom:10px;"> <tr><td style="padding-bottom:10px;">
<table cellpadding="0" cellspacing="0" border="0" width="100%"> <table cellpadding="0" cellspacing="0" border="0" width="100%">
<tr> <tr>
<td width="50%" valign="top" style="padding-right:5px;"> <td width="40%" valign="top" style="padding-right:5px;">
<table cellpadding="0" cellspacing="0" border="0" height="170px" width="100%" style="background:#fff;border:1px solid #e5e7eb;border-radius:10px;border-collapse:separate; font-size:14px;"> <table cellpadding="0" cellspacing="0" border="0" height="170px" width="100%" style="background:#fff;border:1px solid #e5e7eb;border-radius:10px;border-collapse:separate; font-size:14px;">
<tr><td style="padding:16px 20px;"> <tr><td style="padding:16px 20px;">
<div style="font-size:11px;font-weight:700;text-transform:uppercase;letter-spacing:.8px;color:#9ca3af;padding-bottom:7px;border-bottom:1px solid #f0f1f3;margin-bottom:8px;">Product Info</div> <div style="font-size:11px;font-weight:700;text-transform:uppercase;letter-spacing:.8px;color:#9ca3af;padding-bottom:7px;border-bottom:1px solid #f0f1f3;margin-bottom:8px;">Product Info</div>
@ -2166,19 +2162,19 @@ Ports Missing/Down: ${missing.length}\n\n`
</td></tr> </td></tr>
</table> </table>
</td> </td>
<td width="50%" valign="top" style="padding-left:5px;"> <td width="60%" valign="top" style="padding-left:5px;">
<table cellpadding="0" cellspacing="0" border="0" height="170px" width="100%" style="background:#fff;border:1px solid #e5e7eb;border-radius:10px;border-collapse:separate;"> <table cellpadding="0" cellspacing="0" border="0" height="170px" width="100%" style="background:#fff;border:1px solid #e5e7eb;border-radius:10px;border-collapse:separate;">
<tr><td style="padding:16px 20px;"> <tr><td style="padding:16px 20px;">
<div style="font-size:11px;font-weight:700;text-transform:uppercase;letter-spacing:.8px;color:#9ca3af;padding-bottom:7px;border-bottom:1px solid #f0f1f3;margin-bottom:8px;">Technical Specs</div> <div style="font-size:11px;font-weight:700;text-transform:uppercase;letter-spacing:.8px;color:#9ca3af;padding-bottom:7px;border-bottom:1px solid #f0f1f3;margin-bottom:8px;">Technical Specs</div>
<table cellpadding="0" cellspacing="0" border="0" width="100%" style="font-size:11px;"> <table cellpadding="0" cellspacing="0" border="0" width="100%" style="font-size:11px;">
<tr> <tr>
<th align="left" style="font-size:9px;text-transform:uppercase;color:#9ca3af;padding:0 0 6px 0;border-bottom:1px solid #f0f1f3;">Specification</th> <th align="left" style="font-size:9px;text-transform:uppercase;color:#9ca3af;padding:0 0 6px 0;border-bottom:1px solid #f0f1f3;">Specification</th>
<th align="left" style="font-size:9px;text-transform:uppercase;color:#9ca3af;padding:0 0 6px 0;border-bottom:1px solid #f0f1f3;">Actual</th> <th align="left" style="font-size:9px;text-transform:uppercase;color:#9ca3af;padding:0 0 6px 0;border-bottom:1px solid #f0f1f3;text-align:center;">Actual</th>
<th align="left" style="font-size:9px;text-transform:uppercase;color:#9ca3af;padding:0 0 6px 0;border-bottom:1px solid #f0f1f3;">Default</th> <th align="left" style="font-size:9px;text-transform:uppercase;color:#9ca3af;padding:0 0 6px 0;border-bottom:1px solid #f0f1f3;">Default</th>
</tr> </tr>
<tr> <tr>
<td style="padding:6px 0;border-bottom:1px dashed #f0f1f3;font-weight:600;color:#5f6978;">IOS-XE Version</td> <td style="padding:6px 0;border-bottom:1px dashed #f0f1f3;font-weight:600;color:#5f6978;">IOS-XE Version</td>
<td style="padding:6px 0;border-bottom:1px dashed #f0f1f3;font-weight:700;font-family:Consolas,monospace;">${iosVersion}</td> <td style="padding:6px 0;border-bottom:1px dashed #f0f1f3;font-weight:700;font-family:Consolas,monospace;">${iosName + ' ' + iosVersion}</td>
<td style="padding:6px 0;border-bottom:1px dashed #f0f1f3;font-weight:500;color:#9ca3af;font-family:Consolas,monospace;font-style:italic;">${'N/A'}</td> <td style="padding:6px 0;border-bottom:1px dashed #f0f1f3;font-weight:500;color:#9ca3af;font-family:Consolas,monospace;font-style:italic;">${'N/A'}</td>
</tr> </tr>
<tr> <tr>
@ -2210,24 +2206,28 @@ Ports Missing/Down: ${missing.length}\n\n`
</td></tr> </td></tr>
<!-- Receiving & Inspection Notes --> <!-- Receiving & Inspection Notes -->
<tr><td style="display: none; padding-bottom:10px;"> <tr><td style="padding-bottom:10px;">
<table cellpadding="0" cellspacing="0" border="0" width="100%" style="background:#fff;border:1px solid #e5e7eb;border-radius:10px;border-collapse:separate;"> <table cellpadding="0" cellspacing="0" border="0" width="100%" style="background:#fff;border:1px solid #e5e7eb;border-radius:10px;border-collapse:separate;">
<tr><td style="padding:16px 20px;"> <tr><td style="padding:16px 20px;">
<div style="font-size:11px;font-weight:700;text-transform:uppercase;letter-spacing:.8px;color:#9ca3af;padding-bottom:7px;border-bottom:1px solid #f0f1f3;margin-bottom:10px;">Receiving &amp; Inspection Notes</div> <div style="font-size:11px;font-weight:700;text-transform:uppercase;letter-spacing:.8px;color:#9ca3af;padding-bottom:7px;border-bottom:1px solid #f0f1f3;margin-bottom:10px;">Receiving &amp; Inspection Notes</div>
<div style="padding:10px 14px;background:#fffbeb;border-left:3px solid #f59e0b;border-radius:0 6px 6px 0;font-size:12px;color:#92400e;margin-bottom:8px;"> <div style="padding:10px 14px;background:#fffbeb;border-left:3px solid #f59e0b;border-radius:0 6px 6px 0;font-size:12px;color:#92400e;margin-bottom:8px;">
<div style="font-weight:700;margin-bottom:4px;font-size:11px;">&#9888; Warning from Warehouse</div> <div style="font-weight:700;margin-bottom:4px;font-size:11px;">&#9888; Warning from Warehouse</div>
<p style="margin:0;">Box arrived with slight indentation on the left corner. Internal foam was still intact. Serial number on box was partially obscured by shipping label but verified upon unboxing.</p> <p style="display:none; margin:0;">Box arrived with slight indentation on the left corner. Internal foam was still intact. Serial number on box was partially obscured by shipping label but verified upon unboxing.</p>
<p style="padding:6px 0;border-bottom:1px dashed #f0f1f3;font-weight:600;color:#5f6978; font-size:11px; font-style:italic;">Not Available</p>
</div> </div>
<div style="padding:10px 14px;background:#f9fafb;border-left:3px solid #e5e7eb;border-radius:0 6px 6px 0;font-size:12px;color:#5f6978;"> <div style="padding:10px 14px;background:#f9fafb;border-left:3px solid #e5e7eb;border-radius:0 6px 6px 0;font-size:12px;color:#5f6978;">
<div style="font-weight:700;margin-bottom:4px;font-size:11px;">Accessory Checklist</div> <div style="font-weight:700;margin-bottom:4px;font-size:11px;">Accessory Checklist</div>
<table cellpadding="0" cellspacing="0" border="0" style="margin-top:6px;"> <table cellpadding="0" cellspacing="0" border="0" style="margin-top:6px;">
<tr> <tr style="display:none;">
<td style="padding:0 4px 0 0;"><span style="display:inline-block;padding:3px 10px;background:#f0fdf4;border:1px solid #bbf7d0;border-radius:4px;font-size:11px;font-weight:600;color:#166534;"><span style="display:inline-block;width:6px;height:6px;border-radius:50%;background:#10b981;margin-right:5px;vertical-align:middle;"></span>Rackmount</span></td> <td style="padding:0 4px 0 0;"><span style="display:inline-block;padding:3px 10px;background:#f0fdf4;border:1px solid #bbf7d0;border-radius:4px;font-size:11px;font-weight:600;color:#166534;"><span style="display:inline-block;width:6px;height:6px;border-radius:50%;background:#10b981;margin-right:5px;vertical-align:middle;"></span>Rackmount</span></td>
<td style="padding:0 4px;"><span style="display:inline-block;padding:3px 10px;background:#f0fdf4;border:1px solid #bbf7d0;border-radius:4px;font-size:11px;font-weight:600;color:#166534;"><span style="display:inline-block;width:6px;height:6px;border-radius:50%;background:#10b981;margin-right:5px;vertical-align:middle;"></span>PSU (Internal)</span></td> <td style="padding:0 4px;"><span style="display:inline-block;padding:3px 10px;background:#f0fdf4;border:1px solid #bbf7d0;border-radius:4px;font-size:11px;font-weight:600;color:#166534;"><span style="display:inline-block;width:6px;height:6px;border-radius:50%;background:#10b981;margin-right:5px;vertical-align:middle;"></span>PSU (Internal)</span></td>
<td style="padding:0 4px;"><span style="display:inline-block;padding:3px 10px;background:#f0fdf4;border:1px solid #bbf7d0;border-radius:4px;font-size:11px;font-weight:600;color:#166534;"><span style="display:inline-block;width:6px;height:6px;border-radius:50%;background:#10b981;margin-right:5px;vertical-align:middle;"></span>Console Cable</span></td> <td style="padding:0 4px;"><span style="display:inline-block;padding:3px 10px;background:#f0fdf4;border:1px solid #bbf7d0;border-radius:4px;font-size:11px;font-weight:600;color:#166534;"><span style="display:inline-block;width:6px;height:6px;border-radius:50%;background:#10b981;margin-right:5px;vertical-align:middle;"></span>Console Cable</span></td>
<td style="padding:0 4px;"><span style="display:inline-block;padding:3px 10px;background:#fef2f2;border:1px solid #fecaca;border-radius:4px;font-size:11px;font-weight:600;color:#991b1b;"><span style="display:inline-block;width:6px;height:6px;border-radius:50%;background:#ef4444;margin-right:5px;vertical-align:middle;"></span>Documents</span></td> <td style="padding:0 4px;"><span style="display:inline-block;padding:3px 10px;background:#fef2f2;border:1px solid #fecaca;border-radius:4px;font-size:11px;font-weight:600;color:#991b1b;"><span style="display:inline-block;width:6px;height:6px;border-radius:50%;background:#ef4444;margin-right:5px;vertical-align:middle;"></span>Documents</span></td>
<td style="padding:0 0 0 4px;"><span style="display:inline-block;padding:3px 10px;background:#fef2f2;border:1px solid #fecaca;border-radius:4px;font-size:11px;font-weight:600;color:#991b1b;"><span style="display:inline-block;width:6px;height:6px;border-radius:50%;background:#ef4444;margin-right:5px;vertical-align:middle;"></span>Original Box</span></td> <td style="padding:0 0 0 4px;"><span style="display:inline-block;padding:3px 10px;background:#fef2f2;border:1px solid #fecaca;border-radius:4px;font-size:11px;font-weight:600;color:#991b1b;"><span style="display:inline-block;width:6px;height:6px;border-radius:50%;background:#ef4444;margin-right:5px;vertical-align:middle;"></span>Original Box</span></td>
</tr> </tr>
<tr>
<td style="padding:6px 0;border-bottom:1px dashed #f0f1f3;font-weight:600;color:#5f6978; font-size:11px; font-style:italic;">Not Available</td>
</tr>
</table> </table>
</div> </div>
</td></tr> </td></tr>
@ -2258,14 +2258,30 @@ Ports Missing/Down: ${missing.length}\n\n`
<div style="font-size:10px;font-weight:700;text-transform:uppercase;color:#5f6978;margin-bottom:2px;letter-spacing:0.5px;"> <div style="font-size:10px;font-weight:700;text-transform:uppercase;color:#5f6978;margin-bottom:2px;letter-spacing:0.5px;">
Received Received
</div> </div>
<div style="font-size:11px;font-weight:600;color:#1a1d23;"> <div style="font-size:11px;font-weight:600;color:#1a1d23;font-style:italic;">
Unknown Not Available
</div> </div>
<div style="margin-top:4px;font-size:10px;color:#9ca3af;"> <div style="margin-top:4px;font-size:10px;color:#9ca3af;">
${momentTZ().tz(timeZone).format('DD MMM')} ${momentTZ().tz(timeZone).format('DD MMM')}
</div> </div>
</td> </td>
<!-- Step 2 --> <!-- Step 2 -->
<td width="33%" align="center" valign="top" style="padding:0 4px 4px 4px;">
<div style="display:inline-block;width:26px;height:26px;background:#fff;border:2px solid #10b981;border-radius:50%;color:#10b981;font-size:14px;font-weight:800;line-height:22px;text-align:center;margin-top:-14px;margin-bottom:8px;">
&#10003;
</div>
<div style="font-size:10px;font-weight:700;text-transform:uppercase;color:#5f6978;margin-bottom:2px;letter-spacing:0.5px;">
Visual Check
</div>
<div style="font-size:11px;font-weight:600;color:#1a1d23;font-style:italic;">
Not Available
</div>
<div style="margin-top:4px;font-size:10px;color:#9ca3af;">
${momentTZ().tz(timeZone).format('DD MMM')}
</div>
</td>
<!-- Step 3 -->
<td width="34%" align="center" valign="top" style="padding:0 4px 4px 4px;"> <td width="34%" align="center" valign="top" style="padding:0 4px 4px 4px;">
<div style="display:inline-block;width:26px;height:26px;background:#fff;border:2px solid #10b981;border-radius:50%;color:#10b981;font-size:14px;font-weight:800;line-height:22px;text-align:center;margin-top:-14px;margin-bottom:8px;"> <div style="display:inline-block;width:26px;height:26px;background:#fff;border:2px solid #10b981;border-radius:50%;color:#10b981;font-size:14px;font-weight:800;line-height:22px;text-align:center;margin-top:-14px;margin-bottom:8px;">
&#10003; &#10003;
@ -2274,26 +2290,10 @@ Ports Missing/Down: ${missing.length}\n\n`
Software Test Software Test
</div> </div>
<div style="font-size:11px;font-weight:600;color:#1a1d23;"> <div style="font-size:11px;font-weight:600;color:#1a1d23;">
${snapshot?.userTest?.dpelp?.name || ''} ${this?.userTest?.dpelp?.name || ''}
</div> </div>
<div style="margin-top:4px;font-size:10px;color:#9ca3af;"> <div style="margin-top:4px;font-size:10px;color:#9ca3af;">
${momentTZ(snapshot?.userTest?.dpelp?.time).tz(timeZone).format('DD MMM, HH:mm')} ${momentTZ(this?.userTest?.dpelp?.time).tz(timeZone).format('DD MMM, HH:mm')}
</div>
</td>
<!-- Step 3 -->
<td width="33%" align="center" valign="top" style="padding:0 4px 4px 4px;">
<div style="display:inline-block;width:26px;height:26px;background:#fff;border:2px solid #10b981;border-radius:50%;color:#10b981;font-size:14px;font-weight:800;line-height:22px;text-align:center;margin-top:-14px;margin-bottom:8px;">
&#10003;
</div>
<div style="font-size:10px;font-weight:700;text-transform:uppercase;color:#5f6978;margin-bottom:2px;letter-spacing:0.5px;">
Physical Check
</div>
<div style="font-size:11px;font-weight:600;color:#1a1d23;">
${snapshot?.userTest?.physical?.name || ''}
</div>
<div style="margin-top:4px;font-size:10px;color:#9ca3af;">
${momentTZ(snapshot?.userTest?.physical?.time).tz(timeZone).format('DD MMM, HH:mm')}
</div> </div>
</td> </td>
</tr></tbody> </tr></tbody>
@ -2313,17 +2313,18 @@ Ports Missing/Down: ${missing.length}\n\n`
</table> </table>
</td></tr> </td></tr>
<!-- Physical Check section --> <!-- Visual Check section -->
<tr><td style="display: none; padding-bottom:10px;"> <tr><td style="padding-bottom:10px;">
<table cellpadding="0" cellspacing="0" border="0" width="100%" style="background:#fff;border:1px solid #e5e7eb;border-radius:10px;border-collapse:separate;"> <table cellpadding="0" cellspacing="0" border="0" width="100%" style="background:#fff;border:1px solid #e5e7eb;border-radius:10px;border-collapse:separate;">
<tr><td style="padding:16px 20px;"> <tr><td style="padding:16px 20px;">
<table cellpadding="0" cellspacing="0" border="0" width="100%" style="background:#f0fdf4;border:1px solid #bbf7d0;border-radius:6px;margin-bottom:12px;border-collapse:separate;"> <table cellpadding="0" cellspacing="0" border="0" width="100%" style="background:#f0fdf4;border:1px solid #bbf7d0;border-radius:6px;margin-bottom:12px;border-collapse:separate;">
<tr> <tr>
<td style="padding:7px 12px;color:#166534;font-size:13px;font-weight:700;"> <td style="padding:7px 12px;color:#166534;font-size:13px;font-weight:700;">
<svg viewBox="0 0 20 20" width="17" height="17" fill="none" style="vertical-align:middle;color:#166534;"><rect x="2" y="2" width="16" height="16" rx="3" stroke="currentColor" stroke-width="1.5"/><path d="M7 10h6M10 7v6" stroke="currentColor" stroke-width="1.5" stroke-linecap="round"/></svg> <svg viewBox="0 0 20 20" width="17" height="17" fill="none" style="vertical-align:middle;color:#166534;"><rect x="2" y="2" width="16" height="16" rx="3" stroke="currentColor" stroke-width="1.5"/><path d="M7 10h6M10 7v6" stroke="currentColor" stroke-width="1.5" stroke-linecap="round"/></svg>
<span style="vertical-align:middle;margin-left:8px;">Physical Check</span> <span style="vertical-align:middle;margin-left:8px;">Visual Check</span>
</td> </td>
<td align="right" style="padding:7px 12px;color:#166534;font-size:11px;font-weight:500;opacity:.65;">${snapshot?.userTest?.physical?.name || ''} · ${momentTZ(snapshot?.userTest?.physical?.time).tz(timeZone).format('DD MMM, HH:mm')}</td> <td align="right" style="display:none;padding:7px 12px;color:#166534;font-size:11px;font-weight:500;opacity:.65;">${this?.userTest?.physical?.name || ''} · ${momentTZ(this?.userTest?.physical?.time).tz(timeZone).format('DD MMM, HH:mm')}</td>
<td align="right" style="padding:7px 12px;color:#166534;font-size:11px;font-weight:500;opacity:.65; font-style:italic;">Not Available</td>
</tr> </tr>
</table> </table>
<table cellpadding="0" cellspacing="0" border="0" width="100%"> <table cellpadding="0" cellspacing="0" border="0" width="100%">
@ -2340,9 +2341,10 @@ Ports Missing/Down: ${missing.length}\n\n`
</tr> </tr>
</table> </table>
</td> </td>
<td valign="top"> <td style="display: none;" valign="top">
${checklistRowsHtml} ${checklistRowsHtml}
</td> </td>
<td style="padding:6px 0;border-bottom:1px dashed #f0f1f3;font-weight:600;color:#5f6978; font-size:11px; font-style:italic;">Not Available</td>
</tr> </tr>
</table> </table>
</td></tr> </td></tr>
@ -2359,7 +2361,7 @@ Ports Missing/Down: ${missing.length}\n\n`
<svg viewBox="0 0 20 20" width="17" height="17" fill="none" style="vertical-align:middle;color:#1e40af;"><rect x="2" y="3" width="16" height="11" rx="2" stroke="currentColor" stroke-width="1.5"/><path d="M7 17h6M10 14v3" stroke="currentColor" stroke-width="1.5" stroke-linecap="round"/></svg> <svg viewBox="0 0 20 20" width="17" height="17" fill="none" style="vertical-align:middle;color:#1e40af;"><rect x="2" y="3" width="16" height="11" rx="2" stroke="currentColor" stroke-width="1.5"/><path d="M7 17h6M10 14v3" stroke="currentColor" stroke-width="1.5" stroke-linecap="round"/></svg>
<span style="vertical-align:middle;margin-left:8px;">Software Check</span> <span style="vertical-align:middle;margin-left:8px;">Software Check</span>
</td> </td>
<td align="right" style="padding:7px 12px;color:#1e40af;font-size:11px;font-weight:500;opacity:.65;">${snapshot?.userTest?.dpelp?.name || ''} · ${momentTZ(snapshot?.userTest?.dpelp?.time).tz(timeZone).format('DD MMM, HH:mm')}</td> <td align="right" style="padding:7px 12px;color:#1e40af;font-size:11px;font-weight:500;opacity:.65;">${this?.userTest?.dpelp?.name || ''} · ${momentTZ(this?.userTest?.dpelp?.time).tz(timeZone).format('DD MMM, HH:mm')}</td>
</tr> </tr>
</table> </table>
<table cellpadding="0" cellspacing="0" border="0" width="100%"> <table cellpadding="0" cellspacing="0" border="0" width="100%">
@ -2401,7 +2403,7 @@ Ports Missing/Down: ${missing.length}\n\n`
<!-- CONSOLE RAW OUTPUT --> <!-- CONSOLE RAW OUTPUT -->
<table cellpadding="0" cellspacing="0" border="0" width="100%" style="margin-top:16px;background:#1e293b;border-radius:6px;border:1px solid #334155;border-collapse:separate;"> <table cellpadding="0" cellspacing="0" border="0" width="100%" style="margin-top:16px;background:#1e293b;border-radius:6px;border:1px solid #334155;border-collapse:separate;">
<tr><td style="padding:6px 12px;background:#334155;color:#94a3b8;font-size:10px;font-weight:700;letter-spacing:.5px;border-radius:6px 6px 0 0;">CONSOLE RAW OUTPUT (Boot Log snippet)</td></tr> <tr><td style="padding:6px 12px;background:#334155;color:#94a3b8;font-size:10px;font-weight:700;letter-spacing:.5px;border-radius:6px 6px 0 0;">CONSOLE RAW OUTPUT (Boot Log snippet)</td></tr>
<tr><td><pre style="overflow-y: auto; max-height: 300px; padding:12px;color:#cbd5e1;font-family:Consolas,'Courier New',monospace;font-size:11px;line-height:1.6;white-space:pre-wrap;word-break:break-all;">${snapshot?.outputTestLog || 'No test log available'}</pre></td></tr> <tr><td><pre style="overflow-y: auto; max-height: 300px; padding:12px;color:#cbd5e1;font-family:Consolas,'Courier New',monospace;font-size:11px;line-height:1.6;white-space:pre-wrap;word-break:break-all;">${this?.outputTestLog || 'No test log available'}</pre></td></tr>
</table> </table>
</td></tr> </td></tr>
</table> </table>
@ -2416,14 +2418,15 @@ Ports Missing/Down: ${missing.length}\n\n`
this.updateNote(config?.inventory?.sn, this.dataDPELP as DataDPELP) this.updateNote(config?.inventory?.sn, this.dataDPELP as DataDPELP)
await sendMessageToMail( await sendMessageToMail(
`[ATC] - [${config.stationName} - Line: ${config.lineNumber}] - [${this.config.inventory?.pid}] - [${this.config.inventory?.sn}] - Summary of Testing Results`, `[ATC] - [${config.stationName} - L${config.lineNumber}] - ${this.config.inventory?.pid} - ${this.config.inventory?.sn} - Test Summary`,
body body
) )
this.outputTestLog = ''
this.socketIO.emit('summary_tested', { this.socketIO.emit('summary_tested', {
stationId: this.config.stationId, stationId: this.config.stationId,
lineId: this.config.id, lineId: this.config.id,
body: body, body: body,
title: `[${config.stationName} - Line: ${config.lineNumber}] - Summary of Testing Results`, title: `[ATC] - [${config.stationName} - L${config.lineNumber}] - ${this.config.inventory?.pid} - ${this.config.inventory?.sn} - Test Summary`,
}) })
} }
@ -2465,8 +2468,6 @@ Ports Missing/Down: ${missing.length}\n\n`
snapConfig: this.config, snapConfig: this.config,
snapPhysical: this.physicalTest, snapPhysical: this.physicalTest,
reason: '', reason: '',
outputTestLog: this.outputTestLog,
userTest: this.userTest,
} }
this.debounceSendSummaryReport = setTimeout(() => { this.debounceSendSummaryReport = setTimeout(() => {
if (!this.config.listFeatureTested?.includes('PHYSICAL')) { if (!this.config.listFeatureTested?.includes('PHYSICAL')) {
@ -2477,8 +2478,6 @@ Ports Missing/Down: ${missing.length}\n\n`
this.config.listFeatureTested = ['DPELP', 'PHYSICAL', 'SUMMARY'] this.config.listFeatureTested = ['DPELP', 'PHYSICAL', 'SUMMARY']
this.sendFeatureTested() this.sendFeatureTested()
this.sendReportSummaryV2(snapshot) this.sendReportSummaryV2(snapshot)
this.outputTestLog = ''
this.userTest = { dpelp: { name: '', time: 0 }, physical: { name: '', time: 0 } }
}, timeout) }, timeout)
} }

View File

@ -493,7 +493,9 @@ function App() {
if ( if (
valueLine && valueLine &&
openModalTerminal && openModalTerminal &&
selectedLine?.id === valueLine?.id selectedLine?.id === valueLine?.id &&
(!valueLine?.listPortsPhysical ||
valueLine?.listPortsPhysical?.length === 0)
) )
setLinesConfirmSkipPort((pre) => [ setLinesConfirmSkipPort((pre) => [
...pre, ...pre,

View File

@ -158,7 +158,7 @@ const CardLine = ({
const text = lines.join("\n"); const text = lines.join("\n");
const match = text.match( const match = text.match(
/^RESULT:\s*(PASS WITH WARNING|PASS|FAIL|INSUFFICIENT DATA)/im, /RESULT:\s*(PASS WITH WARNING|PASS|FAIL|INSUFFICIENT DATA)/im,
); );
if (!match) { if (!match) {