tools.js 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200
  1. /**
  2. * http转换为https
  3. */
  4. const toHttps = (url)=>{
  5. if(url.indexOf('http')>-1 && url.indexOf('https') == -1){
  6. url = url.replace('http', 'https');
  7. }
  8. return url;
  9. }
  10. /**
  11. * @param {
  12. jump_type 1.跳转H5 2.跳转新小程序 3.图片 4.跳转内部页面
  13. jump_config string | stringify(object)
  14. @param 其他参数 如:id,nav
  15. }
  16. * 注:jump_type,接口3和4有冲突所以写了兼容
  17. * 注:图片跳转逻辑空缺
  18. */
  19. const jump = ({jump_type, jump_config, ...params} = {})=>{
  20. console.log(params);
  21. return new Promise((resolve, reject)=>{
  22. if(!jump_type) reject(false);
  23. jump_config = jump_config == undefined ? "" : jump_config;
  24. if(jump_type == 1){
  25. const nav = Reflect.has(params, "nav") ? `&nav=${params.nav}` : ``;
  26. const url = `/pages/webview/webview?url=${jump_config+nav}`;
  27. uni.navigateTo({
  28. url: url,
  29. success: () => {
  30. resolve(true)
  31. },
  32. fail: _ => {
  33. uni.reLaunch({
  34. url: url,
  35. fail:(err)=>{
  36. reject(err)
  37. }
  38. })
  39. }
  40. });
  41. }else if(jump_type == 2){
  42. const {appid, path} = JSON.parse(jump_config);
  43. wx.navigateToMiniProgram({
  44. appId: `${appid}`,
  45. path: `${path}`,
  46. extraData: {
  47. foo: 'bar'
  48. },
  49. // envVersion: 'develop', //开发版develop 开发版 trial 体验版 release 正式版
  50. success:() => {
  51. resolve(true)
  52. },
  53. fail:(err) => {
  54. reject(err)
  55. }
  56. })
  57. }else if(jump_type == 3){
  58. if(jump_config.substr(0, 7) == '/pages/'){
  59. jumpInner(jump_config, params)
  60. .then(_=>{
  61. resolve(true)
  62. })
  63. .catch(err=>{
  64. reject(err)
  65. })
  66. }else{
  67. //图片跳转
  68. console.log("图片跳转逻辑空缺")
  69. }
  70. }else if(jump_type == 4){
  71. jumpInner(jump_config, params)
  72. .then(_=>{
  73. resolve(true)
  74. })
  75. .catch(err=>{
  76. reject(err)
  77. })
  78. }else{
  79. reject('unkown error')
  80. }
  81. })
  82. }
  83. /**
  84. * jumpy依赖函数
  85. */
  86. const jumpInner = (url, params)=>{
  87. const tabbarPageList = [
  88. 'pages/index/index',
  89. 'pages/map/map',
  90. 'pages/msg/msg',
  91. 'pages/my/my'
  92. ]
  93. let paramsText = ``;
  94. for(let [k, v] of Object.entries(params)){
  95. paramsText +=`${k}=${v}&`
  96. }
  97. if(paramsText.length>0){
  98. paramsText = paramsText.slice(0,paramsText.length-1);
  99. url = url.indexOf("?") > -1 ? `${url}&${paramsText}` : `${url}?${paramsText}`;
  100. }
  101. let func = uni.switchTab;
  102. const pages = getCurrentPages();
  103. if(pages.length>0){
  104. const {route} = pages[pages.length - 1];
  105. tabbarPageList.includes(route)
  106. func = tabbarPageList.includes(route) ? uni.reLaunch : uni.switchTab;
  107. }
  108. func = uni.reLaunch;
  109. console.log(url, '跳转完整地址');
  110. return new Promise((resolve,reject)=>{
  111. uni.navigateTo({
  112. url: url,
  113. success:()=>{
  114. resolve(true)
  115. },
  116. fail: _=>{
  117. func({
  118. url: url,
  119. success:()=>{
  120. resolve(true)
  121. },
  122. fail:(err)=>{
  123. reject(err)
  124. }
  125. })
  126. }
  127. })
  128. })
  129. }
  130. /**
  131. * 跳转加入会员小程序
  132. */
  133. const jumpJoinVip = () => {
  134. return new Promise((resolve, reject)=>{
  135. wx.navigateToMiniProgram({
  136. appId: 'wx255b58f0992b3c53', //appid
  137. path: 'newUIMain/enrollment/enrollment', //path
  138. extraData: { //参数
  139. foo: 'bar'
  140. },
  141. // envVersion: 'develop', //开发版develop 开发版 trial 体验版 release 正式版
  142. success(res) {
  143. resolve(res)
  144. // 打开成功
  145. },
  146. fail(e) {
  147. reject(e)
  148. }
  149. })
  150. })
  151. }
  152. /**
  153. * 求数组差集
  154. * @param {Object} arr1
  155. * @param {Object} arr2
  156. */
  157. const arrayDiff = function(arr1, arr2) {
  158. var set1 = new Set(arr1);
  159. var set2 = new Set(arr2);
  160. var subset = [];
  161. for (let item of set1) {
  162. if (!set2.has(item)) {
  163. subset.push(item);
  164. }
  165. }
  166. return subset;
  167. }
  168. /**
  169. * 测试两个地理位置间得距离
  170. */
  171. const calcDistance = (lat1, lng1, lat2, lng2) => {
  172. lat1 = lat1 || 0;
  173. lng1 = lng1 || 0;
  174. lat2 = lat2 || 0;
  175. lng2 = lng2 || 0;
  176. let rad1 = lat1 * Math.PI / 180.0;
  177. let rad2 = lat2 * Math.PI / 180.0;
  178. let a = rad1 - rad2;
  179. let b = lng1 * Math.PI / 180.0 - lng2 * Math.PI / 180.0;
  180. let r = 6378137;
  181. let distance = r * 2 * Math.asin(Math.sqrt(Math.pow(Math.sin(a / 2), 2) + Math.cos(rad1) * Math.cos(rad2) * Math.pow(Math.sin(b / 2), 2)));
  182. distance = Math.ceil(distance * 10) / 10000;
  183. return distance;
  184. }
  185. export default {
  186. toHttps,
  187. jump,
  188. jumpJoinVip,
  189. arrayDiff,
  190. calcDistance
  191. }