util.js 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139
  1. const { default: api } = require("../js/api")
  2. const formatTime = date => {
  3. const year = date.getFullYear()
  4. const month = date.getMonth() + 1
  5. const day = date.getDate()
  6. const hour = date.getHours()
  7. const minute = date.getMinutes()
  8. const second = date.getSeconds()
  9. return `${[year, month, day].map(formatNumber).join('/')} ${[hour, minute, second].map(formatNumber).join(':')}`
  10. }
  11. const formatDateNotSecond = isoString => {
  12. if (isoString == undefined) return '';
  13. const date = new Date(isoString);
  14. const year = date.getFullYear();
  15. const month = String(date.getMonth() + 1).padStart(2, '0'); // Months are zero-based
  16. const day = String(date.getDate()).padStart(2, '0');
  17. const hours = String(date.getHours()).padStart(2, '0');
  18. const minutes = String(date.getMinutes()).padStart(2, '0');
  19. return `${year}-${month}-${day} ${hours}:${minutes}`;
  20. }
  21. const formatNumber = n => {
  22. n = n.toString()
  23. return n[1] ? n : `0${n}`
  24. }
  25. const formatPhone = phone => {
  26. // 检查手机号是否有效
  27. if (!phone || phone.length !== 11) {
  28. return phone;
  29. }
  30. // 获取手机号前3位和后4位
  31. const start = phone.substring(0, 3);
  32. const end = phone.substring(7);
  33. // 将中间4位数字替换为星号
  34. const hidden = '****';
  35. // 返回处理后的手机号
  36. return start + hidden + end;
  37. }
  38. // 格式化小数点数字
  39. const formatDiNumber = number => {
  40. var numberStr = number.toString()
  41. if(!numberStr.includes(".")){
  42. numberStr += ".00"
  43. }
  44. return numberStr
  45. }
  46. //根据经纬度计算距离
  47. const haversine = (lat1, lon1, lat2, lon2) => {
  48. const R = 6371; // 地球半径,单位:千米
  49. const toRadians = (degrees) => degrees * (Math.PI / 180); // 将度数转换为弧度
  50. // 将经纬度转换为弧度
  51. const phi1 = toRadians(lat1);
  52. const phi2 = toRadians(lat2);
  53. const deltaPhi = toRadians(lat2 - lat1);
  54. const deltaLambda = toRadians(lon2 - lon1);
  55. // Haversine公式
  56. const a = Math.sin(deltaPhi / 2) ** 2 + Math.cos(phi1) * Math.cos(phi2) * Math.sin(deltaLambda / 2) ** 2;
  57. const c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a));
  58. // 计算距离
  59. const distance = R * c; // 单位:千米
  60. return distance * 1000; // 转换为米
  61. }
  62. function subAndsendMessage(id,type) {
  63. return new Promise((resolve,reject)=>{
  64. wx.requestSubscribeMessage({
  65. tmplIds: ['V0tl-4n-5hwNZc4SrEttvrmawAyM-SB0pQWZNwp54Ks'], // 最多支持3条
  66. success(res) {
  67. sendMessage(id,type,resolve,reject)
  68. // 'accept'表示用户同意订阅该条id对应的模板消息
  69. if (res['V0tl-4n-5hwNZc4SrEttvrmawAyM-SB0pQWZNwp54Ks'] === 'accept') {
  70. // 用户同意订阅,调用云函数或服务器接口发送订阅消息
  71. // wx.cloud.callFunction({
  72. // name: 'sendSubscribeMessage',
  73. // data: {
  74. // templateId: '配置好的模板ID',
  75. // openid: 'o8pFb5cWH1KkBDvGls2X7yMiFkGA',
  76. // data: {
  77. // thing1: {
  78. // value: '活动名称'
  79. // },
  80. // // 其他参数...
  81. // }
  82. // },
  83. // success(res) {
  84. // console.log('订阅消息发送成功', res)
  85. // },
  86. // fail(err) {
  87. // console.error('订阅消息发送失败', err)
  88. // }
  89. // })
  90. }
  91. },
  92. fail(err) {
  93. sendMessage(id,type,resolve,reject)
  94. }
  95. })
  96. })
  97. }
  98. function sendMessage(id,type,resolve,reject) {
  99. const message = {
  100. trxid:id,
  101. orderType:type
  102. }
  103. api.request_sendMessage(message).then(res => {
  104. console.log("发送消息模板结果",res)
  105. resolve()
  106. }).catch(err => {
  107. console.log("发送消息模板失败",err)
  108. reject()
  109. })
  110. }
  111. module.exports = {
  112. formatTime,
  113. formatDateNotSecond,
  114. formatPhone,
  115. formatDiNumber,
  116. haversine,
  117. subAndsendMessage
  118. }