util.js 4.8 KB

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