utils.js 7.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285
  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(erros => {
  32. console.warn("directMaps", erros);
  33. });
  34. } else {
  35. var uri = "geo:" + lat + "," + lng + "?q=" + address;
  36. Linking.openURL(uri).catch(erros => {
  37. console.warn("directMaps", erros);
  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. favorite: obj.favorite,
  62. acRates: acRates,
  63. dcRates: dcRates,
  64. labels: obj.labels,
  65. upcoming: obj.upcoming,
  66. rateList: obj.rates,
  67. siteType: obj.siteType,
  68. parkingFee: obj.parkingFee,
  69. hasDiscount: obj.hasDiscount,
  70. parkingFeeFree: obj.free,
  71. operatingHours: obj.operatingHours,
  72. additionalNotes: obj.additionalNotes,
  73. endlessService: obj.endlessService,
  74. serviceProvider: obj.serviceProvider,
  75. enableReservation: obj.enableReservation
  76. }
  77. } else {
  78. return {id: 0}
  79. }
  80. },
  81. getNowHHmm() {
  82. const now = new Date();
  83. var month = now.getHours();
  84. var minute = now.getMinutes();
  85. return [month, minute].map(formatNumber).join(':');
  86. },
  87. getYYMMdd(date) {
  88. var year = date.getFullYear()
  89. var month = date.getMonth() + 1
  90. var day = date.getDate()
  91. //var hour = date.getHours()
  92. //var minute = date.getMinutes()
  93. //var second = date.getSeconds()
  94. return [year, month, day].map(formatNumber).join('/')
  95. },
  96. formatYYMM(date) {
  97. var year = date.getFullYear()
  98. var month = date.getMonth() + 1
  99. return [year, month].map(formatNumber).join('-')
  100. },
  101. hour2HHmm(hour) {
  102. if (hour) {
  103. if (hour > 0) {
  104. const h = parseInt(hour);
  105. const m = (hour - h) * 60;
  106. return h + ' hr ' + parseInt(m) + 'min';
  107. } else {
  108. const m = hour * 60;
  109. return parseInt(m) + 'min';
  110. }
  111. } else {
  112. return '0 min';
  113. }
  114. },
  115. minutes2HHmm(minutes) {
  116. if (minutes) {
  117. const m = Number(minutes);
  118. if (m > 60) {
  119. const h = m / 60;
  120. const mm = m % 60;
  121. return parseInt(h) + ' hr ' + parseInt(mm) + ' min';
  122. } else {
  123. return parseInt(minutes) + ' min';
  124. }
  125. } else {
  126. return '0 min';
  127. }
  128. },
  129. minutes2HHMM(minutes) {
  130. if (minutes) {
  131. const m = Number(minutes);
  132. if (m > 60) {
  133. const h = m / 60;
  134. const mm = m % 60;
  135. return formatNumber(parseInt(h)) + ':' + formatNumber(parseInt(mm));
  136. } else {
  137. return '00:' + formatNumber(parseInt(minutes));
  138. }
  139. } else {
  140. return '00:00';
  141. }
  142. },
  143. isEmpty(str, encNo=false) {
  144. if (typeof str == 'number') {
  145. if (encNo) {
  146. return str === 0;
  147. } else {
  148. return false;
  149. }
  150. } else if (str) {
  151. if (typeof str == 'object') {
  152. return Object.keys(str).length == 0;
  153. } else if (Array.isArray(str)) {
  154. return str.length == 0;
  155. } else {
  156. if (str == undefined || str == null || str == "")
  157. return true;
  158. return false;
  159. }
  160. } else {
  161. return true;
  162. }
  163. },
  164. isNotEmpty(str, encNo) {
  165. return !this.isEmpty(str, encNo);
  166. },
  167. getParamsFromUrl(url) {
  168. var params = {}
  169. const list = url.split('&');
  170. for (let item of list) {
  171. if (item.indexOf('=') > 0) {
  172. const param = item.split('=');
  173. if (param.length == 2)
  174. params[param[0]] = param[1];
  175. }
  176. }
  177. return params;
  178. },
  179. join(arrays=[], spect="") {
  180. let str = ''
  181. if (arrays) {
  182. arrays.forEach((item, index) => {
  183. if (index == 0) {
  184. str += item;
  185. } else {
  186. str += spect + item;
  187. }
  188. });
  189. }
  190. return str;
  191. },
  192. /**
  193. * 将给定数字保留任意位小数
  194. * @param {*} text
  195. * @param {number} scape
  196. * @returns 小数
  197. */
  198. toFixed(text, scape) {
  199. if (text) {
  200. return Number(Number(text).toFixed(scape));
  201. } else {
  202. return text;
  203. }
  204. },
  205. /**
  206. * 16进制颜色转为RGB
  207. * @param {*} value 16进制颜色
  208. * @returns RGB数据
  209. */
  210. hexColorToRgb(value) {
  211. let sColor = value.toLowerCase()
  212. if (sColor && sColor.indexOf("#") >= 0) {
  213. if (sColor.length === 4) {
  214. let sColorNew = '#'
  215. for (let i = 1; i < 4; i += 1) {
  216. sColorNew += sColor.slice(i, i + 1).concat(sColor.slice(i, i + 1))
  217. }
  218. sColor = sColorNew
  219. }
  220. // 处理1+6位的颜色值
  221. let sColorChange = []
  222. for (let i = 1; i < 7; i += 2) {
  223. sColorChange.push(parseInt('0x' + sColor.slice(i, i + 2)))
  224. }
  225. return sColorChange;//'rgb(' + sColorChange.join(',') + ')'
  226. } else if (sColor && sColor.indexOf("0x") >= 0) {
  227. if (sColor.length === 4) {
  228. let sColorNew = '0x'
  229. for (let i = 1; i < 4; i += 1) {
  230. sColorNew += sColor.slice(i, i + 1).concat(sColor.slice(i, i + 1))
  231. }
  232. sColor = sColorNew
  233. }
  234. // 处理2+6位的颜色值
  235. let sColorChange = []
  236. for (let i = 2; i < 8; i += 2) {
  237. sColorChange.push(parseInt('0x' + sColor.slice(i, i + 2)))
  238. }
  239. return sColorChange;//'rgb(' + sColorChange.join(',') + ')'
  240. }
  241. return sColor
  242. },
  243. getRgbaColor(colors, alpha=1) {
  244. if (colors.length == 3) {
  245. return "rgba(" + this.join(colors, ",") + "," +alpha + ")";
  246. }
  247. },
  248. /**
  249. * 注册FCM通知token
  250. * @param {String} token 原始保存的Firebase令牌
  251. * @param {Function} back 执行结果(boolean)
  252. */
  253. async registerFirebaseToken(token, back) {
  254. const thisDate = this.formatYYMM(new Date()) + "-" + getUserId();
  255. const lastDate = await getStorageSync('RegisterTokenDate');
  256. console.log('>>>RegisterToken<<<', thisDate, lastDate + "●");
  257. if (thisDate != lastDate || token != notifyToken.token) {
  258. const params = {
  259. os: isIOS ? "ios": "android",
  260. googleToken: notifyToken.token
  261. }
  262. apiUser.setNotifyToken(params).then(res => {
  263. console.log('>>>RegisterToken-Suc<<<', res);
  264. setStorage('RegisterTokenDate', thisDate);
  265. if (back) back(true);
  266. }).catch(err => {
  267. console.log('>>>RegisterToken-Err<<<', err);
  268. if (back) back(false);
  269. });
  270. } else {
  271. if (back) back(false);
  272. }
  273. },
  274. setBackClick(routeNames, func) {
  275. global.pageBackFallback = {
  276. names: routeNames,
  277. callback: func
  278. }
  279. }
  280. }