import { createAxiosByinterceptors } from '@/api/request'; import Stomp from "@/lib/stompjs"; import { Decrypt,Encrypt } from "@/utils/crypto"; import SockJS from "@/utils/sockjs"; import qs from 'qs'; import { lbsDictionary } from '@/common/js/BaseDictionary'; import uni from './uniHooks'; export function getMobileOperatingSystem() { // #ifdef H5 const userAgent = navigator.userAgent || navigator.vendor || window.opera; // Windows Phone must come first because its UA also contains "Android" if ( /windows phone/i.test(userAgent) ) { return 'Windows Phone'; } if ( /android/i.test(userAgent) ) { return 'Android'; } // iOS detection from: http://stackoverflow.com/a/9039885/177710 if ( /iPad|iPhone|iPod/.test(userAgent) && !window.MSStream ) { return 'iOS'; } return 'unknown'; // #endif // #ifndef H5 return 'unknown'; // #endif } export function getQueryParam() { // let query: Record = {}; let query = {}; query = location.search .slice(1) .split('&') .map(( p ) => p.split('=')) // .reduce((obj: Record, pair) => { .reduce(( obj,pair ) => { const [key,value] = pair.map(decodeURIComponent); obj[key] = value; return obj; },{}); return query; } // export function isInWeixinH5() { // TODO: 发布前取消注释 return navigator.userAgent.toLowerCase().indexOf('micromessenger') !== -1; // return true; } // 判断当前运行平台 export function getPlatform() { const userAgent = navigator.userAgent.toLowerCase(); // 微信小程序 if ( /miniprogram/g.test(userAgent) ) { return 'miniprogram'; } // 微信公众号 if ( /micromessenger/g.test(userAgent) ) { return 'micromessenger'; } return 'miniprogram'; // TODO: 上线前改为其他 } // 是否在微信小程序中运行 export function getIsMin() { const platform = getPlatform(); return platform === 'miniprogram'; } // 是否在微信公众号中运行 export function getIsWxh5() { const platform = getPlatform(); return platform === 'micromessenger'; } // 获取appid export function getAppIdByGroupIdAndMallId( {groupId,mallId,type} ) { const platform = getPlatform(); if ( platform === 'miniprogram' ) { return 'wx92c3e55fbef6b2af'; } if ( platform === 'micromessenger' ) { // 后期在其他公众号上线H5应用,appid需要根据地址栏的 project 动态处理, 已预留入口 // console.log(89); const env = window.env === 'qa' ? 'qa' : 'prod'; let appInfo = {}; Object.keys(lbsDictionary).forEach(( lbsId ) => { const elm = lbsDictionary[lbsId]; // console.log(92, env, elm[env].groupId, groupId, elm[env].mallId, mallId); if ( elm[env].groupId === groupId && elm[env].mallId === mallId ) { appInfo = { appid: elm[env].appid, // secret: elm[env].secret, projectId: elm[env].projectId, }; } }); // console.log(101, appInfo); if ( JSON.stringify(appInfo) === '{}' ) { // groupId, mallId 错误 return; } if ( type === 'appid' ) { return appInfo.appid; } if ( type === 'all' ) { return appInfo; } return 'wx907c27f16841a919'; } return ''; } export function getUrlParams( url = window.location.href ) { const str = `${ url }`.split('?')[1]; if ( !str ) return {}; return qs.parse(str); } // 根据不同环境和lsbid返回 groupId 和 mallId export function getGroupIdAndMallIdByLsbId( lbsId ) { console.log(125,lbsId); const lbsObj = lbsDictionary[lbsId]; if ( window.env === 'prod' ) { return lbsObj['prod']; } if ( window.env === 'dev' ) { return lbsObj['dev']; } return lbsObj['qa']; } // 微信小程序端登录之后的回调 export function wxToLoginCallback( path,callback ) { const oldPath = uni.getStorageSync('oldPath'); // 如果是在微信小程序内部运行的话 if ( getIsMin() && oldPath !== path ) { uni.setStorageSync('oldPath',path); // 前往登录 window.toWXSendMsg({ type: 'toLogin', options: { path: path, }, }); window.subscribe('callback',( options ) => { console.log('登录页面的回调',JSON.stringify(options)); if ( options.isReload ) { console.log('刷新页面'); window.location.reload(); } else { console.log('刷新页面:callback'); callback && callback(options); } }); return; } // 如果是在微信公众号环境运行的话 /*if ( getIsWxh5() ) { return }*/ } export function initEnv() { const href = window.location.href; console.log('当前页面的url地址 ',href); if ( /dev-|8080/.test(href) ) { window.env = 'qa'; window.profileApi = 'https://qa-apim.kerryplus.com/c/api'; window.api = 'qaApi'; // window.env = 'dev'; // window.profileApi = 'https://dev-gateway-kip.kerryonvip.com/api'; // window.api = 'devApi'; // window.env = 'prod'; // window.profileApi = 'https://sl-apim.kerryplus.com/c/api'; // window.api = 'api'; return; } if ( /qa-/.test(href) ) { window.env = 'qa'; window.api = 'qaApi'; window.profileApi = 'https://qa-apim.kerryplus.com/c/api'; return; } if ( /sl-/.test(href) ) { window.env = 'prod'; window.profileApi = 'https://sl-apim.kerryplus.com/c/api'; window.api = 'api'; return; } window.env = 'prod'; window.profileApi = 'https://apim.kerryplus.com/c/api'; window.api = 'api'; } export function requestInit() { let baseURL = window.profileApi + '/temporary-parking/v1'; if (window.location.href.indexOf('parking.') < 0) { // baseURL = '/msApi'; } window.requestms = createAxiosByinterceptors({ // baseURL: `https://dev-kip-service-internal.kerryonvip.com/`, // baseURL: `http://tp.hht.test/`, // baseURL: window.profileApi, // TODO: 微服务发布到DEV环境之后取消注释 baseURL, // baseURL: `/msApi`, }); } // websocket 链接 export function getUrl() { return `https://crm.kerryplus.com/xcrm-api`; // TODO: 临时更改websocket域名为prod // 如果 kerry+ 这边的访问环境是 sl 或者 lt,需要把 wss 指向 qa 环境。 const href = `${ window.location.href }`; if ( /dev-|8080/.test(href) ) { return 'https://qa-crm-kpl.kerryprops.com.cn/xcrm-api'; } if ( /qa-/.test(href) ) { return 'https://qa-crm-kpl.kerryprops.com.cn/xcrm-api'; } // return 'https://qa-crm-kpl.kerryprops.com.cn/xcrm-api'; return `https://crm.kerryplus.com/xcrm-api`; } export function windowSendInit() { const token = window.token; window.toWXSendMsg = function ( {type = '',funcName = '',options = {}} ) { /** * 向小程序端发送消息 */ if ( !type ) return; window.stompClient.send( '/sendToWechat', {}, JSON.stringify({ token, data: Encrypt( JSON.stringify({ type: type, funcName, options, }) ), }) ); }; // 主动订阅事件回调 window.subscribe = function ( type,callback ) { const subscribeId = window.stompClient.subscribe('/user/' + token + '/toH5',function ( response ) { try { let res = { token: '', // 微信小程序端 页面的传递过来的token data: '', // 微信小程序端 页面的传递过来的信息(已加密) }; if ( response.body ) { res = JSON.parse(response.body); } // 检查 微信小程序端 发送过来的信息和token是否与当前页面的 token一致。并且 res.data 携带信息,在解密之后是 json 格式 if ( res.token && res.token === token && res.data ) { const msgJson = JSON.parse(Decrypt(res.data)); const reg = new RegExp(type); // 获取 projectId if ( reg.test(msgJson.type) ) { callback(msgJson.options,subscribeId); subscribeId.unsubscribe(); return; } } } catch ( err ) { console.log('stomp error',err); } }); }; } export function wssInit() { return new Promise(( resolve,reject ) => { try { const socket = new SockJS(`${ getUrl() }/hafengWebsocket?token=${ window.token }`); window.stompClient = Stomp.over(socket); window.stompClient.debug = null; windowSendInit(); window.stompClient.connect({},( frame ) => { // 请求 projectId window.toWXSendMsg({ type: 'getProjectId', options: {}, }); window.subscribe('projectId',( options ) => { resolve(options); }); }); } catch ( err ) { reject(err); } }); }