captain-ui
Version:
有赞vue wap业务组件库
165 lines (137 loc) • 4.58 kB
JavaScript
import _extends from "@babel/runtime/helpers/esm/extends";
import Event from '../../common/utils/event';
var wx = require('./jweixin');
var defaultJsApiList = ['onMenuShareTimeline', 'onMenuShareAppMessage', 'hideOptionMenu', 'showOptionMenu'];
var isWxApiReady = false;
var isWxApiFailed = false;
if (window.wx) {
wx = window.wx;
}
/*
* 暴露原生微信对象
*/
export { wx };
/*
* 微信设置中所有的回调由事件触发
*/
export var event = new Event();
/*
* 在微信中注入初始配置
*/
export function setWxConfig(config) {
// 默认授权的项目
var wxConfigs = _extends({
debug: false
}, config); // jsApiList 合并
var jsApiList = defaultJsApiList.slice(0);
if (Array.isArray(config.jsApiList)) {
config.jsApiList.forEach(function (item) {
if (jsApiList.indexOf(item) === -1) {
jsApiList.push(item);
}
});
}
wxConfigs.jsApiList = jsApiList;
wx.config(wxConfigs);
wx.ready(function () {
isWxApiReady = true;
event.trigger('init:success');
});
wx.error(function () {
isWxApiFailed = true;
event.trigger('init:fail');
});
}
/*
* 保证callback 在微信sdk初始化完成后调用
*/
var cbQueue = [];
var wxReadyTimer;
export function wxReady(callback, failback) {
if (isWxApiFailed) {
failback && failback();
return;
}
if (isWxApiReady) {
// 清空队列,防止回调重复执行
var tempQueue = cbQueue;
cbQueue = [];
tempQueue.forEach(function (cb) {
cb && cb();
});
callback && callback();
} else {
// 添加回调队列,确保回调执行顺序,切记不要使用异步函数
if (!~cbQueue.indexOf(callback) && typeof callback === 'function') {
cbQueue.push(callback);
} // 不要重复开启多个定时器
if (wxReadyTimer) clearTimeout(wxReadyTimer);
wxReadyTimer = setTimeout(function () {
wxReady();
}, 1000);
}
}
/*
* 在微信中注入分享配置
*/
export function setWxShare(shareConfig) {
wxReady(function () {
changeShareTimeLineData(shareConfig);
changeMenuShareAppMessageData(shareConfig);
changeMenuShareQQData(shareConfig);
changeMenuShareQZoneData(shareConfig);
});
} // 修改 朋友圈分享 设置,以 shareConfig.timeline shareConfig 顺序覆盖
function changeShareTimeLineData(shareConfig) {
var timelineShareConfig = _extends({}, shareConfig, shareConfig.timeline); // 动态的title,根据页面变动的内容而变
if (timelineShareConfig.timeLineTitle) timelineShareConfig.title = timelineShareConfig.timeLineTitle;
wx.onMenuShareTimeline(_extends({}, timelineShareConfig, {
success: function success(res) {
event.trigger('share:timeline:success', res);
timelineShareConfig.success && timelineShareConfig.success(res);
},
trigger: function trigger() {
event.trigger('share:timeline:trigger');
timelineShareConfig.trigger && timelineShareConfig.trigger();
}
}));
} // 修改 微信好友分享 设置
function changeMenuShareAppMessageData(shareConfig) {
var appMessageShareConfig = _extends({}, shareConfig, shareConfig.appMessage);
wx.onMenuShareAppMessage(_extends({}, appMessageShareConfig, {
success: function success(res) {
event.trigger('share:appMessage:success', res);
appMessageShareConfig.success && appMessageShareConfig.success(res);
},
trigger: function trigger() {
event.trigger('share:appMessage:trigger');
appMessageShareConfig.trigger && appMessageShareConfig.trigger();
}
}));
} // 修改 qq好友分享 设置
function changeMenuShareQQData(shareConfig) {
var qqShareConfig = _extends({}, shareConfig, shareConfig.qq);
wx.onMenuShareQQ(_extends({}, qqShareConfig, {
success: function success(res) {
event.trigger('share:qq:success', res);
qqShareConfig.success && qqShareConfig.success(res);
},
trigger: function trigger() {
event.trigger('share:qq:trigger');
qqShareConfig.trigger && qqShareConfig.trigger();
}
}));
} // 修改 qq空间分享 设置
function changeMenuShareQZoneData(shareConfig) {
var qzoneShareConfig = _extends({}, shareConfig, shareConfig.qzone);
wx.onMenuShareQZone(_extends({}, qzoneShareConfig, {
success: function success(res) {
event.trigger('share:qzone:success', res);
qzoneShareConfig.success && qzoneShareConfig.success(res);
},
trigger: function trigger() {
event.trigger('share:qzone:trigger');
qzoneShareConfig.trigger && qzoneShareConfig.trigger();
}
}));
}