util.js 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181
  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({ src, quality: 100 }))[1].tempFilePath
  12. for (let i = 0; i < urls.length; i++) {
  13. urls[i] = await filePath(urls[i])
  14. }
  15. uni.previewImage({ urls })
  16. },
  17. //复制
  18. util.copy=content=>{
  19. uni.setClipboardData({ data: content });
  20. }
  21. util.calculateDistance=(lat1, lng1, lat2, lng2)=> {
  22. var radLat1 = lat1 * Math.PI / 180.0;
  23. var radLat2 = lat2 * Math.PI / 180.0;
  24. var a = radLat1 - radLat2;
  25. var b = lng1 * Math.PI / 180.0 - lng2 * Math.PI / 180.0;
  26. var s = 2 * Math.asin(Math.sqrt(Math.pow(Math.sin(a / 2), 2) +
  27. Math.cos(radLat1) * Math.cos(radLat2) * Math.pow(Math.sin(b / 2), 2)));
  28. s = s * 6378.137;
  29. s = Math.round(s * 10000) / 10000;//单位km
  30. return Math.floor(s * 100) / 100
  31. },
  32. /**
  33. * 对象键复制
  34. */
  35. util.objectCopy = (target, source) => {
  36. Object.keys(target).forEach(key => {
  37. target[key] = source[key]
  38. })
  39. }
  40. util.showModal=(content,title='提示')=>{
  41. return new Promise((resolve,reject)=>{
  42. uni.showModal({
  43. title: title,
  44. content: content,
  45. success: (res)=>{
  46. resolve(res)
  47. }
  48. });
  49. })
  50. }
  51. //拨打电话
  52. util.callPhone=(phone)=>{
  53. uni.showModal({
  54. title: '提示',
  55. content: `确定要拨打电话:${phone}吗?`,
  56. success: function (res) {
  57. if (res.confirm) {
  58. uni.makePhoneCall({
  59. phoneNumber: phone //仅为示例
  60. });
  61. }
  62. }
  63. });
  64. }
  65. /**
  66. * 数组去重
  67. * @param {Array} arr 源数组
  68. *
  69. * @return {Array} newArr 去重后的数组
  70. */
  71. util.uniqueArray = (arr)=>{
  72. return [...new Set(arr)]
  73. }
  74. //获取某一个页面上下文 context
  75. util.getPageCtx = (idx = 0) => {
  76. let pages = getCurrentPages()
  77. if (pages.length > 0) {
  78. return pages[pages.length - 1 - idx] || {}
  79. }
  80. return {}
  81. }
  82. //获取当前页面路由
  83. util.getCurrentRoute = () => {
  84. let page = util.getPageCtx()
  85. if (page.route) {
  86. return page.route
  87. }
  88. return ''
  89. }
  90. //回到上一页刷新页面
  91. util.isReloadAndBack = () => {
  92. let prePage=util.getPageCtx(1)
  93. prePage.setData({
  94. "reload":true
  95. })
  96. uni.navigateBack({
  97. delta:1
  98. })
  99. }
  100. //onshow方法通过刷新mescroll数据
  101. util.reload = (mescroll) => {
  102. let page= util.getPageCtx()
  103. if (page.data.reload) {
  104. mescroll.resetUpScroll();
  105. page.data.reload=false
  106. }
  107. }
  108. // 刷新当前页面
  109. util.refreshPage = (vm) => {
  110. const pages = getCurrentPages()
  111. const currentPage = pages[pages.length - 1]
  112. const path = '/' + currentPage.route + vm.$u.queryParams(currentPage.options)
  113. uni.reLaunch({
  114. url: path,
  115. fail: (err) => {
  116. console.log(err)
  117. }
  118. })
  119. }
  120. /**
  121. * 携带参数
  122. * data:{}
  123. */
  124. util.backWithParams=(data)=>{
  125. let prePage=util.getPageCtx(1)
  126. prePage.setData(data)
  127. uni.navigateBack({
  128. delta:1
  129. })
  130. }
  131. /**
  132. * 获取参数
  133. * paramsName:参数名
  134. */
  135. util.getBackParams = (paramsName) => {
  136. let page= util.getPageCtx()
  137. if (page.data[paramsName]) {
  138. return page.data[paramsName]
  139. }
  140. return null
  141. }
  142. /**
  143. * 获取url参数
  144. */
  145. util.getUrlParams=(p)=>{
  146. let url = decodeURIComponent(p);
  147. let param = {};
  148. // 把参数按&拆分成数组
  149. let index = url.indexOf("?");
  150. let query = url.substring(index + 1, index.length);
  151. var param_arr = query.split("&");
  152. for (var i = 0; i < param_arr.length; i++) {
  153. var pair = param_arr[i].split("=");
  154. param[pair[0]] = pair[1];
  155. }
  156. return param
  157. }
  158. export default util