diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..e69de29 diff --git a/.hbuilderx/launch.json b/.hbuilderx/launch.json new file mode 100644 index 0000000..501e01c --- /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": "remote" + } + } + ] +} diff --git a/App.vue b/App.vue new file mode 100644 index 0000000..6634ecb --- /dev/null +++ b/App.vue @@ -0,0 +1,21 @@ + + + diff --git a/colorui/animation.css b/colorui/animation.css new file mode 100644 index 0000000..931bb51 --- /dev/null +++ b/colorui/animation.css @@ -0,0 +1,184 @@ +/* + Animation 微动画 + 基于ColorUI组建库的动画模块 by 文晓港 2019年3月26日19:52:28 + */ + +/* css 滤镜 控制黑白底色gif的 */ +.gif-black{ + mix-blend-mode: screen; +} +.gif-white{ + mix-blend-mode: multiply; +} + + +/* Animation css */ +[class*=animation-] { + animation-duration: .5s; + animation-timing-function: ease-out; + animation-fill-mode: both +} + +.animation-fade { + animation-name: fade; + animation-duration: .8s; + animation-timing-function: linear +} + +.animation-scale-up { + animation-name: scale-up +} + +.animation-scale-down { + animation-name: scale-down +} + +.animation-slide-top { + animation-name: slide-top +} + +.animation-slide-bottom { + animation-name: slide-bottom +} + +.animation-slide-left { + animation-name: slide-left +} + +.animation-slide-right { + animation-name: slide-right +} + +.animation-shake { + animation-name: shake +} + +.animation-reverse { + animation-direction: reverse +} + +@keyframes fade { + 0% { + opacity: 0 + } + + 100% { + opacity: 1 + } +} + +@keyframes scale-up { + 0% { + opacity: 0; + transform: scale(.2) + } + + 100% { + opacity: 1; + transform: scale(1) + } +} + +@keyframes scale-down { + 0% { + opacity: 0; + transform: scale(1.8) + } + + 100% { + opacity: 1; + transform: scale(1) + } +} + +@keyframes slide-top { + 0% { + opacity: 0; + transform: translateY(-100%) + } + + 100% { + opacity: 1; + transform: translateY(0) + } +} + +@keyframes slide-bottom { + 0% { + opacity: 0; + transform: translateY(100%) + } + + 100% { + opacity: 1; + transform: translateY(0) + } +} + +@keyframes shake { + + 0%, + 100% { + transform: translateX(0) + } + + 10% { + transform: translateX(-9px) + } + + 20% { + transform: translateX(8px) + } + + 30% { + transform: translateX(-7px) + } + + 40% { + transform: translateX(6px) + } + + 50% { + transform: translateX(-5px) + } + + 60% { + transform: translateX(4px) + } + + 70% { + transform: translateX(-3px) + } + + 80% { + transform: translateX(2px) + } + + 90% { + transform: translateX(-1px) + } +} + +@keyframes slide-left { + 0% { + opacity: 0; + transform: translateX(-100%) + } + + 100% { + opacity: 1; + transform: translateX(0) + } +} + +@keyframes slide-right { + 0% { + opacity: 0; + transform: translateX(100%) + } + + 100% { + opacity: 1; + transform: translateX(0) + } +} \ No newline at end of file diff --git a/colorui/components/cu-custom.vue b/colorui/components/cu-custom.vue new file mode 100644 index 0000000..a4e1773 --- /dev/null +++ b/colorui/components/cu-custom.vue @@ -0,0 +1,69 @@ + + + + + diff --git a/colorui/icon.css b/colorui/icon.css new file mode 100644 index 0000000..16ed121 --- /dev/null +++ b/colorui/icon.css @@ -0,0 +1,1226 @@ +@keyframes cuIcon-spin { + 0% { + -webkit-transform: rotate(0); + transform: rotate(0); + } + + 100% { + -webkit-transform: rotate(359deg); + transform: rotate(359deg); + } +} + +.cuIconfont-spin { + -webkit-animation: cuIcon-spin 2s infinite linear; + animation: cuIcon-spin 2s infinite linear; + display: inline-block; +} + +.cuIconfont-pulse { + -webkit-animation: cuIcon-spin 1s infinite steps(8); + animation: cuIcon-spin 1s infinite steps(8); + display: inline-block; +} + +[class*="cuIcon-"] { + font-family: "cuIcon"; + font-size: inherit; + font-style: normal; +} + +@font-face { + font-family: "cuIcon"; + src: url('//at.alicdn.com/t/font_533566_yfq2d9wdij.eot?t=1545239985831'); + /* IE9*/ + src: url('//at.alicdn.com/t/font_533566_yfq2d9wdij.eot?t=1545239985831#iefix') format('embedded-opentype'), + /* IE6-IE8 */ + url('data:application/x-font-woff;charset=utf-8;base64,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') format('woff'), + url('//at.alicdn.com/t/font_533566_yfq2d9wdij.ttf?t=1545239985831') format('truetype'), + /* chrome, firefox, opera, Safari, Android, iOS 4.2+*/ + url('//at.alicdn.com/t/font_533566_yfq2d9wdij.svg?t=1545239985831#cuIconfont') format('svg'); + /* iOS 4.1- */ +} + +.cuIcon-appreciate:before { + content: "\e644"; +} + +.cuIcon-check:before { + content: "\e645"; +} + +.cuIcon-close:before { + content: "\e646"; +} + +.cuIcon-edit:before { + content: "\e649"; +} + +.cuIcon-emoji:before { + content: "\e64a"; +} + +.cuIcon-favorfill:before { + content: "\e64b"; +} + +.cuIcon-favor:before { + content: "\e64c"; +} + +.cuIcon-loading:before { + content: "\e64f"; +} + +.cuIcon-locationfill:before { + content: "\e650"; +} + +.cuIcon-location:before { + content: "\e651"; +} + +.cuIcon-phone:before { + content: "\e652"; +} + +.cuIcon-roundcheckfill:before { + content: "\e656"; +} + +.cuIcon-roundcheck:before { + content: "\e657"; +} + +.cuIcon-roundclosefill:before { + content: "\e658"; +} + +.cuIcon-roundclose:before { + content: "\e659"; +} + +.cuIcon-roundrightfill:before { + content: "\e65a"; +} + +.cuIcon-roundright:before { + content: "\e65b"; +} + +.cuIcon-search:before { + content: "\e65c"; +} + +.cuIcon-taxi:before { + content: "\e65d"; +} + +.cuIcon-timefill:before { + content: "\e65e"; +} + +.cuIcon-time:before { + content: "\e65f"; +} + +.cuIcon-unfold:before { + content: "\e661"; +} + +.cuIcon-warnfill:before { + content: "\e662"; +} + +.cuIcon-warn:before { + content: "\e663"; +} + +.cuIcon-camerafill:before { + content: "\e664"; +} + +.cuIcon-camera:before { + content: "\e665"; +} + +.cuIcon-commentfill:before { + content: "\e666"; +} + +.cuIcon-comment:before { + content: "\e667"; +} + +.cuIcon-likefill:before { + content: "\e668"; +} + +.cuIcon-like:before { + content: "\e669"; +} + +.cuIcon-notificationfill:before { + content: "\e66a"; +} + +.cuIcon-notification:before { + content: "\e66b"; +} + +.cuIcon-order:before { + content: "\e66c"; +} + +.cuIcon-samefill:before { + content: "\e66d"; +} + +.cuIcon-same:before { + content: "\e66e"; +} + +.cuIcon-deliver:before { + content: "\e671"; +} + +.cuIcon-evaluate:before { + content: "\e672"; +} + +.cuIcon-pay:before { + content: "\e673"; +} + +.cuIcon-send:before { + content: "\e675"; +} + +.cuIcon-shop:before { + content: "\e676"; +} + +.cuIcon-ticket:before { + content: "\e677"; +} + +.cuIcon-back:before { + content: "\e679"; +} + +.cuIcon-cascades:before { + content: "\e67c"; +} + +.cuIcon-discover:before { + content: "\e67e"; +} + +.cuIcon-list:before { + content: "\e682"; +} + +.cuIcon-more:before { + content: "\e684"; +} + +.cuIcon-scan:before { + content: "\e689"; +} + +.cuIcon-settings:before { + content: "\e68a"; +} + +.cuIcon-questionfill:before { + content: "\e690"; +} + +.cuIcon-question:before { + content: "\e691"; +} + +.cuIcon-shopfill:before { + content: "\e697"; +} + +.cuIcon-form:before { + content: "\e699"; +} + +.cuIcon-pic:before { + content: "\e69b"; +} + +.cuIcon-filter:before { + content: "\e69c"; +} + +.cuIcon-footprint:before { + content: "\e69d"; +} + +.cuIcon-top:before { + content: "\e69e"; +} + +.cuIcon-pulldown:before { + content: "\e69f"; +} + +.cuIcon-pullup:before { + content: "\e6a0"; +} + +.cuIcon-right:before { + content: "\e6a3"; +} + +.cuIcon-refresh:before { + content: "\e6a4"; +} + +.cuIcon-moreandroid:before { + content: "\e6a5"; +} + +.cuIcon-deletefill:before { + content: "\e6a6"; +} + +.cuIcon-refund:before { + content: "\e6ac"; +} + +.cuIcon-cart:before { + content: "\e6af"; +} + +.cuIcon-qrcode:before { + content: "\e6b0"; +} + +.cuIcon-remind:before { + content: "\e6b2"; +} + +.cuIcon-delete:before { + content: "\e6b4"; +} + +.cuIcon-profile:before { + content: "\e6b7"; +} + +.cuIcon-home:before { + content: "\e6b8"; +} + +.cuIcon-cartfill:before { + content: "\e6b9"; +} + +.cuIcon-discoverfill:before { + content: "\e6ba"; +} + +.cuIcon-homefill:before { + content: "\e6bb"; +} + +.cuIcon-message:before { + content: "\e6bc"; +} + +.cuIcon-addressbook:before { + content: "\e6bd"; +} + +.cuIcon-link:before { + content: "\e6bf"; +} + +.cuIcon-lock:before { + content: "\e6c0"; +} + +.cuIcon-unlock:before { + content: "\e6c2"; +} + +.cuIcon-vip:before { + content: "\e6c3"; +} + +.cuIcon-weibo:before { + content: "\e6c4"; +} + +.cuIcon-activity:before { + content: "\e6c5"; +} + +.cuIcon-friendaddfill:before { + content: "\e6c9"; +} + +.cuIcon-friendadd:before { + content: "\e6ca"; +} + +.cuIcon-friendfamous:before { + content: "\e6cb"; +} + +.cuIcon-friend:before { + content: "\e6cc"; +} + +.cuIcon-goods:before { + content: "\e6cd"; +} + +.cuIcon-selection:before { + content: "\e6ce"; +} + +.cuIcon-explore:before { + content: "\e6d2"; +} + +.cuIcon-present:before { + content: "\e6d3"; +} + +.cuIcon-squarecheckfill:before { + content: "\e6d4"; +} + +.cuIcon-square:before { + content: "\e6d5"; +} + +.cuIcon-squarecheck:before { + content: "\e6d6"; +} + +.cuIcon-round:before { + content: "\e6d7"; +} + +.cuIcon-roundaddfill:before { + content: "\e6d8"; +} + +.cuIcon-roundadd:before { + content: "\e6d9"; +} + +.cuIcon-add:before { + content: "\e6da"; +} + +.cuIcon-notificationforbidfill:before { + content: "\e6db"; +} + +.cuIcon-explorefill:before { + content: "\e6dd"; +} + +.cuIcon-fold:before { + content: "\e6de"; +} + +.cuIcon-game:before { + content: "\e6df"; +} + +.cuIcon-redpacket:before { + content: "\e6e0"; +} + +.cuIcon-selectionfill:before { + content: "\e6e1"; +} + +.cuIcon-similar:before { + content: "\e6e2"; +} + +.cuIcon-appreciatefill:before { + content: "\e6e3"; +} + +.cuIcon-infofill:before { + content: "\e6e4"; +} + +.cuIcon-info:before { + content: "\e6e5"; +} + +.cuIcon-forwardfill:before { + content: "\e6ea"; +} + +.cuIcon-forward:before { + content: "\e6eb"; +} + +.cuIcon-rechargefill:before { + content: "\e6ec"; +} + +.cuIcon-recharge:before { + content: "\e6ed"; +} + +.cuIcon-vipcard:before { + content: "\e6ee"; +} + +.cuIcon-voice:before { + content: "\e6ef"; +} + +.cuIcon-voicefill:before { + content: "\e6f0"; +} + +.cuIcon-friendfavor:before { + content: "\e6f1"; +} + +.cuIcon-wifi:before { + content: "\e6f2"; +} + +.cuIcon-share:before { + content: "\e6f3"; +} + +.cuIcon-wefill:before { + content: "\e6f4"; +} + +.cuIcon-we:before { + content: "\e6f5"; +} + +.cuIcon-lightauto:before { + content: "\e6f6"; +} + +.cuIcon-lightforbid:before { + content: "\e6f7"; +} + +.cuIcon-lightfill:before { + content: "\e6f8"; +} + +.cuIcon-camerarotate:before { + content: "\e6f9"; +} + +.cuIcon-light:before { + content: "\e6fa"; +} + +.cuIcon-barcode:before { + content: "\e6fb"; +} + +.cuIcon-flashlightclose:before { + content: "\e6fc"; +} + +.cuIcon-flashlightopen:before { + content: "\e6fd"; +} + +.cuIcon-searchlist:before { + content: "\e6fe"; +} + +.cuIcon-service:before { + content: "\e6ff"; +} + +.cuIcon-sort:before { + content: "\e700"; +} + +.cuIcon-down:before { + content: "\e703"; +} + +.cuIcon-mobile:before { + content: "\e704"; +} + +.cuIcon-mobilefill:before { + content: "\e705"; +} + +.cuIcon-copy:before { + content: "\e706"; +} + +.cuIcon-countdownfill:before { + content: "\e707"; +} + +.cuIcon-countdown:before { + content: "\e708"; +} + +.cuIcon-noticefill:before { + content: "\e709"; +} + +.cuIcon-notice:before { + content: "\e70a"; +} + +.cuIcon-upstagefill:before { + content: "\e70e"; +} + +.cuIcon-upstage:before { + content: "\e70f"; +} + +.cuIcon-babyfill:before { + content: "\e710"; +} + +.cuIcon-baby:before { + content: "\e711"; +} + +.cuIcon-brandfill:before { + content: "\e712"; +} + +.cuIcon-brand:before { + content: "\e713"; +} + +.cuIcon-choicenessfill:before { + content: "\e714"; +} + +.cuIcon-choiceness:before { + content: "\e715"; +} + +.cuIcon-clothesfill:before { + content: "\e716"; +} + +.cuIcon-clothes:before { + content: "\e717"; +} + +.cuIcon-creativefill:before { + content: "\e718"; +} + +.cuIcon-creative:before { + content: "\e719"; +} + +.cuIcon-female:before { + content: "\e71a"; +} + +.cuIcon-keyboard:before { + content: "\e71b"; +} + +.cuIcon-male:before { + content: "\e71c"; +} + +.cuIcon-newfill:before { + content: "\e71d"; +} + +.cuIcon-new:before { + content: "\e71e"; +} + +.cuIcon-pullleft:before { + content: "\e71f"; +} + +.cuIcon-pullright:before { + content: "\e720"; +} + +.cuIcon-rankfill:before { + content: "\e721"; +} + +.cuIcon-rank:before { + content: "\e722"; +} + +.cuIcon-bad:before { + content: "\e723"; +} + +.cuIcon-cameraadd:before { + content: "\e724"; +} + +.cuIcon-focus:before { + content: "\e725"; +} + +.cuIcon-friendfill:before { + content: "\e726"; +} + +.cuIcon-cameraaddfill:before { + content: "\e727"; +} + +.cuIcon-apps:before { + content: "\e729"; +} + +.cuIcon-paintfill:before { + content: "\e72a"; +} + +.cuIcon-paint:before { + content: "\e72b"; +} + +.cuIcon-picfill:before { + content: "\e72c"; +} + +.cuIcon-refresharrow:before { + content: "\e72d"; +} + +.cuIcon-colorlens:before { + content: "\e6e6"; +} + +.cuIcon-markfill:before { + content: "\e730"; +} + +.cuIcon-mark:before { + content: "\e731"; +} + +.cuIcon-presentfill:before { + content: "\e732"; +} + +.cuIcon-repeal:before { + content: "\e733"; +} + +.cuIcon-album:before { + content: "\e734"; +} + +.cuIcon-peoplefill:before { + content: "\e735"; +} + +.cuIcon-people:before { + content: "\e736"; +} + +.cuIcon-servicefill:before { + content: "\e737"; +} + +.cuIcon-repair:before { + content: "\e738"; +} + +.cuIcon-file:before { + content: "\e739"; +} + +.cuIcon-repairfill:before { + content: "\e73a"; +} + +.cuIcon-taoxiaopu:before { + content: "\e73b"; +} + +.cuIcon-weixin:before { + content: "\e612"; +} + +.cuIcon-attentionfill:before { + content: "\e73c"; +} + +.cuIcon-attention:before { + content: "\e73d"; +} + +.cuIcon-commandfill:before { + content: "\e73e"; +} + +.cuIcon-command:before { + content: "\e73f"; +} + +.cuIcon-communityfill:before { + content: "\e740"; +} + +.cuIcon-community:before { + content: "\e741"; +} + +.cuIcon-read:before { + content: "\e742"; +} + +.cuIcon-calendar:before { + content: "\e74a"; +} + +.cuIcon-cut:before { + content: "\e74b"; +} + +.cuIcon-magic:before { + content: "\e74c"; +} + +.cuIcon-backwardfill:before { + content: "\e74d"; +} + +.cuIcon-playfill:before { + content: "\e74f"; +} + +.cuIcon-stop:before { + content: "\e750"; +} + +.cuIcon-tagfill:before { + content: "\e751"; +} + +.cuIcon-tag:before { + content: "\e752"; +} + +.cuIcon-group:before { + content: "\e753"; +} + +.cuIcon-all:before { + content: "\e755"; +} + +.cuIcon-backdelete:before { + content: "\e756"; +} + +.cuIcon-hotfill:before { + content: "\e757"; +} + +.cuIcon-hot:before { + content: "\e758"; +} + +.cuIcon-post:before { + content: "\e759"; +} + +.cuIcon-radiobox:before { + content: "\e75b"; +} + +.cuIcon-rounddown:before { + content: "\e75c"; +} + +.cuIcon-upload:before { + content: "\e75d"; +} + +.cuIcon-writefill:before { + content: "\e760"; +} + +.cuIcon-write:before { + content: "\e761"; +} + +.cuIcon-radioboxfill:before { + content: "\e763"; +} + +.cuIcon-punch:before { + content: "\e764"; +} + +.cuIcon-shake:before { + content: "\e765"; +} + +.cuIcon-move:before { + content: "\e768"; +} + +.cuIcon-safe:before { + content: "\e769"; +} + +.cuIcon-activityfill:before { + content: "\e775"; +} + +.cuIcon-crownfill:before { + content: "\e776"; +} + +.cuIcon-crown:before { + content: "\e777"; +} + +.cuIcon-goodsfill:before { + content: "\e778"; +} + +.cuIcon-messagefill:before { + content: "\e779"; +} + +.cuIcon-profilefill:before { + content: "\e77a"; +} + +.cuIcon-sound:before { + content: "\e77b"; +} + +.cuIcon-sponsorfill:before { + content: "\e77c"; +} + +.cuIcon-sponsor:before { + content: "\e77d"; +} + +.cuIcon-upblock:before { + content: "\e77e"; +} + +.cuIcon-weblock:before { + content: "\e77f"; +} + +.cuIcon-weunblock:before { + content: "\e780"; +} + +.cuIcon-my:before { + content: "\e78b"; +} + +.cuIcon-myfill:before { + content: "\e78c"; +} + +.cuIcon-emojifill:before { + content: "\e78d"; +} + +.cuIcon-emojiflashfill:before { + content: "\e78e"; +} + +.cuIcon-flashbuyfill:before { + content: "\e78f"; +} + +.cuIcon-text:before { + content: "\e791"; +} + +.cuIcon-goodsfavor:before { + content: "\e794"; +} + +.cuIcon-musicfill:before { + content: "\e795"; +} + +.cuIcon-musicforbidfill:before { + content: "\e796"; +} + +.cuIcon-card:before { + content: "\e624"; +} + +.cuIcon-triangledownfill:before { + content: "\e79b"; +} + +.cuIcon-triangleupfill:before { + content: "\e79c"; +} + +.cuIcon-roundleftfill-copy:before { + content: "\e79e"; +} + +.cuIcon-font:before { + content: "\e76a"; +} + +.cuIcon-title:before { + content: "\e82f"; +} + +.cuIcon-recordfill:before { + content: "\e7a4"; +} + +.cuIcon-record:before { + content: "\e7a6"; +} + +.cuIcon-cardboardfill:before { + content: "\e7a9"; +} + +.cuIcon-cardboard:before { + content: "\e7aa"; +} + +.cuIcon-formfill:before { + content: "\e7ab"; +} + +.cuIcon-coin:before { + content: "\e7ac"; +} + +.cuIcon-cardboardforbid:before { + content: "\e7af"; +} + +.cuIcon-circlefill:before { + content: "\e7b0"; +} + +.cuIcon-circle:before { + content: "\e7b1"; +} + +.cuIcon-attentionforbid:before { + content: "\e7b2"; +} + +.cuIcon-attentionforbidfill:before { + content: "\e7b3"; +} + +.cuIcon-attentionfavorfill:before { + content: "\e7b4"; +} + +.cuIcon-attentionfavor:before { + content: "\e7b5"; +} + +.cuIcon-titles:before { + content: "\e701"; +} + +.cuIcon-icloading:before { + content: "\e67a"; +} + +.cuIcon-full:before { + content: "\e7bc"; +} + +.cuIcon-mail:before { + content: "\e7bd"; +} + +.cuIcon-peoplelist:before { + content: "\e7be"; +} + +.cuIcon-goodsnewfill:before { + content: "\e7bf"; +} + +.cuIcon-goodsnew:before { + content: "\e7c0"; +} + +.cuIcon-medalfill:before { + content: "\e7c1"; +} + +.cuIcon-medal:before { + content: "\e7c2"; +} + +.cuIcon-newsfill:before { + content: "\e7c3"; +} + +.cuIcon-newshotfill:before { + content: "\e7c4"; +} + +.cuIcon-newshot:before { + content: "\e7c5"; +} + +.cuIcon-news:before { + content: "\e7c6"; +} + +.cuIcon-videofill:before { + content: "\e7c7"; +} + +.cuIcon-video:before { + content: "\e7c8"; +} + +.cuIcon-exit:before { + content: "\e7cb"; +} + +.cuIcon-skinfill:before { + content: "\e7cc"; +} + +.cuIcon-skin:before { + content: "\e7cd"; +} + +.cuIcon-moneybagfill:before { + content: "\e7ce"; +} + +.cuIcon-usefullfill:before { + content: "\e7cf"; +} + +.cuIcon-usefull:before { + content: "\e7d0"; +} + +.cuIcon-moneybag:before { + content: "\e7d1"; +} + +.cuIcon-redpacket_fill:before { + content: "\e7d3"; +} + +.cuIcon-subscription:before { + content: "\e7d4"; +} + +.cuIcon-loading1:before { + content: "\e633"; +} + +.cuIcon-github:before { + content: "\e692"; +} + +.cuIcon-global:before { + content: "\e7eb"; +} + +.cuIcon-settingsfill:before { + content: "\e6ab"; +} + +.cuIcon-back_android:before { + content: "\e7ed"; +} + +.cuIcon-expressman:before { + content: "\e7ef"; +} + +.cuIcon-evaluate_fill:before { + content: "\e7f0"; +} + +.cuIcon-group_fill:before { + content: "\e7f5"; +} + +.cuIcon-play_forward_fill:before { + content: "\e7f6"; +} + +.cuIcon-deliver_fill:before { + content: "\e7f7"; +} + +.cuIcon-notice_forbid_fill:before { + content: "\e7f8"; +} + +.cuIcon-fork:before { + content: "\e60c"; +} + +.cuIcon-pick:before { + content: "\e7fa"; +} + +.cuIcon-wenzi:before { + content: "\e6a7"; +} + +.cuIcon-ellipse:before { + content: "\e600"; +} + +.cuIcon-qr_code:before { + content: "\e61b"; +} + +.cuIcon-dianhua:before { + content: "\e64d"; +} + +.cuIcon-cuIcon:before { + content: "\e602"; +} + +.cuIcon-loading2:before { + content: "\e7f1"; +} + +.cuIcon-btn:before { + content: "\e601"; +} diff --git a/colorui/main.css b/colorui/main.css new file mode 100644 index 0000000..f402d0a --- /dev/null +++ b/colorui/main.css @@ -0,0 +1,3927 @@ +/* + ColorUi for uniApp v2.1.6 | by 文晓港 2019-05-31 10:44:24 + 仅供学习交流,如作它用所承受的法律责任一概与作者无关 + + *使用ColorUi开发扩展与插件时,请注明基于ColorUi开发 + + (QQ交流群:240787041) +*/ + +/* ================== + 初始化 + ==================== */ +body { + background-color: #fff; + font-size: 28upx; + color: #333333; + font-family: Helvetica Neue, Helvetica, sans-serif; +} + +view, +scroll-view, +swiper, +button, +input, +textarea, +label, +navigator, +image { + box-sizing: border-box; +} + +.round { + border-radius: 5000upx; +} + +.radius { + border-radius: 6upx; +} + +/* ================== + 图片 + ==================== */ + +image { + max-width: 100%; + display: inline-block; + position: relative; + z-index: 0; +} + +image.loading::before { + content: ""; + background-color: #f5f5f5; + display: block; + position: absolute; + width: 100%; + height: 100%; + z-index: -2; +} + +image.loading::after { + content: "\e7f1"; + font-family: "cuIcon"; + position: absolute; + top: 0; + left: 0; + width: 32upx; + height: 32upx; + line-height: 32upx; + right: 0; + bottom: 0; + z-index: -1; + font-size: 32upx; + margin: auto; + color: #ccc; + -webkit-animation: cuIcon-spin 2s infinite linear; + animation: cuIcon-spin 2s infinite linear; + display: block; +} + +.response { + width: 100%; +} + +/* ================== + 开关 + ==================== */ + +switch, +checkbox, +radio { + position: relative; +} + +switch::after, +switch::before { + font-family: "cuIcon"; + content: "\e645"; + position: absolute; + color: #ffffff !important; + top: 0%; + left: 0upx; + font-size: 26upx; + line-height: 26px; + width: 50%; + text-align: center; + pointer-events: none; + transform: scale(0, 0); + transition: all 0.3s ease-in-out 0s; + z-index: 9; + bottom: 0; + height: 26px; + margin: auto; +} + +switch::before { + content: "\e646"; + right: 0; + transform: scale(1, 1); + left: auto; +} + +switch[checked]::after, +switch.checked::after { + transform: scale(1, 1); +} + +switch[checked]::before, +switch.checked::before { + transform: scale(0, 0); +} + +/* #ifndef MP-ALIPAY */ +radio::before, +checkbox::before { + font-family: "cuIcon"; + content: "\e645"; + position: absolute; + color: #ffffff !important; + top: 50%; + margin-top: -8px; + right: 5px; + font-size: 32upx; + line-height: 16px; + pointer-events: none; + transform: scale(1, 1); + transition: all 0.3s ease-in-out 0s; + z-index: 9; +} + +radio .wx-radio-input, +checkbox .wx-checkbox-input, +radio .uni-radio-input, +checkbox .uni-checkbox-input { + margin: 0; + width: 24px; + height: 24px; +} + +checkbox.round .wx-checkbox-input, +checkbox.round .uni-checkbox-input { + border-radius: 100upx; +} + +/* #endif */ + +switch[checked]::before { + transform: scale(0, 0); +} + +switch .wx-switch-input, +switch .uni-switch-input { + border: none; + padding: 0 24px; + width: 48px; + height: 26px; + margin: 0; + border-radius: 100upx; +} + +switch .wx-switch-input:not([class*="bg-"]), +switch .uni-switch-input:not([class*="bg-"]) { + background: #8799a3 !important; +} + +switch .wx-switch-input::after, +switch .uni-switch-input::after { + margin: auto; + width: 26px; + height: 26px; + border-radius: 100upx; + left: 0upx; + top: 0upx; + bottom: 0upx; + position: absolute; + transform: scale(0.9, 0.9); + transition: all 0.1s ease-in-out 0s; +} + +switch .wx-switch-input.wx-switch-input-checked::after, +switch .uni-switch-input.uni-switch-input-checked::after { + margin: auto; + left: 22px; + box-shadow: none; + transform: scale(0.9, 0.9); +} + +radio-group { + display: inline-block; +} + + + +switch.radius .wx-switch-input::after, +switch.radius .wx-switch-input, +switch.radius .wx-switch-input::before, +switch.radius .uni-switch-input::after, +switch.radius .uni-switch-input, +switch.radius .uni-switch-input::before { + border-radius: 10upx; +} + +switch .wx-switch-input::before, +radio.radio::before, +checkbox .wx-checkbox-input::before, +radio .wx-radio-input::before, +switch .uni-switch-input::before, +radio.radio::before, +checkbox .uni-checkbox-input::before, +radio .uni-radio-input::before { + display: none; +} + +radio.radio[checked]::after, +radio.radio .uni-radio-input-checked::after { + content: ""; + background-color: transparent; + display: block; + position: absolute; + width: 8px; + height: 8px; + z-index: 999; + top: 0upx; + left: 0upx; + right: 0; + bottom: 0; + margin: auto; + border-radius: 200upx; + /* #ifndef MP */ + border: 7px solid #ffffff !important; + /* #endif */ + + /* #ifdef MP */ + border: 8px solid #ffffff !important; + /* #endif */ +} + +.switch-sex::after { + content: "\e71c"; +} + +.switch-sex::before { + content: "\e71a"; +} + +.switch-sex .wx-switch-input, +.switch-sex .uni-switch-input { + background: #e54d42 !important; + border-color: #e54d42 !important; +} + +.switch-sex[checked] .wx-switch-input, +.switch-sex.checked .uni-switch-input { + background: #0081ff !important; + border-color: #0081ff !important; +} + +switch.red[checked] .wx-switch-input.wx-switch-input-checked, +checkbox.red[checked] .wx-checkbox-input, +radio.red[checked] .wx-radio-input, +switch.red.checked .uni-switch-input.uni-switch-input-checked, +checkbox.red.checked .uni-checkbox-input, +radio.red.checked .uni-radio-input { + background-color: #e54d42 !important; + border-color: #e54d42 !important; + color: #ffffff !important; +} + +switch.orange[checked] .wx-switch-input, +checkbox.orange[checked] .wx-checkbox-input, +radio.orange[checked] .wx-radio-input, +switch.orange.checked .uni-switch-input, +checkbox.orange.checked .uni-checkbox-input, +radio.orange.checked .uni-radio-input { + background-color: #f37b1d !important; + border-color: #f37b1d !important; + color: #ffffff !important; +} + +switch.yellow[checked] .wx-switch-input, +checkbox.yellow[checked] .wx-checkbox-input, +radio.yellow[checked] .wx-radio-input, +switch.yellow.checked .uni-switch-input, +checkbox.yellow.checked .uni-checkbox-input, +radio.yellow.checked .uni-radio-input { + background-color: #fbbd08 !important; + border-color: #fbbd08 !important; + color: #333333 !important; +} + +switch.olive[checked] .wx-switch-input, +checkbox.olive[checked] .wx-checkbox-input, +radio.olive[checked] .wx-radio-input, +switch.olive.checked .uni-switch-input, +checkbox.olive.checked .uni-checkbox-input, +radio.olive.checked .uni-radio-input { + background-color: #8dc63f !important; + border-color: #8dc63f !important; + color: #ffffff !important; +} + +switch.green[checked] .wx-switch-input, +switch[checked] .wx-switch-input, +checkbox.green[checked] .wx-checkbox-input, +checkbox[checked] .wx-checkbox-input, +radio.green[checked] .wx-radio-input, +radio[checked] .wx-radio-input, +switch.green.checked .uni-switch-input, +switch.checked .uni-switch-input, +checkbox.green.checked .uni-checkbox-input, +checkbox.checked .uni-checkbox-input, +radio.green.checked .uni-radio-input, +radio.checked .uni-radio-input { + background-color: #39b54a !important; + border-color: #39b54a !important; + color: #ffffff !important; + border-color: #39B54A !important; +} + +switch.cyan[checked] .wx-switch-input, +checkbox.cyan[checked] .wx-checkbox-input, +radio.cyan[checked] .wx-radio-input, +switch.cyan.checked .uni-switch-input, +checkbox.cyan.checked .uni-checkbox-input, +radio.cyan.checked .uni-radio-input { + background-color: #1cbbb4 !important; + border-color: #1cbbb4 !important; + color: #ffffff !important; +} + +switch.blue[checked] .wx-switch-input, +checkbox.blue[checked] .wx-checkbox-input, +radio.blue[checked] .wx-radio-input, +switch.blue.checked .uni-switch-input, +checkbox.blue.checked .uni-checkbox-input, +radio.blue.checked .uni-radio-input { + background-color: #0081ff !important; + border-color: #0081ff !important; + color: #ffffff !important; +} + +switch.purple[checked] .wx-switch-input, +checkbox.purple[checked] .wx-checkbox-input, +radio.purple[checked] .wx-radio-input, +switch.purple.checked .uni-switch-input, +checkbox.purple.checked .uni-checkbox-input, +radio.purple.checked .uni-radio-input { + background-color: #6739b6 !important; + border-color: #6739b6 !important; + color: #ffffff !important; +} + +switch.mauve[checked] .wx-switch-input, +checkbox.mauve[checked] .wx-checkbox-input, +radio.mauve[checked] .wx-radio-input, +switch.mauve.checked .uni-switch-input, +checkbox.mauve.checked .uni-checkbox-input, +radio.mauve.checked .uni-radio-input { + background-color: #9c26b0 !important; + border-color: #9c26b0 !important; + color: #ffffff !important; +} + +switch.pink[checked] .wx-switch-input, +checkbox.pink[checked] .wx-checkbox-input, +radio.pink[checked] .wx-radio-input, +switch.pink.checked .uni-switch-input, +checkbox.pink.checked .uni-checkbox-input, +radio.pink.checked .uni-radio-input { + background-color: #e03997 !important; + border-color: #e03997 !important; + color: #ffffff !important; +} + +switch.brown[checked] .wx-switch-input, +checkbox.brown[checked] .wx-checkbox-input, +radio.brown[checked] .wx-radio-input, +switch.brown.checked .uni-switch-input, +checkbox.brown.checked .uni-checkbox-input, +radio.brown.checked .uni-radio-input { + background-color: #a5673f !important; + border-color: #a5673f !important; + color: #ffffff !important; +} + +switch.grey[checked] .wx-switch-input, +checkbox.grey[checked] .wx-checkbox-input, +radio.grey[checked] .wx-radio-input, +switch.grey.checked .uni-switch-input, +checkbox.grey.checked .uni-checkbox-input, +radio.grey.checked .uni-radio-input { + background-color: #8799a3 !important; + border-color: #8799a3 !important; + color: #ffffff !important; +} + +switch.gray[checked] .wx-switch-input, +checkbox.gray[checked] .wx-checkbox-input, +radio.gray[checked] .wx-radio-input, +switch.gray.checked .uni-switch-input, +checkbox.gray.checked .uni-checkbox-input, +radio.gray.checked .uni-radio-input { + background-color: #f0f0f0 !important; + border-color: #f0f0f0 !important; + color: #333333 !important; +} + +switch.black[checked] .wx-switch-input, +checkbox.black[checked] .wx-checkbox-input, +radio.black[checked] .wx-radio-input, +switch.black.checked .uni-switch-input, +checkbox.black.checked .uni-checkbox-input, +radio.black.checked .uni-radio-input { + background-color: #333333 !important; + border-color: #333333 !important; + color: #ffffff !important; +} + +switch.white[checked] .wx-switch-input, +checkbox.white[checked] .wx-checkbox-input, +radio.white[checked] .wx-radio-input, +switch.white.checked .uni-switch-input, +checkbox.white.checked .uni-checkbox-input, +radio.white.checked .uni-radio-input { + background-color: #ffffff !important; + border-color: #ffffff !important; + color: #333333 !important; +} + +/* ================== + 边框 + ==================== */ + +/* -- 实线 -- */ + +.solid, +.solid-top, +.solid-right, +.solid-bottom, +.solid-left, +.solids, +.solids-top, +.solids-right, +.solids-bottom, +.solids-left, +.dashed, +.dashed-top, +.dashed-right, +.dashed-bottom, +.dashed-left { + position: relative; +} + +.solid::after, +.solid-top::after, +.solid-right::after, +.solid-bottom::after, +.solid-left::after, +.solids::after, +.solids-top::after, +.solids-right::after, +.solids-bottom::after, +.solids-left::after, +.dashed::after, +.dashed-top::after, +.dashed-right::after, +.dashed-bottom::after, +.dashed-left::after { + content: " "; + width: 200%; + height: 200%; + position: absolute; + top: 0; + left: 0; + border-radius: inherit; + transform: scale(0.5); + transform-origin: 0 0; + pointer-events: none; + box-sizing: border-box; +} + +.solid::after { + border: 1upx solid rgba(0, 0, 0, 0.1); +} + +.solid-top::after { + border-top: 1upx solid rgba(0, 0, 0, 0.1); +} + +.solid-right::after { + border-right: 1upx solid rgba(0, 0, 0, 0.1); +} + +.solid-bottom::after { + border-bottom: 1upx solid rgba(0, 0, 0, 0.1); +} + +.solid-left::after { + border-left: 1upx solid rgba(0, 0, 0, 0.1); +} + +.solids::after { + border: 8upx solid #eee; +} + +.solids-top::after { + border-top: 8upx solid #eee; +} + +.solids-right::after { + border-right: 8upx solid #eee; +} + +.solids-bottom::after { + border-bottom: 8upx solid #eee; +} + +.solids-left::after { + border-left: 8upx solid #eee; +} + +/* -- 虚线 -- */ + +.dashed::after { + border: 1upx dashed #ddd; +} + +.dashed-top::after { + border-top: 1upx dashed #ddd; +} + +.dashed-right::after { + border-right: 1upx dashed #ddd; +} + +.dashed-bottom::after { + border-bottom: 1upx dashed #ddd; +} + +.dashed-left::after { + border-left: 1upx dashed #ddd; +} + +/* -- 阴影 -- */ + +.shadow[class*='white'] { + --ShadowSize: 0 1upx 6upx; +} + +.shadow-lg { + --ShadowSize: 0upx 40upx 100upx 0upx; +} + +.shadow-warp { + position: relative; + box-shadow: 0 0 10upx rgba(0, 0, 0, 0.1); +} + +.shadow-warp:before, +.shadow-warp:after { + position: absolute; + content: ""; + top: 20upx; + bottom: 30upx; + left: 20upx; + width: 50%; + box-shadow: 0 30upx 20upx rgba(0, 0, 0, 0.2); + transform: rotate(-3deg); + z-index: -1; +} + +.shadow-warp:after { + right: 20upx; + left: auto; + transform: rotate(3deg); +} + +.shadow-blur { + position: relative; +} + +.shadow-blur::before { + content: ""; + display: block; + background: inherit; + filter: blur(10upx); + position: absolute; + width: 100%; + height: 100%; + top: 10upx; + left: 10upx; + z-index: -1; + opacity: 0.4; + transform-origin: 0 0; + border-radius: inherit; + transform: scale(1, 1); +} + +/* ================== + 按钮 + ==================== */ + +.cu-btn { + position: relative; + border: 0upx; + display: inline-flex; + align-items: center; + justify-content: center; + box-sizing: border-box; + padding: 0 30upx; + font-size: 28upx; + height: 64upx; + line-height: 1; + text-align: center; + text-decoration: none; + overflow: visible; + margin-left: initial; + transform: translate(0upx, 0upx); + margin-right: initial; +} + +.cu-btn::after { + display: none; +} + +/* .cu-btn:not([class*="bg-"]) { + background-color: #f0f0f0; +} */ + +.cu-btn[class*="line"] { + background-color: transparent; +} + +.cu-btn[class*="line"]::after { + content: " "; + display: block; + width: 200%; + height: 200%; + position: absolute; + top: 0; + left: 0; + border: 1upx solid currentColor; + transform: scale(0.5); + transform-origin: 0 0; + box-sizing: border-box; + border-radius: 12upx; + z-index: 1; + pointer-events: none; +} + +.cu-btn.round[class*="line"]::after { + border-radius: 1000upx; +} + +.cu-btn[class*="lines"]::after { + border: 6upx solid currentColor; +} + +.cu-btn[class*="bg-"]::after { + display: none; +} + +.cu-btn.sm { + padding: 0 20upx; + font-size: 20upx; + height: 48upx; +} + +.cu-btn.lg { + padding: 0 40upx; + font-size: 32upx; + height: 80upx; +} + +.cu-btn.cuIcon.sm { + width: 48upx; + height: 48upx; +} + +.cu-btn.cuIcon { + width: 64upx; + height: 64upx; + border-radius: 500upx; + padding: 0; +} + +button.cuIcon.lg { + width: 80upx; + height: 80upx; +} + +.cu-btn.shadow-blur::before { + top: 4upx; + left: 4upx; + filter: blur(6upx); + opacity: 0.6; +} + +.cu-btn.button-hover { + transform: translate(1upx, 1upx); +} + +.block { + display: block; +} + +.cu-btn.block { + display: flex; +} + +.cu-btn[disabled] { + opacity: 0.6; + color: #ffffff; +} + +/* ================== + 徽章 + ==================== */ + +.cu-tag { + font-size: 24upx; + vertical-align: middle; + position: relative; + display: inline-flex; + align-items: center; + justify-content: center; + box-sizing: border-box; + padding: 0upx 16upx; + height: 48upx; + font-family: Helvetica Neue, Helvetica, sans-serif; + white-space: nowrap; +} + +.cu-tag:not([class*="bg"]):not([class*="line"]) { + background-color: #f1f1f1; +} + +.cu-tag[class*="line-"]::after { + content: " "; + width: 200%; + height: 200%; + position: absolute; + top: 0; + left: 0; + border: 1upx solid currentColor; + transform: scale(0.5); + transform-origin: 0 0; + box-sizing: border-box; + border-radius: inherit; + z-index: 1; + pointer-events: none; +} + +.cu-tag.radius[class*="line"]::after { + border-radius: 12upx; +} + +.cu-tag.round[class*="line"]::after { + border-radius: 1000upx; +} + +.cu-tag[class*="line-"]::after { + border-radius: 0; +} + +.cu-tag+.cu-tag { + margin-left: 10upx; +} + +.cu-tag.sm { + font-size: 20upx; + padding: 0upx 12upx; + height: 32upx; +} + +.cu-capsule { + display: inline-flex; + vertical-align: middle; +} + +.cu-capsule+.cu-capsule { + margin-left: 10upx; +} + +.cu-capsule .cu-tag { + margin: 0; +} + +.cu-capsule .cu-tag[class*="line-"]:last-child::after { + border-left: 0upx solid transparent; +} + +.cu-capsule .cu-tag[class*="line-"]:first-child::after { + border-right: 0upx solid transparent; +} + +.cu-capsule.radius .cu-tag:first-child { + border-top-left-radius: 6upx; + border-bottom-left-radius: 6upx; +} + +.cu-capsule.radius .cu-tag:last-child::after, +.cu-capsule.radius .cu-tag[class*="line-"] { + border-top-right-radius: 12upx; + border-bottom-right-radius: 12upx; +} + +.cu-capsule.round .cu-tag:first-child { + border-top-left-radius: 200upx; + border-bottom-left-radius: 200upx; + text-indent: 4upx; +} + +.cu-capsule.round .cu-tag:last-child::after, +.cu-capsule.round .cu-tag:last-child { + border-top-right-radius: 200upx; + border-bottom-right-radius: 200upx; + text-indent: -4upx; +} + +.cu-tag.badge { + border-radius: 200upx; + position: absolute; + top: -10upx; + right: -10upx; + font-size: 20upx; + padding: 0upx 10upx; + height: 28upx; + color: #ffffff; +} + +.cu-tag.badge:not([class*="bg-"]) { + background-color: #dd514c; +} + +.cu-tag:empty:not([class*="cuIcon-"]) { + padding: 0upx; + width: 16upx; + height: 16upx; + top: -4upx; + right: -4upx; +} + +.cu-tag[class*="cuIcon-"] { + width: 32upx; + height: 32upx; + top: -4upx; + right: -4upx; +} + +/* ================== + 头像 + ==================== */ + +.cu-avatar { + font-variant: small-caps; + margin: 0; + padding: 0; + display: inline-flex; + text-align: center; + justify-content: center; + align-items: center; + background-color: #ccc; + color: #ffffff; + white-space: nowrap; + position: relative; + width: 64upx; + height: 64upx; + background-size: cover; + background-position: center; + vertical-align: middle; + font-size: 1.5em; +} + +.cu-avatar.sm { + width: 48upx; + height: 48upx; + font-size: 1em; +} + +.cu-avatar.lg { + width: 96upx; + height: 96upx; + font-size: 2em; +} + +.cu-avatar.xl { + width: 128upx; + height: 128upx; + font-size: 2.5em; +} + +.cu-avatar .avatar-text { + font-size: 0.4em; +} + +.cu-avatar-group { + direction: rtl; + unicode-bidi: bidi-override; + padding: 0 10upx 0 40upx; + display: inline-block; +} + +.cu-avatar-group .cu-avatar { + margin-left: -30upx; + border: 4upx solid #f1f1f1; + vertical-align: middle; +} + +.cu-avatar-group .cu-avatar.sm { + margin-left: -20upx; + border: 1upx solid #f1f1f1; +} + +/* ================== + 进度条 + ==================== */ + +.cu-progress { + overflow: hidden; + height: 28upx; + background-color: #ebeef5; + display: inline-flex; + align-items: center; + width: 100%; +} + +.cu-progress+view, +.cu-progress+text { + line-height: 1; +} + +.cu-progress.xs { + height: 10upx; +} + +.cu-progress.sm { + height: 20upx; +} + +.cu-progress view { + width: 0; + height: 100%; + align-items: center; + display: flex; + justify-items: flex-end; + justify-content: space-around; + font-size: 20upx; + color: #ffffff; + transition: width 0.6s ease; +} + +.cu-progress text { + align-items: center; + display: flex; + font-size: 20upx; + color: #333333; + text-indent: 10upx; +} + +.cu-progress.text-progress { + padding-right: 60upx; +} + +.cu-progress.striped view { + background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-size: 72upx 72upx; +} + +.cu-progress.active view { + animation: progress-stripes 2s linear infinite; +} + +@keyframes progress-stripes { + from { + background-position: 72upx 0; + } + + to { + background-position: 0 0; + } +} + +/* ================== + 加载 + ==================== */ + +.cu-load { + display: block; + line-height: 3em; + text-align: center; +} + +.cu-load::before { + font-family: "cuIcon"; + display: inline-block; + margin-right: 6upx; +} + +.cu-load.loading::before { + content: "\e67a"; + animation: cuIcon-spin 2s infinite linear; +} + +.cu-load.loading::after { + content: "加载中..."; +} + +.cu-load.over::before { + content: "\e64a"; +} + +.cu-load.over::after { + content: "没有更多了"; +} + +.cu-load.erro::before { + content: "\e658"; +} + +.cu-load.erro::after { + content: "加载失败"; +} + +.cu-load.load-cuIcon::before { + font-size: 32upx; +} + +.cu-load.load-cuIcon::after { + display: none; +} + +.cu-load.load-cuIcon.over { + display: none; +} + +.cu-load.load-modal { + position: fixed; + top: 0; + right: 0; + bottom: 140upx; + left: 0; + margin: auto; + width: 260upx; + height: 260upx; + background-color: #ffffff; + border-radius: 10upx; + box-shadow: 0 0 0upx 2000upx rgba(0, 0, 0, 0.5); + display: flex; + align-items: center; + flex-direction: column; + justify-content: center; + font-size: 28upx; + z-index: 9999; + line-height: 2.4em; +} + +.cu-load.load-modal [class*="cuIcon-"] { + font-size: 60upx; +} + +.cu-load.load-modal image { + width: 70upx; + height: 70upx; +} + +.cu-load.load-modal::after { + content: ""; + position: absolute; + background-color: #ffffff; + border-radius: 50%; + width: 200upx; + height: 200upx; + font-size: 10px; + border-top: 6upx solid rgba(0, 0, 0, 0.05); + border-right: 6upx solid rgba(0, 0, 0, 0.05); + border-bottom: 6upx solid rgba(0, 0, 0, 0.05); + border-left: 6upx solid #f37b1d; + animation: cuIcon-spin 1s infinite linear; + z-index: -1; +} + +.load-progress { + pointer-events: none; + top: 0; + position: fixed; + width: 100%; + left: 0; + z-index: 2000; +} + +.load-progress.hide { + display: none; +} + +.load-progress .load-progress-bar { + position: relative; + width: 100%; + height: 4upx; + overflow: hidden; + transition: all 200ms ease 0s; +} + +.load-progress .load-progress-spinner { + position: absolute; + top: 10upx; + right: 10upx; + z-index: 2000; + display: block; +} + +.load-progress .load-progress-spinner::after { + content: ""; + display: block; + width: 24upx; + height: 24upx; + -webkit-box-sizing: border-box; + box-sizing: border-box; + border: solid 4upx transparent; + border-top-color: inherit; + border-left-color: inherit; + border-radius: 50%; + -webkit-animation: load-progress-spinner 0.4s linear infinite; + animation: load-progress-spinner 0.4s linear infinite; +} + +@-webkit-keyframes load-progress-spinner { + 0% { + -webkit-transform: rotate(0); + transform: rotate(0); + } + + 100% { + -webkit-transform: rotate(360deg); + transform: rotate(360deg); + } +} + +@keyframes load-progress-spinner { + 0% { + -webkit-transform: rotate(0); + transform: rotate(0); + } + + 100% { + -webkit-transform: rotate(360deg); + transform: rotate(360deg); + } +} + +/* ================== + 列表 + ==================== */ +.grayscale { + filter: grayscale(1); +} + +.cu-list+.cu-list { + margin-top: 30upx +} + +.cu-list>.cu-item { + transition: all .6s ease-in-out 0s; + transform: translateX(0upx) +} + +.cu-list>.cu-item.move-cur { + transform: translateX(-260upx) +} + +.cu-list>.cu-item.move-cur1 { + transform: translateX(-260upx) +} + +.cu-list>.cu-item .move { + position: absolute; + top: 40%; + right: 0; + display: flex; + width: 260upx; + /* height: 100%; */ + transform: translateX(100%) +} + +.cu-list>.cu-item .move1 { + position: absolute; + top: 40%; + right: 0; + display: flex; + width: 160upx; + /* height: 100%; */ + transform: translateX(100%) +} + +.cu-list>.cu-item .move view { + display: flex; + flex: 1; + justify-content: center; + align-items: center +} + +.cu-list.menu-avatar { + /* overflow: hidden; */ +} + +.cu-list.menu-avatar>.cu-item { + position: relative; + /* display: flex; */ + /* padding-right: 10upx; */ + /* height: 140upx; + background-color: #ffffff; + justify-content: flex-end; */ + /* align-items: center */ +} + +.cu-list.menu-avatar>.cu-item>.cu-avatar { + position: absolute; + left: 30upx +} + +.cu-list.menu-avatar>.cu-item .flex .text-cut { + max-width: 510upx +} + +.cu-list.menu-avatar>.cu-item .content { + position: absolute; + left: 146upx; + width: calc(100% - 96upx - 60upx - 120upx - 20upx); + line-height: 1.6em; +} + +.cu-list.menu-avatar>.cu-item .content.flex-sub { + width: calc(100% - 96upx - 60upx - 20upx); +} + +.cu-list.menu-avatar>.cu-item .content>view:first-child { + font-size: 30upx; + display: flex; + align-items: center +} + +.cu-list.menu-avatar>.cu-item .content .cu-tag.sm { + display: inline-block; + margin-left: 10upx; + height: 28upx; + font-size: 16upx; + line-height: 32upx +} + +.cu-list.menu-avatar>.cu-item .action { + width: 100upx; + text-align: center +} + +.cu-list.menu-avatar>.cu-item .action view+view { + margin-top: 10upx +} + +.cu-list.menu-avatar.comment>.cu-item .content { + position: relative; + left: 0; + width: auto; + flex: 1; +} + +.cu-list.menu-avatar.comment>.cu-item { + padding: 30upx 30upx 30upx 120upx; + height: auto +} + +.cu-list.menu-avatar.comment .cu-avatar { + align-self: flex-start +} + +.cu-list.menu>.cu-item { + position: relative; + display: flex; + padding: 0 30upx; + min-height: 100upx; + background-color: #ffffff; + justify-content: space-between; + align-items: center +} + +.cu-list.menu>.cu-item:last-child:after { + border: none +} + +.cu-list.menu-avatar>.cu-item:after, +.cu-list.menu>.cu-item:after { + position: absolute; + top: 0; + left: 0; + box-sizing: border-box; + width: 200%; + height: 200%; + /* border-bottom: 1upx solid #ddd; */ + border-radius: inherit; + content: " "; + transform: scale(.5); + transform-origin: 0 0; + pointer-events: none +} + +.cu-list.menu>.cu-item.grayscale { + background-color: #f5f5f5 +} + +.cu-list.menu>.cu-item.cur { + background-color: #fcf7e9 +} + +.cu-list.menu>.cu-item.arrow { + padding-right: 90upx +} + +.cu-list.menu>.cu-item.arrow:before { + position: absolute; + top: 0; + right: 30upx; + bottom: 0; + display: block; + margin: auto; + width: 30upx; + height: 30upx; + color: #8799a3; + content: "\e6a3"; + text-align: center; + font-size: 34upx; + font-family: cuIcon; + line-height: 30upx +} + +.cu-list.menu>.cu-item button.content { + padding: 0; + background-color: transparent; + justify-content: flex-start +} + +.cu-list.menu>.cu-item button.content:after { + display: none +} + +.cu-list.menu>.cu-item .cu-avatar-group .cu-avatar { + border-color: #ffffff +} + +.cu-list.menu>.cu-item .content>view:first-child { + display: flex; + align-items: center +} + +.cu-list.menu>.cu-item .content>text[class*=cuIcon] { + display: inline-block; + margin-right: 10upx; + width: 1.6em; + text-align: center +} + +.cu-list.menu>.cu-item .content>image { + display: inline-block; + margin-right: 10upx; + width: 1.6em; + height: 1.6em; + vertical-align: middle +} + +.cu-list.menu>.cu-item .content { + font-size: 30upx; + line-height: 1.6em; + flex: 1 +} + +.cu-list.menu>.cu-item .content .cu-tag.sm { + display: inline-block; + margin-left: 10upx; + height: 28upx; + font-size: 16upx; + line-height: 32upx +} + +.cu-list.menu>.cu-item .action .cu-tag:empty { + right: 10upx +} + +.cu-list.menu { + display: block; + overflow: hidden +} + +.cu-list.menu.sm-border>.cu-item:after { + left: 30upx; + width: calc(200% - 120upx) +} + +.cu-list.grid>.cu-item { + position: relative; + display: flex; + padding: 20upx 0 30upx; + transition-duration: 0s; + flex-direction: column +} + +.cu-list.grid>.cu-item:after { + position: absolute; + top: 0; + left: 0; + box-sizing: border-box; + width: 200%; + height: 200%; + border-right: 1px solid rgba(0, 0, 0, .1); + border-bottom: 1px solid rgba(0, 0, 0, .1); + border-radius: inherit; + content: " "; + transform: scale(.5); + transform-origin: 0 0; + pointer-events: none +} + +.cu-list.grid>.cu-item text { + display: block; + margin-top: 10upx; + color: #888; + font-size: 26upx; + line-height: 40upx +} + +.cu-list.grid>.cu-item [class*=cuIcon] { + position: relative; + display: block; + margin-top: 20upx; + width: 100%; + font-size: 48upx +} + +.cu-list.grid>.cu-item .cu-tag { + right: auto; + left: 50%; + margin-left: 20upx +} + +.cu-list.grid { + background-color: #ffffff; + text-align: center +} + +.cu-list.grid.no-border>.cu-item { + padding-top: 10upx; + padding-bottom: 20upx +} + +.cu-list.grid.no-border>.cu-item:after { + border: none +} + +.cu-list.grid.no-border { + padding: 20upx 10upx +} + +.cu-list.grid.col-3>.cu-item:nth-child(3n):after, +.cu-list.grid.col-4>.cu-item:nth-child(4n):after, +.cu-list.grid.col-5>.cu-item:nth-child(5n):after { + border-right-width: 0 +} + +.cu-list.card-menu { + overflow: hidden; + margin-right: 30upx; + margin-left: 30upx; + border-radius: 20upx +} + + +/* ================== + 操作条 + ==================== */ + +.cu-bar { + display: flex; + position: relative; + align-items: center; + min-height: 100upx; + justify-content: space-between; +} + +.cu-bar .action { + display: flex; + align-items: center; + height: 100%; + justify-content: center; + max-width: 100%; +} + +.cu-bar .action.border-title { + position: relative; + top: -10upx; +} + +.cu-bar .action.border-title text[class*="bg-"]:last-child { + position: absolute; + bottom: -0.5rem; + min-width: 2rem; + height: 6upx; + left: 0; +} + +.cu-bar .action.sub-title { + position: relative; + top: -0.2rem; +} + +.cu-bar .action.sub-title text { + position: relative; + z-index: 1; +} + +.cu-bar .action.sub-title text[class*="bg-"]:last-child { + position: absolute; + display: inline-block; + bottom: -0.2rem; + border-radius: 6upx; + width: 100%; + height: 0.6rem; + left: 0.6rem; + opacity: 0.3; + z-index: 0; +} + +.cu-bar .action.sub-title text[class*="text-"]:last-child { + position: absolute; + display: inline-block; + bottom: -0.7rem; + left: 0.5rem; + opacity: 0.2; + z-index: 0; + text-align: right; + font-weight: 900; + font-size: 36upx; +} + +.cu-bar.justify-center .action.border-title text:last-child, +.cu-bar.justify-center .action.sub-title text:last-child { + left: 0; + right: 0; + margin: auto; + text-align: center; +} + +.cu-bar .action:first-child { + margin-left: 30upx; + font-size: 30upx; +} + +.cu-bar .action text.text-cut { + text-align: left; + width: 100%; +} + +.cu-bar .cu-avatar:first-child { + margin-left: 20upx; +} + +.cu-bar .action:first-child>text[class*="cuIcon-"] { + margin-left: -0.3em; + margin-right: 0.3em; +} + +.cu-bar .action:last-child { + margin-right: 30upx; +} + +.cu-bar .action>text[class*="cuIcon-"], +.cu-bar .action>view[class*="cuIcon-"] { + font-size: 36upx; +} + +.cu-bar .action>text[class*="cuIcon-"]+text[class*="cuIcon-"] { + margin-left: 0.5em; +} + +.cu-bar .content { + position: absolute; + text-align: center; + width: calc(100% - 340upx); + left: 0; + right: 0; + bottom: 0; + top: 0; + margin: auto; + height: 60upx; + font-size: 32upx; + line-height: 60upx; + cursor: none; + pointer-events: none; + text-overflow: ellipsis; + white-space: nowrap; + overflow: hidden; +} + +.cu-bar.ios .content { + bottom: 7px; + height: 30px; + font-size: 32upx; + line-height: 30px; +} + +.cu-bar.btn-group { + justify-content: space-around; +} + +.cu-bar.btn-group button { + padding: 20upx 32upx; +} + +.cu-bar.btn-group button { + flex: 1; + margin: 0 20upx; + max-width: 50%; +} + +.cu-bar .search-form { + background-color: #f5f5f5; + line-height: 64upx; + height: 64upx; + font-size: 24upx; + color: #333333; + flex: 1; + display: flex; + align-items: center; + margin: 0 30upx; +} + +.cu-bar .search-form+.action { + margin-right: 30upx; +} + +.cu-bar .search-form input { + flex: 1; + padding-right: 30upx; + height: 64upx; + line-height: 64upx; + font-size: 26upx; + background-color: transparent; +} + +.cu-bar .search-form [class*="cuIcon-"] { + margin: 0 0.5em 0 0.8em; +} + +.cu-bar .search-form [class*="cuIcon-"]::before { + top: 0upx; +} + +.cu-bar.fixed, +.nav.fixed { + position: fixed; + width: 100%; + top: 0; + z-index: 1024; + box-shadow: 0 1upx 6upx rgba(0, 0, 0, 0.1); +} + +.cu-bar.foot { + position: fixed; + width: 100%; + bottom: 0; + z-index: 1024; + box-shadow: 0 -1upx 6upx rgba(0, 0, 0, 0.1); +} + +.cu-bar.tabbar { + padding: 0; + height: calc(100upx + env(safe-area-inset-bottom) / 2); + padding-bottom: calc(env(safe-area-inset-bottom) / 2); +} + +.cu-tabbar-height { + min-height: 100upx; + height: calc(100upx + env(safe-area-inset-bottom) / 2); +} + +.cu-bar.tabbar.shadow { + box-shadow: 0 -1upx 6upx rgba(0, 0, 0, 0.1); +} + +.cu-bar.tabbar .action { + font-size: 22upx; + position: relative; + flex: 1; + text-align: center; + padding: 0; + display: block; + height: auto; + line-height: 1; + margin: 0; + background-color: inherit; + overflow: initial; +} + +.cu-bar.tabbar.shop .action { + width: 140upx; + flex: initial; +} + +.cu-bar.tabbar .action.add-action { + position: relative; + z-index: 2; + padding-top: 50upx; +} + +.cu-bar.tabbar .action.add-action [class*="cuIcon-"] { + position: absolute; + width: 70upx; + z-index: 2; + height: 70upx; + border-radius: 50%; + line-height: 70upx; + font-size: 50upx; + top: -35upx; + left: 0; + right: 0; + margin: auto; + padding: 0; +} + +.cu-bar.tabbar .action.add-action::after { + content: ""; + position: absolute; + width: 100upx; + height: 100upx; + top: -50upx; + left: 0; + right: 0; + margin: auto; + box-shadow: 0 -3upx 8upx rgba(0, 0, 0, 0.08); + border-radius: 50upx; + background-color: inherit; + z-index: 0; +} + +.cu-bar.tabbar .action.add-action::before { + content: ""; + position: absolute; + width: 100upx; + height: 30upx; + bottom: 30upx; + left: 0; + right: 0; + margin: auto; + background-color: inherit; + z-index: 1; +} + +.cu-bar.tabbar .btn-group { + flex: 1; + display: flex; + justify-content: space-around; + align-items: center; + padding: 0 10upx; +} + +.cu-bar.tabbar button.action::after { + border: 0; +} + +.cu-bar.tabbar .action [class*="cuIcon-"] { + width: 100upx; + position: relative; + display: block; + height: auto; + margin: 0 auto 10upx; + text-align: center; + font-size: 40upx; +} + +.cu-bar.tabbar .action .cuIcon-cu-image { + margin: 0 auto; +} + +.cu-bar.tabbar .action .cuIcon-cu-image image { + width: 50upx; + height: 50upx; + display: inline-block; +} + +.cu-bar.tabbar .submit { + align-items: center; + display: flex; + justify-content: center; + text-align: center; + position: relative; + flex: 2; + align-self: stretch; +} + +.cu-bar.tabbar .submit:last-child { + flex: 2.6; +} + +.cu-bar.tabbar .submit+.submit { + flex: 2; +} + +.cu-bar.tabbar.border .action::before { + content: " "; + width: 200%; + height: 200%; + position: absolute; + top: 0; + left: 0; + transform: scale(0.5); + transform-origin: 0 0; + border-right: 1upx solid rgba(0, 0, 0, 0.1); + z-index: 3; +} + +.cu-bar.tabbar.border .action:last-child:before { + display: none; +} + +.cu-bar.input { + padding-right: 20upx; + background-color: #ffffff; +} + +.cu-bar.input input { + overflow: initial; + line-height: 64upx; + height: 64upx; + min-height: 64upx; + flex: 1; + font-size: 30upx; + margin: 0 20upx; +} + +.cu-bar.input .action { + margin-left: 20upx; +} + +.cu-bar.input .action [class*="cuIcon-"] { + font-size: 48upx; +} + +.cu-bar.input input+.action { + margin-right: 20upx; + margin-left: 0upx; +} + +.cu-bar.input .action:first-child [class*="cuIcon-"] { + margin-left: 0upx; +} + +.cu-custom { + display: block; + position: relative; +} + +.cu-custom .cu-bar .content { + width: calc(100% - 440upx); +} + +/* #ifdef MP-ALIPAY */ +.cu-custom .cu-bar .action .cuIcon-back { + opacity: 0; +} + +/* #endif */ + +.cu-custom .cu-bar .content image { + height: 60upx; + width: 240upx; +} + +.cu-custom .cu-bar { + min-height: 0px; + /* #ifdef MP-WEIXIN */ + padding-right: 220upx; + /* #endif */ + /* #ifdef MP-ALIPAY */ + padding-right: 150upx; + /* #endif */ + box-shadow: 0upx 0upx 0upx; + z-index: 9999; +} + +.cu-custom .cu-bar .border-custom { + position: relative; + background: rgba(0, 0, 0, 0.15); + border-radius: 1000upx; + height: 30px; +} + +.cu-custom .cu-bar .border-custom::after { + content: " "; + width: 200%; + height: 200%; + position: absolute; + top: 0; + left: 0; + border-radius: inherit; + transform: scale(0.5); + transform-origin: 0 0; + pointer-events: none; + box-sizing: border-box; + border: 1upx solid #ffffff; + opacity: 0.5; +} + +.cu-custom .cu-bar .border-custom::before { + content: " "; + width: 1upx; + height: 110%; + position: absolute; + top: 22.5%; + left: 0; + right: 0; + margin: auto; + transform: scale(0.5); + transform-origin: 0 0; + pointer-events: none; + box-sizing: border-box; + opacity: 0.6; + background-color: #ffffff; +} + +.cu-custom .cu-bar .border-custom text { + display: block; + flex: 1; + margin: auto !important; + text-align: center; + font-size: 34upx; +} + +/* ================== + 导航栏 + ==================== */ + +.nav { + white-space: nowrap; +} + +::-webkit-scrollbar { + display: none; +} + +.nav .cu-item { + height: 90upx; + display: inline-block; + line-height: 90upx; + margin: 0 10upx; + padding: 0 20upx; +} + +.nav .cu-item.cur { + border-bottom: 4upx solid; +} + +/* ================== + 时间轴 + ==================== */ + +.cu-timeline { + display: block; + background-color: #ffffff; +} + +.cu-timeline .cu-time { + width: 120upx; + text-align: center; + padding: 20upx 0; + font-size: 26upx; + color: #888; + display: block; +} + +.cu-timeline>.cu-item { + padding: 30upx 30upx 30upx 120upx; + position: relative; + display: block; + z-index: 0; +} + +.cu-timeline>.cu-item:not([class*="text-"]) { + color: #ccc; +} + +.cu-timeline>.cu-item::after { + content: ""; + display: block; + position: absolute; + width: 1upx; + background-color: #ddd; + left: 60upx; + height: 100%; + top: 0; + z-index: 8; +} + +.cu-timeline>.cu-item::before { + font-family: "cuIcon"; + display: block; + position: absolute; + top: 36upx; + z-index: 9; + background-color: #ffffff; + width: 50upx; + height: 50upx; + text-align: center; + border: none; + line-height: 50upx; + left: 36upx; +} + +.cu-timeline>.cu-item:not([class*="cuIcon-"])::before { + content: "\e763"; +} + +.cu-timeline>.cu-item[class*="cuIcon-"]::before { + background-color: #ffffff; + width: 50upx; + height: 50upx; + text-align: center; + border: none; + line-height: 50upx; + left: 36upx; +} + +.cu-timeline>.cu-item>.content { + padding: 30upx; + border-radius: 6upx; + display: block; + line-height: 1.6; +} + +.cu-timeline>.cu-item>.content:not([class*="bg-"]) { + background-color: #f1f1f1; + color: #333333; +} + +.cu-timeline>.cu-item>.content+.content { + margin-top: 20upx; +} + +/* ================== + 聊天 + ==================== */ + +.cu-chat { + display: flex; + flex-direction: column; +} + +.cu-chat .cu-item { + display: flex; + padding: 30upx 30upx 70upx; + position: relative; +} + +.cu-chat .cu-item>.cu-avatar { + width: 80upx; + height: 80upx; +} + +.cu-chat .cu-item>.main { + max-width: calc(100% - 260upx); + margin: 0 40upx; + display: flex; + align-items: center; +} + +.cu-chat .cu-item>image { + height: 320upx; +} + +.cu-chat .cu-item>.main .content { + padding: 20upx; + border-radius: 6upx; + display: inline-flex; + max-width: 100%; + align-items: center; + font-size: 30upx; + position: relative; + min-height: 80upx; + line-height: 40upx; + text-align: left; +} + +.cu-chat .cu-item>.main .content:not([class*="bg-"]) { + background-color: #ffffff; + color: #333333; +} + +.cu-chat .cu-item .date { + position: absolute; + font-size: 24upx; + color: #8799a3; + width: calc(100% - 320upx); + bottom: 20upx; + left: 160upx; +} + +.cu-chat .cu-item .action { + padding: 0 30upx; + display: flex; + align-items: center; +} + +.cu-chat .cu-item>.main .content::after { + content: ""; + top: 27upx; + transform: rotate(45deg); + position: absolute; + z-index: 100; + display: inline-block; + overflow: hidden; + width: 24upx; + height: 24upx; + left: -12upx; + right: initial; + background-color: inherit; +} + +.cu-chat .cu-item.self>.main .content::after { + left: auto; + right: -12upx; +} + +.cu-chat .cu-item>.main .content::before { + content: ""; + top: 30upx; + transform: rotate(45deg); + position: absolute; + z-index: -1; + display: inline-block; + overflow: hidden; + width: 24upx; + height: 24upx; + left: -12upx; + right: initial; + background-color: inherit; + filter: blur(5upx); + opacity: 0.3; +} + +.cu-chat .cu-item>.main .content:not([class*="bg-"])::before { + background-color: #333333; + opacity: 0.1; +} + +.cu-chat .cu-item.self>.main .content::before { + left: auto; + right: -12upx; +} + +.cu-chat .cu-item.self { + justify-content: flex-end; + text-align: right; +} + +.cu-chat .cu-info { + display: inline-block; + margin: 20upx auto; + font-size: 24upx; + padding: 8upx 12upx; + background-color: rgba(0, 0, 0, 0.2); + border-radius: 6upx; + color: #ffffff; + max-width: 400upx; + line-height: 1.4; +} + +/* ================== + 卡片 + ==================== */ + +.cu-card { + display: block; + overflow: hidden; +} + +.cu-card>.cu-item { + display: block; + background-color: #ffffff; + overflow: hidden; + border-radius: 10upx; + margin: 30upx; +} + +.cu-card>.cu-item.shadow-blur { + overflow: initial; +} + +.cu-card.no-card>.cu-item { + margin: 0upx; + border-radius: 0upx; +} + +.cu-card .grid.grid-square { + margin-bottom: -20upx; +} + +.cu-card.case .image { + position: relative; +} + +.cu-card.case .image image { + width: 100%; +} + +.cu-card.case .image .cu-tag { + position: absolute; + right: 0; + top: 0; +} + +.cu-card.case .image .cu-bar { + position: absolute; + bottom: 0; + width: 100%; + background-color: transparent; + padding: 0upx 30upx; +} + +.cu-card.case.no-card .image { + margin: 30upx 30upx 0; + overflow: hidden; + border-radius: 10upx; +} + +.cu-card.dynamic { + display: block; +} + +.cu-card.dynamic>.cu-item { + display: block; + background-color: #ffffff; + overflow: hidden; +} + +.cu-card.dynamic>.cu-item>.text-content { + padding: 0 30upx 0; + max-height: 6.4em; + overflow: hidden; + font-size: 30upx; + margin-bottom: 20upx; +} + +.cu-card.dynamic>.cu-item .square-img { + width: 100%; + height: 200upx; + border-radius: 6upx; +} + +.cu-card.dynamic>.cu-item .only-img { + width: 100%; + height: 320upx; + border-radius: 6upx; +} + +/* card.dynamic>.cu-item .comment { + padding: 20upx; + background-color: #f1f1f1; + margin: 0 30upx 30upx; + border-radius: 6upx; +} */ + +.cu-card.article { + display: block; +} + +.cu-card.article>.cu-item { + padding-bottom: 30upx; +} + +.cu-card.article>.cu-item .title { + font-size: 30upx; + font-weight: 900; + color: #333333; + line-height: 100upx; + padding: 0 30upx; +} + +.cu-card.article>.cu-item .content { + display: flex; + padding: 0 30upx; +} + +.cu-card.article>.cu-item .content>image { + width: 240upx; + height: 6.4em; + margin-right: 20upx; + border-radius: 6upx; +} + +.cu-card.article>.cu-item .content .desc { + flex: 1; + display: flex; + flex-direction: column; + justify-content: space-between; +} + +.cu-card.article>.cu-item .content .text-content { + font-size: 28upx; + color: #888; + height: 4.8em; + overflow: hidden; +} + +/* ================== + 表单 + ==================== */ + +.cu-form-group { + background-color: #ffffff; + padding: 1upx 30upx; + display: flex; + align-items: center; + min-height: 100upx; + justify-content: space-between; +} + +.cu-form-group+.cu-form-group { + border-top: 1upx solid #eee; +} + +.cu-form-group .title { + text-align: justify; + padding-right: 30upx; + font-size: 30upx; + position: relative; + height: 60upx; + line-height: 60upx; +} + +.cu-form-group input { + flex: 1; + font-size: 30upx; + color: #555; + padding-right: 20upx; +} + +.cu-form-group>text[class*="cuIcon-"] { + font-size: 36upx; + padding: 0; + box-sizing: border-box; +} + +.cu-form-group textarea { + margin: 32upx 0 30upx; + height: 4.6em; + width: 100%; + line-height: 1.2em; + flex: 1; + font-size: 28upx; + padding: 0; +} + +.cu-form-group.align-start .title { + height: 1em; + margin-top: 32upx; + line-height: 1em; +} + +.cu-form-group picker { + flex: 1; + padding-right: 40upx; + overflow: hidden; + position: relative; +} + +.cu-form-group picker .picker { + line-height: 100upx; + font-size: 28upx; + text-overflow: ellipsis; + white-space: nowrap; + overflow: hidden; + width: 100%; + text-align: right; +} + +.cu-form-group picker::after { + font-family: cuIcon; + display: block; + content: "\e6a3"; + position: absolute; + font-size: 34upx; + color: #8799a3; + line-height: 100upx; + width: 60upx; + text-align: center; + top: 0; + bottom: 0; + right: -20upx; + margin: auto; +} + +.cu-form-group textarea[disabled], +.cu-form-group textarea[disabled] .placeholder { + color: transparent; +} + +/* ================== + 模态窗口 + ==================== */ + +.cu-modal { + position: fixed; + top: 0; + right: 0; + bottom: 0; + left: 0; + z-index: 1110; + opacity: 0; + outline: 0; + text-align: center; + -ms-transform: scale(1.185); + transform: scale(1.185); + backface-visibility: hidden; + perspective: 2000upx; + background: rgba(0, 0, 0, 0.6); + transition: all 0.3s ease-in-out 0s; + pointer-events: none; +} + +.cu-modal::before { + content: "\200B"; + display: inline-block; + height: 100%; + vertical-align: middle; +} + +.cu-modal.show { + opacity: 1; + transition-duration: 0.3s; + -ms-transform: scale(1); + transform: scale(1); + overflow-x: hidden; + overflow-y: auto; + pointer-events: auto; +} + +.cu-dialog { + position: relative; + display: inline-block; + vertical-align: middle; + margin-left: auto; + margin-right: auto; + width: 680upx; + max-width: 100%; + background-color: #f8f8f8; + border-radius: 10upx; + overflow: hidden; +} + +.cu-modal.bottom-modal::before { + vertical-align: bottom; +} + +.cu-modal.bottom-modal .cu-dialog { + width: 100%; + border-radius: 0; +} + +.cu-modal.bottom-modal { + margin-bottom: -1000upx; +} + +.cu-modal.bottom-modal.show { + margin-bottom: 0; +} + +.cu-modal.drawer-modal { + transform: scale(1); + display: flex; +} + +.cu-modal.drawer-modal .cu-dialog { + height: 100%; + min-width: 200upx; + border-radius: 0; + margin: initial; + transition-duration: 0.3s; +} + +.cu-modal.drawer-modal.justify-start .cu-dialog { + transform: translateX(-100%); +} + +.cu-modal.drawer-modal.justify-end .cu-dialog { + transform: translateX(100%); +} + +.cu-modal.drawer-modal.show .cu-dialog { + transform: translateX(0%); +} +.cu-modal .cu-dialog>.cu-bar:first-child .action{ + min-width: 100rpx; + margin-right: 0; + min-height: 100rpx; +} +/* ================== + 轮播 + ==================== */ +swiper .a-swiper-dot { + display: inline-block; + width: 16upx; + height: 16upx; + background: rgba(0, 0, 0, .3); + border-radius: 50%; + vertical-align: middle; +} + +swiper[class*="-dot"] .wx-swiper-dots, +swiper[class*="-dot"] .a-swiper-dots, +swiper[class*="-dot"] .uni-swiper-dots { + display: flex; + align-items: center; + width: 100%; + justify-content: center; +} + +swiper.square-dot .wx-swiper-dot, +swiper.square-dot .a-swiper-dot, +swiper.square-dot .uni-swiper-dot { + background-color: #ffffff; + opacity: 0.4; + width: 10upx; + height: 10upx; + border-radius: 20upx; + margin: 0 8upx !important; +} + +swiper.square-dot .wx-swiper-dot.wx-swiper-dot-active, +swiper.square-dot .a-swiper-dot.a-swiper-dot-active, +swiper.square-dot .uni-swiper-dot.uni-swiper-dot-active { + opacity: 1; + width: 30upx; +} + +swiper.round-dot .wx-swiper-dot, +swiper.round-dot .a-swiper-dot, +swiper.round-dot .uni-swiper-dot { + width: 10upx; + height: 10upx; + position: relative; + margin: 4upx 8upx !important; +} + +swiper.round-dot .wx-swiper-dot.wx-swiper-dot-active::after, +swiper.round-dot .a-swiper-dot.a-swiper-dot-active::after, +swiper.round-dot .uni-swiper-dot.uni-swiper-dot-active::after { + content: ""; + position: absolute; + width: 10upx; + height: 10upx; + top: 0upx; + left: 0upx; + right: 0; + bottom: 0; + margin: auto; + background-color: #ffffff; + border-radius: 20upx; +} + +swiper.round-dot .wx-swiper-dot.wx-swiper-dot-active, +swiper.round-dot .a-swiper-dot.a-swiper-dot-active, +swiper.round-dot .uni-swiper-dot.uni-swiper-dot-active { + width: 18upx; + height: 18upx; +} + +.screen-swiper { + min-height: 375upx; +} + +.screen-swiper image, +.screen-swiper video, +.swiper-item image, +.swiper-item video { + width: 100%; + display: block; + height: 100%; + margin: 0; + pointer-events: none; +} + +.card-swiper { + height: 420upx !important; +} + +.card-swiper swiper-item { + width: 610upx !important; + left: 70upx; + box-sizing: border-box; + padding: 40upx 0upx 70upx; + overflow: initial; +} + +.card-swiper swiper-item .swiper-item { + width: 100%; + display: block; + height: 100%; + border-radius: 10upx; + transform: scale(0.9); + transition: all 0.2s ease-in 0s; + overflow: hidden; +} + +.card-swiper swiper-item.cur .swiper-item { + transform: none; + transition: all 0.2s ease-in 0s; +} + + +.tower-swiper { + height: 420upx; + position: relative; + max-width: 750upx; + overflow: hidden; +} + +.tower-swiper .tower-item { + position: absolute; + width: 300upx; + height: 380upx; + top: 0; + bottom: 0; + left: 50%; + margin: auto; + transition: all 0.2s ease-in 0s; + opacity: 1; +} + +.tower-swiper .tower-item.none { + opacity: 0; +} + +.tower-swiper .tower-item .swiper-item { + width: 100%; + height: 100%; + border-radius: 6upx; + overflow: hidden; +} + +/* ================== + 步骤条 + ==================== */ + +.cu-steps { + display: flex; +} + +scroll-view.cu-steps { + display: block; + white-space: nowrap; +} + +scroll-view.cu-steps .cu-item { + display: inline-block; +} + +.cu-steps .cu-item { + flex: 1; + text-align: center; + position: relative; + min-width: 100upx; +} + +.cu-steps .cu-item:not([class*="text-"]) { + color: #8799a3; +} + +.cu-steps .cu-item [class*="cuIcon-"], +.cu-steps .cu-item .num { + display: block; + font-size: 40upx; + line-height: 80upx; +} + +.cu-steps .cu-item::before, +.cu-steps .cu-item::after, +.cu-steps.steps-arrow .cu-item::before, +.cu-steps.steps-arrow .cu-item::after { + content: ""; + display: block; + position: absolute; + height: 0px; + width: calc(100% - 80upx); + border-bottom: 1px solid #ccc; + left: calc(0px - (100% - 80upx) / 2); + top: 40upx; + z-index: 0; +} + +.cu-steps.steps-arrow .cu-item::before, +.cu-steps.steps-arrow .cu-item::after { + content: "\e6a3"; + font-family: 'cuIcon'; + height: 30upx; + border-bottom-width: 0px; + line-height: 30upx; + top: 0; + bottom: 0; + margin: auto; + color: #ccc; +} + +.cu-steps.steps-bottom .cu-item::before, +.cu-steps.steps-bottom .cu-item::after { + bottom: 40upx; + top: initial; +} + +.cu-steps .cu-item::after { + border-bottom: 1px solid currentColor; + width: 0px; + transition: all 0.3s ease-in-out 0s; +} + +.cu-steps .cu-item[class*="text-"]::after { + width: calc(100% - 80upx); + color: currentColor; +} + +.cu-steps .cu-item:first-child::before, +.cu-steps .cu-item:first-child::after { + display: none; +} + +.cu-steps .cu-item .num { + width: 40upx; + height: 40upx; + border-radius: 50%; + line-height: 40upx; + margin: 20upx auto; + font-size: 24upx; + border: 1px solid currentColor; + position: relative; + overflow: hidden; +} + +.cu-steps .cu-item[class*="text-"] .num { + background-color: currentColor; +} + +.cu-steps .cu-item .num::before, +.cu-steps .cu-item .num::after { + content: attr(data-index); + position: absolute; + left: 0; + right: 0; + top: 0; + bottom: 0; + margin: auto; + transition: all 0.3s ease-in-out 0s; + transform: translateY(0upx); +} + +.cu-steps .cu-item[class*="text-"] .num::before { + transform: translateY(-40upx); + color: #ffffff; +} + +.cu-steps .cu-item .num::after { + transform: translateY(40upx); + color: #ffffff; + transition: all 0.3s ease-in-out 0s; +} + +.cu-steps .cu-item[class*="text-"] .num::after { + content: "\e645"; + font-family: 'cuIcon'; + color: #ffffff; + transform: translateY(0upx); +} + +.cu-steps .cu-item[class*="text-"] .num.err::after { + content: "\e646"; +} + +/* ================== + 布局 + ==================== */ + +/* -- flex弹性布局 -- */ + +.flex { + display: flex; +} + +.basis-xs { + flex-basis: 20%; +} + +.basis-sm { + flex-basis: 40%; +} + +.basis-df { + flex-basis: 50%; +} + +.basis-lg { + flex-basis: 60%; +} + +.basis-xl { + flex-basis: 80%; +} + +.flex-sub { + flex: 1; +} + +.flex-twice { + flex: 2; +} + +.flex-treble { + flex: 3; +} + +.flex-direction { + flex-direction: column; +} + +.flex-wrap { + flex-wrap: wrap; +} + +.align-start { + align-items: flex-start; +} + +.align-end { + align-items: flex-end; +} + +.align-center { + align-items: center; +} + +.align-stretch { + align-items: stretch; +} + +.self-start { + align-self: flex-start; +} + +.self-center { + align-self: flex-center; +} + +.self-end { + align-self: flex-end; +} + +.self-stretch { + align-self: stretch; +} + +.align-stretch { + align-items: stretch; +} + +.justify-start { + justify-content: flex-start; +} + +.justify-end { + justify-content: flex-end; +} + +.justify-center { + justify-content: center; +} + +.justify-between { + justify-content: space-between; +} + +.justify-around { + justify-content: space-around; +} + +/* grid布局 */ + +.grid { + display: flex; + flex-wrap: wrap; +} + +.grid.grid-square { + overflow: hidden; +} + +.grid.grid-square .cu-tag { + position: absolute; + right: 0; + top: 0; + border-bottom-left-radius: 6upx; + padding: 6upx 12upx; + height: auto; + background-color: rgba(0, 0, 0, 0.5); +} + +.grid.grid-square>view>text[class*="cuIcon-"] { + font-size: 52upx; + position: absolute; + color: #8799a3; + margin: auto; + top: 0; + bottom: 0; + left: 0; + right: 0; + display: flex; + justify-content: center; + align-items: center; + flex-direction: column; +} + +.grid.grid-square>view { + margin-right: 20upx; + margin-bottom: 20upx; + border-radius: 6upx; + position: relative; + overflow: hidden; +} +.grid.grid-square>view.bg-img image { + width: 100%; + height: 100%; + position: absolute; +} +.grid.col-1.grid-square>view { + padding-bottom: 100%; + height: 0; + margin-right: 0; +} + +.grid.col-2.grid-square>view { + padding-bottom: calc((100% - 20upx)/2); + height: 0; + width: calc((100% - 20upx)/2); +} + +.grid.col-3.grid-square>view { + padding-bottom: calc((100% - 40upx)/3); + height: 0; + width: calc((100% - 40upx)/3); +} + +.grid.col-4.grid-square>view { + padding-bottom: calc((100% - 60upx)/4); + height: 0; + width: calc((100% - 60upx)/4); +} + +.grid.col-5.grid-square>view { + padding-bottom: calc((100% - 80upx)/5); + height: 0; + width: calc((100% - 80upx)/5); +} + +.grid.col-2.grid-square>view:nth-child(2n), +.grid.col-3.grid-square>view:nth-child(3n), +.grid.col-4.grid-square>view:nth-child(4n), +.grid.col-5.grid-square>view:nth-child(5n) { + margin-right: 0; +} + +.grid.col-1>view { + width: 100%; +} + +.grid.col-2>view { + width: 50%; +} + +.grid.col-3>view { + width: 33.33%; +} + +.grid.col-4>view { + width: 25%; +} + +.grid.col-5>view { + width: 20%; +} + +/* -- 内外边距 -- */ + +.margin-0 { + margin: 0; +} + +.margin-xs { + margin: 10upx; +} + +.margin-sm { + margin: 20upx; +} + +.margin { + margin: 30upx; +} + +.margin-lg { + margin: 40upx; +} + +.margin-xl { + margin: 50upx; +} + +.margin-top-xs { + margin-top: 10upx; +} + +.margin-top-sm { + margin-top: 20upx; +} + +.margin-top { + margin-top: 30upx; +} + +.margin-top-lg { + margin-top: 40upx; +} + +.margin-top-xl { + margin-top: 50upx; +} + +.margin-right-xs { + margin-right: 10upx; +} + +.margin-right-sm { + margin-right: 20upx; +} + +.margin-right { + margin-right: 30upx; +} + +.margin-right-lg { + margin-right: 40upx; +} + +.margin-right-xl { + margin-right: 50upx; +} + +.margin-bottom-xs { + margin-bottom: 10upx; +} + +.margin-bottom-sm { + margin-bottom: 20upx; +} + +.margin-bottom { + margin-bottom: 30upx; +} + +.margin-bottom-lg { + margin-bottom: 40upx; +} + +.margin-bottom-xl { + margin-bottom: 50upx; +} + +.margin-left-xs { + margin-left: 10upx; +} + +.margin-left-sm { + margin-left: 20upx; +} + +.margin-left { + margin-left: 30upx; +} + +.margin-left-lg { + margin-left: 40upx; +} + +.margin-left-xl { + margin-left: 50upx; +} + +.margin-lr-xs { + margin-left: 10upx; + margin-right: 10upx; +} + +.margin-lr-sm { + margin-left: 20upx; + margin-right: 20upx; +} + +.margin-lr { + margin-left: 30upx; + margin-right: 30upx; +} + +.margin-lr-lg { + margin-left: 40upx; + margin-right: 40upx; +} + +.margin-lr-xl { + margin-left: 50upx; + margin-right: 50upx; +} + +.margin-tb-xs { + margin-top: 10upx; + margin-bottom: 10upx; +} + +.margin-tb-sm { + margin-top: 20upx; + margin-bottom: 20upx; +} + +.margin-tb { + margin-top: 30upx; + margin-bottom: 30upx; +} + +.margin-tb-lg { + margin-top: 40upx; + margin-bottom: 40upx; +} + +.margin-tb-xl { + margin-top: 50upx; + margin-bottom: 50upx; +} + +.padding-0 { + padding: 0; +} + +.padding-xs { + padding: 10upx; +} + +.padding-sm { + padding: 20upx; +} + +.padding { + padding: 30upx; +} + +.padding-lg { + padding: 40upx; +} + +.padding-xl { + padding: 50upx; +} + +.padding-top-xs { + padding-top: 10upx; +} + +.padding-top-sm { + padding-top: 20upx; +} + +.padding-top { + padding-top: 30upx; +} + +.padding-top-lg { + padding-top: 40upx; +} + +.padding-top-xl { + padding-top: 50upx; +} + +.padding-right-xs { + padding-right: 10upx; +} + +.padding-right-sm { + padding-right: 20upx; +} + +.padding-right { + padding-right: 30upx; +} + +.padding-right-lg { + padding-right: 40upx; +} + +.padding-right-xl { + padding-right: 50upx; +} + +.padding-bottom-xs { + padding-bottom: 10upx; +} + +.padding-bottom-sm { + padding-bottom: 20upx; +} + +.padding-bottom { + padding-bottom: 30upx; +} + +.padding-bottom-lg { + padding-bottom: 40upx; +} + +.padding-bottom-xl { + padding-bottom: 50upx; +} + +.padding-left-xs { + padding-left: 10upx; +} + +.padding-left-sm { + padding-left: 20upx; +} + +.padding-left { + padding-left: 30upx; +} + +.padding-left-lg { + padding-left: 40upx; +} + +.padding-left-xl { + padding-left: 50upx; +} + +.padding-lr-xs { + padding-left: 10upx; + padding-right: 10upx; +} + +.padding-lr-sm { + padding-left: 20upx; + padding-right: 20upx; +} + +.padding-lr { + padding-left: 30upx; + padding-right: 30upx; +} + +.padding-lr-lg { + padding-left: 40upx; + padding-right: 40upx; +} + +.padding-lr-xl { + padding-left: 50upx; + padding-right: 50upx; +} + +.padding-tb-xs { + padding-top: 10upx; + padding-bottom: 10upx; +} + +.padding-tb-sm { + padding-top: 20upx; + padding-bottom: 20upx; +} + +.padding-tb { + padding-top: 30upx; + padding-bottom: 30upx; +} + +.padding-tb-lg { + padding-top: 40upx; + padding-bottom: 40upx; +} + +.padding-tb-xl { + padding-top: 50upx; + padding-bottom: 50upx; +} + +/* -- 浮动 -- */ + +.cf::after, +.cf::before { + content: " "; + display: table; +} + +.cf::after { + clear: both; +} + +.fl { + float: left; +} + +.fr { + float: right; +} + +/* ================== + 背景 + ==================== */ + +.line-red::after, +.lines-red::after { + border-color: #e54d42; +} + +.line-orange::after, +.lines-orange::after { + border-color: #f37b1d; +} + +.line-yellow::after, +.lines-yellow::after { + border-color: #fbbd08; +} + +.line-olive::after, +.lines-olive::after { + border-color: #8dc63f; +} + +.line-green::after, +.lines-green::after { + border-color: #39b54a; +} + +.line-cyan::after, +.lines-cyan::after { + border-color: #1cbbb4; +} + +.line-blue::after, +.lines-blue::after { + border-color: #0081ff; +} + +.line-purple::after, +.lines-purple::after { + border-color: #6739b6; +} + +.line-mauve::after, +.lines-mauve::after { + border-color: #9c26b0; +} + +.line-pink::after, +.lines-pink::after { + border-color: #e03997; +} + +.line-brown::after, +.lines-brown::after { + border-color: #a5673f; +} + +.line-grey::after, +.lines-grey::after { + border-color: #8799a3; +} + +.line-gray::after, +.lines-gray::after { + border-color: #aaaaaa; +} + +.line-black::after, +.lines-black::after { + border-color: #333333; +} + +.line-white::after, +.lines-white::after { + border-color: #ffffff; +} + +.bg-red { + background-color: #e54d42; + color: #ffffff; +} + +.bg-orange { + background-color: #f37b1d; + color: #ffffff; +} + +.bg-yellow { + background-color: #fbbd08; + color: #333333; +} + +.bg-olive { + background-color: #8dc63f; + color: #ffffff; +} + +.bg-green { + background-color: #39b54a; + color: #ffffff; +} + +.bg-cyan { + background-color: #1cbbb4; + color: #ffffff; +} + +.bg-blue { + background-color: #0081ff; + color: #ffffff; +} + +.bg-purple { + background-color: #6739b6; + color: #ffffff; +} + +.bg-mauve { + background-color: #9c26b0; + color: #ffffff; +} + +.bg-pink { + background-color: #e03997; + color: #ffffff; +} + +.bg-brown { + background-color: #a5673f; + color: #ffffff; +} + +.bg-grey { + background-color: #8799a3; + color: #ffffff; +} + +.bg-gray { + background-color: #f0f0f0; + color: #333333; +} + +.bg-black { + background-color: #333333; + color: #ffffff; +} + +.bg-white { + background-color: #ffffff; + color: #666666; +} + +.bg-shadeTop { + background-image: linear-gradient(rgba(0, 0, 0, 1), rgba(0, 0, 0, 0.01)); + color: #ffffff; +} + +.bg-shadeBottom { + background-image: linear-gradient(rgba(0, 0, 0, 0.01), rgba(0, 0, 0, 1)); + color: #ffffff; +} + +.bg-red.light { + color: #e54d42; + background-color: #fadbd9; +} + +.bg-orange.light { + color: #f37b1d; + background-color: #fde6d2; +} + +.bg-yellow.light { + color: #fbbd08; + background-color: #fef2ced2; +} + +.bg-olive.light { + color: #8dc63f; + background-color: #e8f4d9; +} + +.bg-green.light { + color: #39b54a; + background-color: #d7f0dbff; +} + +.bg-cyan.light { + color: #1cbbb4; + background-color: #d2f1f0; +} + +.bg-blue.light { + color: #0081ff; + background-color: #cce6ff; +} + +.bg-purple.light { + color: #6739b6; + background-color: #e1d7f0; +} + +.bg-mauve.light { + color: #9c26b0; + background-color: #ebd4ef; +} + +.bg-pink.light { + color: #e03997; + background-color: #f9d7ea; +} + +.bg-brown.light { + color: #a5673f; + background-color: #ede1d9; +} + +.bg-grey.light { + color: #8799a3; + background-color: #e7ebed; +} + +.bg-gradual-red { + background-image: linear-gradient(45deg, #f43f3b, #ec008c); + color: #ffffff; +} + +.bg-gradual-orange { + background-image: linear-gradient(45deg, #ff9700, #ed1c24); + color: #ffffff; +} + +.bg-gradual-green { + background-image: linear-gradient(45deg, #39b54a, #8dc63f); + color: #ffffff; +} + +.bg-gradual-purple { + background-image: linear-gradient(45deg, #9000ff, #5e00ff); + color: #ffffff; +} + +.bg-gradual-pink { + background-image: linear-gradient(45deg, #ec008c, #6739b6); + color: #ffffff; +} + +.bg-gradual-blue { + background-image: linear-gradient(45deg, #0081ff, #1cbbb4); + color: #ffffff; +} + +.shadow[class*="-red"] { + box-shadow: 6upx 6upx 8upx rgba(204, 69, 59, 0.2); +} + +.shadow[class*="-orange"] { + box-shadow: 6upx 6upx 8upx rgba(217, 109, 26, 0.2); +} + +.shadow[class*="-yellow"] { + box-shadow: 6upx 6upx 8upx rgba(224, 170, 7, 0.2); +} + +.shadow[class*="-olive"] { + box-shadow: 6upx 6upx 8upx rgba(124, 173, 55, 0.2); +} + +.shadow[class*="-green"] { + box-shadow: 6upx 6upx 8upx rgba(48, 156, 63, 0.2); +} + +.shadow[class*="-cyan"] { + box-shadow: 6upx 6upx 8upx rgba(28, 187, 180, 0.2); +} + +.shadow[class*="-blue"] { + box-shadow: 6upx 6upx 8upx rgba(0, 102, 204, 0.2); +} + +.shadow[class*="-purple"] { + box-shadow: 6upx 6upx 8upx rgba(88, 48, 156, 0.2); +} + +.shadow[class*="-mauve"] { + box-shadow: 6upx 6upx 8upx rgba(133, 33, 150, 0.2); +} + +.shadow[class*="-pink"] { + box-shadow: 6upx 6upx 8upx rgba(199, 50, 134, 0.2); +} + +.shadow[class*="-brown"] { + box-shadow: 6upx 6upx 8upx rgba(140, 88, 53, 0.2); +} + +.shadow[class*="-grey"] { + box-shadow: 6upx 6upx 8upx rgba(114, 130, 138, 0.2); +} + +.shadow[class*="-gray"] { + box-shadow: 6upx 6upx 8upx rgba(114, 130, 138, 0.2); +} + +.shadow[class*="-black"] { + box-shadow: 6upx 6upx 8upx rgba(26, 26, 26, 0.2); +} + +.shadow[class*="-white"] { + box-shadow: 6upx 6upx 8upx rgba(26, 26, 26, 0.2); +} + +.text-shadow[class*="-red"] { + text-shadow: 6upx 6upx 8upx rgba(204, 69, 59, 0.2); +} + +.text-shadow[class*="-orange"] { + text-shadow: 6upx 6upx 8upx rgba(217, 109, 26, 0.2); +} + +.text-shadow[class*="-yellow"] { + text-shadow: 6upx 6upx 8upx rgba(224, 170, 7, 0.2); +} + +.text-shadow[class*="-olive"] { + text-shadow: 6upx 6upx 8upx rgba(124, 173, 55, 0.2); +} + +.text-shadow[class*="-green"] { + text-shadow: 6upx 6upx 8upx rgba(48, 156, 63, 0.2); +} + +.text-shadow[class*="-cyan"] { + text-shadow: 6upx 6upx 8upx rgba(28, 187, 180, 0.2); +} + +.text-shadow[class*="-blue"] { + text-shadow: 6upx 6upx 8upx rgba(0, 102, 204, 0.2); +} + +.text-shadow[class*="-purple"] { + text-shadow: 6upx 6upx 8upx rgba(88, 48, 156, 0.2); +} + +.text-shadow[class*="-mauve"] { + text-shadow: 6upx 6upx 8upx rgba(133, 33, 150, 0.2); +} + +.text-shadow[class*="-pink"] { + text-shadow: 6upx 6upx 8upx rgba(199, 50, 134, 0.2); +} + +.text-shadow[class*="-brown"] { + text-shadow: 6upx 6upx 8upx rgba(140, 88, 53, 0.2); +} + +.text-shadow[class*="-grey"] { + text-shadow: 6upx 6upx 8upx rgba(114, 130, 138, 0.2); +} + +.text-shadow[class*="-gray"] { + text-shadow: 6upx 6upx 8upx rgba(114, 130, 138, 0.2); +} + +.text-shadow[class*="-black"] { + text-shadow: 6upx 6upx 8upx rgba(26, 26, 26, 0.2); +} + +.bg-img { + background-size: cover; + background-position: center; + background-repeat: no-repeat; +} + +.bg-mask { + background-color: #333333; + position: relative; +} + +.bg-mask::after { + content: ""; + border-radius: inherit; + width: 100%; + height: 100%; + display: block; + background-color: rgba(0, 0, 0, 0.4); + position: absolute; + left: 0; + right: 0; + bottom: 0; + top: 0; +} + +.bg-mask view, +.bg-mask cover-view { + z-index: 5; + position: relative; +} + +.bg-video { + position: relative; +} + +.bg-video video { + display: block; + height: 100%; + width: 100%; + -o-object-fit: cover; + object-fit: cover; + position: absolute; + top: 0; + z-index: 0; + pointer-events: none; +} + +/* ================== + 文本 + ==================== */ + +.text-xs { + font-size: 20upx; +} + +.text-sm { + font-size: 24upx; +} + +.text-df { + font-size: 28upx; +} + +.text-lg { + font-size: 32upx; +} + +.text-xl { + font-size: 36upx; +} + +.text-xxl { + font-size: 44upx; +} + +.text-sl { + font-size: 80upx; +} + +.text-xsl { + font-size: 120upx; +} + +.text-Abc { + text-transform: Capitalize; +} + +.text-ABC { + text-transform: Uppercase; +} + +.text-abc { + text-transform: Lowercase; +} + +.text-price::before { + content: "¥"; + font-size: 80%; + margin-right: 4upx; +} + +.text-cut { + text-overflow: ellipsis; + white-space: nowrap; + overflow: hidden; +} + +.text-bold { + font-weight: bold; +} + +.text-center { + text-align: center; +} + +.text-content { + line-height: 1.6; +} + +.text-left { + text-align: left; +} + +.text-right { + text-align: right; +} + +.text-red, +.line-red, +.lines-red { + color: #e54d42; +} + +.text-orange, +.line-orange, +.lines-orange { + color: #f37b1d; +} + +.text-yellow, +.line-yellow, +.lines-yellow { + color: #fbbd08; +} + +.text-olive, +.line-olive, +.lines-olive { + color: #8dc63f; +} + +.text-green, +.line-green, +.lines-green { + color: #39b54a; +} + +.text-cyan, +.line-cyan, +.lines-cyan { + color: #1cbbb4; +} + +.text-blue, +.line-blue, +.lines-blue { + color: #0081ff; +} + +.text-purple, +.line-purple, +.lines-purple { + color: #6739b6; +} + +.text-mauve, +.line-mauve, +.lines-mauve { + color: #9c26b0; +} + +.text-pink, +.line-pink, +.lines-pink { + color: #e03997; +} + +.text-brown, +.line-brown, +.lines-brown { + color: #a5673f; +} + +.text-grey, +.line-grey, +.lines-grey { + color: #8799a3; +} + +.text-gray, +.line-gray, +.lines-gray { + color: #aaaaaa; +} + +.text-black, +.line-black, +.lines-black { + color: #333333; +} + +.text-white, +.line-white, +.lines-white { + color: #ffffff; +} diff --git a/components/cuihai-combox/cuihai-combox.vue b/components/cuihai-combox/cuihai-combox.vue new file mode 100644 index 0000000..7c78fbf --- /dev/null +++ b/components/cuihai-combox/cuihai-combox.vue @@ -0,0 +1,354 @@ + + + + + diff --git a/components/customer-list/customer-list.vue b/components/customer-list/customer-list.vue new file mode 100644 index 0000000..d94728d --- /dev/null +++ b/components/customer-list/customer-list.vue @@ -0,0 +1,87 @@ + + + + + + diff --git a/components/evan-form-item/evan-form-item.vue b/components/evan-form-item/evan-form-item.vue new file mode 100644 index 0000000..abe1517 --- /dev/null +++ b/components/evan-form-item/evan-form-item.vue @@ -0,0 +1,166 @@ + + + + + diff --git a/components/evan-form/evan-form.vue b/components/evan-form/evan-form.vue new file mode 100644 index 0000000..a22f436 --- /dev/null +++ b/components/evan-form/evan-form.vue @@ -0,0 +1,168 @@ + + + + + diff --git a/components/evan-form/utils.js b/components/evan-form/utils.js new file mode 100644 index 0000000..0ed3e7e --- /dev/null +++ b/components/evan-form/utils.js @@ -0,0 +1,148 @@ +import AsyncValidator from 'async-validator' +const utils = { + validate: (model, rules, callback, options) => { + const initOptions = { + showMessage: true + } + options = Object.assign({}, initOptions, options || {}) + let promise = null; + if (typeof callback !== 'function') { + promise = new Promise((resolve, reject) => { + callback = function(valid) { + valid ? resolve(valid) : reject(valid) + } + }) + } + // 如果需要验证的fields为空,调用验证时立刻返回callback + if (!rules || (Array.isArray(rules) && rules.length === 0) || (typeof rules === 'object' && Object.keys(rules).length === + 0)) { + callback(true, null); + if(promise){ + return promise + } + return + } + let errors = [] + const props = Object.keys(rules) + let count = 0 + for (let i in props) { + const prop = props[i] + const value = utils.getValueByProp(model, prop) + utils.validateItem(rules, prop, value, (err) => { + if (err && err.length > 0) { + errors = errors.concat(err) + } + // 处理异步校验,等所有校验都结束时再callback + count++ + if (count === props.length) { + if (errors.length > 0) { + if (options.showMessage) { + utils.showToast(errors[0].message) + } + callback(false, errors) + } else { + callback(true, null) + } + } + }) + } + if (promise) { + return promise + } + }, + validateField: (model, rules, props, callback, options) => { + const initOptions = { + showMessage: true + } + options = Object.assign({}, initOptions, options || {}) + let promise = null; + if (typeof callback !== 'function') { + promise = new Promise((resolve, reject) => { + callback = function(valid) { + valid ? resolve(valid) : reject(valid) + } + }) + } + props = [].concat(props) + if (props.length === 0) { + return + } + let errors = [] + let count = 0 + for (let i in props) { + const prop = props[i] + const value = utils.getValueByProp(model, prop) + utils.validateItem(rules, prop, value, (err) => { + if (err && err.length > 0) { + errors = errors.concat(err) + } + // 处理异步校验,等所有校验都结束时再callback + count++ + if (count === props.length) { + if (errors.length > 0) { + if (options.showMessage) { + utils.showToast(errors[0].message) + } + callback(false, errors) + } else { + callback(true, null) + } + } + }) + } + if (promise) { + return promise + } + }, + validateItem(rules, prop, value, callback) { + if (!rules || JSON.stringify(rules) === '{}') { + if (callback instanceof Function) { + callback(); + } + return true; + } + const propRules = [].concat(rules[prop] || []); + propRules.forEach((rule) => { + if (rule.pattern) { + rule.pattern = new RegExp(rule.pattern) + } + }) + const descriptor = { + [prop]: propRules + }; + const validator = new AsyncValidator(descriptor); + const model = { + [prop]: value + }; + validator.validate(model, { + firstFields: true + }, (errors) => { + callback(errors); + }); + }, + getValueByProp: (obj, prop) => { + let tempObj = obj; + prop = prop.replace(/\[(\w+)\]/g, '.$1').replace(/^\./, ''); + let keyArr = prop.split('.'); + let i = 0; + for (let len = keyArr.length; i < len - 1; ++i) { + if (!tempObj) break; + let key = keyArr[i]; + if (key in tempObj) { + tempObj = tempObj[key]; + } else { + break; + } + } + return tempObj ? (typeof tempObj[keyArr[i]] === 'string' ? tempObj[keyArr[i]].trim() : tempObj[keyArr[i]]) : + null + }, + showToast: (message) => { + uni.showToast({ + title: message, + icon: 'none' + }) + } +} + +export default utils diff --git a/components/index-list/index-list.vue b/components/index-list/index-list.vue new file mode 100644 index 0000000..1d94669 --- /dev/null +++ b/components/index-list/index-list.vue @@ -0,0 +1,110 @@ + + + + + + diff --git a/components/linkMan/linkMan.vue b/components/linkMan/linkMan.vue new file mode 100644 index 0000000..c66f0ed --- /dev/null +++ b/components/linkMan/linkMan.vue @@ -0,0 +1,450 @@ + + + + + diff --git a/components/ly-tree/components/ly-checkbox.vue b/components/ly-tree/components/ly-checkbox.vue new file mode 100644 index 0000000..94a37ed --- /dev/null +++ b/components/ly-tree/components/ly-checkbox.vue @@ -0,0 +1,200 @@ + + + + + \ No newline at end of file diff --git a/components/ly-tree/ly-tree-node.vue b/components/ly-tree/ly-tree-node.vue new file mode 100644 index 0000000..0f75a86 --- /dev/null +++ b/components/ly-tree/ly-tree-node.vue @@ -0,0 +1,436 @@ + + + + + \ No newline at end of file diff --git a/components/ly-tree/ly-tree.vue b/components/ly-tree/ly-tree.vue new file mode 100644 index 0000000..5cdf398 --- /dev/null +++ b/components/ly-tree/ly-tree.vue @@ -0,0 +1,607 @@ + + + + + diff --git a/components/ly-tree/model/node.js b/components/ly-tree/model/node.js new file mode 100644 index 0000000..8d5e7e8 --- /dev/null +++ b/components/ly-tree/model/node.js @@ -0,0 +1,538 @@ +import { + markNodeData, + objectAssign, + arrayFindIndex, + getChildState, + reInitChecked, + getPropertyFromData, + isNull, + NODE_KEY +} from '../tool/util'; + +const getStore = function(store) { + let thisStore = store; + + return function() { + return thisStore; + } +} + +let nodeIdSeed = 0; + +export default class Node { + constructor(options) { + this.time = new Date().getTime(); + this.id = nodeIdSeed++; + this.text = null; + this.checked = false; + this.indeterminate = false; + this.data = null; + this.expanded = false; + this.parentId = null; + this.visible = true; + this.isCurrent = false; + + for (let name in options) { + if (options.hasOwnProperty(name)) { + if (name === 'store') { + this.store = getStore(options[name]); + } else { + this[name] = options[name]; + } + } + } + + if (!this.store()) { + throw new Error('[Node]store is required!'); + } + + // internal + this.level = 0; + this.loaded = false; + this.childNodesId = []; + this.loading = false; + this.label = getPropertyFromData(this, 'label'); + this.key = this._getKey(); + this.disabled = getPropertyFromData(this, 'disabled'); + this.nextSibling = null; + this.previousSibling = null; + this.icon = ''; + + this._handleParentAndLevel(); + this._handleProps(); + this._handleExpand(); + this._handleCurrent(); + + if (this.store().lazy) { + this.store()._initDefaultCheckedNode(this); + } + + this.updateLeafState(); + } + + _getKey() { + if (!this.data || Array.isArray(this.data)) return null; + + if (typeof this.data === 'object') { + const nodeKey = this.store().key; + const key = this.data[nodeKey]; + + if (typeof key === 'undefined') { + throw new Error(`您配置的node-key为"${nodeKey}",但数据中并未找到对应"${nodeKey}"属性的值,请检查node-key的配置是否合理`) + } + + return key; + } + + throw new Error('不合法的data数据'); + } + + _handleParentAndLevel() { + if (this.parentId !== null) { + let parent = this.getParent(this.parentId); + + if (this.store().isInjectParentInNode) { + this.parent = parent; + } + + // 由于这里做了修改,默认第一个对象不会被注册到nodesMap中,所以找不到parent会报错,所以默认parent的level是0 + if (!parent) { + parent = { + level: 0 + } + } else { + const parentChildNodes = parent.getChildNodes(parent.childNodesId); + const index = parent.childNodesId.indexOf(this.key); + this.nextSibling = index > -1 ? parentChildNodes[index + 1] : null; + this.previousSibling = index > 0 ? parentChildNodes[index - 1] : null; + } + this.level = parent.level + 1; + } + } + + _handleProps() { + const props = this.store().props; + + if (this.store().showNodeIcon) { + if (props && typeof props.icon !== 'undefined') { + this.icon = getPropertyFromData(this, 'icon'); + } else { + console.warn('请配置props属性中的"icon"字段') + } + } + + this.store().registerNode(this); + + if (props && typeof props.isLeaf !== 'undefined') { + const isLeaf = getPropertyFromData(this, 'isLeaf'); + if (typeof isLeaf === 'boolean') { + this.isLeafByUser = isLeaf; + } + } + } + + _handleExpand() { + if (this.store().lazy !== true && this.data) { + this.setData(this.data); + + if (this.store().defaultExpandAll) { + this.expanded = true; + } + } else if (this.level > 0 && this.store().lazy && this.store().defaultExpandAll) { + this.expand(); + } + + if (!Array.isArray(this.data)) { + markNodeData(this, this.data); + } + + if (!this.data) return; + + const defaultExpandedKeys = this.store().defaultExpandedKeys; + const key = this.store().key; + if (key && defaultExpandedKeys && defaultExpandedKeys.indexOf(this.key) !== -1) { + this.expand(null, this.store().autoExpandparent); + } + } + + _handleCurrent() { + const key = this.store().key; + + if (key && this.store().currentNodeKey !== undefined && this.key === this.store().currentNodeKey) { + this.store().currentNode = this; + this.store().currentNode.isCurrent = true; + } + } + + destroyStore() { + getStore(null) + } + + setData(data) { + if (!Array.isArray(data)) { + markNodeData(this, data); + } + + this.data = data; + this.childNodesId = []; + + let children; + if (this.level === 0 && Array.isArray(this.data)) { + children = this.data; + } else { + children = getPropertyFromData(this, 'children') || []; + } + + for (let i = 0, j = children.length; i < j; i++) { + this.insertChild({ + data: children[i] + }); + } + } + + contains(target, deep = true) { + const walk = function(parent) { + const children = parent.getChildNodes(parent.childNodesId) || []; + let result = false; + for (let i = 0, j = children.length; i < j; i++) { + const child = children[i]; + if (child === target || (deep && walk(child))) { + result = true; + break; + } + } + return result; + }; + + return walk(this); + } + + remove() { + if (this.parentId !== null) { + const parent = this.getParent(this.parentId); + parent.removeChild(this); + } + } + + insertChild(child, index, batch) { + if (!child) throw new Error('insertChild error: child is required.'); + + if (!(child instanceof Node)) { + if (!batch) { + const children = this.getChildren(true); + if (children.indexOf(child.data) === -1) { + if (typeof index === 'undefined' || index < 0) { + children.push(child.data); + } else { + children.splice(index, 0, child.data); + } + } + } + + objectAssign(child, { + parentId: isNull(this.key) ? '' : this.key, + store: this.store() + }); + child = new Node(child); + } + + child.level = this.level + 1; + + if (typeof index === 'undefined' || index < 0) { + this.childNodesId.push(child.key); + } else { + this.childNodesId.splice(index, 0, child.key); + } + + this.updateLeafState(); + } + + insertBefore(child, ref) { + let index; + if (ref) { + index = this.childNodesId.indexOf(ref.id); + } + this.insertChild(child, index); + } + + insertAfter(child, ref) { + let index; + if (ref) { + index = this.childNodesId.indexOf(ref.id); + if (index !== -1) index += 1; + } + this.insertChild(child, index); + } + + removeChild(child) { + const children = this.getChildren() || []; + const dataIndex = children.indexOf(child.data); + if (dataIndex > -1) { + children.splice(dataIndex, 1); + } + + const index = this.childNodesId.indexOf(child.key); + + if (index > -1) { + this.store() && this.store().deregisterNode(child); + child.parentId = null; + this.childNodesId.splice(index, 1); + } + + this.updateLeafState(); + } + + removeChildByData(data) { + let targetNode = null; + + for (let i = 0; i < this.childNodesId.length; i++) { + let node = this.getChildNodes(this.childNodesId); + if (node[i].data === data) { + targetNode = node[i]; + break; + } + } + + if (targetNode) { + this.removeChild(targetNode); + } + } + + // 为了避免APP端parent嵌套结构导致报错,这里parent需要从nodesMap中获取 + getParent(parentId) { + try { + if (!parentId.toString()) return null; + return this.store().nodesMap[parentId]; + } catch (error) { + return null; + } + } + + // 为了避免APP端childNodes嵌套结构导致报错,这里childNodes需要从nodesMap中获取 + getChildNodes(childNodesId) { + let childNodes = []; + if (childNodesId.length === 0) return childNodes; + childNodesId.forEach((key) => { + childNodes.push(this.store().nodesMap[key]); + }) + return childNodes; + } + + expand(callback, expandparent) { + const done = () => { + if (expandparent) { + let parent = this.getParent(this.parentId); + while (parent && parent.level > 0) { + parent.expanded = true; + parent = this.getParent(parent.parentId); + } + } + this.expanded = true; + if (callback) callback(); + }; + + if (this.shouldLoadData()) { + this.loadData(function(data) { + if (Array.isArray(data)) { + if (this.checked) { + this.setChecked(true, true); + } else if (!this.store().checkStrictly) { + reInitChecked(this); + } + done(); + } + }); + } else { + done(); + } + } + + doCreateChildren(array, defaultProps = {}) { + array.forEach((item) => { + this.insertChild(objectAssign({ + data: item + }, defaultProps), undefined, true); + }); + } + + collapse() { + this.expanded = false; + } + + shouldLoadData() { + return this.store().lazy === true && this.store().load && !this.loaded; + } + + updateLeafState() { + if (this.store().lazy === true && this.loaded !== true && typeof this.isLeafByUser !== 'undefined') { + this.isLeaf = this.isLeafByUser; + return; + } + const childNodesId = this.childNodesId; + if (!this.store().lazy || (this.store().lazy === true && this.loaded === true)) { + this.isLeaf = !childNodesId || childNodesId.length === 0; + return; + } + this.isLeaf = false; + } + + setChecked(value, deep, recursion, passValue) { + this.indeterminate = value === 'half'; + this.checked = value === true; + + if (this.checked && this.store().expandOnCheckNode) { + this.expand(null, true) + } + + if (this.store().checkStrictly) return; + if (this.store().showRadio) return; + + if (!(this.shouldLoadData() && !this.store().checkDescendants)) { + let childNodes = this.getChildNodes(this.childNodesId); + let { + all, + allWithoutDisable + } = getChildState(childNodes); + + if (!this.isLeaf && (!all && allWithoutDisable)) { + this.checked = false; + value = false; + } + + const handleDescendants = () => { + if (deep) { + let childNodes = this.getChildNodes(this.childNodesId) + for (let i = 0, j = childNodes.length; i < j; i++) { + const child = childNodes[i]; + passValue = passValue || value !== false; + const isCheck = child.disabled ? child.checked : passValue; + child.setChecked(isCheck, deep, true, passValue); + } + const { + half, + all + } = getChildState(childNodes); + + if (!all) { + this.checked = all; + this.indeterminate = half; + } + } + }; + + if (this.shouldLoadData()) { + this.loadData(() => { + handleDescendants(); + reInitChecked(this); + }, { + checked: value !== false + }); + return; + } else { + handleDescendants(); + } + } + + if (!this.parentId) return; + + let parent = this.getParent(this.parentId); + if (parent && parent.level === 0) return; + + if (!recursion) { + reInitChecked(parent); + } + } + + setRadioChecked(value) { + const allNodes = this.store()._getAllNodes().sort((a, b) => b.level - a.level); + allNodes.forEach(node => node.setChecked(false, false)); + this.checked = value === true; + } + + getChildren(forceInit = false) { + if (this.level === 0) return this.data; + const data = this.data; + if (!data) return null; + + const props = this.store().props; + let children = 'children'; + if (props) { + children = props.children || 'children'; + } + + if (data[children] === undefined) { + data[children] = null; + } + + if (forceInit && !data[children]) { + data[children] = []; + } + + return data[children]; + } + + updateChildren() { + let childNodes = this.getChildNodes(this.childNodesId); + const newData = this.getChildren() || []; + const oldData = childNodes.map((node) => node.data); + + const newDataMap = {}; + const newNodes = []; + + newData.forEach((item, index) => { + const key = item[NODE_KEY]; + const isNodeExists = !!key && arrayFindIndex(oldData, data => data[NODE_KEY] === key) >= 0; + if (isNodeExists) { + newDataMap[key] = { + index, + data: item + }; + } else { + newNodes.push({ + index, + data: item + }); + } + }); + + if (!this.store().lazy) { + oldData.forEach((item) => { + if (!newDataMap[item[NODE_KEY]]) this.removeChildByData(item); + }); + } + + newNodes.forEach(({ + index, + data + }) => { + this.insertChild({ + data + }, index); + }); + + this.updateLeafState(); + } + + loadData(callback, defaultProps = {}) { + if (this.store().lazy === true && + this.store().load && !this.loaded && + (!this.loading || Object.keys(defaultProps).length) + ) { + this.loading = true; + + const resolve = (children) => { + this.loaded = true; + this.loading = false; + this.childNodesId = []; + this.doCreateChildren(children, defaultProps); + this.updateLeafState(); + + callback && callback.call(this,children); + }; + + this.store().load(this, resolve); + } else { + callback && callback.call(this); + } + } +} diff --git a/components/ly-tree/model/tree-store.js b/components/ly-tree/model/tree-store.js new file mode 100644 index 0000000..5424cd8 --- /dev/null +++ b/components/ly-tree/model/tree-store.js @@ -0,0 +1,419 @@ +import Node from './node'; +import { + getNodeKey, + getPropertyFromData +} from '../tool/util'; + +export default class TreeStore { + constructor(options) { + this.ready = false; + this.currentNode = null; + this.currentNodeKey = null; + + Object.assign(this, options); + + if (!this.key) { + throw new Error('[Tree] nodeKey is required'); + } + + this.nodesMap = {}; + this.root = new Node({ + data: this.data, + store: this + }); + + if (this.lazy && this.load) { + const loadFn = this.load; + loadFn(this.root, (data) => { + this.root.doCreateChildren(data); + this._initDefaultCheckedNodes(); + this.ready = true; + }); + } else { + this._initDefaultCheckedNodes(); + this.ready = true; + } + } + + filter(value, data) { + const filterNodeMethod = this.filterNodeMethod; + const lazy = this.lazy; + const _self = this; + const traverse = function(node) { + const childNodes = node.root ? node.root.getChildNodes(node.root.childNodesId) : node.getChildNodes(node.childNodesId); + + childNodes.forEach((child) => { + if (data && typeof data === 'object') { + let nodePath = _self.getNodePath(child.data); + if (!nodePath.some(pathItem => pathItem[_self.key] === data[_self.key])) { + child.visible = false; + traverse(child); + return; + } + } + + if (_self.childVisibleForFilterNode) { + let parent = child.getParent(child.parentId); + child.visible = filterNodeMethod.call(child, value, child.data, child) || (parent && parent.visible); + } else { + child.visible = filterNodeMethod.call(child, value, child.data, child); + } + + traverse(child); + }); + + if (!node.visible && childNodes.length) { + let allHidden = true; + allHidden = !childNodes.some(child => child.visible); + + if (node.root) { + node.root.visible = allHidden === false; + } else { + node.visible = allHidden === false; + } + } + + if (!value) return; + + if (node.visible && !node.isLeaf && !lazy) node.expand(); + }; + + traverse(this); + } + + setData(newVal) { + const instanceChanged = newVal !== this.root.data; + if (instanceChanged) { + this.root.setData(newVal); + this._initDefaultCheckedNodes(); + } else { + this.root.updateChildren(); + } + } + + getNode(data) { + if (data instanceof Node) return data; + const key = typeof data !== 'object' ? data : getNodeKey(this.key, data); + if (!key) return null; + return this.nodesMap[key] || null; + } + + insertBefore(data, refData) { + const refNode = this.getNode(refData); + let parent = refNode.getParent(refNode.parentId); + parent.insertBefore({ + data + }, refNode); + } + + insertAfter(data, refData) { + const refNode = this.getNode(refData); + let parent = refNode.getParent(refNode.parentId); + parent.insertAfter({ + data + }, refNode); + } + + remove(data) { + const node = this.getNode(data); + + if (node && node.parentId !== null) { + let parent = node.getParent(node.parentId); + if (node === this.currentNode) { + this.currentNode = null; + } + parent.removeChild(node); + } + } + + append(data, parentData) { + const parentNode = parentData ? this.getNode(parentData) : this.root; + + if (parentNode) { + parentNode.insertChild({ + data + }); + } + } + + _initDefaultCheckedNodes() { + const defaultCheckedKeys = this.defaultCheckedKeys || []; + const nodesMap = this.nodesMap; + let checkedKeyfromData = []; + let totalCheckedKeys = [] + + for (let key in nodesMap) { + let checked = getPropertyFromData(nodesMap[key], 'checked') || false; + checked && checkedKeyfromData.push(key); + } + + totalCheckedKeys = Array.from(new Set([...defaultCheckedKeys, ...checkedKeyfromData])); + totalCheckedKeys.forEach((checkedKey) => { + const node = nodesMap[checkedKey]; + + if (node) { + node.setChecked(true, !this.checkStrictly); + } + }); + } + + _initDefaultCheckedNode(node) { + const defaultCheckedKeys = this.defaultCheckedKeys || []; + + if (defaultCheckedKeys.indexOf(node.key) !== -1) { + node.setChecked(true, !this.checkStrictly); + } + } + + toggleExpendAll(isExpandAll) { + const allNodes = this._getAllNodes(); + + allNodes.forEach(item => { + const node = this.getNode(item.key); + + if (node) isExpandAll ? node.expand() : node.collapse(); + }); + } + + setCheckAll(isCkeckAll) { + const allNodes = this._getAllNodes(); + + allNodes.forEach(item => { + item.setChecked(isCkeckAll, false); + }); + } + + setDefaultCheckedKey(newVal) { + if (newVal !== this.defaultCheckedKeys) { + this.defaultCheckedKeys = newVal; + this._initDefaultCheckedNodes(); + } + } + + registerNode(node) { + + const key = this.key; + if (!key || !node || !node.data) return; + + const nodeKey = node.key; + if (nodeKey !== undefined) this.nodesMap[node.key] = node; + } + + deregisterNode(node) { + const key = this.key; + if (!key || !node || !node.data) return; + + let childNodes = node.getChildNodes(node.childNodesId); + childNodes.forEach(child => { + this.deregisterNode(child); + }); + + delete this.nodesMap[node.key]; + } + + getNodePath(data) { + if (!this.key) throw new Error('[Tree] nodeKey is required in getNodePath'); + const node = this.getNode(data); + if (!node) return []; + + const path = [node.data]; + let parent = node.getParent(node.parentId); + while (parent && parent !== this.root) { + path.push(parent.data); + parent = parent.getParent(parent.parentId); + } + return path.reverse(); + } + + getCheckedNodes(leafOnly = false, includeHalfChecked = false) { + const checkedNodes = []; + const traverse = function(node) { + const childNodes = node.root ? node.root.getChildNodes(node.root.childNodesId) : node.getChildNodes(node.childNodesId); + + childNodes.forEach((child) => { + if ((child.checked || (includeHalfChecked && child.indeterminate)) && (!leafOnly || (leafOnly && child.isLeaf))) { + checkedNodes.push(child.data); + } + + traverse(child); + }); + }; + + traverse(this); + + return checkedNodes; + } + + getCheckedKeys(leafOnly = false, includeHalfChecked = false) { + return this.getCheckedNodes(leafOnly, includeHalfChecked).map((data) => (data || {})[this.key]); + } + + getHalfCheckedNodes() { + const nodes = []; + const traverse = function(node) { + const childNodes = node.root ? node.root.getChildNodes(node.root.childNodesId) : node.getChildNodes(node.childNodesId); + + childNodes.forEach((child) => { + if (child.indeterminate) { + nodes.push(child.data); + } + + traverse(child); + }); + }; + + traverse(this); + + return nodes; + } + + getHalfCheckedKeys() { + return this.getHalfCheckedNodes().map((data) => (data || {})[this.key]); + } + + _getAllNodes() { + const allNodes = []; + const nodesMap = this.nodesMap; + for (let nodeKey in nodesMap) { + if (nodesMap.hasOwnProperty(nodeKey)) { + allNodes.push(nodesMap[nodeKey]); + } + } + + return allNodes; + } + + updateChildren(key, data) { + const node = this.nodesMap[key]; + if (!node) return; + const childNodes = node.getChildNodes(node.childNodesId); + for (let i = childNodes.length - 1; i >= 0; i--) { + const child = childNodes[i]; + this.remove(child.data); + } + for (let i = 0, j = data.length; i < j; i++) { + const child = data[i]; + this.append(child, node.data); + } + } + + _setCheckedKeys(key, leafOnly = false, checkedKeys) { + const allNodes = this._getAllNodes().sort((a, b) => b.level - a.level); + const cache = Object.create(null); + const keys = Object.keys(checkedKeys); + allNodes.forEach(node => node.setChecked(false, false)); + for (let i = 0, j = allNodes.length; i < j; i++) { + const node = allNodes[i]; + let nodeKey = node.data[key]; + + if (typeof nodeKey === 'undefined') continue; + + nodeKey = nodeKey.toString(); + let checked = keys.indexOf(nodeKey) > -1; + if (!checked) { + if (node.checked && !cache[nodeKey]) { + node.setChecked(false, false); + } + continue; + } + + let parent = node.getParent(node.parentId); + while (parent && parent.level > 0) { + cache[parent.data[key]] = true; + parent = parent.getParent(parent.parentId); + } + + if (node.isLeaf || this.checkStrictly) { + node.setChecked(true, false); + continue; + } + node.setChecked(true, true); + + if (leafOnly) { + node.setChecked(false, false); + const traverse = function(node) { + const childNodes = node.getChildNodes(node.childNodesId); + childNodes.forEach((child) => { + if (!child.isLeaf) { + child.setChecked(false, false); + } + traverse(child); + }); + }; + traverse(node); + } + } + } + + setCheckedNodes(array, leafOnly = false) { + const key = this.key; + const checkedKeys = {}; + array.forEach((item) => { + checkedKeys[(item || {})[key]] = true; + }); + + this._setCheckedKeys(key, leafOnly, checkedKeys); + } + + setCheckedKeys(keys, leafOnly = false) { + this.defaultCheckedKeys = keys; + const key = this.key; + const checkedKeys = {}; + keys.forEach((key) => { + checkedKeys[key] = true; + }); + + this._setCheckedKeys(key, leafOnly, checkedKeys); + } + + setDefaultExpandedKeys(keys) { + keys = keys || []; + this.defaultExpandedKeys = keys; + + keys.forEach((key) => { + const node = this.getNode(key); + if (node) node.expand(null, this.autoExpandParent); + }); + } + + setChecked(data, checked, deep) { + const node = this.getNode(data); + + if (node) { + node.setChecked(!!checked, deep); + } + } + + getCurrentNode() { + return this.currentNode; + } + + setCurrentNode(currentNode) { + const prevCurrentNode = this.currentNode; + if (prevCurrentNode) { + prevCurrentNode.isCurrent = false; + } + this.currentNode = currentNode; + this.currentNode.isCurrent = true; + + this.expandCurrentNodeParent && this.currentNode.expand(null, true) + } + + setUserCurrentNode(node) { + const key = node[this.key]; + const currNode = this.nodesMap[key]; + this.setCurrentNode(currNode); + } + + setCurrentNodeKey(key) { + if (key === null || key === undefined) { + this.currentNode && (this.currentNode.isCurrent = false); + this.currentNode = null; + return; + } + const node = this.getNode(key); + if (node) { + this.setCurrentNode(node); + } + } +}; diff --git a/components/ly-tree/tool/util.js b/components/ly-tree/tool/util.js new file mode 100644 index 0000000..1118c5c --- /dev/null +++ b/components/ly-tree/tool/util.js @@ -0,0 +1,115 @@ +export const NODE_KEY = '$treeNodeId'; + +export const markNodeData = function(node, data) { + if (!data || data[NODE_KEY]) return; + Object.defineProperty(data, NODE_KEY, { + value: node.id, + enumerable: false, + configurable: false, + writable: false + }); +}; + +export const getNodeKey = function(key, data) { + if (!data) return null; + if (!key) return data[NODE_KEY]; + return data[key]; +}; + +export const objectAssign = function(target) { + for (let i = 1, j = arguments.length; i < j; i++) { + let source = arguments[i] || {}; + for (let prop in source) { + if (source.hasOwnProperty(prop)) { + let value = source[prop]; + if (value !== undefined) { + target[prop] = value; + } + } + } + } + + return target; +}; + +// TODO: use native Array.find, Array.findIndex when IE support is dropped +export const arrayFindIndex = function(arr, pred) { + for (let i = 0; i !== arr.length; ++i) { + if (pred(arr[i])) { + return i; + } + } + return -1; +}; + +export const getChildState = function(node) { + let all = true; + let none = true; + let allWithoutDisable = true; + for (let i = 0, j = node.length; i < j; i++) { + const n = node[i]; + if (n.checked !== true || n.indeterminate) { + all = false; + if (!n.disabled) { + allWithoutDisable = false; + } + } + if (n.checked !== false || n.indeterminate) { + none = false; + } + } + + return { + all, + none, + allWithoutDisable, + half: !all && !none + }; +}; + +export const reInitChecked = function(node) { + if (!node || node.childNodesId.length === 0) return; + + let childNodes = node.getChildNodes(node.childNodesId); + const { + all, + none, + half + } = getChildState(childNodes); + if (all) { + node.checked = true; + node.indeterminate = false; + } else if (half) { + node.checked = false; + node.indeterminate = true; + } else if (none) { + node.checked = false; + node.indeterminate = false; + } + + let parent = node.getParent(node.parentId); + if (!parent || parent.level === 0) return; + + if (!node.store().checkStrictly) { + reInitChecked(parent); + } +}; + +export const getPropertyFromData = function(node, prop) { + const props = node.store().props; + const data = node.data || {}; + const config = props[prop]; + + if (typeof config === 'function') { + return config(data, node); + } else if (typeof config === 'string') { + return data[config]; + } else if (typeof config === 'undefined') { + const dataProp = data[prop]; + return dataProp === undefined ? '' : dataProp; + } +}; + +export const isNull = function(v) { + return v === undefined || v === null || v === ''; +} diff --git a/components/me-tabs/me-tabs.vue b/components/me-tabs/me-tabs.vue new file mode 100644 index 0000000..c6ae5fb --- /dev/null +++ b/components/me-tabs/me-tabs.vue @@ -0,0 +1,184 @@ + + + + + + diff --git a/components/me-video/me-video.vue b/components/me-video/me-video.vue new file mode 100644 index 0000000..acaf660 --- /dev/null +++ b/components/me-video/me-video.vue @@ -0,0 +1,179 @@ + + + + + + diff --git a/components/mescroll-diy/beibei/components/mescroll-down.css b/components/mescroll-diy/beibei/components/mescroll-down.css new file mode 100644 index 0000000..dcefe2d --- /dev/null +++ b/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/components/mescroll-diy/beibei/components/mescroll-down.vue b/components/mescroll-diy/beibei/components/mescroll-down.vue new file mode 100644 index 0000000..ee1d321 --- /dev/null +++ b/components/mescroll-diy/beibei/components/mescroll-down.vue @@ -0,0 +1,39 @@ + + + + + + diff --git a/components/mescroll-diy/beibei/mescroll-body.vue b/components/mescroll-diy/beibei/mescroll-body.vue new file mode 100644 index 0000000..29d5c79 --- /dev/null +++ b/components/mescroll-diy/beibei/mescroll-body.vue @@ -0,0 +1,330 @@ + + + + + + + + + + + + + + + diff --git a/components/mescroll-diy/beibei/mescroll-uni-option.js b/components/mescroll-diy/beibei/mescroll-uni-option.js new file mode 100644 index 0000000..3fb723f --- /dev/null +++ b/components/mescroll-diy/beibei/mescroll-uni-option.js @@ -0,0 +1,29 @@ +// 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的配置参数也可以写,这里只展示了常用的配置: + textLoading: '加载中 ...', // 加载中的提示文本 + textNoMore: '-- END --', // 没有更多数据的提示文本 + 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 ) + tip: '~ 暂无相关数据 ~' // 提示 + } + } +} + +export default GlobalOption \ No newline at end of file diff --git a/components/mescroll-diy/beibei/mescroll-uni.vue b/components/mescroll-diy/beibei/mescroll-uni.vue new file mode 100644 index 0000000..5d3f2e4 --- /dev/null +++ b/components/mescroll-diy/beibei/mescroll-uni.vue @@ -0,0 +1,406 @@ + + + + + + + + + + + + + + + diff --git a/components/mescroll-diy/xinlang/components/mescroll-down.css b/components/mescroll-diy/xinlang/components/mescroll-down.css new file mode 100644 index 0000000..b62ed40 --- /dev/null +++ b/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/components/mescroll-diy/xinlang/components/mescroll-down.vue b/components/mescroll-diy/xinlang/components/mescroll-down.vue new file mode 100644 index 0000000..745d903 --- /dev/null +++ b/components/mescroll-diy/xinlang/components/mescroll-down.vue @@ -0,0 +1,53 @@ + + + + + + diff --git a/components/mescroll-diy/xinlang/components/mescroll-up.css b/components/mescroll-diy/xinlang/components/mescroll-up.css new file mode 100644 index 0000000..abf51f1 --- /dev/null +++ b/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/components/mescroll-diy/xinlang/components/mescroll-up.vue b/components/mescroll-diy/xinlang/components/mescroll-up.vue new file mode 100644 index 0000000..31bd42a --- /dev/null +++ b/components/mescroll-diy/xinlang/components/mescroll-up.vue @@ -0,0 +1,40 @@ + + + + + + diff --git a/components/mescroll-diy/xinlang/mescroll-body.vue b/components/mescroll-diy/xinlang/mescroll-body.vue new file mode 100644 index 0000000..a7de692 --- /dev/null +++ b/components/mescroll-diy/xinlang/mescroll-body.vue @@ -0,0 +1,350 @@ + + + + + + + + + + + + + + + diff --git a/components/mescroll-diy/xinlang/mescroll-uni-option.js b/components/mescroll-diy/xinlang/mescroll-uni-option.js new file mode 100644 index 0000000..8424b85 --- /dev/null +++ b/components/mescroll-diy/xinlang/mescroll-uni-option.js @@ -0,0 +1,36 @@ +// 全局配置 +// mescroll-body 和 mescroll-uni 通用 +const GlobalOption = { + down: { + // 其他down的配置参数也可以写,这里只展示了常用的配置: + textInOffset: '下拉刷新', // 下拉的距离在offset范围内的提示文本 + textOutOffset: '释放更新', // 下拉的距离大于offset范围的提示文本 + textLoading: '加载中 ...', // 加载中的提示文本 + textSuccess: '加载成功', // 加载成功的文本 + textErr: '加载失败', // 加载失败的文本 + beforeEndDelay: 0, // 延时结束的时长 (此处设置为0) + offset: 80, // 在列表顶部,下拉大于80px,松手即可触发下拉刷新的回调 + native: false // 是否使用系统自带的下拉刷新; 默认false; 仅在mescroll-body生效 (值为true时,还需在pages配置enablePullDownRefresh:true;详请参考mescroll-native的案例) + }, + up: { + // 其他up的配置参数也可以写,这里只展示了常用的配置: + textLoading: '加载中 ...', // 加载中的提示文本 + textNoMore: '-- END --', // 没有更多数据的提示文本 + 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 ) + tip: '~ 空空如也 ~' // 提示 + } + } +} + +export default GlobalOption diff --git a/components/mescroll-diy/xinlang/mescroll-uni.vue b/components/mescroll-diy/xinlang/mescroll-uni.vue new file mode 100644 index 0000000..f334c75 --- /dev/null +++ b/components/mescroll-diy/xinlang/mescroll-uni.vue @@ -0,0 +1,430 @@ + + + + + + + + + + + + + + + diff --git a/components/mescroll-uni/components/mescroll-down.css b/components/mescroll-uni/components/mescroll-down.css new file mode 100644 index 0000000..72bf106 --- /dev/null +++ b/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/components/mescroll-uni/components/mescroll-down.vue b/components/mescroll-uni/components/mescroll-down.vue new file mode 100644 index 0000000..9fd1567 --- /dev/null +++ b/components/mescroll-uni/components/mescroll-down.vue @@ -0,0 +1,47 @@ + + + + + + diff --git a/components/mescroll-uni/components/mescroll-empty.vue b/components/mescroll-uni/components/mescroll-empty.vue new file mode 100644 index 0000000..ff0c01c --- /dev/null +++ b/components/mescroll-uni/components/mescroll-empty.vue @@ -0,0 +1,90 @@ + + + + + + diff --git a/components/mescroll-uni/components/mescroll-top.vue b/components/mescroll-uni/components/mescroll-top.vue new file mode 100644 index 0000000..5115fd8 --- /dev/null +++ b/components/mescroll-uni/components/mescroll-top.vue @@ -0,0 +1,83 @@ + + + + + + diff --git a/components/mescroll-uni/components/mescroll-up.css b/components/mescroll-uni/components/mescroll-up.css new file mode 100644 index 0000000..cbf48cd --- /dev/null +++ b/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/components/mescroll-uni/components/mescroll-up.vue b/components/mescroll-uni/components/mescroll-up.vue new file mode 100644 index 0000000..11c2e1f --- /dev/null +++ b/components/mescroll-uni/components/mescroll-up.vue @@ -0,0 +1,39 @@ + + + + + + diff --git a/components/mescroll-uni/mescroll-body.css b/components/mescroll-uni/mescroll-body.css new file mode 100644 index 0000000..1107710 --- /dev/null +++ b/components/mescroll-uni/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/components/mescroll-uni/mescroll-body.vue b/components/mescroll-uni/mescroll-body.vue new file mode 100644 index 0000000..ede7fae --- /dev/null +++ b/components/mescroll-uni/mescroll-body.vue @@ -0,0 +1,348 @@ + + + + + + + + + + + + + + + diff --git a/components/mescroll-uni/mescroll-mixins.js b/components/mescroll-uni/mescroll-mixins.js new file mode 100644 index 0000000..71360c7 --- /dev/null +++ b/components/mescroll-uni/mescroll-mixins.js @@ -0,0 +1,65 @@ +// mescroll-body 和 mescroll-uni 通用 + +// import MescrollUni from "./mescroll-uni.vue"; +// import MescrollBody from "./mescroll-body.vue"; + +const MescrollMixin = { + // components: { // 非H5端无法通过mixin注册组件, 只能在main.js中注册全局组件或具体界面中注册 + // MescrollUni, + // MescrollBody + // }, + 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/components/mescroll-uni/mescroll-uni-option.js b/components/mescroll-uni/mescroll-uni-option.js new file mode 100644 index 0000000..42d175c --- /dev/null +++ b/components/mescroll-uni/mescroll-uni-option.js @@ -0,0 +1,36 @@ +// 全局配置 +// mescroll-body 和 mescroll-uni 通用 +const GlobalOption = { + down: { + // 其他down的配置参数也可以写,这里只展示了常用的配置: + textInOffset: '下拉刷新', // 下拉的距离在offset范围内的提示文本 + textOutOffset: '释放更新', // 下拉的距离大于offset范围的提示文本 + textLoading: '加载中 ...', // 加载中的提示文本 + textSuccess: '加载成功', // 加载成功的文本 + textErr: '加载失败', // 加载失败的文本 + beforeEndDelay: 100, // 延时结束的时长 (显示加载成功/失败的时长) + offset: 80, // 在列表顶部,下拉大于80px,松手即可触发下拉刷新的回调 + native: false // 是否使用系统自带的下拉刷新; 默认false; 仅在mescroll-body生效 (值为true时,还需在pages配置enablePullDownRefresh:true;详请参考mescroll-native的案例) + }, + up: { + // 其他up的配置参数也可以写,这里只展示了常用的配置: + textLoading: '加载中 ...', // 加载中的提示文本 + textNoMore: '-- END --', // 没有更多数据的提示文本 + 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 ) + tip: '~ 空空如也 ~' // 提示 + } + } +} + +export default GlobalOption diff --git a/components/mescroll-uni/mescroll-uni.css b/components/mescroll-uni/mescroll-uni.css new file mode 100644 index 0000000..39438cd --- /dev/null +++ b/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/components/mescroll-uni/mescroll-uni.js b/components/mescroll-uni/mescroll-uni.js new file mode 100644 index 0000000..01bdbb6 --- /dev/null +++ b/components/mescroll-uni/mescroll-uni.js @@ -0,0 +1,799 @@ +/* mescroll + * version 1.3.3 + * 2020-09-15 wenju + * https://www.mescroll.com + */ + +export default function MeScroll(options, isScrollBody) { + let me = this; + me.version = '1.3.3'; // 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: 100, // 延时结束的时长 (显示加载成功/失败的时长) + 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/components/mescroll-uni/mescroll-uni.vue b/components/mescroll-uni/mescroll-uni.vue new file mode 100644 index 0000000..402c995 --- /dev/null +++ b/components/mescroll-uni/mescroll-uni.vue @@ -0,0 +1,424 @@ + + + + + + + + + + + + + + + diff --git a/components/mescroll-uni/mixins/mescroll-comp.js b/components/mescroll-uni/mixins/mescroll-comp.js new file mode 100644 index 0000000..b504894 --- /dev/null +++ b/components/mescroll-uni/mixins/mescroll-comp.js @@ -0,0 +1,48 @@ +/** + * mescroll-body写在子组件时,需通过mescroll的mixins补充子组件缺少的生命周期 + */ +const MescrollCompMixin = { + // 因为子组件无onPageScroll和onReachBottom的页面生命周期,需在页面传递进到子组件 (一级) + onPageScroll(e) { + this.handlePageScroll(e) + }, + onReachBottom() { + this.handleReachBottom() + }, + // 当down的native: true时, 还需传递此方法进到子组件 + onPullDownRefresh(){ + this.handlePullDownRefresh() + }, + // mescroll-body写在子子子...组件的情况 (多级) + data() { + return { + mescroll: { + 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/components/mescroll-uni/mixins/mescroll-more-item.js b/components/mescroll-uni/mixins/mescroll-more-item.js new file mode 100644 index 0000000..5cb920b --- /dev/null +++ b/components/mescroll-uni/mixins/mescroll-more-item.js @@ -0,0 +1,59 @@ +/** + * 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.isInit = true; // 标记为true + this.mescroll && this.mescroll.triggerDownScroll(); + } + } + }, + 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.isInit = true; // 标记为true + this.mescroll.triggerDownScroll(); + } + }, + } +} + +export default MescrollMoreItemMixin; diff --git a/components/mescroll-uni/mixins/mescroll-more.js b/components/mescroll-uni/mixins/mescroll-more.js new file mode 100644 index 0000000..d765088 --- /dev/null +++ b/components/mescroll-uni/mixins/mescroll-more.js @@ -0,0 +1,74 @@ +/** + * mescroll-body写在子组件时, 需通过mescroll的mixins补充子组件缺少的生命周期 + */ +const MescrollMoreMixin = { + data() { + return { + tabIndex: 0, // 当前tab下标 + mescroll: { + 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/components/mescroll-uni/wxs/mixins.js b/components/mescroll-uni/wxs/mixins.js new file mode 100644 index 0000000..34ffa3c --- /dev/null +++ b/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/components/mescroll-uni/wxs/renderjs.js b/components/mescroll-uni/wxs/renderjs.js new file mode 100644 index 0000000..207f388 --- /dev/null +++ b/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/components/mescroll-uni/wxs/wxs.wxs b/components/mescroll-uni/wxs/wxs.wxs new file mode 100644 index 0000000..3fb4ad9 --- /dev/null +++ b/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/components/mix-tree/mix-tree.vue b/components/mix-tree/mix-tree.vue new file mode 100644 index 0000000..c1dcbb8 --- /dev/null +++ b/components/mix-tree/mix-tree.vue @@ -0,0 +1,310 @@ + + + + + diff --git a/components/multiple-select/multiple-select.vue b/components/multiple-select/multiple-select.vue new file mode 100644 index 0000000..47ec340 --- /dev/null +++ b/components/multiple-select/multiple-select.vue @@ -0,0 +1,324 @@ + + + + \ No newline at end of file diff --git a/components/mx-datepicker/mx-datepicker.vue b/components/mx-datepicker/mx-datepicker.vue new file mode 100644 index 0000000..1e9bd74 --- /dev/null +++ b/components/mx-datepicker/mx-datepicker.vue @@ -0,0 +1,824 @@ + + + + + diff --git a/components/pretty-uploadFile/pretty-uploadFile.css b/components/pretty-uploadFile/pretty-uploadFile.css new file mode 100644 index 0000000..b6246fa --- /dev/null +++ b/components/pretty-uploadFile/pretty-uploadFile.css @@ -0,0 +1,216 @@ +@font-face {font-family: "iconfont"; + src: url('//at.alicdn.com/t/font_2061520_jbrm5ebvea.eot?t=1606123774700'); /* IE9 */ + src: url('//at.alicdn.com/t/font_2061520_jbrm5ebvea.eot?t=1606123774700#iefix') format('embedded-opentype'), /* IE6-IE8 */ + url('data:application/x-font-woff2;charset=utf-8;base64,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') format('woff2'), + url('//at.alicdn.com/t/font_2061520_jbrm5ebvea.woff?t=1606123774700') format('woff'), + url('//at.alicdn.com/t/font_2061520_jbrm5ebvea.ttf?t=1606123774700') format('truetype'), /* chrome, firefox, opera, Safari, Android, iOS 4.2+ */ + url('//at.alicdn.com/t/font_2061520_jbrm5ebvea.svg?t=1606123774700#iconfont') format('svg'); /* iOS 4.1- */ +} + +.iconfont { + font-family: "iconfont" !important; + font-size: 16px; + font-style: normal; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} + +.iconxuehua:before { + content: "\e624"; +} + +.iconshengdan_xuehua:before { + content: "\e68d"; +} + +.iconpdf:before { + content: "\e603"; +} + +/* .iconPDF:before { + content: "\e64d"; +} */ + +.iconexcel:before { + content: "\e6d1"; +} + +.iconword:before { + content: "\e635"; +} + +.iconPDF:before { + content: "\e7a9"; +} + +.icontubiao09:before { + content: "\e60a"; +} + +.iconcircle2yuanquan:before { + content: "\e71f"; +} + +.iconcheck1:before { + content: "\e64c"; +} + +.iconselected:before { + content: "\e611"; +} + +.iconshangchuanwenjian:before { + content: "\e62a"; +} + +.iconziyuan:before { + content: "\e622"; +} + +.iconwenjian:before { + content: "\e691"; +} + +.iconxiangshang:before { + content: "\e63f"; +} + +.iconxiangxia:before { + content: "\e612"; +} + +.iconicon-angle-double-top:before { + content: "\e614"; +} + +.iconicon-angle-double-bottom:before { + content: "\e615"; +} + +.icongongyingshang:before { + content: "\e65b"; +} + +.iconshangping:before { + content: "\e629"; +} + +.iconsousuo:before { + content: "\e628"; +} + +.icontishi1:before { + content: "\e6db"; +} + +.iconerweima:before { + content: "\e69a"; +} + +.iconxiangqing-:before { + content: "\e648"; +} + +.iconshanchu2:before { + content: "\e625"; +} + +.icondanseshixintubiao-:before { + content: "\e62b"; +} + +.iconshanchu1:before { + content: "\e630"; +} + +.iconshangjiantou-copy:before { + content: "\e875"; +} + +.iconleimupinleifenleileibie:before { + content: "\e7f9"; +} + +.iconshouye:before { + content: "\e678"; +} + +.iconjihuohuoqijiesuo:before { + content: "\e608"; +} + +.iconjiaoseguanli:before { + content: "\e616"; +} + +.iconziyuan197:before { + content: "\e718"; +} + +.iconsaoma1:before { + content: "\e627"; +} + +.iconsaoma:before { + content: "\e621"; +} + +.iconchuku:before { + content: "\e601"; +} + +.iconruku:before { + content: "\e606"; +} + +.icondaiqueren:before { + content: "\e6a5"; +} + +.iconyuangong:before { + content: "\e668"; +} + +.iconchurukujilu:before { + content: "\e61e"; +} + +.iconjiantouyou:before { + content: "\e62d"; +} + +.iconwode:before { + content: "\e6d8"; +} + +.icontishi:before { + content: "\e619"; +} + +.iconshanchu:before { + content: "\e690"; +} + +.iconxinzeng:before { + content: "\e610"; +} + +.iconsaoma2:before { + content: "\e609"; +} + +.iconshenhe:before { + content: "\e613"; +} + +.iconchukudan:before { + content: "\e620"; +} + +.iconrukudan:before { + content: "\e623"; +} + +.iconshangpinguanli:before { + content: "\e602"; +} diff --git a/components/pretty-uploadFile/pretty-uploadFile.vue b/components/pretty-uploadFile/pretty-uploadFile.vue new file mode 100644 index 0000000..f661467 --- /dev/null +++ b/components/pretty-uploadFile/pretty-uploadFile.vue @@ -0,0 +1,237 @@ + + + + + diff --git a/components/ss-upload-image/ss-upload-image.vue b/components/ss-upload-image/ss-upload-image.vue new file mode 100644 index 0000000..6bd0a79 --- /dev/null +++ b/components/ss-upload-image/ss-upload-image.vue @@ -0,0 +1,133 @@ + + + + + diff --git a/components/timeline/timeline.vue b/components/timeline/timeline.vue new file mode 100644 index 0000000..d3810fe --- /dev/null +++ b/components/timeline/timeline.vue @@ -0,0 +1,134 @@ + + + + + diff --git a/components/touch-list/touch-list.vue b/components/touch-list/touch-list.vue new file mode 100644 index 0000000..9e17085 --- /dev/null +++ b/components/touch-list/touch-list.vue @@ -0,0 +1,161 @@ + + + + + + diff --git a/components/uni-combox/uni-combox.vue b/components/uni-combox/uni-combox.vue new file mode 100644 index 0000000..34f7e1d --- /dev/null +++ b/components/uni-combox/uni-combox.vue @@ -0,0 +1,202 @@ + + + + + diff --git a/components/uni-data-checkbox/clientdb.js b/components/uni-data-checkbox/clientdb.js new file mode 100644 index 0000000..ff7501b --- /dev/null +++ b/components/uni-data-checkbox/clientdb.js @@ -0,0 +1,316 @@ + +const events = { + load: 'load', + error: 'error' +} +const pageMode = { + add: 'add', + replace: 'replace' +} + +const attrs = [ + 'pageCurrent', + 'pageSize', + 'collection', + 'action', + 'field', + 'getcount', + 'orderby', + 'where' +] + +export default { + data() { + return { + loading: false, + listData: this.getone ? {} : [], + paginationInternal: { + current: this.pageCurrent, + size: this.pageSize, + count: 0 + }, + errorMessage: '' + } + }, + created() { + let db = null; + let dbCmd = null; + + if(this.collection){ + this.db = uniCloud.database(); + this.dbCmd = this.db.command; + } + + this._isEnded = false + + this.$watch(() => { + var al = [] + attrs.forEach(key => { + al.push(this[key]) + }) + return al + }, (newValue, oldValue) => { + this.paginationInternal.pageSize = this.pageSize + + let needReset = false + for (let i = 2; i < newValue.length; i++) { + if (newValue[i] != oldValue[i]) { + needReset = true + break + } + } + if (needReset) { + this.clear() + this.reset() + } + if (newValue[0] != oldValue[0]) { + this.paginationInternal.current = this.pageCurrent + } + + this._execLoadData() + }) + + // #ifdef H5 + if (process.env.NODE_ENV === 'development') { + this._debugDataList = [] + if (!window.unidev) { + window.unidev = { + clientDB: { + data: [] + } + } + } + unidev.clientDB.data.push(this._debugDataList) + } + // #endif + + // #ifdef MP-TOUTIAO + let changeName + let events = this.$scope.dataset.eventOpts + for (var i = 0; i < events.length; i++) { + let event = events[i] + if (event[0].includes('^load')) { + changeName = event[1][0][0] + } + } + if (changeName) { + let parent = this.$parent + let maxDepth = 16 + this._changeDataFunction = null + while (parent && maxDepth > 0) { + let fun = parent[changeName] + if (fun && typeof fun === 'function') { + this._changeDataFunction = fun + maxDepth = 0 + break + } + parent = parent.$parent + maxDepth--; + } + } + // #endif + + // if (!this.manual) { + // this.loadData() + // } + }, + // #ifdef H5 + beforeDestroy() { + if (process.env.NODE_ENV === 'development' && window.unidev) { + var cd = this._debugDataList + var dl = unidev.clientDB.data + for (var i = dl.length - 1; i >= 0; i--) { + if (dl[i] === cd) { + dl.splice(i, 1) + break + } + } + } + }, + // #endif + methods: { + loadData(args1, args2) { + let callback = null + if (typeof args1 === 'object') { + if (args1.clear) { + this.clear() + this.reset() + } + if (args1.current !== undefined) { + this.paginationInternal.current = args1.current + } + if (typeof args2 === 'function') { + callback = args2 + } + } else if (typeof args1 === 'function') { + callback = args1 + } + + this._execLoadData(callback) + }, + loadMore() { + if (this._isEnded) { + return + } + this._execLoadData() + }, + refresh() { + this.clear() + this._execLoadData() + }, + clear() { + this._isEnded = false + this.listData = [] + }, + reset() { + this.paginationInternal.current = 1 + }, + remove(id, { + action, + callback, + confirmTitle, + confirmContent + } = {}) { + if (!id || !id.length) { + return + } + uni.showModal({ + title: confirmTitle || '提示', + content: confirmContent || '是否删除该数据', + showCancel: true, + success: (res) => { + if (!res.confirm) { + return + } + this._execRemove(id, action, callback) + } + }) + }, + _execLoadData(callback) { + if (this.loading) { + return + } + this.loading = true + this.errorMessage = '' + + this._getExec().then((res) => { + this.loading = false + const { + data, + count + } = res.result + this._isEnded = data.length < this.pageSize + + callback && callback(data, this._isEnded) + this._dispatchEvent(events.load, data) + + if (this.getone) { + this.listData = data.length ? data[0] : undefined + } else if (this.pageData === pageMode.add) { + this.listData.push(...data) + if (this.listData.length) { + this.paginationInternal.current++ + } + } else if (this.pageData === pageMode.replace) { + this.listData = data + this.paginationInternal.count = count + } + + // #ifdef H5 + if (process.env.NODE_ENV === 'development') { + this._debugDataList.length = 0 + this._debugDataList.push(...JSON.parse(JSON.stringify(this.listData))) + } + // #endif + }).catch((err) => { + this.loading = false + this.errorMessage = err + callback && callback() + this.$emit(events.error, err) + }) + }, + _getExec() { + let exec = this.db + if (this.action) { + exec = exec.action(this.action) + } + + exec = exec.collection(this.collection) + + if (!(!this.where || !Object.keys(this.where).length)) { + exec = exec.where(this.where) + } + if (this.field) { + exec = exec.field(this.field) + } + if (this.orderby) { + exec = exec.orderBy(this.orderby) + } + + const { + current, + size + } = this.paginationInternal + exec = exec.skip(size * (current - 1)).limit(size).get({ + getCount: this.getcount + }) + + return exec + }, + _execRemove(id, action, callback) { + if (!this.collection || !id) { + return + } + + const ids = Array.isArray(id) ? id : [id] + if (!ids.length) { + return + } + + uni.showLoading({ + mask: true + }) + + let exec = this.db + if (action) { + exec = exec.action(action) + } + + exec.collection(this.collection).where({ + _id: dbCmd.in(ids) + }).remove().then((res) => { + callback && callback(res.result) + if (this.pageData === pageMode.replace) { + this.refresh() + } else { + this.removeData(ids) + } + }).catch((err) => { + uni.showModal({ + content: err.message, + showCancel: false + }) + }).finally(() => { + uni.hideLoading() + }) + }, + removeData(ids) { + let il = ids.slice(0) + let dl = this.listData + for (let i = dl.length - 1; i >= 0; i--) { + let index = il.indexOf(dl[i]._id) + if (index >= 0) { + dl.splice(i, 1) + il.splice(index, 1) + } + } + }, + _dispatchEvent(type, data) { + if (this._changeDataFunction) { + this._changeDataFunction(data, this._isEnded) + } else { + this.$emit(type, data, this._isEnded) + } + } + } +} diff --git a/components/uni-data-checkbox/uni-data-checkbox.vue b/components/uni-data-checkbox/uni-data-checkbox.vue new file mode 100644 index 0000000..a619791 --- /dev/null +++ b/components/uni-data-checkbox/uni-data-checkbox.vue @@ -0,0 +1,847 @@ + + + + + diff --git a/components/uni-datetime-picker/uni-datetime-picker.vue b/components/uni-datetime-picker/uni-datetime-picker.vue new file mode 100644 index 0000000..d82b3f2 --- /dev/null +++ b/components/uni-datetime-picker/uni-datetime-picker.vue @@ -0,0 +1,364 @@ + + + + + diff --git a/components/uni-easyinput/common.js b/components/uni-easyinput/common.js new file mode 100644 index 0000000..df9abe1 --- /dev/null +++ b/components/uni-easyinput/common.js @@ -0,0 +1,56 @@ +/** + * @desc 函数防抖 + * @param func 目标函数 + * @param wait 延迟执行毫秒数 + * @param immediate true - 立即执行, false - 延迟执行 + */ +export const debounce = function(func, wait = 1000, immediate = true) { + let timer; + console.log(1); + return function() { + console.log(123); + let context = this, + args = arguments; + if (timer) clearTimeout(timer); + if (immediate) { + let callNow = !timer; + timer = setTimeout(() => { + timer = null; + }, wait); + if (callNow) func.apply(context, args); + } else { + timer = setTimeout(() => { + func.apply(context, args); + }, wait) + } + } +} +/** + * @desc 函数节流 + * @param func 函数 + * @param wait 延迟执行毫秒数 + * @param type 1 使用表时间戳,在时间段开始的时候触发 2 使用表定时器,在时间段结束的时候触发 + */ +export const throttle = (func, wait = 1000, type = 1) => { + let previous = 0; + let timeout; + return function() { + let context = this; + let args = arguments; + if (type === 1) { + let now = Date.now(); + + if (now - previous > wait) { + func.apply(context, args); + previous = now; + } + } else if (type === 2) { + if (!timeout) { + timeout = setTimeout(() => { + timeout = null; + func.apply(context, args) + }, wait) + } + } + } +} diff --git a/components/uni-easyinput/uni-easyinput.vue b/components/uni-easyinput/uni-easyinput.vue new file mode 100644 index 0000000..71e4d2b --- /dev/null +++ b/components/uni-easyinput/uni-easyinput.vue @@ -0,0 +1,402 @@ + + + + + diff --git a/components/uni-forms-item/uni-forms-item.vue b/components/uni-forms-item/uni-forms-item.vue new file mode 100644 index 0000000..77e5a14 --- /dev/null +++ b/components/uni-forms-item/uni-forms-item.vue @@ -0,0 +1,440 @@ + + + + + diff --git a/components/uni-forms/uni-forms.vue b/components/uni-forms/uni-forms.vue new file mode 100644 index 0000000..0412faf --- /dev/null +++ b/components/uni-forms/uni-forms.vue @@ -0,0 +1,420 @@ + + + + + diff --git a/components/uni-forms/validate.js b/components/uni-forms/validate.js new file mode 100644 index 0000000..e369abb --- /dev/null +++ b/components/uni-forms/validate.js @@ -0,0 +1,442 @@ + +var pattern = { + email: /^\S+?@\S+?\.\S+?$/, + url: new RegExp("^(?!mailto:)(?:(?:http|https|ftp)://|//)(?:\\S+(?::\\S*)?@)?(?:(?:(?:[1-9]\\d?|1\\d\\d|2[01]\\d|22[0-3])(?:\\.(?:1?\\d{1,2}|2[0-4]\\d|25[0-5])){2}(?:\\.(?:[0-9]\\d?|1\\d\\d|2[0-4]\\d|25[0-4]))|(?:(?:[a-z\\u00a1-\\uffff0-9]+-*)*[a-z\\u00a1-\\uffff0-9]+)(?:\\.(?:[a-z\\u00a1-\\uffff0-9]+-*)*[a-z\\u00a1-\\uffff0-9]+)*(?:\\.(?:[a-z\\u00a1-\\uffff]{2,})))|localhost)(?::\\d{2,5})?(?:(/|\\?|#)[^\\s]*)?$", 'i') +}; + +const FORMAT_MAPPING = { + "int": 'number', + "bool": 'boolean', + "double": 'number', + "long": 'number', + "password": 'string' +} + +function formatMessage(args, resources) { + var defaultMessage = ['label'] + defaultMessage.forEach((item) => { + if (args[item] === undefined) { + args[item] = '' + } + }) + + let str = resources + for (let key in args) { + let reg = new RegExp('{' + key + '}') + str = str.replace(reg, args[key]) + } + return str +} + +function isEmptyValue(value, type) { + if (value === undefined || value === null) { + return true; + } + + if (typeof value === 'string' && !value) { + return true; + } + + if (Array.isArray(value) && !value.length) { + return true; + } + + if (type === 'object' && !Object.keys(value).length) { + return true; + } + + return false; +} + +const types = { + integer(value) { + return types.number(value) && parseInt(value, 10) === value; + }, + string(value) { + return typeof value === 'string'; + }, + number(value) { + if (isNaN(value)) { + return false; + } + return typeof value === 'number'; + }, + "boolean": function (value) { + return typeof value === 'boolean'; + }, + "float": function (value) { + return types.number(value) && !types.integer(value); + }, + array(value) { + return Array.isArray(value); + }, + object(value) { + return typeof value === 'object' && !types.array(value); + }, + date(value) { + var v + if (value instanceof Date) { + v = value; + } else { + v = new Date(value); + } + return typeof v.getTime === 'function' && typeof v.getMonth === 'function' && typeof v.getYear === 'function' && !isNaN(v.getTime()); + }, + timestamp(value) { + if (!this.integer(value) || Math.abs(value).toString().length > 16) { + return false + } + + return this.date(value); + }, + email(value) { + return typeof value === 'string' && !!value.match(pattern.email) && value.length < 255; + }, + url(value) { + return typeof value === 'string' && !!value.match(pattern.url); + }, + pattern(reg, value) { + try { + return new RegExp(reg).test(value); + } catch (e) { + return false; + } + }, + method(value) { + return typeof value === 'function'; + } +} + +class RuleValidator { + + constructor(message) { + this._message = message + } + + async validateRule(key, value, data, allData) { + var result = null + + let rules = key.rules + + let hasRequired = rules.findIndex((item) => { + return item.required + }) + if (hasRequired < 0) { + if (value === null || value === undefined) { + return result + } + if (typeof value === 'string' && !value.length) { + return result + } + } + + var message = this._message + + if (rules === undefined) { + return message['default'] + } + + for (var i = 0; i < rules.length; i++) { + let rule = rules[i] + let vt = this._getValidateType(rule) + + if (key.label !== undefined) { + Object.assign(rule, { + label: key.label + }) + } + + if (RuleValidatorHelper[vt]) { + result = RuleValidatorHelper[vt](rule, value, message) + if (result != null) { + break + } + } + + if (rule.validateExpr) { + let now = Date.now() + let resultExpr = rule.validateExpr(value, allData, now) + if (resultExpr === false) { + result = this._getMessage(rule, rule.errorMessage || this._message['default']) + break + } + } + + if (rule.validateFunction) { + result = await this.validateFunction(rule, value, data, allData, vt) + if (result !== null) { + break + } + } + } + + return result + } + + async validateFunction(rule, value, data, allData, vt) { + let result = null + try { + let callbackMessage = null + const res = await rule.validateFunction(rule, value, allData || data, (message) => { + callbackMessage = message + }) + if (callbackMessage || (typeof res === 'string' && res) || res === false) { + result = this._getMessage(rule, callbackMessage || res, vt) + } + } catch (e) { + result = this._getMessage(rule, e.message, vt) + } + return result + } + + _getMessage(rule, message, vt) { + return formatMessage(rule, message || rule.errorMessage || this._message[vt] || message['default']) + } + + _getValidateType(rule) { + // TODO + var result = '' + if (rule.required) { + result = 'required' + } else if (rule.format) { + result = 'format' + } else if (rule.range) { + result = 'range' + } else if (rule.maximum || rule.minimum) { + result = 'rangeNumber' + } else if (rule.maxLength || rule.minLength) { + result = 'rangeLength' + } else if (rule.pattern) { + result = 'pattern' + } + return result + } +} + +const RuleValidatorHelper = { + required(rule, value, message) { + if (rule.required && isEmptyValue(value, rule.format || typeof value)) { + return formatMessage(rule, rule.errorMessage || message.required); + } + + return null + }, + + range(rule, value, message) { + const { range, errorMessage } = rule; + + let list = new Array(range.length); + for (let i = 0; i < range.length; i++) { + const item = range[i]; + if (types.object(item) && item.value !== undefined) { + list[i] = item.value; + } else { + list[i] = item; + } + } + + let result = false + if (Array.isArray(value)) { + result = (new Set(value.concat(list)).size === list.length); + } else { + if (list.indexOf(value) > -1) { + result = true; + } + } + + if (!result) { + return formatMessage(rule, errorMessage || message['enum']); + } + + return null + }, + + rangeNumber(rule, value, message) { + if (!types.number(value)) { + return formatMessage(rule, rule.errorMessage || message.pattern.mismatch); + } + + let { minimum, maximum, exclusiveMinimum, exclusiveMaximum } = rule; + let min = exclusiveMinimum ? value <= minimum : value < minimum; + let max = exclusiveMaximum ? value >= maximum : value > maximum; + + if (minimum !== undefined && min) { + return formatMessage(rule, rule.errorMessage || message['number'].min) + } else if (maximum !== undefined && max) { + return formatMessage(rule, rule.errorMessage || message['number'].max) + } else if (minimum !== undefined && maximum !== undefined && (min || max)) { + return formatMessage(rule, rule.errorMessage || message['number'].range) + } + + return null + }, + + rangeLength(rule, value, message) { + if (!types.string(value) && !types.array(value)) { + return formatMessage(rule, rule.errorMessage || message.pattern.mismatch); + } + + let min = rule.minLength; + let max = rule.maxLength; + let val = value.length; + + if (min !== undefined && val < min) { + return formatMessage(rule, rule.errorMessage || message['length'].min) + } else if (max !== undefined && val > max) { + return formatMessage(rule, rule.errorMessage || message['length'].max) + } else if (min !== undefined && max !== undefined && (val < min || val > max)) { + return formatMessage(rule, rule.errorMessage || message['length'].range) + } + + return null + }, + + pattern(rule, value, message) { + if (!types['pattern'](rule.pattern, value)) { + return formatMessage(rule, rule.errorMessage || message.pattern.mismatch); + } + + return null + }, + + format(rule, value, message) { + var customTypes = Object.keys(types); + var format = FORMAT_MAPPING[rule.format] ? FORMAT_MAPPING[rule.format] : rule.format; + + if (customTypes.indexOf(format) > -1) { + if (!types[format](value)) { + return formatMessage(rule, rule.errorMessage || message.types[format]); + } + } + + return null + } +} + +class SchemaValidator extends RuleValidator { + + constructor(schema, options) { + super(SchemaValidator.message); + + this._schema = schema + this._options = options || null + } + + updateSchema(schema) { + this._schema = schema + } + + async validate(data, allData) { + let result = this._checkFieldInSchema(data) + if (!result) { + result = await this.invokeValidate(data, false, allData) + } + return result.length ? result[0] : null + } + + async validateAll(data, allData) { + let result = this._checkFieldInSchema(data) + if (!result) { + result = await this.invokeValidate(data, true, allData) + } + return result + } + + async validateUpdate(data, allData) { + let result = this._checkFieldInSchema(data) + if (!result) { + result = await this.invokeValidateUpdate(data, false, allData) + } + return result.length ? result[0] : null + } + + async invokeValidate(data, all, allData) { + let result = [] + let schema = this._schema + for (let key in schema) { + let value = schema[key] + let errorMessage = await this.validateRule(value, data[key], data, allData) + if (errorMessage != null) { + result.push({ + key, + errorMessage + }) + if (!all) break + } + } + return result + } + + async invokeValidateUpdate(data, all, allData) { + let result = [] + for (let key in data) { + let errorMessage = await this.validateRule(this._schema[key], data[key], data, allData) + if (errorMessage != null) { + result.push({ + key, + errorMessage + }) + if (!all) break + } + } + return result + } + + _checkFieldInSchema(data) { + var keys = Object.keys(data) + var keys2 = Object.keys(this._schema) + if (new Set(keys.concat(keys2)).size === keys2.length) { + return '' + } + return [{ + key: 'invalid', + errorMessage: SchemaValidator.message['defaultInvalid'] + }] + } +} + +function Message() { + return { + default: '验证错误', + defaultInvalid: '字段超出范围', + required: '{label}必填', + 'enum': '{label}超出范围', + whitespace: '{label}不能为空', + date: { + format: '{label}日期{value}格式无效', + parse: '{label}日期无法解析,{value}无效', + invalid: '{label}日期{value}无效' + }, + types: { + string: '{label}类型无效', + array: '{label}类型无效', + object: '{label}类型无效', + number: '{label}类型无效', + date: '{label}类型无效', + boolean: '{label}类型无效', + integer: '{label}类型无效', + float: '{label}类型无效', + regexp: '{label}无效', + email: '{label}类型无效', + url: '{label}类型无效' + }, + length: { + min: '{label}长度不能少于{minLength}', + max: '{label}长度不能超过{maxLength}', + range: '{label}必须介于{minLength}和{maxLength}之间' + }, + number: { + min: '{label}不能小于{minimum}', + max: '{label}不能大于{maximum}', + range: '{label}必须介于{minimum}and{maximum}之间' + }, + pattern: { + mismatch: '{label}格式不匹配' + } + }; +} + + +SchemaValidator.message = new Message(); + +export default SchemaValidator diff --git a/components/uni-group/uni-group.vue b/components/uni-group/uni-group.vue new file mode 100644 index 0000000..41cb8b5 --- /dev/null +++ b/components/uni-group/uni-group.vue @@ -0,0 +1,127 @@ + + + + diff --git a/components/uni-icon/uni-icon.vue b/components/uni-icon/uni-icon.vue new file mode 100644 index 0000000..53883c4 --- /dev/null +++ b/components/uni-icon/uni-icon.vue @@ -0,0 +1,421 @@ + + + + + diff --git a/components/uni-icons/icons.js b/components/uni-icons/icons.js new file mode 100644 index 0000000..60b7332 --- /dev/null +++ b/components/uni-icons/icons.js @@ -0,0 +1,132 @@ +export default { + "pulldown": "\ue588", + "refreshempty": "\ue461", + "back": "\ue471", + "forward": "\ue470", + "more": "\ue507", + "more-filled": "\ue537", + "scan": "\ue612", + "qq": "\ue264", + "weibo": "\ue260", + "weixin": "\ue261", + "pengyouquan": "\ue262", + "loop": "\ue565", + "refresh": "\ue407", + "refresh-filled": "\ue437", + "arrowthindown": "\ue585", + "arrowthinleft": "\ue586", + "arrowthinright": "\ue587", + "arrowthinup": "\ue584", + "undo-filled": "\ue7d6", + "undo": "\ue406", + "redo": "\ue405", + "redo-filled": "\ue7d9", + "bars": "\ue563", + "chatboxes": "\ue203", + "camera": "\ue301", + "chatboxes-filled": "\ue233", + "camera-filled": "\ue7ef", + "cart-filled": "\ue7f4", + "cart": "\ue7f5", + "checkbox-filled": "\ue442", + "checkbox": "\ue7fa", + "arrowleft": "\ue582", + "arrowdown": "\ue581", + "arrowright": "\ue583", + "smallcircle-filled": "\ue801", + "arrowup": "\ue580", + "circle": "\ue411", + "eye-filled": "\ue568", + "eye-slash-filled": "\ue822", + "eye-slash": "\ue823", + "eye": "\ue824", + "flag-filled": "\ue825", + "flag": "\ue508", + "gear-filled": "\ue532", + "reload": "\ue462", + "gear": "\ue502", + "hand-thumbsdown-filled": "\ue83b", + "hand-thumbsdown": "\ue83c", + "hand-thumbsup-filled": "\ue83d", + "heart-filled": "\ue83e", + "hand-thumbsup": "\ue83f", + "heart": "\ue840", + "home": "\ue500", + "info": "\ue504", + "home-filled": "\ue530", + "info-filled": "\ue534", + "circle-filled": "\ue441", + "chat-filled": "\ue847", + "chat": "\ue263", + "mail-open-filled": "\ue84d", + "email-filled": "\ue231", + "mail-open": "\ue84e", + "email": "\ue201", + "checkmarkempty": "\ue472", + "list": "\ue562", + "locked-filled": "\ue856", + "locked": "\ue506", + "map-filled": "\ue85c", + "map-pin": "\ue85e", + "map-pin-ellipse": "\ue864", + "map": "\ue364", + "minus-filled": "\ue440", + "mic-filled": "\ue332", + "minus": "\ue410", + "micoff": "\ue360", + "mic": "\ue302", + "clear": "\ue434", + "smallcircle": "\ue868", + "close": "\ue404", + "closeempty": "\ue460", + "paperclip": "\ue567", + "paperplane": "\ue503", + "paperplane-filled": "\ue86e", + "person-filled": "\ue131", + "contact-filled": "\ue130", + "person": "\ue101", + "contact": "\ue100", + "images-filled": "\ue87a", + "phone": "\ue200", + "images": "\ue87b", + "image": "\ue363", + "image-filled": "\ue877", + "location-filled": "\ue333", + "location": "\ue303", + "plus-filled": "\ue439", + "plus": "\ue409", + "plusempty": "\ue468", + "help-filled": "\ue535", + "help": "\ue505", + "navigate-filled": "\ue884", + "navigate": "\ue501", + "mic-slash-filled": "\ue892", + "search": "\ue466", + "settings": "\ue560", + "sound": "\ue590", + "sound-filled": "\ue8a1", + "spinner-cycle": "\ue465", + "download-filled": "\ue8a4", + "personadd-filled": "\ue132", + "videocam-filled": "\ue8af", + "personadd": "\ue102", + "upload": "\ue402", + "upload-filled": "\ue8b1", + "starhalf": "\ue463", + "star-filled": "\ue438", + "star": "\ue408", + "trash": "\ue401", + "phone-filled": "\ue230", + "compose": "\ue400", + "videocam": "\ue300", + "trash-filled": "\ue8dc", + "download": "\ue403", + "chatbubble-filled": "\ue232", + "chatbubble": "\ue202", + "cloud-download": "\ue8e4", + "cloud-upload-filled": "\ue8e5", + "cloud-upload": "\ue8e6", + "cloud-download-filled": "\ue8e9", + "headphones":"\ue8bf", + "shop":"\ue609" +} diff --git a/components/uni-icons/uni-icons.vue b/components/uni-icons/uni-icons.vue new file mode 100644 index 0000000..5f303e4 --- /dev/null +++ b/components/uni-icons/uni-icons.vue @@ -0,0 +1,67 @@ + + + + + diff --git a/components/uni-icons/uni.ttf b/components/uni-icons/uni.ttf new file mode 100644 index 0000000..60a1968 Binary files /dev/null and b/components/uni-icons/uni.ttf differ diff --git a/components/uni-pagination/uni-pagination.vue b/components/uni-pagination/uni-pagination.vue new file mode 100644 index 0000000..cb4adb7 --- /dev/null +++ b/components/uni-pagination/uni-pagination.vue @@ -0,0 +1,210 @@ + + + + + diff --git a/components/uni-picker/uni-picker.vue b/components/uni-picker/uni-picker.vue new file mode 100644 index 0000000..1a53718 --- /dev/null +++ b/components/uni-picker/uni-picker.vue @@ -0,0 +1,324 @@ + + + + + diff --git a/components/utils/openpdf.js b/components/utils/openpdf.js new file mode 100644 index 0000000..314403b --- /dev/null +++ b/components/utils/openpdf.js @@ -0,0 +1,38 @@ +//#ifdef H5 +const BASEURL = '' +//#endif + +//#ifndef H5 +// const BASEURL = getApp().globalData.url + //#endif + +function previepdf(url,ext) { + uni.showLoading({ + title: '加载中' + }); + uni.downloadFile({ + url: url, + + success(res) { + let path = res.tempFilePath; + uni.openDocument({ + filePath: path, + fileType: ext, + + success() { + uni.hideLoading(); + }, + + fail() { + uni.hideLoading(); + } + + }); + } + + }); +} + +module.exports = { + previepdf +}; \ No newline at end of file diff --git a/components/utils/request.js b/components/utils/request.js new file mode 100644 index 0000000..d8ed794 --- /dev/null +++ b/components/utils/request.js @@ -0,0 +1,101 @@ +/** + * GET请求封装 + */ +function get(url, data = {}) { + return request(url, data, 'GET'); +} + +function put(url, data = {}) { + return request(url, data, 'put'); +} + +function deletes(url, data = {}) { + return request(url, data, 'delete'); +} +/** + * POST请求封装 + */ + +function post(url, data = {}) { + return request(url, data, 'POST'); +} +/** + * 微信的request + */ +//#ifdef H5 +const BASEURL = '' +//#endif + +//#ifndef H5 +const BASEURL = getApp().globalData.url +//#endif + +function request(url, data = {}, method = "GET") { + return new Promise(function(resolve, reject) { + uni.showLoading({ + title: "加载中" + }); + uni.request({ + url: BASEURL + url, + method: method, + data: data, + header: { + 'mini-session': uni.getStorageSync('session') || '', + 'Accept': 'application/json', + 'X-Requested-With': 'XMLHttpRequest', + 'Content-Type': 'application/json' + }, + + success(res) { + if (res.data) { + if (res.data.error) { + if (res.data.error.code != 404) { + uni.showToast({ + title: res.data.error.message, + icon: 'none' + }); + } + + if (res.data.error.code == 9999) { + uni.clearStorageSync('session'); + uni.showToast({ + title: '登录失效,请重新登录', + icon: 'none' + }); + setTimeout(() => { + uni.reLaunch({ + url: '/pages/login/login' + }); + }, 1000); + } + + reject(res.data.error.message); + } else { + resolve(res.data); + } + } else { + resolve(null); + uni.hideLoading(); + } + }, + + fail(res) { + console.log(res); + uni.showToast({ + title: '请求超时,请重试', + icon: 'none' + }); // wx.hideLoading() + } + + }); + }); +} + + + +module.exports = { + get, + post, + put, + deletes, +}; diff --git a/components/utils/uploadimage.js b/components/utils/uploadimage.js new file mode 100644 index 0000000..ac06e31 --- /dev/null +++ b/components/utils/uploadimage.js @@ -0,0 +1,167 @@ +//#ifdef H5 +const BASEURL = '' +//#endif + +//#ifndef H5 +//#endif +import Vue from 'vue' +const BASEURL = Vue.prototype.baseUrl // 取得全局变量 + +function uploadImage() { + return new Promise((resolve, reject) => { + // 原本的上传图片 + // uni.chooseImage({ + // count: 1, + // sizeType: ['original', 'compressed'], + // sourceType: ['album', 'camera'], + + // 修改为上传图片或者视频 + uni.chooseMedia({ + count: 1,// 待处理,多个上传需要封装循环上传 + mediaType: ['image','video'], + sourceType: ['album', 'camera'], + maxDuration: 30, + camera: 'back', + success(ress) { + if (ress.tempFiles.length > 0) { + console.log(ress,'看下是啥格式') + // 修改--改为选择图片或者视频的接口 + // const tempFilePaths = ress.tempFiles[0].path + const tempFilePaths = ress.tempFiles[0].tempFilePath + + const size = ress.tempFiles[0].size + if (size < 8388608) { + uni.showLoading({ + title:'上传中' + }) + // let imageurl = tempFilePaths + let pdfurl = "" + uni.uploadFile({ + url: BASEURL+'/api-guarantee/dg-apply-amount-info/uploadFile', + filePath: tempFilePaths, + header: { + // "mini-session": uni.getStorageSync('session'), + "token": uni.getStorageSync('token'), + "Content-Type": "multipart/form-data;boundary=----WebKitFormBoundaryi8lPVoSysovJLNqi", + "Accept": "application/json" + }, + name: 'file', + // formData: { + // 'user': 'test' + // }, + success(res) { + if (res.statusCode == 500) { + // 判断图片或者视频未做 + uni.showToast({ + title: '上传失败', + icon: 'none' + }) + reject('失败') + } else { + uni.showToast({ + title: '上传成功', + icon: 'success' + }) + if (res.data) { + let imageurl = JSON.parse(res.data).data[0] + let index= imageurl.lastIndexOf("."); + let ext = imageurl.substr(index+1); + resolve({ + imageurl, // 图片地址 + ext: ext + }) + } + + } + } + }) + } else { + uni.showToast({ + title: '超出限制大小', + icon: "none" + }) + } + } else { + uni.showToast({ + title: '文件不存在', + icon: "none" + }) + } + } + }) + }) +} + +function uploadPdf() { + return new Promise((resolve, reject) => { + uni.chooseMessageFile({ + count: 1, + type: 'file', + success(ress) { + if (ress.tempFiles.length > 0) { + if (ress.tempFiles[0].size < 8388608) { + uni.showLoading({ + title:'上传中' + }) + // let pdfurl = ress.tempFiles[0].name + uni.uploadFile({ + url:BASEURL+'/api-guarantee/dg-apply-amount-info/uploadFile', + filePath: ress.tempFiles[0].path, + name: 'file', + header: { + // "mini-session": uni.getStorageSync('session'), + "token": uni.getStorageSync('token'), + "Content-Type": "multipart/form-data; boundary=----WebKitFormBoundaryi8lPVoSysovJLNqi", + "Accept": "application/json" + }, + // formData: { + // 'user': 'test' + // }, + success(res) { + if (res.statusCode != 500) { + uni.showToast({ + title: '文件上传成功', + icon: 'success' + }) + if (res.data) { + let pdfurl = JSON.parse(res.data).data[0] + let index= pdfurl.lastIndexOf("."); + let ext = pdfurl.substr(index+1); + resolve({ + pdfurl, // 文件地址 + ext: ext + }) + } else { + reject('失败') + } + + } else { + uni.showToast({ + title: '服务器错误', + icon: 'none' + }) + } + } + }) + } else { + uni.showToast({ + title: '超出限制大小', + icon: "none" + }) + return + } + } else { + uni.showToast({ + title: '文件不存在', + icon: "none" + }) + } + + } + }) + }) +} +module.exports = { + uploadImage, + uploadPdf +} diff --git a/guaranteePages/pages/Information/Information.vue b/guaranteePages/pages/Information/Information.vue new file mode 100644 index 0000000..9845aa2 --- /dev/null +++ b/guaranteePages/pages/Information/Information.vue @@ -0,0 +1,347 @@ + + + + + diff --git a/guaranteePages/pages/InformationSee/InformationSee.vue b/guaranteePages/pages/InformationSee/InformationSee.vue new file mode 100644 index 0000000..2834862 --- /dev/null +++ b/guaranteePages/pages/InformationSee/InformationSee.vue @@ -0,0 +1,1188 @@ + + + + + diff --git a/guaranteePages/pages/addApplication/addApplication.vue b/guaranteePages/pages/addApplication/addApplication.vue new file mode 100644 index 0000000..4995684 --- /dev/null +++ b/guaranteePages/pages/addApplication/addApplication.vue @@ -0,0 +1,1557 @@ + + + + + diff --git a/guaranteePages/pages/application/application.vue b/guaranteePages/pages/application/application.vue new file mode 100644 index 0000000..c9beb77 --- /dev/null +++ b/guaranteePages/pages/application/application.vue @@ -0,0 +1,361 @@ + + + + + diff --git a/guaranteePages/pages/asset/asset.vue b/guaranteePages/pages/asset/asset.vue new file mode 100644 index 0000000..427d339 --- /dev/null +++ b/guaranteePages/pages/asset/asset.vue @@ -0,0 +1,341 @@ + + + + + diff --git a/guaranteePages/pages/assetSee/assetSee.vue b/guaranteePages/pages/assetSee/assetSee.vue new file mode 100644 index 0000000..f510b3e --- /dev/null +++ b/guaranteePages/pages/assetSee/assetSee.vue @@ -0,0 +1,1267 @@ + + + + + diff --git a/guaranteePages/pages/assignAB/assignAB.vue b/guaranteePages/pages/assignAB/assignAB.vue new file mode 100644 index 0000000..d5d9e69 --- /dev/null +++ b/guaranteePages/pages/assignAB/assignAB.vue @@ -0,0 +1,289 @@ + + + + + \ No newline at end of file diff --git a/guaranteePages/pages/assignCommissioner/assignCommissioner.vue b/guaranteePages/pages/assignCommissioner/assignCommissioner.vue new file mode 100644 index 0000000..b7e441f --- /dev/null +++ b/guaranteePages/pages/assignCommissioner/assignCommissioner.vue @@ -0,0 +1,251 @@ + + + + + \ No newline at end of file diff --git a/guaranteePages/pages/assignInformation/assignInformation.vue b/guaranteePages/pages/assignInformation/assignInformation.vue new file mode 100644 index 0000000..8269b77 --- /dev/null +++ b/guaranteePages/pages/assignInformation/assignInformation.vue @@ -0,0 +1,237 @@ + + + + + \ No newline at end of file diff --git a/guaranteePages/pages/assignRegulation/assignRegulation.vue b/guaranteePages/pages/assignRegulation/assignRegulation.vue new file mode 100644 index 0000000..b0f45b8 --- /dev/null +++ b/guaranteePages/pages/assignRegulation/assignRegulation.vue @@ -0,0 +1,236 @@ + + + + + \ No newline at end of file diff --git a/guaranteePages/pages/investigation/investigation.vue b/guaranteePages/pages/investigation/investigation.vue new file mode 100644 index 0000000..cec6686 --- /dev/null +++ b/guaranteePages/pages/investigation/investigation.vue @@ -0,0 +1,342 @@ + + + + + diff --git a/guaranteePages/pages/investigationSee/investigationSee.vue b/guaranteePages/pages/investigationSee/investigationSee.vue new file mode 100644 index 0000000..1ac4ec5 --- /dev/null +++ b/guaranteePages/pages/investigationSee/investigationSee.vue @@ -0,0 +1,1329 @@ + + + + + diff --git a/guaranteePages/pages/letter/letter.vue b/guaranteePages/pages/letter/letter.vue new file mode 100644 index 0000000..ad18371 --- /dev/null +++ b/guaranteePages/pages/letter/letter.vue @@ -0,0 +1,228 @@ + + + + + diff --git a/guaranteePages/pages/letterSee/letterSee.vue b/guaranteePages/pages/letterSee/letterSee.vue new file mode 100644 index 0000000..541de2d --- /dev/null +++ b/guaranteePages/pages/letterSee/letterSee.vue @@ -0,0 +1,199 @@ + + + + + diff --git a/guaranteePages/pages/notice/notice.vue b/guaranteePages/pages/notice/notice.vue new file mode 100644 index 0000000..54393f8 --- /dev/null +++ b/guaranteePages/pages/notice/notice.vue @@ -0,0 +1,223 @@ + + + + + diff --git a/guaranteePages/pages/noticeSee/noticeSee.vue b/guaranteePages/pages/noticeSee/noticeSee.vue new file mode 100644 index 0000000..461b2d1 --- /dev/null +++ b/guaranteePages/pages/noticeSee/noticeSee.vue @@ -0,0 +1,184 @@ + + + + + diff --git a/guaranteePages/pages/payment/payment.vue b/guaranteePages/pages/payment/payment.vue new file mode 100644 index 0000000..434949c --- /dev/null +++ b/guaranteePages/pages/payment/payment.vue @@ -0,0 +1,231 @@ + + + + + diff --git a/guaranteePages/pages/paymentSee/paymentSee.vue b/guaranteePages/pages/paymentSee/paymentSee.vue new file mode 100644 index 0000000..8635c21 --- /dev/null +++ b/guaranteePages/pages/paymentSee/paymentSee.vue @@ -0,0 +1,257 @@ + + + + + diff --git a/guaranteePages/pages/regulation/regulation.vue b/guaranteePages/pages/regulation/regulation.vue new file mode 100644 index 0000000..c6f91d1 --- /dev/null +++ b/guaranteePages/pages/regulation/regulation.vue @@ -0,0 +1,338 @@ + + + + + diff --git a/guaranteePages/pages/regulationSee/regulationSee.vue b/guaranteePages/pages/regulationSee/regulationSee.vue new file mode 100644 index 0000000..0bdef99 --- /dev/null +++ b/guaranteePages/pages/regulationSee/regulationSee.vue @@ -0,0 +1,1201 @@ + + + + + diff --git a/guaranteePages/pages/review/review.vue b/guaranteePages/pages/review/review.vue new file mode 100644 index 0000000..87d8bc1 --- /dev/null +++ b/guaranteePages/pages/review/review.vue @@ -0,0 +1,258 @@ + + + + + diff --git a/guaranteePages/pages/reviewJudges/reviewJudges.vue b/guaranteePages/pages/reviewJudges/reviewJudges.vue new file mode 100644 index 0000000..6be1772 --- /dev/null +++ b/guaranteePages/pages/reviewJudges/reviewJudges.vue @@ -0,0 +1,393 @@ + + + + + \ No newline at end of file diff --git a/guaranteePages/pages/reviewSee/reviewSee.vue b/guaranteePages/pages/reviewSee/reviewSee.vue new file mode 100644 index 0000000..1235918 --- /dev/null +++ b/guaranteePages/pages/reviewSee/reviewSee.vue @@ -0,0 +1,1038 @@ + + + + + diff --git a/guaranteePages/pages/workMeeting/workMeeting.vue b/guaranteePages/pages/workMeeting/workMeeting.vue new file mode 100644 index 0000000..6e2b72a --- /dev/null +++ b/guaranteePages/pages/workMeeting/workMeeting.vue @@ -0,0 +1,340 @@ + + + + + diff --git a/guaranteePages/pages/workMeetingSee/workMeetingSee.vue b/guaranteePages/pages/workMeetingSee/workMeetingSee.vue new file mode 100644 index 0000000..dd9d2f1 --- /dev/null +++ b/guaranteePages/pages/workMeetingSee/workMeetingSee.vue @@ -0,0 +1,881 @@ + + + + + diff --git a/js_sdk/zhouWei-request/request/core/request.js b/js_sdk/zhouWei-request/request/core/request.js new file mode 100644 index 0000000..8b7b3ba --- /dev/null +++ b/js_sdk/zhouWei-request/request/core/request.js @@ -0,0 +1,130 @@ +import { mergeConfig, dispatchRequest, jsonpRequest} from "./utils.js"; +export default class request { + constructor(options) { + //请求公共地址 + this.baseUrl = options.baseUrl || ""; + //公共文件上传请求地址 + this.fileUrl = options.fileUrl || ""; + // 超时时间 + this.timeout = options.timeout || 6000; + // 服务器上传图片默认url + this.defaultUploadUrl = options.defaultUploadUrl || ""; + //默认请求头 + this.header = options.header || {}; + //默认配置 + this.config = options.config || { + isPrompt: true, + load: true, + isFactory: true, + resend: 0 + }; + } + //post请求 + post(url = '', data = {}, options = {}) { + return this.request({ + method: "POST", + data: data, + url: url, + ...options + }); + } + + //get请求 + get(url = '', data = {}, options = {}) { + return this.request({ + method: "GET", + data: data, + url: url, + ...options + }); + } + + //put请求 + put(url = '', data = {}, options = {}) { + return this.request({ + method: "PUT", + data: data, + url: url, + ...options + }); + } + + //delete请求 + delete(url = '', data = {}, options = {}) { + return this.request({ + method: "DELETE", + data: data, + url: url, + ...options + }); + } + //jsonp请求(只限于H5使用) + jsonp(url = '', data = {}, options = {}) { + return this.request({ + method: "JSONP", + data: data, + url: url, + ...options + }); + } + //接口请求方法 + async request(data) { + // 请求数据 + let requestInfo, + // 是否运行过请求开始钩子 + runRequestStart = false; + try { + if (!data.url) { + throw { errMsg: "【request】缺失数据url", statusCode: 0} + } + // 数据合并 + requestInfo = mergeConfig(this, data); + // 代表之前运行到这里 + runRequestStart = true; + //请求前回调 + if (this.requestStart) { + let requestStart = this.requestStart(requestInfo); + if (typeof requestStart == "object") { + let changekeys = ["data", "header", "isPrompt", "load", "isFactory"]; + changekeys.forEach(key => { + requestInfo[key] = requestStart[key]; + }); + } else { + throw { + errMsg: "【request】请求开始拦截器未通过", + statusCode: 0, + data: requestInfo.data, + method: requestInfo.method, + header: requestInfo.header, + url: requestInfo.url, + } + } + } + let requestResult = {}; + if(requestInfo.method == "JSONP"){ + requestResult = await jsonpRequest(requestInfo); + } else { + requestResult = await dispatchRequest(requestInfo); + } + //是否用外部的数据处理方法 + if (requestInfo.isFactory && this.dataFactory) { + //数据处理 + let result = await this.dataFactory({ + ...requestInfo, + response: requestResult + }); + return Promise.resolve(result); + } else { + return Promise.resolve(requestResult); + } + } catch (err){ + this.requestError && this.requestError(err); + return Promise.reject(err); + } finally { + // 如果请求开始未运行到,请求结束也不运行 + if(runRequestStart){ + this.requestEnd && this.requestEnd(requestInfo); + } + } + } +} diff --git a/js_sdk/zhouWei-request/request/core/utils.js b/js_sdk/zhouWei-request/request/core/utils.js new file mode 100644 index 0000000..65e4a70 --- /dev/null +++ b/js_sdk/zhouWei-request/request/core/utils.js @@ -0,0 +1,101 @@ +// 获取合并的数据 +export const mergeConfig = function(_this, options) { + //判断url是不是链接 + let urlType = /^(http|https):\/\//.test(options.url); + let config = Object.assign({ + timeout: _this.timeout + }, _this.config, options); + if (options.method == "FILE") { + config.url = urlType ? options.url : _this.fileUrl + options.url; + } else { + config.url = urlType ? options.url : _this.baseUrl + options.url; + } + //请求头 + if (options.header) { + config.header = Object.assign({}, _this.header, options.header); + } else { + config.header = Object.assign({}, _this.header); + } + return config; +} +// 请求 +export const dispatchRequest = function(requestInfo) { + return new Promise((resolve, reject) => { + let requestAbort = true; + let requestData = { + url: requestInfo.url, + header: requestInfo.header, //加入请求头 + success: (res) => { + requestAbort = false; + resolve(res); + }, + fail: (err) => { + requestAbort = false; + if(err.errMsg == "request:fail abort"){ + reject({ + errMsg: "请求超时,请重新尝试", + statusCode: 0, + }); + } else { + reject(err); + } + } + }; + //请求类型 + if (requestInfo.method) { + requestData.method = requestInfo.method; + } + if (requestInfo.data) { + requestData.data = requestInfo.data; + } + // #ifdef MP-WEIXIN || MP-ALIPAY + if (requestInfo.timeout) { + requestData.timeout = requestInfo.timeout; + } + // #endif + if (requestInfo.dataType) { + requestData.dataType = requestInfo.dataType; + } + // #ifndef APP-PLUS || MP-ALIPAY + if (requestInfo.responseType) { + requestData.responseType = requestInfo.responseType; + } + // #endif + // #ifdef H5 + if (requestInfo.withCredentials) { + requestData.withCredentials = requestInfo.withCredentials; + } + // #endif + let requestTask = uni.request(requestData); + setTimeout(() => { + if(requestAbort){ + requestTask.abort(); + } + }, requestInfo.timeout) + }) +} +// jsonp请求 +export const jsonpRequest = function(requestInfo) { + return new Promise((resolve, reject) => { + let dataStr = ''; + Object.keys(requestInfo.data).forEach(key => { + dataStr += key + '=' + requestInfo.data[key] + '&'; + }); + //匹配最后一个&并去除 + if (dataStr !== '') { + dataStr = dataStr.substr(0, dataStr.lastIndexOf('&')); + } + requestInfo.url = requestInfo.url + '?' + dataStr; + let callbackName = "callback" + Math.ceil(Math.random() * 1000000); + // #ifdef H5 + window[callbackName] = function(data) { + resolve(data); + } + let script = document.createElement("script"); + script.src = requestInfo.url + "&callback=" + callbackName; + document.head.appendChild(script); + // 及时删除,防止加载过多的JS + document.head.removeChild(script); + // #endif + }); +} \ No newline at end of file diff --git a/js_sdk/zhouWei-request/request/index.js b/js_sdk/zhouWei-request/request/index.js new file mode 100644 index 0000000..cc27902 --- /dev/null +++ b/js_sdk/zhouWei-request/request/index.js @@ -0,0 +1,7 @@ +/***************纯粹的数据请求(如果使用这种可以删除掉fileUpload.js)******************/ +// import request from "./core/request.js"; +// export default request; + +/********数据请求同时继承了文件上传(包括七牛云上传)************/ +import upload from "./upload/upload.js"; +export default upload; \ No newline at end of file diff --git a/js_sdk/zhouWei-request/request/upload/qiniuUploader.js b/js_sdk/zhouWei-request/request/upload/qiniuUploader.js new file mode 100644 index 0000000..138c80e --- /dev/null +++ b/js_sdk/zhouWei-request/request/upload/qiniuUploader.js @@ -0,0 +1,169 @@ +// created by gpake +(function () { + + var config = { + qiniuRegion: '', + qiniuImageURLPrefix: '', + qiniuUploadToken: '', + qiniuUploadTokenURL: '', + qiniuUploadTokenFunction: null, + qiniuShouldUseQiniuFileName: false + } + + module.exports = { + init: init, + upload: upload, + } + + // 在整个程序生命周期中,只需要 init 一次即可 + // 如果需要变更参数,再调用 init 即可 + function init(options) { + config = { + qiniuRegion: '', + qiniuImageURLPrefix: '', + qiniuUploadToken: '', + qiniuUploadTokenURL: '', + qiniuUploadTokenFunction: null, + qiniuShouldUseQiniuFileName: false + }; + updateConfigWithOptions(options); + } + + function updateConfigWithOptions(options) { + if (options.region) { + config.qiniuRegion = options.region; + } else { + console.error('qiniu uploader need your bucket region'); + } + if (options.uptoken) { + config.qiniuUploadToken = options.uptoken; + } else if (options.uptokenURL) { + config.qiniuUploadTokenURL = options.uptokenURL; + } else if (options.uptokenFunc) { + config.qiniuUploadTokenFunction = options.uptokenFunc; + } + if (options.domain) { + config.qiniuImageURLPrefix = options.domain; + } + config.qiniuShouldUseQiniuFileName = options.shouldUseQiniuFileName + } + + function upload(filePath, success, fail, options, progress, cancelTask) { + if (null == filePath) { + console.error('qiniu uploader need filePath to upload'); + return; + } + if (options) { + updateConfigWithOptions(options); + } + if (config.qiniuUploadToken) { + doUpload(filePath, success, fail, options, progress, cancelTask); + } else if (config.qiniuUploadTokenURL) { + getQiniuToken(function () { + doUpload(filePath, success, fail, options, progress, cancelTask); + }); + } else if (config.qiniuUploadTokenFunction) { + config.qiniuUploadToken = config.qiniuUploadTokenFunction(); + if (null == config.qiniuUploadToken && config.qiniuUploadToken.length > 0) { + console.error('qiniu UploadTokenFunction result is null, please check the return value'); + return + } + doUpload(filePath, success, fail, options, progress, cancelTask); + } else { + console.error('qiniu uploader need one of [uptoken, uptokenURL, uptokenFunc]'); + return; + } + } + + function doUpload(filePath, success, fail, options, progress, cancelTask) { + if (null == config.qiniuUploadToken && config.qiniuUploadToken.length > 0) { + console.error('qiniu UploadToken is null, please check the init config or networking'); + return + } + var url = uploadURLFromRegionCode(config.qiniuRegion); + var fileName = filePath.split('//')[1]; + if (options && options.key) { + fileName = options.key; + } + var formData = { + 'token': config.qiniuUploadToken + }; + if (!config.qiniuShouldUseQiniuFileName) { + formData['key'] = fileName + } + var uploadTask = wx.uploadFile({ + url: url, + filePath: filePath, + name: 'file', + formData: formData, + success: function (res) { + var dataString = res.data + if (res.data.hasOwnProperty('type') && res.data.type === 'Buffer') { + dataString = String.fromCharCode.apply(null, res.data.data) + } + try { + var dataObject = JSON.parse(dataString); + //do something + var imageUrl = config.qiniuImageURLPrefix + '/' + dataObject.key; + dataObject.imageURL = imageUrl; + if (success) { + success(dataObject); + } + } catch (e) { + console.log('parse JSON failed, origin String is: ' + dataString) + if (fail) { + fail(e); + } + } + }, + fail: function (error) { + console.error(error); + if (fail) { + fail(error); + } + } + }) + + uploadTask.onProgressUpdate((res) => { + progress && progress(res) + }) + + cancelTask && cancelTask(() => { + uploadTask.abort() + }) + } + + function getQiniuToken(callback) { + wx.request({ + url: config.qiniuUploadTokenURL, + success: function (res) { + var token = res.data.uptoken; + if (token && token.length > 0) { + config.qiniuUploadToken = token; + if (callback) { + callback(); + } + } else { + console.error('qiniuUploader cannot get your token, please check the uptokenURL or server') + } + }, + fail: function (error) { + console.error('qiniu UploadToken is null, please check the init config or networking: ' + error); + } + }) + } + + function uploadURLFromRegionCode(code) { + var uploadURL = null; + switch (code) { + case 'ECN': uploadURL = 'https://up.qbox.me'; break; + case 'NCN': uploadURL = 'https://up-z1.qbox.me'; break; + case 'SCN': uploadURL = 'https://up-z2.qbox.me'; break; + case 'NA': uploadURL = 'https://up-na0.qbox.me'; break; + case 'ASG': uploadURL = 'https://up-as0.qbox.me'; break; + default: console.error('please make the region is with one of [ECN, SCN, NCN, NA, ASG]'); + } + return uploadURL; + } + +})(); \ No newline at end of file diff --git a/js_sdk/zhouWei-request/request/upload/upload.js b/js_sdk/zhouWei-request/request/upload/upload.js new file mode 100644 index 0000000..d8234a3 --- /dev/null +++ b/js_sdk/zhouWei-request/request/upload/upload.js @@ -0,0 +1,208 @@ +import request from "./../core/request.js"; +const { + chooseImage, + chooseVideo, + qiniuUpload, + urlUpload +} = require("./utils"); +import { + mergeConfig +} from "./../core/utils.js"; +export default class fileUpload extends request { + constructor(props) { + // 调用实现父类的构造函数 + super(props); + } + //七牛云上传图片 + async qnImgUpload(options = {}) { + let files; + try { + files = await chooseImage(options); + // 选择完成回调 + options.onSelectComplete && options.onSelectComplete(files); + } catch (err) { + this.requestError && this.requestError(err); + return Promise.reject(err); + } + if (files) { + return this.qnFileUpload({ + ...options, + files: files + }); + } + } + //七牛云上传视频 + async qnVideoUpload(options = {}) { + let files; + try { + files = await chooseVideo(options); + // 选择完成回调 + options.onSelectComplete && options.onSelectComplete(files); + } catch (err) { + this.requestError && this.requestError(err); + return Promise.reject(err); + } + if (files) { + return this.qnFileUpload({ + ...options, + files: files + }); + } + } + + //七牛云文件上传(支持多张上传) + async qnFileUpload(options = {}) { + let requestInfo; + try { + // 数据合并 + requestInfo = { + ...this.config, + ...options, + header: {}, + method: "FILE" + }; + //请求前回调 + if (this.requestStart) { + let requestStart = this.requestStart(requestInfo); + if (typeof requestStart == "object") { + let changekeys = ["load", "files"]; + changekeys.forEach(key => { + requestInfo[key] = requestStart[key]; + }); + } else { + throw { + errMsg: "【request】请求开始拦截器未通过", + statusCode: 0, + data: requestInfo.data, + method: requestInfo.method, + header: requestInfo.header, + url: requestInfo.url, + } + } + } + let requestResult = await qiniuUpload(requestInfo, this.getQnToken); + return Promise.resolve(requestResult); + } catch (err) { + this.requestError && this.requestError(err); + return Promise.reject(err); + } finally { + this.requestEnd && this.requestEnd(requestInfo); + } + } + //本地服务器图片上传 + async urlImgUpload() { + let options = {}; + if (arguments[0]) { + if (typeof(arguments[0]) == "string") { + options.url = arguments[0]; + } else if (typeof(arguments[0]) == "object") { + options = Object.assign(options, arguments[0]); + } + } + if (arguments[1] && typeof(arguments[1]) == "object") { + options = Object.assign(options, arguments[1]); + } + try { + options.files = await chooseImage(options); + // 选择完成回调 + options.onSelectComplete && options.onSelectComplete(options.files); + } catch (err) { + this.requestError && this.requestError(err); + return Promise.reject(err); + } + if (options.files) { + return this.urlFileUpload(options); + } + } + //本地服务器上传视频 + async urlVideoUpload() { + let options = {}; + if (arguments[0]) { + if (typeof(arguments[0]) == "string") { + options.url = arguments[0]; + } else if (typeof(arguments[0]) == "object") { + options = Object.assign(options, arguments[0]); + } + } + if (arguments[1] && typeof(arguments[1]) == "object") { + options = Object.assign(options, arguments[1]); + } + try { + options.files = await chooseVideo(options); + // 选择完成回调 + options.onSelectComplete && options.onSelectComplete(options.files); + } catch (err) { + this.requestError && this.requestError(err); + return Promise.reject(err); + } + if (options.files) { + return this.urlFileUpload(options); + } + } + //本地服务器文件上传方法 + async urlFileUpload() { + let requestInfo = { + method: "FILE" + }; + if (arguments[0]) { + if (typeof(arguments[0]) == "string") { + requestInfo.url = arguments[0]; + } else if (typeof(arguments[0]) == "object") { + requestInfo = Object.assign(requestInfo, arguments[0]); + } + } + if (arguments[1] && typeof(arguments[1]) == "object") { + requestInfo = Object.assign(requestInfo, arguments[1]); + } + if (!requestInfo.url && this.defaultUploadUrl) { + requestInfo.url = this.defaultUploadUrl; + } + // 请求数据 + // 是否运行过请求开始钩子 + let runRequestStart = false; + try { + if (!requestInfo.url) { + throw { + errMsg: "【request】文件上传缺失数据url", + statusCode: 0, + data: requestInfo.data, + method: requestInfo.method, + header: requestInfo.header, + url: requestInfo.url, + } + } + // 数据合并 + requestInfo = mergeConfig(this, requestInfo); + // 代表之前运行到这里 + runRequestStart = true; + //请求前回调 + if (this.requestStart) { + let requestStart = this.requestStart(requestInfo); + if (typeof requestStart == "object") { + let changekeys = ["data", "header", "isPrompt", "load", "isFactory", "files"]; + changekeys.forEach(key => { + requestInfo[key] = requestStart[key]; + }); + } else { + throw { + errMsg: "【request】请求开始拦截器未通过", + statusCode: 0, + data: requestInfo.data, + method: requestInfo.method, + header: requestInfo.header, + url: requestInfo.url, + } + } + } + let requestResult = await urlUpload(requestInfo, this.dataFactory); + return Promise.resolve(requestResult); + } catch (err) { + this.requestError && this.requestError(err); + return Promise.reject(err); + } finally { + if (runRequestStart) { + this.requestEnd && this.requestEnd(requestInfo); + } + } + } +} diff --git a/js_sdk/zhouWei-request/request/upload/utils.js b/js_sdk/zhouWei-request/request/upload/utils.js new file mode 100644 index 0000000..359d9c2 --- /dev/null +++ b/js_sdk/zhouWei-request/request/upload/utils.js @@ -0,0 +1,288 @@ +const qiniuUploader = require("./qiniuUploader"); +//七牛云上传文件命名 +export const randomChar = function(l, url = "") { + const x = "0123456789qwertyuioplkjhgfdsazxcvbnm"; + let tmp = ""; + let time = new Date(); + for (let i = 0; i < l; i++) { + tmp += x.charAt(Math.ceil(Math.random() * 100000000) % x.length); + } + return ( + "file/" + + url + + time.getTime() + + tmp + ); +} +//图片选择 +export const chooseImage = function(data) { + return new Promise((resolve, reject) => { + uni.chooseImage({ + count: data.count || 9, //默认9 + sizeType: data.sizeType || ['original', 'compressed'], //可以指定是原图还是压缩图,默认二者都有 + sourceType: data.sourceType || ['album', 'camera'], //从相册选择 + success: function(res) { + resolve(res.tempFiles); + }, + fail: err => { + reject({ + errMsg: err.errMsg, + errCode: err.errCode, + statusCode: 0, + }); + } + }); + }); +} +//视频选择 +export const chooseVideo = function(data) { + return new Promise((resolve, reject) => { + uni.chooseVideo({ + sourceType: data.sourceType || ['album', 'camera'], //从相册选择 + compressed: data.compressed || false, //是否压缩所选的视频源文件,默认值为 true,需要压缩。 + maxDuration: data.maxDuration || 60, //拍摄视频最长拍摄时间,单位秒。最长支持 60 秒。 + camera: data.camera || 'back', //'front'、'back',默认'back' + success: function(res) { + let files = [{ + path: res.tempFilePath + }]; + // #ifdef APP-PLUS || H5 || MP-WEIXIN + files[0].duration = res.duration; + files[0].size = res.size; + files[0].height = res.height; + files[0].width = res.width; + // #endif + // #ifdef H5 + files[0].name = res.name; + // #endif + resolve(files); + }, + fail: err => { + reject({ + errMsg: err.errMsg, + errCode: err.errCode, + statusCode: 0, + }); + } + }); + }); +} +// 七牛云上传 +export const qiniuUpload = function(requestInfo, getQnToken) { + return new Promise((resolve, reject) => { + if (Array.isArray(requestInfo.files)) { + let len = requestInfo.files.length; + let fileList = new Array; + if (getQnToken) { + getQnToken(qnRes => { + /* + *接口返回参数: + *visitPrefix:访问文件的域名 + *token:七牛云上传token + *folderPath:上传的文件夹 + *region: 地区 默认为:SCN + */ + let prefixLen = qnRes.visitPrefix.length; + if(qnRes.visitPrefix.charAt(prefixLen - 1) == '/'){ + qnRes.visitPrefix = qnRes.visitPrefix.substring(0, prefixLen - 1) + } + uploadFile(0); + + function uploadFile(i) { + let item = requestInfo.files[i]; + let updateUrl = randomChar(10, qnRes.folderPath); + let fileData = { + fileIndex: i, + files: requestInfo.files, + ...item + }; + if (item.name) { + fileData.name = item.name; + let nameArr = item.name.split("."); + updateUrl += "." + nameArr[nameArr.length - 1]; + } + // 交给七牛上传 + qiniuUploader.upload(item.path || item, (res) => { + fileData.url = res.imageURL; + requestInfo.onEachUpdate && requestInfo.onEachUpdate({ + url: res.imageURL, + ...fileData + }); + fileList.push(res.imageURL); + if (len - 1 > i) { + uploadFile(i + 1); + } else { + resolve(fileList); + } + }, (error) => { + reject(error); + }, { + region: qnRes.region || 'SCN', //地区 + domain: qnRes.visitPrefix, // bucket 域名,下载资源时用到。 + key: updateUrl, + uptoken: qnRes.token, // 由其他程序生成七牛 uptoken + uptokenURL: 'UpTokenURL.com/uptoken' // 上传地址 + }, (res) => { + console.log(requestInfo); + requestInfo.onProgressUpdate && requestInfo.onProgressUpdate(Object.assign({}, fileData, res)); + // console.log('上传进度', res.progress) + // console.log('已经上传的数据长度', res.totalBytesSent) + // console.log('预期需要上传的数据总长度', res.totalBytesExpectedToSend) + }); + } + }); + } else { + reject({ + errMsg: "请添加七牛云回调方法:getQnToken", + statusCode: 0 + }); + } + } else { + reject({ + errMsg: "files 必须是数组类型", + statusCode: 0 + }); + }; + }); +} +// 服务器URL上传 +export const urlUpload = function(requestInfo, dataFactory) { + return new Promise((resolve, reject) => { + // 本地文件上传去掉默认Content-Type + if (requestInfo.header['Content-Type']) { + delete requestInfo.header['Content-Type']; + } + // 本地文件上传去掉默认Content-Type + if (requestInfo.header['content-type']) { + delete requestInfo.header['content-type']; + } + if (Array.isArray(requestInfo.files)) { + // #ifdef APP-PLUS || H5 + let files = []; + let fileData = { + files: requestInfo.files, + name: requestInfo.name || "file" + }; + requestInfo.files.forEach(item => { + let fileInfo = { + name: requestInfo.name || "file", + }; + if(item.path){ + fileInfo.uri = item.path; + } else { + fileInfo.file = item; + } + files.push(fileInfo); + }); + let config = { + url: requestInfo.url, + files: files, + header: requestInfo.header, //加入请求头 + success: (response) => { + //是否用外部的数据处理方法 + if (requestInfo.isFactory && dataFactory) { + //数据处理 + dataFactory({ + ...requestInfo, + response: response, + }).then(data => { + requestInfo.onEachUpdate && requestInfo.onEachUpdate({ + data: data, + ...fileData + }); + resolve(data); + },err => { + reject(err); + }); + } else { + requestInfo.onEachUpdate && requestInfo.onEachUpdate({ + data: response, + ...fileData + }); + resolve(response); + } + }, + fail: (err) => { + reject(err); + } + }; + if (requestInfo.data) { + config.formData = requestInfo.data; + } + const uploadTask = uni.uploadFile(config); + uploadTask.onProgressUpdate(res => { + requestInfo.onProgressUpdate && requestInfo.onProgressUpdate(Object.assign({}, fileData, res)); + }); + // #endif + // #ifdef MP + const len = requestInfo.files.length - 1; + let fileList = new Array; + fileUpload(0); + + function fileUpload(i) { + let item = requestInfo.files[i]; + let fileData = { + fileIndex: i, + files: requestInfo.files, + ...item + }; + let config = { + url: requestInfo.url, + filePath: item.path, + header: requestInfo.header, //加入请求头 + name: requestInfo.name || "file", + success: (response) => { + //是否用外部的数据处理方法 + if (requestInfo.isFactory && dataFactory) { + //数据处理 + dataFactory({ + ...requestInfo, + response: response, + }).then(data => { + fileList.push(data); + requestInfo.onEachUpdate && requestInfo.onEachUpdate({ + data: data, + ...fileData + }); + if (len <= i) { + resolve(fileList); + } else { + fileUpload(i + 1); + } + },err => { + reject(err); + }); + } else { + requestInfo.onEachUpdate && requestInfo.onEachUpdate({ + data: response, + ...fileData + }); + fileList.push(response); + if (len <= i) { + resolve(fileList); + } else { + fileUpload(i + 1); + } + } + }, + fail: (err) => { + reject(err); + } + }; + if (requestInfo.data) { + config.formData = requestInfo.data; + } + const uploadTask = uni.uploadFile(config); + uploadTask.onProgressUpdate(res => { + requestInfo.onProgressUpdate && requestInfo.onProgressUpdate(Object.assign({}, fileData, res)); + }); + } + // #endif + } else { + reject({ + errMsg: "files 必须是数组类型", + statusCode: 0 + }); + } + }); +} diff --git a/js_sdk/zhouWei-request/requestConfig.js b/js_sdk/zhouWei-request/requestConfig.js new file mode 100644 index 0000000..3064050 --- /dev/null +++ b/js_sdk/zhouWei-request/requestConfig.js @@ -0,0 +1,179 @@ +import request from "./request"; +// 上传文件和个人头像需要单独改 +// 全局配置的请求域名 +let baseUrl = "https://www.feifanhitech.com"; +// 职站appid: wx77a8a2a23138998b +// 大庆appid: wx094657cb56f4dc70 +// let baseUrl = "https://test.feifanhitech.com"; + +//可以new多个request来支持多个域名请求 +let $http = new request({ + //接口请求地址 + baseUrl: baseUrl, + //服务器本地上传文件地址 + fileUrl: baseUrl, + // 服务器上传图片默认url + defaultUploadUrl: "api/common/v1/upload_image", + //设置请求头(如果使用报错跨域问题,可能是content-type请求类型和后台那边设置的不一致) + header: { + 'content-type': 'application/json;charset=UTF-8' + }, + // 请求超时时间(默认6000) + timeout: 6000, + // 默认配置(可不写) + config: { + // 是否自动提示错误 + isPrompt: true, + // 是否显示加载动画 + load: true, + // 是否使用数据工厂 + isFactory: true + } +}); + +// 添加获取七牛云token的方法 +// $http.getQnToken = function(callback){ +// //该地址需要开发者自行配置(每个后台的接口风格都不一样) +// $http.get("api/kemean/aid/qn_upload").then(data => { +// /* +// *接口返回参数: +// *visitPrefix:访问文件的域名 +// *token:七牛云上传token +// *folderPath:上传的文件夹 +// *region: 地区 默认为:SCN +// */ +// callback({ +// visitPrefix: data.visitPrefix, +// token: data.token, +// folderPath: data.folderPath, +// region: "SCN" +// }); +// }); +// } + +//当前接口请求数 +let requestNum = 0; +//请求开始拦截器 +$http.requestStart = function(options) { + if (options.load) { + if (requestNum <= 0) { + //打开加载动画 + uni.showLoading({ + title: '加载中', + mask: true + }); + } + requestNum += 1; + } + // 图片上传大小限制 + if (options.method == "FILE" && options.maxSize) { + // 文件最大字节: options.maxSize 可以在调用方法的时候加入参数 + const maxSize = options.maxSize; + for (let item of options.files) { + if (item.size > maxSize) { + setTimeout(() => { + uni.showToast({ + title: "图片过大,请重新上传", + icon: "none" + }); + }, 500); + return false; + } + } + } + //请求前加入token + options.header['token'] = uni.getStorageSync('token') + return options; // return false 表示请求拦截,不会继续请求 +} +//请求结束 +$http.requestEnd = function(options) { + //判断当前接口是否需要加载动画 + if (options.load) { + requestNum = requestNum - 1; + if (requestNum <= 0) { + uni.hideLoading(); + } + } +} +//登录弹窗次数 +let loginPopupNum = 0; +//所有接口数据处理(可在接口里设置不调用此方法) +//此方法需要开发者根据各自的接口返回类型修改,以下只是模板 +$http.dataFactory = async function(res) { + if (res.response.statusCode && res.response.statusCode == 200) { + let httpData = res.response.data; + if (typeof (httpData) == "string") { + httpData = JSON.parse(httpData); + } + /*********以下只是模板(及共参考),需要开发者根据各自的接口返回类型修改*********/ + // console.log(getCurrentPages()[0].$page.fullPath,'当前路由查看'); + //判断数据是否请求成功 + if (httpData.code == 10000) { + // 返回正确的结果(then接受数据) + return Promise.resolve(httpData); + } else if (httpData.code == "401" || httpData.code == 401) { + // 判断登录失效,进行查询 + uni.removeStorageSync('token') + uni.removeStorageSync('account') + uni.removeStorageSync('headPortaritUrl') + // console.log('在判断401,115行处抛出错误') + // 判断当前是否在登录页触发的登录过期 + if(getCurrentPages()[0].$page.fullPath!=='/pages/user/user') { + uni.showModal({ + title: '登录过期', + content: '请重新进行登录', + confirmText: "去登录", + cancelText: "取消", + success: function (res) { + if (res.confirm) { + uni.switchTab({ + url: "/pages/user/user" + }) + } + } + }); + } + // 返回错误的结果(catch接受数据) + return Promise.reject({ + statusCode: 0, + errMsg: "【request】" + (httpData.message) + }); + } else { //其他错误提示 + if (res.isPrompt) { + uni.showToast({ + title: httpData.message, + icon: "none", + duration: 3000 + }); + } + // console.log('145行抛出错误') + // 返回错误的结果(catch接受数据) + return Promise.reject({ + statusCode: 0, + errMsg: "【request】" + (httpData.message), + data:res.response.data + }); + } + } else { + // console.log('154行抛出',res) + // 返回错误的结果(catch接受数据) + return Promise.reject({ + statusCode: res.response.statusCode, + errMsg: "【request】数据工厂验证不通过", + data:res.response.data, + }); + } +}; +// 错误回调 +$http.requestError = function (e) { + // e.statusCode === 0 是参数效验错误抛出的 + if (e.statusCode === 0) { + throw e; + } else { + uni.showToast({ + title: e.data.message, + icon: "none" + }); + } +} +export default $http; diff --git a/main.js b/main.js new file mode 100644 index 0000000..9951965 --- /dev/null +++ b/main.js @@ -0,0 +1,30 @@ +import Vue from 'vue' +import App from './App' +import cuCustom from 'colorui/components/cu-custom.vue' +import MescrollBody from "@/components/mescroll-uni/mescroll-body.vue" +import MescrollUni from "@/components/mescroll-uni/mescroll-uni.vue" +import {goto,back} from "@/util/util.js" +import core from '@/util/core.js' +import '@/plugins/utils' +// 接口请求 +import $http from '@/js_sdk/zhouWei-request/requestConfig'; +// 取得链接 +Vue.prototype.baseUrl = $http.baseUrl +Vue.prototype.$http = $http; + +Vue.prototype.goto = goto;// 前往某页 +Vue.prototype.back = back;// 返回上一页 +Vue.component('mescroll-body', MescrollBody) +Vue.component('mescroll-uni', MescrollUni) + +Vue.prototype.core = core + +Vue.component('cu-custom',cuCustom) +Vue.config.productionTip = false + +App.mpType = 'app' + +const app = new Vue({ + ...App +}) +app.$mount() diff --git a/manifest.json b/manifest.json new file mode 100644 index 0000000..51fc8c8 --- /dev/null +++ b/manifest.json @@ -0,0 +1,88 @@ +{ + "name" : "大庆小程序", + "appid" : "__UNI__EB9AA47", + "description" : "", + "versionName" : "1.0.0", + "versionCode" : "100", + "transformPx" : true, + /* 5+App特有相关 */ + "app-plus" : { + "usingComponents" : true, + "nvueCompiler" : "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" : "wx77a8a2a23138998b", + "setting" : { + "urlCheck" : false, + "es6" : true, + "minified" : true + }, + "usingComponents" : true, + "uniStatistics" : { + "enable" : true + }, + // 分包优化打开 + "optimization" : { + "subpackages" : true + }, + "permission" : {} + }, + "mp-alipay" : { + "usingComponents" : true + }, + "mp-baidu" : { + "usingComponents" : true + }, + "mp-toutiao" : { + "usingComponents" : true + }, + "uniStatistics" : { + "enable" : false + } +} diff --git a/node_modules/async-validator/LICENSE.md b/node_modules/async-validator/LICENSE.md new file mode 100644 index 0000000..1f5a0d9 --- /dev/null +++ b/node_modules/async-validator/LICENSE.md @@ -0,0 +1,9 @@ +The MIT License (MIT) + +Copyright (c) 2014-present yiminghe + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/async-validator/README.md b/node_modules/async-validator/README.md new file mode 100644 index 0000000..2900926 --- /dev/null +++ b/node_modules/async-validator/README.md @@ -0,0 +1,462 @@ +# async-validator + +[![NPM version][npm-image]][npm-url] +[![build status][travis-image]][travis-url] +[![Test coverage][coveralls-image]][coveralls-url] +[![node version][node-image]][node-url] +[![npm download][download-image]][download-url] +[![npm bundle size (minified + gzip)][bundlesize-image]][bundlesize-url] + +[npm-image]: https://img.shields.io/npm/v/async-validator.svg?style=flat-square +[npm-url]: https://npmjs.org/package/async-validator +[travis-image]: https://img.shields.io/travis/yiminghe/async-validator.svg?style=flat-square +[travis-url]: https://travis-ci.org/yiminghe/async-validator +[coveralls-image]: https://img.shields.io/coveralls/yiminghe/async-validator.svg?style=flat-square +[coveralls-url]: https://coveralls.io/r/yiminghe/async-validator?branch=master +[node-image]: https://img.shields.io/badge/node.js-%3E=4.0.0-green.svg?style=flat-square +[node-url]: https://nodejs.org/download/ +[download-image]: https://img.shields.io/npm/dm/async-validator.svg?style=flat-square +[download-url]: https://npmjs.org/package/async-validator +[bundlesize-image]: https://img.shields.io/bundlephobia/minzip/async-validator.svg?label=gzip%20size +[bundlesize-url]: https://bundlephobia.com/result?p=async-validator + +Validate form asynchronous. A variation of https://github.com/freeformsystems/async-validate + +## Install + +```bash +npm i async-validator +``` + +## Usage + +Basic usage involves defining a descriptor, assigning it to a schema and passing the object to be validated and a callback function to the `validate` method of the schema: + +```js +import Schema from 'async-validator'; +const descriptor = { + name: { + type: 'string', + required: true, + validator: (rule, value) => value === 'muji', + }, + age: { + type: 'number', + asyncValidator: (rule, value) => { + return new Promise((resolve, reject) => { + if (value < 18) { + reject('too young'); // reject with error message + } else { + resolve(); + } + }); + }, + }, +}; +const validator = new Schema(descriptor); +validator.validate({ name: 'muji' }, (errors, fields) => { + if (errors) { + // validation failed, errors is an array of all errors + // fields is an object keyed by field name with an array of + // errors per field + return handleErrors(errors, fields); + } + // validation passed +}); + +// PROMISE USAGE +validator.validate({ name: 'muji', age: 16 }).then(() => { + // validation passed or without error message +}).catch(({ errors, fields }) => { + return handleErrors(errors, fields); +}); +``` + +## API + +### Validate + +```js +function(source, [options], callback): Promise +``` + +* `source`: The object to validate (required). +* `options`: An object describing processing options for the validation (optional). +* `callback`: A callback function to invoke when validation completes (required). + +The method will return a Promise object like: +* `then()`,validation passed +* `catch({ errors, fields })`,validation failed, errors is an array of all errors, fields is an object keyed by field name with an array of + +### Options + +* `suppressWarning`: Boolean, whether to suppress internal warning about invalid value. + +* `first`: Boolean, Invoke `callback` when the first validation rule generates an error, +no more validation rules are processed. +If your validation involves multiple asynchronous calls (for example, database queries) and you only need the first error use this option. + +* `firstFields`: Boolean|String[], Invoke `callback` when the first validation rule of the specified field generates an error, +no more validation rules of the same field are processed. `true` means all fields. + +### Rules + +Rules may be functions that perform validation. + +```js +function(rule, value, callback, source, options) +``` + +* `rule`: The validation rule in the source descriptor that corresponds to the field name being validated. It is always assigned a `field` property with the name of the field being validated. +* `value`: The value of the source object property being validated. +* `callback`: A callback function to invoke once validation is complete. It expects to be passed an array of `Error` instances to indicate validation failure. If the check is synchronous, you can directly return a ` false ` or ` Error ` or ` Error Array `. +* `source`: The source object that was passed to the `validate` method. +* `options`: Additional options. +* `options.messages`: The object containing validation error messages, will be deep merged with defaultMessages. + +The options passed to `validate` or `asyncValidate` are passed on to the validation functions so that you may reference transient data (such as model references) in validation functions. However, some option names are reserved; if you use these properties of the options object they are overwritten. The reserved properties are `messages`, `exception` and `error`. + +```js +import Schema from 'async-validator'; +const descriptor = { + name(rule, value, callback, source, options) { + const errors = []; + if (!/^[a-z0-9]+$/.test(value)) { + errors.push(new Error( + util.format('%s must be lowercase alphanumeric characters', rule.field), + )); + } + return errors; + }, +}; +const validator = new Schema(descriptor); +validator.validate({ name: 'Firstname' }, (errors, fields) => { + if (errors) { + return handleErrors(errors, fields); + } + // validation passed +}); +``` + +It is often useful to test against multiple validation rules for a single field, to do so make the rule an array of objects, for example: + +```js +const descriptor = { + email: [ + { type: 'string', required: true, pattern: Schema.pattern.email }, + { + validator(rule, value, callback, source, options) { + const errors = []; + // test if email address already exists in a database + // and add a validation error to the errors array if it does + return errors; + }, + }, + ], +}; +``` + +#### Type + +Indicates the `type` of validator to use. Recognised type values are: + +* `string`: Must be of type `string`. `This is the default type.` +* `number`: Must be of type `number`. +* `boolean`: Must be of type `boolean`. +* `method`: Must be of type `function`. +* `regexp`: Must be an instance of `RegExp` or a string that does not generate an exception when creating a new `RegExp`. +* `integer`: Must be of type `number` and an integer. +* `float`: Must be of type `number` and a floating point number. +* `array`: Must be an array as determined by `Array.isArray`. +* `object`: Must be of type `object` and not `Array.isArray`. +* `enum`: Value must exist in the `enum`. +* `date`: Value must be valid as determined by `Date` +* `url`: Must be of type `url`. +* `hex`: Must be of type `hex`. +* `email`: Must be of type `email`. +* `any`: Can be any type. + +#### Required + +The `required` rule property indicates that the field must exist on the source object being validated. + +#### Pattern + +The `pattern` rule property indicates a regular expression that the value must match to pass validation. + +#### Range + +A range is defined using the `min` and `max` properties. For `string` and `array` types comparison is performed against the `length`, for `number` types the number must not be less than `min` nor greater than `max`. + +#### Length + +To validate an exact length of a field specify the `len` property. For `string` and `array` types comparison is performed on the `length` property, for the `number` type this property indicates an exact match for the `number`, ie, it may only be strictly equal to `len`. + +If the `len` property is combined with the `min` and `max` range properties, `len` takes precedence. + +#### Enumerable + +> Since version 3.0.0 if you want to validate the values `0` or `false` inside `enum` types, you have to include them explicitly. + +To validate a value from a list of possible values use the `enum` type with a `enum` property listing the valid values for the field, for example: + +```js +const descriptor = { + role: { type: 'enum', enum: ['admin', 'user', 'guest'] }, +}; +``` + +#### Whitespace + +It is typical to treat required fields that only contain whitespace as errors. To add an additional test for a string that consists solely of whitespace add a `whitespace` property to a rule with a value of `true`. The rule must be a `string` type. + +You may wish to sanitize user input instead of testing for whitespace, see [transform](#transform) for an example that would allow you to strip whitespace. + + +#### Deep Rules + +If you need to validate deep object properties you may do so for validation rules that are of the `object` or `array` type by assigning nested rules to a `fields` property of the rule. + +```js +const descriptor = { + address: { + type: 'object', + required: true, + fields: { + street: { type: 'string', required: true }, + city: { type: 'string', required: true }, + zip: { type: 'string', required: true, len: 8, message: 'invalid zip' }, + }, + }, + name: { type: 'string', required: true }, +}; +const validator = new Schema(descriptor); +validator.validate({ address: {} }, (errors, fields) => { + // errors for address.street, address.city, address.zip +}); +``` + +Note that if you do not specify the `required` property on the parent rule it is perfectly valid for the field not to be declared on the source object and the deep validation rules will not be executed as there is nothing to validate against. + +Deep rule validation creates a schema for the nested rules so you can also specify the `options` passed to the `schema.validate()` method. + +```js +const descriptor = { + address: { + type: 'object', + required: true, + options: { first: true }, + fields: { + street: { type: 'string', required: true }, + city: { type: 'string', required: true }, + zip: { type: 'string', required: true, len: 8, message: 'invalid zip' }, + }, + }, + name: { type: 'string', required: true }, +}; +const validator = new Schema(descriptor); + +validator.validate({ address: {} }) + .catch(({ errors, fields }) => { + // now only errors for street and name + }); +``` + +The parent rule is also validated so if you have a set of rules such as: + +```js +const descriptor = { + roles: { + type: 'array', + required: true, + len: 3, + fields: { + 0: { type: 'string', required: true }, + 1: { type: 'string', required: true }, + 2: { type: 'string', required: true }, + }, + }, +}; +``` + +And supply a source object of `{ roles: ['admin', 'user'] }` then two errors will be created. One for the array length mismatch and one for the missing required array entry at index 2. + +#### defaultField + +The `defaultField` property can be used with the `array` or `object` type for validating all values of the container. +It may be an `object` or `array` containing validation rules. For example: + +```js +const descriptor = { + urls: { + type: 'array', + required: true, + defaultField: { type: 'url' }, + }, +}; +``` + +Note that `defaultField` is expanded to `fields`, see [deep rules](#deep-rules). + +#### Transform + +Sometimes it is necessary to transform a value before validation, possibly to coerce the value or to sanitize it in some way. To do this add a `transform` function to the validation rule. The property is transformed prior to validation and re-assigned to the source object to mutate the value of the property in place. + +```js +import Schema from 'async-validator'; +const descriptor = { + name: { + type: 'string', + required: true, + pattern: /^[a-z]+$/, + transform(value) { + return value.trim(); + }, + }, +}; +const validator = new Schema(descriptor); +const source = { name: ' user ' }; +validator.validate(source) + .then(() => assert.equal(source.name, 'user')); +``` + +Without the `transform` function validation would fail due to the pattern not matching as the input contains leading and trailing whitespace, but by adding the transform function validation passes and the field value is sanitized at the same time. + + +#### Messages + +Depending upon your application requirements, you may need i18n support or you may prefer different validation error messages. + +The easiest way to achieve this is to assign a `message` to a rule: + +```js +{ name: { type: 'string', required: true, message: 'Name is required' } } +``` + +Message can be any type, such as jsx format. + +```js +{ name: { type: 'string', required: true, message: 'Name is required' } } +``` + +Message can also be a function, e.g. if you use vue-i18n: +```js +{ name: { type: 'string', required: true, message: () => this.$t( 'name is required' ) } } +``` + +Potentially you may require the same schema validation rules for different languages, in which case duplicating the schema rules for each language does not make sense. + +In this scenario you could just provide your own messages for the language and assign it to the schema: + +```js +import Schema from 'async-validator'; +const cn = { + required: '%s 必填', +}; +const descriptor = { name: { type: 'string', required: true } }; +const validator = new Schema(descriptor); +// deep merge with defaultMessages +validator.messages(cn); +... +``` + +If you are defining your own validation functions it is better practice to assign the message strings to a messages object and then access the messages via the `options.messages` property within the validation function. + +#### asyncValidator + +You can customize the asynchronous validation function for the specified field: + +```js +const fields = { + asyncField: { + asyncValidator(rule, value, callback) { + ajax({ + url: 'xx', + value: value, + }).then(function(data) { + callback(); + }, function(error) { + callback(new Error(error)); + }); + }, + }, + + promiseField: { + asyncValidator(rule, value) { + return ajax({ + url: 'xx', + value: value, + }); + }, + }, +}; +``` + +#### validator + +You can custom validate function for specified field: + +```js +const fields = { + field: { + validator(rule, value, callback) { + return value === 'test'; + }, + message: 'Value is not equal to "test".', + }, + + field2: { + validator(rule, value, callback) { + return new Error(`${value} is not equal to 'test'.`); + }, + }, + + arrField: { + validator(rule, value) { + return [ + new Error('Message 1'), + new Error('Message 2'), + ]; + }, + }, +}; +``` + +## FAQ + +### How to avoid warning + +```js +import Schema from 'async-validator'; +Schema.warning = function(){}; +``` + +### How to check if it is `true` + +Use `enum` type passing `true` as option. + +```js +{ + type: 'enum', + enum: [true], + message: '', +} +``` + +## Test Case + +```bash +npm test +``` + +## Coverage + +```bash +npm run coverage +``` + +Open coverage/ dir + +## License + +Everything is [MIT](https://en.wikipedia.org/wiki/MIT_License). diff --git a/node_modules/async-validator/dist-node/index.js b/node_modules/async-validator/dist-node/index.js new file mode 100644 index 0000000..e7836f7 --- /dev/null +++ b/node_modules/async-validator/dist-node/index.js @@ -0,0 +1,1444 @@ +'use strict'; + +Object.defineProperty(exports, '__esModule', { value: true }); + +function _extends() { + _extends = Object.assign || function (target) { + for (var i = 1; i < arguments.length; i++) { + var source = arguments[i]; + + for (var key in source) { + if (Object.prototype.hasOwnProperty.call(source, key)) { + target[key] = source[key]; + } + } + } + + return target; + }; + + return _extends.apply(this, arguments); +} + +function _inheritsLoose(subClass, superClass) { + subClass.prototype = Object.create(superClass.prototype); + subClass.prototype.constructor = subClass; + subClass.__proto__ = superClass; +} + +function _getPrototypeOf(o) { + _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { + return o.__proto__ || Object.getPrototypeOf(o); + }; + return _getPrototypeOf(o); +} + +function _setPrototypeOf(o, p) { + _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { + o.__proto__ = p; + return o; + }; + + return _setPrototypeOf(o, p); +} + +function _isNativeReflectConstruct() { + if (typeof Reflect === "undefined" || !Reflect.construct) return false; + if (Reflect.construct.sham) return false; + if (typeof Proxy === "function") return true; + + try { + Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); + return true; + } catch (e) { + return false; + } +} + +function _construct(Parent, args, Class) { + if (_isNativeReflectConstruct()) { + _construct = Reflect.construct; + } else { + _construct = function _construct(Parent, args, Class) { + var a = [null]; + a.push.apply(a, args); + var Constructor = Function.bind.apply(Parent, a); + var instance = new Constructor(); + if (Class) _setPrototypeOf(instance, Class.prototype); + return instance; + }; + } + + return _construct.apply(null, arguments); +} + +function _isNativeFunction(fn) { + return Function.toString.call(fn).indexOf("[native code]") !== -1; +} + +function _wrapNativeSuper(Class) { + var _cache = typeof Map === "function" ? new Map() : undefined; + + _wrapNativeSuper = function _wrapNativeSuper(Class) { + if (Class === null || !_isNativeFunction(Class)) return Class; + + if (typeof Class !== "function") { + throw new TypeError("Super expression must either be null or a function"); + } + + if (typeof _cache !== "undefined") { + if (_cache.has(Class)) return _cache.get(Class); + + _cache.set(Class, Wrapper); + } + + function Wrapper() { + return _construct(Class, arguments, _getPrototypeOf(this).constructor); + } + + Wrapper.prototype = Object.create(Class.prototype, { + constructor: { + value: Wrapper, + enumerable: false, + writable: true, + configurable: true + } + }); + return _setPrototypeOf(Wrapper, Class); + }; + + return _wrapNativeSuper(Class); +} + +/* eslint no-console:0 */ +var formatRegExp = /%[sdj%]/g; +var warning = function warning() {}; // don't print warning message when in production env or node runtime + +if (typeof process !== 'undefined' && process.env && process.env.NODE_ENV !== 'production' && typeof window !== 'undefined' && typeof document !== 'undefined') { + warning = function warning(type, errors) { + if (typeof console !== 'undefined' && console.warn) { + if (errors.every(function (e) { + return typeof e === 'string'; + })) { + console.warn(type, errors); + } + } + }; +} + +function convertFieldsError(errors) { + if (!errors || !errors.length) return null; + var fields = {}; + errors.forEach(function (error) { + var field = error.field; + fields[field] = fields[field] || []; + fields[field].push(error); + }); + return fields; +} +function format() { + for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) { + args[_key] = arguments[_key]; + } + + var i = 1; + var f = args[0]; + var len = args.length; + + if (typeof f === 'function') { + return f.apply(null, args.slice(1)); + } + + if (typeof f === 'string') { + var str = String(f).replace(formatRegExp, function (x) { + if (x === '%%') { + return '%'; + } + + if (i >= len) { + return x; + } + + switch (x) { + case '%s': + return String(args[i++]); + + case '%d': + return Number(args[i++]); + + case '%j': + try { + return JSON.stringify(args[i++]); + } catch (_) { + return '[Circular]'; + } + + break; + + default: + return x; + } + }); + return str; + } + + return f; +} + +function isNativeStringType(type) { + return type === 'string' || type === 'url' || type === 'hex' || type === 'email' || type === 'date' || type === 'pattern'; +} + +function isEmptyValue(value, type) { + if (value === undefined || value === null) { + return true; + } + + if (type === 'array' && Array.isArray(value) && !value.length) { + return true; + } + + if (isNativeStringType(type) && typeof value === 'string' && !value) { + return true; + } + + return false; +} + +function asyncParallelArray(arr, func, callback) { + var results = []; + var total = 0; + var arrLength = arr.length; + + function count(errors) { + results.push.apply(results, errors); + total++; + + if (total === arrLength) { + callback(results); + } + } + + arr.forEach(function (a) { + func(a, count); + }); +} + +function asyncSerialArray(arr, func, callback) { + var index = 0; + var arrLength = arr.length; + + function next(errors) { + if (errors && errors.length) { + callback(errors); + return; + } + + var original = index; + index = index + 1; + + if (original < arrLength) { + func(arr[original], next); + } else { + callback([]); + } + } + + next([]); +} + +function flattenObjArr(objArr) { + var ret = []; + Object.keys(objArr).forEach(function (k) { + ret.push.apply(ret, objArr[k]); + }); + return ret; +} + +var AsyncValidationError = /*#__PURE__*/function (_Error) { + _inheritsLoose(AsyncValidationError, _Error); + + function AsyncValidationError(errors, fields) { + var _this; + + _this = _Error.call(this, 'Async Validation Error') || this; + _this.errors = errors; + _this.fields = fields; + return _this; + } + + return AsyncValidationError; +}( /*#__PURE__*/_wrapNativeSuper(Error)); +function asyncMap(objArr, option, func, callback) { + if (option.first) { + var _pending = new Promise(function (resolve, reject) { + var next = function next(errors) { + callback(errors); + return errors.length ? reject(new AsyncValidationError(errors, convertFieldsError(errors))) : resolve(); + }; + + var flattenArr = flattenObjArr(objArr); + asyncSerialArray(flattenArr, func, next); + }); + + _pending["catch"](function (e) { + return e; + }); + + return _pending; + } + + var firstFields = option.firstFields || []; + + if (firstFields === true) { + firstFields = Object.keys(objArr); + } + + var objArrKeys = Object.keys(objArr); + var objArrLength = objArrKeys.length; + var total = 0; + var results = []; + var pending = new Promise(function (resolve, reject) { + var next = function next(errors) { + results.push.apply(results, errors); + total++; + + if (total === objArrLength) { + callback(results); + return results.length ? reject(new AsyncValidationError(results, convertFieldsError(results))) : resolve(); + } + }; + + if (!objArrKeys.length) { + callback(results); + resolve(); + } + + objArrKeys.forEach(function (key) { + var arr = objArr[key]; + + if (firstFields.indexOf(key) !== -1) { + asyncSerialArray(arr, func, next); + } else { + asyncParallelArray(arr, func, next); + } + }); + }); + pending["catch"](function (e) { + return e; + }); + return pending; +} +function complementError(rule) { + return function (oe) { + if (oe && oe.message) { + oe.field = oe.field || rule.fullField; + return oe; + } + + return { + message: typeof oe === 'function' ? oe() : oe, + field: oe.field || rule.fullField + }; + }; +} +function deepMerge(target, source) { + if (source) { + for (var s in source) { + if (source.hasOwnProperty(s)) { + var value = source[s]; + + if (typeof value === 'object' && typeof target[s] === 'object') { + target[s] = _extends(_extends({}, target[s]), value); + } else { + target[s] = value; + } + } + } + } + + return target; +} + +/** + * Rule for validating required fields. + * + * @param rule The validation rule. + * @param value The value of the field on the source object. + * @param source The source object being validated. + * @param errors An array of errors that this rule may add + * validation errors to. + * @param options The validation options. + * @param options.messages The validation messages. + */ + +function required(rule, value, source, errors, options, type) { + if (rule.required && (!source.hasOwnProperty(rule.field) || isEmptyValue(value, type || rule.type))) { + errors.push(format(options.messages.required, rule.fullField)); + } +} + +/** + * Rule for validating whitespace. + * + * @param rule The validation rule. + * @param value The value of the field on the source object. + * @param source The source object being validated. + * @param errors An array of errors that this rule may add + * validation errors to. + * @param options The validation options. + * @param options.messages The validation messages. + */ + +function whitespace(rule, value, source, errors, options) { + if (/^\s+$/.test(value) || value === '') { + errors.push(format(options.messages.whitespace, rule.fullField)); + } +} + +/* eslint max-len:0 */ + +var pattern = { + // http://emailregex.com/ + email: /^(([^<>()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/, + url: new RegExp("^(?!mailto:)(?:(?:http|https|ftp)://|//)(?:\\S+(?::\\S*)?@)?(?:(?:(?:[1-9]\\d?|1\\d\\d|2[01]\\d|22[0-3])(?:\\.(?:1?\\d{1,2}|2[0-4]\\d|25[0-5])){2}(?:\\.(?:[0-9]\\d?|1\\d\\d|2[0-4]\\d|25[0-4]))|(?:(?:[a-z\\u00a1-\\uffff0-9]+-*)*[a-z\\u00a1-\\uffff0-9]+)(?:\\.(?:[a-z\\u00a1-\\uffff0-9]+-*)*[a-z\\u00a1-\\uffff0-9]+)*(?:\\.(?:[a-z\\u00a1-\\uffff]{2,})))|localhost)(?::\\d{2,5})?(?:(/|\\?|#)[^\\s]*)?$", 'i'), + hex: /^#?([a-f0-9]{6}|[a-f0-9]{3})$/i +}; +var types = { + integer: function integer(value) { + return types.number(value) && parseInt(value, 10) === value; + }, + "float": function float(value) { + return types.number(value) && !types.integer(value); + }, + array: function array(value) { + return Array.isArray(value); + }, + regexp: function regexp(value) { + if (value instanceof RegExp) { + return true; + } + + try { + return !!new RegExp(value); + } catch (e) { + return false; + } + }, + date: function date(value) { + return typeof value.getTime === 'function' && typeof value.getMonth === 'function' && typeof value.getYear === 'function' && !isNaN(value.getTime()); + }, + number: function number(value) { + if (isNaN(value)) { + return false; + } + + return typeof value === 'number'; + }, + object: function object(value) { + return typeof value === 'object' && !types.array(value); + }, + method: function method(value) { + return typeof value === 'function'; + }, + email: function email(value) { + return typeof value === 'string' && !!value.match(pattern.email) && value.length < 255; + }, + url: function url(value) { + return typeof value === 'string' && !!value.match(pattern.url); + }, + hex: function hex(value) { + return typeof value === 'string' && !!value.match(pattern.hex); + } +}; +/** + * Rule for validating the type of a value. + * + * @param rule The validation rule. + * @param value The value of the field on the source object. + * @param source The source object being validated. + * @param errors An array of errors that this rule may add + * validation errors to. + * @param options The validation options. + * @param options.messages The validation messages. + */ + +function type(rule, value, source, errors, options) { + if (rule.required && value === undefined) { + required(rule, value, source, errors, options); + return; + } + + var custom = ['integer', 'float', 'array', 'regexp', 'object', 'method', 'email', 'number', 'date', 'url', 'hex']; + var ruleType = rule.type; + + if (custom.indexOf(ruleType) > -1) { + if (!types[ruleType](value)) { + errors.push(format(options.messages.types[ruleType], rule.fullField, rule.type)); + } // straight typeof check + + } else if (ruleType && typeof value !== rule.type) { + errors.push(format(options.messages.types[ruleType], rule.fullField, rule.type)); + } +} + +/** + * Rule for validating minimum and maximum allowed values. + * + * @param rule The validation rule. + * @param value The value of the field on the source object. + * @param source The source object being validated. + * @param errors An array of errors that this rule may add + * validation errors to. + * @param options The validation options. + * @param options.messages The validation messages. + */ + +function range(rule, value, source, errors, options) { + var len = typeof rule.len === 'number'; + var min = typeof rule.min === 'number'; + var max = typeof rule.max === 'number'; // 正则匹配码点范围从U+010000一直到U+10FFFF的文字(补充平面Supplementary Plane) + + var spRegexp = /[\uD800-\uDBFF][\uDC00-\uDFFF]/g; + var val = value; + var key = null; + var num = typeof value === 'number'; + var str = typeof value === 'string'; + var arr = Array.isArray(value); + + if (num) { + key = 'number'; + } else if (str) { + key = 'string'; + } else if (arr) { + key = 'array'; + } // if the value is not of a supported type for range validation + // the validation rule rule should use the + // type property to also test for a particular type + + + if (!key) { + return false; + } + + if (arr) { + val = value.length; + } + + if (str) { + // 处理码点大于U+010000的文字length属性不准确的bug,如"𠮷𠮷𠮷".lenght !== 3 + val = value.replace(spRegexp, '_').length; + } + + if (len) { + if (val !== rule.len) { + errors.push(format(options.messages[key].len, rule.fullField, rule.len)); + } + } else if (min && !max && val < rule.min) { + errors.push(format(options.messages[key].min, rule.fullField, rule.min)); + } else if (max && !min && val > rule.max) { + errors.push(format(options.messages[key].max, rule.fullField, rule.max)); + } else if (min && max && (val < rule.min || val > rule.max)) { + errors.push(format(options.messages[key].range, rule.fullField, rule.min, rule.max)); + } +} + +var ENUM = 'enum'; +/** + * Rule for validating a value exists in an enumerable list. + * + * @param rule The validation rule. + * @param value The value of the field on the source object. + * @param source The source object being validated. + * @param errors An array of errors that this rule may add + * validation errors to. + * @param options The validation options. + * @param options.messages The validation messages. + */ + +function enumerable(rule, value, source, errors, options) { + rule[ENUM] = Array.isArray(rule[ENUM]) ? rule[ENUM] : []; + + if (rule[ENUM].indexOf(value) === -1) { + errors.push(format(options.messages[ENUM], rule.fullField, rule[ENUM].join(', '))); + } +} + +/** + * Rule for validating a regular expression pattern. + * + * @param rule The validation rule. + * @param value The value of the field on the source object. + * @param source The source object being validated. + * @param errors An array of errors that this rule may add + * validation errors to. + * @param options The validation options. + * @param options.messages The validation messages. + */ + +function pattern$1(rule, value, source, errors, options) { + if (rule.pattern) { + if (rule.pattern instanceof RegExp) { + // if a RegExp instance is passed, reset `lastIndex` in case its `global` + // flag is accidentally set to `true`, which in a validation scenario + // is not necessary and the result might be misleading + rule.pattern.lastIndex = 0; + + if (!rule.pattern.test(value)) { + errors.push(format(options.messages.pattern.mismatch, rule.fullField, value, rule.pattern)); + } + } else if (typeof rule.pattern === 'string') { + var _pattern = new RegExp(rule.pattern); + + if (!_pattern.test(value)) { + errors.push(format(options.messages.pattern.mismatch, rule.fullField, value, rule.pattern)); + } + } + } +} + +var rules = { + required: required, + whitespace: whitespace, + type: type, + range: range, + "enum": enumerable, + pattern: pattern$1 +}; + +/** + * Performs validation for string types. + * + * @param rule The validation rule. + * @param value The value of the field on the source object. + * @param callback The callback function. + * @param source The source object being validated. + * @param options The validation options. + * @param options.messages The validation messages. + */ + +function string(rule, value, callback, source, options) { + var errors = []; + var validate = rule.required || !rule.required && source.hasOwnProperty(rule.field); + + if (validate) { + if (isEmptyValue(value, 'string') && !rule.required) { + return callback(); + } + + rules.required(rule, value, source, errors, options, 'string'); + + if (!isEmptyValue(value, 'string')) { + rules.type(rule, value, source, errors, options); + rules.range(rule, value, source, errors, options); + rules.pattern(rule, value, source, errors, options); + + if (rule.whitespace === true) { + rules.whitespace(rule, value, source, errors, options); + } + } + } + + callback(errors); +} + +/** + * Validates a function. + * + * @param rule The validation rule. + * @param value The value of the field on the source object. + * @param callback The callback function. + * @param source The source object being validated. + * @param options The validation options. + * @param options.messages The validation messages. + */ + +function method(rule, value, callback, source, options) { + var errors = []; + var validate = rule.required || !rule.required && source.hasOwnProperty(rule.field); + + if (validate) { + if (isEmptyValue(value) && !rule.required) { + return callback(); + } + + rules.required(rule, value, source, errors, options); + + if (value !== undefined) { + rules.type(rule, value, source, errors, options); + } + } + + callback(errors); +} + +/** + * Validates a number. + * + * @param rule The validation rule. + * @param value The value of the field on the source object. + * @param callback The callback function. + * @param source The source object being validated. + * @param options The validation options. + * @param options.messages The validation messages. + */ + +function number(rule, value, callback, source, options) { + var errors = []; + var validate = rule.required || !rule.required && source.hasOwnProperty(rule.field); + + if (validate) { + if (value === '') { + value = undefined; + } + + if (isEmptyValue(value) && !rule.required) { + return callback(); + } + + rules.required(rule, value, source, errors, options); + + if (value !== undefined) { + rules.type(rule, value, source, errors, options); + rules.range(rule, value, source, errors, options); + } + } + + callback(errors); +} + +/** + * Validates a boolean. + * + * @param rule The validation rule. + * @param value The value of the field on the source object. + * @param callback The callback function. + * @param source The source object being validated. + * @param options The validation options. + * @param options.messages The validation messages. + */ + +function _boolean(rule, value, callback, source, options) { + var errors = []; + var validate = rule.required || !rule.required && source.hasOwnProperty(rule.field); + + if (validate) { + if (isEmptyValue(value) && !rule.required) { + return callback(); + } + + rules.required(rule, value, source, errors, options); + + if (value !== undefined) { + rules.type(rule, value, source, errors, options); + } + } + + callback(errors); +} + +/** + * Validates the regular expression type. + * + * @param rule The validation rule. + * @param value The value of the field on the source object. + * @param callback The callback function. + * @param source The source object being validated. + * @param options The validation options. + * @param options.messages The validation messages. + */ + +function regexp(rule, value, callback, source, options) { + var errors = []; + var validate = rule.required || !rule.required && source.hasOwnProperty(rule.field); + + if (validate) { + if (isEmptyValue(value) && !rule.required) { + return callback(); + } + + rules.required(rule, value, source, errors, options); + + if (!isEmptyValue(value)) { + rules.type(rule, value, source, errors, options); + } + } + + callback(errors); +} + +/** + * Validates a number is an integer. + * + * @param rule The validation rule. + * @param value The value of the field on the source object. + * @param callback The callback function. + * @param source The source object being validated. + * @param options The validation options. + * @param options.messages The validation messages. + */ + +function integer(rule, value, callback, source, options) { + var errors = []; + var validate = rule.required || !rule.required && source.hasOwnProperty(rule.field); + + if (validate) { + if (isEmptyValue(value) && !rule.required) { + return callback(); + } + + rules.required(rule, value, source, errors, options); + + if (value !== undefined) { + rules.type(rule, value, source, errors, options); + rules.range(rule, value, source, errors, options); + } + } + + callback(errors); +} + +/** + * Validates a number is a floating point number. + * + * @param rule The validation rule. + * @param value The value of the field on the source object. + * @param callback The callback function. + * @param source The source object being validated. + * @param options The validation options. + * @param options.messages The validation messages. + */ + +function floatFn(rule, value, callback, source, options) { + var errors = []; + var validate = rule.required || !rule.required && source.hasOwnProperty(rule.field); + + if (validate) { + if (isEmptyValue(value) && !rule.required) { + return callback(); + } + + rules.required(rule, value, source, errors, options); + + if (value !== undefined) { + rules.type(rule, value, source, errors, options); + rules.range(rule, value, source, errors, options); + } + } + + callback(errors); +} + +/** + * Validates an array. + * + * @param rule The validation rule. + * @param value The value of the field on the source object. + * @param callback The callback function. + * @param source The source object being validated. + * @param options The validation options. + * @param options.messages The validation messages. + */ + +function array(rule, value, callback, source, options) { + var errors = []; + var validate = rule.required || !rule.required && source.hasOwnProperty(rule.field); + + if (validate) { + if ((value === undefined || value === null) && !rule.required) { + return callback(); + } + + rules.required(rule, value, source, errors, options, 'array'); + + if (value !== undefined && value !== null) { + rules.type(rule, value, source, errors, options); + rules.range(rule, value, source, errors, options); + } + } + + callback(errors); +} + +/** + * Validates an object. + * + * @param rule The validation rule. + * @param value The value of the field on the source object. + * @param callback The callback function. + * @param source The source object being validated. + * @param options The validation options. + * @param options.messages The validation messages. + */ + +function object(rule, value, callback, source, options) { + var errors = []; + var validate = rule.required || !rule.required && source.hasOwnProperty(rule.field); + + if (validate) { + if (isEmptyValue(value) && !rule.required) { + return callback(); + } + + rules.required(rule, value, source, errors, options); + + if (value !== undefined) { + rules.type(rule, value, source, errors, options); + } + } + + callback(errors); +} + +var ENUM$1 = 'enum'; +/** + * Validates an enumerable list. + * + * @param rule The validation rule. + * @param value The value of the field on the source object. + * @param callback The callback function. + * @param source The source object being validated. + * @param options The validation options. + * @param options.messages The validation messages. + */ + +function enumerable$1(rule, value, callback, source, options) { + var errors = []; + var validate = rule.required || !rule.required && source.hasOwnProperty(rule.field); + + if (validate) { + if (isEmptyValue(value) && !rule.required) { + return callback(); + } + + rules.required(rule, value, source, errors, options); + + if (value !== undefined) { + rules[ENUM$1](rule, value, source, errors, options); + } + } + + callback(errors); +} + +/** + * Validates a regular expression pattern. + * + * Performs validation when a rule only contains + * a pattern property but is not declared as a string type. + * + * @param rule The validation rule. + * @param value The value of the field on the source object. + * @param callback The callback function. + * @param source The source object being validated. + * @param options The validation options. + * @param options.messages The validation messages. + */ + +function pattern$2(rule, value, callback, source, options) { + var errors = []; + var validate = rule.required || !rule.required && source.hasOwnProperty(rule.field); + + if (validate) { + if (isEmptyValue(value, 'string') && !rule.required) { + return callback(); + } + + rules.required(rule, value, source, errors, options); + + if (!isEmptyValue(value, 'string')) { + rules.pattern(rule, value, source, errors, options); + } + } + + callback(errors); +} + +function date(rule, value, callback, source, options) { + // console.log('integer rule called %j', rule); + var errors = []; + var validate = rule.required || !rule.required && source.hasOwnProperty(rule.field); // console.log('validate on %s value', value); + + if (validate) { + if (isEmptyValue(value, 'date') && !rule.required) { + return callback(); + } + + rules.required(rule, value, source, errors, options); + + if (!isEmptyValue(value, 'date')) { + var dateObject; + + if (value instanceof Date) { + dateObject = value; + } else { + dateObject = new Date(value); + } + + rules.type(rule, dateObject, source, errors, options); + + if (dateObject) { + rules.range(rule, dateObject.getTime(), source, errors, options); + } + } + } + + callback(errors); +} + +function required$1(rule, value, callback, source, options) { + var errors = []; + var type = Array.isArray(value) ? 'array' : typeof value; + rules.required(rule, value, source, errors, options, type); + callback(errors); +} + +function type$1(rule, value, callback, source, options) { + var ruleType = rule.type; + var errors = []; + var validate = rule.required || !rule.required && source.hasOwnProperty(rule.field); + + if (validate) { + if (isEmptyValue(value, ruleType) && !rule.required) { + return callback(); + } + + rules.required(rule, value, source, errors, options, ruleType); + + if (!isEmptyValue(value, ruleType)) { + rules.type(rule, value, source, errors, options); + } + } + + callback(errors); +} + +/** + * Performs validation for any type. + * + * @param rule The validation rule. + * @param value The value of the field on the source object. + * @param callback The callback function. + * @param source The source object being validated. + * @param options The validation options. + * @param options.messages The validation messages. + */ + +function any(rule, value, callback, source, options) { + var errors = []; + var validate = rule.required || !rule.required && source.hasOwnProperty(rule.field); + + if (validate) { + if (isEmptyValue(value) && !rule.required) { + return callback(); + } + + rules.required(rule, value, source, errors, options); + } + + callback(errors); +} + +var validators = { + string: string, + method: method, + number: number, + "boolean": _boolean, + regexp: regexp, + integer: integer, + "float": floatFn, + array: array, + object: object, + "enum": enumerable$1, + pattern: pattern$2, + date: date, + url: type$1, + hex: type$1, + email: type$1, + required: required$1, + any: any +}; + +function newMessages() { + return { + "default": 'Validation error on field %s', + required: '%s is required', + "enum": '%s must be one of %s', + whitespace: '%s cannot be empty', + date: { + format: '%s date %s is invalid for format %s', + parse: '%s date could not be parsed, %s is invalid ', + invalid: '%s date %s is invalid' + }, + types: { + string: '%s is not a %s', + method: '%s is not a %s (function)', + array: '%s is not an %s', + object: '%s is not an %s', + number: '%s is not a %s', + date: '%s is not a %s', + "boolean": '%s is not a %s', + integer: '%s is not an %s', + "float": '%s is not a %s', + regexp: '%s is not a valid %s', + email: '%s is not a valid %s', + url: '%s is not a valid %s', + hex: '%s is not a valid %s' + }, + string: { + len: '%s must be exactly %s characters', + min: '%s must be at least %s characters', + max: '%s cannot be longer than %s characters', + range: '%s must be between %s and %s characters' + }, + number: { + len: '%s must equal %s', + min: '%s cannot be less than %s', + max: '%s cannot be greater than %s', + range: '%s must be between %s and %s' + }, + array: { + len: '%s must be exactly %s in length', + min: '%s cannot be less than %s in length', + max: '%s cannot be greater than %s in length', + range: '%s must be between %s and %s in length' + }, + pattern: { + mismatch: '%s value %s does not match pattern %s' + }, + clone: function clone() { + var cloned = JSON.parse(JSON.stringify(this)); + cloned.clone = this.clone; + return cloned; + } + }; +} +var messages = newMessages(); + +/** + * Encapsulates a validation schema. + * + * @param descriptor An object declaring validation rules + * for this schema. + */ + +function Schema(descriptor) { + this.rules = null; + this._messages = messages; + this.define(descriptor); +} + +Schema.prototype = { + messages: function messages(_messages) { + if (_messages) { + this._messages = deepMerge(newMessages(), _messages); + } + + return this._messages; + }, + define: function define(rules) { + if (!rules) { + throw new Error('Cannot configure a schema with no rules'); + } + + if (typeof rules !== 'object' || Array.isArray(rules)) { + throw new Error('Rules must be an object'); + } + + this.rules = {}; + var z; + var item; + + for (z in rules) { + if (rules.hasOwnProperty(z)) { + item = rules[z]; + this.rules[z] = Array.isArray(item) ? item : [item]; + } + } + }, + validate: function validate(source_, o, oc) { + var _this = this; + + if (o === void 0) { + o = {}; + } + + if (oc === void 0) { + oc = function oc() {}; + } + + var source = source_; + var options = o; + var callback = oc; + + if (typeof options === 'function') { + callback = options; + options = {}; + } + + if (!this.rules || Object.keys(this.rules).length === 0) { + if (callback) { + callback(); + } + + return Promise.resolve(); + } + + function complete(results) { + var i; + var errors = []; + var fields = {}; + + function add(e) { + if (Array.isArray(e)) { + var _errors; + + errors = (_errors = errors).concat.apply(_errors, e); + } else { + errors.push(e); + } + } + + for (i = 0; i < results.length; i++) { + add(results[i]); + } + + if (!errors.length) { + errors = null; + fields = null; + } else { + fields = convertFieldsError(errors); + } + + callback(errors, fields); + } + + if (options.messages) { + var messages$1 = this.messages(); + + if (messages$1 === messages) { + messages$1 = newMessages(); + } + + deepMerge(messages$1, options.messages); + options.messages = messages$1; + } else { + options.messages = this.messages(); + } + + var arr; + var value; + var series = {}; + var keys = options.keys || Object.keys(this.rules); + keys.forEach(function (z) { + arr = _this.rules[z]; + value = source[z]; + arr.forEach(function (r) { + var rule = r; + + if (typeof rule.transform === 'function') { + if (source === source_) { + source = _extends({}, source); + } + + value = source[z] = rule.transform(value); + } + + if (typeof rule === 'function') { + rule = { + validator: rule + }; + } else { + rule = _extends({}, rule); + } + + rule.validator = _this.getValidationMethod(rule); + rule.field = z; + rule.fullField = rule.fullField || z; + rule.type = _this.getType(rule); + + if (!rule.validator) { + return; + } + + series[z] = series[z] || []; + series[z].push({ + rule: rule, + value: value, + source: source, + field: z + }); + }); + }); + var errorFields = {}; + return asyncMap(series, options, function (data, doIt) { + var rule = data.rule; + var deep = (rule.type === 'object' || rule.type === 'array') && (typeof rule.fields === 'object' || typeof rule.defaultField === 'object'); + deep = deep && (rule.required || !rule.required && data.value); + rule.field = data.field; + + function addFullfield(key, schema) { + return _extends(_extends({}, schema), {}, { + fullField: rule.fullField + "." + key + }); + } + + function cb(e) { + if (e === void 0) { + e = []; + } + + var errors = e; + + if (!Array.isArray(errors)) { + errors = [errors]; + } + + if (!options.suppressWarning && errors.length) { + Schema.warning('async-validator:', errors); + } + + if (errors.length && rule.message !== undefined) { + errors = [].concat(rule.message); + } + + errors = errors.map(complementError(rule)); + + if (options.first && errors.length) { + errorFields[rule.field] = 1; + return doIt(errors); + } + + if (!deep) { + doIt(errors); + } else { + // if rule is required but the target object + // does not exist fail at the rule level and don't + // go deeper + if (rule.required && !data.value) { + if (rule.message !== undefined) { + errors = [].concat(rule.message).map(complementError(rule)); + } else if (options.error) { + errors = [options.error(rule, format(options.messages.required, rule.field))]; + } + + return doIt(errors); + } + + var fieldsSchema = {}; + + if (rule.defaultField) { + for (var k in data.value) { + if (data.value.hasOwnProperty(k)) { + fieldsSchema[k] = rule.defaultField; + } + } + } + + fieldsSchema = _extends(_extends({}, fieldsSchema), data.rule.fields); + + for (var f in fieldsSchema) { + if (fieldsSchema.hasOwnProperty(f)) { + var fieldSchema = Array.isArray(fieldsSchema[f]) ? fieldsSchema[f] : [fieldsSchema[f]]; + fieldsSchema[f] = fieldSchema.map(addFullfield.bind(null, f)); + } + } + + var schema = new Schema(fieldsSchema); + schema.messages(options.messages); + + if (data.rule.options) { + data.rule.options.messages = options.messages; + data.rule.options.error = options.error; + } + + schema.validate(data.value, data.rule.options || options, function (errs) { + var finalErrors = []; + + if (errors && errors.length) { + finalErrors.push.apply(finalErrors, errors); + } + + if (errs && errs.length) { + finalErrors.push.apply(finalErrors, errs); + } + + doIt(finalErrors.length ? finalErrors : null); + }); + } + } + + var res; + + if (rule.asyncValidator) { + res = rule.asyncValidator(rule, data.value, cb, data.source, options); + } else if (rule.validator) { + res = rule.validator(rule, data.value, cb, data.source, options); + + if (res === true) { + cb(); + } else if (res === false) { + cb(rule.message || rule.field + " fails"); + } else if (res instanceof Array) { + cb(res); + } else if (res instanceof Error) { + cb(res.message); + } + } + + if (res && res.then) { + res.then(function () { + return cb(); + }, function (e) { + return cb(e); + }); + } + }, function (results) { + complete(results); + }); + }, + getType: function getType(rule) { + if (rule.type === undefined && rule.pattern instanceof RegExp) { + rule.type = 'pattern'; + } + + if (typeof rule.validator !== 'function' && rule.type && !validators.hasOwnProperty(rule.type)) { + throw new Error(format('Unknown rule type %s', rule.type)); + } + + return rule.type || 'string'; + }, + getValidationMethod: function getValidationMethod(rule) { + if (typeof rule.validator === 'function') { + return rule.validator; + } + + var keys = Object.keys(rule); + var messageIndex = keys.indexOf('message'); + + if (messageIndex !== -1) { + keys.splice(messageIndex, 1); + } + + if (keys.length === 1 && keys[0] === 'required') { + return validators.required; + } + + return validators[this.getType(rule)] || false; + } +}; + +Schema.register = function register(type, validator) { + if (typeof validator !== 'function') { + throw new Error('Cannot register a validator by type, validator is not a function'); + } + + validators[type] = validator; +}; + +Schema.warning = warning; +Schema.messages = messages; +Schema.validators = validators; + +exports.default = Schema; +//# sourceMappingURL=index.js.map diff --git a/node_modules/async-validator/dist-node/index.js.map b/node_modules/async-validator/dist-node/index.js.map new file mode 100644 index 0000000..162d9f3 --- /dev/null +++ b/node_modules/async-validator/dist-node/index.js.map @@ -0,0 +1 @@ +{"version":3,"file":"index.js","sources":["../../src/util.js","../../src/rule/required.js","../../src/rule/whitespace.js","../../src/rule/type.js","../../src/rule/range.js","../../src/rule/enum.js","../../src/rule/pattern.js","../../src/rule/index.js","../../src/validator/string.js","../../src/validator/method.js","../../src/validator/number.js","../../src/validator/boolean.js","../../src/validator/regexp.js","../../src/validator/integer.js","../../src/validator/float.js","../../src/validator/array.js","../../src/validator/object.js","../../src/validator/enum.js","../../src/validator/pattern.js","../../src/validator/date.js","../../src/validator/required.js","../../src/validator/type.js","../../src/validator/any.js","../../src/validator/index.js","../../src/messages.js","../../src/index.js"],"sourcesContent":["/* eslint no-console:0 */\n\nconst formatRegExp = /%[sdj%]/g;\n\nexport let warning = () => {};\n\n// don't print warning message when in production env or node runtime\nif (\n typeof process !== 'undefined' &&\n process.env &&\n process.env.NODE_ENV !== 'production' &&\n typeof window !== 'undefined' &&\n typeof document !== 'undefined'\n) {\n warning = (type, errors) => {\n if (typeof console !== 'undefined' && console.warn) {\n if (errors.every(e => typeof e === 'string')) {\n console.warn(type, errors);\n }\n }\n };\n}\n\nexport function convertFieldsError(errors) {\n if (!errors || !errors.length) return null;\n const fields = {};\n errors.forEach(error => {\n const field = error.field;\n fields[field] = fields[field] || [];\n fields[field].push(error);\n });\n return fields;\n}\n\nexport function format(...args) {\n let i = 1;\n const f = args[0];\n const len = args.length;\n if (typeof f === 'function') {\n return f.apply(null, args.slice(1));\n }\n if (typeof f === 'string') {\n let str = String(f).replace(formatRegExp, x => {\n if (x === '%%') {\n return '%';\n }\n if (i >= len) {\n return x;\n }\n switch (x) {\n case '%s':\n return String(args[i++]);\n case '%d':\n return Number(args[i++]);\n case '%j':\n try {\n return JSON.stringify(args[i++]);\n } catch (_) {\n return '[Circular]';\n }\n break;\n default:\n return x;\n }\n });\n return str;\n }\n return f;\n}\n\nfunction isNativeStringType(type) {\n return (\n type === 'string' ||\n type === 'url' ||\n type === 'hex' ||\n type === 'email' ||\n type === 'date' ||\n type === 'pattern'\n );\n}\n\nexport function isEmptyValue(value, type) {\n if (value === undefined || value === null) {\n return true;\n }\n if (type === 'array' && Array.isArray(value) && !value.length) {\n return true;\n }\n if (isNativeStringType(type) && typeof value === 'string' && !value) {\n return true;\n }\n return false;\n}\n\nexport function isEmptyObject(obj) {\n return Object.keys(obj).length === 0;\n}\n\nfunction asyncParallelArray(arr, func, callback) {\n const results = [];\n let total = 0;\n const arrLength = arr.length;\n\n function count(errors) {\n results.push.apply(results, errors);\n total++;\n if (total === arrLength) {\n callback(results);\n }\n }\n\n arr.forEach(a => {\n func(a, count);\n });\n}\n\nfunction asyncSerialArray(arr, func, callback) {\n let index = 0;\n const arrLength = arr.length;\n\n function next(errors) {\n if (errors && errors.length) {\n callback(errors);\n return;\n }\n const original = index;\n index = index + 1;\n if (original < arrLength) {\n func(arr[original], next);\n } else {\n callback([]);\n }\n }\n\n next([]);\n}\n\nfunction flattenObjArr(objArr) {\n const ret = [];\n Object.keys(objArr).forEach(k => {\n ret.push.apply(ret, objArr[k]);\n });\n return ret;\n}\n\nexport class AsyncValidationError extends Error {\n constructor(errors, fields) {\n super('Async Validation Error');\n this.errors = errors;\n this.fields = fields;\n }\n}\n\nexport function asyncMap(objArr, option, func, callback) {\n if (option.first) {\n const pending = new Promise((resolve, reject) => {\n const next = errors => {\n callback(errors);\n return errors.length\n ? reject(new AsyncValidationError(errors, convertFieldsError(errors)))\n : resolve();\n };\n const flattenArr = flattenObjArr(objArr);\n asyncSerialArray(flattenArr, func, next);\n });\n pending.catch(e => e);\n return pending;\n }\n let firstFields = option.firstFields || [];\n if (firstFields === true) {\n firstFields = Object.keys(objArr);\n }\n const objArrKeys = Object.keys(objArr);\n const objArrLength = objArrKeys.length;\n let total = 0;\n const results = [];\n const pending = new Promise((resolve, reject) => {\n const next = errors => {\n results.push.apply(results, errors);\n total++;\n if (total === objArrLength) {\n callback(results);\n return results.length\n ? reject(\n new AsyncValidationError(results, convertFieldsError(results)),\n )\n : resolve();\n }\n };\n if (!objArrKeys.length) {\n callback(results);\n resolve();\n }\n objArrKeys.forEach(key => {\n const arr = objArr[key];\n if (firstFields.indexOf(key) !== -1) {\n asyncSerialArray(arr, func, next);\n } else {\n asyncParallelArray(arr, func, next);\n }\n });\n });\n pending.catch(e => e);\n return pending;\n}\n\nexport function complementError(rule) {\n return oe => {\n if (oe && oe.message) {\n oe.field = oe.field || rule.fullField;\n return oe;\n }\n return {\n message: typeof oe === 'function' ? oe() : oe,\n field: oe.field || rule.fullField,\n };\n };\n}\n\nexport function deepMerge(target, source) {\n if (source) {\n for (const s in source) {\n if (source.hasOwnProperty(s)) {\n const value = source[s];\n if (typeof value === 'object' && typeof target[s] === 'object') {\n target[s] = {\n ...target[s],\n ...value,\n };\n } else {\n target[s] = value;\n }\n }\n }\n }\n return target;\n}\n","import * as util from '../util';\n\n/**\n * Rule for validating required fields.\n *\n * @param rule The validation rule.\n * @param value The value of the field on the source object.\n * @param source The source object being validated.\n * @param errors An array of errors that this rule may add\n * validation errors to.\n * @param options The validation options.\n * @param options.messages The validation messages.\n */\nfunction required(rule, value, source, errors, options, type) {\n if (\n rule.required &&\n (!source.hasOwnProperty(rule.field) ||\n util.isEmptyValue(value, type || rule.type))\n ) {\n errors.push(util.format(options.messages.required, rule.fullField));\n }\n}\n\nexport default required;\n","import * as util from '../util';\n\n/**\n * Rule for validating whitespace.\n *\n * @param rule The validation rule.\n * @param value The value of the field on the source object.\n * @param source The source object being validated.\n * @param errors An array of errors that this rule may add\n * validation errors to.\n * @param options The validation options.\n * @param options.messages The validation messages.\n */\nfunction whitespace(rule, value, source, errors, options) {\n if (/^\\s+$/.test(value) || value === '') {\n errors.push(util.format(options.messages.whitespace, rule.fullField));\n }\n}\n\nexport default whitespace;\n","import * as util from '../util';\nimport required from './required';\n\n/* eslint max-len:0 */\n\nconst pattern = {\n // http://emailregex.com/\n email: /^(([^<>()\\[\\]\\\\.,;:\\s@\"]+(\\.[^<>()\\[\\]\\\\.,;:\\s@\"]+)*)|(\".+\"))@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}])|(([a-zA-Z\\-0-9]+\\.)+[a-zA-Z]{2,}))$/,\n url: new RegExp(\n '^(?!mailto:)(?:(?:http|https|ftp)://|//)(?:\\\\S+(?::\\\\S*)?@)?(?:(?:(?:[1-9]\\\\d?|1\\\\d\\\\d|2[01]\\\\d|22[0-3])(?:\\\\.(?:1?\\\\d{1,2}|2[0-4]\\\\d|25[0-5])){2}(?:\\\\.(?:[0-9]\\\\d?|1\\\\d\\\\d|2[0-4]\\\\d|25[0-4]))|(?:(?:[a-z\\\\u00a1-\\\\uffff0-9]+-*)*[a-z\\\\u00a1-\\\\uffff0-9]+)(?:\\\\.(?:[a-z\\\\u00a1-\\\\uffff0-9]+-*)*[a-z\\\\u00a1-\\\\uffff0-9]+)*(?:\\\\.(?:[a-z\\\\u00a1-\\\\uffff]{2,})))|localhost)(?::\\\\d{2,5})?(?:(/|\\\\?|#)[^\\\\s]*)?$',\n 'i',\n ),\n hex: /^#?([a-f0-9]{6}|[a-f0-9]{3})$/i,\n};\n\nconst types = {\n integer(value) {\n return types.number(value) && parseInt(value, 10) === value;\n },\n float(value) {\n return types.number(value) && !types.integer(value);\n },\n array(value) {\n return Array.isArray(value);\n },\n regexp(value) {\n if (value instanceof RegExp) {\n return true;\n }\n try {\n return !!new RegExp(value);\n } catch (e) {\n return false;\n }\n },\n date(value) {\n return (\n typeof value.getTime === 'function' &&\n typeof value.getMonth === 'function' &&\n typeof value.getYear === 'function' &&\n !isNaN(value.getTime())\n );\n },\n number(value) {\n if (isNaN(value)) {\n return false;\n }\n return typeof value === 'number';\n },\n object(value) {\n return typeof value === 'object' && !types.array(value);\n },\n method(value) {\n return typeof value === 'function';\n },\n email(value) {\n return (\n typeof value === 'string' &&\n !!value.match(pattern.email) &&\n value.length < 255\n );\n },\n url(value) {\n return typeof value === 'string' && !!value.match(pattern.url);\n },\n hex(value) {\n return typeof value === 'string' && !!value.match(pattern.hex);\n },\n};\n\n/**\n * Rule for validating the type of a value.\n *\n * @param rule The validation rule.\n * @param value The value of the field on the source object.\n * @param source The source object being validated.\n * @param errors An array of errors that this rule may add\n * validation errors to.\n * @param options The validation options.\n * @param options.messages The validation messages.\n */\nfunction type(rule, value, source, errors, options) {\n if (rule.required && value === undefined) {\n required(rule, value, source, errors, options);\n return;\n }\n const custom = [\n 'integer',\n 'float',\n 'array',\n 'regexp',\n 'object',\n 'method',\n 'email',\n 'number',\n 'date',\n 'url',\n 'hex',\n ];\n const ruleType = rule.type;\n if (custom.indexOf(ruleType) > -1) {\n if (!types[ruleType](value)) {\n errors.push(\n util.format(\n options.messages.types[ruleType],\n rule.fullField,\n rule.type,\n ),\n );\n }\n // straight typeof check\n } else if (ruleType && typeof value !== rule.type) {\n errors.push(\n util.format(options.messages.types[ruleType], rule.fullField, rule.type),\n );\n }\n}\n\nexport default type;\n","import * as util from '../util';\n\n/**\n * Rule for validating minimum and maximum allowed values.\n *\n * @param rule The validation rule.\n * @param value The value of the field on the source object.\n * @param source The source object being validated.\n * @param errors An array of errors that this rule may add\n * validation errors to.\n * @param options The validation options.\n * @param options.messages The validation messages.\n */\nfunction range(rule, value, source, errors, options) {\n const len = typeof rule.len === 'number';\n const min = typeof rule.min === 'number';\n const max = typeof rule.max === 'number';\n // 正则匹配码点范围从U+010000一直到U+10FFFF的文字(补充平面Supplementary Plane)\n const spRegexp = /[\\uD800-\\uDBFF][\\uDC00-\\uDFFF]/g;\n let val = value;\n let key = null;\n const num = typeof value === 'number';\n const str = typeof value === 'string';\n const arr = Array.isArray(value);\n if (num) {\n key = 'number';\n } else if (str) {\n key = 'string';\n } else if (arr) {\n key = 'array';\n }\n // if the value is not of a supported type for range validation\n // the validation rule rule should use the\n // type property to also test for a particular type\n if (!key) {\n return false;\n }\n if (arr) {\n val = value.length;\n }\n if (str) {\n // 处理码点大于U+010000的文字length属性不准确的bug,如\"𠮷𠮷𠮷\".lenght !== 3\n val = value.replace(spRegexp, '_').length;\n }\n if (len) {\n if (val !== rule.len) {\n errors.push(\n util.format(options.messages[key].len, rule.fullField, rule.len),\n );\n }\n } else if (min && !max && val < rule.min) {\n errors.push(\n util.format(options.messages[key].min, rule.fullField, rule.min),\n );\n } else if (max && !min && val > rule.max) {\n errors.push(\n util.format(options.messages[key].max, rule.fullField, rule.max),\n );\n } else if (min && max && (val < rule.min || val > rule.max)) {\n errors.push(\n util.format(\n options.messages[key].range,\n rule.fullField,\n rule.min,\n rule.max,\n ),\n );\n }\n}\n\nexport default range;\n","import * as util from '../util';\n\nconst ENUM = 'enum';\n\n/**\n * Rule for validating a value exists in an enumerable list.\n *\n * @param rule The validation rule.\n * @param value The value of the field on the source object.\n * @param source The source object being validated.\n * @param errors An array of errors that this rule may add\n * validation errors to.\n * @param options The validation options.\n * @param options.messages The validation messages.\n */\nfunction enumerable(rule, value, source, errors, options) {\n rule[ENUM] = Array.isArray(rule[ENUM]) ? rule[ENUM] : [];\n if (rule[ENUM].indexOf(value) === -1) {\n errors.push(\n util.format(\n options.messages[ENUM],\n rule.fullField,\n rule[ENUM].join(', '),\n ),\n );\n }\n}\n\nexport default enumerable;\n","import * as util from '../util';\n\n/**\n * Rule for validating a regular expression pattern.\n *\n * @param rule The validation rule.\n * @param value The value of the field on the source object.\n * @param source The source object being validated.\n * @param errors An array of errors that this rule may add\n * validation errors to.\n * @param options The validation options.\n * @param options.messages The validation messages.\n */\nfunction pattern(rule, value, source, errors, options) {\n if (rule.pattern) {\n if (rule.pattern instanceof RegExp) {\n // if a RegExp instance is passed, reset `lastIndex` in case its `global`\n // flag is accidentally set to `true`, which in a validation scenario\n // is not necessary and the result might be misleading\n rule.pattern.lastIndex = 0;\n if (!rule.pattern.test(value)) {\n errors.push(\n util.format(\n options.messages.pattern.mismatch,\n rule.fullField,\n value,\n rule.pattern,\n ),\n );\n }\n } else if (typeof rule.pattern === 'string') {\n const _pattern = new RegExp(rule.pattern);\n if (!_pattern.test(value)) {\n errors.push(\n util.format(\n options.messages.pattern.mismatch,\n rule.fullField,\n value,\n rule.pattern,\n ),\n );\n }\n }\n }\n}\n\nexport default pattern;\n","import required from './required';\nimport whitespace from './whitespace';\nimport type from './type';\nimport range from './range';\nimport enumRule from './enum';\nimport pattern from './pattern';\n\nexport default {\n required,\n whitespace,\n type,\n range,\n enum: enumRule,\n pattern,\n};\n","import rules from '../rule/index.js';\nimport { isEmptyValue } from '../util';\n\n/**\n * Performs validation for string types.\n *\n * @param rule The validation rule.\n * @param value The value of the field on the source object.\n * @param callback The callback function.\n * @param source The source object being validated.\n * @param options The validation options.\n * @param options.messages The validation messages.\n */\nfunction string(rule, value, callback, source, options) {\n const errors = [];\n const validate =\n rule.required || (!rule.required && source.hasOwnProperty(rule.field));\n if (validate) {\n if (isEmptyValue(value, 'string') && !rule.required) {\n return callback();\n }\n rules.required(rule, value, source, errors, options, 'string');\n if (!isEmptyValue(value, 'string')) {\n rules.type(rule, value, source, errors, options);\n rules.range(rule, value, source, errors, options);\n rules.pattern(rule, value, source, errors, options);\n if (rule.whitespace === true) {\n rules.whitespace(rule, value, source, errors, options);\n }\n }\n }\n callback(errors);\n}\n\nexport default string;\n","import rules from '../rule/index.js';\nimport { isEmptyValue } from '../util';\n\n/**\n * Validates a function.\n *\n * @param rule The validation rule.\n * @param value The value of the field on the source object.\n * @param callback The callback function.\n * @param source The source object being validated.\n * @param options The validation options.\n * @param options.messages The validation messages.\n */\nfunction method(rule, value, callback, source, options) {\n const errors = [];\n const validate =\n rule.required || (!rule.required && source.hasOwnProperty(rule.field));\n if (validate) {\n if (isEmptyValue(value) && !rule.required) {\n return callback();\n }\n rules.required(rule, value, source, errors, options);\n if (value !== undefined) {\n rules.type(rule, value, source, errors, options);\n }\n }\n callback(errors);\n}\n\nexport default method;\n","import rules from '../rule/index.js';\nimport { isEmptyValue } from '../util';\n\n/**\n * Validates a number.\n *\n * @param rule The validation rule.\n * @param value The value of the field on the source object.\n * @param callback The callback function.\n * @param source The source object being validated.\n * @param options The validation options.\n * @param options.messages The validation messages.\n */\nfunction number(rule, value, callback, source, options) {\n const errors = [];\n const validate =\n rule.required || (!rule.required && source.hasOwnProperty(rule.field));\n if (validate) {\n if (value === '') {\n value = undefined;\n }\n if (isEmptyValue(value) && !rule.required) {\n return callback();\n }\n rules.required(rule, value, source, errors, options);\n if (value !== undefined) {\n rules.type(rule, value, source, errors, options);\n rules.range(rule, value, source, errors, options);\n }\n }\n callback(errors);\n}\n\nexport default number;\n","import { isEmptyValue } from '../util';\nimport rules from '../rule/index.js';\n\n/**\n * Validates a boolean.\n *\n * @param rule The validation rule.\n * @param value The value of the field on the source object.\n * @param callback The callback function.\n * @param source The source object being validated.\n * @param options The validation options.\n * @param options.messages The validation messages.\n */\nfunction boolean(rule, value, callback, source, options) {\n const errors = [];\n const validate =\n rule.required || (!rule.required && source.hasOwnProperty(rule.field));\n if (validate) {\n if (isEmptyValue(value) && !rule.required) {\n return callback();\n }\n rules.required(rule, value, source, errors, options);\n if (value !== undefined) {\n rules.type(rule, value, source, errors, options);\n }\n }\n callback(errors);\n}\n\nexport default boolean;\n","import rules from '../rule/index.js';\nimport { isEmptyValue } from '../util';\n\n/**\n * Validates the regular expression type.\n *\n * @param rule The validation rule.\n * @param value The value of the field on the source object.\n * @param callback The callback function.\n * @param source The source object being validated.\n * @param options The validation options.\n * @param options.messages The validation messages.\n */\nfunction regexp(rule, value, callback, source, options) {\n const errors = [];\n const validate =\n rule.required || (!rule.required && source.hasOwnProperty(rule.field));\n if (validate) {\n if (isEmptyValue(value) && !rule.required) {\n return callback();\n }\n rules.required(rule, value, source, errors, options);\n if (!isEmptyValue(value)) {\n rules.type(rule, value, source, errors, options);\n }\n }\n callback(errors);\n}\n\nexport default regexp;\n","import rules from '../rule/index.js';\nimport { isEmptyValue } from '../util';\n\n/**\n * Validates a number is an integer.\n *\n * @param rule The validation rule.\n * @param value The value of the field on the source object.\n * @param callback The callback function.\n * @param source The source object being validated.\n * @param options The validation options.\n * @param options.messages The validation messages.\n */\nfunction integer(rule, value, callback, source, options) {\n const errors = [];\n const validate =\n rule.required || (!rule.required && source.hasOwnProperty(rule.field));\n if (validate) {\n if (isEmptyValue(value) && !rule.required) {\n return callback();\n }\n rules.required(rule, value, source, errors, options);\n if (value !== undefined) {\n rules.type(rule, value, source, errors, options);\n rules.range(rule, value, source, errors, options);\n }\n }\n callback(errors);\n}\n\nexport default integer;\n","import rules from '../rule/index.js';\nimport { isEmptyValue } from '../util';\n\n/**\n * Validates a number is a floating point number.\n *\n * @param rule The validation rule.\n * @param value The value of the field on the source object.\n * @param callback The callback function.\n * @param source The source object being validated.\n * @param options The validation options.\n * @param options.messages The validation messages.\n */\nfunction floatFn(rule, value, callback, source, options) {\n const errors = [];\n const validate =\n rule.required || (!rule.required && source.hasOwnProperty(rule.field));\n if (validate) {\n if (isEmptyValue(value) && !rule.required) {\n return callback();\n }\n rules.required(rule, value, source, errors, options);\n if (value !== undefined) {\n rules.type(rule, value, source, errors, options);\n rules.range(rule, value, source, errors, options);\n }\n }\n callback(errors);\n}\n\nexport default floatFn;\n","import rules from '../rule/index';\nimport { isEmptyValue } from '../util';\n/**\n * Validates an array.\n *\n * @param rule The validation rule.\n * @param value The value of the field on the source object.\n * @param callback The callback function.\n * @param source The source object being validated.\n * @param options The validation options.\n * @param options.messages The validation messages.\n */\nfunction array(rule, value, callback, source, options) {\n const errors = [];\n const validate =\n rule.required || (!rule.required && source.hasOwnProperty(rule.field));\n if (validate) {\n if ((value === undefined || value === null) && !rule.required) {\n return callback();\n }\n rules.required(rule, value, source, errors, options, 'array');\n if (value !== undefined && value !== null) {\n rules.type(rule, value, source, errors, options);\n rules.range(rule, value, source, errors, options);\n }\n }\n callback(errors);\n}\n\nexport default array;\n","import rules from '../rule/index.js';\nimport { isEmptyValue } from '../util';\n\n/**\n * Validates an object.\n *\n * @param rule The validation rule.\n * @param value The value of the field on the source object.\n * @param callback The callback function.\n * @param source The source object being validated.\n * @param options The validation options.\n * @param options.messages The validation messages.\n */\nfunction object(rule, value, callback, source, options) {\n const errors = [];\n const validate =\n rule.required || (!rule.required && source.hasOwnProperty(rule.field));\n if (validate) {\n if (isEmptyValue(value) && !rule.required) {\n return callback();\n }\n rules.required(rule, value, source, errors, options);\n if (value !== undefined) {\n rules.type(rule, value, source, errors, options);\n }\n }\n callback(errors);\n}\n\nexport default object;\n","import rules from '../rule/index.js';\nimport { isEmptyValue } from '../util';\n\nconst ENUM = 'enum';\n\n/**\n * Validates an enumerable list.\n *\n * @param rule The validation rule.\n * @param value The value of the field on the source object.\n * @param callback The callback function.\n * @param source The source object being validated.\n * @param options The validation options.\n * @param options.messages The validation messages.\n */\nfunction enumerable(rule, value, callback, source, options) {\n const errors = [];\n const validate =\n rule.required || (!rule.required && source.hasOwnProperty(rule.field));\n if (validate) {\n if (isEmptyValue(value) && !rule.required) {\n return callback();\n }\n rules.required(rule, value, source, errors, options);\n if (value !== undefined) {\n rules[ENUM](rule, value, source, errors, options);\n }\n }\n callback(errors);\n}\n\nexport default enumerable;\n","import rules from '../rule/index.js';\nimport { isEmptyValue } from '../util';\n\n/**\n * Validates a regular expression pattern.\n *\n * Performs validation when a rule only contains\n * a pattern property but is not declared as a string type.\n *\n * @param rule The validation rule.\n * @param value The value of the field on the source object.\n * @param callback The callback function.\n * @param source The source object being validated.\n * @param options The validation options.\n * @param options.messages The validation messages.\n */\nfunction pattern(rule, value, callback, source, options) {\n const errors = [];\n const validate =\n rule.required || (!rule.required && source.hasOwnProperty(rule.field));\n if (validate) {\n if (isEmptyValue(value, 'string') && !rule.required) {\n return callback();\n }\n rules.required(rule, value, source, errors, options);\n if (!isEmptyValue(value, 'string')) {\n rules.pattern(rule, value, source, errors, options);\n }\n }\n callback(errors);\n}\n\nexport default pattern;\n","import rules from '../rule/index.js';\nimport { isEmptyValue } from '../util';\n\nfunction date(rule, value, callback, source, options) {\n // console.log('integer rule called %j', rule);\n const errors = [];\n const validate =\n rule.required || (!rule.required && source.hasOwnProperty(rule.field));\n // console.log('validate on %s value', value);\n if (validate) {\n if (isEmptyValue(value, 'date') && !rule.required) {\n return callback();\n }\n rules.required(rule, value, source, errors, options);\n if (!isEmptyValue(value, 'date')) {\n let dateObject;\n\n if (value instanceof Date) {\n dateObject = value;\n } else {\n dateObject = new Date(value);\n }\n\n rules.type(rule, dateObject, source, errors, options);\n if (dateObject) {\n rules.range(rule, dateObject.getTime(), source, errors, options);\n }\n }\n }\n callback(errors);\n}\n\nexport default date;\n","import rules from '../rule/index.js';\n\nfunction required(rule, value, callback, source, options) {\n const errors = [];\n const type = Array.isArray(value) ? 'array' : typeof value;\n rules.required(rule, value, source, errors, options, type);\n callback(errors);\n}\n\nexport default required;\n","import rules from '../rule/index.js';\nimport { isEmptyValue } from '../util';\n\nfunction type(rule, value, callback, source, options) {\n const ruleType = rule.type;\n const errors = [];\n const validate =\n rule.required || (!rule.required && source.hasOwnProperty(rule.field));\n if (validate) {\n if (isEmptyValue(value, ruleType) && !rule.required) {\n return callback();\n }\n rules.required(rule, value, source, errors, options, ruleType);\n if (!isEmptyValue(value, ruleType)) {\n rules.type(rule, value, source, errors, options);\n }\n }\n callback(errors);\n}\n\nexport default type;\n","import rules from '../rule/index.js';\nimport { isEmptyValue } from '../util';\n\n/**\n * Performs validation for any type.\n *\n * @param rule The validation rule.\n * @param value The value of the field on the source object.\n * @param callback The callback function.\n * @param source The source object being validated.\n * @param options The validation options.\n * @param options.messages The validation messages.\n */\nfunction any(rule, value, callback, source, options) {\n const errors = [];\n const validate =\n rule.required || (!rule.required && source.hasOwnProperty(rule.field));\n if (validate) {\n if (isEmptyValue(value) && !rule.required) {\n return callback();\n }\n rules.required(rule, value, source, errors, options);\n }\n callback(errors);\n}\n\nexport default any;\n","import string from './string';\nimport method from './method';\nimport number from './number';\nimport boolean from './boolean';\nimport regexp from './regexp';\nimport integer from './integer';\nimport float from './float';\nimport array from './array';\nimport object from './object';\nimport enumValidator from './enum';\nimport pattern from './pattern';\nimport date from './date';\nimport required from './required';\nimport type from './type';\nimport any from './any';\n\nexport default {\n string,\n method,\n number,\n boolean,\n regexp,\n integer,\n float,\n array,\n object,\n enum: enumValidator,\n pattern,\n date,\n url: type,\n hex: type,\n email: type,\n required,\n any,\n};\n","export function newMessages() {\n return {\n default: 'Validation error on field %s',\n required: '%s is required',\n enum: '%s must be one of %s',\n whitespace: '%s cannot be empty',\n date: {\n format: '%s date %s is invalid for format %s',\n parse: '%s date could not be parsed, %s is invalid ',\n invalid: '%s date %s is invalid',\n },\n types: {\n string: '%s is not a %s',\n method: '%s is not a %s (function)',\n array: '%s is not an %s',\n object: '%s is not an %s',\n number: '%s is not a %s',\n date: '%s is not a %s',\n boolean: '%s is not a %s',\n integer: '%s is not an %s',\n float: '%s is not a %s',\n regexp: '%s is not a valid %s',\n email: '%s is not a valid %s',\n url: '%s is not a valid %s',\n hex: '%s is not a valid %s',\n },\n string: {\n len: '%s must be exactly %s characters',\n min: '%s must be at least %s characters',\n max: '%s cannot be longer than %s characters',\n range: '%s must be between %s and %s characters',\n },\n number: {\n len: '%s must equal %s',\n min: '%s cannot be less than %s',\n max: '%s cannot be greater than %s',\n range: '%s must be between %s and %s',\n },\n array: {\n len: '%s must be exactly %s in length',\n min: '%s cannot be less than %s in length',\n max: '%s cannot be greater than %s in length',\n range: '%s must be between %s and %s in length',\n },\n pattern: {\n mismatch: '%s value %s does not match pattern %s',\n },\n clone() {\n const cloned = JSON.parse(JSON.stringify(this));\n cloned.clone = this.clone;\n return cloned;\n },\n };\n}\n\nexport const messages = newMessages();\n","import {\n format,\n complementError,\n asyncMap,\n warning,\n deepMerge,\n convertFieldsError,\n} from './util';\nimport validators from './validator/index';\nimport { messages as defaultMessages, newMessages } from './messages';\n\n/**\n * Encapsulates a validation schema.\n *\n * @param descriptor An object declaring validation rules\n * for this schema.\n */\nfunction Schema(descriptor) {\n this.rules = null;\n this._messages = defaultMessages;\n this.define(descriptor);\n}\n\nSchema.prototype = {\n messages(messages) {\n if (messages) {\n this._messages = deepMerge(newMessages(), messages);\n }\n return this._messages;\n },\n define(rules) {\n if (!rules) {\n throw new Error('Cannot configure a schema with no rules');\n }\n if (typeof rules !== 'object' || Array.isArray(rules)) {\n throw new Error('Rules must be an object');\n }\n this.rules = {};\n let z;\n let item;\n for (z in rules) {\n if (rules.hasOwnProperty(z)) {\n item = rules[z];\n this.rules[z] = Array.isArray(item) ? item : [item];\n }\n }\n },\n validate(source_, o = {}, oc = () => {}) {\n let source = source_;\n let options = o;\n let callback = oc;\n if (typeof options === 'function') {\n callback = options;\n options = {};\n }\n if (!this.rules || Object.keys(this.rules).length === 0) {\n if (callback) {\n callback();\n }\n return Promise.resolve();\n }\n\n function complete(results) {\n let i;\n let errors = [];\n let fields = {};\n\n function add(e) {\n if (Array.isArray(e)) {\n errors = errors.concat(...e);\n } else {\n errors.push(e);\n }\n }\n\n for (i = 0; i < results.length; i++) {\n add(results[i]);\n }\n if (!errors.length) {\n errors = null;\n fields = null;\n } else {\n fields = convertFieldsError(errors);\n }\n callback(errors, fields);\n }\n\n if (options.messages) {\n let messages = this.messages();\n if (messages === defaultMessages) {\n messages = newMessages();\n }\n deepMerge(messages, options.messages);\n options.messages = messages;\n } else {\n options.messages = this.messages();\n }\n let arr;\n let value;\n const series = {};\n const keys = options.keys || Object.keys(this.rules);\n keys.forEach(z => {\n arr = this.rules[z];\n value = source[z];\n arr.forEach(r => {\n let rule = r;\n if (typeof rule.transform === 'function') {\n if (source === source_) {\n source = { ...source };\n }\n value = source[z] = rule.transform(value);\n }\n if (typeof rule === 'function') {\n rule = {\n validator: rule,\n };\n } else {\n rule = { ...rule };\n }\n rule.validator = this.getValidationMethod(rule);\n rule.field = z;\n rule.fullField = rule.fullField || z;\n rule.type = this.getType(rule);\n if (!rule.validator) {\n return;\n }\n series[z] = series[z] || [];\n series[z].push({\n rule,\n value,\n source,\n field: z,\n });\n });\n });\n const errorFields = {};\n return asyncMap(\n series,\n options,\n (data, doIt) => {\n const rule = data.rule;\n let deep =\n (rule.type === 'object' || rule.type === 'array') &&\n (typeof rule.fields === 'object' ||\n typeof rule.defaultField === 'object');\n deep = deep && (rule.required || (!rule.required && data.value));\n rule.field = data.field;\n\n function addFullfield(key, schema) {\n return {\n ...schema,\n fullField: `${rule.fullField}.${key}`,\n };\n }\n\n function cb(e = []) {\n let errors = e;\n if (!Array.isArray(errors)) {\n errors = [errors];\n }\n if (!options.suppressWarning && errors.length) {\n Schema.warning('async-validator:', errors);\n }\n if (errors.length && rule.message !== undefined) {\n errors = [].concat(rule.message);\n }\n\n errors = errors.map(complementError(rule));\n\n if (options.first && errors.length) {\n errorFields[rule.field] = 1;\n return doIt(errors);\n }\n if (!deep) {\n doIt(errors);\n } else {\n // if rule is required but the target object\n // does not exist fail at the rule level and don't\n // go deeper\n if (rule.required && !data.value) {\n if (rule.message !== undefined) {\n errors = [].concat(rule.message).map(complementError(rule));\n } else if (options.error) {\n errors = [\n options.error(\n rule,\n format(options.messages.required, rule.field),\n ),\n ];\n }\n return doIt(errors);\n }\n\n let fieldsSchema = {};\n if (rule.defaultField) {\n for (const k in data.value) {\n if (data.value.hasOwnProperty(k)) {\n fieldsSchema[k] = rule.defaultField;\n }\n }\n }\n fieldsSchema = {\n ...fieldsSchema,\n ...data.rule.fields,\n };\n for (const f in fieldsSchema) {\n if (fieldsSchema.hasOwnProperty(f)) {\n const fieldSchema = Array.isArray(fieldsSchema[f])\n ? fieldsSchema[f]\n : [fieldsSchema[f]];\n fieldsSchema[f] = fieldSchema.map(addFullfield.bind(null, f));\n }\n }\n const schema = new Schema(fieldsSchema);\n schema.messages(options.messages);\n if (data.rule.options) {\n data.rule.options.messages = options.messages;\n data.rule.options.error = options.error;\n }\n schema.validate(data.value, data.rule.options || options, errs => {\n const finalErrors = [];\n if (errors && errors.length) {\n finalErrors.push(...errors);\n }\n if (errs && errs.length) {\n finalErrors.push(...errs);\n }\n doIt(finalErrors.length ? finalErrors : null);\n });\n }\n }\n\n let res;\n if (rule.asyncValidator) {\n res = rule.asyncValidator(rule, data.value, cb, data.source, options);\n } else if (rule.validator) {\n res = rule.validator(rule, data.value, cb, data.source, options);\n if (res === true) {\n cb();\n } else if (res === false) {\n cb(rule.message || `${rule.field} fails`);\n } else if (res instanceof Array) {\n cb(res);\n } else if (res instanceof Error) {\n cb(res.message);\n }\n }\n if (res && res.then) {\n res.then(\n () => cb(),\n e => cb(e),\n );\n }\n },\n results => {\n complete(results);\n },\n );\n },\n getType(rule) {\n if (rule.type === undefined && rule.pattern instanceof RegExp) {\n rule.type = 'pattern';\n }\n if (\n typeof rule.validator !== 'function' &&\n rule.type &&\n !validators.hasOwnProperty(rule.type)\n ) {\n throw new Error(format('Unknown rule type %s', rule.type));\n }\n return rule.type || 'string';\n },\n getValidationMethod(rule) {\n if (typeof rule.validator === 'function') {\n return rule.validator;\n }\n const keys = Object.keys(rule);\n const messageIndex = keys.indexOf('message');\n if (messageIndex !== -1) {\n keys.splice(messageIndex, 1);\n }\n if (keys.length === 1 && keys[0] === 'required') {\n return validators.required;\n }\n return validators[this.getType(rule)] || false;\n },\n};\n\nSchema.register = function register(type, validator) {\n if (typeof validator !== 'function') {\n throw new Error(\n 'Cannot register a validator by type, validator is not a function',\n );\n }\n validators[type] = validator;\n};\n\nSchema.warning = warning;\n\nSchema.messages = defaultMessages;\n\nSchema.validators = validators;\n\nexport default Schema;\n"],"names":["formatRegExp","warning","process","env","NODE_ENV","window","document","type","errors","console","warn","every","e","convertFieldsError","length","fields","forEach","error","field","push","format","args","i","f","len","apply","slice","str","String","replace","x","Number","JSON","stringify","_","isNativeStringType","isEmptyValue","value","undefined","Array","isArray","asyncParallelArray","arr","func","callback","results","total","arrLength","count","a","asyncSerialArray","index","next","original","flattenObjArr","objArr","ret","Object","keys","k","AsyncValidationError","Error","asyncMap","option","first","pending","Promise","resolve","reject","flattenArr","firstFields","objArrKeys","objArrLength","key","indexOf","complementError","rule","oe","message","fullField","deepMerge","target","source","s","hasOwnProperty","required","options","util","messages","whitespace","test","pattern","email","url","RegExp","hex","types","integer","number","parseInt","array","regexp","date","getTime","getMonth","getYear","isNaN","object","method","match","custom","ruleType","range","min","max","spRegexp","val","num","ENUM","enumerable","join","lastIndex","mismatch","_pattern","enumRule","string","validate","rules","boolean","floatFn","dateObject","Date","any","float","enumValidator","newMessages","parse","invalid","clone","cloned","Schema","descriptor","_messages","defaultMessages","define","prototype","z","item","source_","o","oc","complete","add","concat","series","r","transform","validator","getValidationMethod","getType","errorFields","data","doIt","deep","defaultField","addFullfield","schema","cb","suppressWarning","map","fieldsSchema","fieldSchema","bind","errs","finalErrors","res","asyncValidator","then","validators","messageIndex","splice","register"],"mappings":"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"} \ No newline at end of file diff --git a/node_modules/async-validator/dist-types/index.d.ts b/node_modules/async-validator/dist-types/index.d.ts new file mode 100644 index 0000000..b468114 --- /dev/null +++ b/node_modules/async-validator/dist-types/index.d.ts @@ -0,0 +1,97 @@ +// Type definitions for async-validator 3.0.4 +// Project: http://github.com/yiminghe/async-validator +// Definitions by: iamdhj +// TypeScript Version: 3.6.2 + +export default class { + constructor(rule: Rules); + + /** + * Validate source + * @param source The object to validate (required) + * @param options An object describing processing options for the validation + * @param callback A callback function to invoke when validation completes + * @returns Promise + */ + validate( + source: ValidateSource, + options?: ValidateOption, + callback?: (errors: ErrorList, fields: FieldErrorList) => void, + ): Promise; +} + +export type RuleType = + | 'string' + | 'number' + | 'boolean' + | 'method' + | 'regexp' + | 'integer' + | 'float' + | 'array' + | 'object' + | 'enum' + | 'date' + | 'url' + | 'hex' + | 'email' + | 'any'; + +export interface RuleItem { + type?: RuleType; // default type is 'string' + required?: boolean; + pattern?: RegExp | string; + min?: number; // Range of type 'string' and 'array' + max?: number; // Range of type 'string' and 'array' + len?: number; // Length of type 'string' and 'array' + enum?: Array; // possible values of type 'enum' + whitespace?: boolean; + fields?: Rules; // ignore when without required + options?: ValidateOption; + defaultField?: RuleItem; // 'object' or 'array' containing validation rules + transform?: (value: any) => any; + message?: string | (() => string); + asyncValidator?: ( + rule: Rules, + value: any, + callback: (error: string | string[] | void) => void, + source: ValidateSource, + options: ValidateOption, + ) => void | Promise; + validator?: ( + rule: Rules, + value: any, + callback: (error: string | string[] | void) => void, + source: ValidateSource, + options: ValidateOption, + ) => void; +} + +export interface Rules { + [field: string]: RuleItem | RuleItem[]; +} + +export interface ValidateSource { + [field: string]: any; +} + +export interface ValidateOption { + // whether to suppress internal warning + suppressWarning?: boolean; + + // when the first validation rule generates an error stop processed + first?: boolean; + + // when the first validation rule of the specified field generates an error stop the field processed, 'true' means all fields. + firstFields?: boolean | string[]; +} + +export interface ValidateError { + message: string; + field: string; +} + +export type ErrorList = ValidateError[]; +export interface FieldErrorList { + [field: string]: ValidateError[]; +} diff --git a/node_modules/async-validator/dist-web/index.js b/node_modules/async-validator/dist-web/index.js new file mode 100644 index 0000000..381ab27 --- /dev/null +++ b/node_modules/async-validator/dist-web/index.js @@ -0,0 +1,1440 @@ +function _extends() { + _extends = Object.assign || function (target) { + for (var i = 1; i < arguments.length; i++) { + var source = arguments[i]; + + for (var key in source) { + if (Object.prototype.hasOwnProperty.call(source, key)) { + target[key] = source[key]; + } + } + } + + return target; + }; + + return _extends.apply(this, arguments); +} + +function _inheritsLoose(subClass, superClass) { + subClass.prototype = Object.create(superClass.prototype); + subClass.prototype.constructor = subClass; + subClass.__proto__ = superClass; +} + +function _getPrototypeOf(o) { + _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { + return o.__proto__ || Object.getPrototypeOf(o); + }; + return _getPrototypeOf(o); +} + +function _setPrototypeOf(o, p) { + _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { + o.__proto__ = p; + return o; + }; + + return _setPrototypeOf(o, p); +} + +function _isNativeReflectConstruct() { + if (typeof Reflect === "undefined" || !Reflect.construct) return false; + if (Reflect.construct.sham) return false; + if (typeof Proxy === "function") return true; + + try { + Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); + return true; + } catch (e) { + return false; + } +} + +function _construct(Parent, args, Class) { + if (_isNativeReflectConstruct()) { + _construct = Reflect.construct; + } else { + _construct = function _construct(Parent, args, Class) { + var a = [null]; + a.push.apply(a, args); + var Constructor = Function.bind.apply(Parent, a); + var instance = new Constructor(); + if (Class) _setPrototypeOf(instance, Class.prototype); + return instance; + }; + } + + return _construct.apply(null, arguments); +} + +function _isNativeFunction(fn) { + return Function.toString.call(fn).indexOf("[native code]") !== -1; +} + +function _wrapNativeSuper(Class) { + var _cache = typeof Map === "function" ? new Map() : undefined; + + _wrapNativeSuper = function _wrapNativeSuper(Class) { + if (Class === null || !_isNativeFunction(Class)) return Class; + + if (typeof Class !== "function") { + throw new TypeError("Super expression must either be null or a function"); + } + + if (typeof _cache !== "undefined") { + if (_cache.has(Class)) return _cache.get(Class); + + _cache.set(Class, Wrapper); + } + + function Wrapper() { + return _construct(Class, arguments, _getPrototypeOf(this).constructor); + } + + Wrapper.prototype = Object.create(Class.prototype, { + constructor: { + value: Wrapper, + enumerable: false, + writable: true, + configurable: true + } + }); + return _setPrototypeOf(Wrapper, Class); + }; + + return _wrapNativeSuper(Class); +} + +/* eslint no-console:0 */ +var formatRegExp = /%[sdj%]/g; +var warning = function warning() {}; // don't print warning message when in production env or node runtime + +if (typeof process !== 'undefined' && process.env && process.env.NODE_ENV !== 'production' && typeof window !== 'undefined' && typeof document !== 'undefined') { + warning = function warning(type, errors) { + if (typeof console !== 'undefined' && console.warn) { + if (errors.every(function (e) { + return typeof e === 'string'; + })) { + console.warn(type, errors); + } + } + }; +} + +function convertFieldsError(errors) { + if (!errors || !errors.length) return null; + var fields = {}; + errors.forEach(function (error) { + var field = error.field; + fields[field] = fields[field] || []; + fields[field].push(error); + }); + return fields; +} +function format() { + for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) { + args[_key] = arguments[_key]; + } + + var i = 1; + var f = args[0]; + var len = args.length; + + if (typeof f === 'function') { + return f.apply(null, args.slice(1)); + } + + if (typeof f === 'string') { + var str = String(f).replace(formatRegExp, function (x) { + if (x === '%%') { + return '%'; + } + + if (i >= len) { + return x; + } + + switch (x) { + case '%s': + return String(args[i++]); + + case '%d': + return Number(args[i++]); + + case '%j': + try { + return JSON.stringify(args[i++]); + } catch (_) { + return '[Circular]'; + } + + break; + + default: + return x; + } + }); + return str; + } + + return f; +} + +function isNativeStringType(type) { + return type === 'string' || type === 'url' || type === 'hex' || type === 'email' || type === 'date' || type === 'pattern'; +} + +function isEmptyValue(value, type) { + if (value === undefined || value === null) { + return true; + } + + if (type === 'array' && Array.isArray(value) && !value.length) { + return true; + } + + if (isNativeStringType(type) && typeof value === 'string' && !value) { + return true; + } + + return false; +} + +function asyncParallelArray(arr, func, callback) { + var results = []; + var total = 0; + var arrLength = arr.length; + + function count(errors) { + results.push.apply(results, errors); + total++; + + if (total === arrLength) { + callback(results); + } + } + + arr.forEach(function (a) { + func(a, count); + }); +} + +function asyncSerialArray(arr, func, callback) { + var index = 0; + var arrLength = arr.length; + + function next(errors) { + if (errors && errors.length) { + callback(errors); + return; + } + + var original = index; + index = index + 1; + + if (original < arrLength) { + func(arr[original], next); + } else { + callback([]); + } + } + + next([]); +} + +function flattenObjArr(objArr) { + var ret = []; + Object.keys(objArr).forEach(function (k) { + ret.push.apply(ret, objArr[k]); + }); + return ret; +} + +var AsyncValidationError = /*#__PURE__*/function (_Error) { + _inheritsLoose(AsyncValidationError, _Error); + + function AsyncValidationError(errors, fields) { + var _this; + + _this = _Error.call(this, 'Async Validation Error') || this; + _this.errors = errors; + _this.fields = fields; + return _this; + } + + return AsyncValidationError; +}( /*#__PURE__*/_wrapNativeSuper(Error)); +function asyncMap(objArr, option, func, callback) { + if (option.first) { + var _pending = new Promise(function (resolve, reject) { + var next = function next(errors) { + callback(errors); + return errors.length ? reject(new AsyncValidationError(errors, convertFieldsError(errors))) : resolve(); + }; + + var flattenArr = flattenObjArr(objArr); + asyncSerialArray(flattenArr, func, next); + }); + + _pending["catch"](function (e) { + return e; + }); + + return _pending; + } + + var firstFields = option.firstFields || []; + + if (firstFields === true) { + firstFields = Object.keys(objArr); + } + + var objArrKeys = Object.keys(objArr); + var objArrLength = objArrKeys.length; + var total = 0; + var results = []; + var pending = new Promise(function (resolve, reject) { + var next = function next(errors) { + results.push.apply(results, errors); + total++; + + if (total === objArrLength) { + callback(results); + return results.length ? reject(new AsyncValidationError(results, convertFieldsError(results))) : resolve(); + } + }; + + if (!objArrKeys.length) { + callback(results); + resolve(); + } + + objArrKeys.forEach(function (key) { + var arr = objArr[key]; + + if (firstFields.indexOf(key) !== -1) { + asyncSerialArray(arr, func, next); + } else { + asyncParallelArray(arr, func, next); + } + }); + }); + pending["catch"](function (e) { + return e; + }); + return pending; +} +function complementError(rule) { + return function (oe) { + if (oe && oe.message) { + oe.field = oe.field || rule.fullField; + return oe; + } + + return { + message: typeof oe === 'function' ? oe() : oe, + field: oe.field || rule.fullField + }; + }; +} +function deepMerge(target, source) { + if (source) { + for (var s in source) { + if (source.hasOwnProperty(s)) { + var value = source[s]; + + if (typeof value === 'object' && typeof target[s] === 'object') { + target[s] = _extends(_extends({}, target[s]), value); + } else { + target[s] = value; + } + } + } + } + + return target; +} + +/** + * Rule for validating required fields. + * + * @param rule The validation rule. + * @param value The value of the field on the source object. + * @param source The source object being validated. + * @param errors An array of errors that this rule may add + * validation errors to. + * @param options The validation options. + * @param options.messages The validation messages. + */ + +function required(rule, value, source, errors, options, type) { + if (rule.required && (!source.hasOwnProperty(rule.field) || isEmptyValue(value, type || rule.type))) { + errors.push(format(options.messages.required, rule.fullField)); + } +} + +/** + * Rule for validating whitespace. + * + * @param rule The validation rule. + * @param value The value of the field on the source object. + * @param source The source object being validated. + * @param errors An array of errors that this rule may add + * validation errors to. + * @param options The validation options. + * @param options.messages The validation messages. + */ + +function whitespace(rule, value, source, errors, options) { + if (/^\s+$/.test(value) || value === '') { + errors.push(format(options.messages.whitespace, rule.fullField)); + } +} + +/* eslint max-len:0 */ + +var pattern = { + // http://emailregex.com/ + email: /^(([^<>()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/, + url: new RegExp("^(?!mailto:)(?:(?:http|https|ftp)://|//)(?:\\S+(?::\\S*)?@)?(?:(?:(?:[1-9]\\d?|1\\d\\d|2[01]\\d|22[0-3])(?:\\.(?:1?\\d{1,2}|2[0-4]\\d|25[0-5])){2}(?:\\.(?:[0-9]\\d?|1\\d\\d|2[0-4]\\d|25[0-4]))|(?:(?:[a-z\\u00a1-\\uffff0-9]+-*)*[a-z\\u00a1-\\uffff0-9]+)(?:\\.(?:[a-z\\u00a1-\\uffff0-9]+-*)*[a-z\\u00a1-\\uffff0-9]+)*(?:\\.(?:[a-z\\u00a1-\\uffff]{2,})))|localhost)(?::\\d{2,5})?(?:(/|\\?|#)[^\\s]*)?$", 'i'), + hex: /^#?([a-f0-9]{6}|[a-f0-9]{3})$/i +}; +var types = { + integer: function integer(value) { + return types.number(value) && parseInt(value, 10) === value; + }, + "float": function float(value) { + return types.number(value) && !types.integer(value); + }, + array: function array(value) { + return Array.isArray(value); + }, + regexp: function regexp(value) { + if (value instanceof RegExp) { + return true; + } + + try { + return !!new RegExp(value); + } catch (e) { + return false; + } + }, + date: function date(value) { + return typeof value.getTime === 'function' && typeof value.getMonth === 'function' && typeof value.getYear === 'function' && !isNaN(value.getTime()); + }, + number: function number(value) { + if (isNaN(value)) { + return false; + } + + return typeof value === 'number'; + }, + object: function object(value) { + return typeof value === 'object' && !types.array(value); + }, + method: function method(value) { + return typeof value === 'function'; + }, + email: function email(value) { + return typeof value === 'string' && !!value.match(pattern.email) && value.length < 255; + }, + url: function url(value) { + return typeof value === 'string' && !!value.match(pattern.url); + }, + hex: function hex(value) { + return typeof value === 'string' && !!value.match(pattern.hex); + } +}; +/** + * Rule for validating the type of a value. + * + * @param rule The validation rule. + * @param value The value of the field on the source object. + * @param source The source object being validated. + * @param errors An array of errors that this rule may add + * validation errors to. + * @param options The validation options. + * @param options.messages The validation messages. + */ + +function type(rule, value, source, errors, options) { + if (rule.required && value === undefined) { + required(rule, value, source, errors, options); + return; + } + + var custom = ['integer', 'float', 'array', 'regexp', 'object', 'method', 'email', 'number', 'date', 'url', 'hex']; + var ruleType = rule.type; + + if (custom.indexOf(ruleType) > -1) { + if (!types[ruleType](value)) { + errors.push(format(options.messages.types[ruleType], rule.fullField, rule.type)); + } // straight typeof check + + } else if (ruleType && typeof value !== rule.type) { + errors.push(format(options.messages.types[ruleType], rule.fullField, rule.type)); + } +} + +/** + * Rule for validating minimum and maximum allowed values. + * + * @param rule The validation rule. + * @param value The value of the field on the source object. + * @param source The source object being validated. + * @param errors An array of errors that this rule may add + * validation errors to. + * @param options The validation options. + * @param options.messages The validation messages. + */ + +function range(rule, value, source, errors, options) { + var len = typeof rule.len === 'number'; + var min = typeof rule.min === 'number'; + var max = typeof rule.max === 'number'; // 正则匹配码点范围从U+010000一直到U+10FFFF的文字(补充平面Supplementary Plane) + + var spRegexp = /[\uD800-\uDBFF][\uDC00-\uDFFF]/g; + var val = value; + var key = null; + var num = typeof value === 'number'; + var str = typeof value === 'string'; + var arr = Array.isArray(value); + + if (num) { + key = 'number'; + } else if (str) { + key = 'string'; + } else if (arr) { + key = 'array'; + } // if the value is not of a supported type for range validation + // the validation rule rule should use the + // type property to also test for a particular type + + + if (!key) { + return false; + } + + if (arr) { + val = value.length; + } + + if (str) { + // 处理码点大于U+010000的文字length属性不准确的bug,如"𠮷𠮷𠮷".lenght !== 3 + val = value.replace(spRegexp, '_').length; + } + + if (len) { + if (val !== rule.len) { + errors.push(format(options.messages[key].len, rule.fullField, rule.len)); + } + } else if (min && !max && val < rule.min) { + errors.push(format(options.messages[key].min, rule.fullField, rule.min)); + } else if (max && !min && val > rule.max) { + errors.push(format(options.messages[key].max, rule.fullField, rule.max)); + } else if (min && max && (val < rule.min || val > rule.max)) { + errors.push(format(options.messages[key].range, rule.fullField, rule.min, rule.max)); + } +} + +var ENUM = 'enum'; +/** + * Rule for validating a value exists in an enumerable list. + * + * @param rule The validation rule. + * @param value The value of the field on the source object. + * @param source The source object being validated. + * @param errors An array of errors that this rule may add + * validation errors to. + * @param options The validation options. + * @param options.messages The validation messages. + */ + +function enumerable(rule, value, source, errors, options) { + rule[ENUM] = Array.isArray(rule[ENUM]) ? rule[ENUM] : []; + + if (rule[ENUM].indexOf(value) === -1) { + errors.push(format(options.messages[ENUM], rule.fullField, rule[ENUM].join(', '))); + } +} + +/** + * Rule for validating a regular expression pattern. + * + * @param rule The validation rule. + * @param value The value of the field on the source object. + * @param source The source object being validated. + * @param errors An array of errors that this rule may add + * validation errors to. + * @param options The validation options. + * @param options.messages The validation messages. + */ + +function pattern$1(rule, value, source, errors, options) { + if (rule.pattern) { + if (rule.pattern instanceof RegExp) { + // if a RegExp instance is passed, reset `lastIndex` in case its `global` + // flag is accidentally set to `true`, which in a validation scenario + // is not necessary and the result might be misleading + rule.pattern.lastIndex = 0; + + if (!rule.pattern.test(value)) { + errors.push(format(options.messages.pattern.mismatch, rule.fullField, value, rule.pattern)); + } + } else if (typeof rule.pattern === 'string') { + var _pattern = new RegExp(rule.pattern); + + if (!_pattern.test(value)) { + errors.push(format(options.messages.pattern.mismatch, rule.fullField, value, rule.pattern)); + } + } + } +} + +var rules = { + required: required, + whitespace: whitespace, + type: type, + range: range, + "enum": enumerable, + pattern: pattern$1 +}; + +/** + * Performs validation for string types. + * + * @param rule The validation rule. + * @param value The value of the field on the source object. + * @param callback The callback function. + * @param source The source object being validated. + * @param options The validation options. + * @param options.messages The validation messages. + */ + +function string(rule, value, callback, source, options) { + var errors = []; + var validate = rule.required || !rule.required && source.hasOwnProperty(rule.field); + + if (validate) { + if (isEmptyValue(value, 'string') && !rule.required) { + return callback(); + } + + rules.required(rule, value, source, errors, options, 'string'); + + if (!isEmptyValue(value, 'string')) { + rules.type(rule, value, source, errors, options); + rules.range(rule, value, source, errors, options); + rules.pattern(rule, value, source, errors, options); + + if (rule.whitespace === true) { + rules.whitespace(rule, value, source, errors, options); + } + } + } + + callback(errors); +} + +/** + * Validates a function. + * + * @param rule The validation rule. + * @param value The value of the field on the source object. + * @param callback The callback function. + * @param source The source object being validated. + * @param options The validation options. + * @param options.messages The validation messages. + */ + +function method(rule, value, callback, source, options) { + var errors = []; + var validate = rule.required || !rule.required && source.hasOwnProperty(rule.field); + + if (validate) { + if (isEmptyValue(value) && !rule.required) { + return callback(); + } + + rules.required(rule, value, source, errors, options); + + if (value !== undefined) { + rules.type(rule, value, source, errors, options); + } + } + + callback(errors); +} + +/** + * Validates a number. + * + * @param rule The validation rule. + * @param value The value of the field on the source object. + * @param callback The callback function. + * @param source The source object being validated. + * @param options The validation options. + * @param options.messages The validation messages. + */ + +function number(rule, value, callback, source, options) { + var errors = []; + var validate = rule.required || !rule.required && source.hasOwnProperty(rule.field); + + if (validate) { + if (value === '') { + value = undefined; + } + + if (isEmptyValue(value) && !rule.required) { + return callback(); + } + + rules.required(rule, value, source, errors, options); + + if (value !== undefined) { + rules.type(rule, value, source, errors, options); + rules.range(rule, value, source, errors, options); + } + } + + callback(errors); +} + +/** + * Validates a boolean. + * + * @param rule The validation rule. + * @param value The value of the field on the source object. + * @param callback The callback function. + * @param source The source object being validated. + * @param options The validation options. + * @param options.messages The validation messages. + */ + +function _boolean(rule, value, callback, source, options) { + var errors = []; + var validate = rule.required || !rule.required && source.hasOwnProperty(rule.field); + + if (validate) { + if (isEmptyValue(value) && !rule.required) { + return callback(); + } + + rules.required(rule, value, source, errors, options); + + if (value !== undefined) { + rules.type(rule, value, source, errors, options); + } + } + + callback(errors); +} + +/** + * Validates the regular expression type. + * + * @param rule The validation rule. + * @param value The value of the field on the source object. + * @param callback The callback function. + * @param source The source object being validated. + * @param options The validation options. + * @param options.messages The validation messages. + */ + +function regexp(rule, value, callback, source, options) { + var errors = []; + var validate = rule.required || !rule.required && source.hasOwnProperty(rule.field); + + if (validate) { + if (isEmptyValue(value) && !rule.required) { + return callback(); + } + + rules.required(rule, value, source, errors, options); + + if (!isEmptyValue(value)) { + rules.type(rule, value, source, errors, options); + } + } + + callback(errors); +} + +/** + * Validates a number is an integer. + * + * @param rule The validation rule. + * @param value The value of the field on the source object. + * @param callback The callback function. + * @param source The source object being validated. + * @param options The validation options. + * @param options.messages The validation messages. + */ + +function integer(rule, value, callback, source, options) { + var errors = []; + var validate = rule.required || !rule.required && source.hasOwnProperty(rule.field); + + if (validate) { + if (isEmptyValue(value) && !rule.required) { + return callback(); + } + + rules.required(rule, value, source, errors, options); + + if (value !== undefined) { + rules.type(rule, value, source, errors, options); + rules.range(rule, value, source, errors, options); + } + } + + callback(errors); +} + +/** + * Validates a number is a floating point number. + * + * @param rule The validation rule. + * @param value The value of the field on the source object. + * @param callback The callback function. + * @param source The source object being validated. + * @param options The validation options. + * @param options.messages The validation messages. + */ + +function floatFn(rule, value, callback, source, options) { + var errors = []; + var validate = rule.required || !rule.required && source.hasOwnProperty(rule.field); + + if (validate) { + if (isEmptyValue(value) && !rule.required) { + return callback(); + } + + rules.required(rule, value, source, errors, options); + + if (value !== undefined) { + rules.type(rule, value, source, errors, options); + rules.range(rule, value, source, errors, options); + } + } + + callback(errors); +} + +/** + * Validates an array. + * + * @param rule The validation rule. + * @param value The value of the field on the source object. + * @param callback The callback function. + * @param source The source object being validated. + * @param options The validation options. + * @param options.messages The validation messages. + */ + +function array(rule, value, callback, source, options) { + var errors = []; + var validate = rule.required || !rule.required && source.hasOwnProperty(rule.field); + + if (validate) { + if ((value === undefined || value === null) && !rule.required) { + return callback(); + } + + rules.required(rule, value, source, errors, options, 'array'); + + if (value !== undefined && value !== null) { + rules.type(rule, value, source, errors, options); + rules.range(rule, value, source, errors, options); + } + } + + callback(errors); +} + +/** + * Validates an object. + * + * @param rule The validation rule. + * @param value The value of the field on the source object. + * @param callback The callback function. + * @param source The source object being validated. + * @param options The validation options. + * @param options.messages The validation messages. + */ + +function object(rule, value, callback, source, options) { + var errors = []; + var validate = rule.required || !rule.required && source.hasOwnProperty(rule.field); + + if (validate) { + if (isEmptyValue(value) && !rule.required) { + return callback(); + } + + rules.required(rule, value, source, errors, options); + + if (value !== undefined) { + rules.type(rule, value, source, errors, options); + } + } + + callback(errors); +} + +var ENUM$1 = 'enum'; +/** + * Validates an enumerable list. + * + * @param rule The validation rule. + * @param value The value of the field on the source object. + * @param callback The callback function. + * @param source The source object being validated. + * @param options The validation options. + * @param options.messages The validation messages. + */ + +function enumerable$1(rule, value, callback, source, options) { + var errors = []; + var validate = rule.required || !rule.required && source.hasOwnProperty(rule.field); + + if (validate) { + if (isEmptyValue(value) && !rule.required) { + return callback(); + } + + rules.required(rule, value, source, errors, options); + + if (value !== undefined) { + rules[ENUM$1](rule, value, source, errors, options); + } + } + + callback(errors); +} + +/** + * Validates a regular expression pattern. + * + * Performs validation when a rule only contains + * a pattern property but is not declared as a string type. + * + * @param rule The validation rule. + * @param value The value of the field on the source object. + * @param callback The callback function. + * @param source The source object being validated. + * @param options The validation options. + * @param options.messages The validation messages. + */ + +function pattern$2(rule, value, callback, source, options) { + var errors = []; + var validate = rule.required || !rule.required && source.hasOwnProperty(rule.field); + + if (validate) { + if (isEmptyValue(value, 'string') && !rule.required) { + return callback(); + } + + rules.required(rule, value, source, errors, options); + + if (!isEmptyValue(value, 'string')) { + rules.pattern(rule, value, source, errors, options); + } + } + + callback(errors); +} + +function date(rule, value, callback, source, options) { + // console.log('integer rule called %j', rule); + var errors = []; + var validate = rule.required || !rule.required && source.hasOwnProperty(rule.field); // console.log('validate on %s value', value); + + if (validate) { + if (isEmptyValue(value, 'date') && !rule.required) { + return callback(); + } + + rules.required(rule, value, source, errors, options); + + if (!isEmptyValue(value, 'date')) { + var dateObject; + + if (value instanceof Date) { + dateObject = value; + } else { + dateObject = new Date(value); + } + + rules.type(rule, dateObject, source, errors, options); + + if (dateObject) { + rules.range(rule, dateObject.getTime(), source, errors, options); + } + } + } + + callback(errors); +} + +function required$1(rule, value, callback, source, options) { + var errors = []; + var type = Array.isArray(value) ? 'array' : typeof value; + rules.required(rule, value, source, errors, options, type); + callback(errors); +} + +function type$1(rule, value, callback, source, options) { + var ruleType = rule.type; + var errors = []; + var validate = rule.required || !rule.required && source.hasOwnProperty(rule.field); + + if (validate) { + if (isEmptyValue(value, ruleType) && !rule.required) { + return callback(); + } + + rules.required(rule, value, source, errors, options, ruleType); + + if (!isEmptyValue(value, ruleType)) { + rules.type(rule, value, source, errors, options); + } + } + + callback(errors); +} + +/** + * Performs validation for any type. + * + * @param rule The validation rule. + * @param value The value of the field on the source object. + * @param callback The callback function. + * @param source The source object being validated. + * @param options The validation options. + * @param options.messages The validation messages. + */ + +function any(rule, value, callback, source, options) { + var errors = []; + var validate = rule.required || !rule.required && source.hasOwnProperty(rule.field); + + if (validate) { + if (isEmptyValue(value) && !rule.required) { + return callback(); + } + + rules.required(rule, value, source, errors, options); + } + + callback(errors); +} + +var validators = { + string: string, + method: method, + number: number, + "boolean": _boolean, + regexp: regexp, + integer: integer, + "float": floatFn, + array: array, + object: object, + "enum": enumerable$1, + pattern: pattern$2, + date: date, + url: type$1, + hex: type$1, + email: type$1, + required: required$1, + any: any +}; + +function newMessages() { + return { + "default": 'Validation error on field %s', + required: '%s is required', + "enum": '%s must be one of %s', + whitespace: '%s cannot be empty', + date: { + format: '%s date %s is invalid for format %s', + parse: '%s date could not be parsed, %s is invalid ', + invalid: '%s date %s is invalid' + }, + types: { + string: '%s is not a %s', + method: '%s is not a %s (function)', + array: '%s is not an %s', + object: '%s is not an %s', + number: '%s is not a %s', + date: '%s is not a %s', + "boolean": '%s is not a %s', + integer: '%s is not an %s', + "float": '%s is not a %s', + regexp: '%s is not a valid %s', + email: '%s is not a valid %s', + url: '%s is not a valid %s', + hex: '%s is not a valid %s' + }, + string: { + len: '%s must be exactly %s characters', + min: '%s must be at least %s characters', + max: '%s cannot be longer than %s characters', + range: '%s must be between %s and %s characters' + }, + number: { + len: '%s must equal %s', + min: '%s cannot be less than %s', + max: '%s cannot be greater than %s', + range: '%s must be between %s and %s' + }, + array: { + len: '%s must be exactly %s in length', + min: '%s cannot be less than %s in length', + max: '%s cannot be greater than %s in length', + range: '%s must be between %s and %s in length' + }, + pattern: { + mismatch: '%s value %s does not match pattern %s' + }, + clone: function clone() { + var cloned = JSON.parse(JSON.stringify(this)); + cloned.clone = this.clone; + return cloned; + } + }; +} +var messages = newMessages(); + +/** + * Encapsulates a validation schema. + * + * @param descriptor An object declaring validation rules + * for this schema. + */ + +function Schema(descriptor) { + this.rules = null; + this._messages = messages; + this.define(descriptor); +} + +Schema.prototype = { + messages: function messages(_messages) { + if (_messages) { + this._messages = deepMerge(newMessages(), _messages); + } + + return this._messages; + }, + define: function define(rules) { + if (!rules) { + throw new Error('Cannot configure a schema with no rules'); + } + + if (typeof rules !== 'object' || Array.isArray(rules)) { + throw new Error('Rules must be an object'); + } + + this.rules = {}; + var z; + var item; + + for (z in rules) { + if (rules.hasOwnProperty(z)) { + item = rules[z]; + this.rules[z] = Array.isArray(item) ? item : [item]; + } + } + }, + validate: function validate(source_, o, oc) { + var _this = this; + + if (o === void 0) { + o = {}; + } + + if (oc === void 0) { + oc = function oc() {}; + } + + var source = source_; + var options = o; + var callback = oc; + + if (typeof options === 'function') { + callback = options; + options = {}; + } + + if (!this.rules || Object.keys(this.rules).length === 0) { + if (callback) { + callback(); + } + + return Promise.resolve(); + } + + function complete(results) { + var i; + var errors = []; + var fields = {}; + + function add(e) { + if (Array.isArray(e)) { + var _errors; + + errors = (_errors = errors).concat.apply(_errors, e); + } else { + errors.push(e); + } + } + + for (i = 0; i < results.length; i++) { + add(results[i]); + } + + if (!errors.length) { + errors = null; + fields = null; + } else { + fields = convertFieldsError(errors); + } + + callback(errors, fields); + } + + if (options.messages) { + var messages$1 = this.messages(); + + if (messages$1 === messages) { + messages$1 = newMessages(); + } + + deepMerge(messages$1, options.messages); + options.messages = messages$1; + } else { + options.messages = this.messages(); + } + + var arr; + var value; + var series = {}; + var keys = options.keys || Object.keys(this.rules); + keys.forEach(function (z) { + arr = _this.rules[z]; + value = source[z]; + arr.forEach(function (r) { + var rule = r; + + if (typeof rule.transform === 'function') { + if (source === source_) { + source = _extends({}, source); + } + + value = source[z] = rule.transform(value); + } + + if (typeof rule === 'function') { + rule = { + validator: rule + }; + } else { + rule = _extends({}, rule); + } + + rule.validator = _this.getValidationMethod(rule); + rule.field = z; + rule.fullField = rule.fullField || z; + rule.type = _this.getType(rule); + + if (!rule.validator) { + return; + } + + series[z] = series[z] || []; + series[z].push({ + rule: rule, + value: value, + source: source, + field: z + }); + }); + }); + var errorFields = {}; + return asyncMap(series, options, function (data, doIt) { + var rule = data.rule; + var deep = (rule.type === 'object' || rule.type === 'array') && (typeof rule.fields === 'object' || typeof rule.defaultField === 'object'); + deep = deep && (rule.required || !rule.required && data.value); + rule.field = data.field; + + function addFullfield(key, schema) { + return _extends(_extends({}, schema), {}, { + fullField: rule.fullField + "." + key + }); + } + + function cb(e) { + if (e === void 0) { + e = []; + } + + var errors = e; + + if (!Array.isArray(errors)) { + errors = [errors]; + } + + if (!options.suppressWarning && errors.length) { + Schema.warning('async-validator:', errors); + } + + if (errors.length && rule.message !== undefined) { + errors = [].concat(rule.message); + } + + errors = errors.map(complementError(rule)); + + if (options.first && errors.length) { + errorFields[rule.field] = 1; + return doIt(errors); + } + + if (!deep) { + doIt(errors); + } else { + // if rule is required but the target object + // does not exist fail at the rule level and don't + // go deeper + if (rule.required && !data.value) { + if (rule.message !== undefined) { + errors = [].concat(rule.message).map(complementError(rule)); + } else if (options.error) { + errors = [options.error(rule, format(options.messages.required, rule.field))]; + } + + return doIt(errors); + } + + var fieldsSchema = {}; + + if (rule.defaultField) { + for (var k in data.value) { + if (data.value.hasOwnProperty(k)) { + fieldsSchema[k] = rule.defaultField; + } + } + } + + fieldsSchema = _extends(_extends({}, fieldsSchema), data.rule.fields); + + for (var f in fieldsSchema) { + if (fieldsSchema.hasOwnProperty(f)) { + var fieldSchema = Array.isArray(fieldsSchema[f]) ? fieldsSchema[f] : [fieldsSchema[f]]; + fieldsSchema[f] = fieldSchema.map(addFullfield.bind(null, f)); + } + } + + var schema = new Schema(fieldsSchema); + schema.messages(options.messages); + + if (data.rule.options) { + data.rule.options.messages = options.messages; + data.rule.options.error = options.error; + } + + schema.validate(data.value, data.rule.options || options, function (errs) { + var finalErrors = []; + + if (errors && errors.length) { + finalErrors.push.apply(finalErrors, errors); + } + + if (errs && errs.length) { + finalErrors.push.apply(finalErrors, errs); + } + + doIt(finalErrors.length ? finalErrors : null); + }); + } + } + + var res; + + if (rule.asyncValidator) { + res = rule.asyncValidator(rule, data.value, cb, data.source, options); + } else if (rule.validator) { + res = rule.validator(rule, data.value, cb, data.source, options); + + if (res === true) { + cb(); + } else if (res === false) { + cb(rule.message || rule.field + " fails"); + } else if (res instanceof Array) { + cb(res); + } else if (res instanceof Error) { + cb(res.message); + } + } + + if (res && res.then) { + res.then(function () { + return cb(); + }, function (e) { + return cb(e); + }); + } + }, function (results) { + complete(results); + }); + }, + getType: function getType(rule) { + if (rule.type === undefined && rule.pattern instanceof RegExp) { + rule.type = 'pattern'; + } + + if (typeof rule.validator !== 'function' && rule.type && !validators.hasOwnProperty(rule.type)) { + throw new Error(format('Unknown rule type %s', rule.type)); + } + + return rule.type || 'string'; + }, + getValidationMethod: function getValidationMethod(rule) { + if (typeof rule.validator === 'function') { + return rule.validator; + } + + var keys = Object.keys(rule); + var messageIndex = keys.indexOf('message'); + + if (messageIndex !== -1) { + keys.splice(messageIndex, 1); + } + + if (keys.length === 1 && keys[0] === 'required') { + return validators.required; + } + + return validators[this.getType(rule)] || false; + } +}; + +Schema.register = function register(type, validator) { + if (typeof validator !== 'function') { + throw new Error('Cannot register a validator by type, validator is not a function'); + } + + validators[type] = validator; +}; + +Schema.warning = warning; +Schema.messages = messages; +Schema.validators = validators; + +export default Schema; +//# sourceMappingURL=index.js.map diff --git a/node_modules/async-validator/dist-web/index.js.map b/node_modules/async-validator/dist-web/index.js.map new file mode 100644 index 0000000..d1e75c7 --- /dev/null +++ b/node_modules/async-validator/dist-web/index.js.map @@ -0,0 +1 @@ +{"version":3,"file":"index.js","sources":["../../src/util.js","../../src/rule/required.js","../../src/rule/whitespace.js","../../src/rule/type.js","../../src/rule/range.js","../../src/rule/enum.js","../../src/rule/pattern.js","../../src/rule/index.js","../../src/validator/string.js","../../src/validator/method.js","../../src/validator/number.js","../../src/validator/boolean.js","../../src/validator/regexp.js","../../src/validator/integer.js","../../src/validator/float.js","../../src/validator/array.js","../../src/validator/object.js","../../src/validator/enum.js","../../src/validator/pattern.js","../../src/validator/date.js","../../src/validator/required.js","../../src/validator/type.js","../../src/validator/any.js","../../src/validator/index.js","../../src/messages.js","../../src/index.js"],"sourcesContent":["/* eslint no-console:0 */\n\nconst formatRegExp = /%[sdj%]/g;\n\nexport let warning = () => {};\n\n// don't print warning message when in production env or node runtime\nif (\n typeof process !== 'undefined' &&\n process.env &&\n process.env.NODE_ENV !== 'production' &&\n typeof window !== 'undefined' &&\n typeof document !== 'undefined'\n) {\n warning = (type, errors) => {\n if (typeof console !== 'undefined' && console.warn) {\n if (errors.every(e => typeof e === 'string')) {\n console.warn(type, errors);\n }\n }\n };\n}\n\nexport function convertFieldsError(errors) {\n if (!errors || !errors.length) return null;\n const fields = {};\n errors.forEach(error => {\n const field = error.field;\n fields[field] = fields[field] || [];\n fields[field].push(error);\n });\n return fields;\n}\n\nexport function format(...args) {\n let i = 1;\n const f = args[0];\n const len = args.length;\n if (typeof f === 'function') {\n return f.apply(null, args.slice(1));\n }\n if (typeof f === 'string') {\n let str = String(f).replace(formatRegExp, x => {\n if (x === '%%') {\n return '%';\n }\n if (i >= len) {\n return x;\n }\n switch (x) {\n case '%s':\n return String(args[i++]);\n case '%d':\n return Number(args[i++]);\n case '%j':\n try {\n return JSON.stringify(args[i++]);\n } catch (_) {\n return '[Circular]';\n }\n break;\n default:\n return x;\n }\n });\n return str;\n }\n return f;\n}\n\nfunction isNativeStringType(type) {\n return (\n type === 'string' ||\n type === 'url' ||\n type === 'hex' ||\n type === 'email' ||\n type === 'date' ||\n type === 'pattern'\n );\n}\n\nexport function isEmptyValue(value, type) {\n if (value === undefined || value === null) {\n return true;\n }\n if (type === 'array' && Array.isArray(value) && !value.length) {\n return true;\n }\n if (isNativeStringType(type) && typeof value === 'string' && !value) {\n return true;\n }\n return false;\n}\n\nexport function isEmptyObject(obj) {\n return Object.keys(obj).length === 0;\n}\n\nfunction asyncParallelArray(arr, func, callback) {\n const results = [];\n let total = 0;\n const arrLength = arr.length;\n\n function count(errors) {\n results.push.apply(results, errors);\n total++;\n if (total === arrLength) {\n callback(results);\n }\n }\n\n arr.forEach(a => {\n func(a, count);\n });\n}\n\nfunction asyncSerialArray(arr, func, callback) {\n let index = 0;\n const arrLength = arr.length;\n\n function next(errors) {\n if (errors && errors.length) {\n callback(errors);\n return;\n }\n const original = index;\n index = index + 1;\n if (original < arrLength) {\n func(arr[original], next);\n } else {\n callback([]);\n }\n }\n\n next([]);\n}\n\nfunction flattenObjArr(objArr) {\n const ret = [];\n Object.keys(objArr).forEach(k => {\n ret.push.apply(ret, objArr[k]);\n });\n return ret;\n}\n\nexport class AsyncValidationError extends Error {\n constructor(errors, fields) {\n super('Async Validation Error');\n this.errors = errors;\n this.fields = fields;\n }\n}\n\nexport function asyncMap(objArr, option, func, callback) {\n if (option.first) {\n const pending = new Promise((resolve, reject) => {\n const next = errors => {\n callback(errors);\n return errors.length\n ? reject(new AsyncValidationError(errors, convertFieldsError(errors)))\n : resolve();\n };\n const flattenArr = flattenObjArr(objArr);\n asyncSerialArray(flattenArr, func, next);\n });\n pending.catch(e => e);\n return pending;\n }\n let firstFields = option.firstFields || [];\n if (firstFields === true) {\n firstFields = Object.keys(objArr);\n }\n const objArrKeys = Object.keys(objArr);\n const objArrLength = objArrKeys.length;\n let total = 0;\n const results = [];\n const pending = new Promise((resolve, reject) => {\n const next = errors => {\n results.push.apply(results, errors);\n total++;\n if (total === objArrLength) {\n callback(results);\n return results.length\n ? reject(\n new AsyncValidationError(results, convertFieldsError(results)),\n )\n : resolve();\n }\n };\n if (!objArrKeys.length) {\n callback(results);\n resolve();\n }\n objArrKeys.forEach(key => {\n const arr = objArr[key];\n if (firstFields.indexOf(key) !== -1) {\n asyncSerialArray(arr, func, next);\n } else {\n asyncParallelArray(arr, func, next);\n }\n });\n });\n pending.catch(e => e);\n return pending;\n}\n\nexport function complementError(rule) {\n return oe => {\n if (oe && oe.message) {\n oe.field = oe.field || rule.fullField;\n return oe;\n }\n return {\n message: typeof oe === 'function' ? oe() : oe,\n field: oe.field || rule.fullField,\n };\n };\n}\n\nexport function deepMerge(target, source) {\n if (source) {\n for (const s in source) {\n if (source.hasOwnProperty(s)) {\n const value = source[s];\n if (typeof value === 'object' && typeof target[s] === 'object') {\n target[s] = {\n ...target[s],\n ...value,\n };\n } else {\n target[s] = value;\n }\n }\n }\n }\n return target;\n}\n","import * as util from '../util';\n\n/**\n * Rule for validating required fields.\n *\n * @param rule The validation rule.\n * @param value The value of the field on the source object.\n * @param source The source object being validated.\n * @param errors An array of errors that this rule may add\n * validation errors to.\n * @param options The validation options.\n * @param options.messages The validation messages.\n */\nfunction required(rule, value, source, errors, options, type) {\n if (\n rule.required &&\n (!source.hasOwnProperty(rule.field) ||\n util.isEmptyValue(value, type || rule.type))\n ) {\n errors.push(util.format(options.messages.required, rule.fullField));\n }\n}\n\nexport default required;\n","import * as util from '../util';\n\n/**\n * Rule for validating whitespace.\n *\n * @param rule The validation rule.\n * @param value The value of the field on the source object.\n * @param source The source object being validated.\n * @param errors An array of errors that this rule may add\n * validation errors to.\n * @param options The validation options.\n * @param options.messages The validation messages.\n */\nfunction whitespace(rule, value, source, errors, options) {\n if (/^\\s+$/.test(value) || value === '') {\n errors.push(util.format(options.messages.whitespace, rule.fullField));\n }\n}\n\nexport default whitespace;\n","import * as util from '../util';\nimport required from './required';\n\n/* eslint max-len:0 */\n\nconst pattern = {\n // http://emailregex.com/\n email: /^(([^<>()\\[\\]\\\\.,;:\\s@\"]+(\\.[^<>()\\[\\]\\\\.,;:\\s@\"]+)*)|(\".+\"))@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}])|(([a-zA-Z\\-0-9]+\\.)+[a-zA-Z]{2,}))$/,\n url: new RegExp(\n '^(?!mailto:)(?:(?:http|https|ftp)://|//)(?:\\\\S+(?::\\\\S*)?@)?(?:(?:(?:[1-9]\\\\d?|1\\\\d\\\\d|2[01]\\\\d|22[0-3])(?:\\\\.(?:1?\\\\d{1,2}|2[0-4]\\\\d|25[0-5])){2}(?:\\\\.(?:[0-9]\\\\d?|1\\\\d\\\\d|2[0-4]\\\\d|25[0-4]))|(?:(?:[a-z\\\\u00a1-\\\\uffff0-9]+-*)*[a-z\\\\u00a1-\\\\uffff0-9]+)(?:\\\\.(?:[a-z\\\\u00a1-\\\\uffff0-9]+-*)*[a-z\\\\u00a1-\\\\uffff0-9]+)*(?:\\\\.(?:[a-z\\\\u00a1-\\\\uffff]{2,})))|localhost)(?::\\\\d{2,5})?(?:(/|\\\\?|#)[^\\\\s]*)?$',\n 'i',\n ),\n hex: /^#?([a-f0-9]{6}|[a-f0-9]{3})$/i,\n};\n\nconst types = {\n integer(value) {\n return types.number(value) && parseInt(value, 10) === value;\n },\n float(value) {\n return types.number(value) && !types.integer(value);\n },\n array(value) {\n return Array.isArray(value);\n },\n regexp(value) {\n if (value instanceof RegExp) {\n return true;\n }\n try {\n return !!new RegExp(value);\n } catch (e) {\n return false;\n }\n },\n date(value) {\n return (\n typeof value.getTime === 'function' &&\n typeof value.getMonth === 'function' &&\n typeof value.getYear === 'function' &&\n !isNaN(value.getTime())\n );\n },\n number(value) {\n if (isNaN(value)) {\n return false;\n }\n return typeof value === 'number';\n },\n object(value) {\n return typeof value === 'object' && !types.array(value);\n },\n method(value) {\n return typeof value === 'function';\n },\n email(value) {\n return (\n typeof value === 'string' &&\n !!value.match(pattern.email) &&\n value.length < 255\n );\n },\n url(value) {\n return typeof value === 'string' && !!value.match(pattern.url);\n },\n hex(value) {\n return typeof value === 'string' && !!value.match(pattern.hex);\n },\n};\n\n/**\n * Rule for validating the type of a value.\n *\n * @param rule The validation rule.\n * @param value The value of the field on the source object.\n * @param source The source object being validated.\n * @param errors An array of errors that this rule may add\n * validation errors to.\n * @param options The validation options.\n * @param options.messages The validation messages.\n */\nfunction type(rule, value, source, errors, options) {\n if (rule.required && value === undefined) {\n required(rule, value, source, errors, options);\n return;\n }\n const custom = [\n 'integer',\n 'float',\n 'array',\n 'regexp',\n 'object',\n 'method',\n 'email',\n 'number',\n 'date',\n 'url',\n 'hex',\n ];\n const ruleType = rule.type;\n if (custom.indexOf(ruleType) > -1) {\n if (!types[ruleType](value)) {\n errors.push(\n util.format(\n options.messages.types[ruleType],\n rule.fullField,\n rule.type,\n ),\n );\n }\n // straight typeof check\n } else if (ruleType && typeof value !== rule.type) {\n errors.push(\n util.format(options.messages.types[ruleType], rule.fullField, rule.type),\n );\n }\n}\n\nexport default type;\n","import * as util from '../util';\n\n/**\n * Rule for validating minimum and maximum allowed values.\n *\n * @param rule The validation rule.\n * @param value The value of the field on the source object.\n * @param source The source object being validated.\n * @param errors An array of errors that this rule may add\n * validation errors to.\n * @param options The validation options.\n * @param options.messages The validation messages.\n */\nfunction range(rule, value, source, errors, options) {\n const len = typeof rule.len === 'number';\n const min = typeof rule.min === 'number';\n const max = typeof rule.max === 'number';\n // 正则匹配码点范围从U+010000一直到U+10FFFF的文字(补充平面Supplementary Plane)\n const spRegexp = /[\\uD800-\\uDBFF][\\uDC00-\\uDFFF]/g;\n let val = value;\n let key = null;\n const num = typeof value === 'number';\n const str = typeof value === 'string';\n const arr = Array.isArray(value);\n if (num) {\n key = 'number';\n } else if (str) {\n key = 'string';\n } else if (arr) {\n key = 'array';\n }\n // if the value is not of a supported type for range validation\n // the validation rule rule should use the\n // type property to also test for a particular type\n if (!key) {\n return false;\n }\n if (arr) {\n val = value.length;\n }\n if (str) {\n // 处理码点大于U+010000的文字length属性不准确的bug,如\"𠮷𠮷𠮷\".lenght !== 3\n val = value.replace(spRegexp, '_').length;\n }\n if (len) {\n if (val !== rule.len) {\n errors.push(\n util.format(options.messages[key].len, rule.fullField, rule.len),\n );\n }\n } else if (min && !max && val < rule.min) {\n errors.push(\n util.format(options.messages[key].min, rule.fullField, rule.min),\n );\n } else if (max && !min && val > rule.max) {\n errors.push(\n util.format(options.messages[key].max, rule.fullField, rule.max),\n );\n } else if (min && max && (val < rule.min || val > rule.max)) {\n errors.push(\n util.format(\n options.messages[key].range,\n rule.fullField,\n rule.min,\n rule.max,\n ),\n );\n }\n}\n\nexport default range;\n","import * as util from '../util';\n\nconst ENUM = 'enum';\n\n/**\n * Rule for validating a value exists in an enumerable list.\n *\n * @param rule The validation rule.\n * @param value The value of the field on the source object.\n * @param source The source object being validated.\n * @param errors An array of errors that this rule may add\n * validation errors to.\n * @param options The validation options.\n * @param options.messages The validation messages.\n */\nfunction enumerable(rule, value, source, errors, options) {\n rule[ENUM] = Array.isArray(rule[ENUM]) ? rule[ENUM] : [];\n if (rule[ENUM].indexOf(value) === -1) {\n errors.push(\n util.format(\n options.messages[ENUM],\n rule.fullField,\n rule[ENUM].join(', '),\n ),\n );\n }\n}\n\nexport default enumerable;\n","import * as util from '../util';\n\n/**\n * Rule for validating a regular expression pattern.\n *\n * @param rule The validation rule.\n * @param value The value of the field on the source object.\n * @param source The source object being validated.\n * @param errors An array of errors that this rule may add\n * validation errors to.\n * @param options The validation options.\n * @param options.messages The validation messages.\n */\nfunction pattern(rule, value, source, errors, options) {\n if (rule.pattern) {\n if (rule.pattern instanceof RegExp) {\n // if a RegExp instance is passed, reset `lastIndex` in case its `global`\n // flag is accidentally set to `true`, which in a validation scenario\n // is not necessary and the result might be misleading\n rule.pattern.lastIndex = 0;\n if (!rule.pattern.test(value)) {\n errors.push(\n util.format(\n options.messages.pattern.mismatch,\n rule.fullField,\n value,\n rule.pattern,\n ),\n );\n }\n } else if (typeof rule.pattern === 'string') {\n const _pattern = new RegExp(rule.pattern);\n if (!_pattern.test(value)) {\n errors.push(\n util.format(\n options.messages.pattern.mismatch,\n rule.fullField,\n value,\n rule.pattern,\n ),\n );\n }\n }\n }\n}\n\nexport default pattern;\n","import required from './required';\nimport whitespace from './whitespace';\nimport type from './type';\nimport range from './range';\nimport enumRule from './enum';\nimport pattern from './pattern';\n\nexport default {\n required,\n whitespace,\n type,\n range,\n enum: enumRule,\n pattern,\n};\n","import rules from '../rule/index.js';\nimport { isEmptyValue } from '../util';\n\n/**\n * Performs validation for string types.\n *\n * @param rule The validation rule.\n * @param value The value of the field on the source object.\n * @param callback The callback function.\n * @param source The source object being validated.\n * @param options The validation options.\n * @param options.messages The validation messages.\n */\nfunction string(rule, value, callback, source, options) {\n const errors = [];\n const validate =\n rule.required || (!rule.required && source.hasOwnProperty(rule.field));\n if (validate) {\n if (isEmptyValue(value, 'string') && !rule.required) {\n return callback();\n }\n rules.required(rule, value, source, errors, options, 'string');\n if (!isEmptyValue(value, 'string')) {\n rules.type(rule, value, source, errors, options);\n rules.range(rule, value, source, errors, options);\n rules.pattern(rule, value, source, errors, options);\n if (rule.whitespace === true) {\n rules.whitespace(rule, value, source, errors, options);\n }\n }\n }\n callback(errors);\n}\n\nexport default string;\n","import rules from '../rule/index.js';\nimport { isEmptyValue } from '../util';\n\n/**\n * Validates a function.\n *\n * @param rule The validation rule.\n * @param value The value of the field on the source object.\n * @param callback The callback function.\n * @param source The source object being validated.\n * @param options The validation options.\n * @param options.messages The validation messages.\n */\nfunction method(rule, value, callback, source, options) {\n const errors = [];\n const validate =\n rule.required || (!rule.required && source.hasOwnProperty(rule.field));\n if (validate) {\n if (isEmptyValue(value) && !rule.required) {\n return callback();\n }\n rules.required(rule, value, source, errors, options);\n if (value !== undefined) {\n rules.type(rule, value, source, errors, options);\n }\n }\n callback(errors);\n}\n\nexport default method;\n","import rules from '../rule/index.js';\nimport { isEmptyValue } from '../util';\n\n/**\n * Validates a number.\n *\n * @param rule The validation rule.\n * @param value The value of the field on the source object.\n * @param callback The callback function.\n * @param source The source object being validated.\n * @param options The validation options.\n * @param options.messages The validation messages.\n */\nfunction number(rule, value, callback, source, options) {\n const errors = [];\n const validate =\n rule.required || (!rule.required && source.hasOwnProperty(rule.field));\n if (validate) {\n if (value === '') {\n value = undefined;\n }\n if (isEmptyValue(value) && !rule.required) {\n return callback();\n }\n rules.required(rule, value, source, errors, options);\n if (value !== undefined) {\n rules.type(rule, value, source, errors, options);\n rules.range(rule, value, source, errors, options);\n }\n }\n callback(errors);\n}\n\nexport default number;\n","import { isEmptyValue } from '../util';\nimport rules from '../rule/index.js';\n\n/**\n * Validates a boolean.\n *\n * @param rule The validation rule.\n * @param value The value of the field on the source object.\n * @param callback The callback function.\n * @param source The source object being validated.\n * @param options The validation options.\n * @param options.messages The validation messages.\n */\nfunction boolean(rule, value, callback, source, options) {\n const errors = [];\n const validate =\n rule.required || (!rule.required && source.hasOwnProperty(rule.field));\n if (validate) {\n if (isEmptyValue(value) && !rule.required) {\n return callback();\n }\n rules.required(rule, value, source, errors, options);\n if (value !== undefined) {\n rules.type(rule, value, source, errors, options);\n }\n }\n callback(errors);\n}\n\nexport default boolean;\n","import rules from '../rule/index.js';\nimport { isEmptyValue } from '../util';\n\n/**\n * Validates the regular expression type.\n *\n * @param rule The validation rule.\n * @param value The value of the field on the source object.\n * @param callback The callback function.\n * @param source The source object being validated.\n * @param options The validation options.\n * @param options.messages The validation messages.\n */\nfunction regexp(rule, value, callback, source, options) {\n const errors = [];\n const validate =\n rule.required || (!rule.required && source.hasOwnProperty(rule.field));\n if (validate) {\n if (isEmptyValue(value) && !rule.required) {\n return callback();\n }\n rules.required(rule, value, source, errors, options);\n if (!isEmptyValue(value)) {\n rules.type(rule, value, source, errors, options);\n }\n }\n callback(errors);\n}\n\nexport default regexp;\n","import rules from '../rule/index.js';\nimport { isEmptyValue } from '../util';\n\n/**\n * Validates a number is an integer.\n *\n * @param rule The validation rule.\n * @param value The value of the field on the source object.\n * @param callback The callback function.\n * @param source The source object being validated.\n * @param options The validation options.\n * @param options.messages The validation messages.\n */\nfunction integer(rule, value, callback, source, options) {\n const errors = [];\n const validate =\n rule.required || (!rule.required && source.hasOwnProperty(rule.field));\n if (validate) {\n if (isEmptyValue(value) && !rule.required) {\n return callback();\n }\n rules.required(rule, value, source, errors, options);\n if (value !== undefined) {\n rules.type(rule, value, source, errors, options);\n rules.range(rule, value, source, errors, options);\n }\n }\n callback(errors);\n}\n\nexport default integer;\n","import rules from '../rule/index.js';\nimport { isEmptyValue } from '../util';\n\n/**\n * Validates a number is a floating point number.\n *\n * @param rule The validation rule.\n * @param value The value of the field on the source object.\n * @param callback The callback function.\n * @param source The source object being validated.\n * @param options The validation options.\n * @param options.messages The validation messages.\n */\nfunction floatFn(rule, value, callback, source, options) {\n const errors = [];\n const validate =\n rule.required || (!rule.required && source.hasOwnProperty(rule.field));\n if (validate) {\n if (isEmptyValue(value) && !rule.required) {\n return callback();\n }\n rules.required(rule, value, source, errors, options);\n if (value !== undefined) {\n rules.type(rule, value, source, errors, options);\n rules.range(rule, value, source, errors, options);\n }\n }\n callback(errors);\n}\n\nexport default floatFn;\n","import rules from '../rule/index';\nimport { isEmptyValue } from '../util';\n/**\n * Validates an array.\n *\n * @param rule The validation rule.\n * @param value The value of the field on the source object.\n * @param callback The callback function.\n * @param source The source object being validated.\n * @param options The validation options.\n * @param options.messages The validation messages.\n */\nfunction array(rule, value, callback, source, options) {\n const errors = [];\n const validate =\n rule.required || (!rule.required && source.hasOwnProperty(rule.field));\n if (validate) {\n if ((value === undefined || value === null) && !rule.required) {\n return callback();\n }\n rules.required(rule, value, source, errors, options, 'array');\n if (value !== undefined && value !== null) {\n rules.type(rule, value, source, errors, options);\n rules.range(rule, value, source, errors, options);\n }\n }\n callback(errors);\n}\n\nexport default array;\n","import rules from '../rule/index.js';\nimport { isEmptyValue } from '../util';\n\n/**\n * Validates an object.\n *\n * @param rule The validation rule.\n * @param value The value of the field on the source object.\n * @param callback The callback function.\n * @param source The source object being validated.\n * @param options The validation options.\n * @param options.messages The validation messages.\n */\nfunction object(rule, value, callback, source, options) {\n const errors = [];\n const validate =\n rule.required || (!rule.required && source.hasOwnProperty(rule.field));\n if (validate) {\n if (isEmptyValue(value) && !rule.required) {\n return callback();\n }\n rules.required(rule, value, source, errors, options);\n if (value !== undefined) {\n rules.type(rule, value, source, errors, options);\n }\n }\n callback(errors);\n}\n\nexport default object;\n","import rules from '../rule/index.js';\nimport { isEmptyValue } from '../util';\n\nconst ENUM = 'enum';\n\n/**\n * Validates an enumerable list.\n *\n * @param rule The validation rule.\n * @param value The value of the field on the source object.\n * @param callback The callback function.\n * @param source The source object being validated.\n * @param options The validation options.\n * @param options.messages The validation messages.\n */\nfunction enumerable(rule, value, callback, source, options) {\n const errors = [];\n const validate =\n rule.required || (!rule.required && source.hasOwnProperty(rule.field));\n if (validate) {\n if (isEmptyValue(value) && !rule.required) {\n return callback();\n }\n rules.required(rule, value, source, errors, options);\n if (value !== undefined) {\n rules[ENUM](rule, value, source, errors, options);\n }\n }\n callback(errors);\n}\n\nexport default enumerable;\n","import rules from '../rule/index.js';\nimport { isEmptyValue } from '../util';\n\n/**\n * Validates a regular expression pattern.\n *\n * Performs validation when a rule only contains\n * a pattern property but is not declared as a string type.\n *\n * @param rule The validation rule.\n * @param value The value of the field on the source object.\n * @param callback The callback function.\n * @param source The source object being validated.\n * @param options The validation options.\n * @param options.messages The validation messages.\n */\nfunction pattern(rule, value, callback, source, options) {\n const errors = [];\n const validate =\n rule.required || (!rule.required && source.hasOwnProperty(rule.field));\n if (validate) {\n if (isEmptyValue(value, 'string') && !rule.required) {\n return callback();\n }\n rules.required(rule, value, source, errors, options);\n if (!isEmptyValue(value, 'string')) {\n rules.pattern(rule, value, source, errors, options);\n }\n }\n callback(errors);\n}\n\nexport default pattern;\n","import rules from '../rule/index.js';\nimport { isEmptyValue } from '../util';\n\nfunction date(rule, value, callback, source, options) {\n // console.log('integer rule called %j', rule);\n const errors = [];\n const validate =\n rule.required || (!rule.required && source.hasOwnProperty(rule.field));\n // console.log('validate on %s value', value);\n if (validate) {\n if (isEmptyValue(value, 'date') && !rule.required) {\n return callback();\n }\n rules.required(rule, value, source, errors, options);\n if (!isEmptyValue(value, 'date')) {\n let dateObject;\n\n if (value instanceof Date) {\n dateObject = value;\n } else {\n dateObject = new Date(value);\n }\n\n rules.type(rule, dateObject, source, errors, options);\n if (dateObject) {\n rules.range(rule, dateObject.getTime(), source, errors, options);\n }\n }\n }\n callback(errors);\n}\n\nexport default date;\n","import rules from '../rule/index.js';\n\nfunction required(rule, value, callback, source, options) {\n const errors = [];\n const type = Array.isArray(value) ? 'array' : typeof value;\n rules.required(rule, value, source, errors, options, type);\n callback(errors);\n}\n\nexport default required;\n","import rules from '../rule/index.js';\nimport { isEmptyValue } from '../util';\n\nfunction type(rule, value, callback, source, options) {\n const ruleType = rule.type;\n const errors = [];\n const validate =\n rule.required || (!rule.required && source.hasOwnProperty(rule.field));\n if (validate) {\n if (isEmptyValue(value, ruleType) && !rule.required) {\n return callback();\n }\n rules.required(rule, value, source, errors, options, ruleType);\n if (!isEmptyValue(value, ruleType)) {\n rules.type(rule, value, source, errors, options);\n }\n }\n callback(errors);\n}\n\nexport default type;\n","import rules from '../rule/index.js';\nimport { isEmptyValue } from '../util';\n\n/**\n * Performs validation for any type.\n *\n * @param rule The validation rule.\n * @param value The value of the field on the source object.\n * @param callback The callback function.\n * @param source The source object being validated.\n * @param options The validation options.\n * @param options.messages The validation messages.\n */\nfunction any(rule, value, callback, source, options) {\n const errors = [];\n const validate =\n rule.required || (!rule.required && source.hasOwnProperty(rule.field));\n if (validate) {\n if (isEmptyValue(value) && !rule.required) {\n return callback();\n }\n rules.required(rule, value, source, errors, options);\n }\n callback(errors);\n}\n\nexport default any;\n","import string from './string';\nimport method from './method';\nimport number from './number';\nimport boolean from './boolean';\nimport regexp from './regexp';\nimport integer from './integer';\nimport float from './float';\nimport array from './array';\nimport object from './object';\nimport enumValidator from './enum';\nimport pattern from './pattern';\nimport date from './date';\nimport required from './required';\nimport type from './type';\nimport any from './any';\n\nexport default {\n string,\n method,\n number,\n boolean,\n regexp,\n integer,\n float,\n array,\n object,\n enum: enumValidator,\n pattern,\n date,\n url: type,\n hex: type,\n email: type,\n required,\n any,\n};\n","export function newMessages() {\n return {\n default: 'Validation error on field %s',\n required: '%s is required',\n enum: '%s must be one of %s',\n whitespace: '%s cannot be empty',\n date: {\n format: '%s date %s is invalid for format %s',\n parse: '%s date could not be parsed, %s is invalid ',\n invalid: '%s date %s is invalid',\n },\n types: {\n string: '%s is not a %s',\n method: '%s is not a %s (function)',\n array: '%s is not an %s',\n object: '%s is not an %s',\n number: '%s is not a %s',\n date: '%s is not a %s',\n boolean: '%s is not a %s',\n integer: '%s is not an %s',\n float: '%s is not a %s',\n regexp: '%s is not a valid %s',\n email: '%s is not a valid %s',\n url: '%s is not a valid %s',\n hex: '%s is not a valid %s',\n },\n string: {\n len: '%s must be exactly %s characters',\n min: '%s must be at least %s characters',\n max: '%s cannot be longer than %s characters',\n range: '%s must be between %s and %s characters',\n },\n number: {\n len: '%s must equal %s',\n min: '%s cannot be less than %s',\n max: '%s cannot be greater than %s',\n range: '%s must be between %s and %s',\n },\n array: {\n len: '%s must be exactly %s in length',\n min: '%s cannot be less than %s in length',\n max: '%s cannot be greater than %s in length',\n range: '%s must be between %s and %s in length',\n },\n pattern: {\n mismatch: '%s value %s does not match pattern %s',\n },\n clone() {\n const cloned = JSON.parse(JSON.stringify(this));\n cloned.clone = this.clone;\n return cloned;\n },\n };\n}\n\nexport const messages = newMessages();\n","import {\n format,\n complementError,\n asyncMap,\n warning,\n deepMerge,\n convertFieldsError,\n} from './util';\nimport validators from './validator/index';\nimport { messages as defaultMessages, newMessages } from './messages';\n\n/**\n * Encapsulates a validation schema.\n *\n * @param descriptor An object declaring validation rules\n * for this schema.\n */\nfunction Schema(descriptor) {\n this.rules = null;\n this._messages = defaultMessages;\n this.define(descriptor);\n}\n\nSchema.prototype = {\n messages(messages) {\n if (messages) {\n this._messages = deepMerge(newMessages(), messages);\n }\n return this._messages;\n },\n define(rules) {\n if (!rules) {\n throw new Error('Cannot configure a schema with no rules');\n }\n if (typeof rules !== 'object' || Array.isArray(rules)) {\n throw new Error('Rules must be an object');\n }\n this.rules = {};\n let z;\n let item;\n for (z in rules) {\n if (rules.hasOwnProperty(z)) {\n item = rules[z];\n this.rules[z] = Array.isArray(item) ? item : [item];\n }\n }\n },\n validate(source_, o = {}, oc = () => {}) {\n let source = source_;\n let options = o;\n let callback = oc;\n if (typeof options === 'function') {\n callback = options;\n options = {};\n }\n if (!this.rules || Object.keys(this.rules).length === 0) {\n if (callback) {\n callback();\n }\n return Promise.resolve();\n }\n\n function complete(results) {\n let i;\n let errors = [];\n let fields = {};\n\n function add(e) {\n if (Array.isArray(e)) {\n errors = errors.concat(...e);\n } else {\n errors.push(e);\n }\n }\n\n for (i = 0; i < results.length; i++) {\n add(results[i]);\n }\n if (!errors.length) {\n errors = null;\n fields = null;\n } else {\n fields = convertFieldsError(errors);\n }\n callback(errors, fields);\n }\n\n if (options.messages) {\n let messages = this.messages();\n if (messages === defaultMessages) {\n messages = newMessages();\n }\n deepMerge(messages, options.messages);\n options.messages = messages;\n } else {\n options.messages = this.messages();\n }\n let arr;\n let value;\n const series = {};\n const keys = options.keys || Object.keys(this.rules);\n keys.forEach(z => {\n arr = this.rules[z];\n value = source[z];\n arr.forEach(r => {\n let rule = r;\n if (typeof rule.transform === 'function') {\n if (source === source_) {\n source = { ...source };\n }\n value = source[z] = rule.transform(value);\n }\n if (typeof rule === 'function') {\n rule = {\n validator: rule,\n };\n } else {\n rule = { ...rule };\n }\n rule.validator = this.getValidationMethod(rule);\n rule.field = z;\n rule.fullField = rule.fullField || z;\n rule.type = this.getType(rule);\n if (!rule.validator) {\n return;\n }\n series[z] = series[z] || [];\n series[z].push({\n rule,\n value,\n source,\n field: z,\n });\n });\n });\n const errorFields = {};\n return asyncMap(\n series,\n options,\n (data, doIt) => {\n const rule = data.rule;\n let deep =\n (rule.type === 'object' || rule.type === 'array') &&\n (typeof rule.fields === 'object' ||\n typeof rule.defaultField === 'object');\n deep = deep && (rule.required || (!rule.required && data.value));\n rule.field = data.field;\n\n function addFullfield(key, schema) {\n return {\n ...schema,\n fullField: `${rule.fullField}.${key}`,\n };\n }\n\n function cb(e = []) {\n let errors = e;\n if (!Array.isArray(errors)) {\n errors = [errors];\n }\n if (!options.suppressWarning && errors.length) {\n Schema.warning('async-validator:', errors);\n }\n if (errors.length && rule.message !== undefined) {\n errors = [].concat(rule.message);\n }\n\n errors = errors.map(complementError(rule));\n\n if (options.first && errors.length) {\n errorFields[rule.field] = 1;\n return doIt(errors);\n }\n if (!deep) {\n doIt(errors);\n } else {\n // if rule is required but the target object\n // does not exist fail at the rule level and don't\n // go deeper\n if (rule.required && !data.value) {\n if (rule.message !== undefined) {\n errors = [].concat(rule.message).map(complementError(rule));\n } else if (options.error) {\n errors = [\n options.error(\n rule,\n format(options.messages.required, rule.field),\n ),\n ];\n }\n return doIt(errors);\n }\n\n let fieldsSchema = {};\n if (rule.defaultField) {\n for (const k in data.value) {\n if (data.value.hasOwnProperty(k)) {\n fieldsSchema[k] = rule.defaultField;\n }\n }\n }\n fieldsSchema = {\n ...fieldsSchema,\n ...data.rule.fields,\n };\n for (const f in fieldsSchema) {\n if (fieldsSchema.hasOwnProperty(f)) {\n const fieldSchema = Array.isArray(fieldsSchema[f])\n ? fieldsSchema[f]\n : [fieldsSchema[f]];\n fieldsSchema[f] = fieldSchema.map(addFullfield.bind(null, f));\n }\n }\n const schema = new Schema(fieldsSchema);\n schema.messages(options.messages);\n if (data.rule.options) {\n data.rule.options.messages = options.messages;\n data.rule.options.error = options.error;\n }\n schema.validate(data.value, data.rule.options || options, errs => {\n const finalErrors = [];\n if (errors && errors.length) {\n finalErrors.push(...errors);\n }\n if (errs && errs.length) {\n finalErrors.push(...errs);\n }\n doIt(finalErrors.length ? finalErrors : null);\n });\n }\n }\n\n let res;\n if (rule.asyncValidator) {\n res = rule.asyncValidator(rule, data.value, cb, data.source, options);\n } else if (rule.validator) {\n res = rule.validator(rule, data.value, cb, data.source, options);\n if (res === true) {\n cb();\n } else if (res === false) {\n cb(rule.message || `${rule.field} fails`);\n } else if (res instanceof Array) {\n cb(res);\n } else if (res instanceof Error) {\n cb(res.message);\n }\n }\n if (res && res.then) {\n res.then(\n () => cb(),\n e => cb(e),\n );\n }\n },\n results => {\n complete(results);\n },\n );\n },\n getType(rule) {\n if (rule.type === undefined && rule.pattern instanceof RegExp) {\n rule.type = 'pattern';\n }\n if (\n typeof rule.validator !== 'function' &&\n rule.type &&\n !validators.hasOwnProperty(rule.type)\n ) {\n throw new Error(format('Unknown rule type %s', rule.type));\n }\n return rule.type || 'string';\n },\n getValidationMethod(rule) {\n if (typeof rule.validator === 'function') {\n return rule.validator;\n }\n const keys = Object.keys(rule);\n const messageIndex = keys.indexOf('message');\n if (messageIndex !== -1) {\n keys.splice(messageIndex, 1);\n }\n if (keys.length === 1 && keys[0] === 'required') {\n return validators.required;\n }\n return validators[this.getType(rule)] || false;\n },\n};\n\nSchema.register = function register(type, validator) {\n if (typeof validator !== 'function') {\n throw new Error(\n 'Cannot register a validator by type, validator is not a function',\n );\n }\n validators[type] = validator;\n};\n\nSchema.warning = warning;\n\nSchema.messages = defaultMessages;\n\nSchema.validators = validators;\n\nexport default Schema;\n"],"names":["formatRegExp","warning","process","env","NODE_ENV","window","document","type","errors","console","warn","every","e","convertFieldsError","length","fields","forEach","error","field","push","format","args","i","f","len","apply","slice","str","String","replace","x","Number","JSON","stringify","_","isNativeStringType","isEmptyValue","value","undefined","Array","isArray","asyncParallelArray","arr","func","callback","results","total","arrLength","count","a","asyncSerialArray","index","next","original","flattenObjArr","objArr","ret","Object","keys","k","AsyncValidationError","Error","asyncMap","option","first","pending","Promise","resolve","reject","flattenArr","firstFields","objArrKeys","objArrLength","key","indexOf","complementError","rule","oe","message","fullField","deepMerge","target","source","s","hasOwnProperty","required","options","util","messages","whitespace","test","pattern","email","url","RegExp","hex","types","integer","number","parseInt","array","regexp","date","getTime","getMonth","getYear","isNaN","object","method","match","custom","ruleType","range","min","max","spRegexp","val","num","ENUM","enumerable","join","lastIndex","mismatch","_pattern","enumRule","string","validate","rules","boolean","floatFn","dateObject","Date","any","float","enumValidator","newMessages","parse","invalid","clone","cloned","Schema","descriptor","_messages","defaultMessages","define","prototype","z","item","source_","o","oc","complete","add","concat","series","r","transform","validator","getValidationMethod","getType","errorFields","data","doIt","deep","defaultField","addFullfield","schema","cb","suppressWarning","map","fieldsSchema","fieldSchema","bind","errs","finalErrors","res","asyncValidator","then","validators","messageIndex","splice","register"],"mappings":"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"} \ No newline at end of file diff --git a/node_modules/async-validator/package.json b/node_modules/async-validator/package.json new file mode 100644 index 0000000..160022a --- /dev/null +++ b/node_modules/async-validator/package.json @@ -0,0 +1,71 @@ +{ + "_from": "async-validator", + "_id": "async-validator@3.5.1", + "_inBundle": false, + "_integrity": "sha1-zWK5aIskZfSEIOJ620d2CrG1VZ8=", + "_location": "/async-validator", + "_phantomChildren": {}, + "_requested": { + "type": "tag", + "registry": true, + "raw": "async-validator", + "name": "async-validator", + "escapedName": "async-validator", + "rawSpec": "", + "saveSpec": null, + "fetchSpec": "latest" + }, + "_requiredBy": [ + "#USER", + "/" + ], + "_resolved": "https://registry.npm.taobao.org/async-validator/download/async-validator-3.5.1.tgz?cache=0&sync_timestamp=1605749896979&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fasync-validator%2Fdownload%2Fasync-validator-3.5.1.tgz", + "_shasum": "cd62b9688b2465f48420e27adb47760ab1b5559f", + "_spec": "async-validator", + "_where": "D:\\大庆\\ui文件\\大庆小程序", + "bugs": { + "url": "https://github.com/yiminghe/async-validator/issues" + }, + "bundleDependencies": false, + "dependencies": {}, + "deprecated": false, + "description": "validate form asynchronous", + "devDependencies": { + "@babel/preset-env": "^7.8.7", + "@pika/pack": "^0.5.0", + "@pika/plugin-build-types": "^0.6.0", + "@pika/plugin-standard-pkg": "^0.6.0", + "@pika/types": "^0.6.0", + "babel-jest": "^24.8.0", + "coveralls": "^2.13.1", + "jest": "^24.8.0", + "lint-staged": "^7.2.0", + "np": "^5.0.3", + "pika-plugin-build-web-babel": "^0.8.0", + "pika-plugin-clean-dist-src": "^0.1.1", + "pre-commit": "^1.2.2", + "prettier": "^1.11.1" + }, + "files": [ + "dist-*/", + "bin/" + ], + "homepage": "https://github.com/yiminghe/async-validator", + "keywords": [ + "validator", + "validate", + "async" + ], + "license": "MIT", + "main": "dist-node/index.js", + "module": "dist-web/index.js", + "name": "async-validator", + "pika": true, + "repository": { + "type": "git", + "url": "git+ssh://git@github.com/yiminghe/async-validator.git" + }, + "sideEffects": false, + "types": "dist-types/index.d.ts", + "version": "3.5.1" +} diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 0000000..1696031 --- /dev/null +++ b/package-lock.json @@ -0,0 +1,11 @@ +{ + "requires": true, + "lockfileVersion": 1, + "dependencies": { + "async-validator": { + "version": "3.5.1", + "resolved": "https://registry.npm.taobao.org/async-validator/download/async-validator-3.5.1.tgz?cache=0&sync_timestamp=1605749896979&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fasync-validator%2Fdownload%2Fasync-validator-3.5.1.tgz", + "integrity": "sha1-zWK5aIskZfSEIOJ620d2CrG1VZ8=" + } + } +} diff --git a/package.json b/package.json new file mode 100644 index 0000000..b1e96b7 --- /dev/null +++ b/package.json @@ -0,0 +1,13 @@ +{ + "id": "l-file", + "name": "文件管理器选择上传下载预览-微信-ios-android", + "version": "1.1.1", + "description": "实现文件管理器选择文件上传,网络文件预览、保存。支持android、ios、微信小程", + "keywords": [ + "上传", + "下载", + "预览", + "保存", + "file" + ] +} \ No newline at end of file diff --git a/pages.json b/pages.json new file mode 100644 index 0000000..b5034a1 --- /dev/null +++ b/pages.json @@ -0,0 +1,344 @@ +{ + "pages": [ //pages数组中第一项表示应用启动页,参考:https://uniapp.dcloud.io/collocation/pages + // 这三个无法做分包处理,首次加载菜单时需要一起加载 + { + "path": "pages/index/index",// 正常首页 + "style": { + "navigationBarTitleText": "待办事项" + } + }, + { + "path": "pages/workbench/workbench", + "style": { + "navigationBarTitleText": "工作台" + } + }, + { + "path": "pages/user/user", + "style": { + "navigationBarTitleText": "我的" + } + } + ], + // 分包处理 + "subPackages":[ + // 第一个分包,业务担保模块全在里面 + { + "root":"guaranteePages", + "pages":[ + { + "path": "pages/application/application", + "style": { + "navigationBarTitleText": "业务申请" + } + }, + { + "path": "pages/addApplication/addApplication", + "style": { + "navigationBarTitleText": "业务申请详情" + } + }, + { + "path": "pages/investigation/investigation", + "style": { + "navigationBarTitleText": "担保部调查" + } + }, + { + "path": "pages/assignAB/assignAB", + "style": { + "navigationBarTitleText": "指派AB角" + } + }, + { + "path": "pages/investigationSee/investigationSee", + "style": { + "navigationBarTitleText": "担保部调查详情" + } + }, + { + "path": "pages/asset/asset", + "style": { + "navigationBarTitleText": "资产部调查" + } + }, + { + "path": "pages/assignCommissioner/assignCommissioner", + "style": { + "navigationBarTitleText": "指派资产部专员" + } + }, + { + "path": "pages/assetSee/assetSee", + "style": { + "navigationBarTitleText": "资产部调查详情" + } + }, + { + "path": "pages/Information/Information", + "style": { + "navigationBarTitleText": "信息部调查" + } + }, + { + "path": "pages/assignInformation/assignInformation", + "style": { + "navigationBarTitleText": "指派信息部专员" + } + }, + { + "path": "pages/InformationSee/InformationSee", + "style": { + "navigationBarTitleText": "信息部调查详情" + } + }, + { + "path": "pages/regulation/regulation", + "style": { + "navigationBarTitleText": "合规调查" + } + }, + { + "path": "pages/assignRegulation/assignRegulation", + "style": { + "navigationBarTitleText": "指派合规调查专员" + } + }, + { + "path": "pages/regulationSee/regulationSee", + "style": { + "navigationBarTitleText": "合规调查详情" + } + }, + { + "path": "pages/workMeeting/workMeeting", + "style": { + "navigationBarTitleText": "工作会" + } + }, + { + "path": "pages/workMeetingSee/workMeetingSee", + "style": { + "navigationBarTitleText": "工作会详情" + } + }, + { + "path": "pages/reviewJudges/reviewJudges", + "style": { + "navigationBarTitleText": "贷审会评委选择" + } + }, + { + "path": "pages/review/review", + "style": { + "navigationBarTitleText": "贷审会" + } + }, + { + "path": "pages/reviewSee/reviewSee", + "style": { + "navigationBarTitleText": "贷审会详情" + } + }, + { + "path": "pages/letter/letter", + "style": { + "navigationBarTitleText": "担保函" + } + }, + { + "path": "pages/letterSee/letterSee", + "style": { + "navigationBarTitleText": "担保承诺函" + } + }, + { + "path": "pages/payment/payment", + "style": { + "navigationBarTitleText": "财务确认" + } + }, + { + "path": "pages/paymentSee/paymentSee", + "style": { + "navigationBarTitleText": "财务确认详情" + } + }, + { + "path": "pages/notice/notice", + "style": { + "navigationBarTitleText": "放款通知" + } + }, + { + "path": "pages/noticeSee/noticeSee", + "style": { + "navigationBarTitleText": "放款通知详情" + } + } + ] + }, + // 第二个分包,除了首页和担保模块 + { + "root":"workBenchPages", + "pages":[ + { + "path": "pages/customer/customer", + "style": { + "navigationBarTitleText": "客户资源管理系统", + "backgroundColorTop":"#FFFFFF", // iOS下拉bounce回弹区域的颜色 (与down.bgColor同步) + "backgroundColorBottom":"#FFFFFF", // iOS上拉bounce回弹区域的颜色 (与up.bgColor同步) + "app-plus" : { + "bounce" : "none" //可选: 是否禁止iOS回弹和Android触顶触底的弧形阴影, 默认允许 (可配在 'globalStyle') + }, + "mp-alipay":{"allowsBounceVertical":"NO"} //可选: 取消支付宝和钉钉小程序的iOS回弹 (可配在 'globalStyle') + } + }, + { + "path": "pages/guarantee/guarantee", + "style": { + "navigationBarTitleText": "担保业务管理系统" + } + }, + { + "path": "pages/afterGuarantee/afterGuarantee", + "style": { + "navigationBarTitleText": "保后业务管理系统" + } + }, + { + "path": "pages/afterLoan/afterLoan", + "style": { + "navigationBarTitleText": "保后管理" + } + }, + { + "path": "pages/afterLoanSee/afterLoanSee", + "style": { + "navigationBarTitleText": "还款记录" + } + }, + { + "path": "pages/repaymentRecord/repaymentRecord", + "style": { + "navigationBarTitleText": "还款详情" + } + }, + { + "path": "pages/callInALoan/callInALoan", + "style": { + "navigationBarTitleText": "催收管理" + } + }, + { + "path": "pages/callInALoanSee/callInALoanSee", + "style": { + "navigationBarTitleText": "催收记录" + } + }, + { + "path": "pages/collectionRecord/collectionRecord", + "style": { + "navigationBarTitleText": "催收详情" + } + }, + { + "path": "pages/addcustomer/addcustomer", + "style": { + "navigationBarTitleText": "添加客户信息" + } + }, + { + "path": "pages/aboutUs/aboutUs", + "style": { + "navigationBarTitleText": "关于我们" + } + }, + { + "path": "pages/messageCenter/messageCenter", + "style": { + "navigationBarTitleText": "消息中心" + } + }, + { + "path": "pages/personalInfo/personalInfo", + "style": { + "navigationBarTitleText": "个人信息" + } + }, + { + "path": "pages/bindPhone/bindPhone", + "style": { + "navigationBarTitleText": "绑定手机号" + } + }, + + { + "path": "pages/statistics/statistics", + "style": { + "navigationBarTitleText": "进度查询" + } + }, + { + "path": "pages/refuse/refuse", + "style": { + "navigationBarTitleText": "拒绝查询" + } + }, + { + "path": "pages/efficiency/efficiency", + "style": { + "navigationBarTitleText": "团队效率" + } + } + ] + } + ], + + + + "globalStyle": { + "navigationBarTextStyle": "black", + "navigationBarTitleText": "uni-app", + "navigationBarBackgroundColor": "#F8F8F8", + "backgroundColor": "#F8F8F8", + "backgroundColorTop":"#FFFFFF", // iOS APP真机bounce回弹区域默认灰色,建议统一重置为白色 + "usingComponents": { + "ly-tree-node": "/components/ly-tree/ly-tree-node" + } + }, + "tabBar": { + "color": "#707070", + "selectedColor": "#00B9FF", + "borderStyle": "black", + "backgroundColor": "#FFF", + "list": [{ + "pagePath": "pages/index/index", + "iconPath": "static/img/icon_4_blue.png", + "selectedIconPath": "static/img/icon_4.png", + "text": "待办事项" + }, + { + "pagePath": "pages/workbench/workbench", + "iconPath": "static/img/icon_5.png", + "selectedIconPath": "static/img/icon_5_blue.png", + "text": "工作台" + }, { + "pagePath": "pages/user/user", + "iconPath": "static/img/icon_2.png", + "selectedIconPath": "static/img/icon_2_blue.png", + "text": "我的" + } + ] + }, + "condition" : { //模式配置,仅开发期间生效 + "current": 0, //当前激活的模式(list 的索引项) + "list": [ + { + "name": "", //模式名称 + "path": "", //启动页面,必选 + "query": "" //启动参数,在页面的onLoad函数里面得到 + } + ] + } +} diff --git a/pages/demo/index.vue b/pages/demo/index.vue new file mode 100644 index 0000000..84417b3 --- /dev/null +++ b/pages/demo/index.vue @@ -0,0 +1,56 @@ + + + + + diff --git a/pages/index/index.vue b/pages/index/index.vue new file mode 100644 index 0000000..26e2364 --- /dev/null +++ b/pages/index/index.vue @@ -0,0 +1,704 @@ + + + + + diff --git a/pages/user/user.vue b/pages/user/user.vue new file mode 100644 index 0000000..2878b59 --- /dev/null +++ b/pages/user/user.vue @@ -0,0 +1,279 @@ + + + + + diff --git a/pages/workbench/workbench.vue b/pages/workbench/workbench.vue new file mode 100644 index 0000000..31d2d7d --- /dev/null +++ b/pages/workbench/workbench.vue @@ -0,0 +1,136 @@ + + + + + diff --git a/plugins/utils.js b/plugins/utils.js new file mode 100644 index 0000000..8ce52fd --- /dev/null +++ b/plugins/utils.js @@ -0,0 +1,15 @@ +import Vue from 'vue' +const utils = { + // 手机号格式是否正确 + isMobilePhone(value) { + const reg = /^1\d{10}$/ + if (reg.test(value)) { + return true + } + return false + } +} + +Vue.prototype.$utils = utils + +export default utils diff --git a/project.config.json b/project.config.json new file mode 100644 index 0000000..01b51ac --- /dev/null +++ b/project.config.json @@ -0,0 +1,71 @@ +{ + "description": "项目配置文件", + "packOptions": { + "ignore": [] + }, + "setting": { + "urlCheck": true, + "es6": true, + "enhance": false, + "postcss": true, + "preloadBackgroundData": false, + "minified": true, + "newFeature": false, + "coverView": true, + "nodeModules": false, + "autoAudits": false, + "showShadowRootInWxmlPanel": true, + "scopeDataCheck": false, + "uglifyFileName": false, + "checkInvalidKey": true, + "checkSiteMap": true, + "uploadWithSourceMap": true, + "compileHotReLoad": false, + "useMultiFrameRuntime": true, + "useApiHook": true, + "useApiHostProcess": true, + "babelSetting": { + "ignore": [], + "disablePlugins": [], + "outputPath": "" + }, + "enableEngineNative": false, + "bundle": false, + "useIsolateContext": true, + "useCompilerModule": true, + "userConfirmedUseCompilerModuleSwitch": false, + "userConfirmedBundleSwitch": false, + "packNpmManually": false, + "packNpmRelationList": [], + "minifyWXSS": true + }, + "compileType": "miniprogram", + "libVersion": "2.0.4", + "appid": "wx1748c5c50d2170cf", + "projectname": "miniprogram-1", + "debugOptions": { + "hidedInDevtools": [] + }, + "scripts": {}, + "isGameTourist": false, + "condition": { + "search": { + "list": [] + }, + "conversation": { + "list": [] + }, + "game": { + "list": [] + }, + "plugin": { + "list": [] + }, + "gamePlugin": { + "list": [] + }, + "miniprogram": { + "list": [] + } + } +} \ No newline at end of file diff --git a/static/css/main.css b/static/css/main.css new file mode 100644 index 0000000..b632a87 --- /dev/null +++ b/static/css/main.css @@ -0,0 +1,225 @@ +*{ + color: #707070; +} +::-webkit-scrollbar { + width: 0; + height: 0; + color: transparent; +} +/* input{ + border: 2rpx solid #E6E6E6; + border-radius: 40rpx; + height: 80rpx; + line-height: 80rpx; + padding: 0 40rpx; +} */ +.text-color{ + color: #00B9FF; +} +/* .nav .cu-item.cur{ + border-bottom: 8rpx solid; +} */ +.pdlr10{ + padding-left: 20rpx; + padding-right: 20rpx; +} +.pdtb10{ + padding-top: 20rpx; + padding-bottom: 20rpx; +} +.pdb10{ + padding-bottom: 20rpx; +} +.mat15{ + margin-top: 30rpx; +} +.mat40{ + margin-top: 80rpx; +} +.mgt20{ + margin-top: 40rpx; +} +.mgt5{ + margin-top: 5rpx; +} +.mgt40{ + margin-top: 80rpx; +} +.mgl10{ + margin-left: 20rpx; +} +.mgl20{ + margin-left: 40rpx; +} +.mgl30{ + margin-left: 60rpx; +} +.mgr5{ + margin-right: 10rpx; +} +.mgr10{ + margin-right: 20rpx; +} +.mgr20{ + margin-right: 40rpx; +} +.mgr6{ + margin-right: 12rpx; +} +.mal15{ + margin-left: 30rpx; +} +.mar15{ + margin-right: 30rpx; +} +.mab15{ + margin-bottom: 30rpx; +} +.flex{ + display: flex; + align-items: center; +} +.flex-align-start{ + display: flex; + align-items: flex-start; +} +.flex-between{ + display: flex; + align-items: center; + justify-content: space-between; +} +.flex-end{ + display: flex; + align-items: center; + justify-content: flex-end; +} +.flex-column{ + display: flex; + flex-direction: column; + align-items: center; +} +.flex-justify-center{ + display: flex; + align-items: center; + justify-content: center; +} +.bottom-border{ + padding: 30rpx 0; + border-bottom: 4rpx solid #F2F2F2; + background-color: #fff; +} +.left-border{ + border-left: 12rpx solid #00b9ff; + line-height: 32rpx; +} + +/* input样式 */ +.form-input-placeholder { + font-size: 28rpx; + color: #999; +} + +/* button样式 */ +.def-btn{ + background-color: #00B9FF; + color: #fff; +} +.cancel-btn{ + background-color: #FF9784; + color: #fff; +} +/* .refuse-btn{ + background: #FF9784; + color: #fff; +} */ +/* picker样式 */ +.picker-view{ + border: 2rpx solid #e5e5e5; + border-radius: 40rpx; + box-sizing: border-box; + width: 80%; + margin-left: 20%; + flex: 1; + text-align: left; + color: #666; + font-size: 28rpx; + min-height: 72rpx; + padding: 0 40rpx; +} +/* 被禁用的样式覆盖 */ +.disabled .picker-view{ + background:#e5e5e5; +} +/* picker禁用样式 */ +.disabled-bg{ + background-color: #eee; +} + +.wd100 { + width: 100% !important; +} +.wd95 { + width: 95%; +} +.wd90 { + width: 90%; +} +.wd80 { + width: 80%; +} +.wd85 { + width: 85%; +} +.wd70 { + width: 70%!important; +} +.wd60 { + width: 60%; +} +.wd50 { + width: 50%; +} +.wd48 { + width: 48%; +} +.wd45 { + width: 45%; +} +.wd40 { + width: 40%; +} +.wd30 { + width: 30%; +} +.wd35 { + width: 35%; +} +.wd25{ + width: 25%; +} +.wd20 { + width: 20%; +} +.wd15 { + width: 15%; +} +.wd10 { + width: 10%; +} +.wd5 { + width: 5%; +} +.wd0 { + width: 0; +} +.radius10 { + border-radius: 20rpx; +} +.self{ + position: relative; +} +.flex-around{ + display: flex; + align-items: center; + justify-content: space-around; +} \ No newline at end of file diff --git a/static/css/mainScss.scss b/static/css/mainScss.scss new file mode 100644 index 0000000..2c97113 --- /dev/null +++ b/static/css/mainScss.scss @@ -0,0 +1,235 @@ +.evan-form-show { + padding: 0 30rpx; + background-color: #fff; + .form-input { + font-size: 28rpx; + color: #333; + width: 70%; + margin-left: 30%; + box-sizing: border-box; + border: 2rpx solid #E6E6E6; + border-radius: 40rpx; + height: 70rpx; + line-height: 70rpx; + padding: 0 40rpx; + &.textarea{ + height: 240rpx; + padding: 24rpx 0; + text-align: left; + } + } + + + .form-input-placeholder { + font-size: 28rpx; + color: #999; + } + + &__button { + width: 100%; + height: 88rpx; + border-radius: 8rpx; + display: flex; + align-items: center; + justify-content: center; + padding: 0; + font-size: 36rpx; + color: #fff; + margin-top: 20rpx; + background-color: #2D87D5; + + &::before, + &::after { + border: none; + } + } + + .customize-form-item { + &__label { + font-size: 28rpx; + color: #333; + margin-bottom: 16rpx; + } + + &__radio { + display: flex; + align-items: center; + margin-bottom: 16rpx; + + &__text { + font-size: 28rpx; + color: #333; + } + } + } +} + +// 按钮颜色 +.foot-btn{ + .plain-btn{ + color: #00B9FF; + border-color: #00B9FF; + } + .def-btn{ + background-color: #00B9FF; + } + .suc-btn{ + background-color: #67C23A; + } + .cancel-btn{ + background-color: #FF9784; + } + .ref-btn{ + background: #FFA56A; + } +} +.btn-rig{ + text-align: right; + .mar-lr{ + margin-left: 20rpx; + margin-right: 20rpx; + } +} +.pad-bt{ + padding-bottom: 40rpx; +} + +//list样式 +.good-list{ + background-color: #fff; + .good-li{ + display: flex; + align-items: center; + padding: 20upx; + border-bottom: 1upx solid #eee; + + .good-img{ + width: 160upx; + height: 160upx; + margin-right: 20rpx; + } + + .flex-item{ + flex: 1; + + .good-name{ + font-size: 26upx; + line-height: 40upx; + height: 80upx; + margin-bottom: 20upx; + overflow: hidden; + } + .good-price{ + font-size: 26upx; + color: red; + } + .good-sold{ + font-size: 24upx; + margin-left: 16upx; + color: gray; + } + + } + } +} +.charge{ + margin: 0 50rpx; + border-radius: 20rpx; + padding: 0 30rpx; + box-shadow: 0 0 16rpx #ccc; + margin-top: 40rpx; + .charge-title{ + padding: 16rpx 0; + border-bottom: 4rpx solid #F2F2F2; + color: #000; + font-weight: bold; + .charge-status{ + color: #ccc; + } + } + .charge-text{ + padding: 16rpx 0; + color: #707070; + view{ + display: flex; + justify-content: space-between; + align-items: center; + } + .time-text{ + color: #ccc; + } + .status-text{ + font-size: 28rpx; + padding: 8rpx 12rpx; + border-radius: 10rpx; + } + } +} + +//列表样式 + .good-list{ + background-color: #fff; + + .good-li{ + display: flex; + align-items: center; + padding: 20upx; + border-bottom: 1upx solid #eee; + + .good-img{ + width: 160upx; + height: 160upx; + margin-right: 20rpx; + } + + .flex-item{ + flex: 1; + + .good-name{ + font-size: 26upx; + line-height: 40upx; + height: 80upx; + margin-bottom: 20upx; + overflow: hidden; + } + .good-price{ + font-size: 26upx; + color: red; + } + .good-sold{ + font-size: 24upx; + margin-left: 16upx; + color: gray; + } + + } + } + } +.charge{ + margin: 0 50rpx; + border-radius: 20rpx; + padding: 0 30rpx; + box-shadow: 0 0 16rpx #ccc; + margin-top: 40rpx; + .charge-title{ + padding: 16rpx 0; + border-bottom: 4rpx solid #F2F2F2; + color: #000; + font-weight: bold; + .charge-status{ + color: #ccc; + } + } + .charge-text{ + padding: 16rpx 0; + color: #707070; + .time-text{ + color: #ccc; + } + .status-text{ + font-size: 28rpx; + padding: 8rpx 12rpx; + border-radius: 10rpx; + } + } +} \ No newline at end of file diff --git a/static/img/PDF.png b/static/img/PDF.png new file mode 100644 index 0000000..f860de3 Binary files /dev/null and b/static/img/PDF.png differ diff --git a/static/img/btn_1.png b/static/img/btn_1.png new file mode 100644 index 0000000..69961ee Binary files /dev/null and b/static/img/btn_1.png differ diff --git a/static/img/btn_2.png b/static/img/btn_2.png new file mode 100644 index 0000000..af4bd47 Binary files /dev/null and b/static/img/btn_2.png differ diff --git a/static/img/btn_3.png b/static/img/btn_3.png new file mode 100644 index 0000000..41caf8a Binary files /dev/null and b/static/img/btn_3.png differ diff --git a/static/img/btn_close.png b/static/img/btn_close.png new file mode 100644 index 0000000..84a33b2 Binary files /dev/null and b/static/img/btn_close.png differ diff --git a/static/img/btn_combo.png b/static/img/btn_combo.png new file mode 100644 index 0000000..0e36346 Binary files /dev/null and b/static/img/btn_combo.png differ diff --git a/static/img/btn_per_un.png b/static/img/btn_per_un.png new file mode 100644 index 0000000..d103448 Binary files /dev/null and b/static/img/btn_per_un.png differ diff --git a/static/img/btn_pre.png b/static/img/btn_pre.png new file mode 100644 index 0000000..03202ed Binary files /dev/null and b/static/img/btn_pre.png differ diff --git a/static/img/btn_search.png b/static/img/btn_search.png new file mode 100644 index 0000000..221f14b Binary files /dev/null and b/static/img/btn_search.png differ diff --git a/static/img/btn_sure_h.png b/static/img/btn_sure_h.png new file mode 100644 index 0000000..6724e20 Binary files /dev/null and b/static/img/btn_sure_h.png differ diff --git a/static/img/btn_sure_n.png b/static/img/btn_sure_n.png new file mode 100644 index 0000000..f97c3f7 Binary files /dev/null and b/static/img/btn_sure_n.png differ diff --git a/static/img/currentIcon.png b/static/img/currentIcon.png new file mode 100644 index 0000000..3abb546 Binary files /dev/null and b/static/img/currentIcon.png differ diff --git a/static/img/defaultIcon.png b/static/img/defaultIcon.png new file mode 100644 index 0000000..8e90f7b Binary files /dev/null and b/static/img/defaultIcon.png differ diff --git a/static/img/excel.png b/static/img/excel.png new file mode 100644 index 0000000..9c57b46 Binary files /dev/null and b/static/img/excel.png differ diff --git a/static/img/icon-user.png b/static/img/icon-user.png new file mode 100644 index 0000000..2a8d1a8 Binary files /dev/null and b/static/img/icon-user.png differ diff --git a/static/img/icon_1.png b/static/img/icon_1.png new file mode 100644 index 0000000..878affa Binary files /dev/null and b/static/img/icon_1.png differ diff --git a/static/img/icon_10.png b/static/img/icon_10.png new file mode 100644 index 0000000..10c4196 Binary files /dev/null and b/static/img/icon_10.png differ diff --git a/static/img/icon_11.png b/static/img/icon_11.png new file mode 100644 index 0000000..3ff3865 Binary files /dev/null and b/static/img/icon_11.png differ diff --git a/static/img/icon_12.png b/static/img/icon_12.png new file mode 100644 index 0000000..7bd363f Binary files /dev/null and b/static/img/icon_12.png differ diff --git a/static/img/icon_13.png b/static/img/icon_13.png new file mode 100644 index 0000000..378ae4c Binary files /dev/null and b/static/img/icon_13.png differ diff --git a/static/img/icon_2.png b/static/img/icon_2.png new file mode 100644 index 0000000..4655f7a Binary files /dev/null and b/static/img/icon_2.png differ diff --git a/static/img/icon_2_blue.png b/static/img/icon_2_blue.png new file mode 100644 index 0000000..461d76a Binary files /dev/null and b/static/img/icon_2_blue.png differ diff --git a/static/img/icon_3.png b/static/img/icon_3.png new file mode 100644 index 0000000..7bd363f Binary files /dev/null and b/static/img/icon_3.png differ diff --git a/static/img/icon_4.png b/static/img/icon_4.png new file mode 100644 index 0000000..667d5f0 Binary files /dev/null and b/static/img/icon_4.png differ diff --git a/static/img/icon_4_blue.png b/static/img/icon_4_blue.png new file mode 100644 index 0000000..e7e3a5c Binary files /dev/null and b/static/img/icon_4_blue.png differ diff --git a/static/img/icon_5.png b/static/img/icon_5.png new file mode 100644 index 0000000..8a37bb6 Binary files /dev/null and b/static/img/icon_5.png differ diff --git a/static/img/icon_5_blue.png b/static/img/icon_5_blue.png new file mode 100644 index 0000000..8addd3a Binary files /dev/null and b/static/img/icon_5_blue.png differ diff --git a/static/img/icon_6.png b/static/img/icon_6.png new file mode 100644 index 0000000..e7aea14 Binary files /dev/null and b/static/img/icon_6.png differ diff --git a/static/img/icon_7.png b/static/img/icon_7.png new file mode 100644 index 0000000..558168f Binary files /dev/null and b/static/img/icon_7.png differ diff --git a/static/img/icon_8.png b/static/img/icon_8.png new file mode 100644 index 0000000..9d40dda Binary files /dev/null and b/static/img/icon_8.png differ diff --git a/static/img/icon_9.png b/static/img/icon_9.png new file mode 100644 index 0000000..52b10a9 Binary files /dev/null and b/static/img/icon_9.png differ diff --git a/static/img/icon_emoji.png b/static/img/icon_emoji.png new file mode 100644 index 0000000..eb80aec Binary files /dev/null and b/static/img/icon_emoji.png differ diff --git a/static/img/icon_fail.png b/static/img/icon_fail.png new file mode 100644 index 0000000..e336c5d Binary files /dev/null and b/static/img/icon_fail.png differ diff --git a/static/img/icon_fail_s.png b/static/img/icon_fail_s.png new file mode 100644 index 0000000..c823e78 Binary files /dev/null and b/static/img/icon_fail_s.png differ diff --git a/static/img/icon_ing.png b/static/img/icon_ing.png new file mode 100644 index 0000000..38ddc0c Binary files /dev/null and b/static/img/icon_ing.png differ diff --git a/static/img/icon_link.png b/static/img/icon_link.png new file mode 100644 index 0000000..1f95d02 Binary files /dev/null and b/static/img/icon_link.png differ diff --git a/static/img/icon_notice.png b/static/img/icon_notice.png new file mode 100644 index 0000000..cc2b546 Binary files /dev/null and b/static/img/icon_notice.png differ diff --git a/static/img/icon_pass.png b/static/img/icon_pass.png new file mode 100644 index 0000000..e0b37c3 Binary files /dev/null and b/static/img/icon_pass.png differ diff --git a/static/img/icon_pass_s.png b/static/img/icon_pass_s.png new file mode 100644 index 0000000..db0bfe3 Binary files /dev/null and b/static/img/icon_pass_s.png differ diff --git a/static/img/icon_password.png b/static/img/icon_password.png new file mode 100644 index 0000000..ad5cb96 Binary files /dev/null and b/static/img/icon_password.png differ diff --git a/static/img/icon_pic.png b/static/img/icon_pic.png new file mode 100644 index 0000000..0a927b0 Binary files /dev/null and b/static/img/icon_pic.png differ diff --git a/static/img/mescroll-empty.png b/static/img/mescroll-empty.png new file mode 100644 index 0000000..11a4157 Binary files /dev/null and b/static/img/mescroll-empty.png differ diff --git a/static/img/mescroll-totop.png b/static/img/mescroll-totop.png new file mode 100644 index 0000000..62534c4 Binary files /dev/null and b/static/img/mescroll-totop.png differ diff --git a/static/img/user-bg.png b/static/img/user-bg.png new file mode 100644 index 0000000..fb90244 Binary files /dev/null and b/static/img/user-bg.png differ diff --git a/static/img/word.png b/static/img/word.png new file mode 100644 index 0000000..b15dbbf Binary files /dev/null and b/static/img/word.png differ diff --git a/static/img/智慧金管icon.png b/static/img/智慧金管icon.png new file mode 100644 index 0000000..c668cec Binary files /dev/null and b/static/img/智慧金管icon.png differ diff --git a/uni.scss b/uni.scss new file mode 100644 index 0000000..5cfb211 --- /dev/null +++ b/uni.scss @@ -0,0 +1,78 @@ +/** + * 这里是uni-app内置的常用样式变量 + * + * uni-app 官方扩展插件及插件市场(https://ext.dcloud.net.cn)上很多三方插件均使用了这些样式变量 + * 如果你是插件开发者,建议你使用scss预处理,并在插件代码中直接使用这些变量(无需 import 这个文件),方便用户通过搭积木的方式开发整体风格一致的App + * + */ + +/** + * 如果你是App开发者(插件使用者),你可以通过修改这些变量来定制自己的插件主题,实现自定义主题功能 + * + * 如果你的项目同样使用了scss预处理,你也可以直接在你的 scss 代码中使用如下变量,同时无需 import 这个文件 + */ + +/* 颜色变量 */ + +/* 行为相关颜色 */ +$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; + +@import "@/static/css/mainScss.scss"; \ No newline at end of file diff --git a/unpackage/dist/build/.automator/mp-weixin/.automator.json b/unpackage/dist/build/.automator/mp-weixin/.automator.json new file mode 100644 index 0000000..e69de29 diff --git a/unpackage/dist/build/mp-weixin/app.js b/unpackage/dist/build/mp-weixin/app.js new file mode 100644 index 0000000..2bb776e --- /dev/null +++ b/unpackage/dist/build/mp-weixin/app.js @@ -0,0 +1,4 @@ + +require('./common/runtime.js') +require('./common/vendor.js') +require('./common/main.js') \ No newline at end of file diff --git a/unpackage/dist/build/mp-weixin/app.json b/unpackage/dist/build/mp-weixin/app.json new file mode 100644 index 0000000..980654b --- /dev/null +++ b/unpackage/dist/build/mp-weixin/app.json @@ -0,0 +1,96 @@ +{ + "pages": [ + "pages/index/index", + "pages/workbench/workbench", + "pages/user/user" + ], + "subPackages": [ + { + "root": "guaranteePages", + "pages": [ + "pages/application/application", + "pages/addApplication/addApplication", + "pages/investigation/investigation", + "pages/assignAB/assignAB", + "pages/investigationSee/investigationSee", + "pages/asset/asset", + "pages/assignCommissioner/assignCommissioner", + "pages/assetSee/assetSee", + "pages/Information/Information", + "pages/assignInformation/assignInformation", + "pages/InformationSee/InformationSee", + "pages/regulation/regulation", + "pages/assignRegulation/assignRegulation", + "pages/regulationSee/regulationSee", + "pages/workMeeting/workMeeting", + "pages/workMeetingSee/workMeetingSee", + "pages/reviewJudges/reviewJudges", + "pages/review/review", + "pages/reviewSee/reviewSee", + "pages/letter/letter", + "pages/letterSee/letterSee", + "pages/payment/payment", + "pages/notice/notice", + "pages/noticeSee/noticeSee", + "pages/paymentSee/paymentSee" + ] + }, + { + "root": "workBenchPages", + "pages": [ + "pages/customer/customer", + "pages/guarantee/guarantee", + "pages/addcustomer/addcustomer", + "pages/aboutUs/aboutUs", + "pages/personalInfo/personalInfo", + "pages/bindPhone/bindPhone", + "pages/statistics/statistics", + "pages/refuse/refuse", + "pages/efficiency/efficiency" + ] + } + ], + "window": { + "navigationBarTextStyle": "black", + "navigationBarTitleText": "uni-app", + "navigationBarBackgroundColor": "#F8F8F8", + "backgroundColor": "#F8F8F8", + "backgroundColorTop": "#FFFFFF" + }, + "tabBar": { + "color": "#707070", + "selectedColor": "#00B9FF", + "borderStyle": "black", + "backgroundColor": "#FFF", + "list": [ + { + "pagePath": "pages/index/index", + "iconPath": "static/img/icon_4_blue.png", + "selectedIconPath": "static/img/icon_4.png", + "text": "待办事项" + }, + { + "pagePath": "pages/workbench/workbench", + "iconPath": "static/img/icon_5.png", + "selectedIconPath": "static/img/icon_5_blue.png", + "text": "工作台" + }, + { + "pagePath": "pages/user/user", + "iconPath": "static/img/icon_2.png", + "selectedIconPath": "static/img/icon_2_blue.png", + "text": "我的" + } + ] + }, + "uniStatistics": { + "enable": true + }, + "usingComponents": { + "ly-tree-node": "/components/ly-tree/ly-tree-node", + "mescroll-body": "/components/mescroll-uni/mescroll-body", + "mescroll-uni": "/components/mescroll-uni/mescroll-uni", + "cu-custom": "/colorui/components/cu-custom" + }, + "sitemapLocation": "sitemap.json" +} \ No newline at end of file diff --git a/unpackage/dist/build/mp-weixin/app.wxss b/unpackage/dist/build/mp-weixin/app.wxss new file mode 100644 index 0000000..705b297 --- /dev/null +++ b/unpackage/dist/build/mp-weixin/app.wxss @@ -0,0 +1,3 @@ +@import './common/main.wxss'; + +[data-custom-hidden="true"],[bind-data-custom-hidden="true"]{display: none !important;} \ No newline at end of file diff --git a/unpackage/dist/build/mp-weixin/colorui/components/cu-custom.js b/unpackage/dist/build/mp-weixin/colorui/components/cu-custom.js new file mode 100644 index 0000000..bd2f3f7 --- /dev/null +++ b/unpackage/dist/build/mp-weixin/colorui/components/cu-custom.js @@ -0,0 +1,10 @@ +(global["webpackJsonp"]=global["webpackJsonp"]||[]).push([["colorui/components/cu-custom"],{"04ed":function(t,e,n){"use strict";n.r(e);var a=n("ee32"),u=n("bb88");for(var r in u)"default"!==r&&function(t){n.d(e,t,(function(){return u[t]}))}(r);var o,c=n("f0c5"),i=Object(c["a"])(u["default"],a["b"],a["c"],!1,null,null,null,!1,a["a"],o);e["default"]=i.exports},"8be0":function(t,e,n){"use strict";(function(t){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0;var n={data:function(){return{StatusBar:this.StatusBar,CustomBar:this.CustomBar}},name:"cu-custom",computed:{style:function(){var t=this.StatusBar,e=this.CustomBar,n=this.bgImage,a="height:".concat(e,"px;padding-top:").concat(t,"px;");return this.bgImage&&(a="".concat(a,"background-image:url(").concat(n,");")),a}},props:{bgColor:{type:String,default:""},isBack:{type:[Boolean,String],default:!1},bgImage:{type:String,default:""}},methods:{BackPage:function(){if(getCurrentPages().length<2&&"undefined"!==typeof __wxConfig){var e="/"+__wxConfig.pages[0];return t.redirectTo({url:e})}t.navigateBack({delta:1})}}};e.default=n}).call(this,n("543d")["default"])},bb88:function(t,e,n){"use strict";n.r(e);var a=n("8be0"),u=n.n(a);for(var r in a)"default"!==r&&function(t){n.d(e,t,(function(){return a[t]}))}(r);e["default"]=u.a},ee32:function(t,e,n){"use strict";var a;n.d(e,"b",(function(){return u})),n.d(e,"c",(function(){return r})),n.d(e,"a",(function(){return a}));var u=function(){var t=this,e=t.$createElement;t._self._c},r=[]}}]); +;(global["webpackJsonp"] = global["webpackJsonp"] || []).push([ + 'colorui/components/cu-custom-create-component', + { + 'colorui/components/cu-custom-create-component':(function(module, exports, __webpack_require__){ + __webpack_require__('543d')['createComponent'](__webpack_require__("04ed")) + }) + }, + [['colorui/components/cu-custom-create-component']] +]); diff --git a/unpackage/dist/build/mp-weixin/colorui/components/cu-custom.json b/unpackage/dist/build/mp-weixin/colorui/components/cu-custom.json new file mode 100644 index 0000000..4575d1b --- /dev/null +++ b/unpackage/dist/build/mp-weixin/colorui/components/cu-custom.json @@ -0,0 +1,4 @@ +{ + "usingComponents": {}, + "component": true +} \ No newline at end of file diff --git a/unpackage/dist/build/mp-weixin/colorui/components/cu-custom.wxml b/unpackage/dist/build/mp-weixin/colorui/components/cu-custom.wxml new file mode 100644 index 0000000..27436d3 --- /dev/null +++ b/unpackage/dist/build/mp-weixin/colorui/components/cu-custom.wxml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/unpackage/dist/build/mp-weixin/common/main.js b/unpackage/dist/build/mp-weixin/common/main.js new file mode 100644 index 0000000..2fce1a9 --- /dev/null +++ b/unpackage/dist/build/mp-weixin/common/main.js @@ -0,0 +1 @@ +(global["webpackJsonp"]=global["webpackJsonp"]||[]).push([["common/main"],{"1fda":function(e,t,n){"use strict";var o=n("c494"),r=n.n(o);r.a},"6c08":function(e,t,n){"use strict";(function(e){n("3364"),n("921b");var t=l(n("66fd")),o=l(n("a71b")),r=n("aa0b"),c=l(n("7b5e"));n("9571");var u=l(n("b78a"));function l(e){return e&&e.__esModule?e:{default:e}}function a(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,o)}return n}function f(e){for(var t=1;t.cu-item{-webkit-transition:all .6s ease-in-out 0s;transition:all .6s ease-in-out 0s;-webkit-transform:translateX(0rpx);transform:translateX(0rpx)}.cu-list>.cu-item.move-cur{-webkit-transform:translateX(-260rpx);transform:translateX(-260rpx)}.cu-list>.cu-item.move-cur1{-webkit-transform:translateX(-160rpx);transform:translateX(-160rpx)}.cu-list>.cu-item .move{position:absolute;top:40%;right:0;display:-webkit-box;display:-webkit-flex;display:flex;width:260rpx;-webkit-transform:translateX(100%);transform:translateX(100%)}.cu-list>.cu-item .move1{position:absolute;top:40%;right:0;display:-webkit-box;display:-webkit-flex;display:flex;width:160rpx;-webkit-transform:translateX(100%);transform:translateX(100%)}.cu-list>.cu-item .move view{display:-webkit-box;display:-webkit-flex;display:flex;-webkit-box-flex:1;-webkit-flex:1;flex:1;-webkit-box-pack:center;-webkit-justify-content:center;justify-content:center;-webkit-box-align:center;-webkit-align-items:center;align-items:center}.cu-list.menu-avatar>.cu-item{position:relative}.cu-list.menu-avatar>.cu-item>.cu-avatar{position:absolute;left:30rpx}.cu-list.menu-avatar>.cu-item .flex .text-cut{max-width:510rpx}.cu-list.menu-avatar>.cu-item .content{position:absolute;left:146rpx;width:-webkit-calc(100% - 96rpx - 60rpx - 120rpx - 20rpx);width:calc(100% - 96rpx - 60rpx - 120rpx - 20rpx);line-height:1.6em}.cu-list.menu-avatar>.cu-item .content.flex-sub{width:-webkit-calc(100% - 96rpx - 60rpx - 20rpx);width:calc(100% - 96rpx - 60rpx - 20rpx)}.cu-list.menu-avatar>.cu-item .content>view:first-child{font-size:30rpx;display:-webkit-box;display:-webkit-flex;display:flex;-webkit-box-align:center;-webkit-align-items:center;align-items:center}.cu-list.menu-avatar>.cu-item .content .cu-tag.sm{display:inline-block;margin-left:10rpx;height:28rpx;font-size:16rpx;line-height:32rpx}.cu-list.menu-avatar>.cu-item .action{width:100rpx;text-align:center}.cu-list.menu-avatar>.cu-item .action view+view{margin-top:10rpx}.cu-list.menu-avatar.comment>.cu-item .content{position:relative;left:0;width:auto;-webkit-box-flex:1;-webkit-flex:1;flex:1}.cu-list.menu-avatar.comment>.cu-item{padding:30rpx 30rpx 30rpx 120rpx;height:auto}.cu-list.menu-avatar.comment .cu-avatar{-webkit-align-self:flex-start;align-self:flex-start}.cu-list.menu>.cu-item{position:relative;display:-webkit-box;display:-webkit-flex;display:flex;padding:0 30rpx;min-height:100rpx;background-color:#fff;-webkit-box-pack:justify;-webkit-justify-content:space-between;justify-content:space-between;-webkit-box-align:center;-webkit-align-items:center;align-items:center}.cu-list.menu>.cu-item:last-child:after{border:none}.cu-list.menu-avatar>.cu-item:after, +.cu-list.menu>.cu-item:after{position:absolute;top:0;left:0;-webkit-box-sizing:border-box;box-sizing:border-box;width:200%;height:200%;-webkit-border-radius:inherit;border-radius:inherit;content:" ";-webkit-transform:scale(.5);transform:scale(.5);-webkit-transform-origin:0 0;transform-origin:0 0;pointer-events:none}.cu-list.menu>.cu-item.grayscale{background-color:#f5f5f5}.cu-list.menu>.cu-item.cur{background-color:#fcf7e9}.cu-list.menu>.cu-item.arrow{padding-right:90rpx}.cu-list.menu>.cu-item.arrow:before{position:absolute;top:0;right:30rpx;bottom:0;display:block;margin:auto;width:30rpx;height:30rpx;color:#8799a3;content:"\e6a3";text-align:center;font-size:34rpx;font-family:cuIcon;line-height:30rpx}.cu-list.menu>.cu-item button.content{padding:0;background-color:transparent;-webkit-box-pack:start;-webkit-justify-content:flex-start;justify-content:flex-start}.cu-list.menu>.cu-item button.content:after{display:none}.cu-list.menu>.cu-item .cu-avatar-group .cu-avatar{border-color:#fff}.cu-list.menu>.cu-item .content>view:first-child{display:-webkit-box;display:-webkit-flex;display:flex;-webkit-box-align:center;-webkit-align-items:center;align-items:center}.cu-list.menu>.cu-item .content>text[class*=cuIcon]{display:inline-block;margin-right:10rpx;width:1.6em;text-align:center}.cu-list.menu>.cu-item .content>image{display:inline-block;margin-right:10rpx;width:1.6em;height:1.6em;vertical-align:middle}.cu-list.menu>.cu-item .content{font-size:30rpx;line-height:1.6em;-webkit-box-flex:1;-webkit-flex:1;flex:1}.cu-list.menu>.cu-item .content .cu-tag.sm{display:inline-block;margin-left:10rpx;height:28rpx;font-size:16rpx;line-height:32rpx}.cu-list.menu>.cu-item .action .cu-tag:empty{right:10rpx}.cu-list.menu{display:block;overflow:hidden}.cu-list.menu.sm-border>.cu-item:after{left:30rpx;width:-webkit-calc(200% - 120rpx);width:calc(200% - 120rpx)}.cu-list.grid>.cu-item{position:relative;display:-webkit-box;display:-webkit-flex;display:flex;padding:20rpx 0 30rpx;-webkit-transition-duration:0s;transition-duration:0s;-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-flex-direction:column;flex-direction:column}.cu-list.grid>.cu-item:after{position:absolute;top:0;left:0;-webkit-box-sizing:border-box;box-sizing:border-box;width:200%;height:200%;border-right:1rpx solid rgba(0,0,0,.1);border-bottom:1rpx solid rgba(0,0,0,.1);-webkit-border-radius:inherit;border-radius:inherit;content:" ";-webkit-transform:scale(.5);transform:scale(.5);-webkit-transform-origin:0 0;transform-origin:0 0;pointer-events:none}.cu-list.grid>.cu-item text{display:block;margin-top:10rpx;color:#888;font-size:26rpx;line-height:40rpx}.cu-list.grid>.cu-item [class*=cuIcon]{position:relative;display:block;margin-top:20rpx;width:100%;font-size:48rpx}.cu-list.grid>.cu-item .cu-tag{right:auto;left:50%;margin-left:20rpx}.cu-list.grid{background-color:#fff;text-align:center}.cu-list.grid.no-border>.cu-item{padding-top:10rpx;padding-bottom:20rpx}.cu-list.grid.no-border>.cu-item:after{border:none}.cu-list.grid.no-border{padding:20rpx 10rpx}.cu-list.grid.col-3>.cu-item:nth-child(3n):after, +.cu-list.grid.col-4>.cu-item:nth-child(4n):after, +.cu-list.grid.col-5>.cu-item:nth-child(5n):after{border-right-width:0}.cu-list.card-menu{overflow:hidden;margin-right:30rpx;margin-left:30rpx;-webkit-border-radius:20rpx;border-radius:20rpx}.cu-bar{display:-webkit-box;display:-webkit-flex;display:flex;position:relative;-webkit-box-align:center;-webkit-align-items:center;align-items:center;min-height:100rpx;-webkit-box-pack:justify;-webkit-justify-content:space-between;justify-content:space-between}.cu-bar .action{display:-webkit-box;display:-webkit-flex;display:flex;-webkit-box-align:center;-webkit-align-items:center;align-items:center;height:100%;-webkit-box-pack:center;-webkit-justify-content:center;justify-content:center;max-width:100%}.cu-bar .action.border-title{position:relative;top:-10rpx}.cu-bar .action.border-title text[class*="bg-"]:last-child{position:absolute;bottom:-.5rem;min-width:2rem;height:6rpx;left:0}.cu-bar .action.sub-title{position:relative;top:-.2rem}.cu-bar .action.sub-title text{position:relative;z-index:1}.cu-bar .action.sub-title text[class*="bg-"]:last-child{position:absolute;display:inline-block;bottom:-.2rem;-webkit-border-radius:6rpx;border-radius:6rpx;width:100%;height:.6rem;left:.6rem;opacity:.3;z-index:0}.cu-bar .action.sub-title text[class*="text-"]:last-child{position:absolute;display:inline-block;bottom:-.7rem;left:.5rem;opacity:.2;z-index:0;text-align:right;font-weight:900;font-size:36rpx}.cu-bar.justify-center .action.border-title text:last-child, +.cu-bar.justify-center .action.sub-title text:last-child{left:0;right:0;margin:auto;text-align:center}.cu-bar .action:first-child{margin-left:30rpx;font-size:30rpx}.cu-bar .action text.text-cut{text-align:left;width:100%}.cu-bar .cu-avatar:first-child{margin-left:20rpx}.cu-bar .action:first-child>text[class*="cuIcon-"]{margin-left:-.3em;margin-right:.3em}.cu-bar .action:last-child{margin-right:30rpx}.cu-bar .action>text[class*="cuIcon-"], +.cu-bar .action>view[class*="cuIcon-"]{font-size:36rpx}.cu-bar .action>text[class*="cuIcon-"]+text[class*="cuIcon-"]{margin-left:.5em}.cu-bar .content{position:absolute;text-align:center;width:-webkit-calc(100% - 340rpx);width:calc(100% - 340rpx);left:0;right:0;bottom:0;top:0;margin:auto;height:60rpx;font-size:32rpx;line-height:60rpx;cursor:none;pointer-events:none;text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.cu-bar.ios .content{bottom:7rpx;height:30rpx;font-size:32rpx;line-height:30rpx}.cu-bar.btn-group{-webkit-justify-content:space-around;justify-content:space-around}.cu-bar.btn-group button{padding:20rpx 32rpx}.cu-bar.btn-group button{-webkit-box-flex:1;-webkit-flex:1;flex:1;margin:0 20rpx;max-width:50%}.cu-bar .search-form{background-color:#f5f5f5;line-height:64rpx;height:64rpx;font-size:24rpx;color:#333;-webkit-box-flex:1;-webkit-flex:1;flex:1;display:-webkit-box;display:-webkit-flex;display:flex;-webkit-box-align:center;-webkit-align-items:center;align-items:center;margin:0 30rpx}.cu-bar .search-form+.action{margin-right:30rpx}.cu-bar .search-form input{-webkit-box-flex:1;-webkit-flex:1;flex:1;padding-right:30rpx;height:64rpx;line-height:64rpx;font-size:26rpx;background-color:transparent}.cu-bar .search-form [class*="cuIcon-"]{margin:0 .5em 0 .8em}.cu-bar .search-form [class*="cuIcon-"]::before{top:0rpx}.cu-bar.fixed, +.nav.fixed{position:fixed;width:100%;top:0;z-index:1024;-webkit-box-shadow:0 1rpx 6rpx rgba(0,0,0,.1);box-shadow:0 1rpx 6rpx rgba(0,0,0,.1)}.cu-bar.foot{position:fixed;width:100%;bottom:0;z-index:1024;-webkit-box-shadow:0 -1rpx 6rpx rgba(0,0,0,.1);box-shadow:0 -1rpx 6rpx rgba(0,0,0,.1)}.cu-bar.tabbar{padding:0;height:-webkit-calc(100rpx + env(safe-area-inset-bottom)/2);height:calc(100rpx + env(safe-area-inset-bottom) / 2);padding-bottom:-webkit-calc(env(safe-area-inset-bottom)/2);padding-bottom:calc(env(safe-area-inset-bottom) / 2)}.cu-tabbar-height{min-height:100rpx;height:-webkit-calc(100rpx + env(safe-area-inset-bottom)/2);height:calc(100rpx + env(safe-area-inset-bottom) / 2)}.cu-bar.tabbar.shadow{-webkit-box-shadow:0 -1rpx 6rpx rgba(0,0,0,.1);box-shadow:0 -1rpx 6rpx rgba(0,0,0,.1)}.cu-bar.tabbar .action{font-size:22rpx;position:relative;-webkit-box-flex:1;-webkit-flex:1;flex:1;text-align:center;padding:0;display:block;height:auto;line-height:1;margin:0;background-color:inherit;overflow:initial}.cu-bar.tabbar.shop .action{width:140rpx;-webkit-box-flex:initial;-webkit-flex:initial;flex:initial}.cu-bar.tabbar .action.add-action{position:relative;z-index:2;padding-top:50rpx}.cu-bar.tabbar .action.add-action [class*="cuIcon-"]{position:absolute;width:70rpx;z-index:2;height:70rpx;-webkit-border-radius:50%;border-radius:50%;line-height:70rpx;font-size:50rpx;top:-35rpx;left:0;right:0;margin:auto;padding:0}.cu-bar.tabbar .action.add-action::after{content:"";position:absolute;width:100rpx;height:100rpx;top:-50rpx;left:0;right:0;margin:auto;-webkit-box-shadow:0 -3rpx 8rpx rgba(0,0,0,.08);box-shadow:0 -3rpx 8rpx rgba(0,0,0,.08);-webkit-border-radius:50rpx;border-radius:50rpx;background-color:inherit;z-index:0}.cu-bar.tabbar .action.add-action::before{content:"";position:absolute;width:100rpx;height:30rpx;bottom:30rpx;left:0;right:0;margin:auto;background-color:inherit;z-index:1}.cu-bar.tabbar .btn-group{-webkit-box-flex:1;-webkit-flex:1;flex:1;display:-webkit-box;display:-webkit-flex;display:flex;-webkit-justify-content:space-around;justify-content:space-around;-webkit-box-align:center;-webkit-align-items:center;align-items:center;padding:0 10rpx}.cu-bar.tabbar button.action::after{border:0}.cu-bar.tabbar .action [class*="cuIcon-"]{width:100rpx;position:relative;display:block;height:auto;margin:0 auto 10rpx;text-align:center;font-size:40rpx}.cu-bar.tabbar .action .cuIcon-cu-image{margin:0 auto}.cu-bar.tabbar .action .cuIcon-cu-image image{width:50rpx;height:50rpx;display:inline-block}.cu-bar.tabbar .submit{-webkit-box-align:center;-webkit-align-items:center;align-items:center;display:-webkit-box;display:-webkit-flex;display:flex;-webkit-box-pack:center;-webkit-justify-content:center;justify-content:center;text-align:center;position:relative;-webkit-box-flex:2;-webkit-flex:2;flex:2;-webkit-align-self:stretch;align-self:stretch}.cu-bar.tabbar .submit:last-child{-webkit-box-flex:2.6;-webkit-flex:2.6;flex:2.6}.cu-bar.tabbar .submit+.submit{-webkit-box-flex:2;-webkit-flex:2;flex:2}.cu-bar.tabbar.border .action::before{content:" ";width:200%;height:200%;position:absolute;top:0;left:0;-webkit-transform:scale(.5);transform:scale(.5);-webkit-transform-origin:0 0;transform-origin:0 0;border-right:1rpx solid rgba(0,0,0,.1);z-index:3}.cu-bar.tabbar.border .action:last-child:before{display:none}.cu-bar.input{padding-right:20rpx;background-color:#fff}.cu-bar.input input{overflow:initial;line-height:64rpx;height:64rpx;min-height:64rpx;-webkit-box-flex:1;-webkit-flex:1;flex:1;font-size:30rpx;margin:0 20rpx}.cu-bar.input .action{margin-left:20rpx}.cu-bar.input .action [class*="cuIcon-"]{font-size:48rpx}.cu-bar.input input+.action{margin-right:20rpx;margin-left:0rpx}.cu-bar.input .action:first-child [class*="cuIcon-"]{margin-left:0rpx}.cu-custom{display:block;position:relative}.cu-custom .cu-bar .content{width:-webkit-calc(100% - 440rpx);width:calc(100% - 440rpx)}.cu-custom .cu-bar .content image{height:60rpx;width:240rpx}.cu-custom .cu-bar{min-height:0rpx;padding-right:220rpx;-webkit-box-shadow:0rpx 0rpx 0rpx;box-shadow:0rpx 0rpx 0rpx;z-index:9999}.cu-custom .cu-bar .border-custom{position:relative;background:rgba(0,0,0,.15);-webkit-border-radius:1000rpx;border-radius:1000rpx;height:30rpx}.cu-custom .cu-bar .border-custom::after{content:" ";width:200%;height:200%;position:absolute;top:0;left:0;-webkit-border-radius:inherit;border-radius:inherit;-webkit-transform:scale(.5);transform:scale(.5);-webkit-transform-origin:0 0;transform-origin:0 0;pointer-events:none;-webkit-box-sizing:border-box;box-sizing:border-box;border:1rpx solid #fff;opacity:.5}.cu-custom .cu-bar .border-custom::before{content:" ";width:1rpx;height:110%;position:absolute;top:22.5%;left:0;right:0;margin:auto;-webkit-transform:scale(.5);transform:scale(.5);-webkit-transform-origin:0 0;transform-origin:0 0;pointer-events:none;-webkit-box-sizing:border-box;box-sizing:border-box;opacity:.6;background-color:#fff}.cu-custom .cu-bar .border-custom text{display:block;-webkit-box-flex:1;-webkit-flex:1;flex:1;margin:auto!important;text-align:center;font-size:34rpx}.nav{white-space:nowrap}::-webkit-scrollbar{display:none}.nav .cu-item{height:90rpx;display:inline-block;line-height:90rpx;margin:0 10rpx;padding:0 20rpx}.nav .cu-item.cur{border-bottom:4rpx solid}.cu-timeline{display:block;background-color:#fff}.cu-timeline .cu-time{width:120rpx;text-align:center;padding:20rpx 0;font-size:26rpx;color:#888;display:block}.cu-timeline>.cu-item{padding:30rpx 30rpx 30rpx 120rpx;position:relative;display:block;z-index:0}.cu-timeline>.cu-item:not([class*="text-"]){color:#ccc}.cu-timeline>.cu-item::after{content:"";display:block;position:absolute;width:1rpx;background-color:#ddd;left:60rpx;height:100%;top:0;z-index:8}.cu-timeline>.cu-item::before{font-family:cuIcon;display:block;position:absolute;top:36rpx;z-index:9;background-color:#fff;width:50rpx;height:50rpx;text-align:center;border:none;line-height:50rpx;left:36rpx}.cu-timeline>.cu-item:not([class*="cuIcon-"])::before{content:"\e763"}.cu-timeline>.cu-item[class*="cuIcon-"]::before{background-color:#fff;width:50rpx;height:50rpx;text-align:center;border:none;line-height:50rpx;left:36rpx}.cu-timeline>.cu-item>.content{padding:30rpx;-webkit-border-radius:6rpx;border-radius:6rpx;display:block;line-height:1.6}.cu-timeline>.cu-item>.content:not([class*="bg-"]){background-color:#f1f1f1;color:#333}.cu-timeline>.cu-item>.content+.content{margin-top:20rpx}.cu-chat{display:-webkit-box;display:-webkit-flex;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-flex-direction:column;flex-direction:column}.cu-chat .cu-item{display:-webkit-box;display:-webkit-flex;display:flex;padding:30rpx 30rpx 70rpx;position:relative}.cu-chat .cu-item>.cu-avatar{width:80rpx;height:80rpx}.cu-chat .cu-item>.main{max-width:-webkit-calc(100% - 260rpx);max-width:calc(100% - 260rpx);margin:0 40rpx;display:-webkit-box;display:-webkit-flex;display:flex;-webkit-box-align:center;-webkit-align-items:center;align-items:center}.cu-chat .cu-item>image{height:320rpx}.cu-chat .cu-item>.main .content{padding:20rpx;-webkit-border-radius:6rpx;border-radius:6rpx;display:-webkit-inline-box;display:-webkit-inline-flex;display:inline-flex;max-width:100%;-webkit-box-align:center;-webkit-align-items:center;align-items:center;font-size:30rpx;position:relative;min-height:80rpx;line-height:40rpx;text-align:left}.cu-chat .cu-item>.main .content:not([class*="bg-"]){background-color:#fff;color:#333}.cu-chat .cu-item .date{position:absolute;font-size:24rpx;color:#8799a3;width:-webkit-calc(100% - 320rpx);width:calc(100% - 320rpx);bottom:20rpx;left:160rpx}.cu-chat .cu-item .action{padding:0 30rpx;display:-webkit-box;display:-webkit-flex;display:flex;-webkit-box-align:center;-webkit-align-items:center;align-items:center}.cu-chat .cu-item>.main .content::after{content:"";top:27rpx;-webkit-transform:rotate(45deg);transform:rotate(45deg);position:absolute;z-index:100;display:inline-block;overflow:hidden;width:24rpx;height:24rpx;left:-12rpx;right:auto;background-color:inherit}.cu-chat .cu-item.self>.main .content::after{left:auto;right:-12rpx}.cu-chat .cu-item>.main .content::before{content:"";top:30rpx;-webkit-transform:rotate(45deg);transform:rotate(45deg);position:absolute;z-index:-1;display:inline-block;overflow:hidden;width:24rpx;height:24rpx;left:-12rpx;right:auto;background-color:inherit;-webkit-filter:blur(5rpx);filter:blur(5rpx);opacity:.3}.cu-chat .cu-item>.main .content:not([class*="bg-"])::before{background-color:#333;opacity:.1}.cu-chat .cu-item.self>.main .content::before{left:auto;right:-12rpx}.cu-chat .cu-item.self{-webkit-box-pack:end;-webkit-justify-content:flex-end;justify-content:flex-end;text-align:right}.cu-chat .cu-info{display:inline-block;margin:20rpx auto;font-size:24rpx;padding:8rpx 12rpx;background-color:rgba(0,0,0,.2);-webkit-border-radius:6rpx;border-radius:6rpx;color:#fff;max-width:400rpx;line-height:1.4}.cu-card{display:block;overflow:hidden}.cu-card>.cu-item{display:block;background-color:#fff;overflow:hidden;-webkit-border-radius:10rpx;border-radius:10rpx;margin:30rpx}.cu-card>.cu-item.shadow-blur{overflow:initial}.cu-card.no-card>.cu-item{margin:0rpx;-webkit-border-radius:0rpx;border-radius:0rpx}.cu-card .grid.grid-square{margin-bottom:-20rpx}.cu-card.case .image{position:relative}.cu-card.case .image image{width:100%}.cu-card.case .image .cu-tag{position:absolute;right:0;top:0}.cu-card.case .image .cu-bar{position:absolute;bottom:0;width:100%;background-color:transparent;padding:0rpx 30rpx}.cu-card.case.no-card .image{margin:30rpx 30rpx 0;overflow:hidden;-webkit-border-radius:10rpx;border-radius:10rpx}.cu-card.dynamic{display:block}.cu-card.dynamic>.cu-item{display:block;background-color:#fff;overflow:hidden}.cu-card.dynamic>.cu-item>.text-content{padding:0 30rpx 0;max-height:6.4em;overflow:hidden;font-size:30rpx;margin-bottom:20rpx}.cu-card.dynamic>.cu-item .square-img{width:100%;height:200rpx;-webkit-border-radius:6rpx;border-radius:6rpx}.cu-card.dynamic>.cu-item .only-img{width:100%;height:320rpx;-webkit-border-radius:6rpx;border-radius:6rpx}.cu-card.article{display:block}.cu-card.article>.cu-item{padding-bottom:30rpx}.cu-card.article>.cu-item .title{font-size:30rpx;font-weight:900;color:#333;line-height:100rpx;padding:0 30rpx}.cu-card.article>.cu-item .content{display:-webkit-box;display:-webkit-flex;display:flex;padding:0 30rpx}.cu-card.article>.cu-item .content>image{width:240rpx;height:6.4em;margin-right:20rpx;-webkit-border-radius:6rpx;border-radius:6rpx}.cu-card.article>.cu-item .content .desc{-webkit-box-flex:1;-webkit-flex:1;flex:1;display:-webkit-box;display:-webkit-flex;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-flex-direction:column;flex-direction:column;-webkit-box-pack:justify;-webkit-justify-content:space-between;justify-content:space-between}.cu-card.article>.cu-item .content .text-content{font-size:28rpx;color:#888;height:4.8em;overflow:hidden}.cu-form-group{background-color:#fff;padding:1rpx 30rpx;display:-webkit-box;display:-webkit-flex;display:flex;-webkit-box-align:center;-webkit-align-items:center;align-items:center;min-height:100rpx;-webkit-box-pack:justify;-webkit-justify-content:space-between;justify-content:space-between}.cu-form-group+.cu-form-group{border-top:1rpx solid #eee}.cu-form-group .title{text-align:justify;padding-right:30rpx;font-size:30rpx;position:relative;height:60rpx;line-height:60rpx}.cu-form-group input{-webkit-box-flex:1;-webkit-flex:1;flex:1;font-size:30rpx;color:#555;padding-right:20rpx}.cu-form-group>text[class*="cuIcon-"]{font-size:36rpx;padding:0;-webkit-box-sizing:border-box;box-sizing:border-box}.cu-form-group textarea{margin:32rpx 0 30rpx;height:4.6em;width:100%;line-height:1.2em;-webkit-box-flex:1;-webkit-flex:1;flex:1;font-size:28rpx;padding:0}.cu-form-group.align-start .title{height:1em;margin-top:32rpx;line-height:1em}.cu-form-group picker{-webkit-box-flex:1;-webkit-flex:1;flex:1;padding-right:40rpx;overflow:hidden;position:relative}.cu-form-group picker .picker{line-height:100rpx;font-size:28rpx;text-overflow:ellipsis;white-space:nowrap;overflow:hidden;width:100%;text-align:right}.cu-form-group picker::after{font-family:cuIcon;display:block;content:"\e6a3";position:absolute;font-size:34rpx;color:#8799a3;line-height:100rpx;width:60rpx;text-align:center;top:0;bottom:0;right:-20rpx;margin:auto}.cu-form-group textarea[disabled], +.cu-form-group textarea[disabled] .placeholder{color:transparent}.cu-modal{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1110;opacity:0;outline:0;text-align:center;-webkit-transform:scale(1.185);transform:scale(1.185);-webkit-backface-visibility:hidden;backface-visibility:hidden;-webkit-perspective:2000rpx;perspective:2000rpx;background:rgba(0,0,0,.6);-webkit-transition:all .3s ease-in-out 0s;transition:all .3s ease-in-out 0s;pointer-events:none}.cu-modal::before{content:"\200B";display:inline-block;height:100%;vertical-align:middle}.cu-modal.show{opacity:1;-webkit-transition-duration:.3s;transition-duration:.3s;-webkit-transform:scale(1);transform:scale(1);overflow-x:hidden;overflow-y:auto;pointer-events:auto}.cu-dialog{position:relative;display:inline-block;vertical-align:middle;margin-left:auto;margin-right:auto;width:680rpx;max-width:100%;background-color:#f8f8f8;-webkit-border-radius:10rpx;border-radius:10rpx;overflow:hidden}.cu-modal.bottom-modal::before{vertical-align:bottom}.cu-modal.bottom-modal .cu-dialog{width:100%;-webkit-border-radius:0;border-radius:0}.cu-modal.bottom-modal{margin-bottom:-1000rpx}.cu-modal.bottom-modal.show{margin-bottom:0}.cu-modal.drawer-modal{-webkit-transform:scale(1);transform:scale(1);display:-webkit-box;display:-webkit-flex;display:flex}.cu-modal.drawer-modal .cu-dialog{height:100%;min-width:200rpx;-webkit-border-radius:0;border-radius:0;margin:initial;-webkit-transition-duration:.3s;transition-duration:.3s}.cu-modal.drawer-modal.justify-start .cu-dialog{-webkit-transform:translateX(-100%);transform:translateX(-100%)}.cu-modal.drawer-modal.justify-end .cu-dialog{-webkit-transform:translateX(100%);transform:translateX(100%)}.cu-modal.drawer-modal.show .cu-dialog{-webkit-transform:translateX(0);transform:translateX(0)}.cu-modal .cu-dialog>.cu-bar:first-child .action{min-width:100rpx;margin-right:0;min-height:100rpx}swiper .a-swiper-dot{display:inline-block;width:16rpx;height:16rpx;background:rgba(0,0,0,.3);-webkit-border-radius:50%;border-radius:50%;vertical-align:middle}swiper[class*="-dot"] .wx-swiper-dots, +swiper[class*="-dot"] .a-swiper-dots, +swiper[class*="-dot"] .uni-swiper-dots{display:-webkit-box;display:-webkit-flex;display:flex;-webkit-box-align:center;-webkit-align-items:center;align-items:center;width:100%;-webkit-box-pack:center;-webkit-justify-content:center;justify-content:center}swiper.square-dot .wx-swiper-dot, +swiper.square-dot .a-swiper-dot, +swiper.square-dot .uni-swiper-dot{background-color:#fff;opacity:.4;width:10rpx;height:10rpx;-webkit-border-radius:20rpx;border-radius:20rpx;margin:0 8rpx!important}swiper.square-dot .wx-swiper-dot.wx-swiper-dot-active, +swiper.square-dot .a-swiper-dot.a-swiper-dot-active, +swiper.square-dot .uni-swiper-dot.uni-swiper-dot-active{opacity:1;width:30rpx}swiper.round-dot .wx-swiper-dot, +swiper.round-dot .a-swiper-dot, +swiper.round-dot .uni-swiper-dot{width:10rpx;height:10rpx;position:relative;margin:4rpx 8rpx!important}swiper.round-dot .wx-swiper-dot.wx-swiper-dot-active::after, +swiper.round-dot .a-swiper-dot.a-swiper-dot-active::after, +swiper.round-dot .uni-swiper-dot.uni-swiper-dot-active::after{content:"";position:absolute;width:10rpx;height:10rpx;top:0rpx;left:0rpx;right:0;bottom:0;margin:auto;background-color:#fff;-webkit-border-radius:20rpx;border-radius:20rpx}swiper.round-dot .wx-swiper-dot.wx-swiper-dot-active, +swiper.round-dot .a-swiper-dot.a-swiper-dot-active, +swiper.round-dot .uni-swiper-dot.uni-swiper-dot-active{width:18rpx;height:18rpx}.screen-swiper{min-height:375rpx}.screen-swiper image, +.screen-swiper video, +.swiper-item image, +.swiper-item video{width:100%;display:block;height:100%;margin:0;pointer-events:none}.card-swiper{height:420rpx!important}.card-swiper swiper-item{width:610rpx!important;left:70rpx;-webkit-box-sizing:border-box;box-sizing:border-box;padding:40rpx 0rpx 70rpx;overflow:initial}.card-swiper swiper-item .swiper-item{width:100%;display:block;height:100%;-webkit-border-radius:10rpx;border-radius:10rpx;-webkit-transform:scale(.9);transform:scale(.9);-webkit-transition:all .2s ease-in 0s;transition:all .2s ease-in 0s;overflow:hidden}.card-swiper swiper-item.cur .swiper-item{-webkit-transform:none;transform:none;-webkit-transition:all .2s ease-in 0s;transition:all .2s ease-in 0s}.tower-swiper{height:420rpx;position:relative;max-width:750rpx;overflow:hidden}.tower-swiper .tower-item{position:absolute;width:300rpx;height:380rpx;top:0;bottom:0;left:50%;margin:auto;-webkit-transition:all .2s ease-in 0s;transition:all .2s ease-in 0s;opacity:1}.tower-swiper .tower-item.none{opacity:0}.tower-swiper .tower-item .swiper-item{width:100%;height:100%;-webkit-border-radius:6rpx;border-radius:6rpx;overflow:hidden}.cu-steps{display:-webkit-box;display:-webkit-flex;display:flex}scroll-view.cu-steps{display:block;white-space:nowrap}scroll-view.cu-steps .cu-item{display:inline-block}.cu-steps .cu-item{-webkit-box-flex:1;-webkit-flex:1;flex:1;text-align:center;position:relative;min-width:100rpx}.cu-steps .cu-item:not([class*="text-"]){color:#8799a3}.cu-steps .cu-item [class*="cuIcon-"], +.cu-steps .cu-item .num{display:block;font-size:40rpx;line-height:80rpx}.cu-steps .cu-item::before, +.cu-steps .cu-item::after, +.cu-steps.steps-arrow .cu-item::before, +.cu-steps.steps-arrow .cu-item::after{content:"";display:block;position:absolute;height:0rpx;width:-webkit-calc(100% - 80rpx);width:calc(100% - 80rpx);border-bottom:1rpx solid #ccc;left:-webkit-calc(0rpx - (100% - 80rpx)/2);left:calc(0rpx - (100% - 80rpx) / 2);top:40rpx;z-index:0}.cu-steps.steps-arrow .cu-item::before, +.cu-steps.steps-arrow .cu-item::after{content:"\e6a3";font-family:cuIcon;height:30rpx;border-bottom-width:0rpx;line-height:30rpx;top:0;bottom:0;margin:auto;color:#ccc}.cu-steps.steps-bottom .cu-item::before, +.cu-steps.steps-bottom .cu-item::after{bottom:40rpx;top:auto}.cu-steps .cu-item::after{border-bottom:1rpx solid currentColor;width:0rpx;-webkit-transition:all .3s ease-in-out 0s;transition:all .3s ease-in-out 0s}.cu-steps .cu-item[class*="text-"]::after{width:-webkit-calc(100% - 80rpx);width:calc(100% - 80rpx);color:currentColor}.cu-steps .cu-item:first-child::before, +.cu-steps .cu-item:first-child::after{display:none}.cu-steps .cu-item .num{width:40rpx;height:40rpx;-webkit-border-radius:50%;border-radius:50%;line-height:40rpx;margin:20rpx auto;font-size:24rpx;border:1rpx solid currentColor;position:relative;overflow:hidden}.cu-steps .cu-item[class*="text-"] .num{background-color:currentColor}.cu-steps .cu-item .num::before, +.cu-steps .cu-item .num::after{content:attr(data-index);position:absolute;left:0;right:0;top:0;bottom:0;margin:auto;-webkit-transition:all .3s ease-in-out 0s;transition:all .3s ease-in-out 0s;-webkit-transform:translateY(0rpx);transform:translateY(0rpx)}.cu-steps .cu-item[class*="text-"] .num::before{-webkit-transform:translateY(-40rpx);transform:translateY(-40rpx);color:#fff}.cu-steps .cu-item .num::after{-webkit-transform:translateY(40rpx);transform:translateY(40rpx);color:#fff;-webkit-transition:all .3s ease-in-out 0s;transition:all .3s ease-in-out 0s}.cu-steps .cu-item[class*="text-"] .num::after{content:"\e645";font-family:cuIcon;color:#fff;-webkit-transform:translateY(0rpx);transform:translateY(0rpx)}.cu-steps .cu-item[class*="text-"] .num.err::after{content:"\e646"}.flex{display:-webkit-box;display:-webkit-flex;display:flex}.basis-xs{-webkit-flex-basis:20%;flex-basis:20%}.basis-sm{-webkit-flex-basis:40%;flex-basis:40%}.basis-df{-webkit-flex-basis:50%;flex-basis:50%}.basis-lg{-webkit-flex-basis:60%;flex-basis:60%}.basis-xl{-webkit-flex-basis:80%;flex-basis:80%}.flex-sub{-webkit-box-flex:1;-webkit-flex:1;flex:1}.flex-twice{-webkit-box-flex:2;-webkit-flex:2;flex:2}.flex-treble{-webkit-box-flex:3;-webkit-flex:3;flex:3}.flex-direction{-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-flex-direction:column;flex-direction:column}.flex-wrap{-webkit-flex-wrap:wrap;flex-wrap:wrap}.align-start{-webkit-box-align:start;-webkit-align-items:flex-start;align-items:flex-start}.align-end{-webkit-box-align:end;-webkit-align-items:flex-end;align-items:flex-end}.align-center{-webkit-box-align:center;-webkit-align-items:center;align-items:center}.align-stretch{-webkit-box-align:stretch;-webkit-align-items:stretch;align-items:stretch}.self-start{-webkit-align-self:flex-start;align-self:flex-start}.self-center{-webkit-align-self:flex-center;align-self:flex-center}.self-end{-webkit-align-self:flex-end;align-self:flex-end}.self-stretch{-webkit-align-self:stretch;align-self:stretch}.align-stretch{-webkit-box-align:stretch;-webkit-align-items:stretch;align-items:stretch}.justify-start{-webkit-box-pack:start;-webkit-justify-content:flex-start;justify-content:flex-start}.justify-end{-webkit-box-pack:end;-webkit-justify-content:flex-end;justify-content:flex-end}.justify-center{-webkit-box-pack:center;-webkit-justify-content:center;justify-content:center}.justify-between{-webkit-box-pack:justify;-webkit-justify-content:space-between;justify-content:space-between}.justify-around{-webkit-justify-content:space-around;justify-content:space-around}.grid{display:-webkit-box;display:-webkit-flex;display:flex;-webkit-flex-wrap:wrap;flex-wrap:wrap}.grid.grid-square{overflow:hidden}.grid.grid-square .cu-tag{position:absolute;right:0;top:0;-webkit-border-bottom-left-radius:6rpx;border-bottom-left-radius:6rpx;padding:6rpx 12rpx;height:auto;background-color:rgba(0,0,0,.5)}.grid.grid-square>view>text[class*="cuIcon-"]{font-size:52rpx;position:absolute;color:#8799a3;margin:auto;top:0;bottom:0;left:0;right:0;display:-webkit-box;display:-webkit-flex;display:flex;-webkit-box-pack:center;-webkit-justify-content:center;justify-content:center;-webkit-box-align:center;-webkit-align-items:center;align-items:center;-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-flex-direction:column;flex-direction:column}.grid.grid-square>view{margin-right:20rpx;margin-bottom:20rpx;-webkit-border-radius:6rpx;border-radius:6rpx;position:relative;overflow:hidden}.grid.grid-square>view.bg-img image{width:100%;height:100%;position:absolute}.grid.col-1.grid-square>view{padding-bottom:100%;height:0;margin-right:0}.grid.col-2.grid-square>view{padding-bottom:-webkit-calc((100% - 20rpx)/2);padding-bottom:calc((100% - 20rpx)/2);height:0;width:-webkit-calc((100% - 20rpx)/2);width:calc((100% - 20rpx)/2)}.grid.col-3.grid-square>view{padding-bottom:-webkit-calc((100% - 40rpx)/3);padding-bottom:calc((100% - 40rpx)/3);height:0;width:-webkit-calc((100% - 40rpx)/3);width:calc((100% - 40rpx)/3)}.grid.col-4.grid-square>view{padding-bottom:-webkit-calc((100% - 60rpx)/4);padding-bottom:calc((100% - 60rpx)/4);height:0;width:-webkit-calc((100% - 60rpx)/4);width:calc((100% - 60rpx)/4)}.grid.col-5.grid-square>view{padding-bottom:-webkit-calc((100% - 80rpx)/5);padding-bottom:calc((100% - 80rpx)/5);height:0;width:-webkit-calc((100% - 80rpx)/5);width:calc((100% - 80rpx)/5)}.grid.col-2.grid-square>view:nth-child(2n), +.grid.col-3.grid-square>view:nth-child(3n), +.grid.col-4.grid-square>view:nth-child(4n), +.grid.col-5.grid-square>view:nth-child(5n){margin-right:0}.grid.col-1>view{width:100%}.grid.col-2>view{width:50%}.grid.col-3>view{width:33.33%}.grid.col-4>view{width:25%}.grid.col-5>view{width:20%}.margin-0{margin:0}.margin-xs{margin:10rpx}.margin-sm{margin:20rpx}.margin{margin:30rpx}.margin-lg{margin:40rpx}.margin-xl{margin:50rpx}.margin-top-xs{margin-top:10rpx}.margin-top-sm{margin-top:20rpx}.margin-top{margin-top:30rpx}.margin-top-lg{margin-top:40rpx}.margin-top-xl{margin-top:50rpx}.margin-right-xs{margin-right:10rpx}.margin-right-sm{margin-right:20rpx}.margin-right{margin-right:30rpx}.margin-right-lg{margin-right:40rpx}.margin-right-xl{margin-right:50rpx}.margin-bottom-xs{margin-bottom:10rpx}.margin-bottom-sm{margin-bottom:20rpx}.margin-bottom{margin-bottom:30rpx}.margin-bottom-lg{margin-bottom:40rpx}.margin-bottom-xl{margin-bottom:50rpx}.margin-left-xs{margin-left:10rpx}.margin-left-sm{margin-left:20rpx}.margin-left{margin-left:30rpx}.margin-left-lg{margin-left:40rpx}.margin-left-xl{margin-left:50rpx}.margin-lr-xs{margin-left:10rpx;margin-right:10rpx}.margin-lr-sm{margin-left:20rpx;margin-right:20rpx}.margin-lr{margin-left:30rpx;margin-right:30rpx}.margin-lr-lg{margin-left:40rpx;margin-right:40rpx}.margin-lr-xl{margin-left:50rpx;margin-right:50rpx}.margin-tb-xs{margin-top:10rpx;margin-bottom:10rpx}.margin-tb-sm{margin-top:20rpx;margin-bottom:20rpx}.margin-tb{margin-top:30rpx;margin-bottom:30rpx}.margin-tb-lg{margin-top:40rpx;margin-bottom:40rpx}.margin-tb-xl{margin-top:50rpx;margin-bottom:50rpx}.padding-0{padding:0}.padding-xs{padding:10rpx}.padding-sm{padding:20rpx}.padding{padding:30rpx}.padding-lg{padding:40rpx}.padding-xl{padding:50rpx}.padding-top-xs{padding-top:10rpx}.padding-top-sm{padding-top:20rpx}.padding-top{padding-top:30rpx}.padding-top-lg{padding-top:40rpx}.padding-top-xl{padding-top:50rpx}.padding-right-xs{padding-right:10rpx}.padding-right-sm{padding-right:20rpx}.padding-right{padding-right:30rpx}.padding-right-lg{padding-right:40rpx}.padding-right-xl{padding-right:50rpx}.padding-bottom-xs{padding-bottom:10rpx}.padding-bottom-sm{padding-bottom:20rpx}.padding-bottom{padding-bottom:30rpx}.padding-bottom-lg{padding-bottom:40rpx}.padding-bottom-xl{padding-bottom:50rpx}.padding-left-xs{padding-left:10rpx}.padding-left-sm{padding-left:20rpx}.padding-left{padding-left:30rpx}.padding-left-lg{padding-left:40rpx}.padding-left-xl{padding-left:50rpx}.padding-lr-xs{padding-left:10rpx;padding-right:10rpx}.padding-lr-sm{padding-left:20rpx;padding-right:20rpx}.padding-lr{padding-left:30rpx;padding-right:30rpx}.padding-lr-lg{padding-left:40rpx;padding-right:40rpx}.padding-lr-xl{padding-left:50rpx;padding-right:50rpx}.padding-tb-xs{padding-top:10rpx;padding-bottom:10rpx}.padding-tb-sm{padding-top:20rpx;padding-bottom:20rpx}.padding-tb{padding-top:30rpx;padding-bottom:30rpx}.padding-tb-lg{padding-top:40rpx;padding-bottom:40rpx}.padding-tb-xl{padding-top:50rpx;padding-bottom:50rpx}.cf::after, +.cf::before{content:" ";display:table}.cf::after{clear:both}.fl{float:left}.fr{float:right}.line-red::after, +.lines-red::after{border-color:#e54d42}.line-orange::after, +.lines-orange::after{border-color:#f37b1d}.line-yellow::after, +.lines-yellow::after{border-color:#fbbd08}.line-olive::after, +.lines-olive::after{border-color:#8dc63f}.line-green::after, +.lines-green::after{border-color:#39b54a}.line-cyan::after, +.lines-cyan::after{border-color:#1cbbb4}.line-blue::after, +.lines-blue::after{border-color:#0081ff}.line-purple::after, +.lines-purple::after{border-color:#6739b6}.line-mauve::after, +.lines-mauve::after{border-color:#9c26b0}.line-pink::after, +.lines-pink::after{border-color:#e03997}.line-brown::after, +.lines-brown::after{border-color:#a5673f}.line-grey::after, +.lines-grey::after{border-color:#8799a3}.line-gray::after, +.lines-gray::after{border-color:#aaa}.line-black::after, +.lines-black::after{border-color:#333}.line-white::after, +.lines-white::after{border-color:#fff}.bg-red{background-color:#e54d42;color:#fff}.bg-orange{background-color:#f37b1d;color:#fff}.bg-yellow{background-color:#fbbd08;color:#333}.bg-olive{background-color:#8dc63f;color:#fff}.bg-green{background-color:#39b54a;color:#fff}.bg-cyan{background-color:#1cbbb4;color:#fff}.bg-blue{background-color:#0081ff;color:#fff}.bg-purple{background-color:#6739b6;color:#fff}.bg-mauve{background-color:#9c26b0;color:#fff}.bg-pink{background-color:#e03997;color:#fff}.bg-brown{background-color:#a5673f;color:#fff}.bg-grey{background-color:#8799a3;color:#fff}.bg-gray{background-color:#f0f0f0;color:#333}.bg-black{background-color:#333;color:#fff}.bg-white{background-color:#fff;color:#666}.bg-shadeTop{background-image:-webkit-gradient(linear,left top,left bottom,from(#000),to(rgba(0,0,0,.01)));background-image:-webkit-linear-gradient(#000,rgba(0,0,0,.01));background-image:linear-gradient(#000,rgba(0,0,0,.01));color:#fff}.bg-shadeBottom{background-image:-webkit-gradient(linear,left top,left bottom,from(rgba(0,0,0,.01)),to(#000));background-image:-webkit-linear-gradient(rgba(0,0,0,.01),#000);background-image:linear-gradient(rgba(0,0,0,.01),#000);color:#fff}.bg-red.light{color:#e54d42;background-color:#fadbd9}.bg-orange.light{color:#f37b1d;background-color:#fde6d2}.bg-yellow.light{color:#fbbd08;background-color:rgba(254,242,206,.82)}.bg-olive.light{color:#8dc63f;background-color:#e8f4d9}.bg-green.light{color:#39b54a;background-color:#d7f0db}.bg-cyan.light{color:#1cbbb4;background-color:#d2f1f0}.bg-blue.light{color:#0081ff;background-color:#cce6ff}.bg-purple.light{color:#6739b6;background-color:#e1d7f0}.bg-mauve.light{color:#9c26b0;background-color:#ebd4ef}.bg-pink.light{color:#e03997;background-color:#f9d7ea}.bg-brown.light{color:#a5673f;background-color:#ede1d9}.bg-grey.light{color:#8799a3;background-color:#e7ebed}.bg-gradual-red{background-image:-webkit-linear-gradient(45deg,#f43f3b,#ec008c);background-image:linear-gradient(45deg,#f43f3b,#ec008c);color:#fff}.bg-gradual-orange{background-image:-webkit-linear-gradient(45deg,#ff9700,#ed1c24);background-image:linear-gradient(45deg,#ff9700,#ed1c24);color:#fff}.bg-gradual-green{background-image:-webkit-linear-gradient(45deg,#39b54a,#8dc63f);background-image:linear-gradient(45deg,#39b54a,#8dc63f);color:#fff}.bg-gradual-purple{background-image:-webkit-linear-gradient(45deg,#9000ff,#5e00ff);background-image:linear-gradient(45deg,#9000ff,#5e00ff);color:#fff}.bg-gradual-pink{background-image:-webkit-linear-gradient(45deg,#ec008c,#6739b6);background-image:linear-gradient(45deg,#ec008c,#6739b6);color:#fff}.bg-gradual-blue{background-image:-webkit-linear-gradient(45deg,#0081ff,#1cbbb4);background-image:linear-gradient(45deg,#0081ff,#1cbbb4);color:#fff}.shadow[class*="-red"]{-webkit-box-shadow:6rpx 6rpx 8rpx rgba(204,69,59,.2);box-shadow:6rpx 6rpx 8rpx rgba(204,69,59,.2)}.shadow[class*="-orange"]{-webkit-box-shadow:6rpx 6rpx 8rpx rgba(217,109,26,.2);box-shadow:6rpx 6rpx 8rpx rgba(217,109,26,.2)}.shadow[class*="-yellow"]{-webkit-box-shadow:6rpx 6rpx 8rpx rgba(224,170,7,.2);box-shadow:6rpx 6rpx 8rpx rgba(224,170,7,.2)}.shadow[class*="-olive"]{-webkit-box-shadow:6rpx 6rpx 8rpx rgba(124,173,55,.2);box-shadow:6rpx 6rpx 8rpx rgba(124,173,55,.2)}.shadow[class*="-green"]{-webkit-box-shadow:6rpx 6rpx 8rpx rgba(48,156,63,.2);box-shadow:6rpx 6rpx 8rpx rgba(48,156,63,.2)}.shadow[class*="-cyan"]{-webkit-box-shadow:6rpx 6rpx 8rpx rgba(28,187,180,.2);box-shadow:6rpx 6rpx 8rpx rgba(28,187,180,.2)}.shadow[class*="-blue"]{-webkit-box-shadow:6rpx 6rpx 8rpx rgba(0,102,204,.2);box-shadow:6rpx 6rpx 8rpx rgba(0,102,204,.2)}.shadow[class*="-purple"]{-webkit-box-shadow:6rpx 6rpx 8rpx rgba(88,48,156,.2);box-shadow:6rpx 6rpx 8rpx rgba(88,48,156,.2)}.shadow[class*="-mauve"]{-webkit-box-shadow:6rpx 6rpx 8rpx rgba(133,33,150,.2);box-shadow:6rpx 6rpx 8rpx rgba(133,33,150,.2)}.shadow[class*="-pink"]{-webkit-box-shadow:6rpx 6rpx 8rpx rgba(199,50,134,.2);box-shadow:6rpx 6rpx 8rpx rgba(199,50,134,.2)}.shadow[class*="-brown"]{-webkit-box-shadow:6rpx 6rpx 8rpx rgba(140,88,53,.2);box-shadow:6rpx 6rpx 8rpx rgba(140,88,53,.2)}.shadow[class*="-grey"]{-webkit-box-shadow:6rpx 6rpx 8rpx rgba(114,130,138,.2);box-shadow:6rpx 6rpx 8rpx rgba(114,130,138,.2)}.shadow[class*="-gray"]{-webkit-box-shadow:6rpx 6rpx 8rpx rgba(114,130,138,.2);box-shadow:6rpx 6rpx 8rpx rgba(114,130,138,.2)}.shadow[class*="-black"]{-webkit-box-shadow:6rpx 6rpx 8rpx rgba(26,26,26,.2);box-shadow:6rpx 6rpx 8rpx rgba(26,26,26,.2)}.shadow[class*="-white"]{-webkit-box-shadow:6rpx 6rpx 8rpx rgba(26,26,26,.2);box-shadow:6rpx 6rpx 8rpx rgba(26,26,26,.2)}.text-shadow[class*="-red"]{text-shadow:6rpx 6rpx 8rpx rgba(204,69,59,.2)}.text-shadow[class*="-orange"]{text-shadow:6rpx 6rpx 8rpx rgba(217,109,26,.2)}.text-shadow[class*="-yellow"]{text-shadow:6rpx 6rpx 8rpx rgba(224,170,7,.2)}.text-shadow[class*="-olive"]{text-shadow:6rpx 6rpx 8rpx rgba(124,173,55,.2)}.text-shadow[class*="-green"]{text-shadow:6rpx 6rpx 8rpx rgba(48,156,63,.2)}.text-shadow[class*="-cyan"]{text-shadow:6rpx 6rpx 8rpx rgba(28,187,180,.2)}.text-shadow[class*="-blue"]{text-shadow:6rpx 6rpx 8rpx rgba(0,102,204,.2)}.text-shadow[class*="-purple"]{text-shadow:6rpx 6rpx 8rpx rgba(88,48,156,.2)}.text-shadow[class*="-mauve"]{text-shadow:6rpx 6rpx 8rpx rgba(133,33,150,.2)}.text-shadow[class*="-pink"]{text-shadow:6rpx 6rpx 8rpx rgba(199,50,134,.2)}.text-shadow[class*="-brown"]{text-shadow:6rpx 6rpx 8rpx rgba(140,88,53,.2)}.text-shadow[class*="-grey"]{text-shadow:6rpx 6rpx 8rpx rgba(114,130,138,.2)}.text-shadow[class*="-gray"]{text-shadow:6rpx 6rpx 8rpx rgba(114,130,138,.2)}.text-shadow[class*="-black"]{text-shadow:6rpx 6rpx 8rpx rgba(26,26,26,.2)}.bg-img{background-size:cover;background-position:50%;background-repeat:no-repeat}.bg-mask{background-color:#333;position:relative}.bg-mask::after{content:"";-webkit-border-radius:inherit;border-radius:inherit;width:100%;height:100%;display:block;background-color:rgba(0,0,0,.4);position:absolute;left:0;right:0;bottom:0;top:0}.bg-mask view, +.bg-mask cover-view{z-index:5;position:relative}.bg-video{position:relative}.bg-video video{display:block;height:100%;width:100%;object-fit:cover;position:absolute;top:0;z-index:0;pointer-events:none}.text-xs{font-size:20rpx}.text-sm{font-size:24rpx}.text-df{font-size:28rpx}.text-lg{font-size:32rpx}.text-xl{font-size:36rpx}.text-xxl{font-size:44rpx}.text-sl{font-size:80rpx}.text-xsl{font-size:120rpx}.text-Abc{text-transform:Capitalize}.text-ABC{text-transform:Uppercase}.text-abc{text-transform:Lowercase}.text-price::before{content:"¥";font-size:80%;margin-right:4rpx}.text-cut{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.text-bold{font-weight:700}.text-center{text-align:center}.text-content{line-height:1.6}.text-left{text-align:left}.text-right{text-align:right}.text-red, +.line-red, +.lines-red{color:#e54d42}.text-orange, +.line-orange, +.lines-orange{color:#f37b1d}.text-yellow, +.line-yellow, +.lines-yellow{color:#fbbd08}.text-olive, +.line-olive, +.lines-olive{color:#8dc63f}.text-green, +.line-green, +.lines-green{color:#39b54a}.text-cyan, +.line-cyan, +.lines-cyan{color:#1cbbb4}.text-blue, +.line-blue, +.lines-blue{color:#0081ff}.text-purple, +.line-purple, +.lines-purple{color:#6739b6}.text-mauve, +.line-mauve, +.lines-mauve{color:#9c26b0}.text-pink, +.line-pink, +.lines-pink{color:#e03997}.text-brown, +.line-brown, +.lines-brown{color:#a5673f}.text-grey, +.line-grey, +.lines-grey{color:#8799a3}.text-gray, +.line-gray, +.lines-gray{color:#aaa}.text-black, +.line-black, +.lines-black{color:#333}.text-white, +.line-white, +.lines-white{color:#fff}@-webkit-keyframes cuIcon-spin{0%{-webkit-transform:rotate(0);transform:rotate(0)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}@keyframes cuIcon-spin{0%{-webkit-transform:rotate(0);transform:rotate(0)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}.cuIconfont-spin{-webkit-animation:cuIcon-spin 2s infinite linear;animation:cuIcon-spin 2s infinite linear;display:inline-block}.cuIconfont-pulse{-webkit-animation:cuIcon-spin 1s infinite steps(8);animation:cuIcon-spin 1s infinite steps(8);display:inline-block}[class*="cuIcon-"]{font-family:cuIcon;font-size:inherit;font-style:normal}@font-face{font-family:cuIcon;src:url(//at.alicdn.com/t/font_533566_yfq2d9wdij.eot?t=1545239985831);src:url(//at.alicdn.com/t/font_533566_yfq2d9wdij.eot?t=1545239985831#iefix) format("embedded-opentype"),url("data:application/x-font-woff;charset=utf-8;base64,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") format("woff"),url(//at.alicdn.com/t/font_533566_yfq2d9wdij.ttf?t=1545239985831) format("truetype"),url(//at.alicdn.com/t/font_533566_yfq2d9wdij.svg?t=1545239985831#cuIconfont) format("svg")}.cuIcon-appreciate:before{content:"\e644"}.cuIcon-check:before{content:"\e645"}.cuIcon-close:before{content:"\e646"}.cuIcon-edit:before{content:"\e649"}.cuIcon-emoji:before{content:"\e64a"}.cuIcon-favorfill:before{content:"\e64b"}.cuIcon-favor:before{content:"\e64c"}.cuIcon-loading:before{content:"\e64f"}.cuIcon-locationfill:before{content:"\e650"}.cuIcon-location:before{content:"\e651"}.cuIcon-phone:before{content:"\e652"}.cuIcon-roundcheckfill:before{content:"\e656"}.cuIcon-roundcheck:before{content:"\e657"}.cuIcon-roundclosefill:before{content:"\e658"}.cuIcon-roundclose:before{content:"\e659"}.cuIcon-roundrightfill:before{content:"\e65a"}.cuIcon-roundright:before{content:"\e65b"}.cuIcon-search:before{content:"\e65c"}.cuIcon-taxi:before{content:"\e65d"}.cuIcon-timefill:before{content:"\e65e"}.cuIcon-time:before{content:"\e65f"}.cuIcon-unfold:before{content:"\e661"}.cuIcon-warnfill:before{content:"\e662"}.cuIcon-warn:before{content:"\e663"}.cuIcon-camerafill:before{content:"\e664"}.cuIcon-camera:before{content:"\e665"}.cuIcon-commentfill:before{content:"\e666"}.cuIcon-comment:before{content:"\e667"}.cuIcon-likefill:before{content:"\e668"}.cuIcon-like:before{content:"\e669"}.cuIcon-notificationfill:before{content:"\e66a"}.cuIcon-notification:before{content:"\e66b"}.cuIcon-order:before{content:"\e66c"}.cuIcon-samefill:before{content:"\e66d"}.cuIcon-same:before{content:"\e66e"}.cuIcon-deliver:before{content:"\e671"}.cuIcon-evaluate:before{content:"\e672"}.cuIcon-pay:before{content:"\e673"}.cuIcon-send:before{content:"\e675"}.cuIcon-shop:before{content:"\e676"}.cuIcon-ticket:before{content:"\e677"}.cuIcon-back:before{content:"\e679"}.cuIcon-cascades:before{content:"\e67c"}.cuIcon-discover:before{content:"\e67e"}.cuIcon-list:before{content:"\e682"}.cuIcon-more:before{content:"\e684"}.cuIcon-scan:before{content:"\e689"}.cuIcon-settings:before{content:"\e68a"}.cuIcon-questionfill:before{content:"\e690"}.cuIcon-question:before{content:"\e691"}.cuIcon-shopfill:before{content:"\e697"}.cuIcon-form:before{content:"\e699"}.cuIcon-pic:before{content:"\e69b"}.cuIcon-filter:before{content:"\e69c"}.cuIcon-footprint:before{content:"\e69d"}.cuIcon-top:before{content:"\e69e"}.cuIcon-pulldown:before{content:"\e69f"}.cuIcon-pullup:before{content:"\e6a0"}.cuIcon-right:before{content:"\e6a3"}.cuIcon-refresh:before{content:"\e6a4"}.cuIcon-moreandroid:before{content:"\e6a5"}.cuIcon-deletefill:before{content:"\e6a6"}.cuIcon-refund:before{content:"\e6ac"}.cuIcon-cart:before{content:"\e6af"}.cuIcon-qrcode:before{content:"\e6b0"}.cuIcon-remind:before{content:"\e6b2"}.cuIcon-delete:before{content:"\e6b4"}.cuIcon-profile:before{content:"\e6b7"}.cuIcon-home:before{content:"\e6b8"}.cuIcon-cartfill:before{content:"\e6b9"}.cuIcon-discoverfill:before{content:"\e6ba"}.cuIcon-homefill:before{content:"\e6bb"}.cuIcon-message:before{content:"\e6bc"}.cuIcon-addressbook:before{content:"\e6bd"}.cuIcon-link:before{content:"\e6bf"}.cuIcon-lock:before{content:"\e6c0"}.cuIcon-unlock:before{content:"\e6c2"}.cuIcon-vip:before{content:"\e6c3"}.cuIcon-weibo:before{content:"\e6c4"}.cuIcon-activity:before{content:"\e6c5"}.cuIcon-friendaddfill:before{content:"\e6c9"}.cuIcon-friendadd:before{content:"\e6ca"}.cuIcon-friendfamous:before{content:"\e6cb"}.cuIcon-friend:before{content:"\e6cc"}.cuIcon-goods:before{content:"\e6cd"}.cuIcon-selection:before{content:"\e6ce"}.cuIcon-explore:before{content:"\e6d2"}.cuIcon-present:before{content:"\e6d3"}.cuIcon-squarecheckfill:before{content:"\e6d4"}.cuIcon-square:before{content:"\e6d5"}.cuIcon-squarecheck:before{content:"\e6d6"}.cuIcon-round:before{content:"\e6d7"}.cuIcon-roundaddfill:before{content:"\e6d8"}.cuIcon-roundadd:before{content:"\e6d9"}.cuIcon-add:before{content:"\e6da"}.cuIcon-notificationforbidfill:before{content:"\e6db"}.cuIcon-explorefill:before{content:"\e6dd"}.cuIcon-fold:before{content:"\e6de"}.cuIcon-game:before{content:"\e6df"}.cuIcon-redpacket:before{content:"\e6e0"}.cuIcon-selectionfill:before{content:"\e6e1"}.cuIcon-similar:before{content:"\e6e2"}.cuIcon-appreciatefill:before{content:"\e6e3"}.cuIcon-infofill:before{content:"\e6e4"}.cuIcon-info:before{content:"\e6e5"}.cuIcon-forwardfill:before{content:"\e6ea"}.cuIcon-forward:before{content:"\e6eb"}.cuIcon-rechargefill:before{content:"\e6ec"}.cuIcon-recharge:before{content:"\e6ed"}.cuIcon-vipcard:before{content:"\e6ee"}.cuIcon-voice:before{content:"\e6ef"}.cuIcon-voicefill:before{content:"\e6f0"}.cuIcon-friendfavor:before{content:"\e6f1"}.cuIcon-wifi:before{content:"\e6f2"}.cuIcon-share:before{content:"\e6f3"}.cuIcon-wefill:before{content:"\e6f4"}.cuIcon-we:before{content:"\e6f5"}.cuIcon-lightauto:before{content:"\e6f6"}.cuIcon-lightforbid:before{content:"\e6f7"}.cuIcon-lightfill:before{content:"\e6f8"}.cuIcon-camerarotate:before{content:"\e6f9"}.cuIcon-light:before{content:"\e6fa"}.cuIcon-barcode:before{content:"\e6fb"}.cuIcon-flashlightclose:before{content:"\e6fc"}.cuIcon-flashlightopen:before{content:"\e6fd"}.cuIcon-searchlist:before{content:"\e6fe"}.cuIcon-service:before{content:"\e6ff"}.cuIcon-sort:before{content:"\e700"}.cuIcon-down:before{content:"\e703"}.cuIcon-mobile:before{content:"\e704"}.cuIcon-mobilefill:before{content:"\e705"}.cuIcon-copy:before{content:"\e706"}.cuIcon-countdownfill:before{content:"\e707"}.cuIcon-countdown:before{content:"\e708"}.cuIcon-noticefill:before{content:"\e709"}.cuIcon-notice:before{content:"\e70a"}.cuIcon-upstagefill:before{content:"\e70e"}.cuIcon-upstage:before{content:"\e70f"}.cuIcon-babyfill:before{content:"\e710"}.cuIcon-baby:before{content:"\e711"}.cuIcon-brandfill:before{content:"\e712"}.cuIcon-brand:before{content:"\e713"}.cuIcon-choicenessfill:before{content:"\e714"}.cuIcon-choiceness:before{content:"\e715"}.cuIcon-clothesfill:before{content:"\e716"}.cuIcon-clothes:before{content:"\e717"}.cuIcon-creativefill:before{content:"\e718"}.cuIcon-creative:before{content:"\e719"}.cuIcon-female:before{content:"\e71a"}.cuIcon-keyboard:before{content:"\e71b"}.cuIcon-male:before{content:"\e71c"}.cuIcon-newfill:before{content:"\e71d"}.cuIcon-new:before{content:"\e71e"}.cuIcon-pullleft:before{content:"\e71f"}.cuIcon-pullright:before{content:"\e720"}.cuIcon-rankfill:before{content:"\e721"}.cuIcon-rank:before{content:"\e722"}.cuIcon-bad:before{content:"\e723"}.cuIcon-cameraadd:before{content:"\e724"}.cuIcon-focus:before{content:"\e725"}.cuIcon-friendfill:before{content:"\e726"}.cuIcon-cameraaddfill:before{content:"\e727"}.cuIcon-apps:before{content:"\e729"}.cuIcon-paintfill:before{content:"\e72a"}.cuIcon-paint:before{content:"\e72b"}.cuIcon-picfill:before{content:"\e72c"}.cuIcon-refresharrow:before{content:"\e72d"}.cuIcon-colorlens:before{content:"\e6e6"}.cuIcon-markfill:before{content:"\e730"}.cuIcon-mark:before{content:"\e731"}.cuIcon-presentfill:before{content:"\e732"}.cuIcon-repeal:before{content:"\e733"}.cuIcon-album:before{content:"\e734"}.cuIcon-peoplefill:before{content:"\e735"}.cuIcon-people:before{content:"\e736"}.cuIcon-servicefill:before{content:"\e737"}.cuIcon-repair:before{content:"\e738"}.cuIcon-file:before{content:"\e739"}.cuIcon-repairfill:before{content:"\e73a"}.cuIcon-taoxiaopu:before{content:"\e73b"}.cuIcon-weixin:before{content:"\e612"}.cuIcon-attentionfill:before{content:"\e73c"}.cuIcon-attention:before{content:"\e73d"}.cuIcon-commandfill:before{content:"\e73e"}.cuIcon-command:before{content:"\e73f"}.cuIcon-communityfill:before{content:"\e740"}.cuIcon-community:before{content:"\e741"}.cuIcon-read:before{content:"\e742"}.cuIcon-calendar:before{content:"\e74a"}.cuIcon-cut:before{content:"\e74b"}.cuIcon-magic:before{content:"\e74c"}.cuIcon-backwardfill:before{content:"\e74d"}.cuIcon-playfill:before{content:"\e74f"}.cuIcon-stop:before{content:"\e750"}.cuIcon-tagfill:before{content:"\e751"}.cuIcon-tag:before{content:"\e752"}.cuIcon-group:before{content:"\e753"}.cuIcon-all:before{content:"\e755"}.cuIcon-backdelete:before{content:"\e756"}.cuIcon-hotfill:before{content:"\e757"}.cuIcon-hot:before{content:"\e758"}.cuIcon-post:before{content:"\e759"}.cuIcon-radiobox:before{content:"\e75b"}.cuIcon-rounddown:before{content:"\e75c"}.cuIcon-upload:before{content:"\e75d"}.cuIcon-writefill:before{content:"\e760"}.cuIcon-write:before{content:"\e761"}.cuIcon-radioboxfill:before{content:"\e763"}.cuIcon-punch:before{content:"\e764"}.cuIcon-shake:before{content:"\e765"}.cuIcon-move:before{content:"\e768"}.cuIcon-safe:before{content:"\e769"}.cuIcon-activityfill:before{content:"\e775"}.cuIcon-crownfill:before{content:"\e776"}.cuIcon-crown:before{content:"\e777"}.cuIcon-goodsfill:before{content:"\e778"}.cuIcon-messagefill:before{content:"\e779"}.cuIcon-profilefill:before{content:"\e77a"}.cuIcon-sound:before{content:"\e77b"}.cuIcon-sponsorfill:before{content:"\e77c"}.cuIcon-sponsor:before{content:"\e77d"}.cuIcon-upblock:before{content:"\e77e"}.cuIcon-weblock:before{content:"\e77f"}.cuIcon-weunblock:before{content:"\e780"}.cuIcon-my:before{content:"\e78b"}.cuIcon-myfill:before{content:"\e78c"}.cuIcon-emojifill:before{content:"\e78d"}.cuIcon-emojiflashfill:before{content:"\e78e"}.cuIcon-flashbuyfill:before{content:"\e78f"}.cuIcon-text:before{content:"\e791"}.cuIcon-goodsfavor:before{content:"\e794"}.cuIcon-musicfill:before{content:"\e795"}.cuIcon-musicforbidfill:before{content:"\e796"}.cuIcon-card:before{content:"\e624"}.cuIcon-triangledownfill:before{content:"\e79b"}.cuIcon-triangleupfill:before{content:"\e79c"}.cuIcon-roundleftfill-copy:before{content:"\e79e"}.cuIcon-font:before{content:"\e76a"}.cuIcon-title:before{content:"\e82f"}.cuIcon-recordfill:before{content:"\e7a4"}.cuIcon-record:before{content:"\e7a6"}.cuIcon-cardboardfill:before{content:"\e7a9"}.cuIcon-cardboard:before{content:"\e7aa"}.cuIcon-formfill:before{content:"\e7ab"}.cuIcon-coin:before{content:"\e7ac"}.cuIcon-cardboardforbid:before{content:"\e7af"}.cuIcon-circlefill:before{content:"\e7b0"}.cuIcon-circle:before{content:"\e7b1"}.cuIcon-attentionforbid:before{content:"\e7b2"}.cuIcon-attentionforbidfill:before{content:"\e7b3"}.cuIcon-attentionfavorfill:before{content:"\e7b4"}.cuIcon-attentionfavor:before{content:"\e7b5"}.cuIcon-titles:before{content:"\e701"}.cuIcon-icloading:before{content:"\e67a"}.cuIcon-full:before{content:"\e7bc"}.cuIcon-mail:before{content:"\e7bd"}.cuIcon-peoplelist:before{content:"\e7be"}.cuIcon-goodsnewfill:before{content:"\e7bf"}.cuIcon-goodsnew:before{content:"\e7c0"}.cuIcon-medalfill:before{content:"\e7c1"}.cuIcon-medal:before{content:"\e7c2"}.cuIcon-newsfill:before{content:"\e7c3"}.cuIcon-newshotfill:before{content:"\e7c4"}.cuIcon-newshot:before{content:"\e7c5"}.cuIcon-news:before{content:"\e7c6"}.cuIcon-videofill:before{content:"\e7c7"}.cuIcon-video:before{content:"\e7c8"}.cuIcon-exit:before{content:"\e7cb"}.cuIcon-skinfill:before{content:"\e7cc"}.cuIcon-skin:before{content:"\e7cd"}.cuIcon-moneybagfill:before{content:"\e7ce"}.cuIcon-usefullfill:before{content:"\e7cf"}.cuIcon-usefull:before{content:"\e7d0"}.cuIcon-moneybag:before{content:"\e7d1"}.cuIcon-redpacket_fill:before{content:"\e7d3"}.cuIcon-subscription:before{content:"\e7d4"}.cuIcon-loading1:before{content:"\e633"}.cuIcon-github:before{content:"\e692"}.cuIcon-global:before{content:"\e7eb"}.cuIcon-settingsfill:before{content:"\e6ab"}.cuIcon-back_android:before{content:"\e7ed"}.cuIcon-expressman:before{content:"\e7ef"}.cuIcon-evaluate_fill:before{content:"\e7f0"}.cuIcon-group_fill:before{content:"\e7f5"}.cuIcon-play_forward_fill:before{content:"\e7f6"}.cuIcon-deliver_fill:before{content:"\e7f7"}.cuIcon-notice_forbid_fill:before{content:"\e7f8"}.cuIcon-fork:before{content:"\e60c"}.cuIcon-pick:before{content:"\e7fa"}.cuIcon-wenzi:before{content:"\e6a7"}.cuIcon-ellipse:before{content:"\e600"}.cuIcon-qr_code:before{content:"\e61b"}.cuIcon-dianhua:before{content:"\e64d"}.cuIcon-cuIcon:before{content:"\e602"}.cuIcon-loading2:before{content:"\e7f1"}.cuIcon-btn:before{content:"\e601"}::-webkit-scrollbar{width:0;height:0;color:transparent}.text-color{color:#00b9ff}.pdlr10{padding-left:20rpx;padding-right:20rpx}.pdtb10{padding-top:20rpx;padding-bottom:20rpx}.pdb10{padding-bottom:20rpx}.mat15{margin-top:30rpx}.mat40{margin-top:80rpx}.mgt20{margin-top:40rpx}.mgt40{margin-top:80rpx}.mgl10{margin-left:20rpx}.mgl20{margin-left:40rpx}.mgl30{margin-left:60rpx}.mgr5{margin-right:10rpx}.mgr10{margin-right:20rpx}.mgr20{margin-right:40rpx}.mgr6{margin-right:12rpx}.mal15{margin-left:30rpx}.mar15{margin-right:30rpx}.mab15{margin-bottom:30rpx}.flex{display:-webkit-box;display:-webkit-flex;display:flex;-webkit-box-align:center;-webkit-align-items:center;align-items:center}.flex-align-start{display:-webkit-box;display:-webkit-flex;display:flex;-webkit-box-align:start;-webkit-align-items:flex-start;align-items:flex-start}.flex-between{display:-webkit-box;display:-webkit-flex;display:flex;-webkit-box-align:center;-webkit-align-items:center;align-items:center;-webkit-box-pack:justify;-webkit-justify-content:space-between;justify-content:space-between}.flex-end{display:-webkit-box;display:-webkit-flex;display:flex;-webkit-box-align:center;-webkit-align-items:center;align-items:center;-webkit-box-pack:end;-webkit-justify-content:flex-end;justify-content:flex-end}.flex-column{display:-webkit-box;display:-webkit-flex;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-flex-direction:column;flex-direction:column;-webkit-box-align:center;-webkit-align-items:center;align-items:center}.flex-justify-center{display:-webkit-box;display:-webkit-flex;display:flex;-webkit-box-align:center;-webkit-align-items:center;align-items:center;-webkit-box-pack:center;-webkit-justify-content:center;justify-content:center}.bottom-border{padding:30rpx 0;border-bottom:4rpx solid #f2f2f2;background-color:#fff}.left-border{border-left:12rpx solid #00b9ff;line-height:32rpx}.form-input-placeholder{font-size:28rpx;color:#999}.def-btn{background-color:#00b9ff;color:#fff}.cancel-btn{background-color:#ff9784;color:#fff}.picker-view{border:2rpx solid #e5e5e5;-webkit-border-radius:40rpx;border-radius:40rpx;-webkit-box-sizing:border-box;box-sizing:border-box;width:80%;margin-left:20%;-webkit-box-flex:1;-webkit-flex:1;flex:1;text-align:left;color:#666;font-size:28rpx;min-height:72rpx;padding:0 40rpx}.disabled .picker-view{background:#e5e5e5}.disabled-bg{background-color:#eee}.wd100{width:100%!important}.wd95{width:95%}.wd90{width:90%}.wd80{width:80%}.wd85{width:85%}.wd70{width:70%!important}.wd60{width:60%}.wd50{width:50%}.wd48{width:48%}.wd45{width:45%}.wd40{width:40%}.wd30{width:30%}.wd35{width:35%}.wd25{width:25%}.wd20{width:20%}.wd15{width:15%}.wd10{width:10%}.wd5{width:5%}.wd0{width:0}.radius10{-webkit-border-radius:20rpx;border-radius:20rpx}.self{position:relative}page::after{position:fixed;content:'';left:-1000px;top:-1000px;-webkit-animation:shadow-preload .1s;-webkit-animation-delay:3s;animation:shadow-preload .1s;animation-delay:3s}@-webkit-keyframes shadow-preload{0%{background-image:url(https://cdn.dcloud.net.cn/img/shadow-grey.png)}100%{background-image:url(https://cdn.dcloud.net.cn/img/shadow-grey.png)}}@keyframes shadow-preload{0%{background-image:url(https://cdn.dcloud.net.cn/img/shadow-grey.png)}100%{background-image:url(https://cdn.dcloud.net.cn/img/shadow-grey.png)}} \ No newline at end of file diff --git a/unpackage/dist/build/mp-weixin/common/runtime.js b/unpackage/dist/build/mp-weixin/common/runtime.js new file mode 100644 index 0000000..9931a34 --- /dev/null +++ b/unpackage/dist/build/mp-weixin/common/runtime.js @@ -0,0 +1,4 @@ + + !function(){try{var a=Function("return this")();a&&!a.Math&&(Object.assign(a,{isFinite:isFinite,Array:Array,Date:Date,Error:Error,Function:Function,Math:Math,Object:Object,RegExp:RegExp,String:String,TypeError:TypeError,setTimeout:setTimeout,clearTimeout:clearTimeout,setInterval:setInterval,clearInterval:clearInterval}),"undefined"!=typeof Reflect&&(a.Reflect=Reflect))}catch(a){}}(); + (function(e){function n(n){for(var t,r,s=n[0],m=n[1],l=n[2],u=0,p=[];ue.length)&&(t=e.length);for(var n=0,r=new Array(t);n1&&void 0!==arguments[1]?arguments[1]:{},o=r.action,i=r.callback,a=r.confirmTitle,s=r.confirmContent;e&&e.length&&n.showModal({title:a||"提示",content:s||"是否删除该数据",showCancel:!0,success:function(n){n.confirm&&t._execRemove(e,o,i)}})},_execLoadData:function(e){var t=this;this.loading||(this.loading=!0,this.errorMessage="",this._getExec().then((function(n){t.loading=!1;var o=n.result,i=o.data,a=o.count;if(t._isEnded=i.length=0;r--){var o=t.indexOf(n[r]._id);o>=0&&(n.splice(r,1),t.splice(o,1))}},_dispatchEvent:function(e,t){this._changeDataFunction?this._changeDataFunction(t,this._isEnded):this.$emit(e,t,this._isEnded)}}};t.default=p}).call(this,n("a9ff")["default"],n("543d")["default"])},"0d12":function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var r={appid:"__UNI__EB9AA47"};t.default=r},"1eb9":function(e,t,n){(function(t){function n(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return s(e,t,"GET")}function r(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return s(e,t,"put")}function o(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return s(e,t,"delete")}function i(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return s(e,t,"POST")}var a=getApp().globalData.url;function s(e){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"GET";return new Promise((function(o,i){t.showLoading({title:"加载中"}),t.request({url:a+e,method:r,data:n,header:{"mini-session":t.getStorageSync("session")||"",Accept:"application/json","X-Requested-With":"XMLHttpRequest","Content-Type":"application/json"},success:function(e){e.data?e.data.error?(404!=e.data.error.code&&t.showToast({title:e.data.error.message,icon:"none"}),9999==e.data.error.code&&(t.clearStorageSync("session"),t.showToast({title:"登录失效,请重新登录",icon:"none"}),setTimeout((function(){t.reLaunch({url:"/pages/login/login"})}),1e3)),i(e.data.error.message)):o(e.data):(o(null),t.hideLoading())},fail:function(e){console.log(e),t.showToast({title:"请求超时,请重试",icon:"none"})}})}))}e.exports={get:n,post:i,put:r,deletes:o}}).call(this,n("543d")["default"])},"2c3e":function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var r=i(n("4382")),o=n("3bb4");function i(e){return e&&e.__esModule?e:{default:e}}function a(e){return l(e)||c(e)||u(e)||s()}function s(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}function u(e,t){if(e){if("string"===typeof e)return f(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?f(e,t):void 0}}function c(e){if("undefined"!==typeof Symbol&&Symbol.iterator in Object(e))return Array.from(e)}function l(e){if(Array.isArray(e))return f(e)}function f(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n0&&void 0!==arguments[0]&&arguments[0],t=arguments.length>1&&void 0!==arguments[1]&&arguments[1],n=[],r=function r(o){var i=o.root?o.root.getChildNodes(o.root.childNodesId):o.getChildNodes(o.childNodesId);i.forEach((function(o){(o.checked||t&&o.indeterminate)&&(!e||e&&o.isLeaf)&&n.push(o.data),r(o)}))};return r(this),n}},{key:"getCheckedKeys",value:function(){var e=this,t=arguments.length>0&&void 0!==arguments[0]&&arguments[0],n=arguments.length>1&&void 0!==arguments[1]&&arguments[1];return this.getCheckedNodes(t,n).map((function(t){return(t||{})[e.key]}))}},{key:"getHalfCheckedNodes",value:function(){var e=[],t=function t(n){var r=n.root?n.root.getChildNodes(n.root.childNodesId):n.getChildNodes(n.childNodesId);r.forEach((function(n){n.indeterminate&&e.push(n.data),t(n)}))};return t(this),e}},{key:"getHalfCheckedKeys",value:function(){var e=this;return this.getHalfCheckedNodes().map((function(t){return(t||{})[e.key]}))}},{key:"_getAllNodes",value:function(){var e=[],t=this.nodesMap;for(var n in t)t.hasOwnProperty(n)&&e.push(t[n]);return e}},{key:"updateChildren",value:function(e,t){var n=this.nodesMap[e];if(n){for(var r=n.getChildNodes(n.childNodesId),o=r.length-1;o>=0;o--){var i=r[o];this.remove(i.data)}for(var a=0,s=t.length;a1&&void 0!==arguments[1]&&arguments[1],n=arguments.length>2?arguments[2]:void 0,r=this._getAllNodes().sort((function(e,t){return t.level-e.level})),o=Object.create(null),i=Object.keys(n);r.forEach((function(e){return e.setChecked(!1,!1)}));for(var a=0,s=r.length;a-1;if(l){var f=u.getParent(u.parentId);while(f&&f.level>0)o[f.data[e]]=!0,f=f.getParent(f.parentId);u.isLeaf||this.checkStrictly?u.setChecked(!0,!1):(u.setChecked(!0,!0),t&&function(){u.setChecked(!1,!1);var e=function e(t){var n=t.getChildNodes(t.childNodesId);n.forEach((function(t){t.isLeaf||t.setChecked(!1,!1),e(t)}))};e(u)}())}else u.checked&&!o[c]&&u.setChecked(!1,!1)}}}},{key:"setCheckedNodes",value:function(e){var t=arguments.length>1&&void 0!==arguments[1]&&arguments[1],n=this.key,r={};e.forEach((function(e){r[(e||{})[n]]=!0})),this._setCheckedKeys(n,t,r)}},{key:"setCheckedKeys",value:function(e){var t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];this.defaultCheckedKeys=e;var n=this.key,r={};e.forEach((function(e){r[e]=!0})),this._setCheckedKeys(n,t,r)}},{key:"setDefaultExpandedKeys",value:function(e){var t=this;e=e||[],this.defaultExpandedKeys=e,e.forEach((function(e){var n=t.getNode(e);n&&n.expand(null,t.autoExpandParent)}))}},{key:"setChecked",value:function(e,t,n){var r=this.getNode(e);r&&r.setChecked(!!t,n)}},{key:"getCurrentNode",value:function(){return this.currentNode}},{key:"setCurrentNode",value:function(e){var t=this.currentNode;t&&(t.isCurrent=!1),this.currentNode=e,this.currentNode.isCurrent=!0,this.expandCurrentNodeParent&&this.currentNode.expand(null,!0)}},{key:"setUserCurrentNode",value:function(e){var t=e[this.key],n=this.nodesMap[t];this.setCurrentNode(n)}},{key:"setCurrentNodeKey",value:function(e){if(null===e||void 0===e)return this.currentNode&&(this.currentNode.isCurrent=!1),void(this.currentNode=null);var t=this.getNode(e);t&&this.setCurrentNode(t)}}]),e}();t.default=v},"2d2b":function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.throttle=t.debounce=void 0;var r=function(e){var t,n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:1e3,r=!(arguments.length>2&&void 0!==arguments[2])||arguments[2];return console.log(1),function(){console.log(123);var o=this,i=arguments;if(t&&clearTimeout(t),r){var a=!t;t=setTimeout((function(){t=null}),n),a&&e.apply(o,i)}else t=setTimeout((function(){e.apply(o,i)}),n)}};t.debounce=r;var o=function(e){var t,n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:1e3,r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:1,o=0;return function(){var i=this,a=arguments;if(1===r){var s=Date.now();s-o>n&&(e.apply(i,a),o=s)}else 2===r&&(t||(t=setTimeout((function(){t=null,e.apply(i,a)}),n)))}};t.throttle=o},3364:function(e,t){},"3b20":function(e,t){(function(){var t={qiniuRegion:"",qiniuImageURLPrefix:"",qiniuUploadToken:"",qiniuUploadTokenURL:"",qiniuUploadTokenFunction:null,qiniuShouldUseQiniuFileName:!1};function n(e){t={qiniuRegion:"",qiniuImageURLPrefix:"",qiniuUploadToken:"",qiniuUploadTokenURL:"",qiniuUploadTokenFunction:null,qiniuShouldUseQiniuFileName:!1},r(e)}function r(e){e.region?t.qiniuRegion=e.region:console.error("qiniu uploader need your bucket region"),e.uptoken?t.qiniuUploadToken=e.uptoken:e.uptokenURL?t.qiniuUploadTokenURL=e.uptokenURL:e.uptokenFunc&&(t.qiniuUploadTokenFunction=e.uptokenFunc),e.domain&&(t.qiniuImageURLPrefix=e.domain),t.qiniuShouldUseQiniuFileName=e.shouldUseQiniuFileName}function o(e,n,o,s,u,c){if(null!=e)if(s&&r(s),t.qiniuUploadToken)i(e,n,o,s,u,c);else if(t.qiniuUploadTokenURL)a((function(){i(e,n,o,s,u,c)}));else{if(!t.qiniuUploadTokenFunction)return void console.error("qiniu uploader need one of [uptoken, uptokenURL, uptokenFunc]");if(t.qiniuUploadToken=t.qiniuUploadTokenFunction(),null==t.qiniuUploadToken&&t.qiniuUploadToken.length>0)return void console.error("qiniu UploadTokenFunction result is null, please check the return value");i(e,n,o,s,u,c)}else console.error("qiniu uploader need filePath to upload")}function i(e,n,r,o,i,a){if(null==t.qiniuUploadToken&&t.qiniuUploadToken.length>0)console.error("qiniu UploadToken is null, please check the init config or networking");else{var u=s(t.qiniuRegion),c=e.split("//")[1];o&&o.key&&(c=o.key);var l={token:t.qiniuUploadToken};t.qiniuShouldUseQiniuFileName||(l["key"]=c);var f=wx.uploadFile({url:u,filePath:e,name:"file",formData:l,success:function(e){var o=e.data;e.data.hasOwnProperty("type")&&"Buffer"===e.data.type&&(o=String.fromCharCode.apply(null,e.data.data));try{var i=JSON.parse(o),a=t.qiniuImageURLPrefix+"/"+i.key;i.imageURL=a,n&&n(i)}catch(s){console.log("parse JSON failed, origin String is: "+o),r&&r(s)}},fail:function(e){console.error(e),r&&r(e)}});f.onProgressUpdate((function(e){i&&i(e)})),a&&a((function(){f.abort()}))}}function a(e){wx.request({url:t.qiniuUploadTokenURL,success:function(n){var r=n.data.uptoken;r&&r.length>0?(t.qiniuUploadToken=r,e&&e()):console.error("qiniuUploader cannot get your token, please check the uptokenURL or server")},fail:function(e){console.error("qiniu UploadToken is null, please check the init config or networking: "+e)}})}function s(e){var t=null;switch(e){case"ECN":t="https://up.qbox.me";break;case"NCN":t="https://up-z1.qbox.me";break;case"SCN":t="https://up-z2.qbox.me";break;case"NA":t="https://up-na0.qbox.me";break;case"ASG":t="https://up-as0.qbox.me";break;default:console.error("please make the region is with one of [ECN, SCN, NCN, NA, ASG]")}return t}e.exports={init:n,upload:o}})()},"3bb4":function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.isNull=t.getPropertyFromData=t.reInitChecked=t.getChildState=t.arrayFindIndex=t.objectAssign=t.getNodeKey=t.markNodeData=t.NODE_KEY=void 0;var r="$treeNodeId";t.NODE_KEY=r;var o=function(e,t){t&&!t[r]&&Object.defineProperty(t,r,{value:e.id,enumerable:!1,configurable:!1,writable:!1})};t.markNodeData=o;var i=function(e,t){return t?e?t[e]:t[r]:null};t.getNodeKey=i;var a=function(e){for(var t=1,n=arguments.length;t-1?t[n+1]:null,this.previousSibling=n>0?t[n-1]:null}else e={level:0};this.level=e.level+1}}},{key:"_handleProps",value:function(){var e=this.store().props;if(this.store().showNodeIcon&&(e&&"undefined"!==typeof e.icon?this.icon=(0,r.getPropertyFromData)(this,"icon"):console.warn('请配置props属性中的"icon"字段')),this.store().registerNode(this),e&&"undefined"!==typeof e.isLeaf){var t=(0,r.getPropertyFromData)(this,"isLeaf");"boolean"===typeof t&&(this.isLeafByUser=t)}}},{key:"_handleExpand",value:function(){if(!0!==this.store().lazy&&this.data?(this.setData(this.data),this.store().defaultExpandAll&&(this.expanded=!0)):this.level>0&&this.store().lazy&&this.store().defaultExpandAll&&this.expand(),Array.isArray(this.data)||(0,r.markNodeData)(this,this.data),this.data){var e=this.store().defaultExpandedKeys,t=this.store().key;t&&e&&-1!==e.indexOf(this.key)&&this.expand(null,this.store().autoExpandparent)}}},{key:"_handleCurrent",value:function(){var e=this.store().key;e&&void 0!==this.store().currentNodeKey&&this.key===this.store().currentNodeKey&&(this.store().currentNode=this,this.store().currentNode.isCurrent=!0)}},{key:"destroyStore",value:function(){s(null)}},{key:"setData",value:function(e){var t;Array.isArray(e)||(0,r.markNodeData)(this,e),this.data=e,this.childNodesId=[],t=0===this.level&&Array.isArray(this.data)?this.data:(0,r.getPropertyFromData)(this,"children")||[];for(var n=0,o=t.length;n1&&void 0!==arguments[1])||arguments[1],n=function n(r){for(var o=r.getChildNodes(r.childNodesId)||[],i=!1,a=0,s=o.length;a-1&&t.splice(n,1);var r=this.childNodesId.indexOf(e.key);r>-1&&(this.store()&&this.store().deregisterNode(e),e.parentId=null,this.childNodesId.splice(r,1)),this.updateLeafState()}},{key:"removeChildByData",value:function(e){for(var t=null,n=0;n0)r.expanded=!0,r=n.getParent(r.parentId)}n.expanded=!0,e&&e()};this.shouldLoadData()?this.loadData((function(e){Array.isArray(e)&&(this.checked?this.setChecked(!0,!0):this.store().checkStrictly||(0,r.reInitChecked)(this),o())})):o()}},{key:"doCreateChildren",value:function(e){var t=this,n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};e.forEach((function(e){t.insertChild((0,r.objectAssign)({data:e},n),void 0,!0)}))}},{key:"collapse",value:function(){this.expanded=!1}},{key:"shouldLoadData",value:function(){return!0===this.store().lazy&&this.store().load&&!this.loaded}},{key:"updateLeafState",value:function(){if(!0!==this.store().lazy||!0===this.loaded||"undefined"===typeof this.isLeafByUser){var e=this.childNodesId;!this.store().lazy||!0===this.store().lazy&&!0===this.loaded?this.isLeaf=!e||0===e.length:this.isLeaf=!1}else this.isLeaf=this.isLeafByUser}},{key:"setChecked",value:function(e,t,n,o){var i=this;if(this.indeterminate="half"===e,this.checked=!0===e,this.checked&&this.store().expandOnCheckNode&&this.expand(null,!0),!this.store().checkStrictly&&!this.store().showRadio){if(!this.shouldLoadData()||this.store().checkDescendants){var a=this.getChildNodes(this.childNodesId),s=(0,r.getChildState)(a),u=s.all,c=s.allWithoutDisable;this.isLeaf||u||!c||(this.checked=!1,e=!1);var l=function(){if(t){for(var n=i.getChildNodes(i.childNodesId),a=0,s=n.length;a0&&void 0!==arguments[0]&&arguments[0];if(0===this.level)return this.data;var t=this.data;if(!t)return null;var n=this.store().props,r="children";return n&&(r=n.children||"children"),void 0===t[r]&&(t[r]=null),e&&!t[r]&&(t[r]=[]),t[r]}},{key:"updateChildren",value:function(){var e=this,t=this.getChildNodes(this.childNodesId),n=this.getChildren()||[],o=t.map((function(e){return e.data})),i={},a=[];n.forEach((function(e,t){var n=e[r.NODE_KEY],s=!!n&&(0,r.arrayFindIndex)(o,(function(e){return e[r.NODE_KEY]===n}))>=0;s?i[n]={index:t,data:e}:a.push({index:t,data:e})})),this.store().lazy||o.forEach((function(t){i[t[r.NODE_KEY]]||e.removeChildByData(t)})),a.forEach((function(t){var n=t.index,r=t.data;e.insertChild({data:r},n)})),this.updateLeafState()}},{key:"loadData",value:function(e){var t=this,n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if(!0!==this.store().lazy||!this.store().load||this.loaded||this.loading&&!Object.keys(n).length)e&&e.call(this);else{this.loading=!0;var r=function(r){t.loaded=!0,t.loading=!1,t.childNodesId=[],t.doCreateChildren(r,n),t.updateLeafState(),e&&e.call(t,r)};this.store().load(this,r)}}}]),e}();t.default=c},"4aab":function(e,t,n){"use strict";(function(e){function n(e,t){var n=this;n.version="1.3.3",n.options=e||{},n.isScrollBody=t||!1,n.isDownScrolling=!1,n.isUpScrolling=!1;var r=n.options.down&&n.options.down.callback;n.initDownScroll(),n.initUpScroll(),setTimeout((function(){(n.optDown.use||n.optDown.native)&&n.optDown.auto&&r&&(n.optDown.autoShowLoading?n.triggerDownScroll():n.optDown.callback&&n.optDown.callback(n)),n.isUpAutoLoad||setTimeout((function(){n.optUp.use&&n.optUp.auto&&!n.isUpAutoLoad&&n.triggerUpScroll()}),100)}),30)}Object.defineProperty(t,"__esModule",{value:!0}),t.default=n,n.prototype.extendDownScroll=function(e){n.extend(e,{use:!0,auto:!0,native:!1,autoShowLoading:!1,isLock:!1,offset:80,startTop:100,inOffsetRate:1,outOffsetRate:.2,bottomOffset:20,minAngle:45,textInOffset:"下拉刷新",textOutOffset:"释放更新",textLoading:"加载中 ...",textSuccess:"加载成功",textErr:"加载失败",beforeEndDelay:100,bgColor:"transparent",textColor:"gray",inited:null,inOffset:null,outOffset:null,onMoving:null,beforeLoading:null,showLoading:null,afterLoading:null,beforeEndDownScroll:null,endDownScroll:null,afterEndDownScroll:null,callback:function(e){e.resetUpScroll()}})},n.prototype.extendUpScroll=function(e){n.extend(e,{use:!0,auto:!0,isLock:!1,isBoth:!0,callback:null,page:{num:0,size:10,time:null},noMoreSize:5,offset:150,textLoading:"加载中 ...",textNoMore:"-- END --",bgColor:"transparent",textColor:"gray",inited:null,showLoading:null,showNoMore:null,hideUpScroll:null,errDistance:60,toTop:{src:null,offset:1e3,duration:300,btnClick:null,onShow:null,zIndex:9990,left:null,right:20,bottom:120,safearea:!1,width:72,radius:"50%"},empty:{use:!0,icon:null,tip:"~ 暂无相关数据 ~",btnText:"",btnClick:null,onShow:null,fixed:!1,top:"100rpx",zIndex:99},onScroll:!1})},n.extend=function(e,t){if(!e)return t;for(var r in t)if(null==e[r]){var o=t[r];e[r]=null!=o&&"object"===typeof o?n.extend({},o):o}else"object"===typeof e[r]&&n.extend(e[r],t[r]);return e},n.prototype.hasColor=function(e){if(!e)return!1;var t=e.toLowerCase();return"#fff"!=t&&"#ffffff"!=t&&"transparent"!=t&&"white"!=t},n.prototype.initDownScroll=function(){var e=this;e.optDown=e.options.down||{},!e.optDown.textColor&&e.hasColor(e.optDown.bgColor)&&(e.optDown.textColor="#fff"),e.extendDownScroll(e.optDown),e.isScrollBody&&e.optDown.native?e.optDown.use=!1:e.optDown.native=!1,e.downHight=0,e.optDown.use&&e.optDown.inited&&setTimeout((function(){e.optDown.inited(e)}),0)},n.prototype.touchstartEvent=function(e){this.optDown.use&&(this.startPoint=this.getPoint(e),this.startTop=this.getScrollTop(),this.startAngle=0,this.lastPoint=this.startPoint,this.maxTouchmoveY=this.getBodyHeight()-this.optDown.bottomOffset,this.inTouchend=!1)},n.prototype.touchmoveEvent=function(e){if(this.optDown.use){var t=this,n=t.getScrollTop(),r=t.getPoint(e),o=r.y-t.startPoint.y;if(o>0&&(t.isScrollBody&&n<=0||!t.isScrollBody&&(n<=0||n<=t.optDown.startTop&&n===t.startTop))&&!t.inTouchend&&!t.isDownScrolling&&!t.optDown.isLock&&(!t.isUpScrolling||t.isUpScrolling&&t.optUp.isBoth)){if(t.startAngle||(t.startAngle=t.getAngle(t.lastPoint,r)),t.startAngle0&&r.y>=t.maxTouchmoveY)return t.inTouchend=!0,void t.touchendEvent();t.preventDefault(e);var i=r.y-t.lastPoint.y;t.downHight0?i*t.optDown.outOffsetRate:i),t.downHight=Math.round(t.downHight);var a=t.downHight/t.optDown.offset;t.optDown.onMoving&&t.optDown.onMoving(t,a,t.downHight)}t.lastPoint=r}},n.prototype.touchendEvent=function(e){if(this.optDown.use)if(this.isMoveDown)this.downHight>=this.optDown.offset?this.triggerDownScroll():(this.downHight=0,this.endDownScrollCall(this)),this.movetype=0,this.isMoveDown=!1;else if(!this.isScrollBody&&this.getScrollTop()===this.startTop){var t=this.getPoint(e).y-this.startPoint.y<0;if(t){var n=this.getAngle(this.getPoint(e),this.startPoint);n>80&&this.triggerUpScroll(!0)}}},n.prototype.getPoint=function(e){return e?e.touches&&e.touches[0]?{x:e.touches[0].pageX,y:e.touches[0].pageY}:e.changedTouches&&e.changedTouches[0]?{x:e.changedTouches[0].pageX,y:e.changedTouches[0].pageY}:{x:e.clientX,y:e.clientY}:{x:0,y:0}},n.prototype.getAngle=function(e,t){var n=Math.abs(e.x-t.x),r=Math.abs(e.y-t.y),o=Math.sqrt(n*n+r*r),i=0;return 0!==o&&(i=Math.asin(r/o)/Math.PI*180),i},n.prototype.triggerDownScroll=function(){this.optDown.beforeLoading&&this.optDown.beforeLoading(this)||(this.showDownScroll(),!this.optDown.native&&this.optDown.callback&&this.optDown.callback(this))},n.prototype.showDownScroll=function(){this.isDownScrolling=!0,this.optDown.native?(e.startPullDownRefresh(),this.showDownLoadingCall(0)):(this.downHight=this.optDown.offset,this.showDownLoadingCall(this.downHight))},n.prototype.showDownLoadingCall=function(e){this.optDown.showLoading&&this.optDown.showLoading(this,e),this.optDown.afterLoading&&this.optDown.afterLoading(this,e)},n.prototype.onPullDownRefresh=function(){this.isDownScrolling=!0,this.showDownLoadingCall(0),this.optDown.callback&&this.optDown.callback(this)},n.prototype.endDownScroll=function(){if(this.optDown.native)return this.isDownScrolling=!1,this.endDownScrollCall(this),void e.stopPullDownRefresh();var t=this,n=function(){t.downHight=0,t.isDownScrolling=!1,t.endDownScrollCall(t),t.isScrollBody||(t.setScrollHeight(0),t.scrollTo(0,0))},r=0;t.optDown.beforeEndDownScroll&&(r=t.optDown.beforeEndDownScroll(t),null==t.isDownEndSuccess&&(r=0)),"number"===typeof r&&r>0?setTimeout(n,r):n()},n.prototype.endDownScrollCall=function(){this.optDown.endDownScroll&&this.optDown.endDownScroll(this),this.optDown.afterEndDownScroll&&this.optDown.afterEndDownScroll(this)},n.prototype.lockDownScroll=function(e){null==e&&(e=!0),this.optDown.isLock=e},n.prototype.lockUpScroll=function(e){null==e&&(e=!0),this.optUp.isLock=e},n.prototype.initUpScroll=function(){var e=this;e.optUp=e.options.up||{use:!1},!e.optUp.textColor&&e.hasColor(e.optUp.bgColor)&&(e.optUp.textColor="#fff"),e.extendUpScroll(e.optUp),!1!==e.optUp.use&&(e.optUp.hasNext=!0,e.startNum=e.optUp.page.num+1,e.optUp.inited&&setTimeout((function(){e.optUp.inited(e)}),0))},n.prototype.onReachBottom=function(){this.isScrollBody&&!this.isUpScrolling&&!this.optUp.isLock&&this.optUp.hasNext&&this.triggerUpScroll()},n.prototype.onPageScroll=function(e){this.isScrollBody&&(this.setScrollTop(e.scrollTop),e.scrollTop>=this.optUp.toTop.offset?this.showTopBtn():this.hideTopBtn())},n.prototype.scroll=function(e,t){this.setScrollTop(e.scrollTop),this.setScrollHeight(e.scrollHeight),null==this.preScrollY&&(this.preScrollY=0),this.isScrollUp=e.scrollTop-this.preScrollY>0,this.preScrollY=e.scrollTop,this.isScrollUp&&this.triggerUpScroll(!0),e.scrollTop>=this.optUp.toTop.offset?this.showTopBtn():this.hideTopBtn(),this.optUp.onScroll&&t&&t()},n.prototype.triggerUpScroll=function(e){if(!this.isUpScrolling&&this.optUp.use&&this.optUp.callback){if(!0===e){var t=!1;if(!this.optUp.hasNext||this.optUp.isLock||this.isDownScrolling||this.getScrollBottom()<=this.optUp.offset&&(t=!0),!1===t)return}this.showUpScroll(),this.optUp.page.num++,this.isUpAutoLoad=!0,this.num=this.optUp.page.num,this.size=this.optUp.page.size,this.time=this.optUp.page.time,this.optUp.callback(this)}},n.prototype.showUpScroll=function(){this.isUpScrolling=!0,this.optUp.showLoading&&this.optUp.showLoading(this)},n.prototype.showNoMore=function(){this.optUp.hasNext=!1,this.optUp.showNoMore&&this.optUp.showNoMore(this)},n.prototype.hideUpScroll=function(){this.optUp.hideUpScroll&&this.optUp.hideUpScroll(this)},n.prototype.endUpScroll=function(e){null!=e&&(e?this.showNoMore():this.hideUpScroll()),this.isUpScrolling=!1},n.prototype.resetUpScroll=function(e){if(this.optUp&&this.optUp.use){var t=this.optUp.page;this.prePageNum=t.num,this.prePageTime=t.time,t.num=this.startNum,t.time=null,this.isDownScrolling||!1===e||(null==e?(this.removeEmpty(),this.showUpScroll()):this.showDownScroll()),this.isUpAutoLoad=!0,this.num=t.num,this.size=t.size,this.time=t.time,this.optUp.callback&&this.optUp.callback(this)}},n.prototype.setPageNum=function(e){this.optUp.page.num=e-1},n.prototype.setPageSize=function(e){this.optUp.page.size=e},n.prototype.endByPage=function(e,t,n){var r;this.optUp.use&&null!=t&&(r=this.optUp.page.nume.length)&&(t=e.length);for(var n=0,r=new Array(t);n1&&void 0!==arguments[1]?arguments[1]:{};return["success","fail","complete"].forEach((function(n){if(Array.isArray(e[n])){var r=t[n];t[n]=function(t){M(e[n],t).then((function(e){return _(r)&&r(e)||e}))}}})),t}function B(e,t){var n=[];Array.isArray(A.returnValue)&&n.push.apply(n,p(A.returnValue));var r=j[e];return r&&Array.isArray(r.returnValue)&&n.push.apply(n,p(r.returnValue)),n.forEach((function(e){t=e(t)||t})),t}function H(e){var t=Object.create(null);Object.keys(A).forEach((function(e){"returnValue"!==e&&(t[e]=A[e].slice())}));var n=j[e];return n&&Object.keys(n).forEach((function(e){"returnValue"!==e&&(t[e]=(t[e]||[]).concat(n[e]))})),t}function V(e,t,n){for(var r=arguments.length,o=new Array(r>3?r-3:0),i=3;i0&&void 0!==arguments[0]?arguments[0]:{},r=arguments.length,o=new Array(r>1?r-1:0),i=1;i0&&(e.delta=n)}}}},ve={args:function(e){var t=parseInt(e.current);if(!isNaN(t)){var n=e.urls;if(Array.isArray(n)){var r=n.length;if(r)return t<0?t=0:t>=r&&(t=r-1),t>0?(e.current=n[t],e.urls=n.filter((function(e,r){return!(r2&&void 0!==arguments[2]?arguments[2]:{},r=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{},o=arguments.length>4&&void 0!==arguments[4]&&arguments[4];if(k(t)){var i=!0===o?t:{};for(var a in _(n)&&(n=n(t,i)||{}),t)if(S(n,a)){var s=n[a];_(s)&&(s=s(t[a],t,i)),s?w(s)?i[s]=t[a]:k(s)&&(i[s.name?s.name:a]=s.value):console.warn("微信小程序 ".concat(e,"暂不支持").concat(a))}else-1!==Se.indexOf(a)?_(t[a])&&(i[a]=Oe(e,t[a],r)):o||(i[a]=t[a]);return i}return _(t)&&(t=Oe(e,t,r)),t}function Te(e,t,n){var r=arguments.length>3&&void 0!==arguments[3]&&arguments[3];return _(_e.returnValue)&&(t=_e.returnValue(e,t)),xe(e,t,n,{},r)}function Pe(e,t){if(S(_e,e)){var n=_e[e];return n?function(t,r){var o=n;_(n)&&(o=n(t)),t=xe(e,t,o.args,o.returnValue);var i=[t];"undefined"!==typeof r&&i.push(r),_(o.name)?e=o.name(t):w(o.name)&&(e=o.name);var a=wx[e].apply(wx,i);return Q(e)?Te(e,a,o.returnValue,X(e)):a}:function(){console.error("微信小程序 暂不支持".concat(e))}}return t}var Ee=Object.create(null),Ae=["onTabBarMidButtonTap","subscribePush","unsubscribePush","onPush","offPush","share"];function je(e){return function(t){var n=t.fail,r=t.complete,o={errMsg:"".concat(e,":fail:暂不支持 ").concat(e," 方法")};_(n)&&n(o),_(r)&&r(o)}}Ae.forEach((function(e){Ee[e]=je(e)}));var De={oauth:["weixin"],share:["weixin"],payment:["wxpay"],push:["weixin"]};function Ce(e){var t=e.service,n=e.success,r=e.fail,o=e.complete,i=!1;De[t]?(i={errMsg:"getProvider:ok",service:t,provider:De[t]},_(n)&&n(i)):(i={errMsg:"getProvider:fail:服务["+t+"]不存在"},_(r)&&r(i)),_(o)&&o(i)}var Ne=Object.freeze({__proto__:null,getProvider:Ce}),Ie=function(){var e;return function(){return e||(e=new r.default),e}}();function Ue(e,t,n){return e[t].apply(e,n)}function qe(){return Ue(Ie(),"$on",Array.prototype.slice.call(arguments))}function $e(){return Ue(Ie(),"$off",Array.prototype.slice.call(arguments))}function Re(){return Ue(Ie(),"$once",Array.prototype.slice.call(arguments))}function Le(){return Ue(Ie(),"$emit",Array.prototype.slice.call(arguments))}var Me=Object.freeze({__proto__:null,$on:qe,$off:$e,$once:Re,$emit:Le}),Fe=Object.freeze({__proto__:null}),Be=Page,He=Component,Ve=/:/g,Ke=x((function(e){return P(e.replace(Ve,"-"))}));function ze(e){if(wx.canIUse("nextTick")){var t=e.triggerEvent;e.triggerEvent=function(n){for(var r=arguments.length,o=new Array(r>1?r-1:0),i=1;i0&&void 0!==arguments[0]?arguments[0]:{};return Ge("onLoad",e),Be(e)},Page.after=Be.after,Component=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return Ge("created",e),He(e)});var Ye=["onPullDownRefresh","onReachBottom","onAddToFavorites","onShareTimeline","onShareAppMessage","onPageScroll","onResize","onTabItemTap"];function We(e,t){var n=e.$mp[e.mpType];t.forEach((function(t){S(n,t)&&(e[t]=n[t])}))}function Je(e,t){if(!t)return!0;if(r.default.options&&Array.isArray(r.default.options[e]))return!0;if(t=t.default||t,_(t))return!!_(t.extendOptions[e])||!!(t.super&&t.super.options&&Array.isArray(t.super.options[e]));if(_(t[e]))return!0;var n=t.mixins;return Array.isArray(n)?!!n.find((function(t){return Je(e,t)})):void 0}function Xe(e,t,n){t.forEach((function(t){Je(t,n)&&(e[t]=function(e){return this.$vm&&this.$vm.__call_hook(t,e)})}))}function Qe(e,t){var n;return t=t.default||t,n=_(t)?t:e.extend(t),t=n.options,[n,t]}function Ze(e,t){if(Array.isArray(t)&&t.length){var n=Object.create(null);t.forEach((function(e){n[e]=!0})),e.$scopedSlots=e.$slots=n}}function et(e,t){e=(e||"").split(",");var n=e.length;1===n?t._$vueId=e[0]:2===n&&(t._$vueId=e[0],t._$vuePid=e[1])}function tt(e,t){var n=e.data||{},r=e.methods||{};if("function"===typeof n)try{n=n.call(t)}catch(o){Object({VUE_APP_NAME:"大庆小程序",VUE_APP_PLATFORM:"mp-weixin",NODE_ENV:"production",BASE_URL:"/"}).VUE_APP_DEBUG&&console.warn("根据 Vue 的 data 函数初始化小程序 data 失败,请尽量确保 data 函数中不访问 vm 对象,否则可能影响首次数据渲染速度。",n)}else try{n=JSON.parse(JSON.stringify(n))}catch(o){}return k(n)||(n={}),Object.keys(r).forEach((function(e){-1!==t.__lifecycle_hooks__.indexOf(e)||S(n,e)||(n[e]=r[e])})),n}var nt=[String,Number,Boolean,Object,Array,null];function rt(e){return function(t,n){this.$vm&&(this.$vm[e]=t)}}function ot(e,t){var n=e.behaviors,r=e.extends,o=e.mixins,i=e.props;i||(e.props=i=[]);var a=[];return Array.isArray(n)&&n.forEach((function(e){a.push(e.replace("uni://","wx".concat("://"))),"uni://form-field"===e&&(Array.isArray(i)?(i.push("name"),i.push("value")):(i.name={type:String,default:""},i.value={type:[String,Number,Boolean,Array,Object,Date],default:""}))})),k(r)&&r.props&&a.push(t({properties:at(r.props,!0)})),Array.isArray(o)&&o.forEach((function(e){k(e)&&e.props&&a.push(t({properties:at(e.props,!0)}))})),a}function it(e,t,n,r){return Array.isArray(t)&&1===t.length?t[0]:t}function at(e){var t=arguments.length>1&&void 0!==arguments[1]&&arguments[1],n={};return t||(n.vueId={type:String,value:""},n.generic={type:Object,value:null},n.vueSlots={type:null,value:[],observer:function(e,t){var n=Object.create(null);e.forEach((function(e){n[e]=!0})),this.setData({$slots:n})}}),Array.isArray(e)?e.forEach((function(e){n[e]={type:null,observer:rt(e)}})):k(e)&&Object.keys(e).forEach((function(t){var r=e[t];if(k(r)){var o=r.default;_(o)&&(o=o()),r.type=it(t,r.type),n[t]={type:-1!==nt.indexOf(r.type)?r.type:null,value:o,observer:rt(t)}}else{var i=it(t,r);n[t]={type:-1!==nt.indexOf(i)?i:null,observer:rt(t)}}})),n}function st(e){try{e.mp=JSON.parse(JSON.stringify(e))}catch(t){}return e.stopPropagation=O,e.preventDefault=O,e.target=e.target||{},S(e,"detail")||(e.detail={}),S(e,"markerId")&&(e.detail="object"===typeof e.detail?e.detail:{},e.detail.markerId=e.markerId),k(e.detail)&&(e.target=Object.assign({},e.target,e.detail)),e}function ut(e,t){var n=e;return t.forEach((function(t){var r=t[0],o=t[2];if(r||"undefined"!==typeof o){var i,a=t[1],s=t[3];Number.isInteger(r)?i=r:r?"string"===typeof r&&r&&(i=0===r.indexOf("#s#")?r.substr(3):e.__get_value(r,n)):i=n,Number.isInteger(i)?n=o:a?Array.isArray(i)?n=i.find((function(t){return e.__get_value(a,t)===o})):k(i)?n=Object.keys(i).find((function(t){return e.__get_value(a,i[t])===o})):console.error("v-for 暂不支持循环数据:",i):n=i[o],s&&(n=e.__get_value(s,n))}})),n}function ct(e,t,n){var r={};return Array.isArray(t)&&t.length&&t.forEach((function(t,o){"string"===typeof t?t?"$event"===t?r["$"+o]=n:"arguments"===t?n.detail&&n.detail.__args__?r["$"+o]=n.detail.__args__:r["$"+o]=[n]:0===t.indexOf("$event.")?r["$"+o]=e.__get_value(t.replace("$event.",""),n):r["$"+o]=e.__get_value(t):r["$"+o]=e:r["$"+o]=ut(e,t)})),r}function lt(e){for(var t={},n=1;n2&&void 0!==arguments[2]?arguments[2]:[],r=arguments.length>3&&void 0!==arguments[3]?arguments[3]:[],o=arguments.length>4?arguments[4]:void 0,i=arguments.length>5?arguments[5]:void 0,a=!1;if(o&&(a=t.currentTarget&&t.currentTarget.dataset&&"wx"===t.currentTarget.dataset.comType,!n.length))return a?[t]:t.detail.__args__||t.detail;var s=ct(e,r,t),u=[];return n.forEach((function(e){"$event"===e?"__set_model"!==i||o?o&&!a?u.push(t.detail.__args__[0]):u.push(t):u.push(t.target.value):Array.isArray(e)&&"o"===e[0]?u.push(lt(e)):"string"===typeof e&&S(s,e)?u.push(s[e]):u.push(e)})),u}var pt="~",ht="^";function dt(e,t){return e===t||"regionchange"===t&&("begin"===e||"end"===e)}function vt(e){var t=e.$parent;while(t&&t.$parent&&(t.$options.generic||t.$parent.$options.generic||t.$scope._$vuePid))t=t.$parent;return t&&t.$parent}function gt(e){var t=this;e=st(e);var n=(e.currentTarget||e.target).dataset;if(!n)return console.warn("事件信息不存在");var r=n.eventOpts||n["event-opts"];if(!r)return console.warn("事件信息不存在");var o=e.type,i=[];return r.forEach((function(n){var r=n[0],a=n[1],s=r.charAt(0)===ht;r=s?r.slice(1):r;var u=r.charAt(0)===pt;r=u?r.slice(1):r,a&&dt(o,r)&&a.forEach((function(n){var r=n[0];if(r){var o=t.$vm;if(o.$options.generic&&(o=vt(o)||o),"$emit"===r)return void o.$emit.apply(o,ft(t.$vm,e,n[1],n[2],s,r));var a=o[r];if(!_(a))throw new Error(" _vm.".concat(r," is not a function"));if(u){if(a.once)return;a.once=!0}var c=ft(t.$vm,e,n[1],n[2],s,r);c=Array.isArray(c)?c:[],/=\s*\S+\.eventParams\s*\|\|\s*\S+\[['"]event-params['"]\]/.test(a.toString())&&(c=c.concat([,,,,,,,,,,e])),i.push(a.apply(o,c))}}))})),"input"===o&&1===i.length&&"undefined"!==typeof i[0]?i[0]:void 0}var yt={},mt=[];function bt(e){if(e){var t=yt[e];return delete yt[e],t}return mt.shift()}var _t=["onShow","onHide","onError","onPageNotFound","onThemeChange","onUnhandledRejection"];function wt(){r.default.prototype.getOpenerEventChannel=function(){return this.$scope.getOpenerEventChannel()};var e=r.default.prototype.__call_hook;r.default.prototype.__call_hook=function(t,n){return"onLoad"===t&&n&&n.__id__&&(this.__eventChannel__=bt(n.__id__),delete n.__id__),e.call(this,t,n)}}function kt(e,t){var n=t.mocks,o=t.initRefs;wt(),e.$options.store&&(r.default.prototype.$store=e.$options.store),r.default.prototype.mpHost="mp-weixin",r.default.mixin({beforeCreate:function(){this.$options.mpType&&(this.mpType=this.$options.mpType,this.$mp=f({data:{}},this.mpType,this.$options.mpInstance),this.$scope=this.$options.mpInstance,delete this.$options.mpType,delete this.$options.mpInstance,"app"!==this.mpType&&(o(this),We(this,n)))}});var i={onLaunch:function(t){this.$vm||(wx.canIUse("nextTick")||console.error("当前微信基础库版本过低,请将 微信开发者工具-详情-项目设置-调试基础库版本 更换为`2.3.0`以上"),this.$vm=e,this.$vm.$mp={app:this},this.$vm.$scope=this,this.$vm.globalData=this.globalData,this.$vm._isMounted=!0,this.$vm.__call_hook("mounted",t),this.$vm.__call_hook("onLaunch",t))}};i.globalData=e.$options.globalData||{};var a=e.$options.methods;return a&&Object.keys(a).forEach((function(e){i[e]=a[e]})),Xe(i,_t),i}var St=["__route__","__wxExparserNodeId__","__wxWebviewId__"];function Ot(e,t){for(var n,r=e.$children,o=r.length-1;o>=0;o--){var i=r[o];if(i.$scope._$vueId===t)return i}for(var a=r.length-1;a>=0;a--)if(n=Ot(r[a],t),n)return n}function xt(e){return Behavior(e)}function Tt(){return!!this.route}function Pt(e){this.triggerEvent("__l",e)}function Et(e,t,n){var r=e.selectAllComponents(t);r.forEach((function(e){var r=e.dataset.ref;n[r]=e.$vm||e,"scoped"===e.dataset.vueGeneric&&e.selectAllComponents(".scoped-ref").forEach((function(e){Et(e,t,n)}))}))}function At(e){var t=e.$scope;Object.defineProperty(e,"$refs",{get:function(){var e={};Et(t,".vue-ref",e);var n=t.selectAllComponents(".vue-ref-in-for");return n.forEach((function(t){var n=t.dataset.ref;e[n]||(e[n]=[]),e[n].push(t.$vm||t)})),e}})}function jt(e){var t,n=e.detail||e.value,r=n.vuePid,o=n.vueOptions;r&&(t=Ot(this.$vm,r)),t||(t=this.$vm),o.parent=t}function Dt(e){return kt(e,{mocks:St,initRefs:At})}function Ct(e){return App(Dt(e)),e}var Nt=/[!'()*]/g,It=function(e){return"%"+e.charCodeAt(0).toString(16)},Ut=/%2C/g,qt=function(e){return encodeURIComponent(e).replace(Nt,It).replace(Ut,",")};function $t(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:qt,n=e?Object.keys(e).map((function(n){var r=e[n];if(void 0===r)return"";if(null===r)return t(n);if(Array.isArray(r)){var o=[];return r.forEach((function(e){void 0!==e&&(null===e?o.push(t(n)):o.push(t(n)+"="+t(e)))})),o.join("&")}return t(n)+"="+t(r)})).filter((function(e){return e.length>0})).join("&"):null;return n?"?".concat(n):""}function Rt(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=t.isPage,o=t.initRelation,i=Qe(r.default,e),u=s(i,2),c=u[0],l=u[1],f=a({multipleSlots:!0,addGlobalClass:!0},l.options||{});l["mp-weixin"]&&l["mp-weixin"].options&&Object.assign(f,l["mp-weixin"].options);var p={options:f,data:tt(l,r.default.prototype),behaviors:ot(l,xt),properties:at(l.props,!1,l.__file),lifetimes:{attached:function(){var e=this.properties,t={mpType:n.call(this)?"page":"component",mpInstance:this,propsData:e};et(e.vueId,this),o.call(this,{vuePid:this._$vuePid,vueOptions:t}),this.$vm=new c(t),Ze(this.$vm,e.vueSlots),this.$vm.$mount()},ready:function(){this.$vm&&(this.$vm._isMounted=!0,this.$vm.__call_hook("mounted"),this.$vm.__call_hook("onReady"))},detached:function(){this.$vm&&this.$vm.$destroy()}},pageLifetimes:{show:function(e){this.$vm&&this.$vm.__call_hook("onPageShow",e)},hide:function(){this.$vm&&this.$vm.__call_hook("onPageHide")},resize:function(e){this.$vm&&this.$vm.__call_hook("onPageResize",e)}},methods:{__l:jt,__e:gt}};return l.externalClasses&&(p.externalClasses=l.externalClasses),Array.isArray(l.wxsCallMethods)&&l.wxsCallMethods.forEach((function(e){p.methods[e]=function(t){return this.$vm[e](t)}})),n?p:[p,c]}function Lt(e){return Rt(e,{isPage:Tt,initRelation:Pt})}var Mt=["onShow","onHide","onUnload"];function Ft(e,t){t.isPage,t.initRelation;var n=Lt(e);return Xe(n.methods,Mt,e),n.methods.onLoad=function(e){this.options=e;var t=Object.assign({},e);delete t.__id__,this.$page={fullPath:"/"+(this.route||this.is)+$t(t)},this.$vm.$mp.query=e,this.$vm.__call_hook("onLoad",e)},n}function Bt(e){return Ft(e,{isPage:Tt,initRelation:Pt})}function Ht(e){return Component(Bt(e))}function Vt(e){return Component(Lt(e))}function Kt(e){var t=Dt(e),n=getApp({allowDefault:!0}),r=n.globalData;if(r&&Object.keys(t.globalData).forEach((function(e){S(r,e)||(r[e]=t.globalData[e])})),Object.keys(t).forEach((function(e){S(n,e)||(n[e]=t[e])})),_(t.onShow)&&wx.onAppShow&&wx.onAppShow((function(){for(var e=arguments.length,r=new Array(e),o=0;o=0&&Math.floor(t)===t&&isFinite(e)}function h(e){return o(e)&&"function"===typeof e.then&&"function"===typeof e.catch}function d(e){return null==e?"":Array.isArray(e)||l(e)&&e.toString===c?JSON.stringify(e,null,2):String(e)}function v(e){var t=parseFloat(e);return isNaN(t)?e:t}function g(e,t){for(var n=Object.create(null),r=e.split(","),o=0;o-1)return e.splice(n,1)}}var b=Object.prototype.hasOwnProperty;function _(e,t){return b.call(e,t)}function w(e){var t=Object.create(null);return function(n){var r=t[n];return r||(t[n]=e(n))}}var k=/-(\w)/g,S=w((function(e){return e.replace(k,(function(e,t){return t?t.toUpperCase():""}))})),O=w((function(e){return e.charAt(0).toUpperCase()+e.slice(1)})),x=/\B([A-Z])/g,T=w((function(e){return e.replace(x,"-$1").toLowerCase()}));function P(e,t){function n(n){var r=arguments.length;return r?r>1?e.apply(t,arguments):e.call(t,n):e.call(t)}return n._length=e.length,n}function E(e,t){return e.bind(t)}var A=Function.prototype.bind?E:P;function j(e,t){t=t||0;var n=e.length-t,r=new Array(n);while(n--)r[n]=e[n+t];return r}function D(e,t){for(var n in t)e[n]=t[n];return e}function C(e){for(var t={},n=0;n0),te=(Q&&Q.indexOf("android"),Q&&/iphone|ipad|ipod|ios/.test(Q)||"ios"===X),ne=(Q&&/chrome\/\d+/.test(Q),Q&&/phantomjs/.test(Q),Q&&Q.match(/firefox\/(\d+)/),{}.watch);if(W)try{var re={};Object.defineProperty(re,"passive",{get:function(){}}),window.addEventListener("test-passive",null,re)}catch(no){}var oe=function(){return void 0===G&&(G=!W&&!J&&"undefined"!==typeof e&&(e["process"]&&"server"===e["process"].env.VUE_ENV)),G},ie=W&&window.__VUE_DEVTOOLS_GLOBAL_HOOK__;function ae(e){return"function"===typeof e&&/native code/.test(e.toString())}var se,ue="undefined"!==typeof Symbol&&ae(Symbol)&&"undefined"!==typeof Reflect&&ae(Reflect.ownKeys);se="undefined"!==typeof Set&&ae(Set)?Set:function(){function e(){this.set=Object.create(null)}return e.prototype.has=function(e){return!0===this.set[e]},e.prototype.add=function(e){this.set[e]=!0},e.prototype.clear=function(){this.set=Object.create(null)},e}();var ce=N,le=0,fe=function(){this.id=le++,this.subs=[]};function pe(e){fe.SharedObject.targetStack.push(e),fe.SharedObject.target=e,fe.target=e}function he(){fe.SharedObject.targetStack.pop(),fe.SharedObject.target=fe.SharedObject.targetStack[fe.SharedObject.targetStack.length-1],fe.target=fe.SharedObject.target}fe.prototype.addSub=function(e){this.subs.push(e)},fe.prototype.removeSub=function(e){m(this.subs,e)},fe.prototype.depend=function(){fe.SharedObject.target&&fe.SharedObject.target.addDep(this)},fe.prototype.notify=function(){var e=this.subs.slice();for(var t=0,n=e.length;t-1)if(i&&!_(o,"default"))a=!1;else if(""===a||a===T(e)){var u=We(String,o.type);(u<0||s0&&(a=wt(a,(t||"")+"_"+n),_t(a[0])&&_t(c)&&(l[u]=ye(c.text+a[0].text),a.shift()),l.push.apply(l,a)):s(a)?_t(c)?l[u]=ye(c.text+a):""!==a&&l.push(ye(a)):_t(a)&&_t(c)?l[u]=ye(c.text+a.text):(i(e._isVList)&&o(a.tag)&&r(a.key)&&o(t)&&(a.key="__vlist"+t+"_"+n+"__"),l.push(a)));return l}function kt(e){var t=e.$options.provide;t&&(e._provided="function"===typeof t?t.call(e):t)}function St(e){var t=Ot(e.$options.inject,e);t&&(Oe(!1),Object.keys(t).forEach((function(n){Ae(e,n,t[n])})),Oe(!0))}function Ot(e,t){if(e){for(var n=Object.create(null),r=ue?Reflect.ownKeys(e):Object.keys(e),o=0;o0,a=e?!!e.$stable:!i,s=e&&e.$key;if(e){if(e._normalized)return e._normalized;if(a&&r&&r!==n&&s===r.$key&&!i&&!r.$hasNormal)return r;for(var u in o={},e)e[u]&&"$"!==u[0]&&(o[u]=Et(t,u,e[u]))}else o={};for(var c in t)c in o||(o[c]=At(t,c));return e&&Object.isExtensible(e)&&(e._normalized=o),V(o,"$stable",a),V(o,"$key",s),V(o,"$hasNormal",i),o}function Et(e,t,n){var r=function(){var e=arguments.length?n.apply(null,arguments):n({});return e=e&&"object"===typeof e&&!Array.isArray(e)?[e]:bt(e),e&&(0===e.length||1===e.length&&e[0].isComment)?void 0:e};return n.proxy&&Object.defineProperty(e,t,{get:r,enumerable:!0,configurable:!0}),r}function At(e,t){return function(){return e[t]}}function jt(e,t){var n,r,i,a,s;if(Array.isArray(e)||"string"===typeof e)for(n=new Array(e.length),r=0,i=e.length;r1?j(n):n;for(var r=j(arguments,1),o='event handler for "'+e+'"',i=0,a=n.length;idocument.createEvent("Event").timeStamp&&(Mn=function(){return Fn.now()})}function Bn(){var e,t;for(Mn(),$n=!0,Nn.sort((function(e,t){return e.id-t.id})),Rn=0;RnRn&&Nn[n].id>e.id)n--;Nn.splice(n+1,0,e)}else Nn.push(e);qn||(qn=!0,ut(Bn))}}var Gn=0,Yn=function(e,t,n,r,o){this.vm=e,o&&(e._watcher=this),e._watchers.push(this),r?(this.deep=!!r.deep,this.user=!!r.user,this.lazy=!!r.lazy,this.sync=!!r.sync,this.before=r.before):this.deep=this.user=this.lazy=this.sync=!1,this.cb=n,this.id=++Gn,this.active=!0,this.dirty=this.lazy,this.deps=[],this.newDeps=[],this.depIds=new se,this.newDepIds=new se,this.expression="","function"===typeof t?this.getter=t:(this.getter=z(t),this.getter||(this.getter=N)),this.value=this.lazy?void 0:this.get()};Yn.prototype.get=function(){var e;pe(this);var t=this.vm;try{e=this.getter.call(t,t)}catch(no){if(!this.user)throw no;Je(no,t,'getter for watcher "'+this.expression+'"')}finally{this.deep&<(e),he(),this.cleanupDeps()}return e},Yn.prototype.addDep=function(e){var t=e.id;this.newDepIds.has(t)||(this.newDepIds.add(t),this.newDeps.push(e),this.depIds.has(t)||e.addSub(this))},Yn.prototype.cleanupDeps=function(){var e=this.deps.length;while(e--){var t=this.deps[e];this.newDepIds.has(t.id)||t.removeSub(this)}var n=this.depIds;this.depIds=this.newDepIds,this.newDepIds=n,this.newDepIds.clear(),n=this.deps,this.deps=this.newDeps,this.newDeps=n,this.newDeps.length=0},Yn.prototype.update=function(){this.lazy?this.dirty=!0:this.sync?this.run():zn(this)},Yn.prototype.run=function(){if(this.active){var e=this.get();if(e!==this.value||u(e)||this.deep){var t=this.value;if(this.value=e,this.user)try{this.cb.call(this.vm,e,t)}catch(no){Je(no,this.vm,'callback for watcher "'+this.expression+'"')}else this.cb.call(this.vm,e,t)}}},Yn.prototype.evaluate=function(){this.value=this.get(),this.dirty=!1},Yn.prototype.depend=function(){var e=this.deps.length;while(e--)this.deps[e].depend()},Yn.prototype.teardown=function(){if(this.active){this.vm._isBeingDestroyed||m(this.vm._watchers,this);var e=this.deps.length;while(e--)this.deps[e].removeSub(this);this.active=!1}};var Wn={enumerable:!0,configurable:!0,get:N,set:N};function Jn(e,t,n){Wn.get=function(){return this[t][n]},Wn.set=function(e){this[t][n]=e},Object.defineProperty(e,n,Wn)}function Xn(e){e._watchers=[];var t=e.$options;t.props&&Qn(e,t.props),t.methods&&ar(e,t.methods),t.data?Zn(e):Ee(e._data={},!0),t.computed&&nr(e,t.computed),t.watch&&t.watch!==ne&&sr(e,t.watch)}function Qn(e,t){var n=e.$options.propsData||{},r=e._props={},o=e.$options._propKeys=[],i=!e.$parent;i||Oe(!1);var a=function(i){o.push(i);var a=Ke(i,t,n,e);Ae(r,i,a),i in e||Jn(e,"_props",i)};for(var s in t)a(s);Oe(!0)}function Zn(e){var t=e.$options.data;t=e._data="function"===typeof t?er(t,e):t||{},l(t)||(t={});var n=Object.keys(t),r=e.$options.props,o=(e.$options.methods,n.length);while(o--){var i=n[o];0,r&&_(r,i)||H(i)||Jn(e,"_data",i)}Ee(t,!0)}function er(e,t){pe();try{return e.call(t,t)}catch(no){return Je(no,t,"data()"),{}}finally{he()}}var tr={lazy:!0};function nr(e,t){var n=e._computedWatchers=Object.create(null),r=oe();for(var o in t){var i=t[o],a="function"===typeof i?i:i.get;0,r||(n[o]=new Yn(e,a||N,N,tr)),o in e||rr(e,o,i)}}function rr(e,t,n){var r=!oe();"function"===typeof n?(Wn.get=r?or(t):ir(n),Wn.set=N):(Wn.get=n.get?r&&!1!==n.cache?or(t):ir(n.get):N,Wn.set=n.set||N),Object.defineProperty(e,t,Wn)}function or(e){return function(){var t=this._computedWatchers&&this._computedWatchers[e];if(t)return t.dirty&&t.evaluate(),fe.SharedObject.target&&t.depend(),t.value}}function ir(e){return function(){return e.call(this,this)}}function ar(e,t){e.$options.props;for(var n in t)e[n]="function"!==typeof t[n]?N:A(t[n],e)}function sr(e,t){for(var n in t){var r=t[n];if(Array.isArray(r))for(var o=0;o-1)return this;var n=j(arguments,1);return n.unshift(this),"function"===typeof e.install?e.install.apply(e,n):"function"===typeof e&&e.apply(null,n),t.push(e),this}}function yr(e){e.mixin=function(e){return this.options=He(this.options,e),this}}function mr(e){e.cid=0;var t=1;e.extend=function(e){e=e||{};var n=this,r=n.cid,o=e._Ctor||(e._Ctor={});if(o[r])return o[r];var i=e.name||n.options.name;var a=function(e){this._init(e)};return a.prototype=Object.create(n.prototype),a.prototype.constructor=a,a.cid=t++,a.options=He(n.options,e),a["super"]=n,a.options.props&&br(a),a.options.computed&&_r(a),a.extend=n.extend,a.mixin=n.mixin,a.use=n.use,L.forEach((function(e){a[e]=n[e]})),i&&(a.options.components[i]=a),a.superOptions=n.options,a.extendOptions=e,a.sealedOptions=D({},a.options),o[r]=a,a}}function br(e){var t=e.options.props;for(var n in t)Jn(e.prototype,"_props",n)}function _r(e){var t=e.options.computed;for(var n in t)rr(e.prototype,n,t[n])}function wr(e){L.forEach((function(t){e[t]=function(e,n){return n?("component"===t&&l(n)&&(n.name=n.name||e,n=this.options._base.extend(n)),"directive"===t&&"function"===typeof n&&(n={bind:n,update:n}),this.options[t+"s"][e]=n,n):this.options[t+"s"][e]}}))}function kr(e){return e&&(e.Ctor.options.name||e.tag)}function Sr(e,t){return Array.isArray(e)?e.indexOf(t)>-1:"string"===typeof e?e.split(",").indexOf(t)>-1:!!f(e)&&e.test(t)}function Or(e,t){var n=e.cache,r=e.keys,o=e._vnode;for(var i in n){var a=n[i];if(a){var s=kr(a.componentOptions);s&&!t(s)&&xr(n,i,r,o)}}}function xr(e,t,n,r){var o=e[t];!o||r&&o.tag===r.tag||o.componentInstance.$destroy(),e[t]=null,m(n,t)}fr(vr),cr(vr),Sn(vr),Pn(vr),pn(vr);var Tr=[String,RegExp,Array],Pr={name:"keep-alive",abstract:!0,props:{include:Tr,exclude:Tr,max:[String,Number]},created:function(){this.cache=Object.create(null),this.keys=[]},destroyed:function(){for(var e in this.cache)xr(this.cache,e,this.keys)},mounted:function(){var e=this;this.$watch("include",(function(t){Or(e,(function(e){return Sr(t,e)}))})),this.$watch("exclude",(function(t){Or(e,(function(e){return!Sr(t,e)}))}))},render:function(){var e=this.$slots.default,t=yn(e),n=t&&t.componentOptions;if(n){var r=kr(n),o=this,i=o.include,a=o.exclude;if(i&&(!r||!Sr(i,r))||a&&r&&Sr(a,r))return t;var s=this,u=s.cache,c=s.keys,l=null==t.key?n.Ctor.cid+(n.tag?"::"+n.tag:""):t.key;u[l]?(t.componentInstance=u[l].componentInstance,m(c,l),c.push(l)):(u[l]=t,c.push(l),this.max&&c.length>parseInt(this.max)&&xr(u,c[0],c,this._vnode)),t.data.keepAlive=!0}return t||e&&e[0]}},Er={KeepAlive:Pr};function Ar(e){var t={get:function(){return F}};Object.defineProperty(e,"config",t),e.util={warn:ce,extend:D,mergeOptions:He,defineReactive:Ae},e.set=je,e.delete=De,e.nextTick=ut,e.observable=function(e){return Ee(e),e},e.options=Object.create(null),L.forEach((function(t){e.options[t+"s"]=Object.create(null)})),e.options._base=e,D(e.options.components,Er),gr(e),yr(e),mr(e),wr(e)}Ar(vr),Object.defineProperty(vr.prototype,"$isServer",{get:oe}),Object.defineProperty(vr.prototype,"$ssrContext",{get:function(){return this.$vnode&&this.$vnode.ssrContext}}),Object.defineProperty(vr,"FunctionalRenderContext",{value:Kt}),vr.version="2.6.11";var jr="[object Array]",Dr="[object Object]";function Cr(e,t){var n={};return Nr(e,t),Ir(e,t,"",n),n}function Nr(e,t){if(e!==t){var n=qr(e),r=qr(t);if(n==Dr&&r==Dr){if(Object.keys(e).length>=Object.keys(t).length)for(var o in t){var i=e[o];void 0===i?e[o]=null:Nr(i,t[o])}}else n==jr&&r==jr&&e.length>=t.length&&t.forEach((function(t,n){Nr(e[n],t)}))}}function Ir(e,t,n,r){if(e!==t){var o=qr(e),i=qr(t);if(o==Dr)if(i!=Dr||Object.keys(e).length1&&(t[n[0].trim()]=n[1].trim())}})),t}));function Jr(e){return Array.isArray(e)?C(e):"string"===typeof e?Wr(e):e}var Xr=["createSelectorQuery","createIntersectionObserver","selectAllComponents","selectComponent"];function Qr(e,t){var n=t.split("."),r=n[0];return 0===r.indexOf("__$n")&&(r=parseInt(r.replace("__$n",""))),1===n.length?e[r]:Qr(e[r],n.slice(1).join("."))}function Zr(e){e.config.errorHandler=function(t,n,r){e.util.warn("Error in "+r+': "'+t.toString()+'"',n),console.error(t);var o=getApp();o&&o.onError&&o.onError(t)};var t=e.prototype.$emit;e.prototype.$emit=function(e){return this.$scope&&e&&this.$scope["triggerEvent"](e,{__args__:j(arguments,1)}),t.apply(this,arguments)},e.prototype.$nextTick=function(e){return Lr(this,e)},Xr.forEach((function(t){e.prototype[t]=function(e){return this.$scope&&this.$scope[t]?this.$scope[t](e):"undefined"!==typeof my?"createSelectorQuery"===t?my.createSelectorQuery(e):"createIntersectionObserver"===t?my.createIntersectionObserver(e):void 0:void 0}})),e.prototype.__init_provide=kt,e.prototype.__init_injections=St,e.prototype.__call_hook=function(e,t){var n=this;pe();var r,o=n.$options[e],i=e+" hook";if(o)for(var a=0,s=o.length;a0&&t<=20?t:2,e=parseFloat((e+"").replace(/[^\d\.-]/g,"")).toFixed(t)+"";for(var n=e.split(".")[0].split("").reverse(),r=e.split(".")[1],o="",i=0;i0){for(var f=0,p=t.length,h=0;h0&&(l+=o[0]),f=0,l+=o[parseInt(d)]+i[y]),0==y&&f<4&&(l+=a[g])}l+=c}if(""!=n)for(var m=n.length,b=0;b0&&void 0!==o[0]?o[0]:{},e.prev=1,e.next=4,S(t);case 4:n=e.sent,t.onSelectComplete&&t.onSelectComplete(n),e.next=12;break;case 8:return e.prev=8,e.t0=e["catch"](1),this.requestError&&this.requestError(e.t0),e.abrupt("return",Promise.reject(e.t0));case 12:if(!n){e.next=14;break}return e.abrupt("return",this.qnFileUpload(u(u({},t),{},{files:n})));case 14:case"end":return e.stop()}}),e,this,[[1,8]])})));function t(){return e.apply(this,arguments)}return t}()},{key:"qnVideoUpload",value:function(){var e=f(r.default.mark((function e(){var t,n,o=arguments;return r.default.wrap((function(e){while(1)switch(e.prev=e.next){case 0:return t=o.length>0&&void 0!==o[0]?o[0]:{},e.prev=1,e.next=4,O(t);case 4:n=e.sent,t.onSelectComplete&&t.onSelectComplete(n),e.next=12;break;case 8:return e.prev=8,e.t0=e["catch"](1),this.requestError&&this.requestError(e.t0),e.abrupt("return",Promise.reject(e.t0));case 12:if(!n){e.next=14;break}return e.abrupt("return",this.qnFileUpload(u(u({},t),{},{files:n})));case 14:case"end":return e.stop()}}),e,this,[[1,8]])})));function t(){return e.apply(this,arguments)}return t}()},{key:"qnFileUpload",value:function(){var e=f(r.default.mark((function e(){var t,n,o,i,a,s=arguments;return r.default.wrap((function(e){while(1)switch(e.prev=e.next){case 0:if(t=s.length>0&&void 0!==s[0]?s[0]:{},e.prev=1,n=u(u(u({},this.config),t),{},{header:{},method:"FILE"}),!this.requestStart){e.next=11;break}if(o=this.requestStart(n),"object"!=typeof o){e.next=10;break}i=["load","files"],i.forEach((function(e){n[e]=o[e]})),e.next=11;break;case 10:throw{errMsg:"【request】请求开始拦截器未通过",statusCode:0,data:n.data,method:n.method,header:n.header,url:n.url};case 11:return e.next=13,x(n,this.getQnToken);case 13:return a=e.sent,e.abrupt("return",Promise.resolve(a));case 17:return e.prev=17,e.t0=e["catch"](1),this.requestError&&this.requestError(e.t0),e.abrupt("return",Promise.reject(e.t0));case 21:return e.prev=21,this.requestEnd&&this.requestEnd(n),e.finish(21);case 24:case"end":return e.stop()}}),e,this,[[1,17,21,24]])})));function t(){return e.apply(this,arguments)}return t}()},{key:"urlImgUpload",value:function(){var e=f(r.default.mark((function e(){var t,n=arguments;return r.default.wrap((function(e){while(1)switch(e.prev=e.next){case 0:return t={},n[0]&&("string"==typeof n[0]?t.url=n[0]:"object"==typeof n[0]&&(t=Object.assign(t,n[0]))),n[1]&&"object"==typeof n[1]&&(t=Object.assign(t,n[1])),e.prev=3,e.next=6,S(t);case 6:t.files=e.sent,t.onSelectComplete&&t.onSelectComplete(t.files),e.next=14;break;case 10:return e.prev=10,e.t0=e["catch"](3),this.requestError&&this.requestError(e.t0),e.abrupt("return",Promise.reject(e.t0));case 14:if(!t.files){e.next=16;break}return e.abrupt("return",this.urlFileUpload(t));case 16:case"end":return e.stop()}}),e,this,[[3,10]])})));function t(){return e.apply(this,arguments)}return t}()},{key:"urlVideoUpload",value:function(){var e=f(r.default.mark((function e(){var t,n=arguments;return r.default.wrap((function(e){while(1)switch(e.prev=e.next){case 0:return t={},n[0]&&("string"==typeof n[0]?t.url=n[0]:"object"==typeof n[0]&&(t=Object.assign(t,n[0]))),n[1]&&"object"==typeof n[1]&&(t=Object.assign(t,n[1])),e.prev=3,e.next=6,O(t);case 6:t.files=e.sent,t.onSelectComplete&&t.onSelectComplete(t.files),e.next=14;break;case 10:return e.prev=10,e.t0=e["catch"](3),this.requestError&&this.requestError(e.t0),e.abrupt("return",Promise.reject(e.t0));case 14:if(!t.files){e.next=16;break}return e.abrupt("return",this.urlFileUpload(t));case 16:case"end":return e.stop()}}),e,this,[[3,10]])})));function t(){return e.apply(this,arguments)}return t}()},{key:"urlFileUpload",value:function(){var e=f(r.default.mark((function e(){var t,n,o,a,s,u=arguments;return r.default.wrap((function(e){while(1)switch(e.prev=e.next){case 0:if(t={method:"FILE"},u[0]&&("string"==typeof u[0]?t.url=u[0]:"object"==typeof u[0]&&(t=Object.assign(t,u[0]))),u[1]&&"object"==typeof u[1]&&(t=Object.assign(t,u[1])),!t.url&&this.defaultUploadUrl&&(t.url=this.defaultUploadUrl),n=!1,e.prev=5,t.url){e.next=8;break}throw{errMsg:"【request】文件上传缺失数据url",statusCode:0,data:t.data,method:t.method,header:t.header,url:t.url};case 8:if(t=(0,i.mergeConfig)(this,t),n=!0,!this.requestStart){e.next=18;break}if(o=this.requestStart(t),"object"!=typeof o){e.next=17;break}a=["data","header","isPrompt","load","isFactory","files"],a.forEach((function(e){t[e]=o[e]})),e.next=18;break;case 17:throw{errMsg:"【request】请求开始拦截器未通过",statusCode:0,data:t.data,method:t.method,header:t.header,url:t.url};case 18:return e.next=20,T(t,this.dataFactory);case 20:return s=e.sent,e.abrupt("return",Promise.resolve(s));case 24:return e.prev=24,e.t0=e["catch"](5),this.requestError&&this.requestError(e.t0),e.abrupt("return",Promise.reject(e.t0));case 28:return e.prev=28,n&&this.requestEnd&&this.requestEnd(t),e.finish(28);case 31:case"end":return e.stop()}}),e,this,[[5,24,28,31]])})));function t(){return e.apply(this,arguments)}return t}()}]),n}(o.default);t.default=P},8367:function(e,t,n){"use strict";(function(e){function r(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function o(e){for(var t=1;t1&&void 0!==arguments[1]?arguments[1]:"",n="0123456789qwertyuioplkjhgfdsazxcvbnm",r="",o=new Date,i=0;ic?l(c+1):n(u)}),(function(e){r(e)}),{region:t.region||"SCN",domain:t.visitPrefix,key:p,uptoken:t.token,uptokenURL:"UpTokenURL.com/uptoken"},(function(t){console.log(e),e.onProgressUpdate&&e.onProgressUpdate(Object.assign({},h,t))}))}"/"==t.visitPrefix.charAt(c-1)&&(t.visitPrefix=t.visitPrefix.substring(0,c-1)),l(0)})):r({errMsg:"请添加七牛云回调方法:getQnToken",statusCode:0})}else r({errMsg:"files 必须是数组类型",statusCode:0})}))};t.qiniuUpload=l;var f=function(t,n){return new Promise((function(r,i){if(t.header["Content-Type"]&&delete t.header["Content-Type"],t.header["content-type"]&&delete t.header["content-type"],Array.isArray(t.files)){var a=function a(c){var l=t.files[c],f=o({fileIndex:c,files:t.files},l),p={url:t.url,filePath:l.path,header:t.header,name:t.name||"file",success:function(e){t.isFactory&&n?n(o(o({},t),{},{response:e})).then((function(e){u.push(e),t.onEachUpdate&&t.onEachUpdate(o({data:e},f)),s<=c?r(u):a(c+1)}),(function(e){i(e)})):(t.onEachUpdate&&t.onEachUpdate(o({data:e},f)),u.push(e),s<=c?r(u):a(c+1))},fail:function(e){i(e)}};t.data&&(p.formData=t.data);var h=e.uploadFile(p);h.onProgressUpdate((function(e){t.onProgressUpdate&&t.onProgressUpdate(Object.assign({},f,e))}))},s=t.files.length-1,u=new Array;a(0)}else i({errMsg:"files 必须是数组类型",statusCode:0})}))};t.urlUpload=f}).call(this,n("543d")["default"])},"8e2b":function(e,t,n){(function(t){getApp().globalData.url;function n(){return new Promise((function(e,n){t.chooseMedia({count:1,mediaType:["image","video"],sourceType:["album","camera"],maxDuration:30,camera:"back",success:function(r){if(r.tempFiles.length>0){console.log(r,"看下是啥格式");var o=r.tempFiles[0].tempFilePath,i=r.tempFiles[0].size;if(i<8388608){t.showLoading({title:"上传中"});t.uploadFile({url:"https://www.huorantech.cn/dqwg/api-guarantee/dg-apply-amount-info/uploadFile",filePath:o,header:{token:t.getStorageSync("token"),"Content-Type":"multipart/form-data;boundary=----WebKitFormBoundaryi8lPVoSysovJLNqi",Accept:"application/json"},name:"file",success:function(r){if(500==r.statusCode)t.showToast({title:"上传失败",icon:"none"}),n("失败");else if(t.showToast({title:"上传成功",icon:"success"}),r.data){var o=JSON.parse(r.data).data[0],i=o.lastIndexOf("."),a=o.substr(i+1);e({imageurl:o,ext:a})}}})}else t.showToast({title:"超出限制大小",icon:"none"})}else t.showToast({title:"文件不存在",icon:"none"})}})}))}function r(){return new Promise((function(e,n){t.chooseMessageFile({count:1,type:"file",success:function(r){if(r.tempFiles.length>0){if(!(r.tempFiles[0].size<8388608))return void t.showToast({title:"超出限制大小",icon:"none"});t.showLoading({title:"上传中"}),t.uploadFile({url:"https://www.huorantech.cn/dqwg/api-guarantee/dg-apply-amount-info/uploadFile",filePath:r.tempFiles[0].path,name:"file",header:{token:t.getStorageSync("token"),"Content-Type":"multipart/form-data; boundary=----WebKitFormBoundaryi8lPVoSysovJLNqi",Accept:"application/json"},success:function(r){if(500!=r.statusCode)if(t.showToast({title:"文件上传成功",icon:"success"}),r.data){var o=JSON.parse(r.data).data[0],i=o.lastIndexOf("."),a=o.substr(i+1);e({pdfurl:o,ext:a})}else n("失败");else t.showToast({title:"服务器错误",icon:"none"})}})}else t.showToast({title:"文件不存在",icon:"none"})}})}))}e.exports={uploadImage:n,uploadPdf:r}}).call(this,n("543d")["default"])},"921b":function(e,t,n){"use strict";(function(e){var t=n("8189");function r(e,t){if("function"!==typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),t&&o(e,t)}function o(e,t){return o=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e},o(e,t)}function i(e){var t=u();return function(){var n,r=c(e);if(t){var o=c(this).constructor;n=Reflect.construct(r,arguments,o)}else n=r.apply(this,arguments);return a(this,n)}}function a(e,t){return!t||"object"!==typeof t&&"function"!==typeof t?s(e):t}function s(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}function u(){if("undefined"===typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"===typeof Proxy)return!0;try{return Date.prototype.toString.call(Reflect.construct(Date,[],(function(){}))),!0}catch(e){return!1}}function c(e){return c=Object.setPrototypeOf?Object.getPrototypeOf:function(e){return e.__proto__||Object.getPrototypeOf(e)},c(e)}function l(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function f(e,t){for(var n=0;nm;return{residenceTime:t,overtime:n}}if("page"===e){var r=t>y;return{residenceTime:t,overtime:r}}return{residenceTime:t}},J=function(){var e=getCurrentPages(),t=e[e.length-1];if(!t)return"";var n=t.$vm;return"bd"===E()?n.$mp&&n.$mp.page.is:n.$scope&&n.$scope.route||n.$mp&&n.$mp.page.route},X=function(e){var t=getCurrentPages(),n=t[t.length-1];if(!n)return"";var r=n.$vm,o=e._query,i=o&&"{}"!==JSON.stringify(o)?"?"+JSON.stringify(o):"";return e._query="","bd"===E()?r.$mp&&r.$mp.page.is+i:r.$scope&&r.$scope.route+i||r.$mp&&r.$mp.page.route+i},Q=function(e){return!!("page"===e.mpType||e.$mp&&"page"===e.$mp.mpType||"page"===e.$options.mpType)},Z=function(e,t){return e?"string"!==typeof e?(console.error("uni.report [eventName] 参数类型错误,只能为 String 类型"),!0):e.length>255?(console.error("uni.report [eventName] 参数长度不能大于 255"),!0):"string"!==typeof t&&"object"!==typeof t?(console.error("uni.report [options] 参数类型错误,只能为 String 或 Object 类型"),!0):"string"===typeof t&&t.length>255?(console.error("uni.report [options] 参数长度不能大于 255"),!0):"title"===e&&"string"!==typeof t?(console.error("uni.report [eventName] 参数为 title 时,[options] 参数只能为 String 类型"),!0):void 0:(console.error("uni.report 缺少 [eventName] 参数"),!0)},ee="Report_Data_Time",te="Report_Status",ne=function(){return new Promise((function(t,n){var r="",o=(new Date).getTime(),i=_,a=1;try{r=e.getStorageSync(ee),a=e.getStorageSync(te)}catch(s){r="",a=1}""!==a?(1===a&&t(),r||(e.setStorageSync(ee,o),r=o),o-r>i&&re((function(t){var n=t.enable;e.setStorageSync(ee,o),e.setStorageSync(te,n)}))):re((function(n){var r=n.enable;e.setStorageSync(ee,o),e.setStorageSync(te,r),1===r&&t()}))}))},re=function(t){var n={usv:d,conf:JSON.stringify({ak:w.appid})};e.request({url:v,method:"GET",data:n,success:function(e){var n=e.data;0===n.ret&&"function"===typeof t&&t({enable:n.enable})},fail:function(n){var r=1;try{r=e.getStorageSync(te)}catch(n){r=1}""===r&&(r=1),"function"===typeof t&&t({enable:r})}})},oe=n("6f9b").default,ie=n("0d12").default||n("0d12"),ae=e.getSystemInfoSync(),se=function(){function t(){l(this,t),this.self="",this._retry=0,this._platform="",this._query={},this._navigationBarTitle={config:"",page:"",report:"",lt:""},this._operatingTime=0,this._reportingRequestData={1:[],11:[]},this.__prevent_triggering=!1,this.__licationHide=!1,this.__licationShow=!1,this._lastPageRoute="",this.statData={uuid:O(),ut:E(),mpn:A(),ak:ie.appid,usv:d,v:j(),ch:D(),cn:"",pn:"",ct:"",t:P(),tt:"",p:"android"===ae.platform?"a":"i",brand:ae.brand||"",md:ae.model,sv:ae.system.replace(/(Android|iOS)\s/,""),mpsdk:ae.SDKVersion||"",mpv:ae.version||"",lang:ae.language,pr:ae.pixelRatio,ww:ae.windowWidth,wh:ae.windowHeight,sw:ae.screenWidth,sh:ae.screenHeight}}return p(t,[{key:"getIsReportData",value:function(){return ne()}},{key:"_applicationShow",value:function(){if(this.__licationHide){Y();var e=W("app");if(e.overtime){var t={path:this._lastPageRoute,scene:this.statData.sc};this._sendReportRequest(t)}this.__licationHide=!1}}},{key:"_applicationHide",value:function(e,t){this.__licationHide=!0,Y();var n=W();G();var r=X(this);this._sendHideRequest({urlref:r,urlref_ts:n.residenceTime},t)}},{key:"_pageShow",value:function(){var e=X(this),t=J();if(this._navigationBarTitle.config=oe&&oe.pages[t]&&oe.pages[t].titleNView&&oe.pages[t].titleNView.titleText||oe&&oe.pages[t]&&oe.pages[t].navigationBarTitleText||"",this.__licationShow)return G(),this.__licationShow=!1,void(this._lastPageRoute=e);Y(),this._lastPageRoute=e;var n=W("page");if(n.overtime){var r={path:this._lastPageRoute,scene:this.statData.sc};this._sendReportRequest(r)}G()}},{key:"_pageHide",value:function(){if(!this.__licationHide){Y();var e=W("page");return this._sendPageRequest({url:this._lastPageRoute,urlref:this._lastPageRoute,urlref_ts:e.residenceTime}),void(this._navigationBarTitle={config:"",page:"",report:"",lt:""})}}},{key:"_login",value:function(){this._sendEventRequest({key:"login"},0)}},{key:"_share",value:function(){this._sendEventRequest({key:"share"},0)}},{key:"_payment",value:function(e){this._sendEventRequest({key:e},0)}},{key:"_sendReportRequest",value:function(e){this._navigationBarTitle.lt="1";var t=e.query&&"{}"!==JSON.stringify(e.query)?"?"+JSON.stringify(e.query):"";this.statData.lt="1",this.statData.url=e.path+t||"",this.statData.t=P(),this.statData.sc=C(e.scene),this.statData.fvts=U(),this.statData.lvts=q(),this.statData.tvc=H(),"n"===E()?this.getProperty():this.getNetworkInfo()}},{key:"_sendPageRequest",value:function(e){var t=e.url,n=e.urlref,r=e.urlref_ts;this._navigationBarTitle.lt="11";var o={ak:this.statData.ak,uuid:this.statData.uuid,lt:"11",ut:this.statData.ut,url:t,tt:this.statData.tt,urlref:n,urlref_ts:r,ch:this.statData.ch,usv:this.statData.usv,t:P(),p:this.statData.p};this.request(o)}},{key:"_sendHideRequest",value:function(e,t){var n=e.urlref,r=e.urlref_ts,o={ak:this.statData.ak,uuid:this.statData.uuid,lt:"3",ut:this.statData.ut,urlref:n,urlref_ts:r,ch:this.statData.ch,usv:this.statData.usv,t:P(),p:this.statData.p};this.request(o,t)}},{key:"_sendEventRequest",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=e.key,n=void 0===t?"":t,r=e.value,o=void 0===r?"":r,i=this._lastPageRoute,a={ak:this.statData.ak,uuid:this.statData.uuid,lt:"21",ut:this.statData.ut,url:i,ch:this.statData.ch,e_n:n,e_v:"object"===typeof o?JSON.stringify(o):o.toString(),usv:this.statData.usv,t:P(),p:this.statData.p};this.request(a)}},{key:"getNetworkInfo",value:function(){var t=this;e.getNetworkType({success:function(e){t.statData.net=e.networkType,t.getLocation()}})}},{key:"getProperty",value:function(){var e=this;plus.runtime.getProperty(plus.runtime.appid,(function(t){e.statData.v=t.version||"",e.getNetworkInfo()}))}},{key:"getLocation",value:function(){var t=this;ie.getLocation?e.getLocation({type:"wgs84",geocode:!0,success:function(e){e.address&&(t.statData.cn=e.address.country,t.statData.pn=e.address.province,t.statData.ct=e.address.city),t.statData.lat=e.latitude,t.statData.lng=e.longitude,t.request(t.statData)}}):(this.statData.lat=0,this.statData.lng=0,this.request(this.statData))}},{key:"request",value:function(t,n){var r=this,o=P(),i=this._navigationBarTitle;t.ttn=i.page,t.ttpj=i.config,t.ttc=i.report;var a=this._reportingRequestData;if("n"===E()&&(a=e.getStorageSync("__UNI__STAT__DATA")||{}),a[t.lt]||(a[t.lt]=[]),a[t.lt].push(t),"n"===E()&&e.setStorageSync("__UNI__STAT__DATA",a),!(F()=0;--i){var a=this.tryEntries[i],s=a.completion;if("root"===a.tryLoc)return r("end");if(a.tryLoc<=this.prev){var u=o.call(a,"catchLoc"),c=o.call(a,"finallyLoc");if(u&&c){if(this.prev=0;--n){var r=this.tryEntries[n];if(r.tryLoc<=this.prev&&o.call(r,"finallyLoc")&&this.prev=0;--t){var n=this.tryEntries[t];if(n.finallyLoc===e)return this.complete(n.completion,n.afterLoc),j(n),v}},catch:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var n=this.tryEntries[t];if(n.tryLoc===e){var r=n.completion;if("throw"===r.type){var o=r.arg;j(n)}return o}}throw new Error("illegal catch attempt")},delegateYield:function(e,t,r){return this.delegate={iterator:C(e),resultName:t,nextLoc:r},"next"===this.method&&(this.arg=n),v}}}function _(e,t,n,r){var o=t&&t.prototype instanceof k?t:k,i=Object.create(o.prototype),a=new D(r||[]);return i._invoke=P(e,n,a),i}function w(e,t,n){try{return{type:"normal",arg:e.call(t,n)}}catch(r){return{type:"throw",arg:r}}}function k(){}function S(){}function O(){}function x(e){["next","throw","return"].forEach((function(t){e[t]=function(e){return this._invoke(t,e)}}))}function T(e){function t(n,r,i,a){var s=w(e[n],e,r);if("throw"!==s.type){var u=s.arg,c=u.value;return c&&"object"===typeof c&&o.call(c,"__await")?Promise.resolve(c.__await).then((function(e){t("next",e,i,a)}),(function(e){t("throw",e,i,a)})):Promise.resolve(c).then((function(e){u.value=e,i(u)}),(function(e){return t("throw",e,i,a)}))}a(s.arg)}var n;function r(e,r){function o(){return new Promise((function(n,o){t(e,r,n,o)}))}return n=n?n.then(o,o):o()}this._invoke=r}function P(e,t,n){var r=f;return function(o,i){if(r===h)throw new Error("Generator is already running");if(r===d){if("throw"===o)throw i;return N()}n.method=o,n.arg=i;while(1){var a=n.delegate;if(a){var s=E(a,n);if(s){if(s===v)continue;return s}}if("next"===n.method)n.sent=n._sent=n.arg;else if("throw"===n.method){if(r===f)throw r=d,n.arg;n.dispatchException(n.arg)}else"return"===n.method&&n.abrupt("return",n.arg);r=h;var u=w(e,t,n);if("normal"===u.type){if(r=n.done?d:p,u.arg===v)continue;return{value:u.arg,done:n.done}}"throw"===u.type&&(r=d,n.method="throw",n.arg=u.arg)}}}function E(e,t){var r=e.iterator[t.method];if(r===n){if(t.delegate=null,"throw"===t.method){if(e.iterator.return&&(t.method="return",t.arg=n,E(e,t),"throw"===t.method))return v;t.method="throw",t.arg=new TypeError("The iterator does not provide a 'throw' method")}return v}var o=w(r,e.iterator,t.arg);if("throw"===o.type)return t.method="throw",t.arg=o.arg,t.delegate=null,v;var i=o.arg;return i?i.done?(t[e.resultName]=i.value,t.next=e.nextLoc,"return"!==t.method&&(t.method="next",t.arg=n),t.delegate=null,v):i:(t.method="throw",t.arg=new TypeError("iterator result is not an object"),t.delegate=null,v)}function A(e){var t={tryLoc:e[0]};1 in e&&(t.catchLoc=e[1]),2 in e&&(t.finallyLoc=e[2],t.afterLoc=e[3]),this.tryEntries.push(t)}function j(e){var t=e.completion||{};t.type="normal",delete t.arg,e.completion=t}function D(e){this.tryEntries=[{tryLoc:"root"}],e.forEach(A,this),this.reset(!0)}function C(e){if(e){var t=e[a];if(t)return t.call(e);if("function"===typeof e.next)return e;if(!isNaN(e.length)){var r=-1,i=function t(){while(++re.length)&&(t=e.length);for(var n=0,r=new Array(t);n>>2]>>>24-i%4*8&255;t[r+i>>>2]|=a<<24-(r+i)%4*8}else for(i=0;i>>2]=n[i>>>2];return this.sigBytes+=o,this},clamp:function(){var t=this.words,n=this.sigBytes;t[n>>>2]&=4294967295<<32-n%4*8,t.length=e.ceil(n/4)},clone:function(){var e=i.clone.call(this);return e.words=this.words.slice(0),e},random:function(t){for(var n,r=[],o=function(t){t=t;var n=987654321,r=4294967295;return function(){var o=((n=36969*(65535&n)+(n>>16)&r)<<16)+(t=18e3*(65535&t)+(t>>16)&r)&r;return o/=4294967296,(o+=.5)*(e.random()>.5?1:-1)}},i=0;i>>2]>>>24-o%4*8&255;r.push((i>>>4).toString(16)),r.push((15&i).toString(16))}return r.join("")},parse:function(e){for(var t=e.length,n=[],r=0;r>>3]|=parseInt(e.substr(r,2),16)<<24-r%8*4;return new a.init(n,t/2)}},c=s.Latin1={stringify:function(e){for(var t=e.words,n=e.sigBytes,r=[],o=0;o>>2]>>>24-o%4*8&255;r.push(String.fromCharCode(i))}return r.join("")},parse:function(e){for(var t=e.length,n=[],r=0;r>>2]|=(255&e.charCodeAt(r))<<24-r%4*8;return new a.init(n,t)}},l=s.Utf8={stringify:function(e){try{return decodeURIComponent(escape(c.stringify(e)))}catch(e){throw new Error("Malformed UTF-8 data")}},parse:function(e){return c.parse(unescape(encodeURIComponent(e)))}},f=o.BufferedBlockAlgorithm=i.extend({reset:function(){this._data=new a.init,this._nDataBytes=0},_append:function(e){"string"==typeof e&&(e=l.parse(e)),this._data.concat(e),this._nDataBytes+=e.sigBytes},_process:function(t){var n=this._data,r=n.words,o=n.sigBytes,i=this.blockSize,s=o/(4*i),u=(s=t?e.ceil(s):e.max((0|s)-this._minBufferSize,0))*i,c=e.min(4*u,o);if(u){for(var l=0;l>>24)|4278255360&(o<<24|o>>>8)}var i=this._hash.words,a=e[t+0],u=e[t+1],h=e[t+2],d=e[t+3],v=e[t+4],g=e[t+5],y=e[t+6],m=e[t+7],b=e[t+8],_=e[t+9],w=e[t+10],k=e[t+11],S=e[t+12],O=e[t+13],x=e[t+14],T=e[t+15],P=i[0],E=i[1],A=i[2],j=i[3];P=c(P,E,A,j,a,7,s[0]),j=c(j,P,E,A,u,12,s[1]),A=c(A,j,P,E,h,17,s[2]),E=c(E,A,j,P,d,22,s[3]),P=c(P,E,A,j,v,7,s[4]),j=c(j,P,E,A,g,12,s[5]),A=c(A,j,P,E,y,17,s[6]),E=c(E,A,j,P,m,22,s[7]),P=c(P,E,A,j,b,7,s[8]),j=c(j,P,E,A,_,12,s[9]),A=c(A,j,P,E,w,17,s[10]),E=c(E,A,j,P,k,22,s[11]),P=c(P,E,A,j,S,7,s[12]),j=c(j,P,E,A,O,12,s[13]),A=c(A,j,P,E,x,17,s[14]),P=l(P,E=c(E,A,j,P,T,22,s[15]),A,j,u,5,s[16]),j=l(j,P,E,A,y,9,s[17]),A=l(A,j,P,E,k,14,s[18]),E=l(E,A,j,P,a,20,s[19]),P=l(P,E,A,j,g,5,s[20]),j=l(j,P,E,A,w,9,s[21]),A=l(A,j,P,E,T,14,s[22]),E=l(E,A,j,P,v,20,s[23]),P=l(P,E,A,j,_,5,s[24]),j=l(j,P,E,A,x,9,s[25]),A=l(A,j,P,E,d,14,s[26]),E=l(E,A,j,P,b,20,s[27]),P=l(P,E,A,j,O,5,s[28]),j=l(j,P,E,A,h,9,s[29]),A=l(A,j,P,E,m,14,s[30]),P=f(P,E=l(E,A,j,P,S,20,s[31]),A,j,g,4,s[32]),j=f(j,P,E,A,b,11,s[33]),A=f(A,j,P,E,k,16,s[34]),E=f(E,A,j,P,x,23,s[35]),P=f(P,E,A,j,u,4,s[36]),j=f(j,P,E,A,v,11,s[37]),A=f(A,j,P,E,m,16,s[38]),E=f(E,A,j,P,w,23,s[39]),P=f(P,E,A,j,O,4,s[40]),j=f(j,P,E,A,a,11,s[41]),A=f(A,j,P,E,d,16,s[42]),E=f(E,A,j,P,y,23,s[43]),P=f(P,E,A,j,_,4,s[44]),j=f(j,P,E,A,S,11,s[45]),A=f(A,j,P,E,T,16,s[46]),P=p(P,E=f(E,A,j,P,h,23,s[47]),A,j,a,6,s[48]),j=p(j,P,E,A,m,10,s[49]),A=p(A,j,P,E,x,15,s[50]),E=p(E,A,j,P,g,21,s[51]),P=p(P,E,A,j,S,6,s[52]),j=p(j,P,E,A,d,10,s[53]),A=p(A,j,P,E,w,15,s[54]),E=p(E,A,j,P,u,21,s[55]),P=p(P,E,A,j,b,6,s[56]),j=p(j,P,E,A,T,10,s[57]),A=p(A,j,P,E,y,15,s[58]),E=p(E,A,j,P,O,21,s[59]),P=p(P,E,A,j,v,6,s[60]),j=p(j,P,E,A,k,10,s[61]),A=p(A,j,P,E,h,15,s[62]),E=p(E,A,j,P,_,21,s[63]),i[0]=i[0]+P|0,i[1]=i[1]+E|0,i[2]=i[2]+A|0,i[3]=i[3]+j|0},_doFinalize:function(){var t=this._data,n=t.words,r=8*this._nDataBytes,o=8*t.sigBytes;n[o>>>5]|=128<<24-o%32;var i=e.floor(r/4294967296),a=r;n[15+(o+64>>>9<<4)]=16711935&(i<<8|i>>>24)|4278255360&(i<<24|i>>>8),n[14+(o+64>>>9<<4)]=16711935&(a<<8|a>>>24)|4278255360&(a<<24|a>>>8),t.sigBytes=4*(n.length+1),this._process();for(var s=this._hash,u=s.words,c=0;c<4;c++){var l=u[c];u[c]=16711935&(l<<8|l>>>24)|4278255360&(l<<24|l>>>8)}return s},clone:function(){var e=i.clone.call(this);return e._hash=this._hash.clone(),e}});function c(e,t,n,r,o,i,a){var s=e+(t&n|~t&r)+o+a;return(s<>>32-i)+t}function l(e,t,n,r,o,i,a){var s=e+(t&r|n&~r)+o+a;return(s<>>32-i)+t}function f(e,t,n,r,o,i,a){var s=e+(t^n^r)+o+a;return(s<>>32-i)+t}function p(e,t,n,r,o,i,a){var s=e+(n^(t|~r))+o+a;return(s<>>32-i)+t}t.MD5=i._createHelper(u),t.HmacMD5=i._createHmacHelper(u)}(Math),n.MD5)})),P((function(e,t){var n,r,o;e.exports=(r=(n=E).lib.Base,o=n.enc.Utf8,void(n.algo.HMAC=r.extend({init:function(e,t){e=this._hasher=new e.init,"string"==typeof t&&(t=o.parse(t));var n=e.blockSize,r=4*n;t.sigBytes>r&&(t=e.finalize(t)),t.clamp();for(var i=this._oKey=t.clone(),a=this._iKey=t.clone(),s=i.words,u=a.words,c=0;c0&&void 0!==arguments[0]?arguments[0]:8,t="";t.length=400)return r(new I({code:"SYS_ERR",message:e.errMsg||"request:fail",requestId:t}));var o=e.data;if(o.error)return r(new I({code:o.error.code,message:o.error.message,requestId:t}));o.result=o.data,o.requestId=t,delete o.data,n(o)}}))}))}},H={request:function(e){return r.request(e)},uploadFile:function(e){return r.uploadFile(e)},setStorageSync:function(e,t){return r.setStorageSync(e,t)},getStorageSync:function(e){return r.getStorageSync(e)},removeStorageSync:function(e){return r.removeStorageSync(e)},clearStorageSync:function(){return r.clearStorageSync()}},V=function(){function e(t){d(this,e),["spaceId","clientSecret"].forEach((function(e){if(!Object.prototype.hasOwnProperty.call(t,e))throw new Error("缺少参数"+e)})),this.config=Object.assign({},{endpoint:"https://api.bspapp.com"},t),this.config.provider="aliyun",this.config.requestUrl=this.config.endpoint+"/client",this.config.envType=this.config.envType||"public",this.config.accessTokenKey="access_token_"+this.config.spaceId,this.adapter=H}return p(e,[{key:"setAccessToken",value:function(e){this.accessToken=e}},{key:"requestWrapped",value:function(e){return B.wrappedRequest(e,this.adapter.request)}},{key:"requestAuth",value:function(e){return this.requestWrapped(e)}},{key:"request",value:function(e,t){var n=this;return this.hasAccessToken?t?this.requestWrapped(e):this.requestWrapped(e).catch((function(t){return new Promise((function(e,n){!t||"GATEWAY_INVALID_TOKEN"!==t.code&&"InvalidParameter.InvalidToken"!==t.code?n(t):e()})).then((function(){return n.getAccessToken()})).then((function(){var t=n.rebuildRequest(e);return n.request(t,!0)}))})):this.getAccessToken().then((function(){var t=n.rebuildRequest(e);return n.request(t,!0)}))}},{key:"rebuildRequest",value:function(e){var t=Object.assign({},e);return t.data.token=this.accessToken,t.header["x-basement-token"]=this.accessToken,t.header["x-serverless-sign"]=B.sign(t.data,this.config.clientSecret),t}},{key:"setupRequest",value:function(e,t){var n=Object.assign({},e,{spaceId:this.config.spaceId,timestamp:Date.now()}),r={"Content-Type":"application/json"};return"auth"!==t&&(n.token=this.accessToken,r["x-basement-token"]=this.accessToken),r["x-serverless-sign"]=B.sign(n,this.config.clientSecret),{url:this.config.requestUrl,method:"POST",data:n,dataType:"json",header:r}}},{key:"getAccessToken",value:function(){var e=this;return this.requestAuth(this.setupRequest({method:"serverless.auth.user.anonymousAuthorize",params:"{}"},"auth")).then((function(t){return new Promise((function(n,r){t.result&&t.result.accessToken?(e.setAccessToken(t.result.accessToken),n(e.accessToken)):r(new I({code:"AUTH_FAILED",message:"获取accessToken失败"}))}))}))}},{key:"authorize",value:function(){this.getAccessToken()}},{key:"callFunction",value:function(e){var t={method:"serverless.function.runtime.invoke",params:JSON.stringify({functionTarget:e.name,functionArgs:e.data||{}})};return this.request(this.setupRequest(t))}},{key:"getOSSUploadOptionsFromPath",value:function(e){var t={method:"serverless.file.resource.generateProximalSign",params:JSON.stringify(e)};return this.request(this.setupRequest(t))}},{key:"uploadFileToOSS",value:function(e){var t=this,n=e.url,r=e.formData,o=e.name,i=e.filePath,a=e.fileType,s=e.onUploadProgress;return new Promise((function(e,u){var c=t.adapter.uploadFile({url:n,formData:r,name:o,filePath:i,fileType:a,header:{"X-OSS-server-side-encrpytion":"AES256"},success:function(t){t&&t.statusCode<400?e(t):u(new I({code:"UPLOAD_FAILED",message:"文件上传失败"}))},fail:function(e){u(e)}});"function"==typeof s&&c&&"function"==typeof c.onProgressUpdate&&c.onProgressUpdate((function(e){s({loaded:e.totalBytesSent,total:e.totalBytesExpectedToSend})}))}))}},{key:"reportOSSUpload",value:function(e){var t={method:"serverless.file.resource.report",params:JSON.stringify(e)};return this.request(this.setupRequest(t))}},{key:"uploadFile",value:function(e){var t=this,n=e.filePath,r=e.cloudPath,o=e.fileType,i=void 0===o?"image":o,a=e.onUploadProgress,s=e.config;if(!r)throw new I({code:"CLOUDPATH_REQUIRED",message:"cloudPath不可为空"});var u,c,l=s&&s.envType||this.config.envType;return this.getOSSUploadOptionsFromPath({env:l,filename:r}).then((function(e){var r=e.result;u=r.id,c="https://"+r.cdnDomain+"/"+r.ossPath;var o={url:"https://"+r.host,formData:{"Cache-Control":"max-age=2592000","Content-Disposition":"attachment",OSSAccessKeyId:r.accessKeyId,Signature:r.signature,host:r.host,id:u,key:r.ossPath,policy:r.policy,success_action_status:200},fileName:"file",name:"file",filePath:n,fileType:i};return t.uploadFileToOSS(Object.assign({},o,{onUploadProgress:a}))})).then((function(){return t.reportOSSUpload({id:u})})).then((function(e){return new Promise((function(t,r){e.success?t({success:!0,filePath:n,fileID:c}):r(new I({code:"UPLOAD_FAILED",message:"文件上传失败"}))}))}))}},{key:"deleteFile",value:function(e){var t=e.fileList,n={method:"serverless.file.resource.delete",params:JSON.stringify({id:t[0]})};return this.request(this.setupRequest(n))}},{key:"getTempFileURL",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=e.fileList;return new Promise((function(e,n){Array.isArray(t)&&0!==t.length||n(new I({code:"INVALID_PARAM",message:"fileList的元素必须是非空的字符串"})),e({fileList:t.map((function(e){return{fileID:e,tempFileURL:e}}))})}))}},{key:"hasAccessToken",get:function(){return!!this.accessToken}}]),e}(),K={init:function(e){var t=new V(e);["deleteFile","getTempFileURL"].forEach((function(e){t[e]=j(t[e]).bind(t)}));var n={signInAnonymously:function(){return t.authorize()},getLoginState:function(){return Promise.resolve(!1)}};return t.auth=function(){return n},t.customAuth=t.auth,t}},z=P((function(e,t){Object.defineProperty(t,"__esModule",{value:!0}),t.getQuery=function(e,t){if("undefined"==typeof window)return!1;var n=t||window.location.search,r=new RegExp("(^|&)"+e+"=([^&]*)(&|$)"),o=n.substr(n.indexOf("?")+1).match(r);return null!=o?o[2]:""},t.getHash=function(e){var t=window.location.hash.match(new RegExp("[#?&/]"+e+"=([^&#]*)"));return t?t[1]:""},t.removeParam=function(e,t){var n=t.split("?")[0],r=[],o=-1!==t.indexOf("?")?t.split("?")[1]:"";if(""!==o){for(var i=(r=o.split("&")).length-1;i>=0;i-=1)r[i].split("=")[0]===e&&r.splice(i,1);n=n+"?"+r.join("&")}return n},t.createPromiseCallback=function(){var e;if(!Promise){(e=function(){}).promise={};var t=function(){throw new Error('Your Node runtime does support ES6 Promises. Set "global.Promise" to your preferred implementation of promises.')};return Object.defineProperty(e.promise,"then",{get:t}),Object.defineProperty(e.promise,"catch",{get:t}),e}var n=new Promise((function(t,n){e=function(e,r){return e?n(e):t(r)}}));return e.promise=n,e},t.getWeixinCode=function(){return t.getQuery("code")||t.getHash("code")},t.getMiniAppCode=function(){return new Promise((function(e,t){wx.login({success:function(t){e(t.code)},fail:function(e){t(e)}})}))},t.isArray=function(e){return"[object Array]"===Object.prototype.toString.call(e)},t.isString=function(e){return"string"==typeof e},t.isUndefined=function(e){return void 0===e},t.isInstanceOf=function(e,t){return e instanceof t},t.isFormData=function(e){return"[object FormData]"===Object.prototype.toString.call(e)},t.genSeqId=function(){return Math.random().toString(16).slice(2)},t.getArgNames=function(e){var t=e.toString();return t.slice(t.indexOf("(")+1,t.indexOf(")")).match(/([^\s,]+)/g)},t.formatUrl=function(e,t,n){void 0===n&&(n={});var r=/\?/.test(t),o="";for(var i in n)""===o?!r&&(t+="?"):o+="&",o+=i+"="+encodeURIComponent(n[i]);return/^http(s)?\:\/\//.test(t+=o)?t:""+e+t}})),G="dist/index.js",Y="./dist/index.d.ts",W={build:"npm run tsc && webpack",tsc:"tsc -p tsconfig.json","tsc:w":"tsc -p tsconfig.json -w",test:"jest --verbose false -i",e2e:'NODE_ENV=e2e webpack && jest --config="./jest.e2e.config.js" --verbose false -i "e2e"',start:"webpack-dev-server --hot --open",eslint:'eslint "./**/*.js" "./**/*.ts"',"eslint-fix":'eslint --fix "./**/*.js" "./**/*.ts"',test_web:"npm run tsc && webpack-dev-server --devtool eval-source-map --progress --colors --hot --inline --content-base ./dist --host jimmytest-088bef.tcb.qcloud.la --port 80 --disableHostCheck true --mode development --config webpack.test.js"},J={type:"git",url:"https://github.com/TencentCloudBase/tcb-js-sdk"},X=["tcb","js-sdk"],Q={"@cloudbase/adapter-interface":"^0.2.0","@cloudbase/adapter-wx_mp":"^0.2.1","@cloudbase/database":"^0.9.8"},Z={"@babel/core":"^7.6.2","@babel/plugin-proposal-class-properties":"^7.5.5","@babel/plugin-proposal-object-rest-spread":"^7.6.2","@babel/plugin-transform-runtime":"^7.6.2","@babel/preset-env":"^7.6.2","@babel/preset-typescript":"^7.6.0","@babel/runtime":"^7.6.2","@types/jest":"^23.1.4","@types/node":"^10.14.4","@types/superagent":"^4.1.4",axios:"^0.19.0","babel-eslint":"^10.0.1","babel-loader":"^8.0.6","babel-polyfill":"^6.26.0",eslint:"^5.16.0","eslint-config-alloy":"^1.4.2","eslint-config-prettier":"^4.1.0","eslint-plugin-prettier":"^3.0.1","eslint-plugin-typescript":"^1.0.0-rc.3",express:"^4.17.1",husky:"^3.1.0",jest:"^24.7.1","jest-puppeteer":"^4.3.0","lint-staged":"^9.5.0","power-assert":"^1.6.1",puppeteer:"^1.20.0","serve-static":"^1.14.1","ts-jest":"^23.10.4","ts-loader":"^6.2.1",typescript:"^3.4.3","typescript-eslint-parser":"^22.0.0",webpack:"^4.41.3","webpack-bundle-analyzer":"^3.4.1","webpack-cli":"^3.3.0","webpack-dev-server":"^3.3.1","webpack-merge":"^4.2.2","webpack-visualizer-plugin":"^0.1.11"},ee={hooks:{"pre-commit":"lint-staged"}},te={name:"tcb-js-sdk",version:"1.3.5",description:"js sdk for tcb",main:G,types:Y,scripts:W,repository:J,keywords:X,author:"jimmyjzhang",license:"ISC",dependencies:Q,devDependencies:Z,husky:ee,"lint-staged":{"*.{js,ts}":["eslint --fix","git add"]}},ne=(M=Object.freeze({__proto__:null,name:"tcb-js-sdk",version:"1.3.5",description:"js sdk for tcb",main:G,types:Y,scripts:W,repository:J,keywords:X,author:"jimmyjzhang",license:"ISC",dependencies:Q,devDependencies:Z,husky:ee,default:te}))&&M.default||M,re=P((function(e,t){var n=x&&x.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)Object.hasOwnProperty.call(e,n)&&(t[n]=e[n]);return t.default=e,t};Object.defineProperty(t,"__esModule",{value:!0});var r=n(ne);t.SDK_VERISON=r.version,t.ACCESS_TOKEN="access_token",t.ACCESS_TOKEN_Expire="access_token_expire",t.REFRESH_TOKEN="refresh_token",t.ANONYMOUS_UUID="anonymous_uuid",t.LOGIN_TYPE_KEY="login_type",t.protocol="undefined"!=typeof location&&"http:"===location.protocol?"http:":"https:",t.BASE_URL="//tcb-api.tencentcloudapi.com/web"}));!function(e){e.local="local",e.none="none",e.session="session"}(F||(F={}));var oe=function(){},ie=function(){},ae=Object.freeze({__proto__:null,get StorageType(){return F},AbstractSDKRequest:oe,AbstractStorage:ie,formatUrl:function(e,t,n){void 0===n&&(n={});var r=/\?/.test(t),o="";for(var i in n)""===o?!r&&(t+="?"):o+="&",o+=i+"="+encodeURIComponent(n[i]);return/^http(s)?\:\/\//.test(t+=o)?t:""+e+t}}),se=P((function(e,t){var n,r=x&&x.__extends||(n=function(e,t){return(n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n])})(e,t)},function(e,t){function r(){this.constructor=e}n(e,t),e.prototype=null===t?Object.create(t):(r.prototype=t.prototype,new r)}),o=x&&x.__assign||function(){return(o=Object.assign||function(e){for(var t,n=1,r=arguments.length;n0&&o[o.length-1])||6!==i[0]&&2!==i[0])){a=0;continue}if(3===i[0]&&(!o||i[1]>o[0]&&i[1]=0?JSON.parse(n).content:""},e.prototype.removeStore=function(e){this.storageClass.removeItem(e)},e}();t.Cache=o;var i=function(e){function t(){var t=e.call(this)||this;return ue.Adapter.adapter.root.tcbObject||(ue.Adapter.adapter.root.tcbObject={}),t}return r(t,e),t.prototype.setItem=function(e,t){ue.Adapter.adapter.root.tcbObject[e]=t},t.prototype.getItem=function(e){return ue.Adapter.adapter.root.tcbObject[e]},t.prototype.removeItem=function(e){delete ue.Adapter.adapter.root.tcbObject[e]},t.prototype.clear=function(){delete ue.Adapter.adapter.root.tcbObject},t}(ae.AbstractStorage)})),le=P((function(e,t){var n,r=x&&x.__extends||(n=function(e,t){return(n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n])})(e,t)},function(e,t){function r(){this.constructor=e}n(e,t),e.prototype=null===t?Object.create(t):(r.prototype=t.prototype,new r)}),o=x&&x.__spreadArrays||function(){for(var e=0,t=0,n=arguments.length;t0},e}();t.IEventEmitter=s;var u=new s;t.addEventListener=function(e,t){u.on(e,t)},t.activateEvent=function(e,t){void 0===t&&(t={}),u.fire(e,t)},t.removeEventListener=function(e,t){u.off(e,t)},t.EVENTS={LOGIN_STATE_CHANGED:"loginStateChanged",LOGIN_STATE_EXPIRE:"loginStateExpire",LOGIN_TYPE_CHANGE:"loginTypeChanged",ANONYMOUS_CONVERTED:"anonymousConverted",REFRESH_ACCESS_TOKEN:"refreshAccessToken"}})),fe=P((function(e,t){var n=x&&x.__assign||function(){return(n=Object.assign||function(e){for(var t,n=1,r=arguments.length;n0&&o[o.length-1])||6!==i[0]&&2!==i[0])){a=0;continue}if(3===i[0]&&(!o||i[1]>o[0]&&i[1]0&&o[o.length-1])||6!==i[0]&&2!==i[0])){a=0;continue}if(3===i[0]&&(!o||i[1]>o[0]&&i[1]0&&o[o.length-1])||6!==i[0]&&2!==i[0])){a=0;continue}if(3===i[0]&&(!o||i[1]>o[0]&&i[1]Date.now())return[2,{credential:{accessToken:e,refreshToken:this.cache.getStore(this.refreshTokenKey)}}];this.cache.removeStore(this.accessTokenKey),this.cache.removeStore(this.accessTokenExpireKey)}if(!1===Object.values(s).includes(s[this.scope]))throw new Error("错误的scope类型");return ue.Adapter.runtime!==ue.RUNTIME.WX_MP?[3,2]:[4,c.getMiniAppCode()];case 1:return n=i.sent(),[3,4];case 2:return[4,c.getWeixinCode()];case 3:if(!(n=i.sent()))return[2,this.redirect()];i.label=4;case 4:return r=function(e){switch(e){case s.snsapi_login:return"WECHAT-OPEN";default:return"WECHAT-PUBLIC"}}(this.scope),[4,this.getRefreshTokenByWXCode(this.appid,r,n)];case 5:return o=i.sent(),a=o.refreshToken,this.cache.setStore(this.refreshTokenKey,a),o.accessToken&&this.cache.setStore(this.accessTokenKey,o.accessToken),o.accessTokenExpire&&this.cache.setStore(this.accessTokenExpireKey,o.accessTokenExpire+Date.now()),le.activateEvent(le.EVENTS.LOGIN_STATE_CHANGED),le.activateEvent(le.EVENTS.LOGIN_TYPE_CHANGE,l.LOGINTYPE.WECHAT),[2,{credential:{refreshToken:a}}]}}))}))},t.prototype.redirect=function(){var e=c.removeParam("code",location.href);e=c.removeParam("state",e),e=encodeURIComponent(e);var t="//open.weixin.qq.com/connect/oauth2/authorize";"snsapi_login"===this.scope&&(t="//open.weixin.qq.com/connect/qrconnect"),"redirect"===u[this.loginMode]&&(location.href=t+"?appid="+this.appid+"&redirect_uri="+e+"&response_type=code&scope="+this.scope+"&state="+this.state+"#wechat_redirect")},t}(l.default);t.default=p})),de=P((function(e,t){var n,r=x&&x.__extends||(n=function(e,t){return(n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n])})(e,t)},function(e,t){function r(){this.constructor=e}n(e,t),e.prototype=null===t?Object.create(t):(r.prototype=t.prototype,new r)}),o=x&&x.__assign||function(){return(o=Object.assign||function(e){for(var t,n=1,r=arguments.length;n0&&o[o.length-1])||6!==i[0]&&2!==i[0])){a=0;continue}if(3===i[0]&&(!o||i[1]>o[0]&&i[1]0&&o[o.length-1])||6!==i[0]&&2!==i[0])){a=0;continue}if(3===i[0]&&(!o||i[1]>o[0]&&i[1]0&&o[o.length-1])||6!==i[0]&&2!==i[0])){a=0;continue}if(3===i[0]&&(!o||i[1]>o[0]&&i[1]2&&void 0!==arguments[2]?arguments[2]:5,r=arguments.length>3?arguments[3]:void 0;(t=Object.assign({},t)).errMsg="chooseAndUploadFile:ok";var o=t.tempFiles,i=o.length,a=0;return new Promise((function(s){for(;a=i)!o.find((function(e){return!e.url&&!e.errMsg}))&&s(t);else{var c=o[n];e.uploadFile({filePath:c.path,cloudPath:c.cloudPath,fileType:c.fileType,onUploadProgress:function(e){e.index=n,e.tempFile=c,e.tempFilePath=c.path,r&&r(e)}}).then((function(e){c.url=e.fileID,n0&&void 0!==arguments[0]?arguments[0]:{type:"all"};return"image"===t.type?i(e,function(e){var t=e.count,i=e.sizeType,a=e.sourceType,s=e.extension;return new Promise((function(e,u){r.chooseImage({count:t,sizeType:i,sourceType:a,extension:s,success:function(t){e(o(t,"image"))},fail:function(e){u({errMsg:e.errMsg.replace("chooseImage:fail",n)})}})}))}(t),t):"video"===t.type?i(e,function(e){var t=e.camera,i=e.compressed,a=e.maxDuration,s=e.sourceType,u=e.extension;return new Promise((function(e,c){r.chooseVideo({camera:t,compressed:i,maxDuration:a,sourceType:s,extension:u,success:function(t){var n=t.tempFilePath,r=t.duration,i=t.size,a=t.height,s=t.width;e(o({errMsg:"chooseVideo:ok",tempFilePaths:[n],tempFiles:[{name:t.tempFile&&t.tempFile.name||"",path:n,size:i,type:t.tempFile&&t.tempFile.type||"",width:s,height:a,duration:r,fileType:"video",cloudPath:""}]},"video"))},fail:function(e){c({errMsg:e.errMsg.replace("chooseVideo:fail",n)})}})}))}(t),t):i(e,function(e){var t=e.count,i=e.extension;return new Promise((function(e,a){var s=r.chooseFile;if("undefined"!=typeof wx&&"function"==typeof wx.chooseMessageFile&&(s=wx.chooseMessageFile),"function"!=typeof s)return a({errMsg:n+" 请指定 type 类型,该平台仅支持选择 image 或 video。"});s({type:"all",count:t,extension:i,success:function(t){e(o(t))},fail:function(e){a({errMsg:e.errMsg.replace("chooseFile:fail",n)})}})}))}(t),t)}}})));var Ue=new(function(){function e(){d(this,e)}return p(e,[{key:"init",value:function(e){var t={},n=!1!==e.debugFunction&&!1;switch(e.provider){case"tencent":t=xe.init(Object.assign(e,{useDebugFunction:n}));break;case"aliyun":t=K.init(Object.assign(e,{useDebugFunction:n}));break;default:throw new Error("未提供正确的provider参数")}t.isReady=!1;var o=t.auth();return t.initUniCloud=o.getLoginState().then((function(e){return e?Promise.resolve():o.signInAnonymously()})).then((function(){return Promise.resolve()})).then((function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},n=e.address,r=e.port;if(n)t.localAddress=n,t.localPort=r;else if(t.debugInfo){var o="warn",i=console[o];"remote"===t.debugInfo.initialLaunchType?(t.debugInfo.forceRemote=!0,i("当前客户端和HBuilderX不在同一局域网下(或其他网络原因无法连接HBuilderX),uniCloud本地调试服务不对当前客户端生效。\n- 如果不使用uniCloud本地调试服务,请直接忽略此信息。\n- 如需使用uniCloud本地调试服务,请将客户端与主机连接到同一局域网下并重新运行到客户端。\n- 如果在HBuilderX开启的状态下切换过网络环境,请重启HBuilderX后再试")):i("无法连接uniCloud本地调试服务,请检查当前客户端是否与主机在同一局域网下。\n- 如需使用uniCloud本地调试服务,请将客户端与主机连接到同一局域网下并重新运行到客户端。\n- 如果在HBuilderX开启的状态下切换过网络环境,请重启HBuilderX后再试")}})).then((function(){return new Promise((function(e){setTimeout((function(){N=r.getSystemInfoSync().platform,C=r.getStorageSync("__DC_CLOUD_UUID")||U(32),e()}),0)}))})).then((function(){t.isReady=!0})),Ee(t),function(e){var t=e.uploadFile;e.uploadFile=function(e){var n,r=this;return n=this.isReady?Promise.resolve():this.initUniCloud,n.then((function(){return t.call(r,e)}))};var n=e.uploadFile;e.uploadFile=function(e){return j(n).call(this,e)}}(t),function(e){e.database=function(){if(this._database)return this._database;var t={},n={},r=function(){function r(e,t,n){d(this,r),this.content=e,this.prevStage=t,this.actionName=n}return p(r,[{key:"toJSON",value:function(){for(var e=this,t=[e.content];e.prevStage;)e=e.prevStage,t.push(e.content);return{$db:t.reverse().map((function(e){return{$method:e.$method,$param:e.$param}}))}}},{key:"get",value:function(){return this._send("get",Array.from(arguments))}},{key:"add",value:function(){return this._send("add",Array.from(arguments))}},{key:"remove",value:function(){return this._send("remove",Array.from(arguments))}},{key:"update",value:function(){return this._send("update",Array.from(arguments))}},{key:"end",value:function(){return this._send("end",Array.from(arguments))}},{key:"set",value:function(){throw new Error("客户端禁止使用set方法")}},{key:"_send",value:function(r,o){var i=this.toJSON();return i.$db.push({$method:r,$param:o}),e.callFunction({name:"DCloud-clientDB",data:{action:this.actionName,command:i}}).then((function(e){var r=e.result,o=r.code,i=r.message,a=r.token,s=r.tokenExpired;return o?Promise.reject(new De(i,o)):(a&&s&&t.refreshToken&&t.refreshToken.forEach((function(e){e({token:a,tokenExpired:s})})),a&&s&&n.refreshToken&&n.refreshToken.forEach((function(e){e({token:a,tokenExpired:s})})),Promise.resolve(e))})).catch((function(e){var t=new De(e.message,e.code||"SYSTEM_ERROR");return n.error&&n.error.forEach((function(e){e(t)})),/fc_function_not_found|FUNCTION_NOT_FOUND/g.test(e.message)&&console.warn("clientDB未初始化,请在web控制台保存一次schema以开启clientDB"),Promise.reject(e)}))}},{key:"useAggregate",get:function(){for(var e=this,t=!1;e.prevStage;){e=e.prevStage;var n=e.content.$method;if("aggregate"===n||"pipeline"===n){t=!0;break}}return t}},{key:"count",get:function(){if(!this.useAggregate)return function(){return this._send("count",Array.from(arguments))};var e=this;return function(){return s({$method:"count",$param:Ce(Array.from(arguments))},e,e.actionName)}}}]),r}(),o=["db.Geo","db.command","command.aggregate"];function a(e,t){return o.indexOf("".concat(e,".").concat(t))>-1}function s(e,t,n){return je(new r(e,t,n),{get:function(e,t){var r="db";return e&&e.content&&(r=e.content.$method),a(r,t)?s({$method:t},e,n):function(){return s({$method:t,$param:Ce(Array.from(arguments))},e,n)}}})}function u(e){var t=e.path,n=e.method;return function(){function e(){d(this,e),this.param=Array.from(arguments)}return p(e,[{key:"toJSON",value:function(){return{$newDb:[].concat(i(t.map((function(e){return{$method:e}}))),[{$method:n,$param:this.param}])}}}]),e}()}var c={auth:{on:function(e,n){t[e]=t[e]||[],t[e].indexOf(n)>-1||t[e].push(n)},off:function(e,n){t[e]=t[e]||[];var r=t[e].indexOf(n);-1!==r&&t[e].splice(r,1)}},on:function(e,t){n[e]=n[e]||[],n[e].indexOf(t)>-1||n[e].push(t)},off:function(e,t){n[e]=n[e]||[];var r=n[e].indexOf(t);-1!==r&&n[e].splice(r,1)},env:je({},{get:function(e,t){return{$env:t}}}),action:function(e){return je({},{get:function(t,n){return a("db",n)?s({$method:n},null,e):function(){return s({$method:n,$param:Ce(Array.from(arguments))},null,e)}}})},Geo:je({},{get:function(e,t){return u({path:["Geo"],method:t})}}),getCloudEnv:function(e){if("string"!=typeof e||!e.trim())throw new Error("getCloudEnv参数错误");return{$env:e.replace("$cloudEnv_","")}},get serverDate(){return u({path:[],method:"serverDate"})},get RegExp(){return u({path:[],method:"RegExp"})}},l=je(c,{get:function(e,t){return a("db",t)?s({$method:t}):function(){return s({$method:t,$param:Ce(Array.from(arguments))})}}});return this._database=l,l}}(t),function(e){e.getCurrentUserInfo=Ne,e.chooseAndUploadFile=j(Ie.initChooseAndUploadFile(e))}(t),t.init=this.init,t}}]),e}()),qe={};if(1===[].length)qe=[][0],Ue=Ue.init(qe);else{var $e=["auth","callFunction","uploadFile","deleteFile","getTempFileURL","downloadFile","database","getCurrentUSerInfo"],Re=[].length>0?"应用有多个服务空间,请通过uniCloud.init方法指定要使用的服务空间":"应用未关联服务空间,请在cloudfunctions目录右键关联服务空间";$e.forEach((function(e){Ue[e]=function(){return console.error(Re),Promise.reject(new I({code:"SYS_ERR",message:Re}))}}))}Object.assign(Ue,{get mixinDatacom(){return e=Ue,{props:{localdata:{type:Array,default:function(){return[]}},options:{type:[Object,Array],default:function(){return{}}},collection:{type:String,default:""},action:{type:String,default:""},field:{type:String,default:""},orderby:{type:String,default:""},where:{type:[String,Object],default:""},pageData:{type:String,default:"add"},pageCurrent:{type:Number,default:1},pageSize:{type:Number,default:20},getcount:{type:[Boolean,String],default:!1},gettree:{type:[Boolean,String],default:!1},gettreepath:{type:[Boolean,String],default:!1},startwith:{type:String,default:""},limitlevel:{type:Number,default:10},groupby:{type:String,default:""},groupField:{type:String,default:""},distinct:{type:[Boolean,String],default:!1},manual:{type:Boolean,default:!1}},data:function(){return{mixinDatacomLoading:!1,mixinDatacomHasMore:!1,mixinDatacomResData:[],mixinDatacomErrorMessage:"",mixinDatacomPage:{}}},created:function(){var e=this;this.mixinDatacomPage={current:this.pageCurrent,size:this.pageSize,count:0},this.$watch((function(){var t=[];return["pageCurrent","pageSize","localdata","collection","action","field","orderby","where","getont","getcount","gettree","groupby","groupField","distinct"].forEach((function(n){t.push(e[n])})),t}),(function(t,n){for(var r=!1,o=[],i=2;i0&&void 0!==arguments[0]?arguments[0]:{},n=t.getone,r=void 0!==n&&n,o=t.success,i=t.fail;this.mixinDatacomLoading||(this.mixinDatacomLoading=!0,this.mixinDatacomErrorMessage="",this.mixinDatacomGet().then((function(t){e.mixinDatacomLoading=!1;var n=t.result,i=n.data,a=n.count;e.getcount&&(e.mixinDatacomPage.count=a),e.mixinDatacomHasMore=i.length0&&void 0!==arguments[0]?arguments[0]:{},n=e.database(),r=t.action||this.action;r&&(n=n.action(r));var o=t.collection||this.collection;n=n.collection(o);var i=t.where||this.where;i&&Object.keys(i).length&&(n=n.where(i));var a=t.field||this.field;a&&(n=n.field(a));var s=t.groupby||this.groupby;s&&(n=n.groupBy(s));var u=t.groupField||this.groupField;u&&(n=n.groupField(u)),!0===(void 0!==t.distinct?t.distinct:this.distinct)&&(n=n.distinct());var c=t.orderby||this.orderby;c&&(n=n.orderBy(c));var l=void 0!==t.pageCurrent?t.pageCurrent:this.mixinDatacomPage.current,f=void 0!==t.pageSize?t.pageSize:this.mixinDatacomPage.size,p=void 0!==t.getcount?t.getcount:this.getcount,h=void 0!==t.gettree?t.gettree:this.gettree,d=void 0!==t.gettreepath?t.gettreepath:this.gettreepath,v={getCount:p},g={limitLevel:void 0!==t.limitlevel?t.limitlevel:this.limitlevel,startWith:void 0!==t.startwith?t.startwith:this.startwith};return h&&(v.getTree=g),d&&(v.getTreePath=g),n=n.skip(f*(l-1)).limit(f).get(v),n}}};var e}});var Le=Ue,Me=Le;t.default=Me}).call(this,n("c8ba"),n("543d")["default"])},aa0b:function(e,t,n){(function(t){function n(e){t.navigateTo({url:e})}function r(){t.navigateBack({delta:1})}e.exports={goto:n,back:r,vuemixin:{created:function(){console.log(1)}}}}).call(this,n("543d")["default"])},af5a:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var r=i(n("a34a")),o=n("4e5a");function i(e){return e&&e.__esModule?e:{default:e}}function a(e,t,n,r,o,i,a){try{var s=e[i](a),u=s.value}catch(c){return void n(c)}s.done?t(u):Promise.resolve(u).then(r,o)}function s(e){return function(){var t=this,n=arguments;return new Promise((function(r,o){var i=e.apply(t,n);function s(e){a(i,r,o,s,u,"next",e)}function u(e){a(i,r,o,s,u,"throw",e)}s(void 0)}))}}function u(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function c(e){for(var t=1;t0&&void 0!==arguments[0]?arguments[0]:"",t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};return this.request(c({method:"POST",data:t,url:e},n))}},{key:"get",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"",t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};return this.request(c({method:"GET",data:t,url:e},n))}},{key:"put",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"",t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};return this.request(c({method:"PUT",data:t,url:e},n))}},{key:"delete",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"",t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};return this.request(c({method:"DELETE",data:t,url:e},n))}},{key:"jsonp",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"",t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};return this.request(c({method:"JSONP",data:t,url:e},n))}},{key:"request",value:function(){var e=s(r.default.mark((function e(t){var n,i,a,s,u,l;return r.default.wrap((function(e){while(1)switch(e.prev=e.next){case 0:if(i=!1,e.prev=1,t.url){e.next=4;break}throw{errMsg:"【request】缺失数据url",statusCode:0};case 4:if(n=(0,o.mergeConfig)(this,t),i=!0,!this.requestStart){e.next=14;break}if(a=this.requestStart(n),"object"!=typeof a){e.next=13;break}s=["data","header","isPrompt","load","isFactory"],s.forEach((function(e){n[e]=a[e]})),e.next=14;break;case 13:throw{errMsg:"【request】请求开始拦截器未通过",statusCode:0,data:n.data,method:n.method,header:n.header,url:n.url};case 14:if(u={},"JSONP"!=n.method){e.next=21;break}return e.next=18,(0,o.jsonpRequest)(n);case 18:u=e.sent,e.next=24;break;case 21:return e.next=23,(0,o.dispatchRequest)(n);case 23:u=e.sent;case 24:if(!n.isFactory||!this.dataFactory){e.next=31;break}return e.next=27,this.dataFactory(c(c({},n),{},{response:u}));case 27:return l=e.sent,e.abrupt("return",Promise.resolve(l));case 31:return e.abrupt("return",Promise.resolve(u));case 32:e.next=38;break;case 34:return e.prev=34,e.t0=e["catch"](1),this.requestError&&this.requestError(e.t0),e.abrupt("return",Promise.reject(e.t0));case 38:return e.prev=38,i&&this.requestEnd&&this.requestEnd(n),e.finish(38);case 41:case"end":return e.stop()}}),e,this,[[1,34,38,41]])})));function t(t){return e.apply(this,arguments)}return t}()}]),e}();t.default=d},b38e:function(e,t,n){"use strict";(function(e){function n(){return n=Object.assign||function(e){for(var t=1;t=i)return e;switch(e){case"%s":return String(t[r++]);case"%d":return Number(t[r++]);case"%j":try{return JSON.stringify(t[r++])}catch(n){return"[Circular]"}break;default:return e}}));return a}return o}function d(e){return"string"===e||"url"===e||"hex"===e||"email"===e||"date"===e||"pattern"===e}function v(e,t){return void 0===e||null===e||(!("array"!==t||!Array.isArray(e)||e.length)||!(!d(t)||"string"!==typeof e||e))}function g(e,t,n){var r=[],o=0,i=e.length;function a(e){r.push.apply(r,e),o++,o===i&&n(r)}e.forEach((function(e){t(e,a)}))}function y(e,t,n){var r=0,o=e.length;function i(a){if(a&&a.length)n(a);else{var s=r;r+=1,s()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/,url:new RegExp("^(?!mailto:)(?:(?:http|https|ftp)://|//)(?:\\S+(?::\\S*)?@)?(?:(?:(?:[1-9]\\d?|1\\d\\d|2[01]\\d|22[0-3])(?:\\.(?:1?\\d{1,2}|2[0-4]\\d|25[0-5])){2}(?:\\.(?:[0-9]\\d?|1\\d\\d|2[0-4]\\d|25[0-4]))|(?:(?:[a-z\\u00a1-\\uffff0-9]+-*)*[a-z\\u00a1-\\uffff0-9]+)(?:\\.(?:[a-z\\u00a1-\\uffff0-9]+-*)*[a-z\\u00a1-\\uffff0-9]+)*(?:\\.(?:[a-z\\u00a1-\\uffff]{2,})))|localhost)(?::\\d{2,5})?(?:(/|\\?|#)[^\\s]*)?$","i"),hex:/^#?([a-f0-9]{6}|[a-f0-9]{3})$/i},T={integer:function(e){return T.number(e)&&parseInt(e,10)===e},float:function(e){return T.number(e)&&!T.integer(e)},array:function(e){return Array.isArray(e)},regexp:function(e){if(e instanceof RegExp)return!0;try{return!!new RegExp(e)}catch(t){return!1}},date:function(e){return"function"===typeof e.getTime&&"function"===typeof e.getMonth&&"function"===typeof e.getYear&&!isNaN(e.getTime())},number:function(e){return!isNaN(e)&&"number"===typeof e},object:function(e){return"object"===typeof e&&!T.array(e)},method:function(e){return"function"===typeof e},email:function(e){return"string"===typeof e&&!!e.match(x.email)&&e.length<255},url:function(e){return"string"===typeof e&&!!e.match(x.url)},hex:function(e){return"string"===typeof e&&!!e.match(x.hex)}};function P(e,t,n,r,o){if(e.required&&void 0===t)S(e,t,n,r,o);else{var i=["integer","float","array","regexp","object","method","email","number","date","url","hex"],a=e.type;i.indexOf(a)>-1?T[a](t)||r.push(h(o.messages.types[a],e.fullField,e.type)):a&&typeof t!==e.type&&r.push(h(o.messages.types[a],e.fullField,e.type))}}function E(e,t,n,r,o){var i="number"===typeof e.len,a="number"===typeof e.min,s="number"===typeof e.max,u=/[\uD800-\uDBFF][\uDC00-\uDFFF]/g,c=t,l=null,f="number"===typeof t,p="string"===typeof t,d=Array.isArray(t);if(f?l="number":p?l="string":d&&(l="array"),!l)return!1;d&&(c=t.length),p&&(c=t.replace(u,"_").length),i?c!==e.len&&r.push(h(o.messages[l].len,e.fullField,e.len)):a&&!s&&ce.max?r.push(h(o.messages[l].max,e.fullField,e.max)):a&&s&&(ce.max)&&r.push(h(o.messages[l].range,e.fullField,e.min,e.max))}var A="enum";function j(e,t,n,r,o){e[A]=Array.isArray(e[A])?e[A]:[],-1===e[A].indexOf(t)&&r.push(h(o.messages[A],e.fullField,e[A].join(", ")))}function D(e,t,n,r,o){if(e.pattern)if(e.pattern instanceof RegExp)e.pattern.lastIndex=0,e.pattern.test(t)||r.push(h(o.messages.pattern.mismatch,e.fullField,t,e.pattern));else if("string"===typeof e.pattern){var i=new RegExp(e.pattern);i.test(t)||r.push(h(o.messages.pattern.mismatch,e.fullField,t,e.pattern))}}var C={required:S,whitespace:O,type:P,range:E,enum:j,pattern:D};function N(e,t,n,r,o){var i=[],a=e.required||!e.required&&r.hasOwnProperty(e.field);if(a){if(v(t,"string")&&!e.required)return n();C.required(e,t,r,i,o,"string"),v(t,"string")||(C.type(e,t,r,i,o),C.range(e,t,r,i,o),C.pattern(e,t,r,i,o),!0===e.whitespace&&C.whitespace(e,t,r,i,o))}n(i)}function I(e,t,n,r,o){var i=[],a=e.required||!e.required&&r.hasOwnProperty(e.field);if(a){if(v(t)&&!e.required)return n();C.required(e,t,r,i,o),void 0!==t&&C.type(e,t,r,i,o)}n(i)}function U(e,t,n,r,o){var i=[],a=e.required||!e.required&&r.hasOwnProperty(e.field);if(a){if(""===t&&(t=void 0),v(t)&&!e.required)return n();C.required(e,t,r,i,o),void 0!==t&&(C.type(e,t,r,i,o),C.range(e,t,r,i,o))}n(i)}function q(e,t,n,r,o){var i=[],a=e.required||!e.required&&r.hasOwnProperty(e.field);if(a){if(v(t)&&!e.required)return n();C.required(e,t,r,i,o),void 0!==t&&C.type(e,t,r,i,o)}n(i)}function $(e,t,n,r,o){var i=[],a=e.required||!e.required&&r.hasOwnProperty(e.field);if(a){if(v(t)&&!e.required)return n();C.required(e,t,r,i,o),v(t)||C.type(e,t,r,i,o)}n(i)}function R(e,t,n,r,o){var i=[],a=e.required||!e.required&&r.hasOwnProperty(e.field);if(a){if(v(t)&&!e.required)return n();C.required(e,t,r,i,o),void 0!==t&&(C.type(e,t,r,i,o),C.range(e,t,r,i,o))}n(i)}function L(e,t,n,r,o){var i=[],a=e.required||!e.required&&r.hasOwnProperty(e.field);if(a){if(v(t)&&!e.required)return n();C.required(e,t,r,i,o),void 0!==t&&(C.type(e,t,r,i,o),C.range(e,t,r,i,o))}n(i)}function M(e,t,n,r,o){var i=[],a=e.required||!e.required&&r.hasOwnProperty(e.field);if(a){if((void 0===t||null===t)&&!e.required)return n();C.required(e,t,r,i,o,"array"),void 0!==t&&null!==t&&(C.type(e,t,r,i,o),C.range(e,t,r,i,o))}n(i)}function F(e,t,n,r,o){var i=[],a=e.required||!e.required&&r.hasOwnProperty(e.field);if(a){if(v(t)&&!e.required)return n();C.required(e,t,r,i,o),void 0!==t&&C.type(e,t,r,i,o)}n(i)}var B="enum";function H(e,t,n,r,o){var i=[],a=e.required||!e.required&&r.hasOwnProperty(e.field);if(a){if(v(t)&&!e.required)return n();C.required(e,t,r,i,o),void 0!==t&&C[B](e,t,r,i,o)}n(i)}function V(e,t,n,r,o){var i=[],a=e.required||!e.required&&r.hasOwnProperty(e.field);if(a){if(v(t,"string")&&!e.required)return n();C.required(e,t,r,i,o),v(t,"string")||C.pattern(e,t,r,i,o)}n(i)}function K(e,t,n,r,o){var i=[],a=e.required||!e.required&&r.hasOwnProperty(e.field);if(a){if(v(t,"date")&&!e.required)return n();var s;if(C.required(e,t,r,i,o),!v(t,"date"))s=t instanceof Date?t:new Date(t),C.type(e,s,r,i,o),s&&C.range(e,s.getTime(),r,i,o)}n(i)}function z(e,t,n,r,o){var i=[],a=Array.isArray(t)?"array":typeof t;C.required(e,t,r,i,o,a),n(i)}function G(e,t,n,r,o){var i=e.type,a=[],s=e.required||!e.required&&r.hasOwnProperty(e.field);if(s){if(v(t,i)&&!e.required)return n();C.required(e,t,r,a,o,i),v(t,i)||C.type(e,t,r,a,o)}n(a)}function Y(e,t,n,r,o){var i=[],a=e.required||!e.required&&r.hasOwnProperty(e.field);if(a){if(v(t)&&!e.required)return n();C.required(e,t,r,i,o)}n(i)}var W={string:N,method:I,number:U,boolean:q,regexp:$,integer:R,float:L,array:M,object:F,enum:H,pattern:V,date:K,url:G,hex:G,email:G,required:z,any:Y};function J(){return{default:"Validation error on field %s",required:"%s is required",enum:"%s must be one of %s",whitespace:"%s cannot be empty",date:{format:"%s date %s is invalid for format %s",parse:"%s date could not be parsed, %s is invalid ",invalid:"%s date %s is invalid"},types:{string:"%s is not a %s",method:"%s is not a %s (function)",array:"%s is not an %s",object:"%s is not an %s",number:"%s is not a %s",date:"%s is not a %s",boolean:"%s is not a %s",integer:"%s is not an %s",float:"%s is not a %s",regexp:"%s is not a valid %s",email:"%s is not a valid %s",url:"%s is not a valid %s",hex:"%s is not a valid %s"},string:{len:"%s must be exactly %s characters",min:"%s must be at least %s characters",max:"%s cannot be longer than %s characters",range:"%s must be between %s and %s characters"},number:{len:"%s must equal %s",min:"%s cannot be less than %s",max:"%s cannot be greater than %s",range:"%s must be between %s and %s"},array:{len:"%s must be exactly %s in length",min:"%s cannot be less than %s in length",max:"%s cannot be greater than %s in length",range:"%s must be between %s and %s in length"},pattern:{mismatch:"%s value %s does not match pattern %s"},clone:function(){var e=JSON.parse(JSON.stringify(this));return e.clone=this.clone,e}}}var X=J();function Q(e){this.rules=null,this._messages=X,this.define(e)}Q.prototype={messages:function(e){return e&&(this._messages=k(J(),e)),this._messages},define:function(e){if(!e)throw new Error("Cannot configure a schema with no rules");if("object"!==typeof e||Array.isArray(e))throw new Error("Rules must be an object");var t,n;for(t in this.rules={},e)e.hasOwnProperty(t)&&(n=e[t],this.rules[t]=Array.isArray(n)?n:[n])},validate:function(e,t,r){var o=this;void 0===t&&(t={}),void 0===r&&(r=function(){});var i,a,s=e,u=t,c=r;if("function"===typeof u&&(c=u,u={}),!this.rules||0===Object.keys(this.rules).length)return c&&c(),Promise.resolve();function l(e){var t,n=[],r={};function o(e){var t;Array.isArray(e)?n=(t=n).concat.apply(t,e):n.push(e)}for(t=0;t=e.length?{done:!0}:{done:!1,value:e[r++]}},e:function(e){throw e},f:o}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var i,a=!0,s=!1;return{s:function(){n=e[Symbol.iterator]()},n:function(){var e=n.next();return a=e.done,e},e:function(e){s=!0,i=e},f:function(){try{a||null==n.return||n.return()}finally{if(s)throw i}}}}function c(e,t){if(e){if("string"===typeof e)return l(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?l(e,t):void 0}}function l(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);nr)return setTimeout((function(){e.showToast({title:"图片过大,请重新上传",icon:"none"})}),500),!1}}catch(a){o.e(a)}finally{o.f()}}return t.header["token"]=e.getStorageSync("token"),t},p.requestEnd=function(t){t.load&&(h-=1,h<=0&&e.hideLoading())};p.dataFactory=function(){var t=s(r.default.mark((function t(n){var o;return r.default.wrap((function(t){while(1)switch(t.prev=t.next){case 0:if(!n.response.statusCode||200!=n.response.statusCode){t.next=20;break}if(o=n.response.data,"string"==typeof o&&(o=JSON.parse(o)),1e4!=o.code){t.next=7;break}return t.abrupt("return",Promise.resolve(o));case 7:if("401"!=o.code&&401!=o.code&&1100!=o.code){t.next=16;break}return e.removeStorageSync("token"),e.removeStorageSync("account"),e.removeStorageSync("headPortaritUrl"),console.log("在判断401,115行处抛出错误"),e.showModal({title:"登录过期",content:"请重新进行登录",confirmText:"去登录",cancelText:"取消",success:function(t){t.confirm&&e.switchTab({url:"/pages/user/user"})}}),t.abrupt("return",Promise.reject({statusCode:0,errMsg:"【request】"+o.message}));case 16:return n.isPrompt&&e.showToast({title:o.message,icon:"none",duration:3e3}),t.abrupt("return",Promise.reject({statusCode:0,errMsg:"【request】"+o.message,data:n.response.data}));case 18:t.next=22;break;case 20:return console.log("154行抛出"),t.abrupt("return",Promise.reject({statusCode:n.response.statusCode,errMsg:"【request】数据工厂验证不通过",data:n.response.data}));case 22:case"end":return t.stop()}}),t)})));return function(e){return t.apply(this,arguments)}}(),p.requestError=function(t){if(0===t.statusCode)throw t;e.showToast({title:"网络错误,请检查一下网络",icon:"none"})};var d=p;t.default=d}).call(this,n("543d")["default"])},bace:function(e,t,n){"use strict";(function(e){Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var r=o(n("b38e"));function o(e){return e&&e.__esModule?e:{default:e}}function i(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var a={validate:function(e,t,n,r){var o={showMessage:!0};r=Object.assign({},o,r||{});var i=null;if("function"!==typeof n&&(i=new Promise((function(e,t){n=function(n){n?e(n):t(n)}}))),!t||Array.isArray(t)&&0===t.length||"object"===typeof t&&0===Object.keys(t).length)return n(!0,null),i||void 0;var s=[],u=Object.keys(t),c=0;for(var l in u){var f=u[l],p=a.getValueByProp(e,f);a.validateItem(t,f,p,(function(e){e&&e.length>0&&(s=s.concat(e)),c++,c===u.length&&(s.length>0?(r.showMessage&&a.showToast(s[0].message),n(!1,s)):n(!0,null))}))}return i||void 0},validateField:function(e,t,n,r,o){var i={showMessage:!0};o=Object.assign({},i,o||{});var s=null;if("function"!==typeof r&&(s=new Promise((function(e,t){r=function(n){n?e(n):t(n)}}))),n=[].concat(n),0!==n.length){var u=[],c=0;for(var l in n){var f=n[l],p=a.getValueByProp(e,f);a.validateItem(t,f,p,(function(e){e&&e.length>0&&(u=u.concat(e)),c++,c===n.length&&(u.length>0?(o.showMessage&&a.showToast(u[0].message),r(!1,u)):r(!0,null))}))}return s||void 0}},validateItem:function(e,t,n,o){if(!e||"{}"===JSON.stringify(e))return o instanceof Function&&o(),!0;var a=[].concat(e[t]||[]);a.forEach((function(e){e.pattern&&(e.pattern=new RegExp(e.pattern))}));var s=i({},t,a),u=new r.default(s),c=i({},t,n);u.validate(c,{firstFields:!0},(function(e){o(e)}))},getValueByProp:function(e,t){var n=e;t=t.replace(/\[(\w+)\]/g,".$1").replace(/^\./,"");for(var r=t.split("."),o=0,i=r.length;o=0,i=o&&r.regeneratorRuntime;if(r.regeneratorRuntime=void 0,e.exports=n("96cf"),o)r.regeneratorRuntime=i;else try{delete r.regeneratorRuntime}catch(a){r.regeneratorRuntime=void 0}},c383:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var r={data:function(){return{mescroll:null}},onPullDownRefresh:function(){this.mescroll&&this.mescroll.onPullDownRefresh()},onPageScroll:function(e){this.mescroll&&this.mescroll.onPageScroll(e)},onReachBottom:function(){this.mescroll&&this.mescroll.onReachBottom()},methods:{mescrollInit:function(e){this.mescroll=e,this.mescrollInitByRef()},mescrollInitByRef:function(){if(!this.mescroll||!this.mescroll.resetUpScroll){var e=this.$refs.mescrollRef;e&&(this.mescroll=e.mescroll)}},downCallback:function(){var e=this;this.mescroll.optUp.use?this.mescroll.resetUpScroll():setTimeout((function(){e.mescroll.endSuccess()}),500)},upCallback:function(){var e=this;setTimeout((function(){e.mescroll.endErr()}),500)}},mounted:function(){this.mescrollInitByRef()}},o=r;t.default=o},c8ba:function(e,t){var n;n=function(){return this}();try{n=n||new Function("return this")()}catch(r){"object"===typeof window&&(n=window)}e.exports=n},df7c:function(e,t,n){(function(e){function n(e,t){for(var n=0,r=e.length-1;r>=0;r--){var o=e[r];"."===o?e.splice(r,1):".."===o?(e.splice(r,1),n++):n&&(e.splice(r,1),n--)}if(t)for(;n--;n)e.unshift("..");return e}function r(e){"string"!==typeof e&&(e+="");var t,n=0,r=-1,o=!0;for(t=e.length-1;t>=0;--t)if(47===e.charCodeAt(t)){if(!o){n=t+1;break}}else-1===r&&(o=!1,r=t+1);return-1===r?"":e.slice(n,r)}function o(e,t){if(e.filter)return e.filter(t);for(var n=[],r=0;r=-1&&!r;i--){var a=i>=0?arguments[i]:e.cwd();if("string"!==typeof a)throw new TypeError("Arguments to path.resolve must be strings");a&&(t=a+"/"+t,r="/"===a.charAt(0))}return t=n(o(t.split("/"),(function(e){return!!e})),!r).join("/"),(r?"/":"")+t||"."},t.normalize=function(e){var r=t.isAbsolute(e),a="/"===i(e,-1);return e=n(o(e.split("/"),(function(e){return!!e})),!r).join("/"),e||r||(e="."),e&&a&&(e+="/"),(r?"/":"")+e},t.isAbsolute=function(e){return"/"===e.charAt(0)},t.join=function(){var e=Array.prototype.slice.call(arguments,0);return t.normalize(o(e,(function(e,t){if("string"!==typeof e)throw new TypeError("Arguments to path.join must be strings");return e})).join("/"))},t.relative=function(e,n){function r(e){for(var t=0;t=0;n--)if(""!==e[n])break;return t>n?[]:e.slice(t,n-t+1)}e=t.resolve(e).substr(1),n=t.resolve(n).substr(1);for(var o=r(e.split("/")),i=r(n.split("/")),a=Math.min(o.length,i.length),s=a,u=0;u=1;--i)if(t=e.charCodeAt(i),47===t){if(!o){r=i;break}}else o=!1;return-1===r?n?"/":".":n&&1===r?"/":e.slice(0,r)},t.basename=function(e,t){var n=r(e);return t&&n.substr(-1*t.length)===t&&(n=n.substr(0,n.length-t.length)),n},t.extname=function(e){"string"!==typeof e&&(e+="");for(var t=-1,n=0,r=-1,o=!0,i=0,a=e.length-1;a>=0;--a){var s=e.charCodeAt(a);if(47!==s)-1===r&&(o=!1,r=a+1),46===s?-1===t?t=a:1!==i&&(i=1):-1!==t&&(i=-1);else if(!o){n=a+1;break}}return-1===t||-1===r||0===i||1===i&&t===r-1&&t===n+1?"":e.slice(t,r)};var i="b"==="ab".substr(-1)?function(e,t,n){return e.substr(t,n)}:function(e,t,n){return t<0&&(t=e.length+t),e.substr(t,n)}}).call(this,n("4362"))},f0c5:function(e,t,n){"use strict";function r(e,t,n,r,o,i,a,s,u,c){var l,f="function"===typeof e?e.options:e;if(u){f.components||(f.components={});var p=Object.prototype.hasOwnProperty;for(var h in u)p.call(u,h)&&!p.call(f.components,h)&&(f.components[h]=u[h])}if(c&&((c.beforeCreate||(c.beforeCreate=[])).unshift((function(){this[c.__module]=this})),(f.mixins||(f.mixins=[])).push(c)),t&&(f.render=t,f.staticRenderFns=n,f._compiled=!0),r&&(f.functional=!0),i&&(f._scopeId="data-v-"+i),a?(l=function(e){e=e||this.$vnode&&this.$vnode.ssrContext||this.parent&&this.parent.$vnode&&this.parent.$vnode.ssrContext,e||"undefined"===typeof __VUE_SSR_CONTEXT__||(e=__VUE_SSR_CONTEXT__),o&&o.call(this,e),e&&e._registeredComponents&&e._registeredComponents.add(a)},f._ssrRegister=l):o&&(l=s?function(){o.call(this,this.$root.$options.shadowRoot)}:o),l)if(f.functional){f._injectStyles=l;var d=f.render;f.render=function(e,t){return l.call(t),d(e,t)}}else{var v=f.beforeCreate;f.beforeCreate=v?[].concat(v,l):[l]}return{exports:e,options:f}}n.d(t,"a",(function(){return r}))},f1e1:function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var r=o(n("a34a"));function o(e){return e&&e.__esModule?e:{default:e}}function i(e,t){if("function"!==typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),t&&a(e,t)}function a(e,t){return a=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e},a(e,t)}function s(e){var t=l();return function(){var n,r=f(e);if(t){var o=f(this).constructor;n=Reflect.construct(r,arguments,o)}else n=r.apply(this,arguments);return u(this,n)}}function u(e,t){return!t||"object"!==typeof t&&"function"!==typeof t?c(e):t}function c(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}function l(){if("undefined"===typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"===typeof Proxy)return!0;try{return Date.prototype.toString.call(Reflect.construct(Date,[],(function(){}))),!0}catch(e){return!1}}function f(e){return f=Object.setPrototypeOf?Object.getPrototypeOf:function(e){return e.__proto__||Object.getPrototypeOf(e)},f(e)}function p(e,t,n,r,o,i,a){try{var s=e[i](a),u=s.value}catch(c){return void n(c)}s.done?t(u):Promise.resolve(u).then(r,o)}function h(e){return function(){var t=this,n=arguments;return new Promise((function(r,o){var i=e.apply(t,n);function a(e){p(i,r,o,a,s,"next",e)}function s(e){p(i,r,o,a,s,"throw",e)}a(void 0)}))}}function d(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function v(e,t){for(var n=0;n16)&&this.date(e)},email:function(e){return"string"===typeof e&&!!e.match(y.email)&&e.length<255},url:function(e){return"string"===typeof e&&!!e.match(y.url)},pattern:function(e,t){try{return new RegExp(e).test(t)}catch(n){return!1}},method:function(e){return"function"===typeof e}},k=function(){function e(t){d(this,e),this._message=t}return g(e,[{key:"validateRule",value:function(){var e=h(r.default.mark((function e(t,n,o,i){var a,s,u,c,l,f,p,h,d;return r.default.wrap((function(e){while(1)switch(e.prev=e.next){case 0:if(a=null,s=t.rules,u=s.findIndex((function(e){return e.required})),!(u<0)){e.next=8;break}if(null!==n&&void 0!==n){e.next=6;break}return e.abrupt("return",a);case 6:if("string"!==typeof n||n.length){e.next=8;break}return e.abrupt("return",a);case 8:if(c=this._message,void 0!==s){e.next=11;break}return e.abrupt("return",c["default"]);case 11:l=0;case 12:if(!(l-1&&(u=!0),u?null:b(e,o||n["enum"])},rangeNumber:function(e,t,n){if(!w.number(t))return b(e,e.errorMessage||n.pattern.mismatch);var r=e.minimum,o=e.maximum,i=e.exclusiveMinimum,a=e.exclusiveMaximum,s=i?t<=r:t=o:t>o;return void 0!==r&&s?b(e,e.errorMessage||n["number"].min):void 0!==o&&u?b(e,e.errorMessage||n["number"].max):void 0!==r&&void 0!==o&&(s||u)?b(e,e.errorMessage||n["number"].range):null},rangeLength:function(e,t,n){if(!w.string(t)&&!w.array(t))return b(e,e.errorMessage||n.pattern.mismatch);var r=e.minLength,o=e.maxLength,i=t.length;return void 0!==r&&io?b(e,e.errorMessage||n["length"].max):void 0!==r&&void 0!==o&&(io)?b(e,e.errorMessage||n["length"].range):null},pattern:function(e,t,n){return w["pattern"](e.pattern,t)?null:b(e,e.errorMessage||n.pattern.mismatch)},format:function(e,t,n){var r=Object.keys(w),o=m[e.format]?m[e.format]:e.format;return r.indexOf(o)>-1&&!w[o](t)?b(e,e.errorMessage||n.types[o]):null}},O=function(e){i(n,e);var t=s(n);function n(e,r){var o;return d(this,n),o=t.call(this,n.message),o._schema=e,o._options=r||null,o}return g(n,[{key:"updateSchema",value:function(e){this._schema=e}},{key:"validate",value:function(){var e=h(r.default.mark((function e(t,n){var o;return r.default.wrap((function(e){while(1)switch(e.prev=e.next){case 0:if(o=this._checkFieldInSchema(t),o){e.next=5;break}return e.next=4,this.invokeValidate(t,!1,n);case 4:o=e.sent;case 5:return e.abrupt("return",o.length?o[0]:null);case 6:case"end":return e.stop()}}),e,this)})));function t(t,n){return e.apply(this,arguments)}return t}()},{key:"validateAll",value:function(){var e=h(r.default.mark((function e(t,n){var o;return r.default.wrap((function(e){while(1)switch(e.prev=e.next){case 0:if(o=this._checkFieldInSchema(t),o){e.next=5;break}return e.next=4,this.invokeValidate(t,!0,n);case 4:o=e.sent;case 5:return e.abrupt("return",o);case 6:case"end":return e.stop()}}),e,this)})));function t(t,n){return e.apply(this,arguments)}return t}()},{key:"validateUpdate",value:function(){var e=h(r.default.mark((function e(t,n){var o;return r.default.wrap((function(e){while(1)switch(e.prev=e.next){case 0:if(o=this._checkFieldInSchema(t),o){e.next=5;break}return e.next=4,this.invokeValidateUpdate(t,!1,n);case 4:o=e.sent;case 5:return e.abrupt("return",o.length?o[0]:null);case 6:case"end":return e.stop()}}),e,this)})));function t(t,n){return e.apply(this,arguments)}return t}()},{key:"invokeValidate",value:function(){var e=h(r.default.mark((function e(t,n,o){var i,a,s,u,c;return r.default.wrap((function(e){while(1)switch(e.prev=e.next){case 0:i=[],a=this._schema,e.t0=r.default.keys(a);case 3:if((e.t1=e.t0()).done){e.next=15;break}return s=e.t1.value,u=a[s],e.next=8,this.validateRule(u,t[s],t,o);case 8:if(c=e.sent,null==c){e.next=13;break}if(i.push({key:s,errorMessage:c}),n){e.next=13;break}return e.abrupt("break",15);case 13:e.next=3;break;case 15:return e.abrupt("return",i);case 16:case"end":return e.stop()}}),e,this)})));function t(t,n,r){return e.apply(this,arguments)}return t}()},{key:"invokeValidateUpdate",value:function(){var e=h(r.default.mark((function e(t,n,o){var i,a,s;return r.default.wrap((function(e){while(1)switch(e.prev=e.next){case 0:i=[],e.t0=r.default.keys(t);case 2:if((e.t1=e.t0()).done){e.next=13;break}return a=e.t1.value,e.next=6,this.validateRule(this._schema[a],t[a],t,o);case 6:if(s=e.sent,null==s){e.next=11;break}if(i.push({key:a,errorMessage:s}),n){e.next=11;break}return e.abrupt("break",13);case 11:e.next=2;break;case 13:return e.abrupt("return",i);case 14:case"end":return e.stop()}}),e,this)})));function t(t,n,r){return e.apply(this,arguments)}return t}()},{key:"_checkFieldInSchema",value:function(e){var t=Object.keys(e),r=Object.keys(this._schema);return new Set(t.concat(r)).size===r.length?"":[{key:"invalid",errorMessage:n.message["defaultInvalid"]}]}}]),n}(k);function x(){return{default:"验证错误",defaultInvalid:"字段超出范围",required:"{label}必填",enum:"{label}超出范围",whitespace:"{label}不能为空",date:{format:"{label}日期{value}格式无效",parse:"{label}日期无法解析,{value}无效",invalid:"{label}日期{value}无效"},types:{string:"{label}类型无效",array:"{label}类型无效",object:"{label}类型无效",number:"{label}类型无效",date:"{label}类型无效",boolean:"{label}类型无效",integer:"{label}类型无效",float:"{label}类型无效",regexp:"{label}无效",email:"{label}类型无效",url:"{label}类型无效"},length:{min:"{label}长度不能少于{minLength}",max:"{label}长度不能超过{maxLength}",range:"{label}必须介于{minLength}和{maxLength}之间"},number:{min:"{label}不能小于{minimum}",max:"{label}不能大于{maximum}",range:"{label}必须介于{minimum}and{maximum}之间"},pattern:{mismatch:"{label}格式不匹配"}}}O.message=new x;var T=O;t.default=T}}]); \ No newline at end of file diff --git a/unpackage/dist/build/mp-weixin/components/ly-tree/components/ly-checkbox.js b/unpackage/dist/build/mp-weixin/components/ly-tree/components/ly-checkbox.js new file mode 100644 index 0000000..3ed0bac --- /dev/null +++ b/unpackage/dist/build/mp-weixin/components/ly-tree/components/ly-checkbox.js @@ -0,0 +1,10 @@ +(global["webpackJsonp"]=global["webpackJsonp"]||[]).push([["components/ly-tree/components/ly-checkbox"],{"021a":function(t,n,e){},"36aa":function(t,n,e){"use strict";e.r(n);var c=e("42a4"),a=e.n(c);for(var r in c)"default"!==r&&function(t){e.d(n,t,(function(){return c[t]}))}(r);n["default"]=a.a},"42a4":function(t,n,e){"use strict";Object.defineProperty(n,"__esModule",{value:!0}),n.default=void 0;var c={data:function(){return{classObj:{}}},props:{type:{type:String,validator:function(t){return"radio"===t||"checkbox"===t}},checked:Boolean,disabled:Boolean,indeterminate:Boolean},created:function(){this.classObj={wrapper:"ly-".concat(this.type),input:"ly-".concat(this.type,"__input"),inner:"ly-".concat(this.type,"__inner")}},methods:{handleClick:function(){this.$emit("check",this.checked)}}};n.default=c},"718e":function(t,n,e){"use strict";e.r(n);var c=e("c8b6"),a=e("36aa");for(var r in a)"default"!==r&&function(t){e.d(n,t,(function(){return a[t]}))}(r);e("c51e");var o,i=e("f0c5"),u=Object(i["a"])(a["default"],c["b"],c["c"],!1,null,null,null,!1,c["a"],o);n["default"]=u.exports},c51e:function(t,n,e){"use strict";var c=e("021a"),a=e.n(c);a.a},c8b6:function(t,n,e){"use strict";var c;e.d(n,"b",(function(){return a})),e.d(n,"c",(function(){return r})),e.d(n,"a",(function(){return c}));var a=function(){var t=this,n=t.$createElement;t._self._c},r=[]}}]); +;(global["webpackJsonp"] = global["webpackJsonp"] || []).push([ + 'components/ly-tree/components/ly-checkbox-create-component', + { + 'components/ly-tree/components/ly-checkbox-create-component':(function(module, exports, __webpack_require__){ + __webpack_require__('543d')['createComponent'](__webpack_require__("718e")) + }) + }, + [['components/ly-tree/components/ly-checkbox-create-component']] +]); diff --git a/unpackage/dist/build/mp-weixin/components/ly-tree/components/ly-checkbox.json b/unpackage/dist/build/mp-weixin/components/ly-tree/components/ly-checkbox.json new file mode 100644 index 0000000..4575d1b --- /dev/null +++ b/unpackage/dist/build/mp-weixin/components/ly-tree/components/ly-checkbox.json @@ -0,0 +1,4 @@ +{ + "usingComponents": {}, + "component": true +} \ No newline at end of file diff --git a/unpackage/dist/build/mp-weixin/components/ly-tree/components/ly-checkbox.wxml b/unpackage/dist/build/mp-weixin/components/ly-tree/components/ly-checkbox.wxml new file mode 100644 index 0000000..d99e7bb --- /dev/null +++ b/unpackage/dist/build/mp-weixin/components/ly-tree/components/ly-checkbox.wxml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/unpackage/dist/build/mp-weixin/components/ly-tree/components/ly-checkbox.wxss b/unpackage/dist/build/mp-weixin/components/ly-tree/components/ly-checkbox.wxss new file mode 100644 index 0000000..da61be5 --- /dev/null +++ b/unpackage/dist/build/mp-weixin/components/ly-tree/components/ly-checkbox.wxss @@ -0,0 +1,16 @@ +.ly-checkbox, +.ly-radio{color:#606266;font-weight:500;font-size:28rpx;cursor:pointer;-webkit-user-select:none;user-select:none;padding-right:16rpx}.ly-checkbox__input, +.ly-radio__input{cursor:pointer;outline:0;line-height:1;vertical-align:middle}.ly-checkbox__input.is-disabled .ly-checkbox__inner, +.ly-radio__input.is-disabled .ly-radio__inner{background-color:#edf2fc;border-color:#dcdfe6;cursor:not-allowed}.ly-checkbox__input.is-disabled .ly-checkbox__inner::after, +.ly-radio__input.is-disabled .ly-radio__inner::after{cursor:not-allowed;border-color:#c0c4cc}.ly-checkbox__input.is-disabled .ly-checkbox__inner+.ly-checkbox__label, +.ly-radio__input.is-disabled .ly-radio__inner+.ly-radio__label{cursor:not-allowed}.ly-checkbox__input.is-disabled.is-checked .ly-checkbox__inner, +.ly-radio__input.is-disabled.is-checked .ly-radio__inner{background-color:#f2f6fc;border-color:#dcdfe6}.ly-checkbox__input.is-disabled.is-checked .ly-checkbox__inner::after, +.ly-radio__input.is-disabled.is-checked .ly-radio__inner::after{border-color:#c0c4cc}.ly-checkbox__input.is-disabled.is-indeterminate .ly-checkbox__inner{background-color:#f2f6fc;border-color:#dcdfe6}.ly-checkbox__input.is-disabled.is-indeterminate .ly-checkbox__inner::before{background-color:#c0c4cc;border-color:#c0c4cc}.ly-checkbox__input.is-checked .ly-checkbox__inner, +.ly-radio__input.is-checked .ly-radio__inner, +.ly-checkbox__input.is-indeterminate .ly-checkbox__inner{background-color:#409eff;border-color:#409eff}.ly-checkbox__input.is-disabled+text.ly-checkbox__label, +.ly-radio__input.is-disabled+text.ly-radio__label{color:#c0c4cc;cursor:not-allowed}.ly-checkbox__input.is-checked .ly-checkbox__inner::after, +.ly-radio__input.is-checked .ly-radio__inner::after{-webkit-transform:rotate(45deg) scaleY(1);transform:rotate(45deg) scaleY(1)}.ly-checkbox__input.is-checked+.ly-checkbox__label, +.ly-radio__input.is-checked+.ly-radio__label{color:#409eff}.ly-checkbox__input.is-focus .ly-checkbox__inner, +.ly-radio__input.is-focus .ly-radio__inner{border-color:#409eff}.ly-checkbox__input.is-indeterminate .ly-checkbox__inner::before{content:"";position:absolute;display:block;background-color:#fff;height:6rpx;-webkit-transform:scale(.5);transform:scale(.5);left:0;right:0;top:10rpx}.ly-checkbox__input.is-indeterminate .ly-checkbox__inner::after{display:none}.ly-checkbox__inner, +.ly-radio__inner{display:inline-block;position:relative;border:2rpx solid #dcdfe6;-webkit-border-radius:4rpx;border-radius:4rpx;-webkit-box-sizing:border-box;box-sizing:border-box;width:28rpx;height:28rpx;background-color:#fff;z-index:1;-webkit-transition:border-color .25s cubic-bezier(.71,-.46,.29,1.46),background-color .25s cubic-bezier(.71,-.46,.29,1.46);transition:border-color .25s cubic-bezier(.71,-.46,.29,1.46),background-color .25s cubic-bezier(.71,-.46,.29,1.46)}.ly-radio__inner{-webkit-border-radius:50%;border-radius:50%;width:34rpx!important;height:34rpx!important}.ly-checkbox__inner::after, +.ly-radio__inner::after{-webkit-box-sizing:content-box;box-sizing:content-box;content:"";border:2rpx solid #fff;border-left:0;border-top:0;height:14rpx;left:10rpx;position:absolute;top:2rpx;-webkit-transform:rotate(45deg) scaleY(0);transform:rotate(45deg) scaleY(0);width:6rpx;-webkit-transition:-webkit-transform .15s ease-in .05s;transition:-webkit-transform .15s ease-in .05s;transition:transform .15s ease-in .05s;transition:transform .15s ease-in .05s,-webkit-transform .15s ease-in .05s;-webkit-transform-origin:center;transform-origin:center}.ly-radio__inner::after{left:12rpx!important;top:6rpx!important} \ No newline at end of file diff --git a/unpackage/dist/build/mp-weixin/components/ly-tree/ly-tree-node.js b/unpackage/dist/build/mp-weixin/components/ly-tree/ly-tree-node.js new file mode 100644 index 0000000..4bc96ba --- /dev/null +++ b/unpackage/dist/build/mp-weixin/components/ly-tree/ly-tree-node.js @@ -0,0 +1,10 @@ +(global["webpackJsonp"]=global["webpackJsonp"]||[]).push([["components/ly-tree/ly-tree-node"],{"09f8":function(e,t,n){"use strict";var d;n.d(t,"b",(function(){return i})),n.d(t,"c",(function(){return o})),n.d(t,"a",(function(){return d}));var i=function(){var e=this,t=e.$createElement,n=(e._self._c,e.node.icon&&e.node.icon.length>0?e.node.icon.indexOf("/"):null),d=!e.renderAfterExpand||e.childNodeRendered?e.__map(e.node.childNodesId,(function(t,n){var d=e.__get_orig(t),i=e.getNodeKey(t);return{$orig:d,m0:i}})):null;e.$mp.data=Object.assign({},{$root:{g0:n,l0:d}})},o=[]},"6ae6":function(e,t,n){"use strict";n.r(t);var d=n("09f8"),i=n("e6ca");for(var o in i)"default"!==o&&function(e){n.d(t,e,(function(){return i[e]}))}(o);n("88ea");var c,h=n("f0c5"),r=Object(h["a"])(i["default"],d["b"],d["c"],!1,null,null,null,!1,d["a"],c);t["default"]=r.exports},7494:function(e,t,n){},"88ea":function(e,t,n){"use strict";var d=n("7494"),i=n.n(d);i.a},"9ef69":function(e,t,n){"use strict";(function(e){Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var d=n("3bb4"),i=function(){n.e("components/ly-tree/components/ly-checkbox").then(function(){return resolve(n("718e"))}.bind(null,n)).catch(n.oe)},o={name:"LyTreeNode",componentName:"LyTreeNode",components:{lyCheckbox:i},props:{nodeId:[Number,String],renderAfterExpand:{type:Boolean,default:!0},checkOnlyLeaf:{type:Boolean,default:!1},showCheckbox:{type:Boolean,default:!1},showRadio:{type:Boolean,default:!1},indent:Number,iconClass:String},data:function(){return{node:{indeterminate:!1,checked:!1,expanded:!1},expanded:!1,childNodeRendered:!1,oldChecked:null,oldIndeterminate:null,highlightCurrent:!1}},inject:["tree"],computed:{checkboxVisible:function(){return this.checkOnlyLeaf?this.showCheckbox&&this.node.isLeaf:this.showCheckbox},radioVisible:function(){return this.checkOnlyLeaf?this.showRadio&&this.node.isLeaf:this.showRadio}},watch:{"node.indeterminate":function(e){this.handleSelectChange(this.node.checked,e)},"node.checked":function(e){this.handleSelectChange(e,this.node.indeterminate)},"node.expanded":function(e){var t=this;this.$nextTick((function(){return t.expanded=e})),e&&(this.childNodeRendered=!0)}},methods:{getNodeKey:function(e){var t=this.tree.store.root.getChildNodes([e])[0];return(0,d.getNodeKey)(this.tree.nodeKey,t.data)},handleSelectChange:function(e,t){if(this.oldChecked!==e&&this.oldIndeterminate!==t){if(this.checkOnlyLeaf&&!this.node.isLeaf)return;if(this.checkboxVisible){var n=this.tree.store._getAllNodes();this.tree.$emit("check-change",{checked:e,indeterminate:t,node:this.node,data:this.node.data,checkedall:n.every((function(e){return e.checked}))})}else this.tree.$emit("radio-change",{checked:e,node:this.node,data:this.node.data,checkedall:!1})}!this.expanded&&this.tree.expandOnCheckNode&&e&&this.handleExpandIconClick(),this.oldChecked=e,this.indeterminate=t},handleClick:function(){this.tree.store.setCurrentNode(this.node),this.tree.$emit("current-change",{node:this.node,data:this.tree.store.currentNode?this.tree.store.currentNode.data:null,currentNode:this.tree.store.currentNode}),this.tree.currentNode=this.node,this.tree.expandOnClickNode&&this.handleExpandIconClick(),this.tree.checkOnClickNode&&!this.node.disabled&&(this.checkboxVisible||this.radioVisible)&&this.handleCheckChange(!this.node.checked),this.tree.$emit("node-click",this.node)},handleExpandIconClick:function(){this.node.isLeaf||(this.expanded?(this.tree.$emit("node-collapse",this.node),this.node.collapse()):(this.node.expand(),this.tree.$emit("node-expand",this.node),this.tree.accordion&&e.$emit("".concat(this.tree.elId,"-tree-node-expand"),this.node)))},handleCheckChange:function(e){var t=this;this.node.disabled||(this.checkboxVisible?this.node.setChecked(e,!(this.tree.checkStrictly||this.checkOnlyLeaf)):this.node.setRadioChecked(e),this.$nextTick((function(){t.tree.$emit("check",{node:t.node,data:t.node.data,checkedNodes:t.tree.store.getCheckedNodes(),checkedKeys:t.tree.store.getCheckedKeys(),halfCheckedNodes:t.tree.store.getHalfCheckedNodes(),halfCheckedKeys:t.tree.store.getHalfCheckedKeys()})})))},handleImageError:function(){this.node.icon=this.tree.defaultNodeIcon}},created:function(){var t=this;if(!this.tree)throw new Error("Can not find node's tree.");this.node=this.tree.store.nodesMap[this.nodeId],this.highlightCurrent=this.tree.highlightCurrent,this.node.expanded&&(this.expanded=!0,this.childNodeRendered=!0);var n=this.tree.props||{},d=n["children"]||"children";this.$watch("node.data.".concat(d),(function(){t.node.updateChildren()})),this.tree.accordion&&e.$on("".concat(this.tree.elId,"-tree-node-expand"),(function(e){t.node.id!==e.id&&t.node.level===e.level&&t.node.collapse()}))},beforeDestroy:function(){this.$parent=null}};t.default=o}).call(this,n("543d")["default"])},e6ca:function(e,t,n){"use strict";n.r(t);var d=n("9ef69"),i=n.n(d);for(var o in d)"default"!==o&&function(e){n.d(t,e,(function(){return d[e]}))}(o);t["default"]=i.a}}]); +;(global["webpackJsonp"] = global["webpackJsonp"] || []).push([ + 'components/ly-tree/ly-tree-node-create-component', + { + 'components/ly-tree/ly-tree-node-create-component':(function(module, exports, __webpack_require__){ + __webpack_require__('543d')['createComponent'](__webpack_require__("6ae6")) + }) + }, + [['components/ly-tree/ly-tree-node-create-component']] +]); diff --git a/unpackage/dist/build/mp-weixin/components/ly-tree/ly-tree-node.json b/unpackage/dist/build/mp-weixin/components/ly-tree/ly-tree-node.json new file mode 100644 index 0000000..ba09459 --- /dev/null +++ b/unpackage/dist/build/mp-weixin/components/ly-tree/ly-tree-node.json @@ -0,0 +1,6 @@ +{ + "component": true, + "usingComponents": { + "ly-checkbox": "/components/ly-tree/components/ly-checkbox" + } +} \ No newline at end of file diff --git a/unpackage/dist/build/mp-weixin/components/ly-tree/ly-tree-node.wxml b/unpackage/dist/build/mp-weixin/components/ly-tree/ly-tree-node.wxml new file mode 100644 index 0000000..218d3b9 --- /dev/null +++ b/unpackage/dist/build/mp-weixin/components/ly-tree/ly-tree-node.wxml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/unpackage/dist/build/mp-weixin/components/ly-tree/ly-tree-node.wxss b/unpackage/dist/build/mp-weixin/components/ly-tree/ly-tree-node.wxss new file mode 100644 index 0000000..fc80e7d --- /dev/null +++ b/unpackage/dist/build/mp-weixin/components/ly-tree/ly-tree-node.wxss @@ -0,0 +1 @@ +.ly-tree-node{white-space:nowrap;outline:0}.ly-tree-node__content{display:-webkit-box;display:-webkit-flex;display:flex;-webkit-box-align:center;-webkit-align-items:center;align-items:center;height:70rpx}.ly-tree-node__content.is-current{background-color:#f5f7fa}.ly-tree-node__content>.ly-tree-node__expand-icon{padding:12rpx}.ly-tree-node__checkbox{display:-webkit-box;display:-webkit-flex;display:flex;margin-right:16rpx;width:40rpx;height:40rpx}.ly-tree-node__checkbox>image{width:40rpx;height:40rpx}.ly-tree-node__expand-icon{color:#c0c4cc;font-size:28rpx;-webkit-transform:rotate(0);transform:rotate(0);-webkit-transition:-webkit-transform .3s ease-in-out;transition:-webkit-transform .3s ease-in-out;transition:transform .3s ease-in-out;transition:transform .3s ease-in-out,-webkit-transform .3s ease-in-out}.ly-tree-node__expand-icon.expanded{-webkit-transform:rotate(90deg);transform:rotate(90deg)}.ly-tree-node__expand-icon.is-leaf{color:transparent}.ly-tree-node__icon{width:34rpx;height:34rpx;overflow:hidden;margin-right:16rpx}.ly-tree-node__label{font-size:28rpx}.ly-tree-node__loading-icon{margin-right:16rpx;font-size:28rpx;color:#c0c4cc;-webkit-animation:rotating 2s linear infinite;animation:rotating 2s linear infinite}.ly-tree-node>.ly-tree-node__children{overflow:hidden;background-color:transparent}.ly-tree-node>.ly-tree-node__children.collapse-transition{-webkit-transition:height .3s ease-in-out;transition:height .3s ease-in-out}.ly-tree-node.is-expanded>.ly-tree-node__children{display:block}.ly-tree-node_collapse{overflow:hidden;padding-top:0;padding-bottom:0}@font-face{font-family:ly-iconfont;src:url("data:application/x-font-woff2;charset=utf-8;base64,d09GMgABAAAAAAPsAAsAAAAACKwAAAOeAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHEIGVgCDBgqFDIQPATYCJAMMCwgABCAFhG0HQBtfB8gekiSCdAwUAKgCFMA5Hj7H0PeTlABUr57PVyGqugqzSWJnNwWoWJjx/9rUr4TPL1ZSQpU2mycqwoRwIN3p+MkqMqyEW+OtMBLPSUBb8v//XtWMKTavxYIUsT/Wy1qbQzkBDOYEKGB7dVpPyVqgCnJNwvMvhZl10nMCtQbFoPVhY8ZDncJfF4grbqpQ13AqE52hWqgcOFrEQ6hWnW5VfMCD7Pfjn4WoI6nI/K0bl0MNGPBz0qcflVqYnvCA4vNDPUXGPFCIw8HgtsqiOK9SrW2smm6sVITElWlpISMdVBn8wyMJopLfXg+myZ48KCrSkvj9g37U1ItbXYke4APwXxK3N4TuehyBfmM0I3zbNdt7uk3VnjPtzX0rnIl7z7bZvb/thHohsu9QuykKo+Cws4nL7LsPmI3n2qN9B9upZEIKd4hu0NCKi0rt7fNtdl+I1N25hOJMDQK6odS123tROR7Pg8toEhDaF+kR0TYjxW6M58F5+ZNQOxmZHtE2g+IYjxjlNy/yIRQpCmrgq5R4/3jx8PvT8Ha8d3/xiLnt4EGyaDnznzRv8vpyZ+9TFHf/ntX9e59A+b6+fPHd5+dy0wYHVvHOroWbnWe879O9DnL53bN/gUHuwm28b/n8i/V3ry4E3IoXNqS6Rvs0LhJxeNVjoUkM3LKosU+0a6rh45FVvLt+2oz7Zd53b4QOy7/9snDXHbqVu+A+f8r7PnM2H8kXrWm5c8/vLu7LqRee7HW637mz3kHc5U/RCXf25d7G8tkdgEfwIpzpkknGpaMw3ww55q9Mn9OQNyua/wB/49OOWydn4eL/6roCfjx6FMmcxfJStYRKfd3UwoHiML4rF4uMSK+SvYTuNxMHrpl8yd3Q6v32cAeo/KFaowBJlQHIqo3zi3geKtRZhErVlqDWnOGn67QRKkWpwaw1AkKza5A0egFZszf8In4HFTp9h0rNUQm1NqP1lXUmgyuDBVUlNYi2gHA98FnokUreOZaac1xV1JlMMZGKEs+QdCLVrgynPhUcO0pzzYyUjDAReGSYeBl13YCEIrCpLhOWlGE+mWRD35TQAw8UawRKJVEGQrMAwekCPpaMlpTOz49FmeZwqcREX1t3Ikoo4dMTaQmpBfzhRn9R30uZXTKXKUOSmLSKEQIeYhjqKZcrcIzhMLLRrJMSrA35UF4yGMaWGhPHm733dwJq+Z/NkSJHUXemCirjgpuWrHMD1eC+mQUAAAA=") format("woff2")}.ly-iconfont{font-family:ly-iconfont!important;font-size:30rpx;font-style:normal;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.ly-icon-caret-right:before{content:"\e8ee"}.ly-icon-loading:before{content:"\e657"}@-webkit-keyframes rotating{0%{-webkit-transform:rotate(0);transform:rotate(0)}100%{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}@keyframes rotating{0%{-webkit-transform:rotate(0);transform:rotate(0)}100%{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}.df{display:-webkit-box;display:-webkit-flex;display:flex;-webkit-box-pack:justify;-webkit-justify-content:space-between;justify-content:space-between} \ No newline at end of file diff --git a/unpackage/dist/build/mp-weixin/components/ly-tree/ly-tree.js b/unpackage/dist/build/mp-weixin/components/ly-tree/ly-tree.js new file mode 100644 index 0000000..c5372f8 --- /dev/null +++ b/unpackage/dist/build/mp-weixin/components/ly-tree/ly-tree.js @@ -0,0 +1,10 @@ +(global["webpackJsonp"]=global["webpackJsonp"]||[]).push([["components/ly-tree/ly-tree"],{"17b1":function(e,t,o){"use strict";(function(e){Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;i(o("66fd"));var n=i(o("2c3e")),r=o("3bb4");function i(e){return e&&e.__esModule?e:{default:e}}var d=function(){o.e("components/ly-tree/ly-tree-node").then(function(){return resolve(o("6ae6"))}.bind(null,o)).catch(o.oe)},s={name:"LyTree",componentName:"LyTree",components:{LyTreeNode:d},data:function(){return{updateKey:(new Date).getTime(),elId:"ly_".concat(Math.ceil(1e6*Math.random()).toString(36)),visible:!0,store:{ready:!1},currentNode:null,childNodesId:[]}},provide:function(){return{tree:this}},props:{treeData:Array,ready:{type:Boolean,default:!0},emptyText:{type:String,default:"暂无数据"},renderAfterExpand:{type:Boolean,default:!0},nodeKey:String,checkStrictly:Boolean,defaultExpandAll:Boolean,toggleExpendAll:Boolean,expandOnClickNode:{type:Boolean,default:!0},expandOnCheckNode:{type:Boolean,default:!0},checkOnClickNode:Boolean,checkDescendants:{type:Boolean,default:!1},autoExpandParent:{type:Boolean,default:!0},defaultCheckedKeys:Array,defaultExpandedKeys:Array,expandCurrentNodeParent:Boolean,currentNodeKey:[String,Number],checkOnlyLeaf:{type:Boolean,default:!1},showCheckbox:{type:Boolean,default:!1},showRadio:{type:Boolean,default:!1},props:{type:[Object,Function],default:function(){return{children:"children",label:"label",disabled:"disabled"}}},lazy:{type:Boolean,default:!1},highlightCurrent:Boolean,load:Function,filterNodeMethod:Function,childVisibleForFilterNode:{type:Boolean,default:!1},accordion:Boolean,indent:{type:Number,default:18},iconClass:String,showNodeIcon:{type:Boolean,default:!1},defaultNodeIcon:{type:String,default:"https://img-cdn-qiniu.dcloud.net.cn/uniapp/doc/github.svg"},isInjectParentInNode:{type:Boolean,default:!1}},computed:{isEmpty:function(){if(this.store.root){var e=this.store.root.getChildNodes(this.childNodesId);return!e||0===e.length||e.every((function(e){var t=e.visible;return!t}))}return!0},showLoading:function(){return!(this.store.ready&&this.ready)}},watch:{toggleExpendAll:function(e){this.store.toggleExpendAll(e)},defaultCheckedKeys:function(e){this.store.setDefaultCheckedKey(e)},defaultExpandedKeys:function(e){this.store.defaultExpandedKeys=e,this.store.setDefaultExpandedKeys(e)},checkStrictly:function(e){this.store.checkStrictly=e||this.checkOnlyLeaf},"store.root.childNodesId":function(e){this.childNodesId=e},"store.root.visible":function(e){this.visible=e},childNodesId:function(){var e=this;this.$nextTick((function(){e.$emit("ly-tree-render-completed")}))},treeData:{handler:function(e){this.updateKey=(new Date).getTime(),this.store.setData(e)},deep:!0}},methods:{filter:function(e,t){if(!this.filterNodeMethod)throw new Error("[Tree] filterNodeMethod is required when filter");this.store.filter(e,t)},getNodeKey:function(e){var t=this.store.root.getChildNodes([e])[0];return(0,r.getNodeKey)(this.nodeKey,t.data)},getNodePath:function(e){return this.store.getNodePath(e)},getCheckedNodes:function(e,t){return this.store.getCheckedNodes(e,t)},getCheckedKeys:function(e,t){return this.store.getCheckedKeys(e,t)},getCurrentNode:function(){var e=this.store.getCurrentNode();return e?e.data:null},getCurrentKey:function(){var e=this.getCurrentNode();return e?e[this.nodeKey]:null},setCheckAll:function(){var e=!(arguments.length>0&&void 0!==arguments[0])||arguments[0];if(this.showRadio)throw new Error('You set the "show-radio" property, so you cannot select all nodes');this.showCheckbox||console.warn('You have not set the property "show-checkbox". Please check your settings'),this.store.setCheckAll(e)},setCheckedNodes:function(e,t){this.store.setCheckedNodes(e,t)},setCheckedKeys:function(e,t){if(!this.nodeKey)throw new Error("[Tree] nodeKey is required in setCheckedKeys");this.store.setCheckedKeys(e,t)},setChecked:function(e,t,o){this.store.setChecked(e,t,o)},getHalfCheckedNodes:function(){return this.store.getHalfCheckedNodes()},getHalfCheckedKeys:function(){return this.store.getHalfCheckedKeys()},setCurrentNode:function(e){if(!this.nodeKey)throw new Error("[Tree] nodeKey is required in setCurrentNode");this.store.setUserCurrentNode(e)},setCurrentKey:function(e){if(!this.nodeKey)throw new Error("[Tree] nodeKey is required in setCurrentKey");this.store.setCurrentNodeKey(e)},getNode:function(e){return this.store.getNode(e)},remove:function(e){this.store.remove(e)},append:function(e,t){this.store.append(e,t)},insertBefore:function(e,t){this.store.insertBefore(e,t)},insertAfter:function(e,t){this.store.insertAfter(e,t)},updateKeyChildren:function(e,t){if(!this.nodeKey)throw new Error("[Tree] nodeKey is required in updateKeyChild");this.store.updateChildren(e,t)}},created:function(){this.isTree=!0;var e=this.props;if("function"===typeof this.props&&(e=this.props()),"object"!==typeof e)throw new Error("props must be of object type.");this.store=new n.default({key:this.nodeKey,data:this.treeData,lazy:this.lazy,props:e,load:this.load,showCheckbox:this.showCheckbox,showRadio:this.showRadio,currentNodeKey:this.currentNodeKey,checkStrictly:this.checkStrictly||this.checkOnlyLeaf,checkDescendants:this.checkDescendants,expandOnCheckNode:this.expandOnCheckNode,defaultCheckedKeys:this.defaultCheckedKeys,defaultExpandedKeys:this.defaultExpandedKeys,expandCurrentNodeParent:this.expandCurrentNodeParent,autoExpandParent:this.autoExpandParent,defaultExpandAll:this.defaultExpandAll,filterNodeMethod:this.filterNodeMethod,childVisibleForFilterNode:this.childVisibleForFilterNode,showNodeIcon:this.showNodeIcon,isInjectParentInNode:this.isInjectParentInNode}),this.childNodesId=this.store.root.childNodesId},beforeDestroy:function(){this.accordion&&e.$off("".concat(this.elId,"-tree-node-expand"))}};t.default=s}).call(this,o("543d")["default"])},"4ea0":function(e,t,o){},a18f:function(e,t,o){"use strict";var n=o("4ea0"),r=o.n(n);r.a},a1aa:function(e,t,o){"use strict";o.r(t);var n=o("c3e0"),r=o("c3d1");for(var i in r)"default"!==i&&function(e){o.d(t,e,(function(){return r[e]}))}(i);o("a18f");var d,s=o("f0c5"),a=Object(s["a"])(r["default"],n["b"],n["c"],!1,null,null,null,!1,n["a"],d);t["default"]=a.exports},c3d1:function(e,t,o){"use strict";o.r(t);var n=o("17b1"),r=o.n(n);for(var i in n)"default"!==i&&function(e){o.d(t,e,(function(){return n[e]}))}(i);t["default"]=r.a},c3e0:function(e,t,o){"use strict";var n;o.d(t,"b",(function(){return r})),o.d(t,"c",(function(){return i})),o.d(t,"a",(function(){return n}));var r=function(){var e=this,t=e.$createElement,o=(e._self._c,e.showLoading?null:e.__map(e.childNodesId,(function(t,o){var n=e.__get_orig(t),r=e.getNodeKey(t);return{$orig:n,m0:r}})));e.$mp.data=Object.assign({},{$root:{l0:o}})},i=[]}}]); +;(global["webpackJsonp"] = global["webpackJsonp"] || []).push([ + 'components/ly-tree/ly-tree-create-component', + { + 'components/ly-tree/ly-tree-create-component':(function(module, exports, __webpack_require__){ + __webpack_require__('543d')['createComponent'](__webpack_require__("a1aa")) + }) + }, + [['components/ly-tree/ly-tree-create-component']] +]); diff --git a/unpackage/dist/build/mp-weixin/components/ly-tree/ly-tree.json b/unpackage/dist/build/mp-weixin/components/ly-tree/ly-tree.json new file mode 100644 index 0000000..3e4a0b7 --- /dev/null +++ b/unpackage/dist/build/mp-weixin/components/ly-tree/ly-tree.json @@ -0,0 +1,6 @@ +{ + "component": true, + "usingComponents": { + "ly-tree-node": "/components/ly-tree/ly-tree-node" + } +} \ No newline at end of file diff --git a/unpackage/dist/build/mp-weixin/components/ly-tree/ly-tree.wxml b/unpackage/dist/build/mp-weixin/components/ly-tree/ly-tree.wxml new file mode 100644 index 0000000..e9c63dd --- /dev/null +++ b/unpackage/dist/build/mp-weixin/components/ly-tree/ly-tree.wxml @@ -0,0 +1 @@ +加载中...{{''+emptyText+''}}我是值 \ No newline at end of file diff --git a/unpackage/dist/build/mp-weixin/components/ly-tree/ly-tree.wxss b/unpackage/dist/build/mp-weixin/components/ly-tree/ly-tree.wxss new file mode 100644 index 0000000..c75f75e --- /dev/null +++ b/unpackage/dist/build/mp-weixin/components/ly-tree/ly-tree.wxss @@ -0,0 +1,8 @@ +.ly-tree{position:relative;cursor:default;background:#fff;color:#606266;padding:30rpx}.ly-tree.is-empty{background:transparent}.ly-empty{width:100%;display:-webkit-box;display:-webkit-flex;display:flex;-webkit-box-pack:center;-webkit-justify-content:center;justify-content:center;margin-top:100rpx}.ly-loader{margin-top:100rpx;display:-webkit-box;display:-webkit-flex;display:flex;-webkit-box-align:center;-webkit-align-items:center;align-items:center;-webkit-box-pack:center;-webkit-justify-content:center;justify-content:center}.ly-loader-inner, +.ly-loader-inner:before, +.ly-loader-inner:after{background:#efefef;-webkit-animation:load 1s infinite ease-in-out;animation:load 1s infinite ease-in-out;width:.5em;height:1em}.ly-loader-inner:before, +.ly-loader-inner:after{position:absolute;top:0;content:""}.ly-loader-inner:before{left:-1em}.ly-loader-inner{text-indent:-9999em;position:relative;font-size:22rpx;-webkit-animation-delay:.16s;animation-delay:.16s}.ly-loader-inner:after{left:1em;-webkit-animation-delay:.32s;animation-delay:.32s}@-webkit-keyframes load{0%, + 80%, + 100%{-webkit-box-shadow:0 0 #efefef;box-shadow:0 0 #efefef;height:1em}40%{-webkit-box-shadow:0 -1.5em #efefef;box-shadow:0 -1.5em #efefef;height:1.5em}}@keyframes load{0%, + 80%, + 100%{-webkit-box-shadow:0 0 #efefef;box-shadow:0 0 #efefef;height:1em}40%{-webkit-box-shadow:0 -1.5em #efefef;box-shadow:0 -1.5em #efefef;height:1.5em}} \ No newline at end of file diff --git a/unpackage/dist/build/mp-weixin/components/me-tabs/me-tabs.js b/unpackage/dist/build/mp-weixin/components/me-tabs/me-tabs.js new file mode 100644 index 0000000..6df36ee --- /dev/null +++ b/unpackage/dist/build/mp-weixin/components/me-tabs/me-tabs.js @@ -0,0 +1,10 @@ +(global["webpackJsonp"]=global["webpackJsonp"]||[]).push([["components/me-tabs/me-tabs"],{"3f09":function(t,e,n){"use strict";var i=n("79e4"),r=n.n(i);r.a},"79e4":function(t,e,n){},"7c5d":function(t,e,n){"use strict";var i;n.d(e,"b",(function(){return r})),n.d(e,"c",(function(){return a})),n.d(e,"a",(function(){return i}));var r=function(){var t=this,e=t.$createElement,n=(t._self._c,t.tabs.length?t.__map(t.tabs,(function(e,n){var i=t.__get_orig(e),r=t.getTabName(e);return{$orig:i,m0:r}})):null);t.$mp.data=Object.assign({},{$root:{l0:n}})},a=[]},aaa4:function(t,e,n){"use strict";n.r(e);var i=n("ba38"),r=n.n(i);for(var a in i)"default"!==a&&function(t){n.d(e,t,(function(){return i[t]}))}(a);e["default"]=r.a},ba38:function(t,e,n){"use strict";(function(t){Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0;var i=r(n("a34a"));function r(t){return t&&t.__esModule?t:{default:t}}function a(t,e,n,i,r,a,u){try{var c=t[a](u),o=c.value}catch(s){return void n(s)}c.done?e(o):Promise.resolve(o).then(i,r)}function u(t){return function(){var e=this,n=arguments;return new Promise((function(i,r){var u=t.apply(e,n);function c(t){a(u,i,r,c,o,"next",t)}function o(t){a(u,i,r,c,o,"throw",t)}c(void 0)}))}}var c={props:{tabs:{type:Array,default:function(){return[]}},nameKey:{type:String,default:"name"},value:{type:[String,Number],default:0},fixed:Boolean,tabWidth:Number,height:{type:Number,default:90}},data:function(){return{viewId:"id_"+Math.random().toString(36).substr(2,16),scrollLeft:0}},computed:{isScroll:function(){return this.tabWidth&&this.tabs.length},tabHeightPx:function(){return t.upx2px(this.height)},tabHeightVal:function(){return this.tabHeightPx+"px"},tabWidthPx:function(){return t.upx2px(this.tabWidth)},tabWidthVal:function(){return this.isScroll?this.tabWidthPx+"px":""},lineLeft:function(){return this.isScroll?this.tabWidthPx*this.value+this.tabWidthPx/2+"px":100/this.tabs.length*(this.value+1)-100/(2*this.tabs.length)+"%"}},watch:{tabs:function(){this.warpWidth=null,this.scrollCenter()},value:function(){this.scrollCenter()}},methods:{getTabName:function(t){return"object"===typeof t?t[this.nameKey]:t},tabClick:function(t){this.value!=t&&(this.$emit("input",t),this.$emit("change",t))},scrollCenter:function(){var e=this;return u(i.default.mark((function n(){var r,a,u;return i.default.wrap((function(n){while(1)switch(n.prev=n.next){case 0:if(e.isScroll){n.next=2;break}return n.abrupt("return");case 2:if(e.warpWidth){n.next=7;break}return n.next=5,e.initWarpRect();case 5:r=n.sent,e.warpWidth=r?r.width:t.getSystemInfoSync().windowWidth;case 7:a=e.tabWidthPx*e.value+e.tabWidthPx/2,u=a-e.warpWidth/2,e.scrollLeft=u;case 10:case"end":return n.stop()}}),n)})))()},initWarpRect:function(){var e=this;return new Promise((function(n){setTimeout((function(){var i=t.createSelectorQuery();i=i.in(e),i.select("#"+e.viewId).boundingClientRect((function(t){n(t)})).exec()}),20)}))}},mounted:function(){this.scrollCenter()}};e.default=c}).call(this,n("543d")["default"])},e5fc:function(t,e,n){"use strict";n.r(e);var i=n("7c5d"),r=n("aaa4");for(var a in r)"default"!==a&&function(t){n.d(e,t,(function(){return r[t]}))}(a);n("3f09");var u,c=n("f0c5"),o=Object(c["a"])(r["default"],i["b"],i["c"],!1,null,null,null,!1,i["a"],u);e["default"]=o.exports}}]); +;(global["webpackJsonp"] = global["webpackJsonp"] || []).push([ + 'components/me-tabs/me-tabs-create-component', + { + 'components/me-tabs/me-tabs-create-component':(function(module, exports, __webpack_require__){ + __webpack_require__('543d')['createComponent'](__webpack_require__("e5fc")) + }) + }, + [['components/me-tabs/me-tabs-create-component']] +]); diff --git a/unpackage/dist/build/mp-weixin/components/me-tabs/me-tabs.json b/unpackage/dist/build/mp-weixin/components/me-tabs/me-tabs.json new file mode 100644 index 0000000..4575d1b --- /dev/null +++ b/unpackage/dist/build/mp-weixin/components/me-tabs/me-tabs.json @@ -0,0 +1,4 @@ +{ + "usingComponents": {}, + "component": true +} \ No newline at end of file diff --git a/unpackage/dist/build/mp-weixin/components/me-tabs/me-tabs.wxml b/unpackage/dist/build/mp-weixin/components/me-tabs/me-tabs.wxml new file mode 100644 index 0000000..65aa0eb --- /dev/null +++ b/unpackage/dist/build/mp-weixin/components/me-tabs/me-tabs.wxml @@ -0,0 +1 @@ +{{''+tab.m0+''}} \ No newline at end of file diff --git a/unpackage/dist/build/mp-weixin/components/me-tabs/me-tabs.wxss b/unpackage/dist/build/mp-weixin/components/me-tabs/me-tabs.wxss new file mode 100644 index 0000000..df9553a --- /dev/null +++ b/unpackage/dist/build/mp-weixin/components/me-tabs/me-tabs.wxss @@ -0,0 +1 @@ +.evan-form-show{padding:0 30rpx;background-color:#fff}.evan-form-show .form-input{font-size:28rpx;color:#333;width:70%;margin-left:30%;-webkit-box-sizing:border-box;box-sizing:border-box;border:2rpx solid #e6e6e6;-webkit-border-radius:40rpx;border-radius:40rpx;height:70rpx;line-height:70rpx;padding:0 40rpx}.evan-form-show .form-input.textarea{height:240rpx;padding:24rpx 0;text-align:left}.evan-form-show .form-input-placeholder{font-size:28rpx;color:#999}.evan-form-show__button{width:100%;height:88rpx;-webkit-border-radius:8rpx;border-radius:8rpx;display:-webkit-box;display:-webkit-flex;display:flex;-webkit-box-align:center;-webkit-align-items:center;align-items:center;-webkit-box-pack:center;-webkit-justify-content:center;justify-content:center;padding:0;font-size:36rpx;color:#fff;margin-top:20rpx;background-color:#2d87d5}.evan-form-show__button::before, .evan-form-show__button::after{border:none}.evan-form-show .customize-form-item__label{font-size:28rpx;color:#333;margin-bottom:16rpx}.evan-form-show .customize-form-item__radio{display:-webkit-box;display:-webkit-flex;display:flex;-webkit-box-align:center;-webkit-align-items:center;align-items:center;margin-bottom:16rpx}.evan-form-show .customize-form-item__radio__text{font-size:28rpx;color:#333}.foot-btn .plain-btn{color:#00b9ff;border-color:#00b9ff}.foot-btn .def-btn{background-color:#00b9ff}.foot-btn .suc-btn{background-color:#67c23a}.foot-btn .cancel-btn{background-color:#ff9784}.foot-btn .ref-btn{background:#ffa56a}.btn-rig{text-align:right}.btn-rig .mar-lr{margin-left:20rpx;margin-right:20rpx}.pad-bt{padding-bottom:40rpx}.good-list{background-color:#fff}.good-list .good-li{display:-webkit-box;display:-webkit-flex;display:flex;-webkit-box-align:center;-webkit-align-items:center;align-items:center;padding:20rpx;border-bottom:1rpx solid #eee}.good-list .good-li .good-img{width:160rpx;height:160rpx;margin-right:20rpx}.good-list .good-li .flex-item{-webkit-box-flex:1;-webkit-flex:1;flex:1}.good-list .good-li .flex-item .good-name{font-size:26rpx;line-height:40rpx;height:80rpx;margin-bottom:20rpx;overflow:hidden}.good-list .good-li .flex-item .good-price{font-size:26rpx;color:red}.good-list .good-li .flex-item .good-sold{font-size:24rpx;margin-left:16rpx;color:grey}.charge{margin:0 50rpx;-webkit-border-radius:20rpx;border-radius:20rpx;padding:0 30rpx;-webkit-box-shadow:0 0 16rpx #ccc;box-shadow:0 0 16rpx #ccc;margin-top:40rpx}.charge .charge-title{padding:16rpx 0;border-bottom:4rpx solid #f2f2f2;color:#000;font-weight:700}.charge .charge-title .charge-status{color:#ccc}.charge .charge-text{padding:16rpx 0;color:#707070}.charge .charge-text view{display:-webkit-box;display:-webkit-flex;display:flex;-webkit-box-pack:justify;-webkit-justify-content:space-between;justify-content:space-between;-webkit-box-align:center;-webkit-align-items:center;align-items:center}.charge .charge-text .time-text{color:#ccc}.charge .charge-text .status-text{font-size:28rpx;padding:8rpx 12rpx;-webkit-border-radius:10rpx;border-radius:10rpx}.good-list{background-color:#fff}.good-list .good-li{display:-webkit-box;display:-webkit-flex;display:flex;-webkit-box-align:center;-webkit-align-items:center;align-items:center;padding:20rpx;border-bottom:1rpx solid #eee}.good-list .good-li .good-img{width:160rpx;height:160rpx;margin-right:20rpx}.good-list .good-li .flex-item{-webkit-box-flex:1;-webkit-flex:1;flex:1}.good-list .good-li .flex-item .good-name{font-size:26rpx;line-height:40rpx;height:80rpx;margin-bottom:20rpx;overflow:hidden}.good-list .good-li .flex-item .good-price{font-size:26rpx;color:red}.good-list .good-li .flex-item .good-sold{font-size:24rpx;margin-left:16rpx;color:grey}.charge{margin:0 50rpx;-webkit-border-radius:20rpx;border-radius:20rpx;padding:0 30rpx;-webkit-box-shadow:0 0 16rpx #ccc;box-shadow:0 0 16rpx #ccc;margin-top:40rpx}.charge .charge-title{padding:16rpx 0;border-bottom:4rpx solid #f2f2f2;color:#000;font-weight:700}.charge .charge-title .charge-status{color:#ccc}.charge .charge-text{padding:16rpx 0;color:#707070}.charge .charge-text .time-text{color:#ccc}.charge .charge-text .status-text{font-size:28rpx;padding:8rpx 12rpx;-webkit-border-radius:10rpx;border-radius:10rpx}.me-tabs{position:relative;font-size:28rpx;color:#707070;-webkit-box-sizing:border-box;box-sizing:border-box;overflow-y:hidden;background-color:#fff}.me-tabs.tabs-fixed{z-index:990;position:fixed;top:0;left:0;width:100%}.me-tabs .tabs-item{position:relative;white-space:nowrap;padding-bottom:30rpx;-webkit-box-sizing:border-box;box-sizing:border-box}.me-tabs .tabs-item .tab-item{position:relative;text-align:center;-webkit-box-sizing:border-box;box-sizing:border-box}.me-tabs .tabs-item .tab-item.active{color:#00b9ff}.me-tabs .tabs-flex{display:-webkit-box;display:-webkit-flex;display:flex}.me-tabs .tabs-flex .tab-item{-webkit-box-flex:1;-webkit-flex:1;flex:1}.me-tabs .tabs-scroll .tab-item{display:inline-block}.me-tabs .tabs-line{z-index:1;position:absolute;bottom:30rpx;width:132rpx;height:8rpx;-webkit-transform:translateX(-50%);transform:translateX(-50%);-webkit-border-radius:4rpx;border-radius:4rpx;-webkit-transition:left .3s;transition:left .3s;background:#00b9ff} \ No newline at end of file diff --git a/unpackage/dist/build/mp-weixin/components/mescroll-uni/components/mescroll-empty.js b/unpackage/dist/build/mp-weixin/components/mescroll-uni/components/mescroll-empty.js new file mode 100644 index 0000000..672b742 --- /dev/null +++ b/unpackage/dist/build/mp-weixin/components/mescroll-uni/components/mescroll-empty.js @@ -0,0 +1,10 @@ +(global["webpackJsonp"]=global["webpackJsonp"]||[]).push([["components/mescroll-uni/components/mescroll-empty"],{"4ea08":function(t,n,e){"use strict";e.r(n);var u=e("ac8a"),o=e.n(u);for(var c in u)"default"!==c&&function(t){e.d(n,t,(function(){return u[t]}))}(c);n["default"]=o.a},"70fc":function(t,n,e){"use strict";var u;e.d(n,"b",(function(){return o})),e.d(n,"c",(function(){return c})),e.d(n,"a",(function(){return u}));var o=function(){var t=this,n=t.$createElement;t._self._c},c=[]},9856:function(t,n,e){"use strict";e.r(n);var u=e("70fc"),o=e("4ea08");for(var c in o)"default"!==c&&function(t){e.d(n,t,(function(){return o[t]}))}(c);e("a82f");var i,r=e("f0c5"),a=Object(r["a"])(o["default"],u["b"],u["c"],!1,null,null,null,!1,u["a"],i);n["default"]=a.exports},a82f:function(t,n,e){"use strict";var u=e("cb04"),o=e.n(u);o.a},ac8a:function(t,n,e){"use strict";Object.defineProperty(n,"__esModule",{value:!0}),n.default=void 0;var u=o(e("a3f9"));function o(t){return t&&t.__esModule?t:{default:t}}var c={props:{option:{type:Object,default:function(){return{}}}},computed:{icon:function(){return null==this.option.icon?u.default.up.empty.icon:this.option.icon},tip:function(){return null==this.option.tip?u.default.up.empty.tip:this.option.tip}},methods:{emptyClick:function(){this.$emit("emptyclick")}}};n.default=c},cb04:function(t,n,e){}}]); +;(global["webpackJsonp"] = global["webpackJsonp"] || []).push([ + 'components/mescroll-uni/components/mescroll-empty-create-component', + { + 'components/mescroll-uni/components/mescroll-empty-create-component':(function(module, exports, __webpack_require__){ + __webpack_require__('543d')['createComponent'](__webpack_require__("9856")) + }) + }, + [['components/mescroll-uni/components/mescroll-empty-create-component']] +]); diff --git a/unpackage/dist/build/mp-weixin/components/mescroll-uni/components/mescroll-empty.json b/unpackage/dist/build/mp-weixin/components/mescroll-uni/components/mescroll-empty.json new file mode 100644 index 0000000..4575d1b --- /dev/null +++ b/unpackage/dist/build/mp-weixin/components/mescroll-uni/components/mescroll-empty.json @@ -0,0 +1,4 @@ +{ + "usingComponents": {}, + "component": true +} \ No newline at end of file diff --git a/unpackage/dist/build/mp-weixin/components/mescroll-uni/components/mescroll-empty.wxml b/unpackage/dist/build/mp-weixin/components/mescroll-uni/components/mescroll-empty.wxml new file mode 100644 index 0000000..198ef47 --- /dev/null +++ b/unpackage/dist/build/mp-weixin/components/mescroll-uni/components/mescroll-empty.wxml @@ -0,0 +1 @@ +{{tip}}{{option.btnText}} \ No newline at end of file diff --git a/unpackage/dist/build/mp-weixin/components/mescroll-uni/components/mescroll-empty.wxss b/unpackage/dist/build/mp-weixin/components/mescroll-uni/components/mescroll-empty.wxss new file mode 100644 index 0000000..1d185ad --- /dev/null +++ b/unpackage/dist/build/mp-weixin/components/mescroll-uni/components/mescroll-empty.wxss @@ -0,0 +1 @@ +.mescroll-empty{-webkit-box-sizing:border-box;box-sizing:border-box;width:100%;padding:100rpx 50rpx;text-align:center}.mescroll-empty.empty-fixed{z-index:99;position:absolute;top:100rpx;left:0}.mescroll-empty .empty-icon{width:280rpx;height:280rpx}.mescroll-empty .empty-tip{margin-top:20rpx;font-size:24rpx;color:grey}.mescroll-empty .empty-btn{display:inline-block;margin-top:40rpx;min-width:200rpx;padding:18rpx;font-size:28rpx;border:1rpx solid #e04b28;-webkit-border-radius:60rpx;border-radius:60rpx;color:#e04b28}.mescroll-empty .empty-btn:active{opacity:.75} \ No newline at end of file diff --git a/unpackage/dist/build/mp-weixin/components/mescroll-uni/components/mescroll-top.js b/unpackage/dist/build/mp-weixin/components/mescroll-uni/components/mescroll-top.js new file mode 100644 index 0000000..b3365b0 --- /dev/null +++ b/unpackage/dist/build/mp-weixin/components/mescroll-uni/components/mescroll-top.js @@ -0,0 +1,10 @@ +(global["webpackJsonp"]=global["webpackJsonp"]||[]).push([["components/mescroll-uni/components/mescroll-top"],{"08c7":function(t,n,i){"use strict";var o=i("8e63"),e=i.n(o);e.a},"2db4":function(t,n,i){"use strict";var o;i.d(n,"b",(function(){return e})),i.d(n,"c",(function(){return u})),i.d(n,"a",(function(){return o}));var e=function(){var t=this,n=t.$createElement,i=(t._self._c,t.mOption.src?t.addUnit(t.mOption.bottom):null),o=t.mOption.src?t.addUnit(t.mOption.width):null,e=t.mOption.src?t.addUnit(t.mOption.radius):null;t.$mp.data=Object.assign({},{$root:{m0:i,m1:o,m2:e}})},u=[]},"33a2":function(t,n,i){"use strict";i.r(n);var o=i("a53e"),e=i.n(o);for(var u in o)"default"!==u&&function(t){i.d(n,t,(function(){return o[t]}))}(u);n["default"]=e.a},"67f3":function(t,n,i){"use strict";i.r(n);var o=i("2db4"),e=i("33a2");for(var u in e)"default"!==u&&function(t){i.d(n,t,(function(){return e[t]}))}(u);i("08c7");var r,c=i("f0c5"),a=Object(c["a"])(e["default"],o["b"],o["c"],!1,null,null,null,!1,o["a"],r);n["default"]=a.exports},"8e63":function(t,n,i){},a53e:function(t,n,i){"use strict";Object.defineProperty(n,"__esModule",{value:!0}),n.default=void 0;var o={props:{option:Object,value:!1},computed:{mOption:function(){return this.option||{}},left:function(){return this.mOption.left?this.addUnit(this.mOption.left):"auto"},right:function(){return this.mOption.left?"auto":this.addUnit(this.mOption.right)}},methods:{addUnit:function(t){return t?"number"===typeof t?t+"rpx":t:0},toTopClick:function(){this.$emit("input",!1),this.$emit("click")}}};n.default=o}}]); +;(global["webpackJsonp"] = global["webpackJsonp"] || []).push([ + 'components/mescroll-uni/components/mescroll-top-create-component', + { + 'components/mescroll-uni/components/mescroll-top-create-component':(function(module, exports, __webpack_require__){ + __webpack_require__('543d')['createComponent'](__webpack_require__("67f3")) + }) + }, + [['components/mescroll-uni/components/mescroll-top-create-component']] +]); diff --git a/unpackage/dist/build/mp-weixin/components/mescroll-uni/components/mescroll-top.json b/unpackage/dist/build/mp-weixin/components/mescroll-uni/components/mescroll-top.json new file mode 100644 index 0000000..4575d1b --- /dev/null +++ b/unpackage/dist/build/mp-weixin/components/mescroll-uni/components/mescroll-top.json @@ -0,0 +1,4 @@ +{ + "usingComponents": {}, + "component": true +} \ No newline at end of file diff --git a/unpackage/dist/build/mp-weixin/components/mescroll-uni/components/mescroll-top.wxml b/unpackage/dist/build/mp-weixin/components/mescroll-uni/components/mescroll-top.wxml new file mode 100644 index 0000000..831927d --- /dev/null +++ b/unpackage/dist/build/mp-weixin/components/mescroll-uni/components/mescroll-top.wxml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/unpackage/dist/build/mp-weixin/components/mescroll-uni/components/mescroll-top.wxss b/unpackage/dist/build/mp-weixin/components/mescroll-uni/components/mescroll-top.wxss new file mode 100644 index 0000000..7a33beb --- /dev/null +++ b/unpackage/dist/build/mp-weixin/components/mescroll-uni/components/mescroll-top.wxss @@ -0,0 +1 @@ +.mescroll-totop{z-index:9990;position:fixed!important;right:20rpx;bottom:120rpx;width:72rpx;height:auto;-webkit-border-radius:50%;border-radius:50%;opacity:0;-webkit-transition:opacity .5s;transition:opacity .5s;margin-bottom:0}@supports (bottom:constant(safe-area-inset-bottom)) or (bottom:env(safe-area-inset-bottom)){.mescroll-totop-safearea{margin-bottom:-webkit-calc(0 + constant(safe-area-inset-bottom));margin-bottom:calc(0px + constant(safe-area-inset-bottom));margin-bottom:-webkit-calc(0 + env(safe-area-inset-bottom));margin-bottom:calc(0px + env(safe-area-inset-bottom))}}.mescroll-totop-in{opacity:1}.mescroll-totop-out{opacity:0;pointer-events:none} \ No newline at end of file diff --git a/unpackage/dist/build/mp-weixin/components/mescroll-uni/mescroll-body.js b/unpackage/dist/build/mp-weixin/components/mescroll-uni/mescroll-body.js new file mode 100644 index 0000000..7b1a7c1 --- /dev/null +++ b/unpackage/dist/build/mp-weixin/components/mescroll-uni/mescroll-body.js @@ -0,0 +1,10 @@ +(global["webpackJsonp"]=global["webpackJsonp"]||[]).push([["components/mescroll-uni/mescroll-body"],{"013b":function(t,o,e){"use strict";var n=e("a552"),i=e.n(n);i.a},5563:function(t,o,e){"use strict";e.r(o);var n=e("9e9c"),i=e("6001");for(var r in i)"default"!==r&&function(t){e.d(o,t,(function(){return i[t]}))}(r);e("013b");var s,u=e("f0c5"),c=e("abcb"),l=Object(u["a"])(i["default"],n["b"],n["c"],!1,null,null,null,!1,n["a"],s);"function"===typeof c["a"]&&Object(c["a"])(l),o["default"]=l.exports},6001:function(t,o,e){"use strict";e.r(o);var n=e("8852"),i=e.n(n);for(var r in n)"default"!==r&&function(t){e.d(o,t,(function(){return n[t]}))}(r);o["default"]=i.a},8852:function(t,o,e){"use strict";(function(t){Object.defineProperty(o,"__esModule",{value:!0}),o.default=void 0;var n=s(e("4aab")),i=s(e("a3f9")),r=s(e("00e8"));function s(t){return t&&t.__esModule?t:{default:t}}var u=function(){e.e("components/mescroll-uni/components/mescroll-empty").then(function(){return resolve(e("9856"))}.bind(null,e)).catch(e.oe)},c=function(){e.e("components/mescroll-uni/components/mescroll-top").then(function(){return resolve(e("67f3"))}.bind(null,e)).catch(e.oe)},l={mixins:[r.default],components:{MescrollEmpty:u,MescrollTop:c},data:function(){return{mescroll:{optDown:{},optUp:{}},downHight:0,downRate:0,downLoadType:0,upLoadType:0,isShowEmpty:!1,isShowToTop:!1,windowHeight:0,windowBottom:0,statusBarHeight:0}},props:{down:Object,up:Object,top:[String,Number],topbar:[Boolean,String],bottom:[String,Number],safearea:Boolean,height:[String,Number],bottombar:{type:Boolean,default:!0},sticky:Boolean},computed:{minHeight:function(){return this.toPx(this.height||"100%")+"px"},numTop:function(){return this.toPx(this.top)},padTop:function(){return this.numTop+"px"},numBottom:function(){return this.toPx(this.bottom)},padBottom:function(){return this.numBottom+"px"},isDownReset:function(){return 3===this.downLoadType||4===this.downLoadType},transition:function(){return this.isDownReset?"transform 300ms":""},translateY:function(){return this.downHight>0?"translateY("+this.downHight+"px)":""},isDownLoading:function(){return 3===this.downLoadType},downRotate:function(){return"rotate("+360*this.downRate+"deg)"},downText:function(){if(!this.mescroll)return"";switch(this.downLoadType){case 1:return this.mescroll.optDown.textInOffset;case 2:return this.mescroll.optDown.textOutOffset;case 3:return this.mescroll.optDown.textLoading;case 4:return this.mescroll.isDownEndSuccess?this.mescroll.optDown.textSuccess:0==this.mescroll.isDownEndSuccess?this.mescroll.optDown.textErr:this.mescroll.optDown.textInOffset;default:return this.mescroll.optDown.textInOffset}}},methods:{toPx:function(o){if("string"===typeof o)if(-1!==o.indexOf("px"))if(-1!==o.indexOf("rpx"))o=o.replace("rpx","");else{if(-1===o.indexOf("upx"))return Number(o.replace("px",""));o=o.replace("upx","")}else if(-1!==o.indexOf("%")){var e=Number(o.replace("%",""))/100;return this.windowHeight*e}return o?t.upx2px(Number(o)):0},emptyClick:function(){this.$emit("emptyclick",this.mescroll)},toTopClick:function(){this.mescroll.scrollTo(0,this.mescroll.optUp.toTop.duration),this.$emit("topclick",this.mescroll)}},created:function(){var o=this,e={down:{inOffset:function(){o.downLoadType=1},outOffset:function(){o.downLoadType=2},onMoving:function(t,e,n){o.downHight=n,o.downRate=e},showLoading:function(t,e){o.downLoadType=3,o.downHight=e},beforeEndDownScroll:function(t){return o.downLoadType=4,t.optDown.beforeEndDelay},endDownScroll:function(){o.downLoadType=4,o.downHight=0,o.downResetTimer&&(clearTimeout(o.downResetTimer),o.downResetTimer=null),o.downResetTimer=setTimeout((function(){4===o.downLoadType&&(o.downLoadType=0)}),300)},callback:function(t){o.$emit("down",t)}},up:{showLoading:function(){o.upLoadType=1},showNoMore:function(){o.upLoadType=2},hideUpScroll:function(t){o.upLoadType=t.optUp.hasNext?0:3},empty:{onShow:function(t){o.isShowEmpty=t}},toTop:{onShow:function(t){o.isShowToTop=t}},callback:function(t){o.$emit("up",t)}}};n.default.extend(e,i.default);var r=JSON.parse(JSON.stringify({down:o.down,up:o.up}));n.default.extend(r,e),o.mescroll=new n.default(r,!0),o.$emit("init",o.mescroll);var s=t.getSystemInfoSync();s.windowHeight&&(o.windowHeight=s.windowHeight),s.windowBottom&&(o.windowBottom=s.windowBottom),s.statusBarHeight&&(o.statusBarHeight=s.statusBarHeight),o.mescroll.setBodyHeight(s.windowHeight),o.mescroll.resetScrollTo((function(e,n){"string"===typeof e?setTimeout((function(){var i;i=-1==e.indexOf("#")&&-1==e.indexOf(".")?"#"+e:e,t.createSelectorQuery().select(i).boundingClientRect((function(e){if(e){var r=e.top;r+=o.mescroll.getScrollTop(),t.pageScrollTo({scrollTop:r,duration:n})}else console.error(i+" does not exist")})).exec()}),30):t.pageScrollTo({scrollTop:e,duration:n})})),o.up&&o.up.toTop&&null!=o.up.toTop.safearea||(o.mescroll.optUp.toTop.safearea=o.safearea)}};o.default=l}).call(this,e("543d")["default"])},"9e9c":function(t,o,e){"use strict";var n;e.d(o,"b",(function(){return i})),e.d(o,"c",(function(){return r})),e.d(o,"a",(function(){return n}));var i=function(){var t=this,o=t.$createElement;t._self._c},r=[]},a552:function(t,o,e){},abcb:function(t,o,e){"use strict";var n=function(t){t.options.wxsCallMethods||(t.options.wxsCallMethods=[]),t.options.wxsCallMethods.push("wxsCall")};o["a"]=n}}]); +;(global["webpackJsonp"] = global["webpackJsonp"] || []).push([ + 'components/mescroll-uni/mescroll-body-create-component', + { + 'components/mescroll-uni/mescroll-body-create-component':(function(module, exports, __webpack_require__){ + __webpack_require__('543d')['createComponent'](__webpack_require__("5563")) + }) + }, + [['components/mescroll-uni/mescroll-body-create-component']] +]); diff --git a/unpackage/dist/build/mp-weixin/components/mescroll-uni/mescroll-body.json b/unpackage/dist/build/mp-weixin/components/mescroll-uni/mescroll-body.json new file mode 100644 index 0000000..11e6401 --- /dev/null +++ b/unpackage/dist/build/mp-weixin/components/mescroll-uni/mescroll-body.json @@ -0,0 +1,7 @@ +{ + "component": true, + "usingComponents": { + "mescroll-empty": "/components/mescroll-uni/components/mescroll-empty", + "mescroll-top": "/components/mescroll-uni/components/mescroll-top" + } +} \ No newline at end of file diff --git a/unpackage/dist/build/mp-weixin/components/mescroll-uni/mescroll-body.wxml b/unpackage/dist/build/mp-weixin/components/mescroll-uni/mescroll-body.wxml new file mode 100644 index 0000000..507c901 --- /dev/null +++ b/unpackage/dist/build/mp-weixin/components/mescroll-uni/mescroll-body.wxml @@ -0,0 +1,2 @@ + +{{downText}}{{mescroll.optUp.textNoMore}} \ No newline at end of file diff --git a/unpackage/dist/build/mp-weixin/components/mescroll-uni/mescroll-body.wxss b/unpackage/dist/build/mp-weixin/components/mescroll-uni/mescroll-body.wxss new file mode 100644 index 0000000..1d9523e --- /dev/null +++ b/unpackage/dist/build/mp-weixin/components/mescroll-uni/mescroll-body.wxss @@ -0,0 +1,2 @@ +.mescroll-body{position:relative;height:auto;overflow:hidden;-webkit-box-sizing:border-box;box-sizing:border-box}.mescroll-body.mescorll-sticky{overflow:unset!important}@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)}}.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}.mescroll-downwarp .downwarp-progress{display:inline-block;width:32rpx;height:32rpx;-webkit-border-radius:50%;border-radius:50%;border:2rpx solid grey;border-bottom-color:transparent!important;vertical-align:middle}.mescroll-downwarp .mescroll-rotate{-webkit-animation:mescrollDownRotate .6s linear infinite;animation:mescrollDownRotate .6s linear infinite}@-webkit-keyframes mescrollDownRotate{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}@keyframes mescrollDownRotate{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}.mescroll-upwarp{-webkit-box-sizing:border-box;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}.mescroll-upwarp .upwarp-tip{margin-left:16rpx}.mescroll-upwarp .upwarp-progress{display:inline-block;width:32rpx;height:32rpx;-webkit-border-radius:50%;border-radius:50%;border:2rpx solid grey;border-bottom-color:transparent!important;vertical-align:middle}.mescroll-upwarp .mescroll-rotate{-webkit-animation:mescrollUpRotate .6s linear infinite;animation:mescrollUpRotate .6s linear infinite}@-webkit-keyframes mescrollUpRotate{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}@keyframes mescrollUpRotate{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(1turn);transform:rotate(1turn)}} \ No newline at end of file diff --git a/unpackage/dist/build/mp-weixin/components/mescroll-uni/mescroll-uni.js b/unpackage/dist/build/mp-weixin/components/mescroll-uni/mescroll-uni.js new file mode 100644 index 0000000..6703323 --- /dev/null +++ b/unpackage/dist/build/mp-weixin/components/mescroll-uni/mescroll-uni.js @@ -0,0 +1,10 @@ +(global["webpackJsonp"]=global["webpackJsonp"]||[]).push([["components/mescroll-uni/mescroll-uni"],{3161:function(t,o,e){"use strict";e.r(o);var n=e("7b6a"),i=e("aa37");for(var s in i)"default"!==s&&function(t){e.d(o,t,(function(){return i[t]}))}(s);e("9e6c");var r,l=e("f0c5"),c=e("3703"),u=Object(l["a"])(i["default"],n["b"],n["c"],!1,null,null,null,!1,n["a"],r);"function"===typeof c["a"]&&Object(c["a"])(u),o["default"]=u.exports},3703:function(t,o,e){"use strict";var n=function(t){t.options.wxsCallMethods||(t.options.wxsCallMethods=[]),t.options.wxsCallMethods.push("wxsCall")};o["a"]=n},"526f":function(t,o,e){"use strict";(function(t){Object.defineProperty(o,"__esModule",{value:!0}),o.default=void 0;var n=r(e("4aab")),i=r(e("a3f9")),s=r(e("00e8"));function r(t){return t&&t.__esModule?t:{default:t}}var l=function(){e.e("components/mescroll-uni/components/mescroll-empty").then(function(){return resolve(e("9856"))}.bind(null,e)).catch(e.oe)},c=function(){e.e("components/mescroll-uni/components/mescroll-top").then(function(){return resolve(e("67f3"))}.bind(null,e)).catch(e.oe)},u={mixins:[s.default],components:{MescrollEmpty:l,MescrollTop:c},data:function(){return{mescroll:{optDown:{},optUp:{}},viewId:"id_"+Math.random().toString(36).substr(2,16),downHight:0,downRate:0,downLoadType:0,upLoadType:0,isShowEmpty:!1,isShowToTop:!1,scrollTop:0,scrollAnim:!1,windowTop:0,windowBottom:0,windowHeight:0,statusBarHeight:0}},props:{down:Object,up:Object,top:[String,Number],topbar:[Boolean,String],bottom:[String,Number],safearea:Boolean,fixed:{type:Boolean,default:!0},height:[String,Number],bottombar:{type:Boolean,default:!0}},computed:{isFixed:function(){return!this.height&&this.fixed},scrollHeight:function(){return this.isFixed?"auto":this.height?this.toPx(this.height)+"px":"100%"},numTop:function(){return this.toPx(this.top)},fixedTop:function(){return this.isFixed?this.numTop+this.windowTop+"px":0},padTop:function(){return this.isFixed?0:this.numTop+"px"},numBottom:function(){return this.toPx(this.bottom)},fixedBottom:function(){return this.isFixed?this.numBottom+this.windowBottom+"px":0},padBottom:function(){return this.isFixed?0:this.numBottom+"px"},isDownReset:function(){return 3===this.downLoadType||4===this.downLoadType},transition:function(){return this.isDownReset?"transform 300ms":""},translateY:function(){return this.downHight>0?"translateY("+this.downHight+"px)":""},scrollable:function(){return 0===this.downLoadType||this.isDownReset},isDownLoading:function(){return 3===this.downLoadType},downRotate:function(){return"rotate("+360*this.downRate+"deg)"},downText:function(){if(!this.mescroll)return"";switch(this.downLoadType){case 1:return this.mescroll.optDown.textInOffset;case 2:return this.mescroll.optDown.textOutOffset;case 3:return this.mescroll.optDown.textLoading;case 4:return this.mescroll.isDownEndSuccess?this.mescroll.optDown.textSuccess:0==this.mescroll.isDownEndSuccess?this.mescroll.optDown.textErr:this.mescroll.optDown.textInOffset;default:return this.mescroll.optDown.textInOffset}}},methods:{toPx:function(o){if("string"===typeof o)if(-1!==o.indexOf("px"))if(-1!==o.indexOf("rpx"))o=o.replace("rpx","");else{if(-1===o.indexOf("upx"))return Number(o.replace("px",""));o=o.replace("upx","")}else if(-1!==o.indexOf("%")){var e=Number(o.replace("%",""))/100;return this.windowHeight*e}return o?t.upx2px(Number(o)):0},scroll:function(t){var o=this;this.mescroll.scroll(t.detail,(function(){o.$emit("scroll",o.mescroll)}))},emptyClick:function(){this.$emit("emptyclick",this.mescroll)},toTopClick:function(){this.mescroll.scrollTo(0,this.mescroll.optUp.toTop.duration),this.$emit("topclick",this.mescroll)},setClientHeight:function(){var t=this;0!==this.mescroll.getClientHeight(!0)||this.isExec||(this.isExec=!0,this.$nextTick((function(){t.getClientInfo((function(o){t.isExec=!1,o?t.mescroll.setClientHeight(o.height):3!=t.clientNum&&(t.clientNum=null==t.clientNum?1:t.clientNum+1,setTimeout((function(){t.setClientHeight()}),100*t.clientNum))}))})))},getClientInfo:function(o){var e=t.createSelectorQuery();e=e.in(this);var n=e.select("#"+this.viewId);n.boundingClientRect((function(t){o(t)})).exec()}},created:function(){var o=this,e={down:{inOffset:function(){o.downLoadType=1},outOffset:function(){o.downLoadType=2},onMoving:function(t,e,n){o.downHight=n,o.downRate=e},showLoading:function(t,e){o.downLoadType=3,o.downHight=e},beforeEndDownScroll:function(t){return o.downLoadType=4,t.optDown.beforeEndDelay},endDownScroll:function(){o.downLoadType=4,o.downHight=0,o.downResetTimer&&clearTimeout(o.downResetTimer),o.downResetTimer=setTimeout((function(){4===o.downLoadType&&(o.downLoadType=0)}),300)},callback:function(t){o.$emit("down",t)}},up:{showLoading:function(){o.upLoadType=1},showNoMore:function(){o.upLoadType=2},hideUpScroll:function(t){o.upLoadType=t.optUp.hasNext?0:3},empty:{onShow:function(t){o.isShowEmpty=t}},toTop:{onShow:function(t){o.isShowToTop=t}},callback:function(t){o.$emit("up",t),o.setClientHeight()}}};n.default.extend(e,i.default);var s=JSON.parse(JSON.stringify({down:o.down,up:o.up}));n.default.extend(s,e),o.mescroll=new n.default(s),o.mescroll.viewId=o.viewId,o.$emit("init",o.mescroll);var r=t.getSystemInfoSync();r.windowTop&&(o.windowTop=r.windowTop),r.windowBottom&&(o.windowBottom=r.windowBottom),r.windowHeight&&(o.windowHeight=r.windowHeight),r.statusBarHeight&&(o.statusBarHeight=r.statusBarHeight),o.mescroll.setBodyHeight(r.windowHeight),o.mescroll.resetScrollTo((function(e,n){if(o.scrollAnim=0!==n,"string"!==typeof e){var i=o.mescroll.getScrollTop();0===n||300===n?(o.scrollTop=i,o.$nextTick((function(){o.scrollTop=e}))):o.mescroll.getStep(i,e,(function(t){o.scrollTop=t}),n)}else o.getClientInfo((function(n){var i,s=n.top;i=-1==e.indexOf("#")&&-1==e.indexOf(".")?"#"+e:e,t.createSelectorQuery().select(i).boundingClientRect((function(t){if(t){var e=o.mescroll.getScrollTop(),n=t.top-s;n+=e,o.isFixed||(n-=o.numTop),o.scrollTop=e,o.$nextTick((function(){o.scrollTop=n}))}else console.error(i+" does not exist")})).exec()}))})),o.up&&o.up.toTop&&null!=o.up.toTop.safearea||(o.mescroll.optUp.toTop.safearea=o.safearea)},mounted:function(){this.setClientHeight()}};o.default=u}).call(this,e("543d")["default"])},"7b6a":function(t,o,e){"use strict";var n;e.d(o,"b",(function(){return i})),e.d(o,"c",(function(){return s})),e.d(o,"a",(function(){return n}));var i=function(){var t=this,o=t.$createElement;t._self._c},s=[]},8708:function(t,o,e){},"9e6c":function(t,o,e){"use strict";var n=e("8708"),i=e.n(n);i.a},aa37:function(t,o,e){"use strict";e.r(o);var n=e("526f"),i=e.n(n);for(var s in n)"default"!==s&&function(t){e.d(o,t,(function(){return n[t]}))}(s);o["default"]=i.a}}]); +;(global["webpackJsonp"] = global["webpackJsonp"] || []).push([ + 'components/mescroll-uni/mescroll-uni-create-component', + { + 'components/mescroll-uni/mescroll-uni-create-component':(function(module, exports, __webpack_require__){ + __webpack_require__('543d')['createComponent'](__webpack_require__("3161")) + }) + }, + [['components/mescroll-uni/mescroll-uni-create-component']] +]); diff --git a/unpackage/dist/build/mp-weixin/components/mescroll-uni/mescroll-uni.json b/unpackage/dist/build/mp-weixin/components/mescroll-uni/mescroll-uni.json new file mode 100644 index 0000000..11e6401 --- /dev/null +++ b/unpackage/dist/build/mp-weixin/components/mescroll-uni/mescroll-uni.json @@ -0,0 +1,7 @@ +{ + "component": true, + "usingComponents": { + "mescroll-empty": "/components/mescroll-uni/components/mescroll-empty", + "mescroll-top": "/components/mescroll-uni/components/mescroll-top" + } +} \ No newline at end of file diff --git a/unpackage/dist/build/mp-weixin/components/mescroll-uni/mescroll-uni.wxml b/unpackage/dist/build/mp-weixin/components/mescroll-uni/mescroll-uni.wxml new file mode 100644 index 0000000..5807f44 --- /dev/null +++ b/unpackage/dist/build/mp-weixin/components/mescroll-uni/mescroll-uni.wxml @@ -0,0 +1,2 @@ + +{{downText}}{{mescroll.optUp.textNoMore}} \ No newline at end of file diff --git a/unpackage/dist/build/mp-weixin/components/mescroll-uni/mescroll-uni.wxss b/unpackage/dist/build/mp-weixin/components/mescroll-uni/mescroll-uni.wxss new file mode 100644 index 0000000..2ff1036 --- /dev/null +++ b/unpackage/dist/build/mp-weixin/components/mescroll-uni/mescroll-uni.wxss @@ -0,0 +1,2 @@ +.mescroll-uni-warp{height:100%}.mescroll-uni-content{height:100%}.mescroll-uni{position:relative;width:100%;height:100%;min-height:200rpx;overflow-y:auto;-webkit-box-sizing:border-box;box-sizing:border-box}.mescroll-uni-fixed{z-index:1;position:fixed;top:0;left:0;right:0;bottom:0;width:auto;height:auto}@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)}}.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}.mescroll-downwarp .downwarp-progress{display:inline-block;width:32rpx;height:32rpx;-webkit-border-radius:50%;border-radius:50%;border:2rpx solid grey;border-bottom-color:transparent!important;vertical-align:middle}.mescroll-downwarp .mescroll-rotate{-webkit-animation:mescrollDownRotate .6s linear infinite;animation:mescrollDownRotate .6s linear infinite}@-webkit-keyframes mescrollDownRotate{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}@keyframes mescrollDownRotate{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}.mescroll-upwarp{-webkit-box-sizing:border-box;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}.mescroll-upwarp .upwarp-tip{margin-left:16rpx}.mescroll-upwarp .upwarp-progress{display:inline-block;width:32rpx;height:32rpx;-webkit-border-radius:50%;border-radius:50%;border:2rpx solid grey;border-bottom-color:transparent!important;vertical-align:middle}.mescroll-upwarp .mescroll-rotate{-webkit-animation:mescrollUpRotate .6s linear infinite;animation:mescrollUpRotate .6s linear infinite}@-webkit-keyframes mescrollUpRotate{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}@keyframes mescrollUpRotate{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(1turn);transform:rotate(1turn)}} \ No newline at end of file diff --git a/unpackage/dist/build/mp-weixin/components/mescroll-uni/wxs/wxs.wxs b/unpackage/dist/build/mp-weixin/components/mescroll-uni/wxs/wxs.wxs new file mode 100644 index 0000000..3fb4ad9 --- /dev/null +++ b/unpackage/dist/build/mp-weixin/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/unpackage/dist/build/mp-weixin/components/mix-tree/mix-tree.js b/unpackage/dist/build/mp-weixin/components/mix-tree/mix-tree.js new file mode 100644 index 0000000..5c42bf2 --- /dev/null +++ b/unpackage/dist/build/mp-weixin/components/mix-tree/mix-tree.js @@ -0,0 +1,10 @@ +(global["webpackJsonp"]=global["webpackJsonp"]||[]).push([["components/mix-tree/mix-tree"],{"0900":function(t,e,i){"use strict";(function(t){function i(t){return r(t)||c(t)||s(t)||n()}function n(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}function s(t,e){if(t){if("string"===typeof t)return a(t,e);var i=Object.prototype.toString.call(t).slice(8,-1);return"Object"===i&&t.constructor&&(i=t.constructor.name),"Map"===i||"Set"===i?Array.from(t):"Arguments"===i||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(i)?a(t,e):void 0}}function c(t){if("undefined"!==typeof Symbol&&Symbol.iterator in Object(t))return Array.from(t)}function r(t){if(Array.isArray(t))return a(t)}function a(t,e){(null==e||e>t.length)&&(e=t.length);for(var i=0,n=new Array(e);i0&&void 0!==arguments[0]?arguments[0]:[],n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,s=arguments.length>2&&void 0!==arguments[2]?arguments[2]:[];e.forEach((function(e){if(t.treeList.push({id:e.id,name:e.name,parentId:s,rank:n,showChild:!1,show:0===n,account:!!e.account&&e.account,checked:!!t.checkedIDS&&t.checkedIDS.map((function(t){return t===e.id}))}),Array.isArray(e.children)&&e.children.length>0){var c=i(s);c.push(e.id),t.renderTreeList(e.children,n+1,c)}else t.treeList[t.treeList.length-1].lastRank=!0})),this.cloneData=JSON.parse(JSON.stringify(this.treeList))},treeItemTap:function(t){var e=this.treeList,i=t.id;!0!==t.lastRank?(t.showChild=!t.showChild,e.forEach((function(e){if(!1===t.showChild){if(!e.parentId.includes(i))return;!0!==e.lastRank&&(e.showChild=!1),e.show=!1}else e.parentId[e.parentId.length-1]===i&&(e.show=!0)}))):this.$emit("treeItemClick",t)},changeRund:function(e){var i=this;if(this.multiple)if(console.log("触发多选",this.unChecked),this.idsList.includes(e.id))e.checked=!1,this.idsList.splice(this.idsList.indexOf(e.id),1),this.nameList.splice(this.nameList.indexOf(e.name),1),console.log("触发重复选中的判断");else{if(this.limit&&this.idsList.length>=this.limit)return this.idsList.splice(this.limit,1),this.nameList.splice(this.limit,1),t.showToast({title:"请不要选择超过".concat(this.limit,"个!"),icon:"none"});console.log("没有重复选中的判断"),e.checked=!e.checked,e.checked?(this.idsList.push(e.id),this.nameList.push(e.name)):(this.idsList.splice(this.idsList.indexOf(e.id),1),this.nameList.splice(this.nameList.indexOf(e.name),1))}else console.log("触发单选"),e.checked=!e.checked,e.checked?(this.idsList.push(e.id),this.nameList.push(e.name)):(this.idsList.splice(this.idsList.indexOf(e.id),1),this.nameList.splice(this.nameList.indexOf(e.name),1)),this.idsList.length>1&&(this.treeList.forEach((function(t){t.id===i.idsList[0]&&(t.checked=!1)})),this.nameList.splice(0,1),this.idsList.splice(0,1));this.$emit("checkedRund",this.nameList,this.idsList)}}};e.default=o}).call(this,i("543d")["default"])},"0b71":function(t,e,i){},"0fb7":function(t,e,i){"use strict";i.r(e);var n=i("b4fe"),s=i("c056");for(var c in s)"default"!==c&&function(t){i.d(e,t,(function(){return s[t]}))}(c);i("de0e");var r,a=i("f0c5"),o=Object(a["a"])(s["default"],n["b"],n["c"],!1,null,null,null,!1,n["a"],r);e["default"]=o.exports},b4fe:function(t,e,i){"use strict";var n;i.d(e,"b",(function(){return s})),i.d(e,"c",(function(){return c})),i.d(e,"a",(function(){return n}));var s=function(){var t=this,e=t.$createElement;t._self._c},c=[]},c056:function(t,e,i){"use strict";i.r(e);var n=i("0900"),s=i.n(n);for(var c in n)"default"!==c&&function(t){i.d(e,t,(function(){return n[t]}))}(c);e["default"]=s.a},de0e:function(t,e,i){"use strict";var n=i("0b71"),s=i.n(n);s.a}}]); +;(global["webpackJsonp"] = global["webpackJsonp"] || []).push([ + 'components/mix-tree/mix-tree-create-component', + { + 'components/mix-tree/mix-tree-create-component':(function(module, exports, __webpack_require__){ + __webpack_require__('543d')['createComponent'](__webpack_require__("0fb7")) + }) + }, + [['components/mix-tree/mix-tree-create-component']] +]); diff --git a/unpackage/dist/build/mp-weixin/components/mix-tree/mix-tree.json b/unpackage/dist/build/mp-weixin/components/mix-tree/mix-tree.json new file mode 100644 index 0000000..4575d1b --- /dev/null +++ b/unpackage/dist/build/mp-weixin/components/mix-tree/mix-tree.json @@ -0,0 +1,4 @@ +{ + "usingComponents": {}, + "component": true +} \ No newline at end of file diff --git a/unpackage/dist/build/mp-weixin/components/mix-tree/mix-tree.wxml b/unpackage/dist/build/mp-weixin/components/mix-tree/mix-tree.wxml new file mode 100644 index 0000000..35bcfd5 --- /dev/null +++ b/unpackage/dist/build/mp-weixin/components/mix-tree/mix-tree.wxml @@ -0,0 +1 @@ +{{''+item.name+''}} \ No newline at end of file diff --git a/unpackage/dist/build/mp-weixin/components/mix-tree/mix-tree.wxss b/unpackage/dist/build/mp-weixin/components/mix-tree/mix-tree.wxss new file mode 100644 index 0000000..886246a --- /dev/null +++ b/unpackage/dist/build/mp-weixin/components/mix-tree/mix-tree.wxss @@ -0,0 +1 @@ +.mix-tree-list{display:-webkit-box;display:-webkit-flex;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-flex-direction:column;flex-direction:column;padding-left:30rpx}.mix-tree-item{display:-webkit-box;display:-webkit-flex;display:flex;-webkit-box-align:center;-webkit-align-items:center;align-items:center;font-size:30rpx;color:#333;height:0;opacity:0;-webkit-transition:.2s;transition:.2s;position:relative}.mix-tree-item.border{border-bottom:2rpx solid #eee}.mix-tree-item.show{height:80rpx;opacity:1}.mix-tree-icon{width:26rpx;height:26rpx;margin-right:8rpx;opacity:.9}.mix-tree-item.showchild:before{-webkit-transform:rotate(90deg);transform:rotate(90deg)}.mix-tree-item.last:before{opacity:0}.img-round{width:25rpx;height:25rpx;margin-right:100rpx} \ No newline at end of file diff --git a/unpackage/dist/build/mp-weixin/components/multiple-select/multiple-select.js b/unpackage/dist/build/mp-weixin/components/multiple-select/multiple-select.js new file mode 100644 index 0000000..8f399ef --- /dev/null +++ b/unpackage/dist/build/mp-weixin/components/multiple-select/multiple-select.js @@ -0,0 +1,10 @@ +(global["webpackJsonp"]=global["webpackJsonp"]||[]).push([["components/multiple-select/multiple-select"],{1916:function(e,t,n){"use strict";n.r(t);var i=n("9cd0"),r=n.n(i);for(var a in i)"default"!==a&&function(e){n.d(t,e,(function(){return i[e]}))}(a);t["default"]=r.a},"2b3e":function(e,t,n){"use strict";var i;n.d(t,"b",(function(){return r})),n.d(t,"c",(function(){return a})),n.d(t,"a",(function(){return i}));var r=function(){var e=this,t=e.$createElement;e._self._c},a=[]},"9cd0":function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var i=r(n("a34a"));function r(e){return e&&e.__esModule?e:{default:e}}function a(e,t,n,i,r,a,l){try{var s=e[a](l),c=s.value}catch(u){return void n(u)}s.done?t(c):Promise.resolve(c).then(i,r)}function l(e){return function(){var t=this,n=arguments;return new Promise((function(i,r){var l=e.apply(t,n);function s(e){a(l,i,r,s,c,"next",e)}function c(e){a(l,i,r,s,c,"throw",e)}s(void 0)}))}}var s={model:{prop:"value",event:["input"]},data:function(){return{show:!1,activeClass:!1,selectedArr:[],selectedArrOld:[]}},onShow:function(){this.show=this.value},computed:{isAll:function(){var e=this.returnWipeDisabledList();return!!e.length&&!e.includes(!1)}},props:{value:{type:Boolean,default:!1},cancelText:{type:String,default:"取消"},confirmText:{type:String,default:"确认"},labelName:{type:String,default:"label"},valueName:{type:String,default:"value"},maskCloseAble:{type:Boolean,default:!0},allShow:{type:Boolean,default:!0},mode:{type:String,default:"multiple"},defaultSelected:{type:Array,default:function(){return[]}},data:{type:Array,required:!0,default:function(){return[]}}},watch:{value:function(e){var t=this;return l(i.default.mark((function n(){return i.default.wrap((function(n){while(1)switch(n.prev=n.next){case 0:return t.show=e,n.next=3,t.$nextTick();case 3:t.activeClass=e,e&&(t.selectedArrOld=JSON.parse(JSON.stringify(t.selectedArr)));case 5:case"end":return n.stop()}}),n)})))()},show:function(e){this.$emit("input",e),this.$emit("change",e)},data:{handler:function(e){this.selectedArr=e.map((function(e){return!1})),this.setItemActiveState()},deep:!0,immediate:!0},defaultSelected:{handler:function(){this.setItemActiveState()},deep:!0,immediate:!0}},methods:{setItemActiveState:function(){var e=this;this.data.length&&this.defaultSelected.length&&this.data.forEach((function(t,n){for(var i=0;i