diff --git a/src/platforms/app-plus/view/components/picker/index.vue b/src/platforms/app-plus/view/components/picker/index.vue new file mode 100644 index 0000000000000000000000000000000000000000..57b9a0cf8aeb6e3966858606b0f67cce1062195f --- /dev/null +++ b/src/platforms/app-plus/view/components/picker/index.vue @@ -0,0 +1,180 @@ + + + + + diff --git a/src/platforms/app-plus/view/components/picker/page.js b/src/platforms/app-plus/view/components/picker/page.js new file mode 100644 index 0000000000000000000000000000000000000000..1de97623fe98d1100eca1ab911ff437d34cede51 --- /dev/null +++ b/src/platforms/app-plus/view/components/picker/page.js @@ -0,0 +1,99 @@ +function getPageType () { + return typeof window === 'object' && typeof navigator === 'object' && typeof document === 'object' ? 'vue' : 'nvue' +} + +let pageId + +function getPageId () { + return pageId || (pageId = plus.webview.currentWebview().id) +} + +let initedEventListener = false +const callbacks = {} + +function addEventListener (pageId, callback) { + let type = getPageType() + + function onPlusMessage (res) { + const message = res.data.__message + if (!message || !message.__page) { + return + } + const pageId = message.__page + const callback = callbacks[pageId] + callback && callback(message) + if (!message.keep) { + delete callbacks[pageId] + } + } + if (!initedEventListener) { + if (type === 'nvue') { + const globalEvent = weex.requireModule('globalEvent') + globalEvent.addEventListener('plusMessage', onPlusMessage) + } else { + window.__plusMessage = onPlusMessage + } + initedEventListener = true + } + callbacks[pageId] = callback +} + +class Page { + constructor (webview) { + this.webview = webview + } + sendMessage (data) { + plus.webview.postMessageToUniNView({ + __message: { + data + } + }, this.webview.id) + } +} + +export function showPage ({ + url, + data = {}, + style = {}, + onMessage, + onClose +}) { + const type = getPageType() + const fromId = getPageId() + const titleNView = { + autoBackButton: true, + titleSize: '17px' + } + const pageId = `page${Date.now()}` + style = Object.assign({}, style) + if (style.titleNView !== false && style.titleNView !== 'none') { + style.titleNView = Object.assign(titleNView, style.titleNView) + } + const defaultStyle = { + top: 0, + bottom: 0, + usingComponents: {}, + popGesture: 'close', + scrollIndicator: 'none', + animationType: 'pop-in', + animationDuration: 200, + uniNView: { + path: `_www/${url}.js?from=${fromId}&type=${type}&data=${encodeURIComponent(JSON.stringify(data))}`, + defaultFontSize: plus.screen.resolutionWidth / 20, + viewport: plus.screen.resolutionWidth + } + } + style = Object.assign(defaultStyle, style) + const page = plus.webview.create('', pageId, style) + page.addEventListener('close', onClose) + addEventListener(pageId, message => { + if (typeof onMessage === 'function') { + onMessage(message.data) + } + if (!message.keep) { + page.close('auto') + } + }) + page.show(style.animationType, style.animationDuration) + return new Page(page) +}