From 5c27707f84084b7277920aa7d508fe7fac2b5842 Mon Sep 17 00:00:00 2001 From: fxy060608 Date: Thu, 22 Nov 2018 22:00:13 +0800 Subject: [PATCH] framework --- .eslintignore | 1 + babel.config.js | 10 + build/build.js | 20 + build/vue.config.js | 37 + build/webpack.config.js | 48 + build/webpack.config.test.js | 47 + lib/h5/main.js | 37 + package.json | 79 + packages/uni-h5/LICENSE | 21 + packages/uni-h5/dist/index.css | 1 + packages/uni-h5/dist/index.umd.min.js | 1 + packages/uni-h5/package.json | 11 + postcss.config.js | 5 + src/assets/svg/arrow-left.svg | 1 + src/core/helpers/api.js | 334 + src/core/helpers/callbacks.js | 29 + src/core/helpers/catch.js | 26 + src/core/helpers/console.js | 24 + src/core/helpers/constants.js | 2 + src/core/helpers/get-real-route.js | 32 + src/core/helpers/html-parser.js | 251 + src/core/helpers/index.js | 38 + src/core/helpers/params.js | 154 + src/core/helpers/patch.js | 39 + src/core/helpers/protocol/base.js | 5 + src/core/helpers/protocol/context.js | 9 + .../protocol/device/make-phone-call.js | 11 + .../helpers/protocol/file/open-document.js | 9 + src/core/helpers/protocol/index.js | 8 + src/core/helpers/protocol/location.js | 42 + .../helpers/protocol/media/choose-image.js | 52 + .../helpers/protocol/media/choose-video.js | 22 + .../helpers/protocol/media/get-image-info.js | 11 + .../helpers/protocol/media/preview-image.js | 27 + src/core/helpers/protocol/navigation-bar.js | 37 + .../helpers/protocol/network/download-file.js | 12 + src/core/helpers/protocol/network/request.js | 55 + src/core/helpers/protocol/network/socket.js | 48 + .../helpers/protocol/network/upload-file.js | 31 + src/core/helpers/protocol/page-scroll-to.js | 13 + src/core/helpers/protocol/plugins.js | 19 + src/core/helpers/protocol/popup.js | 114 + src/core/helpers/protocol/route.js | 89 + src/core/helpers/protocol/storage.js | 18 + src/core/helpers/protocol/tab-bar.js | 106 + src/core/helpers/tags.js | 54 + src/core/service/api/can-i-use.js | 13 + src/core/service/api/context/audio.js | 45 + src/core/service/api/context/inner-audio.js | 146 + src/core/service/api/context/map.js | 91 + src/core/service/api/context/video.js | 72 + src/core/service/api/index.js | 8 + src/core/service/api/location.js | 67 + src/core/service/api/media/get-image-info.js | 21 + src/core/service/api/media/preview-image.js | 25 + src/core/service/api/navigation-bar.js | 56 + src/core/service/api/network/request.js | 182 + src/core/service/api/network/socket.js | 211 + src/core/service/api/page-event.js | 33 + src/core/service/api/popup.js | 46 + src/core/service/api/pull | 0 src/core/service/api/route.js | 75 + src/core/service/api/storage.js | 96 + src/core/service/api/tab-bar.js | 83 + .../service/api/wxml/create-selector-query.js | 124 + src/core/service/bridge/index.js | 36 + src/core/service/bridge/on.js | 60 + src/core/service/bridge/subscribe.js | 54 + src/core/service/index.js | 36 + src/core/service/plugins/app/create-app.js | 51 + src/core/service/plugins/app/index.js | 40 + src/core/service/plugins/app/router-guard.js | 139 + src/core/service/plugins/index.js | 139 + src/core/service/plugins/page/create-page.js | 10 + src/core/service/plugins/page/index.js | 14 + src/core/service/plugins/util.js | 30 + src/core/view/api/index.js | 1 + src/core/view/api/upx/index.js | 35 + src/core/view/bridge/index.js | 29 + src/core/view/bridge/subscribe/index.js | 90 + .../subscribe/request-component-info.js | 121 + src/core/view/bridge/subscribe/scroll.js | 123 + src/core/view/components/button/index.vue | 378 + .../view/components/checkbox-group/index.vue | 84 + src/core/view/components/checkbox/index.vue | 153 + src/core/view/components/form/index.vue | 55 + src/core/view/components/image/README.md | 9 + src/core/view/components/image/index.vue | 173 + src/core/view/components/index.js | 64 + src/core/view/components/input/index.vue | 388 + src/core/view/components/label/index.vue | 42 + src/core/view/components/navigator/index.vue | 114 + .../components/picker-view-column/index.vue | 275 + .../view/components/picker-view/index.vue | 140 + src/core/view/components/picker/index.vue | 234 + src/core/view/components/progress/index.vue | 152 + .../view/components/radio-group/index.vue | 102 + src/core/view/components/radio/index.vue | 156 + .../view/components/rich-text/html-parser.js | 102 + src/core/view/components/rich-text/index.vue | 40 + .../view/components/rich-text/nodes-parser.js | 125 + .../view/components/scroll-view/index.vue | 389 + src/core/view/components/slider/index.vue | 291 + .../view/components/swiper-item/index.vue | 58 + src/core/view/components/swiper/index.vue | 688 ++ src/core/view/components/switch/index.vue | 214 + src/core/view/components/text/index.vue | 70 + src/core/view/components/textarea/index.vue | 327 + src/core/view/components/view/README.md | 0 src/core/view/components/view/index.vue | 33 + src/core/view/index.css | 121 + src/core/view/index.js | 22 + src/core/view/mixins/base.js | 15 + src/core/view/mixins/emitter.js | 55 + src/core/view/mixins/hover.js | 68 + src/core/view/mixins/index.js | 19 + src/core/view/mixins/listeners.js | 84 + src/core/view/mixins/scroller/C.js | 256 + src/core/view/mixins/scroller/L.js | 79 + src/core/view/mixins/scroller/R.js | 59 + src/core/view/mixins/scroller/S.js | 191 + src/core/view/mixins/scroller/index.js | 104 + src/core/view/mixins/subscriber.js | 35 + src/core/view/mixins/touchtrack.js | 72 + src/core/view/plugins/events.js | 144 + src/core/view/plugins/index.js | 52 + src/platforms/h5/canIUse.json | 3 + src/platforms/h5/components/app/components.js | 13 + src/platforms/h5/components/app/index.vue | 109 + .../h5/components/app/popup/actionSheet.vue | 130 + .../app/popup/mixins/action-sheet.js | 29 + .../h5/components/app/popup/mixins/index.js | 8 + .../h5/components/app/popup/mixins/modal.js | 29 + .../h5/components/app/popup/mixins/picker.js | 47 + .../h5/components/app/popup/mixins/toast.js | 21 + .../components/app/popup/mixins/transition.js | 6 + .../h5/components/app/popup/modal.vue | 184 + .../h5/components/app/popup/picker.vue | 425 + .../h5/components/app/popup/toast.vue | 170 + src/platforms/h5/components/app/tabBar.vue | 225 + .../h5/components/async-error/index.vue | 30 + .../h5/components/async-loading/index.vue | 22 + src/platforms/h5/components/page/index.vue | 178 + src/platforms/h5/components/page/pageBody.vue | 45 + src/platforms/h5/components/page/pageHead.vue | 256 + .../h5/components/page/pageRefresh.vue | 139 + .../h5/components/page/pull-to-refresh.js | 230 + .../h5/components/page/transparent.js | 69 + .../system-routes/choose-location/index.vue | 79 + .../system-routes/open-location/index.vue | 105 + .../system-routes/preview-image/index.vue | 71 + .../system-routes/system-header/index.vue | 98 + src/platforms/h5/helpers/append-css.js | 14 + src/platforms/h5/helpers/can-i-use.js | 3 + src/platforms/h5/helpers/get-jsonp.js | 39 + src/platforms/h5/helpers/get-real-path.js | 28 + src/platforms/h5/helpers/get-window-offset.js | 25 + src/platforms/h5/helpers/todo-api.js | 19 + .../h5/service/api/device/accelerometer.js | 47 + .../h5/service/api/device/compass.js | 45 + .../h5/service/api/device/get-system-info.js | 82 + .../h5/service/api/device/hide-keyboard.js | 6 + .../h5/service/api/device/make-phone-call.js | 8 + .../h5/service/api/device/network-info.js | 60 + .../h5/service/api/device/vibrate.js | 25 + .../h5/service/api/file/open-document.js | 16 + src/platforms/h5/service/api/file/util.js | 40 + src/platforms/h5/service/api/index.js | 8 + src/platforms/h5/service/api/location.js | 70 + .../h5/service/api/media/choose-image.js | 66 + .../h5/service/api/media/choose-video.js | 46 + .../h5/service/api/network/download-file.js | 96 + .../h5/service/api/network/upload-file.js | 135 + src/platforms/h5/service/api/plugins.js | 8 + src/platforms/h5/service/bridge.js | 4 + src/platforms/h5/view/bridge.js | 4 + .../h5/view/components/audio/index.vue | 248 + .../h5/view/components/map/index.vue | 966 ++ .../h5/view/components/video/index.vue | 1240 +++ src/shared/color.js | 30 + src/shared/env.js | 11 + src/shared/index.js | 3 + src/shared/path.js | 22 + src/shared/query.js | 72 + src/shared/util.js | 32 + tests/unit/.eslintrc.js | 5 + .../unit/core/view/components/events.spec.js | 31 + tests/unit/core/view/components/hooks.spec.js | 13 + tests/unit/core/view/components/view.spec.js | 68 + tests/unit/setup.js | 52 + types/UniServiceJSBridge.d.ts | 64 + types/UniViewJSBridge.d.ts | 58 + yarn.lock | 7814 +++++++++++++++++ 193 files changed, 25018 insertions(+) create mode 100644 .eslintignore create mode 100644 babel.config.js create mode 100644 build/build.js create mode 100644 build/vue.config.js create mode 100644 build/webpack.config.js create mode 100644 build/webpack.config.test.js create mode 100644 lib/h5/main.js create mode 100644 package.json create mode 100755 packages/uni-h5/LICENSE create mode 100644 packages/uni-h5/dist/index.css create mode 100644 packages/uni-h5/dist/index.umd.min.js create mode 100644 packages/uni-h5/package.json create mode 100644 postcss.config.js create mode 100644 src/assets/svg/arrow-left.svg create mode 100644 src/core/helpers/api.js create mode 100644 src/core/helpers/callbacks.js create mode 100644 src/core/helpers/catch.js create mode 100644 src/core/helpers/console.js create mode 100644 src/core/helpers/constants.js create mode 100644 src/core/helpers/get-real-route.js create mode 100644 src/core/helpers/html-parser.js create mode 100644 src/core/helpers/index.js create mode 100644 src/core/helpers/params.js create mode 100644 src/core/helpers/patch.js create mode 100644 src/core/helpers/protocol/base.js create mode 100644 src/core/helpers/protocol/context.js create mode 100644 src/core/helpers/protocol/device/make-phone-call.js create mode 100644 src/core/helpers/protocol/file/open-document.js create mode 100644 src/core/helpers/protocol/index.js create mode 100644 src/core/helpers/protocol/location.js create mode 100644 src/core/helpers/protocol/media/choose-image.js create mode 100644 src/core/helpers/protocol/media/choose-video.js create mode 100644 src/core/helpers/protocol/media/get-image-info.js create mode 100644 src/core/helpers/protocol/media/preview-image.js create mode 100644 src/core/helpers/protocol/navigation-bar.js create mode 100644 src/core/helpers/protocol/network/download-file.js create mode 100644 src/core/helpers/protocol/network/request.js create mode 100644 src/core/helpers/protocol/network/socket.js create mode 100644 src/core/helpers/protocol/network/upload-file.js create mode 100644 src/core/helpers/protocol/page-scroll-to.js create mode 100644 src/core/helpers/protocol/plugins.js create mode 100644 src/core/helpers/protocol/popup.js create mode 100644 src/core/helpers/protocol/route.js create mode 100644 src/core/helpers/protocol/storage.js create mode 100644 src/core/helpers/protocol/tab-bar.js create mode 100644 src/core/helpers/tags.js create mode 100644 src/core/service/api/can-i-use.js create mode 100644 src/core/service/api/context/audio.js create mode 100644 src/core/service/api/context/inner-audio.js create mode 100644 src/core/service/api/context/map.js create mode 100644 src/core/service/api/context/video.js create mode 100644 src/core/service/api/index.js create mode 100644 src/core/service/api/location.js create mode 100644 src/core/service/api/media/get-image-info.js create mode 100644 src/core/service/api/media/preview-image.js create mode 100644 src/core/service/api/navigation-bar.js create mode 100644 src/core/service/api/network/request.js create mode 100644 src/core/service/api/network/socket.js create mode 100644 src/core/service/api/page-event.js create mode 100644 src/core/service/api/popup.js create mode 100644 src/core/service/api/pull create mode 100644 src/core/service/api/route.js create mode 100644 src/core/service/api/storage.js create mode 100644 src/core/service/api/tab-bar.js create mode 100644 src/core/service/api/wxml/create-selector-query.js create mode 100644 src/core/service/bridge/index.js create mode 100644 src/core/service/bridge/on.js create mode 100644 src/core/service/bridge/subscribe.js create mode 100644 src/core/service/index.js create mode 100644 src/core/service/plugins/app/create-app.js create mode 100644 src/core/service/plugins/app/index.js create mode 100644 src/core/service/plugins/app/router-guard.js create mode 100644 src/core/service/plugins/index.js create mode 100644 src/core/service/plugins/page/create-page.js create mode 100644 src/core/service/plugins/page/index.js create mode 100644 src/core/service/plugins/util.js create mode 100644 src/core/view/api/index.js create mode 100644 src/core/view/api/upx/index.js create mode 100644 src/core/view/bridge/index.js create mode 100644 src/core/view/bridge/subscribe/index.js create mode 100644 src/core/view/bridge/subscribe/request-component-info.js create mode 100644 src/core/view/bridge/subscribe/scroll.js create mode 100644 src/core/view/components/button/index.vue create mode 100644 src/core/view/components/checkbox-group/index.vue create mode 100644 src/core/view/components/checkbox/index.vue create mode 100644 src/core/view/components/form/index.vue create mode 100644 src/core/view/components/image/README.md create mode 100644 src/core/view/components/image/index.vue create mode 100644 src/core/view/components/index.js create mode 100644 src/core/view/components/input/index.vue create mode 100644 src/core/view/components/label/index.vue create mode 100644 src/core/view/components/navigator/index.vue create mode 100644 src/core/view/components/picker-view-column/index.vue create mode 100644 src/core/view/components/picker-view/index.vue create mode 100644 src/core/view/components/picker/index.vue create mode 100644 src/core/view/components/progress/index.vue create mode 100644 src/core/view/components/radio-group/index.vue create mode 100644 src/core/view/components/radio/index.vue create mode 100644 src/core/view/components/rich-text/html-parser.js create mode 100644 src/core/view/components/rich-text/index.vue create mode 100644 src/core/view/components/rich-text/nodes-parser.js create mode 100644 src/core/view/components/scroll-view/index.vue create mode 100644 src/core/view/components/slider/index.vue create mode 100644 src/core/view/components/swiper-item/index.vue create mode 100644 src/core/view/components/swiper/index.vue create mode 100644 src/core/view/components/switch/index.vue create mode 100644 src/core/view/components/text/index.vue create mode 100644 src/core/view/components/textarea/index.vue create mode 100644 src/core/view/components/view/README.md create mode 100755 src/core/view/components/view/index.vue create mode 100644 src/core/view/index.css create mode 100644 src/core/view/index.js create mode 100644 src/core/view/mixins/base.js create mode 100644 src/core/view/mixins/emitter.js create mode 100644 src/core/view/mixins/hover.js create mode 100644 src/core/view/mixins/index.js create mode 100644 src/core/view/mixins/listeners.js create mode 100644 src/core/view/mixins/scroller/C.js create mode 100644 src/core/view/mixins/scroller/L.js create mode 100644 src/core/view/mixins/scroller/R.js create mode 100644 src/core/view/mixins/scroller/S.js create mode 100644 src/core/view/mixins/scroller/index.js create mode 100644 src/core/view/mixins/subscriber.js create mode 100644 src/core/view/mixins/touchtrack.js create mode 100644 src/core/view/plugins/events.js create mode 100644 src/core/view/plugins/index.js create mode 100644 src/platforms/h5/canIUse.json create mode 100644 src/platforms/h5/components/app/components.js create mode 100644 src/platforms/h5/components/app/index.vue create mode 100644 src/platforms/h5/components/app/popup/actionSheet.vue create mode 100644 src/platforms/h5/components/app/popup/mixins/action-sheet.js create mode 100644 src/platforms/h5/components/app/popup/mixins/index.js create mode 100644 src/platforms/h5/components/app/popup/mixins/modal.js create mode 100644 src/platforms/h5/components/app/popup/mixins/picker.js create mode 100644 src/platforms/h5/components/app/popup/mixins/toast.js create mode 100644 src/platforms/h5/components/app/popup/mixins/transition.js create mode 100644 src/platforms/h5/components/app/popup/modal.vue create mode 100644 src/platforms/h5/components/app/popup/picker.vue create mode 100644 src/platforms/h5/components/app/popup/toast.vue create mode 100644 src/platforms/h5/components/app/tabBar.vue create mode 100644 src/platforms/h5/components/async-error/index.vue create mode 100644 src/platforms/h5/components/async-loading/index.vue create mode 100644 src/platforms/h5/components/page/index.vue create mode 100644 src/platforms/h5/components/page/pageBody.vue create mode 100644 src/platforms/h5/components/page/pageHead.vue create mode 100644 src/platforms/h5/components/page/pageRefresh.vue create mode 100644 src/platforms/h5/components/page/pull-to-refresh.js create mode 100644 src/platforms/h5/components/page/transparent.js create mode 100644 src/platforms/h5/components/system-routes/choose-location/index.vue create mode 100644 src/platforms/h5/components/system-routes/open-location/index.vue create mode 100644 src/platforms/h5/components/system-routes/preview-image/index.vue create mode 100644 src/platforms/h5/components/system-routes/system-header/index.vue create mode 100644 src/platforms/h5/helpers/append-css.js create mode 100644 src/platforms/h5/helpers/can-i-use.js create mode 100644 src/platforms/h5/helpers/get-jsonp.js create mode 100644 src/platforms/h5/helpers/get-real-path.js create mode 100644 src/platforms/h5/helpers/get-window-offset.js create mode 100644 src/platforms/h5/helpers/todo-api.js create mode 100644 src/platforms/h5/service/api/device/accelerometer.js create mode 100644 src/platforms/h5/service/api/device/compass.js create mode 100644 src/platforms/h5/service/api/device/get-system-info.js create mode 100644 src/platforms/h5/service/api/device/hide-keyboard.js create mode 100644 src/platforms/h5/service/api/device/make-phone-call.js create mode 100644 src/platforms/h5/service/api/device/network-info.js create mode 100644 src/platforms/h5/service/api/device/vibrate.js create mode 100644 src/platforms/h5/service/api/file/open-document.js create mode 100644 src/platforms/h5/service/api/file/util.js create mode 100644 src/platforms/h5/service/api/index.js create mode 100644 src/platforms/h5/service/api/location.js create mode 100644 src/platforms/h5/service/api/media/choose-image.js create mode 100644 src/platforms/h5/service/api/media/choose-video.js create mode 100644 src/platforms/h5/service/api/network/download-file.js create mode 100644 src/platforms/h5/service/api/network/upload-file.js create mode 100644 src/platforms/h5/service/api/plugins.js create mode 100644 src/platforms/h5/service/bridge.js create mode 100644 src/platforms/h5/view/bridge.js create mode 100644 src/platforms/h5/view/components/audio/index.vue create mode 100644 src/platforms/h5/view/components/map/index.vue create mode 100644 src/platforms/h5/view/components/video/index.vue create mode 100644 src/shared/color.js create mode 100644 src/shared/env.js create mode 100644 src/shared/index.js create mode 100644 src/shared/path.js create mode 100644 src/shared/query.js create mode 100644 src/shared/util.js create mode 100644 tests/unit/.eslintrc.js create mode 100644 tests/unit/core/view/components/events.spec.js create mode 100644 tests/unit/core/view/components/hooks.spec.js create mode 100644 tests/unit/core/view/components/view.spec.js create mode 100644 tests/unit/setup.js create mode 100644 types/UniServiceJSBridge.d.ts create mode 100644 types/UniViewJSBridge.d.ts create mode 100644 yarn.lock diff --git a/.eslintignore b/.eslintignore new file mode 100644 index 000000000..41aa7b44d --- /dev/null +++ b/.eslintignore @@ -0,0 +1 @@ +src/core/helpers/html-parser.js \ No newline at end of file diff --git a/babel.config.js b/babel.config.js new file mode 100644 index 000000000..93da2851e --- /dev/null +++ b/babel.config.js @@ -0,0 +1,10 @@ +module.exports = { + ignore: [ + "./packages", + ], + presets: [ + ["@vue/app", { + useBuiltIns: "entry" + }] + ] +} diff --git a/build/build.js b/build/build.js new file mode 100644 index 000000000..cc6b5f431 --- /dev/null +++ b/build/build.js @@ -0,0 +1,20 @@ +const { + error +} = require('@vue/cli-shared-utils') + +const Service = require('@vue/cli-service') + +const service = new Service(process.env.VUE_CLI_CONTEXT || process.cwd(), { + inlineOptions: require('./vue.config.js') +}) + +service.run('build', { + name: 'index', + watch: process.env.UNI_WATCH === 'true', + target: 'lib', + formats: process.env.UNI_WATCH === 'true' ? 'umd' : 'umd-min', + entry: './lib/' + process.env.UNI_PLATFORM + '/main.js' +}).catch(err => { + error(err) + process.exit(1) +}) diff --git a/build/vue.config.js b/build/vue.config.js new file mode 100644 index 000000000..190762d65 --- /dev/null +++ b/build/vue.config.js @@ -0,0 +1,37 @@ +const path = require('path') + +const resolve = dir => path.resolve(__dirname, '../', dir) + +const pkgPath = resolve('package.json') + +const webpackConfig = require('./webpack.config.js') + +module.exports = { + baseUrl: '/', + outputDir: resolve('./packages/uni-' + process.env.UNI_PLATFORM + '/dist'), + lintOnSave: true, // or error + runtimeCompiler: false, + transpileDependencies: [], + productionSourceMap: false, + configureWebpack: webpackConfig, + chainWebpack: config => { + config.devtool('source-map') + + config.module + .rule('eslint') + .include + .add(resolve('src')) + .add(resolve('lib/' + process.env.UNI_PLATFORM)) + .end() + .use('eslint-loader') + .loader(resolve('node_modules/eslint-loader')) + .options({ + fix: true, + configFile: pkgPath + }) + config.plugins.delete('hmr') // remove hot module reload + }, + css: { + extract: true + } +} diff --git a/build/webpack.config.js b/build/webpack.config.js new file mode 100644 index 000000000..36dd70491 --- /dev/null +++ b/build/webpack.config.js @@ -0,0 +1,48 @@ +const path = require('path') +const webpack = require('webpack') + +const resolve = dir => path.resolve(__dirname, '../', dir) + +const pkg = require('../package.json') + +module.exports = { + mode: 'production', + devtool: false, + externals: { + vue: { + commonjs: 'vue', + commonjs2: 'vue', + root: 'Vue' + }, + 'vue-router': { + commonjs: 'vue-router', + commonjs2: 'vue-router', + root: 'VueRouter' + } + }, + resolve: { + alias: { + 'uni-core': resolve('src/core'), + 'uni-view': resolve('src/core/view'), + 'uni-service': resolve('src/core/service'), + 'uni-shared': resolve('src/shared'), + 'uni-mixins': resolve('src/core/view/mixins'), + 'uni-helpers': resolve('src/core/helpers'), + 'uni-platform': resolve('src/platforms/' + process.env.UNI_PLATFORM) + } + }, + module: { + rules: [] + }, + plugins: [ + new webpack.DefinePlugin({ + __VERSION__: JSON.stringify(pkg.version), + __PLATFORM__: JSON.stringify(process.env.UNI_PLATFORM) + }), + new webpack.ProvidePlugin({ + 'console': [resolve('src/core/helpers/console'), 'default'], + 'UniViewJSBridge': [resolve('src/core/view/bridge')], + 'UniServiceJSBridge': [resolve('src/core/service/bridge')] + }) + ] +} diff --git a/build/webpack.config.test.js b/build/webpack.config.test.js new file mode 100644 index 000000000..0fbbb7457 --- /dev/null +++ b/build/webpack.config.test.js @@ -0,0 +1,47 @@ +const path = require('path') +const webpack = require('webpack') + +const resolve = dir => path.resolve(__dirname, '../', dir) + +const pkg = require('../package.json') + +let service = process.VUE_CLI_SERVICE +if (!service || process.env.VUE_CLI_API_MODE) { + const Service = require('@vue/cli-service') + service = new Service(process.env.VUE_CLI_CONTEXT || process.cwd()) + service.init(process.env.VUE_CLI_MODE || process.env.NODE_ENV) +} + +const config = service.resolveWebpackConfig() + +config.resolve.alias = { + '@': resolve('src'), + 'uni-core': resolve('src/core'), + 'uni-view': resolve('src/core/view'), + 'uni-service': resolve('src/core/service'), + 'uni-shared': resolve('src/shared'), + 'uni-mixins': resolve('src/core/view/mixins'), + 'uni-helpers': resolve('src/core/helpers'), + 'uni-platform': resolve('src/platforms/' + process.env.UNI_PLATFORM), + 'uni-components': resolve('src/core/view/components') +} + +const isEslintLoader = config.module.rules[config.module.rules.length - 1].enforce + +if (isEslintLoader) { + config.module.rules.splice(config.module.rules.length - 1, 1) +} else { + throw new Error('eslint-loader is undefined') +} + +config.plugins = config.plugins.concat([ + new webpack.DefinePlugin({ + __VERSION__: JSON.stringify(pkg.version), + __PLATFORM__: JSON.stringify(process.env.UNI_PLATFORM) + }), + new webpack.ProvidePlugin({ + 'UniViewJSBridge': [resolve('src/core/view/bridge')], + 'UniServiceJSBridge': [resolve('src/core/service/bridge')] + }) +]) +module.exports = config diff --git a/lib/h5/main.js b/lib/h5/main.js new file mode 100644 index 000000000..9e88e84d9 --- /dev/null +++ b/lib/h5/main.js @@ -0,0 +1,37 @@ +/** + * 1.导出全局对象(UniViewJSBridge,UniServiceJSBridge,uni,getApp,getCurrentPages) + * 2.引入 Vue 插件(uniVueServicePlugin,uniVueServicePlugin) + * 3.引入 Vue 组件 + */ +import Vue from 'vue' + +global.UniViewJSBridge = { + subscribeHandler: UniViewJSBridge.subscribeHandler +} + +global.UniServiceJSBridge = { + subscribeHandler: UniServiceJSBridge.subscribeHandler +} + +const { + default: uni, + getApp, + getCurrentPages +} = require('uni-service') + +global.uni = Object.assign(uni, require('uni-view').default) + +global.wx = global.uni + +global.getApp = getApp +global.getCurrentPages = getCurrentPages + +Vue.use(require('uni-service/plugins').default, { + routes: __uniRoutes +}) + +Vue.use(require('uni-view/plugins').default, { + routes: __uniRoutes +}) + +require('uni-view/components') diff --git a/package.json b/package.json new file mode 100644 index 000000000..f5990b591 --- /dev/null +++ b/package.json @@ -0,0 +1,79 @@ +{ + "name": "uniapp-js-framework", + "version": "0.0.1", + "scripts": { + "lint": "eslint --fix --config package.json --ext .js --ext .vue --ignore-path .eslintignore build src", + "dev:h5": "npm run lint && cross-env NODE_ENV=production UNI_WATCH=true UNI_PLATFORM=h5 node build/build.js", + "build:h5": "npm run lint && cross-env NODE_ENV=production UNI_WATCH=false UNI_PLATFORM=h5 node build/build.js", + "test:unit": "cross-env NODE_ENV=test UNI_PLATFORM=h5 mocha-webpack --require tests/unit/setup.js --webpack-config build/webpack.config.test.js tests/unit/**/*.spec.js" + }, + "dependencies": {}, + "devDependencies": { + "@vue/cli-plugin-babel": "^3.1.1", + "@vue/cli-plugin-eslint": "^3.1.4", + "@vue/cli-plugin-unit-mocha": "^3.1.1", + "@vue/cli-service": "^3.1.2", + "@vue/test-utils": "^1.0.0-beta.25", + "babel-eslint": "^10.0.1", + "babylon": "^6.18.0", + "chai": "^4.1.2", + "cross-env": "^5.2.0", + "eslint": "^5.5.0", + "eslint-config-standard": "^12.0.0", + "eslint-loader": "^2.1.0", + "eslint-plugin-import": "^2.14.0", + "eslint-plugin-node": "^7.0.1", + "eslint-plugin-promise": "^4.0.0", + "eslint-plugin-standard": "^4.0.0", + "eslint-plugin-vue": "^4.7.1", + "jsdom": "^13.0.0", + "jsdom-global": "^3.0.2", + "strip-json-comments": "^2.0.1", + "vue": "^2.5.17", + "vue-router": "^3.0.1", + "vue-template-compiler": "^2.5.17", + "webpack": "^4.18.0", + "webpack-bundle-analyzer": "^3.0.3", + "webpack-virtual-modules": "^0.1.10" + }, + "eslintConfig": { + "root": true, + "env": { + "node": true + }, + "extends": [ + "plugin:vue/recommended", + "standard" + ], + "globals": { + "getApp": true, + "getCurrentPages": true, + "plus": true, + "uni": true, + "Vue": true, + "wx": true, + "__uniConfig": true, + "__uniRoutes": true, + "UniViewJSBridge": true, + "UniServiceJSBridge": true, + "__PLATFORM__": true, + "__VERSION__": true + }, + "rules": { + "no-tabs": 0, + "standard/no-callback-literal": 0 + }, + "parserOptions": { + "parser": "babel-eslint" + } + }, + "browserslist": [ + "last 3 versions", + "Android >= 4.1", + "ios >= 8" + ], + "license": "ISC", + "main": "index.js", + "description": "", + "author": "" +} diff --git a/packages/uni-h5/LICENSE b/packages/uni-h5/LICENSE new file mode 100755 index 000000000..4e467aa91 --- /dev/null +++ b/packages/uni-h5/LICENSE @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) 2017-present, Yuxi (Evan) You + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/packages/uni-h5/dist/index.css b/packages/uni-h5/dist/index.css new file mode 100644 index 000000000..04569e752 --- /dev/null +++ b/packages/uni-h5/dist/index.css @@ -0,0 +1 @@ +uni-tabbar{display:block}uni-tabbar,uni-tabbar .uni-tabbar{box-sizing:border-box;position:fixed;left:0;bottom:0;width:100%;z-index:998}uni-tabbar .uni-tabbar{display:-webkit-box;display:-webkit-flex;display:flex}uni-tabbar .uni-tabbar~.uni-placeholder{width:100%;height:50px}uni-tabbar .uni-tabbar *{box-sizing:border-box}uni-tabbar .uni-tabbar__item{-webkit-flex-direction:column;flex-direction:column;-webkit-box-flex:1;-webkit-flex:1;flex:1;font-size:0;text-align:center;-webkit-tap-highlight-color:rgba(0,0,0,0)}uni-tabbar .uni-tabbar__bd,uni-tabbar .uni-tabbar__item{display:-webkit-box;display:-webkit-flex;display:flex;-webkit-box-pack:center;-webkit-justify-content:center;justify-content:center;-webkit-box-align:center;-webkit-align-items:center;align-items:center;-webkit-box-orient:vertical;-webkit-box-direction:normal}uni-tabbar .uni-tabbar__bd{position:relative;height:50px;-webkit-flex-direction:column;flex-direction:column}uni-tabbar .uni-tabbar__icon{position:relative;display:inline-block;margin-top:5px;width:27px;height:27px}uni-tabbar .uni-tabbar__icon img{width:100%;height:100%}uni-tabbar .uni-tabbar__label{position:relative;text-align:center;font-size:10px;line-height:1.8}uni-tabbar .uni-tabbar-border{position:absolute;left:0;top:0;width:100%;height:1px;-webkit-transform:scaleY(.5);transform:scaleY(.5)}uni-tabbar .uni-tabbar__reddot{position:absolute;top:6px;left:100%;width:12px;height:12px;display:inline-block;border-radius:50%;background-color:#f43530;color:#fff}uni-tabbar .uni-tabbar__badge{top:4px;border-radius:18px;min-width:8px;width:auto;height:auto;padding:.15em .5em;font-size:12px;line-height:1.2;white-space:nowrap}uni-toast{display:block;box-sizing:border-box}uni-toast .uni-toast-fixed{position:fixed;top:0;right:0;bottom:0;left:0;z-index:999}uni-toast .uni-sample-toast{position:fixed;z-index:999;top:50%;left:50%;-webkit-transform:translate(-50%,-50%);transform:translate(-50%,-50%);text-align:center;max-width:80%}uni-toast .uni-simple-toast__text{display:inline-block;vertical-align:middle;color:#fff;background-color:rgba(17,17,17,.7);padding:10px 20px;border-radius:5px;font-size:13px;text-align:center;max-width:100%;word-break:break-all;white-space:normal}uni-toast .uni-toast{position:fixed;z-index:999;width:8em;top:50%;left:50%;-webkit-transform:translate(-50%,-50%);transform:translate(-50%,-50%);background:rgba(17,17,17,.7);text-align:center;border-radius:5px;color:#fff}uni-toast .uni-toast *{box-sizing:border-box}uni-toast .uni-toast__icon{margin:20px 0 0;width:38px;height:38px;vertical-align:baseline}uni-toast .uni-icon_toast{margin:15px 0 0}uni-toast .uni-icon_toast.uni-icon-success-no-circle:before{color:#fff;font-size:55px}uni-toast .uni-icon_toast.uni-loading{margin:20px 0 0;width:38px;height:38px;vertical-align:baseline}uni-toast .uni-toast__content{margin:0 0 15px}uni-modal{position:fixed;top:0;right:0;bottom:0;left:0;z-index:999;display:block;box-sizing:border-box}uni-modal .uni-modal{position:fixed;z-index:999;width:80%;max-width:300px;top:50%;left:50%;-webkit-transform:translate(-50%,-50%);transform:translate(-50%,-50%);background-color:#fff;text-align:center;border-radius:3px;overflow:hidden}uni-modal .uni-modal *{box-sizing:border-box}uni-modal .uni-modal__hd{padding:1.3em 1.6em 0;line-height:1}uni-modal .uni-modal__title{font-weight:400;font-size:18px}uni-modal .uni-modal__bd{padding:1.3em 1.6em 1.3em;min-height:40px;font-size:15px;line-height:1.4;word-wrap:break-word;word-break:break-all;color:#999}uni-modal .uni-modal__ft{position:relative;line-height:48px;font-size:18px;display:-webkit-box;display:-webkit-flex;display:flex}uni-modal .uni-modal__ft:after{content:" ";position:absolute;left:0;top:0;right:0;height:1px;border-top:1px solid #d5d5d6;color:#d5d5d6;-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:scaleY(.5);transform:scaleY(.5)}uni-modal .uni-modal__btn{display:block;-webkit-box-flex:1;-webkit-flex:1;flex:1;color:#3cc51f;text-decoration:none;-webkit-tap-highlight-color:rgba(0,0,0,0);position:relative}uni-modal .uni-modal__btn:active{background-color:#eee}uni-modal .uni-modal__btn:after{content:" ";position:absolute;left:0;top:0;width:1px;bottom:0;border-left:1px solid #d5d5d6;color:#d5d5d6;-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:scaleX(.5);transform:scaleX(.5)}uni-modal .uni-modal__btn:first-child:after{display:none}uni-modal .uni-modal__btn_default{color:#353535}uni-modal .uni-modal__btn_primary{color:#007aff}uni-picker{box-sizing:border-box}uni-picker .uni-picker.uni-picker_toggle{-webkit-transform:translate(0);transform:translate(0)}uni-picker .uni-picker *{box-sizing:border-box}uni-picker .uni-picker{position:fixed;left:0;bottom:0;-webkit-transform:translateY(100%);transform:translateY(100%);-webkit-backface-visibility:hidden;backface-visibility:hidden;z-index:999;width:100%;background-color:#efeff4;-webkit-transition:-webkit-transform .3s;transition:-webkit-transform .3s;transition:transform .3s,-webkit-transform .3s;transition:transform .3s}uni-picker .uni-picker-content{position:relative;display:block;width:100%;height:238px;background-color:#fff}uni-picker .uni-picker-item{padding:0;height:34px;line-height:34px;text-align:center;color:#000;text-overflow:ellipsis;white-space:nowrap;overflow:hidden}uni-picker .uni-picker-header{display:block;position:relative;text-align:center;width:100%;height:45px;background-color:#fff}uni-picker .uni-picker-header:after{content:"";position:absolute;left:0;bottom:0;right:0;height:1px;clear:both;border-bottom:1px solid #e5e5e5;color:#e5e5e5;-webkit-transform-origin:0 100%;transform-origin:0 100%;-webkit-transform:scaleY(.5);transform:scaleY(.5)}uni-picker .uni-picker-action{display:block;max-width:50%;top:0;height:100%;box-sizing:border-box;padding:0 14px;font-size:17px;line-height:45px;overflow:hidden}uni-picker .uni-picker-action.uni-picker-action-cancel{float:left;color:#888}uni-picker .uni-picker-action.uni-picker-action-confirm{float:right;color:#007aff}uni-actionsheet{display:block;box-sizing:border-box}uni-actionsheet .uni-actionsheet.uni-actionsheet_toggle{-webkit-transform:translate(0);transform:translate(0)}uni-actionsheet .uni-actionsheet *{box-sizing:border-box}uni-actionsheet .uni-actionsheet{position:fixed;left:0;bottom:0;-webkit-transform:translateY(100%);transform:translateY(100%);-webkit-backface-visibility:hidden;backface-visibility:hidden;z-index:999;width:100%;background-color:#efeff4;-webkit-transition:-webkit-transform .3s;transition:-webkit-transform .3s;transition:transform .3s;transition:transform .3s,-webkit-transform .3s}uni-actionsheet .uni-actionsheet__menu{background-color:#fcfcfd}uni-actionsheet .uni-actionsheet__action{margin-top:6px;background-color:#fcfcfd}uni-actionsheet .uni-actionsheet__cell{position:relative;padding:10px 0;text-align:center;font-size:18px}uni-actionsheet .uni-actionsheet__cell:before{content:" ";position:absolute;left:0;top:0;right:0;height:1px;border-top:1px solid #e5e5e5;color:#e5e5e5;-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:scaleY(.5);transform:scaleY(.5)}uni-actionsheet .uni-actionsheet__cell:active{background-color:#ececec}uni-actionsheet .uni-actionsheet__cell:first-child:before{display:none}*{margin:0}@font-face{font-weight:400;font-style:normal;font-family:uni;src:url("data:application/octet-stream;base64,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") format("truetype")}@font-face{font-weight:400;font-style:normal;font-family:unibtn;src:url("data:application/octet-stream;base64,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") format("truetype")}body,html{-webkit-user-select:none;user-select:none;width:100%;height:100%}body{overflow-x:hidden}[class*=" uni-icon-"],[class^=uni-icon-]{display:inline-block;vertical-align:middle;font:normal normal normal 14px/1 uni;font-size:inherit;text-rendering:auto;-webkit-font-smoothing:antialiased}[class*=" uni-btn-icon"],[class^=uni-btn-icon]{display:inline-block;font:normal normal normal 14px/1 unibtn;font-size:inherit;text-rendering:auto;-webkit-font-smoothing:antialiased}[class*=" uni-btn-icon"]:before,[class^=uni-btn-icon]:before{margin:0;box-sizing:border-box}.uni-icon-success-no-circle:before{content:"\EA08"}.uni-loading,uni-button[loading]:before{background:rgba(0,0,0,0) url("data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxMjAiIGhlaWdodD0iMTIwIiB2aWV3Qm94PSIwIDAgMTAwIDEwMCI+PHBhdGggZmlsbD0ibm9uZSIgZD0iTTAgMGgxMDB2MTAwSDB6Ii8+PHJlY3Qgd2lkdGg9IjciIGhlaWdodD0iMjAiIHg9IjQ2LjUiIHk9IjQwIiBmaWxsPSIjRTlFOUU5IiByeD0iNSIgcnk9IjUiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDAgLTMwKSIvPjxyZWN0IHdpZHRoPSI3IiBoZWlnaHQ9IjIwIiB4PSI0Ni41IiB5PSI0MCIgZmlsbD0iIzk4OTY5NyIgcng9IjUiIHJ5PSI1IiB0cmFuc2Zvcm09InJvdGF0ZSgzMCAxMDUuOTggNjUpIi8+PHJlY3Qgd2lkdGg9IjciIGhlaWdodD0iMjAiIHg9IjQ2LjUiIHk9IjQwIiBmaWxsPSIjOUI5OTlBIiByeD0iNSIgcnk9IjUiIHRyYW5zZm9ybT0icm90YXRlKDYwIDc1Ljk4IDY1KSIvPjxyZWN0IHdpZHRoPSI3IiBoZWlnaHQ9IjIwIiB4PSI0Ni41IiB5PSI0MCIgZmlsbD0iI0EzQTFBMiIgcng9IjUiIHJ5PSI1IiB0cmFuc2Zvcm09InJvdGF0ZSg5MCA2NSA2NSkiLz48cmVjdCB3aWR0aD0iNyIgaGVpZ2h0PSIyMCIgeD0iNDYuNSIgeT0iNDAiIGZpbGw9IiNBQkE5QUEiIHJ4PSI1IiByeT0iNSIgdHJhbnNmb3JtPSJyb3RhdGUoMTIwIDU4LjY2IDY1KSIvPjxyZWN0IHdpZHRoPSI3IiBoZWlnaHQ9IjIwIiB4PSI0Ni41IiB5PSI0MCIgZmlsbD0iI0IyQjJCMiIgcng9IjUiIHJ5PSI1IiB0cmFuc2Zvcm09InJvdGF0ZSgxNTAgNTQuMDIgNjUpIi8+PHJlY3Qgd2lkdGg9IjciIGhlaWdodD0iMjAiIHg9IjQ2LjUiIHk9IjQwIiBmaWxsPSIjQkFCOEI5IiByeD0iNSIgcnk9IjUiIHRyYW5zZm9ybT0icm90YXRlKDE4MCA1MCA2NSkiLz48cmVjdCB3aWR0aD0iNyIgaGVpZ2h0PSIyMCIgeD0iNDYuNSIgeT0iNDAiIGZpbGw9IiNDMkMwQzEiIHJ4PSI1IiByeT0iNSIgdHJhbnNmb3JtPSJyb3RhdGUoLTE1MCA0NS45OCA2NSkiLz48cmVjdCB3aWR0aD0iNyIgaGVpZ2h0PSIyMCIgeD0iNDYuNSIgeT0iNDAiIGZpbGw9IiNDQkNCQ0IiIHJ4PSI1IiByeT0iNSIgdHJhbnNmb3JtPSJyb3RhdGUoLTEyMCA0MS4zNCA2NSkiLz48cmVjdCB3aWR0aD0iNyIgaGVpZ2h0PSIyMCIgeD0iNDYuNSIgeT0iNDAiIGZpbGw9IiNEMkQyRDIiIHJ4PSI1IiByeT0iNSIgdHJhbnNmb3JtPSJyb3RhdGUoLTkwIDM1IDY1KSIvPjxyZWN0IHdpZHRoPSI3IiBoZWlnaHQ9IjIwIiB4PSI0Ni41IiB5PSI0MCIgZmlsbD0iI0RBREFEQSIgcng9IjUiIHJ5PSI1IiB0cmFuc2Zvcm09InJvdGF0ZSgtNjAgMjQuMDIgNjUpIi8+PHJlY3Qgd2lkdGg9IjciIGhlaWdodD0iMjAiIHg9IjQ2LjUiIHk9IjQwIiBmaWxsPSIjRTJFMkUyIiByeD0iNSIgcnk9IjUiIHRyYW5zZm9ybT0icm90YXRlKC0zMCAtNS45OCA2NSkiLz48L3N2Zz4=") no-repeat}.uni-loading{width:20px;height:20px;display:inline-block;vertical-align:middle;-webkit-animation:uni-loading 1s steps(12) infinite;animation:uni-loading 1s steps(12) infinite;background-size:100%}@-webkit-keyframes uni-loading{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}@keyframes uni-loading{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}.uni-mask{position:fixed;z-index:999;top:0;right:0;left:0;bottom:0;background:rgba(0,0,0,.6)}.uni-fade-enter-active,.uni-fade-leave-active{-webkit-transition-duration:.25s;transition-duration:.25s;-webkit-transition-property:opacity;transition-property:opacity;-webkit-transition-timing-function:ease;transition-timing-function:ease}.uni-fade-enter,.uni-fade-leave-active{opacity:0}uni-app{display:block;box-sizing:border-box;width:100%;height:100%}.uni-async-error{position:absolute;left:0;right:0;top:0;bottom:0;color:#999;padding:100px 0;text-align:center}.uni-async-loading{width:100%;padding:50px;text-align:center}.uni-async-loading .uni-loading{width:30px;height:30px}uni-page-head{display:block;box-sizing:border-box}uni-page-head .uni-page-head{position:fixed;left:0;width:100%;height:44px;padding:12px 5px;display:-webkit-box;display:-webkit-flex;display:flex;overflow:hidden;-webkit-box-pack:justify;-webkit-justify-content:space-between;justify-content:space-between;box-sizing:border-box;z-index:998;color:#fff;background-color:#000;-webkit-transition-property:all;transition-property:all}uni-page-head .uni-page-head.uni-page-head-transparent .uni-page-head-ft>div,uni-page-head .uni-page-head.uni-page-head-transparent .uni-page-head-hd>div{display:-webkit-box;display:-webkit-flex;display:flex;-webkit-box-align:center;-webkit-align-items:center;align-items:center;width:32px;height:32px;background:#999;border-radius:50%}uni-page-head .uni-page-head.uni-page-head-transparent .uni-page-head-ft>div{-webkit-box-pack:center;-webkit-justify-content:center;justify-content:center}uni-page-head .uni-page-head~.uni-placeholder{width:100%;height:44px}uni-page-head .uni-page-head *{box-sizing:border-box}uni-page-head .uni-page-head-hd{display:-webkit-box;display:-webkit-flex;display:flex;-webkit-box-align:center;-webkit-align-items:center;align-items:center;font-size:16px}uni-page-head .uni-page-head-bd{position:absolute;left:70px;right:70px;min-width:0;-webkit-user-select:auto;user-select:auto}uni-page-head .uni-page-head-ft{display:-webkit-box;display:-webkit-flex;display:flex;-webkit-box-align:center;-webkit-align-items:center;align-items:center;-webkit-box-orient:horizontal;-webkit-box-direction:reverse;-webkit-flex-direction:row-reverse;flex-direction:row-reverse;font-size:13px}uni-page-head .uni-page-head__title{font-weight:700;font-size:16px;text-align:center;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}uni-page-head .uni-page-head__title .uni-loading{width:16px;height:16px;margin-top:-3px}uni-page-wrapper{display:block;height:100%;position:relative}uni-page-head~uni-page-wrapper{height:calc(100% - 44px)}.uni-app--showtabbar uni-page-wrapper{display:block;height:calc(100% - 50px)}.uni-app--showtabbar uni-page-wrapper:after{content:"";display:block;width:100%;height:50px}.uni-app--showtabbar uni-page-head~uni-page-wrapper{height:calc(100% - 94px)}uni-page-body,uni-page-refresh{display:block;box-sizing:border-box;width:100%}uni-page-refresh{position:absolute;top:0;height:40px}uni-page-refresh .uni-page-refresh{position:absolute;top:-45px;left:50%;-webkit-transform:translate3d(-50%,0,0);transform:translate3d(-50%,0,0);background:#fff;box-shadow:0 1px 6px rgba(0,0,0,.117647),0 1px 4px rgba(0,0,0,.117647);display:none;z-index:997}uni-page-refresh .uni-page-refresh,uni-page-refresh .uni-page-refresh-inner{width:40px;height:40px;-webkit-box-pack:center;-webkit-justify-content:center;justify-content:center;-webkit-box-align:center;-webkit-align-items:center;align-items:center;border-radius:50%}uni-page-refresh .uni-page-refresh-inner{line-height:0}uni-page-refresh.uni-page-refresh--aborting .uni-page-refresh,uni-page-refresh.uni-page-refresh--pulling .uni-page-refresh,uni-page-refresh.uni-page-refresh--reached .uni-page-refresh,uni-page-refresh.uni-page-refresh--refreshing .uni-page-refresh,uni-page-refresh.uni-page-refresh--restoring .uni-page-refresh,uni-page-refresh .uni-page-refresh-inner{display:-webkit-box;display:-webkit-flex;display:flex}uni-page-refresh.uni-page-refresh--aborting .uni-page-refresh__spinner,uni-page-refresh.uni-page-refresh--pulling .uni-page-refresh__spinner,uni-page-refresh.uni-page-refresh--reached .uni-page-refresh__spinner,uni-page-refresh.uni-page-refresh--refreshing .uni-page-refresh__icon,uni-page-refresh.uni-page-refresh--restoring .uni-page-refresh__icon{display:none}uni-page-refresh.uni-page-refresh--refreshing .uni-page-refresh__spinner{-webkit-transform-origin:center center;transform-origin:center center;-webkit-animation:uni-page-refresh-rotate 2s linear infinite;animation:uni-page-refresh-rotate 2s linear infinite}uni-page-refresh.uni-page-refresh--refreshing .uni-page-refresh__path{stroke-dasharray:1,200;stroke-dashoffset:0;stroke-linecap:round;-webkit-animation:uni-page-refresh-dash 1.5s ease-in-out infinite,uni-page-refresh-colorful 6s ease-in-out infinite;animation:uni-page-refresh-dash 1.5s ease-in-out infinite,uni-page-refresh-colorful 6s ease-in-out infinite}@-webkit-keyframes uni-page-refresh-rotate{to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}@keyframes uni-page-refresh-rotate{to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}@-webkit-keyframes uni-page-refresh-dash{0%{stroke-dasharray:1,200;stroke-dashoffset:0}50%{stroke-dasharray:89,200;stroke-dashoffset:-35px}to{stroke-dasharray:89,200;stroke-dashoffset:-124px}}@keyframes uni-page-refresh-dash{0%{stroke-dasharray:1,200;stroke-dashoffset:0}50%{stroke-dasharray:89,200;stroke-dashoffset:-35px}to{stroke-dasharray:89,200;stroke-dashoffset:-124px}}uni-page{display:block;width:100%;height:100%}.uni-system-choose-location,.uni-system-open-location{display:block;position:fixed;left:0;top:0;width:100%;height:100%;background:#f8f8f8}.map-content{position:absolute;left:0;top:44px;width:100%;bottom:0;overflow:hidden}.map-content>iframe{width:100%;height:100%;border:none}.actTonav{position:absolute;right:16px;bottom:56px;width:60px;height:60px;border-radius:60px}.uni-system-preview-image{display:block;position:fixed;left:0;top:0;width:100%;height:100%;background:#000}.uni-swiper{position:absolute;left:0;top:0;width:100%;height:100%}.uni-preview-image{position:absolute;left:50%;top:50%;-webkit-transform:translate(-50%,-50%);transform:translate(-50%,-50%);max-height:100%;max-width:100%}div{box-sizing:border-box}.system-header{position:relative;width:100%;height:44px;color:#fff;background-color:#000;padding:0 44px;text-align:center;line-height:44px;font-size:16px}.header-text{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.header-btn{position:absolute;width:44px;height:44px;top:0}.header-btn-img{fill:#fff;width:40%;height:40%;margin:30%}.header-back{left:0}.header-confirm{right:0}uni-button{position:relative;display:block;margin-left:auto;margin-right:auto;padding-left:14px;padding-right:14px;box-sizing:border-box;font-size:18px;text-align:center;text-decoration:none;line-height:2.55555556;border-radius:5px;-webkit-tap-highlight-color:transparent;overflow:hidden;color:#000;background-color:#f8f8f8}uni-button[hidden]{display:none!important}uni-button:after{content:" ";width:200%;height:200%;position:absolute;top:0;left:0;border:1px solid rgba(0,0,0,.2);-webkit-transform:scale(.5);transform:scale(.5);-webkit-transform-origin:0 0;transform-origin:0 0;box-sizing:border-box;border-radius:10px}uni-button[native]{padding-left:0;padding-right:0}uni-button[native] .uni-button-cover-view-wrapper{border:inherit;border-color:inherit;border-radius:inherit;background-color:inherit}uni-button[native] .uni-button-cover-view-inner{padding-left:14px;padding-right:14px}uni-button uni-cover-view{line-height:inherit;white-space:inherit}uni-button[type=default]{color:#000;background-color:#f8f8f8}uni-button[type=primary]{color:#fff;background-color:#007aff}uni-button[type=warn]{color:#fff;background-color:#e64340}uni-button[disabled]{color:hsla(0,0%,100%,.6)}uni-button[disabled]:not([type]),uni-button[disabled][type=default]{color:rgba(0,0,0,.3);background-color:#f7f7f7}uni-button[disabled][type=primary]{background-color:rgba(0,122,255,.6)}uni-button[disabled][type=warn]{background-color:#ec8b89}uni-button[type=primary][plain]{color:#007aff;border:1px solid #007aff;background-color:rgba(0,0,0,0)}uni-button[type=primary][plain][disabled]{color:rgba(0,0,0,.2);border-color:rgba(0,0,0,.2)}uni-button[type=primary][plain]:after{border-width:0}uni-button[type=default][plain]{color:#353535;border:1px solid #353535;background-color:rgba(0,0,0,0)}uni-button[type=default][plain][disabled]{color:rgba(0,0,0,.2);border-color:rgba(0,0,0,.2)}uni-button[type=default][plain]:after{border-width:0}uni-button[plain]{color:#353535;border:1px solid #353535;background-color:rgba(0,0,0,0)}uni-button[plain][disabled]{color:rgba(0,0,0,.2);border-color:rgba(0,0,0,.2)}uni-button[plain]:after{border-width:0}uni-button[plain][native] .uni-button-cover-view-inner{padding:0}uni-button[type=warn][plain]{color:#e64340;border:1px solid #e64340;background-color:rgba(0,0,0,0)}uni-button[type=warn][plain][disabled]{color:rgba(0,0,0,.2);border-color:rgba(0,0,0,.2)}uni-button[type=warn][plain]:after{border-width:0}uni-button[size=mini]{display:inline-block;line-height:2.3;font-size:13px;padding:0 1.34em}uni-button[size=mini][native]{padding:0}uni-button[size=mini][native] .uni-button-cover-view-inner{padding:0 1.34em}uni-button[loading]:before{content:" ";display:inline-block;width:18px;height:18px;vertical-align:middle;-webkit-animation:uni-loading 1s steps(12) infinite;animation:uni-loading 1s steps(12) infinite;background-size:100%}uni-button[loading][type=primary]{color:hsla(0,0%,100%,.6);background-color:#0062cc}uni-button[loading][type=primary][plain]{color:#007aff;background-color:rgba(0,0,0,0)}uni-button[loading][type=default]{color:rgba(0,0,0,.6);background-color:#dedede}uni-button[loading][type=default][plain]{color:#353535;background-color:rgba(0,0,0,0)}uni-button[loading][type=warn]{color:hsla(0,0%,100%,.6);background-color:#ce3c39}uni-button[loading][type=warn][plain]{color:#e64340;background-color:rgba(0,0,0,0)}uni-button[loading][native]:before{content:none}.button-hover{color:rgba(0,0,0,.6);background-color:#dedede}.button-hover[plain]{color:rgba(53,53,53,.6);border-color:rgba(53,53,53,.6);background-color:rgba(0,0,0,0)}.button-hover[type=primary]{color:hsla(0,0%,100%,.6);background-color:#0062cc}.button-hover[type=primary][plain]{color:rgba(26,173,25,.6);border-color:rgba(26,173,25,.6);background-color:rgba(0,0,0,0)}.button-hover[type=default]{color:rgba(0,0,0,.6);background-color:#dedede}.button-hover[type=default][plain]{color:rgba(53,53,53,.6);border-color:rgba(53,53,53,.6);background-color:rgba(0,0,0,0)}.button-hover[type=warn]{color:hsla(0,0%,100%,.6);background-color:#ce3c39}.button-hover[type=warn][plain]{color:rgba(230,67,64,.6);border-color:rgba(230,67,64,.6);background-color:rgba(0,0,0,0)}uni-checkbox-group[hidden]{display:none}uni-checkbox{-webkit-tap-highlight-color:transparent;display:inline-block}uni-checkbox[hidden]{display:none}uni-checkbox .uni-checkbox-wrapper{display:-webkit-inline-flex;display:-webkit-inline-box;display:inline-flex;-webkit-align-items:center;-webkit-box-align:center;align-items:center;vertical-align:middle}uni-checkbox .uni-checkbox-input{margin-right:5px;-webkit-appearance:none;appearance:none;outline:0;border:1px solid #d1d1d1;background-color:#fff;border-radius:3px;width:22px;height:22px;position:relative}uni-checkbox .uni-checkbox-input.uni-checkbox-input-checked{color:#007aff}uni-checkbox .uni-checkbox-input.uni-checkbox-input-checked:before{font:normal normal normal 14px/1 uni;content:"\EA08";font-size:22px;position:absolute;top:50%;left:50%;transform:translate(-50%,-48%) scale(.73);-webkit-transform:translate(-50%,-48%) scale(.73)}uni-checkbox .uni-checkbox-input.uni-checkbox-input-disabled{background-color:#e1e1e1}uni-checkbox .uni-checkbox-input.uni-checkbox-input-disabled:before{color:#adadad}uni-checkbox-group{display:block}uni-image{width:320px;height:240px;display:inline-block;overflow:hidden}uni-image[hidden]{display:none}uni-image>div{width:100%;height:100%}uni-image>img{-webkit-touch-callout:none;-webkit-user-select:none;-moz-user-select:none;display:block}uni-image>.uni-image-will-change{will-change:transform}uni-input{display:block;height:1.4rem;text-overflow:clip;overflow:hidden;white-space:nowrap}uni-input,uni-input input{font-family:UICTFontTextStyleBody;min-height:1.4rem}uni-input input{position:relative;border:none;height:inherit;width:100%;font-size:inherit;font-weight:inherit;color:inherit;background:rgba(0,0,0,0);display:inherit;padding:0;margin:0;outline:none;vertical-align:middle;text-align:inherit;overflow:inherit;white-space:inherit;text-overflow:inherit;-webkit-tap-highlight-color:transparent;z-index:2}uni-input[hidden]{display:none}uni-input div{position:relative;min-height:1.4rem;text-overflow:inherit;border:none;height:inherit;width:inherit;font-size:inherit;font-weight:inherit;font-family:UICTFontTextStyleBody;color:inherit;background:inherit;padding:0;margin:0;outline:none;text-align:inherit;-webkit-tap-highlight-color:transparent}uni-input div[type=password] div{color:#000}uni-input div div{position:absolute;left:0;top:0;width:100%;height:100%;line-height:100%;height:inherit;min-height:1.4rem;white-space:pre;text-align:inherit;overflow:hidden;vertical-align:middle;z-index:1}uni-input ul{position:fixed;left:0;right:0;z-index:999999;padding:0;background-color:#fff;border:.5px solid #ccc;max-height:204px;min-height:51px;overflow:auto}uni-input ul li{display:block;padding:10px;position:relative;padding:10px 0;border-bottom:.5px solid #ccc;margin:0 15px}uni-input ul li:last-child{border-bottom:none}uni-input ul li .title{font-weight:700;font-size:18px;margin-right:50px}uni-input ul li .content{font-size:12px;color:#ccc;margin-right:50px}uni-input ul li .del{position:absolute;width:50px;height:50px;line-height:50px;top:50%;right:0;margin-top:-25px;text-align:center}.input-placeholder{color:grey}input[type=search]::-webkit-search-cancel-button{display:none}input::-webkit-inner-spin-button,input::-webkit-outer-spin-button{-webkit-appearance:none;margin:0}input[type=number]{-moz-appearance:textfield}.navigator-hover{background-color:rgba(0,0,0,.1);opacity:.7}uni-navigator{height:auto;width:auto;display:block}uni-navigator[hidden]{display:none}uni-picker-view-column{-webkit-flex:1;-webkit-box-flex:1;flex:1;position:relative;height:100%;overflow:hidden}.uni-picker__group{height:100%}.uni-picker__mask{transform:translateZ(0);-webkit-transform:translateZ(0);top:0;height:100%;margin:0 auto;background:-webkit-linear-gradient(top,hsla(0,0%,100%,.95),hsla(0,0%,100%,.6)),-webkit-linear-gradient(bottom,hsla(0,0%,100%,.95),hsla(0,0%,100%,.6));background:linear-gradient(180deg,hsla(0,0%,100%,.95),hsla(0,0%,100%,.6)),linear-gradient(0deg,hsla(0,0%,100%,.95),hsla(0,0%,100%,.6));background-position:top,bottom;background-size:100% 102px;background-repeat:no-repeat}.uni-picker__indicator{height:34px;top:50%;-webkit-transform:translateY(-50%);transform:translateY(-50%)}.uni-picker__indicator,.uni-picker__mask{position:absolute;left:0;width:100%;z-index:3;pointer-events:none}.uni-picker__content{position:absolute;top:0;left:0;width:100%;will-change:transform;padding:102px 0}.uni-picker__content>*{height:34px;overflow:hidden}.uni-picker__indicator:before{top:0;border-top:1px solid #e5e5e5;-webkit-transform-origin:0 0;transform-origin:0 0;-webkit-transform:scaleY(.5);transform:scaleY(.5)}.uni-picker__indicator:after{bottom:0;border-bottom:1px solid #e5e5e5;-webkit-transform-origin:0 100%;transform-origin:0 100%;-webkit-transform:scaleY(.5);transform:scaleY(.5)}.uni-picker__indicator:after,.uni-picker__indicator:before{content:" ";position:absolute;left:0;right:0;height:1px;color:#e5e5e5}uni-picker-view{display:block}uni-picker-view .uni-picker-view-wrapper{display:-webkit-box;display:-webkit-flex;display:flex;position:relative;overflow:hidden;height:100%}uni-picker-view[hidden]{display:none}uni-picker{display:block}uni-progress{display:-webkit-flex;display:-webkit-box;display:flex;-webkit-align-items:center;-webkit-box-align:center;align-items:center}uni-progress[hidden]{display:none}.uni-progress-bar{-webkit-flex:1;-webkit-box-flex:1;flex:1}.uni-progress-inner-bar{width:0;height:100%}.uni-progress-info{margin-top:0;margin-bottom:0;min-width:2em;margin-left:15px;font-size:16px}uni-radio-group[hidden]{display:none}uni-radio{-webkit-tap-highlight-color:transparent;display:inline-block}uni-radio[hidden]{display:none}uni-radio .uni-radio-wrapper{display:-webkit-inline-flex;display:-webkit-inline-box;display:inline-flex;-webkit-align-items:center;-webkit-box-align:center;align-items:center;vertical-align:middle}uni-radio .uni-radio-input{-webkit-appearance:none;appearance:none;margin-right:5px;outline:0;border:1px solid #d1d1d1;background-color:#fff;border-radius:50%;width:22px;height:22px;position:relative}uni-radio .uni-radio-input.uni-radio-input-checked{background-color:#007aff;border-color:#007aff}uni-radio .uni-radio-input.uni-radio-input-checked:before{font:normal normal normal 14px/1 uni;content:"\EA08";color:#fff;font-size:18px;position:absolute;top:50%;left:50%;transform:translate(-50%,-48%) scale(.73);-webkit-transform:translate(-50%,-48%) scale(.73)}uni-radio .uni-radio-input.uni-radio-input-disabled{background-color:#e1e1e1;border-color:#d1d1d1}uni-radio .uni-radio-input.uni-radio-input-disabled:before{color:#adadad}uni-radio-group{display:block}uni-scroll-view{display:block;width:100%}uni-scroll-view[hidden]{display:none}.uni-scroll-view{position:relative;-webkit-overflow-scrolling:touch;width:100%;height:100%;max-height:inherit}uni-slider{margin:10px 18px;padding:0;display:block}uni-slider[hidden]{display:none}uni-slider .uni-slider-wrapper{display:-webkit-flex;display:-webkit-box;display:flex;-webkit-align-items:center;-webkit-box-align:center;align-items:center;min-height:16px}uni-slider .uni-slider-tap-area{-webkit-flex:1;-webkit-box-flex:1;flex:1;padding:8px 0}uni-slider .uni-slider-handle-wrapper{position:relative;height:2px;border-radius:5px;background-color:#e9e9e9;cursor:pointer;-webkit-tap-highlight-color:transparent}uni-slider .uni-slider-handle-wrapper,uni-slider .uni-slider-track{-webkit-transition:background-color .3s ease;transition:background-color .3s ease}uni-slider .uni-slider-track{height:100%;border-radius:6px;background-color:#007aff}uni-slider .uni-slider-handle,uni-slider .uni-slider-thumb{position:absolute;left:50%;top:50%;cursor:pointer;border-radius:50%;-webkit-transition:border-color .3s ease;transition:border-color .3s ease}uni-slider .uni-slider-handle{width:28px;height:28px;margin-top:-14px;margin-left:-14px;background-color:rgba(0,0,0,0);z-index:3}uni-slider .uni-slider-thumb{z-index:2;box-shadow:0 0 4px rgba(0,0,0,.2)}uni-slider .uni-slider-step{position:absolute;width:100%;height:2px;background:rgba(0,0,0,0);z-index:1}uni-slider .uni-slider-value{color:#888;font-size:14px;margin-left:1em}uni-slider .uni-slider-disabled .uni-slider-track{background-color:#ccc}uni-slider .uni-slider-disabled .uni-slider-thumb{background-color:#fff;border-color:#ccc}uni-swiper-item{display:block;overflow:hidden;will-change:transform;position:absolute;width:100%;height:100%}uni-swiper-item[hidden]{display:none}uni-swiper{display:block;height:150px}uni-swiper[hidden]{display:none}uni-swiper .uni-swiper-wrapper{overflow:hidden;position:relative;width:100%;height:100%;-webkit-transform:translateZ(0);transform:translateZ(0)}uni-swiper .uni-swiper-slides{position:absolute;left:0;top:0;right:0;bottom:0}uni-swiper .uni-swiper-slide-frame{position:absolute;left:0;top:0;width:100%;height:100%;will-change:transform}uni-swiper .uni-swiper-dots{position:absolute;font-size:0}uni-swiper .uni-swiper-dots-horizontal{left:50%;bottom:10px;text-align:center;white-space:nowrap;-webkit-transform:translate(-50%);transform:translate(-50%)}uni-swiper .uni-swiper-dots-horizontal .uni-swiper-dot{margin-right:8px}uni-swiper .uni-swiper-dots-horizontal .uni-swiper-dot:last-child{margin-right:0}uni-swiper .uni-swiper-dots-vertical{right:10px;top:50%;text-align:right;-webkit-transform:translateY(-50%);transform:translateY(-50%)}uni-swiper .uni-swiper-dots-vertical .uni-swiper-dot{display:block;margin-bottom:9px}uni-swiper .uni-swiper-dots-vertical .uni-swiper-dot:last-child{margin-bottom:0}uni-swiper .uni-swiper-dot{display:inline-block;width:8px;height:8px;cursor:pointer;-webkit-transition-property:background-color;transition-property:background-color;-webkit-transition-timing-function:ease;transition-timing-function:ease;background:rgba(0,0,0,.3);border-radius:50%}uni-swiper .uni-swiper-dot-active{background-color:#000}uni-switch{-webkit-tap-highlight-color:transparent;display:inline-block}uni-switch[hidden]{display:none}uni-switch .uni-switch-wrapper{display:-webkit-inline-flex;display:-webkit-inline-box;display:inline-flex;-webkit-align-items:center;-webkit-box-align:center;align-items:center;vertical-align:middle}uni-switch .uni-switch-input{-webkit-appearance:none;appearance:none;position:relative;width:52px;height:32px;margin-right:5px;border:1px solid #dfdfdf;outline:0;border-radius:16px;box-sizing:border-box;background-color:#dfdfdf;-webkit-transition:background-color .1s,border .1s;transition:background-color .1s,border .1s}uni-switch .uni-switch-input:before{width:50px;background-color:#fdfdfd}uni-switch .uni-switch-input:after,uni-switch .uni-switch-input:before{content:" ";position:absolute;top:0;left:0;height:30px;border-radius:15px;transition:-webkit-transform .3s;-webkit-transition:-webkit-transform .3s;transition:transform .3s;transition:transform .3s,-webkit-transform .3s}uni-switch .uni-switch-input:after{width:30px;background-color:#fff;box-shadow:0 1px 3px rgba(0,0,0,.4)}uni-switch .uni-switch-input.uni-switch-input-checked{border-color:#007aff;background-color:#007aff}uni-switch .uni-switch-input.uni-switch-input-checked:before{-webkit-transform:scale(0);transform:scale(0)}uni-switch .uni-switch-input.uni-switch-input-checked:after{-webkit-transform:translateX(20px);transform:translateX(20px)}uni-switch .uni-checkbox-input{margin-right:5px;-webkit-appearance:none;appearance:none;outline:0;border:1px solid #d1d1d1;background-color:#fff;border-radius:3px;width:22px;height:22px;position:relative;color:#007aff}uni-switch .uni-checkbox-input.uni-checkbox-input-checked:before{font:normal normal normal 14px/1 uni;content:"\EA08";color:inherit;font-size:22px;position:absolute;top:50%;left:50%;transform:translate(-50%,-48%) scale(.73);-webkit-transform:translate(-50%,-48%) scale(.73)}uni-switch .uni-checkbox-input.uni-checkbox-input-disabled{background-color:#e1e1e1}uni-switch .uni-checkbox-input.uni-checkbox-input-disabled:before{color:#adadad}uni-text[selectable]{user-select:text;-webkit-user-select:text}uni-textarea{width:300px;height:150px;display:block;position:relative;font-size:16px;line-height:1.2}.uni-textarea-wrapped{position:relative;overflow:hidden}.uni-textarea-placeholder,.uni-textarea-textarea,.uni-textarea-wrapped{width:100%;height:100%;font:inherit;font-size:inherit;font-family:inherit;font-style:inherit;font-weight:inherit;line-height:inherit;letter-spacing:inherit;text-indent:inherit;color:inherit}.uni-textarea-placeholder,.uni-textarea-textarea{box-sizing:border-box;position:absolute;left:0;top:0;word-break:break-all}.uni-textarea-placeholder{color:grey}.uni-textarea-textarea{outline:none;border:none;padding:0;resize:none;background-color:rgba(0,0,0,0)}.uni-textarea-textarea::-webkit-input-placeholder{color:rgba(0,0,0,0)}.uni-textarea-textarea:-moz-placeholder,.uni-textarea-textarea::-moz-placeholder{color:rgba(0,0,0,0)}.uni-textarea-textarea:-ms-input-placeholder{color:rgba(0,0,0,0)}uni-view{display:block}.uni-audio{display:none}.uni-audio-default,.uni-audio.controls{display:inline-block}.uni-audio-default{max-width:100%;min-width:302px;height:65px;background:#fcfcfc;border:1px solid #e0e0e0;border-radius:2.5px;overflow:hidden}.uni-audio-left{width:65px;height:65px;float:left;background-color:#e6e6e6;background-size:100% 100%;background-position:50% 50%}.uni-audio-button{width:24px;height:24px;margin:20.5px;background-size:cover}.uni-audio-button.play{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAAAXNSR0IArs4c6QAAB4dJREFUaAXNWg1MlVUYvpcfIRCJ+MnCaOBl8dOcOCEQZ9kmI5cQG5Yb6MifKbMaGVobOtlibTWHDpgpxBUwF07826iFsMkYJhg559JdGiQSkUzSBA0QkZ7n4/u+nXsvwf3jwru99/y/3/N+3znvec97rlbjABofH38GYtaAV4MjwDqwH9gHTBoE3wd3gA3gi+B6rVY7hHR2CKD9wFngs+BHYGuJYziWMqiscwgP8wLvBQ+AHUWURZle1mqhtXQAhLui7xZwPvgFsBENDg7+Drp069at2z09Pf03b978u6mpqZ+dVq1aFRAVFeW/aNGigNDQ0JfDwsISfXx8wowETBT+QpIPLsf0GpuomvrXIgUAPhhizoGXi+II+tq1az/o9fpLFRUVd8S26fJZWVkLN2/enBgTE/PW/PnzF5v0b0P5HSjxp0m9WXFaBQD+NYw6C1bf+vDwcF9DQ4N+/fr19ciPm0m1osLT01N76tSpNaD3PTw8FgpD+TXSoESrUGeWnVIBgM/EiDKwJ0eiPNrS0nJsw4YNNd3d3aOscxSFhIS4V1dXpyckJGRB5jxZ7jDSbVDiW7lslriY1cgVMvjjKErgR0dH/zl06NCuFStWfOdo8HwkZVL2wYMHP3ny5AlNLonPPi5jkSpMfyb9AhjAadMIlsBjrndmZ2fnnThxos9UwEyUMzIynj9y5EgB1gb3ExK/xBuTTSczBQCeC/ZnsDTnCR6f9YMbN25QiNMoOjras7W1tcjb2ztcfijXRKzpwjaaQgBPU0lrI4HntOGbdzZ4AuYzt2/fvm9sbOweyyBiOidjlCr4Y6QAyrTzkqlEx9GSkpJ9zpo2BGNKfHZRUdF+1D+W24iNGFVSpxAAcxekryK9/cuXLx/FoqpWe85iBlPpvbi4uB0yBE4lHabSvyyLX2AXyhJ42nmYytPsMBcI+80ZWKZeGQsxEqtEkgJ4+3Sm9sh1Gm5SM2EqFfnWpsRSV1dXIYzbI2NWv0AqGiXXl+4Bd1ihs0XZu3fvHhgYGNBXVVUlWDTAyk7p6ekNIyMj7fIwYiVmIwWkNvo2trgHAQEBy+CghW7cuPGLvr6+L3fu3PmSJNBBP8R09erVHwVxEwrgU/AwkqQ00DFT8lamqkEICgqKKy4u1sMU7li6dKnVLvL/Pbe0tLRFaEsidi1+UlB5ng3ctBYsWLBV6GRxFnJ4yjIj7CX36uvrS1NTU+uwEM3ara3Al/gaTl+EPC6Vi/hNRUhHR8dPSt5Rqbu7+3Nr1679rL+//3BBQYHyYJvFd3V1iTNkNRV4RZF2G6TkHZ36+vpG5uXlHcah59Pk5GSbj5AY3y1gi6ACisOk4UlKaJyJrBYnsuTa2trjzc3N7/r7+9N1sYo6OzsfCAN0VEB9GzwGCo0zlnV1dfVOTEzMhn3Xl5eXx1rzIBOMflRAsv8UopxhrRFoT18vL68QHCu/am9vz7FUjglGHyow6xQcHBxjKwgqwKCTRIweKHlnpZhGDfC7LP4CJhgH3QCUxzd/AmboA0kP8zNNcDt+w8ZUvHv37l+tedaSJUueFfrfpwJ0oSVLxLiN0DgjWWxsDxobG79JSUn53haXRafT+QrAOjiFDEoFg05K3tEpduoxg8FweuXKlRlJSUm1toAnpvDwcB55FTJQAdUFYMRMaXFkil34l9zc3K2RkZElV65ceWSPbCz414XxF6kAXWfpdMNwHyNmQge7skNDQ3dOnjy5PzAwMLewsLDLLmEYDJMb5ObmFiXLIeZ6FxzNGOK+IFeyk91f4enTpyNtbW3HIiIiNsHCNCmy7U1zcnKWCTIuEDu/AOn8RKLRMFbJcJ9StjRlBIN94Y40ZmZmboqNja3iScrS8dP1IyaEWt4W+kmYaYVILHA/8GGglbHKdevWqV+FHaYjOGofw811hcfZOV1fW9pxzE1wcXGJlscSq6SA+qZhJfai8nN2wNHtDhb0pt7eXoe9Qcq1lRg3hRvNkLtyytuHfAHlKVOI+UIwQxYaRolramrSmZ8LhLefJIAnRmKVSFUAHbiq8yeqNRpGiWE5XlXKs5WWlZUthu3/SHh+voxVqlKnEEuYRvTPee5czjKjxDCr2bMVnYNF9IO7fRRQAokHxIuPeCig3t4YKcAeUCIYiRrcffjwYUd8fPyHzo6PwuJ4XL9+/QAWrjILOHWmDu5SAWjHa500sBSNZoibUWKGvNnuDOKbNwFPLLytITYjUteAWIuOvNbZptQxxF1ZWXnYGWuCc57TRnjzhMFbGmIyI7MpJPbAdMpEuQzsKdc/hi+jT0tLO+NoE0tTSWsjL9h58vP45qe8YppSAQqBEmaXfAy0MlbJcJ+tXqUMUMMdlpsUIuE78JYVO89mznn7LvmUh8gL+xzKknVS6hmrZLiPETNrr1npmNG3oXsg7LCKaFobx1yzKhKhBE3sFnA+mCFuI4IyBuyWzYjb/MHQh+lFN09SPIxgirxIlxhepeIWiHL41vPBFl90i4MtykOROfVXA4tAT9YJisyJP3tMu4gnA29aB2UY4V4DXg1m/FMH9gMrMSd6jwwe8PxtAPMU6JC/2/wHuyI2cMsNBRIAAAAASUVORK5CYII=)}.uni-audio-button.pause{background-image:url(data:image/png;base64,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)}.uni-audio-right{box-sizing:border-box;height:65px;margin-left:65px;padding:11px 16.5px 13.5px 15px;overflow:hidden}.uni-audio-time{margin-top:3.5px;height:16.5px;font-size:12px;color:#888;float:right}.uni-audio-info{margin-right:70px;overflow:hidden}.uni-audio-name{height:22.5px;line-height:22.5px;margin-bottom:3.5px;font-size:14px;color:#353535}.uni-audio-author,.uni-audio-name{overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.uni-audio-author{height:14.5px;line-height:14.5px;font-size:12px;color:#888}uni-map{display:block}.uni-video{width:300px;height:225px;line-height:0;position:relative}.uni-video,.uni-video-container{display:inline-block;overflow:hidden}.uni-video-container{width:100%;height:100%;background-color:#000;position:absolute;top:0;left:0}.uni-video-container.uni-video-type-fullscreen{position:fixed;top:50%;left:50%;-webkit-transform:translate(-50%,-50%);transform:translate(-50%,-50%);z-index:999}.uni-video-container.uni-video-type-fullscreen.uni-video-type-rotate-left{-webkit-transform:translate(-50%,-50%) rotate(-90deg);transform:translate(-50%,-50%) rotate(-90deg)}.uni-video-container.uni-video-type-fullscreen.uni-video-type-rotate-right{-webkit-transform:translate(-50%,-50%) rotate(90deg);transform:translate(-50%,-50%) rotate(90deg)}.uni-video-video{width:100%;height:100%}.uni-video-cover{position:absolute;top:0;left:0;bottom:0;width:100%;display:-webkit-flex;display:-webkit-box;display:flex;-webkit-flex-direction:column;-webkit-box-orient:vertical;-webkit-box-direction:normal;flex-direction:column;-webkit-justify-content:center;-webkit-box-pack:center;justify-content:center;-webkit-align-items:center;-webkit-box-align:center;align-items:center;background-color:rgba(1,1,1,.5);z-index:1}.uni-video-cover-play-button{width:40px;height:40px;background-size:50%;background-repeat:no-repeat;background-position:50% 50%}.uni-video-cover-duration{color:#fff;font-size:16px;line-height:1;margin-top:10px}.uni-video-bar{height:44px;background-color:rgba(0,0,0,.5);overflow:hidden;position:absolute;bottom:0;right:0;display:-webkit-box;display:-webkit-flex;display:flex;-webkit-box-align:center;-webkit-align-items:center;align-items:center;padding:0 10px;z-index:0}.uni-video-bar.uni-video-bar-full{left:0}.uni-video-controls{display:-webkit-box;display:-webkit-flex;display:flex;-webkit-box-flex:1;-webkit-flex-grow:1;flex-grow:1;margin:0 8.5px}.uni-video-control-button{width:13px;height:15px;padding:14.5px 12.5px 14.5px 12.5px;margin-left:-8.5px;box-sizing:content-box}.uni-video-control-button:after{content:"";display:block;width:100%;height:100%;background-size:100%;background-position:50% 50%;background-repeat:no-repeat}.uni-video-control-button.uni-video-control-button-play:after,.uni-video-cover-play-button{background-image:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABoAAAAeCAYAAAAy2w7YAAAAAXNSR0IArs4c6QAAAWhJREFUSA1j+P///0cgBoHjQGzCQCsAtgJB/AMy5wCxGNXtQ9iBwvoA5BUCMQvVLEQxHpNzDSjkRhXLMM3GKrIeKKpEkYVYjcUu+AMo3ALE3GRZiN1MvKKPgbIRJFuG10j8koeA0gZEW4jfLIKyf4EqpgOxMEELCRpFnIJ3QGU5QMyM00LizCFa1SWgSkeslhFtBGkKVwGVy6FYSJp+klR/A6quB2JOkIWMIK0oNlOf8xBoZDE9LAI7nYn6HsBq4l96WHQEaLUpAyiOaASeAM2NgvuPBpaACt82IEYtfKls0UagecpwXyAzqGTRdaA57sjmYrAptAjUsCkGYlYMg9EFyLQI1IiZB8Ti6Obh5JNh0QmgHlOcBuKSIMGi50C18UDMiMssvOJEWPQLqKYbiHnxGkRIkoBF24DyaoTMIEoeh0W3geI+RBlArCI0iz4D+RVAzEasfqLVAQ19AcSg5LoYiKWI1kiiQgCMBLnEEcfDSgAAAABJRU5ErkJggg==")}.uni-video-control-button.uni-video-control-button-pause:after{background-image:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAAgCAYAAAAffCjxAAAAAXNSR0IArs4c6QAAAFlJREFUSA3tksEKACAIQ7X//5zq98wOgQayum8QaGweHhMzG/6OujzKAymn+0LMqivu1XznWmX8/echTIyMyAgTwA72iIwwAexgj8gIE8CO3aMRbDPMaEy5BRGaKcZv8YxRAAAAAElFTkSuQmCC")}.uni-video-current-time,.uni-video-duration{height:14.5px;line-height:14.5px;margin-top:15px;margin-bottom:14.5px;font-size:12px;color:#cbcbcb}.uni-video-progress-container{-webkit-box-flex:2;-webkit-flex-grow:2;flex-grow:2;position:relative}.uni-video-progress{height:2px;margin:21px 12px;background-color:hsla(0,0%,100%,.4);position:relative}.uni-video-progress-buffered{position:absolute;left:0;top:0;width:0;height:100%;-webkit-transition:width .1s;transition:width .1s;background-color:hsla(0,0%,100%,.8)}.uni-video-ball{width:16px;height:16px;padding:14px;position:absolute;top:-21px;box-sizing:content-box;left:0;margin-left:-22px}.uni-video-inner{width:100%;height:100%;background-color:#fff;border-radius:50%}.uni-video-danmu-button{white-space:nowrap;line-height:1;padding:2px 10px;border:1px solid #fff;border-radius:5px;font-size:13px;color:#fff;margin:0 8.5px}.uni-video-danmu-button.uni-video-danmu-button-active{border-color:#48c23d;color:#48c23d}.uni-video-fullscreen{width:17px;height:17px;padding:8.5px;box-sizing:content-box;background-image:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACIAAAAiCAYAAAA6RwvCAAAAAXNSR0IArs4c6QAAAQRJREFUWAnt1d0NwiAQB/CmS7hHX5zFxLF0Ah2hE/lg7BT4PyMJUj6Oyt299BIioZT7ARYG59wLpTXmoXOMGO/QecxtwyWW4o42AupGALkFdX1MkHxE3Q7jIbQPqNthQogpJoZkMLRlsn/gFMQEk4OoY0oQVUwNoobhQFQwgMxUKFkt0C8+Zy61d8SeR5iHWCLOwF/MCb8Tp//ex3QFsE1HlCfKFUX2OijNFMnPKD7k76YcBoL402Zh8B77+MjlXrVvwfglXA32b0MrRgxCE2nBiEJaMOIQLkYFwsGoQWoYVUgJow4pYD4Weq4ayBqfwDYQmnUK0301kITujuawu65/l2B5A4z3Qe+Ut7EBAAAAAElFTkSuQmCC");background-size:50%;background-position:50% 50%;background-repeat:no-repeat}.uni-video-fullscreen.uni-video-type-fullscreen{background-image:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACIAAAAiCAYAAAA6RwvCAAABBElEQVRYhcXWwQ3CMAwF0O+qOzAKQzAAl0pMxQQwQhmGKwcERxbgc4lEVdHUbm3zJR8qJemTo6YByS3JO8kjyQbGkHQpkOz4zcmK8YQ0BWDCkOxL+UDKombMYKwfZAkmDGLFhEIsmHCIFpMC0WDSIHOYVEgNkw6pYPIhE5j/QCoYF0g7eEkPYGej+cX82x/l6aIAIOb9CcrajrjFE/IAQGP1IgIRcYVsVs32+vx+nC9nWq6dAZDhOaPHBEDGh54O4w0pa9oxEZBFmCjIBGb6Qh4JMWGiIWpMBkSFyYLMYjIhNUw7N9GQi2aQiLxJHspjV+rl1hFrRp25uV2MRGQRBsAewPUD/HhJVOOuCzwAAAAASUVORK5CYII=")}.uni-video-danmu{position:absolute;top:0;left:0;bottom:0;width:100%;margin-top:14px;margin-bottom:44px;font-size:14px;line-height:14px;overflow:visible}.uni-video-danmu-item{line-height:1;position:absolute;color:#fff;white-space:nowrap;left:100%;-webkit-transform:translatex(0);transform:translatex(0);-webkit-transition-property:left,-webkit-transform;transition-property:left,-webkit-transform;transition-property:left,transform;transition-property:left,transform,-webkit-transform;-webkit-transition-duration:3s;transition-duration:3s;-webkit-transition-timing-function:linear;transition-timing-function:linear}.uni-video-toast{pointer-events:none;position:absolute;left:50%;top:50%;-webkit-transform:translate(-50%,-50%);transform:translate(-50%,-50%);border-radius:5px;background-color:hsla(0,0%,100%,.8);color:#000;display:none}.uni-video-toast.uni-video-toast-volume{width:100px;height:100px;display:block}.uni-video-toast-volume .uni-video-toast-title{width:100%;font-size:12px;line-height:16px;text-align:center;margin-top:10px;display:block}.uni-video-toast-volume .uni-video-toast-icon{fill:#000;width:50%;height:50%;margin-left:25%;display:block}.uni-video-toast-volume .uni-video-toast-value{width:80px;height:5px;margin-top:5px;margin-left:10px}.uni-video-toast-volume .uni-video-toast-value>.uni-video-toast-value-content{overflow:hidden}.uni-video-toast-volume-grids{width:80px;height:5px}.uni-video-toast-volume-grids-item{float:left;width:7.1px;height:5px;background-color:#000}.uni-video-toast-volume-grids-item:not(:first-child){margin-left:1px}.uni-video-toast.uni-video-toast-progress{display:block;background-color:rgba(0,0,0,.8);color:#fff;font-size:14px;line-height:18px;padding:6px} \ No newline at end of file diff --git a/packages/uni-h5/dist/index.umd.min.js b/packages/uni-h5/dist/index.umd.min.js new file mode 100644 index 000000000..91af9d720 --- /dev/null +++ b/packages/uni-h5/dist/index.umd.min.js @@ -0,0 +1 @@ +(function(t,e){"object"===typeof exports&&"object"===typeof module?module.exports=e(require("vue-router"),require("vue")):"function"===typeof define&&define.amd?define([,],e):"object"===typeof exports?exports["index"]=e(require("vue-router"),require("vue")):t["index"]=e(t["VueRouter"],t["Vue"])})("undefined"!==typeof self?self:this,function(t,e){return function(t){var e={};function n(i){if(e[i])return e[i].exports;var r=e[i]={i:i,l:!1,exports:{}};return t[i].call(r.exports,r,r.exports,n),r.l=!0,r.exports}return n.m=t,n.c=e,n.d=function(t,e,i){n.o(t,e)||Object.defineProperty(t,e,{enumerable:!0,get:i})},n.r=function(t){"undefined"!==typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})},n.t=function(t,e){if(1&e&&(t=n(t)),8&e)return t;if(4&e&&"object"===typeof t&&t&&t.__esModule)return t;var i=Object.create(null);if(n.r(i),Object.defineProperty(i,"default",{enumerable:!0,value:t}),2&e&&"string"!=typeof t)for(var r in t)n.d(i,r,function(e){return t[e]}.bind(null,r));return i},n.n=function(t){var e=t&&t.__esModule?function(){return t["default"]}:function(){return t};return n.d(e,"a",e),e},n.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},n.p="",n(n.s="fae3")}({"066f":function(t,e,n){"use strict";n.r(e),n.d(e,"setTabBarItem",function(){return a}),n.d(e,"setTabBarStyle",function(){return s}),n.d(e,"hideTabBar",function(){return c}),n.d(e,"showTabBar",function(){return u}),n.d(e,"hideTabBarRedDot",function(){return l}),n.d(e,"showTabBarRedDot",function(){return d}),n.d(e,"removeTabBarBadge",function(){return h}),n.d(e,"setTabBarBadge",function(){return f});var i=n("f2b3");function r(t){var e=!1,n=getCurrentPages();if(n.length&&n[n.length-1].$page.meta.isTabBar&&(e=!0),!e)return"not TabBar page"}var o={type:Number,required:!0,validator:function(t,e){if(t>=__uniConfig.tabBar.list.length)return"tabbar item not found"}},a={beforeValidate:r,index:o,text:{type:String},iconPath:{type:String},selectedIconPath:{type:String}},s={beforeValidate:r,color:{type:String},selectedColor:{type:String},backgroundColor:{type:String},borderStyle:{type:String,validator:function(t,e){t&&(e.borderStyle="black"===t?"black":"white")}}},c={beforeValidate:r,animation:{type:Boolean,default:!1}},u={beforeValidate:r,animation:{type:Boolean,default:!1}},l={beforeValidate:r,index:o},d={beforeValidate:r,index:o},h={beforeValidate:r,index:o},f={beforeValidate:r,index:o,text:{type:String,required:!0,validator:function(t,e){Object(i["a"])(t)>=4&&(e.text="...")}}}},"0784":function(t,e,n){"use strict";var i=n("a741");function r(t){var e=t.$route;t.route=e.meta.pagePath,t.__page__={id:e.params.__id__,path:e.path,route:e.meta.pagePath,meta:Object.assign({},e.meta)}}function o(){return{created:function(){r(this),Object(i["b"])(this,"onLoad",this.$route.query),Object(i["b"])(this,"onShow")}}}n.d(e,"a",function(){return o})},"08c9":function(t,e,n){},"0950":function(t,e,n){},"0998":function(t,e,n){"use strict";var i=n("4509"),r=n.n(i);r.a},"0c7c":function(t,e,n){"use strict";function i(t,e,n,i,r,o,a,s){var c,u="function"===typeof t?t.options:t;if(e&&(u.render=e,u.staticRenderFns=n,u._compiled=!0),i&&(u.functional=!0),o&&(u._scopeId="data-v-"+o),a?(c=function(t){t=t||this.$vnode&&this.$vnode.ssrContext||this.parent&&this.parent.$vnode&&this.parent.$vnode.ssrContext,t||"undefined"===typeof __VUE_SSR_CONTEXT__||(t=__VUE_SSR_CONTEXT__),r&&r.call(this,t),t&&t._registeredComponents&&t._registeredComponents.add(a)},u._ssrRegister=c):r&&(c=s?function(){r.call(this,this.$root.$options.shadowRoot)}:r),c)if(u.functional){u._injectStyles=c;var l=u.render;u.render=function(t,e){return c.call(e),l(t,e)}}else{var d=u.beforeCreate;u.beforeCreate=d?[].concat(d,c):[c]}return{exports:t,options:u}}n.d(e,"a",function(){return i})},"0dba":function(t,e,n){},"0dd1":function(t,e,n){"use strict";n.r(e);var i=n("8bbf"),r=n.n(i),o=n("a741"),a=n("9eba");function s(t){Object(o["a"])(getApp(),"onError",t)}function c(t){Object(o["a"])(getApp(),"onPageNotFound",t)}function u(t,e){var n=getCurrentPages().find(function(t){return t.$page.id===e});n&&(Object(a["setPullDownRefreshPageId"])(e),Object(o["b"])(n,"onPullDownRefresh"))}function l(t){var e=getCurrentPages();if(e.length){for(var n=arguments.length,i=new Array(n>1?n-1:0),r=1;r=0}},fields:{type:String,default:"day",validator:function(t){return Object.values(l).indexOf(t)>=0}},start:{type:String,default:function(){if(this.mode===u.TIME)return"00:00";if(this.mode===u.DATE){var t=(new Date).getFullYear()-100;switch(this.fields){case l.YEAR:return t;case l.MONTH:return t+"-01";case l.DAY:return t+"-01-01"}}return""}},end:{type:String,default:function(){if(this.mode===u.TIME)return"23:59";if(this.mode===u.DATE){var t=(new Date).getFullYear()+100;switch(this.fields){case l.YEAR:return t;case l.MONTH:return t+"-12";case l.DAY:return t+"-12-31"}}return""}},disabled:{type:[Boolean,String],default:!1},customItem:{type:String,default:""}},data:function(){return{valueSync:this.value,visible:!1,valueChangeSource:""}},watch:{value:function(t){var e=this;Array.isArray(t)?(Array.isArray(this.valueSync)||(this.valueSync=[]),t.forEach(function(t,n){t!==e.valueSync[n]&&e.$set(e.valueSync,n,t)}),t.length!==this.valueSync.length&&this.valueSync.splice(t.length,t.length-this.valueSync.length)):"object"!==r(t)&&(this.valueSync=t)},valueSync:function(t){this.valueChangeSource?this.$emit("update:value",t):this._show()}},created:function(){var t=this;this.$dispatch("Form","uni-form-group-update",{type:"add",vm:this}),Object.keys(this.$props).forEach(function(e){"value"!==e&&"name"!==e&&t.$watch(e,t._show())})},beforeDestroy:function(){this.$dispatch("Form","uni-form-group-update",{type:"remove",vm:this})},destroyed:function(){if(this.visible){var t=this.$page.id;c("hidePicker",{},t)}},methods:{_click:function(){if(!this.disabled){var t=this.$page.id;a("".concat(t,"-picker-change"),this.change),a("".concat(t,"-picker-cancel"),this.cancel),this.visible=!0,this._show()}},_show:function(){if(this.visible){var t=this.$page.id,e=Object.assign({},this.$props);e.value=this.valueSync,c("showPicker",e,t)}},change:function(t){this.visible=!1;var e=this.$page.id;if(s("".concat(e,"-picker-change")),s("".concat(e,"-picker-cancel")),!this.disabled){this.valueChangeSource="click";var n=t.value;this.valueSync=Array.isArray(n)?n.map(function(t){return t}):n,this.$trigger("change",{},{value:n})}},cancel:function(t){this.visible=!1;var e=this.$page.id;s("".concat(e,"-picker-change")),s("".concat(e,"-picker-cancel")),this.$trigger("cancel",{},{})},_getFormData:function(){return{value:this.valueSync,key:this.name}},_resetFormData:function(){this.valueSync=""}}}}).call(this,n("501c"))},"0f55":function(t,e,n){"use strict";var i=n("eaa4"),r=n.n(i);r.a},"0f74":function(t,e,n){"use strict";function i(t,e){if(e){if(0===e.indexOf("/"))return e}else{if(e=t,0===e.indexOf("/"))return e;var n=getCurrentPages();t=n.length?n[n.length-1].$page.route:""}if(0===e.indexOf("./"))return i(t,e.substr(2));for(var r=e.split("/"),o=r.length,a=0;a0?t.split("/"):[];return s.splice(s.length-a-1,a+1),"/"+s.concat(r).join("/")}n.d(e,"a",function(){return i})},1067:function(t,e,n){},1082:function(t,e,n){"use strict";n.r(e);var i=function(){var t=this,e=t.$createElement,n=t._self._c||e;return n("uni-image",t._g({},t.$listeners),[n("div",{style:t.modeStyle})])},r=[],o={name:"Image",props:{src:{type:String,default:""},mode:{type:String,default:"scaleToFill"},lazyLoad:{type:[Boolean,String],default:!1}},data:function(){return{originalWidth:0,originalHeight:0,availHeight:""}},computed:{ratio:function(){return this.originalWidth&&this.originalHeight?this.originalWidth/this.originalHeight:0},modeStyle:function(){var t="auto",e="",n="no-repeat";switch(this.mode){case"aspectFit":t="contain",e="center center";break;case"aspectFill":t="cover",e="center center";break;case"widthFix":t="100% 100%;";break;case"top":e="center top";break;case"bottom":e="center bottom";break;case"center":e="center center";break;case"left":e="left center";break;case"right":e="right center";break;case"top left":e="left top";break;case"top right":e="right top";break;case"bottom left":e="left bottom";break;case"bottom right":e="right bottom";break;default:t="100% 100%",e="0% 0%";break}return'background-image: url("'.concat(this.$getRealPath(this.src),'"); background-size:').concat(t,";background-position:").concat(e,";background-repeat:").concat(n,";")}},watch:{src:function(t,e){this._loadImage()},mode:function(t,e){"widthFix"===e&&(this.$el.style.height=this.availHeight),"widthFix"===t&&this.ratio&&this._getWidth()&&(this.$el.style.height=this._getWidth()/this.ratio+"px")}},mounted:function(){this.availHeight=this.$el.style.height||"",this._loadImage()},methods:{_loadImage:function(){var t=this,e=new Image;e.onload=function(e){t.originalWidth=this.width,t.originalHeight=this.height,"widthFix"===t.mode&&t._getWidth()&&(t.$el.style.height=t._getWidth()/t.ratio+"px"),t.$trigger("load",e,{width:this.width,height:this.height})},e.onerror=function(e){t.$trigger("error",e,{errMsg:"GET ".concat(t.src," 404 (Not Found)")})},e.src=this.$getRealPath(this.src)},_getWidth:function(){var t=window.getComputedStyle(this.$el),e=(parseFloat(t.borderLeftWidth,10)||0)+(parseFloat(t.borderRightWidth,10)||0),n=(parseFloat(t.paddingLeft,10)||0)+(parseFloat(t.paddingRight,10)||0);return this.$el.offsetWidth-e-n}}},a=o,s=(n("db18"),n("0c7c")),c=Object(s["a"])(a,i,r,!1,null,null,null);c.options.__file="index.vue";e["default"]=c.exports},1164:function(t,e,n){"use strict";var i=n("a741");function r(t){-1===this.keepAliveInclude.indexOf(t)&&this.keepAliveInclude.push(t)}function o(t){var e=this.keepAliveInclude.indexOf(t);-1!==e&&this.keepAliveInclude.splice(e,1)}function a(t){for(var e=getCurrentPages(),n=e.length-1;n>=0;n--){var r=e[n],a=r.$page.meta;a.isTabBar||(o.call(this,a.name+"-"+r.$page.id),Object(i["b"])(r,"onUnload"))}}function s(t){__uniConfig.reLaunch=(__uniConfig.reLaunch||1)+1;for(var e=getCurrentPages(),n=e.length-1;n>=0;n--)Object(i["b"])(e[n],"onUnload");this.keepAliveInclude=[]}function c(t,e,n,i){var c=e.params.__id__,u=t.params.__id__;if(u===c)n(!1);else if(t.meta.id&&t.meta.id!==u)n({path:t.path,replace:!0});else{var l=e.meta.name+"-"+c,d=t.meta.name+"-"+u;switch(t.type){case"navigateTo":break;case"redirectTo":o.call(this,l);break;case"switchTab":a.call(this,i);break;case"reLaunch":s.call(this,d);break;default:c&&c>u&&o.call(this,l);break}"reLaunch"!==t.type&&e.meta.id&&r.call(this,l),r.call(this,d),t.meta&&t.meta.name&&(document.body.className="uni-body "+t.meta.name),n()}}function u(t,e){var n=e.params.__id__,r=t.params.__id__,o=getCurrentPages().find(function(t){return t.$page.id===n});switch(t.type){case"navigateTo":o&&Object(i["b"])(o,"onHide");break;case"redirectTo":o&&Object(i["b"])(o,"onUnload");break;case"switchTab":e.meta.isTabBar&&o&&Object(i["b"])(o,"onHide");break;case"reLaunch":break;default:n&&n>r&&o&&Object(i["b"])(o,"onUnload");break}if("reLaunch"!==t.type){var a=getCurrentPages(!0).find(function(t){return t.$page.id===r});a&&Object(i["b"])(a,"onShow")}}function l(t,e){t.$router.beforeEach(function(n,i,r){c.call(t,n,i,r,e)}),t.$router.afterEach(function(e,n){u.call(t,e,n)})}n.d(e,"b",function(){return h}),n.d(e,"c",function(){return f}),n.d(e,"a",function(){return p});var d=!1;function h(){return d}function f(){var t=arguments.length>0&&void 0!==arguments[0]&&arguments[0],e=[],n=d.$children[0];if(n&&n.$children.length){var i=n.$children.find(function(t){return"TabBar"===t.$options.name}),r=h();n.$children.forEach(function(n){if(i!==n&&n.$children.length&&"Page"===n.$children[0].$options.name&&n.$children[0].$slots.page){var o=n.$children[0].$children.find(function(t){return"PageBody"===t.$options.name}).$children.find(function(t){return!!t.$page});if(o){var a=!0;!t&&i&&o.$page&&o.$page.meta.isTabBar&&(r.$route.meta&&r.$route.meta.isTabBar?r.$route.path!==o.$page.path&&(a=!1):i.__path__!==o.$page.path&&(a=!1)),a&&e.push(o)}}})}return e}function p(t,e){d=t,d.globalData=d.$options.globalData||{},l(d,e)}},"11fb":function(t,e,n){"use strict";n.r(e),n.d(e,"previewImage",function(){return r});var i=n("cb0f"),r={urls:{type:Array,required:!0,validator:function(t,e){var n;if(e.urls=t.map(function(t){if("string"===typeof t)return Object(i["a"])(t);n=!0}),n)return"url is not string"}},current:{type:String,validator:function(t,e){e.type=t?Object(i["a"])(t):""}}}},1360:function(t,e,n){},"15a0":function(t,e,n){"use strict";n.r(e);var i=Object.create(null),r=n("19c4");r.keys().forEach(function(t){"./index.js"!==t&&Object.assign(i,r(t))}),e["default"]=i},"15bb":function(t,e,n){"use strict";(function(t){var i=n("f2b3");e["a"]={mounted:function(){var e=this;if("transparent"===this.type){for(var n=this.$el.querySelector(".uni-page-head-transparent").style,i=this.$el.querySelector(".uni-page-head__title").style,r=this.$el.querySelectorAll(".uni-btn-icon"),o=[],a=0;adiv,.uni-page-head-ft>div"),c=[],u=0;u.5&&e._A<=.5?o.forEach(function(t){t.color="#000"}):a<=.5&&e._A>.5&&o.forEach(function(t){t.color="#fff"}),e._A=a,i.opacity=a,n.backgroundColor="rgba(".concat(e._R,",").concat(e._G,",").concat(e._B,",").concat(a,")"),c.forEach(function(t){t.backgroundColor="rgba(153,153,153,".concat(1-a,")")}))})}},computed:{color:function(){return"transparent"===this.type?"#fff":this.textColor},offset:function(){return parseInt(this.coverage)},bgColor:function(){if("transparent"===this.type){var t=Object(i["c"])(this.backgroundColor),e=t.r,n=t.g,r=t.b;return this._R=e,this._G=n,this._B=r,"rgba(".concat(e,",").concat(n,",").concat(r,",0)")}return this.backgroundColor}}}}).call(this,n("501c"))},"167a":function(t,e,n){"use strict";var i=n("deaf"),r=n.n(i);r.a},"17fd":function(t,e,n){"use strict";n.r(e);var i=function(){var t=this,e=t.$createElement,n=t._self._c||e;return t.hoverClass&&"none"!==t.hoverClass?n("uni-navigator",t._g({class:[t.hovering?t.hoverClass:""],on:{touchstart:t._hoverTouchStart,touchend:t._hoverTouchEnd,touchcancel:t._hoverTouchCancel,click:t._onClick}},t.$listeners),[t._t("default")],2):n("uni-navigator",t._g({on:{click:t._onClick}},t.$listeners),[t._t("default")],2)},r=[],o=n("487a"),a=o["a"],s=(n("f7fd"),n("0c7c")),c=Object(s["a"])(a,i,r,!1,null,null,null);c.options.__file="index.vue";e["default"]=c.exports},"18fd":function(t,e,n){"use strict";n.d(e,"a",function(){return h});var i=/^<([-A-Za-z0-9_]+)((?:\s+[a-zA-Z_:][-a-zA-Z0-9_:.]*(?:\s*=\s*(?:(?:"[^"]*")|(?:'[^']*')|[^>\s]+))?)*)\s*(\/?)>/,r=/^<\/([-A-Za-z0-9_]+)[^>]*>/,o=/([a-zA-Z_:][-a-zA-Z0-9_:.]*)(?:\s*=\s*(?:(?:"((?:\\.|[^"])*)")|(?:'((?:\\.|[^'])*)')|([^>\s]+)))?/g,a=f("area,base,basefont,br,col,frame,hr,img,input,link,meta,param,embed,command,keygen,source,track,wbr"),s=f("a,address,article,applet,aside,audio,blockquote,button,canvas,center,dd,del,dir,div,dl,dt,fieldset,figcaption,figure,footer,form,frameset,h1,h2,h3,h4,h5,h6,header,hgroup,hr,iframe,ins,isindex,li,map,menu,noframes,noscript,object,ol,output,p,pre,section,script,table,tbody,td,tfoot,th,thead,tr,ul,video"),c=f("abbr,acronym,applet,b,basefont,bdo,big,br,button,cite,code,del,dfn,em,font,i,iframe,img,input,ins,kbd,label,map,object,q,s,samp,script,select,small,span,strike,strong,sub,sup,textarea,tt,u,var"),u=f("colgroup,dd,dt,li,options,p,td,tfoot,th,thead,tr"),l=f("checked,compact,declare,defer,disabled,ismap,multiple,nohref,noresize,noshade,nowrap,readonly,selected"),d=f("script,style");function h(t,e){var n,h,f,p=[],g=t;p.last=function(){return this[this.length-1]};while(t){if(h=!0,p.last()&&d[p.last()])t=t.replace(new RegExp("([\\s\\S]*?)]*>"),function(t,n){return n=n.replace(/|/g,"$1$2"),e.chars&&e.chars(n),""}),b("",p.last());else if(0==t.indexOf("\x3c!--")?(n=t.indexOf("--\x3e"),n>=0&&(e.comment&&e.comment(t.substring(4,n)),t=t.substring(n+3),h=!1)):0==t.indexOf("=0;i--)if(p[i]==n)break}else var i=0;if(i>=0){for(var r=p.length-1;r>=i;r--)e.end&&e.end(p[r]);p.length=i}}b()}function f(t){for(var e={},n=t.split(","),i=0;i*{height: ").concat(t,"px;overflow: hidden;}"),document.head.appendChild(e)},_handleTrack:function(t){if(this._scroller)switch(t.detail.state){case"start":this._handleTouchStart(t);break;case"move":this._handleTouchMove(t);break;case"end":case"cancel":this._handleTouchEnd(t)}},_handleTap:function(t){if(t.target!==t.currentTarget&&!this._scroller.isScrolling()){var e=t.touches&&t.touches[0]&&t.touches[0].clientY,n="number"===typeof e?e:t.detail.y-document.body.scrollTop,i=this.$el.getBoundingClientRect(),r=n-i.top-this._height/2,o=this.indicatorHeight/2;if(!(Math.abs(r)<=o)){var a=Math.ceil((Math.abs(r)-o)/this.indicatorHeight),s=r<0?-a:a;this.current+=s,this._scroller.scrollTo(this.current*this.indicatorHeight)}}},setCurrent:function(t){t!==this.current&&(this.current=t,this.inited&&this.update())},init:function(){var t=this;this.initScroller(this.$refs.content,{enableY:!0,enableX:!1,enableSnap:!0,itemSize:this.indicatorHeight,onSnap:function(e){isNaN(e)||e===t.current||(t.current=e)}}),this.inited=!0},update:function(){var t=this;this.$nextTick(function(){var e=Math.max(t.length-1,0),n=Math.min(t.current,e);t._scroller.update(n*t.indicatorHeight,void 0,t.indicatorHeight)})}},render:function(t){return this.length=this.$slots.default&&this.$slots.default.length||0,t("uni-picker-view-column",{staticClass:"_picker-view-column",on:{tap:this._handleTap}},[t("div",{ref:"main",staticClass:"uni-picker__group"},[t("div",{ref:"mask",staticClass:"uni-picker__mask",class:this.maskClass,style:"background-size: 100% ".concat(this.maskSize,"px;").concat(this.maskStyle)}),t("div",{ref:"indicator",staticClass:"uni-picker__indicator",class:this.indicatorClass,style:this.indicatorStyle}),t("div",{ref:"content",staticClass:"uni-picker__content",class:this.scope,style:"padding: ".concat(this.maskSize,"px 0;")},[this.$slots.default])])])}},c=s,u=(n("edfa"),n("0c7c")),l=Object(u["a"])(c,i,r,!1,null,null,null);l.options.__file="index.vue";e["default"]=l.exports},"19c4":function(t,e,n){var i={"./base.js":"22ec","./context.js":"9fef","./device/make-phone-call.js":"f102","./file/open-document.js":"2604","./index.js":"15a0","./location.js":"c439","./media/choose-image.js":"f1b2","./media/choose-video.js":"ed9f","./media/get-image-info.js":"b866","./media/preview-image.js":"11fb","./navigation-bar.js":"4043","./network/download-file.js":"439a","./network/request.js":"a201","./network/socket.js":"abb2","./network/upload-file.js":"9a3e","./page-scroll-to.js":"e8e6","./plugins.js":"cef5","./popup.js":"d68b","./route.js":"40ab","./storage.js":"3858","./tab-bar.js":"066f"};function r(t){var e=o(t);return n(e)}function o(t){var e=i[t];if(!(e+1)){var n=new Error("Cannot find module '"+t+"'");throw n.code="MODULE_NOT_FOUND",n}return e}r.keys=function(){return Object.keys(i)},r.resolve=o,t.exports=r,r.id="19c4"},"1a33":function(t,e,n){},"1adb":function(t,e,n){},"1b6f":function(t,e,n){"use strict";(function(t){var i=n("f2b3");e["a"]={props:{id:{type:String,default:""}},mounted:function(){var t=this;this._toggleListeners("subscribe",this.id),this.$watch("id",function(e,n){t._toggleListeners("unsubscribe",n,!0),t._toggleListeners("subscribe",e,!0)})},beforeDestroy:function(){this._toggleListeners("unsubscribe",this.id)},methods:{_toggleListeners:function(e,n,r){r&&!n||Object(i["d"])(this._handleSubscribe)&&t[e](this.$page.id+"-"+this.$options.name.replace(/VUni([A-Z])/,"$1").toLowerCase()+"-"+n,this._handleSubscribe)}}}}).call(this,n("501c"))},"1c64":function(t,e,n){"use strict";var i=n("9613"),r=n.n(i);r.a},"1cea":function(t,e,n){"use strict";n.r(e);var i=function(){var t=this,e=t.$createElement,n=t._self._c||e;return n("uni-page",{attrs:{"data-page":t.$route.meta.pagePath}},[t.showNavigationBar?n("page-head",t._b({},"page-head",t.navigationBar,!1)):t._e(),t.enablePullDownRefresh?n("page-refresh",{ref:"refresh",attrs:{color:t.refreshOptions.color,offset:t.refreshOptions.offset}}):t._e(),t.enablePullDownRefresh?n("page-body",{nativeOn:{touchstart:function(e){return t._touchstart(e)},touchmove:function(e){return t._touchmove(e)},touchend:function(e){return t._touchend(e)},touchcancel:function(e){return t._touchend(e)}}},[t._t("page")],2):n("page-body",[t._t("page")],2)],1)},r=[],o=n("85b6"),a=n("65a8"),s=n("24d9"),c=function(){var t=this,e=t.$createElement,n=t._self._c||e;return n("uni-page-head",[n("div",{staticClass:"uni-page-head",class:{"uni-page-head-transparent":"transparent"===t.type},style:{transitionDuration:t.duration,transitionTimingFunction:t.timingFunc,backgroundColor:t.bgColor,color:t.textColor}},[n("div",{staticClass:"uni-page-head-hd",style:{visibility:t.backButton?"visible":"hidden"}},[n("div",{on:{click:t._back}},[n("i",{staticClass:"uni-btn-icon",style:{color:t.color,fontSize:"27px"}},[t._v("")])])]),n("div",{staticClass:"uni-page-head-bd"},[n("div",{staticClass:"uni-page-head__title",style:{fontSize:t.titleSize,opacity:"transparent"===t.type?0:1}},[t.loading?n("i",{staticClass:"uni-loading"}):t._e(),t._v("\n "+t._s(t.titleText)+"\n ")])]),n("div",{staticClass:"uni-page-head-ft"},[t._l(t.btns,function(e,i){return[n("div",{key:i,style:{marginRight:i>0?"5px":"0px"}},[n("i",{staticClass:"uni-btn-icon",style:t._formatBtnStyle(e),domProps:{innerHTML:t._s(t._formatBtnFontText(e))},on:{click:function(e){t._onBtnClick(i)}}})])]})],2)]),"transparent"!==t.type?n("div",{staticClass:"uni-placeholder"}):t._e()])},u=[],l=n("6af4"),d=l["a"],h=(n("8e16"),n("0c7c")),f=Object(h["a"])(d,c,u,!1,null,null,null);f.options.__file="pageHead.vue";var p=f.exports,g=function(){var t=this,e=t.$createElement,n=t._self._c||e;return n("uni-page-wrapper",[n("uni-page-body",[t._t("default")],2)],1)},v=[],m={name:"PageBody"},b=m,y=(n("167a"),Object(h["a"])(b,g,v,!1,null,null,null));y.options.__file="pageBody.vue";var _=y.exports,w=function(){var t=this,e=t.$createElement,n=t._self._c||e;return n("uni-page-refresh",[n("div",{staticClass:"uni-page-refresh",style:{"margin-top":t.offset+"px"}},[n("div",{staticClass:"uni-page-refresh-inner"},[n("svg",{staticClass:"uni-page-refresh__icon",attrs:{fill:t.color,width:"24",height:"24",viewBox:"0 0 24 24"}},[n("path",{attrs:{d:"M17.65 6.35C16.2 4.9 14.21 4 12 4c-4.42 0-7.99 3.58-7.99 8s3.57 8 7.99 8c3.73 0 6.84-2.55 7.73-6h-2.08c-.82 2.33-3.04 4-5.65 4-3.31 0-6-2.69-6-6s2.69-6 6-6c1.66 0 3.14.69 4.22 1.78L13 11h7V4l-2.35 2.35z"}}),n("path",{attrs:{d:"M0 0h24v24H0z",fill:"none"}})]),n("svg",{staticClass:"uni-page-refresh__spinner",attrs:{width:"24",height:"24",viewBox:"25 25 50 50"}},[n("circle",{staticClass:"uni-page-refresh__path",attrs:{stroke:t.color,cx:"50",cy:"50",r:"20",fill:"none","stroke-width":"4","stroke-miterlimit":"10"}})])])])])},k=[],S={name:"PageRefresh",props:{color:{type:String,default:"#2BD009"},offset:{type:Number,default:0}}},T=S,x=(n("9b5b"),Object(h["a"])(T,w,k,!1,null,null,null));x.options.__file="pageRefresh.vue";var C=x.exports,M=n("be12"),O={name:"Page",mpType:"page",components:{PageHead:p,PageBody:_,PageRefresh:C},mixins:[M["a"]],props:{isQuit:{type:Boolean,default:!1},isEntry:{type:Boolean,default:!1},isTabBar:{type:Boolean,default:!1},tabBarIndex:{type:Number,default:-1},navigationBarBackgroundColor:{type:String,default:"#000"},navigationBarTextStyle:{default:"white",validator:function(t){return-1!==["white","black"].indexOf(t)}},navigationBarTitleText:{type:String,default:""},navigationStyle:{default:"default",validator:function(t){return-1!==["default","custom"].indexOf(t)}},backgroundColor:{type:String,default:"#ffffff"},backgroundTextStyle:{default:"dark",validator:function(t){return-1!==["dark","light"].indexOf(t)}},backgroundColorTop:{type:String,default:"#fff"},backgroundColorBottom:{type:String,default:"#fff"},enablePullDownRefresh:{type:Boolean,default:!1},onReachBottomDistance:{type:Number,default:50},disableScroll:{type:Boolean,default:!1},titleNView:{type:[Boolean,Object],default:!0},pullToRefresh:{type:Object,default:function(){return{}}}},data:function(){var t=Object(s["a"])({loading:!1,backButton:!this.isQuit,backgroundColor:this.navigationBarBackgroundColor,textColor:"black"===this.navigationBarTextStyle?"#000":"#fff",titleText:this.navigationBarTitleText,duration:"0",timingFunc:""},this.titleNView),e="default"===this.navigationStyle&&this.titleNView,n=Object.assign({support:!0,color:"#2BD009",style:"circle",height:70,range:150,offset:0},this.pullToRefresh),i=Object(o["c"])(n.offset);return e&&(this.titleNView&&"transparent"===this.titleNView.type||(i+=a["a"])),n.offset=i,n.height=Object(o["c"])(n.height),n.range=Object(o["c"])(n.range),{showNavigationBar:e,navigationBar:t,refreshOptions:n}}},E=O,A=(n("6226"),Object(h["a"])(E,i,r,!1,null,null,null));A.options.__file="index.vue";e["default"]=A.exports},"1efd":function(t,e,n){"use strict";n.r(e),function(t){var e=n("8bbf"),i=n.n(e),r=n("5129"),o=n.n(r),a=n("d7b1"),s=i.a.config.isReservedTag;i.a.config.isReservedTag=function(t){return-1!==o.a.indexOf(t)||s(t)},i.a.config.ignoredElements=o.a;var c=i.a.config.getTagNamespace,u=["switch","image","text","view"];i.a.config.getTagNamespace=function(t){return!~u.indexOf(t)&&(c(t)||!1)},i.a.config.errorHandler=function(e,n,i){t.error("errorHandler",e,n,i)};var l=[n("622e"),n("5408"),n("93a5")];l.forEach(function(t,e){t.keys().forEach(function(n){var r=t(n),o=r.default||r;o.mixins=o.mixins?[].concat(a["a"],o.mixins):[a["a"]],e>0&&(o.name="VUni"+o.name),i.a.component(o.name,o)})})}.call(this,n("3ad9")["default"])},"1f6b":function(t,e,n){"use strict";var i=n("7a3c"),r=n.n(i);r.a},"22ec":function(t,e,n){"use strict";n.r(e),n.d(e,"canIUse",function(){return i});var i=[{name:"schema",type:String,required:!0}]},"23af":function(t,e,n){},"24aa":function(t,e){var n;n=function(){return this}();try{n=n||Function("return this")()||(0,eval)("this")}catch(i){"object"===typeof window&&(n=window)}t.exports=n},"24d9":function(t,e,n){"use strict";n.d(e,"b",function(){return r}),n.d(e,"a",function(){return o});var i=n("f2b3");function r(t){return Object.assign({mp:t,_processed:!0},t)}function o(t,e){return Object(i["e"])(e)&&(Object(i["b"])(e,"backgroundColor")&&(t.backgroundColor=e.backgroundColor),Object(i["b"])(e,"buttons")&&(t.buttons=e.buttons),Object(i["b"])(e,"titleColor")&&(t.textColor=e.titleColor),Object(i["b"])(e,"titleText")&&(t.titleText=e.titleText),Object(i["b"])(e,"titleSize")&&(t.titleSize=e.titleSize),Object(i["b"])(e,"type")&&(t.type=e.type)),t}},"250d":function(t,e,n){"use strict";n.r(e);var i=function(){var t=this,e=t.$createElement,n=t._self._c||e;return n("uni-input",t._g({},t.$listeners),[n("div",{ref:"wrapper",attrs:{disabled:t.disabled}},["checkbox"===t.inputType?n("input",{directives:[{name:"model",rawName:"v-model",value:t.inputValue,expression:"inputValue"}],ref:"input",attrs:{disabled:t.disabled,maxlength:t.maxlength,step:t.step,type:"checkbox"},domProps:{checked:Array.isArray(t.inputValue)?t._i(t.inputValue,null)>-1:t.inputValue},on:{focus:t._onFocus,blur:t._onBlur,input:function(e){return e.stopPropagation(),t._onInput(e)},compositionstart:t._onComposition,compositionend:t._onComposition,keyup:function(e){return e.stopPropagation(),t._onKeyup(e)},change:function(e){var n=t.inputValue,i=e.target,r=!!i.checked;if(Array.isArray(n)){var o=null,a=t._i(n,o);i.checked?a<0&&(t.inputValue=n.concat([o])):a>-1&&(t.inputValue=n.slice(0,a).concat(n.slice(a+1)))}else t.inputValue=r}}}):"radio"===t.inputType?n("input",{directives:[{name:"model",rawName:"v-model",value:t.inputValue,expression:"inputValue"}],ref:"input",attrs:{disabled:t.disabled,maxlength:t.maxlength,step:t.step,type:"radio"},domProps:{checked:t._q(t.inputValue,null)},on:{focus:t._onFocus,blur:t._onBlur,input:function(e){return e.stopPropagation(),t._onInput(e)},compositionstart:t._onComposition,compositionend:t._onComposition,keyup:function(e){return e.stopPropagation(),t._onKeyup(e)},change:function(e){t.inputValue=null}}}):n("input",{directives:[{name:"model",rawName:"v-model",value:t.inputValue,expression:"inputValue"}],ref:"input",attrs:{disabled:t.disabled,maxlength:t.maxlength,step:t.step,type:t.inputType},domProps:{value:t.inputValue},on:{focus:t._onFocus,blur:t._onBlur,input:[function(e){e.target.composing||(t.inputValue=e.target.value)},function(e){return e.stopPropagation(),t._onInput(e)}],compositionstart:t._onComposition,compositionend:t._onComposition,keyup:function(e){return e.stopPropagation(),t._onKeyup(e)}}}),n("div",{directives:[{name:"show",rawName:"v-show",value:!(t.composing||t.inputValue.length),expression:"!(composing || inputValue.length)"}],ref:"placeholder",staticClass:"input-placeholder",class:t.placeholderClass,style:t.placeholderStyle},[t._v(t._s(t.placeholder))])])])},r=[],o=n("8af1"),a=["text","number","idcard","digit","password"],s={name:"Input",mixins:[o["a"]],model:{prop:"value",event:"update:value"},props:{name:{type:String,default:""},value:{type:[String,Number],default:""},type:{type:String,default:"text"},password:{type:[Boolean,String],default:!1},placeholder:{type:String,default:""},placeholderStyle:{type:String,default:""},placeholderClass:{type:String,default:""},disabled:{type:[Boolean,String],default:!1},maxlength:{type:[Number,String],default:140},focus:{type:[Boolean,String],default:!1},confirmType:{type:String,default:"done"}},data:function(){return{inputValue:this.value+"",composing:!1,wrapperHeight:0}},computed:{inputType:function(){var t="";switch(this.type){case"text":"search"===this.confirmType&&(t="search");break;case"idcard":t="text";break;case"digit":t="number";break;default:t=~a.indexOf(this.type)?this.type:"text";break}return this.password?"password":t},step:function(){return~["digit","number"].indexOf(this.type)?"0.000000000000000001":""}},watch:{focus:function(t){t&&this._focusInput()},value:function(t){this.inputValue=t+""},inputValue:function(t){this.$emit("update:value",t)},maxlength:function(t){var e=this.realValue.slice(0,t);e!==this.inputValue&&(this.inputValue=e)}},created:function(){this.$dispatch("Form","uni-form-group-update",{type:"add",vm:this})},mounted:function(){if(this._initInputStyle(),"search"===this.confirmType){var t=document.createElement("form");t.action="",t.onsubmit=function(){return!1},t.appendChild(this.$refs.input),this.$refs.wrapper.appendChild(t)}this.focus&&this._focusInput()},beforeDestroy:function(){this.$dispatch("Form","uni-form-group-update",{type:"remove",vm:this})},methods:{_initInputStyle:function(){var t=this.$refs.wrapper,e=window.getComputedStyle(t),n=t.getBoundingClientRect(),i=this.$refs.input,r=this.$refs.placeholder,o=n.height-(parseFloat(e.borderTopWidth,10)+parseFloat(e.borderBottomWidth,10));o!==this.wrapperHeight&&(i.style.height="".concat(o,"px"),i.style.lineHeight="".concat(o,"px"),this.wrapperHeight=o),i.style.color=e.color,r.style.height="".concat(o,"px"),r.style.lineHeight="".concat(o,"px")},_onKeyup:function(t){13===t.keyCode&&this.$trigger("confirm",t,{value:t.target.value})},_onInput:function(t){if(!this.composing){var e=t.target.value;this.inputValue=e,this.$trigger("input",t,{value:e})}},_onFocus:function(t){this.$trigger("focus",t,{value:t.target.value})},_onBlur:function(t){this.$trigger("blur",t,{value:t.target.value})},_focusInput:function(){var t=this;setTimeout(function(){t.$refs.input.focus()},350)},_blurInput:function(){var t=this;setTimeout(function(){t.$refs.input.blur()},350)},_onComposition:function(t){"compositionstart"===t.type?this.composing=!0:this.composing=!1},_resetFormData:function(){this.inputValue=""},_getFormData:function(){return this.name?{value:this.inputValue,key:this.name}:{}}}},c=s,u=(n("0f55"),n("0c7c")),l=Object(u["a"])(c,i,r,!1,null,null,null);l.options.__file="index.vue";e["default"]=l.exports},"25ce":function(t,e,n){"use strict";n.r(e);var i=function(){var t=this,e=t.$createElement,n=t._self._c||e;return n("uni-checkbox-group",t._g({},t.$listeners),[t._t("default")],2)},r=[],o=n("8af1"),a={name:"CheckboxGroup",mixins:[o["a"],o["c"]],props:{name:{type:String,default:""}},data:function(){return{checkboxList:[]}},listeners:{"@checkbox-change":"_changeHandler","@checkbox-group-update":"_checkboxGroupUpdateHandler"},created:function(){this.$dispatch("Form","uni-form-group-update",{type:"add",vm:this})},beforeDestroy:function(){this.$dispatch("Form","uni-form-group-update",{type:"remove",vm:this})},methods:{_changeHandler:function(t){var e=[];this.checkboxList.forEach(function(t){t.checkboxChecked&&e.push(t.value)}),this.$trigger("change",t,{value:e})},_checkboxGroupUpdateHandler:function(t){if("add"===t.type)this.checkboxList.push(t.vm);else{var e=this.checkboxList.indexOf(t.vm);this.checkboxList.splice(e,1)}},_getFormData:function(){var t={};if(""!==this.name){var e=[];this.checkboxList.forEach(function(t){t.checkboxChecked&&e.push(t.value)}),t["value"]=e,t["key"]=this.name}return t}}},s=a,c=(n("0998"),n("0c7c")),u=Object(c["a"])(s,i,r,!1,null,null,null);u.options.__file="index.vue";e["default"]=u.exports},2604:function(t,e,n){"use strict";n.r(e),n.d(e,"openDocument",function(){return i});var i={filePath:{type:String,required:!0},fileType:{type:String}}},2608:function(t,e,n){"use strict";(function(t){function i(e){return function(){try{return e.apply(e,arguments)}catch(n){t.error(n)}}}function r(e){return function(){try{return e.apply(e,arguments)}catch(n){t.error(n)}}}n.d(e,"b",function(){return i}),n.d(e,"a",function(){return r})}).call(this,n("3ad9")["default"])},2765:function(t,e,n){"use strict";var i=n("91ce"),r=n.n(i);r.a},"27a7":function(t,e,n){"use strict";(function(t){n.d(e,"a",function(){return g}),n.d(e,"b",function(){return T}),n.d(e,"d",function(){return x}),n.d(e,"c",function(){return C});var i=n("f2b3"),r=n("2608"),o=n("15a0"),a=n("de29");function s(e,n,i){var r="".concat(n,":fail ").concat(e);if(t.error(r),-1===i)throw new Error(r);return"number"===typeof i&&g(i,{errMsg:r}),!1}var c=[{name:"callback",type:Function,required:!0}];function u(t,e,n){var r=o["default"][t];if(!r&&_(t)&&(r=c),r){if(Array.isArray(r)&&Array.isArray(e)){var u=Object.create(null),l=Object.create(null),d=e.length;r.forEach(function(t,n){u[t.name]=t,d>n&&(l[t.name]=e[n])}),r=u,e=l}if(Object(i["d"])(r.beforeValidate)){var h=r.beforeValidate(e);if(h)return s(h,t,n)}for(var f=Object.keys(r),p=0;p1&&void 0!==arguments[1]?arguments[1]:{},n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};if(!Object(i["e"])(e))return{params:e};e=Object.assign({},e);var o={};for(var a in e){var s=e[a];Object(i["d"])(s)&&(o[a]=Object(r["a"])(s),delete e[a])}var c=o.success,u=o.fail,h=o.cancel,f=o.complete,p=Object(i["d"])(c),g=Object(i["d"])(u),v=Object(i["d"])(h),m=Object(i["d"])(f);if(!p&&!g&&!v&&!m)return{params:e};var b={};for(var y in n){var _=n[y];Object(i["d"])(_)&&(b[y]=Object(r["b"])(_),delete n[y])}var w=b.beforeSuccess,k=b.afterSuccess,S=b.beforeFail,T=b.afterFail,x=b.beforeCancel,C=b.afterCancel,M=b.afterAll,O=l++,E="api."+t+"."+O,A=function(e){e.errMsg=e.errMsg||t+":ok";var n=e.errMsg;0===n.indexOf(t+":ok")?(Object(i["d"])(w)&&w(e),p&&c(e),Object(i["d"])(k)&&k(e)):0===n.indexOf(t+":cancel")?(e.errMsg=e.errMsg.replace(t+":cancel",t+":fail cancel"),g&&u(e),Object(i["d"])(x)&&x(e),v&&h(e),Object(i["d"])(C)&&C(e)):0===n.indexOf(t+":fail")&&(Object(i["d"])(S)&&S(e),g&&u(e),Object(i["d"])(T)&&T(e)),m&&f(e),Object(i["d"])(M)&&M(e)};return d[O]={name:E,callback:A},{params:e,callbackId:O}}function p(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},r=f(t,e,n),o=r.params,a=r.callbackId;return Object(i["e"])(o)&&!u(t,o,a)?{params:o,callbackId:!1}:{params:o,callbackId:a}}function g(t,e){if("number"===typeof t){var n=d[t];if(n)return n.keepAlive||delete d[t],n.callback(e)}return e}var v=/hideKeyboard|upx2px|canIUse|^create|Sync$|Manager$/,m=["request","downloadFile","uploadFile","connectSocket"],b=/^on/;function y(t){return v.test(t)}function _(t){return b.test(t)}function w(t){return-1!==m.indexOf(t)}function k(t){return t.then(function(t){return[null,t]}).catch(function(t){return[t]})}function S(t){return!y(t)&&!_(t)}function T(t,e){return S(t)?function(){for(var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},n=arguments.length,r=new Array(n>1?n-1:0),o=1;o0&&(r.currentTime=e)}),r.addEventListener("progress",function(t){var e=r.buffered;e.length&&(n.buffered=e.end(e.length-1)/r.duration)}),r.addEventListener("waiting",function(t){n.$trigger("waiting",t,{})}),r.addEventListener("error",function(t){n.playing=!1,n.$trigger("error",t,{})}),r.addEventListener("play",function(t){n.start=!0,n.playing=!0,n.fullscreenTriggering||n.$trigger("play",t,{})}),r.addEventListener("pause",function(t){n.playing=!1,n.fullscreenTriggering||n.$trigger("pause",t,{})}),r.addEventListener("ended",function(t){n.playing=!1,n.$trigger("ended",t,{})}),r.addEventListener("timeupdate",function(t){var e=n.currentTime=r.currentTime,o=r.duration,a=i.danmuIndex,s={time:e,index:a.index},c=i.danmuList;if(e>a.time)for(var u=a.index+1;u=(l.time||0)))break;s.index=u,n.playing&&n.enableDanmuSync&&n.playDanmu(l)}else if(e-1;d--){var h=c[d];if(!(e<=(h.time||0)))break;s.index=d-1}i.danmuIndex=s,n.$trigger("timeupdate",{},{currentTime:e,duration:o})});var a,c=!0;function u(i){var r=n.getScreenXY(i.targetTouches[0]),o=r.pageX,s=r.pageY;if(c&&Math.abs(o-t)100&&(d=100),n.progress=d,i.preventDefault(),i.stopPropagation()}}function l(t){n.controlsTouching=!1,n.touching&&(o.removeEventListener("touchmove",u,s),c||(t.preventDefault(),t.stopPropagation(),n.seek(n.$refs.video.duration*n.progress/100)),n.touching=!1)}o.addEventListener("touchstart",function(i){n.controlsTouching=!0;var r=n.getScreenXY(i.targetTouches[0]);t=r.pageX,e=r.pageY,a=n.progress,c=!0,n.touching=!0,o.addEventListener("touchmove",u,s)}),o.addEventListener("touchend",l),o.addEventListener("touchcancel",l),String(this.src).length&&this.autoplay&&r.play()},beforeDestroy:function(){this.$refs.container.remove(),clearTimeout(this.otherData.hideTiming)},methods:{_handleSubscribe:function(t){var e=t.type,n=t.data,i=void 0===n?{}:n;switch(e){case"play":this.play();break;case"pause":this.pause();break;case"seek":this.seek(i.position);break;case"sendDanmu":this.sendDanmu(i);break;case"playbackRate":this.$refs.video.playbackRate=i.rate;break;case"requestFullScreen":this.enterFullscreen();break;case"exitFullScreen":this.leaveFullscreen();break}},resize:function(){var t=window.innerWidth,e=window.innerHeight,n=Math.abs(this.directionSync);this.rotateType=0===n?t>e?"left":"":90===n?t>e?"":"right":"",this.rotateType?(this.width=e+"px",this.height=t+"px"):(this.width=t+"px",this.height=e+"px")},trigger:function(){this.playing?this.$refs.video.pause():this.$refs.video.play()},play:function(){this.start=!0,this.$refs.video.play()},pause:function(){this.$refs.video.pause()},seek:function(t){t=Number(t),"number"!==typeof t||isNaN(t)||(this.$refs.video.currentTime=t)},clickProgress:function(t){var e=t.offsetX,n=this.$refs.progress,i=t.target;while(i!==n)e+=i.offsetLeft,i=i.parentNode;var r=n.offsetWidth,o=0;e>=0&&e<=r&&(o=e/r,this.seek(this.$refs.video.duration*o))},triggerDanmu:function(){this.enableDanmuSync=!this.enableDanmuSync},playDanmu:function(t){var e=document.createElement("p");e.className="uni-video-danmu-item",e.innerText=t.text;var n="bottom: ".concat(100*Math.random(),"%;color: ").concat(t.color,";");e.setAttribute("style",n),this.$refs.danmu.appendChild(e),setTimeout(function(){n+="left: 0;-webkit-transform: translateX(-100%);transform: translateX(-100%);",e.setAttribute("style",n),setTimeout(function(){e.remove()},4e3)},17)},sendDanmu:function(t){var e=this.otherData;e.danmuList.splice(e.danmuIndex.index+1,0,{text:String(t.text),color:t.color,time:this.$refs.video.currentTime||0})},triggerFullscreen:function(){this.fullscreen=!this.fullscreen},enterFullscreen:function(t){var e=Number(t);isNaN(NaN)||(this.directionSync=e),this.fullscreen=!0},leaveFullscreen:function(){this.fullscreen=!1},triggerControls:function(){this.controlsVisible=!this.controlsVisible},touchstart:function(t){var e=this.getScreenXY(t.targetTouches[0]);this.touchStartOrigin={x:e.pageX,y:e.pageY},this.gestureType=c.NONE,this.volumeOld=null,this.currentTimeOld=this.currentTimeNew=0},touchmove:function(t){function e(){t.stopPropagation(),t.preventDefault()}this.fullscreen&&e();var n=this.gestureType;if(n!==c.STOP){var i=this.getScreenXY(t.targetTouches[0]),r=i.pageX,o=i.pageY,a=this.touchStartOrigin;if(n===c.PROGRESS?this.changeProgress(r-a.x):n===c.VOLUME&&this.changeVolume(o-a.y),n===c.NONE)if(Math.abs(r-a.x)>Math.abs(o-a.y)){if(!this.enableProgressGesture)return void(this.gestureType=c.STOP);this.gestureType=c.PROGRESS,this.currentTimeOld=this.currentTimeNew=this.$refs.video.currentTime,this.fullscreen||e()}else{if(!this.pageGesture)return void(this.gestureType=c.STOP);this.gestureType=c.VOLUME,this.volumeOld=this.$refs.video.volume,this.fullscreen||e()}}},touchend:function(t){this.gestureType!==c.NONE&&this.gestureType!==c.STOP&&(t.stopPropagation(),t.preventDefault()),this.gestureType===c.PROGRESS&&this.currentTimeOld!==this.currentTimeNew&&(this.$refs.video.currentTime=this.currentTimeNew),this.gestureType=c.NONE},changeProgress:function(t){var e=this.$refs.video.duration,n=t/600*e+this.currentTimeOld;n<0?n=0:n>e&&(n=e),this.currentTimeNew=n},changeVolume:function(t){var e,n=this.volumeOld;"number"===typeof n&&(e=n-t/200,e<0?e=0:e>1&&(e=1),this.$refs.video.volume=e,this.volumeNew=e)},autoHideStart:function(){var t=this;this.otherData.hideTiming=setTimeout(function(){t.controlsVisible=!1},3e3)},autoHideEnd:function(){var t=this.otherData;t.hideTiming&&(clearTimeout(t.hideTiming),t.hideTiming=null)},getScreenXY:function(t){var e=this.rotateType;if(!this.fullscreen||!e)return t;var n,i,r=screen.width,o=screen.height,a=t.pageX,s=t.pageY;return"left"===e?(n=o-s,i=a):(n=s,i=r-a),{pageX:n,pageY:i}},updateProgress:function(){this.touching||(this.progress=this.currentTime/this.durationTime*100)}}},l=u,d=(n("856e"),n("0c7c")),h=Object(d["a"])(l,i,r,!1,null,null,null);h.options.__file="index.vue";e["default"]=h.exports},"33ab":function(t,e,n){},"33ed":function(t,e,n){"use strict";(function(t){n.d(e,"b",function(){return r}),n.d(e,"c",function(){return o}),n.d(e,"a",function(){return a});var i=n("4a59");function r(t){t.preventDefault()}function o(t){var e=t.scrollTop,n=t.duration,i=document.documentElement,r=i.clientHeight,o=i.scrollHeight;function a(t){if(t<=0)window.scrollTo(0,e);else{var n=e-window.scrollY;requestAnimationFrame(function(){window.scrollTo(0,window.scrollY+n/t*10),a(t-10)})}}e=Math.min(e,o-r),0!==n?window.scrollY!==e&&a(n):i.scrollTop=e}function a(e,n){var r=n.enablePageScroll,o=n.enablePageReachBottom,a=n.onReachBottomDistance,s=n.enableTransparentTitleNView,c=!1,u=!1,l=!0;function d(){var t=document.documentElement,e=t.clientHeight,n=t.scrollHeight,i=window.scrollY,r=i>0&&n>e&&i+e+a>=n;return r&&!u?(u=!0,!0):(!r&&u&&(u=!1),!1)}function h(){var n=window.pageYOffset;r&&Object(i["a"])("onPageScroll",{scrollTop:n},e),s&&t.emit("onPageScroll",{scrollTop:n}),o&&l&&d()&&(Object(i["a"])("onReachBottom",{},e),l=!1,setTimeout(function(){l=!0},350)),c=!1}return function(){c||requestAnimationFrame(h),c=!0}}}).call(this,n("501c"))},3858:function(t,e,n){"use strict";n.r(e),n.d(e,"setStorage",function(){return i}),n.d(e,"setStorageSync",function(){return r});var i={key:{type:String,required:!0},data:{required:!0}},r=[{name:"key",type:String,required:!0},{name:"data",required:!0}]},"3ad9":function(t,e,n){"use strict";n.r(e),function(t){var n=Array.prototype.unshift;function i(t){return n.call(t,"[system]"),t}function r(e){return function(){var n=!0;"debug"!==e||__uniConfig.debug||(n=!1),n&&t.console[e].apply(t.console,i(arguments))}}e["default"]={log:r("log"),info:r("info"),warn:r("warn"),debug:r("debug"),error:r("error")}}.call(this,n("24aa"))},"3d1f":function(t,e,n){"use strict";(function(t){n.d(e,"a",function(){return l});var i=n("62b5"),r=n("a741");function o(e){return function(n,i){var o=getCurrentPages(),a=o.find(function(t){return t.$page.id===i});a?Object(r["b"])(a,e,n):t.error("Not Found:Page[".concat(i,"]"))}}var a=Object(i["a"])("requestComponentInfo");function s(t){var e=t.reqId,n=t.res,i=a.pop(e);i&&i(n)}var c=Object(i["a"])("requestComponentObserver");function u(t){var e=t.reqId,n=t.reqEnd,i=t.res,r=c.get(e);r&&(n&&c.pop(e),r(i))}function l(t){t("onPageReady",o("onReady")),t("onPageScroll",o("onPageScroll")),t("onReachBottom",o("onReachBottom")),t("onRequestComponentInfo",s),t("onRequestComponentObserver",u)}}).call(this,n("3ad9")["default"])},"3d64":function(t,e,n){"use strict";n.r(e),function(t){n.d(e,"onNetworkStatusChange",function(){return c}),n.d(e,"getNetworkType",function(){return u});var i=t,r=i.invokeCallbackHandler,o=[];function a(){var t=navigator.connection.type,e="";if(~["none","wifi","unknown"].indexOf(t))e=t;else{var n=navigator.connection.effectiveType;"slow-2g"===n&&(n="2g"),e=n}return e}function s(){var t=!0,e=a();"none"===e&&(t=!1),o.forEach(function(n){n&&r(n,{errMsg:"onNetworkStatusChange:ok",isConnected:t,networkType:e})})}function c(t){window.NetworkInformation?(o.push(t),navigator.connection.onchange=s):t&&r(t,{errMsg:"onNetworkStatusChange:fail"})}function u(){return window.NetworkInformation?{errMsg:"getNetworkType:ok",networkType:a()}:{errMsg:"getNetworkType:fail"}}}.call(this,n("0dd1"))},"3da9":function(t,e,n){"use strict";var i=n("33ab"),r=n.n(i);r.a},"3f7e":function(t,e,n){"use strict";var i=n("1a33"),r=n.n(i);r.a},4043:function(t,e,n){"use strict";n.r(e),n.d(e,"setNavigationBarColor",function(){return r}),n.d(e,"setNavigationBarTitle",function(){return o});var i=["#ffffff","#000000"],r={frontColor:{type:String,required:!0,validator:function(t,e){if(-1===i.indexOf(t))return'invalid frontColor "'.concat(t,'"')}},backgroundColor:{type:String,required:!0},animation:{type:Object,default:function(){return{duration:0,timingFunc:"linear"}},validator:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},e=arguments.length>1?arguments[1]:void 0;e.animation={duration:t.duration||0,timingFunc:t.timingFunc||"linear"}}}},o={title:{type:String,required:!0}}},4062:function(t,e,n){"use strict";n.r(e),function(t){function i(t,e,n){return e in t?Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[e]=n,t}n.d(e,"showModal",function(){return s}),n.d(e,"showToast",function(){return c}),n.d(e,"hideToast",function(){return u}),n.d(e,"showLoading",function(){return l}),n.d(e,"hideLoading",function(){return d}),n.d(e,"showActionSheet",function(){return h});var r=t,o=r.emit,a=r.invokeCallbackHandler;function s(t,e){o("onShowModal",t,function(t){a(e,i({},t,!0))})}function c(t){return o("onShowToast",t),{}}function u(){return o("onHideToast"),{}}function l(t){return o("onShowToast",t),{}}function d(){return o("onHideToast"),{}}function h(t,e){o("onShowActionSheet",t,function(t){a(e,-1===t?{errMsg:"showActionSheet:fail cancel"}:{tapIndex:t})})}}.call(this,n("0dd1"))},"40ab":function(t,e,n){"use strict";n.r(e),n.d(e,"redirectTo",function(){return s}),n.d(e,"reLaunch",function(){return c}),n.d(e,"navigateTo",function(){return u}),n.d(e,"switchTab",function(){return l}),n.d(e,"navigateBack",function(){return d});var i=n("0f74");function r(t){if("string"===typeof t){var e=t.split("?");t=e[0];var n=[];return(e[1]||"").split("&").forEach(function(t){if(t){var e=t.split("=");n.push(e[0]+"="+encodeURIComponent(e[1]))}}),n.length?t+"?"+n.join("&"):t}return t}function o(t){return function(e,n){e=Object(i["a"])(e);var o=e.split("?")[0],a=__uniRoutes.find(function(t){var e=t.path,n=t.alias;return e===o||n===o});if(!a)return"page `"+e+"` is not found";if("navigateTo"===t||"redirectTo"===t){if(a.meta.isTabBar)return"can not ".concat(t," a tabbar page")}else if("switchTab"===t&&!a.meta.isTabBar)return"can not switch to no-tabBar page";a.meta.isTabBar&&(e=o),a.meta.isEntry&&(e=e.replace(a.alias,"/")),n.url=r(e)}}function a(t){return{url:{type:String,required:!0,validator:o(t)}}}var s=a("redirectTo"),c=a("reLaunch"),u=a("navigateTo"),l=a("switchTab"),d={delta:{type:Number,validator:function(t,e){t=parseInt(t)||1,e.delta=Math.min(getCurrentPages().length-1,t)}}}},"439a":function(t,e,n){"use strict";n.r(e),n.d(e,"downloadFile",function(){return i});var i={url:{type:String,required:!0},header:{type:Object,validator:function(t,e){e.header=t||{}}}}},"44de":function(t,e,n){"use strict";n.r(e),n.d(e,"vibrateLong",function(){return r}),n.d(e,"vibrateShort",function(){return o});var i=!!window.navigator.vibrate;function r(){return i&&window.navigator.vibrate(400)?{errMsg:"vibrateLong:ok"}:{errMsg:"vibrateLong:fail"}}function o(){return i&&window.navigator.vibrate(15)?{errMsg:"vibrateShort:ok"}:{errMsg:"vibrateShort:fail"}}},4509:function(t,e,n){},4656:function(t,e,n){},4871:function(t,e,n){},"487a":function(t,e,n){"use strict";(function(t){var i=n("8af1"),r=["navigate","redirect","switchTab","reLaunch","navigateBack"];e["a"]={name:"Navigator",mixins:[i["b"]],props:{hoverClass:{type:String,default:"navigator-hover"},url:{type:String,default:""},openType:{type:String,default:"navigate",validator:function(t){return~r.indexOf(t)}},delta:{type:Number,default:1},hoverStartTime:{type:Number,default:20},hoverStayTime:{type:Number,default:600}},methods:{_onClick:function(e){if(this.url)switch(this.openType){case"navigate":uni.navigateTo({url:this.url});break;case"redirect":uni.redirectTo({url:this.url});break;case"switchTab":uni.switchTab({url:this.url});break;case"reLaunch":uni.reLaunch({url:this.url});break;case"navigateBack":uni.navigateBack({url:this.delta});break;default:break}else t.error(" should have url attribute when using navigateTo, redirectTo, reLaunch or switchTab")}}}}).call(this,n("3ad9")["default"])},"4a59":function(t,e,n){"use strict";(function(t){function i(e,n,i){t.UniServiceJSBridge.subscribeHandler(e,n,i)}n.d(e,"a",function(){return i})}).call(this,n("24aa"))},"4ca9":function(t,e,n){"use strict";(function(t){var i=n("8aec"),r=n("f2b3"),o=!!r["g"]&&{passive:!0};e["a"]={name:"ScrollView",mixins:[i["a"]],props:{scrollX:{type:[Boolean,String],default:!1},scrollY:{type:[Boolean,String],default:!1},upperThreshold:{type:[Number,String],default:50},lowerThreshold:{type:[Number,String],default:50},scrollTop:{type:[Number,String],default:0},scrollLeft:{type:[Number,String],default:0},scrollIntoView:{type:String,default:""},scrollWithAnimation:{type:[Boolean,String],default:!1},enableBackToTop:{type:[Boolean,String],default:!1}},data:function(){return{lastScrollTop:this.scrollTopNumber,lastScrollLeft:this.scrollLeftNumber,lastScrollToUpperTime:0,lastScrollToLowerTime:0}},computed:{upperThresholdNumber:function(){var t=Number(this.upperThreshold);return isNaN(t)?50:t},lowerThresholdNumber:function(){var t=Number(this.lowerThreshold);return isNaN(t)?50:t},scrollTopNumber:function(){return Number(this.scrollTop)||0},scrollLeftNumber:function(){return Number(this.scrollLeft)||0}},watch:{scrollTopNumber:function(t){this._scrollTopChanged(t)},scrollLeftNumber:function(t){this._scrollLeftChanged(t)},scrollIntoView:function(t){this._scrollIntoViewChanged(t)}},mounted:function(){var t=this;this._attached=!0,this._scrollTopChanged(this.scrollTopNumber),this._scrollLeftChanged(this.scrollLeftNumber),this._scrollIntoViewChanged(this.scrollIntoView),this.__handleScroll=function(e){event.preventDefault(),event.stopPropagation(),t._handleScroll.bind(t,event)()};var e=null,n=null;this.__handleTouchMove=function(i){var r=i.touches[0].pageX,o=i.touches[0].pageY,a=t.$refs.main;if(null===n)if(Math.abs(r-e.x)>Math.abs(o-e.y))if(t.scrollX){if(0===a.scrollLeft&&r>e.x)return void(n=!1);if(a.scrollWidth===a.offsetWidth+a.scrollLeft&&re.y)return void(n=!1);if(a.scrollHeight===a.offsetHeight+a.scrollTop&&on.scrollWidth-n.offsetWidth?t=n.scrollWidth-n.offsetWidth:"y"===e&&t>n.scrollHeight-n.offsetHeight&&(t=n.scrollHeight-n.offsetHeight);var i=0,r="";"x"===e?i=n.scrollLeft-t:"y"===e&&(i=n.scrollTop-t),0!==i&&(this.$refs.content.style.transition="transform .3s ease-out",this.$refs.content.style.webkitTransition="-webkit-transform .3s ease-out","x"===e?r="translateX("+i+"px) translateZ(0)":"y"===e&&(r="translateY("+i+"px) translateZ(0)"),this.$refs.content.removeEventListener("transitionend",this.__transitionEnd),this.$refs.content.removeEventListener("webkitTransitionEnd",this.__transitionEnd),this.__transitionEnd=this._transitionEnd.bind(this,t,e),this.$refs.content.addEventListener("transitionend",this.__transitionEnd),this.$refs.content.addEventListener("webkitTransitionEnd",this.__transitionEnd),"x"===e?n.style.overflowX="hidden":"y"===e&&(n.style.overflowY="hidden"),this.$refs.content.style.transform=r,this.$refs.content.style.webkitTransform=r)},_handleTrack:function(t){if("start"===t.detail.state)return this._x=t.detail.x,this._y=t.detail.y,void(this._noBubble=null);"end"===t.detail.state&&(this._noBubble=!1),null===this._noBubble&&this.scrollY&&(Math.abs(this._y-t.detail.y)/Math.abs(this._x-t.detail.x)>1?this._noBubble=!0:this._noBubble=!1),null===this._noBubble&&this.scrollX&&(Math.abs(this._x-t.detail.x)/Math.abs(this._y-t.detail.y)>1?this._noBubble=!0:this._noBubble=!1),this._x=t.detail.x,this._y=t.detail.y,this._noBubble&&t.stopPropagation()},_handleScroll:function(t){if(!(t.timeStamp-this._lastScrollTime<20)){this._lastScrollTime=t.timeStamp;var e=t.target;this.$trigger("scroll",t,{scrollLeft:e.scrollLeft,scrollTop:e.scrollTop,scrollHeight:e.scrollHeight,scrollWidth:e.scrollWidth,deltaX:this.lastScrollLeft-e.scrollLeft,deltaY:this.lastScrollTop-e.scrollTop}),this.scrollY&&(e.scrollTop<=this.upperThresholdNumber&&this.lastScrollTop-e.scrollTop>0&&t.timeStamp-this.lastScrollToUpperTime>200&&(this.$trigger("scrolltoupper",t,{direction:"top"}),this.lastScrollToUpperTime=t.timeStamp),e.scrollTop+e.offsetHeight+this.lowerThresholdNumber>=e.scrollHeight&&this.lastScrollTop-e.scrollTop<0&&t.timeStamp-this.lastScrollToLowerTime>200&&(this.$trigger("scrolltolower",t,{direction:"bottom"}),this.lastScrollToLowerTime=t.timeStamp)),this.scrollX&&(e.scrollLeft<=this.upperThresholdNumber&&this.lastScrollLeft-e.scrollLeft>0&&t.timeStamp-this.lastScrollToUpperTime>200&&(this.$trigger("scrolltoupper",t,{direction:"left"}),this.lastScrollToUpperTime=t.timeStamp),e.scrollLeft+e.offsetWidth+this.lowerThresholdNumber>=e.scrollWidth&&this.lastScrollLeft-e.scrollLeft<0&&t.timeStamp-this.lastScrollToLowerTime>200&&(this.$trigger("scrolltolower",t,{direction:"right"}),this.lastScrollToLowerTime=t.timeStamp)),this.lastScrollTop=e.scrollTop,this.lastScrollLeft=e.scrollLeft}},_scrollTopChanged:function(t){this.scrollY&&(this._innerSetScrollTop?this._innerSetScrollTop=!1:this.scrollWithAnimation?this.scrollTo(t,"y"):this.$refs.main.scrollTop=t)},_scrollLeftChanged:function(t){this.scrollX&&(this._innerSetScrollLeft?this._innerSetScrollLeft=!1:this.scrollWithAnimation?this.scrollTo(t,"x"):this.$refs.main.scrollLeft=t)},_scrollIntoViewChanged:function(e){if(e){if(!/^[_a-zA-Z][-_a-zA-Z0-9:]*$/.test(e))return t.group('scroll-into-view="'+e+'" 有误'),t.error("id 属性值格式错误。如不能以数字开头。"),void t.groupEnd();var n=this.$el.querySelector("#"+e);if(n){var i=this.$refs.main.getBoundingClientRect(),r=n.getBoundingClientRect();if(this.scrollX){var o=r.left-i.left,a=this.$refs.main.scrollLeft,s=a+o;this.scrollWithAnimation?this.scrollTo(s,"x"):this.$refs.main.scrollLeft=s}if(this.scrollY){var c=r.top-i.top,u=this.$refs.main.scrollTop,l=u+c;this.scrollWithAnimation?this.scrollTo(l,"y"):this.$refs.main.scrollTop=l}}}},_transitionEnd:function(t,e){this.$refs.content.style.transition="",this.$refs.content.style.webkitTransition="",this.$refs.content.style.transform="",this.$refs.content.style.webkitTransform="";var n=this.$refs.main;"x"===e?(n.style.overflowX=this.scrollX?"auto":"hidden",n.scrollLeft=t):"y"===e&&(n.style.overflowY=this.scrollY?"auto":"hidden",n.scrollTop=t),this.$refs.content.removeEventListener("transitionend",this.__transitionEnd),this.$refs.content.removeEventListener("webkitTransitionEnd",this.__transitionEnd)},getScrollPosition:function(){var t=this.$refs.main;return{scrollLeft:t.scrollLeft,scrollTop:t.scrollTop}}}}}).call(this,n("3ad9")["default"])},"4ca94":function(t,e,n){"use strict";n.r(e),function(t){var i=n("6389"),r=n.n(i),o=n("f2b3"),a=n("85b6"),s=n("abbf"),c=n("0784");function u(t){var e=0;return t.forEach(function(t){t.meta.id&&e++}),e}function l(){var t=window.location.href,e=t.indexOf("#");return-1===e?"":decodeURI(t.slice(e+1))}function d(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"/",e=decodeURI(window.location.pathname);return t&&0===e.indexOf(t)&&(e=e.slice(t.length)),(e||"/")+window.location.search+window.location.hash}e["default"]={install:function(e){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},i=n.routes,h=u(i),f=new r.a({id:h,mode:__uniConfig.router.mode,base:__uniConfig.router.base,routes:i,scrollBehavior:function(t,e,n){return n||{x:0,y:0}}}),p=[],g=f.match("history"===__uniConfig.router.mode?d(__uniConfig.router.base):l());g.meta.name&&(g.meta.id?p.push(g.meta.name+"-"+g.meta.id):p.push(g.meta.name+"-"+(h+1))),g.meta&&g.meta.name&&(document.body.className="uni-body "+g.meta.name),e.mixin({beforeCreate:function(){var e=this.$options;if("app"===e.mpType){e.data=function(){return{keepAliveInclude:p}};var n=Object(s["a"])(i,g);Object.keys(n).forEach(function(t){e[t]=e[t]?[].concat(n[t],e[t]):[n[t]]}),e.router=f,Object(o["d"])(e.onError)||(e.onError=function(e){t.error(e)})}else if(Object(a["a"])(this)){var r=Object(c["a"])();Object.keys(r).forEach(function(t){e[t]=e[t]?[].concat(r[t],e[t]):[r[t]]})}else this.$parent&&this.$parent.__page__&&(this.__page__=this.$parent.__page__)}}),Object.defineProperty(e.prototype,"$page",{get:function(){return this.__page__}}),e.use(r.a)}}}.call(this,n("3ad9")["default"])},"4da7":function(t,e,n){"use strict";n.r(e);var i,r,o={ensp:" ",emsp:" ",nbsp:" "},a={name:"Text",props:{selectable:{type:[Boolean,String],default:!1},space:{type:String,default:""},decode:{type:[Boolean,String],default:!1}},methods:{_decodeHtml:function(t){return this.space&&o[this.space]&&(t=t.replace(/ /g,o[this.space])),this.decode&&(t=t.replace(/ /g,o.nbsp).replace(/ /g,o.ensp).replace(/ /g,o.emsp).replace(/</g,"<").replace(/>/g,">").replace(/&/g,"&").replace(/"/g,'"').replace(/'/g,"'")),t}},render:function(t){var e=this,n=[];return this.$slots.default&&this.$slots.default.forEach(function(i){if(i.text){var r=i.text.replace(/\\n/g,"\n"),o=r.split("\n");o.forEach(function(i,r){n.push(e._decodeHtml(i)),r!==o.length-1&&n.push(t("br"))})}else n.push(i)}),t("uni-text",{on:this.$listeners},[t("span",{},n)])}},s=a,c=(n("c8ed"),n("0c7c")),u=Object(c["a"])(s,i,r,!1,null,null,null);u.options.__file="index.vue";e["default"]=u.exports},"4f1c":function(t,e,n){"use strict";n.r(e);var i=function(){var t=this,e=t.$createElement,n=t._self._c||e;return n("uni-switch",t._g({on:{click:t._onClick}},t.$listeners),[n("div",{staticClass:"uni-switch-wrapper"},[n("div",{directives:[{name:"show",rawName:"v-show",value:"switch"===t.type,expression:"type === 'switch'"}],staticClass:"uni-switch-input",class:[t.switchChecked?"uni-switch-input-checked":""],style:{backgroundColor:t.switchChecked?t.color:"#DFDFDF",borderColor:t.switchChecked?t.color:"#DFDFDF"}}),n("div",{directives:[{name:"show",rawName:"v-show",value:"checkbox"===t.type,expression:"type === 'checkbox'"}],staticClass:"uni-checkbox-input",class:[t.switchChecked?"uni-checkbox-input-checked":""],style:{color:t.color}})])])},r=[],o=n("8af1"),a={name:"Switch",mixins:[o["a"],o["c"]],props:{name:{type:String,default:""},checked:{type:[Boolean,String],default:!1},type:{type:String,default:"switch"},id:{type:String,default:""},disabled:{type:[Boolean,String],default:!1},color:{type:String,default:"#007aff"}},data:function(){return{switchChecked:this.checked}},watch:{checked:function(t){this.switchChecked=t}},created:function(){this.$dispatch("Form","uni-form-group-update",{type:"add",vm:this})},beforeDestroy:function(){this.$dispatch("Form","uni-form-group-update",{type:"remove",vm:this})},listeners:{"label-click":"_onClick","@label-click":"_onClick"},methods:{_onClick:function(t){this.disabled||(this.switchChecked=!this.switchChecked,this.$trigger("change",t,{value:this.switchChecked}))},_resetFormData:function(){this.switchChecked=!1},_getFormData:function(){var t={};return""!==this.name&&(t["value"]=this.switchChecked,t["key"]=this.name),t}}},s=a,c=(n("a5ec"),n("0c7c")),u=Object(c["a"])(s,i,r,!1,null,null,null);u.options.__file="index.vue";e["default"]=u.exports},"4f43":function(t,e,n){"use strict";n.r(e),function(t){n.d(e,"DownloadTask",function(){return c}),n.d(e,"downloadFile",function(){return u});var i=n("54b7");function r(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function o(t,e){for(var n=0;nthis.displayMultipleItemsNumber}},watch:{vertical:function(){this._resetLayout()},circular:function(){this._resetLayout()},intervalNumber:function(t){this._timer&&(this._cancelSchedule(),this._scheduleAutoplay())},current:function(t){this._currentCheck()},currentSync:function(t){this._currentChanged(t),this.$emit("update:current",t)},currentItemId:function(t){this._currentCheck()},currentItemIdSync:function(t){this.$emit("update:currentItemId",t)},displayMultipleItemsNumber:function(){this._resetLayout()}},created:function(){this._invalid=!0,this._viewportPosition=0,this._viewportMoveRatio=1,this._animating=null,this._requestedAnimation=!1,this._userDirectionChecked=!1,this._contentTrackViewport=0,this._contentTrackSpeed=0,this._contentTrackT=0},mounted:function(){var t=this;this._currentCheck(),this.touchtrack(this.$refs.slidesWrapper,"_handleContentTrack",!0),this._resetLayout(),this.$watch(function(){return t.autoplay&&!t.userTracking},this._inintAutoplay),this._inintAutoplay(this.autoplay&&!this.userTracking),this.$watch("items.length",this._resetLayout)},beforeDestroy:function(){this._cancelSchedule()},methods:{_itemIdUpdated:function(t,e,n){n&&this.$set(this.itemIdItemMap,n,null),e&&this.$set(this.itemIdItemMap,e,t.$vnode)},_inintAutoplay:function(t){t?this._scheduleAutoplay():this._cancelSchedule()},_currentCheck:function(){var t=this.items.indexOf(this.itemIdItemMap[this.currentItemId]);t<0&&(t=Math.round(this.current)||0),t=t<0?0:t,this.currentSync=t},_itemReady:function(t,e){t.componentInstance&&t.componentInstance._isMounted?e():(t._callbacks=t._callbacks||[],t._callbacks.push(e))},_currentChanged:function(t){var e=this,n=this.currentChangeSource;this.currentChangeSource="",n||this._animateViewport(t,"",0);var i=this.items[t];i&&this._itemReady(i,function(){var t=e.currentItemIdSync=i.componentInstance.itemId||"";e.$trigger("change",{},{current:e.currentSync,currentItemId:t,source:n})})},_scheduleAutoplay:function(){var t=this;function e(){t._timer=null,t.currentChangeSource="autoplay",t.circularEnabled?t.currentSync=t._normalizeCurrentValue(t.currentSync+1):t.currentSync=t.currentSync+t.displayMultipleItemsNumbere-this.displayMultipleItemsNumber)return e-this.displayMultipleItemsNumber;return n},_upx2px:function(t){return/\d+[ur]px$/i.test(t)&&t.replace(/\d+[ur]px$/i,function(t){return"".concat(uni.upx2px(parseFloat(t)),"px")}),t||""},_resetLayout:function(){if(this._isMounted){this._cancelSchedule(),this._endViewportAnimation();for(var t=this.items,e=0;e0&&this._viewportMoveRatio<1||(this._viewportMoveRatio=1)}var r=this._viewportPosition;this._viewportPosition=-2;var o=this.currentSync;o>=0?(this._invalid=!1,this.userTracking?(this._updateViewport(r+o-this._contentTrackViewport),this._contentTrackViewport=o):this._updateViewport(o)):(this._invalid=!0,this._updateViewport(-this.displayMultipleItemsNumber-1))}},_checkCircularLayout:function(t){if(!this._invalid)for(var e=this.items,n=e.length,i=t+this.displayMultipleItemsNumber,r=0;rt;)o-=r}else if(n>0){for(;o>t;)o-=r;for(;o+rt;)o-=r;o+r-tr)&&(i<0?i=-o(-i):i>r&&(i=r+o(i-r)),e._contentTrackSpeed=0),e._updateViewport(i)}this.vertical?a(-t.dy/this.$refs.slideFrame.offsetHeight,-t.ddy/(this._contentTrackT-n)):a(-t.dx/this.$refs.slideFrame.offsetWidth,-t.ddx/(this._contentTrackT-n))},_handleTrackEnd:function(t){this.userTracking=!1;var e=this._contentTrackSpeed/Math.abs(this._contentTrackSpeed),n=0;!t&&Math.abs(this._contentTrackSpeed)>.2&&(n=.5*e);var i=this._normalizeCurrentValue(this._viewportPosition+n);t?this._updateViewport(this._contentTrackViewport):(this.currentChangeSource="touch",this.currentSync=i,this._animateViewport(i,"touch",0!==n?n:0===i&&this.circularEnabled&&this._viewportPosition>=1?1:0))},_handleContentTrack:function(t){if(!this._invalid){if("start"===t.detail.state)return this.userTracking=!0,this._userDirectionChecked=!1,this._handleTrackStart();if("end"===t.detail.state)return this._handleTrackEnd(!1);if("cancel"===t.detail.state)return this._handleTrackEnd(!0);if(this.userTracking){if(!this._userDirectionChecked){this._userDirectionChecked=!0;var e=Math.abs(t.detail.dx),n=Math.abs(t.detail.dy);if(e>=n&&this.vertical?this.userTracking=!1:e<=n&&!this.vertical&&(this.userTracking=!1),!this.userTracking)return}return this._handleTrackMove(t.detail),!1}}}},render:function(t){var e=this,n=[],i=0,r=[];this.$slots.default.forEach(function(o){o.componentOptions&&"v-uni-swiper-item"===o.componentOptions.tag&&(r.push(o),n.push(t("div",{class:{"uni-swiper-dot":!0,"uni-swiper-dot-active":i===e.currentSync},style:{background:i===e.currentSync?e.indicatorActiveColor:e.indicatorColor}})),i++)}),this.items=r;var o=[t("div",{ref:"slides",style:this.slidesStyle,class:"uni-swiper-slides"},[t("div",{ref:"slideFrame",class:"uni-swiper-slide-frame"},r)])];return this.indicatorDots&&o.push(t("div",{ref:"slidesDots",class:["uni-swiper-dots",this.vertical?"uni-swiper-dots-vertical":"uni-swiper-dots-horizontal"]},n)),t("uni-swiper",[t("div",{ref:"slidesWrapper",class:"uni-swiper-wrapper",on:this.$listeners},o)])}},s=a,c=(n("1c64"),n("0c7c")),u=Object(c["a"])(s,i,r,!1,null,null,null);u.options.__file="index.vue";e["default"]=u.exports},5676:function(t,e,n){"use strict";var i=n("0950"),r=n.n(i);r.a},5727:function(t,e,n){"use strict";var i=n("d60d"),r=n.n(i);r.a},5768:function(t,e,n){"use strict";n.r(e);var i=function(){var t=this,e=t.$createElement,n=t._self._c||e;return n("uni-textarea",t._g({staticStyle:{height:"height+'px'"}},t.$listeners),[n("div",{ref:"wrapped",staticClass:"uni-textarea-wrapped"},[n("div",{directives:[{name:"show",rawName:"v-show",value:!(t.composition||t.valueSync.length),expression:"!(composition||valueSync.length)"}],ref:"placeholder",staticClass:"uni-textarea-placeholder",class:t.placeholderClass,style:t.placeholderStyle},[t._v(t._s(t.placeholder))]),n("textarea",{directives:[{name:"model",rawName:"v-model",value:t.valueSync,expression:"valueSync"}],ref:"textarea",staticClass:"uni-textarea-textarea",attrs:{disabled:t.disabled,maxlength:t.maxlengthNumber,placeholder:t.placeholder,autofocus:t.autoFocus},domProps:{value:t.valueSync},on:{compositionstart:t._compositionstart,compositionend:t._compositionend,input:[function(e){e.target.composing||(t.valueSync=e.target.value)},function(t){t.stopPropagation()}],focus:t._focus,blur:t._blur,"&touchstart":function(e){return t._touchstart(e)},"&scroll":function(e){return t._scroll(e)}}})])])},r=[],o=n("8af1"),a={name:"Textarea",mixins:[o["a"]],model:{prop:"value",event:"update:value"},props:{name:{type:String,default:""},value:{type:[String,Number],default:""},maxlength:{type:[Number,String],default:140},placeholder:{type:String,default:""},disabled:{type:[Boolean,String],default:!1},focus:{type:[Boolean,String],default:!1},autoFocus:{type:[Boolean,String],default:!1},placeholderClass:{type:String,default:""},placeholderStyle:{type:String,default:""},autoHeight:{type:[Boolean,String],default:!1},bindinput:{type:String,default:""},cursor:{type:[Number,String],default:-1},selectionStart:{type:[Number,String],default:-1},selectionEnd:{type:[Number,String],default:-1}},data:function(){return{valueSync:String(this.value),composition:!1,focusSync:this.focus,height:0,focusChangeSource:""}},computed:{maxlengthNumber:function(){var t=Number(this.maxlength);return isNaN(t)?140:t},cursorNumber:function(){var t=Number(this.cursor);return isNaN(t)?-1:t},selectionStartNumber:function(){var t=Number(this.selectionStart);return isNaN(t)?-1:t},selectionEndNumber:function(){var t=Number(this.selectionEnd);return isNaN(t)?-1:t}},watch:{value:function(t){this.valueSync=String(t)},valueSync:function(t){t!==this.value&&(this.$trigger("input",{},{value:t,cursor:this.$refs.textarea.selectionEnd}),this.$emit("update:value",t))},focus:function(t){t?(this.focusChangeSource="focus",this.$refs.textarea&&this.$refs.textarea.focus()):this.$refs.textarea&&this.$refs.textarea.blur()},focusSync:function(t){this.$emit("update:focus",t),this._checkSelection(),this._checkCursor()},cursorNumber:function(){this._checkCursor()},selectionStartNumber:function(){this._checkSelection()},selectionEndNumber:function(){this._checkSelection()},height:function(t){var e=getComputedStyle(this.$el).lineHeight.replace("px",""),n=Math.round(t/e);this.$trigger("linechange",{},{height:t,heightRpx:750/window.innerWidth*t,lineCount:n}),this.autoHeight&&(this.$el.style.height=this.height+"px")}},created:function(){this.$dispatch("Form","uni-form-group-update",{type:"add",vm:this})},mounted:function(){this.$refs.textarea.value=this.valueSync,this._computeHeight()},beforeDestroy:function(){this.$dispatch("Form","uni-form-group-update",{type:"remove",vm:this})},methods:{_computeHeight:function(){var t=this;this.$nextTick(function(){t.height=t.$refs.textarea.scrollHeight})},_focus:function(t){this.focusSync=!0,this.$trigger("focus",t,{value:this.valueSync})},_checkSelection:function(){this.focusSync&&!this.focusChangeSource&&this.selectionStartNumber>-1&&this.selectionEndNumber>-1&&(this.$refs.textarea.selectionStart=this.selectionStartNumber,this.$refs.textarea.selectionEnd=this.selectionEndNumber)},_checkCursor:function(){this.focusSync&&("focus"===this.focusChangeSource||!this.focusChangeSource&&this.selectionStartNumber<0&&this.selectionEndNumber<0)&&this.cursorNumber>-1&&(this.$refs.textarea.selectionEnd=this.$refs.textarea.selectionStart=this.cursorNumber)},_blur:function(t){this.focusSync=!1,this.$trigger("blur",t,{value:this.valueSync,cursor:this.$refs.textarea.selectionEnd})},_compositionstart:function(t){this.composition=!0},_compositionend:function(t){this.composition=!1},_confirm:function(t){this.$trigger("confirm",t,{value:this.valueSync})},_linechange:function(t){this.$trigger("linechange",t,{value:this.valueSync})},_touchstart:function(){this.focusChangeSource="touch"},_scroll:function(){this._computeHeight()},_getFormData:function(){return{value:this.valueSync,key:this.name}},_resetFormData:function(){this.valueSync=""}}},s=a,c=(n("9400"),n("0c7c")),u=Object(c["a"])(s,i,r,!1,null,null,null);u.options.__file="index.vue";e["default"]=u.exports},"57a7":function(t,e,n){"use strict";function i(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function r(t,e){for(var n=0;n0&&(n.currentTime=t)});var o=["canplay","play","pause","ended","timeUpdate","error","waiting","seeking","seeked"],c=["pause","seeking","seeked","timeUpdate"];o.forEach(function(t){n.addEventListener(t.toLowerCase(),function(){e._stoping&&c.indexOf(t)>=0||e._events["on".concat(t.substr(0,1).toUpperCase()).concat(t.substr(1))].forEach(function(t){t()})},!1)})}return o(t,[{key:"play",value:function(){this._stoping=!1,this._audio.play()}},{key:"pause",value:function(){this._audio.pause()}},{key:"stop",value:function(){this._stoping=!0,this._audio.pause(),this._audio.currentTime=0,this._events.onStop.forEach(function(t){t()})}},{key:"seek",value:function(t){this._stoping=!1,t=Number(t),"number"!==typeof t||isNaN(t)||(this._audio.currentTime=t)}},{key:"destroy",value:function(){this.stop()}}]),t}();function u(){return new c}s.forEach(function(t){c.prototype[t]=function(e){"function"===typeof e&&this.event[t].push(e)}})},"594d":function(t,e,n){"use strict";n.r(e);var i=function(){var t=this,e=t.$createElement,n=t._self._c||e;return n("uni-map",{staticClass:"uni-map",attrs:{id:t.id}})},r=[],o=n("85ac"),a=o["a"],s=(n("3f7e"),n("0c7c")),c=Object(s["a"])(a,i,r,!1,null,null,null);c.options.__file="index.vue";e["default"]=c.exports},"5a56":function(t,e,n){"use strict";n.r(e),e["default"]={methods:{beforeTransition:function(){},afterTransition:function(){}}}},"5ab3":function(t,e,n){"use strict";var i=n("fcd8"),r=n.n(i);r.a},"5bd2":function(t,e,n){"use strict";n.r(e),n.d(e,"redirectTo",function(){return o}),n.d(e,"navigateTo",function(){return a}),n.d(e,"navigateBack",function(){return s}),n.d(e,"reLaunch",function(){return c}),n.d(e,"switchTab",function(){return u});var i=n("f2b3");function r(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=e.url,r=e.delta,o=e.from,a=void 0===o?"navigateBack":o,s=getApp().$router;switch(t){case"redirectTo":s.replace({type:t,path:n});break;case"navigateTo":s.push({type:t,path:n});break;case"navigateBack":var c=!0,u=getCurrentPages();if(u.length){var l=u[u.length-1];Object(i["d"])(l.$options.onBackPress)&&!0===l.$options.onBackPress.call(l,{from:a})&&(c=!1)}c&&s.go(-r);break;case"reLaunch":s.replace({type:t,path:n});break;case"switchTab":s.replace({type:t,path:n});break}return{errMsg:t+":ok"}}function o(t){return r("redirectTo",t)}function a(t){return r("navigateTo",t)}function s(t){return r("navigateBack",t)}function c(t){return r("reLaunch",t)}function u(t){return r("switchTab",t)}},"5cae":function(t,e,n){"use strict";n.r(e);var i=function(){var t=this,e=t.$createElement,n=t._self._c||e;return n("div",{staticClass:"uni-system-open-location"},[n("system-header",{on:{back:t._back}},[t._v("位置")]),n("div",{staticClass:"map-content"},[n("iframe",{ref:"map",attrs:{src:t.src,allow:"geolocation",sandbox:"allow-scripts allow-same-origin allow-forms",frameborder:"0"},on:{load:t._load}}),t.isPoimarkerSrc?n("div",{staticClass:"actTonav",on:{click:t._nav}}):t._e()])],1)},r=[],o="WXTBZ-6WERU-ECCVS-BZJCK-LW5OJ-SIBOS",a="uniapp",s="https://apis.map.qq.com/tools/poimarker",c={name:"SystemOpenLocation",data:function(){var t=this.$route.params,e=t.latitude,n=t.longitude,i=t.scale,r=t.name,o=t.address;return{latitude:e,longitude:n,scale:i,name:r,address:o,src:"",isPoimarkerSrc:!1}},mounted:function(){this.latitude&&this.longitude&&(this.src="".concat(s,"?type=0&marker=coord:").concat(this.latitude,",").concat(this.longitude,";title:").concat(this.name,";addr:").concat(this.address,";&key=").concat(o,"&referer=").concat(a))},methods:{_back:function(){0!==this.$refs.map.src.indexOf(s)?this.$refs.map.src=this.src:getApp().$router.back()},_load:function(){0===this.$refs.map.src.indexOf(s)?this.isPoimarkerSrc=!0:this.isPoimarkerSrc=!1},_nav:function(){var t="https://apis.map.qq.com/uri/v1/routeplan?type=drive&to=".concat(encodeURIComponent(this.name),"&tocoord=").concat(this.latitude,",").concat(this.longitude,"&referer=").concat(a);this.$refs.map.src=t}}},u=c,l=(n("3da9"),n("0c7c")),d=Object(l["a"])(u,i,r,!1,null,null,null);d.options.__file="index.vue";e["default"]=d.exports},"5df9":function(t,e,n){"use strict";var i=n("1adb"),r=n.n(i);r.a},6062:function(t,e,n){"use strict";var i=n("748c"),r=n.n(i);r.a},6226:function(t,e,n){"use strict";var i=n("e670"),r=n.n(i);r.a},"622e":function(t,e,n){var i={"./app/index.vue":"93f8","./async-error/index.vue":"86a2","./async-loading/index.vue":"adf0","./page/index.vue":"1cea","./system-routes/choose-location/index.vue":"5088","./system-routes/open-location/index.vue":"5cae","./system-routes/preview-image/index.vue":"62b2","./system-routes/system-header/index.vue":"9a98"};function r(t){var e=o(t);return n(e)}function o(t){var e=i[t];if(!(e+1)){var n=new Error("Cannot find module '"+t+"'");throw n.code="MODULE_NOT_FOUND",n}return e}r.keys=function(){return Object.keys(i)},r.resolve=o,t.exports=r,r.id="622e"},"626d":function(t,e,n){"use strict";n.r(e),function(t){var i=n("f2b3");e["default"]={data:function(){return{showActionSheet:{visible:!1}}},created:function(){var e=this;t.on("onShowActionSheet",function(t,n){e.showActionSheet=t,e.onActionSheetCloseCallback=n}),t.on("onHidePopup",function(t){e.showActionSheet.visible=!1})},methods:{_onActionSheetClose:function(t){this.showActionSheet.visible=!1,Object(i["d"])(this.onActionSheetCloseCallback)&&this.onActionSheetCloseCallback(t)}}}}.call(this,n("0dd1"))},"62b2":function(t,e,n){"use strict";n.r(e);var i=function(){var t=this,e=t.$createElement,n=t._self._c||e;return n("div",{staticClass:"uni-system-preview-image",on:{click:t._click}},[n("v-uni-swiper",{staticClass:"uni-swiper",attrs:{current:t.index,"indicator-dots":!1,autoplay:!1},on:{"update:current":function(e){t.index=e}}},t._l(t.urls,function(t,e){return n("v-uni-swiper-item",{key:e},[n("img",{staticClass:"uni-preview-image",attrs:{src:t}})])}))],1)},r=[],o={name:"SystemPreviewImage",data:function(){var t=this.$route.params,e=t.urls,n=t.current;return{urls:e||[],current:n,index:0}},created:function(){var t=this.urls.indexOf(this.current);this.index=t<0?0:t},methods:{_click:function(){getApp().$router.back()}}},a=o,s=(n("f10e"),n("0c7c")),c=Object(s["a"])(a,i,r,!1,null,null,null);c.options.__file="index.vue";e["default"]=c.exports},"62b5":function(t,e,n){"use strict";n.d(e,"a",function(){return r});var i={};function r(t){var e=i[t];return e||(e={id:1,callbacks:Object.create(null)},i[t]=e),{get:function(t){return e.callbacks[t]},pop:function(t){var n=e.callbacks[t];return n&&delete e.callbacks[t],n},push:function(t){var n=e.id++;return e.callbacks[n]=t,n}}}},6389:function(e,n){e.exports=t},6428:function(t,e,n){"use strict";var i=n("c99c"),r=n.n(i);r.a},6491:function(t,e,n){"use strict";n.r(e);var i=function(){var t=this,e=t.$createElement,n=t._self._c||e;return n("uni-radio",t._g({on:{click:t._onClick}},t.$listeners),[n("div",{staticClass:"uni-radio-wrapper"},[n("div",{staticClass:"uni-radio-input",class:[t.radioChecked?"uni-radio-input-checked":""],style:{color:t.color}}),t._t("default")],2)])},r=[],o=n("8af1"),a={name:"Radio",mixins:[o["a"],o["c"]],props:{checked:{type:[Boolean,String],default:!1},id:{type:String,default:""},disabled:{type:[Boolean,String],default:!1},color:{type:String,default:"#007aff"},value:{type:String,default:""}},data:function(){return{radioChecked:this.checked,radioValue:this.value}},watch:{checked:function(t){this.radioChecked=t},value:function(t){this.radioValue=t}},listeners:{"label-click":"_onClick","@label-click":"_onClick"},created:function(){this.$dispatch("RadioGroup","uni-radio-group-update",{type:"add",vm:this}),this.$dispatch("Form","uni-form-group-update",{type:"add",vm:this})},beforeDestroy:function(){this.$dispatch("RadioGroup","uni-radio-group-update",{type:"remove",vm:this}),this.$dispatch("Form","uni-form-group-update",{type:"remove",vm:this})},methods:{_onClick:function(t){this.disabled||this.radioChecked||(this.radioChecked=!0,this.$dispatch("RadioGroup","uni-radio-change",t,this))},_resetFormData:function(){this.radioChecked=this.min}}},s=a,c=(n("c96e"),n("0c7c")),u=Object(c["a"])(s,i,r,!1,null,null,null);u.options.__file="index.vue";e["default"]=u.exports},6508:function(t,e,n){"use strict";(function(t){n.d(e,"a",function(){return c}),n.d(e,"b",function(){return u});var i=1e-4,r=750,o=navigator.userAgent.match("iPhone"),a=t.innerWidth||t.screen.width||375,s=t.devicePixelRatio||2;function c(){var e=t.innerWidth||t.screen.width||375,n=t.devicePixelRatio||2,i=t.innerHeight||t.screen.height||375;t.screen.orientation&&/^landscape/.test(t.screen.orientation.type||"")&&(e=i),e===a&&n===s||(a=e,s=n)}function u(t,e){return t=Number(t),0===t?0:(t=t/r*(e||a),t=Math.floor(t+i),0===t?1!==s&&o?.5:1:t)}}).call(this,n("24aa"))},"65a8":function(t,e,n){"use strict";n.d(e,"a",function(){return i}),n.d(e,"b",function(){return r});var i=44,r=50},6730:function(t,e,n){"use strict";var i=n("a8f0"),r=n.n(i);r.a},"6a87":function(t,e,n){},"6af4":function(t,e,n){"use strict";(function(t){var i=n("e949"),r=n("cb0f"),o=n("15bb"),a={forward:"",back:"",share:"",favorite:"",home:"",menu:"",close:""};e["a"]={name:"PageHead",mixins:[o["a"]],props:{backButton:{type:Boolean,default:!0},backgroundColor:{type:String,default:"#000"},textColor:{type:String,default:"#fff"},titleText:{type:String,default:""},duration:{type:String,default:"0"},timingFunc:{type:String,default:""},loading:{type:Boolean,default:!1},titleSize:{type:String,default:"16px"},type:{default:"default",validator:function(t){return-1!==["default","transparent"].indexOf(t)}},coverage:{type:String,default:"132px"},buttons:{type:Array,default:function(){return[]}}},computed:{btns:function(){var t=this,e=[];return this.buttons.length&&this.buttons.forEach(function(n){var i=Object.assign({},n);if(i.fontSrc&&!i.fontFamily){i.fontSrc=Object(r["a"])(i.fontSrc);var o=i.fontSrc.substr(i.fontSrc.lastIndexOf("/")+1).replace(/\./g,"-");i.fontFamily=o}i.color="transparent"===t.type?"#fff":i.color||t.textColor,i.fontSize=i.fontSize||("default"===t.type?"27px":"22px"),i.fontWeight=i.fontWeight||"normal",e.push(i)}),e}},methods:{_back:function(){1===getCurrentPages().length?uni.reLaunch({url:"/"}):uni.navigateBack({from:"backButton"})},_onBtnClick:function(e){t.emit("onNavigationBarButtonTap",Object.assign({},this.btns[e],{index:e}))},_formatBtnFontText:function(t){if(t.fontSrc&&t.fontFamily){var e='@font-face{\n font-family: "'.concat(t.fontFamily,'";\n src: url("').concat(t.fontSrc,'") format("truetype")\n }');return Object(i["a"])(e,"uni-btn-font-"+t.fontFamily),t.text.replace("\\u","&#x")}return a[t.type]?a[t.type]:t.text||""},_formatBtnStyle:function(t){var e={color:t.color,fontSize:t.fontSize,fontWeight:t.fontWeight};return t.fontFamily&&(e.fontFamily=t.fontFamily),e}}}}).call(this,n("0dd1"))},"6f00":function(t,e,n){"use strict";var i=n("cc83"),r=n.n(i);r.a},"6fc7":function(t,e,n){"use strict";var i=n("d8ff"),r=n.n(i);r.a},"70f4":function(t,e,n){"use strict";n.r(e);var i=function(){var t=this,e=t.$createElement,n=t._self._c||e;return n("uni-label",t._g({on:{click:t._onClick}},t.$listeners),[t._t("default")],2)},r=[],o=n("bd98"),a=o["a"],s=(n("6730"),n("0c7c")),c=Object(s["a"])(a,i,r,!1,null,null,null);c.options.__file="index.vue";e["default"]=c.exports},"748c":function(t,e,n){},7557:function(t,e,n){"use strict";n.r(e),function(t){var n={visible:!1,mode:"",range:[],"range-key":"",value:"",disabled:!1,start:"",end:"",fields:"day","custom-item":""};e["default"]={data:function(){return{showPicker:{visible:!1}}},created:function(){var e=this;t.subscribe("showPicker",function(t,i){e.showPicker=Object.assign(n,t,{pageId:i,visible:!0})}),t.subscribe("hidePicker",function(){e._onPickerClose()}),t.on("onHidePopup",function(){e._onPickerClose()})},methods:{_onPickerClose:function(){this.showPicker.visible=!1}}}}.call(this,n("0dd1"))},"763a":function(t,e,n){"use strict";var i=n("1067"),r=n.n(i);r.a},"772b":function(t,e,n){"use strict";(function(t){function n(t){return o(t)||r(t)||i()}function i(){throw new TypeError("Invalid attempt to spread non-iterable instance")}function r(t){if(Symbol.iterator in Object(t)||"[object Arguments]"===Object.prototype.toString.call(t))return Array.from(t)}function o(t){if(Array.isArray(t)){for(var e=0,n=new Array(t.length);ee(r)&&this._cloneArray(n,r)}}},created:function(){this._createTime(),this._createDate(),this._setValue(this.value),this.$watch("value",this._setValue),this.$watch("mode",this._setValue)},methods:{_createTime:function(){var t=[],e=[];t.splice(0,t.length);for(var n=0;n<24;n++)t.push((n<10?"0":"")+n);e.splice(0,e.length);for(var i=0;i<60;i++)e.push((i<10?"0":"")+i);this.timeArray.push(t,e)},_createDate:function(){for(var t=[],e=(new Date).getFullYear(),n=e-150,i=e+150;n<=i;n++)t.push(String(n));for(var r=[],o=1;o<=12;o++)r.push((o<10?"0":"")+o);for(var a=[],s=1;s<=31;s++)a.push((s<10?"0":"")+s);this.dateArray.push(t,r,a)},_getTimeValue:function(t){return 60*t[0]+t[1]},_getDateValue:function(t){return 366*t[0]+(t[1]||0)+(t[2]||0)},_cloneArray:function(t,e){for(var n=0;n0&&void 0!==arguments[0]?arguments[0]:{},e=t.data,n=this._webSocket;try{n.send(e),this._callback(t,"sendSocketMessage:ok")}catch(i){this._callback(t,"sendSocketMessage:fail ".concat(i))}}},{key:"close",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},e=t.data,n=t.data,i=this._webSocket;try{i.close(e,n),this._callback(t,"sendSocketMessage:ok")}catch(r){this._callback(t,"sendSocketMessage:fail ".concat(r))}}},{key:"onOpen",value:function(t){this._on("open",t)}},{key:"onClose",value:function(t){this._on("close",t)}},{key:"onError",value:function(t){this._on("error",t)}},{key:"onMessage",value:function(t){this._on("message",t)}},{key:"_on",value:function(t,e){this._webSocket.addEventListener(t,function(n){"message"===t?e({data:n.data}):e()},!1)}},{key:"_callback",value:function(t,e){var n=t.success,i=t.fail,r=t.complete,o={errMsg:e};/:ok$/.test(e)?"function"===typeof n&&n(o):"function"===typeof i&&i(o),"function"===typeof r&&r(o)}}]),t}();function u(e,n){var i=e.url,r=e.protocols,o=t,a=o.invokeCallbackHandler;return s=new c(i,r),setTimeout(function(){a(n,{errMsg:"connectSocket:ok"})},0),s}function l(e,n){var i=t,r=i.invokeCallbackHandler;s&&s._webSocket.readyState===WebSocket.OPEN?s.send(Object.assign(e,{complete:function(t){r(n,t)}})):r(n,{errMsg:"sendSocketMessage:fail WebSocket is not connected "})}function d(e,n){var i=t,r=i.invokeCallbackHandler;s&&s._webSocket.readyState!==WebSocket.CLOSED?s.close(Object.assign(e,{complete:function(t){r(n,t)}})):r(n,{errMsg:"closeSocket:fail WebSocket is not connected"})}function h(t){return function(e){s&&s[t](e)}}var f=h("onOpen"),p=h("onError"),g=h("onMessage"),v=h("onClose")}.call(this,n("0dd1"))},"81ea":function(t,e,n){"use strict";var i=function(){var t=this,e=t.$createElement,n=t._self._c||e;return n("uni-tabbar",[n("div",{staticClass:"uni-tabbar",style:{backgroundColor:t.backgroundColor}},[n("div",{staticClass:"uni-tabbar-border",style:{backgroundColor:t.borderColor}}),t._l(t.list,function(e,i){return n("div",{key:e.pagePath,staticClass:"uni-tabbar__item",on:{click:function(n){t._switchTab(e,i)}}},[n("div",{staticClass:"uni-tabbar__bd"},[e.iconPath?n("div",{staticClass:"uni-tabbar__icon"},[n("img",{attrs:{src:t._getRealPath(t.$route.meta.pagePath===e.pagePath?e.selectedIconPath:e.iconPath)}})]):t._e(),e.text?n("div",{staticClass:"uni-tabbar__label",style:{color:t.$route.meta.pagePath===e.pagePath?t.selectedColor:t.color,fontSize:e.iconPath?"10px":"14px"}},[t._v("\n "+t._s(e.text)+"\n ")]):t._e(),e.redDot?n("div",{staticClass:"uni-tabbar__reddot",class:{"uni-tabbar__badge":!!e.badge}},[t._v(t._s(e.badge))]):t._e()])])})],2),n("div",{staticClass:"uni-placeholder"})])},r=[],o=n("92ee"),a=o["a"],s=(n("f4e0"),n("0c7c")),c=Object(s["a"])(a,i,r,!1,null,null,null);c.options.__file="tabBar.vue";var u=c.exports,l=function(){var t=this,e=t.$createElement,n=t._self._c||e;return n("transition",{attrs:{name:"uni-fade"}},[n("uni-toast",{directives:[{name:"show",rawName:"v-show",value:t.visible,expression:"visible"}],class:{"uni-toast-fixed":t.mask},attrs:{"data-duration":t.duration}},[t.mask?n("div",{staticClass:"uni-mask",staticStyle:{background:"transparent"},on:{touchmove:function(t){t.preventDefault()}}}):t._e(),t.image||t.iconClass?n("div",{staticClass:"uni-toast",staticStyle:{"pointer-events":"none"}},[t.image?n("img",{staticClass:"uni-toast__icon",attrs:{src:t.image}}):n("i",{staticClass:"uni-icon_toast",class:t.iconClass}),n("p",{staticClass:"uni-toast__content"},[t._v(t._s(t.title))])]):n("div",{staticClass:"uni-sample-toast",staticStyle:{"pointer-events":"none"}},[n("p",{staticClass:"uni-simple-toast__text"},[t._v(t._s(t.title))])])])],1)},d=[],h=n("a01a"),f=h["a"],p=(n("ff28"),Object(s["a"])(f,l,d,!1,null,null,null));p.options.__file="toast.vue";var g=p.exports,v=function(){var t=this,e=t.$createElement,n=t._self._c||e;return n("transition",{attrs:{name:"uni-fade"}},[n("uni-modal",{directives:[{name:"show",rawName:"v-show",value:t.visible,expression:"visible"}],on:{touchmove:function(t){t.preventDefault()}}},[n("div",{staticClass:"uni-mask",on:{click:function(e){t._close("mask")}}}),n("div",{staticClass:"uni-modal"},[t.title?n("div",{staticClass:"uni-modal__hd"},[n("strong",{staticClass:"uni-modal__title"},[t._v(t._s(t.title))])]):t._e(),n("div",{staticClass:"uni-modal__bd"},[t._v(t._s(t.content))]),n("div",{staticClass:"uni-modal__ft"},[t.showCancel?n("div",{staticClass:"uni-modal__btn uni-modal__btn_default",style:{color:t.cancelColor},on:{click:function(e){t._close("cancel")}}},[t._v(t._s(t.cancelText))]):t._e(),n("div",{staticClass:"uni-modal__btn uni-modal__btn_primary",style:{color:t.confirmColor},on:{click:function(e){t._close("confirm")}}},[t._v(t._s(t.confirmText))])])])])],1)},m=[],b=n("5a56"),y={name:"Modal",mixins:[b["default"]],props:{title:{type:String,default:""},content:{type:String,default:""},showCancel:{type:Boolean,default:!0},cancelText:{type:String,default:"取消"},cancelColor:{type:String,default:"#000000"},confirmText:{type:String,default:"确定"},confirmColor:{type:String,default:"#007aff"},visible:{type:Boolean,default:!1}},methods:{_close:function(t){this.$emit("close",t)}}},_=y,w=(n("2765"),Object(s["a"])(_,v,m,!1,null,null,null));w.options.__file="modal.vue";var k=w.exports,S=function(){var t=this,e=t.$createElement,n=t._self._c||e;return n("uni-picker",{on:{touchmove:function(t){t.preventDefault()}}},[n("transition",{attrs:{name:"uni-fade"}},[n("div",{directives:[{name:"show",rawName:"v-show",value:t.visible,expression:"visible"}],staticClass:"uni-mask",on:{click:t._cancel}})]),n("div",{staticClass:"uni-picker",class:{"uni-picker_toggle":t.visible}},[n("div",{staticClass:"uni-picker-header",on:{click:function(t){t.stopPropagation()}}},[n("div",{staticClass:"uni-picker-action uni-picker-action-cancel",on:{click:t._cancel}},[t._v("取消")]),n("div",{staticClass:"uni-picker-action uni-picker-action-confirm",on:{click:t._change}},[t._v("确定")])]),n("v-uni-picker-view",{staticClass:"uni-picker-content",attrs:{value:t.valueArray},on:{"update:value":function(e){t.valueArray=e}}},t._l(t.rangeArray,function(e,i){return n("v-uni-picker-view-column",{key:i},t._l(e,function(e,r){return n("div",{key:r,staticClass:"uni-picker-item"},[t._v(t._s("object"===typeof e?e[t.rangeKey]||"":e)+t._s(t.units[i]||""))])}))}))],1)],1)},T=[],x=n("772b"),C=x["a"],M=(n("763a"),Object(s["a"])(C,S,T,!1,null,null,null));M.options.__file="picker.vue";var O=M.exports,E=function(){var t=this,e=t.$createElement,n=t._self._c||e;return n("uni-actionsheet",{on:{touchmove:function(t){t.preventDefault()}}},[n("transition",{attrs:{name:"uni-fade"}},[n("div",{directives:[{name:"show",rawName:"v-show",value:t.visible,expression:"visible"}],staticClass:"uni-mask",on:{click:function(e){t._close(-1)}}})]),n("div",{staticClass:"uni-actionsheet",class:{"uni-actionsheet_toggle":t.visible}},[n("div",{staticClass:"uni-actionsheet__menu"},t._l(t.itemList,function(e,i){return n("div",{key:i,staticClass:"uni-actionsheet__cell",style:{color:t.itemColor},on:{click:function(e){t._close(i)}}},[t._v(t._s(e))])})),n("div",{staticClass:"uni-actionsheet__action"},[n("div",{staticClass:"uni-actionsheet__cell",style:{color:t.itemColor},on:{click:function(e){t._close(-1)}}},[t._v("取消")])])])],1)},A=[],$={name:"ActionSheet",props:{itemList:{type:Array,default:function(){return[]}},itemColor:{type:String,default:"#000000"},visible:{type:Boolean,default:!1}},methods:{_close:function(t){this.$emit("close",t)}}},P=$,B=(n("4fef"),Object(s["a"])(P,E,A,!1,null,null,null));B.options.__file="actionSheet.vue";var j=B.exports;e["a"]={TabBar:u,Toast:g,Modal:k,Picker:O,ActionSheet:j}},"82c2":function(t,e,n){"use strict";n.r(e),function(t){function i(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function r(t,e){for(var n=0;n1||(this.hoverStopPropagation&&(t._hoverPropagationStopped=!0),this._hoverTouch=!0,this._hoverStartTimer=setTimeout(function(){e.hovering=!0,e._hoverTouch||e._hoverReset()},this.hoverStartTime)))},_hoverTouchEnd:function(t){this._hoverTouch=!1,this.hovering&&this._hoverReset()},_hoverReset:function(){var t=this;requestAnimationFrame(function(){clearTimeout(t._hoverStayTimer),t._hoverStayTimer=setTimeout(function(){t.hovering=!1},t.hoverStayTime)})},_hoverTouchCancel:function(t){this._hoverTouch=!1,this.hovering=!1,clearTimeout(this._hoverStartTimer)}}}},"854d":function(t,e,n){"use strict";var i=n("fa89"),r=n.n(i);r.a},"856e":function(t,e,n){"use strict";var i=n("500a"),r=n.n(i);r.a},"85ac":function(t,e,n){"use strict";(function(t){var i,r=n("8af1"),o=n("f2b3");function a(t){return a="function"===typeof Symbol&&"symbol"===typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"===typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},a(t)}var s=function(t){this.option=t=t||{};var e=t.map;this.position=t.position,this.index=1,this.visible=this.alwaysVisible="ALWAYS"===t.display,this.init(),e&&this.setMap(e)};function c(t,e){var n,i,r=0,a=200;t.addEventListener("touchstart",function(t){r=Date.now();var e=t.targetTouches[0];n=e.screenX,i=e.screenY},!!o["g"]&&{passive:!0}),t.addEventListener("touchend",function(t){var o=t.changedTouches[0];Math.abs(o.screenX-n)>20||Math.abs(o.screenY-i)>20||Date.now()-r>a||e(t)},!!o["g"]&&{passive:!0})}e["a"]={name:"Map",mixins:[r["d"]],props:{id:{type:String,default:""},longitude:{type:[String,Number],default:116.39772},latitude:{type:[String,Number],default:39.90323},scale:{type:[String,Number],default:16},markers:{type:Array,default:function(){return[]}},covers:{type:Array,default:function(){return[]}},polyline:{type:Array,default:function(){return[]}},circles:{type:Array,default:function(){return[]}},controls:{type:Array,default:function(){return[]}},includePoints:{type:Array,default:function(){return[]}},showLocation:{type:[Boolean,String],default:!1}},data:function(){return{center:{latitude:39.90323,longitude:116.39772},isMapReady:!1,isBoundsReady:!1,markersSync:[],polylineSync:[],circlesSync:[],controlsSync:[],map:null,mapLocation:null,mapLocationPosition:null}},watch:{latitude:function(t){t&&this.longitude&&(this.center.latitude=Number(t))},longitude:function(t){t&&this.latitude&&(this.center.longitude=Number(t))},center:{handler:function(t){var e=this;this.map&&this.mapReady(function(){e.map.setCenter(new i.LatLng(t.latitude,t.longitude))})},deep:!0},scale:function(t){var e=this;this.mapReady(function(){e.map.setZoom(Number(t))})},markers:function(t,e){var n=this;this.mapReady(function(){var i=[],r=[],o=[],a=[],s=[];t.forEach(function(t){if("id"in t){for(var n=!1,s=0;s=0?(e=o.indexOf(i))>=0&&n.changeMarker(t,a[e]):s.push(t)}),n.removeMarkers(s),n.createMarkers(i)})},polyline:function(t){var e=this;this.mapReady(function(){e.createPolyline()})},circles:function(){var t=this;this.mapReady(function(){t.createCircles()})},controls:function(){var t=this;this.mapReady(function(){t.createControls()})},includePoints:function(){var t=this;this.mapReady(function(){t.fitBounds(t.includePoints)})},showLocation:function(t){var e=this;this.mapReady(function(){e[t?"createLocation":"removeLocation"]()})}},created:function(){var t=this.latitude,e=this.longitude;t&&e&&(this.center.latitude=t,this.center.longitude=e)},mounted:function(){var t=this;this.loadMap(function(){t.createClass(),t.init()})},beforeDestroy:function(){this.removeMarkers(this.markersSync),this.removePolyline(),this.removeCircles(),this.removeControls(),this.removeLocation(),this.map=null},methods:{_handleSubscribe:function(t){var e=this,n=t.type,r=t.data,o=void 0===r?{}:r;function a(t,e){t=t||{},t.errMsg="".concat(n,":").concat(e?"fail"+e:"ok");var i=e?o.fail:o.success;"function"===typeof i&&i(t),"function"===typeof o.complete&&o.complete(t)}switch(n){case"getCenterLocation":this.mapReady(function(){var t,n,i=e.map.getCenter();t=i.getLat(),n=i.getLng(),a({latitude:t,longitude:n})});break;case"moveToLocation":var s=this.mapLocationPosition;s&&this.map.setCenter(s);break;case"translateMarker":this.mapReady(function(){try{var t=e.getMarker(o.markerId),n=o.destination,r=o.duration,s=!!o.autoRotate,c=Number(o.rotate)?o.rotate:0,u=t.getRotation(),l=t.getPosition(),d=new i.LatLng(n.latitude,n.longitude),h=i.geometry.spherical.computeDistanceBetween(l,d)/1e3,f=("number"===typeof r?r:1e3)/36e5,p=h/f,g=i.event.addListener(t,"moving",function(e){var n=e.latLng,i=t.label;i&&i.setPosition(n);var r=t.callout;r&&r.setPosition(n)}),v=i.event.addListener(t,"moveend",function(e){v.remove(),g.remove(),t.lastPosition=l,t.setPosition(d);var n=t.label;n&&n.setPosition(d);var i=t.callout;i&&i.setPosition(d);var r=o.animationEnd;"function"===typeof r&&r()}),m=0;s&&(t.lastPosition&&(m=i.geometry.spherical.computeHeading(t.lastPosition,l)),c=i.geometry.spherical.computeHeading(l,d)-m),t.setRotation(u+c),t.moveTo(d,p)}catch(b){a(null,b)}});break;case"includePoints":this.fitBounds(o.points);break;case"getRegion":this.boundsReady(function(){var t=e.map.getBounds(),n=t.getSouthWest(),i=t.getNorthEast();a({southwest:{latitude:n.getLat(),longitude:n.getLng()},northeast:{latitude:i.getLat(),longitude:i.getLng()}})});break;case"getScale":this.mapReady(function(){a({scale:Number(e.scale)})});break}},init:function(){var t=this,e=new i.LatLng(this.center.latitude,this.center.longitude),n=this.map=new i.Map(this.$el,{center:e,zoom:Number(this.scale),scrollwheel:!1,disableDoubleClickZoom:!0,mapTypeControl:!1,zoomControl:!1,scaleControl:!1,minZoom:5,maxZoom:18,draggable:!0}),r=i.event.addListener(n,"bounds_changed",function(e){r.remove(),t.isBoundsReady=!0,t.$emit("boundsready")});i.event.addListener(n,"click",function(){t.$trigger("tap",{},{})}),i.event.addListener(n,"dragstart",function(){t.$trigger("regionchange",{},{type:"begin"})}),i.event.addListener(n,"dragend",function(){t.$trigger("regionchange",{},{type:"end"})}),i.event.addListener(n,"zoom_changed",function(){t.$emit("update:scale",n.getZoom())}),i.event.addListener(n,"center_changed",function(){var e,i,r=n.getCenter();e=r.getLat(),i=r.getLng(),t.$emit("update:latitude",e),t.$emit("update:longitude",i)}),this.markers&&Array.isArray(this.markers)&&this.markers.length&&this.createMarkers(this.markers),this.polyline&&Array.isArray(this.polyline)&&this.polyline.length&&this.createPolyline(),this.circles&&Array.isArray(this.circles)&&this.circles.length&&this.createCircles(),this.controls&&Array.isArray(this.controls)&&this.controls.length&&this.createControls(),this.showLocation&&this.createLocation(),this.includePoints&&Array.isArray(this.includePoints)&&this.includePoints.length&&this.fitBounds(this.includePoints,function(){n.setCenter(e)}),this.isMapReady=!0,this.$emit("mapready")},createMarkers:function(t){var e=this,n=this.map,r=this.markersSync;t.forEach(function(t){var o,a=new i.Marker({map:n,flat:!0,autoRotation:!1});a.id=t.id,e.changeMarker(a,t),i.event.addListener(a,"mouseup",function(t){o=Date.now()}),i.event.addListener(a,"click",function(n){if(!(Date.now()-o<20)){var i=a.callout;if(i){var r=i.div,s=r.parentNode;i.alwaysVisible||i.set("visible",!i.visible),i.visible&&(s.removeChild(r),s.appendChild(r))}e.$trigger("markertap",{},{markerId:t.id||1})}}),r.push(a)})},changeMarker:function(t,e){var n=this.map,r=e.title||e.name,o=new i.LatLng(e.latitude,e.longitude),a=new Image;a.onload=function(){var c,u,l,d,h=e.anchor||{},f=h.x,p=h.y;e.iconPath&&(e.width||e.height)?(u=e.width||a.width/a.height*e.height,l=e.height||a.height/a.width*e.width):(u=a.width/2,l=a.height/2),f=("number"===typeof f?f:.5)*u,p=("number"===typeof p?p:1)*l,d=l-(l-p),c=new i.MarkerImage(a.src,null,null,new i.Point(f,p),new i.Size(u,l)),t.setPosition(o),t.setIcon(c),t.setRotation(e.rotate||0);var g,v=e.label||{};t.label&&(t.label.setMap(null),delete t.label),v.content&&(g=new i.Label({position:o,map:n,clickable:!1,content:v.content,style:{border:"none",padding:"8px",background:"none",color:v.color,fontSize:(v.fontSize||14)+"px",lineHeight:(v.fontSize||14)+"px",marginLeft:v.x,marginTop:v.y}}),t.label=g);var m,b=e.callout||{},y=t.callout;b.content?m={id:e.id,position:o,map:n,top:d,content:b.content,color:b.color,fontSize:b.fontSize,borderRadius:b.borderRadius,bgColor:b.bgColor,padding:b.padding,boxShadow:b.boxShadow,display:b.display}:r&&(m={id:e.id,position:o,map:n,top:d,content:r,boxShadow:"0px 0px 3px 1px rgba(0,0,0,0.5)"}),m?y?y.setOption(m):y=t.callout=new s(m):y&&(y.setMap(null),delete t.callout)},a.src=e.iconPath||"data:image/png;base64,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"},removeMarkers:function(t){for(var e=0;e0&&void 0!==arguments[0]?arguments[0]:{},e=Object.assign({},t),n=Object.keys(e),i=n.length;if(i)for(var r=0;re-n&&t0){var u=(-n-Math.sqrt(o))/(2*i),l=(-n+Math.sqrt(o))/(2*i),d=(e-u*t)/(l-u),h=t-d;return{x:function(t){var e,n;return t===this._t&&(e=this._powER1T,n=this._powER2T),this._t=t,e||(e=this._powER1T=Math.pow(Math.E,u*t)),n||(n=this._powER2T=Math.pow(Math.E,l*t)),h*e+d*n},dx:function(t){var e,n;return t===this._t&&(e=this._powER1T,n=this._powER2T),this._t=t,e||(e=this._powER1T=Math.pow(Math.E,u*t)),n||(n=this._powER2T=Math.pow(Math.E,l*t)),h*u*e+d*l*n}}}var f=Math.sqrt(4*i*r-n*n)/(2*i),p=-n/2*i,g=t,v=(e-p*t)/f;return{x:function(t){return Math.pow(Math.E,p*t)*(g*Math.cos(f*t)+v*Math.sin(f*t))},dx:function(t){var e=Math.pow(Math.E,p*t),n=Math.cos(f*t),i=Math.sin(f*t);return e*(v*f*n-g*f*i)+p*e*(v*i+g*n)}}},a.prototype.x=function(t){return void 0===t&&(t=((new Date).getTime()-this._startTime)/1e3),this._solution?this._endPosition+this._solution.x(t):0},a.prototype.dx=function(t){return void 0===t&&(t=((new Date).getTime()-this._startTime)/1e3),this._solution?this._solution.dx(t):0},a.prototype.setEnd=function(t,e,n){if(n||(n=(new Date).getTime()),t!==this._endPosition||!o(e,.4)){e=e||0;var i=this._endPosition;this._solution&&(o(e,.4)&&(e=this._solution.dx((n-this._startTime)/1e3)),i=this._solution.x((n-this._startTime)/1e3),o(e,.4)&&(e=0),o(i,.4)&&(i=0),i+=this._endPosition),this._solution&&o(i-t,.4)&&o(e,.4)||(this._endPosition=t,this._solution=this._solve(i-this._endPosition,e),this._startTime=n)}},a.prototype.snap=function(t){this._startTime=(new Date).getTime(),this._endPosition=t,this._solution={x:function(){return 0},dx:function(){return 0}}},a.prototype.done=function(t){return t||(t=(new Date).getTime()),r(this.x(),this._endPosition,.4)&&o(this.dx(),.4)},a.prototype.reconfigure=function(t,e,n){this._m=t,this._k=e,this._c=n,this.done()||(this._solution=this._solve(this.x()-this._endPosition,this.dx()),this._startTime=(new Date).getTime())},a.prototype.springConstant=function(){return this._k},a.prototype.damping=function(){return this._c},a.prototype.configuration=function(){function t(t,e){t.reconfigure(1,e,t.damping())}function e(t,e){t.reconfigure(1,t.springConstant(),e)}return[{label:"Spring Constant",read:this.springConstant.bind(this),write:t.bind(this,this),min:100,max:1e3},{label:"Damping",read:this.damping.bind(this),write:e.bind(this,this),min:1,max:500}]},s.prototype.snap=function(t,e){this._springOffset=0,this._springing=!0,this._spring.snap(t),this._spring.setEnd(e)},s.prototype.set=function(t,e){this._friction.set(t,e),t>0&&e>=0?(this._springOffset=0,this._springing=!0,this._spring.snap(t),this._spring.setEnd(0)):t<-this._extent&&e<=0?(this._springOffset=0,this._springing=!0,this._spring.snap(t),this._spring.setEnd(-this._extent)):this._springing=!1,this._startTime=(new Date).getTime()},s.prototype.x=function(t){if(!this._startTime)return 0;if(t||(t=((new Date).getTime()-this._startTime)/1e3),this._springing)return this._spring.x()+this._springOffset;var e=this._friction.x(t),n=this.dx(t);return(e>0&&n>=0||e<-this._extent&&n<=0)&&(this._springing=!0,this._spring.setEnd(0,n),e<-this._extent?this._springOffset=-this._extent:this._springOffset=0,e=this._spring.x()+this._springOffset),e},s.prototype.dx=function(t){var e=0;return e=this._lastTime===t?this._lastDx:this._springing?this._spring.dx(t):this._friction.dx(t),this._lastTime=t,this._lastDx=e,e},s.prototype.done=function(){return this._springing?this._spring.done():this._friction.done()},s.prototype.setVelocityByEnd=function(t){this._friction.setVelocityByEnd(t)},s.prototype.configuration=function(){var t=this._friction.configuration();return t.push.apply(t,this._spring.configuration()),t},u.prototype.onTouchStart=function(){this._startPosition=this._position,this._lastChangePos=this._startPosition,this._startPosition>0?this._startPosition/=.5:this._startPosition<-this._extent&&(this._startPosition=(this._startPosition+this._extent)/.5-this._extent),this._animation&&(this._animation.cancel(),this._scrolling=!1),this.updatePosition()},u.prototype.onTouchMove=function(t,e){var n=this._startPosition;this._enableX?n+=t:this._enableY&&(n+=e),n>0?n*=.5:n<-this._extent&&(n=.5*(n+this._extent)-this._extent),this._position=n,this.updatePosition(),this.dispatchScroll()},u.prototype.onTouchEnd=function(t,e,n){var i=this;if(this._enableSnap&&this._position>-this._extent&&this._position<0){if(this._enableY&&(Math.abs(e)this._itemSize/2?r-(this._itemSize-Math.abs(o)):r-o;a<=0&&a>=-this._extent&&this._scroll.setVelocityByEnd(a)}this._lastTime=Date.now(),this._lastDelay=0,this._scrolling=!0,this._lastChangePos=this._position,this._lastIdx=Math.floor(Math.abs(this._position/this._itemSize)),this._animation=c(this._scroll,function(){var t=Date.now(),e=(t-i._scroll._startTime)/1e3,n=i._scroll.x(e);i._position=n,i.updatePosition();var r=i._scroll.dx(e);i._shouldDispatchScrollEvent&&t-i._lastTime>i._lastDelay&&(i.dispatchScroll(),i._lastDelay=Math.abs(2e3/r),i._lastTime=t)},function(){i._enableSnap&&(a<=0&&a>=-i._extent&&(i._position=a,i.updatePosition()),"function"===typeof i._options.onSnap&&i._options.onSnap(Math.floor(Math.abs(i._position)/i._itemSize))),i._shouldDispatchScrollEvent&&i.dispatchScroll(),i._scrolling=!1})},u.prototype.onTransitionEnd=function(){this._element.style.transition="",this._element.style.webkitTransition="",this._element.removeEventListener("transitionend",this._onTransitionEnd),this._element.removeEventListener("webkitTransitionEnd",this._onTransitionEnd),this._snapping&&(this._snapping=!1),this.dispatchScroll()},u.prototype.snap=function(){var t=this._itemSize,e=this._position%t,n=Math.abs(e)>this._itemSize/2?this._position-(t-Math.abs(e)):this._position-e;this._position!==n&&(this._snapping=!0,this.scrollTo(-n),"function"===typeof this._options.onSnap&&this._options.onSnap(Math.floor(Math.abs(this._position)/this._itemSize)))},u.prototype.scrollTo=function(t,e){this._animation&&(this._animation.cancel(),this._scrolling=!1),"number"===typeof t&&(this._position=-t),this._position<-this._extent?this._position=-this._extent:this._position>0&&(this._position=0),this._element.style.transition="transform "+(e||.2)+"s ease-out",this._element.style.webkitTransition="-webkit-transform "+(e||.2)+"s ease-out",this.updatePosition(),this._element.addEventListener("transitionend",this._onTransitionEnd),this._element.addEventListener("webkitTransitionEnd",this._onTransitionEnd)},u.prototype.dispatchScroll=function(){if("function"===typeof this._options.onScroll&&Math.round(this._lastPos)!==Math.round(this._position)){this._lastPos=this._position;var t={target:{scrollLeft:this._enableX?-this._position:0,scrollTop:this._enableY?-this._position:0,scrollHeight:this._scrollHeight||this._element.offsetHeight,scrollWidth:this._scrollWidth||this._element.offsetWidth,offsetHeight:this._element.parentElement.offsetHeight,offsetWidth:this._element.parentElement.offsetWidth}};this._options.onScroll(t)}},u.prototype.update=function(t,e,n){var i=0,r=this._position;this._enableX?(i=this._element.childNodes.length?(e||this._element.offsetWidth)-this._element.parentElement.offsetWidth:0,this._scrollWidth=e):(i=this._element.childNodes.length?(e||this._element.offsetHeight)-this._element.parentElement.offsetHeight:0,this._scrollHeight=e),"number"===typeof t&&(this._position=-t),this._position<-i?this._position=-i:this._position>0&&(this._position=0),this._itemSize=n||this._itemSize,this.updatePosition(),r!==this._position&&(this.dispatchScroll(),"function"===typeof this._options.onSnap&&this._options.onSnap(Math.floor(Math.abs(this._position)/this._itemSize))),this._extent=i,this._scroll._extent=i},u.prototype.updatePosition=function(){var t="";this._enableX?t="translateX("+this._position+"px) translateZ(0)":this._enableY&&(t="translateY("+this._position+"px) translateZ(0)"),this._element.style.webkitTransform=t,this._element.style.transform=t},u.prototype.isScrolling=function(){return this._scrolling||this._snapping};e["a"]={methods:{initScroller:function(t,e){this._touchInfo={trackingID:-1,maxDy:0,maxDx:0},this._scroller=new u(t,e),this.__handleTouchStart=this._handleTouchStart.bind(this),this.__handleTouchMove=this._handleTouchMove.bind(this),this.__handleTouchEnd=this._handleTouchEnd.bind(this),this._initedScroller=!0},_findDelta:function(t){var e=this._touchInfo;return"move"===t.detail.state||"end"===t.detail.state?{x:t.detail.dx,y:t.detail.dy}:{x:t.screenX-e.x,y:t.screenY-e.y}},_handleTouchStart:function(t){var e=this._touchInfo,n=this._scroller;n&&("start"===t.detail.state?(e.trackingID="touch",e.x=t.detail.x,e.y=t.detail.y):(e.trackingID="mouse",e.x=t.screenX,e.y=t.screenY),e.maxDx=0,e.maxDy=0,e.historyX=[0],e.historyY=[0],e.historyTime=[t.detail.timeStamp],e.listener=n,n.onTouchStart&&n.onTouchStart())},_handleTouchMove:function(t){var e=this._touchInfo;if(-1!==e.trackingID){t.preventDefault();var n=this._findDelta(t);if(n){for(e.maxDy=Math.max(e.maxDy,Math.abs(n.y)),e.maxDx=Math.max(e.maxDx,Math.abs(n.x)),e.historyX.push(n.x),e.historyY.push(n.y),e.historyTime.push(t.detail.timeStamp);e.historyTime.length>10;)e.historyTime.shift(),e.historyX.shift(),e.historyY.shift();e.listener&&e.listener.onTouchMove&&e.listener.onTouchMove(n.x,n.y,t.detail.timeStamp)}}},_handleTouchEnd:function(t){var e=this._touchInfo;if(-1!==e.trackingID){t.preventDefault();var n=this._findDelta(t);if(n){var i=e.listener;e.trackingID=-1,e.listener=null;var r=e.historyTime.length,o={x:0,y:0};if(r>2)for(var a=e.historyTime.length-1,s=e.historyTime[a],c=e.historyX[a],u=e.historyY[a];a>0;){a--;var l=e.historyTime[a],d=s-l;if(d>30&&d<50){o.x=(c-e.historyX[a])/(d/1e3),o.y=(u-e.historyY[a])/(d/1e3);break}}e.historyTime=[],e.historyX=[],e.historyY=[],i&&i.onTouchEnd&&i.onTouchEnd(n.x,n.y,o)}}}}}},"8af1":function(t,e,n){"use strict";function i(t,e){for(var n=this.$children,r=n.length,o=arguments.length,a=new Array(o>2?o-2:0),s=2;s2?r-2:0),a=2;a2?n-2:0),o=2;o1&&void 0!==arguments[1]?arguments[1]:{};e.routes;Object(r["a"])(),t.prototype.$handleEvent=function(t){if(t instanceof Event){for(var e=t.target,n=this.$el;e&&e!==n;e=e.parentNode)if(e.tagName&&0===e.tagName.indexOf("UNI-"))break;t=r["b"].call(this,t.type,t,{},e||t.target,t.currentTarget)}return t},t.mixin({beforeCreate:function(){var t=this.$options;Object(i["a"])(this)&&(t.mounted=t.mounted?[].concat(o,t.mounted):[o])}})}}}.call(this,n("501c"))},"8ce3":function(t,e,n){"use strict";n.r(e),function(t){n.d(e,"chooseVideo",function(){return s});var i=t,r=i.invokeCallbackHandler,o=null,a=function(t){var e=document.createElement("input");return e.type="file",e.style="visibility: hidden;z-index: -999;width: 0;height: 0;",e.accept="video/*",1===t.sourceType.length&&"camera"===t.sourceType[0]&&(e.capture="camera"),e};function s(t,e){var n=t.sourceType;o&&(document.body.removeChild(o),o=null),o=a({sourceType:n}),document.body.appendChild(o),o.addEventListener("change",function(t){var n=t.target.files[0],i=window.URL.createObjectURL(n);r(e,{errMsg:"chooseVideo:ok",tempFilePath:i,size:n.size})}),o.click()}}.call(this,n("0dd1"))},"8e16":function(t,e,n){"use strict";var i=n("a1e3"),r=n.n(i);r.a},"8e58":function(t,e,n){"use strict";n.r(e),function(t){function i(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function r(t,e){for(var n=0;n100&&(t=100),t}},watch:{realPercent:function(t,e){this.strokeTimer&&clearInterval(this.strokeTimer),this.lastPercent=e||0,this._activeAnimation()}},created:function(){this._activeAnimation()},methods:{_activeAnimation:function(){var t=this;this.active?(this.currentPercent=this.activeMode===o.activeMode?0:this.lastPercent,this.strokeTimer=setInterval(function(){t.currentPercent+1>t.realPercent?(t.currentPercent=t.realPercent,t.strokeTimer&&clearInterval(t.strokeTimer)):t.currentPercent+=1},30)):this.currentPercent=this.realPercent}}},s=a,c=(n("944e"),n("0c7c")),u=Object(c["a"])(s,i,r,!1,null,null,null);u.options.__file="index.vue";e["default"]=u.exports},"9b5b":function(t,e,n){"use strict";var i=n("f8d2"),r=n.n(i);r.a},"9eba":function(t,e,n){"use strict";n.r(e),function(t){function i(e){var n=getCurrentPages();return n.length&&t.publishHandler("pageScrollTo",e,n[n.length-1].$page.id),{}}var r;function o(t){r=t}function a(){r&&t.emit(r+".stopPullDownRefresh",{},r);var e=getCurrentPages();return e.length&&(r=e[e.length-1].$page.id,t.emit(r+".startPullDownRefresh",{},r)),{}}function s(){return r&&(t.emit(r+".stopPullDownRefresh",{},r),r=null),{}}n.d(e,"pageScrollTo",function(){return i}),n.d(e,"setPullDownRefreshPageId",function(){return o}),n.d(e,"startPullDownRefresh",function(){return a}),n.d(e,"stopPullDownRefresh",function(){return s})}.call(this,n("0dd1"))},"9f96":function(t,e,n){"use strict";n.r(e);var i=function(){var t=this,e=t.$createElement,n=t._self._c||e;return n("uni-slider",t._g({ref:"uni-slider",on:{click:t._onClick}},t.$listeners),[n("div",{staticClass:"uni-slider-wrapper"},[n("div",{staticClass:"uni-slider-tap-area"},[n("div",{staticClass:"uni-slider-handle-wrapper",style:t.setBgColor},[n("div",{ref:"uni-slider-handle",staticClass:"uni-slider-handle",style:t.setBlockBg}),n("div",{staticClass:"uni-slider-thumb",style:t.setBlockStyle}),n("div",{staticClass:"uni-slider-track",style:t.setActiveColor})])]),n("span",{directives:[{name:"show",rawName:"v-show",value:t.showValue,expression:"showValue"}],staticClass:"uni-slider-value"},[t._v(t._s(t.sliderValue))])]),t._t("default")],2)},r=[],o=n("8af1"),a=n("ba15"),s={name:"Slider",mixins:[o["a"],o["c"],a["a"]],props:{name:{type:String,default:""},min:{type:[Number,String],default:0},max:{type:[Number,String],default:100},value:{type:[Number,String],default:0},step:{type:[Number,String],default:1},disabled:{type:[Boolean,String],default:!1},color:{type:String,default:"#e9e9e9"},backgroundColor:{type:String,default:"#e9e9e9"},activeColor:{type:String,default:"#007aff"},selectedColor:{type:String,default:"#007aff"},blockColor:{type:String,default:"#ffffff"},blockSize:{type:[Number,String],default:28},showValue:{type:[Boolean,String],default:!1}},data:function(){return{sliderValue:Number(this.value)}},computed:{setBlockStyle:function(){return{width:this.blockSize+"px",height:this.blockSize+"px",marginLeft:-this.blockSize/2+"px",marginTop:-this.blockSize/2+"px",left:this._getValueWidth(),backgroundColor:this.blockColor}},setBgColor:function(){return{backgroundColor:this._getBgColor()}},setBlockBg:function(){return{left:this._getValueWidth()}},setActiveColor:function(){return{backgroundColor:this._getActiveColor(),width:this._getValueWidth()}}},watch:{value:function(t){this.sliderValue=Number(t)}},mounted:function(){this.touchtrack(this.$refs["uni-slider-handle"],"_onTrack")},created:function(){this.$dispatch("Form","uni-form-group-update",{type:"add",vm:this})},beforeDestroy:function(){this.$dispatch("Form","uni-form-group-update",{type:"remove",vm:this})},methods:{_onUserChangedValue:function(t){var e=this.$refs["uni-slider"],n=e.offsetWidth,i=e.getBoundingClientRect().left,r=(t.x-i)*(this.max-this.min)/n+Number(this.min);this.sliderValue=this._filterValue(r)},_filterValue:function(t){return tthis.max?this.max:Math.round((t-this.min)/this.step)*this.step+Number(this.min)},_getValueWidth:function(){return 100*(this.sliderValue-this.min)/(this.max-this.min)+"%"},_getBgColor:function(){return"#e9e9e9"!==this.backgroundColor?this.backgroundColor:"#007aff"!==this.color?this.color:"#007aff"},_getActiveColor:function(){return"#007aff"!==this.activeColor?this.activeColor:"#e9e9e9"!==this.selectedColor?this.selectedColor:"#e9e9e9"},_onTrack:function(t){if(!this.disabled)return"move"===t.detail.state?(this._onUserChangedValue({x:t.detail.x0}),this.$trigger("changing",t,{value:this.sliderValue}),!1):void("end"===t.detail.state&&this.$trigger("change",t,{value:this.sliderValue}))},_onClick:function(t){this.disabled||(this._onUserChangedValue(t),this.$trigger("change",t,{value:this.sliderValue}))},_resetFormData:function(){this.sliderValue=this.min},_getFormData:function(){var t={};return""!==this.name&&(t["value"]=this.sliderValue,t["key"]=this.name),t}}},c=s,u=(n("6428"),n("0c7c")),l=Object(u["a"])(c,i,r,!1,null,null,null);l.options.__file="index.vue";e["default"]=l.exports},"9fe6":function(t,e,n){"use strict";(function(t){n.d(e,"a",function(){return s});var i=n("85b6");function r(t){var e={};return t.id&&(e.id=""),t.dataset&&(e.dataset={}),t.rect&&(e.left=0,e.right=0,e.top=0,e.bottom=0),t.size&&(e.width=document.documentElement.clientWidth,e.height=document.documentElement.clientHeight),t.scrollOffset&&(e.scrollLeft=document.documentElement.scrollLeft||document.body.scrollLeft||0,e.scrollTop=document.documentElement.scrollTop||document.body.scrollTop||0),e}function o(t,e){var n={};if(e.id&&(n.id=t.id),e.dataset&&(n.dataset=Object(i["b"])(t.dataset||{})),e.rect||e.size){var r=t.getBoundingClientRect();e.rect&&(n.left=r.left,n.right=r.right,n.top=r.top,n.bottom=r.bottom),e.size&&(n.width=r.width,n.height=r.height)}return e.properties&&e.properties.forEach(function(t){t=t.replace(/-([a-z])/g,function(t,e){return e.toUpperCase()})}),e.scrollOffset&&("UNI-SCROLL-VIEW"===t.tagName&&t.__vue__&&t.__vue__.getScrollPosition?Object.assign(n,t.__vue__.getScrollPosition()):(n.scrollLeft=0,n.scrollTop=0)),n}function a(t,e,n,i,r){var a=t.$el;if(i){var s=a.querySelector(n);return s?o(s,r):null}var c=a.querySelectorAll(n);return c&&c.length?[].map.call(c,function(t){return o(t,r)}):[]}function s(e,n){var i=e.reqId,o=e.reqs,s=getCurrentPages(),c=s.find(function(t){return t.$page.id===n});if(!c)throw new Error("Not Found:Page[".concat(n,"]"));var u=[];o.forEach(function(t){var e=t.component,n=t.selector,i=t.single,o=t.fields;0===e?u.push(r(o)):u.push(a(c,e,n,i,o))}),t.publishHandler("onRequestComponentInfo",{reqId:i,res:u},c.$page.id)}}).call(this,n("501c"))},"9fef":function(t,e,n){"use strict";n.r(e),n.d(e,"createAudioContext",function(){return r}),n.d(e,"createVideoContext",function(){return o}),n.d(e,"createMapContext",function(){return a});var i=[{name:"id",type:String,required:!0}],r=i,o=i,a=i},a01a:function(t,e,n){"use strict";(function(t){var i=n("5a56");e["a"]={name:"Toast",mixins:[i["default"]],props:{title:{type:String,default:""},icon:{default:"success",validator:function(t){return-1!==["success","loading","none"].indexOf(t)}},image:{type:String,default:""},duration:{type:Number,default:1500},mask:{type:Boolean,default:!1},visible:{type:Boolean,default:!1}},computed:{iconClass:function(){return"success"===this.icon?"uni-icon-success-no-circle":"loading"===this.icon?"uni-loading":void 0}},beforeUpdate:function(){this.visible&&(this.timeoutId&&clearTimeout(this.timeoutId),this.timeoutId=setTimeout(function(){t.emit("onHideToast")},this.duration))}}}).call(this,n("0dd1"))},a1e3:function(t,e,n){},a201:function(t,e,n){"use strict";n.r(e),n.d(e,"request",function(){return a});var i={OPTIONS:"OPTIONS",GET:"GET",HEAD:"HEAD",POST:"POST",PUT:"PUT",DELETE:"DELETE",TRACE:"TRACE",CONNECT:"CONNECT"},r={JSON:"JSON"},o={TEXT:"TEXT",ARRAYBUFFER:"ARRAYBUFFER"},a={url:{type:String,required:!0},data:{type:[Object,String,ArrayBuffer],validator:function(t,e){e.data=t||""}},header:{type:Object,validator:function(t,e){e.header=t||{}}},method:{type:String,validator:function(t,e){t=(t||"").toUpperCase(),e.method=Object.values(i).indexOf(t)<0?i.GET:t}},dataType:{type:String,validator:function(t,e){e.dataType=(t||r.JSON).toUpperCase()}},responseType:{type:String,validator:function(t,e){t=(t||"").toUpperCase(),e.responseType=Object.values(o).indexOf(t)<0?o.TEXT:t}}}},a470:function(t,e,n){"use strict";n.d(e,"a",function(){return r});var i=n("65a8");function r(){if(uni.canIUse("css.var")){var t=document.documentElement.style;return{top:parseInt(t.getPropertyValue("--window-top")),bottom:parseInt(t.getPropertyValue("--window-bottom"))}}var e=0,n=getCurrentPages();if(n.length){var r=n[n.length-1].$parent.$parent;e=r.showNavigationBar&&"transparent"!==r.navigationBar.type?i["a"]:0}return{top:e,bottom:getApp().$children[0].showTabBar?i["b"]:0}}},a4cf:function(t,e,n){"use strict";n.r(e),function(t){function i(e,n){var i=e.src,r=t,o=r.invokeCallbackHandler,a=new Image;a.onload=function(){o(n,{errMsg:"getImageInfo:ok",width:a.naturalWidth,height:a.naturalHeight})},a.onerror=function(t){o(n,{errMsg:"getImageInfo:fail"})},a.src=i}n.d(e,"getImageInfo",function(){return i})}.call(this,n("0dd1"))},a5ec:function(t,e,n){"use strict";var i=n("cee1"),r=n.n(i);r.a},a741:function(t,e,n){"use strict";(function(t,i){n.d(e,"a",function(){return a}),n.d(e,"b",function(){return s});var r=n("f2b3");function o(t,e,n){return Object(r["d"])(t.$options[e])&&t.$options[e].apply(t,n)}function a(e,n){for(var i=arguments.length,r=new Array(i>2?i-2:0),a=2;a2?r-2:0),s=2;s\n/,"").replace(/\n/,"").replace(/\n/,"")}function o(t){return t.reduce(function(t,e){var n=e.value,i=e.name;return n.match(/ /)&&"style"!==i&&(n=n.split(" ")),t[i]?Array.isArray(t[i])?t[i].push(n):t[i]=[t[i],n]:t[i]=n,t},{})}function a(e){e=r(e);var n=[],a={node:"root",children:[]};return Object(i["a"])(e,{start:function(t,e,i){var r={name:t};if(0!==e.length&&(r.attrs=o(e)),i){var s=n[0]||a;s.children||(s.children=[]),s.children.push(r)}else n.unshift(r)},end:function(e){var i=n.shift();if(i.name!==e&&t.error("invalid state: mismatch end tag"),0===n.length)a.children.push(i);else{var r=n[0];r.children||(r.children=[]),r.children.push(i)}},chars:function(t){var e={type:"text",text:t};if(0===n.length)a.children.push(e);else{var i=n[0];i.children||(i.children=[]),i.children.push(e)}},comment:function(t){var e={node:"comment",text:t},i=n[0];i.children||(i.children=[]),i.children.push(e)}}),a.children}}).call(this,n("3ad9")["default"])},b34d:function(t,e,n){"use strict";n.r(e);var i=function(){var t=this,e=t.$createElement,n=t._self._c||e;return n("uni-form",t._g({},t.$listeners),[n("span",[t._t("default")],2)])},r=[],o=n("8af1"),a={name:"Form",mixins:[o["c"]],data:function(){return{childrenList:[]}},listeners:{"@form-submit":"_onSubmit","@form-reset":"_onReset","@form-group-update":"_formGroupUpdateHandler"},methods:{_onSubmit:function(t){var e={};this.childrenList.forEach(function(t){t._getFormData&&t._getFormData().key&&(e[t._getFormData().key]=t._getFormData().value)}),this.$trigger("submit",t,{value:e})},_onReset:function(t){this.$trigger("reset",t,{}),this.childrenList.forEach(function(t){t._resetFormData&&t._resetFormData()})},_formGroupUpdateHandler:function(t){if("add"===t.type)this.childrenList.push(t.vm);else{var e=this.childrenList.indexOf(t.vm);this.childrenList.splice(e,1)}}}},s=a,c=(n("6fc7"),n("0c7c")),u=Object(c["a"])(s,i,r,!1,null,null,null);u.options.__file="index.vue";e["default"]=u.exports},b5ca:function(t,e,n){"use strict";n.r(e),n.d(e,"setTabBarItem",function(){return c}),n.d(e,"setTabBarStyle",function(){return u}),n.d(e,"hideTabBar",function(){return l}),n.d(e,"showTabBar",function(){return d}),n.d(e,"hideTabBarRedDot",function(){return h}),n.d(e,"showTabBarRedDot",function(){return f}),n.d(e,"removeTabBarBadge",function(){return p}),n.d(e,"setTabBarBadge",function(){return g});var i=n("f2b3"),r=["text","iconPath","selectedIconPath"],o=["color","selectedColor","backgroundColor","borderStyle"],a=["badge","redDot"];function s(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=getApp();if(n){var s=e.index,c=n.$children[0].tabBar;switch(t){case"showTabBar":n.$children[0].hideTabBar=!1;break;case"hideTabBar":n.$children[0].hideTabBar=!0;break;case"setTabBarItem":Object(i["f"])(c.list[s],r,e);break;case"setTabBarStyle":Object(i["f"])(c,o,e);break;case"showTabBarRedDot":Object(i["f"])(c.list[s],a,{badge:"",redDot:!0});break;case"setTabBarBadge":Object(i["f"])(c.list[s],a,{badge:e.text,redDot:!0});break;case"hideTabBarRedDot":case"removeTabBarBadge":Object(i["f"])(c.list[s],a,{badge:"",redDot:!1});break}}return{}}function c(t){return s("setTabBarItem",t)}function u(t){return s("setTabBarStyle",t)}function l(t){return s("hideTabBar",t)}function d(t){return s("showTabBar",t)}function h(t){return s("hideTabBarRedDot",t)}function f(t){return s("showTabBarRedDot",t)}function p(t){return s("removeTabBarBadge",t)}function g(t){return s("setTabBarBadge",t)}},b628:function(t,e,n){"use strict";var i=n("bde3"),r=n.n(i);r.a},b705:function(t,e,n){"use strict";n.r(e);var i=function(){var t=this,e=t.$createElement,n=t._self._c||e;return n("uni-rich-text",t._g({},t.$listeners),[n("div")])},r=[],o=n("b10a"),a=n("f2b3"),s={a:"",abbr:"",b:"",blockquote:"",br:"",code:"",col:["span","width"],colgroup:["span","width"],dd:"",del:"",div:"",dl:"",dt:"",em:"",fieldset:"",h1:"",h2:"",h3:"",h4:"",h5:"",h6:"",hr:"",i:"",img:["alt","src","height","width"],ins:"",label:"",legend:"",li:"",ol:["start","type"],p:"",q:"",span:"",strong:"",sub:"",sup:"",table:["width"],tbody:"",td:["colspan","rowspan","height","width"],tfoot:"",th:["colspan","rowspan","height","width"],thead:"",tr:"",ul:""},c={amp:"&",gt:">",lt:"<",nbsp:" ",quot:'"',apos:"'"};function u(t){return t.replace(/&(([a-zA-Z]+)|(#x{0,1}[\da-zA-Z]+));/gi,function(t,e){if(Object(a["b"])(c,e)&&c[e])return c[e];if(/^#[0-9]{1,4}$/.test(e))return String.fromCharCode(e.slice(1));if(/^#x[0-9a-f]{1,4}$/i.test(e))return String.fromCharCode("0"+e.slice(1));var n=document.createElement("div");return n.innerHTML=t,n.innerText||n.textContent})}function l(t,e){return t.forEach(function(t){if(Object(a["e"])(t))if(Object(a["b"])(t,"type")&&"node"!==t.type)"text"===t.type&&"string"===typeof t.text&&""!==t.text&&e.appendChild(document.createTextNode(u(t.text)));else{if("string"!==typeof t.name||!t.name)return;var n=t.name.toLowerCase();if(!Object(a["b"])(s,n))return;var i=document.createElement(n);if(!i)return;var r=t.attrs;if(Object(a["e"])(r)){var o=s[n]||[];Object.keys(r).forEach(function(t){var e=r[t];switch(t){case"class":case"style":i.setAttribute(t,e);break;default:-1!==o.indexOf(t)&&i.setAttribute(t,e)}})}var c=t.children;Array.isArray(c)&&c.length&&l(t.children,i),e.appendChild(i)}}),e}var d={name:"RichText",props:{nodes:{type:[Array,String],default:function(){return[]}}},watch:{nodes:function(t){this._renderNodes(t)}},mounted:function(){this._renderNodes(this.nodes)},methods:{_renderNodes:function(t){"string"===typeof t&&(t=Object(o["a"])(t));var e=l(t,document.createDocumentFragment());this.$el.firstChild.innerHTML="",this.$el.firstChild.appendChild(e)}}},h=d,f=(n("1f6b"),n("0c7c")),p=Object(f["a"])(h,i,r,!1,null,null,null);p.options.__file="index.vue";e["default"]=p.exports},b7b5:function(t,e,n){"use strict";n.r(e);var i=n("27a7"),r=["scanCode","setScreenBrightness","getScreenBrightness","setKeepScreenOn","addPhoneContact","subscribePush","unsubscribePush","onPush","offPush","saveImageToPhotosAlbum","saveVideoToPhotosAlbum","setClipboardData","getClipboardData","getRecorderManager","login","share","requestPayment"],o=n("d719"),a=n("d218"),s=n("abbf");n.d(e,"getApp",function(){return s["b"]}),n.d(e,"getCurrentPages",function(){return s["c"]});var c=Object.create(null);c.version="0.0.1",r.forEach(function(t){c[t]=Object(i["d"])(t)}),Object.keys(o["default"]).forEach(function(t){c[t]=Object(i["b"])(t,Object(i["c"])(t,o["default"][t]))}),Object.keys(a["default"]).forEach(function(t){c[t]=Object(i["b"])(t,Object(i["c"])(t,a["default"][t]))});e["default"]=c},b865:function(t,e,n){"use strict";(function(t){function i(e,n,i){t.UniViewJSBridge.subscribeHandler(e,n,i)}n.d(e,"a",function(){return i})}).call(this,n("24aa"))},b866:function(t,e,n){"use strict";n.r(e),n.d(e,"getImageInfo",function(){return r});var i=n("cb0f"),r={src:{type:String,required:!0,validator:function(t,e){e.src=Object(i["a"])(t)}}}},ba15:function(t,e,n){"use strict";var i=function(t,e,n,i){t.addEventListener(e,n,{passive:!1})};e["a"]={methods:{touchtrack:function(t,e,n){var r=this,o=0,a=0,s=0,c=0,u=function(t,n,i,u){if(!1===r[e]({target:t.target,currentTarget:t.currentTarget,preventDefault:t.preventDefault.bind(t),stopPropagation:t.stopPropagation.bind(t),touches:t.touches,changedTouches:t.changedTouches,detail:{state:n,x0:i,y0:u,dx:i-o,dy:u-a,ddx:i-s,ddy:u-c,timeStamp:t.timeStamp}}))return!1},l=null;i(t,"touchstart",function(t){if(1===t.touches.length&&!l)return l=t,o=s=t.touches[0].pageX,a=c=t.touches[0].pageY,u(t,"start",o,a)}),i(t,"touchmove",function(t){if(1===t.touches.length&&l){var e=u(t,"move",t.touches[0].pageX,t.touches[0].pageY);return s=t.touches[0].pageX,c=t.touches[0].pageY,t.preventDefault(),e}}),i(t,"touchend",function(t){if(0===t.touches.length&&l)return l=null,u(t,"end",t.changedTouches[0].pageX,t.changedTouches[0].pageY)}),i(t,"touchcancel",function(t){if(l){var e=l;return l=null,u(t,n?"cancel":"end",e.touches[0].pageX,e.touches[0].pageY)}})}}}},bd98:function(t,e,n){"use strict";(function(t){var i=n("8af1");e["a"]={name:"Label",mixins:[i["a"]],props:{for:{type:String,default:""}},methods:{_onClick:function(e){var n=/^uni-(checkbox|radio|switch)-/.test(e.target.className);n||(n=/^uni-(checkbox|radio|switch|button)$/i.test(e.target.tagName)),n||(this.for?t.emit("uni-label-click-"+this.$page.id+"-"+this.for,e,!0):this.$broadcast(["Checkbox","Radio","Switch","Button"],"uni-label-click",e,!0))}}}}).call(this,n("501c"))},bdb1:function(t,e,n){var i={"./can-i-use.js":"7771","./context/audio.js":"2c67","./context/inner-audio.js":"57a7","./context/map.js":"8e58","./context/video.js":"d16d","./index.js":"d719","./location.js":"2ae7","./media/get-image-info.js":"a4cf","./media/preview-image.js":"898f","./navigation-bar.js":"f8c2","./network/request.js":"82c2","./network/socket.js":"811a","./page-event.js":"9eba","./popup.js":"4062","./route.js":"5bd2","./storage.js":"c84e","./tab-bar.js":"b5ca","./wxml/create-selector-query.js":"7f3b"};function r(t){var e=o(t);return n(e)}function o(t){var e=i[t];if(!(e+1)){var n=new Error("Cannot find module '"+t+"'");throw n.code="MODULE_NOT_FOUND",n}return e}r.keys=function(){return Object.keys(i)},r.resolve=o,t.exports=r,r.id="bdb1"},bde3:function(t,e,n){},be12:function(t,e,n){"use strict";(function(t){function n(t,e,n){var i=Array.prototype.slice.call(t.changedTouches).filter(function(t){return t.identifier===e})[0];return!!i&&(t.deltaY=i.pageY-n,!0)}var i="pulling",r="reached",o="aborting",a="refreshing",s="restoring";e["a"]={mounted:function(){var e=this;this.enablePullDownRefresh&&(this.refreshContainerElem=this.$refs.refresh.$el,this.refreshControllerElem=this.refreshContainerElem.querySelector(".uni-page-refresh"),this.refreshInnerElemStyle=this.refreshControllerElem.querySelector(".uni-page-refresh-inner").style,t.on(this.$route.params.__id__+".startPullDownRefresh",function(){e.state||(e.state=a,e._addClass(),setTimeout(function(){e._refreshing()},50))}),t.on(this.$route.params.__id__+".stopPullDownRefresh",function(){e.state===a&&(e._removeClass(),e.state=s,e._addClass(),e._restoring(function(){e._removeClass(),e.state=e.distance=e.offset=null}))}))},methods:{_touchstart:function(t){var e=t.changedTouches[0];this.touchId=e.identifier,this.startY=e.pageY,[o,a,s].indexOf(this.state)>=0?this.canRefresh=!1:this.canRefresh=!0},_touchmove:function(t){if(this.canRefresh&&n(t,this.touchId,this.startY)){var e=t.deltaY;if(0===(document.documentElement.scrollTop||document.body.scrollTop)){if(!(e<0)||this.state){t.preventDefault(),null==this.distance&&(this.offset=e,this.state=i,this._addClass()),e-=this.offset,e<0&&(e=0),this.distance=e;var o=e>=this.refreshOptions.range&&this.state!==r,a=e1?i=1:i*=i*i;var r=Math.round(t/(this.refreshOptions.range/this.refreshOptions.height)),o=r?"translate3d(-50%, "+r+"px, 0)":0;n.webkitTransform=o,n.clip="rect("+(45-r)+"px,45px,45px,-5px)",this.refreshInnerElemStyle.webkitTransform="rotate("+360*i+"deg)"}},_aborting:function(t){var e=this.refreshControllerElem;if(e){var n=e.style;if(n.webkitTransform){n.webkitTransition="-webkit-transform 0.3s",n.webkitTransform="translate3d(-50%, 0, 0)";var i=function i(){r&&clearTimeout(r),e.removeEventListener("webkitTransitionEnd",i),n.webkitTransition="",t()};e.addEventListener("webkitTransitionEnd",i);var r=setTimeout(i,350)}else t()}},_refreshing:function(){var e=this.refreshControllerElem;if(e){var n=e.style;n.webkitTransition="-webkit-transform 0.2s",n.webkitTransform="translate3d(-50%, "+this.refreshOptions.height+"px, 0)",t.emit("onPullDownRefresh",{},this.$route.params.__id__)}},_restoring:function(t){var e=this.refreshControllerElem;if(e){var n=e.style;n.webkitTransition="-webkit-transform 0.3s",n.webkitTransform+=" scale(0.01)";var i=function i(){r&&clearTimeout(r),e.removeEventListener("webkitTransitionEnd",i),n.webkitTransition="",n.webkitTransform="translate3d(-50%, 0, 0)",t()};e.addEventListener("webkitTransitionEnd",i);var r=setTimeout(i,350)}}}}}).call(this,n("0dd1"))},bfea:function(t,e,n){"use strict";var i=n("1360"),r=n.n(i);r.a},c312:function(t,e,n){},c35d:function(t,e,n){"use strict";n.r(e);var i=function(){var t=this,e=t.$createElement,n=t._self._c||e;return n("uni-picker",{on:{click:function(e){return e.stopPropagation(),t._click(e)}}},[n("div",[t._t("default")],2)])},r=[],o=n("0eb2"),a=o["a"],s=(n("6f00"),n("0c7c")),c=Object(s["a"])(a,i,r,!1,null,null,null);c.options.__file="index.vue";e["default"]=c.exports},c439:function(t,e,n){"use strict";n.r(e),n.d(e,"getLocation",function(){return r}),n.d(e,"openLocation",function(){return o});var i={WGS84:"WGS84",GCJ02:"GCJ02"},r={type:{type:String,validator:function(t,e){t=(t||"").toUpperCase(),e.type=Object.values(i).indexOf(t)<0?i.WGS84:t},default:i.WGS84},altitude:{altitude:Boolean,default:!1}},o={latitude:{type:Number,required:!0},longitude:{type:Number,required:!0},scale:{type:Number,validator:function(t,e){t=Math.floor(t),e.scale=t>=5&&t<=18?t:18},default:18},name:{type:String},address:{type:String}}},c7e4:function(t,e,n){"use strict";n.r(e);var i={};n.r(i),n.d(i,"checkDeviceWidth",function(){return o["a"]}),n.d(i,"upx2px",function(){return o["b"]});var r=n("27a7"),o=n("6508"),a=Object.create(null);a.version="0.0.1",Object.keys(i).forEach(function(t){a[t]=Object(r["c"])(t,i[t])});e["default"]=a},c84e:function(t,e,n){"use strict";function i(t){return i="function"===typeof Symbol&&"symbol"===typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"===typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},i(t)}function r(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},e=t.key,n=t.data,r={type:"object"===i(n)?"object":"string",data:n};localStorage.setItem(e,JSON.stringify(r));var o=localStorage.getItem("uni-storage-keys");if(o){var a=JSON.parse(o);a.indexOf(e)<0&&(a.push(e),localStorage.setItem("uni-storage-keys",JSON.stringify(a)))}else localStorage.setItem("uni-storage-keys",JSON.stringify([e]));return{errMsg:"setStorage:ok"}}function o(t,e){r({key:t,data:e})}function a(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},e=t.key,n=localStorage.getItem(e);return n?{data:JSON.parse(n).data,errMsg:"getStorage:ok"}:{data:"",errMsg:"getStorage:fail"}}function s(t){var e=a({key:t});return e.data}function c(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},e=t.key,n=localStorage.getItem("uni-storage-keys");if(n){var i=JSON.parse(n),r=i.indexOf(e);i.splice(r,1),localStorage.setItem("uni-storage-keys",JSON.stringify(i))}return localStorage.removeItem(e),{errMsg:"removeStorage:ok"}}function u(t){c({key:t})}function l(){return localStorage.clear(),{errMsg:"clearStorage:ok"}}function d(){l()}function h(){var t=localStorage.getItem("uni-storage-keys");return t?{keys:JSON.parse(t),currentSize:0,limitSize:0,errMsg:"getStorageInfo:ok"}:{keys:"",currentSize:0,limitSize:0,errMsg:"getStorageInfo:fail"}}function f(){var t=h();return delete t.errMsg,t}n.r(e),n.d(e,"setStorage",function(){return r}),n.d(e,"setStorageSync",function(){return o}),n.d(e,"getStorage",function(){return a}),n.d(e,"getStorageSync",function(){return s}),n.d(e,"removeStorage",function(){return c}),n.d(e,"removeStorageSync",function(){return u}),n.d(e,"clearStorage",function(){return l}),n.d(e,"clearStorageSync",function(){return d}),n.d(e,"getStorageInfo",function(){return h}),n.d(e,"getStorageInfoSync",function(){return f})},c8ed:function(t,e,n){"use strict";var i=n("0dba"),r=n.n(i);r.a},c96e:function(t,e,n){"use strict";var i=n("c312"),r=n.n(i);r.a},c99c:function(t,e,n){},cb0f:function(t,e,n){"use strict";n.d(e,"a",function(){return s});var i=n("0f74"),r=/^(http|https|file):\/\//,o=/^\s*data:image\//;function a(t){return __uniConfig.router.base?__uniConfig.router.base+t:t}function s(t){if(0===t.indexOf("/"))return a(t.substr(1));if(r.test(t)||o.test(t)||0===t.indexOf("blob:"))return t;var e=getCurrentPages();return e.length?a(Object(i["a"])(e[e.length-1].$page.route,t).substr(1)):t}},cc83:function(t,e,n){},cee1:function(t,e,n){},cef5:function(t,e,n){"use strict";n.r(e),n.d(e,"getProvider",function(){return r});var i={OAUTH:"OAUTH",SHARE:"SHARE",PAYMENT:"PAYMENT",PUSH:"PUSH"},r={service:{type:String,required:!0,validator:function(t,e){if(t=(t||"").toUpperCase(),t&&Object.values(i).indexOf(t)<0)return"service error"}}}},d16d:function(t,e,n){"use strict";n.r(e),function(t){function i(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function r(t,e){for(var n=0;n0&&void 0!==arguments[0]?arguments[0]:{},e=t.text,n=t.color;a(this.id,this.pageId,"sendDanmu",{text:e,color:n})}},{key:"playbackRate",value:function(t){~s.indexOf(t)||(t=1),a(this.id,this.pageId,"playbackRate",{rate:t})}},{key:"requestFullScreen",value:function(){a(this.id,this.pageId,"requestFullScreen")}},{key:"exitFullScreen",value:function(){a(this.id,this.pageId,"exitFullScreen")}},{key:"showStatusBar",value:function(){a(this.id,this.pageId,"showStatusBar")}},{key:"hideStatusBar",value:function(){a(this.id,this.pageId,"hideStatusBar")}}]),t}();function u(e,n){if(n)return new c(e,n.$page.id);var i=getApp();if(i.$route&&i.$route.params.__id__)return new c(e,i.$route.params.__id__);t.emit("onError","createVideoContext:fail")}}.call(this,n("0dd1"))},d218:function(t,e,n){"use strict";n.r(e);var i=Object.create(null),r=n("e3a7");r.keys().forEach(function(t){"./index.js"!==t&&Object.assign(i,r(t))}),e["default"]=i},d3bd:function(t,e,n){"use strict";n.r(e);var i,r,o=n("8af1"),a={name:"Button",mixins:[o["b"],o["a"],o["c"]],props:{hoverClass:{type:String,default:"button-hover"},disabled:{type:[Boolean,String],default:!1},id:{type:String,default:""},hoverStopPropagation:{type:Boolean,default:!1},hoverStartTime:{type:Number,default:20},hoverStayTime:{type:Number,default:70},formType:{type:String,default:"",validator:function(t){return~["","submit","reset"].indexOf(t)}}},data:function(){return{clickFunction:null}},methods:{_onClick:function(t,e){this.disabled||(e&&this.$el.click(),this.formType&&this.$dispatch("Form","submit"===this.formType?"uni-form-submit":"uni-form-reset",{type:this.formType}))},_bindObjectListeners:function(t,e){if(e)for(var n in e){var i=t.on[n],r=e[n];t.on[n]=i?[].concat(i,r):r}return t}},render:function(t){var e=this,n=Object.create(null);return this.$listeners&&Object.keys(this.$listeners).forEach(function(t){(!e.disabled||"click"!==t&&"tap"!==t)&&(n[t]=e.$listeners[t])}),this.hoverClass&&"none"!==this.hoverClass?t("uni-button",this._bindObjectListeners({class:[this.hovering?this.hoverClass:""],attrs:{disabled:this.disabled},on:{touchstart:this._hoverTouchStart,touchend:this._hoverTouchEnd,touchcancel:this._hoverTouchCancel,click:this._onClick}},n),this.$slots.default):t("uni-button",this._bindObjectListeners({class:[this.hovering?this.hoverClass:""],attrs:{disabled:this.disabled},on:{click:this._onClick}},n),this.$slots.default)},listeners:{"label-click":"_onClick","@label-click":"_onClick"}},s=a,c=(n("5676"),n("0c7c")),u=Object(c["a"])(s,i,r,!1,null,null,null);u.options.__file="index.vue";e["default"]=u.exports},d4b6:function(t,e,n){"use strict";n.d(e,"b",function(){return f}),n.d(e,"a",function(){return S});var i=n("f2b3"),r=n("85b6"),o=n("24d9"),a=n("a470");function s(t,e){return l(t)||u(t,e)||c()}function c(){throw new TypeError("Invalid attempt to destructure non-iterable instance")}function u(t,e){var n=[],i=!0,r=!1,o=void 0;try{for(var a,s=t[Symbol.iterator]();!(i=(a=s.next()).done);i=!0)if(n.push(a.value),e&&n.length===e)break}catch(c){r=!0,o=c}finally{try{i||null==s["return"]||s["return"]()}finally{if(r)throw o}}return n}function l(t){if(Array.isArray(t))return t}function d(t,e){var n={id:t.id,offsetLeft:t.offsetLeft,offsetTop:t.offsetTop,dataset:Object(r["b"])(t.dataset)};return e&&Object.assign(n,e),n}function h(t){if(t){for(var e=[],n=Object(a["a"])(),i=n.top,r=0;r1&&void 0!==arguments[1]?arguments[1]:{},n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},i=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{},r=arguments.length>4&&void 0!==arguments[4]?arguments[4]:{};return e._processed?(e.type=n.type||t,e):Object(o["b"])({type:n.type||t,timeStamp:e.timeStamp||0,detail:n,target:d(i,n),currentTarget:d(r),touches:h(e.touches),changedTouches:h(e.changedTouches),preventDefault:function(){},stopPropagation:function(){}})}var p=350,g=10,v=!!i["g"]&&{passive:!0},m=!1;function b(){m&&(clearTimeout(m),m=!1)}var y=0,_=0;function w(t){if(b(),1===t.touches.length){var e=s(t.touches,1),n=e[0],i=n.pageX,r=n.pageY;y=i,_=r,m=setTimeout(function(){t.target.dispatchEvent(new TouchEvent("longpress",{bubbles:!0,cancelable:!0,target:t.target,currentTarget:t.currentTarget,touches:t.touches,changedTouches:t.changedTouches}))},p)}}function k(t){if(m){if(1!==t.touches.length)return b();var e=s(t.touches,1),n=e[0],i=n.pageX,r=n.pageY;return Math.abs(i-y)>g||Math.abs(r-_)>g?b():void 0}}function S(){window.addEventListener("touchstart",w,v),window.addEventListener("touchmove",k,v),window.addEventListener("touchend",b,v),window.addEventListener("touchcancel",b,v)}},d5bc:function(t,e,n){},d5be:function(t,e,n){"use strict";n.r(e),function(t){n.d(e,"chooseImage",function(){return s});var i=t,r=i.invokeCallbackHandler,o=null,a=function(t){var e=document.createElement("input");return e.type="file",e.style="visibility: hidden;z-index: -999;width: 0;height: 0;",e.accept="image/*",t.count>1&&(e.multiple="multiple"),1===t.sourceType.length&&"camera"===t.sourceType[0]&&(e.capture="camera"),e};function s(t,e){var n=t.count,i=t.sourceType;o&&(document.body.removeChild(o),o=null),o=a({count:n,sourceType:i}),document.body.appendChild(o),o.addEventListener("change",function(t){for(var n=[],i=[],o=t.target.files.length,a=0;a=e||n.radioList[e].radioChecked&&(n.radioList[r].radioChecked=!1)}))})},_getFormData:function(){var t={};if(""!==this.name){var e="";this.radioList.forEach(function(t){t.radioChecked&&(e=t.value)}),t["value"]=e,t["key"]=this.name}return t}}},s=a,c=(n("fb61"),n("0c7c")),u=Object(c["a"])(s,i,r,!1,null,null,null);u.options.__file="index.vue";e["default"]=u.exports},d60d:function(t,e,n){},d68b:function(t,e,n){"use strict";n.r(e),n.d(e,"showModal",function(){return r}),n.d(e,"showToast",function(){return o}),n.d(e,"showLoading",function(){return a}),n.d(e,"showActionSheet",function(){return s});var i=n("cb0f"),r={title:{type:String,default:""},content:{type:String,default:""},showCancel:{type:Boolean,default:!0},cancelText:{type:String,default:"取消"},cancelColor:{type:String,default:"#000000"},confirmText:{type:String,default:"确定"},confirmColor:{type:String,default:"#007aff"},visible:{type:Boolean,default:!0}},o={title:{type:String,default:""},icon:{default:"success",validator:function(t,e){-1===["success","loading","none"].indexOf(t)&&(e.icon="success")}},image:{type:String,default:"",validator:function(t,e){t&&(e.image=Object(i["a"])(t))}},duration:{type:Number,default:1500},mask:{type:Boolean,default:!1},visible:{type:Boolean,default:!0}},a={title:{type:String,default:""},icon:{type:String,default:"loading"},duration:{type:Number,default:1e8},mask:{type:Boolean,default:!1},visible:{type:Boolean,default:!0}},s={itemList:{type:Array,required:!0,validator:function(t,e){if(!t.length)return"parameter.itemList should have at least 1 item"}},itemColor:{type:String,default:"#000000"},visible:{type:Boolean,default:!0}}},d719:function(t,e,n){"use strict";n.r(e);var i=Object.create(null),r=n("bdb1");r.keys().forEach(function(t){"./index.js"!==t&&Object.assign(i,r(t))}),e["default"]=i},d7b1:function(t,e,n){"use strict";var i=n("cb0f"),r=n("d4b6");e["a"]={methods:{$getRealPath:function(t){return Object(i["a"])(t)},$trigger:function(t,e,n){this.$emit(t,r["b"].call(this,t,e,n,this.$el,this.$el))}}}},d8ff:function(t,e,n){},db18:function(t,e,n){"use strict";var i=n("08c9"),r=n.n(i);r.a},de29:function(t,e,n){"use strict";n.d(e,"a",function(){return o});var i=n("f2b3");function r(t){return r="function"===typeof Symbol&&"symbol"===typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"===typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},r(t)}function o(t,e,n){var r=e[t],o=!Object(i["b"])(n,t),s=n[t],c=d(Boolean,r.type);if(c>-1&&o&&!Object(i["b"])(r,"default")&&(s=!1),void 0===s&&Object(i["b"])(r,"default")){var u=r["default"];s=Object(i["d"])(u)?u():u,n[t]=s}return a(r,t,s,o,n)}function a(t,e,n,i,r){if(t.required&&i)return"Missing required parameter `".concat(e,"`");if(null==n&&!t.required){var o=t.validator;return o?o(n,r):void 0}var a=t.type,s=!a||!0===a,u=[];if(a){Array.isArray(a)||(a=[a]);for(var l=0;l2&&void 0!==arguments[2]&&arguments[2],i=document.getElementById(e);i&&n&&(i.parentNode.removeChild(i),i=null),i||(i=document.createElement("style"),i.type="text/css",e&&(i.id=e),document.getElementsByTagName("head")[0].appendChild(i)),i.appendChild(document.createTextNode(t))}n.d(e,"a",function(){return i})},eaa4:function(t,e,n){},ed9f:function(t,e,n){"use strict";n.r(e),n.d(e,"chooseVideo",function(){return r});var i=["album","camera"],r={sourceType:{type:Array,required:!1,default:i,validator:function(t,e){var n=t.length;if(n){for(var r=0;r0&&void 0!==arguments[0]?arguments[0]:"";return(""+t).replace(/[^\x00-\xff]/g,"**").length}function f(t){var e,n,i;return t=t.replace("#",""),6===t.length&&(e=t.substring(0,2),n=t.substring(2,4),i=t.substring(4,6),1===e.length&&(e+=e),1===n.length&&(n+=n),1===i.length&&(i+=i),e=parseInt(e,16),n=parseInt(n,16),i=parseInt(i,16),{r:e,g:n,b:i})}n.d(e,"g",function(){return i}),n.d(e,"d",function(){return s}),n.d(e,"e",function(){return c}),n.d(e,"b",function(){return u}),n.d(e,"h",function(){return l}),n.d(e,"f",function(){return d}),n.d(e,"a",function(){return h}),n.d(e,"c",function(){return f})},f4e0:function(t,e,n){"use strict";var i=n("ffdb"),r=n.n(i);r.a},f53a:function(t,e,n){"use strict";var i=n("4871"),r=n.n(i);r.a},f7b4:function(t,e,n){"use strict";n.r(e),function(t){n.d(e,"onCompassChange",function(){return o}),n.d(e,"startCompass",function(){return a}),n.d(e,"stopCompass",function(){return s});var i,r=[];function o(t){r.push(t),i||a()}function a(){var e=t,n=e.invokeCallbackHandler;if(window.DeviceOrientationEvent)return i=function(t){var e=360-t.alpha;r.forEach(function(t){n(t,{errMsg:"onCompassChange:ok",direction:e||0})})},window.addEventListener("deviceorientation",i,!1),{};throw new Error("device nonsupport deviceorientation")}function s(){return i&&(window.removeEventListener("deviceorientation",i,!1),i=null),{}}}.call(this,n("0dd1"))},f7fd:function(t,e,n){"use strict";var i=n("ac9d"),r=n.n(i);r.a},f8c2:function(t,e,n){"use strict";function i(t,e){var n=getCurrentPages();if(n.length){var i=n[n.length-1].$parent.$parent;switch(t){case"setNavigationBarColor":var r=e.frontColor,o=e.backgroundColor,a=e.animation,s=a.duration,c=a.timingFunc;r&&(i.navigationBar.textColor="#000000"===r?"black":"white"),o&&(i.navigationBar.backgroundColor=o),i.navigationBar.duration=s+"ms",i.navigationBar.timingFunc=c;break;case"showNavigationBarLoading":i.navigationBar.loading=!0;break;case"hideNavigationBarLoading":i.navigationBar.loading=!1;break;case"setNavigationBarTitle":var u=e.title;i.navigationBar.titleText=u;break}}return{}}function r(t){return i("setNavigationBarColor",t)}function o(){return i("showNavigationBarLoading")}function a(){return i("hideNavigationBarLoading")}function s(t){return i("setNavigationBarTitle",t)}n.r(e),n.d(e,"setNavigationBarColor",function(){return r}),n.d(e,"showNavigationBarLoading",function(){return o}),n.d(e,"hideNavigationBarLoading",function(){return a}),n.d(e,"setNavigationBarTitle",function(){return s})},f8d2:function(t,e,n){},fa1e:function(t,e,n){"use strict";function i(){var t=document.activeElement;!t||"TEXTAREA"!==t.tagName&&"INPUT"!==t.tagName||t.blur()}n.r(e),n.d(e,"hideKeyboard",function(){return i})},fa89:function(t,e,n){},fae3:function(t,e,n){"use strict";var i;(n.r(e),"undefined"!==typeof window)&&((i=window.document.currentScript)&&(i=i.src.match(/(.+\/)[^\/]+\.js(\?.*)?$/))&&(n.p=i[1]));n("2ef3")},fb61:function(t,e,n){"use strict";var i=n("90c9"),r=n.n(i);r.a},fcd8:function(t,e,n){},ff28:function(t,e,n){"use strict";var i=n("23af"),r=n.n(i);r.a},ffdb:function(t,e,n){},ffdc:function(t,e,n){"use strict";function i(t,e,n,i){var r,o=document.createElement("script"),a=e.callback||"callback",s="__callback"+Date.now(),c=e.timeout||3e4;function u(){clearTimeout(r),delete window[s],o.remove()}window[s]=function(t){"function"===typeof n&&n(t),u()},o.onerror=function(){"function"===typeof i&&i(),u()},r=setTimeout(function(){"function"===typeof i&&i(),u()},c),o.src=t+(t.indexOf("?")>=0?"&":"?")+a+"="+s,document.body.appendChild(o)}n.d(e,"a",function(){return i})}})}); \ No newline at end of file diff --git a/packages/uni-h5/package.json b/packages/uni-h5/package.json new file mode 100644 index 000000000..3452d9bc6 --- /dev/null +++ b/packages/uni-h5/package.json @@ -0,0 +1,11 @@ +{ + "name": "@dcloudio/uni-h5", + "version": "0.0.5", + "description": "uni-app h5", + "main": "dist/index.umd.min.js", + "scripts": { + "test": "echo \"Error: no test specified\" && exit 1" + }, + "author": "fxy060608", + "license": "MIT" +} diff --git a/postcss.config.js b/postcss.config.js new file mode 100644 index 000000000..bb2a0dd69 --- /dev/null +++ b/postcss.config.js @@ -0,0 +1,5 @@ +module.exports = { + plugins: [ + require('autoprefixer')({ browsers: ['iOS >= 8', 'Android >= 4'] }) + ] +} diff --git a/src/assets/svg/arrow-left.svg b/src/assets/svg/arrow-left.svg new file mode 100644 index 000000000..ec1737643 --- /dev/null +++ b/src/assets/svg/arrow-left.svg @@ -0,0 +1 @@ +Rectangle 1 \ No newline at end of file diff --git a/src/core/helpers/api.js b/src/core/helpers/api.js new file mode 100644 index 000000000..82128c765 --- /dev/null +++ b/src/core/helpers/api.js @@ -0,0 +1,334 @@ +import { + isFn, + isPlainObject +} from 'uni-shared' + +import { + tryCatch, + tryCatchFramework +} from './catch' + +import protocol from './protocol' + +import validateParam from './params' + +function invokeCallbackHandlerFail (err, apiName, callbackId) { + const errMsg = `${apiName}:fail ${err}` + console.error(errMsg) + if (callbackId === -1) { + throw new Error(errMsg) + } + if (typeof callbackId === 'number') { + invokeCallbackHandler(callbackId, { + errMsg + }) + } + return false +} + +const callbackApiParamTypes = [{ + name: 'callback', + type: Function, + required: true +}] + +function validateParams (apiName, paramsData, callbackId) { + let paramTypes = protocol[apiName] + if (!paramTypes && isCallbackApi(apiName)) { + paramTypes = callbackApiParamTypes + } + if (paramTypes) { + if (Array.isArray(paramTypes) && Array.isArray(paramsData)) { + const paramTypeObj = Object.create(null) + const paramsDataObj = Object.create(null) + const paramsDataLength = paramsData.length + paramTypes.forEach((paramType, index) => { + paramTypeObj[paramType.name] = paramType + if (paramsDataLength > index) { + paramsDataObj[paramType.name] = paramsData[index] + } + }) + paramTypes = paramTypeObj + paramsData = paramsDataObj + } + + if (isFn(paramTypes.beforeValidate)) { + const err = paramTypes.beforeValidate(paramsData) + if (err) { + return invokeCallbackHandlerFail(err, apiName, callbackId) + } + } + + const keys = Object.keys(paramTypes) + for (let i = 0; i < keys.length; i++) { + if (keys[i] === 'beforeValidate') { + continue + } + const err = validateParam(keys[i], paramTypes, paramsData) + if (err) { + return invokeCallbackHandlerFail(err, apiName, callbackId) + } + } + } + return true +} + +let invokeCallbackId = 1 + +const invokeCallbacks = {} + +function createKeepAliveApiCallback (apiName, callback) { + const callbackId = invokeCallbackId++ + const invokeCallbackName = 'api.' + apiName + '.' + callbackId + + const invokeCallback = function (res) { + callback(res) + } + + invokeCallbacks[callbackId] = { + name: invokeCallbackName, + keepAlive: true, + callback: invokeCallback + } + return callbackId +} + +function createApiCallback (apiName, params = {}, extras = {}) { + if (!isPlainObject(params)) { + return { + params + } + } + params = Object.assign({}, params) + + const apiCallbacks = {} + for (let name in params) { + const param = params[name] + if (isFn(param)) { + apiCallbacks[name] = tryCatch(param) + delete params[name] + } + } + + const { + success, + fail, + cancel, + complete + } = apiCallbacks + + const hasSuccess = isFn(success) + const hasFail = isFn(fail) + const hasCancel = isFn(cancel) + const hasComplete = isFn(complete) + + if (!hasSuccess && !hasFail && !hasCancel && !hasComplete) { // 无回调 + return { + params + } + } + + const wrapperCallbacks = {} + for (let name in extras) { + const extra = extras[name] + if (isFn(extra)) { + wrapperCallbacks[name] = tryCatchFramework(extra) + delete extras[name] + } + } + + const { + beforeSuccess, + afterSuccess, + beforeFail, + afterFail, + beforeCancel, + afterCancel, + afterAll + } = wrapperCallbacks + + const callbackId = invokeCallbackId++ + const invokeCallbackName = 'api.' + apiName + '.' + callbackId + + const invokeCallback = function (res) { + res.errMsg = res.errMsg || apiName + ':ok' + + const errMsg = res.errMsg + + if (errMsg.indexOf(apiName + ':ok') === 0) { + isFn(beforeSuccess) && beforeSuccess(res) + + hasSuccess && success(res) + + isFn(afterSuccess) && afterSuccess(res) + } else if (errMsg.indexOf(apiName + ':cancel') === 0) { + res.errMsg = res.errMsg.replace(apiName + ':cancel', apiName + ':fail cancel') + + hasFail && fail(res) + + isFn(beforeCancel) && beforeCancel(res) + + hasCancel && cancel(res) + + isFn(afterCancel) && afterCancel(res) + } else if (errMsg.indexOf(apiName + ':fail') === 0) { + isFn(beforeFail) && beforeFail(res) + + hasFail && fail(res) + + isFn(afterFail) && afterFail(res) + } + + hasComplete && complete(res) + + isFn(afterAll) && afterAll(res) + } + + invokeCallbacks[callbackId] = { + name: invokeCallbackName, + callback: invokeCallback + } + + return { + params, + callbackId + } +} + +function createInvokeCallback (apiName, params = {}, extras = {}) { + const { + params: args, + callbackId + } = createApiCallback(apiName, params, extras) + + if (isPlainObject(args) && !validateParams(apiName, args, callbackId)) { + return { + params: args, + callbackId: false + } + } + + return { + params: args, + callbackId + } +} + +export function invokeCallbackHandler (invokeCallbackId, res) { + if (typeof invokeCallbackId === 'number') { + const invokeCallback = invokeCallbacks[invokeCallbackId] + if (invokeCallback) { + if (!invokeCallback.keepAlive) { + delete invokeCallbacks[invokeCallbackId] + } + return invokeCallback.callback(res) + } + } + return res +} + +const SYNC_API_RE = /hideKeyboard|upx2px|canIUse|^create|Sync$|Manager$/ + +const TASK_APIS = ['request', 'downloadFile', 'uploadFile', 'connectSocket'] + +const CALLBACK_API_RE = /^on/ + +function isSyncApi (name) { + return SYNC_API_RE.test(name) +} + +function isCallbackApi (name) { + return CALLBACK_API_RE.test(name) +} + +function isTaskApi (name) { + return TASK_APIS.indexOf(name) !== -1 +} + +function handlePromise (promise) { + return promise.then(data => { + return [null, data] + }) + .catch(err => [err]) +} + +function shouldPromise (name) { + if (isSyncApi(name)) { + return false + } + if (isCallbackApi(name)) { + return false + } + return true +} + +export function promisify (name, api) { + if (!shouldPromise(name)) { + return api + } + return function promiseApi (options = {}, ...params) { + if (isFn(options.success) || isFn(options.fail) || isFn(options.complete)) { + return api(options, ...params) + } + return handlePromise(new Promise((resolve, reject) => { + api(Object.assign({}, options, { + success: resolve, + fail: reject + }), ...params) + /* eslint-disable no-extend-native */ + Promise.prototype.finally = function (callback) { + const promise = this.constructor + return this.then( + value => promise.resolve(callback()).then(() => value), + reason => promise.resolve(callback()).then(() => { + throw reason + }) + ) + } + })) + } +} + +export function wrapperUnimplemented (name) { + return function (args) { + console.error('API `' + name + '` is not yet implemented') + } +} + +export function wrapper (name, invokeMethod, extras) { + return function (...args) { + if (isSyncApi(name)) { + if (validateParams(name, args, -1)) { + return invokeMethod.apply(null, args) + } + } else if (isCallbackApi(name)) { + if (validateParams(name, args, -1)) { + return invokeMethod(createKeepAliveApiCallback(name, args[0])) + } + } else { + let argsObj = {} + if (args.length) { + argsObj = args[0] + } + const { + params, + callbackId + } = createInvokeCallback(name, argsObj, extras) + if (callbackId !== false) { + let res + if (isFn(params)) { + res = invokeMethod(callbackId) + } else { + res = invokeMethod(params, callbackId) + } + if (res && !isTaskApi(name)) { + res = invokeCallbackHandler(callbackId, res) + if (isPlainObject(res)) { + res.errMsg = res.errMsg || name + ':ok' + } + } + return res + } + } + } +} diff --git a/src/core/helpers/callbacks.js b/src/core/helpers/callbacks.js new file mode 100644 index 000000000..a4e11fe38 --- /dev/null +++ b/src/core/helpers/callbacks.js @@ -0,0 +1,29 @@ +const callbacks = {} + +export default function createCallbacks (namespace) { + let scopedCallbacks = callbacks[namespace] + if (!scopedCallbacks) { + scopedCallbacks = { + id: 1, + callbacks: Object.create(null) + } + callbacks[namespace] = scopedCallbacks + } + return { + get (id) { + return scopedCallbacks.callbacks[id] + }, + pop (id) { + const callback = scopedCallbacks.callbacks[id] + if (callback) { + delete scopedCallbacks.callbacks[id] + } + return callback + }, + push (callback) { + const id = scopedCallbacks.id++ + scopedCallbacks.callbacks[id] = callback + return id + } + } +} diff --git a/src/core/helpers/catch.js b/src/core/helpers/catch.js new file mode 100644 index 000000000..c6d81d8a7 --- /dev/null +++ b/src/core/helpers/catch.js @@ -0,0 +1,26 @@ +/** + * 框架内 try-catch + */ +export function tryCatchFramework (fn) { + return function () { + try { + return fn.apply(fn, arguments) + } catch (e) { + // TODO + console.error(e) + } + } +} +/** + * 开发者 try-catch + */ +export function tryCatch (fn) { + return function () { + try { + return fn.apply(fn, arguments) + } catch (e) { + // TODO + console.error(e) + } + } +} diff --git a/src/core/helpers/console.js b/src/core/helpers/console.js new file mode 100644 index 000000000..861aec3b7 --- /dev/null +++ b/src/core/helpers/console.js @@ -0,0 +1,24 @@ +const unshift = Array.prototype.unshift + +function format (args) { + unshift.call(args, '[system]') + return args +} + +function createLog (method) { + return function () { + let printLog = true + if (method === 'debug' && !__uniConfig.debug) { + printLog = false + } + printLog && global.console[method].apply(global.console, format(arguments)) + } +} + +export default { + log: createLog('log'), + info: createLog('info'), + warn: createLog('warn'), + debug: createLog('debug'), + error: createLog('error') +} diff --git a/src/core/helpers/constants.js b/src/core/helpers/constants.js new file mode 100644 index 000000000..10fab3d93 --- /dev/null +++ b/src/core/helpers/constants.js @@ -0,0 +1,2 @@ +export const NAVBAR_HEIGHT = 44 +export const TABBAR_HEIGHT = 50 diff --git a/src/core/helpers/get-real-route.js b/src/core/helpers/get-real-route.js new file mode 100644 index 000000000..f49683425 --- /dev/null +++ b/src/core/helpers/get-real-route.js @@ -0,0 +1,32 @@ +export default function getRealRoute (fromRoute, toRoute) { + if (!toRoute) { + toRoute = fromRoute + if (toRoute.indexOf('/') === 0) { + return toRoute + } + const pages = getCurrentPages() + if (pages.length) { + fromRoute = pages[pages.length - 1].$page.route + } else { + fromRoute = '' + } + } else { + if (toRoute.indexOf('/') === 0) { + return toRoute + } + } + if (toRoute.indexOf('./') === 0) { + return getRealRoute(fromRoute, toRoute.substr(2)) + } + const toRouteArray = toRoute.split('/') + const toRouteLength = toRouteArray.length + let i = 0 + for (; i < toRouteLength && toRouteArray[i] === '..'; i++) { + // noop + } + toRouteArray.splice(0, i) + toRoute = toRouteArray.join('/') + const fromRouteArray = fromRoute.length > 0 ? fromRoute.split('/') : [] + fromRouteArray.splice(fromRouteArray.length - i - 1, i + 1) + return '/' + fromRouteArray.concat(toRouteArray).join('/') +} diff --git a/src/core/helpers/html-parser.js b/src/core/helpers/html-parser.js new file mode 100644 index 000000000..1c53bc3a0 --- /dev/null +++ b/src/core/helpers/html-parser.js @@ -0,0 +1,251 @@ +/* + * HTML5 Parser By Sam Blowes + * + * Designed for HTML5 documents + * + * Original code by John Resig (ejohn.org) + * http://ejohn.org/blog/pure-javascript-html-parser/ + * Original code by Erik Arvidsson, Mozilla Public License + * http://erik.eae.net/simplehtmlparser/simplehtmlparser.js + * + * ---------------------------------------------------------------------------- + * License + * ---------------------------------------------------------------------------- + * + * This code is triple licensed using Apache Software License 2.0, + * Mozilla Public License or GNU Public License + * + * //////////////////////////////////////////////////////////////////////////// + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy + * of the License at http://www.apache.org/licenses/LICENSE-2.0 + * + * //////////////////////////////////////////////////////////////////////////// + * + * The contents of this file are subject to the Mozilla Public License + * Version 1.1 (the "License"); you may not use this file except in + * compliance with the License. You may obtain a copy of the License at + * http://www.mozilla.org/MPL/ + * + * Software distributed under the License is distributed on an "AS IS" + * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the + * License for the specific language governing rights and limitations + * under the License. + * + * The Original Code is Simple HTML Parser. + * + * The Initial Developer of the Original Code is Erik Arvidsson. + * Portions created by Erik Arvidssson are Copyright (C) 2004. All Rights + * Reserved. + * + * //////////////////////////////////////////////////////////////////////////// + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + * ---------------------------------------------------------------------------- + * Usage + * ---------------------------------------------------------------------------- + * + * // Use like so: + * HTMLParser(htmlString, { + * start: function(tag, attrs, unary) {}, + * end: function(tag) {}, + * chars: function(text) {}, + * comment: function(text) {} + * }); + * + * // or to get an XML string: + * HTMLtoXML(htmlString); + * + * // or to get an XML DOM Document + * HTMLtoDOM(htmlString); + * + * // or to inject into an existing document/DOM node + * HTMLtoDOM(htmlString, document); + * HTMLtoDOM(htmlString, document.body); + * + */ + +// Regular Expressions for parsing tags and attributes +var startTag = + /^<([-A-Za-z0-9_]+)((?:\s+[a-zA-Z_:][-a-zA-Z0-9_:.]*(?:\s*=\s*(?:(?:"[^"]*")|(?:'[^']*')|[^>\s]+))?)*)\s*(\/?)>/ + +var endTag = /^<\/([-A-Za-z0-9_]+)[^>]*>/ + +var attr = /([a-zA-Z_:][-a-zA-Z0-9_:.]*)(?:\s*=\s*(?:(?:"((?:\\.|[^"])*)")|(?:'((?:\\.|[^'])*)')|([^>\s]+)))?/g + +// Empty Elements - HTML 5 +var empty = makeMap( + 'area,base,basefont,br,col,frame,hr,img,input,link,meta,param,embed,command,keygen,source,track,wbr') + +// Block Elements - HTML 5 +var block = makeMap( + 'a,address,article,applet,aside,audio,blockquote,button,canvas,center,dd,del,dir,div,dl,dt,fieldset,figcaption,figure,footer,form,frameset,h1,h2,h3,h4,h5,h6,header,hgroup,hr,iframe,ins,isindex,li,map,menu,noframes,noscript,object,ol,output,p,pre,section,script,table,tbody,td,tfoot,th,thead,tr,ul,video' +) + +// Inline Elements - HTML 5 +var inline = makeMap( + 'abbr,acronym,applet,b,basefont,bdo,big,br,button,cite,code,del,dfn,em,font,i,iframe,img,input,ins,kbd,label,map,object,q,s,samp,script,select,small,span,strike,strong,sub,sup,textarea,tt,u,var' +) + +// Elements that you can, intentionally, leave open +// (and which close themselves) +var closeSelf = makeMap('colgroup,dd,dt,li,options,p,td,tfoot,th,thead,tr') + +// Attributes that have their values filled in disabled="disabled" +var fillAttrs = makeMap( + 'checked,compact,declare,defer,disabled,ismap,multiple,nohref,noresize,noshade,nowrap,readonly,selected') + +// Special Elements (can contain anything) +var special = makeMap('script,style') + +export default function HTMLParser (html, handler) { + var index; var chars; var match; var stack = [] + + var last = html + stack.last = function () { + return this[this.length - 1] + } + + while (html) { + chars = true + + // Make sure we're not in a script or style element + if (!stack.last() || !special[stack.last()]) { + // Comment + if (html.indexOf('') + + if (index >= 0) { + if (handler.comment) { handler.comment(html.substring(4, index)) } + html = html.substring(index + 3) + chars = false + } + + // end tag + } else if (html.indexOf(']*>'), function (all, text) { + text = text.replace(/|/g, '$1$2') + if (handler.chars) { handler.chars(text) } + + return '' + }) + + parseEndTag('', stack.last()) + } + + if (html == last) { throw 'Parse Error: ' + html } + last = html + } + + // Clean up any remaining tags + parseEndTag() + + function parseStartTag (tag, tagName, rest, unary) { + tagName = tagName.toLowerCase() + + if (block[tagName]) { + while (stack.last() && inline[stack.last()]) { + parseEndTag('', stack.last()) + } + } + + if (closeSelf[tagName] && stack.last() == tagName) { + parseEndTag('', tagName) + } + + unary = empty[tagName] || !!unary + + if (!unary) { stack.push(tagName) } + + if (handler.start) { + var attrs = [] + + rest.replace(attr, function (match, name) { + var value = arguments[2] ? arguments[2] + : arguments[3] ? arguments[3] + : arguments[4] ? arguments[4] + : fillAttrs[name] ? name : '' + + attrs.push({ + name: name, + value: value, + escaped: value.replace(/(^|[^\\])"/g, '$1\\\"') // " + }) + }) + + if (handler.start) { handler.start(tagName, attrs, unary) } + } + } + + function parseEndTag (tag, tagName) { + // If no tag name is provided, clean shop + if (!tagName) { var pos = 0 } + + // Find the closest opened tag of the same type + else { + for (var pos = stack.length - 1; pos >= 0; pos--) { + if (stack[pos] == tagName) { break } + } + } + + if (pos >= 0) { + // Close all the open elements, up the stack + for (var i = stack.length - 1; i >= pos; i--) { + if (handler.end) { handler.end(stack[i]) } + } + + // Remove the open elements from the stack + stack.length = pos + } + } +}; + +function makeMap (str) { + var obj = {} + + var items = str.split(',') + for (var i = 0; i < items.length; i++) { obj[items[i]] = true } + return obj +} diff --git a/src/core/helpers/index.js b/src/core/helpers/index.js new file mode 100644 index 000000000..53cad34d2 --- /dev/null +++ b/src/core/helpers/index.js @@ -0,0 +1,38 @@ +const components = ['SystemAsyncLoading', 'SystemAsyncError'] +export function isPage (vm) { + if (vm.$parent && vm.$parent.$options.name === 'PageBody') { + if (components.indexOf(vm.$options.name) !== -1) { + return false + } + return true + } + return false +} + +export function normalizeDataset (dataset = {}) { + const result = Object.assign({}, dataset) + if (__PLATFORM__ === 'h5') { + const keys = Object.keys(result) + const len = keys.length + if (len) { + // remove data-v- + for (let i = 0; i < len; i++) { + const key = keys[i] + const len = key.length + if (key.substr(0, 1) === 'v' && (len === 9 || len === 10)) { + delete result[key] + break + } + } + } + } + return result +} + +export function upx2px (str) { + str = str + '' + if (str.indexOf('upx') !== -1) { // upx转换 + return uni.upx2px(parseInt(str) || 0) + } + return parseInt(str) || 0 +} diff --git a/src/core/helpers/params.js b/src/core/helpers/params.js new file mode 100644 index 000000000..02a982434 --- /dev/null +++ b/src/core/helpers/params.js @@ -0,0 +1,154 @@ +import { + isFn, + hasOwn, + toRawType, + isPlainObject +} from 'uni-shared' + +export default function validateParam (key, paramTypes, paramsData) { + const paramOptions = paramTypes[key] + const absent = !hasOwn(paramsData, key) + let value = paramsData[key] + + const booleanIndex = getTypeIndex(Boolean, paramOptions.type) + if (booleanIndex > -1) { + if (absent && !hasOwn(paramOptions, 'default')) { + value = false + } + } + if (value === undefined) { + if (hasOwn(paramOptions, 'default')) { + const paramDefault = paramOptions['default'] + value = isFn(paramDefault) ? paramDefault() : paramDefault + paramsData[key] = value // 默认值 + } + } + + return assertParam(paramOptions, key, value, absent, paramsData) +} + +function assertParam ( + paramOptions, + name, + value, + absent, + paramsData +) { + if (paramOptions.required && absent) { + return `Missing required parameter \`${name}\`` + } + + if (value == null && !paramOptions.required) { + const validator = paramOptions.validator + if (validator) { + return validator(value, paramsData) + } + return + } + let type = paramOptions.type + let valid = !type || type === true + const expectedTypes = [] + if (type) { + if (!Array.isArray(type)) { + type = [type] + } + for (let i = 0; i < type.length && !valid; i++) { + const assertedType = assertType(value, type[i]) + expectedTypes.push(assertedType.expectedType || '') + valid = assertedType.valid + } + } + + if (!valid) { + return getInvalidTypeMessage(name, value, expectedTypes) + } + + const validator = paramOptions.validator + if (validator) { + return validator(value, paramsData) + } +} + +const simpleCheckRE = /^(String|Number|Boolean|Function|Symbol)$/ + +function assertType (value, type) { + let valid + const expectedType = getType(type) + if (simpleCheckRE.test(expectedType)) { + const t = typeof value + valid = t === expectedType.toLowerCase() + if (!valid && t === 'object') { + valid = value instanceof type + } + } else if (expectedType === 'Object') { + valid = isPlainObject(value) + } else if (expectedType === 'Array') { + valid = Array.isArray(value) + } else { + valid = value instanceof type + } + return { + valid, + expectedType + } +} + +function getType (fn) { + const match = fn && fn.toString().match(/^\s*function (\w+)/) + return match ? match[1] : '' +} + +function isSameType (a, b) { + return getType(a) === getType(b) +} + +function getTypeIndex (type, expectedTypes) { + if (!Array.isArray(expectedTypes)) { + return isSameType(expectedTypes, type) ? 0 : -1 + } + for (let i = 0, len = expectedTypes.length; i < len; i++) { + if (isSameType(expectedTypes[i], type)) { + return i + } + } + return -1 +} + +function getInvalidTypeMessage (name, value, expectedTypes) { + let message = `parameter \`${name}\`.` + + ` Expected ${expectedTypes.join(', ')}` + const expectedType = expectedTypes[0] + const receivedType = toRawType(value) + const expectedValue = styleValue(value, expectedType) + const receivedValue = styleValue(value, receivedType) + if (expectedTypes.length === 1 && + isExplicable(expectedType) && + !isBoolean(expectedType, receivedType)) { + message += ` with value ${expectedValue}` + } + message += `, got ${receivedType} ` + if (isExplicable(receivedType)) { + message += `with value ${receivedValue}.` + } + return message +} + +function styleValue (value, type) { + if (type === 'String') { + return `"${value}"` + } else if (type === 'Number') { + return `${Number(value)}` + } else { + return `${value}` + } +} + +const explicitTypes = ['string', 'number', 'boolean'] + +function isExplicable (value) { + return explicitTypes.some(elem => value.toLowerCase() === elem) +} + +function isBoolean (...args) { + return args.some(elem => elem.toLowerCase() === 'boolean') +} diff --git a/src/core/helpers/patch.js b/src/core/helpers/patch.js new file mode 100644 index 000000000..be27fca82 --- /dev/null +++ b/src/core/helpers/patch.js @@ -0,0 +1,39 @@ +import { + hasOwn, + isPlainObject +} from 'uni-shared' +/** + * mpvue event + */ +export function wrapperMPEvent (event) { + return Object.assign({ + mp: event, + _processed: true + }, event) +} +/** + * app-plus titleNView + */ +export function mergeTitleNView (navigationBar, titleNView) { + if (isPlainObject(titleNView)) { + if (hasOwn(titleNView, 'backgroundColor')) { + navigationBar.backgroundColor = titleNView.backgroundColor + } + if (hasOwn(titleNView, 'buttons')) { + navigationBar.buttons = titleNView.buttons + } + if (hasOwn(titleNView, 'titleColor')) { + navigationBar.textColor = titleNView.titleColor + } + if (hasOwn(titleNView, 'titleText')) { + navigationBar.titleText = titleNView.titleText + } + if (hasOwn(titleNView, 'titleSize')) { + navigationBar.titleSize = titleNView.titleSize + } + if (hasOwn(titleNView, 'type')) { + navigationBar.type = titleNView.type + } + } + return navigationBar +} diff --git a/src/core/helpers/protocol/base.js b/src/core/helpers/protocol/base.js new file mode 100644 index 000000000..9a21e2a80 --- /dev/null +++ b/src/core/helpers/protocol/base.js @@ -0,0 +1,5 @@ +export const canIUse = [{ + name: 'schema', + type: String, + required: true +}] diff --git a/src/core/helpers/protocol/context.js b/src/core/helpers/protocol/context.js new file mode 100644 index 000000000..cb1fc7917 --- /dev/null +++ b/src/core/helpers/protocol/context.js @@ -0,0 +1,9 @@ +const validator = [{ + name: 'id', + type: String, + required: true +}] + +export const createAudioContext = validator +export const createVideoContext = validator +export const createMapContext = validator diff --git a/src/core/helpers/protocol/device/make-phone-call.js b/src/core/helpers/protocol/device/make-phone-call.js new file mode 100644 index 000000000..48719cd98 --- /dev/null +++ b/src/core/helpers/protocol/device/make-phone-call.js @@ -0,0 +1,11 @@ +export const makePhoneCall = { + 'phoneNumber': { + type: String, + required: true, + validator (phoneNumber) { + if (!phoneNumber) { + return `makePhoneCall:fail parameter error: parameter.phoneNumber should not be empty String;` + } + } + } +} diff --git a/src/core/helpers/protocol/file/open-document.js b/src/core/helpers/protocol/file/open-document.js new file mode 100644 index 000000000..a7a376ced --- /dev/null +++ b/src/core/helpers/protocol/file/open-document.js @@ -0,0 +1,9 @@ +export const openDocument = { + filePath: { + type: String, + required: true + }, + fileType: { + type: String + } +} diff --git a/src/core/helpers/protocol/index.js b/src/core/helpers/protocol/index.js new file mode 100644 index 000000000..8dcbe83ae --- /dev/null +++ b/src/core/helpers/protocol/index.js @@ -0,0 +1,8 @@ +const protocol = Object.create(null) +const modules = require.context('./', true, /\.js$/) +modules.keys().forEach(function (key) { + if (key !== './index.js') { + Object.assign(protocol, modules(key)) + } +}) +export default protocol diff --git a/src/core/helpers/protocol/location.js b/src/core/helpers/protocol/location.js new file mode 100644 index 000000000..f2768e237 --- /dev/null +++ b/src/core/helpers/protocol/location.js @@ -0,0 +1,42 @@ +const type = { + WGS84: 'WGS84', + GCJ02: 'GCJ02' +} +export const getLocation = { + type: { + type: String, + validator (value, params) { + value = (value || '').toUpperCase() + params.type = Object.values(type).indexOf(value) < 0 ? type.WGS84 : value + }, + default: type.WGS84 + }, + altitude: { + altitude: Boolean, + default: false + } +} +export const openLocation = { + latitude: { + type: Number, + required: true + }, + longitude: { + type: Number, + required: true + }, + scale: { + type: Number, + validator (value, params) { + value = Math.floor(value) + params.scale = value >= 5 && value <= 18 ? value : 18 + }, + default: 18 + }, + name: { + type: String + }, + address: { + type: String + } +} diff --git a/src/core/helpers/protocol/media/choose-image.js b/src/core/helpers/protocol/media/choose-image.js new file mode 100644 index 000000000..46a86f71d --- /dev/null +++ b/src/core/helpers/protocol/media/choose-image.js @@ -0,0 +1,52 @@ +const SIZE_TYPES = ['original', 'compressed'] +const SOURCE_TYPES = ['album', 'camera'] + +export const chooseImage = { + 'count': { + type: Number, + required: false, + default: 9, + validator (count, params) { + if (count <= 0) { + params.count = 9 + } + } + }, + 'sizeType': { + type: Array, + required: false, + default: SIZE_TYPES, + validator (sizeType, params) { + // 非必传的参数,不符合预期时处理为默认值。 + const length = sizeType.length + if (!length) { + params.sizeType = SIZE_TYPES + } else { + for (let i = 0; i < length; i++) { + if (typeof sizeType[i] !== 'string' || !~SIZE_TYPES.indexOf(sizeType[i])) { + params.sizeType = SIZE_TYPES + break + } + } + } + } + }, + 'sourceType': { + type: Array, + required: false, + default: SOURCE_TYPES, + validator (sourceType, params) { + const length = sourceType.length + if (!length) { + params.sourceType = SOURCE_TYPES + } else { + for (let i = 0; i < length; i++) { + if (typeof sourceType[i] !== 'string' || !~SOURCE_TYPES.indexOf(sourceType[i])) { + params.sourceType = SOURCE_TYPES + break + } + } + } + } + } +} diff --git a/src/core/helpers/protocol/media/choose-video.js b/src/core/helpers/protocol/media/choose-video.js new file mode 100644 index 000000000..426411814 --- /dev/null +++ b/src/core/helpers/protocol/media/choose-video.js @@ -0,0 +1,22 @@ +const SOURCE_TYPES = ['album', 'camera'] + +export const chooseVideo = { + 'sourceType': { + type: Array, + required: false, + default: SOURCE_TYPES, + validator (sourceType, params) { + const length = sourceType.length + if (!length) { + params.sourceType = SOURCE_TYPES + } else { + for (let i = 0; i < length; i++) { + if (typeof sourceType[i] !== 'string' || !~SOURCE_TYPES.indexOf(sourceType[i])) { + params.sourceType = SOURCE_TYPES + break + } + } + } + } + } +} diff --git a/src/core/helpers/protocol/media/get-image-info.js b/src/core/helpers/protocol/media/get-image-info.js new file mode 100644 index 000000000..7245223fa --- /dev/null +++ b/src/core/helpers/protocol/media/get-image-info.js @@ -0,0 +1,11 @@ +import getRealPath from 'uni-platform/helpers/get-real-path' + +export const getImageInfo = { + 'src': { + type: String, + required: true, + validator (src, params) { + params.src = getRealPath(src) + } + } +} diff --git a/src/core/helpers/protocol/media/preview-image.js b/src/core/helpers/protocol/media/preview-image.js new file mode 100644 index 000000000..8981f5665 --- /dev/null +++ b/src/core/helpers/protocol/media/preview-image.js @@ -0,0 +1,27 @@ +import getRealPath from 'uni-platform/helpers/get-real-path' + +export const previewImage = { + urls: { + type: Array, + required: true, + validator (value, params) { + var typeError + params.urls = value.map(url => { + if (typeof url === 'string') { + return getRealPath(url) + } else { + typeError = true + } + }) + if (typeError) { + return 'url is not string' + } + } + }, + current: { + type: String, + validator (value, params) { + params.type = value ? getRealPath(value) : '' + } + } +} diff --git a/src/core/helpers/protocol/navigation-bar.js b/src/core/helpers/protocol/navigation-bar.js new file mode 100644 index 000000000..59e83430e --- /dev/null +++ b/src/core/helpers/protocol/navigation-bar.js @@ -0,0 +1,37 @@ +const FRONT_COLORS = ['#ffffff', '#000000'] +export const setNavigationBarColor = { + 'frontColor': { + type: String, + required: true, + validator (frontColor, params) { + if (FRONT_COLORS.indexOf(frontColor) === -1) { + return `invalid frontColor "${frontColor}"` + } + } + }, + 'backgroundColor': { + type: String, + required: true + }, + 'animation': { + type: Object, + default () { + return { + duration: 0, + timingFunc: 'linear' + } + }, + validator (animation = {}, params) { + params.animation = { + duration: animation.duration || 0, + timingFunc: animation.timingFunc || 'linear' + } + } + } +} +export const setNavigationBarTitle = { + 'title': { + type: String, + required: true + } +} diff --git a/src/core/helpers/protocol/network/download-file.js b/src/core/helpers/protocol/network/download-file.js new file mode 100644 index 000000000..99f35233e --- /dev/null +++ b/src/core/helpers/protocol/network/download-file.js @@ -0,0 +1,12 @@ +export const downloadFile = { + url: { + type: String, + required: true + }, + header: { + type: Object, + validator (value, params) { + params.header = value || {} + } + } +} diff --git a/src/core/helpers/protocol/network/request.js b/src/core/helpers/protocol/network/request.js new file mode 100644 index 000000000..feb278704 --- /dev/null +++ b/src/core/helpers/protocol/network/request.js @@ -0,0 +1,55 @@ +const method = { + OPTIONS: 'OPTIONS', + GET: 'GET', + HEAD: 'HEAD', + POST: 'POST', + PUT: 'PUT', + DELETE: 'DELETE', + TRACE: 'TRACE', + CONNECT: 'CONNECT' +} +const dataType = { + JSON: 'JSON' +} +const responseType = { + TEXT: 'TEXT', + ARRAYBUFFER: 'ARRAYBUFFER' +} +export const request = { + url: { + type: String, + required: true + }, + data: { + type: [Object, String, ArrayBuffer], + validator (value, params) { + params.data = value || '' + } + }, + header: { + type: Object, + validator (value, params) { + params.header = value || {} + } + }, + method: { + type: String, + validator (value, params) { + value = (value || '').toUpperCase() + params.method = Object.values(method).indexOf(value) < 0 ? method.GET : value + } + }, + dataType: { + type: String, + validator (value, params) { + params.dataType = (value || dataType.JSON).toUpperCase() + } + }, + responseType: { + type: String, + validator (value, params) { + value = (value || '').toUpperCase() + params.responseType = Object.values(responseType).indexOf(value) < 0 ? responseType.TEXT : value + } + } +} diff --git a/src/core/helpers/protocol/network/socket.js b/src/core/helpers/protocol/network/socket.js new file mode 100644 index 000000000..39d831c42 --- /dev/null +++ b/src/core/helpers/protocol/network/socket.js @@ -0,0 +1,48 @@ +const method = { + OPTIONS: 'OPTIONS', + GET: 'GET', + HEAD: 'HEAD', + POST: 'POST', + PUT: 'PUT', + DELETE: 'DELETE', + TRACE: 'TRACE', + CONNECT: 'CONNECT' +} +export const connectSocket = { + url: { + type: String, + required: true + }, + header: { + type: Object, + validator (value, params) { + params.header = value || {} + } + }, + method: { + type: String, + validator (value, params) { + value = (value || '').toUpperCase() + params.method = Object.values(method).indexOf(value) < 0 ? method.GET : value + } + }, + protocols: { + type: Array, + validator (value, params) { + params.protocols = (value || []).filter(str => typeof str === 'string') + } + } +} +export const sendSocketMessage = { + data: { + type: [String, ArrayBuffer] + } +} +export const closeSocket = { + code: { + type: Number + }, + reason: { + type: String + } +} diff --git a/src/core/helpers/protocol/network/upload-file.js b/src/core/helpers/protocol/network/upload-file.js new file mode 100644 index 000000000..f18836c4f --- /dev/null +++ b/src/core/helpers/protocol/network/upload-file.js @@ -0,0 +1,31 @@ +import getRealPath from 'uni-platform/helpers/get-real-path' + +export const uploadFile = { + url: { + type: String, + required: true + }, + filePath: { + type: String, + required: true, + validator (value, params) { + params.type = getRealPath(value) + } + }, + name: { + type: String, + required: true + }, + header: { + type: Object, + validator (value, params) { + params.header = value || {} + } + }, + formData: { + type: Object, + validator (value, params) { + params.formData = value || {} + } + } +} diff --git a/src/core/helpers/protocol/page-scroll-to.js b/src/core/helpers/protocol/page-scroll-to.js new file mode 100644 index 000000000..82451926d --- /dev/null +++ b/src/core/helpers/protocol/page-scroll-to.js @@ -0,0 +1,13 @@ +export const pageScrollTo = { + scrollTop: { + type: Number, + required: true + }, + duration: { + type: Number, + default: 300, + validator (duration, params) { + params.duration = Math.max(0, duration) + } + } +} diff --git a/src/core/helpers/protocol/plugins.js b/src/core/helpers/protocol/plugins.js new file mode 100644 index 000000000..acc4d4636 --- /dev/null +++ b/src/core/helpers/protocol/plugins.js @@ -0,0 +1,19 @@ +const service = { + OAUTH: 'OAUTH', + SHARE: 'SHARE', + PAYMENT: 'PAYMENT', + PUSH: 'PUSH' +} + +export const getProvider = { + service: { + type: String, + required: true, + validator (value, params) { + value = (value || '').toUpperCase() + if (value && Object.values(service).indexOf(value) < 0) { + return 'service error' + } + } + } +} diff --git a/src/core/helpers/protocol/popup.js b/src/core/helpers/protocol/popup.js new file mode 100644 index 000000000..c2b5ae689 --- /dev/null +++ b/src/core/helpers/protocol/popup.js @@ -0,0 +1,114 @@ +import getRealPath from 'uni-platform/helpers/get-real-path' + +export const showModal = { + title: { + type: String, + default: '' + }, + content: { + type: String, + default: '' + }, + showCancel: { + type: Boolean, + default: true + }, + cancelText: { + type: String, + default: '取消' + }, + cancelColor: { + type: String, + default: '#000000' + }, + confirmText: { + type: String, + default: '确定' + }, + confirmColor: { + type: String, + default: '#007aff' + }, + visible: { + type: Boolean, + default: true + } +} + +export const showToast = { + title: { + type: String, + default: '' + }, + icon: { + default: 'success', + validator (icon, params) { + if (['success', 'loading', 'none'].indexOf(icon) === -1) { + params.icon = 'success' + } + } + }, + image: { + type: String, + default: '', + validator (image, params) { + if (image) { + params.image = getRealPath(image) + } + } + }, + duration: { + type: Number, + default: 1500 + }, + mask: { + type: Boolean, + default: false + }, + visible: { + type: Boolean, + default: true + } +} +export const showLoading = { + title: { + type: String, + default: '' + }, + icon: { + type: String, + default: 'loading' + }, + duration: { + type: Number, + default: 100000000 // 简单处理 showLoading,直接设置个大值 + }, + mask: { + type: Boolean, + default: false + }, + visible: { + type: Boolean, + default: true + } +} + +export const showActionSheet = { + itemList: { + type: Array, + required: true, + validator (itemList, params) { + if (!itemList.length) { + return 'parameter.itemList should have at least 1 item' + } + } + }, + itemColor: { + type: String, + default: '#000000' + }, + visible: { + type: Boolean, + default: true + } +} diff --git a/src/core/helpers/protocol/route.js b/src/core/helpers/protocol/route.js new file mode 100644 index 000000000..230793297 --- /dev/null +++ b/src/core/helpers/protocol/route.js @@ -0,0 +1,89 @@ +import getRealRoute from '../get-real-route' + +function encodeQueryString (url) { + if (typeof url === 'string') { + const urls = url.split('?') + + url = urls[0] + + const params = []; + (urls[1] || '').split('&').forEach(function (pair) { + if (pair) { + const pairs = pair.split('=') + params.push(pairs[0] + '=' + encodeURIComponent(pairs[1])) + } + }) + + return params.length ? url + '?' + params.join('&') : url + } + return url +} + +function createValidator (type) { + return function validator (url, params) { + // 格式化为绝对路径路由 + url = getRealRoute(url) + + const pagePath = url.split('?')[0] + // 匹配路由是否存在 + const routeOptions = __uniRoutes.find(({ + path, + alias + }) => path === pagePath || alias === pagePath) + + if (!routeOptions) { + return 'page `' + url + '` is not found' + } + + // 检测不同类型跳转 + if (type === 'navigateTo' || type === 'redirectTo') { + if (routeOptions.meta.isTabBar) { + return `can not ${type} a tabbar page` + } + } else if (type === 'switchTab') { + if (!routeOptions.meta.isTabBar) { + return 'can not switch to no-tabBar page' + } + } + + // tabBar不允许传递参数 + if (routeOptions.meta.isTabBar) { + url = pagePath + } + + // 首页自动格式化为`/` + if (routeOptions.meta.isEntry) { + url = url.replace(routeOptions.alias, '/') + } + + // 参数格式化 + params.url = encodeQueryString(url) + } +} + +function createProtocol (type) { + return { + url: { + type: String, + required: true, + validator: createValidator(type) + } + } +} +export const redirectTo = createProtocol('redirectTo') + +export const reLaunch = createProtocol('reLaunch') + +export const navigateTo = createProtocol('navigateTo') + +export const switchTab = createProtocol('switchTab') + +export const navigateBack = { + delta: { + type: Number, + validator (delta, params) { + delta = parseInt(delta) || 1 + params.delta = Math.min(getCurrentPages().length - 1, delta) + } + } +} diff --git a/src/core/helpers/protocol/storage.js b/src/core/helpers/protocol/storage.js new file mode 100644 index 000000000..bbb361561 --- /dev/null +++ b/src/core/helpers/protocol/storage.js @@ -0,0 +1,18 @@ +export const setStorage = { + 'key': { + type: String, + required: true + }, + 'data': { + required: true + } +} + +export const setStorageSync = [{ + name: 'key', + type: String, + required: true +}, { + name: 'data', + required: true +}] diff --git a/src/core/helpers/protocol/tab-bar.js b/src/core/helpers/protocol/tab-bar.js new file mode 100644 index 000000000..d8e89c39f --- /dev/null +++ b/src/core/helpers/protocol/tab-bar.js @@ -0,0 +1,106 @@ +import { + getLen +} from 'uni-shared' + +function beforeValidate (params) { + let isTabBar = false + const pages = getCurrentPages() + if (pages.length) { + if (pages[pages.length - 1].$page.meta.isTabBar) { + isTabBar = true + } + } + if (!isTabBar) { + return 'not TabBar page' + } +} + +const indexValidator = { + type: Number, + required: true, + validator (index, params) { + if (index >= __uniConfig.tabBar.list.length) { + return 'tabbar item not found' + } + } +} + +export const setTabBarItem = { + beforeValidate, + index: indexValidator, + text: { + type: String + }, + iconPath: { + type: String + }, + selectedIconPath: { + type: String + } +} + +export const setTabBarStyle = { + beforeValidate, + color: { + type: String + }, + selectedColor: { + type: String + }, + backgroundColor: { + type: String + }, + borderStyle: { + type: String, + validator (borderStyle, params) { + if (borderStyle) { + params.borderStyle = borderStyle === 'black' ? 'black' : 'white' + } + } + } +} + +export const hideTabBar = { + beforeValidate, + animation: { + type: Boolean, + default: false + } +} + +export const showTabBar = { + beforeValidate, + animation: { + type: Boolean, + default: false + } +} + +export const hideTabBarRedDot = { + beforeValidate, + index: indexValidator +} + +export const showTabBarRedDot = { + beforeValidate, + index: indexValidator +} + +export const removeTabBarBadge = { + beforeValidate, + index: indexValidator +} + +export const setTabBarBadge = { + beforeValidate, + index: indexValidator, + text: { + type: String, + required: true, + validator (text, params) { + if (getLen(text) >= 4) { + params.text = '...' + } + } + } +} diff --git a/src/core/helpers/tags.js b/src/core/helpers/tags.js new file mode 100644 index 000000000..2ab6f3e31 --- /dev/null +++ b/src/core/helpers/tags.js @@ -0,0 +1,54 @@ +module.exports = [ + 'uni-app', + 'uni-tabbar', + 'uni-page', + 'uni-page-head', + 'uni-page-wrapper', + 'uni-page-body', + 'uni-page-refresh', + 'uni-actionsheet', + 'uni-modal', + 'uni-picker', + 'uni-toast', + + 'uni-ad', + 'uni-audio', + 'uni-button', + 'uni-camera', + 'uni-canvas', + 'uni-checkbox', + 'uni-checkbox-group', + 'uni-cover-image', + 'uni-cover-view', + 'uni-form', + 'uni-functional-page-navigator', + // 'uni-icon', + 'uni-image', + 'uni-input', + 'uni-label', + 'uni-live-player', + 'uni-live-pusher', + 'uni-map', + 'uni-movable-area', + 'uni-movable-view', + 'uni-navigator', + 'uni-official-account', + 'uni-open-data', + 'uni-picker', + 'uni-picker-view', + 'uni-picker-view-column', + 'uni-progress', + 'uni-radio', + 'uni-radio-group', + 'uni-rich-text', + 'uni-scroll-view', + 'uni-slider', + 'uni-swiper', + 'uni-swiper-item', + 'uni-switch', + 'uni-text', + 'uni-textarea', + 'uni-video', + 'uni-view', + 'uni-web-view' +] diff --git a/src/core/service/api/can-i-use.js b/src/core/service/api/can-i-use.js new file mode 100644 index 000000000..0189ee5ab --- /dev/null +++ b/src/core/service/api/can-i-use.js @@ -0,0 +1,13 @@ +import { + hasOwn +} from 'uni-shared' + +import platformSchema from 'uni-platform/helpers/can-i-use' +// TODO 待处理其他 API 的检测 + +export function canIUse (schema) { + if (hasOwn(platformSchema, schema)) { + return platformSchema[schema] + } + return true +} diff --git a/src/core/service/api/context/audio.js b/src/core/service/api/context/audio.js new file mode 100644 index 000000000..b640abeef --- /dev/null +++ b/src/core/service/api/context/audio.js @@ -0,0 +1,45 @@ +function operateAudioPlayer (audioId, pageId, type, data) { + UniServiceJSBridge.publishHandler(pageId + '-audio-' + audioId, { + audioId, + type, + data + }, pageId) +} + +class AudioContext { + constructor (id, pageId) { + this.id = id + this.pageId = pageId + } + setSrc (src) { + operateAudioPlayer(this.id, this.pageId, 'setSrc', { + src + }) + } + play () { + operateAudioPlayer(this.id, this.pageId, 'play') + } + pause () { + operateAudioPlayer(this.id, this.pageId, 'pause') + } + stop () { + operateAudioPlayer(this.id, this.pageId, 'stop') + } + seek (position) { + operateAudioPlayer(this.id, this.pageId, 'seek', { + position + }) + } +} + +export function createAudioContext (id, context) { + if (context) { + return new AudioContext(id, context.$page.id) + } + const app = getApp() + if (app.$route && app.$route.params.__id__) { + return new AudioContext(id, app.$route.params.__id__) + } else { + UniServiceJSBridge.emit('onError', 'createAudioContext:fail') + } +} diff --git a/src/core/service/api/context/inner-audio.js b/src/core/service/api/context/inner-audio.js new file mode 100644 index 000000000..44148c89e --- /dev/null +++ b/src/core/service/api/context/inner-audio.js @@ -0,0 +1,146 @@ +/** + * 可以批量设置的监听事件 + */ +var innerAudioContextEventNames = ['onCanplay', 'onPlay', 'onPause', 'onStop', 'onEnded', 'onTimeUpdate', 'onError', 'onWaiting', 'onSeeking', 'onSeeked'] +/** + * 音频上下文对象 + */ +class InnerAudioContext { + /** + * 原始音频对象 + */ + _audio + /** + * 是否暂停中 + */ + _stoping + /** + * 开始时间 + */ + startTime + /** + * 事件监听 + */ + _events + /** + * 音频上下文初始化 + */ + constructor () { + var audio = this._audio = new Audio() + this._stoping = false + // 和audio对象同名同效果的属性 + var watchers = ['src', 'autoplay', 'loop', 'duration', 'currentTime', 'paused', 'volume'] + watchers.forEach((watcher) => { + Object.defineProperty(this, watcher, { + set (val) { + audio[watcher] = val + return audio[watcher] + }, + get () { + return audio[watcher] + } + }) + }) + this.startTime = 0 + Object.defineProperty(this, 'obeyMuteSwitch', { + set (val) { + return false + }, + get () { + return false + } + }) + Object.defineProperty(this, 'buffered', { + get () { + var buffered = audio.buffered + if (buffered.length) { + return buffered[buffered.length - 1].end() + } else { + return 0 + } + } + }) + // 初始化事件监听列表 + this._events = {} + innerAudioContextEventNames.forEach(eventName => { + this._events[eventName] = [] + }) + audio.addEventListener('loadedmetadata', () => { + var startTime = Number(this.startTime) || 0 + if (startTime > 0) { + audio.currentTime = startTime + } + }) + // 和audio对象同名同效果的事件 + var eventNames = ['canplay', 'play', 'pause', 'ended', 'timeUpdate', 'error', 'waiting', 'seeking', 'seeked'] + var stopEventNames = ['pause', 'seeking', 'seeked', 'timeUpdate'] + eventNames.forEach(eventName => { + audio.addEventListener(eventName.toLowerCase(), () => { + // stop事件过滤 + if (this._stoping && stopEventNames.indexOf(eventName) >= 0) { + return + } + this._events[`on${eventName.substr(0, 1).toUpperCase()}${eventName.substr(1)}`].forEach((callback) => { + callback() + }) + }, false) + }) + } + /** + * 播放 + */ + play () { + this._stoping = false + this._audio.play() + } + /** + * 暂停 + */ + pause () { + this._audio.pause() + } + /** + * 停止 + */ + stop () { + this._stoping = true + this._audio.pause() + this._audio.currentTime = 0 + this._events.onStop.forEach((callback) => { + callback() + }) + } + /** + * 跳转到 + * @param {number} position + */ + seek (position) { + this._stoping = false + position = Number(position) + if (typeof position === 'number' && !isNaN(position)) { + this._audio.currentTime = position + } + } + /** + * 销毁 + */ + destroy () { + this.stop() + } +} + +// 批量设置音频上下文事件监听方法 +innerAudioContextEventNames.forEach((eventName) => { + InnerAudioContext.prototype[eventName] = function (callback) { + if (typeof callback === 'function') { + this.event[eventName].push(callback) + } + } +}) + +/** + * 创建音频上下文 + */ +export function createInnerAudioContext () { + return new InnerAudioContext() +} diff --git a/src/core/service/api/context/map.js b/src/core/service/api/context/map.js new file mode 100644 index 000000000..f1bdffae5 --- /dev/null +++ b/src/core/service/api/context/map.js @@ -0,0 +1,91 @@ +function operateMapPlayer (mapId, pageId, type, data) { + UniServiceJSBridge.publishHandler(pageId + '-map-' + mapId, { + mapId, + type, + data + }, pageId) +} + +class MapContext { + constructor (id, pageId) { + this.id = id + this.pageId = pageId + } + + getCenterLocation ({ + success, + fail, + complete + }) { + operateMapPlayer(this.id, this.pageId, 'getCenterLocation', { + success, + fail, + complete + }) + } + moveToLocation () { + operateMapPlayer(this.id, this.pageId, 'moveToLocation') + } + translateMarker ({ + markerId, + destination, + autoRotate, + rotate, + duration, + animationEnd, + fail + }) { + operateMapPlayer(this.id, this.pageId, 'translateMarker', { + markerId, + destination, + autoRotate, + rotate, + duration, + animationEnd, + fail + }) + } + includePoints ({ + points, + padding + }) { + operateMapPlayer(this.id, this.pageId, 'includePoints', { + points, + padding + }) + } + getRegion ({ + success, + fail, + complete + }) { + operateMapPlayer(this.id, this.pageId, 'getRegion', { + success, + fail, + complete + }) + } + getScale ({ + success, + fail, + complete + }) { + operateMapPlayer(this.id, this.pageId, 'getScale', { + success, + fail, + complete + }) + } +} + +export function createMapContext (id, context) { + if (context) { + return new MapContext(id, context.$page.id) + } + const app = getApp() + if (app.$route && app.$route.params.__id__) { + return new MapContext(id, app.$route.params.__id__) + } else { + UniServiceJSBridge.emit('onError', 'createMapContext:fail') + } +} diff --git a/src/core/service/api/context/video.js b/src/core/service/api/context/video.js new file mode 100644 index 000000000..3b4c10190 --- /dev/null +++ b/src/core/service/api/context/video.js @@ -0,0 +1,72 @@ +function operateVideoPlayer (videoId, pageId, type, data) { + UniServiceJSBridge.publishHandler(pageId + '-video-' + videoId, { + videoId, + type, + data + }, pageId) +} + +const RATES = [0.5, 0.8, 1.0, 1.25, 1.5] + +class VideoContext { + constructor (id, pageId) { + this.id = id + this.pageId = pageId + } + + play () { + operateVideoPlayer(this.id, this.pageId, 'play') + } + pause () { + operateVideoPlayer(this.id, this.pageId, 'pause') + } + stop () { + operateVideoPlayer(this.id, this.pageId, 'stop') + } + seek (position) { + operateVideoPlayer(this.id, this.pageId, 'seek', { + position + }) + } + sendDanmu ({ + text, + color + } = {}) { + operateVideoPlayer(this.id, this.pageId, 'sendDanmu', { + text, + color + }) + } + playbackRate (rate) { + if (!~RATES.indexOf(rate)) { + rate = 1.0 + } + operateVideoPlayer(this.id, this.pageId, 'playbackRate', { + rate + }) + } + requestFullScreen () { + operateVideoPlayer(this.id, this.pageId, 'requestFullScreen') + } + exitFullScreen () { + operateVideoPlayer(this.id, this.pageId, 'exitFullScreen') + } + showStatusBar () { + operateVideoPlayer(this.id, this.pageId, 'showStatusBar') + } + hideStatusBar () { + operateVideoPlayer(this.id, this.pageId, 'hideStatusBar') + } +} + +export function createVideoContext (id, context) { + if (context) { + return new VideoContext(id, context.$page.id) + } + const app = getApp() + if (app.$route && app.$route.params.__id__) { + return new VideoContext(id, app.$route.params.__id__) + } else { + UniServiceJSBridge.emit('onError', 'createVideoContext:fail') + } +} diff --git a/src/core/service/api/index.js b/src/core/service/api/index.js new file mode 100644 index 000000000..beb0ae541 --- /dev/null +++ b/src/core/service/api/index.js @@ -0,0 +1,8 @@ +const api = Object.create(null) +const modules = require.context('./', true, /\.js$/) +modules.keys().forEach(function (key) { + if (key !== './index.js') { + Object.assign(api, modules(key)) + } +}) +export default api diff --git a/src/core/service/api/location.js b/src/core/service/api/location.js new file mode 100644 index 000000000..5ac5abdf0 --- /dev/null +++ b/src/core/service/api/location.js @@ -0,0 +1,67 @@ +/** + * 查看位置 + * @param {*} param0 + * @param {*} callbackId + */ +export function openLocation ({ + latitude, + longitude, + scale, + name, + address +}, callbackId) { + const { + invokeCallbackHandler: invoke + } = UniServiceJSBridge + + getApp().$router.push({ + type: 'navigateTo', + path: '/open-location', + params: { + latitude, + longitude, + scale, + name, + address + } + }, function () { + invoke(callbackId, { + errMsg: 'openLocation:ok' + }) + }, function () { + invoke(callbackId, { + errMsg: 'openLocation:fail' + }) + }) +} +/** + * 选择位置 + * @param {*} callbackId + */ +export function chooseLocation (options, callbackId) { + const { + invokeCallbackHandler: invoke + } = UniServiceJSBridge + getApp().$router.push({ + type: 'navigateTo', + path: '/choose-location' + }, function () { + var fn = data => { + UniServiceJSBridge.unsubscribe('onChooseLocation', fn) + if (data) { + invoke(callbackId, Object.assign(data, { + errMsg: 'chooseLocation:ok' + })) + } else { + invoke(callbackId, { + errMsg: 'chooseLocation:fail' + }) + } + } + UniServiceJSBridge.subscribe('onChooseLocation', fn) + }, function () { + invoke(callbackId, { + errMsg: 'chooseLocation:fail' + }) + }) +} diff --git a/src/core/service/api/media/get-image-info.js b/src/core/service/api/media/get-image-info.js new file mode 100644 index 000000000..c62d1b031 --- /dev/null +++ b/src/core/service/api/media/get-image-info.js @@ -0,0 +1,21 @@ +export function getImageInfo ({ + src +}, callbackId) { + const { + invokeCallbackHandler: invoke + } = UniServiceJSBridge + const img = new Image() + img.onload = function () { + invoke(callbackId, { + errMsg: 'getImageInfo:ok', + width: img.naturalWidth, + height: img.naturalHeight + }) + } + img.onerror = function (e) { + invoke(callbackId, { + errMsg: 'getImageInfo:fail' + }) + } + img.src = src +} diff --git a/src/core/service/api/media/preview-image.js b/src/core/service/api/media/preview-image.js new file mode 100644 index 000000000..f26d42c7a --- /dev/null +++ b/src/core/service/api/media/preview-image.js @@ -0,0 +1,25 @@ +export function previewImage ({ + urls, + current +}, callbackId) { + const { + invokeCallbackHandler: invoke + } = UniServiceJSBridge + + getApp().$router.push({ + type: 'navigateTo', + path: '/preview-image', + params: { + urls, + current + } + }, function () { + invoke(callbackId, { + errMsg: 'previewImage:ok' + }) + }, function () { + invoke(callbackId, { + errMsg: 'previewImage:fail' + }) + }) +} diff --git a/src/core/service/api/navigation-bar.js b/src/core/service/api/navigation-bar.js new file mode 100644 index 000000000..268d06f48 --- /dev/null +++ b/src/core/service/api/navigation-bar.js @@ -0,0 +1,56 @@ +function setNavigationBar (type, args) { + const pages = getCurrentPages() + if (pages.length) { + const page = pages[pages.length - 1].$parent.$parent + + switch (type) { + case 'setNavigationBarColor': + const { + frontColor, + backgroundColor, + animation: { + duration, + timingFunc + } + } = args + + if (frontColor) { + page.navigationBar.textColor = frontColor === '#000000' ? 'black' : 'white' + } + if (backgroundColor) { + page.navigationBar.backgroundColor = backgroundColor + } + page.navigationBar.duration = duration + 'ms' + page.navigationBar.timingFunc = timingFunc + break + case 'showNavigationBarLoading': + page.navigationBar.loading = true + break + case 'hideNavigationBarLoading': + page.navigationBar.loading = false + break + case 'setNavigationBarTitle': + const { + title + } = args + page.navigationBar.titleText = title + break + } + } + return {} +} +export function setNavigationBarColor (args) { + return setNavigationBar('setNavigationBarColor', args) +} + +export function showNavigationBarLoading () { + return setNavigationBar('showNavigationBarLoading') +} + +export function hideNavigationBarLoading () { + return setNavigationBar('hideNavigationBarLoading') +} + +export function setNavigationBarTitle (args) { + return setNavigationBar('setNavigationBarTitle', args) +} diff --git a/src/core/service/api/network/request.js b/src/core/service/api/network/request.js new file mode 100644 index 000000000..4319fd1ae --- /dev/null +++ b/src/core/service/api/network/request.js @@ -0,0 +1,182 @@ +/** + * 请求任务类 + */ +class RequestTask { + _xhr + constructor (xhr) { + this._xhr = xhr + } + abort () { + if (this._xhr) { + this._xhr.abort() + delete this._xhr + } + } +} +/** + * 拼接网址和参数 + * @param {string} url 网址 + * @param {any} data 参数 + * @return {string} + */ +function setUrl (url, data) { + var str = url.split('#') + var hash = str[1] || '' + str = str[0].split('?') + var query = str[1] || '' + url = str[0] + for (var key in data) { + if (data.hasOwnProperty(key)) { + var keyEncode = encodeURIComponent(key) + var valEncode = encodeURIComponent(data[key]) + var reg = new RegExp('((^|&)' + keyEncode + '=)[^&]*(&|$)', 'i') + if (query.match(reg)) { + query.replace(reg, '$1' + valEncode) + } else { + query += '&' + keyEncode + '=' + valEncode + } + } + } + return url + '?' + query + (hash ? '#' + hash : '') +} +/** + * 解析响应头 + * @param {string} headers + * @return {object} + */ +function parseHeaders (headers) { + var headersObject = {} + var headersArray = headers.split('\n') + headersArray.forEach(header => { + var find = header.match(/(\S+\s*):\s*(.*)/) + if (!find || find.length !== 3) { + return + } + var key = find[1] + var val = find[2] + headersObject[key] = val + }) + return headersObject +} +/** + * 发起网络请求 + * @param {object} param0 + * @param {string} callbackId + * @return {RequestTask} + */ +export function request ({ + url, + data, + header, + method, + dataType, + responseType +}, callbackId) { + const { + invokeCallbackHandler: invoke + } = UniServiceJSBridge + var body = null + var timeout = (__uniConfig.networkTimeout && __uniConfig.networkTimeout.request) || 60 * 1000 + // 根据请求类型处理数据 + var contentType + for (const key in header) { + if (header.hasOwnProperty(key)) { + if (key.toLowerCase() === 'content-type') { + contentType = header[key] + if (contentType.indexOf('application/json') === 0) { + contentType = 'json' + } else if (contentType.indexOf('application/x-www-form-urlencoded') === 0) { + contentType = 'urlencoded' + } else { + contentType = 'string' + } + break + } + } + } + if (method === 'GET') { + url = setUrl(url, data) + } else { + if (!contentType) { + /** + * 跨域时部分服务器OPTION响应头Access-Control-Allow-Headers未包含Content-Type会请求失败 + */ + header['Content-Type'] = 'application/json' + contentType = 'json' + } + if (typeof data === 'string' || data instanceof ArrayBuffer) { + body = data + } else { + if (contentType === 'json') { + try { + body = JSON.stringify(data) + } catch (error) { + body = data.toString() + } + } else if (contentType === 'urlencoded') { + let bodyArray = [] + for (let key in data) { + if (data.hasOwnProperty(key)) { + bodyArray.push(encodeURIComponent(key) + '=' + encodeURIComponent(data[key])) + } + } + body = bodyArray.join('&') + } else { + body = data.toString() + } + } + } + var xhr = new XMLHttpRequest() + var requestTask = new RequestTask(xhr) + xhr.open(method, url) + for (var key in header) { + if (header.hasOwnProperty(key)) { + xhr.setRequestHeader(key, header[key]) + } + } + + var timer = setTimeout(function () { + xhr.onload = xhr.onabort = xhr.onerror = null + requestTask.abort() + invoke(callbackId, { + errMsg: 'request:fail timeout' + }) + }, timeout) + xhr.responseType = responseType.toLowerCase() + xhr.onload = function () { + clearTimeout(timer) + let statusCode = xhr.status + let res = responseType === 'TEXT' ? xhr.responseText : xhr.response + if (responseType === 'TEXT' && dataType === 'JSON') { + try { + res = JSON.parse(res) + } catch (error) { + // 和微信一致解析失败不抛出错误 + // invoke(callbackId, { + // errMsg: 'request:fail json parse error' + // }) + // return + } + } + invoke(callbackId, { + data: res, + statusCode, + header: parseHeaders(xhr.getAllResponseHeaders()), + errMsg: 'request:ok' + }) + } + xhr.onabort = function () { + clearTimeout(timer) + invoke(callbackId, { + errMsg: 'request:fail abort' + }) + } + xhr.onerror = function () { + clearTimeout(timer) + invoke(callbackId, { + errMsg: 'request:fail' + }) + } + xhr.send(body) + return requestTask +} diff --git a/src/core/service/api/network/socket.js b/src/core/service/api/network/socket.js new file mode 100644 index 000000000..818fc83a9 --- /dev/null +++ b/src/core/service/api/network/socket.js @@ -0,0 +1,211 @@ +var socketTask +/** + * SocketTask + */ +class SocketTask { + /** + * WebSocket实例 + */ + _webSocket + /** + * 构造函数 + * @param {string} url + * @param {Array} protocols + */ + constructor (url, protocols) { + this._webSocket = new WebSocket(url, protocols) + } + /** + * 发送 + * @param {any} data + */ + send (options = {}) { + var data = options.data + const ws = this._webSocket + try { + ws.send(data) + this._callback(options, 'sendSocketMessage:ok') + } catch (error) { + this._callback(options, `sendSocketMessage:fail ${error}`) + } + } + /** + * 关闭 + * @param {number} code + * @param {string} reason + */ + close (options = {}) { + var code = options.data + var reason = options.data + const ws = this._webSocket + try { + ws.close(code, reason) + this._callback(options, 'sendSocketMessage:ok') + } catch (error) { + this._callback(options, `sendSocketMessage:fail ${error}`) + } + } + /** + * 监听开启 + * @param {Function} callback + */ + onOpen (callback) { + this._on('open', callback) + } + /** + * 监听关闭 + * @param {Function} callback + */ + onClose (callback) { + this._on('close', callback) + } + /** + * 监听错误 + * @param {Function} callback + */ + onError (callback) { + this._on('error', callback) + } + /** + * 监听消息 + * @param {Function} callback + */ + onMessage (callback) { + this._on('message', callback) + } + /** + * 监听事件 + * @param {string} eventName + * @param {Function} callback + */ + _on (eventName, callback) { + this._webSocket.addEventListener(eventName, event => { + if (eventName === 'message') { + callback({ + data: event.data + }) + } else { + callback() + } + }, false) + } + /** + * 通用回调处理 + */ + _callback ({ + success, + fail, + complete + }, errMsg) { + var data = { + errMsg + } + if (/:ok$/.test(errMsg)) { + if (typeof success === 'function') { + success(data) + } + } else { + if (typeof fail === 'function') { + fail(data) + } + } + if (typeof complete === 'function') { + complete(data) + } + } +} + +/** + * 创建一个 WebSocket 连接 + * @param {any} data 数据 + * @return {SocketTask} + */ +export function connectSocket ({ + url, + protocols +}, callbackId) { + const { + invokeCallbackHandler: invoke + } = UniServiceJSBridge + socketTask = new SocketTask(url, protocols) + setTimeout(() => { + invoke(callbackId, { + errMsg: 'connectSocket:ok' + }) + }, 0) + return socketTask +} +/** + * 通过 WebSocket 连接发送数据 + * @param {any} options + * @param {string} callbackId + */ +export function sendSocketMessage (options, callbackId) { + const { + invokeCallbackHandler: invoke + } = UniServiceJSBridge + if (socketTask && socketTask._webSocket.readyState === WebSocket.OPEN) { + socketTask.send(Object.assign(options, { + complete (res) { + invoke(callbackId, res) + } + })) + } else { + invoke(callbackId, { + errMsg: 'sendSocketMessage:fail WebSocket is not connected ' + }) + } +} +/** + * 关闭WebSocket连接 + * @param {any} options + * @param {string} callbackId + */ +export function closeSocket (options, callbackId) { + const { + invokeCallbackHandler: invoke + } = UniServiceJSBridge + if (socketTask && socketTask._webSocket.readyState !== WebSocket.CLOSED) { + socketTask.close(Object.assign(options, { + complete (res) { + invoke(callbackId, res) + } + })) + } else { + invoke(callbackId, { + errMsg: 'closeSocket:fail WebSocket is not connected' + }) + } +} +/** + * 监听事件 + * @param {string} method + * @param {Function} callback + */ +function on (method) { + return function (callback) { + if (socketTask) { + socketTask[method](callback) + } + } +} +/** + * 监听WebSocket连接打开事件 + * @param {Function} cb + */ +export const onSocketOpen = on('onOpen') +/** + * 监听WebSocket错误 + * @param {Function} cb + */ +export const onSocketError = on('onError') +/** + * 监听WebSocket接受到服务器的消息事件 + * @param {Function} cb + */ +export const onSocketMessage = on('onMessage') +/** + * 监听WebSocket关闭 + * @param {Function} callback + */ +export const onSocketClose = on('onClose') diff --git a/src/core/service/api/page-event.js b/src/core/service/api/page-event.js new file mode 100644 index 000000000..0905f6aae --- /dev/null +++ b/src/core/service/api/page-event.js @@ -0,0 +1,33 @@ +export function pageScrollTo (args) { + const pages = getCurrentPages() + if (pages.length) { + UniServiceJSBridge.publishHandler('pageScrollTo', args, pages[pages.length - 1].$page.id) + } + return {} +} + +let pageId + +export function setPullDownRefreshPageId (pullDownRefreshPageId) { + pageId = pullDownRefreshPageId +} + +export function startPullDownRefresh () { + if (pageId) { + UniServiceJSBridge.emit(pageId + '.stopPullDownRefresh', {}, pageId) + } + const pages = getCurrentPages() + if (pages.length) { + pageId = pages[pages.length - 1].$page.id + UniServiceJSBridge.emit(pageId + '.startPullDownRefresh', {}, pageId) + } + return {} +} + +export function stopPullDownRefresh () { + if (pageId) { + UniServiceJSBridge.emit(pageId + '.stopPullDownRefresh', {}, pageId) + pageId = null + } + return {} +} diff --git a/src/core/service/api/popup.js b/src/core/service/api/popup.js new file mode 100644 index 000000000..13db31a00 --- /dev/null +++ b/src/core/service/api/popup.js @@ -0,0 +1,46 @@ +const { + emit, + invokeCallbackHandler: invoke +} = UniServiceJSBridge + +export function showModal (args, callbackId) { + emit('onShowModal', args, function (type) { + invoke(callbackId, { + [type]: true + }) + }) +} + +export function showToast (args) { + emit('onShowToast', args) + return {} +} + +export function hideToast () { + emit('onHideToast') + return {} +} + +export function showLoading (args) { + emit('onShowToast', args) + return {} +} + +export function hideLoading () { + emit('onHideToast') + return {} +} + +export function showActionSheet (args, callbackId) { + emit('onShowActionSheet', args, function (tapIndex) { + if (tapIndex === -1) { + invoke(callbackId, { + errMsg: 'showActionSheet:fail cancel' + }) + } else { + invoke(callbackId, { + tapIndex + }) + } + }) +} diff --git a/src/core/service/api/pull b/src/core/service/api/pull new file mode 100644 index 000000000..e69de29bb diff --git a/src/core/service/api/route.js b/src/core/service/api/route.js new file mode 100644 index 000000000..380e97d32 --- /dev/null +++ b/src/core/service/api/route.js @@ -0,0 +1,75 @@ +import { + isFn +} from 'uni-shared' + +function onAppRoute (type, { + url, + delta, + from = 'navigateBack' +} = {}) { + const router = getApp().$router + switch (type) { + case 'redirectTo': + router.replace({ + type, + path: url + }) + break + case 'navigateTo': + router.push({ + type, + path: url + }) + break + case 'navigateBack': + let canBack = true + const pages = getCurrentPages() + if (pages.length) { + const page = pages[pages.length - 1] + if (isFn(page.$options.onBackPress) && page.$options.onBackPress.call(page, { + from + }) === true) { + canBack = false + } + } + if (canBack) { + router.go(-delta) + } + break + case 'reLaunch': + router.replace({ + type, + path: url + }) + break + case 'switchTab': + router.replace({ + type, + path: url + }) + break + } + return { + errMsg: type + ':ok' + } +} + +export function redirectTo (args) { + return onAppRoute('redirectTo', args) +} + +export function navigateTo (args) { + return onAppRoute('navigateTo', args) +} + +export function navigateBack (args) { + return onAppRoute('navigateBack', args) +} + +export function reLaunch (args) { + return onAppRoute('reLaunch', args) +} + +export function switchTab (args) { + return onAppRoute('switchTab', args) +} diff --git a/src/core/service/api/storage.js b/src/core/service/api/storage.js new file mode 100644 index 000000000..17ae98136 --- /dev/null +++ b/src/core/service/api/storage.js @@ -0,0 +1,96 @@ +export function setStorage ({ + key, + data +} = {}) { + let value = { + type: typeof data === 'object' ? 'object' : 'string', + data: data + } + localStorage.setItem(key, JSON.stringify(value)) + let keyList = localStorage.getItem('uni-storage-keys') + if (!keyList) { + localStorage.setItem('uni-storage-keys', JSON.stringify([key])) + } else { + let keys = JSON.parse(keyList) + if (keys.indexOf(key) < 0) { + keys.push(key) + localStorage.setItem('uni-storage-keys', JSON.stringify(keys)) + } + } + return { + errMsg: 'setStorage:ok' + } +} + +export function setStorageSync (key, data) { + setStorage({ key, data }) +} + +export function getStorage ({ + key +} = {}) { + let data = localStorage.getItem(key) + return data ? { + data: JSON.parse(data).data, + errMsg: 'getStorage:ok' + } : { + data: '', + errMsg: 'getStorage:fail' + } +} + +export function getStorageSync (key) { + const res = getStorage({ key }) + return res.data +} + +export function removeStorage ({ + key +} = {}) { + let keyList = localStorage.getItem('uni-storage-keys') + if (keyList) { + let keys = JSON.parse(keyList) + let index = keys.indexOf(key) + keys.splice(index, 1) + localStorage.setItem('uni-storage-keys', JSON.stringify(keys)) + } + localStorage.removeItem(key) + return { + errMsg: 'removeStorage:ok' + } +} + +export function removeStorageSync (key) { + removeStorage({ key }) +} + +export function clearStorage () { + localStorage.clear() + return { + errMsg: 'clearStorage:ok' + } +} +export function clearStorageSync () { + clearStorage() +} + +export function getStorageInfo () { // TODO 暂时先不做大小的转换 + let keyList = localStorage.getItem('uni-storage-keys') + return keyList ? { + keys: JSON.parse(keyList), + currentSize: 0, + limitSize: 0, + errMsg: 'getStorageInfo:ok' + } : { + keys: '', + currentSize: 0, + limitSize: 0, + errMsg: 'getStorageInfo:fail' + } +} + +export function getStorageInfoSync () { + const res = getStorageInfo() + delete res.errMsg + return res +} diff --git a/src/core/service/api/tab-bar.js b/src/core/service/api/tab-bar.js new file mode 100644 index 000000000..202328ecd --- /dev/null +++ b/src/core/service/api/tab-bar.js @@ -0,0 +1,83 @@ +import { + setProperties +} from 'uni-shared' + +const setTabBarItemProps = ['text', 'iconPath', 'selectedIconPath'] + +const setTabBarStyleProps = ['color', 'selectedColor', 'backgroundColor', 'borderStyle'] + +const setTabBarBadgeProps = ['badge', 'redDot'] + +function setTabBar (type, args = {}) { + const app = getApp() + if (app) { + const { + index + } = args + const tabBar = app.$children[0].tabBar + switch (type) { + case 'showTabBar': + app.$children[0].hideTabBar = false + break + case 'hideTabBar': + app.$children[0].hideTabBar = true + break + case 'setTabBarItem': + setProperties(tabBar.list[index], setTabBarItemProps, args) + break + case 'setTabBarStyle': + setProperties(tabBar, setTabBarStyleProps, args) + break + case 'showTabBarRedDot': + setProperties(tabBar.list[index], setTabBarBadgeProps, { + badge: '', + redDot: true + }) + break + case 'setTabBarBadge': + setProperties(tabBar.list[index], setTabBarBadgeProps, { + badge: args.text, + redDot: true + }) + break + case 'hideTabBarRedDot': + case 'removeTabBarBadge': + setProperties(tabBar.list[index], setTabBarBadgeProps, { + badge: '', + redDot: false + }) + break + } + } + return {} +} +export function setTabBarItem (args) { + return setTabBar('setTabBarItem', args) +} + +export function setTabBarStyle (args) { + return setTabBar('setTabBarStyle', args) +} + +export function hideTabBar (args) { + return setTabBar('hideTabBar', args) +} + +export function showTabBar (args) { + return setTabBar('showTabBar', args) +} +export function hideTabBarRedDot (args) { + return setTabBar('hideTabBarRedDot', args) +} + +export function showTabBarRedDot (args) { + return setTabBar('showTabBarRedDot', args) +} + +export function removeTabBarBadge (args) { + return setTabBar('removeTabBarBadge', args) +} + +export function setTabBarBadge (args) { + return setTabBar('setTabBarBadge', args) +} diff --git a/src/core/service/api/wxml/create-selector-query.js b/src/core/service/api/wxml/create-selector-query.js new file mode 100644 index 000000000..525afc784 --- /dev/null +++ b/src/core/service/api/wxml/create-selector-query.js @@ -0,0 +1,124 @@ +import { + isFn +} from 'uni-shared' + +import createCallbacks from 'uni-helpers/callbacks' + +const requestComponentInfoCallbacks = createCallbacks('requestComponentInfo') + +class NodesRef { + constructor (selectorQuery, component, selector, single) { + this._selectorQuery = selectorQuery + this._component = component + this._selector = selector + this._single = single + } + + boundingClientRect (callback) { + this._selectorQuery._push( + this._selector, + this._component, + this._single, { + id: true, + dataset: true, + rect: true, + size: true + }, + callback) + return this._selectorQuery + } + + fields (fields, callback) { + this._selectorQuery._push( + this._selector, + this._component, + this._single, + fields, + callback + ) + return this._selectorQuery + } + + scrollOffset (callback) { + this._selectorQuery._push( + this._selector, + this._component, + this._single, { + id: true, + dataset: true, + scrollOffset: true + }, + callback + ) + return this._selectorQuery + } +} + +function requestComponentInfo (pageId, queue, callback) { + const reqId = requestComponentInfoCallbacks.push(callback) + + UniServiceJSBridge.publishHandler('requestComponentInfo', { + reqId, + reqs: queue + }, pageId) +} + +class SelectorQuery { + constructor (pageId) { + this.pageId = pageId + this._queue = [] + this._queueCb = [] + } + + exec (callback) { + requestComponentInfo(this.pageId, this._queue, res => { + const queueCbs = this._queueCb + res.forEach((result, index) => { + const queueCb = queueCbs[index] + if (isFn(queueCb)) { + queueCb.call(this, result) + } + }) + isFn(callback) && callback.call(this, res) + }) + } + + ['in'] (component) { + console.error('Unsupported method:SelectorQuery.in') + return this + } + + select (selector) { + return new NodesRef(this, this._component, selector, true) + } + + selectAll (selector) { + return new NodesRef(this, this._component, selector, false) + } + + selectViewport () { + return new NodesRef(this, 0, '', true) + } + + _push (selector, component, single, fields, callback) { + this._queue.push({ + component, + selector, + single, + fields + }) + this._queueCb.push(callback) + } +} + +export function createSelectorQuery (context) { + if (context) { + return new SelectorQuery(context.$page.id) + } + const app = getApp() + if (app.$route && app.$route.params.__id__) { + return new SelectorQuery(app.$route.params.__id__) + } else { + UniServiceJSBridge.emit('onError', 'createSelectorQuery:fail') + } +} diff --git a/src/core/service/bridge/index.js b/src/core/service/bridge/index.js new file mode 100644 index 000000000..2fcb1373a --- /dev/null +++ b/src/core/service/bridge/index.js @@ -0,0 +1,36 @@ +import Vue from 'vue' + +import initOn from './on' +import initSubscribe from './subscribe' + +const Emitter = new Vue() + +export const on = Emitter.$on.bind(Emitter) +export const off = Emitter.$off.bind(Emitter) +export const once = Emitter.$once.bind(Emitter) +export const emit = Emitter.$emit.bind(Emitter) + +export { + invokeCallbackHandler +} + from 'uni-helpers/api' + +export function subscribe (event, callback) { + return on('view.' + event, callback) +} + +export function unsubscribe (event, callback) { + return off('view.' + event, callback) +} + +export function subscribeHandler (event, args, pageId) { + return emit('view.' + event, args, pageId) +} + +export { + publishHandler +} + from 'uni-platform/service/bridge' + +initOn(on) +initSubscribe(subscribe) diff --git a/src/core/service/bridge/on.js b/src/core/service/bridge/on.js new file mode 100644 index 000000000..0c0cabe77 --- /dev/null +++ b/src/core/service/bridge/on.js @@ -0,0 +1,60 @@ +import { + callAppHook, + callPageHook +} from '../plugins/util' + +import { + setPullDownRefreshPageId +} from '../api/page-event' + +function onError (err) { + callAppHook(getApp(), 'onError', err) +} + +function onPageNotFound (page) { + callAppHook(getApp(), 'onPageNotFound', page) +} + +function onPullDownRefresh (args, pageId) { + const page = getCurrentPages().find(page => page.$page.id === pageId) + if (page) { + setPullDownRefreshPageId(pageId) + callPageHook(page, 'onPullDownRefresh') + } +} + +function callCurrentPageHook (hook, ...args) { + const pages = getCurrentPages() + if (pages.length) { + callPageHook(pages[pages.length - 1], hook, ...args) + } +} + +function createCallCurrentPageHook (hook) { + return function (...args) { + callCurrentPageHook(hook, ...args) + } +} + +function onAppEnterBackground () { + callAppHook(getApp(), 'onHide') + callCurrentPageHook('onHide') +} + +function onAppEnterForeground () { + callAppHook(getApp(), 'onShow') + callCurrentPageHook('onShow') +} + +export default function initOn (on) { + on('onError', onError) + on('onPageNotFound', onPageNotFound) + + on('onAppEnterBackground', onAppEnterBackground) + on('onAppEnterForeground', onAppEnterForeground) + + on('onPullDownRefresh', onPullDownRefresh) + + on('onTabItemTap', createCallCurrentPageHook('onTabItemTap')) + on('onNavigationBarButtonTap', createCallCurrentPageHook('onNavigationBarButtonTap')) +} diff --git a/src/core/service/bridge/subscribe.js b/src/core/service/bridge/subscribe.js new file mode 100644 index 000000000..73902da10 --- /dev/null +++ b/src/core/service/bridge/subscribe.js @@ -0,0 +1,54 @@ +import createCallbacks from 'uni-helpers/callbacks' + +import { + callPageHook +} from '../plugins/util' + +function createPageEvent (eventType) { + return function (args, pageId) { + const pages = getCurrentPages() + const page = pages.find(page => page.$page.id === pageId) + if (page) { + callPageHook(page, eventType, args) + } else { + console.error(`Not Found:Page[${pageId}]`) + } + } +} + +const requestComponentInfoCallbacks = createCallbacks('requestComponentInfo') + +function onRequestComponentInfo ({ + reqId, + res +}) { + const callback = requestComponentInfoCallbacks.pop(reqId) + if (callback) { + callback(res) + } +} + +const requestComponentObserverCallbacks = createCallbacks('requestComponentObserver') + +function onRequestComponentObserver ({ + reqId, + reqEnd, + res +}) { + const callback = requestComponentObserverCallbacks.get(reqId) + if (callback) { + if (reqEnd) { + requestComponentObserverCallbacks.pop(reqId) + } + callback(res) + } +} + +export default function initSubscribe (subscribe) { + subscribe('onPageReady', createPageEvent('onReady')) + subscribe('onPageScroll', createPageEvent('onPageScroll')) + subscribe('onReachBottom', createPageEvent('onReachBottom')) + + subscribe('onRequestComponentInfo', onRequestComponentInfo) + subscribe('onRequestComponentObserver', onRequestComponentObserver) +} diff --git a/src/core/service/index.js b/src/core/service/index.js new file mode 100644 index 000000000..bc705f7ca --- /dev/null +++ b/src/core/service/index.js @@ -0,0 +1,36 @@ +import { + wrapper, + wrapperUnimplemented, + promisify +} from 'uni-helpers/api' + +import todoApis from 'uni-platform/helpers/todo-api' + +import baseApi from './api' + +import platformApi from 'uni-platform/service/api' + +const uni = Object.create(null) + +/* eslint-disable no-undef */ +uni.version = __VERSION__ + +todoApis.forEach(name => { + uni[name] = wrapperUnimplemented(name) +}) + +Object.keys(baseApi).forEach(name => { + uni[name] = promisify(name, wrapper(name, baseApi[name])) +}) + +Object.keys(platformApi).forEach(name => { + uni[name] = promisify(name, wrapper(name, platformApi[name])) +}) + +export { + getApp, + getCurrentPages +} + from './plugins/app' + +export default uni diff --git a/src/core/service/plugins/app/create-app.js b/src/core/service/plugins/app/create-app.js new file mode 100644 index 000000000..17d0158dd --- /dev/null +++ b/src/core/service/plugins/app/create-app.js @@ -0,0 +1,51 @@ +import initRouterGuard from './router-guard' + +let appVm = false + +export function getApp () { + return appVm +} + +export function getCurrentPages (isAll = false) { + const pages = [] + const childrenVm = appVm.$children[0] + if (childrenVm && childrenVm.$children.length) { + const tabBarVm = childrenVm.$children.find(vm => vm.$options.name === 'TabBar') + const app = getApp() + childrenVm.$children.forEach(vm => { + if (tabBarVm !== vm && vm.$children.length && vm.$children[0].$options.name === 'Page' && vm.$children[0].$slots.page) { + // vm.$children[0]=Page->PageBody->RealPage + const pageVm = vm.$children[0].$children.find(vm => vm.$options.name === 'PageBody').$children.find(vm => !!vm.$page) + if (pageVm) { + let isActive = true + if (!isAll && tabBarVm && pageVm.$page && pageVm.$page.meta.isTabBar) { // 选项卡仅列出活动的 + if (app.$route.meta && app.$route.meta.isTabBar) { // 当前页面路由是 tabBar + if (app.$route.path !== pageVm.$page.path) { + isActive = false + } + } else { + if (tabBarVm.__path__ !== pageVm.$page.path) { + isActive = false + } + } + } + if (isActive) { + pages.push(pageVm) + } + } else { + // TODO + // console.error('pageVm is undefined') + } + } + }) + } + return pages +} + +export default function createApp (vm, routes) { + appVm = vm + appVm.globalData = appVm.$options.globalData || {} + + // initEvents(appVm) + initRouterGuard(appVm, routes) +} diff --git a/src/core/service/plugins/app/index.js b/src/core/service/plugins/app/index.js new file mode 100644 index 000000000..8596bda3a --- /dev/null +++ b/src/core/service/plugins/app/index.js @@ -0,0 +1,40 @@ +import { + callAppHook +} from '../util' + +import createApp from './create-app' + +export { + getApp, + getCurrentPages +} + from './create-app' + +export function createAppMixin (routes, entryRoute) { + return { + created: function AppCreated () { + createApp(this, routes) + // TODO + if (!entryRoute.meta.name) { // PageNotFound + UniServiceJSBridge.emit('onPageNotFound', { + path: entryRoute.path, + query: entryRoute.query, + isEntryPage: true + }) + // TODO 跳转至缺省404页面 + } + }, + + beforeMount: function appBeforeMount () { + // TODO 平台代码 + this.$el = document.getElementById('app') + }, + mounted: function appMounted () { + // 稍微靠后点,让 App 有机会在 mounted 事件前注册一些全局事件监听,如 UI 显示(showModal) + callAppHook(this, 'onLaunch', { + scene: 1001 + }) + callAppHook(this, 'onShow', {}) + } + } +} diff --git a/src/core/service/plugins/app/router-guard.js b/src/core/service/plugins/app/router-guard.js new file mode 100644 index 000000000..4e5733df8 --- /dev/null +++ b/src/core/service/plugins/app/router-guard.js @@ -0,0 +1,139 @@ +import { + callPageHook +} from '../util' + +function addKeepAliveInclude (componentName) { + if (this.keepAliveInclude.indexOf(componentName) === -1) { // 目标页面,自动 include + this.keepAliveInclude.push(componentName) + } +} + +function removeKeepAliveInclude (componentName) { + const index = this.keepAliveInclude.indexOf(componentName) + if (index !== -1) { + this.keepAliveInclude.splice(index, 1) + } +} + +function switchTab (routes) { + // 关闭非 tabBar 页面 + const pages = getCurrentPages() + for (let i = pages.length - 1; i >= 0; i--) { + const pageVm = pages[i] + const meta = pageVm.$page.meta + if (!meta.isTabBar) { + removeKeepAliveInclude.call(this, meta.name + '-' + pageVm.$page.id) + callPageHook(pageVm, 'onUnload') + } + } +} + +function reLaunch (toName) { + __uniConfig.reLaunch = (__uniConfig.reLaunch || 1) + 1 + // 关闭所有页面 + const pages = getCurrentPages() + for (let i = pages.length - 1; i >= 0; i--) { + callPageHook(pages[i], 'onUnload') + } + this.keepAliveInclude = [] +} + +function beforeEach (to, from, next, routes) { + const fromId = from.params.__id__ + const toId = to.params.__id__ + if (toId === fromId) { // 相同页面阻止 + next(false) + } else if (to.meta.id && to.meta.id !== toId) { // id 不妥,replace跳转 + next({ + path: to.path, + replace: true + }) + } else { + const fromName = from.meta.name + '-' + fromId + const toName = to.meta.name + '-' + toId + + switch (to.type) { + case 'navigateTo': + break + case 'redirectTo': + // 关闭前一个页面 + removeKeepAliveInclude.call(this, fromName) + break + case 'switchTab': + switchTab.call(this, routes) + break + case 'reLaunch': + reLaunch.call(this, toName) + break + default: + // 后退或非 API 访问 + if (fromId && fromId > toId) { // back + removeKeepAliveInclude.call(this, fromName) + } + break + } + + if (to.type !== 'reLaunch' && from.meta.id) { // 如果不是 reLaunch,且 meta 指定了 id + addKeepAliveInclude.call(this, fromName) + } + // if (to.type !== 'reLaunch') { // TODO 如果 reLaunch,1.keepAlive的话,无法触发页面生命周期,并刷新页面,2.不 keepAlive 的话,页面状态无法再次保留,且 routeView 的 cache 有问题 + addKeepAliveInclude.call(this, toName) + // } + if (process.env.NODE_ENV !== 'production') { + console.debug(`Core:keepAliveInclude=${JSON.stringify(this.keepAliveInclude)}`) + } + /* eslint-disable no-undef */ + if (__PLATFORM__ === 'h5') { + if (to.meta && to.meta.name) { + document.body.className = 'uni-body ' + to.meta.name + } + } + + next() + } +} + +function afterEach (to, from) { + const fromId = from.params.__id__ + const toId = to.params.__id__ + + const fromVm = getCurrentPages().find(pageVm => pageVm.$page.id === fromId) + + switch (to.type) { + case 'navigateTo': // 前一个页面触发 onHide + fromVm && callPageHook(fromVm, 'onHide') + break + case 'redirectTo': // 前一个页面触发 onUnload + fromVm && callPageHook(fromVm, 'onUnload') + break + case 'switchTab': + if (from.meta.isTabBar) { // 前一个页面是 tabBar 触发 onHide,非 tabBar 页面在 beforeEach 中已触发 onUnload + fromVm && callPageHook(fromVm, 'onHide') + } + break + case 'reLaunch': + break + default: + if (fromId && fromId > toId) { // history back + fromVm && callPageHook(fromVm, 'onUnload') + } + break + } + if (to.type !== 'reLaunch') { // 因为 reLaunch 会重置 id,故不触发 onShow,switchTab 在 beforeRouteEnter 中触发 + // 直接获取所有 pages,getCurrentPages 正常情况下仅返回页面栈内,传 true 则返回所有已存在(主要是 tabBar 页面) + const toVm = getCurrentPages(true).find(pageVm => pageVm.$page.id === toId) + if (toVm) { // 目标页面若已存在,则触发 onShow + callPageHook(toVm, 'onShow') + } + } +} +export default function initRouterGuard (appVm, routes) { + // 处理keepAliveInclude + appVm.$router.beforeEach(function (to, from, next) { + beforeEach.call(appVm, to, from, next, routes) + }) + // 处理前进时的 onUnload,onHide 和后退时的 onShow + appVm.$router.afterEach(function (to, from) { + afterEach.call(appVm, to, from) + }) +} diff --git a/src/core/service/plugins/index.js b/src/core/service/plugins/index.js new file mode 100644 index 000000000..1f2c8262a --- /dev/null +++ b/src/core/service/plugins/index.js @@ -0,0 +1,139 @@ +import VueRouter from 'vue-router' + +import { + isFn +} from 'uni-shared' + +import { + isPage +} from 'uni-helpers' + +import { + createAppMixin +} from './app' + +import { + createPageMixin +} from './page' + +function getMinId (routes) { + let minId = 0 + routes.forEach(route => { + if (route.meta.id) { + minId++ + } + }) + return minId +} + +function getHash () { + const href = window.location.href + const index = href.indexOf('#') + return index === -1 ? '' : decodeURI(href.slice(index + 1)) +} + +function getLocation (base = '/') { + let path = decodeURI(window.location.pathname) + if (base && path.indexOf(base) === 0) { + path = path.slice(base.length) + } + return (path || '/') + window.location.search + window.location.hash +} + +/** + * Service 层 Vue 插件 + * 1.init keepAliveInclude? + * 2.init router + * 3.init entryRoute + * 4.hack vue _init (app) + * 5.use router + */ +export default { + install (Vue, { + routes + } = {}) { + const minId = getMinId(routes) + const router = new VueRouter({ + id: minId, + mode: __uniConfig.router.mode, + base: __uniConfig.router.base, + routes, + scrollBehavior (to, from, savedPosition) { + if (savedPosition) { + return savedPosition + } else { + return { + x: 0, + y: 0 + } + } + } + }) + const keepAliveInclude = [] + + // 需跨平台,根据用户配置 hash 或 history 来调用 + const entryRoute = router.match(__uniConfig.router.mode === 'history' ? getLocation(__uniConfig.router.base) + : getHash()) + if (entryRoute.meta.name) { + if (entryRoute.meta.id) { + keepAliveInclude.push(entryRoute.meta.name + '-' + entryRoute.meta.id) + } else { + keepAliveInclude.push(entryRoute.meta.name + '-' + (minId + 1)) + } + } + + /* eslint-disable no-undef */ + if (__PLATFORM__ === 'h5') { + if (entryRoute.meta && entryRoute.meta.name) { + document.body.className = 'uni-body ' + entryRoute.meta.name + } + } + + Vue.mixin({ + beforeCreate () { + const options = this.$options + if (options.mpType === 'app') { + options.data = function () { + return { + keepAliveInclude + } + } + const appMixin = createAppMixin(routes, entryRoute) + // mixin app hooks + Object.keys(appMixin).forEach(hook => { + options[hook] = options[hook] ? [].concat(appMixin[hook], options[hook]) : [appMixin[hook]] + }) + + // router + options.router = router + + // onError + if (!isFn(options.onError)) { + options.onError = function (err) { + console.error(err) + } + } + } else if (isPage(this)) { + const pageMixin = createPageMixin() + // mixin page hooks + Object.keys(pageMixin).forEach(hook => { + options[hook] = options[hook] ? [].concat(pageMixin[hook], options[hook]) : [pageMixin[hook]] + }) + } else { + if (this.$parent && this.$parent.__page__) { + this.__page__ = this.$parent.__page__ + } + } + } + }) + + Object.defineProperty(Vue.prototype, '$page', { + get () { + return this.__page__ + } + }) + + Vue.use(VueRouter) + } + +} diff --git a/src/core/service/plugins/page/create-page.js b/src/core/service/plugins/page/create-page.js new file mode 100644 index 000000000..4eda168f5 --- /dev/null +++ b/src/core/service/plugins/page/create-page.js @@ -0,0 +1,10 @@ +export default function createPage (pageVm) { + const $route = pageVm.$route + pageVm.route = $route.meta.pagePath + pageVm.__page__ = { + id: $route.params.__id__, + path: $route.path, + route: $route.meta.pagePath, + meta: Object.assign({}, $route.meta) + } +} diff --git a/src/core/service/plugins/page/index.js b/src/core/service/plugins/page/index.js new file mode 100644 index 000000000..09b38654d --- /dev/null +++ b/src/core/service/plugins/page/index.js @@ -0,0 +1,14 @@ +import { + callPageHook +} from '../util' + +import createPage from './create-page' +export function createPageMixin () { + return { + created: function pageCreated () { + createPage(this) + callPageHook(this, 'onLoad', this.$route.query) + callPageHook(this, 'onShow') + } + } +} diff --git a/src/core/service/plugins/util.js b/src/core/service/plugins/util.js new file mode 100644 index 000000000..e01a1362e --- /dev/null +++ b/src/core/service/plugins/util.js @@ -0,0 +1,30 @@ +import { + isFn +} from 'uni-shared' + +function callHook (vm, hook, params) { + return isFn(vm.$options[hook]) && vm.$options[hook].apply(vm, params) +} + +export function callAppHook (vm, hook, ...params) { + if (hook !== 'onError') { + console.debug(`App:${hook} have been invoked` + (params.length ? ` ${JSON.stringify(params)}` : '')) + } + return callHook(vm, hook, params) +} + +export function callPageHook (vm, hook, ...params) { + // hack 一下,H5 平台通知 View 层onShow,方便 View 层来切换 scroll 事件监听 + if (__PLATFORM__ === 'h5') { + if (hook === 'onLoad') { + UniServiceJSBridge.publishHandler('onPageLoad', vm, vm.$page.id) + } + if (hook === 'onShow') { + UniServiceJSBridge.publishHandler('onPageShow', vm, vm.$page.id) + } + } + if (hook !== 'onPageScroll') { + console.debug(`${vm.$page.route}[${vm.$page.id}]:${hook} have been invoked`) + } + return callHook(vm, hook, params) +} diff --git a/src/core/view/api/index.js b/src/core/view/api/index.js new file mode 100644 index 000000000..97dbe7164 --- /dev/null +++ b/src/core/view/api/index.js @@ -0,0 +1 @@ +export * from './upx' diff --git a/src/core/view/api/upx/index.js b/src/core/view/api/upx/index.js new file mode 100644 index 000000000..1bc70dcfc --- /dev/null +++ b/src/core/view/api/upx/index.js @@ -0,0 +1,35 @@ +const EPS = 1e-4 +const BASE_DEVICE_WIDTH = 750 +const isIOS = navigator.userAgent.match('iPhone') +let deviceWidth = global.innerWidth || global.screen.width || 375 +let deviceDPR = global.devicePixelRatio || 2 + +export function checkDeviceWidth () { + let newDeviceWidth = global.innerWidth || global.screen.width || 375 + const newDeviceDPR = global.devicePixelRatio || 2 + const newDeviceHeight = global.innerHeight || global.screen.height || 375 + if (global.screen.orientation && /^landscape/.test(global.screen.orientation.type || '')) { + newDeviceWidth = newDeviceHeight + } + if (newDeviceWidth !== deviceWidth || newDeviceDPR !== deviceDPR) { + deviceWidth = newDeviceWidth + deviceDPR = newDeviceDPR + } +} + +export function upx2px (number, newDeviceWidth) { + number = Number(number) + if (number === 0) { + return 0 + } + number = (number / BASE_DEVICE_WIDTH) * (newDeviceWidth || deviceWidth) + number = Math.floor(number + EPS) + if (number === 0) { + if (deviceDPR === 1 || !isIOS) { + return 1 + } else { + return 0.5 + } + } + return number +} diff --git a/src/core/view/bridge/index.js b/src/core/view/bridge/index.js new file mode 100644 index 000000000..f8a366f7d --- /dev/null +++ b/src/core/view/bridge/index.js @@ -0,0 +1,29 @@ +import Vue from 'vue' + +import initSubscribe from './subscribe' + +const Emitter = new Vue() + +export const on = Emitter.$on.bind(Emitter) +export const off = Emitter.$off.bind(Emitter) +export const once = Emitter.$once.bind(Emitter) +export const emit = Emitter.$emit.bind(Emitter) + +export function subscribe (event, callback) { + return on('service.' + event, callback) +} + +export function unsubscribe (event, callback) { + return off('service.' + event, callback) +} + +export function subscribeHandler (event, args, pageId) { + emit('service.' + event, args, pageId) +} + +export { + publishHandler +} + from 'uni-platform/view/bridge' + +initSubscribe(subscribe) diff --git a/src/core/view/bridge/subscribe/index.js b/src/core/view/bridge/subscribe/index.js new file mode 100644 index 000000000..3f0f0a0db --- /dev/null +++ b/src/core/view/bridge/subscribe/index.js @@ -0,0 +1,90 @@ +import { + isFn, + isPlainObject, + supportsPassive +} from 'uni-shared' + +import { + NAVBAR_HEIGHT, + TABBAR_HEIGHT +} from 'uni-helpers/constants' + +import { + pageScrollTo, + disableScroll, + createScrollListener +} from './scroll' + +import requestComponentInfo from './request-component-info' + +const passiveOptions = supportsPassive ? { + passive: false +} : false + +function updateCssVar (vm) { + if (uni.canIUse('css.var')) { + const pageVm = vm.$parent.$parent + const windowTop = pageVm.showNavigationBar && pageVm.navigationBar.type !== 'transparent' ? (NAVBAR_HEIGHT + 'px') + : '0px' + const windowBottom = getApp().$children[0].showTabBar ? (TABBAR_HEIGHT + 'px') : '0px' + const style = document.documentElement.style + style.setProperty('--window-top', windowTop) + style.setProperty('--window-bottom', windowBottom) + console.debug(`${vm.$page.route}[${vm.$page.id}]:--window-top=${windowTop}`) + console.debug(`${vm.$page.route}[${vm.$page.id}]:--window-bottom=${windowBottom}`) + } +} + +export default function initSubscribe (subscribe) { + subscribe('requestComponentInfo', requestComponentInfo) + + subscribe('pageScrollTo', pageScrollTo) + + if (__PLATFORM__ === 'h5') { + let scrollListener = false + let disableScrollListener = false + + subscribe('onPageLoad', vm => { // 用户 onLoad 之前 update + updateCssVar(vm) + }) + + subscribe('onPageShow', vm => { + const pageVm = vm.$parent.$parent + + if (vm._isMounted) { // 非首次 show 才 update(首次 show 的时候在 onPageLoad 中触发了) + updateCssVar(vm) + } + + if (disableScrollListener) { + document.removeEventListener('touchmove', disableScrollListener, passiveOptions) + } + + if (pageVm.disableScroll) { + disableScrollListener = disableScroll + document.addEventListener('touchmove', disableScrollListener, passiveOptions) + } + + const enablePageScroll = isFn(vm.$options.onPageScroll) + const enablePageReachBottom = isFn(vm.$options.onReachBottom) + const onReachBottomDistance = pageVm.onReachBottomDistance + + const enableTransparentTitleNView = isPlainObject(pageVm.titleNView) && pageVm.titleNView.type === 'transparent' + + if (scrollListener) { + document.removeEventListener('scroll', scrollListener) + } + + if (enableTransparentTitleNView || enablePageScroll || enablePageReachBottom) { // 初始化 scroll 监听 + scrollListener = createScrollListener(vm.$page.id, { + enablePageScroll, + enablePageReachBottom, + onReachBottomDistance, + enableTransparentTitleNView + }) + setTimeout(function () { // 避免监听太早,直接触发了 scroll + document.addEventListener('scroll', scrollListener) + }, 10) + } + }) + } +} diff --git a/src/core/view/bridge/subscribe/request-component-info.js b/src/core/view/bridge/subscribe/request-component-info.js new file mode 100644 index 000000000..418b03f74 --- /dev/null +++ b/src/core/view/bridge/subscribe/request-component-info.js @@ -0,0 +1,121 @@ +import { + normalizeDataset +} from 'uni-helpers' + +function getRootInfo (fields) { + const info = {} + if (fields.id) { + info.id = '' + } + if (fields.dataset) { + info.dataset = {} + } + if (fields.rect) { + info.left = 0 + info.right = 0 + info.top = 0 + info.bottom = 0 + } + if (fields.size) { + info.width = document.documentElement.clientWidth + info.height = document.documentElement.clientHeight + } + if (fields.scrollOffset) { + info.scrollLeft = document.documentElement.scrollLeft || document.body.scrollLeft || 0 + info.scrollTop = document.documentElement.scrollTop || document.body.scrollTop || 0 + } + return info +} + +function getNodeInfo (el, fields) { + const info = {} + if (fields.id) { + info.id = el.id + } + if (fields.dataset) { + info.dataset = normalizeDataset(el.dataset || {}) + } + if (fields.rect || fields.size) { + const rect = el.getBoundingClientRect() + if (fields.rect) { + info.left = rect.left + info.right = rect.right + info.top = rect.top + info.bottom = rect.bottom + } + if (fields.size) { + info.width = rect.width + info.height = rect.height + } + } + // TODO 组件 props + if (fields.properties) { + fields.properties.forEach(prop => { + prop = prop.replace(/-([a-z])/g, function (e, t) { + return t.toUpperCase() + }) + // props + }) + } + if (fields.scrollOffset) { + if (el.tagName === 'UNI-SCROLL-VIEW' && el.__vue__ && el.__vue__.getScrollPosition) { + Object.assign(info, el.__vue__.getScrollPosition()) + } else { + info.scrollLeft = 0 + info.scrollTop = 0 + } + } + return info +} + +function getNodesInfo (pageVm, component, selector, single, fields) { + const $el = pageVm.$el + if (single) { + const node = $el.querySelector(selector) + if (node) { + return getNodeInfo(node, fields) + } + return null + } else { + const nodeList = $el.querySelectorAll(selector) + if (nodeList && nodeList.length) { + return ([]).map.call(nodeList, node => { + return getNodeInfo(node, fields) + }) + } + return [] + } +} + +export default function requestComponentInfo ({ + reqId, + reqs +}, pageId) { + const pages = getCurrentPages() // 跨平台时,View 层也应该实现该方法,举例 App 上,View 层的 getCurrentPages 返回长度为1的当前页面数组 + + const pageVm = pages.find(page => page.$page.id === pageId) + + if (!pageVm) { + // TODO 是否需要 defer + throw new Error(`Not Found:Page[${pageId}]`) + } + + const result = [] + reqs.forEach(function ({ + component, + selector, + single, + fields + }) { + if (component === 0) { + result.push(getRootInfo(fields)) + } else { + result.push(getNodesInfo(pageVm, component, selector, single, fields)) + } + }) + + UniViewJSBridge.publishHandler('onRequestComponentInfo', { + reqId, + res: result + }, pageVm.$page.id) +} diff --git a/src/core/view/bridge/subscribe/scroll.js b/src/core/view/bridge/subscribe/scroll.js new file mode 100644 index 000000000..921712fdd --- /dev/null +++ b/src/core/view/bridge/subscribe/scroll.js @@ -0,0 +1,123 @@ +import { + publishHandler +} from 'uni-platform/view/bridge' + +export function disableScroll (evt) { + evt.preventDefault() +} + +export function pageScrollTo ({ + scrollTop, + duration +}) { + const documentElement = document.documentElement + + const { + clientHeight, + scrollHeight + } = documentElement + + scrollTop = Math.min(scrollTop, scrollHeight - clientHeight) + + if (duration === 0) { + documentElement.scrollTop = scrollTop + return + } + + if (window.scrollY === scrollTop) { + return + } + + function scrollTo (duration) { + if (duration <= 0) { + window.scrollTo(0, scrollTop) + return + } + const distaince = scrollTop - window.scrollY + requestAnimationFrame(function () { + window.scrollTo(0, window.scrollY + distaince / duration * 10) + scrollTo(duration - 10) + }) + } + + scrollTo(duration) + // TODO 暂不使用 transform 会导致 fixed 元素不可见 + // const body = document.body + // const bodyStyle = body.style + // + // function webkitTransitionEnd() { + // bodyStyle.webkitTransition = '' + // bodyStyle.webkitTransform = '' + // documentElement.scrollTop = scrollTop + // body.removeEventListener('webkitTransitionEnd', webkitTransitionEnd) + // } + // + // body.addEventListener('webkitTransitionEnd', webkitTransitionEnd) + // bodyStyle.webkitTransition = `-webkit-transform ${duration}ms ease-out` + // bodyStyle.webkitTransform = `translateY(${documentElement.scrollTop}px) translateZ(0)` +} + +export function createScrollListener (pageId, { + enablePageScroll, + enablePageReachBottom, + onReachBottomDistance, + enableTransparentTitleNView +}) { + let ticking = false + + let hasReachBottom = false + + let onReachBottom = true + + function isReachBottom () { + const { + clientHeight, + scrollHeight + } = document.documentElement + const scrollY = window.scrollY + + let isBottom = scrollY > 0 && scrollHeight > clientHeight && (scrollY + clientHeight + onReachBottomDistance) >= + scrollHeight + if (isBottom && !hasReachBottom) { + hasReachBottom = true + return true + } + + if (!isBottom && hasReachBottom) { + hasReachBottom = false + } + return false + } + + function trigger () { + // publish + const scrollTop = window.pageYOffset + if (enablePageScroll) { // 向 Service 发送 onPageScroll 事件 + publishHandler('onPageScroll', { + scrollTop + }, pageId) + } + + if (enableTransparentTitleNView) { + UniViewJSBridge.emit('onPageScroll', { + scrollTop + }) + } + + if (enablePageReachBottom && onReachBottom && isReachBottom()) { + publishHandler('onReachBottom', {}, pageId) + onReachBottom = false + setTimeout(function () { + onReachBottom = true + }, 350) + } + ticking = false + } + + return function onScroll () { + if (!ticking) { + requestAnimationFrame(trigger) + } + ticking = true + } +} diff --git a/src/core/view/components/button/index.vue b/src/core/view/components/button/index.vue new file mode 100644 index 000000000..63bf0f120 --- /dev/null +++ b/src/core/view/components/button/index.vue @@ -0,0 +1,378 @@ + + diff --git a/src/core/view/components/checkbox-group/index.vue b/src/core/view/components/checkbox-group/index.vue new file mode 100644 index 000000000..e83c2cc95 --- /dev/null +++ b/src/core/view/components/checkbox-group/index.vue @@ -0,0 +1,84 @@ + + + + + diff --git a/src/core/view/components/checkbox/index.vue b/src/core/view/components/checkbox/index.vue new file mode 100644 index 000000000..9655db2c0 --- /dev/null +++ b/src/core/view/components/checkbox/index.vue @@ -0,0 +1,153 @@ + + + diff --git a/src/core/view/components/form/index.vue b/src/core/view/components/form/index.vue new file mode 100644 index 000000000..19837746c --- /dev/null +++ b/src/core/view/components/form/index.vue @@ -0,0 +1,55 @@ + + + diff --git a/src/core/view/components/image/README.md b/src/core/view/components/image/README.md new file mode 100644 index 000000000..e6974739f --- /dev/null +++ b/src/core/view/components/image/README.md @@ -0,0 +1,9 @@ +#### image + +|属性名|已完成| +|:-|:-| +|src|Y| +|mode|Y| +|lazy-load|| +|@error|Y| +|@load|Y| \ No newline at end of file diff --git a/src/core/view/components/image/index.vue b/src/core/view/components/image/index.vue new file mode 100644 index 000000000..195f66705 --- /dev/null +++ b/src/core/view/components/image/index.vue @@ -0,0 +1,173 @@ + + + diff --git a/src/core/view/components/index.js b/src/core/view/components/index.js new file mode 100644 index 000000000..09bce282f --- /dev/null +++ b/src/core/view/components/index.js @@ -0,0 +1,64 @@ +import Vue from 'vue' + +// 使用白名单过滤(前期有一批自定义组件使用了 uni-) +import tags from 'uni-helpers/tags' + +import baseMixin from 'uni-mixins/base' + +// const uniRegex = /^uni-/i +// const htmlRegex = /^html:/i +// const svgRegex = /^svg:/i + +const oldIsReservedTag = Vue.config.isReservedTag + +Vue.config.isReservedTag = function (tag) { + return tags.indexOf(tag) !== -1 || oldIsReservedTag(tag) +} + +// Vue.config.parsePlatformTagName = function(tag) { +// return tag.replace(htmlRegex, '').replace(svgRegex, '') +// } + +Vue.config.ignoredElements = tags + +const oldGetTagNamespace = Vue.config.getTagNamespace + +const conflictTags = ['switch', 'image', 'text', 'view'] + +Vue.config.getTagNamespace = function (tag) { + if (~conflictTags.indexOf(tag)) { // svg 部分标签名称与 uni 标签冲突 + return false + } + return oldGetTagNamespace(tag) || false +} + +Vue.config.errorHandler = function (err, vm, info) { + console.error('errorHandler', err, vm, info) +} + +const requireComponents = [ + // frameworkComponents + /* eslint-disable no-undef */ + require.context('../../../platforms/' + __PLATFORM__ + '/components', true, /index\.vue$/), + // baseComponents + require.context('./', true, /index\.vue$/), + require.context('../../../platforms/' + __PLATFORM__ + '/view/components', true, /index\.vue$/) +] + +requireComponents.forEach((components, index) => { + components.keys().forEach(fileName => { + // 获取组件配置 + const componentModule = components(fileName) + + const componentConfig = componentModule.default || componentModule + + componentConfig.mixins = componentConfig.mixins ? [].concat(baseMixin, componentConfig.mixins) : [baseMixin] + + if (index > 0) { + componentConfig.name = 'VUni' + componentConfig.name + } + + // 全局注册组件 + Vue.component(componentConfig.name, componentConfig) + }) +}) diff --git a/src/core/view/components/input/index.vue b/src/core/view/components/input/index.vue new file mode 100644 index 000000000..8a6c10808 --- /dev/null +++ b/src/core/view/components/input/index.vue @@ -0,0 +1,388 @@ + + + diff --git a/src/core/view/components/label/index.vue b/src/core/view/components/label/index.vue new file mode 100644 index 000000000..aa1611d3a --- /dev/null +++ b/src/core/view/components/label/index.vue @@ -0,0 +1,42 @@ + + + diff --git a/src/core/view/components/navigator/index.vue b/src/core/view/components/navigator/index.vue new file mode 100644 index 000000000..d5c8e472f --- /dev/null +++ b/src/core/view/components/navigator/index.vue @@ -0,0 +1,114 @@ + + + diff --git a/src/core/view/components/picker-view-column/index.vue b/src/core/view/components/picker-view-column/index.vue new file mode 100644 index 000000000..7303d58fa --- /dev/null +++ b/src/core/view/components/picker-view-column/index.vue @@ -0,0 +1,275 @@ + + diff --git a/src/core/view/components/picker-view/index.vue b/src/core/view/components/picker-view/index.vue new file mode 100644 index 000000000..da978f46e --- /dev/null +++ b/src/core/view/components/picker-view/index.vue @@ -0,0 +1,140 @@ + + diff --git a/src/core/view/components/picker/index.vue b/src/core/view/components/picker/index.vue new file mode 100644 index 000000000..638b86ec0 --- /dev/null +++ b/src/core/view/components/picker/index.vue @@ -0,0 +1,234 @@ + + + + + diff --git a/src/core/view/components/progress/index.vue b/src/core/view/components/progress/index.vue new file mode 100644 index 000000000..c5c43ce63 --- /dev/null +++ b/src/core/view/components/progress/index.vue @@ -0,0 +1,152 @@ + + + diff --git a/src/core/view/components/radio-group/index.vue b/src/core/view/components/radio-group/index.vue new file mode 100644 index 000000000..f6b23a998 --- /dev/null +++ b/src/core/view/components/radio-group/index.vue @@ -0,0 +1,102 @@ + + + + + diff --git a/src/core/view/components/radio/index.vue b/src/core/view/components/radio/index.vue new file mode 100644 index 000000000..24e83ad43 --- /dev/null +++ b/src/core/view/components/radio/index.vue @@ -0,0 +1,156 @@ + + + diff --git a/src/core/view/components/rich-text/html-parser.js b/src/core/view/components/rich-text/html-parser.js new file mode 100644 index 000000000..fac870376 --- /dev/null +++ b/src/core/view/components/rich-text/html-parser.js @@ -0,0 +1,102 @@ +import HTMLParser from 'uni-helpers/html-parser' + +function removeDOCTYPE (html) { + return html + .replace(/<\?xml.*\?>\n/, '') + .replace(/\n/, '') + .replace(/\n/, '') +} + +function parseAttrs (attrs) { + return attrs.reduce(function (pre, attr) { + let value = attr.value + const name = attr.name + + if (value.match(/ /) && name !== 'style') { + value = value.split(' ') + } + + if (pre[name]) { + if (Array.isArray(pre[name])) { + pre[name].push(value) + } else { + pre[name] = [pre[name], value] + } + } else { + pre[name] = value + } + return pre + }, {}) +} + +export default function parseHtml (html) { + html = removeDOCTYPE(html) + + const stacks = [] + + const results = { + node: 'root', + children: [] + } + + HTMLParser(html, { + start: function (tag, attrs, unary) { + const node = { + name: tag + } + if (attrs.length !== 0) { + node.attrs = parseAttrs(attrs) + } + if (unary) { + const parent = stacks[0] || results + if (!parent.children) { + parent.children = [] + } + parent.children.push(node) + } else { + stacks.unshift(node) + } + }, + end: function (tag) { + const node = stacks.shift() + if (node.name !== tag) console.error('invalid state: mismatch end tag') + + if (stacks.length === 0) { + results.children.push(node) + } else { + const parent = stacks[0] + if (!parent.children) { + parent.children = [] + } + parent.children.push(node) + } + }, + chars: function (text) { + const node = { + type: 'text', + text: text + } + if (stacks.length === 0) { + results.children.push(node) + } else { + const parent = stacks[0] + if (!parent.children) { + parent.children = [] + } + parent.children.push(node) + } + }, + comment: function (text) { + const node = { + node: 'comment', + text: text + } + const parent = stacks[0] + if (!parent.children) { + parent.children = [] + } + parent.children.push(node) + } + }) + return results.children +} diff --git a/src/core/view/components/rich-text/index.vue b/src/core/view/components/rich-text/index.vue new file mode 100644 index 000000000..9c05a2692 --- /dev/null +++ b/src/core/view/components/rich-text/index.vue @@ -0,0 +1,40 @@ + + + diff --git a/src/core/view/components/rich-text/nodes-parser.js b/src/core/view/components/rich-text/nodes-parser.js new file mode 100644 index 000000000..2e681cc00 --- /dev/null +++ b/src/core/view/components/rich-text/nodes-parser.js @@ -0,0 +1,125 @@ +import { + hasOwn, + isPlainObject +} from 'uni-shared' + +const TAGS = { + 'a': '', + 'abbr': '', + 'b': '', + 'blockquote': '', + 'br': '', + 'code': '', + 'col': ['span', 'width'], + 'colgroup': ['span', 'width'], + 'dd': '', + 'del': '', + 'div': '', + 'dl': '', + 'dt': '', + 'em': '', + 'fieldset': '', + 'h1': '', + 'h2': '', + 'h3': '', + 'h4': '', + 'h5': '', + 'h6': '', + 'hr': '', + 'i': '', + 'img': ['alt', 'src', 'height', 'width'], + 'ins': '', + 'label': '', + 'legend': '', + 'li': '', + 'ol': ['start', 'type'], + 'p': '', + 'q': '', + 'span': '', + 'strong': '', + 'sub': '', + 'sup': '', + 'table': ['width'], + 'tbody': '', + 'td': ['colspan', 'rowspan', 'height', 'width'], + 'tfoot': '', + 'th': ['colspan', 'rowspan', 'height', 'width'], + 'thead': '', + 'tr': '', + 'ul': '' +} +const CHARS = { + 'amp': '&', + 'gt': '>', + 'lt': '<', + 'nbsp': ' ', + 'quot': '"', + 'apos': "'" +} + +function decodeEntities (htmlString) { + return htmlString.replace(/&(([a-zA-Z]+)|(#x{0,1}[\da-zA-Z]+));/gi, function (match, stage) { + if (hasOwn(CHARS, stage) && CHARS[stage]) { + return CHARS[stage] + } + if (/^#[0-9]{1,4}$/.test(stage)) { + return String.fromCharCode(stage.slice(1)) + } + if (/^#x[0-9a-f]{1,4}$/i.test(stage)) { + return String.fromCharCode('0' + stage.slice(1)) + } + let wrap = document.createElement('div') + wrap.innerHTML = match + return wrap.innerText || wrap.textContent + }) +} + +export default function parseNodes (nodes, parentNode) { + nodes.forEach(function (node) { + if (!isPlainObject(node)) { + return + } + if (!hasOwn(node, 'type') || node.type === 'node') { + if (!(typeof node.name === 'string' && node.name)) { + return + } + const tagName = node.name.toLowerCase() + if (!hasOwn(TAGS, tagName)) { + return + } + const elem = document.createElement(tagName) + if (!elem) { + return + } + const attrs = node.attrs + if (isPlainObject(attrs)) { + const tagAttrs = TAGS[tagName] || [] + Object.keys(attrs).forEach(function (name) { + const value = attrs[name] + switch (name) { + case 'class': + case 'style': + elem.setAttribute(name, value) + break + default: + if (tagAttrs.indexOf(name) !== -1) { + elem.setAttribute(name, value) + } + } + }) + } + + const children = node.children + if (Array.isArray(children) && children.length) { + parseNodes(node.children, elem) + } + + parentNode.appendChild(elem) + } else { + if (node.type === 'text' && typeof node.text === 'string' && node.text !== '') { + parentNode.appendChild(document.createTextNode(decodeEntities(node.text))) + } + } + }) + return parentNode +} diff --git a/src/core/view/components/scroll-view/index.vue b/src/core/view/components/scroll-view/index.vue new file mode 100644 index 000000000..632321f58 --- /dev/null +++ b/src/core/view/components/scroll-view/index.vue @@ -0,0 +1,389 @@ + + + diff --git a/src/core/view/components/slider/index.vue b/src/core/view/components/slider/index.vue new file mode 100644 index 000000000..89c129b67 --- /dev/null +++ b/src/core/view/components/slider/index.vue @@ -0,0 +1,291 @@ + + + diff --git a/src/core/view/components/swiper-item/index.vue b/src/core/view/components/swiper-item/index.vue new file mode 100644 index 000000000..f3140b61b --- /dev/null +++ b/src/core/view/components/swiper-item/index.vue @@ -0,0 +1,58 @@ + + + diff --git a/src/core/view/components/swiper/index.vue b/src/core/view/components/swiper/index.vue new file mode 100644 index 000000000..d5b4a354e --- /dev/null +++ b/src/core/view/components/swiper/index.vue @@ -0,0 +1,688 @@ + + + diff --git a/src/core/view/components/switch/index.vue b/src/core/view/components/switch/index.vue new file mode 100644 index 000000000..19724349a --- /dev/null +++ b/src/core/view/components/switch/index.vue @@ -0,0 +1,214 @@ + + + diff --git a/src/core/view/components/text/index.vue b/src/core/view/components/text/index.vue new file mode 100644 index 000000000..a9d0f5a83 --- /dev/null +++ b/src/core/view/components/text/index.vue @@ -0,0 +1,70 @@ + + diff --git a/src/core/view/components/textarea/index.vue b/src/core/view/components/textarea/index.vue new file mode 100644 index 000000000..4b4104874 --- /dev/null +++ b/src/core/view/components/textarea/index.vue @@ -0,0 +1,327 @@ +