智能照明系统APP-本地串口
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 
LightingSystemApp-serial/.svn/pristine/c4/c4b0c833e381630f71679633006...

105 lines
2.5 KiB

const PICKER_ID = '__UNIAPP_PICKER'
export const PICKER_PATH = '_www/__uniapppicker.html'
let pickerWebview = null
let pickerWebviewCreated = false
let _exists = null
let callbacks = null
export function exists (callback) {
if (_exists !== null) {
callback(_exists)
return
}
if (callbacks) {
callbacks.push(callback)
return
}
callbacks = [callback]
function success (exists) {
_exists = exists
callbacks.forEach(callback => callback(exists))
callbacks = null
}
plus.io.resolveLocalFileSystemURL(PICKER_PATH, () => {
success(true)
}, () => {
success(false)
})
}
let _pickerHideCallback
export function initPicker () {
if (pickerWebview) {
return
}
pickerWebview = plus.webview.getWebviewById(PICKER_ID)
if (pickerWebview) {
pickerWebviewCreated = true
} else {
pickerWebview = plus.webview.create(PICKER_PATH, PICKER_ID, {
popGesture: 'none',
background: 'transparent',
backButtonAutoControl: 'hide',
render: 'always',
kernel: 'WKWebview',
bounce: 'none',
cachemode: 'noCache'
})
pickerWebview.addEventListener('hide', () => {
_pickerHideCallback && _pickerHideCallback()
_pickerHideCallback = null
})
window.__pickerCallback = function () {
delete window.__pickerCallback
pickerWebviewCreated = true
}
}
}
export function showPicker (data = {}, callback) {
data.id = plus.webview.currentWebview().id
pickerWebview.show('fade-in')
let res
_pickerHideCallback = function () {
callback(res || {
event: 'cancel'
})
}
window.__pickerCallback = function ({
event = 'cancel',
column,
value = -1
}) {
if (event === 'created' && pickerWebview) {
pickerWebviewCreated = true
pickerWebview.evalJS(`showPicker(${JSON.stringify(data)})`)
return
}
if (event === 'columnchange' && pickerWebview) {
callback({
event,
column,
value
})
}
if (event === 'change' || event === 'cancel') {
// 赋值为空函数避免 picker-webview 产生多余通讯报错
window.__pickerCallback = function () { }
res = {
event,
value
}
pickerWebview.hide('fade-out', 100)
}
}
if (pickerWebviewCreated) {
pickerWebview.evalJS(`showPicker(${JSON.stringify(data)})`)
}
}
export function updatePicker (data) {
if (pickerWebviewCreated) {
pickerWebview.evalJS(`showPicker(${JSON.stringify(data)})`)
}
}