util.js 5.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256
  1. import simpleCache from './cache.js'
  2. import dateTime from './dateTime.js'
  3. //工具类
  4. let util = {}
  5. //预览图片
  6. // this.$util.preview('http://....png')
  7. // this.$util.preview('../../test.png')
  8. // this.$util.preview(['http://....png', '../../test.png'])
  9. util.preview = async (src) => {
  10. const urls = typeof src === 'string' ? [src] : src
  11. const filePath = async src => src.match(/^http/) ? src : (await uni.compressImage({
  12. src,
  13. quality: 100
  14. }))[1].tempFilePath
  15. for (let i = 0; i < urls.length; i++) {
  16. urls[i] = await filePath(urls[i])
  17. }
  18. uni.previewImage({
  19. urls
  20. })
  21. },
  22. //复制
  23. util.copy = content => {
  24. uni.setClipboardData({
  25. data: content
  26. });
  27. }
  28. util.formatHtml = (str) => {
  29. return decodeURIComponent(str).replace(/<[^>]+>/g, "");
  30. }
  31. util.dealAccountNo = account => {
  32. if (account.startsWith('1')) {
  33. if (account.length >= 17) {
  34. account = account.substring(0, 4) + " **** **** " + account.substring(account.length - 4);
  35. }
  36. }
  37. if (account.startsWith('6')) {
  38. if (account.length >= 16) {
  39. account = account.substring(0, 4) + " **** **** " + account.substring(account.length - 4);
  40. }
  41. }
  42. return account
  43. },
  44. util.calculateDistance = (lat1, lng1, lat2, lng2) => {
  45. console.log(lat1, lng1, lat2, lng2)
  46. var radLat1 = lat1 * Math.PI / 180.0;
  47. var radLat2 = lat2 * Math.PI / 180.0;
  48. var a = radLat1 - radLat2;
  49. var b = lng1 * Math.PI / 180.0 - lng2 * Math.PI / 180.0;
  50. var s = 2 * Math.asin(Math.sqrt(Math.pow(Math.sin(a / 2), 2) +
  51. Math.cos(radLat1) * Math.cos(radLat2) * Math.pow(Math.sin(b / 2), 2)));
  52. s = s * 6378.137;
  53. s = Math.round(s * 10000) / 10; //单位米
  54. return s
  55. },
  56. util.showModal = (content, title = '提示') => {
  57. return new Promise((resolve, reject) => {
  58. uni.showModal({
  59. title: title,
  60. content: content,
  61. success: (res) => {
  62. resolve(res)
  63. }
  64. });
  65. })
  66. }
  67. //拨打电话
  68. util.callPhone = (phone) => {
  69. uni.showModal({
  70. title: '提示',
  71. content: `确定要拨打电话:${phone}吗?`,
  72. success: function(res) {
  73. if (res.confirm) {
  74. uni.makePhoneCall({
  75. phoneNumber: phone //仅为示例
  76. });
  77. }
  78. }
  79. });
  80. }
  81. /**
  82. * 获取url参数
  83. */
  84. util.getUrlParams = (p) => {
  85. let url = decodeURIComponent(p);
  86. let param = {};
  87. // 把参数按&拆分成数组
  88. let index = url.indexOf("?");
  89. let query = url.substring(index + 1, index.length);
  90. var param_arr = query.split("&");
  91. for (var i = 0; i < param_arr.length; i++) {
  92. var pair = param_arr[i].split("=");
  93. param[pair[0]] = pair[1];
  94. }
  95. return param
  96. }
  97. /**
  98. * 数组去重
  99. * @param {Array} arr 源数组
  100. *
  101. * @return {Array} newArr 去重后的数组
  102. */
  103. util.uniqueArray = (arr) => {
  104. return [...new Set(arr)]
  105. }
  106. /**
  107. * 对象键复制
  108. */
  109. util.objectCopy = (target, source) => {
  110. Object.keys(target).forEach(key => {
  111. target[key] = source[key]
  112. })
  113. }
  114. util.objectKeyIsEmpty = (obj) => {
  115. let empty = false;
  116. for (const key in obj) {
  117. if (obj.hasOwnProperty(key)) {
  118. if (obj[key] === null || obj[key] === '') {
  119. empty = true;
  120. } else {
  121. empty = false;
  122. break;
  123. }
  124. }
  125. }
  126. return empty;
  127. }
  128. //获取某一个页面上下文 context
  129. util.getPageCtx = (idx = 0) => {
  130. let pages = getCurrentPages()
  131. if (pages.length > 0) {
  132. return pages[pages.length - 1 - idx] || {}
  133. }
  134. return {}
  135. }
  136. //获取当前页面路由
  137. util.getCurrentRoute = () => {
  138. let page = util.getPageCtx()
  139. if (page.route) {
  140. return page.route
  141. }
  142. return ''
  143. }
  144. //回到上一页刷新页面
  145. util.isReloadAndBack = () => {
  146. let prePage = util.getPageCtx(1)
  147. prePage.setData({
  148. "reload": true
  149. })
  150. uni.navigateBack({
  151. delta: 1
  152. })
  153. }
  154. //onshow方法通过刷新mescroll数据
  155. util.reload = (mescroll) => {
  156. let page = util.getPageCtx()
  157. if (page.data.reload) {
  158. mescroll.resetUpScroll();
  159. page.data.reload = false
  160. }
  161. }
  162. /**
  163. * 携带参数
  164. * data:{}
  165. */
  166. util.backWithParams = (data) => {
  167. let prePage = util.getPageCtx(1)
  168. prePage.setData(data)
  169. uni.navigateBack({
  170. delta: 1
  171. })
  172. }
  173. /**
  174. * 获取参数
  175. * paramsName:参数名
  176. */
  177. util.getBackParams = (paramsName) => {
  178. let page = util.getPageCtx()
  179. if (page.data[paramsName]) {
  180. return page.data[paramsName]
  181. }
  182. return null
  183. }
  184. /**
  185. * vue中加载script
  186. */
  187. util.loadScriptFunc = (url, callback) => {
  188. callback = typeof callback === 'function' ? callback : function() {};
  189. var head = document.getElementsByTagName('head')[0];
  190. var script = document.createElement('script');
  191. script.type = 'text/javascript';
  192. script.src = url;
  193. script.onreadystatechange = function() {
  194. if (this.readyState == "loaded" || this.readyState == "complete") {
  195. callback();
  196. }
  197. }
  198. script.onload = callback;
  199. head.appendChild(script);
  200. }
  201. util.loadScript = (src) => {
  202. var script = document.createElement('script');
  203. script.src = src;
  204. document.body.appendChild(script);
  205. }
  206. // 判断公众号截取code
  207. util.getUrlParam = (name) => {
  208. let reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)");
  209. let r = window.location.search.substr(1).match(reg);
  210. if (r != null) {
  211. return unescape(r[2]);
  212. }
  213. return null;
  214. }
  215. //手机号脱敏
  216. util.handlePhone = (phone) => {
  217. return phone.toString().substr(0, 3) + '****' + phone.toString().substr(7, phone.length)
  218. }
  219. /**
  220. * 正则匹配手机号码是否正确
  221. * phone 手机号码
  222. * return 是否属于三大运营商号段范围
  223. * https://www.qqzeng.com/article/phone.html
  224. */
  225. util.isPhone = (phone) => {
  226. let regExp = new RegExp("^((13[0-9])|(14[5-9])|(15([0-3]|[5-9]))|(16[6-7])|(17[1-8])|(18[0-9])|(19[1|3])|(19[5|6])|(19[8|9]))\\d{8}$").test(phone);
  227. return regExp
  228. }
  229. export default util