util.js 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136
  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({urls})
  19. },
  20. //复制
  21. util.copy = content => {
  22. uni.setClipboardData({data: content});
  23. }
  24. util.calculateDistance = (lat1, lng1, lat2, lng2) => {
  25. console.log(lat1, lng1, lat2, lng2)
  26. var radLat1 = lat1 * Math.PI / 180.0;
  27. var radLat2 = lat2 * Math.PI / 180.0;
  28. var a = radLat1 - radLat2;
  29. var b = lng1 * Math.PI / 180.0 - lng2 * Math.PI / 180.0;
  30. var s = 2 * Math.asin(Math.sqrt(Math.pow(Math.sin(a / 2), 2) +
  31. Math.cos(radLat1) * Math.cos(radLat2) * Math.pow(Math.sin(b / 2), 2)));
  32. s = s * 6378.137;
  33. s = Math.round(s * 10000) / 10;//单位米
  34. return s
  35. },
  36. util.showModal = (content, title = '提示') => {
  37. return new Promise((resolve, reject) => {
  38. uni.showModal({
  39. title: title,
  40. content: content,
  41. success: (res) => {
  42. resolve(res)
  43. }
  44. });
  45. })
  46. }
  47. //拨打电话
  48. util.callPhone = (phone) => {
  49. uni.showModal({
  50. title: '提示',
  51. content: `确定要拨打电话:${phone}吗?`,
  52. success: function (res) {
  53. if (res.confirm) {
  54. uni.makePhoneCall({
  55. phoneNumber: phone //仅为示例
  56. });
  57. }
  58. }
  59. });
  60. }
  61. //四舍五入保留2位小数(不够位数,则用0替补)
  62. util.keepTwoDecimalFull = num => {
  63. var result = parseFloat(num)
  64. if (isNaN(result)) {
  65. return false
  66. }
  67. result = Math.round(num * 100) / 100
  68. var s_x = result.toString()
  69. var pos_decimal = s_x.indexOf('.')
  70. if (pos_decimal < 0) {
  71. pos_decimal = s_x.length
  72. s_x += '.'
  73. }
  74. while (s_x.length <= pos_decimal + 2) {
  75. s_x += '0'
  76. }
  77. return s_x
  78. }
  79. /**
  80. * 数组去重
  81. * @param {Array} arr 源数组
  82. *
  83. * @return {Array} newArr 去重后的数组
  84. */
  85. util.uniqueArray = (arr) => {
  86. return [...new Set(arr)]
  87. }
  88. //获取某一个页面上下文 context
  89. util.getPageCtx = (idx = 0) => {
  90. let pages = getCurrentPages()
  91. if (pages.length > 0) {
  92. return pages[pages.length - 1 - idx] || {}
  93. }
  94. return {}
  95. }
  96. //获取当前页面路由
  97. util.getCurrentRoute = () => {
  98. let page = util.getPageCtx()
  99. if (page.route) {
  100. return page.route
  101. }
  102. return ''
  103. }
  104. //回到上一页刷新页面
  105. util.isReloadAndBack = () => {
  106. let prePage = util.getPageCtx(1)
  107. prePage.setData({
  108. "reload": true
  109. })
  110. uni.navigateBack({
  111. delta: 1
  112. })
  113. }
  114. //onshow方法通过刷新mescroll数据
  115. util.reload = (mescroll) => {
  116. let page = util.getPageCtx()
  117. if (page.data.reload) {
  118. mescroll.resetUpScroll();
  119. page.data.reload = false
  120. }
  121. }
  122. export default util