From 54053874c64bfe2da5933c50a1b10c376f06cfe8 Mon Sep 17 00:00:00 2001 From: fxy060608 Date: Tue, 23 Jul 2019 16:17:28 +0800 Subject: [PATCH] add route --- packages/uni-app-plus-nvue/dist/uni.js | 90 ++++++++++++++++++- src/core/helpers/api.js | 2 +- .../app-plus-nvue/service/api/index.js | 8 +- .../service/api/route/navigate-back.js | 36 ++++++++ .../service/api/route/navigate-to.js | 24 +++++ .../service/api/route/re-launch.js | 3 + .../service/api/route/redirect-to.js | 3 + .../service/api/route/switch-tab.js | 3 + .../app-plus-nvue/service/api/route/util.js | 14 +++ .../app-plus/service/api/device/scan-code.js | 4 +- .../app-plus/service/api/ui/popup.js | 18 ++-- 11 files changed, 194 insertions(+), 11 deletions(-) create mode 100644 src/platforms/app-plus-nvue/service/api/route/navigate-back.js create mode 100644 src/platforms/app-plus-nvue/service/api/route/navigate-to.js create mode 100644 src/platforms/app-plus-nvue/service/api/route/re-launch.js create mode 100644 src/platforms/app-plus-nvue/service/api/route/redirect-to.js create mode 100644 src/platforms/app-plus-nvue/service/api/route/switch-tab.js create mode 100644 src/platforms/app-plus-nvue/service/api/route/util.js diff --git a/packages/uni-app-plus-nvue/dist/uni.js b/packages/uni-app-plus-nvue/dist/uni.js index d0cb593c1..ed1e3f36f 100644 --- a/packages/uni-app-plus-nvue/dist/uni.js +++ b/packages/uni-app-plus-nvue/dist/uni.js @@ -1816,7 +1816,7 @@ function invokeCallbackHandler (invokeCallbackId, res) { } function wrapperUnimplemented (name) { - return function unimplemented (args) { + return function todo (args) { console.error('API `' + name + '` is not yet implemented'); } } @@ -6806,12 +6806,98 @@ function createVideoContext$1 (id, vm) { return new VideoContext(id, elm) } +const ANI_DURATION$1 = 300; +const ANI_SHOW$1 = 'pop-in'; + +function showWebview (webview, animationType, animationDuration) { + setTimeout(() => { + webview.show( + animationType || ANI_SHOW$1, + animationDuration || ANI_DURATION$1, + () => { + console.log('show.callback'); + } + ); + }, 50); +} + +let firstBackTime = 0; + +function navigateBack$1 ({ + delta, + animationType, + animationDuration +}) { + const pages = getCurrentPages(); + const len = pages.length - 1; + const page = pages[len]; + if (page.$page.meta.isQuit) { + if (!firstBackTime) { + firstBackTime = Date.now(); + plus.nativeUI.toast('再按一次退出应用'); + setTimeout(() => { + firstBackTime = null; + }, 2000); + } else if (Date.now() - firstBackTime < 2000) { + plus.runtime.quit(); + } + } else { + pages.splice(len, 1); + if (animationType) { + page.$getAppWebview().close(animationType, animationDuration || ANI_DURATION$1); + } else { + page.$getAppWebview().close('auto'); + } + UniServiceJSBridge.emit('onAppRoute', { + type: 'navigateBack' + }); + } +} + +function navigateTo$1 ({ + url, + animationType, + animationDuration +}) { + const path = url.split('?')[0]; + + UniServiceJSBridge.emit('onAppRoute', { + type: 'navigateTo', + path + }); + + showWebview( + __registerPage({ + path + }), + animationType, + animationDuration + ); +} + +function reLaunch$1 ({ + path +}) {} + +function redirectTo$1 ({ + path +}) {} + +function switchTab$1 ({ + path +}) {} + var nvueApi = /*#__PURE__*/Object.freeze({ createLivePusherContext: createLivePusherContext, createMapContext: createMapContext$1, - createVideoContext: createVideoContext$1 + createVideoContext: createVideoContext$1, + navigateBack: navigateBack$1, + navigateTo: navigateTo$1, + reLaunch: reLaunch$1, + redirectTo: redirectTo$1, + switchTab: switchTab$1 }); var platformApi = Object.assign({}, appApi, nvueApi); diff --git a/src/core/helpers/api.js b/src/core/helpers/api.js index 61865eb28..c7f7d5d67 100644 --- a/src/core/helpers/api.js +++ b/src/core/helpers/api.js @@ -234,7 +234,7 @@ export function invokeCallbackHandler (invokeCallbackId, res) { } export function wrapperUnimplemented (name) { - return function unimplemented (args) { + return function todo (args) { console.error('API `' + name + '` is not yet implemented') } } diff --git a/src/platforms/app-plus-nvue/service/api/index.js b/src/platforms/app-plus-nvue/service/api/index.js index 320953210..29e239dab 100644 --- a/src/platforms/app-plus-nvue/service/api/index.js +++ b/src/platforms/app-plus-nvue/service/api/index.js @@ -1,3 +1,9 @@ export * from './context/live-pusher' export * from './context/map' -export * from './context/video' +export * from './context/video' + +export * from './route/navigate-back' +export * from './route/navigate-to' +export * from './route/re-launch' +export * from './route/redirect-to' +export * from './route/switch-tab' diff --git a/src/platforms/app-plus-nvue/service/api/route/navigate-back.js b/src/platforms/app-plus-nvue/service/api/route/navigate-back.js new file mode 100644 index 000000000..9d1711a03 --- /dev/null +++ b/src/platforms/app-plus-nvue/service/api/route/navigate-back.js @@ -0,0 +1,36 @@ +import { + ANI_DURATION +} from './util' + +let firstBackTime = 0 + +export function navigateBack ({ + delta, + animationType, + animationDuration +}) { + const pages = getCurrentPages() + const len = pages.length - 1 + const page = pages[len] + if (page.$page.meta.isQuit) { + if (!firstBackTime) { + firstBackTime = Date.now() + plus.nativeUI.toast('再按一次退出应用') + setTimeout(() => { + firstBackTime = null + }, 2000) + } else if (Date.now() - firstBackTime < 2000) { + plus.runtime.quit() + } + } else { + pages.splice(len, 1) + if (animationType) { + page.$getAppWebview().close(animationType, animationDuration || ANI_DURATION) + } else { + page.$getAppWebview().close('auto') + } + UniServiceJSBridge.emit('onAppRoute', { + type: 'navigateBack' + }) + } +} diff --git a/src/platforms/app-plus-nvue/service/api/route/navigate-to.js b/src/platforms/app-plus-nvue/service/api/route/navigate-to.js new file mode 100644 index 000000000..2eea3ce40 --- /dev/null +++ b/src/platforms/app-plus-nvue/service/api/route/navigate-to.js @@ -0,0 +1,24 @@ +import { + showWebview +} from './util' + +export function navigateTo ({ + url, + animationType, + animationDuration +}) { + const path = url.split('?')[0] + + UniServiceJSBridge.emit('onAppRoute', { + type: 'navigateTo', + path + }) + + showWebview( + __registerPage({ + path + }), + animationType, + animationDuration + ) +} diff --git a/src/platforms/app-plus-nvue/service/api/route/re-launch.js b/src/platforms/app-plus-nvue/service/api/route/re-launch.js new file mode 100644 index 000000000..92e9e52f4 --- /dev/null +++ b/src/platforms/app-plus-nvue/service/api/route/re-launch.js @@ -0,0 +1,3 @@ +export function reLaunch ({ + path +}) {} diff --git a/src/platforms/app-plus-nvue/service/api/route/redirect-to.js b/src/platforms/app-plus-nvue/service/api/route/redirect-to.js new file mode 100644 index 000000000..f3c4499e2 --- /dev/null +++ b/src/platforms/app-plus-nvue/service/api/route/redirect-to.js @@ -0,0 +1,3 @@ +export function redirectTo ({ + path +}) {} diff --git a/src/platforms/app-plus-nvue/service/api/route/switch-tab.js b/src/platforms/app-plus-nvue/service/api/route/switch-tab.js new file mode 100644 index 000000000..1d8213251 --- /dev/null +++ b/src/platforms/app-plus-nvue/service/api/route/switch-tab.js @@ -0,0 +1,3 @@ +export function switchTab ({ + path +}) {} diff --git a/src/platforms/app-plus-nvue/service/api/route/util.js b/src/platforms/app-plus-nvue/service/api/route/util.js new file mode 100644 index 000000000..992268860 --- /dev/null +++ b/src/platforms/app-plus-nvue/service/api/route/util.js @@ -0,0 +1,14 @@ +export const ANI_DURATION = 300 +const ANI_SHOW = 'pop-in' + +export function showWebview (webview, animationType, animationDuration) { + setTimeout(() => { + webview.show( + animationType || ANI_SHOW, + animationDuration || ANI_DURATION, + () => { + console.log('show.callback') + } + ) + }, 50) +} diff --git a/src/platforms/app-plus/service/api/device/scan-code.js b/src/platforms/app-plus/service/api/device/scan-code.js index 26cb4b56f..b14998b96 100644 --- a/src/platforms/app-plus/service/api/device/scan-code.js +++ b/src/platforms/app-plus/service/api/device/scan-code.js @@ -15,8 +15,8 @@ import { registerPlusMessage } from '../../framework/plus-message' -const SCAN_ID = '__UNIAPP_SCAN' -const SCAN_PATH = '_www/__uniappscan.html' +export const SCAN_ID = '__UNIAPP_SCAN' +export const SCAN_PATH = '_www/__uniappscan.html' const MESSAGE_TYPE = 'scanCode' diff --git a/src/platforms/app-plus/service/api/ui/popup.js b/src/platforms/app-plus/service/api/ui/popup.js index 4e5868d62..9d0d07578 100644 --- a/src/platforms/app-plus/service/api/ui/popup.js +++ b/src/platforms/app-plus/service/api/ui/popup.js @@ -7,7 +7,15 @@ let waitingTimeout let toast = false let toastTimeout -export function showToast ({ +export function showLoading(args) { + return showToast(args).replace('showToast', 'showLoading') +} + +export function hideLoading() { + return hideToast().replace('hideToast', 'hideLoading') +} + +export function showToast({ title = '', icon = 'success', image = '', @@ -96,7 +104,7 @@ export function showToast ({ } } -export function hideToast () { +export function hideToast() { if (toast) { toastTimeout && clearTimeout(toastTimeout) plus.nativeUI.closeToast() @@ -112,7 +120,7 @@ export function hideToast () { errMsg: 'hideToast:ok' } } -export function showModal ({ +export function showModal({ title = '', content = '', showCancel = true, @@ -137,7 +145,7 @@ export function showModal ({ } }, title, showCancel ? [cancelText, confirmText] : [confirmText]) } -export function showActionSheet ({ +export function showActionSheet({ itemList = [], itemColor = '#000000', title = '' @@ -167,4 +175,4 @@ export function showActionSheet ({ }) } }) -} +} -- GitLab