项目正在快速迭代中,API 与视觉细节可能随版本调整,请勿用于生产环境。

格式化工具 ​

B 端高频格式化函数,与组件零耦合,可独立引入:

js
import { formatNumber, formatFileSize } from '@wil-works/evoke-business-ui'

formatNumber — 数字千分位 ​

formatNumber(1234567.891, { precision: 2 }) → 1,234,567.89
formatNumber(1000, { separator: '' }) → 1000
formatNumber(98765, { separator: '.' }) → 98.765
formatNumber('abc') → 'abc'(非数字原样返回)

formatFileSize — 文件大小 ​

formatFileSize(0) → '0 B'
formatFileSize(512) → '512 B'
formatFileSize(1536) → '1.5 KB'(附件列表显示)
formatFileSize(1073741824) → '1.0 GB'(即 1GB)

formatDate — 日期模板 ​

模板令牌:YYYY MM DD HH mm ss SSS:

formatDate(now, 'YYYY-MM-DD') → '2026-10-11'
formatDate(now, 'HH:mm:ss') → '06:58:39'(日志时间戳)
formatDate(now, 'MM月DD日 HH:mm') → '10月11日 06:58'
formatDate('not-a-date') → ''(非法输入返回空串)

formatRelativeTime — 相对时间 ​

消息流、操作日志、评论区的标准展示:

30 秒内 → '刚刚'
3 分钟前 → '3 分钟前'
5 小时前 → '5 小时前'
昨天 → '昨天 14:30'(形如)
往年 → '2025-01-05'(形如)

formatDuration / formatPercent ​

formatDuration(205) → '03:25'(音视频播放器)
formatDuration(3723) → '01:02:03'(超 1 小时自动进位)
formatPercent(0.1234) → '12.34%'(进度/占比)
formatPercent(0.06, { precision: 0 }) → '6%'

API ​

ts
formatNumber(value: number, options?: {
  precision?: number          // 小数位
  separator?: string          // 千分位符号,默认 ',';传 '' 关闭
  decimalSeparator?: string   // 小数点符号,默认 '.'
}): string

formatFileSize(bytes: number, options?: {
  precision?: number          // 默认 1
  base?: 1024 | 1000         // 默认 1024
}): string                   // 非法输入返回 ''

formatDate(date: Date | number | string, pattern?: string): string

formatRelativeTime(date: Date | number | string, now?: Date | number): string

formatDuration(seconds: number, options?: { forceHours?: boolean }): string

formatPercent(ratio: number, options?: { precision?: number }): string

所有函数对非法输入不抛错:数字类返回 String(value) 或 '',日期类返回 '',可直接用于模板插值。