index.ts 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141
  1. /**
  2. * @param statusName 去掉括号及括号内的内容
  3. */
  4. export function formatStatusName(statusName: string) {
  5. return statusName.replace(/\([^)]*\)/g, '')
  6. }
  7. /**
  8. * 统一充电订单状态处理
  9. * @param order
  10. */
  11. export function chargeOrderStatus(status: any) {
  12. const statusObj = { icon: '', text: '', color: '' }
  13. switch (status) {
  14. case 0:
  15. statusObj.icon = 'charge-order-settlement'
  16. statusObj.text = '待充电'
  17. statusObj.color = '#FFA500'
  18. break
  19. case 1:
  20. statusObj.icon = 'charge-order-ing'
  21. statusObj.text = '充电中'
  22. statusObj.color = '#4EDC86'
  23. break
  24. case 2:
  25. statusObj.icon = 'charge-order-settlement'
  26. statusObj.text = '结算中'
  27. statusObj.color = '#3EB6F8'
  28. break
  29. case 3:
  30. statusObj.icon = 'charge-order-settled'
  31. statusObj.text = '已完成'
  32. statusObj.color = '#AAAAAA'
  33. break
  34. }
  35. return statusObj
  36. }
  37. /**
  38. * 停止方式
  39. * @param stopMethod
  40. */
  41. export function stopType(stopMethod: any) {
  42. // 0:用户手动停止充电;1:客户归属地运营商平台停止充电;2:BMS停止充电;3:充电机设备故障;4:连接器断开;其它:自定义
  43. let stopText = ''
  44. switch (stopMethod) {
  45. case 0:
  46. stopText = '用户手动停止充电'
  47. break
  48. case 1:
  49. stopText = '客户归属地运营商平台停止充电'
  50. break
  51. case 2:
  52. stopText = 'BMS停止充电'
  53. break
  54. case 3:
  55. stopText = '充电机设备故障'
  56. break
  57. case 4:
  58. stopText = '连接器断开'
  59. }
  60. return stopText
  61. }
  62. /**
  63. * 秒转为时间格式
  64. */
  65. export function secondToTime(second: number) {
  66. const h = Math.floor(second / 3600)
  67. const m = Math.floor((second - h * 3600) / 60)
  68. const s = Math.floor(second - h * 3600 - m * 60)
  69. return `${h < 10 ? `0${h}` : h}:${m < 10 ? `0${m}` : m}:${s < 10 ? `0${s}` : s}`
  70. }
  71. /**
  72. * 扫码工具类
  73. */
  74. export class ScanCodeUtil {
  75. /**
  76. * 调用扫码统一处理
  77. * @param opts 参数配置,详细查看 https://uniapp.dcloud.net.cn/api/system/barcode.html
  78. */
  79. static scan(opts: any = {}) {
  80. return new Promise((resolve, reject) => {
  81. uni.scanCode(
  82. Object.assign(
  83. {},
  84. {
  85. success: (res: any) => resolve(res),
  86. fail: reject,
  87. },
  88. opts,
  89. ),
  90. )
  91. })
  92. }
  93. /**
  94. * 解析 URL 参数
  95. * @param url URL 字符串
  96. */
  97. static parseUrlParams(url: string) {
  98. console.log(url, '二维码数据格式')
  99. try {
  100. const urlObj = new URL(url)
  101. const params = new URLSearchParams(urlObj.search)
  102. return Object.fromEntries(params.entries())
  103. }
  104. catch (error) {
  105. console.warn('URL 构造函数不可用,使用手动解析:', error)
  106. const queryString = url.split('?')[1]
  107. if (!queryString)
  108. return {}
  109. const params: Record<string, string> = {}
  110. queryString.split('&').forEach((pair) => {
  111. const [key, value] = pair.split('=')
  112. if (key) {
  113. params[decodeURIComponent(key)] = decodeURIComponent(value || '')
  114. }
  115. })
  116. return params
  117. }
  118. }
  119. /**
  120. * 扫码并提取 connectorCode
  121. * @param opts 参数配置
  122. */
  123. static async scanAndGetConnectorCode(opts: any = {}): Promise<string | null> {
  124. try {
  125. const res: any = await this.scan(opts)
  126. const params = this.parseUrlParams(res.result)
  127. return params.connectorCode || null
  128. }
  129. catch (error) {
  130. console.error('扫码或解析失败:', error)
  131. throw error
  132. }
  133. }
  134. }