captain-ui
Version:
有赞vue wap业务组件库
176 lines (145 loc) • 5.04 kB
JavaScript
;
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
exports.__esModule = true;
exports.setWxConfig = setWxConfig;
exports.wxReady = wxReady;
exports.setWxShare = setWxShare;
exports.event = exports.wx = void 0;
var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
var _event = _interopRequireDefault(require("../../common/utils/event"));
var wx = require('./jweixin');
exports.wx = wx;
var defaultJsApiList = ['onMenuShareTimeline', 'onMenuShareAppMessage', 'hideOptionMenu', 'showOptionMenu'];
var isWxApiReady = false;
var isWxApiFailed = false;
if (window.wx) {
exports.wx = wx = window.wx;
}
/*
* 暴露原生微信对象
*/
/*
* 微信设置中所有的回调由事件触发
*/
var event = new _event.default();
/*
* 在微信中注入初始配置
*/
exports.event = event;
function setWxConfig(config) {
// 默认授权的项目
var wxConfigs = (0, _extends2.default)({
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;
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);
}
}
/*
* 在微信中注入分享配置
*/
function setWxShare(shareConfig) {
wxReady(function () {
changeShareTimeLineData(shareConfig);
changeMenuShareAppMessageData(shareConfig);
changeMenuShareQQData(shareConfig);
changeMenuShareQZoneData(shareConfig);
});
} // 修改 朋友圈分享 设置,以 shareConfig.timeline shareConfig 顺序覆盖
function changeShareTimeLineData(shareConfig) {
var timelineShareConfig = (0, _extends2.default)({}, shareConfig, shareConfig.timeline); // 动态的title,根据页面变动的内容而变
if (timelineShareConfig.timeLineTitle) timelineShareConfig.title = timelineShareConfig.timeLineTitle;
wx.onMenuShareTimeline((0, _extends2.default)({}, 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 = (0, _extends2.default)({}, shareConfig, shareConfig.appMessage);
wx.onMenuShareAppMessage((0, _extends2.default)({}, 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 = (0, _extends2.default)({}, shareConfig, shareConfig.qq);
wx.onMenuShareQQ((0, _extends2.default)({}, 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 = (0, _extends2.default)({}, shareConfig, shareConfig.qzone);
wx.onMenuShareQZone((0, _extends2.default)({}, 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();
}
}));
}