var _events = {};
var apis = require('./apis');
var core = require('./core');
// get user agent data
var getUA = (function() {
var uastr = navigator.userAgent;
var appVersionMatch = uastr.match(/apollo\/[\w\.\d]+\/([\d\.]+)/);
var appVersion = appVersionMatch && appVersionMatch[1];
return function(opt) {
var result = {};
var success = opt && opt.success;
var ua = {
platform: 'dpapp',
appName: 'apollo',
packageId: 'apollo',
appVersion: appVersion,
osName: core._osUA.name,
osVersion: core._osUA.version
};
success && success(ua);
return ua;
};
})();
/**
* <b>阿波罗手机端jsbridge</b><br/>
* 继承自dpapp-core,[dpapp-core](http://efte.github.io/dpapp/#概述)部分可参考http://efte.github.io/dpapp/#概述
* @module dpapp-apollo
* @class PatchApp
* @extends dpapp-core
* */
var Patch = module.exports = {
// get user agent
/**
* 获取用户所使用的浏览器的代理信息
* @method getUA
* @param opt {Object} 参数传递
* @param opt.success {Function} 获取成功后执行的回调函数
* @return {Object}
* @example
* import dpappApollo from 'dpapp-apollo';
* let ua = dpappApollo.getUA();
*
* console.dir(ua.platform); //平台信息
* console.dir(ua.appName); //app名字
* console.dir(ua.packageId);
* console.dir(ua.appVersion);//版本考
* console.dir(ua.osName);
* console.dir(ua.osVersion);
* */
getUA: getUA,
// page ready
/**
* 等待整个native就绪后执行回调里的逻辑
* @method ready
* @param callback {Function} 需要执行的回调方法
* @return {Null}
* @example
* import dpappApollo from 'dpapp-apollo';
* dpappApollo.ready(()=>{
* //页面主逻辑
* console.dir('页面主逻辑');
* });
* */
ready: function(callback) {
var self = this;
this._send('ready', {
success: function() {
self._isReady = true;
callback();
}
});
},
/**
* 发送一个请求,获取服务器端的数据<br/>
* @method ajax
* @param opts {Object}
* @param opts.success {Function} 成功后的回调方法
* @param opts.fail {Function} 失败后的回调方法
* @param opts.data {Object} 传递给服务端的参数
* @param opts.method {String} 请求方式 get|post
* @example
* import dpappApollo from 'dpapp-apollo';
* dpappApollo.ajax({
* method:'post',
* url:'https://a.dper.com/demo/demo',
* data:{
* name:'app'
* },
* success:function(data){
* console.dir('成功');
* },
* fail:function(){
* console.dir('失败');
* }
* });
* */
ajax: function(opts) {
// process ajax config
opts = this._sanitizeAjaxOpts(opts);
var self = this;
var success = opts.success;
var fail = opts.fail;
function parseJSON(data) {
var ret = {};
if (data && data.length > 0) {
try {
ret = JSON.parse(data);
} catch (ignore) {}
}
return ret;
}
this._sendMessage("ajax", opts, function(data) {
if (data.status == "success") {
var result = self._mixin(
parseJSON(data.responseText),
self._transModel(opts.keys, parseJSON(data.hashJson))
);
success && success(result);
} else {
fail && fail({
code: data.code,
errMsg: data.message
});
}
});
},
// jump to scheme
/**
* 打开新的webview,并关闭原窗口。
* @method jumpToScheme
* @param opt {Object}
* @param opt.url {String} 跳转链接
* @param opt.extra {Object} 此部分的参数会作为url的query传递
* @param opt.success {Function}
* */
jumpToScheme: function(opt) {
var url = opt.url;
var extra = opt.extra;
if (extra) {
url += '?' + this._convertUrlParams(extra);
delete opt.extra;
opt.url = url;
}
opt.toHome = !!opt.toHome ? 1 : 0;
this._send('jumpToScheme', opt);
},
// open efte web
openEfteWeb: function(opt){
var handle = opt.handle;
/*opt = {
"url":"dpcrm://web",
"unit": "unit-m-customer",
"path","add-shop"
};*/
this._send('openEfteWeb', opt, function(){
handle && handle(arguments);
});
},
// get geo location
/**
* 获取地理位置信息
* @method getLocation
* @param opt {Object}
* @param opt.success {Function} 获取完毕执行的回调,回调方法中会传入获取到的经度和纬度信息
* @example
* import dpappApollo from 'dpapp-apollo';
* dpappApollo.getLocation({
* success: function(result){
* console.dir(result.lat);
* console.dir(result.lng);
* }
* });
* */
getLocation: function(opt) {
var success = opt.success;
this._sendMessage('getLocation', opt, function(result) {
success && success({
lat: result.lat,
lng: result.lng
});
});
},
/**
* 退出用户登陆
* @method logout
* */
logout: function(){
this._sendMessage('logout');
},
/**
* 下拉页面刷新,需要配合stopPullDown一起使用
* @method setPullDown
* @requires stopPullDown
* @param opt {Object}
* @param opt.success {Function} 设置成功后执行
* @param opt.fail {Function} 设置失败后执行
* @param opt.handle {Function} 刷新成功后执行
* @example
* import dpappApollo from 'dpapp-apollo';
* dpappApollo.setPullDown({
* handle: function(){
* dpappApollo.ajax({
* url:'',
* success: function(){
* dpappApollo.stopPullDown();
* }
* });
* }
* });
* */
setPullDown: function(opt){
var fail = opt.fail,
success = opt.success,
handle = opt.handle;
this._sendMessage('setPullDown', opt, function(result){
if(result.status=='success'){
success && success(result);
}else if(result.status=='action'){
handle && handle(result);
}else{
fail && fail(result);
}
});
},
/**
* 停止下拉刷新,需要配合setPullDown一起使用
* @method stopPullDown
* @requires setPullDown
* @param opt {Object}
* @param opt.success {Function} 设置成功后执行
* @param opt.fail {Function} 设置失败后执行
* @param opt.handle {Function} 刷新成功后执行
* @example
* import dpappApollo from 'dpapp-apollo';
* dpappApollo.setPullDown({
* handle: function(){
* dpappApollo.ajax({
* url:'',
* success: function(){
* dpappApollo.stopPullDown({
*
* });
* }
* });
* }
* });
* */
stopPullDown: function(opt){
var fail = opt.fail,
success = opt.success,
handle = opt.handle;
this._sendMessage('stopPullDown', opt, function(result){
if(result.status=='success'){
success && success(result);
}else{
fail && fail(result);
}
});
},
/**
* 调用native的图片查看功能展示图片
* @method showPhoto
* @since 0.2.9
* @param opt {Object}
* @param opt.name {String} 图片名称
* @param opt.url {String} 图片地址
* @param opt.success {Function}
* @param opt.fail {Function}
* */
showPhoto: function(opt){
var fail = opt.fail,
success = opt.success;
this._sendMessage('showPhoto', opt, function(result){
if(result.status=='success'){
success && success(result);
}else{
fail && fail(result);
}
});
},
/**
* @method isSupportEIM
* @private
* @since 0.3.0
* @param callback {Function}
* */
isSupportEIM: function(callback) {
this._sendMessage('isSupportEIM', null, function(o) {
callback(o.value);
//delete callbacks[cid];
});
},
/**
* 打开企业QQ
* @method openEIM
* @since 0.3.0
* @param data {Object} 各环境打开的url
* @example
* import dpappApollo from 'dpapp-apollo';
* dpappApollo.openEIM({
* android:"mqqwpa:\/\/im\/chat?chat_type=wpa&uin=2850297910",
* ios:"eimwpa:\/\/im\/chat?chat_type=wpa&uin=2850297910&version=1&src_type=web&web_src=null",
* pc:"qqeim:\/\/message?uin=14a3396e3211e36575e5e64086e40359a0d96398df048a14&src=200441309&flag=0&token=55e27e19d8757b47fe103f540267ca5d6788f28fb30e26c38cc3826e0618d3c900d074e31e80d0140768957d4833ec7d"
* });
* */
openEIM: function(data) {
var _this =this;
if (!data || !data.ios) {
alert('该用户没有企业QQ');
return;
};
data.iphone = data.ios;
this.isSupportEIM(function(isSupport) {
if (isSupport) {
_this.getDeviceInfo({
success: function(info){
var url = data[info.agent.toLowerCase() ];
if(url){
window.location = url;
}
}
});
} else {
if (confirm('你需要先安装企业QQ才能对话哦,现在去安装吗?')) {
window.location = 'http://qyqq.dper.com/download/mobile';
}
}
});
},
/**
* 获取wifi信息
* @method getWifiInfo
* @since 0.3.0
* @param opt {Object}
* @param opt.success {Function}
* @param opt.fail {Function}
* */
getWifiInfo: function(opt) {
var fail = opt.fail,
success = opt.success;
this._sendMessage('getWifiInfo', {}, function(wifiInfo) {
if(wifiInfo.status=='success'){
success && success(wifiInfo);
}else if(fail){
fail(wifiInfo.message || '获取WIFI信息失败');
}else{
alert(wifiInfo.message || '获取WIFI信息失败');
}
});
},
/**
* 获取手机端基本信息
* @method getDeviceInfo
* @since 0.3.0
* @param opt {Object}
* @param opt.success {Function}
* @param opt.fail {Function}
* @example
* return {
@"os": [[UIDevice currentDevice] systemVersion] ?: @"",
@"agent": @"iphone",
@"channel": [[NVEnvironment defaultEnvironment] source] ?: @"",
@"version": [[NVEnvironment defaultEnvironment] version] ?: @"",
@"deviceid": [[NVEnvironment defaultEnvironment] deviceId] ?: @"",
@"platform": @"main",
@"screen": [self screenSizeString],
@"cityid": @([NVCityHelper instance].cityId),
@"uuid": [[NVEnvironment defaultEnvironment] deviceId] ?: @"",
@"dpid": [[NVEnvironment defaultEnvironment] dpid] ?:@"",
@"islogin": @([NVAccountHelper token] != nil),
@"lat": @([NVLocateHelper sharedInstance].location.lat),
@"lng": @([NVLocateHelper sharedInstance].location.lng),
@"address": [self address],
};
* }
* */
getDeviceInfo: function(opt){
var fail = opt.fail,
success = opt.success;
this._sendMessage('getdeviceinfo', {}, function(info) {
if(info){
success &&success(info);
}else{
fail && fail();
}
});
}
};