123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200 |
- /**
- * 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) => {
- lat1 = lat1 || 0;
- lng1 = lng1 || 0;
- lat2 = lat2 || 0;
- lng2 = lng2 || 0;
- let rad1 = lat1 * Math.PI / 180.0;
- let rad2 = lat2 * Math.PI / 180.0;
- let a = rad1 - rad2;
- let b = lng1 * Math.PI / 180.0 - lng2 * Math.PI / 180.0;
- let r = 6378137;
- 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)));
- distance = Math.ceil(distance * 10) / 10000;
- return distance;
- }
- export default {
- toHttps,
- jump,
- jumpJoinVip,
- arrayDiff,
- calcDistance
- }
|