1.0.4 • Published 5 years ago
bnd-app-js v1.0.4
import { loginInDevelopment } from './libs/index.js'
const ua = window.navigator.userAgent
const ipad = ua.match(/(iPad).*OS\s([\d_]+)/)
const ipod = ua.match(/(iPod)(.*OS\s([\d_]+))?/)
const iphone = !ipad && ua.match(/(iPhone\sOS|iOS)\s([\d_]+)/)
const isAndroid = ua.match(/(Android);?[\s\/]+([\d.]+)?/)
const isIos=ipad||ipod||iphone
const isDesktop=!(isIos||isAndroid)
if (isDesktop) {
localStorage.setItem('developmentInPC', 1)
}
const isInXqc = !isDesktop && localStorage.getItem('developmentInPC') === null
console.info(`develop in PC:${!isInXqc}`)
const webViewJavascriptBridgeReady = () => {
function initWebViewJavascriptBridge(bridge) {
bridge.init(function (responseCallback) {
console.log('JS got a message')
const data = {
'Javascript Responds': 'Wee!'
}
console.log('JS responding with', data)
responseCallback(data)
})
}
return new Promise((resolve, reject) => {
if (window.WebViewJavascriptBridge) {
initWebViewJavascriptBridge(window.WebViewJavascriptBridge)
resolve(window.WebViewJavascriptBridge)
} else {
document.addEventListener(
'WebViewJavascriptBridgeReady',
function () {
initWebViewJavascriptBridge(window.WebViewJavascriptBridge)
resolve(window.WebViewJavascriptBridge)
},
false
)
}
})
}
/**
* @param {Object} param 调用源生方法的参数,{name,data={}}
* @description 调用源生方法
*/
const caller = async function ({
name,
param = {}
}) {
try {
const bridge = await webViewJavascriptBridgeReady()
return new Promise((resolve, reject) => {
bridge.callHandler(name, data, responseData => {
if (isAndroid) {
responseData = JSON.parse(responseData)
}
resolve(responseData)
})
})
} catch (error) {
throw error
}
}
const app = {
/**
* @description get access token
*/
async getAccessToken() {
let result, accessToken, devAccessToken
if (isInXqc) {
accessToken = sessionStorage.getItem('accessToken')
if (!accessToken) {
result = await caller({
name: 'userCarGetAccessToken'
})
accessToken = result.data
sessionStorage.setItem('accessToken', accessToken)
}
return accessToken
} else {
//
devAccessToken = sessionStorage.getItem('devAccessToken')
if (!devAccessToken) {
result = await loginInDevelopment()
console.log(result)
if(result.code===10200){
devAccessToken = result.data['access_token']
sessionStorage.setItem('devAccessToken', devAccessToken)
}else{
console.error('登录失败')
}
}
return devAccessToken
}
},
/**
* @return Promise Object
* @description Get current user information.
*/
getUserInfo() {
if (isInXqc) {
return caller({
name: 'userCarGetUserInfo'
})
} else {
console.log('Open camera. Original function name:"userCarGetUserInfo"')
}
},
/**
* @return Promise Object
* @description back to the previous page.
*/
goBack() {
if (isInXqc) {
return caller({
name: 'platformBack'
})
} else {
console.log('Go back to the previous page. Original function name:"platformBack"')
}
},
/**
* @return Promise Object
* @description Close current page.
*/
exit() {
if (isInXqc) {
return caller({
name: 'platformPop'
})
} else {
console.log('Exit. Close current page. Original function name:"platformPop"')
}
},
/**
* @param {Object} param {maxImageNum,isUpload,waterMark}
* @return Promise Object
* @description Open camera.
*/
openCamera(param = {}) {
param = Object.assign({
maxImageNum: 1,
isUpload: 1,
waterMark: '薪公务用车'
}, param)
if (isInXqc) {
return caller({
name: 'platformCamera',
param
})
} else {
console.log('Open camera. Original function name:"platformCamera"')
}
},
/**
* @param {String} viewKey the target view's key
* @return Promise Object
* @description Open an app view.
*/
openAppView(viewKey) {
if (isInXqc) {
return caller({
name: 'callbackApp',
param: {
viewKey
}
})
} else {
console.log('Open an app view. Original function name:"callbackApp"')
}
},
/**
* @param {Object} param share information {title,content,url}
* @return Promise Object
* @description Open an app view.
*/
shareFile(param = {}) {
param = Object.assign({
title: '薪公务用车',
url: document.location.href,
content: document.title
}, param)
if (isInXqc) {
return caller({
name: 'shareFile',
param
})
} else {
console.log('Share. Original function name:"shareFile"')
}
},
/**
* @return Promise Object
* @description Get location information.
*/
location() {
if (isInXqc) {
return caller({
name: 'location'
})
} else {
console.log('Get location information. Close current page. Original function name:"location"')
}
},
/**
* @param {Object} param webview information {type:'1','linkUrl':'https://www.baidu.com'}
* @return Promise Object
* @description Open a new webview. more information in http://192.168.0.247:8002/pages/viewpage.action?pageId=27386693
*/
openWebview(param = {}) {
param = Object.assign({
type: '1',
linkUrl: 'https://www.baidu.com'
}, param)
if (isInXqc) {
return caller({
name: 'openNewWebView',
param
})
} else {
console.log('Open a new webview. Original function name:"openNewWebView"')
}
},
install: function(Vue) {
Vue.prototype.$app=app
}
}
window.BndApp=app
export default app