utils.js 5.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218
  1. import { Linking } from "react-native";
  2. import { showLocation } from 'react-native-map-link'
  3. import apiUser from "../api/apiUser";
  4. import { getStorageSync, setStorage } from "./storage";
  5. /**
  6. * 工具集
  7. * @邠心vbe on 2021/04/20
  8. */
  9. const formatNumber = (n) => {
  10. n = n.toString()
  11. return n[1] ? n : '0' + n
  12. }
  13. export default {
  14. getDistance(dis) {
  15. if (dis) {
  16. if (dis > 1000) {
  17. return Number((dis / 1000).toFixed(1)) + 'km';
  18. } else {
  19. return dis + 'm';
  20. }
  21. } else {
  22. return 'NA';
  23. }
  24. },
  25. directMaps(lat, lng, address) {
  26. if (isIOS) {
  27. showLocation({
  28. latitude: lat,
  29. longitude: lng,
  30. title: address
  31. }).catch(err => {
  32. console.warn("directMaps", err);
  33. });
  34. } else {
  35. var uri = "geo:" + lat + "," + lng + "?q=" + address;
  36. Linking.openURL(uri).catch(err => {
  37. console.warn("directMaps", err);
  38. });
  39. }
  40. },
  41. getSiteInfo(obj) {
  42. if (obj) {
  43. const acRates = [], dcRates = [];
  44. obj?.rates.forEach((item) => {
  45. if (item.type?.indexOf('AC') >= 0) {
  46. acRates.push(item)
  47. } else {
  48. dcRates.push(item)
  49. }
  50. })
  51. return {
  52. id: obj.sitePk,
  53. name: obj.siteName,
  54. address: obj.siteAddress,
  55. latitude: obj.locationLatitude,
  56. longitude: obj.locationLongitude,
  57. acConnector: obj.acConnector,
  58. allConnector: obj.allConnector,
  59. dcConnector: obj.dcConnector,
  60. distance: this.getDistance(obj.distance),
  61. acRates: acRates,
  62. dcRates: dcRates,
  63. rateList: obj.rates,
  64. siteType: obj.siteType,
  65. parkingFee: obj.parkingFee,
  66. parkingFeeFree: obj.free,
  67. operatingHours: obj.operatingHours,
  68. additionalNotes: obj.additionalNotes,
  69. endlessService: obj.endlessService,
  70. serviceProvider: obj.serviceProvider,
  71. enableReservation: obj.enableReservation
  72. }
  73. } else {
  74. return {id: 0}
  75. }
  76. },
  77. getNowHHmm() {
  78. const now = new Date();
  79. var month = now.getHours();
  80. var minute = now.getMinutes();
  81. return [month, minute].map(formatNumber).join(':');
  82. },
  83. getYYMMdd(date) {
  84. var year = date.getFullYear()
  85. var month = date.getMonth() + 1
  86. var day = date.getDate()
  87. //var hour = date.getHours()
  88. //var minute = date.getMinutes()
  89. //var second = date.getSeconds()
  90. return [year, month, day].map(formatNumber).join('/')
  91. },
  92. formatYYMM(date) {
  93. var year = date.getFullYear()
  94. var month = date.getMonth() + 1
  95. return [year, month].map(formatNumber).join('-')
  96. },
  97. hour2HHmm(hour) {
  98. if (hour) {
  99. if (hour > 0) {
  100. const h = parseInt(hour);
  101. const m = (hour - h) * 60;
  102. return h + ' hr ' + parseInt(m) + 'min';
  103. } else {
  104. const m = hour * 60;
  105. return parseInt(m) + 'min';
  106. }
  107. } else {
  108. return '0 min';
  109. }
  110. },
  111. minutes2HHmm(minutes) {
  112. if (minutes) {
  113. const m = Number(minutes);
  114. if (m > 60) {
  115. const h = m / 60;
  116. const mm = m % 60;
  117. return parseInt(h) + ' hr ' + parseInt(mm) + 'min';
  118. } else {
  119. return parseInt(minutes) + 'min';
  120. }
  121. } else {
  122. return '0 min';
  123. }
  124. },
  125. isEmpty(str, encNo=false) {
  126. if (typeof str == 'number') {
  127. if (encNo) {
  128. return str === 0;
  129. } else {
  130. return false;
  131. }
  132. } else if (str) {
  133. if (typeof str == 'object') {
  134. return Object.keys(str).length == 0;
  135. } else if (Array.isArray(str)) {
  136. return str.length == 0;
  137. } else {
  138. if (str == undefined || str == null || str == "")
  139. return true;
  140. return false;
  141. }
  142. } else {
  143. return true;
  144. }
  145. },
  146. isNotEmpty(str, encNo) {
  147. return !this.isEmpty(str, encNo);
  148. },
  149. getParamsFromUrl(url) {
  150. var params = {}
  151. const list = url.split('&');
  152. for (let item of list) {
  153. if (item.indexOf('=') > 0) {
  154. const param = item.split('=');
  155. if (param.length == 2)
  156. params[param[0]] = param[1];
  157. }
  158. }
  159. return params;
  160. },
  161. join(arrays=[], spect="") {
  162. let str = ''
  163. if (arrays) {
  164. arrays.forEach((item, index) => {
  165. if (index == 0) {
  166. str += item;
  167. } else {
  168. str += spect + item;
  169. }
  170. });
  171. }
  172. return str;
  173. },
  174. /**
  175. * 将给定数字保留任意位小数
  176. * @param {*} text
  177. * @param {number} scape
  178. * @returns 小数
  179. */
  180. toFixed(text, scape) {
  181. if (text) {
  182. return Number(Number(text).toFixed(scape));
  183. } else {
  184. return text;
  185. }
  186. },
  187. /**
  188. * 注册FCM通知token
  189. * @param {String} token Firebase令牌
  190. * @param {Function} back 执行结果(boolean)
  191. */
  192. async registerFirebaseToken(token, back) {
  193. const thisDate = this.formatYYMM(new Date()) + "-" + getUserId();
  194. const lastDate = await getStorageSync('RegisterTokenDate');
  195. console.log('>>>RegisterToken<<<', thisDate, lastDate + "●");
  196. if (thisDate != lastDate || token != notifyToken.token) {
  197. const params = {
  198. os: isIOS ? "ios": "android",
  199. googleToken: notifyToken.token
  200. }
  201. apiUser.setNotifyToken(params).then(res => {
  202. console.log('>>>RegisterToken-Suc<<<', res);
  203. setStorage('RegisterTokenDate', thisDate);
  204. if (back) back(true);
  205. }).catch(err => {
  206. console.log('>>>RegisterToken-Err<<<', err);
  207. if (back) back(false);
  208. });
  209. } else {
  210. if (back) back(false);
  211. }
  212. }
  213. }