diff --git a/src/utils/units.ts b/src/utils/units.ts new file mode 100644 index 0000000..9faed39 --- /dev/null +++ b/src/utils/units.ts @@ -0,0 +1,83 @@ +// 带宽单位转换 +export type BandwidthUnit = 'Kbps' | 'Mbps' | 'Gbps'; + +export const bandwidthUnits: BandwidthUnit[] = ['Kbps', 'Mbps', 'Gbps']; + +export const bandwidthFactors: Record = { + Kbps: 1, + Mbps: 1000, + Gbps: 1000000 +}; + +export function convertBandwidth(value: number, fromUnit: BandwidthUnit, toUnit: BandwidthUnit): number { + const fromFactor = bandwidthFactors[fromUnit]; + const toFactor = bandwidthFactors[toUnit]; + return (value * fromFactor) / toFactor; +} + +export function formatBandwidth(kbpsValue: number): { value: number; unit: BandwidthUnit } { + if (kbpsValue >= 1000000) { + return { value: kbpsValue / 1000000, unit: 'Gbps' }; + } else if (kbpsValue >= 1000) { + return { value: kbpsValue / 1000, unit: 'Mbps' }; + } + return { value: kbpsValue, unit: 'Kbps' }; +} + +// 流量单位转换 +export type StorageUnit = 'KB' | 'MB' | 'GB' | 'TB'; + +export const storageUnits: StorageUnit[] = ['KB', 'MB', 'GB', 'TB']; + +export const storageFactors: Record = { + KB: 1, + MB: 1024, + GB: 1024 * 1024, + TB: 1024 * 1024 * 1024 +}; + +export function convertStorage(value: number, fromUnit: StorageUnit, toUnit: StorageUnit): number { + const fromFactor = storageFactors[fromUnit]; + const toFactor = storageFactors[toUnit]; + return (value * fromFactor) / toFactor; +} + +export function formatStorage(kbValue: number): { value: number; unit: StorageUnit } { + if (kbValue >= 1024 * 1024 * 1024) { + return { value: kbValue / (1024 * 1024 * 1024), unit: 'TB' }; + } else if (kbValue >= 1024 * 1024) { + return { value: kbValue / (1024 * 1024), unit: 'GB' }; + } else if (kbValue >= 1024) { + return { value: kbValue / 1024, unit: 'MB' }; + } + return { value: kbValue, unit: 'KB' }; +} + +// 时间单位转换 +export type TimeUnit = '秒' | '分钟' | '小时' | '天'; + +export const timeUnits: TimeUnit[] = ['秒', '分钟', '小时', '天']; + +export const timeFactors: Record = { + '秒': 1, + '分钟': 60, + '小时': 3600, + '天': 86400 +}; + +export function convertTime(value: number, fromUnit: TimeUnit, toUnit: TimeUnit): number { + const fromFactor = timeFactors[fromUnit]; + const toFactor = timeFactors[toUnit]; + return (value * fromFactor) / toFactor; +} + +export function formatTime(secondsValue: number): { value: number; unit: TimeUnit } { + if (secondsValue >= 86400) { + return { value: secondsValue / 86400, unit: '天' }; + } else if (secondsValue >= 3600) { + return { value: secondsValue / 3600, unit: '小时' }; + } else if (secondsValue >= 60) { + return { value: secondsValue / 60, unit: '分钟' }; + } + return { value: secondsValue, unit: '秒' }; +}