mtl-js-sdk
Version:
ynf-fw-mtl-api
653 lines (609 loc) • 18 kB
JavaScript
import {invokeCallback, invokeFail, invokeSuccess} from '../callback'
import {requestPermission} from '../permission'
import {getLanguage} from '../localization'
import {execUpesnBridgeify,canExecUpesnBridge, execUpesnBridge} from '../bridge/index'
import {saveExpandParams} from '../keys'
import {getExclusiveDomainInfo} from '../util'
export function getNetworkType(param) {
invokeSuccess(param, {networkType:api.connectionType});
}
export function getSystemInfo(param) {
let obj = param || {}
if (canExecUpesnBridge()) {
let data = {
...obj,
success: function(res) {
const { systemLanguage = navigator.language } = res
invokeSuccess(obj, {...res, systemLanguage})
}
}
execUpesnBridgeify('getSystemInfo', data);
return;
}
api.getSystemInfo({
success:function(res){
let info = {
brand:res.platform=='ios'?'Apple':res.brand,
model:res.model,
platform:res.platform=='ios'?'iOS':'Android',
system:api.systemVersion,
screenWidth:res.screenWidth * res.pixelRatio,
screenHeight:res.screenHeight * res.pixelRatio,
pixelRatio:res.pixelRatio,
YZVersion:res.version,
YZLanguage:getLanguage(),
systemLanguage: res.systemLanguage || navigator.language,
deviceId:api.deviceId
};
invokeSuccess(obj, info);
},
fail:function(err){
invokeFail(obj, err);
}
});
}
export function getMac(param) {
invokeSuccess(param, {macAddress:api.deviceId});
}
export function getWifiInfo(param = {}) {
if (api.systemType == 'ios' && parseFloat(api.systemVersion) >= 14) {
requestPermission({
list:['location'],
complete:function(){
_getWifiInfo(param);
}
});
} else {
_getWifiInfo(param);
}
}
function _getWifiInfo(param) {
let obj = api.require('wifi');
if (!obj) {
if (canExecUpesnBridge()) {
execUpesnBridge({
...param,
method:'getWifiInformation',
success:function(res) {
invokeSuccess(param, {name:res.name, mac:res.macAddress});
}
});
return;
}
invokeFail(param, {msg:'module wifi not added'});
return;
}
obj.currentWifi(function(ret, err) {
if (ret.status) {
invokeSuccess(param, {name:ret.ssid, mac:ret.bssid});
} else {
invokeFail(param, err);
}
});
}
function mapPrivacy() {
let obj = api.require('mtlMap');
if (!obj) {
return;
}
obj.updateLocationPrivacy && obj.updateLocationPrivacy();
obj.updateSearchPrivacy && obj.updateSearchPrivacy();
obj.updateMapViewPrivacy && obj.updateMapViewPrivacy();
}
export function getLocation(param={}) {
let obj = api.require('mtlMap');
if (!obj) {
if (canExecUpesnBridge()) {
execUpesnBridgeify('getLocationInfo', param);
return;
}
invokeFail(param, {msg:'module mtlMap not added'});
return;
}
requestPermission({
list:['location'],
success:function(){
mapPrivacy();
obj.getLocation(param, function(ret, err) {
if (ret && ret.status) {
invokeSuccess(param, ret);
} else {
invokeFail(param, err || ret);
}
});
},
fail:param.fail
});
}
export function mapLocationExtend(param={}) {
let obj = api.require('mtlMap');
if (!obj) {
if (canExecUpesnBridge()) {
execUpesnBridgeify('mapLocationExtend', param);
return;
}
invokeFail(param, {msg:'module mtlMap not added'});
return;
}
requestPermission({
list:['location'],
success:function(){
mapPrivacy();
obj.mapLocationExtend(param, function(ret, err) {
if (ret && ret.status) {
invokeSuccess(param, ret);
} else {
invokeFail(param, err || ret);
}
});
},
fail:param.fail
});
}
export function openLocation(param={}) {
let obj = api.require('mtlMap');
if (!obj) {
if (canExecUpesnBridge()) {
execUpesnBridgeify('chooseLocation', param);
return;
}
invokeFail(param, {msg:'module mtlMap not added'});
return;
}
requestPermission({
list:['location'],
success:function(){
mapPrivacy();
obj.openLocation(param, function(ret, err) {
if (ret && ret.status) {
invokeSuccess(param, ret);
} else {
invokeFail(param, err || ret);
}
});
},
fail:param.fail
});
}
export function markAndNavigationDestination(param={}) {
let obj = api.require('mtlMap');
if (!obj) {
if (canExecUpesnBridge()) {
execUpesnBridgeify('markAndNavigationDestination', param);
return;
}
invokeFail(param, {msg:'module mtlMap not added'});
return;
}
requestPermission({
list:['location'],
success:function(){
mapPrivacy();
obj.markAndNavigationDestination(param, function(ret, err) {
if (ret && ret.status) {
invokeSuccess(param, ret);
} else {
invokeFail(param, err || ret);
}
});
},
fail:param.fail
});
}
export function openMapToNavi(param={}) {
let obj = api.require('mtlMap');
if (!obj) {
invokeFail(param, {msg:'module mtlMap not added'});
return;
}
let type = param.type;
if (type == 1) {
type = 'GAODE';
} else if (type == 2) {
type = 'BAIDU';
} else if (type == 3) {
type = 'TENCENT';
}
param.type = type;
obj.openMapToNavi(param, function(ret, err) {
if (ret && ret.status) {
invokeSuccess(param, ret);
} else {
invokeFail(param, err || ret);
}
});
}
export function continuousLocationStart(param={}) {
let obj = api.require('mtlMap');
if (!obj) {
if (canExecUpesnBridge()) {
execUpesnBridgeify('startLocationUpdate', param);
return;
}
invokeFail(param, {msg:'module mtlMap not added'});
return;
}
requestPermission({
list:['location'],
success:function(){
mapPrivacy();
obj.continuousLocationStart(param, function(ret, err) {
if (ret && ret.status) {
invokeSuccess(param, ret);
} else {
invokeFail(param, err || ret);
}
});
},
fail:param.fail
});
}
export function continuousLocationGet(param={}) {
let obj = api.require('mtlMap');
if (!obj) {
if (canExecUpesnBridge()) {
execUpesnBridgeify('getLocationUpdateInfo', param);
return;
}
invokeFail(param, {msg:'module mtlMap not added'});
return;
}
requestPermission({
list:['location'],
success:function(){
obj.continuousLocationGet(param, function(ret, err) {
if (ret) {
invokeSuccess(param, ret);
} else {
invokeFail(param, err);
}
});
},
fail:param.fail
});
}
export function continuousLocationStop(param={}) {
let obj = api.require('mtlMap');
if (!obj) {
if (canExecUpesnBridge()) {
execUpesnBridgeify('stopLocationUpdate', param);
return;
}
invokeFail(param, {msg:'module mtlMap not added'});
return;
}
obj.continuousLocationStop();
invokeSuccess(param, {});
}
export function getAuthorizationStatus(param={}) {
let type = param.type;
if (typeof type == 'number') {
let list = ['photos','camera','microphone','location','contacts'];
let name = list[type];
if (name) {
let res = api.hasPermission({list:[name]});
invokeSuccess(param, {authStatus:res[0].granted?1:0});
} else {
invokeFail(param, {});
}
} else {
invokeFail(param, {});
}
}
export function onNetworkStatusChange(param) {
api.addEventListener({
name:'online'
}, function(ret){
let isConnected = true;
let networkType = ret.connectionType;
invokeCallback(param, {isConnected, networkType});
});
api.addEventListener({
name:'offline'
}, function(ret){
let isConnected = false;
let networkType = api.connectionType;
invokeCallback(param, {isConnected, networkType});
});
}
export function watchShake(param) {
api.addEventListener({
name:'shake'
}, function() {
invokeCallback(param, {});
});
}
export function screenShot(param={}) {
let {type, resultType} = param;
let p = {};
if (type == 1) {
p.region = 'window';
}
if (resultType == 0) {
p.destinationType = 'base64';
}
api.screenCapture(p, function(ret){
let base64Data = ret.base64Data;
if (base64Data && base64Data.indexOf('data:image') == -1) {
base64Data = 'data:image/png;base64,' + base64Data;
}
invokeSuccess(param, {picStr:base64Data, picPath:ret.savePath});
});
}
export function onUserCaptureScreen(param) {
api.addEventListener({
name:'takescreenshot'
}, function() {
invokeCallback(param, {});
});
}
export function dail(param) {
requestPermission({
list:['phone-call'],
success:function(){
api.call(param, function(ret, err) {
invokeSuccess(param, ret, err);
});
},
fail:param.fail
});
}
export function backIntercept(param) {
if (canExecUpesnBridge()) {
execUpesnBridge({...param, method:'backIntercept'});
return;
}
const { isInterceptArrow = true, isInterceptSystemBack = true} = param || {}
if (!isInterceptArrow) {
api.addEventListener({
name:'navbackbtn'
}, function(){
api.navigateBack();
});
}
api.addEventListener({
name:'keyback',
extra:{
slidBackIntercept: isInterceptSystemBack
}
}, function(ret){
invokeCallback(param, ret);
});
}
export function vibrateOnce(param) {
let list = api.systemType == 'ios' ? [500] : [100, 500];
api.notification({
vibrate:list
});
invokeSuccess(param, {});
}
export function changeScreenOrientation(param={}) {
if (canExecUpesnBridge()) {
execUpesnBridge({...param, method: 'changeScreenOrientation'})
return;
}
api.setScreenOrientation({
orientation:param.orientation?'portrait_up':'auto_landscape'
});
invokeSuccess(param, {});
}
export function restoreScreenOrientation(param) {
if (canExecUpesnBridge()) {
execUpesnBridge({...param, method: 'restoreScreenOrientation'})
return;
}
api.setScreenOrientation({
orientation:'portrait_up'
});
invokeSuccess(param, {});
}
export function openSchema(param = {}) {
let url = param.url;
api.openApp({
androidPkg: 'android.intent.action.VIEW',
mimeType: 'text/html',
uri: url,
iosUrl: url
});
invokeSuccess(param, {});
}
export function openAppWithParams(param = {}) {
if (canExecUpesnBridge()) {
execUpesnBridgeify('openAppWithParams', param);
return;
}
const { expandParams } = param
getData(param, function(data){
let params = data.ykj || {};
params.app_type = params.appType;
params.serviceIcon = data.serviceIcon;
params.serviceName = data.serviceName;
params.tenantId = data.tenantId;
params.serviceId = data.serviceId;
params.openAppExpandParams = expandParams;
mtl.openExclusiveApp({
...params,
success:function(openRes){
invokeSuccess(param, openRes || {});
},
fail:function(openErr){
invokeFail(param, openErr);
},
})
})
}
export function getAppletShareParams(param = {}) {
if (canExecUpesnBridge()) {
execUpesnBridgeify('getAppletShareParams', param);
return;
}
let data = api.getGlobalData({
key: saveExpandParams
});
invokeSuccess(param, {expandParams: data || JSON.stringify({})})
}
export function setStatusBarStyle(param = {}) {
let style;
let fontColorMode = param.fontColorMode;
if (typeof fontColorMode != 'undefined') {
if (fontColorMode == 0 || fontColorMode == '0') {
style = "dark";
} else if (fontColorMode == 1 || fontColorMode == '1') {
style = "light";
}
}
if (style) {
api.setStatusBarStyle({
style: style
});
}
invokeSuccess(param, {});
}
export function createShortcut(param = {}) {
let obj = api.require('shortcutCreator');
if (!obj) {
if (canExecUpesnBridge()) {
execUpesnBridgeify('createShortcut', param);
return;
}
invokeFail(param, {msg:'module shortcutCreator not added'});
return;
}
obj.createShortcut && obj.createShortcut(param,function(res, err){
if (res) {
invokeSuccess(param, res);
} else {
invokeFail(param, err);
}
});
}
export function checkBridgeNameExist(param = {}) {
let {bridgeName} = param;
let isExist = mtl[bridgeName]?'1':'0';
invokeSuccess(param, {isExist});
}
export function appearanceMode(param = {}) {
let mode = api.getInterfaceStyle();
invokeSuccess(param, {mode});
}
export function onAppearanceModeChange(param = {}) {
api.addEventListener({
name:'interfacestylechanged'
}, function(ret) {
invokeCallback(param, {mode:ret.style});
});
invokeSuccess(param, {});
}
export function setClipboardData(param = {}) {
api.setClipboardData(param, function(ret, err){
if (ret) {
invokeSuccess(param, ret);
} else {
invokeFail(param, err);
}
})
}
export function getClipboardData(param = {}) {
api.getClipboardData(param, function(ret, err){
if (ret) {
invokeSuccess(param, ret);
} else {
invokeFail(param, err);
}
})
}
export function jumpSystemSettings(param = {}) {
api.openApp({
uri:'app-settings:',
iosUrl: 'app-settings:'
})
invokeSuccess(param, {});
}
function getUserKey({serviceCode, getUKSuccess, getUKFail}) {
mtl.getUserYHTInfo({
success:function(res){
const { tenant_id='tenant', yht_userid='userid' } = res
const key = `${tenant_id}-${yht_userid}-${serviceCode}`
getUKSuccess && getUKSuccess(key)
},
fail:function(err){
console.log('getUserYHTInfo error: ', err)
getUKFail && getUKFail(err)
}
});
}
export function getAppData(param = {}) {
if (canExecUpesnBridge()) {
const { success } = param
execUpesnBridgeify('getAppData', {...param, success:function(res){
success && success({...res, packageType: res.packagetype})
}});
return;
}
const { serviceCode } = param
getUserKey({
serviceCode,
getUKSuccess:function(res){
let data = window.api?.getPrefs({
sync: true,
key: res
});
if (data) {
invokeSuccess(param, JSON.parse(data))
}
}
});
getData(param, function(data){
let params = data.ykj || {}
params.app_type = params.appType
params.name = data.serviceName
params.url = params.appUrl
invokeSuccess(param, params)
getUserKey({
serviceCode,
getUKSuccess:function(res){
window.api?.setPrefs({
sync: false,
key: res,
value: JSON.stringify(params)
});
},
getUKFail:function(err){
console.log('getUserYHTInfo error: ', err)
}
});
})
}
function getData(param, onSuccess) {
const { serviceCode, url } = param
let domainObj = getExclusiveDomainInfo() || {};
let {data} = domainObj;
let domain = null
if (data && data.mobileAppUrl) {
domain = data.mobileAppUrl;
}
const appUrl = mtl.getStorageSync({key: 'key_mobile_app_url'}) || domain || `${window.location.origin}/iuap-yonbuilder-mobile`
let path = `${appUrl}/rest/v1/mobile/app/getServiceDetail`
if (url) {
path = url
}
mtl.request({
url: path,
params: { serviceCode },
success:function(res){
let resData = res.data
if (resData && typeof(resData) === 'string') {
resData = JSON.parse(resData)
}
if (resData && resData.success) {
const data = resData.data || {}
onSuccess && onSuccess(data)
} else {
invokeFail(param, resData);
}
},
fail:function(err){
invokeFail(param, err);
},
})
}