智能照明系统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/69/6924d986a831eeae7f3bd703889...

142 lines
3.6 KiB

import {
TITLEBAR_HEIGHT
} from '../../../constants'
import {
backbuttonListener
} from '../../backbutton'
import {
isTabBarPage
} from '../../../bridge'
import {
getStatusbarHeight
} from '../../../api/util'
import tabBar from '../../tab-bar'
function initPopupSubNVue (subNVueWebview, style, maskWebview) {
if (!maskWebview.popupSubNVueWebviews) {
maskWebview.popupSubNVueWebviews = {}
}
maskWebview.popupSubNVueWebviews[subNVueWebview.id] = subNVueWebview
if (process.env.NODE_ENV !== 'production') {
console.log(
`UNIAPP[webview][${maskWebview.id}]:add.popupSubNVueWebview[${subNVueWebview.id}]`
)
}
const hideSubNVue = function () {
maskWebview.setStyle({
mask: 'none'
})
subNVueWebview.hide('auto')
}
maskWebview.addEventListener('maskClick', hideSubNVue)
let isRemoved = false // 增加个 remove 标记,防止出错
subNVueWebview.addEventListener('show', () => {
if (!isRemoved) {
plus.key.removeEventListener('backbutton', backbuttonListener)
plus.key.addEventListener('backbutton', hideSubNVue)
isRemoved = true
}
})
subNVueWebview.addEventListener('hide', () => {
if (isRemoved) {
plus.key.removeEventListener('backbutton', hideSubNVue)
plus.key.addEventListener('backbutton', backbuttonListener)
isRemoved = false
}
})
subNVueWebview.addEventListener('close', () => {
delete maskWebview.popupSubNVueWebviews[subNVueWebview.id]
if (isRemoved) {
plus.key.removeEventListener('backbutton', hideSubNVue)
plus.key.addEventListener('backbutton', backbuttonListener)
isRemoved = false
}
})
}
function initNormalSubNVue (subNVueWebview, style, webview) {
webview.append(subNVueWebview)
}
function initSubNVue (subNVue, routeOptions, webview) {
if (!subNVue.path) {
return
}
const style = subNVue.style || {}
const isNavigationBar = subNVue.type === 'navigationBar'
const isPopup = subNVue.type === 'popup'
delete style.type
if (isPopup && !subNVue.id) {
console.warn('subNVue[' + subNVue.path + '] 尚未配置 id')
}
// TODO lazyload
style.uniNView = {
path: subNVue.path.replace('.nvue', '.js'),
defaultFontSize: __uniConfig.defaultFontSize,
viewport: __uniConfig.viewport
}
const extras = {
__uniapp_host: routeOptions.path,
__uniapp_origin: style.uniNView.path.split('?')[0].replace('.js', ''),
__uniapp_origin_id: webview.id,
__uniapp_origin_type: webview.__uniapp_type
}
let maskWebview
if (isNavigationBar) {
style.position = 'dock'
style.dock = 'top'
style.top = 0
style.width = '100%'
style.height = TITLEBAR_HEIGHT + getStatusbarHeight()
delete style.left
delete style.right
delete style.bottom
delete style.margin
} else if (isPopup) {
style.position = 'absolute'
if (isTabBarPage(routeOptions.path)) {
maskWebview = tabBar
} else {
maskWebview = webview
}
extras.__uniapp_mask = style.mask || 'rgba(0,0,0,0.5)'
extras.__uniapp_mask_id = maskWebview.id
}
if (process.env.NODE_ENV !== 'production') {
console.log(
`UNIAPP[webview][${webview.id}]:create[${subNVue.id}]:${JSON.stringify(style)}`
)
}
delete style.mask
const subNVueWebview = plus.webview.create('', subNVue.id, style, extras)
if (isPopup) {
initPopupSubNVue(subNVueWebview, style, maskWebview)
} else {
initNormalSubNVue(subNVueWebview, style, webview)
}
}
export function initSubNVues (routeOptions, webview) {
const subNVues = routeOptions.window.subNVues
if (!subNVues || !subNVues.length) {
return
}
subNVues.forEach(subNVue => {
initSubNVue(subNVue, routeOptions, webview)
})
}