UNPKG

wm-na-bridge

Version:

百度外卖和百度糯米的bridge util

539 lines (488 loc) 18.6 kB
'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); exports.webview = exports.account = exports.shop = exports.share = exports.network = exports.ui = exports.page = exports.http = exports.location = exports.device = exports.ready = undefined; var _typeof2 = require('babel-runtime/helpers/typeof'); var _typeof3 = _interopRequireDefault(_typeof2); var _promise = require('babel-runtime/core-js/promise'); var _promise2 = _interopRequireDefault(_promise); var _objectAssign = require('object-assign'); var _objectAssign2 = _interopRequireDefault(_objectAssign); require('es6-promise/auto'); var _coordService = require('./coordService'); var _coordService2 = _interopRequireDefault(_coordService); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } var isIOS = /iPhone|iPad|iPod/i.test(navigator.userAgent); var pageData = function () { var search = window.location.search.replace(/^\?/, ''); var params = {}; if (search) { search.split('&').forEach(function (v) { var param = v.split('='); params[param[0]] = param[1] || ''; }); } if (params.pageData) { params.pageData = decodeURIComponent(params.pageData); var innerP = void 0; try { innerP = JSON.parse(params.pageData); } catch (e) { innerP = {}; } (0, _objectAssign2.default)(params, innerP); } return params; }(); function ready() { return new _promise2.default(function (resolve, reject) { setTimeout(reject, 10000, 'BNJSReady timeout'); document.addEventListener('BNJSReady', function () { window.BNJS.page.enableBounce(false); resolve(pageData); }, false); if (window.BNJS && (0, _typeof3.default)(window.BNJS) === 'object' && window.BNJS._isAllReady) { window.BNJS.page.enableBounce(false); resolve(pageData); } }); } function device() { return ready().then(function () { return { client: 'bainuo', cuid: window.BNJS.env.cuid, sv: window.BNJS.env.appVersion, channel: window.BNJS.env.packageName, screen: window.BNJS.device.screenWidth + '*' + window.BNJS.device.screenHeight, from: 'bn-' + String(window.BNJS.device.platform).toLowerCase(), os: window.BNJS.device.os, model: window.BNJS.device.name, payPlats: '', refer: '' }; }); } function network() { return ready().then(function () { return new _promise2.default(function (resolve, reject) { window.BNJS.env.network(function (data) { var type = 'mobile'; if (data.network === 'wifi') { type = 'wifi'; } else if (data.network === 'non') { type = 'unreachable'; } resolve({ net_type: type }); }); setTimeout(reject, 10000); }); }).catch(function () { return { net_type: 'unreachable' }; }); }; var online = 'http://waimai.baidu.com'; var http = { get: function get(url, data) { return ready().then(function () { return new _promise2.default(function (resolve, reject) { if (data.address) { data.address = decodeURIComponent(data.address); } window.BNJS.http.get({ url: online + url, params: data, onSuccess: resolve, onFail: reject }); }); }); }, post: function post(url, data) { return ready().then(function () { return new _promise2.default(function (resolve, reject) { if (data.address) { data.address = decodeURIComponent(data.address); } window.BNJS.http.post({ url: online + url, params: data, onSuccess: resolve, onFail: reject }); }); }); } }; var locationCache = void 0; function location() { if (locationCache) { return locationCache; } locationCache = ready().then(function () { if (window.BNJS.location.hasLocation) { var conver = _coordService2.default.convertLL2MC([window.BNJS.location.longitude, window.BNJS.location.latitude]); var lat = conver[1]; var lng = conver[0]; return { locLng: lng, locLat: lat, lng: lng, lat: lat, cityCode: window.BNJS.location.cityCode, cityId: 0, address: window.BNJS.location.address, addressId: '' }; } return new _promise2.default(function (resolve, reject) { window.BNJS.location.requestRealTimeLocation(function (res) { window.BNJS.location.getLocation(); var latitude = res.data.latitude; var longitude = res.data.longitude; if (latitude && longitude) { var _conver = _coordService2.default.convertLL2MC([longitude, latitude]); var _lat = _conver[1]; var _lng = _conver[0]; resolve({ locLng: _lng, locLat: _lat, lng: _lng, lat: _lat, cityCode: res.data.cityCode, cityId: 0, address: res.data.address, addressId: '' }); } else { reject('定位失败'); } }); }); }).then(function (location) { return http.get('/mobile/waimai', { qt: 'convertcitycode', source: 'BNCode', display: 'json', sourceCode: location.cityCode }).then(function (res) { if (res.error_no === 0) { location.cityId = res.result.cityCode; } return location; }); }); return locationCache; } var ui = { startLoading: function startLoading() { return ready().then(function () { window.BNJS.ui.dialog.showLoadingPage(); }); }, endLoading: function endLoading() { return ready().then(function () { window.BNJS.ui.dialog.hideLoadingPage(); }); }, confirm: function confirm(title, content) { return ready().then(function () { return new _promise2.default(function (resolve, reject) { var params = { title: title, message: content, cancel: '取消', ok: '确认', onConfirm: resolve, onCancel: reject }; window.BNJS.ui.dialog.show(params); }); }); }, toast: function toast(text) { var duration = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'short'; var length = duration === 'short' ? 0 : 1; return ready().then(function () { window.BNJS.ui.toast.show(text, length); setTimeout(function () {}, 0); }); } }; function share(params) { return ready().then(function () { var shareType = params.linkUrl ? 1 : 2; window.BNJS.ui.share({ type: shareType, title: params.title, content: params.description, imgUrl: params.imageUrl, imageList: [params.imageUrl], url: params.linkUrl, platforms: ['weixin_session', 'weixin_timeline'] }); setTimeout(function () {}, 0); }); } var account = { login: function login() { return ready().then(function () { return new _promise2.default(function (resolve, reject) { window.BNJS.account.login({ type: '0', onSuccess: function onSuccess(data) { resolve('登录成功'); setTimeout(function () {}, 0); }, onFail: function onFail(data) { reject(data.errmsg || '登录取消'); setTimeout(function () {}, 0); } }); }); }); }, getInfo: function getInfo() { return ready().then(function () { return { uid: window.BNJS.account.uid, username: window.BNJS.account.uName, displayname: window.BNJS.account.displayName, bduss: window.BNJS.account.bduss }; }); } }; var shop = { addFavorite: function addFavorite(shopId, f) { return http.get('/h5ui/favoriteadd', { shop_id: shopId, from: f }).catch(function (e) { setTimeout(function () {}, 0); return _promise2.default.reject('加载失败,请重试'); }).then(function (res) { return new _promise2.default(function (resolve, reject) { if (res.error_no === 0) { resolve('收藏成功'); } else if (res.error_no === 102) { account.login(); reject(''); } else { reject('加载失败,请重试'); } setTimeout(function () {}, 0); }); }); }, delFavorite: function delFavorite(shopId, f) { return http.get('/h5ui/favoritedel', { shop_id: shopId, from: f }).catch(function (e) { setTimeout(function () {}, 0); return _promise2.default.reject('加载失败,请重试'); }).then(function (res) { return new _promise2.default(function (resolve, reject) { if (res.error_no === 0) { resolve('取消收藏成功'); } else { reject('取消收藏失败'); } setTimeout(function () {}, 0); }); }); } }; var webview = { startLoading: function startLoading() { document.getElementById('loading').style.display = ''; }, endLoading: function endLoading() { document.getElementById('loading').style.display = 'none'; }, close: function close() { return ready().then(window.BNJS.page.back); }, open: function open(url, option) { return ready().then(function () { var finalUrl = 'bainuo://component?url=' + encodeURI(url); window.BNJS.page.start(finalUrl, undefined, 0); }); }, pageshow: function pageshow(callback) { if (typeof callback !== 'function') { return; } if (isIOS) { document.addEventListener('visibilitychange', function () { if (!document.hidden) { callback(); } }); } else { device().then(function (d) { (function loop() { callback(); setTimeout(loop, 600); })(); }); } } }; var page = { close: function close() { return ready().then(window.BNJS.page.back); }, open: function open(url, option) { return ready().then(function () { var finalUrl = ''; if (url.indexOf('bainuo://') === 0) { finalUrl = url; } else { finalUrl = 'bainuo://component?url=' + encodeURI(url); } if (url === 'bdwm://native?pageName=search') { finalUrl = 'bainuo://component?compid=waimai&comppage=shopsearch'; } window.BNJS.page.start(finalUrl, undefined, 0); }); }, onBack: function onBack(onBackHandler) { return ready().then(function () { window.BNJS.page.onBtnBackClick({ callback: function callback() { var cbResult = onBackHandler(); if (cbResult === 0) {} else if (cbResult === 1) { window.BNJS.page.back(); } else if (cbResult === 2) { window.history.go(-1); } else { window.BNJS.page.back(); } } }); }); }, home: function home() { window.BNJS.page.start('bainuo://component?compid=waimai&comppage=shoplist', undefined, 0); }, search: function search() { window.BNJS.page.start('bainuo://component?compid=waimai&comppage=shopsearch', undefined, 0); }, index: function index() { var cid = pageData.cid || ''; var url = 'http://waimai.baidu.com/static/supermarket/index.html?cid=' + cid; url = 'bainuo://component?url=' + encodeURIComponent(url); window.BNJS.page.start(url, undefined, 0); setTimeout(function () {}, 0); return _promise2.default.resolve(); }, cart: function cart() { var cid = pageData.cid || ''; var url = 'http://waimai.baidu.com/static/supermarket/cart.html?cid=' + cid; url = 'bainuo://component?url=' + encodeURIComponent(url); window.BNJS.page.start(url, undefined, 0); setTimeout(function () {}, 0); return _promise2.default.resolve(); }, shop: function shop(_ref) { var shopId = _ref.shopId, _ref$itemId = _ref.itemId, itemId = _ref$itemId === undefined ? '' : _ref$itemId, _ref$addToCart = _ref.addToCart, addToCart = _ref$addToCart === undefined ? 0 : _ref$addToCart, _ref$isStore = _ref.isStore, isStore = _ref$isStore === undefined ? 1 : _ref$isStore; return ready().then(function () { if (!shopId) { return _promise2.default.reject('shopId不能为空'); } var cid = pageData.cid || ''; var url = void 0; if (isStore) { url = 'http://waimai.baidu.com/static/supermarket/shop.html?shopId=' + shopId + '&itemId=' + itemId + '&addToCart=' + addToCart + '&cid=' + cid; url = 'bainuo://component?url=' + encodeURIComponent(url); } else { url = 'bainuo://component?compid=waimai&comppage=shopinfo&shop_id=' + shopId + '&android_cid=' + cid + '&ios_cid=' + cid; if (itemId) { url += '&dish_id=' + itemId; if (addToCart) { url += '&wm_action=put'; } } } window.BNJS.page.start(url, undefined, 0); setTimeout(function () {}, 0); return _promise2.default.resolve(); }); }, shopSearch: function shopSearch(shopId) { var cid = pageData.cid || ''; var url = 'http://waimai.baidu.com/static/supermarket/search.html?shopId=' + shopId + '&cid=' + cid; url = 'bainuo://component?url=' + encodeURIComponent(url); window.BNJS.page.start(url, undefined, 0); setTimeout(function () {}, 0); return _promise2.default.resolve(); }, item: function item(shopId, itemId) { var addToCart = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 0; var cid = pageData.cid || ''; var url = 'http://waimai.baidu.com/static/supermarket/item.html?shopId=' + shopId + '&itemId=' + itemId + '&addToCart=' + addToCart + '&cid=' + cid; url = 'bainuo://component?url=' + encodeURIComponent(url); window.BNJS.page.start(url, undefined, 0); setTimeout(function () {}, 0); return _promise2.default.resolve(); }, shopDetail: function shopDetail(shopId) { console.warn('糯米里没有单独的商户详情页面'); return _promise2.default.reject('方法未实现'); }, shopComment: function shopComment(shopid) { console.warn('糯米里没有单独的商户评价页面'); return _promise2.default.reject('方法未实现'); }, setTitleBar: function setTitleBar(barConfig) { return ready().then(function () { var titleText = barConfig.title === undefined ? document.title : barConfig.title; var iconArr = ['search', 'close', 'collection', 'location', 'scan', 'share', 'collected', 'arrowdown_red', 'more', 'camera', 'delete']; window.BNJS.ui.title.setTitle(titleText); if (barConfig.onTitleClick) { window.BNJS.ui.title.setClickableTitle(titleText, barConfig.onTitleClick); } if (barConfig.actionList && barConfig.actionList.length && barConfig.actionList.length > 0) { barConfig.actionList.forEach(function (value, index) { window.BNJS.ui.title.addActionButton({ tag: index + 1, text: value.title, callback: value.onClick || function () {}, icon: iconArr.indexOf(value.id) === -1 ? null : value.id }); }); } }); }, confirmOrder: function confirmOrder(shopId, products) { return ready().then(account.getInfo).catch(account.login).then(function () { var scheme = 'bainuo://component?compid=waimai&comppage=orderconfirm'; scheme += '?source_from=_supermarket_'; scheme += '&shopId=' + shopId; scheme += '&dishItems=' + encodeURIComponent(products); window.BNJS.page.start(scheme, undefined, 0); setTimeout(function () {}, 0); }); }, closePushRefresh: function closePushRefresh() { return; } }; exports.ready = ready; exports.device = device; exports.location = location; exports.http = http; exports.page = page; exports.ui = ui; exports.network = network; exports.share = share; exports.shop = shop; exports.account = account; exports.webview = webview;