123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377 |
- 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<string, string> = {};
- let query = {};
- query = location.search
- .slice(1)
- .split('&')
- .map(( p ) => p.split('='))
- // .reduce((obj: Record<string, string>, 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 isAlipay() {
- const userAgent = navigator.userAgent.toLowerCase();
- return /alipayclient/g.test(userAgent)
- }
- // 是否在微信小程序中运行
- export function getIsMin() {
- const platform = getPlatform();
- // console.log('platform====>80', platform);
- 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);
- uni.setStorageSync('oldPath','');
- }
- });
- return;
- }
- // 如果是在微信公众号环境运行的话
- /*if ( getIsWxh5() ) {
- return
- }*/
- }
- export function initEnv() {
- const href = window.location.href;
- console.log('当前页面的url地址 ',href);
- if ( /dev-|808[0-9]/.test(href) ) {
- window.env = 'qa';
- window.profileApi = 'https://qa-apim.kerryplus.com/c/api';
- window.cmrApi = 'https://qa-crm.kerryplus.com/xcrm-api/api';
- window.api = 'qaApi';
- // window.env = 'dev';
- // window.profileApi = 'https://dev-gateway-kip.kerryonvip.com/api';
- // window.cmrApi = 'https://dev-crm.kerryplus.com/xcrm-api/api';
- // window.api = 'devApi';
- // window.env = 'prod';
- // window.profileApi = 'https://sl-apim.kerryplus.com/c/api';
- // window.cmrApi = 'https://sl-crm.kerryplus.com/xcrm-api/api';
- // window.api = 'api';
- return;
- }
- if ( /qa-/.test(href) ) {
- window.env = 'qa';
- window.api = 'qaApi';
- window.profileApi = 'https://qa-apim.kerryplus.com/c/api';
- window.cmrApi = 'https://qa-crm.kerryplus.com/xcrm-api/api';
- return;
- }
- if ( /sl-/.test(href) ) {
- window.env = 'prod';
- window.profileApi = 'https://sl-apim.kerryplus.com/c/api';
- window.cmrApi = 'https://sl-crm.kerryplus.com/xcrm-api/api';
- window.api = 'api';
- return;
- }
- window.env = 'prod';
- window.profileApi = 'https://apim.kerryplus.com/c/api';
- window.cmrApi = 'https://crm.kerryplus.com/xcrm-api/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(isAlipayClient) {
- my.postMessage({
- name:'h5',
- body: {
- token,
- data: {
- type: type,
- funcName,
- options,
- }
- }
- });
- return
- }
- /**
- * 向小程序端发送消息
- */
- if ( !type ) return;
- window.stompClient.send(
- '/sendToWechat',
- {},
- JSON.stringify({
- token,
- data: Encrypt(
- JSON.stringify({
- type: type,
- funcName,
- options,
- })
- ),
- })
- );
- };
- // 主动订阅事件回调
- window.subscribe = function ( type,callback ) {
- if(isAlipayClient) {
- my.onMessage = function (response) {
- console.log('293my.onMessage', response)
- callback(response.body.data);
- }
- return
- }
- 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 = false;
- windowSendInit();
- window.stompClient.connect({},( frame ) => {
- // 请求 projectId
- window.toWXSendMsg({
- type: 'getProjectId',
- options: {},
- });
- window.subscribe('projectId',( options ) => {
- resolve(options);
- });
- });
- } catch ( err ) {
- reject(err);
- }
- });
- }
- // 获取当前的主题
- export function getsTheCurrentTopic() {
- let theme = 'theme-mall'
- let componentName = ''
- const source = uni.getStorageSync('source')
- const custTypeId = uni.getStorageSync('custTypeId')
- const com = ['purpleCom', 'blueCom', 'greenCom', 'officeBlueCom', 'purpleCom'];
- if (custTypeId < 3 || !custTypeId) {
- componentName = 'baseParkingFeeCom';
- theme = 'theme-mall'
- } else {
- componentName = com[custTypeId];
- theme = 'theme-office'
- }
- if (source === 'KIP') {
- theme = 'theme-office'
- }
- if (source === 'PUDONG') {
- theme = 'theme-pudong'
- }
- if (source === 'JINGAN') {
- theme = 'theme-jingan'
- }
- return { theme, componentName }
- }
- export function setToken() {
- window.token = `${window.location.href}`.replace(/.*wx\/(.*)\/.*/g, '$1');
- }
- export * from './common/websocket.js'
- export * from './common/localStorage.js'
- export * from './alipayClient/index.js'
|