// WXS 格式化工具 — WXML 中不能调用 JS 方法,需通过 WXS 桥接 // 规范:docs/miniprogram-dev/design-system/DISPLAY-STANDARDS.md /** 数字保留 N 位小数;空值返回 '--' */ function toFixed(num, digits) { if (num === undefined || num === null) return '--' return num.toFixed(digits) } /** 空值兜底;null/undefined/'' 统一返回 '--' */ function safe(val) { if (val === undefined || val === null || val === '') return '--' return val } /** * 金额格式化(WXS 版) * ¥12,680 / -¥368 / ¥0 / -- */ function money(value) { if (value === undefined || value === null) return '--' if (value === 0) return '¥0' var abs = Math.round(Math.abs(value)) var s = abs.toString() var result = '' var count = 0 for (var i = s.length - 1; i >= 0; i--) { if (count > 0 && count % 3 === 0) result = ',' + result result = s[i] + result count++ } return (value < 0 ? '-¥' : '¥') + result } /** * 计数格式化(WXS 版) * 零值返回 '--';≥1000 加千分位;自动拼接单位 */ function count(value, unit) { if (value === undefined || value === null || value === 0) return '--' var s = value.toString() if (value >= 1000) { var result = '' var c = 0 for (var i = s.length - 1; i >= 0; i--) { if (c > 0 && c % 3 === 0) result = ',' + result result = s[i] + result c++ } return result + unit } return s + unit } /** * 百分比展示(WXS 版) * 保留1位小数;超过100%正常展示;空值返回 '--' */ function percent(value) { if (value === undefined || value === null) return '--' if (value === 0) return '0%' return value.toFixed(1) + '%' } /** * 课时格式化(WXS 版) * 整数 → Nh;非整数 → N.Nh;0 → 0h;空 → -- */ function hours(value) { if (value === undefined || value === null) return '--' if (value === 0) return '0h' if (value % 1 === 0) return value + 'h' return value.toFixed(1) + 'h' } module.exports = { toFixed: toFixed, safe: safe, money: money, count: count, percent: percent, hours: hours, }