commit 269167882a5eda8870078a503a74df28b2543667 Author: 1549469775 <1549469775@qq.com> Date: Mon Jul 26 17:43:47 2021 +0800 init diff --git a/.hbuilderx/launch.json b/.hbuilderx/launch.json new file mode 100644 index 0000000..c9abd4b --- /dev/null +++ b/.hbuilderx/launch.json @@ -0,0 +1,11 @@ +{ // launch.json 配置了启动调试时相关设置,configurations下节点名称可为 app-plus/h5/mp-weixin/mp-baidu/mp-alipay/mp-qq/mp-toutiao/mp-360/ + // launchtype项可配置值为local或remote, local代表前端连本地云函数,remote代表前端连云端云函数 + "version": "0.0", + "configurations": [{ + "type": "uniCloud", + "default": { + "launchtype": "local" + } + } + ] +} diff --git a/App.vue b/App.vue new file mode 100644 index 0000000..43c1c25 --- /dev/null +++ b/App.vue @@ -0,0 +1,18 @@ + + + diff --git a/assets/style/common.scss b/assets/style/common.scss new file mode 100644 index 0000000..4c53fde --- /dev/null +++ b/assets/style/common.scss @@ -0,0 +1,144 @@ +page { + background-color: #FFF8F8; + // min-height: 100%; + height: 100%; + font-size: 28rpx; + line-height: 1.5; // + color: #000; + } + + page>.tabpage{ + // 怪异盒模型 + -webkit-overflow-scrolling: touch; + box-sizing: border-box; + /* #ifdef H5 */ + //貌似不需要了,已经是去除了tabbar的高度了 + //自定义tabbar的时候需要 + // 底部tab栏高度 + margin-bottom: 0;//var(--window-bottom); + /* #endif */ + /* #ifndef H5 */ + margin-bottom: 0; + /* #endif */ + // 触发BFC + overflow-x: hidden; + overflow-y: scroll; + min-height: 100%; + } + page>.page{ + // 怪异盒模型 + -webkit-overflow-scrolling: touch; + box-sizing: border-box; + // 触发BFC + overflow-x: hidden; + overflow-y: scroll; + min-height: 100%; + } + + ::-webkit-scrollbar { + width: 0; + height: 0; + color: transparent; + display: none; + } + + page *{ + box-sizing: border-box; + } + + .a-flexbox{ + display: flex; + &.a-flexbox--fixed{ + flex-shrink: 0; + flex-grow: 0; + } + &.a-flexbox--inline{ + display: inline-flex; + } + &.a-flexbox__column{ + flex-direction: column; + } + &.a-flexbox__row{ + flex-direction: row; + } + &.a-flexbox__wrap{ + flex-wrap: wrap; + } + &.a-flexbox__center{ + align-items: center; + justify-content: center; + } + &.a-flexbox__center--x{ + justify-content: center; + } + &.a-flexbox--around{ + justify-content: space-around; + } + &.a-flexbox--between{ + justify-content: space-between; + } + &.a-flexbox__start--x{ + justify-content: flex-start; + } + &.a-flexbox__end--x{ + justify-content: flex-end; + } + &.a-flexbox__center--y{ + align-items: center; + } + &.a-flexbox__start--y{ + align-items: flex-start; + } + &.a-flexbox__end--y{ + align-items: flex-end; + } + .a-flexbox__noshrink{ + flex-shrink: 0; + } + .a-flexbox__full{ + flex: 1; + width: 0; + } + .a-flexbox__full--h{ + flex: 1; + height: 0; + } + } +// 单行省略号 +.a-ov{ + @include ellipsis(1) +} +// 两行省略号 +.a-ov2{ + @include ellipsis(2) +} + +// 包裹输入框 +.a-wrapinput{ + position:relative; + display: flex; + align-items: center; + // height: 100%; + >input{ + width: 0; + flex: 1; + // height: 100%; + font-size: inherit; + line-height: inherit; + } + .sub{ + display: flex; + align-items: center; + margin-right: 8rpx; + } + } + // 包裹文本域 + .a-wraptextarea{ + min-height: 160rpx; + height: 160rpx; + >textarea{ + font-size: inherit; + width: 100%; + height: 100%; + } + } diff --git a/assets/style/global.scss b/assets/style/global.scss new file mode 100644 index 0000000..5049e0c --- /dev/null +++ b/assets/style/global.scss @@ -0,0 +1,112 @@ +/* +* 内部通用scss +*/ + +@mixin clearfix { + &:after { + clear: both; + content: '.'; + display: block; + height: 0; + line-height: 0; + overflow: hidden; + } + // *height: 1%; +} + + +@mixin hairline { + &::after { + content: " "; + box-sizing: border-box; + pointer-events: none; + border: 0 solid #ebedf0; + position: absolute; + top: -50%; + right: -50%; + bottom: -50%; + left: -50%; + -webkit-transform: scale(0.5); + transform: scale(0.5); + @content + } +}; +@mixin hairline--no { + @include hairline{ + border: 0; + }; +} +@mixin hairline--all { + @include hairline{ + border-width: 1px; + }; +} +@mixin hairline--right { + @include hairline{ + border-right-width: 1px; + }; +} +@mixin hairline--left { + @include hairline{ + border-left-width: 1px; + }; +} +@mixin hairline--bottom { + @include hairline{ + border-bottom-width: 1px; + }; +} + +@mixin hairline--top { + @include hairline{ + border-top-width: 1px; + }; +} +@mixin hairline--right--bottom { + @include hairline{ + border-left-width: 0; + border-top-width: 0; + border-right-width: 1px; + border-bottom-width: 1px; + }; +} +@mixin hairline--left--top { + @include hairline{ + border-right-width: 0; + border-bottom-width: 0; + border-left-width: 1px; + border-top-width: 1px; + }; +} +//一行溢出 +@mixin text-overflow{ + white-space: nowrap; + text-overflow: ellipsis; + overflow: hidden; + word-break: break-all; +}; + +//两行溢出 +@mixin ov($num: 2){ + text-overflow: -o-ellipsis-lastline; + overflow: hidden; + text-overflow: ellipsis; + display: -webkit-box; + -webkit-line-clamp: $num; + line-clamp: $num; + -webkit-box-orient: vertical; +} +@mixin ellipsis($lines: 1) { + @if ($lines==1) { + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; + } @else { + display: -webkit-box; + -webkit-box-orient: vertical; + -webkit-line-clamp: $lines; + overflow: hidden; + text-overflow: ellipsis; + word-break: break-all; + } +} \ No newline at end of file diff --git a/components/Page/Page.vue b/components/Page/Page.vue new file mode 100644 index 0000000..71300dc --- /dev/null +++ b/components/Page/Page.vue @@ -0,0 +1,29 @@ + + + + + diff --git a/main.js b/main.js new file mode 100644 index 0000000..bb3b04c --- /dev/null +++ b/main.js @@ -0,0 +1,14 @@ +import Vue from 'vue' +import niuUI from '@/uni_modules/niu-ui' +import App from './App' + +Vue.config.productionTip = false + +App.mpType = 'app' + +Vue.use(niuUI) + +const app = new Vue({ + ...App +}) +app.$mount() diff --git a/manifest.json b/manifest.json new file mode 100644 index 0000000..ff1371c --- /dev/null +++ b/manifest.json @@ -0,0 +1,71 @@ +{ + "name" : "niu-ui", + "appid" : "__UNI__84A7910", + "description" : "", + "versionName" : "1.0.0", + "versionCode" : "100", + "transformPx" : false, + /* 5+App特有相关 */ + "app-plus" : { + "usingComponents" : true, + "nvueStyleCompiler" : "uni-app", + "compilerVersion" : 3, + "splashscreen" : { + "alwaysShowBeforeRender" : true, + "waiting" : true, + "autoclose" : true, + "delay" : 0 + }, + /* 模块配置 */ + "modules" : {}, + /* 应用发布信息 */ + "distribute" : { + /* android打包配置 */ + "android" : { + "permissions" : [ + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "" + ] + }, + /* ios打包配置 */ + "ios" : {}, + /* SDK配置 */ + "sdkConfigs" : {} + } + }, + /* 快应用特有相关 */ + "quickapp" : {}, + /* 小程序特有相关 */ + "mp-weixin" : { + "appid" : "", + "setting" : { + "urlCheck" : false + }, + "usingComponents" : true + }, + "mp-alipay" : { + "usingComponents" : true + }, + "mp-baidu" : { + "usingComponents" : true + }, + "mp-toutiao" : { + "usingComponents" : true + }, + "uniStatistics": { + "enable": false + } +} diff --git a/mixins/mescroll-ui/mixin.js b/mixins/mescroll-ui/mixin.js new file mode 100644 index 0000000..eca4169 --- /dev/null +++ b/mixins/mescroll-ui/mixin.js @@ -0,0 +1,86 @@ +const allConfig = {}; +const allFunc = {}; +/** + * 自动下拉刷新 + */ +allConfig.common = { + downOption: { + auto: true, + use: true + }, + upOption: { + page: { + size: 10 // 每页数据的数量,默认10 + }, + auto: false, + toTop: { + src: 'https://shidaizhu.oss-cn-shenzhen.aliyuncs.com/app_static/images/backtop.png', + bottom: "20%", + duration: 300, + zIndex: 9990, + right: 50, + safearea: false, + width: 96, + radius: "50%", + left: null + }, + empty: { + use: true, + // icon: require('@/static/zichan_empty.png'), + tip: '暂无数据', + // btnText: '发布项目需求', + fixed: false, + top: '40%', + zIndex: 9 + }, + mescroll: null, + noMoreSize: 5, + textNoMore: '-- 暂无更多数据 --' + }, // 上拉加载的常用配置 +}; + +allFunc.common = { + computed:{ + $mTop(){ + return this.$n.state.$Top + }, + }, + onPageScroll(e) { + // if(e.scrollTop<=40){ + // this.mescroll.lockDownScroll( false ) + // } + // if(e.scrollTop>40){ + // this.mescroll.lockDownScroll( true ) + // } + }, + mounted(){ + + }, + methods: { + mescrollInit(mescroll) { + this.mescroll = mescroll; + }, + // mescroll组件初始化的回调,可获取到mescroll对象 + downCallback(mescroll) { + this.mescroll.resetUpScroll(false) + }, + upCallback(mescroll) { + + }, + } +} + +export default function(name,func="common") { + const config = allConfig[name] ? allConfig[name] : {} + const myFunc = allFunc[func] ? allFunc[func] : {} + return { + data() { + return { + downOption: {}, // 下拉刷新的配置 + upOption: {}, // 上拉加载的常用配置 + ...config, + } + }, + ...myFunc + } +} \ No newline at end of file diff --git a/pages.json b/pages.json new file mode 100644 index 0000000..af10ef3 --- /dev/null +++ b/pages.json @@ -0,0 +1,17 @@ +{ + "pages": [ //pages数组中第一项表示应用启动页,参考:https://uniapp.dcloud.io/collocation/pages + { + "path": "pages/index/index", + "style": { + "navigationStyle": "custom", + "navigationBarTitleText": "uni-app" + } + } + ], + "globalStyle": { + "navigationBarTextStyle": "black", + "navigationBarTitleText": "uni-app", + "navigationBarBackgroundColor": "#F8F8F8", + "backgroundColor": "#F8F8F8" + } +} diff --git a/pages/index/index.vue b/pages/index/index.vue new file mode 100644 index 0000000..11af921 --- /dev/null +++ b/pages/index/index.vue @@ -0,0 +1,44 @@ + + + + + diff --git a/uni.scss b/uni.scss new file mode 100644 index 0000000..da0b382 --- /dev/null +++ b/uni.scss @@ -0,0 +1,76 @@ +/** + * 这里是uni-app内置的常用样式变量 + * + * uni-app 官方扩展插件及插件市场(https://ext.dcloud.net.cn)上很多三方插件均使用了这些样式变量 + * 如果你是插件开发者,建议你使用scss预处理,并在插件代码中直接使用这些变量(无需 import 这个文件),方便用户通过搭积木的方式开发整体风格一致的App + * + */ + +/** + * 如果你是App开发者(插件使用者),你可以通过修改这些变量来定制自己的插件主题,实现自定义主题功能 + * + * 如果你的项目同样使用了scss预处理,你也可以直接在你的 scss 代码中使用如下变量,同时无需 import 这个文件 + */ + +/* 颜色变量 */ +@import '~@/assets/style/global.scss'; +/* 行为相关颜色 */ +$uni-color-primary: #007aff; +$uni-color-success: #4cd964; +$uni-color-warning: #f0ad4e; +$uni-color-error: #dd524d; + +/* 文字基本颜色 */ +$uni-text-color:#333;//基本色 +$uni-text-color-inverse:#fff;//反色 +$uni-text-color-grey:#999;//辅助灰色,如加载更多的提示信息 +$uni-text-color-placeholder: #808080; +$uni-text-color-disable:#c0c0c0; + +/* 背景颜色 */ +$uni-bg-color:#ffffff; +$uni-bg-color-grey:#f8f8f8; +$uni-bg-color-hover:#f1f1f1;//点击状态颜色 +$uni-bg-color-mask:rgba(0, 0, 0, 0.4);//遮罩颜色 + +/* 边框颜色 */ +$uni-border-color:#c8c7cc; + +/* 尺寸变量 */ + +/* 文字尺寸 */ +$uni-font-size-sm:24rpx; +$uni-font-size-base:28rpx; +$uni-font-size-lg:32rpx; + +/* 图片尺寸 */ +$uni-img-size-sm:40rpx; +$uni-img-size-base:52rpx; +$uni-img-size-lg:80rpx; + +/* Border Radius */ +$uni-border-radius-sm: 4rpx; +$uni-border-radius-base: 6rpx; +$uni-border-radius-lg: 12rpx; +$uni-border-radius-circle: 50%; + +/* 水平间距 */ +$uni-spacing-row-sm: 10px; +$uni-spacing-row-base: 20rpx; +$uni-spacing-row-lg: 30rpx; + +/* 垂直间距 */ +$uni-spacing-col-sm: 8rpx; +$uni-spacing-col-base: 16rpx; +$uni-spacing-col-lg: 24rpx; + +/* 透明度 */ +$uni-opacity-disabled: 0.3; // 组件禁用态的透明度 + +/* 文章场景相关 */ +$uni-color-title: #2C405A; // 文章标题颜色 +$uni-font-size-title:40rpx; +$uni-color-subtitle: #555555; // 二级标题颜色 +$uni-font-size-subtitle:36rpx; +$uni-color-paragraph: #3F536E; // 文章段落颜色 +$uni-font-size-paragraph:30rpx; \ No newline at end of file diff --git a/uni_modules/mescroll-uni/changelog.md b/uni_modules/mescroll-uni/changelog.md new file mode 100644 index 0000000..d7992a7 --- /dev/null +++ b/uni_modules/mescroll-uni/changelog.md @@ -0,0 +1,6 @@ +## 1.3.7(2021-04-13) +1. 新增`mescroll-swiper-sticky.vue`的示例, 轮播吸顶菜单导航 +2. 新增`mescroll-empty.vue`的示例, 单独使用空布局组件 +3. 简化tabs在具体项目中的使用,并简化对应的示例 +4. mescroll-uni 支持动态禁止滚动的属性 disableScroll (注: mescroll-body不支持) +-by 小瑾同学 diff --git a/uni_modules/mescroll-uni/components/mescroll-body/mescroll-body.css b/uni_modules/mescroll-uni/components/mescroll-body/mescroll-body.css new file mode 100644 index 0000000..1107710 --- /dev/null +++ b/uni_modules/mescroll-uni/components/mescroll-body/mescroll-body.css @@ -0,0 +1,19 @@ +.mescroll-body { + position: relative; /* 下拉刷新区域相对自身定位 */ + height: auto; /* 不可固定高度,否则overflow:hidden导致无法滑动; 同时使设置的最小高生效,实现列表不满屏仍可下拉*/ + overflow: hidden; /* 当有元素写在mescroll-body标签前面时,可遮住下拉刷新区域 */ + box-sizing: border-box; /* 避免设置padding出现双滚动条的问题 */ +} + +/* 使sticky生效: 父元素不能overflow:hidden或者overflow:auto属性 */ +.mescroll-body.mescorll-sticky{ + overflow: unset !important +} + +/* 适配 iPhoneX */ +@supports (bottom: constant(safe-area-inset-bottom)) or (bottom: env(safe-area-inset-bottom)) { + .mescroll-safearea { + padding-bottom: constant(safe-area-inset-bottom); + padding-bottom: env(safe-area-inset-bottom); + } +} \ No newline at end of file diff --git a/uni_modules/mescroll-uni/components/mescroll-body/mescroll-body.vue b/uni_modules/mescroll-uni/components/mescroll-body/mescroll-body.vue new file mode 100644 index 0000000..ef01f2d --- /dev/null +++ b/uni_modules/mescroll-uni/components/mescroll-body/mescroll-body.vue @@ -0,0 +1,400 @@ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/uni_modules/mescroll-uni/components/mescroll-diy/beibei/components/mescroll-down.css b/uni_modules/mescroll-uni/components/mescroll-diy/beibei/components/mescroll-down.css new file mode 100644 index 0000000..dcefe2d --- /dev/null +++ b/uni_modules/mescroll-uni/components/mescroll-diy/beibei/components/mescroll-down.css @@ -0,0 +1,47 @@ +/*下拉刷新--标语*/ +.mescroll-downwarp .downwarp-slogan{ + display: block; + width: 420rpx; + height: 168rpx; + margin: auto; +} +/*下拉刷新--向下进度动画*/ +.mescroll-downwarp .downwarp-progress{ + display: inline-block; + width: 40rpx; + height: 40rpx; + border: none; + margin: auto; + background-size: contain; + background-repeat: no-repeat; + background-position: center; + background-image: url(https://www.mescroll.com/img/beibei/mescroll-progress.png); + transition: all 300ms; +} +/*下拉刷新--进度条*/ +.mescroll-downwarp .downwarp-loading{ + display: inline-block; + width: 32rpx; + height: 32rpx; + border-radius: 50%; + border: 2rpx solid #FF8095; + border-bottom-color: transparent; +} +/*下拉刷新--吉祥物*/ +.mescroll-downwarp .downwarp-mascot{ + position: absolute; + right: 16rpx; + bottom: 0; + width: 100rpx; + height: 100rpx; + background-size: contain; + background-repeat: no-repeat; + animation: animMascot .6s steps(1,end) infinite; +} +@keyframes animMascot { + 0% {background-image: url(https://www.mescroll.com/img/beibei/mescroll-bb1.png)} + 25% {background-image: url(https://www.mescroll.com/img/beibei/mescroll-bb2.png)} + 50% {background-image: url(https://www.mescroll.com/img/beibei/mescroll-bb3.png)} + 75% {background-image: url(https://www.mescroll.com/img/beibei/mescroll-bb4.png)} + 100% {background-image: url(https://www.mescroll.com/img/beibei/mescroll-bb1.png)} +} \ No newline at end of file diff --git a/uni_modules/mescroll-uni/components/mescroll-diy/beibei/components/mescroll-down.vue b/uni_modules/mescroll-uni/components/mescroll-diy/beibei/components/mescroll-down.vue new file mode 100644 index 0000000..ee1d321 --- /dev/null +++ b/uni_modules/mescroll-uni/components/mescroll-diy/beibei/components/mescroll-down.vue @@ -0,0 +1,39 @@ + + + + + + diff --git a/uni_modules/mescroll-uni/components/mescroll-diy/beibei/mescroll-body.vue b/uni_modules/mescroll-uni/components/mescroll-diy/beibei/mescroll-body.vue new file mode 100644 index 0000000..305330c --- /dev/null +++ b/uni_modules/mescroll-uni/components/mescroll-diy/beibei/mescroll-body.vue @@ -0,0 +1,360 @@ + + + + + + + + + + + + + + + diff --git a/uni_modules/mescroll-uni/components/mescroll-diy/beibei/mescroll-uni-option.js b/uni_modules/mescroll-uni/components/mescroll-diy/beibei/mescroll-uni-option.js new file mode 100644 index 0000000..fbac778 --- /dev/null +++ b/uni_modules/mescroll-uni/components/mescroll-diy/beibei/mescroll-uni-option.js @@ -0,0 +1,49 @@ +// mescroll-uni和mescroll-body 的全局配置 +const GlobalOption = { + down: { + // 其他down的配置参数也可以写,这里只展示了常用的配置: + offset: uni.upx2px(140), // 在列表顶部,下拉大于140upx,松手即可触发下拉刷新的回调 + native: false // 是否使用系统自带的下拉刷新; 默认false; 仅在mescroll-body生效 (值为true时,还需在pages配置enablePullDownRefresh:true;详请参考mescroll-native的案例) + }, + up: { + // 其他up的配置参数也可以写,这里只展示了常用的配置: + offset: 150, // 距底部多远时,触发upCallback + toTop: { + // 回到顶部按钮,需配置src才显示 + src: "https://www.mescroll.com/img/mescroll-totop.png", // 图片路径 (建议放入static目录, 如 /static/img/mescroll-totop.png ) + offset: 1000, // 列表滚动多少距离才显示回到顶部按钮,默认1000px + right: 20, // 到右边的距离, 默认20 (支持"20rpx", "20px", "20%"格式的值, 纯数字则默认单位rpx) + bottom: 120, // 到底部的距离, 默认120 (支持"20rpx", "20px", "20%"格式的值, 纯数字则默认单位rpx) + width: 72 // 回到顶部图标的宽度, 默认72 (支持"20rpx", "20px", "20%"格式的值, 纯数字则默认单位rpx) + }, + empty: { + use: true, // 是否显示空布局 + icon: "https://www.mescroll.com/img/mescroll-empty.png" // 图标路径 (建议放入static目录, 如 /static/img/mescroll-empty.png ) + } + }, + // 国际化配置 + i18n: { + // 中文 + zh: { + up: { + textLoading: '加载中 ...', // 加载中的提示文本 + textNoMore: '-- END --', // 没有更多数据的提示文本 + empty: { + tip: '~ 暂无相关数据 ~' // 空提示 + } + } + }, + // 英文 + en: { + up: { + textLoading: 'loading ...', + textNoMore: '-- END --', + empty: { + tip: '~ absolutely empty ~' + } + } + } + } +} + +export default GlobalOption \ No newline at end of file diff --git a/uni_modules/mescroll-uni/components/mescroll-diy/beibei/mescroll-uni.vue b/uni_modules/mescroll-uni/components/mescroll-diy/beibei/mescroll-uni.vue new file mode 100644 index 0000000..e144de7 --- /dev/null +++ b/uni_modules/mescroll-uni/components/mescroll-diy/beibei/mescroll-uni.vue @@ -0,0 +1,437 @@ + + + + + + + + + + + + + + + diff --git a/uni_modules/mescroll-uni/components/mescroll-diy/xinlang/components/mescroll-down.css b/uni_modules/mescroll-uni/components/mescroll-diy/xinlang/components/mescroll-down.css new file mode 100644 index 0000000..b62ed40 --- /dev/null +++ b/uni_modules/mescroll-uni/components/mescroll-diy/xinlang/components/mescroll-down.css @@ -0,0 +1,44 @@ +/*下拉刷新--上下箭头*/ +.mescroll-downwarp .downwarp-arrow { + display: inline-block; + width: 20px; + height: 20px; + margin: 10px; + background-image: url(https://www.mescroll.com/img/xinlang/mescroll-arrow.png); + background-size: contain; + vertical-align: middle; + transition: all 300ms; +} + +/*下拉刷新--旋转进度条*/ +.mescroll-downwarp .downwarp-progress{ + width: 36px; + height: 36px; + border: none; + margin: auto; + background-size: contain; + animation: progressRotate 0.6s steps(6, start) infinite; +} +@keyframes progressRotate { + 0% { + background-image: url(https://www.mescroll.com/img/xinlang/mescroll-progress1.png); + } + 16% { + background-image: url(https://www.mescroll.com/img/xinlang/mescroll-progress2.png); + } + 32% { + background-image: url(https://www.mescroll.com/img/xinlang/mescroll-progress3.png); + } + 48% { + background-image: url(https://www.mescroll.com/img/xinlang/mescroll-progress4.png); + } + 64% { + background-image: url(https://www.mescroll.com/img/xinlang/mescroll-progress5.png); + } + 80% { + background-image: url(https://www.mescroll.com/img/xinlang/mescroll-progress6.png); + } + 100% { + background-image: url(https://www.mescroll.com/img/xinlang/mescroll-progress1.png); + } +} \ No newline at end of file diff --git a/uni_modules/mescroll-uni/components/mescroll-diy/xinlang/components/mescroll-down.vue b/uni_modules/mescroll-uni/components/mescroll-diy/xinlang/components/mescroll-down.vue new file mode 100644 index 0000000..745d903 --- /dev/null +++ b/uni_modules/mescroll-uni/components/mescroll-diy/xinlang/components/mescroll-down.vue @@ -0,0 +1,53 @@ + + + + + + diff --git a/uni_modules/mescroll-uni/components/mescroll-diy/xinlang/components/mescroll-up.css b/uni_modules/mescroll-uni/components/mescroll-diy/xinlang/components/mescroll-up.css new file mode 100644 index 0000000..abf51f1 --- /dev/null +++ b/uni_modules/mescroll-uni/components/mescroll-diy/xinlang/components/mescroll-up.css @@ -0,0 +1,32 @@ +/*上拉加载--旋转进度条*/ +.mescroll-upwarp .upwarp-progress { + width: 36px; + height: 36px; + border: none; + margin: auto; + background-size: contain; + animation: progressRotate 0.6s steps(6, start) infinite; +} +@keyframes progressRotate { + 0% { + background-image: url(https://www.mescroll.com/img/xinlang/mescroll-progress1.png); + } + 16% { + background-image: url(https://www.mescroll.com/img/xinlang/mescroll-progress2.png); + } + 32% { + background-image: url(https://www.mescroll.com/img/xinlang/mescroll-progress3.png); + } + 48% { + background-image: url(https://www.mescroll.com/img/xinlang/mescroll-progress4.png); + } + 64% { + background-image: url(https://www.mescroll.com/img/xinlang/mescroll-progress5.png); + } + 80% { + background-image: url(https://www.mescroll.com/img/xinlang/mescroll-progress6.png); + } + 100% { + background-image: url(https://www.mescroll.com/img/xinlang/mescroll-progress1.png); + } +} \ No newline at end of file diff --git a/uni_modules/mescroll-uni/components/mescroll-diy/xinlang/components/mescroll-up.vue b/uni_modules/mescroll-uni/components/mescroll-diy/xinlang/components/mescroll-up.vue new file mode 100644 index 0000000..31bd42a --- /dev/null +++ b/uni_modules/mescroll-uni/components/mescroll-diy/xinlang/components/mescroll-up.vue @@ -0,0 +1,40 @@ + + + + + + diff --git a/uni_modules/mescroll-uni/components/mescroll-diy/xinlang/mescroll-body.vue b/uni_modules/mescroll-uni/components/mescroll-diy/xinlang/mescroll-body.vue new file mode 100644 index 0000000..1daa3bf --- /dev/null +++ b/uni_modules/mescroll-uni/components/mescroll-diy/xinlang/mescroll-body.vue @@ -0,0 +1,380 @@ + + + + + + + + + + + + + + + diff --git a/uni_modules/mescroll-uni/components/mescroll-diy/xinlang/mescroll-uni-option.js b/uni_modules/mescroll-uni/components/mescroll-diy/xinlang/mescroll-uni-option.js new file mode 100644 index 0000000..55d331e --- /dev/null +++ b/uni_modules/mescroll-uni/components/mescroll-diy/xinlang/mescroll-uni-option.js @@ -0,0 +1,64 @@ +// 全局配置 +// mescroll-body 和 mescroll-uni 通用 +const GlobalOption = { + down: { + // 其他down的配置参数也可以写,这里只展示了常用的配置: + offset: 80, // 在列表顶部,下拉大于80px,松手即可触发下拉刷新的回调 + native: false // 是否使用系统自带的下拉刷新; 默认false; 仅在mescroll-body生效 (值为true时,还需在pages配置enablePullDownRefresh:true;详请参考mescroll-native的案例) + }, + up: { + // 其他up的配置参数也可以写,这里只展示了常用的配置: + offset: 150, // 距底部多远时,触发upCallback,仅mescroll-uni生效 ( mescroll-body配置的是pages.json的 onReachBottomDistance ) + toTop: { + // 回到顶部按钮,需配置src才显示 + src: "https://www.mescroll.com/img/mescroll-totop.png", // 图片路径 (建议放入static目录, 如 /static/img/mescroll-totop.png ) + offset: 1000, // 列表滚动多少距离才显示回到顶部按钮,默认1000px + right: 20, // 到右边的距离, 默认20 (支持"20rpx", "20px", "20%"格式的值, 纯数字则默认单位rpx) + bottom: 120, // 到底部的距离, 默认120 (支持"20rpx", "20px", "20%"格式的值, 纯数字则默认单位rpx) + width: 72 // 回到顶部图标的宽度, 默认72 (支持"20rpx", "20px", "20%"格式的值, 纯数字则默认单位rpx) + }, + empty: { + use: true, // 是否显示空布局 + icon: "https://www.mescroll.com/img/mescroll-empty.png" // 图标路径 (建议放入static目录, 如 /static/img/mescroll-empty.png ) + } + }, + // 国际化配置 + i18n: { + // 中文 + zh: { + down: { + textInOffset: '下拉刷新', // 下拉的距离在offset范围内的提示文本 + textOutOffset: '释放更新', // 下拉的距离大于offset范围的提示文本 + textLoading: '加载中 ...', // 加载中的提示文本 + textSuccess: '加载成功', // 加载成功的文本 + textErr: '加载失败', // 加载失败的文本 + }, + up: { + textLoading: '加载中 ...', // 加载中的提示文本 + textNoMore: '-- END --', // 没有更多数据的提示文本 + empty: { + tip: '~ 空空如也 ~' // 空提示 + } + } + }, + // 英文 + en: { + down: { + textInOffset: 'drop down refresh', + textOutOffset: 'release updates', + textLoading: 'loading ...', + textSuccess: 'loaded successfully', + textErr: 'loading failed' + }, + up: { + textLoading: 'loading ...', + textNoMore: '-- END --', + empty: { + tip: '~ absolutely empty ~' + } + } + } + } +} + +export default GlobalOption diff --git a/uni_modules/mescroll-uni/components/mescroll-diy/xinlang/mescroll-uni.vue b/uni_modules/mescroll-uni/components/mescroll-diy/xinlang/mescroll-uni.vue new file mode 100644 index 0000000..65c9fbe --- /dev/null +++ b/uni_modules/mescroll-uni/components/mescroll-diy/xinlang/mescroll-uni.vue @@ -0,0 +1,462 @@ + + + + + + + + + + + + + + + diff --git a/uni_modules/mescroll-uni/components/mescroll-empty/mescroll-empty.vue b/uni_modules/mescroll-uni/components/mescroll-empty/mescroll-empty.vue new file mode 100644 index 0000000..32b4069 --- /dev/null +++ b/uni_modules/mescroll-uni/components/mescroll-empty/mescroll-empty.vue @@ -0,0 +1,116 @@ + + + + + + diff --git a/uni_modules/mescroll-uni/components/mescroll-uni/components/mescroll-down.css b/uni_modules/mescroll-uni/components/mescroll-uni/components/mescroll-down.css new file mode 100644 index 0000000..72bf106 --- /dev/null +++ b/uni_modules/mescroll-uni/components/mescroll-uni/components/mescroll-down.css @@ -0,0 +1,55 @@ +/* 下拉刷新区域 */ +.mescroll-downwarp { + position: absolute; + top: -100%; + left: 0; + width: 100%; + height: 100%; + text-align: center; +} + +/* 下拉刷新--内容区,定位于区域底部 */ +.mescroll-downwarp .downwarp-content { + position: absolute; + left: 0; + bottom: 0; + width: 100%; + min-height: 60rpx; + padding: 20rpx 0; + text-align: center; +} + +/* 下拉刷新--提示文本 */ +.mescroll-downwarp .downwarp-tip { + display: inline-block; + font-size: 28rpx; + vertical-align: middle; + margin-left: 16rpx; + /* color: gray; 已在style设置color,此处删去*/ +} + +/* 下拉刷新--旋转进度条 */ +.mescroll-downwarp .downwarp-progress { + display: inline-block; + width: 32rpx; + height: 32rpx; + border-radius: 50%; + border: 2rpx solid gray; + border-bottom-color: transparent !important; /*已在style设置border-color,此处需加 !important*/ + vertical-align: middle; +} + +/* 旋转动画 */ +.mescroll-downwarp .mescroll-rotate { + animation: mescrollDownRotate 0.6s linear infinite; +} + +@keyframes mescrollDownRotate { + 0% { + transform: rotate(0deg); + } + + 100% { + transform: rotate(360deg); + } +} \ No newline at end of file diff --git a/uni_modules/mescroll-uni/components/mescroll-uni/components/mescroll-down.vue b/uni_modules/mescroll-uni/components/mescroll-uni/components/mescroll-down.vue new file mode 100644 index 0000000..9fd1567 --- /dev/null +++ b/uni_modules/mescroll-uni/components/mescroll-uni/components/mescroll-down.vue @@ -0,0 +1,47 @@ + + + + + + diff --git a/uni_modules/mescroll-uni/components/mescroll-uni/components/mescroll-top.vue b/uni_modules/mescroll-uni/components/mescroll-uni/components/mescroll-top.vue new file mode 100644 index 0000000..5115fd8 --- /dev/null +++ b/uni_modules/mescroll-uni/components/mescroll-uni/components/mescroll-top.vue @@ -0,0 +1,83 @@ + + + + + + diff --git a/uni_modules/mescroll-uni/components/mescroll-uni/components/mescroll-up.css b/uni_modules/mescroll-uni/components/mescroll-uni/components/mescroll-up.css new file mode 100644 index 0000000..cbf48cd --- /dev/null +++ b/uni_modules/mescroll-uni/components/mescroll-uni/components/mescroll-up.css @@ -0,0 +1,47 @@ +/* 上拉加载区域 */ +.mescroll-upwarp { + box-sizing: border-box; + min-height: 110rpx; + padding: 30rpx 0; + text-align: center; + clear: both; +} + +/*提示文本 */ +.mescroll-upwarp .upwarp-tip, +.mescroll-upwarp .upwarp-nodata { + display: inline-block; + font-size: 28rpx; + vertical-align: middle; + /* color: gray; 已在style设置color,此处删去*/ +} + +.mescroll-upwarp .upwarp-tip { + margin-left: 16rpx; +} + +/*旋转进度条 */ +.mescroll-upwarp .upwarp-progress { + display: inline-block; + width: 32rpx; + height: 32rpx; + border-radius: 50%; + border: 2rpx solid gray; + border-bottom-color: transparent !important; /*已在style设置border-color,此处需加 !important*/ + vertical-align: middle; +} + +/* 旋转动画 */ +.mescroll-upwarp .mescroll-rotate { + animation: mescrollUpRotate 0.6s linear infinite; +} + +@keyframes mescrollUpRotate { + 0% { + transform: rotate(0deg); + } + + 100% { + transform: rotate(360deg); + } +} \ No newline at end of file diff --git a/uni_modules/mescroll-uni/components/mescroll-uni/components/mescroll-up.vue b/uni_modules/mescroll-uni/components/mescroll-uni/components/mescroll-up.vue new file mode 100644 index 0000000..11c2e1f --- /dev/null +++ b/uni_modules/mescroll-uni/components/mescroll-uni/components/mescroll-up.vue @@ -0,0 +1,39 @@ + + + + + + diff --git a/uni_modules/mescroll-uni/components/mescroll-uni/mescroll-i18n.js b/uni_modules/mescroll-uni/components/mescroll-uni/mescroll-i18n.js new file mode 100644 index 0000000..2b6a50f --- /dev/null +++ b/uni_modules/mescroll-uni/components/mescroll-uni/mescroll-i18n.js @@ -0,0 +1,15 @@ +// 国际化工具类 +const mescrollI18n = { + // 默认语言 + def: "zh", + // 获取当前语言类型 + getType(){ + return uni.getStorageSync("mescroll-i18n") || this.def + }, + // 设置当前语言类型 + setType(type){ + uni.setStorageSync("mescroll-i18n", type) + } +} + +export default mescrollI18n diff --git a/uni_modules/mescroll-uni/components/mescroll-uni/mescroll-mixins.js b/uni_modules/mescroll-uni/components/mescroll-uni/mescroll-mixins.js new file mode 100644 index 0000000..bf3714a --- /dev/null +++ b/uni_modules/mescroll-uni/components/mescroll-uni/mescroll-mixins.js @@ -0,0 +1,57 @@ +// mescroll-body 和 mescroll-uni 通用 +const MescrollMixin = { + data() { + return { + mescroll: null //mescroll实例对象 + } + }, + // 注册系统自带的下拉刷新 (配置down.native为true时生效, 还需在pages配置enablePullDownRefresh:true;详请参考mescroll-native的案例) + onPullDownRefresh(){ + this.mescroll && this.mescroll.onPullDownRefresh(); + }, + // 注册列表滚动事件,用于判定在顶部可下拉刷新,在指定位置可显示隐藏回到顶部按钮 (此方法为页面生命周期,无法在子组件中触发, 仅在mescroll-body生效) + onPageScroll(e) { + this.mescroll && this.mescroll.onPageScroll(e); + }, + // 注册滚动到底部的事件,用于上拉加载 (此方法为页面生命周期,无法在子组件中触发, 仅在mescroll-body生效) + onReachBottom() { + this.mescroll && this.mescroll.onReachBottom(); + }, + methods: { + // mescroll组件初始化的回调,可获取到mescroll对象 + mescrollInit(mescroll) { + this.mescroll = mescroll; + this.mescrollInitByRef(); // 兼容字节跳动小程序 + }, + // 以ref的方式初始化mescroll对象 (兼容字节跳动小程序) + mescrollInitByRef() { + if(!this.mescroll || !this.mescroll.resetUpScroll){ + let mescrollRef = this.$refs.mescrollRef; + if(mescrollRef) this.mescroll = mescrollRef.mescroll + } + }, + // 下拉刷新的回调 (mixin默认resetUpScroll) + downCallback() { + if(this.mescroll.optUp.use){ + this.mescroll.resetUpScroll() + }else{ + setTimeout(()=>{ + this.mescroll.endSuccess(); + }, 500) + } + }, + // 上拉加载的回调 + upCallback() { + // mixin默认延时500自动结束加载 + setTimeout(()=>{ + this.mescroll.endErr(); + }, 500) + } + }, + mounted() { + this.mescrollInitByRef(); // 兼容字节跳动小程序, 避免未设置@init或@init此时未能取到ref的情况 + } + +} + +export default MescrollMixin; diff --git a/uni_modules/mescroll-uni/components/mescroll-uni/mescroll-uni-option.js b/uni_modules/mescroll-uni/components/mescroll-uni/mescroll-uni-option.js new file mode 100644 index 0000000..55d331e --- /dev/null +++ b/uni_modules/mescroll-uni/components/mescroll-uni/mescroll-uni-option.js @@ -0,0 +1,64 @@ +// 全局配置 +// mescroll-body 和 mescroll-uni 通用 +const GlobalOption = { + down: { + // 其他down的配置参数也可以写,这里只展示了常用的配置: + offset: 80, // 在列表顶部,下拉大于80px,松手即可触发下拉刷新的回调 + native: false // 是否使用系统自带的下拉刷新; 默认false; 仅在mescroll-body生效 (值为true时,还需在pages配置enablePullDownRefresh:true;详请参考mescroll-native的案例) + }, + up: { + // 其他up的配置参数也可以写,这里只展示了常用的配置: + offset: 150, // 距底部多远时,触发upCallback,仅mescroll-uni生效 ( mescroll-body配置的是pages.json的 onReachBottomDistance ) + toTop: { + // 回到顶部按钮,需配置src才显示 + src: "https://www.mescroll.com/img/mescroll-totop.png", // 图片路径 (建议放入static目录, 如 /static/img/mescroll-totop.png ) + offset: 1000, // 列表滚动多少距离才显示回到顶部按钮,默认1000px + right: 20, // 到右边的距离, 默认20 (支持"20rpx", "20px", "20%"格式的值, 纯数字则默认单位rpx) + bottom: 120, // 到底部的距离, 默认120 (支持"20rpx", "20px", "20%"格式的值, 纯数字则默认单位rpx) + width: 72 // 回到顶部图标的宽度, 默认72 (支持"20rpx", "20px", "20%"格式的值, 纯数字则默认单位rpx) + }, + empty: { + use: true, // 是否显示空布局 + icon: "https://www.mescroll.com/img/mescroll-empty.png" // 图标路径 (建议放入static目录, 如 /static/img/mescroll-empty.png ) + } + }, + // 国际化配置 + i18n: { + // 中文 + zh: { + down: { + textInOffset: '下拉刷新', // 下拉的距离在offset范围内的提示文本 + textOutOffset: '释放更新', // 下拉的距离大于offset范围的提示文本 + textLoading: '加载中 ...', // 加载中的提示文本 + textSuccess: '加载成功', // 加载成功的文本 + textErr: '加载失败', // 加载失败的文本 + }, + up: { + textLoading: '加载中 ...', // 加载中的提示文本 + textNoMore: '-- END --', // 没有更多数据的提示文本 + empty: { + tip: '~ 空空如也 ~' // 空提示 + } + } + }, + // 英文 + en: { + down: { + textInOffset: 'drop down refresh', + textOutOffset: 'release updates', + textLoading: 'loading ...', + textSuccess: 'loaded successfully', + textErr: 'loading failed' + }, + up: { + textLoading: 'loading ...', + textNoMore: '-- END --', + empty: { + tip: '~ absolutely empty ~' + } + } + } + } +} + +export default GlobalOption diff --git a/uni_modules/mescroll-uni/components/mescroll-uni/mescroll-uni.css b/uni_modules/mescroll-uni/components/mescroll-uni/mescroll-uni.css new file mode 100644 index 0000000..39438cd --- /dev/null +++ b/uni_modules/mescroll-uni/components/mescroll-uni/mescroll-uni.css @@ -0,0 +1,36 @@ +.mescroll-uni-warp{ + height: 100%; +} + +.mescroll-uni-content{ + height: 100%; +} + +.mescroll-uni { + position: relative; + width: 100%; + height: 100%; + min-height: 200rpx; + overflow-y: auto; + box-sizing: border-box; /* 避免设置padding出现双滚动条的问题 */ +} + +/* 定位的方式固定高度 */ +.mescroll-uni-fixed{ + z-index: 1; + position: fixed; + top: 0; + left: 0; + right: 0; + bottom: 0; + width: auto; /* 使right生效 */ + height: auto; /* 使bottom生效 */ +} + +/* 适配 iPhoneX */ +@supports (bottom: constant(safe-area-inset-bottom)) or (bottom: env(safe-area-inset-bottom)) { + .mescroll-safearea { + padding-bottom: constant(safe-area-inset-bottom); + padding-bottom: env(safe-area-inset-bottom); + } +} diff --git a/uni_modules/mescroll-uni/components/mescroll-uni/mescroll-uni.js b/uni_modules/mescroll-uni/components/mescroll-uni/mescroll-uni.js new file mode 100644 index 0000000..3bfdac1 --- /dev/null +++ b/uni_modules/mescroll-uni/components/mescroll-uni/mescroll-uni.js @@ -0,0 +1,799 @@ +/* mescroll + * version 1.3.7 + * 2021-04-12 wenju + * https://www.mescroll.com + */ + +export default function MeScroll(options, isScrollBody) { + let me = this; + me.version = '1.3.7'; // mescroll版本号 + me.options = options || {}; // 配置 + me.isScrollBody = isScrollBody || false; // 滚动区域是否为原生页面滚动; 默认为scroll-view + + me.isDownScrolling = false; // 是否在执行下拉刷新的回调 + me.isUpScrolling = false; // 是否在执行上拉加载的回调 + let hasDownCallback = me.options.down && me.options.down.callback; // 是否配置了down的callback + + // 初始化下拉刷新 + me.initDownScroll(); + // 初始化上拉加载,则初始化 + me.initUpScroll(); + + // 自动加载 + setTimeout(function() { // 待主线程执行完毕再执行,避免new MeScroll未初始化,在回调获取不到mescroll的实例 + // 自动触发下拉刷新 (只有配置了down的callback才自动触发下拉刷新) + if ((me.optDown.use || me.optDown.native) && me.optDown.auto && hasDownCallback) { + if (me.optDown.autoShowLoading) { + me.triggerDownScroll(); // 显示下拉进度,执行下拉回调 + } else { + me.optDown.callback && me.optDown.callback(me); // 不显示下拉进度,直接执行下拉回调 + } + } + // 自动触发上拉加载 + if(!me.isUpAutoLoad){ // 部分小程序(头条小程序)emit是异步, 会导致isUpAutoLoad判断有误, 先延时确保先执行down的callback,再执行up的callback + setTimeout(function(){ + me.optUp.use && me.optUp.auto && !me.isUpAutoLoad && me.triggerUpScroll(); + },100) + } + }, 30); // 需让me.optDown.inited和me.optUp.inited先执行 +} + +/* 配置参数:下拉刷新 */ +MeScroll.prototype.extendDownScroll = function(optDown) { + // 下拉刷新的配置 + MeScroll.extend(optDown, { + use: true, // 是否启用下拉刷新; 默认true + auto: true, // 是否在初始化完毕之后自动执行下拉刷新的回调; 默认true + native: false, // 是否使用系统自带的下拉刷新; 默认false; 仅mescroll-body生效 (值为true时,还需在pages配置enablePullDownRefresh:true;详请参考mescroll-native的案例) + autoShowLoading: false, // 如果设置auto=true(在初始化完毕之后自动执行下拉刷新的回调),那么是否显示下拉刷新的进度; 默认false + isLock: false, // 是否锁定下拉刷新,默认false; + offset: 80, // 在列表顶部,下拉大于80px,松手即可触发下拉刷新的回调 + startTop: 100, // scroll-view快速滚动到顶部时,此时的scroll-top可能大于0, 此值用于控制最大的误差 + inOffsetRate: 1, // 在列表顶部,下拉的距离小于offset时,改变下拉区域高度比例;值小于1且越接近0,高度变化越小,表现为越往下越难拉 + outOffsetRate: 0.2, // 在列表顶部,下拉的距离大于offset时,改变下拉区域高度比例;值小于1且越接近0,高度变化越小,表现为越往下越难拉 + bottomOffset: 20, // 当手指touchmove位置在距离body底部20px范围内的时候结束上拉刷新,避免Webview嵌套导致touchend事件不执行 + minAngle: 45, // 向下滑动最少偏移的角度,取值区间 [0,90];默认45度,即向下滑动的角度大于45度则触发下拉;而小于45度,将不触发下拉,避免与左右滑动的轮播等组件冲突; + textInOffset: '下拉刷新', // 下拉的距离在offset范围内的提示文本 + textOutOffset: '释放更新', // 下拉的距离大于offset范围的提示文本 + textLoading: '加载中 ...', // 加载中的提示文本 + textSuccess: '加载成功', // 加载成功的文本 + textErr: '加载失败', // 加载失败的文本 + beforeEndDelay: 0, // 延时结束的时长 (显示加载成功/失败的时长, android小程序设置此项结束下拉会卡顿, 配置后请注意测试) + bgColor: "transparent", // 背景颜色 (建议在pages.json中再设置一下backgroundColorTop) + textColor: "gray", // 文本颜色 (当bgColor配置了颜色,而textColor未配置时,则textColor会默认为白色) + inited: null, // 下拉刷新初始化完毕的回调 + inOffset: null, // 下拉的距离进入offset范围内那一刻的回调 + outOffset: null, // 下拉的距离大于offset那一刻的回调 + onMoving: null, // 下拉过程中的回调,滑动过程一直在执行; rate下拉区域当前高度与指定距离的比值(inOffset: rate<1; outOffset: rate>=1); downHight当前下拉区域的高度 + beforeLoading: null, // 准备触发下拉刷新的回调: 如果return true,将不触发showLoading和callback回调; 常用来完全自定义下拉刷新, 参考案例【淘宝 v6.8.0】 + showLoading: null, // 显示下拉刷新进度的回调 + afterLoading: null, // 显示下拉刷新进度的回调之后,马上要执行的代码 (如: 在wxs中使用) + beforeEndDownScroll: null, // 准备结束下拉的回调. 返回结束下拉的延时执行时间,默认0ms; 常用于结束下拉之前再显示另外一小段动画,才去隐藏下拉刷新的场景, 参考案例【dotJump】 + endDownScroll: null, // 结束下拉刷新的回调 + afterEndDownScroll: null, // 结束下拉刷新的回调,马上要执行的代码 (如: 在wxs中使用) + callback: function(mescroll) { + // 下拉刷新的回调;默认重置上拉加载列表为第一页 + mescroll.resetUpScroll(); + } + }) +} + +/* 配置参数:上拉加载 */ +MeScroll.prototype.extendUpScroll = function(optUp) { + // 上拉加载的配置 + MeScroll.extend(optUp, { + use: true, // 是否启用上拉加载; 默认true + auto: true, // 是否在初始化完毕之后自动执行上拉加载的回调; 默认true + isLock: false, // 是否锁定上拉加载,默认false; + isBoth: true, // 上拉加载时,如果滑动到列表顶部是否可以同时触发下拉刷新;默认true,两者可同时触发; + callback: null, // 上拉加载的回调;function(page,mescroll){ } + page: { + num: 0, // 当前页码,默认0,回调之前会加1,即callback(page)会从1开始 + size: 10, // 每页数据的数量 + time: null // 加载第一页数据服务器返回的时间; 防止用户翻页时,后台新增了数据从而导致下一页数据重复; + }, + noMoreSize: 5, // 如果列表已无数据,可设置列表的总数量要大于等于5条才显示无更多数据;避免列表数据过少(比如只有一条数据),显示无更多数据会不好看 + offset: 150, // 距底部多远时,触发upCallback,仅mescroll-uni生效 ( mescroll-body配置的是pages.json的 onReachBottomDistance ) + textLoading: '加载中 ...', // 加载中的提示文本 + textNoMore: '-- END --', // 没有更多数据的提示文本 + bgColor: "transparent", // 背景颜色 (建议在pages.json中再设置一下backgroundColorBottom) + textColor: "gray", // 文本颜色 (当bgColor配置了颜色,而textColor未配置时,则textColor会默认为白色) + inited: null, // 初始化完毕的回调 + showLoading: null, // 显示加载中的回调 + showNoMore: null, // 显示无更多数据的回调 + hideUpScroll: null, // 隐藏上拉加载的回调 + errDistance: 60, // endErr的时候需往上滑动一段距离,使其往下滑动时再次触发onReachBottom,仅mescroll-body生效 + toTop: { + // 回到顶部按钮,需配置src才显示 + src: null, // 图片路径,默认null (绝对路径或网络图) + offset: 1000, // 列表滚动多少距离才显示回到顶部按钮,默认1000 + duration: 300, // 回到顶部的动画时长,默认300ms (当值为0或300则使用系统自带回到顶部,更流畅; 其他值则通过step模拟,部分机型可能不够流畅,所以非特殊情况不建议修改此项) + btnClick: null, // 点击按钮的回调 + onShow: null, // 是否显示的回调 + zIndex: 9990, // fixed定位z-index值 + left: null, // 到左边的距离, 默认null. 此项有值时,right不生效. (支持20, "20rpx", "20px", "20%"格式的值, 其中纯数字则默认单位rpx) + right: 20, // 到右边的距离, 默认20 (支持20, "20rpx", "20px", "20%"格式的值, 其中纯数字则默认单位rpx) + bottom: 120, // 到底部的距离, 默认120 (支持20, "20rpx", "20px", "20%"格式的值, 其中纯数字则默认单位rpx) + safearea: false, // bottom的偏移量是否加上底部安全区的距离, 默认false, 需要适配iPhoneX时使用 (具体的界面如果不配置此项,则取本vue的safearea值) + width: 72, // 回到顶部图标的宽度, 默认72 (支持20, "20rpx", "20px", "20%"格式的值, 其中纯数字则默认单位rpx) + radius: "50%" // 圆角, 默认"50%" (支持20, "20rpx", "20px", "20%"格式的值, 其中纯数字则默认单位rpx) + }, + empty: { + use: true, // 是否显示空布局 + icon: null, // 图标路径 + tip: '~ 暂无相关数据 ~', // 提示 + btnText: '', // 按钮 + btnClick: null, // 点击按钮的回调 + onShow: null, // 是否显示的回调 + fixed: false, // 是否使用fixed定位,默认false; 配置fixed为true,以下的top和zIndex才生效 (transform会使fixed失效,最终会降级为absolute) + top: "100rpx", // fixed定位的top值 (完整的单位值,如 "10%"; "100rpx") + zIndex: 99 // fixed定位z-index值 + }, + onScroll: false // 是否监听滚动事件 + }) +} + +/* 配置参数 */ +MeScroll.extend = function(userOption, defaultOption) { + if (!userOption) return defaultOption; + for (let key in defaultOption) { + if (userOption[key] == null) { + let def = defaultOption[key]; + if (def != null && typeof def === 'object') { + userOption[key] = MeScroll.extend({}, def); // 深度匹配 + } else { + userOption[key] = def; + } + } else if (typeof userOption[key] === 'object') { + MeScroll.extend(userOption[key], defaultOption[key]); // 深度匹配 + } + } + return userOption; +} + +/* 简单判断是否配置了颜色 (非透明,非白色) */ +MeScroll.prototype.hasColor = function(color) { + if(!color) return false; + let c = color.toLowerCase(); + return c != "#fff" && c != "#ffffff" && c != "transparent" && c != "white" +} + +/* -------初始化下拉刷新------- */ +MeScroll.prototype.initDownScroll = function() { + let me = this; + // 配置参数 + me.optDown = me.options.down || {}; + if(!me.optDown.textColor && me.hasColor(me.optDown.bgColor)) me.optDown.textColor = "#fff"; // 当bgColor有值且textColor未设置,则textColor默认白色 + me.extendDownScroll(me.optDown); + + // 如果是mescroll-body且配置了native,则禁止自定义的下拉刷新 + if(me.isScrollBody && me.optDown.native){ + me.optDown.use = false + }else{ + me.optDown.native = false // 仅mescroll-body支持,mescroll-uni不支持 + } + + me.downHight = 0; // 下拉区域的高度 + + // 在页面中加入下拉布局 + if (me.optDown.use && me.optDown.inited) { + // 初始化完毕的回调 + setTimeout(function() { // 待主线程执行完毕再执行,避免new MeScroll未初始化,在回调获取不到mescroll的实例 + me.optDown.inited(me); + }, 0) + } +} + +/* 列表touchstart事件 */ +MeScroll.prototype.touchstartEvent = function(e) { + if (!this.optDown.use) return; + + this.startPoint = this.getPoint(e); // 记录起点 + this.startTop = this.getScrollTop(); // 记录此时的滚动条位置 + this.startAngle = 0; // 初始角度 + this.lastPoint = this.startPoint; // 重置上次move的点 + this.maxTouchmoveY = this.getBodyHeight() - this.optDown.bottomOffset; // 手指触摸的最大范围(写在touchstart避免body获取高度为0的情况) + this.inTouchend = false; // 标记不是touchend +} + +/* 列表touchmove事件 */ +MeScroll.prototype.touchmoveEvent = function(e) { + if (!this.optDown.use) return; + let me = this; + + let scrollTop = me.getScrollTop(); // 当前滚动条的距离 + let curPoint = me.getPoint(e); // 当前点 + + let moveY = curPoint.y - me.startPoint.y; // 和起点比,移动的距离,大于0向下拉,小于0向上拉 + + // 向下拉 && 在顶部 + // mescroll-body,直接判定在顶部即可 + // scroll-view在滚动时不会触发touchmove,当触顶/底/左/右时,才会触发touchmove + // scroll-view滚动到顶部时,scrollTop不一定为0,也有可能大于0; 在iOS的APP中scrollTop可能为负数,不一定和startTop相等 + if (moveY > 0 && ( + (me.isScrollBody && scrollTop <= 0) + || + (!me.isScrollBody && (scrollTop <= 0 || (scrollTop <= me.optDown.startTop && scrollTop === me.startTop)) ) + )) { + // 可下拉的条件 + if (!me.inTouchend && !me.isDownScrolling && !me.optDown.isLock && (!me.isUpScrolling || (me.isUpScrolling && + me.optUp.isBoth))) { + + // 下拉的初始角度是否在配置的范围内 + if(!me.startAngle) me.startAngle = me.getAngle(me.lastPoint, curPoint); // 两点之间的角度,区间 [0,90] + if (me.startAngle < me.optDown.minAngle) return; // 如果小于配置的角度,则不往下执行下拉刷新 + + // 如果手指的位置超过配置的距离,则提前结束下拉,避免Webview嵌套导致touchend无法触发 + if (me.maxTouchmoveY > 0 && curPoint.y >= me.maxTouchmoveY) { + me.inTouchend = true; // 标记执行touchend + me.touchendEvent(); // 提前触发touchend + return; + } + + me.preventDefault(e); // 阻止默认事件 + + let diff = curPoint.y - me.lastPoint.y; // 和上次比,移动的距离 (大于0向下,小于0向上) + + // 下拉距离 < 指定距离 + if (me.downHight < me.optDown.offset) { + if (me.movetype !== 1) { + me.movetype = 1; // 加入标记,保证只执行一次 + me.isDownEndSuccess = null; // 重置是否加载成功的状态 (wxs执行的是wxs.wxs) + me.optDown.inOffset && me.optDown.inOffset(me); // 进入指定距离范围内那一刻的回调,只执行一次 + me.isMoveDown = true; // 标记下拉区域高度改变,在touchend重置回来 + } + me.downHight += diff * me.optDown.inOffsetRate; // 越往下,高度变化越小 + + // 指定距离 <= 下拉距离 + } else { + if (me.movetype !== 2) { + me.movetype = 2; // 加入标记,保证只执行一次 + me.optDown.outOffset && me.optDown.outOffset(me); // 下拉超过指定距离那一刻的回调,只执行一次 + me.isMoveDown = true; // 标记下拉区域高度改变,在touchend重置回来 + } + if (diff > 0) { // 向下拉 + me.downHight += diff * me.optDown.outOffsetRate; // 越往下,高度变化越小 + } else { // 向上收 + me.downHight += diff; // 向上收回高度,则向上滑多少收多少高度 + } + } + + me.downHight = Math.round(me.downHight) // 取整 + let rate = me.downHight / me.optDown.offset; // 下拉区域当前高度与指定距离的比值 + me.optDown.onMoving && me.optDown.onMoving(me, rate, me.downHight); // 下拉过程中的回调,一直在执行 + } + } + + me.lastPoint = curPoint; // 记录本次移动的点 +} + +/* 列表touchend事件 */ +MeScroll.prototype.touchendEvent = function(e) { + if (!this.optDown.use) return; + // 如果下拉区域高度已改变,则需重置回来 + if (this.isMoveDown) { + if (this.downHight >= this.optDown.offset) { + // 符合触发刷新的条件 + this.triggerDownScroll(); + } else { + // 不符合的话 则重置 + this.downHight = 0; + this.endDownScrollCall(this); + } + this.movetype = 0; + this.isMoveDown = false; + } else if (!this.isScrollBody && this.getScrollTop() === this.startTop) { // scroll-view到顶/左/右/底的滑动事件 + let isScrollUp = this.getPoint(e).y - this.startPoint.y < 0; // 和起点比,移动的距离,大于0向下拉,小于0向上拉 + // 上滑 + if (isScrollUp) { + // 需检查滑动的角度 + let angle = this.getAngle(this.getPoint(e), this.startPoint); // 两点之间的角度,区间 [0,90] + if (angle > 80) { + // 检查并触发上拉 + this.triggerUpScroll(true); + } + } + } +} + +/* 根据点击滑动事件获取第一个手指的坐标 */ +MeScroll.prototype.getPoint = function(e) { + if (!e) { + return { + x: 0, + y: 0 + } + } + if (e.touches && e.touches[0]) { + return { + x: e.touches[0].pageX, + y: e.touches[0].pageY + } + } else if (e.changedTouches && e.changedTouches[0]) { + return { + x: e.changedTouches[0].pageX, + y: e.changedTouches[0].pageY + } + } else { + return { + x: e.clientX, + y: e.clientY + } + } +} + +/* 计算两点之间的角度: 区间 [0,90]*/ +MeScroll.prototype.getAngle = function(p1, p2) { + let x = Math.abs(p1.x - p2.x); + let y = Math.abs(p1.y - p2.y); + let z = Math.sqrt(x * x + y * y); + let angle = 0; + if (z !== 0) { + angle = Math.asin(y / z) / Math.PI * 180; + } + return angle +} + +/* 触发下拉刷新 */ +MeScroll.prototype.triggerDownScroll = function() { + if (this.optDown.beforeLoading && this.optDown.beforeLoading(this)) { + //return true则处于完全自定义状态 + } else { + this.showDownScroll(); // 下拉刷新中... + !this.optDown.native && this.optDown.callback && this.optDown.callback(this); // 执行回调,联网加载数据 + } +} + +/* 显示下拉进度布局 */ +MeScroll.prototype.showDownScroll = function() { + this.isDownScrolling = true; // 标记下拉中 + if (this.optDown.native) { + uni.startPullDownRefresh(); // 系统自带的下拉刷新 + this.showDownLoadingCall(0); // 仍触发showLoading,因为上拉加载用到 + } else{ + this.downHight = this.optDown.offset; // 更新下拉区域高度 + this.showDownLoadingCall(this.downHight); // 下拉刷新中... + } +} + +MeScroll.prototype.showDownLoadingCall = function(downHight) { + this.optDown.showLoading && this.optDown.showLoading(this, downHight); // 下拉刷新中... + this.optDown.afterLoading && this.optDown.afterLoading(this, downHight); // 下拉刷新中...触发之后马上要执行的代码 +} + +/* 显示系统自带的下拉刷新时需要处理的业务 */ +MeScroll.prototype.onPullDownRefresh = function() { + this.isDownScrolling = true; // 标记下拉中 + this.showDownLoadingCall(0); // 仍触发showLoading,因为上拉加载用到 + this.optDown.callback && this.optDown.callback(this); // 执行回调,联网加载数据 +} + +/* 结束下拉刷新 */ +MeScroll.prototype.endDownScroll = function() { + if (this.optDown.native) { // 结束原生下拉刷新 + this.isDownScrolling = false; + this.endDownScrollCall(this); + uni.stopPullDownRefresh(); + return + } + let me = this; + // 结束下拉刷新的方法 + let endScroll = function() { + me.downHight = 0; + me.isDownScrolling = false; + me.endDownScrollCall(me); + if(!me.isScrollBody){ + me.setScrollHeight(0) // scroll-view重置滚动区域,使数据不满屏时仍可检查触发翻页 + me.scrollTo(0,0) // scroll-view需重置滚动条到顶部,避免startTop大于0时,对下拉刷新的影响 + } + } + // 结束下拉刷新时的回调 + let delay = 0; + if (me.optDown.beforeEndDownScroll) { + delay = me.optDown.beforeEndDownScroll(me); // 结束下拉刷新的延时,单位ms + if(me.isDownEndSuccess == null) delay = 0; // 没有执行加载中,则不延时 + } + if (typeof delay === 'number' && delay > 0) { + setTimeout(endScroll, delay); + } else { + endScroll(); + } +} + +MeScroll.prototype.endDownScrollCall = function() { + this.optDown.endDownScroll && this.optDown.endDownScroll(this); + this.optDown.afterEndDownScroll && this.optDown.afterEndDownScroll(this); +} + +/* 锁定下拉刷新:isLock=ture,null锁定;isLock=false解锁 */ +MeScroll.prototype.lockDownScroll = function(isLock) { + if (isLock == null) isLock = true; + this.optDown.isLock = isLock; +} + +/* 锁定上拉加载:isLock=ture,null锁定;isLock=false解锁 */ +MeScroll.prototype.lockUpScroll = function(isLock) { + if (isLock == null) isLock = true; + this.optUp.isLock = isLock; +} + +/* -------初始化上拉加载------- */ +MeScroll.prototype.initUpScroll = function() { + let me = this; + // 配置参数 + me.optUp = me.options.up || {use: false} + if(!me.optUp.textColor && me.hasColor(me.optUp.bgColor)) me.optUp.textColor = "#fff"; // 当bgColor有值且textColor未设置,则textColor默认白色 + me.extendUpScroll(me.optUp); + + if (me.optUp.use === false) return; // 配置不使用上拉加载时,则不初始化上拉布局 + me.optUp.hasNext = true; // 如果使用上拉,则默认有下一页 + me.startNum = me.optUp.page.num + 1; // 记录page开始的页码 + + // 初始化完毕的回调 + if (me.optUp.inited) { + setTimeout(function() { // 待主线程执行完毕再执行,避免new MeScroll未初始化,在回调获取不到mescroll的实例 + me.optUp.inited(me); + }, 0) + } +} + +/*滚动到底部的事件 (仅mescroll-body生效)*/ +MeScroll.prototype.onReachBottom = function() { + if (this.isScrollBody && !this.isUpScrolling) { // 只能支持下拉刷新的时候同时可以触发上拉加载,否则滚动到底部就需要上滑一点才能触发onReachBottom + if (!this.optUp.isLock && this.optUp.hasNext) { + this.triggerUpScroll(); + } + } +} + +/*列表滚动事件 (仅mescroll-body生效)*/ +MeScroll.prototype.onPageScroll = function(e) { + if (!this.isScrollBody) return; + + // 更新滚动条的位置 (主要用于判断下拉刷新时,滚动条是否在顶部) + this.setScrollTop(e.scrollTop); + + // 顶部按钮的显示隐藏 + if (e.scrollTop >= this.optUp.toTop.offset) { + this.showTopBtn(); + } else { + this.hideTopBtn(); + } +} + +/*列表滚动事件*/ +MeScroll.prototype.scroll = function(e, onScroll) { + // 更新滚动条的位置 + this.setScrollTop(e.scrollTop); + // 更新滚动内容高度 + this.setScrollHeight(e.scrollHeight); + + // 向上滑还是向下滑动 + if (this.preScrollY == null) this.preScrollY = 0; + this.isScrollUp = e.scrollTop - this.preScrollY > 0; + this.preScrollY = e.scrollTop; + + // 上滑 && 检查并触发上拉 + this.isScrollUp && this.triggerUpScroll(true); + + // 顶部按钮的显示隐藏 + if (e.scrollTop >= this.optUp.toTop.offset) { + this.showTopBtn(); + } else { + this.hideTopBtn(); + } + + // 滑动监听 + this.optUp.onScroll && onScroll && onScroll() +} + +/* 触发上拉加载 */ +MeScroll.prototype.triggerUpScroll = function(isCheck) { + if (!this.isUpScrolling && this.optUp.use && this.optUp.callback) { + // 是否校验在底部; 默认不校验 + if (isCheck === true) { + let canUp = false; + // 还有下一页 && 没有锁定 && 不在下拉中 + if (this.optUp.hasNext && !this.optUp.isLock && !this.isDownScrolling) { + if (this.getScrollBottom() <= this.optUp.offset) { // 到底部 + canUp = true; // 标记可上拉 + } + } + if (canUp === false) return; + } + this.showUpScroll(); // 上拉加载中... + this.optUp.page.num++; // 预先加一页,如果失败则减回 + this.isUpAutoLoad = true; // 标记上拉已经自动执行过,避免初始化时多次触发上拉回调 + this.num = this.optUp.page.num; // 把最新的页数赋值在mescroll上,避免对page的影响 + this.size = this.optUp.page.size; // 把最新的页码赋值在mescroll上,避免对page的影响 + this.time = this.optUp.page.time; // 把最新的页码赋值在mescroll上,避免对page的影响 + this.optUp.callback(this); // 执行回调,联网加载数据 + } +} + +/* 显示上拉加载中 */ +MeScroll.prototype.showUpScroll = function() { + this.isUpScrolling = true; // 标记上拉加载中 + this.optUp.showLoading && this.optUp.showLoading(this); // 回调 +} + +/* 显示上拉无更多数据 */ +MeScroll.prototype.showNoMore = function() { + this.optUp.hasNext = false; // 标记无更多数据 + this.optUp.showNoMore && this.optUp.showNoMore(this); // 回调 +} + +/* 隐藏上拉区域**/ +MeScroll.prototype.hideUpScroll = function() { + this.optUp.hideUpScroll && this.optUp.hideUpScroll(this); // 回调 +} + +/* 结束上拉加载 */ +MeScroll.prototype.endUpScroll = function(isShowNoMore) { + if (isShowNoMore != null) { // isShowNoMore=null,不处理下拉状态,下拉刷新的时候调用 + if (isShowNoMore) { + this.showNoMore(); // isShowNoMore=true,显示无更多数据 + } else { + this.hideUpScroll(); // isShowNoMore=false,隐藏上拉加载 + } + } + this.isUpScrolling = false; // 标记结束上拉加载 +} + +/* 重置上拉加载列表为第一页 + *isShowLoading 是否显示进度布局; + * 1.默认null,不传参,则显示上拉加载的进度布局 + * 2.传参true, 则显示下拉刷新的进度布局 + * 3.传参false,则不显示上拉和下拉的进度 (常用于静默更新列表数据) + */ +MeScroll.prototype.resetUpScroll = function(isShowLoading) { + if (this.optUp && this.optUp.use) { + let page = this.optUp.page; + this.prePageNum = page.num; // 缓存重置前的页码,加载失败可退回 + this.prePageTime = page.time; // 缓存重置前的时间,加载失败可退回 + page.num = this.startNum; // 重置为第一页 + page.time = null; // 重置时间为空 + if (!this.isDownScrolling && isShowLoading !== false) { // 如果不是下拉刷新触发的resetUpScroll并且不配置列表静默更新,则显示进度; + if (isShowLoading == null) { + this.removeEmpty(); // 移除空布局 + this.showUpScroll(); // 不传参,默认显示上拉加载的进度布局 + } else { + this.showDownScroll(); // 传true,显示下拉刷新的进度布局,不清空列表 + } + } + this.isUpAutoLoad = true; // 标记上拉已经自动执行过,避免初始化时多次触发上拉回调 + this.num = page.num; // 把最新的页数赋值在mescroll上,避免对page的影响 + this.size = page.size; // 把最新的页码赋值在mescroll上,避免对page的影响 + this.time = page.time; // 把最新的页码赋值在mescroll上,避免对page的影响 + this.optUp.callback && this.optUp.callback(this); // 执行上拉回调 + } +} + +/* 设置page.num的值 */ +MeScroll.prototype.setPageNum = function(num) { + this.optUp.page.num = num - 1; +} + +/* 设置page.size的值 */ +MeScroll.prototype.setPageSize = function(size) { + this.optUp.page.size = size; +} + +/* 联网回调成功,结束下拉刷新和上拉加载 + * dataSize: 当前页的数据量(必传) + * totalPage: 总页数(必传) + * systime: 服务器时间 (可空) + */ +MeScroll.prototype.endByPage = function(dataSize, totalPage, systime) { + let hasNext; + if (this.optUp.use && totalPage != null) hasNext = this.optUp.page.num < totalPage; // 是否还有下一页 + this.endSuccess(dataSize, hasNext, systime); +} + +/* 联网回调成功,结束下拉刷新和上拉加载 + * dataSize: 当前页的数据量(必传) + * totalSize: 列表所有数据总数量(必传) + * systime: 服务器时间 (可空) + */ +MeScroll.prototype.endBySize = function(dataSize, totalSize, systime) { + let hasNext; + if (this.optUp.use && totalSize != null) { + let loadSize = (this.optUp.page.num - 1) * this.optUp.page.size + dataSize; // 已加载的数据总数 + hasNext = loadSize < totalSize; // 是否还有下一页 + } + this.endSuccess(dataSize, hasNext, systime); +} + +/* 联网回调成功,结束下拉刷新和上拉加载 + * dataSize: 当前页的数据个数(不是所有页的数据总和),用于上拉加载判断是否还有下一页.如果不传,则会判断还有下一页 + * hasNext: 是否还有下一页,布尔类型;用来解决这个小问题:比如列表共有20条数据,每页加载10条,共2页.如果只根据dataSize判断,则需翻到第三页才会知道无更多数据,如果传了hasNext,则翻到第二页即可显示无更多数据. + * systime: 服务器时间(可空);用来解决这个小问题:当准备翻下一页时,数据库新增了几条记录,此时翻下一页,前面的几条数据会和上一页的重复;这里传入了systime,那么upCallback的page.time就会有值,把page.time传给服务器,让后台过滤新加入的那几条记录 + */ +MeScroll.prototype.endSuccess = function(dataSize, hasNext, systime) { + let me = this; + // 结束下拉刷新 + if (me.isDownScrolling) { + me.isDownEndSuccess = true + me.endDownScroll(); + } + + // 结束上拉加载 + if (me.optUp.use) { + let isShowNoMore; // 是否已无更多数据 + if (dataSize != null) { + let pageNum = me.optUp.page.num; // 当前页码 + let pageSize = me.optUp.page.size; // 每页长度 + // 如果是第一页 + if (pageNum === 1) { + if (systime) me.optUp.page.time = systime; // 设置加载列表数据第一页的时间 + } + if (dataSize < pageSize || hasNext === false) { + // 返回的数据不满一页时,则说明已无更多数据 + me.optUp.hasNext = false; + if (dataSize === 0 && pageNum === 1) { + // 如果第一页无任何数据且配置了空布局 + isShowNoMore = false; + me.showEmpty(); + } else { + // 总列表数少于配置的数量,则不显示无更多数据 + let allDataSize = (pageNum - 1) * pageSize + dataSize; + if (allDataSize < me.optUp.noMoreSize) { + isShowNoMore = false; + } else { + isShowNoMore = true; + } + me.removeEmpty(); // 移除空布局 + } + } else { + // 还有下一页 + isShowNoMore = false; + me.optUp.hasNext = true; + me.removeEmpty(); // 移除空布局 + } + } + + // 隐藏上拉 + me.endUpScroll(isShowNoMore); + } +} + +/* 回调失败,结束下拉刷新和上拉加载 */ +MeScroll.prototype.endErr = function(errDistance) { + // 结束下拉,回调失败重置回原来的页码和时间 + if (this.isDownScrolling) { + this.isDownEndSuccess = false + let page = this.optUp.page; + if (page && this.prePageNum) { + page.num = this.prePageNum; + page.time = this.prePageTime; + } + this.endDownScroll(); + } + // 结束上拉,回调失败重置回原来的页码 + if (this.isUpScrolling) { + this.optUp.page.num--; + this.endUpScroll(false); + // 如果是mescroll-body,则需往回滚一定距离 + if(this.isScrollBody && errDistance !== 0){ // 不处理0 + if(!errDistance) errDistance = this.optUp.errDistance; // 不传,则取默认 + this.scrollTo(this.getScrollTop() - errDistance, 0) // 往上回滚的距离 + } + } +} + +/* 显示空布局 */ +MeScroll.prototype.showEmpty = function() { + this.optUp.empty.use && this.optUp.empty.onShow && this.optUp.empty.onShow(true) +} + +/* 移除空布局 */ +MeScroll.prototype.removeEmpty = function() { + this.optUp.empty.use && this.optUp.empty.onShow && this.optUp.empty.onShow(false) +} + +/* 显示回到顶部的按钮 */ +MeScroll.prototype.showTopBtn = function() { + if (!this.topBtnShow) { + this.topBtnShow = true; + this.optUp.toTop.onShow && this.optUp.toTop.onShow(true); + } +} + +/* 隐藏回到顶部的按钮 */ +MeScroll.prototype.hideTopBtn = function() { + if (this.topBtnShow) { + this.topBtnShow = false; + this.optUp.toTop.onShow && this.optUp.toTop.onShow(false); + } +} + +/* 获取滚动条的位置 */ +MeScroll.prototype.getScrollTop = function() { + return this.scrollTop || 0 +} + +/* 记录滚动条的位置 */ +MeScroll.prototype.setScrollTop = function(y) { + this.scrollTop = y; +} + +/* 滚动到指定位置 */ +MeScroll.prototype.scrollTo = function(y, t) { + this.myScrollTo && this.myScrollTo(y, t) // scrollview需自定义回到顶部方法 +} + +/* 自定义scrollTo */ +MeScroll.prototype.resetScrollTo = function(myScrollTo) { + this.myScrollTo = myScrollTo +} + +/* 滚动条到底部的距离 */ +MeScroll.prototype.getScrollBottom = function() { + return this.getScrollHeight() - this.getClientHeight() - this.getScrollTop() +} + +/* 计步器 + star: 开始值 + end: 结束值 + callback(step,timer): 回调step值,计步器timer,可自行通过window.clearInterval(timer)结束计步器; + t: 计步时长,传0则直接回调end值;不传则默认300ms + rate: 周期;不传则默认30ms计步一次 + * */ +MeScroll.prototype.getStep = function(star, end, callback, t, rate) { + let diff = end - star; // 差值 + if (t === 0 || diff === 0) { + callback && callback(end); + return; + } + t = t || 300; // 时长 300ms + rate = rate || 30; // 周期 30ms + let count = t / rate; // 次数 + let step = diff / count; // 步长 + let i = 0; // 计数 + let timer = setInterval(function() { + if (i < count - 1) { + star += step; + callback && callback(star, timer); + i++; + } else { + callback && callback(end, timer); // 最后一次直接设置end,避免计算误差 + clearInterval(timer); + } + }, rate); +} + +/* 滚动容器的高度 */ +MeScroll.prototype.getClientHeight = function(isReal) { + let h = this.clientHeight || 0 + if (h === 0 && isReal !== true) { // 未获取到容器的高度,可临时取body的高度 (可能会有误差) + h = this.getBodyHeight() + } + return h +} +MeScroll.prototype.setClientHeight = function(h) { + this.clientHeight = h; +} + +/* 滚动内容的高度 */ +MeScroll.prototype.getScrollHeight = function() { + return this.scrollHeight || 0; +} +MeScroll.prototype.setScrollHeight = function(h) { + this.scrollHeight = h; +} + +/* body的高度 */ +MeScroll.prototype.getBodyHeight = function() { + return this.bodyHeight || 0; +} +MeScroll.prototype.setBodyHeight = function(h) { + this.bodyHeight = h; +} + +/* 阻止浏览器默认滚动事件 */ +MeScroll.prototype.preventDefault = function(e) { + // 小程序不支持e.preventDefault, 已在wxs中禁止 + // app的bounce只能通过配置pages.json的style.app-plus.bounce为"none"来禁止, 或使用renderjs禁止 + // cancelable:是否可以被禁用; defaultPrevented:是否已经被禁用 + if (e && e.cancelable && !e.defaultPrevented) e.preventDefault() +} \ No newline at end of file diff --git a/uni_modules/mescroll-uni/components/mescroll-uni/mescroll-uni.vue b/uni_modules/mescroll-uni/components/mescroll-uni/mescroll-uni.vue new file mode 100644 index 0000000..f72f099 --- /dev/null +++ b/uni_modules/mescroll-uni/components/mescroll-uni/mescroll-uni.vue @@ -0,0 +1,477 @@ + + + + + + + + + + + + + + + diff --git a/uni_modules/mescroll-uni/components/mescroll-uni/mixins/mescroll-comp.js b/uni_modules/mescroll-uni/components/mescroll-uni/mixins/mescroll-comp.js new file mode 100644 index 0000000..abe7cd7 --- /dev/null +++ b/uni_modules/mescroll-uni/components/mescroll-uni/mixins/mescroll-comp.js @@ -0,0 +1,47 @@ +/** + * mescroll-body写在子组件时,需通过mescroll的mixins补充子组件缺少的生命周期 + */ +const MescrollCompMixin = { + // 因为子组件无onPageScroll和onReachBottom的页面生命周期,需在页面传递进到子组件 (一级) + onPageScroll(e) { + this.handlePageScroll(e) + }, + onReachBottom() { + this.handleReachBottom() + }, + // 当down的native: true时, 还需传递此方法进到子组件 + onPullDownRefresh(){ + this.handlePullDownRefresh() + }, + data() { + return { + mescroll: { // mescroll-body写在子子子...组件的情况 (多级) + onPageScroll: e=>{ + this.handlePageScroll(e) + }, + onReachBottom: ()=>{ + this.handleReachBottom() + }, + onPullDownRefresh: ()=>{ + this.handlePullDownRefresh() + } + } + } + }, + methods:{ + handlePageScroll(e){ + let item = this.$refs["mescrollItem"]; + if(item && item.mescroll) item.mescroll.onPageScroll(e); + }, + handleReachBottom(){ + let item = this.$refs["mescrollItem"]; + if(item && item.mescroll) item.mescroll.onReachBottom(); + }, + handlePullDownRefresh(){ + let item = this.$refs["mescrollItem"]; + if(item && item.mescroll) item.mescroll.onPullDownRefresh(); + } + } +} + +export default MescrollCompMixin; diff --git a/uni_modules/mescroll-uni/components/mescroll-uni/mixins/mescroll-more-item.js b/uni_modules/mescroll-uni/components/mescroll-uni/mixins/mescroll-more-item.js new file mode 100644 index 0000000..102dd39 --- /dev/null +++ b/uni_modules/mescroll-uni/components/mescroll-uni/mixins/mescroll-more-item.js @@ -0,0 +1,66 @@ +/** + * mescroll-more-item的mixins, 仅在多个 mescroll-body 写在子组件时使用 (参考 mescroll-more 案例) + */ +const MescrollMoreItemMixin = { + // 支付宝小程序不支持props的mixin,需写在具体的页面中 + // #ifndef MP-ALIPAY || MP-DINGTALK + props:{ + i: Number, // 每个tab页的专属下标 + index: { // 当前tab的下标 + type: Number, + default(){ + return 0 + } + } + }, + // #endif + data() { + return { + downOption:{ + auto:false // 不自动加载 + }, + upOption:{ + auto:false // 不自动加载 + }, + isInit: false // 当前tab是否已初始化 + } + }, + watch:{ + // 监听下标的变化 + index(val){ + if (this.i === val && !this.isInit) this.mescrollTrigger() + } + }, + methods: { + // 以ref的方式初始化mescroll对象 (兼容字节跳动小程序) + mescrollInitByRef() { + if(!this.mescroll || !this.mescroll.resetUpScroll){ + // 字节跳动小程序编辑器不支持一个页面存在相同的ref, 多mescroll的ref需动态生成, 格式为'mescrollRef下标' + let mescrollRef = this.$refs.mescrollRef || this.$refs['mescrollRef'+this.i]; + if(mescrollRef) this.mescroll = mescrollRef.mescroll + } + }, + // mescroll组件初始化的回调,可获取到mescroll对象 (覆盖mescroll-mixins.js的mescrollInit, 为了标记isInit) + mescrollInit(mescroll) { + this.mescroll = mescroll; + this.mescrollInitByRef && this.mescrollInitByRef(); // 兼容字节跳动小程序 + // 自动加载当前tab的数据 + if(this.i === this.index){ + this.mescrollTrigger() + } + }, + // 主动触发加载 + mescrollTrigger(){ + this.isInit = true; // 标记为true + if (this.mescroll) { + if (this.mescroll.optDown.use) { + this.mescroll.triggerDownScroll(); + } else{ + this.mescroll.triggerUpScroll(); + } + } + } + } +} + +export default MescrollMoreItemMixin; diff --git a/uni_modules/mescroll-uni/components/mescroll-uni/mixins/mescroll-more.js b/uni_modules/mescroll-uni/components/mescroll-uni/mixins/mescroll-more.js new file mode 100644 index 0000000..76c8e6c --- /dev/null +++ b/uni_modules/mescroll-uni/components/mescroll-uni/mixins/mescroll-more.js @@ -0,0 +1,74 @@ +/** + * mescroll-body写在子组件时, 需通过mescroll的mixins补充子组件缺少的生命周期 + */ +const MescrollMoreMixin = { + data() { + return { + tabIndex: 0, // 当前tab下标 + mescroll: { // mescroll-body写在子子子...组件的情况 (多级) + onPageScroll: e=>{ + this.handlePageScroll(e) + }, + onReachBottom: ()=>{ + this.handleReachBottom() + }, + onPullDownRefresh: ()=>{ + this.handlePullDownRefresh() + } + } + } + }, + // 因为子组件无onPageScroll和onReachBottom的页面生命周期,需在页面传递进到子组件 + onPageScroll(e) { + this.handlePageScroll(e) + }, + onReachBottom() { + this.handleReachBottom() + }, + // 当down的native: true时, 还需传递此方法进到子组件 + onPullDownRefresh(){ + this.handlePullDownRefresh() + }, + methods:{ + handlePageScroll(e){ + let mescroll = this.getMescroll(this.tabIndex); + mescroll && mescroll.onPageScroll(e); + }, + handleReachBottom(){ + let mescroll = this.getMescroll(this.tabIndex); + mescroll && mescroll.onReachBottom(); + }, + handlePullDownRefresh(){ + let mescroll = this.getMescroll(this.tabIndex); + mescroll && mescroll.onPullDownRefresh(); + }, + // 根据下标获取对应子组件的mescroll + getMescroll(i){ + if(!this.mescrollItems) this.mescrollItems = []; + if(!this.mescrollItems[i]) { + // v-for中的refs + let vForItem = this.$refs["mescrollItem"]; + if(vForItem){ + this.mescrollItems[i] = vForItem[i] + }else{ + // 普通的refs,不可重复 + this.mescrollItems[i] = this.$refs["mescrollItem"+i]; + } + } + let item = this.mescrollItems[i] + return item ? item.mescroll : null + }, + // 切换tab,恢复滚动条位置 + tabChange(i){ + let mescroll = this.getMescroll(i); + if(mescroll){ + // 延时(比$nextTick靠谱一些),确保元素已渲染 + setTimeout(()=>{ + mescroll.scrollTo(mescroll.getScrollTop(),0) + },30) + } + } + } +} + +export default MescrollMoreMixin; diff --git a/uni_modules/mescroll-uni/components/mescroll-uni/wxs/mixins.js b/uni_modules/mescroll-uni/components/mescroll-uni/wxs/mixins.js new file mode 100644 index 0000000..34ffa3c --- /dev/null +++ b/uni_modules/mescroll-uni/components/mescroll-uni/wxs/mixins.js @@ -0,0 +1,109 @@ +// 定义在wxs (含renderjs) 逻辑层的数据和方法, 与视图层相互通信 +const WxsMixin = { + data() { + return { + // 传入wxs视图层的数据 (响应式) + wxsProp: { + optDown:{}, // 下拉刷新的配置 + scrollTop:0, // 滚动条的距离 + bodyHeight:0, // body的高度 + isDownScrolling:false, // 是否正在下拉刷新中 + isUpScrolling:false, // 是否正在上拉加载中 + isScrollBody:true, // 是否为mescroll-body滚动 + isUpBoth:true, // 上拉加载时,是否同时可以下拉刷新 + t: 0 // 数据更新的标记 (只有数据更新了,才会触发wxs的Observer) + }, + + // 标记调用wxs视图层的方法 + callProp: { + callType: '', // 方法名 + t: 0 // 数据更新的标记 (只有数据更新了,才会触发wxs的Observer) + }, + + // 不用wxs的平台使用此处的wxsBiz对象,抹平wxs的写法 (微信小程序和APP使用的wxsBiz对象是./wxs/wxs.wxs) + // #ifndef MP-WEIXIN || MP-QQ || APP-PLUS || H5 + wxsBiz: { + //注册列表touchstart事件,用于下拉刷新 + touchstartEvent: e=> { + this.mescroll.touchstartEvent(e); + }, + //注册列表touchmove事件,用于下拉刷新 + touchmoveEvent: e=> { + this.mescroll.touchmoveEvent(e); + }, + //注册列表touchend事件,用于下拉刷新 + touchendEvent: e=> { + this.mescroll.touchendEvent(e); + }, + propObserver(){}, // 抹平wxs的写法 + callObserver(){} // 抹平wxs的写法 + }, + // #endif + + // 不用renderjs的平台使用此处的renderBiz对象,抹平renderjs的写法 (app 和 h5 使用的renderBiz对象是./wxs/renderjs.js) + // #ifndef APP-PLUS || H5 + renderBiz: { + propObserver(){} // 抹平renderjs的写法 + } + // #endif + } + }, + methods: { + // wxs视图层调用逻辑层的回调 + wxsCall(msg){ + if(msg.type === 'setWxsProp'){ + // 更新wxsProp数据 (值改变才触发更新) + this.wxsProp = { + optDown: this.mescroll.optDown, + scrollTop: this.mescroll.getScrollTop(), + bodyHeight: this.mescroll.getBodyHeight(), + isDownScrolling: this.mescroll.isDownScrolling, + isUpScrolling: this.mescroll.isUpScrolling, + isUpBoth: this.mescroll.optUp.isBoth, + isScrollBody:this.mescroll.isScrollBody, + t: Date.now() + } + }else if(msg.type === 'setLoadType'){ + // 设置inOffset,outOffset的状态 + this.downLoadType = msg.downLoadType + // 状态挂载到mescroll对象, 以便在其他组件中使用, 比如中 + this.$set(this.mescroll, 'downLoadType', this.downLoadType) + // 重置是否加载成功的状态 + this.$set(this.mescroll, 'isDownEndSuccess', null) + }else if(msg.type === 'triggerDownScroll'){ + // 主动触发下拉刷新 + this.mescroll.triggerDownScroll(); + }else if(msg.type === 'endDownScroll'){ + // 结束下拉刷新 + this.mescroll.endDownScroll(); + }else if(msg.type === 'triggerUpScroll'){ + // 主动触发上拉加载 + this.mescroll.triggerUpScroll(true); + } + } + }, + mounted() { + // #ifdef MP-WEIXIN || MP-QQ || APP-PLUS || H5 + // 配置主动触发wxs显示加载进度的回调 + this.mescroll.optDown.afterLoading = ()=>{ + this.callProp = {callType: "showLoading", t: Date.now()} // 触发wxs的方法 (值改变才触发更新) + } + // 配置主动触发wxs隐藏加载进度的回调 + this.mescroll.optDown.afterEndDownScroll = ()=>{ + this.callProp = {callType: "endDownScroll", t: Date.now()} // 触发wxs的方法 (值改变才触发更新) + let delay = 300 + (this.mescroll.optDown.beforeEndDelay || 0) + setTimeout(()=>{ + if(this.downLoadType === 4 || this.downLoadType === 0){ + this.callProp = {callType: "clearTransform", t: Date.now()} // 触发wxs的方法 (值改变才触发更新) + } + // 状态挂载到mescroll对象, 以便在其他组件中使用, 比如中 + this.$set(this.mescroll, 'downLoadType', this.downLoadType) + }, delay) + } + // 初始化wxs的数据 + this.wxsCall({type: 'setWxsProp'}) + // #endif + } +} + +export default WxsMixin; diff --git a/uni_modules/mescroll-uni/components/mescroll-uni/wxs/renderjs.js b/uni_modules/mescroll-uni/components/mescroll-uni/wxs/renderjs.js new file mode 100644 index 0000000..207f388 --- /dev/null +++ b/uni_modules/mescroll-uni/components/mescroll-uni/wxs/renderjs.js @@ -0,0 +1,92 @@ +// 使用renderjs直接操作window对象,实现动态控制app和h5的bounce +// bounce: iOS橡皮筋,Android半月弧,h5浏览器下拉背景等效果 (下拉刷新时禁止) +// https://uniapp.dcloud.io/frame?id=renderjs + +// 与wxs的me实例一致 +var me = {} + +// 初始化window对象的touch事件 (仅初始化一次) +if(window && !window.$mescrollRenderInit){ + window.$mescrollRenderInit = true + + + window.addEventListener('touchstart', function(e){ + if (me.disabled()) return; + me.startPoint = me.getPoint(e); // 记录起点 + }, {passive: true}) + + + window.addEventListener('touchmove', function(e){ + if (me.disabled()) return; + if (me.getScrollTop() > 0) return; // 需在顶部下拉,才禁止bounce + + var curPoint = me.getPoint(e); // 当前点 + var moveY = curPoint.y - me.startPoint.y; // 和起点比,移动的距离,大于0向下拉,小于0向上拉 + // 向下拉 + if (moveY > 0) { + // 可下拉的条件 + if (!me.isDownScrolling && !me.optDown.isLock && (!me.isUpScrolling || (me.isUpScrolling && me.isUpBoth))) { + + // 只有touch在mescroll的view上面,才禁止bounce + var el = e.target; + var isMescrollTouch = false; + while (el && el.tagName && el.tagName !== 'UNI-PAGE-BODY' && el.tagName != "BODY") { + var cls = el.classList; + if (cls && cls.contains('mescroll-render-touch')) { + isMescrollTouch = true + break; + } + el = el.parentNode; // 继续检查其父元素 + } + // 禁止bounce (不会对swiper和iOS侧滑返回造成影响) + if (isMescrollTouch && e.cancelable && !e.defaultPrevented) e.preventDefault(); + } + } + }, {passive: false}) +} + +/* 获取滚动条的位置 */ +me.getScrollTop = function() { + return me.scrollTop || 0 +} + +/* 是否禁用下拉刷新 */ +me.disabled = function(){ + return !me.optDown || !me.optDown.use || me.optDown.native +} + +/* 根据点击滑动事件获取第一个手指的坐标 */ +me.getPoint = function(e) { + if (!e) { + return {x: 0,y: 0} + } + if (e.touches && e.touches[0]) { + return {x: e.touches[0].pageX,y: e.touches[0].pageY} + } else if (e.changedTouches && e.changedTouches[0]) { + return {x: e.changedTouches[0].pageX,y: e.changedTouches[0].pageY} + } else { + return {x: e.clientX,y: e.clientY} + } +} + +/** + * 监听逻辑层数据的变化 (实时更新数据) + */ +function propObserver(wxsProp) { + me.optDown = wxsProp.optDown + me.scrollTop = wxsProp.scrollTop + me.isDownScrolling = wxsProp.isDownScrolling + me.isUpScrolling = wxsProp.isUpScrolling + me.isUpBoth = wxsProp.isUpBoth +} + +/* 导出模块 */ +const renderBiz = { + data() { + return { + propObserver: propObserver, + } + } +} + +export default renderBiz; \ No newline at end of file diff --git a/uni_modules/mescroll-uni/components/mescroll-uni/wxs/wxs.wxs b/uni_modules/mescroll-uni/components/mescroll-uni/wxs/wxs.wxs new file mode 100644 index 0000000..3fb4ad9 --- /dev/null +++ b/uni_modules/mescroll-uni/components/mescroll-uni/wxs/wxs.wxs @@ -0,0 +1,268 @@ +// 使用wxs处理交互动画, 提高性能, 同时避免小程序bounce对下拉刷新的影响 +// https://uniapp.dcloud.io/frame?id=wxs +// https://developers.weixin.qq.com/miniprogram/dev/framework/view/interactive-animation.html + +// 模拟mescroll实例, 与mescroll.js的写法尽量保持一致 +var me = {} + +// ------ 自定义下拉刷新动画 start ------ + +/* 下拉过程中的回调,滑动过程一直在执行 (rate<1为inOffset; rate>1为outOffset) */ +me.onMoving = function (ins, rate, downHight){ + ins.requestAnimationFrame(function () { + ins.selectComponent('.mescroll-wxs-content').setStyle({ + 'will-change': 'transform', // 可解决下拉过程中, image和swiper脱离文档流的问题 + 'transform': 'translateY(' + downHight + 'px)', + 'transition': '' + }) + // 环形进度条 + var progress = ins.selectComponent('.mescroll-wxs-progress') + progress && progress.setStyle({transform: 'rotate(' + 360 * rate + 'deg)'}) + }) +} + +/* 显示下拉刷新进度 */ +me.showLoading = function (ins){ + me.downHight = me.optDown.offset + ins.requestAnimationFrame(function () { + ins.selectComponent('.mescroll-wxs-content').setStyle({ + 'will-change': 'auto', + 'transform': 'translateY(' + me.downHight + 'px)', + 'transition': 'transform 300ms' + }) + }) +} + +/* 结束下拉 */ +me.endDownScroll = function (ins){ + me.downHight = 0; + me.isDownScrolling = false; + ins.requestAnimationFrame(function () { + ins.selectComponent('.mescroll-wxs-content').setStyle({ + 'will-change': 'auto', + 'transform': 'translateY(0)', // 不可以写空串,否则scroll-view渲染不完整 (延时350ms会调clearTransform置空) + 'transition': 'transform 300ms' + }) + }) +} + +/* 结束下拉动画执行完毕后, 清除transform和transition, 避免对列表内容样式造成影响, 如: h5的list-msg示例下拉进度条漏出来等 */ +me.clearTransform = function (ins){ + ins.requestAnimationFrame(function () { + ins.selectComponent('.mescroll-wxs-content').setStyle({ + 'will-change': '', + 'transform': '', + 'transition': '' + }) + }) +} + +// ------ 自定义下拉刷新动画 end ------ + +/** + * 监听逻辑层数据的变化 (实时更新数据) + */ +function propObserver(wxsProp) { + me.optDown = wxsProp.optDown + me.scrollTop = wxsProp.scrollTop + me.bodyHeight = wxsProp.bodyHeight + me.isDownScrolling = wxsProp.isDownScrolling + me.isUpScrolling = wxsProp.isUpScrolling + me.isUpBoth = wxsProp.isUpBoth + me.isScrollBody = wxsProp.isScrollBody + me.startTop = wxsProp.scrollTop // 及时更新touchstart触发的startTop, 避免scroll-view快速惯性滚动到顶部取值不准确 +} + +/** + * 监听逻辑层数据的变化 (调用wxs的方法) + */ +function callObserver(callProp, oldValue, ins) { + if (me.disabled()) return; + if(callProp.callType){ + // 逻辑层(App Service)的style已失效,需在视图层(Webview)设置style + if(callProp.callType === 'showLoading'){ + me.showLoading(ins) + }else if(callProp.callType === 'endDownScroll'){ + me.endDownScroll(ins) + }else if(callProp.callType === 'clearTransform'){ + me.clearTransform(ins) + } + } +} + +/** + * touch事件 + */ +function touchstartEvent(e, ins) { + me.downHight = 0; // 下拉的距离 + me.startPoint = me.getPoint(e); // 记录起点 + me.startTop = me.getScrollTop(); // 记录此时的滚动条位置 + me.startAngle = 0; // 初始角度 + me.lastPoint = me.startPoint; // 重置上次move的点 + me.maxTouchmoveY = me.getBodyHeight() - me.optDown.bottomOffset; // 手指触摸的最大范围(写在touchstart避免body获取高度为0的情况) + me.inTouchend = false; // 标记不是touchend + + me.callMethod(ins, {type: 'setWxsProp'}) // 同步更新wxsProp的数据 (小程序是异步的,可能touchmove先执行,才到propObserver; h5和app是同步) +} + +function touchmoveEvent(e, ins) { + var isPrevent = true // false表示不往上冒泡,相当于调用了同时调用了stopPropagation和preventDefault (对小程序生效, h5和app无效) + + if (me.disabled()) return isPrevent; + + var scrollTop = me.getScrollTop(); // 当前滚动条的距离 + var curPoint = me.getPoint(e); // 当前点 + + var moveY = curPoint.y - me.startPoint.y; // 和起点比,移动的距离,大于0向下拉,小于0向上拉 + + // 向下拉 && 在顶部 + // mescroll-body,直接判定在顶部即可 + // scroll-view在滚动时不会触发touchmove,当触顶/底/左/右时,才会触发touchmove + // scroll-view滚动到顶部时,scrollTop不一定为0,也有可能大于0; 在iOS的APP中scrollTop可能为负数,不一定和startTop相等 + if (moveY > 0 && ( + (me.isScrollBody && scrollTop <= 0) + || + (!me.isScrollBody && (scrollTop <= 0 || (scrollTop <= me.optDown.startTop && scrollTop === me.startTop)) ) + )) { + // 可下拉的条件 + if (!me.inTouchend && !me.isDownScrolling && !me.optDown.isLock && (!me.isUpScrolling || (me.isUpScrolling && + me.isUpBoth))) { + + // 下拉的角度是否在配置的范围内 + if(!me.startAngle) me.startAngle = me.getAngle(me.lastPoint, curPoint); // 两点之间的角度,区间 [0,90] + if (me.startAngle < me.optDown.minAngle) return isPrevent; // 如果小于配置的角度,则不往下执行下拉刷新 + + // 如果手指的位置超过配置的距离,则提前结束下拉,避免Webview嵌套导致touchend无法触发 + if (me.maxTouchmoveY > 0 && curPoint.y >= me.maxTouchmoveY) { + me.inTouchend = true; // 标记执行touchend + touchendEvent(e, ins); // 提前触发touchend + return isPrevent; + } + + isPrevent = false // 小程序是return false + + var diff = curPoint.y - me.lastPoint.y; // 和上次比,移动的距离 (大于0向下,小于0向上) + + // 下拉距离 < 指定距离 + if (me.downHight < me.optDown.offset) { + if (me.movetype !== 1) { + me.movetype = 1; // 加入标记,保证只执行一次 + // me.optDown.inOffset && me.optDown.inOffset(me); // 进入指定距离范围内那一刻的回调,只执行一次 + me.callMethod(ins, {type: 'setLoadType', downLoadType: 1}) + me.isMoveDown = true; // 标记下拉区域高度改变,在touchend重置回来 + } + me.downHight += diff * me.optDown.inOffsetRate; // 越往下,高度变化越小 + + // 指定距离 <= 下拉距离 + } else { + if (me.movetype !== 2) { + me.movetype = 2; // 加入标记,保证只执行一次 + // me.optDown.outOffset && me.optDown.outOffset(me); // 下拉超过指定距离那一刻的回调,只执行一次 + me.callMethod(ins, {type: 'setLoadType', downLoadType: 2}) + me.isMoveDown = true; // 标记下拉区域高度改变,在touchend重置回来 + } + if (diff > 0) { // 向下拉 + me.downHight += diff * me.optDown.outOffsetRate; // 越往下,高度变化越小 + } else { // 向上收 + me.downHight += diff; // 向上收回高度,则向上滑多少收多少高度 + } + } + + me.downHight = Math.round(me.downHight) // 取整 + var rate = me.downHight / me.optDown.offset; // 下拉区域当前高度与指定距离的比值 + // me.optDown.onMoving && me.optDown.onMoving(me, rate, me.downHight); // 下拉过程中的回调,一直在执行 + me.onMoving(ins, rate, me.downHight) + } + } + + me.lastPoint = curPoint; // 记录本次移动的点 + + return isPrevent // false表示不往上冒泡,相当于调用了同时调用了stopPropagation和preventDefault (对小程序生效, h5和app无效) +} + +function touchendEvent(e, ins) { + // 如果下拉区域高度已改变,则需重置回来 + if (me.isMoveDown) { + if (me.downHight >= me.optDown.offset) { + // 符合触发刷新的条件 + me.downHight = me.optDown.offset; // 更新下拉区域高度 + // me.triggerDownScroll(); + me.callMethod(ins, {type: 'triggerDownScroll'}) + } else { + // 不符合的话 则重置 + me.downHight = 0; + // me.optDown.endDownScroll && me.optDown.endDownScroll(me); + me.callMethod(ins, {type: 'endDownScroll'}) + } + me.movetype = 0; + me.isMoveDown = false; + } else if (!me.isScrollBody && me.getScrollTop() === me.startTop) { // scroll-view到顶/左/右/底的滑动事件 + var isScrollUp = me.getPoint(e).y - me.startPoint.y < 0; // 和起点比,移动的距离,大于0向下拉,小于0向上拉 + // 上滑 + if (isScrollUp) { + // 需检查滑动的角度 + var angle = me.getAngle(me.getPoint(e), me.startPoint); // 两点之间的角度,区间 [0,90] + if (angle > 80) { + // 检查并触发上拉 + // me.triggerUpScroll(true); + me.callMethod(ins, {type: 'triggerUpScroll'}) + } + } + } + me.callMethod(ins, {type: 'setWxsProp'}) // 同步更新wxsProp的数据 (小程序是异步的,可能touchmove先执行,才到propObserver; h5和app是同步) +} + +/* 是否禁用下拉刷新 */ +me.disabled = function(){ + return !me.optDown || !me.optDown.use || me.optDown.native +} + +/* 根据点击滑动事件获取第一个手指的坐标 */ +me.getPoint = function(e) { + if (!e) { + return {x: 0,y: 0} + } + if (e.touches && e.touches[0]) { + return {x: e.touches[0].pageX,y: e.touches[0].pageY} + } else if (e.changedTouches && e.changedTouches[0]) { + return {x: e.changedTouches[0].pageX,y: e.changedTouches[0].pageY} + } else { + return {x: e.clientX,y: e.clientY} + } +} + +/* 计算两点之间的角度: 区间 [0,90]*/ +me.getAngle = function (p1, p2) { + var x = Math.abs(p1.x - p2.x); + var y = Math.abs(p1.y - p2.y); + var z = Math.sqrt(x * x + y * y); + var angle = 0; + if (z !== 0) { + angle = Math.asin(y / z) / Math.PI * 180; + } + return angle +} + +/* 获取滚动条的位置 */ +me.getScrollTop = function() { + return me.scrollTop || 0 +} + +/* 获取body的高度 */ +me.getBodyHeight = function() { + return me.bodyHeight || 0; +} + +/* 调用逻辑层的方法 */ +me.callMethod = function(ins, param) { + if(ins) ins.callMethod('wxsCall', param) +} + +/* 导出模块 */ +module.exports = { + propObserver: propObserver, + callObserver: callObserver, + touchstartEvent: touchstartEvent, + touchmoveEvent: touchmoveEvent, + touchendEvent: touchendEvent +} \ No newline at end of file diff --git a/uni_modules/mescroll-uni/package.json b/uni_modules/mescroll-uni/package.json new file mode 100644 index 0000000..819c1bf --- /dev/null +++ b/uni_modules/mescroll-uni/package.json @@ -0,0 +1,80 @@ +{ + "id": "mescroll-uni", + "displayName": "【wxs+renderjs实现】高性能的下拉刷新上拉加载组件", + "version": "1.3.7", + "description": "支持uni-app的下拉刷新和上拉加载的组件,支持原生页面和局部区域滚动,支持国际化", + "keywords": [ + "下拉刷新", + "上拉加载", + "翻页", + "分页", + "wxs" +], + "repository": "https://github.com/mescroll/mescroll", + "engines": { + "HBuilderX": "^3.1.0" + }, + "dcloudext": { + "category": [ + "前端组件", + "通用组件" + ], + "sale": { + "regular": { + "price": "0.00" + }, + "sourcecode": { + "price": "0.00" + } + }, + "contact": { + "qq": "" + }, + "declaration": { + "ads": "无", + "data": "无", + "permissions": "无" + }, + "npmurl": "https://www.npmjs.com/package/mescroll-uni" + }, + "uni_modules": { + "dependencies": [], + "encrypt": [], + "platforms": { + "cloud": { + "tcb": "y", + "aliyun": "y" + }, + "client": { + "App": { + "app-vue": "y", + "app-nvue": "y" + }, + "H5-mobile": { + "Safari": "y", + "Android Browser": "y", + "微信浏览器(Android)": "y", + "QQ浏览器(Android)": "y" + }, + "H5-pc": { + "Chrome": "y", + "IE": "y", + "Edge": "y", + "Firefox": "y", + "Safari": "y" + }, + "小程序": { + "微信": "y", + "阿里": "y", + "百度": "y", + "字节跳动": "y", + "QQ": "y" + }, + "快应用": { + "华为": "y", + "联盟": "y" + } + } + } + } +} \ No newline at end of file diff --git a/uni_modules/mescroll-uni/readme.md b/uni_modules/mescroll-uni/readme.md new file mode 100644 index 0000000..79f3ff8 --- /dev/null +++ b/uni_modules/mescroll-uni/readme.md @@ -0,0 +1,45 @@ +## mescroll --【wxs+renderjs实现】高性能的下拉刷新上拉加载组件 +1. mescroll的uni版本 是专门用在uni-app的下拉刷新和上拉加载的组件 + +2. mescroll的uni版本 继承了mescroll.js的实用功能: 自动处理分页, 自动控制无数据, 空布局提示, 回到顶部按钮 .. + +3. mescroll的uni版本 丰富的案例, 自由灵活的api, 超详细的注释, 可让您快速自定义真正属于自己的下拉上拉组件 + +
+ + +## 最新文档(1.3.7版本): https://www.mescroll.com/uni.html +2021-04-13 by 小瑾同学 (文档可能会有缓存,建议打开时刷新一下) + + +## 1.3.5版本已调整为[uni_modules](https://uniapp.dcloud.io/uni_modules) +uni_modules版本的mescroll-body 和 mescroll-empty 支持 [easycom规范](https://uniapp.dcloud.io/collocation/pages?id=easycom) +所以 main.js 无需再为mescroll-body注册全局组件 +所以个别页面要单独使用 mescroll-empty , 也无需手动注册 +#### 1.3.5以前的用户升级为uni_modules版本: +``` +1. 删除原来的 @/components/mescroll-uni 组件 +2. 删除 main.js 注册的 mescroll 组件 +3. 从插件市场导入最新mescroll组件 (1.3.5+uni_modules版本) +4. 全局搜索 '@/components/mescroll-uni/' 替换为 '@/uni_modules/mescroll-uni/components/mescroll-uni/' +5. mescroll-empty遵循easycom规范, 若某些页面单独使用 'mescroll-empty.vue', 可删除手动导入的代码 +``` + +## 近期已更新优化的内容: +1. 微信小程序, app, h5使用高性能wxs和renderjs, 下拉刷新更流畅丝滑, 尤其能明显解决Android小程序下拉卡顿的问题 +2. 新增`入门极简`示例, 国际化`mescroll-i18n.vue`示例, 轮播吸顶菜单`mescroll-swiper-sticky.vue`示例 +3. 新增 "局部区域滚动" 的案例: mescroll-body-part.vue 和 mescroll-uni-part.vue +4. 新增 me-video 视频组件, 解决APP端视频下拉悬浮错位的问题, 参考 mescroll-options.vue 示例 +5. 新增 me-tabs 组件,tabs支持水平滑动; 优化mescroll-more和mescroll-swiper的案例, 顶部tab支持水平滑动 +6. 吸顶悬浮提供了原生sticky和监听滚动条实现的示例: sticky.vue 和 sticky-scroll.vue (推荐使用sticky样式实现) +7. mescroll.scrollTo(y)的y支持css选择器, 包括跨自定义组件的后代选择器, 支持滚动到子组件的view (参考 mescroll-options.vue) +8. topbar 顶部是否预留状态栏的高度, 默认false; 还可支持设置状态栏背景: 如 '#ffff00', 'url(xxx) 0 0/100% 100%', 'linear-gradient(xx)' +9. down.bgColor 和 up.bgColor 加载区域的背景,不仅支持色值, 而且还是支持背景图和渐变: 如 'url(xxx) 0 0/100% 100%', 'linear-gradient(xx)' +10. topbar,bgColor支持一行代码定义background: [https://www.runoob.com/cssref/css3-pr-background.html](https://www.runoob.com/cssref/css3-pr-background.html) +
+
+查看更多 ... + +
+ +#### mescroll不支持nvue,也暂无支持的计划哈,so sorry~ \ No newline at end of file diff --git a/uni_modules/niu-ui/changelog.md b/uni_modules/niu-ui/changelog.md new file mode 100644 index 0000000..e69de29 diff --git a/uni_modules/niu-ui/components/niu-input/niu-input.vue b/uni_modules/niu-ui/components/niu-input/niu-input.vue new file mode 100644 index 0000000..5783908 --- /dev/null +++ b/uni_modules/niu-ui/components/niu-input/niu-input.vue @@ -0,0 +1,253 @@ + + + + + diff --git a/uni_modules/niu-ui/components/niu-navbar/niu-navbar.vue b/uni_modules/niu-ui/components/niu-navbar/niu-navbar.vue new file mode 100644 index 0000000..652c4c1 --- /dev/null +++ b/uni_modules/niu-ui/components/niu-navbar/niu-navbar.vue @@ -0,0 +1,504 @@ + + + + + diff --git a/uni_modules/niu-ui/components/niu-sendcode/niu-sendcode.vue b/uni_modules/niu-ui/components/niu-sendcode/niu-sendcode.vue new file mode 100644 index 0000000..bcf0dc0 --- /dev/null +++ b/uni_modules/niu-ui/components/niu-sendcode/niu-sendcode.vue @@ -0,0 +1,102 @@ + + + + + diff --git a/uni_modules/niu-ui/extensions/index.js b/uni_modules/niu-ui/extensions/index.js new file mode 100644 index 0000000..e69de29 diff --git a/uni_modules/niu-ui/index.js b/uni_modules/niu-ui/index.js new file mode 100644 index 0000000..46de24b --- /dev/null +++ b/uni_modules/niu-ui/index.js @@ -0,0 +1,13 @@ +export default { + install(Vue) { + const obs = Vue.observable({ + $Top: 0, + setTop(value) { + this.$Top = value; + }, + }) + Vue.prototype.$n = { + $obs: obs + } + } +} diff --git a/uni_modules/niu-ui/package.json b/uni_modules/niu-ui/package.json new file mode 100644 index 0000000..00e3648 --- /dev/null +++ b/uni_modules/niu-ui/package.json @@ -0,0 +1,77 @@ +{ + "id": "niu-ui", + "displayName": "niu-ui", + "version": "1.0.0", + "description": "niu-ui", + "keywords": [ + "niu-ui" + ], + "main": "index.js", + "repository": "", + "engines": { + "HBuilderX": "^3.1.0" + }, + "dcloudext": { + "category": [ + "前端组件", + "通用组件" + ], + "sale": { + "regular": { + "price": "0.00" + }, + "sourcecode": { + "price": "0.00" + } + }, + "contact": { + "qq": "" + }, + "declaration": { + "ads": "", + "data": "", + "permissions": "" + }, + "npmurl": "" + }, + "uni_modules": { + "dependencies": [], + "encrypt": [], + "platforms": { + "cloud": { + "tcb": "u", + "aliyun": "u" + }, + "client": { + "App": { + "app-vue": "u", + "app-nvue": "u" + }, + "H5-mobile": { + "Safari": "u", + "Android Browser": "u", + "微信浏览器(Android)": "u", + "QQ浏览器(Android)": "u" + }, + "H5-pc": { + "Chrome": "u", + "IE": "u", + "Edge": "u", + "Firefox": "u", + "Safari": "u" + }, + "小程序": { + "微信": "u", + "阿里": "u", + "百度": "u", + "字节跳动": "u", + "QQ": "u" + }, + "快应用": { + "华为": "u", + "联盟": "u" + } + } + } + } +} diff --git a/uni_modules/niu-ui/readme.md b/uni_modules/niu-ui/readme.md new file mode 100644 index 0000000..e1cdd64 --- /dev/null +++ b/uni_modules/niu-ui/readme.md @@ -0,0 +1 @@ +# niu-ui \ No newline at end of file diff --git a/unpackage/dist/dev/.automator/mp-weixin/.automator.json b/unpackage/dist/dev/.automator/mp-weixin/.automator.json new file mode 100644 index 0000000..e69de29 diff --git a/unpackage/dist/dev/.sourcemap/mp-weixin/common/main.js.map b/unpackage/dist/dev/.sourcemap/mp-weixin/common/main.js.map new file mode 100644 index 0000000..b97783d --- /dev/null +++ b/unpackage/dist/dev/.sourcemap/mp-weixin/common/main.js.map @@ -0,0 +1 @@ +{"version":3,"sources":["uni-app:///main.js",null,"webpack:///D:/1文件/11111郝/niu-ui/App.vue?d15b","uni-app:///App.vue","webpack:///D:/1文件/11111郝/niu-ui/App.vue?9d47","webpack:///D:/1文件/11111郝/niu-ui/App.vue?a4ea"],"names":["Vue","config","productionTip","App","mpType","prototype","$Top","value","$n","observable","state","setTop","app","$mount"],"mappings":";;;;;;;;;iDAAA,wCAAmB;AACnB,uE;;AAEAA,aAAIC,MAAJ,CAAWC,aAAX,GAA2B,KAA3B;;AAEAC,aAAIC,MAAJ,GAAa,KAAb;;AAEAJ,aAAIK,SAAJ,CAAcC,IAAd,GAAqB;AACpBC,OAAK,EAAE,CADa,EAArB;;AAGAP,aAAIK,SAAJ,CAAcG,EAAd,GAAkBR,aAAIS,UAAJ,CAAe;AAC7BC,OAAK,EAAE;AACHJ,QAAI,EAAE,CADH,EADsB;;AAI7BK,QAJ6B,kBAItBJ,KAJsB,EAIhB;AACT,SAAKG,KAAL,CAAWJ,IAAX,GAAkBC,KAAlB;AACH,GAN4B,EAAf,CAAlB;;;AASA,IAAMK,GAAG,GAAG,IAAIZ,YAAJ;AACLG,YADK,EAAZ;;AAGA,UAAAS,GAAG,EAACC,MAAJ,G;;;;;;;;;;;;;;;;ACtBA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AACuD;AACL;AACc;;;AAGhE;AACsK;AACtK,gBAAgB,mLAAU;AAC1B,EAAE,yEAAM;AACR;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACe,gF;;;;;;;;;;;ACvBf;AAAA;AAAA;AAAA;AAA+mB,CAAgB,2oBAAG,EAAC,C;;;;;;;;;;;;ACCnoB;AACA;AACA;AACA,GAHA;AAIA;AACA;AACA,GANA;AAOA;AACA;AACA,GATA,E;;;;;;;;;;;ACDA;AAAA;AAAA;AAAA;AAAgoC,CAAgB,6mCAAG,EAAC,C;;;;;;;;;;ACAppC;AACA,OAAO,KAAU,EAAE,kBAKd","file":"common/main.js","sourcesContent":["import 'uni-pages';import Vue from 'vue'\r\nimport App from './App'\r\n\r\nVue.config.productionTip = false\r\n\r\nApp.mpType = 'app'\r\n\r\nVue.prototype.$Top = {\r\n\tvalue: 0\r\n};\r\nVue.prototype.$n= Vue.observable({ \r\n state: {\r\n $Top: 0\r\n },\r\n setTop(value){\r\n this.state.$Top = value;\r\n },\r\n})\r\n\r\nconst app = new Vue({\r\n ...App\r\n})\r\napp.$mount()","var render, staticRenderFns, recyclableRender, components\nvar renderjs\nimport script from \"./App.vue?vue&type=script&lang=js&\"\nexport * from \"./App.vue?vue&type=script&lang=js&\"\nimport style0 from \"./App.vue?vue&type=style&index=0&lang=scss&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../1soft/HBuilderX/plugins/uniapp-cli/node_modules/@dcloudio/vue-cli-plugin-uni/packages/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null,\n false,\n components,\n renderjs\n)\n\ncomponent.options.__file = \"App.vue\"\nexport default component.exports","import mod from \"-!../../../1soft/HBuilderX/plugins/uniapp-cli/node_modules/babel-loader/lib/index.js!../../../1soft/HBuilderX/plugins/uniapp-cli/node_modules/@dcloudio/vue-cli-plugin-uni/packages/webpack-preprocess-loader/index.js??ref--12-1!../../../1soft/HBuilderX/plugins/uniapp-cli/node_modules/@dcloudio/webpack-uni-mp-loader/lib/script.js!../../../1soft/HBuilderX/plugins/uniapp-cli/node_modules/@dcloudio/vue-cli-plugin-uni/packages/vue-loader/lib/index.js??vue-loader-options!../../../1soft/HBuilderX/plugins/uniapp-cli/node_modules/@dcloudio/webpack-uni-mp-loader/lib/style.js!./App.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../1soft/HBuilderX/plugins/uniapp-cli/node_modules/babel-loader/lib/index.js!../../../1soft/HBuilderX/plugins/uniapp-cli/node_modules/@dcloudio/vue-cli-plugin-uni/packages/webpack-preprocess-loader/index.js??ref--12-1!../../../1soft/HBuilderX/plugins/uniapp-cli/node_modules/@dcloudio/webpack-uni-mp-loader/lib/script.js!../../../1soft/HBuilderX/plugins/uniapp-cli/node_modules/@dcloudio/vue-cli-plugin-uni/packages/vue-loader/lib/index.js??vue-loader-options!../../../1soft/HBuilderX/plugins/uniapp-cli/node_modules/@dcloudio/webpack-uni-mp-loader/lib/style.js!./App.vue?vue&type=script&lang=js&\"","\r\n\r\n\n","import mod from \"-!../../../1soft/HBuilderX/plugins/uniapp-cli/node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../../1soft/HBuilderX/plugins/uniapp-cli/node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../../1soft/HBuilderX/plugins/uniapp-cli/node_modules/@dcloudio/vue-cli-plugin-uni/packages/vue-loader/lib/loaders/stylePostLoader.js!../../../1soft/HBuilderX/plugins/uniapp-cli/node_modules/@dcloudio/vue-cli-plugin-uni/packages/webpack-preprocess-loader/index.js??ref--8-oneOf-1-2!../../../1soft/HBuilderX/plugins/uniapp-cli/node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-3!../../../1soft/HBuilderX/plugins/uniapp-cli/node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-4!../../../1soft/HBuilderX/plugins/uniapp-cli/node_modules/@dcloudio/vue-cli-plugin-uni/packages/webpack-preprocess-loader/index.js??ref--8-oneOf-1-5!../../../1soft/HBuilderX/plugins/uniapp-cli/node_modules/@dcloudio/vue-cli-plugin-uni/packages/vue-loader/lib/index.js??vue-loader-options!../../../1soft/HBuilderX/plugins/uniapp-cli/node_modules/@dcloudio/webpack-uni-mp-loader/lib/style.js!./App.vue?vue&type=style&index=0&lang=scss&\"; export default mod; export * from \"-!../../../1soft/HBuilderX/plugins/uniapp-cli/node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../../1soft/HBuilderX/plugins/uniapp-cli/node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../../1soft/HBuilderX/plugins/uniapp-cli/node_modules/@dcloudio/vue-cli-plugin-uni/packages/vue-loader/lib/loaders/stylePostLoader.js!../../../1soft/HBuilderX/plugins/uniapp-cli/node_modules/@dcloudio/vue-cli-plugin-uni/packages/webpack-preprocess-loader/index.js??ref--8-oneOf-1-2!../../../1soft/HBuilderX/plugins/uniapp-cli/node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-3!../../../1soft/HBuilderX/plugins/uniapp-cli/node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-4!../../../1soft/HBuilderX/plugins/uniapp-cli/node_modules/@dcloudio/vue-cli-plugin-uni/packages/webpack-preprocess-loader/index.js??ref--8-oneOf-1-5!../../../1soft/HBuilderX/plugins/uniapp-cli/node_modules/@dcloudio/vue-cli-plugin-uni/packages/vue-loader/lib/index.js??vue-loader-options!../../../1soft/HBuilderX/plugins/uniapp-cli/node_modules/@dcloudio/webpack-uni-mp-loader/lib/style.js!./App.vue?vue&type=style&index=0&lang=scss&\"","// extracted by mini-css-extract-plugin\n if(module.hot) {\n // 1627288169940\n var cssReload = require(\"D:/1soft/HBuilderX/plugins/uniapp-cli/node_modules/mini-css-extract-plugin/dist/hmr/hotModuleReplacement.js\")(module.id, {\"hmr\":true,\"publicPath\":\"../../\",\"locals\":false});\n module.hot.dispose(cssReload);\n module.hot.accept(undefined, cssReload);\n }\n "],"sourceRoot":""} \ No newline at end of file diff --git a/unpackage/dist/dev/.sourcemap/mp-weixin/common/runtime.js.map b/unpackage/dist/dev/.sourcemap/mp-weixin/common/runtime.js.map new file mode 100644 index 0000000..260107f --- /dev/null +++ b/unpackage/dist/dev/.sourcemap/mp-weixin/common/runtime.js.map @@ -0,0 +1 @@ +{"version":3,"sources":[null],"names":[],"mappings":";QAAA;QACA;QACA;QACA;QACA;;QAEA;QACA;QACA;QACA,QAAQ,oBAAoB;QAC5B;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;;QAEA;QACA;QACA;;QAEA;QACA;;QAEA;QACA;QACA;QACA;QACA;QACA,iBAAiB,4BAA4B;QAC7C;QACA;QACA,kBAAkB,2BAA2B;QAC7C;QACA;QACA;QACA;QACA;QACA;QACA;QACA;;QAEA;QACA;;QAEA;QACA;;QAEA;QACA;QACA;QACA;;QAEA;QACA;QACA;QACA;QACA;QACA;;QAEA;;QAEA;QACA;QACA;QACA;;QAEA;QACA;;QAEA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;;QAEA;QACA;;QAEA;QACA;;QAEA;QACA;QACA;;QAEA;QACA;QACA;QACA;;;QAGA;QACA,oBAAoB;QACpB;QACA;QACA;QACA,uBAAuB,okBAAokB;QAC3lB;QACA;QACA,mBAAmB,6BAA6B;QAChD;QACA;QACA;QACA;QACA;QACA,mBAAmB,8BAA8B;QACjD;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;;QAEA;QACA;QACA,KAAK;QACL;QACA,KAAK;QACL;;QAEA;;QAEA;QACA,iCAAiC;;QAEjC;QACA;QACA;QACA,KAAK;QACL;QACA;QACA;QACA,MAAM;QACN;;QAEA;QACA;QACA;;QAEA;QACA;QACA;QACA;QACA;QACA;;QAEA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA,wBAAwB,kCAAkC;QAC1D,MAAM;QACN;QACA;QACA;QACA;QACA;QACA;;QAEA;QACA;;QAEA;QACA;;QAEA;QACA;QACA;QACA,0CAA0C,gCAAgC;QAC1E;QACA;;QAEA;QACA;QACA;QACA,wDAAwD,kBAAkB;QAC1E;QACA,iDAAiD,cAAc;QAC/D;;QAEA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA,yCAAyC,iCAAiC;QAC1E,gHAAgH,mBAAmB,EAAE;QACrI;QACA;;QAEA;QACA;QACA;QACA,2BAA2B,0BAA0B,EAAE;QACvD,iCAAiC,eAAe;QAChD;QACA;QACA;;QAEA;QACA,sDAAsD,+DAA+D;;QAErH;QACA;;QAEA;QACA,0CAA0C,oBAAoB,WAAW;;QAEzE;QACA;QACA;QACA;QACA,gBAAgB,uBAAuB;QACvC;;;QAGA;QACA","file":"common/runtime.js","sourcesContent":[" \t// install a JSONP callback for chunk loading\n \tfunction webpackJsonpCallback(data) {\n \t\tvar chunkIds = data[0];\n \t\tvar moreModules = data[1];\n \t\tvar executeModules = data[2];\n\n \t\t// add \"moreModules\" to the modules object,\n \t\t// then flag all \"chunkIds\" as loaded and fire callback\n \t\tvar moduleId, chunkId, i = 0, resolves = [];\n \t\tfor(;i < chunkIds.length; i++) {\n \t\t\tchunkId = chunkIds[i];\n \t\t\tif(Object.prototype.hasOwnProperty.call(installedChunks, chunkId) && installedChunks[chunkId]) {\n \t\t\t\tresolves.push(installedChunks[chunkId][0]);\n \t\t\t}\n \t\t\tinstalledChunks[chunkId] = 0;\n \t\t}\n \t\tfor(moduleId in moreModules) {\n \t\t\tif(Object.prototype.hasOwnProperty.call(moreModules, moduleId)) {\n \t\t\t\tmodules[moduleId] = moreModules[moduleId];\n \t\t\t}\n \t\t}\n \t\tif(parentJsonpFunction) parentJsonpFunction(data);\n\n \t\twhile(resolves.length) {\n \t\t\tresolves.shift()();\n \t\t}\n\n \t\t// add entry modules from loaded chunk to deferred list\n \t\tdeferredModules.push.apply(deferredModules, executeModules || []);\n\n \t\t// run deferred modules when all chunks ready\n \t\treturn checkDeferredModules();\n \t};\n \tfunction checkDeferredModules() {\n \t\tvar result;\n \t\tfor(var i = 0; i < deferredModules.length; i++) {\n \t\t\tvar deferredModule = deferredModules[i];\n \t\t\tvar fulfilled = true;\n \t\t\tfor(var j = 1; j < deferredModule.length; j++) {\n \t\t\t\tvar depId = deferredModule[j];\n \t\t\t\tif(installedChunks[depId] !== 0) fulfilled = false;\n \t\t\t}\n \t\t\tif(fulfilled) {\n \t\t\t\tdeferredModules.splice(i--, 1);\n \t\t\t\tresult = __webpack_require__(__webpack_require__.s = deferredModule[0]);\n \t\t\t}\n \t\t}\n\n \t\treturn result;\n \t}\n\n \t// The module cache\n \tvar installedModules = {};\n\n \t// object to store loaded CSS chunks\n \tvar installedCssChunks = {\n \t\t\"common/runtime\": 0\n \t}\n\n \t// object to store loaded and loading chunks\n \t// undefined = chunk not loaded, null = chunk preloaded/prefetched\n \t// Promise = chunk loading, 0 = chunk loaded\n \tvar installedChunks = {\n \t\t\"common/runtime\": 0\n \t};\n\n \tvar deferredModules = [];\n\n \t// script path function\n \tfunction jsonpScriptSrc(chunkId) {\n \t\treturn __webpack_require__.p + \"\" + chunkId + \".js\"\n \t}\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n \t// This file contains only the entry chunk.\n \t// The chunk loading function for additional chunks\n \t__webpack_require__.e = function requireEnsure(chunkId) {\n \t\tvar promises = [];\n\n\n \t\t// mini-css-extract-plugin CSS loading\n \t\tvar cssChunks = {\"uni_modules/mescroll-uni/components/mescroll-body/mescroll-body\":1,\"uni_modules/niu-navbar/components/niu-navbar/niu-navbar\":1,\"uni_modules/mescroll-uni/components/mescroll-empty/mescroll-empty\":1,\"uni_modules/mescroll-uni/components/mescroll-uni/components/mescroll-top\":1};\n \t\tif(installedCssChunks[chunkId]) promises.push(installedCssChunks[chunkId]);\n \t\telse if(installedCssChunks[chunkId] !== 0 && cssChunks[chunkId]) {\n \t\t\tpromises.push(installedCssChunks[chunkId] = new Promise(function(resolve, reject) {\n \t\t\t\tvar href = \"\" + ({\"uni_modules/mescroll-uni/components/mescroll-body/mescroll-body\":\"uni_modules/mescroll-uni/components/mescroll-body/mescroll-body\",\"components/Page/Page\":\"components/Page/Page\",\"uni_modules/niu-navbar/components/niu-navbar/niu-navbar\":\"uni_modules/niu-navbar/components/niu-navbar/niu-navbar\",\"uni_modules/mescroll-uni/components/mescroll-empty/mescroll-empty\":\"uni_modules/mescroll-uni/components/mescroll-empty/mescroll-empty\",\"uni_modules/mescroll-uni/components/mescroll-uni/components/mescroll-top\":\"uni_modules/mescroll-uni/components/mescroll-uni/components/mescroll-top\"}[chunkId]||chunkId) + \".wxss\";\n \t\t\t\tvar fullhref = __webpack_require__.p + href;\n \t\t\t\tvar existingLinkTags = document.getElementsByTagName(\"link\");\n \t\t\t\tfor(var i = 0; i < existingLinkTags.length; i++) {\n \t\t\t\t\tvar tag = existingLinkTags[i];\n \t\t\t\t\tvar dataHref = tag.getAttribute(\"data-href\") || tag.getAttribute(\"href\");\n \t\t\t\t\tif(tag.rel === \"stylesheet\" && (dataHref === href || dataHref === fullhref)) return resolve();\n \t\t\t\t}\n \t\t\t\tvar existingStyleTags = document.getElementsByTagName(\"style\");\n \t\t\t\tfor(var i = 0; i < existingStyleTags.length; i++) {\n \t\t\t\t\tvar tag = existingStyleTags[i];\n \t\t\t\t\tvar dataHref = tag.getAttribute(\"data-href\");\n \t\t\t\t\tif(dataHref === href || dataHref === fullhref) return resolve();\n \t\t\t\t}\n \t\t\t\tvar linkTag = document.createElement(\"link\");\n \t\t\t\tlinkTag.rel = \"stylesheet\";\n \t\t\t\tlinkTag.type = \"text/css\";\n \t\t\t\tlinkTag.onload = resolve;\n \t\t\t\tlinkTag.onerror = function(event) {\n \t\t\t\t\tvar request = event && event.target && event.target.src || fullhref;\n \t\t\t\t\tvar err = new Error(\"Loading CSS chunk \" + chunkId + \" failed.\\n(\" + request + \")\");\n \t\t\t\t\terr.code = \"CSS_CHUNK_LOAD_FAILED\";\n \t\t\t\t\terr.request = request;\n \t\t\t\t\tdelete installedCssChunks[chunkId]\n \t\t\t\t\tlinkTag.parentNode.removeChild(linkTag)\n \t\t\t\t\treject(err);\n \t\t\t\t};\n \t\t\t\tlinkTag.href = fullhref;\n\n \t\t\t\tvar head = document.getElementsByTagName(\"head\")[0];\n \t\t\t\thead.appendChild(linkTag);\n \t\t\t}).then(function() {\n \t\t\t\tinstalledCssChunks[chunkId] = 0;\n \t\t\t}));\n \t\t}\n\n \t\t// JSONP chunk loading for javascript\n\n \t\tvar installedChunkData = installedChunks[chunkId];\n \t\tif(installedChunkData !== 0) { // 0 means \"already installed\".\n\n \t\t\t// a Promise means \"currently loading\".\n \t\t\tif(installedChunkData) {\n \t\t\t\tpromises.push(installedChunkData[2]);\n \t\t\t} else {\n \t\t\t\t// setup Promise in chunk cache\n \t\t\t\tvar promise = new Promise(function(resolve, reject) {\n \t\t\t\t\tinstalledChunkData = installedChunks[chunkId] = [resolve, reject];\n \t\t\t\t});\n \t\t\t\tpromises.push(installedChunkData[2] = promise);\n\n \t\t\t\t// start chunk loading\n \t\t\t\tvar script = document.createElement('script');\n \t\t\t\tvar onScriptComplete;\n\n \t\t\t\tscript.charset = 'utf-8';\n \t\t\t\tscript.timeout = 120;\n \t\t\t\tif (__webpack_require__.nc) {\n \t\t\t\t\tscript.setAttribute(\"nonce\", __webpack_require__.nc);\n \t\t\t\t}\n \t\t\t\tscript.src = jsonpScriptSrc(chunkId);\n\n \t\t\t\t// create error before stack unwound to get useful stacktrace later\n \t\t\t\tvar error = new Error();\n \t\t\t\tonScriptComplete = function (event) {\n \t\t\t\t\t// avoid mem leaks in IE.\n \t\t\t\t\tscript.onerror = script.onload = null;\n \t\t\t\t\tclearTimeout(timeout);\n \t\t\t\t\tvar chunk = installedChunks[chunkId];\n \t\t\t\t\tif(chunk !== 0) {\n \t\t\t\t\t\tif(chunk) {\n \t\t\t\t\t\t\tvar errorType = event && (event.type === 'load' ? 'missing' : event.type);\n \t\t\t\t\t\t\tvar realSrc = event && event.target && event.target.src;\n \t\t\t\t\t\t\terror.message = 'Loading chunk ' + chunkId + ' failed.\\n(' + errorType + ': ' + realSrc + ')';\n \t\t\t\t\t\t\terror.name = 'ChunkLoadError';\n \t\t\t\t\t\t\terror.type = errorType;\n \t\t\t\t\t\t\terror.request = realSrc;\n \t\t\t\t\t\t\tchunk[1](error);\n \t\t\t\t\t\t}\n \t\t\t\t\t\tinstalledChunks[chunkId] = undefined;\n \t\t\t\t\t}\n \t\t\t\t};\n \t\t\t\tvar timeout = setTimeout(function(){\n \t\t\t\t\tonScriptComplete({ type: 'timeout', target: script });\n \t\t\t\t}, 120000);\n \t\t\t\tscript.onerror = script.onload = onScriptComplete;\n \t\t\t\tdocument.head.appendChild(script);\n \t\t\t}\n \t\t}\n \t\treturn Promise.all(promises);\n \t};\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"/\";\n\n \t// on error function for async loading\n \t__webpack_require__.oe = function(err) { console.error(err); throw err; };\n\n \tvar jsonpArray = global[\"webpackJsonp\"] = global[\"webpackJsonp\"] || [];\n \tvar oldJsonpFunction = jsonpArray.push.bind(jsonpArray);\n \tjsonpArray.push = webpackJsonpCallback;\n \tjsonpArray = jsonpArray.slice();\n \tfor(var i = 0; i < jsonpArray.length; i++) webpackJsonpCallback(jsonpArray[i]);\n \tvar parentJsonpFunction = oldJsonpFunction;\n\n\n \t// run deferred modules from other chunks\n \tcheckDeferredModules();\n"],"sourceRoot":""} \ No newline at end of file diff --git a/unpackage/dist/dev/.sourcemap/mp-weixin/common/vendor.js.map b/unpackage/dist/dev/.sourcemap/mp-weixin/common/vendor.js.map new file mode 100644 index 0000000..3ed76a4 --- /dev/null +++ b/unpackage/dist/dev/.sourcemap/mp-weixin/common/vendor.js.map @@ -0,0 +1 @@ +{"version":3,"sources":["webpack:///./node_modules/@dcloudio/uni-mp-weixin/dist/index.js?543d","webpack:///./node_modules/@dcloudio/vue-cli-plugin-uni/packages/vue-loader/lib/runtime/componentNormalizer.js?f0c5","webpack:///./node_modules/@dcloudio/vue-cli-plugin-uni/packages/mp-vue/dist/mp.runtime.esm.js?66fd",null,"uni-app:///uni_modules/mescroll-uni/components/mescroll-uni/mescroll-uni.js","uni-app:///uni_modules/mescroll-uni/components/mescroll-uni/mescroll-uni-option.js","uni-app:///uni_modules/mescroll-uni/components/mescroll-uni/mescroll-i18n.js","uni-app:///uni_modules/mescroll-uni/components/mescroll-uni/wxs/mixins.js","uni-app:///uni_modules/mescroll-uni/components/mescroll-uni/mescroll-mixins.js","uni-app:///mixins/mescroll-ui/mixin.js"],"names":["b64DecodeUnicode","str","decodeURIComponent","atob","split","map","c","charCodeAt","toString","slice","join","getCurrentUserInfo","token","wx","getStorageSync","tokenArr","length","uid","role","permission","tokenExpired","userInfo","JSON","parse","error","Error","message","exp","iat","uniIdMixin","Vue","prototype","uniIDHasRole","roleId","indexOf","uniIDHasPermission","permissionId","uniIDTokenValid","Date","now","_toString","Object","hasOwnProperty","isFn","fn","isStr","isPlainObject","obj","call","hasOwn","key","noop","cached","cache","create","cachedFn","hit","camelizeRE","camelize","replace","_","toUpperCase","HOOKS","globalInterceptors","scopedInterceptors","mergeHook","parentVal","childVal","res","concat","Array","isArray","dedupeHooks","hooks","i","push","removeHook","hook","index","splice","mergeInterceptorHook","interceptor","option","keys","forEach","removeInterceptorHook","addInterceptor","method","removeInterceptor","wrapperHook","data","isPromise","then","queue","promise","Promise","resolve","callback","wrapperOptions","options","name","oldCallback","callbackInterceptor","wrapperReturnValue","returnValue","returnValueHooks","getApiInterceptorHooks","scopedInterceptor","invokeApi","api","params","invoke","promiseInterceptor","catch","SYNC_API_RE","CONTEXT_API_RE","CONTEXT_API_RE_EXC","ASYNC_API","CALLBACK_API_RE","isContextApi","test","isSyncApi","isCallbackApi","handlePromise","err","shouldPromise","finally","constructor","value","reason","promisify","promiseApi","success","fail","complete","reject","assign","EPS","BASE_DEVICE_WIDTH","isIOS","deviceWidth","deviceDPR","checkDeviceWidth","getSystemInfoSync","platform","pixelRatio","windowWidth","upx2px","number","newDeviceWidth","Number","result","Math","floor","interceptors","baseApi","freeze","__proto__","findExistsPageIndex","url","pages","getCurrentPages","len","page","$page","fullPath","redirectTo","fromArgs","exists","delta","args","existsPageIndex","previewImage","currentIndex","parseInt","current","isNaN","urls","filter","item","indicator","loop","UUID_KEY","deviceId","addUuid","random","setStorage","addSafeAreaInsets","safeArea","safeAreaInsets","top","left","right","bottom","windowHeight","getSystemInfo","protocols","todos","canIUses","CALLBACKS","processCallback","methodName","processReturnValue","processArgs","argsOption","keepFromArgs","toArgs","keyOption","console","warn","keepReturnValue","wrapper","protocol","arg1","arg2","apply","todoApis","TODOS","createTodoApi","todoApi","errMsg","providers","oauth","share","payment","getProvider","service","provider","extraApi","getEmitter","Emitter","getUniEmitter","ctx","$on","arguments","$off","$once","$emit","eventApi","MPPage","Page","MPComponent","Component","customizeRE","customize","initTriggerEvent","mpInstance","canIUse","oldTriggerEvent","triggerEvent","event","initHook","oldHook","__$wrappered","after","PAGE_EVENT_HOOKS","initMocks","vm","mocks","$mp","mpType","mock","hasHook","vueOptions","default","extendOptions","super","mixins","find","mixin","initHooks","mpOptions","$vm","__call_hook","initVueComponent","VueComponent","extend","initSlots","vueSlots","$slots","slotName","$scopedSlots","initVueIds","vueIds","_$vueId","_$vuePid","initData","context","methods","e","process","VUE_APP_DEBUG","stringify","__lifecycle_hooks__","PROP_TYPES","String","Boolean","createObserver","observer","newVal","oldVal","initBehaviors","initBehavior","vueBehaviors","behaviors","vueExtends","extends","vueMixins","vueProps","props","behavior","type","properties","initProperties","vueMixin","parsePropType","defaultValue","file","isBehavior","vueId","generic","scopedSlotsCompiler","setData","opts","wrapper$1","mp","stopPropagation","preventDefault","target","detail","markerId","getExtraValue","dataPathsArray","dataPathArray","dataPath","propPath","valuePath","vFor","isInteger","substr","__get_value","vForItem","vForKey","processEventExtra","extra","extraObj","__args__","getObjByArray","arr","element","processEventArgs","isCustom","isCustomMPEvent","currentTarget","dataset","comType","ret","arg","ONCE","CUSTOM","isMatchEventType","eventType","optType","getContextVm","$parent","$options","$scope","handleEvent","eventOpts","eventOpt","eventsArray","charAt","isOnce","eventArray","handlerCtx","handler","once","eventChannels","eventChannelStack","getEventChannel","id","eventChannel","shift","initEventChannel","getOpenerEventChannel","callHook","__id__","__eventChannel__","initScopedSlotsParams","center","parents","$hasScopedSlotsParams","has","$getScopedSlotsParams","object","$setScopedSlotsParams","propsData","$forceUpdate","destroyed","parseBaseApp","initRefs","store","$store","mpHost","beforeCreate","getApp","app","$i18n","_i18n","appOptions","onLaunch","globalData","_isMounted","findVmByVueId","vuePid","$children","childVm","parentVm","Behavior","isPage","route","initRelation","selectAllComponents","selector","$refs","components","component","ref","vueGeneric","scopedComponent","defineProperty","get","forComponents","handleLink","parent","parseApp","createApp","App","encodeReserveRE","encodeReserveReplacer","commaRE","encode","encodeURIComponent","stringifyQuery","encodeStr","val","undefined","val2","x","parseBaseComponent","vueComponentOptions","multipleSlots","addGlobalClass","componentOptions","__file","lifetimes","attached","$mount","ready","detached","$destroy","pageLifetimes","show","hide","resize","size","__l","__e","externalClasses","wxsCallMethods","callMethod","parseComponent","hooks$1","parseBasePage","vuePageOptions","pageOptions","onLoad","query","copyQuery","is","parsePage","createPage","createComponent","createSubpackageApp","allowDefault","onShow","onAppShow","onHide","onAppHide","getLaunchOptionsSync","createPlugin","canIUseApi","apiName","uni","Proxy","set","uni$1","MeScroll","isScrollBody","me","version","isDownScrolling","isUpScrolling","hasDownCallback","down","initDownScroll","initUpScroll","setTimeout","optDown","use","native","auto","autoShowLoading","triggerDownScroll","isUpAutoLoad","optUp","triggerUpScroll","extendDownScroll","isLock","offset","startTop","inOffsetRate","outOffsetRate","bottomOffset","minAngle","textInOffset","textOutOffset","textLoading","textSuccess","textErr","beforeEndDelay","bgColor","textColor","inited","inOffset","outOffset","onMoving","beforeLoading","showLoading","afterLoading","beforeEndDownScroll","endDownScroll","afterEndDownScroll","mescroll","resetUpScroll","extendUpScroll","isBoth","num","time","noMoreSize","textNoMore","showNoMore","hideUpScroll","errDistance","toTop","src","duration","btnClick","zIndex","safearea","width","radius","empty","icon","tip","btnText","fixed","onScroll","userOption","defaultOption","def","hasColor","color","toLowerCase","downHight","touchstartEvent","startPoint","getPoint","getScrollTop","startAngle","lastPoint","maxTouchmoveY","getBodyHeight","inTouchend","touchmoveEvent","scrollTop","curPoint","moveY","y","getAngle","touchendEvent","diff","movetype","isDownEndSuccess","isMoveDown","round","rate","endDownScrollCall","isScrollUp","angle","touches","pageX","pageY","changedTouches","clientX","clientY","p1","p2","abs","z","sqrt","asin","PI","showDownScroll","startPullDownRefresh","showDownLoadingCall","onPullDownRefresh","stopPullDownRefresh","endScroll","setScrollHeight","scrollTo","delay","lockDownScroll","lockUpScroll","up","hasNext","startNum","onReachBottom","onPageScroll","setScrollTop","showTopBtn","hideTopBtn","scroll","scrollHeight","preScrollY","isCheck","canUp","getScrollBottom","showUpScroll","endUpScroll","isShowNoMore","isShowLoading","prePageNum","prePageTime","removeEmpty","setPageNum","setPageSize","endByPage","dataSize","totalPage","systime","endSuccess","endBySize","totalSize","loadSize","pageNum","pageSize","showEmpty","allDataSize","endErr","topBtnShow","t","myScrollTo","resetScrollTo","getScrollHeight","getClientHeight","getStep","star","end","count","step","timer","setInterval","clearInterval","isReal","h","clientHeight","setClientHeight","bodyHeight","setBodyHeight","cancelable","defaultPrevented","GlobalOption","i18n","zh","en","mescrollI18n","getType","setType","setStorageSync","WxsMixin","wxsProp","isUpBoth","callProp","callType","renderBiz","propObserver","wxsCall","msg","downLoadType","$set","mounted","MescrollMixin","mescrollInit","mescrollInitByRef","mescrollRef","downCallback","upCallback","allConfig","allFunc","common","downOption","upOption","computed","$mTop","$n","state","$Top","func","config","myFunc"],"mappings":"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,EAAD,EAAKuF,IAAL,CAAN,IAAoBnD,MAAM,CAACmJ,SAAD,EAAYhG,IAAZ,CAA9B,EAAiD;AAC/CyY,SAAG,CAACzY,IAAD,CAAH,GAAY8B,SAAS,CAAC9B,IAAD,EAAO+G,OAAO,CAAC/G,IAAD,EAAOvF,EAAE,CAACuF,IAAD,CAAT,CAAd,CAArB;AACD;AACF,GAJD;AAKD;;AAEDvF,EAAE,CAACua,SAAH,GAAeA,SAAf;AACAva,EAAE,CAACod,UAAH,GAAgBA,UAAhB;AACApd,EAAE,CAACqd,eAAH,GAAqBA,eAArB;AACArd,EAAE,CAACsd,mBAAH,GAAyBA,mBAAzB;AACAtd,EAAE,CAAC6d,YAAH,GAAkBA,YAAlB;;AAEA,IAAIM,KAAK,GAAGH,GAAZ,C;;AAEeG,K;;;;;;;;;;;;AC93Df;AAAA;AAAA;;AAEA;AACA;AACA;;AAEe;AACf;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,yBAAyB;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA,qBAAqB;AACrB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;AClHA;AAAA;AACA;AACA;AACA;AACA;AACA;;AAEA,kCAAkC;;AAElC;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB,iBAAiB;AAClC;AACA;AACA;AACA,sBAAsB,+BAA+B;AACrD,sBAAsB,iBAAiB;AACvC;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;;AAEA;AACA;AACA;AACA;AACA;AACA,kDAAkD,iCAAiC,EAAE;AACrF,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,iBAAiB,gBAAgB;AACjC;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,6BAA6B,cAAc;;AAE3C;;AAEA;AACA;AACA;AACA,6BAA6B,UAAU;;AAEvC;AACA;AACA;AACA;AACA;AACA,gBAAgB;AAChB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,OAAO;AACP;AACA,OAAO;AACP;AACA;AACA;AACA;AACA,SAAS;AACT,OAAO;AACP;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,GAAG;AACH;AACA,GAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB,gBAAgB;AACjC,kCAAkC;AAClC;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;AAIA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,iBAAiB,aAAoB;;AAErC;AACA;AACA;AACA,YAAY,aAAoB;;AAEhC;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,CAAC;;AAED;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,qBAAqB;AACxC,iBAAiB;AACjB;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA,KAAK,GAAG;AACR;AACA,GAAG;AACH;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,GAAG;AACH;;AAEA;;AAEA;AACA;AACA,oCAAoC;AACpC;;AAEA,IAAI,IAAqC;AACzC;AACA;AACA,iCAAiC;AACjC,uCAAuC,wBAAwB,EAAE;AACjE,0BAA0B;;AAE1B;AACA;;AAEA;AACA;AACA,KAAK;AACL;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,8CAA8C;AAC9C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,wBAAwB,YAAY;AACpC,kBAAkB,YAAY;AAC9B;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B;AAC/B;AACA,wCAAwC,EAAE;AAC1C;AACA,KAAK;AACL;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,MAAM,KAAqC;AAC3C;AACA;AACA;AACA,+BAA+B,oBAAoB,EAAE;AACrD;AACA,kCAAkC,OAAO;AACzC;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,0BAA0B,SAAS,qBAAqB;;AAExD;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,2BAA2B;AAC9C;AACA;AACA;AACA,GAAG;AACH,CAAC;;AAED;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB,iBAAiB;AAClC;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,mCAAmC,OAAO;AAC1C;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC,OAAO;AACzC;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC;AACpC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU,KAAqC;AAC/C;AACA;AACA;AACA,8BAA8B;AAC9B;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM,KAAqC;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,KAAqC;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,MAAM,KAAqC;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,KAAqC;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,iDAAiD,OAAO;AACxD;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,IAAI,IAAqC;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,cAAc;AACd;;AAEA;AACA;AACA;;AAEA,iBAAiB,iBAAiB;AAClC;AACA;AACA,2BAA2B;AAC3B;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM,KAAqC;AAC3C;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,iBAAiB,kBAAkB;AACnC;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,KAAqC;AACzC;AACA,GAAG;AACH;AACA;AACA;;AAEA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC,uBAAuB;AACzD,iCAAiC,sBAAsB;AACvD;AACA,kBAAkB;AAClB,MAAM,IAAqC;AAC3C;AACA;AACA,mBAAmB;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB,aAAoB;AACtC;AACA;AACA,mBAAmB;AACnB;AACA;AACA,iBAAiB,uBAAuB;AACxC;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe;AACf;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB,OAAO,UAAU,IAAqC;AACtD;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA,GAAG,UAAU,IAAqC;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,gBAAgB;AAChB;AACA;AACA,mBAAmB,mBAAmB;AACtC,+BAA+B;AAC/B;AACA,GAAG;AACH;AACA;AACA;AACA,kBAAkB,YAAY;AAC9B,WAAW;AACX;AACA,GAAG,UAAU,IAAqC;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM,IAAqC;AAC3C;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8CAA8C,OAAO;AACrD;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B;AAC3B;AACA,oCAAoC;AACpC;AACA,qCAAqC;AACrC;AACA;AACA,MAAM,KAAqC;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,IAEQ;AACZ;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM,KAAqC;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,2BAA2B;AAC9C;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA,GAAG;AACH;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,6CAA6C,SAAS;AACtD;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAG;AACH;AACA,GAAG;AACH;AACA;AACA;;AAEA;AACA;AACA,6CAA6C,qCAAqC,EAAE;AACpF;;AAEA;AACA;AACA;;AAEA,oCAAoC,yCAAyC,EAAE;AAC/E;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB,kBAAkB;AAC3C;AACA;AACA,4BAA4B;AAC5B,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,sDAAsD,EAAE;AACtF;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,MAAM,IAAqC;AAC3C;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,iBAAiB,mBAAmB;AACpC;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB,kBAAkB;AAClC;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA,KAAK;AACL;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;;AAEA;;AAEA;;AAEA;;AAEA,IAAI,IAAqC;AACzC;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA,KAAK;AACL;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,kCAAkC,iCAAiC;AACnE,cAAc,6BAA6B;AAC3C;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,kCAAkC,iCAAiC;AACnE,cAAc,6BAA6B;AAC3C;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB,yBAAyB;AAC1C,GAAG;AACH;AACA;AACA,iBAAiB,+BAA+B;AAChD;AACA;;AAEA;AACA;;AAEA,IAAI,IAAqC;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2BAA2B,uBAAuB;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,uCAAuC;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;;AAEA;AACA;AACA;AACA,qBAAqB,mBAAmB;AACxC;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM,KAAqC;AAC3C;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wDAAwD;AACxD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU,IAAqC;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB,qBAAqB;AACtC;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA,aAAa,qBAAqB;AAClC;AACA,+CAA+C;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU,IAAqC;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT,OAAO,MAAM,EAEN;AACP,KAAK;AACL;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,mBAAmB,iBAAiB;AACpC;AACA;AACA,6BAA6B;AAC7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,UAAU,IAAqC;AACxD;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sCAAsC,OAAO;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,kEAAkE;AAClE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;;AAEA;AACA,sBAAsB,mBAAmB;AACzC;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+BAA+B,OAAO;AACtC,uCAAuC;AACvC;AACA,GAAG;AACH;AACA,eAAe,SAAS;AACxB,sCAAsC;AACtC;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,2DAA2D;AAC3D;AACA;AACA,KAAK;AACL;AACA;AACA,kCAAkC,OAAO;AACzC;AACA,6CAA6C;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA,UAAU,KAAqC;AAC/C;AACA;AACA;AACA;AACA;AACA,8BAA8B;AAC9B;AACA;AACA;AACA,GAAG;AACH;AACA;;AAEA;AACA;AACA,4CAA4C,eAAe;AAC3D,GAAG;AACH;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA,GAAG;AACH;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM,KAAqC;AAC3C;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,kDAAkD;AAClD,4CAA4C;AAC5C;AACA;AACA;AACA;AACA;;AAEA;AACA,6CAA6C;AAC7C;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,iBAAiB;AACpC;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,MAAM,KAAqC;AAC3C;AACA;AACA;AACA,KAAK;AACL,4CAA4C;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gBAAgB;AAChB,iBAAiB,gBAAgB;AACjC;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA,iBAAiB,mBAAmB;AACpC;AACA;AACA;AACA,KAAK,UAAU,KAAqC;AACpD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH,qCAAqC,gEAAgE;AACrG;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH,4BAA4B,+BAA+B;AAC3D,4BAA4B,+BAA+B;AAC3D;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA,GAAG;AACH;AACA;AACA,mBAAmB,mBAAmB;AACtC;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM,IAAqC;AAC3C,kDAAkD;AAClD;AACA;AACA,mCAAmC;AACnC;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B;AAC9B;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,QAAQ,IAAqC;AAC7C;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,sEAAsE;;AAEtE;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,KAAK,uFAAuF;AAC5F;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,0CAA0C;AAC1C,iBAAiB,yBAAyB;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,GAAG,+BAA+B;AAClC,mCAAmC;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,KAAqC;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM,KAAqC;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB;AACxB;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU,KAAqC;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,GAAG;AACH,oBAAoB,oBAAoB;AACxC,sBAAsB,4BAA4B;AAClD;AACA,GAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8CAA8C,OAAO;AACrD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA,mBAAmB;AACnB,yBAAyB;AACzB;AACA,qDAAqD;AACrD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iCAAiC,6CAA6C;AAC9E;AACA;AACA,6CAA6C,4CAA4C;;AAEzF;AACA;AACA;;AAEA;AACA,MAAM,IAAqC;AAC3C;AACA;AACA,KAAK;AACL;AACA;AACA,KAAK;AACL,GAAG,MAAM,EAGN;AACH;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,UAAU,KAAqC;AAC/C;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,OAAO;AACP;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU,KAAqC;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB;AACpB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,KAAK,2CAA2C,8BAA8B,EAAE;;AAEhF;AACA,wCAAwC,OAAO;AAC/C;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA,KAAK;;AAEL;AACA,MAAM,KAAqC;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;;AAEL;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,WAAW;AACX;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,gBAAgB,KAAqC;AACrD;AACA,oBAAoB,SAAI;AACxB;AACA;AACA,WAAW;AACX;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA,mBAAmB,qBAAqB;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,+CAA+C;AAC/C;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,uCAAuC,OAAO;AAC9C;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yCAAyC,SAAS;AAClD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,QAAQ,IAAqC;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qCAAqC,OAAO;AAC5C;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM,IAAqC;AAC3C;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,0BAA0B;;AAE1B,kBAAkB;AAClB;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,mBAAmB,qBAAqB;AACxC;AACA,0CAA0C;AAC1C;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA,MAAM,IAAqC;AAC3C;AACA;AACA;;AAEA;AACA;AACA,uBAAuB;AACvB;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA,mBAAmB,yBAAyB;AAC5C;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,mBAAmB,yBAAyB;AAC5C;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,wCAAwC,OAAO;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM,IAAqC;AAC3C;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0BAA0B,0BAA0B;AACpD;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8BAA8B,oBAAoB,EAAE;;AAEpD;AACA;AACA,iBAAiB,sBAAsB;AACvC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,KAAqC;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,iBAAiB,kBAAkB;AACnC;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,UAAU,KAAqC;AAC/C;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;;;AAIA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,oBAAoB;AACpB;AACA,yBAAyB;AACzB;AACA;AACA;AACA;AACA,oBAAoB,KAAqC;AACzD;AACA,MAAM,SAAE;AACR;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA,MAAM,KAAqC;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA,KAAK;AACL;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA,GAAG;AACH;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,mBAAmB,2BAA2B;AAC9C,qBAAqB,+BAA+B;AACpD;AACA;AACA,GAAG;AACH,yBAAyB;AACzB;AACA,sBAAsB,iCAAiC;AACvD;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,IAAqC;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yCAAyC;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP,KAAK,MAAM,EAEN;AACL;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,KAAqC;AACzC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,IAAqC;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM,KAAqC;AAC3C;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA,GAAG;AACH;AACA;AACA;;AAEA,8BAA8B;;AAE9B;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,QAAQ,KAAqC;AAC7C;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,KAAK,UAAU,IAAqC;AACpD;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM,KAAqC;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC;AACpC;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,QAAQ,IAAqC;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,qBAAqB,oBAAoB;AACzC;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,6BAA6B;AAC7B;AACA,8BAA8B;AAC9B,MAAM,IAAqC;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,QAAQ,KAAqC;AAC7C;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA,QAAQ,IAAqC;AAC7C;AACA,KAAK,MAAM,EAEN;AACL;AACA;AACA;AACA;AACA;AACA;AACA,yCAAyC;AACzC;AACA,sCAAsC;AACtC,8C;;AAEA;AACA,QAAQ,KAAqC;AAC7C;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB,eAAe;AACrC;AACA;AACA;AACA;AACA;;AAEA;AACA,MAAM,KAAqC;AAC3C;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sEAAsE;AACtE;AACA;AACA;;AAEA;AACA,QAAQ,KAAqC;AAC7C;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA,iCAAiC;;AAEjC;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA,YAAY,KAAqC;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,wBAAwB;AACxB;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;;AAEA;;;;AAIA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAG;AACH;AACA,GAAG;AACH;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA,GAAG;;AAEH;AACA;;AAEA;AACA,0CAA0C,2BAA2B,EAAE;AACvE,KAAK;AACL;AACA,0CAA0C,4BAA4B,EAAE;AACxE,KAAK;AACL,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA,+BAA+B,eAAe;AAC9C,MAAM,IAAqC;AAC3C;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA,CAAC;;AAED;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,0BAA0B;AAC1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;;AAEA;AACA,0BAA0B;AAC1B;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA,qBAAqB;AACrB;AACA;AACA,yBAAyB;AACzB;AACA;AACA,6BAA6B;AAC7B;AACA;AACA,iBAAiB;AACjB;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA,KAAK;AACL;AACA;AACA,SAAS;AACT;AACA;AACA,aAAa;AACb;AACA;AACA,iBAAiB;AACjB;AACA;AACA,KAAK;AACL;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;;AAEA;AACA;AACA,YAAY,wGAAW;AACvB;AACA;AACA;AACA;AACA;AACA;AACA,uBAAuB,mBAAmB;AAC1C;AACA;AACA;AACA;;AAEA;AACA,0CAA0C,gCAAgC,EAAE;AAC5E;;AAEA;AACA;AACA;AACA;AACA,WAAW,wGAAW;AACtB;AACA;AACA;AACA;AACA;AACA,KAAK;AACL,WAAW,wGAAW;AACtB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA,SAAS;AACT;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA,8BAA8B;AAC9B,0CAA0C;;AAE1C;AACA;AACA;AACA,GAAG;;AAEH;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;;AAEA;AACA,sCAAsC;AACtC;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA,uBAAuB;AACvB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,8CAA8C;AAC9C;AACA,KAAK;AACL;AACA;AACA,UAAU,wGAAW;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP,KAAK;AACL;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA,mBAAmB;AACnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,QAAQ,IAAqC;AAC7C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA,mCAAmC,OAAO;AAC1C;AACA,gBAAgB,YAAY;AAC5B;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,gBAAgB,YAAY;AAC5B;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA,wBAAwB;AACxB;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA,kCAAkC;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;AACP;AACA;AACA;AACA;AACA;AACA,GAAG;;AAEH;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0CAA0C,OAAO;AACjD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;;AAGA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,sDAAsD,qDAAqD,EAAE,SAAS;AACtH;;AAEA;AACA;AACA;AACA;AACA;AACA,iCAAiC,OAAO;AACxC;AACA;AACA;AACA,KAAK;AACL;AACA;AACA,kCAAkC,OAAO;AACzC;AACA;AACA;AACA;AACA,KAAK;AACL;AACA,0BAA0B,OAAO;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA,KAAK;;AAEL;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEe,kEAAG,EAAC;;;;;;;;;;;;;AC75LnB;;AAEA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA,CAAC;AACD;AACA;AACA;;AAEA;AACA;AACA,4CAA4C;;AAE5C;;;;;;;;;;;;;qICnBA;;;;;;AAMe,SAASC,QAAT,CAAkB9Y,OAAlB,EAA2B+Y,YAA3B,EAAyC;AACvD,MAAIC,EAAE,GAAG,IAAT;AACAA,IAAE,CAACC,OAAH,GAAa,OAAb,CAFuD,CAEjC;AACtBD,IAAE,CAAChZ,OAAH,GAAaA,OAAO,IAAI,EAAxB,CAHuD,CAG3B;AAC5BgZ,IAAE,CAACD,YAAH,GAAkBA,YAAY,IAAI,KAAlC,CAJuD,CAId;;AAEzCC,IAAE,CAACE,eAAH,GAAqB,KAArB,CANuD,CAM3B;AAC5BF,IAAE,CAACG,aAAH,GAAmB,KAAnB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","file":"common/vendor.js","sourcesContent":["import Vue from 'vue';\r\n\r\nfunction b64DecodeUnicode (str) {\r\n return decodeURIComponent(atob(str).split('').map(function (c) {\r\n return '%' + ('00' + c.charCodeAt(0).toString(16)).slice(-2)\r\n }).join(''))\r\n}\r\n\r\nfunction getCurrentUserInfo () {\r\n const token = ( wx).getStorageSync('uni_id_token') || '';\r\n const tokenArr = token.split('.');\r\n if (!token || tokenArr.length !== 3) {\r\n return {\r\n uid: null,\r\n role: [],\r\n permission: [],\r\n tokenExpired: 0\r\n }\r\n }\r\n let userInfo;\r\n try {\r\n userInfo = JSON.parse(b64DecodeUnicode(tokenArr[1]));\r\n } catch (error) {\r\n throw new Error('获取当前用户信息出错,详细错误信息为:' + error.message)\r\n }\r\n userInfo.tokenExpired = userInfo.exp * 1000;\r\n delete userInfo.exp;\r\n delete userInfo.iat;\r\n return userInfo\r\n}\r\n\r\nfunction uniIdMixin (Vue) {\r\n Vue.prototype.uniIDHasRole = function (roleId) {\r\n const {\r\n role\r\n } = getCurrentUserInfo();\r\n return role.indexOf(roleId) > -1\r\n };\r\n Vue.prototype.uniIDHasPermission = function (permissionId) {\r\n const {\r\n permission\r\n } = getCurrentUserInfo();\r\n return this.uniIDHasRole('admin') || permission.indexOf(permissionId) > -1\r\n };\r\n Vue.prototype.uniIDTokenValid = function () {\r\n const {\r\n tokenExpired\r\n } = getCurrentUserInfo();\r\n return tokenExpired > Date.now()\r\n };\r\n}\r\n\r\nconst _toString = Object.prototype.toString;\r\nconst hasOwnProperty = Object.prototype.hasOwnProperty;\r\n\r\nfunction isFn (fn) {\r\n return typeof fn === 'function'\r\n}\r\n\r\nfunction isStr (str) {\r\n return typeof str === 'string'\r\n}\r\n\r\nfunction isPlainObject (obj) {\r\n return _toString.call(obj) === '[object Object]'\r\n}\r\n\r\nfunction hasOwn (obj, key) {\r\n return hasOwnProperty.call(obj, key)\r\n}\r\n\r\nfunction noop () {}\r\n\r\n/**\r\n * Create a cached version of a pure function.\r\n */\r\nfunction cached (fn) {\r\n const cache = Object.create(null);\r\n return function cachedFn (str) {\r\n const hit = cache[str];\r\n return hit || (cache[str] = fn(str))\r\n }\r\n}\r\n\r\n/**\r\n * Camelize a hyphen-delimited string.\r\n */\r\nconst camelizeRE = /-(\\w)/g;\r\nconst camelize = cached((str) => {\r\n return str.replace(camelizeRE, (_, c) => c ? c.toUpperCase() : '')\r\n});\r\n\r\nconst HOOKS = [\r\n 'invoke',\r\n 'success',\r\n 'fail',\r\n 'complete',\r\n 'returnValue'\r\n];\r\n\r\nconst globalInterceptors = {};\r\nconst scopedInterceptors = {};\r\n\r\nfunction mergeHook (parentVal, childVal) {\r\n const res = childVal\r\n ? parentVal\r\n ? parentVal.concat(childVal)\r\n : Array.isArray(childVal)\r\n ? childVal : [childVal]\r\n : parentVal;\r\n return res\r\n ? dedupeHooks(res)\r\n : res\r\n}\r\n\r\nfunction dedupeHooks (hooks) {\r\n const res = [];\r\n for (let i = 0; i < hooks.length; i++) {\r\n if (res.indexOf(hooks[i]) === -1) {\r\n res.push(hooks[i]);\r\n }\r\n }\r\n return res\r\n}\r\n\r\nfunction removeHook (hooks, hook) {\r\n const index = hooks.indexOf(hook);\r\n if (index !== -1) {\r\n hooks.splice(index, 1);\r\n }\r\n}\r\n\r\nfunction mergeInterceptorHook (interceptor, option) {\r\n Object.keys(option).forEach(hook => {\r\n if (HOOKS.indexOf(hook) !== -1 && isFn(option[hook])) {\r\n interceptor[hook] = mergeHook(interceptor[hook], option[hook]);\r\n }\r\n });\r\n}\r\n\r\nfunction removeInterceptorHook (interceptor, option) {\r\n if (!interceptor || !option) {\r\n return\r\n }\r\n Object.keys(option).forEach(hook => {\r\n if (HOOKS.indexOf(hook) !== -1 && isFn(option[hook])) {\r\n removeHook(interceptor[hook], option[hook]);\r\n }\r\n });\r\n}\r\n\r\nfunction addInterceptor (method, option) {\r\n if (typeof method === 'string' && isPlainObject(option)) {\r\n mergeInterceptorHook(scopedInterceptors[method] || (scopedInterceptors[method] = {}), option);\r\n } else if (isPlainObject(method)) {\r\n mergeInterceptorHook(globalInterceptors, method);\r\n }\r\n}\r\n\r\nfunction removeInterceptor (method, option) {\r\n if (typeof method === 'string') {\r\n if (isPlainObject(option)) {\r\n removeInterceptorHook(scopedInterceptors[method], option);\r\n } else {\r\n delete scopedInterceptors[method];\r\n }\r\n } else if (isPlainObject(method)) {\r\n removeInterceptorHook(globalInterceptors, method);\r\n }\r\n}\r\n\r\nfunction wrapperHook (hook) {\r\n return function (data) {\r\n return hook(data) || data\r\n }\r\n}\r\n\r\nfunction isPromise (obj) {\r\n return !!obj && (typeof obj === 'object' || typeof obj === 'function') && typeof obj.then === 'function'\r\n}\r\n\r\nfunction queue (hooks, data) {\r\n let promise = false;\r\n for (let i = 0; i < hooks.length; i++) {\r\n const hook = hooks[i];\r\n if (promise) {\r\n promise = Promise.resolve(wrapperHook(hook));\r\n } else {\r\n const res = hook(data);\r\n if (isPromise(res)) {\r\n promise = Promise.resolve(res);\r\n }\r\n if (res === false) {\r\n return {\r\n then () {}\r\n }\r\n }\r\n }\r\n }\r\n return promise || {\r\n then (callback) {\r\n return callback(data)\r\n }\r\n }\r\n}\r\n\r\nfunction wrapperOptions (interceptor, options = {}) {\r\n ['success', 'fail', 'complete'].forEach(name => {\r\n if (Array.isArray(interceptor[name])) {\r\n const oldCallback = options[name];\r\n options[name] = function callbackInterceptor (res) {\r\n queue(interceptor[name], res).then((res) => {\r\n /* eslint-disable no-mixed-operators */\r\n return isFn(oldCallback) && oldCallback(res) || res\r\n });\r\n };\r\n }\r\n });\r\n return options\r\n}\r\n\r\nfunction wrapperReturnValue (method, returnValue) {\r\n const returnValueHooks = [];\r\n if (Array.isArray(globalInterceptors.returnValue)) {\r\n returnValueHooks.push(...globalInterceptors.returnValue);\r\n }\r\n const interceptor = scopedInterceptors[method];\r\n if (interceptor && Array.isArray(interceptor.returnValue)) {\r\n returnValueHooks.push(...interceptor.returnValue);\r\n }\r\n returnValueHooks.forEach(hook => {\r\n returnValue = hook(returnValue) || returnValue;\r\n });\r\n return returnValue\r\n}\r\n\r\nfunction getApiInterceptorHooks (method) {\r\n const interceptor = Object.create(null);\r\n Object.keys(globalInterceptors).forEach(hook => {\r\n if (hook !== 'returnValue') {\r\n interceptor[hook] = globalInterceptors[hook].slice();\r\n }\r\n });\r\n const scopedInterceptor = scopedInterceptors[method];\r\n if (scopedInterceptor) {\r\n Object.keys(scopedInterceptor).forEach(hook => {\r\n if (hook !== 'returnValue') {\r\n interceptor[hook] = (interceptor[hook] || []).concat(scopedInterceptor[hook]);\r\n }\r\n });\r\n }\r\n return interceptor\r\n}\r\n\r\nfunction invokeApi (method, api, options, ...params) {\r\n const interceptor = getApiInterceptorHooks(method);\r\n if (interceptor && Object.keys(interceptor).length) {\r\n if (Array.isArray(interceptor.invoke)) {\r\n const res = queue(interceptor.invoke, options);\r\n return res.then((options) => {\r\n return api(wrapperOptions(interceptor, options), ...params)\r\n })\r\n } else {\r\n return api(wrapperOptions(interceptor, options), ...params)\r\n }\r\n }\r\n return api(options, ...params)\r\n}\r\n\r\nconst promiseInterceptor = {\r\n returnValue (res) {\r\n if (!isPromise(res)) {\r\n return res\r\n }\r\n return res.then(res => {\r\n return res[1]\r\n }).catch(res => {\r\n return res[0]\r\n })\r\n }\r\n};\r\n\r\nconst SYNC_API_RE =\r\n /^\\$|Window$|WindowStyle$|sendNativeEvent|restoreGlobal|getCurrentSubNVue|getMenuButtonBoundingClientRect|^report|interceptors|Interceptor$|getSubNVueById|requireNativePlugin|upx2px|hideKeyboard|canIUse|^create|Sync$|Manager$|base64ToArrayBuffer|arrayBufferToBase64/;\r\n\r\nconst CONTEXT_API_RE = /^create|Manager$/;\r\n\r\n// Context例外情况\r\nconst CONTEXT_API_RE_EXC = ['createBLEConnection'];\r\n\r\n// 同步例外情况\r\nconst ASYNC_API = ['createBLEConnection'];\r\n\r\nconst CALLBACK_API_RE = /^on|^off/;\r\n\r\nfunction isContextApi (name) {\r\n return CONTEXT_API_RE.test(name) && CONTEXT_API_RE_EXC.indexOf(name) === -1\r\n}\r\nfunction isSyncApi (name) {\r\n return SYNC_API_RE.test(name) && ASYNC_API.indexOf(name) === -1\r\n}\r\n\r\nfunction isCallbackApi (name) {\r\n return CALLBACK_API_RE.test(name) && name !== 'onPush'\r\n}\r\n\r\nfunction handlePromise (promise) {\r\n return promise.then(data => {\r\n return [null, data]\r\n })\r\n .catch(err => [err])\r\n}\r\n\r\nfunction shouldPromise (name) {\r\n if (\r\n isContextApi(name) ||\r\n isSyncApi(name) ||\r\n isCallbackApi(name)\r\n ) {\r\n return false\r\n }\r\n return true\r\n}\r\n\r\n/* eslint-disable no-extend-native */\r\nif (!Promise.prototype.finally) {\r\n Promise.prototype.finally = function (callback) {\r\n const promise = this.constructor;\r\n return this.then(\r\n value => promise.resolve(callback()).then(() => value),\r\n reason => promise.resolve(callback()).then(() => {\r\n throw reason\r\n })\r\n )\r\n };\r\n}\r\n\r\nfunction promisify (name, api) {\r\n if (!shouldPromise(name)) {\r\n return api\r\n }\r\n return function promiseApi (options = {}, ...params) {\r\n if (isFn(options.success) || isFn(options.fail) || isFn(options.complete)) {\r\n return wrapperReturnValue(name, invokeApi(name, api, options, ...params))\r\n }\r\n return wrapperReturnValue(name, handlePromise(new Promise((resolve, reject) => {\r\n invokeApi(name, api, Object.assign({}, options, {\r\n success: resolve,\r\n fail: reject\r\n }), ...params);\r\n })))\r\n }\r\n}\r\n\r\nconst EPS = 1e-4;\r\nconst BASE_DEVICE_WIDTH = 750;\r\nlet isIOS = false;\r\nlet deviceWidth = 0;\r\nlet deviceDPR = 0;\r\n\r\nfunction checkDeviceWidth () {\r\n const {\r\n platform,\r\n pixelRatio,\r\n windowWidth\r\n } = wx.getSystemInfoSync(); // uni=>wx runtime 编译目标是 uni 对象,内部不允许直接使用 uni\r\n\r\n deviceWidth = windowWidth;\r\n deviceDPR = pixelRatio;\r\n isIOS = platform === 'ios';\r\n}\r\n\r\nfunction upx2px (number, newDeviceWidth) {\r\n if (deviceWidth === 0) {\r\n checkDeviceWidth();\r\n }\r\n\r\n number = Number(number);\r\n if (number === 0) {\r\n return 0\r\n }\r\n let result = (number / BASE_DEVICE_WIDTH) * (newDeviceWidth || deviceWidth);\r\n if (result < 0) {\r\n result = -result;\r\n }\r\n result = Math.floor(result + EPS);\r\n if (result === 0) {\r\n if (deviceDPR === 1 || !isIOS) {\r\n result = 1;\r\n } else {\r\n result = 0.5;\r\n }\r\n }\r\n return number < 0 ? -result : result\r\n}\r\n\r\nconst interceptors = {\r\n promiseInterceptor\r\n};\r\n\r\nvar baseApi = /*#__PURE__*/Object.freeze({\r\n __proto__: null,\r\n upx2px: upx2px,\r\n addInterceptor: addInterceptor,\r\n removeInterceptor: removeInterceptor,\r\n interceptors: interceptors\r\n});\r\n\r\nfunction findExistsPageIndex (url) {\r\n const pages = getCurrentPages();\r\n let len = pages.length;\r\n while (len--) {\r\n const page = pages[len];\r\n if (page.$page && page.$page.fullPath === url) {\r\n return len\r\n }\r\n }\r\n return -1\r\n}\r\n\r\nvar redirectTo = {\r\n name (fromArgs) {\r\n if (fromArgs.exists === 'back' && fromArgs.delta) {\r\n return 'navigateBack'\r\n }\r\n return 'redirectTo'\r\n },\r\n args (fromArgs) {\r\n if (fromArgs.exists === 'back' && fromArgs.url) {\r\n const existsPageIndex = findExistsPageIndex(fromArgs.url);\r\n if (existsPageIndex !== -1) {\r\n const delta = getCurrentPages().length - 1 - existsPageIndex;\r\n if (delta > 0) {\r\n fromArgs.delta = delta;\r\n }\r\n }\r\n }\r\n }\r\n};\r\n\r\nvar previewImage = {\r\n args (fromArgs) {\r\n let currentIndex = parseInt(fromArgs.current);\r\n if (isNaN(currentIndex)) {\r\n return\r\n }\r\n const urls = fromArgs.urls;\r\n if (!Array.isArray(urls)) {\r\n return\r\n }\r\n const len = urls.length;\r\n if (!len) {\r\n return\r\n }\r\n if (currentIndex < 0) {\r\n currentIndex = 0;\r\n } else if (currentIndex >= len) {\r\n currentIndex = len - 1;\r\n }\r\n if (currentIndex > 0) {\r\n fromArgs.current = urls[currentIndex];\r\n fromArgs.urls = urls.filter(\r\n (item, index) => index < currentIndex ? item !== urls[currentIndex] : true\r\n );\r\n } else {\r\n fromArgs.current = urls[0];\r\n }\r\n return {\r\n indicator: false,\r\n loop: false\r\n }\r\n }\r\n};\r\n\r\nconst UUID_KEY = '__DC_STAT_UUID';\r\nlet deviceId;\r\nfunction addUuid (result) {\r\n deviceId = deviceId || wx.getStorageSync(UUID_KEY);\r\n if (!deviceId) {\r\n deviceId = Date.now() + '' + Math.floor(Math.random() * 1e7);\r\n wx.setStorage({\r\n key: UUID_KEY,\r\n data: deviceId\r\n });\r\n }\r\n result.deviceId = deviceId;\r\n}\r\n\r\nfunction addSafeAreaInsets (result) {\r\n if (result.safeArea) {\r\n const safeArea = result.safeArea;\r\n result.safeAreaInsets = {\r\n top: safeArea.top,\r\n left: safeArea.left,\r\n right: result.windowWidth - safeArea.right,\r\n bottom: result.windowHeight - safeArea.bottom\r\n };\r\n }\r\n}\r\n\r\nvar getSystemInfo = {\r\n returnValue: function (result) {\r\n addUuid(result);\r\n addSafeAreaInsets(result);\r\n }\r\n};\r\n\r\n// import navigateTo from 'uni-helpers/navigate-to'\r\n\r\nconst protocols = {\r\n redirectTo,\r\n // navigateTo, // 由于在微信开发者工具的页面参数,会显示__id__参数,因此暂时关闭mp-weixin对于navigateTo的AOP\r\n previewImage,\r\n getSystemInfo,\r\n getSystemInfoSync: getSystemInfo\r\n};\r\nconst todos = [\r\n 'vibrate',\r\n 'preloadPage',\r\n 'unPreloadPage',\r\n 'loadSubPackage'\r\n];\r\nconst canIUses = [];\r\n\r\nconst CALLBACKS = ['success', 'fail', 'cancel', 'complete'];\r\n\r\nfunction processCallback (methodName, method, returnValue) {\r\n return function (res) {\r\n return method(processReturnValue(methodName, res, returnValue))\r\n }\r\n}\r\n\r\nfunction processArgs (methodName, fromArgs, argsOption = {}, returnValue = {}, keepFromArgs = false) {\r\n if (isPlainObject(fromArgs)) { // 一般 api 的参数解析\r\n const toArgs = keepFromArgs === true ? fromArgs : {}; // returnValue 为 false 时,说明是格式化返回值,直接在返回值对象上修改赋值\r\n if (isFn(argsOption)) {\r\n argsOption = argsOption(fromArgs, toArgs) || {};\r\n }\r\n for (const key in fromArgs) {\r\n if (hasOwn(argsOption, key)) {\r\n let keyOption = argsOption[key];\r\n if (isFn(keyOption)) {\r\n keyOption = keyOption(fromArgs[key], fromArgs, toArgs);\r\n }\r\n if (!keyOption) { // 不支持的参数\r\n console.warn(`The '${methodName}' method of platform '微信小程序' does not support option '${key}'`);\r\n } else if (isStr(keyOption)) { // 重写参数 key\r\n toArgs[keyOption] = fromArgs[key];\r\n } else if (isPlainObject(keyOption)) { // {name:newName,value:value}可重新指定参数 key:value\r\n toArgs[keyOption.name ? keyOption.name : key] = keyOption.value;\r\n }\r\n } else if (CALLBACKS.indexOf(key) !== -1) {\r\n if (isFn(fromArgs[key])) {\r\n toArgs[key] = processCallback(methodName, fromArgs[key], returnValue);\r\n }\r\n } else {\r\n if (!keepFromArgs) {\r\n toArgs[key] = fromArgs[key];\r\n }\r\n }\r\n }\r\n return toArgs\r\n } else if (isFn(fromArgs)) {\r\n fromArgs = processCallback(methodName, fromArgs, returnValue);\r\n }\r\n return fromArgs\r\n}\r\n\r\nfunction processReturnValue (methodName, res, returnValue, keepReturnValue = false) {\r\n if (isFn(protocols.returnValue)) { // 处理通用 returnValue\r\n res = protocols.returnValue(methodName, res);\r\n }\r\n return processArgs(methodName, res, returnValue, {}, keepReturnValue)\r\n}\r\n\r\nfunction wrapper (methodName, method) {\r\n if (hasOwn(protocols, methodName)) {\r\n const protocol = protocols[methodName];\r\n if (!protocol) { // 暂不支持的 api\r\n return function () {\r\n console.error(`Platform '微信小程序' does not support '${methodName}'.`);\r\n }\r\n }\r\n return function (arg1, arg2) { // 目前 api 最多两个参数\r\n let options = protocol;\r\n if (isFn(protocol)) {\r\n options = protocol(arg1);\r\n }\r\n\r\n arg1 = processArgs(methodName, arg1, options.args, options.returnValue);\r\n\r\n const args = [arg1];\r\n if (typeof arg2 !== 'undefined') {\r\n args.push(arg2);\r\n }\r\n if (isFn(options.name)) {\r\n methodName = options.name(arg1);\r\n } else if (isStr(options.name)) {\r\n methodName = options.name;\r\n }\r\n const returnValue = wx[methodName].apply(wx, args);\r\n if (isSyncApi(methodName)) { // 同步 api\r\n return processReturnValue(methodName, returnValue, options.returnValue, isContextApi(methodName))\r\n }\r\n return returnValue\r\n }\r\n }\r\n return method\r\n}\r\n\r\nconst todoApis = Object.create(null);\r\n\r\nconst TODOS = [\r\n 'onTabBarMidButtonTap',\r\n 'subscribePush',\r\n 'unsubscribePush',\r\n 'onPush',\r\n 'offPush',\r\n 'share'\r\n];\r\n\r\nfunction createTodoApi (name) {\r\n return function todoApi ({\r\n fail,\r\n complete\r\n }) {\r\n const res = {\r\n errMsg: `${name}:fail method '${name}' not supported`\r\n };\r\n isFn(fail) && fail(res);\r\n isFn(complete) && complete(res);\r\n }\r\n}\r\n\r\nTODOS.forEach(function (name) {\r\n todoApis[name] = createTodoApi(name);\r\n});\r\n\r\nvar providers = {\r\n oauth: ['weixin'],\r\n share: ['weixin'],\r\n payment: ['wxpay'],\r\n push: ['weixin']\r\n};\r\n\r\nfunction getProvider ({\r\n service,\r\n success,\r\n fail,\r\n complete\r\n}) {\r\n let res = false;\r\n if (providers[service]) {\r\n res = {\r\n errMsg: 'getProvider:ok',\r\n service,\r\n provider: providers[service]\r\n };\r\n isFn(success) && success(res);\r\n } else {\r\n res = {\r\n errMsg: 'getProvider:fail service not found'\r\n };\r\n isFn(fail) && fail(res);\r\n }\r\n isFn(complete) && complete(res);\r\n}\r\n\r\nvar extraApi = /*#__PURE__*/Object.freeze({\r\n __proto__: null,\r\n getProvider: getProvider\r\n});\r\n\r\nconst getEmitter = (function () {\r\n let Emitter;\r\n return function getUniEmitter () {\r\n if (!Emitter) {\r\n Emitter = new Vue();\r\n }\r\n return Emitter\r\n }\r\n})();\r\n\r\nfunction apply (ctx, method, args) {\r\n return ctx[method].apply(ctx, args)\r\n}\r\n\r\nfunction $on () {\r\n return apply(getEmitter(), '$on', [...arguments])\r\n}\r\nfunction $off () {\r\n return apply(getEmitter(), '$off', [...arguments])\r\n}\r\nfunction $once () {\r\n return apply(getEmitter(), '$once', [...arguments])\r\n}\r\nfunction $emit () {\r\n return apply(getEmitter(), '$emit', [...arguments])\r\n}\r\n\r\nvar eventApi = /*#__PURE__*/Object.freeze({\r\n __proto__: null,\r\n $on: $on,\r\n $off: $off,\r\n $once: $once,\r\n $emit: $emit\r\n});\r\n\r\nvar api = /*#__PURE__*/Object.freeze({\r\n __proto__: null\r\n});\r\n\r\nconst MPPage = Page;\r\nconst MPComponent = Component;\r\n\r\nconst customizeRE = /:/g;\r\n\r\nconst customize = cached((str) => {\r\n return camelize(str.replace(customizeRE, '-'))\r\n});\r\n\r\nfunction initTriggerEvent (mpInstance) {\r\n {\r\n if (!wx.canIUse || !wx.canIUse('nextTick')) {\r\n return\r\n }\r\n }\r\n const oldTriggerEvent = mpInstance.triggerEvent;\r\n mpInstance.triggerEvent = function (event, ...args) {\r\n return oldTriggerEvent.apply(mpInstance, [customize(event), ...args])\r\n };\r\n}\r\n\r\nfunction initHook (name, options) {\r\n const oldHook = options[name];\r\n if (!oldHook) {\r\n options[name] = function () {\r\n initTriggerEvent(this);\r\n };\r\n } else {\r\n options[name] = function (...args) {\r\n initTriggerEvent(this);\r\n return oldHook.apply(this, args)\r\n };\r\n }\r\n}\r\nif (!MPPage.__$wrappered) {\r\n MPPage.__$wrappered = true;\r\n Page = function (options = {}) {\r\n initHook('onLoad', options);\r\n return MPPage(options)\r\n };\r\n Page.after = MPPage.after;\r\n\r\n Component = function (options = {}) {\r\n initHook('created', options);\r\n return MPComponent(options)\r\n };\r\n}\r\n\r\nconst PAGE_EVENT_HOOKS = [\r\n 'onPullDownRefresh',\r\n 'onReachBottom',\r\n 'onAddToFavorites',\r\n 'onShareTimeline',\r\n 'onShareAppMessage',\r\n 'onPageScroll',\r\n 'onResize',\r\n 'onTabItemTap'\r\n];\r\n\r\nfunction initMocks (vm, mocks) {\r\n const mpInstance = vm.$mp[vm.mpType];\r\n mocks.forEach(mock => {\r\n if (hasOwn(mpInstance, mock)) {\r\n vm[mock] = mpInstance[mock];\r\n }\r\n });\r\n}\r\n\r\nfunction hasHook (hook, vueOptions) {\r\n if (!vueOptions) {\r\n return true\r\n }\r\n\r\n if (Vue.options && Array.isArray(Vue.options[hook])) {\r\n return true\r\n }\r\n\r\n vueOptions = vueOptions.default || vueOptions;\r\n\r\n if (isFn(vueOptions)) {\r\n if (isFn(vueOptions.extendOptions[hook])) {\r\n return true\r\n }\r\n if (vueOptions.super &&\r\n vueOptions.super.options &&\r\n Array.isArray(vueOptions.super.options[hook])) {\r\n return true\r\n }\r\n return false\r\n }\r\n\r\n if (isFn(vueOptions[hook])) {\r\n return true\r\n }\r\n const mixins = vueOptions.mixins;\r\n if (Array.isArray(mixins)) {\r\n return !!mixins.find(mixin => hasHook(hook, mixin))\r\n }\r\n}\r\n\r\nfunction initHooks (mpOptions, hooks, vueOptions) {\r\n hooks.forEach(hook => {\r\n if (hasHook(hook, vueOptions)) {\r\n mpOptions[hook] = function (args) {\r\n return this.$vm && this.$vm.__call_hook(hook, args)\r\n };\r\n }\r\n });\r\n}\r\n\r\nfunction initVueComponent (Vue, vueOptions) {\r\n vueOptions = vueOptions.default || vueOptions;\r\n let VueComponent;\r\n if (isFn(vueOptions)) {\r\n VueComponent = vueOptions;\r\n } else {\r\n VueComponent = Vue.extend(vueOptions);\r\n }\r\n vueOptions = VueComponent.options;\r\n return [VueComponent, vueOptions]\r\n}\r\n\r\nfunction initSlots (vm, vueSlots) {\r\n if (Array.isArray(vueSlots) && vueSlots.length) {\r\n const $slots = Object.create(null);\r\n vueSlots.forEach(slotName => {\r\n $slots[slotName] = true;\r\n });\r\n vm.$scopedSlots = vm.$slots = $slots;\r\n }\r\n}\r\n\r\nfunction initVueIds (vueIds, mpInstance) {\r\n vueIds = (vueIds || '').split(',');\r\n const len = vueIds.length;\r\n\r\n if (len === 1) {\r\n mpInstance._$vueId = vueIds[0];\r\n } else if (len === 2) {\r\n mpInstance._$vueId = vueIds[0];\r\n mpInstance._$vuePid = vueIds[1];\r\n }\r\n}\r\n\r\nfunction initData (vueOptions, context) {\r\n let data = vueOptions.data || {};\r\n const methods = vueOptions.methods || {};\r\n\r\n if (typeof data === 'function') {\r\n try {\r\n data = data.call(context); // 支持 Vue.prototype 上挂的数据\r\n } catch (e) {\r\n if (process.env.VUE_APP_DEBUG) {\r\n console.warn('根据 Vue 的 data 函数初始化小程序 data 失败,请尽量确保 data 函数中不访问 vm 对象,否则可能影响首次数据渲染速度。', data);\r\n }\r\n }\r\n } else {\r\n try {\r\n // 对 data 格式化\r\n data = JSON.parse(JSON.stringify(data));\r\n } catch (e) {}\r\n }\r\n\r\n if (!isPlainObject(data)) {\r\n data = {};\r\n }\r\n\r\n Object.keys(methods).forEach(methodName => {\r\n if (context.__lifecycle_hooks__.indexOf(methodName) === -1 && !hasOwn(data, methodName)) {\r\n data[methodName] = methods[methodName];\r\n }\r\n });\r\n\r\n return data\r\n}\r\n\r\nconst PROP_TYPES = [String, Number, Boolean, Object, Array, null];\r\n\r\nfunction createObserver (name) {\r\n return function observer (newVal, oldVal) {\r\n if (this.$vm) {\r\n this.$vm[name] = newVal; // 为了触发其他非 render watcher\r\n }\r\n }\r\n}\r\n\r\nfunction initBehaviors (vueOptions, initBehavior) {\r\n const vueBehaviors = vueOptions.behaviors;\r\n const vueExtends = vueOptions.extends;\r\n const vueMixins = vueOptions.mixins;\r\n\r\n let vueProps = vueOptions.props;\r\n\r\n if (!vueProps) {\r\n vueOptions.props = vueProps = [];\r\n }\r\n\r\n const behaviors = [];\r\n if (Array.isArray(vueBehaviors)) {\r\n vueBehaviors.forEach(behavior => {\r\n behaviors.push(behavior.replace('uni://', `${\"wx\"}://`));\r\n if (behavior === 'uni://form-field') {\r\n if (Array.isArray(vueProps)) {\r\n vueProps.push('name');\r\n vueProps.push('value');\r\n } else {\r\n vueProps.name = {\r\n type: String,\r\n default: ''\r\n };\r\n vueProps.value = {\r\n type: [String, Number, Boolean, Array, Object, Date],\r\n default: ''\r\n };\r\n }\r\n }\r\n });\r\n }\r\n if (isPlainObject(vueExtends) && vueExtends.props) {\r\n behaviors.push(\r\n initBehavior({\r\n properties: initProperties(vueExtends.props, true)\r\n })\r\n );\r\n }\r\n if (Array.isArray(vueMixins)) {\r\n vueMixins.forEach(vueMixin => {\r\n if (isPlainObject(vueMixin) && vueMixin.props) {\r\n behaviors.push(\r\n initBehavior({\r\n properties: initProperties(vueMixin.props, true)\r\n })\r\n );\r\n }\r\n });\r\n }\r\n return behaviors\r\n}\r\n\r\nfunction parsePropType (key, type, defaultValue, file) {\r\n // [String]=>String\r\n if (Array.isArray(type) && type.length === 1) {\r\n return type[0]\r\n }\r\n return type\r\n}\r\n\r\nfunction initProperties (props, isBehavior = false, file = '') {\r\n const properties = {};\r\n if (!isBehavior) {\r\n properties.vueId = {\r\n type: String,\r\n value: ''\r\n };\r\n // 用于字节跳动小程序模拟抽象节点\r\n properties.generic = {\r\n type: Object,\r\n value: null\r\n };\r\n // scopedSlotsCompiler auto\r\n properties.scopedSlotsCompiler = {\r\n type: String,\r\n value: ''\r\n };\r\n properties.vueSlots = { // 小程序不能直接定义 $slots 的 props,所以通过 vueSlots 转换到 $slots\r\n type: null,\r\n value: [],\r\n observer: function (newVal, oldVal) {\r\n const $slots = Object.create(null);\r\n newVal.forEach(slotName => {\r\n $slots[slotName] = true;\r\n });\r\n this.setData({\r\n $slots\r\n });\r\n }\r\n };\r\n }\r\n if (Array.isArray(props)) { // ['title']\r\n props.forEach(key => {\r\n properties[key] = {\r\n type: null,\r\n observer: createObserver(key)\r\n };\r\n });\r\n } else if (isPlainObject(props)) { // {title:{type:String,default:''},content:String}\r\n Object.keys(props).forEach(key => {\r\n const opts = props[key];\r\n if (isPlainObject(opts)) { // title:{type:String,default:''}\r\n let value = opts.default;\r\n if (isFn(value)) {\r\n value = value();\r\n }\r\n\r\n opts.type = parsePropType(key, opts.type);\r\n\r\n properties[key] = {\r\n type: PROP_TYPES.indexOf(opts.type) !== -1 ? opts.type : null,\r\n value,\r\n observer: createObserver(key)\r\n };\r\n } else { // content:String\r\n const type = parsePropType(key, opts);\r\n properties[key] = {\r\n type: PROP_TYPES.indexOf(type) !== -1 ? type : null,\r\n observer: createObserver(key)\r\n };\r\n }\r\n });\r\n }\r\n return properties\r\n}\r\n\r\nfunction wrapper$1 (event) {\r\n // TODO 又得兼容 mpvue 的 mp 对象\r\n try {\r\n event.mp = JSON.parse(JSON.stringify(event));\r\n } catch (e) {}\r\n\r\n event.stopPropagation = noop;\r\n event.preventDefault = noop;\r\n\r\n event.target = event.target || {};\r\n\r\n if (!hasOwn(event, 'detail')) {\r\n event.detail = {};\r\n }\r\n\r\n if (hasOwn(event, 'markerId')) {\r\n event.detail = typeof event.detail === 'object' ? event.detail : {};\r\n event.detail.markerId = event.markerId;\r\n }\r\n\r\n if (isPlainObject(event.detail)) {\r\n event.target = Object.assign({}, event.target, event.detail);\r\n }\r\n\r\n return event\r\n}\r\n\r\nfunction getExtraValue (vm, dataPathsArray) {\r\n let context = vm;\r\n dataPathsArray.forEach(dataPathArray => {\r\n const dataPath = dataPathArray[0];\r\n const value = dataPathArray[2];\r\n if (dataPath || typeof value !== 'undefined') { // ['','',index,'disable']\r\n const propPath = dataPathArray[1];\r\n const valuePath = dataPathArray[3];\r\n\r\n let vFor;\r\n if (Number.isInteger(dataPath)) {\r\n vFor = dataPath;\r\n } else if (!dataPath) {\r\n vFor = context;\r\n } else if (typeof dataPath === 'string' && dataPath) {\r\n if (dataPath.indexOf('#s#') === 0) {\r\n vFor = dataPath.substr(3);\r\n } else {\r\n vFor = vm.__get_value(dataPath, context);\r\n }\r\n }\r\n\r\n if (Number.isInteger(vFor)) {\r\n context = value;\r\n } else if (!propPath) {\r\n context = vFor[value];\r\n } else {\r\n if (Array.isArray(vFor)) {\r\n context = vFor.find(vForItem => {\r\n return vm.__get_value(propPath, vForItem) === value\r\n });\r\n } else if (isPlainObject(vFor)) {\r\n context = Object.keys(vFor).find(vForKey => {\r\n return vm.__get_value(propPath, vFor[vForKey]) === value\r\n });\r\n } else {\r\n console.error('v-for 暂不支持循环数据:', vFor);\r\n }\r\n }\r\n\r\n if (valuePath) {\r\n context = vm.__get_value(valuePath, context);\r\n }\r\n }\r\n });\r\n return context\r\n}\r\n\r\nfunction processEventExtra (vm, extra, event) {\r\n const extraObj = {};\r\n\r\n if (Array.isArray(extra) && extra.length) {\r\n /**\r\n *[\r\n * ['data.items', 'data.id', item.data.id],\r\n * ['metas', 'id', meta.id]\r\n *],\r\n *[\r\n * ['data.items', 'data.id', item.data.id],\r\n * ['metas', 'id', meta.id]\r\n *],\r\n *'test'\r\n */\r\n extra.forEach((dataPath, index) => {\r\n if (typeof dataPath === 'string') {\r\n if (!dataPath) { // model,prop.sync\r\n extraObj['$' + index] = vm;\r\n } else {\r\n if (dataPath === '$event') { // $event\r\n extraObj['$' + index] = event;\r\n } else if (dataPath === 'arguments') {\r\n if (event.detail && event.detail.__args__) {\r\n extraObj['$' + index] = event.detail.__args__;\r\n } else {\r\n extraObj['$' + index] = [event];\r\n }\r\n } else if (dataPath.indexOf('$event.') === 0) { // $event.target.value\r\n extraObj['$' + index] = vm.__get_value(dataPath.replace('$event.', ''), event);\r\n } else {\r\n extraObj['$' + index] = vm.__get_value(dataPath);\r\n }\r\n }\r\n } else {\r\n extraObj['$' + index] = getExtraValue(vm, dataPath);\r\n }\r\n });\r\n }\r\n\r\n return extraObj\r\n}\r\n\r\nfunction getObjByArray (arr) {\r\n const obj = {};\r\n for (let i = 1; i < arr.length; i++) {\r\n const element = arr[i];\r\n obj[element[0]] = element[1];\r\n }\r\n return obj\r\n}\r\n\r\nfunction processEventArgs (vm, event, args = [], extra = [], isCustom, methodName) {\r\n let isCustomMPEvent = false; // wxcomponent 组件,传递原始 event 对象\r\n if (isCustom) { // 自定义事件\r\n isCustomMPEvent = event.currentTarget &&\r\n event.currentTarget.dataset &&\r\n event.currentTarget.dataset.comType === 'wx';\r\n if (!args.length) { // 无参数,直接传入 event 或 detail 数组\r\n if (isCustomMPEvent) {\r\n return [event]\r\n }\r\n return event.detail.__args__ || event.detail\r\n }\r\n }\r\n\r\n const extraObj = processEventExtra(vm, extra, event);\r\n\r\n const ret = [];\r\n args.forEach(arg => {\r\n if (arg === '$event') {\r\n if (methodName === '__set_model' && !isCustom) { // input v-model value\r\n ret.push(event.target.value);\r\n } else {\r\n if (isCustom && !isCustomMPEvent) {\r\n ret.push(event.detail.__args__[0]);\r\n } else { // wxcomponent 组件或内置组件\r\n ret.push(event);\r\n }\r\n }\r\n } else {\r\n if (Array.isArray(arg) && arg[0] === 'o') {\r\n ret.push(getObjByArray(arg));\r\n } else if (typeof arg === 'string' && hasOwn(extraObj, arg)) {\r\n ret.push(extraObj[arg]);\r\n } else {\r\n ret.push(arg);\r\n }\r\n }\r\n });\r\n\r\n return ret\r\n}\r\n\r\nconst ONCE = '~';\r\nconst CUSTOM = '^';\r\n\r\nfunction isMatchEventType (eventType, optType) {\r\n return (eventType === optType) ||\r\n (\r\n optType === 'regionchange' &&\r\n (\r\n eventType === 'begin' ||\r\n eventType === 'end'\r\n )\r\n )\r\n}\r\n\r\nfunction getContextVm (vm) {\r\n let $parent = vm.$parent;\r\n // 父组件是 scoped slots 或者其他自定义组件时继续查找\r\n while ($parent && $parent.$parent && ($parent.$options.generic || $parent.$parent.$options.generic || $parent.$scope._$vuePid)) {\r\n $parent = $parent.$parent;\r\n }\r\n return $parent && $parent.$parent\r\n}\r\n\r\nfunction handleEvent (event) {\r\n event = wrapper$1(event);\r\n\r\n // [['tap',[['handle',[1,2,a]],['handle1',[1,2,a]]]]]\r\n const dataset = (event.currentTarget || event.target).dataset;\r\n if (!dataset) {\r\n return console.warn('事件信息不存在')\r\n }\r\n const eventOpts = dataset.eventOpts || dataset['event-opts']; // 支付宝 web-view 组件 dataset 非驼峰\r\n if (!eventOpts) {\r\n return console.warn('事件信息不存在')\r\n }\r\n\r\n // [['handle',[1,2,a]],['handle1',[1,2,a]]]\r\n const eventType = event.type;\r\n\r\n const ret = [];\r\n\r\n eventOpts.forEach(eventOpt => {\r\n let type = eventOpt[0];\r\n const eventsArray = eventOpt[1];\r\n\r\n const isCustom = type.charAt(0) === CUSTOM;\r\n type = isCustom ? type.slice(1) : type;\r\n const isOnce = type.charAt(0) === ONCE;\r\n type = isOnce ? type.slice(1) : type;\r\n\r\n if (eventsArray && isMatchEventType(eventType, type)) {\r\n eventsArray.forEach(eventArray => {\r\n const methodName = eventArray[0];\r\n if (methodName) {\r\n let handlerCtx = this.$vm;\r\n if (handlerCtx.$options.generic) { // mp-weixin,mp-toutiao 抽象节点模拟 scoped slots\r\n handlerCtx = getContextVm(handlerCtx) || handlerCtx;\r\n }\r\n if (methodName === '$emit') {\r\n handlerCtx.$emit.apply(handlerCtx,\r\n processEventArgs(\r\n this.$vm,\r\n event,\r\n eventArray[1],\r\n eventArray[2],\r\n isCustom,\r\n methodName\r\n ));\r\n return\r\n }\r\n const handler = handlerCtx[methodName];\r\n if (!isFn(handler)) {\r\n throw new Error(` _vm.${methodName} is not a function`)\r\n }\r\n if (isOnce) {\r\n if (handler.once) {\r\n return\r\n }\r\n handler.once = true;\r\n }\r\n let params = processEventArgs(\r\n this.$vm,\r\n event,\r\n eventArray[1],\r\n eventArray[2],\r\n isCustom,\r\n methodName\r\n );\r\n params = Array.isArray(params) ? params : [];\r\n // 参数尾部增加原始事件对象用于复杂表达式内获取额外数据\r\n if (/=\\s*\\S+\\.eventParams\\s*\\|\\|\\s*\\S+\\[['\"]event-params['\"]\\]/.test(handler.toString())) {\r\n // eslint-disable-next-line no-sparse-arrays\r\n params = params.concat([, , , , , , , , , , event]);\r\n }\r\n ret.push(handler.apply(handlerCtx, params));\r\n }\r\n });\r\n }\r\n });\r\n\r\n if (\r\n eventType === 'input' &&\r\n ret.length === 1 &&\r\n typeof ret[0] !== 'undefined'\r\n ) {\r\n return ret[0]\r\n }\r\n}\r\n\r\nconst eventChannels = {};\r\n\r\nconst eventChannelStack = [];\r\n\r\nfunction getEventChannel (id) {\r\n if (id) {\r\n const eventChannel = eventChannels[id];\r\n delete eventChannels[id];\r\n return eventChannel\r\n }\r\n return eventChannelStack.shift()\r\n}\r\n\r\nconst hooks = [\r\n 'onShow',\r\n 'onHide',\r\n 'onError',\r\n 'onPageNotFound',\r\n 'onThemeChange',\r\n 'onUnhandledRejection'\r\n];\r\n\r\nfunction initEventChannel () {\r\n Vue.prototype.getOpenerEventChannel = function () {\r\n // 微信小程序使用自身getOpenerEventChannel\r\n {\r\n return this.$scope.getOpenerEventChannel()\r\n }\r\n };\r\n const callHook = Vue.prototype.__call_hook;\r\n Vue.prototype.__call_hook = function (hook, args) {\r\n if (hook === 'onLoad' && args && args.__id__) {\r\n this.__eventChannel__ = getEventChannel(args.__id__);\r\n delete args.__id__;\r\n }\r\n return callHook.call(this, hook, args)\r\n };\r\n}\r\n\r\nfunction initScopedSlotsParams () {\r\n const center = {};\r\n const parents = {};\r\n\r\n Vue.prototype.$hasScopedSlotsParams = function (vueId) {\r\n const has = center[vueId];\r\n if (!has) {\r\n parents[vueId] = this;\r\n this.$on('hook:destory', () => {\r\n delete parents[vueId];\r\n });\r\n }\r\n return has\r\n };\r\n\r\n Vue.prototype.$getScopedSlotsParams = function (vueId, name, key) {\r\n const data = center[vueId];\r\n if (data) {\r\n const object = data[name] || {};\r\n return key ? object[key] : object\r\n } else {\r\n parents[vueId] = this;\r\n this.$on('hook:destory', () => {\r\n delete parents[vueId];\r\n });\r\n }\r\n };\r\n\r\n Vue.prototype.$setScopedSlotsParams = function (name, value) {\r\n const vueIds = this.$options.propsData.vueId;\r\n if (vueIds) {\r\n const vueId = vueIds.split(',')[0];\r\n const object = center[vueId] = center[vueId] || {};\r\n object[name] = value;\r\n if (parents[vueId]) {\r\n parents[vueId].$forceUpdate();\r\n }\r\n }\r\n };\r\n\r\n Vue.mixin({\r\n destroyed () {\r\n const propsData = this.$options.propsData;\r\n const vueId = propsData && propsData.vueId;\r\n if (vueId) {\r\n delete center[vueId];\r\n delete parents[vueId];\r\n }\r\n }\r\n });\r\n}\r\n\r\nfunction parseBaseApp (vm, {\r\n mocks,\r\n initRefs\r\n}) {\r\n initEventChannel();\r\n {\r\n initScopedSlotsParams();\r\n }\r\n if (vm.$options.store) {\r\n Vue.prototype.$store = vm.$options.store;\r\n }\r\n uniIdMixin(Vue);\r\n\r\n Vue.prototype.mpHost = \"mp-weixin\";\r\n\r\n Vue.mixin({\r\n beforeCreate () {\r\n if (!this.$options.mpType) {\r\n return\r\n }\r\n\r\n this.mpType = this.$options.mpType;\r\n\r\n this.$mp = {\r\n data: {},\r\n [this.mpType]: this.$options.mpInstance\r\n };\r\n\r\n this.$scope = this.$options.mpInstance;\r\n\r\n delete this.$options.mpType;\r\n delete this.$options.mpInstance;\r\n if (this.mpType === 'page' && typeof getApp === 'function') { // hack vue-i18n\r\n const app = getApp();\r\n if (app.$vm && app.$vm.$i18n) {\r\n this._i18n = app.$vm.$i18n;\r\n }\r\n }\r\n if (this.mpType !== 'app') {\r\n initRefs(this);\r\n initMocks(this, mocks);\r\n }\r\n }\r\n });\r\n\r\n const appOptions = {\r\n onLaunch (args) {\r\n if (this.$vm) { // 已经初始化过了,主要是为了百度,百度 onShow 在 onLaunch 之前\r\n return\r\n }\r\n {\r\n if (wx.canIUse && !wx.canIUse('nextTick')) { // 事实 上2.2.3 即可,简单使用 2.3.0 的 nextTick 判断\r\n console.error('当前微信基础库版本过低,请将 微信开发者工具-详情-项目设置-调试基础库版本 更换为`2.3.0`以上');\r\n }\r\n }\r\n\r\n this.$vm = vm;\r\n\r\n this.$vm.$mp = {\r\n app: this\r\n };\r\n\r\n this.$vm.$scope = this;\r\n // vm 上也挂载 globalData\r\n this.$vm.globalData = this.globalData;\r\n\r\n this.$vm._isMounted = true;\r\n this.$vm.__call_hook('mounted', args);\r\n\r\n this.$vm.__call_hook('onLaunch', args);\r\n }\r\n };\r\n\r\n // 兼容旧版本 globalData\r\n appOptions.globalData = vm.$options.globalData || {};\r\n // 将 methods 中的方法挂在 getApp() 中\r\n const methods = vm.$options.methods;\r\n if (methods) {\r\n Object.keys(methods).forEach(name => {\r\n appOptions[name] = methods[name];\r\n });\r\n }\r\n\r\n initHooks(appOptions, hooks);\r\n\r\n return appOptions\r\n}\r\n\r\nconst mocks = ['__route__', '__wxExparserNodeId__', '__wxWebviewId__'];\r\n\r\nfunction findVmByVueId (vm, vuePid) {\r\n const $children = vm.$children;\r\n // 优先查找直属(反向查找:https://github.com/dcloudio/uni-app/issues/1200)\r\n for (let i = $children.length - 1; i >= 0; i--) {\r\n const childVm = $children[i];\r\n if (childVm.$scope._$vueId === vuePid) {\r\n return childVm\r\n }\r\n }\r\n // 反向递归查找\r\n let parentVm;\r\n for (let i = $children.length - 1; i >= 0; i--) {\r\n parentVm = findVmByVueId($children[i], vuePid);\r\n if (parentVm) {\r\n return parentVm\r\n }\r\n }\r\n}\r\n\r\nfunction initBehavior (options) {\r\n return Behavior(options)\r\n}\r\n\r\nfunction isPage () {\r\n return !!this.route\r\n}\r\n\r\nfunction initRelation (detail) {\r\n this.triggerEvent('__l', detail);\r\n}\r\n\r\nfunction selectAllComponents (mpInstance, selector, $refs) {\r\n const components = mpInstance.selectAllComponents(selector);\r\n components.forEach(component => {\r\n const ref = component.dataset.ref;\r\n $refs[ref] = component.$vm || component;\r\n {\r\n if (component.dataset.vueGeneric === 'scoped') {\r\n component.selectAllComponents('.scoped-ref').forEach(scopedComponent => {\r\n selectAllComponents(scopedComponent, selector, $refs);\r\n });\r\n }\r\n }\r\n });\r\n}\r\n\r\nfunction initRefs (vm) {\r\n const mpInstance = vm.$scope;\r\n Object.defineProperty(vm, '$refs', {\r\n get () {\r\n const $refs = {};\r\n selectAllComponents(mpInstance, '.vue-ref', $refs);\r\n // TODO 暂不考虑 for 中的 scoped\r\n const forComponents = mpInstance.selectAllComponents('.vue-ref-in-for');\r\n forComponents.forEach(component => {\r\n const ref = component.dataset.ref;\r\n if (!$refs[ref]) {\r\n $refs[ref] = [];\r\n }\r\n $refs[ref].push(component.$vm || component);\r\n });\r\n return $refs\r\n }\r\n });\r\n}\r\n\r\nfunction handleLink (event) {\r\n const {\r\n vuePid,\r\n vueOptions\r\n } = event.detail || event.value; // detail 是微信,value 是百度(dipatch)\r\n\r\n let parentVm;\r\n\r\n if (vuePid) {\r\n parentVm = findVmByVueId(this.$vm, vuePid);\r\n }\r\n\r\n if (!parentVm) {\r\n parentVm = this.$vm;\r\n }\r\n\r\n vueOptions.parent = parentVm;\r\n}\r\n\r\nfunction parseApp (vm) {\r\n return parseBaseApp(vm, {\r\n mocks,\r\n initRefs\r\n })\r\n}\r\n\r\nfunction createApp (vm) {\r\n App(parseApp(vm));\r\n return vm\r\n}\r\n\r\nconst encodeReserveRE = /[!'()*]/g;\r\nconst encodeReserveReplacer = c => '%' + c.charCodeAt(0).toString(16);\r\nconst commaRE = /%2C/g;\r\n\r\n// fixed encodeURIComponent which is more conformant to RFC3986:\r\n// - escapes [!'()*]\r\n// - preserve commas\r\nconst encode = str => encodeURIComponent(str)\r\n .replace(encodeReserveRE, encodeReserveReplacer)\r\n .replace(commaRE, ',');\r\n\r\nfunction stringifyQuery (obj, encodeStr = encode) {\r\n const res = obj ? Object.keys(obj).map(key => {\r\n const val = obj[key];\r\n\r\n if (val === undefined) {\r\n return ''\r\n }\r\n\r\n if (val === null) {\r\n return encodeStr(key)\r\n }\r\n\r\n if (Array.isArray(val)) {\r\n const result = [];\r\n val.forEach(val2 => {\r\n if (val2 === undefined) {\r\n return\r\n }\r\n if (val2 === null) {\r\n result.push(encodeStr(key));\r\n } else {\r\n result.push(encodeStr(key) + '=' + encodeStr(val2));\r\n }\r\n });\r\n return result.join('&')\r\n }\r\n\r\n return encodeStr(key) + '=' + encodeStr(val)\r\n }).filter(x => x.length > 0).join('&') : null;\r\n return res ? `?${res}` : ''\r\n}\r\n\r\nfunction parseBaseComponent (vueComponentOptions, {\r\n isPage,\r\n initRelation\r\n} = {}) {\r\n const [VueComponent, vueOptions] = initVueComponent(Vue, vueComponentOptions);\r\n\r\n const options = {\r\n multipleSlots: true,\r\n addGlobalClass: true,\r\n ...(vueOptions.options || {})\r\n };\r\n\r\n {\r\n // 微信 multipleSlots 部分情况有 bug,导致内容顺序错乱 如 u-list,提供覆盖选项\r\n if (vueOptions['mp-weixin'] && vueOptions['mp-weixin'].options) {\r\n Object.assign(options, vueOptions['mp-weixin'].options);\r\n }\r\n }\r\n\r\n const componentOptions = {\r\n options,\r\n data: initData(vueOptions, Vue.prototype),\r\n behaviors: initBehaviors(vueOptions, initBehavior),\r\n properties: initProperties(vueOptions.props, false, vueOptions.__file),\r\n lifetimes: {\r\n attached () {\r\n const properties = this.properties;\r\n\r\n const options = {\r\n mpType: isPage.call(this) ? 'page' : 'component',\r\n mpInstance: this,\r\n propsData: properties\r\n };\r\n\r\n initVueIds(properties.vueId, this);\r\n\r\n // 处理父子关系\r\n initRelation.call(this, {\r\n vuePid: this._$vuePid,\r\n vueOptions: options\r\n });\r\n\r\n // 初始化 vue 实例\r\n this.$vm = new VueComponent(options);\r\n\r\n // 处理$slots,$scopedSlots(暂不支持动态变化$slots)\r\n initSlots(this.$vm, properties.vueSlots);\r\n\r\n // 触发首次 setData\r\n this.$vm.$mount();\r\n },\r\n ready () {\r\n // 当组件 props 默认值为 true,初始化时传入 false 会导致 created,ready 触发, 但 attached 不触发\r\n // https://developers.weixin.qq.com/community/develop/doc/00066ae2844cc0f8eb883e2a557800\r\n if (this.$vm) {\r\n this.$vm._isMounted = true;\r\n this.$vm.__call_hook('mounted');\r\n this.$vm.__call_hook('onReady');\r\n }\r\n },\r\n detached () {\r\n this.$vm && this.$vm.$destroy();\r\n }\r\n },\r\n pageLifetimes: {\r\n show (args) {\r\n this.$vm && this.$vm.__call_hook('onPageShow', args);\r\n },\r\n hide () {\r\n this.$vm && this.$vm.__call_hook('onPageHide');\r\n },\r\n resize (size) {\r\n this.$vm && this.$vm.__call_hook('onPageResize', size);\r\n }\r\n },\r\n methods: {\r\n __l: handleLink,\r\n __e: handleEvent\r\n }\r\n };\r\n // externalClasses\r\n if (vueOptions.externalClasses) {\r\n componentOptions.externalClasses = vueOptions.externalClasses;\r\n }\r\n\r\n if (Array.isArray(vueOptions.wxsCallMethods)) {\r\n vueOptions.wxsCallMethods.forEach(callMethod => {\r\n componentOptions.methods[callMethod] = function (args) {\r\n return this.$vm[callMethod](args)\r\n };\r\n });\r\n }\r\n\r\n if (isPage) {\r\n return componentOptions\r\n }\r\n return [componentOptions, VueComponent]\r\n}\r\n\r\nfunction parseComponent (vueComponentOptions) {\r\n return parseBaseComponent(vueComponentOptions, {\r\n isPage,\r\n initRelation\r\n })\r\n}\r\n\r\nconst hooks$1 = [\r\n 'onShow',\r\n 'onHide',\r\n 'onUnload'\r\n];\r\n\r\nhooks$1.push(...PAGE_EVENT_HOOKS);\r\n\r\nfunction parseBasePage (vuePageOptions, {\r\n isPage,\r\n initRelation\r\n}) {\r\n const pageOptions = parseComponent(vuePageOptions);\r\n\r\n initHooks(pageOptions.methods, hooks$1, vuePageOptions);\r\n\r\n pageOptions.methods.onLoad = function (query) {\r\n this.options = query;\r\n const copyQuery = Object.assign({}, query);\r\n delete copyQuery.__id__;\r\n this.$page = {\r\n fullPath: '/' + (this.route || this.is) + stringifyQuery(copyQuery)\r\n };\r\n this.$vm.$mp.query = query; // 兼容 mpvue\r\n this.$vm.__call_hook('onLoad', query);\r\n };\r\n\r\n return pageOptions\r\n}\r\n\r\nfunction parsePage (vuePageOptions) {\r\n return parseBasePage(vuePageOptions, {\r\n isPage,\r\n initRelation\r\n })\r\n}\r\n\r\nfunction createPage (vuePageOptions) {\r\n {\r\n return Component(parsePage(vuePageOptions))\r\n }\r\n}\r\n\r\nfunction createComponent (vueOptions) {\r\n {\r\n return Component(parseComponent(vueOptions))\r\n }\r\n}\r\n\r\nfunction createSubpackageApp (vm) {\r\n const appOptions = parseApp(vm);\r\n const app = getApp({\r\n allowDefault: true\r\n });\r\n vm.$scope = app;\r\n const globalData = app.globalData;\r\n if (globalData) {\r\n Object.keys(appOptions.globalData).forEach(name => {\r\n if (!hasOwn(globalData, name)) {\r\n globalData[name] = appOptions.globalData[name];\r\n }\r\n });\r\n }\r\n Object.keys(appOptions).forEach(name => {\r\n if (!hasOwn(app, name)) {\r\n app[name] = appOptions[name];\r\n }\r\n });\r\n if (isFn(appOptions.onShow) && wx.onAppShow) {\r\n wx.onAppShow((...args) => {\r\n vm.__call_hook('onShow', args);\r\n });\r\n }\r\n if (isFn(appOptions.onHide) && wx.onAppHide) {\r\n wx.onAppHide((...args) => {\r\n vm.__call_hook('onHide', args);\r\n });\r\n }\r\n if (isFn(appOptions.onLaunch)) {\r\n const args = wx.getLaunchOptionsSync && wx.getLaunchOptionsSync();\r\n vm.__call_hook('onLaunch', args);\r\n }\r\n return vm\r\n}\r\n\r\nfunction createPlugin (vm) {\r\n const appOptions = parseApp(vm);\r\n if (isFn(appOptions.onShow) && wx.onAppShow) {\r\n wx.onAppShow((...args) => {\r\n appOptions.onShow.apply(vm, args);\r\n });\r\n }\r\n if (isFn(appOptions.onHide) && wx.onAppHide) {\r\n wx.onAppHide((...args) => {\r\n appOptions.onHide.apply(vm, args);\r\n });\r\n }\r\n if (isFn(appOptions.onLaunch)) {\r\n const args = wx.getLaunchOptionsSync && wx.getLaunchOptionsSync();\r\n appOptions.onLaunch.call(vm, args);\r\n }\r\n return vm\r\n}\r\n\r\ntodos.forEach(todoApi => {\r\n protocols[todoApi] = false;\r\n});\r\n\r\ncanIUses.forEach(canIUseApi => {\r\n const apiName = protocols[canIUseApi] && protocols[canIUseApi].name ? protocols[canIUseApi].name\r\n : canIUseApi;\r\n if (!wx.canIUse(apiName)) {\r\n protocols[canIUseApi] = false;\r\n }\r\n});\r\n\r\nlet uni = {};\r\n\r\nif (typeof Proxy !== 'undefined' && \"mp-weixin\" !== 'app-plus') {\r\n uni = new Proxy({}, {\r\n get (target, name) {\r\n if (hasOwn(target, name)) {\r\n return target[name]\r\n }\r\n if (baseApi[name]) {\r\n return baseApi[name]\r\n }\r\n if (api[name]) {\r\n return promisify(name, api[name])\r\n }\r\n {\r\n if (extraApi[name]) {\r\n return promisify(name, extraApi[name])\r\n }\r\n if (todoApis[name]) {\r\n return promisify(name, todoApis[name])\r\n }\r\n }\r\n if (eventApi[name]) {\r\n return eventApi[name]\r\n }\r\n if (!hasOwn(wx, name) && !hasOwn(protocols, name)) {\r\n return\r\n }\r\n return promisify(name, wrapper(name, wx[name]))\r\n },\r\n set (target, name, value) {\r\n target[name] = value;\r\n return true\r\n }\r\n });\r\n} else {\r\n Object.keys(baseApi).forEach(name => {\r\n uni[name] = baseApi[name];\r\n });\r\n\r\n {\r\n Object.keys(todoApis).forEach(name => {\r\n uni[name] = promisify(name, todoApis[name]);\r\n });\r\n Object.keys(extraApi).forEach(name => {\r\n uni[name] = promisify(name, todoApis[name]);\r\n });\r\n }\r\n\r\n Object.keys(eventApi).forEach(name => {\r\n uni[name] = eventApi[name];\r\n });\r\n\r\n Object.keys(api).forEach(name => {\r\n uni[name] = promisify(name, api[name]);\r\n });\r\n\r\n Object.keys(wx).forEach(name => {\r\n if (hasOwn(wx, name) || hasOwn(protocols, name)) {\r\n uni[name] = promisify(name, wrapper(name, wx[name]));\r\n }\r\n });\r\n}\r\n\r\nwx.createApp = createApp;\r\nwx.createPage = createPage;\r\nwx.createComponent = createComponent;\r\nwx.createSubpackageApp = createSubpackageApp;\r\nwx.createPlugin = createPlugin;\r\n\r\nvar uni$1 = uni;\r\n\r\nexport default uni$1;\r\nexport { createApp, createComponent, createPage, createPlugin, createSubpackageApp };\r\n","/* globals __VUE_SSR_CONTEXT__ */\n\n// IMPORTANT: Do NOT use ES2015 features in this file (except for modules).\n// This module is a runtime utility for cleaner component module output and will\n// be included in the final webpack user bundle.\n\nexport default function normalizeComponent (\n scriptExports,\n render,\n staticRenderFns,\n functionalTemplate,\n injectStyles,\n scopeId,\n moduleIdentifier, /* server only */\n shadowMode, /* vue-cli only */\n components, // fixed by xxxxxx auto components\n renderjs // fixed by xxxxxx renderjs\n) {\n // Vue.extend constructor export interop\n var options = typeof scriptExports === 'function'\n ? scriptExports.options\n : scriptExports\n\n // fixed by xxxxxx auto components\n if (components) {\n if (!options.components) {\n options.components = {}\n }\n var hasOwn = Object.prototype.hasOwnProperty\n for (var name in components) {\n if (hasOwn.call(components, name) && !hasOwn.call(options.components, name)) {\n options.components[name] = components[name]\n }\n }\n }\n // fixed by xxxxxx renderjs\n if (renderjs) {\n (renderjs.beforeCreate || (renderjs.beforeCreate = [])).unshift(function() {\n this[renderjs.__module] = this\n });\n (options.mixins || (options.mixins = [])).push(renderjs)\n }\n\n // render functions\n if (render) {\n options.render = render\n options.staticRenderFns = staticRenderFns\n options._compiled = true\n }\n\n // functional template\n if (functionalTemplate) {\n options.functional = true\n }\n\n // scopedId\n if (scopeId) {\n options._scopeId = 'data-v-' + scopeId\n }\n\n var hook\n if (moduleIdentifier) { // server build\n hook = function (context) {\n // 2.3 injection\n context =\n context || // cached call\n (this.$vnode && this.$vnode.ssrContext) || // stateful\n (this.parent && this.parent.$vnode && this.parent.$vnode.ssrContext) // functional\n // 2.2 with runInNewContext: true\n if (!context && typeof __VUE_SSR_CONTEXT__ !== 'undefined') {\n context = __VUE_SSR_CONTEXT__\n }\n // inject component styles\n if (injectStyles) {\n injectStyles.call(this, context)\n }\n // register component module identifier for async chunk inferrence\n if (context && context._registeredComponents) {\n context._registeredComponents.add(moduleIdentifier)\n }\n }\n // used by ssr in case component is cached and beforeCreate\n // never gets called\n options._ssrRegister = hook\n } else if (injectStyles) {\n hook = shadowMode\n ? function () { injectStyles.call(this, this.$root.$options.shadowRoot) }\n : injectStyles\n }\n\n if (hook) {\n if (options.functional) {\n // for template-only hot-reload because in that case the render fn doesn't\n // go through the normalizer\n options._injectStyles = hook\n // register for functioal component in vue file\n var originalRender = options.render\n options.render = function renderWithStyleInjection (h, context) {\n hook.call(context)\n return originalRender(h, context)\n }\n } else {\n // inject component registration as beforeCreate hook\n var existing = options.beforeCreate\n options.beforeCreate = existing\n ? [].concat(existing, hook)\n : [hook]\n }\n }\n\n return {\n exports: scriptExports,\n options: options\n }\n}\n","/*!\n * Vue.js v2.6.11\n * (c) 2014-2021 Evan You\n * Released under the MIT License.\n */\n/* */\n\nvar emptyObject = Object.freeze({});\n\n// These helpers produce better VM code in JS engines due to their\n// explicitness and function inlining.\nfunction isUndef (v) {\n return v === undefined || v === null\n}\n\nfunction isDef (v) {\n return v !== undefined && v !== null\n}\n\nfunction isTrue (v) {\n return v === true\n}\n\nfunction isFalse (v) {\n return v === false\n}\n\n/**\n * Check if value is primitive.\n */\nfunction isPrimitive (value) {\n return (\n typeof value === 'string' ||\n typeof value === 'number' ||\n // $flow-disable-line\n typeof value === 'symbol' ||\n typeof value === 'boolean'\n )\n}\n\n/**\n * Quick object check - this is primarily used to tell\n * Objects from primitive values when we know the value\n * is a JSON-compliant type.\n */\nfunction isObject (obj) {\n return obj !== null && typeof obj === 'object'\n}\n\n/**\n * Get the raw type string of a value, e.g., [object Object].\n */\nvar _toString = Object.prototype.toString;\n\nfunction toRawType (value) {\n return _toString.call(value).slice(8, -1)\n}\n\n/**\n * Strict object type check. Only returns true\n * for plain JavaScript objects.\n */\nfunction isPlainObject (obj) {\n return _toString.call(obj) === '[object Object]'\n}\n\nfunction isRegExp (v) {\n return _toString.call(v) === '[object RegExp]'\n}\n\n/**\n * Check if val is a valid array index.\n */\nfunction isValidArrayIndex (val) {\n var n = parseFloat(String(val));\n return n >= 0 && Math.floor(n) === n && isFinite(val)\n}\n\nfunction isPromise (val) {\n return (\n isDef(val) &&\n typeof val.then === 'function' &&\n typeof val.catch === 'function'\n )\n}\n\n/**\n * Convert a value to a string that is actually rendered.\n */\nfunction toString (val) {\n return val == null\n ? ''\n : Array.isArray(val) || (isPlainObject(val) && val.toString === _toString)\n ? JSON.stringify(val, null, 2)\n : String(val)\n}\n\n/**\n * Convert an input value to a number for persistence.\n * If the conversion fails, return original string.\n */\nfunction toNumber (val) {\n var n = parseFloat(val);\n return isNaN(n) ? val : n\n}\n\n/**\n * Make a map and return a function for checking if a key\n * is in that map.\n */\nfunction makeMap (\n str,\n expectsLowerCase\n) {\n var map = Object.create(null);\n var list = str.split(',');\n for (var i = 0; i < list.length; i++) {\n map[list[i]] = true;\n }\n return expectsLowerCase\n ? function (val) { return map[val.toLowerCase()]; }\n : function (val) { return map[val]; }\n}\n\n/**\n * Check if a tag is a built-in tag.\n */\nvar isBuiltInTag = makeMap('slot,component', true);\n\n/**\n * Check if an attribute is a reserved attribute.\n */\nvar isReservedAttribute = makeMap('key,ref,slot,slot-scope,is');\n\n/**\n * Remove an item from an array.\n */\nfunction remove (arr, item) {\n if (arr.length) {\n var index = arr.indexOf(item);\n if (index > -1) {\n return arr.splice(index, 1)\n }\n }\n}\n\n/**\n * Check whether an object has the property.\n */\nvar hasOwnProperty = Object.prototype.hasOwnProperty;\nfunction hasOwn (obj, key) {\n return hasOwnProperty.call(obj, key)\n}\n\n/**\n * Create a cached version of a pure function.\n */\nfunction cached (fn) {\n var cache = Object.create(null);\n return (function cachedFn (str) {\n var hit = cache[str];\n return hit || (cache[str] = fn(str))\n })\n}\n\n/**\n * Camelize a hyphen-delimited string.\n */\nvar camelizeRE = /-(\\w)/g;\nvar camelize = cached(function (str) {\n return str.replace(camelizeRE, function (_, c) { return c ? c.toUpperCase() : ''; })\n});\n\n/**\n * Capitalize a string.\n */\nvar capitalize = cached(function (str) {\n return str.charAt(0).toUpperCase() + str.slice(1)\n});\n\n/**\n * Hyphenate a camelCase string.\n */\nvar hyphenateRE = /\\B([A-Z])/g;\nvar hyphenate = cached(function (str) {\n return str.replace(hyphenateRE, '-$1').toLowerCase()\n});\n\n/**\n * Simple bind polyfill for environments that do not support it,\n * e.g., PhantomJS 1.x. Technically, we don't need this anymore\n * since native bind is now performant enough in most browsers.\n * But removing it would mean breaking code that was able to run in\n * PhantomJS 1.x, so this must be kept for backward compatibility.\n */\n\n/* istanbul ignore next */\nfunction polyfillBind (fn, ctx) {\n function boundFn (a) {\n var l = arguments.length;\n return l\n ? l > 1\n ? fn.apply(ctx, arguments)\n : fn.call(ctx, a)\n : fn.call(ctx)\n }\n\n boundFn._length = fn.length;\n return boundFn\n}\n\nfunction nativeBind (fn, ctx) {\n return fn.bind(ctx)\n}\n\nvar bind = Function.prototype.bind\n ? nativeBind\n : polyfillBind;\n\n/**\n * Convert an Array-like object to a real Array.\n */\nfunction toArray (list, start) {\n start = start || 0;\n var i = list.length - start;\n var ret = new Array(i);\n while (i--) {\n ret[i] = list[i + start];\n }\n return ret\n}\n\n/**\n * Mix properties into target object.\n */\nfunction extend (to, _from) {\n for (var key in _from) {\n to[key] = _from[key];\n }\n return to\n}\n\n/**\n * Merge an Array of Objects into a single Object.\n */\nfunction toObject (arr) {\n var res = {};\n for (var i = 0; i < arr.length; i++) {\n if (arr[i]) {\n extend(res, arr[i]);\n }\n }\n return res\n}\n\n/* eslint-disable no-unused-vars */\n\n/**\n * Perform no operation.\n * Stubbing args to make Flow happy without leaving useless transpiled code\n * with ...rest (https://flow.org/blog/2017/05/07/Strict-Function-Call-Arity/).\n */\nfunction noop (a, b, c) {}\n\n/**\n * Always return false.\n */\nvar no = function (a, b, c) { return false; };\n\n/* eslint-enable no-unused-vars */\n\n/**\n * Return the same value.\n */\nvar identity = function (_) { return _; };\n\n/**\n * Check if two values are loosely equal - that is,\n * if they are plain objects, do they have the same shape?\n */\nfunction looseEqual (a, b) {\n if (a === b) { return true }\n var isObjectA = isObject(a);\n var isObjectB = isObject(b);\n if (isObjectA && isObjectB) {\n try {\n var isArrayA = Array.isArray(a);\n var isArrayB = Array.isArray(b);\n if (isArrayA && isArrayB) {\n return a.length === b.length && a.every(function (e, i) {\n return looseEqual(e, b[i])\n })\n } else if (a instanceof Date && b instanceof Date) {\n return a.getTime() === b.getTime()\n } else if (!isArrayA && !isArrayB) {\n var keysA = Object.keys(a);\n var keysB = Object.keys(b);\n return keysA.length === keysB.length && keysA.every(function (key) {\n return looseEqual(a[key], b[key])\n })\n } else {\n /* istanbul ignore next */\n return false\n }\n } catch (e) {\n /* istanbul ignore next */\n return false\n }\n } else if (!isObjectA && !isObjectB) {\n return String(a) === String(b)\n } else {\n return false\n }\n}\n\n/**\n * Return the first index at which a loosely equal value can be\n * found in the array (if value is a plain object, the array must\n * contain an object of the same shape), or -1 if it is not present.\n */\nfunction looseIndexOf (arr, val) {\n for (var i = 0; i < arr.length; i++) {\n if (looseEqual(arr[i], val)) { return i }\n }\n return -1\n}\n\n/**\n * Ensure a function is called only once.\n */\nfunction once (fn) {\n var called = false;\n return function () {\n if (!called) {\n called = true;\n fn.apply(this, arguments);\n }\n }\n}\n\nvar ASSET_TYPES = [\n 'component',\n 'directive',\n 'filter'\n];\n\nvar LIFECYCLE_HOOKS = [\n 'beforeCreate',\n 'created',\n 'beforeMount',\n 'mounted',\n 'beforeUpdate',\n 'updated',\n 'beforeDestroy',\n 'destroyed',\n 'activated',\n 'deactivated',\n 'errorCaptured',\n 'serverPrefetch'\n];\n\n/* */\n\n\n\nvar config = ({\n /**\n * Option merge strategies (used in core/util/options)\n */\n // $flow-disable-line\n optionMergeStrategies: Object.create(null),\n\n /**\n * Whether to suppress warnings.\n */\n silent: false,\n\n /**\n * Show production mode tip message on boot?\n */\n productionTip: process.env.NODE_ENV !== 'production',\n\n /**\n * Whether to enable devtools\n */\n devtools: process.env.NODE_ENV !== 'production',\n\n /**\n * Whether to record perf\n */\n performance: false,\n\n /**\n * Error handler for watcher errors\n */\n errorHandler: null,\n\n /**\n * Warn handler for watcher warns\n */\n warnHandler: null,\n\n /**\n * Ignore certain custom elements\n */\n ignoredElements: [],\n\n /**\n * Custom user key aliases for v-on\n */\n // $flow-disable-line\n keyCodes: Object.create(null),\n\n /**\n * Check if a tag is reserved so that it cannot be registered as a\n * component. This is platform-dependent and may be overwritten.\n */\n isReservedTag: no,\n\n /**\n * Check if an attribute is reserved so that it cannot be used as a component\n * prop. This is platform-dependent and may be overwritten.\n */\n isReservedAttr: no,\n\n /**\n * Check if a tag is an unknown element.\n * Platform-dependent.\n */\n isUnknownElement: no,\n\n /**\n * Get the namespace of an element\n */\n getTagNamespace: noop,\n\n /**\n * Parse the real tag name for the specific platform.\n */\n parsePlatformTagName: identity,\n\n /**\n * Check if an attribute must be bound using property, e.g. value\n * Platform-dependent.\n */\n mustUseProp: no,\n\n /**\n * Perform updates asynchronously. Intended to be used by Vue Test Utils\n * This will significantly reduce performance if set to false.\n */\n async: true,\n\n /**\n * Exposed for legacy reasons\n */\n _lifecycleHooks: LIFECYCLE_HOOKS\n});\n\n/* */\n\n/**\n * unicode letters used for parsing html tags, component names and property paths.\n * using https://www.w3.org/TR/html53/semantics-scripting.html#potentialcustomelementname\n * skipping \\u10000-\\uEFFFF due to it freezing up PhantomJS\n */\nvar unicodeRegExp = /a-zA-Z\\u00B7\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u203F-\\u2040\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD/;\n\n/**\n * Check if a string starts with $ or _\n */\nfunction isReserved (str) {\n var c = (str + '').charCodeAt(0);\n return c === 0x24 || c === 0x5F\n}\n\n/**\n * Define a property.\n */\nfunction def (obj, key, val, enumerable) {\n Object.defineProperty(obj, key, {\n value: val,\n enumerable: !!enumerable,\n writable: true,\n configurable: true\n });\n}\n\n/**\n * Parse simple path.\n */\nvar bailRE = new RegExp((\"[^\" + (unicodeRegExp.source) + \".$_\\\\d]\"));\nfunction parsePath (path) {\n if (bailRE.test(path)) {\n return\n }\n var segments = path.split('.');\n return function (obj) {\n for (var i = 0; i < segments.length; i++) {\n if (!obj) { return }\n obj = obj[segments[i]];\n }\n return obj\n }\n}\n\n/* */\n\n// can we use __proto__?\nvar hasProto = '__proto__' in {};\n\n// Browser environment sniffing\nvar inBrowser = typeof window !== 'undefined';\nvar inWeex = typeof WXEnvironment !== 'undefined' && !!WXEnvironment.platform;\nvar weexPlatform = inWeex && WXEnvironment.platform.toLowerCase();\nvar UA = inBrowser && window.navigator.userAgent.toLowerCase();\nvar isIE = UA && /msie|trident/.test(UA);\nvar isIE9 = UA && UA.indexOf('msie 9.0') > 0;\nvar isEdge = UA && UA.indexOf('edge/') > 0;\nvar isAndroid = (UA && UA.indexOf('android') > 0) || (weexPlatform === 'android');\nvar isIOS = (UA && /iphone|ipad|ipod|ios/.test(UA)) || (weexPlatform === 'ios');\nvar isChrome = UA && /chrome\\/\\d+/.test(UA) && !isEdge;\nvar isPhantomJS = UA && /phantomjs/.test(UA);\nvar isFF = UA && UA.match(/firefox\\/(\\d+)/);\n\n// Firefox has a \"watch\" function on Object.prototype...\nvar nativeWatch = ({}).watch;\nif (inBrowser) {\n try {\n var opts = {};\n Object.defineProperty(opts, 'passive', ({\n get: function get () {\n }\n })); // https://github.com/facebook/flow/issues/285\n window.addEventListener('test-passive', null, opts);\n } catch (e) {}\n}\n\n// this needs to be lazy-evaled because vue may be required before\n// vue-server-renderer can set VUE_ENV\nvar _isServer;\nvar isServerRendering = function () {\n if (_isServer === undefined) {\n /* istanbul ignore if */\n if (!inBrowser && !inWeex && typeof global !== 'undefined') {\n // detect presence of vue-server-renderer and avoid\n // Webpack shimming the process\n _isServer = global['process'] && global['process'].env.VUE_ENV === 'server';\n } else {\n _isServer = false;\n }\n }\n return _isServer\n};\n\n// detect devtools\nvar devtools = inBrowser && window.__VUE_DEVTOOLS_GLOBAL_HOOK__;\n\n/* istanbul ignore next */\nfunction isNative (Ctor) {\n return typeof Ctor === 'function' && /native code/.test(Ctor.toString())\n}\n\nvar hasSymbol =\n typeof Symbol !== 'undefined' && isNative(Symbol) &&\n typeof Reflect !== 'undefined' && isNative(Reflect.ownKeys);\n\nvar _Set;\n/* istanbul ignore if */ // $flow-disable-line\nif (typeof Set !== 'undefined' && isNative(Set)) {\n // use native Set when available.\n _Set = Set;\n} else {\n // a non-standard Set polyfill that only works with primitive keys.\n _Set = /*@__PURE__*/(function () {\n function Set () {\n this.set = Object.create(null);\n }\n Set.prototype.has = function has (key) {\n return this.set[key] === true\n };\n Set.prototype.add = function add (key) {\n this.set[key] = true;\n };\n Set.prototype.clear = function clear () {\n this.set = Object.create(null);\n };\n\n return Set;\n }());\n}\n\n/* */\n\nvar warn = noop;\nvar tip = noop;\nvar generateComponentTrace = (noop); // work around flow check\nvar formatComponentName = (noop);\n\nif (process.env.NODE_ENV !== 'production') {\n var hasConsole = typeof console !== 'undefined';\n var classifyRE = /(?:^|[-_])(\\w)/g;\n var classify = function (str) { return str\n .replace(classifyRE, function (c) { return c.toUpperCase(); })\n .replace(/[-_]/g, ''); };\n\n warn = function (msg, vm) {\n var trace = vm ? generateComponentTrace(vm) : '';\n\n if (config.warnHandler) {\n config.warnHandler.call(null, msg, vm, trace);\n } else if (hasConsole && (!config.silent)) {\n console.error((\"[Vue warn]: \" + msg + trace));\n }\n };\n\n tip = function (msg, vm) {\n if (hasConsole && (!config.silent)) {\n console.warn(\"[Vue tip]: \" + msg + (\n vm ? generateComponentTrace(vm) : ''\n ));\n }\n };\n\n formatComponentName = function (vm, includeFile) {\n if (vm.$root === vm) {\n if (vm.$options && vm.$options.__file) { // fixed by xxxxxx\n return ('') + vm.$options.__file\n }\n return ''\n }\n var options = typeof vm === 'function' && vm.cid != null\n ? vm.options\n : vm._isVue\n ? vm.$options || vm.constructor.options\n : vm;\n var name = options.name || options._componentTag;\n var file = options.__file;\n if (!name && file) {\n var match = file.match(/([^/\\\\]+)\\.vue$/);\n name = match && match[1];\n }\n\n return (\n (name ? (\"<\" + (classify(name)) + \">\") : \"\") +\n (file && includeFile !== false ? (\" at \" + file) : '')\n )\n };\n\n var repeat = function (str, n) {\n var res = '';\n while (n) {\n if (n % 2 === 1) { res += str; }\n if (n > 1) { str += str; }\n n >>= 1;\n }\n return res\n };\n\n generateComponentTrace = function (vm) {\n if (vm._isVue && vm.$parent) {\n var tree = [];\n var currentRecursiveSequence = 0;\n while (vm && vm.$options.name !== 'PageBody') {\n if (tree.length > 0) {\n var last = tree[tree.length - 1];\n if (last.constructor === vm.constructor) {\n currentRecursiveSequence++;\n vm = vm.$parent;\n continue\n } else if (currentRecursiveSequence > 0) {\n tree[tree.length - 1] = [last, currentRecursiveSequence];\n currentRecursiveSequence = 0;\n }\n }\n !vm.$options.isReserved && tree.push(vm);\n vm = vm.$parent;\n }\n return '\\n\\nfound in\\n\\n' + tree\n .map(function (vm, i) { return (\"\" + (i === 0 ? '---> ' : repeat(' ', 5 + i * 2)) + (Array.isArray(vm)\n ? ((formatComponentName(vm[0])) + \"... (\" + (vm[1]) + \" recursive calls)\")\n : formatComponentName(vm))); })\n .join('\\n')\n } else {\n return (\"\\n\\n(found in \" + (formatComponentName(vm)) + \")\")\n }\n };\n}\n\n/* */\n\nvar uid = 0;\n\n/**\n * A dep is an observable that can have multiple\n * directives subscribing to it.\n */\nvar Dep = function Dep () {\n this.id = uid++;\n this.subs = [];\n};\n\nDep.prototype.addSub = function addSub (sub) {\n this.subs.push(sub);\n};\n\nDep.prototype.removeSub = function removeSub (sub) {\n remove(this.subs, sub);\n};\n\nDep.prototype.depend = function depend () {\n if (Dep.SharedObject.target) {\n Dep.SharedObject.target.addDep(this);\n }\n};\n\nDep.prototype.notify = function notify () {\n // stabilize the subscriber list first\n var subs = this.subs.slice();\n if (process.env.NODE_ENV !== 'production' && !config.async) {\n // subs aren't sorted in scheduler if not running async\n // we need to sort them now to make sure they fire in correct\n // order\n subs.sort(function (a, b) { return a.id - b.id; });\n }\n for (var i = 0, l = subs.length; i < l; i++) {\n subs[i].update();\n }\n};\n\n// The current target watcher being evaluated.\n// This is globally unique because only one watcher\n// can be evaluated at a time.\n// fixed by xxxxxx (nvue shared vuex)\n/* eslint-disable no-undef */\nDep.SharedObject = {};\nDep.SharedObject.target = null;\nDep.SharedObject.targetStack = [];\n\nfunction pushTarget (target) {\n Dep.SharedObject.targetStack.push(target);\n Dep.SharedObject.target = target;\n Dep.target = target;\n}\n\nfunction popTarget () {\n Dep.SharedObject.targetStack.pop();\n Dep.SharedObject.target = Dep.SharedObject.targetStack[Dep.SharedObject.targetStack.length - 1];\n Dep.target = Dep.SharedObject.target;\n}\n\n/* */\n\nvar VNode = function VNode (\n tag,\n data,\n children,\n text,\n elm,\n context,\n componentOptions,\n asyncFactory\n) {\n this.tag = tag;\n this.data = data;\n this.children = children;\n this.text = text;\n this.elm = elm;\n this.ns = undefined;\n this.context = context;\n this.fnContext = undefined;\n this.fnOptions = undefined;\n this.fnScopeId = undefined;\n this.key = data && data.key;\n this.componentOptions = componentOptions;\n this.componentInstance = undefined;\n this.parent = undefined;\n this.raw = false;\n this.isStatic = false;\n this.isRootInsert = true;\n this.isComment = false;\n this.isCloned = false;\n this.isOnce = false;\n this.asyncFactory = asyncFactory;\n this.asyncMeta = undefined;\n this.isAsyncPlaceholder = false;\n};\n\nvar prototypeAccessors = { child: { configurable: true } };\n\n// DEPRECATED: alias for componentInstance for backwards compat.\n/* istanbul ignore next */\nprototypeAccessors.child.get = function () {\n return this.componentInstance\n};\n\nObject.defineProperties( VNode.prototype, prototypeAccessors );\n\nvar createEmptyVNode = function (text) {\n if ( text === void 0 ) text = '';\n\n var node = new VNode();\n node.text = text;\n node.isComment = true;\n return node\n};\n\nfunction createTextVNode (val) {\n return new VNode(undefined, undefined, undefined, String(val))\n}\n\n// optimized shallow clone\n// used for static nodes and slot nodes because they may be reused across\n// multiple renders, cloning them avoids errors when DOM manipulations rely\n// on their elm reference.\nfunction cloneVNode (vnode) {\n var cloned = new VNode(\n vnode.tag,\n vnode.data,\n // #7975\n // clone children array to avoid mutating original in case of cloning\n // a child.\n vnode.children && vnode.children.slice(),\n vnode.text,\n vnode.elm,\n vnode.context,\n vnode.componentOptions,\n vnode.asyncFactory\n );\n cloned.ns = vnode.ns;\n cloned.isStatic = vnode.isStatic;\n cloned.key = vnode.key;\n cloned.isComment = vnode.isComment;\n cloned.fnContext = vnode.fnContext;\n cloned.fnOptions = vnode.fnOptions;\n cloned.fnScopeId = vnode.fnScopeId;\n cloned.asyncMeta = vnode.asyncMeta;\n cloned.isCloned = true;\n return cloned\n}\n\n/*\n * not type checking this file because flow doesn't play well with\n * dynamically accessing methods on Array prototype\n */\n\nvar arrayProto = Array.prototype;\nvar arrayMethods = Object.create(arrayProto);\n\nvar methodsToPatch = [\n 'push',\n 'pop',\n 'shift',\n 'unshift',\n 'splice',\n 'sort',\n 'reverse'\n];\n\n/**\n * Intercept mutating methods and emit events\n */\nmethodsToPatch.forEach(function (method) {\n // cache original method\n var original = arrayProto[method];\n def(arrayMethods, method, function mutator () {\n var args = [], len = arguments.length;\n while ( len-- ) args[ len ] = arguments[ len ];\n\n var result = original.apply(this, args);\n var ob = this.__ob__;\n var inserted;\n switch (method) {\n case 'push':\n case 'unshift':\n inserted = args;\n break\n case 'splice':\n inserted = args.slice(2);\n break\n }\n if (inserted) { ob.observeArray(inserted); }\n // notify change\n ob.dep.notify();\n return result\n });\n});\n\n/* */\n\nvar arrayKeys = Object.getOwnPropertyNames(arrayMethods);\n\n/**\n * In some cases we may want to disable observation inside a component's\n * update computation.\n */\nvar shouldObserve = true;\n\nfunction toggleObserving (value) {\n shouldObserve = value;\n}\n\n/**\n * Observer class that is attached to each observed\n * object. Once attached, the observer converts the target\n * object's property keys into getter/setters that\n * collect dependencies and dispatch updates.\n */\nvar Observer = function Observer (value) {\n this.value = value;\n this.dep = new Dep();\n this.vmCount = 0;\n def(value, '__ob__', this);\n if (Array.isArray(value)) {\n if (hasProto) {\n {// fixed by xxxxxx 微信小程序使用 plugins 之后,数组方法被直接挂载到了数组对象上,需要执行 copyAugment 逻辑\n if(value.push !== value.__proto__.push){\n copyAugment(value, arrayMethods, arrayKeys);\n } else {\n protoAugment(value, arrayMethods);\n }\n }\n } else {\n copyAugment(value, arrayMethods, arrayKeys);\n }\n this.observeArray(value);\n } else {\n this.walk(value);\n }\n};\n\n/**\n * Walk through all properties and convert them into\n * getter/setters. This method should only be called when\n * value type is Object.\n */\nObserver.prototype.walk = function walk (obj) {\n var keys = Object.keys(obj);\n for (var i = 0; i < keys.length; i++) {\n defineReactive$$1(obj, keys[i]);\n }\n};\n\n/**\n * Observe a list of Array items.\n */\nObserver.prototype.observeArray = function observeArray (items) {\n for (var i = 0, l = items.length; i < l; i++) {\n observe(items[i]);\n }\n};\n\n// helpers\n\n/**\n * Augment a target Object or Array by intercepting\n * the prototype chain using __proto__\n */\nfunction protoAugment (target, src) {\n /* eslint-disable no-proto */\n target.__proto__ = src;\n /* eslint-enable no-proto */\n}\n\n/**\n * Augment a target Object or Array by defining\n * hidden properties.\n */\n/* istanbul ignore next */\nfunction copyAugment (target, src, keys) {\n for (var i = 0, l = keys.length; i < l; i++) {\n var key = keys[i];\n def(target, key, src[key]);\n }\n}\n\n/**\n * Attempt to create an observer instance for a value,\n * returns the new observer if successfully observed,\n * or the existing observer if the value already has one.\n */\nfunction observe (value, asRootData) {\n if (!isObject(value) || value instanceof VNode) {\n return\n }\n var ob;\n if (hasOwn(value, '__ob__') && value.__ob__ instanceof Observer) {\n ob = value.__ob__;\n } else if (\n shouldObserve &&\n !isServerRendering() &&\n (Array.isArray(value) || isPlainObject(value)) &&\n Object.isExtensible(value) &&\n !value._isVue\n ) {\n ob = new Observer(value);\n }\n if (asRootData && ob) {\n ob.vmCount++;\n }\n return ob\n}\n\n/**\n * Define a reactive property on an Object.\n */\nfunction defineReactive$$1 (\n obj,\n key,\n val,\n customSetter,\n shallow\n) {\n var dep = new Dep();\n\n var property = Object.getOwnPropertyDescriptor(obj, key);\n if (property && property.configurable === false) {\n return\n }\n\n // cater for pre-defined getter/setters\n var getter = property && property.get;\n var setter = property && property.set;\n if ((!getter || setter) && arguments.length === 2) {\n val = obj[key];\n }\n\n var childOb = !shallow && observe(val);\n Object.defineProperty(obj, key, {\n enumerable: true,\n configurable: true,\n get: function reactiveGetter () {\n var value = getter ? getter.call(obj) : val;\n if (Dep.SharedObject.target) { // fixed by xxxxxx\n dep.depend();\n if (childOb) {\n childOb.dep.depend();\n if (Array.isArray(value)) {\n dependArray(value);\n }\n }\n }\n return value\n },\n set: function reactiveSetter (newVal) {\n var value = getter ? getter.call(obj) : val;\n /* eslint-disable no-self-compare */\n if (newVal === value || (newVal !== newVal && value !== value)) {\n return\n }\n /* eslint-enable no-self-compare */\n if (process.env.NODE_ENV !== 'production' && customSetter) {\n customSetter();\n }\n // #7981: for accessor properties without setter\n if (getter && !setter) { return }\n if (setter) {\n setter.call(obj, newVal);\n } else {\n val = newVal;\n }\n childOb = !shallow && observe(newVal);\n dep.notify();\n }\n });\n}\n\n/**\n * Set a property on an object. Adds the new property and\n * triggers change notification if the property doesn't\n * already exist.\n */\nfunction set (target, key, val) {\n if (process.env.NODE_ENV !== 'production' &&\n (isUndef(target) || isPrimitive(target))\n ) {\n warn((\"Cannot set reactive property on undefined, null, or primitive value: \" + ((target))));\n }\n if (Array.isArray(target) && isValidArrayIndex(key)) {\n target.length = Math.max(target.length, key);\n target.splice(key, 1, val);\n return val\n }\n if (key in target && !(key in Object.prototype)) {\n target[key] = val;\n return val\n }\n var ob = (target).__ob__;\n if (target._isVue || (ob && ob.vmCount)) {\n process.env.NODE_ENV !== 'production' && warn(\n 'Avoid adding reactive properties to a Vue instance or its root $data ' +\n 'at runtime - declare it upfront in the data option.'\n );\n return val\n }\n if (!ob) {\n target[key] = val;\n return val\n }\n defineReactive$$1(ob.value, key, val);\n ob.dep.notify();\n return val\n}\n\n/**\n * Delete a property and trigger change if necessary.\n */\nfunction del (target, key) {\n if (process.env.NODE_ENV !== 'production' &&\n (isUndef(target) || isPrimitive(target))\n ) {\n warn((\"Cannot delete reactive property on undefined, null, or primitive value: \" + ((target))));\n }\n if (Array.isArray(target) && isValidArrayIndex(key)) {\n target.splice(key, 1);\n return\n }\n var ob = (target).__ob__;\n if (target._isVue || (ob && ob.vmCount)) {\n process.env.NODE_ENV !== 'production' && warn(\n 'Avoid deleting properties on a Vue instance or its root $data ' +\n '- just set it to null.'\n );\n return\n }\n if (!hasOwn(target, key)) {\n return\n }\n delete target[key];\n if (!ob) {\n return\n }\n ob.dep.notify();\n}\n\n/**\n * Collect dependencies on array elements when the array is touched, since\n * we cannot intercept array element access like property getters.\n */\nfunction dependArray (value) {\n for (var e = (void 0), i = 0, l = value.length; i < l; i++) {\n e = value[i];\n e && e.__ob__ && e.__ob__.dep.depend();\n if (Array.isArray(e)) {\n dependArray(e);\n }\n }\n}\n\n/* */\n\n/**\n * Option overwriting strategies are functions that handle\n * how to merge a parent option value and a child option\n * value into the final value.\n */\nvar strats = config.optionMergeStrategies;\n\n/**\n * Options with restrictions\n */\nif (process.env.NODE_ENV !== 'production') {\n strats.el = strats.propsData = function (parent, child, vm, key) {\n if (!vm) {\n warn(\n \"option \\\"\" + key + \"\\\" can only be used during instance \" +\n 'creation with the `new` keyword.'\n );\n }\n return defaultStrat(parent, child)\n };\n}\n\n/**\n * Helper that recursively merges two data objects together.\n */\nfunction mergeData (to, from) {\n if (!from) { return to }\n var key, toVal, fromVal;\n\n var keys = hasSymbol\n ? Reflect.ownKeys(from)\n : Object.keys(from);\n\n for (var i = 0; i < keys.length; i++) {\n key = keys[i];\n // in case the object is already observed...\n if (key === '__ob__') { continue }\n toVal = to[key];\n fromVal = from[key];\n if (!hasOwn(to, key)) {\n set(to, key, fromVal);\n } else if (\n toVal !== fromVal &&\n isPlainObject(toVal) &&\n isPlainObject(fromVal)\n ) {\n mergeData(toVal, fromVal);\n }\n }\n return to\n}\n\n/**\n * Data\n */\nfunction mergeDataOrFn (\n parentVal,\n childVal,\n vm\n) {\n if (!vm) {\n // in a Vue.extend merge, both should be functions\n if (!childVal) {\n return parentVal\n }\n if (!parentVal) {\n return childVal\n }\n // when parentVal & childVal are both present,\n // we need to return a function that returns the\n // merged result of both functions... no need to\n // check if parentVal is a function here because\n // it has to be a function to pass previous merges.\n return function mergedDataFn () {\n return mergeData(\n typeof childVal === 'function' ? childVal.call(this, this) : childVal,\n typeof parentVal === 'function' ? parentVal.call(this, this) : parentVal\n )\n }\n } else {\n return function mergedInstanceDataFn () {\n // instance merge\n var instanceData = typeof childVal === 'function'\n ? childVal.call(vm, vm)\n : childVal;\n var defaultData = typeof parentVal === 'function'\n ? parentVal.call(vm, vm)\n : parentVal;\n if (instanceData) {\n return mergeData(instanceData, defaultData)\n } else {\n return defaultData\n }\n }\n }\n}\n\nstrats.data = function (\n parentVal,\n childVal,\n vm\n) {\n if (!vm) {\n if (childVal && typeof childVal !== 'function') {\n process.env.NODE_ENV !== 'production' && warn(\n 'The \"data\" option should be a function ' +\n 'that returns a per-instance value in component ' +\n 'definitions.',\n vm\n );\n\n return parentVal\n }\n return mergeDataOrFn(parentVal, childVal)\n }\n\n return mergeDataOrFn(parentVal, childVal, vm)\n};\n\n/**\n * Hooks and props are merged as arrays.\n */\nfunction mergeHook (\n parentVal,\n childVal\n) {\n var res = childVal\n ? parentVal\n ? parentVal.concat(childVal)\n : Array.isArray(childVal)\n ? childVal\n : [childVal]\n : parentVal;\n return res\n ? dedupeHooks(res)\n : res\n}\n\nfunction dedupeHooks (hooks) {\n var res = [];\n for (var i = 0; i < hooks.length; i++) {\n if (res.indexOf(hooks[i]) === -1) {\n res.push(hooks[i]);\n }\n }\n return res\n}\n\nLIFECYCLE_HOOKS.forEach(function (hook) {\n strats[hook] = mergeHook;\n});\n\n/**\n * Assets\n *\n * When a vm is present (instance creation), we need to do\n * a three-way merge between constructor options, instance\n * options and parent options.\n */\nfunction mergeAssets (\n parentVal,\n childVal,\n vm,\n key\n) {\n var res = Object.create(parentVal || null);\n if (childVal) {\n process.env.NODE_ENV !== 'production' && assertObjectType(key, childVal, vm);\n return extend(res, childVal)\n } else {\n return res\n }\n}\n\nASSET_TYPES.forEach(function (type) {\n strats[type + 's'] = mergeAssets;\n});\n\n/**\n * Watchers.\n *\n * Watchers hashes should not overwrite one\n * another, so we merge them as arrays.\n */\nstrats.watch = function (\n parentVal,\n childVal,\n vm,\n key\n) {\n // work around Firefox's Object.prototype.watch...\n if (parentVal === nativeWatch) { parentVal = undefined; }\n if (childVal === nativeWatch) { childVal = undefined; }\n /* istanbul ignore if */\n if (!childVal) { return Object.create(parentVal || null) }\n if (process.env.NODE_ENV !== 'production') {\n assertObjectType(key, childVal, vm);\n }\n if (!parentVal) { return childVal }\n var ret = {};\n extend(ret, parentVal);\n for (var key$1 in childVal) {\n var parent = ret[key$1];\n var child = childVal[key$1];\n if (parent && !Array.isArray(parent)) {\n parent = [parent];\n }\n ret[key$1] = parent\n ? parent.concat(child)\n : Array.isArray(child) ? child : [child];\n }\n return ret\n};\n\n/**\n * Other object hashes.\n */\nstrats.props =\nstrats.methods =\nstrats.inject =\nstrats.computed = function (\n parentVal,\n childVal,\n vm,\n key\n) {\n if (childVal && process.env.NODE_ENV !== 'production') {\n assertObjectType(key, childVal, vm);\n }\n if (!parentVal) { return childVal }\n var ret = Object.create(null);\n extend(ret, parentVal);\n if (childVal) { extend(ret, childVal); }\n return ret\n};\nstrats.provide = mergeDataOrFn;\n\n/**\n * Default strategy.\n */\nvar defaultStrat = function (parentVal, childVal) {\n return childVal === undefined\n ? parentVal\n : childVal\n};\n\n/**\n * Validate component names\n */\nfunction checkComponents (options) {\n for (var key in options.components) {\n validateComponentName(key);\n }\n}\n\nfunction validateComponentName (name) {\n if (!new RegExp((\"^[a-zA-Z][\\\\-\\\\.0-9_\" + (unicodeRegExp.source) + \"]*$\")).test(name)) {\n warn(\n 'Invalid component name: \"' + name + '\". Component names ' +\n 'should conform to valid custom element name in html5 specification.'\n );\n }\n if (isBuiltInTag(name) || config.isReservedTag(name)) {\n warn(\n 'Do not use built-in or reserved HTML elements as component ' +\n 'id: ' + name\n );\n }\n}\n\n/**\n * Ensure all props option syntax are normalized into the\n * Object-based format.\n */\nfunction normalizeProps (options, vm) {\n var props = options.props;\n if (!props) { return }\n var res = {};\n var i, val, name;\n if (Array.isArray(props)) {\n i = props.length;\n while (i--) {\n val = props[i];\n if (typeof val === 'string') {\n name = camelize(val);\n res[name] = { type: null };\n } else if (process.env.NODE_ENV !== 'production') {\n warn('props must be strings when using array syntax.');\n }\n }\n } else if (isPlainObject(props)) {\n for (var key in props) {\n val = props[key];\n name = camelize(key);\n res[name] = isPlainObject(val)\n ? val\n : { type: val };\n }\n } else if (process.env.NODE_ENV !== 'production') {\n warn(\n \"Invalid value for option \\\"props\\\": expected an Array or an Object, \" +\n \"but got \" + (toRawType(props)) + \".\",\n vm\n );\n }\n options.props = res;\n}\n\n/**\n * Normalize all injections into Object-based format\n */\nfunction normalizeInject (options, vm) {\n var inject = options.inject;\n if (!inject) { return }\n var normalized = options.inject = {};\n if (Array.isArray(inject)) {\n for (var i = 0; i < inject.length; i++) {\n normalized[inject[i]] = { from: inject[i] };\n }\n } else if (isPlainObject(inject)) {\n for (var key in inject) {\n var val = inject[key];\n normalized[key] = isPlainObject(val)\n ? extend({ from: key }, val)\n : { from: val };\n }\n } else if (process.env.NODE_ENV !== 'production') {\n warn(\n \"Invalid value for option \\\"inject\\\": expected an Array or an Object, \" +\n \"but got \" + (toRawType(inject)) + \".\",\n vm\n );\n }\n}\n\n/**\n * Normalize raw function directives into object format.\n */\nfunction normalizeDirectives (options) {\n var dirs = options.directives;\n if (dirs) {\n for (var key in dirs) {\n var def$$1 = dirs[key];\n if (typeof def$$1 === 'function') {\n dirs[key] = { bind: def$$1, update: def$$1 };\n }\n }\n }\n}\n\nfunction assertObjectType (name, value, vm) {\n if (!isPlainObject(value)) {\n warn(\n \"Invalid value for option \\\"\" + name + \"\\\": expected an Object, \" +\n \"but got \" + (toRawType(value)) + \".\",\n vm\n );\n }\n}\n\n/**\n * Merge two option objects into a new one.\n * Core utility used in both instantiation and inheritance.\n */\nfunction mergeOptions (\n parent,\n child,\n vm\n) {\n if (process.env.NODE_ENV !== 'production') {\n checkComponents(child);\n }\n\n if (typeof child === 'function') {\n child = child.options;\n }\n\n normalizeProps(child, vm);\n normalizeInject(child, vm);\n normalizeDirectives(child);\n\n // Apply extends and mixins on the child options,\n // but only if it is a raw options object that isn't\n // the result of another mergeOptions call.\n // Only merged options has the _base property.\n if (!child._base) {\n if (child.extends) {\n parent = mergeOptions(parent, child.extends, vm);\n }\n if (child.mixins) {\n for (var i = 0, l = child.mixins.length; i < l; i++) {\n parent = mergeOptions(parent, child.mixins[i], vm);\n }\n }\n }\n\n var options = {};\n var key;\n for (key in parent) {\n mergeField(key);\n }\n for (key in child) {\n if (!hasOwn(parent, key)) {\n mergeField(key);\n }\n }\n function mergeField (key) {\n var strat = strats[key] || defaultStrat;\n options[key] = strat(parent[key], child[key], vm, key);\n }\n return options\n}\n\n/**\n * Resolve an asset.\n * This function is used because child instances need access\n * to assets defined in its ancestor chain.\n */\nfunction resolveAsset (\n options,\n type,\n id,\n warnMissing\n) {\n /* istanbul ignore if */\n if (typeof id !== 'string') {\n return\n }\n var assets = options[type];\n // check local registration variations first\n if (hasOwn(assets, id)) { return assets[id] }\n var camelizedId = camelize(id);\n if (hasOwn(assets, camelizedId)) { return assets[camelizedId] }\n var PascalCaseId = capitalize(camelizedId);\n if (hasOwn(assets, PascalCaseId)) { return assets[PascalCaseId] }\n // fallback to prototype chain\n var res = assets[id] || assets[camelizedId] || assets[PascalCaseId];\n if (process.env.NODE_ENV !== 'production' && warnMissing && !res) {\n warn(\n 'Failed to resolve ' + type.slice(0, -1) + ': ' + id,\n options\n );\n }\n return res\n}\n\n/* */\n\n\n\nfunction validateProp (\n key,\n propOptions,\n propsData,\n vm\n) {\n var prop = propOptions[key];\n var absent = !hasOwn(propsData, key);\n var value = propsData[key];\n // boolean casting\n var booleanIndex = getTypeIndex(Boolean, prop.type);\n if (booleanIndex > -1) {\n if (absent && !hasOwn(prop, 'default')) {\n value = false;\n } else if (value === '' || value === hyphenate(key)) {\n // only cast empty string / same name to boolean if\n // boolean has higher priority\n var stringIndex = getTypeIndex(String, prop.type);\n if (stringIndex < 0 || booleanIndex < stringIndex) {\n value = true;\n }\n }\n }\n // check default value\n if (value === undefined) {\n value = getPropDefaultValue(vm, prop, key);\n // since the default value is a fresh copy,\n // make sure to observe it.\n var prevShouldObserve = shouldObserve;\n toggleObserving(true);\n observe(value);\n toggleObserving(prevShouldObserve);\n }\n if (\n process.env.NODE_ENV !== 'production' &&\n // skip validation for weex recycle-list child component props\n !(false)\n ) {\n assertProp(prop, key, value, vm, absent);\n }\n return value\n}\n\n/**\n * Get the default value of a prop.\n */\nfunction getPropDefaultValue (vm, prop, key) {\n // no default, return undefined\n if (!hasOwn(prop, 'default')) {\n return undefined\n }\n var def = prop.default;\n // warn against non-factory defaults for Object & Array\n if (process.env.NODE_ENV !== 'production' && isObject(def)) {\n warn(\n 'Invalid default value for prop \"' + key + '\": ' +\n 'Props with type Object/Array must use a factory function ' +\n 'to return the default value.',\n vm\n );\n }\n // the raw prop value was also undefined from previous render,\n // return previous default value to avoid unnecessary watcher trigger\n if (vm && vm.$options.propsData &&\n vm.$options.propsData[key] === undefined &&\n vm._props[key] !== undefined\n ) {\n return vm._props[key]\n }\n // call factory function for non-Function types\n // a value is Function if its prototype is function even across different execution context\n return typeof def === 'function' && getType(prop.type) !== 'Function'\n ? def.call(vm)\n : def\n}\n\n/**\n * Assert whether a prop is valid.\n */\nfunction assertProp (\n prop,\n name,\n value,\n vm,\n absent\n) {\n if (prop.required && absent) {\n warn(\n 'Missing required prop: \"' + name + '\"',\n vm\n );\n return\n }\n if (value == null && !prop.required) {\n return\n }\n var type = prop.type;\n var valid = !type || type === true;\n var expectedTypes = [];\n if (type) {\n if (!Array.isArray(type)) {\n type = [type];\n }\n for (var i = 0; i < type.length && !valid; i++) {\n var assertedType = assertType(value, type[i]);\n expectedTypes.push(assertedType.expectedType || '');\n valid = assertedType.valid;\n }\n }\n\n if (!valid) {\n warn(\n getInvalidTypeMessage(name, value, expectedTypes),\n vm\n );\n return\n }\n var validator = prop.validator;\n if (validator) {\n if (!validator(value)) {\n warn(\n 'Invalid prop: custom validator check failed for prop \"' + name + '\".',\n vm\n );\n }\n }\n}\n\nvar simpleCheckRE = /^(String|Number|Boolean|Function|Symbol)$/;\n\nfunction assertType (value, type) {\n var valid;\n var expectedType = getType(type);\n if (simpleCheckRE.test(expectedType)) {\n var t = typeof value;\n valid = t === expectedType.toLowerCase();\n // for primitive wrapper objects\n if (!valid && t === 'object') {\n valid = value instanceof type;\n }\n } else if (expectedType === 'Object') {\n valid = isPlainObject(value);\n } else if (expectedType === 'Array') {\n valid = Array.isArray(value);\n } else {\n valid = value instanceof type;\n }\n return {\n valid: valid,\n expectedType: expectedType\n }\n}\n\n/**\n * Use function string name to check built-in types,\n * because a simple equality check will fail when running\n * across different vms / iframes.\n */\nfunction getType (fn) {\n var match = fn && fn.toString().match(/^\\s*function (\\w+)/);\n return match ? match[1] : ''\n}\n\nfunction isSameType (a, b) {\n return getType(a) === getType(b)\n}\n\nfunction getTypeIndex (type, expectedTypes) {\n if (!Array.isArray(expectedTypes)) {\n return isSameType(expectedTypes, type) ? 0 : -1\n }\n for (var i = 0, len = expectedTypes.length; i < len; i++) {\n if (isSameType(expectedTypes[i], type)) {\n return i\n }\n }\n return -1\n}\n\nfunction getInvalidTypeMessage (name, value, expectedTypes) {\n var message = \"Invalid prop: type check failed for prop \\\"\" + name + \"\\\".\" +\n \" Expected \" + (expectedTypes.map(capitalize).join(', '));\n var expectedType = expectedTypes[0];\n var receivedType = toRawType(value);\n var expectedValue = styleValue(value, expectedType);\n var receivedValue = styleValue(value, receivedType);\n // check if we need to specify expected value\n if (expectedTypes.length === 1 &&\n isExplicable(expectedType) &&\n !isBoolean(expectedType, receivedType)) {\n message += \" with value \" + expectedValue;\n }\n message += \", got \" + receivedType + \" \";\n // check if we need to specify received value\n if (isExplicable(receivedType)) {\n message += \"with value \" + receivedValue + \".\";\n }\n return message\n}\n\nfunction styleValue (value, type) {\n if (type === 'String') {\n return (\"\\\"\" + value + \"\\\"\")\n } else if (type === 'Number') {\n return (\"\" + (Number(value)))\n } else {\n return (\"\" + value)\n }\n}\n\nfunction isExplicable (value) {\n var explicitTypes = ['string', 'number', 'boolean'];\n return explicitTypes.some(function (elem) { return value.toLowerCase() === elem; })\n}\n\nfunction isBoolean () {\n var args = [], len = arguments.length;\n while ( len-- ) args[ len ] = arguments[ len ];\n\n return args.some(function (elem) { return elem.toLowerCase() === 'boolean'; })\n}\n\n/* */\n\nfunction handleError (err, vm, info) {\n // Deactivate deps tracking while processing error handler to avoid possible infinite rendering.\n // See: https://github.com/vuejs/vuex/issues/1505\n pushTarget();\n try {\n if (vm) {\n var cur = vm;\n while ((cur = cur.$parent)) {\n var hooks = cur.$options.errorCaptured;\n if (hooks) {\n for (var i = 0; i < hooks.length; i++) {\n try {\n var capture = hooks[i].call(cur, err, vm, info) === false;\n if (capture) { return }\n } catch (e) {\n globalHandleError(e, cur, 'errorCaptured hook');\n }\n }\n }\n }\n }\n globalHandleError(err, vm, info);\n } finally {\n popTarget();\n }\n}\n\nfunction invokeWithErrorHandling (\n handler,\n context,\n args,\n vm,\n info\n) {\n var res;\n try {\n res = args ? handler.apply(context, args) : handler.call(context);\n if (res && !res._isVue && isPromise(res) && !res._handled) {\n res.catch(function (e) { return handleError(e, vm, info + \" (Promise/async)\"); });\n // issue #9511\n // avoid catch triggering multiple times when nested calls\n res._handled = true;\n }\n } catch (e) {\n handleError(e, vm, info);\n }\n return res\n}\n\nfunction globalHandleError (err, vm, info) {\n if (config.errorHandler) {\n try {\n return config.errorHandler.call(null, err, vm, info)\n } catch (e) {\n // if the user intentionally throws the original error in the handler,\n // do not log it twice\n if (e !== err) {\n logError(e, null, 'config.errorHandler');\n }\n }\n }\n logError(err, vm, info);\n}\n\nfunction logError (err, vm, info) {\n if (process.env.NODE_ENV !== 'production') {\n warn((\"Error in \" + info + \": \\\"\" + (err.toString()) + \"\\\"\"), vm);\n }\n /* istanbul ignore else */\n if ((inBrowser || inWeex) && typeof console !== 'undefined') {\n console.error(err);\n } else {\n throw err\n }\n}\n\n/* */\n\nvar callbacks = [];\nvar pending = false;\n\nfunction flushCallbacks () {\n pending = false;\n var copies = callbacks.slice(0);\n callbacks.length = 0;\n for (var i = 0; i < copies.length; i++) {\n copies[i]();\n }\n}\n\n// Here we have async deferring wrappers using microtasks.\n// In 2.5 we used (macro) tasks (in combination with microtasks).\n// However, it has subtle problems when state is changed right before repaint\n// (e.g. #6813, out-in transitions).\n// Also, using (macro) tasks in event handler would cause some weird behaviors\n// that cannot be circumvented (e.g. #7109, #7153, #7546, #7834, #8109).\n// So we now use microtasks everywhere, again.\n// A major drawback of this tradeoff is that there are some scenarios\n// where microtasks have too high a priority and fire in between supposedly\n// sequential events (e.g. #4521, #6690, which have workarounds)\n// or even between bubbling of the same event (#6566).\nvar timerFunc;\n\n// The nextTick behavior leverages the microtask queue, which can be accessed\n// via either native Promise.then or MutationObserver.\n// MutationObserver has wider support, however it is seriously bugged in\n// UIWebView in iOS >= 9.3.3 when triggered in touch event handlers. It\n// completely stops working after triggering a few times... so, if native\n// Promise is available, we will use it:\n/* istanbul ignore next, $flow-disable-line */\nif (typeof Promise !== 'undefined' && isNative(Promise)) {\n var p = Promise.resolve();\n timerFunc = function () {\n p.then(flushCallbacks);\n // In problematic UIWebViews, Promise.then doesn't completely break, but\n // it can get stuck in a weird state where callbacks are pushed into the\n // microtask queue but the queue isn't being flushed, until the browser\n // needs to do some other work, e.g. handle a timer. Therefore we can\n // \"force\" the microtask queue to be flushed by adding an empty timer.\n if (isIOS) { setTimeout(noop); }\n };\n} else if (!isIE && typeof MutationObserver !== 'undefined' && (\n isNative(MutationObserver) ||\n // PhantomJS and iOS 7.x\n MutationObserver.toString() === '[object MutationObserverConstructor]'\n)) {\n // Use MutationObserver where native Promise is not available,\n // e.g. PhantomJS, iOS7, Android 4.4\n // (#6466 MutationObserver is unreliable in IE11)\n var counter = 1;\n var observer = new MutationObserver(flushCallbacks);\n var textNode = document.createTextNode(String(counter));\n observer.observe(textNode, {\n characterData: true\n });\n timerFunc = function () {\n counter = (counter + 1) % 2;\n textNode.data = String(counter);\n };\n} else if (typeof setImmediate !== 'undefined' && isNative(setImmediate)) {\n // Fallback to setImmediate.\n // Technically it leverages the (macro) task queue,\n // but it is still a better choice than setTimeout.\n timerFunc = function () {\n setImmediate(flushCallbacks);\n };\n} else {\n // Fallback to setTimeout.\n timerFunc = function () {\n setTimeout(flushCallbacks, 0);\n };\n}\n\nfunction nextTick (cb, ctx) {\n var _resolve;\n callbacks.push(function () {\n if (cb) {\n try {\n cb.call(ctx);\n } catch (e) {\n handleError(e, ctx, 'nextTick');\n }\n } else if (_resolve) {\n _resolve(ctx);\n }\n });\n if (!pending) {\n pending = true;\n timerFunc();\n }\n // $flow-disable-line\n if (!cb && typeof Promise !== 'undefined') {\n return new Promise(function (resolve) {\n _resolve = resolve;\n })\n }\n}\n\n/* */\n\n/* not type checking this file because flow doesn't play well with Proxy */\n\nvar initProxy;\n\nif (process.env.NODE_ENV !== 'production') {\n var allowedGlobals = makeMap(\n 'Infinity,undefined,NaN,isFinite,isNaN,' +\n 'parseFloat,parseInt,decodeURI,decodeURIComponent,encodeURI,encodeURIComponent,' +\n 'Math,Number,Date,Array,Object,Boolean,String,RegExp,Map,Set,JSON,Intl,' +\n 'require' // for Webpack/Browserify\n );\n\n var warnNonPresent = function (target, key) {\n warn(\n \"Property or method \\\"\" + key + \"\\\" is not defined on the instance but \" +\n 'referenced during render. Make sure that this property is reactive, ' +\n 'either in the data option, or for class-based components, by ' +\n 'initializing the property. ' +\n 'See: https://vuejs.org/v2/guide/reactivity.html#Declaring-Reactive-Properties.',\n target\n );\n };\n\n var warnReservedPrefix = function (target, key) {\n warn(\n \"Property \\\"\" + key + \"\\\" must be accessed with \\\"$data.\" + key + \"\\\" because \" +\n 'properties starting with \"$\" or \"_\" are not proxied in the Vue instance to ' +\n 'prevent conflicts with Vue internals. ' +\n 'See: https://vuejs.org/v2/api/#data',\n target\n );\n };\n\n var hasProxy =\n typeof Proxy !== 'undefined' && isNative(Proxy);\n\n if (hasProxy) {\n var isBuiltInModifier = makeMap('stop,prevent,self,ctrl,shift,alt,meta,exact');\n config.keyCodes = new Proxy(config.keyCodes, {\n set: function set (target, key, value) {\n if (isBuiltInModifier(key)) {\n warn((\"Avoid overwriting built-in modifier in config.keyCodes: .\" + key));\n return false\n } else {\n target[key] = value;\n return true\n }\n }\n });\n }\n\n var hasHandler = {\n has: function has (target, key) {\n var has = key in target;\n var isAllowed = allowedGlobals(key) ||\n (typeof key === 'string' && key.charAt(0) === '_' && !(key in target.$data));\n if (!has && !isAllowed) {\n if (key in target.$data) { warnReservedPrefix(target, key); }\n else { warnNonPresent(target, key); }\n }\n return has || !isAllowed\n }\n };\n\n var getHandler = {\n get: function get (target, key) {\n if (typeof key === 'string' && !(key in target)) {\n if (key in target.$data) { warnReservedPrefix(target, key); }\n else { warnNonPresent(target, key); }\n }\n return target[key]\n }\n };\n\n initProxy = function initProxy (vm) {\n if (hasProxy) {\n // determine which proxy handler to use\n var options = vm.$options;\n var handlers = options.render && options.render._withStripped\n ? getHandler\n : hasHandler;\n vm._renderProxy = new Proxy(vm, handlers);\n } else {\n vm._renderProxy = vm;\n }\n };\n}\n\n/* */\n\nvar seenObjects = new _Set();\n\n/**\n * Recursively traverse an object to evoke all converted\n * getters, so that every nested property inside the object\n * is collected as a \"deep\" dependency.\n */\nfunction traverse (val) {\n _traverse(val, seenObjects);\n seenObjects.clear();\n}\n\nfunction _traverse (val, seen) {\n var i, keys;\n var isA = Array.isArray(val);\n if ((!isA && !isObject(val)) || Object.isFrozen(val) || val instanceof VNode) {\n return\n }\n if (val.__ob__) {\n var depId = val.__ob__.dep.id;\n if (seen.has(depId)) {\n return\n }\n seen.add(depId);\n }\n if (isA) {\n i = val.length;\n while (i--) { _traverse(val[i], seen); }\n } else {\n keys = Object.keys(val);\n i = keys.length;\n while (i--) { _traverse(val[keys[i]], seen); }\n }\n}\n\nvar mark;\nvar measure;\n\nif (process.env.NODE_ENV !== 'production') {\n var perf = inBrowser && window.performance;\n /* istanbul ignore if */\n if (\n perf &&\n perf.mark &&\n perf.measure &&\n perf.clearMarks &&\n perf.clearMeasures\n ) {\n mark = function (tag) { return perf.mark(tag); };\n measure = function (name, startTag, endTag) {\n perf.measure(name, startTag, endTag);\n perf.clearMarks(startTag);\n perf.clearMarks(endTag);\n // perf.clearMeasures(name)\n };\n }\n}\n\n/* */\n\nvar normalizeEvent = cached(function (name) {\n var passive = name.charAt(0) === '&';\n name = passive ? name.slice(1) : name;\n var once$$1 = name.charAt(0) === '~'; // Prefixed last, checked first\n name = once$$1 ? name.slice(1) : name;\n var capture = name.charAt(0) === '!';\n name = capture ? name.slice(1) : name;\n return {\n name: name,\n once: once$$1,\n capture: capture,\n passive: passive\n }\n});\n\nfunction createFnInvoker (fns, vm) {\n function invoker () {\n var arguments$1 = arguments;\n\n var fns = invoker.fns;\n if (Array.isArray(fns)) {\n var cloned = fns.slice();\n for (var i = 0; i < cloned.length; i++) {\n invokeWithErrorHandling(cloned[i], null, arguments$1, vm, \"v-on handler\");\n }\n } else {\n // return handler return value for single handlers\n return invokeWithErrorHandling(fns, null, arguments, vm, \"v-on handler\")\n }\n }\n invoker.fns = fns;\n return invoker\n}\n\nfunction updateListeners (\n on,\n oldOn,\n add,\n remove$$1,\n createOnceHandler,\n vm\n) {\n var name, def$$1, cur, old, event;\n for (name in on) {\n def$$1 = cur = on[name];\n old = oldOn[name];\n event = normalizeEvent(name);\n if (isUndef(cur)) {\n process.env.NODE_ENV !== 'production' && warn(\n \"Invalid handler for event \\\"\" + (event.name) + \"\\\": got \" + String(cur),\n vm\n );\n } else if (isUndef(old)) {\n if (isUndef(cur.fns)) {\n cur = on[name] = createFnInvoker(cur, vm);\n }\n if (isTrue(event.once)) {\n cur = on[name] = createOnceHandler(event.name, cur, event.capture);\n }\n add(event.name, cur, event.capture, event.passive, event.params);\n } else if (cur !== old) {\n old.fns = cur;\n on[name] = old;\n }\n }\n for (name in oldOn) {\n if (isUndef(on[name])) {\n event = normalizeEvent(name);\n remove$$1(event.name, oldOn[name], event.capture);\n }\n }\n}\n\n/* */\n\n/* */\n\n// fixed by xxxxxx (mp properties)\nfunction extractPropertiesFromVNodeData(data, Ctor, res, context) {\n var propOptions = Ctor.options.mpOptions && Ctor.options.mpOptions.properties;\n if (isUndef(propOptions)) {\n return res\n }\n var externalClasses = Ctor.options.mpOptions.externalClasses || [];\n var attrs = data.attrs;\n var props = data.props;\n if (isDef(attrs) || isDef(props)) {\n for (var key in propOptions) {\n var altKey = hyphenate(key);\n var result = checkProp(res, props, key, altKey, true) ||\n checkProp(res, attrs, key, altKey, false);\n // externalClass\n if (\n result &&\n res[key] &&\n externalClasses.indexOf(altKey) !== -1 &&\n context[camelize(res[key])]\n ) {\n // 赋值 externalClass 真正的值(模板里 externalClass 的值可能是字符串)\n res[key] = context[camelize(res[key])];\n }\n }\n }\n return res\n}\n\nfunction extractPropsFromVNodeData (\n data,\n Ctor,\n tag,\n context// fixed by xxxxxx\n) {\n // we are only extracting raw values here.\n // validation and default values are handled in the child\n // component itself.\n var propOptions = Ctor.options.props;\n if (isUndef(propOptions)) {\n // fixed by xxxxxx\n return extractPropertiesFromVNodeData(data, Ctor, {}, context)\n }\n var res = {};\n var attrs = data.attrs;\n var props = data.props;\n if (isDef(attrs) || isDef(props)) {\n for (var key in propOptions) {\n var altKey = hyphenate(key);\n if (process.env.NODE_ENV !== 'production') {\n var keyInLowerCase = key.toLowerCase();\n if (\n key !== keyInLowerCase &&\n attrs && hasOwn(attrs, keyInLowerCase)\n ) {\n tip(\n \"Prop \\\"\" + keyInLowerCase + \"\\\" is passed to component \" +\n (formatComponentName(tag || Ctor)) + \", but the declared prop name is\" +\n \" \\\"\" + key + \"\\\". \" +\n \"Note that HTML attributes are case-insensitive and camelCased \" +\n \"props need to use their kebab-case equivalents when using in-DOM \" +\n \"templates. You should probably use \\\"\" + altKey + \"\\\" instead of \\\"\" + key + \"\\\".\"\n );\n }\n }\n checkProp(res, props, key, altKey, true) ||\n checkProp(res, attrs, key, altKey, false);\n }\n }\n // fixed by xxxxxx\n return extractPropertiesFromVNodeData(data, Ctor, res, context)\n}\n\nfunction checkProp (\n res,\n hash,\n key,\n altKey,\n preserve\n) {\n if (isDef(hash)) {\n if (hasOwn(hash, key)) {\n res[key] = hash[key];\n if (!preserve) {\n delete hash[key];\n }\n return true\n } else if (hasOwn(hash, altKey)) {\n res[key] = hash[altKey];\n if (!preserve) {\n delete hash[altKey];\n }\n return true\n }\n }\n return false\n}\n\n/* */\n\n// The template compiler attempts to minimize the need for normalization by\n// statically analyzing the template at compile time.\n//\n// For plain HTML markup, normalization can be completely skipped because the\n// generated render function is guaranteed to return Array. There are\n// two cases where extra normalization is needed:\n\n// 1. When the children contains components - because a functional component\n// may return an Array instead of a single root. In this case, just a simple\n// normalization is needed - if any child is an Array, we flatten the whole\n// thing with Array.prototype.concat. It is guaranteed to be only 1-level deep\n// because functional components already normalize their own children.\nfunction simpleNormalizeChildren (children) {\n for (var i = 0; i < children.length; i++) {\n if (Array.isArray(children[i])) {\n return Array.prototype.concat.apply([], children)\n }\n }\n return children\n}\n\n// 2. When the children contains constructs that always generated nested Arrays,\n// e.g.