/** * http转换为https */ const toHttps = (url)=>{ if(url.indexOf('http')>-1 && url.indexOf('https') == -1){ url = url.replace('http', 'https'); } return url; } /** * @param { jump_type 1.跳转H5 2.跳转新小程序 3.图片 4.跳转内部页面 jump_config string | stringify(object) @param 其他参数 如:id,nav } * 注:jump_type,接口3和4有冲突所以写了兼容 * 注:图片跳转逻辑空缺 */ const jump = ({jump_type, jump_config, ...params} = {})=>{ console.log(params); return new Promise((resolve, reject)=>{ if(!jump_type) reject(false); jump_config = jump_config == undefined ? "" : jump_config; if(jump_type == 1){ const nav = Reflect.has(params, "nav") ? `&nav=${params.nav}` : ``; const url = `/pages/webview/webview?url=${jump_config+nav}`; uni.navigateTo({ url: url, success: () => { resolve(true) }, fail: _ => { uni.reLaunch({ url: url, fail:(err)=>{ reject(err) } }) } }); }else if(jump_type == 2){ const {appid, path} = JSON.parse(jump_config); wx.navigateToMiniProgram({ appId: `${appid}`, path: `${path}`, extraData: { foo: 'bar' }, // envVersion: 'develop', //开发版develop 开发版 trial 体验版 release 正式版 success:() => { resolve(true) }, fail:(err) => { reject(err) } }) }else if(jump_type == 3){ if(jump_config.substr(0, 7) == '/pages/'){ jumpInner(jump_config, params) .then(_=>{ resolve(true) }) .catch(err=>{ reject(err) }) }else{ //图片跳转 console.log("图片跳转逻辑空缺") } }else if(jump_type == 4){ jumpInner(jump_config, params) .then(_=>{ resolve(true) }) .catch(err=>{ reject(err) }) }else{ reject('unkown error') } }) } /** * jumpy依赖函数 */ const jumpInner = (url, params)=>{ const tabbarPageList = [ 'pages/index/index', 'pages/map/map', 'pages/msg/msg', 'pages/my/my' ] let paramsText = ``; for(let [k, v] of Object.entries(params)){ paramsText +=`${k}=${v}&` } if(paramsText.length>0){ paramsText = paramsText.slice(0,paramsText.length-1); url = url.indexOf("?") > -1 ? `${url}&${paramsText}` : `${url}?${paramsText}`; } let func = uni.switchTab; const pages = getCurrentPages(); if(pages.length>0){ const {route} = pages[pages.length - 1]; tabbarPageList.includes(route) func = tabbarPageList.includes(route) ? uni.reLaunch : uni.switchTab; } func = uni.reLaunch; console.log(url, '跳转完整地址'); return new Promise((resolve,reject)=>{ uni.navigateTo({ url: url, success:()=>{ resolve(true) }, fail: _=>{ func({ url: url, success:()=>{ resolve(true) }, fail:(err)=>{ reject(err) } }) } }) }) } /** * 跳转加入会员小程序 */ const jumpJoinVip = () => { return new Promise((resolve, reject)=>{ wx.navigateToMiniProgram({ appId: 'wx255b58f0992b3c53', //appid path: 'newUIMain/enrollment/enrollment', //path extraData: { //参数 foo: 'bar' }, // envVersion: 'develop', //开发版develop 开发版 trial 体验版 release 正式版 success(res) { resolve(res) // 打开成功 }, fail(e) { reject(e) } }) }) } /** * 求数组差集 * @param {Object} arr1 * @param {Object} arr2 */ const arrayDiff = function(arr1, arr2) { var set1 = new Set(arr1); var set2 = new Set(arr2); var subset = []; for (let item of set1) { if (!set2.has(item)) { subset.push(item); } } return subset; } /** * 测试两个地理位置间得距离 */ const calcDistance = (lat1, lng1, lat2, lng2) => { let radLat1 = lat1 * Math.PI / 180.0; let radLat2 = lat2 * Math.PI / 180.0; let a = radLat1 - radLat2; let b = lng1 * Math.PI / 180.0 - lng2 * Math.PI / 180.0; let s = 2 * Math.asin(Math.sqrt(Math.pow(Math.sin(a / 2), 2) + Math.cos(radLat1) * Math.cos(radLat2) * Math.pow(Math.sin(b / 2), 2))); s = s * 6378.137; s = Math.round(s * 10000) / 10000; return s; } export default { toHttps, jump, jumpJoinVip, arrayDiff, calcDistance }