From 6cbe1821cf92907bc4fd4f647410414e24a0f13e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=A6=E5=A8=81=E5=A8=81?= <1834256911@qq.com> Date: Tue, 27 May 2025 12:24:11 +0800 Subject: [PATCH] ui --- .gitignore | 7 + App.vue | 91 + common/css/public.scss | 254 + common/request.js | 68 + common/wskj_function.js | 668 + components/address-modal.vue | 372 + components/comment.vue | 125 + components/dateTimeQuantum.vue | 88 + components/drapdown.vue | 164 + components/emptydata.vue | 20 + components/goodslist.vue | 62 + components/updateapp.vue | 158 + components/upload-image.vue | 117 + components/wskj-modal.vue | 55 + components/wskj-model-close.vue | 50 + components/wskj-popup.vue | 42 + config.js | 6 + index.html | 20 + main.js | 72 + manifest.json | 72 + mixins/config.js | 8 + mixins/share.js | 31 + package.json | 18 + pages.json | 167 + pages/cart.vue | 515 + pages/cart_many.vue | 576 + pages/classify.vue | 318 + pages/com.vue | 173 + pages/home.vue | 269 + pages/home/commentlist.png | Bin 0 -> 54531 bytes pages/home/commentlist.vue | 67 + pages/home/msg/index.vue | 102 + pages/home/msg/msgindex.png | Bin 0 -> 12824 bytes pages/home/msg/systemmsg.png | Bin 0 -> 18576 bytes pages/home/msg/systemmsg.vue | 100 + pages/home/msg/systemmsgdetails.png | Bin 0 -> 12909 bytes pages/home/msg/systemmsgdetails.vue | 55 + pages/home/search.png | Bin 0 -> 38349 bytes pages/home/search.vue | 251 + pages/home/selectcity.vue | 235 + pages/init.vue | 33 + pages/login/applogin/forgotpassword.png | Bin 0 -> 28450 bytes pages/login/applogin/forgotpassword.vue | 289 + pages/login/applogin/index.vue | 260 + pages/login/applogin/loginindex.png | Bin 0 -> 11985 bytes pages/login/applogin/register.png | Bin 0 -> 28708 bytes pages/login/applogin/register.vue | 294 + pages/login/wechatlogin.png | Bin 0 -> 16939 bytes pages/login/wechatlogin.vue | 151 + pages/my.vue | 82 + pages/my/aboutme.png | Bin 0 -> 12398 bytes pages/my/aboutme.vue | 74 + pages/my/addaddress.png | Bin 0 -> 27040 bytes pages/my/addaddress.vue | 312 + pages/my/address.png | Bin 0 -> 38542 bytes pages/my/address.vue | 268 + pages/my/demo.vue | 162 + pages/my/feedback.png | Bin 0 -> 20540 bytes pages/my/feedback.vue | 133 + pages/my/footprint.vue | 63 + pages/my/jifenrecord.vue | 78 + pages/my/modifyjieshao.vue | 72 + pages/my/modifynickname.vue | 76 + pages/my/order/orderdetails.vue | 8 + pages/my/order/orderlist.png | Bin 0 -> 40523 bytes pages/my/order/orderlist.vue | 689 + pages/my/setting/checkmobile.png | Bin 0 -> 17633 bytes pages/my/setting/checkmobile.vue | 127 + pages/my/setting/index.png | Bin 0 -> 17735 bytes pages/my/setting/index.vue | 144 + pages/my/setting/modifypaypassword.png | Bin 0 -> 15884 bytes pages/my/setting/modifypaypassword.vue | 84 + pages/my/userinfo.vue | 266 + pages/no_network.vue | 85 + pages/wy-bmfw.vue | 79 + pages/wy-home.vue | 160 + pages/wy-mine.vue | 126 + pages/xieyi.vue | 27 + pages/yht/login.vue | 260 + pages/yht/mine.vue | 148 + pages/yht/user_info.vue | 76 + pagesMain/pages/bxbs.vue | 73 + pagesMain/pages/bxbs_lsgd.vue | 80 + pagesMain/pages/bxbs_submit.vue | 131 + pagesMain/pages/bxxq.vue | 160 + pagesMain/pages/cydh.vue | 81 + pagesMain/pages/fkdj.vue | 204 + pagesMain/pages/fwgz.vue | 97 + pagesMain/pages/jnzd.vue | 111 + pagesMain/pages/jnzd_ccc.vue | 100 + pagesMain/pages/jnzd_qt.vue | 102 + pagesMain/pages/jnzd_tcfmx.vue | 152 + pagesMain/pages/jnzd_wyf.vue | 90 + pagesMain/pages/jnzd_wyfmx.vue | 114 + pagesMain/pages/shjf.vue | 144 + pagesMain/pages/tjsq.vue | 44 + pagesMain/pages/tsby.vue | 90 + pagesMain/pages/tsby_lsgd.vue | 80 + pagesMain/pages/tsby_submit.vue | 131 + pagesMain/static/icon_bxbs_1.png | Bin 0 -> 18982 bytes pagesMain/static/icon_bxbs_2.png | Bin 0 -> 23737 bytes pagesMain/static/icon_bxbs_3.png | Bin 0 -> 20426 bytes pagesMain/static/icon_bxbs_4.png | Bin 0 -> 11280 bytes pagesMain/static/icon_bxxq.png | Bin 0 -> 52792 bytes pagesMain/static/icon_cydh_dh.png | Bin 0 -> 882 bytes pagesMain/static/icon_cydh_qxzd.png | Bin 0 -> 1229 bytes pagesMain/static/icon_cydh_ss.png | Bin 0 -> 1212 bytes pagesMain/static/icon_cydh_zd.png | Bin 0 -> 944 bytes pagesMain/static/icon_fwgz.png | Bin 0 -> 44028 bytes pagesMain/static/icon_shjf_1.png | Bin 0 -> 1429 bytes pagesMain/static/icon_shjf_2.png | Bin 0 -> 1387 bytes pagesMain/static/icon_shjf_3.png | Bin 0 -> 1475 bytes pagesMain/static/icon_shjf_4.png | Bin 0 -> 1448 bytes pagesMain/static/icon_shjf_5.png | Bin 0 -> 2283 bytes pagesMain/static/icon_shjf_6.png | Bin 0 -> 1738 bytes pagesMain/static/icon_shjf_7.png | Bin 0 -> 1194 bytes pagesMain/static/icon_tsby_1.png | Bin 0 -> 21694 bytes pagesMain/static/icon_tsby_2.png | Bin 0 -> 20337 bytes pagesMain/static/icon_tsby_3.png | Bin 0 -> 20426 bytes pagesMain/static/icon_tsby_4.png | Bin 0 -> 11367 bytes pagesMain/static/icon_zksq_1.png | Bin 0 -> 565 bytes pagesMain/static/icon_zksq_2.png | Bin 0 -> 518 bytes readme.md | 0 services/home.js | 0 services/my.js | 10 + static/back.png | Bin 0 -> 600 bytes static/balance.png | Bin 0 -> 806 bytes static/classify/cartshop.png | Bin 0 -> 596 bytes static/close.png | Bin 0 -> 2480 bytes static/emptydata.png | Bin 0 -> 35999 bytes static/home/address-blank.png | Bin 0 -> 809 bytes static/home/close.png | Bin 0 -> 351 bytes static/home/del.png | Bin 0 -> 591 bytes static/home/icon_home_xx.png | Bin 0 -> 1338 bytes static/home/icon_home_xzdz.png | Bin 0 -> 2916 bytes static/home/kefumsg.svg | 12 + static/home/search-icon.png | Bin 0 -> 1086 bytes static/home/share.png | Bin 0 -> 474 bytes static/home/system.svg | 12 + static/icon_bmfw.png | Bin 0 -> 59080 bytes static/icon_bmfw_1.png | Bin 0 -> 20825 bytes static/icon_bmfw_2.png | Bin 0 -> 19094 bytes static/icon_bmfw_3.png | Bin 0 -> 18709 bytes static/icon_bmfw_4.png | Bin 0 -> 21547 bytes static/icon_home_1.png | Bin 0 -> 5429 bytes static/icon_home_2.png | Bin 0 -> 4845 bytes static/icon_home_3.png | Bin 0 -> 3796 bytes static/icon_home_4.png | Bin 0 -> 4552 bytes static/icon_home_5.png | Bin 0 -> 5111 bytes static/icon_home_6.png | Bin 0 -> 4917 bytes static/icon_logo.png | Bin 0 -> 28565 bytes static/icon_r.png | Bin 0 -> 242 bytes static/icon_sx_cg.png | Bin 0 -> 260 bytes static/icon_sx_s.png | Bin 0 -> 341 bytes static/icon_sx_x.png | Bin 0 -> 341 bytes static/icon_xjt.png | Bin 0 -> 491 bytes static/is-select.png | Bin 0 -> 711 bytes static/login/close.png | Bin 0 -> 808 bytes static/login/code.png | Bin 0 -> 952 bytes static/login/hide.png | Bin 0 -> 677 bytes static/login/mobile.png | Bin 0 -> 573 bytes static/login/pass.png | Bin 0 -> 1214 bytes static/login/show.png | Bin 0 -> 1260 bytes static/logo.png | Bin 0 -> 4023 bytes static/my/del.png | Bin 0 -> 591 bytes static/my/edit.png | Bin 0 -> 1162 bytes static/my/no_switch.png | Bin 0 -> 1630 bytes static/my/upload.png | Bin 0 -> 1436 bytes static/my/yes_switch.png | Bin 0 -> 1932 bytes static/no-network.png | Bin 0 -> 15028 bytes static/right.png | Bin 0 -> 394 bytes static/select.png | Bin 0 -> 564 bytes static/success.png | Bin 0 -> 5995 bytes static/tabbar/cart.png | Bin 0 -> 399 bytes static/tabbar/cartHL.png | Bin 0 -> 629 bytes static/tabbar/classify.png | Bin 0 -> 462 bytes static/tabbar/classifyHL.png | Bin 0 -> 685 bytes static/tabbar/home.png | Bin 0 -> 355 bytes static/tabbar/homeHL.png | Bin 0 -> 561 bytes static/tabbar/my.png | Bin 0 -> 461 bytes static/tabbar/myHL.png | Bin 0 -> 639 bytes static/wechatpay.png | Bin 0 -> 2064 bytes store/index.js | 22 + store/modules/home.js | 31 + store/modules/user.js | 23 + uni.promisify.adaptor.js | 10 + uni.scss | 76 + uni_modules/address-picker/changelog.md | 21 + .../address-picker/address-picker.vue | 260 + uni_modules/address-picker/package.json | 85 + .../address-picker/province-city-county.json | 22686 ++++++++++++++++ uni_modules/address-picker/readme.md | 56 + uni_modules/uview-ui/LICENSE | 21 + uni_modules/uview-ui/README.md | 66 + uni_modules/uview-ui/changelog.md | 362 + .../uview-ui/components/u--form/u--form.vue | 78 + .../uview-ui/components/u--image/u--image.vue | 47 + .../uview-ui/components/u--input/u--input.vue | 73 + .../uview-ui/components/u--text/u--text.vue | 44 + .../components/u--textarea/u--textarea.vue | 48 + .../components/u-action-sheet/props.js | 54 + .../u-action-sheet/u-action-sheet.vue | 278 + .../uview-ui/components/u-album/props.js | 59 + .../uview-ui/components/u-album/u-album.vue | 259 + .../uview-ui/components/u-alert/props.js | 44 + .../uview-ui/components/u-alert/u-alert.vue | 243 + .../components/u-avatar-group/props.js | 52 + .../u-avatar-group/u-avatar-group.vue | 103 + .../uview-ui/components/u-avatar/props.js | 78 + .../uview-ui/components/u-avatar/u-avatar.vue | 172 + .../uview-ui/components/u-back-top/props.js | 54 + .../components/u-back-top/u-back-top.vue | 129 + .../uview-ui/components/u-badge/props.js | 72 + .../uview-ui/components/u-badge/u-badge.vue | 171 + .../uview-ui/components/u-button/nvue.scss | 46 + .../uview-ui/components/u-button/props.js | 161 + .../uview-ui/components/u-button/u-button.vue | 490 + .../uview-ui/components/u-button/vue.scss | 80 + .../uview-ui/components/u-calendar/header.vue | 99 + .../uview-ui/components/u-calendar/month.vue | 579 + .../uview-ui/components/u-calendar/props.js | 144 + .../components/u-calendar/u-calendar.vue | 384 + .../uview-ui/components/u-calendar/util.js | 85 + .../components/u-car-keyboard/props.js | 14 + .../u-car-keyboard/u-car-keyboard.vue | 311 + .../uview-ui/components/u-cell-group/props.js | 14 + .../components/u-cell-group/u-cell-group.vue | 61 + .../uview-ui/components/u-cell/props.js | 110 + .../uview-ui/components/u-cell/u-cell.vue | 229 + .../components/u-checkbox-group/props.js | 82 + .../u-checkbox-group/u-checkbox-group.vue | 103 + .../uview-ui/components/u-checkbox/props.js | 69 + .../components/u-checkbox/u-checkbox.vue | 344 + .../components/u-circle-progress/props.js | 8 + .../u-circle-progress/u-circle-progress.vue | 198 + .../uview-ui/components/u-code-input/props.js | 79 + .../components/u-code-input/u-code-input.vue | 252 + .../uview-ui/components/u-code/props.js | 34 + .../uview-ui/components/u-code/u-code.vue | 129 + .../uview-ui/components/u-col/props.js | 29 + .../uview-ui/components/u-col/u-col.vue | 162 + .../components/u-collapse-item/props.js | 59 + .../u-collapse-item/u-collapse-item.vue | 225 + .../uview-ui/components/u-collapse/props.js | 19 + .../components/u-collapse/u-collapse.vue | 90 + .../components/u-column-notice/props.js | 55 + .../u-column-notice/u-column-notice.vue | 160 + .../uview-ui/components/u-count-down/props.js | 24 + .../components/u-count-down/u-count-down.vue | 163 + .../uview-ui/components/u-count-down/utils.js | 62 + .../uview-ui/components/u-count-to/props.js | 59 + .../components/u-count-to/u-count-to.vue | 184 + .../components/u-datetime-picker/props.js | 116 + .../u-datetime-picker/u-datetime-picker.vue | 360 + .../uview-ui/components/u-divider/props.js | 44 + .../components/u-divider/u-divider.vue | 116 + .../components/u-dropdown-item/props.js | 36 + .../u-dropdown-item/u-dropdown-item.vue | 127 + .../uview-ui/components/u-dropdown/props.js | 65 + .../components/u-dropdown/u-dropdown.vue | 127 + .../uview-ui/components/u-empty/props.js | 59 + .../uview-ui/components/u-empty/u-empty.vue | 128 + .../uview-ui/components/u-form-item/props.js | 48 + .../components/u-form-item/u-form-item.vue | 235 + .../uview-ui/components/u-form/props.js | 45 + .../uview-ui/components/u-form/u-form.vue | 214 + .../uview-ui/components/u-gap/props.js | 24 + .../uview-ui/components/u-gap/u-gap.vue | 38 + .../uview-ui/components/u-grid-item/props.js | 14 + .../components/u-grid-item/u-grid-item.vue | 209 + .../uview-ui/components/u-grid/props.js | 19 + .../uview-ui/components/u-grid/u-grid.vue | 97 + .../uview-ui/components/u-icon/icons.js | 214 + .../uview-ui/components/u-icon/props.js | 89 + .../uview-ui/components/u-icon/u-icon.vue | 234 + .../uview-ui/components/u-image/props.js | 84 + .../uview-ui/components/u-image/u-image.vue | 232 + .../components/u-index-anchor/props.js | 29 + .../u-index-anchor/u-index-anchor.vue | 91 + .../uview-ui/components/u-index-item/props.js | 5 + .../components/u-index-item/u-index-item.vue | 87 + .../uview-ui/components/u-index-list/props.js | 29 + .../components/u-index-list/u-index-list.vue | 440 + .../uview-ui/components/u-input/props.js | 187 + .../uview-ui/components/u-input/u-input.vue | 354 + .../uview-ui/components/u-keyboard/props.js | 84 + .../components/u-keyboard/u-keyboard.vue | 164 + .../components/u-line-progress/props.js | 28 + .../u-line-progress/u-line-progress.vue | 144 + .../uview-ui/components/u-line/props.js | 33 + .../uview-ui/components/u-line/u-line.vue | 62 + .../uview-ui/components/u-link/props.js | 39 + .../uview-ui/components/u-link/u-link.vue | 83 + .../uview-ui/components/u-list-item/props.js | 9 + .../components/u-list-item/u-list-item.vue | 116 + .../uview-ui/components/u-list/props.js | 76 + .../uview-ui/components/u-list/u-list.vue | 157 + .../components/u-loading-icon/props.js | 59 + .../u-loading-icon/u-loading-icon.vue | 343 + .../components/u-loading-page/props.js | 49 + .../u-loading-page/u-loading-page.vue | 115 + .../uview-ui/components/u-loadmore/props.js | 94 + .../components/u-loadmore/u-loadmore.vue | 150 + .../uview-ui/components/u-modal/props.js | 84 + .../uview-ui/components/u-modal/u-modal.vue | 227 + .../uview-ui/components/u-navbar/props.js | 84 + .../uview-ui/components/u-navbar/u-navbar.vue | 186 + .../uview-ui/components/u-no-network/props.js | 19 + .../components/u-no-network/u-no-network.vue | 220 + .../uview-ui/components/u-notice-bar/props.js | 70 + .../components/u-notice-bar/u-notice-bar.vue | 101 + .../uview-ui/components/u-notify/props.js | 49 + .../uview-ui/components/u-notify/u-notify.vue | 211 + .../uview-ui/components/u-number-box/props.js | 109 + .../components/u-number-box/u-number-box.vue | 416 + .../components/u-number-keyboard/props.js | 19 + .../u-number-keyboard/u-number-keyboard.vue | 196 + .../uview-ui/components/u-overlay/props.js | 24 + .../components/u-overlay/u-overlay.vue | 68 + .../uview-ui/components/u-parse/node/node.vue | 499 + .../uview-ui/components/u-parse/parser.js | 1075 + .../uview-ui/components/u-parse/props.js | 45 + .../uview-ui/components/u-parse/u-parse.vue | 366 + .../components/u-picker-column/props.js | 5 + .../u-picker-column/u-picker-column.vue | 27 + .../uview-ui/components/u-picker/props.js | 79 + .../uview-ui/components/u-picker/u-picker.vue | 283 + .../uview-ui/components/u-popup/props.js | 79 + .../uview-ui/components/u-popup/u-popup.vue | 304 + .../components/u-radio-group/props.js | 85 + .../u-radio-group/u-radio-group.vue | 108 + .../uview-ui/components/u-radio/props.js | 64 + .../uview-ui/components/u-radio/u-radio.vue | 339 + .../uview-ui/components/u-rate/props.js | 69 + .../uview-ui/components/u-rate/u-rate.vue | 306 + .../uview-ui/components/u-read-more/props.js | 61 + .../components/u-read-more/u-read-more.vue | 157 + .../uview-ui/components/u-row-notice/props.js | 39 + .../components/u-row-notice/u-row-notice.vue | 330 + .../uview-ui/components/u-row/props.js | 19 + .../uview-ui/components/u-row/u-row.vue | 93 + .../components/u-safe-bottom/props.js | 5 + .../u-safe-bottom/u-safe-bottom.vue | 56 + .../uview-ui/components/u-scroll-list/nvue.js | 28 + .../components/u-scroll-list/other.js | 0 .../components/u-scroll-list/props.js | 34 + .../components/u-scroll-list/scrollWxs.wxs | 50 + .../u-scroll-list/u-scroll-list.vue | 224 + .../uview-ui/components/u-search/props.js | 118 + .../uview-ui/components/u-search/u-search.vue | 303 + .../uview-ui/components/u-skeleton/props.js | 59 + .../components/u-skeleton/u-skeleton.vue | 244 + .../uview-ui/components/u-slider/mpother.js | 113 + .../uview-ui/components/u-slider/mpwxs.js | 42 + .../uview-ui/components/u-slider/mpwxs.wxs | 121 + .../nvue - \345\211\257\346\234\254.js" | 180 + .../uview-ui/components/u-slider/nvue.js | 193 + .../uview-ui/components/u-slider/props.js | 54 + .../uview-ui/components/u-slider/u-slider.vue | 55 + .../uview-ui/components/u-status-bar/props.js | 8 + .../components/u-status-bar/u-status-bar.vue | 46 + .../uview-ui/components/u-steps-item/props.js | 24 + .../components/u-steps-item/u-steps-item.vue | 316 + .../uview-ui/components/u-steps/props.js | 39 + .../uview-ui/components/u-steps/u-steps.vue | 80 + .../uview-ui/components/u-sticky/props.js | 40 + .../uview-ui/components/u-sticky/u-sticky.vue | 212 + .../uview-ui/components/u-subsection/props.js | 49 + .../components/u-subsection/u-subsection.vue | 299 + .../u-swipe-action-item/index - backup.wxs | 256 + .../components/u-swipe-action-item/index.wxs | 225 + .../u-swipe-action-item/nvue - backup.js | 270 + .../components/u-swipe-action-item/nvue.js | 174 + .../components/u-swipe-action-item/props.js | 41 + .../u-swipe-action-item.vue | 190 + .../components/u-swipe-action-item/wxs.js | 15 + .../components/u-swipe-action/props.js | 9 + .../u-swipe-action/u-swipe-action.vue | 67 + .../components/u-swiper-indicator/props.js | 29 + .../u-swiper-indicator/u-swiper-indicator.vue | 110 + .../uview-ui/components/u-swiper/props.js | 125 + .../uview-ui/components/u-swiper/u-swiper.vue | 255 + .../uview-ui/components/u-switch/props.js | 54 + .../uview-ui/components/u-switch/u-switch.vue | 177 + .../components/u-tabbar-item/props.js | 35 + .../u-tabbar-item/u-tabbar-item.vue | 142 + .../uview-ui/components/u-tabbar/props.js | 44 + .../uview-ui/components/u-tabbar/u-tabbar.vue | 141 + .../uview-ui/components/u-table/props.js | 5 + .../uview-ui/components/u-table/u-table.vue | 29 + .../uview-ui/components/u-tabs-item/props.js | 5 + .../components/u-tabs-item/u-tabs-item.vue | 29 + .../uview-ui/components/u-tabs/props.js | 64 + .../uview-ui/components/u-tabs/u-tabs.vue | 354 + .../uview-ui/components/u-tag/props.js | 84 + .../uview-ui/components/u-tag/u-tag.vue | 358 + uni_modules/uview-ui/components/u-td/props.js | 5 + uni_modules/uview-ui/components/u-td/u-td.vue | 31 + .../uview-ui/components/u-text/props.js | 110 + .../uview-ui/components/u-text/u-text.vue | 223 + .../uview-ui/components/u-text/value.js | 85 + .../uview-ui/components/u-textarea/props.js | 119 + .../components/u-textarea/u-textarea.vue | 239 + .../uview-ui/components/u-toast/u-toast.vue | 291 + .../uview-ui/components/u-toolbar/props.js | 34 + .../components/u-toolbar/u-toolbar.vue | 102 + .../components/u-tooltip/clipboard.min.js | 58 + .../uview-ui/components/u-tooltip/props.js | 59 + .../components/u-tooltip/u-tooltip.vue | 365 + uni_modules/uview-ui/components/u-tr/props.js | 5 + uni_modules/uview-ui/components/u-tr/u-tr.vue | 31 + .../components/u-transition/nvue.ani-map.js | 68 + .../uview-ui/components/u-transition/props.js | 24 + .../components/u-transition/transition.js | 157 + .../components/u-transition/u-transition.vue | 92 + .../u-transition/vue.ani-style.scss | 113 + .../uview-ui/components/u-upload/mixin.js | 21 + .../uview-ui/components/u-upload/props.js | 124 + .../uview-ui/components/u-upload/u-upload.vue | 559 + .../uview-ui/components/u-upload/utils.js | 151 + .../uview-ui/components/uview-ui/uview-ui.vue | 15 + uni_modules/uview-ui/index.js | 79 + uni_modules/uview-ui/index.scss | 23 + uni_modules/uview-ui/libs/config/color.js | 17 + uni_modules/uview-ui/libs/config/config.js | 34 + uni_modules/uview-ui/libs/config/props.js | 190 + .../uview-ui/libs/config/props/actionSheet.js | 25 + .../uview-ui/libs/config/props/album.js | 25 + .../uview-ui/libs/config/props/alert.js | 22 + .../uview-ui/libs/config/props/avatar.js | 28 + .../uview-ui/libs/config/props/avatarGroup.js | 23 + .../uview-ui/libs/config/props/backtop.js | 27 + .../uview-ui/libs/config/props/badge.js | 27 + .../uview-ui/libs/config/props/button.js | 42 + .../uview-ui/libs/config/props/calendar.js | 42 + .../uview-ui/libs/config/props/carKeyboard.js | 15 + .../uview-ui/libs/config/props/cell.js | 35 + .../uview-ui/libs/config/props/cellGroup.js | 17 + .../uview-ui/libs/config/props/checkbox.js | 27 + .../libs/config/props/checkboxGroup.js | 29 + .../libs/config/props/circleProgress.js | 15 + .../uview-ui/libs/config/props/code.js | 21 + .../uview-ui/libs/config/props/codeInput.js | 29 + uni_modules/uview-ui/libs/config/props/col.js | 19 + .../uview-ui/libs/config/props/collapse.js | 17 + .../libs/config/props/collapseItem.js | 25 + .../libs/config/props/columnNotice.js | 24 + .../uview-ui/libs/config/props/countDown.js | 18 + .../uview-ui/libs/config/props/countTo.js | 25 + .../libs/config/props/datetimePicker.js | 36 + .../uview-ui/libs/config/props/divider.js | 23 + .../uview-ui/libs/config/props/empty.js | 26 + .../uview-ui/libs/config/props/form.js | 22 + .../uview-ui/libs/config/props/formItem.js | 23 + uni_modules/uview-ui/libs/config/props/gap.js | 19 + .../uview-ui/libs/config/props/grid.js | 17 + .../uview-ui/libs/config/props/gridItem.js | 16 + .../uview-ui/libs/config/props/icon.js | 36 + .../uview-ui/libs/config/props/image.js | 30 + .../uview-ui/libs/config/props/indexAnchor.js | 19 + .../uview-ui/libs/config/props/indexList.js | 19 + .../uview-ui/libs/config/props/input.js | 48 + .../uview-ui/libs/config/props/keyboard.js | 30 + .../uview-ui/libs/config/props/line.js | 20 + .../libs/config/props/lineProgress.js | 19 + .../uview-ui/libs/config/props/link.js | 26 + .../uview-ui/libs/config/props/list.js | 28 + .../uview-ui/libs/config/props/listItem.js | 15 + .../uview-ui/libs/config/props/loadingIcon.js | 30 + .../uview-ui/libs/config/props/loadingPage.js | 23 + .../uview-ui/libs/config/props/loadmore.js | 32 + .../uview-ui/libs/config/props/modal.js | 30 + .../uview-ui/libs/config/props/navbar.js | 32 + .../uview-ui/libs/config/props/noNetwork.js | 18 + .../uview-ui/libs/config/props/noticeBar.js | 27 + .../uview-ui/libs/config/props/notify.js | 22 + .../uview-ui/libs/config/props/numberBox.js | 35 + .../libs/config/props/numberKeyboard.js | 17 + .../uview-ui/libs/config/props/overlay.js | 18 + .../uview-ui/libs/config/props/parse.js | 22 + .../uview-ui/libs/config/props/picker.js | 29 + .../uview-ui/libs/config/props/popup.js | 29 + .../uview-ui/libs/config/props/radio.js | 27 + .../uview-ui/libs/config/props/radioGroup.js | 30 + .../uview-ui/libs/config/props/rate.js | 26 + .../uview-ui/libs/config/props/readMore.js | 22 + uni_modules/uview-ui/libs/config/props/row.js | 17 + .../uview-ui/libs/config/props/rowNotice.js | 21 + .../uview-ui/libs/config/props/scrollList.js | 20 + .../uview-ui/libs/config/props/search.js | 37 + .../uview-ui/libs/config/props/section.js | 24 + .../uview-ui/libs/config/props/skeleton.js | 25 + .../uview-ui/libs/config/props/slider.js | 25 + .../uview-ui/libs/config/props/statusBar.js | 15 + .../uview-ui/libs/config/props/steps.js | 21 + .../uview-ui/libs/config/props/stepsItem.js | 18 + .../uview-ui/libs/config/props/sticky.js | 20 + .../uview-ui/libs/config/props/subsection.js | 23 + .../uview-ui/libs/config/props/swipeAction.js | 15 + .../libs/config/props/swipeActionItem.js | 21 + .../uview-ui/libs/config/props/swiper.js | 39 + .../libs/config/props/swipterIndicator.js | 19 + .../uview-ui/libs/config/props/switch.js | 24 + .../uview-ui/libs/config/props/tabbar.js | 22 + .../uview-ui/libs/config/props/tabbarItem.js | 20 + .../uview-ui/libs/config/props/tabs.js | 32 + uni_modules/uview-ui/libs/config/props/tag.js | 29 + .../uview-ui/libs/config/props/text.js | 38 + .../uview-ui/libs/config/props/textarea.js | 36 + .../uview-ui/libs/config/props/toast.js | 30 + .../uview-ui/libs/config/props/toolbar.js | 21 + .../uview-ui/libs/config/props/tooltip.js | 25 + .../uview-ui/libs/config/props/transition.js | 18 + .../uview-ui/libs/config/props/upload.js | 36 + uni_modules/uview-ui/libs/config/zIndex.js | 20 + uni_modules/uview-ui/libs/css/color.scss | 155 + uni_modules/uview-ui/libs/css/common.scss | 97 + uni_modules/uview-ui/libs/css/components.scss | 15 + uni_modules/uview-ui/libs/css/flex.scss | 257 + uni_modules/uview-ui/libs/css/h5.scss | 0 uni_modules/uview-ui/libs/css/mixin.scss | 8 + uni_modules/uview-ui/libs/css/mp.scss | 0 uni_modules/uview-ui/libs/css/nvue.scss | 0 uni_modules/uview-ui/libs/css/vue.scss | 27 + .../uview-ui/libs/function/colorGradient.js | 134 + .../uview-ui/libs/function/debounce.js | 29 + uni_modules/uview-ui/libs/function/digit.js | 167 + uni_modules/uview-ui/libs/function/index.js | 731 + .../uview-ui/libs/function/platform.js | 75 + uni_modules/uview-ui/libs/function/test.js | 288 + .../uview-ui/libs/function/throttle.js | 30 + .../libs/luch-request/adapters/index.js | 97 + .../luch-request/core/InterceptorManager.js | 50 + .../libs/luch-request/core/Request.js | 198 + .../libs/luch-request/core/buildFullPath.js | 20 + .../libs/luch-request/core/defaults.js | 29 + .../libs/luch-request/core/dispatchRequest.js | 3 + .../libs/luch-request/core/mergeConfig.js | 103 + .../uview-ui/libs/luch-request/core/settle.js | 16 + .../libs/luch-request/helpers/buildURL.js | 69 + .../libs/luch-request/helpers/combineURLs.js | 14 + .../luch-request/helpers/isAbsoluteURL.js | 14 + .../uview-ui/libs/luch-request/index.d.ts | 116 + .../uview-ui/libs/luch-request/index.js | 3 + .../uview-ui/libs/luch-request/utils.js | 131 + .../uview-ui/libs/luch-request/utils/clone.js | 264 + uni_modules/uview-ui/libs/mixin/button.js | 13 + uni_modules/uview-ui/libs/mixin/mixin.js | 160 + uni_modules/uview-ui/libs/mixin/mpMixin.js | 8 + uni_modules/uview-ui/libs/mixin/mpShare.js | 13 + uni_modules/uview-ui/libs/mixin/openType.js | 25 + uni_modules/uview-ui/libs/mixin/style.js | 228 + uni_modules/uview-ui/libs/mixin/touch.js | 59 + .../uview-ui/libs/util/async-validator.js | 1343 + uni_modules/uview-ui/libs/util/calendar.js | 546 + uni_modules/uview-ui/libs/util/dayjs.js | 308 + uni_modules/uview-ui/libs/util/emitter.js | 51 + uni_modules/uview-ui/libs/util/route.js | 124 + uni_modules/uview-ui/package.json | 84 + uni_modules/uview-ui/theme.scss | 44 + utils/getweixinsdk.js | 45 + utils/permission.js | 272 + utils/updateapp.js | 33 + 563 files changed, 74157 insertions(+) create mode 100644 .gitignore create mode 100644 App.vue create mode 100644 common/css/public.scss create mode 100644 common/request.js create mode 100644 common/wskj_function.js create mode 100644 components/address-modal.vue create mode 100644 components/comment.vue create mode 100644 components/dateTimeQuantum.vue create mode 100644 components/drapdown.vue create mode 100644 components/emptydata.vue create mode 100644 components/goodslist.vue create mode 100644 components/updateapp.vue create mode 100644 components/upload-image.vue create mode 100644 components/wskj-modal.vue create mode 100644 components/wskj-model-close.vue create mode 100644 components/wskj-popup.vue create mode 100644 config.js create mode 100644 index.html create mode 100644 main.js create mode 100644 manifest.json create mode 100644 mixins/config.js create mode 100644 mixins/share.js create mode 100644 package.json create mode 100644 pages.json create mode 100644 pages/cart.vue create mode 100644 pages/cart_many.vue create mode 100644 pages/classify.vue create mode 100644 pages/com.vue create mode 100644 pages/home.vue create mode 100644 pages/home/commentlist.png create mode 100644 pages/home/commentlist.vue create mode 100644 pages/home/msg/index.vue create mode 100644 pages/home/msg/msgindex.png create mode 100644 pages/home/msg/systemmsg.png create mode 100644 pages/home/msg/systemmsg.vue create mode 100644 pages/home/msg/systemmsgdetails.png create mode 100644 pages/home/msg/systemmsgdetails.vue create mode 100644 pages/home/search.png create mode 100644 pages/home/search.vue create mode 100644 pages/home/selectcity.vue create mode 100644 pages/init.vue create mode 100644 pages/login/applogin/forgotpassword.png create mode 100644 pages/login/applogin/forgotpassword.vue create mode 100644 pages/login/applogin/index.vue create mode 100644 pages/login/applogin/loginindex.png create mode 100644 pages/login/applogin/register.png create mode 100644 pages/login/applogin/register.vue create mode 100644 pages/login/wechatlogin.png create mode 100644 pages/login/wechatlogin.vue create mode 100644 pages/my.vue create mode 100644 pages/my/aboutme.png create mode 100644 pages/my/aboutme.vue create mode 100644 pages/my/addaddress.png create mode 100644 pages/my/addaddress.vue create mode 100644 pages/my/address.png create mode 100644 pages/my/address.vue create mode 100644 pages/my/demo.vue create mode 100644 pages/my/feedback.png create mode 100644 pages/my/feedback.vue create mode 100644 pages/my/footprint.vue create mode 100644 pages/my/jifenrecord.vue create mode 100644 pages/my/modifyjieshao.vue create mode 100644 pages/my/modifynickname.vue create mode 100644 pages/my/order/orderdetails.vue create mode 100644 pages/my/order/orderlist.png create mode 100644 pages/my/order/orderlist.vue create mode 100644 pages/my/setting/checkmobile.png create mode 100644 pages/my/setting/checkmobile.vue create mode 100644 pages/my/setting/index.png create mode 100644 pages/my/setting/index.vue create mode 100644 pages/my/setting/modifypaypassword.png create mode 100644 pages/my/setting/modifypaypassword.vue create mode 100644 pages/my/userinfo.vue create mode 100644 pages/no_network.vue create mode 100644 pages/wy-bmfw.vue create mode 100644 pages/wy-home.vue create mode 100644 pages/wy-mine.vue create mode 100644 pages/xieyi.vue create mode 100644 pages/yht/login.vue create mode 100644 pages/yht/mine.vue create mode 100644 pages/yht/user_info.vue create mode 100644 pagesMain/pages/bxbs.vue create mode 100644 pagesMain/pages/bxbs_lsgd.vue create mode 100644 pagesMain/pages/bxbs_submit.vue create mode 100644 pagesMain/pages/bxxq.vue create mode 100644 pagesMain/pages/cydh.vue create mode 100644 pagesMain/pages/fkdj.vue create mode 100644 pagesMain/pages/fwgz.vue create mode 100644 pagesMain/pages/jnzd.vue create mode 100644 pagesMain/pages/jnzd_ccc.vue create mode 100644 pagesMain/pages/jnzd_qt.vue create mode 100644 pagesMain/pages/jnzd_tcfmx.vue create mode 100644 pagesMain/pages/jnzd_wyf.vue create mode 100644 pagesMain/pages/jnzd_wyfmx.vue create mode 100644 pagesMain/pages/shjf.vue create mode 100644 pagesMain/pages/tjsq.vue create mode 100644 pagesMain/pages/tsby.vue create mode 100644 pagesMain/pages/tsby_lsgd.vue create mode 100644 pagesMain/pages/tsby_submit.vue create mode 100644 pagesMain/static/icon_bxbs_1.png create mode 100644 pagesMain/static/icon_bxbs_2.png create mode 100644 pagesMain/static/icon_bxbs_3.png create mode 100644 pagesMain/static/icon_bxbs_4.png create mode 100644 pagesMain/static/icon_bxxq.png create mode 100644 pagesMain/static/icon_cydh_dh.png create mode 100644 pagesMain/static/icon_cydh_qxzd.png create mode 100644 pagesMain/static/icon_cydh_ss.png create mode 100644 pagesMain/static/icon_cydh_zd.png create mode 100644 pagesMain/static/icon_fwgz.png create mode 100644 pagesMain/static/icon_shjf_1.png create mode 100644 pagesMain/static/icon_shjf_2.png create mode 100644 pagesMain/static/icon_shjf_3.png create mode 100644 pagesMain/static/icon_shjf_4.png create mode 100644 pagesMain/static/icon_shjf_5.png create mode 100644 pagesMain/static/icon_shjf_6.png create mode 100644 pagesMain/static/icon_shjf_7.png create mode 100644 pagesMain/static/icon_tsby_1.png create mode 100644 pagesMain/static/icon_tsby_2.png create mode 100644 pagesMain/static/icon_tsby_3.png create mode 100644 pagesMain/static/icon_tsby_4.png create mode 100644 pagesMain/static/icon_zksq_1.png create mode 100644 pagesMain/static/icon_zksq_2.png create mode 100644 readme.md create mode 100644 services/home.js create mode 100644 services/my.js create mode 100644 static/back.png create mode 100644 static/balance.png create mode 100644 static/classify/cartshop.png create mode 100644 static/close.png create mode 100644 static/emptydata.png create mode 100644 static/home/address-blank.png create mode 100644 static/home/close.png create mode 100644 static/home/del.png create mode 100644 static/home/icon_home_xx.png create mode 100644 static/home/icon_home_xzdz.png create mode 100644 static/home/kefumsg.svg create mode 100644 static/home/search-icon.png create mode 100644 static/home/share.png create mode 100644 static/home/system.svg create mode 100644 static/icon_bmfw.png create mode 100644 static/icon_bmfw_1.png create mode 100644 static/icon_bmfw_2.png create mode 100644 static/icon_bmfw_3.png create mode 100644 static/icon_bmfw_4.png create mode 100644 static/icon_home_1.png create mode 100644 static/icon_home_2.png create mode 100644 static/icon_home_3.png create mode 100644 static/icon_home_4.png create mode 100644 static/icon_home_5.png create mode 100644 static/icon_home_6.png create mode 100644 static/icon_logo.png create mode 100644 static/icon_r.png create mode 100644 static/icon_sx_cg.png create mode 100644 static/icon_sx_s.png create mode 100644 static/icon_sx_x.png create mode 100644 static/icon_xjt.png create mode 100644 static/is-select.png create mode 100644 static/login/close.png create mode 100644 static/login/code.png create mode 100644 static/login/hide.png create mode 100644 static/login/mobile.png create mode 100644 static/login/pass.png create mode 100644 static/login/show.png create mode 100644 static/logo.png create mode 100644 static/my/del.png create mode 100644 static/my/edit.png create mode 100644 static/my/no_switch.png create mode 100644 static/my/upload.png create mode 100644 static/my/yes_switch.png create mode 100644 static/no-network.png create mode 100644 static/right.png create mode 100644 static/select.png create mode 100644 static/success.png create mode 100644 static/tabbar/cart.png create mode 100644 static/tabbar/cartHL.png create mode 100644 static/tabbar/classify.png create mode 100644 static/tabbar/classifyHL.png create mode 100644 static/tabbar/home.png create mode 100644 static/tabbar/homeHL.png create mode 100644 static/tabbar/my.png create mode 100644 static/tabbar/myHL.png create mode 100644 static/wechatpay.png create mode 100644 store/index.js create mode 100644 store/modules/home.js create mode 100644 store/modules/user.js create mode 100644 uni.promisify.adaptor.js create mode 100644 uni.scss create mode 100644 uni_modules/address-picker/changelog.md create mode 100644 uni_modules/address-picker/components/address-picker/address-picker.vue create mode 100644 uni_modules/address-picker/package.json create mode 100644 uni_modules/address-picker/province-city-county.json create mode 100644 uni_modules/address-picker/readme.md create mode 100644 uni_modules/uview-ui/LICENSE create mode 100644 uni_modules/uview-ui/README.md create mode 100644 uni_modules/uview-ui/changelog.md create mode 100644 uni_modules/uview-ui/components/u--form/u--form.vue create mode 100644 uni_modules/uview-ui/components/u--image/u--image.vue create mode 100644 uni_modules/uview-ui/components/u--input/u--input.vue create mode 100644 uni_modules/uview-ui/components/u--text/u--text.vue create mode 100644 uni_modules/uview-ui/components/u--textarea/u--textarea.vue create mode 100644 uni_modules/uview-ui/components/u-action-sheet/props.js create mode 100644 uni_modules/uview-ui/components/u-action-sheet/u-action-sheet.vue create mode 100644 uni_modules/uview-ui/components/u-album/props.js create mode 100644 uni_modules/uview-ui/components/u-album/u-album.vue create mode 100644 uni_modules/uview-ui/components/u-alert/props.js create mode 100644 uni_modules/uview-ui/components/u-alert/u-alert.vue create mode 100644 uni_modules/uview-ui/components/u-avatar-group/props.js create mode 100644 uni_modules/uview-ui/components/u-avatar-group/u-avatar-group.vue create mode 100644 uni_modules/uview-ui/components/u-avatar/props.js create mode 100644 uni_modules/uview-ui/components/u-avatar/u-avatar.vue create mode 100644 uni_modules/uview-ui/components/u-back-top/props.js create mode 100644 uni_modules/uview-ui/components/u-back-top/u-back-top.vue create mode 100644 uni_modules/uview-ui/components/u-badge/props.js create mode 100644 uni_modules/uview-ui/components/u-badge/u-badge.vue create mode 100644 uni_modules/uview-ui/components/u-button/nvue.scss create mode 100644 uni_modules/uview-ui/components/u-button/props.js create mode 100644 uni_modules/uview-ui/components/u-button/u-button.vue create mode 100644 uni_modules/uview-ui/components/u-button/vue.scss create mode 100644 uni_modules/uview-ui/components/u-calendar/header.vue create mode 100644 uni_modules/uview-ui/components/u-calendar/month.vue create mode 100644 uni_modules/uview-ui/components/u-calendar/props.js create mode 100644 uni_modules/uview-ui/components/u-calendar/u-calendar.vue create mode 100644 uni_modules/uview-ui/components/u-calendar/util.js create mode 100644 uni_modules/uview-ui/components/u-car-keyboard/props.js create mode 100644 uni_modules/uview-ui/components/u-car-keyboard/u-car-keyboard.vue create mode 100644 uni_modules/uview-ui/components/u-cell-group/props.js create mode 100644 uni_modules/uview-ui/components/u-cell-group/u-cell-group.vue create mode 100644 uni_modules/uview-ui/components/u-cell/props.js create mode 100644 uni_modules/uview-ui/components/u-cell/u-cell.vue create mode 100644 uni_modules/uview-ui/components/u-checkbox-group/props.js create mode 100644 uni_modules/uview-ui/components/u-checkbox-group/u-checkbox-group.vue create mode 100644 uni_modules/uview-ui/components/u-checkbox/props.js create mode 100644 uni_modules/uview-ui/components/u-checkbox/u-checkbox.vue create mode 100644 uni_modules/uview-ui/components/u-circle-progress/props.js create mode 100644 uni_modules/uview-ui/components/u-circle-progress/u-circle-progress.vue create mode 100644 uni_modules/uview-ui/components/u-code-input/props.js create mode 100644 uni_modules/uview-ui/components/u-code-input/u-code-input.vue create mode 100644 uni_modules/uview-ui/components/u-code/props.js create mode 100644 uni_modules/uview-ui/components/u-code/u-code.vue create mode 100644 uni_modules/uview-ui/components/u-col/props.js create mode 100644 uni_modules/uview-ui/components/u-col/u-col.vue create mode 100644 uni_modules/uview-ui/components/u-collapse-item/props.js create mode 100644 uni_modules/uview-ui/components/u-collapse-item/u-collapse-item.vue create mode 100644 uni_modules/uview-ui/components/u-collapse/props.js create mode 100644 uni_modules/uview-ui/components/u-collapse/u-collapse.vue create mode 100644 uni_modules/uview-ui/components/u-column-notice/props.js create mode 100644 uni_modules/uview-ui/components/u-column-notice/u-column-notice.vue create mode 100644 uni_modules/uview-ui/components/u-count-down/props.js create mode 100644 uni_modules/uview-ui/components/u-count-down/u-count-down.vue create mode 100644 uni_modules/uview-ui/components/u-count-down/utils.js create mode 100644 uni_modules/uview-ui/components/u-count-to/props.js create mode 100644 uni_modules/uview-ui/components/u-count-to/u-count-to.vue create mode 100644 uni_modules/uview-ui/components/u-datetime-picker/props.js create mode 100644 uni_modules/uview-ui/components/u-datetime-picker/u-datetime-picker.vue create mode 100644 uni_modules/uview-ui/components/u-divider/props.js create mode 100644 uni_modules/uview-ui/components/u-divider/u-divider.vue create mode 100644 uni_modules/uview-ui/components/u-dropdown-item/props.js create mode 100644 uni_modules/uview-ui/components/u-dropdown-item/u-dropdown-item.vue create mode 100644 uni_modules/uview-ui/components/u-dropdown/props.js create mode 100644 uni_modules/uview-ui/components/u-dropdown/u-dropdown.vue create mode 100644 uni_modules/uview-ui/components/u-empty/props.js create mode 100644 uni_modules/uview-ui/components/u-empty/u-empty.vue create mode 100644 uni_modules/uview-ui/components/u-form-item/props.js create mode 100644 uni_modules/uview-ui/components/u-form-item/u-form-item.vue create mode 100644 uni_modules/uview-ui/components/u-form/props.js create mode 100644 uni_modules/uview-ui/components/u-form/u-form.vue create mode 100644 uni_modules/uview-ui/components/u-gap/props.js create mode 100644 uni_modules/uview-ui/components/u-gap/u-gap.vue create mode 100644 uni_modules/uview-ui/components/u-grid-item/props.js create mode 100644 uni_modules/uview-ui/components/u-grid-item/u-grid-item.vue create mode 100644 uni_modules/uview-ui/components/u-grid/props.js create mode 100644 uni_modules/uview-ui/components/u-grid/u-grid.vue create mode 100644 uni_modules/uview-ui/components/u-icon/icons.js create mode 100644 uni_modules/uview-ui/components/u-icon/props.js create mode 100644 uni_modules/uview-ui/components/u-icon/u-icon.vue create mode 100644 uni_modules/uview-ui/components/u-image/props.js create mode 100644 uni_modules/uview-ui/components/u-image/u-image.vue create mode 100644 uni_modules/uview-ui/components/u-index-anchor/props.js create mode 100644 uni_modules/uview-ui/components/u-index-anchor/u-index-anchor.vue create mode 100644 uni_modules/uview-ui/components/u-index-item/props.js create mode 100644 uni_modules/uview-ui/components/u-index-item/u-index-item.vue create mode 100644 uni_modules/uview-ui/components/u-index-list/props.js create mode 100644 uni_modules/uview-ui/components/u-index-list/u-index-list.vue create mode 100644 uni_modules/uview-ui/components/u-input/props.js create mode 100644 uni_modules/uview-ui/components/u-input/u-input.vue create mode 100644 uni_modules/uview-ui/components/u-keyboard/props.js create mode 100644 uni_modules/uview-ui/components/u-keyboard/u-keyboard.vue create mode 100644 uni_modules/uview-ui/components/u-line-progress/props.js create mode 100644 uni_modules/uview-ui/components/u-line-progress/u-line-progress.vue create mode 100644 uni_modules/uview-ui/components/u-line/props.js create mode 100644 uni_modules/uview-ui/components/u-line/u-line.vue create mode 100644 uni_modules/uview-ui/components/u-link/props.js create mode 100644 uni_modules/uview-ui/components/u-link/u-link.vue create mode 100644 uni_modules/uview-ui/components/u-list-item/props.js create mode 100644 uni_modules/uview-ui/components/u-list-item/u-list-item.vue create mode 100644 uni_modules/uview-ui/components/u-list/props.js create mode 100644 uni_modules/uview-ui/components/u-list/u-list.vue create mode 100644 uni_modules/uview-ui/components/u-loading-icon/props.js create mode 100644 uni_modules/uview-ui/components/u-loading-icon/u-loading-icon.vue create mode 100644 uni_modules/uview-ui/components/u-loading-page/props.js create mode 100644 uni_modules/uview-ui/components/u-loading-page/u-loading-page.vue create mode 100644 uni_modules/uview-ui/components/u-loadmore/props.js create mode 100644 uni_modules/uview-ui/components/u-loadmore/u-loadmore.vue create mode 100644 uni_modules/uview-ui/components/u-modal/props.js create mode 100644 uni_modules/uview-ui/components/u-modal/u-modal.vue create mode 100644 uni_modules/uview-ui/components/u-navbar/props.js create mode 100644 uni_modules/uview-ui/components/u-navbar/u-navbar.vue create mode 100644 uni_modules/uview-ui/components/u-no-network/props.js create mode 100644 uni_modules/uview-ui/components/u-no-network/u-no-network.vue create mode 100644 uni_modules/uview-ui/components/u-notice-bar/props.js create mode 100644 uni_modules/uview-ui/components/u-notice-bar/u-notice-bar.vue create mode 100644 uni_modules/uview-ui/components/u-notify/props.js create mode 100644 uni_modules/uview-ui/components/u-notify/u-notify.vue create mode 100644 uni_modules/uview-ui/components/u-number-box/props.js create mode 100644 uni_modules/uview-ui/components/u-number-box/u-number-box.vue create mode 100644 uni_modules/uview-ui/components/u-number-keyboard/props.js create mode 100644 uni_modules/uview-ui/components/u-number-keyboard/u-number-keyboard.vue create mode 100644 uni_modules/uview-ui/components/u-overlay/props.js create mode 100644 uni_modules/uview-ui/components/u-overlay/u-overlay.vue create mode 100644 uni_modules/uview-ui/components/u-parse/node/node.vue create mode 100644 uni_modules/uview-ui/components/u-parse/parser.js create mode 100644 uni_modules/uview-ui/components/u-parse/props.js create mode 100644 uni_modules/uview-ui/components/u-parse/u-parse.vue create mode 100644 uni_modules/uview-ui/components/u-picker-column/props.js create mode 100644 uni_modules/uview-ui/components/u-picker-column/u-picker-column.vue create mode 100644 uni_modules/uview-ui/components/u-picker/props.js create mode 100644 uni_modules/uview-ui/components/u-picker/u-picker.vue create mode 100644 uni_modules/uview-ui/components/u-popup/props.js create mode 100644 uni_modules/uview-ui/components/u-popup/u-popup.vue create mode 100644 uni_modules/uview-ui/components/u-radio-group/props.js create mode 100644 uni_modules/uview-ui/components/u-radio-group/u-radio-group.vue create mode 100644 uni_modules/uview-ui/components/u-radio/props.js create mode 100644 uni_modules/uview-ui/components/u-radio/u-radio.vue create mode 100644 uni_modules/uview-ui/components/u-rate/props.js create mode 100644 uni_modules/uview-ui/components/u-rate/u-rate.vue create mode 100644 uni_modules/uview-ui/components/u-read-more/props.js create mode 100644 uni_modules/uview-ui/components/u-read-more/u-read-more.vue create mode 100644 uni_modules/uview-ui/components/u-row-notice/props.js create mode 100644 uni_modules/uview-ui/components/u-row-notice/u-row-notice.vue create mode 100644 uni_modules/uview-ui/components/u-row/props.js create mode 100644 uni_modules/uview-ui/components/u-row/u-row.vue create mode 100644 uni_modules/uview-ui/components/u-safe-bottom/props.js create mode 100644 uni_modules/uview-ui/components/u-safe-bottom/u-safe-bottom.vue create mode 100644 uni_modules/uview-ui/components/u-scroll-list/nvue.js create mode 100644 uni_modules/uview-ui/components/u-scroll-list/other.js create mode 100644 uni_modules/uview-ui/components/u-scroll-list/props.js create mode 100644 uni_modules/uview-ui/components/u-scroll-list/scrollWxs.wxs create mode 100644 uni_modules/uview-ui/components/u-scroll-list/u-scroll-list.vue create mode 100644 uni_modules/uview-ui/components/u-search/props.js create mode 100644 uni_modules/uview-ui/components/u-search/u-search.vue create mode 100644 uni_modules/uview-ui/components/u-skeleton/props.js create mode 100644 uni_modules/uview-ui/components/u-skeleton/u-skeleton.vue create mode 100644 uni_modules/uview-ui/components/u-slider/mpother.js create mode 100644 uni_modules/uview-ui/components/u-slider/mpwxs.js create mode 100644 uni_modules/uview-ui/components/u-slider/mpwxs.wxs create mode 100644 "uni_modules/uview-ui/components/u-slider/nvue - \345\211\257\346\234\254.js" create mode 100644 uni_modules/uview-ui/components/u-slider/nvue.js create mode 100644 uni_modules/uview-ui/components/u-slider/props.js create mode 100644 uni_modules/uview-ui/components/u-slider/u-slider.vue create mode 100644 uni_modules/uview-ui/components/u-status-bar/props.js create mode 100644 uni_modules/uview-ui/components/u-status-bar/u-status-bar.vue create mode 100644 uni_modules/uview-ui/components/u-steps-item/props.js create mode 100644 uni_modules/uview-ui/components/u-steps-item/u-steps-item.vue create mode 100644 uni_modules/uview-ui/components/u-steps/props.js create mode 100644 uni_modules/uview-ui/components/u-steps/u-steps.vue create mode 100644 uni_modules/uview-ui/components/u-sticky/props.js create mode 100644 uni_modules/uview-ui/components/u-sticky/u-sticky.vue create mode 100644 uni_modules/uview-ui/components/u-subsection/props.js create mode 100644 uni_modules/uview-ui/components/u-subsection/u-subsection.vue create mode 100644 uni_modules/uview-ui/components/u-swipe-action-item/index - backup.wxs create mode 100644 uni_modules/uview-ui/components/u-swipe-action-item/index.wxs create mode 100644 uni_modules/uview-ui/components/u-swipe-action-item/nvue - backup.js create mode 100644 uni_modules/uview-ui/components/u-swipe-action-item/nvue.js create mode 100644 uni_modules/uview-ui/components/u-swipe-action-item/props.js create mode 100644 uni_modules/uview-ui/components/u-swipe-action-item/u-swipe-action-item.vue create mode 100644 uni_modules/uview-ui/components/u-swipe-action-item/wxs.js create mode 100644 uni_modules/uview-ui/components/u-swipe-action/props.js create mode 100644 uni_modules/uview-ui/components/u-swipe-action/u-swipe-action.vue create mode 100644 uni_modules/uview-ui/components/u-swiper-indicator/props.js create mode 100644 uni_modules/uview-ui/components/u-swiper-indicator/u-swiper-indicator.vue create mode 100644 uni_modules/uview-ui/components/u-swiper/props.js create mode 100644 uni_modules/uview-ui/components/u-swiper/u-swiper.vue create mode 100644 uni_modules/uview-ui/components/u-switch/props.js create mode 100644 uni_modules/uview-ui/components/u-switch/u-switch.vue create mode 100644 uni_modules/uview-ui/components/u-tabbar-item/props.js create mode 100644 uni_modules/uview-ui/components/u-tabbar-item/u-tabbar-item.vue create mode 100644 uni_modules/uview-ui/components/u-tabbar/props.js create mode 100644 uni_modules/uview-ui/components/u-tabbar/u-tabbar.vue create mode 100644 uni_modules/uview-ui/components/u-table/props.js create mode 100644 uni_modules/uview-ui/components/u-table/u-table.vue create mode 100644 uni_modules/uview-ui/components/u-tabs-item/props.js create mode 100644 uni_modules/uview-ui/components/u-tabs-item/u-tabs-item.vue create mode 100644 uni_modules/uview-ui/components/u-tabs/props.js create mode 100644 uni_modules/uview-ui/components/u-tabs/u-tabs.vue create mode 100644 uni_modules/uview-ui/components/u-tag/props.js create mode 100644 uni_modules/uview-ui/components/u-tag/u-tag.vue create mode 100644 uni_modules/uview-ui/components/u-td/props.js create mode 100644 uni_modules/uview-ui/components/u-td/u-td.vue create mode 100644 uni_modules/uview-ui/components/u-text/props.js create mode 100644 uni_modules/uview-ui/components/u-text/u-text.vue create mode 100644 uni_modules/uview-ui/components/u-text/value.js create mode 100644 uni_modules/uview-ui/components/u-textarea/props.js create mode 100644 uni_modules/uview-ui/components/u-textarea/u-textarea.vue create mode 100644 uni_modules/uview-ui/components/u-toast/u-toast.vue create mode 100644 uni_modules/uview-ui/components/u-toolbar/props.js create mode 100644 uni_modules/uview-ui/components/u-toolbar/u-toolbar.vue create mode 100644 uni_modules/uview-ui/components/u-tooltip/clipboard.min.js create mode 100644 uni_modules/uview-ui/components/u-tooltip/props.js create mode 100644 uni_modules/uview-ui/components/u-tooltip/u-tooltip.vue create mode 100644 uni_modules/uview-ui/components/u-tr/props.js create mode 100644 uni_modules/uview-ui/components/u-tr/u-tr.vue create mode 100644 uni_modules/uview-ui/components/u-transition/nvue.ani-map.js create mode 100644 uni_modules/uview-ui/components/u-transition/props.js create mode 100644 uni_modules/uview-ui/components/u-transition/transition.js create mode 100644 uni_modules/uview-ui/components/u-transition/u-transition.vue create mode 100644 uni_modules/uview-ui/components/u-transition/vue.ani-style.scss create mode 100644 uni_modules/uview-ui/components/u-upload/mixin.js create mode 100644 uni_modules/uview-ui/components/u-upload/props.js create mode 100644 uni_modules/uview-ui/components/u-upload/u-upload.vue create mode 100644 uni_modules/uview-ui/components/u-upload/utils.js create mode 100644 uni_modules/uview-ui/components/uview-ui/uview-ui.vue create mode 100644 uni_modules/uview-ui/index.js create mode 100644 uni_modules/uview-ui/index.scss create mode 100644 uni_modules/uview-ui/libs/config/color.js create mode 100644 uni_modules/uview-ui/libs/config/config.js create mode 100644 uni_modules/uview-ui/libs/config/props.js create mode 100644 uni_modules/uview-ui/libs/config/props/actionSheet.js create mode 100644 uni_modules/uview-ui/libs/config/props/album.js create mode 100644 uni_modules/uview-ui/libs/config/props/alert.js create mode 100644 uni_modules/uview-ui/libs/config/props/avatar.js create mode 100644 uni_modules/uview-ui/libs/config/props/avatarGroup.js create mode 100644 uni_modules/uview-ui/libs/config/props/backtop.js create mode 100644 uni_modules/uview-ui/libs/config/props/badge.js create mode 100644 uni_modules/uview-ui/libs/config/props/button.js create mode 100644 uni_modules/uview-ui/libs/config/props/calendar.js create mode 100644 uni_modules/uview-ui/libs/config/props/carKeyboard.js create mode 100644 uni_modules/uview-ui/libs/config/props/cell.js create mode 100644 uni_modules/uview-ui/libs/config/props/cellGroup.js create mode 100644 uni_modules/uview-ui/libs/config/props/checkbox.js create mode 100644 uni_modules/uview-ui/libs/config/props/checkboxGroup.js create mode 100644 uni_modules/uview-ui/libs/config/props/circleProgress.js create mode 100644 uni_modules/uview-ui/libs/config/props/code.js create mode 100644 uni_modules/uview-ui/libs/config/props/codeInput.js create mode 100644 uni_modules/uview-ui/libs/config/props/col.js create mode 100644 uni_modules/uview-ui/libs/config/props/collapse.js create mode 100644 uni_modules/uview-ui/libs/config/props/collapseItem.js create mode 100644 uni_modules/uview-ui/libs/config/props/columnNotice.js create mode 100644 uni_modules/uview-ui/libs/config/props/countDown.js create mode 100644 uni_modules/uview-ui/libs/config/props/countTo.js create mode 100644 uni_modules/uview-ui/libs/config/props/datetimePicker.js create mode 100644 uni_modules/uview-ui/libs/config/props/divider.js create mode 100644 uni_modules/uview-ui/libs/config/props/empty.js create mode 100644 uni_modules/uview-ui/libs/config/props/form.js create mode 100644 uni_modules/uview-ui/libs/config/props/formItem.js create mode 100644 uni_modules/uview-ui/libs/config/props/gap.js create mode 100644 uni_modules/uview-ui/libs/config/props/grid.js create mode 100644 uni_modules/uview-ui/libs/config/props/gridItem.js create mode 100644 uni_modules/uview-ui/libs/config/props/icon.js create mode 100644 uni_modules/uview-ui/libs/config/props/image.js create mode 100644 uni_modules/uview-ui/libs/config/props/indexAnchor.js create mode 100644 uni_modules/uview-ui/libs/config/props/indexList.js create mode 100644 uni_modules/uview-ui/libs/config/props/input.js create mode 100644 uni_modules/uview-ui/libs/config/props/keyboard.js create mode 100644 uni_modules/uview-ui/libs/config/props/line.js create mode 100644 uni_modules/uview-ui/libs/config/props/lineProgress.js create mode 100644 uni_modules/uview-ui/libs/config/props/link.js create mode 100644 uni_modules/uview-ui/libs/config/props/list.js create mode 100644 uni_modules/uview-ui/libs/config/props/listItem.js create mode 100644 uni_modules/uview-ui/libs/config/props/loadingIcon.js create mode 100644 uni_modules/uview-ui/libs/config/props/loadingPage.js create mode 100644 uni_modules/uview-ui/libs/config/props/loadmore.js create mode 100644 uni_modules/uview-ui/libs/config/props/modal.js create mode 100644 uni_modules/uview-ui/libs/config/props/navbar.js create mode 100644 uni_modules/uview-ui/libs/config/props/noNetwork.js create mode 100644 uni_modules/uview-ui/libs/config/props/noticeBar.js create mode 100644 uni_modules/uview-ui/libs/config/props/notify.js create mode 100644 uni_modules/uview-ui/libs/config/props/numberBox.js create mode 100644 uni_modules/uview-ui/libs/config/props/numberKeyboard.js create mode 100644 uni_modules/uview-ui/libs/config/props/overlay.js create mode 100644 uni_modules/uview-ui/libs/config/props/parse.js create mode 100644 uni_modules/uview-ui/libs/config/props/picker.js create mode 100644 uni_modules/uview-ui/libs/config/props/popup.js create mode 100644 uni_modules/uview-ui/libs/config/props/radio.js create mode 100644 uni_modules/uview-ui/libs/config/props/radioGroup.js create mode 100644 uni_modules/uview-ui/libs/config/props/rate.js create mode 100644 uni_modules/uview-ui/libs/config/props/readMore.js create mode 100644 uni_modules/uview-ui/libs/config/props/row.js create mode 100644 uni_modules/uview-ui/libs/config/props/rowNotice.js create mode 100644 uni_modules/uview-ui/libs/config/props/scrollList.js create mode 100644 uni_modules/uview-ui/libs/config/props/search.js create mode 100644 uni_modules/uview-ui/libs/config/props/section.js create mode 100644 uni_modules/uview-ui/libs/config/props/skeleton.js create mode 100644 uni_modules/uview-ui/libs/config/props/slider.js create mode 100644 uni_modules/uview-ui/libs/config/props/statusBar.js create mode 100644 uni_modules/uview-ui/libs/config/props/steps.js create mode 100644 uni_modules/uview-ui/libs/config/props/stepsItem.js create mode 100644 uni_modules/uview-ui/libs/config/props/sticky.js create mode 100644 uni_modules/uview-ui/libs/config/props/subsection.js create mode 100644 uni_modules/uview-ui/libs/config/props/swipeAction.js create mode 100644 uni_modules/uview-ui/libs/config/props/swipeActionItem.js create mode 100644 uni_modules/uview-ui/libs/config/props/swiper.js create mode 100644 uni_modules/uview-ui/libs/config/props/swipterIndicator.js create mode 100644 uni_modules/uview-ui/libs/config/props/switch.js create mode 100644 uni_modules/uview-ui/libs/config/props/tabbar.js create mode 100644 uni_modules/uview-ui/libs/config/props/tabbarItem.js create mode 100644 uni_modules/uview-ui/libs/config/props/tabs.js create mode 100644 uni_modules/uview-ui/libs/config/props/tag.js create mode 100644 uni_modules/uview-ui/libs/config/props/text.js create mode 100644 uni_modules/uview-ui/libs/config/props/textarea.js create mode 100644 uni_modules/uview-ui/libs/config/props/toast.js create mode 100644 uni_modules/uview-ui/libs/config/props/toolbar.js create mode 100644 uni_modules/uview-ui/libs/config/props/tooltip.js create mode 100644 uni_modules/uview-ui/libs/config/props/transition.js create mode 100644 uni_modules/uview-ui/libs/config/props/upload.js create mode 100644 uni_modules/uview-ui/libs/config/zIndex.js create mode 100644 uni_modules/uview-ui/libs/css/color.scss create mode 100644 uni_modules/uview-ui/libs/css/common.scss create mode 100644 uni_modules/uview-ui/libs/css/components.scss create mode 100644 uni_modules/uview-ui/libs/css/flex.scss create mode 100644 uni_modules/uview-ui/libs/css/h5.scss create mode 100644 uni_modules/uview-ui/libs/css/mixin.scss create mode 100644 uni_modules/uview-ui/libs/css/mp.scss create mode 100644 uni_modules/uview-ui/libs/css/nvue.scss create mode 100644 uni_modules/uview-ui/libs/css/vue.scss create mode 100644 uni_modules/uview-ui/libs/function/colorGradient.js create mode 100644 uni_modules/uview-ui/libs/function/debounce.js create mode 100644 uni_modules/uview-ui/libs/function/digit.js create mode 100644 uni_modules/uview-ui/libs/function/index.js create mode 100644 uni_modules/uview-ui/libs/function/platform.js create mode 100644 uni_modules/uview-ui/libs/function/test.js create mode 100644 uni_modules/uview-ui/libs/function/throttle.js create mode 100644 uni_modules/uview-ui/libs/luch-request/adapters/index.js create mode 100644 uni_modules/uview-ui/libs/luch-request/core/InterceptorManager.js create mode 100644 uni_modules/uview-ui/libs/luch-request/core/Request.js create mode 100644 uni_modules/uview-ui/libs/luch-request/core/buildFullPath.js create mode 100644 uni_modules/uview-ui/libs/luch-request/core/defaults.js create mode 100644 uni_modules/uview-ui/libs/luch-request/core/dispatchRequest.js create mode 100644 uni_modules/uview-ui/libs/luch-request/core/mergeConfig.js create mode 100644 uni_modules/uview-ui/libs/luch-request/core/settle.js create mode 100644 uni_modules/uview-ui/libs/luch-request/helpers/buildURL.js create mode 100644 uni_modules/uview-ui/libs/luch-request/helpers/combineURLs.js create mode 100644 uni_modules/uview-ui/libs/luch-request/helpers/isAbsoluteURL.js create mode 100644 uni_modules/uview-ui/libs/luch-request/index.d.ts create mode 100644 uni_modules/uview-ui/libs/luch-request/index.js create mode 100644 uni_modules/uview-ui/libs/luch-request/utils.js create mode 100644 uni_modules/uview-ui/libs/luch-request/utils/clone.js create mode 100644 uni_modules/uview-ui/libs/mixin/button.js create mode 100644 uni_modules/uview-ui/libs/mixin/mixin.js create mode 100644 uni_modules/uview-ui/libs/mixin/mpMixin.js create mode 100644 uni_modules/uview-ui/libs/mixin/mpShare.js create mode 100644 uni_modules/uview-ui/libs/mixin/openType.js create mode 100644 uni_modules/uview-ui/libs/mixin/style.js create mode 100644 uni_modules/uview-ui/libs/mixin/touch.js create mode 100644 uni_modules/uview-ui/libs/util/async-validator.js create mode 100644 uni_modules/uview-ui/libs/util/calendar.js create mode 100644 uni_modules/uview-ui/libs/util/dayjs.js create mode 100644 uni_modules/uview-ui/libs/util/emitter.js create mode 100644 uni_modules/uview-ui/libs/util/route.js create mode 100644 uni_modules/uview-ui/package.json create mode 100644 uni_modules/uview-ui/theme.scss create mode 100644 utils/getweixinsdk.js create mode 100644 utils/permission.js create mode 100644 utils/updateapp.js diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..89ddc90 --- /dev/null +++ b/.gitignore @@ -0,0 +1,7 @@ +# 忽略UniApp编译生成的小程序相关目录 +/unpackage/* +!/unpackage/res/* +/.idea/* +/.hbuilderx/* + +/.svn/* diff --git a/App.vue b/App.vue new file mode 100644 index 0000000..99b629e --- /dev/null +++ b/App.vue @@ -0,0 +1,91 @@ + + + diff --git a/common/css/public.scss b/common/css/public.scss new file mode 100644 index 0000000..d31fd26 --- /dev/null +++ b/common/css/public.scss @@ -0,0 +1,254 @@ + + $app-main-color: #1FCA7C; + + page { + height: 100%; + } + + .container { + box-sizing: border-box; /* padding border 等不增加到宽高上 */ + } + + view, + scroll-view, + swiper, + button, + input, + textarea, + label, + navigator, + image { + box-sizing: content-box; /* padding border 等增加到宽高上 */ + } + + .flex { + display: flex; + } + + .flex-wrap { + display: flex; + flex-wrap: wrap; + } + + .flex-column { + display: flex; + flex-direction: column; + } + + // 横轴 + .flex-row-around { + display: flex; + justify-content: space-around; + } + + .flex-row-between { + display: flex; + justify-content: space-between; + } + + .flex-row-center { + display: flex; + justify-content: center; + } + + + // 纵轴 + .flex-column-center { + display: flex; + align-items: center; + } + + + // 横轴 纵轴 + .flex-around-center{ + display: flex; + justify-content: space-around; + align-items: center; + } + .flex-between-center{ + display: flex; + justify-content: space-between; + align-items: center; + } + .flex-center-center { + display: flex; + justify-content: center; + align-items: center; + } + .h-center { + justify-content: center; + } + .v-center { + align-items:center; + } + .vh-center { + justify-content: center; + align-items:center; + } + + + + + // 宽高 + @for $i from 1 through 400 { + .w-#{$i} { + width: $i + rpx; + } + .h-#{$i} { + height: $i + rpx; + } + .lh-#{$i} { + line-height: $i + rpx; + } + + } + + // 字体大小 + @for $i from 10 through 60 { + .fs-#{$i} { + font-size: $i + rpx; + } + } + + .fw-400 { + font-weight: 400; + } + .fw-600 { + font-weight: 600; + } + .fw-700 { + font-weight: 700; + } + + // 圆角 + @for $i from 8 through 50 { + .br-#{$i} { + border-radius: $i + rpx; + } + } + + + // 内边距 + @for $i from 5 through 200 { + .pad-#{$i} { + padding: $i + rpx; + } + .pt-#{$i} { + padding-top: $i + rpx; + } + .pr-#{$i} { + padding-right: $i + rpx; + } + .pb-#{$i} { + padding-bottom: $i + rpx; + } + .pl-#{$i} { + padding-left: $i + rpx; + } + .ptb-#{$i} { + padding-top: $i + rpx; + padding-bottom: $i + rpx; + } + .plr-#{$i} { + padding-left: $i + rpx; + padding-right: $i + rpx; + } + } + + + // 外边距 + @for $i from 5 through 100 { + .mar-#{$i} { + margin: $i + rpx; + } + .mt-#{$i} { + margin-top: $i + rpx; + } + .mr-#{$i} { + margin-right: $i + rpx; + } + .mb-#{$i} { + margin-bottom: $i + rpx; + } + .ml-#{$i} { + margin-left: $i + rpx; + } + .mtb-#{$i} { + margin-top: $i + rpx; + margin-bottom: $i + rpx; + } + .mlr-#{$i} { + margin-left: $i + rpx; + margin-right: $i + rpx; + } + } + + + .center { + text-align: center; + } + + + // 订单的主要按钮 + .main-btn { + width: 160rpx; + height: 72rpx; + border-radius: 60rpx; + text-align: center; + line-height: 72rpx; + color: #FFF; + background-color: $app-main-color; + } + + // 订单的次要按钮 + .minor-btn { + width: 160rpx; + height: 72rpx; + border: 2rpx solid #999999; + border-radius: 60rpx; + text-align: center; + line-height: 72rpx; + } + + + .bottom-box { + box-sizing: border-box; + } + // 沾满全屏的按钮 + .fullscreen-btn { + height: 90rpx; + margin-left: 20rpx; + margin-right: 20rpx; + text-align: center; + line-height: 90rpx; + background-color: #1FCA7C; + border-radius: 12rpx; + color: #FFFFFF; + } + .full-btn { + height: 100rpx; + margin: 0 20rpx; + text-align: center; + line-height: 100rpx; + background-color: #EBF5F0; + border-radius: 50rpx; + color: #EEA616; + } + .overflow-y { + flex: 1; + overflow-y: auto; + } + + button::after { + border: none; + } + + button { + display: block; + line-height: normal; + background-color: #FFF; + padding-left: 0; + padding-right: 0; + margin: 0; + font-size: 32rpx; + } \ No newline at end of file diff --git a/common/request.js b/common/request.js new file mode 100644 index 0000000..3a9dae0 --- /dev/null +++ b/common/request.js @@ -0,0 +1,68 @@ +import config from "config" + +/** + * http请求 + * @author 万世科技 + * @param {Object} params + */ +function request(params) { + // console.log(params) + // const token = uni.getStorageSync('token') + const token = '237c5a89-2627-48a7-b0b7-49b68af09d3d' + return new Promise((resolve, reject) => { + try { + params.url = config.domain + params.url + params.method = params.method || 'POST' + + if (params.loadingTip === '' || params.loadingTip) { + uni.showLoading({ + title: params.loadingTip + }) + } + uni.request({ + ...params, + header: { + "token": token || '' + }, + success: (res) => { + // console.log(res) + // 防止组件那边使用showLoading这里提前关闭 + if(params.loadingTip === '' || params.loadingTip){ + uni.hideLoading() + } + // 这里判断code为1,组件那边不需要再判断then回调就是成功 + if (res.statusCode === 200 && res.data.code === 1) { + resolve(res.data) + } else if (res.statusCode === 401 || res.data.code === 401) { // 未登录,或登录过期 + // toLogin() + } else { + reject(res.data || {}) + } + }, + fail: (err) => { + // console.log('失败') + // console.log(err) + uni.hideLoading() + if(err.data.code === 401) { + // toLogin() + } + reject(err || {}) + } + }) + } catch (err) { + reject(err) + } + }) +} + +function toLogin(){ + uni.$u.toast('登录过期') + uni.clearStorageSync(); + setTimeout(()=> { + uni.reLaunch({ + url: '/pages/login/wechatlogin' + }) + }, 600) +} + +export default request \ No newline at end of file diff --git a/common/wskj_function.js b/common/wskj_function.js new file mode 100644 index 0000000..c35d302 --- /dev/null +++ b/common/wskj_function.js @@ -0,0 +1,668 @@ +import config from "config" + +// #ifdef APP-PLUS +import checkUpdateApp from "@/utils/updateapp.js" +// #endif + +// uploadImg 上传图片方法 +// openGaoDeMap 打开高德地图APP +// openBaiDuMap 打开百度地图APP +// authTo 判断是否登录,未登录提示登录 +// isLoginCallback 判断是否登录,未登录提示登录,已登录执行回调方法 +// to 跳转页面路由 +// switchTab 跳转到tabbar页面 +// redirectTo 关闭当前页面,跳转到下一个页面 +// reLaunch 关闭所有页面,跳转到下一个页面 +// goBack 页面返回 +// onCall 拨打电话 +// onCopy 复制内容 +// isImage 是否为图片地址 +// isVideo 是否为视频地址 +// testEmail 检测是否是邮箱 +// testMobile 检测是否是手机号 +// testUrl 检测是否是url地址 +// testIdCard 检测是否是身份证号 +// previewImage 预览图片 +// timeFormat 时间戳格式化为日期 时分秒 与uView方法一致 +// isAMorPM 判断时间戳转为上午或下午 +// ellipsisText 省略文本 裁剪文本 +// capsulHeight 微信小程序胶囊自身高度 +// capsulTop 微信小程序胶囊距离页面顶部的高度 +// lightFn 匹配一段文字改为其他颜色 +// throttle 节流方法 +// debounce 防抖方法 +// toast 弹窗 +// pay 微信小程序支付或APP微信支付或APP支付宝支付 +// onSaveImageAlbum // 保存照片到相册 + + +/** + * 上传图片 + * @author 万世科技 + * @param {String} imgurl 图片地址 + */ +function uploadImg(imgurl) { + return new Promise((resolve, reject) => { + const token = uni.getStorageSync('token') + try { + uni.uploadFile({ + url: config.domain + '/api/common/upload', + header: { + token + }, + filePath: imgurl, + name: 'file', + success: res => { + // console.log(res) + const data = JSON.parse(res.data) + // console.log(data) + if (data.code === 1) { + resolve(data.data) + } else { + reject(data) + } + }, + fail: err => { + reject(err) + // console.log(err) + } + }) + } catch (err) { + reject(err) + } + }) +} + + + +/** + * 打开高德地图APP + * @author 万世科技 + * @param {String} current_latitude 当前纬度 + * @param {String} current_longitude 当前经度 + * @param {String} current_address 当前所在地名称 + * @param {String} shop_latitude 目的地纬度 + * @param {String} shop_longtude 目的地经度 + * @param {String} shop_address 目的地名称 + */ +// #ifdef APP-PLUS +function openGaoDeMap(current_latitude, current_longitude, current_address, shop_latitude, shop_longtude, + shop_address) { + if (uni.$u.os() === 'android') { + var packageName = 'com.autonavi.minimap'; + + var main = plus.android.runtimeMainActivity(); + + var packageManager = main.getPackageManager(); + + var PackageManager = plus.android.importClass(packageManager); + + var packageInfo = packageManager.getPackageInfo(packageName, PackageManager.GET_ACTIVITIES); + + if (packageInfo) { + var Uri = plus.android.importClass("android.net.Uri"); + var url = "amapuri://route/plan?sourceApplication=maxuslife" + "&sid=A&slat=" + current_latitude + + "&slon=" + current_longitude + "&sname=" + current_address + "&did=B&dlat=" + + shop_latitude + "&dlon=" + shop_longtude + "&dname=" + shop_address + "D10&dev=0&t=0"; + + var Intent = plus.android.importClass('android.content.Intent'); + var intent = new Intent(); + + intent.setAction(Intent.ACTION_VIEW); + intent.addCategory(Intent.CATEGORY_DEFAULT); + var uri = Uri.parse(url); + + //将功能Scheme以URI的方式传入 + intent.setData(uri); + intent.setPackage("com.autonavi.minimap"); + uni.hideLoading() + var main = plus.android.runtimeMainActivity(); + main.startActivity(intent); + } else { + uni.hideLoading() + this.$u.toast('未安装高德地图APP,请先安装') + } + } else if (uni.$u.os() === 'ios') { + const url = + `baidumap://map/direction?origin=${current_latitude},${current_longitude}&destination=${shop_latitude},${shop_longtude}&origin_region=${current_address}&destination_region=${shop_address}&mode=driving&coord_type=gcj02&src=ios.companyName.appName` + + plus.runtime.openURL(encodeURI(url), function(e) { + plus.nativeUI.alert("本机未安装指定的地图应用"); + }); + } +} +// #endif + + + + +/** + * 打开百度地图APP + * @author 万世科技 + * @param {String} current_latitude 当前纬度 + * @param {String} current_longitude 当前经度 + * @param {String} current_address 当前所在地名称 + * @param {String} shop_latitude 目的地纬度 + * @param {String} shop_longtude 目的地经度 + * @param {String} shop_address 目的地名称 + */ +// #ifdef APP-PLUS +function openBaiDuMap(current_latitude, current_longitude, current_address, shop_latitude, shop_longtude, + shop_address) { + if (uni.$u.os() === 'android') { + var packageName = 'com.baidu.BaiduMap'; + + var main = plus.android.runtimeMainActivity(); + + var packageManager = main.getPackageManager(); + + var PackageManager = plus.android.importClass(packageManager); + + var packageInfo = packageManager.getPackageInfo(packageName, PackageManager.GET_ACTIVITIES); + + if (packageInfo) { + var Uri = plus.android.importClass("android.net.Uri"); + var url = + `baidumap://map/direction?&origin=name:${current_address}|${shop_latitude},${shop_longtude}&destination=${shop_address}&coord_type=gcj02&mode=driving&src=andr.baidu.openAPIdemo`; + + var Intent = plus.android.importClass('android.content.Intent'); + var intent = new Intent(); + + intent.setAction(Intent.ACTION_VIEW); + intent.addCategory(Intent.CATEGORY_DEFAULT); + var uri = Uri.parse(url); + + //将功能Scheme以URI的方式传入 + intent.setData(uri); + intent.setPackage("com.baidu.BaiduMap"); + uni.hideLoading() + var main = plus.android.runtimeMainActivity(); + main.startActivity(intent); + } else { + uni.hideLoading() + this.$u.toast('未安装百度地图APP,请先安装') + } + } else if (uni.$u.os() === 'ios') { + const url = + `baidumap://map/direction?origin=${current_latitude},${current_longitude}&destination=${shop_latitude},${shop_longtude}&origin_region=${current_address}&destination_region=${shop_address}&mode=driving&coord_type=gcj02&src=ios.companyName.appName` + + plus.runtime.openURL(encodeURI(url), function(e) { + plus.nativeUI.alert("本机未安装指定的地图应用"); + }); + } +} +// #endif + + + + + +/** + * 跳转路径 + * @param {String} url 跳转的页面地址 + */ +function to(url) { + uni.navigateTo({ + url + }) +} + + + +/** + * 判断是否登录,未登录提示 点击跳转到登录页 + * @param {String} url 跳转的页面地址 + */ +function authTo(url) { + const token = uni.getStorageSync('token') + if (!token) { + uni.showModal({ + title: '提示', + content: '您还未登录,请先登录', + success(res) { + if (res.confirm) { + uni.reLaunch({ + url: '/pages/login/wechatlogin' + }) + } else if (res.cancel) { + + } + } + }) + } else { + uni.navigateTo({ + url + }) + } +} + + + +/** + * 判断是否登录,未登录提示 ,点击跳转到登录页,已登录执行回调 + * @param {funciton} callback 执行的回调函数 + */ +function isLoginCallback(callback) { + const token = uni.getStorageSync('token') + if (!token) { + uni.showModal({ + title: '提示', + content: '您还未登录,请先登录', + success(res) { + if (res.confirm) { + uni.reLaunch({ + url: '/pages/login/wechatlogin' + }) + } else if (res.cancel) { + + } + } + }) + } else { + callback() + } +} + + + + +/** + * 跳转tabbar路径 + * @param {String} url 跳转的tabar地址 + */ +function switchTab(url) { + uni.switchTab({ + url + }) +} + +/** + * 跳转到下一个页面,关闭当前页面 + * @param {String} url 跳转的页面地址 + */ +function redirectTo(url) { + uni.redirectTo({ + url + }) +} + +/** + * 关闭所有页面,跳转到下一个页面 + * @param {String} url 跳转的页面地址 + */ +function reLaunch(url) { + uni.reLaunch({ + url + }) +} + + + +/** + * 返回 + * @param {Number} num 返回几层 + */ +function goBack(num = 1) { + uni.navigateBack({ + delta: Number(num) + }) +} + + +/** + * 预览图片 + * @param {String} urls 图片数组 + */ +function previewImage(urls, index = 0) { + uni.previewImage({ + urls, + current: index + }) +} + + +/** + * 打电话 + * @param {String} phone 电话号码 + */ +function onCall(phone) { + uni.makePhoneCall({ + phoneNumber: phone, + fail: (err) => { + console.log(err) + } + }); + // if(uni.$u.test.mobile(phone)){ + // uni.makePhoneCall({ + // phoneNumber: phone + // }); + // } else { + // uni.$u.toast('手机号码错误') + // } +} + + + +/** + * 复制 + * @param {String} text 需复制的文本 + */ +function onCopy(text) { + uni.setClipboardData({ + data: text, + success: () => { + uni.showToast({ + title: '复制成功', + icon: "none" + }) + } + }); +} + + +/** + * 检测图片地址 + * @param {String} url 图片地址 + */ +function isImage(url) { + if (!/\.(gif|jpg|jpeg|png|GIF|JPG|PNG)$/.test(url)) { + return false + } else { + return true + } +} + + +/** + * 检测视频地址 + * @param {String} url 视频地址 + */ +const isVideo = (url) => { + if (!/\.(mp4|mov|rmvb|AVI)$/.test(url)) { + return false + } else { + return true + } +} + + + +/** + * 检测是否是邮箱 + * @author 万世科技 + * @param {String} email 邮箱号 + */ +function testEmail(email) { + return uni.$u.test.email(email) +} + + +/** + * 检测是否是手机号 + * @author 万世科技 + * @param {String} mobile 手机号 + */ +function testMobile(mobile) { + return uni.$u.test.mobile(mobile) +} + + +/** + * 检测是否是Url + * @author 万世科技 + * @param {String} url url地址 + */ +function testUrl(url) { + return uni.$u.test.url(url) +} + + + +/** + * 检测是否是身份证号 + * @param {String} idCard 身份证号 + */ +function testIdCard(idCard) { + return uni.$u.test.idCard(idCard) +} + + + +/** + * 时间格式化 + * @param {Number} date 时间戳 + */ +function timeFormat(date, format = 'yyyy-mm-dd hh:MM') { + return uni.$u.timeFormat(date, format) +} + + +/** + * 时间戳转上午或下午 + * @param {Number} timestamp 时间戳 + */ +function isAMorPM(timestamp) { + var date = new Date(timestamp); + var hours = date.getHours(); + return hours < 12 ? '上午' : '下午'; +} + + + +/** + * 省略文本 + * @param {String} text 文本 + * @param {Number} len 希望返回的长度 + */ +function ellipsisText(text, len) { + return text.length > len ? text.substr(0, len) + '...' : text +} + + + +let capsulHeight = '' // 胶囊的高度 +let capsulTop = '' // 胶囊距离手机最顶部的高度 +/** + * 获取胶囊距离顶部高度(微信小程序) + */ +// #ifdef MP-WEIXIN +let { + height, + top +} = wx.getMenuButtonBoundingClientRect(); +capsulHeight = height +capsulTop = top +// #endif + +// #ifdef MP-ALIPAY +let { + height, + top +} = my.getMenuButtonBoundingClientRect(); +capsulHeight = height +capsulTop = top +// #endif + + + +/** + * 修改一段文字中某写文字的颜色 + * @param {String} fullText 完整的文字段落 + * @param {String} text 需要改变颜色的文字段落 + * @param {String} color 颜色 + */ +function lightFn(fullText, text, color = '#4FE4C4') { + // 使用正则找到str,'ig'忽略大小写 + const reg = new RegExp(text, 'ig') + // 返回一个字符串,str里有return回来的字符串进行替换 + return fullText.replace(reg, (match) => { + return `${match}` + }) +} + + +/** + * 节流 + * @param {String} callback 回调函数 + * @param {String} time 节流间隔时间 + */ +function throttle(callback, time = 1000) { + uni.$u.throttle(callback, time) +} + + +/** + * 防抖 + * @param {String} callback 回调函数 + * @param {String} time 防抖间隔时间 + */ +function debounce(callback, time = 1000) { + uni.$u.debounce(callback, time) +} + + + +/** + * 弹窗 + * @param {String} text 弹出的文字 + */ +function toast(text) { + uni.$u.toast(text) +} + + + +/** + * 微信小程序支付或APP微信支付或APP支付宝支付 + * @param {Object} orderInfo 支付信息对象 + * @param {function} fn1 支付成功的回调函数 + * @param {function} fn2 支付失败的回调函数 + */ +function pay(orderInfo, fn1, fn2) { + // #ifdef APP-PLUS + uni.requestPayment({ + provider, + orderInfo, // + success: (res) => { + // console.log(res); + fn1(res) + }, + fail: (err) => { + fn2(err) + } + }); + // #endif + + // #ifdef MP-WEIXIN + uni.requestPayment({ + provider, + appid: orderInfo.appId, // 微信开放平台 - 应用 - AppId,注意和微信小程序、公众号 AppId 可能不一致 + nonceStr: orderInfo.nonceStr, // 随机字符串 + package: orderInfo.package, // 固定值 + timeStamp: orderInfo.timeStamp, // 时间戳(单位:秒) + paySign: orderInfo.paySign, // 签名,这里用的 MD5/RSA 签名 + signType: 'MD5', + success: (res) => { + // console.log(res) + // if(res.errMsg === 'requestPayment:ok') { + // fn1(res) + // } + fn1(res) + }, + fail: (err) => { + fn2(err) + } + }); + // #endif +} + +/** + * 保存图片到相册 + * @param {String} url 图片地址 + */ +function onSaveImageAlbum(url) { + uni.getImageInfo({ + src: url, + success: (res) => { + console.log(res) + // #ifndef H5 + uni.saveImageToPhotosAlbum({ + filePath: res.path || res.tempFilePaths, + success: () => { + uni.$u.toast('保存成功') + } + }) + // #endif + } + }) +} + + +/** + * 微信浏览器支付(不使用SDK) + * @param {Object} params 支付参数 + */ +function wxBrowserPay(params) { + WeixinJSBridge.invoke('getBrandWCPayRequest', { + "appId": params.data.appId, //公众号ID,由商户传入 + "timeStamp": params.data.timeStamp, //时间戳,自1970年以来的秒数 + "nonceStr": params.data.nonceStr, //随机串 + "package": params.data.package, + "signType": params.data.signType, //微信签名方式: + "paySign": params.data.paySign //微信签名 + }, + function(res) { + if (res.err_msg == "get_brand_wcpay_request:ok") { + // 使用以上方式判断前端返回,微信团队郑重提示: + //res.err_msg将在用户支付成功后返回ok,但并不保证它绝对可靠。 + params.success(res) + } else { + params.fail(res) + } + } + ); +} + + + +const wskj_function = { + uploadImg, + authTo, + isLoginCallback, + to, + switchTab, + redirectTo, + reLaunch, + goBack, + onCall, + onCopy, + isImage, + isVideo, + testEmail, + testMobile, + testUrl, + testIdCard, + previewImage, + timeFormat, + isAMorPM, + ellipsisText, + // #ifdef MP-WEIXIN || MP-ALIPAY + capsulHeight, + capsulTop, + // #endif + // #ifdef APP-PLUS + openGaoDeMap, + openBaiDuMap, + checkUpdateApp, + // #endif + lightFn, + throttle, + debounce, + toast, + pay, + onSaveImageAlbum, + wxBrowserPay +} + + +export default wskj_function \ No newline at end of file diff --git a/components/address-modal.vue b/components/address-modal.vue new file mode 100644 index 0000000..87fa704 --- /dev/null +++ b/components/address-modal.vue @@ -0,0 +1,372 @@ + + + + + \ No newline at end of file diff --git a/components/comment.vue b/components/comment.vue new file mode 100644 index 0000000..81e9e9c --- /dev/null +++ b/components/comment.vue @@ -0,0 +1,125 @@ + + + + + diff --git a/components/dateTimeQuantum.vue b/components/dateTimeQuantum.vue new file mode 100644 index 0000000..fe5714d --- /dev/null +++ b/components/dateTimeQuantum.vue @@ -0,0 +1,88 @@ + + + + + \ No newline at end of file diff --git a/components/drapdown.vue b/components/drapdown.vue new file mode 100644 index 0000000..85bb6ef --- /dev/null +++ b/components/drapdown.vue @@ -0,0 +1,164 @@ + + + + + diff --git a/components/emptydata.vue b/components/emptydata.vue new file mode 100644 index 0000000..27a9976 --- /dev/null +++ b/components/emptydata.vue @@ -0,0 +1,20 @@ + + + + + \ No newline at end of file diff --git a/components/goodslist.vue b/components/goodslist.vue new file mode 100644 index 0000000..20a47f3 --- /dev/null +++ b/components/goodslist.vue @@ -0,0 +1,62 @@ + + + + + diff --git a/components/updateapp.vue b/components/updateapp.vue new file mode 100644 index 0000000..b4e6350 --- /dev/null +++ b/components/updateapp.vue @@ -0,0 +1,158 @@ + + + + + \ No newline at end of file diff --git a/components/upload-image.vue b/components/upload-image.vue new file mode 100644 index 0000000..38b337c --- /dev/null +++ b/components/upload-image.vue @@ -0,0 +1,117 @@ + + + + + \ No newline at end of file diff --git a/components/wskj-modal.vue b/components/wskj-modal.vue new file mode 100644 index 0000000..c8c62c1 --- /dev/null +++ b/components/wskj-modal.vue @@ -0,0 +1,55 @@ + + + + + diff --git a/components/wskj-model-close.vue b/components/wskj-model-close.vue new file mode 100644 index 0000000..e70a971 --- /dev/null +++ b/components/wskj-model-close.vue @@ -0,0 +1,50 @@ + + + + + \ No newline at end of file diff --git a/components/wskj-popup.vue b/components/wskj-popup.vue new file mode 100644 index 0000000..f872808 --- /dev/null +++ b/components/wskj-popup.vue @@ -0,0 +1,42 @@ + + + + + diff --git a/config.js b/config.js new file mode 100644 index 0000000..c5381ac --- /dev/null +++ b/config.js @@ -0,0 +1,6 @@ +export default { + domain: 'https://smxy0327.idiaoyuyi.com', // 项目域名 + cdnUrl: '', // 云储蓄静态资源图片域名 + amapKey: '' , // 高德web服务key + socketUrl: ''// websocket地址 +} \ No newline at end of file diff --git a/index.html b/index.html new file mode 100644 index 0000000..c3ff205 --- /dev/null +++ b/index.html @@ -0,0 +1,20 @@ + + + + + + + + + + +
+ + + diff --git a/main.js b/main.js new file mode 100644 index 0000000..54199c6 --- /dev/null +++ b/main.js @@ -0,0 +1,72 @@ +import App from './App' + +// #ifndef VUE3 +import Vue from 'vue' +import './uni.promisify.adaptor' +import uView from '@/uni_modules/uview-ui' + +import mixinsConfig from '@/mixins/config.js' +// #ifdef MP-WEIXIN +import share from '@/mixins/share.js' // 导入并挂载全局的分享方法 +// #endif + +import store from '@/store'; +import wskj_function from "@/common/wskj_function.js" +import request from "@/common/request.js" +import config from "@/config.js" + +import emptydata from "@/components/emptydata" +import comment from "@/components/comment" +import goodslist from "@/components/goodslist" +import wskjmodal from "@/components/wskj-modal" +import wskjpopup from "@/components/wskj-popup" +import uploadimage from "@/components/upload-image" +import wskjmodelclose from "@/components/wskj-model-close" + +// 全局组件 +Vue.component("emptydata", emptydata) +Vue.component("comment", comment) +Vue.component("goodslist", goodslist) +Vue.component("wskj-modal", wskjmodal) +Vue.component("wskj-popup", wskjpopup) +Vue.component("upload-image", uploadimage) +Vue.component("wskj-model-close", wskjmodelclose) + +// 全局混入 +// #ifdef MP +Vue.mixin(mixinsConfig) // 混入用于在组件中可使用 +// #endif + +// #ifdef MP-WEIXIN +Vue.mixin(share) // 全局分享 +// #endif + + + +Vue.use(uView) + + +Vue.prototype.$wskj = wskj_function +Vue.prototype.$request = request +Vue.prototype.$store = store; + +Vue.prototype.$config = config; + + +Vue.config.productionTip = false +App.mpType = 'app' +const app = new Vue({ + ...App +}) +app.$mount() +// #endif + +// #ifdef VUE3 +import { createSSRApp } from 'vue' +export function createApp() { + const app = createSSRApp(App) + return { + app + } +} +// #endif \ No newline at end of file diff --git a/manifest.json b/manifest.json new file mode 100644 index 0000000..190445c --- /dev/null +++ b/manifest.json @@ -0,0 +1,72 @@ +{ + "name": "basis-template", + "appid": "__UNI__7B80478", + "description": "", + "versionName": "1.0.0", + "versionCode": "100", + "transformPx": false, + /* 5+App特有相关 */ + "app-plus": { + "usingComponents": true, + "nvueStyleCompiler": "uni-app", + "compilerVersion": 3, + "splashscreen": { + "alwaysShowBeforeRender": true, + "waiting": true, + "autoclose": true, + "delay": 0 + }, + /* 模块配置 */ + "modules": {}, + /* 应用发布信息 */ + "distribute": { + /* android打包配置 */ + "android": { + "permissions": [ + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "" + ] + }, + /* ios打包配置 */ + "ios": {}, + /* SDK配置 */ + "sdkConfigs": {} + } + }, + /* 快应用特有相关 */ + "quickapp": {}, + /* 小程序特有相关 */ + "mp-weixin": { + "appid": "wxa54fb690ac0a3f64", + "setting": { + "urlCheck": false + }, + "usingComponents": true + }, + "mp-alipay": { + "usingComponents": true + }, + "mp-baidu": { + "usingComponents": true + }, + "mp-toutiao": { + "usingComponents": true + }, + "uniStatistics": { + "enable": false + }, + "vueVersion": "2" +} \ No newline at end of file diff --git a/mixins/config.js b/mixins/config.js new file mode 100644 index 0000000..c73fa02 --- /dev/null +++ b/mixins/config.js @@ -0,0 +1,8 @@ +import config from "@/config.js" +export default { + data() { + return { + $config: config + } + } +} \ No newline at end of file diff --git a/mixins/share.js b/mixins/share.js new file mode 100644 index 0000000..7185d1d --- /dev/null +++ b/mixins/share.js @@ -0,0 +1,31 @@ +// 定义全局分享 +export default { + data() { + return { + // 默认的全局分享内容 + share: { + title: '分享标题', + path: '/pages/global', // 全局分享的路径 + imageUrl: 'https://sbc.itanzhu.com/uploads/logo.png', // 全局分享的图片(可本地可网络) + } + } + }, + // 1.发送给朋友 + onShareAppMessage(res) { + const userInfo = uni.getStorageSync('userInfo') + return { + title: this.share.title, + path: this.share.path + '?userId=' + userInfo.userid, + imageUrl: this.share.imageUrl, + } + }, + // 2.分享到朋友圈 + onShareTimeline(res) { + const userInfo = uni.getStorageSync('userInfo') + return { + title: this.share.title, + path: this.share.path + '?userId=' + userInfo.userid, + imageUrl: this.share.imageUrl, + } + }, +} \ No newline at end of file diff --git a/package.json b/package.json new file mode 100644 index 0000000..2996567 --- /dev/null +++ b/package.json @@ -0,0 +1,18 @@ +{ + "name": "basis-template", + "version": "1.0.0", + "description": "一、首页模块\r \t1.app登录页面--注册页面--忘记密码\r \t2.微信小程序登录页面", + "main": "main.js", + "scripts": { + "test": "echo \"Error: no test specified\" && exit 1" + }, + "repository": { + "type": "git", + "url": "https://gitee.com/wsdzkj/uni-app-basic-template.git" + }, + "author": "", + "license": "ISC", + "dependencies": { + "jweixin-module": "^1.6.0" + } +} diff --git a/pages.json b/pages.json new file mode 100644 index 0000000..bcefb88 --- /dev/null +++ b/pages.json @@ -0,0 +1,167 @@ +{ + "pages": [ //pages数组中第一项表示应用启动页,参考:https://uniapp.dcloud.io/collocation/pages + { + "path": "pages/wy-home", + "style": { + "navigationStyle": "custom" + } + }, + { + "path": "pages/wy-bmfw", + "style": { + "navigationStyle": "custom" + } + }, + { + "path": "pages/wy-mine", + "style": { + "navigationStyle": "custom" + } + } + ], + "subPackages": [{ + "root": "pagesMain", + "pages": [{ + "path": "pages/fkdj", + "style": { + "navigationStyle": "custom" + } + }, + { + "path": "pages/shjf", + "style": { + "navigationStyle": "custom" + } + }, + { + "path": "pages/bxbs", + "style": { + "navigationBarTitleText": "报修报事" + } + }, + { + "path": "pages/bxbs_submit", + "style": { + "navigationStyle": "custom" + } + }, + { + "path": "pages/bxbs_lsgd", + "style": { + "navigationStyle": "custom" + } + }, + { + "path": "pages/tjsq", + "style": { + "navigationStyle": "custom" + } + }, + + { + "path": "pages/bxxq", + "style": { + "navigationStyle": "custom" + } + }, + { + "path": "pages/fwgz", + "style": { + "navigationStyle": "custom" + } + }, + { + "path": "pages/cydh", + "style": { + "navigationStyle": "custom" + } + }, + { + "path": "pages/tsby", + "style": { + "navigationBarTitleText": "投诉表扬" + } + }, + { + "path": "pages/tsby_submit", + "style": { + "navigationStyle": "custom" + } + }, + { + "path": "pages/tsby_lsgd", + "style": { + "navigationStyle": "custom" + } + }, + { + "path": "pages/jnzd", + "style": { + "navigationBarTitleText": "缴纳账单" + } + }, + { + "path": "pages/jnzd_ccc", + "style": { + "navigationBarTitleText": "缴纳账单" + } + }, + { + "path": "pages/jnzd_qt", + "style": { + "navigationBarTitleText": "缴纳账单" + } + }, + { + "path": "pages/jnzd_wyf", + "style": { + "navigationBarTitleText": "缴纳账单" + } + }, + { + "path": "pages/jnzd_wyfmx", + "style": { + "navigationBarTitleText": "缴纳账单" + } + }, + { + "path": "pages/jnzd_tcfmx", + "style": { + "navigationBarTitleText": "缴纳账单" + } + } + ] + }], + "globalStyle": { + "navigationBarTextStyle": "black", + "navigationBarTitleText": "uni-app", + "navigationBarBackgroundColor": "#FFFFFF", + "backgroundColor": "#FFFFFF" + }, + /* 底部菜单 */ + "tabBar": { + "color": "#000000", //菜单上的文字默认颜色 + "selectedColor": "#FF6B89", //菜单上的文字选中时的颜色 + "borderStyle": "white", //菜单上边框的颜色,仅支持 black/white + "list": [{ + "pagePath": "pages/wy-home", //页面路径,必须在 pages 中先定义 + "iconPath": "static/tabbar/home.png", //建议尺寸为 81px * 81px + "selectedIconPath": "static/tabbar/homeHL.png", //建议尺寸为 81px * 81px + "text": "首页" //菜单上按钮文字,在 5+APP 和 H5 平台为非必填。例如中间可放一个没有文字的+号图标 + }, + { + "pagePath": "pages/wy-bmfw", + "iconPath": "static/tabbar/cart.png", + "selectedIconPath": "static/tabbar/cartHL.png", + "text": "便民服务" + }, + { + "pagePath": "pages/wy-mine", + "iconPath": "static/tabbar/my.png", + "selectedIconPath": "static/tabbar/myHL.png", + "text": "个人中心" + } + ] + }, + "uniIdRouter": {} +} \ No newline at end of file diff --git a/pages/cart.vue b/pages/cart.vue new file mode 100644 index 0000000..cd54982 --- /dev/null +++ b/pages/cart.vue @@ -0,0 +1,515 @@ + + + + + \ No newline at end of file diff --git a/pages/cart_many.vue b/pages/cart_many.vue new file mode 100644 index 0000000..c062f4c --- /dev/null +++ b/pages/cart_many.vue @@ -0,0 +1,576 @@ + + + + + \ No newline at end of file diff --git a/pages/classify.vue b/pages/classify.vue new file mode 100644 index 0000000..ed7f1a5 --- /dev/null +++ b/pages/classify.vue @@ -0,0 +1,318 @@ + + + + + diff --git a/pages/com.vue b/pages/com.vue new file mode 100644 index 0000000..22957dd --- /dev/null +++ b/pages/com.vue @@ -0,0 +1,173 @@ + + + + + \ No newline at end of file diff --git a/pages/home.vue b/pages/home.vue new file mode 100644 index 0000000..cd6af65 --- /dev/null +++ b/pages/home.vue @@ -0,0 +1,269 @@ + + + + + \ No newline at end of file diff --git a/pages/home/commentlist.png b/pages/home/commentlist.png new file mode 100644 index 0000000000000000000000000000000000000000..af066d3498117b24ce7d5c638070fb23a03b16c9 GIT binary patch literal 54531 zcmeFYRZv_}*Dcz(TX47F8r(IwLpKsUxVw7@5JIrv?$9)r;O@cQ-6goYozD0D_vO~D z`*P~mdAVIh(R=q^YtKE`+H;OI#$1u=s&W{pB&YxY07F6kqb2|V0|EeGN01SrXMoYv z0?>ajZklpZfXXql1Ly&~m86O!0Ps5&?b#FodW_;Mujd8;ymSBe2eW2L=?wtPq$+%r z1bQ1Cw;^ScgFN@0-n{zP>byML)^2>~gejKIj)}3*1w-FsQ&j^Ls3hLUyN%K8XMWTq z7!st(`vE&7Xoa#%rf;jTS|RrKX!Lk(09sFJUOx(q9*Z59tU3a%HedLSV}Q=aW5i#* zKX5}o!!g9b(UFmnYHLIg^st6CU2+zB$Qos-&in7@{8?n6n!qOfzuz)HeG{EE6^vkx z6u#)i-Q7u0OV&~qlu;Ev;jt>o32aVFOVd+D@5}T(ER7NTg@gzqw64JfozSTY9lTG; zy*ivr!m6^PNpNgY;9K*qz%z1*Pt5d7Pt3li)bw5XP`7sbwrRZku%DA6{!}B*&0Ut{ zc{8gsJQVa+V)9a%qdat?bUrPTVL7koV^` z>VB42w!5`wsQou8-}@c$ueh(=A3`B|4h=cvKwRBH!IB|}zGGZ$I-iRXYm71b#wQD~ zZQ(bQP(%##YX|<}JhUTt+#5HZ|1>E;fV7{qTz)?AxQZV08|5=#!2m_WSGu?P-W1NW zjqYq9>?7iyyYc<^VjPGq0tQEXm80WcF+!pZD9o-;{l*D>GsAdx0^>>=M~q}7*H(M^ z#5x?Zw6&Z*NS9*Z+Uw6k@Y#fU7#Z?9s%!eR6JG2JUQ6qer(lB)K-r0<`pe+0VL)l? z!f_vMG2Aa~v;;jx@MDNs-1Catc#>Gd8s3kENlQdf&5|SHthnCABEzuGsFMfUsmrY? zwQL_76L1>_c1FnKaA0Gv0iM>K2Rgpx^%;^k^1}YzXN9X-4LT&{Hq!XH)tYk;$(CK; z$SVHl#ue6dB@_&l>yskLbJ#2aO2{B_>|n)>DxNlN%$)ltllL*&+~D+CPi}Dd$%f3$ zPJ1UA^ihgGDS}~vuntp&k;iSv-5aB^mj81VeZ9(PrJKI&W-bt1*Ot{5_$dTC1n}V? zDlq)TY0W#}+|sgtAP*VBreBZ#-$r+5!`NwpxsE$7 zhgdAO>vWKuEN>H{i3F&0^+rc*Lj&$NBdYJPIxyxOYI5u^R!3LY{8NdL>@xG@Bxc3q zqkPoj%_(Ec3d0|Ef+;n?=mHK56Lkb=X_H=tw9zZ7t~5ublCZLCk{~9a^Lq z(w8|}ziW?N%sGxy+a2K^N7vTnuJNz$c*y9$Ar=xas2Yv=rFXZQl-%$M6Z8hpZt}Vj zqVI@_NWq`RrBUcqCH_Jlz@Fl@!vFB-7M~?tblt=dE7JbC2|GK8^{nCo|FR2-5}u_Z zO;2pu&})^hNKK5aa=vab-H5GdGy^o6Za|FLGJ}jvg9Xkii9Q|ISadot z<&wZ?+@1)(%l2A1?)+;qc&E>&17M(!A^_fxh42Y!ALWuPuEqE4a=cw~gyPSSuo^qe zO;C3|8k8Mx-^qLmpe}N1*Q86hb;u7g##k>HSrUCVd1%qa^(n)Iyb_|$vQ#!o%@sCD zczi7(iD1qdj$vZWVi5M*%Ne_>OgNKE$~PPf?UtGvlQ~?|Z?)NnD-?FSwt4J1^B#!-I`a{1@toE)Q5F( z8eGAu>~Jo0pvRd4OvuzODO14RDC%9;El<1V;e6E@LHRqMvYx=cjJs*@Ug z#QdCrj_|P;9G``Lxyd2vv}5Vb<)O|zJmvYZtd#BSnC;H#JE;gD1Sd%+ao|HlM9*JE zy>yT{<3Yi;#8j*6f#H|rYh@h1TwLsxOQ>^lrzutKkIcI9qa&AH*#WnU)(e!ky{@Lz zazo@1q}%<7a^?P>eY_S%b`QT(chMn}>lc2e9HOuHI9dRgUlcGP^2aORjYu!=is+)Ai}30g0svdIzG|bPnR%ti-jH zS0M$y(Fh2fxqXqi_eclk!XaMXT|g6Wvy}PFH{`|wh-E>z(t!mb5MA7|Z9PbBOz4P} zzltOsmN5e2TZ%fni8y<_NXjwXdKNyE<+a8X^fDhrUVd+BxyWZUFK9U-!SwQ+;M~Sj zmUt5>$$MI%9n8#Nlirr~Gt%K>L)Bqj_M*p?EOZAAXdtS5$F^bk-74pgX}2-ivp5eCZhI4tk1Kewq(T zROooAOVdlTKkRt@v`2YGs(05Cl)Pou<1xl6{C}l&m|3?mK?YGU*AD;$nua3(oAph^ zfTr{&yx??bDhEwzN+pS-LoA`613elrv+i)-5aEAO!VbX~hV_EuIHG)cvUNs%MR9J%8~SL*7#u_|H=)oSa|0v1jDxz3vRy zkp_;4Bfwm{)ob*>8SQ;+T@EnKGI{O&kHeB@_>2S6lpVbn$6diWmC-`C>*m@!zfVQq zGEFER{xfV!)-CK1hUv-{S=r~O4tP^7@;=VYr}^3xk;g>wq5O=>l+Y4N$`Kac|M+d< zyJ|F*t28du#2|QTEki_Lzp;UFU#5rc`4f<@;(@K&W6gj`$Xy=zM@FXFq02wb_X?xS z?%iVJqldZScDSZ%_t_Vp@c+2^OMTHM9oI$vmANi_9kvN%m>F#rr{k%jocysOF)>jf zj$*09*ptqFq}DWxN* zaTYJLDJ=-C>T4izV1@xxwP{-lPcFp~xHPTn;8M?ey2f=q-;i9a z@u^XEboDqVvmd%qDKuH;6LkL@Hxl#^wjt<3>a)@@oKITmF-@D-T4n@>ooVySWHItp zyE+$y&Qo5;<;rFt{fw|Ma+16KSdE&D(T3+f!e>7|`?!OKbrKQ&Bn$M}px2;ki!m}L zX6Bz^XYHUsvNI3uC@YIwv~h~fBzFHRUZh!%?f#;M9_sJowa`h~4X*{5MVhTqCD3dA z%aB{|E#x1QmS!ch-7hpf?oEMTo-6TP{O#j+U(W>TC;|$X0EH_{SL>4{)c#S;{teiH5eIyT!kvvH9>Sv?bePt`@$ zNBxxK!7t9+$xJ}vy|eGFb~-&4F>y|c=sY02lY zk3Jk4c)M?)?N&5TV2|v!Q|CzanuP>16cnz1L+nRd5Ajf6?YDE!F4G!VQnmc%j~^Szu{ zl$oggQ?WYv17-ifDROT4Jxgy&-RqK1CG*~=l=?@=bGk|b{m|`bhQ$nJkZ~Yunu@)1 z`*Hj67n9dr3J8Vz?(lf`erj3~CuJonXg{*jU{eJ2w(=92Rziin5_763%3d9kS1@zV zTaY2q7S|Vp4Vo&gJ5q}cPU~t8!asfUxg8yn@gOd0o~yl-UpC8jX@NnFzp{^;pYx%2 zAcJsO?x>X#P4M5hrRfde{Sa#1Pwk$05e5eds=v5J$)daEZ0G)&af_zpk6NUBQ<>v+ zcyFevB=$@hu=Tsz=ayB_|NhtVUDM9h_{zn_%~-r>2LH>lKU^dAGP~7{e1dm94l-VX?Zv+C6 z4=W2ozZ$<8SJ;_Mr>j?qu1fs9pGg3(xFVb7or(U|5G1y>P=xQL>MkGKxF1w8)9i*E(AJ?zrEop2;*IWjXakE{0@&cC7sJo@Z*uB%OjS&O-pTB ze2HF7H$bQ6G07wcAfk57kS<6BgtVF^ymBq^Y*4e~Nd?JuN*rvzg)Nq!eKhf+4FF7i!yr#~V|KS} zKcRx_-vSMPi;G?V)}BuTb#Ekix$3oubw{~=e_XRbhFrKkh>6_|dA#yk4q`ZYIP6r! zR2etO8be@#{c}~c1zN|l19cZ%_@3y;jfH`n9WxLN2vG|lQ#KYk5SoCKjl<>Ycj`0D zN75LOB;96o;cp``I6ShHUA|MomurJRqs~pGWTXA}(muP>y>-`uA7VFOIh_Od_KGP< zGC5cZOoJww`Vp@N8f+sVHD2r3cchznXV4seId+@lm(JQ+k>)?%YDr;V17Rn9T@Fg5 ztc2!-){9SfLcQv1y%m=KV1o7$I{5tlaE3I!(LqMssu6bjx5xO;#rTN!-Jz(2_5*Rp ze}JRrhrMwd_fEgQQ=*<1Zwd-@9)7UOWTlOL$|9wY0DwsCdpq80eh6LY66^1?rmfWe z9_hGKUG!e%b^SZD{lzD4)N55j~jH#m8X zpJyo3Cmg6fUi4F9K1AW8Ap3wAvgO0_+^nfn|E6C@v#tSe z!aJpt918tStLB^abgsGgCVF6~Uw~~87jWfbjcPO7Up6ePAX$=+RHCI0ZB!Ckix(B+ zNmngAiOWdhjK<@~R4lae%XlG!<`BnOA|P56)&SN~@xaw2=WBlD`~Zr>7)EzBmv+?^ z{^i2JzQy0~@s2`WP_IIicwuK9!j_Aky4zjdct*t8NVXz6bwNGbZOvZXHoRp8_6seg z$773=*`j{tdn0M=SFU*vSNp?>Oj_pil{rH2r*}PA;sg0IQ9I|RSM4gr{@QiY9$H-l z53ZKNO|?&Tjsq01pZTH%=VMC(4~mJI3o4)yD#bXEX*7eMqv5Ek!w9-sHOTVhnUpXJchfq?nAO#Nvf-H_(4U-l?$i zNUXqF;GR94E!%}UiS)pk5Xl z=W+MHJzktDQKR(vn-}qAvtM+!pTbW$9E+0u>Gp&rDi1pU2|=Vly~JjVjkZ~?9X0cm zJ9}ohlz^0rWR@vZ^a~Q>zz2(_r_+|*iiS1jJN4gzFOP%Y@mW^XDbCzByTdS3y|Xf- zbedhZ`!+7>?B<7l5OWvmH#o|DP5Wyk>U$lBfJQKoCmk{L*_tcuQf3x*meQ*#iLkGo zsidyT7{+Kgc2{>L4vLj;( z+)wdy8lXYop(s;2sV#q%;5r_y#mEhQgA*`-3E0znVk16Azn?pC_X%@LAXX2&ebOm9 z`zgu(qrOIX&`_Epo?FO3cXOpi*od{l(jzVl$us2-XH#m6Ip$T{-I^PkmUm3Wr#e>( zTDL6z73a{EptqOP)H6wT<8}ifuhV0y zV*qHx${7*_rkoit#m0EE3mhZ)9%~u42BamDvAfK9UF81QH&k=bSr2Kscm9nQT2ix? zegAvrz+LbBSs!VYW14@AIm*=aV93A4^JFI!ODqnF!dt?z{lRjdmur5pT#vgUxVIa( z#}EG@RIbTwUo~Zr=$DE+8O*HkX=8yuJMU>JpUqS+%nCFC&KgBMDup^me{qI` zu=TZ5D|wYO3hNiX{dD3EKeWLC`t*WydghOf7|xU*-(Pz7sPDF)?71g@ksc)UU3lcN zo}fYk?uijYxEl`r;=F$!WBy%ksJfzo&W8Ya1MYYqh+Hh@nI4mjlCaX?;|I-8nJ)W4wG~B4$Jgq+7+%(rEb4*i*j>2+1@#=wLW}XsbsD`4ZRvM42Ed%D-6~zTCAJP)rLZ+(ct~X_G;i?l?*(8=*H)Y0yANt8?W5r(^(MkD^zllPUaIPAT z0UH$dW!=&iN3)`LE3_T2H&v@`=bsOnRO)o-^otcY<5^ty;#!QPemFIjwOWMdpEj!%%*3-_thUfwJ^48-GQ|hE&b*~;BTN?lbp}wb>-J|##+c4xTMB1%n;YYIx zt99$b{b?k*A^qr|vEpgBb(xtv6@HoU>t`m{vT_tzoEo5qF)!^JH$ zK5QLY)QA6t8sVNd<|IH23`q+1|>eU^cz#ULSYwXk2<_=LtCZOlbj$q$Y*-9Db*4{Tag=%V;>=>M_cF z7^0e4Y;ZgxMwFnMtc$(ij=%xzSN}bOspz{Q!N|lT5mY8Cbx~bcb)$@PBWz1sUW{3t zz7E=>J8j3JHFHHsPeh@$4a4GkM+~0(y&seHi%#`j*_-=&W$8W^*a{pt9e)F zXE;~y@th@D18oIy1h{T>zsh|>9PMf8OT8?n}Vzef%9fp`7AeiFnvNZe+fOv*89w%BF2`Gha4#tz;nuYys?gIPMyYVX)qo8;ifaLW<4dqFpw19rYYbBjfu=RDbb!Rhd>=9 z5gLweAFPE8p9%LDKo~p-Pk^euM;oG-U!h_T^Byz!gJCWNz=9@C(lK$KDZ{Y^IB(Pu zk^t=r#ri|X^;!1q2zL$ZKjVseUGt*FLa!zNhsAfWJ-a``6ha_*(|P~2d%iYnp;N@M z_j3MAS4IsUJ$ySe0df-Fi%rUrNbN-fu4aU<4K}j~?p4n)6_P-MNqf*1QDKee&rog} zqXqqYaeZ~y((g6?JKz7I>t(c>r~8aSprnRA3h+0V>6X%xfGGmaX&%GS{$-qau0Xg(SN6>M1%&838!rdRl$wR9?)Q+)HHF4b zlW~sb%XXavrW9tj6&fT4k>h#=m}zK~I-*b!<+;NZ6sQY3J`1QmcDPBwggp5^OMch6 zaa(g}hLx8HX-k!W4lo*3n9C0z`He2VypKKW=CD!*RdHq?zCWmR!v?Oz;=9$$xl}2O zDv0Q}nyA2;Y#WQn?FlyVZ@N+5##*Ab9S+cfRP%)Vu0)!)mm|KY_t?IJMEkC@n$16N zjPa+rmQKB7tjNB8ae9?RjWD2xCb;_po6><$3onVmW*k@N%NiW@ShuUnKP*ol35zu}>$5|e%&s7B0>UhT2PJ%CoQzygZR1fj(?iDYY zmDSG6@0g-rr4J--7C%%qrs!oT3+fEQ+>MC;VqFwkZF@XJmNBw9XvffO^=!neqIh5A zSDGR|yX*dyyUSTWqArh3EjaQ_Ai|BCeCZwiax_u$5m_Ne_qM>gn-L@C;74zX#QP8Y zXn+0VWjo8X;70Z#xJfY(+E}1q7&A%jv2atq)il+DlscP`0qfKETVbjayH>oS0Y6zG zeBk)Yp5{SwZUY(P>%oUca~iY3_rAv2Lne$;Av9b$o3PRpzS^i^ZN8b?;&f6R3RV4r z*I%!Dfj>Tm5uobG+>fwqGGRN)=N%;!^`!JAWE*s-B^E2=p{9Hvo`}CM9KuZ~t!La< zH|+2V6%l>3xPuFFX$;Fv$0+)8*d|Sx(4(%8e^Pt-e+s;i_ai@>S@Qq|WXar_>55}|AY3IYij&R{?l*0)R1 zguf#wFxVo(;iUd0ERkf}zTGh2$}?d*8@)f%;jv3ohJygO;CB(&KwLvL25d#7pt5_4 z2^_1_f{mSL_4Fwaqe1spqhniF6v9H`q&Z|1YT4x6%koP0M2!%i0Ic&!oze7@WG&!(Ma{uuT{pYT?OLCK~)_=xST}TBA`Ky8c@Ron=Yn${=$BvsFd!O_!Oi2t| zZt72K`XDd^#HKD&!$0mNPCDvz#@78Fi0YVLbS@787%q^0F zP(sgeC3*E))kVmu!!`&Nal7FxclkAR+od+QV7L(g>L?5|lc~ye3bTl_aDR|21}<@? z8pqk>f-9SkhqC8ea=aGZIBV8nyM<{Jh$`Veh9Rk&Wn+V#F*`c}h@CsaR5->Ky?*eD z!T3&~Hl3{Pozf)lM(?C&2ulZgr{}xZU8k+w+-}5(5 zbtc~9B#)Io&chjt%%}@VU2e+x>ybs3lyY76AmkPz3}~hNwO20A35DQ8toK6rih zY^Lt!P$3O<|=DNzaRTR6Ncb62wC8V7N5juijt0!|drTYko-~S#Kz~8Z@B7 z@Pu)y**S|zpmartWq3D=xi1X$O6lZp2IU{YxH6Kzda@;9iJwXmUGOlOun3n7RibWj znsf$Vs(yJY#EltD9EW&pS0L$d+G*^KnX`OXC0{)kBOJd^K+|} z;a|(62V`A7nNL1=frI}@KU*mu7?ANZI+~gc+w$-3wq4uDzC{!V?dzAVlVO@F_X0oT zPE&nJzBFat^49R|P<7OfF5ZnTWT zw69*IIkH@>-kv(CO+oVd!_URN2F5D`G?k7OD3MKc^Tj=TU2E=C&v-Y7TCeFy&PKc> zN`&vyr^(^`#Z~KHcf?LAe&)SyQ?}Z2clnfufuPrfdw0C?}L$;DTFRfg!hW}wFrSL5O23n>OKX?bGgrCkPY4MLF{+t?Wn@-Wu z4dl5|YASrHJJn%jyqkC#nc{a4#%ShstwJ-b4)D=)w9=UfPGo}G-Ry1TPMouctgx+U$qy?m+kv%gYj%vL=b`I+WjWn zk&T-@Lqi1vlyVxh4*bR~p7scGKk@0}9IZB+d6}!}81yzRgtDcMiu8EJdbh{D^&YDn zY*tGLMVe6Tstf$PcO(`0VYu=G%|PL2fJq?H2fSoG&uE0D7n!GFS25AL?3?J!+24|! zA~naKo&*hRUiCc%Lz(dpk}l5RaX%*;9>q}u9~RRZ&>^#*pFeSm-y}q~XD>>Q9mi$l zIPwcmEj(!2tMf)>Nb&}a=BBSh1!T1J{{!DWXQY!FUNcvJhxiR1)2(K}pX58v57?Y= zARFZ<30K}Mx{mRu3_xQ7(stOzUYkxpn#Z*iL-rh|07S_V)=REk?leIAE|TxXt2a|GM4a z#qI$Xv_`&U=~-g3H2X=_i7mymgU>sF{iGFnk5cW0nTUZm5O#N|y#b-B>O1+3dJ$m} zl$~iTIcCTI6T2lUc=%`Irm1$CmZRcjg`IshvRBPqL};t&-y=Y+f%0O>9)A3Zt3~;k zc$9H!B>^WQOA|LuJZmQz$82YQm;?jDxZ;D&{D~auyA7Mg4w)d&h+lor0!Ec5DFMz! zToPjbyQ$T>U+YYcJ~#Odm~|bMeMSU@+D@QDN}=@>>KJK~v$-TZp|-Z%U=pA-bjE-Y zp;KoG9fCL;M-0S(NOFUVp>>;*yypLZv;WgBndQlC7JjT8-wHWho3(M0i%V~G{7%L! z2qZ}OF0_>Q38?wLKqoe#fgylwq{m<>4xcvPx2A!W9^XP8U#~i#sWyG~Luyb{?RatB z&#>j>#6L8wp|*wTUu+c;C702>hMGl>%4X-zRvG=U@a1jb%RfRpRa~1mh}X#z87Vpu z`lYX^h|5nA3XwPE`MJ>QWXJjDYD0>~CwIrr8YQEPI4jSKFzY`zi8(DNN!;5}$Oi${k*tsFHb243ky`)LY3 z{0C~D67+=xPFPn!NA{=52(E9x7(#8zzVD&|bI7kCWzTuF`z;lVZS0V$Gg);}j@0_0 zPwf(Qi@`1CQ2fzVJCB%A8<@T#cHd>P1o^skcieUj9#U zGe_<||C&Jqjiu=@AvhgW>mLHqTYyTa(06993i>3=|6hN%#fQpysJpWlXG1O(W0>@P ztirOdo+H?h){vYWp5N7j74aR$W7hj*Ka^)IJsAXBw*UM~R#u5>5lw~(uQVSmpad8J zIs4B$`XG9S`U+CzIKA1E#yKnD*y6kV5KWSol*sn)aCL+Pt9dtN4)rB zuVJaf2J>GAYXzl#^D>MEH4st>(YBYcDL0L`AIqxDP)g|I_401dZu%O(-tIvBq_t1T zV7ZFhu&Zdm%P+_8Je1G5Xta3sdb2--f($$MxEx1&3p?})rt%$>RybgD=Gp@}p^7-^ z&1)rf?7)xc8fZg5Xj-3y;)2~Qg`7tI9U|QtJBHd)TAkZgBVRTWDuf8sAt++F7|ti( z_e>e4iT!)ew~u&csx7#!qJzG!4~@;ss9uS?-j7>I_s;U^w=F$MS1uubsi3ui>0w_3 zhE>8_5AnG)hh03#^~Ce>2_g5=z|G55Mq@u4U&Tt@5*w@SvCC+fD=G+Hx8Zo5K4D%h1q$OE*Yfmd;zpUx0t_rVqc+3l zy)!^*SX-Y0n|=0*o4BkOy)+gQRdN#{;|rZh+f!R!bYO;?7_GO3>NO}ApiGK{MH9ZLp; z)B<9Ypp&AM@w~OQR6@9lvaESQ;z=Cgkp(a ztDmRGiaj!xT~x4F7`1)c8_n3C@`IMVJ-j}h8Hznvj9lQ*$_^x`iRn?Vj*H%9LZzG$ z!xEn|nqw^S=ksq@>;6|NDIHam2>#NNk2~ay*?ycJbFa8jQUPS62%~d4Ky*2Vw zb-X?vT?)|K`t=4tWpqsB(nAJkdO3X1V?+@Is~Nl&f)ZW5?DDS+5_m zc}dZz8`9sej%LgDPglVj1((~YIX(vKZGK*hzf41)NO2-C$%Pufj3v)i8Xk2Q!d$3^ zLc17lSPwj!g537vstx=hG-h>Ju21^%1vX{Uu-QHSgIQl=Yk}r;=k?zKYA(RwcR@UrfACTg?rE6*RQf>oRK$GA@LT2FNHhC@s4^U3a4 zluUa(67hG>jL2#&qN1?wKDGNdMX@-PIIcFkLaPRp66jTS7R+LkpjFzdMe%+b#f5s? z@A!kgdocJ1{)v5TpK2MamM{3Wyxu>qYN?6t9#VS9Z4cb-VAMk;SwaGuDn?-;lp(pJ zeeQ9Q|44(Og_ImixVvPBV0i|c_ixrMzAH{;GZD~Yg(lUg+YoRN)JPA9RM#t+0Q#J@ zptk@d?Jf9^;;;8+2a7c&WoUpTZ`bEluXPWPVtS}VY1>0Hi6?*`2b+g8$w}e85pvm` z&q>ItO9dT0SLZ@aIAX59P$|zdt-g1K)=XStT)z)6NLjX`TlR93u5_I7D>k`AzD{N!$I> ztP|)fXGk1NA-c3nox2n0Zn;B8fd)Xb_NU;nj)OyZ7`v1BAzSZtW`smMrQi?1J}3&| z(61la?K)npF?{KPD<0E8f&q2}z8JjtK$Ui~ay-^=&H#@rArFIACXPzl*Us$6M`#U3 ziyh3dRZc)MSL_8*sr227TdWf4P4sQZ0B&dg$(P0o-QV4_;zPmDcfy1q8ZgZg&t{zX z4!4gpv`-;{@J!0Ka97&4TBRxZwXaKpyRCkAjykV9C_V^E0FJDzIW!@Gwj57_8SbHo z@g0;bE(iaCIO@s~1+2TjD@`>|$}jhNQuw6}5?C^OaLsWghgb}ZJib26ThO|O17BYU zbD%ux_7^mE=bWaPz6)q^hk#SWca^YR0ol;Nop?Ee-GYtMObG~=X0ZBTleo*JDEvo* zMvmyEJHGfmgrw~6N(jZKOu$m$KVp^Y+V9XmjQK%Q=v?A2@_Fk$VQeg-LRbmT=7TdP zpzwzR*6!2eQI+udgg`LULzjRWYDPZ+TSmGD>Oe>fks4!9i( z>`Jx)(!Y{cX&I=cFF}hbve}nl=i`l+h^g3uPO!mnU!&(0Bfhz0Ue3qB^rM()?g7vc z&p9q=#RqAHJeN>%BDcpeAwUx@xe$dSs^8<{Z>_?ocP8njpNR0dFcM(5TFkSVqcMmy zV9r?wy!Tv#1={%5-r+}~7n^|p)>w|Z-VFkU+>0)@=qAcwu|()Acz~(i9K_>jol-sY z?A~=eJh_U}eQM+{~%tS(x zpTC(mK3kA%wc$p;3t{%(aI3~-n1^Do3(VB%f|9(SQ^V5(>3j~%{HyNMIBj%kYO?q0 zvzx#8B-XWx8uFrx5#4|gL<9qyb8qcTwMDJ59sHc8>{j@nJHpYaHh?X80e3(m znnz;wOrvvV^_EjmV$Zs_W^fL*i2D3kwrk#qKX}T3 zu!42KEcjU{=&L})T2db6yi2?4)>GVeAP_bD>@`jlS7Xqo72WM3t~3saZ0H^7HwRQF zZ;oeY#>FSD3cfcT(VHB$gX^k|&-D*y?xa=m4(yypLLg^}qdP^sJvaoyMcWHkU;y|TSWNwhf&1+~8|06Q$`SnwEG|TOrgjyFIHi~# z9EpXvBc1eQD{$dHH3=K~k!8CuB%Z`3N{ySUvY;If>oB!Dr=y93#)x&m&~22ra=LhQ zf=^2Q514j^Fg9KlLBPfjEzP*f!?O)0;gCzpWRav=zu8Cmo;cvwZ_cTXr!@!*yanY2Vm4-_+r-}ZKK9e-ps4=*0 zGUKzq^+-v|>cHmabj2OIEI5`A@%=p3vRJ4L>wgFSvg-bY5pdfZ zDV;Du3EgC#<_}Kur%?kV^`iWWn@2ZGGlLKJR+HF<7HBz3i&gF$U#5%)(_n(grEL2* z)g*DSsN{S4r>C3rZh)oSy&1n4pVS4P)c@%3`vDXKCTpi~Hgq}1Nnq&}5oQ~Mu{NjD z)Cucw^OaNS3)&_Z6TFlSt*xXM0er#x(n-xJ_WDWUGQo@-Swa);kFsK1Qq!$8XHsqu z_Z|1%uX18qgy0U=bPe{M{eZjGeb3pAZ=F~|Y~6i!2qVe}AJR=~FQNXFwje=_EczKg z31nx+!k2>4)7AaUEIJ>TW}a?*VIzQU7fctn9jb9wWJHh@tz0arB_G@Zp;;Y4(O@F_ zq~Q}_9Y&JDOd$@+-)6q)wE-V|?~`YcZ7*5&*?`fY<_uEhk3Rv1KJY%X;KUvK-~ut!BWs|>=M$T2n?pvyY|A-O=DS@Td%5Q6zLT4xOch}<;JaZB1@ z5UHLBhVC+>m3AEJlATyAP^rzSSoi#saUa-kc%*Dp-y81a8n}a# zV}AZwzY7Frs?ipNBm^b0xgbC?)zUun7PPCgOTd{-I-i#ZZ$fv@?h&xs{N3TbLBjs< zy!|Kugc097;!zpUqKi#K+Vky{YNO()P1vV+RuS6XRbHI%nOKMv1^~>P&Vi*h0+c&w z`O(f!t)4;}Q-kstSfDFOLezs=c{o|pTVaj%5;IevoF5(e*WG?ej7XTefB7j^(^nv%6boTE2 zEv+=0VAM*WdXb!!wUW>*sWKv6@0~$H<^Gpo>}(V_waD&hG{EnUep1r-O^;^wkXY~b-6$J3#=k_%}{Z0;L#HG)&BOsC`l1iOgVD72s+1c-l5WyyEx zJZW7j>2^T9x=%kLM9L2SFwY7WbQy82e(V0ZmvysI-AFI6<+Yp`cYkzoiGuK*B4HF2)Vq7D$5_Wp%@zB^?n_ zFayAN25PZU4UlEzbx^7RxzuOnP5WF!zxJ_cr9vtG<@NWwDwl?~671QC7 zm;Q^fLtU)5qh|vZ6VqZhsM7WoB(vk7N(lM4hr#;i|KsKaDAl9Qv#39$3ZSpo!?yx) zn7=Xy^7UpbX}{^!S^VKn({(ZboPoeDR^yspdHv}!^bZEBdqDnmOc5OueYiS zL_&^L*}d?WevPWo+Eswasd9tbcV$$VSNSq++EhwZ9tdoW2cc`r>dV17yxZm9k8)i# zrWq$R%_^ZM*wLi?p8Bls9GDH zWLVIj?zhy?OCQdp&smfq6(5N7w-+d+^?pN+&JH((16Go~e|yCTv_1yp@z?E{F@-NXgGQ}HDDi5WgFuv9x#e4#7e^J2b4*Ceb|#y9DQRr z;XRK*09ovJ@(5-l6w)&3C;#n?-*w#+-v8VJ;}&obWo#O3Tm4eaxG4DQHArG>z=O#w zkR(K*vl=?cM}fhC#}}PF|Mch1sG9fNOZ3<6enGwG0cj!mjqs9>uQe&js^25jc+R+Q zOu*dk*E4S)Z$#HGzu19OX6%+^{ug_19TfHd_x&!7bO=bN#F7Fk-CaxUf;1=ys5D5I zbc3*jG?I&eBGM&Y(umUCx#W`fhwtxqotb;)I`=vE+}F%CXXgCpfb4$y^M1cx&&T6k zBY{jP*{SB3ev&10Xq6-GGr6VUS&Wf`#&Gp6l6LH-Z2EzYe%m9htzi7!w_O>8lg83F zoy^s(&&k((wcrt`tGPpmk}p>1=?V~Z=ykJOx*9%f;`5D+vt28u^8%R?0U3hcZ+#3R zmq*OweoRPuiddhqi)v@>B~O=V&Dnxc#%(fexIzxg&lA;;Q0-rxda%dGo^|~5F~pvj z50fORgHdpDm5Yw=3fi&6b|~YVdFH_p*Ne1+#ET_V4lGjULrGaO{@1a%)S=#ha{6`o zkKXDlZMYe65qZ_#N0CU$^j?mzT#ZP(8w9UcP_QgLVRMv#v2HG!pV_#I-?I5M!;$rb zIz7vs-=_6;DT~-sWX!Ye4NE#iWKsV|AZ9!1#Rz60EzqteDNP6r#xCgqXI(Mtq^ms_ zdnH4p@_1Y4=GTA*goJ~JfI4wgm0Zv?4^O4!s{~<)2QA|e8C94eR87LEJS`;A_990U z0)r2(EVW!B3C)lCsjDsoqC8i&zI%z2LQCt~LhP9QUQ6oCPV|cJ7cx9p(owd($P*5i z$#*AV`o=|9;%wf2-t6AYVJ6-->Ron9dU%vxy*<--eNxC8HkvtnbAyA86y?OQeu`1i9T!tLHM%5z zkYOeD+_XfO+Uu=216F)NH*+|eG(+X*<3%rLFbiR%m-X1tLML1TQ%QJ2LHjZN?KPxV z&Q(hIw}vFFJhL-=ix?y?(y|O0))o!oah^)G@5$@;^Mp7(GrvSc~RY<`!v z#dpSPcnV^gV=EY{igTamb@p4Xz18PGviA$_OJ2^K=3|MNCrieP+={qKZG`goKh#EB zHPJ+~73=f(%@xS87jsU`dDth-V0@lul)fZwA5S%u;21+Er@h7{wm_|70KATn+yta2 z8W!kOcYc6Bo{5@HsZ|0JSG>672zp$ zl$Z6}cz&YONpIsfIkmIesS2BQX(iza{J<+O|CbYQ76Fke-)c{MgQ_ z0?C$XskRP8#|C%q6-1l~O5WCE#M*VlUVTsf%`Qop?LEa-nU5mn;R1d5N?6k~Ny>py ziV>bP6LRwNA}SYO@Cdzh=-AvCGNX%?d%{Vj1Ag{Z)`p~(xE>ed>P8BlDKjB_hw)+8 z({I3b2c9l-S5)&fYcU=4}Q|~h? zfCk2wgz-N=val(3s524q4r~<;_ zp!OnkTX}U%7@W~&Ohu}D%K zA5TclV~!K_wQ6WdJs1(5(kAh>1#2LaK8RS5!nmX`wivD-b3~W{MZ%)JGf@^b>R0_L zwdE5doiy9#LV}|YhfXgzp*SE6DYv)~`c@m2WR4BNg?;XYW4W&0xVLuvk;{fKJ2C3H z#Ze69{-CC!xa}djmhq-TW$kH7xsCuHDH?X^lH&=T{xpdRiTwE$lsqtBy~(t^dN^`rx_|X;6*GjM1l)C>2Eusn9;i##vMJdxg6* zEIV$Pu;E7M=39{1&@ahp?sr;n@XdCPXfidSF2!YO-lVMmyh$7FNjc+Iw-C9`#`Tsg zL2=M!|3g~i(vv!3l`#bzNXG9P;39bC%z4d}pW+n$mu`?g8A#nURKW9+L#C_vFt*u`OJ}jtM=i*HAJVLW=%_PEPzG zW`dzt4`s8L@)8!3X|u@X-{Z$Xn;Agix7hs^YK>M$f&U zv3DqYL>P)C(%J+SeikZiSCBaBRG;k|<@mG%BmaATusRN6LKB%X^VL}lmp(yn$ZYp-~(_LKP(r}0)cepkSc~DnROc<}ok4H=V_$2v35k4$Wv~9!$3wEn_qZX3{JDBK(9+e~=ljDd_}Bs;ScncW;ue1(CHDfga?bXBYG33pNh?tc z7JlBNINkx1A!uHVd)hB59f4igt~!(w?KSK|PzkjEFL`YI#nt%8Q+Hq?fR^*pNS8?tT9>6jF6k zvUTm!G-OAAw1Xg`|It#wx{bz4OCy|3=N`FpEXvPmqx4>^GJSs}r&?!T!&s-buhI%R zlMxWW8+~zJO)g7vc_HzKd{-mvyr?&X+(Q9+gtHD1ne~uIFJ}uj(ow&!M z8R5X>A%KtSU;on=Hnai#yV0#F@T~c`_c4TXbDS%$XBU_mmDYf5wAcCwCG_q{`TbVo zl?P7#`rOqU1MD_p52!PHePa2K&(PNjziYw`q6$0Q6&T(t^46kre0stMK$cbrUIZn; zVdRk6m-V0U3fz<8mB3GsuhZW(%gzD$P^2MX;F~EG^a^gc!*=qME&&MfNlKu%5BCZd zBU!Vqz9tZErSFh3@agaW_iuJ}CR2rW-Xoxn+8ieH8uLIy^s{6hG;eAcEo zf9Cq6?URNm{cT1qU_j)iH{5agIV_s7bAU&v?y_*P(&azI- zgtfi-cKMqr2@`;%LVqvpl{JvOt$IByCaUe5yQ_A8atzl9q0z)t1IVnhg5hOZWH&Km zZ*WKUM`P@Hj@YYNu)#@_8Q<2t0^k1cKQ}&J!$o5y!@pd{+k94A4zd&OK{ivWlN6LO zRo`uXdld<=TcwvkT9}uMH&JmWrQbkkW^mu0MSrO>wcDdRu^6 z#93V_HSdq<4W2WoZrvri$L0MHIwgXg2Q9hrvs6E;wTcH;ftU+UUV3EK_z_vXU7IBG z^h=z>o3?xKUGFLOB$hE%qoqF(2wDvRQY2`G6ymJ_hVXKi_C9F=?C96sivJt%-E`ma z{{r7U1AOdkMeD71sd;OQ@Vh^U5i5*-Cy8H7>Z^A9I|X7GH>k+iA=y0qEf@Lt#j?TJ zx|L>SNJ~H|<$?fLet-*C`9Zc;eN_0?9o-PD;8qFt@}g9 zefCqNi(jiaSY|)unfq+Z#C`IA*zfMs_YCa$J<7D@4fgLVGnw4aPg=iA#DptLa1;8> zF#$1UgQZ#QIhuhsYx%-WC+~64ps8RuYToCdK9ozM2S@{m#wXSf(K^)0?zi6gdkmg4 zrShBeWr=&dPuK$zG`@f#lBgy!jy3Mvi$d2@X9!%R>10gZ!6pze3_yVKl<~Qvt8ua1 zaS7dh>>PO$Pi{3?@pQ;&_*RK;+glT0@Bach+f)FYgTovB-7Gasp2M>5Zrw#UGStDD z17?4UdzzMuSjQ4825a9=X-QoyVt6eE;jFG_IKDRn*!y3fp1R_z@JKvqGDwv6OcwXp zcT0~!n^EW?)oxyi6YsyL?%x1G4Z1cUoTPUP-q5E1?%iZEb6$hz)RAUx&A&B9&)q*n zxz)OAywMys1hFdqQN}MxdB$x{X#U+Nt4U~!yfnk2A@4r9euMV7u& zpr0Vr#$ocD>FDKO`Vruc*iZ!S%}d<6*DS}-cn13U@48Vb?^8aWzAC5|xx$YN4Gndu z@b3sCbm-@r$u9@eF`B>uUOUsrpq`SiYj1!2_b#olfu z)g>}f>pzljnzcS+e0KQw(f<2DOJAHV&V8WhXr-s|W(06X^j~Jb4t#DiL`MynEscHW zTBRG~Losxe+(dZvinZYM;_s9FlIYh2QfYSYbu>AvHu}Mj2Kpv#evkFMHuxMo|2nxd~dsLB=Ow&G`It*E_GW z`k~L6azB3UYN;|RmaCR9Ol`jdtSR#S=jfZ+dX)Jms_YWFaYvQj-#pU@2Dry(P>T~j zBz(kV7h_qt-dZ&@k)@ZbO%r*9tZBDh5ban3$J3EnNa2aaI=zbtp2RlW{Co&S1U?!~Gt4UKuXqdGJxTlwU)J_bXHR100L*PtMZ;{GJ+0oXU^_1Uvt(#6!}k|ByUK8S^U@vren!R*1by=uxRs?+mAz`^#zAOqbg~%eF9_@qCzfyTb5$HyV%OM*J}- z=I4A~kd_nQmxuQm%Yk-9BrX3INy~3Zzz%BAn5(%xR^Q!qCWtqKDBi zcD+Kki-d=~du&%%Q;8pl0{F4Y@6^uxPjliz?0VB|?600zRSvZF{(L~(x0Dr`1G1`% z3ddr)pvpy)wkTjoC03Go{`NP|#_2au=hK)PGTC^6K*A*qQ5n2b-;lhOWJLKWgz>v56=R4aeAbg!q2Zu?K?xM zuy$YAqPYd4wS|T)(si)D5+Q`Xut2AK7p=xNg!A&tAqM|G4pWdFo#6E^XBjLKG`1@rF%5=l&md7MA3cdkML;ZJ1D*zAbP%={ z3_+etkmUNB9^oAt!8~g=vyU!0nl6?b8dpMR8P?0bWlXjsrw5GMF8+dO`pbm7An=w> zylBDw*8?O0f-Bs`!t@Znd*J@ks3QPpVzgF4CX0-e?Ua%wH>kEpfWlUw=h26-c64ng zKHB;5Agn1g{jk$O0!Mz*7e_#a3It|w0Oulnzq&B)Q<2G7|Iw02i?Vo;{Z0x7-;s#g z*<`ql_ZttpE6OaZb}FO$bknlCgPdVf8Q9w~S6Lb2;PEEK3G8VeLqmY4yjHmZ|H4BU zo^gp_y1(vGlv!2f#*t+jLQz{%;MQNX$;16GY%AJJT7pM^lpHO1No1qoO(XM@&Tf3` z-Yi@M4;~ut;tOh~CljyJh(_dOUbj#{$kkVWvFrVdIIk+)p2K|y_@J~%Y+q=~p9c5U z6!t?2qo(CX+bidy{7H)5nBUaT=(~GfHC5q{Q^~_D+78p+gD?##aHKrlJpH#Hptovt zCFF=g)(s}{v0Olu{7J1S4LXpXH3O!Fd(IAES>5lW<75CIRf10dJp%$L`~FD3(VTa< z?P<|^b==wqwWc^ol@~Hg`apDhJ0b0HrMGhYuguQ4{L3*+H zbQ$$c6IaBUhp;7d3@2Da;1|DDSv`7{tc9W8jdeT>izcf()h6p+#d%2t#o^Xl{i1tiv{=T7xuhQefThqB1DPX z9eZtJ>taSgLOXM+>gWf4e{Ul&(&8_@c9la2UFP*W%!!rRrng7^QlpAn{Oz0qN^x{s zxoB)@(pDFP3F*Ul59eR$q>BP9YDgW9()W?14Pd5-qRGp;jf z3#-XMLOrnm7TN~ylY_ahCIazZYvaity;he)f*@YZNygt=i5uNb>;6V!rYo8+nl{DA zOIn^SN&bDIjq)N-;M%zmWE2Dh(ko)zhJN(<;v^!SqIJ+3D_hls*6Tc$5{m#O%*0%~q?M%CvOp zOTgE*1&q?>bn5i(9S(;ZP&w^iVY;%XfZnX|#ua>`Z$&0g!{GkPKirIL^z##(4hgaj z3U9GzGOlrVoAmO;VPu&dhaZ**o9*+n1s+yJ9j1S=xlpWQ4y}Ns5Si0J!jysbps;nm zcAY22U=L{y)C(Y2DS@G??e3?@``He~;(Kq*$&Ja(L0wM%Gk;dS>h+85+bv@CCJP4-H zUC;jy2)=vm9)c(QeZ)+r=GI)1**(4_ALI4-j2RGl{qd{3A~m!lEaWl`ZC`6~Bk05# zVIKf!{AZ;`x&096cfYM`J_80c5&y68qN9ArJ_Bit99F-)dAIqm<+!C)_ZH%F+)+;b zR8?N)myVk@`=McR#i8L?+8_d^wjGRo-{F2X@;wmdaGWSm4c?>v7XtrI876#oOX#$>YvOI4Ud$!z4Q4B$*KQZth^V)J%*f7_R_x?t z^u?2)Y7hBPGIXj`(G>q|iYy#k%5{7e_Z_5H)qW=>IF6$ta3ON^+dJx|uAJ3|yt^zx zm&x<}EKE4*VH*Y}6DTUL+F$8*LFPlNXwI)r&&Dqf=t{XE=e@##L%f%Gq4;cnE81H_ zex66>e&R9X%#KTtJH#)1u!QzKi~TlZ(gR_{@iKKmVdv}O~U?48Y|F;aH%$V`EV_(g2e1thuZIE*d}fcO z;lGB$(XuX zdLC3-9rH&^5+tGqn>e(w*g}Q{=rEp1+|dzJr8yH?Vm$YMm_XqQ6ss-Nu5r~jpf@`~ z{0wh6>6uZ7tSvloUE@${)DpV(82W0dy4y4M@nP9XB3LKwmp{?{`J_Hd@-kl#lRLhl zGZjzmZiN3DK%LXFDgsB^f-tNBc7w=jn{@fXG6gaO8)Cuf7KokA*5h7ABBO_Uj7ztH zkxVlCqAoIgM?SnTrc2gcOp5UQ^|Y*hMfA0a0?!1GYMd z*ixDX>I+Q}B8uaaH$TJXx?xhY=VNm5A2%q6Z-{|wv#K{!G+f})=>#%QL~2B-azt_A zLTPH>lT!&G6(S*_6gEPTCE9%`{r6Cuq2hoZ-GI^+S157nQG=AB*z&T8-?qZW2YEXd zzRZmMOavp}SM1(S`3_AuKX4&x$I4Mq&`opT*Yc$d9sBglcjUZpM3eifVZGt+8aXSv zN^1AKIC^keqIRsq@4g5Y^@a`src9)CGzZJ;$K1o4yzw!f`ZVYDUG|IdjL`RP7>ts@?m}toM0!S@mO`Au^}NNPDZ` zxmJu+BDf{D^1!{yvE5$XYM{j)#;|^m)dOnSe~OaRJpV;jOh9@Nu1?&zFumc2cnufw z=Y2-S@5ZjtPBb^pBROFBSK*F=kuP%J(!Lm+QihByGs&mN{~|_?PVldx01>85 zPtzNH)wfU1+)>`IanhT;vL903oTwMTMsM?P?kj3`qRp{zO^Vp-6~ecG>6zA19Rm}; zhA&0`yI2ENMfkp5O3Uc`dlc=p{U_SVD@1LU0-)(I*fpVmRqML|0NH(wXRS`(hVh6- z`upH6P~2;rVxE7tiMG{}TlsFz9A%fLiDg{Sky+t#+~zZ@-d_F=;I$SE>1lfj0mdsf z)tsc_OQ0aX)5iHMr(?gQ8|3>*tc1jQhWgrX*>m+NRI`;jwlpj!5|}QRU)9!UUo{OG zya@hPr6XIh>lN%nzueM0GYD;>YZ`CLc2PZN*MDaC4EY@>E{wg`;y9-n(CE^>YlMGZ zoo@NXeGUFuLC0T2aX6__~S?Vy^d0 zBXvEPF?q!}hnC=;!LwhOvAUk_vlh*6NdY{AkXV01Ejtf0fqM$?^md;)zQO!KUk!k* zd(Xrd`7(3V{)kFcfAweHhCig|;~O|V5%xq0)K^Ur zuE(tY8H(AK*5mnW)&xvnP+Z#v98FXjF^2EUS7sd?Y!n;N+W=c&Cyo8nKdC~~)=jy+ z2Vb6?Q{fHsH2$`9FyQLT-75ex1n|ipKp~f0BLetC`7musy3;{N&1;cI0P?ci zef-*^C!L-TFU%&z^ev;iMGWG5DV>~qtL%?Yg8&%%8o)#WH$E1CBmcMlTYNju8+iZC z8gF}bi~$2Mf@z>$<58)JZwkQd-!x6n{l|b=HDwIdS^tH{8j?XXc*>v)iG_&0oMoxh z^yE)_zk9>!cwbZjw3yEUG(6TLqvfar=clLTMCs1u93KENk~g(frSNMv=k81*Pc~D7 z?F@X}I*)Y$C+p80SG%SU$fc!W?3IGw%U4rt%lonS-w@|rlKtqZ63zOy>02wGrMTRq z3@Kv50QP(Ky!wo)Zo$i_(Z)}}>=A#`df`|ezHGD|O@Kj<#n}I-Q`Un$Uh&LnOS`^k_}Be5 z0Vao!QqeeAD+SM-=aPHvyqG-wV7n#ZUDp*@50;xcANy58396j@?2UQ!S>VLoljz=GR}=0nC>8NYaB_IPu*{Eg zCuKtoaDOgX(7l7e>s{yZ&+CE0ImuO>^g0JM;3@!+a|Blj1CJ=DdJTUnFk`CFzbC@K zEHvr>AUoB_C=qN~g+aqiS~4xXzM4YZK)i(Gqb$ryc}WX+MVZ~x?LyCnw5FGs|Aom* z?bwFDksA2lh1szuqX5Xgk^q6?4SvHG{00zH9~)p#UIUE0E?=%UU|U(6KVV2bb8S>R z5A}PS<@e-sx$wU0+kZjn+km+xvGR2dagpRgti(I13t7=`nsXM@V8A>vsqSOKeQ$2P zhte4}Z{%ps8ko~+5Px)tCs&NJ?gc?Ae7oL1gg1Ye{5HJdBV3!{@sWGcB6A8nAr$PI zz-ec`&$k~!ymkJAa)&q=L$=*pSnfY?!@Wfpu=tw&cTn#CknR7fo3VES@0BO=B`HeU zelxj7yk~1M?-PS{UZfmvmCj`j-Md6EJA?)*+|$ONZdJNNm4NCNsh=a##zihe>}O}1 zbq|2A%Utp>KvQwg} z*eZ4>=Fjfcf6N2Qy@2DX&$+zZWwm`4|8RB>UASrZ$EOw7o+{>HB2b* zPr*U?J;@$JyH`cey?T_$yV_av*RMYMZ%&MNz*K^=6+mxW*Jn!tZD>HaP?y72F|~!a zkxzVnj|#evcqmbs!x0gTyv5j4bZ1Z)VD0qJNz++dkpLY%7=S$ z{Mz?8ou1~A$#;v11HI2Ru5X3qcD{S&zMIKm=n#Yr<@LAOynTo|ddpsq1&0**JqCp6 zvtK@*{XO|T#*4l*80(r@YX}?lEdG+S)btxt`~z?UpUo5t{*6qG1C%Ll^r^;A_OHL@iPyJKlN8sA&r3Z~}-10%zK>(9YfeALpfx(RHq&IjfZlrf5puj~(H}jaT@lEUg!dbO zBdKy8tEbc*tME^qZ;dN6cyHz{J_VY=I{GWdrbf-)KL&x~dExou&tT-u`9h;Fav<$q zTAsj><69-ykmIv2O8x9zTBFvnzTzK7|BEHkjaJlp248@=*BXV_?zf&*fDw0DA{+Xb zb$m0zmpF7OBLyC{gH1%2_Lb+NMLC{f-+Y;-l4_#)_U01=xI!@;hfcvj9LHyymPiaTakkm@Y(5qB{xU$ub z%?UH|$qfG1Yh9pgy|R3H--rD^EVUD7^U2^Z5I1RfGYPg^XlWjZ3B{*MG1xSAY=+&t z;5TvtT4p_0V)q}#%5l?Dw1q$1m?|?Eo@>i6DiP%xos}u zi5VL;zAwj5!tNBh*qN$K1vuE>g|NLyj_d@$s{UfS#-1As3ybe_quUnCedEbXxv(f` z>s|m~8C<$f1y{!+0IGQDq_*U;yy;}H6E}r)Qjdzc)_~TBR8#|iUU&^y%qnrd*#|JJ zId98Vnl<+yM=2d`evTJYL1#v$VDGmsSOAS(B*4x0mQ}WZiKQ-bF-S@F0Oj;R51=sk zV_Jy zGJO{2+UL{bbertN9>#!K*|B)4y+{`#cW6P9@W+5^Q_1~W*tUGJR+dSz;+4!q>$g`u z4bL>{QTb9ykoyK42DdYMK4ZZ3x0Bt!f#LVgl$47{eQx`!GMpB;_#?`~jG{64q69%7o%bG-$Y-~6Q0 z15)W@q^V!<{1}O?ET8Xt9mkbE5p4Uns_?$)&DVUb`T21Ur^ljvz1^qlFkAx84m1qx zx}C#>P1_&G6GQKh*MC*S0Qbcnl0@4@T1*H@7LOH(AuL5qBitMG!FR)lNr`o)(W5e$ zV2e!(6mc@vmdb0qjFMN$;?3mi6V0X{+p#&y?Pao@&Tw(B}pvyq8Kkh%q`0sc766+ejSk z<+N%4{O!mvFABt!{W%3EuxM0B3?$*d5ne|GA~Bc2K2+t1HIme^*o)rj6K_KoxX|$C zgjB4F^#=>IUT$-z7Fl_HNpSf6C4GQg+CM@pcq1E^E?L@M?pU^Y%5x@K-etT<(}7K? z&dqF9)IAfKYX;J6kDcPG;Lrp@6WkCg`=Fg({yl<(l-BpS6KDX0St#ErqJ?_f6S#sY zz~vfjL3k(jeeN-w?_GTeD&g98H#qv zWszq|PSs>YL!({Dyn?ne+Rbe#1sq_DAuHhPTSGG;3pWpN{w*q#}!X4tG_E ztpfm(zcDVc3IoxWEGFoG?P;L&=*UK;cO%w2k_+~T7ehY?!OHy zEJv9SQ9q{4)YAYMA?(t?)E%x4X>u(xOQK4yTtKnxT{sI&pqTs!GVFY=%k1ODu-NPj zCM@acwhD5MTW4a1Y(0yv&0&fwPQxVGxnnw=G}IsiPwp8q+*FI#~O4#DTg9_LlJ7l5_Ks7M_OF87PxHGT37g#VpauD^cZB) zqeSedg$*0rN;9zYnMdnO!b{~X17(8ID}+5IxQB{&xonV8!zK_jbX8=Q(x5QNnT<{i z)E_FQX86WLM9c7~R=R)5QG%;&n1rF^tqr7J`?VBwOZaIl^Y~l2{A0AhK(qsCK3eUWfQ2j^*xD8{<)yeEMe^UFKSsv7aM-Wn*gutWU-zlcRQ9s$e4N}} zmw1p&L2plo@KsJHHOQho&O^*U%M4_!=3j1mBKEGLgS$xL^cYYufU(%LVGxS=wgY>) zY()F0W8fR8f0nddru;$wNc@h7ImeM-ud_55tHUFpH#@RqRoE=7-m@2~0uJG8>Xdv7 zE+Lvzp@K(7#Tdw33#@BAZF|DF4B~P)K$SxthxE1^%j-r>$BW$Fg=X`plD4Spl z6MY&rnusQhOjg3)aJpHk|~{qARKp%rQwBHDpG#R)r$Icnkl>S z*S56GB`+sP_oI7MiqSKxn?naHr^J4cK#Co!{Y(q;rLN*WiopsZn>=$pu1og7!i)6o&Ouv%l@?%L*VT-NN7OoRdnhhZudEtjQCT-zP zTN)+N04&C?ku*BLx!WgR#8)kp_YOqccATd+r(RRupTi=PoT^1{E9S?_NS$YAmgtcu z3KMe?d)dyKQ;I)fPWg+I3VGaeweQ;a#z|ojCyUZ@4DQtJ z>$L?_!Nc+L0(p3N+~C=7do=`qRbB|wg*|Qi*naf06cBAWbr%q%w^=6^$ksQ{LEL-3l-W0Fg`Yg0RXyu}mFDEPh0Ho?5#0 zU7cgE9t=WVf-WiXY+25)FzEZQ=u3r-6kLSJgTQDay51+IYs0PRg11&Xp)}_cZGc09>;XVPsiV(H82bLjGF~o&j87A7+?;Mz2A)g!=azX<42$1( zXZ*gb#E+hk-^S9yMS+NW&6kJWXy4@$X%`t)40`D?MtnDaHdzV;+q+|WWYD=x+IklV zGPbZ#8tXbiM`~Q0>-n5kcu`7d8js9Y{_3QcP6(S(eqMIfmCD>KFHQC&B6$3wE#Go0 z!AOxVNRm+e)|ADWp_$oBF7Hx60|ya^3o#6TSe6*}%&IyEWzS@d->bD(M4e+_*rwF?tKV4!( zJi2xEqeBGd9J+sEUoHLEGl=0TX_04^KsDXxN_@+nb>vd?Zd1Z`x04Ykg4XK`*>6@-N&P`UV_Zbk)Yp9!zBI2Xph2_QZv~lvRG8W8NJqa-_IXLc{;L=eFVa2q%pnl9#f84~_QrdD_>OT#=oy2F?Cm2uz_13apL zA!`1}2HcR%3tZ)9==v6Ja03;;%@B@NLDEq675aF;Cj#_IOI*i`+@npFfrOHzpn@DS z7W1mzEn}g+gshMjjbl;ec2u-&UqM|RK{y?q2zc5H3&RPm@}kia030pb1qAs%;Q zXXpojcEBTw(6ayur9UhY_60xnlEGjz@pc0b@z%~R?~_(CnW$q;%}*?_%Qpe1DE#mB z&H+q=orVk^Ejn1IoTIWzx-~k)Z%TTnkgb-##Ik{b9+ndrwj@Ou{kBe;p2#9s0*$W` zeK{MfCo}y(o66P+kLIkG411o4o-6n8n4j8YVqi+Zjtvy;f>9lkh*(00wLqryy7ESt zc@mh-LB=IbD*(Cj6#aBWC>7weuA4VUOi)PLK!`y?e?imkst( zl}K+7qN?_h8eh_Nc$x<^J3d(15+9ZnlXz{=m~6Ug(dya?QEO^saKdQhPXTwU*A=Vj?dgT)FJkv(TUo zJlD-R8J8C7&NG6^kDUrWn4j#nl?d-u4me$9x+(jT{@+e-hv-<<(uo`wM?A zVfcOG#g8}dtSz5TQgOFLE|a&0_b&{6926cZ?H6`9sz!Y5f>E?m*{$2vX#1Y_an=w# zMqq^WB#GT4?Uh&s{YlW_BO8S8K=dbQgT2VOcZOC5l6RuzBNvdI5r1%X^QUt#1rIN~ z*y2xcvCqPvSHJ6=U)4JDj!OONkKlbQ@wzuj_#Fd;O)#z8c=z-bEtL;`pVL`+)w!0? zGfY1)tB<}a)lByvvQB?-8il6BZ)+iv@P_Ba<2PP1aj9}7knD%Y=h9dmY zS~awKQ9JVybAu$nqOnnCBoRAGug#$*XWEyRAajP{&r91vL(p9j=#iSI(c_ath3f}Y zGP*Jwrfl#d37B2$e%zRcmBjblL=6<&tYu(;j| z?et&Az9Q%Lqm@h^|5avsHm43fmOC$*Agw5l%l}tY`|1)i11O(-Nm0}n+f$-RW;Q|U zVQvNq)S z`cJTShlu|fYiEpP8yp$X6j)$A>Nu7zBMZXRG2o)ID5U4lO1!Jk9t>wYP3aCIeMV0z zZ+E&(zUCvC2qBP7CmX+n86(kgg2iaOTi@0c$Y5MHU8P)hwpL3n50s>eDcoL-3{2=L zy1iMYwx1a85P_0w!XN7mCoLq0<0Y9aJPKbU4SS3#h%G9E#;d1!f|Xff8<$Wzd7VV1nh2dOyBh7y zZ0ez(qv=896p>T){2M<^Utjj}OEm>)zpV&M;SJY-JFYLjL-_PRnVO&s;y6n6AJGZf zN4A7^H~bi{2O^R@h<1$kd`r5=2Uu$+RPU?>{O1%3a5zG@o-G`o=k?oEbcl}bi~%cu z;Wa(l9x+~gfKI@xz!I;Fn=BIE(@!QjpB~wZ8JhIEC`wHeqTD^Uvw4`6dLfvT!3Qmk zxqgVvfHjQjx#!xm4U3K!AJahY)c|@)x@q*ISHZbzP4Y|y%9#D zk;LPSpfD%jE=JV?7j(nridGAfaPavO%IEH}Xe82T&AEjVex#+8NCcJzh&JM8szB)yLcuX5_@MOkSTfS?d zN!ZymO(+IIZjbm#7!h#l+wn8cXev~9FEb{LLGuhCy@4JEOKUrcY`}by!lh&5a5orC zy(|xt?T>z68VG2{j6iXg1k}pGXqQ`Z6eS=W8iw46VdG^lWIi!i+)OA7XE;zO#3F*~ z&Rs3+Y%nP_SIxiRJEBzSg_s8O0lAk9GXx$s^Z^r|o^2LTsLNfElPaZfK}8(4)7vNl zO=pNWKkMWrJ)FE4y8BDVIChyXqFbz@XX_kBBu2!hU}XChL^{kNRXy%KuygRpVSCn_ zg;lFGTd0`l)bvXWQj#B9ObEy)OCyL`T7>Xo35 z2Oxau<&L|H0S5r=ZsDlB9*S=b0`E~cB!tu8Y)h|oolnP&!+yxZDO_k8^?U1zqY8y$ z)Yt_>Vn(LQLuKf5Jd1Rol!y@7B{T~9vBcMS*&m|r*dEw*xaNK>1x=5T$->rp(uF_9 zABpOlz8JCB5?1hMMhg^l8`FxZxA69-*WHQ|Tq|{6VK@q_@KU{u;P3WQ;pUi$jc5cM zTZ|Pw#$zs^idBv*nfxsV8Vvf77HidxGCY;T8jDWX#t`<(wMT^SWW4vYsM5 z4-puFXpCaY?Qsi2Z2d{D>5k|3`~A|Y=SOv_!qFFma8``N;bsu)nv9vAvbzn@f}Pm~ zE2lkv-jXyWBViKbgx5BwwFbi*2AzW=U+$#&H$h;mt|pxQCjEY3?-M!qR6!4>I`N;U z_mYGrooPFFZN!7|VPP_v>fPT*3i1=RIo(K(oa*KowMeMI1X$&jk*^xs!ohHCnW|nz zI@MRU&jW|bwm)D>Gj~j2A9k`%YQ?mowqAwlc^Yk(z6pN$176(~eh2PPZfc9xKFD-+ ztIBb^(#D$hJ(I)~!zseIW!j3$|s-N@bI>2(z&5|bKJFXHD{q27e+bQ&?NpVsrrE2+YT2nObmhk0WLh=;ZFtQw7DB%(oIGrlNQ z2qR&q01F?;*MWl63eBvxc=79ML1tt-RmiWx0ifS#Fo23xOZRhT*MwyiCU0Ai>^v62&xpsNL(>A3GGu zEUtY{abDwxvPNj1(u%Xpxv_h;=T$-2+N1f03NXmlyBr$#p4Gx)fGB^axfz%yqdiA> ztk<^A1R~W{`)LVn)Nu4?AqH%l9i{%)Zl;tFxFUEzc&BUm6wDVLvnBIqG6i@iT;s&> zu#5)@y?M!2kPw40W&oH}H2h6rCG2m^w}2%?yWVy@#i4tM4Of8^AWU#%K-3+{Zi?9G z7-6-yBYzxmPduea$YduO^)DQcapFMaB1@#?(oJtny}Dd29)Dyo9an!5qK>gj^Bxnp zG@kc7c<#^NjyXFU9@djj6&f2(=G~7u9*P*Dv#@Qz`t0n?KZe=1h3l4`JR~5+I52`o z42q{Ao(k9=Yz=P}t60F`8iN=m5qiiYYuk^~w=kD0vNdhdNFc#tog;B@GfKznC5zdK zw;aASA}Bd(UFBuSCu^~54oDEel%VdCW&IOwCp%E(ky-YF0=e*gNXY`QqGeP>;=vfpnyn9CBXg(V)mY^ke zPi(J;&HKm6HRna`T#FWHDAb+2G(xQuby&f>gZt%PTR@$>x#;y5)3@-z@U&+8%jYco zZfg{u6ECvREbUkenU_?Zvd?N(Wv|U1GEE&C9&^F~H&*G;aqN6LDJF_A;Ya4O9WwR` zL1z!CTUENE_{!qb+&5!)Xrh(J>ljrYPL}wci|2Tk25kKBRvgF zBqXGP#5HuDqB5zHg;>S2rZhY@A=8|WMdc+ks|JFoy!V(+{$r(ZllH!eiWo z@HF853)g2kah&6s_mVAou4%$77u1>9N@fG3`tQ{N z|9h_ZUZ+eZ;xqH7y)y+@ALDP@KurXqWq0ZxA=d%M#m15@M^)xPp0nTJUUtMwJ&XA& zfE|MKEnWY)Zg@8C6M%}J2G|L>X18b2?KtkG8y-Y<^Hu&W>&tuYcm{a=RvkU3;=j6I zx7_z0XqWgt@O@8Wy_@xQDT7_7F`;D5{aWTffTfgSeyXbZ_OSGpulF1>5(fOl>_b9% z>dpPq=Th7oz(fYd&VO}ku3uJJC3OGA`2b-i$bW^E-}F4uoM+93=+DL*h~d9~1D8Zx zGU&`{!MCkjLk85{fF(WG=ig=b{g3wEGODVEU-w=#(jnbllF}_mNF!^BN()E{NH3%o z-6h>EDIn4~r=Q=lBVS!{KzU$z;y||N33OAvJ`D zT%D^>E0QZC>HdayF0yTJ8u2e0Okg1t>NgDo|JEDd|K}lz4u3h7q|;9V0i6+z75_z~qleYp?8(B~P=4oJxxl-L%PP-JPL3ziTBLr60)X@r zbOiMpH&WWu2bd}Py%wby)Nd9z$(&mN@r#cy_2Lb+Snb4{^^2aZL!H@)q|+vSj;XVT zHwTm_Ma@#jOcYg~0Us9XYMwkt#Dl#jM8S1r2l2~XJ-y+p3!l5a>=0^dD5~sO&DhLT zQc#Ose4$d?llvr3n~%W7Ba}-SxC2Ce*XCbj^$WGwhe-~d`d9uMN65AjCbVYpWvP@} zlP~Jn0RC(ZiIjEm8S$n#U4^;>e6FKwPq_cbvXYFEWyS{cVJ{$d3hSj>(01M2vmDBl z5^&m3OLA`*zPmmJ2A&*MHd8#8BA2(z!E|OLxe6RcF*ZOV`PBs8#5~5Oa#k10dN<#UvjC@+gD~yaNg+D-l9s?!( z%CE}x-?*B;BkztrJ(=x`V;cbW@LL@KdFwk~s;db!3%~Vl6L;CE_iQ_#)LREyvYnTN zfTn}%LhC?lfL0&nI-#aIZ+N3&sl$fZq5m3S^z+qGC%JEH6S|na_UD^)Tj38LKzhKd zLF)J?vEyOOrFh6qk5UBrGJV+$um(NbnNS6C8=Kxi&q!qOsC^xPihloPA7JI`xS8SB z50t)hBl_)upunri3ZtwO+_k^z2W+*Z^gsQv^=WK{)BL5#IvOZ2nEU$8*~B2)GX_4bGwdGNk>&%tCPWNC893t^7L?-B9v2_B#|on* z&xYlH9Ia;Vm_|z>q7_MAw-*Ur!)5~O;lR@@plwJ3(0vvF=_U&>ba_4IT{i&G2-HhY z39ZnAppn3tu9^d?Ur!L!zemw)pd;O^D~!aBJ^HfYJr7uP&6?Krvu>bA|h zBPd3J2nth&nsWuM)TdrQH0(7*K80TpaH{88`|fo6{XUue8NK!kj||NOz}R1+o{=uL z@o>48^Mt>#=6Ad9rm~Os$k#P=FBt!-r%NdWtbNpe1F-Zf3_R+s_CG)+{F`RzH*DS! zhxoykmD5_F8>9`)twr;f{c`jCS+BwDr7*_a0TD5bmy+b| zlZX}wv220MKCO%f2v8~z4yaav?|=-l=|-1brlr(Sz?J^V89JoG@pk5o%4Brx=*k|i zC@CpvW5W$Dm2f>r;fL^Az|=1M25?BsYG#CIumh`Qb^P!bE=DMx8q z|4krdK={*Y@uSI|fNTF7!v z)%i}Q$3d(S{ATLF5c=(G?#oQ+XKtN>kG&*SmjE&Ptk5SO(0war&+A>-P877GkRyZ* zr+3oXN6zvRvP{=qM8n}3E{0}F7HSCt*O_L;Orp4 z)ZXyr)~}VLPIo(V42WsH1adxT+dvpdFQ>=G3x0oD03?{~e(V4XIp>8k>9?t&cWfnR zw0TO=u19BdI8Y#>vJR}r;(+_=d}dKe0VnqiTkwV_{Viki!Tre)W95Sd2lb@r$t#P5 z3~eEfqasb!Bp#RZfFbC+8EIf=OB8MGgx}GlXD*t7yIfEu75mYb386HbEV0yLwa-yZn_l^|m;k_E)ofl&Y^%#?RT=D)aEtq-n}rt{CWW zp!mQ&vX6qjGL3l&jDMLxj-x`2lfS;PCV&xOl2=6g2WFaPD zKj~|-TFK}=RRQ!IBqn&uEhc*GAjWrLH!ZWp$YBY0TbG5{yBI~ws4RzkaWtN5ar~%) z4b%-JP%lV}>^Ma4z4qd#M#qG@z;H47;k_}WOWR{!o;?JqhpkDQRoB?x!0K3iCoXlcF$|-8%5aWoB=+Rj_e{_iPmuB3{<*up9ZO zI?K$z6EHU@=z7_lTL+k>RZz#^yg0+muZA}&)|aj@){Zh|Y9i~8a$z*s+%P;oQ2j7L zx+&BQXlTR2R)hK5YKQ*3mW?3sUh29BG4n;r2epae6@eIGYvQ03%U+Fi5XBK%35c}f z@em&>KRu4+am;b*Bf56hS=+e3j|cE=Zh7l*{&hs0(PaJJilG>_Kl@6Qi&;@%y9ViULI3-y4n z%MabEwy97nTsV!E(jpO(i^}tualH^2`T}hyIQs{+DJCTrw(O6F4^T}EQhkiq6q6_d z%`MN3yHvY6QHr4T#jui-AN^kSM#`WB6NzJEPCpa(s%tO=aKe|*;leWtQx7}gA|I~o z`x{iS>-ux14+mO#+Hn1<=URdC47?T<72zmN>>|$WXY%O6?Hs7cgFrz5cDoreHX7Gy zZ2OauN!D5r5k`A5j}`=$5XcZ|WC&k1RIb-NIz;>Hg6xVj zY^!sOj!#ufDS|5SPEVa)@u^KP7SWRXv{5glJ?M>tf88#dd<)COB**CyV}s1%hB62n zvdbSl*D}|}v_$IZ2ZiPccRIsJkp)h_LQ`Ke+6$-rjg;4{eGK(@F7)@M1h@)aWg=|_ z*1-kA1(wTGb_z0>IyDs!bGD`8&0dDnf!pCZoP5SmH3^VkSr`hPq`0KaIjXPGmv_BG z>1?N^JAuezpzx%=MNd{dSg`;;a%JPt`OQ!IOEbL3_z73KB%l7_iKo231XQ4oDxZyB ze6=d7OQJ786_*;@Da`)Vz19lM#|0YV?tn;+W(07&Ih#d+WATejR8>(dkA2V7^hiJDX z^O13yR_?OB01`vFZtpkpt~*u}B$o1xxoxf();ej;z#Le~^9sQP3UXB^axBNjS zBgIYPUb%t`(IDO;W;qip? z>EZI8)YYD)cc5mp7et$UJFdeJ8WUGr$N!u_(o#;`NyP-3X*NIFeUaDeFl!?0bj2 zr*wHuWlgm%Ww2$=M@Ya>Gf^h;a?oQ0f$C``x!reu``oJkdCte;dK{Wi%@Rre6zgzc z$6EcNN9B^M#H1b)U@aVvRZ@r3sQJZK?GR$~zfjoz4GUY2%%$ZE^4wKqNugpJ^V8fM zi8i7b?zA?S*k3&Eo2e`Mi1@o?S^1u^j!tBD5IVuqIg)m(1yP0= z1IW*!=cE6jGfS+gzNRQBHbDnOPNrEF&|$vSS&3zg3|S%Yv(DY!MwQ!MvL{(Y5nuV` z^*BA9PDQ5?D^T?{_0(4p=r>TBV5(XTqUZ0O|9!aWVo7Do&RXp`U}vuzz|eWyXe9bO z(M$52t3l{Q(YMw|X79m7Q+(@{;;+r6>+P_7I~pW{yWd)*TJ)0q?byoo8o_NiaHO}n z7GcN#znuE(N0Ar5P_cS+J5k>7(+)-Gu;@AHZH!Rx>MItLFZ|2bn;ZJ(HWF zM-zvR3HqZgFDCc=%60ny*zq#}aeDl`FW;H?bx*)>TAP9eT|z=80Cj1-m0^P0)BjjZ zA8Hk8Heg*rV$$mHFr$>+B=rjHK>J))cEW3N$%1^d^fQfZMIcLcuBy-uIePEKJ9a8qRE*T)FK!q4uO zWYAishWR4l!1~-|8C(06F;L<`Tnik$j+ z^0Z<%1WCq6#fUBj(=DkcesLzjC$p!lAA3_IVlOb^3ZVjz)ZWh)+^6#lrs4SV>biPw z2Au%R4p3gOaq0pMf`I_i6baUj!&im*(=(f=k+1nux9U2ni#Dj&^Zf#G5i(JS1$h(_ z741ZLF!rzdph{n=HlwaEF<|t}$KoAO;8gN(-cE)u1RR6s6`>Jn&x%z^#N9_Eb}OWl zaTal^xb4ksfS8}DvM+T;FhTgp@5gv{Tq9>M`zK5LF)?weMYV$PXm(`3&@yDw8#1JY zPCqFdMxum%1}-Z(kUGP!G0Jp&ExC`T%dE8J_%yWw--Z)_f%DcU7_~}pn}Ow(s!~5u9CE(w=C~#4?Eq7O_3uF4o~6y&w-d}=fGmy&-fnR__^4df57Y7i zG&nZ+?R8cZdgczxJAjV2+IHJ9cT|(ol%nIskB(&!l(&fDzta@HiwfTL2yRd4qV7;z z6AA(fE~4s1bw!kS^*^$!{|s~*%g{ORM4JSqKrQQwPrA&2F#%x_W38aNzQ{z2_u(B6 zuD@1U*|&t9Z?QuIl?i!sItGYgq(KRPQSM47%fav47Bc*JB_&B-7YPH}0JBC{gpnDj zRE#S>^=QJt!h5VsJ%boJ@<8&mAjkDvqcj8NM^z>#%ke|&KTI_HCR)<^0u3r&SOH~o zTeAH_CYO2wfA*i57y2S5WdSG1B_)7B(yrA7cyG3|HU=n7of!aC7mcyw{Ii$20L(kT zq=F6q5+qpvr^_=TlqJpbW5E1UO)2aWMHd^as-kLk`J?5)d}R0H17B&x{```63yf^o z>{R_a0P@i?>qA(_2JH`zv;x5enI8k5Dk@y?T}%cNQj*4`rV2or`Pr89594iat&?cD zEn7Y?6G@fYof`tn!0&fYhL0@P9u6}FOCxYSUeeMYmmzHE*RI!m(}vKsiqEeUWg8bi z+pn)X*bj7eX5lVQJ>kx?Yva4X-EJsq`@sH(xnRTxLMT%w4U|^=HD`$>9O^^q%)~HBoAmVSF`S_b;{$NiUt=XH4VckKm1)p>EieQYT0kC4og3Y#0^!gFV5HNCtnFe zg!+R&4erXxq)n>4IyBTvoSlXMI|F|o+YS%MS3T%I{x-AUJ-iBTm^V{m@t!xs8|Fw#{0}Hw44~H%3<%-XxNE_$uNT^uc3rCs?ti z4H&!~c>S7w1<2H$>y;N$uD$^y*E!?dUsa}sit?Sb+M5Yhowi~vHR&_u-h67`_sHch zYQIYizJ9`!QGD&x7y1qSyd1G+tJRR09r9Yy^~EI5JE z6Jo4^CruY!5w#;9TPvSzj_IULXUv^FWB*Ie-e534nEwGNXf-zsF;c;00T{*ZW@}b0 zbJae;Uu@04@pZcUpK|t(+W!=~&*8_s*Fm4i@&yRcDS!vHMTdOP{@?QTL@$(v(mqK{ z$Tws3pqbL+>0~I!imPMP3V>uwwf=74fy-O<^iuU#uo|Md%cVMC8|aY$lH-#S2}3(t zl_pBwkL97d&rXCZ;$|jsyI(}sZ!+2ehGi@AJ7#1VU4H0vWwuM|lsteI>LQHmeYQh! zg^DfAUZnU~-PkDJ>bLW>fAinA(pN~=?+q`FXTEu>q7TS-X1abvko8SYy`2YaUUJ7B z2)8d_-Br_wpmf{1K`5RRjNGoAXQqBsm$pc3>s&spA^`Tr44&wnRiz)I#a=?+TlB|n zH~yi4KYO30Y0uPzf8fvtC%&=oT!=jRSwx1=#v_LIT=bMNbae1GI=6}h;C}cIDt+Cp z{K{8I=J$h7U>Amdr*vLtAOd=~zdQ214JDG1e(>?YJ4gVi^cBg;;q!zV0F(dfe-LLy z_5Kq_`PE`FUC%&`mpwM1yIt2Mp9k`}+(hy>I0ff2T5`AJEA$AY?g%G}{J`<`z zh}{|f?_c}ha7t3q!ETQa!URf6B}Mm&t!vm6Tj-f|qZ9mDFb3Ye)K-!J<0m}s%QjzZ z(BK6i_v*~>n}I=;Cd8kiLt@?aNc)@Oq;WTlcyKj-El5^8AvFO^>JyK_;do>NH!W1= zz>nJrYXt4SA1Lv;W8V_U9L+cSqz#m6(Qb?$y)32*HPa%Q2I%5f`!|2N-~sAg;c`Kb zG`td!uv=r5T$kn1lw1Q|c<+I1%D(Kk+5o7Y@Sm2s)9Ga~0R^=>hG|Ec%@W&jZ!NgH zTN#or>V*MX9l@jTEQs_0Pw+SZ-rwq?x2pndIQ{cCJ#roXz8Z^qSAp; z{TrU0N%p@ncSwYak4n>Nx{~(n-dgQu-?4TNfr>8Vi4nln?>ZS!%3BTjNbr{EZK97s z5I3-unDp^lL;CrePK~G)4NAc69!3HF?FZcTgi0;1ks;qJ5x)hhM~nc6d)>B?We5 zKM9g{jOGa>Mmp`VZxE0=E1)xn3dZrtnWRDHi*9Y-yQ$nXnKPWf{-cR_ z>ZP8V>1R#qW;)E+y!=(apZ{_&J4|HUV+3@m8rlGTKehKnjKAcu2yU|y>({im03vVm zv!5T)miETSH)L8<(ZU6IrkJk?crOqp`(5~V!fmh=2b)rcA^YEY_L~Q{-hi68f9lzR z=cN3uOZ(p9{T;oEH1oW?mEZFF8_tOt7_JDeeMJdNCT-#EV01^N25*z1!6pm6z2?oI zd$UhpI7O>9Kk@9a>7HA^H;+SM(%f}v?NI-|$3FKaad%n=D9zPJYvHNbX{y@9bxi$H z)2|q4+`8Y5+hjtV;;n-{~g%Z*2Vbs^xGfnO@n{;wvEji(IcKvH_FKD^j>aX zH>#th70miAATapyX54a!h^<7k^w|K#{v2t!9R<+Giw^=8} zRVt_C+Px@qb7`x}9WzBmG*oO;{zw=+1e(dw4s8-=s`vSV`(u0tTE9Z9CHjCzJx0#n zoX?EYPL}q9dvidIa8BWyjqVsPrDYxw$ubrH$neEZUQzH;kX+7fYJtTXU0a6HBsH09X@arKolfCG&Sqw|d?7N3kaUpNhG!13M+PH!|O#hQ;+5wnu<% zJ*ilykXAdWmFS0vwud^{zV+@z)oScZWccm?Z`+e0>Dw}iOe;fkz%jW~0x8W0*1bGW zNqO{N8|EO2$PumY={^tFj;oO(ji!QFUq66BbT8A5fRcB&L&ZqS1iGHPU#m9<^GyT5 zCTngnMAUg}_y>t|ZMEzETQXMMkh-}tqc+3V`wP9KS2b*zP&uB~t9Moa9QOF}2}A)GWku8wJ=D#~#{DmO1d%17+T8fnvwrGieZWB9O2TD#G9k^r z^-Zdv6=M&rM_Ib}%{EWuT(|(sZ_1>4q@Re2b3|XY6_8|bpO2~|Y-1WZ%>1;&p$jjP zpj2vQv#-pMfS=7soP<^7#btX|drP1GdU|rT8ZDuGbDS%sJ(v>}=KNXlB)Yb==e}0O zYiqnXZnxT!F62f8Xs(_L;t(+!w>a4b`WM`cSu|wNR-H}>b7u%tS0ksWTr82xNXP^BO z{Ll#TvdeV}qryejyIg+K{n0VX^1iWh6%YLNzKn0kaS;r_oL+akqm#X&o8wL@k9K z?qT`ZYZ%X3@lEF=tVqMmFz9-MZeyk)6$Q!Xj`}4(>^Y0_JO|Iy-y(yvIq!5##G*#B z>D<={b+6f>oNO^A5s&G?jt83Qp7=1hG?@39 z;zl_t-Z6NR1meh&yboQgdCy)hTRn$Lr=x&4Oh@IfTOV$A@gxQDj8(ipF3j4u?NhSS zf597;RhG!=b5rDo$^jnTjMH9Av-qdWBY&>Sv=m^EhqMP!WXHBBXh5`Wr}Fw3pb%bq zl&kzW#jly{l^0#-Yc$44P(zIoH_>HqHB83=LLetRh5A`r^DN>EashTD&mU>RqqqNk~+NYlp?k)pvhRlH_07#xFUP z_kdgEVbrZu^7|4}^gy-FeApFFN}-A=iXs>!i7k-XKuxbv5n1=Vi_xEhobv`)aL#!N zB;XlXHA5erm9(Qozu>|pVO>z|K1Hq^t_;OCdjnkYz+(-G|I?z(n8z3@PrWnUxe)G*?lpOgE^@*qJ z1NGEh62=LkybC?bu_i5W4Pkl9py+0yU~f{T4;YlA{5eN*PDMbREkqR6^cz zbk$?uK}R#l85wE+ZmSnW>8`?r;u_Dpyiz=jdECxU2FuT~3i0klWo)$|$@1$^WqPs` zJ=k+QCYkSB{h8Hx#UJTfYrU0HLo&m;x}AQcU)0JtUvXw-3@2o_=&;>i{L9g%{XuvL z8Mfn;zEk9Gwbj$=NCGhb4(4T-X}%7U#>|4;#*|IQ+mOOBk(pMWm)cogN-r`vN1re3 zUztMe}%xEQ6*X38TlQ)70F2KcQ1FNMPTQyC=WCCr@IZafrlz zt}v#e1T+01X@i-}P6A#&|Khm$;o(Rj`9bTi4WN^tg?kX zJVwfGcHWU4+orni#Z*5HYsUUvJQ_PjNKAXJW{~}`a{W(%d%8F^;nlN3g+I`*u#{qY zMdFB8z-#$ooMfdnC-udDszgHGdY67aWT1Q9(k z9;tLz{>m8Do*6^~=ZO`KUWk#*(efhyf&!5ZC@hl~l38FFVedtGP!}|dP?d_*N+o_l zCdN)iQ&Ny;c6`}FN3uEAYq_*WXRfO6%ekrZ9_P4-Hy(Q!^jeTwlFJx6ZJyMCrb;R9 zu6~d790y)6jR)D``j=SUgV)`1JvDneilQ!5#4!h=<^S@PtD{3mbZpn8%;l(ipGrdd z>3}kigu!@6#x@7%BGrf>;+h{j1hiMv7Fii$;J%+`x&Mvz?#Nj8Wm;%>&~J0PN+jc4 zf#EWn5lPPtQ01IG1M&ePJ==gG3T{C%ho4jqkz5$~t|NA&Kotgg`f08R{&k`Hn8dG}sU4oDOki}a>2WRhP) z9~QS5T%uXg*LnqgZn0Zvk8P@TK|0tvB%giy8Ut zJEZ>t+k1&#Jjb9>L3Y??@&}}V{~}oaT`w8S6WTE&x60I~!w%iCO+h76xB`j(c1psYsTU zguqGiwAG5YOndo=Fa)KuQXiM-_v&b?@d4f5Vu>+GAkcDX4w6`3Z=JFomT3JDxRUgtx0uC!yDiPtXXD~n{|#DCNGM(*nG zDL299ly%UzkiM0Yu*Gn}($Gme!fSt)qbBzb%h(pZlLn_C8yAGzax;AU*D2;HhceI!?aj)fK5PEF zhIw`~cqoGq+zZn?@I{Rfx~UEItSLL!E0=o%8qdP$St8yGo~meF0LN!k^*7Pv)H_&l zFb{uB1Cjv!VU>rbzVBDl^}kQz*u}#+iSjgWdQ0sYujEPG6lOwg-YzWGAK;;-Io(}& z_!@HRMhQqeA5F#BGgxlu8Rm!C3zG!XxM$nXoYa|GOS4RT^t+C^fvnNN(`7keaM)cO6QhYDE(O8g)>{eh_MDrAxI`%DhnAI}7yN3;Y# z##*4i-2{P0@7dN9!+$ zD9fdzl)9qiNh$&&Cvv=6kAMGpYho#R%oa2bYiKSUB@i3%@aHi zDL)+fI!ibywX?k#Ch13}R~<8{o#GO{vOSw7=)44<&^=KYNIX#k7ccr;8f=d?e0Sa+ zFP;-GRX7Ljl6P%i7v;>6K=zdK`tQufLFo#{mV|+qFUBdnh!QA#+GyN^vJ`z}2;Gf; z2HHqGcYm;s|B{recuc}O9rEBxDpWM7-MJ*{u-xdXJ#9?qedOCTwX1ER@#&ke`6Q|sUFsn z8L&DvWTv%Fxx;dv>Ke-(Ey=tiz8~tUwuvJ-y*X&;B2Kul-EINvk=9!Ya)y_<%I$fe zci$j?i27DRVlTW_f4$9ymvi6J_gtde*Edi!Ek~gQOAAto4AB_1g~*b)k;#oM$!kR% zx^*_?u(1;N0wVV8mBWGo@LTfGX0gR;3pSJnHZ-|Fq<3a`X?wnTbXlT*w-Fp`2+e~< zGw0qBi&&inHwHXo87Wle^ZLw80tTvZAbpaw2jL=lmmqLtdFxxA)-A>c_7g0g2+m%# z*ajaa%{pn<1@}Ra>U}Ryi1aCqPu7szNZY2udA1=q<$SSGo2BzgpRI&#Q?a}4kC^tn z7*`3*La~#1FQSMjQ^VqS+a6!&p5RW3+a6f_Oh6*=)7Es~_)t;iNd={kDI2X%bNW$_ zO#g8Y4Oa8ljI|_L4GY# z<8!YohJL$mKfif(>=PL!ahv25yQp}<3%?s0e7F{Ai}ktb@ww}}(!aPo)}Gs9W~ZVj zpftH!NWu3dARvB5!mqACgEqGlFwB2jan{j+o6L9j(i}bD0kRB6&s}^+8}hK7_3+|BOyFT-(I*0QwhO<6uhIG3+g!Vt-QA}N ztX{#xBYe(JW$rp{9+&c!3eJUplfzhVGlp`dC|O{0f8IBVP8IxpO8WD(9?)%LL4_R#mRQ?XXT zcv}HKZxg>AXuHC`4)1+9;e}VtUEPwkT?I-KxW7Mke3?g!gmykyq*_fzPtFM^0M|$% zTL||)^&4NVkZ~OG=nig%7E3Zbig08>qg2Ztv-mSK_Tmn^%s8SI))#Co*&>PCy*1`z zkM!X<>n*dCD2H0zb!HnrMB0gF@I`NDSHrs*nAELk(l*ZhH>T_o<48>;0{R1C3J^8H z(L0T}1!PSEV@n1icS*VIpJI|ov0E`6-$-lF>=^J&AjTta`Z z-s~|ulvxN*4Cm??N&{3SgzFHxe+qCnA01r$3CUt!7V-$qF6ngt-Gu0d5I6?gN5H&Z zffHpR>dQOwlSrh=iAae)zE5P{llko&4rKSYNrSI}n1!h;{J|d13J*%S-v{ZTPy2K? zbq;X(@7OaA;bn{0pYVR<_TPlxx50HE4lBGN54=5RqFQK0ZDCOoDCLB&;RinO!>ouQ znD9*m(#xe{V;4|l_9MP?Ba9&dOXOjusHA5JhmT9(>uq;Q^jiGJcm3hKtY^sgLFHPJ zL&YyAZ<0&lO)q!KmSjP+bc38T47M@CG0L)NT1ad9>PVL2#baeUAk7&H4;hjxXn|zy zfqacXr_T&6Z#u)`Yc>35358p)=iaHaKa>-uE3IH0HINM!wC!YBZuy{s`2#uGxWHca zB=5$Iw;2d<^`0r9-n(lOZMP+hQI!@s6mcrMvoVvzsQgIhf#o5`Ike+%0X;;dEXj0V zo^H)GI0d?^N@`}lD6Co)8gu7c{6*lWkbQ+;%wKJh`2-bm!ju6~7wQ-_QDM#8sngy( zx#6nlZHcXO95Qh0)6wp161hog_-T=+aeR&0uBo){s^lEqt!u>nJ8v-HT783qqIQAO zH|;QW(KYS%PC0%NU%}l`C%(HWFZ1qV>xx@sel5!3VKrKsQ$)yyHR*XL>lbRC$cL`0 z+t2Lwd>cF|-t`P6boy>?kF$0eEB0!)7Tgr%n{22=65or=EtS2RHaQvTB}XzU;Bo{fle-+L5^O|J{@bG zLghbr!YR4C??cJ9FC#@o!&_~LxL*=L0h1{p+OBmw}v?`D43b-WL0UNxdjw|5g?*L^{$>) zQ{FrXe&nlxen_P$f(oH#pAp?RP+BUgEE=cj2@No5O-i-iioQ=dRq1~?$|=zSIoOjp zqD(%MZ;g|>g`+|wITlwLV;{m(o*F3NhT<>~7YCeaVZEd$!Oub-nSTVW*p{0}YP}_) zzpazbW?;Oi9R9sqB!4svI1IG(3Ur#a6#uvGzT<2&_%%9WvVSjs#mfOEEGbkfZz!VVAvCd~K9Ai#InVgC})@47RAlE&EC1Yj$h8 zgw2kv#$)XnQEB!Q<2j2Un06+2^g;A_6s7SL`{H{A_XbH7?Cl>LzcY5rSG}=wHLM?< zh7wvDhKP?%)qLn9dP7NZIo8ERdK{#Xi52ctr{uo*1ex{X<9JThkuaOJ zr)sVs8h0a|FkcwgF*&W!TGz;;H8vw}XqD;C6G4lpz#zCo(aD@%udCRMz%e4d}rlPlB9Aaw&nN-*=X&drVQNx zmRO_#mFt{N7ty|{nywipMUFi>man+VUj2>XkiYsfD~+- z*>lP}E-8z}OpR;Lr*yidl08_0XXPxfqPvtj*Dzc%#Z@Tcf>V{oJtU1}TAohP#w!6m zD%3@DOwviI{i@u-*1dXYC8z|c=%6y_3+Aw&%~MtZX_xI8Qz{gfV1A+ksYmq7snBIs zVv5|4qqLmmS9jXxIsF77PJK|)RInfsRv;cDE#A~^=c5(5z?|&!NJTZWE3JZ2kTPjQ z2$L1gKKigb#2{vA3NLvElnKqB2|X5xCVQIxu2o$(q2}4Q8I_r{%kfpiN9_!}M~veV zo75S5Z1d7!U*Rk-eBVJ|v8R;EjZDNHz0MBkR!l!mvzv?TaZK*TEXA=;(xd#Nq6J^- zHejrmR%D(@k)qibwFdmGiO0U&cnfLW48#hty1#%8vKR+aHeFeocK##Bb;l;uhg|+4 zEc5#}oRUc@Xc|?Gu3dzM>o{7G3r|gWf$+10qP-5#q&O}?JLj3%FJXT}8J}W(x|Y{# zpzmcx+E998*_5Zozqwd{N^yX>4p&=2zAw?jsgX-aqhryA(Y7#kKt8zSClbke-ebR3 zKw4O(wq7Ho#yButzZPp%2^_pMP%bE?r*^A*1gp~zs60{Wuw)0jzH9z2evp&N-jQy? zzL7TKq#=9)`@|zOJIGRD1+x}*?Wz|eR;#bMFzCA9`JKWb%gE~r7*%Hr%-J(#%Cr7x zk?X*#`EjfaKvap{x|C#KcIXXLf!6QaYLNIict~A{eEKPvy9@EK9Jg z5QCy*>0atGR=^b zN6-zm3j9?O+eqS3XdLxbWhNzFnu}uYL(!TvRJ1kKNsH_i=`C7`Nl6w?94B99cP3zOzk{#-biI5*41T1w zuYzJ`Jn_u=O`-E3Z|&)ky`E#w*$I|I(AZ)&6uc{P$16`-pzp&obV9*3U|KEjxxQ33f%AAb$=(zGH8>&zcW5v5)LYaJ`+At+a{qC+A4NoQ0+tQ=y6x%`RV*s!^7|TyDMnLn@#3E{9V2E)3n9JQX?;; z1G_!JUFW{7h4&3r!kjjF9_xi{x4*^Vwe9i8t1qq(mJP2@4qm-!InUOA+we*wOH5*R zT;ZmffrSY53*iABn%3=W&TX{6zALI>5H^9z9WxjgFRbMR6Wvtn;agT@eBcu^2JGuX z)WLSDh{r!r@_P-@b)e^NND1TQpD@8Mzy~Ok>82AYsWm&!=&${es?Zf-`*NgJF@e-| wsNDp~C_W&LCndmh3rQ3WMm7&Ocful)W`kUHi|lzB2>A6vLF0M3oUz~k13prw + + + + + + + + \ No newline at end of file diff --git a/pages/home/msg/index.vue b/pages/home/msg/index.vue new file mode 100644 index 0000000..4b08b6d --- /dev/null +++ b/pages/home/msg/index.vue @@ -0,0 +1,102 @@ + + + + + diff --git a/pages/home/msg/msgindex.png b/pages/home/msg/msgindex.png new file mode 100644 index 0000000000000000000000000000000000000000..2758a8d5c998bcf2b9ad6a66ba24f78b82fd333a GIT binary patch literal 12824 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%0DB8SjKWuffWv*d$(T_CJ5TlNm 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 + + + + + + + + 标题 + 描述 + + + + + + + + + + + diff --git a/pages/home/msg/systemmsgdetails.png b/pages/home/msg/systemmsgdetails.png new file mode 100644 index 0000000000000000000000000000000000000000..4a893779d7ce80aa2e072696350483605dbd38f2 GIT binary patch literal 12909 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 + + + 标题 + + + + + + + + + + + + + diff --git a/pages/home/search.png b/pages/home/search.png new file mode 100644 index 0000000000000000000000000000000000000000..1c358eaa25e082d775ee716ad132735f2633bb4c GIT binary patch literal 38349 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 + + + + + + + + + + 搜索历史 + + + + + 标签 + + + + + + + + + 热门推荐 + + + + 热门推荐 + + + + + + + + + + + + + + + + + + + + + 确定删除全部历史记录? + + + + + + + + + 确认要删除吗? + + + + + + + + + \ No newline at end of file diff --git a/pages/home/selectcity.vue b/pages/home/selectcity.vue new file mode 100644 index 0000000..39d7b72 --- /dev/null +++ b/pages/home/selectcity.vue @@ -0,0 +1,235 @@ + + + + + \ No newline at end of file diff --git a/pages/init.vue b/pages/init.vue new file mode 100644 index 0000000..569e735 --- /dev/null +++ b/pages/init.vue @@ -0,0 +1,33 @@ + + + + + diff --git a/pages/login/applogin/forgotpassword.png b/pages/login/applogin/forgotpassword.png new file mode 100644 index 0000000000000000000000000000000000000000..3fefdb6683ae939dc7dc2ee9393659f310024f37 GIT binary patch literal 28450 zcmd?Rbx@pNw=S53BtU`%f;*vuTX1)29D=(;<4*7(L4r4KAwXk|1$PqMt}O=p9z1w}4OEcPeDL5Q z=)r?WI~Y$wePf*`6T@~~_9z4MJ zy#IT+YD4|*!2{R4-}<%QqiJZ!LP$ucsij4~`^lfZhZD^x zZZ*uCBp(Ot3S$v~Ti{h~^v471Rn^Cdqq4S2$Wo>4yvF z_{D{~!V)tuJFZ^?eo$VWc5O+O_y({|KzuhEDF2BzACjp)LCOFU-@n@K1B+igydK#@ zdZxxnxqq>C`T!Y|vj}r(Kaqfz4xmegaZ67yb$_a0?J|yKFlvM8_?fRH3 zc$c!Za=j5PLYfiudWJg(-~{G!j$IBo8xy^mjmkzt8%k7K6nvK>c?(A?Eb^MMt|AvT zl0r2~rP#_c=5wpKN^xeEaDl$D)7@#KKz~TV8v1H1Ro8^6oXU65OFGiG4u(k=S71Du@A(=oSs5zHF4Q~zU;Y#5lILL?i@AUfG4lT3gkg!{dEA{_o{3|YLn;juLxy=g3axT6?Mss$8Ae;pftqu5+(30rw;Q zQ&=HEV5jUv?^wy;XW*jNRMWD1%$B%o9`bW$a^^**k@t7&sy`1%`geYBir*Cu7M~wg zI~2=rn_oeVAH?A`|l)1>m zVr|Yz_NYUpSUGd!CgHughlg|fZU|BkB@H=@1ibiUQ-RfEG@azZtIs8m_W>cPb++5w0+%oaI6WLaZ z)KtOEfaJ2g0e2oYEnyJ7uX)PWL$j$YW{k)?nl51OcJF;ENjl zaUnSCd@vrC<=eZZV5E!Y%kOQ8p>f_1x5_E3=~r%#S7}}HkaN{9fKl+)L*K~CCx-#@ zM+!}l%ku5VlDkU5li;+z=S3c;NHMr1*>Q()RmX)v;G-IjS;TvV#g<2}Kv+Neq6v)A z_lZheku3X1Kccw~@s9@_C*lgN23i}c{xFjC7msG~D*Z9^2&BYy%{d0=*7D-GcHoMK zKq1yskJubUj?x~c^Wfk&-y&QB=Vsm3zn>1iO1N_JrBVGFWP5G7etNQ%0C3!}0Ag#x z^fHrp#Ej2Q2ojK3lcs(c#4bw8)UCwpH>vd=LB|79v=eu##cFv+H@IQuj)N@K?R2@+ zExI4WlAMA5*Al{Jm#S;X9FuP%pP;Qsv1+U=$gI<`7j3ZL-8B^(u8W57?IK{`Sg`ip zhJb$J%XWxLIhv__>t2hkG5Q|SF=cr|_|u8o*4+GJ_@{nB+)o%3T-f6bOfS#o9Dcu~ zv$Qq|y52s5dY8iT6v@8Am)=o?h(8EF@~!aC3Q6~PCZT!q1vY$e@;27{^*g|lyZAP@wXYM zTfds1bBWSB(f=%kt{hFDZEz)g8*5l@JzUq;h9?K=n$YDY#HWrYi0=hEx3=mEX0v`m zgxnd)nBKq`0LF$aFOEM9MZLg1&-kI`_H0psjHTc7cJ)+#BHrRA4|$Z>TKVFQdH3V_ zU>+>)mtDHTR?gp9bJZ?xMW!YCnLupIVn!<=2)pDApT+orHjfD>x+S{QZ%t3qonF9v zN4z>mE{Er-gXz;vgIbQ1P}7`Z+aK-Qq-Xt!=6jj@LX>S>+1LdTbt|+l!Qb?jJjXTp2H7t z_<@#v{41WxGM%Sj_=8NEQyBG@%$7~GUY*<>qC|YZI;wXqrZ*(XJQNcWa{NJV!gm&` z4Xaq~^18cL*>C^lcsWlueH_5OZFy@hZe-@B2t@bCqyhxqXr3e=0~Zszw(<$L(i z+{*+KASk#<<9Rfpc@IIPb7<3fh*a<2A=vKd583SBc}oD|2sQ3sb_}S%?rvcB@MIM4 zzrre(age&8z^1_~6g1(CWjMr5NNXNoSfJfci45NKdudJ*K|1~&xjg+B>{Q-^of>wA zUmY{)xz+CG3Ol_;yTILRakrI5iF=^ru{iC%f34{|;RNP&tLTjj*1HhrF(^3hcw2DX z%7$>ibgDhRYuo;|fDQm{yaJ0K(U!Gs`|a82q+6e5cezHsn=B{WKMEV#vVmJ!rmaV>Z11-!f;G~G1Q3Z@HkrFC z|Eg26kDm|UpXVJhiyai?DcwkaO-eJ(fwxxw-PZ_uCt?;RQP(_2;p37j7#UOo*5=Zx z(`Xu01K%te&Ofm%5)uS18W{FXuFk#YEn{;3wT^DIdy;NEAD;sDKTeE48+Tu^#Xtef z(L~5Wd^X@FqTD(L49Wfy!F-$Qxuw6BzM(=6DJ+zZX*u81C>t3D-=OS~zpZUaeN&Ut zdMj`3ZFgQ9dyjAuG%JBJFo7rG_XoHb3PnYjKNWQ%{=`O#yUMW?6qHt85%K0WiRZC# zy-fp=r-yMa{ny)KwUO5+4dMp_H1Lf$a;qi5z@<6kc@sd9&k9tnwDquUG93}v6qAyw zxSPx0CO*zN3R0Wq)g6=s(2-Z|>?J^wO@bs13=AMOwVD@eKIw3t!H~6O1{Gdj*y18H zlS{|CP@GTWr!z}n@QI>8^YiL!JB^w#0x9NUWHT{YCq0&v;A13YSXxQA`Yf!TIUMKae*Kc^WLN|FeqBLuI z^-o=z=g^UHU|Xnc-0tK`(-4<9Tf$^2Vw?D*6~qVg<~)6+#5}@S$RtSBASUKq?Ra2O zhc$H$QD3#@b3Bup{rZ7fQ<&_?<`A>VfL#kB&82V@y-rXLz|D+SeHo$K9uJ7LbMg93o zi_!68W>7sZPWi!=t8eDdmOJ}E>i(IT$seTA3Lch)KffZqZx`Z~IKVyj6yM6>1~mMo?fFOP^bC5l__ahc$if)uQ+5vVC>r!;dAprmJOf zNB5(IqAUJOg_$R|ZO?|S=2O$3QCKpHdn)Lbx~VCrYz`#&ABjf4cm>hROW$qLg)rJ@ z!%tNnr6T6??$pUr65V7Y1sSa-vhrCR(EMigxl4Q|-qvs!*t4)$FHHo)0!>|_J5R_! z&D%orx5R#6Zw!OZ-^+nyHhNF+9aUm|0$CFgiS-6lX%1A<+fFhrkQihvn_EO5SS^#gge>xz;y2|OLm{j`jfBOT@qt##)!>V&dZmKPR`#`CIpA?e zPzpuo`BPM1?%=dT!?ugzEEgkc+X&MeIuJ%(QD>F>Ih-#pi6}eI z?Q>yUwVt=H8Zs*ct5IxNnJq>h`>atH&81$PSONcRaNlAF?cB}qo6b+CQHo6NCUjCa zZ|cH+?zV|YDZ*;mq=dJZZDm0a_!A=2)rsG8Z*(>VfMk}EIDAC ze^5G<^b*$=NUfu7QSYaOyWRq{XC(Ln(T;tmK`X!J7K1w2tEOci^;$GcG2iTq&V$;+ zM({U}+mwP!8kahsS1R7*n>qkDYlS~%Nya*Abl6KueMu}Sq2tr!o4$MvA`qDq3sz0& ztbhBXInLTlUzDm4a=X)vul_sG=U`-RS%x=dKLL`P$L9#GO1s+4JHO^sT6UqHo>wR| ze%t6FpC|4`;?*Sx7QUeZef?!yg=9ylQgq(ArYHmedEQG8it?ZcGA zGWx@cUL*_XnD3eMW>8(lI!QnlJ9QvP4foo!SR5=za{zWqGMH)BLF!3|X;Ce35F#&u zb@JoQ;&_sqxqY2W&S?hXw|4Xh`Z)EOSOz(WGnkLgODtl^0J6ulDR!RW;j4PR;a1|< zv6_tP1h+db+PK5{8H@Q*Si~?roheIJD?xZ3iJ8%G!R}wnluI8k6H{NvULWv`#ayO@F>5+5y^A9MK-Bx?}yUu!daK!r0oZ-U0hyt7vf)ZFeMK;Z6YW-9g>&k zR#Q$qaI@U{73ecqQ_gXT)YZMg|A!|+RIj`s>i_f?frY1{KK{)UEm8hukp6jABL}0T zWPohSl+=59Dzc#P8Yiw12E!at>LTra+6BRlumA>acn*EhXTHQw2pRn>UV*h0w~AEo z>u@}mg1SeE2(zFrn1*5&o>ag>G7v~071f{)3&*oS@e{P+dRPDz3|b=T`^SC%?>>&@ z1&hhuj|11=DG71neLv!M;9#8$?2z()sPEnyfTAI4IiDezw7uk4Y4;OU%D?|&!3dJV zs3Ezpz#4J?IOc!*_z~Fi-MeNQb8~Z{S8}nxl4`!*PaI#M;(xT2@t(c|`KnPEgVu@> zvmHEcz`WW0TIn$hsvlC%o7tm5BN5f^)tLLCSS9ZJs0nR!aFU*k%TbdepWiQN$g~R( zP7s;Bdj9X$Z^523^q&Oi!xQsqXn@(cb;_&bO26(qz^Gc0M9q8fv(*2iU9kElFy$*1 z-$0o>yu&0dE^=9r`&27WE+(cU3DXYGcj6HCx5YMDQ>Fo!yk2_j5hMi4&Fn3MeWnKbwIfo#*rwMUgZ;ZqO4P#@mS zd2zrL0A2Jyipd*fZ>@+@k33PFbaY!t^{_Q&@(H|6lp*|iA!0~B^BDr1lz_P$X30nz zW*O?nrd3`G|GSGsM4orx4`z%V#BSR5*E9u1A**~;d3Bg~BpAo(eh?}3EBO#cC2 z*Z?OV#{Ef@v`R_?mnap5>i@r1RGJp_oA7k1oMABh{Od9AWd&LJpDXCnn}|18N-Ogm zElN}dXU%Yd+%8i@r|Z#d)d*>nIxHU>pb~1sNPj!nx;B(m5eL@GggJC7ny~v+QEaxx z=8t~xkQ<^dTur0=;BPdrKWd7rn(jcfcGQ{^f&rjhycekmDcFR}Zw;73t%w6+Vs!)U z^hZ-d3%ezw$JDZe)o@6e=B&{nX=bpFbwz4++6w$XRb>RNsl%*3@8v<7)Y86u;Uwj< z2v3N;{Qws8$cF?<1CvAO{%r_8rt<7ZfG<$vefse|eePF_0%g6l9&hyhhk!%W24THK z$t9WMB7X`GDdWxj5yo>%wJc9*AQH7>Xir%F?xhPO=#BdQkpI=MSz8!tU;n9H@pt1p z^C3eLlECE8|LQ*U?{@!fLskNegPX^wRCl#P31LX7|J&GOdQeaozFXKo<9ha2PX14$ z`A3lc=g#jXQyuod>F^0^XZ|(e|9>@H1B79w4xJuch>vuX_kWuEA#tL8>Ru+SbBvNA zMi7krey6kP1DlI9G|Q*0gF&O9v94MHCVR%Dxp=;b!QUvsS-oH01^RvUaPaGne>OA> zrGfq%{(X@M>FMctg2FV@|4Cd)p8>^NPe`Mg7XVMN`)rMDP?Q}!ZF#?S1?>e&S726w z<8wD(SqA4rCX7%AW}dZE8l|b_J}uoWlBOed6VhXLjp6?)Z2qq!d4^KSD6Kk-(tbjl z?nggawsSIdo1HHu!cp2u4<)3iPPuP!QOEEx0|;fPo+&OK-Jj?s%6kcKlLkie{Ug=? zvpQ=OR`?Gk7g`SS^+MP9m&yxGMil!5TK(imL1aGvN8!C5^d68Fdvigocr*F|+$fyl zX-8lL7$b<3k^H}|2GM|D8yvtn+z!7whvN24e;xWYRgth6p85EFV#BxpYnS%LkFOQR z^8yKFo%F|Zy^5Aw++**;FzI>j)htgFWh#e-%}|5VQOfh3SohQ?9)9lMf0J8nM3h*Y z?$b`x$x30P4&T^GJkj?IawawBAQQPDujl2U=b?P^x`el%1KR(13{{N%+a`E=dMiju zCyfHH6y<`sCD}85a*2A)?iyb72M3A4({CupQlAF{IGp|8HVGXhQ2&p5&_D4_)aei? zPv#4LQ>vw36-G^0>@9XjycN($0RaJ%njdm4KC^nhmb=JWE(WRLcr68FwD-RTh_c_g zxi^n3w_McuVMYK1IePU_`I)B?vZ2?!z*7O&l$oNQS-Ic86?7RefgKyEjt*6{PyV z2f+S!r85%KJq`WaC_wf)oA!x*sOaj*BYs|f>eTpnoP>r)uONUG7>qfRoUEwo&h>KK z3>9Q$J0I4Fi<5^`R<2l9cM{ZskAD7~AvZSEvikF9{`RFC;b#|yd84h;+;fq?Zvy;;_*xAw1bA=X#!ug&Y^|l4S%m|UV z=TWi#r+9B`0?66<=pY^Uc_oxE2G11__|!T5`6A3KiuyHw>oTE8-^0HSoOh*YCWgu0!?k? zo^qU6lGsSRp$Ctfa%sF~9l>nzMqhpSl8|UPBoJwp0L>uS*aWZvWMP_b0V@Q*Z@E!8^^0M)+h18W^0z>gDBC zHDW~)fk`jDgffrM%Rbd7@!X6Ge*f-g+oEEtsbRwI#>LeNJ&J*xtk8bwv(_|z3qRAd z){fgEPCG~l_Y>DK(EvP=E%FOGMsnAk6*bpOiIp6bbQl7wI~Ad!RF1tVl(*!Ea0*RtUJ-e(VO zc3yhMyyBxZzMxbDUqNDzkTen)qQbgk$*I*}gCCD@NvWugq=j!O0~N<$Z_d(i8iiR( z)YZ`Ug{aR|wY}m@aQdHiNx83XO2*1?5h=$YbHJ?3OzB%Qj!bOjdv52?=Z=?6Y`?6s zp6ewEy(cWct{Gb(!XQScRSxqqBaLRt^z;An$2B;I%v9f3`_hl*GzCEcRG*gI(<|oI zQ**S)T5WPh=Zg?Tp-BHBGbOUJsnj|>TQhA_nqXAl8DOX0D!TsYbTNYm~Y7u&Ge zx37$|FzyE#9vK6rL%%D6L5h1dm>`3Cj39BmY*r-Y^hW0`7Z56?JWoj1INvfZ;zeB? zGPAt8QTQx!W+NGP{_rt6n(|WVMI^}o2SXY*u(-U&e1)Vi$)^BpY9MFg!yAvJ4N!Oi z^VC^-?F{BEtE`+yq9dPJ4m?B~={ZHxfplQXr4cA`Aaw+$r)b+T72?ayVxHuSKJb-j z99LXyKjgRQzO|$M+$|#u^>3g$F*EQm{b2BV%YH7JneWpu(j7u z{oDdI(a>k4bjm8a=mfmtR2*6%6){T8h&RK-Ea&Z9ip2|j(`jyvES##-K74KtCp3EK zpST@^!3I7bh3qoC<=qXA!E!96njLN5LM9L2ho=#wh24I`eZ|EW0X_nRv4Nt{y2D3l zcn53v&DY&l!nCI?{1h;6&A6!_>uIle;p1<(2~R~LYhneotv4AA=u~}4L0;!E9`&v@ zIK}`LVBrSOtg9|zZizLV4WzY}A+I}SFV;So1McUE68u8byyj~L(>TjQ!w%vo_Pl^jctye2cAf-aI)`Z8c@_oGL;1O(*T34F%LJGWUv=j! zONmk)f2yytn+@uhM1yy!QM~^ptePU!H04-g*oHP0Xx*UfSYGytHmF{Fnf`E@h(ew7 z>m}i9EP`kE2^!vdFHjzV3$XB!S2-j%Jxww;1KmRA!(IjC7D$#_+M*l~ z$rqhT1plDrR$J9vZ$wR_9%#8{PNvoUj^a$P>0!b;U)uK$=LV|SmI7#Nx!?SfZq-9q}85?SN!2i4gvd>o7*J|qZ?&W*vl)$Ud>UNINd8BGWbeMa3q zAfT}?ygNXm;ba-S{vgCVK8W~7QWLk`pC2@lPTWfqoO~ZpGA#`NDRd)pXbpo?>+4oR zKwe0Rky8}qI0C2Pj+)d;&A@@bZ*MP`#h{orGl?Q5nTvUx_pV1gErV)I(6+F4y&h>b(bQ)W=F@5YNq{gU#gLc4-{8P_!dyO^@a+XB<)RWi}W zl)q^_n?NXYaDT8!e9R?7?!@Ao7xackMv`G*d?psQ)YIBGlql1fh^XiJUgwa07h2S* zNXGV90jIW$0W%Ilqvo-V>Lm&{v{wZ0IkStxOIY`BJR)Wg#Zh`!M z=tZ==#2x7)QMUd``3mGnP~0OzQsPSipFU=td5D%O3UxZZ?x?={*4b5`k$!96-;c7@ zk2l!|C(?75nnrGT9q292Y;ISku5k8cw2e1~g?{D2gbNE0O>0hiZ8~#RCTu5eZh>h$ zs~@GU@BpjM(!C_qVq2lZgicSRaJ#uuse&x1Fz{!Y*vX~;5W4KUi9?-6(N4_7M2?Il z{ReU$_uh>8wGWtuF6mXjU`va;9+iC1RKxnamrqb!Uk}>9L-9O_f79zz3QvOY^m$ia zl|9vbs`TV)IErnOjx-~RFXk?fyKcEY~bY7*^+G(;>%%9K`_A zNV6|@`@+15vKy5i`1V&rw=wwWmtKWScm;$@^l{ut^C8|}h*}-|O_$8m+uM(Ij$cX# z_G53#@+Ky5^u@DHOB4!ba(!zY*pY@fNh3<=xKUM5YAxIhrx5lw(w>n==-SMc*Px>J z3xqks!gK=(O^6W>S~k%8CLFuorp89a=P35sIwX5hSSY1j1okX3F&#y?<_!IJ6T-@a zN@T(CFDDAgcNR{lIgwA#%uxKI{>&R*4>2?_n0Ys&S}I-<{0249454kt-zqvUQ$z4; z!TqLIQ^CR&RVLI$%XhzCp$3aB2%CZYp>pszn_54Mv^$x5C|?>8@pL}-?;0YgM|E%x z_xAp^iiUD$a$_Hi9!|9M9+f!F6}<@r7q*Igz-7KW!|E;iVsnp&n)9UPI$Fkyzsk>iQEOaO)V>Gs!E5`}dGw7jX)7>lU-Z@doraj20Sn+<+b&bb29)ky&?gC&lZ*Jd)}-crya+&@Z%sYDQXh;)0(_tB zJo5-8#{D1eS@gLaO4Qh*KsZ!iMYn{nQ7=wVkO_Ff$mO#7MY2=BMKg`nh><0YJ#~zn zf4J)w2@qycVrF5{H|FjUO7V0RWJ9r5xWx3Vtje~%Q7=%AeEKv1gh58GpP0vid2&+g zf%N`fAJj1(@3dqkuay$e5zsRFiA&l>Ess4W^~-#Lt>Ek$MQHFbgR>vGf2v+s=ST8Wvv@trl-K&1da!65iuV}Adm_vai;Ns zU!-@T1)5CNr3V^Cn|JM@7DMA~Gt|^x<6#tnF#5hCLa?b`LCJa0^5c=Q!Qph2Z$Vix z5{o-BHpT%Paf=^mp-k201!umU6#Z)WruJ-B=+tjHy=Z4>^dgtTSVecIp;Fln#ip>A z$ihabxl(vZ&y=FZNfQBYn!-ChwL)(7>h&-?WCvF-smr7 zd=WNbmlvBzpyCJ%K#)CH+tT!x}nfj!a; z6yMF(Waiq+9Hqzz|?Q&b?E|ucUIdk55l57u5E;W z3EXDF(r2wRMn8I7d{(k%tFJ0?{F@dU*RtP~i-kQcCDU_ATfvKc77ZC*{-wUZm94ZoLpCGMl`iX!QW9h$NrPh{< z6d8WR=)Jnhuim=8_1I!-h>rrl`(9R@`326+_Ji%f+u5?kQEPR|0kw2^*2TZoHJ6Y(%PS4`WkVNRX&g|5x868g@y<5xq~ zw{3;H1KpduVp}LKQLqvmpODUmI`{cu=z#{rT?%AeY>yO1>oJ#E_5+L`O23O{(r>K{ z$t%^oq*grmL}W2=oI(Al0(#VnxB3|VhVTv4X4ewqakSU|Tv*mqO?LG+eHpG2-`;WM zfub|EH-iT2J3DPZ9I3(d5|RR)jOPWOJyS|e@hED2syoQDf7mDFx+KU!K!zy;(`BZO zTf5F|r>awUJ~rqa4>gM;p*{NWUE}5=2Dv+I%LLyt(@w)*rz5SqCD1p0r_h)VP;&H& zPy59%qb88#z%zEZVce}~IcpvSX z{|O7iiCaetp?Cb;9&6mG+3PINT2d$Fw`}F*B6c+#?OVx^LtEdUEbtZoHFAsVyy}}^ z-d8=^eRVq@PbGtB0h~ED|x$=UFc17JZyw}VQT3OB1Y5M&<*8mgljA$IXapP7E21hKraY`Z| zH*s~Y*c%0FiJz#NrwRS|eA9oLb9Vh4K=~d*kP4wSH1dv2j@q`iUg?VNLBX-wfFb-q z>&T%{K@Y3dpWh9B02H@YNBUZ)blz`GwsM|IFEfK4J7GVrm4Ty4jSsQ>3|dxztwqa6 zaT-SBu@N9bX#ObQwBAP;6ZN;XyVZxS}fA7-a3?IoCwcFn#I~pndL0> zcOVH6w|<5*wZFLK;+`*6T!t6~qddNn0ZI^9Y>)Lg5#)YIkr?|7o+ zJd57ytOm~knj?Tt%yfZ-R@%Vcp?gG%V8p0BWTS;gQ= z;cGCsP%@`#jWN?hT;$FqN1vi2xVF}3{1Mys!uQ8YWqa<8jp}~$XJtCA8|8m zYr<+9=<85v%BNFA8Y5cTOw5{fozMfa4t68sq>{84?oQ?5scA8qXP(7}DgGROyanbGQiI^xFZIm(N?Ay?*qXDtk4iamhSi-*8hP6a6WD zz!l}A2y23#nsAiaXV%!W;tAYrFO7idZ(VEB`1;X9Y7($s@Zdu!uV2R|+nhHdx zp&80vSY-vgAs@|5@{C8DLMLc2CP}`u zj9o$Lx>A`b3keRP#@F&24yT^*M~4pwYrd2z<_YjH;A@nPpXRW7>cEyLOw9q5T@c^*ielP7u*;cn?&rtj<9{^=ZcuqdE(<>tkY(n;4tPmev81o&yv57_{ zwRGR&kMA~teG#p=vs|A7qLyRPI?NP|IOHqIFY_PC{~`S6mxIm>Sgusu2RO|oA>Kt`ewSiR0xt;gk6iA<%cQdp780{%i zoS9u=z;WyAV}ORr&VCf*R=vyD91}1qDBs1lHyK6K7q8uX+kxZ3MA`eirLgkR$p!=S zTIRl?r*$mR;7Zc5j}n<~&gjS@6bG+t1?=4@>McOE(WD#vdKr}=xSH_hdpDdU( zP*I4CX81h^tjGg5Z;S$Z$zih9r1RpJulILeYuD`T93(^)QpZs>E)_W|_@Dx0SOtAc z!NI9KR1?~#a=hhFDxtQBlBp&!Z9v=sk*>W&!7ML>e_JB2RV*6XBHp`)TC+0;BYVnA zXsBt#5=4{W`VBP4dBG2KMN1ZNFeo->I&2$0^`h)cxyY}!x><9m*QgpW(&SN6eamCq z^q&0C2!XL7ajn8cyHI>MJwU+-^l;soIX?AZGY&khUd5vO$|T1uyxAdvdTK+);W7Gy zD11=|1&Zl{1KH4%#l!7uCWKEKCgzdyb>JpxXW*cRFL+ z!tfob$sPa?n630nJ&CTgz>N+EY*+|2#K0A`LaFfQQS(M^u_GrYBAjZbq3DuQM|Lrv z!7KT_9}liG_cBi_pq(n@Xkb~6>zWl)yO7N{!W0-Zi^#^H(t&Vhst$*oF9G7_)(PH` z*$_9^A@y0|o7Hy|flg-vp~;aX1UM8ap41pJFg)UZ|GjSy^=qu6M>B*PBJVBWRE(S{ z83W$b&Ns}S-|g)t>BkkWv~0gUb-pHYG6S{d1!(OSU*ge1;s#WNAB2XFq8PT}Ryy4# z6>IFS!h>@vG>a<#eowqFRnDo+HOh}SyCu6GYxWH(RglBO+FwvS{#D~<6j-Y!8t?0d z$MrS)n%2sZVTYdq=Y+jWVKIP*akdaXOQt3y?FxCog#LKmK!(u}syz@4-5f<# z3TiHkFUAS{ODDP3jxSW_XGP}{21XL*_I0pszVkvu2i!T2KemguHpN|E=oC9hN?*yr z1Tf4xj2ZYxwnpmXZiMW)y-^`+v_zgzf~Y-}O<|F=p!3wx96psMv9!`P)J=wU2B?$K zLvUIaw5hHsfm^yYk(|CPxVmcU5QE~Sa@)gMo||4?d$Ky#oOeBhM0hPNon+HLd>#{W zI-{7@r%?4^Hev#;nPwdFX$xh&r{Qr(#Q9QlW&Z}HQAu2l1?e8h(j<5~%giVP=hm@; zcq!EBU{$Q4((bF7!EZ$8TsCGL%9<&V%##%Q^_N_#H*Anuo=v&#@|0S*`F?7l7In%Y zktu(q8%%k zNy|gmT$ZmGM4uW3JE_tXeDrZvb3rWwiiZtNd)kSOJFir&*QneiMl_ns0-vu)iWwtHW*+>oFf28NMwnKS+VluOyF;kEVP)b!R(SHK4%aMqPPCCsq`~0A@?f zWl&r6H)@PydAvdS_xTWX2^42>g~|djVg#Xhwx_&*pQ3JFkj|t~R;A%?cFv{OwA^zP zg>xNr+?srfveNSJW-n8obQ*Q;$hO#>dni+fB^0d@3j*i1j@}|` z;9*Ah_b1Rk{mjDGPijySi!x?%p)l%2a3#+QC(a5^wOU(UY=24iG$f~wW8p^KKOh~| z;-6D;b}F;dA?6BHHgU?Fq1wM5fWYCR;G_Rwc>eNa0zQvX%urled3pLP6&2X`@B1}+ zYZ&^#utNESvYMIwxX3S4H}?T!CRYNA5B2r+?|#nuNEyH~cCSu0?d8pkuu)vyg)ETF z)a0pTp1=z|LTuFA2vp!1-cOu&&w0B=3*O;O8whX{_x)&8kaJGU3Jd& z_rER^U;g|jf&?`oZ4Kw{^t+}fSLk-wv~2sE1BNrIc8Nj_uQ=IJ6dLl8{4D(IWN5(~ zbrdIf#m$2qCy!XecCfdGdA zpZO-4HmSZ0!r&r)D|#;~8S2mex!@e30K2Y5OiiYGdU$wzb2G&0;Z**N3Woem!6hOp z=CHp?o48U?vjJ5Pi0qsGD2DvKmc^~VZr?(!PD1OQN-2Quoa|t~FXl$GduO*2ve>65( zFD$lLsjHRUsMlYx!sQ*0N+jF%RJ!>BEtuBSv>NG;YjsyuR8AQkRUUGu=YA!P^K*>@ z-g&EY@pGApaC_U)mlKPdhP1$2ej?$+z(nBSzY+qtQ2Yh3w^#+AnBY}vYAS4Ua`M$e zW9aVyQ57vKNXkp%OXmHL!}d(c9OVAYY))aBpo--~>EQ&O@3=oa8@Goz36B{r9d+GY4Yihl8F zZGsOZhDi_Hl(Q2nnEe34E^ZtDnV>T2i!sv|^!?x`h{Sn4d?yVAXMl^g6Wna9wtW&_ zSax^OSAUj)ai6vJeeCTm8D71`#81yy-3%HH+mD&K;@VjV=jj-Q)hY(6ci-y0e&ohb zY<01q6G4i)ChZ@c0J%kEH$X;)Tj?v^nSq6^vewV{rQXY_Uy14rVHbqAx5<`5p6(y& zK1%pY2hGpg*W%kK`u!(1==XnOgSM+Id&ELSHj`luqhosDX?J?rC-6uSjnw&>Ie4|k zsQM=7boPnmPq_`f)vkq?(Yj|A%PscVzbsf-56GV5=;-k?J1V>2a3=C?xlq|=tWzkq zremc+Uc^3hXJ#+kbAH&Y3%fQ5EoD`)j>(JM(DZ6>DE>fkBD@p%pkoPJkGQxiBwq(O zcbySk_RH--m*gY3e9@AZ#NgZr=X8P800Pfl$2sH^)tPxfGp_cVMs&-*ceOLOv-Zk( zBCCQw%rp(>dE-O7H38d3sAPdz^p}ntb8$;HfhZe*N@m2Qk8vnCbN8^mtTL_*8YBDO z5f_AE+-k$@v{O=b_lNOe z($;Z`1eb+RHXI4|kfL3e*242K1Ct*mtPQm^=Qe39ZstleXs^*~hFb0UyXVm#@KOg^ zEE}UIhy=QJb)lsO+DAZ}XCKmNKRMeBiXtTxS!BektIC*tXGs7{om4s}iA||t)q=H3 z>4rxBJP{FW3PDLLBS^eVm(ZgXp98v?I+8Y2aDBE7M`gim-kjI^ZpsBVL}EHuzr{DL zHw(cDikwtZQVj5e>hb$k;!znqkn@W&1jK!=4EdaEZh(oG=ewM_42f^JlYPG;m$ zhZ)A2zDgl;m8LdJ{|9>#OX(-EXiv7VyDY?_7ARzBzQ3W6V1^z?DS2LGz2)-t)d^i$0Nuq_W$Y3AWdo`@Bw^55Rk>`H$kP} z?wWrOeQcC-nYq9I*0h<(p!G0%`F*(azbO2K`}nvzny$U;@OP52Bp95bg4TRHC2z~ zqmf7+T76dP&=2Zv>YO73sT8Gt8oZV{$eF8AOnK!<Pl=!?*4?2RNVu7g&)~< zk6+XH)g5BY<$lJo_^HI*BbrjLL^G$zJANN#Y}c=|TC~kOAH1iqxl@{Hk5PPlzKg$F z9V!oLNI~rwrLHrbxfwCZn6eH?+@)h4YTE$yi_%EKV+p*jqW4v-b09lmBwPt%HG7FX zP&*GPTtc=+O6^J%FQJ3B$iABDnVyjfnSJ=sk{2AISF>yc&|gkivg;C%jqznk`F-+X zTQBkjZzHi29%5;#(@p30^^I9U4Lg=`OL z$t5k6@fi9)IFFXSJLT; zY&!#858>S;oYd@H(!yv7x|Y5NL3IJUUHuBAr+s>^wFFHX`NAwVF2KzP@7Hn(n@OL~ zDFOf4N>!%)>oe>5@mze5U!Mb>1J$y3xW~%q_Wqae_B~jxUL=*~M4(vqm^j373MZsjLooXj_svAcfFW!Fhk}#FMkL}+ z&~JJN!e|u}hSxZtfCB74Hrm$&`B=$kc^f~ZuXFvCDpkO~;6dkXxz12TgM+o3_#)-_ zGh$e`n(g^>OljxRDmSUgdZx)w@9W1H(73Rnph4xlA8$412wPg6P(-P zQZ~F^qoI%s45*$+{2gci4>r)QHto3L0;vLt<>4JoOe=2FShTc~o8|3FFP!y2CPuvRXrTDznc|Yz^S1iCGehFly>PW&>HgZXu@^xbU z*K%PL9=SoKqO1KP*1eFIAF1t&vA(BJ=K{w9ctuqiQON%-3bQ{Zye}dk#ua5xV!B1G z4o+_P?BMXu`VlJre4lAi8am~FsHP{$jm3@kU;Q2pmN2lXfe8rzda8m-d$bHbfVa`F zOiiu-gQqS10^r%#rQ9fNI#yQMH_yqVgt|vOU=jGr3VxA`N5w^&>JQUHne01S?Cnua>ezerrvuS5j~D>ajj;B= zRP_8SLg{}X3rfoax9(?SGnfysx}jVDkca{C>A?=O9v}$fO~VBvS-mwB*L#=3mo265 z&CmcBCvlmP@D%02-(3k`J+gvYAAADS?EYb56EJ|^-%2>#iT$>^Y#drBU|$_|_gqTA z!D|8t{jk!W7mK)KiL^WcEX06nh?@Y2l3Q?NNo7L*!anUa&rL4rl3!$lUqgz7g%>6k!Eh5FU?t9c z$o`-`<8&tG+8SkaqJU)%0Ef@=!8$6FR0>aTXko!mi|RH&I&h$`l0-1zOr0R%!$Pba zJKjG4deFE-gr!y-SfdR}9j(!S6G;d&U@O6wF2;W!k(t-hk z3iB`Cjf7*A;ukDg1!=1m2vuJQm;H0FBm6%&S78k#QZKw_LV1~xhMxN!VqaO%IG&z$9_PtSbB z8oQgrRz`TN2;@qC^o0Sa_viSkgA*kn9k4L*>)DoRBA1rn3mN+yOlZAT z1H}Rx-`5C!PrkR+A9HHd288R{O1!;PBCE3Gp2y6jIa~}PELWQJjo=;J%s{UiyK6;> z_1^R)WM$toPM^1BvR`ZV?V>_Ejo3_?rn5p6O$yp=?wu^uuOcucs^wf_U~K-}+v^_# z)4V@Wm-K~Fsm?BUPEgq-_SG-r=b0@fChEYdQ9xMW(a!PbjPUjGp6x)Wl$?C%V&DG+-lklNknt<+KyMxyr)$VwpO z5D8R*SAFju#W`EMRD6IS{DcM=sN~?VF#_lIk7%w z3qsw!2<%LzE1L6HJ{-E!8Tv}YzF;ILzU?bKnQlY29ah9s18mr7ZP*@HJ^Un7gOEpT zIwc^)LN+H?k^>1>e$zmP>E3!WzO5Gfx<0V8RnTg&w*HSh{x>7J!8~OV$#xBAXEd0P z&rnNy6f7Yz{O2VDyxeE89xMOKjP8+M!c*(Yv4!)kdPX3$up_$KkTV`2i~Wv~?^VKB zc}IRssWE{>LudYoD_Bow(oYNSRj^Ep-`}DFfFV-TOcpNMG#35Jf)c>!MUa%gjZ(0o zdKN3a7)g+rA7(>_M!qQ&5&50@v+ad30=qBnrTXs)@*KqKC>i?c^5a`8QpK>onrPrx zMC~&I5S8BQdu5jnPGXk-Dpc*i_if0GeUUrM5z|SOzk`*O#O3Ed{+~MG|EI!hKw%B2 zTaJjrNoB%5)z&6q!AnErzf(&B!AA%1e*HHI%4@8iSyoEwA6gRg=0G53!T%$+E`p$9 zK64*qRnYim|0E>;JSPo^%DeuZAp6#~qIy!{tBW0MjKX#+fxq1h=t~G-z4L#k-2U&K z$N!8D3Q+HJa&qP{kjdcl94e1!CVsQr{`Tu;@&|MCPw!p?k;)J)_@3J@FwxLTXr{bH zCH0vnGQIX={}btb1SX*b>aIqd3TRog|IP6LI|Kw-9pKh?5kaA$11l(;g~TFY0=iQH z$@)cgIN)7I!0X_|{P(Q+i6dESTqfZ61e~g&Hj40bz%$|RPw?{|2_;$X{tZynpkSIm z^s2vO)I-^kP$rjsAp&nM8G$y7-S93f0B&nLDk&-|Dt>ZL=7rTTm*T{@d>;t28S_Wp z2S|lK+EiCos`U>H6qc8lpR)vzEbeJX2gPYHcI5C^CLZgI+&2zzU+N~Xwz3*x;VXl| zplxj?3q8`eC7q~FWXFYi0UILkHEcpR4GFqri|q~khq za9k9CS>aRCRm+g7wK{O zbXiYZSX5L}TH3?8)Lr(z?=<()XW49*4VVfWjiXJNlCM%roC?wB9wFO-4 z1fyka%;|l+9pBO-rl_bGe=_f_-V;l=zz8`TFazEsI%{F6fo)~1Y&$uo6>U?*r+MH(48gh`i&|8>l!Zu;#5-oPI*M(`* zH}%o28qKZUk9Cv%Sa$JdlqbFQvhgZ(es+Y_Pu}vcerM(g9bxN} z`=FOoq^$Lv2eO3HXs7#OpXz8~z|>kUt8S6fjL|655y%?an&16;T_(=S%edM2L(AgZ z$6}G*G@py9ce%*R$%zS4zY8~ZX^V47-E*RE%50l)XUzspCxrE&nX|K$N}p$(=teNi zNdzA3q`u%~G~QFci4z%Ld_W(5ehdqga(FZ0d(2`IXE4HGS{5iDA<}4`aT?&(+Om3X z2(E$^crUywxeUjdo~3~wosO6J*mOyUoZcHr=n)#SB|Z$IH=rQ}PlK;u)^_aBkO+PO z0X+e`N&17epIgLN=8)6hp$6qnPEMHpBOnDhYj z01k;5Jwo!jBi_3oJJ|5CvSuD@m?oY)H!Qi1s`86g5P`sP=iktUHQ>cm^ zEHV&DAELVFI;7Ew>JssQm91KlS~gpzpyN2m@FHftzxyo9GcXWuoUl_mVl`B~cjrgq z%=LVO!jZ+~;MgYp!Bon!m#O)Wd5~n(qZ$X1`O*fI%MrCyIg1#Vs@=>jCJ1%Zjqa#T z8W206Jan+|*-G+DEm;ShGpP5`G@P&rFLwm2bC$KpDs8Iu-l@CGS5Gs6;KNnl2H=Be z7|3EnwYJsYUg~I5?^V7`Y;5cV`uVdKr)7C#R*MT1_=|Q>GrarSKr@o#tJMv+rEK41)6>1t!ErUAqPH(IX(j9~Nw`EO9q*BiJav zaZ_YAh_$}?-Gbu$(EBT081}jg&G42Hc{zphnu?nscga|p3jT@i%t+(~l@t-$h(JHD z1*MQcahy`wI_Vqln$ziR2?k)abc^_OpQEZWdR*GAN0~3Ff1iCjNX^aV%Js#Re%$K> z%^?=Hr@pwd|D>Xh(>PPpckXJ+A9JfMGsaVd6xI{!9%h=-B`Xxs#lznU_RW;V^t(i6 ztUA?2JC-g8mf{c}PhA+ZoP?W)CLHkBsT6bn^zA`w-Y#&4IGZG1_(~^AJoISK?DSAKBv zw3UNH$}`*X4K~l~t4m&oSs`)xFk)Vx^=$VKt4BZv-%3*^?liRZ_4hlTfID#=bt}8I z&iARQsV4Muii;n7h>iQWY$m;nB#_gGUNW#vVLJYg6{B$=sF+@&|^-3k6~j1Kak)g9@y*YRt- zgunTTsqkJX zqqm*yX}%<`+c~cySxQUf6Z^b z=zO3vcj6eYG-aWrV9V%~+tY-==IBPQrRa~ zUmu=jvQg?byF7}!Gj2_MXK>Mv#}jR-|2wZgfPRmJR`<#LEvlBX<@srvd6`h5EdRKx z7EFoU6INLnN7$;=CRv|7#*zu_-~S;0yv%@(O)3m@i)YKPn;s*(>FYOsa~=j?%N1i= zym3=FA01TUbi?V`exI0Vm$?nI$v#JkncMYc8A#@Q$8+)P zm}F3;4&uhEjqh?IS+$E! zE1;LHu7cvGI)0?Ma^@u(6pz`e#g!yZ73}BTNOYQUzIBQ)XzN7AMa3V2nYhaZO~a?k zyK4C~2*#J>iq}ysrIyl;_gn+qWjqvuj(a)-K}X@TS>!^=P$yD9DF!WkgePgomMYn_ovx2&}9ojbp|Vtbo67lSVY0`Ea1P+g+^y{-~jnJvP?F-WCqg|_SnMgUW0(c;Amn` zGUesXB{?RP+sH7hbrhj4|MYEjvHhS*JqCx`r?cQ_&!NGNi^%(&o0T!Dw?k=sVQwG{ z^yO1FR}KWLg|@l(LM+c=al%do7lH6%TdEk#wU@2C2jLu*PSA$yveIovYn@KgJFnH= zN`pO!^5p?KP)RG?|0X91{yhr172;AMrYIQc47xgj0qW5><<2c+wqzEO0xyV_fSphg zzxA( zehsjiaH4nW%J!)gm!(2im!S;cm_W*7CSUlmZ^is4%M@4L??tGfz?*AbH}8%K&Zh%? zSjS-@8J6fw`%zEojisDqWKgyPUj@fUF^X>H_n)!3Xmdju_yC$gLv7uH*WW3~H(?m(TPzAiSu#^^Nl3_`rGzo zy?A5C6%F%j?h8H*CR`57L4{;-f<+l27xXVKmKAP?Mi5?~I@R3_3WaoEP1873fFKVQ zWvS!vR~#^(Ju)Tq`|i}hXI#Rl0s?BClU5>anx^@LH1bZi%I|1CFL1t)iFQnZy=Cxd zz`;8fJ${xWN&T185X!b0C(VXZ>$x{h`*H`K;&MkYc^-o8QTydjO>w>2XFUk9{NQLM zubhN68Qs-oB}#lM&OA$9GTDnJFTG4lV);otM(Y<;=Qs&HS6!XAI3I7jbKnGgSCoB0 z>Emg1E9{u!X`Q$0ndapVu714G2?5NVgV4eyCzk%06mXR*yLBCQOWZT;KEcz@K)*Te z1bLkvX~ev8j+Du~nC$CA^=s(NLsBN(2%J0Pt#(tqbD;0i zcv(s#gKnVl=r`t&M~W7Pd*m$C`vSE3Y-TEP!=GeBYlj-_XNut4ZmuAhwNYD0qOnI= zOauHB9s{FfA^(|-H+UR!Ah3cPp8q;fNG&*?e||}p*DBELQ5^Yrc*@O6i5o>35LMmG zl1ZMY)L@6}Mol{Uy+#H#8u}p#>EOteNJEOddpm^Zv>?4Nh-$>%;98FNj__(T$&EAV zj7ehLbNm^<>imG7&b#M$AezINpW&@5`NXY09w0w=?zfV8w|eSjM}*AsLu1`JUxL&^ zGA?7ty(c9OYZ-LPU9JWbS+swCz1ec!*#uAyI}dZzsg4Mg!e;#T%S9$#J?V*))?l=+ z9{`#^oljPVQd+G(+}{ZR)$eKOrrS?$AWb>gxoSVS75Vd7eTkLRUB1e4zs3cR<-0Vs zJSJX9CQcnA9>3hG*5iz}CY;gy-S9Hrp{G0p+o~gR9LIc^-AR*!n?yQ?R`F7UX(UUr zF)`z*@zFG*_041EPm%1btiu#7Cu1~thu+OzpWtj|-H>+v4-Nhu8$9&-u9evtjAg-rKk$o#-8!J&&T?Ex2 z&thJ%PvlJFo!bx#a^=OPrX4e3ZdM!JM}1lyv>2+HKe`qob5Z&i+H)eMVIUk?rFu_zX~% zQ;U&e;}LA+XlZHb5h91r(EZu6FJY7msaYW3=Z^ytlYI=N`_d$QFv!%yH>t+VWqK9p zKbYKaU{_CIuWVd8RK{GMES&tgXnt|J?|inJO416gzQ>4E=4#cU^;{uC!~w34et?(X z*WV#j+i{0L_`!rip>jR}NRz)yRnsQhoc(*HX^#&Y;OIt047OIs_O=~j2)Ij5UcMiw zX;DgpUEObNjFoFrL&S%Qu^?@E9~=!M6{ zKD>@_*nDqC;iNQSN5m7LHQCWdUOr43QNg-`D2`1&ty zK2BEF;3zSQnkeXh{)B!Hqf@1wNcd|@PoXsi0k=I{m)srvx}H^V;F9bzC}B8wHicNR zOU%8}S$`*a7Cxws5K&%dk-VxNd?ks|boagJqU(=U@!i8Y`_xa;c70j-an~E|lf3J5 z(rm1GeZM`j1QPi>#%va=Y639;$l~-gtexU7Vt#$s!@4p5Q=@N$q$*Xz|sC` zDWDj7p|Ufe0*Ob6noPJUtFUQ)&S)fqcyc7YcrxMs$FfDwb}8}e^<~#ZPw}kK36Nzm z+NHZ!ZPiY$Z|7ZD!kju8Q*$nTTz3B}B{xZVdJ&2jJE38+9~Km-^Ut3ykr})1f4W10 zd%G8MIRSB9mAuxz(q5IkT9#}=?_NK>u0&s7EnIK)w_j#n%(P#XU9bbi5*}YK^+{eI zNN!z>N?s-oUSGCf>#tv5&Vu6HXhx+HrgOD?LekJ_8iClD@3)t~wU z#%H;}Gm87KPwB1;*dgZ)=ms{(fgofw`}%6(y7@{Nb%0<+lHwpHy2Htj-pOl}<4tc$ z;TZudd7hJmi1gjFeW%{JW_ND^|DZc0F|-xz`t1ol2RljpCJ)x0EhW_|{3=d3d}Wew z6`u-)EHWW?g<+bERy46t1}hpa#p~i!==B_{HRC2d_^z}l)BpP062gs^I<`Up4shR% zj?IHwbc<@dD)nUE*U$uV zG)C)*O4e^e!zKI6n7P_HsyxsND}|{|2fXN|Nc27QH$r32D^Jhi#0PQfIisHQDOzNbqUsXzB81gYmQuwhm3Ee z*j3{oIWth4C6+N(Vwy3w)TS?8fkkB~UC6g(5Ep<`sU{egX+5Fr7Vu3m^j_E8qe!vC zIO2LnM)A1=JJOlX>JM{Gu1!y#gF0V5&xMWo3teuOK>6Nuo^pG-Yn!Dmrl$pqGT9r@ z0{%5I9Hd8WIG|uxX{+}alRT_XIg&0~#1>Z8nwYD&`uc`D!~6Uav*#Fvik?}!?R}De zuJxQzf`#}T*mDMx%~v0Wk=41+bcJCuY%Alb99uMZ+RhzbwOPmVH`KtGgMx@%VO}{R zkl?36!wga+)A-Z1!YUMVnR#S_Rm3GwvM;>as#Kbp^`VlQ%On%|mpopFR^ei445~@b z0E6D4=~FM4+F7ryil!mCcQ*n;CR%QzjGuSK`jqC!ODFQ*Qarcy7J43CKs--t##mjA zt?A=C!)=Qc>8p}pwx`KymBD8yj$cMSepDEZ9)93bm!&CQ&>{CJJm3pg05LQ|9{5Rw zy(%p&I%l)7gT_C@h?JB&HlqZ-0*Lx*p!&Q1%I;g7_SBs*b>S)Q=LBmiN}>G(N6h_? zT8hzaB%@z{Ru#K@&T>46Exm4Da&Cr;v^cmg?7n>Juys@_GyxBCTTCgi&(@lmWe}$L zS)<$93_+nt4t1@cJl-desTH7qH#(0mH{??Re4Er-vN~(;#_;JZ75@Ald8${-Pl7io z6*#u3x1pjtjj|B+XMl;b+3g&EM-83=v!FChF_Bdw)7$J;-9Ql}pnyM*!*l1n2WSeSnG~|RnhIA g3#-(9Rk@OE1M>}N(+jo%b?t5_J_qO;GG+n)14EX{IsgCw literal 0 HcmV?d00001 diff --git a/pages/login/applogin/forgotpassword.vue b/pages/login/applogin/forgotpassword.vue new file mode 100644 index 0000000..6d60182 --- /dev/null +++ b/pages/login/applogin/forgotpassword.vue @@ -0,0 +1,289 @@ + + + + + + diff --git a/pages/login/applogin/index.vue b/pages/login/applogin/index.vue new file mode 100644 index 0000000..82b8b03 --- /dev/null +++ b/pages/login/applogin/index.vue @@ -0,0 +1,260 @@ + + + + + \ No newline at end of file diff --git a/pages/login/applogin/loginindex.png b/pages/login/applogin/loginindex.png new file mode 100644 index 0000000000000000000000000000000000000000..12ee5777f68ba0af4f2b16dbe438dc7da51bd3c2 GIT binary patch literal 11985 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 literal 0 HcmV?d00001 diff --git a/pages/login/applogin/register.png b/pages/login/applogin/register.png new file mode 100644 index 0000000000000000000000000000000000000000..38f86f27d493e3f2e0a1706939df5b767b026126 GIT binary patch literal 28708 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�&F%DJA&kEenwx&evPAi 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 literal 0 HcmV?d00001 diff --git a/pages/login/applogin/register.vue b/pages/login/applogin/register.vue new file mode 100644 index 0000000..eb62b8e --- /dev/null +++ b/pages/login/applogin/register.vue @@ -0,0 +1,294 @@ + + + + + + diff --git a/pages/login/wechatlogin.png b/pages/login/wechatlogin.png new file mode 100644 index 0000000000000000000000000000000000000000..f78cf1aa43331990ade8c48266eb4ac21841519f GIT binary patch literal 16939 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 R??6GJsjBz1QsqVXe*@)u!mI!Q literal 0 HcmV?d00001 diff --git a/pages/login/wechatlogin.vue b/pages/login/wechatlogin.vue new file mode 100644 index 0000000..a0690f5 --- /dev/null +++ b/pages/login/wechatlogin.vue @@ -0,0 +1,151 @@ + + + + + \ No newline at end of file diff --git a/pages/my.vue b/pages/my.vue new file mode 100644 index 0000000..1219f4a --- /dev/null +++ b/pages/my.vue @@ -0,0 +1,82 @@ + + + + + diff --git a/pages/my/aboutme.png b/pages/my/aboutme.png new file mode 100644 index 0000000000000000000000000000000000000000..0b031e6118488c6525fc0f35d0b81ae8ae20bf38 GIT binary patch literal 12398 zcmeHuXIN8Pw=U{N_7)X;5Cs%MQJPW}2#AyfX;K6MAxaae0zx1_@}Z(2B@mi`5R_&_ zKxzz-U(<}{`y}=W2?-rAhnUz23GFf$658GV=Uze2p5b=|f}dSscHpZ*RXo_+;v6O#>N7k=URHG$LQacza4-6#+we3V}sufoP`>}!KL2!tVT3D zt;^>Cu$mP$wlddbKe+td9WTaDdLa~20Fi~);H^g!ke>Mekg`ru~|xF-?Jl~ zA0YA*=_lTE2IyX{xF2!SSE9tzy|6^qX>()+JUk~`#kJ`X@k^Vq)`buS6ZMr8wdN)D zD55`r6yTt+T#%h}*gShd7QNZ&OSvYsFj4t|hEv5qN(@W4Y^kxfaBW4zZoZpi$1z{G zq(EvNq|^0@OYni2feBD4oV}n>Zv(pu%m^-u3;0JgKLMl0_>IfPtc_I6u>< zVkpLbpLZO@?+iPus7B|3Sj#j^SB7L4Yr^_6)Bjevn@yJ#|Mubc{WeqtO&LF+y1%9G zUyrCqw&&@fckSx7UD#)0w+E}U(2vbH?MGH#{_$-!0cgQKO!|Z?-fm#Ho^E(#^zv2)Q3|FHnZJ_H|HNsx2_|ka_&b>Q5){a zY;!CoVmVa43-dG1znsbjHE<*o!vkb(47m>`AEnhOGTTlCXSPHKi6L&4_cqn%v`mmc zSK5zFZl}_HSIv4~8b96LZRNO8KV*J&M%Y?io%MOP{by4CTWF57A;J9-K=jU(*Nm8O zRfd{R(|vi0>WzpFy&2v}H{!&`6))vCt~;A|<4|*%qhU6QExcOlfmqFcul_%o?R-&$ zbPXY7JJ7Dq=le#FSG-mE#zU((SrQep(CwK+qmR?skT4RgJ-9sQo~HdJbQF%ABO)Dh zVL7hj=CPqt3jk?*arz@_u1||gX!TxQp^T0G!T)f6@KI6c)ZJ{JbLoW7%ByKk{)ODj zAbz{p#LH%Vc^e}J1l`q&GC)zdKZWr5L8dJ?@sSe z*xIpif2IOk@WS4#@tE9$u2G~*^L|Nt^=az;d1tQBuJ7RKONW?OT8{sGbb0MDr`Td~*fCG@-jw@?o?_BIBb|LN z9ze2T8vmB(Cj}XVD?h=u+9JU#Cf==ZpMMX8`22#wvJvTKrgqH6eNME>a!5>GPGt6T zalO`4aXB>9H$8M_O|hFYd#k8m9pYEQ9zwQkKIUZE6VPi*BN~WrZaWY-CUYY^5p#xM zjZ!@t#Vl;4?^W0X`Vh2#U60lBmF$t^p5e9{VUdWk5HM{JmMwA@j+cY)|XBX zm5@GMqU4P>H4B$S)86fH)^;x_X2@;Dp5bAt&hy70cCV>3!G!Tvt2mqIyj%Q~Ulu#S z(kUrC#xVY~4F2OIk#;ecYyMv^qx&(<&_%W`{pm9{Fr*xW?#zCFUA|Qs`B^IJ{d~ID zu2cHg4K|mJH)qt4CpT_;zpd8^cn)}Tmv>|*Qsv|Egc9kGj~|s3b&iiMgxCCIi_%H6 zZq7(OPfk){`^8i0j{?hh*Lv09x zPjM9j$L*0>P2r18b8?AP+9*akovDCS?Ac?4ve*JtaeJOZkK|pn$u|U28g(JVM&mi|MD*2*r~VCoLyD z#mwE=*FK_59hYL)*6i)7-9en8^24Mf4aySrdJ6Lcb?d#!gHPnf8J+9Qx1G7_JUXp=dHAi-TED_!-jftf_TUYUu*6n{Bv-uA8Mpk^>ow3=X6=5{~gw*ECw_-F-_&x}2$SJx(2 z%i3C`4tw9&ZRo@k7l71ej~P+0S!s_3ORf*x34wP;`6^FDgy44m52H%xbA{-3#p&-)>eTgn*nU zI?L|-OJbGa6R8!t1?QMBeJ;@*bNp~YJZCrtIUab#W8}u zRG9kb)_8nU$zIm=JiWE=%~;rSptvWJL&rB|#gJdS-v(NHTRh#*O6^^5D%NxxZ46`u zVhZDMppj>%Np%Q?=4{ohw{Ml5SE$n~o$UG0l|9B@q({d4PHR<(Z#_?={$w+Mw|C8%nEtHa|>Gj=c-5c`-qj3;PTwNv+4kb=FNFoz$JGE+Lvf z?wJ|p#WE6#-gyU2EHRjmaVxWoVA|ATYRm_QxEnYCFj4M)6N`=jwYz_*JlF9 zbQ`mrwJL4?uCY`JK92wF*D|cI2Z25plOY!GDV>r^#_p19jwDwHI^6e$r!z74BM$}M!_)x5E^OMud zyps{psB{{j06IzBH#VL_!rP3FDa8#)DNLmXY4ttnUXyre=&l$77DSFZHf&Gs=jeYx6zBrR|${dKKxEcV{E89c8&1yO|WIt?Xs)t5s?dz$Dgm48&FX)tQA(zL|}~w90_(e5|_puMN10%Wy}cQ|6iD zC(H>uCBIU>BcVLnrS$#7a&w*8s*+xgD%%gDeHyOShLJo--@k`bVDI6>NetFVifWF) zpIJzX0wg&bF=k~Q(U>$aszXt{-%3(ir!~U%(J?{Y&0FUI_b7Lm$(}|zsf;F%f*@Rw z>b>$A2#cn`GL+d(+UI=7=)B*?4o>eEME%Sg_(+YLUSdg&q~zGQoSdP3`%PFr4i(Dw z-G&t(yu$v>SALxLXMHeGkCXamU+thm||A z?XuFJQOha?j8kq?p}fz=V(-U-Trco5`SUY75tYE=G{a7}63Dk?Y*qT!n~0z6w>y;| zl4RSCe4eX*H~+PI=zSD;&&u}AONLTHo?|7y5w>ydN#5=Q{qJtBy;xJ zY4c#j#@e4D*3E+gXvg+_(~}vmk>zJCEAUQ7=2K}nQx!)41h*j12-EyZ(%c^Y!f}CT9Bo$&bHeouHc_P>jqdL4k11R4q5Atz$aUO)x&WsGG9o!i|&W+C(**o_% zbl@6C#(FaFCjNzJCh^l!I}>R8j8c^*Ywk8hYZQG4fE;+m)4iBr(p$*8hn8kXk%q$( zkllj$bPvpApX|G($d1-Roz_>>o9oVyT%EmUrko0ovfYgZ4~C7^XAO=-f7$_I1}KO{1B6wzB@uy0jNg|m}0;c!j-h+f_ca>*|W zTMhpcf*2`@>(VDx(B(kfPL&f6Xo}k|+JEiDY$`;Mc$D6UEo)t2FHH|xugD#NT(O{A{88;|zbwar;` zTs5-~Ox%lbOu6=(Fym88#xjs6IF$JVO{o`8;3cb|7LIERs?hn>hle*Bi+V@{n&h{Yw|*88GvE0(p5V99Y#C*?6O-2SS)m~qcPYPaAf#Uq->inE?Xjw{4eZ57KC7%Qoo!#}?(VQ4?-Dx(Qrq~(G zP#6;+N!{P^;Lhorzt=0c7Zz&hWTomfuAAPsDg?-T?t85F+&>UleEwDk!<{^Hr92{( z`m8CQS2&>sMaQ;gozHM>3NO4q}OJZepy>Ah2lU@Ip1D-J_TwhScI;!JfL?>j;CAh zlIZyC{M7q14?|sL_sx6_e%i@}?wB*4>zV}RtKSSNP){iR5QKqO@6Tl;S!+9YSfo7j zT0f?X`Km`Qo!cqaV+xeD-jn-FICLeI=}krBsO$HPOXwnQr9bk&mwsE`vfE_C?P%;K zW#I_Ya_3B~?e~(I=mP3&Hxr%Hf*gsh^Cm7Cv^>3TCZ3-B{_VK3GgHzi^_IFLJh|0b zf*79FA6a}c&a&s8Vg)Jy$ZoGkTT8RicL6OjqBxc8NA0~H&=8XYf}zH_Gl-W>(k#|w{#_^U z58e|`EZ$G{RFgfkxysS(mwde``-%EB@xl%~e=c2!;R5R|b6;4D943c-0>!CCH+^ktXV+0#y!^ zY7J#h2AZf(C3uZUrzdO6oD4CkT|z<3PNgSbl5t)K1B+82W~bAYw`I{iW&Eyg$srI)`VNop%?@3LXT<@^$blb$TU(ujS)7 zfcS832`2fLy7uz4&BW6R`3{1HG@EDIqq|JJ=JB`bvLb+skzhAeca-BGoo{>auH~8eZE=)Euom!2*MIVc>()UID{vCzKb9_ zgFjNh=-;ljwQ^I8x~LFd2Ca4p)=c-AI2Tc!i0jA*gQn#g#>(mS!pt3mBL3F(+!-A; zr}b#CgawRyhRM5NEtSg!;Cqt1hirl}Ri!zXf3-?}m$}4T>}O{ne)Dc9;B;3kwT)qBhyX6A_Ac%ic`xLo(R^=mT-L^Sfe~q zW9i6nR&hNTxccLeI#5AJVg0z7!(nrw3xd_zf3cakySU_8=4qM}H>N}d8EAqVJk*f8 zmSKr8aMKQ$Y&A)kl0_>vzIbsuS0}hI`J{$fwi;9wkH^>eTVp)iQ%M^u(=+K{sgU%p zuC8Rauuwf1Bh$9n437%lUZ>Ys#JxHz7`{j3V26J-LEf$DK{}3taP95u^Bj61CDGAs zux;sr3sMmjF0u|v>Oz*1b)n9SFXlP?%l!=a4^pnQ<&{Kw0L+TKbUw9Mh?$O8Wrs8pGg9! zrBZNvAB?{bQHQVjI^#o2^@I%{%%{C|#aW+Fy(Qk-NEnGHB=YTBwl}Ffmhzs`4g@MnW{FX%V2}0*u{W4}aM=_Xjvx{Hz#gElr;@ z9>#dx-Q;eJ9a3{^>L>UX$HlCV+?@$VZs)h~dD|>jr&{xsMeh9StHd>~O}=*JhxB5p z@Cf?ojjE=F^8nT>{p!Dd&q=&poW8R@7VP$VEnyj3UWgVJJ@H=FG-W&xN1lDy7)&vM zjqGf$&cumG-GAAO!&Pxm5?RDomAJ*ea+IDGZ=s@kyoZYY+2MDKt+`W-GSHpD?TIlt zVp>){3hy5-v&!EPmHAy?lDEoxFRK%~3oMK6c>#)Uq|VIXaeZ?_m>8Bhpt8D^H`>CR z?uf=fiGYp2?$Gg{hM@2?SPwc zi)-7e0`HO#(-h=Gi84L*{s+3IQHBib25!gv;oQQ|#ftA43N{hteOoVz&1|3vJ;gR4 z@_b0~p2 zJKH2OEkF%9u(qzwTd;-9h%n@B6nEw8*bsMEox5G%-HvOvDFPlg&y+|Zqvb4aEeq<} zvj~E3j|`y2xz2|q5bV9lnyD4w5Aa>ffAC8%=PLmEe$lDw*0~C&>g;$?KvSpYt1IR* zXhkhj`i{V5-8P8Z3_SpmK8EY8@oWdGs90sIx}BeHN9CXlc{gW&6f6dn<4E7Wg>o7M zKyYq}ya+}shL{{FHIuy@zTj|DC+LOc^9x2kKVF>s?Zi2o<$^$b;FR`zdseq0f84Da zoGD=k`lcVV@lNmCtp>lWo#oGBjG@1EkTBEoFH}C$II(IW|6M>{O@7BbZY&*J}+`pIK%gP@#}7t1?+lb;Mn-NwZTeP zau^EUREZmU=XXr21fEwJ(tn>Z+MpECeT5_-7A=Xk-%-QV?ooNS`9j6W)~gf)FgC9L z5@UieChTC-%Ep_g%uW!Zr@M_8=PQF7S{*3tNE7aZ9u3b{+vbz%U!oi01Ao!yZze+ z|Mr3Z|9rrw>$wqdSJ4HNBSQQC-TwP*&{t+9E7&@JzB1i@)Lclh>-j}b0UVF{2y&d? zXCnl==|*r4Lq%{*>O0EI-Q9i3L+Fa2@U0mt2S_?<#5?DAHdT7{(cS}IUlI=2ReW)kMsb&yP=>un}s)tWbf7^9PmQY4j_U)Ce0 zCg4iM8eUs+NVHN^F}OKpg)^HktUXG3Z5tF!TrpcVOU<;cA-p_waq4kO{{d-+woFKM zs}$uv*}wWL2R`K%Fz6qW4Bx@V97{@m0l0ze~Qj+q`;YI2MGC>(UW+t83G`a{p=2M5N$hZf?( zx-Tmr?_yNuBK5Z4*0Er-xuMyNWDRQ9V_G{XcEJH=@~|JBoh|=6llCv-ziC9iaU)0H za{TGHaNOm3?2WlZg~CbEf`=|qA#Z15ZT5kF2QbS&6{@NV3*ayVUeXS55bZ zruKwt&t}bvqxsy|S&srhe$oT?0M-6`0WCMyJi_9vji;?-!wOZ;YR=6cxf+(OdLmDQ zQ1DB5Hra6JBVB9)!QZCLF=4G4l&EcbFfzZDvSWsrrVq99!g&a`(&hl4SG`ls$Z5@l zwyhiTR}F*sTneAQ4&}3fa_NM*^H*`dB^qHC_V$(|IQA;~yj zJcpiBFlCLGKne@)YtD-Fs+=%CP~vI_MCKeLQGjN>V%`aYqn}4*v2m8kC41E`q9q`> z$5$3K8@JYk(k&&o8sNX;0VP=2lTv!$qpx3_8bk$0Sbgo1-gMji$kS4aaDoVD$XjO` z8g9MTzfXx3j^L-A-E8K#jtSqU>x#h^P(zVp|Lr9k4O`F zhWSHp71l1Pejx-$QH8ZdJY}Ge51Pr8KpdXCGUz(pOwV?mYQCX!`yb;|%-MYM-ua*= z^PoXClNpiGDmX#OYeI1MEtxTW&xUZf)BbtoKM%ko+pu3;2i?=Cuuk~wPAz~2A%p?g}4Cf0l4y7fjt?dc!S z$VxKw`E=RZsA;p!kk3z!;t;Wu+AqEhR)+Nfo;+)5@D~jrlNx=j;wl>&;o&b`!_K=l zoF@(_5-aPo7;Yh zt_^;2#+WGQK{_ds3=%4-Vrolg=rM^pQV@`$B|=qwMX}bU!OzY}?WYpjrdca<3mw^+ ztwN?$YKI9U9~{2o*L(L_yV@{NQul$PW*Vv6v`rQZm_JS`CnFREwNPahm-;mSD!f^t zB*@)ysp|)_S}1Kdk^I0?Dmvo5-ejMKSM0%Fu@Yn+UD{M$#I9Aea6;JFO8}2nyW_5}-TvNOsv34%X|C*GJMbyX zOHb+O7z}8muD(k3jVPp2XPM7AtDl{t7_R4Q!&;(pXl!^hcY-b^+1Z-HyTz3KzTM#7 z%2{54E{-u*5CkPzKK(&60i!@82=nCKoU^Q+n=&)f-Bf1=@z5=3en@eff3O}y7Odqm6KmEUojmqkAZgFVwwtym`ZK>M%0IbyF*Om4Dn9}tuRt8r`6AwT XPn + + + + + App名字 + + + + + 版权 + + + + + + + diff --git a/pages/my/addaddress.png b/pages/my/addaddress.png new file mode 100644 index 0000000000000000000000000000000000000000..902e0a8ceaf660ae90c4ae2612d480fa36aad7d4 GIT binary patch literal 27040 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 literal 0 HcmV?d00001 diff --git a/pages/my/addaddress.vue b/pages/my/addaddress.vue new file mode 100644 index 0000000..88820d3 --- /dev/null +++ b/pages/my/addaddress.vue @@ -0,0 +1,312 @@ + + + + + \ No newline at end of file diff --git a/pages/my/address.png b/pages/my/address.png new file mode 100644 index 0000000000000000000000000000000000000000..ef35c61cb611ef86cd9faa90b69c091bc8d6433a GIT binary patch literal 38542 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 z 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 + + + + + + + + + + + + + + + 姓名 + 手机号 + + + + + 详细地址 + + + + + + + + 默认地址 + + + + + + 删除 + + + + + 编辑 + + + + + + + + + + + + + 添加地址 + + + + + + 确认要删除该地址吗? + + + + + + + + \ No newline at end of file diff --git a/pages/my/demo.vue b/pages/my/demo.vue new file mode 100644 index 0000000..c42f4d3 --- /dev/null +++ b/pages/my/demo.vue @@ -0,0 +1,162 @@ + + + + + diff --git a/pages/my/feedback.png b/pages/my/feedback.png new file mode 100644 index 0000000000000000000000000000000000000000..cce92b72d13c428a6b695f861e6cdb4383ce69a1 GIT binary patch literal 20540 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 RtcCyp002ovPDHLkV1l*W&8YwY literal 0 HcmV?d00001 diff --git a/pages/my/feedback.vue b/pages/my/feedback.vue new file mode 100644 index 0000000..6d60a0e --- /dev/null +++ b/pages/my/feedback.vue @@ -0,0 +1,133 @@ + + + + + diff --git a/pages/my/footprint.vue b/pages/my/footprint.vue new file mode 100644 index 0000000..7d1fc39 --- /dev/null +++ b/pages/my/footprint.vue @@ -0,0 +1,63 @@ + + + + + diff --git a/pages/my/jifenrecord.vue b/pages/my/jifenrecord.vue new file mode 100644 index 0000000..8aa6a35 --- /dev/null +++ b/pages/my/jifenrecord.vue @@ -0,0 +1,78 @@ + + + + + diff --git a/pages/my/modifyjieshao.vue b/pages/my/modifyjieshao.vue new file mode 100644 index 0000000..968b1a6 --- /dev/null +++ b/pages/my/modifyjieshao.vue @@ -0,0 +1,72 @@ + + + + + diff --git a/pages/my/modifynickname.vue b/pages/my/modifynickname.vue new file mode 100644 index 0000000..c2a17e6 --- /dev/null +++ b/pages/my/modifynickname.vue @@ -0,0 +1,76 @@ + + + + + diff --git a/pages/my/order/orderdetails.vue b/pages/my/order/orderdetails.vue new file mode 100644 index 0000000..02409e3 --- /dev/null +++ b/pages/my/order/orderdetails.vue @@ -0,0 +1,8 @@ + + + + + \ No newline at end of file diff --git a/pages/my/order/orderlist.png b/pages/my/order/orderlist.png new file mode 100644 index 0000000000000000000000000000000000000000..87b31dc9b3f0f0314de6915a6a022db6a96f9a32 GIT binary patch literal 40523 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 + + + + + + + + + + + + + + 订单编号:14451 + + + + 待付款 + 待发货 + 待收货 + 已完成 + 交易关闭 + + + + + + + + 商品名称 + 规格:白色 + + ¥200 + + + + + + 共2件商品 + 应付款:¥200 + + + + + + 取消订单 + + + 去付款 + + + + + + + 联系客服 + + + 提醒发货 + + + + + + + 联系客服 + + + + + + + 联系客服 + + + 查看物流 + + + 确认收货 + + + + + + + 联系客服 + + + 核销码 + + + + + + + 删除订单 + + + 查看物流 + + + + + + + 删除订单 + + + + + + + + + + + + + + + 取消 + 取消订单 + 确定 + + + 请选择取消原因 + + + + {{ item.title }} + + + + + + + + + + + + ¥{{ payMoney }} + + + + + 选择支付方式: + + + + + 我的钱包(余额:¥{{ user.userInfo.money }}) + + + + + + + + 微信支付 + + + + + + + + + + + + + + 删除后订单不可恢复,确认删除该订单? + + + + + + + + + + + 确认收到这{{ goodsNumber }}件货了吗? + + + + + + + + + + \ No newline at end of file diff --git a/pages/my/setting/checkmobile.png b/pages/my/setting/checkmobile.png new file mode 100644 index 0000000000000000000000000000000000000000..124c8d1ff76e30431da00322b9e3fcd18eca5749 GIT binary patch literal 17633 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 literal 0 HcmV?d00001 diff --git a/pages/my/setting/checkmobile.vue b/pages/my/setting/checkmobile.vue new file mode 100644 index 0000000..6a94af3 --- /dev/null +++ b/pages/my/setting/checkmobile.vue @@ -0,0 +1,127 @@ + + + + + \ No newline at end of file diff --git a/pages/my/setting/index.png b/pages/my/setting/index.png new file mode 100644 index 0000000000000000000000000000000000000000..59e9e3507eeda8a1d91e0abe7ccd272443a9b61d GIT binary patch literal 17735 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 GzW8r34G-V| literal 0 HcmV?d00001 diff --git a/pages/my/setting/index.vue b/pages/my/setting/index.vue new file mode 100644 index 0000000..9ce7a99 --- /dev/null +++ b/pages/my/setting/index.vue @@ -0,0 +1,144 @@ + + + + + \ No newline at end of file diff --git a/pages/my/setting/modifypaypassword.png b/pages/my/setting/modifypaypassword.png new file mode 100644 index 0000000000000000000000000000000000000000..e1663d47185e89b52ea22fa346beabd2b8314778 GIT binary patch literal 15884 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 + + + + + + + + + + + + + 确认修改 + + + + + + + \ No newline at end of file diff --git a/pages/my/userinfo.vue b/pages/my/userinfo.vue new file mode 100644 index 0000000..48f82d3 --- /dev/null +++ b/pages/my/userinfo.vue @@ -0,0 +1,266 @@ + + + + + \ No newline at end of file diff --git a/pages/no_network.vue b/pages/no_network.vue new file mode 100644 index 0000000..5691eda --- /dev/null +++ b/pages/no_network.vue @@ -0,0 +1,85 @@ + + + + + \ No newline at end of file diff --git a/pages/wy-bmfw.vue b/pages/wy-bmfw.vue new file mode 100644 index 0000000..03d1c8a --- /dev/null +++ b/pages/wy-bmfw.vue @@ -0,0 +1,79 @@ + + + + + \ No newline at end of file diff --git a/pages/wy-home.vue b/pages/wy-home.vue new file mode 100644 index 0000000..2caf94d --- /dev/null +++ b/pages/wy-home.vue @@ -0,0 +1,160 @@ + + + + + \ No newline at end of file diff --git a/pages/wy-mine.vue b/pages/wy-mine.vue new file mode 100644 index 0000000..b59b50d --- /dev/null +++ b/pages/wy-mine.vue @@ -0,0 +1,126 @@ + + + + + \ No newline at end of file diff --git a/pages/xieyi.vue b/pages/xieyi.vue new file mode 100644 index 0000000..e07a49f --- /dev/null +++ b/pages/xieyi.vue @@ -0,0 +1,27 @@ + + + + + diff --git a/pages/yht/login.vue b/pages/yht/login.vue new file mode 100644 index 0000000..82b8b03 --- /dev/null +++ b/pages/yht/login.vue @@ -0,0 +1,260 @@ + + + + + \ No newline at end of file diff --git a/pages/yht/mine.vue b/pages/yht/mine.vue new file mode 100644 index 0000000..f8e617b --- /dev/null +++ b/pages/yht/mine.vue @@ -0,0 +1,148 @@ + + + + + \ No newline at end of file diff --git a/pages/yht/user_info.vue b/pages/yht/user_info.vue new file mode 100644 index 0000000..abea714 --- /dev/null +++ b/pages/yht/user_info.vue @@ -0,0 +1,76 @@ + + + + + \ No newline at end of file diff --git a/pagesMain/pages/bxbs.vue b/pagesMain/pages/bxbs.vue new file mode 100644 index 0000000..88fed47 --- /dev/null +++ b/pagesMain/pages/bxbs.vue @@ -0,0 +1,73 @@ + + + + + \ No newline at end of file diff --git a/pagesMain/pages/bxbs_lsgd.vue b/pagesMain/pages/bxbs_lsgd.vue new file mode 100644 index 0000000..1cff89d --- /dev/null +++ b/pagesMain/pages/bxbs_lsgd.vue @@ -0,0 +1,80 @@ + + + + + \ No newline at end of file diff --git a/pagesMain/pages/bxbs_submit.vue b/pagesMain/pages/bxbs_submit.vue new file mode 100644 index 0000000..035cfea --- /dev/null +++ b/pagesMain/pages/bxbs_submit.vue @@ -0,0 +1,131 @@ + + + + + \ No newline at end of file diff --git a/pagesMain/pages/bxxq.vue b/pagesMain/pages/bxxq.vue new file mode 100644 index 0000000..8858063 --- /dev/null +++ b/pagesMain/pages/bxxq.vue @@ -0,0 +1,160 @@ + + + + + \ No newline at end of file diff --git a/pagesMain/pages/cydh.vue b/pagesMain/pages/cydh.vue new file mode 100644 index 0000000..809184b --- /dev/null +++ b/pagesMain/pages/cydh.vue @@ -0,0 +1,81 @@ + + + + + \ No newline at end of file diff --git a/pagesMain/pages/fkdj.vue b/pagesMain/pages/fkdj.vue new file mode 100644 index 0000000..303b5f2 --- /dev/null +++ b/pagesMain/pages/fkdj.vue @@ -0,0 +1,204 @@ + + + + + \ No newline at end of file diff --git a/pagesMain/pages/fwgz.vue b/pagesMain/pages/fwgz.vue new file mode 100644 index 0000000..f5ce6a9 --- /dev/null +++ b/pagesMain/pages/fwgz.vue @@ -0,0 +1,97 @@ + + + + + \ No newline at end of file diff --git a/pagesMain/pages/jnzd.vue b/pagesMain/pages/jnzd.vue new file mode 100644 index 0000000..0bd81ed --- /dev/null +++ b/pagesMain/pages/jnzd.vue @@ -0,0 +1,111 @@ + + + + + \ No newline at end of file diff --git a/pagesMain/pages/jnzd_ccc.vue b/pagesMain/pages/jnzd_ccc.vue new file mode 100644 index 0000000..5dbf65b --- /dev/null +++ b/pagesMain/pages/jnzd_ccc.vue @@ -0,0 +1,100 @@ + + + + + \ No newline at end of file diff --git a/pagesMain/pages/jnzd_qt.vue b/pagesMain/pages/jnzd_qt.vue new file mode 100644 index 0000000..54dcc37 --- /dev/null +++ b/pagesMain/pages/jnzd_qt.vue @@ -0,0 +1,102 @@ + + + + + diff --git a/uni_modules/uview-ui/components/u-toast/u-toast.vue b/uni_modules/uview-ui/components/u-toast/u-toast.vue new file mode 100644 index 0000000..f194830 --- /dev/null +++ b/uni_modules/uview-ui/components/u-toast/u-toast.vue @@ -0,0 +1,291 @@ + + + + + diff --git a/uni_modules/uview-ui/components/u-toolbar/props.js b/uni_modules/uview-ui/components/u-toolbar/props.js new file mode 100644 index 0000000..1b72966 --- /dev/null +++ b/uni_modules/uview-ui/components/u-toolbar/props.js @@ -0,0 +1,34 @@ +export default { + props: { + // 是否展示工具条 + show: { + type: Boolean, + default: uni.$u.props.toolbar.show + }, + // 取消按钮的文字 + cancelText: { + type: String, + default: uni.$u.props.toolbar.cancelText + }, + // 确认按钮的文字 + confirmText: { + type: String, + default: uni.$u.props.toolbar.confirmText + }, + // 取消按钮的颜色 + cancelColor: { + type: String, + default: uni.$u.props.toolbar.cancelColor + }, + // 确认按钮的颜色 + confirmColor: { + type: String, + default: uni.$u.props.toolbar.confirmColor + }, + // 标题文字 + title: { + type: String, + default: uni.$u.props.toolbar.title + } + } +} diff --git a/uni_modules/uview-ui/components/u-toolbar/u-toolbar.vue b/uni_modules/uview-ui/components/u-toolbar/u-toolbar.vue new file mode 100644 index 0000000..290b771 --- /dev/null +++ b/uni_modules/uview-ui/components/u-toolbar/u-toolbar.vue @@ -0,0 +1,102 @@ + + + + + diff --git a/uni_modules/uview-ui/components/u-tooltip/clipboard.min.js b/uni_modules/uview-ui/components/u-tooltip/clipboard.min.js new file mode 100644 index 0000000..b7bff12 --- /dev/null +++ b/uni_modules/uview-ui/components/u-tooltip/clipboard.min.js @@ -0,0 +1,58 @@ +/*! + * clipboard.js v1.6.1 + * https://zenorocha.github.io/clipboard.js + * + * Licensed MIT © Zeno Rocha + */ +!(function (e) { if (typeof exports === 'object' && typeof module !== 'undefined')module.exports = e(); else if (typeof define === 'function' && define.amd)define([], e); else { let t; t = typeof window !== 'undefined' ? window : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : this, t.Clipboard = e() } }(() => { + let e; let t; let n; return (function e(t, n, o) { function i(a, c) { if (!n[a]) { if (!t[a]) { const l = typeof require === 'function' && require; if (!c && l) return l(a, !0); if (r) return r(a, !0); const u = new Error(`Cannot find module '${a}'`); throw u.code = 'MODULE_NOT_FOUND', u } const s = n[a] = { exports: {} }; t[a][0].call(s.exports, (e) => { const n = t[a][1][e]; return i(n || e) }, s, s.exports, e, t, n, o) } return n[a].exports } for (var r = typeof require === 'function' && require, a = 0; a < o.length; a++)i(o[a]); return i }({ + 1: [function (e, t, n) { function o(e, t) { for (;e && e.nodeType !== i;) { if (e.matches(t)) return e; e = e.parentNode } } var i = 9; if (typeof Element !== 'undefined' && !Element.prototype.matches) { const r = Element.prototype; r.matches = r.matchesSelector || r.mozMatchesSelector || r.msMatchesSelector || r.oMatchesSelector || r.webkitMatchesSelector }t.exports = o }, {}], + 2: [function (e, t, n) { function o(e, t, n, o, r) { const a = i.apply(this, arguments); return e.addEventListener(n, a, r), { destroy() { e.removeEventListener(n, a, r) } } } function i(e, t, n, o) { return function (n) { n.delegateTarget = r(n.target, t), n.delegateTarget && o.call(e, n) } } var r = e('./closest'); t.exports = o }, { './closest': 1 }], + 3: [function (e, t, n) { n.node = function (e) { return void 0 !== e && e instanceof HTMLElement && e.nodeType === 1 }, n.nodeList = function (e) { const t = Object.prototype.toString.call(e); return void 0 !== e && (t === '[object NodeList]' || t === '[object HTMLCollection]') && 'length' in e && (e.length === 0 || n.node(e[0])) }, n.string = function (e) { return typeof e === 'string' || e instanceof String }, n.fn = function (e) { const t = Object.prototype.toString.call(e); return t === '[object Function]' } }, {}], + 4: [function (e, t, n) { function o(e, t, n) { if (!e && !t && !n) throw new Error('Missing required arguments'); if (!c.string(t)) throw new TypeError('Second argument must be a String'); if (!c.fn(n)) throw new TypeError('Third argument must be a Function'); if (c.node(e)) return i(e, t, n); if (c.nodeList(e)) return r(e, t, n); if (c.string(e)) return a(e, t, n); throw new TypeError('First argument must be a String, HTMLElement, HTMLCollection, or NodeList') } function i(e, t, n) { return e.addEventListener(t, n), { destroy() { e.removeEventListener(t, n) } } } function r(e, t, n) { return Array.prototype.forEach.call(e, (e) => { e.addEventListener(t, n) }), { destroy() { Array.prototype.forEach.call(e, (e) => { e.removeEventListener(t, n) }) } } } function a(e, t, n) { return l(document.body, e, t, n) } var c = e('./is'); var l = e('delegate'); t.exports = o }, { './is': 3, delegate: 2 }], + 5: [function (e, t, n) { function o(e) { let t; if (e.nodeName === 'SELECT')e.focus(), t = e.value; else if (e.nodeName === 'INPUT' || e.nodeName === 'TEXTAREA') { const n = e.hasAttribute('readonly'); n || e.setAttribute('readonly', ''), e.select(), e.setSelectionRange(0, e.value.length), n || e.removeAttribute('readonly'), t = e.value } else { e.hasAttribute('contenteditable') && e.focus(); const o = window.getSelection(); const i = document.createRange(); i.selectNodeContents(e), o.removeAllRanges(), o.addRange(i), t = o.toString() } return t }t.exports = o }, {}], + 6: [function (e, t, n) { + function o() {}o.prototype = { + on(e, t, n) { const o = this.e || (this.e = {}); return (o[e] || (o[e] = [])).push({ fn: t, ctx: n }), this }, once(e, t, n) { function o() { i.off(e, o), t.apply(n, arguments) } var i = this; return o._ = t, this.on(e, o, n) }, emit(e) { const t = [].slice.call(arguments, 1); const n = ((this.e || (this.e = {}))[e] || []).slice(); let o = 0; const i = n.length; for (o; o < i; o++)n[o].fn.apply(n[o].ctx, t); return this }, off(e, t) { const n = this.e || (this.e = {}); const o = n[e]; const i = []; if (o && t) for (let r = 0, a = o.length; r < a; r++)o[r].fn !== t && o[r].fn._ !== t && i.push(o[r]); return i.length ? n[e] = i : delete n[e], this } + }, t.exports = o + }, {}], + 7: [function (t, n, o) { + !(function (i, r) { if (typeof e === 'function' && e.amd)e(['module', 'select'], r); else if (typeof o !== 'undefined')r(n, t('select')); else { const a = { exports: {} }; r(a, i.select), i.clipboardAction = a.exports } }(this, (e, t) => { + 'use strict' + + function n(e) { return e && e.__esModule ? e : { default: e } } function o(e, t) { if (!(e instanceof t)) throw new TypeError('Cannot call a class as a function') } const i = n(t); const r = typeof Symbol === 'function' && typeof Symbol.iterator === 'symbol' ? function (e) { return typeof e } : function (e) { return e && typeof Symbol === 'function' && e.constructor === Symbol && e !== Symbol.prototype ? 'symbol' : typeof e }; const a = (function () { function e(e, t) { for (let n = 0; n < t.length; n++) { const o = t[n]; o.enumerable = o.enumerable || !1, o.configurable = !0, 'value' in o && (o.writable = !0), Object.defineProperty(e, o.key, o) } } return function (t, n, o) { return n && e(t.prototype, n), o && e(t, o), t } }()); const c = (function () { + function e(t) { o(this, e), this.resolveOptions(t), this.initSelection() } return a(e, [{ key: 'resolveOptions', value: function e() { const t = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {}; this.action = t.action, this.emitter = t.emitter, this.target = t.target, this.text = t.text, this.trigger = t.trigger, this.selectedText = '' } }, { key: 'initSelection', value: function e() { this.text ? this.selectFake() : this.target && this.selectTarget() } }, { key: 'selectFake', value: function e() { const t = this; const n = document.documentElement.getAttribute('dir') == 'rtl'; this.removeFake(), this.fakeHandlerCallback = function () { return t.removeFake() }, this.fakeHandler = document.body.addEventListener('click', this.fakeHandlerCallback) || !0, this.fakeElem = document.createElement('textarea'), this.fakeElem.style.fontSize = '12pt', this.fakeElem.style.border = '0', this.fakeElem.style.padding = '0', this.fakeElem.style.margin = '0', this.fakeElem.style.position = 'absolute', this.fakeElem.style[n ? 'right' : 'left'] = '-9999px'; const o = window.pageYOffset || document.documentElement.scrollTop; this.fakeElem.style.top = `${o}px`, this.fakeElem.setAttribute('readonly', ''), this.fakeElem.value = this.text, document.body.appendChild(this.fakeElem), this.selectedText = (0, i.default)(this.fakeElem), this.copyText() } }, { key: 'removeFake', value: function e() { this.fakeHandler && (document.body.removeEventListener('click', this.fakeHandlerCallback), this.fakeHandler = null, this.fakeHandlerCallback = null), this.fakeElem && (document.body.removeChild(this.fakeElem), this.fakeElem = null) } }, { key: 'selectTarget', value: function e() { this.selectedText = (0, i.default)(this.target), this.copyText() } }, { key: 'copyText', value: function e() { let t = void 0; try { t = document.execCommand(this.action) } catch (e) { t = !1 } this.handleResult(t) } }, { + key: 'handleResult', + value: function e(t) { + this.emitter.emit(t ? 'success' : 'error', { + action: this.action, text: this.selectedText, trigger: this.trigger, clearSelection: this.clearSelection.bind(this) + }) + } + }, { key: 'clearSelection', value: function e() { this.target && this.target.blur(), window.getSelection().removeAllRanges() } }, { key: 'destroy', value: function e() { this.removeFake() } }, { key: 'action', set: function e() { const t = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : 'copy'; if (this._action = t, this._action !== 'copy' && this._action !== 'cut') throw new Error('Invalid "action" value, use either "copy" or "cut"') }, get: function e() { return this._action } }, { key: 'target', set: function e(t) { if (void 0 !== t) { if (!t || (typeof t === 'undefined' ? 'undefined' : r(t)) !== 'object' || t.nodeType !== 1) throw new Error('Invalid "target" value, use a valid Element'); if (this.action === 'copy' && t.hasAttribute('disabled')) throw new Error('Invalid "target" attribute. Please use "readonly" instead of "disabled" attribute'); if (this.action === 'cut' && (t.hasAttribute('readonly') || t.hasAttribute('disabled'))) throw new Error('Invalid "target" attribute. You can\'t cut text from elements with "readonly" or "disabled" attributes'); this._target = t } }, get: function e() { return this._target } }]), e + }()); e.exports = c + })) + }, { select: 5 }], + 8: [function (t, n, o) { + !(function (i, r) { if (typeof e === 'function' && e.amd)e(['module', './clipboard-action', 'tiny-emitter', 'good-listener'], r); else if (typeof o !== 'undefined')r(n, t('./clipboard-action'), t('tiny-emitter'), t('good-listener')); else { const a = { exports: {} }; r(a, i.clipboardAction, i.tinyEmitter, i.goodListener), i.clipboard = a.exports } }(this, (e, t, n, o) => { + 'use strict' + + function i(e) { return e && e.__esModule ? e : { default: e } } function r(e, t) { if (!(e instanceof t)) throw new TypeError('Cannot call a class as a function') } function a(e, t) { if (!e) throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); return !t || typeof t !== 'object' && typeof t !== 'function' ? e : t } function c(e, t) { + if (typeof t !== 'function' && t !== null) throw new TypeError(`Super expression must either be null or a function, not ${typeof t}`); e.prototype = Object.create(t && t.prototype, { + constructor: { + value: e, enumerable: !1, writable: !0, configurable: !0 + } + }), t && (Object.setPrototypeOf ? Object.setPrototypeOf(e, t) : e.__proto__ = t) + } function l(e, t) { const n = `data-clipboard-${e}`; if (t.hasAttribute(n)) return t.getAttribute(n) } const u = i(t); const s = i(n); const f = i(o); const d = (function () { function e(e, t) { for (let n = 0; n < t.length; n++) { const o = t[n]; o.enumerable = o.enumerable || !1, o.configurable = !0, 'value' in o && (o.writable = !0), Object.defineProperty(e, o.key, o) } } return function (t, n, o) { return n && e(t.prototype, n), o && e(t, o), t } }()); const h = (function (e) { + function t(e, n) { r(this, t); const o = a(this, (t.__proto__ || Object.getPrototypeOf(t)).call(this)); return o.resolveOptions(n), o.listenClick(e), o } return c(t, e), d(t, [{ key: 'resolveOptions', value: function e() { const t = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {}; this.action = typeof t.action === 'function' ? t.action : this.defaultAction, this.target = typeof t.target === 'function' ? t.target : this.defaultTarget, this.text = typeof t.text === 'function' ? t.text : this.defaultText } }, { key: 'listenClick', value: function e(t) { const n = this; this.listener = (0, f.default)(t, 'click', (e) => n.onClick(e)) } }, { + key: 'onClick', + value: function e(t) { + const n = t.delegateTarget || t.currentTarget; this.clipboardAction && (this.clipboardAction = null), this.clipboardAction = new u.default({ + action: this.action(n), target: this.target(n), text: this.text(n), trigger: n, emitter: this + }) + } + }, { key: 'defaultAction', value: function e(t) { return l('action', t) } }, { key: 'defaultTarget', value: function e(t) { const n = l('target', t); if (n) return document.querySelector(n) } }, { key: 'defaultText', value: function e(t) { return l('text', t) } }, { key: 'destroy', value: function e() { this.listener.destroy(), this.clipboardAction && (this.clipboardAction.destroy(), this.clipboardAction = null) } }], [{ key: 'isSupported', value: function e() { const t = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : ['copy', 'cut']; const n = typeof t === 'string' ? [t] : t; let o = !!document.queryCommandSupported; return n.forEach((e) => { o = o && !!document.queryCommandSupported(e) }), o } }]), t + }(s.default)); e.exports = h + })) + }, { './clipboard-action': 7, 'good-listener': 4, 'tiny-emitter': 6 }] + }, {}, [8]))(8) +})) diff --git a/uni_modules/uview-ui/components/u-tooltip/props.js b/uni_modules/uview-ui/components/u-tooltip/props.js new file mode 100644 index 0000000..16aecbc --- /dev/null +++ b/uni_modules/uview-ui/components/u-tooltip/props.js @@ -0,0 +1,59 @@ +export default { + props: { + // 需要显示的提示文字 + text: { + type: [String, Number], + default: uni.$u.props.tooltip.text + }, + // 点击复制按钮时,复制的文本,为空则使用text值 + copyText: { + type: [String, Number], + default: uni.$u.props.tooltip.copyText + }, + // 文本大小 + size: { + type: [String, Number], + default: uni.$u.props.tooltip.size + }, + // 字体颜色 + color: { + type: String, + default: uni.$u.props.tooltip.color + }, + // 弹出提示框时,文本的背景色 + bgColor: { + type: String, + default: uni.$u.props.tooltip.bgColor + }, + // 弹出提示的方向,top-上方,bottom-下方 + direction: { + type: String, + default: uni.$u.props.tooltip.direction + }, + // 弹出提示的z-index,nvue无效 + zIndex: { + type: [String, Number], + default: uni.$u.props.tooltip.zIndex + }, + // 是否显示复制按钮 + showCopy: { + type: Boolean, + default: uni.$u.props.tooltip.showCopy + }, + // 扩展的按钮组 + buttons: { + type: Array, + default: uni.$u.props.tooltip.buttons + }, + // 是否显示透明遮罩以防止触摸穿透 + overlay: { + type: Boolean, + default: uni.$u.props.tooltip.overlay + }, + // 是否显示复制成功或者失败的toast + showToast: { + type: Boolean, + default: uni.$u.props.tooltip.showToast + } + } +} diff --git a/uni_modules/uview-ui/components/u-tooltip/u-tooltip.vue b/uni_modules/uview-ui/components/u-tooltip/u-tooltip.vue new file mode 100644 index 0000000..4bd8fc9 --- /dev/null +++ b/uni_modules/uview-ui/components/u-tooltip/u-tooltip.vue @@ -0,0 +1,365 @@ + + + + + diff --git a/uni_modules/uview-ui/components/u-tr/props.js b/uni_modules/uview-ui/components/u-tr/props.js new file mode 100644 index 0000000..7c11331 --- /dev/null +++ b/uni_modules/uview-ui/components/u-tr/props.js @@ -0,0 +1,5 @@ +export default { + props: { + + } +} diff --git a/uni_modules/uview-ui/components/u-tr/u-tr.vue b/uni_modules/uview-ui/components/u-tr/u-tr.vue new file mode 100644 index 0000000..dbbca08 --- /dev/null +++ b/uni_modules/uview-ui/components/u-tr/u-tr.vue @@ -0,0 +1,31 @@ + + + + + diff --git a/uni_modules/uview-ui/components/u-transition/nvue.ani-map.js b/uni_modules/uview-ui/components/u-transition/nvue.ani-map.js new file mode 100644 index 0000000..b86b962 --- /dev/null +++ b/uni_modules/uview-ui/components/u-transition/nvue.ani-map.js @@ -0,0 +1,68 @@ +export default { + fade: { + enter: { opacity: 0 }, + 'enter-to': { opacity: 1 }, + leave: { opacity: 1 }, + 'leave-to': { opacity: 0 } + }, + 'fade-up': { + enter: { opacity: 0, transform: 'translateY(100%)' }, + 'enter-to': { opacity: 1, transform: 'translateY(0)' }, + leave: { opacity: 1, transform: 'translateY(0)' }, + 'leave-to': { opacity: 0, transform: 'translateY(100%)' } + }, + 'fade-down': { + enter: { opacity: 0, transform: 'translateY(-100%)' }, + 'enter-to': { opacity: 1, transform: 'translateY(0)' }, + leave: { opacity: 1, transform: 'translateY(0)' }, + 'leave-to': { opacity: 0, transform: 'translateY(-100%)' } + }, + 'fade-left': { + enter: { opacity: 0, transform: 'translateX(-100%)' }, + 'enter-to': { opacity: 1, transform: 'translateY(0)' }, + leave: { opacity: 1, transform: 'translateY(0)' }, + 'leave-to': { opacity: 0, transform: 'translateX(-100%)' } + }, + 'fade-right': { + enter: { opacity: 0, transform: 'translateX(100%)' }, + 'enter-to': { opacity: 1, transform: 'translateY(0)' }, + leave: { opacity: 1, transform: 'translateY(0)' }, + 'leave-to': { opacity: 0, transform: 'translateX(100%)' } + }, + 'slide-up': { + enter: { transform: 'translateY(100%)' }, + 'enter-to': { transform: 'translateY(0)' }, + leave: { transform: 'translateY(0)' }, + 'leave-to': { transform: 'translateY(100%)' } + }, + 'slide-down': { + enter: { transform: 'translateY(-100%)' }, + 'enter-to': { transform: 'translateY(0)' }, + leave: { transform: 'translateY(0)' }, + 'leave-to': { transform: 'translateY(-100%)' } + }, + 'slide-left': { + enter: { transform: 'translateX(-100%)' }, + 'enter-to': { transform: 'translateY(0)' }, + leave: { transform: 'translateY(0)' }, + 'leave-to': { transform: 'translateX(-100%)' } + }, + 'slide-right': { + enter: { transform: 'translateX(100%)' }, + 'enter-to': { transform: 'translateY(0)' }, + leave: { transform: 'translateY(0)' }, + 'leave-to': { transform: 'translateX(100%)' } + }, + zoom: { + enter: { transform: 'scale(0.95)' }, + 'enter-to': { transform: 'scale(1)' }, + leave: { transform: 'scale(1)' }, + 'leave-to': { transform: 'scale(0.95)' } + }, + 'fade-zoom': { + enter: { opacity: 0, transform: 'scale(0.95)' }, + 'enter-to': { opacity: 1, transform: 'scale(1)' }, + leave: { opacity: 1, transform: 'scale(1)' }, + 'leave-to': { opacity: 0, transform: 'scale(0.95)' } + } +} diff --git a/uni_modules/uview-ui/components/u-transition/props.js b/uni_modules/uview-ui/components/u-transition/props.js new file mode 100644 index 0000000..f7b1c22 --- /dev/null +++ b/uni_modules/uview-ui/components/u-transition/props.js @@ -0,0 +1,24 @@ +export default { + props: { + // 是否展示组件 + show: { + type: Boolean, + default: uni.$u.props.transition.show + }, + // 使用的动画模式 + mode: { + type: String, + default: uni.$u.props.transition.mode + }, + // 动画的执行时间,单位ms + duration: { + type: [String, Number], + default: uni.$u.props.transition.duration + }, + // 使用的动画过渡函数 + timingFunction: { + type: String, + default: uni.$u.props.transition.timingFunction + } + } +} diff --git a/uni_modules/uview-ui/components/u-transition/transition.js b/uni_modules/uview-ui/components/u-transition/transition.js new file mode 100644 index 0000000..92e5681 --- /dev/null +++ b/uni_modules/uview-ui/components/u-transition/transition.js @@ -0,0 +1,157 @@ +// 定义一个一定时间后自动成功的promise,让调用nextTick方法处,进入下一个then方法 +const nextTick = () => new Promise(resolve => setTimeout(resolve, 1000 / 50)) +// nvue动画模块实现细节抽离在外部文件 +import animationMap from './nvue.ani-map.js' + +// #ifndef APP-NVUE +// 定义类名,通过给元素动态切换类名,赋予元素一定的css动画样式 +const getClassNames = (name) => ({ + enter: `u-${name}-enter u-${name}-enter-active`, + 'enter-to': `u-${name}-enter-to u-${name}-enter-active`, + leave: `u-${name}-leave u-${name}-leave-active`, + 'leave-to': `u-${name}-leave-to u-${name}-leave-active` +}) +// #endif + +// #ifdef APP-NVUE +// 引入nvue(weex)的animation动画模块,文档见: +// https://weex.apache.org/zh/docs/modules/animation.html#transition +const animation = uni.requireNativePlugin('animation') +const getStyle = (name) => animationMap[name] +// #endif + +export default { + methods: { + // 组件被点击发出事件 + clickHandler() { + this.$emit('click') + }, + // #ifndef APP-NVUE + // vue版本的组件进场处理 + vueEnter() { + // 动画进入时的类名 + const classNames = getClassNames(this.mode) + // 定义状态和发出动画进入前事件 + this.status = 'enter' + this.$emit('beforeEnter') + this.inited = true + this.display = true + this.classes = classNames.enter + this.$nextTick(async () => { + // #ifdef H5 + await uni.$u.sleep(20) + // #endif + // 标识动画尚未结束 + this.$emit('enter') + this.transitionEnded = false + // 组件动画进入后触发的事件 + this.$emit('afterEnter') + // 赋予组件enter-to类名 + this.classes = classNames['enter-to'] + }) + }, + // 动画离场处理 + vueLeave() { + // 如果不是展示状态,无需执行逻辑 + if (!this.display) return + const classNames = getClassNames(this.mode) + // 标记离开状态和发出事件 + this.status = 'leave' + this.$emit('beforeLeave') + // 获得类名 + this.classes = classNames.leave + + this.$nextTick(() => { + // 动画正在离场的状态 + this.transitionEnded = false + this.$emit('leave') + // 组件执行动画,到了执行的执行时间后,执行一些额外处理 + setTimeout(this.onTransitionEnd, this.duration) + this.classes = classNames['leave-to'] + }) + }, + // #endif + // #ifdef APP-NVUE + // nvue版本动画进场 + nvueEnter() { + // 获得样式的名称 + const currentStyle = getStyle(this.mode) + // 组件动画状态和发出事件 + this.status = 'enter' + this.$emit('beforeEnter') + // 展示生成组件元素 + this.inited = true + this.display = true + // 在nvue安卓上,由于渲染速度慢,在弹窗,键盘,日历等组件中,渲染其中的内容需要时间 + // 导致出现弹窗卡顿,这里让其一开始为透明状态,等一定时间渲染完成后,再让其隐藏起来,再让其按正常逻辑出现 + this.viewStyle = { + opacity: 0 + } + // 等待弹窗内容渲染完成 + this.$nextTick(() => { + // 合并样式 + this.viewStyle = currentStyle.enter + Promise.resolve() + .then(nextTick) + .then(() => { + // 组件开始进入前的事件 + this.$emit('enter') + // nvue的transition动画模块需要通过ref调用组件,注意此处的ref不同于vue的this.$refs['u-transition']用法 + animation.transition(this.$refs['u-transition'].ref, { + styles: currentStyle['enter-to'], + duration: this.duration, + timingFunction: this.timingFunction, + needLayout: false, + delay: 0 + }, () => { + // 动画执行完毕,发出事件 + this.$emit('afterEnter') + }) + }) + .catch(() => {}) + }) + }, + nvueLeave() { + if (!this.display) { + return + } + const currentStyle = getStyle(this.mode) + // 定义状态和事件 + this.status = 'leave' + this.$emit('beforeLeave') + // 合并样式 + this.viewStyle = currentStyle.leave + // 放到promise中处理执行过程 + Promise.resolve() + .then(nextTick) // 等待几十ms + .then(() => { + this.transitionEnded = false + // 动画正在离场的状态 + this.$emit('leave') + animation.transition(this.$refs['u-transition'].ref, { + styles: currentStyle['leave-to'], + duration: this.duration, + timingFunction: this.timingFunction, + needLayout: false, + delay: 0 + }, () => { + this.onTransitionEnd() + }) + }) + .catch(() => {}) + }, + // #endif + // 完成过渡后触发 + onTransitionEnd() { + // 如果已经是结束的状态,无需再处理 + if (this.transitionEnded) return + this.transitionEnded = true + // 发出组件动画执行后的事件 + this.$emit(this.status === 'leave' ? 'afterLeave' : 'afterEnter') + if (!this.show && this.display) { + this.display = false + this.inited = false + } + } + } +} diff --git a/uni_modules/uview-ui/components/u-transition/u-transition.vue b/uni_modules/uview-ui/components/u-transition/u-transition.vue new file mode 100644 index 0000000..22831dc --- /dev/null +++ b/uni_modules/uview-ui/components/u-transition/u-transition.vue @@ -0,0 +1,92 @@ + + + + + diff --git a/uni_modules/uview-ui/components/u-transition/vue.ani-style.scss b/uni_modules/uview-ui/components/u-transition/vue.ani-style.scss new file mode 100644 index 0000000..a31d88b --- /dev/null +++ b/uni_modules/uview-ui/components/u-transition/vue.ani-style.scss @@ -0,0 +1,113 @@ +/** + * vue版本动画内置的动画模式有如下: + * fade:淡入 + * zoom:缩放 + * fade-zoom:缩放淡入 + * fade-up:上滑淡入 + * fade-down:下滑淡入 + * fade-left:左滑淡入 + * fade-right:右滑淡入 + * slide-up:上滑进入 + * slide-down:下滑进入 + * slide-left:左滑进入 + * slide-right:右滑进入 + */ + +$u-zoom-scale: scale(0.95); + +.u-fade-enter-active, +.u-fade-leave-active { + transition-property: opacity; +} + +.u-fade-enter, +.u-fade-leave-to { + opacity: 0 +} + +.u-fade-zoom-enter, +.u-fade-zoom-leave-to { + transform: $u-zoom-scale; + opacity: 0; +} + +.u-fade-zoom-enter-active, +.u-fade-zoom-leave-active { + transition-property: transform, opacity; +} + +.u-fade-down-enter-active, +.u-fade-down-leave-active, +.u-fade-left-enter-active, +.u-fade-left-leave-active, +.u-fade-right-enter-active, +.u-fade-right-leave-active, +.u-fade-up-enter-active, +.u-fade-up-leave-active { + transition-property: opacity, transform; +} + +.u-fade-up-enter, +.u-fade-up-leave-to { + transform: translate3d(0, 100%, 0); + opacity: 0 +} + +.u-fade-down-enter, +.u-fade-down-leave-to { + transform: translate3d(0, -100%, 0); + opacity: 0 +} + +.u-fade-left-enter, +.u-fade-left-leave-to { + transform: translate3d(-100%, 0, 0); + opacity: 0 +} + +.u-fade-right-enter, +.u-fade-right-leave-to { + transform: translate3d(100%, 0, 0); + opacity: 0 +} + +.u-slide-down-enter-active, +.u-slide-down-leave-active, +.u-slide-left-enter-active, +.u-slide-left-leave-active, +.u-slide-right-enter-active, +.u-slide-right-leave-active, +.u-slide-up-enter-active, +.u-slide-up-leave-active { + transition-property: transform; +} + +.u-slide-up-enter, +.u-slide-up-leave-to { + transform: translate3d(0, 100%, 0) +} + +.u-slide-down-enter, +.u-slide-down-leave-to { + transform: translate3d(0, -100%, 0) +} + +.u-slide-left-enter, +.u-slide-left-leave-to { + transform: translate3d(-100%, 0, 0) +} + +.u-slide-right-enter, +.u-slide-right-leave-to { + transform: translate3d(100%, 0, 0) +} + +.u-zoom-enter-active, +.u-zoom-leave-active { + transition-property: transform +} + +.u-zoom-enter, +.u-zoom-leave-to { + transform: $u-zoom-scale +} diff --git a/uni_modules/uview-ui/components/u-upload/mixin.js b/uni_modules/uview-ui/components/u-upload/mixin.js new file mode 100644 index 0000000..410c775 --- /dev/null +++ b/uni_modules/uview-ui/components/u-upload/mixin.js @@ -0,0 +1,21 @@ +export default { + watch: { + // 监听accept的变化,判断是否符合个平台要求 + // 只有微信小程序才支持选择媒体,文件类型,所以这里做一个判断提示 + accept: { + immediate: true, + handler(val) { + // #ifndef MP-WEIXIN + if (val === 'all' || val === 'media') { + uni.$u.error('只有微信小程序才支持把accept配置为all、media之一') + } + // #endif + // #ifndef H5 || MP-WEIXIN + if (val === 'file') { + uni.$u.error('只有微信小程序和H5(HX2.9.9)才支持把accept配置为file') + } + // #endif + } + } + } +} diff --git a/uni_modules/uview-ui/components/u-upload/props.js b/uni_modules/uview-ui/components/u-upload/props.js new file mode 100644 index 0000000..b106ae7 --- /dev/null +++ b/uni_modules/uview-ui/components/u-upload/props.js @@ -0,0 +1,124 @@ +export default { + props: { + // 接受的文件类型, 可选值为all media image file video + accept: { + type: String, + default: uni.$u.props.upload.accept + }, + // 图片或视频拾取模式,当accept为image类型时设置capture可选额外camera可以直接调起摄像头 + capture: { + type: [String, Array], + default: uni.$u.props.upload.capture + }, + // 当accept为video时生效,是否压缩视频,默认为true + compressed: { + type: Boolean, + default: uni.$u.props.upload.compressed + }, + // 当accept为video时生效,可选值为back或front + camera: { + type: String, + default: uni.$u.props.upload.camera + }, + // 当accept为video时生效,拍摄视频最长拍摄时间,单位秒 + maxDuration: { + type: Number, + default: uni.$u.props.upload.maxDuration + }, + // 上传区域的图标,只能内置图标 + uploadIcon: { + type: String, + default: uni.$u.props.upload.uploadIcon + }, + // 上传区域的图标的颜色,默认 + uploadIconColor: { + type: String, + default: uni.$u.props.upload.uploadIconColor + }, + // 是否开启文件读取前事件 + useBeforeRead: { + type: Boolean, + default: uni.$u.props.upload.useBeforeRead + }, + // 读取后的处理函数 + afterRead: { + type: Function, + default: null + }, + // 读取前的处理函数 + beforeRead: { + type: Function, + default: null + }, + // 是否显示组件自带的图片预览功能 + previewFullImage: { + type: Boolean, + default: uni.$u.props.upload.previewFullImage + }, + // 最大上传数量 + maxCount: { + type: [String, Number], + default: uni.$u.props.upload.maxCount + }, + // 是否启用 + disabled: { + type: Boolean, + default: uni.$u.props.upload.disabled + }, + // 预览上传的图片时的裁剪模式,和image组件mode属性一致 + imageMode: { + type: String, + default: uni.$u.props.upload.imageMode + }, + // 标识符,可以在回调函数的第二项参数中获取 + name: { + type: String, + default: uni.$u.props.upload.name + }, + // 所选的图片的尺寸, 可选值为original compressed + sizeType: { + type: Array, + default: uni.$u.props.upload.sizeType + }, + // 是否开启图片多选,部分安卓机型不支持 + multiple: { + type: Boolean, + default: uni.$u.props.upload.multiple + }, + // 是否展示删除按钮 + deletable: { + type: Boolean, + default: uni.$u.props.upload.deletable + }, + // 文件大小限制,单位为byte + maxSize: { + type: [String, Number], + default: uni.$u.props.upload.maxSize + }, + // 显示已上传的文件列表 + fileList: { + type: Array, + default: uni.$u.props.upload.fileList + }, + // 上传区域的提示文字 + uploadText: { + type: String, + default: uni.$u.props.upload.uploadText + }, + // 内部预览图片区域和选择图片按钮的区域宽度 + width: { + type: [String, Number], + default: uni.$u.props.upload.width + }, + // 内部预览图片区域和选择图片按钮的区域高度 + height: { + type: [String, Number], + default: uni.$u.props.upload.height + }, + // 是否在上传完成后展示预览图 + previewImage: { + type: Boolean, + default: uni.$u.props.upload.previewImage + } + } +} diff --git a/uni_modules/uview-ui/components/u-upload/u-upload.vue b/uni_modules/uview-ui/components/u-upload/u-upload.vue new file mode 100644 index 0000000..d0765e4 --- /dev/null +++ b/uni_modules/uview-ui/components/u-upload/u-upload.vue @@ -0,0 +1,559 @@ + + + + + diff --git a/uni_modules/uview-ui/components/u-upload/utils.js b/uni_modules/uview-ui/components/u-upload/utils.js new file mode 100644 index 0000000..88cb602 --- /dev/null +++ b/uni_modules/uview-ui/components/u-upload/utils.js @@ -0,0 +1,151 @@ +function pickExclude(obj, keys) { + // 某些情况下,type可能会为 + if (!['[object Object]', '[object File]'].includes(Object.prototype.toString.call(obj))) { + return {} + } + return Object.keys(obj).reduce((prev, key) => { + if (!keys.includes(key)) { + prev[key] = obj[key] + } + return prev + }, {}) +} + +function formatImage(res) { + return res.tempFiles.map((item) => ({ + ...pickExclude(item, ['path']), + type: 'image', + url: item.path, + thumb: item.path, + size: item.size, + // #ifdef H5 + name: item.name + // #endif + })) +} + +function formatVideo(res) { + return [ + { + ...pickExclude(res, ['tempFilePath', 'thumbTempFilePath', 'errMsg']), + type: 'video', + url: res.tempFilePath, + thumb: res.thumbTempFilePath, + size: res.size, + // #ifdef H5 + name: res.name + // #endif + } + ] +} + +function formatMedia(res) { + return res.tempFiles.map((item) => ({ + ...pickExclude(item, ['fileType', 'thumbTempFilePath', 'tempFilePath']), + type: res.type, + url: item.tempFilePath, + thumb: res.type === 'video' ? item.thumbTempFilePath : item.tempFilePath, + size: item.size + })) +} + +function formatFile(res) { + return res.tempFiles.map((item) => ({ + ...pickExclude(item, ['path']), + url: item.path, + size:item.size, + // #ifdef H5 + name: item.name, + type: item.type + // #endif + })) +} +export function chooseFile({ + accept, + multiple, + capture, + compressed, + maxDuration, + sizeType, + camera, + maxCount +}) { + return new Promise((resolve, reject) => { + switch (accept) { + case 'image': + uni.chooseImage({ + count: multiple ? Math.min(maxCount, 9) : 1, + sourceType: capture, + sizeType, + success: (res) => resolve(formatImage(res)), + fail: reject + }) + break + // #ifdef MP-WEIXIN + // 只有微信小程序才支持chooseMedia接口 + case 'media': + wx.chooseMedia({ + count: multiple ? Math.min(maxCount, 9) : 1, + sourceType: capture, + maxDuration, + sizeType, + camera, + success: (res) => resolve(formatMedia(res)), + fail: reject + }) + break + // #endif + case 'video': + uni.chooseVideo({ + sourceType: capture, + compressed, + maxDuration, + camera, + success: (res) => resolve(formatVideo(res)), + fail: reject + }) + break + // #ifdef MP-WEIXIN || H5 + // 只有微信小程序才支持chooseMessageFile接口 + case 'file': + // #ifdef MP-WEIXIN + wx.chooseMessageFile({ + count: multiple ? maxCount : 1, + type: accept, + success: (res) => resolve(formatFile(res)), + fail: reject + }) + // #endif + // #ifdef H5 + // 需要hx2.9.9以上才支持uni.chooseFile + uni.chooseFile({ + count: multiple ? maxCount : 1, + type: accept, + success: (res) => resolve(formatFile(res)), + fail: reject + }) + // #endif + break + // #endif + default: + // 此为保底选项,在accept不为上面任意一项的时候选取全部文件 + // #ifdef MP-WEIXIN + wx.chooseMessageFile({ + count: multiple ? maxCount : 1, + type: 'all', + success: (res) => resolve(formatFile(res)), + fail: reject + }) + // #endif + // #ifdef H5 + // 需要hx2.9.9以上才支持uni.chooseFile + uni.chooseFile({ + count: multiple ? maxCount : 1, + type: 'all', + success: (res) => resolve(formatFile(res)), + fail: reject + }) + // #endif + } + }) +} diff --git a/uni_modules/uview-ui/components/uview-ui/uview-ui.vue b/uni_modules/uview-ui/components/uview-ui/uview-ui.vue new file mode 100644 index 0000000..bcd3662 --- /dev/null +++ b/uni_modules/uview-ui/components/uview-ui/uview-ui.vue @@ -0,0 +1,15 @@ + + + + + + + diff --git a/uni_modules/uview-ui/index.js b/uni_modules/uview-ui/index.js new file mode 100644 index 0000000..651c090 --- /dev/null +++ b/uni_modules/uview-ui/index.js @@ -0,0 +1,79 @@ +// 看到此报错,是因为没有配置vue.config.js的【transpileDependencies】,详见:https://www.uviewui.com/components/npmSetting.html#_5-cli模式额外配置 +const pleaseSetTranspileDependencies = {}, babelTest = pleaseSetTranspileDependencies?.test + + + +// 引入全局mixin +import mixin from './libs/mixin/mixin.js' +// 小程序特有的mixin +import mpMixin from './libs/mixin/mpMixin.js' +// 全局挂载引入http相关请求拦截插件 +import Request from './libs/luch-request' + +// 路由封装 +import route from './libs/util/route.js' +// 颜色渐变相关,colorGradient-颜色渐变,hexToRgb-十六进制颜色转rgb颜色,rgbToHex-rgb转十六进制 +import colorGradient from './libs/function/colorGradient.js' + +// 规则检验 +import test from './libs/function/test.js' +// 防抖方法 +import debounce from './libs/function/debounce.js' +// 节流方法 +import throttle from './libs/function/throttle.js' +// 公共文件写入的方法 +import index from './libs/function/index.js' + +// 配置信息 +import config from './libs/config/config.js' +// props配置信息 +import props from './libs/config/props.js' +// 各个需要fixed的地方的z-index配置文件 +import zIndex from './libs/config/zIndex.js' +// 关于颜色的配置,特殊场景使用 +import color from './libs/config/color.js' +// 平台 +import platform from './libs/function/platform' + +const $u = { + route, + date: index.timeFormat, // 另名date + colorGradient: colorGradient.colorGradient, + hexToRgb: colorGradient.hexToRgb, + rgbToHex: colorGradient.rgbToHex, + colorToRgba: colorGradient.colorToRgba, + test, + type: ['primary', 'success', 'error', 'warning', 'info'], + http: new Request(), + config, // uView配置信息相关,比如版本号 + zIndex, + debounce, + throttle, + mixin, + mpMixin, + props, + ...index, + color, + platform +} + +// $u挂载到uni对象上 +uni.$u = $u + +const install = (Vue) => { + // 时间格式化,同时两个名称,date和timeFormat + Vue.filter('timeFormat', (timestamp, format) => uni.$u.timeFormat(timestamp, format)) + Vue.filter('date', (timestamp, format) => uni.$u.timeFormat(timestamp, format)) + // 将多久以前的方法,注入到全局过滤器 + Vue.filter('timeFrom', (timestamp, format) => uni.$u.timeFrom(timestamp, format)) + // 同时挂载到uni和Vue.prototype中 + // #ifndef APP-NVUE + // 只有vue,挂载到Vue.prototype才有意义,因为nvue中全局Vue.prototype和Vue.mixin是无效的 + Vue.prototype.$u = $u + Vue.mixin(mixin) + // #endif +} + +export default { + install +} diff --git a/uni_modules/uview-ui/index.scss b/uni_modules/uview-ui/index.scss new file mode 100644 index 0000000..8fcfa83 --- /dev/null +++ b/uni_modules/uview-ui/index.scss @@ -0,0 +1,23 @@ +// 引入公共基础类 +@import "./libs/css/common.scss"; +@import "./libs/css/color.scss"; + +// 非nvue的样式 +/* #ifndef APP-NVUE */ +@import "./libs/css/vue.scss"; +/* #endif */ + +// nvue的特有样式 +/* #ifdef APP-NVUE */ +@import "./libs/css/nvue.scss"; +/* #endif */ + +// 小程序特有的样式 +/* #ifdef MP */ +@import "./libs/css/mp.scss"; +/* #endif */ + +// H5特有的样式 +/* #ifdef H5 */ +@import "./libs/css/h5.scss"; +/* #endif */ \ No newline at end of file diff --git a/uni_modules/uview-ui/libs/config/color.js b/uni_modules/uview-ui/libs/config/color.js new file mode 100644 index 0000000..56b4187 --- /dev/null +++ b/uni_modules/uview-ui/libs/config/color.js @@ -0,0 +1,17 @@ +// 为了让用户能够自定义主题,会逐步弃用此文件,各颜色通过css提供 +// 为了给某些特殊场景使用和向后兼容,无需删除此文件(2020-06-20) +const color = { + primary: '#3c9cff', + info: '#909399', + default: '#909399', + warning: '#f9ae3d', + error: '#f56c6c', + success: '#5ac725', + mainColor: '#303133', + contentColor: '#606266', + tipsColor: '#909399', + lightColor: '#c0c4cc', + borderColor: '#e4e7ed' +} + +export default color diff --git a/uni_modules/uview-ui/libs/config/config.js b/uni_modules/uview-ui/libs/config/config.js new file mode 100644 index 0000000..a3a784e --- /dev/null +++ b/uni_modules/uview-ui/libs/config/config.js @@ -0,0 +1,34 @@ +// 此版本发布于2023-03-27 +const version = '2.0.36' + +// 开发环境才提示,生产环境不会提示 +if (process.env.NODE_ENV === 'development') { + console.log(`\n %c uView V${version} %c https://uviewui.com/ \n\n`, 'color: #ffffff; background: #3c9cff; padding:5px 0; border-radius: 5px;'); +} + +export default { + v: version, + version, + // 主题名称 + type: [ + 'primary', + 'success', + 'info', + 'error', + 'warning' + ], + // 颜色部分,本来可以通过scss的:export导出供js使用,但是奈何nvue不支持 + color: { + 'u-primary': '#2979ff', + 'u-warning': '#ff9900', + 'u-success': '#19be6b', + 'u-error': '#fa3534', + 'u-info': '#909399', + 'u-main-color': '#303133', + 'u-content-color': '#606266', + 'u-tips-color': '#909399', + 'u-light-color': '#c0c4cc' + }, + // 默认单位,可以通过配置为rpx,那么在用于传入组件大小参数为数值时,就默认为rpx + unit: 'px' +} diff --git a/uni_modules/uview-ui/libs/config/props.js b/uni_modules/uview-ui/libs/config/props.js new file mode 100644 index 0000000..6930d48 --- /dev/null +++ b/uni_modules/uview-ui/libs/config/props.js @@ -0,0 +1,190 @@ +/** + * 此文件的作用为统一配置所有组件的props参数 + * 借此用户可以全局覆盖组件的props默认值 + * 无需在每个引入组件的页面中都配置一次 + */ +import config from './config' + +import actionSheet from './props/actionSheet.js' +import album from './props/album.js' +import alert from './props/alert.js' +import avatar from './props/avatar' +import avatarGroup from './props/avatarGroup' +import backtop from './props/backtop' +import badge from './props/badge' +import button from './props/button' +import calendar from './props/calendar' +import carKeyboard from './props/carKeyboard' +import cell from './props/cell' +import cellGroup from './props/cellGroup' +import checkbox from './props/checkbox' +import checkboxGroup from './props/checkboxGroup' +import circleProgress from './props/circleProgress' +import code from './props/code' +import codeInput from './props/codeInput' +import col from './props/col' +import collapse from './props/collapse' +import collapseItem from './props/collapseItem' +import columnNotice from './props/columnNotice' +import countDown from './props/countDown' +import countTo from './props/countTo' +import datetimePicker from './props/datetimePicker' +import divider from './props/divider' +import empty from './props/empty' +import form from './props/form' +import formItem from './props/formItem' +import gap from './props/gap' +import grid from './props/grid' +import gridItem from './props/gridItem' +import icon from './props/icon' +import image from './props/image' +import indexAnchor from './props/indexAnchor' +import indexList from './props/indexList' +import input from './props/input' +import keyboard from './props/keyboard' +import line from './props/line' +import lineProgress from './props/lineProgress' +import link from './props/link' +import list from './props/list' +import listItem from './props/listItem' +import loadingIcon from './props/loadingIcon' +import loadingPage from './props/loadingPage' +import loadmore from './props/loadmore' +import modal from './props/modal' +import navbar from './props/navbar' +import noNetwork from './props/noNetwork' +import noticeBar from './props/noticeBar' +import notify from './props/notify' +import numberBox from './props/numberBox' +import numberKeyboard from './props/numberKeyboard' +import overlay from './props/overlay' +import parse from './props/parse' +import picker from './props/picker' +import popup from './props/popup' +import radio from './props/radio' +import radioGroup from './props/radioGroup' +import rate from './props/rate' +import readMore from './props/readMore' +import row from './props/row' +import rowNotice from './props/rowNotice' +import scrollList from './props/scrollList' +import search from './props/search' +import section from './props/section' +import skeleton from './props/skeleton' +import slider from './props/slider' +import statusBar from './props/statusBar' +import steps from './props/steps' +import stepsItem from './props/stepsItem' +import sticky from './props/sticky' +import subsection from './props/subsection' +import swipeAction from './props/swipeAction' +import swipeActionItem from './props/swipeActionItem' +import swiper from './props/swiper' +import swipterIndicator from './props/swipterIndicator' +import _switch from './props/switch' +import tabbar from './props/tabbar' +import tabbarItem from './props/tabbarItem' +import tabs from './props/tabs' +import tag from './props/tag' +import text from './props/text' +import textarea from './props/textarea' +import toast from './props/toast' +import toolbar from './props/toolbar' +import tooltip from './props/tooltip' +import transition from './props/transition' +import upload from './props/upload' + +const { + color +} = config + +export default { + ...actionSheet, + ...album, + ...alert, + ...avatar, + ...avatarGroup, + ...backtop, + ...badge, + ...button, + ...calendar, + ...carKeyboard, + ...cell, + ...cellGroup, + ...checkbox, + ...checkboxGroup, + ...circleProgress, + ...code, + ...codeInput, + ...col, + ...collapse, + ...collapseItem, + ...columnNotice, + ...countDown, + ...countTo, + ...datetimePicker, + ...divider, + ...empty, + ...form, + ...formItem, + ...gap, + ...grid, + ...gridItem, + ...icon, + ...image, + ...indexAnchor, + ...indexList, + ...input, + ...keyboard, + ...line, + ...lineProgress, + ...link, + ...list, + ...listItem, + ...loadingIcon, + ...loadingPage, + ...loadmore, + ...modal, + ...navbar, + ...noNetwork, + ...noticeBar, + ...notify, + ...numberBox, + ...numberKeyboard, + ...overlay, + ...parse, + ...picker, + ...popup, + ...radio, + ...radioGroup, + ...rate, + ...readMore, + ...row, + ...rowNotice, + ...scrollList, + ...search, + ...section, + ...skeleton, + ...slider, + ...statusBar, + ...steps, + ...stepsItem, + ...sticky, + ...subsection, + ...swipeAction, + ...swipeActionItem, + ...swiper, + ...swipterIndicator, + ..._switch, + ...tabbar, + ...tabbarItem, + ...tabs, + ...tag, + ...text, + ...textarea, + ...toast, + ...toolbar, + ...tooltip, + ...transition, + ...upload +} diff --git a/uni_modules/uview-ui/libs/config/props/actionSheet.js b/uni_modules/uview-ui/libs/config/props/actionSheet.js new file mode 100644 index 0000000..d8061a7 --- /dev/null +++ b/uni_modules/uview-ui/libs/config/props/actionSheet.js @@ -0,0 +1,25 @@ +/* + * @Author : LQ + * @Description : + * @version : 1.0 + * @Date : 2021-08-20 16:44:21 + * @LastAuthor : LQ + * @lastTime : 2021-08-20 16:44:35 + * @FilePath : /u-view2.0/uview-ui/libs/config/props/actionSheet.js + */ +export default { + // action-sheet组件 + actionSheet: { + show: false, + title: '', + description: '', + actions: () => [], + index: '', + cancelText: '', + closeOnClickAction: true, + safeAreaInsetBottom: true, + openType: '', + closeOnClickOverlay: true, + round: 0 + } +} diff --git a/uni_modules/uview-ui/libs/config/props/album.js b/uni_modules/uview-ui/libs/config/props/album.js new file mode 100644 index 0000000..8877326 --- /dev/null +++ b/uni_modules/uview-ui/libs/config/props/album.js @@ -0,0 +1,25 @@ +/* + * @Author : LQ + * @Description : + * @version : 1.0 + * @Date : 2021-08-20 16:44:21 + * @LastAuthor : LQ + * @lastTime : 2021-08-20 16:47:24 + * @FilePath : /u-view2.0/uview-ui/libs/config/props/album.js + */ +export default { + // album 组件 + album: { + urls: () => [], + keyName: '', + singleSize: 180, + multipleSize: 70, + space: 6, + singleMode: 'scaleToFill', + multipleMode: 'aspectFill', + maxCount: 9, + previewFullImage: true, + rowCount: 3, + showMore: true + } +} diff --git a/uni_modules/uview-ui/libs/config/props/alert.js b/uni_modules/uview-ui/libs/config/props/alert.js new file mode 100644 index 0000000..8f8182c --- /dev/null +++ b/uni_modules/uview-ui/libs/config/props/alert.js @@ -0,0 +1,22 @@ +/* + * @Author : LQ + * @Description : + * @version : 1.0 + * @Date : 2021-08-20 16:44:21 + * @LastAuthor : LQ + * @lastTime : 2021-08-20 16:48:53 + * @FilePath : /u-view2.0/uview-ui/libs/config/props/alert.js + */ +export default { + // alert警告组件 + alert: { + title: '', + type: 'warning', + description: '', + closable: false, + showIcon: false, + effect: 'light', + center: false, + fontSize: 14 + } +} diff --git a/uni_modules/uview-ui/libs/config/props/avatar.js b/uni_modules/uview-ui/libs/config/props/avatar.js new file mode 100644 index 0000000..c097d4e --- /dev/null +++ b/uni_modules/uview-ui/libs/config/props/avatar.js @@ -0,0 +1,28 @@ +/* + * @Author : LQ + * @Description : + * @version : 1.0 + * @Date : 2021-08-20 16:44:21 + * @LastAuthor : LQ + * @lastTime : 2021-08-20 16:49:22 + * @FilePath : /u-view2.0/uview-ui/libs/config/props/avatar.js + */ +export default { + // avatar 组件 + avatar: { + src: '', + shape: 'circle', + size: 40, + mode: 'scaleToFill', + text: '', + bgColor: '#c0c4cc', + color: '#ffffff', + fontSize: 18, + icon: '', + mpAvatar: false, + randomBgColor: false, + defaultUrl: '', + colorIndex: '', + name: '' + } +} diff --git a/uni_modules/uview-ui/libs/config/props/avatarGroup.js b/uni_modules/uview-ui/libs/config/props/avatarGroup.js new file mode 100644 index 0000000..f4a66c3 --- /dev/null +++ b/uni_modules/uview-ui/libs/config/props/avatarGroup.js @@ -0,0 +1,23 @@ +/* + * @Author : LQ + * @Description : + * @version : 1.0 + * @Date : 2021-08-20 16:44:21 + * @LastAuthor : LQ + * @lastTime : 2021-08-20 16:49:55 + * @FilePath : /u-view2.0/uview-ui/libs/config/props/avatarGroup.js + */ +export default { + // avatarGroup 组件 + avatarGroup: { + urls: () => [], + maxCount: 5, + shape: 'circle', + mode: 'scaleToFill', + showMore: true, + size: 40, + keyName: '', + gap: 0.5, + extraValue: 0 + } +} diff --git a/uni_modules/uview-ui/libs/config/props/backtop.js b/uni_modules/uview-ui/libs/config/props/backtop.js new file mode 100644 index 0000000..80f17d0 --- /dev/null +++ b/uni_modules/uview-ui/libs/config/props/backtop.js @@ -0,0 +1,27 @@ +/* + * @Author : LQ + * @Description : + * @version : 1.0 + * @Date : 2021-08-20 16:44:21 + * @LastAuthor : LQ + * @lastTime : 2021-08-20 16:50:18 + * @FilePath : /u-view2.0/uview-ui/libs/config/props/backtop.js + */ +export default { + // backtop组件 + backtop: { + mode: 'circle', + icon: 'arrow-upward', + text: '', + duration: 100, + scrollTop: 0, + top: 400, + bottom: 100, + right: 20, + zIndex: 9, + iconStyle: () => ({ + color: '#909399', + fontSize: '19px' + }) + } +} diff --git a/uni_modules/uview-ui/libs/config/props/badge.js b/uni_modules/uview-ui/libs/config/props/badge.js new file mode 100644 index 0000000..44ee7cc --- /dev/null +++ b/uni_modules/uview-ui/libs/config/props/badge.js @@ -0,0 +1,27 @@ +/* + * @Author : LQ + * @Description : + * @version : 1.0 + * @Date : 2021-08-20 16:44:21 + * @LastAuthor : LQ + * @lastTime : 2021-08-23 19:51:50 + * @FilePath : /u-view2.0/uview-ui/libs/config/props/badge.js + */ +export default { + // 徽标数组件 + badge: { + isDot: false, + value: '', + show: true, + max: 999, + type: 'error', + showZero: false, + bgColor: null, + color: null, + shape: 'circle', + numberType: 'overflow', + offset: () => [], + inverted: false, + absolute: false + } +} diff --git a/uni_modules/uview-ui/libs/config/props/button.js b/uni_modules/uview-ui/libs/config/props/button.js new file mode 100644 index 0000000..acd65fc --- /dev/null +++ b/uni_modules/uview-ui/libs/config/props/button.js @@ -0,0 +1,42 @@ +/* + * @Author : LQ + * @Description : + * @version : 1.0 + * @Date : 2021-08-20 16:44:21 + * @LastAuthor : LQ + * @lastTime : 2021-08-20 16:51:27 + * @FilePath : /u-view2.0/uview-ui/libs/config/props/button.js + */ +export default { + // button组件 + button: { + hairline: false, + type: 'info', + size: 'normal', + shape: 'square', + plain: false, + disabled: false, + loading: false, + loadingText: '', + loadingMode: 'spinner', + loadingSize: 15, + openType: '', + formType: '', + appParameter: '', + hoverStopPropagation: true, + lang: 'en', + sessionFrom: '', + sendMessageTitle: '', + sendMessagePath: '', + sendMessageImg: '', + showMessageCard: false, + dataName: '', + throttleTime: 0, + hoverStartTime: 0, + hoverStayTime: 200, + text: '', + icon: '', + iconColor: '', + color: '' + } +} diff --git a/uni_modules/uview-ui/libs/config/props/calendar.js b/uni_modules/uview-ui/libs/config/props/calendar.js new file mode 100644 index 0000000..bfd2bd6 --- /dev/null +++ b/uni_modules/uview-ui/libs/config/props/calendar.js @@ -0,0 +1,42 @@ +/* + * @Author : LQ + * @Description : + * @version : 1.0 + * @Date : 2021-08-20 16:44:21 + * @LastAuthor : LQ + * @lastTime : 2021-08-20 16:52:43 + * @FilePath : /u-view2.0/uview-ui/libs/config/props/calendar.js + */ +export default { + // calendar 组件 + calendar: { + title: '日期选择', + showTitle: true, + showSubtitle: true, + mode: 'single', + startText: '开始', + endText: '结束', + customList: () => [], + color: '#3c9cff', + minDate: 0, + maxDate: 0, + defaultDate: null, + maxCount: Number.MAX_SAFE_INTEGER, // Infinity + rowHeight: 56, + formatter: null, + showLunar: false, + showMark: true, + confirmText: '确定', + confirmDisabledText: '确定', + show: false, + closeOnClickOverlay: false, + readonly: false, + showConfirm: true, + maxRange: Number.MAX_SAFE_INTEGER, // Infinity + rangePrompt: '', + showRangePrompt: true, + allowSameDay: false, + round: 0, + monthNum: 3 + } +} diff --git a/uni_modules/uview-ui/libs/config/props/carKeyboard.js b/uni_modules/uview-ui/libs/config/props/carKeyboard.js new file mode 100644 index 0000000..af1baa0 --- /dev/null +++ b/uni_modules/uview-ui/libs/config/props/carKeyboard.js @@ -0,0 +1,15 @@ +/* + * @Author : LQ + * @Description : + * @version : 1.0 + * @Date : 2021-08-20 16:44:21 + * @LastAuthor : LQ + * @lastTime : 2021-08-20 16:53:20 + * @FilePath : /u-view2.0/uview-ui/libs/config/props/carKeyboard.js + */ +export default { + // 车牌号键盘 + carKeyboard: { + random: false + } +} diff --git a/uni_modules/uview-ui/libs/config/props/cell.js b/uni_modules/uview-ui/libs/config/props/cell.js new file mode 100644 index 0000000..425ea3f --- /dev/null +++ b/uni_modules/uview-ui/libs/config/props/cell.js @@ -0,0 +1,35 @@ +/* + * @Author : LQ + * @Description : + * @version : 1.0 + * @Date : 2021-08-20 16:44:21 + * @LastAuthor : LQ + * @lastTime : 2021-08-23 20:53:09 + * @FilePath : /u-view2.0/uview-ui/libs/config/props/cell.js + */ +export default { + // cell组件的props + cell: { + customClass: '', + title: '', + label: '', + value: '', + icon: '', + disabled: false, + border: true, + center: false, + url: '', + linkType: 'navigateTo', + clickable: false, + isLink: false, + required: false, + arrowDirection: '', + iconStyle: {}, + rightIconStyle: {}, + rightIcon: 'arrow-right', + titleStyle: {}, + size: '', + stop: true, + name: '' + } +} diff --git a/uni_modules/uview-ui/libs/config/props/cellGroup.js b/uni_modules/uview-ui/libs/config/props/cellGroup.js new file mode 100644 index 0000000..d48a9cd --- /dev/null +++ b/uni_modules/uview-ui/libs/config/props/cellGroup.js @@ -0,0 +1,17 @@ +/* + * @Author : LQ + * @Description : + * @version : 1.0 + * @Date : 2021-08-20 16:44:21 + * @LastAuthor : LQ + * @lastTime : 2021-08-20 16:54:16 + * @FilePath : /u-view2.0/uview-ui/libs/config/props/cellGroup.js + */ +export default { + // cell-group组件的props + cellGroup: { + title: '', + border: true, + customStyle: {} + } +} diff --git a/uni_modules/uview-ui/libs/config/props/checkbox.js b/uni_modules/uview-ui/libs/config/props/checkbox.js new file mode 100644 index 0000000..2310901 --- /dev/null +++ b/uni_modules/uview-ui/libs/config/props/checkbox.js @@ -0,0 +1,27 @@ +/* + * @Author : LQ + * @Description : + * @version : 1.0 + * @Date : 2021-08-20 16:44:21 + * @LastAuthor : LQ + * @lastTime : 2021-08-23 21:06:59 + * @FilePath : /u-view2.0/uview-ui/libs/config/props/checkbox.js + */ +export default { + // checkbox组件 + checkbox: { + name: '', + shape: '', + size: '', + checkbox: false, + disabled: '', + activeColor: '', + inactiveColor: '', + iconSize: '', + iconColor: '', + label: '', + labelSize: '', + labelColor: '', + labelDisabled: '' + } +} diff --git a/uni_modules/uview-ui/libs/config/props/checkboxGroup.js b/uni_modules/uview-ui/libs/config/props/checkboxGroup.js new file mode 100644 index 0000000..8798fa4 --- /dev/null +++ b/uni_modules/uview-ui/libs/config/props/checkboxGroup.js @@ -0,0 +1,29 @@ +/* + * @Author : LQ + * @Description : + * @version : 1.0 + * @Date : 2021-08-20 16:44:21 + * @LastAuthor : LQ + * @lastTime : 2021-08-20 16:54:47 + * @FilePath : /u-view2.0/uview-ui/libs/config/props/checkboxGroup.js + */ +export default { + // checkbox-group组件 + checkboxGroup: { + name: '', + value: () => [], + shape: 'square', + disabled: false, + activeColor: '#2979ff', + inactiveColor: '#c8c9cc', + size: 18, + placement: 'row', + labelSize: 14, + labelColor: '#303133', + labelDisabled: false, + iconColor: '#ffffff', + iconSize: 12, + iconPlacement: 'left', + borderBottom: false + } +} diff --git a/uni_modules/uview-ui/libs/config/props/circleProgress.js b/uni_modules/uview-ui/libs/config/props/circleProgress.js new file mode 100644 index 0000000..b3a9b43 --- /dev/null +++ b/uni_modules/uview-ui/libs/config/props/circleProgress.js @@ -0,0 +1,15 @@ +/* + * @Author : LQ + * @Description : + * @version : 1.0 + * @Date : 2021-08-20 16:44:21 + * @LastAuthor : LQ + * @lastTime : 2021-08-20 16:55:02 + * @FilePath : /u-view2.0/uview-ui/libs/config/props/circleProgress.js + */ +export default { + // circleProgress 组件 + circleProgress: { + percentage: 30 + } +} diff --git a/uni_modules/uview-ui/libs/config/props/code.js b/uni_modules/uview-ui/libs/config/props/code.js new file mode 100644 index 0000000..693417a --- /dev/null +++ b/uni_modules/uview-ui/libs/config/props/code.js @@ -0,0 +1,21 @@ +/* + * @Author : LQ + * @Description : + * @version : 1.0 + * @Date : 2021-08-20 16:44:21 + * @LastAuthor : LQ + * @lastTime : 2021-08-20 16:55:27 + * @FilePath : /u-view2.0/uview-ui/libs/config/props/code.js + */ + +export default { + // code 组件 + code: { + seconds: 60, + startText: '获取验证码', + changeText: 'X秒重新获取', + endText: '重新获取', + keepRunning: false, + uniqueKey: '' + } +} diff --git a/uni_modules/uview-ui/libs/config/props/codeInput.js b/uni_modules/uview-ui/libs/config/props/codeInput.js new file mode 100644 index 0000000..cac9265 --- /dev/null +++ b/uni_modules/uview-ui/libs/config/props/codeInput.js @@ -0,0 +1,29 @@ +/* + * @Author : LQ + * @Description : + * @version : 1.0 + * @Date : 2021-08-20 16:44:21 + * @LastAuthor : LQ + * @lastTime : 2021-08-20 16:55:58 + * @FilePath : /u-view2.0/uview-ui/libs/config/props/codeInput.js + */ +export default { + // codeInput 组件 + codeInput: { + adjustPosition: true, + maxlength: 6, + dot: false, + mode: 'box', + hairline: false, + space: 10, + value: '', + focus: false, + bold: false, + color: '#606266', + fontSize: 18, + size: 35, + disabledKeyboard: false, + borderColor: '#c9cacc', + disabledDot: true + } +} diff --git a/uni_modules/uview-ui/libs/config/props/col.js b/uni_modules/uview-ui/libs/config/props/col.js new file mode 100644 index 0000000..7621653 --- /dev/null +++ b/uni_modules/uview-ui/libs/config/props/col.js @@ -0,0 +1,19 @@ +/* + * @Author : LQ + * @Description : + * @version : 1.0 + * @Date : 2021-08-20 16:44:21 + * @LastAuthor : LQ + * @lastTime : 2021-08-20 16:56:12 + * @FilePath : /u-view2.0/uview-ui/libs/config/props/col.js + */ +export default { + // col 组件 + col: { + span: 12, + offset: 0, + justify: 'start', + align: 'stretch', + textAlign: 'left' + } +} diff --git a/uni_modules/uview-ui/libs/config/props/collapse.js b/uni_modules/uview-ui/libs/config/props/collapse.js new file mode 100644 index 0000000..c2b9fdd --- /dev/null +++ b/uni_modules/uview-ui/libs/config/props/collapse.js @@ -0,0 +1,17 @@ +/* + * @Author : LQ + * @Description : + * @version : 1.0 + * @Date : 2021-08-20 16:44:21 + * @LastAuthor : LQ + * @lastTime : 2021-08-20 16:56:30 + * @FilePath : /u-view2.0/uview-ui/libs/config/props/collapse.js + */ +export default { + // collapse 组件 + collapse: { + value: null, + accordion: false, + border: true + } +} diff --git a/uni_modules/uview-ui/libs/config/props/collapseItem.js b/uni_modules/uview-ui/libs/config/props/collapseItem.js new file mode 100644 index 0000000..74ce682 --- /dev/null +++ b/uni_modules/uview-ui/libs/config/props/collapseItem.js @@ -0,0 +1,25 @@ +/* + * @Author : LQ + * @Description : + * @version : 1.0 + * @Date : 2021-08-20 16:44:21 + * @LastAuthor : LQ + * @lastTime : 2021-08-20 16:56:42 + * @FilePath : /u-view2.0/uview-ui/libs/config/props/collapseItem.js + */ +export default { + // collapseItem 组件 + collapseItem: { + title: '', + value: '', + label: '', + disabled: false, + isLink: true, + clickable: true, + border: true, + align: 'left', + name: '', + icon: '', + duration: 300 + } +} diff --git a/uni_modules/uview-ui/libs/config/props/columnNotice.js b/uni_modules/uview-ui/libs/config/props/columnNotice.js new file mode 100644 index 0000000..147c0aa --- /dev/null +++ b/uni_modules/uview-ui/libs/config/props/columnNotice.js @@ -0,0 +1,24 @@ +/* + * @Author : LQ + * @Description : + * @version : 1.0 + * @Date : 2021-08-20 16:44:21 + * @LastAuthor : LQ + * @lastTime : 2021-08-20 16:57:16 + * @FilePath : /u-view2.0/uview-ui/libs/config/props/columnNotice.js + */ +export default { + // columnNotice 组件 + columnNotice: { + text: '', + icon: 'volume', + mode: '', + color: '#f9ae3d', + bgColor: '#fdf6ec', + fontSize: 14, + speed: 80, + step: false, + duration: 1500, + disableTouch: true + } +} diff --git a/uni_modules/uview-ui/libs/config/props/countDown.js b/uni_modules/uview-ui/libs/config/props/countDown.js new file mode 100644 index 0000000..81e33b1 --- /dev/null +++ b/uni_modules/uview-ui/libs/config/props/countDown.js @@ -0,0 +1,18 @@ +/* + * @Author : LQ + * @Description : + * @version : 1.0 + * @Date : 2021-08-20 16:44:21 + * @LastAuthor : LQ + * @lastTime : 2021-08-20 17:11:29 + * @FilePath : /u-view2.0/uview-ui/libs/config/props/countDown.js + */ +export default { + // u-count-down 计时器组件 + countDown: { + time: 0, + format: 'HH:mm:ss', + autoStart: true, + millisecond: false + } +} diff --git a/uni_modules/uview-ui/libs/config/props/countTo.js b/uni_modules/uview-ui/libs/config/props/countTo.js new file mode 100644 index 0000000..a536cde --- /dev/null +++ b/uni_modules/uview-ui/libs/config/props/countTo.js @@ -0,0 +1,25 @@ +/* + * @Author : LQ + * @Description : + * @version : 1.0 + * @Date : 2021-08-20 16:44:21 + * @LastAuthor : LQ + * @lastTime : 2021-08-20 16:57:32 + * @FilePath : /u-view2.0/uview-ui/libs/config/props/countTo.js + */ +export default { + // countTo 组件 + countTo: { + startVal: 0, + endVal: 0, + duration: 2000, + autoplay: true, + decimals: 0, + useEasing: true, + decimal: '.', + color: '#606266', + fontSize: 22, + bold: false, + separator: '' + } +} diff --git a/uni_modules/uview-ui/libs/config/props/datetimePicker.js b/uni_modules/uview-ui/libs/config/props/datetimePicker.js new file mode 100644 index 0000000..4f90966 --- /dev/null +++ b/uni_modules/uview-ui/libs/config/props/datetimePicker.js @@ -0,0 +1,36 @@ +/* + * @Author : LQ + * @Description : + * @version : 1.0 + * @Date : 2021-08-20 16:44:21 + * @LastAuthor : LQ + * @lastTime : 2021-08-20 16:57:48 + * @FilePath : /u-view2.0/uview-ui/libs/config/props/datetimePicker.js + */ +export default { + // datetimePicker 组件 + datetimePicker: { + show: false, + showToolbar: true, + value: '', + title: '', + mode: 'datetime', + maxDate: new Date(new Date().getFullYear() + 10, 0, 1).getTime(), + minDate: new Date(new Date().getFullYear() - 10, 0, 1).getTime(), + minHour: 0, + maxHour: 23, + minMinute: 0, + maxMinute: 59, + filter: null, + formatter: null, + loading: false, + itemHeight: 44, + cancelText: '取消', + confirmText: '确认', + cancelColor: '#909193', + confirmColor: '#3c9cff', + visibleItemCount: 5, + closeOnClickOverlay: false, + defaultIndex: () => [] + } +} diff --git a/uni_modules/uview-ui/libs/config/props/divider.js b/uni_modules/uview-ui/libs/config/props/divider.js new file mode 100644 index 0000000..55a8ce4 --- /dev/null +++ b/uni_modules/uview-ui/libs/config/props/divider.js @@ -0,0 +1,23 @@ +/* + * @Author : LQ + * @Description : + * @version : 1.0 + * @Date : 2021-08-20 16:44:21 + * @LastAuthor : LQ + * @lastTime : 2021-08-20 16:58:03 + * @FilePath : /u-view2.0/uview-ui/libs/config/props/divider.js + */ +export default { + // divider组件 + divider: { + dashed: false, + hairline: true, + dot: false, + textPosition: 'center', + text: '', + textSize: 14, + textColor: '#909399', + lineColor: '#dcdfe6' + } + +} diff --git a/uni_modules/uview-ui/libs/config/props/empty.js b/uni_modules/uview-ui/libs/config/props/empty.js new file mode 100644 index 0000000..fe20445 --- /dev/null +++ b/uni_modules/uview-ui/libs/config/props/empty.js @@ -0,0 +1,26 @@ +/* + * @Author : LQ + * @Description : + * @version : 1.0 + * @Date : 2021-08-20 16:44:21 + * @LastAuthor : LQ + * @lastTime : 2021-08-20 17:03:27 + * @FilePath : /u-view2.0/uview-ui/libs/config/props/empty.js + */ +export default { + // empty组件 + empty: { + icon: '', + text: '', + textColor: '#c0c4cc', + textSize: 14, + iconColor: '#c0c4cc', + iconSize: 90, + mode: 'data', + width: 160, + height: 160, + show: true, + marginTop: 0 + } + +} diff --git a/uni_modules/uview-ui/libs/config/props/form.js b/uni_modules/uview-ui/libs/config/props/form.js new file mode 100644 index 0000000..41b122e --- /dev/null +++ b/uni_modules/uview-ui/libs/config/props/form.js @@ -0,0 +1,22 @@ +/* + * @Author : LQ + * @Description : + * @version : 1.0 + * @Date : 2021-08-20 16:44:21 + * @LastAuthor : LQ + * @lastTime : 2021-08-20 17:03:49 + * @FilePath : /u-view2.0/uview-ui/libs/config/props/form.js + */ +export default { + // form 组件 + form: { + model: () => ({}), + rules: () => ({}), + errorType: 'message', + borderBottom: true, + labelPosition: 'left', + labelWidth: 45, + labelAlign: 'left', + labelStyle: () => ({}) + } +} diff --git a/uni_modules/uview-ui/libs/config/props/formItem.js b/uni_modules/uview-ui/libs/config/props/formItem.js new file mode 100644 index 0000000..4b7c90a --- /dev/null +++ b/uni_modules/uview-ui/libs/config/props/formItem.js @@ -0,0 +1,23 @@ +/* + * @Author : LQ + * @Description : + * @version : 1.0 + * @Date : 2021-08-20 16:44:21 + * @LastAuthor : LQ + * @lastTime : 2021-08-20 17:04:32 + * @FilePath : /u-view2.0/uview-ui/libs/config/props/formItem.js + */ +export default { + // formItem 组件 + formItem: { + label: '', + prop: '', + borderBottom: '', + labelPosition: '', + labelWidth: '', + rightIcon: '', + leftIcon: '', + required: false, + leftIconStyle: '', + } +} diff --git a/uni_modules/uview-ui/libs/config/props/gap.js b/uni_modules/uview-ui/libs/config/props/gap.js new file mode 100644 index 0000000..60a21af --- /dev/null +++ b/uni_modules/uview-ui/libs/config/props/gap.js @@ -0,0 +1,19 @@ +/* + * @Author : LQ + * @Description : + * @version : 1.0 + * @Date : 2021-08-20 16:44:21 + * @LastAuthor : LQ + * @lastTime : 2021-08-20 17:05:25 + * @FilePath : /u-view2.0/uview-ui/libs/config/props/gap.js + */ +export default { + // gap组件 + gap: { + bgColor: 'transparent', + height: 20, + marginTop: 0, + marginBottom: 0, + customStyle: {} + } +} diff --git a/uni_modules/uview-ui/libs/config/props/grid.js b/uni_modules/uview-ui/libs/config/props/grid.js new file mode 100644 index 0000000..60abeb7 --- /dev/null +++ b/uni_modules/uview-ui/libs/config/props/grid.js @@ -0,0 +1,17 @@ +/* + * @Author : LQ + * @Description : + * @version : 1.0 + * @Date : 2021-08-20 16:44:21 + * @LastAuthor : LQ + * @lastTime : 2021-08-20 17:05:57 + * @FilePath : /u-view2.0/uview-ui/libs/config/props/grid.js + */ +export default { + // grid组件 + grid: { + col: 3, + border: false, + align: 'left' + } +} diff --git a/uni_modules/uview-ui/libs/config/props/gridItem.js b/uni_modules/uview-ui/libs/config/props/gridItem.js new file mode 100644 index 0000000..1b747f4 --- /dev/null +++ b/uni_modules/uview-ui/libs/config/props/gridItem.js @@ -0,0 +1,16 @@ +/* + * @Author : LQ + * @Description : + * @version : 1.0 + * @Date : 2021-08-20 16:44:21 + * @LastAuthor : LQ + * @lastTime : 2021-08-20 17:06:13 + * @FilePath : /u-view2.0/uview-ui/libs/config/props/gridItem.js + */ +export default { + // grid-item组件 + gridItem: { + name: null, + bgColor: 'transparent' + } +} diff --git a/uni_modules/uview-ui/libs/config/props/icon.js b/uni_modules/uview-ui/libs/config/props/icon.js new file mode 100644 index 0000000..1d81d2d --- /dev/null +++ b/uni_modules/uview-ui/libs/config/props/icon.js @@ -0,0 +1,36 @@ +/* + * @Author : LQ + * @Description : + * @version : 1.0 + * @Date : 2021-08-20 16:44:21 + * @LastAuthor : LQ + * @lastTime : 2021-08-20 18:00:14 + * @FilePath : /u-view2.0/uview-ui/libs/config/props/icon.js + */ +import config from '../config' + +const { + color +} = config +export default { + // icon组件 + icon: { + name: '', + color: color['u-content-color'], + size: '16px', + bold: false, + index: '', + hoverClass: '', + customPrefix: 'uicon', + label: '', + labelPos: 'right', + labelSize: '15px', + labelColor: color['u-content-color'], + space: '3px', + imgMode: '', + width: '', + height: '', + top: 0, + stop: false + } +} diff --git a/uni_modules/uview-ui/libs/config/props/image.js b/uni_modules/uview-ui/libs/config/props/image.js new file mode 100644 index 0000000..2552db6 --- /dev/null +++ b/uni_modules/uview-ui/libs/config/props/image.js @@ -0,0 +1,30 @@ +/* + * @Author : LQ + * @Description : + * @version : 1.0 + * @Date : 2021-08-20 16:44:21 + * @LastAuthor : LQ + * @lastTime : 2021-08-20 17:01:51 + * @FilePath : /u-view2.0/uview-ui/libs/config/props/image.js + */ +export default { + // image组件 + image: { + src: '', + mode: 'aspectFill', + width: '300', + height: '225', + shape: 'square', + radius: 0, + lazyLoad: true, + showMenuByLongpress: true, + loadingIcon: 'photo', + errorIcon: 'error-circle', + showLoading: true, + showError: true, + fade: true, + webp: false, + duration: 500, + bgColor: '#f3f4f6' + } +} diff --git a/uni_modules/uview-ui/libs/config/props/indexAnchor.js b/uni_modules/uview-ui/libs/config/props/indexAnchor.js new file mode 100644 index 0000000..bb20d46 --- /dev/null +++ b/uni_modules/uview-ui/libs/config/props/indexAnchor.js @@ -0,0 +1,19 @@ +/* + * @Author : LQ + * @Description : + * @version : 1.0 + * @Date : 2021-08-20 16:44:21 + * @LastAuthor : LQ + * @lastTime : 2021-08-20 17:13:15 + * @FilePath : /u-view2.0/uview-ui/libs/config/props/indexAnchor.js + */ +export default { + // indexAnchor 组件 + indexAnchor: { + text: '', + color: '#606266', + size: 14, + bgColor: '#dedede', + height: 32 + } +} diff --git a/uni_modules/uview-ui/libs/config/props/indexList.js b/uni_modules/uview-ui/libs/config/props/indexList.js new file mode 100644 index 0000000..dc6ce94 --- /dev/null +++ b/uni_modules/uview-ui/libs/config/props/indexList.js @@ -0,0 +1,19 @@ +/* + * @Author : LQ + * @Description : + * @version : 1.0 + * @Date : 2021-08-20 16:44:21 + * @LastAuthor : LQ + * @lastTime : 2021-08-20 17:13:35 + * @FilePath : /u-view2.0/uview-ui/libs/config/props/indexList.js + */ +export default { + // indexList 组件 + indexList: { + inactiveColor: '#606266', + activeColor: '#5677fc', + indexList: () => [], + sticky: true, + customNavHeight: 0 + } +} diff --git a/uni_modules/uview-ui/libs/config/props/input.js b/uni_modules/uview-ui/libs/config/props/input.js new file mode 100644 index 0000000..4f0edc6 --- /dev/null +++ b/uni_modules/uview-ui/libs/config/props/input.js @@ -0,0 +1,48 @@ +/* + * @Author : LQ + * @Description : + * @version : 1.0 + * @Date : 2021-08-20 16:44:21 + * @LastAuthor : LQ + * @lastTime : 2021-08-20 17:13:55 + * @FilePath : /u-view2.0/uview-ui/libs/config/props/input.js + */ +export default { + // index 组件 + input: { + value: '', + type: 'text', + fixed: false, + disabled: false, + disabledColor: '#f5f7fa', + clearable: false, + password: false, + maxlength: -1, + placeholder: null, + placeholderClass: 'input-placeholder', + placeholderStyle: 'color: #c0c4cc', + showWordLimit: false, + confirmType: 'done', + confirmHold: false, + holdKeyboard: false, + focus: false, + autoBlur: false, + disableDefaultPadding: false, + cursor: -1, + cursorSpacing: 30, + selectionStart: -1, + selectionEnd: -1, + adjustPosition: true, + inputAlign: 'left', + fontSize: '15px', + color: '#303133', + prefixIcon: '', + prefixIconStyle: '', + suffixIcon: '', + suffixIconStyle: '', + border: 'surround', + readonly: false, + shape: 'square', + formatter: null + } +} diff --git a/uni_modules/uview-ui/libs/config/props/keyboard.js b/uni_modules/uview-ui/libs/config/props/keyboard.js new file mode 100644 index 0000000..57182bd --- /dev/null +++ b/uni_modules/uview-ui/libs/config/props/keyboard.js @@ -0,0 +1,30 @@ +/* + * @Author : LQ + * @Description : + * @version : 1.0 + * @Date : 2021-08-20 16:44:21 + * @LastAuthor : LQ + * @lastTime : 2021-08-20 17:07:49 + * @FilePath : /u-view2.0/uview-ui/libs/config/props/keyboard.js + */ +export default { + // 键盘组件 + keyboard: { + mode: 'number', + dotDisabled: false, + tooltip: true, + showTips: true, + tips: '', + showCancel: true, + showConfirm: true, + random: false, + safeAreaInsetBottom: true, + closeOnClickOverlay: true, + show: false, + overlay: true, + zIndex: 10075, + cancelText: '取消', + confirmText: '确定', + autoChange: false + } +} diff --git a/uni_modules/uview-ui/libs/config/props/line.js b/uni_modules/uview-ui/libs/config/props/line.js new file mode 100644 index 0000000..2c87af2 --- /dev/null +++ b/uni_modules/uview-ui/libs/config/props/line.js @@ -0,0 +1,20 @@ +/* + * @Author : LQ + * @Description : + * @version : 1.0 + * @Date : 2021-08-20 16:44:21 + * @LastAuthor : LQ + * @lastTime : 2021-08-20 17:04:49 + * @FilePath : /u-view2.0/uview-ui/libs/config/props/line.js + */ +export default { + // line组件 + line: { + color: '#d6d7d9', + length: '100%', + direction: 'row', + hairline: true, + margin: 0, + dashed: false + } +} diff --git a/uni_modules/uview-ui/libs/config/props/lineProgress.js b/uni_modules/uview-ui/libs/config/props/lineProgress.js new file mode 100644 index 0000000..cdfcb0e --- /dev/null +++ b/uni_modules/uview-ui/libs/config/props/lineProgress.js @@ -0,0 +1,19 @@ +/* + * @Author : LQ + * @Description : + * @version : 1.0 + * @Date : 2021-08-20 16:44:21 + * @LastAuthor : LQ + * @lastTime : 2021-08-20 17:14:11 + * @FilePath : /u-view2.0/uview-ui/libs/config/props/lineProgress.js + */ +export default { + // lineProgress 组件 + lineProgress: { + activeColor: '#19be6b', + inactiveColor: '#ececec', + percentage: 0, + showText: true, + height: 12 + } +} diff --git a/uni_modules/uview-ui/libs/config/props/link.js b/uni_modules/uview-ui/libs/config/props/link.js new file mode 100644 index 0000000..6c4c883 --- /dev/null +++ b/uni_modules/uview-ui/libs/config/props/link.js @@ -0,0 +1,26 @@ +/* + * @Author : LQ + * @Description : + * @version : 1.0 + * @Date : 2021-08-20 16:44:21 + * @LastAuthor : LQ + * @lastTime : 2021-08-20 17:45:36 + * @FilePath : /u-view2.0/uview-ui/libs/config/props/link.js + */ +import config from '../config' + +const { + color +} = config +export default { + // link超链接组件props参数 + link: { + color: color['u-primary'], + fontSize: 15, + underLine: false, + href: '', + mpTips: '链接已复制,请在浏览器打开', + lineColor: '', + text: '' + } +} diff --git a/uni_modules/uview-ui/libs/config/props/list.js b/uni_modules/uview-ui/libs/config/props/list.js new file mode 100644 index 0000000..a830c32 --- /dev/null +++ b/uni_modules/uview-ui/libs/config/props/list.js @@ -0,0 +1,28 @@ +/* + * @Author : LQ + * @Description : + * @version : 1.0 + * @Date : 2021-08-20 16:44:21 + * @LastAuthor : LQ + * @lastTime : 2021-08-20 17:14:53 + * @FilePath : /u-view2.0/uview-ui/libs/config/props/list.js + */ +export default { + // list 组件 + list: { + showScrollbar: false, + lowerThreshold: 50, + upperThreshold: 0, + scrollTop: 0, + offsetAccuracy: 10, + enableFlex: false, + pagingEnabled: false, + scrollable: true, + scrollIntoView: '', + scrollWithAnimation: false, + enableBackToTop: false, + height: 0, + width: 0, + preLoadScreen: 1 + } +} diff --git a/uni_modules/uview-ui/libs/config/props/listItem.js b/uni_modules/uview-ui/libs/config/props/listItem.js new file mode 100644 index 0000000..7fe2166 --- /dev/null +++ b/uni_modules/uview-ui/libs/config/props/listItem.js @@ -0,0 +1,15 @@ +/* + * @Author : LQ + * @Description : + * @version : 1.0 + * @Date : 2021-08-20 16:44:21 + * @LastAuthor : LQ + * @lastTime : 2021-08-20 17:15:40 + * @FilePath : /u-view2.0/uview-ui/libs/config/props/listItem.js + */ +export default { + // listItem 组件 + listItem: { + anchor: '' + } +} diff --git a/uni_modules/uview-ui/libs/config/props/loadingIcon.js b/uni_modules/uview-ui/libs/config/props/loadingIcon.js new file mode 100644 index 0000000..f4739c4 --- /dev/null +++ b/uni_modules/uview-ui/libs/config/props/loadingIcon.js @@ -0,0 +1,30 @@ +/* + * @Author : LQ + * @Description : + * @version : 1.0 + * @Date : 2021-08-20 16:44:21 + * @LastAuthor : LQ + * @lastTime : 2021-08-20 17:45:47 + * @FilePath : /u-view2.0/uview-ui/libs/config/props/loadingIcon.js + */ +import config from '../config' + +const { + color +} = config +export default { + // loading-icon加载中图标组件 + loadingIcon: { + show: true, + color: color['u-tips-color'], + textColor: color['u-tips-color'], + vertical: false, + mode: 'spinner', + size: 24, + textSize: 15, + text: '', + timingFunction: 'ease-in-out', + duration: 1200, + inactiveColor: '' + } +} diff --git a/uni_modules/uview-ui/libs/config/props/loadingPage.js b/uni_modules/uview-ui/libs/config/props/loadingPage.js new file mode 100644 index 0000000..dc53109 --- /dev/null +++ b/uni_modules/uview-ui/libs/config/props/loadingPage.js @@ -0,0 +1,23 @@ +/* + * @Author : LQ + * @Description : + * @version : 1.0 + * @Date : 2021-08-20 16:44:21 + * @LastAuthor : LQ + * @lastTime : 2021-08-20 17:00:23 + * @FilePath : /u-view2.0/uview-ui/libs/config/props/loadingPage.js + */ +export default { + // loading-page组件 + loadingPage: { + loadingText: '正在加载', + image: '', + loadingMode: 'circle', + loading: false, + bgColor: '#ffffff', + color: '#C8C8C8', + fontSize: 19, + iconSize: 28, + loadingColor: '#C8C8C8' + } +} diff --git a/uni_modules/uview-ui/libs/config/props/loadmore.js b/uni_modules/uview-ui/libs/config/props/loadmore.js new file mode 100644 index 0000000..67c1160 --- /dev/null +++ b/uni_modules/uview-ui/libs/config/props/loadmore.js @@ -0,0 +1,32 @@ +/* + * @Author : LQ + * @Description : + * @version : 1.0 + * @Date : 2021-08-20 16:44:21 + * @LastAuthor : LQ + * @lastTime : 2021-08-20 17:15:26 + * @FilePath : /u-view2.0/uview-ui/libs/config/props/loadmore.js + */ +export default { + // loadmore 组件 + loadmore: { + status: 'loadmore', + bgColor: 'transparent', + icon: true, + fontSize: 14, + iconSize: 17, + color: '#606266', + loadingIcon: 'spinner', + loadmoreText: '加载更多', + loadingText: '正在加载...', + nomoreText: '没有更多了', + isDot: false, + iconColor: '#b7b7b7', + marginTop: 10, + marginBottom: 10, + height: 'auto', + line: false, + lineColor: '#E6E8EB', + dashed: false, + } +} diff --git a/uni_modules/uview-ui/libs/config/props/modal.js b/uni_modules/uview-ui/libs/config/props/modal.js new file mode 100644 index 0000000..2ae3fff --- /dev/null +++ b/uni_modules/uview-ui/libs/config/props/modal.js @@ -0,0 +1,30 @@ +/* + * @Author : LQ + * @Description : + * @version : 1.0 + * @Date : 2021-08-20 16:44:21 + * @LastAuthor : LQ + * @lastTime : 2021-08-20 17:15:59 + * @FilePath : /u-view2.0/uview-ui/libs/config/props/modal.js + */ +export default { + // modal 组件 + modal: { + show: false, + title: '', + content: '', + confirmText: '确认', + cancelText: '取消', + showConfirmButton: true, + showCancelButton: false, + confirmColor: '#2979ff', + cancelColor: '#606266', + buttonReverse: false, + zoom: true, + asyncClose: false, + closeOnClickOverlay: false, + negativeTop: 0, + width: '650rpx', + confirmButtonShape: '' + } +} diff --git a/uni_modules/uview-ui/libs/config/props/navbar.js b/uni_modules/uview-ui/libs/config/props/navbar.js new file mode 100644 index 0000000..614a99d --- /dev/null +++ b/uni_modules/uview-ui/libs/config/props/navbar.js @@ -0,0 +1,32 @@ +/* + * @Author : LQ + * @Description : + * @version : 1.0 + * @Date : 2021-08-20 16:44:21 + * @LastAuthor : LQ + * @lastTime : 2021-08-20 17:16:18 + * @FilePath : /u-view2.0/uview-ui/libs/config/props/navbar.js + */ +import color from '../color' +export default { + // navbar 组件 + navbar: { + safeAreaInsetTop: true, + placeholder: false, + fixed: true, + border: false, + leftIcon: 'arrow-left', + leftText: '', + rightText: '', + rightIcon: '', + title: '', + bgColor: '#ffffff', + titleWidth: '400rpx', + height: '44px', + leftIconSize: 20, + leftIconColor: color.mainColor, + autoBack: false, + titleStyle: '' + } + +} diff --git a/uni_modules/uview-ui/libs/config/props/noNetwork.js b/uni_modules/uview-ui/libs/config/props/noNetwork.js new file mode 100644 index 0000000..74dba1b --- /dev/null +++ b/uni_modules/uview-ui/libs/config/props/noNetwork.js @@ -0,0 +1,18 @@ +/* + * @Author : LQ + * @Description : + * @version : 1.0 + * @Date : 2021-08-20 16:44:21 + * @LastAuthor : LQ + * @lastTime : 2021-08-20 17:16:39 + * @FilePath : /u-view2.0/uview-ui/libs/config/props/noNetwork.js + */ +export default { + // noNetwork + noNetwork: { + tips: '哎呀,网络信号丢失', + zIndex: '', + image: 'data:image/png;base64,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' + } + +} diff --git a/uni_modules/uview-ui/libs/config/props/noticeBar.js b/uni_modules/uview-ui/libs/config/props/noticeBar.js new file mode 100644 index 0000000..02c660a --- /dev/null +++ b/uni_modules/uview-ui/libs/config/props/noticeBar.js @@ -0,0 +1,27 @@ +/* + * @Author : LQ + * @Description : + * @version : 1.0 + * @Date : 2021-08-20 16:44:21 + * @LastAuthor : LQ + * @lastTime : 2021-08-20 17:17:13 + * @FilePath : /u-view2.0/uview-ui/libs/config/props/noticeBar.js + */ +export default { + // noticeBar + noticeBar: { + text: () => [], + direction: 'row', + step: false, + icon: 'volume', + mode: '', + color: '#f9ae3d', + bgColor: '#fdf6ec', + speed: 80, + fontSize: 14, + duration: 2000, + disableTouch: true, + url: '', + linkType: 'navigateTo' + } +} diff --git a/uni_modules/uview-ui/libs/config/props/notify.js b/uni_modules/uview-ui/libs/config/props/notify.js new file mode 100644 index 0000000..1042d2a --- /dev/null +++ b/uni_modules/uview-ui/libs/config/props/notify.js @@ -0,0 +1,22 @@ +/* + * @Author : LQ + * @Description : + * @version : 1.0 + * @Date : 2021-08-20 16:44:21 + * @LastAuthor : LQ + * @lastTime : 2021-08-20 17:10:21 + * @FilePath : /u-view2.0/uview-ui/libs/config/props/notify.js + */ +export default { + // notify组件 + notify: { + top: 0, + type: 'primary', + color: '#ffffff', + bgColor: '', + message: '', + duration: 3000, + fontSize: 15, + safeAreaInsetTop: false + } +} diff --git a/uni_modules/uview-ui/libs/config/props/numberBox.js b/uni_modules/uview-ui/libs/config/props/numberBox.js new file mode 100644 index 0000000..424f0ca --- /dev/null +++ b/uni_modules/uview-ui/libs/config/props/numberBox.js @@ -0,0 +1,35 @@ +/* + * @Author : LQ + * @Description : + * @version : 1.0 + * @Date : 2021-08-20 16:44:21 + * @LastAuthor : LQ + * @lastTime : 2021-08-20 17:11:46 + * @FilePath : /u-view2.0/uview-ui/libs/config/props/numberBox.js + */ +export default { + // 步进器组件 + numberBox: { + name: '', + value: 0, + min: 1, + max: Number.MAX_SAFE_INTEGER, + step: 1, + integer: false, + disabled: false, + disabledInput: false, + asyncChange: false, + inputWidth: 35, + showMinus: true, + showPlus: true, + decimalLength: null, + longPress: true, + color: '#323233', + buttonSize: 30, + bgColor: '#EBECEE', + cursorSpacing: 100, + disableMinus: false, + disablePlus: false, + iconStyle: '' + } +} diff --git a/uni_modules/uview-ui/libs/config/props/numberKeyboard.js b/uni_modules/uview-ui/libs/config/props/numberKeyboard.js new file mode 100644 index 0000000..7b45065 --- /dev/null +++ b/uni_modules/uview-ui/libs/config/props/numberKeyboard.js @@ -0,0 +1,17 @@ +/* + * @Author : LQ + * @Description : + * @version : 1.0 + * @Date : 2021-08-20 16:44:21 + * @LastAuthor : LQ + * @lastTime : 2021-08-20 17:08:05 + * @FilePath : /u-view2.0/uview-ui/libs/config/props/numberKeyboard.js + */ +export default { + // 数字键盘 + numberKeyboard: { + mode: 'number', + dotDisabled: false, + random: false + } +} diff --git a/uni_modules/uview-ui/libs/config/props/overlay.js b/uni_modules/uview-ui/libs/config/props/overlay.js new file mode 100644 index 0000000..c26d068 --- /dev/null +++ b/uni_modules/uview-ui/libs/config/props/overlay.js @@ -0,0 +1,18 @@ +/* + * @Author : LQ + * @Description : + * @version : 1.0 + * @Date : 2021-08-20 16:44:21 + * @LastAuthor : LQ + * @lastTime : 2021-08-20 17:06:50 + * @FilePath : /u-view2.0/uview-ui/libs/config/props/overlay.js + */ +export default { + // overlay组件 + overlay: { + show: false, + zIndex: 10070, + duration: 300, + opacity: 0.5 + } +} diff --git a/uni_modules/uview-ui/libs/config/props/parse.js b/uni_modules/uview-ui/libs/config/props/parse.js new file mode 100644 index 0000000..feb22b9 --- /dev/null +++ b/uni_modules/uview-ui/libs/config/props/parse.js @@ -0,0 +1,22 @@ +/* + * @Author : LQ + * @Description : + * @version : 1.0 + * @Date : 2021-08-20 16:44:21 + * @LastAuthor : LQ + * @lastTime : 2021-08-20 17:17:33 + * @FilePath : /u-view2.0/uview-ui/libs/config/props/parse.js + */ +export default { + // parse + parse: { + copyLink: true, + errorImg: '', + lazyLoad: false, + loadingImg: '', + pauseVideo: true, + previewImg: true, + setTitle: true, + showImgMenu: true + } +} diff --git a/uni_modules/uview-ui/libs/config/props/picker.js b/uni_modules/uview-ui/libs/config/props/picker.js new file mode 100644 index 0000000..f06b321 --- /dev/null +++ b/uni_modules/uview-ui/libs/config/props/picker.js @@ -0,0 +1,29 @@ +/* + * @Author : LQ + * @Description : + * @version : 1.0 + * @Date : 2021-08-20 16:44:21 + * @LastAuthor : LQ + * @lastTime : 2021-08-20 17:18:20 + * @FilePath : /u-view2.0/uview-ui/libs/config/props/picker.js + */ +export default { + // picker + picker: { + show: false, + showToolbar: true, + title: '', + columns: () => [], + loading: false, + itemHeight: 44, + cancelText: '取消', + confirmText: '确定', + cancelColor: '#909193', + confirmColor: '#3c9cff', + visibleItemCount: 5, + keyName: 'text', + closeOnClickOverlay: false, + defaultIndex: () => [], + immediateChange: false + } +} diff --git a/uni_modules/uview-ui/libs/config/props/popup.js b/uni_modules/uview-ui/libs/config/props/popup.js new file mode 100644 index 0000000..0cc1bc0 --- /dev/null +++ b/uni_modules/uview-ui/libs/config/props/popup.js @@ -0,0 +1,29 @@ +/* + * @Author : LQ + * @Description : + * @version : 1.0 + * @Date : 2021-08-20 16:44:21 + * @LastAuthor : LQ + * @lastTime : 2021-08-20 17:06:33 + * @FilePath : /u-view2.0/uview-ui/libs/config/props/popup.js + */ +export default { + // popup组件 + popup: { + show: false, + overlay: true, + mode: 'bottom', + duration: 300, + closeable: false, + overlayStyle: () => {}, + closeOnClickOverlay: true, + zIndex: 10075, + safeAreaInsetBottom: true, + safeAreaInsetTop: false, + closeIconPos: 'top-right', + round: 0, + zoom: true, + bgColor: '', + overlayOpacity: 0.5 + } +} diff --git a/uni_modules/uview-ui/libs/config/props/radio.js b/uni_modules/uview-ui/libs/config/props/radio.js new file mode 100644 index 0000000..4df200f --- /dev/null +++ b/uni_modules/uview-ui/libs/config/props/radio.js @@ -0,0 +1,27 @@ +/* + * @Author : LQ + * @Description : + * @version : 1.0 + * @Date : 2021-08-20 16:44:21 + * @LastAuthor : LQ + * @lastTime : 2021-08-20 17:02:34 + * @FilePath : /u-view2.0/uview-ui/libs/config/props/radio.js + */ +export default { + // radio组件 + radio: { + name: '', + shape: '', + disabled: '', + labelDisabled: '', + activeColor: '', + inactiveColor: '', + iconSize: '', + labelSize: '', + label: '', + labelColor: '', + size: '', + iconColor: '', + placement: '' + } +} diff --git a/uni_modules/uview-ui/libs/config/props/radioGroup.js b/uni_modules/uview-ui/libs/config/props/radioGroup.js new file mode 100644 index 0000000..728e9db --- /dev/null +++ b/uni_modules/uview-ui/libs/config/props/radioGroup.js @@ -0,0 +1,30 @@ +/* + * @Author : LQ + * @Description : + * @version : 1.0 + * @Date : 2021-08-20 16:44:21 + * @LastAuthor : LQ + * @lastTime : 2021-08-20 17:03:12 + * @FilePath : /u-view2.0/uview-ui/libs/config/props/radioGroup.js + */ +export default { + // radio-group组件 + radioGroup: { + value: '', + disabled: false, + shape: 'circle', + activeColor: '#2979ff', + inactiveColor: '#c8c9cc', + name: '', + size: 18, + placement: 'row', + label: '', + labelColor: '#303133', + labelSize: 14, + labelDisabled: false, + iconColor: '#ffffff', + iconSize: 12, + borderBottom: false, + iconPlacement: 'left' + } +} diff --git a/uni_modules/uview-ui/libs/config/props/rate.js b/uni_modules/uview-ui/libs/config/props/rate.js new file mode 100644 index 0000000..d31c61a --- /dev/null +++ b/uni_modules/uview-ui/libs/config/props/rate.js @@ -0,0 +1,26 @@ +/* + * @Author : LQ + * @Description : + * @version : 1.0 + * @Date : 2021-08-20 16:44:21 + * @LastAuthor : LQ + * @lastTime : 2021-08-20 17:05:09 + * @FilePath : /u-view2.0/uview-ui/libs/config/props/rate.js + */ +export default { + // rate组件 + rate: { + value: 1, + count: 5, + disabled: false, + size: 18, + inactiveColor: '#b2b2b2', + activeColor: '#FA3534', + gutter: 4, + minCount: 1, + allowHalf: false, + activeIcon: 'star-fill', + inactiveIcon: 'star', + touchable: true + } +} diff --git a/uni_modules/uview-ui/libs/config/props/readMore.js b/uni_modules/uview-ui/libs/config/props/readMore.js new file mode 100644 index 0000000..09b11cc --- /dev/null +++ b/uni_modules/uview-ui/libs/config/props/readMore.js @@ -0,0 +1,22 @@ +/* + * @Author : LQ + * @Description : + * @version : 1.0 + * @Date : 2021-08-20 16:44:21 + * @LastAuthor : LQ + * @lastTime : 2021-08-20 17:18:41 + * @FilePath : /u-view2.0/uview-ui/libs/config/props/readMore.js + */ +export default { + // readMore + readMore: { + showHeight: 400, + toggle: false, + closeText: '展开阅读全文', + openText: '收起', + color: '#2979ff', + fontSize: 14, + textIndent: '2em', + name: '' + } +} diff --git a/uni_modules/uview-ui/libs/config/props/row.js b/uni_modules/uview-ui/libs/config/props/row.js new file mode 100644 index 0000000..573a431 --- /dev/null +++ b/uni_modules/uview-ui/libs/config/props/row.js @@ -0,0 +1,17 @@ +/* + * @Author : LQ + * @Description : + * @version : 1.0 + * @Date : 2021-08-20 16:44:21 + * @LastAuthor : LQ + * @lastTime : 2021-08-20 17:18:58 + * @FilePath : /u-view2.0/uview-ui/libs/config/props/row.js + */ +export default { + // row + row: { + gutter: 0, + justify: 'start', + align: 'center' + } +} diff --git a/uni_modules/uview-ui/libs/config/props/rowNotice.js b/uni_modules/uview-ui/libs/config/props/rowNotice.js new file mode 100644 index 0000000..cd9d0a0 --- /dev/null +++ b/uni_modules/uview-ui/libs/config/props/rowNotice.js @@ -0,0 +1,21 @@ +/* + * @Author : LQ + * @Description : + * @version : 1.0 + * @Date : 2021-08-20 16:44:21 + * @LastAuthor : LQ + * @lastTime : 2021-08-20 17:19:13 + * @FilePath : /u-view2.0/uview-ui/libs/config/props/rowNotice.js + */ +export default { + // rowNotice + rowNotice: { + text: '', + icon: 'volume', + mode: '', + color: '#f9ae3d', + bgColor: '#fdf6ec', + fontSize: 14, + speed: 80 + } +} diff --git a/uni_modules/uview-ui/libs/config/props/scrollList.js b/uni_modules/uview-ui/libs/config/props/scrollList.js new file mode 100644 index 0000000..441e63a --- /dev/null +++ b/uni_modules/uview-ui/libs/config/props/scrollList.js @@ -0,0 +1,20 @@ +/* + * @Author : LQ + * @Description : + * @version : 1.0 + * @Date : 2021-08-20 16:44:21 + * @LastAuthor : LQ + * @lastTime : 2021-08-20 17:19:28 + * @FilePath : /u-view2.0/uview-ui/libs/config/props/scrollList.js + */ +export default { + // scrollList + scrollList: { + indicatorWidth: 50, + indicatorBarWidth: 20, + indicator: true, + indicatorColor: '#f2f2f2', + indicatorActiveColor: '#3c9cff', + indicatorStyle: '' + } +} diff --git a/uni_modules/uview-ui/libs/config/props/search.js b/uni_modules/uview-ui/libs/config/props/search.js new file mode 100644 index 0000000..2699954 --- /dev/null +++ b/uni_modules/uview-ui/libs/config/props/search.js @@ -0,0 +1,37 @@ +/* + * @Author : LQ + * @Description : + * @version : 1.0 + * @Date : 2021-08-20 16:44:21 + * @LastAuthor : LQ + * @lastTime : 2021-08-20 17:19:45 + * @FilePath : /u-view2.0/uview-ui/libs/config/props/search.js + */ +export default { + // search + search: { + shape: 'round', + bgColor: '#f2f2f2', + placeholder: '请输入关键字', + clearabled: true, + focus: false, + showAction: true, + actionStyle: () => ({}), + actionText: '搜索', + inputAlign: 'left', + inputStyle: () => ({}), + disabled: false, + borderColor: 'transparent', + searchIconColor: '#909399', + searchIconSize: 22, + color: '#606266', + placeholderColor: '#909399', + searchIcon: 'search', + margin: '0', + animation: false, + value: '', + maxlength: '-1', + height: 32, + label: null + } +} diff --git a/uni_modules/uview-ui/libs/config/props/section.js b/uni_modules/uview-ui/libs/config/props/section.js new file mode 100644 index 0000000..f432648 --- /dev/null +++ b/uni_modules/uview-ui/libs/config/props/section.js @@ -0,0 +1,24 @@ +/* + * @Author : LQ + * @Description : + * @version : 1.0 + * @Date : 2021-08-20 16:44:21 + * @LastAuthor : LQ + * @lastTime : 2021-08-20 17:07:33 + * @FilePath : /u-view2.0/uview-ui/libs/config/props/section.js + */ +export default { + // u-section组件 + section: { + title: '', + subTitle: '更多', + right: true, + fontSize: 15, + bold: true, + color: '#303133', + subColor: '#909399', + showLine: true, + lineColor: '', + arrow: true + } +} diff --git a/uni_modules/uview-ui/libs/config/props/skeleton.js b/uni_modules/uview-ui/libs/config/props/skeleton.js new file mode 100644 index 0000000..83b777d --- /dev/null +++ b/uni_modules/uview-ui/libs/config/props/skeleton.js @@ -0,0 +1,25 @@ +/* + * @Author : LQ + * @Description : + * @version : 1.0 + * @Date : 2021-08-20 16:44:21 + * @LastAuthor : LQ + * @lastTime : 2021-08-20 17:20:14 + * @FilePath : /u-view2.0/uview-ui/libs/config/props/skeleton.js + */ +export default { + // skeleton + skeleton: { + loading: true, + animate: true, + rows: 0, + rowsWidth: '100%', + rowsHeight: 18, + title: true, + titleWidth: '50%', + titleHeight: 18, + avatar: false, + avatarSize: 32, + avatarShape: 'circle' + } +} diff --git a/uni_modules/uview-ui/libs/config/props/slider.js b/uni_modules/uview-ui/libs/config/props/slider.js new file mode 100644 index 0000000..50cc37f --- /dev/null +++ b/uni_modules/uview-ui/libs/config/props/slider.js @@ -0,0 +1,25 @@ +/* + * @Author : LQ + * @Description : + * @version : 1.0 + * @Date : 2021-08-20 16:44:21 + * @LastAuthor : LQ + * @lastTime : 2021-08-20 17:08:25 + * @FilePath : /u-view2.0/uview-ui/libs/config/props/slider.js + */ +export default { + // slider组件 + slider: { + value: 0, + blockSize: 18, + min: 0, + max: 100, + step: 1, + activeColor: '#2979ff', + inactiveColor: '#c0c4cc', + blockColor: '#ffffff', + showValue: false, + disabled:false, + blockStyle: () => {} + } +} diff --git a/uni_modules/uview-ui/libs/config/props/statusBar.js b/uni_modules/uview-ui/libs/config/props/statusBar.js new file mode 100644 index 0000000..d237a83 --- /dev/null +++ b/uni_modules/uview-ui/libs/config/props/statusBar.js @@ -0,0 +1,15 @@ +/* + * @Author : LQ + * @Description : + * @version : 1.0 + * @Date : 2021-08-20 16:44:21 + * @LastAuthor : LQ + * @lastTime : 2021-08-20 17:20:39 + * @FilePath : /u-view2.0/uview-ui/libs/config/props/statusBar.js + */ +export default { + // statusBar + statusBar: { + bgColor: 'transparent' + } +} diff --git a/uni_modules/uview-ui/libs/config/props/steps.js b/uni_modules/uview-ui/libs/config/props/steps.js new file mode 100644 index 0000000..881c39e --- /dev/null +++ b/uni_modules/uview-ui/libs/config/props/steps.js @@ -0,0 +1,21 @@ +/* + * @Author : LQ + * @Description : + * @version : 1.0 + * @Date : 2021-08-20 16:44:21 + * @LastAuthor : LQ + * @lastTime : 2021-08-20 17:12:37 + * @FilePath : /u-view2.0/uview-ui/libs/config/props/steps.js + */ +export default { + // steps组件 + steps: { + direction: 'row', + current: 0, + activeColor: '#3c9cff', + inactiveColor: '#969799', + activeIcon: '', + inactiveIcon: '', + dot: false + } +} diff --git a/uni_modules/uview-ui/libs/config/props/stepsItem.js b/uni_modules/uview-ui/libs/config/props/stepsItem.js new file mode 100644 index 0000000..5dba8f4 --- /dev/null +++ b/uni_modules/uview-ui/libs/config/props/stepsItem.js @@ -0,0 +1,18 @@ +/* + * @Author : LQ + * @Description : + * @version : 1.0 + * @Date : 2021-08-20 16:44:21 + * @LastAuthor : LQ + * @lastTime : 2021-08-20 17:12:55 + * @FilePath : /u-view2.0/uview-ui/libs/config/props/stepsItem.js + */ +export default { + // steps-item组件 + stepsItem: { + title: '', + desc: '', + iconSize: 17, + error: false + } +} diff --git a/uni_modules/uview-ui/libs/config/props/sticky.js b/uni_modules/uview-ui/libs/config/props/sticky.js new file mode 100644 index 0000000..b034604 --- /dev/null +++ b/uni_modules/uview-ui/libs/config/props/sticky.js @@ -0,0 +1,20 @@ +/* + * @Author : LQ + * @Description : + * @version : 1.0 + * @Date : 2021-08-20 16:44:21 + * @LastAuthor : LQ + * @lastTime : 2021-08-20 17:01:30 + * @FilePath : /u-view2.0/uview-ui/libs/config/props/sticky.js + */ +export default { + // sticky组件 + sticky: { + offsetTop: 0, + customNavHeight: 0, + disabled: false, + bgColor: 'transparent', + zIndex: '', + index: '' + } +} diff --git a/uni_modules/uview-ui/libs/config/props/subsection.js b/uni_modules/uview-ui/libs/config/props/subsection.js new file mode 100644 index 0000000..9a165ff --- /dev/null +++ b/uni_modules/uview-ui/libs/config/props/subsection.js @@ -0,0 +1,23 @@ +/* + * @Author : LQ + * @Description : + * @version : 1.0 + * @Date : 2021-08-20 16:44:21 + * @LastAuthor : LQ + * @lastTime : 2021-08-20 17:12:20 + * @FilePath : /u-view2.0/uview-ui/libs/config/props/subsection.js + */ +export default { + // subsection组件 + subsection: { + list: [], + current: 0, + activeColor: '#3c9cff', + inactiveColor: '#303133', + mode: 'button', + fontSize: 12, + bold: true, + bgColor: '#eeeeef', + keyName: 'name' + } +} diff --git a/uni_modules/uview-ui/libs/config/props/swipeAction.js b/uni_modules/uview-ui/libs/config/props/swipeAction.js new file mode 100644 index 0000000..25051b8 --- /dev/null +++ b/uni_modules/uview-ui/libs/config/props/swipeAction.js @@ -0,0 +1,15 @@ +/* + * @Author : LQ + * @Description : + * @version : 1.0 + * @Date : 2021-08-20 16:44:21 + * @LastAuthor : LQ + * @lastTime : 2021-08-20 17:00:42 + * @FilePath : /u-view2.0/uview-ui/libs/config/props/swipeAction.js + */ +export default { + // swipe-action组件 + swipeAction: { + autoClose: true + } +} diff --git a/uni_modules/uview-ui/libs/config/props/swipeActionItem.js b/uni_modules/uview-ui/libs/config/props/swipeActionItem.js new file mode 100644 index 0000000..40ef27c --- /dev/null +++ b/uni_modules/uview-ui/libs/config/props/swipeActionItem.js @@ -0,0 +1,21 @@ +/* + * @Author : LQ + * @Description : + * @version : 1.0 + * @Date : 2021-08-20 16:44:21 + * @LastAuthor : LQ + * @lastTime : 2021-08-20 17:01:13 + * @FilePath : /u-view2.0/uview-ui/libs/config/props/swipeActionItem.js + */ +export default { + // swipeActionItem 组件 + swipeActionItem: { + show: false, + name: '', + disabled: false, + threshold: 20, + autoClose: true, + options: [], + duration: 300 + } +} diff --git a/uni_modules/uview-ui/libs/config/props/swiper.js b/uni_modules/uview-ui/libs/config/props/swiper.js new file mode 100644 index 0000000..0e6a3b7 --- /dev/null +++ b/uni_modules/uview-ui/libs/config/props/swiper.js @@ -0,0 +1,39 @@ +/* + * @Author : LQ + * @Description : + * @version : 1.0 + * @Date : 2021-08-20 16:44:21 + * @LastAuthor : LQ + * @lastTime : 2021-08-20 17:21:38 + * @FilePath : /u-view2.0/uview-ui/libs/config/props/swiper.js + */ +export default { + // swiper 组件 + swiper: { + list: () => [], + indicator: false, + indicatorActiveColor: '#FFFFFF', + indicatorInactiveColor: 'rgba(255, 255, 255, 0.35)', + indicatorStyle: '', + indicatorMode: 'line', + autoplay: true, + current: 0, + currentItemId: '', + interval: 3000, + duration: 300, + circular: false, + previousMargin: 0, + nextMargin: 0, + acceleration: false, + displayMultipleItems: 1, + easingFunction: 'default', + keyName: 'url', + imgMode: 'aspectFill', + height: 130, + bgColor: '#f3f4f6', + radius: 4, + loading: false, + showTitle: false + } + +} diff --git a/uni_modules/uview-ui/libs/config/props/swipterIndicator.js b/uni_modules/uview-ui/libs/config/props/swipterIndicator.js new file mode 100644 index 0000000..4b59e6e --- /dev/null +++ b/uni_modules/uview-ui/libs/config/props/swipterIndicator.js @@ -0,0 +1,19 @@ +/* + * @Author : LQ + * @Description : + * @version : 1.0 + * @Date : 2021-08-20 16:44:21 + * @LastAuthor : LQ + * @lastTime : 2021-08-20 17:22:07 + * @FilePath : /u-view2.0/uview-ui/libs/config/props/swiperIndicator.js + */ +export default { + // swiperIndicator 组件 + swiperIndicator: { + length: 0, + current: 0, + indicatorActiveColor: '', + indicatorInactiveColor: '', + indicatorMode: 'line' + } +} diff --git a/uni_modules/uview-ui/libs/config/props/switch.js b/uni_modules/uview-ui/libs/config/props/switch.js new file mode 100644 index 0000000..e6400b4 --- /dev/null +++ b/uni_modules/uview-ui/libs/config/props/switch.js @@ -0,0 +1,24 @@ +/* + * @Author : LQ + * @Description : + * @version : 1.0 + * @Date : 2021-08-20 16:44:21 + * @LastAuthor : LQ + * @lastTime : 2021-08-20 17:22:24 + * @FilePath : /u-view2.0/uview-ui/libs/config/props/switch.js + */ +export default { + // switch + switch: { + loading: false, + disabled: false, + size: 25, + activeColor: '#2979ff', + inactiveColor: '#ffffff', + value: false, + activeValue: true, + inactiveValue: false, + asyncChange: false, + space: 0 + } +} diff --git a/uni_modules/uview-ui/libs/config/props/tabbar.js b/uni_modules/uview-ui/libs/config/props/tabbar.js new file mode 100644 index 0000000..187112d --- /dev/null +++ b/uni_modules/uview-ui/libs/config/props/tabbar.js @@ -0,0 +1,22 @@ +/* + * @Author : LQ + * @Description : + * @version : 1.0 + * @Date : 2021-08-20 16:44:21 + * @LastAuthor : LQ + * @lastTime : 2021-08-20 17:22:40 + * @FilePath : /u-view2.0/uview-ui/libs/config/props/tabbar.js + */ +export default { + // tabbar + tabbar: { + value: null, + safeAreaInsetBottom: true, + border: true, + zIndex: 1, + activeColor: '#1989fa', + inactiveColor: '#7d7e80', + fixed: true, + placeholder: true + } +} diff --git a/uni_modules/uview-ui/libs/config/props/tabbarItem.js b/uni_modules/uview-ui/libs/config/props/tabbarItem.js new file mode 100644 index 0000000..d036ce5 --- /dev/null +++ b/uni_modules/uview-ui/libs/config/props/tabbarItem.js @@ -0,0 +1,20 @@ +/* + * @Author : LQ + * @Description : + * @version : 1.0 + * @Date : 2021-08-20 16:44:21 + * @LastAuthor : LQ + * @lastTime : 2021-08-20 17:22:55 + * @FilePath : /u-view2.0/uview-ui/libs/config/props/tabbarItem.js + */ +export default { + // + tabbarItem: { + name: null, + icon: '', + badge: null, + dot: false, + text: '', + badgeStyle: 'top: 6px;right:2px;' + } +} diff --git a/uni_modules/uview-ui/libs/config/props/tabs.js b/uni_modules/uview-ui/libs/config/props/tabs.js new file mode 100644 index 0000000..81c794a --- /dev/null +++ b/uni_modules/uview-ui/libs/config/props/tabs.js @@ -0,0 +1,32 @@ +/* + * @Author : LQ + * @Description : + * @version : 1.0 + * @Date : 2021-08-20 16:44:21 + * @LastAuthor : LQ + * @lastTime : 2021-08-20 17:23:14 + * @FilePath : /u-view2.0/uview-ui/libs/config/props/tabs.js + */ +export default { + // + tabs: { + duration: 300, + list: () => [], + lineColor: '#3c9cff', + activeStyle: () => ({ + color: '#303133' + }), + inactiveStyle: () => ({ + color: '#606266' + }), + lineWidth: 20, + lineHeight: 3, + lineBgSize: 'cover', + itemStyle: () => ({ + height: '44px' + }), + scrollable: true, + current: 0, + keyName: 'name' + } +} diff --git a/uni_modules/uview-ui/libs/config/props/tag.js b/uni_modules/uview-ui/libs/config/props/tag.js new file mode 100644 index 0000000..125ce94 --- /dev/null +++ b/uni_modules/uview-ui/libs/config/props/tag.js @@ -0,0 +1,29 @@ +/* + * @Author : LQ + * @Description : + * @version : 1.0 + * @Date : 2021-08-20 16:44:21 + * @LastAuthor : LQ + * @lastTime : 2021-08-20 17:23:37 + * @FilePath : /u-view2.0/uview-ui/libs/config/props/tag.js + */ +export default { + // tag 组件 + tag: { + type: 'primary', + disabled: false, + size: 'medium', + shape: 'square', + text: '', + bgColor: '', + color: '', + borderColor: '', + closeColor: '#C6C7CB', + name: '', + plainFill: false, + plain: false, + closable: false, + show: true, + icon: '' + } +} diff --git a/uni_modules/uview-ui/libs/config/props/text.js b/uni_modules/uview-ui/libs/config/props/text.js new file mode 100644 index 0000000..7e73606 --- /dev/null +++ b/uni_modules/uview-ui/libs/config/props/text.js @@ -0,0 +1,38 @@ +/* + * @Author : LQ + * @Description : + * @version : 1.0 + * @Date : 2021-08-20 16:44:21 + * @LastAuthor : LQ + * @lastTime : 2021-08-20 17:23:58 + * @FilePath : /u-view2.0/uview-ui/libs/config/props/text.js + */ +export default { + // text 组件 + text: { + type: '', + show: true, + text: '', + prefixIcon: '', + suffixIcon: '', + mode: '', + href: '', + format: '', + call: false, + openType: '', + bold: false, + block: false, + lines: '', + color: '#303133', + size: 15, + iconStyle: () => ({ + fontSize: '15px' + }), + decoration: 'none', + margin: 0, + lineHeight: '', + align: 'left', + wordWrap: 'normal' + } + +} diff --git a/uni_modules/uview-ui/libs/config/props/textarea.js b/uni_modules/uview-ui/libs/config/props/textarea.js new file mode 100644 index 0000000..44519f9 --- /dev/null +++ b/uni_modules/uview-ui/libs/config/props/textarea.js @@ -0,0 +1,36 @@ +/* + * @Author : LQ + * @Description : + * @version : 1.0 + * @Date : 2021-08-20 16:44:21 + * @LastAuthor : LQ + * @lastTime : 2021-08-20 17:24:32 + * @FilePath : /u-view2.0/uview-ui/libs/config/props/textarea.js + */ +export default { + // textarea 组件 + textarea: { + value: '', + placeholder: '', + placeholderClass: 'textarea-placeholder', + placeholderStyle: 'color: #c0c4cc', + height: 70, + confirmType: 'done', + disabled: false, + count: false, + focus: false, + autoHeight: false, + fixed: false, + cursorSpacing: 0, + cursor: '', + showConfirmBar: true, + selectionStart: -1, + selectionEnd: -1, + adjustPosition: true, + disableDefaultPadding: false, + holdKeyboard: false, + maxlength: 140, + border: 'surround', + formatter: null + } +} diff --git a/uni_modules/uview-ui/libs/config/props/toast.js b/uni_modules/uview-ui/libs/config/props/toast.js new file mode 100644 index 0000000..a50134b --- /dev/null +++ b/uni_modules/uview-ui/libs/config/props/toast.js @@ -0,0 +1,30 @@ +/* + * @Author : LQ + * @Description : + * @version : 1.0 + * @Date : 2021-08-20 16:44:21 + * @LastAuthor : LQ + * @lastTime : 2021-08-20 17:07:07 + * @FilePath : /u-view2.0/uview-ui/libs/config/props/toast.js + */ +export default { + // toast组件 + toast: { + zIndex: 10090, + loading: false, + text: '', + icon: '', + type: '', + loadingMode: '', + show: '', + overlay: false, + position: 'center', + params: () => {}, + duration: 2000, + isTab: false, + url: '', + callback: null, + back: false + } + +} diff --git a/uni_modules/uview-ui/libs/config/props/toolbar.js b/uni_modules/uview-ui/libs/config/props/toolbar.js new file mode 100644 index 0000000..3289967 --- /dev/null +++ b/uni_modules/uview-ui/libs/config/props/toolbar.js @@ -0,0 +1,21 @@ +/* + * @Author : LQ + * @Description : + * @version : 1.0 + * @Date : 2021-08-20 16:44:21 + * @LastAuthor : LQ + * @lastTime : 2021-08-20 17:24:55 + * @FilePath : /u-view2.0/uview-ui/libs/config/props/toolbar.js + */ +export default { + // toolbar 组件 + toolbar: { + show: true, + cancelText: '取消', + confirmText: '确认', + cancelColor: '#909193', + confirmColor: '#3c9cff', + title: '' + } + +} diff --git a/uni_modules/uview-ui/libs/config/props/tooltip.js b/uni_modules/uview-ui/libs/config/props/tooltip.js new file mode 100644 index 0000000..115e030 --- /dev/null +++ b/uni_modules/uview-ui/libs/config/props/tooltip.js @@ -0,0 +1,25 @@ +/* + * @Author : LQ + * @Description : + * @version : 1.0 + * @Date : 2021-08-20 16:44:21 + * @LastAuthor : LQ + * @lastTime : 2021-08-20 17:25:14 + * @FilePath : /u-view2.0/uview-ui/libs/config/props/tooltip.js + */ +export default { + // tooltip 组件 + tooltip: { + text: '', + copyText: '', + size: 14, + color: '#606266', + bgColor: 'transparent', + direction: 'top', + zIndex: 10071, + showCopy: true, + buttons: () => [], + overlay: true, + showToast: true + } +} diff --git a/uni_modules/uview-ui/libs/config/props/transition.js b/uni_modules/uview-ui/libs/config/props/transition.js new file mode 100644 index 0000000..0fad118 --- /dev/null +++ b/uni_modules/uview-ui/libs/config/props/transition.js @@ -0,0 +1,18 @@ +/* + * @Author : LQ + * @Description : + * @version : 1.0 + * @Date : 2021-08-20 16:44:21 + * @LastAuthor : LQ + * @lastTime : 2021-08-20 16:59:00 + * @FilePath : /u-view2.0/uview-ui/libs/config/props/transition.js + */ +export default { + // transition动画组件的props + transition: { + show: false, + mode: 'fade', + duration: '300', + timingFunction: 'ease-out' + } +} diff --git a/uni_modules/uview-ui/libs/config/props/upload.js b/uni_modules/uview-ui/libs/config/props/upload.js new file mode 100644 index 0000000..fc7ca92 --- /dev/null +++ b/uni_modules/uview-ui/libs/config/props/upload.js @@ -0,0 +1,36 @@ +/* + * @Author : LQ + * @Description : + * @version : 1.0 + * @Date : 2021-08-20 16:44:21 + * @LastAuthor : LQ + * @lastTime : 2021-08-20 17:09:50 + * @FilePath : /u-view2.0/uview-ui/libs/config/props/upload.js + */ +export default { + // upload组件 + upload: { + accept: 'image', + capture: () => ['album', 'camera'], + compressed: true, + camera: 'back', + maxDuration: 60, + uploadIcon: 'camera-fill', + uploadIconColor: '#D3D4D6', + useBeforeRead: false, + previewFullImage: true, + maxCount: 52, + disabled: false, + imageMode: 'aspectFill', + name: '', + sizeType: () => ['original', 'compressed'], + multiple: false, + deletable: true, + maxSize: Number.MAX_VALUE, + fileList: () => [], + uploadText: '', + width: 80, + height: 80, + previewImage: true + } +} diff --git a/uni_modules/uview-ui/libs/config/zIndex.js b/uni_modules/uview-ui/libs/config/zIndex.js new file mode 100644 index 0000000..5fc3682 --- /dev/null +++ b/uni_modules/uview-ui/libs/config/zIndex.js @@ -0,0 +1,20 @@ +// uniapp在H5中各API的z-index值如下: +/** + * actionsheet: 999 + * modal: 999 + * navigate: 998 + * tabbar: 998 + * toast: 999 + */ + +export default { + toast: 10090, + noNetwork: 10080, + // popup包含popup,actionsheet,keyboard,picker的值 + popup: 10075, + mask: 10070, + navbar: 980, + topTips: 975, + sticky: 970, + indexListSticky: 965 +} diff --git a/uni_modules/uview-ui/libs/css/color.scss b/uni_modules/uview-ui/libs/css/color.scss new file mode 100644 index 0000000..3237ba4 --- /dev/null +++ b/uni_modules/uview-ui/libs/css/color.scss @@ -0,0 +1,155 @@ +.u-primary-light { + color: $u-primary-light; +} + +.u-warning-light { + color: $u-warning-light; +} + +.u-success-light { + color: $u-success-light; +} + +.u-error-light { + color: $u-error-light; +} + +.u-info-light { + color: $u-info-light; +} + +.u-primary-light-bg { + background-color: $u-primary-light; +} + +.u-warning-light-bg { + background-color: $u-warning-light; +} + +.u-success-light-bg { + background-color: $u-success-light; +} + +.u-error-light-bg { + background-color: $u-error-light; +} + +.u-info-light-bg { + background-color: $u-info-light; +} + +.u-primary-dark { + color: $u-primary-dark; +} + +.u-warning-dark { + color: $u-warning-dark; +} + +.u-success-dark { + color: $u-success-dark; +} + +.u-error-dark { + color: $u-error-dark; +} + +.u-info-dark { + color: $u-info-dark; +} + +.u-primary-dark-bg { + background-color: $u-primary-dark; +} + +.u-warning-dark-bg { + background-color: $u-warning-dark; +} + +.u-success-dark-bg { + background-color: $u-success-dark; +} + +.u-error-dark-bg { + background-color: $u-error-dark; +} + +.u-info-dark-bg { + background-color: $u-info-dark; +} + +.u-primary-disabled { + color: $u-primary-disabled; +} + +.u-warning-disabled { + color: $u-warning-disabled; +} + +.u-success-disabled { + color: $u-success-disabled; +} + +.u-error-disabled { + color: $u-error-disabled; +} + +.u-info-disabled { + color: $u-info-disabled; +} + +.u-primary { + color: $u-primary; +} + +.u-warning { + color: $u-warning; +} + +.u-success { + color: $u-success; +} + +.u-error { + color: $u-error; +} + +.u-info { + color: $u-info; +} + +.u-primary-bg { + background-color: $u-primary; +} + +.u-warning-bg { + background-color: $u-warning; +} + +.u-success-bg { + background-color: $u-success; +} + +.u-error-bg { + background-color: $u-error; +} + +.u-info-bg { + background-color: $u-info; +} + +.u-main-color { + color: $u-main-color; +} + +.u-content-color { + color: $u-content-color; +} + +.u-tips-color { + color: $u-tips-color; +} + +.u-light-color { + color: $u-light-color; +} diff --git a/uni_modules/uview-ui/libs/css/common.scss b/uni_modules/uview-ui/libs/css/common.scss new file mode 100644 index 0000000..11f1e53 --- /dev/null +++ b/uni_modules/uview-ui/libs/css/common.scss @@ -0,0 +1,97 @@ +// 超出行数,自动显示行尾省略号,最多5行 +// 来自uView的温馨提示:当您在控制台看到此报错,说明需要在App.vue的style标签加上【lang="scss"】 +@for $i from 1 through 5 { + .u-line-#{$i} { + /* #ifdef APP-NVUE */ + // nvue下,可以直接使用lines属性,这是weex特有样式 + lines: $i; + text-overflow: ellipsis; + overflow: hidden; + flex: 1; + /* #endif */ + + /* #ifndef APP-NVUE */ + // vue下,单行和多行显示省略号需要单独处理 + @if $i == '1' { + overflow: hidden; + white-space: nowrap; + text-overflow: ellipsis; + } @else { + display: -webkit-box!important; + overflow: hidden; + text-overflow: ellipsis; + word-break: break-all; + -webkit-line-clamp: $i; + -webkit-box-orient: vertical!important; + } + /* #endif */ + } +} + + +// 此处加上!important并非随意乱用,而是因为目前*.nvue页面编译到H5时, +// App.vue的样式会被uni-app的view元素的自带border属性覆盖,导致无效 +// 综上,这是uni-app的缺陷导致我们为了多端兼容,而必须要加上!important +// 移动端兼容性较好,直接使用0.5px去实现细边框,不使用伪元素形式实现 +.u-border { + border-width: 0.5px!important; + border-color: $u-border-color!important; + border-style: solid; +} + +.u-border-top { + border-top-width: 0.5px!important; + border-color: $u-border-color!important; + border-top-style: solid; +} + +.u-border-left { + border-left-width: 0.5px!important; + border-color: $u-border-color!important; + border-left-style: solid; +} + +.u-border-right { + border-right-width: 0.5px!important; + border-color: $u-border-color!important; + border-right-style: solid; +} + +.u-border-bottom { + border-bottom-width: 0.5px!important; + border-color: $u-border-color!important; + border-bottom-style: solid; +} + +.u-border-top-bottom { + border-top-width: 0.5px!important; + border-bottom-width: 0.5px!important; + border-color: $u-border-color!important; + border-top-style: solid; + border-bottom-style: solid; +} + +// 去除button的所有默认样式,让其表现跟普通的view、text元素一样 +.u-reset-button { + padding: 0; + background-color: transparent; + /* #ifndef APP-PLUS */ + font-size: inherit; + line-height: inherit; + color: inherit; + /* #endif */ + /* #ifdef APP-NVUE */ + border-width: 0; + /* #endif */ +} + +/* #ifndef APP-NVUE */ +.u-reset-button::after { + border: none; +} +/* #endif */ + +.u-hover-class { + opacity: 0.7; +} + diff --git a/uni_modules/uview-ui/libs/css/components.scss b/uni_modules/uview-ui/libs/css/components.scss new file mode 100644 index 0000000..766679e --- /dev/null +++ b/uni_modules/uview-ui/libs/css/components.scss @@ -0,0 +1,15 @@ +@import "./mixin.scss"; + +/* #ifndef APP-NVUE */ +// 由于uView是基于nvue环境进行开发的,此环境中普通元素默认为flex-direction: column; +// 所以在非nvue中,需要对元素进行重置为flex-direction: column; 否则可能会表现异常 +view, scroll-view, swiper-item { + display: flex; + flex-direction: column; + flex-shrink: 0; + flex-grow: 0; + flex-basis: auto; + align-items: stretch; + align-content: flex-start; +} +/* #endif */ diff --git a/uni_modules/uview-ui/libs/css/flex.scss b/uni_modules/uview-ui/libs/css/flex.scss new file mode 100644 index 0000000..6d61be9 --- /dev/null +++ b/uni_modules/uview-ui/libs/css/flex.scss @@ -0,0 +1,257 @@ +// .u-flex { +// @include vue-flex(row); +// } + +// .u-flex-x { +// @include vue-flex(row); +// } + +// .u-flex-y { +// @include vue-flex(column); +// } + +// .u-flex-xy-center { +// @include vue-flex(row); +// justify-content: center; +// align-items: center; +// } + +// .u-flex-x-center { +// @include vue-flex(row); +// justify-content: center; +// } + +// .u-flex-y-center { +// @include vue-flex(column); +// justify-content: center; +// } + + +// flex布局 +.u-flex, +.u-flex-row, +.u-flex-x { + @include flex; +} + +.u-flex-y, +.u-flex-column { + @include flex(column); +} + +.u-flex-x-center { + @include flex; + justify-content: center; +} + +.u-flex-xy-center { + @include flex; + justify-content: center; + align-items: center; +} + +.u-flex-y-center { + @include flex; + align-items: center; +} + +.u-flex-x-left { + @include flex; +} + +.u-flex-x-reverse, +.u-flex-row-reverse { + flex-direction: row-reverse; +} + +.u-flex-y-reverse, +.u-flex-column-reverse { + flex-direction: column-reverse; +} + +/* #ifndef APP-NVUE */ +// 此处为vue版本的简写,因为nvue不支持同时作用于两个类名的样式写法 +// nvue下只能写成class="u-flex-x u-flex-x-reverse的形式" +.u-flex.u-flex-reverse, +.u-flex-row.u-flex-reverse, +.u-flex-x.u-flex-reverse { + flex-direction: row-reverse; +} + +.u-flex-column.u-flex-reverse, +.u-flex-y.u-flex-reverse { + flex-direction: column-reverse; +} + +// 自动伸缩 +.u-flex-fill { + flex: 1 1 auto +} + +// 边界自动伸缩 +.u-margin-top-auto, +.u-m-t-auto { + margin-top: auto !important +} + +.u-margin-right-auto, +.u-m-r-auto { + margin-right: auto !important +} + +.u-margin-bottom-auto, +.u-m-b-auto { + margin-bottom: auto !important +} + +.u-margin-left-auto, +.u-m-l-auto { + margin-left: auto !important +} + +.u-margin-center-auto, +.u-m-c-auto { + margin-left: auto !important; + margin-right: auto !important +} + +.u-margin-middle-auto, +.u-m-m-auto { + margin-top: auto !important; + margin-bottom: auto !important +} +/* #endif */ + +// 换行 +.u-flex-wrap { + flex-wrap: wrap; +} + +// 反向换行 +.u-flex-wrap-reverse { + flex-wrap: wrap-reverse; +} + +// 主轴起点对齐 +.u-flex-start { + justify-content: flex-start +} + +// 主轴中间对齐 +.u-flex-center { + justify-content: center +} + +// 主轴终点对齐 +.u-flex-end { + justify-content: flex-end +} + +// 主轴等比间距 +.u-flex-between { + justify-content: space-between +} + +// 主轴均分间距 +.u-flex-around { + justify-content: space-around +} + +// 交叉轴起点对齐 +.u-flex-items-start { + align-items: flex-start +} + +// 交叉轴中间对齐 +.u-flex-items-center { + align-items: center +} + +// 交叉轴终点对齐 +.u-flex-items-end { + align-items: flex-end +} + +// 交叉轴第一行文字基线对齐 +.u-flex-items-baseline { + align-items: baseline +} + +// 交叉轴方向拉伸对齐 +.u-flex-items-stretch { + align-items: stretch +} + + +// 以下属于项目(子元素)的类 + +// 子元素交叉轴起点对齐 +.u-flex-self-start { + align-self: flex-start +} + +// 子元素交叉轴居中对齐 +.u-flex-self-center { + align-self: center +} + +// 子元素交叉轴终点对齐 +.u-flex-self-end { + align-self: flex-end +} + +// 子元素交叉轴第一行文字基线对齐 +.u-flex-self-baseline { + align-self: baseline +} + +// 子元素交叉轴方向拉伸对齐 +.u-flex-self-stretch { + align-self: stretch +} + +// 多轴交叉时的对齐方式 + +// 起点对齐 +.u-flex-content-start { + align-content: flex-start +} + +// 居中对齐 +.u-flex-content-center { + align-content: center +} + +// 终点对齐 +.u-flex-content-end { + align-content: flex-end +} + +// 两端对齐 +.u-flex-content-between { + align-content: space-between +} + +// 均分间距 +.u-flex-content-around { + align-content: space-around +} + +// 全部居中对齐 +.u-flex-middle { + justify-content: center; + align-items: center; + align-self: center; + align-content: center +} + +// 是否可以放大 +.u-flex-grow { + flex-grow: 1 +} + +// 是否可以缩小 +.u-flex-shrink { + flex-shrink: 1 +} + diff --git a/uni_modules/uview-ui/libs/css/h5.scss b/uni_modules/uview-ui/libs/css/h5.scss new file mode 100644 index 0000000..e69de29 diff --git a/uni_modules/uview-ui/libs/css/mixin.scss b/uni_modules/uview-ui/libs/css/mixin.scss new file mode 100644 index 0000000..7e35b3b --- /dev/null +++ b/uni_modules/uview-ui/libs/css/mixin.scss @@ -0,0 +1,8 @@ +// 通过scss的mixin功能,把原来需要写4行的css,变成一行 +// 目的是保持代码干净整洁,不至于在nvue下,到处都要写display:flex的条件编译 +@mixin flex($direction: row) { + /* #ifndef APP-NVUE */ + display: flex; + /* #endif */ + flex-direction: $direction; +} diff --git a/uni_modules/uview-ui/libs/css/mp.scss b/uni_modules/uview-ui/libs/css/mp.scss new file mode 100644 index 0000000..e69de29 diff --git a/uni_modules/uview-ui/libs/css/nvue.scss b/uni_modules/uview-ui/libs/css/nvue.scss new file mode 100644 index 0000000..e69de29 diff --git a/uni_modules/uview-ui/libs/css/vue.scss b/uni_modules/uview-ui/libs/css/vue.scss new file mode 100644 index 0000000..3ae4d29 --- /dev/null +++ b/uni_modules/uview-ui/libs/css/vue.scss @@ -0,0 +1,27 @@ +// 历遍生成4个方向的底部安全区 +@each $d in top, right, bottom, left { + .u-safe-area-inset-#{$d} { + padding-#{$d}: 0; + padding-#{$d}: constant(safe-area-inset-#{$d}); + padding-#{$d}: env(safe-area-inset-#{$d}); + } +} + +//提升H5端uni.toast()的层级,避免被uView的modal等遮盖 +/* #ifdef H5 */ +uni-toast { + z-index: 10090; +} +uni-toast .uni-toast { + z-index: 10090; +} +/* #endif */ + +// 隐藏scroll-view的滚动条 +::-webkit-scrollbar { + display: none; + width: 0 !important; + height: 0 !important; + -webkit-appearance: none; + background: transparent; +} \ No newline at end of file diff --git a/uni_modules/uview-ui/libs/function/colorGradient.js b/uni_modules/uview-ui/libs/function/colorGradient.js new file mode 100644 index 0000000..9727732 --- /dev/null +++ b/uni_modules/uview-ui/libs/function/colorGradient.js @@ -0,0 +1,134 @@ +/** + * 求两个颜色之间的渐变值 + * @param {string} startColor 开始的颜色 + * @param {string} endColor 结束的颜色 + * @param {number} step 颜色等分的份额 + * */ +function colorGradient(startColor = 'rgb(0, 0, 0)', endColor = 'rgb(255, 255, 255)', step = 10) { + const startRGB = hexToRgb(startColor, false) // 转换为rgb数组模式 + const startR = startRGB[0] + const startG = startRGB[1] + const startB = startRGB[2] + + const endRGB = hexToRgb(endColor, false) + const endR = endRGB[0] + const endG = endRGB[1] + const endB = endRGB[2] + + const sR = (endR - startR) / step // 总差值 + const sG = (endG - startG) / step + const sB = (endB - startB) / step + const colorArr = [] + for (let i = 0; i < step; i++) { + // 计算每一步的hex值 + let hex = rgbToHex(`rgb(${Math.round((sR * i + startR))},${Math.round((sG * i + startG))},${Math.round((sB + * i + startB))})`) + // 确保第一个颜色值为startColor的值 + if (i === 0) hex = rgbToHex(startColor) + // 确保最后一个颜色值为endColor的值 + if (i === step - 1) hex = rgbToHex(endColor) + colorArr.push(hex) + } + return colorArr +} + +// 将hex表示方式转换为rgb表示方式(这里返回rgb数组模式) +function hexToRgb(sColor, str = true) { + const reg = /^#([0-9a-fA-f]{3}|[0-9a-fA-f]{6})$/ + sColor = String(sColor).toLowerCase() + if (sColor && reg.test(sColor)) { + if (sColor.length === 4) { + let sColorNew = '#' + for (let i = 1; i < 4; i += 1) { + sColorNew += sColor.slice(i, i + 1).concat(sColor.slice(i, i + 1)) + } + sColor = sColorNew + } + // 处理六位的颜色值 + const sColorChange = [] + for (let i = 1; i < 7; i += 2) { + sColorChange.push(parseInt(`0x${sColor.slice(i, i + 2)}`)) + } + if (!str) { + return sColorChange + } + return `rgb(${sColorChange[0]},${sColorChange[1]},${sColorChange[2]})` + } if (/^(rgb|RGB)/.test(sColor)) { + const arr = sColor.replace(/(?:\(|\)|rgb|RGB)*/g, '').split(',') + return arr.map((val) => Number(val)) + } + return sColor +} + +// 将rgb表示方式转换为hex表示方式 +function rgbToHex(rgb) { + const _this = rgb + const reg = /^#([0-9a-fA-f]{3}|[0-9a-fA-f]{6})$/ + if (/^(rgb|RGB)/.test(_this)) { + const aColor = _this.replace(/(?:\(|\)|rgb|RGB)*/g, '').split(',') + let strHex = '#' + for (let i = 0; i < aColor.length; i++) { + let hex = Number(aColor[i]).toString(16) + hex = String(hex).length == 1 ? `${0}${hex}` : hex // 保证每个rgb的值为2位 + if (hex === '0') { + hex += hex + } + strHex += hex + } + if (strHex.length !== 7) { + strHex = _this + } + return strHex + } if (reg.test(_this)) { + const aNum = _this.replace(/#/, '').split('') + if (aNum.length === 6) { + return _this + } if (aNum.length === 3) { + let numHex = '#' + for (let i = 0; i < aNum.length; i += 1) { + numHex += (aNum[i] + aNum[i]) + } + return numHex + } + } else { + return _this + } +} + +/** +* JS颜色十六进制转换为rgb或rgba,返回的格式为 rgba(255,255,255,0.5)字符串 +* sHex为传入的十六进制的色值 +* alpha为rgba的透明度 +*/ +function colorToRgba(color, alpha) { + color = rgbToHex(color) + // 十六进制颜色值的正则表达式 + const reg = /^#([0-9a-fA-f]{3}|[0-9a-fA-f]{6})$/ + /* 16进制颜色转为RGB格式 */ + let sColor = String(color).toLowerCase() + if (sColor && reg.test(sColor)) { + if (sColor.length === 4) { + let sColorNew = '#' + for (let i = 1; i < 4; i += 1) { + sColorNew += sColor.slice(i, i + 1).concat(sColor.slice(i, i + 1)) + } + sColor = sColorNew + } + // 处理六位的颜色值 + const sColorChange = [] + for (let i = 1; i < 7; i += 2) { + sColorChange.push(parseInt(`0x${sColor.slice(i, i + 2)}`)) + } + // return sColorChange.join(',') + return `rgba(${sColorChange.join(',')},${alpha})` + } + + return sColor +} + +export default { + colorGradient, + hexToRgb, + rgbToHex, + colorToRgba +} diff --git a/uni_modules/uview-ui/libs/function/debounce.js b/uni_modules/uview-ui/libs/function/debounce.js new file mode 100644 index 0000000..ad3996b --- /dev/null +++ b/uni_modules/uview-ui/libs/function/debounce.js @@ -0,0 +1,29 @@ +let timeout = null + +/** + * 防抖原理:一定时间内,只有最后一次操作,再过wait毫秒后才执行函数 + * + * @param {Function} func 要执行的回调函数 + * @param {Number} wait 延时的时间 + * @param {Boolean} immediate 是否立即执行 + * @return null + */ +function debounce(func, wait = 500, immediate = false) { + // 清除定时器 + if (timeout !== null) clearTimeout(timeout) + // 立即执行,此类情况一般用不到 + if (immediate) { + const callNow = !timeout + timeout = setTimeout(() => { + timeout = null + }, wait) + if (callNow) typeof func === 'function' && func() + } else { + // 设置定时器,当最后一次操作后,timeout不会再被清除,所以在延时wait毫秒后执行func回调方法 + timeout = setTimeout(() => { + typeof func === 'function' && func() + }, wait) + } +} + +export default debounce diff --git a/uni_modules/uview-ui/libs/function/digit.js b/uni_modules/uview-ui/libs/function/digit.js new file mode 100644 index 0000000..c8260a0 --- /dev/null +++ b/uni_modules/uview-ui/libs/function/digit.js @@ -0,0 +1,167 @@ +let _boundaryCheckingState = true; // 是否进行越界检查的全局开关 + +/** + * 把错误的数据转正 + * @private + * @example strip(0.09999999999999998)=0.1 + */ +function strip(num, precision = 15) { + return +parseFloat(Number(num).toPrecision(precision)); +} + +/** + * Return digits length of a number + * @private + * @param {*number} num Input number + */ +function digitLength(num) { + // Get digit length of e + const eSplit = num.toString().split(/[eE]/); + const len = (eSplit[0].split('.')[1] || '').length - +(eSplit[1] || 0); + return len > 0 ? len : 0; +} + +/** + * 把小数转成整数,如果是小数则放大成整数 + * @private + * @param {*number} num 输入数 + */ +function float2Fixed(num) { + if (num.toString().indexOf('e') === -1) { + return Number(num.toString().replace('.', '')); + } + const dLen = digitLength(num); + return dLen > 0 ? strip(Number(num) * Math.pow(10, dLen)) : Number(num); +} + +/** + * 检测数字是否越界,如果越界给出提示 + * @private + * @param {*number} num 输入数 + */ +function checkBoundary(num) { + if (_boundaryCheckingState) { + if (num > Number.MAX_SAFE_INTEGER || num < Number.MIN_SAFE_INTEGER) { + console.warn(`${num} 超出了精度限制,结果可能不正确`); + } + } +} + +/** + * 把递归操作扁平迭代化 + * @param {number[]} arr 要操作的数字数组 + * @param {function} operation 迭代操作 + * @private + */ +function iteratorOperation(arr, operation) { + const [num1, num2, ...others] = arr; + let res = operation(num1, num2); + + others.forEach((num) => { + res = operation(res, num); + }); + + return res; +} + +/** + * 高精度乘法 + * @export + */ +export function times(...nums) { + if (nums.length > 2) { + return iteratorOperation(nums, times); + } + + const [num1, num2] = nums; + const num1Changed = float2Fixed(num1); + const num2Changed = float2Fixed(num2); + const baseNum = digitLength(num1) + digitLength(num2); + const leftValue = num1Changed * num2Changed; + + checkBoundary(leftValue); + + return leftValue / Math.pow(10, baseNum); +} + +/** + * 高精度加法 + * @export + */ +export function plus(...nums) { + if (nums.length > 2) { + return iteratorOperation(nums, plus); + } + + const [num1, num2] = nums; + // 取最大的小数位 + const baseNum = Math.pow(10, Math.max(digitLength(num1), digitLength(num2))); + // 把小数都转为整数然后再计算 + return (times(num1, baseNum) + times(num2, baseNum)) / baseNum; +} + +/** + * 高精度减法 + * @export + */ +export function minus(...nums) { + if (nums.length > 2) { + return iteratorOperation(nums, minus); + } + + const [num1, num2] = nums; + const baseNum = Math.pow(10, Math.max(digitLength(num1), digitLength(num2))); + return (times(num1, baseNum) - times(num2, baseNum)) / baseNum; +} + +/** + * 高精度除法 + * @export + */ +export function divide(...nums) { + if (nums.length > 2) { + return iteratorOperation(nums, divide); + } + + const [num1, num2] = nums; + const num1Changed = float2Fixed(num1); + const num2Changed = float2Fixed(num2); + checkBoundary(num1Changed); + checkBoundary(num2Changed); + // 重要,这里必须用strip进行修正 + return times(num1Changed / num2Changed, strip(Math.pow(10, digitLength(num2) - digitLength(num1)))); +} + +/** + * 四舍五入 + * @export + */ +export function round(num, ratio) { + const base = Math.pow(10, ratio); + let result = divide(Math.round(Math.abs(times(num, base))), base); + if (num < 0 && result !== 0) { + result = times(result, -1); + } + // 位数不足则补0 + return result; +} + +/** + * 是否进行边界检查,默认开启 + * @param flag 标记开关,true 为开启,false 为关闭,默认为 true + * @export + */ +export function enableBoundaryChecking(flag = true) { + _boundaryCheckingState = flag; +} + + +export default { + times, + plus, + minus, + divide, + round, + enableBoundaryChecking, +}; + diff --git a/uni_modules/uview-ui/libs/function/index.js b/uni_modules/uview-ui/libs/function/index.js new file mode 100644 index 0000000..bd80ee7 --- /dev/null +++ b/uni_modules/uview-ui/libs/function/index.js @@ -0,0 +1,731 @@ +import test from './test.js' +import { round } from './digit.js' +/** + * @description 如果value小于min,取min;如果value大于max,取max + * @param {number} min + * @param {number} max + * @param {number} value + */ +function range(min = 0, max = 0, value = 0) { + return Math.max(min, Math.min(max, Number(value))) +} + +/** + * @description 用于获取用户传递值的px值 如果用户传递了"xxpx"或者"xxrpx",取出其数值部分,如果是"xxxrpx"还需要用过uni.upx2px进行转换 + * @param {number|string} value 用户传递值的px值 + * @param {boolean} unit + * @returns {number|string} + */ +function getPx(value, unit = false) { + if (test.number(value)) { + return unit ? `${value}px` : Number(value) + } + // 如果带有rpx,先取出其数值部分,再转为px值 + if (/(rpx|upx)$/.test(value)) { + return unit ? `${uni.upx2px(parseInt(value))}px` : Number(uni.upx2px(parseInt(value))) + } + return unit ? `${parseInt(value)}px` : parseInt(value) +} + +/** + * @description 进行延时,以达到可以简写代码的目的 比如: await uni.$u.sleep(20)将会阻塞20ms + * @param {number} value 堵塞时间 单位ms 毫秒 + * @returns {Promise} 返回promise + */ +function sleep(value = 30) { + return new Promise((resolve) => { + setTimeout(() => { + resolve() + }, value) + }) +} +/** + * @description 运行期判断平台 + * @returns {string} 返回所在平台(小写) + * @link 运行期判断平台 https://uniapp.dcloud.io/frame?id=判断平台 + */ +function os() { + return uni.getSystemInfoSync().platform.toLowerCase() +} +/** + * @description 获取系统信息同步接口 + * @link 获取系统信息同步接口 https://uniapp.dcloud.io/api/system/info?id=getsysteminfosync + */ +function sys() { + return uni.getSystemInfoSync() +} + +/** + * @description 取一个区间数 + * @param {Number} min 最小值 + * @param {Number} max 最大值 + */ +function random(min, max) { + if (min >= 0 && max > 0 && max >= min) { + const gab = max - min + 1 + return Math.floor(Math.random() * gab + min) + } + return 0 +} + +/** + * @param {Number} len uuid的长度 + * @param {Boolean} firstU 将返回的首字母置为"u" + * @param {Nubmer} radix 生成uuid的基数(意味着返回的字符串都是这个基数),2-二进制,8-八进制,10-十进制,16-十六进制 + */ +function guid(len = 32, firstU = true, radix = null) { + const chars = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz'.split('') + const uuid = [] + radix = radix || chars.length + + if (len) { + // 如果指定uuid长度,只是取随机的字符,0|x为位运算,能去掉x的小数位,返回整数位 + for (let i = 0; i < len; i++) uuid[i] = chars[0 | Math.random() * radix] + } else { + let r + // rfc4122标准要求返回的uuid中,某些位为固定的字符 + uuid[8] = uuid[13] = uuid[18] = uuid[23] = '-' + uuid[14] = '4' + + for (let i = 0; i < 36; i++) { + if (!uuid[i]) { + r = 0 | Math.random() * 16 + uuid[i] = chars[(i == 19) ? (r & 0x3) | 0x8 : r] + } + } + } + // 移除第一个字符,并用u替代,因为第一个字符为数值时,该guuid不能用作id或者class + if (firstU) { + uuid.shift() + return `u${uuid.join('')}` + } + return uuid.join('') +} + +/** +* @description 获取父组件的参数,因为支付宝小程序不支持provide/inject的写法 + this.$parent在非H5中,可以准确获取到父组件,但是在H5中,需要多次this.$parent.$parent.xxx + 这里默认值等于undefined有它的含义,因为最顶层元素(组件)的$parent就是undefined,意味着不传name + 值(默认为undefined),就是查找最顶层的$parent +* @param {string|undefined} name 父组件的参数名 +*/ +function $parent(name = undefined) { + let parent = this.$parent + // 通过while历遍,这里主要是为了H5需要多层解析的问题 + while (parent) { + // 父组件 + if (parent.$options && parent.$options.name !== name) { + // 如果组件的name不相等,继续上一级寻找 + parent = parent.$parent + } else { + return parent + } + } + return false +} + +/** + * @description 样式转换 + * 对象转字符串,或者字符串转对象 + * @param {object | string} customStyle 需要转换的目标 + * @param {String} target 转换的目的,object-转为对象,string-转为字符串 + * @returns {object|string} + */ +function addStyle(customStyle, target = 'object') { + // 字符串转字符串,对象转对象情形,直接返回 + if (test.empty(customStyle) || typeof(customStyle) === 'object' && target === 'object' || target === 'string' && + typeof(customStyle) === 'string') { + return customStyle + } + // 字符串转对象 + if (target === 'object') { + // 去除字符串样式中的两端空格(中间的空格不能去掉,比如padding: 20px 0如果去掉了就错了),空格是无用的 + customStyle = trim(customStyle) + // 根据";"将字符串转为数组形式 + const styleArray = customStyle.split(';') + const style = {} + // 历遍数组,拼接成对象 + for (let i = 0; i < styleArray.length; i++) { + // 'font-size:20px;color:red;',如此最后字符串有";"的话,会导致styleArray最后一个元素为空字符串,这里需要过滤 + if (styleArray[i]) { + const item = styleArray[i].split(':') + style[trim(item[0])] = trim(item[1]) + } + } + return style + } + // 这里为对象转字符串形式 + let string = '' + for (const i in customStyle) { + // 驼峰转为中划线的形式,否则css内联样式,无法识别驼峰样式属性名 + const key = i.replace(/([A-Z])/g, '-$1').toLowerCase() + string += `${key}:${customStyle[i]};` + } + // 去除两端空格 + return trim(string) +} + +/** + * @description 添加单位,如果有rpx,upx,%,px等单位结尾或者值为auto,直接返回,否则加上px单位结尾 + * @param {string|number} value 需要添加单位的值 + * @param {string} unit 添加的单位名 比如px + */ +function addUnit(value = 'auto', unit = uni?.$u?.config?.unit ?? 'px') { + value = String(value) + // 用uView内置验证规则中的number判断是否为数值 + return test.number(value) ? `${value}${unit}` : value +} + +/** + * @description 深度克隆 + * @param {object} obj 需要深度克隆的对象 + * @param cache 缓存 + * @returns {*} 克隆后的对象或者原值(不是对象) + */ +function deepClone(obj, cache = new WeakMap()) { + if (obj === null || typeof obj !== 'object') return obj; + if (cache.has(obj)) return cache.get(obj); + let clone; + if (obj instanceof Date) { + clone = new Date(obj.getTime()); + } else if (obj instanceof RegExp) { + clone = new RegExp(obj); + } else if (obj instanceof Map) { + clone = new Map(Array.from(obj, ([key, value]) => [key, deepClone(value, cache)])); + } else if (obj instanceof Set) { + clone = new Set(Array.from(obj, value => deepClone(value, cache))); + } else if (Array.isArray(obj)) { + clone = obj.map(value => deepClone(value, cache)); + } else if (Object.prototype.toString.call(obj) === '[object Object]') { + clone = Object.create(Object.getPrototypeOf(obj)); + cache.set(obj, clone); + for (const [key, value] of Object.entries(obj)) { + clone[key] = deepClone(value, cache); + } + } else { + clone = Object.assign({}, obj); + } + cache.set(obj, clone); + return clone; +} + +/** + * @description JS对象深度合并 + * @param {object} target 需要拷贝的对象 + * @param {object} source 拷贝的来源对象 + * @returns {object|boolean} 深度合并后的对象或者false(入参有不是对象) + */ +function deepMerge(target = {}, source = {}) { + target = deepClone(target) + if (typeof target !== 'object' || target === null || typeof source !== 'object' || source === null) return target; + const merged = Array.isArray(target) ? target.slice() : Object.assign({}, target); + for (const prop in source) { + if (!source.hasOwnProperty(prop)) continue; + const sourceValue = source[prop]; + const targetValue = merged[prop]; + if (sourceValue instanceof Date) { + merged[prop] = new Date(sourceValue); + } else if (sourceValue instanceof RegExp) { + merged[prop] = new RegExp(sourceValue); + } else if (sourceValue instanceof Map) { + merged[prop] = new Map(sourceValue); + } else if (sourceValue instanceof Set) { + merged[prop] = new Set(sourceValue); + } else if (typeof sourceValue === 'object' && sourceValue !== null) { + merged[prop] = deepMerge(targetValue, sourceValue); + } else { + merged[prop] = sourceValue; + } + } + return merged; +} + +/** + * @description error提示 + * @param {*} err 错误内容 + */ +function error(err) { + // 开发环境才提示,生产环境不会提示 + if (process.env.NODE_ENV === 'development') { + console.error(`uView提示:${err}`) + } +} + +/** + * @description 打乱数组 + * @param {array} array 需要打乱的数组 + * @returns {array} 打乱后的数组 + */ +function randomArray(array = []) { + // 原理是sort排序,Math.random()产生0<= x < 1之间的数,会导致x-0.05大于或者小于0 + return array.sort(() => Math.random() - 0.5) +} + +// padStart 的 polyfill,因为某些机型或情况,还无法支持es7的padStart,比如电脑版的微信小程序 +// 所以这里做一个兼容polyfill的兼容处理 +if (!String.prototype.padStart) { + // 为了方便表示这里 fillString 用了ES6 的默认参数,不影响理解 + String.prototype.padStart = function(maxLength, fillString = ' ') { + if (Object.prototype.toString.call(fillString) !== '[object String]') { + throw new TypeError( + 'fillString must be String' + ) + } + const str = this + // 返回 String(str) 这里是为了使返回的值是字符串字面量,在控制台中更符合直觉 + if (str.length >= maxLength) return String(str) + + const fillLength = maxLength - str.length + let times = Math.ceil(fillLength / fillString.length) + while (times >>= 1) { + fillString += fillString + if (times === 1) { + fillString += fillString + } + } + return fillString.slice(0, fillLength) + str + } +} + +/** + * @description 格式化时间 + * @param {String|Number} dateTime 需要格式化的时间戳 + * @param {String} fmt 格式化规则 yyyy:mm:dd|yyyy:mm|yyyy年mm月dd日|yyyy年mm月dd日 hh时MM分等,可自定义组合 默认yyyy-mm-dd + * @returns {string} 返回格式化后的字符串 + */ + function timeFormat(dateTime = null, formatStr = 'yyyy-mm-dd') { + let date + // 若传入时间为假值,则取当前时间 + if (!dateTime) { + date = new Date() + } + // 若为unix秒时间戳,则转为毫秒时间戳(逻辑有点奇怪,但不敢改,以保证历史兼容) + else if (/^\d{10}$/.test(dateTime?.toString().trim())) { + date = new Date(dateTime * 1000) + } + // 若用户传入字符串格式时间戳,new Date无法解析,需做兼容 + else if (typeof dateTime === 'string' && /^\d+$/.test(dateTime.trim())) { + date = new Date(Number(dateTime)) + } + // 处理平台性差异,在Safari/Webkit中,new Date仅支持/作为分割符的字符串时间 + // 处理 '2022-07-10 01:02:03',跳过 '2022-07-10T01:02:03' + else if (typeof dateTime === 'string' && dateTime.includes('-') && !dateTime.includes('T')) { + date = new Date(dateTime.replace(/-/g, '/')) + } + // 其他都认为符合 RFC 2822 规范 + else { + date = new Date(dateTime) + } + + const timeSource = { + 'y': date.getFullYear().toString(), // 年 + 'm': (date.getMonth() + 1).toString().padStart(2, '0'), // 月 + 'd': date.getDate().toString().padStart(2, '0'), // 日 + 'h': date.getHours().toString().padStart(2, '0'), // 时 + 'M': date.getMinutes().toString().padStart(2, '0'), // 分 + 's': date.getSeconds().toString().padStart(2, '0') // 秒 + // 有其他格式化字符需求可以继续添加,必须转化成字符串 + } + + for (const key in timeSource) { + const [ret] = new RegExp(`${key}+`).exec(formatStr) || [] + if (ret) { + // 年可能只需展示两位 + const beginIndex = key === 'y' && ret.length === 2 ? 2 : 0 + formatStr = formatStr.replace(ret, timeSource[key].slice(beginIndex)) + } + } + + return formatStr +} + +/** + * @description 时间戳转为多久之前 + * @param {String|Number} timestamp 时间戳 + * @param {String|Boolean} format + * 格式化规则如果为时间格式字符串,超出一定时间范围,返回固定的时间格式; + * 如果为布尔值false,无论什么时间,都返回多久以前的格式 + * @returns {string} 转化后的内容 + */ +function timeFrom(timestamp = null, format = 'yyyy-mm-dd') { + if (timestamp == null) timestamp = Number(new Date()) + timestamp = parseInt(timestamp) + // 判断用户输入的时间戳是秒还是毫秒,一般前端js获取的时间戳是毫秒(13位),后端传过来的为秒(10位) + if (timestamp.toString().length == 10) timestamp *= 1000 + let timer = (new Date()).getTime() - timestamp + timer = parseInt(timer / 1000) + // 如果小于5分钟,则返回"刚刚",其他以此类推 + let tips = '' + switch (true) { + case timer < 300: + tips = '刚刚' + break + case timer >= 300 && timer < 3600: + tips = `${parseInt(timer / 60)}分钟前` + break + case timer >= 3600 && timer < 86400: + tips = `${parseInt(timer / 3600)}小时前` + break + case timer >= 86400 && timer < 2592000: + tips = `${parseInt(timer / 86400)}天前` + break + default: + // 如果format为false,则无论什么时间戳,都显示xx之前 + if (format === false) { + if (timer >= 2592000 && timer < 365 * 86400) { + tips = `${parseInt(timer / (86400 * 30))}个月前` + } else { + tips = `${parseInt(timer / (86400 * 365))}年前` + } + } else { + tips = timeFormat(timestamp, format) + } + } + return tips +} + +/** + * @description 去除空格 + * @param String str 需要去除空格的字符串 + * @param String pos both(左右)|left|right|all 默认both + */ +function trim(str, pos = 'both') { + str = String(str) + if (pos == 'both') { + return str.replace(/^\s+|\s+$/g, '') + } + if (pos == 'left') { + return str.replace(/^\s*/, '') + } + if (pos == 'right') { + return str.replace(/(\s*$)/g, '') + } + if (pos == 'all') { + return str.replace(/\s+/g, '') + } + return str +} + +/** + * @description 对象转url参数 + * @param {object} data,对象 + * @param {Boolean} isPrefix,是否自动加上"?" + * @param {string} arrayFormat 规则 indices|brackets|repeat|comma + */ +function queryParams(data = {}, isPrefix = true, arrayFormat = 'brackets') { + const prefix = isPrefix ? '?' : '' + const _result = [] + if (['indices', 'brackets', 'repeat', 'comma'].indexOf(arrayFormat) == -1) arrayFormat = 'brackets' + for (const key in data) { + const value = data[key] + // 去掉为空的参数 + if (['', undefined, null].indexOf(value) >= 0) { + continue + } + // 如果值为数组,另行处理 + if (value.constructor === Array) { + // e.g. {ids: [1, 2, 3]} + switch (arrayFormat) { + case 'indices': + // 结果: ids[0]=1&ids[1]=2&ids[2]=3 + for (let i = 0; i < value.length; i++) { + _result.push(`${key}[${i}]=${value[i]}`) + } + break + case 'brackets': + // 结果: ids[]=1&ids[]=2&ids[]=3 + value.forEach((_value) => { + _result.push(`${key}[]=${_value}`) + }) + break + case 'repeat': + // 结果: ids=1&ids=2&ids=3 + value.forEach((_value) => { + _result.push(`${key}=${_value}`) + }) + break + case 'comma': + // 结果: ids=1,2,3 + let commaStr = '' + value.forEach((_value) => { + commaStr += (commaStr ? ',' : '') + _value + }) + _result.push(`${key}=${commaStr}`) + break + default: + value.forEach((_value) => { + _result.push(`${key}[]=${_value}`) + }) + } + } else { + _result.push(`${key}=${value}`) + } + } + return _result.length ? prefix + _result.join('&') : '' +} + +/** + * 显示消息提示框 + * @param {String} title 提示的内容,长度与 icon 取值有关。 + * @param {Number} duration 提示的延迟时间,单位毫秒,默认:2000 + */ +function toast(title, duration = 2000) { + uni.showToast({ + title: String(title), + icon: 'none', + duration + }) +} + +/** + * @description 根据主题type值,获取对应的图标 + * @param {String} type 主题名称,primary|info|error|warning|success + * @param {boolean} fill 是否使用fill填充实体的图标 + */ +function type2icon(type = 'success', fill = false) { + // 如果非预置值,默认为success + if (['primary', 'info', 'error', 'warning', 'success'].indexOf(type) == -1) type = 'success' + let iconName = '' + // 目前(2019-12-12),info和primary使用同一个图标 + switch (type) { + case 'primary': + iconName = 'info-circle' + break + case 'info': + iconName = 'info-circle' + break + case 'error': + iconName = 'close-circle' + break + case 'warning': + iconName = 'error-circle' + break + case 'success': + iconName = 'checkmark-circle' + break + default: + iconName = 'checkmark-circle' + } + // 是否是实体类型,加上-fill,在icon组件库中,实体的类名是后面加-fill的 + if (fill) iconName += '-fill' + return iconName +} + +/** + * @description 数字格式化 + * @param {number|string} number 要格式化的数字 + * @param {number} decimals 保留几位小数 + * @param {string} decimalPoint 小数点符号 + * @param {string} thousandsSeparator 千分位符号 + * @returns {string} 格式化后的数字 + */ +function priceFormat(number, decimals = 0, decimalPoint = '.', thousandsSeparator = ',') { + number = (`${number}`).replace(/[^0-9+-Ee.]/g, '') + const n = !isFinite(+number) ? 0 : +number + const prec = !isFinite(+decimals) ? 0 : Math.abs(decimals) + const sep = (typeof thousandsSeparator === 'undefined') ? ',' : thousandsSeparator + const dec = (typeof decimalPoint === 'undefined') ? '.' : decimalPoint + let s = '' + + s = (prec ? round(n, prec) + '' : `${Math.round(n)}`).split('.') + const re = /(-?\d+)(\d{3})/ + while (re.test(s[0])) { + s[0] = s[0].replace(re, `$1${sep}$2`) + } + + if ((s[1] || '').length < prec) { + s[1] = s[1] || '' + s[1] += new Array(prec - s[1].length + 1).join('0') + } + return s.join(dec) +} + +/** + * @description 获取duration值 + * 如果带有ms或者s直接返回,如果大于一定值,认为是ms单位,小于一定值,认为是s单位 + * 比如以30位阈值,那么300大于30,可以理解为用户想要的是300ms,而不是想花300s去执行一个动画 + * @param {String|number} value 比如: "1s"|"100ms"|1|100 + * @param {boolean} unit 提示: 如果是false 默认返回number + * @return {string|number} + */ +function getDuration(value, unit = true) { + const valueNum = parseInt(value) + if (unit) { + if (/s$/.test(value)) return value + return value > 30 ? `${value}ms` : `${value}s` + } + if (/ms$/.test(value)) return valueNum + if (/s$/.test(value)) return valueNum > 30 ? valueNum : valueNum * 1000 + return valueNum +} + +/** + * @description 日期的月或日补零操作 + * @param {String} value 需要补零的值 + */ +function padZero(value) { + return `00${value}`.slice(-2) +} + +/** + * @description 在u-form的子组件内容发生变化,或者失去焦点时,尝试通知u-form执行校验方法 + * @param {*} instance + * @param {*} event + */ +function formValidate(instance, event) { + const formItem = uni.$u.$parent.call(instance, 'u-form-item') + const form = uni.$u.$parent.call(instance, 'u-form') + // 如果发生变化的input或者textarea等,其父组件中有u-form-item或者u-form等,就执行form的validate方法 + // 同时将form-item的pros传递给form,让其进行精确对象验证 + if (formItem && form) { + form.validateField(formItem.prop, () => {}, event) + } +} + +/** + * @description 获取某个对象下的属性,用于通过类似'a.b.c'的形式去获取一个对象的的属性的形式 + * @param {object} obj 对象 + * @param {string} key 需要获取的属性字段 + * @returns {*} + */ +function getProperty(obj, key) { + if (!obj) { + return + } + if (typeof key !== 'string' || key === '') { + return '' + } + if (key.indexOf('.') !== -1) { + const keys = key.split('.') + let firstObj = obj[keys[0]] || {} + + for (let i = 1; i < keys.length; i++) { + if (firstObj) { + firstObj = firstObj[keys[i]] + } + } + return firstObj + } + return obj[key] +} + +/** + * @description 设置对象的属性值,如果'a.b.c'的形式进行设置 + * @param {object} obj 对象 + * @param {string} key 需要设置的属性 + * @param {string} value 设置的值 + */ +function setProperty(obj, key, value) { + if (!obj) { + return + } + // 递归赋值 + const inFn = function(_obj, keys, v) { + // 最后一个属性key + if (keys.length === 1) { + _obj[keys[0]] = v + return + } + // 0~length-1个key + while (keys.length > 1) { + const k = keys[0] + if (!_obj[k] || (typeof _obj[k] !== 'object')) { + _obj[k] = {} + } + const key = keys.shift() + // 自调用判断是否存在属性,不存在则自动创建对象 + inFn(_obj[k], keys, v) + } + } + + if (typeof key !== 'string' || key === '') { + + } else if (key.indexOf('.') !== -1) { // 支持多层级赋值操作 + const keys = key.split('.') + inFn(obj, keys, value) + } else { + obj[key] = value + } +} + +/** + * @description 获取当前页面路径 + */ +function page() { + const pages = getCurrentPages() + // 某些特殊情况下(比如页面进行redirectTo时的一些时机),pages可能为空数组 + return `/${pages[pages.length - 1]?.route ?? ''}` +} + +/** + * @description 获取当前路由栈实例数组 + */ +function pages() { + const pages = getCurrentPages() + return pages +} + +/** + * 获取页面历史栈指定层实例 + * @param back {number} [0] - 0或者负数,表示获取历史栈的哪一层,0表示获取当前页面实例,-1 表示获取上一个页面实例。默认0。 + */ +function getHistoryPage(back = 0) { + const pages = getCurrentPages() + const len = pages.length + return pages[len - 1 + back] +} + +/** + * @description 修改uView内置属性值 + * @param {object} props 修改内置props属性 + * @param {object} config 修改内置config属性 + * @param {object} color 修改内置color属性 + * @param {object} zIndex 修改内置zIndex属性 + */ +function setConfig({ + props = {}, + config = {}, + color = {}, + zIndex = {} +}) { + const { + deepMerge, + } = uni.$u + uni.$u.config = deepMerge(uni.$u.config, config) + uni.$u.props = deepMerge(uni.$u.props, props) + uni.$u.color = deepMerge(uni.$u.color, color) + uni.$u.zIndex = deepMerge(uni.$u.zIndex, zIndex) +} + +export default { + range, + getPx, + sleep, + os, + sys, + random, + guid, + $parent, + addStyle, + addUnit, + deepClone, + deepMerge, + error, + randomArray, + timeFormat, + timeFrom, + trim, + queryParams, + toast, + type2icon, + priceFormat, + getDuration, + padZero, + formValidate, + getProperty, + setProperty, + page, + pages, + getHistoryPage, + setConfig +} diff --git a/uni_modules/uview-ui/libs/function/platform.js b/uni_modules/uview-ui/libs/function/platform.js new file mode 100644 index 0000000..d6b926e --- /dev/null +++ b/uni_modules/uview-ui/libs/function/platform.js @@ -0,0 +1,75 @@ +/** + * 注意: + * 此部分内容,在vue-cli模式下,需要在vue.config.js加入如下内容才有效: + * module.exports = { + * transpileDependencies: ['uview-v2'] + * } + */ + +let platform = 'none' + +// #ifdef VUE3 +platform = 'vue3' +// #endif + +// #ifdef VUE2 +platform = 'vue2' +// #endif + +// #ifdef APP-PLUS +platform = 'plus' +// #endif + +// #ifdef APP-NVUE +platform = 'nvue' +// #endif + +// #ifdef H5 +platform = 'h5' +// #endif + +// #ifdef MP-WEIXIN +platform = 'weixin' +// #endif + +// #ifdef MP-ALIPAY +platform = 'alipay' +// #endif + +// #ifdef MP-BAIDU +platform = 'baidu' +// #endif + +// #ifdef MP-TOUTIAO +platform = 'toutiao' +// #endif + +// #ifdef MP-QQ +platform = 'qq' +// #endif + +// #ifdef MP-KUAISHOU +platform = 'kuaishou' +// #endif + +// #ifdef MP-360 +platform = '360' +// #endif + +// #ifdef MP +platform = 'mp' +// #endif + +// #ifdef QUICKAPP-WEBVIEW +platform = 'quickapp-webview' +// #endif + +// #ifdef QUICKAPP-WEBVIEW-HUAWEI +platform = 'quickapp-webview-huawei' +// #endif + +// #ifdef QUICKAPP-WEBVIEW-UNION +platform = 'quckapp-webview-union' +// #endif + +export default platform diff --git a/uni_modules/uview-ui/libs/function/test.js b/uni_modules/uview-ui/libs/function/test.js new file mode 100644 index 0000000..c776437 --- /dev/null +++ b/uni_modules/uview-ui/libs/function/test.js @@ -0,0 +1,288 @@ +/** + * 验证电子邮箱格式 + */ +function email(value) { + return /^\w+((-\w+)|(\.\w+))*\@[A-Za-z0-9]+((\.|-)[A-Za-z0-9]+)*\.[A-Za-z0-9]+$/.test(value) +} + +/** + * 验证手机格式 + */ +function mobile(value) { + return /^1([3589]\d|4[5-9]|6[1-2,4-7]|7[0-8])\d{8}$/.test(value) +} + +/** + * 验证URL格式 + */ +function url(value) { + return /^((https|http|ftp|rtsp|mms):\/\/)(([0-9a-zA-Z_!~*'().&=+$%-]+: )?[0-9a-zA-Z_!~*'().&=+$%-]+@)?(([0-9]{1,3}.){3}[0-9]{1,3}|([0-9a-zA-Z_!~*'()-]+.)*([0-9a-zA-Z][0-9a-zA-Z-]{0,61})?[0-9a-zA-Z].[a-zA-Z]{2,6})(:[0-9]{1,4})?((\/?)|(\/[0-9a-zA-Z_!~*'().;?:@&=+$,%#-]+)+\/?)$/ + .test(value) +} + +/** + * 验证日期格式 + */ +function date(value) { + if (!value) return false + // 判断是否数值或者字符串数值(意味着为时间戳),转为数值,否则new Date无法识别字符串时间戳 + if (number(value)) value = +value + return !/Invalid|NaN/.test(new Date(value).toString()) +} + +/** + * 验证ISO类型的日期格式 + */ +function dateISO(value) { + return /^\d{4}[\/\-](0?[1-9]|1[012])[\/\-](0?[1-9]|[12][0-9]|3[01])$/.test(value) +} + +/** + * 验证十进制数字 + */ +function number(value) { + return /^[\+-]?(\d+\.?\d*|\.\d+|\d\.\d+e\+\d+)$/.test(value) +} + +/** + * 验证字符串 + */ +function string(value) { + return typeof value === 'string' +} + +/** + * 验证整数 + */ +function digits(value) { + return /^\d+$/.test(value) +} + +/** + * 验证身份证号码 + */ +function idCard(value) { + return /^[1-9]\d{5}[1-9]\d{3}((0\d)|(1[0-2]))(([0|1|2]\d)|3[0-1])\d{3}([0-9]|X)$/.test( + value + ) +} + +/** + * 是否车牌号 + */ +function carNo(value) { + // 新能源车牌 + const xreg = /^[京津沪渝冀豫云辽黑湘皖鲁新苏浙赣鄂桂甘晋蒙陕吉闽贵粤青藏川宁琼使领A-Z]{1}[A-Z]{1}(([0-9]{5}[DF]$)|([DF][A-HJ-NP-Z0-9][0-9]{4}$))/ + // 旧车牌 + const creg = /^[京津沪渝冀豫云辽黑湘皖鲁新苏浙赣鄂桂甘晋蒙陕吉闽贵粤青藏川宁琼使领A-Z]{1}[A-Z]{1}[A-HJ-NP-Z0-9]{4}[A-HJ-NP-Z0-9挂学警港澳]{1}$/ + if (value.length === 7) { + return creg.test(value) + } if (value.length === 8) { + return xreg.test(value) + } + return false +} + +/** + * 金额,只允许2位小数 + */ +function amount(value) { + // 金额,只允许保留两位小数 + return /^[1-9]\d*(,\d{3})*(\.\d{1,2})?$|^0\.\d{1,2}$/.test(value) +} + +/** + * 中文 + */ +function chinese(value) { + const reg = /^[\u4e00-\u9fa5]+$/gi + return reg.test(value) +} + +/** + * 只能输入字母 + */ +function letter(value) { + return /^[a-zA-Z]*$/.test(value) +} + +/** + * 只能是字母或者数字 + */ +function enOrNum(value) { + // 英文或者数字 + const reg = /^[0-9a-zA-Z]*$/g + return reg.test(value) +} + +/** + * 验证是否包含某个值 + */ +function contains(value, param) { + return value.indexOf(param) >= 0 +} + +/** + * 验证一个值范围[min, max] + */ +function range(value, param) { + return value >= param[0] && value <= param[1] +} + +/** + * 验证一个长度范围[min, max] + */ +function rangeLength(value, param) { + return value.length >= param[0] && value.length <= param[1] +} + +/** + * 是否固定电话 + */ +function landline(value) { + const reg = /^\d{3,4}-\d{7,8}(-\d{3,4})?$/ + return reg.test(value) +} + +/** + * 判断是否为空 + */ +function empty(value) { + switch (typeof value) { + case 'undefined': + return true + case 'string': + if (value.replace(/(^[ \t\n\r]*)|([ \t\n\r]*$)/g, '').length == 0) return true + break + case 'boolean': + if (!value) return true + break + case 'number': + if (value === 0 || isNaN(value)) return true + break + case 'object': + if (value === null || value.length === 0) return true + for (const i in value) { + return false + } + return true + } + return false +} + +/** + * 是否json字符串 + */ +function jsonString(value) { + if (typeof value === 'string') { + try { + const obj = JSON.parse(value) + if (typeof obj === 'object' && obj) { + return true + } + return false + } catch (e) { + return false + } + } + return false +} + +/** + * 是否数组 + */ +function array(value) { + if (typeof Array.isArray === 'function') { + return Array.isArray(value) + } + return Object.prototype.toString.call(value) === '[object Array]' +} + +/** + * 是否对象 + */ +function object(value) { + return Object.prototype.toString.call(value) === '[object Object]' +} + +/** + * 是否短信验证码 + */ +function code(value, len = 6) { + return new RegExp(`^\\d{${len}}$`).test(value) +} + +/** + * 是否函数方法 + * @param {Object} value + */ +function func(value) { + return typeof value === 'function' +} + +/** + * 是否promise对象 + * @param {Object} value + */ +function promise(value) { + return object(value) && func(value.then) && func(value.catch) +} + +/** 是否图片格式 + * @param {Object} value + */ +function image(value) { + const newValue = value.split('?')[0] + const IMAGE_REGEXP = /\.(jpeg|jpg|gif|png|svg|webp|jfif|bmp|dpg)/i + return IMAGE_REGEXP.test(newValue) +} + +/** + * 是否视频格式 + * @param {Object} value + */ +function video(value) { + const VIDEO_REGEXP = /\.(mp4|mpg|mpeg|dat|asf|avi|rm|rmvb|mov|wmv|flv|mkv|m3u8)/i + return VIDEO_REGEXP.test(value) +} + +/** + * 是否为正则对象 + * @param {Object} + * @return {Boolean} + */ +function regExp(o) { + return o && Object.prototype.toString.call(o) === '[object RegExp]' +} + +export default { + email, + mobile, + url, + date, + dateISO, + number, + digits, + idCard, + carNo, + amount, + chinese, + letter, + enOrNum, + contains, + range, + rangeLength, + empty, + isEmpty: empty, + jsonString, + landline, + object, + array, + code, + func, + promise, + video, + image, + regExp, + string +} diff --git a/uni_modules/uview-ui/libs/function/throttle.js b/uni_modules/uview-ui/libs/function/throttle.js new file mode 100644 index 0000000..2f33611 --- /dev/null +++ b/uni_modules/uview-ui/libs/function/throttle.js @@ -0,0 +1,30 @@ +let timer; let + flag +/** + * 节流原理:在一定时间内,只能触发一次 + * + * @param {Function} func 要执行的回调函数 + * @param {Number} wait 延时的时间 + * @param {Boolean} immediate 是否立即执行 + * @return null + */ +function throttle(func, wait = 500, immediate = true) { + if (immediate) { + if (!flag) { + flag = true + // 如果是立即执行,则在wait毫秒内开始时执行 + typeof func === 'function' && func() + timer = setTimeout(() => { + flag = false + }, wait) + } + } else if (!flag) { + flag = true + // 如果是非立即执行,则在wait毫秒内的结束处执行 + timer = setTimeout(() => { + flag = false + typeof func === 'function' && func() + }, wait) + } +} +export default throttle diff --git a/uni_modules/uview-ui/libs/luch-request/adapters/index.js b/uni_modules/uview-ui/libs/luch-request/adapters/index.js new file mode 100644 index 0000000..e03cf5f --- /dev/null +++ b/uni_modules/uview-ui/libs/luch-request/adapters/index.js @@ -0,0 +1,97 @@ +import buildURL from '../helpers/buildURL' +import buildFullPath from '../core/buildFullPath' +import settle from '../core/settle' +import { isUndefined } from '../utils' + +/** + * 返回可选值存在的配置 + * @param {Array} keys - 可选值数组 + * @param {Object} config2 - 配置 + * @return {{}} - 存在的配置项 + */ +const mergeKeys = (keys, config2) => { + const config = {} + keys.forEach((prop) => { + if (!isUndefined(config2[prop])) { + config[prop] = config2[prop] + } + }) + return config +} +export default (config) => new Promise((resolve, reject) => { + const fullPath = buildURL(buildFullPath(config.baseURL, config.url), config.params) + const _config = { + url: fullPath, + header: config.header, + complete: (response) => { + config.fullPath = fullPath + response.config = config + try { + // 对可能字符串不是json 的情况容错 + if (typeof response.data === 'string') { + response.data = JSON.parse(response.data) + } + // eslint-disable-next-line no-empty + } catch (e) { + } + settle(resolve, reject, response) + } + } + let requestTask + if (config.method === 'UPLOAD') { + delete _config.header['content-type'] + delete _config.header['Content-Type'] + const otherConfig = { + // #ifdef MP-ALIPAY + fileType: config.fileType, + // #endif + filePath: config.filePath, + name: config.name + } + const optionalKeys = [ + // #ifdef APP-PLUS || H5 + 'files', + // #endif + // #ifdef H5 + 'file', + // #endif + // #ifdef H5 || APP-PLUS + 'timeout', + // #endif + 'formData' + ] + requestTask = uni.uploadFile({ ..._config, ...otherConfig, ...mergeKeys(optionalKeys, config) }) + } else if (config.method === 'DOWNLOAD') { + // #ifdef H5 || APP-PLUS + if (!isUndefined(config.timeout)) { + _config.timeout = config.timeout + } + // #endif + requestTask = uni.downloadFile(_config) + } else { + const optionalKeys = [ + 'data', + 'method', + // #ifdef H5 || APP-PLUS || MP-ALIPAY || MP-WEIXIN + 'timeout', + // #endif + 'dataType', + // #ifndef MP-ALIPAY + 'responseType', + // #endif + // #ifdef APP-PLUS + 'sslVerify', + // #endif + // #ifdef H5 + 'withCredentials', + // #endif + // #ifdef APP-PLUS + 'firstIpv4' + // #endif + ] + requestTask = uni.request({ ..._config, ...mergeKeys(optionalKeys, config) }) + } + if (config.getTask) { + config.getTask(requestTask, config) + } +}) diff --git a/uni_modules/uview-ui/libs/luch-request/core/InterceptorManager.js b/uni_modules/uview-ui/libs/luch-request/core/InterceptorManager.js new file mode 100644 index 0000000..3e8728d --- /dev/null +++ b/uni_modules/uview-ui/libs/luch-request/core/InterceptorManager.js @@ -0,0 +1,50 @@ +'use strict' + +function InterceptorManager() { + this.handlers = [] +} + +/** + * Add a new interceptor to the stack + * + * @param {Function} fulfilled The function to handle `then` for a `Promise` + * @param {Function} rejected The function to handle `reject` for a `Promise` + * + * @return {Number} An ID used to remove interceptor later + */ +InterceptorManager.prototype.use = function use(fulfilled, rejected) { + this.handlers.push({ + fulfilled, + rejected + }) + return this.handlers.length - 1 +} + +/** + * Remove an interceptor from the stack + * + * @param {Number} id The ID that was returned by `use` + */ +InterceptorManager.prototype.eject = function eject(id) { + if (this.handlers[id]) { + this.handlers[id] = null + } +} + +/** + * Iterate over all the registered interceptors + * + * This method is particularly useful for skipping over any + * interceptors that may have become `null` calling `eject`. + * + * @param {Function} fn The function to call for each interceptor + */ +InterceptorManager.prototype.forEach = function forEach(fn) { + this.handlers.forEach((h) => { + if (h !== null) { + fn(h) + } + }) +} + +export default InterceptorManager diff --git a/uni_modules/uview-ui/libs/luch-request/core/Request.js b/uni_modules/uview-ui/libs/luch-request/core/Request.js new file mode 100644 index 0000000..cc48566 --- /dev/null +++ b/uni_modules/uview-ui/libs/luch-request/core/Request.js @@ -0,0 +1,198 @@ +/** + * @Class Request + * @description luch-request http请求插件 + * @version 3.0.7 + * @Author lu-ch + * @Date 2021-09-04 + * @Email webwork.s@qq.com + * 文档: https://www.quanzhan.co/luch-request/ + * github: https://github.com/lei-mu/luch-request + * DCloud: http://ext.dcloud.net.cn/plugin?id=392 + * HBuilderX: beat-3.0.4 alpha-3.0.4 + */ + +import dispatchRequest from './dispatchRequest' +import InterceptorManager from './InterceptorManager' +import mergeConfig from './mergeConfig' +import defaults from './defaults' +import { isPlainObject } from '../utils' +import clone from '../utils/clone' + +export default class Request { + /** + * @param {Object} arg - 全局配置 + * @param {String} arg.baseURL - 全局根路径 + * @param {Object} arg.header - 全局header + * @param {String} arg.method = [GET|POST|PUT|DELETE|CONNECT|HEAD|OPTIONS|TRACE] - 全局默认请求方式 + * @param {String} arg.dataType = [json] - 全局默认的dataType + * @param {String} arg.responseType = [text|arraybuffer] - 全局默认的responseType。支付宝小程序不支持 + * @param {Object} arg.custom - 全局默认的自定义参数 + * @param {Number} arg.timeout - 全局默认的超时时间,单位 ms。默认60000。H5(HBuilderX 2.9.9+)、APP(HBuilderX 2.9.9+)、微信小程序(2.10.0)、支付宝小程序 + * @param {Boolean} arg.sslVerify - 全局默认的是否验证 ssl 证书。默认true.仅App安卓端支持(HBuilderX 2.3.3+) + * @param {Boolean} arg.withCredentials - 全局默认的跨域请求时是否携带凭证(cookies)。默认false。仅H5支持(HBuilderX 2.6.15+) + * @param {Boolean} arg.firstIpv4 - 全DNS解析时优先使用ipv4。默认false。仅 App-Android 支持 (HBuilderX 2.8.0+) + * @param {Function(statusCode):Boolean} arg.validateStatus - 全局默认的自定义验证器。默认statusCode >= 200 && statusCode < 300 + */ + constructor(arg = {}) { + if (!isPlainObject(arg)) { + arg = {} + console.warn('设置全局参数必须接收一个Object') + } + this.config = clone({ ...defaults, ...arg }) + this.interceptors = { + request: new InterceptorManager(), + response: new InterceptorManager() + } + } + + /** + * @Function + * @param {Request~setConfigCallback} f - 设置全局默认配置 + */ + setConfig(f) { + this.config = f(this.config) + } + + middleware(config) { + config = mergeConfig(this.config, config) + const chain = [dispatchRequest, undefined] + let promise = Promise.resolve(config) + + this.interceptors.request.forEach((interceptor) => { + chain.unshift(interceptor.fulfilled, interceptor.rejected) + }) + + this.interceptors.response.forEach((interceptor) => { + chain.push(interceptor.fulfilled, interceptor.rejected) + }) + + while (chain.length) { + promise = promise.then(chain.shift(), chain.shift()) + } + + return promise + } + + /** + * @Function + * @param {Object} config - 请求配置项 + * @prop {String} options.url - 请求路径 + * @prop {Object} options.data - 请求参数 + * @prop {Object} [options.responseType = config.responseType] [text|arraybuffer] - 响应的数据类型 + * @prop {Object} [options.dataType = config.dataType] - 如果设为 json,会尝试对返回的数据做一次 JSON.parse + * @prop {Object} [options.header = config.header] - 请求header + * @prop {Object} [options.method = config.method] - 请求方法 + * @returns {Promise} + */ + request(config = {}) { + return this.middleware(config) + } + + get(url, options = {}) { + return this.middleware({ + url, + method: 'GET', + ...options + }) + } + + post(url, data, options = {}) { + return this.middleware({ + url, + data, + method: 'POST', + ...options + }) + } + + // #ifndef MP-ALIPAY + put(url, data, options = {}) { + return this.middleware({ + url, + data, + method: 'PUT', + ...options + }) + } + + // #endif + + // #ifdef APP-PLUS || H5 || MP-WEIXIN || MP-BAIDU + delete(url, data, options = {}) { + return this.middleware({ + url, + data, + method: 'DELETE', + ...options + }) + } + + // #endif + + // #ifdef H5 || MP-WEIXIN + connect(url, data, options = {}) { + return this.middleware({ + url, + data, + method: 'CONNECT', + ...options + }) + } + + // #endif + + // #ifdef H5 || MP-WEIXIN || MP-BAIDU + head(url, data, options = {}) { + return this.middleware({ + url, + data, + method: 'HEAD', + ...options + }) + } + + // #endif + + // #ifdef APP-PLUS || H5 || MP-WEIXIN || MP-BAIDU + options(url, data, options = {}) { + return this.middleware({ + url, + data, + method: 'OPTIONS', + ...options + }) + } + + // #endif + + // #ifdef H5 || MP-WEIXIN + trace(url, data, options = {}) { + return this.middleware({ + url, + data, + method: 'TRACE', + ...options + }) + } + + // #endif + + upload(url, config = {}) { + config.url = url + config.method = 'UPLOAD' + return this.middleware(config) + } + + download(url, config = {}) { + config.url = url + config.method = 'DOWNLOAD' + return this.middleware(config) + } +} + +/** + * setConfig回调 + * @return {Object} - 返回操作后的config + * @callback Request~setConfigCallback + * @param {Object} config - 全局默认config + */ diff --git a/uni_modules/uview-ui/libs/luch-request/core/buildFullPath.js b/uni_modules/uview-ui/libs/luch-request/core/buildFullPath.js new file mode 100644 index 0000000..5eb8a17 --- /dev/null +++ b/uni_modules/uview-ui/libs/luch-request/core/buildFullPath.js @@ -0,0 +1,20 @@ +'use strict' + +import isAbsoluteURL from '../helpers/isAbsoluteURL' +import combineURLs from '../helpers/combineURLs' + +/** + * Creates a new URL by combining the baseURL with the requestedURL, + * only when the requestedURL is not already an absolute URL. + * If the requestURL is absolute, this function returns the requestedURL untouched. + * + * @param {string} baseURL The base URL + * @param {string} requestedURL Absolute or relative URL to combine + * @returns {string} The combined full path + */ +export default function buildFullPath(baseURL, requestedURL) { + if (baseURL && !isAbsoluteURL(requestedURL)) { + return combineURLs(baseURL, requestedURL) + } + return requestedURL +} diff --git a/uni_modules/uview-ui/libs/luch-request/core/defaults.js b/uni_modules/uview-ui/libs/luch-request/core/defaults.js new file mode 100644 index 0000000..be375a9 --- /dev/null +++ b/uni_modules/uview-ui/libs/luch-request/core/defaults.js @@ -0,0 +1,29 @@ +/** + * 默认的全局配置 + */ + +export default { + baseURL: '', + header: {}, + method: 'GET', + dataType: 'json', + // #ifndef MP-ALIPAY + responseType: 'text', + // #endif + custom: {}, + // #ifdef H5 || APP-PLUS || MP-ALIPAY || MP-WEIXIN + timeout: 60000, + // #endif + // #ifdef APP-PLUS + sslVerify: true, + // #endif + // #ifdef H5 + withCredentials: false, + // #endif + // #ifdef APP-PLUS + firstIpv4: false, + // #endif + validateStatus: function validateStatus(status) { + return status >= 200 && status < 300 + } +} diff --git a/uni_modules/uview-ui/libs/luch-request/core/dispatchRequest.js b/uni_modules/uview-ui/libs/luch-request/core/dispatchRequest.js new file mode 100644 index 0000000..724545c --- /dev/null +++ b/uni_modules/uview-ui/libs/luch-request/core/dispatchRequest.js @@ -0,0 +1,3 @@ +import adapter from '../adapters/index' + +export default (config) => adapter(config) diff --git a/uni_modules/uview-ui/libs/luch-request/core/mergeConfig.js b/uni_modules/uview-ui/libs/luch-request/core/mergeConfig.js new file mode 100644 index 0000000..08f8b9b --- /dev/null +++ b/uni_modules/uview-ui/libs/luch-request/core/mergeConfig.js @@ -0,0 +1,103 @@ +import { deepMerge, isUndefined } from '../utils' + +/** + * 合并局部配置优先的配置,如果局部有该配置项则用局部,如果全局有该配置项则用全局 + * @param {Array} keys - 配置项 + * @param {Object} globalsConfig - 当前的全局配置 + * @param {Object} config2 - 局部配置 + * @return {{}} + */ +const mergeKeys = (keys, globalsConfig, config2) => { + const config = {} + keys.forEach((prop) => { + if (!isUndefined(config2[prop])) { + config[prop] = config2[prop] + } else if (!isUndefined(globalsConfig[prop])) { + config[prop] = globalsConfig[prop] + } + }) + return config +} +/** + * + * @param globalsConfig - 当前实例的全局配置 + * @param config2 - 当前的局部配置 + * @return - 合并后的配置 + */ +export default (globalsConfig, config2 = {}) => { + const method = config2.method || globalsConfig.method || 'GET' + let config = { + baseURL: globalsConfig.baseURL || '', + method, + url: config2.url || '', + params: config2.params || {}, + custom: { ...(globalsConfig.custom || {}), ...(config2.custom || {}) }, + header: deepMerge(globalsConfig.header || {}, config2.header || {}) + } + const defaultToConfig2Keys = ['getTask', 'validateStatus'] + config = { ...config, ...mergeKeys(defaultToConfig2Keys, globalsConfig, config2) } + + // eslint-disable-next-line no-empty + if (method === 'DOWNLOAD') { + // #ifdef H5 || APP-PLUS + if (!isUndefined(config2.timeout)) { + config.timeout = config2.timeout + } else if (!isUndefined(globalsConfig.timeout)) { + config.timeout = globalsConfig.timeout + } + // #endif + } else if (method === 'UPLOAD') { + delete config.header['content-type'] + delete config.header['Content-Type'] + const uploadKeys = [ + // #ifdef APP-PLUS || H5 + 'files', + // #endif + // #ifdef MP-ALIPAY + 'fileType', + // #endif + // #ifdef H5 + 'file', + // #endif + 'filePath', + 'name', + // #ifdef H5 || APP-PLUS + 'timeout', + // #endif + 'formData' + ] + uploadKeys.forEach((prop) => { + if (!isUndefined(config2[prop])) { + config[prop] = config2[prop] + } + }) + // #ifdef H5 || APP-PLUS + if (isUndefined(config.timeout) && !isUndefined(globalsConfig.timeout)) { + config.timeout = globalsConfig.timeout + } + // #endif + } else { + const defaultsKeys = [ + 'data', + // #ifdef H5 || APP-PLUS || MP-ALIPAY || MP-WEIXIN + 'timeout', + // #endif + 'dataType', + // #ifndef MP-ALIPAY + 'responseType', + // #endif + // #ifdef APP-PLUS + 'sslVerify', + // #endif + // #ifdef H5 + 'withCredentials', + // #endif + // #ifdef APP-PLUS + 'firstIpv4' + // #endif + ] + config = { ...config, ...mergeKeys(defaultsKeys, globalsConfig, config2) } + } + + return config +} diff --git a/uni_modules/uview-ui/libs/luch-request/core/settle.js b/uni_modules/uview-ui/libs/luch-request/core/settle.js new file mode 100644 index 0000000..8d3638f --- /dev/null +++ b/uni_modules/uview-ui/libs/luch-request/core/settle.js @@ -0,0 +1,16 @@ +/** + * Resolve or reject a Promise based on response status. + * + * @param {Function} resolve A function that resolves the promise. + * @param {Function} reject A function that rejects the promise. + * @param {object} response The response. + */ +export default function settle(resolve, reject, response) { + const { validateStatus } = response.config + const status = response.statusCode + if (status && (!validateStatus || validateStatus(status))) { + resolve(response) + } else { + reject(response) + } +} diff --git a/uni_modules/uview-ui/libs/luch-request/helpers/buildURL.js b/uni_modules/uview-ui/libs/luch-request/helpers/buildURL.js new file mode 100644 index 0000000..472ad6a --- /dev/null +++ b/uni_modules/uview-ui/libs/luch-request/helpers/buildURL.js @@ -0,0 +1,69 @@ +'use strict' + +import * as utils from '../utils' + +function encode(val) { + return encodeURIComponent(val) + .replace(/%40/gi, '@') + .replace(/%3A/gi, ':') + .replace(/%24/g, '$') + .replace(/%2C/gi, ',') + .replace(/%20/g, '+') + .replace(/%5B/gi, '[') + .replace(/%5D/gi, ']') +} + +/** + * Build a URL by appending params to the end + * + * @param {string} url The base of the url (e.g., http://www.google.com) + * @param {object} [params] The params to be appended + * @returns {string} The formatted url + */ +export default function buildURL(url, params) { + /* eslint no-param-reassign:0 */ + if (!params) { + return url + } + + let serializedParams + if (utils.isURLSearchParams(params)) { + serializedParams = params.toString() + } else { + const parts = [] + + utils.forEach(params, (val, key) => { + if (val === null || typeof val === 'undefined') { + return + } + + if (utils.isArray(val)) { + key = `${key}[]` + } else { + val = [val] + } + + utils.forEach(val, (v) => { + if (utils.isDate(v)) { + v = v.toISOString() + } else if (utils.isObject(v)) { + v = JSON.stringify(v) + } + parts.push(`${encode(key)}=${encode(v)}`) + }) + }) + + serializedParams = parts.join('&') + } + + if (serializedParams) { + const hashmarkIndex = url.indexOf('#') + if (hashmarkIndex !== -1) { + url = url.slice(0, hashmarkIndex) + } + + url += (url.indexOf('?') === -1 ? '?' : '&') + serializedParams + } + + return url +} diff --git a/uni_modules/uview-ui/libs/luch-request/helpers/combineURLs.js b/uni_modules/uview-ui/libs/luch-request/helpers/combineURLs.js new file mode 100644 index 0000000..ac7c124 --- /dev/null +++ b/uni_modules/uview-ui/libs/luch-request/helpers/combineURLs.js @@ -0,0 +1,14 @@ +'use strict' + +/** + * Creates a new URL by combining the specified URLs + * + * @param {string} baseURL The base URL + * @param {string} relativeURL The relative URL + * @returns {string} The combined URL + */ +export default function combineURLs(baseURL, relativeURL) { + return relativeURL + ? `${baseURL.replace(/\/+$/, '')}/${relativeURL.replace(/^\/+/, '')}` + : baseURL +} diff --git a/uni_modules/uview-ui/libs/luch-request/helpers/isAbsoluteURL.js b/uni_modules/uview-ui/libs/luch-request/helpers/isAbsoluteURL.js new file mode 100644 index 0000000..63c6647 --- /dev/null +++ b/uni_modules/uview-ui/libs/luch-request/helpers/isAbsoluteURL.js @@ -0,0 +1,14 @@ +'use strict' + +/** + * Determines whether the specified URL is absolute + * + * @param {string} url The URL to test + * @returns {boolean} True if the specified URL is absolute, otherwise false + */ +export default function isAbsoluteURL(url) { + // A URL is considered absolute if it begins with "://" or "//" (protocol-relative URL). + // RFC 3986 defines scheme name as a sequence of characters beginning with a letter and followed + // by any combination of letters, digits, plus, period, or hyphen. + return /^([a-z][a-z\d+\-.]*:)?\/\//i.test(url) +} diff --git a/uni_modules/uview-ui/libs/luch-request/index.d.ts b/uni_modules/uview-ui/libs/luch-request/index.d.ts new file mode 100644 index 0000000..e939ce1 --- /dev/null +++ b/uni_modules/uview-ui/libs/luch-request/index.d.ts @@ -0,0 +1,116 @@ +type AnyObject = Record +type HttpPromise = Promise>; +type Tasks = UniApp.RequestTask | UniApp.UploadTask | UniApp.DownloadTask +export interface RequestTask { + abort: () => void; + offHeadersReceived: () => void; + onHeadersReceived: () => void; +} +export interface HttpRequestConfig { + /** 请求基地址 */ + baseURL?: string; + /** 请求服务器接口地址 */ + url?: string; + + /** 请求查询参数,自动拼接为查询字符串 */ + params?: AnyObject; + /** 请求体参数 */ + data?: AnyObject; + + /** 文件对应的 key */ + name?: string; + /** HTTP 请求中其他额外的 form data */ + formData?: AnyObject; + /** 要上传文件资源的路径。 */ + filePath?: string; + /** 需要上传的文件列表。使用 files 时,filePath 和 name 不生效,App、H5( 2.6.15+) */ + files?: Array<{ + name?: string; + file?: File; + uri: string; + }>; + /** 要上传的文件对象,仅H5(2.6.15+)支持 */ + file?: File; + + /** 请求头信息 */ + header?: AnyObject; + /** 请求方式 */ + method?: "GET" | "POST" | "PUT" | "DELETE" | "CONNECT" | "HEAD" | "OPTIONS" | "TRACE" | "UPLOAD" | "DOWNLOAD"; + /** 如果设为 json,会尝试对返回的数据做一次 JSON.parse */ + dataType?: string; + /** 设置响应的数据类型,支付宝小程序不支持 */ + responseType?: "text" | "arraybuffer"; + /** 自定义参数 */ + custom?: AnyObject; + /** 超时时间,仅微信小程序(2.10.0)、支付宝小程序支持 */ + timeout?: number; + /** DNS解析时优先使用ipv4,仅 App-Android 支持 (HBuilderX 2.8.0+) */ + firstIpv4?: boolean; + /** 验证 ssl 证书 仅5+App安卓端支持(HBuilderX 2.3.3+) */ + sslVerify?: boolean; + /** 跨域请求时是否携带凭证(cookies)仅H5支持(HBuilderX 2.6.15+) */ + withCredentials?: boolean; + + /** 返回当前请求的task, options。请勿在此处修改options。 */ + getTask?: (task: T, options: HttpRequestConfig) => void; + /** 全局自定义验证器 */ + validateStatus?: (statusCode: number) => boolean | void; +} +export interface HttpResponse { + config: HttpRequestConfig; + statusCode: number; + cookies: Array; + data: T; + errMsg: string; + header: AnyObject; +} +export interface HttpUploadResponse { + config: HttpRequestConfig; + statusCode: number; + data: T; + errMsg: string; +} +export interface HttpDownloadResponse extends HttpResponse { + tempFilePath: string; +} +export interface HttpError { + config: HttpRequestConfig; + statusCode?: number; + cookies?: Array; + data?: any; + errMsg: string; + header?: AnyObject; +} +export interface HttpInterceptorManager { + use( + onFulfilled?: (config: V) => Promise | V, + onRejected?: (config: E) => Promise | E + ): void; + eject(id: number): void; +} +export abstract class HttpRequestAbstract { + constructor(config?: HttpRequestConfig); + config: HttpRequestConfig; + interceptors: { + request: HttpInterceptorManager; + response: HttpInterceptorManager; + } + middleware(config: HttpRequestConfig): HttpPromise; + request(config: HttpRequestConfig): HttpPromise; + get(url: string, config?: HttpRequestConfig): HttpPromise; + upload(url: string, config?: HttpRequestConfig): HttpPromise; + delete(url: string, data?: AnyObject, config?: HttpRequestConfig): HttpPromise; + head(url: string, data?: AnyObject, config?: HttpRequestConfig): HttpPromise; + post(url: string, data?: AnyObject, config?: HttpRequestConfig): HttpPromise; + put(url: string, data?: AnyObject, config?: HttpRequestConfig): HttpPromise; + connect(url: string, data?: AnyObject, config?: HttpRequestConfig): HttpPromise; + options(url: string, data?: AnyObject, config?: HttpRequestConfig): HttpPromise; + trace(url: string, data?: AnyObject, config?: HttpRequestConfig): HttpPromise; + + download(url: string, config?: HttpRequestConfig): Promise; + + setConfig(onSend: (config: HttpRequestConfig) => HttpRequestConfig): void; +} + +declare class HttpRequest extends HttpRequestAbstract { } +export default HttpRequest; diff --git a/uni_modules/uview-ui/libs/luch-request/index.js b/uni_modules/uview-ui/libs/luch-request/index.js new file mode 100644 index 0000000..8fb2b44 --- /dev/null +++ b/uni_modules/uview-ui/libs/luch-request/index.js @@ -0,0 +1,3 @@ +import Request from './core/Request' + +export default Request diff --git a/uni_modules/uview-ui/libs/luch-request/utils.js b/uni_modules/uview-ui/libs/luch-request/utils.js new file mode 100644 index 0000000..847283d --- /dev/null +++ b/uni_modules/uview-ui/libs/luch-request/utils.js @@ -0,0 +1,131 @@ +'use strict' + +// utils is a library of generic helper functions non-specific to axios + +const { toString } = Object.prototype + +/** + * Determine if a value is an Array + * + * @param {Object} val The value to test + * @returns {boolean} True if value is an Array, otherwise false + */ +export function isArray(val) { + return toString.call(val) === '[object Array]' +} + +/** + * Determine if a value is an Object + * + * @param {Object} val The value to test + * @returns {boolean} True if value is an Object, otherwise false + */ +export function isObject(val) { + return val !== null && typeof val === 'object' +} + +/** + * Determine if a value is a Date + * + * @param {Object} val The value to test + * @returns {boolean} True if value is a Date, otherwise false + */ +export function isDate(val) { + return toString.call(val) === '[object Date]' +} + +/** + * Determine if a value is a URLSearchParams object + * + * @param {Object} val The value to test + * @returns {boolean} True if value is a URLSearchParams object, otherwise false + */ +export function isURLSearchParams(val) { + return typeof URLSearchParams !== 'undefined' && val instanceof URLSearchParams +} + +/** + * Iterate over an Array or an Object invoking a function for each item. + * + * If `obj` is an Array callback will be called passing + * the value, index, and complete array for each item. + * + * If 'obj' is an Object callback will be called passing + * the value, key, and complete object for each property. + * + * @param {Object|Array} obj The object to iterate + * @param {Function} fn The callback to invoke for each item + */ +export function forEach(obj, fn) { + // Don't bother if no value provided + if (obj === null || typeof obj === 'undefined') { + return + } + + // Force an array if not already something iterable + if (typeof obj !== 'object') { + /* eslint no-param-reassign:0 */ + obj = [obj] + } + + if (isArray(obj)) { + // Iterate over array values + for (let i = 0, l = obj.length; i < l; i++) { + fn.call(null, obj[i], i, obj) + } + } else { + // Iterate over object keys + for (const key in obj) { + if (Object.prototype.hasOwnProperty.call(obj, key)) { + fn.call(null, obj[key], key, obj) + } + } + } +} + +/** + * 是否为boolean 值 + * @param val + * @returns {boolean} + */ +export function isBoolean(val) { + return typeof val === 'boolean' +} + +/** + * 是否为真正的对象{} new Object + * @param {any} obj - 检测的对象 + * @returns {boolean} + */ +export function isPlainObject(obj) { + return Object.prototype.toString.call(obj) === '[object Object]' +} + +/** + * Function equal to merge with the difference being that no reference + * to original objects is kept. + * + * @see merge + * @param {Object} obj1 Object to merge + * @returns {Object} Result of all merge properties + */ +export function deepMerge(/* obj1, obj2, obj3, ... */) { + const result = {} + function assignValue(val, key) { + if (typeof result[key] === 'object' && typeof val === 'object') { + result[key] = deepMerge(result[key], val) + } else if (typeof val === 'object') { + result[key] = deepMerge({}, val) + } else { + result[key] = val + } + } + for (let i = 0, l = arguments.length; i < l; i++) { + forEach(arguments[i], assignValue) + } + return result +} + +export function isUndefined(val) { + return typeof val === 'undefined' +} diff --git a/uni_modules/uview-ui/libs/luch-request/utils/clone.js b/uni_modules/uview-ui/libs/luch-request/utils/clone.js new file mode 100644 index 0000000..2fee704 --- /dev/null +++ b/uni_modules/uview-ui/libs/luch-request/utils/clone.js @@ -0,0 +1,264 @@ +/* eslint-disable */ +var clone = (function() { + 'use strict'; + + function _instanceof(obj, type) { + return type != null && obj instanceof type; + } + + var nativeMap; + try { + nativeMap = Map; + } catch(_) { + // maybe a reference error because no `Map`. Give it a dummy value that no + // value will ever be an instanceof. + nativeMap = function() {}; + } + + var nativeSet; + try { + nativeSet = Set; + } catch(_) { + nativeSet = function() {}; + } + + var nativePromise; + try { + nativePromise = Promise; + } catch(_) { + nativePromise = function() {}; + } + + /** + * Clones (copies) an Object using deep copying. + * + * This function supports circular references by default, but if you are certain + * there are no circular references in your object, you can save some CPU time + * by calling clone(obj, false). + * + * Caution: if `circular` is false and `parent` contains circular references, + * your program may enter an infinite loop and crash. + * + * @param `parent` - the object to be cloned + * @param `circular` - set to true if the object to be cloned may contain + * circular references. (optional - true by default) + * @param `depth` - set to a number if the object is only to be cloned to + * a particular depth. (optional - defaults to Infinity) + * @param `prototype` - sets the prototype to be used when cloning an object. + * (optional - defaults to parent prototype). + * @param `includeNonEnumerable` - set to true if the non-enumerable properties + * should be cloned as well. Non-enumerable properties on the prototype + * chain will be ignored. (optional - false by default) + */ + function clone(parent, circular, depth, prototype, includeNonEnumerable) { + if (typeof circular === 'object') { + depth = circular.depth; + prototype = circular.prototype; + includeNonEnumerable = circular.includeNonEnumerable; + circular = circular.circular; + } + // maintain two arrays for circular references, where corresponding parents + // and children have the same index + var allParents = []; + var allChildren = []; + + var useBuffer = typeof Buffer != 'undefined'; + + if (typeof circular == 'undefined') + circular = true; + + if (typeof depth == 'undefined') + depth = Infinity; + + // recurse this function so we don't reset allParents and allChildren + function _clone(parent, depth) { + // cloning null always returns null + if (parent === null) + return null; + + if (depth === 0) + return parent; + + var child; + var proto; + if (typeof parent != 'object') { + return parent; + } + + if (_instanceof(parent, nativeMap)) { + child = new nativeMap(); + } else if (_instanceof(parent, nativeSet)) { + child = new nativeSet(); + } else if (_instanceof(parent, nativePromise)) { + child = new nativePromise(function (resolve, reject) { + parent.then(function(value) { + resolve(_clone(value, depth - 1)); + }, function(err) { + reject(_clone(err, depth - 1)); + }); + }); + } else if (clone.__isArray(parent)) { + child = []; + } else if (clone.__isRegExp(parent)) { + child = new RegExp(parent.source, __getRegExpFlags(parent)); + if (parent.lastIndex) child.lastIndex = parent.lastIndex; + } else if (clone.__isDate(parent)) { + child = new Date(parent.getTime()); + } else if (useBuffer && Buffer.isBuffer(parent)) { + if (Buffer.from) { + // Node.js >= 5.10.0 + child = Buffer.from(parent); + } else { + // Older Node.js versions + child = new Buffer(parent.length); + parent.copy(child); + } + return child; + } else if (_instanceof(parent, Error)) { + child = Object.create(parent); + } else { + if (typeof prototype == 'undefined') { + proto = Object.getPrototypeOf(parent); + child = Object.create(proto); + } + else { + child = Object.create(prototype); + proto = prototype; + } + } + + if (circular) { + var index = allParents.indexOf(parent); + + if (index != -1) { + return allChildren[index]; + } + allParents.push(parent); + allChildren.push(child); + } + + if (_instanceof(parent, nativeMap)) { + parent.forEach(function(value, key) { + var keyChild = _clone(key, depth - 1); + var valueChild = _clone(value, depth - 1); + child.set(keyChild, valueChild); + }); + } + if (_instanceof(parent, nativeSet)) { + parent.forEach(function(value) { + var entryChild = _clone(value, depth - 1); + child.add(entryChild); + }); + } + + for (var i in parent) { + var attrs = Object.getOwnPropertyDescriptor(parent, i); + if (attrs) { + child[i] = _clone(parent[i], depth - 1); + } + + try { + var objProperty = Object.getOwnPropertyDescriptor(parent, i); + if (objProperty.set === 'undefined') { + // no setter defined. Skip cloning this property + continue; + } + child[i] = _clone(parent[i], depth - 1); + } catch(e){ + if (e instanceof TypeError) { + // when in strict mode, TypeError will be thrown if child[i] property only has a getter + // we can't do anything about this, other than inform the user that this property cannot be set. + continue + } else if (e instanceof ReferenceError) { + //this may happen in non strict mode + continue + } + } + + } + + if (Object.getOwnPropertySymbols) { + var symbols = Object.getOwnPropertySymbols(parent); + for (var i = 0; i < symbols.length; i++) { + // Don't need to worry about cloning a symbol because it is a primitive, + // like a number or string. + var symbol = symbols[i]; + var descriptor = Object.getOwnPropertyDescriptor(parent, symbol); + if (descriptor && !descriptor.enumerable && !includeNonEnumerable) { + continue; + } + child[symbol] = _clone(parent[symbol], depth - 1); + Object.defineProperty(child, symbol, descriptor); + } + } + + if (includeNonEnumerable) { + var allPropertyNames = Object.getOwnPropertyNames(parent); + for (var i = 0; i < allPropertyNames.length; i++) { + var propertyName = allPropertyNames[i]; + var descriptor = Object.getOwnPropertyDescriptor(parent, propertyName); + if (descriptor && descriptor.enumerable) { + continue; + } + child[propertyName] = _clone(parent[propertyName], depth - 1); + Object.defineProperty(child, propertyName, descriptor); + } + } + + return child; + } + + return _clone(parent, depth); + } + + /** + * Simple flat clone using prototype, accepts only objects, usefull for property + * override on FLAT configuration object (no nested props). + * + * USE WITH CAUTION! This may not behave as you wish if you do not know how this + * works. + */ + clone.clonePrototype = function clonePrototype(parent) { + if (parent === null) + return null; + + var c = function () {}; + c.prototype = parent; + return new c(); + }; + +// private utility functions + + function __objToStr(o) { + return Object.prototype.toString.call(o); + } + clone.__objToStr = __objToStr; + + function __isDate(o) { + return typeof o === 'object' && __objToStr(o) === '[object Date]'; + } + clone.__isDate = __isDate; + + function __isArray(o) { + return typeof o === 'object' && __objToStr(o) === '[object Array]'; + } + clone.__isArray = __isArray; + + function __isRegExp(o) { + return typeof o === 'object' && __objToStr(o) === '[object RegExp]'; + } + clone.__isRegExp = __isRegExp; + + function __getRegExpFlags(re) { + var flags = ''; + if (re.global) flags += 'g'; + if (re.ignoreCase) flags += 'i'; + if (re.multiline) flags += 'm'; + return flags; + } + clone.__getRegExpFlags = __getRegExpFlags; + + return clone; +})(); + +export default clone diff --git a/uni_modules/uview-ui/libs/mixin/button.js b/uni_modules/uview-ui/libs/mixin/button.js new file mode 100644 index 0000000..0c019c2 --- /dev/null +++ b/uni_modules/uview-ui/libs/mixin/button.js @@ -0,0 +1,13 @@ +export default { + props: { + lang: String, + sessionFrom: String, + sendMessageTitle: String, + sendMessagePath: String, + sendMessageImg: String, + showMessageCard: Boolean, + appParameter: String, + formType: String, + openType: String + } +} diff --git a/uni_modules/uview-ui/libs/mixin/mixin.js b/uni_modules/uview-ui/libs/mixin/mixin.js new file mode 100644 index 0000000..f41a178 --- /dev/null +++ b/uni_modules/uview-ui/libs/mixin/mixin.js @@ -0,0 +1,160 @@ +module.exports = { + // 定义每个组件都可能需要用到的外部样式以及类名 + props: { + // 每个组件都有的父组件传递的样式,可以为字符串或者对象形式 + customStyle: { + type: [Object, String], + default: () => ({}) + }, + customClass: { + type: String, + default: '' + }, + // 跳转的页面路径 + url: { + type: String, + default: '' + }, + // 页面跳转的类型 + linkType: { + type: String, + default: 'navigateTo' + } + }, + data() { + return {} + }, + onLoad() { + // getRect挂载到$u上,因为这方法需要使用in(this),所以无法把它独立成一个单独的文件导出 + this.$u.getRect = this.$uGetRect + }, + created() { + // 组件当中,只有created声明周期,为了能在组件使用,故也在created中将方法挂载到$u + this.$u.getRect = this.$uGetRect + }, + computed: { + // 在2.x版本中,将会把$u挂载到uni对象下,导致在模板中无法使用uni.$u.xxx形式 + // 所以这里通过computed计算属性将其附加到this.$u上,就可以在模板或者js中使用uni.$u.xxx + // 只在nvue环境通过此方式引入完整的$u,其他平台会出现性能问题,非nvue则按需引入(主要原因是props过大) + $u() { + // #ifndef APP-NVUE + // 在非nvue端,移除props,http,mixin等对象,避免在小程序setData时数据过大影响性能 + return uni.$u.deepMerge(uni.$u, { + props: undefined, + http: undefined, + mixin: undefined + }) + // #endif + // #ifdef APP-NVUE + return uni.$u + // #endif + }, + /** + * 生成bem规则类名 + * 由于微信小程序,H5,nvue之间绑定class的差异,无法通过:class="[bem()]"的形式进行同用 + * 故采用如下折中做法,最后返回的是数组(一般平台)或字符串(支付宝和字节跳动平台),类似['a', 'b', 'c']或'a b c'的形式 + * @param {String} name 组件名称 + * @param {Array} fixed 一直会存在的类名 + * @param {Array} change 会根据变量值为true或者false而出现或者隐藏的类名 + * @returns {Array|string} + */ + bem() { + return function (name, fixed, change) { + // 类名前缀 + const prefix = `u-${name}--` + const classes = {} + if (fixed) { + fixed.map((item) => { + // 这里的类名,会一直存在 + classes[prefix + this[item]] = true + }) + } + if (change) { + change.map((item) => { + // 这里的类名,会根据this[item]的值为true或者false,而进行添加或者移除某一个类 + this[item] ? (classes[prefix + item] = this[item]) : (delete classes[prefix + item]) + }) + } + return Object.keys(classes) + // 支付宝,头条小程序无法动态绑定一个数组类名,否则解析出来的结果会带有",",而导致失效 + // #ifdef MP-ALIPAY || MP-TOUTIAO || MP-LARK + .join(' ') + // #endif + } + } + }, + methods: { + // 跳转某一个页面 + openPage(urlKey = 'url') { + const url = this[urlKey] + if (url) { + // 执行类似uni.navigateTo的方法 + uni[this.linkType]({ + url + }) + } + }, + // 查询节点信息 + // 目前此方法在支付宝小程序中无法获取组件跟接点的尺寸,为支付宝的bug(2020-07-21) + // 解决办法为在组件根部再套一个没有任何作用的view元素 + $uGetRect(selector, all) { + return new Promise((resolve) => { + uni.createSelectorQuery() + .in(this)[all ? 'selectAll' : 'select'](selector) + .boundingClientRect((rect) => { + if (all && Array.isArray(rect) && rect.length) { + resolve(rect) + } + if (!all && rect) { + resolve(rect) + } + }) + .exec() + }) + }, + getParentData(parentName = '') { + // 避免在created中去定义parent变量 + if (!this.parent) this.parent = {} + // 这里的本质原理是,通过获取父组件实例(也即类似u-radio的父组件u-radio-group的this) + // 将父组件this中对应的参数,赋值给本组件(u-radio的this)的parentData对象中对应的属性 + // 之所以需要这么做,是因为所有端中,头条小程序不支持通过this.parent.xxx去监听父组件参数的变化 + // 此处并不会自动更新子组件的数据,而是依赖父组件u-radio-group去监听data的变化,手动调用更新子组件的方法去重新获取 + this.parent = uni.$u.$parent.call(this, parentName) + if (this.parent.children) { + // 如果父组件的children不存在本组件的实例,才将本实例添加到父组件的children中 + this.parent.children.indexOf(this) === -1 && this.parent.children.push(this) + } + if (this.parent && this.parentData) { + // 历遍parentData中的属性,将parent中的同名属性赋值给parentData + Object.keys(this.parentData).map((key) => { + this.parentData[key] = this.parent[key] + }) + } + }, + // 阻止事件冒泡 + preventEvent(e) { + e && typeof (e.stopPropagation) === 'function' && e.stopPropagation() + }, + // 空操作 + noop(e) { + this.preventEvent(e) + } + }, + onReachBottom() { + uni.$emit('uOnReachBottom') + }, + beforeDestroy() { + // 判断当前页面是否存在parent和chldren,一般在checkbox和checkbox-group父子联动的场景会有此情况 + // 组件销毁时,移除子组件在父组件children数组中的实例,释放资源,避免数据混乱 + if (this.parent && uni.$u.test.array(this.parent.children)) { + // 组件销毁时,移除父组件中的children数组中对应的实例 + const childrenList = this.parent.children + childrenList.map((child, index) => { + // 如果相等,则移除 + if (child === this) { + childrenList.splice(index, 1) + } + }) + } + } +} diff --git a/uni_modules/uview-ui/libs/mixin/mpMixin.js b/uni_modules/uview-ui/libs/mixin/mpMixin.js new file mode 100644 index 0000000..29e7e65 --- /dev/null +++ b/uni_modules/uview-ui/libs/mixin/mpMixin.js @@ -0,0 +1,8 @@ +export default { + // #ifdef MP-WEIXIN + // 将自定义节点设置成虚拟的,更加接近Vue组件的表现,能更好的使用flex属性 + options: { + virtualHost: true + } + // #endif +} diff --git a/uni_modules/uview-ui/libs/mixin/mpShare.js b/uni_modules/uview-ui/libs/mixin/mpShare.js new file mode 100644 index 0000000..b07bbd3 --- /dev/null +++ b/uni_modules/uview-ui/libs/mixin/mpShare.js @@ -0,0 +1,13 @@ +module.exports = { + onLoad() { + // 设置默认的转发参数 + uni.$u.mpShare = { + title: '', // 默认为小程序名称 + path: '', // 默认为当前页面路径 + imageUrl: '' // 默认为当前页面的截图 + } + }, + onShareAppMessage() { + return uni.$u.mpShare + } +} diff --git a/uni_modules/uview-ui/libs/mixin/openType.js b/uni_modules/uview-ui/libs/mixin/openType.js new file mode 100644 index 0000000..1216181 --- /dev/null +++ b/uni_modules/uview-ui/libs/mixin/openType.js @@ -0,0 +1,25 @@ +export default { + props: { + openType: String + }, + methods: { + onGetUserInfo(event) { + this.$emit('getuserinfo', event.detail) + }, + onContact(event) { + this.$emit('contact', event.detail) + }, + onGetPhoneNumber(event) { + this.$emit('getphonenumber', event.detail) + }, + onError(event) { + this.$emit('error', event.detail) + }, + onLaunchApp(event) { + this.$emit('launchapp', event.detail) + }, + onOpenSetting(event) { + this.$emit('opensetting', event.detail) + } + } +} diff --git a/uni_modules/uview-ui/libs/mixin/style.js b/uni_modules/uview-ui/libs/mixin/style.js new file mode 100644 index 0000000..2660180 --- /dev/null +++ b/uni_modules/uview-ui/libs/mixin/style.js @@ -0,0 +1,228 @@ +export default { + props: { + // flex排列方式 + flexDirection: { + type: String, + default: '' + }, + // flex-direction的简写 + fd: { + type: String, + default: '' + }, + // 展示类型 + display: { + type: String, + default: '' + }, + // display简写 + d: { + type: String, + default: '' + }, + // 主轴排列方式 + justifyContent: { + type: String, + default: '' + }, + // justifyContent的简写 + jc: { + type: String, + default: '' + }, + // 纵轴排列方式 + alignItems: { + type: String, + default: '' + }, + // align-items的简写 + ai: { + type: String, + default: '' + }, + color: { + type: String, + default: '' + }, + // color简写 + c: { + type: String, + default: '' + }, + // 字体大小 + fontSize: { + type: [String, Number], + default: 0 + }, + // font-size简写 + fs: { + type: [String, Number], + default: '' + }, + margin: { + type: [String, Number], + default: 0 + }, + // margin简写 + m: { + type: [String, Number], + default: 0 + }, + // margin-top + marginTop: { + type: [String, Number], + default: 0 + }, + // margin-top简写 + mt: { + type: [String, Number], + default: 0 + }, + // margin-right + marginRight: { + type: [String, Number], + default: 0 + }, + // margin-right简写 + mr: { + type: [String, Number], + default: 0 + }, + // margin-bottom + marginBottom: { + type: [String, Number], + default: 0 + }, + // margin-bottom简写 + mb: { + type: [String, Number], + default: 0 + }, + // margin-left + marginLeft: { + type: [String, Number], + default: 0 + }, + // margin-left简写 + ml: { + type: [String, Number], + default: 0 + }, + // padding-left + paddingLeft: { + type: [String, Number], + default: 0 + }, + // padding-left简写 + pl: { + type: [String, Number], + default: 0 + }, + // padding-top + paddingTop: { + type: [String, Number], + default: 0 + }, + // padding-top简写 + pt: { + type: [String, Number], + default: 0 + }, + // padding-right + paddingRight: { + type: [String, Number], + default: 0 + }, + // padding-right简写 + pr: { + type: [String, Number], + default: 0 + }, + // padding-bottom + paddingBottom: { + type: [String, Number], + default: 0 + }, + // padding-bottom简写 + pb: { + type: [String, Number], + default: 0 + }, + // border-radius + borderRadius: { + type: [String, Number], + default: 0 + }, + // border-radius简写 + radius: { + type: [String, Number], + default: 0 + }, + // transform + transform: { + type: String, + default: '' + }, + // 定位 + position: { + type: String, + default: '' + }, + // position简写 + pos: { + type: String, + default: '' + }, + // 宽度 + width: { + type: [String, Number], + default: null + }, + // width简写 + w: { + type: [String, Number], + default: null + }, + // 高度 + height: { + type: [String, Number], + default: null + }, + // height简写 + h: { + type: [String, Number], + default: null + }, + top: { + type: [String, Number], + default: 0 + }, + right: { + type: [String, Number], + default: 0 + }, + bottom: { + type: [String, Number], + default: 0 + }, + left: { + type: [String, Number], + default: 0 + } + }, + computed: { + viewStyle() { + const style = {} + const addStyle = uni.$u.addStyle(this.width || this.w) && (style.width = addStyle(this.width || this.w))(this.height || this.h) && (style.height = addStyle(this.height || this.h))(this.margin || this.m) && (style.margin = addStyle(this.margin || this.m))(this.marginTop || this.mt) && (style.marginTop = addStyle(this.marginTop || this.mt))(this.marginRight || this.mr) && (style.marginRight = addStyle(this.marginRight || this.mr))(this.marginBottom || this.mb) && (style.marginBottom = addStyle(this.marginBottom || this.mb))(this.marginLeft || this.ml) && (style.marginLeft = addStyle(this.marginLeft || this.ml))(this.padding || this.p) && (style.padding = addStyle(this.padding || this.p))(this.paddingTop || this.pt) && (style.paddingTop = addStyle(this.paddingTop || this.pt))(this.paddingRight || this.pr) && (style.paddingRight = addStyle(this.paddingRight || this.pr))(this.paddingBottom || this.pb) && (style.paddingBottom = addStyle(this.paddingBottom || this.pb))(this.paddingLeft || this.pl) && (style.paddingLeft = addStyle(this.paddingLeft || this.pl))(this.color || this.c) && (style.color = this.color || this.c)(this.fontSize || this.fs) && (style.fontSize = this.fontSize || this.fs)(this.borderRadius || this.radius) && (style.borderRadius = this.borderRadius || this.radius)(this.position || this.pos) && (this.position = this.position || this.pos)(this.flexDirection || this.fd) && (this.flexDirection = this.flexDirection || this.fd)(this.justifyContent || jc) && (this.justifyContent = this.justifyContent || jc)(this.alignItems || ai) && (this.alignItems = this.alignItems || ai) + + return uni.$u.deepMerge(style, uni.$u.addStyle(this.customStyle)) + } + }, + methods: { + // 获取margin或者padding的单位,比如padding: 0 20转为padding: 0 20px + getUnit(unit = '') { + // 取出两端空格,分隔成数组,再对数组的每个元素添加单位,最后再合并成字符串 + return uni.$u.trim(unit).split(' ').map((item) => uni.$u.addUnit(item)).join(' ') + } + } +} diff --git a/uni_modules/uview-ui/libs/mixin/touch.js b/uni_modules/uview-ui/libs/mixin/touch.js new file mode 100644 index 0000000..0ecbd88 --- /dev/null +++ b/uni_modules/uview-ui/libs/mixin/touch.js @@ -0,0 +1,59 @@ +const MIN_DISTANCE = 10 + +function getDirection(x, y) { + if (x > y && x > MIN_DISTANCE) { + return 'horizontal' + } + if (y > x && y > MIN_DISTANCE) { + return 'vertical' + } + return '' +} + +export default { + methods: { + getTouchPoint(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 + } + } if (e.changedTouches && e.changedTouches[0]) { + return { + x: e.changedTouches[0].pageX, + y: e.changedTouches[0].pageY + } + } + return { + x: e.clientX || 0, + y: e.clientY || 0 + } + }, + resetTouchStatus() { + this.direction = '' + this.deltaX = 0 + this.deltaY = 0 + this.offsetX = 0 + this.offsetY = 0 + }, + touchStart(event) { + this.resetTouchStatus() + const touch = this.getTouchPoint(event) + this.startX = touch.x + this.startY = touch.y + }, + touchMove(event) { + const touch = this.getTouchPoint(event) + this.deltaX = touch.x - this.startX + this.deltaY = touch.y - this.startY + this.offsetX = Math.abs(this.deltaX) + this.offsetY = Math.abs(this.deltaY) + this.direction = this.direction || getDirection(this.offsetX, this.offsetY) + } + } +} diff --git a/uni_modules/uview-ui/libs/util/async-validator.js b/uni_modules/uview-ui/libs/util/async-validator.js new file mode 100644 index 0000000..9e114df --- /dev/null +++ b/uni_modules/uview-ui/libs/util/async-validator.js @@ -0,0 +1,1343 @@ +function _extends() { + _extends = Object.assign || function (target) { + for (let i = 1; i < arguments.length; i++) { + const source = arguments[i] + + for (const key in source) { + if (Object.prototype.hasOwnProperty.call(source, key)) { + target[key] = source[key] + } + } + } + + return target + } + + return _extends.apply(this, arguments) +} + +/* eslint no-console:0 */ +const formatRegExp = /%[sdj%]/g +let 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((e) => typeof e === 'string')) { + console.warn(type, errors) + } + } + } +} + +function convertFieldsError(errors) { + if (!errors || !errors.length) return null + const fields = {} + errors.forEach((error) => { + const { field } = error + 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] + } + + let i = 1 + const f = args[0] + const len = args.length + + if (typeof f === 'function') { + return f.apply(null, args.slice(1)) + } + + if (typeof f === 'string') { + let str = String(f).replace(formatRegExp, (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 + } + }) + + for (let arg = args[i]; i < len; arg = args[++i]) { + str += ` ${arg}` + } + + return str + } + + return f +} + +function isNativeStringType(type) { + return type === 'string' || type === 'url' || type === 'hex' || type === 'email' || 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) { + const results = [] + let total = 0 + const arrLength = arr.length + + function count(errors) { + results.push.apply(results, errors) + total++ + + if (total === arrLength) { + callback(results) + } + } + + arr.forEach((a) => { + func(a, count) + }) +} + +function asyncSerialArray(arr, func, callback) { + let index = 0 + const arrLength = arr.length + + function next(errors) { + if (errors && errors.length) { + callback(errors) + return + } + + const original = index + index += 1 + + if (original < arrLength) { + func(arr[original], next) + } else { + callback([]) + } + } + + next([]) +} + +function flattenObjArr(objArr) { + const ret = [] + Object.keys(objArr).forEach((k) => { + ret.push.apply(ret, objArr[k]) + }) + return ret +} + +function asyncMap(objArr, option, func, callback) { + if (option.first) { + const _pending = new Promise((resolve, reject) => { + const next = function next(errors) { + callback(errors) + return errors.length ? reject({ + errors, + fields: convertFieldsError(errors) + }) : resolve() + } + + const flattenArr = flattenObjArr(objArr) + asyncSerialArray(flattenArr, func, next) + }) + + _pending.catch((e) => e) + + return _pending + } + + let firstFields = option.firstFields || [] + + if (firstFields === true) { + firstFields = Object.keys(objArr) + } + + const objArrKeys = Object.keys(objArr) + const objArrLength = objArrKeys.length + let total = 0 + const results = [] + const pending = new Promise((resolve, reject) => { + const next = function next(errors) { + results.push.apply(results, errors) + total++ + + if (total === objArrLength) { + callback(results) + return results.length ? reject({ + errors: results, + fields: convertFieldsError(results) + }) : resolve() + } + } + + if (!objArrKeys.length) { + callback(results) + resolve() + } + + objArrKeys.forEach((key) => { + const arr = objArr[key] + + if (firstFields.indexOf(key) !== -1) { + asyncSerialArray(arr, func, next) + } else { + asyncParallelArray(arr, func, next) + } + }) + }) + pending.catch((e) => 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 (const s in source) { + if (source.hasOwnProperty(s)) { + const value = source[s] + + if (typeof value === 'object' && typeof target[s] === 'object') { + target[s] = { ...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 */ + +const 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 /^(-)?\d+$/.test(value); + }, + float: function float(value) { + return /^(-)?\d+(\.\d+)?$/.test(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' + }, + 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 + } + + const custom = ['integer', 'float', 'array', 'regexp', 'object', 'method', 'email', 'number', 'date', 'url', 'hex'] + const 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) { + const len = typeof rule.len === 'number' + const min = typeof rule.min === 'number' + const max = typeof rule.max === 'number' // 正则匹配码点范围从U+010000一直到U+10FFFF的文字(补充平面Supplementary Plane) + + const spRegexp = /[\uD800-\uDBFF][\uDC00-\uDFFF]/g + let val = value + let key = null + const num = typeof value === 'number' + const str = typeof value === 'string' + const 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)) + } +} + +const 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') { + const _pattern = new RegExp(rule.pattern) + + if (!_pattern.test(value)) { + errors.push(format(options.messages.pattern.mismatch, rule.fullField, value, rule.pattern)) + } + } + } +} + +const rules = { + required, + whitespace, + type, + 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) { + const errors = [] + const 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) { + const errors = [] + const 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) { + const errors = [] + const 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) { + const errors = [] + const 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) { + const errors = [] + const 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) { + const errors = [] + const 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) { + const errors = [] + const 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) { + const errors = [] + const validate = rule.required || !rule.required && source.hasOwnProperty(rule.field) + + if (validate) { + if (isEmptyValue(value, 'array') && !rule.required) { + return callback() + } + + rules.required(rule, value, source, errors, options, 'array') + + if (!isEmptyValue(value, 'array')) { + 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) { + const errors = [] + const 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) +} + +const 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) { + const errors = [] + const 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) { + const errors = [] + const 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) { + const errors = [] + const 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)) { + let dateObject + + if (typeof value === 'number') { + dateObject = new Date(value) + } else { + dateObject = 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) { + const errors = [] + const 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) { + const ruleType = rule.type + const errors = [] + const 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) { + const errors = [] + const 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) +} + +const validators = { + string, + method, + number, + boolean: _boolean, + regexp, + integer, + float: floatFn, + array, + object, + enum: enumerable$1, + pattern: pattern$2, + date, + url: type$1, + hex: type$1, + email: type$1, + required: required$1, + 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() { + const cloned = JSON.parse(JSON.stringify(this)) + cloned.clone = this.clone + return cloned + } + } +} +const 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 = {} + let z + let 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) { + const _this = this + + if (o === void 0) { + o = {} + } + + if (oc === void 0) { + oc = function oc() {} + } + + let source = source_ + let options = o + let 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) { + let i + let errors = [] + let fields = {} + + function add(e) { + if (Array.isArray(e)) { + let _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) { + let 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() + } + + let arr + let value + const series = {} + const keys = options.keys || Object.keys(this.rules) + keys.forEach((z) => { + arr = _this.rules[z] + value = source[z] + arr.forEach((r) => { + let rule = r + + if (typeof rule.transform === 'function') { + if (source === source_) { + source = { ...source } + } + + value = source[z] = rule.transform(value) + } + + if (typeof rule === 'function') { + rule = { + validator: rule + } + } else { + rule = { ...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, + value, + source, + field: z + }) + }) + }) + const errorFields = {} + return asyncMap(series, options, (data, doIt) => { + const { rule } = data + let 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 { ...schema, fullField: `${rule.fullField}.${key}` } + } + + function cb(e) { + if (e === void 0) { + e = [] + } + + let errors = e + + if (!Array.isArray(errors)) { + errors = [errors] + } + + if (!options.suppressWarning && errors.length) { + Schema.warning('async-validator:', errors) + } + + if (errors.length && rule.message) { + 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) { + errors = [].concat(rule.message).map(complementError(rule)) + } else if (options.error) { + errors = [options.error(rule, format(options.messages.required, rule.field))] + } else { + errors = [] + } + + return doIt(errors) + } + + let fieldsSchema = {} + + if (rule.defaultField) { + for (const k in data.value) { + if (data.value.hasOwnProperty(k)) { + fieldsSchema[k] = rule.defaultField + } + } + } + + fieldsSchema = { ...fieldsSchema, ...data.rule.fields } + + for (const f in fieldsSchema) { + if (fieldsSchema.hasOwnProperty(f)) { + const fieldSchema = Array.isArray(fieldsSchema[f]) ? fieldsSchema[f] : [fieldsSchema[f]] + fieldsSchema[f] = fieldSchema.map(addFullfield.bind(null, f)) + } + } + + const 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, (errs) => { + const finalErrors = [] + + if (errors && errors.length) { + finalErrors.push.apply(finalErrors, errors) + } + + if (errs && errs.length) { + finalErrors.push.apply(finalErrors, errs) + } + + doIt(finalErrors.length ? finalErrors : null) + }) + } + } + + let 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(() => cb(), (e) => cb(e)) + } + }, (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 + } + + const keys = Object.keys(rule) + const 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 + +export default Schema +// # sourceMappingURL=index.js.map diff --git a/uni_modules/uview-ui/libs/util/calendar.js b/uni_modules/uview-ui/libs/util/calendar.js new file mode 100644 index 0000000..e006dea --- /dev/null +++ b/uni_modules/uview-ui/libs/util/calendar.js @@ -0,0 +1,546 @@ +/** +* @1900-2100区间内的公历、农历互转 +* @charset UTF-8 +* @github https://github.com/jjonline/calendar.js +* @Author Jea杨(JJonline@JJonline.Cn) +* @Time 2014-7-21 +* @Time 2016-8-13 Fixed 2033hex、Attribution Annals +* @Time 2016-9-25 Fixed lunar LeapMonth Param Bug +* @Time 2017-7-24 Fixed use getTerm Func Param Error.use solar year,NOT lunar year +* @Version 1.0.3 +* @公历转农历:calendar.solar2lunar(1987,11,01); //[you can ignore params of prefix 0] +* @农历转公历:calendar.lunar2solar(1987,09,10); //[you can ignore params of prefix 0] +*/ +/* eslint-disable */ +var calendar = { + + /** + * 农历1900-2100的润大小信息表 + * @Array Of Property + * @return Hex + */ + lunarInfo: [0x04bd8, 0x04ae0, 0x0a570, 0x054d5, 0x0d260, 0x0d950, 0x16554, 0x056a0, 0x09ad0, 0x055d2, // 1900-1909 + 0x04ae0, 0x0a5b6, 0x0a4d0, 0x0d250, 0x1d255, 0x0b540, 0x0d6a0, 0x0ada2, 0x095b0, 0x14977, // 1910-1919 + 0x04970, 0x0a4b0, 0x0b4b5, 0x06a50, 0x06d40, 0x1ab54, 0x02b60, 0x09570, 0x052f2, 0x04970, // 1920-1929 + 0x06566, 0x0d4a0, 0x0ea50, 0x06e95, 0x05ad0, 0x02b60, 0x186e3, 0x092e0, 0x1c8d7, 0x0c950, // 1930-1939 + 0x0d4a0, 0x1d8a6, 0x0b550, 0x056a0, 0x1a5b4, 0x025d0, 0x092d0, 0x0d2b2, 0x0a950, 0x0b557, // 1940-1949 + 0x06ca0, 0x0b550, 0x15355, 0x04da0, 0x0a5b0, 0x14573, 0x052b0, 0x0a9a8, 0x0e950, 0x06aa0, // 1950-1959 + 0x0aea6, 0x0ab50, 0x04b60, 0x0aae4, 0x0a570, 0x05260, 0x0f263, 0x0d950, 0x05b57, 0x056a0, // 1960-1969 + 0x096d0, 0x04dd5, 0x04ad0, 0x0a4d0, 0x0d4d4, 0x0d250, 0x0d558, 0x0b540, 0x0b6a0, 0x195a6, // 1970-1979 + 0x095b0, 0x049b0, 0x0a974, 0x0a4b0, 0x0b27a, 0x06a50, 0x06d40, 0x0af46, 0x0ab60, 0x09570, // 1980-1989 + 0x04af5, 0x04970, 0x064b0, 0x074a3, 0x0ea50, 0x06b58, 0x05ac0, 0x0ab60, 0x096d5, 0x092e0, // 1990-1999 + 0x0c960, 0x0d954, 0x0d4a0, 0x0da50, 0x07552, 0x056a0, 0x0abb7, 0x025d0, 0x092d0, 0x0cab5, // 2000-2009 + 0x0a950, 0x0b4a0, 0x0baa4, 0x0ad50, 0x055d9, 0x04ba0, 0x0a5b0, 0x15176, 0x052b0, 0x0a930, // 2010-2019 + 0x07954, 0x06aa0, 0x0ad50, 0x05b52, 0x04b60, 0x0a6e6, 0x0a4e0, 0x0d260, 0x0ea65, 0x0d530, // 2020-2029 + 0x05aa0, 0x076a3, 0x096d0, 0x04afb, 0x04ad0, 0x0a4d0, 0x1d0b6, 0x0d250, 0x0d520, 0x0dd45, // 2030-2039 + 0x0b5a0, 0x056d0, 0x055b2, 0x049b0, 0x0a577, 0x0a4b0, 0x0aa50, 0x1b255, 0x06d20, 0x0ada0, // 2040-2049 + /** Add By JJonline@JJonline.Cn**/ + 0x14b63, 0x09370, 0x049f8, 0x04970, 0x064b0, 0x168a6, 0x0ea50, 0x06b20, 0x1a6c4, 0x0aae0, // 2050-2059 + 0x0a2e0, 0x0d2e3, 0x0c960, 0x0d557, 0x0d4a0, 0x0da50, 0x05d55, 0x056a0, 0x0a6d0, 0x055d4, // 2060-2069 + 0x052d0, 0x0a9b8, 0x0a950, 0x0b4a0, 0x0b6a6, 0x0ad50, 0x055a0, 0x0aba4, 0x0a5b0, 0x052b0, // 2070-2079 + 0x0b273, 0x06930, 0x07337, 0x06aa0, 0x0ad50, 0x14b55, 0x04b60, 0x0a570, 0x054e4, 0x0d160, // 2080-2089 + 0x0e968, 0x0d520, 0x0daa0, 0x16aa6, 0x056d0, 0x04ae0, 0x0a9d4, 0x0a2d0, 0x0d150, 0x0f252, // 2090-2099 + 0x0d520], // 2100 + + /** + * 公历每个月份的天数普通表 + * @Array Of Property + * @return Number + */ + solarMonth: [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31], + + /** + * 天干地支之天干速查表 + * @Array Of Property trans["甲","乙","丙","丁","戊","己","庚","辛","壬","癸"] + * @return Cn string + */ + Gan: ['\u7532', '\u4e59', '\u4e19', '\u4e01', '\u620a', '\u5df1', '\u5e9a', '\u8f9b', '\u58ec', '\u7678'], + + /** + * 天干地支之地支速查表 + * @Array Of Property + * @trans["子","丑","寅","卯","辰","巳","午","未","申","酉","戌","亥"] + * @return Cn string + */ + Zhi: ['\u5b50', '\u4e11', '\u5bc5', '\u536f', '\u8fb0', '\u5df3', '\u5348', '\u672a', '\u7533', '\u9149', '\u620c', '\u4ea5'], + + /** + * 天干地支之地支速查表<=>生肖 + * @Array Of Property + * @trans["鼠","牛","虎","兔","龙","蛇","马","羊","猴","鸡","狗","猪"] + * @return Cn string + */ + Animals: ['\u9f20', '\u725b', '\u864e', '\u5154', '\u9f99', '\u86c7', '\u9a6c', '\u7f8a', '\u7334', '\u9e21', '\u72d7', '\u732a'], + + /** + * 24节气速查表 + * @Array Of Property + * @trans["小寒","大寒","立春","雨水","惊蛰","春分","清明","谷雨","立夏","小满","芒种","夏至","小暑","大暑","立秋","处暑","白露","秋分","寒露","霜降","立冬","小雪","大雪","冬至"] + * @return Cn string + */ + solarTerm: ['\u5c0f\u5bd2', '\u5927\u5bd2', '\u7acb\u6625', '\u96e8\u6c34', '\u60ca\u86f0', '\u6625\u5206', '\u6e05\u660e', '\u8c37\u96e8', '\u7acb\u590f', '\u5c0f\u6ee1', '\u8292\u79cd', '\u590f\u81f3', '\u5c0f\u6691', '\u5927\u6691', '\u7acb\u79cb', '\u5904\u6691', '\u767d\u9732', '\u79cb\u5206', '\u5bd2\u9732', '\u971c\u964d', '\u7acb\u51ac', '\u5c0f\u96ea', '\u5927\u96ea', '\u51ac\u81f3'], + + /** + * 1900-2100各年的24节气日期速查表 + * @Array Of Property + * @return 0x string For splice + */ + sTermInfo: ['9778397bd097c36b0b6fc9274c91aa', '97b6b97bd19801ec9210c965cc920e', '97bcf97c3598082c95f8c965cc920f', + '97bd0b06bdb0722c965ce1cfcc920f', 'b027097bd097c36b0b6fc9274c91aa', '97b6b97bd19801ec9210c965cc920e', + '97bcf97c359801ec95f8c965cc920f', '97bd0b06bdb0722c965ce1cfcc920f', 'b027097bd097c36b0b6fc9274c91aa', + '97b6b97bd19801ec9210c965cc920e', '97bcf97c359801ec95f8c965cc920f', '97bd0b06bdb0722c965ce1cfcc920f', + 'b027097bd097c36b0b6fc9274c91aa', '9778397bd19801ec9210c965cc920e', '97b6b97bd19801ec95f8c965cc920f', + '97bd09801d98082c95f8e1cfcc920f', '97bd097bd097c36b0b6fc9210c8dc2', '9778397bd197c36c9210c9274c91aa', + '97b6b97bd19801ec95f8c965cc920e', '97bd09801d98082c95f8e1cfcc920f', '97bd097bd097c36b0b6fc9210c8dc2', + '9778397bd097c36c9210c9274c91aa', '97b6b97bd19801ec95f8c965cc920e', '97bcf97c3598082c95f8e1cfcc920f', + '97bd097bd097c36b0b6fc9210c8dc2', '9778397bd097c36c9210c9274c91aa', '97b6b97bd19801ec9210c965cc920e', + '97bcf97c3598082c95f8c965cc920f', '97bd097bd097c35b0b6fc920fb0722', '9778397bd097c36b0b6fc9274c91aa', + '97b6b97bd19801ec9210c965cc920e', '97bcf97c3598082c95f8c965cc920f', '97bd097bd097c35b0b6fc920fb0722', + '9778397bd097c36b0b6fc9274c91aa', '97b6b97bd19801ec9210c965cc920e', '97bcf97c359801ec95f8c965cc920f', + '97bd097bd097c35b0b6fc920fb0722', '9778397bd097c36b0b6fc9274c91aa', '97b6b97bd19801ec9210c965cc920e', + '97bcf97c359801ec95f8c965cc920f', '97bd097bd097c35b0b6fc920fb0722', '9778397bd097c36b0b6fc9274c91aa', + '97b6b97bd19801ec9210c965cc920e', '97bcf97c359801ec95f8c965cc920f', '97bd097bd07f595b0b6fc920fb0722', + '9778397bd097c36b0b6fc9210c8dc2', '9778397bd19801ec9210c9274c920e', '97b6b97bd19801ec95f8c965cc920f', + '97bd07f5307f595b0b0bc920fb0722', '7f0e397bd097c36b0b6fc9210c8dc2', '9778397bd097c36c9210c9274c920e', + '97b6b97bd19801ec95f8c965cc920f', '97bd07f5307f595b0b0bc920fb0722', '7f0e397bd097c36b0b6fc9210c8dc2', + '9778397bd097c36c9210c9274c91aa', '97b6b97bd19801ec9210c965cc920e', '97bd07f1487f595b0b0bc920fb0722', + '7f0e397bd097c36b0b6fc9210c8dc2', '9778397bd097c36b0b6fc9274c91aa', '97b6b97bd19801ec9210c965cc920e', + '97bcf7f1487f595b0b0bb0b6fb0722', '7f0e397bd097c35b0b6fc920fb0722', '9778397bd097c36b0b6fc9274c91aa', + '97b6b97bd19801ec9210c965cc920e', '97bcf7f1487f595b0b0bb0b6fb0722', '7f0e397bd097c35b0b6fc920fb0722', + '9778397bd097c36b0b6fc9274c91aa', '97b6b97bd19801ec9210c965cc920e', '97bcf7f1487f531b0b0bb0b6fb0722', + '7f0e397bd097c35b0b6fc920fb0722', '9778397bd097c36b0b6fc9274c91aa', '97b6b97bd19801ec9210c965cc920e', + '97bcf7f1487f531b0b0bb0b6fb0722', '7f0e397bd07f595b0b6fc920fb0722', '9778397bd097c36b0b6fc9274c91aa', + '97b6b97bd19801ec9210c9274c920e', '97bcf7f0e47f531b0b0bb0b6fb0722', '7f0e397bd07f595b0b0bc920fb0722', + '9778397bd097c36b0b6fc9210c91aa', '97b6b97bd197c36c9210c9274c920e', '97bcf7f0e47f531b0b0bb0b6fb0722', + '7f0e397bd07f595b0b0bc920fb0722', '9778397bd097c36b0b6fc9210c8dc2', '9778397bd097c36c9210c9274c920e', + '97b6b7f0e47f531b0723b0b6fb0722', '7f0e37f5307f595b0b0bc920fb0722', '7f0e397bd097c36b0b6fc9210c8dc2', + '9778397bd097c36b0b70c9274c91aa', '97b6b7f0e47f531b0723b0b6fb0721', '7f0e37f1487f595b0b0bb0b6fb0722', + '7f0e397bd097c35b0b6fc9210c8dc2', '9778397bd097c36b0b6fc9274c91aa', '97b6b7f0e47f531b0723b0b6fb0721', + '7f0e27f1487f595b0b0bb0b6fb0722', '7f0e397bd097c35b0b6fc920fb0722', '9778397bd097c36b0b6fc9274c91aa', + '97b6b7f0e47f531b0723b0b6fb0721', '7f0e27f1487f531b0b0bb0b6fb0722', '7f0e397bd097c35b0b6fc920fb0722', + '9778397bd097c36b0b6fc9274c91aa', '97b6b7f0e47f531b0723b0b6fb0721', '7f0e27f1487f531b0b0bb0b6fb0722', + '7f0e397bd097c35b0b6fc920fb0722', '9778397bd097c36b0b6fc9274c91aa', '97b6b7f0e47f531b0723b0b6fb0721', + '7f0e27f1487f531b0b0bb0b6fb0722', '7f0e397bd07f595b0b0bc920fb0722', '9778397bd097c36b0b6fc9274c91aa', + '97b6b7f0e47f531b0723b0787b0721', '7f0e27f0e47f531b0b0bb0b6fb0722', '7f0e397bd07f595b0b0bc920fb0722', + '9778397bd097c36b0b6fc9210c91aa', '97b6b7f0e47f149b0723b0787b0721', '7f0e27f0e47f531b0723b0b6fb0722', + '7f0e397bd07f595b0b0bc920fb0722', '9778397bd097c36b0b6fc9210c8dc2', '977837f0e37f149b0723b0787b0721', + '7f07e7f0e47f531b0723b0b6fb0722', '7f0e37f5307f595b0b0bc920fb0722', '7f0e397bd097c35b0b6fc9210c8dc2', + '977837f0e37f14998082b0787b0721', '7f07e7f0e47f531b0723b0b6fb0721', '7f0e37f1487f595b0b0bb0b6fb0722', + '7f0e397bd097c35b0b6fc9210c8dc2', '977837f0e37f14998082b0787b06bd', '7f07e7f0e47f531b0723b0b6fb0721', + '7f0e27f1487f531b0b0bb0b6fb0722', '7f0e397bd097c35b0b6fc920fb0722', '977837f0e37f14998082b0787b06bd', + '7f07e7f0e47f531b0723b0b6fb0721', '7f0e27f1487f531b0b0bb0b6fb0722', '7f0e397bd097c35b0b6fc920fb0722', + '977837f0e37f14998082b0787b06bd', '7f07e7f0e47f531b0723b0b6fb0721', '7f0e27f1487f531b0b0bb0b6fb0722', + '7f0e397bd07f595b0b0bc920fb0722', '977837f0e37f14998082b0787b06bd', '7f07e7f0e47f531b0723b0b6fb0721', + '7f0e27f1487f531b0b0bb0b6fb0722', '7f0e397bd07f595b0b0bc920fb0722', '977837f0e37f14998082b0787b06bd', + '7f07e7f0e47f149b0723b0787b0721', '7f0e27f0e47f531b0b0bb0b6fb0722', '7f0e397bd07f595b0b0bc920fb0722', + '977837f0e37f14998082b0723b06bd', '7f07e7f0e37f149b0723b0787b0721', '7f0e27f0e47f531b0723b0b6fb0722', + '7f0e397bd07f595b0b0bc920fb0722', '977837f0e37f14898082b0723b02d5', '7ec967f0e37f14998082b0787b0721', + '7f07e7f0e47f531b0723b0b6fb0722', '7f0e37f1487f595b0b0bb0b6fb0722', '7f0e37f0e37f14898082b0723b02d5', + '7ec967f0e37f14998082b0787b0721', '7f07e7f0e47f531b0723b0b6fb0722', '7f0e37f1487f531b0b0bb0b6fb0722', + '7f0e37f0e37f14898082b0723b02d5', '7ec967f0e37f14998082b0787b06bd', '7f07e7f0e47f531b0723b0b6fb0721', + '7f0e37f1487f531b0b0bb0b6fb0722', '7f0e37f0e37f14898082b072297c35', '7ec967f0e37f14998082b0787b06bd', + '7f07e7f0e47f531b0723b0b6fb0721', '7f0e27f1487f531b0b0bb0b6fb0722', '7f0e37f0e37f14898082b072297c35', + '7ec967f0e37f14998082b0787b06bd', '7f07e7f0e47f531b0723b0b6fb0721', '7f0e27f1487f531b0b0bb0b6fb0722', + '7f0e37f0e366aa89801eb072297c35', '7ec967f0e37f14998082b0787b06bd', '7f07e7f0e47f149b0723b0787b0721', + '7f0e27f1487f531b0b0bb0b6fb0722', '7f0e37f0e366aa89801eb072297c35', '7ec967f0e37f14998082b0723b06bd', + '7f07e7f0e47f149b0723b0787b0721', '7f0e27f0e47f531b0723b0b6fb0722', '7f0e37f0e366aa89801eb072297c35', + '7ec967f0e37f14998082b0723b06bd', '7f07e7f0e37f14998083b0787b0721', '7f0e27f0e47f531b0723b0b6fb0722', + '7f0e37f0e366aa89801eb072297c35', '7ec967f0e37f14898082b0723b02d5', '7f07e7f0e37f14998082b0787b0721', + '7f07e7f0e47f531b0723b0b6fb0722', '7f0e36665b66aa89801e9808297c35', '665f67f0e37f14898082b0723b02d5', + '7ec967f0e37f14998082b0787b0721', '7f07e7f0e47f531b0723b0b6fb0722', '7f0e36665b66a449801e9808297c35', + '665f67f0e37f14898082b0723b02d5', '7ec967f0e37f14998082b0787b06bd', '7f07e7f0e47f531b0723b0b6fb0721', + '7f0e36665b66a449801e9808297c35', '665f67f0e37f14898082b072297c35', '7ec967f0e37f14998082b0787b06bd', + '7f07e7f0e47f531b0723b0b6fb0721', '7f0e26665b66a449801e9808297c35', '665f67f0e37f1489801eb072297c35', + '7ec967f0e37f14998082b0787b06bd', '7f07e7f0e47f531b0723b0b6fb0721', '7f0e27f1487f531b0b0bb0b6fb0722'], + + /** + * 数字转中文速查表 + * @Array Of Property + * @trans ['日','一','二','三','四','五','六','七','八','九','十'] + * @return Cn string + */ + nStr1: ['\u65e5', '\u4e00', '\u4e8c', '\u4e09', '\u56db', '\u4e94', '\u516d', '\u4e03', '\u516b', '\u4e5d', '\u5341'], + + /** + * 日期转农历称呼速查表 + * @Array Of Property + * @trans ['初','十','廿','卅'] + * @return Cn string + */ + nStr2: ['\u521d', '\u5341', '\u5eff', '\u5345'], + + /** + * 月份转农历称呼速查表 + * @Array Of Property + * @trans ['正','一','二','三','四','五','六','七','八','九','十','冬','腊'] + * @return Cn string + */ + nStr3: ['\u6b63', '\u4e8c', '\u4e09', '\u56db', '\u4e94', '\u516d', '\u4e03', '\u516b', '\u4e5d', '\u5341', '\u51ac', '\u814a'], + + /** + * 返回农历y年一整年的总天数 + * @param lunar Year + * @return Number + * @eg:var count = calendar.lYearDays(1987) ;//count=387 + */ + lYearDays: function (y) { + var i; var sum = 348 + for (i = 0x8000; i > 0x8; i >>= 1) { sum += (this.lunarInfo[y - 1900] & i) ? 1 : 0 } + return (sum + this.leapDays(y)) + }, + + /** + * 返回农历y年闰月是哪个月;若y年没有闰月 则返回0 + * @param lunar Year + * @return Number (0-12) + * @eg:var leapMonth = calendar.leapMonth(1987) ;//leapMonth=6 + */ + leapMonth: function (y) { // 闰字编码 \u95f0 + return (this.lunarInfo[y - 1900] & 0xf) + }, + + /** + * 返回农历y年闰月的天数 若该年没有闰月则返回0 + * @param lunar Year + * @return Number (0、29、30) + * @eg:var leapMonthDay = calendar.leapDays(1987) ;//leapMonthDay=29 + */ + leapDays: function (y) { + if (this.leapMonth(y)) { + return ((this.lunarInfo[y - 1900] & 0x10000) ? 30 : 29) + } + return (0) + }, + + /** + * 返回农历y年m月(非闰月)的总天数,计算m为闰月时的天数请使用leapDays方法 + * @param lunar Year + * @return Number (-1、29、30) + * @eg:var MonthDay = calendar.monthDays(1987,9) ;//MonthDay=29 + */ + monthDays: function (y, m) { + if (m > 12 || m < 1) { return -1 }// 月份参数从1至12,参数错误返回-1 + return ((this.lunarInfo[y - 1900] & (0x10000 >> m)) ? 30 : 29) + }, + + /** + * 返回公历(!)y年m月的天数 + * @param solar Year + * @return Number (-1、28、29、30、31) + * @eg:var solarMonthDay = calendar.leapDays(1987) ;//solarMonthDay=30 + */ + solarDays: function (y, m) { + if (m > 12 || m < 1) { return -1 } // 若参数错误 返回-1 + var ms = m - 1 + if (ms == 1) { // 2月份的闰平规律测算后确认返回28或29 + return (((y % 4 == 0) && (y % 100 != 0) || (y % 400 == 0)) ? 29 : 28) + } else { + return (this.solarMonth[ms]) + } + }, + + /** + * 农历年份转换为干支纪年 + * @param lYear 农历年的年份数 + * @return Cn string + */ + toGanZhiYear: function (lYear) { + var ganKey = (lYear - 3) % 10 + var zhiKey = (lYear - 3) % 12 + if (ganKey == 0) ganKey = 10// 如果余数为0则为最后一个天干 + if (zhiKey == 0) zhiKey = 12// 如果余数为0则为最后一个地支 + return this.Gan[ganKey - 1] + this.Zhi[zhiKey - 1] + }, + + /** + * 公历月、日判断所属星座 + * @param cMonth [description] + * @param cDay [description] + * @return Cn string + */ + toAstro: function (cMonth, cDay) { + var s = '\u9b54\u7faf\u6c34\u74f6\u53cc\u9c7c\u767d\u7f8a\u91d1\u725b\u53cc\u5b50\u5de8\u87f9\u72ee\u5b50\u5904\u5973\u5929\u79e4\u5929\u874e\u5c04\u624b\u9b54\u7faf' + var arr = [20, 19, 21, 21, 21, 22, 23, 23, 23, 23, 22, 22] + return s.substr(cMonth * 2 - (cDay < arr[cMonth - 1] ? 2 : 0), 2) + '\u5ea7'// 座 + }, + + /** + * 传入offset偏移量返回干支 + * @param offset 相对甲子的偏移量 + * @return Cn string + */ + toGanZhi: function (offset) { + return this.Gan[offset % 10] + this.Zhi[offset % 12] + }, + + /** + * 传入公历(!)y年获得该年第n个节气的公历日期 + * @param y公历年(1900-2100);n二十四节气中的第几个节气(1~24);从n=1(小寒)算起 + * @return day Number + * @eg:var _24 = calendar.getTerm(1987,3) ;//_24=4;意即1987年2月4日立春 + */ + getTerm: function (y, n) { + if (y < 1900 || y > 2100) { return -1 } + if (n < 1 || n > 24) { return -1 } + var _table = this.sTermInfo[y - 1900] + var _info = [ + parseInt('0x' + _table.substr(0, 5)).toString(), + parseInt('0x' + _table.substr(5, 5)).toString(), + parseInt('0x' + _table.substr(10, 5)).toString(), + parseInt('0x' + _table.substr(15, 5)).toString(), + parseInt('0x' + _table.substr(20, 5)).toString(), + parseInt('0x' + _table.substr(25, 5)).toString() + ] + var _calday = [ + _info[0].substr(0, 1), + _info[0].substr(1, 2), + _info[0].substr(3, 1), + _info[0].substr(4, 2), + + _info[1].substr(0, 1), + _info[1].substr(1, 2), + _info[1].substr(3, 1), + _info[1].substr(4, 2), + + _info[2].substr(0, 1), + _info[2].substr(1, 2), + _info[2].substr(3, 1), + _info[2].substr(4, 2), + + _info[3].substr(0, 1), + _info[3].substr(1, 2), + _info[3].substr(3, 1), + _info[3].substr(4, 2), + + _info[4].substr(0, 1), + _info[4].substr(1, 2), + _info[4].substr(3, 1), + _info[4].substr(4, 2), + + _info[5].substr(0, 1), + _info[5].substr(1, 2), + _info[5].substr(3, 1), + _info[5].substr(4, 2) + ] + return parseInt(_calday[n - 1]) + }, + + /** + * 传入农历数字月份返回汉语通俗表示法 + * @param lunar month + * @return Cn string + * @eg:var cnMonth = calendar.toChinaMonth(12) ;//cnMonth='腊月' + */ + toChinaMonth: function (m) { // 月 => \u6708 + if (m > 12 || m < 1) { return -1 } // 若参数错误 返回-1 + var s = this.nStr3[m - 1] + s += '\u6708'// 加上月字 + return s + }, + + /** + * 传入农历日期数字返回汉字表示法 + * @param lunar day + * @return Cn string + * @eg:var cnDay = calendar.toChinaDay(21) ;//cnMonth='廿一' + */ + toChinaDay: function (d) { // 日 => \u65e5 + var s + switch (d) { + case 10: + s = '\u521d\u5341'; break + case 20: + s = '\u4e8c\u5341'; break + break + case 30: + s = '\u4e09\u5341'; break + break + default: + s = this.nStr2[Math.floor(d / 10)] + s += this.nStr1[d % 10] + } + return (s) + }, + + /** + * 年份转生肖[!仅能大致转换] => 精确划分生肖分界线是“立春” + * @param y year + * @return Cn string + * @eg:var animal = calendar.getAnimal(1987) ;//animal='兔' + */ + getAnimal: function (y) { + return this.Animals[(y - 4) % 12] + }, + + /** + * 传入阳历年月日获得详细的公历、农历object信息 <=>JSON + * @param y solar year + * @param m solar month + * @param d solar day + * @return JSON object + * @eg:console.log(calendar.solar2lunar(1987,11,01)); + */ + solar2lunar: function (y, m, d) { // 参数区间1900.1.31~2100.12.31 + // 年份限定、上限 + if (y < 1900 || y > 2100) { + return -1// undefined转换为数字变为NaN + } + // 公历传参最下限 + if (y == 1900 && m == 1 && d < 31) { + return -1 + } + // 未传参 获得当天 + if (!y) { + var objDate = new Date() + } else { + var objDate = new Date(y, parseInt(m) - 1, d) + } + var i; var leap = 0; var temp = 0 + // 修正ymd参数 + var y = objDate.getFullYear() + var m = objDate.getMonth() + 1 + var d = objDate.getDate() + var offset = (Date.UTC(objDate.getFullYear(), objDate.getMonth(), objDate.getDate()) - Date.UTC(1900, 0, 31)) / 86400000 + for (i = 1900; i < 2101 && offset > 0; i++) { + temp = this.lYearDays(i) + offset -= temp + } + if (offset < 0) { + offset += temp; i-- + } + + // 是否今天 + var isTodayObj = new Date() + var isToday = false + if (isTodayObj.getFullYear() == y && isTodayObj.getMonth() + 1 == m && isTodayObj.getDate() == d) { + isToday = true + } + // 星期几 + var nWeek = objDate.getDay() + var cWeek = this.nStr1[nWeek] + // 数字表示周几顺应天朝周一开始的惯例 + if (nWeek == 0) { + nWeek = 7 + } + // 农历年 + var year = i + var leap = this.leapMonth(i) // 闰哪个月 + var isLeap = false + + // 效验闰月 + for (i = 1; i < 13 && offset > 0; i++) { + // 闰月 + if (leap > 0 && i == (leap + 1) && isLeap == false) { + --i + isLeap = true; temp = this.leapDays(year) // 计算农历闰月天数 + } else { + temp = this.monthDays(year, i)// 计算农历普通月天数 + } + // 解除闰月 + if (isLeap == true && i == (leap + 1)) { isLeap = false } + offset -= temp + } + // 闰月导致数组下标重叠取反 + if (offset == 0 && leap > 0 && i == leap + 1) { + if (isLeap) { + isLeap = false + } else { + isLeap = true; --i + } + } + if (offset < 0) { + offset += temp; --i + } + // 农历月 + var month = i + // 农历日 + var day = offset + 1 + // 天干地支处理 + var sm = m - 1 + var gzY = this.toGanZhiYear(year) + + // 当月的两个节气 + // bugfix-2017-7-24 11:03:38 use lunar Year Param `y` Not `year` + var firstNode = this.getTerm(y, (m * 2 - 1))// 返回当月「节」为几日开始 + var secondNode = this.getTerm(y, (m * 2))// 返回当月「节」为几日开始 + + // 依据12节气修正干支月 + var gzM = this.toGanZhi((y - 1900) * 12 + m + 11) + if (d >= firstNode) { + gzM = this.toGanZhi((y - 1900) * 12 + m + 12) + } + + // 传入的日期的节气与否 + var isTerm = false + var Term = null + if (firstNode == d) { + isTerm = true + Term = this.solarTerm[m * 2 - 2] + } + if (secondNode == d) { + isTerm = true + Term = this.solarTerm[m * 2 - 1] + } + // 日柱 当月一日与 1900/1/1 相差天数 + var dayCyclical = Date.UTC(y, sm, 1, 0, 0, 0, 0) / 86400000 + 25567 + 10 + var gzD = this.toGanZhi(dayCyclical + d - 1) + // 该日期所属的星座 + var astro = this.toAstro(m, d) + + return { 'lYear': year, 'lMonth': month, 'lDay': day, 'Animal': this.getAnimal(year), 'IMonthCn': (isLeap ? '\u95f0' : '') + this.toChinaMonth(month), 'IDayCn': this.toChinaDay(day), 'cYear': y, 'cMonth': m, 'cDay': d, 'gzYear': gzY, 'gzMonth': gzM, 'gzDay': gzD, 'isToday': isToday, 'isLeap': isLeap, 'nWeek': nWeek, 'ncWeek': '\u661f\u671f' + cWeek, 'isTerm': isTerm, 'Term': Term, 'astro': astro } + }, + + /** + * 传入农历年月日以及传入的月份是否闰月获得详细的公历、农历object信息 <=>JSON + * @param y lunar year + * @param m lunar month + * @param d lunar day + * @param isLeapMonth lunar month is leap or not.[如果是农历闰月第四个参数赋值true即可] + * @return JSON object + * @eg:console.log(calendar.lunar2solar(1987,9,10)); + */ + lunar2solar: function (y, m, d, isLeapMonth) { // 参数区间1900.1.31~2100.12.1 + var isLeapMonth = !!isLeapMonth + var leapOffset = 0 + var leapMonth = this.leapMonth(y) + var leapDay = this.leapDays(y) + if (isLeapMonth && (leapMonth != m)) { return -1 }// 传参要求计算该闰月公历 但该年得出的闰月与传参的月份并不同 + if (y == 2100 && m == 12 && d > 1 || y == 1900 && m == 1 && d < 31) { return -1 }// 超出了最大极限值 + var day = this.monthDays(y, m) + var _day = day + // bugFix 2016-9-25 + // if month is leap, _day use leapDays method + if (isLeapMonth) { + _day = this.leapDays(y, m) + } + if (y < 1900 || y > 2100 || d > _day) { return -1 }// 参数合法性效验 + + // 计算农历的时间差 + var offset = 0 + for (var i = 1900; i < y; i++) { + offset += this.lYearDays(i) + } + var leap = 0; var isAdd = false + for (var i = 1; i < m; i++) { + leap = this.leapMonth(y) + if (!isAdd) { // 处理闰月 + if (leap <= i && leap > 0) { + offset += this.leapDays(y); isAdd = true + } + } + offset += this.monthDays(y, i) + } + // 转换闰月农历 需补充该年闰月的前一个月的时差 + if (isLeapMonth) { offset += day } + // 1900年农历正月一日的公历时间为1900年1月30日0时0分0秒(该时间也是本农历的最开始起始点) + var stmap = Date.UTC(1900, 1, 30, 0, 0, 0) + var calObj = new Date((offset + d - 31) * 86400000 + stmap) + var cY = calObj.getUTCFullYear() + var cM = calObj.getUTCMonth() + 1 + var cD = calObj.getUTCDate() + + return this.solar2lunar(cY, cM, cD) + } +} + +export default calendar diff --git a/uni_modules/uview-ui/libs/util/dayjs.js b/uni_modules/uview-ui/libs/util/dayjs.js new file mode 100644 index 0000000..c4efea0 --- /dev/null +++ b/uni_modules/uview-ui/libs/util/dayjs.js @@ -0,0 +1,308 @@ +!(function (t, e) { + typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = e() : typeof define === 'function' + && define.amd ? define(e) : t.dayjs = e() +}(this, () => { + 'use strict' + + const t = 'millisecond' + const e = 'second' + const n = 'minute' + const r = 'hour' + const i = 'day' + const s = 'week' + const u = 'month' + const a = 'quarter' + const o = 'year' + const f = 'date' + const h = /^(\d{4})[-/]?(\d{1,2})?[-/]?(\d{0,2})[^0-9]*(\d{1,2})?:?(\d{1,2})?:?(\d{1,2})?.?(\d+)?$/ + const c = /\[([^\]]+)]|Y{1,4}|M{1,4}|D{1,2}|d{1,4}|H{1,2}|h{1,2}|a|A|m{1,2}|s{1,2}|Z{1,2}|SSS/g + const d = { + name: 'en', + weekdays: 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split('_'), + months: 'January_February_March_April_May_June_July_August_September_October_November_December'.split('_') + } + const $ = function (t, e, n) { + const r = String(t) + return !r || r.length >= e ? t : `${Array(e + 1 - r.length).join(n)}${t}` + } + const l = { + s: $, + z(t) { + const e = -t.utcOffset() + const n = Math.abs(e) + const r = Math.floor(n / 60) + const i = n % 60 + return `${(e <= 0 ? '+' : '-') + $(r, 2, '0')}:${$(i, 2, '0')}` + }, + m: function t(e, n) { + if (e.date() < n.date()) return -t(n, e) + const r = 12 * (n.year() - e.year()) + (n.month() - e.month()) + const i = e.clone().add(r, u) + const s = n - i < 0 + const a = e.clone().add(r + (s ? -1 : 1), u) + return +(-(r + (n - i) / (s ? i - a : a - i)) || 0) + }, + a(t) { + return t < 0 ? Math.ceil(t) || 0 : Math.floor(t) + }, + p(h) { + return { + M: u, + y: o, + w: s, + d: i, + D: f, + h: r, + m: n, + s: e, + ms: t, + Q: a + }[h] || String(h || '').toLowerCase().replace(/s$/, '') + }, + u(t) { + return void 0 === t + } + } + let y = 'en' + const M = {} + M[y] = d + const m = function (t) { + return t instanceof S + } + const D = function (t, e, n) { + let r + if (!t) return y + if (typeof t === 'string') M[t] && (r = t), e && (M[t] = e, r = t) + else { + const i = t.name + M[i] = t, r = i + } + return !n && r && (y = r), r || !n && y + } + const v = function (t, e) { + if (m(t)) return t.clone() + const n = typeof e === 'object' ? e : {} + return n.date = t, n.args = arguments, new S(n) + } + const g = l + g.l = D, g.i = m, g.w = function (t, e) { + return v(t, { + locale: e.$L, + utc: e.$u, + x: e.$x, + $offset: e.$offset + }) + } + var S = (function () { + function d(t) { + this.$L = D(t.locale, null, !0), this.parse(t) + } + const $ = d.prototype + return $.parse = function (t) { + this.$d = (function (t) { + const e = t.date + const n = t.utc + if (e === null) return new Date(NaN) + if (g.u(e)) return new Date() + if (e instanceof Date) return new Date(e) + if (typeof e === 'string' && !/Z$/i.test(e)) { + const r = e.match(h) + if (r) { + const i = r[2] - 1 || 0 + const s = (r[7] || '0').substring(0, 3) + return n ? new Date(Date.UTC(r[1], i, r[3] || 1, r[4] || 0, r[5] || 0, r[6] || 0, s)) : new Date(r[1], i, r[3] + || 1, r[4] || 0, r[5] || 0, r[6] || 0, s) + } + } + return new Date(e) + }(t)), this.$x = t.x || {}, this.init() + }, $.init = function () { + const t = this.$d + this.$y = t.getFullYear(), this.$M = t.getMonth(), this.$D = t.getDate(), this.$W = t.getDay(), this.$H = t.getHours(), + this.$m = t.getMinutes(), this.$s = t.getSeconds(), this.$ms = t.getMilliseconds() + }, $.$utils = function () { + return g + }, $.isValid = function () { + return !(this.$d.toString() === 'Invalid Date') + }, $.isSame = function (t, e) { + const n = v(t) + return this.startOf(e) <= n && n <= this.endOf(e) + }, $.isAfter = function (t, e) { + return v(t) < this.startOf(e) + }, $.isBefore = function (t, e) { + return this.endOf(e) < v(t) + }, $.$g = function (t, e, n) { + return g.u(t) ? this[e] : this.set(n, t) + }, $.unix = function () { + return Math.floor(this.valueOf() / 1e3) + }, $.valueOf = function () { + return this.$d.getTime() + }, $.startOf = function (t, a) { + const h = this + const c = !!g.u(a) || a + const d = g.p(t) + const $ = function (t, e) { + const n = g.w(h.$u ? Date.UTC(h.$y, e, t) : new Date(h.$y, e, t), h) + return c ? n : n.endOf(i) + } + const l = function (t, e) { + return g.w(h.toDate()[t].apply(h.toDate('s'), (c ? [0, 0, 0, 0] : [23, 59, 59, 999]).slice(e)), h) + } + const y = this.$W + const M = this.$M + const m = this.$D + const D = `set${this.$u ? 'UTC' : ''}` + switch (d) { + case o: + return c ? $(1, 0) : $(31, 11) + case u: + return c ? $(1, M) : $(0, M + 1) + case s: + var v = this.$locale().weekStart || 0 + var S = (y < v ? y + 7 : y) - v + return $(c ? m - S : m + (6 - S), M) + case i: + case f: + return l(`${D}Hours`, 0) + case r: + return l(`${D}Minutes`, 1) + case n: + return l(`${D}Seconds`, 2) + case e: + return l(`${D}Milliseconds`, 3) + default: + return this.clone() + } + }, $.endOf = function (t) { + return this.startOf(t, !1) + }, $.$set = function (s, a) { + let h; const c = g.p(s) + const d = `set${this.$u ? 'UTC' : ''}` + const $ = (h = {}, h[i] = `${d}Date`, h[f] = `${d}Date`, h[u] = `${d}Month`, h[o] = `${d}FullYear`, h[r] = `${d}Hours`, + h[n] = `${d}Minutes`, h[e] = `${d}Seconds`, h[t] = `${d}Milliseconds`, h)[c] + const l = c === i ? this.$D + (a - this.$W) : a + if (c === u || c === o) { + const y = this.clone().set(f, 1) + y.$d[$](l), y.init(), this.$d = y.set(f, Math.min(this.$D, y.daysInMonth())).$d + } else $ && this.$d[$](l) + return this.init(), this + }, $.set = function (t, e) { + return this.clone().$set(t, e) + }, $.get = function (t) { + return this[g.p(t)]() + }, $.add = function (t, a) { + let f; const + h = this + t = Number(t) + const c = g.p(a) + const d = function (e) { + const n = v(h) + return g.w(n.date(n.date() + Math.round(e * t)), h) + } + if (c === u) return this.set(u, this.$M + t) + if (c === o) return this.set(o, this.$y + t) + if (c === i) return d(1) + if (c === s) return d(7) + const $ = (f = {}, f[n] = 6e4, f[r] = 36e5, f[e] = 1e3, f)[c] || 1 + const l = this.$d.getTime() + t * $ + return g.w(l, this) + }, $.subtract = function (t, e) { + return this.add(-1 * t, e) + }, $.format = function (t) { + const e = this + if (!this.isValid()) return 'Invalid Date' + const n = t || 'YYYY-MM-DDTHH:mm:ssZ' + const r = g.z(this) + const i = this.$locale() + const s = this.$H + const u = this.$m + const a = this.$M + const o = i.weekdays + const f = i.months + const h = function (t, r, i, s) { + return t && (t[r] || t(e, n)) || i[r].substr(0, s) + } + const d = function (t) { + return g.s(s % 12 || 12, t, '0') + } + const $ = i.meridiem || function (t, e, n) { + const r = t < 12 ? 'AM' : 'PM' + return n ? r.toLowerCase() : r + } + const l = { + YY: String(this.$y).slice(-2), + YYYY: this.$y, + M: a + 1, + MM: g.s(a + 1, 2, '0'), + MMM: h(i.monthsShort, a, f, 3), + MMMM: h(f, a), + D: this.$D, + DD: g.s(this.$D, 2, '0'), + d: String(this.$W), + dd: h(i.weekdaysMin, this.$W, o, 2), + ddd: h(i.weekdaysShort, this.$W, o, 3), + dddd: o[this.$W], + H: String(s), + HH: g.s(s, 2, '0'), + h: d(1), + hh: d(2), + a: $(s, u, !0), + A: $(s, u, !1), + m: String(u), + mm: g.s(u, 2, '0'), + s: String(this.$s), + ss: g.s(this.$s, 2, '0'), + SSS: g.s(this.$ms, 3, '0'), + Z: r + } + return n.replace(c, (t, e) => e || l[t] || r.replace(':', '')) + }, $.utcOffset = function () { + return 15 * -Math.round(this.$d.getTimezoneOffset() / 15) + }, $.diff = function (t, f, h) { + let c; const d = g.p(f) + const $ = v(t) + const l = 6e4 * ($.utcOffset() - this.utcOffset()) + const y = this - $ + let M = g.m(this, $) + return M = (c = {}, c[o] = M / 12, c[u] = M, c[a] = M / 3, c[s] = (y - l) / 6048e5, c[i] = (y - l) / 864e5, c[r] = y / 36e5, c[n] = y / 6e4, c[e] = y / 1e3, c)[d] || y, h ? M : g.a(M) + }, $.daysInMonth = function () { + return this.endOf(u).$D + }, $.$locale = function () { + return M[this.$L] + }, $.locale = function (t, e) { + if (!t) return this.$L + const n = this.clone() + const r = D(t, e, !0) + return r && (n.$L = r), n + }, $.clone = function () { + return g.w(this.$d, this) + }, $.toDate = function () { + return new Date(this.valueOf()) + }, $.toJSON = function () { + return this.isValid() ? this.toISOString() : null + }, $.toISOString = function () { + return this.$d.toISOString() + }, $.toString = function () { + return this.$d.toUTCString() + }, d + }()) + const p = S.prototype + return v.prototype = p, [ + ['$ms', t], + ['$s', e], + ['$m', n], + ['$H', r], + ['$W', i], + ['$M', u], + ['$y', o], + ['$D', f] + ].forEach((t) => { + p[t[1]] = function (e) { + return this.$g(e, t[0], t[1]) + } + }), v.extend = function (t, e) { + return t.$i || (t(e, S, v), t.$i = !0), v + }, v.locale = D, v.isDayjs = m, v.unix = function (t) { + return v(1e3 * t) + }, v.en = M[y], v.Ls = M, v.p = {}, v +})) diff --git a/uni_modules/uview-ui/libs/util/emitter.js b/uni_modules/uview-ui/libs/util/emitter.js new file mode 100644 index 0000000..1e64044 --- /dev/null +++ b/uni_modules/uview-ui/libs/util/emitter.js @@ -0,0 +1,51 @@ +/** + * 递归使用 call 方式this指向 + * @param componentName // 需要找的组件的名称 + * @param eventName // 事件名称 + * @param params // 需要传递的参数 + */ +function broadcast(componentName, eventName, params) { + // 循环子节点找到名称一样的子节点 否则 递归 当前子节点 + this.$children.map((child) => { + if (componentName === child.$options.name) { + child.$emit.apply(child, [eventName].concat(params)) + } else { + broadcast.apply(child, [componentName, eventName].concat(params)) + } + }) +} +export default { + methods: { + /** + * 派发 (向上查找) (一个) + * @param componentName // 需要找的组件的名称 + * @param eventName // 事件名称 + * @param params // 需要传递的参数 + */ + dispatch(componentName, eventName, params) { + let parent = this.$parent || this.$root// $parent 找到最近的父节点 $root 根节点 + let { name } = parent.$options // 获取当前组件实例的name + // 如果当前有节点 && 当前没名称 且 当前名称等于需要传进来的名称的时候就去查找当前的节点 + // 循环出当前名称的一样的组件实例 + while (parent && (!name || name !== componentName)) { + parent = parent.$parent + if (parent) { + name = parent.$options.name + } + } + // 有节点表示当前找到了name一样的实例 + if (parent) { + parent.$emit.apply(parent, [eventName].concat(params)) + } + }, + /** + * 广播 (向下查找) (广播多个) + * @param componentName // 需要找的组件的名称 + * @param eventName // 事件名称 + * @param params // 需要传递的参数 + */ + broadcast(componentName, eventName, params) { + broadcast.call(this, componentName, eventName, params) + } + } +} diff --git a/uni_modules/uview-ui/libs/util/route.js b/uni_modules/uview-ui/libs/util/route.js new file mode 100644 index 0000000..2afeea5 --- /dev/null +++ b/uni_modules/uview-ui/libs/util/route.js @@ -0,0 +1,124 @@ +/** + * 路由跳转方法,该方法相对于直接使用uni.xxx的好处是使用更加简单快捷 + * 并且带有路由拦截功能 + */ + +class Router { + constructor() { + // 原始属性定义 + this.config = { + type: 'navigateTo', + url: '', + delta: 1, // navigateBack页面后退时,回退的层数 + params: {}, // 传递的参数 + animationType: 'pop-in', // 窗口动画,只在APP有效 + animationDuration: 300, // 窗口动画持续时间,单位毫秒,只在APP有效 + intercept: false // 是否需要拦截 + } + // 因为route方法是需要对外赋值给另外的对象使用,同时route内部有使用this,会导致route失去上下文 + // 这里在构造函数中进行this绑定 + this.route = this.route.bind(this) + } + + // 判断url前面是否有"/",如果没有则加上,否则无法跳转 + addRootPath(url) { + return url[0] === '/' ? url : `/${url}` + } + + // 整合路由参数 + mixinParam(url, params) { + url = url && this.addRootPath(url) + + // 使用正则匹配,主要依据是判断是否有"/","?","="等,如“/page/index/index?name=mary" + // 如果有url中有get参数,转换后无需带上"?" + let query = '' + if (/.*\/.*\?.*=.*/.test(url)) { + // object对象转为get类型的参数 + query = uni.$u.queryParams(params, false) + // 因为已有get参数,所以后面拼接的参数需要带上"&"隔开 + return url += `&${query}` + } + // 直接拼接参数,因为此处url中没有后面的query参数,也就没有"?/&"之类的符号 + query = uni.$u.queryParams(params) + return url += query + } + + // 对外的方法名称 + async route(options = {}, params = {}) { + // 合并用户的配置和内部的默认配置 + let mergeConfig = {} + + if (typeof options === 'string') { + // 如果options为字符串,则为route(url, params)的形式 + mergeConfig.url = this.mixinParam(options, params) + mergeConfig.type = 'navigateTo' + } else { + mergeConfig = uni.$u.deepMerge(this.config, options) + // 否则正常使用mergeConfig中的url和params进行拼接 + mergeConfig.url = this.mixinParam(options.url, options.params) + } + + // 如果本次跳转的路径和本页面路径一致,不执行跳转,防止用户快速点击跳转按钮,造成多次跳转同一个页面的问题 + if (mergeConfig.url === uni.$u.page()) return + + if (params.intercept) { + this.config.intercept = params.intercept + } + // params参数也带给拦截器 + mergeConfig.params = params + // 合并内外部参数 + mergeConfig = uni.$u.deepMerge(this.config, mergeConfig) + // 判断用户是否定义了拦截器 + if (typeof uni.$u.routeIntercept === 'function') { + // 定一个promise,根据用户执行resolve(true)或者resolve(false)来决定是否进行路由跳转 + const isNext = await new Promise((resolve, reject) => { + uni.$u.routeIntercept(mergeConfig, resolve) + }) + // 如果isNext为true,则执行路由跳转 + isNext && this.openPage(mergeConfig) + } else { + this.openPage(mergeConfig) + } + } + + // 执行路由跳转 + openPage(config) { + // 解构参数 + const { + url, + type, + delta, + animationType, + animationDuration + } = config + if (config.type == 'navigateTo' || config.type == 'to') { + uni.navigateTo({ + url, + animationType, + animationDuration + }) + } + if (config.type == 'redirectTo' || config.type == 'redirect') { + uni.redirectTo({ + url + }) + } + if (config.type == 'switchTab' || config.type == 'tab') { + uni.switchTab({ + url + }) + } + if (config.type == 'reLaunch' || config.type == 'launch') { + uni.reLaunch({ + url + }) + } + if (config.type == 'navigateBack' || config.type == 'back') { + uni.navigateBack({ + delta + }) + } + } +} + +export default (new Router()).route diff --git a/uni_modules/uview-ui/package.json b/uni_modules/uview-ui/package.json new file mode 100644 index 0000000..e1169e5 --- /dev/null +++ b/uni_modules/uview-ui/package.json @@ -0,0 +1,84 @@ +{ + "id": "uview-ui", + "name": "uview-ui", + "displayName": "uView2.0重磅发布,利剑出鞘,一统江湖", + "version": "2.0.36", + "description": "uView UI已完美兼容nvue,全面的组件和便捷的工具会让您信手拈来,如鱼得水", + "keywords": [ + "uview", + "uview", + "ui", + "ui", + "uni-app", + "uni-app", + "ui" + ], + "repository": "https://github.com/umicro/uView2.0", + "engines": { + "HBuilderX": "^3.1.0" + }, + "dcloudext": { + "sale": { + "regular": { + "price": "0.00" + }, + "sourcecode": { + "price": "0.00" + } + }, + "contact": { + "qq": "1416956117" + }, + "declaration": { + "ads": "无", + "data": "无", + "permissions": "无" + }, + "npmurl": "https://www.npmjs.com/package/uview-ui", + "type": "component-vue" + }, + "uni_modules": { + "dependencies": [], + "encrypt": [], + "platforms": { + "cloud": { + "tcb": "y", + "aliyun": "y" + }, + "client": { + "Vue": { + "vue2": "y", + "vue3": "n" + }, + "App": { + "app-vue": "y", + "app-nvue": "y" + }, + "H5-mobile": { + "Safari": "y", + "Android Browser": "y", + "微信浏览器(Android)": "y", + "QQ浏览器(Android)": "y" + }, + "H5-pc": { + "Chrome": "y", + "IE": "y", + "Edge": "y", + "Firefox": "y", + "Safari": "y" + }, + "小程序": { + "微信": "y", + "阿里": "y", + "百度": "y", + "字节跳动": "y", + "QQ": "y" + }, + "快应用": { + "华为": "y", + "联盟": "y" + } + } + } + } +} diff --git a/uni_modules/uview-ui/theme.scss b/uni_modules/uview-ui/theme.scss new file mode 100644 index 0000000..331b30f --- /dev/null +++ b/uni_modules/uview-ui/theme.scss @@ -0,0 +1,44 @@ +// 此文件为uView的主题变量,这些变量目前只能通过uni.scss引入才有效,另外由于 +// uni.scss中引入的样式会同时混入到全局样式文件和单独每一个页面的样式中,造成微信程序包太大, +// 故uni.scss只建议放scss变量名相关样式,其他的样式可以通过main.js或者App.vue引入 + +$u-main-color: #303133; +$u-content-color: #606266; +$u-tips-color: #909193; +$u-light-color: #c0c4cc; +$u-border-color: #dadbde; +$u-bg-color: #f3f4f6; +$u-disabled-color: #c8c9cc; + +$u-primary: #3c9cff; +$u-primary-dark: #398ade; +$u-primary-disabled: #9acafc; +$u-primary-light: #ecf5ff; + +$u-warning: #f9ae3d; +$u-warning-dark: #f1a532; +$u-warning-disabled: #f9d39b; +$u-warning-light: #fdf6ec; + +$u-success: #5ac725; +$u-success-dark: #53c21d; +$u-success-disabled: #a9e08f; +$u-success-light: #f5fff0; + +$u-error: #f56c6c; +$u-error-dark: #e45656; +$u-error-disabled: #f7b2b2; +$u-error-light: #fef0f0; + +$u-info: #909399; +$u-info-dark: #767a82; +$u-info-disabled: #c4c6c9; +$u-info-light: #f4f4f5; + +// scss混入,为了少写几行#ifndef +@mixin flex($direction: row) { + /* #ifndef APP-NVUE */ + display: flex; + /* #endif */ + flex-direction: $direction; +} diff --git a/utils/getweixinsdk.js b/utils/getweixinsdk.js new file mode 100644 index 0000000..619d639 --- /dev/null +++ b/utils/getweixinsdk.js @@ -0,0 +1,45 @@ +import config from "config" +var jweixin = require('jweixin-module') // 微信sdk库 +// http请求的公共方法 +export default function getWeixinSdk() { + const token = uni.getStorageSync('token') + return new Promise((resolve, reject) => { + try{ + uni.request({ + url: config.domain + '/api/ajax/jssdk', + method: 'GET', + header: { + "token":token || '' + }, + success: (res) => { + // console.log(res) + // statusCode是200,code为1是成功 code为0是参数不对 + // code不是200,代表请求成功,但是返回失败 + // 可能是参数不对,可能是参数没传 + const weixinSdk = res.data.data + if (res.statusCode === 200 && res.data.code === 1) { + jweixin.config({ + debug: true, // 开启调试模式,调用的所有 api 的返回值会在客户端 alert 出来,若要查看传入的参数,可以在 pc 端打开,参数信息会通过 log 打出,仅在 pc 端时才会打印。 + appId: weixinSdk.appId, // 必填,公众号的唯一标识 + timestamp: weixinSdk.timestamp, // 必填,生成签名的时间戳 + nonceStr: weixinSdk.nonceStr, // 必填,生成签名的随机串 + signature: weixinSdk.signature, // 必填,签名 + jsApiList: ['getLocation', 'updateAppMessageShareData'], // 必填,需要使用的 JS 接口列表 + openTagList: ['wx-open-launch-weapp'] // 可选,需要使用的开放标签列表,例如['wx-open-launch-weapp'] + }); + resolve(res.data) + } else if(res.statusCode === 401){ // 未登录,或登录过期 + uni.$u.toast('登录过期') + } else { + reject(res.data || {}) + } + }, + fail: (err) => { + reject(err || {}) + } + }) + }catch(err) { + reject(err) + } + }) +} \ No newline at end of file diff --git a/utils/permission.js b/utils/permission.js new file mode 100644 index 0000000..c67685e --- /dev/null +++ b/utils/permission.js @@ -0,0 +1,272 @@ +/** + * 本模块封装了Android、iOS的应用权限判断、打开应用权限设置界面、以及位置系统服务是否开启 + */ + +var isIos +// #ifdef APP-PLUS +isIos = (plus.os.name == "iOS") +// #endif + +// 判断推送权限是否开启 +function judgeIosPermissionPush() { + var result = false; + var UIApplication = plus.ios.import("UIApplication"); + var app = UIApplication.sharedApplication(); + var enabledTypes = 0; + if (app.currentUserNotificationSettings) { + var settings = app.currentUserNotificationSettings(); + enabledTypes = settings.plusGetAttribute("types"); + console.log("enabledTypes1:" + enabledTypes); + if (enabledTypes == 0) { + console.log("推送权限没有开启"); + } else { + result = true; + console.log("已经开启推送功能!") + } + plus.ios.deleteObject(settings); + } else { + enabledTypes = app.enabledRemoteNotificationTypes(); + if (enabledTypes == 0) { + console.log("推送权限没有开启!"); + } else { + result = true; + console.log("已经开启推送功能!") + } + console.log("enabledTypes2:" + enabledTypes); + } + plus.ios.deleteObject(app); + plus.ios.deleteObject(UIApplication); + return result; +} + +// 判断定位权限是否开启 +function judgeIosPermissionLocation() { + var result = false; + var cllocationManger = plus.ios.import("CLLocationManager"); + var status = cllocationManger.authorizationStatus(); + result = (status != 2) + console.log("定位权限开启:" + result); + // 以下代码判断了手机设备的定位是否关闭,推荐另行使用方法 checkSystemEnableLocation + /* var enable = cllocationManger.locationServicesEnabled(); + var status = cllocationManger.authorizationStatus(); + console.log("enable:" + enable); + console.log("status:" + status); + if (enable && status != 2) { + result = true; + console.log("手机定位服务已开启且已授予定位权限"); + } else { + console.log("手机系统的定位没有打开或未给予定位权限"); + } */ + plus.ios.deleteObject(cllocationManger); + return result; +} + +// 判断麦克风权限是否开启 +function judgeIosPermissionRecord() { + var result = false; + var avaudiosession = plus.ios.import("AVAudioSession"); + var avaudio = avaudiosession.sharedInstance(); + var permissionStatus = avaudio.recordPermission(); + console.log("permissionStatus:" + permissionStatus); + if (permissionStatus == 1684369017 || permissionStatus == 1970168948) { + console.log("麦克风权限没有开启"); + } else { + result = true; + console.log("麦克风权限已经开启"); + } + plus.ios.deleteObject(avaudiosession); + return result; +} + +// 判断相机权限是否开启 +function judgeIosPermissionCamera() { + var result = false; + var AVCaptureDevice = plus.ios.import("AVCaptureDevice"); + var authStatus = AVCaptureDevice.authorizationStatusForMediaType('vide'); + console.log("authStatus:" + authStatus); + if (authStatus == 3) { + result = true; + console.log("相机权限已经开启"); + } else { + console.log("相机权限没有开启"); + } + plus.ios.deleteObject(AVCaptureDevice); + return result; +} + +// 判断相册权限是否开启 +function judgeIosPermissionPhotoLibrary() { + var result = false; + var PHPhotoLibrary = plus.ios.import("PHPhotoLibrary"); + var authStatus = PHPhotoLibrary.authorizationStatus(); + console.log("authStatus:" + authStatus); + if (authStatus == 3) { + result = true; + console.log("相册权限已经开启"); + } else { + console.log("相册权限没有开启"); + } + plus.ios.deleteObject(PHPhotoLibrary); + return result; +} + +// 判断通讯录权限是否开启 +function judgeIosPermissionContact() { + var result = false; + var CNContactStore = plus.ios.import("CNContactStore"); + var cnAuthStatus = CNContactStore.authorizationStatusForEntityType(0); + if (cnAuthStatus == 3) { + result = true; + console.log("通讯录权限已经开启"); + } else { + console.log("通讯录权限没有开启"); + } + plus.ios.deleteObject(CNContactStore); + return result; +} + +// 判断日历权限是否开启 +function judgeIosPermissionCalendar() { + var result = false; + var EKEventStore = plus.ios.import("EKEventStore"); + var ekAuthStatus = EKEventStore.authorizationStatusForEntityType(0); + if (ekAuthStatus == 3) { + result = true; + console.log("日历权限已经开启"); + } else { + console.log("日历权限没有开启"); + } + plus.ios.deleteObject(EKEventStore); + return result; +} + +// 判断备忘录权限是否开启 +function judgeIosPermissionMemo() { + var result = false; + var EKEventStore = plus.ios.import("EKEventStore"); + var ekAuthStatus = EKEventStore.authorizationStatusForEntityType(1); + if (ekAuthStatus == 3) { + result = true; + console.log("备忘录权限已经开启"); + } else { + console.log("备忘录权限没有开启"); + } + plus.ios.deleteObject(EKEventStore); + return result; +} + +// Android权限查询 +function requestAndroidPermission(permissionID) { + return new Promise((resolve, reject) => { + plus.android.requestPermissions( + [permissionID], // 理论上支持多个权限同时查询,但实际上本函数封装只处理了一个权限的情况。有需要的可自行扩展封装 + function(resultObj) { + var result = 0; + for (var i = 0; i < resultObj.granted.length; i++) { + var grantedPermission = resultObj.granted[i]; + console.log('已获取的权限:' + grantedPermission); + result = 1 + } + for (var i = 0; i < resultObj.deniedPresent.length; i++) { + var deniedPresentPermission = resultObj.deniedPresent[i]; + console.log('拒绝本次申请的权限:' + deniedPresentPermission); + result = 0 + } + for (var i = 0; i < resultObj.deniedAlways.length; i++) { + var deniedAlwaysPermission = resultObj.deniedAlways[i]; + console.log('永久拒绝申请的权限:' + deniedAlwaysPermission); + result = -1 + } + resolve(result); + // 若所需权限被拒绝,则打开APP设置界面,可以在APP设置界面打开相应权限 + if (result != 1) { + // gotoAppPermissionSetting() + } + }, + function(error) { + console.log('申请权限错误:' + error.code + " = " + error.message); + resolve({ + code: error.code, + message: error.message + }); + } + ); + }); +} + +// 使用一个方法,根据参数判断权限 +function judgeIosPermission(permissionID) { + if (permissionID == "location") { + return judgeIosPermissionLocation() + } else if (permissionID == "camera") { + return judgeIosPermissionCamera() + } else if (permissionID == "photoLibrary") { + return judgeIosPermissionPhotoLibrary() + } else if (permissionID == "record") { + return judgeIosPermissionRecord() + } else if (permissionID == "push") { + return judgeIosPermissionPush() + } else if (permissionID == "contact") { + return judgeIosPermissionContact() + } else if (permissionID == "calendar") { + return judgeIosPermissionCalendar() + } else if (permissionID == "memo") { + return judgeIosPermissionMemo() + } + return false; +} + +// 跳转到**应用**的权限页面 +function gotoAppPermissionSetting() { + if (isIos) { + var UIApplication = plus.ios.import("UIApplication"); + var application2 = UIApplication.sharedApplication(); + var NSURL2 = plus.ios.import("NSURL"); + // var setting2 = NSURL2.URLWithString("prefs:root=LOCATION_SERVICES"); + var setting2 = NSURL2.URLWithString("app-settings:"); + application2.openURL(setting2); + + plus.ios.deleteObject(setting2); + plus.ios.deleteObject(NSURL2); + plus.ios.deleteObject(application2); + } else { + // console.log(plus.device.vendor); + var Intent = plus.android.importClass("android.content.Intent"); + var Settings = plus.android.importClass("android.provider.Settings"); + var Uri = plus.android.importClass("android.net.Uri"); + var mainActivity = plus.android.runtimeMainActivity(); + var intent = new Intent(); + intent.setAction(Settings.ACTION_APPLICATION_DETAILS_SETTINGS); + var uri = Uri.fromParts("package", mainActivity.getPackageName(), null); + intent.setData(uri); + mainActivity.startActivity(intent); + } +} + +// 检查系统的设备服务是否开启 +// var checkSystemEnableLocation = async function () { +function checkSystemEnableLocation() { + if (isIos) { + var result = false; + var cllocationManger = plus.ios.import("CLLocationManager"); + var result = cllocationManger.locationServicesEnabled(); + console.log("系统定位开启:" + result); + plus.ios.deleteObject(cllocationManger); + return result; + } else { + var context = plus.android.importClass("android.content.Context"); + var locationManager = plus.android.importClass("android.location.LocationManager"); + var main = plus.android.runtimeMainActivity(); + var mainSvr = main.getSystemService(context.LOCATION_SERVICE); + var result = mainSvr.isProviderEnabled(locationManager.GPS_PROVIDER); + console.log("系统定位开启:" + result); + return result + } +} + +module.exports = { + judgeIosPermission: judgeIosPermission, + requestAndroidPermission: requestAndroidPermission, + checkSystemEnableLocation: checkSystemEnableLocation, + gotoAppPermissionSetting: gotoAppPermissionSetting +} diff --git a/utils/updateapp.js b/utils/updateapp.js new file mode 100644 index 0000000..d60165d --- /dev/null +++ b/utils/updateapp.js @@ -0,0 +1,33 @@ +import request from "@/common/request.js" + +// 检测APP更新方法 +function checkUpdateApp() { + return new Promise((resolve, reject) => { + if(uni.getSystemInfoSync().platform === 'android') { + plus.runtime.getProperty(plus.runtime.appid, (inf) => { + // console.log(inf) // 手机上的APP版本 + request({ + url: '/api/ajax/version', + data: { + + } + }).then(res => { + // console.log(res) + // console.log(inf) + if(Number(res.data.version_data.newversion) != Number(inf.version)) { + resolve(res) + } else { + reject({ msg: '暂无新版本' }) + } + }).catch(err => { + reject(err) + }) + }); + } else if(uni.getSystemInfoSync().platform === 'ios') { + reject({ msg: 'ios暂不支持在线更新' }) + } + }) +} + + +export default checkUpdateApp \ No newline at end of file -- 2.22.0