1
0

base-utils.js 2.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495
  1. let idSeed = 0
  2. function clampInteger(value, minValue, maxValue, fallback) {
  3. const numberValue = Number(value)
  4. if (!Number.isFinite(numberValue)) return fallback
  5. return Math.min(Math.max(Math.round(numberValue), minValue), maxValue)
  6. }
  7. function createId(prefix = 'id') {
  8. idSeed += 1
  9. return `${prefix}-${Date.now()}-${idSeed}`
  10. }
  11. function delay(ms) {
  12. return new Promise((resolve) => {
  13. setTimeout(resolve, ms)
  14. })
  15. }
  16. function getWxApi() {
  17. return typeof wx === 'undefined' ? {} : wx
  18. }
  19. function isCancelError(error) {
  20. const message = String(error && (error.errMsg || error.message || error) || '')
  21. return /cancel|取消/i.test(message)
  22. }
  23. function toFiniteNumber(value, fallback = 0) {
  24. if (typeof value === 'string') {
  25. const text = value.trim()
  26. const directValue = Number(text)
  27. if (Number.isFinite(directValue)) return directValue
  28. const match = text.match(/^[+-]?(?:\d+\.?\d*|\.\d+)(?:e[+-]?\d+)?/i)
  29. const textValue = match ? Number(match[0]) : NaN
  30. return Number.isFinite(textValue) ? textValue : fallback
  31. }
  32. const numberValue = Number(value)
  33. return Number.isFinite(numberValue) ? numberValue : fallback
  34. }
  35. function formatFixedValue(value, precision = 2) {
  36. const numberValue = toFiniteNumber(value, NaN)
  37. if (!Number.isFinite(numberValue)) return '--'
  38. const text = numberValue.toFixed(precision)
  39. return Number(text) === 0 ? (0).toFixed(precision) : text
  40. }
  41. function parseHexInteger(value, fallback = 0) {
  42. const text = String(value === undefined || value === null ? '' : value).trim()
  43. if (!text) return fallback
  44. const parsed = parseInt(text, 16)
  45. return Number.isFinite(parsed) ? parsed : fallback
  46. }
  47. function normalizeTextValue(value) {
  48. return String(value === undefined || value === null ? '' : value)
  49. }
  50. function pickFields(source, fields = []) {
  51. return fields.reduce((result, field) => {
  52. if (source && source[field] !== undefined && source[field] !== null && source[field] !== '') {
  53. result[field] = source[field]
  54. }
  55. return result
  56. }, {})
  57. }
  58. function padHex(value, length = 4) {
  59. return Number(value || 0).toString(16).toUpperCase().padStart(length, '0')
  60. }
  61. module.exports = {
  62. clampInteger,
  63. createId,
  64. delay,
  65. formatFixedValue,
  66. getWxApi,
  67. isCancelError,
  68. normalizeTextValue,
  69. padHex,
  70. pickFields,
  71. parseHexInteger,
  72. toFiniteNumber
  73. }