Update form report and UI
This commit is contained in:
parent
b9c25499aa
commit
c7094f0fd8
|
|
@ -1182,7 +1182,7 @@ export default class LineConnection {
|
||||||
*/
|
*/
|
||||||
endTesting() {
|
endTesting() {
|
||||||
this.physicalTest.done = true
|
this.physicalTest.done = true
|
||||||
this.physicalTest.resetTestedPorts()
|
// this.physicalTest.resetTestedPorts()
|
||||||
this.config.runningPhysical = false
|
this.config.runningPhysical = false
|
||||||
this.config.runningScenario = ''
|
this.config.runningScenario = ''
|
||||||
this.testingPortPoE = false
|
this.testingPortPoE = false
|
||||||
|
|
@ -1714,10 +1714,12 @@ ${log}
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td style="width: 50%;">
|
<td style="width: 50%;">
|
||||||
Model: <b>${this.config?.inventory?.pid ?? 'N/A'}</b><br/>
|
Model: <b>${this.config?.inventory?.pid ?? 'N/A'}</b> <b>${this.config?.inventory?.vid ?? 'N/A'}</b><br/>
|
||||||
Serial Number: <b>${this.config?.inventory?.sn ?? 'N/A'}</b><br/>
|
Serial Number: <b>${this.config?.inventory?.sn ?? 'N/A'}</b><br/>
|
||||||
MAC: <b>${dataShowVersion?.MAC_ADDRESS ?? ''}</b><br/>
|
MAC: <b>${dataShowVersion?.MAC_ADDRESS ?? ''}</b><br/>
|
||||||
IOS: <b>${dataShowVersion?.SOFTWARE_IMAGE ?? ''}</b><br/>
|
IOS: <b>${dataShowVersion?.SOFTWARE_IMAGE ?? ''}</b> <b>${dataShowVersion?.VERSION ?? ''}</b><br/>
|
||||||
|
MEM: <b>${dataShowVersion?.MEMORY ?? ''}</b><br/>
|
||||||
|
FLASH: <b>${dataShowVersion?.USB_FLASH ?? ''}</b><br/>
|
||||||
License: <b>${
|
License: <b>${
|
||||||
dataShowLic
|
dataShowLic
|
||||||
? dataShowLic
|
? dataShowLic
|
||||||
|
|
|
||||||
|
|
@ -208,31 +208,6 @@ export class PhysicalPortTest {
|
||||||
: ''
|
: ''
|
||||||
}
|
}
|
||||||
<br/>
|
<br/>
|
||||||
────────────────────────────────<br/>
|
|
||||||
<b style="color: #008000;">Passed Ports</b><br/>
|
|
||||||
${
|
|
||||||
tested.length
|
|
||||||
? `<table cellpadding="6" cellspacing="0" border="1" style="margin-top: 10px; border-collapse: collapse; width: 100%">
|
|
||||||
<tr>
|
|
||||||
${
|
|
||||||
testedPoE?.length
|
|
||||||
? `<td>
|
|
||||||
<div style="column-count: 12;">${testedPoE.map((p) => this.normalizePortName(p.name)).join('<br/>')}</div>
|
|
||||||
</td>`
|
|
||||||
: ''
|
|
||||||
}
|
|
||||||
${
|
|
||||||
testedSFP?.length
|
|
||||||
? `<td>
|
|
||||||
<div style="column-count: 4;">${testedSFP.map((p) => this.normalizePortName(p.name)).join('<br/>')}</div>
|
|
||||||
</td>`
|
|
||||||
: ''
|
|
||||||
}
|
|
||||||
</tr>
|
|
||||||
</table><br/>
|
|
||||||
`
|
|
||||||
: ''
|
|
||||||
}
|
|
||||||
<br/>
|
<br/>
|
||||||
`.trim()
|
`.trim()
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1523,3 +1523,41 @@ async function loadKeywordRules(log: string): Promise<KeywordRule[]> {
|
||||||
}
|
}
|
||||||
return []
|
return []
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export function convertFromKilobytesString(input: string, decimals = 0): string {
|
||||||
|
if (!input) return '0 KB'
|
||||||
|
const parts = input.split('/')
|
||||||
|
if (parts.length === 0) return ''
|
||||||
|
|
||||||
|
const totalRamStr = parts[0].trim()
|
||||||
|
const trimmed = totalRamStr.trim().toUpperCase()
|
||||||
|
|
||||||
|
// Bắt dạng: 491520K, 1024KB, 1M, 1.5G, 2T
|
||||||
|
const match = trimmed.match(/^([\d.]+)\s*(K|M|G|T)?B?$/)
|
||||||
|
|
||||||
|
if (!match) return '0 KB'
|
||||||
|
|
||||||
|
const value = Number.parseFloat(match[1])
|
||||||
|
const unit = match[2] || 'K'
|
||||||
|
|
||||||
|
// Quy tất cả về KB
|
||||||
|
const toKB: Record<string, number> = {
|
||||||
|
K: 1,
|
||||||
|
M: 1024,
|
||||||
|
G: 1024 ** 2,
|
||||||
|
T: 1024 ** 3,
|
||||||
|
}
|
||||||
|
|
||||||
|
let kilobytes = value * toKB[unit]
|
||||||
|
|
||||||
|
// ---- Convert KB -> đơn vị đẹp nhất ----
|
||||||
|
const units = ['KB', 'MB', 'GB', 'TB']
|
||||||
|
let unitIndex = 0
|
||||||
|
|
||||||
|
while (kilobytes >= 1024 && unitIndex < units.length - 1) {
|
||||||
|
kilobytes /= 1024
|
||||||
|
unitIndex++
|
||||||
|
}
|
||||||
|
|
||||||
|
return `${kilobytes.toFixed(decimals)} ${units[unitIndex]}`
|
||||||
|
}
|
||||||
|
|
|
||||||
|
|
@ -54,7 +54,7 @@ import ModalSelectLicense from "./ModalSelectLicense";
|
||||||
import ModalRunScenario from "./ModalRunScenario";
|
import ModalRunScenario from "./ModalRunScenario";
|
||||||
import DrawerScenario from "./ModalScenario";
|
import DrawerScenario from "./ModalScenario";
|
||||||
import AutoProgress from "../Components/AutoProgress";
|
import AutoProgress from "../Components/AutoProgress";
|
||||||
import { bodyDPELP } from "../../untils/helper";
|
import { bodyDPELP, convertFromKilobytesString } from "../../untils/helper";
|
||||||
const apiUrl = import.meta.env.VITE_BACKEND_URL;
|
const apiUrl = import.meta.env.VITE_BACKEND_URL;
|
||||||
|
|
||||||
const INIT_TICKET = {
|
const INIT_TICKET = {
|
||||||
|
|
@ -645,7 +645,8 @@ const ModalTerminal = ({
|
||||||
setIsDisable(false);
|
setIsDisable(false);
|
||||||
}, 15000);
|
}, 15000);
|
||||||
}
|
}
|
||||||
if (activeStep === 2 && !isDisable) {
|
if (activeStep >= 2 && !isDisable) {
|
||||||
|
setActiveStep(3);
|
||||||
setIsDisable(true);
|
setIsDisable(true);
|
||||||
setTimeout(() => {
|
setTimeout(() => {
|
||||||
setIsDisable(false);
|
setIsDisable(false);
|
||||||
|
|
@ -671,7 +672,7 @@ const ModalTerminal = ({
|
||||||
disabled={isDisable}
|
disabled={isDisable}
|
||||||
label="Completed"
|
label="Completed"
|
||||||
description={
|
description={
|
||||||
activeStep !== 2
|
activeStep < 2
|
||||||
? "Complete all to send report"
|
? "Complete all to send report"
|
||||||
: "Click to send report"
|
: "Click to send report"
|
||||||
}
|
}
|
||||||
|
|
@ -957,7 +958,9 @@ const ModalTerminal = ({
|
||||||
<Text size="md">
|
<Text size="md">
|
||||||
{findDataShowVersion() &&
|
{findDataShowVersion() &&
|
||||||
findDataShowVersion()?.MEMORY
|
findDataShowVersion()?.MEMORY
|
||||||
? findDataShowVersion()?.MEMORY + " bytes"
|
? convertFromKilobytesString(
|
||||||
|
findDataShowVersion()?.MEMORY
|
||||||
|
)
|
||||||
: ""}
|
: ""}
|
||||||
</Text>
|
</Text>
|
||||||
</Flex>
|
</Flex>
|
||||||
|
|
@ -968,7 +971,9 @@ const ModalTerminal = ({
|
||||||
<Text size="md">
|
<Text size="md">
|
||||||
{findDataShowVersion() &&
|
{findDataShowVersion() &&
|
||||||
findDataShowVersion()?.USB_FLASH
|
findDataShowVersion()?.USB_FLASH
|
||||||
? findDataShowVersion()?.USB_FLASH + " bytes"
|
? convertFromKilobytesString(
|
||||||
|
findDataShowVersion()?.USB_FLASH
|
||||||
|
)
|
||||||
: ""}
|
: ""}
|
||||||
</Text>
|
</Text>
|
||||||
</Flex>
|
</Flex>
|
||||||
|
|
|
||||||
|
|
@ -196,3 +196,44 @@ export const bodyDPELP = [
|
||||||
note: "",
|
note: "",
|
||||||
},
|
},
|
||||||
];
|
];
|
||||||
|
|
||||||
|
export function convertFromKilobytesString(
|
||||||
|
input: string,
|
||||||
|
decimals = 0
|
||||||
|
): string {
|
||||||
|
if (!input) return "0 KB";
|
||||||
|
const parts = input.split("/");
|
||||||
|
if (parts.length === 0) return "";
|
||||||
|
|
||||||
|
const totalRamStr = parts[0].trim();
|
||||||
|
const trimmed = totalRamStr.trim().toUpperCase();
|
||||||
|
|
||||||
|
// Bắt dạng: 491520K, 1024KB, 1M, 1.5G, 2T
|
||||||
|
const match = trimmed.match(/^([\d.]+)\s*(K|M|G|T)?B?$/);
|
||||||
|
|
||||||
|
if (!match) return "0 KB";
|
||||||
|
|
||||||
|
const value = Number.parseFloat(match[1]);
|
||||||
|
const unit = match[2] || "K";
|
||||||
|
|
||||||
|
// Quy tất cả về KB
|
||||||
|
const toKB: Record<string, number> = {
|
||||||
|
K: 1,
|
||||||
|
M: 1024,
|
||||||
|
G: 1024 ** 2,
|
||||||
|
T: 1024 ** 3,
|
||||||
|
};
|
||||||
|
|
||||||
|
let kilobytes = value * toKB[unit];
|
||||||
|
|
||||||
|
// ---- Convert KB -> đơn vị đẹp nhất ----
|
||||||
|
const units = ["KB", "MB", "GB", "TB"];
|
||||||
|
let unitIndex = 0;
|
||||||
|
|
||||||
|
while (kilobytes >= 1024 && unitIndex < units.length - 1) {
|
||||||
|
kilobytes /= 1024;
|
||||||
|
unitIndex++;
|
||||||
|
}
|
||||||
|
|
||||||
|
return `${kilobytes.toFixed(decimals)} ${units[unitIndex]}`;
|
||||||
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue