util.js 4.0 KB

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