176 lines
		
	
	
		
			3.3 KiB
		
	
	
	
		
			JavaScript
		
	
	
			
		
		
	
	
			176 lines
		
	
	
		
			3.3 KiB
		
	
	
	
		
			JavaScript
		
	
	
| /**
 | ||
|  * Shopro 第三方平台功能聚合
 | ||
|  * @version 1.0.3
 | ||
|  * @author lidongtony
 | ||
|  * @param {String} name - 厂商+平台名称
 | ||
|  * @param {String} provider - 厂商
 | ||
|  * @param {String} platform - 平台名称
 | ||
|  * @param {String} os - 系统型号
 | ||
|  * @param {Object} device - 设备信息
 | ||
|  */
 | ||
| 
 | ||
| import { isEmpty } from 'lodash';
 | ||
| // #ifdef H5
 | ||
| import { isWxBrowser } from '@/sheep/helper/utils';
 | ||
| // #endif
 | ||
| import wechat from './provider/wechat/index.js';
 | ||
| import apple from './provider/apple';
 | ||
| import share from './share';
 | ||
| import Pay from './pay';
 | ||
| 
 | ||
| const device = uni.getSystemInfoSync();
 | ||
| 
 | ||
| const os = device.platform;
 | ||
| 
 | ||
| let name = '';
 | ||
| let provider = '';
 | ||
| let platform = '';
 | ||
| let isWechatInstalled = true;
 | ||
| 
 | ||
| // #ifdef H5
 | ||
| if (isWxBrowser()) {
 | ||
|   name = 'WechatOfficialAccount';
 | ||
|   provider = 'wechat';
 | ||
|   platform = 'officialAccount';
 | ||
| } else {
 | ||
|   name = 'H5';
 | ||
|   platform = 'h5';
 | ||
| }
 | ||
| // #endif
 | ||
| 
 | ||
| // #ifdef APP-PLUS
 | ||
| name = 'App';
 | ||
| platform = 'openPlatform';
 | ||
| // 检查微信客户端是否安装,否则AppleStore会因此拒绝上架
 | ||
| if (os === 'ios') {
 | ||
|   isWechatInstalled = plus.ios.import('WXApi').isWXAppInstalled();
 | ||
| }
 | ||
| // #endif
 | ||
| 
 | ||
| // #ifdef MP-WEIXIN
 | ||
| name = 'WechatMiniProgram';
 | ||
| platform = 'miniProgram';
 | ||
| provider = 'wechat';
 | ||
| // #endif
 | ||
| 
 | ||
| if (isEmpty(name)) {
 | ||
|   uni.showToast({
 | ||
|     title: '暂不支持该平台',
 | ||
|     icon: 'none',
 | ||
|   });
 | ||
| }
 | ||
| 
 | ||
| // 加载当前平台前置行为
 | ||
| const load = () => {
 | ||
|   if (provider === 'wechat') {
 | ||
|     wechat.load();
 | ||
|   }
 | ||
| };
 | ||
| 
 | ||
| // 使用厂商独占sdk name = 'wechat' | 'alipay' | 'apple'
 | ||
| const useProvider = (_provider = '') => {
 | ||
|   if (_provider === '') _provider = provider;
 | ||
|   if (_provider === 'wechat') return wechat;
 | ||
|   if (_provider === 'apple') return apple;
 | ||
| };
 | ||
| 
 | ||
| // 支付服务转发
 | ||
| const pay = (payment, orderType, orderSN) => {
 | ||
|   return new Pay(payment, orderType, orderSN);
 | ||
| };
 | ||
| 
 | ||
| /**
 | ||
|  * 检查更新 (只检查小程序和App)
 | ||
|  * @param {Boolean} silence - 静默检查
 | ||
|  */
 | ||
| const checkUpdate = (silence = false) => {
 | ||
|   let canUpdate;
 | ||
|   // #ifdef MP-WEIXIN
 | ||
|   useProvider().checkUpdate(silence);
 | ||
|   // #endif
 | ||
| 
 | ||
|   // #ifdef APP-PLUS
 | ||
|   // TODO: 热更新
 | ||
|   // #endif
 | ||
| };
 | ||
| 
 | ||
| /**
 | ||
|  * 检查网络
 | ||
|  * @param {Boolean} silence - 静默检查
 | ||
|  */
 | ||
| async function checkNetwork() {
 | ||
|   const networkStatus = await uni.getNetworkType();
 | ||
|   if (networkStatus.networkType == 'none') {
 | ||
|     return Promise.resolve(false);
 | ||
|   }
 | ||
|   return Promise.resolve(true);
 | ||
| }
 | ||
| 
 | ||
| // 获取小程序胶囊信息
 | ||
| const getCapsule = () => {
 | ||
|   // #ifdef MP
 | ||
|   let capsule = uni.getMenuButtonBoundingClientRect();
 | ||
|   if (!capsule) {
 | ||
|     capsule = {
 | ||
|       bottom: 56,
 | ||
|       height: 32,
 | ||
|       left: 278,
 | ||
|       right: 365,
 | ||
|       top: 24,
 | ||
|       width: 87,
 | ||
|     };
 | ||
|   }
 | ||
|   return capsule;
 | ||
|   // #endif
 | ||
| 
 | ||
|   // #ifndef MP
 | ||
|   return {
 | ||
|     bottom: 56,
 | ||
|     height: 32,
 | ||
|     left: 278,
 | ||
|     right: 365,
 | ||
|     top: 24,
 | ||
|     width: 87,
 | ||
|   };
 | ||
|   // #endif
 | ||
| };
 | ||
| 
 | ||
| const capsule = getCapsule();
 | ||
| 
 | ||
| // 标题栏高度
 | ||
| const getNavBar = () => {
 | ||
|   return device.statusBarHeight + 44;
 | ||
| };
 | ||
| const navbar = getNavBar();
 | ||
| 
 | ||
| function getLandingPage() {
 | ||
|   let page = '';
 | ||
|   // #ifdef H5
 | ||
|   page = location.href.split('?')[0];
 | ||
|   // #endif
 | ||
|   return page;
 | ||
| }
 | ||
| 
 | ||
| // 设置ios+公众号网页落地页 解决微信sdk签名问题
 | ||
| const landingPage = getLandingPage();
 | ||
| 
 | ||
| const _platform = {
 | ||
|   name,
 | ||
|   device,
 | ||
|   os,
 | ||
|   provider,
 | ||
|   platform,
 | ||
|   useProvider,
 | ||
|   checkUpdate,
 | ||
|   checkNetwork,
 | ||
|   pay,
 | ||
|   share,
 | ||
|   load,
 | ||
|   capsule,
 | ||
|   navbar,
 | ||
|   landingPage,
 | ||
|   isWechatInstalled,
 | ||
| };
 | ||
| 
 | ||
| export default _platform;
 |