From 139ce6b2f8f65a27cf6416bcafc3f61819f27df6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=8E=E7=90=A6?= Date: Fri, 5 Jun 2026 14:06:20 +0800 Subject: [PATCH] =?UTF-8?q?=E8=BF=81=E7=A7=BB=E7=89=88=E6=9C=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 6 + App.vue | 74 + api/interceptor.js | 114 ++ api/page/auth.js | 11 + api/page/cart.js | 30 + api/page/home.js | 10 + api/page/image.js | 15 + api/page/product.js | 14 + api/page/user.js | 17 + api/request.js | 70 + common/api.js | 3 + common/area.js | 1 + common/city.js | 1 + common/classify.data.js | 1087 +++++++++++++ common/config.js | 3 + common/demo.scss | 55 + common/locales/en.js | 21 + common/locales/zh.js | 21 + common/mixin.js | 7 + common/props.js | 2 + common/province.js | 1 + components/common/Footer.vue | 22 + components/common/HeaderSearch.vue | 57 + components/common/SearchMain.vue | 43 + components/index/Index.vue | 315 ++++ components/index/Tabs.vue | 44 + components/tabbar/customTabbar.vue | 227 +++ index.html | 20 + main.js | 25 + manifest.json | 78 + package-lock.json | 71 + package.json | 8 + pages.json | 112 ++ pages/cart/cart.vue | 507 +++++++ pages/cart/detail.vue | 428 ++++++ pages/goods/index.vue | 264 ++++ pages/login/index.vue | 183 +++ pages/mine/mine.vue | 360 +++++ pages/my/index.vue | 225 +++ pages/product/detail.vue | 471 ++++++ pages/product/product.vue | 559 +++++++ pages/search/search.vue | 399 +++++ pnpm-lock.yaml | 76 + static/icon/appointment.png | Bin 0 -> 22365 bytes static/icon/await.png | Bin 0 -> 18704 bytes static/icon/doing.png | Bin 0 -> 16547 bytes static/icon/order.png | Bin 0 -> 13243 bytes static/icon/served.png | Bin 0 -> 18278 bytes static/icon/wallet.png | Bin 0 -> 12804 bytes static/images/empty.png | Bin 0 -> 55556 bytes static/images/logo.png | Bin 0 -> 33404 bytes static/loading.svg | 1 + static/logo.png | Bin 0 -> 4023 bytes static/tabbar/activity-fill.png | Bin 0 -> 18396 bytes static/tabbar/activity.png | Bin 0 -> 18870 bytes static/tabbar/classify-fill.png | Bin 0 -> 16317 bytes static/tabbar/classify.png | Bin 0 -> 17502 bytes static/tabbar/home-fill.png | Bin 0 -> 13956 bytes static/tabbar/home.png | Bin 0 -> 16789 bytes static/tabbar/mine-fill.png | Bin 0 -> 12728 bytes static/tabbar/mine.png | Bin 0 -> 15970 bytes static/tabbar/shopping-cart-fill.png | Bin 0 -> 16441 bytes static/tabbar/shopping-cart.png | Bin 0 -> 16869 bytes static/tabbar/v2/home-fill.png | Bin 0 -> 11947 bytes static/tabbar/v2/home.png | Bin 0 -> 12012 bytes static/tabbar/v2/mine-fill.png | Bin 0 -> 17805 bytes static/tabbar/v2/mine.png | Bin 0 -> 16181 bytes uni.promisify.adaptor.js | 10 + uni.scss | 79 + uni_modules/uview-plus/LICENSE | 21 + uni_modules/uview-plus/README.md | 74 + uni_modules/uview-plus/changelog.md | 581 +++++++ .../uview-plus/components/u--form/u--form.vue | 80 + .../components/u--image/u--image.vue | 50 + .../components/u--input/u--input.vue | 74 + .../uview-plus/components/u--text/u--text.vue | 45 + .../components/u--textarea/u--textarea.vue | 47 + .../components/u-action-sheet/actionSheet.js | 26 + .../components/u-action-sheet/props.js | 62 + .../u-action-sheet/u-action-sheet.vue | 283 ++++ .../uview-plus/components/u-album/album.js | 28 + .../uview-plus/components/u-album/props.js | 86 ++ .../uview-plus/components/u-album/u-album.vue | 279 ++++ .../uview-plus/components/u-alert/alert.js | 22 + .../uview-plus/components/u-alert/props.js | 46 + .../uview-plus/components/u-alert/u-alert.vue | 251 +++ .../components/u-avatar-group/avatarGroup.js | 23 + .../components/u-avatar-group/props.js | 54 + .../u-avatar-group/u-avatar-group.vue | 110 ++ .../uview-plus/components/u-avatar/avatar.js | 28 + .../uview-plus/components/u-avatar/props.js | 81 + .../components/u-avatar/u-avatar.vue | 180 +++ .../components/u-back-top/backtop.js | 27 + .../uview-plus/components/u-back-top/props.js | 56 + .../components/u-back-top/u-back-top.vue | 133 ++ .../uview-plus/components/u-badge/badge.js | 27 + .../uview-plus/components/u-badge/props.js | 79 + .../uview-plus/components/u-badge/u-badge.vue | 177 +++ .../uview-plus/components/u-box/props.js | 27 + .../uview-plus/components/u-box/u-box.vue | 92 ++ .../uview-plus/components/u-button/button.js | 43 + .../uview-plus/components/u-button/nvue.scss | 46 + .../uview-plus/components/u-button/props.js | 159 ++ .../components/u-button/u-button.vue | 505 +++++++ .../uview-plus/components/u-button/vue.scss | 81 + .../components/u-calendar/calendar.js | 42 + .../components/u-calendar/header.vue | 103 ++ .../components/u-calendar/month.vue | 587 +++++++ .../uview-plus/components/u-calendar/props.js | 147 ++ .../components/u-calendar/u-calendar.vue | 409 +++++ .../uview-plus/components/u-calendar/util.js | 86 ++ .../components/u-car-keyboard/carKeyboard.js | 15 + .../components/u-car-keyboard/props.js | 17 + .../u-car-keyboard/u-car-keyboard.vue | 315 ++++ .../uview-plus/components/u-card/props.js | 140 ++ .../uview-plus/components/u-card/u-card.vue | 186 +++ .../components/u-cate-tab/u-cate-tab.vue | 317 ++++ .../components/u-cell-group/cellGroup.js | 17 + .../components/u-cell-group/props.js | 16 + .../components/u-cell-group/u-cell-group.vue | 67 + .../uview-plus/components/u-cell/cell.js | 35 + .../uview-plus/components/u-cell/props.js | 112 ++ .../uview-plus/components/u-cell/u-cell.vue | 268 ++++ .../u-checkbox-group/checkboxGroup.js | 29 + .../components/u-checkbox-group/props.js | 93 ++ .../u-checkbox-group/u-checkbox-group.vue | 133 ++ .../components/u-checkbox/checkbox.js | 27 + .../uview-plus/components/u-checkbox/props.js | 76 + .../components/u-checkbox/u-checkbox.vue | 387 +++++ .../u-circle-progress/circleProgress.js | 15 + .../components/u-circle-progress/props.js | 10 + .../u-circle-progress/u-circle-progress.vue | 201 +++ .../components/u-code-input/codeInput.js | 29 + .../components/u-code-input/props.js | 90 ++ .../components/u-code-input/u-code-input.vue | 300 ++++ .../uview-plus/components/u-code/code.js | 21 + .../uview-plus/components/u-code/props.js | 36 + .../uview-plus/components/u-code/u-code.vue | 132 ++ .../uview-plus/components/u-col/col.js | 19 + .../uview-plus/components/u-col/props.js | 31 + .../uview-plus/components/u-col/u-col.vue | 170 +++ .../u-collapse-item/collapseItem.js | 26 + .../components/u-collapse-item/props.js | 66 + .../u-collapse-item/u-collapse-item.vue | 242 +++ .../components/u-collapse/collapse.js | 17 + .../uview-plus/components/u-collapse/props.js | 21 + .../components/u-collapse/u-collapse.vue | 91 ++ .../u-column-notice/columnNotice.js | 25 + .../components/u-column-notice/props.js | 61 + .../u-column-notice/u-column-notice.vue | 166 ++ .../uview-plus/components/u-copy/u-copy.vue | 70 + .../components/u-count-down/countDown.js | 18 + .../components/u-count-down/props.js | 26 + .../components/u-count-down/u-count-down.vue | 166 ++ .../components/u-count-down/utils.js | 62 + .../components/u-count-to/countTo.js | 25 + .../uview-plus/components/u-count-to/props.js | 61 + .../components/u-count-to/u-count-to.vue | 189 +++ .../u-datetime-picker/datetimePicker.js | 37 + .../components/u-datetime-picker/props.js | 154 ++ .../u-datetime-picker/u-datetime-picker.vue | 504 +++++++ .../components/u-divider/divider.js | 23 + .../uview-plus/components/u-divider/props.js | 46 + .../components/u-divider/u-divider.vue | 121 ++ .../components/u-dropdown-item/props.js | 47 + .../u-dropdown-item/u-dropdown-item.vue | 121 ++ .../uview-plus/components/u-dropdown/props.js | 61 + .../components/u-dropdown/u-dropdown.vue | 254 ++++ .../uview-plus/components/u-empty/empty.js | 26 + .../uview-plus/components/u-empty/props.js | 61 + .../uview-plus/components/u-empty/u-empty.vue | 133 ++ .../u-float-button/u-float-button.vue | 167 ++ .../components/u-form-item/formItem.js | 24 + .../components/u-form-item/props.js | 55 + .../components/u-form-item/u-form-item.vue | 264 ++++ .../uview-plus/components/u-form/form.js | 22 + .../uview-plus/components/u-form/props.js | 47 + .../uview-plus/components/u-form/u-form.vue | 252 ++++ .../uview-plus/components/u-gap/gap.js | 19 + .../uview-plus/components/u-gap/props.js | 26 + .../uview-plus/components/u-gap/u-gap.vue | 41 + .../components/u-grid-item/gridItem.js | 16 + .../components/u-grid-item/props.js | 16 + .../components/u-grid-item/u-grid-item.vue | 219 +++ .../uview-plus/components/u-grid/grid.js | 17 + .../uview-plus/components/u-grid/props.js | 26 + .../uview-plus/components/u-grid/u-grid.vue | 114 ++ .../uview-plus/components/u-icon/icon.js | 36 + .../uview-plus/components/u-icon/icons.js | 214 +++ .../uview-plus/components/u-icon/props.js | 91 ++ .../uview-plus/components/u-icon/u-icon.vue | 254 ++++ .../uview-plus/components/u-image/image.js | 30 + .../uview-plus/components/u-image/props.js | 86 ++ .../uview-plus/components/u-image/u-image.vue | 267 ++++ .../components/u-index-anchor/indexAnchor.js | 19 + .../components/u-index-anchor/props.js | 31 + .../u-index-anchor/u-index-anchor.vue | 95 ++ .../components/u-index-item/props.js | 8 + .../components/u-index-item/u-index-item.vue | 90 ++ .../components/u-index-list/indexList.js | 20 + .../components/u-index-list/props.js | 36 + .../components/u-index-list/u-index-list.vue | 589 ++++++++ .../uview-plus/components/u-input/input.js | 48 + .../uview-plus/components/u-input/props.js | 198 +++ .../uview-plus/components/u-input/u-input.vue | 401 +++++ .../components/u-keyboard/keyboard.js | 30 + .../uview-plus/components/u-keyboard/props.js | 86 ++ .../components/u-keyboard/u-keyboard.vue | 167 ++ .../components/u-lazy-load/u-lazy-load.vue | 258 ++++ .../u-line-progress/lineProgress.js | 19 + .../components/u-line-progress/props.js | 30 + .../u-line-progress/u-line-progress.vue | 149 ++ .../uview-plus/components/u-line/line.js | 20 + .../uview-plus/components/u-line/props.js | 35 + .../uview-plus/components/u-line/u-line.vue | 65 + .../uview-plus/components/u-link/link.js | 26 + .../uview-plus/components/u-link/props.js | 41 + .../uview-plus/components/u-link/u-link.vue | 87 ++ .../components/u-list-item/listItem.js | 15 + .../components/u-list-item/props.js | 11 + .../components/u-list-item/u-list-item.vue | 119 ++ .../uview-plus/components/u-list/list.js | 28 + .../uview-plus/components/u-list/props.js | 101 ++ .../uview-plus/components/u-list/u-list.vue | 183 +++ .../components/u-loading-icon/loadingIcon.js | 30 + .../components/u-loading-icon/props.js | 61 + .../u-loading-icon/u-loading-icon.vue | 349 +++++ .../components/u-loading-page/loadingPage.js | 24 + .../components/u-loading-page/props.js | 57 + .../u-loading-page/u-loading-page.vue | 123 ++ .../components/u-loadmore/loadmore.js | 32 + .../uview-plus/components/u-loadmore/props.js | 96 ++ .../components/u-loadmore/u-loadmore.vue | 155 ++ .../u-message-input/u-message-input.vue | 318 ++++ .../uview-plus/components/u-modal/modal.js | 31 + .../uview-plus/components/u-modal/props.js | 91 ++ .../uview-plus/components/u-modal/u-modal.vue | 243 +++ .../components/u-navbar-mini/props.js | 51 + .../u-navbar-mini/u-navbar-mini.vue | 139 ++ .../uview-plus/components/u-navbar/navbar.js | 33 + .../uview-plus/components/u-navbar/props.js | 92 ++ .../components/u-navbar/u-navbar.vue | 195 +++ .../components/u-no-network/noNetwork.js | 18 + .../components/u-no-network/props.js | 21 + .../components/u-no-network/u-no-network.vue | 223 +++ .../components/u-notice-bar/noticeBar.js | 28 + .../components/u-notice-bar/props.js | 76 + .../components/u-notice-bar/u-notice-bar.vue | 106 ++ .../uview-plus/components/u-notify/notify.js | 22 + .../uview-plus/components/u-notify/props.js | 51 + .../components/u-notify/u-notify.vue | 217 +++ .../components/u-number-box/numberBox.js | 35 + .../components/u-number-box/props.js | 120 ++ .../components/u-number-box/u-number-box.vue | 466 ++++++ .../u-number-keyboard/numberKeyboard.js | 17 + .../components/u-number-keyboard/props.js | 21 + .../u-number-keyboard/u-number-keyboard.vue | 199 +++ .../components/u-overlay/overlay.js | 18 + .../uview-plus/components/u-overlay/props.js | 26 + .../components/u-overlay/u-overlay.vue | 72 + .../components/u-parse/node/node.vue | 584 +++++++ .../uview-plus/components/u-parse/parse.js | 22 + .../uview-plus/components/u-parse/parser.js | 1337 ++++++++++++++++ .../uview-plus/components/u-parse/props.js | 48 + .../uview-plus/components/u-parse/u-parse.vue | 499 ++++++ .../components/u-picker-column/props.js | 7 + .../u-picker-column/u-picker-column.vue | 29 + .../uview-plus/components/u-picker/picker.js | 31 + .../uview-plus/components/u-picker/props.js | 108 ++ .../components/u-picker/u-picker.vue | 397 +++++ .../uview-plus/components/u-popup/popup.js | 29 + .../uview-plus/components/u-popup/props.js | 81 + .../uview-plus/components/u-popup/u-popup.vue | 312 ++++ .../uview-plus/components/u-qrcode/qrcode.js | 1235 +++++++++++++++ .../components/u-qrcode/u-qrcode.vue | 304 ++++ .../components/u-radio-group/props.js | 100 ++ .../components/u-radio-group/radioGroup.js | 31 + .../u-radio-group/u-radio-group.vue | 137 ++ .../uview-plus/components/u-radio/props.js | 71 + .../uview-plus/components/u-radio/radio.js | 27 + .../uview-plus/components/u-radio/u-radio.vue | 351 +++++ .../uview-plus/components/u-rate/props.js | 80 + .../uview-plus/components/u-rate/rate.js | 26 + .../uview-plus/components/u-rate/u-rate.vue | 328 ++++ .../components/u-read-more/props.js | 63 + .../components/u-read-more/readMore.js | 22 + .../components/u-read-more/u-read-more.vue | 167 ++ .../components/u-row-notice/props.js | 41 + .../components/u-row-notice/rowNotice.js | 21 + .../components/u-row-notice/u-row-notice.vue | 337 +++++ .../uview-plus/components/u-row/props.js | 21 + .../uview-plus/components/u-row/row.js | 17 + .../uview-plus/components/u-row/u-row.vue | 97 ++ .../components/u-safe-bottom/props.js | 7 + .../u-safe-bottom/u-safe-bottom.vue | 59 + .../components/u-scroll-list/nvue.js | 31 + .../components/u-scroll-list/other.js | 0 .../components/u-scroll-list/props.js | 36 + .../components/u-scroll-list/scrollList.js | 20 + .../components/u-scroll-list/scrollWxs.wxs | 50 + .../u-scroll-list/u-scroll-list.vue | 235 +++ .../uview-plus/components/u-search/props.js | 134 ++ .../uview-plus/components/u-search/search.js | 37 + .../components/u-search/u-search.vue | 332 ++++ .../components/u-section/section.js | 24 + .../uview-plus/components/u-skeleton/props.js | 61 + .../components/u-skeleton/skeleton.js | 25 + .../components/u-skeleton/u-skeleton.vue | 249 +++ .../uview-plus/components/u-slider/mpother.js | 113 ++ .../uview-plus/components/u-slider/mpwxs.js | 43 + .../uview-plus/components/u-slider/mpwxs.wxs | 121 ++ .../uview-plus/components/u-slider/nvue.js | 193 +++ .../uview-plus/components/u-slider/props.js | 91 ++ .../uview-plus/components/u-slider/slider.js | 27 + .../components/u-slider/u-slider.vue | 499 ++++++ .../components/u-status-bar/props.js | 10 + .../components/u-status-bar/statusBar.js | 15 + .../components/u-status-bar/u-status-bar.vue | 56 + .../components/u-steps-item/props.js | 31 + .../components/u-steps-item/stepsItem.js | 18 + .../components/u-steps-item/u-steps-item.vue | 332 ++++ .../uview-plus/components/u-steps/props.js | 41 + .../uview-plus/components/u-steps/steps.js | 21 + .../uview-plus/components/u-steps/u-steps.vue | 90 ++ .../uview-plus/components/u-sticky/props.js | 42 + .../uview-plus/components/u-sticky/sticky.js | 20 + .../components/u-sticky/u-sticky.vue | 216 +++ .../components/u-subsection/props.js | 51 + .../components/u-subsection/subsection.js | 23 + .../components/u-subsection/u-subsection.vue | 318 ++++ .../components/u-swipe-action-item/alipay.sjs | 229 +++ .../u-swipe-action-item/index - backup.wxs | 256 ++++ .../components/u-swipe-action-item/index.wxs | 234 +++ .../u-swipe-action-item/nvue - backup.js | 270 ++++ .../components/u-swipe-action-item/nvue.js | 174 +++ .../components/u-swipe-action-item/other.js | 178 +++ .../components/u-swipe-action-item/props.js | 47 + .../u-swipe-action-item/swipeActionItem.js | 22 + .../u-swipe-action-item.vue | 250 +++ .../components/u-swipe-action-item/wxs.js | 15 + .../components/u-swipe-action/props.js | 16 + .../components/u-swipe-action/swipeAction.js | 15 + .../u-swipe-action/u-swipe-action.vue | 84 ++ .../components/u-swiper-indicator/props.js | 31 + .../u-swiper-indicator/swipterIndicator.js | 19 + .../u-swiper-indicator/u-swiper-indicator.vue | 115 ++ .../uview-plus/components/u-swiper/props.js | 127 ++ .../uview-plus/components/u-swiper/swiper.js | 39 + .../components/u-swiper/u-swiper.vue | 270 ++++ .../uview-plus/components/u-switch/props.js | 64 + .../uview-plus/components/u-switch/switch.js | 24 + .../components/u-switch/u-switch.vue | 216 +++ .../components/u-tabbar-item/props.js | 37 + .../components/u-tabbar-item/tabbarItem.js | 20 + .../u-tabbar-item/u-tabbar-item.vue | 158 ++ .../uview-plus/components/u-tabbar/props.js | 47 + .../uview-plus/components/u-tabbar/tabbar.js | 22 + .../components/u-tabbar/u-tabbar.vue | 145 ++ .../uview-plus/components/u-table/props.js | 7 + .../uview-plus/components/u-table/u-table.vue | 31 + .../components/u-tabs-item/props.js | 7 + .../components/u-tabs-item/u-tabs-item.vue | 31 + .../uview-plus/components/u-tabs/props.js | 66 + .../uview-plus/components/u-tabs/tabs.js | 32 + .../uview-plus/components/u-tabs/u-tabs.vue | 394 +++++ .../uview-plus/components/u-tag/props.js | 90 ++ .../uview-plus/components/u-tag/tag.js | 30 + .../uview-plus/components/u-tag/u-tag.vue | 368 +++++ .../uview-plus/components/u-td/props.js | 7 + .../uview-plus/components/u-td/u-td.vue | 33 + .../uview-plus/components/u-text/props.js | 117 ++ .../uview-plus/components/u-text/text.js | 39 + .../uview-plus/components/u-text/u-text.vue | 236 +++ .../uview-plus/components/u-text/value.js | 87 ++ .../uview-plus/components/u-textarea/props.js | 127 ++ .../components/u-textarea/textarea.js | 36 + .../components/u-textarea/u-textarea.vue | 278 ++++ .../uview-plus/components/u-toast/toast.js | 30 + .../uview-plus/components/u-toast/u-toast.vue | 304 ++++ .../uview-plus/components/u-toolbar/props.js | 41 + .../components/u-toolbar/toolbar.js | 21 + .../components/u-toolbar/u-toolbar.vue | 125 ++ .../uview-plus/components/u-tooltip/props.js | 61 + .../components/u-tooltip/tooltip.js | 25 + .../components/u-tooltip/u-tooltip.vue | 342 +++++ .../uview-plus/components/u-tr/props.js | 7 + .../uview-plus/components/u-tr/u-tr.vue | 33 + .../components/u-transition/nvue-ani-map.js | 68 + .../components/u-transition/props.js | 26 + .../components/u-transition/transition.js | 18 + .../u-transition/transitionMixin.js | 163 ++ .../components/u-transition/u-transition.vue | 96 ++ .../u-transition/vue.ani-style.scss | 113 ++ .../uview-plus/components/u-upload/mixin.js | 23 + .../uview-plus/components/u-upload/props.js | 130 ++ .../components/u-upload/u-upload.vue | 612 ++++++++ .../uview-plus/components/u-upload/upload.js | 37 + .../uview-plus/components/u-upload/utils.js | 166 ++ .../uview-plus/components/u-view/u-view.vue | 73 + .../components/u-waterfall/u-waterfall.vue | 246 +++ .../components/uview-plus/uview-plus.vue | 15 + uni_modules/uview-plus/index.js | 131 ++ uni_modules/uview-plus/index.scss | 24 + uni_modules/uview-plus/libs/config/color.js | 17 + uni_modules/uview-plus/libs/config/config.js | 42 + uni_modules/uview-plus/libs/config/props.js | 190 +++ uni_modules/uview-plus/libs/config/zIndex.js | 20 + uni_modules/uview-plus/libs/css/color.scss | 311 ++++ uni_modules/uview-plus/libs/css/common.scss | 112 ++ .../uview-plus/libs/css/components.scss | 34 + uni_modules/uview-plus/libs/css/flex.scss | 364 +++++ uni_modules/uview-plus/libs/css/h5.scss | 0 uni_modules/uview-plus/libs/css/mixin.scss | 8 + uni_modules/uview-plus/libs/css/mp.scss | 0 uni_modules/uview-plus/libs/css/nvue.scss | 0 uni_modules/uview-plus/libs/css/vue.scss | 28 + .../uview-plus/libs/function/colorGradient.js | 134 ++ .../uview-plus/libs/function/debounce.js | 29 + uni_modules/uview-plus/libs/function/digit.js | 167 ++ uni_modules/uview-plus/libs/function/index.js | 766 ++++++++++ .../uview-plus/libs/function/platform.js | 75 + uni_modules/uview-plus/libs/function/test.js | 320 ++++ .../uview-plus/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 ++ .../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-plus/libs/luch-request/index.d.ts | 116 ++ .../uview-plus/libs/luch-request/index.js | 3 + .../uview-plus/libs/luch-request/utils.js | 131 ++ .../libs/luch-request/utils/clone.js | 264 ++++ uni_modules/uview-plus/libs/mixin/button.js | 18 + uni_modules/uview-plus/libs/mixin/mixin.js | 201 +++ uni_modules/uview-plus/libs/mixin/mpMixin.js | 13 + uni_modules/uview-plus/libs/mixin/mpShare.js | 26 + uni_modules/uview-plus/libs/mixin/openType.js | 27 + uni_modules/uview-plus/libs/mixin/style.js | 249 +++ uni_modules/uview-plus/libs/mixin/touch.js | 61 + .../uview-plus/libs/util/async-validator.js | 1343 +++++++++++++++++ uni_modules/uview-plus/libs/util/calendar.js | 546 +++++++ uni_modules/uview-plus/libs/util/emitter.js | 51 + .../libs/util/gcanvas/bridge/bridge-weex.js | 241 +++ .../context-2d/FillStyleLinearGradient.js | 18 + .../gcanvas/context-2d/FillStylePattern.js | 8 + .../context-2d/FillStyleRadialGradient.js | 17 + .../gcanvas/context-2d/RenderingContext.js | 666 ++++++++ .../util/gcanvas/context-webgl/ActiveInfo.js | 11 + .../libs/util/gcanvas/context-webgl/Buffer.js | 21 + .../util/gcanvas/context-webgl/Framebuffer.js | 21 + .../libs/util/gcanvas/context-webgl/GLenum.js | 298 ++++ .../util/gcanvas/context-webgl/GLmethod.js | 142 ++ .../libs/util/gcanvas/context-webgl/GLtype.js | 23 + .../util/gcanvas/context-webgl/Program.js | 21 + .../gcanvas/context-webgl/Renderbuffer.js | 21 + .../gcanvas/context-webgl/RenderingContext.js | 1191 +++++++++++++++ .../libs/util/gcanvas/context-webgl/Shader.js | 22 + .../context-webgl/ShaderPrecisionFormat.js | 11 + .../util/gcanvas/context-webgl/Texture.js | 22 + .../gcanvas/context-webgl/UniformLocation.js | 22 + .../util/gcanvas/context-webgl/classUtils.js | 3 + .../libs/util/gcanvas/env/canvas.js | 74 + .../uview-plus/libs/util/gcanvas/env/image.js | 96 ++ .../uview-plus/libs/util/gcanvas/env/tool.js | 24 + .../uview-plus/libs/util/gcanvas/index.js | 39 + uni_modules/uview-plus/libs/util/route.js | 124 ++ uni_modules/uview-plus/libs/vue.js | 3 + uni_modules/uview-plus/package.json | 96 ++ uni_modules/uview-plus/theme.scss | 44 + uni_modules/uview-plus/types/comps.d.ts | 101 ++ .../uview-plus/types/comps/_common.d.ts | 9 + .../uview-plus/types/comps/actionSheet.d.ts | 121 ++ uni_modules/uview-plus/types/comps/album.d.ts | 82 + uni_modules/uview-plus/types/comps/alert.d.ts | 55 + .../uview-plus/types/comps/avatar.d.ts | 85 ++ .../uview-plus/types/comps/avatarGroup.d.ts | 62 + .../uview-plus/types/comps/backTop.d.ts | 74 + uni_modules/uview-plus/types/comps/badge.d.ts | 76 + .../uview-plus/types/comps/button.d.ts | 169 +++ .../uview-plus/types/comps/calendar.d.ts | 164 ++ uni_modules/uview-plus/types/comps/cell.d.ts | 133 ++ .../uview-plus/types/comps/cellGroup.d.ts | 27 + .../uview-plus/types/comps/checkbox.d.ts | 69 + .../uview-plus/types/comps/checkboxGroup.d.ts | 93 ++ uni_modules/uview-plus/types/comps/code.d.ts | 69 + .../uview-plus/types/comps/codeInput.d.ts | 98 ++ uni_modules/uview-plus/types/comps/col.d.ts | 43 + .../uview-plus/types/comps/collapse.d.ts | 52 + .../uview-plus/types/comps/collapseItem.d.ts | 83 + .../uview-plus/types/comps/countDown.d.ts | 60 + .../uview-plus/types/comps/countTo.d.ts | 88 ++ .../types/comps/datetimePicker.d.ts | 146 ++ .../uview-plus/types/comps/divider.d.ts | 58 + uni_modules/uview-plus/types/comps/empty.d.ts | 72 + uni_modules/uview-plus/types/comps/form.d.ts | 76 + .../uview-plus/types/comps/formItem.d.ts | 68 + uni_modules/uview-plus/types/comps/gap.d.ts | 35 + uni_modules/uview-plus/types/comps/grid.d.ts | 34 + .../uview-plus/types/comps/gridItem.d.ts | 28 + uni_modules/uview-plus/types/comps/icon.d.ts | 93 ++ uni_modules/uview-plus/types/comps/image.d.ts | 119 ++ .../uview-plus/types/comps/indexAnchor.d.ts | 38 + .../uview-plus/types/comps/indexItem.d.ts | 18 + .../uview-plus/types/comps/indexList.d.ts | 39 + uni_modules/uview-plus/types/comps/input.d.ts | 234 +++ .../uview-plus/types/comps/keyboard.d.ts | 125 ++ uni_modules/uview-plus/types/comps/line.d.ts | 44 + .../uview-plus/types/comps/lineProgress.d.ts | 51 + uni_modules/uview-plus/types/comps/link.d.ts | 51 + uni_modules/uview-plus/types/comps/list.d.ts | 92 ++ .../uview-plus/types/comps/listItem.d.ts | 18 + .../uview-plus/types/comps/loadMore.d.ts | 108 ++ .../uview-plus/types/comps/loadingIcon.d.ts | 68 + .../uview-plus/types/comps/loadingPage.d.ts | 58 + uni_modules/uview-plus/types/comps/modal.d.ts | 115 ++ .../uview-plus/types/comps/navbar.d.ts | 113 ++ .../uview-plus/types/comps/noNetwork.d.ts | 40 + .../uview-plus/types/comps/noticeBar.d.ts | 85 ++ .../uview-plus/types/comps/notify.d.ts | 73 + .../uview-plus/types/comps/numberBox.d.ts | 155 ++ .../uview-plus/types/comps/overlay.d.ts | 46 + uni_modules/uview-plus/types/comps/parse.d.ts | 101 ++ .../uview-plus/types/comps/picker.d.ts | 115 ++ uni_modules/uview-plus/types/comps/popup.d.ts | 103 ++ uni_modules/uview-plus/types/comps/radio.d.ts | 77 + .../uview-plus/types/comps/radioGroup.d.ts | 97 ++ uni_modules/uview-plus/types/comps/rate.d.ts | 85 ++ .../uview-plus/types/comps/readMore.d.ts | 80 + uni_modules/uview-plus/types/comps/row.d.ts | 34 + .../uview-plus/types/comps/safeBottom.d.ts | 16 + .../uview-plus/types/comps/scrollList.d.ts | 51 + .../uview-plus/types/comps/search.d.ts | 167 ++ .../uview-plus/types/comps/skeleton.d.ts | 70 + .../uview-plus/types/comps/slider.d.ts | 79 + .../uview-plus/types/comps/statusBar.d.ts | 22 + uni_modules/uview-plus/types/comps/steps.d.ts | 48 + .../uview-plus/types/comps/stepsItem.d.ts | 41 + .../uview-plus/types/comps/sticky.d.ts | 48 + .../uview-plus/types/comps/subsection.d.ts | 64 + .../uview-plus/types/comps/swipeAction.d.ts | 24 + .../types/comps/swipeActionItem.d.ts | 58 + .../uview-plus/types/comps/swiper.d.ts | 142 ++ .../types/comps/swiperIndicator.d.ts | 37 + .../uview-plus/types/comps/switch.d.ts | 73 + .../uview-plus/types/comps/tabbar.d.ts | 54 + .../uview-plus/types/comps/tabbarItem.d.ts | 52 + uni_modules/uview-plus/types/comps/tabs.d.ts | 85 ++ uni_modules/uview-plus/types/comps/tag.d.ts | 93 ++ uni_modules/uview-plus/types/comps/text.d.ts | 110 ++ .../uview-plus/types/comps/textarea.d.ts | 158 ++ uni_modules/uview-plus/types/comps/toast.d.ts | 59 + .../uview-plus/types/comps/tooltip.d.ts | 71 + .../uview-plus/types/comps/transition.d.ts | 61 + .../uview-plus/types/comps/upload.d.ts | 163 ++ uni_modules/uview-plus/types/index.d.ts | 172 +++ uni_modules/uview-plus/types/package.json | 26 + utils/cache.js | 9 + utils/utils.js | 10 + 564 files changed, 62049 insertions(+) create mode 100644 .gitignore create mode 100644 App.vue create mode 100644 api/interceptor.js create mode 100644 api/page/auth.js create mode 100644 api/page/cart.js create mode 100644 api/page/home.js create mode 100644 api/page/image.js create mode 100644 api/page/product.js create mode 100644 api/page/user.js create mode 100644 api/request.js create mode 100644 common/api.js create mode 100644 common/area.js create mode 100644 common/city.js create mode 100644 common/classify.data.js create mode 100644 common/config.js create mode 100644 common/demo.scss create mode 100644 common/locales/en.js create mode 100644 common/locales/zh.js create mode 100644 common/mixin.js create mode 100644 common/props.js create mode 100644 common/province.js create mode 100644 components/common/Footer.vue create mode 100644 components/common/HeaderSearch.vue create mode 100644 components/common/SearchMain.vue create mode 100644 components/index/Index.vue create mode 100644 components/index/Tabs.vue create mode 100644 components/tabbar/customTabbar.vue create mode 100644 index.html create mode 100644 main.js create mode 100644 manifest.json create mode 100644 package-lock.json create mode 100644 package.json create mode 100644 pages.json create mode 100644 pages/cart/cart.vue create mode 100644 pages/cart/detail.vue create mode 100644 pages/goods/index.vue create mode 100644 pages/login/index.vue create mode 100644 pages/mine/mine.vue create mode 100644 pages/my/index.vue create mode 100644 pages/product/detail.vue create mode 100644 pages/product/product.vue create mode 100644 pages/search/search.vue create mode 100644 pnpm-lock.yaml create mode 100644 static/icon/appointment.png create mode 100644 static/icon/await.png create mode 100644 static/icon/doing.png create mode 100644 static/icon/order.png create mode 100644 static/icon/served.png create mode 100644 static/icon/wallet.png create mode 100644 static/images/empty.png create mode 100644 static/images/logo.png create mode 100644 static/loading.svg create mode 100644 static/logo.png create mode 100644 static/tabbar/activity-fill.png create mode 100644 static/tabbar/activity.png create mode 100644 static/tabbar/classify-fill.png create mode 100644 static/tabbar/classify.png create mode 100644 static/tabbar/home-fill.png create mode 100644 static/tabbar/home.png create mode 100644 static/tabbar/mine-fill.png create mode 100644 static/tabbar/mine.png create mode 100644 static/tabbar/shopping-cart-fill.png create mode 100644 static/tabbar/shopping-cart.png create mode 100644 static/tabbar/v2/home-fill.png create mode 100644 static/tabbar/v2/home.png create mode 100644 static/tabbar/v2/mine-fill.png create mode 100644 static/tabbar/v2/mine.png create mode 100644 uni.promisify.adaptor.js create mode 100644 uni.scss create mode 100644 uni_modules/uview-plus/LICENSE create mode 100644 uni_modules/uview-plus/README.md create mode 100644 uni_modules/uview-plus/changelog.md create mode 100644 uni_modules/uview-plus/components/u--form/u--form.vue create mode 100644 uni_modules/uview-plus/components/u--image/u--image.vue create mode 100644 uni_modules/uview-plus/components/u--input/u--input.vue create mode 100644 uni_modules/uview-plus/components/u--text/u--text.vue create mode 100644 uni_modules/uview-plus/components/u--textarea/u--textarea.vue create mode 100644 uni_modules/uview-plus/components/u-action-sheet/actionSheet.js create mode 100644 uni_modules/uview-plus/components/u-action-sheet/props.js create mode 100644 uni_modules/uview-plus/components/u-action-sheet/u-action-sheet.vue create mode 100644 uni_modules/uview-plus/components/u-album/album.js create mode 100644 uni_modules/uview-plus/components/u-album/props.js create mode 100644 uni_modules/uview-plus/components/u-album/u-album.vue create mode 100644 uni_modules/uview-plus/components/u-alert/alert.js create mode 100644 uni_modules/uview-plus/components/u-alert/props.js create mode 100644 uni_modules/uview-plus/components/u-alert/u-alert.vue create mode 100644 uni_modules/uview-plus/components/u-avatar-group/avatarGroup.js create mode 100644 uni_modules/uview-plus/components/u-avatar-group/props.js create mode 100644 uni_modules/uview-plus/components/u-avatar-group/u-avatar-group.vue create mode 100644 uni_modules/uview-plus/components/u-avatar/avatar.js create mode 100644 uni_modules/uview-plus/components/u-avatar/props.js create mode 100644 uni_modules/uview-plus/components/u-avatar/u-avatar.vue create mode 100644 uni_modules/uview-plus/components/u-back-top/backtop.js create mode 100644 uni_modules/uview-plus/components/u-back-top/props.js create mode 100644 uni_modules/uview-plus/components/u-back-top/u-back-top.vue create mode 100644 uni_modules/uview-plus/components/u-badge/badge.js create mode 100644 uni_modules/uview-plus/components/u-badge/props.js create mode 100644 uni_modules/uview-plus/components/u-badge/u-badge.vue create mode 100644 uni_modules/uview-plus/components/u-box/props.js create mode 100644 uni_modules/uview-plus/components/u-box/u-box.vue create mode 100644 uni_modules/uview-plus/components/u-button/button.js create mode 100644 uni_modules/uview-plus/components/u-button/nvue.scss create mode 100644 uni_modules/uview-plus/components/u-button/props.js create mode 100644 uni_modules/uview-plus/components/u-button/u-button.vue create mode 100644 uni_modules/uview-plus/components/u-button/vue.scss create mode 100644 uni_modules/uview-plus/components/u-calendar/calendar.js create mode 100644 uni_modules/uview-plus/components/u-calendar/header.vue create mode 100644 uni_modules/uview-plus/components/u-calendar/month.vue create mode 100644 uni_modules/uview-plus/components/u-calendar/props.js create mode 100644 uni_modules/uview-plus/components/u-calendar/u-calendar.vue create mode 100644 uni_modules/uview-plus/components/u-calendar/util.js create mode 100644 uni_modules/uview-plus/components/u-car-keyboard/carKeyboard.js create mode 100644 uni_modules/uview-plus/components/u-car-keyboard/props.js create mode 100644 uni_modules/uview-plus/components/u-car-keyboard/u-car-keyboard.vue create mode 100644 uni_modules/uview-plus/components/u-card/props.js create mode 100644 uni_modules/uview-plus/components/u-card/u-card.vue create mode 100644 uni_modules/uview-plus/components/u-cate-tab/u-cate-tab.vue create mode 100644 uni_modules/uview-plus/components/u-cell-group/cellGroup.js create mode 100644 uni_modules/uview-plus/components/u-cell-group/props.js create mode 100644 uni_modules/uview-plus/components/u-cell-group/u-cell-group.vue create mode 100644 uni_modules/uview-plus/components/u-cell/cell.js create mode 100644 uni_modules/uview-plus/components/u-cell/props.js create mode 100644 uni_modules/uview-plus/components/u-cell/u-cell.vue create mode 100644 uni_modules/uview-plus/components/u-checkbox-group/checkboxGroup.js create mode 100644 uni_modules/uview-plus/components/u-checkbox-group/props.js create mode 100644 uni_modules/uview-plus/components/u-checkbox-group/u-checkbox-group.vue create mode 100644 uni_modules/uview-plus/components/u-checkbox/checkbox.js create mode 100644 uni_modules/uview-plus/components/u-checkbox/props.js create mode 100644 uni_modules/uview-plus/components/u-checkbox/u-checkbox.vue create mode 100644 uni_modules/uview-plus/components/u-circle-progress/circleProgress.js create mode 100644 uni_modules/uview-plus/components/u-circle-progress/props.js create mode 100644 uni_modules/uview-plus/components/u-circle-progress/u-circle-progress.vue create mode 100644 uni_modules/uview-plus/components/u-code-input/codeInput.js create mode 100644 uni_modules/uview-plus/components/u-code-input/props.js create mode 100644 uni_modules/uview-plus/components/u-code-input/u-code-input.vue create mode 100644 uni_modules/uview-plus/components/u-code/code.js create mode 100644 uni_modules/uview-plus/components/u-code/props.js create mode 100644 uni_modules/uview-plus/components/u-code/u-code.vue create mode 100644 uni_modules/uview-plus/components/u-col/col.js create mode 100644 uni_modules/uview-plus/components/u-col/props.js create mode 100644 uni_modules/uview-plus/components/u-col/u-col.vue create mode 100644 uni_modules/uview-plus/components/u-collapse-item/collapseItem.js create mode 100644 uni_modules/uview-plus/components/u-collapse-item/props.js create mode 100644 uni_modules/uview-plus/components/u-collapse-item/u-collapse-item.vue create mode 100644 uni_modules/uview-plus/components/u-collapse/collapse.js create mode 100644 uni_modules/uview-plus/components/u-collapse/props.js create mode 100644 uni_modules/uview-plus/components/u-collapse/u-collapse.vue create mode 100644 uni_modules/uview-plus/components/u-column-notice/columnNotice.js create mode 100644 uni_modules/uview-plus/components/u-column-notice/props.js create mode 100644 uni_modules/uview-plus/components/u-column-notice/u-column-notice.vue create mode 100644 uni_modules/uview-plus/components/u-copy/u-copy.vue create mode 100644 uni_modules/uview-plus/components/u-count-down/countDown.js create mode 100644 uni_modules/uview-plus/components/u-count-down/props.js create mode 100644 uni_modules/uview-plus/components/u-count-down/u-count-down.vue create mode 100644 uni_modules/uview-plus/components/u-count-down/utils.js create mode 100644 uni_modules/uview-plus/components/u-count-to/countTo.js create mode 100644 uni_modules/uview-plus/components/u-count-to/props.js create mode 100644 uni_modules/uview-plus/components/u-count-to/u-count-to.vue create mode 100644 uni_modules/uview-plus/components/u-datetime-picker/datetimePicker.js create mode 100644 uni_modules/uview-plus/components/u-datetime-picker/props.js create mode 100644 uni_modules/uview-plus/components/u-datetime-picker/u-datetime-picker.vue create mode 100644 uni_modules/uview-plus/components/u-divider/divider.js create mode 100644 uni_modules/uview-plus/components/u-divider/props.js create mode 100644 uni_modules/uview-plus/components/u-divider/u-divider.vue create mode 100644 uni_modules/uview-plus/components/u-dropdown-item/props.js create mode 100644 uni_modules/uview-plus/components/u-dropdown-item/u-dropdown-item.vue create mode 100644 uni_modules/uview-plus/components/u-dropdown/props.js create mode 100644 uni_modules/uview-plus/components/u-dropdown/u-dropdown.vue create mode 100644 uni_modules/uview-plus/components/u-empty/empty.js create mode 100644 uni_modules/uview-plus/components/u-empty/props.js create mode 100644 uni_modules/uview-plus/components/u-empty/u-empty.vue create mode 100644 uni_modules/uview-plus/components/u-float-button/u-float-button.vue create mode 100644 uni_modules/uview-plus/components/u-form-item/formItem.js create mode 100644 uni_modules/uview-plus/components/u-form-item/props.js create mode 100644 uni_modules/uview-plus/components/u-form-item/u-form-item.vue create mode 100644 uni_modules/uview-plus/components/u-form/form.js create mode 100644 uni_modules/uview-plus/components/u-form/props.js create mode 100644 uni_modules/uview-plus/components/u-form/u-form.vue create mode 100644 uni_modules/uview-plus/components/u-gap/gap.js create mode 100644 uni_modules/uview-plus/components/u-gap/props.js create mode 100644 uni_modules/uview-plus/components/u-gap/u-gap.vue create mode 100644 uni_modules/uview-plus/components/u-grid-item/gridItem.js create mode 100644 uni_modules/uview-plus/components/u-grid-item/props.js create mode 100644 uni_modules/uview-plus/components/u-grid-item/u-grid-item.vue create mode 100644 uni_modules/uview-plus/components/u-grid/grid.js create mode 100644 uni_modules/uview-plus/components/u-grid/props.js create mode 100644 uni_modules/uview-plus/components/u-grid/u-grid.vue create mode 100644 uni_modules/uview-plus/components/u-icon/icon.js create mode 100644 uni_modules/uview-plus/components/u-icon/icons.js create mode 100644 uni_modules/uview-plus/components/u-icon/props.js create mode 100644 uni_modules/uview-plus/components/u-icon/u-icon.vue create mode 100644 uni_modules/uview-plus/components/u-image/image.js create mode 100644 uni_modules/uview-plus/components/u-image/props.js create mode 100644 uni_modules/uview-plus/components/u-image/u-image.vue create mode 100644 uni_modules/uview-plus/components/u-index-anchor/indexAnchor.js create mode 100644 uni_modules/uview-plus/components/u-index-anchor/props.js create mode 100644 uni_modules/uview-plus/components/u-index-anchor/u-index-anchor.vue create mode 100644 uni_modules/uview-plus/components/u-index-item/props.js create mode 100644 uni_modules/uview-plus/components/u-index-item/u-index-item.vue create mode 100644 uni_modules/uview-plus/components/u-index-list/indexList.js create mode 100644 uni_modules/uview-plus/components/u-index-list/props.js create mode 100644 uni_modules/uview-plus/components/u-index-list/u-index-list.vue create mode 100644 uni_modules/uview-plus/components/u-input/input.js create mode 100644 uni_modules/uview-plus/components/u-input/props.js create mode 100644 uni_modules/uview-plus/components/u-input/u-input.vue create mode 100644 uni_modules/uview-plus/components/u-keyboard/keyboard.js create mode 100644 uni_modules/uview-plus/components/u-keyboard/props.js create mode 100644 uni_modules/uview-plus/components/u-keyboard/u-keyboard.vue create mode 100644 uni_modules/uview-plus/components/u-lazy-load/u-lazy-load.vue create mode 100644 uni_modules/uview-plus/components/u-line-progress/lineProgress.js create mode 100644 uni_modules/uview-plus/components/u-line-progress/props.js create mode 100644 uni_modules/uview-plus/components/u-line-progress/u-line-progress.vue create mode 100644 uni_modules/uview-plus/components/u-line/line.js create mode 100644 uni_modules/uview-plus/components/u-line/props.js create mode 100644 uni_modules/uview-plus/components/u-line/u-line.vue create mode 100644 uni_modules/uview-plus/components/u-link/link.js create mode 100644 uni_modules/uview-plus/components/u-link/props.js create mode 100644 uni_modules/uview-plus/components/u-link/u-link.vue create mode 100644 uni_modules/uview-plus/components/u-list-item/listItem.js create mode 100644 uni_modules/uview-plus/components/u-list-item/props.js create mode 100644 uni_modules/uview-plus/components/u-list-item/u-list-item.vue create mode 100644 uni_modules/uview-plus/components/u-list/list.js create mode 100644 uni_modules/uview-plus/components/u-list/props.js create mode 100644 uni_modules/uview-plus/components/u-list/u-list.vue create mode 100644 uni_modules/uview-plus/components/u-loading-icon/loadingIcon.js create mode 100644 uni_modules/uview-plus/components/u-loading-icon/props.js create mode 100644 uni_modules/uview-plus/components/u-loading-icon/u-loading-icon.vue create mode 100644 uni_modules/uview-plus/components/u-loading-page/loadingPage.js create mode 100644 uni_modules/uview-plus/components/u-loading-page/props.js create mode 100644 uni_modules/uview-plus/components/u-loading-page/u-loading-page.vue create mode 100644 uni_modules/uview-plus/components/u-loadmore/loadmore.js create mode 100644 uni_modules/uview-plus/components/u-loadmore/props.js create mode 100644 uni_modules/uview-plus/components/u-loadmore/u-loadmore.vue create mode 100644 uni_modules/uview-plus/components/u-message-input/u-message-input.vue create mode 100644 uni_modules/uview-plus/components/u-modal/modal.js create mode 100644 uni_modules/uview-plus/components/u-modal/props.js create mode 100644 uni_modules/uview-plus/components/u-modal/u-modal.vue create mode 100644 uni_modules/uview-plus/components/u-navbar-mini/props.js create mode 100644 uni_modules/uview-plus/components/u-navbar-mini/u-navbar-mini.vue create mode 100644 uni_modules/uview-plus/components/u-navbar/navbar.js create mode 100644 uni_modules/uview-plus/components/u-navbar/props.js create mode 100644 uni_modules/uview-plus/components/u-navbar/u-navbar.vue create mode 100644 uni_modules/uview-plus/components/u-no-network/noNetwork.js create mode 100644 uni_modules/uview-plus/components/u-no-network/props.js create mode 100644 uni_modules/uview-plus/components/u-no-network/u-no-network.vue create mode 100644 uni_modules/uview-plus/components/u-notice-bar/noticeBar.js create mode 100644 uni_modules/uview-plus/components/u-notice-bar/props.js create mode 100644 uni_modules/uview-plus/components/u-notice-bar/u-notice-bar.vue create mode 100644 uni_modules/uview-plus/components/u-notify/notify.js create mode 100644 uni_modules/uview-plus/components/u-notify/props.js create mode 100644 uni_modules/uview-plus/components/u-notify/u-notify.vue create mode 100644 uni_modules/uview-plus/components/u-number-box/numberBox.js create mode 100644 uni_modules/uview-plus/components/u-number-box/props.js create mode 100644 uni_modules/uview-plus/components/u-number-box/u-number-box.vue create mode 100644 uni_modules/uview-plus/components/u-number-keyboard/numberKeyboard.js create mode 100644 uni_modules/uview-plus/components/u-number-keyboard/props.js create mode 100644 uni_modules/uview-plus/components/u-number-keyboard/u-number-keyboard.vue create mode 100644 uni_modules/uview-plus/components/u-overlay/overlay.js create mode 100644 uni_modules/uview-plus/components/u-overlay/props.js create mode 100644 uni_modules/uview-plus/components/u-overlay/u-overlay.vue create mode 100644 uni_modules/uview-plus/components/u-parse/node/node.vue create mode 100644 uni_modules/uview-plus/components/u-parse/parse.js create mode 100644 uni_modules/uview-plus/components/u-parse/parser.js create mode 100644 uni_modules/uview-plus/components/u-parse/props.js create mode 100644 uni_modules/uview-plus/components/u-parse/u-parse.vue create mode 100644 uni_modules/uview-plus/components/u-picker-column/props.js create mode 100644 uni_modules/uview-plus/components/u-picker-column/u-picker-column.vue create mode 100644 uni_modules/uview-plus/components/u-picker/picker.js create mode 100644 uni_modules/uview-plus/components/u-picker/props.js create mode 100644 uni_modules/uview-plus/components/u-picker/u-picker.vue create mode 100644 uni_modules/uview-plus/components/u-popup/popup.js create mode 100644 uni_modules/uview-plus/components/u-popup/props.js create mode 100644 uni_modules/uview-plus/components/u-popup/u-popup.vue create mode 100644 uni_modules/uview-plus/components/u-qrcode/qrcode.js create mode 100644 uni_modules/uview-plus/components/u-qrcode/u-qrcode.vue create mode 100644 uni_modules/uview-plus/components/u-radio-group/props.js create mode 100644 uni_modules/uview-plus/components/u-radio-group/radioGroup.js create mode 100644 uni_modules/uview-plus/components/u-radio-group/u-radio-group.vue create mode 100644 uni_modules/uview-plus/components/u-radio/props.js create mode 100644 uni_modules/uview-plus/components/u-radio/radio.js create mode 100644 uni_modules/uview-plus/components/u-radio/u-radio.vue create mode 100644 uni_modules/uview-plus/components/u-rate/props.js create mode 100644 uni_modules/uview-plus/components/u-rate/rate.js create mode 100644 uni_modules/uview-plus/components/u-rate/u-rate.vue create mode 100644 uni_modules/uview-plus/components/u-read-more/props.js create mode 100644 uni_modules/uview-plus/components/u-read-more/readMore.js create mode 100644 uni_modules/uview-plus/components/u-read-more/u-read-more.vue create mode 100644 uni_modules/uview-plus/components/u-row-notice/props.js create mode 100644 uni_modules/uview-plus/components/u-row-notice/rowNotice.js create mode 100644 uni_modules/uview-plus/components/u-row-notice/u-row-notice.vue create mode 100644 uni_modules/uview-plus/components/u-row/props.js create mode 100644 uni_modules/uview-plus/components/u-row/row.js create mode 100644 uni_modules/uview-plus/components/u-row/u-row.vue create mode 100644 uni_modules/uview-plus/components/u-safe-bottom/props.js create mode 100644 uni_modules/uview-plus/components/u-safe-bottom/u-safe-bottom.vue create mode 100644 uni_modules/uview-plus/components/u-scroll-list/nvue.js create mode 100644 uni_modules/uview-plus/components/u-scroll-list/other.js create mode 100644 uni_modules/uview-plus/components/u-scroll-list/props.js create mode 100644 uni_modules/uview-plus/components/u-scroll-list/scrollList.js create mode 100644 uni_modules/uview-plus/components/u-scroll-list/scrollWxs.wxs create mode 100644 uni_modules/uview-plus/components/u-scroll-list/u-scroll-list.vue create mode 100644 uni_modules/uview-plus/components/u-search/props.js create mode 100644 uni_modules/uview-plus/components/u-search/search.js create mode 100644 uni_modules/uview-plus/components/u-search/u-search.vue create mode 100644 uni_modules/uview-plus/components/u-section/section.js create mode 100644 uni_modules/uview-plus/components/u-skeleton/props.js create mode 100644 uni_modules/uview-plus/components/u-skeleton/skeleton.js create mode 100644 uni_modules/uview-plus/components/u-skeleton/u-skeleton.vue create mode 100644 uni_modules/uview-plus/components/u-slider/mpother.js create mode 100644 uni_modules/uview-plus/components/u-slider/mpwxs.js create mode 100644 uni_modules/uview-plus/components/u-slider/mpwxs.wxs create mode 100644 uni_modules/uview-plus/components/u-slider/nvue.js create mode 100644 uni_modules/uview-plus/components/u-slider/props.js create mode 100644 uni_modules/uview-plus/components/u-slider/slider.js create mode 100644 uni_modules/uview-plus/components/u-slider/u-slider.vue create mode 100644 uni_modules/uview-plus/components/u-status-bar/props.js create mode 100644 uni_modules/uview-plus/components/u-status-bar/statusBar.js create mode 100644 uni_modules/uview-plus/components/u-status-bar/u-status-bar.vue create mode 100644 uni_modules/uview-plus/components/u-steps-item/props.js create mode 100644 uni_modules/uview-plus/components/u-steps-item/stepsItem.js create mode 100644 uni_modules/uview-plus/components/u-steps-item/u-steps-item.vue create mode 100644 uni_modules/uview-plus/components/u-steps/props.js create mode 100644 uni_modules/uview-plus/components/u-steps/steps.js create mode 100644 uni_modules/uview-plus/components/u-steps/u-steps.vue create mode 100644 uni_modules/uview-plus/components/u-sticky/props.js create mode 100644 uni_modules/uview-plus/components/u-sticky/sticky.js create mode 100644 uni_modules/uview-plus/components/u-sticky/u-sticky.vue create mode 100644 uni_modules/uview-plus/components/u-subsection/props.js create mode 100644 uni_modules/uview-plus/components/u-subsection/subsection.js create mode 100644 uni_modules/uview-plus/components/u-subsection/u-subsection.vue create mode 100644 uni_modules/uview-plus/components/u-swipe-action-item/alipay.sjs create mode 100644 uni_modules/uview-plus/components/u-swipe-action-item/index - backup.wxs create mode 100644 uni_modules/uview-plus/components/u-swipe-action-item/index.wxs create mode 100644 uni_modules/uview-plus/components/u-swipe-action-item/nvue - backup.js create mode 100644 uni_modules/uview-plus/components/u-swipe-action-item/nvue.js create mode 100644 uni_modules/uview-plus/components/u-swipe-action-item/other.js create mode 100644 uni_modules/uview-plus/components/u-swipe-action-item/props.js create mode 100644 uni_modules/uview-plus/components/u-swipe-action-item/swipeActionItem.js create mode 100644 uni_modules/uview-plus/components/u-swipe-action-item/u-swipe-action-item.vue create mode 100644 uni_modules/uview-plus/components/u-swipe-action-item/wxs.js create mode 100644 uni_modules/uview-plus/components/u-swipe-action/props.js create mode 100644 uni_modules/uview-plus/components/u-swipe-action/swipeAction.js create mode 100644 uni_modules/uview-plus/components/u-swipe-action/u-swipe-action.vue create mode 100644 uni_modules/uview-plus/components/u-swiper-indicator/props.js create mode 100644 uni_modules/uview-plus/components/u-swiper-indicator/swipterIndicator.js create mode 100644 uni_modules/uview-plus/components/u-swiper-indicator/u-swiper-indicator.vue create mode 100644 uni_modules/uview-plus/components/u-swiper/props.js create mode 100644 uni_modules/uview-plus/components/u-swiper/swiper.js create mode 100644 uni_modules/uview-plus/components/u-swiper/u-swiper.vue create mode 100644 uni_modules/uview-plus/components/u-switch/props.js create mode 100644 uni_modules/uview-plus/components/u-switch/switch.js create mode 100644 uni_modules/uview-plus/components/u-switch/u-switch.vue create mode 100644 uni_modules/uview-plus/components/u-tabbar-item/props.js create mode 100644 uni_modules/uview-plus/components/u-tabbar-item/tabbarItem.js create mode 100644 uni_modules/uview-plus/components/u-tabbar-item/u-tabbar-item.vue create mode 100644 uni_modules/uview-plus/components/u-tabbar/props.js create mode 100644 uni_modules/uview-plus/components/u-tabbar/tabbar.js create mode 100644 uni_modules/uview-plus/components/u-tabbar/u-tabbar.vue create mode 100644 uni_modules/uview-plus/components/u-table/props.js create mode 100644 uni_modules/uview-plus/components/u-table/u-table.vue create mode 100644 uni_modules/uview-plus/components/u-tabs-item/props.js create mode 100644 uni_modules/uview-plus/components/u-tabs-item/u-tabs-item.vue create mode 100644 uni_modules/uview-plus/components/u-tabs/props.js create mode 100644 uni_modules/uview-plus/components/u-tabs/tabs.js create mode 100644 uni_modules/uview-plus/components/u-tabs/u-tabs.vue create mode 100644 uni_modules/uview-plus/components/u-tag/props.js create mode 100644 uni_modules/uview-plus/components/u-tag/tag.js create mode 100644 uni_modules/uview-plus/components/u-tag/u-tag.vue create mode 100644 uni_modules/uview-plus/components/u-td/props.js create mode 100644 uni_modules/uview-plus/components/u-td/u-td.vue create mode 100644 uni_modules/uview-plus/components/u-text/props.js create mode 100644 uni_modules/uview-plus/components/u-text/text.js create mode 100644 uni_modules/uview-plus/components/u-text/u-text.vue create mode 100644 uni_modules/uview-plus/components/u-text/value.js create mode 100644 uni_modules/uview-plus/components/u-textarea/props.js create mode 100644 uni_modules/uview-plus/components/u-textarea/textarea.js create mode 100644 uni_modules/uview-plus/components/u-textarea/u-textarea.vue create mode 100644 uni_modules/uview-plus/components/u-toast/toast.js create mode 100644 uni_modules/uview-plus/components/u-toast/u-toast.vue create mode 100644 uni_modules/uview-plus/components/u-toolbar/props.js create mode 100644 uni_modules/uview-plus/components/u-toolbar/toolbar.js create mode 100644 uni_modules/uview-plus/components/u-toolbar/u-toolbar.vue create mode 100644 uni_modules/uview-plus/components/u-tooltip/props.js create mode 100644 uni_modules/uview-plus/components/u-tooltip/tooltip.js create mode 100644 uni_modules/uview-plus/components/u-tooltip/u-tooltip.vue create mode 100644 uni_modules/uview-plus/components/u-tr/props.js create mode 100644 uni_modules/uview-plus/components/u-tr/u-tr.vue create mode 100644 uni_modules/uview-plus/components/u-transition/nvue-ani-map.js create mode 100644 uni_modules/uview-plus/components/u-transition/props.js create mode 100644 uni_modules/uview-plus/components/u-transition/transition.js create mode 100644 uni_modules/uview-plus/components/u-transition/transitionMixin.js create mode 100644 uni_modules/uview-plus/components/u-transition/u-transition.vue create mode 100644 uni_modules/uview-plus/components/u-transition/vue.ani-style.scss create mode 100644 uni_modules/uview-plus/components/u-upload/mixin.js create mode 100644 uni_modules/uview-plus/components/u-upload/props.js create mode 100644 uni_modules/uview-plus/components/u-upload/u-upload.vue create mode 100644 uni_modules/uview-plus/components/u-upload/upload.js create mode 100644 uni_modules/uview-plus/components/u-upload/utils.js create mode 100644 uni_modules/uview-plus/components/u-view/u-view.vue create mode 100644 uni_modules/uview-plus/components/u-waterfall/u-waterfall.vue create mode 100644 uni_modules/uview-plus/components/uview-plus/uview-plus.vue create mode 100644 uni_modules/uview-plus/index.js create mode 100644 uni_modules/uview-plus/index.scss create mode 100644 uni_modules/uview-plus/libs/config/color.js create mode 100644 uni_modules/uview-plus/libs/config/config.js create mode 100644 uni_modules/uview-plus/libs/config/props.js create mode 100644 uni_modules/uview-plus/libs/config/zIndex.js create mode 100644 uni_modules/uview-plus/libs/css/color.scss create mode 100644 uni_modules/uview-plus/libs/css/common.scss create mode 100644 uni_modules/uview-plus/libs/css/components.scss create mode 100644 uni_modules/uview-plus/libs/css/flex.scss create mode 100644 uni_modules/uview-plus/libs/css/h5.scss create mode 100644 uni_modules/uview-plus/libs/css/mixin.scss create mode 100644 uni_modules/uview-plus/libs/css/mp.scss create mode 100644 uni_modules/uview-plus/libs/css/nvue.scss create mode 100644 uni_modules/uview-plus/libs/css/vue.scss create mode 100644 uni_modules/uview-plus/libs/function/colorGradient.js create mode 100644 uni_modules/uview-plus/libs/function/debounce.js create mode 100644 uni_modules/uview-plus/libs/function/digit.js create mode 100644 uni_modules/uview-plus/libs/function/index.js create mode 100644 uni_modules/uview-plus/libs/function/platform.js create mode 100644 uni_modules/uview-plus/libs/function/test.js create mode 100644 uni_modules/uview-plus/libs/function/throttle.js create mode 100644 uni_modules/uview-plus/libs/luch-request/adapters/index.js create mode 100644 uni_modules/uview-plus/libs/luch-request/core/InterceptorManager.js create mode 100644 uni_modules/uview-plus/libs/luch-request/core/Request.js create mode 100644 uni_modules/uview-plus/libs/luch-request/core/buildFullPath.js create mode 100644 uni_modules/uview-plus/libs/luch-request/core/defaults.js create mode 100644 uni_modules/uview-plus/libs/luch-request/core/dispatchRequest.js create mode 100644 uni_modules/uview-plus/libs/luch-request/core/mergeConfig.js create mode 100644 uni_modules/uview-plus/libs/luch-request/core/settle.js create mode 100644 uni_modules/uview-plus/libs/luch-request/helpers/buildURL.js create mode 100644 uni_modules/uview-plus/libs/luch-request/helpers/combineURLs.js create mode 100644 uni_modules/uview-plus/libs/luch-request/helpers/isAbsoluteURL.js create mode 100644 uni_modules/uview-plus/libs/luch-request/index.d.ts create mode 100644 uni_modules/uview-plus/libs/luch-request/index.js create mode 100644 uni_modules/uview-plus/libs/luch-request/utils.js create mode 100644 uni_modules/uview-plus/libs/luch-request/utils/clone.js create mode 100644 uni_modules/uview-plus/libs/mixin/button.js create mode 100644 uni_modules/uview-plus/libs/mixin/mixin.js create mode 100644 uni_modules/uview-plus/libs/mixin/mpMixin.js create mode 100644 uni_modules/uview-plus/libs/mixin/mpShare.js create mode 100644 uni_modules/uview-plus/libs/mixin/openType.js create mode 100644 uni_modules/uview-plus/libs/mixin/style.js create mode 100644 uni_modules/uview-plus/libs/mixin/touch.js create mode 100644 uni_modules/uview-plus/libs/util/async-validator.js create mode 100644 uni_modules/uview-plus/libs/util/calendar.js create mode 100644 uni_modules/uview-plus/libs/util/emitter.js create mode 100644 uni_modules/uview-plus/libs/util/gcanvas/bridge/bridge-weex.js create mode 100644 uni_modules/uview-plus/libs/util/gcanvas/context-2d/FillStyleLinearGradient.js create mode 100644 uni_modules/uview-plus/libs/util/gcanvas/context-2d/FillStylePattern.js create mode 100644 uni_modules/uview-plus/libs/util/gcanvas/context-2d/FillStyleRadialGradient.js create mode 100644 uni_modules/uview-plus/libs/util/gcanvas/context-2d/RenderingContext.js create mode 100644 uni_modules/uview-plus/libs/util/gcanvas/context-webgl/ActiveInfo.js create mode 100644 uni_modules/uview-plus/libs/util/gcanvas/context-webgl/Buffer.js create mode 100644 uni_modules/uview-plus/libs/util/gcanvas/context-webgl/Framebuffer.js create mode 100644 uni_modules/uview-plus/libs/util/gcanvas/context-webgl/GLenum.js create mode 100644 uni_modules/uview-plus/libs/util/gcanvas/context-webgl/GLmethod.js create mode 100644 uni_modules/uview-plus/libs/util/gcanvas/context-webgl/GLtype.js create mode 100644 uni_modules/uview-plus/libs/util/gcanvas/context-webgl/Program.js create mode 100644 uni_modules/uview-plus/libs/util/gcanvas/context-webgl/Renderbuffer.js create mode 100644 uni_modules/uview-plus/libs/util/gcanvas/context-webgl/RenderingContext.js create mode 100644 uni_modules/uview-plus/libs/util/gcanvas/context-webgl/Shader.js create mode 100644 uni_modules/uview-plus/libs/util/gcanvas/context-webgl/ShaderPrecisionFormat.js create mode 100644 uni_modules/uview-plus/libs/util/gcanvas/context-webgl/Texture.js create mode 100644 uni_modules/uview-plus/libs/util/gcanvas/context-webgl/UniformLocation.js create mode 100644 uni_modules/uview-plus/libs/util/gcanvas/context-webgl/classUtils.js create mode 100644 uni_modules/uview-plus/libs/util/gcanvas/env/canvas.js create mode 100644 uni_modules/uview-plus/libs/util/gcanvas/env/image.js create mode 100644 uni_modules/uview-plus/libs/util/gcanvas/env/tool.js create mode 100644 uni_modules/uview-plus/libs/util/gcanvas/index.js create mode 100644 uni_modules/uview-plus/libs/util/route.js create mode 100644 uni_modules/uview-plus/libs/vue.js create mode 100644 uni_modules/uview-plus/package.json create mode 100644 uni_modules/uview-plus/theme.scss create mode 100644 uni_modules/uview-plus/types/comps.d.ts create mode 100644 uni_modules/uview-plus/types/comps/_common.d.ts create mode 100644 uni_modules/uview-plus/types/comps/actionSheet.d.ts create mode 100644 uni_modules/uview-plus/types/comps/album.d.ts create mode 100644 uni_modules/uview-plus/types/comps/alert.d.ts create mode 100644 uni_modules/uview-plus/types/comps/avatar.d.ts create mode 100644 uni_modules/uview-plus/types/comps/avatarGroup.d.ts create mode 100644 uni_modules/uview-plus/types/comps/backTop.d.ts create mode 100644 uni_modules/uview-plus/types/comps/badge.d.ts create mode 100644 uni_modules/uview-plus/types/comps/button.d.ts create mode 100644 uni_modules/uview-plus/types/comps/calendar.d.ts create mode 100644 uni_modules/uview-plus/types/comps/cell.d.ts create mode 100644 uni_modules/uview-plus/types/comps/cellGroup.d.ts create mode 100644 uni_modules/uview-plus/types/comps/checkbox.d.ts create mode 100644 uni_modules/uview-plus/types/comps/checkboxGroup.d.ts create mode 100644 uni_modules/uview-plus/types/comps/code.d.ts create mode 100644 uni_modules/uview-plus/types/comps/codeInput.d.ts create mode 100644 uni_modules/uview-plus/types/comps/col.d.ts create mode 100644 uni_modules/uview-plus/types/comps/collapse.d.ts create mode 100644 uni_modules/uview-plus/types/comps/collapseItem.d.ts create mode 100644 uni_modules/uview-plus/types/comps/countDown.d.ts create mode 100644 uni_modules/uview-plus/types/comps/countTo.d.ts create mode 100644 uni_modules/uview-plus/types/comps/datetimePicker.d.ts create mode 100644 uni_modules/uview-plus/types/comps/divider.d.ts create mode 100644 uni_modules/uview-plus/types/comps/empty.d.ts create mode 100644 uni_modules/uview-plus/types/comps/form.d.ts create mode 100644 uni_modules/uview-plus/types/comps/formItem.d.ts create mode 100644 uni_modules/uview-plus/types/comps/gap.d.ts create mode 100644 uni_modules/uview-plus/types/comps/grid.d.ts create mode 100644 uni_modules/uview-plus/types/comps/gridItem.d.ts create mode 100644 uni_modules/uview-plus/types/comps/icon.d.ts create mode 100644 uni_modules/uview-plus/types/comps/image.d.ts create mode 100644 uni_modules/uview-plus/types/comps/indexAnchor.d.ts create mode 100644 uni_modules/uview-plus/types/comps/indexItem.d.ts create mode 100644 uni_modules/uview-plus/types/comps/indexList.d.ts create mode 100644 uni_modules/uview-plus/types/comps/input.d.ts create mode 100644 uni_modules/uview-plus/types/comps/keyboard.d.ts create mode 100644 uni_modules/uview-plus/types/comps/line.d.ts create mode 100644 uni_modules/uview-plus/types/comps/lineProgress.d.ts create mode 100644 uni_modules/uview-plus/types/comps/link.d.ts create mode 100644 uni_modules/uview-plus/types/comps/list.d.ts create mode 100644 uni_modules/uview-plus/types/comps/listItem.d.ts create mode 100644 uni_modules/uview-plus/types/comps/loadMore.d.ts create mode 100644 uni_modules/uview-plus/types/comps/loadingIcon.d.ts create mode 100644 uni_modules/uview-plus/types/comps/loadingPage.d.ts create mode 100644 uni_modules/uview-plus/types/comps/modal.d.ts create mode 100644 uni_modules/uview-plus/types/comps/navbar.d.ts create mode 100644 uni_modules/uview-plus/types/comps/noNetwork.d.ts create mode 100644 uni_modules/uview-plus/types/comps/noticeBar.d.ts create mode 100644 uni_modules/uview-plus/types/comps/notify.d.ts create mode 100644 uni_modules/uview-plus/types/comps/numberBox.d.ts create mode 100644 uni_modules/uview-plus/types/comps/overlay.d.ts create mode 100644 uni_modules/uview-plus/types/comps/parse.d.ts create mode 100644 uni_modules/uview-plus/types/comps/picker.d.ts create mode 100644 uni_modules/uview-plus/types/comps/popup.d.ts create mode 100644 uni_modules/uview-plus/types/comps/radio.d.ts create mode 100644 uni_modules/uview-plus/types/comps/radioGroup.d.ts create mode 100644 uni_modules/uview-plus/types/comps/rate.d.ts create mode 100644 uni_modules/uview-plus/types/comps/readMore.d.ts create mode 100644 uni_modules/uview-plus/types/comps/row.d.ts create mode 100644 uni_modules/uview-plus/types/comps/safeBottom.d.ts create mode 100644 uni_modules/uview-plus/types/comps/scrollList.d.ts create mode 100644 uni_modules/uview-plus/types/comps/search.d.ts create mode 100644 uni_modules/uview-plus/types/comps/skeleton.d.ts create mode 100644 uni_modules/uview-plus/types/comps/slider.d.ts create mode 100644 uni_modules/uview-plus/types/comps/statusBar.d.ts create mode 100644 uni_modules/uview-plus/types/comps/steps.d.ts create mode 100644 uni_modules/uview-plus/types/comps/stepsItem.d.ts create mode 100644 uni_modules/uview-plus/types/comps/sticky.d.ts create mode 100644 uni_modules/uview-plus/types/comps/subsection.d.ts create mode 100644 uni_modules/uview-plus/types/comps/swipeAction.d.ts create mode 100644 uni_modules/uview-plus/types/comps/swipeActionItem.d.ts create mode 100644 uni_modules/uview-plus/types/comps/swiper.d.ts create mode 100644 uni_modules/uview-plus/types/comps/swiperIndicator.d.ts create mode 100644 uni_modules/uview-plus/types/comps/switch.d.ts create mode 100644 uni_modules/uview-plus/types/comps/tabbar.d.ts create mode 100644 uni_modules/uview-plus/types/comps/tabbarItem.d.ts create mode 100644 uni_modules/uview-plus/types/comps/tabs.d.ts create mode 100644 uni_modules/uview-plus/types/comps/tag.d.ts create mode 100644 uni_modules/uview-plus/types/comps/text.d.ts create mode 100644 uni_modules/uview-plus/types/comps/textarea.d.ts create mode 100644 uni_modules/uview-plus/types/comps/toast.d.ts create mode 100644 uni_modules/uview-plus/types/comps/tooltip.d.ts create mode 100644 uni_modules/uview-plus/types/comps/transition.d.ts create mode 100644 uni_modules/uview-plus/types/comps/upload.d.ts create mode 100644 uni_modules/uview-plus/types/index.d.ts create mode 100644 uni_modules/uview-plus/types/package.json create mode 100644 utils/cache.js create mode 100644 utils/utils.js diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..acedc09 --- /dev/null +++ b/.gitignore @@ -0,0 +1,6 @@ +node_modules +.project +unpackage/ +.DS_Store +.hbuilderx +.idea diff --git a/App.vue b/App.vue new file mode 100644 index 0000000..d7b19c1 --- /dev/null +++ b/App.vue @@ -0,0 +1,74 @@ + + + \ No newline at end of file diff --git a/api/interceptor.js b/api/interceptor.js new file mode 100644 index 0000000..81f19ae --- /dev/null +++ b/api/interceptor.js @@ -0,0 +1,114 @@ +// 定义一个全局请求配置(可被多个拦截器修改) +import {setCache} from "@/utils/cache"; + +export let globalConfig = { + baseURL: 'https://wx.api.borman.top/api/', + // baseURL: 'http://brm.wx.api.borman.top/api/', + // baseURL: 'https://wx.boerman.top/api/', + // baseURL: 'http://127.0.0.1:18004/api/', // 本地测试地址 + // baseURL: 'http://127.0.0.1:18006/api/', // 本地测试地址 + header: { + 'Content-Type': 'application/json' + } +}; + +// 请求拦截器队列 +const requestInterceptors = []; + +// 添加请求拦截器 +export function addRequestInterceptor(interceptor) { + requestInterceptors.push(interceptor); +} + +// 执行请求拦截器 +export async function runRequestInterceptors(config) { + let newConfig = { ...config }; + for (const interceptor of requestInterceptors) { + newConfig = await interceptor(newConfig); + } + return newConfig; +} + +// 响应拦截器队列 +const responseInterceptors = []; + +// 添加响应拦截器 +export function addResponseInterceptor(interceptor) { + responseInterceptors.push(interceptor); +} + +// 执行响应拦截器 +export async function runResponseInterceptors(response) { + let newResponse = { ...response }; + for (const interceptor of responseInterceptors) { + newResponse = await interceptor(newResponse); + } + return newResponse; +} + +// 初始化默认拦截器(可选) +addRequestInterceptor(config => { + // 自动携带token示例 + const token = uni.getStorageSync('token'); + // 临时token(测试用) + // const token = 'JG7hKhTQoANh/hyL67BzIg=='; + if (token) { + config.header.Authorization = `Bearer ${token}`; + } + return config; +}); + +addResponseInterceptor(response => { + // 统一处理错误状态码 + if (response.statusCode !== 200) { + uni.showToast({ title: `请求错误: ${response.data.message}`, icon: 'none' }); + return Promise.reject(response.data.message); + } + + if (response.data.code === 500) { + uni.showToast({ title: response.data.message, icon: 'none' }); + return Promise.reject(response.data.message); + } + + if (response.data.code === 401) { + uni.showToast({ title: '登录已过期,请重新登录', icon: 'none' }); + setCache('token', null); + setTimeout(() => { + // 储存当前访问的路由 + // 获取当前页面栈 + const pages = getCurrentPages(); + if (pages.length === 0) { + console.error('未找到当前页面栈'); + return; + } + // 获取当前页面实例 + const currentPage = pages[pages.length - 1]; + if (!currentPage) { + console.error('未找到当前页面实例'); + return; + } + // 获取当前页面的路由地址 + const currentRoute = currentPage.route; + if (!currentRoute) { + console.error('未找到当前页面的路由地址'); + return; + } + // 获取传参 + const options = currentPage.options; + // 构建包含参数的查询字符串 + let queryString = ''; + if (Object.keys(options).length > 0) { + queryString = '?' + Object.entries(options) + .map(([key, value]) => `${key}=${encodeURIComponent(value)}`) + .join('&'); + } + // 拼接完整的路由地址 + const fullRoute = `/${currentRoute}${queryString}`; + // 设置缓存 + setCache('currentPage', fullRoute); + uni.reLaunch({ url: '/pages/login/index' }); + }, 1000) + } + + return response.data.result; // 根据实际接口返回结构调整 +}); diff --git a/api/page/auth.js b/api/page/auth.js new file mode 100644 index 0000000..4a748bb --- /dev/null +++ b/api/page/auth.js @@ -0,0 +1,11 @@ +import {get, post} from '../request'; + +const prefix = 'auth/' +export const loginApi = async (code, phoneCode, avatarUrl, nickName) => { + return await post(`${prefix}login`, { + code, + phone_code: phoneCode, + avatar: avatarUrl, + nick_name: nickName + }) +} diff --git a/api/page/cart.js b/api/page/cart.js new file mode 100644 index 0000000..120a63c --- /dev/null +++ b/api/page/cart.js @@ -0,0 +1,30 @@ +import {get, post} from '../request'; + +const prefix = 'list/' + +export const getCartListApi = async () => { + return await get(`${prefix}list`) +} +export const getCartItemApi = async (id) => { + return await get(`${prefix}detail`, {id}) +} +export const createCartApi = async (params) => { + return await post(`${prefix}create`, params) +} +export const deleteCartApi = async (id) => { + return await post(`${prefix}delete`, { + ids: [id] + }) +} +export const deleteCartItemApi = async (id) => { + return await post(`${prefix}delete-item`, { + ids: [id] + }) +} +export const toCartApi = async (listId, productId) => { + return await post(`${prefix}to-cart`, { + list_id: listId, + product_id: productId + }) +} + diff --git a/api/page/home.js b/api/page/home.js new file mode 100644 index 0000000..bd1d8f8 --- /dev/null +++ b/api/page/home.js @@ -0,0 +1,10 @@ +import {get} from '../request'; + +const prefix = 'home/' + +export const getCarouselApi = async () => { + return await get(`${prefix}carousel`) +} +export const getCategoryListApi = async () => { + return await get(`${prefix}category-list`) +} diff --git a/api/page/image.js b/api/page/image.js new file mode 100644 index 0000000..93a3586 --- /dev/null +++ b/api/page/image.js @@ -0,0 +1,15 @@ +import {get, post} from '../request'; + +const prefix = 'w-oss/' + +export const getImageApi = async (hash = '') => { + return await get(`${prefix}getImage`, { + hash + }) +} +export const uploadImageWatermarkApi = async (imageUrl = '', watermark = 'BRM') => { + return await post(`${prefix}watermark`, { + image_url: imageUrl, + watermark + }) +} diff --git a/api/page/product.js b/api/page/product.js new file mode 100644 index 0000000..9ed451b --- /dev/null +++ b/api/page/product.js @@ -0,0 +1,14 @@ + +import {get} from '../request'; + +const prefix = 'product/' + +export const getProductListApi = async (param) => { + return await get(`${prefix}list`, param) +} +export const getCategoryListByPidApi = async (pid = 0) => { + return await get(`${prefix}category-list-by-pid`, {pid}) +} +export const getProductDetailApi = async (id = 0, p_user_id = 0) => { + return await get(`${prefix}detail`, {id, p_user_id}) +} diff --git a/api/page/user.js b/api/page/user.js new file mode 100644 index 0000000..9916daa --- /dev/null +++ b/api/page/user.js @@ -0,0 +1,17 @@ +import {get, post} from '../request'; + +const prefix = 'user/' + +export const getUserInfoApi = async () => { + return await get(`${prefix}my-info`) +} +export const bandPhoneApi = async (phone) => { + return await post(`${prefix}band-phone`, { + phone: phone + }) +} +export const updateNickNameApi = async (nick_name) => { + return await post(`${prefix}update-nick-name`, { + nick_name + }) +} diff --git a/api/request.js b/api/request.js new file mode 100644 index 0000000..08fecfc --- /dev/null +++ b/api/request.js @@ -0,0 +1,70 @@ +import { + runRequestInterceptors, + runResponseInterceptors, + globalConfig +} from './interceptor.js'; +// import * as uni from "@/api/request"; // 原错误导入保留供参考 + +// 基础请求方法 +export function request(options) { + return new Promise(async (resolve, reject) => { + try { + // 合并全局配置 + const mergedConfig = { + ...globalConfig, + ...options, + header: { ...globalConfig.header, ...(options.header || {}) } + }; + + // 执行请求拦截器 + let finalConfig; + try { + finalConfig = await runRequestInterceptors(mergedConfig); + } catch (err) { + return reject(err); + } + + if (!finalConfig.url) { + return reject(new Error('URL is required')); + } + + // 发起请求(修复点:移除多余的await) + uni.request({ + ...finalConfig, + url: finalConfig.baseURL + finalConfig.url, + success: async (res) => { + try { + const handledRes = await runResponseInterceptors(res); + // console.log(handledRes, 'ssssssssssssssss'); // 保留调试日志 + resolve(handledRes); + } catch (err) { + reject(err); + } + }, + fail: (err) => reject(err) + }); + } catch (error) { + reject(error); + } + }); +} + +// 封装GET方法(保持async/await结构) +export async function get(url, params = {}, options = {}) { + return await request({ + url, + method: 'GET', + data: params, + ...options + }); +} + +// 封装POST方法(保持async/await结构) +export async function post(url, data = {}, options = {}) { + return await request({ + url, + method: 'POST', + data, + ...options + }); +} \ No newline at end of file diff --git a/common/api.js b/common/api.js new file mode 100644 index 0000000..92fd182 --- /dev/null +++ b/common/api.js @@ -0,0 +1,3 @@ +const { http } = uni.$u +// 获取菜单 +export const fetchMenu = (params, config = {}) => http.post('/ebapi/public_api/index', params, config) diff --git a/common/area.js b/common/area.js new file mode 100644 index 0000000..0d602e9 --- /dev/null +++ b/common/area.js @@ -0,0 +1 @@ +var areaData=[[[{"label":"东城区","value":"110101"},{"label":"西城区","value":"110102"},{"label":"朝阳区","value":"110105"},{"label":"丰台区","value":"110106"},{"label":"石景山区","value":"110107"},{"label":"海淀区","value":"110108"},{"label":"门头沟区","value":"110109"},{"label":"房山区","value":"110111"},{"label":"通州区","value":"110112"},{"label":"顺义区","value":"110113"},{"label":"昌平区","value":"110114"},{"label":"大兴区","value":"110115"},{"label":"怀柔区","value":"110116"},{"label":"平谷区","value":"110117"},{"label":"密云区","value":"110118"},{"label":"延庆区","value":"110119"}]],[[{"label":"和平区","value":"120101"},{"label":"河东区","value":"120102"},{"label":"河西区","value":"120103"},{"label":"南开区","value":"120104"},{"label":"河北区","value":"120105"},{"label":"红桥区","value":"120106"},{"label":"东丽区","value":"120110"},{"label":"西青区","value":"120111"},{"label":"津南区","value":"120112"},{"label":"北辰区","value":"120113"},{"label":"武清区","value":"120114"},{"label":"宝坻区","value":"120115"},{"label":"滨海新区","value":"120116"},{"label":"宁河区","value":"120117"},{"label":"静海区","value":"120118"},{"label":"蓟州区","value":"120119"}]],[[{"label":"长安区","value":"130102"},{"label":"桥西区","value":"130104"},{"label":"新华区","value":"130105"},{"label":"井陉矿区","value":"130107"},{"label":"裕华区","value":"130108"},{"label":"藁城区","value":"130109"},{"label":"鹿泉区","value":"130110"},{"label":"栾城区","value":"130111"},{"label":"井陉县","value":"130121"},{"label":"正定县","value":"130123"},{"label":"行唐县","value":"130125"},{"label":"灵寿县","value":"130126"},{"label":"高邑县","value":"130127"},{"label":"深泽县","value":"130128"},{"label":"赞皇县","value":"130129"},{"label":"无极县","value":"130130"},{"label":"平山县","value":"130131"},{"label":"元氏县","value":"130132"},{"label":"赵县","value":"130133"},{"label":"石家庄高新技术产业开发区","value":"130171"},{"label":"石家庄循环化工园区","value":"130172"},{"label":"辛集市","value":"130181"},{"label":"晋州市","value":"130183"},{"label":"新乐市","value":"130184"}],[{"label":"路南区","value":"130202"},{"label":"路北区","value":"130203"},{"label":"古冶区","value":"130204"},{"label":"开平区","value":"130205"},{"label":"丰南区","value":"130207"},{"label":"丰润区","value":"130208"},{"label":"曹妃甸区","value":"130209"},{"label":"滦县","value":"130223"},{"label":"滦南县","value":"130224"},{"label":"乐亭县","value":"130225"},{"label":"迁西县","value":"130227"},{"label":"玉田县","value":"130229"},{"label":"唐山市芦台经济技术开发区","value":"130271"},{"label":"唐山市汉沽管理区","value":"130272"},{"label":"唐山高新技术产业开发区","value":"130273"},{"label":"河北唐山海港经济开发区","value":"130274"},{"label":"遵化市","value":"130281"},{"label":"迁安市","value":"130283"}],[{"label":"海港区","value":"130302"},{"label":"山海关区","value":"130303"},{"label":"北戴河区","value":"130304"},{"label":"抚宁区","value":"130306"},{"label":"青龙满族自治县","value":"130321"},{"label":"昌黎县","value":"130322"},{"label":"卢龙县","value":"130324"},{"label":"秦皇岛市经济技术开发区","value":"130371"},{"label":"北戴河新区","value":"130372"}],[{"label":"邯山区","value":"130402"},{"label":"丛台区","value":"130403"},{"label":"复兴区","value":"130404"},{"label":"峰峰矿区","value":"130406"},{"label":"肥乡区","value":"130407"},{"label":"永年区","value":"130408"},{"label":"临漳县","value":"130423"},{"label":"成安县","value":"130424"},{"label":"大名县","value":"130425"},{"label":"涉县","value":"130426"},{"label":"磁县","value":"130427"},{"label":"邱县","value":"130430"},{"label":"鸡泽县","value":"130431"},{"label":"广平县","value":"130432"},{"label":"馆陶县","value":"130433"},{"label":"魏县","value":"130434"},{"label":"曲周县","value":"130435"},{"label":"邯郸经济技术开发区","value":"130471"},{"label":"邯郸冀南新区","value":"130473"},{"label":"武安市","value":"130481"}],[{"label":"桥东区","value":"130502"},{"label":"桥西区","value":"130503"},{"label":"邢台县","value":"130521"},{"label":"临城县","value":"130522"},{"label":"内丘县","value":"130523"},{"label":"柏乡县","value":"130524"},{"label":"隆尧县","value":"130525"},{"label":"任县","value":"130526"},{"label":"南和县","value":"130527"},{"label":"宁晋县","value":"130528"},{"label":"巨鹿县","value":"130529"},{"label":"新河县","value":"130530"},{"label":"广宗县","value":"130531"},{"label":"平乡县","value":"130532"},{"label":"威县","value":"130533"},{"label":"清河县","value":"130534"},{"label":"临西县","value":"130535"},{"label":"河北邢台经济开发区","value":"130571"},{"label":"南宫市","value":"130581"},{"label":"沙河市","value":"130582"}],[{"label":"竞秀区","value":"130602"},{"label":"莲池区","value":"130606"},{"label":"满城区","value":"130607"},{"label":"清苑区","value":"130608"},{"label":"徐水区","value":"130609"},{"label":"涞水县","value":"130623"},{"label":"阜平县","value":"130624"},{"label":"定兴县","value":"130626"},{"label":"唐县","value":"130627"},{"label":"高阳县","value":"130628"},{"label":"容城县","value":"130629"},{"label":"涞源县","value":"130630"},{"label":"望都县","value":"130631"},{"label":"安新县","value":"130632"},{"label":"易县","value":"130633"},{"label":"曲阳县","value":"130634"},{"label":"蠡县","value":"130635"},{"label":"顺平县","value":"130636"},{"label":"博野县","value":"130637"},{"label":"雄县","value":"130638"},{"label":"保定高新技术产业开发区","value":"130671"},{"label":"保定白沟新城","value":"130672"},{"label":"涿州市","value":"130681"},{"label":"定州市","value":"130682"},{"label":"安国市","value":"130683"},{"label":"高碑店市","value":"130684"}],[{"label":"桥东区","value":"130702"},{"label":"桥西区","value":"130703"},{"label":"宣化区","value":"130705"},{"label":"下花园区","value":"130706"},{"label":"万全区","value":"130708"},{"label":"崇礼区","value":"130709"},{"label":"张北县","value":"130722"},{"label":"康保县","value":"130723"},{"label":"沽源县","value":"130724"},{"label":"尚义县","value":"130725"},{"label":"蔚县","value":"130726"},{"label":"阳原县","value":"130727"},{"label":"怀安县","value":"130728"},{"label":"怀来县","value":"130730"},{"label":"涿鹿县","value":"130731"},{"label":"赤城县","value":"130732"},{"label":"张家口市高新技术产业开发区","value":"130771"},{"label":"张家口市察北管理区","value":"130772"},{"label":"张家口市塞北管理区","value":"130773"}],[{"label":"双桥区","value":"130802"},{"label":"双滦区","value":"130803"},{"label":"鹰手营子矿区","value":"130804"},{"label":"承德县","value":"130821"},{"label":"兴隆县","value":"130822"},{"label":"滦平县","value":"130824"},{"label":"隆化县","value":"130825"},{"label":"丰宁满族自治县","value":"130826"},{"label":"宽城满族自治县","value":"130827"},{"label":"围场满族蒙古族自治县","value":"130828"},{"label":"承德高新技术产业开发区","value":"130871"},{"label":"平泉市","value":"130881"}],[{"label":"新华区","value":"130902"},{"label":"运河区","value":"130903"},{"label":"沧县","value":"130921"},{"label":"青县","value":"130922"},{"label":"东光县","value":"130923"},{"label":"海兴县","value":"130924"},{"label":"盐山县","value":"130925"},{"label":"肃宁县","value":"130926"},{"label":"南皮县","value":"130927"},{"label":"吴桥县","value":"130928"},{"label":"献县","value":"130929"},{"label":"孟村回族自治县","value":"130930"},{"label":"河北沧州经济开发区","value":"130971"},{"label":"沧州高新技术产业开发区","value":"130972"},{"label":"沧州渤海新区","value":"130973"},{"label":"泊头市","value":"130981"},{"label":"任丘市","value":"130982"},{"label":"黄骅市","value":"130983"},{"label":"河间市","value":"130984"}],[{"label":"安次区","value":"131002"},{"label":"广阳区","value":"131003"},{"label":"固安县","value":"131022"},{"label":"永清县","value":"131023"},{"label":"香河县","value":"131024"},{"label":"大城县","value":"131025"},{"label":"文安县","value":"131026"},{"label":"大厂回族自治县","value":"131028"},{"label":"廊坊经济技术开发区","value":"131071"},{"label":"霸州市","value":"131081"},{"label":"三河市","value":"131082"}],[{"label":"桃城区","value":"131102"},{"label":"冀州区","value":"131103"},{"label":"枣强县","value":"131121"},{"label":"武邑县","value":"131122"},{"label":"武强县","value":"131123"},{"label":"饶阳县","value":"131124"},{"label":"安平县","value":"131125"},{"label":"故城县","value":"131126"},{"label":"景县","value":"131127"},{"label":"阜城县","value":"131128"},{"label":"河北衡水经济开发区","value":"131171"},{"label":"衡水滨湖新区","value":"131172"},{"label":"深州市","value":"131182"}]],[[{"label":"小店区","value":"140105"},{"label":"迎泽区","value":"140106"},{"label":"杏花岭区","value":"140107"},{"label":"尖草坪区","value":"140108"},{"label":"万柏林区","value":"140109"},{"label":"晋源区","value":"140110"},{"label":"清徐县","value":"140121"},{"label":"阳曲县","value":"140122"},{"label":"娄烦县","value":"140123"},{"label":"山西转型综合改革示范区","value":"140171"},{"label":"古交市","value":"140181"}],[{"label":"城区","value":"140202"},{"label":"矿区","value":"140203"},{"label":"南郊区","value":"140211"},{"label":"新荣区","value":"140212"},{"label":"阳高县","value":"140221"},{"label":"天镇县","value":"140222"},{"label":"广灵县","value":"140223"},{"label":"灵丘县","value":"140224"},{"label":"浑源县","value":"140225"},{"label":"左云县","value":"140226"},{"label":"大同县","value":"140227"},{"label":"山西大同经济开发区","value":"140271"}],[{"label":"城区","value":"140302"},{"label":"矿区","value":"140303"},{"label":"郊区","value":"140311"},{"label":"平定县","value":"140321"},{"label":"盂县","value":"140322"},{"label":"山西阳泉经济开发区","value":"140371"}],[{"label":"城区","value":"140402"},{"label":"郊区","value":"140411"},{"label":"长治县","value":"140421"},{"label":"襄垣县","value":"140423"},{"label":"屯留县","value":"140424"},{"label":"平顺县","value":"140425"},{"label":"黎城县","value":"140426"},{"label":"壶关县","value":"140427"},{"label":"长子县","value":"140428"},{"label":"武乡县","value":"140429"},{"label":"沁县","value":"140430"},{"label":"沁源县","value":"140431"},{"label":"山西长治高新技术产业园区","value":"140471"},{"label":"潞城市","value":"140481"}],[{"label":"城区","value":"140502"},{"label":"沁水县","value":"140521"},{"label":"阳城县","value":"140522"},{"label":"陵川县","value":"140524"},{"label":"泽州县","value":"140525"},{"label":"高平市","value":"140581"}],[{"label":"朔城区","value":"140602"},{"label":"平鲁区","value":"140603"},{"label":"山阴县","value":"140621"},{"label":"应县","value":"140622"},{"label":"右玉县","value":"140623"},{"label":"怀仁县","value":"140624"},{"label":"山西朔州经济开发区","value":"140671"}],[{"label":"榆次区","value":"140702"},{"label":"榆社县","value":"140721"},{"label":"左权县","value":"140722"},{"label":"和顺县","value":"140723"},{"label":"昔阳县","value":"140724"},{"label":"寿阳县","value":"140725"},{"label":"太谷县","value":"140726"},{"label":"祁县","value":"140727"},{"label":"平遥县","value":"140728"},{"label":"灵石县","value":"140729"},{"label":"介休市","value":"140781"}],[{"label":"盐湖区","value":"140802"},{"label":"临猗县","value":"140821"},{"label":"万荣县","value":"140822"},{"label":"闻喜县","value":"140823"},{"label":"稷山县","value":"140824"},{"label":"新绛县","value":"140825"},{"label":"绛县","value":"140826"},{"label":"垣曲县","value":"140827"},{"label":"夏县","value":"140828"},{"label":"平陆县","value":"140829"},{"label":"芮城县","value":"140830"},{"label":"永济市","value":"140881"},{"label":"河津市","value":"140882"}],[{"label":"忻府区","value":"140902"},{"label":"定襄县","value":"140921"},{"label":"五台县","value":"140922"},{"label":"代县","value":"140923"},{"label":"繁峙县","value":"140924"},{"label":"宁武县","value":"140925"},{"label":"静乐县","value":"140926"},{"label":"神池县","value":"140927"},{"label":"五寨县","value":"140928"},{"label":"岢岚县","value":"140929"},{"label":"河曲县","value":"140930"},{"label":"保德县","value":"140931"},{"label":"偏关县","value":"140932"},{"label":"五台山风景名胜区","value":"140971"},{"label":"原平市","value":"140981"}],[{"label":"尧都区","value":"141002"},{"label":"曲沃县","value":"141021"},{"label":"翼城县","value":"141022"},{"label":"襄汾县","value":"141023"},{"label":"洪洞县","value":"141024"},{"label":"古县","value":"141025"},{"label":"安泽县","value":"141026"},{"label":"浮山县","value":"141027"},{"label":"吉县","value":"141028"},{"label":"乡宁县","value":"141029"},{"label":"大宁县","value":"141030"},{"label":"隰县","value":"141031"},{"label":"永和县","value":"141032"},{"label":"蒲县","value":"141033"},{"label":"汾西县","value":"141034"},{"label":"侯马市","value":"141081"},{"label":"霍州市","value":"141082"}],[{"label":"离石区","value":"141102"},{"label":"文水县","value":"141121"},{"label":"交城县","value":"141122"},{"label":"兴县","value":"141123"},{"label":"临县","value":"141124"},{"label":"柳林县","value":"141125"},{"label":"石楼县","value":"141126"},{"label":"岚县","value":"141127"},{"label":"方山县","value":"141128"},{"label":"中阳县","value":"141129"},{"label":"交口县","value":"141130"},{"label":"孝义市","value":"141181"},{"label":"汾阳市","value":"141182"}]],[[{"label":"新城区","value":"150102"},{"label":"回民区","value":"150103"},{"label":"玉泉区","value":"150104"},{"label":"赛罕区","value":"150105"},{"label":"土默特左旗","value":"150121"},{"label":"托克托县","value":"150122"},{"label":"和林格尔县","value":"150123"},{"label":"清水河县","value":"150124"},{"label":"武川县","value":"150125"},{"label":"呼和浩特金海工业园区","value":"150171"},{"label":"呼和浩特经济技术开发区","value":"150172"}],[{"label":"东河区","value":"150202"},{"label":"昆都仑区","value":"150203"},{"label":"青山区","value":"150204"},{"label":"石拐区","value":"150205"},{"label":"白云鄂博矿区","value":"150206"},{"label":"九原区","value":"150207"},{"label":"土默特右旗","value":"150221"},{"label":"固阳县","value":"150222"},{"label":"达尔罕茂明安联合旗","value":"150223"},{"label":"包头稀土高新技术产业开发区","value":"150271"}],[{"label":"海勃湾区","value":"150302"},{"label":"海南区","value":"150303"},{"label":"乌达区","value":"150304"}],[{"label":"红山区","value":"150402"},{"label":"元宝山区","value":"150403"},{"label":"松山区","value":"150404"},{"label":"阿鲁科尔沁旗","value":"150421"},{"label":"巴林左旗","value":"150422"},{"label":"巴林右旗","value":"150423"},{"label":"林西县","value":"150424"},{"label":"克什克腾旗","value":"150425"},{"label":"翁牛特旗","value":"150426"},{"label":"喀喇沁旗","value":"150428"},{"label":"宁城县","value":"150429"},{"label":"敖汉旗","value":"150430"}],[{"label":"科尔沁区","value":"150502"},{"label":"科尔沁左翼中旗","value":"150521"},{"label":"科尔沁左翼后旗","value":"150522"},{"label":"开鲁县","value":"150523"},{"label":"库伦旗","value":"150524"},{"label":"奈曼旗","value":"150525"},{"label":"扎鲁特旗","value":"150526"},{"label":"通辽经济技术开发区","value":"150571"},{"label":"霍林郭勒市","value":"150581"}],[{"label":"东胜区","value":"150602"},{"label":"康巴什区","value":"150603"},{"label":"达拉特旗","value":"150621"},{"label":"准格尔旗","value":"150622"},{"label":"鄂托克前旗","value":"150623"},{"label":"鄂托克旗","value":"150624"},{"label":"杭锦旗","value":"150625"},{"label":"乌审旗","value":"150626"},{"label":"伊金霍洛旗","value":"150627"}],[{"label":"海拉尔区","value":"150702"},{"label":"扎赉诺尔区","value":"150703"},{"label":"阿荣旗","value":"150721"},{"label":"莫力达瓦达斡尔族自治旗","value":"150722"},{"label":"鄂伦春自治旗","value":"150723"},{"label":"鄂温克族自治旗","value":"150724"},{"label":"陈巴尔虎旗","value":"150725"},{"label":"新巴尔虎左旗","value":"150726"},{"label":"新巴尔虎右旗","value":"150727"},{"label":"满洲里市","value":"150781"},{"label":"牙克石市","value":"150782"},{"label":"扎兰屯市","value":"150783"},{"label":"额尔古纳市","value":"150784"},{"label":"根河市","value":"150785"}],[{"label":"临河区","value":"150802"},{"label":"五原县","value":"150821"},{"label":"磴口县","value":"150822"},{"label":"乌拉特前旗","value":"150823"},{"label":"乌拉特中旗","value":"150824"},{"label":"乌拉特后旗","value":"150825"},{"label":"杭锦后旗","value":"150826"}],[{"label":"集宁区","value":"150902"},{"label":"卓资县","value":"150921"},{"label":"化德县","value":"150922"},{"label":"商都县","value":"150923"},{"label":"兴和县","value":"150924"},{"label":"凉城县","value":"150925"},{"label":"察哈尔右翼前旗","value":"150926"},{"label":"察哈尔右翼中旗","value":"150927"},{"label":"察哈尔右翼后旗","value":"150928"},{"label":"四子王旗","value":"150929"},{"label":"丰镇市","value":"150981"}],[{"label":"乌兰浩特市","value":"152201"},{"label":"阿尔山市","value":"152202"},{"label":"科尔沁右翼前旗","value":"152221"},{"label":"科尔沁右翼中旗","value":"152222"},{"label":"扎赉特旗","value":"152223"},{"label":"突泉县","value":"152224"}],[{"label":"二连浩特市","value":"152501"},{"label":"锡林浩特市","value":"152502"},{"label":"阿巴嘎旗","value":"152522"},{"label":"苏尼特左旗","value":"152523"},{"label":"苏尼特右旗","value":"152524"},{"label":"东乌珠穆沁旗","value":"152525"},{"label":"西乌珠穆沁旗","value":"152526"},{"label":"太仆寺旗","value":"152527"},{"label":"镶黄旗","value":"152528"},{"label":"正镶白旗","value":"152529"},{"label":"正蓝旗","value":"152530"},{"label":"多伦县","value":"152531"},{"label":"乌拉盖管委会","value":"152571"}],[{"label":"阿拉善左旗","value":"152921"},{"label":"阿拉善右旗","value":"152922"},{"label":"额济纳旗","value":"152923"},{"label":"内蒙古阿拉善经济开发区","value":"152971"}]],[[{"label":"和平区","value":"210102"},{"label":"沈河区","value":"210103"},{"label":"大东区","value":"210104"},{"label":"皇姑区","value":"210105"},{"label":"铁西区","value":"210106"},{"label":"苏家屯区","value":"210111"},{"label":"浑南区","value":"210112"},{"label":"沈北新区","value":"210113"},{"label":"于洪区","value":"210114"},{"label":"辽中区","value":"210115"},{"label":"康平县","value":"210123"},{"label":"法库县","value":"210124"},{"label":"新民市","value":"210181"}],[{"label":"中山区","value":"210202"},{"label":"西岗区","value":"210203"},{"label":"沙河口区","value":"210204"},{"label":"甘井子区","value":"210211"},{"label":"旅顺口区","value":"210212"},{"label":"金州区","value":"210213"},{"label":"普兰店区","value":"210214"},{"label":"长海县","value":"210224"},{"label":"瓦房店市","value":"210281"},{"label":"庄河市","value":"210283"}],[{"label":"铁东区","value":"210302"},{"label":"铁西区","value":"210303"},{"label":"立山区","value":"210304"},{"label":"千山区","value":"210311"},{"label":"台安县","value":"210321"},{"label":"岫岩满族自治县","value":"210323"},{"label":"海城市","value":"210381"}],[{"label":"新抚区","value":"210402"},{"label":"东洲区","value":"210403"},{"label":"望花区","value":"210404"},{"label":"顺城区","value":"210411"},{"label":"抚顺县","value":"210421"},{"label":"新宾满族自治县","value":"210422"},{"label":"清原满族自治县","value":"210423"}],[{"label":"平山区","value":"210502"},{"label":"溪湖区","value":"210503"},{"label":"明山区","value":"210504"},{"label":"南芬区","value":"210505"},{"label":"本溪满族自治县","value":"210521"},{"label":"桓仁满族自治县","value":"210522"}],[{"label":"元宝区","value":"210602"},{"label":"振兴区","value":"210603"},{"label":"振安区","value":"210604"},{"label":"宽甸满族自治县","value":"210624"},{"label":"东港市","value":"210681"},{"label":"凤城市","value":"210682"}],[{"label":"古塔区","value":"210702"},{"label":"凌河区","value":"210703"},{"label":"太和区","value":"210711"},{"label":"黑山县","value":"210726"},{"label":"义县","value":"210727"},{"label":"凌海市","value":"210781"},{"label":"北镇市","value":"210782"}],[{"label":"站前区","value":"210802"},{"label":"西市区","value":"210803"},{"label":"鲅鱼圈区","value":"210804"},{"label":"老边区","value":"210811"},{"label":"盖州市","value":"210881"},{"label":"大石桥市","value":"210882"}],[{"label":"海州区","value":"210902"},{"label":"新邱区","value":"210903"},{"label":"太平区","value":"210904"},{"label":"清河门区","value":"210905"},{"label":"细河区","value":"210911"},{"label":"阜新蒙古族自治县","value":"210921"},{"label":"彰武县","value":"210922"}],[{"label":"白塔区","value":"211002"},{"label":"文圣区","value":"211003"},{"label":"宏伟区","value":"211004"},{"label":"弓长岭区","value":"211005"},{"label":"太子河区","value":"211011"},{"label":"辽阳县","value":"211021"},{"label":"灯塔市","value":"211081"}],[{"label":"双台子区","value":"211102"},{"label":"兴隆台区","value":"211103"},{"label":"大洼区","value":"211104"},{"label":"盘山县","value":"211122"}],[{"label":"银州区","value":"211202"},{"label":"清河区","value":"211204"},{"label":"铁岭县","value":"211221"},{"label":"西丰县","value":"211223"},{"label":"昌图县","value":"211224"},{"label":"调兵山市","value":"211281"},{"label":"开原市","value":"211282"}],[{"label":"双塔区","value":"211302"},{"label":"龙城区","value":"211303"},{"label":"朝阳县","value":"211321"},{"label":"建平县","value":"211322"},{"label":"喀喇沁左翼蒙古族自治县","value":"211324"},{"label":"北票市","value":"211381"},{"label":"凌源市","value":"211382"}],[{"label":"连山区","value":"211402"},{"label":"龙港区","value":"211403"},{"label":"南票区","value":"211404"},{"label":"绥中县","value":"211421"},{"label":"建昌县","value":"211422"},{"label":"兴城市","value":"211481"}]],[[{"label":"南关区","value":"220102"},{"label":"宽城区","value":"220103"},{"label":"朝阳区","value":"220104"},{"label":"二道区","value":"220105"},{"label":"绿园区","value":"220106"},{"label":"双阳区","value":"220112"},{"label":"九台区","value":"220113"},{"label":"农安县","value":"220122"},{"label":"长春经济技术开发区","value":"220171"},{"label":"长春净月高新技术产业开发区","value":"220172"},{"label":"长春高新技术产业开发区","value":"220173"},{"label":"长春汽车经济技术开发区","value":"220174"},{"label":"榆树市","value":"220182"},{"label":"德惠市","value":"220183"}],[{"label":"昌邑区","value":"220202"},{"label":"龙潭区","value":"220203"},{"label":"船营区","value":"220204"},{"label":"丰满区","value":"220211"},{"label":"永吉县","value":"220221"},{"label":"吉林经济开发区","value":"220271"},{"label":"吉林高新技术产业开发区","value":"220272"},{"label":"吉林中国新加坡食品区","value":"220273"},{"label":"蛟河市","value":"220281"},{"label":"桦甸市","value":"220282"},{"label":"舒兰市","value":"220283"},{"label":"磐石市","value":"220284"}],[{"label":"铁西区","value":"220302"},{"label":"铁东区","value":"220303"},{"label":"梨树县","value":"220322"},{"label":"伊通满族自治县","value":"220323"},{"label":"公主岭市","value":"220381"},{"label":"双辽市","value":"220382"}],[{"label":"龙山区","value":"220402"},{"label":"西安区","value":"220403"},{"label":"东丰县","value":"220421"},{"label":"东辽县","value":"220422"}],[{"label":"东昌区","value":"220502"},{"label":"二道江区","value":"220503"},{"label":"通化县","value":"220521"},{"label":"辉南县","value":"220523"},{"label":"柳河县","value":"220524"},{"label":"梅河口市","value":"220581"},{"label":"集安市","value":"220582"}],[{"label":"浑江区","value":"220602"},{"label":"江源区","value":"220605"},{"label":"抚松县","value":"220621"},{"label":"靖宇县","value":"220622"},{"label":"长白朝鲜族自治县","value":"220623"},{"label":"临江市","value":"220681"}],[{"label":"宁江区","value":"220702"},{"label":"前郭尔罗斯蒙古族自治县","value":"220721"},{"label":"长岭县","value":"220722"},{"label":"乾安县","value":"220723"},{"label":"吉林松原经济开发区","value":"220771"},{"label":"扶余市","value":"220781"}],[{"label":"洮北区","value":"220802"},{"label":"镇赉县","value":"220821"},{"label":"通榆县","value":"220822"},{"label":"吉林白城经济开发区","value":"220871"},{"label":"洮南市","value":"220881"},{"label":"大安市","value":"220882"}],[{"label":"延吉市","value":"222401"},{"label":"图们市","value":"222402"},{"label":"敦化市","value":"222403"},{"label":"珲春市","value":"222404"},{"label":"龙井市","value":"222405"},{"label":"和龙市","value":"222406"},{"label":"汪清县","value":"222424"},{"label":"安图县","value":"222426"}]],[[{"label":"道里区","value":"230102"},{"label":"南岗区","value":"230103"},{"label":"道外区","value":"230104"},{"label":"平房区","value":"230108"},{"label":"松北区","value":"230109"},{"label":"香坊区","value":"230110"},{"label":"呼兰区","value":"230111"},{"label":"阿城区","value":"230112"},{"label":"双城区","value":"230113"},{"label":"依兰县","value":"230123"},{"label":"方正县","value":"230124"},{"label":"宾县","value":"230125"},{"label":"巴彦县","value":"230126"},{"label":"木兰县","value":"230127"},{"label":"通河县","value":"230128"},{"label":"延寿县","value":"230129"},{"label":"尚志市","value":"230183"},{"label":"五常市","value":"230184"}],[{"label":"龙沙区","value":"230202"},{"label":"建华区","value":"230203"},{"label":"铁锋区","value":"230204"},{"label":"昂昂溪区","value":"230205"},{"label":"富拉尔基区","value":"230206"},{"label":"碾子山区","value":"230207"},{"label":"梅里斯达斡尔族区","value":"230208"},{"label":"龙江县","value":"230221"},{"label":"依安县","value":"230223"},{"label":"泰来县","value":"230224"},{"label":"甘南县","value":"230225"},{"label":"富裕县","value":"230227"},{"label":"克山县","value":"230229"},{"label":"克东县","value":"230230"},{"label":"拜泉县","value":"230231"},{"label":"讷河市","value":"230281"}],[{"label":"鸡冠区","value":"230302"},{"label":"恒山区","value":"230303"},{"label":"滴道区","value":"230304"},{"label":"梨树区","value":"230305"},{"label":"城子河区","value":"230306"},{"label":"麻山区","value":"230307"},{"label":"鸡东县","value":"230321"},{"label":"虎林市","value":"230381"},{"label":"密山市","value":"230382"}],[{"label":"向阳区","value":"230402"},{"label":"工农区","value":"230403"},{"label":"南山区","value":"230404"},{"label":"兴安区","value":"230405"},{"label":"东山区","value":"230406"},{"label":"兴山区","value":"230407"},{"label":"萝北县","value":"230421"},{"label":"绥滨县","value":"230422"}],[{"label":"尖山区","value":"230502"},{"label":"岭东区","value":"230503"},{"label":"四方台区","value":"230505"},{"label":"宝山区","value":"230506"},{"label":"集贤县","value":"230521"},{"label":"友谊县","value":"230522"},{"label":"宝清县","value":"230523"},{"label":"饶河县","value":"230524"}],[{"label":"萨尔图区","value":"230602"},{"label":"龙凤区","value":"230603"},{"label":"让胡路区","value":"230604"},{"label":"红岗区","value":"230605"},{"label":"大同区","value":"230606"},{"label":"肇州县","value":"230621"},{"label":"肇源县","value":"230622"},{"label":"林甸县","value":"230623"},{"label":"杜尔伯特蒙古族自治县","value":"230624"},{"label":"大庆高新技术产业开发区","value":"230671"}],[{"label":"伊春区","value":"230702"},{"label":"南岔区","value":"230703"},{"label":"友好区","value":"230704"},{"label":"西林区","value":"230705"},{"label":"翠峦区","value":"230706"},{"label":"新青区","value":"230707"},{"label":"美溪区","value":"230708"},{"label":"金山屯区","value":"230709"},{"label":"五营区","value":"230710"},{"label":"乌马河区","value":"230711"},{"label":"汤旺河区","value":"230712"},{"label":"带岭区","value":"230713"},{"label":"乌伊岭区","value":"230714"},{"label":"红星区","value":"230715"},{"label":"上甘岭区","value":"230716"},{"label":"嘉荫县","value":"230722"},{"label":"铁力市","value":"230781"}],[{"label":"向阳区","value":"230803"},{"label":"前进区","value":"230804"},{"label":"东风区","value":"230805"},{"label":"郊区","value":"230811"},{"label":"桦南县","value":"230822"},{"label":"桦川县","value":"230826"},{"label":"汤原县","value":"230828"},{"label":"同江市","value":"230881"},{"label":"富锦市","value":"230882"},{"label":"抚远市","value":"230883"}],[{"label":"新兴区","value":"230902"},{"label":"桃山区","value":"230903"},{"label":"茄子河区","value":"230904"},{"label":"勃利县","value":"230921"}],[{"label":"东安区","value":"231002"},{"label":"阳明区","value":"231003"},{"label":"爱民区","value":"231004"},{"label":"西安区","value":"231005"},{"label":"林口县","value":"231025"},{"label":"牡丹江经济技术开发区","value":"231071"},{"label":"绥芬河市","value":"231081"},{"label":"海林市","value":"231083"},{"label":"宁安市","value":"231084"},{"label":"穆棱市","value":"231085"},{"label":"东宁市","value":"231086"}],[{"label":"爱辉区","value":"231102"},{"label":"嫩江县","value":"231121"},{"label":"逊克县","value":"231123"},{"label":"孙吴县","value":"231124"},{"label":"北安市","value":"231181"},{"label":"五大连池市","value":"231182"}],[{"label":"北林区","value":"231202"},{"label":"望奎县","value":"231221"},{"label":"兰西县","value":"231222"},{"label":"青冈县","value":"231223"},{"label":"庆安县","value":"231224"},{"label":"明水县","value":"231225"},{"label":"绥棱县","value":"231226"},{"label":"安达市","value":"231281"},{"label":"肇东市","value":"231282"},{"label":"海伦市","value":"231283"}],[{"label":"加格达奇区","value":"232701"},{"label":"松岭区","value":"232702"},{"label":"新林区","value":"232703"},{"label":"呼中区","value":"232704"},{"label":"呼玛县","value":"232721"},{"label":"塔河县","value":"232722"},{"label":"漠河县","value":"232723"}]],[[{"label":"黄浦区","value":"310101"},{"label":"徐汇区","value":"310104"},{"label":"长宁区","value":"310105"},{"label":"静安区","value":"310106"},{"label":"普陀区","value":"310107"},{"label":"虹口区","value":"310109"},{"label":"杨浦区","value":"310110"},{"label":"闵行区","value":"310112"},{"label":"宝山区","value":"310113"},{"label":"嘉定区","value":"310114"},{"label":"浦东新区","value":"310115"},{"label":"金山区","value":"310116"},{"label":"松江区","value":"310117"},{"label":"青浦区","value":"310118"},{"label":"奉贤区","value":"310120"},{"label":"崇明区","value":"310151"}]],[[{"label":"玄武区","value":"320102"},{"label":"秦淮区","value":"320104"},{"label":"建邺区","value":"320105"},{"label":"鼓楼区","value":"320106"},{"label":"浦口区","value":"320111"},{"label":"栖霞区","value":"320113"},{"label":"雨花台区","value":"320114"},{"label":"江宁区","value":"320115"},{"label":"六合区","value":"320116"},{"label":"溧水区","value":"320117"},{"label":"高淳区","value":"320118"}],[{"label":"锡山区","value":"320205"},{"label":"惠山区","value":"320206"},{"label":"滨湖区","value":"320211"},{"label":"梁溪区","value":"320213"},{"label":"新吴区","value":"320214"},{"label":"江阴市","value":"320281"},{"label":"宜兴市","value":"320282"}],[{"label":"鼓楼区","value":"320302"},{"label":"云龙区","value":"320303"},{"label":"贾汪区","value":"320305"},{"label":"泉山区","value":"320311"},{"label":"铜山区","value":"320312"},{"label":"丰县","value":"320321"},{"label":"沛县","value":"320322"},{"label":"睢宁县","value":"320324"},{"label":"徐州经济技术开发区","value":"320371"},{"label":"新沂市","value":"320381"},{"label":"邳州市","value":"320382"}],[{"label":"天宁区","value":"320402"},{"label":"钟楼区","value":"320404"},{"label":"新北区","value":"320411"},{"label":"武进区","value":"320412"},{"label":"金坛区","value":"320413"},{"label":"溧阳市","value":"320481"}],[{"label":"虎丘区","value":"320505"},{"label":"吴中区","value":"320506"},{"label":"相城区","value":"320507"},{"label":"姑苏区","value":"320508"},{"label":"吴江区","value":"320509"},{"label":"苏州工业园区","value":"320571"},{"label":"常熟市","value":"320581"},{"label":"张家港市","value":"320582"},{"label":"昆山市","value":"320583"},{"label":"太仓市","value":"320585"}],[{"label":"崇川区","value":"320602"},{"label":"港闸区","value":"320611"},{"label":"通州区","value":"320612"},{"label":"海安县","value":"320621"},{"label":"如东县","value":"320623"},{"label":"南通经济技术开发区","value":"320671"},{"label":"启东市","value":"320681"},{"label":"如皋市","value":"320682"},{"label":"海门市","value":"320684"}],[{"label":"连云区","value":"320703"},{"label":"海州区","value":"320706"},{"label":"赣榆区","value":"320707"},{"label":"东海县","value":"320722"},{"label":"灌云县","value":"320723"},{"label":"灌南县","value":"320724"},{"label":"连云港经济技术开发区","value":"320771"},{"label":"连云港高新技术产业开发区","value":"320772"}],[{"label":"淮安区","value":"320803"},{"label":"淮阴区","value":"320804"},{"label":"清江浦区","value":"320812"},{"label":"洪泽区","value":"320813"},{"label":"涟水县","value":"320826"},{"label":"盱眙县","value":"320830"},{"label":"金湖县","value":"320831"},{"label":"淮安经济技术开发区","value":"320871"}],[{"label":"亭湖区","value":"320902"},{"label":"盐都区","value":"320903"},{"label":"大丰区","value":"320904"},{"label":"响水县","value":"320921"},{"label":"滨海县","value":"320922"},{"label":"阜宁县","value":"320923"},{"label":"射阳县","value":"320924"},{"label":"建湖县","value":"320925"},{"label":"盐城经济技术开发区","value":"320971"},{"label":"东台市","value":"320981"}],[{"label":"广陵区","value":"321002"},{"label":"邗江区","value":"321003"},{"label":"江都区","value":"321012"},{"label":"宝应县","value":"321023"},{"label":"扬州经济技术开发区","value":"321071"},{"label":"仪征市","value":"321081"},{"label":"高邮市","value":"321084"}],[{"label":"京口区","value":"321102"},{"label":"润州区","value":"321111"},{"label":"丹徒区","value":"321112"},{"label":"镇江新区","value":"321171"},{"label":"丹阳市","value":"321181"},{"label":"扬中市","value":"321182"},{"label":"句容市","value":"321183"}],[{"label":"海陵区","value":"321202"},{"label":"高港区","value":"321203"},{"label":"姜堰区","value":"321204"},{"label":"泰州医药高新技术产业开发区","value":"321271"},{"label":"兴化市","value":"321281"},{"label":"靖江市","value":"321282"},{"label":"泰兴市","value":"321283"}],[{"label":"宿城区","value":"321302"},{"label":"宿豫区","value":"321311"},{"label":"沭阳县","value":"321322"},{"label":"泗阳县","value":"321323"},{"label":"泗洪县","value":"321324"},{"label":"宿迁经济技术开发区","value":"321371"}]],[[{"label":"上城区","value":"330102"},{"label":"下城区","value":"330103"},{"label":"江干区","value":"330104"},{"label":"拱墅区","value":"330105"},{"label":"西湖区","value":"330106"},{"label":"滨江区","value":"330108"},{"label":"萧山区","value":"330109"},{"label":"余杭区","value":"330110"},{"label":"富阳区","value":"330111"},{"label":"临安区","value":"330112"},{"label":"桐庐县","value":"330122"},{"label":"淳安县","value":"330127"},{"label":"建德市","value":"330182"}],[{"label":"海曙区","value":"330203"},{"label":"江北区","value":"330205"},{"label":"北仑区","value":"330206"},{"label":"镇海区","value":"330211"},{"label":"鄞州区","value":"330212"},{"label":"奉化区","value":"330213"},{"label":"象山县","value":"330225"},{"label":"宁海县","value":"330226"},{"label":"余姚市","value":"330281"},{"label":"慈溪市","value":"330282"}],[{"label":"鹿城区","value":"330302"},{"label":"龙湾区","value":"330303"},{"label":"瓯海区","value":"330304"},{"label":"洞头区","value":"330305"},{"label":"永嘉县","value":"330324"},{"label":"平阳县","value":"330326"},{"label":"苍南县","value":"330327"},{"label":"文成县","value":"330328"},{"label":"泰顺县","value":"330329"},{"label":"温州经济技术开发区","value":"330371"},{"label":"瑞安市","value":"330381"},{"label":"乐清市","value":"330382"}],[{"label":"南湖区","value":"330402"},{"label":"秀洲区","value":"330411"},{"label":"嘉善县","value":"330421"},{"label":"海盐县","value":"330424"},{"label":"海宁市","value":"330481"},{"label":"平湖市","value":"330482"},{"label":"桐乡市","value":"330483"}],[{"label":"吴兴区","value":"330502"},{"label":"南浔区","value":"330503"},{"label":"德清县","value":"330521"},{"label":"长兴县","value":"330522"},{"label":"安吉县","value":"330523"}],[{"label":"越城区","value":"330602"},{"label":"柯桥区","value":"330603"},{"label":"上虞区","value":"330604"},{"label":"新昌县","value":"330624"},{"label":"诸暨市","value":"330681"},{"label":"嵊州市","value":"330683"}],[{"label":"婺城区","value":"330702"},{"label":"金东区","value":"330703"},{"label":"武义县","value":"330723"},{"label":"浦江县","value":"330726"},{"label":"磐安县","value":"330727"},{"label":"兰溪市","value":"330781"},{"label":"义乌市","value":"330782"},{"label":"东阳市","value":"330783"},{"label":"永康市","value":"330784"}],[{"label":"柯城区","value":"330802"},{"label":"衢江区","value":"330803"},{"label":"常山县","value":"330822"},{"label":"开化县","value":"330824"},{"label":"龙游县","value":"330825"},{"label":"江山市","value":"330881"}],[{"label":"定海区","value":"330902"},{"label":"普陀区","value":"330903"},{"label":"岱山县","value":"330921"},{"label":"嵊泗县","value":"330922"}],[{"label":"椒江区","value":"331002"},{"label":"黄岩区","value":"331003"},{"label":"路桥区","value":"331004"},{"label":"三门县","value":"331022"},{"label":"天台县","value":"331023"},{"label":"仙居县","value":"331024"},{"label":"温岭市","value":"331081"},{"label":"临海市","value":"331082"},{"label":"玉环市","value":"331083"}],[{"label":"莲都区","value":"331102"},{"label":"青田县","value":"331121"},{"label":"缙云县","value":"331122"},{"label":"遂昌县","value":"331123"},{"label":"松阳县","value":"331124"},{"label":"云和县","value":"331125"},{"label":"庆元县","value":"331126"},{"label":"景宁畲族自治县","value":"331127"},{"label":"龙泉市","value":"331181"}]],[[{"label":"瑶海区","value":"340102"},{"label":"庐阳区","value":"340103"},{"label":"蜀山区","value":"340104"},{"label":"包河区","value":"340111"},{"label":"长丰县","value":"340121"},{"label":"肥东县","value":"340122"},{"label":"肥西县","value":"340123"},{"label":"庐江县","value":"340124"},{"label":"合肥高新技术产业开发区","value":"340171"},{"label":"合肥经济技术开发区","value":"340172"},{"label":"合肥新站高新技术产业开发区","value":"340173"},{"label":"巢湖市","value":"340181"}],[{"label":"镜湖区","value":"340202"},{"label":"弋江区","value":"340203"},{"label":"鸠江区","value":"340207"},{"label":"三山区","value":"340208"},{"label":"芜湖县","value":"340221"},{"label":"繁昌县","value":"340222"},{"label":"南陵县","value":"340223"},{"label":"无为县","value":"340225"},{"label":"芜湖经济技术开发区","value":"340271"},{"label":"安徽芜湖长江大桥经济开发区","value":"340272"}],[{"label":"龙子湖区","value":"340302"},{"label":"蚌山区","value":"340303"},{"label":"禹会区","value":"340304"},{"label":"淮上区","value":"340311"},{"label":"怀远县","value":"340321"},{"label":"五河县","value":"340322"},{"label":"固镇县","value":"340323"},{"label":"蚌埠市高新技术开发区","value":"340371"},{"label":"蚌埠市经济开发区","value":"340372"}],[{"label":"大通区","value":"340402"},{"label":"田家庵区","value":"340403"},{"label":"谢家集区","value":"340404"},{"label":"八公山区","value":"340405"},{"label":"潘集区","value":"340406"},{"label":"凤台县","value":"340421"},{"label":"寿县","value":"340422"}],[{"label":"花山区","value":"340503"},{"label":"雨山区","value":"340504"},{"label":"博望区","value":"340506"},{"label":"当涂县","value":"340521"},{"label":"含山县","value":"340522"},{"label":"和县","value":"340523"}],[{"label":"杜集区","value":"340602"},{"label":"相山区","value":"340603"},{"label":"烈山区","value":"340604"},{"label":"濉溪县","value":"340621"}],[{"label":"铜官区","value":"340705"},{"label":"义安区","value":"340706"},{"label":"郊区","value":"340711"},{"label":"枞阳县","value":"340722"}],[{"label":"迎江区","value":"340802"},{"label":"大观区","value":"340803"},{"label":"宜秀区","value":"340811"},{"label":"怀宁县","value":"340822"},{"label":"潜山县","value":"340824"},{"label":"太湖县","value":"340825"},{"label":"宿松县","value":"340826"},{"label":"望江县","value":"340827"},{"label":"岳西县","value":"340828"},{"label":"安徽安庆经济开发区","value":"340871"},{"label":"桐城市","value":"340881"}],[{"label":"屯溪区","value":"341002"},{"label":"黄山区","value":"341003"},{"label":"徽州区","value":"341004"},{"label":"歙县","value":"341021"},{"label":"休宁县","value":"341022"},{"label":"黟县","value":"341023"},{"label":"祁门县","value":"341024"}],[{"label":"琅琊区","value":"341102"},{"label":"南谯区","value":"341103"},{"label":"来安县","value":"341122"},{"label":"全椒县","value":"341124"},{"label":"定远县","value":"341125"},{"label":"凤阳县","value":"341126"},{"label":"苏滁现代产业园","value":"341171"},{"label":"滁州经济技术开发区","value":"341172"},{"label":"天长市","value":"341181"},{"label":"明光市","value":"341182"}],[{"label":"颍州区","value":"341202"},{"label":"颍东区","value":"341203"},{"label":"颍泉区","value":"341204"},{"label":"临泉县","value":"341221"},{"label":"太和县","value":"341222"},{"label":"阜南县","value":"341225"},{"label":"颍上县","value":"341226"},{"label":"阜阳合肥现代产业园区","value":"341271"},{"label":"阜阳经济技术开发区","value":"341272"},{"label":"界首市","value":"341282"}],[{"label":"埇桥区","value":"341302"},{"label":"砀山县","value":"341321"},{"label":"萧县","value":"341322"},{"label":"灵璧县","value":"341323"},{"label":"泗县","value":"341324"},{"label":"宿州马鞍山现代产业园区","value":"341371"},{"label":"宿州经济技术开发区","value":"341372"}],[{"label":"金安区","value":"341502"},{"label":"裕安区","value":"341503"},{"label":"叶集区","value":"341504"},{"label":"霍邱县","value":"341522"},{"label":"舒城县","value":"341523"},{"label":"金寨县","value":"341524"},{"label":"霍山县","value":"341525"}],[{"label":"谯城区","value":"341602"},{"label":"涡阳县","value":"341621"},{"label":"蒙城县","value":"341622"},{"label":"利辛县","value":"341623"}],[{"label":"贵池区","value":"341702"},{"label":"东至县","value":"341721"},{"label":"石台县","value":"341722"},{"label":"青阳县","value":"341723"}],[{"label":"宣州区","value":"341802"},{"label":"郎溪县","value":"341821"},{"label":"广德县","value":"341822"},{"label":"泾县","value":"341823"},{"label":"绩溪县","value":"341824"},{"label":"旌德县","value":"341825"},{"label":"宣城市经济开发区","value":"341871"},{"label":"宁国市","value":"341881"}]],[[{"label":"鼓楼区","value":"350102"},{"label":"台江区","value":"350103"},{"label":"仓山区","value":"350104"},{"label":"马尾区","value":"350105"},{"label":"晋安区","value":"350111"},{"label":"闽侯县","value":"350121"},{"label":"连江县","value":"350122"},{"label":"罗源县","value":"350123"},{"label":"闽清县","value":"350124"},{"label":"永泰县","value":"350125"},{"label":"平潭县","value":"350128"},{"label":"福清市","value":"350181"},{"label":"长乐市","value":"350182"}],[{"label":"思明区","value":"350203"},{"label":"海沧区","value":"350205"},{"label":"湖里区","value":"350206"},{"label":"集美区","value":"350211"},{"label":"同安区","value":"350212"},{"label":"翔安区","value":"350213"}],[{"label":"城厢区","value":"350302"},{"label":"涵江区","value":"350303"},{"label":"荔城区","value":"350304"},{"label":"秀屿区","value":"350305"},{"label":"仙游县","value":"350322"}],[{"label":"梅列区","value":"350402"},{"label":"三元区","value":"350403"},{"label":"明溪县","value":"350421"},{"label":"清流县","value":"350423"},{"label":"宁化县","value":"350424"},{"label":"大田县","value":"350425"},{"label":"尤溪县","value":"350426"},{"label":"沙县","value":"350427"},{"label":"将乐县","value":"350428"},{"label":"泰宁县","value":"350429"},{"label":"建宁县","value":"350430"},{"label":"永安市","value":"350481"}],[{"label":"鲤城区","value":"350502"},{"label":"丰泽区","value":"350503"},{"label":"洛江区","value":"350504"},{"label":"泉港区","value":"350505"},{"label":"惠安县","value":"350521"},{"label":"安溪县","value":"350524"},{"label":"永春县","value":"350525"},{"label":"德化县","value":"350526"},{"label":"金门县","value":"350527"},{"label":"石狮市","value":"350581"},{"label":"晋江市","value":"350582"},{"label":"南安市","value":"350583"}],[{"label":"芗城区","value":"350602"},{"label":"龙文区","value":"350603"},{"label":"云霄县","value":"350622"},{"label":"漳浦县","value":"350623"},{"label":"诏安县","value":"350624"},{"label":"长泰县","value":"350625"},{"label":"东山县","value":"350626"},{"label":"南靖县","value":"350627"},{"label":"平和县","value":"350628"},{"label":"华安县","value":"350629"},{"label":"龙海市","value":"350681"}],[{"label":"延平区","value":"350702"},{"label":"建阳区","value":"350703"},{"label":"顺昌县","value":"350721"},{"label":"浦城县","value":"350722"},{"label":"光泽县","value":"350723"},{"label":"松溪县","value":"350724"},{"label":"政和县","value":"350725"},{"label":"邵武市","value":"350781"},{"label":"武夷山市","value":"350782"},{"label":"建瓯市","value":"350783"}],[{"label":"新罗区","value":"350802"},{"label":"永定区","value":"350803"},{"label":"长汀县","value":"350821"},{"label":"上杭县","value":"350823"},{"label":"武平县","value":"350824"},{"label":"连城县","value":"350825"},{"label":"漳平市","value":"350881"}],[{"label":"蕉城区","value":"350902"},{"label":"霞浦县","value":"350921"},{"label":"古田县","value":"350922"},{"label":"屏南县","value":"350923"},{"label":"寿宁县","value":"350924"},{"label":"周宁县","value":"350925"},{"label":"柘荣县","value":"350926"},{"label":"福安市","value":"350981"},{"label":"福鼎市","value":"350982"}]],[[{"label":"东湖区","value":"360102"},{"label":"西湖区","value":"360103"},{"label":"青云谱区","value":"360104"},{"label":"湾里区","value":"360105"},{"label":"青山湖区","value":"360111"},{"label":"新建区","value":"360112"},{"label":"南昌县","value":"360121"},{"label":"安义县","value":"360123"},{"label":"进贤县","value":"360124"}],[{"label":"昌江区","value":"360202"},{"label":"珠山区","value":"360203"},{"label":"浮梁县","value":"360222"},{"label":"乐平市","value":"360281"}],[{"label":"安源区","value":"360302"},{"label":"湘东区","value":"360313"},{"label":"莲花县","value":"360321"},{"label":"上栗县","value":"360322"},{"label":"芦溪县","value":"360323"}],[{"label":"濂溪区","value":"360402"},{"label":"浔阳区","value":"360403"},{"label":"柴桑区","value":"360404"},{"label":"武宁县","value":"360423"},{"label":"修水县","value":"360424"},{"label":"永修县","value":"360425"},{"label":"德安县","value":"360426"},{"label":"都昌县","value":"360428"},{"label":"湖口县","value":"360429"},{"label":"彭泽县","value":"360430"},{"label":"瑞昌市","value":"360481"},{"label":"共青城市","value":"360482"},{"label":"庐山市","value":"360483"}],[{"label":"渝水区","value":"360502"},{"label":"分宜县","value":"360521"}],[{"label":"月湖区","value":"360602"},{"label":"余江县","value":"360622"},{"label":"贵溪市","value":"360681"}],[{"label":"章贡区","value":"360702"},{"label":"南康区","value":"360703"},{"label":"赣县区","value":"360704"},{"label":"信丰县","value":"360722"},{"label":"大余县","value":"360723"},{"label":"上犹县","value":"360724"},{"label":"崇义县","value":"360725"},{"label":"安远县","value":"360726"},{"label":"龙南县","value":"360727"},{"label":"定南县","value":"360728"},{"label":"全南县","value":"360729"},{"label":"宁都县","value":"360730"},{"label":"于都县","value":"360731"},{"label":"兴国县","value":"360732"},{"label":"会昌县","value":"360733"},{"label":"寻乌县","value":"360734"},{"label":"石城县","value":"360735"},{"label":"瑞金市","value":"360781"}],[{"label":"吉州区","value":"360802"},{"label":"青原区","value":"360803"},{"label":"吉安县","value":"360821"},{"label":"吉水县","value":"360822"},{"label":"峡江县","value":"360823"},{"label":"新干县","value":"360824"},{"label":"永丰县","value":"360825"},{"label":"泰和县","value":"360826"},{"label":"遂川县","value":"360827"},{"label":"万安县","value":"360828"},{"label":"安福县","value":"360829"},{"label":"永新县","value":"360830"},{"label":"井冈山市","value":"360881"}],[{"label":"袁州区","value":"360902"},{"label":"奉新县","value":"360921"},{"label":"万载县","value":"360922"},{"label":"上高县","value":"360923"},{"label":"宜丰县","value":"360924"},{"label":"靖安县","value":"360925"},{"label":"铜鼓县","value":"360926"},{"label":"丰城市","value":"360981"},{"label":"樟树市","value":"360982"},{"label":"高安市","value":"360983"}],[{"label":"临川区","value":"361002"},{"label":"东乡区","value":"361003"},{"label":"南城县","value":"361021"},{"label":"黎川县","value":"361022"},{"label":"南丰县","value":"361023"},{"label":"崇仁县","value":"361024"},{"label":"乐安县","value":"361025"},{"label":"宜黄县","value":"361026"},{"label":"金溪县","value":"361027"},{"label":"资溪县","value":"361028"},{"label":"广昌县","value":"361030"}],[{"label":"信州区","value":"361102"},{"label":"广丰区","value":"361103"},{"label":"上饶县","value":"361121"},{"label":"玉山县","value":"361123"},{"label":"铅山县","value":"361124"},{"label":"横峰县","value":"361125"},{"label":"弋阳县","value":"361126"},{"label":"余干县","value":"361127"},{"label":"鄱阳县","value":"361128"},{"label":"万年县","value":"361129"},{"label":"婺源县","value":"361130"},{"label":"德兴市","value":"361181"}]],[[{"label":"历下区","value":"370102"},{"label":"市中区","value":"370103"},{"label":"槐荫区","value":"370104"},{"label":"天桥区","value":"370105"},{"label":"历城区","value":"370112"},{"label":"长清区","value":"370113"},{"label":"章丘区","value":"370114"},{"label":"平阴县","value":"370124"},{"label":"济阳县","value":"370125"},{"label":"商河县","value":"370126"},{"label":"济南高新技术产业开发区","value":"370171"}],[{"label":"市南区","value":"370202"},{"label":"市北区","value":"370203"},{"label":"黄岛区","value":"370211"},{"label":"崂山区","value":"370212"},{"label":"李沧区","value":"370213"},{"label":"城阳区","value":"370214"},{"label":"即墨区","value":"370215"},{"label":"青岛高新技术产业开发区","value":"370271"},{"label":"胶州市","value":"370281"},{"label":"平度市","value":"370283"},{"label":"莱西市","value":"370285"}],[{"label":"淄川区","value":"370302"},{"label":"张店区","value":"370303"},{"label":"博山区","value":"370304"},{"label":"临淄区","value":"370305"},{"label":"周村区","value":"370306"},{"label":"桓台县","value":"370321"},{"label":"高青县","value":"370322"},{"label":"沂源县","value":"370323"}],[{"label":"市中区","value":"370402"},{"label":"薛城区","value":"370403"},{"label":"峄城区","value":"370404"},{"label":"台儿庄区","value":"370405"},{"label":"山亭区","value":"370406"},{"label":"滕州市","value":"370481"}],[{"label":"东营区","value":"370502"},{"label":"河口区","value":"370503"},{"label":"垦利区","value":"370505"},{"label":"利津县","value":"370522"},{"label":"广饶县","value":"370523"},{"label":"东营经济技术开发区","value":"370571"},{"label":"东营港经济开发区","value":"370572"}],[{"label":"芝罘区","value":"370602"},{"label":"福山区","value":"370611"},{"label":"牟平区","value":"370612"},{"label":"莱山区","value":"370613"},{"label":"长岛县","value":"370634"},{"label":"烟台高新技术产业开发区","value":"370671"},{"label":"烟台经济技术开发区","value":"370672"},{"label":"龙口市","value":"370681"},{"label":"莱阳市","value":"370682"},{"label":"莱州市","value":"370683"},{"label":"蓬莱市","value":"370684"},{"label":"招远市","value":"370685"},{"label":"栖霞市","value":"370686"},{"label":"海阳市","value":"370687"}],[{"label":"潍城区","value":"370702"},{"label":"寒亭区","value":"370703"},{"label":"坊子区","value":"370704"},{"label":"奎文区","value":"370705"},{"label":"临朐县","value":"370724"},{"label":"昌乐县","value":"370725"},{"label":"潍坊滨海经济技术开发区","value":"370772"},{"label":"青州市","value":"370781"},{"label":"诸城市","value":"370782"},{"label":"寿光市","value":"370783"},{"label":"安丘市","value":"370784"},{"label":"高密市","value":"370785"},{"label":"昌邑市","value":"370786"}],[{"label":"任城区","value":"370811"},{"label":"兖州区","value":"370812"},{"label":"微山县","value":"370826"},{"label":"鱼台县","value":"370827"},{"label":"金乡县","value":"370828"},{"label":"嘉祥县","value":"370829"},{"label":"汶上县","value":"370830"},{"label":"泗水县","value":"370831"},{"label":"梁山县","value":"370832"},{"label":"济宁高新技术产业开发区","value":"370871"},{"label":"曲阜市","value":"370881"},{"label":"邹城市","value":"370883"}],[{"label":"泰山区","value":"370902"},{"label":"岱岳区","value":"370911"},{"label":"宁阳县","value":"370921"},{"label":"东平县","value":"370923"},{"label":"新泰市","value":"370982"},{"label":"肥城市","value":"370983"}],[{"label":"环翠区","value":"371002"},{"label":"文登区","value":"371003"},{"label":"威海火炬高技术产业开发区","value":"371071"},{"label":"威海经济技术开发区","value":"371072"},{"label":"威海临港经济技术开发区","value":"371073"},{"label":"荣成市","value":"371082"},{"label":"乳山市","value":"371083"}],[{"label":"东港区","value":"371102"},{"label":"岚山区","value":"371103"},{"label":"五莲县","value":"371121"},{"label":"莒县","value":"371122"},{"label":"日照经济技术开发区","value":"371171"},{"label":"日照国际海洋城","value":"371172"}],[{"label":"莱城区","value":"371202"},{"label":"钢城区","value":"371203"}],[{"label":"兰山区","value":"371302"},{"label":"罗庄区","value":"371311"},{"label":"河东区","value":"371312"},{"label":"沂南县","value":"371321"},{"label":"郯城县","value":"371322"},{"label":"沂水县","value":"371323"},{"label":"兰陵县","value":"371324"},{"label":"费县","value":"371325"},{"label":"平邑县","value":"371326"},{"label":"莒南县","value":"371327"},{"label":"蒙阴县","value":"371328"},{"label":"临沭县","value":"371329"},{"label":"临沂高新技术产业开发区","value":"371371"},{"label":"临沂经济技术开发区","value":"371372"},{"label":"临沂临港经济开发区","value":"371373"}],[{"label":"德城区","value":"371402"},{"label":"陵城区","value":"371403"},{"label":"宁津县","value":"371422"},{"label":"庆云县","value":"371423"},{"label":"临邑县","value":"371424"},{"label":"齐河县","value":"371425"},{"label":"平原县","value":"371426"},{"label":"夏津县","value":"371427"},{"label":"武城县","value":"371428"},{"label":"德州经济技术开发区","value":"371471"},{"label":"德州运河经济开发区","value":"371472"},{"label":"乐陵市","value":"371481"},{"label":"禹城市","value":"371482"}],[{"label":"东昌府区","value":"371502"},{"label":"阳谷县","value":"371521"},{"label":"莘县","value":"371522"},{"label":"茌平县","value":"371523"},{"label":"东阿县","value":"371524"},{"label":"冠县","value":"371525"},{"label":"高唐县","value":"371526"},{"label":"临清市","value":"371581"}],[{"label":"滨城区","value":"371602"},{"label":"沾化区","value":"371603"},{"label":"惠民县","value":"371621"},{"label":"阳信县","value":"371622"},{"label":"无棣县","value":"371623"},{"label":"博兴县","value":"371625"},{"label":"邹平县","value":"371626"}],[{"label":"牡丹区","value":"371702"},{"label":"定陶区","value":"371703"},{"label":"曹县","value":"371721"},{"label":"单县","value":"371722"},{"label":"成武县","value":"371723"},{"label":"巨野县","value":"371724"},{"label":"郓城县","value":"371725"},{"label":"鄄城县","value":"371726"},{"label":"东明县","value":"371728"},{"label":"菏泽经济技术开发区","value":"371771"},{"label":"菏泽高新技术开发区","value":"371772"}]],[[{"label":"中原区","value":"410102"},{"label":"二七区","value":"410103"},{"label":"管城回族区","value":"410104"},{"label":"金水区","value":"410105"},{"label":"上街区","value":"410106"},{"label":"惠济区","value":"410108"},{"label":"中牟县","value":"410122"},{"label":"郑州经济技术开发区","value":"410171"},{"label":"郑州高新技术产业开发区","value":"410172"},{"label":"郑州航空港经济综合实验区","value":"410173"},{"label":"巩义市","value":"410181"},{"label":"荥阳市","value":"410182"},{"label":"新密市","value":"410183"},{"label":"新郑市","value":"410184"},{"label":"登封市","value":"410185"}],[{"label":"龙亭区","value":"410202"},{"label":"顺河回族区","value":"410203"},{"label":"鼓楼区","value":"410204"},{"label":"禹王台区","value":"410205"},{"label":"祥符区","value":"410212"},{"label":"杞县","value":"410221"},{"label":"通许县","value":"410222"},{"label":"尉氏县","value":"410223"},{"label":"兰考县","value":"410225"}],[{"label":"老城区","value":"410302"},{"label":"西工区","value":"410303"},{"label":"瀍河回族区","value":"410304"},{"label":"涧西区","value":"410305"},{"label":"吉利区","value":"410306"},{"label":"洛龙区","value":"410311"},{"label":"孟津县","value":"410322"},{"label":"新安县","value":"410323"},{"label":"栾川县","value":"410324"},{"label":"嵩县","value":"410325"},{"label":"汝阳县","value":"410326"},{"label":"宜阳县","value":"410327"},{"label":"洛宁县","value":"410328"},{"label":"伊川县","value":"410329"},{"label":"洛阳高新技术产业开发区","value":"410371"},{"label":"偃师市","value":"410381"}],[{"label":"新华区","value":"410402"},{"label":"卫东区","value":"410403"},{"label":"石龙区","value":"410404"},{"label":"湛河区","value":"410411"},{"label":"宝丰县","value":"410421"},{"label":"叶县","value":"410422"},{"label":"鲁山县","value":"410423"},{"label":"郏县","value":"410425"},{"label":"平顶山高新技术产业开发区","value":"410471"},{"label":"平顶山市新城区","value":"410472"},{"label":"舞钢市","value":"410481"},{"label":"汝州市","value":"410482"}],[{"label":"文峰区","value":"410502"},{"label":"北关区","value":"410503"},{"label":"殷都区","value":"410505"},{"label":"龙安区","value":"410506"},{"label":"安阳县","value":"410522"},{"label":"汤阴县","value":"410523"},{"label":"滑县","value":"410526"},{"label":"内黄县","value":"410527"},{"label":"安阳高新技术产业开发区","value":"410571"},{"label":"林州市","value":"410581"}],[{"label":"鹤山区","value":"410602"},{"label":"山城区","value":"410603"},{"label":"淇滨区","value":"410611"},{"label":"浚县","value":"410621"},{"label":"淇县","value":"410622"},{"label":"鹤壁经济技术开发区","value":"410671"}],[{"label":"红旗区","value":"410702"},{"label":"卫滨区","value":"410703"},{"label":"凤泉区","value":"410704"},{"label":"牧野区","value":"410711"},{"label":"新乡县","value":"410721"},{"label":"获嘉县","value":"410724"},{"label":"原阳县","value":"410725"},{"label":"延津县","value":"410726"},{"label":"封丘县","value":"410727"},{"label":"长垣县","value":"410728"},{"label":"新乡高新技术产业开发区","value":"410771"},{"label":"新乡经济技术开发区","value":"410772"},{"label":"新乡市平原城乡一体化示范区","value":"410773"},{"label":"卫辉市","value":"410781"},{"label":"辉县市","value":"410782"}],[{"label":"解放区","value":"410802"},{"label":"中站区","value":"410803"},{"label":"马村区","value":"410804"},{"label":"山阳区","value":"410811"},{"label":"修武县","value":"410821"},{"label":"博爱县","value":"410822"},{"label":"武陟县","value":"410823"},{"label":"温县","value":"410825"},{"label":"焦作城乡一体化示范区","value":"410871"},{"label":"沁阳市","value":"410882"},{"label":"孟州市","value":"410883"}],[{"label":"华龙区","value":"410902"},{"label":"清丰县","value":"410922"},{"label":"南乐县","value":"410923"},{"label":"范县","value":"410926"},{"label":"台前县","value":"410927"},{"label":"濮阳县","value":"410928"},{"label":"河南濮阳工业园区","value":"410971"},{"label":"濮阳经济技术开发区","value":"410972"}],[{"label":"魏都区","value":"411002"},{"label":"建安区","value":"411003"},{"label":"鄢陵县","value":"411024"},{"label":"襄城县","value":"411025"},{"label":"许昌经济技术开发区","value":"411071"},{"label":"禹州市","value":"411081"},{"label":"长葛市","value":"411082"}],[{"label":"源汇区","value":"411102"},{"label":"郾城区","value":"411103"},{"label":"召陵区","value":"411104"},{"label":"舞阳县","value":"411121"},{"label":"临颍县","value":"411122"},{"label":"漯河经济技术开发区","value":"411171"}],[{"label":"湖滨区","value":"411202"},{"label":"陕州区","value":"411203"},{"label":"渑池县","value":"411221"},{"label":"卢氏县","value":"411224"},{"label":"河南三门峡经济开发区","value":"411271"},{"label":"义马市","value":"411281"},{"label":"灵宝市","value":"411282"}],[{"label":"宛城区","value":"411302"},{"label":"卧龙区","value":"411303"},{"label":"南召县","value":"411321"},{"label":"方城县","value":"411322"},{"label":"西峡县","value":"411323"},{"label":"镇平县","value":"411324"},{"label":"内乡县","value":"411325"},{"label":"淅川县","value":"411326"},{"label":"社旗县","value":"411327"},{"label":"唐河县","value":"411328"},{"label":"新野县","value":"411329"},{"label":"桐柏县","value":"411330"},{"label":"南阳高新技术产业开发区","value":"411371"},{"label":"南阳市城乡一体化示范区","value":"411372"},{"label":"邓州市","value":"411381"}],[{"label":"梁园区","value":"411402"},{"label":"睢阳区","value":"411403"},{"label":"民权县","value":"411421"},{"label":"睢县","value":"411422"},{"label":"宁陵县","value":"411423"},{"label":"柘城县","value":"411424"},{"label":"虞城县","value":"411425"},{"label":"夏邑县","value":"411426"},{"label":"豫东综合物流产业聚集区","value":"411471"},{"label":"河南商丘经济开发区","value":"411472"},{"label":"永城市","value":"411481"}],[{"label":"浉河区","value":"411502"},{"label":"平桥区","value":"411503"},{"label":"罗山县","value":"411521"},{"label":"光山县","value":"411522"},{"label":"新县","value":"411523"},{"label":"商城县","value":"411524"},{"label":"固始县","value":"411525"},{"label":"潢川县","value":"411526"},{"label":"淮滨县","value":"411527"},{"label":"息县","value":"411528"},{"label":"信阳高新技术产业开发区","value":"411571"}],[{"label":"川汇区","value":"411602"},{"label":"扶沟县","value":"411621"},{"label":"西华县","value":"411622"},{"label":"商水县","value":"411623"},{"label":"沈丘县","value":"411624"},{"label":"郸城县","value":"411625"},{"label":"淮阳县","value":"411626"},{"label":"太康县","value":"411627"},{"label":"鹿邑县","value":"411628"},{"label":"河南周口经济开发区","value":"411671"},{"label":"项城市","value":"411681"}],[{"label":"驿城区","value":"411702"},{"label":"西平县","value":"411721"},{"label":"上蔡县","value":"411722"},{"label":"平舆县","value":"411723"},{"label":"正阳县","value":"411724"},{"label":"确山县","value":"411725"},{"label":"泌阳县","value":"411726"},{"label":"汝南县","value":"411727"},{"label":"遂平县","value":"411728"},{"label":"新蔡县","value":"411729"},{"label":"河南驻马店经济开发区","value":"411771"}],[{"label":"济源市","value":"419001"}]],[[{"label":"江岸区","value":"420102"},{"label":"江汉区","value":"420103"},{"label":"硚口区","value":"420104"},{"label":"汉阳区","value":"420105"},{"label":"武昌区","value":"420106"},{"label":"青山区","value":"420107"},{"label":"洪山区","value":"420111"},{"label":"东西湖区","value":"420112"},{"label":"汉南区","value":"420113"},{"label":"蔡甸区","value":"420114"},{"label":"江夏区","value":"420115"},{"label":"黄陂区","value":"420116"},{"label":"新洲区","value":"420117"}],[{"label":"黄石港区","value":"420202"},{"label":"西塞山区","value":"420203"},{"label":"下陆区","value":"420204"},{"label":"铁山区","value":"420205"},{"label":"阳新县","value":"420222"},{"label":"大冶市","value":"420281"}],[{"label":"茅箭区","value":"420302"},{"label":"张湾区","value":"420303"},{"label":"郧阳区","value":"420304"},{"label":"郧西县","value":"420322"},{"label":"竹山县","value":"420323"},{"label":"竹溪县","value":"420324"},{"label":"房县","value":"420325"},{"label":"丹江口市","value":"420381"}],[{"label":"西陵区","value":"420502"},{"label":"伍家岗区","value":"420503"},{"label":"点军区","value":"420504"},{"label":"猇亭区","value":"420505"},{"label":"夷陵区","value":"420506"},{"label":"远安县","value":"420525"},{"label":"兴山县","value":"420526"},{"label":"秭归县","value":"420527"},{"label":"长阳土家族自治县","value":"420528"},{"label":"五峰土家族自治县","value":"420529"},{"label":"宜都市","value":"420581"},{"label":"当阳市","value":"420582"},{"label":"枝江市","value":"420583"}],[{"label":"襄城区","value":"420602"},{"label":"樊城区","value":"420606"},{"label":"襄州区","value":"420607"},{"label":"南漳县","value":"420624"},{"label":"谷城县","value":"420625"},{"label":"保康县","value":"420626"},{"label":"老河口市","value":"420682"},{"label":"枣阳市","value":"420683"},{"label":"宜城市","value":"420684"}],[{"label":"梁子湖区","value":"420702"},{"label":"华容区","value":"420703"},{"label":"鄂城区","value":"420704"}],[{"label":"东宝区","value":"420802"},{"label":"掇刀区","value":"420804"},{"label":"京山县","value":"420821"},{"label":"沙洋县","value":"420822"},{"label":"钟祥市","value":"420881"}],[{"label":"孝南区","value":"420902"},{"label":"孝昌县","value":"420921"},{"label":"大悟县","value":"420922"},{"label":"云梦县","value":"420923"},{"label":"应城市","value":"420981"},{"label":"安陆市","value":"420982"},{"label":"汉川市","value":"420984"}],[{"label":"沙市区","value":"421002"},{"label":"荆州区","value":"421003"},{"label":"公安县","value":"421022"},{"label":"监利县","value":"421023"},{"label":"江陵县","value":"421024"},{"label":"荆州经济技术开发区","value":"421071"},{"label":"石首市","value":"421081"},{"label":"洪湖市","value":"421083"},{"label":"松滋市","value":"421087"}],[{"label":"黄州区","value":"421102"},{"label":"团风县","value":"421121"},{"label":"红安县","value":"421122"},{"label":"罗田县","value":"421123"},{"label":"英山县","value":"421124"},{"label":"浠水县","value":"421125"},{"label":"蕲春县","value":"421126"},{"label":"黄梅县","value":"421127"},{"label":"龙感湖管理区","value":"421171"},{"label":"麻城市","value":"421181"},{"label":"武穴市","value":"421182"}],[{"label":"咸安区","value":"421202"},{"label":"嘉鱼县","value":"421221"},{"label":"通城县","value":"421222"},{"label":"崇阳县","value":"421223"},{"label":"通山县","value":"421224"},{"label":"赤壁市","value":"421281"}],[{"label":"曾都区","value":"421303"},{"label":"随县","value":"421321"},{"label":"广水市","value":"421381"}],[{"label":"恩施市","value":"422801"},{"label":"利川市","value":"422802"},{"label":"建始县","value":"422822"},{"label":"巴东县","value":"422823"},{"label":"宣恩县","value":"422825"},{"label":"咸丰县","value":"422826"},{"label":"来凤县","value":"422827"},{"label":"鹤峰县","value":"422828"}],[{"label":"仙桃市","value":"429004"},{"label":"潜江市","value":"429005"},{"label":"天门市","value":"429006"},{"label":"神农架林区","value":"429021"}]],[[{"label":"芙蓉区","value":"430102"},{"label":"天心区","value":"430103"},{"label":"岳麓区","value":"430104"},{"label":"开福区","value":"430105"},{"label":"雨花区","value":"430111"},{"label":"望城区","value":"430112"},{"label":"长沙县","value":"430121"},{"label":"浏阳市","value":"430181"},{"label":"宁乡市","value":"430182"}],[{"label":"荷塘区","value":"430202"},{"label":"芦淞区","value":"430203"},{"label":"石峰区","value":"430204"},{"label":"天元区","value":"430211"},{"label":"株洲县","value":"430221"},{"label":"攸县","value":"430223"},{"label":"茶陵县","value":"430224"},{"label":"炎陵县","value":"430225"},{"label":"云龙示范区","value":"430271"},{"label":"醴陵市","value":"430281"}],[{"label":"雨湖区","value":"430302"},{"label":"岳塘区","value":"430304"},{"label":"湘潭县","value":"430321"},{"label":"湖南湘潭高新技术产业园区","value":"430371"},{"label":"湘潭昭山示范区","value":"430372"},{"label":"湘潭九华示范区","value":"430373"},{"label":"湘乡市","value":"430381"},{"label":"韶山市","value":"430382"}],[{"label":"珠晖区","value":"430405"},{"label":"雁峰区","value":"430406"},{"label":"石鼓区","value":"430407"},{"label":"蒸湘区","value":"430408"},{"label":"南岳区","value":"430412"},{"label":"衡阳县","value":"430421"},{"label":"衡南县","value":"430422"},{"label":"衡山县","value":"430423"},{"label":"衡东县","value":"430424"},{"label":"祁东县","value":"430426"},{"label":"衡阳综合保税区","value":"430471"},{"label":"湖南衡阳高新技术产业园区","value":"430472"},{"label":"湖南衡阳松木经济开发区","value":"430473"},{"label":"耒阳市","value":"430481"},{"label":"常宁市","value":"430482"}],[{"label":"双清区","value":"430502"},{"label":"大祥区","value":"430503"},{"label":"北塔区","value":"430511"},{"label":"邵东县","value":"430521"},{"label":"新邵县","value":"430522"},{"label":"邵阳县","value":"430523"},{"label":"隆回县","value":"430524"},{"label":"洞口县","value":"430525"},{"label":"绥宁县","value":"430527"},{"label":"新宁县","value":"430528"},{"label":"城步苗族自治县","value":"430529"},{"label":"武冈市","value":"430581"}],[{"label":"岳阳楼区","value":"430602"},{"label":"云溪区","value":"430603"},{"label":"君山区","value":"430611"},{"label":"岳阳县","value":"430621"},{"label":"华容县","value":"430623"},{"label":"湘阴县","value":"430624"},{"label":"平江县","value":"430626"},{"label":"岳阳市屈原管理区","value":"430671"},{"label":"汨罗市","value":"430681"},{"label":"临湘市","value":"430682"}],[{"label":"武陵区","value":"430702"},{"label":"鼎城区","value":"430703"},{"label":"安乡县","value":"430721"},{"label":"汉寿县","value":"430722"},{"label":"澧县","value":"430723"},{"label":"临澧县","value":"430724"},{"label":"桃源县","value":"430725"},{"label":"石门县","value":"430726"},{"label":"常德市西洞庭管理区","value":"430771"},{"label":"津市市","value":"430781"}],[{"label":"永定区","value":"430802"},{"label":"武陵源区","value":"430811"},{"label":"慈利县","value":"430821"},{"label":"桑植县","value":"430822"}],[{"label":"资阳区","value":"430902"},{"label":"赫山区","value":"430903"},{"label":"南县","value":"430921"},{"label":"桃江县","value":"430922"},{"label":"安化县","value":"430923"},{"label":"益阳市大通湖管理区","value":"430971"},{"label":"湖南益阳高新技术产业园区","value":"430972"},{"label":"沅江市","value":"430981"}],[{"label":"北湖区","value":"431002"},{"label":"苏仙区","value":"431003"},{"label":"桂阳县","value":"431021"},{"label":"宜章县","value":"431022"},{"label":"永兴县","value":"431023"},{"label":"嘉禾县","value":"431024"},{"label":"临武县","value":"431025"},{"label":"汝城县","value":"431026"},{"label":"桂东县","value":"431027"},{"label":"安仁县","value":"431028"},{"label":"资兴市","value":"431081"}],[{"label":"零陵区","value":"431102"},{"label":"冷水滩区","value":"431103"},{"label":"祁阳县","value":"431121"},{"label":"东安县","value":"431122"},{"label":"双牌县","value":"431123"},{"label":"道县","value":"431124"},{"label":"江永县","value":"431125"},{"label":"宁远县","value":"431126"},{"label":"蓝山县","value":"431127"},{"label":"新田县","value":"431128"},{"label":"江华瑶族自治县","value":"431129"},{"label":"永州经济技术开发区","value":"431171"},{"label":"永州市金洞管理区","value":"431172"},{"label":"永州市回龙圩管理区","value":"431173"}],[{"label":"鹤城区","value":"431202"},{"label":"中方县","value":"431221"},{"label":"沅陵县","value":"431222"},{"label":"辰溪县","value":"431223"},{"label":"溆浦县","value":"431224"},{"label":"会同县","value":"431225"},{"label":"麻阳苗族自治县","value":"431226"},{"label":"新晃侗族自治县","value":"431227"},{"label":"芷江侗族自治县","value":"431228"},{"label":"靖州苗族侗族自治县","value":"431229"},{"label":"通道侗族自治县","value":"431230"},{"label":"怀化市洪江管理区","value":"431271"},{"label":"洪江市","value":"431281"}],[{"label":"娄星区","value":"431302"},{"label":"双峰县","value":"431321"},{"label":"新化县","value":"431322"},{"label":"冷水江市","value":"431381"},{"label":"涟源市","value":"431382"}],[{"label":"吉首市","value":"433101"},{"label":"泸溪县","value":"433122"},{"label":"凤凰县","value":"433123"},{"label":"花垣县","value":"433124"},{"label":"保靖县","value":"433125"},{"label":"古丈县","value":"433126"},{"label":"永顺县","value":"433127"},{"label":"龙山县","value":"433130"},{"label":"湖南吉首经济开发区","value":"433172"},{"label":"湖南永顺经济开发区","value":"433173"}]],[[{"label":"荔湾区","value":"440103"},{"label":"越秀区","value":"440104"},{"label":"海珠区","value":"440105"},{"label":"天河区","value":"440106"},{"label":"白云区","value":"440111"},{"label":"黄埔区","value":"440112"},{"label":"番禺区","value":"440113"},{"label":"花都区","value":"440114"},{"label":"南沙区","value":"440115"},{"label":"从化区","value":"440117"},{"label":"增城区","value":"440118"}],[{"label":"武江区","value":"440203"},{"label":"浈江区","value":"440204"},{"label":"曲江区","value":"440205"},{"label":"始兴县","value":"440222"},{"label":"仁化县","value":"440224"},{"label":"翁源县","value":"440229"},{"label":"乳源瑶族自治县","value":"440232"},{"label":"新丰县","value":"440233"},{"label":"乐昌市","value":"440281"},{"label":"南雄市","value":"440282"}],[{"label":"罗湖区","value":"440303"},{"label":"福田区","value":"440304"},{"label":"南山区","value":"440305"},{"label":"宝安区","value":"440306"},{"label":"龙岗区","value":"440307"},{"label":"盐田区","value":"440308"},{"label":"龙华区","value":"440309"},{"label":"坪山区","value":"440310"}],[{"label":"香洲区","value":"440402"},{"label":"斗门区","value":"440403"},{"label":"金湾区","value":"440404"}],[{"label":"龙湖区","value":"440507"},{"label":"金平区","value":"440511"},{"label":"濠江区","value":"440512"},{"label":"潮阳区","value":"440513"},{"label":"潮南区","value":"440514"},{"label":"澄海区","value":"440515"},{"label":"南澳县","value":"440523"}],[{"label":"禅城区","value":"440604"},{"label":"南海区","value":"440605"},{"label":"顺德区","value":"440606"},{"label":"三水区","value":"440607"},{"label":"高明区","value":"440608"}],[{"label":"蓬江区","value":"440703"},{"label":"江海区","value":"440704"},{"label":"新会区","value":"440705"},{"label":"台山市","value":"440781"},{"label":"开平市","value":"440783"},{"label":"鹤山市","value":"440784"},{"label":"恩平市","value":"440785"}],[{"label":"赤坎区","value":"440802"},{"label":"霞山区","value":"440803"},{"label":"坡头区","value":"440804"},{"label":"麻章区","value":"440811"},{"label":"遂溪县","value":"440823"},{"label":"徐闻县","value":"440825"},{"label":"廉江市","value":"440881"},{"label":"雷州市","value":"440882"},{"label":"吴川市","value":"440883"}],[{"label":"茂南区","value":"440902"},{"label":"电白区","value":"440904"},{"label":"高州市","value":"440981"},{"label":"化州市","value":"440982"},{"label":"信宜市","value":"440983"}],[{"label":"端州区","value":"441202"},{"label":"鼎湖区","value":"441203"},{"label":"高要区","value":"441204"},{"label":"广宁县","value":"441223"},{"label":"怀集县","value":"441224"},{"label":"封开县","value":"441225"},{"label":"德庆县","value":"441226"},{"label":"四会市","value":"441284"}],[{"label":"惠城区","value":"441302"},{"label":"惠阳区","value":"441303"},{"label":"博罗县","value":"441322"},{"label":"惠东县","value":"441323"},{"label":"龙门县","value":"441324"}],[{"label":"梅江区","value":"441402"},{"label":"梅县区","value":"441403"},{"label":"大埔县","value":"441422"},{"label":"丰顺县","value":"441423"},{"label":"五华县","value":"441424"},{"label":"平远县","value":"441426"},{"label":"蕉岭县","value":"441427"},{"label":"兴宁市","value":"441481"}],[{"label":"城区","value":"441502"},{"label":"海丰县","value":"441521"},{"label":"陆河县","value":"441523"},{"label":"陆丰市","value":"441581"}],[{"label":"源城区","value":"441602"},{"label":"紫金县","value":"441621"},{"label":"龙川县","value":"441622"},{"label":"连平县","value":"441623"},{"label":"和平县","value":"441624"},{"label":"东源县","value":"441625"}],[{"label":"江城区","value":"441702"},{"label":"阳东区","value":"441704"},{"label":"阳西县","value":"441721"},{"label":"阳春市","value":"441781"}],[{"label":"清城区","value":"441802"},{"label":"清新区","value":"441803"},{"label":"佛冈县","value":"441821"},{"label":"阳山县","value":"441823"},{"label":"连山壮族瑶族自治县","value":"441825"},{"label":"连南瑶族自治县","value":"441826"},{"label":"英德市","value":"441881"},{"label":"连州市","value":"441882"}],[{"label":"东莞市","value":"441900"}],[{"label":"中山市","value":"442000"}],[{"label":"湘桥区","value":"445102"},{"label":"潮安区","value":"445103"},{"label":"饶平县","value":"445122"}],[{"label":"榕城区","value":"445202"},{"label":"揭东区","value":"445203"},{"label":"揭西县","value":"445222"},{"label":"惠来县","value":"445224"},{"label":"普宁市","value":"445281"}],[{"label":"云城区","value":"445302"},{"label":"云安区","value":"445303"},{"label":"新兴县","value":"445321"},{"label":"郁南县","value":"445322"},{"label":"罗定市","value":"445381"}]],[[{"label":"兴宁区","value":"450102"},{"label":"青秀区","value":"450103"},{"label":"江南区","value":"450105"},{"label":"西乡塘区","value":"450107"},{"label":"良庆区","value":"450108"},{"label":"邕宁区","value":"450109"},{"label":"武鸣区","value":"450110"},{"label":"隆安县","value":"450123"},{"label":"马山县","value":"450124"},{"label":"上林县","value":"450125"},{"label":"宾阳县","value":"450126"},{"label":"横县","value":"450127"}],[{"label":"城中区","value":"450202"},{"label":"鱼峰区","value":"450203"},{"label":"柳南区","value":"450204"},{"label":"柳北区","value":"450205"},{"label":"柳江区","value":"450206"},{"label":"柳城县","value":"450222"},{"label":"鹿寨县","value":"450223"},{"label":"融安县","value":"450224"},{"label":"融水苗族自治县","value":"450225"},{"label":"三江侗族自治县","value":"450226"}],[{"label":"秀峰区","value":"450302"},{"label":"叠彩区","value":"450303"},{"label":"象山区","value":"450304"},{"label":"七星区","value":"450305"},{"label":"雁山区","value":"450311"},{"label":"临桂区","value":"450312"},{"label":"阳朔县","value":"450321"},{"label":"灵川县","value":"450323"},{"label":"全州县","value":"450324"},{"label":"兴安县","value":"450325"},{"label":"永福县","value":"450326"},{"label":"灌阳县","value":"450327"},{"label":"龙胜各族自治县","value":"450328"},{"label":"资源县","value":"450329"},{"label":"平乐县","value":"450330"},{"label":"荔浦县","value":"450331"},{"label":"恭城瑶族自治县","value":"450332"}],[{"label":"万秀区","value":"450403"},{"label":"长洲区","value":"450405"},{"label":"龙圩区","value":"450406"},{"label":"苍梧县","value":"450421"},{"label":"藤县","value":"450422"},{"label":"蒙山县","value":"450423"},{"label":"岑溪市","value":"450481"}],[{"label":"海城区","value":"450502"},{"label":"银海区","value":"450503"},{"label":"铁山港区","value":"450512"},{"label":"合浦县","value":"450521"}],[{"label":"港口区","value":"450602"},{"label":"防城区","value":"450603"},{"label":"上思县","value":"450621"},{"label":"东兴市","value":"450681"}],[{"label":"钦南区","value":"450702"},{"label":"钦北区","value":"450703"},{"label":"灵山县","value":"450721"},{"label":"浦北县","value":"450722"}],[{"label":"港北区","value":"450802"},{"label":"港南区","value":"450803"},{"label":"覃塘区","value":"450804"},{"label":"平南县","value":"450821"},{"label":"桂平市","value":"450881"}],[{"label":"玉州区","value":"450902"},{"label":"福绵区","value":"450903"},{"label":"容县","value":"450921"},{"label":"陆川县","value":"450922"},{"label":"博白县","value":"450923"},{"label":"兴业县","value":"450924"},{"label":"北流市","value":"450981"}],[{"label":"右江区","value":"451002"},{"label":"田阳县","value":"451021"},{"label":"田东县","value":"451022"},{"label":"平果县","value":"451023"},{"label":"德保县","value":"451024"},{"label":"那坡县","value":"451026"},{"label":"凌云县","value":"451027"},{"label":"乐业县","value":"451028"},{"label":"田林县","value":"451029"},{"label":"西林县","value":"451030"},{"label":"隆林各族自治县","value":"451031"},{"label":"靖西市","value":"451081"}],[{"label":"八步区","value":"451102"},{"label":"平桂区","value":"451103"},{"label":"昭平县","value":"451121"},{"label":"钟山县","value":"451122"},{"label":"富川瑶族自治县","value":"451123"}],[{"label":"金城江区","value":"451202"},{"label":"宜州区","value":"451203"},{"label":"南丹县","value":"451221"},{"label":"天峨县","value":"451222"},{"label":"凤山县","value":"451223"},{"label":"东兰县","value":"451224"},{"label":"罗城仫佬族自治县","value":"451225"},{"label":"环江毛南族自治县","value":"451226"},{"label":"巴马瑶族自治县","value":"451227"},{"label":"都安瑶族自治县","value":"451228"},{"label":"大化瑶族自治县","value":"451229"}],[{"label":"兴宾区","value":"451302"},{"label":"忻城县","value":"451321"},{"label":"象州县","value":"451322"},{"label":"武宣县","value":"451323"},{"label":"金秀瑶族自治县","value":"451324"},{"label":"合山市","value":"451381"}],[{"label":"江州区","value":"451402"},{"label":"扶绥县","value":"451421"},{"label":"宁明县","value":"451422"},{"label":"龙州县","value":"451423"},{"label":"大新县","value":"451424"},{"label":"天等县","value":"451425"},{"label":"凭祥市","value":"451481"}]],[[{"label":"秀英区","value":"460105"},{"label":"龙华区","value":"460106"},{"label":"琼山区","value":"460107"},{"label":"美兰区","value":"460108"}],[{"label":"海棠区","value":"460202"},{"label":"吉阳区","value":"460203"},{"label":"天涯区","value":"460204"},{"label":"崖州区","value":"460205"}],[{"label":"西沙群岛","value":"460321"},{"label":"南沙群岛","value":"460322"},{"label":"中沙群岛的岛礁及其海域","value":"460323"}],[{"label":"儋州市","value":"460400"}],[{"label":"五指山市","value":"469001"},{"label":"琼海市","value":"469002"},{"label":"文昌市","value":"469005"},{"label":"万宁市","value":"469006"},{"label":"东方市","value":"469007"},{"label":"定安县","value":"469021"},{"label":"屯昌县","value":"469022"},{"label":"澄迈县","value":"469023"},{"label":"临高县","value":"469024"},{"label":"白沙黎族自治县","value":"469025"},{"label":"昌江黎族自治县","value":"469026"},{"label":"乐东黎族自治县","value":"469027"},{"label":"陵水黎族自治县","value":"469028"},{"label":"保亭黎族苗族自治县","value":"469029"},{"label":"琼中黎族苗族自治县","value":"469030"}]],[[{"label":"万州区","value":"500101"},{"label":"涪陵区","value":"500102"},{"label":"渝中区","value":"500103"},{"label":"大渡口区","value":"500104"},{"label":"江北区","value":"500105"},{"label":"沙坪坝区","value":"500106"},{"label":"九龙坡区","value":"500107"},{"label":"南岸区","value":"500108"},{"label":"北碚区","value":"500109"},{"label":"綦江区","value":"500110"},{"label":"大足区","value":"500111"},{"label":"渝北区","value":"500112"},{"label":"巴南区","value":"500113"},{"label":"黔江区","value":"500114"},{"label":"长寿区","value":"500115"},{"label":"江津区","value":"500116"},{"label":"合川区","value":"500117"},{"label":"永川区","value":"500118"},{"label":"南川区","value":"500119"},{"label":"璧山区","value":"500120"},{"label":"铜梁区","value":"500151"},{"label":"潼南区","value":"500152"},{"label":"荣昌区","value":"500153"},{"label":"开州区","value":"500154"},{"label":"梁平区","value":"500155"},{"label":"武隆区","value":"500156"}],[{"label":"城口县","value":"500229"},{"label":"丰都县","value":"500230"},{"label":"垫江县","value":"500231"},{"label":"忠县","value":"500233"},{"label":"云阳县","value":"500235"},{"label":"奉节县","value":"500236"},{"label":"巫山县","value":"500237"},{"label":"巫溪县","value":"500238"},{"label":"石柱土家族自治县","value":"500240"},{"label":"秀山土家族苗族自治县","value":"500241"},{"label":"酉阳土家族苗族自治县","value":"500242"},{"label":"彭水苗族土家族自治县","value":"500243"}]],[[{"label":"锦江区","value":"510104"},{"label":"青羊区","value":"510105"},{"label":"金牛区","value":"510106"},{"label":"武侯区","value":"510107"},{"label":"成华区","value":"510108"},{"label":"龙泉驿区","value":"510112"},{"label":"青白江区","value":"510113"},{"label":"新都区","value":"510114"},{"label":"温江区","value":"510115"},{"label":"双流区","value":"510116"},{"label":"郫都区","value":"510117"},{"label":"金堂县","value":"510121"},{"label":"大邑县","value":"510129"},{"label":"蒲江县","value":"510131"},{"label":"新津县","value":"510132"},{"label":"都江堰市","value":"510181"},{"label":"彭州市","value":"510182"},{"label":"邛崃市","value":"510183"},{"label":"崇州市","value":"510184"},{"label":"简阳市","value":"510185"}],[{"label":"自流井区","value":"510302"},{"label":"贡井区","value":"510303"},{"label":"大安区","value":"510304"},{"label":"沿滩区","value":"510311"},{"label":"荣县","value":"510321"},{"label":"富顺县","value":"510322"}],[{"label":"东区","value":"510402"},{"label":"西区","value":"510403"},{"label":"仁和区","value":"510411"},{"label":"米易县","value":"510421"},{"label":"盐边县","value":"510422"}],[{"label":"江阳区","value":"510502"},{"label":"纳溪区","value":"510503"},{"label":"龙马潭区","value":"510504"},{"label":"泸县","value":"510521"},{"label":"合江县","value":"510522"},{"label":"叙永县","value":"510524"},{"label":"古蔺县","value":"510525"}],[{"label":"旌阳区","value":"510603"},{"label":"罗江区","value":"510604"},{"label":"中江县","value":"510623"},{"label":"广汉市","value":"510681"},{"label":"什邡市","value":"510682"},{"label":"绵竹市","value":"510683"}],[{"label":"涪城区","value":"510703"},{"label":"游仙区","value":"510704"},{"label":"安州区","value":"510705"},{"label":"三台县","value":"510722"},{"label":"盐亭县","value":"510723"},{"label":"梓潼县","value":"510725"},{"label":"北川羌族自治县","value":"510726"},{"label":"平武县","value":"510727"},{"label":"江油市","value":"510781"}],[{"label":"利州区","value":"510802"},{"label":"昭化区","value":"510811"},{"label":"朝天区","value":"510812"},{"label":"旺苍县","value":"510821"},{"label":"青川县","value":"510822"},{"label":"剑阁县","value":"510823"},{"label":"苍溪县","value":"510824"}],[{"label":"船山区","value":"510903"},{"label":"安居区","value":"510904"},{"label":"蓬溪县","value":"510921"},{"label":"射洪县","value":"510922"},{"label":"大英县","value":"510923"}],[{"label":"市中区","value":"511002"},{"label":"东兴区","value":"511011"},{"label":"威远县","value":"511024"},{"label":"资中县","value":"511025"},{"label":"内江经济开发区","value":"511071"},{"label":"隆昌市","value":"511083"}],[{"label":"市中区","value":"511102"},{"label":"沙湾区","value":"511111"},{"label":"五通桥区","value":"511112"},{"label":"金口河区","value":"511113"},{"label":"犍为县","value":"511123"},{"label":"井研县","value":"511124"},{"label":"夹江县","value":"511126"},{"label":"沐川县","value":"511129"},{"label":"峨边彝族自治县","value":"511132"},{"label":"马边彝族自治县","value":"511133"},{"label":"峨眉山市","value":"511181"}],[{"label":"顺庆区","value":"511302"},{"label":"高坪区","value":"511303"},{"label":"嘉陵区","value":"511304"},{"label":"南部县","value":"511321"},{"label":"营山县","value":"511322"},{"label":"蓬安县","value":"511323"},{"label":"仪陇县","value":"511324"},{"label":"西充县","value":"511325"},{"label":"阆中市","value":"511381"}],[{"label":"东坡区","value":"511402"},{"label":"彭山区","value":"511403"},{"label":"仁寿县","value":"511421"},{"label":"洪雅县","value":"511423"},{"label":"丹棱县","value":"511424"},{"label":"青神县","value":"511425"}],[{"label":"翠屏区","value":"511502"},{"label":"南溪区","value":"511503"},{"label":"宜宾县","value":"511521"},{"label":"江安县","value":"511523"},{"label":"长宁县","value":"511524"},{"label":"高县","value":"511525"},{"label":"珙县","value":"511526"},{"label":"筠连县","value":"511527"},{"label":"兴文县","value":"511528"},{"label":"屏山县","value":"511529"}],[{"label":"广安区","value":"511602"},{"label":"前锋区","value":"511603"},{"label":"岳池县","value":"511621"},{"label":"武胜县","value":"511622"},{"label":"邻水县","value":"511623"},{"label":"华蓥市","value":"511681"}],[{"label":"通川区","value":"511702"},{"label":"达川区","value":"511703"},{"label":"宣汉县","value":"511722"},{"label":"开江县","value":"511723"},{"label":"大竹县","value":"511724"},{"label":"渠县","value":"511725"},{"label":"达州经济开发区","value":"511771"},{"label":"万源市","value":"511781"}],[{"label":"雨城区","value":"511802"},{"label":"名山区","value":"511803"},{"label":"荥经县","value":"511822"},{"label":"汉源县","value":"511823"},{"label":"石棉县","value":"511824"},{"label":"天全县","value":"511825"},{"label":"芦山县","value":"511826"},{"label":"宝兴县","value":"511827"}],[{"label":"巴州区","value":"511902"},{"label":"恩阳区","value":"511903"},{"label":"通江县","value":"511921"},{"label":"南江县","value":"511922"},{"label":"平昌县","value":"511923"},{"label":"巴中经济开发区","value":"511971"}],[{"label":"雁江区","value":"512002"},{"label":"安岳县","value":"512021"},{"label":"乐至县","value":"512022"}],[{"label":"马尔康市","value":"513201"},{"label":"汶川县","value":"513221"},{"label":"理县","value":"513222"},{"label":"茂县","value":"513223"},{"label":"松潘县","value":"513224"},{"label":"九寨沟县","value":"513225"},{"label":"金川县","value":"513226"},{"label":"小金县","value":"513227"},{"label":"黑水县","value":"513228"},{"label":"壤塘县","value":"513230"},{"label":"阿坝县","value":"513231"},{"label":"若尔盖县","value":"513232"},{"label":"红原县","value":"513233"}],[{"label":"康定市","value":"513301"},{"label":"泸定县","value":"513322"},{"label":"丹巴县","value":"513323"},{"label":"九龙县","value":"513324"},{"label":"雅江县","value":"513325"},{"label":"道孚县","value":"513326"},{"label":"炉霍县","value":"513327"},{"label":"甘孜县","value":"513328"},{"label":"新龙县","value":"513329"},{"label":"德格县","value":"513330"},{"label":"白玉县","value":"513331"},{"label":"石渠县","value":"513332"},{"label":"色达县","value":"513333"},{"label":"理塘县","value":"513334"},{"label":"巴塘县","value":"513335"},{"label":"乡城县","value":"513336"},{"label":"稻城县","value":"513337"},{"label":"得荣县","value":"513338"}],[{"label":"西昌市","value":"513401"},{"label":"木里藏族自治县","value":"513422"},{"label":"盐源县","value":"513423"},{"label":"德昌县","value":"513424"},{"label":"会理县","value":"513425"},{"label":"会东县","value":"513426"},{"label":"宁南县","value":"513427"},{"label":"普格县","value":"513428"},{"label":"布拖县","value":"513429"},{"label":"金阳县","value":"513430"},{"label":"昭觉县","value":"513431"},{"label":"喜德县","value":"513432"},{"label":"冕宁县","value":"513433"},{"label":"越西县","value":"513434"},{"label":"甘洛县","value":"513435"},{"label":"美姑县","value":"513436"},{"label":"雷波县","value":"513437"}]],[[{"label":"南明区","value":"520102"},{"label":"云岩区","value":"520103"},{"label":"花溪区","value":"520111"},{"label":"乌当区","value":"520112"},{"label":"白云区","value":"520113"},{"label":"观山湖区","value":"520115"},{"label":"开阳县","value":"520121"},{"label":"息烽县","value":"520122"},{"label":"修文县","value":"520123"},{"label":"清镇市","value":"520181"}],[{"label":"钟山区","value":"520201"},{"label":"六枝特区","value":"520203"},{"label":"水城县","value":"520221"},{"label":"盘州市","value":"520281"}],[{"label":"红花岗区","value":"520302"},{"label":"汇川区","value":"520303"},{"label":"播州区","value":"520304"},{"label":"桐梓县","value":"520322"},{"label":"绥阳县","value":"520323"},{"label":"正安县","value":"520324"},{"label":"道真仡佬族苗族自治县","value":"520325"},{"label":"务川仡佬族苗族自治县","value":"520326"},{"label":"凤冈县","value":"520327"},{"label":"湄潭县","value":"520328"},{"label":"余庆县","value":"520329"},{"label":"习水县","value":"520330"},{"label":"赤水市","value":"520381"},{"label":"仁怀市","value":"520382"}],[{"label":"西秀区","value":"520402"},{"label":"平坝区","value":"520403"},{"label":"普定县","value":"520422"},{"label":"镇宁布依族苗族自治县","value":"520423"},{"label":"关岭布依族苗族自治县","value":"520424"},{"label":"紫云苗族布依族自治县","value":"520425"}],[{"label":"七星关区","value":"520502"},{"label":"大方县","value":"520521"},{"label":"黔西县","value":"520522"},{"label":"金沙县","value":"520523"},{"label":"织金县","value":"520524"},{"label":"纳雍县","value":"520525"},{"label":"威宁彝族回族苗族自治县","value":"520526"},{"label":"赫章县","value":"520527"}],[{"label":"碧江区","value":"520602"},{"label":"万山区","value":"520603"},{"label":"江口县","value":"520621"},{"label":"玉屏侗族自治县","value":"520622"},{"label":"石阡县","value":"520623"},{"label":"思南县","value":"520624"},{"label":"印江土家族苗族自治县","value":"520625"},{"label":"德江县","value":"520626"},{"label":"沿河土家族自治县","value":"520627"},{"label":"松桃苗族自治县","value":"520628"}],[{"label":"兴义市","value":"522301"},{"label":"兴仁县","value":"522322"},{"label":"普安县","value":"522323"},{"label":"晴隆县","value":"522324"},{"label":"贞丰县","value":"522325"},{"label":"望谟县","value":"522326"},{"label":"册亨县","value":"522327"},{"label":"安龙县","value":"522328"}],[{"label":"凯里市","value":"522601"},{"label":"黄平县","value":"522622"},{"label":"施秉县","value":"522623"},{"label":"三穗县","value":"522624"},{"label":"镇远县","value":"522625"},{"label":"岑巩县","value":"522626"},{"label":"天柱县","value":"522627"},{"label":"锦屏县","value":"522628"},{"label":"剑河县","value":"522629"},{"label":"台江县","value":"522630"},{"label":"黎平县","value":"522631"},{"label":"榕江县","value":"522632"},{"label":"从江县","value":"522633"},{"label":"雷山县","value":"522634"},{"label":"麻江县","value":"522635"},{"label":"丹寨县","value":"522636"}],[{"label":"都匀市","value":"522701"},{"label":"福泉市","value":"522702"},{"label":"荔波县","value":"522722"},{"label":"贵定县","value":"522723"},{"label":"瓮安县","value":"522725"},{"label":"独山县","value":"522726"},{"label":"平塘县","value":"522727"},{"label":"罗甸县","value":"522728"},{"label":"长顺县","value":"522729"},{"label":"龙里县","value":"522730"},{"label":"惠水县","value":"522731"},{"label":"三都水族自治县","value":"522732"}]],[[{"label":"五华区","value":"530102"},{"label":"盘龙区","value":"530103"},{"label":"官渡区","value":"530111"},{"label":"西山区","value":"530112"},{"label":"东川区","value":"530113"},{"label":"呈贡区","value":"530114"},{"label":"晋宁区","value":"530115"},{"label":"富民县","value":"530124"},{"label":"宜良县","value":"530125"},{"label":"石林彝族自治县","value":"530126"},{"label":"嵩明县","value":"530127"},{"label":"禄劝彝族苗族自治县","value":"530128"},{"label":"寻甸回族彝族自治县","value":"530129"},{"label":"安宁市","value":"530181"}],[{"label":"麒麟区","value":"530302"},{"label":"沾益区","value":"530303"},{"label":"马龙县","value":"530321"},{"label":"陆良县","value":"530322"},{"label":"师宗县","value":"530323"},{"label":"罗平县","value":"530324"},{"label":"富源县","value":"530325"},{"label":"会泽县","value":"530326"},{"label":"宣威市","value":"530381"}],[{"label":"红塔区","value":"530402"},{"label":"江川区","value":"530403"},{"label":"澄江县","value":"530422"},{"label":"通海县","value":"530423"},{"label":"华宁县","value":"530424"},{"label":"易门县","value":"530425"},{"label":"峨山彝族自治县","value":"530426"},{"label":"新平彝族傣族自治县","value":"530427"},{"label":"元江哈尼族彝族傣族自治县","value":"530428"}],[{"label":"隆阳区","value":"530502"},{"label":"施甸县","value":"530521"},{"label":"龙陵县","value":"530523"},{"label":"昌宁县","value":"530524"},{"label":"腾冲市","value":"530581"}],[{"label":"昭阳区","value":"530602"},{"label":"鲁甸县","value":"530621"},{"label":"巧家县","value":"530622"},{"label":"盐津县","value":"530623"},{"label":"大关县","value":"530624"},{"label":"永善县","value":"530625"},{"label":"绥江县","value":"530626"},{"label":"镇雄县","value":"530627"},{"label":"彝良县","value":"530628"},{"label":"威信县","value":"530629"},{"label":"水富县","value":"530630"}],[{"label":"古城区","value":"530702"},{"label":"玉龙纳西族自治县","value":"530721"},{"label":"永胜县","value":"530722"},{"label":"华坪县","value":"530723"},{"label":"宁蒗彝族自治县","value":"530724"}],[{"label":"思茅区","value":"530802"},{"label":"宁洱哈尼族彝族自治县","value":"530821"},{"label":"墨江哈尼族自治县","value":"530822"},{"label":"景东彝族自治县","value":"530823"},{"label":"景谷傣族彝族自治县","value":"530824"},{"label":"镇沅彝族哈尼族拉祜族自治县","value":"530825"},{"label":"江城哈尼族彝族自治县","value":"530826"},{"label":"孟连傣族拉祜族佤族自治县","value":"530827"},{"label":"澜沧拉祜族自治县","value":"530828"},{"label":"西盟佤族自治县","value":"530829"}],[{"label":"临翔区","value":"530902"},{"label":"凤庆县","value":"530921"},{"label":"云县","value":"530922"},{"label":"永德县","value":"530923"},{"label":"镇康县","value":"530924"},{"label":"双江拉祜族佤族布朗族傣族自治县","value":"530925"},{"label":"耿马傣族佤族自治县","value":"530926"},{"label":"沧源佤族自治县","value":"530927"}],[{"label":"楚雄市","value":"532301"},{"label":"双柏县","value":"532322"},{"label":"牟定县","value":"532323"},{"label":"南华县","value":"532324"},{"label":"姚安县","value":"532325"},{"label":"大姚县","value":"532326"},{"label":"永仁县","value":"532327"},{"label":"元谋县","value":"532328"},{"label":"武定县","value":"532329"},{"label":"禄丰县","value":"532331"}],[{"label":"个旧市","value":"532501"},{"label":"开远市","value":"532502"},{"label":"蒙自市","value":"532503"},{"label":"弥勒市","value":"532504"},{"label":"屏边苗族自治县","value":"532523"},{"label":"建水县","value":"532524"},{"label":"石屏县","value":"532525"},{"label":"泸西县","value":"532527"},{"label":"元阳县","value":"532528"},{"label":"红河县","value":"532529"},{"label":"金平苗族瑶族傣族自治县","value":"532530"},{"label":"绿春县","value":"532531"},{"label":"河口瑶族自治县","value":"532532"}],[{"label":"文山市","value":"532601"},{"label":"砚山县","value":"532622"},{"label":"西畴县","value":"532623"},{"label":"麻栗坡县","value":"532624"},{"label":"马关县","value":"532625"},{"label":"丘北县","value":"532626"},{"label":"广南县","value":"532627"},{"label":"富宁县","value":"532628"}],[{"label":"景洪市","value":"532801"},{"label":"勐海县","value":"532822"},{"label":"勐腊县","value":"532823"}],[{"label":"大理市","value":"532901"},{"label":"漾濞彝族自治县","value":"532922"},{"label":"祥云县","value":"532923"},{"label":"宾川县","value":"532924"},{"label":"弥渡县","value":"532925"},{"label":"南涧彝族自治县","value":"532926"},{"label":"巍山彝族回族自治县","value":"532927"},{"label":"永平县","value":"532928"},{"label":"云龙县","value":"532929"},{"label":"洱源县","value":"532930"},{"label":"剑川县","value":"532931"},{"label":"鹤庆县","value":"532932"}],[{"label":"瑞丽市","value":"533102"},{"label":"芒市","value":"533103"},{"label":"梁河县","value":"533122"},{"label":"盈江县","value":"533123"},{"label":"陇川县","value":"533124"}],[{"label":"泸水市","value":"533301"},{"label":"福贡县","value":"533323"},{"label":"贡山独龙族怒族自治县","value":"533324"},{"label":"兰坪白族普米族自治县","value":"533325"}],[{"label":"香格里拉市","value":"533401"},{"label":"德钦县","value":"533422"},{"label":"维西傈僳族自治县","value":"533423"}]],[[{"label":"城关区","value":"540102"},{"label":"堆龙德庆区","value":"540103"},{"label":"林周县","value":"540121"},{"label":"当雄县","value":"540122"},{"label":"尼木县","value":"540123"},{"label":"曲水县","value":"540124"},{"label":"达孜县","value":"540126"},{"label":"墨竹工卡县","value":"540127"},{"label":"格尔木藏青工业园区","value":"540171"},{"label":"拉萨经济技术开发区","value":"540172"},{"label":"西藏文化旅游创意园区","value":"540173"},{"label":"达孜工业园区","value":"540174"}],[{"label":"桑珠孜区","value":"540202"},{"label":"南木林县","value":"540221"},{"label":"江孜县","value":"540222"},{"label":"定日县","value":"540223"},{"label":"萨迦县","value":"540224"},{"label":"拉孜县","value":"540225"},{"label":"昂仁县","value":"540226"},{"label":"谢通门县","value":"540227"},{"label":"白朗县","value":"540228"},{"label":"仁布县","value":"540229"},{"label":"康马县","value":"540230"},{"label":"定结县","value":"540231"},{"label":"仲巴县","value":"540232"},{"label":"亚东县","value":"540233"},{"label":"吉隆县","value":"540234"},{"label":"聂拉木县","value":"540235"},{"label":"萨嘎县","value":"540236"},{"label":"岗巴县","value":"540237"}],[{"label":"卡若区","value":"540302"},{"label":"江达县","value":"540321"},{"label":"贡觉县","value":"540322"},{"label":"类乌齐县","value":"540323"},{"label":"丁青县","value":"540324"},{"label":"察雅县","value":"540325"},{"label":"八宿县","value":"540326"},{"label":"左贡县","value":"540327"},{"label":"芒康县","value":"540328"},{"label":"洛隆县","value":"540329"},{"label":"边坝县","value":"540330"}],[{"label":"巴宜区","value":"540402"},{"label":"工布江达县","value":"540421"},{"label":"米林县","value":"540422"},{"label":"墨脱县","value":"540423"},{"label":"波密县","value":"540424"},{"label":"察隅县","value":"540425"},{"label":"朗县","value":"540426"}],[{"label":"乃东区","value":"540502"},{"label":"扎囊县","value":"540521"},{"label":"贡嘎县","value":"540522"},{"label":"桑日县","value":"540523"},{"label":"琼结县","value":"540524"},{"label":"曲松县","value":"540525"},{"label":"措美县","value":"540526"},{"label":"洛扎县","value":"540527"},{"label":"加查县","value":"540528"},{"label":"隆子县","value":"540529"},{"label":"错那县","value":"540530"},{"label":"浪卡子县","value":"540531"}],[{"label":"那曲县","value":"542421"},{"label":"嘉黎县","value":"542422"},{"label":"比如县","value":"542423"},{"label":"聂荣县","value":"542424"},{"label":"安多县","value":"542425"},{"label":"申扎县","value":"542426"},{"label":"索县","value":"542427"},{"label":"班戈县","value":"542428"},{"label":"巴青县","value":"542429"},{"label":"尼玛县","value":"542430"},{"label":"双湖县","value":"542431"}],[{"label":"普兰县","value":"542521"},{"label":"札达县","value":"542522"},{"label":"噶尔县","value":"542523"},{"label":"日土县","value":"542524"},{"label":"革吉县","value":"542525"},{"label":"改则县","value":"542526"},{"label":"措勤县","value":"542527"}]],[[{"label":"新城区","value":"610102"},{"label":"碑林区","value":"610103"},{"label":"莲湖区","value":"610104"},{"label":"灞桥区","value":"610111"},{"label":"未央区","value":"610112"},{"label":"雁塔区","value":"610113"},{"label":"阎良区","value":"610114"},{"label":"临潼区","value":"610115"},{"label":"长安区","value":"610116"},{"label":"高陵区","value":"610117"},{"label":"鄠邑区","value":"610118"},{"label":"蓝田县","value":"610122"},{"label":"周至县","value":"610124"}],[{"label":"王益区","value":"610202"},{"label":"印台区","value":"610203"},{"label":"耀州区","value":"610204"},{"label":"宜君县","value":"610222"}],[{"label":"渭滨区","value":"610302"},{"label":"金台区","value":"610303"},{"label":"陈仓区","value":"610304"},{"label":"凤翔县","value":"610322"},{"label":"岐山县","value":"610323"},{"label":"扶风县","value":"610324"},{"label":"眉县","value":"610326"},{"label":"陇县","value":"610327"},{"label":"千阳县","value":"610328"},{"label":"麟游县","value":"610329"},{"label":"凤县","value":"610330"},{"label":"太白县","value":"610331"}],[{"label":"秦都区","value":"610402"},{"label":"杨陵区","value":"610403"},{"label":"渭城区","value":"610404"},{"label":"三原县","value":"610422"},{"label":"泾阳县","value":"610423"},{"label":"乾县","value":"610424"},{"label":"礼泉县","value":"610425"},{"label":"永寿县","value":"610426"},{"label":"彬县","value":"610427"},{"label":"长武县","value":"610428"},{"label":"旬邑县","value":"610429"},{"label":"淳化县","value":"610430"},{"label":"武功县","value":"610431"},{"label":"兴平市","value":"610481"}],[{"label":"临渭区","value":"610502"},{"label":"华州区","value":"610503"},{"label":"潼关县","value":"610522"},{"label":"大荔县","value":"610523"},{"label":"合阳县","value":"610524"},{"label":"澄城县","value":"610525"},{"label":"蒲城县","value":"610526"},{"label":"白水县","value":"610527"},{"label":"富平县","value":"610528"},{"label":"韩城市","value":"610581"},{"label":"华阴市","value":"610582"}],[{"label":"宝塔区","value":"610602"},{"label":"安塞区","value":"610603"},{"label":"延长县","value":"610621"},{"label":"延川县","value":"610622"},{"label":"子长县","value":"610623"},{"label":"志丹县","value":"610625"},{"label":"吴起县","value":"610626"},{"label":"甘泉县","value":"610627"},{"label":"富县","value":"610628"},{"label":"洛川县","value":"610629"},{"label":"宜川县","value":"610630"},{"label":"黄龙县","value":"610631"},{"label":"黄陵县","value":"610632"}],[{"label":"汉台区","value":"610702"},{"label":"南郑区","value":"610703"},{"label":"城固县","value":"610722"},{"label":"洋县","value":"610723"},{"label":"西乡县","value":"610724"},{"label":"勉县","value":"610725"},{"label":"宁强县","value":"610726"},{"label":"略阳县","value":"610727"},{"label":"镇巴县","value":"610728"},{"label":"留坝县","value":"610729"},{"label":"佛坪县","value":"610730"}],[{"label":"榆阳区","value":"610802"},{"label":"横山区","value":"610803"},{"label":"府谷县","value":"610822"},{"label":"靖边县","value":"610824"},{"label":"定边县","value":"610825"},{"label":"绥德县","value":"610826"},{"label":"米脂县","value":"610827"},{"label":"佳县","value":"610828"},{"label":"吴堡县","value":"610829"},{"label":"清涧县","value":"610830"},{"label":"子洲县","value":"610831"},{"label":"神木市","value":"610881"}],[{"label":"汉滨区","value":"610902"},{"label":"汉阴县","value":"610921"},{"label":"石泉县","value":"610922"},{"label":"宁陕县","value":"610923"},{"label":"紫阳县","value":"610924"},{"label":"岚皋县","value":"610925"},{"label":"平利县","value":"610926"},{"label":"镇坪县","value":"610927"},{"label":"旬阳县","value":"610928"},{"label":"白河县","value":"610929"}],[{"label":"商州区","value":"611002"},{"label":"洛南县","value":"611021"},{"label":"丹凤县","value":"611022"},{"label":"商南县","value":"611023"},{"label":"山阳县","value":"611024"},{"label":"镇安县","value":"611025"},{"label":"柞水县","value":"611026"}]],[[{"label":"城关区","value":"620102"},{"label":"七里河区","value":"620103"},{"label":"西固区","value":"620104"},{"label":"安宁区","value":"620105"},{"label":"红古区","value":"620111"},{"label":"永登县","value":"620121"},{"label":"皋兰县","value":"620122"},{"label":"榆中县","value":"620123"},{"label":"兰州新区","value":"620171"}],[{"label":"嘉峪关市","value":"620201"}],[{"label":"金川区","value":"620302"},{"label":"永昌县","value":"620321"}],[{"label":"白银区","value":"620402"},{"label":"平川区","value":"620403"},{"label":"靖远县","value":"620421"},{"label":"会宁县","value":"620422"},{"label":"景泰县","value":"620423"}],[{"label":"秦州区","value":"620502"},{"label":"麦积区","value":"620503"},{"label":"清水县","value":"620521"},{"label":"秦安县","value":"620522"},{"label":"甘谷县","value":"620523"},{"label":"武山县","value":"620524"},{"label":"张家川回族自治县","value":"620525"}],[{"label":"凉州区","value":"620602"},{"label":"民勤县","value":"620621"},{"label":"古浪县","value":"620622"},{"label":"天祝藏族自治县","value":"620623"}],[{"label":"甘州区","value":"620702"},{"label":"肃南裕固族自治县","value":"620721"},{"label":"民乐县","value":"620722"},{"label":"临泽县","value":"620723"},{"label":"高台县","value":"620724"},{"label":"山丹县","value":"620725"}],[{"label":"崆峒区","value":"620802"},{"label":"泾川县","value":"620821"},{"label":"灵台县","value":"620822"},{"label":"崇信县","value":"620823"},{"label":"华亭县","value":"620824"},{"label":"庄浪县","value":"620825"},{"label":"静宁县","value":"620826"},{"label":"平凉工业园区","value":"620871"}],[{"label":"肃州区","value":"620902"},{"label":"金塔县","value":"620921"},{"label":"瓜州县","value":"620922"},{"label":"肃北蒙古族自治县","value":"620923"},{"label":"阿克塞哈萨克族自治县","value":"620924"},{"label":"玉门市","value":"620981"},{"label":"敦煌市","value":"620982"}],[{"label":"西峰区","value":"621002"},{"label":"庆城县","value":"621021"},{"label":"环县","value":"621022"},{"label":"华池县","value":"621023"},{"label":"合水县","value":"621024"},{"label":"正宁县","value":"621025"},{"label":"宁县","value":"621026"},{"label":"镇原县","value":"621027"}],[{"label":"安定区","value":"621102"},{"label":"通渭县","value":"621121"},{"label":"陇西县","value":"621122"},{"label":"渭源县","value":"621123"},{"label":"临洮县","value":"621124"},{"label":"漳县","value":"621125"},{"label":"岷县","value":"621126"}],[{"label":"武都区","value":"621202"},{"label":"成县","value":"621221"},{"label":"文县","value":"621222"},{"label":"宕昌县","value":"621223"},{"label":"康县","value":"621224"},{"label":"西和县","value":"621225"},{"label":"礼县","value":"621226"},{"label":"徽县","value":"621227"},{"label":"两当县","value":"621228"}],[{"label":"临夏市","value":"622901"},{"label":"临夏县","value":"622921"},{"label":"康乐县","value":"622922"},{"label":"永靖县","value":"622923"},{"label":"广河县","value":"622924"},{"label":"和政县","value":"622925"},{"label":"东乡族自治县","value":"622926"},{"label":"积石山保安族东乡族撒拉族自治县","value":"622927"}],[{"label":"合作市","value":"623001"},{"label":"临潭县","value":"623021"},{"label":"卓尼县","value":"623022"},{"label":"舟曲县","value":"623023"},{"label":"迭部县","value":"623024"},{"label":"玛曲县","value":"623025"},{"label":"碌曲县","value":"623026"},{"label":"夏河县","value":"623027"}]],[[{"label":"城东区","value":"630102"},{"label":"城中区","value":"630103"},{"label":"城西区","value":"630104"},{"label":"城北区","value":"630105"},{"label":"大通回族土族自治县","value":"630121"},{"label":"湟中县","value":"630122"},{"label":"湟源县","value":"630123"}],[{"label":"乐都区","value":"630202"},{"label":"平安区","value":"630203"},{"label":"民和回族土族自治县","value":"630222"},{"label":"互助土族自治县","value":"630223"},{"label":"化隆回族自治县","value":"630224"},{"label":"循化撒拉族自治县","value":"630225"}],[{"label":"门源回族自治县","value":"632221"},{"label":"祁连县","value":"632222"},{"label":"海晏县","value":"632223"},{"label":"刚察县","value":"632224"}],[{"label":"同仁县","value":"632321"},{"label":"尖扎县","value":"632322"},{"label":"泽库县","value":"632323"},{"label":"河南蒙古族自治县","value":"632324"}],[{"label":"共和县","value":"632521"},{"label":"同德县","value":"632522"},{"label":"贵德县","value":"632523"},{"label":"兴海县","value":"632524"},{"label":"贵南县","value":"632525"}],[{"label":"玛沁县","value":"632621"},{"label":"班玛县","value":"632622"},{"label":"甘德县","value":"632623"},{"label":"达日县","value":"632624"},{"label":"久治县","value":"632625"},{"label":"玛多县","value":"632626"}],[{"label":"玉树市","value":"632701"},{"label":"杂多县","value":"632722"},{"label":"称多县","value":"632723"},{"label":"治多县","value":"632724"},{"label":"囊谦县","value":"632725"},{"label":"曲麻莱县","value":"632726"}],[{"label":"格尔木市","value":"632801"},{"label":"德令哈市","value":"632802"},{"label":"乌兰县","value":"632821"},{"label":"都兰县","value":"632822"},{"label":"天峻县","value":"632823"},{"label":"大柴旦行政委员会","value":"632857"},{"label":"冷湖行政委员会","value":"632858"},{"label":"茫崖行政委员会","value":"632859"}]],[[{"label":"兴庆区","value":"640104"},{"label":"西夏区","value":"640105"},{"label":"金凤区","value":"640106"},{"label":"永宁县","value":"640121"},{"label":"贺兰县","value":"640122"},{"label":"灵武市","value":"640181"}],[{"label":"大武口区","value":"640202"},{"label":"惠农区","value":"640205"},{"label":"平罗县","value":"640221"}],[{"label":"利通区","value":"640302"},{"label":"红寺堡区","value":"640303"},{"label":"盐池县","value":"640323"},{"label":"同心县","value":"640324"},{"label":"青铜峡市","value":"640381"}],[{"label":"原州区","value":"640402"},{"label":"西吉县","value":"640422"},{"label":"隆德县","value":"640423"},{"label":"泾源县","value":"640424"},{"label":"彭阳县","value":"640425"}],[{"label":"沙坡头区","value":"640502"},{"label":"中宁县","value":"640521"},{"label":"海原县","value":"640522"}]],[[{"label":"天山区","value":"650102"},{"label":"沙依巴克区","value":"650103"},{"label":"新市区","value":"650104"},{"label":"水磨沟区","value":"650105"},{"label":"头屯河区","value":"650106"},{"label":"达坂城区","value":"650107"},{"label":"米东区","value":"650109"},{"label":"乌鲁木齐县","value":"650121"},{"label":"乌鲁木齐经济技术开发区","value":"650171"},{"label":"乌鲁木齐高新技术产业开发区","value":"650172"}],[{"label":"独山子区","value":"650202"},{"label":"克拉玛依区","value":"650203"},{"label":"白碱滩区","value":"650204"},{"label":"乌尔禾区","value":"650205"}],[{"label":"高昌区","value":"650402"},{"label":"鄯善县","value":"650421"},{"label":"托克逊县","value":"650422"}],[{"label":"伊州区","value":"650502"},{"label":"巴里坤哈萨克自治县","value":"650521"},{"label":"伊吾县","value":"650522"}],[{"label":"昌吉市","value":"652301"},{"label":"阜康市","value":"652302"},{"label":"呼图壁县","value":"652323"},{"label":"玛纳斯县","value":"652324"},{"label":"奇台县","value":"652325"},{"label":"吉木萨尔县","value":"652327"},{"label":"木垒哈萨克自治县","value":"652328"}],[{"label":"博乐市","value":"652701"},{"label":"阿拉山口市","value":"652702"},{"label":"精河县","value":"652722"},{"label":"温泉县","value":"652723"}],[{"label":"库尔勒市","value":"652801"},{"label":"轮台县","value":"652822"},{"label":"尉犁县","value":"652823"},{"label":"若羌县","value":"652824"},{"label":"且末县","value":"652825"},{"label":"焉耆回族自治县","value":"652826"},{"label":"和静县","value":"652827"},{"label":"和硕县","value":"652828"},{"label":"博湖县","value":"652829"},{"label":"库尔勒经济技术开发区","value":"652871"}],[{"label":"阿克苏市","value":"652901"},{"label":"温宿县","value":"652922"},{"label":"库车县","value":"652923"},{"label":"沙雅县","value":"652924"},{"label":"新和县","value":"652925"},{"label":"拜城县","value":"652926"},{"label":"乌什县","value":"652927"},{"label":"阿瓦提县","value":"652928"},{"label":"柯坪县","value":"652929"}],[{"label":"阿图什市","value":"653001"},{"label":"阿克陶县","value":"653022"},{"label":"阿合奇县","value":"653023"},{"label":"乌恰县","value":"653024"}],[{"label":"喀什市","value":"653101"},{"label":"疏附县","value":"653121"},{"label":"疏勒县","value":"653122"},{"label":"英吉沙县","value":"653123"},{"label":"泽普县","value":"653124"},{"label":"莎车县","value":"653125"},{"label":"叶城县","value":"653126"},{"label":"麦盖提县","value":"653127"},{"label":"岳普湖县","value":"653128"},{"label":"伽师县","value":"653129"},{"label":"巴楚县","value":"653130"},{"label":"塔什库尔干塔吉克自治县","value":"653131"}],[{"label":"和田市","value":"653201"},{"label":"和田县","value":"653221"},{"label":"墨玉县","value":"653222"},{"label":"皮山县","value":"653223"},{"label":"洛浦县","value":"653224"},{"label":"策勒县","value":"653225"},{"label":"于田县","value":"653226"},{"label":"民丰县","value":"653227"}],[{"label":"伊宁市","value":"654002"},{"label":"奎屯市","value":"654003"},{"label":"霍尔果斯市","value":"654004"},{"label":"伊宁县","value":"654021"},{"label":"察布查尔锡伯自治县","value":"654022"},{"label":"霍城县","value":"654023"},{"label":"巩留县","value":"654024"},{"label":"新源县","value":"654025"},{"label":"昭苏县","value":"654026"},{"label":"特克斯县","value":"654027"},{"label":"尼勒克县","value":"654028"}],[{"label":"塔城市","value":"654201"},{"label":"乌苏市","value":"654202"},{"label":"额敏县","value":"654221"},{"label":"沙湾县","value":"654223"},{"label":"托里县","value":"654224"},{"label":"裕民县","value":"654225"},{"label":"和布克赛尔蒙古自治县","value":"654226"}],[{"label":"阿勒泰市","value":"654301"},{"label":"布尔津县","value":"654321"},{"label":"富蕴县","value":"654322"},{"label":"福海县","value":"654323"},{"label":"哈巴河县","value":"654324"},{"label":"青河县","value":"654325"},{"label":"吉木乃县","value":"654326"}],[{"label":"石河子市","value":"659001"},{"label":"阿拉尔市","value":"659002"},{"label":"图木舒克市","value":"659003"},{"label":"五家渠市","value":"659004"},{"label":"铁门关市","value":"659006"}]],[[{"label":"台北","value":"660101"}],[{"label":"高雄","value":"660201"}],[{"label":"基隆","value":"660301"}],[{"label":"台中","value":"660401"}],[{"label":"台南","value":"660501"}],[{"label":"新竹","value":"660601"}],[{"label":"嘉义","value":"660701"}],[{"label":"宜兰","value":"660801"}],[{"label":"桃园","value":"660901"}],[{"label":"苗栗","value":"661001"}],[{"label":"彰化","value":"661101"}],[{"label":"南投","value":"661201"}],[{"label":"云林","value":"661301"}],[{"label":"屏东","value":"661401"}],[{"label":"台东","value":"661501"}],[{"label":"花莲","value":"661601"}],[{"label":"澎湖","value":"661701"}]],[[{"label":"香港岛","value":"670101"}],[{"label":"九龙","value":"670201"}],[{"label":"新界","value":"670301"}]],[[{"label":"澳门半岛","value":"680101"}],[{"label":"氹仔岛","value":"680201"}],[{"label":"路环岛","value":"680301"}],[{"label":"路氹城","value":"680401"}]]];export default areaData; \ No newline at end of file diff --git a/common/city.js b/common/city.js new file mode 100644 index 0000000..94169eb --- /dev/null +++ b/common/city.js @@ -0,0 +1 @@ +var cityData=[[{"label":"市辖区","value":"1101"}],[{"label":"市辖区","value":"1201"}],[{"label":"石家庄市","value":"1301"},{"label":"唐山市","value":"1302"},{"label":"秦皇岛市","value":"1303"},{"label":"邯郸市","value":"1304"},{"label":"邢台市","value":"1305"},{"label":"保定市","value":"1306"},{"label":"张家口市","value":"1307"},{"label":"承德市","value":"1308"},{"label":"沧州市","value":"1309"},{"label":"廊坊市","value":"1310"},{"label":"衡水市","value":"1311"}],[{"label":"太原市","value":"1401"},{"label":"大同市","value":"1402"},{"label":"阳泉市","value":"1403"},{"label":"长治市","value":"1404"},{"label":"晋城市","value":"1405"},{"label":"朔州市","value":"1406"},{"label":"晋中市","value":"1407"},{"label":"运城市","value":"1408"},{"label":"忻州市","value":"1409"},{"label":"临汾市","value":"1410"},{"label":"吕梁市","value":"1411"}],[{"label":"呼和浩特市","value":"1501"},{"label":"包头市","value":"1502"},{"label":"乌海市","value":"1503"},{"label":"赤峰市","value":"1504"},{"label":"通辽市","value":"1505"},{"label":"鄂尔多斯市","value":"1506"},{"label":"呼伦贝尔市","value":"1507"},{"label":"巴彦淖尔市","value":"1508"},{"label":"乌兰察布市","value":"1509"},{"label":"兴安盟","value":"1522"},{"label":"锡林郭勒盟","value":"1525"},{"label":"阿拉善盟","value":"1529"}],[{"label":"沈阳市","value":"2101"},{"label":"大连市","value":"2102"},{"label":"鞍山市","value":"2103"},{"label":"抚顺市","value":"2104"},{"label":"本溪市","value":"2105"},{"label":"丹东市","value":"2106"},{"label":"锦州市","value":"2107"},{"label":"营口市","value":"2108"},{"label":"阜新市","value":"2109"},{"label":"辽阳市","value":"2110"},{"label":"盘锦市","value":"2111"},{"label":"铁岭市","value":"2112"},{"label":"朝阳市","value":"2113"},{"label":"葫芦岛市","value":"2114"}],[{"label":"长春市","value":"2201"},{"label":"吉林市","value":"2202"},{"label":"四平市","value":"2203"},{"label":"辽源市","value":"2204"},{"label":"通化市","value":"2205"},{"label":"白山市","value":"2206"},{"label":"松原市","value":"2207"},{"label":"白城市","value":"2208"},{"label":"延边朝鲜族自治州","value":"2224"}],[{"label":"哈尔滨市","value":"2301"},{"label":"齐齐哈尔市","value":"2302"},{"label":"鸡西市","value":"2303"},{"label":"鹤岗市","value":"2304"},{"label":"双鸭山市","value":"2305"},{"label":"大庆市","value":"2306"},{"label":"伊春市","value":"2307"},{"label":"佳木斯市","value":"2308"},{"label":"七台河市","value":"2309"},{"label":"牡丹江市","value":"2310"},{"label":"黑河市","value":"2311"},{"label":"绥化市","value":"2312"},{"label":"大兴安岭地区","value":"2327"}],[{"label":"市辖区","value":"3101"}],[{"label":"南京市","value":"3201"},{"label":"无锡市","value":"3202"},{"label":"徐州市","value":"3203"},{"label":"常州市","value":"3204"},{"label":"苏州市","value":"3205"},{"label":"南通市","value":"3206"},{"label":"连云港市","value":"3207"},{"label":"淮安市","value":"3208"},{"label":"盐城市","value":"3209"},{"label":"扬州市","value":"3210"},{"label":"镇江市","value":"3211"},{"label":"泰州市","value":"3212"},{"label":"宿迁市","value":"3213"}],[{"label":"杭州市","value":"3301"},{"label":"宁波市","value":"3302"},{"label":"温州市","value":"3303"},{"label":"嘉兴市","value":"3304"},{"label":"湖州市","value":"3305"},{"label":"绍兴市","value":"3306"},{"label":"金华市","value":"3307"},{"label":"衢州市","value":"3308"},{"label":"舟山市","value":"3309"},{"label":"台州市","value":"3310"},{"label":"丽水市","value":"3311"}],[{"label":"合肥市","value":"3401"},{"label":"芜湖市","value":"3402"},{"label":"蚌埠市","value":"3403"},{"label":"淮南市","value":"3404"},{"label":"马鞍山市","value":"3405"},{"label":"淮北市","value":"3406"},{"label":"铜陵市","value":"3407"},{"label":"安庆市","value":"3408"},{"label":"黄山市","value":"3410"},{"label":"滁州市","value":"3411"},{"label":"阜阳市","value":"3412"},{"label":"宿州市","value":"3413"},{"label":"六安市","value":"3415"},{"label":"亳州市","value":"3416"},{"label":"池州市","value":"3417"},{"label":"宣城市","value":"3418"}],[{"label":"福州市","value":"3501"},{"label":"厦门市","value":"3502"},{"label":"莆田市","value":"3503"},{"label":"三明市","value":"3504"},{"label":"泉州市","value":"3505"},{"label":"漳州市","value":"3506"},{"label":"南平市","value":"3507"},{"label":"龙岩市","value":"3508"},{"label":"宁德市","value":"3509"}],[{"label":"南昌市","value":"3601"},{"label":"景德镇市","value":"3602"},{"label":"萍乡市","value":"3603"},{"label":"九江市","value":"3604"},{"label":"新余市","value":"3605"},{"label":"鹰潭市","value":"3606"},{"label":"赣州市","value":"3607"},{"label":"吉安市","value":"3608"},{"label":"宜春市","value":"3609"},{"label":"抚州市","value":"3610"},{"label":"上饶市","value":"3611"}],[{"label":"济南市","value":"3701"},{"label":"青岛市","value":"3702"},{"label":"淄博市","value":"3703"},{"label":"枣庄市","value":"3704"},{"label":"东营市","value":"3705"},{"label":"烟台市","value":"3706"},{"label":"潍坊市","value":"3707"},{"label":"济宁市","value":"3708"},{"label":"泰安市","value":"3709"},{"label":"威海市","value":"3710"},{"label":"日照市","value":"3711"},{"label":"莱芜市","value":"3712"},{"label":"临沂市","value":"3713"},{"label":"德州市","value":"3714"},{"label":"聊城市","value":"3715"},{"label":"滨州市","value":"3716"},{"label":"菏泽市","value":"3717"}],[{"label":"郑州市","value":"4101"},{"label":"开封市","value":"4102"},{"label":"洛阳市","value":"4103"},{"label":"平顶山市","value":"4104"},{"label":"安阳市","value":"4105"},{"label":"鹤壁市","value":"4106"},{"label":"新乡市","value":"4107"},{"label":"焦作市","value":"4108"},{"label":"濮阳市","value":"4109"},{"label":"许昌市","value":"4110"},{"label":"漯河市","value":"4111"},{"label":"三门峡市","value":"4112"},{"label":"南阳市","value":"4113"},{"label":"商丘市","value":"4114"},{"label":"信阳市","value":"4115"},{"label":"周口市","value":"4116"},{"label":"驻马店市","value":"4117"},{"label":"省直辖县级行政区划","value":"4190"}],[{"label":"武汉市","value":"4201"},{"label":"黄石市","value":"4202"},{"label":"十堰市","value":"4203"},{"label":"宜昌市","value":"4205"},{"label":"襄阳市","value":"4206"},{"label":"鄂州市","value":"4207"},{"label":"荆门市","value":"4208"},{"label":"孝感市","value":"4209"},{"label":"荆州市","value":"4210"},{"label":"黄冈市","value":"4211"},{"label":"咸宁市","value":"4212"},{"label":"随州市","value":"4213"},{"label":"恩施土家族苗族自治州","value":"4228"},{"label":"省直辖县级行政区划","value":"4290"}],[{"label":"长沙市","value":"4301"},{"label":"株洲市","value":"4302"},{"label":"湘潭市","value":"4303"},{"label":"衡阳市","value":"4304"},{"label":"邵阳市","value":"4305"},{"label":"岳阳市","value":"4306"},{"label":"常德市","value":"4307"},{"label":"张家界市","value":"4308"},{"label":"益阳市","value":"4309"},{"label":"郴州市","value":"4310"},{"label":"永州市","value":"4311"},{"label":"怀化市","value":"4312"},{"label":"娄底市","value":"4313"},{"label":"湘西土家族苗族自治州","value":"4331"}],[{"label":"广州市","value":"4401"},{"label":"韶关市","value":"4402"},{"label":"深圳市","value":"4403"},{"label":"珠海市","value":"4404"},{"label":"汕头市","value":"4405"},{"label":"佛山市","value":"4406"},{"label":"江门市","value":"4407"},{"label":"湛江市","value":"4408"},{"label":"茂名市","value":"4409"},{"label":"肇庆市","value":"4412"},{"label":"惠州市","value":"4413"},{"label":"梅州市","value":"4414"},{"label":"汕尾市","value":"4415"},{"label":"河源市","value":"4416"},{"label":"阳江市","value":"4417"},{"label":"清远市","value":"4418"},{"label":"东莞市","value":"4419"},{"label":"中山市","value":"4420"},{"label":"潮州市","value":"4451"},{"label":"揭阳市","value":"4452"},{"label":"云浮市","value":"4453"}],[{"label":"南宁市","value":"4501"},{"label":"柳州市","value":"4502"},{"label":"桂林市","value":"4503"},{"label":"梧州市","value":"4504"},{"label":"北海市","value":"4505"},{"label":"防城港市","value":"4506"},{"label":"钦州市","value":"4507"},{"label":"贵港市","value":"4508"},{"label":"玉林市","value":"4509"},{"label":"百色市","value":"4510"},{"label":"贺州市","value":"4511"},{"label":"河池市","value":"4512"},{"label":"来宾市","value":"4513"},{"label":"崇左市","value":"4514"}],[{"label":"海口市","value":"4601"},{"label":"三亚市","value":"4602"},{"label":"三沙市","value":"4603"},{"label":"儋州市","value":"4604"},{"label":"省直辖县级行政区划","value":"4690"}],[{"label":"市辖区","value":"5001"},{"label":"县","value":"5002"}],[{"label":"成都市","value":"5101"},{"label":"自贡市","value":"5103"},{"label":"攀枝花市","value":"5104"},{"label":"泸州市","value":"5105"},{"label":"德阳市","value":"5106"},{"label":"绵阳市","value":"5107"},{"label":"广元市","value":"5108"},{"label":"遂宁市","value":"5109"},{"label":"内江市","value":"5110"},{"label":"乐山市","value":"5111"},{"label":"南充市","value":"5113"},{"label":"眉山市","value":"5114"},{"label":"宜宾市","value":"5115"},{"label":"广安市","value":"5116"},{"label":"达州市","value":"5117"},{"label":"雅安市","value":"5118"},{"label":"巴中市","value":"5119"},{"label":"资阳市","value":"5120"},{"label":"阿坝藏族羌族自治州","value":"5132"},{"label":"甘孜藏族自治州","value":"5133"},{"label":"凉山彝族自治州","value":"5134"}],[{"label":"贵阳市","value":"5201"},{"label":"六盘水市","value":"5202"},{"label":"遵义市","value":"5203"},{"label":"安顺市","value":"5204"},{"label":"毕节市","value":"5205"},{"label":"铜仁市","value":"5206"},{"label":"黔西南布依族苗族自治州","value":"5223"},{"label":"黔东南苗族侗族自治州","value":"5226"},{"label":"黔南布依族苗族自治州","value":"5227"}],[{"label":"昆明市","value":"5301"},{"label":"曲靖市","value":"5303"},{"label":"玉溪市","value":"5304"},{"label":"保山市","value":"5305"},{"label":"昭通市","value":"5306"},{"label":"丽江市","value":"5307"},{"label":"普洱市","value":"5308"},{"label":"临沧市","value":"5309"},{"label":"楚雄彝族自治州","value":"5323"},{"label":"红河哈尼族彝族自治州","value":"5325"},{"label":"文山壮族苗族自治州","value":"5326"},{"label":"西双版纳傣族自治州","value":"5328"},{"label":"大理白族自治州","value":"5329"},{"label":"德宏傣族景颇族自治州","value":"5331"},{"label":"怒江傈僳族自治州","value":"5333"},{"label":"迪庆藏族自治州","value":"5334"}],[{"label":"拉萨市","value":"5401"},{"label":"日喀则市","value":"5402"},{"label":"昌都市","value":"5403"},{"label":"林芝市","value":"5404"},{"label":"山南市","value":"5405"},{"label":"那曲地区","value":"5424"},{"label":"阿里地区","value":"5425"}],[{"label":"西安市","value":"6101"},{"label":"铜川市","value":"6102"},{"label":"宝鸡市","value":"6103"},{"label":"咸阳市","value":"6104"},{"label":"渭南市","value":"6105"},{"label":"延安市","value":"6106"},{"label":"汉中市","value":"6107"},{"label":"榆林市","value":"6108"},{"label":"安康市","value":"6109"},{"label":"商洛市","value":"6110"}],[{"label":"兰州市","value":"6201"},{"label":"嘉峪关市","value":"6202"},{"label":"金昌市","value":"6203"},{"label":"白银市","value":"6204"},{"label":"天水市","value":"6205"},{"label":"武威市","value":"6206"},{"label":"张掖市","value":"6207"},{"label":"平凉市","value":"6208"},{"label":"酒泉市","value":"6209"},{"label":"庆阳市","value":"6210"},{"label":"定西市","value":"6211"},{"label":"陇南市","value":"6212"},{"label":"临夏回族自治州","value":"6229"},{"label":"甘南藏族自治州","value":"6230"}],[{"label":"西宁市","value":"6301"},{"label":"海东市","value":"6302"},{"label":"海北藏族自治州","value":"6322"},{"label":"黄南藏族自治州","value":"6323"},{"label":"海南藏族自治州","value":"6325"},{"label":"果洛藏族自治州","value":"6326"},{"label":"玉树藏族自治州","value":"6327"},{"label":"海西蒙古族藏族自治州","value":"6328"}],[{"label":"银川市","value":"6401"},{"label":"石嘴山市","value":"6402"},{"label":"吴忠市","value":"6403"},{"label":"固原市","value":"6404"},{"label":"中卫市","value":"6405"}],[{"label":"乌鲁木齐市","value":"6501"},{"label":"克拉玛依市","value":"6502"},{"label":"吐鲁番市","value":"6504"},{"label":"哈密市","value":"6505"},{"label":"昌吉回族自治州","value":"6523"},{"label":"博尔塔拉蒙古自治州","value":"6527"},{"label":"巴音郭楞蒙古自治州","value":"6528"},{"label":"阿克苏地区","value":"6529"},{"label":"克孜勒苏柯尔克孜自治州","value":"6530"},{"label":"喀什地区","value":"6531"},{"label":"和田地区","value":"6532"},{"label":"伊犁哈萨克自治州","value":"6540"},{"label":"塔城地区","value":"6542"},{"label":"阿勒泰地区","value":"6543"},{"label":"自治区直辖县级行政区划","value":"6590"}],[{"label":"台北","value":"6601"},{"label":"高雄","value":"6602"},{"label":"基隆","value":"6603"},{"label":"台中","value":"6604"},{"label":"台南","value":"6605"},{"label":"新竹","value":"6606"},{"label":"嘉义","value":"6607"},{"label":"宜兰","value":"6608"},{"label":"桃园","value":"6609"},{"label":"苗栗","value":"6610"},{"label":"彰化","value":"6611"},{"label":"南投","value":"6612"},{"label":"云林","value":"6613"},{"label":"屏东","value":"6614"},{"label":"台东","value":"6615"},{"label":"花莲","value":"6616"},{"label":"澎湖","value":"6617"}],[{"label":"香港岛","value":"6701"},{"label":"九龙","value":"6702"},{"label":"新界","value":"6703"}],[{"label":"澳门半岛","value":"6801"},{"label":"氹仔岛","value":"6802"},{"label":"路环岛","value":"6803"},{"label":"路氹城","value":"6804"}]];export default cityData; \ No newline at end of file diff --git a/common/classify.data.js b/common/classify.data.js new file mode 100644 index 0000000..cb4f75a --- /dev/null +++ b/common/classify.data.js @@ -0,0 +1,1087 @@ +export default[ + { + "name": "女装", + "foods": [ + { + "name": "A字裙", + "key": "A字裙", + "icon": "https://cdn.uviewui.com/uview/common/classify/1/1.jpg", + "cat": 10 + }, + { + "name": "T恤", + "key": "T恤", + "icon": "https://cdn.uviewui.com/uview/common/classify/1/2.jpg", + "cat": 10 + }, + { + "name": "半身裙", + "key": "半身裙", + "icon": "https://cdn.uviewui.com/uview/common/classify/1/3.jpg", + "cat": 10 + }, + { + "name": "衬衫", + "key": "衬衫", + "icon": "https://cdn.uviewui.com/uview/common/classify/1/4.jpg", + "cat": 10 + }, + { + "name": "短裙", + "key": "短裙", + "icon": "https://cdn.uviewui.com/uview/common/classify/1/5.jpg", + "cat": 10 + }, + { + "name": "阔腿裤", + "key": "阔腿裤", + "icon": "https://cdn.uviewui.com/uview/common/classify/1/6.jpg", + "cat": 10 + }, + { + "name": "连衣裙", + "key": "连衣裙", + "icon": "https://cdn.uviewui.com/uview/common/classify/1/7.jpg", + "cat": 10 + }, + { + "name": "妈妈装", + "key": "妈妈装", + "icon": "https://cdn.uviewui.com/uview/common/classify/1/8.jpg", + "cat": 10 + }, + { + "name": "牛仔裤", + "key": "牛仔裤", + "icon": "https://cdn.uviewui.com/uview/common/classify/1/9.jpg", + "cat": 10 + }, + { + "name": "情侣装", + "key": "情侣装", + "icon": "https://cdn.uviewui.com/uview/common/classify/1/10.jpg", + "cat": 10 + }, + { + "name": "休闲裤", + "key": "休闲裤", + "icon": "https://cdn.uviewui.com/uview/common/classify/1/11.jpg", + "cat": 10 + }, + { + "name": "雪纺衫", + "key": "雪纺衫", + "icon": "https://cdn.uviewui.com/uview/common/classify/1/12.jpg", + "cat": 10 + }, + { + "name": "防晒衣", + "key": "防晒衣", + "icon": "https://cdn.uviewui.com/uview/common/classify/1/13.jpg", + "cat": 10 + }, + { + "name": "礼服/婚纱", + "key": "礼服婚纱", + "icon": "https://cdn.uviewui.com/uview/common/classify/1/14.jpg", + "cat": 10 + } + ] + }, + { + "name": "美食", + "foods": [ + { + "name": "火锅", + "key": "火锅", + "icon": "https://cdn.uviewui.com/uview/common/classify/2/1.jpg", + "cat": 6 + }, + { + "name": "糕点饼干", + "key": "糕点饼干", + "icon": "https://cdn.uviewui.com/uview/common/classify/2/2.jpg", + "cat": 6 + }, + { + "name": "坚果果干", + "key": "坚果果干", + "icon": "https://cdn.uviewui.com/uview/common/classify/2/3.jpg", + "cat": 6 + }, + { + "name": "酒类", + "key": "酒类", + "icon": "https://cdn.uviewui.com/uview/common/classify/2/4.jpg", + "cat": 6 + }, + { + "name": "辣条", + "key": "辣条", + "icon": "https://cdn.uviewui.com/uview/common/classify/2/5.jpg", + "cat": 6 + }, + { + "name": "大礼包", + "key": "大礼包", + "icon": "https://cdn.uviewui.com/uview/common/classify/2/6.jpg", + "cat": 6 + }, + { + "name": "精品茗茶", + "key": "茶", + "icon": "https://cdn.uviewui.com/uview/common/classify/2/7.jpg", + "cat": 6 + }, + { + "name": "休闲食品", + "key": "休闲食品", + "icon": "https://cdn.uviewui.com/uview/common/classify/2/8.jpg", + "cat": 6 + }, + { + "name": "糖果巧克力", + "key": "糖果巧克力", + "icon": "https://cdn.uviewui.com/uview/common/classify/2/9.jpg", + "cat": 6 + }, + { + "name": "方便速食", + "key": "方便速食", + "icon": "https://cdn.uviewui.com/uview/common/classify/2/10.jpg", + "cat": 6 + }, + { + "name": "营养代餐", + "key": "营养代餐", + "icon": "https://cdn.uviewui.com/uview/common/classify/2/11.jpg", + "cat": 6 + }, + { + "name": "粮油副食", + "key": "粮油", + "icon": "https://cdn.uviewui.com/uview/common/classify/2/12.jpg", + "cat": 6 + }, + { + "name": "生鲜水果", + "key": "水果", + "icon": "https://cdn.uviewui.com/uview/common/classify/2/13.jpg", + "cat": 6 + }, + { + "name": "饮品", + "key": "饮品", + "icon": "https://cdn.uviewui.com/uview/common/classify/2/14.jpg", + "cat": 6 + } + ] + }, + { + "name": "美妆", + "foods": [ + { + "name": "化妆刷", + "key": "化妆刷", + "icon": "https://cdn.uviewui.com/uview/common/classify/3/1.jpg", + "cat": 3 + }, + { + "name": "粉底", + "key": "粉底", + "icon": "https://cdn.uviewui.com/uview/common/classify/3/2.jpg", + "cat": 3 + }, + { + "name": "洗发护发", + "key": "洗发护发", + "icon": "https://cdn.uviewui.com/uview/common/classify/3/3.jpg", + "cat": 3 + }, + { + "name": "美容工具", + "key": "美容工具", + "icon": "https://cdn.uviewui.com/uview/common/classify/3/4.jpg", + "cat": 3 + }, + { + "name": "眼部护理", + "key": "眼部护理", + "icon": "https://cdn.uviewui.com/uview/common/classify/3/5.jpg", + "cat": 3 + }, + { + "name": "眉妆", + "key": "眉妆", + "icon": "https://cdn.uviewui.com/uview/common/classify/3/6.jpg", + "cat": 3 + }, + { + "name": "卸妆品", + "key": "卸妆品", + "icon": "https://cdn.uviewui.com/uview/common/classify/3/7.jpg", + "cat": 3 + }, + { + "name": "基础护肤", + "key": "基础护肤", + "icon": "https://cdn.uviewui.com/uview/common/classify/3/8.jpg", + "cat": 3 + }, + { + "name": "眼妆", + "key": "眼妆", + "icon": "https://cdn.uviewui.com/uview/common/classify/3/9.jpg", + "cat": 3 + }, + { + "name": "唇妆", + "key": "唇妆", + "icon": "https://cdn.uviewui.com/uview/common/classify/3/10.jpg", + "cat": 3 + }, + { + "name": "面膜", + "key": "面膜", + "icon": "https://cdn.uviewui.com/uview/common/classify/3/11.jpg", + "cat": 3 + }, + { + "name": "沐浴用品", + "key": "沐浴用品", + "icon": "https://cdn.uviewui.com/uview/common/classify/3/12.jpg", + "cat": 3 + }, + { + "name": "护肤套装", + "key": "护肤套装", + "icon": "https://cdn.uviewui.com/uview/common/classify/3/13.jpg", + "cat": 3 + }, + { + "name": "防晒品", + "key": "防晒品", + "icon": "https://cdn.uviewui.com/uview/common/classify/3/14.jpg", + "cat": 3 + }, + { + "name": "美甲", + "key": "美甲", + "icon": "https://cdn.uviewui.com/uview/common/classify/3/15.jpg", + "cat": 3 + } + + ] + }, + { + "name": "居家日用", + "foods": [ + { + "name": "垃圾袋", + "key": "垃圾袋", + "icon": "https://cdn.uviewui.com/uview/common/classify/4/1.jpg", + "cat": 4 + }, + { + "name": "纸巾", + "key": "纸巾", + "icon": "https://cdn.uviewui.com/uview/common/classify/4/2.jpg", + "cat": 4 + }, + { + "name": "驱蚊用品", + "key": "驱蚊用品", + "icon": "https://cdn.uviewui.com/uview/common/classify/4/3.jpg", + "cat": 4 + }, + { + "name": "收纳神器", + "key": "收纳神器", + "icon": "https://cdn.uviewui.com/uview/common/classify/4/4.jpg", + "cat": 4 + }, + { + "name": "厨房用品", + "key": "厨房用品", + "icon": "https://cdn.uviewui.com/uview/common/classify/4/5.jpg", + "cat": 4 + }, + { + "name": "厨房烹饪", + "key": "烹饪", + "icon": "https://cdn.uviewui.com/uview/common/classify/4/6.jpg", + "cat": 4 + }, + { + "name": "衣物晾晒", + "key": "衣物晾晒", + "icon": "https://cdn.uviewui.com/uview/common/classify/4/7.jpg", + "cat": 4 + }, + { + "name": "衣物护理", + "key": "衣物护理", + "icon": "https://cdn.uviewui.com/uview/common/classify/4/8.jpg", + "cat": 4 + }, + { + "name": "宠物用品", + "key": "宠物用品", + "icon": "https://cdn.uviewui.com/uview/common/classify/4/9.jpg", + "cat": 4 + }, + { + "name": "医药保健", + "key": "医药", + "icon": "https://cdn.uviewui.com/uview/common/classify/4/10.jpg", + "cat": 4 + }, + { + "name": "日用百货", + "key": "百货", + "icon": "https://cdn.uviewui.com/uview/common/classify/4/11.jpg", + "cat": 4 + }, + { + "name": "清洁用品", + "key": "清洁", + "icon": "https://cdn.uviewui.com/uview/common/classify/4/12.jpg", + "cat": 4 + }, + { + "name": "绿植园艺", + "key": "绿植", + "icon": "https://cdn.uviewui.com/uview/common/classify/4/13.jpg", + "cat": 4 + } + ] + }, + { + "name": "男装", + "foods": [ + { + "name": "爸爸装", + "key": "爸爸装", + "icon": "https://cdn.uviewui.com/uview/common/classify/5/1.jpg", + "cat": 12 + }, + { + "name": "牛仔裤", + "key": "牛仔裤", + "icon": "https://cdn.uviewui.com/uview/common/classify/5/2.jpg", + "cat": 12 + }, + { + "name": "衬衫", + "key": "衬衫", + "icon": "https://cdn.uviewui.com/uview/common/classify/5/3.jpg", + "cat": 12 + }, + { + "name": "休闲裤", + "key": "休闲裤", + "icon": "https://cdn.uviewui.com/uview/common/classify/5/4.jpg", + "cat": 12 + }, + { + "name": "外套", + "key": "外套", + "icon": "https://cdn.uviewui.com/uview/common/classify/5/5.jpg", + "cat": 12 + }, + { + "name": "T恤", + "key": "T恤", + "icon": "https://cdn.uviewui.com/uview/common/classify/5/6.jpg", + "cat": 12 + }, + { + "name": "套装", + "key": "套装", + "icon": "https://cdn.uviewui.com/uview/common/classify/5/7.jpg", + "cat": 12 + }, + { + "name": "运动裤", + "key": "运动裤", + "icon": "https://cdn.uviewui.com/uview/common/classify/5/8.jpg", + "cat": 12 + }, + { + "name": "马甲/背心", + "key": "马甲背心", + "icon": "https://cdn.uviewui.com/uview/common/classify/5/9.jpg", + "cat": 12 + }, + { + "name": "POLO衫", + "key": "POLO衫", + "icon": "https://cdn.uviewui.com/uview/common/classify/5/10.jpg", + "cat": 12 + }, + { + "name": "商务装", + "key": "商务装", + "icon": "https://cdn.uviewui.com/uview/common/classify/5/11.jpg", + "cat": 12 + } + ] + }, + { + "name": "鞋品", + "foods": [ + { + "name": "单鞋", + "key": "单鞋", + "icon": "https://cdn.uviewui.com/uview/common/classify/6/1.jpg", + "cat": 5 + }, + { + "name": "皮鞋", + "key": "皮鞋", + "icon": "https://cdn.uviewui.com/uview/common/classify/6/2.jpg", + "cat": 5 + }, + { + "name": "帆布鞋", + "key": "帆布鞋", + "icon": "https://cdn.uviewui.com/uview/common/classify/6/3.jpg", + "cat": 5 + }, + { + "name": "北京老布鞋", + "key": "北京老布鞋", + "icon": "https://cdn.uviewui.com/uview/common/classify/6/4.jpg", + "cat": 5 + }, + { + "name": "运动鞋", + "key": "运动鞋", + "icon": "https://cdn.uviewui.com/uview/common/classify/6/5.jpg", + "cat": 5 + }, + { + "name": "拖鞋", + "key": "拖鞋", + "icon": "https://cdn.uviewui.com/uview/common/classify/6/6.jpg", + "cat": 5 + }, + { + "name": "凉鞋", + "key": "凉鞋", + "icon": "https://cdn.uviewui.com/uview/common/classify/6/7.jpg", + "cat": 5 + }, + { + "name": "休闲鞋", + "key": "休闲鞋", + "icon": "https://cdn.uviewui.com/uview/common/classify/6/8.jpg", + "cat": 5 + }, + { + "name": "高跟鞋", + "key": "高跟鞋", + "icon": "https://cdn.uviewui.com/uview/common/classify/6/9.jpg", + "cat": 5 + }, + { + "name": "老人鞋", + "key": "老人鞋", + "icon": "https://cdn.uviewui.com/uview/common/classify/6/10.jpg", + "cat": 5 + }, + { + "name": "懒人鞋", + "key": "懒人鞋", + "icon": "https://cdn.uviewui.com/uview/common/classify/6/11.jpg", + "cat": 5 + } + ] + }, + { + "name": "数码家电", + "foods": [ + { + "name": "数据线", + "key": "数据线", + "icon": "https://cdn.uviewui.com/uview/common/classify/7/1.jpg", + "cat": 8 + }, + { + "name": "耳机", + "key": "耳机", + "icon": "https://cdn.uviewui.com/uview/common/classify/7/2.jpg", + "cat": 8 + }, + { + "name": "生活家电", + "key": "家电", + "icon": "https://cdn.uviewui.com/uview/common/classify/7/3.jpg", + "cat": 8 + }, + { + "name": "电风扇", + "key": "电风扇", + "icon": "https://cdn.uviewui.com/uview/common/classify/7/4.jpg", + "cat": 8 + }, + { + "name": "电吹风", + "key": "电吹风", + "icon": "https://cdn.uviewui.com/uview/common/classify/7/5.jpg", + "cat": 8 + }, + { + "name": "手机壳", + "key": "手机壳", + "icon": "https://cdn.uviewui.com/uview/common/classify/7/6.jpg", + "cat": 8 + }, + { + "name": "榨汁机", + "key": "榨汁机", + "icon": "https://cdn.uviewui.com/uview/common/classify/7/7.jpg", + "cat": 8 + }, + { + "name": "小家电", + "key": "小家电", + "icon": "https://cdn.uviewui.com/uview/common/classify/7/8.jpg", + "cat": 8 + }, + { + "name": "数码电子", + "key": "数码", + "icon": "https://cdn.uviewui.com/uview/common/classify/7/9.jpg", + "cat": 8 + }, + { + "name": "电饭锅", + "key": "电饭锅", + "icon": "https://cdn.uviewui.com/uview/common/classify/7/10.jpg", + "cat": 8 + }, + { + "name": "手机支架", + "key": "手机支架", + "icon": "https://cdn.uviewui.com/uview/common/classify/7/11.jpg", + "cat": 8 + }, + { + "name": "剃须刀", + "key": "剃须刀", + "icon": "https://cdn.uviewui.com/uview/common/classify/7/12.jpg", + "cat": 8 + }, + { + "name": "充电宝", + "key": "充电宝", + "icon": "https://cdn.uviewui.com/uview/common/classify/7/13.jpg", + "cat": 8 + }, + { + "name": "手机配件", + "key": "手机配件", + "icon": "https://cdn.uviewui.com/uview/common/classify/7/14.jpg", + "cat": 8 + } + ] + }, + { + "name": "母婴", + "foods": [ + { + "name": "婴童服饰", + "key": "衣服", + "icon": "https://cdn.uviewui.com/uview/common/classify/8/1.jpg", + "cat": 2 + }, + { + "name": "玩具乐器", + "key": "玩具乐器", + "icon": "https://cdn.uviewui.com/uview/common/classify/8/2.jpg", + "cat": 2 + }, + { + "name": "尿不湿", + "key": "尿不湿", + "icon": "https://cdn.uviewui.com/uview/common/classify/8/3.jpg", + "cat": 2 + }, + { + "name": "安抚牙胶", + "key": "安抚牙胶", + "icon": "https://cdn.uviewui.com/uview/common/classify/8/4.jpg", + "cat": 2 + }, + { + "name": "奶瓶奶嘴", + "key": "奶瓶奶嘴", + "icon": "https://cdn.uviewui.com/uview/common/classify/8/5.jpg", + "cat": 2 + }, + { + "name": "孕妈用品", + "key": "孕妈用品", + "icon": "https://cdn.uviewui.com/uview/common/classify/8/6.jpg", + "cat": 2 + }, + { + "name": "宝宝用品", + "key": "宝宝用品", + "icon": "https://cdn.uviewui.com/uview/common/classify/8/7.jpg", + "cat": 2 + }, + { + "name": "婴童湿巾", + "key": "湿巾", + "icon": "https://cdn.uviewui.com/uview/common/classify/8/8.jpg", + "cat": 2 + }, + { + "name": "喂养洗护", + "key": "洗护", + "icon": "https://cdn.uviewui.com/uview/common/classify/8/9.jpg", + "cat": 2 + }, + { + "name": "婴童鞋靴", + "key": "童鞋", + "icon": "https://cdn.uviewui.com/uview/common/classify/8/10.jpg", + "cat": 2 + }, + { + "name": "口水巾", + "key": "口水巾", + "icon": "https://cdn.uviewui.com/uview/common/classify/8/11.jpg", + "cat": 2 + }, + { + "name": "营养辅食", + "key": "营养", + "icon": "https://cdn.uviewui.com/uview/common/classify/8/12.jpg", + "cat": 2 + }, + { + "name": "婴幼书籍", + "key": "书籍", + "icon": "https://cdn.uviewui.com/uview/common/classify/8/13.jpg", + "cat": 2 + }, + { + "name": "婴儿车", + "key": "婴儿车", + "icon": "https://cdn.uviewui.com/uview/common/classify/8/14.jpg", + "cat": 2 + } + ] + }, + { + "name": "箱包", + "foods": [ + { + "name": "单肩包", + "key": "单肩包", + "icon": "https://cdn.uviewui.com/uview/common/classify/9/1.jpg", + "cat": 0 + }, + { + "name": "斜挎包", + "key": "斜挎包", + "icon": "https://cdn.uviewui.com/uview/common/classify/9/2.jpg", + "cat": 0 + }, + { + "name": "女包", + "key": "女包", + "icon": "https://cdn.uviewui.com/uview/common/classify/9/3.jpg", + "cat": 0 + }, + { + "name": "男包", + "key": "男包", + "icon": "https://cdn.uviewui.com/uview/common/classify/9/4.jpg", + "cat": 0 + }, + { + "name": "双肩包", + "key": "双肩包", + "icon": "https://cdn.uviewui.com/uview/common/classify/9/5.jpg", + "cat": 0 + }, + { + "name": "小方包", + "key": "小方包", + "icon": "https://cdn.uviewui.com/uview/common/classify/9/6.jpg", + "cat": 0 + }, + { + "name": "钱包", + "key": "钱包", + "icon": "https://cdn.uviewui.com/uview/common/classify/9/7.jpg", + "cat": 0 + }, + { + "name": "旅行箱包", + "key": "旅行箱包", + "icon": "https://cdn.uviewui.com/uview/common/classify/9/8.jpg", + "cat": 0 + }, + { + "name": "零钱包", + "key": "零钱包", + "icon": "https://cdn.uviewui.com/uview/common/classify/9/9.jpg", + "cat": 0 + }, + { + "name": "手提包", + "key": "手提包", + "icon": "https://cdn.uviewui.com/uview/common/classify/9/10.jpg", + "cat": 0 + }, + { + "name": "胸包", + "key": "胸包", + "icon": "https://cdn.uviewui.com/uview/common/classify/9/11.jpg", + "cat": 0 + } + ] + }, + { + "name": "内衣", + "foods": [ + { + "name": "袜子", + "key": "袜子", + "icon": "https://cdn.uviewui.com/uview/common/classify/10/1.jpg", + "cat": 11 + }, + { + "name": "吊带背心", + "key": "吊带背心", + "icon": "https://cdn.uviewui.com/uview/common/classify/10/2.jpg", + "cat": 11 + }, + { + "name": "抹胸", + "key": "抹胸", + "icon": "https://cdn.uviewui.com/uview/common/classify/10/3.jpg", + "cat": 11 + }, + { + "name": "内裤", + "key": "内裤", + "icon": "https://cdn.uviewui.com/uview/common/classify/10/4.jpg", + "cat": 11 + }, + { + "name": "文胸", + "key": "文胸", + "icon": "https://cdn.uviewui.com/uview/common/classify/10/5.jpg", + "cat": 11 + }, + { + "name": "文胸套装", + "key": "文胸套装", + "icon": "https://cdn.uviewui.com/uview/common/classify/10/6.jpg", + "cat": 11 + }, + { + "name": "打底塑身", + "key": "打底塑身", + "icon": "https://cdn.uviewui.com/uview/common/classify/10/7.jpg", + "cat": 11 + }, + { + "name": "家居服", + "key": "家居服", + "icon": "https://cdn.uviewui.com/uview/common/classify/10/8.jpg", + "cat": 11 + }, + { + "name": "船袜", + "key": "船袜", + "icon": "https://cdn.uviewui.com/uview/common/classify/10/9.jpg", + "cat": 11 + }, + { + "name": "情侣睡衣", + "key": "情侣睡衣", + "icon": "https://cdn.uviewui.com/uview/common/classify/10/10.jpg", + "cat": 11 + }, + { + "name": "丝袜", + "key": "丝袜", + "icon": "https://cdn.uviewui.com/uview/common/classify/10/11.jpg", + "cat": 11 + } + ] + }, + { + "name": "文娱车品", + "foods": [ + { + "name": "车市车品", + "key": "车市车品", + "icon": "https://cdn.uviewui.com/uview/common/classify/11/1.jpg", + "cat": 7 + }, + { + "name": "办公文具", + "key": "办公文具", + "icon": "https://cdn.uviewui.com/uview/common/classify/11/2.jpg", + "cat": 7 + }, + { + "name": "考试必备", + "key": "考试必备", + "icon": "https://cdn.uviewui.com/uview/common/classify/11/3.jpg", + "cat": 7 + }, + { + "name": "笔记本", + "key": "笔记本", + "icon": "https://cdn.uviewui.com/uview/common/classify/11/4.jpg", + "cat": 7 + }, + { + "name": "艺术礼品", + "key": "礼品", + "icon": "https://cdn.uviewui.com/uview/common/classify/11/5.jpg", + "cat": 7 + }, + { + "name": "书写工具", + "key": "书写工具", + "icon": "https://cdn.uviewui.com/uview/common/classify/11/6.jpg", + "cat": 7 + }, + { + "name": "车载电器", + "key": "车载电器", + "icon": "https://cdn.uviewui.com/uview/common/classify/11/7.jpg", + "cat": 7 + }, + { + "name": "图书音像", + "key": "图书音像", + "icon": "https://cdn.uviewui.com/uview/common/classify/11/8.jpg", + "cat": 7 + }, + { + "name": "画具画材", + "key": "画具画材", + "icon": "https://cdn.uviewui.com/uview/common/classify/11/9.jpg", + "cat": 7 + } + ] + }, + { + "name": "配饰", + "foods": [ + { + "name": "太阳镜", + "key": "太阳镜", + "icon": "https://cdn.uviewui.com/uview/common/classify/12/1.jpg", + "cat": 0 + }, + { + "name": "皮带", + "key": "皮带", + "icon": "https://cdn.uviewui.com/uview/common/classify/12/2.jpg", + "cat": 0 + }, + { + "name": "棒球帽", + "key": "棒球帽", + "icon": "https://cdn.uviewui.com/uview/common/classify/12/3.jpg", + "cat": 0 + }, + { + "name": "手表", + "key": "手表", + "icon": "https://cdn.uviewui.com/uview/common/classify/12/4.jpg", + "cat": 0 + }, + { + "name": "发饰", + "key": "发饰", + "icon": "https://cdn.uviewui.com/uview/common/classify/12/5.jpg", + "cat": 0 + }, + { + "name": "项链", + "key": "项链", + "icon": "https://cdn.uviewui.com/uview/common/classify/12/6.jpg", + "cat": 0 + }, + { + "name": "手饰", + "key": "手饰", + "icon": "https://cdn.uviewui.com/uview/common/classify/12/7.jpg", + "cat": 0 + }, + { + "name": "耳环", + "key": "耳环", + "icon": "https://cdn.uviewui.com/uview/common/classify/12/8.jpg", + "cat": 0 + }, + { + "name": "帽子丝巾", + "key": "帽子丝巾", + "icon": "https://cdn.uviewui.com/uview/common/classify/12/9.jpg", + "cat": 0 + }, + { + "name": "眼镜墨镜", + "key": "眼镜墨镜", + "icon": "https://cdn.uviewui.com/uview/common/classify/12/10.jpg", + "cat": 0 + }, + { + "name": "发带发箍", + "key": "发带发箍", + "icon": "https://cdn.uviewui.com/uview/common/classify/12/11.jpg", + "cat": 0 + } + ] + }, + { + "name": "家装家纺", + "foods": [ + { + "name": "家居饰品", + "key": "家居饰品", + "icon": "https://cdn.uviewui.com/uview/common/classify/13/1.jpg", + "cat": 0 + }, + { + "name": "凉席", + "key": "凉席", + "icon": "https://cdn.uviewui.com/uview/common/classify/13/2.jpg", + "cat": 0 + }, + { + "name": "背枕靠枕", + "key": "靠枕", + "icon": "https://cdn.uviewui.com/uview/common/classify/13/3.jpg", + "cat": 0 + }, + { + "name": "床上用品", + "key": "床上用品", + "icon": "https://cdn.uviewui.com/uview/common/classify/13/4.jpg", + "cat": 0 + }, + { + "name": "摆件", + "key": "摆件", + "icon": "https://cdn.uviewui.com/uview/common/classify/13/5.jpg", + "cat": 0 + }, + { + "name": "四件套", + "key": "四件套", + "icon": "https://cdn.uviewui.com/uview/common/classify/13/6.jpg", + "cat": 0 + }, + { + "name": "装饰品", + "key": "装饰品", + "icon": "https://cdn.uviewui.com/uview/common/classify/13/7.jpg", + "cat": 0 + }, + { + "name": "卫浴用品", + "key": "卫浴", + "icon": "https://cdn.uviewui.com/uview/common/classify/13/8.jpg", + "cat": 0 + }, + { + "name": "家居家装", + "key": "家具", + "icon": "https://cdn.uviewui.com/uview/common/classify/13/9.jpg", + "cat": 0 + }, + { + "name": "蚊帐", + "key": "蚊帐", + "icon": "https://cdn.uviewui.com/uview/common/classify/13/10.jpg", + "cat": 0 + }, + { + "name": "墙纸贴纸", + "key": "墙纸", + "icon": "https://cdn.uviewui.com/uview/common/classify/13/11.jpg", + "cat": 0 + }, + { + "name": "空调被", + "key": "空调被", + "icon": "https://cdn.uviewui.com/uview/common/classify/13/12.jpg", + "cat": 0 + } + ] + }, + { + "name": "户外运动", + "foods": [ + { + "name": "游泳装备", + "key": "游泳", + "icon": "https://cdn.uviewui.com/uview/common/classify/14/1.jpg", + "cat": 0 + }, + { + "name": "泳镜", + "key": "泳镜", + "icon": "https://cdn.uviewui.com/uview/common/classify/14/2.jpg", + "cat": 0 + }, + { + "name": "户外装备", + "key": "户外", + "icon": "https://cdn.uviewui.com/uview/common/classify/14/3.jpg", + "cat": 0 + }, + { + "name": "健身服饰", + "key": "健身", + "icon": "https://cdn.uviewui.com/uview/common/classify/14/4.jpg", + "cat": 0 + }, + { + "name": "泳衣", + "key": "泳衣", + "icon": "https://cdn.uviewui.com/uview/common/classify/14/5.jpg", + "cat": 0 + }, + { + "name": "瑜伽垫", + "key": "瑜伽垫", + "icon": "https://cdn.uviewui.com/uview/common/classify/14/6.jpg", + "cat": 0 + }, + { + "name": "瑜伽用品", + "key": "瑜伽", + "icon": "https://cdn.uviewui.com/uview/common/classify/14/7.jpg", + "cat": 0 + }, + { + "name": "健身装备", + "key": "健身", + "icon": "https://cdn.uviewui.com/uview/common/classify/14/8.jpg", + "cat": 0 + }, + { + "name": "球迷用品", + "key": "球迷", + "icon": "https://cdn.uviewui.com/uview/common/classify/14/9.jpg", + "cat": 0 + } + ] + } +] \ No newline at end of file diff --git a/common/config.js b/common/config.js new file mode 100644 index 0000000..ae8137a --- /dev/null +++ b/common/config.js @@ -0,0 +1,3 @@ +export default { + baseUrl: 'https://uview-plus.lingyun.net' +} diff --git a/common/demo.scss b/common/demo.scss new file mode 100644 index 0000000..ad24821 --- /dev/null +++ b/common/demo.scss @@ -0,0 +1,55 @@ +.u-block { + padding: 14px; + &__section { + margin-bottom:10px; + } + &__title { + margin-top:10px; + font-size: 15px; + color: $u-content-color; + margin-bottom:10px; + } + &__flex { + /* #ifndef APP-NVUE */ + display: flex; + /* #endif */ + } +} + +// 使用了cell组件的icon图片样式 +.u-cell-icon { + width: 36rpx; + height: 36rpx; + margin-right: 8rpx; +} + +.u-page { + padding: 15px 15px 40px 15px; + &__item { + flex: 1; + // margin-bottom: 23px; + &__title { + font-size: 14px; + color: rgb(143, 156, 162); + // margin-bottom: 8px; + @include flex; + } + } +} + +.u-demo-block { + flex: 1; + margin-bottom: 23px; + + &__content { + @include flex(column); + } + + &__title { + font-size: 14px; + color: rgb(143, 156, 162); + margin-bottom: 8px; + @include flex; + } +} + diff --git a/common/locales/en.js b/common/locales/en.js new file mode 100644 index 0000000..6f42c57 --- /dev/null +++ b/common/locales/en.js @@ -0,0 +1,21 @@ +export default { + // 可以以页面为单位来写,比如首页的内容,写在index字段,个人中心写在center,共同部分写在common部分 + components: { + desc: 'Numerous components cover the various requirements of the development process, and the components are rich in functions and compatible with multiple terminals. Let you integrate quickly, out of the box' + }, + js: { + desc: 'Numerous intimate gadgets are a weapon that you can call upon during the development process, allowing you to dart in your hand and pierce the Yang with a hundred steps' + }, + template: { + desc: 'Collection of many commonly used pages and layouts, reducing the repetitive work of developers, allowing you to focus on logic and get twice the result with half the effort' + }, + nav: { + components: 'Components', + js: 'JS', + template: 'Template' + }, + common: { + intro: 'UI framework for rapid development of multiple platforms', + title: 'uview-plus', + }, +} diff --git a/common/locales/zh.js b/common/locales/zh.js new file mode 100644 index 0000000..752ac7c --- /dev/null +++ b/common/locales/zh.js @@ -0,0 +1,21 @@ +export default { + // 可以以页面为单位来写,比如首页的内容,写在index字段,个人中心写在center,共同部分写在common部分 + components: { + desc: '众多组件覆盖开发过程的各个需求,组件功能丰富,多端兼容。让你快速集成,开箱即用' + }, + js: { + desc: '众多的贴心小工具,是你开发过程中召之即来的利器,让你飞镖在手,百步穿杨' + }, + template: { + desc: '收集众多的常用页面和布局,减少开发者的重复工作,让你专注逻辑,事半功倍' + }, + nav: { + components: '组件', + js: '工具', + template: '模板' + }, + common: { + intro: '多平台快速开发的UI框架', + title: 'uview-plus', + }, +} diff --git a/common/mixin.js b/common/mixin.js new file mode 100644 index 0000000..ef11f8f --- /dev/null +++ b/common/mixin.js @@ -0,0 +1,7 @@ +export default { + data() { + return { + isWeixin: true + } + } +} diff --git a/common/props.js b/common/props.js new file mode 100644 index 0000000..9c1ef07 --- /dev/null +++ b/common/props.js @@ -0,0 +1,2 @@ +uni.$u.props.gap.bgColor = '#f3f4f6' +uni.$u.props.gap.height = '10' diff --git a/common/province.js b/common/province.js new file mode 100644 index 0000000..436b190 --- /dev/null +++ b/common/province.js @@ -0,0 +1 @@ +var provinceData=[{"label":"北京市","value":"11"},{"label":"天津市","value":"12"},{"label":"河北省","value":"13"},{"label":"山西省","value":"14"},{"label":"内蒙古自治区","value":"15"},{"label":"辽宁省","value":"21"},{"label":"吉林省","value":"22"},{"label":"黑龙江省","value":"23"},{"label":"上海市","value":"31"},{"label":"江苏省","value":"32"},{"label":"浙江省","value":"33"},{"label":"安徽省","value":"34"},{"label":"福建省","value":"35"},{"label":"江西省","value":"36"},{"label":"山东省","value":"37"},{"label":"河南省","value":"41"},{"label":"湖北省","value":"42"},{"label":"湖南省","value":"43"},{"label":"广东省","value":"44"},{"label":"广西壮族自治区","value":"45"},{"label":"海南省","value":"46"},{"label":"重庆市","value":"50"},{"label":"四川省","value":"51"},{"label":"贵州省","value":"52"},{"label":"云南省","value":"53"},{"label":"西藏自治区","value":"54"},{"label":"陕西省","value":"61"},{"label":"甘肃省","value":"62"},{"label":"青海省","value":"63"},{"label":"宁夏回族自治区","value":"64"},{"label":"新疆维吾尔自治区","value":"65"},{"label":"台湾","value":"66"},{"label":"香港","value":"67"},{"label":"澳门","value":"68"}];export default provinceData; \ No newline at end of file diff --git a/components/common/Footer.vue b/components/common/Footer.vue new file mode 100644 index 0000000..335384c --- /dev/null +++ b/components/common/Footer.vue @@ -0,0 +1,22 @@ + + + + + diff --git a/components/common/HeaderSearch.vue b/components/common/HeaderSearch.vue new file mode 100644 index 0000000..d5559bc --- /dev/null +++ b/components/common/HeaderSearch.vue @@ -0,0 +1,57 @@ + + + + + diff --git a/components/common/SearchMain.vue b/components/common/SearchMain.vue new file mode 100644 index 0000000..15e8c51 --- /dev/null +++ b/components/common/SearchMain.vue @@ -0,0 +1,43 @@ + + + + + diff --git a/components/index/Index.vue b/components/index/Index.vue new file mode 100644 index 0000000..8679327 --- /dev/null +++ b/components/index/Index.vue @@ -0,0 +1,315 @@ + + + + + diff --git a/components/index/Tabs.vue b/components/index/Tabs.vue new file mode 100644 index 0000000..bbc98d4 --- /dev/null +++ b/components/index/Tabs.vue @@ -0,0 +1,44 @@ + + + + + diff --git a/components/tabbar/customTabbar.vue b/components/tabbar/customTabbar.vue new file mode 100644 index 0000000..05df634 --- /dev/null +++ b/components/tabbar/customTabbar.vue @@ -0,0 +1,227 @@ + + + + + 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..517a6bb --- /dev/null +++ b/main.js @@ -0,0 +1,25 @@ +import App from './App' + +// #ifndef VUE3 +import Vue from 'vue' +import './uni.promisify.adaptor' +Vue.config.productionTip = false +App.mpType = 'app' +const app = new Vue({ + ...App +}) +app.$mount() +// #endif +// main.js +import uviewPlus from 'uview-plus' + +// #ifdef VUE3 +import { createSSRApp } from 'vue' +export function createApp() { + const app = createSSRApp(App) + app.use(uviewPlus) + return { + app + } +} +// #endif diff --git a/manifest.json b/manifest.json new file mode 100644 index 0000000..e297b5d --- /dev/null +++ b/manifest.json @@ -0,0 +1,78 @@ +{ + "name" : "uview-shop", + "appid" : "__UNI__FC74E08", + "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" : {}, + "splashscreen" : { + "androidStyle" : "default" + } + } + }, + /* 快应用特有相关 */ + "quickapp" : {}, + /* 小程序特有相关 */ + "mp-weixin" : { + // "appid" : "wx679d36842570cea7", // 旧的铂尔曼 + "appid" : "wx57b54060a579c31a", // 新的小程序 + "setting" : { + "urlCheck" : false, + "minified" : true + }, + // "resizable" : true, + "usingComponents" : true + }, + "mp-alipay" : { + "usingComponents" : true + }, + "mp-baidu" : { + "usingComponents" : true + }, + "mp-toutiao" : { + "usingComponents" : true + }, + "uniStatistics" : { + "enable" : false + }, + "vueVersion" : "3" +} diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 0000000..a1b7ec8 --- /dev/null +++ b/package-lock.json @@ -0,0 +1,71 @@ +{ + "name": "lgp-wx", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "dependencies": { + "clipboard": "^2.0.11", + "dayjs": "^1.11.13", + "js-base64": "^3.7.7", + "uview-plus": "^3.3.36" + } + }, + "node_modules/clipboard": { + "version": "2.0.11", + "license": "MIT", + "dependencies": { + "good-listener": "^1.2.2", + "select": "^1.1.2", + "tiny-emitter": "^2.0.0" + } + }, + "node_modules/dayjs": { + "version": "1.11.13", + "license": "MIT" + }, + "node_modules/delegate": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/delegate/-/delegate-3.2.0.tgz", + "integrity": "sha512-IofjkYBZaZivn0V8nnsMJGBr4jVLxHDheKSW88PyxS5QC4Vo9ZbZVvhzlSxY87fVq3STR6r+4cGepyHkcWOQSw==", + "license": "MIT" + }, + "node_modules/good-listener": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/good-listener/-/good-listener-1.2.2.tgz", + "integrity": "sha512-goW1b+d9q/HIwbVYZzZ6SsTr4IgE+WA44A0GmPIQstuOrgsFcT7VEJ48nmr9GaRtNu0XTKacFLGnBPAM6Afouw==", + "license": "MIT", + "dependencies": { + "delegate": "^3.1.2" + } + }, + "node_modules/js-base64": { + "version": "3.7.7", + "resolved": "https://registry.npmjs.org/js-base64/-/js-base64-3.7.7.tgz", + "integrity": "sha512-7rCnleh0z2CkXhH67J8K1Ytz0b2Y+yxTPL+/KOJoa20hfnVQ/3/T6W/KflYI4bRHRagNeXeU2bkNGI3v1oS/lw==", + "license": "BSD-3-Clause" + }, + "node_modules/select": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/select/-/select-1.1.2.tgz", + "integrity": "sha512-OwpTSOfy6xSs1+pwcNrv0RBMOzI39Lp3qQKUTPVVPRjCdNa5JH/oPRiqsesIskK8TVgmRiHwO4KXlV2Li9dANA==", + "license": "MIT" + }, + "node_modules/tiny-emitter": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/tiny-emitter/-/tiny-emitter-2.1.0.tgz", + "integrity": "sha512-NB6Dk1A9xgQPMoGqC5CVXn123gWyte215ONT5Pp5a0yt4nlEoO1ZWeCwpncaekPHXO60i47ihFnZPiRPjRMq4Q==", + "license": "MIT" + }, + "node_modules/uview-plus": { + "version": "3.3.36", + "dependencies": { + "clipboard": "^2.0.11", + "dayjs": "^1.11.3" + }, + "engines": { + "HBuilderX": "^3.1.0" + } + } + } +} diff --git a/package.json b/package.json new file mode 100644 index 0000000..3c97d9e --- /dev/null +++ b/package.json @@ -0,0 +1,8 @@ +{ + "dependencies": { + "clipboard": "^2.0.11", + "dayjs": "^1.11.13", + "js-base64": "^3.7.7", + "uview-plus": "^3.3.36" + } +} diff --git a/pages.json b/pages.json new file mode 100644 index 0000000..09465e4 --- /dev/null +++ b/pages.json @@ -0,0 +1,112 @@ +{ + "easycom": { + "autoscan": true, + "custom": { + "^u--(.*)": "uview-plus/components/u-$1/u-$1.vue", + "^up-(.*)": "uview-plus/components/u-$1/u-$1.vue", + "^u-([^-].*)": "uview-plus/components/u-$1/u-$1.vue" + } + }, + "pages": [ + { + "path": "pages/goods/index", + "style": { + "navigationBarTitleText": "家具优选" + } + }, + { + "path": "pages/login/index", + "style": { + "navigationBarTitleText": "登录" + } + }, + { + "path": "pages/mine/mine", + "style": { + "navigationBarTitleText": "我" + } + }, + { + "path": "pages/my/index", + "style": { + "navigationBarTitleText": "个人信息" + } + }, + { + "path": "pages/product/product", + "style": { + "navigationBarTitleText": "商品列表", + "enablePullDownRefresh": true, + "backgroundTextStyle": "dark", + "backgroundColor": "#f8f8f8", + "onReachBottomDistance": 50 + } + }, + { + "path": "pages/product/detail", + "style": { + "navigationBarTitleText": "商品详情", + "enablePullDownRefresh": false + } + }, + { + "path": "pages/cart/cart", + "style": { + "navigationBarTitleText": "", + "enablePullDownRefresh": false + } + }, + { + "path": "pages/cart/detail", + "style": { + "navigationBarTitleText": "清单详情", + "enablePullDownRefresh": false + } + }, + { + "path": "pages/search/search", + "style": { + "navigationBarTitleText": "搜索", + "enablePullDownRefresh": false + } + } + ], + "globalStyle": { + "navigationBarTextStyle": "black", + "navigationBarTitleText": "uni-app", + "navigationBarBackgroundColor": "#F8F8F8", + "backgroundColor": "#F8F8F8" + }, + "uniIdRouter": {}, + "tabBar": { + "color": "#7A7E83", + "selectedColor": "#3cc51f", + "backgroundColor": "#ffffff", + "list": [ + { + "pagePath": "pages/goods/index", + "text": "首页", + "iconPath": "static/tabbar/v2/home.png", + "selectedIconPath": "static/tabbar/v2/home-fill.png" + }, +// { +// "pagePath": "pages/goods/index", +// "text": "首页", +// "iconPath": "static/tabbar/classify.png", +// "selectedIconPath": "static/tabbar/classify-fill.png" +// }, + // { + // "pagePath": "pages/order/order", + // "text": "我的订单", + // "iconPath": "static/icon/order.png", + // "selectedIconPath": "static/icon/order.png" + // }, + { + "pagePath": "pages/mine/mine", + "text": "我", + "iconPath": "static/tabbar/v2/mine.png", + "selectedIconPath": "static/tabbar/v2/mine-fill.png" + } + ] + } +} diff --git a/pages/cart/cart.vue b/pages/cart/cart.vue new file mode 100644 index 0000000..dbaf3c9 --- /dev/null +++ b/pages/cart/cart.vue @@ -0,0 +1,507 @@ + + + + + \ No newline at end of file diff --git a/pages/cart/detail.vue b/pages/cart/detail.vue new file mode 100644 index 0000000..8efa240 --- /dev/null +++ b/pages/cart/detail.vue @@ -0,0 +1,428 @@ + + + + + \ No newline at end of file diff --git a/pages/goods/index.vue b/pages/goods/index.vue new file mode 100644 index 0000000..3d0e729 --- /dev/null +++ b/pages/goods/index.vue @@ -0,0 +1,264 @@ + + + + + \ No newline at end of file diff --git a/pages/login/index.vue b/pages/login/index.vue new file mode 100644 index 0000000..7312f6a --- /dev/null +++ b/pages/login/index.vue @@ -0,0 +1,183 @@ + + + + + diff --git a/pages/mine/mine.vue b/pages/mine/mine.vue new file mode 100644 index 0000000..76e02d3 --- /dev/null +++ b/pages/mine/mine.vue @@ -0,0 +1,360 @@ + + + + + \ No newline at end of file diff --git a/pages/my/index.vue b/pages/my/index.vue new file mode 100644 index 0000000..796042f --- /dev/null +++ b/pages/my/index.vue @@ -0,0 +1,225 @@ + + + + + \ No newline at end of file diff --git a/pages/product/detail.vue b/pages/product/detail.vue new file mode 100644 index 0000000..5569516 --- /dev/null +++ b/pages/product/detail.vue @@ -0,0 +1,471 @@ + + + + + \ No newline at end of file diff --git a/pages/product/product.vue b/pages/product/product.vue new file mode 100644 index 0000000..96d8014 --- /dev/null +++ b/pages/product/product.vue @@ -0,0 +1,559 @@ + + + + + \ No newline at end of file diff --git a/pages/search/search.vue b/pages/search/search.vue new file mode 100644 index 0000000..061621a --- /dev/null +++ b/pages/search/search.vue @@ -0,0 +1,399 @@ + + + + + \ No newline at end of file diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml new file mode 100644 index 0000000..d302891 --- /dev/null +++ b/pnpm-lock.yaml @@ -0,0 +1,76 @@ +lockfileVersion: '9.0' + +settings: + autoInstallPeers: true + excludeLinksFromLockfile: false + +importers: + + .: + dependencies: + clipboard: + specifier: ^2.0.11 + version: 2.0.11 + dayjs: + specifier: ^1.11.13 + version: 1.11.13 + js-base64: + specifier: ^3.7.7 + version: 3.7.8 + uview-plus: + specifier: ^3.3.36 + version: 3.3.36 + +packages: + + clipboard@2.0.11: + resolution: {integrity: sha512-C+0bbOqkezLIsmWSvlsXS0Q0bmkugu7jcfMIACB+RDEntIzQIkdr148we28AfSloQLRdZlYL/QYyrq05j/3Faw==, tarball: https://registry.npmmirror.com/clipboard/-/clipboard-2.0.11.tgz} + + dayjs@1.11.13: + resolution: {integrity: sha512-oaMBel6gjolK862uaPQOVTA7q3TZhuSvuMQAAglQDOWYO9A91IrAOUJEyKVlqJlHE0vq5p5UXxzdPfMH/x6xNg==, tarball: https://registry.npmmirror.com/dayjs/-/dayjs-1.11.13.tgz} + + delegate@3.2.0: + resolution: {integrity: sha512-IofjkYBZaZivn0V8nnsMJGBr4jVLxHDheKSW88PyxS5QC4Vo9ZbZVvhzlSxY87fVq3STR6r+4cGepyHkcWOQSw==, tarball: https://registry.npmmirror.com/delegate/-/delegate-3.2.0.tgz} + + good-listener@1.2.2: + resolution: {integrity: sha512-goW1b+d9q/HIwbVYZzZ6SsTr4IgE+WA44A0GmPIQstuOrgsFcT7VEJ48nmr9GaRtNu0XTKacFLGnBPAM6Afouw==, tarball: https://registry.npmmirror.com/good-listener/-/good-listener-1.2.2.tgz} + + js-base64@3.7.8: + resolution: {integrity: sha512-hNngCeKxIUQiEUN3GPJOkz4wF/YvdUdbNL9hsBcMQTkKzboD7T/q3OYOuuPZLUE6dBxSGpwhk5mwuDud7JVAow==} + + select@1.1.2: + resolution: {integrity: sha512-OwpTSOfy6xSs1+pwcNrv0RBMOzI39Lp3qQKUTPVVPRjCdNa5JH/oPRiqsesIskK8TVgmRiHwO4KXlV2Li9dANA==, tarball: https://registry.npmmirror.com/select/-/select-1.1.2.tgz} + + tiny-emitter@2.1.0: + resolution: {integrity: sha512-NB6Dk1A9xgQPMoGqC5CVXn123gWyte215ONT5Pp5a0yt4nlEoO1ZWeCwpncaekPHXO60i47ihFnZPiRPjRMq4Q==, tarball: https://registry.npmmirror.com/tiny-emitter/-/tiny-emitter-2.1.0.tgz} + + uview-plus@3.3.36: + resolution: {integrity: sha512-yiIIt3OkCDkBzflrr6by8qvYibvCzsFZ/Mn+Fdx9TDaTQAltWFBj7UNVN/wOeb3lou2T5S1QFy2rxw3OcAYi5g==, tarball: https://registry.npmmirror.com/uview-plus/-/uview-plus-3.3.36.tgz} + engines: {HBuilderX: ^3.1.0} + +snapshots: + + clipboard@2.0.11: + dependencies: + good-listener: 1.2.2 + select: 1.1.2 + tiny-emitter: 2.1.0 + + dayjs@1.11.13: {} + + delegate@3.2.0: {} + + good-listener@1.2.2: + dependencies: + delegate: 3.2.0 + + js-base64@3.7.8: {} + + select@1.1.2: {} + + tiny-emitter@2.1.0: {} + + uview-plus@3.3.36: + dependencies: + clipboard: 2.0.11 + dayjs: 1.11.13 diff --git a/static/icon/appointment.png b/static/icon/appointment.png new file mode 100644 index 0000000000000000000000000000000000000000..6f7ea9940b2f52a811c614208ad4077aebbae15c GIT binary patch literal 22365 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 SDkcE}|LJQRYgKAE-u@r!c*Oz$ literal 0 HcmV?d00001 diff --git a/static/icon/doing.png b/static/icon/doing.png new file mode 100644 index 0000000000000000000000000000000000000000..84803fa7da2f8cf74e3f948dcc4758167a2cc58f GIT binary patch literal 16547 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 literal 0 HcmV?d00001 diff --git a/static/icon/order.png b/static/icon/order.png new file mode 100644 index 0000000000000000000000000000000000000000..a7a1a944152def0f4b141652b7240387f20a490a GIT binary patch literal 13243 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 B1I7RV literal 0 HcmV?d00001 diff --git a/static/icon/served.png b/static/icon/served.png new file mode 100644 index 0000000000000000000000000000000000000000..6fb7cd397a382ac3700a82bf18d63b86275b574a GIT binary patch literal 18278 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�!wjYupIET=qqqOb;QW9yz5e>Y8lkz!=9lei z3G(SW`LDf|j%Vv>aNmRVFVRu+F4v(83U#|Z?bElb3f4!u%r*9{oztdK1R9}dY*D(U z_TizAu6|Y0w&>~W8C#G&hF=Fro$rx9*XEEBkqaqvkyaVg4IQaH@GXxYOEsH2G&Mw& zNR2ye@#oJ8=sT7J{6I6INPpMJ{=XzFC^N;zitBTXFONcq>!$;n4QF@B2j^q%%1eHV zWjOy%y1TpdCq=9jibwyN$&`SbI|2HPMe(&SjzUOesvVkYDj6W?lU_+?7p>OH_I=!e zXoGvx#QvQO`)8@IA&RJ4I99R1%j1RA(ybefN*uE!xsv!soYqUtB%400M;3JKJ2O0b z0(%1j#hS$bwRs}s?Y;YT>CYdrrv{*~d|l#qO~1*p^<|0N|3S%VYEb~&y_1nQl3FK= zTx`?|{pF8c-b6n;>X<$vZaWPI5orN-J_mVXz5l)EEBLgfN)t#Q$?XqjsLEFuDKBKC zjNOo?PALi?Xuos`R~-9+I`i?SQK#WoG?co2HfZ=$AQ~Iw_gDo4k9qYn*h}s<@Z*PO z1xBXs8(hW4hd()$=~xH-h3g%K|8+tE5F^bGCKbRtca+|Jlrb*k@qq#6h<6JQ4{)}} zm$j)KBFbWfq=kDDp;rvt9qY*8k9-AL1WP(q} z2vPF&K>5y#;Vf`9m5kA65DniAG+~MvoNK5@jIY7JYY5Dp%(R|Go}Mba=fsaJ{h6$s zge;fsZn|F&2i1w8Pu9nitRs2$tdH(Dk#C$5L73SAW$V)DMkwoDhX}ZqB7b9Z6>uY4 z65{-4KTLiKMq`%;ZKu7o7@Q?PEKF&6xP3HWw*9bml|#ES=Xnlj=(IxX63k|Kg?M|K z{`dac;)HHIw{8po_ven8pmlE$rDx`cU!Yj9_T1hJW@(=hN2a@cbJ(dMLD zqhsxNx;5q)$3TrLkEjMP*uj5j=#RpGDNFLzVAtwc!R^j-c-0hV$iO$?R z;-Bsk%7?4qKQG}sNJ9j_s(=OkhA90QJ9+!cw_Mp`*X#Yqr(Zycp)4=C%Zqs=&4P{c z#YpAvTr{P>?^@c@%zohL`dNl}t>I_Mokz4+hK>}f)xqt9QQ$Zuv>?sLKtvd=*~a*@ z3jOead$Mn@Zy8W6az{>AtX88^cp3=#4+Sa=2@hAT!r<(QZifT?7m-z60q2UErEFb% z21Q;)`Kf3VH~wRl3B2w79>#zf2L=}A#2~|trQ#k~COc6tx$+~-QNRA=y@Vo9`AgaA z`5Gp0$ZW|p#b#-{!0GC{4+p8R`-7g>YFJp!13;htNo_cGR&hnBN$jNzIFtBrv0u!y0A^ug= ztog_AqBAx!zHX8!{!KjEhvf!k_%@}V8+nZs_tS%0JMSmZP!QrUw47!rL?=W?50ldN zM#PRXJTB>!3hN^~?&NDV^hsI{ILq1Xm_9i#b(r|cAEP{bI5;Or_$Yfc0pws2_cWRO zT7)9%*Fs2v??&skFlH@$qj%_@VTz1IP{;nCOR`|1pkd$(HtEUbVRc4C8K-A7m=0s? zlC~E=rV+gkykC(#rPamN4bJ<44#I%d3Z<|U@w3HOlIf!~ER3u=rcSDkS#6x;;U%W6 z4@~-nQj>wYV_niRTRTfzQ+xyvyS`tO4yDuP2=Ma>P#d)CsmwT=6I zv}fY7?~K^AVZ7$*O8mJYF_Z%I+_JW_9O74{oSY0R$?M`d8-j+BDhc}FBymfeu3)Fl zY`C32S@1&rq;Qw}%JwvNTF|b{J4#nCgzx6fr>Jx-+5WTkQOSc#Nu)wB;549|i7dB2;wk9dHW^L;Fcv8I*^WURs9EQVy z$ekgHYpF7&0kp=?l;=pA#T(_FS?)n9d~WGRD7^-UD4l`?CYBO z3kVd=q_-*MABe9dm6XWb&Ec_|caqyO{Z0Fbz!W8dO~0ywObz}Jb>QK1xXQ=swxS6# z%4NgNzT{=?NiUJEiX8-~pdHu!$;6Iv9!oOmqBa$8rJ`Sy)%K)l4`q;^c!YA`!nmtu zD0H(nKs>p@HXMEr!4q(cMd1XeS(qfz2YWrM7&7$sH@TD{ye7cc5IoK2U4)CpRIId0 zGJ}NZM-aP=wY+3PiL8E!9h*9C6E%Vaas8T!&f%#*d>KSQW6e)OlD+)UE6N#s)PPZ%>!>QG_US{2?$``qx$B7vga(Eia{Y?NaoOAlm ze%mOw4K%S(ivx=a6$wva2Y;N%!5pl-||Zn^U)S}t=!=lB>J4Q%q*LCN)EcCk=2BHkgMb+2&B#OH0C71@tj&qTjG0{iNwIo14XsNtbi@Kgd&R@d?9Y7uAyMhD99-l_lXgu?Ty$=;Va& z2*<43>dmb6^SpD+B3&mXCFjWnJqpa*CX znh16MA`o4=I75NOFkjQ7>6k7$w3i{EV}0Yy>Em%#F;v}-p4JNgeGnXYk2>@G{z|w! z2>%dH}9u7o-wGaR$aE}@sTAjxH3`NZzX-2neIKs4OQ ztLn!vnEYqNVY8y_jZkCHE^6=E$^`(gIS`WWDpUV9{=ADPiv|`c+_G-5-6eL8T2Z2f z>91*!89rwdtK&M;w+nDjvp8g~$ry5S>qbly`7!w>&2j0;VsKV=2k}t7qLpDr52jZN z7=2gRJY30u+zRrH$kih)^r7%f?s>@W!0B`-8^=Dy+t9OBb$N-Pkixyxe!{l^uMY4m zXsaoVJHPcR_N3(?6RD^0{%bq5UC8 z{`8?+`|6i9pUL&1vEu^Pc`|YQ*_kC^e+=BRl%b6|7M)Cx{JtL6Hyt0|Dd>OO-}?q( z7;F8i5y4NwjhEdA| zY5FCIjj0>|tLWNWz$g=VJKtG;i`o)QY&ai^3u}K=5)BdY2oxlccw0+#xq0<`X^Fhf z-u>hiaM=vZJg~}EuN0p${Cxbbc>=aDjXn}4{^58H0EkJT{}-Uz;-`e7w&&$`4cD(< zOr2CXQUmVp1cZMmFuo;1iXKE@y9;~THF2hg!^7-hDtJ*sS*i1=A8q-K(*0nlGJuUu zyflek)#U&)HF)-2N}nAPI$-+}TDKw{MCtn$TC<*ih8x0r+d%dWCr%QMkm##YKdH;3 zVzVGOUIZGMmc0{ju*J*q*39G@0{B4Rh+XV7Xz!<-ye6 zKKK|eB?_gY^j}~dvFtYw_&+U>84?_I43JRnkp@)UspP`Dj%@u? z+p<-Yau;k%xYYx~5S2?vUTdURJ(a}9n>^3_(yN9eU;C`Na^{+G_|#~njsL$FLk4K( zZ*j9oVoEbk+{rXxB2E)BI&hSOB+MOI-Pj!YyVBy1AyD1gt*r-kGYMRDA|*3WYr$^_ zj3jM4so?l<4@>7I8x-c1Ea*&OnaL^VAYv10tMR@D0>94Wnto3_^O&_RU3?;|v{YB) z1vZNeuPuQ6zqEHbb^|5wJUF)}Oe01Oh=_QNlTe>SpN6C?S2NhRwIjwBuS_OFm~q>Om@+a0*$s0lNN z?rb6YIRbPh+Hi(kQiRH>5;fc~WOXj6w|8dTUwCwnT$@Nhgp;$-{hH}dV!Olvh6;c{ z^j#1veVIx<&853mK3QT?*`cB^Uu_o=Ce`$Od)25X+v;h1+8Ns=5G-uOArcKi@Igyd zpN6ZIPyBQ*%&ESzRVD)$P`2=^b)-&W0n~e2-nCHA>lLt1s2jziT~V%nmm}riYL5{O zh^a-6R7t!8K3A^s2wpU$LG|B*5$qN0okw9}A3<;+s##7h=eb7zbFc&OEm=(xI8zP@ znKVt-4C5#Kt9AviuPtcPHuC0Z-{w*65YqexLK+aOIOYU(5o5b12=+M+vSmd*{6D&+ zV+pyYIuM&l6w?{^4nd6Py!Z%&GsdifFikcsrZQ6bPD3PP^S}Fw5&L(d%YX9x02^r^ z^q9CqpjN3;QZ2D|zsbDaHDdXvm)%5sO48>V652aLJeYb8oWe$=Cu;pFJS1DIZ(@#R=(8%n?U zE|*f3;$Yq-1jngk(KvcZHJ`)Xwi#V~;8{-9oX5zh{DMn|KG@qEL<9C5WZmJo>A~V} z6=7!7CB)^2VLo~1qAPsURv_RdrtZ0(PCE91KF9f9h+BUqH5D$OJ9W zB^Ki&hIk7c|MND8*~&G}f{qO$r!8$j>~`usSx~;9$-c3HANPj8Yh8S)4Ce%!krNWW zV*azz9uX4mOfr0Jzt$fT5_aVBej;8xawM5n?~TW#PT}66HV%HZ}i$ ccjR-W;1!Ln!1U8~0Q{$+qI0M0mSx2M0%qu^3;+NC literal 0 HcmV?d00001 diff --git a/static/icon/wallet.png b/static/icon/wallet.png new file mode 100644 index 0000000000000000000000000000000000000000..767a07f99bd38c6d05f7190399a5fabef8d96aca GIT binary patch literal 12804 zcmeHuc{tQ-|L{FuGZ|Y9*$dgT7oluZSxP9C>`cjWvJ=TVQ=Jf@s3b)jvL$=g>4b{1 zlw_Z26q0RHQnvS=8RtCbJnwt`uHSRL|Ge*Y{kqaL_xF2$?$5s7;tyJx@oy@K*?) zJap!_JvNi3MV!)@UG?|NA4p&J@=DdZcziCGkp1B4ACJXH>c2;5>Q%n4)$H1?oSgbS8B z?#ypez>bZviYHt^5Hj~ozgFfqJSbVm1ViS=poyZ|LupJfL_pwSffMD#0!^QqEdq?A zP$;q(^ApkBzy~~fPaT$LtRe_;JM$Cmp(q7jm3+>zV639iz?=DreRU8I(vQ8hyunz- zVnGk{lP~=a5okQixw(z8%Et!^nVM8SNjeS{i$@u-ACd zwsL-D=ANV#26+eRnYho%FQs8Z^3$_2j(=~~6dza5yYx;zT)w8-QpAp@t>BjcANW-k zDvO}SHrPeKjafRks;H?e?p*ifF$g>=qRV;jM-M+AIJqx>50QKyJ>Nj5oO$8DSRkTu zmi&4*S?P#N>J}+*Vj|y?hz~}FLN_M!C-AN`KU}G6q0xy7dK$KL;GAtCgk{&YZ-hfL|A}vX67^{>LkT(wWhlLJ8<)D zFK>|p76n-zkX#HR(?8}~p;L(*z52CAh64-CXmcL$P$i8wQ7iANLnSwy@~9Aw5F~v^ zqlw=K>k2iwk`NO;E2Z~Yb= z7Ul%%^B?n`pH=WNJ(_w~fJWJcn`)#U41Y|{=|U|v>_%@-G0E$oGmMQVi|mBXXegS= zvkclrwZ_!1N<&Gw?;?`NG4c%^jTwza#CMr>C*7f;xGSm4;AO-bFO$pkImZdH zJFw)(HOUbk9*YAx?+@Xi;txoQTP1c&9ZF( z7iLH}K9PC|tE+09j_T+1%CmpA-Uf*DP`Wr0UC1L5W|X^J?BkW>Q3vf;L=5rR;HIlk zu9I`g4JOwmvdaLE&ZEXVTwvK=kDnxuo}AO^$~njW`7HU|C65(O6k(K${Eb838lsiz z!0XxSF{uAg^oE5E3YD#tdmP=rp`?T2L0P{sL|7-SNH>D|rH*h7I!=`Vzc=Vm%)HeP ziYV^+4U0o$3@O#e`_?`V5VFx`b7vYvIHy0P{ArEUtXH%^bQRF}Fq$DoO5o@n%lc3g zu#3ulGkP`+!?5GCWLfl*#f)r!^{{Lv#;(JcHp36(hY4?GsHYmYmuv_SBJZxoLk}&B zwKxI^R_O2jo*Po>)57zmaY!#$UJ6(g-5cFQpu5kU8WeNRJZo)3ptI@uQdGN|U%M-} zAF;76w1@Qc^@!?{av3sj&9__nW7rou&aI?_pDM{|a&J7WQQ5B>M7NU^AchAV_=F?f zrbB7Nqa8@Kl*Vt5%WaPWuScGy76ezQNN8w%soVR>6WEUZ(N5&9ZAZ=7c zjMT;eU@w{Qb~z#HYjgCf$*MekBgPYTNa%pK35M9S)1$6T7;0!K`WiGEeVv$@!Zw-; z{);f$<@A&6)Vqb_dCO2s+Jk6N7t@RNX24 zhV>Gk$AT0BcTvSYct-ka-3@{6KIBtfGM*O^_?gppuKUjV$6r6MwAtL+>pv(ImiIuj zNSF(}oyhI8FeZ0=%h3v=AFHY+&-fHgr0Q}}&ypS5?mXFv;Dc2)sav?Ji_{<1?vo5k z!7o-DjwNe@nAGPK{$NO73r$AUf*|=d#Qc=Zc2-PA?+Hr>;m(znj zfistY#%0rtmTHWCgU$n^`l-1`JAe5p2qj|;A5VNS`&mQkxS#mu#NBgHxBBhgip4?= zy>FQKjU!YIYcWw(x&@-mS#UR)A(~1g>D$6^xwXNaS>wtxrZa

bcR}D8j@h?Z#n@ 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 F{{lkVAxr=O literal 0 HcmV?d00001 diff --git a/static/images/empty.png b/static/images/empty.png new file mode 100644 index 0000000000000000000000000000000000000000..104190c24f37cc94373512aec8e6b9814a14405e GIT binary patch literal 55556 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®laP1#ZB9SU6vS*q1KHW|G2JsBezqNg*Ab!e;#ar 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 literal 0 HcmV?d00001 diff --git a/static/images/logo.png b/static/images/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..b71dd401863e4ef58c14956d07e8f9aa8967fe84 GIT binary patch literal 33404 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 literal 0 HcmV?d00001 diff --git a/static/loading.svg b/static/loading.svg new file mode 100644 index 0000000..ea3df66 --- /dev/null +++ b/static/loading.svg @@ -0,0 +1 @@ +奶酪云 \ No newline at end of file diff --git a/static/logo.png b/static/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..b5771e209bb677e2ebd5ff766ad5ee11790f305a GIT binary patch literal 4023 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 Xu+l)DQK2vZ{yl!6rc`v_$v#SU!@sP=LH+ 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 literal 0 HcmV?d00001 diff --git a/static/tabbar/classify-fill.png b/static/tabbar/classify-fill.png new file mode 100644 index 0000000000000000000000000000000000000000..61a9cf1d51421eecd3c92aad44bc1829222d0e2d GIT binary patch literal 16317 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

&K@v+&E$sR#MJDd9rw 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 Xyw1*-if5G}@Xz3sscwxn{__6-1!fM& literal 0 HcmV?d00001 diff --git a/static/tabbar/classify.png b/static/tabbar/classify.png new file mode 100644 index 0000000000000000000000000000000000000000..fc978ffbc82f03985c26e77d48653521889ce9d1 GIT binary patch literal 17502 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 A;Q#;t literal 0 HcmV?d00001 diff --git a/static/tabbar/home.png b/static/tabbar/home.png new file mode 100644 index 0000000000000000000000000000000000000000..abd131a4640631b86f4f8cc71497f988e491185b GIT binary patch literal 16789 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 literal 0 HcmV?d00001 diff --git a/static/tabbar/mine.png b/static/tabbar/mine.png new file mode 100644 index 0000000000000000000000000000000000000000..8c8485adab8b7594fce6ae780e5516af3c432734 GIT binary patch literal 15970 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 F{|iY^Sr7mK literal 0 HcmV?d00001 diff --git a/static/tabbar/shopping-cart-fill.png b/static/tabbar/shopping-cart-fill.png new file mode 100644 index 0000000000000000000000000000000000000000..b24bee14b5251c59d46277939a9c2b09e637d017 GIT binary patch literal 16441 zcmeHvc{r5q`}b|eSO#O?vPQPDWmmRPlC{mg3=$%HmTWVUEhW@gBD7E_TZK}_PO_A> zh_Qu8gR(^Cz3%aRpWp9z-@o4Dc>j8j-(NjF*L|JWd7am}e$I1BvNShhLGMFD5X549 z((nufA;5nkAOGMm1*qRY}V$=#NXu$ zyr(`%yQb@79tP@sP-K=&^V&J|;N+1$Q-hMpwL z%Tf=&M5`adZC`;vOBdh}Xc9z{w4|`QJwhl_^5aDqX|TPmHJvC~f%+ha{ew7@6j#9X~6lo{!~!6Yq8L(5>m!Jql%~ zi8N56L@Mn&)-iX)_AJrzmxBDShg6-@Qvy0`PlpqMM$MiuS+j>*&Ib<0P4S=DgBo!i0PWeiiEq&ul_W46*xy-ion;?6XQL4G zaTuvbXg>$4kw&5dMW9{CC%xjY6a8(ri9Yy<9{7j`NcfIFGE7KMKhglUFHNQy9VnM^ z>2@&kLzS6LQ*Zh=tp7iT4rq)c>W>5rZ?K}IBzhXjREcIY&S(R##Ewsu{1HwX=zF@v z-C}H_TuZ%16lzr%y5(~A;#Snux`WyV3-Mx7kYYV`?IOaK6krksLtzRP zp|fAS(QKa&1#4=0Vd$)>vOGbgArWXu5<#i7yZ%$p^99lCr*f}N?mYmohAa{2dw>wJ zwGi87x}N8L5cW+6cz~6B#@VczoZN{ap7r6u%vQBTH0{ZWp8;sM8dNXB5rYyLQ4UV0 z92C2D*)NGIL=05J0!1K1OzS1adC^X38uZOnZ+AhI1ok(c{i8iE=5Y^ma--`i==macniqsfxoC#aUMO1;=4P9UmlQL3sPx&5MYB`#hKyjul}y zD-5n2zOz=&V7`&G)6h4|xxk@F4JCT_P&;(k^Aq4G6n^7?@6M<}BmQ4yGXZQ^X+u88 zNe>=rr|xJ3hoAc-$ow2O`#w8x@4**Ci;&%$IXP4KaHyQd=7(gWga}QD#cLD9(F9Ds z`G2&}PKKlol~U-iBBZZLZ+3?)$vOW~z=G>A&jJu(63>$( z*zX|yMo!K-Y#3}#cpk9E-1lLh1ARrV`QdjV$so$#ow_#{gax|!5LrzqtQ|_Q3h(%2>2GtF#(}B`q9WiHG*^X8gfY45#KJ)# zj?IvH@}2L9+P!Bt2Qo*7j4ncSajS|{awmYLF^?44tOk%!NMWaLmo$$!dFRrL0oLcK zrfm$QP4sQ&-@V>3O0QL)(=6u4?C9j&J@veV`WhKP0=TcYK#YjiB2AtbTEA&Y9w^}n zb)-^{1kA?IzZ|Av#?S6W$CtqD`5tIj&SVgK404rr4T{6;H11TlHB=m;TF(p!T8f4> z)6Dc7;iGKD=K|*03rQUZc|y$o8^J5G;aud0`^}$D^--8n7Uixk!{?~n8Ub!QoQ8qg zxF4Ees)+0u(54!X9-acMk}puXCEWtqE3*0`KxDV3kYqpYH1M11-&TQ_;;R}Ch_~hp z@48)lbAwErENuQb?Km(b>=A+&YgD z?-^-a$t?~xIHuWyax{TWjQXtXSA|ktA}((2G8EtXd56fWpCHuszwP!86e8x^w#B>T zd}cpI=AugM12E=q)uUTM>K zi<=&YtxxOW%V>)>l@HYtI#kC#sJi61+Yb6wYCtKqj8n|1`~UQBBu3sZ!XbWh)gu1X zX!cTqB*?mk@-E3H*|TTF8W>GBZMDy;m%0E3;<>kPOwTRT)rKtl;v!_Rj25tV0enMjK|QDIIY55eH#yCj z>PvhF)EuF%pF6o`xEp})3VRKEqEh0{OXSZBgwS}256%wr9{Rw#nBs0}AEC|fY|uMl z0s9C7`zD)zZYY=OMP&_0wokK%O#8rZ)?V~sF&wjM(1s+W>;nOe%kC(RE;n!svTSPR z)tDRG!!)u^q%-%aPS<~wPmz*)SG+E*=DHVwNjVxA`Qfa#bOl83zUDLXg|H#|N8oQT z)GGyVmMBgGkHvS*W9g$rMKH5TT^v{~AeNxaFFHDLW2WfvZQ{Vh=-O>oAMJ8h>`*ho zb29!kc-}Y+?>YVhnJpD3A}oZ(ZON{*Ec)Uh}n2D2zX5K^7|0QM1EZ7 zM{{4ZXx4$6@?pCXBJS+l@dmZ#Pd);(KN0k%-!>q=IZ;sc-%oxZbY1x^So;5}SO4KZ z18ntV#h{RI=IVu_&7mwp5I5rXBG;(&R-K+K3xO6VTzYRm=G~b)Db?1&xsT{ zH0d>oea^Q#5ZMcE>h{yE)B2lJ%vQ=_`GqrZ=z}@#K;PeonU0}9I`&WyYOAHM$6!;k zH!=lX|zRX}5DhHFa@7^oj=Pt??T7I!}D+CXVZ*cen5;7_;yDy^$NrnH0;)yO~kl44b4*RDxRI8UN(4> zq*y!?QiddE9Thgg(A^SRtCBB<-%Bx<*iGy=nEdg%)GY|&^EG((dp?YLRJm(o_-XZSb$KVTrY@#p~9y=eNEA6EFWm*O|0X~zYQEGaK}X$t;?ERSWnbr$1d zO0Zs;RCfqu^|X*A(40TCtSkr}ocEL68m{w$Zk7MH4~EOSnwyS|DegS|q1{YV5If$M zo`9S?U-80(>W)(+{T-ykes~tYT9c*6CI30HAx9K>izyIu$b>C8o;S-~(>}hr?!xBT z(eQYr-tnlL62%CGGS6`8I{aM7LeeZ?p$BH+yZ2J10zTuQ-MBk7IgIDE=?Q$bYLBxg z0Vgq`hsguC>-mC&Q*MX+c`|O&!e^Kt z197h_3pW>iSdU>L8Nt4`zzOkLSE!GsV2Xv`B%0C3Hh?da8tnN_h*DEP7jv)CO0X|f zg;38s@@7g=o|-^_2R-l864ey_p+QZfD;25NdO20w$&_>_xw)2_!xJkI_&kFI3)Tob z`&*&VliCa?ddtHVU9cZ`h&CMOeqA3p(0?!bK9Wd#gwI5tR#*#f8BeX=`Ob;@Uz)Gj zE=Z{Pp+S#h3|8s!=SYi^VtdcFr|(RW(p+0QrL8nr@=c}Hw92IhF3;Ury}kP2yV&im zJO~4EjwAvtrnz7MYgaQ}gNWM~s?kluc6ayDZJ7sSq4~;khCZ z({kiefEfO-l;Ds*m1ro>rmu9E!`@o`PgIs-ExZdq$Y|KZ;CMe1<|OW@h)1nL+JyPP z6lKY~mKCA!CdMNoCeaw5Jkb~XsY>t5o%l;XQ=%?b13EAtnLDX%=#=*F8fVxQ=`j1} zqSS3&yQ9TAx&N+h(_uIIW(ORO2|^sf5u&@Uah-VMKdaVw_3N<)fpX(Cq5*SmsZor%cQjafJ|_Gog%TZU0<8e-t_}PP4-I%AFu0Y2Hi*@2;nVNb^XLcYa??I&b|Qf+>3y z*?brzYI793!fCuHE8g9Quc%Hf)z#YhF;b5uL{C-|Ia2u#V|^j`8~TmcMxACve``X_ z56-O|u58~=d+Vu23f1J%hB_Rt>kS$5X>D$3vt_P^6=@XnbY{WPy6+;Mc)zeYVbo!& z;N=zzvEU51FmJJKLhBBrje`qcCJbN%^44Y(+Y0+B+iKgu*_gf3ligAxv#J`mtH8Rc zhK@YKwKUe&bmD0z4VLRAx+h7w{#HjCx9pE}s#32Z(!LsGo^7o?PNXT2Ji4E-Bjj&o z_USMSxLLtvM3+s=+vfca!>^i7JZq=Ho~t{Y4>+h_J%YQ^R{x@l8Ul&!295IiW0EAu z^5IuDlODSJmJjck9tUdYnV^Tw>|1DvXze`(a+Q6TuiFI5`upEJqr?r9XF;e}$O|M~ zt1V<{O(~_L#|0SQa>>(ZHaFB!j(_Z+4=XOo3Qv4m*t{G&<^&i#aa4?I%nwe;WGBNC zio_Fp3Y&}XId_B|0y#kWT&(pCi8&;zJy~BK=o5&q3Kgd+Lk6#M6z zi(c8c;N9o&a5;7_C-QDMh!0PXHhl?**G`P|j616hvu{c2LHuM!QN&Uvpn+)C7GZm~ z+S>J`oC0_+EuPqAkie?4f6#btULDHd5fOEg-IDX4puzlR1AF!Gs!Tg((wj*qqmg}y z+H4-1d}&|zrIi`O@$@%$ZMM5CrvJl`dTVg@7K`4I?ZFebBl_nXfns(oT$$n!n9A|&M;~m6t-=_!zW&9S_uv-dX!L!imG$QvLivnAi z?L7IIt(6>jlm0w*lXsBTo1%qm0$|)S2G6afB-j@I+d{=G9s_xe4ewJW)C-3-+p+$F zsEnUy93v_%FQag!6M`5>_3t%Kk1)El@&Og?ez=VJF2|;EG&tki{ms;b`AnPa9)&L(Ki|Uy2v`AUJ&};cYSb%Euub=Xyl#y;3=$azc~{f1YY~t zG_-ubn}*bT`zPRyk839qXL9ME53X=+o{|o`D8yNM)*J&}`QCOgFiC=f94r6km2)4y zzX-nLV`10iZ{sKTvo)ZBY6VK>T?M+5@N1?P;BHcit!qt%xu^e&ez6biEyC@)`&G1o zcnWk7ixtKiS%e%!&sUl$m9w(T zx@?|rbBZrrg?)+;tqu>`>0E;0_xsn7dS8#K=+fSaWZB%NdvqxoUbn*&z4a4nip(DH ze-wiD^%ak}$>4pFXH<^^4n&_3Wi3Ee74qdk4*OS{0-C5~iC(16DDIpYjGdm8QS5p> zrY+dQB9q~H%7-3D7kuztQbcubm%!~38Cd&dP(3WD(IV3V<4QpM(=(eu_KNccpH$(} z8oP?XZ^UD^O?CX0#g9NLkNhgzJ87N1+zvK73y6cDa3Q~M_H731*oQ<6#Ij&78!q9m z|6iMLgq_of6S4Sr_nt3RJK)$4r=pT_{>ZM{h^&htpYZqg_0kmV&s)Rmv3T9_I#{50 z5bqZkTU>-5Z>a^8zuU=f9VGvvd+bvJBtm>ddy5g3XN>YT5Ck{6a+n~rUwBEOvn%bU`#?4}4q9w24v+Hop6Ck`=faP@_U9ZcvBMz31xRB>dVB@>ChvBq0 zHjSGXAr$kN3cD`QkgW3%hPjJEK%nH^>sP{kdv5yGTOl+%w}COCXJ1}niq#nyhH$9Gi{ z;^{&mPwey*bMJxG$8<%$fOr8>14XD#iHP$e+zk5YFcb(rD7MyNn?Hyx!7to{F(O5I zs&8z6Y2&-70ja#0u57QP-7P9yxCcX&iWnMa=mm6~9)}`5)>2*9NF(mb1X0n;+cu=S zLQ+stkf%==Jud#0d`|^^8mp>GR6iW9cn&IdDXB5{?}QgJ&0c+n)H66Lk~(?p!|ILr zBEK&%XZlp-ln+kJ?FD@MZ@6{36QlMy#6G3w$Bc&N42~GS9~XLa021v<)=AXXF(PTQ z$TtqaVmXZ(--mWm{@!_i4(glNW;4;D*$H}hLopnFV-9 z-l)_w_rqy@JZ~abVb=$;)YZ0Uh+T9+W5j+!y}(FuqeK>5<16Ous9BrU` z--`exH4n}@;p{ZCg=k=iP~c&D_yc{!Xnbst6j$j>7eUCb?~Bd42;)ux&mC7rSf*cS zeX;zZtoHu1va52ofQ%Bs({M`E-i*+*|xro{fLQ?>Td#(lE*hI^7@FI zGeSzjqJK;D#BN_iFr%!QO;24Rb~J8<1!RHTOf7CBIkwSG0a>bYl!dxcN{BgM z!}&rX$nH~59X+DknLEPjeV{&mTgDxk@=UK45mY1CaABD+&1x-p(X1=f;8?a|bgBL} zZ-~hk{$kq?uD&Pj%x3}$yF&L6;wPq}gnFb#K^5d}uR;FRH>o=ul116Z0#xUkrs~ua zn^kSnN5+h(^U@lJUEmIo-gQLf%rn zytRZ0L~T7F0IJR^ji(A^1zsD&;LkGQC>PWW5CGy z_q6ng{N5qQ5vsL4^D~we*2ibv>ws`>d;x$344S(bSNpU~RfwodeQ4|h5e^R$P_C?} z*o9-6zpPWPoni^g1>mfunWikkfyF0Fc7ix;IJA5M&Q`|-Ay{)7~rdS^;o z(}$6MCkZD>Zws4sI;R9|Xi#nPY#t-IS-)1^OfaG>gd<$C73QJ7Di*c~ts6vMPQveI z%LDah(k_$nRt3)xmF+!oyXDZCsBsV$^A3jDPXi?>tFBz4?8fXK!JQLPpf!~MeYt}i zi4xicPdvAd5uyU5H|Is^uYMrG?_#g|t)s5}%C75jKpyKULWKpb=?On9s)Q|3!kKQj zF!?3DT~P9~rox@T0yk|>EJ#N2PjiB>N^J9B7C>YUo&}KAaVxyd4^( zi0rk}wt;wsIP*_O@1@^$x&m~d6Z;yLFh{abXrEEO6v+4d)+#)zUGwq*vn_Osty3mN_w#tesOe8Wq5j?g^NTGcDy+ z)c-YTG-jL@01ya|G+S}D>*1LD5%k2XOb(X@`eOvpY9hZc^x9X0PNGTZNosI!S{>&^ zubc6~9ncCreC?ft!>wCP4i|s*i|4aA-q-zuxL+p;BuZFLt-T|q)Ede`*tlj%p5HT9 zCay#Y(4=!9DKTmO1)bL!eID}IAnbyILkCFudd}k?KfQIg-C}4-uR%}<6|M?U8QTO+ zf&SQlN$=NpYt?n5p~C61tj-hJDdR+Rih(HM?`YDT-y!og+XSMN zEo*yC3bD-ly8ey4@HYU5HUphqd<*$&R7(nh$om^x`Qql_3D&X0K3O&@&N&#U?Vf)#0ylHxIiRS^%)6v>!d&% z0_*jaLJhG-@y!~3K8tm?K>}kaO4yMizeu9BKY!bHS%^Sxzp$dr0CI*^$@X;R{gd}z zAQYJL9&NDK)Hf4~^;8i~kj+i+JgY0vle6jvJ0yB6ITp@U{KA@?xW)Pve8x&BHj*hI zQW*DK<^7ZvCP+#jSS$Ot;A5_-yzHBvRm@@&%wOXaIE<}o@!X!z^_D6H@Tn4|qU1k) zlQ%o3JUB*Z3TAKKGFoHcS;>fVcj84a->3R6>`6SFjxK}t$WO9u2(!tbhIhZt76OgA zUVFvn>g;H}FEnIE=#^z52AbRaYd%6fs z>M5J=H}uoUi!E{21?=#W=obEHgPGl=z=k7SK6j);tXza3CC|{MmHmi_1BX=oedhf= zt2XJZ^zeApC9+s$`Sn;2=G+SUTe84?Dmez3r%2Ev+a*729x5bd@98=n7wCaL_*zY; zRiE5E&Vk01fM!wsTfj8k(Fb&?wCji7GOuS#yfP5&AuAY;-!I#jFQjz%Dm^agbTJcG zDzzK`ni)6i!;YCt-|NK=9c1g;70}wSUBnLxRa}xMc+_!E{|;b~|;T-nuGK zoFe!-@}O-b@=yU$4}=Lp(h5>YYxmm4&xx%ry1v4cPtU`Qs9OwWw-Dr|xLILtv{UAu zpdk}}8(z~s=}PY*Y%*h&@>TBmDy)g_`|enYFVB&;-;)u_avzQ9+vm=H0w zawduBCzMOx$hQTKE@huE43%b=%@CRN6D%Ze02j<<^AKcO3}XGASQlYTX)z`5Fxb$(A7pvPRGdEj>>16SCIj3j`F6%;e`n>ZmNHQX_#mFG2H#F#t)6BbXB zfT-*Z@8=%K>j*FG63=Mq(RhN?yV#wo{Yun7;8T_O_H|#%O*eq&7SJIAWCWC3XZ1=b z7MnKG9ODlht_eRnx&M6i*?~(R?gCY-Ax3e==JKFJOsKA#%nQP77h}Bw|EUYc^Pfz3 zbo+@Ih+j>I@Yg7+C~~sxZXtG>c|pz=j$?3p)PgX^)ytF+c%o`En=S;5nXPmd{|#R| zu60nbDOGu<<^t-H1Y5CfX6xVfpU*R8EB9;zI4+hY=(fvrM#E~*xE495&-l-|Cg!7l zo#-*!0y&iHeLUCGNz2(*Wz}> z3iA`X9k4yke2=qE?Y4T7-FyO;|iBRZD82EZ=1Z50b54@*rQY3DU1#iWi-tJ zg`}6N9nD-^o_Ts&$=lVKVj7Dl#sNPWQQJcYGJX2N#Nw;phv;$rHZA3w;uS7|=n2-_ z^(e_c9pHy_*){8UV%q$s|F&C_Ti3nROU3AM7k`(g`?z&BAm3P3ZC2d)W7Fr-s^x?~ zk8bhesm_`%jH$86(`j(!x8LR?|B?gf_r$ds{uX|x*Q-)-Gj(OABttZYym9S{S3aP)4H2zUD5PXf99R7?l)vjeaOcS1>(1hYoihMoV$pgPa@VNGmAxF3u=?=J z>_vU_fS#yu>tCA|9ols|wen-9yiZNG7Lp#S_8z|XOAxB^`kljcQ(5qEs6kKgP0erl z)?^9Njk0$2Cj6Mqw1b%${ypu~=^fP@e?otbty;`CbeA*6WN!DzxW93Ias6I}*NM^( z)$tsO%3ARqp$SK1el$9Z1*)BOFrK-Du&$0Rtz{anh%L2k8+6I>=FM?ks$^gEw;%-d z?w%hwJCUsg?QGy$t;dfBU~a;b_dASmKA0mKM3nA_tKRfhjl%~DH$l9 zo_^!PHQ}Xz41hjl)rX6VwYhBxSpCX>Hz(|6*lv0TZ^sDt(@M^tkPMQdp#+AWEwchp z0f0w1VDu8nL@V!}e7R}AgF0DLILi=B^)f~%$F_N?VYPe211T3T_z*xZ!v;$rW*8&{ zam=}F(tv`WPVfEJZH;Em#7Ke2nae%f#4p@@Cq)B;=L0wO+OJv$g8X4d?nw-SCG522 zU-oWG{5n&l0+(v!L(lE6M$h|buoqs}o2R%_%p!X~lwK-5uZO2WJ$EDgXy%C4A*~2o zApwDXDus+PEpV(~F(A>HbqouF3%eqQk-ZqyM2?Li@+RmIU}aOnWjP{zj7YL1;qY@l zcR@wKgI~;YZTI)2{6y)pfaw}fo8~jc0;w+c7q|9Roc`{RQjS9yqoTWIkH$&t$a?Y6 ziP!={7hXqNq`(uUXrJ`**t>^rza*+B?wp+uJU@hHQ5Xjp2#e|6Xa_K&^?gD(to)oN zpEV6Cogue_u;V>)m)rP(K(G%e{M;UX@GHDKK^ysXzi7j_eLy@S%{$w*yl*mt-)iE0 zI=}=z4|Q^LdyK?)6yxbFdoR&CQLJn1i==jm|m{6PSc%lHZ3XosCiC_6iDe~vG0mIZ-$XSUC(!P~tQ za=$(hB9EG?yK&_O1CkAi``sxGcd3+T#16zTn`VwcxP8{QqBQH3mM@_88F+WR+f-40 z)-QW1ia69=Ml9p*FehCkIU3#~ufNl}3Ou|~e#SX~PGq*$W9FeyJJ#DC$T`R( zNSq>6luhZJNJW%_+|%D};EbqwQ0UOy#}BJE*rTM6M1xD&WyUg!n)t2!sTi{vR|M|{ zMJU>MW~XnKH^Zd)l?2bD>(VizvN5l!?F6iaK~=U{US;jw@pyewX!LnG}64=nPq(fdrv36oAeEx_kl5Al`QA zm!r;m>Vaw54e&qV6@D<2a$zLcggQqIrV)wS@aF)%j|YO}SNobyZN|V?VWkq1z75w% z@n#@#0+<*LfZ4{7|8vCu_kyyp4b-|7QJG?9+j8+kl?=W+krvS)6=+M*9iH6)`evG4 zT*>X3q37^k(zH@0t()Nxh0_-ykBsgekc-*XZ&bZpGHN#jDq9lf={Zs1_N!wp)wnsD zqlkMLK5`6RIVrd2X5?Yhpuf1e@GQh<0RONgfpPo$Ml&M#n{BB3f+{icg6U#i3gQ`OqV_ty(@D}(H|gagBoktU ze&bww#eI_jQxKUivUpuR5)kjfvC#dOYh^z9k|yu`AKo*^U(1hb;2H43Z#crlE3QbO zXy0|CodgJE=euP;9~gremR?b#;JH*OgrCM2n?5>1(a&M1KK5OXEn-I;|CkuU`Tkcw zEdflPnM&VxIS7pA37dN6W4BHL-0)#aM#qeyutZfq6jYkgospmAH z!-{h8#Bh6rVk9qFy?~j%3 zr)e?XwECp(!sf=C9fJqBL1n$y7eUDQ>&^S?iwCN99;mt8Ij#plg;Aw0R)M=$Nl9Sd zptCa-aT8#B3bf{zEmzg6bDuR&I(#a~tu`CZ8Ho;)$!w>kqd zg>lk#0&mx@iLUVLzAGI0lsA_C4K3hj5_mlAl*(dNR_Pqw&);-M3g6L3iF3Jy%LPOo z@(H^L+J1i6y9@1LI3TNm;ptYs%qu2P0DR+hMP24ilsF1`yejC~Nk5zN3_M8x784g{Gyh9La{a6_NOE#iAIUGYq<_Vy4oKuz&alJ30STA& zu1iF40}!_vuWnTl{9Yn|U-GVZ%HMyS##0mEG{8)?iQ_8&S>ZfO{|{M1f&6fnAfo;z z5%1=#F&m3_)K5q)2I^S~X2bnG%Fc)qe&HUtYx$v32`|bdyS&o$0D85X9YbSzPp2G> zl6v*D;MKqs)JHJCRd>r~Rfja|=A`yJPy~%qFw2Wu;kL;G8-~AXJv^_EU+9};c~IHBYtCxl1@MGSXLOpOwOGZs^}{Aj+c zG1f~4hj~Y!tI}UFwp3B3o^A2^zntR?i=HQcUgsLPe@YPg(%)5S#o;lM)Zx+g+Vgv> zm;$rouJ)CEZPwT;h-dZNl3+;t@?i5#yJ`U6+4a9);oQ~K`o z&A-x?CZL({6a1Qlvp_q44`BTv^F;eDxNLEz+p`1Id`JZU=GK+T;2T>PtAf{02wRHE z&o-I{OyUyMCoABdo7qW~c0nO1aOn?DwLM({>J=uFuZr+!9tsY(dz+zh6a_$PM3|+C ztPWf9&{y-Z^r06E#}%G=8ApLijDi+)&QIaF)49KpWX5FIn8BTe1Jbu3MgFGMKQAIi zjs-dSAiYwPG$IyH@>6w1|^=j+V=-of;y6ZQ0n1+rIo3M{S}{tKmpP7?r@s* zuKB7M34hc055X{|>x7o#QhPT`*Jv;|2<>lclO|Nib~t!GakS|VTqracz3fngftp7= zoy<9g7k>85{=Fu=9Dp7$14#7|F{2^5@|QDfGnVAM_}N_d*BHq5Rn&_IZk~+Adf`A`ip)8e$u+IASe+Gw zGa8a89-Il--xX#GBByF^|1U0^Qa!DlZkv`m%Wb3Y(I5!r@a{f)`S_(K2%2ioJWq&K z&d>nYvBNh~QN-_TaACX8eHVR67yUvXJKI(F?)>N*1R^t#_Z16$fcqh$vJ99+%s7!+ z{o$^~!EG@`)t)Qu6+^OkkLws`p=LYzLcM3SQ_Knyfq~D`UrS^Q*fdTzx#U_mkC}S0 zfaKaYHI4R<0TdZaq!X7@+|BUCCObA4<{sXC?06b~m7#@yU2I*1fGZT{D0{8*OsJC}Cwi!?>Lma)vlweq|7T`a_mXzp2bxa}6-61QpFZc?e{ zO!neKT@t6FsXI*m8WkVoIJPzM&&xOSZilpjmi|Gy9Z{#<>A4dsS zG}XYAkLH$LDWa5PK8C4AxLj&I0sqG8QLrXnybd1w?$mYf=#XJ0YB>+ z#ES6R_=uFJ-xj|;SJk+Fyk1AJNu=#XQI~YzKG4}=DzZ6s!2`RJg?^LV!DxDz^T>{u zsrPGBGZ2g}eM(d-Vh1CLzc=m0dQtb)H>4+@C6ukXiWMuj@{eVdZ<|u~|JKqn!QZuD z&25nM*zFzL$$z`ef@0sUS<5pgF%trAHMk0#DnCts6jCX1>^4{HsbHzrx+9||9w>s? zkXWZ^v;DE=06!wJrA%b51^qna8`9AIP8b0Oi9ArOVihvKD0P0636HuY8IU6zEm7v& zW#^1QE&tT$+r`r_fhG?&JqM5jT!^v2Lw_S&XW^+e0GVF`!K>uDqci*$J^ViKqyrT) z)M-2LE&Q{(^Gt65SPvI#s&EGCa@N#%@7oeUsDvj3p2Yy9E`f^BvbiWLeec`zz)sJ} zE&bW6K$d&1r}n-*2hZodtXPCcNI)wd{`L1h zwN`k_4;=f%4iLKJGE5yhw=95*N>!g^8S2QTwB`R?^#A%rHz_IE(V1@__;!MS3ji`c MZf^Ko9~=9>07|dDpa1{> literal 0 HcmV?d00001 diff --git a/static/tabbar/shopping-cart.png b/static/tabbar/shopping-cart.png new file mode 100644 index 0000000000000000000000000000000000000000..f00fe6e09dda3673c3c6f94b91ec1856b05c9f60 GIT binary patch literal 16869 zcmeIac|4R~_&dhiwv@4$|-eV^yA=a1))=Xt$;f7Nu~_c`Y}=UU#^`?^kvmga_x^t|*C1Th*L z>7R!nIQT0ZqNN6Z5JN|Iz#p){^M<+*uAh$pL4uI6zK(UM%km^$vxs}}!TNMdm*Tag zSOx<|Q-n1KhjOB+<=5DuX0-Yp!FO}9$4)tGUTS8`#i8C<^|D>M^pN?eUkgl*;A zruQwD5WJoUgLMVy%oiRk7plu2IW^*Vq3B6d`<}+e5jDTIg%?E|zuO)?udGCBupl59 zB@3eXI()2|^O+m?E9o~2BlLj$?+}KXeh^ZsU6ejbdJTf{Lcbw6tsokLGjbHeP;Nu^ ziibaypr40tQ1VJ3C!&Is7>Y)zTbJhbo2`5fpd& z(^<*07sK3`Ni)z24kBQ@XlkwkQDO2=1O;B;pY>wkN)V&8nyCSKnP_UXCix9Cf`SSK z@!ADtB_A%65sLUfg8V-}k>pyMT@jy}3lryXj!KoTAM1U2FY+?!khf3}iKcdg!i$EU zeV=e0E*05pDXShk^Ha^()4WZI18p~`PH2fakY4>nRd%MY@?9C@OXP1{> zkcnh9zz>3%ym`?_zXvqLbMXOEJkepk$agrGJKZ2;^y}zewbQ|q6+`H| zR=anufU_^{RYUSb#T|%G9cw!tEE+E#H8gN7Eu^og-?Mf~uy=f9A;P6|DE3D*#E4Ix zdg1^2pzL%{@Pw24r(>gSHz4LiQ_!X4orJb~CUl#A%T7F7*57pQt*Y+Vzsz=oY&w_* z%DhP^C^j|{00@g>0wX?Gk)Pu!H@5zP%yK~lp5pMML z0feAd39xpI7=uz9Y%!X0tzwW-{!zk&;+}{SP3+-t<|LWbMcTBQf7H|=SLymOYlohP z9TiTo#%FxM<`6j2GB(Vh7bvKDC@X0L^Q$6$*f_I01@}|X%0jc`S?HBoVT)W}0{0NZ zg(a^RG|-mOf@PhCK7e6EvOE*wf2wDZ^?*ehK~Zao z{u2U=Ry~l#3zTf;jNH7I8_ktR(Metn?+Ne%7WQ`2BHe}GA$Xj1Y|Qh&#gNR6WCWV7 zxWJp0(W&lgg8v;I0@$`01wIU7{J0{`N?N;H3eaVTh|a)0yJ0=urZ<^4o|W%}p_nMi zdSK*&rk?3%#7BtobAoxKs;jpW<`Mqn!~OI+H#Rac{m*ArpP{P3DCI}f)V2kG;gsBHlKvomfNfZM zT)WVEW#1W1bBinH-i=1lR*nCbCJj&^Xjgz}W8+W|kuA5M z4!4t=MR5ODGX&3p^W0R1@@di*Z+O^~7wAoif=<_RYm5(wEc3Qra8kE-wEb@^5ir*2 zQRw|*(f9DPs1IfdKs5UQmJh=2wF;n{P;NgxZihx@q~yPebihQ6%4F>b=&cWo{hKO! zf@IK?U^}jrL4`|-#?Rx%P$udh&+p0pCzd!6Yn^&#FP(`2x6?a6O{IG3-_sWn1JCM! z$TU4&F@Fku?L*nqKQ?-tAk)hJehMD8%x&ihiel)nHz|7vgukhc!a7Y}w=$qAfVH=||Z63mGE-5FN@Zngj(cps5OXtlXn^3-KQYy8Hp*@PvB za=!^h=ZtqR&%4qv;(0iKJ9T6S)hJ+REJ?bdj9Ixg+%7pDgSy{->CKOKqg*-f!coxc zin4*l(ttKp@<~+=umwhr_)XzlEpfs|7U7tuT%${6DU7GorEp2Yc$NP$J=0mRzC02C z6em{)6m2`oepN(YfE42{;{yfoJfVCfbu(HpcJR$@r+!Ux;IEaoUWB~t)qIm5-$f3g z43UOdPA|fUSXjmhv6dUWXoZF|%x*{o6Dc07urwoa?A82{y_@mYanx?_b-}PXXg*S; z`*LBX!#(_F1Ch@E9e{;ABUu~JYszn=SmCAz$H}4C+g@ia2Bal%7sDj*nHvy2;tDbc2vrvN;JVX8fnh4e&C5Czmgw?< zMdg6D=jg{daFSxUbseYMJ!ci3+dz~POaV?tzP)6Za=GN}&PAA&0u|XbV=$Z(_PsxE zIedtb5Izk&gXQ4Vn$v-l=igZDWnM4{gh`=mZpWQz!%tNmz`T@zO$~in3E)_OaZvUs zk*stEp504S85@paj;0kJ2S&wF&#lT_ENFx!`J;IDW~V04(BCh&Wyy))h7c9U*+EfvMUK zZ`{exI8$?({KU3EZlS$(3UPc4bM7#|*} ziH0lW(t{a!F5s0e%ea>cOl5vWLG-x#g`I-3zZ@DeBjiYOM0h6ral_`li%gyqcD(3V zsg)KjF~Th>i{2ozHFnWA3%L6@tNy%bcGQBx(!X4DoHc#QcC8+nKyq91FF>#uk?lG@ zmMlyf{h8djZ{BeEf1j7q`fK5-KcFCkPnJ=s>rNe6K^<(^t0v^VzDUL8Y2o9SfJ3nkLYBo^+ z&kXg_BT2K&rW>@p==2{yTBhU(wdvU7K@%bGHgk1oPBFnKd4+3p%c@0uTGqB~@`khW zM%v1!)N>}e<mw%;1{0qIskPeW7L88f3JiG z1Hnsax9b~6=fhi(16f3*@fNRpA>Hu}pWRbDik=^TH75whngxru+Ss zZW?=v%OL59hwn4_R65q{4=-`G`&gD=c+sO+;8Y$bR=~iB=$V@uVs@V>{U*PMC8s1E zI^;akG9Ep!s1p#SH~icEz4lx_H*ow08mAMxz}d@|h6E)c4YT>KejRz>;vv%}MTSF& zQYx-Ibd7PFH>34e1#;F=#@mC`VgSe87iBPTe`!QCfuOSIAw3fKmvL^Ih8&Ju)s?6eKDELIbrvwlSUgVWQ#g{^wW+EdB* zHz6%>|Gn)Ilq!}G(ZhBmJ3Sl9NrXL*j#@V$IF0@g7_PG=9qSiCNuz%^B+ zbAO|~dO`zEt4|k->*Zci?x4yCc_+i?Cp@Izr zzu%>bH9tbxa(%yasG8zyLOd3h!_pB#Je@nGQR2VE+_eem{-Fc$AcV`V`TR`7J=v_s zbsaRvp064Esje=bRNPxC`-)><&B!AB`3LDXJL3bL`NO{!pPiVG;1^idoNP_P-Rxv5gR~=_MIYnRmX~M5Q?9p_*7OkL z=;EDRD>S8-qW0oxfRAF4oe5iA7}9&mmOJd*XsykB=QvLewOj1=)KES0jhXzn9o@Ef ziUqv+6yyxD5WTRITJ|RHy3+PH6xiVvwbjK$#RBclv=B!3oty^Z+&_7pG;JuZ#;C;h z>t~OBFZASJcBK^^3i-}-+ix1^X*-*H$F3s>3oU`^n_>QN8*snxke?8jett%CB#Xds zah-w!90|{KV3hOlS8=}I{jTqWzCi6Kp_!S>K8-6DaPw$OD>35Z z2%6(`=~-r~KMT5YT`tN*3H}55Cj+6YM5z`5miUX|^$p=6;@7_1q;`8LTGSylGqO-a zyIoF~&=#mVo={zV^Pdd5c1Hxi;y(Np_j+N%eScwA?t$GAAgpcFtOk1JtTi3Lr#Cq$J z2?Zq^yt&n%;Wm)*vY% zG?M|zhvoOS(mnSbeamfSkR(@E+a6}es4}#Lx5*u4DbEpkXxy>7nozsliSdMD>1TQy z3a~-J;Qfm+*K&W;k_{ZBI0KvV#@q?AlfeHI9}n`uZ;n8ea}l^Aqi}yWdXTpyS@=`t zNzL%{3y#>Az^!%|9G|$x&9m_2Qwy?82ew%ZvtmvL)ljZ$coSUz5zD+7u6^M96zQnU z6kSaP#c!v~vhAx^{B>Im6iAx1C@& z`pLoRXUGT|GQopNL)Q!nD?eh;%l;W&)DUcqV(RP!LNNdn+jvw!F_M$v>FB+=^7a*p zvyyPedjx&iEkHjUXpgz?uGT<&WupqV%>TN^I3b;h(d@GMK)w5p?mznq>}l0xc2z^G zUoomuVR6Y`0=&A}R;qVJO;|OBGwU%Y*+h$BaLzyU^-7i1*Bn%o(UCVz%V4y){oQi; zkirg*tHg23{Vv75V0kKF&fwj`EnnRm4r}LQJacc*^`FqtU_^w{g{ySm);!kejZksI z6d>qn%jAFn<`qNZ(+BnL6LL|@DK%--#c*|?7N%GVU90PwA0~F14h`R!0mRp_Ig@<< z-SFNZli`mP(y4$hEqj^}YM9Vl|MaJ7)V%hTB0o2IwSpI6t0>ppcAj?qar3b;&eLuy((c)+AD7$7L}Z_7ExtHoTZ;_agic8cM|w~a;NwY7p;Ra zaoV?SeXZzIB)Dp1`VhvGSiOC7S6|bqGU(j;DQ4xbZ)8U9#H+=20xQEqaII3?p3Op7 ze3nXgP+mjqD&Ar0M|@!}wHxZ`FQzr8n9O>!FxH*^UGLtYgZ5G$5;{9_a;8N~gfMf0 zS?Y#rwq{3$I3uF&vv<`e$?KTp&qM?O(J2iqOr(^1jCJkBmf538ii^Ir(nKnonc?x{ zdDO+aqU%n%W#;}SG3BdP0&mY}&@3mrn2b`8yo==I)<9v~f6)6{c9g*~;+`RcI{_4xj4ITv(0c zl(M|C?-7pM7AVT|Y-_3J_XvxF$}+=+jr!aP^Ol{!&vQyAEvPvUmy|qiA*BO6WH?a# z8(z5dIelN!|HO;pPmmTPVg~oc5>+&GF`!LbNqJ;boI28+%NV!2wi~`BB_3G1H5EDog?_o?BbuMNLft32}DnssH5Lg0^r7K4Z~`?tH-E8&A!nGW(Yk}7ujChRTDt*(GICJL3rAHXx zUv1TtfLZlgB_5+_ku5yaSo5Cj~q87^92&RCNszt#KoRCuFP5uMq+V-&Z3vGZYC>9>=kMaL=N8y$m+ znv(L--}QjnHtTb?C=C9|BJ^-x6;cM$9xf8rmdd&lA9=Kj8~8dmZR3M9{%_ z2JkN7#bT6kupCU4!{p9 zY#?G>p5W3e@~iI6t}PV9my7st8O;4ccWS8Dy-iH;*E-3KUV(QTK$soc_c2s!v43iy z751FNKLN|wlg_;P^CZu6Xzim2w^=6iBm?BbnzPd3i0xoZcD*yG z1Sv~cZKq(IY#kic$IwX}tO!9n{KnL)u4tBg1K-?<&NJ3pAPRgp6$!(|+#}`>T5}V$ z8udGv$&{>R7_dP9T$^|?ukgZ#aBY>aYxB>b;fk+d}XK0iL;as!MheBnyT`54;rP3 zaD9yFaan-s{9R6zN?pG!n8*OXWnENEJ8Fo36s#gMw%K_!W>`^ETQ$KU4mkC*x#0`2 zNB|ZoM!v@)Fxznk#Z18MK6 zK8`BV!0+DDHVFkbpV>>1S!#2e8!`k^i8+?BWshYtH6ah2*cFHMAq*)34H$>d$93WO zea#8Hp_OQ`-HlXKmX-nXtctMv$^eR zO1%*$NSY3~5J$nG*SNDpKlq{k1CwaRptbw97;+3;J|9U;L ztNw|Co?N(_a`mgYH^bzU73W5*SLW%*Bm&?&Lvy>^@}Qq!X2@WhI^)eUdL)^;_$t+g)9U>o>%L(zXOPYnJHf_B0MEtwGQieu`==6g zD&nFeCZvH_*UUnA;B8m<|1}J6#TL94ajCYo25mq?)X*4hT+^D2~ z@t2KpaTx-z@FiYF6?MhZZ+rx8`&Qlew4=`zw^!$ zGH7DZ9QGhewoI|-QG!$k!k{o_L2~K_wuX<+z1dcRf~)dGR#ASr?T#ZvV-h7Up-ZlN z35j{l@d3lF-g#L7^LygCQwGvJ+GM$zo&1K)t*;iN?~j6oJB6$+dMj#{yfzgK1}Eee z1RGZv8~bcnRQ$;h>`U{$Rw-wI%;R-7BYrS6kKqg*ph&+W2ftkg3wMfIMaAT5o%<@9 zrUq6n--^FFF+5fA;D3Jow>S7gN;cvL3Di`;NwD{BxcnPqu&`;W!lf9I$>;OEf>ETY z?J!m{BbD)*x7R~JY#NPJ3B_5MOw|1E$JzGSQwiX)64dh(AizYVRJuJ21BoQ0W|d#| zt)3Dc3QLy2t3$#sFMO9D*i=bxceo$uhBRAM@X9NLSDldEdFmLy2KQc^W zV5zy~qk0^|U(e9U2Sfp4m+mLSKyY1If@m#A7717px#i6qP5qX&(^!uI7S_luW;@yD zU2rJe^dcQen_^(&r>d&uHjlprqjzrsL<2}Qi^yDQW-zy%%uMT}hF}@KuXJln_|WM4 zsuO{l*28yoGZYH0%J8!u2L2$Bte6_B-xol2!J>V0Z!jbmAwe3ZZ$fCnWdv>EzdK#Y z{Y{??@C1v5J>FvYcdOZfV?a)d#p+INL$E)JDG}gQqq4NZC09{RQU5c66G+EE=M_9X z3oj;}N@I00eCrvRm+_V!iP!RVNrn9-eLQ28RRO@lpY;$=Py5y9_cyc8cf*MoQg7t?*YqqWkTE2 z=8lg;;LRgf-@gXmuzfla{cxrFLfbKlSDMJ<&$3+jvY~q*i$G%59^B1s_mt6Wf3JMn z)0Y<=_hh+6HlyBjCSA6uI3zOi2>)H9_Zm0GZ5_;0d{+_<`Kw$dYy z3B{-rhbi?e09(h)W_nkrurw2OtxwioDF^9-h0w3I2uKkgl$ZvzeVE8QtcqGTqeF;C za|@lfyKh>AZtjjBtSE2$8~g_9uqbX_8nZ=0w_Y~G)@~C;O~`?NPD%#^NvYMp+47ri zR;^mzKAIl2oyoi)__?u^^QNpjO=s)Yyxr2yBD5L92D-Ex(!zkOdGIF}&5c9l|<-pxkKBQACv{Q$8@YzChs2IS_`+BKQ!wbNch6tjs#t>(3jspUqmK!uWH z$v*MZd{OP>9ax)|QtruRH`C4Mhxqa`13>ALDs8#Ts1jg4V0uG4{*s9Utw zGqRTFB_6b4Xn7nc52AMGZ;SVN)tPzA%G2nA#Dx}^ou5clFu770 zRNFwDofEr)Z6Jv;#ay`5kUquvqPtC+p+o(mJZzS=q6qlY&0kaQuY`|B*l|V5T7COr znhF4{qW?EyyHiZ{$tWpBnp_uOnSw)K>V^UUx#oqi+7-mpB%Xtz_ z5#`|MRkv>e?DY3)9kPaw>`{3R?KC0TAEl6x)9xdq*_hLl<4y_%iK`5S-HF^e-%nV^ z;$PCCRo3Q8D8JB~8G{t~Qs%v+kRU9Q=DxxfI&iAY-lywxD21285ez+T=v2h_y}rT2 zCZ~k?v`~N}yBVAk*~8|EmX6pW5%a!ZEJg;v6j%a9hlaP<84-l;I+*181p$I!Z;%by z&fP45B;qRqii_K9uh%)}*eu5j(y86xZ||MpGN=4G#jEwUEvasv3R^}u*vgJ z=l2diBMHx5(DP3X?HMGbgNOj(cN_5{rkvpLeY428JaQ#f%u zI!0tEYi>+|R-M7LNznIl!gB%tJ^GcRrl>rrDas9k4Sc6KA{F@dXcpnSJGI*idC{Nf z4lN!3-Nie1BjSB|9Pht6&?VOL2 z!?W8>c)RXjlsPvgyC#6Q&vU3LkdhjV__DH_Ux9!bgcpNKWc+=|RDSfQNZV?UIB2(g zXz$}b(t1)UAs&Qhlu?P)b)jOSPHzxO@2$NUyn+3Y8o+nQc-ha$+@|0bV9lcz)YX*0 z4lLRRXbMV1s{CA?ms_dRa|3B28gD>3zY5>}{^vQQrF^6(xUnJF&2BfI3JXJ7c5044 z648_k>TzO`$Sj(ny$0%B&Z30Z?<89z71w4bcN zfu5nYw!&MC+BlRS(|s2B4=u;bkxyN$^Xj+LKqj$eM)WXmBK4}_)qvA_^LDeqGUszp z4Cp6h>MPOd^n`e=uN|f`>@U7)qinXGf-25}4(MRBGX*(%22z~r;TKeHBUAEpGsq_y zrCP{U(>U1(lZem5Q{N53fZsVw8EG(`wsajs*nQ-_0}|B~1~ZDm+VlvVh0%m|&?j8^ z7*o6YMG2^rwIU0!1f*Uy{_tSC@r0^sy(gj>H%==-p5t4xl^dz4nS{|9_n1$Lnwp2s zJ{G{5W~9_j9fvH>v;IsefW#WC2rzBeeePwh&EWF8>S{xZ*;3<-1}OB*N$?j=$$&E>`6M?`(cCpGcp)+WH?Pa8}_pHWP>^|7W&de`|jy*%7PS=*}dv7Pg?J{B4Sy4~W zrdX%!{vw8YZ>l4yO~^MF1n<5s2Nv9%UgJ`0;q5K661C}(VHryb{Sn#X^B{?02cWVh zi)g`4-?T1|GjwpAuF;oeG>xS$zDVU7(L&+|H^)mTaoG-z$LUBcgObsqIUA;P*}8q| zXh3dNA_P*980zAC?yjNSg5!>&dwLQWg5+e?ij0;E0|8O^CrZtX&6D6ZcxW;MD|KOLymx!-5P7LqIgkV zprEle&z%M$rn{ykb7sY=hx>nD-Lvo)h%*$lC;9I$E>0y>E-D9;2NBj1MX$@j7tQI@ zVV#^UbVe$VM`T7WGRo2P8WwW^63Eqfr`d^FLKKh6CFNnOAy(7xgwP&i=1 zD{QPn`F0r5<}zDHuIS1+ddoC8{1siOpenIFQE}&8JJ0kh@)xDbOX&z2xXsGOcmS&syP0CJ7w;afOSR!;Z2}yi`f0G7zX1q%3wy#%{OKH zJi?0@+ua7&*?G5|%?LceM$9DyF0xcKfYQw=nK3ER2GKqHTihE_y~MZl3*$MXpyAx= z2cz7mx|$RAK4-bAh1EM!;ytu$#DKAcxjr@vu6B|2{IuIs&wRw}YVFLxQ)JQcYZ9gJ zKzNg|Y7z^Sb2|F-smY_IRy!*-i@=?9-yxN24ox;{uIYNkA~09nveF0j%9zdL`f5WpGGsin@q^Q9N7MbS{q_g*^{6jAe0TBTR8>t)E5d{+#Ysn8 z#MZv!1h(-KZm+7^V*K<$HyglpRmG*UZ#;-sTc%F`Sm)HjMI_Fy6ghs&yT7>~v03!t zAcCQVYhe0Vb%Zl zfMFdZIyd0iD4U3YSN&e&Db&Rin{<8sf&5a0<9ZpSuH{j);)tmCh9B9SotnBIWXUli zMkKYm!=oIm9I6g7>$g}E6hMDho{awscQxE6%1t{>Mug@Mj;!x5Q(~j*{lmW0YS02; zugtPIRlmfw>@(6@P5tS#)>&TkYd_3BM6US9l|9}sJqkP$BWLr4zzI-lPLIcR+~~!^ zDx7;RvHebE%Jy_e1|4#6NKzl_lgL7m(B}}i26E92?GrA%RroExR0LK1F)lSL9Cw_k4!DJKn`1l6Y2axiE(IC; z@heHm7seM$xn((mUWoiYR~iDp&th% zu3ITuae{>5iQRqufM2PFVoL?`^?E|4myXhwNw3l5rjD4aeQ>F`a8fR_p_&Wai4o6~ zoB?d+o^eg4cVgM!Y~JJ^02VnguEuI-pQ-g>gS#Zy{gIkr$RGAi6Yi7GV`q*Br6H^T z)G)5tJf}*NhZE=`ErvfgJkxqDwNFe^f13od+jEzY7vWmfCw*{x?hay}H7~`k3IUc( zf5xjtOOk-}Uh1GegH|Ab9JkEz^She&wkWwiLfHA$fiB4+c{(9W3yh;^6z;F7>$4pV z+qFs$*50?E2zTVdJf8zzeZn5Q@UFhd=`H~5On~=mppwn+5PQ=!?>Di@XuM#LU7FQ# zb0%FX(*I7mtM5~OVZ!RiURZ5e8~4m1?=oxZlFP+4!;mV|G z0cQrp-3OYomqO~kA~9^Fmg%1RnN;KsJHbI$5E46Bg~|P?EJo%a!EQ-^DoFYcM!7>K zwk}bUzJuUBKyyWG&vV5cjuQit_I(4;nMImJ@C^9%&E#F|;W&$=KI-Y)tmN-#MLLkPAJ(}VUz(>Rg8yw!dO3Meo0z}<)4#yz^ zK4H1nbwD$xi#b)3w?X80xPJ^q^KH$(-q~+%~R^WN-#1IZf z#EvqP{j7s_B$mO*%}j62CR&2CxQC;Mo@4*TsVK|99hQOTN=-)?5qZIkju%#G(g@9e zY*!L8)4Dn5XwK7BA?-sjw-zRkQnYuS{uvN4pzckm?h<&r?FCH0`ngs^5AK`m?vfg) ze_r)SL*>Fn59VA~H&P9X-zS;h0F-M_xcJdNQlI}yFG*OT}3iAJGWAG1N z-5b7^kLmB0!Ycf)Kgpknn-2eJaWQYcx@RAmT+sv#JP#kQ@%jXiNVSmiTaVd0 zmu6eMR|`Xwzxabcen&!!~%m`tLG&Wg}H8#K!MfwTdvQ)+edfM<27_e1bQc=d2&^++7*V zO6=cMF?0=Ws`H;7Bxr*^x-en5?lhUPKh~CL^kF<0;~swgLxzYpOItIM z=)6(D#){oaLY`XF)&43Mu}NhbY8nt}d^M*QL4~VR_>mO0cU)<=rE{aL5-7EOo)R&%`5AT=%Byyb41u|3vrj znUEJ`@c2(9i%ZJrjRj@(>xChGxPvkq3kvy@1m4$=H$4uPLLFb*x_CEJ9m@^S9Z<)y z*sb$};`=)MEH=CQbDB34rmh$u#Tr2iD-6+dQwSp646NH8)@q&?Kd5%(Gp9yIJQsV` zsz0^wYQ@~nW;a^^2(Z~X{YP0JnT4iOlcy}ZSEbShKOcCHz1zU~efUZ}2z7t5RSSsK zzAd6fT|q1qK65hBZ?ekKh}^R?+7u2v`iDwmQAHCX4J$X*lkOFvL`FK1%|8cuXNN;= zZ;*OG8kOo2MR#uAK1TV@2rPhm5sJA*$(r}Ukw zWB0Qizo#B(b3^;zum9XMnoIun(dR62e-#>C$2uN!W;rviLb!4<>5g=Iq>kq9=3Cl)P`*)|zx{q56mT&llPBA)c z=3G~T6jmA%^WJ{G_hQfW0l(oxhLn&k$}jxh)t$jAlCE03=y%x?r#nSlQv83%{1g+~ z83gSxClm`5h!{>awCw?>djbqa5Oga zirn-YO}E$uo!5yOB6IW93UKrkJ_JjrJl+z#|NJ-)>@T%6LpQ%1r zT-M!A$r#SMEEC+K3Y_l5@&#V>#C>V4 zSrZjl>Z+Pe`mJ-!6HIxs>GV2_`ZrH3Ao&@QGMe;dR;l z^UL&-3c}uhLbbl3OjZZog#GQm?@4W%Lp2Dmjv_lm3?@l=+7`7bcfhdY(SKVK07UCL zN#%Es;o{W4^ePPg-m<>KT7lT;qlak57{-|4Zi4udanGc9c zVf}I8l^z)e=grrz1(&aQWV%mx$Jy>FPYRbgS0QTX7F}dNDkUyVQZe}baXt4_GDpS) zpd}Nnp=Qwo#2k0b!@u$FDdM$bEwD*;$~(UJ=L65h?HzaLj@KaXs{=3^AZjdJa?8NY zFxRDVjly&EL7vlz5gO%3H33i0@kZRdkSShkL(x9)G9}Kyhk8t7RjXTW|JM&r%~Ons zASzzAn1bU-?`VnOgOz>zjdu_KhHTMTtj2&^st+x5uRfqW3PZ|k#ZH}ML@1VDIdO=X zj>rNZ+sr8piroOE85w}}=AM7batNTP0i5Fbl63DMkOuB1r6Et+(;kAfn;`BT@qP6n zP&o;LUr7 zJACyD3F@5`CD)ljmD(RT#?ESPg(rqb!DFgC73c<8w022RS6#4(NV&V^IJeCMpL45if@c%YI#%Im-ak_4?{|gu* BiBtdp literal 0 HcmV?d00001 diff --git a/static/tabbar/v2/home-fill.png b/static/tabbar/v2/home-fill.png new file mode 100644 index 0000000000000000000000000000000000000000..c9132a649eefb5e19aab69a4bcab2fa1d2c56fc2 GIT binary patch literal 11947 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 YJ1MEh_Fm2mfWKh&Hje8H*D~V&4<+K{HUIzs literal 0 HcmV?d00001 diff --git a/static/tabbar/v2/home.png b/static/tabbar/v2/home.png new file mode 100644 index 0000000000000000000000000000000000000000..7f9948ecc61035072e254eba9cdb112cd9dd1bd4 GIT binary patch literal 12012 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 AQ2+n{ literal 0 HcmV?d00001 diff --git a/static/tabbar/v2/mine-fill.png b/static/tabbar/v2/mine-fill.png new file mode 100644 index 0000000000000000000000000000000000000000..9f10627e804c99f87cd3590cc03e5284eb36022f GIT binary patch literal 17805 zcmY*hcRbbK|9{`NH?EPck%YMR$Siwadt{|Th#QfTtd#9uN@SKC2z!hs*A^WUj?9cvrY~V-F(F3mt6n}q+)CLf!wy|WIKaZVMN`ox!L#h=G8ql{8cL`NL)6kH(yp;2J~h>k6kJn`r872|e&AVlC4@h1N# zS_2l{)WbskPxJ>^v_)2(^FPrjSTs7i$>5)8><{?I{KrSsjlgdy>F_5L_S6pJlrZ+Whr9-(NPs4iTVfkJE(%#lP6R{ z{=r5tToxjE{6E+QhGkExJp2b6!f=tFB;9}T4H)J;rSj+>YyiUro|4D@gI!@*m96H# zy3fP#2WLszf3WvASTE9A3Syh7up#k%h1bPwTC+%eVfa+ zoFloeq_WDI&XU6`B;P&nlc5)Nkr?99Jj!(YcnTH7n@dY_B|C>$K;8KY+AT zIw$T^S$XKVlr#|NySw7jS5ju-e`R!jqPFj!m^XtiU#G3UU-ZeLEqSLToFbEO*+IcvelOgE_D>et=QnZW0ffH`E?S;uZSe;N?6^wo_Rar8$U9Q z{BxpQ!GSltI0fkC7SW2FF^afqxVe2)f*mTzlHj0J6#bEA{=plFpQ>e7-T zwHz4&BG7hx`6LEXZ&Rb>XGX71JI_#Ud+p3LbWPBM&J&B~!NkQ~n;I2KWx5bdF=Ql^ zoXVEP-Xw`yHpHl@QtprD)!wF^OR7v8k;SCH8I@Nc{$SEShF_yX1K)4xQX3&Z1lMeU zC)R&YD!LCzHCji}O}qnh7@rF#^Pe$&Na%))&T}H%SY@L<)Uh`@f@*}K7-<9@5und? z0&Bfr0|qg0{lYOs&RS3W!(a?n3Y`6R#Xhih_BZ3Yj{TswdKkXx^w2AxtbqrBTmpOZ zWgTp8X>HNt09W$v(^K=|l#mg30T)G);{);s0`3zT`cxK*S8je0WQHghOzMYhGt;Lx zC^?$%pyYxHZ)VMcr19Fx(Q=7bxg@yoKjO537vH0KZtxb244T)sN$;Lh;IZjV>UGQO zrI8Ru<%30bAA82l4C&?lF0gYC^zl*#F| zQn`r{8T{G@4d6v{Or`)jL;GTs06qvT_x~pWYMwP#|n# z;p=U_W%DW2|Vp+g@0N532h1?KwphF?Vj0@1f# zCd)6wvu1DYT=!_O&c|!KU^NQ+k*JH|;XM}`g~Uk;K5fc@WI$EbuWQ0*YG@6KZ&O&y z`s5j(Lro{SaDZU2yd(duhTYbkNIo;3AlBeHqRTWtz2^YI9u4iP_C=DR8weU-KccDps z`rww#Z=1+l5kLeqxH|p17Y*_Yd4D`JB+umXtG9}1;j(Mv=4;~EUGOK^AZd}fbE!PsZl z&0~EVY!C;^DHga0MyD!h!4~hLiC6qvU#OzWSQ*l3e4CBJ5pF`O@jxa5_B$2?A&fJJ z@@Ed_-P4GOt6Uw-2yHU!9na^Vxq-K1mI3csS8u$u-MI4#hf02m(SiCj zp_}Bp@(Z2PIE=&cT|j#Cq3M@%-Xf}5Q7?xs{tN?>AK!lXTX>tazCKRVw`o4Z{usi` zQ;Gag>?Lpejq_R62HNVYz4LN*4&yB*)3;$SW*K$5e_6jcYC?6I(l`~dCchLdhOS-LAq?4_9{r$m<4rOg zM;;wN+-)7j@^ModzkV=c0E2e#PwYhsvgu(Wn<Xgg_Z0Lubz2szo8+(`Fz@Q1lk16Skxj5jsPCYwk_9XE;(K1p6NM+pLoJgyDhMq>hxebu7GE9bJt>;tvB?d5{ivcKkcxpw znIGNZfsjx|Xu?Zd&H{u8YMN{F8RS6_$)`W=3=B~pjZtFMQ_EOQ{paC;pq?MrM&X*p zvMh?Z684d$8C#s;G3>E!$#&2HE=~EQ3PPl>FVx*(pT!f21}T1=spJ7OM3&4wTkC>$ z#t(Z^w;5oU6sHR7LLCqaWH$)q5Ni#V7=n%lXMhKXlq3G=vgHBv8Aszdw>C$~LStZe zB@ua@zT>G{nu{86iKradRSF82K=3qR!nY1hC4Bv6s4_|O7!Yjt=V@-g-?z12&`!ZH z0^6iq#)5a>hc=7v+?d?t0vzvls4l7O+x;BvZz6+Rfsq1bud=axTTI>jzQP4!>1GqN z7FSCRB5W7<{`j(7RN2Qgp|)vX*m0OYv0vUgN=y6#w?8`?7mi~q4(~bf!3jV0g%)9w zTq(B2vwbqu=pHQg8&u}7Yyh7jm?+Z4x6Zr}_<3}k$bNyTQ8GFG`fIDa-pZ6d6T&3c zzh>RxSy`v?ucI>nfd;$+Rc*%~=Z6Z+&`#M6Mf04xu{$gxGPB2~CL5kRhGb_^LLXD^3Z1&4iefcvyZGYt+mI@V{+` z-y{CK=f?XxU?M_$t}}vIb=QI!SM@U9V+drC5t`tO^SKIJk}%bXLw@l5Cs-F=@B?LX z#~>0%Mf^153TE?CA&?JvJ63&h<)gZF*X|X@#Lsfc^mUZ)aHJHB`$SqPygKTtHEX?g}U6%@>uc8}Gn(?>~|N|Yb}>{wv1)aM4%cB;bcd%19UaH`` z;<(Z}drTbd#(`&Fm+sEX$j9ZQ{cN62Mw?x^?3i#`(j?k1_66Lb=n|tl{2&%;uwGIH zHJ|E!32m2-&m+78-oMn36jx^AYFj5sP4`ncg&w@1q!N|NTorhMP04Wf$6L$uvrPqwueQ%n zCcW8SyF$*lNJdHs#*$Ay%S9sbKRZgFN+waH{nmpB;lSE5qXtQ!E5au^v^uw$Q)SuJ zkCUsw@WECHl?B_2!C!Th-39i_4zRr<(i~GfRkp`SHyN7@aTLE&^^GCL&h7)R zq%U!y!CvNbC(tN?+f9oPGJ`okcLXg{OAPJzxCPOi*?p7}Fp|aqTB6>a;TGXr) zG_^Kd987Zf=J5J zB`LmaMe~>INyLUpZeP$Fj=8+0oq2!I&Y2r0gkQT*@I?xR+qO@3b@XrIdQ4gutd6j#@3VKaApzNv2osdTHw7B86g+sooZC!mQr zU6WnFwA6ji+#>J&WB8;&q|4h;1q6TfMXX=0Q+@Tj_-7RZVk&OntG16LpUH4F!tu>V z0Z)j)A+akbzHdKcE7AjV0VVNpBl>9RXOD`Fh?Kk#SRfZ^v zhN8YOAS%=WdSa6UAGPnZ!Bqx%`8F~{LGw+D&`SMzKm)df`f zC%SzYnJPm|{J}zPy{`Vqr$!gUCt43pe?9t8A|MM3_yRpkjw{s}L-j5Kkr z;1*5`xQ*|8!(+W!3eWRFo#0yI>3mI${*VBA-;LSRc^8Ib+EKnCxdUJO$TFb&i z7%{MI=z+vV>zIYUMOBt6Y4H{4+EN`Z$k*x^uc}ed#C1d27agk$&XAPP;hN)+>f!JsXfp~)5Ckm=7E2U`oR7T z^)YgcS@2tAy8E&!FJ5c+y;VzSk#a_-k1}pYDdTtY5MzOiYU#njo?hCVu~Zd+q3X5O z%M!a*<2=;;EH>~mwCrw;dqS?#W>Q8*)j5-uwEDYJ9D1X9_k1weEh(OH=MOP@r$LG>X;?@UQjO zSWDKFSLu_ z=-aDRQspys(q0)!(`L%;%Mh_3nM{vam-t znQ%98VQIEM{ePt*%$qBH=>L=%d%Jl;IQtlhWc>0&%UgO-gvF)diNJIE$t}e5lRyw@ zE?xY`*@vgP^!BUKgk=&9ufH1(@R|ZLdTUFP-RJEvF}iR$Rpo>2#!P#`H7AJWkn@aTN$Zx(a@%uC-#xY__L@+9@Nb2_i?1&lLr?; zjgw>w(&ASl*Dcr8CZ`5SYRS)se_t$2yk>CK=7-fMhC?zPgMsLoiQ!Klf$ALI2(r#Y7ef*)0<^B@O z?^p^b`+PSdLdekOSjP(hyPY0)8Dch$1j5J$cVKAx+->y3)~g>IE3bZ|0zygE=3m^u zlJ*8m4G@tbXZ?k{-z;B7lQ~J2NC^P9v)}IQ$xaWn)S6Qj`0ia+^7nxdvt9HBmLnUD zJ-}g5rU8)y84WAIO z+Tf76o%Xhu!>}P)_vP%1=YK>3*h5mcaL0(dRPVwLQv}+C1|Jd8-FC_I97v$O*(6ka z>F!s=pIihiHKMWdoAG{4VcGA}Wh=hv=AaUsWmYzLXm%+cz$L`Zs5QmWajqAqe{gzCfK$mfHj_nx|p5t40m z96ah%jv(BLG&aCTHRP>e5SfPOMJ$&ge9XQJRz|Pa z&=Krr#0rP}Lxt~;zkfyUa6Maa5%ugsmU`KaE>G%xnJOB<=qt~hbNuiXPKL%GKL+)# zK2LK$ke?SFn;a$W-Y9i%$pwfM7{4>Twy-ul4A|VxFbOt;*@dNA9)NZI48J@-F~B|A ze*N2t)RZXc>8{LUz6(IROVl7ea7K;>u+2%Rt6i&+6DZqze>U9@xHK6(OFdqm`%%vF zbo)zkI|R|hlzz(-F7T>Vxa3*MTf1ok+afY~xjW8EG(hQ^80C9L+ZYYP#;+IdsMxQ% zkdw1EsCU+j-c1Nl%CGp)df<}OwD#*oiSl@}0yEp*O3x*})3JGjieLp3;F=aF!7H0# zrajsS7n!NaX$*8mUva(^aZa##2Ko>flQuO$^-1`?M}y(@0t1>r!S__g-)}*wQCC*l zQ+EpXtMAEJQv=TZ&*Iq3#50$)l*4VvzL%ye+*PTcy14AihdYnJ7E@imgYstQCtMwZ zlRPoQP%>%s8(&veh>I6oz#M@S=CnR%zf|U3xXmYn_@J7Ala6j9rBjQKxQp38?QyqF z`$Y}F+h%oKUuY5tDxZe+JiGCvbq2I#=gb5>EZPA!1UzO+52x1 z))g*O>gV=V3(2Y+mj22HXBLXGUsV~9T^gg{e2Cp1eU$!IbaLgLUlmhFDxe!N;Zf}H z%he1tAZvR(dU@((#QIVmwZSzmH*Q1_h#MPXyn1@Sz`?g!84=uvM@&sC*m*e+^5(lF z@Nov7EGhd`xOf(X?tZE|*8O9~jr-JPm}V0lP~Ok~;&3CsIY=1yN*wQ#G*t=#GJzWe z8V|t;Qm~wF?X#?)aZ&AZ27n{KP^ntjeFB2SevcVqil6Wvg|cMrs2$rh309FFe1MY8 z4f%`8yn_eO_UZ70+pmIPFTwYiu8@{GQ6JFspe-@dCa$L6=iCm!eOcZ$NIp;U-_0#C z^_zQL0gHDnGO;3mqa-ByBRGxY#I+Ed^aEOwD=K_z)>x0dN=Cgrsywy2U!haCcliK@55DI zru4wH?~CzjhBE7_EBn8Sm*f4|!EU^}+*5rW!q3!O0aU;Zw@Tr{B9SYN><*# zAA-3AS~IhBtPQ`(5D})E*$d#;*&j*)h!3JH&I^?IJY$v}wkrtt4Okv2eM;LdXZtz1wr)t z>5qN_h!i$QWrES!8r5#(E9raID`SIE@qyRDdq$BjxWA|oWD&h&+nb}`yWk+H+VZGg z=<$n>TM1Es_uk%8+hAjE)*I0q%9xwK7^jk^56Z{dA3V_WO~qwdOlkuk$fl$rYE;>n zjvcj0njB3qsR75PtMZ8oiE9~Y-qe6Bn7qSG8b_zeQ`h&;Y@)PMQUDNp=Xh*T50rRw z#hH%xa?;b!E{q+IgLdxhd5&mc<1q8^!Lk3ac^5%*Qex)6SOCPNi$aiLE`N$xT)%OQ zE#gpkg|aa_370Cc!F;FsdTRuE1ki_Ht`I~pA`B>*_yR2*sShI}9^TpXv;^5tJjUF$ zA4cLDf2>MY6cz-Tfk~}J7^rPFxbK|6cJ22^uC1u$?kiqAz}K>9YxJ@(A{^+2svbL~ ziAzr#w+C@-270Exok&y2LE>)C0`FuD2-+YDabm|j$=On)=|zy1%1c2NWWUdNW=1>% zC`})WG$FowXF%WjG=I(bH~$JHo`T58^{ zCmwI0)#FI_eBAG9o+db2oOVvW0Zr5f8r&$&6!>HFQQQ9a4-D&nL@#82nz4J&6_i_@ z{RzkP^#p=?4^GxEx8X@BmI%U|W5z)jjJ-ZUnOXI*LF=rzgNtx`473vO@-WWmkS+Fj zM$!IaA8a&If6PVl6!e%s5Bhh(LEUv;?@+=vbcf}b+_Cpy?Z>^QSkldXIciV?Sw;_# zmQ)W1zkU76Mf@p1iw~3{rYxGBY?@^}*5g*&djYj=47FUNq%x=u`7@mi7Noi!5gH(| zh3l1l>N3Y%j9(;GPBd!Xt{4jp+-^;!6e`dGd-=wenX7%5ZlH*L*#?1@K~_+ zXP~QHn9t#`*8^i^1~=wRe<~p6MDSS+q8C^Z9;*%2yc5{p%{#13h+^KZ6~W)b9~7#V5hjFG^T+eyQ}RHAUS0`+Nd_>>p2row4i zR+yT{c}Hqm31kqg5g5@|dXbQXt#r%Wn(hK-EE~B?Alh7ta z(I^bUw$3I+Z1keIZ3Js&M*gQnF@_yA;$@JpW}P|ngR&6b;e`^j@%gtvlbW9JA(ddu zNI#W-KEc_Jm;!!O9z7!%!$r$9Q7k0-=3P;xQX=*CdA8oZrb)lUGmOj)yx0XDgZhuG zU=)4XJh&1S{3*4+TB5@VFB8S0dYq&pv=P!Fao?QJJsKP z)lvB)SArAqXUAW@mpbX+^W??R&ou>1z6bvI)}ee>$LMd-lYfiOh>^c&ZJzkc88Sk~ zi@g0K_AcF|4R9Kn_J<&Xy$8ZRh%tgt4LIg6F#VzN3`36-zYi+|n$2$j3y~zTYcz6f zf7B?_B8>ClR$-rKc^y8pJiKv~rh?ls&uy}LE+z?h9CIE)bT58`Ej)_n<1l_upmmkI zyzqi4;BD>l(6AZ83e7w@+H5#0b26Bw(DuihxY#n!rw#6MQa6;}CDh>3BLOWOE7tH`SKEi9S=M6{wA;*XL_=v&n z3{b{^&5ro_mpJs6o47#@tiW$q-=A-e5QozLy7x_dCJM#u5&Ab2Oat$b6LdG@X#YsY z5HEr0M#=@D%hYuDCK>3rSreN-Z4hybhj&~Qy z0a-}c>i3tw4K!WdWhBhic!~pMTpbmPK5z;GgXYI~nUQ{vlU)SfymXyTI(e;t4$DTf zbfi57D-1?8uy64ItKxHjCjO7?OW?zWd;2uFx!2E8@Gfa_Unu`?S$%NC73eO!sSXs- zW!x8NKT`1*y`YOb%^JzB_W^)CjkEspmwiT#EVJG3J9kSRXi3g;_*Fsx>y7|46aG_E z$=QAJTi=kt($@9FbNzob&$t7MHa>TRfFFQYx>WoTql&-;>1RE&H~eiN@HPJw0AXAW+N(%G+OcX_RTuV-^*tXHM-pfo0(^r_}%w&~zTP~c%j z&CPg&L0`T9mtM0v*e}ys7@KVJ?D9RA#J;Qqr;oC*=R}A9^sb1->Nz8DtHs0qV#%FY zHYgP3U6jgkS@k$MT%Ry-20iG0heLr9PK8{xVy3CqEqFo+1+$r(cBmr#O{)*bUD)#B z-+Q#KHm{2NI))G;Av3&9^);GcR*%|G(`PnDlqt78pS|ZgEsPS$H!e{gfOC6nkbcd_ zCm*IlNsak%0HX)+5VcYRV*>I6dHSvL&G9yMdDtsMH;Tnj1`; z5>6nZu9pih6F$ob0o}L`UD^+b`FkSx%LS!2_~0L&?P=H`k>HaXo2-~n$oko}*jxfEp-}ve(pTM=-87a^ zBG?hEvD5XqRNL`LmMt2uh6W?Tr32uEmBf(nPoxXY^1 z{lmj~hBQDbadxtNjhdVzgpkSi)b+`E@loAnIbF=cLrtzsGRh0zDm3caQaBDzHoqmu z(eC#(4%YsDCQ6GR`caw@%JZ=eDnI%l^pzu}L@} zr|{&;^7zg;tRIn~VHRj#`P$Ktkx9ltNUlBk}n(qDMI#5pF`mQW_~`wDj3j-l-w$l8xsSqdG97Dc$l-d`5!J zDqvkLo$Js{dA?t)Se%-LEfa+I#g*v)tO{@X@>+7;P} z{zStkEFIZ|P!^}3#8)K=U)lyeNk?h781fMaz zzrQy#$b3E8_#uxzDvX&&oeIZ!(p5_Q5w*BG|FLiNto4VB{ zjX}08#W__6(H|E8?tXqYMq7RAL2!%;Oy8T9!eAa+Q#S$uxxLr~wuscPx zem>q7hz!Pv3%C^{L1`mS6%~nQRSr|rV8UbEKu)eSn6qRVB>64?9_!W1y4T2Y!Y67O z1gUS_xd;A~;KP#)BH8KiTrihRL-5$BfG;gl6!^4S2*^}b6ilJM(n-PAXlb z?gP(8!iv+)y^GZ1fCuUvpSS-8)qRL&|8qHeNHwbCl~u}Pzx-l3o3Bc*U&Jlgy9D0Z z6KEyqd>$jm4Lx9BdU%k+dV+a-VY*%xm5qlvN4qeQt57=rUGLeBDOEoT1eX01gOnDW z8~VT~!QY#M#g8g5+Gu2WfOG1EtzBF=#;P)La6kO%R=fz9vBtbbK7&zGRX)B2C*f?O zzO3o&!=z;;`i}CP4MZfxZQrO75~mUhI8Bo(lI;+3Z8muW@TY2BKdFQrqi+1sXeb$_^GDM&|emM6lH}LeVd$YNye^JFlSDGd) z*%5&WL9RuG?_J^*WHZj{UVMVYov!K8yC$INSFd$7KmBrn;*0M(D5OC~o+4HB9MZYf zwb}4vYBvh-^WPc&^{uao84B!@uJdb~w1?ddIfR#gMVg0VW;&c`{l#DAy!AW==nv5r z(6E<{EZdnLeq_6u+}eEP$e8wNTYnF?YpY^&u5Z?i`=Jh8r>!J;X-uZy3z}Q{;b6Hx zkV-tHHV%iWGkR1?`+bk@-{Rr__WJfO>&^Q(S&#^1z{&6DmNZy_?I@#lGRHOPBOX0& z;DPOAnEHRQfX2pOt^52j=E1!Kiz_YrPZ&Vrab`u^o5Gl+*!lgg=|@TTUX79t@`LU; zCbws?2}(n==!_D=z=OBJwF9?{hrLjFrA$a1qUK8yxmZ_U_xI6BV`J6l3S)!r#}Y9a zBKY(~)y3ASGS$*2H9qsq=c41SE5D!tifuFfPj!vFNpSMaN^ynKJMJp%Go=xxVfO87 z_~gR63)4$n+0NcDy@&$HR!U0H1?N)EkSU;))X=Q>Aw;(DcFZpX^WkYcJ;Dw8aOZ-a zVqeSih4Xo|64Xj)R0KhFG0(Nl&SkT^ZG5G^nbMb}Q^p9F6fq=Mdehx~8F7}A9u0eM zVQQGVQP#uRx1{fH+B--qP%a01kjVs3MWw#9rz>tGDGZkewWFMpaAI49+O_4xbePv7 zYdDy<#$V7j`x$yClXhM9M8}H+e$axkRSIy zv^2}YvrsKmm=0#zW1)_8J^v4>B91XE01XmpN%!lG46mN(7{fq!(cZzh8=xU&kf%W( z#o!r^ESS^wLOoYeyWU7?Nl6Qu5R?hWT+~|*bpU1v<|-Kf0&Dlw|qgZyLta+ z!o59F7be2_{kL!XYiHj(ex=T=w!}cIH_?*3jL+m8k>CX1PIG+tWCt+m!TU zwrC8Fn0|YPB=f>v;4BM5g25sj7n%iXQvDf|?0DSU+5Oy2Rl2tW7I(Hi*$ewNwSg+_ z>6WF{O9bv>@0-}!LtZe@fj1+wju8^(${@N%`S{)6wwiW!IitE(NjI_IXLjSe@dKtb zDkmoNX9uD4ftZ<}WBZRV>&gYufHjBU`S;t&2S+(TQj{Vu{2>UK6b-q?nT#^dLPbuVxeh299BxWbKVg=B95FxglI zf5f!wwU8~E+4SOP-XA@;L{i9K3unaPS9w;1NthQd1#*eIew83YKcYcIf-pmr!hCnB5vDU-SuaicK4Xgp zv~?;J)eOn+%62~f9G3{Sj@2eBshD9PP+x5B89SMl)pT3Uz7$!Kot&OQZ)YUk2emkASynkgS zT`!*W2qqsYO|vX~#ofNUWn7<9p^u5O*`hZ_A@wqrHs)T0A#o>2Yrdxu5;ZMC+6HXLOLHD%5yifn`_3 zYdbw&Jw81L+J;KEd$|J+mRH6$m!sz;`Cx)>{9Ve|xf{UFDnV=a`LDyP?*(3ST(E{L zIPkdHve}BCtg9!bzAeUo$Q|b(y?d+*VaV^mYb##;Do1k3VKFLN9H!OEKgVOoLE8=BXF|?vmV{G!rjz#b@wnn*X{L~~VE{LVslw&i$N?N!jR-ZUG=>e)8Ss52OyuXwY0aZnF}y}~ z_`^;4Oix5%^c1m^3JuD{PMsl_63uA3JI*$O$uI?n-AJYvEfbhO-u<|G^-%wYe&8c2 zG<@4gxQ3FONWPkY>WH0ZKY_!;txMb21L4KH6HrhJr6RGNZTv5l zSg}zqHk=tv_t%_9)G}xhJ=H49=Y~j6%gKZ8tn4wIznqQ+-g`8+enx{fXMd~wM1jLM zl+>^u@cn`Mu+k9H7*D@F9V}EnoAcT9b0jh#9jDy?359)0!o}NZh zGw_3NEL#Tz4SN$(`80-?md5h#LK_10WjtImUymLU&LG<|vL@3~hn!dB;}`12=OwN4ptMcbXcb%Q)GTni*!xYJ%o%I4`WXN48KW$kXQhC(#2eDxFmQ7Hl~=GESG zf@8J_o{S1Co|FRCR#$(FYDR&(muq8=Q;J>Wc#7I<(}I;axkJCYphe&o4LZ$LuB$ik z8zH@0BB_k}vX+`VyKo<0Yulgo27$p?E=KbBHh}rL6^}!qen-4J^ zryh86R8*!9B#+%JxUm4u4`o+}#V@gdLA%?_zxNv1MBBzf)tYgG)vnBB2cOl#5gYvX zm%e6sGIT80`2U~`*oovi>{NQ?ykA~9>LfR(2NT3&#I?_azl97SCp;ZDR_eV_1VZte z84nq?TzKtIq~Odnjx@M&^4L(L`jA_Vvabp${Qb~(gg zF)trQQEnc8$FWD<=Pnmm4#p%2pe&Xq2btPDq>GF@RPj^G8mo4-g<@-LX(#>uO;&FC z^N`b6w9yRrsi$8YJ`rE1y$ent&viuxUrSK0vw5ZWORp_**i>WBPUvmD>9u@Ms)GI{ z>)^m>9bkK<=L%l}a{K!)LLp0<_i_o^!V=s1ijcNc9F4&*H53hV@Tc4-_Y3C-4{zV; z@h1sJ95@!@B4fC5fE;zwQmQm7mYb-Yi74EYi~!GQ)eM z>bD8)J+^N357PQBXwC#-DSrA-ufvRlXG<1OlzxfF22d2qMpU`{1>gK#H( zl9;!DnJz&OVPkc2qF7?pLh)y<2wrI-za-;!$%GjVLebS(huM=&@C3XQ5AnWm>8~snO4v^T-aV?KaT>YJDevh!hvICQ=M=qzz+*ExeXZv zB_>9BOC6)s0jarx@ndl)33|e1usL%aiR?BaGHM(aS7!U~pn%C|=Bb&Q@CmbmJUEi# z(t;>8B|Zf5$R7zsiHV=Ie1Zk#-j>!2sH6Nz)Q{@ola0>MGMbR9T063DKj*UZ1nzI}x# zD`VcprVH;4D5lCNV}MIS<)Z0bwTx$krC^zdL-19of|JK=506iyGdNkhz-%SyScV94#voBt$E5%JAJqHr$3^?sZpD8@VU| zl@(&qBt_}siQPK(l&YY?U2@%vHceu)q2-aadA5`Jz#Oq*_(;Y9$^b#SOJcYII= z_G<^0dCXW4;rOTv2r)h>VWscfurn?FxtlVe=VM{lI2L(H6W-jPoD=*i2X*UCU%)S# zs!J0S&u*Q7*8l~oAR~W+k9qy1jE*IIM}VB+=z9T{uCFSjh}oD*?5#8K?8x?b{le6qjP)7dG z+|#fQ_x!{8bWj%I_(gLnmuE=Ku$T z`$#)GIphzmzU|z4bKgdmFoO#!O*t-|E}s58$Wz?5X4AFbnmN|>Jlr}_A4V%}F0@+4 zL)&T=lbB8h$GZfyocHa`RhI`kYdfp&LOxy8L^AQ=0Kvy8ZB_IpM7WS|Oim|)3fvHW zCYC&$60>@A-#9sjxuml-y+f3Dm>C`$tHXxp;Z*Cvm}>nflm+36lefI_shJuwnF%F# zdTs%dQ&W&7&9?c`PoFrBuE2qsXf(Y0fXtQZ*prCxU?qp;m239#z=eW{USfMmNWkK7 z3bBHZc-&ELHJZ1N6|TaWqcQC#l`bk^V%oNoA)Hv3W60%+LM=_fNd*c@nBatl{ zTc0kJ+#1j<8NAnXd^{rRLEJ)XraH*vQ0x+vw>8&1Timr! za>lR5G+)`(j3Oax^pXmE!(Qb&+o&Hm=86?8(Wx`1pXoU+cxm%(MpdtY?1ABUOstjy12iDJ+{mIq>kPX~n-Y1UR9aqOBD^00 zAn}Bp|Is5_0Wt5I1b|0p!oLYw3|1W84Q!4$xse(EgA4lwHeIvf31#zy?IpYsKwumJgNm=il@j(MT5m z{4y+bEC&GowTB;Wk3p?H9PNOMLjpJeX#<~%{wWIk0h$|1_x{MlIKiFLvDobWuLt2h z1l6}?0lPPF6JTO3eD9O<2OKUvQt~V;^!k#$;vb<8;8}v4^QDDD*smA~hyBo@DgXc^ kl2LM}8~hK&k#!^kIP0}6&!|x{!EXRPEhEi5b!_ne0lNSu0ssI2 literal 0 HcmV?d00001 diff --git a/static/tabbar/v2/mine.png b/static/tabbar/v2/mine.png new file mode 100644 index 0000000000000000000000000000000000000000..9fd49f6eeab946d9beef80226b9b543a91bf4750 GIT binary patch literal 16181 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 { + res.then((res) => res[0] ? reject(res[0]) : resolve(res[1])); + }); + }, +}); \ No newline at end of file diff --git a/uni.scss b/uni.scss new file mode 100644 index 0000000..ec1fa2f --- /dev/null +++ b/uni.scss @@ -0,0 +1,79 @@ +/** + * 这里是uni-app内置的常用样式变量 + * + * uni-app 官方扩展插件及插件市场(https://ext.dcloud.net.cn)上很多三方插件均使用了这些样式变量 + * 如果你是插件开发者,建议你使用scss预处理,并在插件代码中直接使用这些变量(无需 import 这个文件),方便用户通过搭积木的方式开发整体风格一致的App + * + */ + +/** + * 如果你是App开发者(插件使用者),你可以通过修改这些变量来定制自己的插件主题,实现自定义主题功能 + * + * 如果你的项目同样使用了scss预处理,你也可以直接在你的 scss 代码中使用如下变量,同时无需 import 这个文件 + */ + +/* uni.scss */ +@import 'uview-plus/theme.scss'; + +/* 颜色变量 */ + +/* 行为相关颜色 */ +$uni-color-primary: #007aff; +$uni-color-success: #4cd964; +$uni-color-warning: #f0ad4e; +$uni-color-error: #dd524d; + +/* 文字基本颜色 */ +$uni-text-color:#333;//基本色 +$uni-text-color-inverse:#fff;//反色 +$uni-text-color-grey:#999;//辅助灰色,如加载更多的提示信息 +$uni-text-color-placeholder: #808080; +$uni-text-color-disable:#c0c0c0; + +/* 背景颜色 */ +$uni-bg-color:#ffffff; +$uni-bg-color-grey:#f8f8f8; +$uni-bg-color-hover:#f1f1f1;//点击状态颜色 +$uni-bg-color-mask:rgba(0, 0, 0, 0.4);//遮罩颜色 + +/* 边框颜色 */ +$uni-border-color:#c8c7cc; + +/* 尺寸变量 */ + +/* 文字尺寸 */ +$uni-font-size-sm:12px; +$uni-font-size-base:14px; +$uni-font-size-lg:16px; + +/* 图片尺寸 */ +$uni-img-size-sm:20px; +$uni-img-size-base:26px; +$uni-img-size-lg:40px; + +/* Border Radius */ +$uni-border-radius-sm: 2px; +$uni-border-radius-base: 3px; +$uni-border-radius-lg: 6px; +$uni-border-radius-circle: 50%; + +/* 水平间距 */ +$uni-spacing-row-sm: 5px; +$uni-spacing-row-base: 10px; +$uni-spacing-row-lg: 15px; + +/* 垂直间距 */ +$uni-spacing-col-sm: 4px; +$uni-spacing-col-base: 8px; +$uni-spacing-col-lg: 12px; + +/* 透明度 */ +$uni-opacity-disabled: 0.3; // 组件禁用态的透明度 + +/* 文章场景相关 */ +$uni-color-title: #2C405A; // 文章标题颜色 +$uni-font-size-title:20px; +$uni-color-subtitle: #555555; // 二级标题颜色 +$uni-font-size-subtitle:26px; +$uni-color-paragraph: #3F536E; // 文章段落颜色 +$uni-font-size-paragraph:15px; diff --git a/uni_modules/uview-plus/LICENSE b/uni_modules/uview-plus/LICENSE new file mode 100644 index 0000000..c0ffd3e --- /dev/null +++ b/uni_modules/uview-plus/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2024 https://uiadmin.net/uview-plus + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. \ No newline at end of file diff --git a/uni_modules/uview-plus/README.md b/uni_modules/uview-plus/README.md new file mode 100644 index 0000000..930e9cc --- /dev/null +++ b/uni_modules/uview-plus/README.md @@ -0,0 +1,74 @@ +

+ logo +

+

uview-plus 3.0

+

多平台快速开发的UI框架

+ +[![stars](https://img.shields.io/github/stars/ijry/uview-plus?style=flat-square&logo=GitHub)](https://github.com/ijry/uview-plus) +[![forks](https://img.shields.io/github/forks/ijry/uview-plus?style=flat-square&logo=GitHub)](https://github.com/ijry/uview-plus) +[![issues](https://img.shields.io/github/issues/ijry/uview-plus?style=flat-square&logo=GitHub)](https://github.com/ijry/uview-plus/issues) +[![release](https://img.shields.io/github/v/release/ijry/uview-plus?style=flat-square)](https://gitee.com/jry/uview-plus/releases) +[![license](https://img.shields.io/github/license/ijry/uview-plus?style=flat-square)](https://en.wikipedia.org/wiki/MIT_License) + +## 说明 + +uview-plus,是uni-app全面兼容vue3/nvue/鸿蒙/uni-app-x的uni-app生态框架,全面的组件和便捷的工具会让您信手拈来,如鱼得水。uview-plus是基于uView2.x移植的支持vue3的版本,感谢uView。 + +## 可视化设计 + +uview-plus现已推出免费可视化设计,可以方便的进行页面可视化设计,导出源码即可使用。极大提高前端页面开发效率;如产品经理设计师直接使用更可作为高保真高可用原型制作工具,让设计稿即代码,无需传统的设计稿开发还原步骤。 + + + + + +## 文档 +[官方文档:https://uview-plus.jiangruyi.com](https://uview-plus.jiangruyi.com) +[备用文档:https://uiadmin.net/uview-plus](https://uiadmin.net/uview-plus) + + +## 预览 + +您可以通过**微信**扫码,查看最佳的演示效果。 +
+
+ + +## 链接 + +- [官方文档](https://uview-plus.jiangruyi.com) +- [更新日志](https://uview-plus.jiangruyi.com/components/changelog.html) +- [升级指南](https://uview-plus.jiangruyi.com/components/changeGuide.html) +- [关于我们](https://uview-plus.jiangruyi.com/cooperation/about.html) + +## 交流反馈 + +欢迎加入我们的QQ群交流反馈:[点此跳转](https://uview-plus.jiangruyi.com/components/addQQGroup.html) + +## 关于PR + +> 我们非常乐意接受各位的优质PR,但在此之前我希望您了解uview-plus是一个需要兼容多个平台的(小程序、h5、ios app、android app)包括nvue页面、vue页面。 +> 所以希望在您修复bug并提交之前尽可能的去这些平台测试一下兼容性。最好能携带测试截图以方便审核。非常感谢! + +## 安装 + +#### **uni-app插件市场链接** —— [https://ext.dcloud.net.cn/plugin?name=uview-plus](https://ext.dcloud.net.cn/plugin?name=uview-plus) + +请通过[官网安装文档](https://uview-plus.jiangruyi.com/components/install.html)了解更详细的内容 + +## 快速上手 + +请通过[快速上手](https://uview-plus.jiangruyi.com/components/quickstart.html)了解更详细的内容 + +## 使用方法 +配置easycom规则后,自动按需引入,无需`import`组件,直接引用即可。 + +```html + +``` + +## 版权信息 +uview-plus遵循[MIT](https://en.wikipedia.org/wiki/MIT_License)开源协议,意味着您无需支付任何费用,也无需授权,即可将uview-plus应用到您的产品中。 + diff --git a/uni_modules/uview-plus/changelog.md b/uni_modules/uview-plus/changelog.md new file mode 100644 index 0000000..42f30fe --- /dev/null +++ b/uni_modules/uview-plus/changelog.md @@ -0,0 +1,581 @@ +## 3.3.63(2025-01-13) +fix: cate-tab支持支付宝小程序 + +fix: textarea 修复 placeholder-style + +fix: 修复在图片加载及加载失败时容器宽度 + +fix: waterfall组件报错Maximum recursive updates + +## 3.3.62(2025-01-10) +feat: sleder滑动选择器双滑块增加外层触发值的变动功能 + +fix: picker支持hasInput优化 + +## 3.3.61(2024-12-31) +fix: 修复微信getSystemInfoSync接口废弃警告 + +fix: 'u-status-bar' symbol missing + +## 3.3.60(2024-12-30) +feat: 日期组件支持禁用 + +fix: ts定义修复 #600 + +feat: Tabs组件选中时增加一个active的class #595 + +## 3.3.59(2024-12-30) +fix: Property "isH5" was accessed during render + +## 3.3.58(2024-12-26) +fix: slider组件change事件传参 + +## 3.3.57(2024-12-23) +fix: slider组件change事件传参 + +feat: 更新u-picker组件增加当前选中class类名 + +## 3.3.56(2024-12-18) +feat: 在u-alert组件中添加关闭事件 + +## 3.3.55(2024-12-17) +add: swiper增加双向绑定 + +## 3.3.54(2024-12-11) +add: qrcode支持props控制是否开启点击预览 + +add: 新增cate-tab垂直分类组件 + +## 3.3.53(2024-12-10) +fix: 修复popup居中模式点击内容区域触发关闭 + +## 3.3.52(2024-12-09) +add: notice-bar支持justifyContent属性 + +## 3.3.51(2024-12-09) +add: radio增加label插槽 + +## 3.3.50(2024-12-05) +fix: 优化popup等对禁止背景滚动机制 + +add: slider在弹窗使用示例 + +fix: card组件类名问题 + +## 3.3.49(2024-12-02) +fix: 去除album多余的$u引用 + +fix: 优化图片组件兼容性 + +add: picker组件增加zIndex属性 + +add: text增加是否占满剩余空间属性 + +add: input颜色示例 + +## 3.3.48(2024-11-29) +add: 文本行数限制样式提高到10行 + +del: 去除不跨端的inputmode +## 3.3.47(2024-11-28) +fix: 时间选择器在hasInput模式下部分机型键盘弹出 + +## 3.3.46(2024-11-26) +fix: 修复text传递事件参数 + +## 3.3.45(2024-11-24) +add: navbar组件支持配置标题颜色 + +fix: 边框按钮警告类型下颜色变量使用错误 + +## 3.3.43(2024-11-18) +fix: 支持瀑布流组件v-model置为[] + +add: 新增字符串路径访问工具方法getValueByPath + +add: 新增float-button悬浮按钮组件 + +## 3.3.42(2024-11-15) +add: button组件支持stop参数阻止冒泡 + +## 3.3.41(2024-11-13) +fix: u-radio-group invalid import + +improvement: 优化图片组件宽高及修复事件event传递 + +## 3.3.40(2024-11-11) +add: 组件radioGroup增加gap属性用于设置item间隔 + +fix: 修复H5全局导入 + +## 3.3.39(2024-11-04) +fix: 修复相册组件 + +## 3.3.38(2024-11-04) +fix: 修复视频预览报错 #510 + +add: album组件增加stop参数支持阻止事件冒泡 + +## 3.3.37(2024-10-21) +fix: 修复因为修改组件名称前缀,导致h5打包后$parent方法内找不到父组件的问题 + +fix: 修复datetime-picker选择2000年以前日期出错 + +## 3.3.36(2024-10-09) +fix: toast 自动关闭 + +feat: 增加微信小程序用户昵称审核完毕回调及修改 ts 定义文件 + +## 3.3.35(2024-10-08) +feat: modal和picker支持v-model:show双向绑定 + +feat: 支持checkbox使用slot自定义label后自带点击事件 #522 + +feat: swipe-action支持自动关闭特性及初始化打开状态 + +## 3.3.34(2024-09-23) +feat: 支持toast设置duration值为-1时不自动关闭 + +## 3.3.33(2024-09-18) +fix: 修复test.date('008')等验证结果不准确 + +## 3.3.32(2024-09-09) +fix: u-keyboard名称冲突warning + +## 3.3.31(2024-08-31) +feat: qrcode初步支持nvue + +## 3.3.30(2024-08-30) +fix: slider兼容step为字符串类型 + +## 3.3.29(2024-08-30) +fix: 修复tabs组件current参数为字符串处理逻辑 + +## 3.3.28(2024-08-26) +fix: list组件滑动偏移量不一样取绝对值导致iOS下拉偏移量计算错误 + +## 3.3.27(2024-08-22) +fix: 修复up-datetime-picker组件toolbarRightSlot定义缺失 + +fix: 修复FormItem的rules更新错误的问题 + +## 3.3.26(2024-08-22) +fix: 批量注册全局组件优化 + +## 3.3.25(2024-08-21) +fix: 修复slider在app-vue下样式问题 + +## 3.3.24(2024-08-19) +fix: 修复时间选择器hasInput模式小程序不生效 + +feat: 支持H5导入所有组件 + +## 3.3.23(2024-08-17) +feat: swipe-action增加closeAll方法 + +fix: 兼容tabs在某些场景下index小于0时自动设置为0 + +add: 通用mixin新增navTo页面跳转方法 + +## 3.3.21(2024-08-15) +improvement: 优化二维码组件loading及支持预览与长按事件 #351 + +fix: 修复swipe-action自动关闭其它功能及组件卸载自动关闭 + +## 3.3.20(2024-08-15) +refactor: props默认值文件移至组件文件夹内便于查找 +## 3.3.19(2024-08-14) +fix: 修复2被rpx兼容处理只在数字值生效 + +add: 增加swiper自定义插槽示例 + +## 3.3.18(2024-08-13) +feat: 新增支持datetime-picker工具栏插槽及picker插槽支持修复 +## 3.3.17(2024-08-12) +feat: swiper组件增加默认slot便于自定义 + +feat: grid新增间隔参数 + +feat: picker新增toolbar-right和toolbar-bottom插槽 + +## 3.3.16(2024-08-12) +fix: 解决swiper中title换行后多余的内容未被遮挡问题 + +fix: 修复迷你导航适配异形屏 + +## 3.3.15(2024-08-09) +fix: 修复默认单位设置为rpx时一些组件高度间距异常 + +fix: 修复日历在rpx单位下布局异常 + +feat: code-input支持App端展示输入光标 + +## 3.3.14(2024-08-09) +add: 增加box组件 + +add: 增加card卡片组件 + + +## 3.3.13(2024-08-08) +feat: input支持调用原生组件的focus和blur方法 + +improvement: grid-item条件编译优化 + +add: 新增迷你导航组件 + +## 3.3.12(2024-08-06) +improvement: $u挂载时机调整便于打包分离chunk + +fix: steps新增itemStyle属性名称冲突 + +## 3.3.11(2024-08-05) +feat: 新增支持upload组件的deletable/maxCount/accept变更监听 #333 + +feat: 新增支持tabs在swiper中使用 + +feat: 新增FormItem支持独立设置验证规则rules + +fix: 修复index-list未设置$slots.header时索引高亮失效 + +## 3.3.10(2024-08-02) +fix: 修复index-list偶发的滑动最后一个索引报错top不存在 + +fix: 修复gird在QQ、抖音小程序下布局 + +feat: 优化step支持自定义样式prop + +feat: action-sheet组件支持v-model:show双向绑定 + +fix: 小程序下steps和grid都统一采用grid布局 + +fix: 修复支付宝小程序下input类型为数字时双向绑定失效 + +feat : form 表单 validate 校验不通过后 error增加字段prop信息 #304 + +fix: form组件异步校异常验问题 #393 + +## 3.3.9(2024-08-01) +fix: 优化获取nvue元素 + +feat: modal新增contentTextAlign设置文案对齐方式 + +fix: 修复NVUE下tabbar文字不显示 #458 + +feat: loading-page增加zIndex属性 + +fix: 相册在宽度较小时换行问题 + +feat: album相册增加自适应自动换行模式 + +feat: album相册增加图片尺寸单位prop + +fix: 修复calendar日历月份居中 + +## 3.3.8(2024-07-31) +feat: slider支持进度条任意位置触发按钮拖动 + +fix: 修复app-vue下modal标题不居中 + +fix: #459 TS setConfig 声明异常 + +feat: tabs组件增加longPress长按事件 + +feat: 新增showRight属性控制collapse右侧图标显隐 + +fix: 优化nvue下css警告 + +## 3.3.7(2024-07-29) +feat: 支持IndexList组件支持在弹窗等场景下使用及联动优化 + +feat: popup组件支持v-model:show双向绑定 + +feat: 优化tabs的current双向绑定 + +fix: checkbox独立使用时checked赋初始值可以,但是手动切换时值没有做双向绑定! #455 + +feat: slider组件支持区间双滑块 + +fix: toast 支持自定义图标?可传入了决对路径的 icon也没有用 #409 + +feat: form-item校验失败时 增加class方便自定义显示错误的展示方式 #394 + +fix: up-cell的required配置不生效 #395 + +fix: 横向滚动组件,微信小程序编译后会有警告 #415 + +fix: u-picker内部对默认值defaultIndex的监听 #425 + +feat: toast 组件支持遮掩层穿透 #417 + +fix: 兼容vue的slot编译bug #423 + +fix: upload 微信小程序 点击预览视频报错 #424 + +fix: u-number-box 组件修改【integer, decimalLength, min, max 】props时没有触发绑定值更新 #429 + +feat: Tabs组件能否支持自定义插槽 #439 + +feat: ActionSheet 可以配置最大高度吗, 我当做select使用了。 #445 + +fix: cursor-pointer优化 + +feat: 新版slider组件兼容NVUE改造 + +feat: 新增slider组件手动实现以支持样式自定义 + +perf:补充TS声明提示信息 + +修复:ActionSheet 操作菜单cancelText属性为空DOM节点还存在并且可以点击问题 + +fix: 去除预留的beforeDestroy兼容容易在某些sdk下不识别条件编译 + +## 3.3.6(2024-07-23) +feat: u-album组件添加radius,shape参数,定义参考当前u-image参数 + +fix: 修复了calendar组件title和日期title未垂直居中的问题 + +fix: update:modelValue缺失emit定义 + +## 3.3.5(2024-07-10) +picker组件支持hasInput模式 + +## 3.3.4(2024-07-07) +fix: input组件双向绑定问题 #419 + +lazy-load完善emit + +优化通用小程序分享 + +## 3.3.2(2024-06-27) +fix: 在Nvue环境中编译,出现大量警告 #406 +## 3.3.1(2024-06-27) +u-button组件报错,找不到button mixins #407 +## 3.3.0(2024-06-27) +feat: checkbox支持label设置slot + +feat: modal增加customClass + +feat: navbar、popup、tabs、text支持customClass + +fix: cell组建缺少flex布局 + +fix: 修复微信小程序真机调试时快速输入出现文本回退问题 + +feat: tag增加默认slot + +公共mixin改造为按需导入语法 + +refactor: 组件props混入mixin改造为按需导入语法 + +fix: u-tabbar 安卓手机点击按钮变蓝问题 #396 + +feat: upload组建增加extension属性 + +fix: upload组件参数mode添加left + +fix: 修复阴影在非nvue时白色背景色不显示 + +## 3.2.24(2024-06-11) +fix: 修复时间选择器confirm事件触发时机导致2次才会触发v-model更新 +## 3.2.23(2024-05-30) +fix: #378 H5 u-input 在表单中初始值为空也会触发一次 formValidate(this,"change")事件导致进入页面直接校验了一次 + +fix: #373 搜索组件up-search的@clear事件无效 + +fix: #372 ActionSheet 组件的取消按钮触发区域太小 + +## 3.2.22(2024-05-13) +上传组件支持微信小程序预览视频 + +修复折叠面板右侧箭头不显示 + +修复uxp2px + +## 3.2.21(2024-05-10) +fix: loading-icon修复flex布局 +## 3.2.20(2024-05-10) +修复瀑布流大小写#355 +## 3.2.19(2024-05-10) +去除意外的文件引入 +## 3.2.18(2024-05-09) +fix: 349 popup 组件设置 zIndex 属性后,组件渲染异常# +feat: 搜索框增加adjustPosition属性 +fix: #331增加u-action-sheet__cancel +优化mixin兼容性 +feat: #326 up-list增加下拉刷新功能 +fix: #319 优化up-tabs参数与定义匹配 +fix: index-list组件微信小程序端使用自定义导航栏异常 +fix: #285 pickerimmediateChange 写死为true +fix: #111 u-scroll-list组件,隐藏指示器后报错, 提示找不到ref +list增加微信小程序防抖配置 + +## 3.2.17(2024-05-08) +fix: 支付宝小程序二维码渲染 +## 3.2.16(2024-05-06) +修复tabs中,当前激活样式的undefined bug + +fix: #341u-code 倒计时没结束前退出,再次进入结束后退出界面,再次进入重新开始倒计时bug + +受到uni-app内置text样式影响修复 + +## 3.2.15(2024-04-28) +优化时间选择器hasInput模式初始化值 +## 3.2.14(2024-04-24) +去除pleaseSetTranspileDependencies + +http采用useStore + +## 3.2.13(2024-04-22) +修复modal标题样式 + +优化日期选择器hasInput模式宽度 + +## 3.2.12(2024-04-22) +修复color应用 +## 3.2.11(2024-04-18) +修复import化带来的问题 +## 3.2.10(2024-04-17) +完善input清空事件App端失效的兼容性 + +修复日历组件二次打开后当前月份显示不正确 + +## 3.2.9(2024-04-16) +组件内uni.$u用法改为import引入 + +规范化及兼容性增强 + +## 3.2.8(2024-04-15) +修复up-tag语法错 +## 3.2.7(2024-04-15) +修复下拉菜单背景色在支付宝小程序无效 + +setConfig改为浅拷贝解决无法用import导入代替uni.$u.props设置 + +## 3.2.6(2024-04-14) +修复某些情况下滑动单元格默认右侧按钮是展开的问题 +## 3.2.5(2024-04-13) +调整分段器尺寸及修复窗口大小改变时重新计算尺寸 + +多个组件支持cursor-pointer增强PC端体验 + +## 3.2.4(2024-04-12) +初步支持typescript +## 3.2.3(2024-04-12) +fix: 修复square属性在小程序下无效问题 + +fix:修复lastIndex异常导致的column异常问题 + +fix: alipayapp picker style + +feat(button): 添加用户同意隐私协议事件回调 + +fix: input switch password + +fix: 修复u-code组件keepRuning失效问题 + +feat: form-item添加labelPosition属性 + +新增dropdown组件 + +分段器支持内部current值 + +优化cell和action-sheet视觉大小 + +修复tabs文字换行 + +## 3.2.2(2024-04-11) +修复换行符问题 +## 3.2.1(2024-04-11) +修复演示H5二维码 + +fix: #270 ReadMore 展开阅读更多内容变化兼容 + +fix: #238Calendar组件maxDate修改为不能小于minDate + +checkbox支持独立使用 + +修复popup中在微信小程序中真机调试滚动失效 + +## 3.2.0(2024-04-10) +修复轮播图在nvue显示 +修复疑似u-slider名称被占用导致slider在App下不显示 +解决微信小程序提示 Some selectors are not allowed in component wxss +示例中u-前缀统一为up- +增加瀑布流与图片懒加载组件 +fix: #308修复tag组件缺失iconColor参数 +fix: #297使用grid布局解决目前编译为抖音小程序无法开启virtualHost +## 3.1.52(2024-04-07) +工具类方法调用import化改造 +新增up-copy复制组件 +## 3.1.51(2024-04-07) +优化时间选择器自带输入框格式化显示 +防止按钮文字换行 +修复订单列表模板滑动 +增加u-qrcode二维码组件 +## 3.1.49(2024-03-27) +日期时间组件支持自带输入框 +fix: popup弹窗滚动穿透问题 +fix: 修复小程序numberbox bug +## 3.1.48(2024-03-18) +fix:[plugin:uni:pre-css] Unbalanced delimiter found in string +## 3.1.47(2024-03-18) +fix: setConfig设置组件默认参数无效问题 +fix: 修复自定义图标无效问题 +feat: 增加u-form-item单独设置规则变量 +fix:#293小程序是自定义导航栏的时候即传了customNavHeight的时候会出现跳转偏移的情况 + +## 3.1.46(2024-01-29) +beforeUnmount +## 3.1.45(2024-01-24) +fix: #262ext组件为超链接的情况下size属性不生效 +fix: #263最新版本3.1.42中微信小程序u-swipe-action-item报错 +fix: #224最新版本3.1.42中微信小程序u-swipe-action-item报错 +fix: #263支持支付宝小程序 +fix: #261u-input在直接修改v-model的绑定值时,每隔一次会无法出发change事件 +优化折叠面板兼容微信小程序 +## 3.1.42(2024-01-15) +修复u-number-box默认值0时在小程序不显示值 +优化u-code的timer判断 +优化支付宝小程序下textarea字数统计兼容 +优化u-calendar +## 3.1.41(2023-11-18) +#215优化u-cell图标容器间距问题 +## 3.1.40(2023-11-16) +修复u-slider双向绑定 +## 3.1.39(2023-11-10) +修复头条小程序不支持env(safe-area-inset-bottom) +优化#201u-grid 指定列数导致闪烁 +#193IndexList 索引列表 高度错误 +其他优化 +## 3.1.38(2023-10-08) +修复u-slider +## 3.1.37(2023-09-13) +完善emits定义及修复code-input双向数据绑定 +## 3.1.36(2023-08-08) +修复富文本事件名称大小写 +## 3.1.35(2023-08-02) +修复编译到支付宝小程序u-form报错 +## 3.1.34(2023-07-27) +修复App打包uni.$u.mpMixin方式sdk暂时不支持导致报错 +## 3.1.33(2023-07-13) +修复弹窗进入动画、模板页面样式等 +## 3.1.31(2023-07-11) +修复dayjs引用 +## 3.0.8(2022-07-12) +修复u-tag默认宽度撑满容器 +## 3.0.7(2022-07-12) +修复u-navbar自定义插槽演示示例 +## 3.0.6(2022-07-11) +修复u-image缺少emits申明 +## 3.0.5(2022-07-11) +修复u-upload缺少emits申明 +## 3.0.4(2022-07-10) +修复u-textarea/u-input/u-datetime-picker/u-number-box/u-radio-group/u-switch/u-rate在vue3下数据绑定 +## 3.0.3(2022-07-09) +启用自建演示二维码 +## 3.0.2(2022-07-09) +修复dayjs/clipboard等导致打包报错 +## 3.0.1(2022-07-09) +增加插件市场地址 +## 3.0.0(2022-07-09) +# uview-plus(vue3)初步发布 diff --git a/uni_modules/uview-plus/components/u--form/u--form.vue b/uni_modules/uview-plus/components/u--form/u--form.vue new file mode 100644 index 0000000..78e9dc4 --- /dev/null +++ b/uni_modules/uview-plus/components/u--form/u--form.vue @@ -0,0 +1,80 @@ + + + diff --git a/uni_modules/uview-plus/components/u--image/u--image.vue b/uni_modules/uview-plus/components/u--image/u--image.vue new file mode 100644 index 0000000..5916065 --- /dev/null +++ b/uni_modules/uview-plus/components/u--image/u--image.vue @@ -0,0 +1,50 @@ + + + \ No newline at end of file diff --git a/uni_modules/uview-plus/components/u--input/u--input.vue b/uni_modules/uview-plus/components/u--input/u--input.vue new file mode 100644 index 0000000..2a8933f --- /dev/null +++ b/uni_modules/uview-plus/components/u--input/u--input.vue @@ -0,0 +1,74 @@ + + + \ No newline at end of file diff --git a/uni_modules/uview-plus/components/u--text/u--text.vue b/uni_modules/uview-plus/components/u--text/u--text.vue new file mode 100644 index 0000000..9cdcf7b --- /dev/null +++ b/uni_modules/uview-plus/components/u--text/u--text.vue @@ -0,0 +1,45 @@ + + + diff --git a/uni_modules/uview-plus/components/u--textarea/u--textarea.vue b/uni_modules/uview-plus/components/u--textarea/u--textarea.vue new file mode 100644 index 0000000..becd23d --- /dev/null +++ b/uni_modules/uview-plus/components/u--textarea/u--textarea.vue @@ -0,0 +1,47 @@ + + + diff --git a/uni_modules/uview-plus/components/u-action-sheet/actionSheet.js b/uni_modules/uview-plus/components/u-action-sheet/actionSheet.js new file mode 100644 index 0000000..086898d --- /dev/null +++ b/uni_modules/uview-plus/components/u-action-sheet/actionSheet.js @@ -0,0 +1,26 @@ +/* + * @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, + wrapMaxHeight: '600px' + } +} diff --git a/uni_modules/uview-plus/components/u-action-sheet/props.js b/uni_modules/uview-plus/components/u-action-sheet/props.js new file mode 100644 index 0000000..eb45834 --- /dev/null +++ b/uni_modules/uview-plus/components/u-action-sheet/props.js @@ -0,0 +1,62 @@ +import { defineMixin } from '../../libs/vue' +import defProps from '../../libs/config/props.js' + +export const props = defineMixin({ + props: { + // 操作菜单是否展示 (默认false) + show: { + type: Boolean, + default: () => defProps.actionSheet.show + }, + // 标题 + title: { + type: String, + default: () => defProps.actionSheet.title + }, + // 选项上方的描述信息 + description: { + type: String, + default: () => defProps.actionSheet.description + }, + // 数据 + actions: { + type: Array, + default: () => defProps.actionSheet.actions + }, + // 取消按钮的文字,不为空时显示按钮 + cancelText: { + type: String, + default: () => defProps.actionSheet.cancelText + }, + // 点击某个菜单项时是否关闭弹窗 + closeOnClickAction: { + type: Boolean, + default: () => defProps.actionSheet.closeOnClickAction + }, + // 处理底部安全区(默认true) + safeAreaInsetBottom: { + type: Boolean, + default: () => defProps.actionSheet.safeAreaInsetBottom + }, + // 小程序的打开方式 + openType: { + type: String, + default: () => defProps.actionSheet.openType + }, + // 点击遮罩是否允许关闭 (默认true) + closeOnClickOverlay: { + type: Boolean, + default: () => defProps.actionSheet.closeOnClickOverlay + }, + // 圆角值 + round: { + type: [Boolean, String, Number], + default: () => defProps.actionSheet.round + }, + // 选项区域最大高度 + wrapMaxHeight: { + type: [String], + default: () => defProps.actionSheet.wrapMaxHeight + }, + } +}) diff --git a/uni_modules/uview-plus/components/u-action-sheet/u-action-sheet.vue b/uni_modules/uview-plus/components/u-action-sheet/u-action-sheet.vue new file mode 100644 index 0000000..98174b8 --- /dev/null +++ b/uni_modules/uview-plus/components/u-action-sheet/u-action-sheet.vue @@ -0,0 +1,283 @@ + + + + + + diff --git a/uni_modules/uview-plus/components/u-album/album.js b/uni_modules/uview-plus/components/u-album/album.js new file mode 100644 index 0000000..8aebaba --- /dev/null +++ b/uni_modules/uview-plus/components/u-album/album.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: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, + autoWrap: false, + unit: 'px', + stop: true, + } +} diff --git a/uni_modules/uview-plus/components/u-album/props.js b/uni_modules/uview-plus/components/u-album/props.js new file mode 100644 index 0000000..a219acb --- /dev/null +++ b/uni_modules/uview-plus/components/u-album/props.js @@ -0,0 +1,86 @@ +import { defineMixin } from '../../libs/vue' +import defProps from '../../libs/config/props.js' +export const props = defineMixin({ + props: { + // 图片地址,Array|Array形式 + urls: { + type: Array, + default: () => defProps.album.urls + }, + // 指定从数组的对象元素中读取哪个属性作为图片地址 + keyName: { + type: String, + default: () => defProps.album.keyName + }, + // 单图时,图片长边的长度 + singleSize: { + type: [String, Number], + default: () => defProps.album.singleSize + }, + // 多图时,图片边长 + multipleSize: { + type: [String, Number], + default: () => defProps.album.multipleSize + }, + // 多图时,图片水平和垂直之间的间隔 + space: { + type: [String, Number], + default: () => defProps.album.space + }, + // 单图时,图片缩放裁剪的模式 + singleMode: { + type: String, + default: () => defProps.album.singleMode + }, + // 多图时,图片缩放裁剪的模式 + multipleMode: { + type: String, + default: () => defProps.album.multipleMode + }, + // 最多展示的图片数量,超出时最后一个位置将会显示剩余图片数量 + maxCount: { + type: [String, Number], + default: () => defProps.album.maxCount + }, + // 是否可以预览图片 + previewFullImage: { + type: Boolean, + default: () => defProps.album.previewFullImage + }, + // 每行展示图片数量,如设置,singleSize和multipleSize将会无效 + rowCount: { + type: [String, Number], + default: () => defProps.album.rowCount + }, + // 超出maxCount时是否显示查看更多的提示 + showMore: { + type: Boolean, + default: () => defProps.album.showMore + }, + // 图片形状,circle-圆形,square-方形 + shape: { + type: String, + default: () => defProps.image.shape + }, + // 圆角,单位任意 + radius: { + type: [String, Number], + default: () => defProps.image.radius + }, + // 自适应换行 + autoWrap: { + type: Boolean, + default: () => defProps.album.autoWrap + }, + // 单位 + unit: { + type: [String], + default: () => defProps.album.unit + }, + // 阻止点击冒泡 + stop: { + type: Boolean, + default: () => defProps.album.stop + } + } +}) diff --git a/uni_modules/uview-plus/components/u-album/u-album.vue b/uni_modules/uview-plus/components/u-album/u-album.vue new file mode 100644 index 0000000..08f987a --- /dev/null +++ b/uni_modules/uview-plus/components/u-album/u-album.vue @@ -0,0 +1,279 @@ + + + + + diff --git a/uni_modules/uview-plus/components/u-alert/alert.js b/uni_modules/uview-plus/components/u-alert/alert.js new file mode 100644 index 0000000..8f8182c --- /dev/null +++ b/uni_modules/uview-plus/components/u-alert/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-plus/components/u-alert/props.js b/uni_modules/uview-plus/components/u-alert/props.js new file mode 100644 index 0000000..9f150b5 --- /dev/null +++ b/uni_modules/uview-plus/components/u-alert/props.js @@ -0,0 +1,46 @@ +import { defineMixin } from '../../libs/vue' +import defProps from '../../libs/config/props.js' +export const props = defineMixin({ + props: { + // 显示文字 + title: { + type: String, + default: () => defProps.alert.title + }, + // 主题,success/warning/info/error + type: { + type: String, + default: () => defProps.alert.type + }, + // 辅助性文字 + description: { + type: String, + default: () => defProps.alert.description + }, + // 是否可关闭 + closable: { + type: Boolean, + default: () => defProps.alert.closable + }, + // 是否显示图标 + showIcon: { + type: Boolean, + default: () => defProps.alert.showIcon + }, + // 浅或深色调,light-浅色,dark-深色 + effect: { + type: String, + default: () => defProps.alert.effect + }, + // 文字是否居中 + center: { + type: Boolean, + default: () => defProps.alert.center + }, + // 字体大小 + fontSize: { + type: [String, Number], + default: () => defProps.alert.fontSize + } + } +}) diff --git a/uni_modules/uview-plus/components/u-alert/u-alert.vue b/uni_modules/uview-plus/components/u-alert/u-alert.vue new file mode 100644 index 0000000..9f4fc4b --- /dev/null +++ b/uni_modules/uview-plus/components/u-alert/u-alert.vue @@ -0,0 +1,251 @@ + + + + + diff --git a/uni_modules/uview-plus/components/u-avatar-group/avatarGroup.js b/uni_modules/uview-plus/components/u-avatar-group/avatarGroup.js new file mode 100644 index 0000000..29ad008 --- /dev/null +++ b/uni_modules/uview-plus/components/u-avatar-group/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-plus/components/u-avatar-group/props.js b/uni_modules/uview-plus/components/u-avatar-group/props.js new file mode 100644 index 0000000..96ed871 --- /dev/null +++ b/uni_modules/uview-plus/components/u-avatar-group/props.js @@ -0,0 +1,54 @@ +import { defineMixin } from '../../libs/vue' +import defProps from '../../libs/config/props.js' +export const props = defineMixin({ + props: { + // 头像图片组 + urls: { + type: Array, + default: () => defProps.avatarGroup.urls + }, + // 最多展示的头像数量 + maxCount: { + type: [String, Number], + default: () => defProps.avatarGroup.maxCount + }, + // 头像形状 + shape: { + type: String, + default: () => defProps.avatarGroup.shape + }, + // 图片裁剪模式 + mode: { + type: String, + default: () => defProps.avatarGroup.mode + }, + // 超出maxCount时是否显示查看更多的提示 + showMore: { + type: Boolean, + default: () => defProps.avatarGroup.showMore + }, + // 头像大小 + size: { + type: [String, Number], + default: () => defProps.avatarGroup.size + }, + // 指定从数组的对象元素中读取哪个属性作为图片地址 + keyName: { + type: String, + default: () => defProps.avatarGroup.keyName + }, + // 头像之间的遮挡比例 + gap: { + type: [String, Number], + validator(value) { + return value >= 0 && value <= 1 + }, + default: () => defProps.avatarGroup.gap + }, + // 需额外显示的值 + extraValue: { + type: [Number, String], + default: () => defProps.avatarGroup.extraValue + } + } +}) diff --git a/uni_modules/uview-plus/components/u-avatar-group/u-avatar-group.vue b/uni_modules/uview-plus/components/u-avatar-group/u-avatar-group.vue new file mode 100644 index 0000000..fdfeaad --- /dev/null +++ b/uni_modules/uview-plus/components/u-avatar-group/u-avatar-group.vue @@ -0,0 +1,110 @@ + + + + + diff --git a/uni_modules/uview-plus/components/u-avatar/avatar.js b/uni_modules/uview-plus/components/u-avatar/avatar.js new file mode 100644 index 0000000..c097d4e --- /dev/null +++ b/uni_modules/uview-plus/components/u-avatar/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-plus/components/u-avatar/props.js b/uni_modules/uview-plus/components/u-avatar/props.js new file mode 100644 index 0000000..8fa15ac --- /dev/null +++ b/uni_modules/uview-plus/components/u-avatar/props.js @@ -0,0 +1,81 @@ +import { defineMixin } from '../../libs/vue' +import defProps from '../../libs/config/props.js' +import test from '../../libs/function/test'; +export const props = defineMixin({ + props: { + // 头像图片路径(不能为相对路径) + src: { + type: String, + default: () => defProps.avatar.src + }, + // 头像形状,circle-圆形,square-方形 + shape: { + type: String, + default: () => defProps.avatar.shape + }, + // 头像尺寸 + size: { + type: [String, Number], + default: () => defProps.avatar.size + }, + // 裁剪模式 + mode: { + type: String, + default: () => defProps.avatar.mode + }, + // 显示的文字 + text: { + type: String, + default: () => defProps.avatar.text + }, + // 背景色 + bgColor: { + type: String, + default: () => defProps.avatar.bgColor + }, + // 文字颜色 + color: { + type: String, + default: () => defProps.avatar.color + }, + // 文字大小 + fontSize: { + type: [String, Number], + default: () => defProps.avatar.fontSize + }, + // 显示的图标 + icon: { + type: String, + default: () => defProps.avatar.icon + }, + // 显示小程序头像,只对百度,微信,QQ小程序有效 + mpAvatar: { + type: Boolean, + default: () => defProps.avatar.mpAvatar + }, + // 是否使用随机背景色 + randomBgColor: { + type: Boolean, + default: () => defProps.avatar.randomBgColor + }, + // 加载失败的默认头像(组件有内置默认图片) + defaultUrl: { + type: String, + default: () => defProps.avatar.defaultUrl + }, + // 如果配置了randomBgColor为true,且配置了此值,则从默认的背景色数组中取出对应索引的颜色值,取值0-19之间 + colorIndex: { + type: [String, Number], + // 校验参数规则,索引在0-19之间 + validator(n) { + return test.range(n, [0, 19]) || n === '' + }, + default: () => defProps.avatar.colorIndex + }, + // 组件标识符 + name: { + type: String, + default: () => defProps.avatar.name + } + } +}) diff --git a/uni_modules/uview-plus/components/u-avatar/u-avatar.vue b/uni_modules/uview-plus/components/u-avatar/u-avatar.vue new file mode 100644 index 0000000..1830e35 --- /dev/null +++ b/uni_modules/uview-plus/components/u-avatar/u-avatar.vue @@ -0,0 +1,180 @@ + + + + + diff --git a/uni_modules/uview-plus/components/u-back-top/backtop.js b/uni_modules/uview-plus/components/u-back-top/backtop.js new file mode 100644 index 0000000..13052ab --- /dev/null +++ b/uni_modules/uview-plus/components/u-back-top/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-plus/components/u-back-top/props.js b/uni_modules/uview-plus/components/u-back-top/props.js new file mode 100644 index 0000000..b714641 --- /dev/null +++ b/uni_modules/uview-plus/components/u-back-top/props.js @@ -0,0 +1,56 @@ +import { defineMixin } from '../../libs/vue' +import defProps from '../../libs/config/props.js' +export const props = defineMixin({ + props: { + // 返回顶部的形状,circle-圆形,square-方形 + mode: { + type: String, + default: () => defProps.backtop.mode + }, + // 自定义图标 + icon: { + type: String, + default: () => defProps.backtop.icon + }, + // 提示文字 + text: { + type: String, + default: () => defProps.backtop.text + }, + // 返回顶部滚动时间 + duration: { + type: [String, Number], + default: () => defProps.backtop.duration + }, + // 滚动距离 + scrollTop: { + type: [String, Number], + default: () => defProps.backtop.scrollTop + }, + // 距离顶部多少距离显示,单位px + top: { + type: [String, Number], + default: () => defProps.backtop.top + }, + // 返回顶部按钮到底部的距离,单位px + bottom: { + type: [String, Number], + default: () => defProps.backtop.bottom + }, + // 返回顶部按钮到右边的距离,单位px + right: { + type: [String, Number], + default: () => defProps.backtop.right + }, + // 层级 + zIndex: { + type: [String, Number], + default: () => defProps.backtop.zIndex + }, + // 图标的样式,对象形式 + iconStyle: { + type: Object, + default: () => defProps.backtop.iconStyle + } + } +}) diff --git a/uni_modules/uview-plus/components/u-back-top/u-back-top.vue b/uni_modules/uview-plus/components/u-back-top/u-back-top.vue new file mode 100644 index 0000000..fcdb045 --- /dev/null +++ b/uni_modules/uview-plus/components/u-back-top/u-back-top.vue @@ -0,0 +1,133 @@ + + + + + diff --git a/uni_modules/uview-plus/components/u-badge/badge.js b/uni_modules/uview-plus/components/u-badge/badge.js new file mode 100644 index 0000000..8818f98 --- /dev/null +++ b/uni_modules/uview-plus/components/u-badge/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-plus/components/u-badge/props.js b/uni_modules/uview-plus/components/u-badge/props.js new file mode 100644 index 0000000..5ed924b --- /dev/null +++ b/uni_modules/uview-plus/components/u-badge/props.js @@ -0,0 +1,79 @@ +import { defineMixin } from '../../libs/vue' +import defProps from '../../libs/config/props.js' +export const props = defineMixin({ + props: { + // 是否显示圆点 + isDot: { + type: Boolean, + default: () => defProps.badge.isDot + }, + // 显示的内容 + value: { + type: [Number, String], + default: () => defProps.badge.value + }, + // 显示的内容 + modelValue: { + type: [Number, String], + default: () => defProps.badge.modelValue + }, + // 是否显示 + show: { + type: Boolean, + default: () => defProps.badge.show + }, + // 最大值,超过最大值会显示 '{max}+' + max: { + type: [Number, String], + default: () => defProps.badge.max + }, + // 主题类型,error|warning|success|primary + type: { + type: String, + default: () => defProps.badge.type + }, + // 当数值为 0 时,是否展示 Badge + showZero: { + type: Boolean, + default: () => defProps.badge.showZero + }, + // 背景颜色,优先级比type高,如设置,type参数会失效 + bgColor: { + type: [String, null], + default: () => defProps.badge.bgColor + }, + // 字体颜色 + color: { + type: [String, null], + default: () => defProps.badge.color + }, + // 徽标形状,circle-四角均为圆角,horn-左下角为直角 + shape: { + type: String, + default: () => defProps.badge.shape + }, + // 设置数字的显示方式,overflow|ellipsis|limit + // overflow会根据max字段判断,超出显示`${max}+` + // ellipsis会根据max判断,超出显示`${max}...` + // limit会依据1000作为判断条件,超出1000,显示`${value/1000}K`,比如2.2k、3.34w,最多保留2位小数 + numberType: { + type: String, + default: () => defProps.badge.numberType + }, + // 设置badge的位置偏移,格式为 [x, y],也即设置的为top和right的值,absolute为true时有效 + offset: { + type: Array, + default: () => defProps.badge.offset + }, + // 是否反转背景和字体颜色 + inverted: { + type: Boolean, + default: () => defProps.badge.inverted + }, + // 是否绝对定位 + absolute: { + type: Boolean, + default: () => defProps.badge.absolute + } + } +}) diff --git a/uni_modules/uview-plus/components/u-badge/u-badge.vue b/uni_modules/uview-plus/components/u-badge/u-badge.vue new file mode 100644 index 0000000..ecc843f --- /dev/null +++ b/uni_modules/uview-plus/components/u-badge/u-badge.vue @@ -0,0 +1,177 @@ + + + + + diff --git a/uni_modules/uview-plus/components/u-box/props.js b/uni_modules/uview-plus/components/u-box/props.js new file mode 100644 index 0000000..cfe75e4 --- /dev/null +++ b/uni_modules/uview-plus/components/u-box/props.js @@ -0,0 +1,27 @@ +import { defineMixin } from '../../libs/vue' +import defProps from '../../libs/config/props.js' + +export const propsBox = defineMixin({ + props: { + // 背景色 + bgColors: { + type: [Array], + default: ['#EEFCFF', '#FCF8FF', '#FDF8F2'] + }, + // 高度 + height: { + type: [String], + default: "160px" + }, + // 圆角 + borderRadius: { + type: [String], + default: "6px" + }, + // 间隔 + gap: { + type: [String], + default: "15px" + }, + } +}) diff --git a/uni_modules/uview-plus/components/u-box/u-box.vue b/uni_modules/uview-plus/components/u-box/u-box.vue new file mode 100644 index 0000000..ce47b5c --- /dev/null +++ b/uni_modules/uview-plus/components/u-box/u-box.vue @@ -0,0 +1,92 @@ + + + + + diff --git a/uni_modules/uview-plus/components/u-button/button.js b/uni_modules/uview-plus/components/u-button/button.js new file mode 100644 index 0000000..4519ff8 --- /dev/null +++ b/uni_modules/uview-plus/components/u-button/button.js @@ -0,0 +1,43 @@ +/* + * @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: '', + stop: true, + } +} diff --git a/uni_modules/uview-plus/components/u-button/nvue.scss b/uni_modules/uview-plus/components/u-button/nvue.scss new file mode 100644 index 0000000..490db7d --- /dev/null +++ b/uni_modules/uview-plus/components/u-button/nvue.scss @@ -0,0 +1,46 @@ +$u-button-active-opacity:0.75 !default; +$u-button-loading-text-margin-left:4px !default; +$u-button-text-color: #FFFFFF !default; +$u-button-text-plain-error-color:$u-error !default; +$u-button-text-plain-warning-color:$u-warning !default; +$u-button-text-plain-success-color:$u-success !default; +$u-button-text-plain-info-color:$u-info !default; +$u-button-text-plain-primary-color:$u-primary !default; +.u-button { + &--active { + opacity: $u-button-active-opacity; + } + + &--active--plain { + background-color: rgb(217, 217, 217); + } + + &__loading-text { + margin-left:$u-button-loading-text-margin-left; + } + + &__text, + &__loading-text { + color:$u-button-text-color; + } + + &__text--plain--error { + color:$u-button-text-plain-error-color; + } + + &__text--plain--warning { + color:$u-button-text-plain-warning-color; + } + + &__text--plain--success{ + color:$u-button-text-plain-success-color; + } + + &__text--plain--info { + color:$u-button-text-plain-info-color; + } + + &__text--plain--primary { + color:$u-button-text-plain-primary-color; + } +} \ No newline at end of file diff --git a/uni_modules/uview-plus/components/u-button/props.js b/uni_modules/uview-plus/components/u-button/props.js new file mode 100644 index 0000000..c42d019 --- /dev/null +++ b/uni_modules/uview-plus/components/u-button/props.js @@ -0,0 +1,159 @@ +import { defineMixin } from '../../libs/vue' +import defProps from '../../libs/config/props.js' +export const props = defineMixin({ + props: { + // 是否细边框 + hairline: { + type: Boolean, + default: () => defProps.button.hairline + }, + // 按钮的预置样式,info,primary,error,warning,success + type: { + type: String, + default: () => defProps.button.type + }, + // 按钮尺寸,large,normal,small,mini + size: { + type: String, + default: () => defProps.button.size + }, + // 按钮形状,circle(两边为半圆),square(带圆角) + shape: { + type: String, + default: () => defProps.button.shape + }, + // 按钮是否镂空 + plain: { + type: Boolean, + default: () => defProps.button.plain + }, + // 是否禁止状态 + disabled: { + type: Boolean, + default: () => defProps.button.disabled + }, + // 是否加载中 + loading: { + type: Boolean, + default: () => defProps.button.loading + }, + // 加载中提示文字 + loadingText: { + type: [String, Number], + default: () => defProps.button.loadingText + }, + // 加载状态图标类型 + loadingMode: { + type: String, + default: () => defProps.button.loadingMode + }, + // 加载图标大小 + loadingSize: { + type: [String, Number], + default: () => defProps.button.loadingSize + }, + // 开放能力,具体请看uniapp稳定关于button组件部分说明 + // https://uniapp.dcloud.io/component/button + openType: { + type: String, + default: () => defProps.button.openType + }, + // 用于
组件,点击分别会触发 组件的 submit/reset 事件 + // 取值为submit(提交表单),reset(重置表单) + formType: { + type: String, + default: () => defProps.button.formType + }, + // 打开 APP 时,向 APP 传递的参数,open-type=launchApp时有效 + // 只微信小程序、QQ小程序有效 + appParameter: { + type: String, + default: () => defProps.button.appParameter + }, + // 指定是否阻止本节点的祖先节点出现点击态,微信小程序有效 + hoverStopPropagation: { + type: Boolean, + default: () => defProps.button.hoverStopPropagation + }, + // 指定返回用户信息的语言,zh_CN 简体中文,zh_TW 繁体中文,en 英文。只微信小程序有效 + lang: { + type: String, + default: () => defProps.button.lang + }, + // 会话来源,open-type="contact"时有效。只微信小程序有效 + sessionFrom: { + type: String, + default: () => defProps.button.sessionFrom + }, + // 会话内消息卡片标题,open-type="contact"时有效 + // 默认当前标题,只微信小程序有效 + sendMessageTitle: { + type: String, + default: () => defProps.button.sendMessageTitle + }, + // 会话内消息卡片点击跳转小程序路径,open-type="contact"时有效 + // 默认当前分享路径,只微信小程序有效 + sendMessagePath: { + type: String, + default: () => defProps.button.sendMessagePath + }, + // 会话内消息卡片图片,open-type="contact"时有效 + // 默认当前页面截图,只微信小程序有效 + sendMessageImg: { + type: String, + default: () => defProps.button.sendMessageImg + }, + // 是否显示会话内消息卡片,设置此参数为 true,用户进入客服会话会在右下角显示"可能要发送的小程序"提示, + // 用户点击后可以快速发送小程序消息,open-type="contact"时有效 + showMessageCard: { + type: Boolean, + default: () => defProps.button.showMessageCard + }, + // 额外传参参数,用于小程序的data-xxx属性,通过target.dataset.name获取 + dataName: { + type: String, + default: () => defProps.button.dataName + }, + // 节流,一定时间内只能触发一次 + throttleTime: { + type: [String, Number], + default: () => defProps.button.throttleTime + }, + // 按住后多久出现点击态,单位毫秒 + hoverStartTime: { + type: [String, Number], + default: () => defProps.button.hoverStartTime + }, + // 手指松开后点击态保留时间,单位毫秒 + hoverStayTime: { + type: [String, Number], + default: () => defProps.button.hoverStayTime + }, + // 按钮文字,之所以通过props传入,是因为slot传入的话 + // nvue中无法控制文字的样式 + text: { + type: [String, Number], + default: () => defProps.button.text + }, + // 按钮图标 + icon: { + type: String, + default: () => defProps.button.icon + }, + // 按钮图标 + iconColor: { + type: String, + default: () => defProps.button.icon + }, + // 按钮颜色,支持传入linear-gradient渐变色 + color: { + type: String, + default: () => defProps.button.color + }, + // 停止冒泡 + stop: { + type: Boolean, + default: () => defProps.button.stop + }, + } +}) diff --git a/uni_modules/uview-plus/components/u-button/u-button.vue b/uni_modules/uview-plus/components/u-button/u-button.vue new file mode 100644 index 0000000..c9a52ef --- /dev/null +++ b/uni_modules/uview-plus/components/u-button/u-button.vue @@ -0,0 +1,505 @@ + + + + + diff --git a/uni_modules/uview-plus/components/u-button/vue.scss b/uni_modules/uview-plus/components/u-button/vue.scss new file mode 100644 index 0000000..35fe999 --- /dev/null +++ b/uni_modules/uview-plus/components/u-button/vue.scss @@ -0,0 +1,81 @@ +// nvue下hover-class无效 +$u-button-before-top:50% !default; +$u-button-before-left:50% !default; +$u-button-before-width:100% !default; +$u-button-before-height:100% !default; +$u-button-before-transform:translate(-50%, -50%) !default; +$u-button-before-opacity:0 !default; +$u-button-before-background-color:#000 !default; +$u-button-before-border-color:#000 !default; +$u-button-active-before-opacity:.15 !default; +$u-button-icon-margin-left:4px !default; +$u-button-plain-u-button-info-color:$u-info; +$u-button-plain-u-button-success-color:$u-success; +$u-button-plain-u-button-error-color:$u-error; +$u-button-plain-u-button-warning-color:$u-warning; + +.u-button { + width: 100%; + white-space: nowrap; + + &__text { + white-space: nowrap; + line-height: 1; + } + + &:before { + position: absolute; + top:$u-button-before-top; + left:$u-button-before-left; + width:$u-button-before-width; + height:$u-button-before-height; + border: inherit; + border-radius: inherit; + transform:$u-button-before-transform; + opacity:$u-button-before-opacity; + content: " "; + background-color:$u-button-before-background-color; + border-color:$u-button-before-border-color; + } + + &--active { + &:before { + opacity: .15 + } + } + + &__icon+&__text:not(:empty), + &__loading-text { + margin-left:$u-button-icon-margin-left; + } + + &--plain { + &.u-button--primary { + color: $u-primary; + } + } + + &--plain { + &.u-button--info { + color:$u-button-plain-u-button-info-color; + } + } + + &--plain { + &.u-button--success { + color:$u-button-plain-u-button-success-color; + } + } + + &--plain { + &.u-button--error { + color:$u-button-plain-u-button-error-color; + } + } + + &--plain { + &.u-button--warning { + color:$u-button-plain-u-button-warning-color; + } + } +} diff --git a/uni_modules/uview-plus/components/u-calendar/calendar.js b/uni_modules/uview-plus/components/u-calendar/calendar.js new file mode 100644 index 0000000..7f90beb --- /dev/null +++ b/uni_modules/uview-plus/components/u-calendar/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-plus/components/u-calendar/header.vue b/uni_modules/uview-plus/components/u-calendar/header.vue new file mode 100644 index 0000000..3273bd8 --- /dev/null +++ b/uni_modules/uview-plus/components/u-calendar/header.vue @@ -0,0 +1,103 @@ + + + + + diff --git a/uni_modules/uview-plus/components/u-calendar/month.vue b/uni_modules/uview-plus/components/u-calendar/month.vue new file mode 100644 index 0000000..76c81c5 --- /dev/null +++ b/uni_modules/uview-plus/components/u-calendar/month.vue @@ -0,0 +1,587 @@ + + + + + diff --git a/uni_modules/uview-plus/components/u-calendar/props.js b/uni_modules/uview-plus/components/u-calendar/props.js new file mode 100644 index 0000000..df990fd --- /dev/null +++ b/uni_modules/uview-plus/components/u-calendar/props.js @@ -0,0 +1,147 @@ +import { defineMixin } from '../../libs/vue' +import defProps from '../../libs/config/props.js' + +export const props = defineMixin({ + props: { + // 日历顶部标题 + title: { + type: String, + default: () => defProps.calendar.title + }, + // 是否显示标题 + showTitle: { + type: Boolean, + default: () => defProps.calendar.showTitle + }, + // 是否显示副标题 + showSubtitle: { + type: Boolean, + default: () => defProps.calendar.showSubtitle + }, + // 日期类型选择,single-选择单个日期,multiple-可以选择多个日期,range-选择日期范围 + mode: { + type: String, + default: () => defProps.calendar.mode + }, + // mode=range时,第一个日期底部的提示文字 + startText: { + type: String, + default: () => defProps.calendar.startText + }, + // mode=range时,最后一个日期底部的提示文字 + endText: { + type: String, + default: () => defProps.calendar.endText + }, + // 自定义列表 + customList: { + type: Array, + default: () => defProps.calendar.customList + }, + // 主题色,对底部按钮和选中日期有效 + color: { + type: String, + default: () => defProps.calendar.color + }, + // 最小的可选日期 + minDate: { + type: [String, Number], + default: () => defProps.calendar.minDate + }, + // 最大可选日期 + maxDate: { + type: [String, Number], + default: () => defProps.calendar.maxDate + }, + // 默认选中的日期,mode为multiple或range是必须为数组格式 + defaultDate: { + type: [Array, String, Date, null], + default: () => defProps.calendar.defaultDate + }, + // mode=multiple时,最多可选多少个日期 + maxCount: { + type: [String, Number], + default: () => defProps.calendar.maxCount + }, + // 日期行高 + rowHeight: { + type: [String, Number], + default: () => defProps.calendar.rowHeight + }, + // 日期格式化函数 + formatter: { + type: [Function, null], + default: () => defProps.calendar.formatter + }, + // 是否显示农历 + showLunar: { + type: Boolean, + default: () => defProps.calendar.showLunar + }, + // 是否显示月份背景色 + showMark: { + type: Boolean, + default: () => defProps.calendar.showMark + }, + // 确定按钮的文字 + confirmText: { + type: String, + default: () => defProps.calendar.confirmText + }, + // 确认按钮处于禁用状态时的文字 + confirmDisabledText: { + type: String, + default: () => defProps.calendar.confirmDisabledText + }, + // 是否显示日历弹窗 + show: { + type: Boolean, + default: () => defProps.calendar.show + }, + // 是否允许点击遮罩关闭日历 + closeOnClickOverlay: { + type: Boolean, + default: () => defProps.calendar.closeOnClickOverlay + }, + // 是否为只读状态,只读状态下禁止选择日期 + readonly: { + type: Boolean, + default: () => defProps.calendar.readonly + }, + // 是否展示确认按钮 + showConfirm: { + type: Boolean, + default: () => defProps.calendar.showConfirm + }, + // 日期区间最多可选天数,默认无限制,mode = range时有效 + maxRange: { + type: [Number, String], + default: () => defProps.calendar.maxRange + }, + // 范围选择超过最多可选天数时的提示文案,mode = range时有效 + rangePrompt: { + type: String, + default: () => defProps.calendar.rangePrompt + }, + // 范围选择超过最多可选天数时,是否展示提示文案,mode = range时有效 + showRangePrompt: { + type: Boolean, + default: () => defProps.calendar.showRangePrompt + }, + // 是否允许日期范围的起止时间为同一天,mode = range时有效 + allowSameDay: { + type: Boolean, + default: () => defProps.calendar.allowSameDay + }, + // 圆角值 + round: { + type: [Boolean, String, Number], + default: () => defProps.calendar.round + }, + // 最多展示月份数量 + monthNum: { + type: [Number, String], + default: 3 + } + } +}) diff --git a/uni_modules/uview-plus/components/u-calendar/u-calendar.vue b/uni_modules/uview-plus/components/u-calendar/u-calendar.vue new file mode 100644 index 0000000..c8f77ff --- /dev/null +++ b/uni_modules/uview-plus/components/u-calendar/u-calendar.vue @@ -0,0 +1,409 @@ + + + + + diff --git a/uni_modules/uview-plus/components/u-calendar/util.js b/uni_modules/uview-plus/components/u-calendar/util.js new file mode 100644 index 0000000..18762c1 --- /dev/null +++ b/uni_modules/uview-plus/components/u-calendar/util.js @@ -0,0 +1,86 @@ +import dayjs from 'dayjs/esm/index' +export default { + methods: { + // 设置月份数据 + setMonth() { + // 月初是周几 + const day = dayjs(this.date).date(1).day() + const start = day == 0 ? 6 : day - 1 + + // 本月天数 + const days = dayjs(this.date).endOf('month').format('D') + + // 上个月天数 + const prevDays = dayjs(this.date).endOf('month').subtract(1, 'month').format('D') + + // 日期数据 + const arr = [] + // 清空表格 + this.month = [] + + // 添加上月数据 + arr.push( + ...new Array(start).fill(1).map((e, i) => { + const day = prevDays - start + i + 1 + + return { + value: day, + disabled: true, + date: dayjs(this.date).subtract(1, 'month').date(day).format('YYYY-MM-DD') + } + }) + ) + + // 添加本月数据 + arr.push( + ...new Array(days - 0).fill(1).map((e, i) => { + const day = i + 1 + + return { + value: day, + date: dayjs(this.date).date(day).format('YYYY-MM-DD') + } + }) + ) + + // 添加下个月 + arr.push( + ...new Array(42 - days - start).fill(1).map((e, i) => { + const day = i + 1 + + return { + value: day, + disabled: true, + date: dayjs(this.date).add(1, 'month').date(day).format('YYYY-MM-DD') + } + }) + ) + + // 分割数组 + for (let n = 0; n < arr.length; n += 7) { + this.month.push( + arr.slice(n, n + 7).map((e, i) => { + e.index = i + n + + // 自定义信息 + const custom = this.customList.find((c) => c.date == e.date) + + // 农历 + if (this.lunar) { + const { + IDayCn, + IMonthCn + } = this.getLunar(e.date) + e.lunar = IDayCn == '初一' ? IMonthCn : IDayCn + } + + return { + ...e, + ...custom + } + }) + ) + } + } + } +} diff --git a/uni_modules/uview-plus/components/u-car-keyboard/carKeyboard.js b/uni_modules/uview-plus/components/u-car-keyboard/carKeyboard.js new file mode 100644 index 0000000..af1baa0 --- /dev/null +++ b/uni_modules/uview-plus/components/u-car-keyboard/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-plus/components/u-car-keyboard/props.js b/uni_modules/uview-plus/components/u-car-keyboard/props.js new file mode 100644 index 0000000..7cca0ae --- /dev/null +++ b/uni_modules/uview-plus/components/u-car-keyboard/props.js @@ -0,0 +1,17 @@ +import { defineMixin } from '../../libs/vue' +import defProps from '../../libs/config/props.js' + +export const props = defineMixin({ + props: { + // 是否打乱键盘按键的顺序 + random: { + type: Boolean, + default: false + }, + // 输入一个中文后,是否自动切换到英文 + autoChange: { + type: Boolean, + default: false + } + } +}) diff --git a/uni_modules/uview-plus/components/u-car-keyboard/u-car-keyboard.vue b/uni_modules/uview-plus/components/u-car-keyboard/u-car-keyboard.vue new file mode 100644 index 0000000..d78aab0 --- /dev/null +++ b/uni_modules/uview-plus/components/u-car-keyboard/u-car-keyboard.vue @@ -0,0 +1,315 @@ + + + + + diff --git a/uni_modules/uview-plus/components/u-card/props.js b/uni_modules/uview-plus/components/u-card/props.js new file mode 100644 index 0000000..d1de61c --- /dev/null +++ b/uni_modules/uview-plus/components/u-card/props.js @@ -0,0 +1,140 @@ +import { defineMixin } from '../../libs/vue' +import defProps from '../../libs/config/props.js' + +export const propsCard = defineMixin({ + props: { + // 与屏幕两侧是否留空隙 + full: { + type: Boolean, + default: false + }, + // 标题 + title: { + type: String, + default: '' + }, + // 标题颜色 + titleColor: { + type: String, + default: '#303133' + }, + // 标题字体大小 + titleSize: { + type: [Number, String], + default: '15px' + }, + // 副标题 + subTitle: { + type: String, + default: '' + }, + // 副标题颜色 + subTitleColor: { + type: String, + default: '#909399' + }, + // 副标题字体大小 + subTitleSize: { + type: [Number, String], + default: '13' + }, + // 是否显示外部边框,只对full=false时有效(卡片与边框有空隙时) + border: { + type: Boolean, + default: true + }, + // 用于标识点击了第几个 + index: { + type: [Number, String, Object], + default: '' + }, + // 用于隔开上下左右的边距,带单位的写法,如:"30px 30px","20px 20px 30px 30px" + margin: { + type: String, + default: '15px' + }, + // card卡片的圆角 + borderRadius: { + type: [Number, String], + default: '8px' + }, + // 头部自定义样式,对象形式 + headStyle: { + type: Object, + default() { + return {}; + } + }, + // 主体自定义样式,对象形式 + bodyStyle: { + type: Object, + default() { + return {}; + } + }, + // 底部自定义样式,对象形式 + footStyle: { + type: Object, + default() { + return {}; + } + }, + // 头部是否下边框 + headBorderBottom: { + type: Boolean, + default: true + }, + // 底部是否有上边框 + footBorderTop: { + type: Boolean, + default: true + }, + // 标题左边的缩略图 + thumb: { + type: String, + default: '' + }, + // 缩略图宽高 + thumbWidth: { + type: [String, Number], + default: '30px' + }, + // 缩略图是否为圆形 + thumbCircle: { + type: Boolean, + default: false + }, + // 给head,body,foot的内边距 + padding: { + type: [String, Number], + default: '15px' + }, + paddingHead: { + type: [String, Number], + default: '' + }, + paddingBody: { + type: [String, Number], + default: '' + }, + paddingFoot: { + type: [String, Number], + default: '' + }, + // 是否显示头部 + showHead: { + type: Boolean, + default: true + }, + // 是否显示尾部 + showFoot: { + type: Boolean, + default: true + }, + // 卡片外围阴影,字符串形式 + boxShadow: { + type: String, + default: 'none' + } + } +}) diff --git a/uni_modules/uview-plus/components/u-card/u-card.vue b/uni_modules/uview-plus/components/u-card/u-card.vue new file mode 100644 index 0000000..f04758a --- /dev/null +++ b/uni_modules/uview-plus/components/u-card/u-card.vue @@ -0,0 +1,186 @@ + + + + + diff --git a/uni_modules/uview-plus/components/u-cate-tab/u-cate-tab.vue b/uni_modules/uview-plus/components/u-cate-tab/u-cate-tab.vue new file mode 100644 index 0000000..53f7239 --- /dev/null +++ b/uni_modules/uview-plus/components/u-cate-tab/u-cate-tab.vue @@ -0,0 +1,317 @@ + + + + diff --git a/uni_modules/uview-plus/components/u-cell-group/cellGroup.js b/uni_modules/uview-plus/components/u-cell-group/cellGroup.js new file mode 100644 index 0000000..d48a9cd --- /dev/null +++ b/uni_modules/uview-plus/components/u-cell-group/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-plus/components/u-cell-group/props.js b/uni_modules/uview-plus/components/u-cell-group/props.js new file mode 100644 index 0000000..59c2012 --- /dev/null +++ b/uni_modules/uview-plus/components/u-cell-group/props.js @@ -0,0 +1,16 @@ +import { defineMixin } from '../../libs/vue' +import defProps from '../../libs/config/props.js' +export const props = defineMixin({ + props: { + // 分组标题 + title: { + type: String, + default: () => defProps.cellGroup.title + }, + // 是否显示外边框 + border: { + type: Boolean, + default: () => defProps.cellGroup.border + } + } +}) diff --git a/uni_modules/uview-plus/components/u-cell-group/u-cell-group.vue b/uni_modules/uview-plus/components/u-cell-group/u-cell-group.vue new file mode 100644 index 0000000..40ed2dd --- /dev/null +++ b/uni_modules/uview-plus/components/u-cell-group/u-cell-group.vue @@ -0,0 +1,67 @@ + + + + + + diff --git a/uni_modules/uview-plus/components/u-cell/cell.js b/uni_modules/uview-plus/components/u-cell/cell.js new file mode 100644 index 0000000..425ea3f --- /dev/null +++ b/uni_modules/uview-plus/components/u-cell/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-plus/components/u-cell/props.js b/uni_modules/uview-plus/components/u-cell/props.js new file mode 100644 index 0000000..73f5210 --- /dev/null +++ b/uni_modules/uview-plus/components/u-cell/props.js @@ -0,0 +1,112 @@ +import { defineMixin } from '../../libs/vue' +import defProps from '../../libs/config/props.js' +export const props = defineMixin({ + props: { + // 标题 + title: { + type: [String, Number], + default: () => defProps.cell.title + }, + // 标题下方的描述信息 + label: { + type: [String, Number], + default: () => defProps.cell.label + }, + // 右侧的内容 + value: { + type: [String, Number], + default: () => defProps.cell.value + }, + // 左侧图标名称,或者图片链接(本地文件建议使用绝对地址) + icon: { + type: String, + default: () => defProps.cell.icon + }, + // 是否禁用cell + disabled: { + type: Boolean, + default: () => defProps.cell.disabled + }, + // 是否显示下边框 + border: { + type: Boolean, + default: () => defProps.cell.border + }, + // 内容是否垂直居中(主要是针对右侧的value部分) + center: { + type: Boolean, + default: () => defProps.cell.center + }, + // 点击后跳转的URL地址 + url: { + type: String, + default: () => defProps.cell.url + }, + // 链接跳转的方式,内部使用的是uView封装的route方法,可能会进行拦截操作 + linkType: { + type: String, + default: () => defProps.cell.linkType + }, + // 是否开启点击反馈(表现为点击时加上灰色背景) + clickable: { + type: Boolean, + default: () => defProps.cell.clickable + }, + // 是否展示右侧箭头并开启点击反馈 + isLink: { + type: Boolean, + default: () => defProps.cell.isLink + }, + // 是否显示表单状态下的必填星号(此组件可能会内嵌入input组件) + required: { + type: Boolean, + default: () => defProps.cell.required + }, + // 右侧的图标箭头 + rightIcon: { + type: String, + default: () => defProps.cell.rightIcon + }, + // 右侧箭头的方向,可选值为:left,up,down + arrowDirection: { + type: String, + default: () => defProps.cell.arrowDirection + }, + // 左侧图标样式 + iconStyle: { + type: [Object, String], + default: () => { + return defProps.cell.iconStyle + } + }, + // 右侧箭头图标的样式 + rightIconStyle: { + type: [Object, String], + default: () => { + return defProps.cell.rightIconStyle + } + }, + // 标题的样式 + titleStyle: { + type: [Object, String], + default: () => { + return defProps.cell.titleStyle + } + }, + // 单位元的大小,可选值为large + size: { + type: String, + default: () => defProps.cell.size + }, + // 点击cell是否阻止事件传播 + stop: { + type: Boolean, + default: () => defProps.cell.stop + }, + // 标识符,cell被点击时返回 + name: { + type: [Number, String], + default: () => defProps.cell.name + } + } +}) diff --git a/uni_modules/uview-plus/components/u-cell/u-cell.vue b/uni_modules/uview-plus/components/u-cell/u-cell.vue new file mode 100644 index 0000000..fd20778 --- /dev/null +++ b/uni_modules/uview-plus/components/u-cell/u-cell.vue @@ -0,0 +1,268 @@ + + + + + diff --git a/uni_modules/uview-plus/components/u-checkbox-group/checkboxGroup.js b/uni_modules/uview-plus/components/u-checkbox-group/checkboxGroup.js new file mode 100644 index 0000000..d0e22b6 --- /dev/null +++ b/uni_modules/uview-plus/components/u-checkbox-group/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-plus/components/u-checkbox-group/props.js b/uni_modules/uview-plus/components/u-checkbox-group/props.js new file mode 100644 index 0000000..222d184 --- /dev/null +++ b/uni_modules/uview-plus/components/u-checkbox-group/props.js @@ -0,0 +1,93 @@ +import { defineMixin } from '../../libs/vue' +import defProps from '../../libs/config/props.js' + +export const props = defineMixin({ + props: { + // 标识符 + name: { + type: String, + default: () => defProps.checkboxGroup.name + }, + // #ifdef VUE3 + // 绑定的值 + modelValue: { + type: Array, + default: () => defProps.checkboxGroup.value + }, + // #endif + // #ifdef VUE2 + // 绑定的值 + value: { + type: Array, + default: () => defProps.checkboxGroup.value + }, + // #endif + // 形状,circle-圆形,square-方形 + shape: { + type: String, + default: () => defProps.checkboxGroup.shape + }, + // 是否禁用全部checkbox + disabled: { + type: Boolean, + default: () => defProps.checkboxGroup.disabled + }, + + // 选中状态下的颜色,如设置此值,将会覆盖parent的activeColor值 + activeColor: { + type: String, + default: () => defProps.checkboxGroup.activeColor + }, + // 未选中的颜色 + inactiveColor: { + type: String, + default: () => defProps.checkboxGroup.inactiveColor + }, + + // 整个组件的尺寸,默认px + size: { + type: [String, Number], + default: () => defProps.checkboxGroup.size + }, + // 布局方式,row-横向,column-纵向 + placement: { + type: String, + default: () => defProps.checkboxGroup.placement + }, + // label的字体大小,px单位 + labelSize: { + type: [String, Number], + default: () => defProps.checkboxGroup.labelSize + }, + // label的字体颜色 + labelColor: { + type: [String], + default: () => defProps.checkboxGroup.labelColor + }, + // 是否禁止点击文本操作 + labelDisabled: { + type: Boolean, + default: () => defProps.checkboxGroup.labelDisabled + }, + // 图标颜色 + iconColor: { + type: String, + default: () => defProps.checkboxGroup.iconColor + }, + // 图标的大小,单位px + iconSize: { + type: [String, Number], + default: () => defProps.checkboxGroup.iconSize + }, + // 勾选图标的对齐方式,left-左边,right-右边 + iconPlacement: { + type: String, + default: () => defProps.checkboxGroup.iconPlacement + }, + // 竖向配列时,是否显示下划线 + borderBottom: { + type: Boolean, + default: () => defProps.checkboxGroup.borderBottom + } + } +}) diff --git a/uni_modules/uview-plus/components/u-checkbox-group/u-checkbox-group.vue b/uni_modules/uview-plus/components/u-checkbox-group/u-checkbox-group.vue new file mode 100644 index 0000000..0640d85 --- /dev/null +++ b/uni_modules/uview-plus/components/u-checkbox-group/u-checkbox-group.vue @@ -0,0 +1,133 @@ + + + + + diff --git a/uni_modules/uview-plus/components/u-checkbox/checkbox.js b/uni_modules/uview-plus/components/u-checkbox/checkbox.js new file mode 100644 index 0000000..2310901 --- /dev/null +++ b/uni_modules/uview-plus/components/u-checkbox/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-plus/components/u-checkbox/props.js b/uni_modules/uview-plus/components/u-checkbox/props.js new file mode 100644 index 0000000..66d8150 --- /dev/null +++ b/uni_modules/uview-plus/components/u-checkbox/props.js @@ -0,0 +1,76 @@ +import { defineMixin } from '../../libs/vue' +import defProps from '../../libs/config/props.js' +export const props = defineMixin({ + props: { + // checkbox的名称 + name: { + type: [String, Number, Boolean], + default: () => defProps.checkbox.name + }, + // 形状,square为方形,circle为圆型 + shape: { + type: String, + default: () => defProps.checkbox.shape + }, + // 整体的大小 + size: { + type: [String, Number], + default: () => defProps.checkbox.size + }, + // 是否默认选中 + checked: { + type: Boolean, + default: () => defProps.checkbox.checked + }, + // 是否禁用 + disabled: { + type: [String, Boolean], + default: () => defProps.checkbox.disabled + }, + // 选中状态下的颜色,如设置此值,将会覆盖parent的activeColor值 + activeColor: { + type: String, + default: () => defProps.checkbox.activeColor + }, + // 未选中的颜色 + inactiveColor: { + type: String, + default: () => defProps.checkbox.inactiveColor + }, + // 图标的大小,单位px + iconSize: { + type: [String, Number], + default: () => defProps.checkbox.iconSize + }, + // 图标颜色 + iconColor: { + type: String, + default: () => defProps.checkbox.iconColor + }, + // label提示文字,因为nvue下,直接slot进来的文字,由于特殊的结构,无法修改样式 + label: { + type: [String, Number], + default: () => defProps.checkbox.label + }, + // label的字体大小,px单位 + labelSize: { + type: [String, Number], + default: () => defProps.checkbox.labelSize + }, + // label的颜色 + labelColor: { + type: String, + default: () => defProps.checkbox.labelColor + }, + // 是否禁止点击提示语选中复选框 + labelDisabled: { + type: [String, Boolean], + default: () => defProps.checkbox.labelDisabled + }, + // 是否独立使用 + usedAlone: { + type: [Boolean], + default: () => false + } + } +}) diff --git a/uni_modules/uview-plus/components/u-checkbox/u-checkbox.vue b/uni_modules/uview-plus/components/u-checkbox/u-checkbox.vue new file mode 100644 index 0000000..adc3945 --- /dev/null +++ b/uni_modules/uview-plus/components/u-checkbox/u-checkbox.vue @@ -0,0 +1,387 @@ + + + + + diff --git a/uni_modules/uview-plus/components/u-circle-progress/circleProgress.js b/uni_modules/uview-plus/components/u-circle-progress/circleProgress.js new file mode 100644 index 0000000..b3a9b43 --- /dev/null +++ b/uni_modules/uview-plus/components/u-circle-progress/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-plus/components/u-circle-progress/props.js b/uni_modules/uview-plus/components/u-circle-progress/props.js new file mode 100644 index 0000000..ff1eeaa --- /dev/null +++ b/uni_modules/uview-plus/components/u-circle-progress/props.js @@ -0,0 +1,10 @@ +import { defineMixin } from '../../libs/vue' +import defProps from '../../libs/config/props.js' +export const props = defineMixin({ + props: { + percentage: { + type: [String, Number], + default: () => defProps.circleProgress.percentage + } + } +}) diff --git a/uni_modules/uview-plus/components/u-circle-progress/u-circle-progress.vue b/uni_modules/uview-plus/components/u-circle-progress/u-circle-progress.vue new file mode 100644 index 0000000..6dd5c93 --- /dev/null +++ b/uni_modules/uview-plus/components/u-circle-progress/u-circle-progress.vue @@ -0,0 +1,201 @@ + + + + + diff --git a/uni_modules/uview-plus/components/u-code-input/codeInput.js b/uni_modules/uview-plus/components/u-code-input/codeInput.js new file mode 100644 index 0000000..cac9265 --- /dev/null +++ b/uni_modules/uview-plus/components/u-code-input/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-plus/components/u-code-input/props.js b/uni_modules/uview-plus/components/u-code-input/props.js new file mode 100644 index 0000000..0a4b1e8 --- /dev/null +++ b/uni_modules/uview-plus/components/u-code-input/props.js @@ -0,0 +1,90 @@ +import { defineMixin } from '../../libs/vue' +import defProps from '../../libs/config/props.js' +export const props = defineMixin({ + props: { + // 键盘弹起时,是否自动上推页面 + adjustPosition: { + type: Boolean, + default: () => defProps.codeInput.adjustPosition + }, + // 最大输入长度 + maxlength: { + type: [String, Number], + default: () => defProps.codeInput.maxlength + }, + // 是否用圆点填充 + dot: { + type: Boolean, + default: () => defProps.codeInput.dot + }, + // 显示模式,box-盒子模式,line-底部横线模式 + mode: { + type: String, + default: () => defProps.codeInput.mode + }, + // 是否细边框 + hairline: { + type: Boolean, + default: () => defProps.codeInput.hairline + }, + // 字符间的距离 + space: { + type: [String, Number], + default: () => defProps.codeInput.space + }, + // #ifdef VUE3 + // 预置值 + modelValue: { + type: [String, Number], + default: () => defProps.codeInput.value + }, + // #endif + // #ifdef VUE2 + // 预置值 + value: { + type: [String, Number], + default: () => defProps.codeInput.value + }, + // #endif + // 是否自动获取焦点 + focus: { + type: Boolean, + default: () => defProps.codeInput.focus + }, + // 字体是否加粗 + bold: { + type: Boolean, + default: () => defProps.codeInput.bold + }, + // 字体颜色 + color: { + type: String, + default: () => defProps.codeInput.color + }, + // 字体大小 + fontSize: { + type: [String, Number], + default: () => defProps.codeInput.fontSize + }, + // 输入框的大小,宽等于高 + size: { + type: [String, Number], + default: () => defProps.codeInput.size + }, + // 是否隐藏原生键盘,如果想用自定义键盘的话,需设置此参数为true + disabledKeyboard: { + type: Boolean, + default: () => defProps.codeInput.disabledKeyboard + }, + // 边框和线条颜色 + borderColor: { + type: String, + default: () => defProps.codeInput.borderColor + }, + // 是否禁止输入"."符号 + disabledDot: { + type: Boolean, + default: () => defProps.codeInput.disabledDot + } + } +}) diff --git a/uni_modules/uview-plus/components/u-code-input/u-code-input.vue b/uni_modules/uview-plus/components/u-code-input/u-code-input.vue new file mode 100644 index 0000000..d0c0061 --- /dev/null +++ b/uni_modules/uview-plus/components/u-code-input/u-code-input.vue @@ -0,0 +1,300 @@ + + + + + diff --git a/uni_modules/uview-plus/components/u-code/code.js b/uni_modules/uview-plus/components/u-code/code.js new file mode 100644 index 0000000..693417a --- /dev/null +++ b/uni_modules/uview-plus/components/u-code/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-plus/components/u-code/props.js b/uni_modules/uview-plus/components/u-code/props.js new file mode 100644 index 0000000..60977b5 --- /dev/null +++ b/uni_modules/uview-plus/components/u-code/props.js @@ -0,0 +1,36 @@ +import { defineMixin } from '../../libs/vue' +import defProps from '../../libs/config/props.js' +export const props = defineMixin({ + props: { + // 倒计时总秒数 + seconds: { + type: [String, Number], + default: () => defProps.code.seconds + }, + // 尚未开始时提示 + startText: { + type: String, + default: () => defProps.code.startText + }, + // 正在倒计时中的提示 + changeText: { + type: String, + default: () => defProps.code.changeText + }, + // 倒计时结束时的提示 + endText: { + type: String, + default: () => defProps.code.endText + }, + // 是否在H5刷新或各端返回再进入时继续倒计时 + keepRunning: { + type: Boolean, + default: () => defProps.code.keepRunning + }, + // 为了区分多个页面,或者一个页面多个倒计时组件本地存储的继续倒计时变了 + uniqueKey: { + type: String, + default: () => defProps.code.uniqueKey + } + } +}) diff --git a/uni_modules/uview-plus/components/u-code/u-code.vue b/uni_modules/uview-plus/components/u-code/u-code.vue new file mode 100644 index 0000000..32ba0a7 --- /dev/null +++ b/uni_modules/uview-plus/components/u-code/u-code.vue @@ -0,0 +1,132 @@ + + + + + diff --git a/uni_modules/uview-plus/components/u-col/col.js b/uni_modules/uview-plus/components/u-col/col.js new file mode 100644 index 0000000..7621653 --- /dev/null +++ b/uni_modules/uview-plus/components/u-col/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-plus/components/u-col/props.js b/uni_modules/uview-plus/components/u-col/props.js new file mode 100644 index 0000000..b28decb --- /dev/null +++ b/uni_modules/uview-plus/components/u-col/props.js @@ -0,0 +1,31 @@ +import { defineMixin } from '../../libs/vue' +import defProps from '../../libs/config/props.js' +export const props = defineMixin({ + props: { + // 占父容器宽度的多少等分,总分为12份 + span: { + type: [String, Number], + default: () => defProps.col.span + }, + // 指定栅格左侧的间隔数(总12栏) + offset: { + type: [String, Number], + default: () => defProps.col.offset + }, + // 水平排列方式,可选值为`start`(或`flex-start`)、`end`(或`flex-end`)、`center`、`around`(或`space-around`)、`between`(或`space-between`) + justify: { + type: String, + default: () => defProps.col.justify + }, + // 垂直对齐方式,可选值为top、center、bottom、stretch + align: { + type: String, + default: () => defProps.col.align + }, + // 文字对齐方式 + textAlign: { + type: String, + default: () => defProps.col.textAlign + } + } +}) diff --git a/uni_modules/uview-plus/components/u-col/u-col.vue b/uni_modules/uview-plus/components/u-col/u-col.vue new file mode 100644 index 0000000..57a12d6 --- /dev/null +++ b/uni_modules/uview-plus/components/u-col/u-col.vue @@ -0,0 +1,170 @@ + + + + + diff --git a/uni_modules/uview-plus/components/u-collapse-item/collapseItem.js b/uni_modules/uview-plus/components/u-collapse-item/collapseItem.js new file mode 100644 index 0000000..1225a7b --- /dev/null +++ b/uni_modules/uview-plus/components/u-collapse-item/collapseItem.js @@ -0,0 +1,26 @@ +/* + * @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, + showRight: true + } +} diff --git a/uni_modules/uview-plus/components/u-collapse-item/props.js b/uni_modules/uview-plus/components/u-collapse-item/props.js new file mode 100644 index 0000000..b0b1426 --- /dev/null +++ b/uni_modules/uview-plus/components/u-collapse-item/props.js @@ -0,0 +1,66 @@ +import { defineMixin } from '../../libs/vue' +import defProps from '../../libs/config/props.js' +export const props = defineMixin({ + props: { + // 标题 + title: { + type: String, + default: () => defProps.collapseItem.title + }, + // 标题右侧内容 + value: { + type: String, + default: () => defProps.collapseItem.value + }, + // 标题下方的描述信息 + label: { + type: String, + default: () => defProps.collapseItem.label + }, + // 是否禁用折叠面板 + disabled: { + type: Boolean, + default: () => defProps.collapseItem.disabled + }, + // 是否展示右侧箭头并开启点击反馈 + isLink: { + type: Boolean, + default: () => defProps.collapseItem.isLink + }, + // 是否开启点击反馈 + clickable: { + type: Boolean, + default: () => defProps.collapseItem.clickable + }, + // 是否显示内边框 + border: { + type: Boolean, + default: () => defProps.collapseItem.border + }, + // 标题的对齐方式 + align: { + type: String, + default: () => defProps.collapseItem.align + }, + // 唯一标识符 + name: { + type: [String, Number], + default: () => defProps.collapseItem.name + }, + // 标题左侧图片,可为绝对路径的图片或内置图标 + icon: { + type: String, + default: () => defProps.collapseItem.icon + }, + // 面板展开收起的过渡时间,单位ms + duration: { + type: Number, + default: () => defProps.collapseItem.duration + }, + // 显示右侧图标 + showRight: { + type: Boolean, + default: () => defProps.collapseItem.showRight + }, + } +}) diff --git a/uni_modules/uview-plus/components/u-collapse-item/u-collapse-item.vue b/uni_modules/uview-plus/components/u-collapse-item/u-collapse-item.vue new file mode 100644 index 0000000..e9725bd --- /dev/null +++ b/uni_modules/uview-plus/components/u-collapse-item/u-collapse-item.vue @@ -0,0 +1,242 @@ + + + + + diff --git a/uni_modules/uview-plus/components/u-collapse/collapse.js b/uni_modules/uview-plus/components/u-collapse/collapse.js new file mode 100644 index 0000000..c2b9fdd --- /dev/null +++ b/uni_modules/uview-plus/components/u-collapse/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-plus/components/u-collapse/props.js b/uni_modules/uview-plus/components/u-collapse/props.js new file mode 100644 index 0000000..7712603 --- /dev/null +++ b/uni_modules/uview-plus/components/u-collapse/props.js @@ -0,0 +1,21 @@ +import { defineMixin } from '../../libs/vue' +import defProps from '../../libs/config/props.js' +export const props = defineMixin({ + props: { + // 当前展开面板的name,非手风琴模式:[],手风琴模式:string | number + value: { + type: [String, Number, Array, null], + default: () => defProps.collapse.value + }, + // 是否手风琴模式 + accordion: { + type: Boolean, + default: () => defProps.collapse.accordion + }, + // 是否显示外边框 + border: { + type: Boolean, + default: () => defProps.collapse.border + } + } +}) diff --git a/uni_modules/uview-plus/components/u-collapse/u-collapse.vue b/uni_modules/uview-plus/components/u-collapse/u-collapse.vue new file mode 100644 index 0000000..f7ec7f7 --- /dev/null +++ b/uni_modules/uview-plus/components/u-collapse/u-collapse.vue @@ -0,0 +1,91 @@ + + + + + diff --git a/uni_modules/uview-plus/components/u-column-notice/columnNotice.js b/uni_modules/uview-plus/components/u-column-notice/columnNotice.js new file mode 100644 index 0000000..f1497af --- /dev/null +++ b/uni_modules/uview-plus/components/u-column-notice/columnNotice.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: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, + justifyContent: 'flex-start' + } +} diff --git a/uni_modules/uview-plus/components/u-column-notice/props.js b/uni_modules/uview-plus/components/u-column-notice/props.js new file mode 100644 index 0000000..4e3cc1f --- /dev/null +++ b/uni_modules/uview-plus/components/u-column-notice/props.js @@ -0,0 +1,61 @@ +import { defineMixin } from '../../libs/vue' +import defProps from '../../libs/config/props.js' +export const props = defineMixin({ + props: { + // 显示的内容,字符串 + text: { + type: [Array], + default: () => defProps.columnNotice.text + }, + // 是否显示左侧的音量图标 + icon: { + type: String, + default: () => defProps.columnNotice.icon + }, + // 通告模式,link-显示右箭头,closable-显示右侧关闭图标 + mode: { + type: String, + default: () => defProps.columnNotice.mode + }, + // 文字颜色,各图标也会使用文字颜色 + color: { + type: String, + default: () => defProps.columnNotice.color + }, + // 背景颜色 + bgColor: { + type: String, + default: () => defProps.columnNotice.bgColor + }, + // 字体大小,单位px + fontSize: { + type: [String, Number], + default: () => defProps.columnNotice.fontSize + }, + // 水平滚动时的滚动速度,即每秒滚动多少px(px),这有利于控制文字无论多少时,都能有一个恒定的速度 + speed: { + type: [String, Number], + default: () => defProps.columnNotice.speed + }, + // direction = row时,是否使用步进形式滚动 + step: { + type: Boolean, + default: () => defProps.columnNotice.step + }, + // 滚动一个周期的时间长,单位ms + duration: { + type: [String, Number], + default: () => defProps.columnNotice.duration + }, + // 是否禁止用手滑动切换 + // 目前HX2.6.11,只支持App 2.5.5+、H5 2.5.5+、支付宝小程序、字节跳动小程序 + disableTouch: { + type: Boolean, + default: () => defProps.columnNotice.disableTouch + }, + justifyContent: { + type: String, + default: () => defProps.columnNotice.justifyContent + } + } +}) diff --git a/uni_modules/uview-plus/components/u-column-notice/u-column-notice.vue b/uni_modules/uview-plus/components/u-column-notice/u-column-notice.vue new file mode 100644 index 0000000..81ca35a --- /dev/null +++ b/uni_modules/uview-plus/components/u-column-notice/u-column-notice.vue @@ -0,0 +1,166 @@ + + + + + diff --git a/uni_modules/uview-plus/components/u-copy/u-copy.vue b/uni_modules/uview-plus/components/u-copy/u-copy.vue new file mode 100644 index 0000000..3a71910 --- /dev/null +++ b/uni_modules/uview-plus/components/u-copy/u-copy.vue @@ -0,0 +1,70 @@ + + + + diff --git a/uni_modules/uview-plus/components/u-count-down/countDown.js b/uni_modules/uview-plus/components/u-count-down/countDown.js new file mode 100644 index 0000000..81e33b1 --- /dev/null +++ b/uni_modules/uview-plus/components/u-count-down/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-plus/components/u-count-down/props.js b/uni_modules/uview-plus/components/u-count-down/props.js new file mode 100644 index 0000000..6dbf1c2 --- /dev/null +++ b/uni_modules/uview-plus/components/u-count-down/props.js @@ -0,0 +1,26 @@ +import { defineMixin } from '../../libs/vue' +import defProps from '../../libs/config/props.js' +export const props = defineMixin({ + props: { + // 倒计时时长,单位ms + time: { + type: [String, Number], + default: () => defProps.countDown.time + }, + // 时间格式,DD-日,HH-时,mm-分,ss-秒,SSS-毫秒 + format: { + type: String, + default: () => defProps.countDown.format + }, + // 是否自动开始倒计时 + autoStart: { + type: Boolean, + default: () => defProps.countDown.autoStart + }, + // 是否展示毫秒倒计时 + millisecond: { + type: Boolean, + default: () => defProps.countDown.millisecond + } + } +}) diff --git a/uni_modules/uview-plus/components/u-count-down/u-count-down.vue b/uni_modules/uview-plus/components/u-count-down/u-count-down.vue new file mode 100644 index 0000000..f0896ba --- /dev/null +++ b/uni_modules/uview-plus/components/u-count-down/u-count-down.vue @@ -0,0 +1,166 @@ + + + + + diff --git a/uni_modules/uview-plus/components/u-count-down/utils.js b/uni_modules/uview-plus/components/u-count-down/utils.js new file mode 100644 index 0000000..8c75005 --- /dev/null +++ b/uni_modules/uview-plus/components/u-count-down/utils.js @@ -0,0 +1,62 @@ +// 补0,如1 -> 01 +function padZero(num, targetLength = 2) { + let str = `${num}` + while (str.length < targetLength) { + str = `0${str}` + } + return str +} +const SECOND = 1000 +const MINUTE = 60 * SECOND +const HOUR = 60 * MINUTE +const DAY = 24 * HOUR +export function parseTimeData(time) { + const days = Math.floor(time / DAY) + const hours = Math.floor((time % DAY) / HOUR) + const minutes = Math.floor((time % HOUR) / MINUTE) + const seconds = Math.floor((time % MINUTE) / SECOND) + const milliseconds = Math.floor(time % SECOND) + return { + days, + hours, + minutes, + seconds, + milliseconds + } +} +export function parseFormat(format, timeData) { + let { + days, + hours, + minutes, + seconds, + milliseconds + } = timeData + // 如果格式化字符串中不存在DD(天),则将天的时间转为小时中去 + if (format.indexOf('DD') === -1) { + hours += days * 24 + } else { + // 对天补0 + format = format.replace('DD', padZero(days)) + } + // 其他同理于DD的格式化处理方式 + if (format.indexOf('HH') === -1) { + minutes += hours * 60 + } else { + format = format.replace('HH', padZero(hours)) + } + if (format.indexOf('mm') === -1) { + seconds += minutes * 60 + } else { + format = format.replace('mm', padZero(minutes)) + } + if (format.indexOf('ss') === -1) { + milliseconds += seconds * 1000 + } else { + format = format.replace('ss', padZero(seconds)) + } + return format.replace('SSS', padZero(milliseconds, 3)) +} +export function isSameSecond(time1, time2) { + return Math.floor(time1 / 1000) === Math.floor(time2 / 1000) +} diff --git a/uni_modules/uview-plus/components/u-count-to/countTo.js b/uni_modules/uview-plus/components/u-count-to/countTo.js new file mode 100644 index 0000000..a536cde --- /dev/null +++ b/uni_modules/uview-plus/components/u-count-to/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-plus/components/u-count-to/props.js b/uni_modules/uview-plus/components/u-count-to/props.js new file mode 100644 index 0000000..0b97c1f --- /dev/null +++ b/uni_modules/uview-plus/components/u-count-to/props.js @@ -0,0 +1,61 @@ +import { defineMixin } from '../../libs/vue' +import defProps from '../../libs/config/props.js' +export const props = defineMixin({ + props: { + // 开始的数值,默认从0增长到某一个数 + startVal: { + type: [String, Number], + default: () => defProps.countTo.startVal + }, + // 要滚动的目标数值,必须 + endVal: { + type: [String, Number], + default: () => defProps.countTo.endVal + }, + // 滚动到目标数值的动画持续时间,单位为毫秒(ms) + duration: { + type: [String, Number], + default: () => defProps.countTo.duration + }, + // 设置数值后是否自动开始滚动 + autoplay: { + type: Boolean, + default: () => defProps.countTo.autoplay + }, + // 要显示的小数位数 + decimals: { + type: [String, Number], + default: () => defProps.countTo.decimals + }, + // 是否在即将到达目标数值的时候,使用缓慢滚动的效果 + useEasing: { + type: Boolean, + default: () => defProps.countTo.useEasing + }, + // 十进制分割 + decimal: { + type: [String, Number], + default: () => defProps.countTo.decimal + }, + // 字体颜色 + color: { + type: String, + default: () => defProps.countTo.color + }, + // 字体大小 + fontSize: { + type: [String, Number], + default: () => defProps.countTo.fontSize + }, + // 是否加粗字体 + bold: { + type: Boolean, + default: () => defProps.countTo.bold + }, + // 千位分隔符,类似金额的分割(¥23,321.05中的",") + separator: { + type: String, + default: () => defProps.countTo.separator + } + } +}) diff --git a/uni_modules/uview-plus/components/u-count-to/u-count-to.vue b/uni_modules/uview-plus/components/u-count-to/u-count-to.vue new file mode 100644 index 0000000..83ab13d --- /dev/null +++ b/uni_modules/uview-plus/components/u-count-to/u-count-to.vue @@ -0,0 +1,189 @@ + + + + + diff --git a/uni_modules/uview-plus/components/u-datetime-picker/datetimePicker.js b/uni_modules/uview-plus/components/u-datetime-picker/datetimePicker.js new file mode 100644 index 0000000..96e8ab8 --- /dev/null +++ b/uni_modules/uview-plus/components/u-datetime-picker/datetimePicker.js @@ -0,0 +1,37 @@ +/* + * @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, + popupMode: 'bottom', + 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-plus/components/u-datetime-picker/props.js b/uni_modules/uview-plus/components/u-datetime-picker/props.js new file mode 100644 index 0000000..e1711f9 --- /dev/null +++ b/uni_modules/uview-plus/components/u-datetime-picker/props.js @@ -0,0 +1,154 @@ +import { defineMixin } from '../../libs/vue' +import defProps from '../../libs/config/props.js' +export const props = defineMixin({ + props: { + // 是否显示input + hasInput: { + type: Boolean, + default: () => false + }, + disabled: { + type: Boolean, + default: () => false + }, + placeholder: { + type: String, + default: () => '请选择' + }, + format: { + type: String, + default: () => '' + }, + // 是否打开组件 + show: { + type: Boolean, + default: () => defProps.datetimePicker.show + }, + // 弹出的方向,可选值为 top bottom right left center + popupMode: { + type: String, + default: () => defProps.picker.popupMode + }, + // 是否展示顶部的操作栏 + showToolbar: { + type: Boolean, + default: () => defProps.datetimePicker.showToolbar + }, + // 工具栏右侧内容 + toolbarRightSlot:{ + type: Boolean, + default: false + }, + // #ifdef VUE2 + // 绑定值 + value: { + type: [String, Number], + default: () => defProps.datetimePicker.value + }, + // #endif + // #ifdef VUE3 + // 绑定值 + modelValue: { + type: [String, Number], + default: () => defProps.datetimePicker.value + }, + // #endif + // 顶部标题 + title: { + type: String, + default: () => defProps.datetimePicker.title + }, + // 展示格式,mode=date为日期选择,mode=time为时间选择,mode=year-month为年月选择,mode=datetime为日期时间选择 + mode: { + type: String, + default: () => defProps.datetimePicker.mode + }, + // 可选的最大时间 + maxDate: { + type: Number, + // 最大默认值为后10年 + default: () => defProps.datetimePicker.maxDate + }, + // 可选的最小时间 + minDate: { + type: Number, + // 最小默认值为前10年 + default: () => defProps.datetimePicker.minDate + }, + // 可选的最小小时,仅mode=time有效 + minHour: { + type: Number, + default: () => defProps.datetimePicker.minHour + }, + // 可选的最大小时,仅mode=time有效 + maxHour: { + type: Number, + default: () => defProps.datetimePicker.maxHour + }, + // 可选的最小分钟,仅mode=time有效 + minMinute: { + type: Number, + default: () => defProps.datetimePicker.minMinute + }, + // 可选的最大分钟,仅mode=time有效 + maxMinute: { + type: Number, + default: () => defProps.datetimePicker.maxMinute + }, + // 选项过滤函数 + filter: { + type: [Function, null], + default: () => defProps.datetimePicker.filter + }, + // 选项格式化函数 + formatter: { + type: [Function, null], + default: () => defProps.datetimePicker.formatter + }, + // 是否显示加载中状态 + loading: { + type: Boolean, + default: () => defProps.datetimePicker.loading + }, + // 各列中,单个选项的高度 + itemHeight: { + type: [String, Number], + default: () => defProps.datetimePicker.itemHeight + }, + // 取消按钮的文字 + cancelText: { + type: String, + default: () => defProps.datetimePicker.cancelText + }, + // 确认按钮的文字 + confirmText: { + type: String, + default: () => defProps.datetimePicker.confirmText + }, + // 取消按钮的颜色 + cancelColor: { + type: String, + default: () => defProps.datetimePicker.cancelColor + }, + // 确认按钮的颜色 + confirmColor: { + type: String, + default: () => defProps.datetimePicker.confirmColor + }, + // 每列中可见选项的数量 + visibleItemCount: { + type: [String, Number], + default: () => defProps.datetimePicker.visibleItemCount + }, + // 是否允许点击遮罩关闭选择器 + closeOnClickOverlay: { + type: Boolean, + default: () => defProps.datetimePicker.closeOnClickOverlay + }, + // 各列的默认索引 + defaultIndex: { + type: Array, + default: () => defProps.datetimePicker.defaultIndex + } + } +}) diff --git a/uni_modules/uview-plus/components/u-datetime-picker/u-datetime-picker.vue b/uni_modules/uview-plus/components/u-datetime-picker/u-datetime-picker.vue new file mode 100644 index 0000000..7871466 --- /dev/null +++ b/uni_modules/uview-plus/components/u-datetime-picker/u-datetime-picker.vue @@ -0,0 +1,504 @@ + + + + + diff --git a/uni_modules/uview-plus/components/u-divider/divider.js b/uni_modules/uview-plus/components/u-divider/divider.js new file mode 100644 index 0000000..55a8ce4 --- /dev/null +++ b/uni_modules/uview-plus/components/u-divider/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-plus/components/u-divider/props.js b/uni_modules/uview-plus/components/u-divider/props.js new file mode 100644 index 0000000..ec3fd8f --- /dev/null +++ b/uni_modules/uview-plus/components/u-divider/props.js @@ -0,0 +1,46 @@ +import { defineMixin } from '../../libs/vue' +import defProps from '../../libs/config/props.js' +export const props = defineMixin({ + props: { + // 是否虚线 + dashed: { + type: Boolean, + default: () => defProps.divider.dashed + }, + // 是否细线 + hairline: { + type: Boolean, + default: () => defProps.divider.hairline + }, + // 是否以点替代文字,优先于text字段起作用 + dot: { + type: Boolean, + default: () => defProps.divider.dot + }, + // 内容文本的位置,left-左边,center-中间,right-右边 + textPosition: { + type: String, + default: () => defProps.divider.textPosition + }, + // 文本内容 + text: { + type: [String, Number], + default: () => defProps.divider.text + }, + // 文本大小 + textSize: { + type: [String, Number], + default: () => defProps.divider.textSize + }, + // 文本颜色 + textColor: { + type: String, + default: () => defProps.divider.textColor + }, + // 线条颜色 + lineColor: { + type: String, + default: () => defProps.divider.lineColor + } + } +}) diff --git a/uni_modules/uview-plus/components/u-divider/u-divider.vue b/uni_modules/uview-plus/components/u-divider/u-divider.vue new file mode 100644 index 0000000..47dbf00 --- /dev/null +++ b/uni_modules/uview-plus/components/u-divider/u-divider.vue @@ -0,0 +1,121 @@ + + + + + diff --git a/uni_modules/uview-plus/components/u-dropdown-item/props.js b/uni_modules/uview-plus/components/u-dropdown-item/props.js new file mode 100644 index 0000000..e5e0265 --- /dev/null +++ b/uni_modules/uview-plus/components/u-dropdown-item/props.js @@ -0,0 +1,47 @@ +import { defineMixin } from '../../libs/vue' +import defProps from '../../libs/config/props.js' +export const props = defineMixin({ + props: { + // #ifdef VUE3 + // 当前选中项的value值 + modelValue: { + type: [Number, String, Array], + default: '' + }, + // #endif + // #ifdef VUE2 + // 当前选中项的value值 + value: { + type: [Number, String, Array], + default: '' + }, + // #endif + // 菜单项标题 + title: { + type: [String, Number], + default: '' + }, + // 选项数据,如果传入了默认slot,此参数无效 + options: { + type: Array, + default() { + return [] + } + }, + // 是否禁用此菜单项 + disabled: { + type: Boolean, + default: false + }, + // 下拉弹窗的高度 + height: { + type: [Number, String], + default: 'auto' + }, + // 点击遮罩是否可以收起弹窗 + closeOnClickOverlay: { + type: Boolean, + default: true + } + } +}) diff --git a/uni_modules/uview-plus/components/u-dropdown-item/u-dropdown-item.vue b/uni_modules/uview-plus/components/u-dropdown-item/u-dropdown-item.vue new file mode 100644 index 0000000..ec15a06 --- /dev/null +++ b/uni_modules/uview-plus/components/u-dropdown-item/u-dropdown-item.vue @@ -0,0 +1,121 @@ + + + + + diff --git a/uni_modules/uview-plus/components/u-dropdown/props.js b/uni_modules/uview-plus/components/u-dropdown/props.js new file mode 100644 index 0000000..4614b96 --- /dev/null +++ b/uni_modules/uview-plus/components/u-dropdown/props.js @@ -0,0 +1,61 @@ +import { defineMixin } from '../../libs/vue' +import defProps from '../../libs/config/props.js' +export const props = defineMixin({ + props: { + // 菜单标题和选项的激活态颜色 + activeColor: { + type: String, + default: '#2979ff' + }, + // 菜单标题和选项的未激活态颜色 + inactiveColor: { + type: String, + default: '#606266' + }, + // 点击遮罩是否关闭菜单 + closeOnClickMask: { + type: Boolean, + default: true + }, + // 点击当前激活项标题是否关闭菜单 + closeOnClickSelf: { + type: Boolean, + default: true + }, + // 过渡时间 + duration: { + type: [Number, String], + default: 300 + }, + // 标题菜单的高度 + height: { + type: [Number, String], + default: 40 + }, + // 是否显示下边框 + borderBottom: { + type: Boolean, + default: false + }, + // 标题的字体大小 + titleSize: { + type: [Number, String], + default: 14 + }, + // 下拉出来的内容部分的圆角值 + borderRadius: { + type: [Number, String], + default: 0 + }, + // 菜单右侧的icon图标 + menuIcon: { + type: String, + default: 'arrow-down' + }, + // 菜单右侧图标的大小 + menuIconSize: { + type: [Number, String], + default: 14 + } + } +}) diff --git a/uni_modules/uview-plus/components/u-dropdown/u-dropdown.vue b/uni_modules/uview-plus/components/u-dropdown/u-dropdown.vue new file mode 100644 index 0000000..55fa086 --- /dev/null +++ b/uni_modules/uview-plus/components/u-dropdown/u-dropdown.vue @@ -0,0 +1,254 @@ + + + + + diff --git a/uni_modules/uview-plus/components/u-empty/empty.js b/uni_modules/uview-plus/components/u-empty/empty.js new file mode 100644 index 0000000..fe20445 --- /dev/null +++ b/uni_modules/uview-plus/components/u-empty/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-plus/components/u-empty/props.js b/uni_modules/uview-plus/components/u-empty/props.js new file mode 100644 index 0000000..40edd11 --- /dev/null +++ b/uni_modules/uview-plus/components/u-empty/props.js @@ -0,0 +1,61 @@ +import { defineMixin } from '../../libs/vue' +import defProps from '../../libs/config/props.js' +export const props = defineMixin({ + props: { + // 内置图标名称,或图片路径,建议绝对路径 + icon: { + type: String, + default: () => defProps.empty.icon + }, + // 提示文字 + text: { + type: String, + default: () => defProps.empty.text + }, + // 文字颜色 + textColor: { + type: String, + default: () => defProps.empty.textColor + }, + // 文字大小 + textSize: { + type: [String, Number], + default: () => defProps.empty.textSize + }, + // 图标的颜色 + iconColor: { + type: String, + default: () => defProps.empty.iconColor + }, + // 图标的大小 + iconSize: { + type: [String, Number], + default: () => defProps.empty.iconSize + }, + // 选择预置的图标类型 + mode: { + type: String, + default: () => defProps.empty.mode + }, + // 图标宽度,单位px + width: { + type: [String, Number], + default: () => defProps.empty.width + }, + // 图标高度,单位px + height: { + type: [String, Number], + default: () => defProps.empty.height + }, + // 是否显示组件 + show: { + type: Boolean, + default: () => defProps.empty.show + }, + // 组件距离上一个元素之间的距离,默认px单位 + marginTop: { + type: [String, Number], + default: () => defProps.empty.marginTop + } + } +}) diff --git a/uni_modules/uview-plus/components/u-empty/u-empty.vue b/uni_modules/uview-plus/components/u-empty/u-empty.vue new file mode 100644 index 0000000..f83677f --- /dev/null +++ b/uni_modules/uview-plus/components/u-empty/u-empty.vue @@ -0,0 +1,133 @@ + + + + + diff --git a/uni_modules/uview-plus/components/u-float-button/u-float-button.vue b/uni_modules/uview-plus/components/u-float-button/u-float-button.vue new file mode 100644 index 0000000..e23064e --- /dev/null +++ b/uni_modules/uview-plus/components/u-float-button/u-float-button.vue @@ -0,0 +1,167 @@ + + + + + diff --git a/uni_modules/uview-plus/components/u-form-item/formItem.js b/uni_modules/uview-plus/components/u-form-item/formItem.js new file mode 100644 index 0000000..5afc562 --- /dev/null +++ b/uni_modules/uview-plus/components/u-form-item/formItem.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:04:32 + * @FilePath : /u-view2.0/uview-ui/libs/config/props/formItem.js + */ +export default { + // formItem 组件 + formItem: { + label: '', + prop: '', + rules: [], + borderBottom: '', + labelPosition: '', + labelWidth: '', + rightIcon: '', + leftIcon: '', + required: false, + leftIconStyle: '', + } +} diff --git a/uni_modules/uview-plus/components/u-form-item/props.js b/uni_modules/uview-plus/components/u-form-item/props.js new file mode 100644 index 0000000..cd434ce --- /dev/null +++ b/uni_modules/uview-plus/components/u-form-item/props.js @@ -0,0 +1,55 @@ +import { defineMixin } from '../../libs/vue' +import defProps from '../../libs/config/props.js' +export const props = defineMixin({ + props: { + // input的label提示语 + label: { + type: String, + default: () => defProps.formItem.label + }, + // 绑定的值 + prop: { + type: String, + default: () => defProps.formItem.prop + }, + // 绑定的规则 + rules: { + type: Array, + default: () => defProps.formItem.rules + }, + // 是否显示表单域的下划线边框 + borderBottom: { + type: [String, Boolean], + default: () => defProps.formItem.borderBottom + }, + // label的位置,left-左边,top-上边 + labelPosition: { + type: String, + default: () => defProps.formItem.labelPosition + }, + // label的宽度,单位px + labelWidth: { + type: [String, Number], + default: () => defProps.formItem.labelWidth + }, + // 右侧图标 + rightIcon: { + type: String, + default: () => defProps.formItem.rightIcon + }, + // 左侧图标 + leftIcon: { + type: String, + default: () => defProps.formItem.leftIcon + }, + // 是否显示左边的必填星号,只作显示用,具体校验必填的逻辑,请在rules中配置 + required: { + type: Boolean, + default: () => defProps.formItem.required + }, + leftIconStyle: { + type: [String, Object], + default: () => defProps.formItem.leftIconStyle, + } + } +}) diff --git a/uni_modules/uview-plus/components/u-form-item/u-form-item.vue b/uni_modules/uview-plus/components/u-form-item/u-form-item.vue new file mode 100644 index 0000000..c763ca7 --- /dev/null +++ b/uni_modules/uview-plus/components/u-form-item/u-form-item.vue @@ -0,0 +1,264 @@ + + + + + diff --git a/uni_modules/uview-plus/components/u-form/form.js b/uni_modules/uview-plus/components/u-form/form.js new file mode 100644 index 0000000..204d845 --- /dev/null +++ b/uni_modules/uview-plus/components/u-form/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-plus/components/u-form/props.js b/uni_modules/uview-plus/components/u-form/props.js new file mode 100644 index 0000000..b80d623 --- /dev/null +++ b/uni_modules/uview-plus/components/u-form/props.js @@ -0,0 +1,47 @@ +import { defineMixin } from '../../libs/vue' +import defProps from '../../libs/config/props.js' +export const props = defineMixin({ + props: { + // 当前form的需要验证字段的集合 + model: { + type: Object, + default: () => defProps.form.model + }, + // 验证规则 + rules: { + type: [Object, Function, Array], + default: () => defProps.form.rules + }, + // 有错误时的提示方式,message-提示信息,toast-进行toast提示 + // border-bottom-下边框呈现红色,none-无提示 + errorType: { + type: String, + default: () => defProps.form.errorType + }, + // 是否显示表单域的下划线边框 + borderBottom: { + type: Boolean, + default: () => defProps.form.borderBottom + }, + // label的位置,left-左边,top-上边 + labelPosition: { + type: String, + default: () => defProps.form.labelPosition + }, + // label的宽度,单位px + labelWidth: { + type: [String, Number], + default: () => defProps.form.labelWidth + }, + // lable字体的对齐方式 + labelAlign: { + type: String, + default: () => defProps.form.labelAlign + }, + // lable的样式,对象形式 + labelStyle: { + type: Object, + default: () => defProps.form.labelStyle + } + } +}) diff --git a/uni_modules/uview-plus/components/u-form/u-form.vue b/uni_modules/uview-plus/components/u-form/u-form.vue new file mode 100644 index 0000000..bcbdb9f --- /dev/null +++ b/uni_modules/uview-plus/components/u-form/u-form.vue @@ -0,0 +1,252 @@ + + + + + diff --git a/uni_modules/uview-plus/components/u-gap/gap.js b/uni_modules/uview-plus/components/u-gap/gap.js new file mode 100644 index 0000000..60a21af --- /dev/null +++ b/uni_modules/uview-plus/components/u-gap/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-plus/components/u-gap/props.js b/uni_modules/uview-plus/components/u-gap/props.js new file mode 100644 index 0000000..77b1d7c --- /dev/null +++ b/uni_modules/uview-plus/components/u-gap/props.js @@ -0,0 +1,26 @@ +import { defineMixin } from '../../libs/vue' +import defProps from '../../libs/config/props.js' +export const props = defineMixin({ + props: { + // 背景颜色(默认transparent) + bgColor: { + type: String, + default: () => defProps.gap.bgColor + }, + // 分割槽高度,单位px(默认30) + height: { + type: [String, Number], + default: () => defProps.gap.height + }, + // 与上一个组件的距离 + marginTop: { + type: [String, Number], + default: () => defProps.gap.marginTop + }, + // 与下一个组件的距离 + marginBottom: { + type: [String, Number], + default: () => defProps.gap.marginBottom + } + } +}) diff --git a/uni_modules/uview-plus/components/u-gap/u-gap.vue b/uni_modules/uview-plus/components/u-gap/u-gap.vue new file mode 100644 index 0000000..36863a5 --- /dev/null +++ b/uni_modules/uview-plus/components/u-gap/u-gap.vue @@ -0,0 +1,41 @@ + + + + + diff --git a/uni_modules/uview-plus/components/u-grid-item/gridItem.js b/uni_modules/uview-plus/components/u-grid-item/gridItem.js new file mode 100644 index 0000000..1b747f4 --- /dev/null +++ b/uni_modules/uview-plus/components/u-grid-item/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-plus/components/u-grid-item/props.js b/uni_modules/uview-plus/components/u-grid-item/props.js new file mode 100644 index 0000000..55f957c --- /dev/null +++ b/uni_modules/uview-plus/components/u-grid-item/props.js @@ -0,0 +1,16 @@ +import { defineMixin } from '../../libs/vue' +import defProps from '../../libs/config/props.js' +export const props = defineMixin({ + props: { + // 宫格的name + name: { + type: [String, Number, null], + default: () => defProps.gridItem.name + }, + // 背景颜色 + bgColor: { + type: String, + default: () => defProps.gridItem.bgColor + } + } +}) diff --git a/uni_modules/uview-plus/components/u-grid-item/u-grid-item.vue b/uni_modules/uview-plus/components/u-grid-item/u-grid-item.vue new file mode 100644 index 0000000..43c5ce7 --- /dev/null +++ b/uni_modules/uview-plus/components/u-grid-item/u-grid-item.vue @@ -0,0 +1,219 @@ + + + + + diff --git a/uni_modules/uview-plus/components/u-grid/grid.js b/uni_modules/uview-plus/components/u-grid/grid.js new file mode 100644 index 0000000..60abeb7 --- /dev/null +++ b/uni_modules/uview-plus/components/u-grid/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-plus/components/u-grid/props.js b/uni_modules/uview-plus/components/u-grid/props.js new file mode 100644 index 0000000..506baf7 --- /dev/null +++ b/uni_modules/uview-plus/components/u-grid/props.js @@ -0,0 +1,26 @@ +import { defineMixin } from '../../libs/vue' +import defProps from '../../libs/config/props.js' +export const props = defineMixin({ + props: { + // 分成几列 + col: { + type: [String, Number], + default: () => defProps.grid.col + }, + // 是否显示边框 + border: { + type: Boolean, + default: () => defProps.grid.border + }, + // 宫格对齐方式,表现为数量少的时候,靠左,居中,还是靠右 + align: { + type: String, + default: () => defProps.grid.align + }, + // 间隔 + gap: { + type: String, + default: '0px' + } + } +}) diff --git a/uni_modules/uview-plus/components/u-grid/u-grid.vue b/uni_modules/uview-plus/components/u-grid/u-grid.vue new file mode 100644 index 0000000..fd23002 --- /dev/null +++ b/uni_modules/uview-plus/components/u-grid/u-grid.vue @@ -0,0 +1,114 @@ + + + + + diff --git a/uni_modules/uview-plus/components/u-icon/icon.js b/uni_modules/uview-plus/components/u-icon/icon.js new file mode 100644 index 0000000..86910f7 --- /dev/null +++ b/uni_modules/uview-plus/components/u-icon/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 '../../libs/config/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-plus/components/u-icon/icons.js b/uni_modules/uview-plus/components/u-icon/icons.js new file mode 100644 index 0000000..f4d0fe2 --- /dev/null +++ b/uni_modules/uview-plus/components/u-icon/icons.js @@ -0,0 +1,214 @@ +export default { + 'uicon-level': '\ue693', + 'uicon-column-line': '\ue68e', + 'uicon-checkbox-mark': '\ue807', + 'uicon-folder': '\ue7f5', + 'uicon-movie': '\ue7f6', + 'uicon-star-fill': '\ue669', + 'uicon-star': '\ue65f', + 'uicon-phone-fill': '\ue64f', + 'uicon-phone': '\ue622', + 'uicon-apple-fill': '\ue881', + 'uicon-chrome-circle-fill': '\ue885', + 'uicon-backspace': '\ue67b', + 'uicon-attach': '\ue632', + 'uicon-cut': '\ue948', + 'uicon-empty-car': '\ue602', + 'uicon-empty-coupon': '\ue682', + 'uicon-empty-address': '\ue646', + 'uicon-empty-favor': '\ue67c', + 'uicon-empty-permission': '\ue686', + 'uicon-empty-news': '\ue687', + 'uicon-empty-search': '\ue664', + 'uicon-github-circle-fill': '\ue887', + 'uicon-rmb': '\ue608', + 'uicon-person-delete-fill': '\ue66a', + 'uicon-reload': '\ue788', + 'uicon-order': '\ue68f', + 'uicon-server-man': '\ue6bc', + 'uicon-search': '\ue62a', + 'uicon-fingerprint': '\ue955', + 'uicon-more-dot-fill': '\ue630', + 'uicon-scan': '\ue662', + 'uicon-share-square': '\ue60b', + 'uicon-map': '\ue61d', + 'uicon-map-fill': '\ue64e', + 'uicon-tags': '\ue629', + 'uicon-tags-fill': '\ue651', + 'uicon-bookmark-fill': '\ue63b', + 'uicon-bookmark': '\ue60a', + 'uicon-eye': '\ue613', + 'uicon-eye-fill': '\ue641', + 'uicon-mic': '\ue64a', + 'uicon-mic-off': '\ue649', + 'uicon-calendar': '\ue66e', + 'uicon-calendar-fill': '\ue634', + 'uicon-trash': '\ue623', + 'uicon-trash-fill': '\ue658', + 'uicon-play-left': '\ue66d', + 'uicon-play-right': '\ue610', + 'uicon-minus': '\ue618', + 'uicon-plus': '\ue62d', + 'uicon-info': '\ue653', + 'uicon-info-circle': '\ue7d2', + 'uicon-info-circle-fill': '\ue64b', + 'uicon-question': '\ue715', + 'uicon-error': '\ue6d3', + 'uicon-close': '\ue685', + 'uicon-checkmark': '\ue6a8', + 'uicon-android-circle-fill': '\ue67e', + 'uicon-android-fill': '\ue67d', + 'uicon-ie': '\ue87b', + 'uicon-IE-circle-fill': '\ue889', + 'uicon-google': '\ue87a', + 'uicon-google-circle-fill': '\ue88a', + 'uicon-setting-fill': '\ue872', + 'uicon-setting': '\ue61f', + 'uicon-minus-square-fill': '\ue855', + 'uicon-plus-square-fill': '\ue856', + 'uicon-heart': '\ue7df', + 'uicon-heart-fill': '\ue851', + 'uicon-camera': '\ue7d7', + 'uicon-camera-fill': '\ue870', + 'uicon-more-circle': '\ue63e', + 'uicon-more-circle-fill': '\ue645', + 'uicon-chat': '\ue620', + 'uicon-chat-fill': '\ue61e', + 'uicon-bag-fill': '\ue617', + 'uicon-bag': '\ue619', + 'uicon-error-circle-fill': '\ue62c', + 'uicon-error-circle': '\ue624', + 'uicon-close-circle': '\ue63f', + 'uicon-close-circle-fill': '\ue637', + 'uicon-checkmark-circle': '\ue63d', + 'uicon-checkmark-circle-fill': '\ue635', + 'uicon-question-circle-fill': '\ue666', + 'uicon-question-circle': '\ue625', + 'uicon-share': '\ue631', + 'uicon-share-fill': '\ue65e', + 'uicon-shopping-cart': '\ue621', + 'uicon-shopping-cart-fill': '\ue65d', + 'uicon-bell': '\ue609', + 'uicon-bell-fill': '\ue640', + 'uicon-list': '\ue650', + 'uicon-list-dot': '\ue616', + 'uicon-zhihu': '\ue6ba', + 'uicon-zhihu-circle-fill': '\ue709', + 'uicon-zhifubao': '\ue6b9', + 'uicon-zhifubao-circle-fill': '\ue6b8', + 'uicon-weixin-circle-fill': '\ue6b1', + 'uicon-weixin-fill': '\ue6b2', + 'uicon-twitter-circle-fill': '\ue6ab', + 'uicon-twitter': '\ue6aa', + 'uicon-taobao-circle-fill': '\ue6a7', + 'uicon-taobao': '\ue6a6', + 'uicon-weibo-circle-fill': '\ue6a5', + 'uicon-weibo': '\ue6a4', + 'uicon-qq-fill': '\ue6a1', + 'uicon-qq-circle-fill': '\ue6a0', + 'uicon-moments-circel-fill': '\ue69a', + 'uicon-moments': '\ue69b', + 'uicon-qzone': '\ue695', + 'uicon-qzone-circle-fill': '\ue696', + 'uicon-baidu-circle-fill': '\ue680', + 'uicon-baidu': '\ue681', + 'uicon-facebook-circle-fill': '\ue68a', + 'uicon-facebook': '\ue689', + 'uicon-car': '\ue60c', + 'uicon-car-fill': '\ue636', + 'uicon-warning-fill': '\ue64d', + 'uicon-warning': '\ue694', + 'uicon-clock-fill': '\ue638', + 'uicon-clock': '\ue60f', + 'uicon-edit-pen': '\ue612', + 'uicon-edit-pen-fill': '\ue66b', + 'uicon-email': '\ue611', + 'uicon-email-fill': '\ue642', + 'uicon-minus-circle': '\ue61b', + 'uicon-minus-circle-fill': '\ue652', + 'uicon-plus-circle': '\ue62e', + 'uicon-plus-circle-fill': '\ue661', + 'uicon-file-text': '\ue663', + 'uicon-file-text-fill': '\ue665', + 'uicon-pushpin': '\ue7e3', + 'uicon-pushpin-fill': '\ue86e', + 'uicon-grid': '\ue673', + 'uicon-grid-fill': '\ue678', + 'uicon-play-circle': '\ue647', + 'uicon-play-circle-fill': '\ue655', + 'uicon-pause-circle-fill': '\ue654', + 'uicon-pause': '\ue8fa', + 'uicon-pause-circle': '\ue643', + 'uicon-eye-off': '\ue648', + 'uicon-eye-off-outline': '\ue62b', + 'uicon-gift-fill': '\ue65c', + 'uicon-gift': '\ue65b', + 'uicon-rmb-circle-fill': '\ue657', + 'uicon-rmb-circle': '\ue677', + 'uicon-kefu-ermai': '\ue656', + 'uicon-server-fill': '\ue751', + 'uicon-coupon-fill': '\ue8c4', + 'uicon-coupon': '\ue8ae', + 'uicon-integral': '\ue704', + 'uicon-integral-fill': '\ue703', + 'uicon-home-fill': '\ue964', + 'uicon-home': '\ue965', + 'uicon-hourglass-half-fill': '\ue966', + 'uicon-hourglass': '\ue967', + 'uicon-account': '\ue628', + 'uicon-plus-people-fill': '\ue626', + 'uicon-minus-people-fill': '\ue615', + 'uicon-account-fill': '\ue614', + 'uicon-thumb-down-fill': '\ue726', + 'uicon-thumb-down': '\ue727', + 'uicon-thumb-up': '\ue733', + 'uicon-thumb-up-fill': '\ue72f', + 'uicon-lock-fill': '\ue979', + 'uicon-lock-open': '\ue973', + 'uicon-lock-opened-fill': '\ue974', + 'uicon-lock': '\ue97a', + 'uicon-red-packet-fill': '\ue690', + 'uicon-photo-fill': '\ue98b', + 'uicon-photo': '\ue98d', + 'uicon-volume-off-fill': '\ue659', + 'uicon-volume-off': '\ue644', + 'uicon-volume-fill': '\ue670', + 'uicon-volume': '\ue633', + 'uicon-red-packet': '\ue691', + 'uicon-download': '\ue63c', + 'uicon-arrow-up-fill': '\ue6b0', + 'uicon-arrow-down-fill': '\ue600', + 'uicon-play-left-fill': '\ue675', + 'uicon-play-right-fill': '\ue676', + 'uicon-rewind-left-fill': '\ue679', + 'uicon-rewind-right-fill': '\ue67a', + 'uicon-arrow-downward': '\ue604', + 'uicon-arrow-leftward': '\ue601', + 'uicon-arrow-rightward': '\ue603', + 'uicon-arrow-upward': '\ue607', + 'uicon-arrow-down': '\ue60d', + 'uicon-arrow-right': '\ue605', + 'uicon-arrow-left': '\ue60e', + 'uicon-arrow-up': '\ue606', + 'uicon-skip-back-left': '\ue674', + 'uicon-skip-forward-right': '\ue672', + 'uicon-rewind-right': '\ue66f', + 'uicon-rewind-left': '\ue671', + 'uicon-arrow-right-double': '\ue68d', + 'uicon-arrow-left-double': '\ue68c', + 'uicon-wifi-off': '\ue668', + 'uicon-wifi': '\ue667', + 'uicon-empty-data': '\ue62f', + 'uicon-empty-history': '\ue684', + 'uicon-empty-list': '\ue68b', + 'uicon-empty-page': '\ue627', + 'uicon-empty-order': '\ue639', + 'uicon-man': '\ue697', + 'uicon-woman': '\ue69c', + 'uicon-man-add': '\ue61c', + 'uicon-man-add-fill': '\ue64c', + 'uicon-man-delete': '\ue61a', + 'uicon-man-delete-fill': '\ue66a', + 'uicon-zh': '\ue70a', + 'uicon-en': '\ue692' +} diff --git a/uni_modules/uview-plus/components/u-icon/props.js b/uni_modules/uview-plus/components/u-icon/props.js new file mode 100644 index 0000000..d5bdfdb --- /dev/null +++ b/uni_modules/uview-plus/components/u-icon/props.js @@ -0,0 +1,91 @@ +import { defineMixin } from '../../libs/vue' +import defProps from '../../libs/config/props.js' +export const props = defineMixin({ + props: { + // 图标类名 + name: { + type: String, + default: () => defProps.icon.name + }, + // 图标颜色,可接受主题色 + color: { + type: String, + default: () => defProps.icon.color + }, + // 字体大小,单位px + size: { + type: [String, Number], + default: () => defProps.icon.size + }, + // 是否显示粗体 + bold: { + type: Boolean, + default: () => defProps.icon.bold + }, + // 点击图标的时候传递事件出去的index(用于区分点击了哪一个) + index: { + type: [String, Number], + default: () => defProps.icon.index + }, + // 触摸图标时的类名 + hoverClass: { + type: String, + default: () => defProps.icon.hoverClass + }, + // 自定义扩展前缀,方便用户扩展自己的图标库 + customPrefix: { + type: String, + default: () => defProps.icon.customPrefix + }, + // 图标右边或者下面的文字 + label: { + type: [String, Number], + default: () => defProps.icon.label + }, + // label的位置,只能右边或者下边 + labelPos: { + type: String, + default: () => defProps.icon.labelPos + }, + // label的大小 + labelSize: { + type: [String, Number], + default: () => defProps.icon.labelSize + }, + // label的颜色 + labelColor: { + type: String, + default: () => defProps.icon.labelColor + }, + // label与图标的距离 + space: { + type: [String, Number], + default: () => defProps.icon.space + }, + // 图片的mode + imgMode: { + type: String, + default: () => defProps.icon.imgMode + }, + // 用于显示图片小图标时,图片的宽度 + width: { + type: [String, Number], + default: () => defProps.icon.width + }, + // 用于显示图片小图标时,图片的高度 + height: { + type: [String, Number], + default: () => defProps.icon.height + }, + // 用于解决某些情况下,让图标垂直居中的用途 + top: { + type: [String, Number], + default: () => defProps.icon.top + }, + // 是否阻止事件传播 + stop: { + type: Boolean, + default: () => defProps.icon.stop + } + } +}) diff --git a/uni_modules/uview-plus/components/u-icon/u-icon.vue b/uni_modules/uview-plus/components/u-icon/u-icon.vue new file mode 100644 index 0000000..0255905 --- /dev/null +++ b/uni_modules/uview-plus/components/u-icon/u-icon.vue @@ -0,0 +1,254 @@ + + + + + diff --git a/uni_modules/uview-plus/components/u-image/image.js b/uni_modules/uview-plus/components/u-image/image.js new file mode 100644 index 0000000..2552db6 --- /dev/null +++ b/uni_modules/uview-plus/components/u-image/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-plus/components/u-image/props.js b/uni_modules/uview-plus/components/u-image/props.js new file mode 100644 index 0000000..71bc6db --- /dev/null +++ b/uni_modules/uview-plus/components/u-image/props.js @@ -0,0 +1,86 @@ +import { defineMixin } from '../../libs/vue' +import defProps from '../../libs/config/props.js' +export const props = defineMixin({ + props: { + // 图片地址 + src: { + type: String, + default: () => defProps.image.src + }, + // 裁剪模式 + mode: { + type: String, + default: () => defProps.image.mode + }, + // 宽度,单位任意 + width: { + type: [String, Number], + default: () => defProps.image.width + }, + // 高度,单位任意 + height: { + type: [String, Number], + default: () => defProps.image.height + }, + // 图片形状,circle-圆形,square-方形 + shape: { + type: String, + default: () => defProps.image.shape + }, + // 圆角,单位任意 + radius: { + type: [String, Number], + default: () => defProps.image.radius + }, + // 是否懒加载,微信小程序、App、百度小程序、字节跳动小程序 + lazyLoad: { + type: Boolean, + default: () => defProps.image.lazyLoad + }, + // 开启长按图片显示识别微信小程序码菜单 + showMenuByLongpress: { + type: Boolean, + default: () => defProps.image.showMenuByLongpress + }, + // 加载中的图标,或者小图片 + loadingIcon: { + type: String, + default: () => defProps.image.loadingIcon + }, + // 加载失败的图标,或者小图片 + errorIcon: { + type: String, + default: () => defProps.image.errorIcon + }, + // 是否显示加载中的图标或者自定义的slot + showLoading: { + type: Boolean, + default: () => defProps.image.showLoading + }, + // 是否显示加载错误的图标或者自定义的slot + showError: { + type: Boolean, + default: () => defProps.image.showError + }, + // 是否需要淡入效果 + fade: { + type: Boolean, + default: () => defProps.image.fade + }, + // 只支持网络资源,只对微信小程序有效 + webp: { + type: Boolean, + default: () => defProps.image.webp + }, + // 过渡时间,单位ms + duration: { + type: [String, Number], + default: () => defProps.image.duration + }, + // 背景颜色,用于深色页面加载图片时,为了和背景色融合 + bgColor: { + type: String, + default: () => defProps.image.bgColor + } + } +}) diff --git a/uni_modules/uview-plus/components/u-image/u-image.vue b/uni_modules/uview-plus/components/u-image/u-image.vue new file mode 100644 index 0000000..a2a5e39 --- /dev/null +++ b/uni_modules/uview-plus/components/u-image/u-image.vue @@ -0,0 +1,267 @@ + + + + + diff --git a/uni_modules/uview-plus/components/u-index-anchor/indexAnchor.js b/uni_modules/uview-plus/components/u-index-anchor/indexAnchor.js new file mode 100644 index 0000000..bb20d46 --- /dev/null +++ b/uni_modules/uview-plus/components/u-index-anchor/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-plus/components/u-index-anchor/props.js b/uni_modules/uview-plus/components/u-index-anchor/props.js new file mode 100644 index 0000000..f07e407 --- /dev/null +++ b/uni_modules/uview-plus/components/u-index-anchor/props.js @@ -0,0 +1,31 @@ +import { defineMixin } from '../../libs/vue' +import defProps from '../../libs/config/props.js' +export const props = defineMixin({ + props: { + // 列表锚点文本内容 + text: { + type: [String, Number], + default: () => defProps.indexAnchor.text + }, + // 列表锚点文字颜色 + color: { + type: String, + default: () => defProps.indexAnchor.color + }, + // 列表锚点文字大小,单位默认px + size: { + type: [String, Number], + default: () => defProps.indexAnchor.size + }, + // 列表锚点背景颜色 + bgColor: { + type: String, + default: () => defProps.indexAnchor.bgColor + }, + // 列表锚点高度,单位默认px + height: { + type: [String, Number], + default: () => defProps.indexAnchor.height + } + } +}) diff --git a/uni_modules/uview-plus/components/u-index-anchor/u-index-anchor.vue b/uni_modules/uview-plus/components/u-index-anchor/u-index-anchor.vue new file mode 100644 index 0000000..91c43e9 --- /dev/null +++ b/uni_modules/uview-plus/components/u-index-anchor/u-index-anchor.vue @@ -0,0 +1,95 @@ + + + + + diff --git a/uni_modules/uview-plus/components/u-index-item/props.js b/uni_modules/uview-plus/components/u-index-item/props.js new file mode 100644 index 0000000..3461f1e --- /dev/null +++ b/uni_modules/uview-plus/components/u-index-item/props.js @@ -0,0 +1,8 @@ +import { defineMixin } from '../../libs/vue' +import defProps from '../../libs/config/props.js' + +export const props = defineMixin({ + props: { + + } +}) diff --git a/uni_modules/uview-plus/components/u-index-item/u-index-item.vue b/uni_modules/uview-plus/components/u-index-item/u-index-item.vue new file mode 100644 index 0000000..13cc30f --- /dev/null +++ b/uni_modules/uview-plus/components/u-index-item/u-index-item.vue @@ -0,0 +1,90 @@ + + + + + diff --git a/uni_modules/uview-plus/components/u-index-list/indexList.js b/uni_modules/uview-plus/components/u-index-list/indexList.js new file mode 100644 index 0000000..4f31b37 --- /dev/null +++ b/uni_modules/uview-plus/components/u-index-list/indexList.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: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, + safeBottomFix: false + } +} diff --git a/uni_modules/uview-plus/components/u-index-list/props.js b/uni_modules/uview-plus/components/u-index-list/props.js new file mode 100644 index 0000000..46a1fba --- /dev/null +++ b/uni_modules/uview-plus/components/u-index-list/props.js @@ -0,0 +1,36 @@ +import { defineMixin } from '../../libs/vue' +import defProps from '../../libs/config/props.js' +export const props = defineMixin({ + props: { + // 右边锚点非激活的颜色 + inactiveColor: { + type: String, + default: () => defProps.indexList.inactiveColor + }, + // 右边锚点激活的颜色 + activeColor: { + type: String, + default: () => defProps.indexList.activeColor + }, + // 索引字符列表,数组形式 + indexList: { + type: Array, + default: () => defProps.indexList.indexList + }, + // 是否开启锚点自动吸顶 + sticky: { + type: Boolean, + default: () => defProps.indexList.sticky + }, + // 自定义导航栏的高度 + customNavHeight: { + type: [String, Number], + default: () => defProps.indexList.customNavHeight + }, + // 是否开启底部安全距离适配 + safeBottomFix: { + type: Boolean, + default: () => defProps.indexList.safeBottomFix + }, + } +}) diff --git a/uni_modules/uview-plus/components/u-index-list/u-index-list.vue b/uni_modules/uview-plus/components/u-index-list/u-index-list.vue new file mode 100644 index 0000000..eb29ec0 --- /dev/null +++ b/uni_modules/uview-plus/components/u-index-list/u-index-list.vue @@ -0,0 +1,589 @@ + + + + + diff --git a/uni_modules/uview-plus/components/u-input/input.js b/uni_modules/uview-plus/components/u-input/input.js new file mode 100644 index 0000000..6c310ea --- /dev/null +++ b/uni_modules/uview-plus/components/u-input/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: 140, + 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-plus/components/u-input/props.js b/uni_modules/uview-plus/components/u-input/props.js new file mode 100644 index 0000000..e5e343e --- /dev/null +++ b/uni_modules/uview-plus/components/u-input/props.js @@ -0,0 +1,198 @@ +import { defineMixin } from '../../libs/vue' +import defProps from '../../libs/config/props.js' + +export const props = defineMixin({ + props: { + // #ifdef VUE3 + // 绑定的值 + modelValue: { + type: [String, Number], + default: () => defProps.input.value + }, + // #endif + // #ifdef VUE2 + // 绑定的值 + value: { + type: [String, Number], + default: () => defProps.input.value + }, + // #endif + // number-数字输入键盘,app-vue下可以输入浮点数,app-nvue和小程序平台下只能输入整数 + // idcard-身份证输入键盘,微信、支付宝、百度、QQ小程序 + // digit-带小数点的数字键盘,App的nvue页面、微信、支付宝、百度、头条、QQ小程序 + // text-文本输入键盘 + type: { + type: String, + default: () => defProps.input.type + }, + // 如果 textarea 是在一个 position:fixed 的区域,需要显示指定属性 fixed 为 true, + // 兼容性:微信小程序、百度小程序、字节跳动小程序、QQ小程序 + fixed: { + type: Boolean, + default: () => defProps.input.fixed + }, + // 是否禁用输入框 + disabled: { + type: Boolean, + default: () => defProps.input.disabled + }, + // 禁用状态时的背景色 + disabledColor: { + type: String, + default: () => defProps.input.disabledColor + }, + // 是否显示清除控件 + clearable: { + type: Boolean, + default: () => defProps.input.clearable + }, + // 是否密码类型 + password: { + type: Boolean, + default: () => defProps.input.password + }, + // 最大输入长度,设置为 -1 的时候不限制最大长度 + maxlength: { + type: [String, Number], + default: () => defProps.input.maxlength + }, + // 输入框为空时的占位符 + placeholder: { + type: String, + default: () => defProps.input.placeholder + }, + // 指定placeholder的样式类,注意页面或组件的style中写了scoped时,需要在类名前写/deep/ + placeholderClass: { + type: String, + default: () => defProps.input.placeholderClass + }, + // 指定placeholder的样式 + placeholderStyle: { + type: [String, Object], + default: () => defProps.input.placeholderStyle + }, + // 是否显示输入字数统计,只在 type ="text"或type ="textarea"时有效 + showWordLimit: { + type: Boolean, + default: () => defProps.input.showWordLimit + }, + // 设置右下角按钮的文字,有效值:send|search|next|go|done,兼容性详见uni-app文档 + // https://uniapp.dcloud.io/component/input + // https://uniapp.dcloud.io/component/textarea + confirmType: { + type: String, + default: () => defProps.input.confirmType + }, + // 点击键盘右下角按钮时是否保持键盘不收起,H5无效 + confirmHold: { + type: Boolean, + default: () => defProps.input.confirmHold + }, + // focus时,点击页面的时候不收起键盘,微信小程序有效 + holdKeyboard: { + type: Boolean, + default: () => defProps.input.holdKeyboard + }, + // 自动获取焦点 + // 在 H5 平台能否聚焦以及软键盘是否跟随弹出,取决于当前浏览器本身的实现。nvue 页面不支持,需使用组件的 focus()、blur() 方法控制焦点 + focus: { + type: Boolean, + default: () => defProps.input.focus + }, + // 键盘收起时,是否自动失去焦点,目前仅App3.0.0+有效 + autoBlur: { + type: Boolean, + default: () => defProps.input.autoBlur + }, + // 是否去掉 iOS 下的默认内边距,仅微信小程序,且type=textarea时有效 + disableDefaultPadding: { + type: Boolean, + default: () => defProps.input.disableDefaultPadding + }, + // 指定focus时光标的位置 + cursor: { + type: [String, Number], + default: () => defProps.input.cursor + }, + // 输入框聚焦时底部与键盘的距离 + cursorSpacing: { + type: [String, Number], + default: () => defProps.input.cursorSpacing + }, + // 光标起始位置,自动聚集时有效,需与selection-end搭配使用 + selectionStart: { + type: [String, Number], + default: () => defProps.input.selectionStart + }, + // 光标结束位置,自动聚集时有效,需与selection-start搭配使用 + selectionEnd: { + type: [String, Number], + default: () => defProps.input.selectionEnd + }, + // 键盘弹起时,是否自动上推页面 + adjustPosition: { + type: Boolean, + default: () => defProps.input.adjustPosition + }, + // 输入框内容对齐方式,可选值为:left|center|right + inputAlign: { + type: String, + default: () => defProps.input.inputAlign + }, + // 输入框字体的大小 + fontSize: { + type: [String, Number], + default: () => defProps.input.fontSize + }, + // 输入框字体颜色 + color: { + type: String, + default: () => defProps.input.color + }, + // 输入框前置图标 + prefixIcon: { + type: String, + default: () => defProps.input.prefixIcon + }, + // 前置图标样式,对象或字符串 + prefixIconStyle: { + type: [String, Object], + default: () => defProps.input.prefixIconStyle + }, + // 输入框后置图标 + suffixIcon: { + type: String, + default: () => defProps.input.suffixIcon + }, + // 后置图标样式,对象或字符串 + suffixIconStyle: { + type: [String, Object], + default: () => defProps.input.suffixIconStyle + }, + // 边框类型,surround-四周边框,bottom-底部边框,none-无边框 + border: { + type: String, + default: () => defProps.input.border + }, + // 是否只读,与disabled不同之处在于disabled会置灰组件,而readonly则不会 + readonly: { + type: Boolean, + default: () => defProps.input.readonly + }, + // 输入框形状,circle-圆形,square-方形 + shape: { + type: String, + default: () => defProps.input.shape + }, + // 用于处理或者过滤输入框内容的方法 + formatter: { + type: [Function, null], + default: () => defProps.input.formatter + }, + // 是否忽略组件内对文本合成系统事件的处理 + ignoreCompositionEvent: { + type: Boolean, + default: true + } + } +}) diff --git a/uni_modules/uview-plus/components/u-input/u-input.vue b/uni_modules/uview-plus/components/u-input/u-input.vue new file mode 100644 index 0000000..69d35e2 --- /dev/null +++ b/uni_modules/uview-plus/components/u-input/u-input.vue @@ -0,0 +1,401 @@ + + + + + diff --git a/uni_modules/uview-plus/components/u-keyboard/keyboard.js b/uni_modules/uview-plus/components/u-keyboard/keyboard.js new file mode 100644 index 0000000..57182bd --- /dev/null +++ b/uni_modules/uview-plus/components/u-keyboard/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-plus/components/u-keyboard/props.js b/uni_modules/uview-plus/components/u-keyboard/props.js new file mode 100644 index 0000000..8c5d8ae --- /dev/null +++ b/uni_modules/uview-plus/components/u-keyboard/props.js @@ -0,0 +1,86 @@ +import { defineMixin } from '../../libs/vue' +import defProps from '../../libs/config/props.js' +export const props = defineMixin({ + props: { + // 键盘的类型,number-数字键盘,card-身份证键盘,car-车牌号键盘 + mode: { + type: String, + default: () => defProps.keyboard.mode + }, + // 是否显示键盘的"."符号 + dotDisabled: { + type: Boolean, + default: () => defProps.keyboard.dotDisabled + }, + // 是否显示顶部工具条 + tooltip: { + type: Boolean, + default: () => defProps.keyboard.tooltip + }, + // 是否显示工具条中间的提示 + showTips: { + type: Boolean, + default: () => defProps.keyboard.showTips + }, + // 工具条中间的提示文字 + tips: { + type: String, + default: () => defProps.keyboard.tips + }, + // 是否显示工具条左边的"取消"按钮 + showCancel: { + type: Boolean, + default: () => defProps.keyboard.showCancel + }, + // 是否显示工具条右边的"完成"按钮 + showConfirm: { + type: Boolean, + default: () => defProps.keyboard.showConfirm + }, + // 是否打乱键盘按键的顺序 + random: { + type: Boolean, + default: () => defProps.keyboard.random + }, + // 是否开启底部安全区适配,开启的话,会在iPhoneX机型底部添加一定的内边距 + safeAreaInsetBottom: { + type: Boolean, + default: () => defProps.keyboard.safeAreaInsetBottom + }, + // 是否允许通过点击遮罩关闭键盘 + closeOnClickOverlay: { + type: Boolean, + default: () => defProps.keyboard.closeOnClickOverlay + }, + // 控制键盘的弹出与收起 + show: { + type: Boolean, + default: () => defProps.keyboard.show + }, + // 是否显示遮罩,某些时候数字键盘时,用户希望看到自己的数值,所以可能不想要遮罩 + overlay: { + type: Boolean, + default: () => defProps.keyboard.overlay + }, + // z-index值 + zIndex: { + type: [String, Number], + default: () => defProps.keyboard.zIndex + }, + // 取消按钮的文字 + cancelText: { + type: String, + default: () => defProps.keyboard.cancelText + }, + // 确认按钮的文字 + confirmText: { + type: String, + default: () => defProps.keyboard.confirmText + }, + // 输入一个中文后,是否自动切换到英文 + autoChange: { + type: Boolean, + default: () => defProps.keyboard.autoChange + } + } +}) diff --git a/uni_modules/uview-plus/components/u-keyboard/u-keyboard.vue b/uni_modules/uview-plus/components/u-keyboard/u-keyboard.vue new file mode 100644 index 0000000..868f0c5 --- /dev/null +++ b/uni_modules/uview-plus/components/u-keyboard/u-keyboard.vue @@ -0,0 +1,167 @@ + + + + + diff --git a/uni_modules/uview-plus/components/u-lazy-load/u-lazy-load.vue b/uni_modules/uview-plus/components/u-lazy-load/u-lazy-load.vue new file mode 100644 index 0000000..c49add0 --- /dev/null +++ b/uni_modules/uview-plus/components/u-lazy-load/u-lazy-load.vue @@ -0,0 +1,258 @@ + + + + + \ No newline at end of file diff --git a/uni_modules/uview-plus/components/u-line-progress/lineProgress.js b/uni_modules/uview-plus/components/u-line-progress/lineProgress.js new file mode 100644 index 0000000..cdfcb0e --- /dev/null +++ b/uni_modules/uview-plus/components/u-line-progress/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-plus/components/u-line-progress/props.js b/uni_modules/uview-plus/components/u-line-progress/props.js new file mode 100644 index 0000000..3e03e61 --- /dev/null +++ b/uni_modules/uview-plus/components/u-line-progress/props.js @@ -0,0 +1,30 @@ +import { defineMixin } from '../../libs/vue' +import defProps from '../../libs/config/props.js' +export const props = defineMixin({ + props: { + // 激活部分的颜色 + activeColor: { + type: String, + default: () => defProps.lineProgress.activeColor + }, + inactiveColor: { + type: String, + default: () => defProps.lineProgress.color + }, + // 进度百分比,数值 + percentage: { + type: [String, Number], + default: () => defProps.lineProgress.inactiveColor + }, + // 是否在进度条内部显示百分比的值 + showText: { + type: Boolean, + default: () => defProps.lineProgress.showText + }, + // 进度条的高度,单位px + height: { + type: [String, Number], + default: () => defProps.lineProgress.height + } + } +}) diff --git a/uni_modules/uview-plus/components/u-line-progress/u-line-progress.vue b/uni_modules/uview-plus/components/u-line-progress/u-line-progress.vue new file mode 100644 index 0000000..577f877 --- /dev/null +++ b/uni_modules/uview-plus/components/u-line-progress/u-line-progress.vue @@ -0,0 +1,149 @@ + + + + + diff --git a/uni_modules/uview-plus/components/u-line/line.js b/uni_modules/uview-plus/components/u-line/line.js new file mode 100644 index 0000000..2c87af2 --- /dev/null +++ b/uni_modules/uview-plus/components/u-line/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-plus/components/u-line/props.js b/uni_modules/uview-plus/components/u-line/props.js new file mode 100644 index 0000000..6428d3f --- /dev/null +++ b/uni_modules/uview-plus/components/u-line/props.js @@ -0,0 +1,35 @@ +import { defineMixin } from '../../libs/vue' +import defProps from '../../libs/config/props.js' +export const props = defineMixin({ + props: { + color: { + type: String, + default: () => defProps.line.color + }, + // 长度,竖向时表现为高度,横向时表现为长度,可以为百分比,带px单位的值等 + length: { + type: [String, Number], + default: () => defProps.line.length + }, + // 线条方向,col-竖向,row-横向 + direction: { + type: String, + default: () => defProps.line.direction + }, + // 是否显示细边框 + hairline: { + type: Boolean, + default: () => defProps.line.hairline + }, + // 线条与上下左右元素的间距,字符串形式,如"30px"、"20px 30px" + margin: { + type: [String, Number], + default: () => defProps.line.margin + }, + // 是否虚线,true-虚线,false-实线 + dashed: { + type: Boolean, + default: () => defProps.line.dashed + } + } +}) diff --git a/uni_modules/uview-plus/components/u-line/u-line.vue b/uni_modules/uview-plus/components/u-line/u-line.vue new file mode 100644 index 0000000..4acc0a0 --- /dev/null +++ b/uni_modules/uview-plus/components/u-line/u-line.vue @@ -0,0 +1,65 @@ + + + + + diff --git a/uni_modules/uview-plus/components/u-link/link.js b/uni_modules/uview-plus/components/u-link/link.js new file mode 100644 index 0000000..a5d0450 --- /dev/null +++ b/uni_modules/uview-plus/components/u-link/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 '../../libs/config/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-plus/components/u-link/props.js b/uni_modules/uview-plus/components/u-link/props.js new file mode 100644 index 0000000..d96d824 --- /dev/null +++ b/uni_modules/uview-plus/components/u-link/props.js @@ -0,0 +1,41 @@ +import { defineMixin } from '../../libs/vue' +import defProps from '../../libs/config/props.js' +export const props = defineMixin({ + props: { + // 文字颜色 + color: { + type: String, + default: () => defProps.link.color + }, + // 字体大小,单位px + fontSize: { + type: [String, Number], + default: () => defProps.link.fontSize + }, + // 是否显示下划线 + underLine: { + type: Boolean, + default: () => defProps.link.underLine + }, + // 要跳转的链接 + href: { + type: String, + default: () => defProps.link.href + }, + // 小程序中复制到粘贴板的提示语 + mpTips: { + type: String, + default: () => defProps.link.mpTips + }, + // 下划线颜色 + lineColor: { + type: String, + default: () => defProps.link.lineColor + }, + // 超链接的问题,不使用slot形式传入,是因为nvue下无法修改颜色 + text: { + type: String, + default: () => defProps.link.text + } + } +}) diff --git a/uni_modules/uview-plus/components/u-link/u-link.vue b/uni_modules/uview-plus/components/u-link/u-link.vue new file mode 100644 index 0000000..5103893 --- /dev/null +++ b/uni_modules/uview-plus/components/u-link/u-link.vue @@ -0,0 +1,87 @@ + + + + + diff --git a/uni_modules/uview-plus/components/u-list-item/listItem.js b/uni_modules/uview-plus/components/u-list-item/listItem.js new file mode 100644 index 0000000..7fe2166 --- /dev/null +++ b/uni_modules/uview-plus/components/u-list-item/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-plus/components/u-list-item/props.js b/uni_modules/uview-plus/components/u-list-item/props.js new file mode 100644 index 0000000..edaa4dc --- /dev/null +++ b/uni_modules/uview-plus/components/u-list-item/props.js @@ -0,0 +1,11 @@ +import { defineMixin } from '../../libs/vue' +import defProps from '../../libs/config/props.js' +export const props = defineMixin({ + props: { + // 用于滚动到指定item + anchor: { + type: [String, Number], + default: () => defProps.listItem.anchor + } + } +}) diff --git a/uni_modules/uview-plus/components/u-list-item/u-list-item.vue b/uni_modules/uview-plus/components/u-list-item/u-list-item.vue new file mode 100644 index 0000000..eeaccdc --- /dev/null +++ b/uni_modules/uview-plus/components/u-list-item/u-list-item.vue @@ -0,0 +1,119 @@ + + + + + diff --git a/uni_modules/uview-plus/components/u-list/list.js b/uni_modules/uview-plus/components/u-list/list.js new file mode 100644 index 0000000..a830c32 --- /dev/null +++ b/uni_modules/uview-plus/components/u-list/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-plus/components/u-list/props.js b/uni_modules/uview-plus/components/u-list/props.js new file mode 100644 index 0000000..9fca829 --- /dev/null +++ b/uni_modules/uview-plus/components/u-list/props.js @@ -0,0 +1,101 @@ +import { defineMixin } from '../../libs/vue' +import defProps from '../../libs/config/props.js' +export const props = defineMixin({ + props: { + // 控制是否出现滚动条,仅nvue有效 + showScrollbar: { + type: Boolean, + default: () => defProps.list.showScrollbar + }, + // 距底部多少时触发scrolltolower事件 + lowerThreshold: { + type: [String, Number], + default: () => defProps.list.lowerThreshold + }, + // 距顶部多少时触发scrolltoupper事件,非nvue有效 + upperThreshold: { + type: [String, Number], + default: () => defProps.list.upperThreshold + }, + // 设置竖向滚动条位置 + scrollTop: { + type: [String, Number], + default: () => defProps.list.scrollTop + }, + // 控制 onscroll 事件触发的频率,仅nvue有效 + offsetAccuracy: { + type: [String, Number], + default: () => defProps.list.offsetAccuracy + }, + // 启用 flexbox 布局。开启后,当前节点声明了display: flex就会成为flex container,并作用于其孩子节点,仅微信小程序有效 + enableFlex: { + type: Boolean, + default: () => defProps.list.enableFlex + }, + // 是否按分页模式显示List,默认值false + pagingEnabled: { + type: Boolean, + default: () => defProps.list.pagingEnabled + }, + // 是否允许List滚动 + scrollable: { + type: Boolean, + default: () => defProps.list.scrollable + }, + // 值应为某子元素id(id不能以数字开头) + scrollIntoView: { + type: String, + default: () => defProps.list.scrollIntoView + }, + // 在设置滚动条位置时使用动画过渡 + scrollWithAnimation: { + type: Boolean, + default: () => defProps.list.scrollWithAnimation + }, + // iOS点击顶部状态栏、安卓双击标题栏时,滚动条返回顶部,只对微信小程序有效 + enableBackToTop: { + type: Boolean, + default: () => defProps.list.enableBackToTop + }, + // 列表的高度 + height: { + type: [String, Number], + default: () => defProps.list.height + }, + // 列表宽度 + width: { + type: [String, Number], + default: () => defProps.list.width + }, + // 列表前后预渲染的屏数,1代表一个屏幕的高度,1.5代表1个半屏幕高度 + preLoadScreen: { + type: [String, Number], + default: () => defProps.list.preLoadScreen + }, + // 开启自定义下拉刷新 + refresherEnabled: { + type: Boolean, + default: () => false + }, + // 设置自定义下拉刷新阈值 + refresherThreshold: { + type: Number, + default: () => 45 + }, + // 设置自定义下拉刷新默认样式,支持设置 black,white,none,none 表示不使用默认样式 + refresherDefaultStyle: { + type: String, + default: () => 'black' + }, + // 设置自定义下拉刷新区域背景颜色 + refresherBackground: { + type: String, + default: () => '#FFF' + }, + // 设置当前下拉刷新状态,true 表示下拉刷新已经被触发,false 表示下拉刷新未被触发 + refresherTriggered: { + type: Boolean, + default: () => false + } + } +}) diff --git a/uni_modules/uview-plus/components/u-list/u-list.vue b/uni_modules/uview-plus/components/u-list/u-list.vue new file mode 100644 index 0000000..41de947 --- /dev/null +++ b/uni_modules/uview-plus/components/u-list/u-list.vue @@ -0,0 +1,183 @@ + + + + + diff --git a/uni_modules/uview-plus/components/u-loading-icon/loadingIcon.js b/uni_modules/uview-plus/components/u-loading-icon/loadingIcon.js new file mode 100644 index 0000000..56cc3f2 --- /dev/null +++ b/uni_modules/uview-plus/components/u-loading-icon/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 '../../libs/config/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-plus/components/u-loading-icon/props.js b/uni_modules/uview-plus/components/u-loading-icon/props.js new file mode 100644 index 0000000..6a6abf9 --- /dev/null +++ b/uni_modules/uview-plus/components/u-loading-icon/props.js @@ -0,0 +1,61 @@ +import { defineMixin } from '../../libs/vue' +import defProps from '../../libs/config/props.js' +export const props = defineMixin({ + props: { + // 是否显示组件 + show: { + type: Boolean, + default: () => defProps.loadingIcon.show + }, + // 颜色 + color: { + type: String, + default: () => defProps.loadingIcon.color + }, + // 提示文字颜色 + textColor: { + type: String, + default: () => defProps.loadingIcon.textColor + }, + // 文字和图标是否垂直排列 + vertical: { + type: Boolean, + default: () => defProps.loadingIcon.vertical + }, + // 模式选择,circle-圆形,spinner-花朵形,semicircle-半圆形 + mode: { + type: String, + default: () => defProps.loadingIcon.mode + }, + // 图标大小,单位默认px + size: { + type: [String, Number], + default: () => defProps.loadingIcon.size + }, + // 文字大小 + textSize: { + type: [String, Number], + default: () => defProps.loadingIcon.textSize + }, + // 文字内容 + text: { + type: [String, Number], + default: () => defProps.loadingIcon.text + }, + // 动画模式 + timingFunction: { + type: String, + default: () => defProps.loadingIcon.timingFunction + }, + // 动画执行周期时间 + duration: { + type: [String, Number], + default: () => defProps.loadingIcon.duration + }, + // mode=circle时的暗边颜色 + inactiveColor: { + type: String, + default: () => defProps.loadingIcon.inactiveColor + } + } +}) diff --git a/uni_modules/uview-plus/components/u-loading-icon/u-loading-icon.vue b/uni_modules/uview-plus/components/u-loading-icon/u-loading-icon.vue new file mode 100644 index 0000000..300b774 --- /dev/null +++ b/uni_modules/uview-plus/components/u-loading-icon/u-loading-icon.vue @@ -0,0 +1,349 @@ + + + + + diff --git a/uni_modules/uview-plus/components/u-loading-page/loadingPage.js b/uni_modules/uview-plus/components/u-loading-page/loadingPage.js new file mode 100644 index 0000000..6ed7485 --- /dev/null +++ b/uni_modules/uview-plus/components/u-loading-page/loadingPage.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: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', + zIndex: 10 + } +} diff --git a/uni_modules/uview-plus/components/u-loading-page/props.js b/uni_modules/uview-plus/components/u-loading-page/props.js new file mode 100644 index 0000000..185a78f --- /dev/null +++ b/uni_modules/uview-plus/components/u-loading-page/props.js @@ -0,0 +1,57 @@ +import { defineMixin } from '../../libs/vue' +import defProps from '../../libs/config/props.js' + +export const props = defineMixin({ + props: { + // 提示内容 + loadingText: { + type: [String, Number], + default: () => defProps.loadingPage.loadingText + }, + // 文字上方用于替换loading动画的图片 + image: { + type: String, + default: () => defProps.loadingPage.image + }, + // 加载动画的模式,circle-圆形,spinner-花朵形,semicircle-半圆形 + loadingMode: { + type: String, + default: () => defProps.loadingPage.loadingMode + }, + // 是否加载中 + loading: { + type: Boolean, + default: () => defProps.loadingPage.loading + }, + // 背景色 + bgColor: { + type: String, + default: () => defProps.loadingPage.bgColor + }, + // 文字颜色 + color: { + type: String, + default: () => defProps.loadingPage.color + }, + // 文字大小 + fontSize: { + type: [String, Number], + default: () => defProps.loadingPage.fontSize + }, + // 图标大小 + iconSize: { + type: [String, Number], + default: () => defProps.loadingPage.fontSize + }, + // 加载中图标的颜色,只能rgb或者十六进制颜色值 + loadingColor: { + type: String, + default: () => defProps.loadingPage.loadingColor + }, + // 层级 + zIndex: { + type: [Number], + default: () => defProps.loadingPage.zIndex + }, + } +}) diff --git a/uni_modules/uview-plus/components/u-loading-page/u-loading-page.vue b/uni_modules/uview-plus/components/u-loading-page/u-loading-page.vue new file mode 100644 index 0000000..d81dff2 --- /dev/null +++ b/uni_modules/uview-plus/components/u-loading-page/u-loading-page.vue @@ -0,0 +1,123 @@ + + + + + diff --git a/uni_modules/uview-plus/components/u-loadmore/loadmore.js b/uni_modules/uview-plus/components/u-loadmore/loadmore.js new file mode 100644 index 0000000..67c1160 --- /dev/null +++ b/uni_modules/uview-plus/components/u-loadmore/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-plus/components/u-loadmore/props.js b/uni_modules/uview-plus/components/u-loadmore/props.js new file mode 100644 index 0000000..fb78e39 --- /dev/null +++ b/uni_modules/uview-plus/components/u-loadmore/props.js @@ -0,0 +1,96 @@ +import { defineMixin } from '../../libs/vue' +import defProps from '../../libs/config/props.js' +export const props = defineMixin({ + props: { + // 组件状态,loadmore-加载前的状态,loading-加载中的状态,nomore-没有更多的状态 + status: { + type: String, + default: () => defProps.loadmore.status + }, + // 组件背景色 + bgColor: { + type: String, + default: () => defProps.loadmore.bgColor + }, + // 是否显示加载中的图标 + icon: { + type: Boolean, + default: () => defProps.loadmore.icon + }, + // 字体大小 + fontSize: { + type: [String, Number], + default: () => defProps.loadmore.fontSize + }, + // 图标大小 + iconSize: { + type: [String, Number], + default: () => defProps.loadmore.iconSize + }, + // 字体颜色 + color: { + type: String, + default: () => defProps.loadmore.color + }, + // 加载中状态的图标,spinner-花朵状图标,circle-圆圈状,semicircle-半圆 + loadingIcon: { + type: String, + default: () => defProps.loadmore.loadingIcon + }, + // 加载前的提示语 + loadmoreText: { + type: String, + default: () => defProps.loadmore.loadmoreText + }, + // 加载中提示语 + loadingText: { + type: String, + default: () => defProps.loadmore.loadingText + }, + // 没有更多的提示语 + nomoreText: { + type: String, + default: () => defProps.loadmore.nomoreText + }, + // 在“没有更多”状态下,是否显示粗点 + isDot: { + type: Boolean, + default: () => defProps.loadmore.isDot + }, + // 加载中图标的颜色 + iconColor: { + type: String, + default: () => defProps.loadmore.iconColor + }, + // 上边距 + marginTop: { + type: [String, Number], + default: () => defProps.loadmore.marginTop + }, + // 下边距 + marginBottom: { + type: [String, Number], + default: () => defProps.loadmore.marginBottom + }, + // 高度,单位px + height: { + type: [String, Number], + default: () => defProps.loadmore.height + }, + // 是否显示左边分割线 + line: { + type: Boolean, + default: () => defProps.loadmore.line + }, + // 线条颜色 + lineColor: { + type: String, + default: () => defProps.loadmore.lineColor + }, + // 是否虚线,true-虚线,false-实线 + dashed: { + type: Boolean, + default: () => defProps.loadmore.dashed + } + } +}) diff --git a/uni_modules/uview-plus/components/u-loadmore/u-loadmore.vue b/uni_modules/uview-plus/components/u-loadmore/u-loadmore.vue new file mode 100644 index 0000000..62c99c0 --- /dev/null +++ b/uni_modules/uview-plus/components/u-loadmore/u-loadmore.vue @@ -0,0 +1,155 @@ + + + + + diff --git a/uni_modules/uview-plus/components/u-message-input/u-message-input.vue b/uni_modules/uview-plus/components/u-message-input/u-message-input.vue new file mode 100644 index 0000000..0da5f1c --- /dev/null +++ b/uni_modules/uview-plus/components/u-message-input/u-message-input.vue @@ -0,0 +1,318 @@ + + + + + diff --git a/uni_modules/uview-plus/components/u-modal/modal.js b/uni_modules/uview-plus/components/u-modal/modal.js new file mode 100644 index 0000000..02dadaa --- /dev/null +++ b/uni_modules/uview-plus/components/u-modal/modal.js @@ -0,0 +1,31 @@ +/* + * @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: '', + contentTextAlign: 'left' + } +} diff --git a/uni_modules/uview-plus/components/u-modal/props.js b/uni_modules/uview-plus/components/u-modal/props.js new file mode 100644 index 0000000..0e7443b --- /dev/null +++ b/uni_modules/uview-plus/components/u-modal/props.js @@ -0,0 +1,91 @@ +import { defineMixin } from '../../libs/vue' +import defProps from '../../libs/config/props.js' +export const props = defineMixin({ + props: { + // 是否展示modal + show: { + type: Boolean, + default: () => defProps.modal.show + }, + // 标题 + title: { + type: [String], + default: () => defProps.modal.title + }, + // 弹窗内容 + content: { + type: String, + default: () => defProps.modal.content + }, + // 确认文案 + confirmText: { + type: String, + default: () => defProps.modal.confirmText + }, + // 取消文案 + cancelText: { + type: String, + default: () => defProps.modal.cancelText + }, + // 是否显示确认按钮 + showConfirmButton: { + type: Boolean, + default: () => defProps.modal.showConfirmButton + }, + // 是否显示取消按钮 + showCancelButton: { + type: Boolean, + default: () => defProps.modal.showCancelButton + }, + // 确认按钮颜色 + confirmColor: { + type: String, + default: () => defProps.modal.confirmColor + }, + // 取消文字颜色 + cancelColor: { + type: String, + default: () => defProps.modal.cancelColor + }, + // 对调确认和取消的位置 + buttonReverse: { + type: Boolean, + default: () => defProps.modal.buttonReverse + }, + // 是否开启缩放效果 + zoom: { + type: Boolean, + default: () => defProps.modal.zoom + }, + // 是否异步关闭,只对确定按钮有效 + asyncClose: { + type: Boolean, + default: () => defProps.modal.asyncClose + }, + // 是否允许点击遮罩关闭modal + closeOnClickOverlay: { + type: Boolean, + default: () => defProps.modal.closeOnClickOverlay + }, + // 给一个负的margin-top,往上偏移,避免和键盘重合的情况 + negativeTop: { + type: [String, Number], + default: () => defProps.modal.negativeTop + }, + // modal宽度,不支持百分比,可以数值,px,rpx单位 + width: { + type: [String, Number], + default: () => defProps.modal.width + }, + // 确认按钮的样式,circle-圆形,square-方形,如设置,将不会显示取消按钮 + confirmButtonShape: { + type: String, + default: () => defProps.modal.confirmButtonShape + }, + // 文案对齐方式 + contentTextAlign: { + type: String, + default: () => defProps.modal.contentTextAlign + }, + } +}) diff --git a/uni_modules/uview-plus/components/u-modal/u-modal.vue b/uni_modules/uview-plus/components/u-modal/u-modal.vue new file mode 100644 index 0000000..ed2d578 --- /dev/null +++ b/uni_modules/uview-plus/components/u-modal/u-modal.vue @@ -0,0 +1,243 @@ + + + + + diff --git a/uni_modules/uview-plus/components/u-navbar-mini/props.js b/uni_modules/uview-plus/components/u-navbar-mini/props.js new file mode 100644 index 0000000..57d5b4e --- /dev/null +++ b/uni_modules/uview-plus/components/u-navbar-mini/props.js @@ -0,0 +1,51 @@ +import { defineMixin } from '../../libs/vue' + +export const props = defineMixin({ + props: { + // 是否开启顶部安全区适配 + safeAreaInsetTop: { + type: Boolean, + default: () => true + }, + // 是否固定在顶部 + fixed: { + type: Boolean, + default: () => true + }, + // 左边的图标 + leftIcon: { + type: String, + default: 'arrow-leftward' + }, + // 背景颜色 + bgColor: { + type: String, + default: () => 'rgba(0,0,0,.15)' + }, + // 导航栏高度 + height: { + type: [String, Number], + default: () => '32px' + }, + // 图标的大小 + iconSize: { + type: [String, Number], + default: '20px' + }, + // 图标的颜色 + iconColor: { + type: String, + default: '#fff' + }, + // 点击左侧区域(返回图标),是否自动返回上一页 + autoBack: { + type: Boolean, + default: () => true + }, + // 首页路径 + homeUrl: { + type: [String], + default: '' + } + } +}) diff --git a/uni_modules/uview-plus/components/u-navbar-mini/u-navbar-mini.vue b/uni_modules/uview-plus/components/u-navbar-mini/u-navbar-mini.vue new file mode 100644 index 0000000..72e4b37 --- /dev/null +++ b/uni_modules/uview-plus/components/u-navbar-mini/u-navbar-mini.vue @@ -0,0 +1,139 @@ + + + + + diff --git a/uni_modules/uview-plus/components/u-navbar/navbar.js b/uni_modules/uview-plus/components/u-navbar/navbar.js new file mode 100644 index 0000000..a950988 --- /dev/null +++ b/uni_modules/uview-plus/components/u-navbar/navbar.js @@ -0,0 +1,33 @@ +/* + * @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 '../../libs/config/color' +export default { + // navbar 组件 + navbar: { + safeAreaInsetTop: true, + placeholder: false, + fixed: true, + border: false, + leftIcon: 'arrow-left', + leftText: '', + rightText: '', + rightIcon: '', + title: '', + titleColor: '', + bgColor: '#ffffff', + titleWidth: '400rpx', + height: '44px', + leftIconSize: 20, + leftIconColor: color.mainColor, + autoBack: false, + titleStyle: '' + } + +} diff --git a/uni_modules/uview-plus/components/u-navbar/props.js b/uni_modules/uview-plus/components/u-navbar/props.js new file mode 100644 index 0000000..5e0a632 --- /dev/null +++ b/uni_modules/uview-plus/components/u-navbar/props.js @@ -0,0 +1,92 @@ +import { defineMixin } from '../../libs/vue' +import defProps from '../../libs/config/props.js' + +export const props = defineMixin({ + props: { + // 是否开启顶部安全区适配 + safeAreaInsetTop: { + type: Boolean, + default: () => defProps.navbar.safeAreaInsetTop + }, + // 固定在顶部时,是否生成一个等高元素,以防止塌陷 + placeholder: { + type: Boolean, + default: () => defProps.navbar.placeholder + }, + // 是否固定在顶部 + fixed: { + type: Boolean, + default: () => defProps.navbar.fixed + }, + // 是否显示下边框 + border: { + type: Boolean, + default: () => defProps.navbar.border + }, + // 左边的图标 + leftIcon: { + type: String, + default: () => defProps.navbar.leftIcon + }, + // 左边的提示文字 + leftText: { + type: String, + default: () => defProps.navbar.leftText + }, + // 左右的提示文字 + rightText: { + type: String, + default: () => defProps.navbar.rightText + }, + // 右边的图标 + rightIcon: { + type: String, + default: () => defProps.navbar.rightIcon + }, + // 标题 + title: { + type: [String, Number], + default: () => defProps.navbar.title + }, + // 标题颜色 + titleColor: { + type: String, + default: () => defProps.navbar.titleColor + }, + // 背景颜色 + bgColor: { + type: String, + default: () => defProps.navbar.bgColor + }, + // 标题的宽度 + titleWidth: { + type: [String, Number], + default: () => defProps.navbar.titleWidth + }, + // 导航栏高度 + height: { + type: [String, Number], + default: () => defProps.navbar.height + }, + // 左侧返回图标的大小 + leftIconSize: { + type: [String, Number], + default: () => defProps.navbar.leftIconSize + }, + // 左侧返回图标的颜色 + leftIconColor: { + type: String, + default: () => defProps.navbar.leftIconColor + }, + // 点击左侧区域(返回图标),是否自动返回上一页 + autoBack: { + type: Boolean, + default: () => defProps.navbar.autoBack + }, + // 标题的样式,对象或字符串 + titleStyle: { + type: [String, Object], + default: () => defProps.navbar.titleStyle + } + } +}) diff --git a/uni_modules/uview-plus/components/u-navbar/u-navbar.vue b/uni_modules/uview-plus/components/u-navbar/u-navbar.vue new file mode 100644 index 0000000..ca86634 --- /dev/null +++ b/uni_modules/uview-plus/components/u-navbar/u-navbar.vue @@ -0,0 +1,195 @@ + + + + + diff --git a/uni_modules/uview-plus/components/u-no-network/noNetwork.js b/uni_modules/uview-plus/components/u-no-network/noNetwork.js new file mode 100644 index 0000000..74dba1b --- /dev/null +++ b/uni_modules/uview-plus/components/u-no-network/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-plus/components/u-no-network/props.js b/uni_modules/uview-plus/components/u-no-network/props.js new file mode 100644 index 0000000..1091cf5 --- /dev/null +++ b/uni_modules/uview-plus/components/u-no-network/props.js @@ -0,0 +1,21 @@ +import { defineMixin } from '../../libs/vue' +import defProps from '../../libs/config/props.js' +export const props = defineMixin({ + props: { + // 页面文字提示 + tips: { + type: String, + default: () => defProps.noNetwork.tips + }, + // 一个z-index值,用于设置没有网络这个组件的层次,因为页面可能会有其他定位的元素层级过高,导致此组件被覆盖 + zIndex: { + type: [String, Number], + default: () => defProps.noNetwork.zIndex + }, + // image 没有网络的图片提示 + image: { + type: String, + default: () => defProps.noNetwork.image + } + } +}) diff --git a/uni_modules/uview-plus/components/u-no-network/u-no-network.vue b/uni_modules/uview-plus/components/u-no-network/u-no-network.vue new file mode 100644 index 0000000..62f85ff --- /dev/null +++ b/uni_modules/uview-plus/components/u-no-network/u-no-network.vue @@ -0,0 +1,223 @@ + + + + + diff --git a/uni_modules/uview-plus/components/u-notice-bar/noticeBar.js b/uni_modules/uview-plus/components/u-notice-bar/noticeBar.js new file mode 100644 index 0000000..5c4adde --- /dev/null +++ b/uni_modules/uview-plus/components/u-notice-bar/noticeBar.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: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', + justifyContent: 'flex-start' + } +} diff --git a/uni_modules/uview-plus/components/u-notice-bar/props.js b/uni_modules/uview-plus/components/u-notice-bar/props.js new file mode 100644 index 0000000..2dd91af --- /dev/null +++ b/uni_modules/uview-plus/components/u-notice-bar/props.js @@ -0,0 +1,76 @@ +import { defineMixin } from '../../libs/vue' +import defProps from '../../libs/config/props.js' +export const props = defineMixin({ + props: { + // 显示的内容,数组 + text: { + type: [Array, String], + default: () => defProps.noticeBar.text + }, + // 通告滚动模式,row-横向滚动,column-竖向滚动 + direction: { + type: String, + default: () => defProps.noticeBar.direction + }, + // direction = row时,是否使用步进形式滚动 + step: { + type: Boolean, + default: () => defProps.noticeBar.step + }, + // 是否显示左侧的音量图标 + icon: { + type: String, + default: () => defProps.noticeBar.icon + }, + // 通告模式,link-显示右箭头,closable-显示右侧关闭图标 + mode: { + type: String, + default: () => defProps.noticeBar.mode + }, + // 文字颜色,各图标也会使用文字颜色 + color: { + type: String, + default: () => defProps.noticeBar.color + }, + // 背景颜色 + bgColor: { + type: String, + default: () => defProps.noticeBar.bgColor + }, + // 水平滚动时的滚动速度,即每秒滚动多少px(px),这有利于控制文字无论多少时,都能有一个恒定的速度 + speed: { + type: [String, Number], + default: () => defProps.noticeBar.speed + }, + // 字体大小 + fontSize: { + type: [String, Number], + default: () => defProps.noticeBar.fontSize + }, + // 滚动一个周期的时间长,单位ms + duration: { + type: [String, Number], + default: () => defProps.noticeBar.duration + }, + // 是否禁止用手滑动切换 + // 目前HX2.6.11,只支持App 2.5.5+、H5 2.5.5+、支付宝小程序、字节跳动小程序 + disableTouch: { + type: Boolean, + default: () => defProps.noticeBar.disableTouch + }, + // 跳转的页面路径 + url: { + type: String, + default: () => defProps.noticeBar.url + }, + // 页面跳转的类型 + linkType: { + type: String, + default: () => defProps.noticeBar.linkType + }, + justifyContent: { + type: String, + default: () => defProps.noticeBar.justifyContent + }, + } +}) diff --git a/uni_modules/uview-plus/components/u-notice-bar/u-notice-bar.vue b/uni_modules/uview-plus/components/u-notice-bar/u-notice-bar.vue new file mode 100644 index 0000000..7fa4bfa --- /dev/null +++ b/uni_modules/uview-plus/components/u-notice-bar/u-notice-bar.vue @@ -0,0 +1,106 @@ + + + + diff --git a/uni_modules/uview-plus/components/u-notify/notify.js b/uni_modules/uview-plus/components/u-notify/notify.js new file mode 100644 index 0000000..1042d2a --- /dev/null +++ b/uni_modules/uview-plus/components/u-notify/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-plus/components/u-notify/props.js b/uni_modules/uview-plus/components/u-notify/props.js new file mode 100644 index 0000000..fdb01b4 --- /dev/null +++ b/uni_modules/uview-plus/components/u-notify/props.js @@ -0,0 +1,51 @@ +import { defineMixin } from '../../libs/vue' +import defProps from '../../libs/config/props.js' +export const props = defineMixin({ + props: { + // 到顶部的距离 + top: { + type: [String, Number], + default: () => defProps.notify.top + }, + // 是否展示组件 + // show: { + // type: Boolean, + // default: () => defProps.notify.show + // }, + // type主题,primary,success,warning,error + type: { + type: String, + default: () => defProps.notify.type + }, + // 字体颜色 + color: { + type: String, + default: () => defProps.notify.color + }, + // 背景颜色 + bgColor: { + type: String, + default: () => defProps.notify.bgColor + }, + // 展示的文字内容 + message: { + type: String, + default: () => defProps.notify.message + }, + // 展示时长,为0时不消失,单位ms + duration: { + type: [String, Number], + default: () => defProps.notify.duration + }, + // 字体大小 + fontSize: { + type: [String, Number], + default: () => defProps.notify.fontSize + }, + // 是否留出顶部安全距离(状态栏高度) + safeAreaInsetTop: { + type: Boolean, + default: () => defProps.notify.safeAreaInsetTop + } + } +}) diff --git a/uni_modules/uview-plus/components/u-notify/u-notify.vue b/uni_modules/uview-plus/components/u-notify/u-notify.vue new file mode 100644 index 0000000..160d6ba --- /dev/null +++ b/uni_modules/uview-plus/components/u-notify/u-notify.vue @@ -0,0 +1,217 @@ + + + + + diff --git a/uni_modules/uview-plus/components/u-number-box/numberBox.js b/uni_modules/uview-plus/components/u-number-box/numberBox.js new file mode 100644 index 0000000..424f0ca --- /dev/null +++ b/uni_modules/uview-plus/components/u-number-box/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-plus/components/u-number-box/props.js b/uni_modules/uview-plus/components/u-number-box/props.js new file mode 100644 index 0000000..1c5564e --- /dev/null +++ b/uni_modules/uview-plus/components/u-number-box/props.js @@ -0,0 +1,120 @@ +import { defineMixin } from '../../libs/vue' +import defProps from '../../libs/config/props.js' +export const props = defineMixin({ + props: { + // 步进器标识符,在change回调返回 + name: { + type: [String, Number], + default: () => defProps.numberBox.name + }, + // #ifdef VUE2 + // 用于双向绑定的值,初始化时设置设为默认min值(最小值) + value: { + type: [String, Number], + default: () => defProps.numberBox.value + }, + // #endif + // #ifdef VUE3 + // 用于双向绑定的值,初始化时设置设为默认min值(最小值) + modelValue: { + type: [String, Number], + default: () => defProps.numberBox.value + }, + // #endif + // 最小值 + min: { + type: [String, Number], + default: () => defProps.numberBox.min + }, + // 最大值 + max: { + type: [String, Number], + default: () => defProps.numberBox.max + }, + // 加减的步长,可为小数 + step: { + type: [String, Number], + default: () => defProps.numberBox.step + }, + // 是否只允许输入整数 + integer: { + type: Boolean, + default: () => defProps.numberBox.integer + }, + // 是否禁用,包括输入框,加减按钮 + disabled: { + type: Boolean, + default: () => defProps.numberBox.disabled + }, + // 是否禁用输入框 + disabledInput: { + type: Boolean, + default: () => defProps.numberBox.disabledInput + }, + // 是否开启异步变更,开启后需要手动控制输入值 + asyncChange: { + type: Boolean, + default: () => defProps.numberBox.asyncChange + }, + // 输入框宽度,单位为px + inputWidth: { + type: [String, Number], + default: () => defProps.numberBox.inputWidth + }, + // 是否显示减少按钮 + showMinus: { + type: Boolean, + default: () => defProps.numberBox.showMinus + }, + // 是否显示增加按钮 + showPlus: { + type: Boolean, + default: () => defProps.numberBox.showPlus + }, + // 显示的小数位数 + decimalLength: { + type: [String, Number, null], + default: () => defProps.numberBox.decimalLength + }, + // 是否开启长按加减手势 + longPress: { + type: Boolean, + default: () => defProps.numberBox.longPress + }, + // 输入框文字和加减按钮图标的颜色 + color: { + type: String, + default: () => defProps.numberBox.color + }, + // 按钮大小,宽高等于此值,单位px,输入框高度和此值保持一致 + buttonSize: { + type: [String, Number], + default: () => defProps.numberBox.buttonSize + }, + // 输入框和按钮的背景颜色 + bgColor: { + type: String, + default: () => defProps.numberBox.bgColor + }, + // 指定光标于键盘的距离,避免键盘遮挡输入框,单位px + cursorSpacing: { + type: [String, Number], + default: () => defProps.numberBox.cursorSpacing + }, + // 是否禁用增加按钮 + disablePlus: { + type: Boolean, + default: () => defProps.numberBox.disablePlus + }, + // 是否禁用减少按钮 + disableMinus: { + type: Boolean, + default: () => defProps.numberBox.disableMinus + }, + // 加减按钮图标的样式 + iconStyle: { + type: [Object, String], + default: () => defProps.numberBox.iconStyle + } + } +}) diff --git a/uni_modules/uview-plus/components/u-number-box/u-number-box.vue b/uni_modules/uview-plus/components/u-number-box/u-number-box.vue new file mode 100644 index 0000000..c0afaf9 --- /dev/null +++ b/uni_modules/uview-plus/components/u-number-box/u-number-box.vue @@ -0,0 +1,466 @@ + + + + + diff --git a/uni_modules/uview-plus/components/u-number-keyboard/numberKeyboard.js b/uni_modules/uview-plus/components/u-number-keyboard/numberKeyboard.js new file mode 100644 index 0000000..7b45065 --- /dev/null +++ b/uni_modules/uview-plus/components/u-number-keyboard/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-plus/components/u-number-keyboard/props.js b/uni_modules/uview-plus/components/u-number-keyboard/props.js new file mode 100644 index 0000000..d853858 --- /dev/null +++ b/uni_modules/uview-plus/components/u-number-keyboard/props.js @@ -0,0 +1,21 @@ +import { defineMixin } from '../../libs/vue' +import defProps from '../../libs/config/props.js' +export const props = defineMixin({ + props: { + // 键盘的类型,number-数字键盘,card-身份证键盘 + mode: { + type: String, + default: () => defProps.numberKeyboard.value + }, + // 是否显示键盘的"."符号 + dotDisabled: { + type: Boolean, + default: () => defProps.numberKeyboard.dotDisabled + }, + // 是否打乱键盘按键的顺序 + random: { + type: Boolean, + default: () => defProps.numberKeyboard.random + } + } +}) diff --git a/uni_modules/uview-plus/components/u-number-keyboard/u-number-keyboard.vue b/uni_modules/uview-plus/components/u-number-keyboard/u-number-keyboard.vue new file mode 100644 index 0000000..2013bc7 --- /dev/null +++ b/uni_modules/uview-plus/components/u-number-keyboard/u-number-keyboard.vue @@ -0,0 +1,199 @@ + + + + + diff --git a/uni_modules/uview-plus/components/u-overlay/overlay.js b/uni_modules/uview-plus/components/u-overlay/overlay.js new file mode 100644 index 0000000..c26d068 --- /dev/null +++ b/uni_modules/uview-plus/components/u-overlay/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-plus/components/u-overlay/props.js b/uni_modules/uview-plus/components/u-overlay/props.js new file mode 100644 index 0000000..39f16f3 --- /dev/null +++ b/uni_modules/uview-plus/components/u-overlay/props.js @@ -0,0 +1,26 @@ +import { defineMixin } from '../../libs/vue' +import defProps from '../../libs/config/props.js' +export const props = defineMixin({ + props: { + // 是否显示遮罩 + show: { + type: Boolean, + default: () => defProps.overlay.show + }, + // 层级z-index + zIndex: { + type: [String, Number], + default: () => defProps.overlay.zIndex + }, + // 遮罩的过渡时间,单位为ms + duration: { + type: [String, Number], + default: () => defProps.overlay.duration + }, + // 不透明度值,当做rgba的第四个参数 + opacity: { + type: [String, Number], + default: () => defProps.overlay.opacity + } + } +}) diff --git a/uni_modules/uview-plus/components/u-overlay/u-overlay.vue b/uni_modules/uview-plus/components/u-overlay/u-overlay.vue new file mode 100644 index 0000000..71e4342 --- /dev/null +++ b/uni_modules/uview-plus/components/u-overlay/u-overlay.vue @@ -0,0 +1,72 @@ + + + + + diff --git a/uni_modules/uview-plus/components/u-parse/node/node.vue b/uni_modules/uview-plus/components/u-parse/node/node.vue new file mode 100644 index 0000000..a6a4fe2 --- /dev/null +++ b/uni_modules/uview-plus/components/u-parse/node/node.vue @@ -0,0 +1,584 @@ +