From 4eeda46c42b9ba865349108d90d77dde53bcaf86 Mon Sep 17 00:00:00 2001 From: ltlzx <942659938@qq.com> Date: Wed, 8 Jun 2022 14:30:38 +0800 Subject: [PATCH] =?UTF-8?q?=E7=AC=AC=E4=B8=80=E6=AC=A1=E6=8F=90=E4=BA=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 16 + App.vue | 18 + common/common.scss | 92 ++ index.html | 20 + main.js | 21 + manifest.json | 72 + pages.json | 113 ++ pages/account/favorites.vue | 54 + pages/account/index.vue | 280 ++++ pages/account/message.vue | 28 + pages/account/myProfile.vue | 96 ++ pages/account/settings.vue | 84 ++ pages/account/wishlist.vue | 50 + pages/category/index.vue | 177 +++ pages/index/index.vue | 577 ++++++++ pages/index/search.vue | 163 +++ static/img/About CHIC.png | Bin 0 -> 3222 bytes static/img/Account.png | Bin 0 -> 3326 bytes static/img/Account1.png | Bin 0 -> 1672 bytes static/img/Attention CHIC.png | Bin 0 -> 1607 bytes static/img/Cart.png | Bin 0 -> 4589 bytes static/img/Category.png | Bin 0 -> 4736 bytes static/img/Category1.png | Bin 0 -> 2883 bytes static/img/Help Center.png | Bin 0 -> 2593 bytes static/img/My Address.png | Bin 0 -> 2620 bytes static/img/My Review.png | Bin 0 -> 1071 bytes static/img/Processing.png | Bin 0 -> 1074 bytes static/img/Return Policy.png | Bin 0 -> 3297 bytes static/img/Returns.png | Bin 0 -> 1354 bytes static/img/Setting.png | Bin 0 -> 2098 bytes static/img/Shipped.png | Bin 0 -> 1708 bytes static/img/cart1.png | Bin 0 -> 2665 bytes static/img/cart2.png | Bin 0 -> 1330 bytes static/img/delete.png | Bin 0 -> 1285 bytes static/img/favorites.png | Bin 0 -> 2170 bytes static/img/gantan.png | Bin 0 -> 1325 bytes static/img/home.png | Bin 0 -> 3894 bytes static/img/home1.png | Bin 0 -> 2327 bytes static/img/index_discount.png | Bin 0 -> 90079 bytes static/img/left.png | Bin 0 -> 1250 bytes static/img/like.png | Bin 0 -> 3081 bytes static/img/logo.png | Bin 0 -> 4023 bytes static/img/mine_banner.png | Bin 0 -> 338401 bytes static/img/msg.png | Bin 0 -> 1972 bytes static/img/right.png | Bin 0 -> 781 bytes static/img/right1.png | Bin 0 -> 853 bytes static/img/seach.png | Bin 0 -> 2174 bytes static/img/select.png | Bin 0 -> 1974 bytes static/img/select1.png | Bin 0 -> 2146 bytes static/img/select2.png | Bin 0 -> 2630 bytes static/img/shop_cart.png | Bin 0 -> 2455 bytes static/img/tabbar_img.png | Bin 0 -> 10648 bytes static/img/unpaid.png | Bin 0 -> 1147 bytes uni.scss | 76 ++ .../custom-waterfalls-flow/changelog.md | 17 + .../custom-waterfalls-flow.vue | 323 +++++ .../custom-waterfalls-flow/package.json | 81 ++ uni_modules/custom-waterfalls-flow/readme.md | 445 +++++++ uni_modules/uni-badge/changelog.md | 29 + .../components/uni-badge/uni-badge.vue | 268 ++++ uni_modules/uni-badge/package.json | 88 ++ uni_modules/uni-badge/readme.md | 10 + uni_modules/uni-calendar/changelog.md | 16 + .../components/uni-calendar/calendar.js | 546 ++++++++ .../components/uni-calendar/i18n/en.json | 12 + .../components/uni-calendar/i18n/index.js | 8 + .../components/uni-calendar/i18n/zh-Hans.json | 12 + .../components/uni-calendar/i18n/zh-Hant.json | 12 + .../uni-calendar/uni-calendar-item.vue | 181 +++ .../components/uni-calendar/uni-calendar.vue | 554 ++++++++ .../components/uni-calendar/util.js | 354 +++++ uni_modules/uni-calendar/package.json | 88 ++ uni_modules/uni-calendar/readme.md | 103 ++ uni_modules/uni-card/changelog.md | 26 + .../uni-card/components/uni-card/uni-card.vue | 270 ++++ uni_modules/uni-card/package.json | 90 ++ uni_modules/uni-card/readme.md | 12 + uni_modules/uni-collapse/changelog.md | 36 + .../uni-collapse-item/uni-collapse-item.vue | 402 ++++++ .../components/uni-collapse/uni-collapse.vue | 147 +++ uni_modules/uni-collapse/package.json | 89 ++ uni_modules/uni-collapse/readme.md | 12 + uni_modules/uni-combox/changelog.md | 15 + .../components/uni-combox/uni-combox.vue | 275 ++++ uni_modules/uni-combox/package.json | 90 ++ uni_modules/uni-combox/readme.md | 11 + uni_modules/uni-countdown/changelog.md | 24 + .../components/uni-countdown/i18n/en.json | 6 + .../components/uni-countdown/i18n/index.js | 8 + .../uni-countdown/i18n/zh-Hans.json | 6 + .../uni-countdown/i18n/zh-Hant.json | 6 + .../uni-countdown/uni-countdown.vue | 271 ++++ uni_modules/uni-countdown/package.json | 86 ++ uni_modules/uni-countdown/readme.md | 10 + uni_modules/uni-data-checkbox/changelog.md | 41 + .../uni-data-checkbox/uni-data-checkbox.vue | 817 ++++++++++++ uni_modules/uni-data-checkbox/package.json | 87 ++ uni_modules/uni-data-checkbox/readme.md | 18 + uni_modules/uni-data-picker/changelog.md | 58 + .../components/uni-data-picker/keypress.js | 45 + .../uni-data-picker/uni-data-picker.vue | 539 ++++++++ .../uni-data-pickerview/uni-data-picker.js | 563 ++++++++ .../uni-data-pickerview.vue | 333 +++++ uni_modules/uni-data-picker/package.json | 92 ++ uni_modules/uni-data-picker/readme.md | 22 + uni_modules/uni-dateformat/changelog.md | 10 + .../components/uni-dateformat/date-format.js | 200 +++ .../uni-dateformat/uni-dateformat.vue | 88 ++ uni_modules/uni-dateformat/package.json | 88 ++ uni_modules/uni-dateformat/readme.md | 11 + uni_modules/uni-datetime-picker/changelog.md | 89 ++ .../uni-datetime-picker/calendar-item.vue | 185 +++ .../uni-datetime-picker/calendar.vue | 898 +++++++++++++ .../uni-datetime-picker/i18n/en.json | 19 + .../uni-datetime-picker/i18n/index.js | 8 + .../uni-datetime-picker/i18n/zh-Hans.json | 19 + .../uni-datetime-picker/i18n/zh-Hant.json | 19 + .../uni-datetime-picker/keypress.js | 45 + .../uni-datetime-picker/time-picker.vue | 927 +++++++++++++ .../uni-datetime-picker.vue | 997 ++++++++++++++ .../components/uni-datetime-picker/util.js | 410 ++++++ uni_modules/uni-datetime-picker/package.json | 90 ++ uni_modules/uni-datetime-picker/readme.md | 21 + uni_modules/uni-drawer/changelog.md | 13 + .../components/uni-drawer/keypress.js | 45 + .../components/uni-drawer/uni-drawer.vue | 183 +++ uni_modules/uni-drawer/package.json | 87 ++ uni_modules/uni-drawer/readme.md | 10 + uni_modules/uni-easyinput/changelog.md | 37 + .../components/uni-easyinput/common.js | 56 + .../uni-easyinput/uni-easyinput.vue | 461 +++++++ uni_modules/uni-easyinput/package.json | 90 ++ uni_modules/uni-easyinput/readme.md | 11 + uni_modules/uni-fab/changelog.md | 17 + .../uni-fab/components/uni-fab/uni-fab.vue | 475 +++++++ uni_modules/uni-fab/package.json | 87 ++ uni_modules/uni-fab/readme.md | 9 + uni_modules/uni-fav/changelog.md | 19 + .../uni-fav/components/uni-fav/i18n/en.json | 4 + .../uni-fav/components/uni-fav/i18n/index.js | 8 + .../components/uni-fav/i18n/zh-Hans.json | 4 + .../components/uni-fav/i18n/zh-Hant.json | 4 + .../uni-fav/components/uni-fav/uni-fav.vue | 161 +++ uni_modules/uni-fav/package.json | 89 ++ uni_modules/uni-fav/readme.md | 10 + uni_modules/uni-file-picker/changelog.md | 61 + .../uni-file-picker/choose-and-upload-file.js | 224 ++++ .../uni-file-picker/uni-file-picker.vue | 650 +++++++++ .../uni-file-picker/upload-file.vue | 325 +++++ .../uni-file-picker/upload-image.vue | 292 ++++ .../components/uni-file-picker/utils.js | 109 ++ uni_modules/uni-file-picker/package.json | 86 ++ uni_modules/uni-file-picker/readme.md | 11 + uni_modules/uni-forms/changelog.md | 60 + .../uni-forms-item/uni-forms-item.vue | 509 +++++++ .../components/uni-forms/uni-forms.vue | 472 +++++++ .../components/uni-forms/validate.js | 486 +++++++ uni_modules/uni-forms/package.json | 90 ++ uni_modules/uni-forms/readme.md | 23 + uni_modules/uni-goods-nav/changelog.md | 18 + .../components/uni-goods-nav/i18n/en.json | 6 + .../components/uni-goods-nav/i18n/index.js | 8 + .../uni-goods-nav/i18n/zh-Hans.json | 6 + .../uni-goods-nav/i18n/zh-Hant.json | 6 + .../uni-goods-nav/uni-goods-nav.vue | 229 ++++ uni_modules/uni-goods-nav/package.json | 88 ++ uni_modules/uni-goods-nav/readme.md | 10 + uni_modules/uni-grid/changelog.md | 13 + .../uni-grid-item/uni-grid-item.vue | 127 ++ .../uni-grid/components/uni-grid/uni-grid.vue | 142 ++ uni_modules/uni-grid/package.json | 86 ++ uni_modules/uni-grid/readme.md | 11 + uni_modules/uni-group/changelog.md | 16 + .../components/uni-group/uni-group.vue | 134 ++ uni_modules/uni-group/package.json | 87 ++ uni_modules/uni-group/readme.md | 9 + uni_modules/uni-icons/changelog.md | 22 + .../uni-icons/components/uni-icons/icons.js | 1169 +++++++++++++++++ .../components/uni-icons/uni-icons.vue | 96 ++ .../components/uni-icons/uniicons.css | 663 ++++++++++ .../components/uni-icons/uniicons.ttf | Bin 0 -> 35760 bytes uni_modules/uni-icons/package.json | 86 ++ uni_modules/uni-icons/readme.md | 8 + uni_modules/uni-indexed-list/changelog.md | 17 + .../uni-indexed-list-item.vue | 144 ++ .../uni-indexed-list/uni-indexed-list.vue | 367 ++++++ uni_modules/uni-indexed-list/package.json | 89 ++ uni_modules/uni-indexed-list/readme.md | 11 + uni_modules/uni-link/changelog.md | 17 + .../uni-link/components/uni-link/uni-link.vue | 128 ++ uni_modules/uni-link/package.json | 87 ++ uni_modules/uni-link/readme.md | 11 + uni_modules/uni-list/changelog.md | 20 + .../components/uni-list-ad/uni-list-ad.vue | 107 ++ .../uni-list-chat/uni-list-chat.scss | 58 + .../uni-list-chat/uni-list-chat.vue | 538 ++++++++ .../uni-list-item/uni-list-item.vue | 454 +++++++ .../uni-list/components/uni-list/uni-list.vue | 108 ++ .../components/uni-list/uni-refresh.vue | 65 + .../components/uni-list/uni-refresh.wxs | 87 ++ uni_modules/uni-list/package.json | 91 ++ uni_modules/uni-list/readme.md | 346 +++++ uni_modules/uni-load-more/changelog.md | 19 + .../components/uni-load-more/i18n/en.json | 5 + .../components/uni-load-more/i18n/index.js | 8 + .../uni-load-more/i18n/zh-Hans.json | 5 + .../uni-load-more/i18n/zh-Hant.json | 5 + .../uni-load-more/uni-load-more.vue | 399 ++++++ uni_modules/uni-load-more/package.json | 86 ++ uni_modules/uni-load-more/readme.md | 14 + uni_modules/uni-nav-bar/changelog.md | 39 + .../components/uni-nav-bar/uni-nav-bar.vue | 348 +++++ .../components/uni-nav-bar/uni-status-bar.vue | 27 + uni_modules/uni-nav-bar/package.json | 89 ++ uni_modules/uni-nav-bar/readme.md | 15 + uni_modules/uni-notice-bar/changelog.md | 16 + .../uni-notice-bar/uni-notice-bar.vue | 395 ++++++ uni_modules/uni-notice-bar/package.json | 90 ++ uni_modules/uni-notice-bar/readme.md | 13 + uni_modules/uni-number-box/changelog.md | 25 + .../uni-number-box/uni-number-box.vue | 220 ++++ uni_modules/uni-number-box/package.json | 85 ++ uni_modules/uni-number-box/readme.md | 13 + uni_modules/uni-pagination/changelog.md | 20 + .../components/uni-pagination/i18n/en.json | 4 + .../components/uni-pagination/i18n/es.json | 4 + .../components/uni-pagination/i18n/fr.json | 4 + .../components/uni-pagination/i18n/index.js | 12 + .../uni-pagination/i18n/zh-Hans.json | 4 + .../uni-pagination/i18n/zh-Hant.json | 4 + .../uni-pagination/uni-pagination.vue | 409 ++++++ uni_modules/uni-pagination/package.json | 86 ++ uni_modules/uni-pagination/readme.md | 13 + uni_modules/uni-popup/changelog.md | 60 + .../components/uni-popup-dialog/keypress.js | 45 + .../uni-popup-dialog/uni-popup-dialog.vue | 271 ++++ .../uni-popup-message/uni-popup-message.vue | 143 ++ .../uni-popup-share/uni-popup-share.vue | 187 +++ .../components/uni-popup/i18n/en.json | 7 + .../components/uni-popup/i18n/index.js | 8 + .../components/uni-popup/i18n/zh-Hans.json | 7 + .../components/uni-popup/i18n/zh-Hant.json | 7 + .../components/uni-popup/keypress.js | 45 + .../uni-popup/components/uni-popup/popup.js | 26 + .../components/uni-popup/uni-popup.vue | 474 +++++++ uni_modules/uni-popup/package.json | 90 ++ uni_modules/uni-popup/readme.md | 17 + uni_modules/uni-rate/changelog.md | 25 + .../uni-rate/components/uni-rate/uni-rate.vue | 361 +++++ uni_modules/uni-rate/package.json | 88 ++ uni_modules/uni-rate/readme.md | 12 + uni_modules/uni-row/changelog.md | 10 + .../uni-row/components/uni-col/uni-col.vue | 317 +++++ .../uni-row/components/uni-row/uni-row.vue | 190 +++ uni_modules/uni-row/package.json | 87 ++ uni_modules/uni-row/readme.md | 10 + uni_modules/uni-scss/changelog.md | 8 + uni_modules/uni-scss/index.scss | 1 + uni_modules/uni-scss/package.json | 82 ++ uni_modules/uni-scss/readme.md | 4 + uni_modules/uni-scss/styles/index.scss | 7 + .../uni-scss/styles/setting/_border.scss | 3 + .../uni-scss/styles/setting/_color.scss | 66 + .../uni-scss/styles/setting/_radius.scss | 55 + .../uni-scss/styles/setting/_space.scss | 56 + .../uni-scss/styles/setting/_styles.scss | 167 +++ .../uni-scss/styles/setting/_text.scss | 24 + .../uni-scss/styles/setting/_variables.scss | 146 ++ .../uni-scss/styles/tools/functions.scss | 19 + uni_modules/uni-scss/theme.scss | 31 + uni_modules/uni-scss/variables.scss | 62 + uni_modules/uni-search-bar/changelog.md | 33 + .../components/uni-search-bar/i18n/en.json | 4 + .../components/uni-search-bar/i18n/index.js | 8 + .../uni-search-bar/i18n/zh-Hans.json | 4 + .../uni-search-bar/i18n/zh-Hant.json | 4 + .../uni-search-bar/uni-search-bar.vue | 298 +++++ uni_modules/uni-search-bar/package.json | 89 ++ uni_modules/uni-search-bar/readme.md | 14 + .../uni-segmented-control/changelog.md | 9 + .../uni-segmented-control.vue | 145 ++ .../uni-segmented-control/package.json | 87 ++ uni_modules/uni-segmented-control/readme.md | 13 + uni_modules/uni-steps/changelog.md | 16 + .../components/uni-steps/uni-steps.vue | 269 ++++ uni_modules/uni-steps/package.json | 89 ++ uni_modules/uni-steps/readme.md | 13 + uni_modules/uni-swipe-action/changelog.md | 39 + .../uni-swipe-action-item/bindingx.js | 302 +++++ .../components/uni-swipe-action-item/isPC.js | 12 + .../uni-swipe-action-item/mpalipay.js | 193 +++ .../uni-swipe-action-item/mpother.js | 257 ++++ .../components/uni-swipe-action-item/mpwxs.js | 83 ++ .../uni-swipe-action-item/render.js | 270 ++++ .../uni-swipe-action-item.vue | 344 +++++ .../components/uni-swipe-action-item/wx.wxs | 341 +++++ .../uni-swipe-action/uni-swipe-action.vue | 60 + uni_modules/uni-swipe-action/package.json | 87 ++ uni_modules/uni-swipe-action/readme.md | 11 + uni_modules/uni-swiper-dot/changelog.md | 12 + .../uni-swiper-dot/uni-swiper-dot.vue | 218 +++ uni_modules/uni-swiper-dot/package.json | 87 ++ uni_modules/uni-swiper-dot/readme.md | 11 + uni_modules/uni-table/changelog.md | 21 + .../components/uni-table/uni-table.vue | 455 +++++++ .../components/uni-tbody/uni-tbody.vue | 29 + .../uni-table/components/uni-td/uni-td.vue | 90 ++ .../components/uni-th/filter-dropdown.vue | 503 +++++++ .../uni-table/components/uni-th/uni-th.vue | 251 ++++ .../components/uni-thead/uni-thead.vue | 129 ++ .../components/uni-tr/table-checkbox.vue | 179 +++ .../uni-table/components/uni-tr/uni-tr.vue | 171 +++ uni_modules/uni-table/package.json | 86 ++ uni_modules/uni-table/readme.md | 13 + uni_modules/uni-tag/changelog.md | 21 + .../uni-tag/components/uni-tag/uni-tag.vue | 252 ++++ uni_modules/uni-tag/package.json | 87 ++ uni_modules/uni-tag/readme.md | 13 + uni_modules/uni-title/changelog.md | 10 + .../components/uni-title/uni-title.vue | 171 +++ uni_modules/uni-title/package.json | 88 ++ uni_modules/uni-title/readme.md | 14 + uni_modules/uni-transition/changelog.md | 20 + .../uni-transition/createAnimation.js | 128 ++ .../uni-transition/uni-transition.vue | 277 ++++ uni_modules/uni-transition/package.json | 87 ++ uni_modules/uni-transition/readme.md | 11 + uni_modules/uni-ui/changelog.md | 391 ++++++ .../uni-ui/components/uni-ui/uni-ui.vue | 7 + uni_modules/uni-ui/package.json | 128 ++ uni_modules/uni-ui/readme.md | 248 ++++ 331 files changed, 37774 insertions(+) create mode 100644 .gitignore create mode 100644 App.vue create mode 100644 common/common.scss create mode 100644 index.html create mode 100644 main.js create mode 100644 manifest.json create mode 100644 pages.json create mode 100644 pages/account/favorites.vue create mode 100644 pages/account/index.vue create mode 100644 pages/account/message.vue create mode 100644 pages/account/myProfile.vue create mode 100644 pages/account/settings.vue create mode 100644 pages/account/wishlist.vue create mode 100644 pages/category/index.vue create mode 100644 pages/index/index.vue create mode 100644 pages/index/search.vue create mode 100644 static/img/About CHIC.png create mode 100644 static/img/Account.png create mode 100644 static/img/Account1.png create mode 100644 static/img/Attention CHIC.png create mode 100644 static/img/Cart.png create mode 100644 static/img/Category.png create mode 100644 static/img/Category1.png create mode 100644 static/img/Help Center.png create mode 100644 static/img/My Address.png create mode 100644 static/img/My Review.png create mode 100644 static/img/Processing.png create mode 100644 static/img/Return Policy.png create mode 100644 static/img/Returns.png create mode 100644 static/img/Setting.png create mode 100644 static/img/Shipped.png create mode 100644 static/img/cart1.png create mode 100644 static/img/cart2.png create mode 100644 static/img/delete.png create mode 100644 static/img/favorites.png create mode 100644 static/img/gantan.png create mode 100644 static/img/home.png create mode 100644 static/img/home1.png create mode 100644 static/img/index_discount.png create mode 100644 static/img/left.png create mode 100644 static/img/like.png create mode 100644 static/img/logo.png create mode 100644 static/img/mine_banner.png create mode 100644 static/img/msg.png create mode 100644 static/img/right.png create mode 100644 static/img/right1.png create mode 100644 static/img/seach.png create mode 100644 static/img/select.png create mode 100644 static/img/select1.png create mode 100644 static/img/select2.png create mode 100644 static/img/shop_cart.png create mode 100644 static/img/tabbar_img.png create mode 100644 static/img/unpaid.png create mode 100644 uni.scss create mode 100644 uni_modules/custom-waterfalls-flow/changelog.md create mode 100644 uni_modules/custom-waterfalls-flow/components/custom-waterfalls-flow/custom-waterfalls-flow.vue create mode 100644 uni_modules/custom-waterfalls-flow/package.json create mode 100644 uni_modules/custom-waterfalls-flow/readme.md create mode 100644 uni_modules/uni-badge/changelog.md create mode 100644 uni_modules/uni-badge/components/uni-badge/uni-badge.vue create mode 100644 uni_modules/uni-badge/package.json create mode 100644 uni_modules/uni-badge/readme.md create mode 100644 uni_modules/uni-calendar/changelog.md create mode 100644 uni_modules/uni-calendar/components/uni-calendar/calendar.js create mode 100644 uni_modules/uni-calendar/components/uni-calendar/i18n/en.json create mode 100644 uni_modules/uni-calendar/components/uni-calendar/i18n/index.js create mode 100644 uni_modules/uni-calendar/components/uni-calendar/i18n/zh-Hans.json create mode 100644 uni_modules/uni-calendar/components/uni-calendar/i18n/zh-Hant.json create mode 100644 uni_modules/uni-calendar/components/uni-calendar/uni-calendar-item.vue create mode 100644 uni_modules/uni-calendar/components/uni-calendar/uni-calendar.vue create mode 100644 uni_modules/uni-calendar/components/uni-calendar/util.js create mode 100644 uni_modules/uni-calendar/package.json create mode 100644 uni_modules/uni-calendar/readme.md create mode 100644 uni_modules/uni-card/changelog.md create mode 100644 uni_modules/uni-card/components/uni-card/uni-card.vue create mode 100644 uni_modules/uni-card/package.json create mode 100644 uni_modules/uni-card/readme.md create mode 100644 uni_modules/uni-collapse/changelog.md create mode 100644 uni_modules/uni-collapse/components/uni-collapse-item/uni-collapse-item.vue create mode 100644 uni_modules/uni-collapse/components/uni-collapse/uni-collapse.vue create mode 100644 uni_modules/uni-collapse/package.json create mode 100644 uni_modules/uni-collapse/readme.md create mode 100644 uni_modules/uni-combox/changelog.md create mode 100644 uni_modules/uni-combox/components/uni-combox/uni-combox.vue create mode 100644 uni_modules/uni-combox/package.json create mode 100644 uni_modules/uni-combox/readme.md create mode 100644 uni_modules/uni-countdown/changelog.md create mode 100644 uni_modules/uni-countdown/components/uni-countdown/i18n/en.json create mode 100644 uni_modules/uni-countdown/components/uni-countdown/i18n/index.js create mode 100644 uni_modules/uni-countdown/components/uni-countdown/i18n/zh-Hans.json create mode 100644 uni_modules/uni-countdown/components/uni-countdown/i18n/zh-Hant.json create mode 100644 uni_modules/uni-countdown/components/uni-countdown/uni-countdown.vue create mode 100644 uni_modules/uni-countdown/package.json create mode 100644 uni_modules/uni-countdown/readme.md create mode 100644 uni_modules/uni-data-checkbox/changelog.md create mode 100644 uni_modules/uni-data-checkbox/components/uni-data-checkbox/uni-data-checkbox.vue create mode 100644 uni_modules/uni-data-checkbox/package.json create mode 100644 uni_modules/uni-data-checkbox/readme.md create mode 100644 uni_modules/uni-data-picker/changelog.md create mode 100644 uni_modules/uni-data-picker/components/uni-data-picker/keypress.js create mode 100644 uni_modules/uni-data-picker/components/uni-data-picker/uni-data-picker.vue create mode 100644 uni_modules/uni-data-picker/components/uni-data-pickerview/uni-data-picker.js create mode 100644 uni_modules/uni-data-picker/components/uni-data-pickerview/uni-data-pickerview.vue create mode 100644 uni_modules/uni-data-picker/package.json create mode 100644 uni_modules/uni-data-picker/readme.md create mode 100644 uni_modules/uni-dateformat/changelog.md create mode 100644 uni_modules/uni-dateformat/components/uni-dateformat/date-format.js create mode 100644 uni_modules/uni-dateformat/components/uni-dateformat/uni-dateformat.vue create mode 100644 uni_modules/uni-dateformat/package.json create mode 100644 uni_modules/uni-dateformat/readme.md create mode 100644 uni_modules/uni-datetime-picker/changelog.md create mode 100644 uni_modules/uni-datetime-picker/components/uni-datetime-picker/calendar-item.vue create mode 100644 uni_modules/uni-datetime-picker/components/uni-datetime-picker/calendar.vue create mode 100644 uni_modules/uni-datetime-picker/components/uni-datetime-picker/i18n/en.json create mode 100644 uni_modules/uni-datetime-picker/components/uni-datetime-picker/i18n/index.js create mode 100644 uni_modules/uni-datetime-picker/components/uni-datetime-picker/i18n/zh-Hans.json create mode 100644 uni_modules/uni-datetime-picker/components/uni-datetime-picker/i18n/zh-Hant.json create mode 100644 uni_modules/uni-datetime-picker/components/uni-datetime-picker/keypress.js create mode 100644 uni_modules/uni-datetime-picker/components/uni-datetime-picker/time-picker.vue create mode 100644 uni_modules/uni-datetime-picker/components/uni-datetime-picker/uni-datetime-picker.vue create mode 100644 uni_modules/uni-datetime-picker/components/uni-datetime-picker/util.js create mode 100644 uni_modules/uni-datetime-picker/package.json create mode 100644 uni_modules/uni-datetime-picker/readme.md create mode 100644 uni_modules/uni-drawer/changelog.md create mode 100644 uni_modules/uni-drawer/components/uni-drawer/keypress.js create mode 100644 uni_modules/uni-drawer/components/uni-drawer/uni-drawer.vue create mode 100644 uni_modules/uni-drawer/package.json create mode 100644 uni_modules/uni-drawer/readme.md create mode 100644 uni_modules/uni-easyinput/changelog.md create mode 100644 uni_modules/uni-easyinput/components/uni-easyinput/common.js create mode 100644 uni_modules/uni-easyinput/components/uni-easyinput/uni-easyinput.vue create mode 100644 uni_modules/uni-easyinput/package.json create mode 100644 uni_modules/uni-easyinput/readme.md create mode 100644 uni_modules/uni-fab/changelog.md create mode 100644 uni_modules/uni-fab/components/uni-fab/uni-fab.vue create mode 100644 uni_modules/uni-fab/package.json create mode 100644 uni_modules/uni-fab/readme.md create mode 100644 uni_modules/uni-fav/changelog.md create mode 100644 uni_modules/uni-fav/components/uni-fav/i18n/en.json create mode 100644 uni_modules/uni-fav/components/uni-fav/i18n/index.js create mode 100644 uni_modules/uni-fav/components/uni-fav/i18n/zh-Hans.json create mode 100644 uni_modules/uni-fav/components/uni-fav/i18n/zh-Hant.json create mode 100644 uni_modules/uni-fav/components/uni-fav/uni-fav.vue create mode 100644 uni_modules/uni-fav/package.json create mode 100644 uni_modules/uni-fav/readme.md create mode 100644 uni_modules/uni-file-picker/changelog.md create mode 100644 uni_modules/uni-file-picker/components/uni-file-picker/choose-and-upload-file.js create mode 100644 uni_modules/uni-file-picker/components/uni-file-picker/uni-file-picker.vue create mode 100644 uni_modules/uni-file-picker/components/uni-file-picker/upload-file.vue create mode 100644 uni_modules/uni-file-picker/components/uni-file-picker/upload-image.vue create mode 100644 uni_modules/uni-file-picker/components/uni-file-picker/utils.js create mode 100644 uni_modules/uni-file-picker/package.json create mode 100644 uni_modules/uni-file-picker/readme.md create mode 100644 uni_modules/uni-forms/changelog.md create mode 100644 uni_modules/uni-forms/components/uni-forms-item/uni-forms-item.vue create mode 100644 uni_modules/uni-forms/components/uni-forms/uni-forms.vue create mode 100644 uni_modules/uni-forms/components/uni-forms/validate.js create mode 100644 uni_modules/uni-forms/package.json create mode 100644 uni_modules/uni-forms/readme.md create mode 100644 uni_modules/uni-goods-nav/changelog.md create mode 100644 uni_modules/uni-goods-nav/components/uni-goods-nav/i18n/en.json create mode 100644 uni_modules/uni-goods-nav/components/uni-goods-nav/i18n/index.js create mode 100644 uni_modules/uni-goods-nav/components/uni-goods-nav/i18n/zh-Hans.json create mode 100644 uni_modules/uni-goods-nav/components/uni-goods-nav/i18n/zh-Hant.json create mode 100644 uni_modules/uni-goods-nav/components/uni-goods-nav/uni-goods-nav.vue create mode 100644 uni_modules/uni-goods-nav/package.json create mode 100644 uni_modules/uni-goods-nav/readme.md create mode 100644 uni_modules/uni-grid/changelog.md create mode 100644 uni_modules/uni-grid/components/uni-grid-item/uni-grid-item.vue create mode 100644 uni_modules/uni-grid/components/uni-grid/uni-grid.vue create mode 100644 uni_modules/uni-grid/package.json create mode 100644 uni_modules/uni-grid/readme.md create mode 100644 uni_modules/uni-group/changelog.md create mode 100644 uni_modules/uni-group/components/uni-group/uni-group.vue create mode 100644 uni_modules/uni-group/package.json create mode 100644 uni_modules/uni-group/readme.md create mode 100644 uni_modules/uni-icons/changelog.md create mode 100644 uni_modules/uni-icons/components/uni-icons/icons.js create mode 100644 uni_modules/uni-icons/components/uni-icons/uni-icons.vue create mode 100644 uni_modules/uni-icons/components/uni-icons/uniicons.css create mode 100644 uni_modules/uni-icons/components/uni-icons/uniicons.ttf create mode 100644 uni_modules/uni-icons/package.json create mode 100644 uni_modules/uni-icons/readme.md create mode 100644 uni_modules/uni-indexed-list/changelog.md create mode 100644 uni_modules/uni-indexed-list/components/uni-indexed-list/uni-indexed-list-item.vue create mode 100644 uni_modules/uni-indexed-list/components/uni-indexed-list/uni-indexed-list.vue create mode 100644 uni_modules/uni-indexed-list/package.json create mode 100644 uni_modules/uni-indexed-list/readme.md create mode 100644 uni_modules/uni-link/changelog.md create mode 100644 uni_modules/uni-link/components/uni-link/uni-link.vue create mode 100644 uni_modules/uni-link/package.json create mode 100644 uni_modules/uni-link/readme.md create mode 100644 uni_modules/uni-list/changelog.md create mode 100644 uni_modules/uni-list/components/uni-list-ad/uni-list-ad.vue create mode 100644 uni_modules/uni-list/components/uni-list-chat/uni-list-chat.scss create mode 100644 uni_modules/uni-list/components/uni-list-chat/uni-list-chat.vue create mode 100644 uni_modules/uni-list/components/uni-list-item/uni-list-item.vue create mode 100644 uni_modules/uni-list/components/uni-list/uni-list.vue create mode 100644 uni_modules/uni-list/components/uni-list/uni-refresh.vue create mode 100644 uni_modules/uni-list/components/uni-list/uni-refresh.wxs create mode 100644 uni_modules/uni-list/package.json create mode 100644 uni_modules/uni-list/readme.md create mode 100644 uni_modules/uni-load-more/changelog.md create mode 100644 uni_modules/uni-load-more/components/uni-load-more/i18n/en.json create mode 100644 uni_modules/uni-load-more/components/uni-load-more/i18n/index.js create mode 100644 uni_modules/uni-load-more/components/uni-load-more/i18n/zh-Hans.json create mode 100644 uni_modules/uni-load-more/components/uni-load-more/i18n/zh-Hant.json create mode 100644 uni_modules/uni-load-more/components/uni-load-more/uni-load-more.vue create mode 100644 uni_modules/uni-load-more/package.json create mode 100644 uni_modules/uni-load-more/readme.md create mode 100644 uni_modules/uni-nav-bar/changelog.md create mode 100644 uni_modules/uni-nav-bar/components/uni-nav-bar/uni-nav-bar.vue create mode 100644 uni_modules/uni-nav-bar/components/uni-nav-bar/uni-status-bar.vue create mode 100644 uni_modules/uni-nav-bar/package.json create mode 100644 uni_modules/uni-nav-bar/readme.md create mode 100644 uni_modules/uni-notice-bar/changelog.md create mode 100644 uni_modules/uni-notice-bar/components/uni-notice-bar/uni-notice-bar.vue create mode 100644 uni_modules/uni-notice-bar/package.json create mode 100644 uni_modules/uni-notice-bar/readme.md create mode 100644 uni_modules/uni-number-box/changelog.md create mode 100644 uni_modules/uni-number-box/components/uni-number-box/uni-number-box.vue create mode 100644 uni_modules/uni-number-box/package.json create mode 100644 uni_modules/uni-number-box/readme.md create mode 100644 uni_modules/uni-pagination/changelog.md create mode 100644 uni_modules/uni-pagination/components/uni-pagination/i18n/en.json create mode 100644 uni_modules/uni-pagination/components/uni-pagination/i18n/es.json create mode 100644 uni_modules/uni-pagination/components/uni-pagination/i18n/fr.json create mode 100644 uni_modules/uni-pagination/components/uni-pagination/i18n/index.js create mode 100644 uni_modules/uni-pagination/components/uni-pagination/i18n/zh-Hans.json create mode 100644 uni_modules/uni-pagination/components/uni-pagination/i18n/zh-Hant.json create mode 100644 uni_modules/uni-pagination/components/uni-pagination/uni-pagination.vue create mode 100644 uni_modules/uni-pagination/package.json create mode 100644 uni_modules/uni-pagination/readme.md create mode 100644 uni_modules/uni-popup/changelog.md create mode 100644 uni_modules/uni-popup/components/uni-popup-dialog/keypress.js create mode 100644 uni_modules/uni-popup/components/uni-popup-dialog/uni-popup-dialog.vue create mode 100644 uni_modules/uni-popup/components/uni-popup-message/uni-popup-message.vue create mode 100644 uni_modules/uni-popup/components/uni-popup-share/uni-popup-share.vue create mode 100644 uni_modules/uni-popup/components/uni-popup/i18n/en.json create mode 100644 uni_modules/uni-popup/components/uni-popup/i18n/index.js create mode 100644 uni_modules/uni-popup/components/uni-popup/i18n/zh-Hans.json create mode 100644 uni_modules/uni-popup/components/uni-popup/i18n/zh-Hant.json create mode 100644 uni_modules/uni-popup/components/uni-popup/keypress.js create mode 100644 uni_modules/uni-popup/components/uni-popup/popup.js create mode 100644 uni_modules/uni-popup/components/uni-popup/uni-popup.vue create mode 100644 uni_modules/uni-popup/package.json create mode 100644 uni_modules/uni-popup/readme.md create mode 100644 uni_modules/uni-rate/changelog.md create mode 100644 uni_modules/uni-rate/components/uni-rate/uni-rate.vue create mode 100644 uni_modules/uni-rate/package.json create mode 100644 uni_modules/uni-rate/readme.md create mode 100644 uni_modules/uni-row/changelog.md create mode 100644 uni_modules/uni-row/components/uni-col/uni-col.vue create mode 100644 uni_modules/uni-row/components/uni-row/uni-row.vue create mode 100644 uni_modules/uni-row/package.json create mode 100644 uni_modules/uni-row/readme.md create mode 100644 uni_modules/uni-scss/changelog.md create mode 100644 uni_modules/uni-scss/index.scss create mode 100644 uni_modules/uni-scss/package.json create mode 100644 uni_modules/uni-scss/readme.md create mode 100644 uni_modules/uni-scss/styles/index.scss create mode 100644 uni_modules/uni-scss/styles/setting/_border.scss create mode 100644 uni_modules/uni-scss/styles/setting/_color.scss create mode 100644 uni_modules/uni-scss/styles/setting/_radius.scss create mode 100644 uni_modules/uni-scss/styles/setting/_space.scss create mode 100644 uni_modules/uni-scss/styles/setting/_styles.scss create mode 100644 uni_modules/uni-scss/styles/setting/_text.scss create mode 100644 uni_modules/uni-scss/styles/setting/_variables.scss create mode 100644 uni_modules/uni-scss/styles/tools/functions.scss create mode 100644 uni_modules/uni-scss/theme.scss create mode 100644 uni_modules/uni-scss/variables.scss create mode 100644 uni_modules/uni-search-bar/changelog.md create mode 100644 uni_modules/uni-search-bar/components/uni-search-bar/i18n/en.json create mode 100644 uni_modules/uni-search-bar/components/uni-search-bar/i18n/index.js create mode 100644 uni_modules/uni-search-bar/components/uni-search-bar/i18n/zh-Hans.json create mode 100644 uni_modules/uni-search-bar/components/uni-search-bar/i18n/zh-Hant.json create mode 100644 uni_modules/uni-search-bar/components/uni-search-bar/uni-search-bar.vue create mode 100644 uni_modules/uni-search-bar/package.json create mode 100644 uni_modules/uni-search-bar/readme.md create mode 100644 uni_modules/uni-segmented-control/changelog.md create mode 100644 uni_modules/uni-segmented-control/components/uni-segmented-control/uni-segmented-control.vue create mode 100644 uni_modules/uni-segmented-control/package.json create mode 100644 uni_modules/uni-segmented-control/readme.md create mode 100644 uni_modules/uni-steps/changelog.md create mode 100644 uni_modules/uni-steps/components/uni-steps/uni-steps.vue create mode 100644 uni_modules/uni-steps/package.json create mode 100644 uni_modules/uni-steps/readme.md create mode 100644 uni_modules/uni-swipe-action/changelog.md create mode 100644 uni_modules/uni-swipe-action/components/uni-swipe-action-item/bindingx.js create mode 100644 uni_modules/uni-swipe-action/components/uni-swipe-action-item/isPC.js create mode 100644 uni_modules/uni-swipe-action/components/uni-swipe-action-item/mpalipay.js create mode 100644 uni_modules/uni-swipe-action/components/uni-swipe-action-item/mpother.js create mode 100644 uni_modules/uni-swipe-action/components/uni-swipe-action-item/mpwxs.js create mode 100644 uni_modules/uni-swipe-action/components/uni-swipe-action-item/render.js create mode 100644 uni_modules/uni-swipe-action/components/uni-swipe-action-item/uni-swipe-action-item.vue create mode 100644 uni_modules/uni-swipe-action/components/uni-swipe-action-item/wx.wxs create mode 100644 uni_modules/uni-swipe-action/components/uni-swipe-action/uni-swipe-action.vue create mode 100644 uni_modules/uni-swipe-action/package.json create mode 100644 uni_modules/uni-swipe-action/readme.md create mode 100644 uni_modules/uni-swiper-dot/changelog.md create mode 100644 uni_modules/uni-swiper-dot/components/uni-swiper-dot/uni-swiper-dot.vue create mode 100644 uni_modules/uni-swiper-dot/package.json create mode 100644 uni_modules/uni-swiper-dot/readme.md create mode 100644 uni_modules/uni-table/changelog.md create mode 100644 uni_modules/uni-table/components/uni-table/uni-table.vue create mode 100644 uni_modules/uni-table/components/uni-tbody/uni-tbody.vue create mode 100644 uni_modules/uni-table/components/uni-td/uni-td.vue create mode 100644 uni_modules/uni-table/components/uni-th/filter-dropdown.vue create mode 100644 uni_modules/uni-table/components/uni-th/uni-th.vue create mode 100644 uni_modules/uni-table/components/uni-thead/uni-thead.vue create mode 100644 uni_modules/uni-table/components/uni-tr/table-checkbox.vue create mode 100644 uni_modules/uni-table/components/uni-tr/uni-tr.vue create mode 100644 uni_modules/uni-table/package.json create mode 100644 uni_modules/uni-table/readme.md create mode 100644 uni_modules/uni-tag/changelog.md create mode 100644 uni_modules/uni-tag/components/uni-tag/uni-tag.vue create mode 100644 uni_modules/uni-tag/package.json create mode 100644 uni_modules/uni-tag/readme.md create mode 100644 uni_modules/uni-title/changelog.md create mode 100644 uni_modules/uni-title/components/uni-title/uni-title.vue create mode 100644 uni_modules/uni-title/package.json create mode 100644 uni_modules/uni-title/readme.md create mode 100644 uni_modules/uni-transition/changelog.md create mode 100644 uni_modules/uni-transition/components/uni-transition/createAnimation.js create mode 100644 uni_modules/uni-transition/components/uni-transition/uni-transition.vue create mode 100644 uni_modules/uni-transition/package.json create mode 100644 uni_modules/uni-transition/readme.md create mode 100644 uni_modules/uni-ui/changelog.md create mode 100644 uni_modules/uni-ui/components/uni-ui/uni-ui.vue create mode 100644 uni_modules/uni-ui/package.json create mode 100644 uni_modules/uni-ui/readme.md diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..b8c7be7 --- /dev/null +++ b/.gitignore @@ -0,0 +1,16 @@ +# Mac +.DS_Store +**/.DS_Store + +# vim/vi +*.swp + +# JavaScript +node_modules/ +.node_modules/ +.eslintcache +unpackage/dist/build/ +unpackage/dist/dev/ + +# python +*.pyc diff --git a/App.vue b/App.vue new file mode 100644 index 0000000..d06ff34 --- /dev/null +++ b/App.vue @@ -0,0 +1,18 @@ + + + diff --git a/common/common.scss b/common/common.scss new file mode 100644 index 0000000..e713df6 --- /dev/null +++ b/common/common.scss @@ -0,0 +1,92 @@ +.wishlist_body{ + position: relative; + +} +.wishlist{ + padding: 0 26.67rpx; + display: flex; + justify-content: space-between; + flex-wrap: wrap; + + .wishlist_item{ + display: flex; + flex-direction: column; + font-size: 25.33rpx; + font-weight: 500; + width: 33%; + margin-top: 33.33rpx; + + .wishlist_item_img{ + width: 220rpx; + height: 220rpx; + margin-bottom: 25.33rpx; + background-color: #999999; + position: relative; + + .select{ + position: absolute; + width: 28rpx; + height: 28rpx; + top: 8rpx; + right: 8rpx; + } + } + .wishlist_item_bottom{ + display: flex; + align-items: center; + padding-left: 22.67rpx; + justify-content: space-between; + + .wishlist_item_bottom_icon{ + width: 30rpx; + height: 30rpx; + } + } + } +} +.wishlist_foot{ + padding: 33.33rpx 26.67rpx; + position: fixed; + bottom: 0; + width: 100%; + border-top: 1px solid #F5F6FA; + display: flex; + justify-content: space-between; + align-items: center; + box-sizing: border-box; + + .wishlist_foot_left{ + font-size: 36rpx; + font-weight: 400; + display: flex; + justify-content: space-between; + align-items: center; + + img{ + width: 36rpx; + height: 36rpx; + margin-right: 9.33rpx; + } + } + .wishlist_foot_right{ + width: 164rpx; + height: 73.33rpx; + font-weight: bold; + + button{ + font-size: 26.67rpx; + line-height: 73.33rpx; + width: 100%; + height: 100%; + background-color: #C0C0C0; + color: #FFFFFF; + border: none; + border-radius: 0; + } + + .wishlist_foot_right_button{ + background-color: black !important; + } + } + +} \ No newline at end of file diff --git a/index.html b/index.html new file mode 100644 index 0000000..c3ff205 --- /dev/null +++ b/index.html @@ -0,0 +1,20 @@ + + + + + + + + + + +
+ + + diff --git a/main.js b/main.js new file mode 100644 index 0000000..afc6b08 --- /dev/null +++ b/main.js @@ -0,0 +1,21 @@ +import App from './App' + +// #ifndef VUE3 +import Vue from 'vue' +Vue.config.productionTip = false +App.mpType = 'app' +const app = new Vue({ + ...App +}) +app.$mount() +// #endif + +// #ifdef VUE3 +import { createSSRApp } from 'vue' +export function createApp() { + const app = createSSRApp(App) + return { + app + } +} +// #endif \ No newline at end of file diff --git a/manifest.json b/manifest.json new file mode 100644 index 0000000..66f9cee --- /dev/null +++ b/manifest.json @@ -0,0 +1,72 @@ +{ + "name" : "cnic_buyer", + "appid" : "__UNI__C0E0831", + "description" : "", + "versionName" : "1.0.0", + "versionCode" : "100", + "transformPx" : false, + /* 5+App特有相关 */ + "app-plus" : { + "usingComponents" : true, + "nvueStyleCompiler" : "uni-app", + "compilerVersion" : 3, + "splashscreen" : { + "alwaysShowBeforeRender" : true, + "waiting" : true, + "autoclose" : true, + "delay" : 0 + }, + /* 模块配置 */ + "modules" : {}, + /* 应用发布信息 */ + "distribute" : { + /* android打包配置 */ + "android" : { + "permissions" : [ + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "" + ] + }, + /* ios打包配置 */ + "ios" : {}, + /* SDK配置 */ + "sdkConfigs" : {} + } + }, + /* 快应用特有相关 */ + "quickapp" : {}, + /* 小程序特有相关 */ + "mp-weixin" : { + "appid" : "", + "setting" : { + "urlCheck" : false + }, + "usingComponents" : true + }, + "mp-alipay" : { + "usingComponents" : true + }, + "mp-baidu" : { + "usingComponents" : true + }, + "mp-toutiao" : { + "usingComponents" : true + }, + "uniStatistics" : { + "enable" : false + }, + "vueVersion" : "2" +} diff --git a/pages.json b/pages.json new file mode 100644 index 0000000..2556f80 --- /dev/null +++ b/pages.json @@ -0,0 +1,113 @@ +{ + "pages": [ //pages数组中第一项表示应用启动页,参考:https://uniapp.dcloud.io/collocation/pages + { + "path": "pages/index/index", + "style": { + "navigationBarTitleText": "uni-app", + "app-plus":{ + "titleNView":false + } + } + }, + { + "path": "pages/index/search", + "style": { + "app-plus":{ + "titleNView":false + } + } + }, + { + "path": "pages/category/index", + "style": { + "app-plus":{ + "titleNView":false + } + } + }, + { + "path": "pages/account/index", + "style": { + "app-plus":{ + "titleNView":false + } + } + }, + { + "path": "pages/account/myProfile", + "style": { + "navigationBarTitleText": "My Profile", + "navigationBarBackgroundColor":"#FFFFFF" + } + }, + { + "path": "pages/account/settings", + "style": { + "navigationBarTitleText": "Settings", + "navigationBarBackgroundColor":"#FFFFFF" + } + }, + { + "path": "pages/account/wishlist", + "style": { + "titleNView":false + } + }, + { + "path": "pages/account/favorites", + "style": { + "titleNView":false + } + }, + { + "path": "pages/account/message", + "style": { + "titleNView":false + } + } + ], + "globalStyle": { + "navigationBarTextStyle": "black", + "navigationBarTitleText": "uni-app", + "navigationBarBackgroundColor": "#F8F8F8", + "backgroundColor": "#F8F8F8" + }, + "tabBar": { + "borderStyle": "black", + "backgroundColor": "#FFFFFF", + "color": "#999999", + "selectedColor": "#000000", + "height":"60px", + "midButton":{ + "width": "80px", + "height":"70px", + "iconWidth":"60px", + "iconPath":"static/img/tabbar_img.png" + }, + "list": [{ + "pagePath": "pages/index/index", + "iconPath": "static/img/home.png", + "selectedIconPath": "static/img/home1.png", + "text": "Home" + }, + { + "pagePath": "pages/category/index", + "iconPath": "static/img/Category.png", + "selectedIconPath": "static/img/Category1.png", + "text": "Category" + }, + { + "pagePath": "pages/tabbar/tabbar-4/tabbar-4", + "iconPath": "static/img/Cart.png", + "selectedIconPath": "static/img/Cart1.png", + "text": "Cart" + }, + { + "pagePath": "pages/account/index", + "iconPath": "static/img/Account.png", + "selectedIconPath": "static/img/Account1.png", + "text": "Account" + } + ] + } +} diff --git a/pages/account/favorites.vue b/pages/account/favorites.vue new file mode 100644 index 0000000..0a70a50 --- /dev/null +++ b/pages/account/favorites.vue @@ -0,0 +1,54 @@ + + + + + \ No newline at end of file diff --git a/pages/account/index.vue b/pages/account/index.vue new file mode 100644 index 0000000..1e6ce3c --- /dev/null +++ b/pages/account/index.vue @@ -0,0 +1,280 @@ + + + + + \ No newline at end of file diff --git a/pages/account/message.vue b/pages/account/message.vue new file mode 100644 index 0000000..a4a001d --- /dev/null +++ b/pages/account/message.vue @@ -0,0 +1,28 @@ + + + + + + \ No newline at end of file diff --git a/pages/account/myProfile.vue b/pages/account/myProfile.vue new file mode 100644 index 0000000..8596d4a --- /dev/null +++ b/pages/account/myProfile.vue @@ -0,0 +1,96 @@ + + + + + \ No newline at end of file diff --git a/pages/account/settings.vue b/pages/account/settings.vue new file mode 100644 index 0000000..2784f06 --- /dev/null +++ b/pages/account/settings.vue @@ -0,0 +1,84 @@ + + + + + \ No newline at end of file diff --git a/pages/account/wishlist.vue b/pages/account/wishlist.vue new file mode 100644 index 0000000..ad3ee4e --- /dev/null +++ b/pages/account/wishlist.vue @@ -0,0 +1,50 @@ + + + + + \ No newline at end of file diff --git a/pages/category/index.vue b/pages/category/index.vue new file mode 100644 index 0000000..8c39770 --- /dev/null +++ b/pages/category/index.vue @@ -0,0 +1,177 @@ + + + + + \ No newline at end of file diff --git a/pages/index/index.vue b/pages/index/index.vue new file mode 100644 index 0000000..91fc991 --- /dev/null +++ b/pages/index/index.vue @@ -0,0 +1,577 @@ + + + + + diff --git a/pages/index/search.vue b/pages/index/search.vue new file mode 100644 index 0000000..388ccfd --- /dev/null +++ b/pages/index/search.vue @@ -0,0 +1,163 @@ + + + + + \ No newline at end of file diff --git a/static/img/About CHIC.png b/static/img/About CHIC.png new file mode 100644 index 0000000000000000000000000000000000000000..afbb7126bf029d3926dcb020b27c0453a6e7a02b GIT binary patch literal 3222 zcmV;H3~BR;P)Px>P)S5VRA@u(+Xb+1RTT#C54*8Duv^FO#=!1YbW{xNZbbzH5d*thOw`e_P{05T z?CwtN7Gr+S+RT3Ep7YPkdv6Bz%$@u0z2}_0*IM8D*0Yje;Bv(vwjU+cta;_vN7&$Bhj!g35`ub#&pLEx8)WwpVp`7yVB)?wO=v559 zaFX*Sxpb19lbkcjPm{cp`N8KlV=Y?sCGU-LnjC zk$qN@>(&!^_3KFvNb>rMtUqDjha`DKsJ3 z5-vS`lDj0iRg%keQ2%C=PcIG-{hud!N|Kj#B?$?F_=D>@WzSg-O@cqbe6)PcGFZO8q;l5H zh~$w4Wf5#k`H^e)th@!==M==ieA&gw8`a(z-rhJsM1R#i4D6LULAg_s6ID<+hJ%#4 z4QtBavz8H{BZ5CGxQZfJ_e+U-XOfGTmqFg)zOk&O-SyDL*$lV8DBmy1`$ozTSU)?- z)eBwr-z|xHzOcd9t9mG3thZJkski+SjhiQVewD4iRBk^k$y~;q;SkYM))+0ya`{!2 z-|GDE4EIlhFOZ*oLEZJk;EZZ%QCDjfe+xvPR1h8Jg*v)Nd0(FYs2n5Wa%!E0g+E%k z>N#M2huWimF2Y1|&n-cuI)F6-Q!=+$V~{>s)lwzKQb)1x+eS{mW0DspxqS%xJc z2zM(qXeyKp8`HH*wQYlQVO~lKY3)?y1!>aS!(Lcvd_a{YgiF~;Ng7@`TgYIWP)~Bg z=1nRpH+^kudRv{wl;A{uV(nfPEemh?``98LDMqo0*lUvfZSXK>MOZhfw3324JMwbF zno?Sf#Js$O#K45g(YeT_eyNu)t*Hi8B+Af0m5p^r^NhFm<&(U+bhYchkmR<-C&Rs+ z2|;m;{g5baFzWDGT3TcN%rcxIphCSoBgv1uUBMbzC{JMBSQ5;%cgxP8@PY&1y9NmQ z=NHuP`ZVEahEiGfwa7}aCs>wl9yo(OMOJh&&+{Nyi6{naIYJ6jH-tgUBhv`t5^bk7ds6&6eMn#OVTGOy=8K+WkvWbey0vVICcHRJhAqdO?u3VdmG+}OrMbR{U zZN`PH4DB3Bx1yJQc`2_A1k#~|GnE#(kMT7x&ZhAv5s{{SF}LR{Pf*1{j8z?^pSnHT zCAGcg8SFaqCT*d)Qky%q@d|j0Hc|m?DobmogKC30LP0&{q@maJ|OjJ%;C*@3OfP8de?rlp{K^BpEZacp`_k7}rBBaVTbV?pFW-x*> z2L`V@*5ItoljX37>2<+K18HWEqgQV*FUt{)v;((s zDK>T^l2X*iB%|kuEaGynkqf2N@~lPJ_u>8S?O(x&KJ?gAZhoe6c&fZfwT31m-!>kG zMCnE`9-S7w!Qio9MOdUM8ab!m1rO02GuB}Z-sF2Tl=1D^JTAxe)xNj)NA10nSu?eS znGNTfQ>2LsAlleo2Q;P6rJUKh+HC?O$2mxUZjk@}CW6|bTwvOVY}{-!CC9~>wa?KW zA+Eh@-N#`0)S|^W@(wC|K?<+;j)MU878>NF*EXJ~L^Z>~Tng#R9DE4#b{_khg-J&Z z4DOI_9OdW#cTNnpX_Jwr47{k3Hy0Wmgw+lo{L9G$Qw^<^cLcS|_I-PcwPwQewX2k$nmvUgyg+WM zJg(8U?#5u@#*&u$MZ6CugUtw}q)*kMkbq!pDxp{1FhANv%NwbRv>J>=A<dW;8xaPp#V7;e@8JrD!R~s=_elwnP=wvglWhWYo8aH;G^Li<+@6|wvdW$k~ zGCYekpwyHpDR*dZFzE*#6xML!X!;Kt6p$M^#h~6jTYIS{7@Fpnry{FNIp45MXrzdPa!Krra!i5QXfasP;9Fuaw2T5g`9L(7};dCU(ODVx;X0y2BUZN)r3)m z^}BtEY43kAoyD{2ZvWx2t!+3ZfvrVVIa^;+)obu4h5h~@H~OXTqB?8?k%HkE?^)Ox zVGtnO1K|8^#;VS;j74uLNxCMQ-ZqG&+`#AvznW zJGo{V>~HE9IQtIHCJ$gUe1o?wj8}sRpO&}eumOgV&dLUpa+02uL+hr22y5oBdn;P6 znJ^b`DT#0Vypq8@h@p`IrNv;cLdm#gK5TYO+OI4LLK_y!VSW0f`kMu5279H!;MPr< zaOjt}rktGRFrVqb)NT0Ztp|ZLDTwA7OgkHuw6_AfBVX&j-QTRJJD&)vG?rFzCIaV? zmbn#!+lRBKKEAYB1}ys=@1&5b5~Z)lFC_2Oly&ZZ@-XUDv~?yXBjn`NtZUiBZpQVX zOebptNn>LigT9qWYcmeC-92NT@YwDSyzYUHGk9GOZtwU14^>bJkilX|F#rGn07*qo IM6N<$f;c8GBLDyZ literal 0 HcmV?d00001 diff --git a/static/img/Account.png b/static/img/Account.png new file mode 100644 index 0000000000000000000000000000000000000000..d196a8f35797831f3a20bc34f8104cef5c0410fa GIT binary patch literal 3326 zcmVPx>xJg7oRCr$PTzha_Wfec?+nc1CG|j^>%|m%ukcZ;H@S0LeLF6%m1%V(C=!ERv zyW2-ZK~SvF)mj;`&`RlM@4ZPHTFb*K7H}+3TNR|1m!kqQ%DZh6Ud>V-ZL)j!JI=}6 zTW`0U?Phat5<2;2`bV?(JKs6K@4NRq-#NeYAxyM_5Ws?ZO>}|@;0jy>V-8$nV`HGK ztgK2=ltTi6z{%-!`cxsr(L{6z0F)8YCy4ki0Q?&Oo<_uHiRj%#B9U0PZe6-SyGPt@ z%z%qVqoTXJ`xr#Lh={%h04E}1MIIJ?2msFz(dIxP@JKu!e=(0fo3QE-=01&&|K>gwv_)9G{!5lL_}{2AreHi2N6pUv06%bC;)r~0Hy=L7qi&-DiPgMUtj;5Xf(>;``Shg zI8{}zLB!<%P?cfPdx*FsolZYoQBm>k(xpp38NyHX4a4pm{jaS`LL_Cj( zKI7`&O+=TQrnzOfGKcfL@4&URv>c%*%Dn(^s!Oqtc$Ezd4Co{IsB41 zyZe`j$N)MM^Z^ltOw)W206gDmeOqxYEiIE3Mfn{7uyZ@uh-fPjHMY06@9=uUG)NHZ_wU}lJF<4|T6UT}ZN34gs_Hq2cwfebaIUWF8$GqaB`gw&oGzu@005Ki zKldTx8M?0Xam~}_3vle{R#sLn0)U0CS7(!980UDZeTFc5)pY>CrLI-}L(?>G^Lkug zfSWsaZlz^es}b=+Tj4Y!Uasppe{cM3sH*B*M7#q4CfNf$XBfuGUJvREaKT{k&_E#Y zM*x^+EBsa<5IDQ7t<5+0z_lT<+p``3rrLkAlF4MvNZg)mp!)(`I2=Bfh@J%i_Op0X z*ocT%8HVw`*E63fuerIoqPV#DX#hCN`3(`L>$?6oFUR%^xS2%s7uR=Y^^_@7=H)m} zd1{lUX@9lPw1aYm5Ld_J@wJ`~;-xT0ma3|JmVC$sTx`;$N!NSnyXDeb(=;A?w(FS% zhGDGq(pFzqoTh0P0|5JQPP@CLq~v>}1)Qp?>p4K`8vi=OFz)&^0LLeW&8`*K)!*O0 zV9lB}Lq$Hkv&n3VEQ0C1SC=e#z;k*8_ei2(4JE3ojfq9|v?VzGaC zJ*IEK1%tsV&U?BYQAFHGM82FLnwy&^6&Dvj;P&5$=%Lcm(&pvMmwTQ%^bI(kVNKH- z0pQoJ+2-Kot#x&EcY2+P(lm{uF}H9!(H`$(Ddqh3_I7qdK0Sd<2Q1qeWiNhkk`Qqx z0L-bat$oysOw_Ddvy^GmrZoy7_+&8nS+Lut^78VF{5t0Oy5iV?U@-XQKp?=Y?iiO* zZxhkNva+)KmMvSx*{*_`9rxpnAnI~`cyiuMrBa-%`Da0b^XTL|aBN&vRn?V5bTa-lw2zyYtk zii(ObBHj!D4H-(Mi0FAld%3VA@$l5CQ=jm{t;u8DeI6N;73bEVwY9Zm&z?Os zilR(oW+o9aZ;nB%wO>o7YzTdh z4`-;nfwM`_rxFpr5mPPvl$XloxO|RdfzV9suAA84-!` z2*$8=A|if;Z!az`j_1QTI3RF#`B00^IU7v5xf*{nc*gi27kGRqr5v-uv|MNjA%v8Y znVN?qVvSvIks0D*j&iiLv~<~l0<1ZKauLXVemK)ONF!lKCN98X6j28Oeus z*vn%C9h?nKO36n%CI_9L5hF|!(QSx$Tdwd_PT*|TQ9A(e3^|P>w+oAkitbyvawV^{ zPi7}KN?vVFsONnS7PhyybMEq>YpSZAhlp&i6P@Pp z)lG(BFrRq8HWYBEX&M*M9&7htA+bavanrhW>k7_Fjc2qupHWp+bqf*wz!jE%Cz(th zmMub)6}WIXybl!>0D7gAm$bLHZynFZk5so%D0GYv;t%drqY&cCcs$Op@jh)R;O-!z z>s?PW%V@UWnWK>!?m>Uf#&r?V97h%xx#+rnRX)IRt-zLy3TDqav>q7gi-;^V+?NuG z#L1bTsQp%4Yin!yz`y`g?R}-Y`(m{RLN!g}laZSM`G%q>XJ+oM`vGUWAzUQ8w|rX& zadF4_ZoVLxftaCd%JOATWem~%@z4qFgqM{-O&Z&xlbUJ-xM@Pr2 z#yVl&hE(Mzr7?GMD(@l&jWis6T!r9PH?*fzNRS3j94u8 zc23~<$8b2zNnVG)%YRyI7zRg14*I5PS{MN0E<>NKtE-!yc^1#=j;N}7Ga_=Sw$uJz zUS2-aFRs~mnGFt~_4f8YMnq@3bh^thjO+4oN4UV^D0{g&H_-4MAVJeKxhl_dcH?*f zj!WT*=m9(I#A?YvATX<~t?kLYfa8ZU%6b?q_NbdjqXKX&faFLC5w#)Ww;W;*B5v*L z>zk1+Dm>&NKNt+29tZ^Z#NY(`l0=LFB0B{t5vz2c24y~Ddmlb_{{<@$~%xQWBI#8MD`kf(bw1aR6e=Yynu5o;)?=`ii&31%x=D# zaajGw5}6^!W;g3)DdkU-$>ig!SFh%J+PwVKf(*alf(uF-8XC@K3IyM6Y2Pfv&N6>1 z3X(Yrpz_Uzocd#iC(|AHcEkIbLtF?;eWXTWQ&ZFA($dm8%d#pJMVU07NjF5qO!i%= zRI0nHt7})jt1H{2jug02SSaIjhzZ~doR~ije*gdg literal 0 HcmV?d00001 diff --git a/static/img/Account1.png b/static/img/Account1.png new file mode 100644 index 0000000000000000000000000000000000000000..fdbbe4b32b9a8efea03b1f1b856d60b6d641d58b GIT binary patch literal 1672 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 FV1jOG2J`>` literal 0 HcmV?d00001 diff --git a/static/img/Cart.png b/static/img/Cart.png new file mode 100644 index 0000000000000000000000000000000000000000..e827a90f15c0c35d3d5a308d6d0574b487990514 GIT binary patch literal 4589 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 Xmk|i6((_6300000NkvXXu0mjfV8*^{ literal 0 HcmV?d00001 diff --git a/static/img/Category.png b/static/img/Category.png new file mode 100644 index 0000000000000000000000000000000000000000..0931112ee4bea92b153b04b96981585f50304ddf GIT binary patch literal 4736 zcmV-`5`XQ9P)Px{I!Q!9RCr$PTn%(xRh8cR+?T|VmNu=lX(+>wP_+z>BZ7if>i`ZYi}IJ^EGVY! zyZ7bCB8)AJBGVviKxRhU(!bn$UqWpuWenmV6ctAY3$6t^BY$hKmQ@96(+SuF(l(?o z@7_J@dz|~`=JmbgzT~}eqB(29>dHH3pMCZ{XP>k8{`O`nqP4ZP#SR}nT-D#-A2SR? zMH%XOp8xjSZ>I+b2M4>ly1Xc3O4$cI@7=q%s=B&52D<5V+COyY(9y20uGDzu;V6US z@%a0h`6EiH_Yu(?5t%|n6;Z|#5g0s7Ltx8~;NTF>)7 z$jt8-kyD6h7Bkm?kcfbv-xJY(X8x677|+d`HEVyd{ER5LcszcpVHmfH$ft>D1`!=c zM3ID@XSG5^N5C{QKN5?@Zr`|Z2P{f3c|ais`q{_x%-0smC1087gLAPG4?qZJm)y zrLJM-)!1EQp~cK^i-=7`8*JPD4Kw3I7i`A}?%HdwJ-()BAl(`g(nR{XNAVm4GMHG|y+|uMiPVMM3o;BErn0offR;MI!np5p_9^Gf+r! z!w5lvGOzZ22p%>06gye=ZptJ9cyzKASf=1a8-%ALAjMDCd~Wy+mv z)~tCuA78@+mq;W&EFzC+{Sfqr9&(B38;;{ZsgAip2c^^LuQKyeBB~7$>hU~paYskT zlTmhYLqmfxefspPn7KWN4g~W%BKntfI=!~Dv$K07W>>CUS<~O&kB`|RBJ-HJGSuG_ zk=urbhSqG^vSl!rPF8T1WmPcqP7%2%)M*bh-)!6V!(*0K&cKF-hRWL7+NgVFg=_VTs$6Mq?Gy&5gB^mA*Iv}2M-?HR_gaxTU(pjzkmN?X5JFqdd%FP zPNx@kbaXsBlHl~N{TZGbK|c{W!pvWa#bVnxZQ6vVPtgq1@{Qh`VRn=wd*RO}JD0#CiYnoO8*nPnV{71)eZYeaG-mUA2$O`ot z5Rui)yl$MgbB3g8nxACmZ-;MZ5&4l}7}vG8x4$0Dn_+nA(xoR=R8;(wh)xZC#fx3n z{b9)^_P+$#vaIVxWMk;|-t9O}b|>Y|ZCTc*pudRdgwSuBW3kxHW8G=_)|W^mt`?Ea zMD%X`JJdk4>$;u81lQc$yukCk2SZZEg)pZSUvMPBTb6Ye5j{pkb9Fz@FpLv6Z{FOO zJFcOjp}MxV_MeETIrO~wFCzMw<2Y}X@&n&=(@oV!jvUFI>$iP#Znze_|XhUhPL9H%QYKmMoRL)eDUJ7_;}9Osg9FchY#zw9pqVd&q^b{q$P8`ezI zyp);$HFSBwOj;b)JEi1z;lhQnGtM|;D>MI1i0&ix_4SwI#x5kdosQ$+aah*2V#SK8 zqeqWE7e#QEWo;m$R?UzvB6q&|=9_J$zVX8gHcb<^?2kf!+pCoNWP5x2{)r^G|0JRh z=|$kJ7Y~k2xxTKx#oy4*0!;I|@B3FLlgTG1gy8U8>hA8w1ps#z8eCM1T-W_Yxr7$b zHBECDGY9&TqJ%E|*FA^nz!7CMgeTDb+6NF;0#2_D>o%zTq=+wBuVaDT`hmq;Y;6On5t z~9) z<2VQM3XYi{vu*pcW#J}7RNJ3XEr(0sFARB7b}6MA%4IoV9@8|x&CKxL1nqnE_4QX| zEr(oNm6@NmZTq}(3$C@bb!IA+dYYND4oTnl=O>fNU**o-($aELI-Q2CI$!^mX67qx z+lI%w{cE?YBAvyqu$g9f+dOOE55S!lv|JibsV1%F&N1jx)= zdwYA$@kZvub6S>lIT39oqN)1t(5Xut$GJb~7mhhRN<>+`2CpYGUp`WZY&;TeY;2rf zSy`DRqN@TrB67Fux_?)QE=;cj2M%lwJxI|NQK+`6s;YJ4Js}7J&6qLcTzw$~o+5-5 z9~Y79!ojMn;PedwauE@B9Rj;SLwIee z<2a9xXLsd}jmP8HE2VHmgQI{h_r+qd<|qq~$Kz)!rJ$363klkwi2MXW8^>{W7sIdC zpNM8br@@(HaVVMfG4nnc(zb0w&yLz)Ni;PzEf$frIWb_2?Gcf62)LwDse`ASa!P-0s1V~< zty*rPKo7_y3-V=H*O$L`2rOu6tWPhK2>Cwg1V~M<}}+m^m#XFA&i#5&1O{ zy%{x<&&*0h-Yp{UW#&&1(VvHID)4mJ_x&5^&YgR2F|knSqiNHoA*A^aIgZd^od@u& z0zwMNBqDlCNAizjW+1K*fIgdu-b+Lo2w14~G4tI60|OhjZQBN*&@t^8EQNMwClG`! zfcZdFJ1TA@v!RFx5pw*OJKtMMsTFl~bvwpr0pO83pPBzztC)Nk73d{|ID>#Po)^Hg z1ka3Ip+LyXQmNFgd=dPhb3qV_jzd6Eo;JcHqaLdQ9bhKC3>DDZ+xzf%-QW7%wL(YY zp=Js}y9)7(=LP^kJBNmbzH;xq_rmKtVk;;(T>bm@?VE2H#^;FWGa_$-c!LZr|b%d*}>M3;%kU+H6r2mMIMQFwHpC!(i(-+z>ue-TxOj|O{! zRZ*do0;2J>bUOWUAboK2FmtY6D6}4cSMW7=8-}sV^SoF0?Ai0i6Hh!*7ULWryr-vU zS}K)-;y;6#{}LDz5dkpL0MtT6UKNoSl~T_trF!e?>UxV+6{8BSlsn>&iPogx#`rZS z1ve?UF-l;J!zOoJIR%GTdTnhjfH83HovLA3krG6R$oG985dHrKb{N6rqeqYS96562 zjq$$U!fV!6&$&bdw-nq?QTYRzx0rd4i2OV%TzABGTz7Z(Y-V00B27f}fpO$GeP9$SZo>mWjT1@C?s~|Jq$D)i@4>`suugZV~xn5N8Mz7$!If zO^4v_AfoD^qxO#ASi$|XS0AycFMoiNXNd@oJ$43+eJmDp;omcJcJzpXYi(^kd1z<| z{=r-~5J1yNCjczsH4%w~UDg&5Of%TzCy2=OoSX@GN}79ndmjwz2&&Yot>SqYcnk?I1QzG8j+k3 zQ?CNn)Z5$pWGRCo0sUftg*qOv()azZMb23kY#EL@Tq7b6gs2`8kygiX?kfdD`M51ca2gqpT!Rm4TDX-Te);8>7nj;$ zfYhu52M*jQB2ZcH3aPAYL`$yta@Bv?xtmpmQ;Tvn;EDh<1eZ z;cg8sEU9ZMV0HQO_Z|`XF*BbW4D@~ff@CuJlTrw%5RD=Q zhtmMvgNDF0vJT6N9m#_M#-(!+{D>LBH8nLY^gItZiQqkSu)e;2)>xEmF@i2aaBz|T zj+ukZ!(QL_mn4%(ytT^NFz;*39OPm2A_EdB0s-g-)&cUWrfV*qaU3Tcw=4^DQ3YpN z7BaJej|y*+T-V)F2A? z_b(d_Xk7~C6N$u+0UOh_04Pt`w!I@GI9>4oWq<0|NsCO;KtwjdcNu zMB)|^0V*|UyN8B`J^{pL5OYA)8I;}$sw|)*fPkOfym>RqpOw7nY#yWs{6#<m7KYE(zH-a2Dw~WH6kMGUDw4$A>lj+6heWb4z?xS(@DcH zzMQY}%y^hZT_t9|M?_G9ENFXEsnmsAwrt6(@KM~w_x%nLLAp@DH(X5@_x1I?R7xBQ zs(V#bRIEcmm|!lA2 zNpB6Su3>`HlHL}&MKBJC>{n2bkC_o=da>C2E}c^k#SS3$A|3F~qKTOK=Z0Y{+O%mC zKsN;&YIk;bci#rIdZ-gF2h<_?B{OgLJnx5d=g#deCSHO|prWDzX{Jk<8HKMpBJsv)YNpY@B65ed10Qc zlPHUe(q~AgKcPNmlsk(tQT5d{M77#tkjv32WKgxrdLiy?8XqN3s~=r>)SvKS!YXuR)bX4J=gw6n7_ zTqq_xZd53%PXGQqGhe3byp2?zHZMas)=;n_g4ig+ZQDv!^9}F8o}QlbJkM(+BIqf+ z3ZhoU4)}%I!J`{_Y7bOZRefi)+}BYB7f{BHGjHC!6Ewo8()Zt~1U6bzNjxUx!l)H5t2g*MZe~}g+mGM8Ne*Xhgr=Hd#14e=X O0000Px<{YgYYRCr$P+y#g%-4O-g6L)uaC7uxCLP9*mh`WclySor~C9cGX3vngx?(Xi& zH&ieE=Jm{UkM%#iEm&rEr=|Mbx>a?n&h5ixz8o>h(UTlA$x)N|`|u0Sng04eN&cPW zpGp2wKmPvT!0Yrm{BTK*kmM*yj!~aSuK)SYJ>C0XN&a5C{3FSKhw9^Ev*hGSE?Peq zNOGDa$4+vjK2Oj(hGKt8^0OqLOY*TKA5QYUf!A4dxB)$5l5;0HXOeRzIen57*Wml! zAR4@1B>8rdFC_U=k}nR`rwcg1oIlCUl3X##iIOy2JBlDsy_P|G`El4~WoO_Foetmt#!dB^-M$!C&0r!4Rfvkq36xMukqk#h|BWdZTBa@w9nqPnUw9ngQH#3fS9kd4T_%r~w@IE(yY<7r8*Gji~fn#eP6zAM0q z_OD2C$yH5e4d+`HUTIf=Q!)}5B)?;e^3!AhcOj|*PU&gPh}sO80_-Jr1vpdnRY@*B zwz(yFSCT923UDV$@{FpzZDV~pYkVvV`P!T83UJ4*3WfUHm`VEYl03c2Z#&`REVr(f zLyrJKPE2nnDDHb*{#e_t%nZQf#HvS&}H_jJ?QLzOl%EO$Rc1y0Uiu zMFn`<^2eH{Rt?tF6X4EJ?XfY}fppP#)p(h#1*e3bmnr2HCAKNbN@|6C>?fKVQ%JZs z4J4Rj7BWAd9fWt7fo%u6Ep{P&h;MM{ZQdo@@&v z{GBS-Te%$2CS-AbbhjRrjj-vfR(!QZE zk5X{IN>Mfq9tD-5pIEKInRJ60APQ>yvS5Lww2r{W*XpIdAjzwfAmnt)^hjxhX!xqQ zqDyU3SQ-mg98_H$Ds;C5yL>ULe6A90aaZ^<{axiF({rZV=rVDURn18Rpa%f(Bo8)p8F*79bS4ncYA`D698=bqJ5g-lWk)_Mi=pu*wK_8OgJl~+- z3P6o&?4?sy*PlW|1P={ZKTU$#CA{m73j}-NeaHo89IL6rKdakeFP*)D9)HLUwTXqM zAdCM>>7>htIYrlAvdF0dN#qiB5e!Y`p};jPNGZn;%klCho20S=iVvi-W={hgV5AkS z3||E+$r5U=smbAn+*f)cU9t}Y<;@<5Nx^cKbO8V`X$PW<<&2yNfSYcV zNC~VxW$uf_;3=a!{!&SF!ce9?L>&we(VE8oHBa z(L>Mrejd%MeU7~Hs#PtPm~Wz#ZZ(6pZ_WCau6-EOz{$Mva4FU%@R>$NgAZ6&w%-&{ zE$RH;2RNV^R5X3{xK%7{(EzhR%P*T)^ivP0lC*(CHF!W(9GYqAVeGkjZxX~h%aWna zdzOMM`F2I$;?x%bN2ePW(R-6L{b_v_GgXY<+%B>j3xMa@s@pj}CpNzQ9S7qym;yW6MXI4bUvE zy+H(UI^_bxVFfswLuBt`GL@PEvo*=q^@C_$`@qe&>3!gqob&s@?E|+Y0!yB@Z*lv; zEs4OAr|nzZK5$DSu;gj`7Prg5sl<4P)1rFZVRq$Ut*SAh7Prl{s^X;@pf}d|-4YMA z42ileho#+vA89t@HPsRPeT|T2qnBpLP=@4C>o-s;suER zG+iz&H`8WPYpVX?>&geQfOYjASQ^*Bvb>z7*~#NQmE41A+I26-0h$kN+Lzk|5Svu_ z9!7hc;3%NkizmWaG96=!`8InG+?B4M!A8cJNV}7dxN^@j$7TyApmcXwf_JDnvGWanGf-8wjvp6UDFGJ%KBln2sJVtm^2p{wM1@-!5FgUYvy;@n5)Yi;K-D}9GhXv2klq7>x^ zhgu*%X;T^Ejunb+?EK~sE9Px;+et)0RA@uZn+fpsQyIrUO39YWE(}Wcok$rf*|P6U_I+QIMA1UXP7y-NpzLdm zZ7gN%J7bs18nW-^^Uib3dCz6t3S!oV|Z zK`Q}TlN(aXGr*3(Wq_O6QwCA^tH6PP{#wdwz`60cCd{_yx9jx$All{13Vt)eJb$YpewHM z{Fi{e;zV=b_N0#nei3MGoT-`=Hb5N@tOev|{5-H3aCxMb3hQq*gwWIgdSvmo!Ryzd zbl(cQ5t_zf#T(DY2HeofQ5ua0#$L_MG8<55S-xLK@#>V&J#HrrE+=r+@oVUVM}a3-ye; zKMmNI-v2YO(U9QXlQ6wmB3enAT8!>O#eW7&93}vY*lq(B%#=1-F9-Z1{jF43aPhY& z2+}j=S)rc6s*Sjid83kYoUaw&LF=(FxBxgEFiy0U#lsczB1U|$bU@m1N;gl}#GW?7 zF#ml(^wd_|;bUVHn+gNV!Fz!Xfrnd8W+9?4o3heeLf+MZ3mr2*Ve8jNqhj$pA9TkJ z2t6TNmj!BGMs!n1zhdFPVwicq@8r*ErKU_PxFpwyX}^^#ymQo>=^+aNOFvOo8`7dyH6!)5*!7;D6^keJZeS-vOGq-uzV3kC7v=F&EDJ<`#*)EzrWB^!Zh|}FV z@}m(n$z#Ayz%AiZezyv6cu@_>ZRvMfTpO{z77ePGV#Gd3b59Ceg`Aa{vkzGi{HD!p z0Rny>6;2w$lU*3-R5I%4T2c-ZwK!pITREjjQ`Z6Os<0mix4bfSD6$fQba%RqXsXtz zM&~5P0`p=gF@Br?Y><6}QJRnZl=60PR-RB>(Q0Hdw}_q9pHFOv zx<+YTN{%YUm5YE?+b$rG;{Jgg6TvtpN=u)3!igl8Su{c#QHK$I$7rdT7Tm~gB7T>J z%weHvNf0!QY#H@&$`ntk@HSERrh&zsYXA~tpM+S}={|W3c^UXdv|ol@Yu6 z;k_eRq=Bs=g?IAEqZSzz3l%#Sx!7gU9Rxqa$dZxnrcHyWaEVGR4L1hNo1+w!HK;6A zFe;`G+co19?=2Q1kP_`l@{bV}mID&~B=G@vT(cULSSE_LW-cZ$eI3$`o@ucdxou;^ z47tL;1b&hYX2iDk9n}fjE|v0Ktx&*}Wsnkp)DoG^^UD(!Lb|I-Y*y*Rn${>pKw}`0 zc}(J51}#(3FeE^^-fu<+WGo++7C9;NBN+$*{l7<`tu?CYX1{Dc&3Mh|LDinpJT8?i z1FO8N56cpG?3QzijDvxsZ4utIXo~~MfSh}>6S#eCO=CRA6}=@q{b1_d7@6gn6ica< z1BcdLhdh=o5%YYKJv-3BHRkPv-Y!*PeMz6niv^i`^J8u4q_8+ZSXo=t%bNpIR7nm} zVRypfc-O3{ZC}^wrnXoZ*nt!?>(BC7YX>b{d#Z!I^Fj$>Q#B0{IMPg95OtrO@n&9e)oVB!2wx5(lPFi2Hj;$$X z1I^gZzNEiFYuF;8T;G`mpC+adTil*2?7!uN=gQueA`xcRLS5!VuO~Ub^C zZiBm&w?}S@YY(-2O*T>v%|=(P`yn2djlV=Ish_Dxx=K=hjFcwr-$X;^N1Z&0QO@>< zjjF!xL)Ea)0miVd)@tOUlNkM7uUJ~p(N$r;FoNDu+)4Ev+VpM!3sLCSJd9z7S8l+W^3;8@b6us&?R*sBhC z5U>sN^N6cM@@4Z}Pw9>`{v*?6nEANRIoR*9;;**Vysw zS79ge2CXMrcJnnMZwlC+90f~~HcPV4iHF^sBIg7`!wW{kIg$Npqb& z=Hn`MEksKe0%Cgaj!Ey97tsw+ZiF;dPXcfdg_DwodKn6VL#InBUJMt@s=SxO405Kl zo{Nd<#*LNAHOksAwprilj)+-8SCY5tyKZlzu;)TiL`OE%9M?-JZl-~$+pQn1$tupkHBd{ajlxMOPr?qrjWAE6=}M9S-k_HM z1VCcJ`O{AT^vhnqg7H+Xe583T`34S@!zi2-x8(DhzNt%p^TeB!?-f_d?^RMiy*6kl ze?QUs`eO}+bH$CM{s2VAU-Q&dn||%mO?ge;qQdJ<-Y!yE8w5j3O@-59^h--W+Z*1m z@Fu-J>AepLyiTHm-qzJOt$3`?^n3l&px63D%gH_hBr)}wq1)dY00000NkvXXu0mjf DPvY_j literal 0 HcmV?d00001 diff --git a/static/img/My Address.png b/static/img/My Address.png new file mode 100644 index 0000000000000000000000000000000000000000..10e50a401b04c3cb680024a30458f125ecadf513 GIT binary patch literal 2620 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 literal 0 HcmV?d00001 diff --git a/static/img/Processing.png b/static/img/Processing.png new file mode 100644 index 0000000000000000000000000000000000000000..4ed2976ff4ea59a3b8854a1a655e458bff9b2177 GIT binary patch literal 1074 zcmV-21kL-2P)Px&>`6pHRA@u(noFonQ5eU6SA-&jfwv4WAO^xj20|ox<^32aBb0&HKvHBt3duWp zUvWu^E(0@ULZUp%Ta@=BA+P?owQIGUbN1P5ANQVh&R&yS_pG(P@4x=vUh8|+P-Ua0 z%J7l_u5`u=G29pE1hfe75WWFVfLE^Wxd8V9)&Qe{mJp=b{{r3vyMVob4xnMUfO`Xn zfDr+*nos4ez)Ik|3%D6@5SUvAVE>fZvK9k7T);zst3Y!D_#?0nc$`r9Z(t}e-|X`h zI1Jp0Imp4lY@ijOJ$3^3JPu#P4F_ggYaaj;fcv&duL3q&ljZ?OJOpaV7@*#)eQSVR zjM-}{upek=<_!a`d&<|c-M}J?yoErW4Oq6m)DqAo*DY710%Gc@nXAh~Y@dr+JHuQs zZ2_6I7&%|0yj;_?U#MY<`ig#E`#{(BUZ8& zz{@7WNSYOqAKVQXlmf8!kXtD)EvbBob#;gZoZ?{rS?c3jmQud<$^g5bmP|r^wEiYF zsh=j|>72r(we&Th5H$){ld$gU5X-QDb_ZU10M_?kid$Na!*LJ!Iv7`nSioA;)c{U% zve8^SH1qw2b<3Xg5pLE56&_0Gh+$vMLAjO{1-LcP-+X6xtrV)A@u(QU?Saj}IP(H1 z1+xzL0#qE}Yru9Vn}Qa5e{MRU)E;DSN<*hfe{jSIMuv1E9z(1R1B@! z&<#NB%OZS7qcW@rYk;|x#b#X*g)xEFTdZeExAskQSU~`el$6PeVHK#08JaJKe-tx0 zW=^9rTmpSlZ;=81pLyxj^ps$OjNy!7rvo5OxwHfpnR<)Nq^sVfw*gBmLsFXdMQX!p zx(#BpmRo>jmVTjs!)m)ySD{AEytI0nlx~TJa!(4~J~SOkUXta<_c4uaBh3!#6;tq1 zZKg spnKBVZw5HD6UZ12jj^QqRvp8C0njg~Ol25t`Tzg`07*qoM6N<$g4#srtpET3 literal 0 HcmV?d00001 diff --git a/static/img/Return Policy.png b/static/img/Return Policy.png new file mode 100644 index 0000000000000000000000000000000000000000..963d00342d07928cbaf5627b4e8058f48e3d41ba GIT binary patch literal 3297 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 c`5BS{r~^~ literal 0 HcmV?d00001 diff --git a/static/img/Shipped.png b/static/img/Shipped.png new file mode 100644 index 0000000000000000000000000000000000000000..c2df9050bb6dfab1e2bc3b7f46282b3c71c1c39a GIT binary patch literal 1708 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 X8Z<74!Uw&~00000NkvXXu0mjf+}jWw literal 0 HcmV?d00001 diff --git a/static/img/cart2.png b/static/img/cart2.png new file mode 100644 index 0000000000000000000000000000000000000000..c2cdd98072f9fd442bec99dd9d958d579a695956 GIT binary patch literal 1330 zcmV-21Px(>`6pHR9HvFn0w5ZV;ILjA;&`HG}YM5p~hyjlo&cp$(A{7{-KtQnkF=6<}~@k z5V2Y{vnl>?$f19nItfvvX$YAKkyGY0IfZ@N^|brwDeZXm9KV^Z||rP6dtu`UCsNHs1rE0q+CLf%U*vxDI%&GfIqx|+zR;jR^VIUP2dq=De!s4=6!+Tz=gmGzyZLnz)!$UzytAjhvij(4hHT3E&$}s z55RojQD9|&tFyk}1u-OmjR$%JpB@LU1->e8k^|&zTyPrT_jSN!z?vo;s6Z(Pb^WXe z2;C^@y|7l_KFWZ+!F__o(SO|Ptny(S=0ww}K25%R-Xis1|Fe$8XPK37WjSh3k%&?;K z1Z?PALYfRS_RGLUz?Y>3M)G68fxv8Fs(`FT&jSO1MZg)EQ#Jx7yBWYOz@3r!>N36D zJ2WE71bcI7ZzFA4)W!FJQEq6BGNR;#A^uQi(HDTp(v&bItYw*~1Jnz+KXT9~z~Pz8 zdgi=v?`Sui2HX(YS1XjWr?)5o$)PKo_$iqqPo@Ij0Ec8E)r(q!%<8uZ$gF%m@Gfv{ z=CGXwq?@&>7u9{a)Zy6!fdvARphnD-z+}eA3P+4wKXpIG43sTvkVF4}Tgkn=3&T zXCF5RdCA)^F0fAsI#Wz;w2<0_bz_9RQIL}wlKxr1ys{%hfp=Ea!SZ^kU|KQkr|FJi zk*T}KZFEa{_{|L`M0i?YNPkGUZ~(jH3xULI;v zciGAau3Wu~vn&x$g}_%2+5V`f?OckXlCZ3(*IVR=6H=24N*?gh_h=|`>KN$gcapSZYcDWDAq{% zBN)5aVi;M1P?2UOY%wtv`7Z#IfmGxl9~JwJ=-DgqZ2Pysm8rV*tz@DiU%{vD>Qv;r zM)Nt@P?WHOvc{NYyJDyet(k(6_%@$jy0Q)OP|ayJHUeDqZ#0Tt)<#iz+>(f^6rZ4c zU~oavN~{@o}u^~OA>N&=oVp+&N$Jj6kz|m#TF)66@!Ri#iNU3WSb*mBjN>@KvrNHEquOr2i op1-*#y$^tw0DpbmX#Ax24>j>an*r41IsgCw07*qoM6N<$g5CIYoB#j- literal 0 HcmV?d00001 diff --git a/static/img/delete.png b/static/img/delete.png new file mode 100644 index 0000000000000000000000000000000000000000..de04060bb9d278af78df7bd2e50af7cb6c49467e GIT binary patch literal 1285 zcmV+g1^W7lP)Px(zez+vRA@u(nO$fcRTRhn=T5rTv_wTqNm`B8uLq?~ixffe!3t78T17?hMO!j+ zH(3G+h!r1XeGs*IhzLpM&aA5m_~6Gwt7s```yhQ0Ka%uCsiw6^qM%@_G07xzkKA>( z#C2z9ck|)P-lt{m`S|UfGw0rW4xxsjlxnst>y9uC9|CYIfOR#fmx?X`_*MvUEC_-x zGnvev)!L$J1(j0Q5Ye;DoB^=0TD>GWBANl9nE4ec<*!NdX1*5aJ^(KRxV##}HOkBa zctJ|}dNq1gL1(jB(c0R29>A8!=s5uIG4mfn2vLorr7~J;O++aGPXV|wnwy@Up5B_x zW_6Ois-SbZ+)ZH^o{5aj3n6yfwmp$#JZawZyxW-hD*%@n*~P`hn=_fr_epwHL3^Ip z!OY(jSHy9gEkwjg#*^lwH~15P)PODWCQzpSB@ zGTG+`avpr& z-wfb>0B3F6{ydJtb=`XaTyI&{aoe`brnS-0(G4>*Gmj9_&r-@0aT{1Hv{Gspfa3tx z6VW@486vt{O8G;nTt1)Q76id5BHF;r$I|KaljUqFr4C0)VJ--Q z`+9nMPM4F5g?3%nAtDtiosm-B660uU$>#8cZQCD|%6Xpm7&8~2PfID=Vr+c}px}py zx*W%GYlS{QMEOW*LP}|NtN#qo^Cp@3hRD%=$8kO^6>?p7KM@^?WX?K{vn|HfI5TfI zbIg1&old`16ZG)#@H0Y)qSCmOvLj}7OgI!EEX&&0+1dF~sa!6XdpHck;-8t6QWlS+ z{}NS7nZr_HakSP4y1KgFZa^1TKq=K&=|*@oKEy`$SdtVQdAhN=R49uz!lMx$D-#}* z04g3$JAyfukZI#pn-vbE1R2}%}U=6pkGS)>i-IDZbtq6{mm^cEkUKCWK?WiC#C$W z9I$z|X5kSBP|x!QG=SJUVm&Lmn&EL!2=Qj*U`$H6b0q=G*>YWXjED*s+q!P!zVAP- zwSGS`{+ke@!?tbHYFL%w`~KE23@3=_swjPyt)UcheH=kPpWn2wuwXh`#SXz~B09>< zK~xN15%{P$Z`v4-Mk&$Qou8eZZSU>vEn7Z|g*Hu`wzjr@X6{*LXSSw4M?|L6@W#~C z)S%>$Hep00000NkvXXu0mjfBVTZ& literal 0 HcmV?d00001 diff --git a/static/img/favorites.png b/static/img/favorites.png new file mode 100644 index 0000000000000000000000000000000000000000..385732fe259f2b237393a557e36f2f38b4a06fc2 GIT binary patch literal 2170 zcmV-=2!;2FP)Px-G)Y83RA@u(n+3>qMG%G`ySq>f6uZU5?hb5G3~a^j!VYXKY)tI#?gG0TySqDh zWLNgv|DL$%5goYv_?d^IP3_2MKsY;7nkX7Rm{FOW+FNj|%10c@AI?V2QA3SA~Uq ztqS-c0WS&MS)$POz{bEA6-uuK91l#Mje8u}6nLiW{XqiOZ1*lv#@$&Oc&lX0G{B9( zj0IyJ2*>5eqB+_HJQCnf`5E}N%7l{V`vV7+jDHDO7I>#*j23VTFh;?c4}mp+hr0zl zF0eST05EZw?0w)-;343X8o*}(G`mp>#$E_)1AJRDm(MllqB%YV)(39y2Ji~Nfxz^@ z*ue0KXEdxl3+w}EPF2TeH{hrigW}FSQsJ~#2F?e@EBMgc;aI%d31CfkBjC6Iv}zMI zw~K?us^%(kTJG+1!HiQ~UIy+6j%#^f%1qIl zfenGr+5phWP<_h0z@ovT)aePJ&^yPE6am(h&r3AX^ezB)0=^D^cXjoc8zi1vvof^Y z(+P?}yi)|&opJ}GxO%GqdgfI0*q3Ez%0<|&P30#F-hTo>Mkd>GVfFqW*V(zc-zx&_ zxtcYZcEhZAA&khD6k-x9Ni~70=gW$A)wcAwOV`b;Si3N0w!z|Y&zWC7qH)T*DD=W`f?HALoyRK zeCV(YQ|YSekxv6+cyMmxu^}SLXn=%6mNaP>Ky%QZakDGqx-_?z6ahBeXx5rw6hTY> zjI)L~ zW=XHqi2sx&5ALYvw$(>8tNdNf-2_3lBN&N=8Pd9$hK4RV^)-Oez=bVKLUd-c1;4N+ zFi-I0aawipY;OU$;H6RqSl)b0SiR_w$|k!cB=PcVD;t`+nM?Za_rS5C5MYR_U8xA( zTh_NjaFnSo9y1qCGE!>ZRq3JU?|^VFbu>Dk{6n&;i^3WAnVwsUm#2beGP?uj!GvMb5TiwA4p9|FMJCydxFY(m7Y{a){Y5REsUUD zTSOwLg=B)6qG3@}ZQb1GQJ~+BGK|dno%T@1p`h4HO_R{0#E}ztD!d?Q_Q5m+R zi&35qVMRyQFOkn*9x|u+jSqsA={JT*F9AzMWoWXmD4LcDdp||XG9+23NC{BOUG61d z%~{VG#RO!qs)*tzxA_h$V6v0z<8sAn$$pAl9%f|FkAtlFt&bh9v$B#ZM=-V4s_ zsdUm_0=_PIP3M>WNLq9#vaUghq0=H@6uGvhZglutdI{L@uzHv|0=AmjPVKszg^|&{ znRFyvXj50uc3%MJCS@VOG;tVD*$t|Scjf02k|-7@hA_Tf?yz~T#k43A693x-!V*y- z-Rt23Sfn@Ui6U4*_hpAA_E(0IP5KQfo+aF`0%&8Tt&qEb7dow66fDxA!EX!%u<=k* zZxPQ-t4a(PIvHE2CLg_!ykXbZ9ado}rM0TlGZIh+#+^5ZHY@8^q?2jIwC{kU!gdEt z5iOKkG?(Y8mc2=u*h#U)CG)UA;NOg5NQHn>(*8qqj;&sVt!q3tpl``Ywn%S zVY6wv@YtRDSP&=t$|h(mY1h7 z-8PRmj%?dB60qUP>O`zZS@7E`c-<<@?qu4=HTU)`%diY_jRY)Fa91V^+DS7lz@1%z zR#Vm!rS!DS+n&ZVOpdR8$9K>qaML-`C6F zc_qb#v4&;RQ0szAQvk#)OwbAl=l}o!07*qoM6N<$g2q4+T>t<8 literal 0 HcmV?d00001 diff --git a/static/img/gantan.png b/static/img/gantan.png new file mode 100644 index 0000000000000000000000000000000000000000..eca55b9bc14f4cd02c8eeb7d050e825ca6b6c8a1 GIT binary patch literal 1325 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�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 M07*qoM6N<$g8c463;+NC literal 0 HcmV?d00001 diff --git a/static/img/like.png b/static/img/like.png new file mode 100644 index 0000000000000000000000000000000000000000..7749fcd87f5e716ed3606513e7c442af5691fe5d GIT binary patch literal 3081 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 Xn+{=0jn~dZ00000NkvXXu0mjf>bTyN literal 0 HcmV?d00001 diff --git a/static/img/logo.png b/static/img/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..b5771e209bb677e2ebd5ff766ad5ee11790f305a GIT binary patch literal 4023 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 z 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

wdG9`se)lT#FWmmMb69%f0DDl7 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

+ +#### 概要 + +custom-waterfalls-flow是一个瀑布流插件,灵活配置、简单易用、兼容多端、同时兼容vue2和vue3。 + +最近在做项目的时候需要用到瀑布流,于是在插件市场找了一些,下载量最高的是用了定位来做的,我认为瀑布流可以不用定位去实现,于是我就自己写了该插件。经过反复的测试优化,最终搞定! + +**设置列数:** 瀑布流的列数可以通过参数直接控制,实时监听,随改随生效。列数最小为2,最大默认为5,可以通过maxColumn参数去控制最大列数,理论上可以设置无限大,具体值自己拿捏。 + +**更新数据:** 瀑布流的每项数据,可以直接通过修改value,随改随生效,这样可以实现加载更多数据。已经渲染过的数据不会再次渲染,每次只会渲染新增的数据,这样避免了数据越多渲染越慢的情况。可以调用组件的```refresh()```方法进行数据刷新,注意vue2和vue3中调用子组件的方法有区别,也会在下面进行说明。 + +**展示方式:** 瀑布流可以是纯图片,可以使用插槽自定义文字描述,微信小程序与app、h5使用会有些区别,也会在下面具体说明。内容高度及排序都不用担心,会根据每项的内容高度自动计算。 + +**实现思路:** 通过配置列数,先渲染出每列,再计算每列的高度,最小的那列就加入一条数据进行渲染,然后再重复计算每列,高度小的加入数据...其实思路是很简单的。 + +uniapp插件市场地址:[https://ext.dcloud.net.cn/plugin?id=7594](https://ext.dcloud.net.cn/plugin?id=7594) + +
+ +#### 支持的平台 + +H5、app、微信小程序(这三个平台经过反复测试优化,兼容vue2和vue3)。 + +百度小程序:由于插槽不能循环渲染的限制,只支持纯图片瀑布流。 + +其他小程序:暂未测试,需要的可以自己测试和修改,思路肯定是没错的,主要是兼容插槽的问题。 + +nvue:暂不支持,后期可能会支持,目前需要的可以自己修改源码。 + +
+ +#### 使用方式 + +**1、导入插件** + +该组件符合uni_modules规范,使用Hbuilderx导入插件,导入到项目根目录中的uni_modules文件夹中。 + +**2、template中使用** + +uni_modules规范在项目页面中直接使用,不需要单独引入注册组件。 + +***纯图片瀑布流使用*** + +``` + +``` + +***微信小程序自定义内容使用*** + +微信小程序没有动态模板,使用for循环的方式进行渲染。 + +``` + +``` + +***h5、app端自定义内容使用*** + +使用作用域插槽实现 + +``` + +``` + +***小程序、h5、app等多端自定义内容使用*** + +条件渲染-多端同时兼容 + +``` + +``` + +
+ +#### 属性说明 + +参数|说明|类型|是否必填|可选值|默认值 +-|-|-|-|-|-| +value|渲染的列表|Array|是|-|- +column|列数|Number|否|2-maxColumn|2 +maxColumn|最大列数|Number|否|>2|5 +columnSpace|列之间的间距(单位是百分比)|Number|否|-|2 +imageKey|列表中的图片字段的键名|String|否|-|image +hideImageKey|隐藏图片字段的键名|String|否|-|hide +seat|自定义文字的位置,1-图片上方,2-图片下方|Number|否|1/2|2 +listStyle|单个展示项的样式|Object|否|示例:```{'background':'red'}```|- + +
+ +#### 事件说明 + +事件名称|说明|回调参数 +-|-|-| +@loaded|图片加载完成事件|- +@wapperClick|单项点击事件|单项对应参数 +@imageClick|图片点击事件|单项对应参数 + +
+ +#### 组件方法 + +事件名称|说明|参数|使用场景 +-|-|-|- +refresh|刷新数据,数据初始化,vue2中使用:```this.$refs.waterfallsFlowRef.refresh();```;vue3中使用:```const waterfallsFlowRef = ref(null);waterfallsFlowRef.value.refresh();```|-|下拉刷新等 + +
+ +#### refresh的使用示例 + +***vue2中使用*** + +``` + + +``` + +***vue3中使用*** + +``` + + +``` + +
+ +#### 隐藏单项图片示例 + +在数据列表中配置```hide:true```或者```hide:1```,就可以达到不显示图片的效果。支持使用参数hideImageKey自定义键名称,那就使用:```定义的键名称:true```或者```定义的键名称:1```。 + +``` + + +``` + +
+ +#### 完整示例 + +``` + + + + + +``` + +
+ +#### 温馨提示 + +1、该插件反复测试过微信小程序、h5、app-vue三个端,vue2和vue3都兼容,其他端可能需要测试改进。 + +2、该插件的使用hbuilderx版本最好升级到较新版本,我开发的版本是hbuilderx3.3.11.20220209。 + +3、对此插件或相关问题有好的建议,可以直接在评论区进行讨论。 + +4、希望遇到问题不要喷,也不要骂人,其实这种心情我能理解,写该插件也不是一时半会就完成了的,所以希望互相理解。只要有问题,我会第一时间回复解决。 + +5、对此插件有任何问题的可以在下方留言,我会第一时间回复和解决问题。还可以加QQ群进行前端技术交流 568984539,加群备注‘地区-名字-技术类型’。 + +#### 最后我想说:认为该插件对你有帮助的,记得收藏、好评,这样可以帮助到更多人哟! + +--- + +
+ +#### 关注我,不迷路 + +如果任何疑问的可以在评论区留言,还可以加QQ群交流:568984539,加群备注‘地区-名字-技术类型’。 + +更多前端等相关知识可关注我个人博客:https://blog.csdn.net/qq_42961150?spm=1011.2124.3001.5343 + +
+ +#### 个人作品展示 + +uniapp+vue3.2+unicloud开发微信小程序:**皮皮虎去水印**。 + +关注下方公众号:【**全网免费网盘资源**】、【**美团外卖饿了么天天领红包**】、【**去水印**】 + +![image](https://vkceyugu.cdn.bspapp.com/VKCEYUGU-bb657efd-fece-483e-a715-5daea480fde8/6e029310-aec8-46e9-9883-1c88dc1925ad.jpg) \ No newline at end of file diff --git a/uni_modules/uni-badge/changelog.md b/uni_modules/uni-badge/changelog.md new file mode 100644 index 0000000..544ecc1 --- /dev/null +++ b/uni_modules/uni-badge/changelog.md @@ -0,0 +1,29 @@ +## 1.2.0(2021-11-19) +- 优化 组件UI,并提供设计资源,详见:[https://uniapp.dcloud.io/component/uniui/resource](https://uniapp.dcloud.io/component/uniui/resource) +- 文档迁移,详见:[https://uniapp.dcloud.io/component/uniui/uni-badge](https://uniapp.dcloud.io/component/uniui/uni-badge) +## 1.1.7(2021-11-08) +- 优化 升级ui +- 修改 size 属性默认值调整为 small +- 修改 type 属性,默认值调整为 error,info 替换 default +## 1.1.6(2021-09-22) +- 修复 在字节小程序上样式不生效的 bug +## 1.1.5(2021-07-30) +- 组件兼容 vue3,如何创建vue3项目,详见 [uni-app 项目支持 vue3 介绍](https://ask.dcloud.net.cn/article/37834) +## 1.1.4(2021-07-29) +- 修复 去掉 nvue 不支持css 的 align-self 属性,nvue 下不暂支持 absolute 属性 +## 1.1.3(2021-06-24) +- 优化 示例项目 +## 1.1.1(2021-05-12) +- 新增 组件示例地址 +## 1.1.0(2021-05-12) +- 新增 uni-badge 的 absolute 属性,支持定位 +- 新增 uni-badge 的 offset 属性,支持定位偏移 +- 新增 uni-badge 的 is-dot 属性,支持仅显示有一个小点 +- 新增 uni-badge 的 max-num 属性,支持自定义封顶的数字值,超过 99 显示99+ +- 优化 uni-badge 属性 custom-style, 支持以对象形式自定义样式 +## 1.0.7(2021-05-07) +- 修复 uni-badge 在 App 端,数字小于10时不是圆形的bug +- 修复 uni-badge 在父元素不是 flex 布局时,宽度缩小的bug +- 新增 uni-badge 属性 custom-style, 支持自定义样式 +## 1.0.6(2021-02-04) +- 调整为uni_modules目录规范 diff --git a/uni_modules/uni-badge/components/uni-badge/uni-badge.vue b/uni_modules/uni-badge/components/uni-badge/uni-badge.vue new file mode 100644 index 0000000..1981b4e --- /dev/null +++ b/uni_modules/uni-badge/components/uni-badge/uni-badge.vue @@ -0,0 +1,268 @@ + + + + + diff --git a/uni_modules/uni-badge/package.json b/uni_modules/uni-badge/package.json new file mode 100644 index 0000000..7ba6d2f --- /dev/null +++ b/uni_modules/uni-badge/package.json @@ -0,0 +1,88 @@ +{ + "id": "uni-badge", + "displayName": "uni-badge 数字角标", + "version": "1.2.0", + "description": "数字角标(徽章)组件,在元素周围展示消息提醒,一般用于列表、九宫格、按钮等地方。", + "keywords": [ + "", + "badge", + "uni-ui", + "uniui", + "数字角标", + "徽章" +], + "repository": "https://github.com/dcloudio/uni-ui", + "engines": { + "HBuilderX": "" + }, + "directories": { + "example": "../../temps/example_temps" + }, + "dcloudext": { + "category": [ + "前端组件", + "通用组件" + ], + "sale": { + "regular": { + "price": "0.00" + }, + "sourcecode": { + "price": "0.00" + } + }, + "contact": { + "qq": "" + }, + "declaration": { + "ads": "无", + "data": "无", + "permissions": "无" + }, + "npmurl": "https://www.npmjs.com/package/@dcloudio/uni-ui" + }, + "uni_modules": { + "dependencies": [], + "encrypt": [], + "platforms": { + "cloud": { + "tcb": "y", + "aliyun": "y" + }, + "client": { + "App": { + "app-vue": "y", + "app-nvue": "y" + }, + "H5-mobile": { + "Safari": "y", + "Android Browser": "y", + "微信浏览器(Android)": "y", + "QQ浏览器(Android)": "y" + }, + "H5-pc": { + "Chrome": "y", + "IE": "y", + "Edge": "y", + "Firefox": "y", + "Safari": "y" + }, + "小程序": { + "微信": "y", + "阿里": "y", + "百度": "y", + "字节跳动": "y", + "QQ": "y" + }, + "快应用": { + "华为": "y", + "联盟": "y" + }, + "Vue": { + "vue2": "y", + "vue3": "y" + } + } + } + } +} \ No newline at end of file diff --git a/uni_modules/uni-badge/readme.md b/uni_modules/uni-badge/readme.md new file mode 100644 index 0000000..bdf175d --- /dev/null +++ b/uni_modules/uni-badge/readme.md @@ -0,0 +1,10 @@ +## Badge 数字角标 +> **组件名:uni-badge** +> 代码块: `uBadge` + +数字角标一般和其它控件(列表、9宫格等)配合使用,用于进行数量提示,默认为实心灰色背景, + +### [查看文档](https://uniapp.dcloud.io/component/uniui/uni-badge) +#### 如使用过程中有任何问题,或者您对uni-ui有一些好的建议,欢迎加入 uni-ui 交流群:871950839 + + diff --git a/uni_modules/uni-calendar/changelog.md b/uni_modules/uni-calendar/changelog.md new file mode 100644 index 0000000..6df4493 --- /dev/null +++ b/uni_modules/uni-calendar/changelog.md @@ -0,0 +1,16 @@ +## 1.4.5(2022-02-25) +- 修复 条件编译 nvue 不支持的 css 样式 +## 1.4.4(2022-02-25) +- 修复 条件编译 nvue 不支持的 css 样式 +## 1.4.3(2021-09-22) +- 修复 startDate、 endDate 属性失效的 bug +## 1.4.2(2021-08-24) +- 新增 支持国际化 +## 1.4.1(2021-08-05) +- 修复 弹出层被 tabbar 遮盖 bug +## 1.4.0(2021-07-30) +- 组件兼容 vue3,如何创建vue3项目,详见 [uni-app 项目支持 vue3 介绍](https://ask.dcloud.net.cn/article/37834) +## 1.3.16(2021-05-12) +- 新增 组件示例地址 +## 1.3.15(2021-02-04) +- 调整为uni_modules目录规范 diff --git a/uni_modules/uni-calendar/components/uni-calendar/calendar.js b/uni_modules/uni-calendar/components/uni-calendar/calendar.js new file mode 100644 index 0000000..b8d7d6f --- /dev/null +++ b/uni_modules/uni-calendar/components/uni-calendar/calendar.js @@ -0,0 +1,546 @@ +/** +* @1900-2100区间内的公历、农历互转 +* @charset UTF-8 +* @github https://github.com/jjonline/calendar.js +* @Author Jea杨(JJonline@JJonline.Cn) +* @Time 2014-7-21 +* @Time 2016-8-13 Fixed 2033hex、Attribution Annals +* @Time 2016-9-25 Fixed lunar LeapMonth Param Bug +* @Time 2017-7-24 Fixed use getTerm Func Param Error.use solar year,NOT lunar year +* @Version 1.0.3 +* @公历转农历:calendar.solar2lunar(1987,11,01); //[you can ignore params of prefix 0] +* @农历转公历:calendar.lunar2solar(1987,09,10); //[you can ignore params of prefix 0] +*/ +/* eslint-disable */ +var calendar = { + + /** + * 农历1900-2100的润大小信息表 + * @Array Of Property + * @return Hex + */ + lunarInfo: [0x04bd8, 0x04ae0, 0x0a570, 0x054d5, 0x0d260, 0x0d950, 0x16554, 0x056a0, 0x09ad0, 0x055d2, // 1900-1909 + 0x04ae0, 0x0a5b6, 0x0a4d0, 0x0d250, 0x1d255, 0x0b540, 0x0d6a0, 0x0ada2, 0x095b0, 0x14977, // 1910-1919 + 0x04970, 0x0a4b0, 0x0b4b5, 0x06a50, 0x06d40, 0x1ab54, 0x02b60, 0x09570, 0x052f2, 0x04970, // 1920-1929 + 0x06566, 0x0d4a0, 0x0ea50, 0x06e95, 0x05ad0, 0x02b60, 0x186e3, 0x092e0, 0x1c8d7, 0x0c950, // 1930-1939 + 0x0d4a0, 0x1d8a6, 0x0b550, 0x056a0, 0x1a5b4, 0x025d0, 0x092d0, 0x0d2b2, 0x0a950, 0x0b557, // 1940-1949 + 0x06ca0, 0x0b550, 0x15355, 0x04da0, 0x0a5b0, 0x14573, 0x052b0, 0x0a9a8, 0x0e950, 0x06aa0, // 1950-1959 + 0x0aea6, 0x0ab50, 0x04b60, 0x0aae4, 0x0a570, 0x05260, 0x0f263, 0x0d950, 0x05b57, 0x056a0, // 1960-1969 + 0x096d0, 0x04dd5, 0x04ad0, 0x0a4d0, 0x0d4d4, 0x0d250, 0x0d558, 0x0b540, 0x0b6a0, 0x195a6, // 1970-1979 + 0x095b0, 0x049b0, 0x0a974, 0x0a4b0, 0x0b27a, 0x06a50, 0x06d40, 0x0af46, 0x0ab60, 0x09570, // 1980-1989 + 0x04af5, 0x04970, 0x064b0, 0x074a3, 0x0ea50, 0x06b58, 0x05ac0, 0x0ab60, 0x096d5, 0x092e0, // 1990-1999 + 0x0c960, 0x0d954, 0x0d4a0, 0x0da50, 0x07552, 0x056a0, 0x0abb7, 0x025d0, 0x092d0, 0x0cab5, // 2000-2009 + 0x0a950, 0x0b4a0, 0x0baa4, 0x0ad50, 0x055d9, 0x04ba0, 0x0a5b0, 0x15176, 0x052b0, 0x0a930, // 2010-2019 + 0x07954, 0x06aa0, 0x0ad50, 0x05b52, 0x04b60, 0x0a6e6, 0x0a4e0, 0x0d260, 0x0ea65, 0x0d530, // 2020-2029 + 0x05aa0, 0x076a3, 0x096d0, 0x04afb, 0x04ad0, 0x0a4d0, 0x1d0b6, 0x0d250, 0x0d520, 0x0dd45, // 2030-2039 + 0x0b5a0, 0x056d0, 0x055b2, 0x049b0, 0x0a577, 0x0a4b0, 0x0aa50, 0x1b255, 0x06d20, 0x0ada0, // 2040-2049 + /** Add By JJonline@JJonline.Cn**/ + 0x14b63, 0x09370, 0x049f8, 0x04970, 0x064b0, 0x168a6, 0x0ea50, 0x06b20, 0x1a6c4, 0x0aae0, // 2050-2059 + 0x0a2e0, 0x0d2e3, 0x0c960, 0x0d557, 0x0d4a0, 0x0da50, 0x05d55, 0x056a0, 0x0a6d0, 0x055d4, // 2060-2069 + 0x052d0, 0x0a9b8, 0x0a950, 0x0b4a0, 0x0b6a6, 0x0ad50, 0x055a0, 0x0aba4, 0x0a5b0, 0x052b0, // 2070-2079 + 0x0b273, 0x06930, 0x07337, 0x06aa0, 0x0ad50, 0x14b55, 0x04b60, 0x0a570, 0x054e4, 0x0d160, // 2080-2089 + 0x0e968, 0x0d520, 0x0daa0, 0x16aa6, 0x056d0, 0x04ae0, 0x0a9d4, 0x0a2d0, 0x0d150, 0x0f252, // 2090-2099 + 0x0d520], // 2100 + + /** + * 公历每个月份的天数普通表 + * @Array Of Property + * @return Number + */ + solarMonth: [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31], + + /** + * 天干地支之天干速查表 + * @Array Of Property trans["甲","乙","丙","丁","戊","己","庚","辛","壬","癸"] + * @return Cn string + */ + Gan: ['\u7532', '\u4e59', '\u4e19', '\u4e01', '\u620a', '\u5df1', '\u5e9a', '\u8f9b', '\u58ec', '\u7678'], + + /** + * 天干地支之地支速查表 + * @Array Of Property + * @trans["子","丑","寅","卯","辰","巳","午","未","申","酉","戌","亥"] + * @return Cn string + */ + Zhi: ['\u5b50', '\u4e11', '\u5bc5', '\u536f', '\u8fb0', '\u5df3', '\u5348', '\u672a', '\u7533', '\u9149', '\u620c', '\u4ea5'], + + /** + * 天干地支之地支速查表<=>生肖 + * @Array Of Property + * @trans["鼠","牛","虎","兔","龙","蛇","马","羊","猴","鸡","狗","猪"] + * @return Cn string + */ + Animals: ['\u9f20', '\u725b', '\u864e', '\u5154', '\u9f99', '\u86c7', '\u9a6c', '\u7f8a', '\u7334', '\u9e21', '\u72d7', '\u732a'], + + /** + * 24节气速查表 + * @Array Of Property + * @trans["小寒","大寒","立春","雨水","惊蛰","春分","清明","谷雨","立夏","小满","芒种","夏至","小暑","大暑","立秋","处暑","白露","秋分","寒露","霜降","立冬","小雪","大雪","冬至"] + * @return Cn string + */ + solarTerm: ['\u5c0f\u5bd2', '\u5927\u5bd2', '\u7acb\u6625', '\u96e8\u6c34', '\u60ca\u86f0', '\u6625\u5206', '\u6e05\u660e', '\u8c37\u96e8', '\u7acb\u590f', '\u5c0f\u6ee1', '\u8292\u79cd', '\u590f\u81f3', '\u5c0f\u6691', '\u5927\u6691', '\u7acb\u79cb', '\u5904\u6691', '\u767d\u9732', '\u79cb\u5206', '\u5bd2\u9732', '\u971c\u964d', '\u7acb\u51ac', '\u5c0f\u96ea', '\u5927\u96ea', '\u51ac\u81f3'], + + /** + * 1900-2100各年的24节气日期速查表 + * @Array Of Property + * @return 0x string For splice + */ + sTermInfo: ['9778397bd097c36b0b6fc9274c91aa', '97b6b97bd19801ec9210c965cc920e', '97bcf97c3598082c95f8c965cc920f', + '97bd0b06bdb0722c965ce1cfcc920f', 'b027097bd097c36b0b6fc9274c91aa', '97b6b97bd19801ec9210c965cc920e', + '97bcf97c359801ec95f8c965cc920f', '97bd0b06bdb0722c965ce1cfcc920f', 'b027097bd097c36b0b6fc9274c91aa', + '97b6b97bd19801ec9210c965cc920e', '97bcf97c359801ec95f8c965cc920f', '97bd0b06bdb0722c965ce1cfcc920f', + 'b027097bd097c36b0b6fc9274c91aa', '9778397bd19801ec9210c965cc920e', '97b6b97bd19801ec95f8c965cc920f', + '97bd09801d98082c95f8e1cfcc920f', '97bd097bd097c36b0b6fc9210c8dc2', '9778397bd197c36c9210c9274c91aa', + '97b6b97bd19801ec95f8c965cc920e', '97bd09801d98082c95f8e1cfcc920f', '97bd097bd097c36b0b6fc9210c8dc2', + '9778397bd097c36c9210c9274c91aa', '97b6b97bd19801ec95f8c965cc920e', '97bcf97c3598082c95f8e1cfcc920f', + '97bd097bd097c36b0b6fc9210c8dc2', '9778397bd097c36c9210c9274c91aa', '97b6b97bd19801ec9210c965cc920e', + '97bcf97c3598082c95f8c965cc920f', '97bd097bd097c35b0b6fc920fb0722', '9778397bd097c36b0b6fc9274c91aa', + '97b6b97bd19801ec9210c965cc920e', '97bcf97c3598082c95f8c965cc920f', '97bd097bd097c35b0b6fc920fb0722', + '9778397bd097c36b0b6fc9274c91aa', '97b6b97bd19801ec9210c965cc920e', '97bcf97c359801ec95f8c965cc920f', + '97bd097bd097c35b0b6fc920fb0722', '9778397bd097c36b0b6fc9274c91aa', '97b6b97bd19801ec9210c965cc920e', + '97bcf97c359801ec95f8c965cc920f', '97bd097bd097c35b0b6fc920fb0722', '9778397bd097c36b0b6fc9274c91aa', + '97b6b97bd19801ec9210c965cc920e', '97bcf97c359801ec95f8c965cc920f', '97bd097bd07f595b0b6fc920fb0722', + '9778397bd097c36b0b6fc9210c8dc2', '9778397bd19801ec9210c9274c920e', '97b6b97bd19801ec95f8c965cc920f', + '97bd07f5307f595b0b0bc920fb0722', '7f0e397bd097c36b0b6fc9210c8dc2', '9778397bd097c36c9210c9274c920e', + '97b6b97bd19801ec95f8c965cc920f', '97bd07f5307f595b0b0bc920fb0722', '7f0e397bd097c36b0b6fc9210c8dc2', + '9778397bd097c36c9210c9274c91aa', '97b6b97bd19801ec9210c965cc920e', '97bd07f1487f595b0b0bc920fb0722', + '7f0e397bd097c36b0b6fc9210c8dc2', '9778397bd097c36b0b6fc9274c91aa', '97b6b97bd19801ec9210c965cc920e', + '97bcf7f1487f595b0b0bb0b6fb0722', '7f0e397bd097c35b0b6fc920fb0722', '9778397bd097c36b0b6fc9274c91aa', + '97b6b97bd19801ec9210c965cc920e', '97bcf7f1487f595b0b0bb0b6fb0722', '7f0e397bd097c35b0b6fc920fb0722', + '9778397bd097c36b0b6fc9274c91aa', '97b6b97bd19801ec9210c965cc920e', '97bcf7f1487f531b0b0bb0b6fb0722', + '7f0e397bd097c35b0b6fc920fb0722', '9778397bd097c36b0b6fc9274c91aa', '97b6b97bd19801ec9210c965cc920e', + '97bcf7f1487f531b0b0bb0b6fb0722', '7f0e397bd07f595b0b6fc920fb0722', '9778397bd097c36b0b6fc9274c91aa', + '97b6b97bd19801ec9210c9274c920e', '97bcf7f0e47f531b0b0bb0b6fb0722', '7f0e397bd07f595b0b0bc920fb0722', + '9778397bd097c36b0b6fc9210c91aa', '97b6b97bd197c36c9210c9274c920e', '97bcf7f0e47f531b0b0bb0b6fb0722', + '7f0e397bd07f595b0b0bc920fb0722', '9778397bd097c36b0b6fc9210c8dc2', '9778397bd097c36c9210c9274c920e', + '97b6b7f0e47f531b0723b0b6fb0722', '7f0e37f5307f595b0b0bc920fb0722', '7f0e397bd097c36b0b6fc9210c8dc2', + '9778397bd097c36b0b70c9274c91aa', '97b6b7f0e47f531b0723b0b6fb0721', '7f0e37f1487f595b0b0bb0b6fb0722', + '7f0e397bd097c35b0b6fc9210c8dc2', '9778397bd097c36b0b6fc9274c91aa', '97b6b7f0e47f531b0723b0b6fb0721', + '7f0e27f1487f595b0b0bb0b6fb0722', '7f0e397bd097c35b0b6fc920fb0722', '9778397bd097c36b0b6fc9274c91aa', + '97b6b7f0e47f531b0723b0b6fb0721', '7f0e27f1487f531b0b0bb0b6fb0722', '7f0e397bd097c35b0b6fc920fb0722', + '9778397bd097c36b0b6fc9274c91aa', '97b6b7f0e47f531b0723b0b6fb0721', '7f0e27f1487f531b0b0bb0b6fb0722', + '7f0e397bd097c35b0b6fc920fb0722', '9778397bd097c36b0b6fc9274c91aa', '97b6b7f0e47f531b0723b0b6fb0721', + '7f0e27f1487f531b0b0bb0b6fb0722', '7f0e397bd07f595b0b0bc920fb0722', '9778397bd097c36b0b6fc9274c91aa', + '97b6b7f0e47f531b0723b0787b0721', '7f0e27f0e47f531b0b0bb0b6fb0722', '7f0e397bd07f595b0b0bc920fb0722', + '9778397bd097c36b0b6fc9210c91aa', '97b6b7f0e47f149b0723b0787b0721', '7f0e27f0e47f531b0723b0b6fb0722', + '7f0e397bd07f595b0b0bc920fb0722', '9778397bd097c36b0b6fc9210c8dc2', '977837f0e37f149b0723b0787b0721', + '7f07e7f0e47f531b0723b0b6fb0722', '7f0e37f5307f595b0b0bc920fb0722', '7f0e397bd097c35b0b6fc9210c8dc2', + '977837f0e37f14998082b0787b0721', '7f07e7f0e47f531b0723b0b6fb0721', '7f0e37f1487f595b0b0bb0b6fb0722', + '7f0e397bd097c35b0b6fc9210c8dc2', '977837f0e37f14998082b0787b06bd', '7f07e7f0e47f531b0723b0b6fb0721', + '7f0e27f1487f531b0b0bb0b6fb0722', '7f0e397bd097c35b0b6fc920fb0722', '977837f0e37f14998082b0787b06bd', + '7f07e7f0e47f531b0723b0b6fb0721', '7f0e27f1487f531b0b0bb0b6fb0722', '7f0e397bd097c35b0b6fc920fb0722', + '977837f0e37f14998082b0787b06bd', '7f07e7f0e47f531b0723b0b6fb0721', '7f0e27f1487f531b0b0bb0b6fb0722', + '7f0e397bd07f595b0b0bc920fb0722', '977837f0e37f14998082b0787b06bd', '7f07e7f0e47f531b0723b0b6fb0721', + '7f0e27f1487f531b0b0bb0b6fb0722', '7f0e397bd07f595b0b0bc920fb0722', '977837f0e37f14998082b0787b06bd', + '7f07e7f0e47f149b0723b0787b0721', '7f0e27f0e47f531b0b0bb0b6fb0722', '7f0e397bd07f595b0b0bc920fb0722', + '977837f0e37f14998082b0723b06bd', '7f07e7f0e37f149b0723b0787b0721', '7f0e27f0e47f531b0723b0b6fb0722', + '7f0e397bd07f595b0b0bc920fb0722', '977837f0e37f14898082b0723b02d5', '7ec967f0e37f14998082b0787b0721', + '7f07e7f0e47f531b0723b0b6fb0722', '7f0e37f1487f595b0b0bb0b6fb0722', '7f0e37f0e37f14898082b0723b02d5', + '7ec967f0e37f14998082b0787b0721', '7f07e7f0e47f531b0723b0b6fb0722', '7f0e37f1487f531b0b0bb0b6fb0722', + '7f0e37f0e37f14898082b0723b02d5', '7ec967f0e37f14998082b0787b06bd', '7f07e7f0e47f531b0723b0b6fb0721', + '7f0e37f1487f531b0b0bb0b6fb0722', '7f0e37f0e37f14898082b072297c35', '7ec967f0e37f14998082b0787b06bd', + '7f07e7f0e47f531b0723b0b6fb0721', '7f0e27f1487f531b0b0bb0b6fb0722', '7f0e37f0e37f14898082b072297c35', + '7ec967f0e37f14998082b0787b06bd', '7f07e7f0e47f531b0723b0b6fb0721', '7f0e27f1487f531b0b0bb0b6fb0722', + '7f0e37f0e366aa89801eb072297c35', '7ec967f0e37f14998082b0787b06bd', '7f07e7f0e47f149b0723b0787b0721', + '7f0e27f1487f531b0b0bb0b6fb0722', '7f0e37f0e366aa89801eb072297c35', '7ec967f0e37f14998082b0723b06bd', + '7f07e7f0e47f149b0723b0787b0721', '7f0e27f0e47f531b0723b0b6fb0722', '7f0e37f0e366aa89801eb072297c35', + '7ec967f0e37f14998082b0723b06bd', '7f07e7f0e37f14998083b0787b0721', '7f0e27f0e47f531b0723b0b6fb0722', + '7f0e37f0e366aa89801eb072297c35', '7ec967f0e37f14898082b0723b02d5', '7f07e7f0e37f14998082b0787b0721', + '7f07e7f0e47f531b0723b0b6fb0722', '7f0e36665b66aa89801e9808297c35', '665f67f0e37f14898082b0723b02d5', + '7ec967f0e37f14998082b0787b0721', '7f07e7f0e47f531b0723b0b6fb0722', '7f0e36665b66a449801e9808297c35', + '665f67f0e37f14898082b0723b02d5', '7ec967f0e37f14998082b0787b06bd', '7f07e7f0e47f531b0723b0b6fb0721', + '7f0e36665b66a449801e9808297c35', '665f67f0e37f14898082b072297c35', '7ec967f0e37f14998082b0787b06bd', + '7f07e7f0e47f531b0723b0b6fb0721', '7f0e26665b66a449801e9808297c35', '665f67f0e37f1489801eb072297c35', + '7ec967f0e37f14998082b0787b06bd', '7f07e7f0e47f531b0723b0b6fb0721', '7f0e27f1487f531b0b0bb0b6fb0722'], + + /** + * 数字转中文速查表 + * @Array Of Property + * @trans ['日','一','二','三','四','五','六','七','八','九','十'] + * @return Cn string + */ + nStr1: ['\u65e5', '\u4e00', '\u4e8c', '\u4e09', '\u56db', '\u4e94', '\u516d', '\u4e03', '\u516b', '\u4e5d', '\u5341'], + + /** + * 日期转农历称呼速查表 + * @Array Of Property + * @trans ['初','十','廿','卅'] + * @return Cn string + */ + nStr2: ['\u521d', '\u5341', '\u5eff', '\u5345'], + + /** + * 月份转农历称呼速查表 + * @Array Of Property + * @trans ['正','一','二','三','四','五','六','七','八','九','十','冬','腊'] + * @return Cn string + */ + nStr3: ['\u6b63', '\u4e8c', '\u4e09', '\u56db', '\u4e94', '\u516d', '\u4e03', '\u516b', '\u4e5d', '\u5341', '\u51ac', '\u814a'], + + /** + * 返回农历y年一整年的总天数 + * @param lunar Year + * @return Number + * @eg:var count = calendar.lYearDays(1987) ;//count=387 + */ + lYearDays: function (y) { + var i; var sum = 348 + for (i = 0x8000; i > 0x8; i >>= 1) { sum += (this.lunarInfo[y - 1900] & i) ? 1 : 0 } + return (sum + this.leapDays(y)) + }, + + /** + * 返回农历y年闰月是哪个月;若y年没有闰月 则返回0 + * @param lunar Year + * @return Number (0-12) + * @eg:var leapMonth = calendar.leapMonth(1987) ;//leapMonth=6 + */ + leapMonth: function (y) { // 闰字编码 \u95f0 + return (this.lunarInfo[y - 1900] & 0xf) + }, + + /** + * 返回农历y年闰月的天数 若该年没有闰月则返回0 + * @param lunar Year + * @return Number (0、29、30) + * @eg:var leapMonthDay = calendar.leapDays(1987) ;//leapMonthDay=29 + */ + leapDays: function (y) { + if (this.leapMonth(y)) { + return ((this.lunarInfo[y - 1900] & 0x10000) ? 30 : 29) + } + return (0) + }, + + /** + * 返回农历y年m月(非闰月)的总天数,计算m为闰月时的天数请使用leapDays方法 + * @param lunar Year + * @return Number (-1、29、30) + * @eg:var MonthDay = calendar.monthDays(1987,9) ;//MonthDay=29 + */ + monthDays: function (y, m) { + if (m > 12 || m < 1) { return -1 }// 月份参数从1至12,参数错误返回-1 + return ((this.lunarInfo[y - 1900] & (0x10000 >> m)) ? 30 : 29) + }, + + /** + * 返回公历(!)y年m月的天数 + * @param solar Year + * @return Number (-1、28、29、30、31) + * @eg:var solarMonthDay = calendar.leapDays(1987) ;//solarMonthDay=30 + */ + solarDays: function (y, m) { + if (m > 12 || m < 1) { return -1 } // 若参数错误 返回-1 + var ms = m - 1 + if (ms == 1) { // 2月份的闰平规律测算后确认返回28或29 + return (((y % 4 == 0) && (y % 100 != 0) || (y % 400 == 0)) ? 29 : 28) + } else { + return (this.solarMonth[ms]) + } + }, + + /** + * 农历年份转换为干支纪年 + * @param lYear 农历年的年份数 + * @return Cn string + */ + toGanZhiYear: function (lYear) { + var ganKey = (lYear - 3) % 10 + var zhiKey = (lYear - 3) % 12 + if (ganKey == 0) ganKey = 10// 如果余数为0则为最后一个天干 + if (zhiKey == 0) zhiKey = 12// 如果余数为0则为最后一个地支 + return this.Gan[ganKey - 1] + this.Zhi[zhiKey - 1] + }, + + /** + * 公历月、日判断所属星座 + * @param cMonth [description] + * @param cDay [description] + * @return Cn string + */ + toAstro: function (cMonth, cDay) { + var s = '\u9b54\u7faf\u6c34\u74f6\u53cc\u9c7c\u767d\u7f8a\u91d1\u725b\u53cc\u5b50\u5de8\u87f9\u72ee\u5b50\u5904\u5973\u5929\u79e4\u5929\u874e\u5c04\u624b\u9b54\u7faf' + var arr = [20, 19, 21, 21, 21, 22, 23, 23, 23, 23, 22, 22] + return s.substr(cMonth * 2 - (cDay < arr[cMonth - 1] ? 2 : 0), 2) + '\u5ea7'// 座 + }, + + /** + * 传入offset偏移量返回干支 + * @param offset 相对甲子的偏移量 + * @return Cn string + */ + toGanZhi: function (offset) { + return this.Gan[offset % 10] + this.Zhi[offset % 12] + }, + + /** + * 传入公历(!)y年获得该年第n个节气的公历日期 + * @param y公历年(1900-2100);n二十四节气中的第几个节气(1~24);从n=1(小寒)算起 + * @return day Number + * @eg:var _24 = calendar.getTerm(1987,3) ;//_24=4;意即1987年2月4日立春 + */ + getTerm: function (y, n) { + if (y < 1900 || y > 2100) { return -1 } + if (n < 1 || n > 24) { return -1 } + var _table = this.sTermInfo[y - 1900] + var _info = [ + parseInt('0x' + _table.substr(0, 5)).toString(), + parseInt('0x' + _table.substr(5, 5)).toString(), + parseInt('0x' + _table.substr(10, 5)).toString(), + parseInt('0x' + _table.substr(15, 5)).toString(), + parseInt('0x' + _table.substr(20, 5)).toString(), + parseInt('0x' + _table.substr(25, 5)).toString() + ] + var _calday = [ + _info[0].substr(0, 1), + _info[0].substr(1, 2), + _info[0].substr(3, 1), + _info[0].substr(4, 2), + + _info[1].substr(0, 1), + _info[1].substr(1, 2), + _info[1].substr(3, 1), + _info[1].substr(4, 2), + + _info[2].substr(0, 1), + _info[2].substr(1, 2), + _info[2].substr(3, 1), + _info[2].substr(4, 2), + + _info[3].substr(0, 1), + _info[3].substr(1, 2), + _info[3].substr(3, 1), + _info[3].substr(4, 2), + + _info[4].substr(0, 1), + _info[4].substr(1, 2), + _info[4].substr(3, 1), + _info[4].substr(4, 2), + + _info[5].substr(0, 1), + _info[5].substr(1, 2), + _info[5].substr(3, 1), + _info[5].substr(4, 2) + ] + return parseInt(_calday[n - 1]) + }, + + /** + * 传入农历数字月份返回汉语通俗表示法 + * @param lunar month + * @return Cn string + * @eg:var cnMonth = calendar.toChinaMonth(12) ;//cnMonth='腊月' + */ + toChinaMonth: function (m) { // 月 => \u6708 + if (m > 12 || m < 1) { return -1 } // 若参数错误 返回-1 + var s = this.nStr3[m - 1] + s += '\u6708'// 加上月字 + return s + }, + + /** + * 传入农历日期数字返回汉字表示法 + * @param lunar day + * @return Cn string + * @eg:var cnDay = calendar.toChinaDay(21) ;//cnMonth='廿一' + */ + toChinaDay: function (d) { // 日 => \u65e5 + var s + switch (d) { + case 10: + s = '\u521d\u5341'; break + case 20: + s = '\u4e8c\u5341'; break + break + case 30: + s = '\u4e09\u5341'; break + break + default : + s = this.nStr2[Math.floor(d / 10)] + s += this.nStr1[d % 10] + } + return (s) + }, + + /** + * 年份转生肖[!仅能大致转换] => 精确划分生肖分界线是“立春” + * @param y year + * @return Cn string + * @eg:var animal = calendar.getAnimal(1987) ;//animal='兔' + */ + getAnimal: function (y) { + return this.Animals[(y - 4) % 12] + }, + + /** + * 传入阳历年月日获得详细的公历、农历object信息 <=>JSON + * @param y solar year + * @param m solar month + * @param d solar day + * @return JSON object + * @eg:console.log(calendar.solar2lunar(1987,11,01)); + */ + solar2lunar: function (y, m, d) { // 参数区间1900.1.31~2100.12.31 + // 年份限定、上限 + if (y < 1900 || y > 2100) { + return -1// undefined转换为数字变为NaN + } + // 公历传参最下限 + if (y == 1900 && m == 1 && d < 31) { + return -1 + } + // 未传参 获得当天 + if (!y) { + var objDate = new Date() + } else { + var objDate = new Date(y, parseInt(m) - 1, d) + } + var i; var leap = 0; var temp = 0 + // 修正ymd参数 + var y = objDate.getFullYear() + var m = objDate.getMonth() + 1 + var d = objDate.getDate() + var offset = (Date.UTC(objDate.getFullYear(), objDate.getMonth(), objDate.getDate()) - Date.UTC(1900, 0, 31)) / 86400000 + for (i = 1900; i < 2101 && offset > 0; i++) { + temp = this.lYearDays(i) + offset -= temp + } + if (offset < 0) { + offset += temp; i-- + } + + // 是否今天 + var isTodayObj = new Date() + var isToday = false + if (isTodayObj.getFullYear() == y && isTodayObj.getMonth() + 1 == m && isTodayObj.getDate() == d) { + isToday = true + } + // 星期几 + var nWeek = objDate.getDay() + var cWeek = this.nStr1[nWeek] + // 数字表示周几顺应天朝周一开始的惯例 + if (nWeek == 0) { + nWeek = 7 + } + // 农历年 + var year = i + var leap = this.leapMonth(i) // 闰哪个月 + var isLeap = false + + // 效验闰月 + for (i = 1; i < 13 && offset > 0; i++) { + // 闰月 + if (leap > 0 && i == (leap + 1) && isLeap == false) { + --i + isLeap = true; temp = this.leapDays(year) // 计算农历闰月天数 + } else { + temp = this.monthDays(year, i)// 计算农历普通月天数 + } + // 解除闰月 + if (isLeap == true && i == (leap + 1)) { isLeap = false } + offset -= temp + } + // 闰月导致数组下标重叠取反 + if (offset == 0 && leap > 0 && i == leap + 1) { + if (isLeap) { + isLeap = false + } else { + isLeap = true; --i + } + } + if (offset < 0) { + offset += temp; --i + } + // 农历月 + var month = i + // 农历日 + var day = offset + 1 + // 天干地支处理 + var sm = m - 1 + var gzY = this.toGanZhiYear(year) + + // 当月的两个节气 + // bugfix-2017-7-24 11:03:38 use lunar Year Param `y` Not `year` + var firstNode = this.getTerm(y, (m * 2 - 1))// 返回当月「节」为几日开始 + var secondNode = this.getTerm(y, (m * 2))// 返回当月「节」为几日开始 + + // 依据12节气修正干支月 + var gzM = this.toGanZhi((y - 1900) * 12 + m + 11) + if (d >= firstNode) { + gzM = this.toGanZhi((y - 1900) * 12 + m + 12) + } + + // 传入的日期的节气与否 + var isTerm = false + var Term = null + if (firstNode == d) { + isTerm = true + Term = this.solarTerm[m * 2 - 2] + } + if (secondNode == d) { + isTerm = true + Term = this.solarTerm[m * 2 - 1] + } + // 日柱 当月一日与 1900/1/1 相差天数 + var dayCyclical = Date.UTC(y, sm, 1, 0, 0, 0, 0) / 86400000 + 25567 + 10 + var gzD = this.toGanZhi(dayCyclical + d - 1) + // 该日期所属的星座 + var astro = this.toAstro(m, d) + + return { 'lYear': year, 'lMonth': month, 'lDay': day, 'Animal': this.getAnimal(year), 'IMonthCn': (isLeap ? '\u95f0' : '') + this.toChinaMonth(month), 'IDayCn': this.toChinaDay(day), 'cYear': y, 'cMonth': m, 'cDay': d, 'gzYear': gzY, 'gzMonth': gzM, 'gzDay': gzD, 'isToday': isToday, 'isLeap': isLeap, 'nWeek': nWeek, 'ncWeek': '\u661f\u671f' + cWeek, 'isTerm': isTerm, 'Term': Term, 'astro': astro } + }, + + /** + * 传入农历年月日以及传入的月份是否闰月获得详细的公历、农历object信息 <=>JSON + * @param y lunar year + * @param m lunar month + * @param d lunar day + * @param isLeapMonth lunar month is leap or not.[如果是农历闰月第四个参数赋值true即可] + * @return JSON object + * @eg:console.log(calendar.lunar2solar(1987,9,10)); + */ + lunar2solar: function (y, m, d, isLeapMonth) { // 参数区间1900.1.31~2100.12.1 + var isLeapMonth = !!isLeapMonth + var leapOffset = 0 + var leapMonth = this.leapMonth(y) + var leapDay = this.leapDays(y) + if (isLeapMonth && (leapMonth != m)) { return -1 }// 传参要求计算该闰月公历 但该年得出的闰月与传参的月份并不同 + if (y == 2100 && m == 12 && d > 1 || y == 1900 && m == 1 && d < 31) { return -1 }// 超出了最大极限值 + var day = this.monthDays(y, m) + var _day = day + // bugFix 2016-9-25 + // if month is leap, _day use leapDays method + if (isLeapMonth) { + _day = this.leapDays(y, m) + } + if (y < 1900 || y > 2100 || d > _day) { return -1 }// 参数合法性效验 + + // 计算农历的时间差 + var offset = 0 + for (var i = 1900; i < y; i++) { + offset += this.lYearDays(i) + } + var leap = 0; var isAdd = false + for (var i = 1; i < m; i++) { + leap = this.leapMonth(y) + if (!isAdd) { // 处理闰月 + if (leap <= i && leap > 0) { + offset += this.leapDays(y); isAdd = true + } + } + offset += this.monthDays(y, i) + } + // 转换闰月农历 需补充该年闰月的前一个月的时差 + if (isLeapMonth) { offset += day } + // 1900年农历正月一日的公历时间为1900年1月30日0时0分0秒(该时间也是本农历的最开始起始点) + var stmap = Date.UTC(1900, 1, 30, 0, 0, 0) + var calObj = new Date((offset + d - 31) * 86400000 + stmap) + var cY = calObj.getUTCFullYear() + var cM = calObj.getUTCMonth() + 1 + var cD = calObj.getUTCDate() + + return this.solar2lunar(cY, cM, cD) + } +} + +export default calendar diff --git a/uni_modules/uni-calendar/components/uni-calendar/i18n/en.json b/uni_modules/uni-calendar/components/uni-calendar/i18n/en.json new file mode 100644 index 0000000..fcbd13c --- /dev/null +++ b/uni_modules/uni-calendar/components/uni-calendar/i18n/en.json @@ -0,0 +1,12 @@ +{ + "uni-calender.ok": "ok", + "uni-calender.cancel": "cancel", + "uni-calender.today": "today", + "uni-calender.MON": "MON", + "uni-calender.TUE": "TUE", + "uni-calender.WED": "WED", + "uni-calender.THU": "THU", + "uni-calender.FRI": "FRI", + "uni-calender.SAT": "SAT", + "uni-calender.SUN": "SUN" +} diff --git a/uni_modules/uni-calendar/components/uni-calendar/i18n/index.js b/uni_modules/uni-calendar/components/uni-calendar/i18n/index.js new file mode 100644 index 0000000..de7509c --- /dev/null +++ b/uni_modules/uni-calendar/components/uni-calendar/i18n/index.js @@ -0,0 +1,8 @@ +import en from './en.json' +import zhHans from './zh-Hans.json' +import zhHant from './zh-Hant.json' +export default { + en, + 'zh-Hans': zhHans, + 'zh-Hant': zhHant +} diff --git a/uni_modules/uni-calendar/components/uni-calendar/i18n/zh-Hans.json b/uni_modules/uni-calendar/components/uni-calendar/i18n/zh-Hans.json new file mode 100644 index 0000000..1ca43de --- /dev/null +++ b/uni_modules/uni-calendar/components/uni-calendar/i18n/zh-Hans.json @@ -0,0 +1,12 @@ +{ + "uni-calender.ok": "确定", + "uni-calender.cancel": "取消", + "uni-calender.today": "今日", + "uni-calender.SUN": "日", + "uni-calender.MON": "一", + "uni-calender.TUE": "二", + "uni-calender.WED": "三", + "uni-calender.THU": "四", + "uni-calender.FRI": "五", + "uni-calender.SAT": "六" +} diff --git a/uni_modules/uni-calendar/components/uni-calendar/i18n/zh-Hant.json b/uni_modules/uni-calendar/components/uni-calendar/i18n/zh-Hant.json new file mode 100644 index 0000000..e0fe33b --- /dev/null +++ b/uni_modules/uni-calendar/components/uni-calendar/i18n/zh-Hant.json @@ -0,0 +1,12 @@ +{ + "uni-calender.ok": "確定", + "uni-calender.cancel": "取消", + "uni-calender.today": "今日", + "uni-calender.SUN": "日", + "uni-calender.MON": "一", + "uni-calender.TUE": "二", + "uni-calender.WED": "三", + "uni-calender.THU": "四", + "uni-calender.FRI": "五", + "uni-calender.SAT": "六" +} diff --git a/uni_modules/uni-calendar/components/uni-calendar/uni-calendar-item.vue b/uni_modules/uni-calendar/components/uni-calendar/uni-calendar-item.vue new file mode 100644 index 0000000..0353011 --- /dev/null +++ b/uni_modules/uni-calendar/components/uni-calendar/uni-calendar-item.vue @@ -0,0 +1,181 @@ + + + + + diff --git a/uni_modules/uni-calendar/components/uni-calendar/uni-calendar.vue b/uni_modules/uni-calendar/components/uni-calendar/uni-calendar.vue new file mode 100644 index 0000000..a2c33d0 --- /dev/null +++ b/uni_modules/uni-calendar/components/uni-calendar/uni-calendar.vue @@ -0,0 +1,554 @@ + + + + + diff --git a/uni_modules/uni-calendar/components/uni-calendar/util.js b/uni_modules/uni-calendar/components/uni-calendar/util.js new file mode 100644 index 0000000..bae9273 --- /dev/null +++ b/uni_modules/uni-calendar/components/uni-calendar/util.js @@ -0,0 +1,354 @@ +import CALENDAR from './calendar.js' + +class Calendar { + constructor({ + date, + selected, + startDate, + endDate, + range + } = {}) { + // 当前日期 + this.date = this.getDate(new Date()) // 当前初入日期 + // 打点信息 + this.selected = selected || []; + // 范围开始 + this.startDate = startDate + // 范围结束 + this.endDate = endDate + this.range = range + // 多选状态 + this.cleanMultipleStatus() + // 每周日期 + this.weeks = {} + // this._getWeek(this.date.fullDate) + } + /** + * 设置日期 + * @param {Object} date + */ + setDate(date) { + this.selectDate = this.getDate(date) + this._getWeek(this.selectDate.fullDate) + } + + /** + * 清理多选状态 + */ + cleanMultipleStatus() { + this.multipleStatus = { + before: '', + after: '', + data: [] + } + } + + /** + * 重置开始日期 + */ + resetSatrtDate(startDate) { + // 范围开始 + this.startDate = startDate + + } + + /** + * 重置结束日期 + */ + resetEndDate(endDate) { + // 范围结束 + this.endDate = endDate + } + + /** + * 获取任意时间 + */ + getDate(date, AddDayCount = 0, str = 'day') { + if (!date) { + date = new Date() + } + if (typeof date !== 'object') { + date = date.replace(/-/g, '/') + } + const dd = new Date(date) + switch (str) { + case 'day': + dd.setDate(dd.getDate() + AddDayCount) // 获取AddDayCount天后的日期 + break + case 'month': + if (dd.getDate() === 31) { + dd.setDate(dd.getDate() + AddDayCount) + } else { + dd.setMonth(dd.getMonth() + AddDayCount) // 获取AddDayCount天后的日期 + } + break + case 'year': + dd.setFullYear(dd.getFullYear() + AddDayCount) // 获取AddDayCount天后的日期 + break + } + const y = dd.getFullYear() + const m = dd.getMonth() + 1 < 10 ? '0' + (dd.getMonth() + 1) : dd.getMonth() + 1 // 获取当前月份的日期,不足10补0 + const d = dd.getDate() < 10 ? '0' + dd.getDate() : dd.getDate() // 获取当前几号,不足10补0 + return { + fullDate: y + '-' + m + '-' + d, + year: y, + month: m, + date: d, + day: dd.getDay() + } + } + + + /** + * 获取上月剩余天数 + */ + _getLastMonthDays(firstDay, full) { + let dateArr = [] + for (let i = firstDay; i > 0; i--) { + const beforeDate = new Date(full.year, full.month - 1, -i + 1).getDate() + dateArr.push({ + date: beforeDate, + month: full.month - 1, + lunar: this.getlunar(full.year, full.month - 1, beforeDate), + disable: true + }) + } + return dateArr + } + /** + * 获取本月天数 + */ + _currentMonthDys(dateData, full) { + let dateArr = [] + let fullDate = this.date.fullDate + for (let i = 1; i <= dateData; i++) { + let isinfo = false + let nowDate = full.year + '-' + (full.month < 10 ? + full.month : full.month) + '-' + (i < 10 ? + '0' + i : i) + // 是否今天 + let isDay = fullDate === nowDate + // 获取打点信息 + let info = this.selected && this.selected.find((item) => { + if (this.dateEqual(nowDate, item.date)) { + return item + } + }) + + // 日期禁用 + let disableBefore = true + let disableAfter = true + if (this.startDate) { + // let dateCompBefore = this.dateCompare(this.startDate, fullDate) + // disableBefore = this.dateCompare(dateCompBefore ? this.startDate : fullDate, nowDate) + disableBefore = this.dateCompare(this.startDate, nowDate) + } + + if (this.endDate) { + // let dateCompAfter = this.dateCompare(fullDate, this.endDate) + // disableAfter = this.dateCompare(nowDate, dateCompAfter ? this.endDate : fullDate) + disableAfter = this.dateCompare(nowDate, this.endDate) + } + let multiples = this.multipleStatus.data + let checked = false + let multiplesStatus = -1 + if (this.range) { + if (multiples) { + multiplesStatus = multiples.findIndex((item) => { + return this.dateEqual(item, nowDate) + }) + } + if (multiplesStatus !== -1) { + checked = true + } + } + let data = { + fullDate: nowDate, + year: full.year, + date: i, + multiple: this.range ? checked : false, + beforeMultiple: this.dateEqual(this.multipleStatus.before, nowDate), + afterMultiple: this.dateEqual(this.multipleStatus.after, nowDate), + month: full.month, + lunar: this.getlunar(full.year, full.month, i), + disable: !(disableBefore && disableAfter), + isDay + } + if (info) { + data.extraInfo = info + } + + dateArr.push(data) + } + return dateArr + } + /** + * 获取下月天数 + */ + _getNextMonthDays(surplus, full) { + let dateArr = [] + for (let i = 1; i < surplus + 1; i++) { + dateArr.push({ + date: i, + month: Number(full.month) + 1, + lunar: this.getlunar(full.year, Number(full.month) + 1, i), + disable: true + }) + } + return dateArr + } + + /** + * 获取当前日期详情 + * @param {Object} date + */ + getInfo(date) { + if (!date) { + date = new Date() + } + const dateInfo = this.canlender.find(item => item.fullDate === this.getDate(date).fullDate) + return dateInfo + } + + /** + * 比较时间大小 + */ + dateCompare(startDate, endDate) { + // 计算截止时间 + startDate = new Date(startDate.replace('-', '/').replace('-', '/')) + // 计算详细项的截止时间 + endDate = new Date(endDate.replace('-', '/').replace('-', '/')) + if (startDate <= endDate) { + return true + } else { + return false + } + } + + /** + * 比较时间是否相等 + */ + dateEqual(before, after) { + // 计算截止时间 + before = new Date(before.replace('-', '/').replace('-', '/')) + // 计算详细项的截止时间 + after = new Date(after.replace('-', '/').replace('-', '/')) + if (before.getTime() - after.getTime() === 0) { + return true + } else { + return false + } + } + + + /** + * 获取日期范围内所有日期 + * @param {Object} begin + * @param {Object} end + */ + geDateAll(begin, end) { + var arr = [] + var ab = begin.split('-') + var ae = end.split('-') + var db = new Date() + db.setFullYear(ab[0], ab[1] - 1, ab[2]) + var de = new Date() + de.setFullYear(ae[0], ae[1] - 1, ae[2]) + var unixDb = db.getTime() - 24 * 60 * 60 * 1000 + var unixDe = de.getTime() - 24 * 60 * 60 * 1000 + for (var k = unixDb; k <= unixDe;) { + k = k + 24 * 60 * 60 * 1000 + arr.push(this.getDate(new Date(parseInt(k))).fullDate) + } + return arr + } + /** + * 计算阴历日期显示 + */ + getlunar(year, month, date) { + return CALENDAR.solar2lunar(year, month, date) + } + /** + * 设置打点 + */ + setSelectInfo(data, value) { + this.selected = value + this._getWeek(data) + } + + /** + * 获取多选状态 + */ + setMultiple(fullDate) { + let { + before, + after + } = this.multipleStatus + + if (!this.range) return + if (before && after) { + this.multipleStatus.before = '' + this.multipleStatus.after = '' + this.multipleStatus.data = [] + } else { + if (!before) { + this.multipleStatus.before = fullDate + } else { + this.multipleStatus.after = fullDate + if (this.dateCompare(this.multipleStatus.before, this.multipleStatus.after)) { + this.multipleStatus.data = this.geDateAll(this.multipleStatus.before, this.multipleStatus.after); + } else { + this.multipleStatus.data = this.geDateAll(this.multipleStatus.after, this.multipleStatus.before); + } + } + } + this._getWeek(fullDate) + } + + /** + * 获取每周数据 + * @param {Object} dateData + */ + _getWeek(dateData) { + const { + fullDate, + year, + month, + date, + day + } = this.getDate(dateData) + let firstDay = new Date(year, month - 1, 1).getDay() + let currentDay = new Date(year, month, 0).getDate() + let dates = { + lastMonthDays: this._getLastMonthDays(firstDay, this.getDate(dateData)), // 上个月末尾几天 + currentMonthDys: this._currentMonthDys(currentDay, this.getDate(dateData)), // 本月天数 + nextMonthDays: [], // 下个月开始几天 + weeks: [] + } + let canlender = [] + const surplus = 42 - (dates.lastMonthDays.length + dates.currentMonthDys.length) + dates.nextMonthDays = this._getNextMonthDays(surplus, this.getDate(dateData)) + canlender = canlender.concat(dates.lastMonthDays, dates.currentMonthDys, dates.nextMonthDays) + let weeks = {} + // 拼接数组 上个月开始几天 + 本月天数+ 下个月开始几天 + for (let i = 0; i < canlender.length; i++) { + if (i % 7 === 0) { + weeks[parseInt(i / 7)] = new Array(7) + } + weeks[parseInt(i / 7)][i % 7] = canlender[i] + } + this.canlender = canlender + this.weeks = weeks + } + + //静态方法 + // static init(date) { + // if (!this.instance) { + // this.instance = new Calendar(date); + // } + // return this.instance; + // } +} + + +export default Calendar diff --git a/uni_modules/uni-calendar/package.json b/uni_modules/uni-calendar/package.json new file mode 100644 index 0000000..40455c8 --- /dev/null +++ b/uni_modules/uni-calendar/package.json @@ -0,0 +1,88 @@ +{ + "id": "uni-calendar", + "displayName": "uni-calendar 日历", + "version": "1.4.5", + "description": "日历组件", + "keywords": [ + "uni-ui", + "uniui", + "日历", + "", + "打卡", + "日历选择" +], + "repository": "https://github.com/dcloudio/uni-ui", + "engines": { + "HBuilderX": "" + }, + "directories": { + "example": "../../temps/example_temps" + }, + "dcloudext": { + "category": [ + "前端组件", + "通用组件" + ], + "sale": { + "regular": { + "price": "0.00" + }, + "sourcecode": { + "price": "0.00" + } + }, + "contact": { + "qq": "" + }, + "declaration": { + "ads": "无", + "data": "无", + "permissions": "无" + }, + "npmurl": "https://www.npmjs.com/package/@dcloudio/uni-ui" + }, + "uni_modules": { + "dependencies": [], + "encrypt": [], + "platforms": { + "cloud": { + "tcb": "y", + "aliyun": "y" + }, + "client": { + "App": { + "app-vue": "y", + "app-nvue": "y" + }, + "H5-mobile": { + "Safari": "y", + "Android Browser": "y", + "微信浏览器(Android)": "y", + "QQ浏览器(Android)": "y" + }, + "H5-pc": { + "Chrome": "y", + "IE": "y", + "Edge": "y", + "Firefox": "y", + "Safari": "y" + }, + "小程序": { + "微信": "y", + "阿里": "y", + "百度": "y", + "字节跳动": "y", + "QQ": "y" + }, + "快应用": { + "华为": "u", + "联盟": "u" + }, + "Vue": { + "vue2": "y", + "vue3": "y" + } + } + } + } +} \ No newline at end of file diff --git a/uni_modules/uni-calendar/readme.md b/uni_modules/uni-calendar/readme.md new file mode 100644 index 0000000..4f3ca0e --- /dev/null +++ b/uni_modules/uni-calendar/readme.md @@ -0,0 +1,103 @@ + + +## Calendar 日历 +> **组件名:uni-calendar** +> 代码块: `uCalendar` + + +日历组件 + +> **注意事项** +> 为了避免错误使用,给大家带来不好的开发体验,请在使用组件前仔细阅读下面的注意事项,可以帮你避免一些错误。 +> - 本组件农历转换使用的js是 [@1900-2100区间内的公历、农历互转](https://github.com/jjonline/calendar.js) +> - 仅支持自定义组件模式 +> - `date`属性传入的应该是一个 String ,如: 2019-06-27 ,而不是 new Date() +> - 通过 `insert` 属性来确定当前的事件是 @change 还是 @confirm 。理应合并为一个事件,但是为了区分模式,现使用两个事件,这里需要注意 +> - 弹窗模式下无法阻止后面的元素滚动,如有需要阻止,请在弹窗弹出后,手动设置滚动元素为不可滚动 + + +### 安装方式 + +本组件符合[easycom](https://uniapp.dcloud.io/collocation/pages?id=easycom)规范,`HBuilderX 2.5.5`起,只需将本组件导入项目,在页面`template`中即可直接使用,无需在页面中`import`和注册`components`。 + +如需通过`npm`方式使用`uni-ui`组件,另见文档:[https://ext.dcloud.net.cn/plugin?id=55](https://ext.dcloud.net.cn/plugin?id=55) + +### 基本用法 + +在 ``template`` 中使用组件 + +```html + + + +``` + +### 通过方法打开日历 + +需要设置 `insert` 为 `false` + +```html + + + + +``` + +```javascript + +export default { + data() { + return {}; + }, + methods: { + open(){ + this.$refs.calendar.open(); + }, + confirm(e) { + console.log(e); + } + } +}; + +``` + + +## API + +### Calendar Props + +| 属性名 | 类型 | 默认值| 说明 | +| | | +| date | String |- | 自定义当前时间,默认为今天 | +| lunar | Boolean | false | 显示农历 | +| startDate | String |- | 日期选择范围-开始日期 | +| endDate | String |- | 日期选择范围-结束日期 | +| range | Boolean | false | 范围选择 | +| insert | Boolean | false | 插入模式,可选值,ture:插入模式;false:弹窗模式;默认为插入模式 | +|clearDate |Boolean |true |弹窗模式是否清空上次选择内容 | +| selected | Array |- | 打点,期待格式[{date: '2019-06-27', info: '签到', data: { custom: '自定义信息', name: '自定义消息头',xxx:xxx... }}] | +|showMonth | Boolean | true | 是否显示月份为背景 | + +### Calendar Events + +| 事件名 | 说明 |返回值| +| | | | +| open | 弹出日历组件,`insert :false` 时生效|- | + + + + + +## 组件示例 + +点击查看:[https://hellouniapp.dcloud.net.cn/pages/extUI/calendar/calendar](https://hellouniapp.dcloud.net.cn/pages/extUI/calendar/calendar) \ No newline at end of file diff --git a/uni_modules/uni-card/changelog.md b/uni_modules/uni-card/changelog.md new file mode 100644 index 0000000..c3cd8c4 --- /dev/null +++ b/uni_modules/uni-card/changelog.md @@ -0,0 +1,26 @@ +## 1.3.1(2021-12-20) +- 修复 在vue页面下略缩图显示不正常的bug +## 1.3.0(2021-11-19) +- 重构插槽的用法 ,header 替换为 title +- 新增 actions 插槽 +- 新增 cover 封面图属性和插槽 +- 新增 padding 内容默认内边距离 +- 新增 margin 卡片默认外边距离 +- 新增 spacing 卡片默认内边距 +- 新增 shadow 卡片阴影属性 +- 取消 mode 属性,可使用组合插槽代替 +- 取消 note 属性 ,使用actions插槽代替 +- 优化 组件UI,并提供设计资源,详见:[https://uniapp.dcloud.io/component/uniui/resource](https://uniapp.dcloud.io/component/uniui/resource) +- 文档迁移,详见:[https://uniapp.dcloud.io/component/uniui/uni-card](https://uniapp.dcloud.io/component/uniui/uni-card) +## 1.2.1(2021-07-30) +- 优化 vue3下事件警告的问题 +## 1.2.0(2021-07-13) +- 组件兼容 vue3,如何创建vue3项目详见 [uni-app 项目支持 vue3 介绍](https://ask.dcloud.net.cn/article/37834) +## 1.1.8(2021-07-01) +- 优化 图文卡片无图片加载时,提供占位图标 +- 新增 header 插槽,自定义卡片头部( 图文卡片 mode="style" 时,不支持) +- 修复 thumbnail 不存在仍然占位的 bug +## 1.1.7(2021-05-12) +- 新增 组件示例地址 +## 1.1.6(2021-02-04) +- 调整为uni_modules目录规范 diff --git a/uni_modules/uni-card/components/uni-card/uni-card.vue b/uni_modules/uni-card/components/uni-card/uni-card.vue new file mode 100644 index 0000000..38cf594 --- /dev/null +++ b/uni_modules/uni-card/components/uni-card/uni-card.vue @@ -0,0 +1,270 @@ + + + + + diff --git a/uni_modules/uni-card/package.json b/uni_modules/uni-card/package.json new file mode 100644 index 0000000..f16224d --- /dev/null +++ b/uni_modules/uni-card/package.json @@ -0,0 +1,90 @@ +{ + "id": "uni-card", + "displayName": "uni-card 卡片", + "version": "1.3.1", + "description": "Card 组件,提供常见的卡片样式。", + "keywords": [ + "uni-ui", + "uniui", + "card", + "", + "卡片" +], + "repository": "https://github.com/dcloudio/uni-ui", + "engines": { + "HBuilderX": "" + }, + "directories": { + "example": "../../temps/example_temps" + }, + "dcloudext": { + "category": [ + "前端组件", + "通用组件" + ], + "sale": { + "regular": { + "price": "0.00" + }, + "sourcecode": { + "price": "0.00" + } + }, + "contact": { + "qq": "" + }, + "declaration": { + "ads": "无", + "data": "无", + "permissions": "无" + }, + "npmurl": "https://www.npmjs.com/package/@dcloudio/uni-ui" + }, + "uni_modules": { + "dependencies": [ + "uni-icons", + "uni-scss" + ], + "encrypt": [], + "platforms": { + "cloud": { + "tcb": "y", + "aliyun": "y" + }, + "client": { + "App": { + "app-vue": "y", + "app-nvue": "y" + }, + "H5-mobile": { + "Safari": "y", + "Android Browser": "y", + "微信浏览器(Android)": "y", + "QQ浏览器(Android)": "y" + }, + "H5-pc": { + "Chrome": "y", + "IE": "y", + "Edge": "y", + "Firefox": "y", + "Safari": "y" + }, + "小程序": { + "微信": "y", + "阿里": "y", + "百度": "y", + "字节跳动": "y", + "QQ": "y" + }, + "快应用": { + "华为": "u", + "联盟": "u" + }, + "Vue": { + "vue2": "y", + "vue3": "y" + } + } + } + } +} diff --git a/uni_modules/uni-card/readme.md b/uni_modules/uni-card/readme.md new file mode 100644 index 0000000..7434e71 --- /dev/null +++ b/uni_modules/uni-card/readme.md @@ -0,0 +1,12 @@ + + +## Card 卡片 +> **组件名:uni-card** +> 代码块: `uCard` + +卡片视图组件。 + +### [查看文档](https://uniapp.dcloud.io/component/uniui/uni-card) +#### 如使用过程中有任何问题,或者您对uni-ui有一些好的建议,欢迎加入 uni-ui 交流群:871950839 + + diff --git a/uni_modules/uni-collapse/changelog.md b/uni_modules/uni-collapse/changelog.md new file mode 100644 index 0000000..292e4c7 --- /dev/null +++ b/uni_modules/uni-collapse/changelog.md @@ -0,0 +1,36 @@ +## 1.4.3(2022-01-25) +- 修复 初始化的时候 ,open 属性失效的bug +## 1.4.2(2022-01-21) +- 修复 微信小程序resize后组件收起的bug +## 1.4.1(2021-11-22) +- 修复 vue3中个别scss变量无法找到的问题 +## 1.4.0(2021-11-19) +- 优化 组件UI,并提供设计资源,详见:[https://uniapp.dcloud.io/component/uniui/resource](https://uniapp.dcloud.io/component/uniui/resource) +- 文档迁移,详见:[https://uniapp.dcloud.io/component/uniui/uni-collapse](https://uniapp.dcloud.io/component/uniui/uni-collapse) +## 1.3.3(2021-08-17) +- 优化 show-arrow 属性默认为true +## 1.3.2(2021-08-17) +- 新增 show-arrow 属性,控制是否显示右侧箭头 +## 1.3.1(2021-07-30) +- 优化 vue3下小程序事件警告的问题 +## 1.3.0(2021-07-30) +- 组件兼容 vue3,如何创建vue3项目,详见 [uni-app 项目支持 vue3 介绍](https://ask.dcloud.net.cn/article/37834) +## 1.2.2(2021-07-21) +- 修复 由1.2.0版本引起的 change 事件返回 undefined 的Bug +## 1.2.1(2021-07-21) +- 优化 组件示例 +## 1.2.0(2021-07-21) +- 新增 组件折叠动画 +- 新增 value\v-model 属性 ,动态修改面板折叠状态 +- 新增 title 插槽 ,可定义面板标题 +- 新增 border 属性 ,显示隐藏面板内容分隔线 +- 新增 title-border 属性 ,显示隐藏面板标题分隔线 +- 修复 resize 方法失效的Bug +- 修复 change 事件返回参数不正确的Bug +- 优化 H5、App 平台自动更具内容更新高度,无需调用 reszie() 方法 +## 1.1.7(2021-05-12) +- 新增 组件示例地址 +## 1.1.6(2021-02-05) +- 优化 组件引用关系,通过uni_modules引用组件 +## 1.1.5(2021-02-05) +- 调整为uni_modules目录规范 \ No newline at end of file diff --git a/uni_modules/uni-collapse/components/uni-collapse-item/uni-collapse-item.vue b/uni_modules/uni-collapse/components/uni-collapse-item/uni-collapse-item.vue new file mode 100644 index 0000000..d62a6a7 --- /dev/null +++ b/uni_modules/uni-collapse/components/uni-collapse-item/uni-collapse-item.vue @@ -0,0 +1,402 @@ + + + + + diff --git a/uni_modules/uni-collapse/components/uni-collapse/uni-collapse.vue b/uni_modules/uni-collapse/components/uni-collapse/uni-collapse.vue new file mode 100644 index 0000000..384c39a --- /dev/null +++ b/uni_modules/uni-collapse/components/uni-collapse/uni-collapse.vue @@ -0,0 +1,147 @@ + + + diff --git a/uni_modules/uni-collapse/package.json b/uni_modules/uni-collapse/package.json new file mode 100644 index 0000000..65349cf --- /dev/null +++ b/uni_modules/uni-collapse/package.json @@ -0,0 +1,89 @@ +{ + "id": "uni-collapse", + "displayName": "uni-collapse 折叠面板", + "version": "1.4.3", + "description": "Collapse 组件,可以折叠 / 展开的内容区域。", + "keywords": [ + "uni-ui", + "折叠", + "折叠面板", + "手风琴" +], + "repository": "https://github.com/dcloudio/uni-ui", + "engines": { + "HBuilderX": "" + }, + "directories": { + "example": "../../temps/example_temps" + }, + "dcloudext": { + "category": [ + "前端组件", + "通用组件" + ], + "sale": { + "regular": { + "price": "0.00" + }, + "sourcecode": { + "price": "0.00" + } + }, + "contact": { + "qq": "" + }, + "declaration": { + "ads": "无", + "data": "无", + "permissions": "无" + }, + "npmurl": "https://www.npmjs.com/package/@dcloudio/uni-ui" + }, + "uni_modules": { + "dependencies": [ + "uni-scss", + "uni-icons" + ], + "encrypt": [], + "platforms": { + "cloud": { + "tcb": "y", + "aliyun": "y" + }, + "client": { + "App": { + "app-vue": "y", + "app-nvue": "y" + }, + "H5-mobile": { + "Safari": "y", + "Android Browser": "y", + "微信浏览器(Android)": "y", + "QQ浏览器(Android)": "y" + }, + "H5-pc": { + "Chrome": "y", + "IE": "y", + "Edge": "y", + "Firefox": "y", + "Safari": "y" + }, + "小程序": { + "微信": "y", + "阿里": "y", + "百度": "y", + "字节跳动": "y", + "QQ": "y" + }, + "快应用": { + "华为": "u", + "联盟": "u" + }, + "Vue": { + "vue2": "y", + "vue3": "y" + } + } + } + } +} diff --git a/uni_modules/uni-collapse/readme.md b/uni_modules/uni-collapse/readme.md new file mode 100644 index 0000000..bc758eb --- /dev/null +++ b/uni_modules/uni-collapse/readme.md @@ -0,0 +1,12 @@ + + +## Collapse 折叠面板 +> **组件名:uni-collapse** +> 代码块: `uCollapse` +> 关联组件:`uni-collapse-item`、`uni-icons`。 + + +折叠面板用来折叠/显示过长的内容或者是列表。通常是在多内容分类项使用,折叠不重要的内容,显示重要内容。点击可以展开折叠部分。 + +### [查看文档](https://uniapp.dcloud.io/component/uniui/uni-collapse) +#### 如使用过程中有任何问题,或者您对uni-ui有一些好的建议,欢迎加入 uni-ui 交流群:871950839 \ No newline at end of file diff --git a/uni_modules/uni-combox/changelog.md b/uni_modules/uni-combox/changelog.md new file mode 100644 index 0000000..23c2748 --- /dev/null +++ b/uni_modules/uni-combox/changelog.md @@ -0,0 +1,15 @@ +## 1.0.1(2021-11-23) +- 优化 label、label-width 属性 +## 1.0.0(2021-11-19) +- 优化 组件UI,并提供设计资源,详见:[https://uniapp.dcloud.io/component/uniui/resource](https://uniapp.dcloud.io/component/uniui/resource) +- 文档迁移,详见:[https://uniapp.dcloud.io/component/uniui/uni-combox](https://uniapp.dcloud.io/component/uniui/uni-combox) +## 0.1.0(2021-07-30) +- 组件兼容 vue3,如何创建vue3项目,详见 [uni-app 项目支持 vue3 介绍](https://ask.dcloud.net.cn/article/37834) +## 0.0.6(2021-05-12) +- 新增 组件示例地址 +## 0.0.5(2021-04-21) +- 优化 添加依赖 uni-icons, 导入后自动下载依赖 +## 0.0.4(2021-02-05) +- 优化 组件引用关系,通过uni_modules引用组件 +## 0.0.3(2021-02-04) +- 调整为uni_modules目录规范 diff --git a/uni_modules/uni-combox/components/uni-combox/uni-combox.vue b/uni_modules/uni-combox/components/uni-combox/uni-combox.vue new file mode 100644 index 0000000..d4cb79d --- /dev/null +++ b/uni_modules/uni-combox/components/uni-combox/uni-combox.vue @@ -0,0 +1,275 @@ + + + + + diff --git a/uni_modules/uni-combox/package.json b/uni_modules/uni-combox/package.json new file mode 100644 index 0000000..4a05c3f --- /dev/null +++ b/uni_modules/uni-combox/package.json @@ -0,0 +1,90 @@ +{ + "id": "uni-combox", + "displayName": "uni-combox 组合框", + "version": "1.0.1", + "description": "可以选择也可以输入的表单项 ", + "keywords": [ + "uni-ui", + "uniui", + "combox", + "组合框", + "select" +], + "repository": "https://github.com/dcloudio/uni-ui", + "engines": { + "HBuilderX": "" + }, + "directories": { + "example": "../../temps/example_temps" + }, + "dcloudext": { + "category": [ + "前端组件", + "通用组件" + ], + "sale": { + "regular": { + "price": "0.00" + }, + "sourcecode": { + "price": "0.00" + } + }, + "contact": { + "qq": "" + }, + "declaration": { + "ads": "无", + "data": "无", + "permissions": "无" + }, + "npmurl": "https://www.npmjs.com/package/@dcloudio/uni-ui" + }, + "uni_modules": { + "dependencies": [ + "uni-scss", + "uni-icons" + ], + "encrypt": [], + "platforms": { + "cloud": { + "tcb": "y", + "aliyun": "y" + }, + "client": { + "App": { + "app-vue": "y", + "app-nvue": "n" + }, + "H5-mobile": { + "Safari": "y", + "Android Browser": "y", + "微信浏览器(Android)": "y", + "QQ浏览器(Android)": "y" + }, + "H5-pc": { + "Chrome": "y", + "IE": "y", + "Edge": "y", + "Firefox": "y", + "Safari": "y" + }, + "小程序": { + "微信": "y", + "阿里": "y", + "百度": "y", + "字节跳动": "y", + "QQ": "y" + }, + "快应用": { + "华为": "u", + "联盟": "u" + }, + "Vue": { + "vue2": "y", + "vue3": "y" + } + } + } + } +} \ No newline at end of file diff --git a/uni_modules/uni-combox/readme.md b/uni_modules/uni-combox/readme.md new file mode 100644 index 0000000..ffa2cc8 --- /dev/null +++ b/uni_modules/uni-combox/readme.md @@ -0,0 +1,11 @@ + + +## Combox 组合框 +> **组件名:uni-combox** +> 代码块: `uCombox` + + +组合框组件。 + +### [查看文档](https://uniapp.dcloud.io/component/uniui/uni-combox) +#### 如使用过程中有任何问题,或者您对uni-ui有一些好的建议,欢迎加入 uni-ui 交流群:871950839 \ No newline at end of file diff --git a/uni_modules/uni-countdown/changelog.md b/uni_modules/uni-countdown/changelog.md new file mode 100644 index 0000000..f25beef --- /dev/null +++ b/uni_modules/uni-countdown/changelog.md @@ -0,0 +1,24 @@ +## 1.2.2(2022-01-19) +- 修复 在微信小程序中样式不生效的bug +## 1.2.1(2022-01-18) +- 新增 update 方法 ,在动态更新时间后,刷新组件 +## 1.2.0(2021-11-19) +- 优化 组件UI,并提供设计资源,详见:[https://uniapp.dcloud.io/component/uniui/resource](https://uniapp.dcloud.io/component/uniui/resource) +- 文档迁移,详见:[https://uniapp.dcloud.io/component/uniui/uni-countdown](https://uniapp.dcloud.io/component/uniui/uni-countdown) +## 1.1.3(2021-10-18) +- 重构 +- 新增 font-size 支持自定义字体大小 +## 1.1.2(2021-08-24) +- 新增 支持国际化 +## 1.1.1(2021-07-30) +- 优化 vue3下小程序事件警告的问题 +## 1.1.0(2021-07-30) +- 组件兼容 vue3,如何创建vue3项目,详见 [uni-app 项目支持 vue3 介绍](https://ask.dcloud.net.cn/article/37834) +## 1.0.5(2021-06-18) +- 修复 uni-countdown 重复赋值跳两秒的 bug +## 1.0.4(2021-05-12) +- 新增 组件示例地址 +## 1.0.3(2021-05-08) +- 修复 uni-countdown 不能控制倒计时的 bug +## 1.0.2(2021-02-04) +- 调整为uni_modules目录规范 diff --git a/uni_modules/uni-countdown/components/uni-countdown/i18n/en.json b/uni_modules/uni-countdown/components/uni-countdown/i18n/en.json new file mode 100644 index 0000000..06309cb --- /dev/null +++ b/uni_modules/uni-countdown/components/uni-countdown/i18n/en.json @@ -0,0 +1,6 @@ +{ + "uni-countdown.day": "day", + "uni-countdown.h": "h", + "uni-countdown.m": "m", + "uni-countdown.s": "s" +} diff --git a/uni_modules/uni-countdown/components/uni-countdown/i18n/index.js b/uni_modules/uni-countdown/components/uni-countdown/i18n/index.js new file mode 100644 index 0000000..de7509c --- /dev/null +++ b/uni_modules/uni-countdown/components/uni-countdown/i18n/index.js @@ -0,0 +1,8 @@ +import en from './en.json' +import zhHans from './zh-Hans.json' +import zhHant from './zh-Hant.json' +export default { + en, + 'zh-Hans': zhHans, + 'zh-Hant': zhHant +} diff --git a/uni_modules/uni-countdown/components/uni-countdown/i18n/zh-Hans.json b/uni_modules/uni-countdown/components/uni-countdown/i18n/zh-Hans.json new file mode 100644 index 0000000..358cdd1 --- /dev/null +++ b/uni_modules/uni-countdown/components/uni-countdown/i18n/zh-Hans.json @@ -0,0 +1,6 @@ +{ + "uni-countdown.day": "天", + "uni-countdown.h": "时", + "uni-countdown.m": "分", + "uni-countdown.s": "秒" +} diff --git a/uni_modules/uni-countdown/components/uni-countdown/i18n/zh-Hant.json b/uni_modules/uni-countdown/components/uni-countdown/i18n/zh-Hant.json new file mode 100644 index 0000000..e5a63de --- /dev/null +++ b/uni_modules/uni-countdown/components/uni-countdown/i18n/zh-Hant.json @@ -0,0 +1,6 @@ +{ + "uni-countdown.day": "天", + "uni-countdown.h": "時", + "uni-countdown.m": "分", + "uni-countdown.s": "秒" +} diff --git a/uni_modules/uni-countdown/components/uni-countdown/uni-countdown.vue b/uni_modules/uni-countdown/components/uni-countdown/uni-countdown.vue new file mode 100644 index 0000000..1f8ef4e --- /dev/null +++ b/uni_modules/uni-countdown/components/uni-countdown/uni-countdown.vue @@ -0,0 +1,271 @@ + + + diff --git a/uni_modules/uni-countdown/package.json b/uni_modules/uni-countdown/package.json new file mode 100644 index 0000000..70e99ee --- /dev/null +++ b/uni_modules/uni-countdown/package.json @@ -0,0 +1,86 @@ +{ + "id": "uni-countdown", + "displayName": "uni-countdown 倒计时", + "version": "1.2.2", + "description": "CountDown 倒计时组件", + "keywords": [ + "uni-ui", + "uniui", + "countdown", + "倒计时" +], + "repository": "https://github.com/dcloudio/uni-ui", + "engines": { + "HBuilderX": "" + }, + "directories": { + "example": "../../temps/example_temps" + }, + "dcloudext": { + "category": [ + "前端组件", + "通用组件" + ], + "sale": { + "regular": { + "price": "0.00" + }, + "sourcecode": { + "price": "0.00" + } + }, + "contact": { + "qq": "" + }, + "declaration": { + "ads": "无", + "data": "无", + "permissions": "无" + }, + "npmurl": "https://www.npmjs.com/package/@dcloudio/uni-ui" + }, + "uni_modules": { + "dependencies": ["uni-scss"], + "encrypt": [], + "platforms": { + "cloud": { + "tcb": "y", + "aliyun": "y" + }, + "client": { + "App": { + "app-vue": "y", + "app-nvue": "y" + }, + "H5-mobile": { + "Safari": "y", + "Android Browser": "y", + "微信浏览器(Android)": "y", + "QQ浏览器(Android)": "y" + }, + "H5-pc": { + "Chrome": "y", + "IE": "y", + "Edge": "y", + "Firefox": "y", + "Safari": "y" + }, + "小程序": { + "微信": "y", + "阿里": "y", + "百度": "y", + "字节跳动": "y", + "QQ": "y" + }, + "快应用": { + "华为": "u", + "联盟": "u" + }, + "Vue": { + "vue2": "y", + "vue3": "y" + } + } + } + } +} \ No newline at end of file diff --git a/uni_modules/uni-countdown/readme.md b/uni_modules/uni-countdown/readme.md new file mode 100644 index 0000000..4bcb1aa --- /dev/null +++ b/uni_modules/uni-countdown/readme.md @@ -0,0 +1,10 @@ + + +## CountDown 倒计时 +> **组件名:uni-countdown** +> 代码块: `uCountDown` + +倒计时组件。 + +### [查看文档](https://uniapp.dcloud.io/component/uniui/uni-countdown) +#### 如使用过程中有任何问题,或者您对uni-ui有一些好的建议,欢迎加入 uni-ui 交流群:871950839 \ No newline at end of file diff --git a/uni_modules/uni-data-checkbox/changelog.md b/uni_modules/uni-data-checkbox/changelog.md new file mode 100644 index 0000000..d8f420b --- /dev/null +++ b/uni_modules/uni-data-checkbox/changelog.md @@ -0,0 +1,41 @@ +## 1.0.1(2022-02-07) +- 修复 multiple 为 true 时,v-model 的值为 null 报错的 bug +## 1.0.0(2021-11-19) +- 优化 组件UI,并提供设计资源,详见:[https://uniapp.dcloud.io/component/uniui/resource](https://uniapp.dcloud.io/component/uniui/resource) +- 文档迁移,详见:[https://uniapp.dcloud.io/component/uniui/uni-data-checkbox](https://uniapp.dcloud.io/component/uniui/uni-data-checkbox) +## 0.2.5(2021-08-23) +- 修复 在uni-forms中 modelValue 中不存在当前字段,当前字段必填写也不参与校验的问题 +## 0.2.4(2021-08-17) +- 修复 单选 list 模式下 ,icon 为 left 时,选中图标不显示的问题 +## 0.2.3(2021-08-11) +- 修复 在 uni-forms 中重置表单,错误信息无法清除的问题 +## 0.2.2(2021-07-30) +- 优化 在uni-forms组件,与label不对齐的问题 +## 0.2.1(2021-07-27) +- 修复 单选默认值为0不能选中的Bug +## 0.2.0(2021-07-13) +- 组件兼容 vue3,如何创建vue3项目,详见 [uni-app 项目支持 vue3 介绍](https://ask.dcloud.net.cn/article/37834) +## 0.1.11(2021-07-06) +- 优化 删除无用日志 +## 0.1.10(2021-07-05) +- 修复 由 0.1.9 引起的非 nvue 端图标不显示的问题 +## 0.1.9(2021-07-05) +- 修复 nvue 黑框样式问题 +## 0.1.8(2021-06-28) +- 修复 selectedTextColor 属性不生效的Bug +## 0.1.7(2021-06-02) +- 新增 map 属性,可以方便映射text/value属性 +## 0.1.6(2021-05-26) +- 修复 不关联服务空间的情况下组件报错的Bug +## 0.1.5(2021-05-12) +- 新增 组件示例地址 +## 0.1.4(2021-04-09) +- 修复 nvue 下无法选中的问题 +## 0.1.3(2021-03-22) +- 新增 disabled属性 +## 0.1.2(2021-02-24) +- 优化 默认颜色显示 +## 0.1.1(2021-02-24) +- 新增 支持nvue +## 0.1.0(2021-02-18) +- “暂无数据”显示居中 diff --git a/uni_modules/uni-data-checkbox/components/uni-data-checkbox/uni-data-checkbox.vue b/uni_modules/uni-data-checkbox/components/uni-data-checkbox/uni-data-checkbox.vue new file mode 100644 index 0000000..ccea7e9 --- /dev/null +++ b/uni_modules/uni-data-checkbox/components/uni-data-checkbox/uni-data-checkbox.vue @@ -0,0 +1,817 @@ + + + + + diff --git a/uni_modules/uni-data-checkbox/package.json b/uni_modules/uni-data-checkbox/package.json new file mode 100644 index 0000000..64131e7 --- /dev/null +++ b/uni_modules/uni-data-checkbox/package.json @@ -0,0 +1,87 @@ +{ + "id": "uni-data-checkbox", + "displayName": "uni-data-checkbox 数据选择器", + "version": "1.0.1", + "description": "通过数据驱动的单选框和复选框", + "keywords": [ + "uni-ui", + "checkbox", + "单选", + "多选", + "单选多选" +], + "repository": "https://github.com/dcloudio/uni-ui", + "engines": { + "HBuilderX": "^3.1.1" + }, + "directories": { + "example": "../../temps/example_temps" + }, + "dcloudext": { + "category": [ + "前端组件", + "通用组件" + ], + "sale": { + "regular": { + "price": "0.00" + }, + "sourcecode": { + "price": "0.00" + } + }, + "contact": { + "qq": "" + }, + "declaration": { + "ads": "无", + "data": "无", + "permissions": "无" + }, + "npmurl": "https://www.npmjs.com/package/@dcloudio/uni-ui" + }, + "uni_modules": { + "dependencies": ["uni-load-more","uni-scss"], + "encrypt": [], + "platforms": { + "cloud": { + "tcb": "y", + "aliyun": "y" + }, + "client": { + "App": { + "app-vue": "y", + "app-nvue": "y" + }, + "H5-mobile": { + "Safari": "y", + "Android Browser": "y", + "微信浏览器(Android)": "y", + "QQ浏览器(Android)": "y" + }, + "H5-pc": { + "Chrome": "y", + "IE": "y", + "Edge": "y", + "Firefox": "y", + "Safari": "y" + }, + "小程序": { + "微信": "y", + "阿里": "y", + "百度": "y", + "字节跳动": "y", + "QQ": "y" + }, + "快应用": { + "华为": "u", + "联盟": "u" + }, + "Vue": { + "vue2": "y", + "vue3": "y" + } + } + } + } +} diff --git a/uni_modules/uni-data-checkbox/readme.md b/uni_modules/uni-data-checkbox/readme.md new file mode 100644 index 0000000..6eb253d --- /dev/null +++ b/uni_modules/uni-data-checkbox/readme.md @@ -0,0 +1,18 @@ + + +## DataCheckbox 数据驱动的单选复选框 +> **组件名:uni-data-checkbox** +> 代码块: `uDataCheckbox` + + +本组件是基于uni-app基础组件checkbox的封装。本组件要解决问题包括: + +1. 数据绑定型组件:给本组件绑定一个data,会自动渲染一组候选内容。再以往,开发者需要编写不少代码实现类似功能 +2. 自动的表单校验:组件绑定了data,且符合[uni-forms](https://ext.dcloud.net.cn/plugin?id=2773)组件的表单校验规范,搭配使用会自动实现表单校验 +3. 本组件合并了单选多选 +4. 本组件有若干风格选择,如普通的单选多选框、并列button风格、tag风格。开发者可以快速选择需要的风格。但作为一个封装组件,样式代码虽然不用自己写了,却会牺牲一定的样式自定义性 + +在uniCloud开发中,`DB Schema`中配置了enum枚举等类型后,在web控制台的[自动生成表单](https://uniapp.dcloud.io/uniCloud/schema?id=autocode)功能中,会自动生成``uni-data-checkbox``组件并绑定好data + +### [查看文档](https://uniapp.dcloud.io/component/uniui/uni-data-checkbox) +#### 如使用过程中有任何问题,或者您对uni-ui有一些好的建议,欢迎加入 uni-ui 交流群:871950839 \ No newline at end of file diff --git a/uni_modules/uni-data-picker/changelog.md b/uni_modules/uni-data-picker/changelog.md new file mode 100644 index 0000000..0c45f8f --- /dev/null +++ b/uni_modules/uni-data-picker/changelog.md @@ -0,0 +1,58 @@ +## 1.0.4(2022-04-19) +- 修复 字节小程序 本地数据无法选择下一级的Bug +## 1.0.3(2022-02-25) +- 修复 nvue 不支持的 v-show 的 bug +## 1.0.2(2022-02-25) +- 修复 条件编译 nvue 不支持的 css 样式 +## 1.0.1(2021-11-23) +- 修复 由上个版本引发的map、v-model等属性不生效的bug +## 1.0.0(2021-11-19) +- 优化 组件 UI,并提供设计资源,详见:[https://uniapp.dcloud.io/component/uniui/resource](https://uniapp.dcloud.io/component/uniui/resource) +- 文档迁移,详见:[https://uniapp.dcloud.io/component/uniui/uni-data-picker](https://uniapp.dcloud.io/component/uniui/uni-data-picker) +## 0.4.9(2021-10-28) +- 修复 VUE2 v-model 概率无效的 bug +## 0.4.8(2021-10-27) +- 修复 v-model 概率无效的 bug +## 0.4.7(2021-10-25) +- 新增 属性 spaceInfo 服务空间配置 HBuilderX 3.2.11+ +- 修复 树型 uniCloud 数据类型为 int 时报错的 bug +## 0.4.6(2021-10-19) +- 修复 非 VUE3 v-model 为 0 时无法选中的 bug +## 0.4.5(2021-09-26) +- 新增 清除已选项的功能(通过 clearIcon 属性配置是否显示按钮),同时提供 clear 方法以供调用,二者等效 +- 修复 readonly 为 true 时报错的 bug +## 0.4.4(2021-09-26) +- 修复 上一版本造成的 map 属性失效的 bug +- 新增 ellipsis 属性,支持配置 tab 选项长度过长时是否自动省略 +## 0.4.3(2021-09-24) +- 修复 某些情况下级联未触发的 bug +## 0.4.2(2021-09-23) +- 新增 提供 show 和 hide 方法,开发者可以通过 ref 调用 +- 新增 选项内容过长自动添加省略号 +## 0.4.1(2021-09-15) +- 新增 map 属性 字段映射,将 text/value 映射到数据中的其他字段 +## 0.4.0(2021-07-13) +- 组件兼容 vue3,如何创建 vue3 项目,详见 [uni-app 项目支持 vue3 介绍](https://ask.dcloud.net.cn/article/37834) +## 0.3.5(2021-06-04) +- 修复 无法加载云端数据的问题 +## 0.3.4(2021-05-28) +- 修复 v-model 无效问题 +- 修复 loaddata 为空数据组时加载时间过长问题 +- 修复 上个版本引出的本地数据无法选择带有 children 的 2 级节点 +## 0.3.3(2021-05-12) +- 新增 组件示例地址 +## 0.3.2(2021-04-22) +- 修复 非树形数据有 where 属性查询报错的问题 +## 0.3.1(2021-04-15) +- 修复 本地数据概率无法回显时问题 +## 0.3.0(2021-04-07) +- 新增 支持云端非树形表结构数据 +- 修复 根节点 parent_field 字段等于 null 时选择界面错乱问题 +## 0.2.0(2021-03-15) +- 修复 nodeclick、popupopened、popupclosed 事件无法触发的问题 +## 0.1.9(2021-03-09) +- 修复 微信小程序某些情况下无法选择的问题 +## 0.1.8(2021-02-05) +- 优化 部分样式在 nvue 上的兼容表现 +## 0.1.7(2021-02-05) +- 调整为 uni_modules 目录规范 diff --git a/uni_modules/uni-data-picker/components/uni-data-picker/keypress.js b/uni_modules/uni-data-picker/components/uni-data-picker/keypress.js new file mode 100644 index 0000000..6ef26a2 --- /dev/null +++ b/uni_modules/uni-data-picker/components/uni-data-picker/keypress.js @@ -0,0 +1,45 @@ +// #ifdef H5 +export default { + name: 'Keypress', + props: { + disable: { + type: Boolean, + default: false + } + }, + mounted () { + const keyNames = { + esc: ['Esc', 'Escape'], + tab: 'Tab', + enter: 'Enter', + space: [' ', 'Spacebar'], + up: ['Up', 'ArrowUp'], + left: ['Left', 'ArrowLeft'], + right: ['Right', 'ArrowRight'], + down: ['Down', 'ArrowDown'], + delete: ['Backspace', 'Delete', 'Del'] + } + const listener = ($event) => { + if (this.disable) { + return + } + const keyName = Object.keys(keyNames).find(key => { + const keyName = $event.key + const value = keyNames[key] + return value === keyName || (Array.isArray(value) && value.includes(keyName)) + }) + if (keyName) { + // 避免和其他按键事件冲突 + setTimeout(() => { + this.$emit(keyName, {}) + }, 0) + } + } + document.addEventListener('keyup', listener) + this.$once('hook:beforeDestroy', () => { + document.removeEventListener('keyup', listener) + }) + }, + render: () => {} +} +// #endif diff --git a/uni_modules/uni-data-picker/components/uni-data-picker/uni-data-picker.vue b/uni_modules/uni-data-picker/components/uni-data-picker/uni-data-picker.vue new file mode 100644 index 0000000..a55c2a4 --- /dev/null +++ b/uni_modules/uni-data-picker/components/uni-data-picker/uni-data-picker.vue @@ -0,0 +1,539 @@ + + + + + diff --git a/uni_modules/uni-data-picker/components/uni-data-pickerview/uni-data-picker.js b/uni_modules/uni-data-picker/components/uni-data-pickerview/uni-data-picker.js new file mode 100644 index 0000000..c12fd54 --- /dev/null +++ b/uni_modules/uni-data-picker/components/uni-data-pickerview/uni-data-picker.js @@ -0,0 +1,563 @@ +export default { + props: { + localdata: { + type: [Array, Object], + default () { + return [] + } + }, + spaceInfo: { + type: Object, + default () { + return {} + } + }, + collection: { + type: String, + default: '' + }, + action: { + type: String, + default: '' + }, + field: { + type: String, + default: '' + }, + orderby: { + type: String, + default: '' + }, + where: { + type: [String, Object], + default: '' + }, + pageData: { + type: String, + default: 'add' + }, + pageCurrent: { + type: Number, + default: 1 + }, + pageSize: { + type: Number, + default: 20 + }, + getcount: { + type: [Boolean, String], + default: false + }, + getone: { + type: [Boolean, String], + default: false + }, + gettree: { + type: [Boolean, String], + default: false + }, + manual: { + type: Boolean, + default: false + }, + value: { + type: [Array, String, Number], + default () { + return [] + } + }, + modelValue: { + type: [Array, String, Number], + default () { + return [] + } + }, + preload: { + type: Boolean, + default: false + }, + stepSearh: { + type: Boolean, + default: true + }, + selfField: { + type: String, + default: '' + }, + parentField: { + type: String, + default: '' + }, + multiple: { + type: Boolean, + default: false + }, + map: { + type: Object, + default() { + return { + text: "text", + value: "value" + } + } + } + }, + data() { + return { + loading: false, + errorMessage: '', + loadMore: { + contentdown: '', + contentrefresh: '', + contentnomore: '' + }, + dataList: [], + selected: [], + selectedIndex: 0, + page: { + current: this.pageCurrent, + size: this.pageSize, + count: 0 + } + } + }, + computed: { + isLocaldata() { + return !this.collection.length + }, + postField() { + let fields = [this.field]; + if (this.parentField) { + fields.push(`${this.parentField} as parent_value`); + } + return fields.join(','); + }, + dataValue() { + let isModelValue = Array.isArray(this.modelValue) ? (this.modelValue.length > 0) : (this.modelValue !== null || this.modelValue !== undefined) + return isModelValue ? this.modelValue : this.value + }, + hasValue() { + if (typeof this.dataValue === 'number') { + return true + } + return (this.dataValue != null) && (this.dataValue.length > 0) + } + }, + created() { + this.$watch(() => { + var al = []; + ['pageCurrent', + 'pageSize', + 'spaceInfo', + 'value', + 'modelValue', + 'localdata', + 'collection', + 'action', + 'field', + 'orderby', + 'where', + 'getont', + 'getcount', + 'gettree' + ].forEach(key => { + al.push(this[key]) + }); + return al + }, (newValue, oldValue) => { + let needReset = false + for (let i = 2; i < newValue.length; i++) { + if (newValue[i] != oldValue[i]) { + needReset = true + break + } + } + if (newValue[0] != oldValue[0]) { + this.page.current = this.pageCurrent + } + this.page.size = this.pageSize + + this.onPropsChange() + }) + this._treeData = [] + }, + methods: { + onPropsChange() { + this._treeData = [] + }, + getCommand(options = {}) { + /* eslint-disable no-undef */ + let db = uniCloud.database(this.spaceInfo) + + const action = options.action || this.action + if (action) { + db = db.action(action) + } + + const collection = options.collection || this.collection + db = db.collection(collection) + + const where = options.where || this.where + if (!(!where || !Object.keys(where).length)) { + db = db.where(where) + } + + const field = options.field || this.field + if (field) { + db = db.field(field) + } + + const orderby = options.orderby || this.orderby + if (orderby) { + db = db.orderBy(orderby) + } + + const current = options.pageCurrent !== undefined ? options.pageCurrent : this.page.current + const size = options.pageSize !== undefined ? options.pageSize : this.page.size + const getCount = options.getcount !== undefined ? options.getcount : this.getcount + const getTree = options.gettree !== undefined ? options.gettree : this.gettree + + const getOptions = { + getCount, + getTree + } + if (options.getTreePath) { + getOptions.getTreePath = options.getTreePath + } + + db = db.skip(size * (current - 1)).limit(size).get(getOptions) + + return db + }, + getNodeData(callback) { + if (this.loading) { + return + } + this.loading = true + this.getCommand({ + field: this.postField, + where: this._pathWhere() + }).then((res) => { + this.loading = false + this.selected = res.result.data + callback && callback() + }).catch((err) => { + this.loading = false + this.errorMessage = err + }) + }, + getTreePath(callback) { + if (this.loading) { + return + } + this.loading = true + + this.getCommand({ + field: this.postField, + getTreePath: { + startWith: `${this.selfField}=='${this.dataValue}'` + } + }).then((res) => { + this.loading = false + let treePath = [] + this._extractTreePath(res.result.data, treePath) + this.selected = treePath + callback && callback() + }).catch((err) => { + this.loading = false + this.errorMessage = err + }) + }, + loadData() { + if (this.isLocaldata) { + this._processLocalData() + return + } + + if (this.dataValue != null) { + this._loadNodeData((data) => { + this._treeData = data + this._updateBindData() + this._updateSelected() + }) + return + } + + if (this.stepSearh) { + this._loadNodeData((data) => { + this._treeData = data + this._updateBindData() + }) + } else { + this._loadAllData((data) => { + this._treeData = [] + this._extractTree(data, this._treeData, null) + this._updateBindData() + }) + } + }, + _loadAllData(callback) { + if (this.loading) { + return + } + this.loading = true + + this.getCommand({ + field: this.postField, + gettree: true, + startwith: `${this.selfField}=='${this.dataValue}'` + }).then((res) => { + this.loading = false + callback(res.result.data) + this.onDataChange() + }).catch((err) => { + this.loading = false + this.errorMessage = err + }) + }, + _loadNodeData(callback, pw) { + if (this.loading) { + return + } + this.loading = true + + this.getCommand({ + field: this.postField, + where: pw || this._postWhere(), + pageSize: 500 + }).then((res) => { + this.loading = false + callback(res.result.data) + this.onDataChange() + }).catch((err) => { + this.loading = false + this.errorMessage = err + }) + }, + _pathWhere() { + let result = [] + let where_field = this._getParentNameByField(); + if (where_field) { + result.push(`${where_field} == '${this.dataValue}'`) + } + + if (this.where) { + return `(${this.where}) && (${result.join(' || ')})` + } + + return result.join(' || ') + }, + _postWhere() { + let result = [] + let selected = this.selected + let parentField = this.parentField + if (parentField) { + result.push(`${parentField} == null || ${parentField} == ""`) + } + if (selected.length) { + for (var i = 0; i < selected.length - 1; i++) { + result.push(`${parentField} == '${selected[i].value}'`) + } + } + + let where = [] + if (this.where) { + where.push(`(${this.where})`) + } + if (result.length) { + where.push(`(${result.join(' || ')})`) + } + + return where.join(' && ') + }, + _nodeWhere() { + let result = [] + let selected = this.selected + if (selected.length) { + result.push(`${this.parentField} == '${selected[selected.length - 1].value}'`) + } + + if (this.where) { + return `(${this.where}) && (${result.join(' || ')})` + } + + return result.join(' || ') + }, + _getParentNameByField() { + const fields = this.field.split(','); + let where_field = null; + for (let i = 0; i < fields.length; i++) { + const items = fields[i].split('as'); + if (items.length < 2) { + continue; + } + if (items[1].trim() === 'value') { + where_field = items[0].trim(); + break; + } + } + return where_field + }, + _isTreeView() { + return (this.parentField && this.selfField) + }, + _updateSelected() { + var dl = this.dataList + var sl = this.selected + let textField = this.map.text + let valueField = this.map.value + for (var i = 0; i < sl.length; i++) { + var value = sl[i].value + var dl2 = dl[i] + for (var j = 0; j < dl2.length; j++) { + var item2 = dl2[j] + if (item2[valueField] === value) { + sl[i].text = item2[textField] + break + } + } + } + }, + _updateBindData(node) { + const { + dataList, + hasNodes + } = this._filterData(this._treeData, this.selected) + + let isleaf = this._stepSearh === false && !hasNodes + + if (node) { + node.isleaf = isleaf + } + + this.dataList = dataList + this.selectedIndex = dataList.length - 1 + + if (!isleaf && this.selected.length < dataList.length) { + this.selected.push({ + value: null, + text: "请选择" + }) + } + + return { + isleaf, + hasNodes + } + }, + _filterData(data, paths) { + let dataList = [] + let hasNodes = true + + dataList.push(data.filter((item) => { + return (item.parent_value === null || item.parent_value === undefined || item.parent_value === '') + })) + for (let i = 0; i < paths.length; i++) { + var value = paths[i].value + var nodes = data.filter((item) => { + return item.parent_value === value + }) + + if (nodes.length) { + dataList.push(nodes) + } else { + hasNodes = false + } + } + + return { + dataList, + hasNodes + } + }, + _extractTree(nodes, result, parent_value) { + let list = result || [] + let valueField = this.map.value + for (let i = 0; i < nodes.length; i++) { + let node = nodes[i] + + let child = {} + for (let key in node) { + if (key !== 'children') { + child[key] = node[key] + } + } + if (parent_value !== null && parent_value !== undefined && parent_value !== '') { + child.parent_value = parent_value + } + result.push(child) + + let children = node.children + if (children) { + this._extractTree(children, result, node[valueField]) + } + } + }, + _extractTreePath(nodes, result) { + let list = result || [] + for (let i = 0; i < nodes.length; i++) { + let node = nodes[i] + + let child = {} + for (let key in node) { + if (key !== 'children') { + child[key] = node[key] + } + } + result.push(child) + + let children = node.children + if (children) { + this._extractTreePath(children, result) + } + } + }, + _findNodePath(key, nodes, path = []) { + let textField = this.map.text + let valueField = this.map.value + for (let i = 0; i < nodes.length; i++) { + let node = nodes[i] + let children = node.children + let text = node[textField] + let value = node[valueField] + + path.push({ + value, + text + }) + + if (value === key) { + return path + } + + if (children) { + const p = this._findNodePath(key, children, path) + if (p.length) { + return p + } + } + + path.pop() + } + return [] + }, + _processLocalData() { + this._treeData = [] + this._extractTree(this.localdata, this._treeData) + + var inputValue = this.dataValue + if (inputValue === undefined) { + return + } + + if (Array.isArray(inputValue)) { + inputValue = inputValue[inputValue.length - 1] + if (typeof inputValue === 'object' && inputValue[this.map.value]) { + inputValue = inputValue[this.map.value] + } + } + + this.selected = this._findNodePath(inputValue, this.localdata) + } + } +} diff --git a/uni_modules/uni-data-picker/components/uni-data-pickerview/uni-data-pickerview.vue b/uni_modules/uni-data-picker/components/uni-data-pickerview/uni-data-pickerview.vue new file mode 100644 index 0000000..72f8b33 --- /dev/null +++ b/uni_modules/uni-data-picker/components/uni-data-pickerview/uni-data-pickerview.vue @@ -0,0 +1,333 @@ + + + + diff --git a/uni_modules/uni-data-picker/package.json b/uni_modules/uni-data-picker/package.json new file mode 100644 index 0000000..ab4029e --- /dev/null +++ b/uni_modules/uni-data-picker/package.json @@ -0,0 +1,92 @@ +{ + "id": "uni-data-picker", + "displayName": "uni-data-picker 数据驱动的picker选择器", + "version": "1.0.4", + "description": "单列、多列级联选择器,常用于省市区城市选择、公司部门选择、多级分类等场景", + "keywords": [ + "uni-ui", + "uniui", + "picker", + "级联", + "省市区", + "" +], + "repository": "https://github.com/dcloudio/uni-ui", + "engines": { + "HBuilderX": "" + }, + "directories": { + "example": "../../temps/example_temps" + }, + "dcloudext": { + "category": [ + "前端组件", + "通用组件" + ], + "sale": { + "regular": { + "price": "0.00" + }, + "sourcecode": { + "price": "0.00" + } + }, + "contact": { + "qq": "" + }, + "declaration": { + "ads": "无", + "data": "无", + "permissions": "无" + }, + "npmurl": "https://www.npmjs.com/package/@dcloudio/uni-ui" + }, + "uni_modules": { + "dependencies": [ + "uni-load-more", + "uni-icons", + "uni-scss" + ], + "encrypt": [], + "platforms": { + "cloud": { + "tcb": "y", + "aliyun": "y" + }, + "client": { + "App": { + "app-vue": "y", + "app-nvue": "y" + }, + "H5-mobile": { + "Safari": "y", + "Android Browser": "y", + "微信浏览器(Android)": "y", + "QQ浏览器(Android)": "y" + }, + "H5-pc": { + "Chrome": "y", + "IE": "y", + "Edge": "y", + "Firefox": "y", + "Safari": "y" + }, + "小程序": { + "微信": "y", + "阿里": "y", + "百度": "y", + "字节跳动": "y", + "QQ": "y" + }, + "快应用": { + "华为": "u", + "联盟": "u" + }, + "Vue": { + "vue2": "y", + "vue3": "y" + } + } + } + } +} \ No newline at end of file diff --git a/uni_modules/uni-data-picker/readme.md b/uni_modules/uni-data-picker/readme.md new file mode 100644 index 0000000..6cda224 --- /dev/null +++ b/uni_modules/uni-data-picker/readme.md @@ -0,0 +1,22 @@ +## DataPicker 级联选择 +> **组件名:uni-data-picker** +> 代码块: `uDataPicker` +> 关联组件:`uni-data-pickerview`、`uni-load-more`。 + + +`` 是一个选择类[datacom组件](https://uniapp.dcloud.net.cn/component/datacom)。 + +支持单列、和多列级联选择。列数没有限制,如果屏幕显示不全,顶部tab区域会左右滚动。 + +候选数据支持一次性加载完毕,也支持懒加载,比如示例图中,选择了“北京”后,动态加载北京的区县数据。 + +`` 组件尤其适用于地址选择、分类选择等选择类。 + +`` 支持本地数据、云端静态数据(json),uniCloud云数据库数据。 + +`` 可以通过JQL直连uniCloud云数据库,配套[DB Schema](https://uniapp.dcloud.net.cn/uniCloud/schema),可在schema2code中自动生成前端页面,还支持服务器端校验。 + +在uniCloud数据表中新建表“uni-id-address”和“opendb-city-china”,这2个表的schema自带foreignKey关联。在“uni-id-address”表的表结构页面使用schema2code生成前端页面,会自动生成地址管理的维护页面,自动从“opendb-city-china”表包含的中国所有省市区信息里选择地址。 + +### [查看文档](https://uniapp.dcloud.io/component/uniui/uni-data-picker) +#### 如使用过程中有任何问题,或者您对uni-ui有一些好的建议,欢迎加入 uni-ui 交流群:871950839 \ No newline at end of file diff --git a/uni_modules/uni-dateformat/changelog.md b/uni_modules/uni-dateformat/changelog.md new file mode 100644 index 0000000..d551d7b --- /dev/null +++ b/uni_modules/uni-dateformat/changelog.md @@ -0,0 +1,10 @@ +## 1.0.0(2021-11-19) +- 优化 组件UI,并提供设计资源,详见:[https://uniapp.dcloud.io/component/uniui/resource](https://uniapp.dcloud.io/component/uniui/resource) +- 文档迁移,详见:[https://uniapp.dcloud.io/component/uniui/uni-dateformat](https://uniapp.dcloud.io/component/uniui/uni-dateformat) +## 0.0.5(2021-07-08) +- 调整 默认时间不再是当前时间,而是显示'-'字符 +## 0.0.4(2021-05-12) +- 新增 组件示例地址 +## 0.0.3(2021-02-04) +- 调整为uni_modules目录规范 +- 修复 iOS 平台日期格式化出错的问题 diff --git a/uni_modules/uni-dateformat/components/uni-dateformat/date-format.js b/uni_modules/uni-dateformat/components/uni-dateformat/date-format.js new file mode 100644 index 0000000..e00d559 --- /dev/null +++ b/uni_modules/uni-dateformat/components/uni-dateformat/date-format.js @@ -0,0 +1,200 @@ +// yyyy-MM-dd hh:mm:ss.SSS 所有支持的类型 +function pad(str, length = 2) { + str += '' + while (str.length < length) { + str = '0' + str + } + return str.slice(-length) +} + +const parser = { + yyyy: (dateObj) => { + return pad(dateObj.year, 4) + }, + yy: (dateObj) => { + return pad(dateObj.year) + }, + MM: (dateObj) => { + return pad(dateObj.month) + }, + M: (dateObj) => { + return dateObj.month + }, + dd: (dateObj) => { + return pad(dateObj.day) + }, + d: (dateObj) => { + return dateObj.day + }, + hh: (dateObj) => { + return pad(dateObj.hour) + }, + h: (dateObj) => { + return dateObj.hour + }, + mm: (dateObj) => { + return pad(dateObj.minute) + }, + m: (dateObj) => { + return dateObj.minute + }, + ss: (dateObj) => { + return pad(dateObj.second) + }, + s: (dateObj) => { + return dateObj.second + }, + SSS: (dateObj) => { + return pad(dateObj.millisecond, 3) + }, + S: (dateObj) => { + return dateObj.millisecond + }, +} + +// 这都n年了iOS依然不认识2020-12-12,需要转换为2020/12/12 +function getDate(time) { + if (time instanceof Date) { + return time + } + switch (typeof time) { + case 'string': + { + // 2020-12-12T12:12:12.000Z、2020-12-12T12:12:12.000 + if (time.indexOf('T') > -1) { + return new Date(time) + } + return new Date(time.replace(/-/g, '/')) + } + default: + return new Date(time) + } +} + +export function formatDate(date, format = 'yyyy/MM/dd hh:mm:ss') { + if (!date && date !== 0) { + return '' + } + date = getDate(date) + const dateObj = { + year: date.getFullYear(), + month: date.getMonth() + 1, + day: date.getDate(), + hour: date.getHours(), + minute: date.getMinutes(), + second: date.getSeconds(), + millisecond: date.getMilliseconds() + } + const tokenRegExp = /yyyy|yy|MM|M|dd|d|hh|h|mm|m|ss|s|SSS|SS|S/ + let flag = true + let result = format + while (flag) { + flag = false + result = result.replace(tokenRegExp, function(matched) { + flag = true + return parser[matched](dateObj) + }) + } + return result +} + +export function friendlyDate(time, { + locale = 'zh', + threshold = [60000, 3600000], + format = 'yyyy/MM/dd hh:mm:ss' +}) { + if (time === '-') { + return time + } + if (!time && time !== 0) { + return '' + } + const localeText = { + zh: { + year: '年', + month: '月', + day: '天', + hour: '小时', + minute: '分钟', + second: '秒', + ago: '前', + later: '后', + justNow: '刚刚', + soon: '马上', + template: '{num}{unit}{suffix}' + }, + en: { + year: 'year', + month: 'month', + day: 'day', + hour: 'hour', + minute: 'minute', + second: 'second', + ago: 'ago', + later: 'later', + justNow: 'just now', + soon: 'soon', + template: '{num} {unit} {suffix}' + } + } + const text = localeText[locale] || localeText.zh + let date = getDate(time) + let ms = date.getTime() - Date.now() + let absMs = Math.abs(ms) + if (absMs < threshold[0]) { + return ms < 0 ? text.justNow : text.soon + } + if (absMs >= threshold[1]) { + return formatDate(date, format) + } + let num + let unit + let suffix = text.later + if (ms < 0) { + suffix = text.ago + ms = -ms + } + const seconds = Math.floor((ms) / 1000) + const minutes = Math.floor(seconds / 60) + const hours = Math.floor(minutes / 60) + const days = Math.floor(hours / 24) + const months = Math.floor(days / 30) + const years = Math.floor(months / 12) + switch (true) { + case years > 0: + num = years + unit = text.year + break + case months > 0: + num = months + unit = text.month + break + case days > 0: + num = days + unit = text.day + break + case hours > 0: + num = hours + unit = text.hour + break + case minutes > 0: + num = minutes + unit = text.minute + break + default: + num = seconds + unit = text.second + break + } + + if (locale === 'en') { + if (num === 1) { + num = 'a' + } else { + unit += 's' + } + } + + return text.template.replace(/{\s*num\s*}/g, num + '').replace(/{\s*unit\s*}/g, unit).replace(/{\s*suffix\s*}/g, + suffix) +} diff --git a/uni_modules/uni-dateformat/components/uni-dateformat/uni-dateformat.vue b/uni_modules/uni-dateformat/components/uni-dateformat/uni-dateformat.vue new file mode 100644 index 0000000..c5ed030 --- /dev/null +++ b/uni_modules/uni-dateformat/components/uni-dateformat/uni-dateformat.vue @@ -0,0 +1,88 @@ + + + + + diff --git a/uni_modules/uni-dateformat/package.json b/uni_modules/uni-dateformat/package.json new file mode 100644 index 0000000..786a670 --- /dev/null +++ b/uni_modules/uni-dateformat/package.json @@ -0,0 +1,88 @@ +{ + "id": "uni-dateformat", + "displayName": "uni-dateformat 日期格式化", + "version": "1.0.0", + "description": "日期格式化组件,可以将日期格式化为1分钟前、刚刚等形式", + "keywords": [ + "uni-ui", + "uniui", + "日期格式化", + "时间格式化", + "格式化时间", + "" +], + "repository": "https://github.com/dcloudio/uni-ui", + "engines": { + "HBuilderX": "" + }, + "directories": { + "example": "../../temps/example_temps" + }, + "dcloudext": { + "category": [ + "前端组件", + "通用组件" + ], + "sale": { + "regular": { + "price": "0.00" + }, + "sourcecode": { + "price": "0.00" + } + }, + "contact": { + "qq": "" + }, + "declaration": { + "ads": "无", + "data": "无", + "permissions": "无" + }, + "npmurl": "https://www.npmjs.com/package/@dcloudio/uni-ui" + }, + "uni_modules": { + "dependencies": ["uni-scss"], + "encrypt": [], + "platforms": { + "cloud": { + "tcb": "y", + "aliyun": "y" + }, + "client": { + "App": { + "app-vue": "y", + "app-nvue": "y" + }, + "H5-mobile": { + "Safari": "y", + "Android Browser": "y", + "微信浏览器(Android)": "y", + "QQ浏览器(Android)": "y" + }, + "H5-pc": { + "Chrome": "y", + "IE": "y", + "Edge": "y", + "Firefox": "y", + "Safari": "y" + }, + "小程序": { + "微信": "y", + "阿里": "y", + "百度": "y", + "字节跳动": "y", + "QQ": "y" + }, + "快应用": { + "华为": "y", + "联盟": "y" + }, + "Vue": { + "vue2": "y", + "vue3": "y" + } + } + } + } +} \ No newline at end of file diff --git a/uni_modules/uni-dateformat/readme.md b/uni_modules/uni-dateformat/readme.md new file mode 100644 index 0000000..37ddb6e --- /dev/null +++ b/uni_modules/uni-dateformat/readme.md @@ -0,0 +1,11 @@ + + +### DateFormat 日期格式化 +> **组件名:uni-dateformat** +> 代码块: `uDateformat` + + +日期格式化组件。 + +### [查看文档](https://uniapp.dcloud.io/component/uniui/uni-dateformat) +#### 如使用过程中有任何问题,或者您对uni-ui有一些好的建议,欢迎加入 uni-ui 交流群:871950839 \ No newline at end of file diff --git a/uni_modules/uni-datetime-picker/changelog.md b/uni_modules/uni-datetime-picker/changelog.md new file mode 100644 index 0000000..9611a30 --- /dev/null +++ b/uni_modules/uni-datetime-picker/changelog.md @@ -0,0 +1,89 @@ +## 2.2.4(2022-03-31) +- 修复 Vue3 下动态赋值,单选类型未响应的 bug +## 2.2.3(2022-03-28) +- 修复 Vue3 下动态赋值未响应的 bug +## 2.2.2(2021-12-10) +- 修复 clear-icon 属性在小程序平台不生效的 bug +## 2.2.1(2021-12-10) +- 修复 日期范围选在小程序平台,必须多点击一次才能取消选中状态的 bug +## 2.2.0(2021-11-19) +- 优化 组件UI,并提供设计资源,详见:[https://uniapp.dcloud.io/component/uniui/resource](https://uniapp.dcloud.io/component/uniui/resource) +- 文档迁移,详见:[https://uniapp.dcloud.io/component/uniui/uni-datetime-picker](https://uniapp.dcloud.io/component/uniui/uni-datetime-picker) +## 2.1.5(2021-11-09) +- 新增 提供组件设计资源,组件样式调整 +## 2.1.4(2021-09-10) +- 修复 hide-second 在移动端的 bug +- 修复 单选赋默认值时,赋值日期未高亮的 bug +- 修复 赋默认值时,移动端未正确显示时间的 bug +## 2.1.3(2021-09-09) +- 新增 hide-second 属性,支持只使用时分,隐藏秒 +## 2.1.2(2021-09-03) +- 优化 取消选中时(范围选)直接开始下一次选择, 避免多点一次 +- 优化 移动端支持清除按钮,同时支持通过 ref 调用组件的 clear 方法 +- 优化 调整字号大小,美化日历界面 +- 修复 因国际化导致的 placeholder 失效的 bug +## 2.1.1(2021-08-24) +- 新增 支持国际化 +- 优化 范围选择器在 pc 端过宽的问题 +## 2.1.0(2021-08-09) +- 新增 适配 vue3 +## 2.0.19(2021-08-09) +- 新增 支持作为 uni-forms 子组件相关功能 +- 修复 在 uni-forms 中使用时,选择时间报 NAN 错误的 bug +## 2.0.18(2021-08-05) +- 修复 type 属性动态赋值无效的 bug +- 修复 ‘确认’按钮被 tabbar 遮盖 bug +- 修复 组件未赋值时范围选左、右日历相同的 bug +## 2.0.17(2021-08-04) +- 修复 范围选未正确显示当前值的 bug +- 修复 h5 平台(移动端)报错 'cale' of undefined 的 bug +## 2.0.16(2021-07-21) +- 新增 return-type 属性支持返回 date 日期对象 +## 2.0.15(2021-07-14) +- 修复 单选日期类型,初始赋值后不在当前日历的 bug +- 新增 clearIcon 属性,显示框的清空按钮可配置显示隐藏(仅 pc 有效) +- 优化 移动端移除显示框的清空按钮,无实际用途 +## 2.0.14(2021-07-14) +- 修复 组件赋值为空,界面未更新的 bug +- 修复 start 和 end 不能动态赋值的 bug +- 修复 范围选类型,用户选择后再次选择右侧日历(结束日期)显示不正确的 bug +## 2.0.13(2021-07-08) +- 修复 范围选择不能动态赋值的 bug +## 2.0.12(2021-07-08) +- 修复 范围选择的初始时间在一个月内时,造成无法选择的bug +## 2.0.11(2021-07-08) +- 优化 弹出层在超出视窗边缘定位不准确的问题 +## 2.0.10(2021-07-08) +- 修复 范围起始点样式的背景色与今日样式的字体前景色融合,导致日期字体看不清的 bug +- 优化 弹出层在超出视窗边缘被遮盖的问题 +## 2.0.9(2021-07-07) +- 新增 maskClick 事件 +- 修复 特殊情况日历 rpx 布局错误的 bug,rpx -> px +- 修复 范围选择时清空返回值不合理的bug,['', ''] -> [] +## 2.0.8(2021-07-07) +- 新增 日期时间显示框支持插槽 +## 2.0.7(2021-07-01) +- 优化 添加 uni-icons 依赖 +## 2.0.6(2021-05-22) +- 修复 图标在小程序上不显示的 bug +- 优化 重命名引用组件,避免潜在组件命名冲突 +## 2.0.5(2021-05-20) +- 优化 代码目录扁平化 +## 2.0.4(2021-05-12) +- 新增 组件示例地址 +## 2.0.3(2021-05-10) +- 修复 ios 下不识别 '-' 日期格式的 bug +- 优化 pc 下弹出层添加边框和阴影 +## 2.0.2(2021-05-08) +- 修复 在 admin 中获取弹出层定位错误的bug +## 2.0.1(2021-05-08) +- 修复 type 属性向下兼容,默认值从 date 变更为 datetime +## 2.0.0(2021-04-30) +- 支持日历形式的日期+时间的范围选择 + > 注意:此版本不向后兼容,不再支持单独时间选择(type=time)及相关的 hide-second 属性(时间选可使用内置组件 picker) +## 1.0.6(2021-03-18) +- 新增 hide-second 属性,时间支持仅选择时、分 +- 修复 选择跟显示的日期不一样的 bug +- 修复 chang事件触发2次的 bug +- 修复 分、秒 end 范围错误的 bug +- 优化 更好的 nvue 适配 diff --git a/uni_modules/uni-datetime-picker/components/uni-datetime-picker/calendar-item.vue b/uni_modules/uni-datetime-picker/components/uni-datetime-picker/calendar-item.vue new file mode 100644 index 0000000..3d2dbea --- /dev/null +++ b/uni_modules/uni-datetime-picker/components/uni-datetime-picker/calendar-item.vue @@ -0,0 +1,185 @@ + + + + + diff --git a/uni_modules/uni-datetime-picker/components/uni-datetime-picker/calendar.vue b/uni_modules/uni-datetime-picker/components/uni-datetime-picker/calendar.vue new file mode 100644 index 0000000..f05adaf --- /dev/null +++ b/uni_modules/uni-datetime-picker/components/uni-datetime-picker/calendar.vue @@ -0,0 +1,898 @@ + + + + + diff --git a/uni_modules/uni-datetime-picker/components/uni-datetime-picker/i18n/en.json b/uni_modules/uni-datetime-picker/components/uni-datetime-picker/i18n/en.json new file mode 100644 index 0000000..cc76311 --- /dev/null +++ b/uni_modules/uni-datetime-picker/components/uni-datetime-picker/i18n/en.json @@ -0,0 +1,19 @@ +{ + "uni-datetime-picker.selectDate": "select date", + "uni-datetime-picker.selectTime": "select time", + "uni-datetime-picker.selectDateTime": "select datetime", + "uni-datetime-picker.startDate": "start date", + "uni-datetime-picker.endDate": "end date", + "uni-datetime-picker.startTime": "start time", + "uni-datetime-picker.endTime": "end time", + "uni-datetime-picker.ok": "ok", + "uni-datetime-picker.clear": "clear", + "uni-datetime-picker.cancel": "cancel", + "uni-calender.MON": "MON", + "uni-calender.TUE": "TUE", + "uni-calender.WED": "WED", + "uni-calender.THU": "THU", + "uni-calender.FRI": "FRI", + "uni-calender.SAT": "SAT", + "uni-calender.SUN": "SUN" +} diff --git a/uni_modules/uni-datetime-picker/components/uni-datetime-picker/i18n/index.js b/uni_modules/uni-datetime-picker/components/uni-datetime-picker/i18n/index.js new file mode 100644 index 0000000..de7509c --- /dev/null +++ b/uni_modules/uni-datetime-picker/components/uni-datetime-picker/i18n/index.js @@ -0,0 +1,8 @@ +import en from './en.json' +import zhHans from './zh-Hans.json' +import zhHant from './zh-Hant.json' +export default { + en, + 'zh-Hans': zhHans, + 'zh-Hant': zhHant +} diff --git a/uni_modules/uni-datetime-picker/components/uni-datetime-picker/i18n/zh-Hans.json b/uni_modules/uni-datetime-picker/components/uni-datetime-picker/i18n/zh-Hans.json new file mode 100644 index 0000000..7bc7405 --- /dev/null +++ b/uni_modules/uni-datetime-picker/components/uni-datetime-picker/i18n/zh-Hans.json @@ -0,0 +1,19 @@ +{ + "uni-datetime-picker.selectDate": "选择日期", + "uni-datetime-picker.selectTime": "选择时间", + "uni-datetime-picker.selectDateTime": "选择日期时间", + "uni-datetime-picker.startDate": "开始日期", + "uni-datetime-picker.endDate": "结束日期", + "uni-datetime-picker.startTime": "开始时间", + "uni-datetime-picker.endTime": "结束时间", + "uni-datetime-picker.ok": "确定", + "uni-datetime-picker.clear": "清除", + "uni-datetime-picker.cancel": "取消", + "uni-calender.SUN": "日", + "uni-calender.MON": "一", + "uni-calender.TUE": "二", + "uni-calender.WED": "三", + "uni-calender.THU": "四", + "uni-calender.FRI": "五", + "uni-calender.SAT": "六" +} diff --git a/uni_modules/uni-datetime-picker/components/uni-datetime-picker/i18n/zh-Hant.json b/uni_modules/uni-datetime-picker/components/uni-datetime-picker/i18n/zh-Hant.json new file mode 100644 index 0000000..7d37043 --- /dev/null +++ b/uni_modules/uni-datetime-picker/components/uni-datetime-picker/i18n/zh-Hant.json @@ -0,0 +1,19 @@ +{ + "uni-datetime-picker.selectDate": "選擇日期", + "uni-datetime-picker.selectTime": "選擇時間", + "uni-datetime-picker.selectDateTime": "選擇日期時間", + "uni-datetime-picker.startDate": "開始日期", + "uni-datetime-picker.endDate": "結束日期", + "uni-datetime-picker.startTime": "開始时间", + "uni-datetime-picker.endTime": "結束时间", + "uni-datetime-picker.ok": "確定", + "uni-datetime-picker.clear": "清除", + "uni-datetime-picker.cancel": "取消", + "uni-calender.SUN": "日", + "uni-calender.MON": "一", + "uni-calender.TUE": "二", + "uni-calender.WED": "三", + "uni-calender.THU": "四", + "uni-calender.FRI": "五", + "uni-calender.SAT": "六" +} diff --git a/uni_modules/uni-datetime-picker/components/uni-datetime-picker/keypress.js b/uni_modules/uni-datetime-picker/components/uni-datetime-picker/keypress.js new file mode 100644 index 0000000..9601aba --- /dev/null +++ b/uni_modules/uni-datetime-picker/components/uni-datetime-picker/keypress.js @@ -0,0 +1,45 @@ +// #ifdef H5 +export default { + name: 'Keypress', + props: { + disable: { + type: Boolean, + default: false + } + }, + mounted () { + const keyNames = { + esc: ['Esc', 'Escape'], + tab: 'Tab', + enter: 'Enter', + space: [' ', 'Spacebar'], + up: ['Up', 'ArrowUp'], + left: ['Left', 'ArrowLeft'], + right: ['Right', 'ArrowRight'], + down: ['Down', 'ArrowDown'], + delete: ['Backspace', 'Delete', 'Del'] + } + const listener = ($event) => { + if (this.disable) { + return + } + const keyName = Object.keys(keyNames).find(key => { + const keyName = $event.key + const value = keyNames[key] + return value === keyName || (Array.isArray(value) && value.includes(keyName)) + }) + if (keyName) { + // 避免和其他按键事件冲突 + setTimeout(() => { + this.$emit(keyName, {}) + }, 0) + } + } + document.addEventListener('keyup', listener) + this.$once('hook:beforeDestroy', () => { + document.removeEventListener('keyup', listener) + }) + }, + render: () => {} +} +// #endif \ No newline at end of file diff --git a/uni_modules/uni-datetime-picker/components/uni-datetime-picker/time-picker.vue b/uni_modules/uni-datetime-picker/components/uni-datetime-picker/time-picker.vue new file mode 100644 index 0000000..699aa63 --- /dev/null +++ b/uni_modules/uni-datetime-picker/components/uni-datetime-picker/time-picker.vue @@ -0,0 +1,927 @@ + + + + + diff --git a/uni_modules/uni-datetime-picker/components/uni-datetime-picker/uni-datetime-picker.vue b/uni_modules/uni-datetime-picker/components/uni-datetime-picker/uni-datetime-picker.vue new file mode 100644 index 0000000..ea00857 --- /dev/null +++ b/uni_modules/uni-datetime-picker/components/uni-datetime-picker/uni-datetime-picker.vue @@ -0,0 +1,997 @@ + + + + diff --git a/uni_modules/uni-datetime-picker/components/uni-datetime-picker/util.js b/uni_modules/uni-datetime-picker/components/uni-datetime-picker/util.js new file mode 100644 index 0000000..efa5773 --- /dev/null +++ b/uni_modules/uni-datetime-picker/components/uni-datetime-picker/util.js @@ -0,0 +1,410 @@ +class Calendar { + constructor({ + date, + selected, + startDate, + endDate, + range, + // multipleStatus + } = {}) { + // 当前日期 + this.date = this.getDate(new Date()) // 当前初入日期 + // 打点信息 + this.selected = selected || []; + // 范围开始 + this.startDate = startDate + // 范围结束 + this.endDate = endDate + this.range = range + // 多选状态 + this.cleanMultipleStatus() + // 每周日期 + this.weeks = {} + // this._getWeek(this.date.fullDate) + // this.multipleStatus = multipleStatus + this.lastHover = false + } + /** + * 设置日期 + * @param {Object} date + */ + setDate(date) { + this.selectDate = this.getDate(date) + this._getWeek(this.selectDate.fullDate) + } + + /** + * 清理多选状态 + */ + cleanMultipleStatus() { + this.multipleStatus = { + before: '', + after: '', + data: [] + } + } + + /** + * 重置开始日期 + */ + resetSatrtDate(startDate) { + // 范围开始 + this.startDate = startDate + + } + + /** + * 重置结束日期 + */ + resetEndDate(endDate) { + // 范围结束 + this.endDate = endDate + } + + /** + * 获取任意时间 + */ + getDate(date, AddDayCount = 0, str = 'day') { + if (!date) { + date = new Date() + } + if (typeof date !== 'object') { + date = date.replace(/-/g, '/') + } + const dd = new Date(date) + switch (str) { + case 'day': + dd.setDate(dd.getDate() + AddDayCount) // 获取AddDayCount天后的日期 + break + case 'month': + if (dd.getDate() === 31) { + dd.setDate(dd.getDate() + AddDayCount) + } else { + dd.setMonth(dd.getMonth() + AddDayCount) // 获取AddDayCount天后的日期 + } + break + case 'year': + dd.setFullYear(dd.getFullYear() + AddDayCount) // 获取AddDayCount天后的日期 + break + } + const y = dd.getFullYear() + const m = dd.getMonth() + 1 < 10 ? '0' + (dd.getMonth() + 1) : dd.getMonth() + 1 // 获取当前月份的日期,不足10补0 + const d = dd.getDate() < 10 ? '0' + dd.getDate() : dd.getDate() // 获取当前几号,不足10补0 + return { + fullDate: y + '-' + m + '-' + d, + year: y, + month: m, + date: d, + day: dd.getDay() + } + } + + + /** + * 获取上月剩余天数 + */ + _getLastMonthDays(firstDay, full) { + let dateArr = [] + for (let i = firstDay; i > 0; i--) { + const beforeDate = new Date(full.year, full.month - 1, -i + 1).getDate() + dateArr.push({ + date: beforeDate, + month: full.month - 1, + disable: true + }) + } + return dateArr + } + /** + * 获取本月天数 + */ + _currentMonthDys(dateData, full) { + let dateArr = [] + let fullDate = this.date.fullDate + for (let i = 1; i <= dateData; i++) { + let isinfo = false + let nowDate = full.year + '-' + (full.month < 10 ? + full.month : full.month) + '-' + (i < 10 ? + '0' + i : i) + // 是否今天 + let isDay = fullDate === nowDate + // 获取打点信息 + let info = this.selected && this.selected.find((item) => { + if (this.dateEqual(nowDate, item.date)) { + return item + } + }) + + // 日期禁用 + let disableBefore = true + let disableAfter = true + if (this.startDate) { + // let dateCompBefore = this.dateCompare(this.startDate, fullDate) + // disableBefore = this.dateCompare(dateCompBefore ? this.startDate : fullDate, nowDate) + disableBefore = this.dateCompare(this.startDate, nowDate) + } + + if (this.endDate) { + // let dateCompAfter = this.dateCompare(fullDate, this.endDate) + // disableAfter = this.dateCompare(nowDate, dateCompAfter ? this.endDate : fullDate) + disableAfter = this.dateCompare(nowDate, this.endDate) + } + let multiples = this.multipleStatus.data + let checked = false + let multiplesStatus = -1 + if (this.range) { + if (multiples) { + multiplesStatus = multiples.findIndex((item) => { + return this.dateEqual(item, nowDate) + }) + } + if (multiplesStatus !== -1) { + checked = true + } + } + let data = { + fullDate: nowDate, + year: full.year, + date: i, + multiple: this.range ? checked : false, + beforeMultiple: this.isLogicBefore(nowDate, this.multipleStatus.before, this.multipleStatus.after), + afterMultiple: this.isLogicAfter(nowDate, this.multipleStatus.before, this.multipleStatus.after), + month: full.month, + disable: !(disableBefore && disableAfter), + isDay, + userChecked: false + } + if (info) { + data.extraInfo = info + } + + dateArr.push(data) + } + return dateArr + } + /** + * 获取下月天数 + */ + _getNextMonthDays(surplus, full) { + let dateArr = [] + for (let i = 1; i < surplus + 1; i++) { + dateArr.push({ + date: i, + month: Number(full.month) + 1, + disable: true + }) + } + return dateArr + } + + /** + * 获取当前日期详情 + * @param {Object} date + */ + getInfo(date) { + if (!date) { + date = new Date() + } + const dateInfo = this.canlender.find(item => item.fullDate === this.getDate(date).fullDate) + return dateInfo + } + + /** + * 比较时间大小 + */ + dateCompare(startDate, endDate) { + // 计算截止时间 + startDate = new Date(startDate.replace('-', '/').replace('-', '/')) + // 计算详细项的截止时间 + endDate = new Date(endDate.replace('-', '/').replace('-', '/')) + if (startDate <= endDate) { + return true + } else { + return false + } + } + + /** + * 比较时间是否相等 + */ + dateEqual(before, after) { + // 计算截止时间 + before = new Date(before.replace('-', '/').replace('-', '/')) + // 计算详细项的截止时间 + after = new Date(after.replace('-', '/').replace('-', '/')) + if (before.getTime() - after.getTime() === 0) { + return true + } else { + return false + } + } + + /** + * 比较真实起始日期 + */ + + isLogicBefore(currentDay, before, after) { + let logicBefore = before + if (before && after) { + logicBefore = this.dateCompare(before, after) ? before : after + } + return this.dateEqual(logicBefore, currentDay) + } + + isLogicAfter(currentDay, before, after) { + let logicAfter = after + if (before && after) { + logicAfter = this.dateCompare(before, after) ? after : before + } + return this.dateEqual(logicAfter, currentDay) + } + + /** + * 获取日期范围内所有日期 + * @param {Object} begin + * @param {Object} end + */ + geDateAll(begin, end) { + var arr = [] + var ab = begin.split('-') + var ae = end.split('-') + var db = new Date() + db.setFullYear(ab[0], ab[1] - 1, ab[2]) + var de = new Date() + de.setFullYear(ae[0], ae[1] - 1, ae[2]) + var unixDb = db.getTime() - 24 * 60 * 60 * 1000 + var unixDe = de.getTime() - 24 * 60 * 60 * 1000 + for (var k = unixDb; k <= unixDe;) { + k = k + 24 * 60 * 60 * 1000 + arr.push(this.getDate(new Date(parseInt(k))).fullDate) + } + return arr + } + + /** + * 获取多选状态 + */ + setMultiple(fullDate) { + let { + before, + after + } = this.multipleStatus + if (!this.range) return + if (before && after) { + if (!this.lastHover) { + this.lastHover = true + return + } + this.multipleStatus.before = fullDate + this.multipleStatus.after = '' + this.multipleStatus.data = [] + this.multipleStatus.fulldate = '' + this.lastHover = false + } else { + if (!before) { + this.multipleStatus.before = fullDate + this.lastHover = false + } else { + this.multipleStatus.after = fullDate + if (this.dateCompare(this.multipleStatus.before, this.multipleStatus.after)) { + this.multipleStatus.data = this.geDateAll(this.multipleStatus.before, this.multipleStatus + .after); + } else { + this.multipleStatus.data = this.geDateAll(this.multipleStatus.after, this.multipleStatus + .before); + } + this.lastHover = true + } + } + this._getWeek(fullDate) + } + + /** + * 鼠标 hover 更新多选状态 + */ + setHoverMultiple(fullDate) { + let { + before, + after + } = this.multipleStatus + + if (!this.range) return + if (this.lastHover) return + + if (!before) { + this.multipleStatus.before = fullDate + } else { + this.multipleStatus.after = fullDate + if (this.dateCompare(this.multipleStatus.before, this.multipleStatus.after)) { + this.multipleStatus.data = this.geDateAll(this.multipleStatus.before, this.multipleStatus.after); + } else { + this.multipleStatus.data = this.geDateAll(this.multipleStatus.after, this.multipleStatus.before); + } + } + this._getWeek(fullDate) + } + + /** + * 更新默认值多选状态 + */ + setDefaultMultiple(before, after) { + this.multipleStatus.before = before + this.multipleStatus.after = after + if (before && after) { + if (this.dateCompare(before, after)) { + this.multipleStatus.data = this.geDateAll(before, after); + this._getWeek(after) + } else { + this.multipleStatus.data = this.geDateAll(after, before); + this._getWeek(before) + } + } + } + + /** + * 获取每周数据 + * @param {Object} dateData + */ + _getWeek(dateData) { + const { + fullDate, + year, + month, + date, + day + } = this.getDate(dateData) + let firstDay = new Date(year, month - 1, 1).getDay() + let currentDay = new Date(year, month, 0).getDate() + let dates = { + lastMonthDays: this._getLastMonthDays(firstDay, this.getDate(dateData)), // 上个月末尾几天 + currentMonthDys: this._currentMonthDys(currentDay, this.getDate(dateData)), // 本月天数 + nextMonthDays: [], // 下个月开始几天 + weeks: [] + } + let canlender = [] + const surplus = 42 - (dates.lastMonthDays.length + dates.currentMonthDys.length) + dates.nextMonthDays = this._getNextMonthDays(surplus, this.getDate(dateData)) + canlender = canlender.concat(dates.lastMonthDays, dates.currentMonthDys, dates.nextMonthDays) + let weeks = {} + // 拼接数组 上个月开始几天 + 本月天数+ 下个月开始几天 + for (let i = 0; i < canlender.length; i++) { + if (i % 7 === 0) { + weeks[parseInt(i / 7)] = new Array(7) + } + weeks[parseInt(i / 7)][i % 7] = canlender[i] + } + this.canlender = canlender + this.weeks = weeks + } + + //静态方法 + // static init(date) { + // if (!this.instance) { + // this.instance = new Calendar(date); + // } + // return this.instance; + // } +} + + +export default Calendar diff --git a/uni_modules/uni-datetime-picker/package.json b/uni_modules/uni-datetime-picker/package.json new file mode 100644 index 0000000..0e44103 --- /dev/null +++ b/uni_modules/uni-datetime-picker/package.json @@ -0,0 +1,90 @@ +{ + "id": "uni-datetime-picker", + "displayName": "uni-datetime-picker 日期选择器", + "version": "2.2.4", + "description": "uni-datetime-picker 日期时间选择器,支持日历,支持范围选择", + "keywords": [ + "uni-datetime-picker", + "uni-ui", + "uniui", + "日期时间选择器", + "日期时间" +], + "repository": "https://github.com/dcloudio/uni-ui", + "engines": { + "HBuilderX": "" + }, + "directories": { + "example": "../../temps/example_temps" + }, + "dcloudext": { + "category": [ + "前端组件", + "通用组件" + ], + "sale": { + "regular": { + "price": "0.00" + }, + "sourcecode": { + "price": "0.00" + } + }, + "contact": { + "qq": "" + }, + "declaration": { + "ads": "无", + "data": "无", + "permissions": "无" + }, + "npmurl": "https://www.npmjs.com/package/@dcloudio/uni-ui" + }, + "uni_modules": { + "dependencies": [ + "uni-scss", + "uni-icons" + ], + "encrypt": [], + "platforms": { + "cloud": { + "tcb": "y", + "aliyun": "y" + }, + "client": { + "App": { + "app-vue": "y", + "app-nvue": "n" + }, + "H5-mobile": { + "Safari": "y", + "Android Browser": "y", + "微信浏览器(Android)": "y", + "QQ浏览器(Android)": "y" + }, + "H5-pc": { + "Chrome": "y", + "IE": "y", + "Edge": "y", + "Firefox": "y", + "Safari": "y" + }, + "小程序": { + "微信": "y", + "阿里": "y", + "百度": "y", + "字节跳动": "y", + "QQ": "y" + }, + "快应用": { + "华为": "u", + "联盟": "u" + }, + "Vue": { + "vue2": "y", + "vue3": "y" + } + } + } + } +} diff --git a/uni_modules/uni-datetime-picker/readme.md b/uni_modules/uni-datetime-picker/readme.md new file mode 100644 index 0000000..162fbef --- /dev/null +++ b/uni_modules/uni-datetime-picker/readme.md @@ -0,0 +1,21 @@ + + +> `重要通知:组件升级更新 2.0.0 后,支持日期+时间范围选择,组件 ui 将使用日历选择日期,ui 变化较大,同时支持 PC 和 移动端。此版本不向后兼容,不再支持单独的时间选择(type=time)及相关的 hide-second 属性(时间选可使用内置组件 picker)。若仍需使用旧版本,可在插件市场下载*非uni_modules版本*,旧版本将不再维护` + +## DatetimePicker 时间选择器 + +> **组件名:uni-datetime-picker** +> 代码块: `uDatetimePicker` + + +该组件的优势是,支持**时间戳**输入和输出(起始时间、终止时间也支持时间戳),可**同时选择**日期和时间。 + +若只是需要单独选择日期和时间,不需要时间戳输入和输出,可使用原生的 picker 组件。 + +**_点击 picker 默认值规则:_** + +- 若设置初始值 value, 会显示在 picker 显示框中 +- 若无初始值 value,则初始值 value 为当前本地时间 Date.now(), 但不会显示在 picker 显示框中 + +### [查看文档](https://uniapp.dcloud.io/component/uniui/uni-datetime-picker) +#### 如使用过程中有任何问题,或者您对uni-ui有一些好的建议,欢迎加入 uni-ui 交流群:871950839 \ No newline at end of file diff --git a/uni_modules/uni-drawer/changelog.md b/uni_modules/uni-drawer/changelog.md new file mode 100644 index 0000000..6d2488c --- /dev/null +++ b/uni_modules/uni-drawer/changelog.md @@ -0,0 +1,13 @@ +## 1.2.1(2021-11-22) +- 修复 vue3中个别scss变量无法找到的问题 +## 1.2.0(2021-11-19) +- 优化 组件UI,并提供设计资源,详见:[https://uniapp.dcloud.io/component/uniui/resource](https://uniapp.dcloud.io/component/uniui/resource) +- 文档迁移,详见:[https://uniapp.dcloud.io/component/uniui/uni-drawer](https://uniapp.dcloud.io/component/uniui/uni-drawer) +## 1.1.1(2021-07-30) +- 优化 vue3下事件警告的问题 +## 1.1.0(2021-07-13) +- 组件兼容 vue3,如何创建vue3项目,详见 [uni-app 项目支持 vue3 介绍](https://ask.dcloud.net.cn/article/37834) +## 1.0.7(2021-05-12) +- 新增 组件示例地址 +## 1.0.6(2021-02-04) +- 调整为uni_modules目录规范 diff --git a/uni_modules/uni-drawer/components/uni-drawer/keypress.js b/uni_modules/uni-drawer/components/uni-drawer/keypress.js new file mode 100644 index 0000000..62dda46 --- /dev/null +++ b/uni_modules/uni-drawer/components/uni-drawer/keypress.js @@ -0,0 +1,45 @@ +// #ifdef H5 +export default { + name: 'Keypress', + props: { + disable: { + type: Boolean, + default: false + } + }, + mounted () { + const keyNames = { + esc: ['Esc', 'Escape'], + tab: 'Tab', + enter: 'Enter', + space: [' ', 'Spacebar'], + up: ['Up', 'ArrowUp'], + left: ['Left', 'ArrowLeft'], + right: ['Right', 'ArrowRight'], + down: ['Down', 'ArrowDown'], + delete: ['Backspace', 'Delete', 'Del'] + } + const listener = ($event) => { + if (this.disable) { + return + } + const keyName = Object.keys(keyNames).find(key => { + const keyName = $event.key + const value = keyNames[key] + return value === keyName || (Array.isArray(value) && value.includes(keyName)) + }) + if (keyName) { + // 避免和其他按键事件冲突 + setTimeout(() => { + this.$emit(keyName, {}) + }, 0) + } + } + document.addEventListener('keyup', listener) + // this.$once('hook:beforeDestroy', () => { + // document.removeEventListener('keyup', listener) + // }) + }, + render: () => {} +} +// #endif diff --git a/uni_modules/uni-drawer/components/uni-drawer/uni-drawer.vue b/uni_modules/uni-drawer/components/uni-drawer/uni-drawer.vue new file mode 100644 index 0000000..2471521 --- /dev/null +++ b/uni_modules/uni-drawer/components/uni-drawer/uni-drawer.vue @@ -0,0 +1,183 @@ + + + + + diff --git a/uni_modules/uni-drawer/package.json b/uni_modules/uni-drawer/package.json new file mode 100644 index 0000000..dd056e4 --- /dev/null +++ b/uni_modules/uni-drawer/package.json @@ -0,0 +1,87 @@ +{ + "id": "uni-drawer", + "displayName": "uni-drawer 抽屉", + "version": "1.2.1", + "description": "抽屉式导航,用于展示侧滑菜单,侧滑导航。", + "keywords": [ + "uni-ui", + "uniui", + "drawer", + "抽屉", + "侧滑导航" +], + "repository": "https://github.com/dcloudio/uni-ui", + "engines": { + "HBuilderX": "" + }, + "directories": { + "example": "../../temps/example_temps" + }, + "dcloudext": { + "category": [ + "前端组件", + "通用组件" + ], + "sale": { + "regular": { + "price": "0.00" + }, + "sourcecode": { + "price": "0.00" + } + }, + "contact": { + "qq": "" + }, + "declaration": { + "ads": "无", + "data": "无", + "permissions": "无" + }, + "npmurl": "https://www.npmjs.com/package/@dcloudio/uni-ui" + }, + "uni_modules": { + "dependencies": ["uni-scss"], + "encrypt": [], + "platforms": { + "cloud": { + "tcb": "y", + "aliyun": "y" + }, + "client": { + "App": { + "app-vue": "y", + "app-nvue": "y" + }, + "H5-mobile": { + "Safari": "y", + "Android Browser": "y", + "微信浏览器(Android)": "y", + "QQ浏览器(Android)": "y" + }, + "H5-pc": { + "Chrome": "y", + "IE": "y", + "Edge": "y", + "Firefox": "y", + "Safari": "y" + }, + "小程序": { + "微信": "y", + "阿里": "y", + "百度": "y", + "字节跳动": "y", + "QQ": "y" + }, + "快应用": { + "华为": "u", + "联盟": "u" + }, + "Vue": { + "vue2": "y", + "vue3": "y" + } + } + } + } +} \ No newline at end of file diff --git a/uni_modules/uni-drawer/readme.md b/uni_modules/uni-drawer/readme.md new file mode 100644 index 0000000..dcf6e6b --- /dev/null +++ b/uni_modules/uni-drawer/readme.md @@ -0,0 +1,10 @@ + + +## Drawer 抽屉 +> **组件名:uni-drawer** +> 代码块: `uDrawer` + +抽屉侧滑菜单。 + +### [查看文档](https://uniapp.dcloud.io/component/uniui/uni-drawer) +#### 如使用过程中有任何问题,或者您对uni-ui有一些好的建议,欢迎加入 uni-ui 交流群:871950839 \ No newline at end of file diff --git a/uni_modules/uni-easyinput/changelog.md b/uni_modules/uni-easyinput/changelog.md new file mode 100644 index 0000000..6998f99 --- /dev/null +++ b/uni_modules/uni-easyinput/changelog.md @@ -0,0 +1,37 @@ +## 1.0.3(2022-05-20) +- 修复 关闭图标某些情况下无法取消的bug +## 1.0.2(2022-04-12) +- 修复 默认值不生效的bug +## 1.0.1(2022-04-02) +- 修复 value不能为0的bug +## 1.0.0(2021-11-19) +- 优化 组件UI,并提供设计资源,详见:[https://uniapp.dcloud.io/component/uniui/resource](https://uniapp.dcloud.io/component/uniui/resource) +- 文档迁移,详见:[https://uniapp.dcloud.io/component/uniui/uni-easyinput](https://uniapp.dcloud.io/component/uniui/uni-easyinput) +## 0.1.4(2021-08-20) +- 修复 在 uni-forms 的动态表单中默认值校验不通过的 bug +## 0.1.3(2021-08-11) +- 修复 在 uni-forms 中重置表单,错误信息无法清除的问题 +## 0.1.2(2021-07-30) +- 优化 vue3下事件警告的问题 +## 0.1.1 +- 优化 errorMessage 属性支持 Boolean 类型 +## 0.1.0(2021-07-13) +- 组件兼容 vue3,如何创建vue3项目,详见 [uni-app 项目支持 vue3 介绍](https://ask.dcloud.net.cn/article/37834) +## 0.0.16(2021-06-29) +- 修复 confirmType 属性(仅 type="text" 生效)导致多行文本框无法换行的 bug +## 0.0.15(2021-06-21) +- 修复 passwordIcon 属性拼写错误的 bug +## 0.0.14(2021-06-18) +- 新增 passwordIcon 属性,当type=password时是否显示小眼睛图标 +- 修复 confirmType 属性不生效的问题 +## 0.0.13(2021-06-04) +- 修复 disabled 状态可清出内容的 bug +## 0.0.12(2021-05-12) +- 新增 组件示例地址 +## 0.0.11(2021-05-07) +- 修复 input-border 属性不生效的问题 +## 0.0.10(2021-04-30) +- 修复 ios 遮挡文字、显示一半的问题 +## 0.0.9(2021-02-05) +- 调整为uni_modules目录规范 +- 优化 兼容 nvue 页面 diff --git a/uni_modules/uni-easyinput/components/uni-easyinput/common.js b/uni_modules/uni-easyinput/components/uni-easyinput/common.js new file mode 100644 index 0000000..df9abe1 --- /dev/null +++ b/uni_modules/uni-easyinput/components/uni-easyinput/common.js @@ -0,0 +1,56 @@ +/** + * @desc 函数防抖 + * @param func 目标函数 + * @param wait 延迟执行毫秒数 + * @param immediate true - 立即执行, false - 延迟执行 + */ +export const debounce = function(func, wait = 1000, immediate = true) { + let timer; + console.log(1); + return function() { + console.log(123); + let context = this, + args = arguments; + if (timer) clearTimeout(timer); + if (immediate) { + let callNow = !timer; + timer = setTimeout(() => { + timer = null; + }, wait); + if (callNow) func.apply(context, args); + } else { + timer = setTimeout(() => { + func.apply(context, args); + }, wait) + } + } +} +/** + * @desc 函数节流 + * @param func 函数 + * @param wait 延迟执行毫秒数 + * @param type 1 使用表时间戳,在时间段开始的时候触发 2 使用表定时器,在时间段结束的时候触发 + */ +export const throttle = (func, wait = 1000, type = 1) => { + let previous = 0; + let timeout; + return function() { + let context = this; + let args = arguments; + if (type === 1) { + let now = Date.now(); + + if (now - previous > wait) { + func.apply(context, args); + previous = now; + } + } else if (type === 2) { + if (!timeout) { + timeout = setTimeout(() => { + timeout = null; + func.apply(context, args) + }, wait) + } + } + } +} diff --git a/uni_modules/uni-easyinput/components/uni-easyinput/uni-easyinput.vue b/uni_modules/uni-easyinput/components/uni-easyinput/uni-easyinput.vue new file mode 100644 index 0000000..36e7702 --- /dev/null +++ b/uni_modules/uni-easyinput/components/uni-easyinput/uni-easyinput.vue @@ -0,0 +1,461 @@ + + + + + diff --git a/uni_modules/uni-easyinput/package.json b/uni_modules/uni-easyinput/package.json new file mode 100644 index 0000000..67e4e04 --- /dev/null +++ b/uni_modules/uni-easyinput/package.json @@ -0,0 +1,90 @@ +{ + "id": "uni-easyinput", + "displayName": "uni-easyinput 增强输入框", + "version": "1.0.3", + "description": "Easyinput 组件是对原生input组件的增强", + "keywords": [ + "uni-ui", + "uniui", + "input", + "uni-easyinput", + "输入框" +], + "repository": "https://github.com/dcloudio/uni-ui", + "engines": { + "HBuilderX": "" + }, + "directories": { + "example": "../../temps/example_temps" + }, + "dcloudext": { + "category": [ + "前端组件", + "通用组件" + ], + "sale": { + "regular": { + "price": "0.00" + }, + "sourcecode": { + "price": "0.00" + } + }, + "contact": { + "qq": "" + }, + "declaration": { + "ads": "无", + "data": "无", + "permissions": "无" + }, + "npmurl": "https://www.npmjs.com/package/@dcloudio/uni-ui" + }, + "uni_modules": { + "dependencies": [ + "uni-scss", + "uni-icons" + ], + "encrypt": [], + "platforms": { + "cloud": { + "tcb": "y", + "aliyun": "y" + }, + "client": { + "App": { + "app-vue": "y", + "app-nvue": "y" + }, + "H5-mobile": { + "Safari": "y", + "Android Browser": "y", + "微信浏览器(Android)": "y", + "QQ浏览器(Android)": "y" + }, + "H5-pc": { + "Chrome": "y", + "IE": "y", + "Edge": "y", + "Firefox": "y", + "Safari": "y" + }, + "小程序": { + "微信": "y", + "阿里": "y", + "百度": "y", + "字节跳动": "y", + "QQ": "y" + }, + "快应用": { + "华为": "u", + "联盟": "u" + }, + "Vue": { + "vue2": "y", + "vue3": "y" + } + } + } + } +} \ No newline at end of file diff --git a/uni_modules/uni-easyinput/readme.md b/uni_modules/uni-easyinput/readme.md new file mode 100644 index 0000000..f1faf8f --- /dev/null +++ b/uni_modules/uni-easyinput/readme.md @@ -0,0 +1,11 @@ + + +### Easyinput 增强输入框 +> **组件名:uni-easyinput** +> 代码块: `uEasyinput` + + +easyinput 组件是对原生input组件的增强 ,是专门为配合表单组件[uni-forms](https://ext.dcloud.net.cn/plugin?id=2773)而设计的,easyinput 内置了边框,图标等,同时包含 input 所有功能 + +### [查看文档](https://uniapp.dcloud.io/component/uniui/uni-easyinput) +#### 如使用过程中有任何问题,或者您对uni-ui有一些好的建议,欢迎加入 uni-ui 交流群:871950839 \ No newline at end of file diff --git a/uni_modules/uni-fab/changelog.md b/uni_modules/uni-fab/changelog.md new file mode 100644 index 0000000..24e26b1 --- /dev/null +++ b/uni_modules/uni-fab/changelog.md @@ -0,0 +1,17 @@ +## 1.2.2(2021-12-29) +- 更新 组件依赖 +## 1.2.1(2021-11-19) +- 修复 阴影颜色不正确的bug +## 1.2.0(2021-11-19) +- 优化 组件UI,并提供设计资源,详见:[https://uniapp.dcloud.io/component/uniui/resource](https://uniapp.dcloud.io/component/uniui/resource) +- 文档迁移,详见:[https://uniapp.dcloud.io/component/uniui/uni-fab](https://uniapp.dcloud.io/component/uniui/uni-fab) +## 1.1.1(2021-11-09) +- 新增 提供组件设计资源,组件样式调整 +## 1.1.0(2021-07-30) +- 组件兼容 vue3,如何创建vue3项目,详见 [uni-app 项目支持 vue3 介绍](https://ask.dcloud.net.cn/article/37834) +## 1.0.7(2021-05-12) +- 新增 组件示例地址 +## 1.0.6(2021-02-05) +- 调整为uni_modules目录规范 +- 优化 按钮背景色调整 +- 优化 兼容pc端 diff --git a/uni_modules/uni-fab/components/uni-fab/uni-fab.vue b/uni_modules/uni-fab/components/uni-fab/uni-fab.vue new file mode 100644 index 0000000..bef97f1 --- /dev/null +++ b/uni_modules/uni-fab/components/uni-fab/uni-fab.vue @@ -0,0 +1,475 @@ + + + + + diff --git a/uni_modules/uni-fab/package.json b/uni_modules/uni-fab/package.json new file mode 100644 index 0000000..0f27daa --- /dev/null +++ b/uni_modules/uni-fab/package.json @@ -0,0 +1,87 @@ +{ + "id": "uni-fab", + "displayName": "uni-fab 悬浮按钮", + "version": "1.2.2", + "description": "悬浮按钮 fab button ,点击可展开一个图标按钮菜单。", + "keywords": [ + "uni-ui", + "uniui", + "按钮", + "悬浮按钮", + "fab" +], + "repository": "https://github.com/dcloudio/uni-ui", + "engines": { + "HBuilderX": "" + }, + "directories": { + "example": "../../temps/example_temps" + }, + "dcloudext": { + "category": [ + "前端组件", + "通用组件" + ], + "sale": { + "regular": { + "price": "0.00" + }, + "sourcecode": { + "price": "0.00" + } + }, + "contact": { + "qq": "" + }, + "declaration": { + "ads": "无", + "data": "无", + "permissions": "无" + }, + "npmurl": "https://www.npmjs.com/package/@dcloudio/uni-ui" + }, + "uni_modules": { + "dependencies": ["uni-scss","uni-icons"], + "encrypt": [], + "platforms": { + "cloud": { + "tcb": "y", + "aliyun": "y" + }, + "client": { + "App": { + "app-vue": "y", + "app-nvue": "y" + }, + "H5-mobile": { + "Safari": "y", + "Android Browser": "y", + "微信浏览器(Android)": "y", + "QQ浏览器(Android)": "y" + }, + "H5-pc": { + "Chrome": "y", + "IE": "y", + "Edge": "y", + "Firefox": "y", + "Safari": "y" + }, + "小程序": { + "微信": "y", + "阿里": "y", + "百度": "y", + "字节跳动": "y", + "QQ": "y" + }, + "快应用": { + "华为": "u", + "联盟": "u" + }, + "Vue": { + "vue2": "y", + "vue3": "y" + } + } + } + } +} diff --git a/uni_modules/uni-fab/readme.md b/uni_modules/uni-fab/readme.md new file mode 100644 index 0000000..9a444e8 --- /dev/null +++ b/uni_modules/uni-fab/readme.md @@ -0,0 +1,9 @@ +## Fab 悬浮按钮 +> **组件名:uni-fab** +> 代码块: `uFab` + + +点击可展开一个图形按钮菜单 + +### [查看文档](https://uniapp.dcloud.io/component/uniui/uni-fab) +#### 如使用过程中有任何问题,或者您对uni-ui有一些好的建议,欢迎加入 uni-ui 交流群:871950839 \ No newline at end of file diff --git a/uni_modules/uni-fav/changelog.md b/uni_modules/uni-fav/changelog.md new file mode 100644 index 0000000..d8a08d4 --- /dev/null +++ b/uni_modules/uni-fav/changelog.md @@ -0,0 +1,19 @@ +## 1.2.1(2022-05-30) +- 新增 stat 属性 ,是否开启uni统计功能 +## 1.2.0(2021-11-19) +- 优化 组件UI,并提供设计资源,详见:[https://uniapp.dcloud.io/component/uniui/resource](https://uniapp.dcloud.io/component/uniui/resource) +- 文档迁移,详见:[https://uniapp.dcloud.io/component/uniui/uni-fav](https://uniapp.dcloud.io/component/uniui/uni-fav) +## 1.1.1(2021-08-24) +- 新增 支持国际化 +## 1.1.0(2021-07-13) +- 组件兼容 vue3,如何创建vue3项目,详见 [uni-app 项目支持 vue3 介绍](https://ask.dcloud.net.cn/article/37834) +## 1.0.6(2021-05-12) +- 新增 组件示例地址 +## 1.0.5(2021-04-21) +- 优化 添加依赖 uni-icons, 导入后自动下载依赖 +## 1.0.4(2021-02-05) +- 优化 组件引用关系,通过uni_modules引用组件 +## 1.0.3(2021-02-05) +- 优化 组件引用关系,通过uni_modules引用组件 +## 1.0.2(2021-02-05) +- 调整为uni_modules目录规范 diff --git a/uni_modules/uni-fav/components/uni-fav/i18n/en.json b/uni_modules/uni-fav/components/uni-fav/i18n/en.json new file mode 100644 index 0000000..9a0759e --- /dev/null +++ b/uni_modules/uni-fav/components/uni-fav/i18n/en.json @@ -0,0 +1,4 @@ +{ + "uni-fav.collect": "collect", + "uni-fav.collected": "collected" +} diff --git a/uni_modules/uni-fav/components/uni-fav/i18n/index.js b/uni_modules/uni-fav/components/uni-fav/i18n/index.js new file mode 100644 index 0000000..de7509c --- /dev/null +++ b/uni_modules/uni-fav/components/uni-fav/i18n/index.js @@ -0,0 +1,8 @@ +import en from './en.json' +import zhHans from './zh-Hans.json' +import zhHant from './zh-Hant.json' +export default { + en, + 'zh-Hans': zhHans, + 'zh-Hant': zhHant +} diff --git a/uni_modules/uni-fav/components/uni-fav/i18n/zh-Hans.json b/uni_modules/uni-fav/components/uni-fav/i18n/zh-Hans.json new file mode 100644 index 0000000..67c89bf --- /dev/null +++ b/uni_modules/uni-fav/components/uni-fav/i18n/zh-Hans.json @@ -0,0 +1,4 @@ +{ + "uni-fav.collect": "收藏", + "uni-fav.collected": "已收藏" +} diff --git a/uni_modules/uni-fav/components/uni-fav/i18n/zh-Hant.json b/uni_modules/uni-fav/components/uni-fav/i18n/zh-Hant.json new file mode 100644 index 0000000..67c89bf --- /dev/null +++ b/uni_modules/uni-fav/components/uni-fav/i18n/zh-Hant.json @@ -0,0 +1,4 @@ +{ + "uni-fav.collect": "收藏", + "uni-fav.collected": "已收藏" +} diff --git a/uni_modules/uni-fav/components/uni-fav/uni-fav.vue b/uni_modules/uni-fav/components/uni-fav/uni-fav.vue new file mode 100644 index 0000000..d2c58df --- /dev/null +++ b/uni_modules/uni-fav/components/uni-fav/uni-fav.vue @@ -0,0 +1,161 @@ + + + + + diff --git a/uni_modules/uni-fav/package.json b/uni_modules/uni-fav/package.json new file mode 100644 index 0000000..cc14697 --- /dev/null +++ b/uni_modules/uni-fav/package.json @@ -0,0 +1,89 @@ +{ + "id": "uni-fav", + "displayName": "uni-fav 收藏按钮", + "version": "1.2.1", + "description": " Fav 收藏组件,可自定义颜色、大小。", + "keywords": [ + "fav", + "uni-ui", + "uniui", + "收藏" +], + "repository": "https://github.com/dcloudio/uni-ui", + "engines": { + "HBuilderX": "" + }, + "directories": { + "example": "../../temps/example_temps" + }, + "dcloudext": { + "category": [ + "前端组件", + "通用组件" + ], + "sale": { + "regular": { + "price": "0.00" + }, + "sourcecode": { + "price": "0.00" + } + }, + "contact": { + "qq": "" + }, + "declaration": { + "ads": "无", + "data": "无", + "permissions": "无" + }, + "npmurl": "https://www.npmjs.com/package/@dcloudio/uni-ui" + }, + "uni_modules": { + "dependencies": [ + "uni-scss", + "uni-icons" + ], + "encrypt": [], + "platforms": { + "cloud": { + "tcb": "y", + "aliyun": "y" + }, + "client": { + "App": { + "app-vue": "y", + "app-nvue": "y" + }, + "H5-mobile": { + "Safari": "y", + "Android Browser": "y", + "微信浏览器(Android)": "y", + "QQ浏览器(Android)": "y" + }, + "H5-pc": { + "Chrome": "y", + "IE": "y", + "Edge": "y", + "Firefox": "y", + "Safari": "y" + }, + "小程序": { + "微信": "y", + "阿里": "y", + "百度": "y", + "字节跳动": "y", + "QQ": "y" + }, + "快应用": { + "华为": "u", + "联盟": "u" + }, + "Vue": { + "vue2": "y", + "vue3": "y" + } + } + } + } +} diff --git a/uni_modules/uni-fav/readme.md b/uni_modules/uni-fav/readme.md new file mode 100644 index 0000000..4de125d --- /dev/null +++ b/uni_modules/uni-fav/readme.md @@ -0,0 +1,10 @@ + + +## Fav 收藏按钮 +> **组件名:uni-fav** +> 代码块: `uFav` + +用于收藏功能,可点击切换选中、不选中的状态。 + +### [查看文档](https://uniapp.dcloud.io/component/uniui/uni-fav) +#### 如使用过程中有任何问题,或者您对uni-ui有一些好的建议,欢迎加入 uni-ui 交流群:871950839 \ No newline at end of file diff --git a/uni_modules/uni-file-picker/changelog.md b/uni_modules/uni-file-picker/changelog.md new file mode 100644 index 0000000..840a9e6 --- /dev/null +++ b/uni_modules/uni-file-picker/changelog.md @@ -0,0 +1,61 @@ +## 1.0.1(2021-11-23) +- 修复 参数为对象的情况下,url在某些情况显示错误的bug +## 1.0.0(2021-11-19) +- 优化 组件UI,并提供设计资源,详见:[https://uniapp.dcloud.io/component/uniui/resource](https://uniapp.dcloud.io/component/uniui/resource) +- 文档迁移,详见:[https://uniapp.dcloud.io/component/uniui/uni-file-picker](https://uniapp.dcloud.io/component/uniui/uni-file-picker) +## 0.2.16(2021-11-08) +- 修复 传入空对象 ,显示错误的Bug +## 0.2.15(2021-08-30) +- 修复 return-type="object" 时且存在v-model时,无法删除文件的Bug +## 0.2.14(2021-08-23) +- 新增 参数中返回 fileID 字段 +## 0.2.13(2021-08-23) +- 修复 腾讯云传入fileID 不能回显的bug +- 修复 选择图片后,不能放大的问题 +## 0.2.12(2021-08-17) +- 修复 由于 0.2.11 版本引起的不能回显图片的Bug +## 0.2.11(2021-08-16) +- 新增 clearFiles(index) 方法,可以手动删除指定文件 +- 修复 v-model 值设为 null 报错的Bug +## 0.2.10(2021-08-13) +- 修复 return-type="object" 时,无法删除文件的Bug +## 0.2.9(2021-08-03) +- 修复 auto-upload 属性失效的Bug +## 0.2.8(2021-07-31) +- 修复 fileExtname属性不指定值报错的Bug +## 0.2.7(2021-07-31) +- 修复 在某种场景下图片不回显的Bug +## 0.2.6(2021-07-30) +- 修复 return-type为object下,返回值不正确的Bug +## 0.2.5(2021-07-30) +- 修复(重要) H5 平台下如果和uni-forms组件一同使用导致页面卡死的问题 +## 0.2.3(2021-07-28) +- 优化 调整示例代码 +## 0.2.2(2021-07-27) +- 修复 vue3 下赋值错误的Bug +- 优化 h5平台下上传文件导致页面卡死的问题 +## 0.2.0(2021-07-13) +- 组件兼容 vue3,如何创建vue3项目,详见 [uni-app 项目支持 vue3 介绍](https://ask.dcloud.net.cn/article/37834) +## 0.1.1(2021-07-02) +- 修复 sourceType 缺少默认值导致 ios 无法选择文件 +## 0.1.0(2021-06-30) +- 优化 解耦与uniCloud的强绑定关系 ,如不绑定服务空间,默认autoUpload为false且不可更改 +## 0.0.11(2021-06-30) +- 修复 由 0.0.10 版本引发的 returnType 属性失效的问题 +## 0.0.10(2021-06-29) +- 优化 文件上传后进度条消失时机 +## 0.0.9(2021-06-29) +- 修复 在uni-forms 中,删除文件 ,获取的值不对的Bug +## 0.0.8(2021-06-15) +- 修复 删除文件时无法触发 v-model 的Bug +## 0.0.7(2021-05-12) +- 新增 组件示例地址 +## 0.0.6(2021-04-09) +- 修复 选择的文件非 file-extname 字段指定的扩展名报错的Bug +## 0.0.5(2021-04-09) +- 优化 更新组件示例 +## 0.0.4(2021-04-09) +- 优化 file-extname 字段支持字符串写法,多个扩展名需要用逗号分隔 +## 0.0.3(2021-02-05) +- 调整为uni_modules目录规范 +- 修复 微信小程序不指定 fileExtname 属性选择失败的Bug diff --git a/uni_modules/uni-file-picker/components/uni-file-picker/choose-and-upload-file.js b/uni_modules/uni-file-picker/components/uni-file-picker/choose-and-upload-file.js new file mode 100644 index 0000000..24a07f5 --- /dev/null +++ b/uni_modules/uni-file-picker/components/uni-file-picker/choose-and-upload-file.js @@ -0,0 +1,224 @@ +'use strict'; + +const ERR_MSG_OK = 'chooseAndUploadFile:ok'; +const ERR_MSG_FAIL = 'chooseAndUploadFile:fail'; + +function chooseImage(opts) { + const { + count, + sizeType = ['original', 'compressed'], + sourceType = ['album', 'camera'], + extension + } = opts + return new Promise((resolve, reject) => { + uni.chooseImage({ + count, + sizeType, + sourceType, + extension, + success(res) { + resolve(normalizeChooseAndUploadFileRes(res, 'image')); + }, + fail(res) { + reject({ + errMsg: res.errMsg.replace('chooseImage:fail', ERR_MSG_FAIL), + }); + }, + }); + }); +} + +function chooseVideo(opts) { + const { + camera, + compressed, + maxDuration, + sourceType = ['album', 'camera'], + extension + } = opts; + return new Promise((resolve, reject) => { + uni.chooseVideo({ + camera, + compressed, + maxDuration, + sourceType, + extension, + success(res) { + const { + tempFilePath, + duration, + size, + height, + width + } = res; + resolve(normalizeChooseAndUploadFileRes({ + errMsg: 'chooseVideo:ok', + tempFilePaths: [tempFilePath], + tempFiles: [ + { + name: (res.tempFile && res.tempFile.name) || '', + path: tempFilePath, + size, + type: (res.tempFile && res.tempFile.type) || '', + width, + height, + duration, + fileType: 'video', + cloudPath: '', + }, ], + }, 'video')); + }, + fail(res) { + reject({ + errMsg: res.errMsg.replace('chooseVideo:fail', ERR_MSG_FAIL), + }); + }, + }); + }); +} + +function chooseAll(opts) { + const { + count, + extension + } = opts; + return new Promise((resolve, reject) => { + let chooseFile = uni.chooseFile; + if (typeof wx !== 'undefined' && + typeof wx.chooseMessageFile === 'function') { + chooseFile = wx.chooseMessageFile; + } + if (typeof chooseFile !== 'function') { + return reject({ + errMsg: ERR_MSG_FAIL + ' 请指定 type 类型,该平台仅支持选择 image 或 video。', + }); + } + chooseFile({ + type: 'all', + count, + extension, + success(res) { + resolve(normalizeChooseAndUploadFileRes(res)); + }, + fail(res) { + reject({ + errMsg: res.errMsg.replace('chooseFile:fail', ERR_MSG_FAIL), + }); + }, + }); + }); +} + +function normalizeChooseAndUploadFileRes(res, fileType) { + res.tempFiles.forEach((item, index) => { + if (!item.name) { + item.name = item.path.substring(item.path.lastIndexOf('/') + 1); + } + if (fileType) { + item.fileType = fileType; + } + item.cloudPath = + Date.now() + '_' + index + item.name.substring(item.name.lastIndexOf('.')); + }); + if (!res.tempFilePaths) { + res.tempFilePaths = res.tempFiles.map((file) => file.path); + } + return res; +} + +function uploadCloudFiles(files, max = 5, onUploadProgress) { + files = JSON.parse(JSON.stringify(files)) + const len = files.length + let count = 0 + let self = this + return new Promise(resolve => { + while (count < max) { + next() + } + + function next() { + let cur = count++ + if (cur >= len) { + !files.find(item => !item.url && !item.errMsg) && resolve(files) + return + } + const fileItem = files[cur] + const index = self.files.findIndex(v => v.uuid === fileItem.uuid) + fileItem.url = '' + delete fileItem.errMsg + + uniCloud + .uploadFile({ + filePath: fileItem.path, + cloudPath: fileItem.cloudPath, + fileType: fileItem.fileType, + onUploadProgress: res => { + res.index = index + onUploadProgress && onUploadProgress(res) + } + }) + .then(res => { + fileItem.url = res.fileID + fileItem.index = index + if (cur < len) { + next() + } + }) + .catch(res => { + fileItem.errMsg = res.errMsg || res.message + fileItem.index = index + if (cur < len) { + next() + } + }) + } + }) +} + + + + + +function uploadFiles(choosePromise, { + onChooseFile, + onUploadProgress +}) { + return choosePromise + .then((res) => { + if (onChooseFile) { + const customChooseRes = onChooseFile(res); + if (typeof customChooseRes !== 'undefined') { + return Promise.resolve(customChooseRes).then((chooseRes) => typeof chooseRes === 'undefined' ? + res : chooseRes); + } + } + return res; + }) + .then((res) => { + if (res === false) { + return { + errMsg: ERR_MSG_OK, + tempFilePaths: [], + tempFiles: [], + }; + } + return res + }) +} + +function chooseAndUploadFile(opts = { + type: 'all' +}) { + if (opts.type === 'image') { + return uploadFiles(chooseImage(opts), opts); + } + else if (opts.type === 'video') { + return uploadFiles(chooseVideo(opts), opts); + } + return uploadFiles(chooseAll(opts), opts); +} + +export { + chooseAndUploadFile, + uploadCloudFiles +}; diff --git a/uni_modules/uni-file-picker/components/uni-file-picker/uni-file-picker.vue b/uni_modules/uni-file-picker/components/uni-file-picker/uni-file-picker.vue new file mode 100644 index 0000000..f63b0cf --- /dev/null +++ b/uni_modules/uni-file-picker/components/uni-file-picker/uni-file-picker.vue @@ -0,0 +1,650 @@ + + + + + diff --git a/uni_modules/uni-file-picker/components/uni-file-picker/upload-file.vue b/uni_modules/uni-file-picker/components/uni-file-picker/upload-file.vue new file mode 100644 index 0000000..625d92e --- /dev/null +++ b/uni_modules/uni-file-picker/components/uni-file-picker/upload-file.vue @@ -0,0 +1,325 @@ + + + + + diff --git a/uni_modules/uni-file-picker/components/uni-file-picker/upload-image.vue b/uni_modules/uni-file-picker/components/uni-file-picker/upload-image.vue new file mode 100644 index 0000000..2a29bc2 --- /dev/null +++ b/uni_modules/uni-file-picker/components/uni-file-picker/upload-image.vue @@ -0,0 +1,292 @@ + + + + + diff --git a/uni_modules/uni-file-picker/components/uni-file-picker/utils.js b/uni_modules/uni-file-picker/components/uni-file-picker/utils.js new file mode 100644 index 0000000..60aaa3e --- /dev/null +++ b/uni_modules/uni-file-picker/components/uni-file-picker/utils.js @@ -0,0 +1,109 @@ +/** + * 获取文件名和后缀 + * @param {String} name + */ +export const get_file_ext = (name) => { + const last_len = name.lastIndexOf('.') + const len = name.length + return { + name: name.substring(0, last_len), + ext: name.substring(last_len + 1, len) + } +} + +/** + * 获取扩展名 + * @param {Array} fileExtname + */ +export const get_extname = (fileExtname) => { + if (!Array.isArray(fileExtname)) { + let extname = fileExtname.replace(/(\[|\])/g, '') + return extname.split(',') + } else { + return fileExtname + } + return [] +} + +/** + * 获取文件和检测是否可选 + */ +export const get_files_and_is_max = (res, _extname) => { + let filePaths = [] + let files = [] + if(!_extname || _extname.length === 0){ + return { + filePaths, + files + } + } + res.tempFiles.forEach(v => { + let fileFullName = get_file_ext(v.name) + const extname = fileFullName.ext.toLowerCase() + if (_extname.indexOf(extname) !== -1) { + files.push(v) + filePaths.push(v.path) + } + }) + if (files.length !== res.tempFiles.length) { + uni.showToast({ + title: `当前选择了${res.tempFiles.length}个文件 ,${res.tempFiles.length - files.length} 个文件格式不正确`, + icon: 'none', + duration: 5000 + }) + } + + return { + filePaths, + files + } +} + + +/** + * 获取图片信息 + * @param {Object} filepath + */ +export const get_file_info = (filepath) => { + return new Promise((resolve, reject) => { + uni.getImageInfo({ + src: filepath, + success(res) { + resolve(res) + }, + fail(err) { + reject(err) + } + }) + }) +} +/** + * 获取封装数据 + */ +export const get_file_data = async (files, type = 'image') => { + // 最终需要上传数据库的数据 + let fileFullName = get_file_ext(files.name) + const extname = fileFullName.ext.toLowerCase() + let filedata = { + name: files.name, + uuid: files.uuid, + extname: extname || '', + cloudPath: files.cloudPath, + fileType: files.fileType, + url: files.path || files.path, + size: files.size, //单位是字节 + image: {}, + path: files.path, + video: {} + } + if (type === 'image') { + const imageinfo = await get_file_info(files.path) + delete filedata.video + filedata.image.width = imageinfo.width + filedata.image.height = imageinfo.height + filedata.image.location = imageinfo.path + } else { + delete filedata.image + } + return filedata +} diff --git a/uni_modules/uni-file-picker/package.json b/uni_modules/uni-file-picker/package.json new file mode 100644 index 0000000..d659bb5 --- /dev/null +++ b/uni_modules/uni-file-picker/package.json @@ -0,0 +1,86 @@ +{ + "id": "uni-file-picker", + "displayName": "uni-file-picker 文件选择上传", + "version": "1.0.1", + "description": "文件选择上传组件,可以选择图片、视频等任意文件并上传到当前绑定的服务空间", + "keywords": [ + "uni-ui", + "uniui", + "图片上传", + "文件上传" +], + "repository": "https://github.com/dcloudio/uni-ui", + "engines": { + "HBuilderX": "" + }, + "directories": { + "example": "../../temps/example_temps" + }, + "dcloudext": { + "category": [ + "前端组件", + "通用组件" + ], + "sale": { + "regular": { + "price": "0.00" + }, + "sourcecode": { + "price": "0.00" + } + }, + "contact": { + "qq": "" + }, + "declaration": { + "ads": "无", + "data": "无", + "permissions": "无" + }, + "npmurl": "https://www.npmjs.com/package/@dcloudio/uni-ui" + }, + "uni_modules": { + "dependencies": ["uni-scss"], + "encrypt": [], + "platforms": { + "cloud": { + "tcb": "y", + "aliyun": "y" + }, + "client": { + "App": { + "app-vue": "y", + "app-nvue": "n" + }, + "H5-mobile": { + "Safari": "y", + "Android Browser": "y", + "微信浏览器(Android)": "y", + "QQ浏览器(Android)": "y" + }, + "H5-pc": { + "Chrome": "y", + "IE": "y", + "Edge": "y", + "Firefox": "y", + "Safari": "y" + }, + "小程序": { + "微信": "y", + "阿里": "y", + "百度": "y", + "字节跳动": "y", + "QQ": "y" + }, + "快应用": { + "华为": "u", + "联盟": "u" + }, + "Vue": { + "vue2": "y", + "vue3": "y" + } + } + } + } +} diff --git a/uni_modules/uni-file-picker/readme.md b/uni_modules/uni-file-picker/readme.md new file mode 100644 index 0000000..c8399a5 --- /dev/null +++ b/uni_modules/uni-file-picker/readme.md @@ -0,0 +1,11 @@ + +## FilePicker 文件选择上传 + +> **组件名:uni-file-picker** +> 代码块: `uFilePicker` + + +文件选择上传组件,可以选择图片、视频等任意文件并上传到当前绑定的服务空间 + +### [查看文档](https://uniapp.dcloud.io/component/uniui/uni-file-picker) +#### 如使用过程中有任何问题,或者您对uni-ui有一些好的建议,欢迎加入 uni-ui 交流群:871950839 \ No newline at end of file diff --git a/uni_modules/uni-forms/changelog.md b/uni_modules/uni-forms/changelog.md new file mode 100644 index 0000000..26e120b --- /dev/null +++ b/uni_modules/uni-forms/changelog.md @@ -0,0 +1,60 @@ +## 1.3.2(2021-12-09) +- +## 1.3.1(2021-11-19) +- 修复 label 插槽不生效的bug +## 1.3.0(2021-11-19) +- 优化 组件UI,并提供设计资源,详见:[https://uniapp.dcloud.io/component/uniui/resource](https://uniapp.dcloud.io/component/uniui/resource) +- 文档迁移,详见:[https://uniapp.dcloud.io/component/uniui/uni-forms](https://uniapp.dcloud.io/component/uniui/uni-forms) +## 1.2.7(2021-08-13) +- 修复 没有添加校验规则的字段依然报错的Bug +## 1.2.6(2021-08-11) +- 修复 重置表单错误信息无法清除的问题 +## 1.2.5(2021-08-11) +- 优化 组件文档 +## 1.2.4(2021-08-11) +- 修复 表单验证只生效一次的问题 +## 1.2.3(2021-07-30) +- 优化 vue3下事件警告的问题 +## 1.2.2(2021-07-26) +- 修复 vue2 下条件编译导致destroyed生命周期失效的Bug +- 修复 1.2.1 引起的示例在小程序平台报错的Bug +## 1.2.1(2021-07-22) +- 修复 动态校验表单,默认值为空的情况下校验失效的Bug +- 修复 不指定name属性时,运行报错的Bug +- 优化 label默认宽度从65调整至70,使required为true且四字时不换行 +- 优化 组件示例,新增动态校验示例代码 +- 优化 组件文档,使用方式更清晰 +## 1.2.0(2021-07-13) +- 组件兼容 vue3,如何创建vue3项目,详见 [uni-app 项目支持 vue3 介绍](https://ask.dcloud.net.cn/article/37834) +## 1.1.2(2021-06-25) +- 修复 pattern 属性在微信小程序平台无效的问题 +## 1.1.1(2021-06-22) +- 修复 validate-trigger属性为submit且err-show-type属性为toast时不能弹出的Bug +## 1.1.0(2021-06-22) +- 修复 只写setRules方法而导致校验不生效的Bug +- 修复 由上个办法引发的错误提示文字错位的Bug +## 1.0.48(2021-06-21) +- 修复 不设置 label 属性 ,无法设置label插槽的问题 +## 1.0.47(2021-06-21) +- 修复 不设置label属性,label-width属性不生效的bug +- 修复 setRules 方法与rules属性冲突的问题 +## 1.0.46(2021-06-04) +- 修复 动态删减数据导致报错的问题 +## 1.0.45(2021-06-04) +- 新增 modelValue 属性 ,value 即将废弃 +## 1.0.44(2021-06-02) +- 新增 uni-forms-item 可以设置单独的 rules +- 新增 validate 事件增加 keepitem 参数,可以选择那些字段不过滤 +- 优化 submit 事件重命名为 validate +## 1.0.43(2021-05-12) +- 新增 组件示例地址 +## 1.0.42(2021-04-30) +- 修复 自定义检验器失效的问题 +## 1.0.41(2021-03-05) +- 更新 校验器 +- 修复 表单规则设置类型为 number 的情况下,值为0校验失败的Bug +## 1.0.40(2021-03-04) +- 修复 动态显示uni-forms-item的情况下,submit 方法获取值错误的Bug +## 1.0.39(2021-02-05) +- 调整为uni_modules目录规范 +- 修复 校验器传入 int 等类型 ,返回String类型的Bug diff --git a/uni_modules/uni-forms/components/uni-forms-item/uni-forms-item.vue b/uni_modules/uni-forms/components/uni-forms-item/uni-forms-item.vue new file mode 100644 index 0000000..a5ae8ab --- /dev/null +++ b/uni_modules/uni-forms/components/uni-forms-item/uni-forms-item.vue @@ -0,0 +1,509 @@ + + + + + diff --git a/uni_modules/uni-forms/components/uni-forms/uni-forms.vue b/uni_modules/uni-forms/components/uni-forms/uni-forms.vue new file mode 100644 index 0000000..d8b4e66 --- /dev/null +++ b/uni_modules/uni-forms/components/uni-forms/uni-forms.vue @@ -0,0 +1,472 @@ + + + + + diff --git a/uni_modules/uni-forms/components/uni-forms/validate.js b/uni_modules/uni-forms/components/uni-forms/validate.js new file mode 100644 index 0000000..1834c6c --- /dev/null +++ b/uni_modules/uni-forms/components/uni-forms/validate.js @@ -0,0 +1,486 @@ +var pattern = { + email: /^\S+?@\S+?\.\S+?$/, + idcard: /^[1-9]\d{5}(18|19|([23]\d))\d{2}((0[1-9])|(10|11|12))(([0-2][1-9])|10|20|30|31)\d{3}[0-9Xx]$/, + url: new RegExp( + "^(?!mailto:)(?:(?:http|https|ftp)://|//)(?:\\S+(?::\\S*)?@)?(?:(?:(?:[1-9]\\d?|1\\d\\d|2[01]\\d|22[0-3])(?:\\.(?:1?\\d{1,2}|2[0-4]\\d|25[0-5])){2}(?:\\.(?:[0-9]\\d?|1\\d\\d|2[0-4]\\d|25[0-4]))|(?:(?:[a-z\\u00a1-\\uffff0-9]+-*)*[a-z\\u00a1-\\uffff0-9]+)(?:\\.(?:[a-z\\u00a1-\\uffff0-9]+-*)*[a-z\\u00a1-\\uffff0-9]+)*(?:\\.(?:[a-z\\u00a1-\\uffff]{2,})))|localhost)(?::\\d{2,5})?(?:(/|\\?|#)[^\\s]*)?$", + 'i') +}; + +const FORMAT_MAPPING = { + "int": 'integer', + "bool": 'boolean', + "double": 'number', + "long": 'number', + "password": 'string' + // "fileurls": 'array' +} + +function formatMessage(args, resources = '') { + var defaultMessage = ['label'] + defaultMessage.forEach((item) => { + if (args[item] === undefined) { + args[item] = '' + } + }) + + let str = resources + for (let key in args) { + let reg = new RegExp('{' + key + '}') + str = str.replace(reg, args[key]) + } + return str +} + +function isEmptyValue(value, type) { + if (value === undefined || value === null) { + return true; + } + + if (typeof value === 'string' && !value) { + return true; + } + + if (Array.isArray(value) && !value.length) { + return true; + } + + if (type === 'object' && !Object.keys(value).length) { + return true; + } + + return false; +} + +const types = { + integer(value) { + return types.number(value) && parseInt(value, 10) === value; + }, + string(value) { + return typeof value === 'string'; + }, + number(value) { + if (isNaN(value)) { + return false; + } + return typeof value === 'number'; + }, + "boolean": function(value) { + return typeof value === 'boolean'; + }, + "float": function(value) { + return types.number(value) && !types.integer(value); + }, + array(value) { + return Array.isArray(value); + }, + object(value) { + return typeof value === 'object' && !types.array(value); + }, + date(value) { + return value instanceof Date; + }, + timestamp(value) { + if (!this.integer(value) || Math.abs(value).toString().length > 16) { + return false + } + return true; + }, + file(value) { + return typeof value.url === 'string'; + }, + email(value) { + return typeof value === 'string' && !!value.match(pattern.email) && value.length < 255; + }, + url(value) { + return typeof value === 'string' && !!value.match(pattern.url); + }, + pattern(reg, value) { + try { + return new RegExp(reg).test(value); + } catch (e) { + return false; + } + }, + method(value) { + return typeof value === 'function'; + }, + idcard(value) { + return typeof value === 'string' && !!value.match(pattern.idcard); + }, + 'url-https'(value) { + return this.url(value) && value.startsWith('https://'); + }, + 'url-scheme'(value) { + return value.startsWith('://'); + }, + 'url-web'(value) { + return false; + } +} + +class RuleValidator { + + constructor(message) { + this._message = message + } + + async validateRule(fieldKey, fieldValue, value, data, allData) { + var result = null + + let rules = fieldValue.rules + + let hasRequired = rules.findIndex((item) => { + return item.required + }) + if (hasRequired < 0) { + if (value === null || value === undefined) { + return result + } + if (typeof value === 'string' && !value.length) { + return result + } + } + + var message = this._message + + if (rules === undefined) { + return message['default'] + } + + for (var i = 0; i < rules.length; i++) { + let rule = rules[i] + let vt = this._getValidateType(rule) + + Object.assign(rule, { + label: fieldValue.label || `["${fieldKey}"]` + }) + + if (RuleValidatorHelper[vt]) { + result = RuleValidatorHelper[vt](rule, value, message) + if (result != null) { + break + } + } + + if (rule.validateExpr) { + let now = Date.now() + let resultExpr = rule.validateExpr(value, allData, now) + if (resultExpr === false) { + result = this._getMessage(rule, rule.errorMessage || this._message['default']) + break + } + } + + if (rule.validateFunction) { + result = await this.validateFunction(rule, value, data, allData, vt) + if (result !== null) { + break + } + } + } + + if (result !== null) { + result = message.TAG + result + } + + return result + } + + async validateFunction(rule, value, data, allData, vt) { + let result = null + try { + let callbackMessage = null + const res = await rule.validateFunction(rule, value, allData || data, (message) => { + callbackMessage = message + }) + if (callbackMessage || (typeof res === 'string' && res) || res === false) { + result = this._getMessage(rule, callbackMessage || res, vt) + } + } catch (e) { + result = this._getMessage(rule, e.message, vt) + } + return result + } + + _getMessage(rule, message, vt) { + return formatMessage(rule, message || rule.errorMessage || this._message[vt] || message['default']) + } + + _getValidateType(rule) { + var result = '' + if (rule.required) { + result = 'required' + } else if (rule.format) { + result = 'format' + } else if (rule.arrayType) { + result = 'arrayTypeFormat' + } else if (rule.range) { + result = 'range' + } else if (rule.maximum !== undefined || rule.minimum !== undefined) { + result = 'rangeNumber' + } else if (rule.maxLength !== undefined || rule.minLength !== undefined) { + result = 'rangeLength' + } else if (rule.pattern) { + result = 'pattern' + } else if (rule.validateFunction) { + result = 'validateFunction' + } + return result + } +} + +const RuleValidatorHelper = { + required(rule, value, message) { + if (rule.required && isEmptyValue(value, rule.format || typeof value)) { + return formatMessage(rule, rule.errorMessage || message.required); + } + + return null + }, + + range(rule, value, message) { + const { + range, + errorMessage + } = rule; + + let list = new Array(range.length); + for (let i = 0; i < range.length; i++) { + const item = range[i]; + if (types.object(item) && item.value !== undefined) { + list[i] = item.value; + } else { + list[i] = item; + } + } + + let result = false + if (Array.isArray(value)) { + result = (new Set(value.concat(list)).size === list.length); + } else { + if (list.indexOf(value) > -1) { + result = true; + } + } + + if (!result) { + return formatMessage(rule, errorMessage || message['enum']); + } + + return null + }, + + rangeNumber(rule, value, message) { + if (!types.number(value)) { + return formatMessage(rule, rule.errorMessage || message.pattern.mismatch); + } + + let { + minimum, + maximum, + exclusiveMinimum, + exclusiveMaximum + } = rule; + let min = exclusiveMinimum ? value <= minimum : value < minimum; + let max = exclusiveMaximum ? value >= maximum : value > maximum; + + if (minimum !== undefined && min) { + return formatMessage(rule, rule.errorMessage || message['number'][exclusiveMinimum ? + 'exclusiveMinimum' : 'minimum' + ]) + } else if (maximum !== undefined && max) { + return formatMessage(rule, rule.errorMessage || message['number'][exclusiveMaximum ? + 'exclusiveMaximum' : 'maximum' + ]) + } else if (minimum !== undefined && maximum !== undefined && (min || max)) { + return formatMessage(rule, rule.errorMessage || message['number'].range) + } + + return null + }, + + rangeLength(rule, value, message) { + if (!types.string(value) && !types.array(value)) { + return formatMessage(rule, rule.errorMessage || message.pattern.mismatch); + } + + let min = rule.minLength; + let max = rule.maxLength; + let val = value.length; + + if (min !== undefined && val < min) { + return formatMessage(rule, rule.errorMessage || message['length'].minLength) + } else if (max !== undefined && val > max) { + return formatMessage(rule, rule.errorMessage || message['length'].maxLength) + } else if (min !== undefined && max !== undefined && (val < min || val > max)) { + return formatMessage(rule, rule.errorMessage || message['length'].range) + } + + return null + }, + + pattern(rule, value, message) { + if (!types['pattern'](rule.pattern, value)) { + return formatMessage(rule, rule.errorMessage || message.pattern.mismatch); + } + + return null + }, + + format(rule, value, message) { + var customTypes = Object.keys(types); + var format = FORMAT_MAPPING[rule.format] ? FORMAT_MAPPING[rule.format] : (rule.format || rule.arrayType); + + if (customTypes.indexOf(format) > -1) { + if (!types[format](value)) { + return formatMessage(rule, rule.errorMessage || message.typeError); + } + } + + return null + }, + + arrayTypeFormat(rule, value, message) { + if (!Array.isArray(value)) { + return formatMessage(rule, rule.errorMessage || message.typeError); + } + + for (let i = 0; i < value.length; i++) { + const element = value[i]; + let formatResult = this.format(rule, element, message) + if (formatResult !== null) { + return formatResult + } + } + + return null + } +} + +class SchemaValidator extends RuleValidator { + + constructor(schema, options) { + super(SchemaValidator.message); + + this._schema = schema + this._options = options || null + } + + updateSchema(schema) { + this._schema = schema + } + + async validate(data, allData) { + let result = this._checkFieldInSchema(data) + if (!result) { + result = await this.invokeValidate(data, false, allData) + } + return result.length ? result[0] : null + } + + async validateAll(data, allData) { + let result = this._checkFieldInSchema(data) + if (!result) { + result = await this.invokeValidate(data, true, allData) + } + return result + } + + async validateUpdate(data, allData) { + let result = this._checkFieldInSchema(data) + if (!result) { + result = await this.invokeValidateUpdate(data, false, allData) + } + return result.length ? result[0] : null + } + + async invokeValidate(data, all, allData) { + let result = [] + let schema = this._schema + for (let key in schema) { + let value = schema[key] + let errorMessage = await this.validateRule(key, value, data[key], data, allData) + if (errorMessage != null) { + result.push({ + key, + errorMessage + }) + if (!all) break + } + } + return result + } + + async invokeValidateUpdate(data, all, allData) { + let result = [] + for (let key in data) { + let errorMessage = await this.validateRule(key, this._schema[key], data[key], data, allData) + if (errorMessage != null) { + result.push({ + key, + errorMessage + }) + if (!all) break + } + } + return result + } + + _checkFieldInSchema(data) { + var keys = Object.keys(data) + var keys2 = Object.keys(this._schema) + if (new Set(keys.concat(keys2)).size === keys2.length) { + return '' + } + + var noExistFields = keys.filter((key) => { + return keys2.indexOf(key) < 0; + }) + var errorMessage = formatMessage({ + field: JSON.stringify(noExistFields) + }, SchemaValidator.message.TAG + SchemaValidator.message['defaultInvalid']) + return [{ + key: 'invalid', + errorMessage + }] + } +} + +function Message() { + return { + TAG: "", + default: '验证错误', + defaultInvalid: '提交的字段{field}在数据库中并不存在', + validateFunction: '验证无效', + required: '{label}必填', + 'enum': '{label}超出范围', + timestamp: '{label}格式无效', + whitespace: '{label}不能为空', + typeError: '{label}类型无效', + date: { + format: '{label}日期{value}格式无效', + parse: '{label}日期无法解析,{value}无效', + invalid: '{label}日期{value}无效' + }, + length: { + minLength: '{label}长度不能少于{minLength}', + maxLength: '{label}长度不能超过{maxLength}', + range: '{label}必须介于{minLength}和{maxLength}之间' + }, + number: { + minimum: '{label}不能小于{minimum}', + maximum: '{label}不能大于{maximum}', + exclusiveMinimum: '{label}不能小于等于{minimum}', + exclusiveMaximum: '{label}不能大于等于{maximum}', + range: '{label}必须介于{minimum}and{maximum}之间' + }, + pattern: { + mismatch: '{label}格式不匹配' + } + }; +} + + +SchemaValidator.message = new Message(); + +export default SchemaValidator diff --git a/uni_modules/uni-forms/package.json b/uni_modules/uni-forms/package.json new file mode 100644 index 0000000..dfa7af4 --- /dev/null +++ b/uni_modules/uni-forms/package.json @@ -0,0 +1,90 @@ +{ + "id": "uni-forms", + "displayName": "uni-forms 表单", + "version": "1.3.2", + "description": "由输入框、选择器、单选框、多选框等控件组成,用以收集、校验、提交数据", + "keywords": [ + "uni-ui", + "表单", + "校验", + "表单校验", + "表单验证" +], + "repository": "https://github.com/dcloudio/uni-ui", + "engines": { + "HBuilderX": "" + }, + "directories": { + "example": "../../temps/example_temps" + }, + "dcloudext": { + "category": [ + "前端组件", + "通用组件" + ], + "sale": { + "regular": { + "price": "0.00" + }, + "sourcecode": { + "price": "0.00" + } + }, + "contact": { + "qq": "" + }, + "declaration": { + "ads": "无", + "data": "无", + "permissions": "无" + }, + "npmurl": "https://www.npmjs.com/package/@dcloudio/uni-ui" + }, + "uni_modules": { + "dependencies": [ + "uni-scss", + "uni-icons" + ], + "encrypt": [], + "platforms": { + "cloud": { + "tcb": "y", + "aliyun": "y" + }, + "client": { + "App": { + "app-vue": "y", + "app-nvue": "y" + }, + "H5-mobile": { + "Safari": "y", + "Android Browser": "y", + "微信浏览器(Android)": "y", + "QQ浏览器(Android)": "y" + }, + "H5-pc": { + "Chrome": "y", + "IE": "y", + "Edge": "y", + "Firefox": "y", + "Safari": "y" + }, + "小程序": { + "微信": "y", + "阿里": "y", + "百度": "y", + "字节跳动": "y", + "QQ": "y" + }, + "快应用": { + "华为": "u", + "联盟": "u" + }, + "Vue": { + "vue2": "y", + "vue3": "y" + } + } + } + } +} diff --git a/uni_modules/uni-forms/readme.md b/uni_modules/uni-forms/readme.md new file mode 100644 index 0000000..63d5a04 --- /dev/null +++ b/uni_modules/uni-forms/readme.md @@ -0,0 +1,23 @@ + + +## Forms 表单 + +> **组件名:uni-forms** +> 代码块: `uForms`、`uni-forms-item` +> 关联组件:`uni-forms-item`、`uni-easyinput`、`uni-data-checkbox`、`uni-group`。 + + +uni-app的内置组件已经有了 `
`组件,用于提交表单内容。 + +然而几乎每个表单都需要做表单验证,为了方便做表单验证,减少重复开发,`uni ui` 又基于 ``组件封装了 ``组件,内置了表单验证功能。 + +`` 提供了 `rules`属性来描述校验规则、``子组件来包裹具体的表单项,以及给原生或三方组件提供了 `binddata()` 来设置表单值。 + +每个要校验的表单项,不管input还是checkbox,都必须放在``组件中,且一个``组件只能放置一个表单项。 + +``组件内部预留了显示error message的区域,默认是在表单项的底部。 + +另外,``组件下面的各个表单项,可以通过``包裹为不同的分组。同一``下的不同表单项目将聚拢在一起,同其他group保持垂直间距。``仅影响视觉效果。 + +### [查看文档](https://uniapp.dcloud.io/component/uniui/uni-forms) +#### 如使用过程中有任何问题,或者您对uni-ui有一些好的建议,欢迎加入 uni-ui 交流群:871950839 \ No newline at end of file diff --git a/uni_modules/uni-goods-nav/changelog.md b/uni_modules/uni-goods-nav/changelog.md new file mode 100644 index 0000000..c6264c6 --- /dev/null +++ b/uni_modules/uni-goods-nav/changelog.md @@ -0,0 +1,18 @@ +## 1.2.1(2022-05-30) +- 新增 stat属性,是否开启uni统计功能 +## 1.2.0(2021-11-19) +- 优化 组件UI,并提供设计资源,详见:[https://uniapp.dcloud.io/component/uniui/resource](https://uniapp.dcloud.io/component/uniui/resource) +- 文档迁移,详见:[https://uniapp.dcloud.io/component/uniui/uni-goods-nav](https://uniapp.dcloud.io/component/uniui/uni-goods-nav) +## 1.1.1(2021-08-24) +- 新增 支持国际化 +## 1.1.0(2021-07-13) +- 组件兼容 vue3,如何创建vue3项目,详见 [uni-app 项目支持 vue3 介绍](https://ask.dcloud.net.cn/article/37834) +## 1.0.7(2021-05-12) +- 新增 组件示例地址 +## 1.0.6(2021-04-21) +- 优化 添加依赖 uni-icons, 导入后自动下载依赖 +## 1.0.5(2021-02-05) +- 优化 组件引用关系,通过uni_modules引用组件 + +## 1.0.4(2021-02-05) +- 调整为uni_modules目录规范 diff --git a/uni_modules/uni-goods-nav/components/uni-goods-nav/i18n/en.json b/uni_modules/uni-goods-nav/components/uni-goods-nav/i18n/en.json new file mode 100644 index 0000000..dcdba41 --- /dev/null +++ b/uni_modules/uni-goods-nav/components/uni-goods-nav/i18n/en.json @@ -0,0 +1,6 @@ +{ + "uni-goods-nav.options.shop": "shop", + "uni-goods-nav.options.cart": "cart", + "uni-goods-nav.buttonGroup.addToCart": "add to cart", + "uni-goods-nav.buttonGroup.buyNow": "buy now" +} diff --git a/uni_modules/uni-goods-nav/components/uni-goods-nav/i18n/index.js b/uni_modules/uni-goods-nav/components/uni-goods-nav/i18n/index.js new file mode 100644 index 0000000..de7509c --- /dev/null +++ b/uni_modules/uni-goods-nav/components/uni-goods-nav/i18n/index.js @@ -0,0 +1,8 @@ +import en from './en.json' +import zhHans from './zh-Hans.json' +import zhHant from './zh-Hant.json' +export default { + en, + 'zh-Hans': zhHans, + 'zh-Hant': zhHant +} diff --git a/uni_modules/uni-goods-nav/components/uni-goods-nav/i18n/zh-Hans.json b/uni_modules/uni-goods-nav/components/uni-goods-nav/i18n/zh-Hans.json new file mode 100644 index 0000000..48ee344 --- /dev/null +++ b/uni_modules/uni-goods-nav/components/uni-goods-nav/i18n/zh-Hans.json @@ -0,0 +1,6 @@ +{ + "uni-goods-nav.options.shop": "店铺", + "uni-goods-nav.options.cart": "购物车", + "uni-goods-nav.buttonGroup.addToCart": "加入购物车", + "uni-goods-nav.buttonGroup.buyNow": "立即购买" +} diff --git a/uni_modules/uni-goods-nav/components/uni-goods-nav/i18n/zh-Hant.json b/uni_modules/uni-goods-nav/components/uni-goods-nav/i18n/zh-Hant.json new file mode 100644 index 0000000..d0a0255 --- /dev/null +++ b/uni_modules/uni-goods-nav/components/uni-goods-nav/i18n/zh-Hant.json @@ -0,0 +1,6 @@ +{ + "uni-goods-nav.options.shop": "店鋪", + "uni-goods-nav.options.cart": "購物車", + "uni-goods-nav.buttonGroup.addToCart": "加入購物車", + "uni-goods-nav.buttonGroup.buyNow": "立即購買" +} diff --git a/uni_modules/uni-goods-nav/components/uni-goods-nav/uni-goods-nav.vue b/uni_modules/uni-goods-nav/components/uni-goods-nav/uni-goods-nav.vue new file mode 100644 index 0000000..8a16b17 --- /dev/null +++ b/uni_modules/uni-goods-nav/components/uni-goods-nav/uni-goods-nav.vue @@ -0,0 +1,229 @@ + + + + + diff --git a/uni_modules/uni-goods-nav/package.json b/uni_modules/uni-goods-nav/package.json new file mode 100644 index 0000000..636e45e --- /dev/null +++ b/uni_modules/uni-goods-nav/package.json @@ -0,0 +1,88 @@ +{ + "id": "uni-goods-nav", + "displayName": "uni-goods-nav 商品导航", + "version": "1.2.1", + "description": "商品导航组件主要用于电商类应用底部导航,可自定义加入购物车,购买等操作", + "keywords": [ + "uni-ui", + "uniui", + "商品导航" +], + "repository": "https://github.com/dcloudio/uni-ui", + "engines": { + "HBuilderX": "" + }, + "directories": { + "example": "../../temps/example_temps" + }, + "dcloudext": { + "category": [ + "前端组件", + "通用组件" + ], + "sale": { + "regular": { + "price": "0.00" + }, + "sourcecode": { + "price": "0.00" + } + }, + "contact": { + "qq": "" + }, + "declaration": { + "ads": "无", + "data": "无", + "permissions": "无" + }, + "npmurl": "https://www.npmjs.com/package/@dcloudio/uni-ui" + }, + "uni_modules": { + "dependencies": [ + "uni-scss", + "uni-icons" + ], + "encrypt": [], + "platforms": { + "cloud": { + "tcb": "y", + "aliyun": "y" + }, + "client": { + "App": { + "app-vue": "y", + "app-nvue": "y" + }, + "H5-mobile": { + "Safari": "y", + "Android Browser": "y", + "微信浏览器(Android)": "y", + "QQ浏览器(Android)": "y" + }, + "H5-pc": { + "Chrome": "y", + "IE": "y", + "Edge": "y", + "Firefox": "y", + "Safari": "y" + }, + "小程序": { + "微信": "y", + "阿里": "y", + "百度": "y", + "字节跳动": "y", + "QQ": "y" + }, + "快应用": { + "华为": "u", + "联盟": "u" + }, + "Vue": { + "vue2": "y", + "vue3": "y" + } + } + } + } +} diff --git a/uni_modules/uni-goods-nav/readme.md b/uni_modules/uni-goods-nav/readme.md new file mode 100644 index 0000000..07df93f --- /dev/null +++ b/uni_modules/uni-goods-nav/readme.md @@ -0,0 +1,10 @@ + + +## GoodsNav 商品导航 +> **组件名:uni-goods-nav** +> 代码块: `uGoodsNav` + +商品加入购物车,立即购买等。 + +### [查看文档](https://uniapp.dcloud.io/component/uniui/uni-goods-nav) +#### 如使用过程中有任何问题,或者您对uni-ui有一些好的建议,欢迎加入 uni-ui 交流群:871950839 \ No newline at end of file diff --git a/uni_modules/uni-grid/changelog.md b/uni_modules/uni-grid/changelog.md new file mode 100644 index 0000000..d301166 --- /dev/null +++ b/uni_modules/uni-grid/changelog.md @@ -0,0 +1,13 @@ +## 1.4.0(2021-11-19) +- 优化 组件UI,并提供设计资源,详见:[https://uniapp.dcloud.io/component/uniui/resource](https://uniapp.dcloud.io/component/uniui/resource) +- 文档迁移,详见:[https://uniapp.dcloud.io/component/uniui/uni-grid](https://uniapp.dcloud.io/component/uniui/uni-grid) +## 1.3.2(2021-11-09) +- 新增 提供组件设计资源,组件样式调整 +## 1.3.1(2021-07-30) +- 优化 vue3下事件警告的问题 +## 1.3.0(2021-07-13) +- 组件兼容 vue3,如何创建vue3项目,详见 [uni-app 项目支持 vue3 介绍](https://ask.dcloud.net.cn/article/37834) +## 1.2.4(2021-05-12) +- 新增 组件示例地址 +## 1.2.3(2021-02-05) +- 调整为uni_modules目录规范 diff --git a/uni_modules/uni-grid/components/uni-grid-item/uni-grid-item.vue b/uni_modules/uni-grid/components/uni-grid-item/uni-grid-item.vue new file mode 100644 index 0000000..19c08d7 --- /dev/null +++ b/uni_modules/uni-grid/components/uni-grid-item/uni-grid-item.vue @@ -0,0 +1,127 @@ + + + + + diff --git a/uni_modules/uni-grid/components/uni-grid/uni-grid.vue b/uni_modules/uni-grid/components/uni-grid/uni-grid.vue new file mode 100644 index 0000000..0edc7ff --- /dev/null +++ b/uni_modules/uni-grid/components/uni-grid/uni-grid.vue @@ -0,0 +1,142 @@ + + + + + diff --git a/uni_modules/uni-grid/package.json b/uni_modules/uni-grid/package.json new file mode 100644 index 0000000..ccb2c91 --- /dev/null +++ b/uni_modules/uni-grid/package.json @@ -0,0 +1,86 @@ +{ + "id": "uni-grid", + "displayName": "uni-grid 宫格", + "version": "1.4.0", + "description": "Grid 宫格组件,提供移动端常见的宫格布局,如九宫格。", + "keywords": [ + "uni-ui", + "uniui", + "九宫格", + "表格" +], + "repository": "https://github.com/dcloudio/uni-ui", + "engines": { + "HBuilderX": "" + }, + "directories": { + "example": "../../temps/example_temps" + }, + "dcloudext": { + "category": [ + "前端组件", + "通用组件" + ], + "sale": { + "regular": { + "price": "0.00" + }, + "sourcecode": { + "price": "0.00" + } + }, + "contact": { + "qq": "" + }, + "declaration": { + "ads": "无", + "data": "无", + "permissions": "无" + }, + "npmurl": "https://www.npmjs.com/package/@dcloudio/uni-ui" + }, + "uni_modules": { + "dependencies": ["uni-scss","uni-icons"], + "encrypt": [], + "platforms": { + "cloud": { + "tcb": "y", + "aliyun": "y" + }, + "client": { + "App": { + "app-vue": "y", + "app-nvue": "y" + }, + "H5-mobile": { + "Safari": "y", + "Android Browser": "y", + "微信浏览器(Android)": "y", + "QQ浏览器(Android)": "y" + }, + "H5-pc": { + "Chrome": "y", + "IE": "y", + "Edge": "y", + "Firefox": "y", + "Safari": "y" + }, + "小程序": { + "微信": "y", + "阿里": "y", + "百度": "y", + "字节跳动": "y", + "QQ": "y" + }, + "快应用": { + "华为": "u", + "联盟": "u" + }, + "Vue": { + "vue2": "y", + "vue3": "y" + } + } + } + } +} diff --git a/uni_modules/uni-grid/readme.md b/uni_modules/uni-grid/readme.md new file mode 100644 index 0000000..0aa44cc --- /dev/null +++ b/uni_modules/uni-grid/readme.md @@ -0,0 +1,11 @@ + + +## Grid 宫格 +> **组件名:uni-grid** +> 代码块: `uGrid` + + +宫格组件。 + +### [查看文档](https://uniapp.dcloud.io/component/uniui/uni-grid) +#### 如使用过程中有任何问题,或者您对uni-ui有一些好的建议,欢迎加入 uni-ui 交流群:871950839 \ No newline at end of file diff --git a/uni_modules/uni-group/changelog.md b/uni_modules/uni-group/changelog.md new file mode 100644 index 0000000..a7024fd --- /dev/null +++ b/uni_modules/uni-group/changelog.md @@ -0,0 +1,16 @@ +## 1.2.2(2022-05-30) +- 新增 stat属性,是否开启uni统计功能 +## 1.2.1(2021-11-22) +- 修复 vue3中某些scss变量无法找到的问题 +## 1.2.0(2021-11-19) +- 优化 组件UI,并提供设计资源,详见:[https://uniapp.dcloud.io/component/uniui/resource](https://uniapp.dcloud.io/component/uniui/resource) +- 文档迁移,详见:[https://uniapp.dcloud.io/component/uniui/uni-group](https://uniapp.dcloud.io/component/uniui/uni-group) +## 1.1.7(2021-11-08) +## 1.1.0(2021-07-30) +- 组件兼容 vue3,如何创建vue3项目,详见 [uni-app 项目支持 vue3 介绍](https://ask.dcloud.net.cn/article/37834) +- 优化 组件文档 +## 1.0.3(2021-05-12) +- 新增 组件示例地址 +## 1.0.2(2021-02-05) +- 调整为uni_modules目录规范 +- 优化 兼容 nvue 页面 diff --git a/uni_modules/uni-group/components/uni-group/uni-group.vue b/uni_modules/uni-group/components/uni-group/uni-group.vue new file mode 100644 index 0000000..3425ecd --- /dev/null +++ b/uni_modules/uni-group/components/uni-group/uni-group.vue @@ -0,0 +1,134 @@ + + + + diff --git a/uni_modules/uni-group/package.json b/uni_modules/uni-group/package.json new file mode 100644 index 0000000..ea00a08 --- /dev/null +++ b/uni_modules/uni-group/package.json @@ -0,0 +1,87 @@ +{ + "id": "uni-group", + "displayName": "uni-group 分组", + "version": "1.2.2", + "description": "分组组件可用于将组件用于分组,添加间隔,以产生明显的区块", + "keywords": [ + "uni-ui", + "uniui", + "group", + "分组", + "" +], + "repository": "https://github.com/dcloudio/uni-ui", + "engines": { + "HBuilderX": "" + }, + "directories": { + "example": "../../temps/example_temps" + }, + "dcloudext": { + "category": [ + "前端组件", + "通用组件" + ], + "sale": { + "regular": { + "price": "0.00" + }, + "sourcecode": { + "price": "0.00" + } + }, + "contact": { + "qq": "" + }, + "declaration": { + "ads": "无", + "data": "无", + "permissions": "无" + }, + "npmurl": "https://www.npmjs.com/package/@dcloudio/uni-ui" + }, + "uni_modules": { + "dependencies": ["uni-scss"], + "encrypt": [], + "platforms": { + "cloud": { + "tcb": "y", + "aliyun": "y" + }, + "client": { + "App": { + "app-vue": "y", + "app-nvue": "y" + }, + "H5-mobile": { + "Safari": "y", + "Android Browser": "y", + "微信浏览器(Android)": "y", + "QQ浏览器(Android)": "y" + }, + "H5-pc": { + "Chrome": "y", + "IE": "y", + "Edge": "y", + "Firefox": "y", + "Safari": "y" + }, + "小程序": { + "微信": "y", + "阿里": "y", + "百度": "y", + "字节跳动": "y", + "QQ": "y" + }, + "快应用": { + "华为": "u", + "联盟": "u" + }, + "Vue": { + "vue2": "y", + "vue3": "y" + } + } + } + } +} \ No newline at end of file diff --git a/uni_modules/uni-group/readme.md b/uni_modules/uni-group/readme.md new file mode 100644 index 0000000..bae67f4 --- /dev/null +++ b/uni_modules/uni-group/readme.md @@ -0,0 +1,9 @@ + +## Group 分组 +> **组件名:uni-group** +> 代码块: `uGroup` + +分组组件可用于将组件分组,添加间隔,以产生明显的区块。 + +### [查看文档](https://uniapp.dcloud.io/component/uniui/uni-group) +#### 如使用过程中有任何问题,或者您对uni-ui有一些好的建议,欢迎加入 uni-ui 交流群:871950839 \ No newline at end of file diff --git a/uni_modules/uni-icons/changelog.md b/uni_modules/uni-icons/changelog.md new file mode 100644 index 0000000..6449885 --- /dev/null +++ b/uni_modules/uni-icons/changelog.md @@ -0,0 +1,22 @@ +## 1.3.5(2022-01-24) +- 优化 size 属性可以传入不带单位的字符串数值 +## 1.3.4(2022-01-24) +- 优化 size 支持其他单位 +## 1.3.3(2022-01-17) +- 修复 nvue 有些图标不显示的bug,兼容老版本图标 +## 1.3.2(2021-12-01) +- 优化 示例可复制图标名称 +## 1.3.1(2021-11-23) +- 优化 兼容旧组件 type 值 +## 1.3.0(2021-11-19) +- 新增 更多图标 +- 优化 自定义图标使用方式 +- 优化 组件UI,并提供设计资源,详见:[https://uniapp.dcloud.io/component/uniui/resource](https://uniapp.dcloud.io/component/uniui/resource) +- 文档迁移,详见:[https://uniapp.dcloud.io/component/uniui/uni-icons](https://uniapp.dcloud.io/component/uniui/uni-icons) +## 1.1.7(2021-11-08) +## 1.2.0(2021-07-30) +- 组件兼容 vue3,如何创建vue3项目,详见 [uni-app 项目支持 vue3 介绍](https://ask.dcloud.net.cn/article/37834) +## 1.1.5(2021-05-12) +- 新增 组件示例地址 +## 1.1.4(2021-02-05) +- 调整为uni_modules目录规范 diff --git a/uni_modules/uni-icons/components/uni-icons/icons.js b/uni_modules/uni-icons/components/uni-icons/icons.js new file mode 100644 index 0000000..7889936 --- /dev/null +++ b/uni_modules/uni-icons/components/uni-icons/icons.js @@ -0,0 +1,1169 @@ +export default { + "id": "2852637", + "name": "uniui图标库", + "font_family": "uniicons", + "css_prefix_text": "uniui-", + "description": "", + "glyphs": [ + { + "icon_id": "25027049", + "name": "yanse", + "font_class": "color", + "unicode": "e6cf", + "unicode_decimal": 59087 + }, + { + "icon_id": "25027048", + "name": "wallet", + "font_class": "wallet", + "unicode": "e6b1", + "unicode_decimal": 59057 + }, + { + "icon_id": "25015720", + "name": "settings-filled", + "font_class": "settings-filled", + "unicode": "e6ce", + "unicode_decimal": 59086 + }, + { + "icon_id": "25015434", + "name": "shimingrenzheng-filled", + "font_class": "auth-filled", + "unicode": "e6cc", + "unicode_decimal": 59084 + }, + { + "icon_id": "24934246", + "name": "shop-filled", + "font_class": "shop-filled", + "unicode": "e6cd", + "unicode_decimal": 59085 + }, + { + "icon_id": "24934159", + "name": "staff-filled-01", + "font_class": "staff-filled", + "unicode": "e6cb", + "unicode_decimal": 59083 + }, + { + "icon_id": "24932461", + "name": "VIP-filled", + "font_class": "vip-filled", + "unicode": "e6c6", + "unicode_decimal": 59078 + }, + { + "icon_id": "24932462", + "name": "plus_circle_fill", + "font_class": "plus-filled", + "unicode": "e6c7", + "unicode_decimal": 59079 + }, + { + "icon_id": "24932463", + "name": "folder_add-filled", + "font_class": "folder-add-filled", + "unicode": "e6c8", + "unicode_decimal": 59080 + }, + { + "icon_id": "24932464", + "name": "yanse-filled", + "font_class": "color-filled", + "unicode": "e6c9", + "unicode_decimal": 59081 + }, + { + "icon_id": "24932465", + "name": "tune-filled", + "font_class": "tune-filled", + "unicode": "e6ca", + "unicode_decimal": 59082 + }, + { + "icon_id": "24932455", + "name": "a-rilidaka-filled", + "font_class": "calendar-filled", + "unicode": "e6c0", + "unicode_decimal": 59072 + }, + { + "icon_id": "24932456", + "name": "notification-filled", + "font_class": "notification-filled", + "unicode": "e6c1", + "unicode_decimal": 59073 + }, + { + "icon_id": "24932457", + "name": "wallet-filled", + "font_class": "wallet-filled", + "unicode": "e6c2", + "unicode_decimal": 59074 + }, + { + "icon_id": "24932458", + "name": "paihangbang-filled", + "font_class": "medal-filled", + "unicode": "e6c3", + "unicode_decimal": 59075 + }, + { + "icon_id": "24932459", + "name": "gift-filled", + "font_class": "gift-filled", + "unicode": "e6c4", + "unicode_decimal": 59076 + }, + { + "icon_id": "24932460", + "name": "fire-filled", + "font_class": "fire-filled", + "unicode": "e6c5", + "unicode_decimal": 59077 + }, + { + "icon_id": "24928001", + "name": "refreshempty", + "font_class": "refreshempty", + "unicode": "e6bf", + "unicode_decimal": 59071 + }, + { + "icon_id": "24926853", + "name": "location-ellipse", + "font_class": "location-filled", + "unicode": "e6af", + "unicode_decimal": 59055 + }, + { + "icon_id": "24926735", + "name": "person-filled", + "font_class": "person-filled", + "unicode": "e69d", + "unicode_decimal": 59037 + }, + { + "icon_id": "24926703", + "name": "personadd-filled", + "font_class": "personadd-filled", + "unicode": "e698", + "unicode_decimal": 59032 + }, + { + "icon_id": "24923351", + "name": "back", + "font_class": "back", + "unicode": "e6b9", + "unicode_decimal": 59065 + }, + { + "icon_id": "24923352", + "name": "forward", + "font_class": "forward", + "unicode": "e6ba", + "unicode_decimal": 59066 + }, + { + "icon_id": "24923353", + "name": "arrowthinright", + "font_class": "arrow-right", + "unicode": "e6bb", + "unicode_decimal": 59067 + }, + { + "icon_id": "24923353", + "name": "arrowthinright", + "font_class": "arrowthinright", + "unicode": "e6bb", + "unicode_decimal": 59067 + }, + { + "icon_id": "24923354", + "name": "arrowthinleft", + "font_class": "arrow-left", + "unicode": "e6bc", + "unicode_decimal": 59068 + }, + { + "icon_id": "24923354", + "name": "arrowthinleft", + "font_class": "arrowthinleft", + "unicode": "e6bc", + "unicode_decimal": 59068 + }, + { + "icon_id": "24923355", + "name": "arrowthinup", + "font_class": "arrow-up", + "unicode": "e6bd", + "unicode_decimal": 59069 + }, + { + "icon_id": "24923355", + "name": "arrowthinup", + "font_class": "arrowthinup", + "unicode": "e6bd", + "unicode_decimal": 59069 + }, + { + "icon_id": "24923356", + "name": "arrowthindown", + "font_class": "arrow-down", + "unicode": "e6be", + "unicode_decimal": 59070 + },{ + "icon_id": "24923356", + "name": "arrowthindown", + "font_class": "arrowthindown", + "unicode": "e6be", + "unicode_decimal": 59070 + }, + { + "icon_id": "24923349", + "name": "arrowdown", + "font_class": "bottom", + "unicode": "e6b8", + "unicode_decimal": 59064 + },{ + "icon_id": "24923349", + "name": "arrowdown", + "font_class": "arrowdown", + "unicode": "e6b8", + "unicode_decimal": 59064 + }, + { + "icon_id": "24923346", + "name": "arrowright", + "font_class": "right", + "unicode": "e6b5", + "unicode_decimal": 59061 + }, + { + "icon_id": "24923346", + "name": "arrowright", + "font_class": "arrowright", + "unicode": "e6b5", + "unicode_decimal": 59061 + }, + { + "icon_id": "24923347", + "name": "arrowup", + "font_class": "top", + "unicode": "e6b6", + "unicode_decimal": 59062 + }, + { + "icon_id": "24923347", + "name": "arrowup", + "font_class": "arrowup", + "unicode": "e6b6", + "unicode_decimal": 59062 + }, + { + "icon_id": "24923348", + "name": "arrowleft", + "font_class": "left", + "unicode": "e6b7", + "unicode_decimal": 59063 + }, + { + "icon_id": "24923348", + "name": "arrowleft", + "font_class": "arrowleft", + "unicode": "e6b7", + "unicode_decimal": 59063 + }, + { + "icon_id": "24923334", + "name": "eye", + "font_class": "eye", + "unicode": "e651", + "unicode_decimal": 58961 + }, + { + "icon_id": "24923335", + "name": "eye-filled", + "font_class": "eye-filled", + "unicode": "e66a", + "unicode_decimal": 58986 + }, + { + "icon_id": "24923336", + "name": "eye-slash", + "font_class": "eye-slash", + "unicode": "e6b3", + "unicode_decimal": 59059 + }, + { + "icon_id": "24923337", + "name": "eye-slash-filled", + "font_class": "eye-slash-filled", + "unicode": "e6b4", + "unicode_decimal": 59060 + }, + { + "icon_id": "24923305", + "name": "info-filled", + "font_class": "info-filled", + "unicode": "e649", + "unicode_decimal": 58953 + }, + { + "icon_id": "24923299", + "name": "reload-01", + "font_class": "reload", + "unicode": "e6b2", + "unicode_decimal": 59058 + }, + { + "icon_id": "24923195", + "name": "mic_slash_fill", + "font_class": "micoff-filled", + "unicode": "e6b0", + "unicode_decimal": 59056 + }, + { + "icon_id": "24923165", + "name": "map-pin-ellipse", + "font_class": "map-pin-ellipse", + "unicode": "e6ac", + "unicode_decimal": 59052 + }, + { + "icon_id": "24923166", + "name": "map-pin", + "font_class": "map-pin", + "unicode": "e6ad", + "unicode_decimal": 59053 + }, + { + "icon_id": "24923167", + "name": "location", + "font_class": "location", + "unicode": "e6ae", + "unicode_decimal": 59054 + }, + { + "icon_id": "24923064", + "name": "starhalf", + "font_class": "starhalf", + "unicode": "e683", + "unicode_decimal": 59011 + }, + { + "icon_id": "24923065", + "name": "star", + "font_class": "star", + "unicode": "e688", + "unicode_decimal": 59016 + }, + { + "icon_id": "24923066", + "name": "star-filled", + "font_class": "star-filled", + "unicode": "e68f", + "unicode_decimal": 59023 + }, + { + "icon_id": "24899646", + "name": "a-rilidaka", + "font_class": "calendar", + "unicode": "e6a0", + "unicode_decimal": 59040 + }, + { + "icon_id": "24899647", + "name": "fire", + "font_class": "fire", + "unicode": "e6a1", + "unicode_decimal": 59041 + }, + { + "icon_id": "24899648", + "name": "paihangbang", + "font_class": "medal", + "unicode": "e6a2", + "unicode_decimal": 59042 + }, + { + "icon_id": "24899649", + "name": "font", + "font_class": "font", + "unicode": "e6a3", + "unicode_decimal": 59043 + }, + { + "icon_id": "24899650", + "name": "gift", + "font_class": "gift", + "unicode": "e6a4", + "unicode_decimal": 59044 + }, + { + "icon_id": "24899651", + "name": "link", + "font_class": "link", + "unicode": "e6a5", + "unicode_decimal": 59045 + }, + { + "icon_id": "24899652", + "name": "notification", + "font_class": "notification", + "unicode": "e6a6", + "unicode_decimal": 59046 + }, + { + "icon_id": "24899653", + "name": "staff", + "font_class": "staff", + "unicode": "e6a7", + "unicode_decimal": 59047 + }, + { + "icon_id": "24899654", + "name": "VIP", + "font_class": "vip", + "unicode": "e6a8", + "unicode_decimal": 59048 + }, + { + "icon_id": "24899655", + "name": "folder_add", + "font_class": "folder-add", + "unicode": "e6a9", + "unicode_decimal": 59049 + }, + { + "icon_id": "24899656", + "name": "tune", + "font_class": "tune", + "unicode": "e6aa", + "unicode_decimal": 59050 + }, + { + "icon_id": "24899657", + "name": "shimingrenzheng", + "font_class": "auth", + "unicode": "e6ab", + "unicode_decimal": 59051 + }, + { + "icon_id": "24899565", + "name": "person", + "font_class": "person", + "unicode": "e699", + "unicode_decimal": 59033 + }, + { + "icon_id": "24899566", + "name": "email-filled", + "font_class": "email-filled", + "unicode": "e69a", + "unicode_decimal": 59034 + }, + { + "icon_id": "24899567", + "name": "phone-filled", + "font_class": "phone-filled", + "unicode": "e69b", + "unicode_decimal": 59035 + }, + { + "icon_id": "24899568", + "name": "phone", + "font_class": "phone", + "unicode": "e69c", + "unicode_decimal": 59036 + }, + { + "icon_id": "24899570", + "name": "email", + "font_class": "email", + "unicode": "e69e", + "unicode_decimal": 59038 + }, + { + "icon_id": "24899571", + "name": "personadd", + "font_class": "personadd", + "unicode": "e69f", + "unicode_decimal": 59039 + }, + { + "icon_id": "24899558", + "name": "chatboxes-filled", + "font_class": "chatboxes-filled", + "unicode": "e692", + "unicode_decimal": 59026 + }, + { + "icon_id": "24899559", + "name": "contact", + "font_class": "contact", + "unicode": "e693", + "unicode_decimal": 59027 + }, + { + "icon_id": "24899560", + "name": "chatbubble-filled", + "font_class": "chatbubble-filled", + "unicode": "e694", + "unicode_decimal": 59028 + }, + { + "icon_id": "24899561", + "name": "contact-filled", + "font_class": "contact-filled", + "unicode": "e695", + "unicode_decimal": 59029 + }, + { + "icon_id": "24899562", + "name": "chatboxes", + "font_class": "chatboxes", + "unicode": "e696", + "unicode_decimal": 59030 + }, + { + "icon_id": "24899563", + "name": "chatbubble", + "font_class": "chatbubble", + "unicode": "e697", + "unicode_decimal": 59031 + }, + { + "icon_id": "24881290", + "name": "upload-filled", + "font_class": "upload-filled", + "unicode": "e68e", + "unicode_decimal": 59022 + }, + { + "icon_id": "24881292", + "name": "upload", + "font_class": "upload", + "unicode": "e690", + "unicode_decimal": 59024 + }, + { + "icon_id": "24881293", + "name": "weixin", + "font_class": "weixin", + "unicode": "e691", + "unicode_decimal": 59025 + }, + { + "icon_id": "24881274", + "name": "compose", + "font_class": "compose", + "unicode": "e67f", + "unicode_decimal": 59007 + }, + { + "icon_id": "24881275", + "name": "qq", + "font_class": "qq", + "unicode": "e680", + "unicode_decimal": 59008 + }, + { + "icon_id": "24881276", + "name": "download-filled", + "font_class": "download-filled", + "unicode": "e681", + "unicode_decimal": 59009 + }, + { + "icon_id": "24881277", + "name": "pengyouquan", + "font_class": "pyq", + "unicode": "e682", + "unicode_decimal": 59010 + }, + { + "icon_id": "24881279", + "name": "sound", + "font_class": "sound", + "unicode": "e684", + "unicode_decimal": 59012 + }, + { + "icon_id": "24881280", + "name": "trash-filled", + "font_class": "trash-filled", + "unicode": "e685", + "unicode_decimal": 59013 + }, + { + "icon_id": "24881281", + "name": "sound-filled", + "font_class": "sound-filled", + "unicode": "e686", + "unicode_decimal": 59014 + }, + { + "icon_id": "24881282", + "name": "trash", + "font_class": "trash", + "unicode": "e687", + "unicode_decimal": 59015 + }, + { + "icon_id": "24881284", + "name": "videocam-filled", + "font_class": "videocam-filled", + "unicode": "e689", + "unicode_decimal": 59017 + }, + { + "icon_id": "24881285", + "name": "spinner-cycle", + "font_class": "spinner-cycle", + "unicode": "e68a", + "unicode_decimal": 59018 + }, + { + "icon_id": "24881286", + "name": "weibo", + "font_class": "weibo", + "unicode": "e68b", + "unicode_decimal": 59019 + }, + { + "icon_id": "24881288", + "name": "videocam", + "font_class": "videocam", + "unicode": "e68c", + "unicode_decimal": 59020 + }, + { + "icon_id": "24881289", + "name": "download", + "font_class": "download", + "unicode": "e68d", + "unicode_decimal": 59021 + }, + { + "icon_id": "24879601", + "name": "help", + "font_class": "help", + "unicode": "e679", + "unicode_decimal": 59001 + }, + { + "icon_id": "24879602", + "name": "navigate-filled", + "font_class": "navigate-filled", + "unicode": "e67a", + "unicode_decimal": 59002 + }, + { + "icon_id": "24879603", + "name": "plusempty", + "font_class": "plusempty", + "unicode": "e67b", + "unicode_decimal": 59003 + }, + { + "icon_id": "24879604", + "name": "smallcircle", + "font_class": "smallcircle", + "unicode": "e67c", + "unicode_decimal": 59004 + }, + { + "icon_id": "24879605", + "name": "minus-filled", + "font_class": "minus-filled", + "unicode": "e67d", + "unicode_decimal": 59005 + }, + { + "icon_id": "24879606", + "name": "micoff", + "font_class": "micoff", + "unicode": "e67e", + "unicode_decimal": 59006 + }, + { + "icon_id": "24879588", + "name": "closeempty", + "font_class": "closeempty", + "unicode": "e66c", + "unicode_decimal": 58988 + }, + { + "icon_id": "24879589", + "name": "clear", + "font_class": "clear", + "unicode": "e66d", + "unicode_decimal": 58989 + }, + { + "icon_id": "24879590", + "name": "navigate", + "font_class": "navigate", + "unicode": "e66e", + "unicode_decimal": 58990 + }, + { + "icon_id": "24879591", + "name": "minus", + "font_class": "minus", + "unicode": "e66f", + "unicode_decimal": 58991 + }, + { + "icon_id": "24879592", + "name": "image", + "font_class": "image", + "unicode": "e670", + "unicode_decimal": 58992 + }, + { + "icon_id": "24879593", + "name": "mic", + "font_class": "mic", + "unicode": "e671", + "unicode_decimal": 58993 + }, + { + "icon_id": "24879594", + "name": "paperplane", + "font_class": "paperplane", + "unicode": "e672", + "unicode_decimal": 58994 + }, + { + "icon_id": "24879595", + "name": "close", + "font_class": "close", + "unicode": "e673", + "unicode_decimal": 58995 + }, + { + "icon_id": "24879596", + "name": "help-filled", + "font_class": "help-filled", + "unicode": "e674", + "unicode_decimal": 58996 + }, + { + "icon_id": "24879597", + "name": "plus-filled", + "font_class": "paperplane-filled", + "unicode": "e675", + "unicode_decimal": 58997 + }, + { + "icon_id": "24879598", + "name": "plus", + "font_class": "plus", + "unicode": "e676", + "unicode_decimal": 58998 + }, + { + "icon_id": "24879599", + "name": "mic-filled", + "font_class": "mic-filled", + "unicode": "e677", + "unicode_decimal": 58999 + }, + { + "icon_id": "24879600", + "name": "image-filled", + "font_class": "image-filled", + "unicode": "e678", + "unicode_decimal": 59000 + }, + { + "icon_id": "24855900", + "name": "locked-filled", + "font_class": "locked-filled", + "unicode": "e668", + "unicode_decimal": 58984 + }, + { + "icon_id": "24855901", + "name": "info", + "font_class": "info", + "unicode": "e669", + "unicode_decimal": 58985 + }, + { + "icon_id": "24855903", + "name": "locked", + "font_class": "locked", + "unicode": "e66b", + "unicode_decimal": 58987 + }, + { + "icon_id": "24855884", + "name": "camera-filled", + "font_class": "camera-filled", + "unicode": "e658", + "unicode_decimal": 58968 + }, + { + "icon_id": "24855885", + "name": "chat-filled", + "font_class": "chat-filled", + "unicode": "e659", + "unicode_decimal": 58969 + }, + { + "icon_id": "24855886", + "name": "camera", + "font_class": "camera", + "unicode": "e65a", + "unicode_decimal": 58970 + }, + { + "icon_id": "24855887", + "name": "circle", + "font_class": "circle", + "unicode": "e65b", + "unicode_decimal": 58971 + }, + { + "icon_id": "24855888", + "name": "checkmarkempty", + "font_class": "checkmarkempty", + "unicode": "e65c", + "unicode_decimal": 58972 + }, + { + "icon_id": "24855889", + "name": "chat", + "font_class": "chat", + "unicode": "e65d", + "unicode_decimal": 58973 + }, + { + "icon_id": "24855890", + "name": "circle-filled", + "font_class": "circle-filled", + "unicode": "e65e", + "unicode_decimal": 58974 + }, + { + "icon_id": "24855891", + "name": "flag", + "font_class": "flag", + "unicode": "e65f", + "unicode_decimal": 58975 + }, + { + "icon_id": "24855892", + "name": "flag-filled", + "font_class": "flag-filled", + "unicode": "e660", + "unicode_decimal": 58976 + }, + { + "icon_id": "24855893", + "name": "gear-filled", + "font_class": "gear-filled", + "unicode": "e661", + "unicode_decimal": 58977 + }, + { + "icon_id": "24855894", + "name": "home", + "font_class": "home", + "unicode": "e662", + "unicode_decimal": 58978 + }, + { + "icon_id": "24855895", + "name": "home-filled", + "font_class": "home-filled", + "unicode": "e663", + "unicode_decimal": 58979 + }, + { + "icon_id": "24855896", + "name": "gear", + "font_class": "gear", + "unicode": "e664", + "unicode_decimal": 58980 + }, + { + "icon_id": "24855897", + "name": "smallcircle-filled", + "font_class": "smallcircle-filled", + "unicode": "e665", + "unicode_decimal": 58981 + }, + { + "icon_id": "24855898", + "name": "map-filled", + "font_class": "map-filled", + "unicode": "e666", + "unicode_decimal": 58982 + }, + { + "icon_id": "24855899", + "name": "map", + "font_class": "map", + "unicode": "e667", + "unicode_decimal": 58983 + }, + { + "icon_id": "24855825", + "name": "refresh-filled", + "font_class": "refresh-filled", + "unicode": "e656", + "unicode_decimal": 58966 + }, + { + "icon_id": "24855826", + "name": "refresh", + "font_class": "refresh", + "unicode": "e657", + "unicode_decimal": 58967 + }, + { + "icon_id": "24855808", + "name": "cloud-upload", + "font_class": "cloud-upload", + "unicode": "e645", + "unicode_decimal": 58949 + }, + { + "icon_id": "24855809", + "name": "cloud-download-filled", + "font_class": "cloud-download-filled", + "unicode": "e646", + "unicode_decimal": 58950 + }, + { + "icon_id": "24855810", + "name": "cloud-download", + "font_class": "cloud-download", + "unicode": "e647", + "unicode_decimal": 58951 + }, + { + "icon_id": "24855811", + "name": "cloud-upload-filled", + "font_class": "cloud-upload-filled", + "unicode": "e648", + "unicode_decimal": 58952 + }, + { + "icon_id": "24855813", + "name": "redo", + "font_class": "redo", + "unicode": "e64a", + "unicode_decimal": 58954 + }, + { + "icon_id": "24855814", + "name": "images-filled", + "font_class": "images-filled", + "unicode": "e64b", + "unicode_decimal": 58955 + }, + { + "icon_id": "24855815", + "name": "undo-filled", + "font_class": "undo-filled", + "unicode": "e64c", + "unicode_decimal": 58956 + }, + { + "icon_id": "24855816", + "name": "more", + "font_class": "more", + "unicode": "e64d", + "unicode_decimal": 58957 + }, + { + "icon_id": "24855817", + "name": "more-filled", + "font_class": "more-filled", + "unicode": "e64e", + "unicode_decimal": 58958 + }, + { + "icon_id": "24855818", + "name": "undo", + "font_class": "undo", + "unicode": "e64f", + "unicode_decimal": 58959 + }, + { + "icon_id": "24855819", + "name": "images", + "font_class": "images", + "unicode": "e650", + "unicode_decimal": 58960 + }, + { + "icon_id": "24855821", + "name": "paperclip", + "font_class": "paperclip", + "unicode": "e652", + "unicode_decimal": 58962 + }, + { + "icon_id": "24855822", + "name": "settings", + "font_class": "settings", + "unicode": "e653", + "unicode_decimal": 58963 + }, + { + "icon_id": "24855823", + "name": "search", + "font_class": "search", + "unicode": "e654", + "unicode_decimal": 58964 + }, + { + "icon_id": "24855824", + "name": "redo-filled", + "font_class": "redo-filled", + "unicode": "e655", + "unicode_decimal": 58965 + }, + { + "icon_id": "24841702", + "name": "list", + "font_class": "list", + "unicode": "e644", + "unicode_decimal": 58948 + }, + { + "icon_id": "24841489", + "name": "mail-open-filled", + "font_class": "mail-open-filled", + "unicode": "e63a", + "unicode_decimal": 58938 + }, + { + "icon_id": "24841491", + "name": "hand-thumbsdown-filled", + "font_class": "hand-down-filled", + "unicode": "e63c", + "unicode_decimal": 58940 + }, + { + "icon_id": "24841492", + "name": "hand-thumbsdown", + "font_class": "hand-down", + "unicode": "e63d", + "unicode_decimal": 58941 + }, + { + "icon_id": "24841493", + "name": "hand-thumbsup-filled", + "font_class": "hand-up-filled", + "unicode": "e63e", + "unicode_decimal": 58942 + }, + { + "icon_id": "24841494", + "name": "hand-thumbsup", + "font_class": "hand-up", + "unicode": "e63f", + "unicode_decimal": 58943 + }, + { + "icon_id": "24841496", + "name": "heart-filled", + "font_class": "heart-filled", + "unicode": "e641", + "unicode_decimal": 58945 + }, + { + "icon_id": "24841498", + "name": "mail-open", + "font_class": "mail-open", + "unicode": "e643", + "unicode_decimal": 58947 + }, + { + "icon_id": "24841488", + "name": "heart", + "font_class": "heart", + "unicode": "e639", + "unicode_decimal": 58937 + }, + { + "icon_id": "24839963", + "name": "loop", + "font_class": "loop", + "unicode": "e633", + "unicode_decimal": 58931 + }, + { + "icon_id": "24839866", + "name": "pulldown", + "font_class": "pulldown", + "unicode": "e632", + "unicode_decimal": 58930 + }, + { + "icon_id": "24813798", + "name": "scan", + "font_class": "scan", + "unicode": "e62a", + "unicode_decimal": 58922 + }, + { + "icon_id": "24813786", + "name": "bars", + "font_class": "bars", + "unicode": "e627", + "unicode_decimal": 58919 + }, + { + "icon_id": "24813788", + "name": "cart-filled", + "font_class": "cart-filled", + "unicode": "e629", + "unicode_decimal": 58921 + }, + { + "icon_id": "24813790", + "name": "checkbox", + "font_class": "checkbox", + "unicode": "e62b", + "unicode_decimal": 58923 + }, + { + "icon_id": "24813791", + "name": "checkbox-filled", + "font_class": "checkbox-filled", + "unicode": "e62c", + "unicode_decimal": 58924 + }, + { + "icon_id": "24813794", + "name": "shop", + "font_class": "shop", + "unicode": "e62f", + "unicode_decimal": 58927 + }, + { + "icon_id": "24813795", + "name": "headphones", + "font_class": "headphones", + "unicode": "e630", + "unicode_decimal": 58928 + }, + { + "icon_id": "24813796", + "name": "cart", + "font_class": "cart", + "unicode": "e631", + "unicode_decimal": 58929 + } + ] +} diff --git a/uni_modules/uni-icons/components/uni-icons/uni-icons.vue b/uni_modules/uni-icons/components/uni-icons/uni-icons.vue new file mode 100644 index 0000000..86e7444 --- /dev/null +++ b/uni_modules/uni-icons/components/uni-icons/uni-icons.vue @@ -0,0 +1,96 @@ + + + + + diff --git a/uni_modules/uni-icons/components/uni-icons/uniicons.css b/uni_modules/uni-icons/components/uni-icons/uniicons.css new file mode 100644 index 0000000..2f56eab --- /dev/null +++ b/uni_modules/uni-icons/components/uni-icons/uniicons.css @@ -0,0 +1,663 @@ +.uniui-color:before { + content: "\e6cf"; +} + +.uniui-wallet:before { + content: "\e6b1"; +} + +.uniui-settings-filled:before { + content: "\e6ce"; +} + +.uniui-auth-filled:before { + content: "\e6cc"; +} + +.uniui-shop-filled:before { + content: "\e6cd"; +} + +.uniui-staff-filled:before { + content: "\e6cb"; +} + +.uniui-vip-filled:before { + content: "\e6c6"; +} + +.uniui-plus-filled:before { + content: "\e6c7"; +} + +.uniui-folder-add-filled:before { + content: "\e6c8"; +} + +.uniui-color-filled:before { + content: "\e6c9"; +} + +.uniui-tune-filled:before { + content: "\e6ca"; +} + +.uniui-calendar-filled:before { + content: "\e6c0"; +} + +.uniui-notification-filled:before { + content: "\e6c1"; +} + +.uniui-wallet-filled:before { + content: "\e6c2"; +} + +.uniui-medal-filled:before { + content: "\e6c3"; +} + +.uniui-gift-filled:before { + content: "\e6c4"; +} + +.uniui-fire-filled:before { + content: "\e6c5"; +} + +.uniui-refreshempty:before { + content: "\e6bf"; +} + +.uniui-location-filled:before { + content: "\e6af"; +} + +.uniui-person-filled:before { + content: "\e69d"; +} + +.uniui-personadd-filled:before { + content: "\e698"; +} + +.uniui-back:before { + content: "\e6b9"; +} + +.uniui-forward:before { + content: "\e6ba"; +} + +.uniui-arrow-right:before { + content: "\e6bb"; +} + +.uniui-arrowthinright:before { + content: "\e6bb"; +} + +.uniui-arrow-left:before { + content: "\e6bc"; +} + +.uniui-arrowthinleft:before { + content: "\e6bc"; +} + +.uniui-arrow-up:before { + content: "\e6bd"; +} + +.uniui-arrowthinup:before { + content: "\e6bd"; +} + +.uniui-arrow-down:before { + content: "\e6be"; +} + +.uniui-arrowthindown:before { + content: "\e6be"; +} + +.uniui-bottom:before { + content: "\e6b8"; +} + +.uniui-arrowdown:before { + content: "\e6b8"; +} + +.uniui-right:before { + content: "\e6b5"; +} + +.uniui-arrowright:before { + content: "\e6b5"; +} + +.uniui-top:before { + content: "\e6b6"; +} + +.uniui-arrowup:before { + content: "\e6b6"; +} + +.uniui-left:before { + content: "\e6b7"; +} + +.uniui-arrowleft:before { + content: "\e6b7"; +} + +.uniui-eye:before { + content: "\e651"; +} + +.uniui-eye-filled:before { + content: "\e66a"; +} + +.uniui-eye-slash:before { + content: "\e6b3"; +} + +.uniui-eye-slash-filled:before { + content: "\e6b4"; +} + +.uniui-info-filled:before { + content: "\e649"; +} + +.uniui-reload:before { + content: "\e6b2"; +} + +.uniui-micoff-filled:before { + content: "\e6b0"; +} + +.uniui-map-pin-ellipse:before { + content: "\e6ac"; +} + +.uniui-map-pin:before { + content: "\e6ad"; +} + +.uniui-location:before { + content: "\e6ae"; +} + +.uniui-starhalf:before { + content: "\e683"; +} + +.uniui-star:before { + content: "\e688"; +} + +.uniui-star-filled:before { + content: "\e68f"; +} + +.uniui-calendar:before { + content: "\e6a0"; +} + +.uniui-fire:before { + content: "\e6a1"; +} + +.uniui-medal:before { + content: "\e6a2"; +} + +.uniui-font:before { + content: "\e6a3"; +} + +.uniui-gift:before { + content: "\e6a4"; +} + +.uniui-link:before { + content: "\e6a5"; +} + +.uniui-notification:before { + content: "\e6a6"; +} + +.uniui-staff:before { + content: "\e6a7"; +} + +.uniui-vip:before { + content: "\e6a8"; +} + +.uniui-folder-add:before { + content: "\e6a9"; +} + +.uniui-tune:before { + content: "\e6aa"; +} + +.uniui-auth:before { + content: "\e6ab"; +} + +.uniui-person:before { + content: "\e699"; +} + +.uniui-email-filled:before { + content: "\e69a"; +} + +.uniui-phone-filled:before { + content: "\e69b"; +} + +.uniui-phone:before { + content: "\e69c"; +} + +.uniui-email:before { + content: "\e69e"; +} + +.uniui-personadd:before { + content: "\e69f"; +} + +.uniui-chatboxes-filled:before { + content: "\e692"; +} + +.uniui-contact:before { + content: "\e693"; +} + +.uniui-chatbubble-filled:before { + content: "\e694"; +} + +.uniui-contact-filled:before { + content: "\e695"; +} + +.uniui-chatboxes:before { + content: "\e696"; +} + +.uniui-chatbubble:before { + content: "\e697"; +} + +.uniui-upload-filled:before { + content: "\e68e"; +} + +.uniui-upload:before { + content: "\e690"; +} + +.uniui-weixin:before { + content: "\e691"; +} + +.uniui-compose:before { + content: "\e67f"; +} + +.uniui-qq:before { + content: "\e680"; +} + +.uniui-download-filled:before { + content: "\e681"; +} + +.uniui-pyq:before { + content: "\e682"; +} + +.uniui-sound:before { + content: "\e684"; +} + +.uniui-trash-filled:before { + content: "\e685"; +} + +.uniui-sound-filled:before { + content: "\e686"; +} + +.uniui-trash:before { + content: "\e687"; +} + +.uniui-videocam-filled:before { + content: "\e689"; +} + +.uniui-spinner-cycle:before { + content: "\e68a"; +} + +.uniui-weibo:before { + content: "\e68b"; +} + +.uniui-videocam:before { + content: "\e68c"; +} + +.uniui-download:before { + content: "\e68d"; +} + +.uniui-help:before { + content: "\e679"; +} + +.uniui-navigate-filled:before { + content: "\e67a"; +} + +.uniui-plusempty:before { + content: "\e67b"; +} + +.uniui-smallcircle:before { + content: "\e67c"; +} + +.uniui-minus-filled:before { + content: "\e67d"; +} + +.uniui-micoff:before { + content: "\e67e"; +} + +.uniui-closeempty:before { + content: "\e66c"; +} + +.uniui-clear:before { + content: "\e66d"; +} + +.uniui-navigate:before { + content: "\e66e"; +} + +.uniui-minus:before { + content: "\e66f"; +} + +.uniui-image:before { + content: "\e670"; +} + +.uniui-mic:before { + content: "\e671"; +} + +.uniui-paperplane:before { + content: "\e672"; +} + +.uniui-close:before { + content: "\e673"; +} + +.uniui-help-filled:before { + content: "\e674"; +} + +.uniui-paperplane-filled:before { + content: "\e675"; +} + +.uniui-plus:before { + content: "\e676"; +} + +.uniui-mic-filled:before { + content: "\e677"; +} + +.uniui-image-filled:before { + content: "\e678"; +} + +.uniui-locked-filled:before { + content: "\e668"; +} + +.uniui-info:before { + content: "\e669"; +} + +.uniui-locked:before { + content: "\e66b"; +} + +.uniui-camera-filled:before { + content: "\e658"; +} + +.uniui-chat-filled:before { + content: "\e659"; +} + +.uniui-camera:before { + content: "\e65a"; +} + +.uniui-circle:before { + content: "\e65b"; +} + +.uniui-checkmarkempty:before { + content: "\e65c"; +} + +.uniui-chat:before { + content: "\e65d"; +} + +.uniui-circle-filled:before { + content: "\e65e"; +} + +.uniui-flag:before { + content: "\e65f"; +} + +.uniui-flag-filled:before { + content: "\e660"; +} + +.uniui-gear-filled:before { + content: "\e661"; +} + +.uniui-home:before { + content: "\e662"; +} + +.uniui-home-filled:before { + content: "\e663"; +} + +.uniui-gear:before { + content: "\e664"; +} + +.uniui-smallcircle-filled:before { + content: "\e665"; +} + +.uniui-map-filled:before { + content: "\e666"; +} + +.uniui-map:before { + content: "\e667"; +} + +.uniui-refresh-filled:before { + content: "\e656"; +} + +.uniui-refresh:before { + content: "\e657"; +} + +.uniui-cloud-upload:before { + content: "\e645"; +} + +.uniui-cloud-download-filled:before { + content: "\e646"; +} + +.uniui-cloud-download:before { + content: "\e647"; +} + +.uniui-cloud-upload-filled:before { + content: "\e648"; +} + +.uniui-redo:before { + content: "\e64a"; +} + +.uniui-images-filled:before { + content: "\e64b"; +} + +.uniui-undo-filled:before { + content: "\e64c"; +} + +.uniui-more:before { + content: "\e64d"; +} + +.uniui-more-filled:before { + content: "\e64e"; +} + +.uniui-undo:before { + content: "\e64f"; +} + +.uniui-images:before { + content: "\e650"; +} + +.uniui-paperclip:before { + content: "\e652"; +} + +.uniui-settings:before { + content: "\e653"; +} + +.uniui-search:before { + content: "\e654"; +} + +.uniui-redo-filled:before { + content: "\e655"; +} + +.uniui-list:before { + content: "\e644"; +} + +.uniui-mail-open-filled:before { + content: "\e63a"; +} + +.uniui-hand-down-filled:before { + content: "\e63c"; +} + +.uniui-hand-down:before { + content: "\e63d"; +} + +.uniui-hand-up-filled:before { + content: "\e63e"; +} + +.uniui-hand-up:before { + content: "\e63f"; +} + +.uniui-heart-filled:before { + content: "\e641"; +} + +.uniui-mail-open:before { + content: "\e643"; +} + +.uniui-heart:before { + content: "\e639"; +} + +.uniui-loop:before { + content: "\e633"; +} + +.uniui-pulldown:before { + content: "\e632"; +} + +.uniui-scan:before { + content: "\e62a"; +} + +.uniui-bars:before { + content: "\e627"; +} + +.uniui-cart-filled:before { + content: "\e629"; +} + +.uniui-checkbox:before { + content: "\e62b"; +} + +.uniui-checkbox-filled:before { + content: "\e62c"; +} + +.uniui-shop:before { + content: "\e62f"; +} + +.uniui-headphones:before { + content: "\e630"; +} + +.uniui-cart:before { + content: "\e631"; +} diff --git a/uni_modules/uni-icons/components/uni-icons/uniicons.ttf b/uni_modules/uni-icons/components/uni-icons/uniicons.ttf new file mode 100644 index 0000000000000000000000000000000000000000..835f33bc9411461b8b9046b3fec742e921d6ce3a GIT binary patch literal 35760 zcmeFacbp?vl{Q?rN>WLsSXIigCAC7gI!S6tox^m`be^1}CwPJ>yxZ{uSzi{WC_=LI+*Wx!<-H!v})21fuKMZQ#fB2Fs zuEGwU_ZyDmuR3&e_s&PS@Be}0T=(JF$l;w=9Als0-iQ4lE^0cm^YDeWhnK#G<4!$@ z>-QZydhsP6Kl0Pv9Cw|EbP-?YO$@C;`+ zuKnR1zxV)MXnddfv56Dn_-W<%#_jZ^d%1f!hyI(6O8C!lXY}93nl=3f9^gzbYS03Jm0vJ;T)Z1IKntfUtypB#zx`e6wG3 zC5AhB&Me^QdH${3yL1otSUp#NN^cKN_yKnkm%XqxczWUgrT^Oo|6lL`SPy&+DZ_DX z1{?B^82rf|!cpSXHhg1*;kZecHy+MI*MqCu>g9T0eYieaf9edzAC9!tJL|pm0UQ~l zBQN;JaG!_sb8)VT%i=%By_I_#_ZIFh?(N(=xVtf?-^|^~y@`7RcMEqbcN=#*_eSmx z?)BVjxU0EqFm9T;Q`~9pTJAdTdhWH{>+qBtxEr~fxSP3Gb60T(xkKDx?g)33JH{R7 zPH-1465x0fg%5CGeb33>TxSiZCZa24wyO7(&Q z>$wfwMs5?gnVaOMxM^;NYvpFSIc_<(f-7(s&u0CxL#u8VbF$klItIryQ@x|5W z48lm`>dOtnnB(dz48rK+>MISxIOOW948n-y>Z=XH*yQSK48kbo>T3axcUVKK~8Y>od!W-aP?gVL3VKU-3CF5aP>U~L7s5+3k`x~;p%%0f{fwn z`wW7#;p+Phg52Ti2MmG);_4R}1X;w@scs-hC9Y0&13^AJNK#+l4o$3aH zH00`3HxT3^SEssxAR)Or)eQt$$+z7tkWDxWPSHIIBXb!IaW`m$ZxcXZRf;QpmZ#4*d zg{!~KAZQq_ewRVeHC+Ae20`m^^>-Kq{lnGoHVB%CtKVY~bP`v;*C1#ou700E&{JIf zeuJQ~xcWN{g6`t#?=lEljH|!fAm}r${tpI0vvKtY41$j1>hCcK+K#I~Xb|)sSAVZT z(12Y1eFi}na`pEc1g*%`|Ir}mN3Q+>gPp}tAE%avLosrF^GJG z`bQ0dZsqD9GYDFitAE@e=v%J-34@?{x%wv!f)3{DpE3yAn5#cz5cD!v|Fl8S&|Lj9 z20>SI_0JjvtVjlpxwFpV+N5QQ~$g{(D+>a3kE^= zbM-G81S^26f5{-&16=*f2Ej7m>R&MkHUd}wszKz<)E_qpb^}-cnn7g6)t@j3wggxI zxp1QBm2=klxXa|a&TVx+;Qp=WwVt{>D}O~9QXW)O>O0h5db_-@^8Ud$^pPT-1=NS-v_4k2r|_kM*0!vaW9xyNll~`AaKH zuPQxR4wv6t{%QC2?wh**v$DGKU?rS_5?F|crGafkiL7dNk-%Y_E4VmkSn6>Hb;SUukEx3l0# zej=BS$yT%Av8Uc*J`xpdRw>aQ5n{34Scli{%@0hjo|#!%t;CXMOO1~vM@By$$wu(0 z7+*JsbCF0c%-{dHFL+pQI~s3&zjaOf89{d%!`6o3fsCO(`6

PqiNa$~E4XJ#a8s%?nsx`&SiQ7Wz{CE9c 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 literal 0 HcmV?d00001 diff --git a/uni_modules/uni-icons/package.json b/uni_modules/uni-icons/package.json new file mode 100644 index 0000000..d1c4e77 --- /dev/null +++ b/uni_modules/uni-icons/package.json @@ -0,0 +1,86 @@ +{ + "id": "uni-icons", + "displayName": "uni-icons 图标", + "version": "1.3.5", + "description": "图标组件,用于展示移动端常见的图标,可自定义颜色、大小。", + "keywords": [ + "uni-ui", + "uniui", + "icon", + "图标" +], + "repository": "https://github.com/dcloudio/uni-ui", + "engines": { + "HBuilderX": "^3.2.14" + }, + "directories": { + "example": "../../temps/example_temps" + }, + "dcloudext": { + "category": [ + "前端组件", + "通用组件" + ], + "sale": { + "regular": { + "price": "0.00" + }, + "sourcecode": { + "price": "0.00" + } + }, + "contact": { + "qq": "" + }, + "declaration": { + "ads": "无", + "data": "无", + "permissions": "无" + }, + "npmurl": "https://www.npmjs.com/package/@dcloudio/uni-ui" + }, + "uni_modules": { + "dependencies": ["uni-scss"], + "encrypt": [], + "platforms": { + "cloud": { + "tcb": "y", + "aliyun": "y" + }, + "client": { + "App": { + "app-vue": "y", + "app-nvue": "y" + }, + "H5-mobile": { + "Safari": "y", + "Android Browser": "y", + "微信浏览器(Android)": "y", + "QQ浏览器(Android)": "y" + }, + "H5-pc": { + "Chrome": "y", + "IE": "y", + "Edge": "y", + "Firefox": "y", + "Safari": "y" + }, + "小程序": { + "微信": "y", + "阿里": "y", + "百度": "y", + "字节跳动": "y", + "QQ": "y" + }, + "快应用": { + "华为": "u", + "联盟": "u" + }, + "Vue": { + "vue2": "y", + "vue3": "y" + } + } + } + } +} \ No newline at end of file diff --git a/uni_modules/uni-icons/readme.md b/uni_modules/uni-icons/readme.md new file mode 100644 index 0000000..86234ba --- /dev/null +++ b/uni_modules/uni-icons/readme.md @@ -0,0 +1,8 @@ +## Icons 图标 +> **组件名:uni-icons** +> 代码块: `uIcons` + +用于展示 icons 图标 。 + +### [查看文档](https://uniapp.dcloud.io/component/uniui/uni-icons) +#### 如使用过程中有任何问题,或者您对uni-ui有一些好的建议,欢迎加入 uni-ui 交流群:871950839 diff --git a/uni_modules/uni-indexed-list/changelog.md b/uni_modules/uni-indexed-list/changelog.md new file mode 100644 index 0000000..08fa71c --- /dev/null +++ b/uni_modules/uni-indexed-list/changelog.md @@ -0,0 +1,17 @@ +## 1.2.1(2021-11-22) +- 修复 vue3中某些scss变量无法找到的问题 +## 1.2.0(2021-11-19) +- 优化 组件UI,并提供设计资源,详见:[https://uniapp.dcloud.io/component/uniui/resource](https://uniapp.dcloud.io/component/uniui/resource) +- 文档迁移,详见:[https://uniapp.dcloud.io/component/uniui/uni-indexed-list](https://uniapp.dcloud.io/component/uniui/uni-indexed-list) +## 1.1.0(2021-07-30) +- 组件兼容 vue3,如何创建vue3项目,详见 [uni-app 项目支持 vue3 介绍](https://ask.dcloud.net.cn/article/37834) +## 1.0.11(2021-05-12) +- 新增 组件示例地址 +## 1.0.10(2021-04-21) +- 优化 添加依赖 uni-icons, 导入后自动下载依赖 +## 1.0.9(2021-02-05) +- 优化 组件引用关系,通过uni_modules引用组件 + +## 1.0.8(2021-02-05) +- 调整为uni_modules目录规范 +- 新增 支持 PC 端 diff --git a/uni_modules/uni-indexed-list/components/uni-indexed-list/uni-indexed-list-item.vue b/uni_modules/uni-indexed-list/components/uni-indexed-list/uni-indexed-list-item.vue new file mode 100644 index 0000000..19284bd --- /dev/null +++ b/uni_modules/uni-indexed-list/components/uni-indexed-list/uni-indexed-list-item.vue @@ -0,0 +1,144 @@ + + + + + diff --git a/uni_modules/uni-indexed-list/components/uni-indexed-list/uni-indexed-list.vue b/uni_modules/uni-indexed-list/components/uni-indexed-list/uni-indexed-list.vue new file mode 100644 index 0000000..ee3a7ec --- /dev/null +++ b/uni_modules/uni-indexed-list/components/uni-indexed-list/uni-indexed-list.vue @@ -0,0 +1,367 @@ + + + diff --git a/uni_modules/uni-indexed-list/package.json b/uni_modules/uni-indexed-list/package.json new file mode 100644 index 0000000..125c0e7 --- /dev/null +++ b/uni_modules/uni-indexed-list/package.json @@ -0,0 +1,89 @@ +{ + "id": "uni-indexed-list", + "displayName": "uni-indexed-list 索引列表", + "version": "1.2.1", + "description": "索引列表组件,右侧带索引的列表,方便快速定位到具体内容,通常用于城市/机场选择等场景", + "keywords": [ + "uni-ui", + "索引列表", + "索引", + "列表" +], + "repository": "https://github.com/dcloudio/uni-ui", + "engines": { + "HBuilderX": "" + }, + "directories": { + "example": "../../temps/example_temps" + }, + "dcloudext": { + "category": [ + "前端组件", + "通用组件" + ], + "sale": { + "regular": { + "price": "0.00" + }, + "sourcecode": { + "price": "0.00" + } + }, + "contact": { + "qq": "" + }, + "declaration": { + "ads": "无", + "data": "无", + "permissions": "无" + }, + "npmurl": "https://www.npmjs.com/package/@dcloudio/uni-ui" + }, + "uni_modules": { + "dependencies": [ + "uni-scss", + "uni-icons" + ], + "encrypt": [], + "platforms": { + "cloud": { + "tcb": "y", + "aliyun": "y" + }, + "client": { + "App": { + "app-vue": "y", + "app-nvue": "y" + }, + "H5-mobile": { + "Safari": "y", + "Android Browser": "y", + "微信浏览器(Android)": "y", + "QQ浏览器(Android)": "y" + }, + "H5-pc": { + "Chrome": "y", + "IE": "y", + "Edge": "y", + "Firefox": "y", + "Safari": "y" + }, + "小程序": { + "微信": "y", + "阿里": "y", + "百度": "y", + "字节跳动": "y", + "QQ": "y" + }, + "快应用": { + "华为": "u", + "联盟": "u" + }, + "Vue": { + "vue2": "y", + "vue3": "y" + } + } + } + } +} diff --git a/uni_modules/uni-indexed-list/readme.md b/uni_modules/uni-indexed-list/readme.md new file mode 100644 index 0000000..44ad84b --- /dev/null +++ b/uni_modules/uni-indexed-list/readme.md @@ -0,0 +1,11 @@ + + +## IndexedList 索引列表 +> **组件名:uni-indexed-list** +> 代码块: `uIndexedList` + + +用于展示索引列表。 + +### [查看文档](https://uniapp.dcloud.io/component/uniui/uni-indexed-list) +#### 如使用过程中有任何问题,或者您对uni-ui有一些好的建议,欢迎加入 uni-ui 交流群:871950839 diff --git a/uni_modules/uni-link/changelog.md b/uni_modules/uni-link/changelog.md new file mode 100644 index 0000000..2cfbf59 --- /dev/null +++ b/uni_modules/uni-link/changelog.md @@ -0,0 +1,17 @@ +## 1.0.0(2021-11-19) +- 优化 组件UI,并提供设计资源,详见:[https://uniapp.dcloud.io/component/uniui/resource](https://uniapp.dcloud.io/component/uniui/resource) +- 文档迁移,详见:[https://uniapp.dcloud.io/component/uniui/uni-link](https://uniapp.dcloud.io/component/uniui/uni-link) +## 1.1.7(2021-11-08) +## 0.0.7(2021-09-03) +- 修复 在 nvue 下不显示的 bug +## 0.0.6(2021-07-30) +- 新增 支持自定义插槽 +## 0.0.5(2021-06-21) +- 新增 download 属性,H5平台下载文件名 +## 0.0.4(2021-05-12) +- 新增 组件示例地址 +## 0.0.3(2021-03-09) +- 新增 href 属性支持 tel:|mailto: + +## 0.0.2(2021-02-05) +- 调整为uni_modules目录规范 diff --git a/uni_modules/uni-link/components/uni-link/uni-link.vue b/uni_modules/uni-link/components/uni-link/uni-link.vue new file mode 100644 index 0000000..27c5468 --- /dev/null +++ b/uni_modules/uni-link/components/uni-link/uni-link.vue @@ -0,0 +1,128 @@ + + + + + diff --git a/uni_modules/uni-link/package.json b/uni_modules/uni-link/package.json new file mode 100644 index 0000000..77b1986 --- /dev/null +++ b/uni_modules/uni-link/package.json @@ -0,0 +1,87 @@ +{ + "id": "uni-link", + "displayName": "uni-link 超链接", + "version": "1.0.0", + "description": "uni-link是一个外部网页超链接组件,在小程序内复制url,在app内打开外部浏览器,在h5端打", + "keywords": [ + "uni-ui", + "uniui", + "link", + "超链接", + "" +], + "repository": "https://github.com/dcloudio/uni-ui", + "engines": { + "HBuilderX": "" + }, + "directories": { + "example": "../../temps/example_temps" + }, + "dcloudext": { + "category": [ + "前端组件", + "通用组件" + ], + "sale": { + "regular": { + "price": "0.00" + }, + "sourcecode": { + "price": "0.00" + } + }, + "contact": { + "qq": "" + }, + "declaration": { + "ads": "无", + "data": "无", + "permissions": "无" + }, + "npmurl": "https://www.npmjs.com/package/@dcloudio/uni-ui" + }, + "uni_modules": { + "dependencies": ["uni-scss"], + "encrypt": [], + "platforms": { + "cloud": { + "tcb": "y", + "aliyun": "y" + }, + "client": { + "App": { + "app-vue": "y", + "app-nvue": "y" + }, + "H5-mobile": { + "Safari": "y", + "Android Browser": "y", + "微信浏览器(Android)": "y", + "QQ浏览器(Android)": "y" + }, + "H5-pc": { + "Chrome": "y", + "IE": "y", + "Edge": "y", + "Firefox": "y", + "Safari": "y" + }, + "小程序": { + "微信": "y", + "阿里": "y", + "百度": "y", + "字节跳动": "y", + "QQ": "y" + }, + "快应用": { + "华为": "y", + "联盟": "y" + }, + "Vue": { + "vue2": "y", + "vue3": "y" + } + } + } + } +} \ No newline at end of file diff --git a/uni_modules/uni-link/readme.md b/uni_modules/uni-link/readme.md new file mode 100644 index 0000000..7f09e94 --- /dev/null +++ b/uni_modules/uni-link/readme.md @@ -0,0 +1,11 @@ + + +## Link 链接 +> **组件名:uni-link** +> 代码块: `uLink` + + +uni-link是一个外部网页超链接组件,在小程序内复制url,在app内打开外部浏览器,在h5端打开新网页。 + +### [查看文档](https://uniapp.dcloud.io/component/uniui/uni-link) +#### 如使用过程中有任何问题,或者您对uni-ui有一些好的建议,欢迎加入 uni-ui 交流群:871950839 \ No newline at end of file diff --git a/uni_modules/uni-list/changelog.md b/uni_modules/uni-list/changelog.md new file mode 100644 index 0000000..6aa6e4e --- /dev/null +++ b/uni_modules/uni-list/changelog.md @@ -0,0 +1,20 @@ +## 1.2.1(2022-03-30) +- 删除无用文件 +## 1.2.0(2021-11-23) +- 优化 组件UI,并提供设计资源,详见:[https://uniapp.dcloud.io/component/uniui/resource](https://uniapp.dcloud.io/component/uniui/resource) +- 文档迁移,详见:[https://uniapp.dcloud.io/component/uniui/uni-list](https://uniapp.dcloud.io/component/uniui/uni-list) +## 1.1.3(2021-08-30) +- 修复 在vue3中to属性在发行应用的时候报错的bug +## 1.1.2(2021-07-30) +- 优化 vue3下事件警告的问题 +## 1.1.1(2021-07-21) +- 修复 与其他组件嵌套使用时,点击失效的Bug +## 1.1.0(2021-07-13) +- 组件兼容 vue3,如何创建vue3项目,详见 [uni-app 项目支持 vue3 介绍](https://ask.dcloud.net.cn/article/37834) +## 1.0.17(2021-05-12) +- 新增 组件示例地址 +## 1.0.16(2021-02-05) +- 优化 组件引用关系,通过uni_modules引用组件 +## 1.0.15(2021-02-05) +- 调整为uni_modules目录规范 +- 修复 uni-list-chat 角标显示不正常的问题 diff --git a/uni_modules/uni-list/components/uni-list-ad/uni-list-ad.vue b/uni_modules/uni-list/components/uni-list-ad/uni-list-ad.vue new file mode 100644 index 0000000..b9349c2 --- /dev/null +++ b/uni_modules/uni-list/components/uni-list-ad/uni-list-ad.vue @@ -0,0 +1,107 @@ + + + + + diff --git a/uni_modules/uni-list/components/uni-list-chat/uni-list-chat.scss b/uni_modules/uni-list/components/uni-list-chat/uni-list-chat.scss new file mode 100644 index 0000000..311f8d9 --- /dev/null +++ b/uni_modules/uni-list/components/uni-list-chat/uni-list-chat.scss @@ -0,0 +1,58 @@ +/** + * 这里是 uni-list 组件内置的常用样式变量 + * 如果需要覆盖样式,这里提供了基本的组件样式变量,您可以尝试修改这里的变量,去完成样式替换,而不用去修改源码 + * + */ + +// 背景色 +$background-color : #fff; +// 分割线颜色 +$divide-line-color : #e5e5e5; + +// 默认头像大小,如需要修改此值,注意同步修改 js 中的值 const avatarWidth = xx ,目前只支持方形头像 +// nvue 页面不支持修改头像大小 +$avatar-width : 45px ; + +// 头像边框 +$avatar-border-radius: 5px; +$avatar-border-color: #eee; +$avatar-border-width: 1px; + +// 标题文字样式 +$title-size : 16px; +$title-color : #3b4144; +$title-weight : normal; + +// 描述文字样式 +$note-size : 12px; +$note-color : #999; +$note-weight : normal; + +// 右侧额外内容默认样式 +$right-text-size : 12px; +$right-text-color : #999; +$right-text-weight : normal; + +// 角标样式 +// nvue 页面不支持修改圆点位置以及大小 +// 角标在左侧时,角标的位置,默认为 0 ,负数左/下移动,正数右/上移动 +$badge-left: 0px; +$badge-top: 0px; + +// 显示圆点时,圆点大小 +$dot-width: 10px; +$dot-height: 10px; + +// 显示角标时,角标大小和字体大小 +$badge-size : 18px; +$badge-font : 12px; +// 显示角标时,角标前景色 +$badge-color : #fff; +// 显示角标时,角标背景色 +$badge-background-color : #ff5a5f; +// 显示角标时,角标左右间距 +$badge-space : 6px; + +// 状态样式 +// 选中颜色 +$hover : #f5f5f5; diff --git a/uni_modules/uni-list/components/uni-list-chat/uni-list-chat.vue b/uni_modules/uni-list/components/uni-list-chat/uni-list-chat.vue new file mode 100644 index 0000000..2b31008 --- /dev/null +++ b/uni_modules/uni-list/components/uni-list-chat/uni-list-chat.vue @@ -0,0 +1,538 @@ + + + + + diff --git a/uni_modules/uni-list/components/uni-list-item/uni-list-item.vue b/uni_modules/uni-list/components/uni-list-item/uni-list-item.vue new file mode 100644 index 0000000..2c7d9ea --- /dev/null +++ b/uni_modules/uni-list/components/uni-list-item/uni-list-item.vue @@ -0,0 +1,454 @@ + + + + + diff --git a/uni_modules/uni-list/components/uni-list/uni-list.vue b/uni_modules/uni-list/components/uni-list/uni-list.vue new file mode 100644 index 0000000..ecda676 --- /dev/null +++ b/uni_modules/uni-list/components/uni-list/uni-list.vue @@ -0,0 +1,108 @@ + + + + diff --git a/uni_modules/uni-list/components/uni-list/uni-refresh.vue b/uni_modules/uni-list/components/uni-list/uni-refresh.vue new file mode 100644 index 0000000..3b4c5a2 --- /dev/null +++ b/uni_modules/uni-list/components/uni-list/uni-refresh.vue @@ -0,0 +1,65 @@ + + + + + diff --git a/uni_modules/uni-list/components/uni-list/uni-refresh.wxs b/uni_modules/uni-list/components/uni-list/uni-refresh.wxs new file mode 100644 index 0000000..818a6b7 --- /dev/null +++ b/uni_modules/uni-list/components/uni-list/uni-refresh.wxs @@ -0,0 +1,87 @@ +var pullDown = { + threshold: 95, + maxHeight: 200, + callRefresh: 'onrefresh', + callPullingDown: 'onpullingdown', + refreshSelector: '.uni-refresh' +}; + +function ready(newValue, oldValue, ownerInstance, instance) { + var state = instance.getState() + state.canPullDown = newValue; + // console.log(newValue); +} + +function touchStart(e, instance) { + var state = instance.getState(); + state.refreshInstance = instance.selectComponent(pullDown.refreshSelector); + state.canPullDown = (state.refreshInstance != null && state.refreshInstance != undefined); + if (!state.canPullDown) { + return + } + + // console.log("touchStart"); + + state.height = 0; + state.touchStartY = e.touches[0].pageY || e.changedTouches[0].pageY; + state.refreshInstance.setStyle({ + 'height': 0 + }); + state.refreshInstance.callMethod("onchange", true); +} + +function touchMove(e, ownerInstance) { + var instance = e.instance; + var state = instance.getState(); + if (!state.canPullDown) { + return + } + + var oldHeight = state.height; + var endY = e.touches[0].pageY || e.changedTouches[0].pageY; + var height = endY - state.touchStartY; + if (height > pullDown.maxHeight) { + return; + } + + var refreshInstance = state.refreshInstance; + refreshInstance.setStyle({ + 'height': height + 'px' + }); + + height = height < pullDown.maxHeight ? height : pullDown.maxHeight; + state.height = height; + refreshInstance.callMethod(pullDown.callPullingDown, { + height: height + }); +} + +function touchEnd(e, ownerInstance) { + var state = e.instance.getState(); + if (!state.canPullDown) { + return + } + + state.refreshInstance.callMethod("onchange", false); + + var refreshInstance = state.refreshInstance; + if (state.height > pullDown.threshold) { + refreshInstance.callMethod(pullDown.callRefresh); + return; + } + + refreshInstance.setStyle({ + 'height': 0 + }); +} + +function propObserver(newValue, oldValue, instance) { + pullDown = newValue; +} + +module.exports = { + touchmove: touchMove, + touchstart: touchStart, + touchend: touchEnd, + propObserver: propObserver +} diff --git a/uni_modules/uni-list/package.json b/uni_modules/uni-list/package.json new file mode 100644 index 0000000..66e8bef --- /dev/null +++ b/uni_modules/uni-list/package.json @@ -0,0 +1,91 @@ +{ + "id": "uni-list", + "displayName": "uni-list 列表", + "version": "1.2.1", + "description": "List 组件 ,帮助使用者快速构建列表。", + "keywords": [ + "", + "uni-ui", + "uniui", + "列表", + "", + "list" +], + "repository": "https://github.com/dcloudio/uni-ui", + "engines": { + "HBuilderX": "" + }, + "directories": { + "example": "../../temps/example_temps" + }, + "dcloudext": { + "category": [ + "前端组件", + "通用组件" + ], + "sale": { + "regular": { + "price": "0.00" + }, + "sourcecode": { + "price": "0.00" + } + }, + "contact": { + "qq": "" + }, + "declaration": { + "ads": "无", + "data": "无", + "permissions": "无" + }, + "npmurl": "https://www.npmjs.com/package/@dcloudio/uni-ui" + }, + "uni_modules": { + "dependencies": [ + "uni-badge", + "uni-icons" + ], + "encrypt": [], + "platforms": { + "cloud": { + "tcb": "y", + "aliyun": "y" + }, + "client": { + "App": { + "app-vue": "y", + "app-nvue": "y" + }, + "H5-mobile": { + "Safari": "y", + "Android Browser": "y", + "微信浏览器(Android)": "y", + "QQ浏览器(Android)": "y" + }, + "H5-pc": { + "Chrome": "y", + "IE": "y", + "Edge": "y", + "Firefox": "y", + "Safari": "y" + }, + "小程序": { + "微信": "y", + "阿里": "y", + "百度": "y", + "字节跳动": "y", + "QQ": "y" + }, + "快应用": { + "华为": "u", + "联盟": "u" + }, + "Vue": { + "vue2": "y", + "vue3": "y" + } + } + } + } +} \ No newline at end of file diff --git a/uni_modules/uni-list/readme.md b/uni_modules/uni-list/readme.md new file mode 100644 index 0000000..32c2865 --- /dev/null +++ b/uni_modules/uni-list/readme.md @@ -0,0 +1,346 @@ +## List 列表 +> **组件名:uni-list** +> 代码块: `uList`、`uListItem` +> 关联组件:`uni-list-item`、`uni-badge`、`uni-icons`、`uni-list-chat`、`uni-list-ad` + + +List 列表组件,包含基本列表样式、可扩展插槽机制、长列表性能优化、多端兼容。 + +在vue页面里,它默认使用页面级滚动。在app-nvue页面里,它默认使用原生list组件滚动。这样的长列表,在滚动出屏幕外后,系统会回收不可见区域的渲染内存资源,不会造成滚动越长手机越卡的问题。 + +uni-list组件是父容器,里面的核心是uni-list-item子组件,它代表列表中的一个可重复行,子组件可以无限循环。 + +uni-list-item有很多风格,uni-list-item组件通过内置的属性,满足一些常用的场景。当内置属性不满足需求时,可以通过扩展插槽来自定义列表内容。 + +内置属性可以覆盖的场景包括:导航列表、设置列表、小图标列表、通信录列表、聊天记录列表。 + +涉及很多大图或丰富内容的列表,比如类今日头条的新闻列表、类淘宝的电商列表,需要通过扩展插槽实现。 + +下文均有样例给出。 + +uni-list不包含下拉刷新和上拉翻页。上拉翻页另见组件:[uni-load-more](https://ext.dcloud.net.cn/plugin?id=29) + + +### 安装方式 + +本组件符合[easycom](https://uniapp.dcloud.io/collocation/pages?id=easycom)规范,`HBuilderX 2.5.5`起,只需将本组件导入项目,在页面`template`中即可直接使用,无需在页面中`import`和注册`components`。 + +如需通过`npm`方式使用`uni-ui`组件,另见文档:[https://ext.dcloud.net.cn/plugin?id=55](https://ext.dcloud.net.cn/plugin?id=55) + +> **注意事项** +> 为了避免错误使用,给大家带来不好的开发体验,请在使用组件前仔细阅读下面的注意事项,可以帮你避免一些错误。 +> - 组件需要依赖 `sass` 插件 ,请自行手动安装 +> - 组件内部依赖 `'uni-icons'` 、`uni-badge` 组件 +> - `uni-list` 和 `uni-list-item` 需要配套使用,暂不支持单独使用 `uni-list-item` +> - 只有开启点击反馈后,会有点击选中效果 +> - 使用插槽时,可以完全自定义内容 +> - note 、rightText 属性暂时没做限制,不支持文字溢出隐藏,使用时应该控制长度显示或通过默认插槽自行扩展 +> - 支付宝小程序平台需要在支付宝小程序开发者工具里开启 component2 编译模式,开启方式: 详情 --> 项目配置 --> 启用 component2 编译 +> - 如果需要修改 `switch`、`badge` 样式,请使用插槽自定义 +> - 在 `HBuilderX` 低版本中,可能会出现组件显示 `undefined` 的问题,请升级最新的 `HBuilderX` 或者 `cli` +> - 如使用过程中有任何问题,或者您对uni-ui有一些好的建议,欢迎加入 uni-ui 交流群:871950839 + + +### 基本用法 + +- 设置 `title` 属性,可以显示列表标题 +- 设置 `disabled` 属性,可以禁用当前项 + +```html + + + + + +``` + +### 多行内容显示 + +- 设置 `note` 属性 ,可以在第二行显示描述文本信息 + +```html + + + + + +``` + +### 右侧显示角标、switch + +- 设置 `show-badge` 属性 ,可以显示角标内容 +- 设置 `show-switch` 属性,可以显示 switch 开关 + +```html + + + + + +``` + +### 左侧显示略缩图、图标 + +- 设置 `thumb` 属性 ,可以在列表左侧显示略缩图 +- 设置 `show-extra-icon` 属性,并指定 `extra-icon` 可以在左侧显示图标 + +```html + + + + +``` + +### 开启点击反馈和右侧箭头 +- 设置 `clickable` 为 `true` ,则表示这是一个可点击的列表,会默认给一个点击效果,并可以监听 `click` 事件 +- 设置 `link` 属性,会自动开启点击反馈,并给列表右侧添加一个箭头 +- 设置 `to` 属性,可以跳转页面,`link` 的值表示跳转方式,如果不指定,默认为 `navigateTo` + +```html + + + + + + + +``` + + +### 聊天列表示例 +- 设置 `clickable` 为 `true` ,则表示这是一个可点击的列表,会默认给一个点击效果,并可以监听 `click` 事件 +- 设置 `link` 属性,会自动开启点击反馈,`link` 的值表示跳转方式,如果不指定,默认为 `navigateTo` +- 设置 `to` 属性,可以跳转页面 +- `time` 属性,通常会设置成时间显示,但是这个属性不仅仅可以设置时间,你可以传入任何文本,注意文本长度可能会影响显示 +- `avatar` 和 `avatarList` 属性同时只会有一个生效,同时设置的话,`avatarList` 属性的长度大于1 ,`avatar` 属性将失效 +- 可以通过默认插槽自定义列表右侧内容 + +```html + + + + + + + + + + + + + + + + + 刚刚 + + + + + + + +``` + +```javascript + +export default { + components: {}, + data() { + return { + avatarList: [{ + url: 'https://vkceyugu.cdn.bspapp.com/VKCEYUGU-dc-site/460d46d0-4fcc-11eb-8ff1-d5dcf8779628.png' + }, { + url: 'https://vkceyugu.cdn.bspapp.com/VKCEYUGU-dc-site/460d46d0-4fcc-11eb-8ff1-d5dcf8779628.png' + }, { + url: 'https://vkceyugu.cdn.bspapp.com/VKCEYUGU-dc-site/460d46d0-4fcc-11eb-8ff1-d5dcf8779628.png' + }] + } + } +} + +``` + + +```css + +.chat-custom-right { + flex: 1; + /* #ifndef APP-NVUE */ + display: flex; + /* #endif */ + flex-direction: column; + justify-content: space-between; + align-items: flex-end; +} + +.chat-custom-text { + font-size: 12px; + color: #999; +} + +``` + +## API + +### List Props + +属性名 |类型 |默认值 | 说明 +:-: |:-: |:-: | :-: +border |Boolean |true | 是否显示边框 + + +### ListItem Props + +属性名 |类型 |默认值 | 说明 +:-: |:-: |:-: | :-: +title |String |- | 标题 +note |String |- | 描述 +ellipsis |Number |0 | title 是否溢出隐藏,可选值,0:默认; 1:显示一行; 2:显示两行;【nvue 暂不支持】 +thumb |String |- | 左侧缩略图,若thumb有值,则不会显示扩展图标 +thumbSize |String |medium | 略缩图尺寸,可选值,lg:大图; medium:一般; sm:小图; +showBadge |Boolean |false | 是否显示数字角标 +badgeText |String |- | 数字角标内容 +badgeType |String |- | 数字角标类型,参考[uni-icons](https://ext.dcloud.net.cn/plugin?id=21) +badgeStyle |Object |- | 数字角标样式,使用uni-badge的custom-style参数 +rightText |String |- | 右侧文字内容 +disabled |Boolean |false | 是否禁用 +showArrow |Boolean |true | 是否显示箭头图标 +link |String |navigateTo | 新页面跳转方式,可选值见下表 +to |String |- | 新页面跳转地址,如填写此属性,click 会返回页面是否跳转成功 +clickable |Boolean |false | 是否开启点击反馈 +showSwitch |Boolean |false | 是否显示Switch +switchChecked |Boolean |false | Switch是否被选中 +showExtraIcon |Boolean |false | 左侧是否显示扩展图标 +extraIcon |Object |- | 扩展图标参数,格式为 ``{color: '#4cd964',size: '22',type: 'spinner'}``,参考 [uni-icons](https://ext.dcloud.net.cn/plugin?id=28) +direction | String |row | 排版方向,可选值,row:水平排列; column:垂直排列; 3个插槽是水平排还是垂直排,也受此属性控制 + + +#### Link Options + +属性名 | 说明 +:-: | :-: +navigateTo | 同 uni.navigateTo() +redirectTo | 同 uni.reLaunch() +reLaunch | 同 uni.reLaunch() +switchTab | 同 uni.switchTab() + +### ListItem Events + +事件称名 |说明 |返回参数 +:-: |:-: |:-: +click |点击 uniListItem 触发事件,需开启点击反馈 |- +switchChange |点击切换 Switch 时触发,需显示 switch |e={value:checked} + + + +### ListItem Slots + +名称 | 说明 +:-: | :-: +header | 左/上内容插槽,可完全自定义默认显示 +body | 中间内容插槽,可完全自定义中间内容 +footer | 右/下内容插槽,可完全自定义右侧内容 + + +> **通过插槽扩展** +> 需要注意的是当使用插槽时,内置样式将会失效,只保留排版样式,此时的样式需要开发者自己实现 +> 如果 `uni-list-item` 组件内置属性样式无法满足需求,可以使用插槽来自定义uni-list-item里的内容。 +> uni-list-item提供了3个可扩展的插槽:`header`、`body`、`footer` +> - 当 `direction` 属性为 `row` 时表示水平排列,此时 `header` 表示列表的左边部分,`body` 表示列表的中间部分,`footer` 表示列表的右边部分 +> - 当 `direction` 属性为 `column` 时表示垂直排列,此时 `header` 表示列表的上边部分,`body` 表示列表的中间部分,`footer` 表示列表的下边部分 +> 开发者可以只用1个插槽,也可以3个一起使用。在插槽中可自主编写view标签,实现自己所需的效果。 + + +**示例** + +```html + + + + + + + + + 自定义插槽 + + + + +``` + + + + + +### ListItemChat Props + +属性名 |类型 |默认值 | 说明 +:-: |:-: |:-: | :-: +title |String |- | 标题 +note |String |- | 描述 +clickable |Boolean |false | 是否开启点击反馈 +badgeText |String |- | 数字角标内容,设置为 `dot` 将显示圆点 +badgePositon |String |right | 角标位置 +link |String |navigateTo | 是否展示右侧箭头并开启点击反馈,可选值见下表 +clickable |Boolean |false | 是否开启点击反馈 +to |String |- | 跳转页面地址,如填写此属性,click 会返回页面是否跳转成功 +time |String |- | 右侧时间显示 +avatarCircle |Boolean |false | 是否显示圆形头像 +avatar |String |- | 头像地址,avatarCircle 不填时生效 +avatarList |Array |- | 头像组,格式为 [{url:''}] + +#### Link Options + +属性名 | 说明 +:-: | :-: +navigateTo | 同 uni.navigateTo() +redirectTo | 同 uni.reLaunch() +reLaunch | 同 uni.reLaunch() +switchTab | 同 uni.switchTab() + +### ListItemChat Slots + +名称 | 说明 +:- | :- +default | 自定义列表右侧内容(包括时间和角标显示) + +### ListItemChat Events +事件称名 | 说明 | 返回参数 +:-: | :-: | :-: +@click | 点击 uniListChat 触发事件 | {data:{}} ,如有 to 属性,会返回页面跳转信息 + + + + + + +## 基于uni-list扩展的页面模板 + +通过扩展插槽,可实现多种常见样式的列表 + +**新闻列表类** + +1. 云端一体混合布局:[https://ext.dcloud.net.cn/plugin?id=2546](https://ext.dcloud.net.cn/plugin?id=2546) +2. 云端一体垂直布局,大图模式:[https://ext.dcloud.net.cn/plugin?id=2583](https://ext.dcloud.net.cn/plugin?id=2583) +3. 云端一体垂直布局,多行图文混排:[https://ext.dcloud.net.cn/plugin?id=2584](https://ext.dcloud.net.cn/plugin?id=2584) +4. 云端一体垂直布局,多图模式:[https://ext.dcloud.net.cn/plugin?id=2585](https://ext.dcloud.net.cn/plugin?id=2585) +5. 云端一体水平布局,左图右文:[https://ext.dcloud.net.cn/plugin?id=2586](https://ext.dcloud.net.cn/plugin?id=2586) +6. 云端一体水平布局,左文右图:[https://ext.dcloud.net.cn/plugin?id=2587](https://ext.dcloud.net.cn/plugin?id=2587) +7. 云端一体垂直布局,无图模式,主标题+副标题:[https://ext.dcloud.net.cn/plugin?id=2588](https://ext.dcloud.net.cn/plugin?id=2588) + +**商品列表类** + +1. 云端一体列表/宫格视图互切:[https://ext.dcloud.net.cn/plugin?id=2651](https://ext.dcloud.net.cn/plugin?id=2651) +2. 云端一体列表(宫格模式):[https://ext.dcloud.net.cn/plugin?id=2671](https://ext.dcloud.net.cn/plugin?id=2671) +3. 云端一体列表(列表模式):[https://ext.dcloud.net.cn/plugin?id=2672](https://ext.dcloud.net.cn/plugin?id=2672) + +## 组件示例 + +点击查看:[https://hellouniapp.dcloud.net.cn/pages/extUI/list/list](https://hellouniapp.dcloud.net.cn/pages/extUI/list/list) \ No newline at end of file diff --git a/uni_modules/uni-load-more/changelog.md b/uni_modules/uni-load-more/changelog.md new file mode 100644 index 0000000..8f03f1d --- /dev/null +++ b/uni_modules/uni-load-more/changelog.md @@ -0,0 +1,19 @@ +## 1.3.3(2022-01-20) +- 新增 showText属性 ,是否显示文本 +## 1.3.2(2022-01-19) +- 修复 nvue 平台下不显示文本的bug +## 1.3.1(2022-01-19) +- 修复 微信小程序平台样式选择器报警告的问题 +## 1.3.0(2021-11-19) +- 优化 组件UI,并提供设计资源,详见:[https://uniapp.dcloud.io/component/uniui/resource](https://uniapp.dcloud.io/component/uniui/resource) +- 文档迁移,详见:[https://uniapp.dcloud.io/component/uniui/uni-load-more](https://uniapp.dcloud.io/component/uniui/uni-load-more) +## 1.2.1(2021-08-24) +- 新增 支持国际化 +## 1.2.0(2021-07-30) +- 组件兼容 vue3,如何创建vue3项目,详见 [uni-app 项目支持 vue3 介绍](https://ask.dcloud.net.cn/article/37834) +## 1.1.8(2021-05-12) +- 新增 组件示例地址 +## 1.1.7(2021-03-30) +- 修复 uni-load-more 在首页使用时,h5 平台报 'uni is not defined' 的 bug +## 1.1.6(2021-02-05) +- 调整为uni_modules目录规范 diff --git a/uni_modules/uni-load-more/components/uni-load-more/i18n/en.json b/uni_modules/uni-load-more/components/uni-load-more/i18n/en.json new file mode 100644 index 0000000..a4f14a5 --- /dev/null +++ b/uni_modules/uni-load-more/components/uni-load-more/i18n/en.json @@ -0,0 +1,5 @@ +{ + "uni-load-more.contentdown": "Pull up to show more", + "uni-load-more.contentrefresh": "loading...", + "uni-load-more.contentnomore": "No more data" +} diff --git a/uni_modules/uni-load-more/components/uni-load-more/i18n/index.js b/uni_modules/uni-load-more/components/uni-load-more/i18n/index.js new file mode 100644 index 0000000..de7509c --- /dev/null +++ b/uni_modules/uni-load-more/components/uni-load-more/i18n/index.js @@ -0,0 +1,8 @@ +import en from './en.json' +import zhHans from './zh-Hans.json' +import zhHant from './zh-Hant.json' +export default { + en, + 'zh-Hans': zhHans, + 'zh-Hant': zhHant +} diff --git a/uni_modules/uni-load-more/components/uni-load-more/i18n/zh-Hans.json b/uni_modules/uni-load-more/components/uni-load-more/i18n/zh-Hans.json new file mode 100644 index 0000000..f15d510 --- /dev/null +++ b/uni_modules/uni-load-more/components/uni-load-more/i18n/zh-Hans.json @@ -0,0 +1,5 @@ +{ + "uni-load-more.contentdown": "上拉显示更多", + "uni-load-more.contentrefresh": "正在加载...", + "uni-load-more.contentnomore": "没有更多数据了" +} diff --git a/uni_modules/uni-load-more/components/uni-load-more/i18n/zh-Hant.json b/uni_modules/uni-load-more/components/uni-load-more/i18n/zh-Hant.json new file mode 100644 index 0000000..a255c6d --- /dev/null +++ b/uni_modules/uni-load-more/components/uni-load-more/i18n/zh-Hant.json @@ -0,0 +1,5 @@ +{ + "uni-load-more.contentdown": "上拉顯示更多", + "uni-load-more.contentrefresh": "正在加載...", + "uni-load-more.contentnomore": "沒有更多數據了" +} diff --git a/uni_modules/uni-load-more/components/uni-load-more/uni-load-more.vue b/uni_modules/uni-load-more/components/uni-load-more/uni-load-more.vue new file mode 100644 index 0000000..e5eff4d --- /dev/null +++ b/uni_modules/uni-load-more/components/uni-load-more/uni-load-more.vue @@ -0,0 +1,399 @@ + + + + + diff --git a/uni_modules/uni-load-more/package.json b/uni_modules/uni-load-more/package.json new file mode 100644 index 0000000..2fa6f04 --- /dev/null +++ b/uni_modules/uni-load-more/package.json @@ -0,0 +1,86 @@ +{ + "id": "uni-load-more", + "displayName": "uni-load-more 加载更多", + "version": "1.3.3", + "description": "LoadMore 组件,常用在列表里面,做滚动加载使用。", + "keywords": [ + "uni-ui", + "uniui", + "加载更多", + "load-more" +], + "repository": "https://github.com/dcloudio/uni-ui", + "engines": { + "HBuilderX": "" + }, + "directories": { + "example": "../../temps/example_temps" + }, + "dcloudext": { + "category": [ + "前端组件", + "通用组件" + ], + "sale": { + "regular": { + "price": "0.00" + }, + "sourcecode": { + "price": "0.00" + } + }, + "contact": { + "qq": "" + }, + "declaration": { + "ads": "无", + "data": "无", + "permissions": "无" + }, + "npmurl": "https://www.npmjs.com/package/@dcloudio/uni-ui" + }, + "uni_modules": { + "dependencies": ["uni-scss"], + "encrypt": [], + "platforms": { + "cloud": { + "tcb": "y", + "aliyun": "y" + }, + "client": { + "App": { + "app-vue": "y", + "app-nvue": "y" + }, + "H5-mobile": { + "Safari": "y", + "Android Browser": "y", + "微信浏览器(Android)": "y", + "QQ浏览器(Android)": "y" + }, + "H5-pc": { + "Chrome": "y", + "IE": "y", + "Edge": "y", + "Firefox": "y", + "Safari": "y" + }, + "小程序": { + "微信": "y", + "阿里": "y", + "百度": "y", + "字节跳动": "y", + "QQ": "y" + }, + "快应用": { + "华为": "u", + "联盟": "u" + }, + "Vue": { + "vue2": "y", + "vue3": "y" + } + } + } + } +} \ No newline at end of file diff --git a/uni_modules/uni-load-more/readme.md b/uni_modules/uni-load-more/readme.md new file mode 100644 index 0000000..54dc1fa --- /dev/null +++ b/uni_modules/uni-load-more/readme.md @@ -0,0 +1,14 @@ + + +### LoadMore 加载更多 +> **组件名:uni-load-more** +> 代码块: `uLoadMore` + + +用于列表中,做滚动加载使用,展示 loading 的各种状态。 + + +### [查看文档](https://uniapp.dcloud.io/component/uniui/uni-load-more) +#### 如使用过程中有任何问题,或者您对uni-ui有一些好的建议,欢迎加入 uni-ui 交流群:871950839 + + diff --git a/uni_modules/uni-nav-bar/changelog.md b/uni_modules/uni-nav-bar/changelog.md new file mode 100644 index 0000000..c2d841b --- /dev/null +++ b/uni_modules/uni-nav-bar/changelog.md @@ -0,0 +1,39 @@ +## 1.3.5(2022-05-24) +- 新增 stat 属性 ,可开启统计title 上报 ,仅使用了title 属性且项目开启了uni统计生效 +## 1.3.4(2022-01-24) +- 更新 组件示例 +## 1.3.3(2022-01-24) +- 新增 left-width/right-width属性 ,可修改左右两侧的宽度 +## 1.3.2(2022-01-18) +- 修复 在vue下,标题不垂直居中的bug +## 1.3.1(2022-01-18) +- 修复 height 属性类型错误 +## 1.3.0(2022-01-18) +- 新增 height 属性,可修改组件高度 +- 新增 dark 属性可可开启暗黑模式 +- 优化 标题字数过多显示省略号 +- 优化 插槽,插入内容可完全覆盖 +## 1.2.1(2022-01-10) +- 修复 color 属性不生效的bug +## 1.2.0(2021-11-19) +- 优化 组件UI,并提供设计资源,详见:[https://uniapp.dcloud.io/component/uniui/resource](https://uniapp.dcloud.io/component/uniui/resource) +- 文档迁移,详见:[https://uniapp.dcloud.io/component/uniui/uni-nav-bar](https://uniapp.dcloud.io/component/uniui/uni-nav-bar) +## 1.1.0(2021-07-30) +- 组件兼容 vue3,如何创建vue3项目,详见 [uni-app 项目支持 vue3 介绍](https://ask.dcloud.net.cn/article/37834) +## 1.0.11(2021-05-12) +- 新增 组件示例地址 +## 1.0.10(2021-04-30) +- 修复 在nvue下fixed为true,宽度不能撑满的Bug +## 1.0.9(2021-04-21) +- 优化 添加依赖 uni-icons, 导入后自动下载依赖 +## 1.0.8(2021-04-14) +- uni-ui 修复 uni-nav-bar 当 fixed 属性为 true 时铺不满屏幕的 bug + +## 1.0.7(2021-02-25) +- 修复 easycom 下,找不到 uni-status-bar 的bug + +## 1.0.6(2021-02-05) +- 优化 组件引用关系,通过uni_modules引用组件 + +## 1.0.5(2021-02-05) +- 调整为uni_modules目录规范 diff --git a/uni_modules/uni-nav-bar/components/uni-nav-bar/uni-nav-bar.vue b/uni_modules/uni-nav-bar/components/uni-nav-bar/uni-nav-bar.vue new file mode 100644 index 0000000..cbfc168 --- /dev/null +++ b/uni_modules/uni-nav-bar/components/uni-nav-bar/uni-nav-bar.vue @@ -0,0 +1,348 @@ + + + + + diff --git a/uni_modules/uni-nav-bar/components/uni-nav-bar/uni-status-bar.vue b/uni_modules/uni-nav-bar/components/uni-nav-bar/uni-status-bar.vue new file mode 100644 index 0000000..6a68874 --- /dev/null +++ b/uni_modules/uni-nav-bar/components/uni-nav-bar/uni-status-bar.vue @@ -0,0 +1,27 @@ + + + + + diff --git a/uni_modules/uni-nav-bar/package.json b/uni_modules/uni-nav-bar/package.json new file mode 100644 index 0000000..a69ed4f --- /dev/null +++ b/uni_modules/uni-nav-bar/package.json @@ -0,0 +1,89 @@ +{ + "id": "uni-nav-bar", + "displayName": "uni-nav-bar 自定义导航栏", + "version": "1.3.5", + "description": "自定义导航栏组件,主要用于头部导航。", + "keywords": [ + "uni-ui", + "导航", + "导航栏", + "自定义导航栏" +], + "repository": "https://github.com/dcloudio/uni-ui", + "engines": { + "HBuilderX": "" + }, + "directories": { + "example": "../../temps/example_temps" + }, + "dcloudext": { + "category": [ + "前端组件", + "通用组件" + ], + "sale": { + "regular": { + "price": "0.00" + }, + "sourcecode": { + "price": "0.00" + } + }, + "contact": { + "qq": "" + }, + "declaration": { + "ads": "无", + "data": "无", + "permissions": "无" + }, + "npmurl": "https://www.npmjs.com/package/@dcloudio/uni-ui" + }, + "uni_modules": { + "dependencies": [ + "uni-scss", + "uni-icons" + ], + "encrypt": [], + "platforms": { + "cloud": { + "tcb": "y", + "aliyun": "y" + }, + "client": { + "App": { + "app-vue": "y", + "app-nvue": "y" + }, + "H5-mobile": { + "Safari": "y", + "Android Browser": "y", + "微信浏览器(Android)": "y", + "QQ浏览器(Android)": "y" + }, + "H5-pc": { + "Chrome": "y", + "IE": "y", + "Edge": "y", + "Firefox": "y", + "Safari": "y" + }, + "小程序": { + "微信": "y", + "阿里": "y", + "百度": "y", + "字节跳动": "y", + "QQ": "y" + }, + "快应用": { + "华为": "u", + "联盟": "u" + }, + "Vue": { + "vue2": "y", + "vue3": "y" + } + } + } + } +} \ No newline at end of file diff --git a/uni_modules/uni-nav-bar/readme.md b/uni_modules/uni-nav-bar/readme.md new file mode 100644 index 0000000..3934b32 --- /dev/null +++ b/uni_modules/uni-nav-bar/readme.md @@ -0,0 +1,15 @@ + + +## NavBar 导航栏 +> **组件名:uni-nav-bar** +> 代码块: `uNavBar` + +导航栏组件,主要用于头部导航。 + +### [查看文档](https://uniapp.dcloud.io/component/uniui/uni-nav-bar) +#### 如使用过程中有任何问题,或者您对uni-ui有一些好的建议,欢迎加入 uni-ui 交流群:871950839 + + + + + diff --git a/uni_modules/uni-notice-bar/changelog.md b/uni_modules/uni-notice-bar/changelog.md new file mode 100644 index 0000000..9ee75a0 --- /dev/null +++ b/uni_modules/uni-notice-bar/changelog.md @@ -0,0 +1,16 @@ +## 1.2.0(2021-11-19) +- 优化 组件UI,并提供设计资源,详见:[https://uniapp.dcloud.io/component/uniui/resource](https://uniapp.dcloud.io/component/uniui/resource) +- 文档迁移,详见:[https://uniapp.dcloud.io/component/uniui/uni-notice-bar](https://uniapp.dcloud.io/component/uniui/uni-notice-bar) +## 1.1.1(2021-11-09) +- 新增 提供组件设计资源,组件样式调整 +## 1.1.0(2021-07-30) +- 组件兼容 vue3,如何创建vue3项目,详见 [uni-app 项目支持 vue3 介绍](https://ask.dcloud.net.cn/article/37834) +## 1.0.9(2021-05-12) +- 新增 组件示例地址 +## 1.0.8(2021-04-21) +- 优化 添加依赖 uni-icons, 导入后自动下载依赖 +## 1.0.7(2021-02-05) +- 优化 组件引用关系,通过uni_modules引用组件 + +## 1.0.6(2021-02-05) +- 调整为uni_modules目录规范 diff --git a/uni_modules/uni-notice-bar/components/uni-notice-bar/uni-notice-bar.vue b/uni_modules/uni-notice-bar/components/uni-notice-bar/uni-notice-bar.vue new file mode 100644 index 0000000..424430d --- /dev/null +++ b/uni_modules/uni-notice-bar/components/uni-notice-bar/uni-notice-bar.vue @@ -0,0 +1,395 @@ + + + + + diff --git a/uni_modules/uni-notice-bar/package.json b/uni_modules/uni-notice-bar/package.json new file mode 100644 index 0000000..97719a0 --- /dev/null +++ b/uni_modules/uni-notice-bar/package.json @@ -0,0 +1,90 @@ +{ + "id": "uni-notice-bar", + "displayName": "uni-notice-bar 通告栏", + "version": "1.2.0", + "description": "NoticeBar 通告栏组件,常用于展示公告信息,可设为滚动公告", + "keywords": [ + "uni-ui", + "uniui", + "通告栏", + "公告", + "跑马灯" +], + "repository": "https://github.com/dcloudio/uni-ui", + "engines": { + "HBuilderX": "" + }, + "directories": { + "example": "../../temps/example_temps" + }, + "dcloudext": { + "category": [ + "前端组件", + "通用组件" + ], + "sale": { + "regular": { + "price": "0.00" + }, + "sourcecode": { + "price": "0.00" + } + }, + "contact": { + "qq": "" + }, + "declaration": { + "ads": "无", + "data": "无", + "permissions": "无" + }, + "npmurl": "https://www.npmjs.com/package/@dcloudio/uni-ui" + }, + "uni_modules": { + "dependencies": [ + "uni-scss", + "uni-icons" + ], + "encrypt": [], + "platforms": { + "cloud": { + "tcb": "y", + "aliyun": "y" + }, + "client": { + "App": { + "app-vue": "y", + "app-nvue": "y" + }, + "H5-mobile": { + "Safari": "y", + "Android Browser": "y", + "微信浏览器(Android)": "y", + "QQ浏览器(Android)": "y" + }, + "H5-pc": { + "Chrome": "y", + "IE": "y", + "Edge": "y", + "Firefox": "y", + "Safari": "y" + }, + "小程序": { + "微信": "y", + "阿里": "y", + "百度": "y", + "字节跳动": "y", + "QQ": "y" + }, + "快应用": { + "华为": "u", + "联盟": "u" + }, + "Vue": { + "vue2": "y", + "vue3": "y" + } + } + } + } +} diff --git a/uni_modules/uni-notice-bar/readme.md b/uni_modules/uni-notice-bar/readme.md new file mode 100644 index 0000000..fb2ede2 --- /dev/null +++ b/uni_modules/uni-notice-bar/readme.md @@ -0,0 +1,13 @@ + + +## NoticeBar 通告栏 +> **组件名:uni-notice-bar** +> 代码块: `uNoticeBar` + + +通告栏组件 。 + +### [查看文档](https://uniapp.dcloud.io/component/uniui/uni-notice-bar) +#### 如使用过程中有任何问题,或者您对uni-ui有一些好的建议,欢迎加入 uni-ui 交流群:871950839 + + diff --git a/uni_modules/uni-number-box/changelog.md b/uni_modules/uni-number-box/changelog.md new file mode 100644 index 0000000..5925c32 --- /dev/null +++ b/uni_modules/uni-number-box/changelog.md @@ -0,0 +1,25 @@ +## 1.2.1(2021-11-22) +- 修复 vue3中某些scss变量无法找到的问题 +## 1.2.0(2021-11-19) +- 优化 组件UI,并提供设计资源,详见:[https://uniapp.dcloud.io/component/uniui/resource](https://uniapp.dcloud.io/component/uniui/resource) +- 文档迁移,详见:[https://uniapp.dcloud.io/component/uniui/uni-number-box](https://uniapp.dcloud.io/component/uniui/uni-number-box) +## 1.1.2(2021-11-09) +- 新增 提供组件设计资源,组件样式调整 +## 1.1.1(2021-07-30) +- 优化 vue3下事件警告的问题 +## 1.1.0(2021-07-13) +- 组件兼容 vue3,如何创建vue3项目,详见 [uni-app 项目支持 vue3 介绍](https://ask.dcloud.net.cn/article/37834) +## 1.0.7(2021-05-12) +- 新增 组件示例地址 +## 1.0.6(2021-04-20) +- 修复 uni-number-box 浮点数运算不精确的 bug +- 修复 uni-number-box change 事件触发不正确的 bug +- 新增 uni-number-box v-model 双向绑定 +## 1.0.5(2021-02-05) +- 调整为uni_modules目录规范 + +## 1.0.7(2021-02-05) +- 调整为uni_modules目录规范 +- 新增 支持 v-model +- 新增 支持 focus、blur 事件 +- 新增 支持 PC 端 diff --git a/uni_modules/uni-number-box/components/uni-number-box/uni-number-box.vue b/uni_modules/uni-number-box/components/uni-number-box/uni-number-box.vue new file mode 100644 index 0000000..8d255fb --- /dev/null +++ b/uni_modules/uni-number-box/components/uni-number-box/uni-number-box.vue @@ -0,0 +1,220 @@ + + + diff --git a/uni_modules/uni-number-box/package.json b/uni_modules/uni-number-box/package.json new file mode 100644 index 0000000..ad82336 --- /dev/null +++ b/uni_modules/uni-number-box/package.json @@ -0,0 +1,85 @@ +{ + "id": "uni-number-box", + "displayName": "uni-number-box 数字输入框", + "version": "1.2.1", + "description": "NumberBox 带加减按钮的数字输入框组件,用户可以控制每次点击增加的数值,支持小数。", + "keywords": [ + "uni-ui", + "uniui", + "数字输入框" +], + "repository": "https://github.com/dcloudio/uni-ui", + "engines": { + "HBuilderX": "" + }, + "directories": { + "example": "../../temps/example_temps" + }, + "dcloudext": { + "category": [ + "前端组件", + "通用组件" + ], + "sale": { + "regular": { + "price": "0.00" + }, + "sourcecode": { + "price": "0.00" + } + }, + "contact": { + "qq": "" + }, + "declaration": { + "ads": "无", + "data": "无", + "permissions": "无" + }, + "npmurl": "https://www.npmjs.com/package/@dcloudio/uni-ui" + }, + "uni_modules": { + "dependencies": ["uni-scss"], + "encrypt": [], + "platforms": { + "cloud": { + "tcb": "y", + "aliyun": "y" + }, + "client": { + "App": { + "app-vue": "y", + "app-nvue": "y" + }, + "H5-mobile": { + "Safari": "y", + "Android Browser": "y", + "微信浏览器(Android)": "y", + "QQ浏览器(Android)": "y" + }, + "H5-pc": { + "Chrome": "y", + "IE": "y", + "Edge": "y", + "Firefox": "y", + "Safari": "y" + }, + "小程序": { + "微信": "y", + "阿里": "y", + "百度": "y", + "字节跳动": "y", + "QQ": "y" + }, + "快应用": { + "华为": "u", + "联盟": "u" + }, + "Vue": { + "vue2": "y", + "vue3": "y" + } + } + } + } +} \ No newline at end of file diff --git a/uni_modules/uni-number-box/readme.md b/uni_modules/uni-number-box/readme.md new file mode 100644 index 0000000..affc56f --- /dev/null +++ b/uni_modules/uni-number-box/readme.md @@ -0,0 +1,13 @@ + + +## NumberBox 数字输入框 +> **组件名:uni-number-box** +> 代码块: `uNumberBox` + + +带加减按钮的数字输入框。 + +### [查看文档](https://uniapp.dcloud.io/component/uniui/uni-number-box) +#### 如使用过程中有任何问题,或者您对uni-ui有一些好的建议,欢迎加入 uni-ui 交流群:871950839 + + diff --git a/uni_modules/uni-pagination/changelog.md b/uni_modules/uni-pagination/changelog.md new file mode 100644 index 0000000..336c2ba --- /dev/null +++ b/uni_modules/uni-pagination/changelog.md @@ -0,0 +1,20 @@ +## 1.2.1(2021-11-22) +- 修复 vue3中某些scss变量无法找到的问题 +## 1.2.0(2021-11-19) +- 优化 组件UI,并提供设计资源,详见:[https://uniapp.dcloud.io/component/uniui/resource](https://uniapp.dcloud.io/component/uniui/resource) +- 文档迁移,详见:[https://uniapp.dcloud.io/component/uniui/uni-pagination](https://uniapp.dcloud.io/component/uniui/uni-pagination) +## 1.1.2(2021-10-08) +- 修复 current 、value 属性未监听,导致高亮样式失效的 bug +## 1.1.1(2021-08-20) +- 新增 支持国际化 +## 1.1.0(2021-07-30) +- 组件兼容 vue3,如何创建vue3项目,详见 [uni-app 项目支持 vue3 介绍](https://ask.dcloud.net.cn/article/37834) +## 1.0.7(2021-05-12) +- 新增 组件示例地址 +## 1.0.6(2021-04-12) +- 新增 PC 和 移动端适配不同的 ui +## 1.0.5(2021-02-05) +- 优化 组件引用关系,通过uni_modules引用组件 + +## 1.0.4(2021-02-05) +- 调整为uni_modules目录规范 diff --git a/uni_modules/uni-pagination/components/uni-pagination/i18n/en.json b/uni_modules/uni-pagination/components/uni-pagination/i18n/en.json new file mode 100644 index 0000000..a57becd --- /dev/null +++ b/uni_modules/uni-pagination/components/uni-pagination/i18n/en.json @@ -0,0 +1,4 @@ +{ + "uni-pagination.prevText": "prev", + "uni-pagination.nextText": "next" +} diff --git a/uni_modules/uni-pagination/components/uni-pagination/i18n/es.json b/uni_modules/uni-pagination/components/uni-pagination/i18n/es.json new file mode 100644 index 0000000..ccbba2f --- /dev/null +++ b/uni_modules/uni-pagination/components/uni-pagination/i18n/es.json @@ -0,0 +1,4 @@ +{ + "uni-pagination.prevText": "anterior", + "uni-pagination.nextText": "próxima" +} diff --git a/uni_modules/uni-pagination/components/uni-pagination/i18n/fr.json b/uni_modules/uni-pagination/components/uni-pagination/i18n/fr.json new file mode 100644 index 0000000..9b5f2d9 --- /dev/null +++ b/uni_modules/uni-pagination/components/uni-pagination/i18n/fr.json @@ -0,0 +1,4 @@ +{ + "uni-pagination.prevText": "précédente", + "uni-pagination.nextText": "suivante" +} diff --git a/uni_modules/uni-pagination/components/uni-pagination/i18n/index.js b/uni_modules/uni-pagination/components/uni-pagination/i18n/index.js new file mode 100644 index 0000000..2469dd0 --- /dev/null +++ b/uni_modules/uni-pagination/components/uni-pagination/i18n/index.js @@ -0,0 +1,12 @@ +import en from './en.json' +import es from './es.json' +import fr from './fr.json' +import zhHans from './zh-Hans.json' +import zhHant from './zh-Hant.json' +export default { + en, + es, + fr, + 'zh-Hans': zhHans, + 'zh-Hant': zhHant +} diff --git a/uni_modules/uni-pagination/components/uni-pagination/i18n/zh-Hans.json b/uni_modules/uni-pagination/components/uni-pagination/i18n/zh-Hans.json new file mode 100644 index 0000000..fedbe82 --- /dev/null +++ b/uni_modules/uni-pagination/components/uni-pagination/i18n/zh-Hans.json @@ -0,0 +1,4 @@ +{ + "uni-pagination.prevText": "上一页", + "uni-pagination.nextText": "下一页" +} diff --git a/uni_modules/uni-pagination/components/uni-pagination/i18n/zh-Hant.json b/uni_modules/uni-pagination/components/uni-pagination/i18n/zh-Hant.json new file mode 100644 index 0000000..133b340 --- /dev/null +++ b/uni_modules/uni-pagination/components/uni-pagination/i18n/zh-Hant.json @@ -0,0 +1,4 @@ +{ + "uni-pagination.prevText": "上一頁", + "uni-pagination.nextText": "下一頁" +} diff --git a/uni_modules/uni-pagination/components/uni-pagination/uni-pagination.vue b/uni_modules/uni-pagination/components/uni-pagination/uni-pagination.vue new file mode 100644 index 0000000..c62150e --- /dev/null +++ b/uni_modules/uni-pagination/components/uni-pagination/uni-pagination.vue @@ -0,0 +1,409 @@ + + + + + diff --git a/uni_modules/uni-pagination/package.json b/uni_modules/uni-pagination/package.json new file mode 100644 index 0000000..adce670 --- /dev/null +++ b/uni_modules/uni-pagination/package.json @@ -0,0 +1,86 @@ +{ + "id": "uni-pagination", + "displayName": "uni-pagination 分页器", + "version": "1.2.1", + "description": "Pagination 分页器组件,用于展示页码、请求数据等。", + "keywords": [ + "uni-ui", + "uniui", + "分页器", + "页码" +], + "repository": "https://github.com/dcloudio/uni-ui", + "engines": { + "HBuilderX": "" + }, + "directories": { + "example": "../../temps/example_temps" + }, + "dcloudext": { + "category": [ + "前端组件", + "通用组件" + ], + "sale": { + "regular": { + "price": "0.00" + }, + "sourcecode": { + "price": "0.00" + } + }, + "contact": { + "qq": "" + }, + "declaration": { + "ads": "无", + "data": "无", + "permissions": "无" + }, + "npmurl": "https://www.npmjs.com/package/@dcloudio/uni-ui" + }, + "uni_modules": { + "dependencies": ["uni-scss","uni-icons"], + "encrypt": [], + "platforms": { + "cloud": { + "tcb": "y", + "aliyun": "y" + }, + "client": { + "App": { + "app-vue": "y", + "app-nvue": "y" + }, + "H5-mobile": { + "Safari": "y", + "Android Browser": "y", + "微信浏览器(Android)": "y", + "QQ浏览器(Android)": "y" + }, + "H5-pc": { + "Chrome": "y", + "IE": "y", + "Edge": "y", + "Firefox": "y", + "Safari": "y" + }, + "小程序": { + "微信": "y", + "阿里": "y", + "百度": "y", + "字节跳动": "y", + "QQ": "y" + }, + "快应用": { + "华为": "u", + "联盟": "u" + }, + "Vue": { + "vue2": "y", + "vue3": "y" + } + } + } + } +} \ No newline at end of file diff --git a/uni_modules/uni-pagination/readme.md b/uni_modules/uni-pagination/readme.md new file mode 100644 index 0000000..eefa263 --- /dev/null +++ b/uni_modules/uni-pagination/readme.md @@ -0,0 +1,13 @@ + + +## Pagination 分页器 +> **组件名:uni-pagination** +> 代码块: `uPagination` + + +分页器组件,用于展示页码、请求数据等。 + +### [查看文档](https://uniapp.dcloud.io/component/uniui/uni-pagination) +#### 如使用过程中有任何问题,或者您对uni-ui有一些好的建议,欢迎加入 uni-ui 交流群:871950839 + + diff --git a/uni_modules/uni-popup/changelog.md b/uni_modules/uni-popup/changelog.md new file mode 100644 index 0000000..a9e2d66 --- /dev/null +++ b/uni_modules/uni-popup/changelog.md @@ -0,0 +1,60 @@ +## 1.7.9(2022-04-02) +- 修复 弹出层内部无法滚动的bug +## 1.7.8(2022-03-28) +- 修复 小程序中高度错误的bug +## 1.7.7(2022-03-17) +- 修复 快速调用open出现问题的Bug +## 1.7.6(2022-02-14) +- 修复 safeArea 属性不能设置为false的bug +## 1.7.5(2022-01-19) +- 修复 isMaskClick 失效的bug +## 1.7.4(2022-01-19) +- 新增 cancelText \ confirmText 属性 ,可自定义文本 +- 新增 maskBackgroundColor 属性 ,可以修改蒙版颜色 +- 优化 maskClick属性 更新为 isMaskClick ,解决微信小程序警告的问题 +## 1.7.3(2022-01-13) +- 修复 设置 safeArea 属性不生效的bug +## 1.7.2(2021-11-26) +- 优化 组件示例 +## 1.7.1(2021-11-26) +- 修复 vuedoc 文字错误 +## 1.7.0(2021-11-19) +- 优化 组件UI,并提供设计资源,详见:[https://uniapp.dcloud.io/component/uniui/resource](https://uniapp.dcloud.io/component/uniui/resource) +- 文档迁移,详见:[https://uniapp.dcloud.io/component/uniui/uni-popup](https://uniapp.dcloud.io/component/uniui/uni-popup) +## 1.6.2(2021-08-24) +- 新增 支持国际化 +## 1.6.1(2021-07-30) +- 优化 vue3下事件警告的问题 +## 1.6.0(2021-07-13) +- 组件兼容 vue3,如何创建vue3项目,详见 [uni-app 项目支持 vue3 介绍](https://ask.dcloud.net.cn/article/37834) +## 1.5.0(2021-06-23) +- 新增 mask-click 遮罩层点击事件 +## 1.4.5(2021-06-22) +- 修复 nvue 平台中间弹出后,点击内容,再点击遮罩无法关闭的Bug +## 1.4.4(2021-06-18) +- 修复 H5平台中间弹出后,点击内容,再点击遮罩无法关闭的Bug +## 1.4.3(2021-06-08) +- 修复 错误的 watch 字段 +- 修复 safeArea 属性不生效的问题 +- 修复 点击内容,再点击遮罩无法关闭的Bug +## 1.4.2(2021-05-12) +- 新增 组件示例地址 +## 1.4.1(2021-04-29) +- 修复 组件内放置 input 、textarea 组件,无法聚焦的问题 +## 1.4.0 (2021-04-29) +- 新增 type 属性的 left\right 值,支持左右弹出 +- 新增 open(String:type) 方法参数 ,可以省略 type 属性 ,直接传入类型打开指定弹窗 +- 新增 backgroundColor 属性,可定义主窗口背景色,默认不显示背景色 +- 新增 safeArea 属性,是否适配底部安全区 +- 修复 App\h5\微信小程序底部安全区占位不对的Bug +- 修复 App 端弹出等待的Bug +- 优化 提升低配设备性能,优化动画卡顿问题 +- 优化 更简单的组件自定义方式 +## 1.2.9(2021-02-05) +- 优化 组件引用关系,通过uni_modules引用组件 +## 1.2.8(2021-02-05) +- 调整为uni_modules目录规范 +## 1.2.7(2021-02-05) +- 调整为uni_modules目录规范 +- 新增 支持 PC 端 +- 新增 uni-popup-message 、uni-popup-dialog扩展组件支持 PC 端 diff --git a/uni_modules/uni-popup/components/uni-popup-dialog/keypress.js b/uni_modules/uni-popup/components/uni-popup-dialog/keypress.js new file mode 100644 index 0000000..6ef26a2 --- /dev/null +++ b/uni_modules/uni-popup/components/uni-popup-dialog/keypress.js @@ -0,0 +1,45 @@ +// #ifdef H5 +export default { + name: 'Keypress', + props: { + disable: { + type: Boolean, + default: false + } + }, + mounted () { + const keyNames = { + esc: ['Esc', 'Escape'], + tab: 'Tab', + enter: 'Enter', + space: [' ', 'Spacebar'], + up: ['Up', 'ArrowUp'], + left: ['Left', 'ArrowLeft'], + right: ['Right', 'ArrowRight'], + down: ['Down', 'ArrowDown'], + delete: ['Backspace', 'Delete', 'Del'] + } + const listener = ($event) => { + if (this.disable) { + return + } + const keyName = Object.keys(keyNames).find(key => { + const keyName = $event.key + const value = keyNames[key] + return value === keyName || (Array.isArray(value) && value.includes(keyName)) + }) + if (keyName) { + // 避免和其他按键事件冲突 + setTimeout(() => { + this.$emit(keyName, {}) + }, 0) + } + } + document.addEventListener('keyup', listener) + this.$once('hook:beforeDestroy', () => { + document.removeEventListener('keyup', listener) + }) + }, + render: () => {} +} +// #endif diff --git a/uni_modules/uni-popup/components/uni-popup-dialog/uni-popup-dialog.vue b/uni_modules/uni-popup/components/uni-popup-dialog/uni-popup-dialog.vue new file mode 100644 index 0000000..a5d0f2a --- /dev/null +++ b/uni_modules/uni-popup/components/uni-popup-dialog/uni-popup-dialog.vue @@ -0,0 +1,271 @@ + + + + + diff --git a/uni_modules/uni-popup/components/uni-popup-message/uni-popup-message.vue b/uni_modules/uni-popup/components/uni-popup-message/uni-popup-message.vue new file mode 100644 index 0000000..91370a8 --- /dev/null +++ b/uni_modules/uni-popup/components/uni-popup-message/uni-popup-message.vue @@ -0,0 +1,143 @@ + + + + diff --git a/uni_modules/uni-popup/components/uni-popup-share/uni-popup-share.vue b/uni_modules/uni-popup/components/uni-popup-share/uni-popup-share.vue new file mode 100644 index 0000000..5be7624 --- /dev/null +++ b/uni_modules/uni-popup/components/uni-popup-share/uni-popup-share.vue @@ -0,0 +1,187 @@ + + + + diff --git a/uni_modules/uni-popup/components/uni-popup/i18n/en.json b/uni_modules/uni-popup/components/uni-popup/i18n/en.json new file mode 100644 index 0000000..7f1bd06 --- /dev/null +++ b/uni_modules/uni-popup/components/uni-popup/i18n/en.json @@ -0,0 +1,7 @@ +{ + "uni-popup.cancel": "cancel", + "uni-popup.ok": "ok", + "uni-popup.placeholder": "pleace enter", + "uni-popup.title": "Hint", + "uni-popup.shareTitle": "Share to" +} diff --git a/uni_modules/uni-popup/components/uni-popup/i18n/index.js b/uni_modules/uni-popup/components/uni-popup/i18n/index.js new file mode 100644 index 0000000..de7509c --- /dev/null +++ b/uni_modules/uni-popup/components/uni-popup/i18n/index.js @@ -0,0 +1,8 @@ +import en from './en.json' +import zhHans from './zh-Hans.json' +import zhHant from './zh-Hant.json' +export default { + en, + 'zh-Hans': zhHans, + 'zh-Hant': zhHant +} diff --git a/uni_modules/uni-popup/components/uni-popup/i18n/zh-Hans.json b/uni_modules/uni-popup/components/uni-popup/i18n/zh-Hans.json new file mode 100644 index 0000000..5e3003c --- /dev/null +++ b/uni_modules/uni-popup/components/uni-popup/i18n/zh-Hans.json @@ -0,0 +1,7 @@ +{ + "uni-popup.cancel": "取消", + "uni-popup.ok": "确定", + "uni-popup.placeholder": "请输入", + "uni-popup.title": "提示", + "uni-popup.shareTitle": "分享到" +} diff --git a/uni_modules/uni-popup/components/uni-popup/i18n/zh-Hant.json b/uni_modules/uni-popup/components/uni-popup/i18n/zh-Hant.json new file mode 100644 index 0000000..13e39eb --- /dev/null +++ b/uni_modules/uni-popup/components/uni-popup/i18n/zh-Hant.json @@ -0,0 +1,7 @@ +{ + "uni-popup.cancel": "取消", + "uni-popup.ok": "確定", + "uni-popup.placeholder": "請輸入", + "uni-popup.title": "提示", + "uni-popup.shareTitle": "分享到" +} diff --git a/uni_modules/uni-popup/components/uni-popup/keypress.js b/uni_modules/uni-popup/components/uni-popup/keypress.js new file mode 100644 index 0000000..62dda46 --- /dev/null +++ b/uni_modules/uni-popup/components/uni-popup/keypress.js @@ -0,0 +1,45 @@ +// #ifdef H5 +export default { + name: 'Keypress', + props: { + disable: { + type: Boolean, + default: false + } + }, + mounted () { + const keyNames = { + esc: ['Esc', 'Escape'], + tab: 'Tab', + enter: 'Enter', + space: [' ', 'Spacebar'], + up: ['Up', 'ArrowUp'], + left: ['Left', 'ArrowLeft'], + right: ['Right', 'ArrowRight'], + down: ['Down', 'ArrowDown'], + delete: ['Backspace', 'Delete', 'Del'] + } + const listener = ($event) => { + if (this.disable) { + return + } + const keyName = Object.keys(keyNames).find(key => { + const keyName = $event.key + const value = keyNames[key] + return value === keyName || (Array.isArray(value) && value.includes(keyName)) + }) + if (keyName) { + // 避免和其他按键事件冲突 + setTimeout(() => { + this.$emit(keyName, {}) + }, 0) + } + } + document.addEventListener('keyup', listener) + // this.$once('hook:beforeDestroy', () => { + // document.removeEventListener('keyup', listener) + // }) + }, + render: () => {} +} +// #endif diff --git a/uni_modules/uni-popup/components/uni-popup/popup.js b/uni_modules/uni-popup/components/uni-popup/popup.js new file mode 100644 index 0000000..c4e5781 --- /dev/null +++ b/uni_modules/uni-popup/components/uni-popup/popup.js @@ -0,0 +1,26 @@ + +export default { + data() { + return { + + } + }, + created(){ + this.popup = this.getParent() + }, + methods:{ + /** + * 获取父元素实例 + */ + getParent(name = 'uniPopup') { + let parent = this.$parent; + let parentName = parent.$options.name; + while (parentName !== name) { + parent = parent.$parent; + if (!parent) return false + parentName = parent.$options.name; + } + return parent; + }, + } +} diff --git a/uni_modules/uni-popup/components/uni-popup/uni-popup.vue b/uni_modules/uni-popup/components/uni-popup/uni-popup.vue new file mode 100644 index 0000000..db90c59 --- /dev/null +++ b/uni_modules/uni-popup/components/uni-popup/uni-popup.vue @@ -0,0 +1,474 @@ + + + + diff --git a/uni_modules/uni-popup/package.json b/uni_modules/uni-popup/package.json new file mode 100644 index 0000000..069e9ce --- /dev/null +++ b/uni_modules/uni-popup/package.json @@ -0,0 +1,90 @@ +{ + "id": "uni-popup", + "displayName": "uni-popup 弹出层", + "version": "1.7.9", + "description": " Popup 组件,提供常用的弹层", + "keywords": [ + "uni-ui", + "弹出层", + "弹窗", + "popup", + "弹框" + ], + "repository": "https://github.com/dcloudio/uni-ui", + "engines": { + "HBuilderX": "" + }, + "directories": { + "example": "../../temps/example_temps" + }, + "dcloudext": { + "category": [ + "前端组件", + "通用组件" + ], + "sale": { + "regular": { + "price": "0.00" + }, + "sourcecode": { + "price": "0.00" + } + }, + "contact": { + "qq": "" + }, + "declaration": { + "ads": "无", + "data": "无", + "permissions": "无" + }, + "npmurl": "https://www.npmjs.com/package/@dcloudio/uni-ui" + }, + "uni_modules": { + "dependencies": [ + "uni-scss", + "uni-transition" + ], + "encrypt": [], + "platforms": { + "cloud": { + "tcb": "y", + "aliyun": "y" + }, + "client": { + "App": { + "app-vue": "y", + "app-nvue": "y" + }, + "H5-mobile": { + "Safari": "y", + "Android Browser": "y", + "微信浏览器(Android)": "y", + "QQ浏览器(Android)": "y" + }, + "H5-pc": { + "Chrome": "y", + "IE": "y", + "Edge": "y", + "Firefox": "y", + "Safari": "y" + }, + "小程序": { + "微信": "y", + "阿里": "y", + "百度": "y", + "字节跳动": "y", + "QQ": "y" + }, + "快应用": { + "华为": "u", + "联盟": "u" + }, + "Vue": { + "vue2": "y", + "vue3": "y" + } + } + } + } +} diff --git a/uni_modules/uni-popup/readme.md b/uni_modules/uni-popup/readme.md new file mode 100644 index 0000000..fdad4b3 --- /dev/null +++ b/uni_modules/uni-popup/readme.md @@ -0,0 +1,17 @@ + + +## Popup 弹出层 +> **组件名:uni-popup** +> 代码块: `uPopup` +> 关联组件:`uni-transition` + + +弹出层组件,在应用中弹出一个消息提示窗口、提示框等 + +### [查看文档](https://uniapp.dcloud.io/component/uniui/uni-popup) +#### 如使用过程中有任何问题,或者您对uni-ui有一些好的建议,欢迎加入 uni-ui 交流群:871950839 + + + + + diff --git a/uni_modules/uni-rate/changelog.md b/uni_modules/uni-rate/changelog.md new file mode 100644 index 0000000..8a98a61 --- /dev/null +++ b/uni_modules/uni-rate/changelog.md @@ -0,0 +1,25 @@ +## 1.3.1(2022-02-25) +- 修复 条件判断 `NaN` 错误的 bug +## 1.3.0(2021-11-19) +- 优化 组件UI,并提供设计资源,详见:[https://uniapp.dcloud.io/component/uniui/resource](https://uniapp.dcloud.io/component/uniui/resource) +- 文档迁移,详见:[https://uniapp.dcloud.io/component/uniui/uni-rate](https://uniapp.dcloud.io/component/uniui/uni-rate) +## 1.2.2(2021-09-10) +- 优化 默认值修改为 0 颗星 +## 1.2.1(2021-07-30) +- 优化 vue3下事件警告的问题 +## 1.2.0(2021-07-13) +- 组件兼容 vue3,如何创建vue3项目,详见 [uni-app 项目支持 vue3 介绍](https://ask.dcloud.net.cn/article/37834) +## 1.1.2(2021-05-12) +- 新增 组件示例地址 +## 1.1.1(2021-04-21) +- 修复 布局变化后 uni-rate 星星计算不准确的 bug +- 优化 添加依赖 uni-icons, 导入 uni-rate 自动下载依赖 +## 1.1.0(2021-04-16) +- 修复 uni-rate 属性 margin 值为 string 组件失效的 bug + +## 1.0.9(2021-02-05) +- 优化 组件引用关系,通过uni_modules引用组件 + +## 1.0.8(2021-02-05) +- 调整为uni_modules目录规范 +- 支持 pc 端 diff --git a/uni_modules/uni-rate/components/uni-rate/uni-rate.vue b/uni_modules/uni-rate/components/uni-rate/uni-rate.vue new file mode 100644 index 0000000..857f5f9 --- /dev/null +++ b/uni_modules/uni-rate/components/uni-rate/uni-rate.vue @@ -0,0 +1,361 @@ + + + + + diff --git a/uni_modules/uni-rate/package.json b/uni_modules/uni-rate/package.json new file mode 100644 index 0000000..64e8e33 --- /dev/null +++ b/uni_modules/uni-rate/package.json @@ -0,0 +1,88 @@ +{ + "id": "uni-rate", + "displayName": "uni-rate 评分", + "version": "1.3.1", + "description": "Rate 评分组件,可自定义评分星星图标的大小、间隔、评分数。", + "keywords": [ + "uni-ui", + "uniui", + "评分" +], + "repository": "https://github.com/dcloudio/uni-ui", + "engines": { + "HBuilderX": "" + }, + "directories": { + "example": "../../temps/example_temps" + }, + "dcloudext": { + "category": [ + "前端组件", + "通用组件" + ], + "sale": { + "regular": { + "price": "0.00" + }, + "sourcecode": { + "price": "0.00" + } + }, + "contact": { + "qq": "" + }, + "declaration": { + "ads": "无", + "data": "无", + "permissions": "无" + }, + "npmurl": "https://www.npmjs.com/package/@dcloudio/uni-ui" + }, + "uni_modules": { + "dependencies": [ + "uni-scss", + "uni-icons" + ], + "encrypt": [], + "platforms": { + "cloud": { + "tcb": "y", + "aliyun": "y" + }, + "client": { + "App": { + "app-vue": "y", + "app-nvue": "y" + }, + "H5-mobile": { + "Safari": "y", + "Android Browser": "y", + "微信浏览器(Android)": "y", + "QQ浏览器(Android)": "y" + }, + "H5-pc": { + "Chrome": "y", + "IE": "y", + "Edge": "y", + "Firefox": "y", + "Safari": "y" + }, + "小程序": { + "微信": "y", + "阿里": "y", + "百度": "y", + "字节跳动": "y", + "QQ": "y" + }, + "快应用": { + "华为": "u", + "联盟": "u" + }, + "Vue": { + "vue2": "y", + "vue3": "y" + } + } + } + } +} diff --git a/uni_modules/uni-rate/readme.md b/uni_modules/uni-rate/readme.md new file mode 100644 index 0000000..eae7b5c --- /dev/null +++ b/uni_modules/uni-rate/readme.md @@ -0,0 +1,12 @@ + + +## Rate 评分 +> **组件名:uni-rate** +> 代码块: `uRate` +> 关联组件:`uni-icons` + + +评分组件,多用于购买商品后,对商品进行评价等场景 + +### [查看文档](https://uniapp.dcloud.io/component/uniui/uni-rate) +#### 如使用过程中有任何问题,或者您对uni-ui有一些好的建议,欢迎加入 uni-ui 交流群:871950839 \ No newline at end of file diff --git a/uni_modules/uni-row/changelog.md b/uni_modules/uni-row/changelog.md new file mode 100644 index 0000000..5b465bc --- /dev/null +++ b/uni_modules/uni-row/changelog.md @@ -0,0 +1,10 @@ +## 1.0.0(2021-11-19) +- 优化 组件UI,并提供设计资源,详见:[https://uniapp.dcloud.io/component/uniui/resource](https://uniapp.dcloud.io/component/uniui/resource) +- 文档迁移,详见:[https://uniapp.dcloud.io/component/uniui/uni-row](https://uniapp.dcloud.io/component/uniui/uni-row) +## 0.1.0(2021-07-13) +- 组件兼容 vue3,如何创建vue3项目,详见 [uni-app 项目支持 vue3 介绍](https://ask.dcloud.net.cn/article/37834) +## 0.0.4(2021-05-12) +- 新增 组件示例地址 +## 0.0.3(2021-02-05) +- 调整为uni_modules目录规范 +- 新增uni-row组件 diff --git a/uni_modules/uni-row/components/uni-col/uni-col.vue b/uni_modules/uni-row/components/uni-col/uni-col.vue new file mode 100644 index 0000000..84e2deb --- /dev/null +++ b/uni_modules/uni-row/components/uni-col/uni-col.vue @@ -0,0 +1,317 @@ + + + + + diff --git a/uni_modules/uni-row/components/uni-row/uni-row.vue b/uni_modules/uni-row/components/uni-row/uni-row.vue new file mode 100644 index 0000000..f8e8542 --- /dev/null +++ b/uni_modules/uni-row/components/uni-row/uni-row.vue @@ -0,0 +1,190 @@ + + + + + diff --git a/uni_modules/uni-row/package.json b/uni_modules/uni-row/package.json new file mode 100644 index 0000000..3f52fa6 --- /dev/null +++ b/uni_modules/uni-row/package.json @@ -0,0 +1,87 @@ +{ + "id": "uni-row", + "displayName": "uni-row 布局-行", + "version": "1.0.0", + "description": "流式栅格系统,随着屏幕或视口分为 24 份,可以迅速简便地创建布局。", + "keywords": [ + "uni-ui", + "uniui", + "栅格", + "布局", + "layout" +], + "repository": "https://github.com/dcloudio/uni-ui", + "engines": { + "HBuilderX": "" + }, + "directories": { + "example": "../../temps/example_temps" + }, + "dcloudext": { + "category": [ + "前端组件", + "通用组件" + ], + "sale": { + "regular": { + "price": "0.00" + }, + "sourcecode": { + "price": "0.00" + } + }, + "contact": { + "qq": "" + }, + "declaration": { + "ads": "无", + "data": "无", + "permissions": "无" + }, + "npmurl": "https://www.npmjs.com/package/@dcloudio/uni-ui" + }, + "uni_modules": { + "dependencies": ["uni-scss"], + "encrypt": [], + "platforms": { + "cloud": { + "tcb": "y", + "aliyun": "y" + }, + "client": { + "App": { + "app-vue": "y", + "app-nvue": "y" + }, + "H5-mobile": { + "Safari": "y", + "Android Browser": "y", + "微信浏览器(Android)": "y", + "QQ浏览器(Android)": "y" + }, + "H5-pc": { + "Chrome": "y", + "IE": "y", + "Edge": "y", + "Firefox": "y", + "Safari": "y" + }, + "小程序": { + "微信": "y", + "阿里": "y", + "百度": "y", + "字节跳动": "y", + "QQ": "y" + }, + "快应用": { + "华为": "u", + "联盟": "u" + }, + "Vue": { + "vue2": "y", + "vue3": "u" + } + } + } + } +} \ No newline at end of file diff --git a/uni_modules/uni-row/readme.md b/uni_modules/uni-row/readme.md new file mode 100644 index 0000000..3c9c8b9 --- /dev/null +++ b/uni_modules/uni-row/readme.md @@ -0,0 +1,10 @@ +## Layout 布局 + +> **组件名 uni-row、uni-col** +> 代码块: `uRow`、`uCol` + + +流式栅格系统,随着屏幕或视口分为 24 份,可以迅速简便地创建布局。 + +### [查看文档](https://uniapp.dcloud.io/component/uniui/uni-row) +#### 如使用过程中有任何问题,或者您对uni-ui有一些好的建议,欢迎加入 uni-ui 交流群:871950839 \ No newline at end of file diff --git a/uni_modules/uni-scss/changelog.md b/uni_modules/uni-scss/changelog.md new file mode 100644 index 0000000..b863bb0 --- /dev/null +++ b/uni_modules/uni-scss/changelog.md @@ -0,0 +1,8 @@ +## 1.0.3(2022-01-21) +- 优化 组件示例 +## 1.0.2(2021-11-22) +- 修复 / 符号在 vue 不同版本兼容问题引起的报错问题 +## 1.0.1(2021-11-22) +- 修复 vue3中scss语法兼容问题 +## 1.0.0(2021-11-18) +- init diff --git a/uni_modules/uni-scss/index.scss b/uni_modules/uni-scss/index.scss new file mode 100644 index 0000000..1744a5f --- /dev/null +++ b/uni_modules/uni-scss/index.scss @@ -0,0 +1 @@ +@import './styles/index.scss'; diff --git a/uni_modules/uni-scss/package.json b/uni_modules/uni-scss/package.json new file mode 100644 index 0000000..7cc0ccb --- /dev/null +++ b/uni_modules/uni-scss/package.json @@ -0,0 +1,82 @@ +{ + "id": "uni-scss", + "displayName": "uni-scss 辅助样式", + "version": "1.0.3", + "description": "uni-sass是uni-ui提供的一套全局样式 ,通过一些简单的类名和sass变量,实现简单的页面布局操作,比如颜色、边距、圆角等。", + "keywords": [ + "uni-scss", + "uni-ui", + "辅助样式" +], + "repository": "https://github.com/dcloudio/uni-ui", + "engines": { + "HBuilderX": "^3.1.0" + }, + "dcloudext": { + "category": [ + "JS SDK", + "通用 SDK" + ], + "sale": { + "regular": { + "price": "0.00" + }, + "sourcecode": { + "price": "0.00" + } + }, + "contact": { + "qq": "" + }, + "declaration": { + "ads": "无", + "data": "无", + "permissions": "无" + }, + "npmurl": "https://www.npmjs.com/package/@dcloudio/uni-ui" + }, + "uni_modules": { + "dependencies": [], + "encrypt": [], + "platforms": { + "cloud": { + "tcb": "y", + "aliyun": "y" + }, + "client": { + "App": { + "app-vue": "y", + "app-nvue": "u" + }, + "H5-mobile": { + "Safari": "y", + "Android Browser": "y", + "微信浏览器(Android)": "y", + "QQ浏览器(Android)": "y" + }, + "H5-pc": { + "Chrome": "y", + "IE": "y", + "Edge": "y", + "Firefox": "y", + "Safari": "y" + }, + "小程序": { + "微信": "y", + "阿里": "y", + "百度": "y", + "字节跳动": "y", + "QQ": "y" + }, + "快应用": { + "华为": "n", + "联盟": "n" + }, + "Vue": { + "vue2": "y", + "vue3": "y" + } + } + } + } +} diff --git a/uni_modules/uni-scss/readme.md b/uni_modules/uni-scss/readme.md new file mode 100644 index 0000000..b7d1c25 --- /dev/null +++ b/uni_modules/uni-scss/readme.md @@ -0,0 +1,4 @@ +`uni-sass` 是 `uni-ui`提供的一套全局样式 ,通过一些简单的类名和`sass`变量,实现简单的页面布局操作,比如颜色、边距、圆角等。 + +### [查看文档](https://uniapp.dcloud.io/component/uniui/uni-sass) +#### 如使用过程中有任何问题,或者您对uni-ui有一些好的建议,欢迎加入 uni-ui 交流群:871950839 \ No newline at end of file diff --git a/uni_modules/uni-scss/styles/index.scss b/uni_modules/uni-scss/styles/index.scss new file mode 100644 index 0000000..ffac4fe --- /dev/null +++ b/uni_modules/uni-scss/styles/index.scss @@ -0,0 +1,7 @@ +@import './setting/_variables.scss'; +@import './setting/_border.scss'; +@import './setting/_color.scss'; +@import './setting/_space.scss'; +@import './setting/_radius.scss'; +@import './setting/_text.scss'; +@import './setting/_styles.scss'; diff --git a/uni_modules/uni-scss/styles/setting/_border.scss b/uni_modules/uni-scss/styles/setting/_border.scss new file mode 100644 index 0000000..12a11c3 --- /dev/null +++ b/uni_modules/uni-scss/styles/setting/_border.scss @@ -0,0 +1,3 @@ +.uni-border { + border: 1px $uni-border-1 solid; +} \ No newline at end of file diff --git a/uni_modules/uni-scss/styles/setting/_color.scss b/uni_modules/uni-scss/styles/setting/_color.scss new file mode 100644 index 0000000..1ededd9 --- /dev/null +++ b/uni_modules/uni-scss/styles/setting/_color.scss @@ -0,0 +1,66 @@ + +// TODO 暂时不需要 class ,需要用户使用变量实现 ,如果使用类名其实并不推荐 +// @mixin get-styles($k,$c) { +// @if $k == size or $k == weight{ +// font-#{$k}:#{$c} +// }@else{ +// #{$k}:#{$c} +// } +// } +$uni-ui-color:( + // 主色 + primary: $uni-primary, + primary-disable: $uni-primary-disable, + primary-light: $uni-primary-light, + // 辅助色 + success: $uni-success, + success-disable: $uni-success-disable, + success-light: $uni-success-light, + warning: $uni-warning, + warning-disable: $uni-warning-disable, + warning-light: $uni-warning-light, + error: $uni-error, + error-disable: $uni-error-disable, + error-light: $uni-error-light, + info: $uni-info, + info-disable: $uni-info-disable, + info-light: $uni-info-light, + // 中性色 + main-color: $uni-main-color, + base-color: $uni-base-color, + secondary-color: $uni-secondary-color, + extra-color: $uni-extra-color, + // 背景色 + bg-color: $uni-bg-color, + // 边框颜色 + border-1: $uni-border-1, + border-2: $uni-border-2, + border-3: $uni-border-3, + border-4: $uni-border-4, + // 黑色 + black:$uni-black, + // 白色 + white:$uni-white, + // 透明 + transparent:$uni-transparent +) !default; +@each $key, $child in $uni-ui-color { + .uni-#{"" + $key} { + color: $child; + } + .uni-#{"" + $key}-bg { + background-color: $child; + } +} +.uni-shadow-sm { + box-shadow: $uni-shadow-sm; +} +.uni-shadow-base { + box-shadow: $uni-shadow-base; +} +.uni-shadow-lg { + box-shadow: $uni-shadow-lg; +} +.uni-mask { + background-color:$uni-mask; +} diff --git a/uni_modules/uni-scss/styles/setting/_radius.scss b/uni_modules/uni-scss/styles/setting/_radius.scss new file mode 100644 index 0000000..9a0428b --- /dev/null +++ b/uni_modules/uni-scss/styles/setting/_radius.scss @@ -0,0 +1,55 @@ +@mixin radius($r,$d:null ,$important: false){ + $radius-value:map-get($uni-radius, $r) if($important, !important, null); + // Key exists within the $uni-radius variable + @if (map-has-key($uni-radius, $r) and $d){ + @if $d == t { + border-top-left-radius:$radius-value; + border-top-right-radius:$radius-value; + }@else if $d == r { + border-top-right-radius:$radius-value; + border-bottom-right-radius:$radius-value; + }@else if $d == b { + border-bottom-left-radius:$radius-value; + border-bottom-right-radius:$radius-value; + }@else if $d == l { + border-top-left-radius:$radius-value; + border-bottom-left-radius:$radius-value; + }@else if $d == tl { + border-top-left-radius:$radius-value; + }@else if $d == tr { + border-top-right-radius:$radius-value; + }@else if $d == br { + border-bottom-right-radius:$radius-value; + }@else if $d == bl { + border-bottom-left-radius:$radius-value; + } + }@else{ + border-radius:$radius-value; + } +} + +@each $key, $child in $uni-radius { + @if($key){ + .uni-radius-#{"" + $key} { + @include radius($key) + } + }@else{ + .uni-radius { + @include radius($key) + } + } +} + +@each $direction in t, r, b, l,tl, tr, br, bl { + @each $key, $child in $uni-radius { + @if($key){ + .uni-radius-#{"" + $direction}-#{"" + $key} { + @include radius($key,$direction,false) + } + }@else{ + .uni-radius-#{$direction} { + @include radius($key,$direction,false) + } + } + } +} diff --git a/uni_modules/uni-scss/styles/setting/_space.scss b/uni_modules/uni-scss/styles/setting/_space.scss new file mode 100644 index 0000000..3c89528 --- /dev/null +++ b/uni_modules/uni-scss/styles/setting/_space.scss @@ -0,0 +1,56 @@ + +@mixin fn($space,$direction,$size,$n) { + @if $n { + #{$space}-#{$direction}: #{$size*$uni-space-root}px + } @else { + #{$space}-#{$direction}: #{-$size*$uni-space-root}px + } +} +@mixin get-styles($direction,$i,$space,$n){ + @if $direction == t { + @include fn($space, top,$i,$n); + } + @if $direction == r { + @include fn($space, right,$i,$n); + } + @if $direction == b { + @include fn($space, bottom,$i,$n); + } + @if $direction == l { + @include fn($space, left,$i,$n); + } + @if $direction == x { + @include fn($space, left,$i,$n); + @include fn($space, right,$i,$n); + } + @if $direction == y { + @include fn($space, top,$i,$n); + @include fn($space, bottom,$i,$n); + } + @if $direction == a { + @if $n { + #{$space}:#{$i*$uni-space-root}px; + } @else { + #{$space}:#{-$i*$uni-space-root}px; + } + } +} + +@each $orientation in m,p { + $space: margin; + @if $orientation == m { + $space: margin; + } @else { + $space: padding; + } + @for $i from 0 through 16 { + @each $direction in t, r, b, l, x, y, a { + .uni-#{$orientation}#{$direction}-#{$i} { + @include get-styles($direction,$i,$space,true); + } + .uni-#{$orientation}#{$direction}-n#{$i} { + @include get-styles($direction,$i,$space,false); + } + } + } +} \ No newline at end of file diff --git a/uni_modules/uni-scss/styles/setting/_styles.scss b/uni_modules/uni-scss/styles/setting/_styles.scss new file mode 100644 index 0000000..689afec --- /dev/null +++ b/uni_modules/uni-scss/styles/setting/_styles.scss @@ -0,0 +1,167 @@ +/* #ifndef APP-NVUE */ + +$-color-white:#fff; +$-color-black:#000; +@mixin base-style($color) { + color: #fff; + background-color: $color; + border-color: mix($-color-black, $color, 8%); + &:not([hover-class]):active { + background: mix($-color-black, $color, 10%); + border-color: mix($-color-black, $color, 20%); + color: $-color-white; + outline: none; + } +} +@mixin is-color($color) { + @include base-style($color); + &[loading] { + @include base-style($color); + &::before { + margin-right:5px; + } + } + &[disabled] { + &, + &[loading], + &:not([hover-class]):active { + color: $-color-white; + border-color: mix(darken($color,10%), $-color-white); + background-color: mix($color, $-color-white); + } + } + +} +@mixin base-plain-style($color) { + color:$color; + background-color: mix($-color-white, $color, 90%); + border-color: mix($-color-white, $color, 70%); + &:not([hover-class]):active { + background: mix($-color-white, $color, 80%); + color: $color; + outline: none; + border-color: mix($-color-white, $color, 50%); + } +} +@mixin is-plain($color){ + &[plain] { + @include base-plain-style($color); + &[loading] { + @include base-plain-style($color); + &::before { + margin-right:5px; + } + } + &[disabled] { + &, + &:active { + color: mix($-color-white, $color, 40%); + background-color: mix($-color-white, $color, 90%); + border-color: mix($-color-white, $color, 80%); + } + } + } +} + + +.uni-btn { + margin: 5px; + color: #393939; + border:1px solid #ccc; + font-size: 16px; + font-weight: 200; + background-color: #F9F9F9; + // TODO 暂时处理边框隐藏一边的问题 + overflow: visible; + &::after{ + border: none; + } + + &:not([type]),&[type=default] { + color: #999; + &[loading] { + background: none; + &::before { + margin-right:5px; + } + } + + + + &[disabled]{ + color: mix($-color-white, #999, 60%); + &, + &[loading], + &:active { + color: mix($-color-white, #999, 60%); + background-color: mix($-color-white,$-color-black , 98%); + border-color: mix($-color-white, #999, 85%); + } + } + + &[plain] { + color: #999; + background: none; + border-color: $uni-border-1; + &:not([hover-class]):active { + background: none; + color: mix($-color-white, $-color-black, 80%); + border-color: mix($-color-white, $-color-black, 90%); + outline: none; + } + &[disabled]{ + &, + &[loading], + &:active { + background: none; + color: mix($-color-white, #999, 60%); + border-color: mix($-color-white, #999, 85%); + } + } + } + } + + &:not([hover-class]):active { + color: mix($-color-white, $-color-black, 50%); + } + + &[size=mini] { + font-size: 16px; + font-weight: 200; + border-radius: 8px; + } + + + + &.uni-btn-small { + font-size: 14px; + } + &.uni-btn-mini { + font-size: 12px; + } + + &.uni-btn-radius { + border-radius: 999px; + } + &[type=primary] { + @include is-color($uni-primary); + @include is-plain($uni-primary) + } + &[type=success] { + @include is-color($uni-success); + @include is-plain($uni-success) + } + &[type=error] { + @include is-color($uni-error); + @include is-plain($uni-error) + } + &[type=warning] { + @include is-color($uni-warning); + @include is-plain($uni-warning) + } + &[type=info] { + @include is-color($uni-info); + @include is-plain($uni-info) + } +} +/* #endif */ diff --git a/uni_modules/uni-scss/styles/setting/_text.scss b/uni_modules/uni-scss/styles/setting/_text.scss new file mode 100644 index 0000000..a34d08f --- /dev/null +++ b/uni_modules/uni-scss/styles/setting/_text.scss @@ -0,0 +1,24 @@ +@mixin get-styles($k,$c) { + @if $k == size or $k == weight{ + font-#{$k}:#{$c} + }@else{ + #{$k}:#{$c} + } +} + +@each $key, $child in $uni-headings { + /* #ifndef APP-NVUE */ + .uni-#{$key} { + @each $k, $c in $child { + @include get-styles($k,$c) + } + } + /* #endif */ + /* #ifdef APP-NVUE */ + .container .uni-#{$key} { + @each $k, $c in $child { + @include get-styles($k,$c) + } + } + /* #endif */ +} diff --git a/uni_modules/uni-scss/styles/setting/_variables.scss b/uni_modules/uni-scss/styles/setting/_variables.scss new file mode 100644 index 0000000..557d3d7 --- /dev/null +++ b/uni_modules/uni-scss/styles/setting/_variables.scss @@ -0,0 +1,146 @@ +// @use "sass:math"; +@import '../tools/functions.scss'; +// 间距基础倍数 +$uni-space-root: 2 !default; +// 边框半径默认值 +$uni-radius-root:5px !default; +$uni-radius: () !default; +// 边框半径断点 +$uni-radius: map-deep-merge( + ( + 0: 0, + // TODO 当前版本暂时不支持 sm 属性 + // 'sm': math.div($uni-radius-root, 2), + null: $uni-radius-root, + 'lg': $uni-radius-root * 2, + 'xl': $uni-radius-root * 6, + 'pill': 9999px, + 'circle': 50% + ), + $uni-radius +); +// 字体家族 +$body-font-family: 'Roboto', sans-serif !default; +// 文本 +$heading-font-family: $body-font-family !default; +$uni-headings: () !default; +$letterSpacing: -0.01562em; +$uni-headings: map-deep-merge( + ( + 'h1': ( + size: 32px, + weight: 300, + line-height: 50px, + // letter-spacing:-0.01562em + ), + 'h2': ( + size: 28px, + weight: 300, + line-height: 40px, + // letter-spacing: -0.00833em + ), + 'h3': ( + size: 24px, + weight: 400, + line-height: 32px, + // letter-spacing: normal + ), + 'h4': ( + size: 20px, + weight: 400, + line-height: 30px, + // letter-spacing: 0.00735em + ), + 'h5': ( + size: 16px, + weight: 400, + line-height: 24px, + // letter-spacing: normal + ), + 'h6': ( + size: 14px, + weight: 500, + line-height: 18px, + // letter-spacing: 0.0125em + ), + 'subtitle': ( + size: 12px, + weight: 400, + line-height: 20px, + // letter-spacing: 0.00937em + ), + 'body': ( + font-size: 14px, + font-weight: 400, + line-height: 22px, + // letter-spacing: 0.03125em + ), + 'caption': ( + 'size': 12px, + 'weight': 400, + 'line-height': 20px, + // 'letter-spacing': 0.03333em, + // 'text-transform': false + ) + ), + $uni-headings +); + + + +// 主色 +$uni-primary: #2979ff !default; +$uni-primary-disable:lighten($uni-primary,20%) !default; +$uni-primary-light: lighten($uni-primary,25%) !default; + +// 辅助色 +// 除了主色外的场景色,需要在不同的场景中使用(例如危险色表示危险的操作)。 +$uni-success: #18bc37 !default; +$uni-success-disable:lighten($uni-success,20%) !default; +$uni-success-light: lighten($uni-success,25%) !default; + +$uni-warning: #f3a73f !default; +$uni-warning-disable:lighten($uni-warning,20%) !default; +$uni-warning-light: lighten($uni-warning,25%) !default; + +$uni-error: #e43d33 !default; +$uni-error-disable:lighten($uni-error,20%) !default; +$uni-error-light: lighten($uni-error,25%) !default; + +$uni-info: #8f939c !default; +$uni-info-disable:lighten($uni-info,20%) !default; +$uni-info-light: lighten($uni-info,25%) !default; + +// 中性色 +// 中性色用于文本、背景和边框颜色。通过运用不同的中性色,来表现层次结构。 +$uni-main-color: #3a3a3a !default; // 主要文字 +$uni-base-color: #6a6a6a !default; // 常规文字 +$uni-secondary-color: #909399 !default; // 次要文字 +$uni-extra-color: #c7c7c7 !default; // 辅助说明 + +// 边框颜色 +$uni-border-1: #F0F0F0 !default; +$uni-border-2: #EDEDED !default; +$uni-border-3: #DCDCDC !default; +$uni-border-4: #B9B9B9 !default; + +// 常规色 +$uni-black: #000000 !default; +$uni-white: #ffffff !default; +$uni-transparent: rgba($color: #000000, $alpha: 0) !default; + +// 背景色 +$uni-bg-color: #f7f7f7 !default; + +/* 水平间距 */ +$uni-spacing-sm: 8px !default; +$uni-spacing-base: 15px !default; +$uni-spacing-lg: 30px !default; + +// 阴影 +$uni-shadow-sm:0 0 5px rgba($color: #d8d8d8, $alpha: 0.5) !default; +$uni-shadow-base:0 1px 8px 1px rgba($color: #a5a5a5, $alpha: 0.2) !default; +$uni-shadow-lg:0px 1px 10px 2px rgba($color: #a5a4a4, $alpha: 0.5) !default; + +// 蒙版 +$uni-mask: rgba($color: #000000, $alpha: 0.4) !default; diff --git a/uni_modules/uni-scss/styles/tools/functions.scss b/uni_modules/uni-scss/styles/tools/functions.scss new file mode 100644 index 0000000..ac6f63e --- /dev/null +++ b/uni_modules/uni-scss/styles/tools/functions.scss @@ -0,0 +1,19 @@ +// 合并 map +@function map-deep-merge($parent-map, $child-map){ + $result: $parent-map; + @each $key, $child in $child-map { + $parent-has-key: map-has-key($result, $key); + $parent-value: map-get($result, $key); + $parent-type: type-of($parent-value); + $child-type: type-of($child); + $parent-is-map: $parent-type == map; + $child-is-map: $child-type == map; + + @if (not $parent-has-key) or ($parent-type != $child-type) or (not ($parent-is-map and $child-is-map)){ + $result: map-merge($result, ( $key: $child )); + }@else { + $result: map-merge($result, ( $key: map-deep-merge($parent-value, $child) )); + } + } + @return $result; +}; diff --git a/uni_modules/uni-scss/theme.scss b/uni_modules/uni-scss/theme.scss new file mode 100644 index 0000000..80ee62f --- /dev/null +++ b/uni_modules/uni-scss/theme.scss @@ -0,0 +1,31 @@ +// 间距基础倍数 +$uni-space-root: 2; +// 边框半径默认值 +$uni-radius-root:5px; +// 主色 +$uni-primary: #2979ff; +// 辅助色 +$uni-success: #4cd964; +// 警告色 +$uni-warning: #f0ad4e; +// 错误色 +$uni-error: #dd524d; +// 描述色 +$uni-info: #909399; +// 中性色 +$uni-main-color: #303133; +$uni-base-color: #606266; +$uni-secondary-color: #909399; +$uni-extra-color: #C0C4CC; +// 背景色 +$uni-bg-color: #f5f5f5; +// 边框颜色 +$uni-border-1: #DCDFE6; +$uni-border-2: #E4E7ED; +$uni-border-3: #EBEEF5; +$uni-border-4: #F2F6FC; + +// 常规色 +$uni-black: #000000; +$uni-white: #ffffff; +$uni-transparent: rgba($color: #000000, $alpha: 0); diff --git a/uni_modules/uni-scss/variables.scss b/uni_modules/uni-scss/variables.scss new file mode 100644 index 0000000..1c062d4 --- /dev/null +++ b/uni_modules/uni-scss/variables.scss @@ -0,0 +1,62 @@ +@import './styles/setting/_variables.scss'; +// 间距基础倍数 +$uni-space-root: 2; +// 边框半径默认值 +$uni-radius-root:5px; + +// 主色 +$uni-primary: #2979ff; +$uni-primary-disable:mix(#fff,$uni-primary,50%); +$uni-primary-light: mix(#fff,$uni-primary,80%); + +// 辅助色 +// 除了主色外的场景色,需要在不同的场景中使用(例如危险色表示危险的操作)。 +$uni-success: #18bc37; +$uni-success-disable:mix(#fff,$uni-success,50%); +$uni-success-light: mix(#fff,$uni-success,80%); + +$uni-warning: #f3a73f; +$uni-warning-disable:mix(#fff,$uni-warning,50%); +$uni-warning-light: mix(#fff,$uni-warning,80%); + +$uni-error: #e43d33; +$uni-error-disable:mix(#fff,$uni-error,50%); +$uni-error-light: mix(#fff,$uni-error,80%); + +$uni-info: #8f939c; +$uni-info-disable:mix(#fff,$uni-info,50%); +$uni-info-light: mix(#fff,$uni-info,80%); + +// 中性色 +// 中性色用于文本、背景和边框颜色。通过运用不同的中性色,来表现层次结构。 +$uni-main-color: #3a3a3a; // 主要文字 +$uni-base-color: #6a6a6a; // 常规文字 +$uni-secondary-color: #909399; // 次要文字 +$uni-extra-color: #c7c7c7; // 辅助说明 + +// 边框颜色 +$uni-border-1: #F0F0F0; +$uni-border-2: #EDEDED; +$uni-border-3: #DCDCDC; +$uni-border-4: #B9B9B9; + +// 常规色 +$uni-black: #000000; +$uni-white: #ffffff; +$uni-transparent: rgba($color: #000000, $alpha: 0); + +// 背景色 +$uni-bg-color: #f7f7f7; + +/* 水平间距 */ +$uni-spacing-sm: 8px; +$uni-spacing-base: 15px; +$uni-spacing-lg: 30px; + +// 阴影 +$uni-shadow-sm:0 0 5px rgba($color: #d8d8d8, $alpha: 0.5); +$uni-shadow-base:0 1px 8px 1px rgba($color: #a5a5a5, $alpha: 0.2); +$uni-shadow-lg:0px 1px 10px 2px rgba($color: #a5a4a4, $alpha: 0.5); + +// 蒙版 +$uni-mask: rgba($color: #000000, $alpha: 0.4); diff --git a/uni_modules/uni-search-bar/changelog.md b/uni_modules/uni-search-bar/changelog.md new file mode 100644 index 0000000..b41fdd3 --- /dev/null +++ b/uni_modules/uni-search-bar/changelog.md @@ -0,0 +1,33 @@ +## 1.2.3(2022-05-24) +- 新增 readonly 属性,组件只读 +## 1.2.2(2022-05-06) +- 修复 vue3 input 事件不生效的bug +## 1.2.1(2022-05-06) +- 修复 多余代码导致的bug +## 1.2.0(2021-11-19) +- 优化 组件UI,并提供设计资源,详见:[https://uniapp.dcloud.io/component/uniui/resource](https://uniapp.dcloud.io/component/uniui/resource) +- 文档迁移,详见:[https://uniapp.dcloud.io/component/uniui/uni-search-bar](https://uniapp.dcloud.io/component/uniui/uni-search-bar) +## 1.1.2(2021-08-30) +- 修复 value 属性与 modelValue 属性不兼容的Bug +## 1.1.1(2021-08-24) +- 新增 支持国际化 +## 1.1.0(2021-07-30) +- 组件兼容 vue3,如何创建vue3项目,详见 [uni-app 项目支持 vue3 介绍](https://ask.dcloud.net.cn/article/37834) +## 1.0.9(2021-05-12) +- 新增 项目示例地址 +## 1.0.8(2021-04-21) +- 优化 添加依赖 uni-icons, 导入后自动下载依赖 +## 1.0.7(2021-04-15) +- uni-ui 新增 uni-search-bar 的 focus 事件 + +## 1.0.6(2021-02-05) +- 优化 组件引用关系,通过uni_modules引用组件 + +## 1.0.5(2021-02-05) +- 调整为uni_modules目录规范 +- 新增 支持双向绑定 +- 更改 input 事件的返回值,e={value:Number} --> e=value +- 新增 支持图标插槽 +- 新增 支持 clear、blur 事件 +- 新增 支持 focus 属性 +- 去掉组件背景色 diff --git a/uni_modules/uni-search-bar/components/uni-search-bar/i18n/en.json b/uni_modules/uni-search-bar/components/uni-search-bar/i18n/en.json new file mode 100644 index 0000000..dd083a5 --- /dev/null +++ b/uni_modules/uni-search-bar/components/uni-search-bar/i18n/en.json @@ -0,0 +1,4 @@ +{ + "uni-search-bar.cancel": "cancel", + "uni-search-bar.placeholder": "Search enter content" +} \ No newline at end of file diff --git a/uni_modules/uni-search-bar/components/uni-search-bar/i18n/index.js b/uni_modules/uni-search-bar/components/uni-search-bar/i18n/index.js new file mode 100644 index 0000000..de7509c --- /dev/null +++ b/uni_modules/uni-search-bar/components/uni-search-bar/i18n/index.js @@ -0,0 +1,8 @@ +import en from './en.json' +import zhHans from './zh-Hans.json' +import zhHant from './zh-Hant.json' +export default { + en, + 'zh-Hans': zhHans, + 'zh-Hant': zhHant +} diff --git a/uni_modules/uni-search-bar/components/uni-search-bar/i18n/zh-Hans.json b/uni_modules/uni-search-bar/components/uni-search-bar/i18n/zh-Hans.json new file mode 100644 index 0000000..d4e5c12 --- /dev/null +++ b/uni_modules/uni-search-bar/components/uni-search-bar/i18n/zh-Hans.json @@ -0,0 +1,4 @@ +{ + "uni-search-bar.cancel": "cancel", + "uni-search-bar.placeholder": "请输入搜索内容" +} diff --git a/uni_modules/uni-search-bar/components/uni-search-bar/i18n/zh-Hant.json b/uni_modules/uni-search-bar/components/uni-search-bar/i18n/zh-Hant.json new file mode 100644 index 0000000..318b6ef --- /dev/null +++ b/uni_modules/uni-search-bar/components/uni-search-bar/i18n/zh-Hant.json @@ -0,0 +1,4 @@ +{ + "uni-search-bar.cancel": "cancel", + "uni-search-bar.placeholder": "請輸入搜索內容" +} diff --git a/uni_modules/uni-search-bar/components/uni-search-bar/uni-search-bar.vue b/uni_modules/uni-search-bar/components/uni-search-bar/uni-search-bar.vue new file mode 100644 index 0000000..5a518a8 --- /dev/null +++ b/uni_modules/uni-search-bar/components/uni-search-bar/uni-search-bar.vue @@ -0,0 +1,298 @@ + + + + + diff --git a/uni_modules/uni-search-bar/package.json b/uni_modules/uni-search-bar/package.json new file mode 100644 index 0000000..9352c57 --- /dev/null +++ b/uni_modules/uni-search-bar/package.json @@ -0,0 +1,89 @@ +{ + "id": "uni-search-bar", + "displayName": "uni-search-bar 搜索栏", + "version": "1.2.3", + "description": "搜索栏组件,通常用于搜索商品、文章等", + "keywords": [ + "uni-ui", + "uniui", + "搜索框", + "搜索栏" +], + "repository": "https://github.com/dcloudio/uni-ui", + "engines": { + "HBuilderX": "" + }, + "directories": { + "example": "../../temps/example_temps" + }, + "dcloudext": { + "category": [ + "前端组件", + "通用组件" + ], + "sale": { + "regular": { + "price": "0.00" + }, + "sourcecode": { + "price": "0.00" + } + }, + "contact": { + "qq": "" + }, + "declaration": { + "ads": "无", + "data": "无", + "permissions": "无" + }, + "npmurl": "https://www.npmjs.com/package/@dcloudio/uni-ui" + }, + "uni_modules": { + "dependencies": [ + "uni-scss", + "uni-icons" + ], + "encrypt": [], + "platforms": { + "cloud": { + "tcb": "y", + "aliyun": "y" + }, + "client": { + "App": { + "app-vue": "y", + "app-nvue": "y" + }, + "H5-mobile": { + "Safari": "y", + "Android Browser": "y", + "微信浏览器(Android)": "y", + "QQ浏览器(Android)": "y" + }, + "H5-pc": { + "Chrome": "y", + "IE": "y", + "Edge": "y", + "Firefox": "y", + "Safari": "y" + }, + "小程序": { + "微信": "y", + "阿里": "y", + "百度": "y", + "字节跳动": "y", + "QQ": "y" + }, + "快应用": { + "华为": "u", + "联盟": "u" + }, + "Vue": { + "vue2": "y", + "vue3": "y" + } + } + } + } +} \ No newline at end of file diff --git a/uni_modules/uni-search-bar/readme.md b/uni_modules/uni-search-bar/readme.md new file mode 100644 index 0000000..253092f --- /dev/null +++ b/uni_modules/uni-search-bar/readme.md @@ -0,0 +1,14 @@ + + +## SearchBar 搜索栏 + +> **组件名:uni-search-bar** +> 代码块: `uSearchBar` + + +搜索栏组件 + +### [查看文档](https://uniapp.dcloud.io/component/uniui/uni-search-bar) +#### 如使用过程中有任何问题,或者您对uni-ui有一些好的建议,欢迎加入 uni-ui 交流群:871950839 + + diff --git a/uni_modules/uni-segmented-control/changelog.md b/uni_modules/uni-segmented-control/changelog.md new file mode 100644 index 0000000..a44385d --- /dev/null +++ b/uni_modules/uni-segmented-control/changelog.md @@ -0,0 +1,9 @@ +## 1.2.0(2021-11-19) +- 优化 组件UI,并提供设计资源,详见:[https://uniapp.dcloud.io/component/uniui/resource](https://uniapp.dcloud.io/component/uniui/resource) +- 文档迁移,详见:[https://uniapp.dcloud.io/component/uniui/uni-segmented-control](https://uniapp.dcloud.io/component/uniui/uni-segmented-control) +## 1.1.0(2021-07-30) +- 组件兼容 vue3,如何创建vue3项目,详见 [uni-app 项目支持 vue3 介绍](https://ask.dcloud.net.cn/article/37834) +## 1.0.5(2021-05-12) +- 新增 项目示例地址 +## 1.0.4(2021-02-05) +- 调整为uni_modules目录规范 diff --git a/uni_modules/uni-segmented-control/components/uni-segmented-control/uni-segmented-control.vue b/uni_modules/uni-segmented-control/components/uni-segmented-control/uni-segmented-control.vue new file mode 100644 index 0000000..044a495 --- /dev/null +++ b/uni_modules/uni-segmented-control/components/uni-segmented-control/uni-segmented-control.vue @@ -0,0 +1,145 @@ + + + + + diff --git a/uni_modules/uni-segmented-control/package.json b/uni_modules/uni-segmented-control/package.json new file mode 100644 index 0000000..6cae41d --- /dev/null +++ b/uni_modules/uni-segmented-control/package.json @@ -0,0 +1,87 @@ +{ + "id": "uni-segmented-control", + "displayName": "uni-segmented-control 分段器", + "version": "1.2.0", + "description": "分段器由至少 2 个分段控件组成,用作不同视图的显示", + "keywords": [ + "uni-ui", + "uniui", + "分段器", + "segement", + "顶部选择" +], + "repository": "https://github.com/dcloudio/uni-ui", + "engines": { + "HBuilderX": "" + }, + "directories": { + "example": "../../temps/example_temps" + }, + "dcloudext": { + "category": [ + "前端组件", + "通用组件" + ], + "sale": { + "regular": { + "price": "0.00" + }, + "sourcecode": { + "price": "0.00" + } + }, + "contact": { + "qq": "" + }, + "declaration": { + "ads": "无", + "data": "无", + "permissions": "无" + }, + "npmurl": "https://www.npmjs.com/package/@dcloudio/uni-ui" + }, + "uni_modules": { + "dependencies": ["uni-scss"], + "encrypt": [], + "platforms": { + "cloud": { + "tcb": "y", + "aliyun": "y" + }, + "client": { + "App": { + "app-vue": "y", + "app-nvue": "y" + }, + "H5-mobile": { + "Safari": "y", + "Android Browser": "y", + "微信浏览器(Android)": "y", + "QQ浏览器(Android)": "y" + }, + "H5-pc": { + "Chrome": "y", + "IE": "y", + "Edge": "y", + "Firefox": "y", + "Safari": "y" + }, + "小程序": { + "微信": "y", + "阿里": "y", + "百度": "y", + "字节跳动": "y", + "QQ": "y" + }, + "快应用": { + "华为": "u", + "联盟": "u" + }, + "Vue": { + "vue2": "y", + "vue3": "y" + } + } + } + } +} \ No newline at end of file diff --git a/uni_modules/uni-segmented-control/readme.md b/uni_modules/uni-segmented-control/readme.md new file mode 100644 index 0000000..3527b03 --- /dev/null +++ b/uni_modules/uni-segmented-control/readme.md @@ -0,0 +1,13 @@ + + +## SegmentedControl 分段器 +> **组件名:uni-segmented-control** +> 代码块: `uSegmentedControl` + + +用作不同视图的显示 + +### [查看文档](https://uniapp.dcloud.io/component/uniui/uni-segmented-control) +#### 如使用过程中有任何问题,或者您对uni-ui有一些好的建议,欢迎加入 uni-ui 交流群:871950839 + + diff --git a/uni_modules/uni-steps/changelog.md b/uni_modules/uni-steps/changelog.md new file mode 100644 index 0000000..cb9d367 --- /dev/null +++ b/uni_modules/uni-steps/changelog.md @@ -0,0 +1,16 @@ +## 1.1.1(2021-11-22) +- 修复 vue3中某些scss变量无法找到的问题 +## 1.1.0(2021-11-19) +- 优化 组件UI,并提供设计资源,详见:[https://uniapp.dcloud.io/component/uniui/resource](https://uniapp.dcloud.io/component/uniui/resource) +- 文档迁移,详见:[https://uniapp.dcloud.io/component/uniui/uni-steps](https://uniapp.dcloud.io/component/uniui/uni-steps) +## 1.0.8(2021-05-12) +- 新增 项目示例地址 +## 1.0.7(2021-05-06) +- 修复 uni-steps 横向布局时,多行文字高度不合理的 bug +## 1.0.6(2021-04-21) +- 优化 添加依赖 uni-icons, 导入后自动下载依赖 +## 1.0.5(2021-02-05) +- 优化 组件引用关系,通过uni_modules引用组件 + +## 1.0.4(2021-02-05) +- 调整为uni_modules目录规范 diff --git a/uni_modules/uni-steps/components/uni-steps/uni-steps.vue b/uni_modules/uni-steps/components/uni-steps/uni-steps.vue new file mode 100644 index 0000000..a6c8f28 --- /dev/null +++ b/uni_modules/uni-steps/components/uni-steps/uni-steps.vue @@ -0,0 +1,269 @@ + + + + + diff --git a/uni_modules/uni-steps/package.json b/uni_modules/uni-steps/package.json new file mode 100644 index 0000000..c687b40 --- /dev/null +++ b/uni_modules/uni-steps/package.json @@ -0,0 +1,89 @@ +{ + "id": "uni-steps", + "displayName": "uni-steps 步骤条", + "version": "1.1.1", + "description": "步骤条组件,提供横向和纵向两种布局格式。", + "keywords": [ + "uni-ui", + "uniui", + "步骤条", + "时间轴" +], + "repository": "https://github.com/dcloudio/uni-ui", + "engines": { + "HBuilderX": "" + }, + "directories": { + "example": "../../temps/example_temps" + }, + "dcloudext": { + "category": [ + "前端组件", + "通用组件" + ], + "sale": { + "regular": { + "price": "0.00" + }, + "sourcecode": { + "price": "0.00" + } + }, + "contact": { + "qq": "" + }, + "declaration": { + "ads": "无", + "data": "无", + "permissions": "无" + }, + "npmurl": "https://www.npmjs.com/package/@dcloudio/uni-ui" + }, + "uni_modules": { + "dependencies": [ + "uni-scss", + "uni-icons" + ], + "encrypt": [], + "platforms": { + "cloud": { + "tcb": "y", + "aliyun": "y" + }, + "client": { + "App": { + "app-vue": "y", + "app-nvue": "y" + }, + "H5-mobile": { + "Safari": "y", + "Android Browser": "y", + "微信浏览器(Android)": "y", + "QQ浏览器(Android)": "y" + }, + "H5-pc": { + "Chrome": "y", + "IE": "y", + "Edge": "y", + "Firefox": "y", + "Safari": "y" + }, + "小程序": { + "微信": "y", + "阿里": "y", + "百度": "y", + "字节跳动": "y", + "QQ": "y" + }, + "快应用": { + "华为": "u", + "联盟": "u" + }, + "Vue": { + "vue2": "y", + "vue3": "y" + } + } + } + } +} \ No newline at end of file diff --git a/uni_modules/uni-steps/readme.md b/uni_modules/uni-steps/readme.md new file mode 100644 index 0000000..da7a4bf --- /dev/null +++ b/uni_modules/uni-steps/readme.md @@ -0,0 +1,13 @@ + + +## Steps 步骤条 +> **组件名:uni-steps** +> 代码块: `uSteps` + + +步骤条,常用于显示进度 + +### [查看文档](https://uniapp.dcloud.io/component/uniui/uni-steps) +#### 如使用过程中有任何问题,或者您对uni-ui有一些好的建议,欢迎加入 uni-ui 交流群:871950839 + + diff --git a/uni_modules/uni-swipe-action/changelog.md b/uni_modules/uni-swipe-action/changelog.md new file mode 100644 index 0000000..d72fe10 --- /dev/null +++ b/uni_modules/uni-swipe-action/changelog.md @@ -0,0 +1,39 @@ +## 1.3.6(2022-05-31) +- 修复 h5端点击click触发两次的Bug +## 1.3.5(2022-05-23) +- 修复 isPC 找不到的Bug +## 1.3.4(2022-05-19) +- 修复 在 nvue 下 disabled 失效的bug +## 1.3.3(2022-03-31) +- 修复 按钮字体大小不能设置的bug +## 1.3.2(2022-03-16) +- 修复 h5和app端下报el错误的bug +## 1.3.1(2022-03-07) +- 修复 HBuilderX 1.4.X 版本中,h5和app端下报错的bug +## 1.3.0(2021-11-19) +- 优化 组件UI,并提供设计资源,详见:[https://uniapp.dcloud.io/component/uniui/resource](https://uniapp.dcloud.io/component/uniui/resource) +- 文档迁移,详见:[https://uniapp.dcloud.io/component/uniui/uni-swipe-action](https://uniapp.dcloud.io/component/uniui/uni-swipe-action) +## 1.2.4(2021-08-20) +- 优化 close-all 方法 +## 1.2.3(2021-08-20) +- 新增 close-all 方法,关闭所有已打开的组件 +## 1.2.2(2021-08-17) +- 新增 resize() 方法,在非微信小程序、h5、app-vue端出现不能滑动的问题的时候,重置组件 +- 修复 app 端偶尔出现类似 Page[x][-x,xx;-x,xx,x,x-x] 的问题 +- 优化 微信小程序、h5、app-vue 滑动逻辑,避免出现动态新增组件后不能滑动的问题 +## 1.2.1(2021-07-30) +- 组件兼容 vue3,如何创建vue3项目,详见 [uni-app 项目支持 vue3 介绍](https://ask.dcloud.net.cn/article/37834) +- 修复 跨页面修改组件数据 ,导致不能滑动的问题 +## 1.1.10(2021-06-17) +- 修复 按钮点击执行两次的bug +## 1.1.9(2021-05-12) +- 新增 项目示例地址 +## 1.1.8(2021-03-26) +- 修复 微信小程序 nv_navigator is not defined 报错的bug +## 1.1.7(2021-02-05) +- 调整为uni_modules目录规范 +- 新增 左侧滑动 +- 新增 插槽使用方式 +- 新增 threshold 属性,可以控制滑动缺省值 +- 优化 长列表滚动性能 +- 修复 滚动页面时触发组件滑动的Bug diff --git a/uni_modules/uni-swipe-action/components/uni-swipe-action-item/bindingx.js b/uni_modules/uni-swipe-action/components/uni-swipe-action-item/bindingx.js new file mode 100644 index 0000000..305e6d0 --- /dev/null +++ b/uni_modules/uni-swipe-action/components/uni-swipe-action-item/bindingx.js @@ -0,0 +1,302 @@ +let bindIngXMixins = {} + +// #ifdef APP-NVUE +const BindingX = uni.requireNativePlugin('bindingx'); +const dom = uni.requireNativePlugin('dom'); +const animation = uni.requireNativePlugin('animation'); + +bindIngXMixins = { + data() { + return {} + }, + + watch: { + show(newVal) { + if (this.autoClose) return + if (this.stop) return + this.stop = true + if (newVal) { + this.open(newVal) + } else { + this.close() + } + }, + leftOptions() { + this.getSelectorQuery() + this.init() + }, + rightOptions(newVal) { + this.init() + } + }, + created() { + this.swipeaction = this.getSwipeAction() + if (this.swipeaction.children !== undefined) { + this.swipeaction.children.push(this) + } + }, + mounted() { + this.box = this.getEl(this.$refs['selector-box--hock']) + this.selector = this.getEl(this.$refs['selector-content--hock']); + this.leftButton = this.getEl(this.$refs['selector-left-button--hock']); + this.rightButton = this.getEl(this.$refs['selector-right-button--hock']); + this.init() + }, + // beforeDestroy() { + // this.swipeaction.children.forEach((item, index) => { + // if (item === this) { + // this.swipeaction.children.splice(index, 1) + // } + // }) + // }, + methods: { + init() { + this.$nextTick(() => { + this.x = 0 + this.button = { + show: false + } + setTimeout(() => { + this.getSelectorQuery() + }, 200) + }) + }, + onClick(index, item, position) { + this.$emit('click', { + content: item, + index, + position + }) + }, + touchstart(e) { + // fix by mehaotian 禁止滑动 + if(this.disabled) return + // 每次只触发一次,避免多次监听造成闪烁 + if (this.stop) return + this.stop = true + if (this.autoClose) { + this.swipeaction.closeOther(this) + } + + const leftWidth = this.button.left.width + const rightWidth = this.button.right.width + let expression = this.range(this.x, -rightWidth, leftWidth) + let leftExpression = this.range(this.x - leftWidth, -leftWidth, 0) + let rightExpression = this.range(this.x + rightWidth, 0, rightWidth) + + this.eventpan = BindingX.bind({ + anchor: this.box, + eventType: 'pan', + props: [{ + element: this.selector, + property: 'transform.translateX', + expression + }, { + element: this.leftButton, + property: 'transform.translateX', + expression: leftExpression + }, { + element: this.rightButton, + property: 'transform.translateX', + expression: rightExpression + }, ] + }, (e) => { + // nope + if (e.state === 'end') { + this.x = e.deltaX + this.x; + this.isclick = true + this.bindTiming(e.deltaX) + } + }); + }, + touchend(e) { + if (this.isopen !== 'none' && !this.isclick) { + this.open('none') + } + }, + bindTiming(x) { + const left = this.x + const leftWidth = this.button.left.width + const rightWidth = this.button.right.width + const threshold = this.threshold + if (!this.isopen || this.isopen === 'none') { + if (left > threshold) { + this.open('left') + } else if (left < -threshold) { + this.open('right') + } else { + this.open('none') + } + } else { + if ((x > -leftWidth && x < 0) || x > rightWidth) { + if ((x > -threshold && x < 0) || (x - rightWidth > threshold)) { + this.open('left') + } else { + this.open('none') + } + } else { + if ((x < threshold && x > 0) || (x + leftWidth < -threshold)) { + this.open('right') + } else { + this.open('none') + } + } + } + }, + + /** + * 移动范围 + * @param {Object} num + * @param {Object} mix + * @param {Object} max + */ + range(num, mix, max) { + return `min(max(x+${num}, ${mix}), ${max})` + }, + + /** + * 开启swipe + */ + open(type) { + this.animation(type) + }, + + /** + * 关闭swipe + */ + close() { + this.animation('none') + }, + + /** + * 开启关闭动画 + * @param {Object} type + */ + animation(type) { + const time = 300 + const leftWidth = this.button.left.width + const rightWidth = this.button.right.width + if (this.eventpan && this.eventpan.token) { + BindingX.unbind({ + token: this.eventpan.token, + eventType: 'pan' + }) + } + + switch (type) { + case 'left': + Promise.all([ + this.move(this.selector, leftWidth), + this.move(this.leftButton, 0), + this.move(this.rightButton, rightWidth * 2) + ]).then(() => { + this.setEmit(leftWidth, type) + }) + break + case 'right': + Promise.all([ + this.move(this.selector, -rightWidth), + this.move(this.leftButton, -leftWidth * 2), + this.move(this.rightButton, 0) + ]).then(() => { + this.setEmit(-rightWidth, type) + }) + break + default: + Promise.all([ + this.move(this.selector, 0), + this.move(this.leftButton, -leftWidth), + this.move(this.rightButton, rightWidth) + ]).then(() => { + this.setEmit(0, type) + }) + + } + }, + setEmit(x, type) { + const leftWidth = this.button.left.width + const rightWidth = this.button.right.width + this.isopen = this.isopen || 'none' + this.stop = false + this.isclick = false + // 只有状态不一致才会返回结果 + if (this.isopen !== type && this.x !== x) { + if (type === 'left' && leftWidth > 0) { + this.$emit('change', 'left') + } + if (type === 'right' && rightWidth > 0) { + this.$emit('change', 'right') + } + if (type === 'none') { + this.$emit('change', 'none') + } + } + this.x = x + this.isopen = type + }, + move(ref, value) { + return new Promise((resolve, reject) => { + animation.transition(ref, { + styles: { + transform: `translateX(${value})`, + }, + duration: 150, //ms + timingFunction: 'linear', + needLayout: false, + delay: 0 //ms + }, function(res) { + resolve(res) + }) + }) + + }, + + /** + * 获取ref + * @param {Object} el + */ + getEl(el) { + return el.ref + }, + /** + * 获取节点信息 + */ + getSelectorQuery() { + Promise.all([ + this.getDom('left'), + this.getDom('right'), + ]).then((data) => { + let show = 'none' + if (this.autoClose) { + show = 'none' + } else { + show = this.show + } + + if (show === 'none') { + // this.close() + } else { + this.open(show) + } + + }) + + }, + getDom(str) { + return new Promise((resolve, reject) => { + dom.getComponentRect(this.$refs[`selector-${str}-button--hock`], (data) => { + if (data) { + this.button[str] = data.size + resolve(data) + } else { + reject() + } + }) + }) + } + } +} + +// #endif + +export default bindIngXMixins diff --git a/uni_modules/uni-swipe-action/components/uni-swipe-action-item/isPC.js b/uni_modules/uni-swipe-action/components/uni-swipe-action-item/isPC.js new file mode 100644 index 0000000..9a10ece --- /dev/null +++ b/uni_modules/uni-swipe-action/components/uni-swipe-action-item/isPC.js @@ -0,0 +1,12 @@ +export function isPC() { + var userAgentInfo = navigator.userAgent; + var Agents = ["Android", "iPhone", "SymbianOS", "Windows Phone", "iPad", "iPod"]; + var flag = true; + for (let v = 0; v < Agents.length - 1; v++) { + if (userAgentInfo.indexOf(Agents[v]) > 0) { + flag = false; + break; + } + } + return flag; +} \ No newline at end of file diff --git a/uni_modules/uni-swipe-action/components/uni-swipe-action-item/mpalipay.js b/uni_modules/uni-swipe-action/components/uni-swipe-action-item/mpalipay.js new file mode 100644 index 0000000..1a68ef8 --- /dev/null +++ b/uni_modules/uni-swipe-action/components/uni-swipe-action-item/mpalipay.js @@ -0,0 +1,193 @@ +export default { + data() { + return { + x: 0, + transition: false, + width: 0, + viewWidth: 0, + swipeShow: 0 + } + }, + watch: { + show(newVal) { + if (this.autoClose) return + if (newVal && newVal !== 'none' ) { + this.transition = true + this.open(newVal) + } else { + this.close() + } + } + }, + created() { + this.swipeaction = this.getSwipeAction() + if (this.swipeaction.children !== undefined) { + this.swipeaction.children.push(this) + } + }, + mounted() { + this.isopen = false + setTimeout(() => { + this.getQuerySelect() + }, 50) + }, + methods: { + appTouchStart(e) { + const { + clientX + } = e.changedTouches[0] + this.clientX = clientX + this.timestamp = new Date().getTime() + }, + appTouchEnd(e, index, item, position) { + const { + clientX + } = e.changedTouches[0] + // fixed by xxxx 模拟点击事件,解决 ios 13 点击区域错位的问题 + let diff = Math.abs(this.clientX - clientX) + let time = (new Date().getTime()) - this.timestamp + if (diff < 40 && time < 300) { + this.$emit('click', { + content: item, + index, + position + }) + } + }, + /** + * 移动触发 + * @param {Object} e + */ + onChange(e) { + this.moveX = e.detail.x + this.isclose = false + }, + touchstart(e) { + this.transition = false + this.isclose = true + this.autoClose && this.swipeaction.closeOther(this) + }, + touchmove(e) {}, + touchend(e) { + // 0的位置什么都不执行 + if (this.isclose && this.isopen === 'none') return + if (this.isclose && this.isopen !== 'none') { + this.transition = true + this.close() + } else { + this.move(this.moveX + this.leftWidth) + } + }, + + /** + * 移动 + * @param {Object} moveX + */ + move(moveX) { + // 打开关闭的处理逻辑不太一样 + this.transition = true + // 未打开状态 + if (!this.isopen || this.isopen === 'none') { + if (moveX > this.threshold) { + this.open('left') + } else if (moveX < -this.threshold) { + this.open('right') + } else { + this.close() + } + } else { + if (moveX < 0 && moveX < this.rightWidth) { + const rightX = this.rightWidth + moveX + if (rightX < this.threshold) { + this.open('right') + } else { + this.close() + } + } else if (moveX > 0 && moveX < this.leftWidth) { + const leftX = this.leftWidth - moveX + if (leftX < this.threshold) { + this.open('left') + } else { + this.close() + } + } + + } + + }, + + /** + * 打开 + */ + open(type) { + this.x = this.moveX + this.animation(type) + }, + + /** + * 关闭 + */ + close() { + this.x = this.moveX + // TODO 解决 x 值不更新的问题,所以会多触发一次 nextTick ,待优化 + this.$nextTick(() => { + this.x = -this.leftWidth + if(this.isopen!=='none'){ + this.$emit('change', 'none') + } + this.isopen = 'none' + }) + }, + + /** + * 执行结束动画 + * @param {Object} type + */ + animation(type) { + this.$nextTick(() => { + if (type === 'left') { + this.x = 0 + } else { + this.x = -this.rightWidth - this.leftWidth + } + + if(this.isopen!==type){ + this.$emit('change', type) + } + this.isopen = type + }) + + }, + getSlide(x) {}, + getQuerySelect() { + const query = uni.createSelectorQuery().in(this); + query.selectAll('.movable-view--hock').boundingClientRect(data => { + this.leftWidth = data[1].width + this.rightWidth = data[2].width + this.width = data[0].width + this.viewWidth = this.width + this.rightWidth + this.leftWidth + if (this.leftWidth === 0) { + // TODO 疑似bug ,初始化的时候如果x 是0,会导致移动位置错误,所以让元素超出一点 + this.x = -0.1 + } else { + this.x = -this.leftWidth + } + this.moveX = this.x + this.$nextTick(() => { + this.swipeShow = 1 + }) + + if (!this.buttonWidth) { + this.disabledView = true + } + + if (this.autoClose) return + if (this.show !== 'none') { + this.transition = true + this.open(this.shows) + } + }).exec(); + + } + } +} diff --git a/uni_modules/uni-swipe-action/components/uni-swipe-action-item/mpother.js b/uni_modules/uni-swipe-action/components/uni-swipe-action-item/mpother.js new file mode 100644 index 0000000..c44adfd --- /dev/null +++ b/uni_modules/uni-swipe-action/components/uni-swipe-action-item/mpother.js @@ -0,0 +1,257 @@ +let otherMixins = {} + +// #ifndef APP-PLUS|| MP-WEIXIN || H5 +const MIN_DISTANCE = 10; +otherMixins = { + data() { + // TODO 随机生生元素ID,解决百度小程序获取同一个元素位置信息的bug + const elClass = `Uni_${Math.ceil(Math.random() * 10e5).toString(36)}` + return { + uniShow: false, + left: 0, + buttonShow: 'none', + ani: false, + moveLeft:'', + elClass + } + }, + watch: { + show(newVal) { + if (this.autoClose) return + this.openState(newVal) + }, + left(){ + this.moveLeft = `translateX(${this.left}px)` + }, + buttonShow(newVal){ + if (this.autoClose) return + this.openState(newVal) + }, + leftOptions() { + this.init() + }, + rightOptions() { + this.init() + } + }, + mounted() { + this.swipeaction = this.getSwipeAction() + if (this.swipeaction.children !== undefined) { + this.swipeaction.children.push(this) + } + this.init() + }, + methods: { + init(){ + clearTimeout(this.timer) + this.timer = setTimeout(() => { + this.getSelectorQuery() + }, 100) + // 移动距离 + this.left = 0 + this.x = 0 + }, + + closeSwipe(e) { + if (!this.autoClose) return + this.swipeaction.closeOther(this) + }, + appTouchStart(e) { + const { + clientX + } = e.changedTouches[0] + this.clientX = clientX + this.timestamp = new Date().getTime() + }, + appTouchEnd(e, index, item, position) { + const { + clientX + } = e.changedTouches[0] + // fixed by xxxx 模拟点击事件,解决 ios 13 点击区域错位的问题 + let diff = Math.abs(this.clientX - clientX) + let time = (new Date().getTime()) - this.timestamp + if (diff < 40 && time < 300) { + this.$emit('click', { + content: item, + index, + position + }) + } + }, + touchstart(e) { + if (this.disabled) return + this.ani = false + this.x = this.left || 0 + this.stopTouchStart(e) + this.autoClose && this.closeSwipe() + }, + touchmove(e) { + if (this.disabled) return + // 是否可以滑动页面 + this.stopTouchMove(e); + if (this.direction !== 'horizontal') { + return; + } + this.move(this.x + this.deltaX) + return false + }, + touchend() { + if (this.disabled) return + this.moveDirection(this.left) + }, + /** + * 设置移动距离 + * @param {Object} value + */ + move(value) { + value = value || 0 + const leftWidth = this.leftWidth + const rightWidth = this.rightWidth + // 获取可滑动范围 + this.left = this.range(value, -rightWidth, leftWidth); + }, + + /** + * 获取范围 + * @param {Object} num + * @param {Object} min + * @param {Object} max + */ + range(num, min, max) { + return Math.min(Math.max(num, min), max); + }, + /** + * 移动方向判断 + * @param {Object} left + * @param {Object} value + */ + moveDirection(left) { + const threshold = this.threshold + const isopen = this.isopen || 'none' + const leftWidth = this.leftWidth + const rightWidth = this.rightWidth + if (this.deltaX === 0) { + this.openState('none') + return + } + if ((isopen === 'none' && rightWidth > 0 && -left > threshold) || (isopen !== 'none' && rightWidth > 0 && rightWidth + + left < threshold)) { + // right + this.openState('right') + } else if ((isopen === 'none' && leftWidth > 0 && left > threshold) || (isopen !== 'none' && leftWidth > 0 && + leftWidth - left < threshold)) { + // left + this.openState('left') + } else { + // default + this.openState('none') + } + }, + + /** + * 开启状态 + * @param {Boolean} type + */ + openState(type) { + const leftWidth = this.leftWidth + const rightWidth = this.rightWidth + let left = '' + this.isopen = this.isopen ? this.isopen : 'none' + switch (type) { + case "left": + left = leftWidth + break + case "right": + left = -rightWidth + break + default: + left = 0 + } + + + if (this.isopen !== type) { + this.throttle = true + this.$emit('change', type) + } + + this.isopen = type + // 添加动画类 + this.ani = true + this.$nextTick(() => { + this.move(left) + }) + // 设置最终移动位置,理论上只要进入到这个函数,肯定是要打开的 + }, + close() { + this.openState('none') + }, + getDirection(x, y) { + if (x > y && x > MIN_DISTANCE) { + return 'horizontal'; + } + if (y > x && y > MIN_DISTANCE) { + return 'vertical'; + } + return ''; + }, + + /** + * 重置滑动状态 + * @param {Object} event + */ + resetTouchStatus() { + this.direction = ''; + this.deltaX = 0; + this.deltaY = 0; + this.offsetX = 0; + this.offsetY = 0; + }, + + /** + * 设置滑动开始位置 + * @param {Object} event + */ + stopTouchStart(event) { + this.resetTouchStatus(); + const touch = event.touches[0]; + this.startX = touch.clientX; + this.startY = touch.clientY; + }, + + /** + * 滑动中,是否禁止打开 + * @param {Object} event + */ + stopTouchMove(event) { + const touch = event.touches[0]; + this.deltaX = touch.clientX - this.startX; + this.deltaY = touch.clientY - this.startY; + this.offsetX = Math.abs(this.deltaX); + this.offsetY = Math.abs(this.deltaY); + this.direction = this.direction || this.getDirection(this.offsetX, this.offsetY); + }, + + getSelectorQuery() { + const views = uni.createSelectorQuery().in(this) + views + .selectAll('.'+this.elClass) + .boundingClientRect(data => { + if(data.length === 0) return + let show = 'none' + if (this.autoClose) { + show = 'none' + } else { + show = this.show + } + this.leftWidth = data[0].width || 0 + this.rightWidth = data[1].width || 0 + this.buttonShow = show + }) + .exec() + } + } +} + +// #endif + +export default otherMixins diff --git a/uni_modules/uni-swipe-action/components/uni-swipe-action-item/mpwxs.js b/uni_modules/uni-swipe-action/components/uni-swipe-action-item/mpwxs.js new file mode 100644 index 0000000..435e0fb --- /dev/null +++ b/uni_modules/uni-swipe-action/components/uni-swipe-action-item/mpwxs.js @@ -0,0 +1,83 @@ +let mpMixins = {} +let is_pc = null +// #ifdef H5 +import { + isPC +} from "./isPC" +is_pc = isPC() +// #endif +// #ifdef APP-VUE|| MP-WEIXIN || H5 + +mpMixins = { + data() { + return { + is_show: 'none' + } + }, + watch: { + show(newVal) { + this.is_show = this.show + } + }, + created() { + this.swipeaction = this.getSwipeAction() + if (this.swipeaction.children !== undefined) { + this.swipeaction.children.push(this) + } + }, + mounted() { + this.is_show = this.show + }, + methods: { + // wxs 中调用 + closeSwipe(e) { + if (!this.autoClose) return + this.swipeaction.closeOther(this) + }, + + change(e) { + this.$emit('change', e.open) + if (this.is_show !== e.open) { + this.is_show = e.open + } + }, + + appTouchStart(e) { + if (is_pc) return + const { + clientX + } = e.changedTouches[0] + this.clientX = clientX + this.timestamp = new Date().getTime() + }, + appTouchEnd(e, index, item, position) { + if (is_pc) return + const { + clientX + } = e.changedTouches[0] + // fixed by xxxx 模拟点击事件,解决 ios 13 点击区域错位的问题 + let diff = Math.abs(this.clientX - clientX) + let time = (new Date().getTime()) - this.timestamp + if (diff < 40 && time < 300) { + this.$emit('click', { + content: item, + index, + position + }) + } + }, + onClickForPC(index, item, position) { + if (!is_pc) return + // #ifdef H5 + this.$emit('click', { + content: item, + index, + position + }) + // #endif + } + } +} + +// #endif +export default mpMixins diff --git a/uni_modules/uni-swipe-action/components/uni-swipe-action-item/render.js b/uni_modules/uni-swipe-action/components/uni-swipe-action-item/render.js new file mode 100644 index 0000000..ed42f1b --- /dev/null +++ b/uni_modules/uni-swipe-action/components/uni-swipe-action-item/render.js @@ -0,0 +1,270 @@ +const MIN_DISTANCE = 10; +export default { + showWatch(newVal, oldVal, ownerInstance, instance,self) { + var state = self.state + var $el = ownerInstance.$el || ownerInstance.$vm && ownerInstance.$vm.$el + if(!$el) return + this.getDom(instance, ownerInstance,self) + if (newVal && newVal !== 'none') { + this.openState(newVal, instance, ownerInstance,self) + return + } + + if (state.left) { + this.openState('none', instance, ownerInstance,self) + } + this.resetTouchStatus(instance,self) + }, + + /** + * 开始触摸操作 + * @param {Object} e + * @param {Object} ins + */ + touchstart(e, ownerInstance, self) { + let instance = e.instance; + let disabled = instance.getDataset().disabled + let state = self.state; + this.getDom(instance, ownerInstance, self) + // fix by mehaotian, TODO 兼容 app-vue 获取dataset为字符串 , h5 获取 为 undefined 的问题,待框架修复 + disabled = this.getDisabledType(disabled) + if (disabled) return + // 开始触摸时移除动画类 + instance.requestAnimationFrame(function() { + instance.removeClass('ani'); + ownerInstance.callMethod('closeSwipe'); + }) + + // 记录上次的位置 + state.x = state.left || 0 + // 计算滑动开始位置 + this.stopTouchStart(e, ownerInstance, self) + }, + + /** + * 开始滑动操作 + * @param {Object} e + * @param {Object} ownerInstance + */ + touchmove(e, ownerInstance, self) { + let instance = e.instance; + // 删除之后已经那不到实例了 + if(!instance) return; + let disabled = instance.getDataset().disabled + let state = self.state + // fix by mehaotian, TODO 兼容 app-vue 获取dataset为字符串 , h5 获取 为 undefined 的问题,待框架修复 + disabled = this.getDisabledType(disabled) + if (disabled) return + // 是否可以滑动页面 + this.stopTouchMove(e, self); + if (state.direction !== 'horizontal') { + return; + } + if (e.preventDefault) { + // 阻止页面滚动 + e.preventDefault() + } + let x = state.x + state.deltaX + this.move(x, instance, ownerInstance, self) + }, + + /** + * 结束触摸操作 + * @param {Object} e + * @param {Object} ownerInstance + */ + touchend(e, ownerInstance, self) { + let instance = e.instance; + let disabled = instance.getDataset().disabled + let state = self.state + // fix by mehaotian, TODO 兼容 app-vue 获取dataset为字符串 , h5 获取 为 undefined 的问题,待框架修复 + disabled = this.getDisabledType(disabled) + + if (disabled) return + // 滑动过程中触摸结束,通过阙值判断是开启还是关闭 + // fixed by mehaotian 定时器解决点击按钮,touchend 触发比 click 事件时机早的问题 ,主要是 ios13 + this.moveDirection(state.left, instance, ownerInstance, self) + + }, + + /** + * 设置移动距离 + * @param {Object} value + * @param {Object} instance + * @param {Object} ownerInstance + */ + move(value, instance, ownerInstance, self) { + value = value || 0 + let state = self.state + let leftWidth = state.leftWidth + let rightWidth = state.rightWidth + // 获取可滑动范围 + state.left = this.range(value, -rightWidth, leftWidth); + instance.requestAnimationFrame(function() { + instance.setStyle({ + transform: 'translateX(' + state.left + 'px)', + '-webkit-transform': 'translateX(' + state.left + 'px)' + }) + }) + + }, + + /** + * 获取元素信息 + * @param {Object} instance + * @param {Object} ownerInstance + */ + getDom(instance, ownerInstance, self) { + var state = self.state + var $el = ownerInstance.$el || ownerInstance.$vm && ownerInstance.$vm.$el + var leftDom = $el.querySelector('.button-group--left') + var rightDom = $el.querySelector('.button-group--right') + + state.leftWidth = leftDom.offsetWidth || 0 + state.rightWidth = rightDom.offsetWidth || 0 + state.threshold = instance.getDataset().threshold + }, + + getDisabledType(value) { + return (typeof(value) === 'string' ? JSON.parse(value) : value) || false; + }, + + /** + * 获取范围 + * @param {Object} num + * @param {Object} min + * @param {Object} max + */ + range(num, min, max) { + return Math.min(Math.max(num, min), max); + }, + + + /** + * 移动方向判断 + * @param {Object} left + * @param {Object} value + * @param {Object} ownerInstance + * @param {Object} ins + */ + moveDirection(left, ins, ownerInstance, self) { + var state = self.state + var threshold = state.threshold + var position = state.position + var isopen = state.isopen || 'none' + var leftWidth = state.leftWidth + var rightWidth = state.rightWidth + if (state.deltaX === 0) { + this.openState('none', ins, ownerInstance, self) + return + } + if ((isopen === 'none' && rightWidth > 0 && -left > threshold) || (isopen !== 'none' && rightWidth > 0 && + rightWidth + + left < threshold)) { + // right + this.openState('right', ins, ownerInstance, self) + } else if ((isopen === 'none' && leftWidth > 0 && left > threshold) || (isopen !== 'none' && leftWidth > 0 && + leftWidth - left < threshold)) { + // left + this.openState('left', ins, ownerInstance, self) + } else { + // default + this.openState('none', ins, ownerInstance, self) + } + }, + + + /** + * 开启状态 + * @param {Boolean} type + * @param {Object} ins + * @param {Object} ownerInstance + */ + openState(type, ins, ownerInstance, self) { + let state = self.state + let leftWidth = state.leftWidth + let rightWidth = state.rightWidth + let left = '' + state.isopen = state.isopen ? state.isopen : 'none' + switch (type) { + case "left": + left = leftWidth + break + case "right": + left = -rightWidth + break + default: + left = 0 + } + + // && !state.throttle + + if (state.isopen !== type) { + state.throttle = true + ownerInstance.callMethod('change', { + open: type + }) + + } + + state.isopen = type + // 添加动画类 + ins.requestAnimationFrame(()=> { + ins.addClass('ani'); + this.move(left, ins, ownerInstance, self) + }) + }, + + + getDirection(x, y) { + if (x > y && x > MIN_DISTANCE) { + return 'horizontal'; + } + if (y > x && y > MIN_DISTANCE) { + return 'vertical'; + } + return ''; + }, + + /** + * 重置滑动状态 + * @param {Object} event + */ + resetTouchStatus(instance, self) { + let state = self.state; + state.direction = ''; + state.deltaX = 0; + state.deltaY = 0; + state.offsetX = 0; + state.offsetY = 0; + }, + + /** + * 设置滑动开始位置 + * @param {Object} event + */ + stopTouchStart(event, ownerInstance, self) { + let instance = event.instance; + let state = self.state + this.resetTouchStatus(instance, self); + var touch = event.touches[0]; + state.startX = touch.clientX; + state.startY = touch.clientY; + }, + + /** + * 滑动中,是否禁止打开 + * @param {Object} event + */ + stopTouchMove(event, self) { + let instance = event.instance; + let state = self.state; + let touch = event.touches[0]; + + state.deltaX = touch.clientX - state.startX; + state.deltaY = touch.clientY - state.startY; + state.offsetY = Math.abs(state.deltaY); + state.offsetX = Math.abs(state.deltaX); + state.direction = state.direction || this.getDirection(state.offsetX, state.offsetY); + } +} diff --git a/uni_modules/uni-swipe-action/components/uni-swipe-action-item/uni-swipe-action-item.vue b/uni_modules/uni-swipe-action/components/uni-swipe-action-item/uni-swipe-action-item.vue new file mode 100644 index 0000000..f633c9c --- /dev/null +++ b/uni_modules/uni-swipe-action/components/uni-swipe-action-item/uni-swipe-action-item.vue @@ -0,0 +1,344 @@ + + + + + + diff --git a/uni_modules/uni-swipe-action/components/uni-swipe-action-item/wx.wxs b/uni_modules/uni-swipe-action/components/uni-swipe-action-item/wx.wxs new file mode 100644 index 0000000..b394244 --- /dev/null +++ b/uni_modules/uni-swipe-action/components/uni-swipe-action-item/wx.wxs @@ -0,0 +1,341 @@ +var MIN_DISTANCE = 10; + +/** + * 判断当前是否为H5、app-vue + */ +var IS_HTML5 = false +if (typeof window === 'object') IS_HTML5 = true + +/** + * 监听页面内值的变化,主要用于动态开关swipe-action + * @param {Object} newValue + * @param {Object} oldValue + * @param {Object} ownerInstance + * @param {Object} instance + */ +function showWatch(newVal, oldVal, ownerInstance, instance) { + var state = instance.getState() + getDom(instance, ownerInstance) + if (newVal && newVal !== 'none') { + openState(newVal, instance, ownerInstance) + return + } + + if (state.left) { + openState('none', instance, ownerInstance) + } + resetTouchStatus(instance) +} + +/** + * 开始触摸操作 + * @param {Object} e + * @param {Object} ins + */ +function touchstart(e, ownerInstance) { + var instance = e.instance; + var disabled = instance.getDataset().disabled + var state = instance.getState(); + getDom(instance, ownerInstance) + // fix by mehaotian, TODO 兼容 app-vue 获取dataset为字符串 , h5 获取 为 undefined 的问题,待框架修复 + disabled = (typeof(disabled) === 'string' ? JSON.parse(disabled) : disabled) || false; + if (disabled) return + // 开始触摸时移除动画类 + instance.requestAnimationFrame(function() { + instance.removeClass('ani'); + ownerInstance.callMethod('closeSwipe'); + }) + + // 记录上次的位置 + state.x = state.left || 0 + // 计算滑动开始位置 + stopTouchStart(e, ownerInstance) +} + +/** + * 开始滑动操作 + * @param {Object} e + * @param {Object} ownerInstance + */ +function touchmove(e, ownerInstance) { + var instance = e.instance; + var disabled = instance.getDataset().disabled + var state = instance.getState() + // fix by mehaotian, TODO 兼容 app-vue 获取dataset为字符串 , h5 获取 为 undefined 的问题,待框架修复 + disabled = (typeof(disabled) === 'string' ? JSON.parse(disabled) : disabled) || false; + if (disabled) return + // 是否可以滑动页面 + stopTouchMove(e); + if (state.direction !== 'horizontal') { + return; + } + + if (e.preventDefault) { + // 阻止页面滚动 + e.preventDefault() + } + + move(state.x + state.deltaX, instance, ownerInstance) +} + +/** + * 结束触摸操作 + * @param {Object} e + * @param {Object} ownerInstance + */ +function touchend(e, ownerInstance) { + var instance = e.instance; + var disabled = instance.getDataset().disabled + var state = instance.getState() + // fix by mehaotian, TODO 兼容 app-vue 获取dataset为字符串 , h5 获取 为 undefined 的问题,待框架修复 + disabled = (typeof(disabled) === 'string' ? JSON.parse(disabled) : disabled) || false; + + if (disabled) return + // 滑动过程中触摸结束,通过阙值判断是开启还是关闭 + // fixed by mehaotian 定时器解决点击按钮,touchend 触发比 click 事件时机早的问题 ,主要是 ios13 + moveDirection(state.left, instance, ownerInstance) + +} + +/** + * 设置移动距离 + * @param {Object} value + * @param {Object} instance + * @param {Object} ownerInstance + */ +function move(value, instance, ownerInstance) { + value = value || 0 + var state = instance.getState() + var leftWidth = state.leftWidth + var rightWidth = state.rightWidth + // 获取可滑动范围 + state.left = range(value, -rightWidth, leftWidth); + instance.requestAnimationFrame(function() { + instance.setStyle({ + transform: 'translateX(' + state.left + 'px)', + '-webkit-transform': 'translateX(' + state.left + 'px)' + }) + }) + +} + +/** + * 获取元素信息 + * @param {Object} instance + * @param {Object} ownerInstance + */ +function getDom(instance, ownerInstance) { + var state = instance.getState() + var leftDom = ownerInstance.selectComponent('.button-group--left') + var rightDom = ownerInstance.selectComponent('.button-group--right') + var leftStyles = { + width: 0 + } + var rightStyles = { + width: 0 + } + leftStyles = leftDom.getBoundingClientRect() + rightStyles = rightDom.getBoundingClientRect() + + state.leftWidth = leftStyles.width || 0 + state.rightWidth = rightStyles.width || 0 + state.threshold = instance.getDataset().threshold +} + +/** + * 获取范围 + * @param {Object} num + * @param {Object} min + * @param {Object} max + */ +function range(num, min, max) { + return Math.min(Math.max(num, min), max); +} + + +/** + * 移动方向判断 + * @param {Object} left + * @param {Object} value + * @param {Object} ownerInstance + * @param {Object} ins + */ +function moveDirection(left, ins, ownerInstance) { + var state = ins.getState() + var threshold = state.threshold + var position = state.position + var isopen = state.isopen || 'none' + var leftWidth = state.leftWidth + var rightWidth = state.rightWidth + if (state.deltaX === 0) { + openState('none', ins, ownerInstance) + return + } + if ((isopen === 'none' && rightWidth > 0 && -left > threshold) || (isopen !== 'none' && rightWidth > 0 && + rightWidth + + left < threshold)) { + // right + openState('right', ins, ownerInstance) + } else if ((isopen === 'none' && leftWidth > 0 && left > threshold) || (isopen !== 'none' && leftWidth > 0 && + leftWidth - left < threshold)) { + // left + openState('left', ins, ownerInstance) + } else { + // default + openState('none', ins, ownerInstance) + } +} + + +/** + * 开启状态 + * @param {Boolean} type + * @param {Object} ins + * @param {Object} ownerInstance + */ +function openState(type, ins, ownerInstance) { + var state = ins.getState() + var leftWidth = state.leftWidth + var rightWidth = state.rightWidth + var left = '' + state.isopen = state.isopen ? state.isopen : 'none' + switch (type) { + case "left": + left = leftWidth + break + case "right": + left = -rightWidth + break + default: + left = 0 + } + + // && !state.throttle + + if (state.isopen !== type) { + state.throttle = true + ownerInstance.callMethod('change', { + open: type + }) + + } + + state.isopen = type + // 添加动画类 + ins.requestAnimationFrame(function() { + ins.addClass('ani'); + move(left, ins, ownerInstance) + }) + // 设置最终移动位置,理论上只要进入到这个函数,肯定是要打开的 +} + + +function getDirection(x, y) { + if (x > y && x > MIN_DISTANCE) { + return 'horizontal'; + } + if (y > x && y > MIN_DISTANCE) { + return 'vertical'; + } + return ''; +} + +/** + * 重置滑动状态 + * @param {Object} event + */ +function resetTouchStatus(instance) { + var state = instance.getState(); + state.direction = ''; + state.deltaX = 0; + state.deltaY = 0; + state.offsetX = 0; + state.offsetY = 0; +} + +/** + * 设置滑动开始位置 + * @param {Object} event + */ +function stopTouchStart(event) { + var instance = event.instance; + var state = instance.getState(); + resetTouchStatus(instance); + var touch = event.touches[0]; + if (IS_HTML5 && isPC()) { + touch = event; + } + state.startX = touch.clientX; + state.startY = touch.clientY; +} + +/** + * 滑动中,是否禁止打开 + * @param {Object} event + */ +function stopTouchMove(event) { + var instance = event.instance; + var state = instance.getState(); + var touch = event.touches[0]; + if (IS_HTML5 && isPC()) { + touch = event; + } + state.deltaX = touch.clientX - state.startX; + state.deltaY = touch.clientY - state.startY; + state.offsetY = Math.abs(state.deltaY); + state.offsetX = Math.abs(state.deltaX); + state.direction = state.direction || getDirection(state.offsetX, state.offsetY); +} + +function isPC() { + var userAgentInfo = navigator.userAgent; + var Agents = ["Android", "iPhone", "SymbianOS", "Windows Phone", "iPad", "iPod"]; + var flag = true; + for (var v = 0; v < Agents.length - 1; v++) { + if (userAgentInfo.indexOf(Agents[v]) > 0) { + flag = false; + break; + } + } + return flag; +} + +var movable = false + +function mousedown(e, ins) { + if (!IS_HTML5) return + if (!isPC()) return + touchstart(e, ins) + movable = true +} + +function mousemove(e, ins) { + if (!IS_HTML5) return + if (!isPC()) return + if (!movable) return + touchmove(e, ins) +} + +function mouseup(e, ins) { + if (!IS_HTML5) return + if (!isPC()) return + touchend(e, ins) + movable = false +} + +function mouseleave(e, ins) { + if (!IS_HTML5) return + if (!isPC()) return + movable = false +} + +module.exports = { + showWatch: showWatch, + touchstart: touchstart, + touchmove: touchmove, + touchend: touchend, + mousedown: mousedown, + mousemove: mousemove, + mouseup: mouseup, + mouseleave: mouseleave +} diff --git a/uni_modules/uni-swipe-action/components/uni-swipe-action/uni-swipe-action.vue b/uni_modules/uni-swipe-action/components/uni-swipe-action/uni-swipe-action.vue new file mode 100644 index 0000000..4971782 --- /dev/null +++ b/uni_modules/uni-swipe-action/components/uni-swipe-action/uni-swipe-action.vue @@ -0,0 +1,60 @@ + + + + + diff --git a/uni_modules/uni-swipe-action/package.json b/uni_modules/uni-swipe-action/package.json new file mode 100644 index 0000000..62bea10 --- /dev/null +++ b/uni_modules/uni-swipe-action/package.json @@ -0,0 +1,87 @@ +{ + "id": "uni-swipe-action", + "displayName": "uni-swipe-action 滑动操作", + "version": "1.3.6", + "description": "SwipeAction 滑动操作操作组件", + "keywords": [ + "", + "uni-ui", + "uniui", + "滑动删除", + "侧滑删除" +], + "repository": "https://github.com/dcloudio/uni-ui", + "engines": { + "HBuilderX": "" + }, + "directories": { + "example": "../../temps/example_temps" + }, + "dcloudext": { + "category": [ + "前端组件", + "通用组件" + ], + "sale": { + "regular": { + "price": "0.00" + }, + "sourcecode": { + "price": "0.00" + } + }, + "contact": { + "qq": "" + }, + "declaration": { + "ads": "无", + "data": "无", + "permissions": "无" + }, + "npmurl": "https://www.npmjs.com/package/@dcloudio/uni-ui" + }, + "uni_modules": { + "dependencies": ["uni-scss"], + "encrypt": [], + "platforms": { + "cloud": { + "tcb": "y", + "aliyun": "y" + }, + "client": { + "App": { + "app-vue": "y", + "app-nvue": "y" + }, + "H5-mobile": { + "Safari": "y", + "Android Browser": "y", + "微信浏览器(Android)": "y", + "QQ浏览器(Android)": "y" + }, + "H5-pc": { + "Chrome": "y", + "IE": "y", + "Edge": "y", + "Firefox": "y", + "Safari": "y" + }, + "小程序": { + "微信": "y", + "阿里": "y", + "百度": "y", + "字节跳动": "y", + "QQ": "y" + }, + "快应用": { + "华为": "y", + "联盟": "u" + }, + "Vue": { + "vue2": "y", + "vue3": "y" + } + } + } + } +} \ No newline at end of file diff --git a/uni_modules/uni-swipe-action/readme.md b/uni_modules/uni-swipe-action/readme.md new file mode 100644 index 0000000..93a5cac --- /dev/null +++ b/uni_modules/uni-swipe-action/readme.md @@ -0,0 +1,11 @@ + + +## SwipeAction 滑动操作 +> **组件名:uni-swipe-action** +> 代码块: `uSwipeAction`、`uSwipeActionItem` + + +通过滑动触发选项的容器 + +### [查看文档](https://uniapp.dcloud.io/component/uniui/uni-swipe-action) +#### 如使用过程中有任何问题,或者您对uni-ui有一些好的建议,欢迎加入 uni-ui 交流群:871950839 \ No newline at end of file diff --git a/uni_modules/uni-swiper-dot/changelog.md b/uni_modules/uni-swiper-dot/changelog.md new file mode 100644 index 0000000..85cf54d --- /dev/null +++ b/uni_modules/uni-swiper-dot/changelog.md @@ -0,0 +1,12 @@ +## 1.2.0(2021-11-19) +- 优化 组件UI,并提供设计资源,详见:[https://uniapp.dcloud.io/component/uniui/resource](https://uniapp.dcloud.io/component/uniui/resource) +- 文档迁移,详见:[https://uniapp.dcloud.io/component/uniui/uni-swiper-dot](https://uniapp.dcloud.io/component/uniui/uni-swiper-dot) +## 1.1.0(2021-07-30) +- 组件兼容 vue3,如何创建vue3项目,详见 [uni-app 项目支持 vue3 介绍](https://ask.dcloud.net.cn/article/37834) +## 1.0.6(2021-05-12) +- 新增 示例地址 +- 修复 示例项目缺少组件的Bug +## 1.0.5(2021-02-05) +- 调整为uni_modules目录规范 +- 新增 clickItem 事件,支持指示点控制轮播 +- 新增 支持 pc 可用 diff --git a/uni_modules/uni-swiper-dot/components/uni-swiper-dot/uni-swiper-dot.vue b/uni_modules/uni-swiper-dot/components/uni-swiper-dot/uni-swiper-dot.vue new file mode 100644 index 0000000..e66b6c7 --- /dev/null +++ b/uni_modules/uni-swiper-dot/components/uni-swiper-dot/uni-swiper-dot.vue @@ -0,0 +1,218 @@ + + + + + diff --git a/uni_modules/uni-swiper-dot/package.json b/uni_modules/uni-swiper-dot/package.json new file mode 100644 index 0000000..f2dd8d2 --- /dev/null +++ b/uni_modules/uni-swiper-dot/package.json @@ -0,0 +1,87 @@ +{ + "id": "uni-swiper-dot", + "displayName": "uni-swiper-dot 轮播图指示点", + "version": "1.2.0", + "description": "自定义轮播图指示点组件", + "keywords": [ + "uni-ui", + "uniui", + "轮播图指示点", + "dot", + "swiper" +], + "repository": "https://github.com/dcloudio/uni-ui", + "engines": { + "HBuilderX": "" + }, + "directories": { + "example": "../../temps/example_temps" + }, + "dcloudext": { + "category": [ + "前端组件", + "通用组件" + ], + "sale": { + "regular": { + "price": "0.00" + }, + "sourcecode": { + "price": "0.00" + } + }, + "contact": { + "qq": "" + }, + "declaration": { + "ads": "无", + "data": "无", + "permissions": "无" + }, + "npmurl": "https://www.npmjs.com/package/@dcloudio/uni-ui" + }, + "uni_modules": { + "dependencies": ["uni-scss"], + "encrypt": [], + "platforms": { + "cloud": { + "tcb": "y", + "aliyun": "y" + }, + "client": { + "App": { + "app-vue": "y", + "app-nvue": "y" + }, + "H5-mobile": { + "Safari": "y", + "Android Browser": "y", + "微信浏览器(Android)": "y", + "QQ浏览器(Android)": "y" + }, + "H5-pc": { + "Chrome": "y", + "IE": "y", + "Edge": "y", + "Firefox": "y", + "Safari": "y" + }, + "小程序": { + "微信": "y", + "阿里": "y", + "百度": "y", + "字节跳动": "y", + "QQ": "y" + }, + "快应用": { + "华为": "u", + "联盟": "u" + }, + "Vue": { + "vue2": "y", + "vue3": "y" + } + } + } + } +} \ No newline at end of file diff --git a/uni_modules/uni-swiper-dot/readme.md b/uni_modules/uni-swiper-dot/readme.md new file mode 100644 index 0000000..7d397e2 --- /dev/null +++ b/uni_modules/uni-swiper-dot/readme.md @@ -0,0 +1,11 @@ + + +## SwiperDot 轮播图指示点 +> **组件名:uni-swiper-dot** +> 代码块: `uSwiperDot` + + +自定义轮播图指示点 + +### [查看文档](https://uniapp.dcloud.io/component/uniui/uni-swiper-dot) +#### 如使用过程中有任何问题,或者您对uni-ui有一些好的建议,欢迎加入 uni-ui 交流群:871950839 \ No newline at end of file diff --git a/uni_modules/uni-table/changelog.md b/uni_modules/uni-table/changelog.md new file mode 100644 index 0000000..b7aada3 --- /dev/null +++ b/uni_modules/uni-table/changelog.md @@ -0,0 +1,21 @@ +## 1.2.0(2021-11-19) +- 优化 组件UI,并提供设计资源,详见:[https://uniapp.dcloud.io/component/uniui/resource](https://uniapp.dcloud.io/component/uniui/resource) +- 文档迁移,详见:[https://uniapp.dcloud.io/component/uniui/uni-table](https://uniapp.dcloud.io/component/uniui/uni-table) +## 1.1.0(2021-07-30) +- 组件兼容 vue3,如何创建vue3项目,详见 [uni-app 项目支持 vue3 介绍](https://ask.dcloud.net.cn/article/37834) +## 1.0.7(2021-07-08) +- 新增 uni-th 支持 date 日期筛选范围 +## 1.0.6(2021-07-05) +- 新增 uni-th 支持 range 筛选范围 +## 1.0.5(2021-06-28) +- 新增 uni-th 筛选功能 +## 1.0.4(2021-05-12) +- 新增 示例地址 +- 修复 示例项目缺少组件的Bug +## 1.0.3(2021-04-16) +- 新增 sortable 属性,是否开启单列排序 +- 优化 表格多选逻辑 +## 1.0.2(2021-03-22) +- uni-tr 添加 disabled 属性,用于 type=selection 时,设置某行是否可由全选按钮控制 +## 1.0.1(2021-02-05) +- 调整为uni_modules目录规范 diff --git a/uni_modules/uni-table/components/uni-table/uni-table.vue b/uni_modules/uni-table/components/uni-table/uni-table.vue new file mode 100644 index 0000000..91b74fa --- /dev/null +++ b/uni_modules/uni-table/components/uni-table/uni-table.vue @@ -0,0 +1,455 @@ + + + + + diff --git a/uni_modules/uni-table/components/uni-tbody/uni-tbody.vue b/uni_modules/uni-table/components/uni-tbody/uni-tbody.vue new file mode 100644 index 0000000..fbe1bdc --- /dev/null +++ b/uni_modules/uni-table/components/uni-tbody/uni-tbody.vue @@ -0,0 +1,29 @@ + + + + + diff --git a/uni_modules/uni-table/components/uni-td/uni-td.vue b/uni_modules/uni-table/components/uni-td/uni-td.vue new file mode 100644 index 0000000..9ce93e9 --- /dev/null +++ b/uni_modules/uni-table/components/uni-td/uni-td.vue @@ -0,0 +1,90 @@ + + + + + diff --git a/uni_modules/uni-table/components/uni-th/filter-dropdown.vue b/uni_modules/uni-table/components/uni-th/filter-dropdown.vue new file mode 100644 index 0000000..fe8cd96 --- /dev/null +++ b/uni_modules/uni-table/components/uni-th/filter-dropdown.vue @@ -0,0 +1,503 @@ + + + + + diff --git a/uni_modules/uni-table/components/uni-th/uni-th.vue b/uni_modules/uni-table/components/uni-th/uni-th.vue new file mode 100644 index 0000000..9430fba --- /dev/null +++ b/uni_modules/uni-table/components/uni-th/uni-th.vue @@ -0,0 +1,251 @@ + + + + + diff --git a/uni_modules/uni-table/components/uni-thead/uni-thead.vue b/uni_modules/uni-table/components/uni-thead/uni-thead.vue new file mode 100644 index 0000000..0dd18cd --- /dev/null +++ b/uni_modules/uni-table/components/uni-thead/uni-thead.vue @@ -0,0 +1,129 @@ + + + + + diff --git a/uni_modules/uni-table/components/uni-tr/table-checkbox.vue b/uni_modules/uni-table/components/uni-tr/table-checkbox.vue new file mode 100644 index 0000000..158f3ff --- /dev/null +++ b/uni_modules/uni-table/components/uni-tr/table-checkbox.vue @@ -0,0 +1,179 @@ + + + + + diff --git a/uni_modules/uni-table/components/uni-tr/uni-tr.vue b/uni_modules/uni-table/components/uni-tr/uni-tr.vue new file mode 100644 index 0000000..f9b9671 --- /dev/null +++ b/uni_modules/uni-table/components/uni-tr/uni-tr.vue @@ -0,0 +1,171 @@ + + + + + diff --git a/uni_modules/uni-table/package.json b/uni_modules/uni-table/package.json new file mode 100644 index 0000000..754e753 --- /dev/null +++ b/uni_modules/uni-table/package.json @@ -0,0 +1,86 @@ +{ + "id": "uni-table", + "displayName": "uni-table 表格", + "version": "1.2.0", + "description": "表格组件,多用于展示多条结构类似的数据,如", + "keywords": [ + "uni-ui", + "uniui", + "table", + "表格" +], + "repository": "https://github.com/dcloudio/uni-ui", + "engines": { + "HBuilderX": "" + }, + "directories": { + "example": "../../temps/example_temps" + }, + "dcloudext": { + "category": [ + "前端组件", + "通用组件" + ], + "sale": { + "regular": { + "price": "0.00" + }, + "sourcecode": { + "price": "0.00" + } + }, + "contact": { + "qq": "" + }, + "declaration": { + "ads": "无", + "data": "无", + "permissions": "无" + }, + "npmurl": "https://www.npmjs.com/package/@dcloudio/uni-ui" + }, + "uni_modules": { + "dependencies": ["uni-scss","uni-datetime-picker"], + "encrypt": [], + "platforms": { + "cloud": { + "tcb": "y", + "aliyun": "y" + }, + "client": { + "App": { + "app-vue": "y", + "app-nvue": "n" + }, + "H5-mobile": { + "Safari": "y", + "Android Browser": "y", + "微信浏览器(Android)": "y", + "QQ浏览器(Android)": "y" + }, + "H5-pc": { + "Chrome": "y", + "IE": "y", + "Edge": "y", + "Firefox": "y", + "Safari": "y" + }, + "小程序": { + "微信": "y", + "阿里": "y", + "百度": "y", + "字节跳动": "n", + "QQ": "y" + }, + "快应用": { + "华为": "n", + "联盟": "n" + }, + "Vue": { + "vue2": "y", + "vue3": "y" + } + } + } + } +} \ No newline at end of file diff --git a/uni_modules/uni-table/readme.md b/uni_modules/uni-table/readme.md new file mode 100644 index 0000000..bb08c79 --- /dev/null +++ b/uni_modules/uni-table/readme.md @@ -0,0 +1,13 @@ + + +## Table 表单 +> 组件名:``uni-table``,代码块: `uTable`。 + +用于展示多条结构类似的数据 + +### [查看文档](https://uniapp.dcloud.io/component/uniui/uni-table) +#### 如使用过程中有任何问题,或者您对uni-ui有一些好的建议,欢迎加入 uni-ui 交流群:871950839 + + + + diff --git a/uni_modules/uni-tag/changelog.md b/uni_modules/uni-tag/changelog.md new file mode 100644 index 0000000..c0c5839 --- /dev/null +++ b/uni_modules/uni-tag/changelog.md @@ -0,0 +1,21 @@ +## 2.1.0(2021-11-19) +- 优化 组件UI,并提供设计资源,详见:[https://uniapp.dcloud.io/component/uniui/resource](https://uniapp.dcloud.io/component/uniui/resource) +- 文档迁移,详见:[https://uniapp.dcloud.io/component/uniui/uni-tag](https://uniapp.dcloud.io/component/uniui/uni-tag) +## 2.0.0(2021-11-09) +- 新增 提供组件设计资源,组件样式调整 +- 移除 插槽 +- 移除 type 属性的 royal 选项 +## 1.1.1(2021-08-11) +- type 不是 default 时,size 为 small 字体大小显示不正确 +## 1.1.0(2021-07-30) +- 组件兼容 vue3,如何创建vue3项目,详见 [uni-app 项目支持 vue3 介绍](https://ask.dcloud.net.cn/article/37834) +## 1.0.7(2021-06-18) +- 修复 uni-tag 在字节跳动小程序上 css 类名编译错误的 bug +## 1.0.6(2021-06-04) +- 修复 未定义 sass 变量 "$uni-color-royal" 的bug +## 1.0.5(2021-05-10) +- 修复 royal 类型无效的bug +- 修复 uni-tag 宽度不自适应的bug +- 新增 uni-tag 支持属性 custom-style 自定义样式 +## 1.0.4(2021-02-05) +- 调整为uni_modules目录规范 diff --git a/uni_modules/uni-tag/components/uni-tag/uni-tag.vue b/uni_modules/uni-tag/components/uni-tag/uni-tag.vue new file mode 100644 index 0000000..418c955 --- /dev/null +++ b/uni_modules/uni-tag/components/uni-tag/uni-tag.vue @@ -0,0 +1,252 @@ + + + + + diff --git a/uni_modules/uni-tag/package.json b/uni_modules/uni-tag/package.json new file mode 100644 index 0000000..1878088 --- /dev/null +++ b/uni_modules/uni-tag/package.json @@ -0,0 +1,87 @@ +{ + "id": "uni-tag", + "displayName": "uni-tag 标签", + "version": "2.1.0", + "description": "Tag 组件,用于展示1个或多个文字标签,可点击切换选中、不选中的状态。", + "keywords": [ + "uni-ui", + "uniui", + "", + "tag", + "标签" +], + "repository": "https://github.com/dcloudio/uni-ui", + "engines": { + "HBuilderX": "" + }, + "directories": { + "example": "../../temps/example_temps" + }, + "dcloudext": { + "category": [ + "前端组件", + "通用组件" + ], + "sale": { + "regular": { + "price": "0.00" + }, + "sourcecode": { + "price": "0.00" + } + }, + "contact": { + "qq": "" + }, + "declaration": { + "ads": "无", + "data": "无", + "permissions": "无" + }, + "npmurl": "https://www.npmjs.com/package/@dcloudio/uni-ui" + }, + "uni_modules": { + "dependencies": ["uni-scss"], + "encrypt": [], + "platforms": { + "cloud": { + "tcb": "y", + "aliyun": "y" + }, + "client": { + "App": { + "app-vue": "y", + "app-nvue": "y" + }, + "H5-mobile": { + "Safari": "y", + "Android Browser": "y", + "微信浏览器(Android)": "y", + "QQ浏览器(Android)": "y" + }, + "H5-pc": { + "Chrome": "y", + "IE": "y", + "Edge": "y", + "Firefox": "y", + "Safari": "y" + }, + "小程序": { + "微信": "y", + "阿里": "y", + "百度": "y", + "字节跳动": "y", + "QQ": "y" + }, + "快应用": { + "华为": "u", + "联盟": "u" + }, + "Vue": { + "vue2": "y", + "vue3": "y" + } + } + } + } +} \ No newline at end of file diff --git a/uni_modules/uni-tag/readme.md b/uni_modules/uni-tag/readme.md new file mode 100644 index 0000000..6e78ff5 --- /dev/null +++ b/uni_modules/uni-tag/readme.md @@ -0,0 +1,13 @@ + + +## Tag 标签 +> **组件名:uni-tag** +> 代码块: `uTag` + + +用于展示1个或多个文字标签,可点击切换选中、不选中的状态 。 + +### [查看文档](https://uniapp.dcloud.io/component/uniui/uni-tag) +#### 如使用过程中有任何问题,或者您对uni-ui有一些好的建议,欢迎加入 uni-ui 交流群:871950839 + + diff --git a/uni_modules/uni-title/changelog.md b/uni_modules/uni-title/changelog.md new file mode 100644 index 0000000..7626216 --- /dev/null +++ b/uni_modules/uni-title/changelog.md @@ -0,0 +1,10 @@ +## 1.1.1(2022-05-19) +- 修改组件描述 +## 1.1.0(2021-11-19) +- 优化 组件UI,并提供设计资源,详见:[https://uniapp.dcloud.io/component/uniui/resource](https://uniapp.dcloud.io/component/uniui/resource) +- 文档迁移,详见:[https://uniapp.dcloud.io/component/uniui/uni-title](https://uniapp.dcloud.io/component/uniui/uni-title) +## 1.0.2(2021-05-12) +- 新增 示例地址 +- 修复 示例项目缺少组件的Bug +## 1.0.1(2021-02-05) +- 调整为uni_modules目录规范 diff --git a/uni_modules/uni-title/components/uni-title/uni-title.vue b/uni_modules/uni-title/components/uni-title/uni-title.vue new file mode 100644 index 0000000..bf4f926 --- /dev/null +++ b/uni_modules/uni-title/components/uni-title/uni-title.vue @@ -0,0 +1,171 @@ + + + + + diff --git a/uni_modules/uni-title/package.json b/uni_modules/uni-title/package.json new file mode 100644 index 0000000..2249f5a --- /dev/null +++ b/uni_modules/uni-title/package.json @@ -0,0 +1,88 @@ +{ + "id": "uni-title", + "displayName": "uni-title 章节标题", + "version": "1.1.1", + "description": "章节标题,通常用于记录页面标题,使用当前组件,uni-app 如果开启统计,将会自动统计页面标题", + "keywords": [ + "uni-ui", + "uniui", + "标题", + "章节", + "章节标题", + "" +], + "repository": "https://github.com/dcloudio/uni-ui", + "engines": { + "HBuilderX": "" + }, + "directories": { + "example": "../../temps/example_temps" + }, + "dcloudext": { + "category": [ + "前端组件", + "通用组件" + ], + "sale": { + "regular": { + "price": "0.00" + }, + "sourcecode": { + "price": "0.00" + } + }, + "contact": { + "qq": "" + }, + "declaration": { + "ads": "无", + "data": "无", + "permissions": "无" + }, + "npmurl": "https://www.npmjs.com/package/@dcloudio/uni-ui" + }, + "uni_modules": { + "dependencies": ["uni-scss"], + "encrypt": [], + "platforms": { + "cloud": { + "tcb": "y", + "aliyun": "y" + }, + "client": { + "App": { + "app-vue": "y", + "app-nvue": "y" + }, + "H5-mobile": { + "Safari": "y", + "Android Browser": "y", + "微信浏览器(Android)": "y", + "QQ浏览器(Android)": "y" + }, + "H5-pc": { + "Chrome": "y", + "IE": "y", + "Edge": "y", + "Firefox": "y", + "Safari": "y" + }, + "小程序": { + "微信": "y", + "阿里": "y", + "百度": "y", + "字节跳动": "y", + "QQ": "y" + }, + "快应用": { + "华为": "u", + "联盟": "u" + }, + "Vue": { + "vue2": "y", + "vue3": "y" + } + } + } + } +} \ No newline at end of file diff --git a/uni_modules/uni-title/readme.md b/uni_modules/uni-title/readme.md new file mode 100644 index 0000000..0e60b1b --- /dev/null +++ b/uni_modules/uni-title/readme.md @@ -0,0 +1,14 @@ + + +## Title 标题 +> **组件名:uni-title** +> 代码块: `uTitle` + + +章节标题,通常用于记录页面标题,使用当前组件,uni-app 如果开启统计,将会自动统计页面标题 。 + +### [查看文档](https://uniapp.dcloud.io/component/uniui/uni-title) +#### 如使用过程中有任何问题,或者您对uni-ui有一些好的建议,欢迎加入 uni-ui 交流群:871950839 + + + diff --git a/uni_modules/uni-transition/changelog.md b/uni_modules/uni-transition/changelog.md new file mode 100644 index 0000000..b1a824b --- /dev/null +++ b/uni_modules/uni-transition/changelog.md @@ -0,0 +1,20 @@ +## 1.3.1(2021-11-23) +- 修复 init 方法初始化问题 +## 1.3.0(2021-11-19) +- 优化 组件UI,并提供设计资源,详见:[https://uniapp.dcloud.io/component/uniui/resource](https://uniapp.dcloud.io/component/uniui/resource) +- 文档迁移,详见:[https://uniapp.dcloud.io/component/uniui/uni-transition](https://uniapp.dcloud.io/component/uniui/uni-transition) +## 1.2.1(2021-09-27) +- 修复 init 方法不生效的 Bug +## 1.2.0(2021-07-30) +- 组件兼容 vue3,如何创建 vue3 项目,详见 [uni-app 项目支持 vue3 介绍](https://ask.dcloud.net.cn/article/37834) +## 1.1.1(2021-05-12) +- 新增 示例地址 +- 修复 示例项目缺少组件的 Bug +## 1.1.0(2021-04-22) +- 新增 通过方法自定义动画 +- 新增 custom-class 非 NVUE 平台支持自定义 class 定制样式 +- 优化 动画触发逻辑,使动画更流畅 +- 优化 支持单独的动画类型 +- 优化 文档示例 +## 1.0.2(2021-02-05) +- 调整为 uni_modules 目录规范 diff --git a/uni_modules/uni-transition/components/uni-transition/createAnimation.js b/uni_modules/uni-transition/components/uni-transition/createAnimation.js new file mode 100644 index 0000000..5f54365 --- /dev/null +++ b/uni_modules/uni-transition/components/uni-transition/createAnimation.js @@ -0,0 +1,128 @@ +// const defaultOption = { +// duration: 300, +// timingFunction: 'linear', +// delay: 0, +// transformOrigin: '50% 50% 0' +// } +// #ifdef APP-NVUE +const nvueAnimation = uni.requireNativePlugin('animation') +// #endif +class MPAnimation { + constructor(options, _this) { + this.options = options + this.animation = uni.createAnimation(options) + this.currentStepAnimates = {} + this.next = 0 + this.$ = _this + + } + + _nvuePushAnimates(type, args) { + let aniObj = this.currentStepAnimates[this.next] + let styles = {} + if (!aniObj) { + styles = { + styles: {}, + config: {} + } + } else { + styles = aniObj + } + if (animateTypes1.includes(type)) { + if (!styles.styles.transform) { + styles.styles.transform = '' + } + let unit = '' + if(type === 'rotate'){ + unit = 'deg' + } + styles.styles.transform += `${type}(${args+unit}) ` + } else { + styles.styles[type] = `${args}` + } + this.currentStepAnimates[this.next] = styles + } + _animateRun(styles = {}, config = {}) { + let ref = this.$.$refs['ani'].ref + if (!ref) return + return new Promise((resolve, reject) => { + nvueAnimation.transition(ref, { + styles, + ...config + }, res => { + resolve() + }) + }) + } + + _nvueNextAnimate(animates, step = 0, fn) { + let obj = animates[step] + if (obj) { + let { + styles, + config + } = obj + this._animateRun(styles, config).then(() => { + step += 1 + this._nvueNextAnimate(animates, step, fn) + }) + } else { + this.currentStepAnimates = {} + typeof fn === 'function' && fn() + this.isEnd = true + } + } + + step(config = {}) { + // #ifndef APP-NVUE + this.animation.step(config) + // #endif + // #ifdef APP-NVUE + this.currentStepAnimates[this.next].config = Object.assign({}, this.options, config) + this.currentStepAnimates[this.next].styles.transformOrigin = this.currentStepAnimates[this.next].config.transformOrigin + this.next++ + // #endif + return this + } + + run(fn) { + // #ifndef APP-NVUE + this.$.animationData = this.animation.export() + this.$.timer = setTimeout(() => { + typeof fn === 'function' && fn() + }, this.$.durationTime) + // #endif + // #ifdef APP-NVUE + this.isEnd = false + let ref = this.$.$refs['ani'] && this.$.$refs['ani'].ref + if(!ref) return + this._nvueNextAnimate(this.currentStepAnimates, 0, fn) + this.next = 0 + // #endif + } +} + + +const animateTypes1 = ['matrix', 'matrix3d', 'rotate', 'rotate3d', 'rotateX', 'rotateY', 'rotateZ', 'scale', 'scale3d', + 'scaleX', 'scaleY', 'scaleZ', 'skew', 'skewX', 'skewY', 'translate', 'translate3d', 'translateX', 'translateY', + 'translateZ' +] +const animateTypes2 = ['opacity', 'backgroundColor'] +const animateTypes3 = ['width', 'height', 'left', 'right', 'top', 'bottom'] +animateTypes1.concat(animateTypes2, animateTypes3).forEach(type => { + MPAnimation.prototype[type] = function(...args) { + // #ifndef APP-NVUE + this.animation[type](...args) + // #endif + // #ifdef APP-NVUE + this._nvuePushAnimates(type, args) + // #endif + return this + } +}) + +export function createAnimation(option, _this) { + if(!_this) return + clearTimeout(_this.timer) + return new MPAnimation(option, _this) +} diff --git a/uni_modules/uni-transition/components/uni-transition/uni-transition.vue b/uni_modules/uni-transition/components/uni-transition/uni-transition.vue new file mode 100644 index 0000000..0d739bd --- /dev/null +++ b/uni_modules/uni-transition/components/uni-transition/uni-transition.vue @@ -0,0 +1,277 @@ + + + + + diff --git a/uni_modules/uni-transition/package.json b/uni_modules/uni-transition/package.json new file mode 100644 index 0000000..d15fdf0 --- /dev/null +++ b/uni_modules/uni-transition/package.json @@ -0,0 +1,87 @@ +{ + "id": "uni-transition", + "displayName": "uni-transition 过渡动画", + "version": "1.3.1", + "description": "元素的简单过渡动画", + "keywords": [ + "uni-ui", + "uniui", + "动画", + "过渡", + "过渡动画" +], + "repository": "https://github.com/dcloudio/uni-ui", + "engines": { + "HBuilderX": "" + }, + "directories": { + "example": "../../temps/example_temps" + }, + "dcloudext": { + "category": [ + "前端组件", + "通用组件" + ], + "sale": { + "regular": { + "price": "0.00" + }, + "sourcecode": { + "price": "0.00" + } + }, + "contact": { + "qq": "" + }, + "declaration": { + "ads": "无", + "data": "无", + "permissions": "无" + }, + "npmurl": "https://www.npmjs.com/package/@dcloudio/uni-ui" + }, + "uni_modules": { + "dependencies": ["uni-scss"], + "encrypt": [], + "platforms": { + "cloud": { + "tcb": "y", + "aliyun": "y" + }, + "client": { + "App": { + "app-vue": "y", + "app-nvue": "y" + }, + "H5-mobile": { + "Safari": "y", + "Android Browser": "y", + "微信浏览器(Android)": "y", + "QQ浏览器(Android)": "y" + }, + "H5-pc": { + "Chrome": "y", + "IE": "y", + "Edge": "y", + "Firefox": "y", + "Safari": "y" + }, + "小程序": { + "微信": "y", + "阿里": "y", + "百度": "y", + "字节跳动": "y", + "QQ": "y" + }, + "快应用": { + "华为": "u", + "联盟": "u" + }, + "Vue": { + "vue2": "y", + "vue3": "y" + } + } + } + } +} \ No newline at end of file diff --git a/uni_modules/uni-transition/readme.md b/uni_modules/uni-transition/readme.md new file mode 100644 index 0000000..2f8a77e --- /dev/null +++ b/uni_modules/uni-transition/readme.md @@ -0,0 +1,11 @@ + + +## Transition 过渡动画 +> **组件名:uni-transition** +> 代码块: `uTransition` + + +元素过渡动画 + +### [查看文档](https://uniapp.dcloud.io/component/uniui/uni-transition) +#### 如使用过程中有任何问题,或者您对uni-ui有一些好的建议,欢迎加入 uni-ui 交流群:871950839 \ No newline at end of file diff --git a/uni_modules/uni-ui/changelog.md b/uni_modules/uni-ui/changelog.md new file mode 100644 index 0000000..253a21e --- /dev/null +++ b/uni_modules/uni-ui/changelog.md @@ -0,0 +1,391 @@ +## 1.4.15(2022-05-07) +- uni-data-picker 修复 字节小程序 本地数据无法选择下一级的Bug +- uni-data-select 新增 记住上次的选项(仅 collection 存在时有效) +- uni-search-bar 修复 vue3 input 事件不生效的bug +- uni-search-bar 修复 多余代码导致的bug +- uni-tooltip 更新 text 属性变更为 content +- uni-tooltip 更新 移除 width 属性 +- uni-tooltip 修复 组件根 text 嵌套组件 warning +## 1.4.14(2022-04-18) +- uni-datetime-picker 修复 Vue3 下动态赋值,单选类型未响应的 bug +- uni-easyinput 修复 默认值不生效的bug +## 1.4.13(2022-04-02) +- uni-calendar 修复 条件编译 nvue 不支持的 css 样式 +- uni-calendar 修复 startDate、 endDate 属性失效的 bug +- uni-data-picker 修复 nvue 不支持的 v-show 的 bug +- uni-data-picker 修复 条件编译 nvue 不支持的 css 样式 +- uni-datetime-picker 修复 Vue3 下动态赋值未响应的 bug +- uni-easyinput 修复 value不能为0的bug +- uni-popup 修复 弹出层内部无法滚动的bug +- uni-popup 修复 小程序中高度错误的bug +- uni-popup 修复 快速调用open出现问题的Bug +- uni-rate 修复 条件判断 `NaN` 错误的 bug +- uni-swipe-action 修复 按钮字体大小不能设置的bug +- uni-swipe-action 修复 h5和app端下报el错误的bug +- uni-swipe-action 修复 HBuilderX 1.4.X 版本中,h5和app端下报错的bug +## 1.4.12(2022-02-19) +- uni-collapse 修复 初始化的时候 ,open 属性失效的bug +- uni-data-checkbox 修复 multiple 为 true 时,v-model 的值为 null 报错的 bug +- uni-icons 优化 size 属性可以传入不带单位的字符串数值 +- uni-icons 优化 size 支持其他单位 +- uni-nav-bar 新增 left-width/right-width属性 ,可修改左右两侧的宽度 +- uni-popup 修复 safeArea 属性不能设置为false的bug +## 1.4.11(2022-01-21) +- uni-collapse 修复 微信小程序resize后组件收起的bug +- uni-countdown 修复 在微信小程序中样式不生效的bug +- uni-countdown 新增 update 方法 ,在动态更新时间后,刷新组件 +- uni-load-more 新增 showText属性 ,是否显示文本 +- uni-load-more 修复 nvue 平台下不显示文本的bug +- uni-load-more 修复 微信小程序平台样式选择器报警告的问题 +- uni-nav-bar 修复 在vue下,标题不垂直居中的bug +- uni-nav-bar 修复 height 属性类型错误 +- uni-nav-bar 新增 height 属性,可修改组件高度 +- uni-nav-bar 新增 dark 属性可可开启暗黑模式 +- uni-nav-bar 优化 标题字数过多显示省略号 +- uni-nav-bar 优化 插槽,插入内容可完全覆盖 +- uni-popup 修复 isMaskClick 失效的bug +- uni-popup 新增 cancelText \ confirmText 属性 ,可自定义文本 +- uni-popup 新增 maskBackgroundColor 属性 ,可以修改蒙版颜色 +- uni-popup 优化 maskClick属性 更新为 isMaskClick ,解决微信小程序警告的问题 + +## 1.4.10(2022-01-17) +- uni-card 修复 在vue页面下略缩图显示不正常的bug +- uni-datetime-picker 修复 clear-icon 属性在小程序平台不生效的 bug +- uni-datetime-picker 修复 日期范围选在小程序平台,必须多点击一次才能取消选中状态的 bug +- uni-fab 更新 组件依赖 +- +- uni-icons 修复 nvue 有些图标不显示的bug,兼容老版本图标 +- uni-icons 优化 示例可复制图标名称 +- uni-nav-bar 修复 color 属性不生效的bug +- uni-popup 修复 设置 safeArea 属性不生效的bug +- uni-popup 优化 组件示例 +- uni-popup 修复 vuedoc 文字错误 +## 1.4.9(2021-11-23) +- uni-ui 修复 vue3中某些scss变量无法找到的问题 +- uni-combox 优化 label、label-width 属性 +- uni-data-picker 修复 由上个版本引发的map、v-model等属性不生效的bug +- uni-file-picker 修复 参数为对象的情况下,url在某些情况显示错误的bug +- uni-icons 优化 兼容旧组件 type 值 +- uni-list 修复 在vue3中to属性在发行应用的时候报错的bug +- uni-scss 修复 vue3中scss语法兼容问题 +- uni-transition 修复 init 方法初始化问题 +## 1.4.8(2021-11-19) +- uni-fab 修复 阴影颜色不正确的bug +## 1.4.7(2021-11-19) +- uni-ui 新增 支持国际化 +- uni-ui 优化 组件UI,并提供设计资源,详见:[https://uniapp.dcloud.io/component/uniui/resource](https://uniapp.dcloud.io/component/uniui/resource) +- uni-ui 文档迁移,详见:[https://uniapp.dcloud.io/component/uniui/uni-ui](https://uniapp.dcloud.io/component/uniui/uni-ui) +- uni-badge 修改 size 属性默认值调整为 small +- uni-badge 修改 type 属性,默认值调整为 error,info 替换 default +- uni-badge 修复 在字节小程序上样式不生效的 bug +- uni-calendar 修复 弹出层被 tabbar 遮盖 bug +- uni-card 重构插槽的用法 ,header 替换为 title +- uni-card 新增 actions 插槽 +- uni-card 新增 cover 封面图属性和插槽 +- uni-card 新增 padding 内容默认内边距离 +- uni-card 新增 margin 卡片默认外边距离 +- uni-card 新增 spacing 卡片默认内边距 +- uni-card 新增 shadow 卡片阴影属性 +- uni-card 取消 mode 属性,可使用组合插槽代替 +- uni-card 取消 note 属性 ,使用actions插槽代替 +- uni-collapse 优化 show-arrow 属性默认为true +- uni-collapse 新增 show-arrow 属性,控制是否显示右侧箭头 +- uni-countdown 新增 font-size 支持自定义字体大小 +- uni-data-checkbox 修复 在uni-forms中 modelValue 中不存在当前字段,当前字段必填写也不参与校验的问题 +- uni-data-checkbox 修复 单选 list 模式下 ,icon 为 left 时,选中图标不显示的问题 +- uni-data-checkbox 修复 在 uni-forms 中重置表单,错误信息无法清除的问题 +- uni-dateformat 优化 默认时间不再是当前时间,而是显示'-'字符 +- uni-datetime-picker 修复 hide-second 在移动端的 bug +- uni-datetime-picker 修复 单选赋默认值时,赋值日期未高亮的 bug +- uni-datetime-picker 修复 赋默认值时,移动端未正确显示时间的 bug +- uni-datetime-picker 新增 hide-second 属性,支持只使用时分,隐藏秒 +- uni-datetime-picker 优化 取消选中时(范围选)直接开始下一次选择, 避免多点一次 +- uni-datetime-picker 优化 移动端支持清除按钮,同时支持通过 ref 调用组件的 clear 方法 +- uni-datetime-picker 优化 调整字号大小,美化日历界面 +- uni-datetime-picker 优化 范围选择器在 pc 端过宽的问题 +- uni-datetime-picker 新增 支持作为 uni-forms 子组件相关功能 +- uni-datetime-picker 修复 在 uni-forms 中使用时,选择时间报 NAN 错误的 bug +- uni-datetime-picker 修复 type 属性动态赋值无效的 bug +- uni-datetime-picker 修复 ‘确认’按钮被 tabbar 遮盖 bug +- uni-datetime-picker 修复 组件未赋值时范围选左、右日历相同的 bug +- uni-datetime-picker 修复 范围选未正确显示当前值的 bug +- uni-datetime-picker 修复 h5 平台(移动端)报错 'cale' of undefined 的 bug +- uni-easyinput 修复 在 uni-forms 的动态表单中默认值校验不通过的 bug +- uni-easyinput 修复 在 uni-forms 中重置表单,错误信息无法清除的问题 +- uni-file-picker 新增 参数中返回 fileID 字段 +- uni-file-picker 修复 腾讯云传入fileID 不能回显的bug +- uni-file-picker 修复 选择图片后,不能放大的问题 +- uni-file-picker 修复 由于 0.2.11 版本引起的不能回显图片的Bug +- uni-file-picker 新增 clearFiles(index) 方法,可以手动删除指定文件 +- uni-file-picker 修复 v-model 值设为 null 报错的Bug +- uni-file-picker 修复 return-type="object" 时,无法删除文件的Bug +- uni-file-picker 修复 auto-upload 属性失效的Bug +- uni-forms 修复 label 插槽不生效的bug +- uni-forms 修复 没有添加校验规则的字段依然报错的Bug +- uni-forms 修复 重置表单错误信息无法清除的问题 +- uni-forms 修复 表单验证只生效一次的问题 +- uni-icons 新增 更多图标 +- uni-icons 优化 自定义图标使用方式 +- uni-link 修复 在 nvue 下不显示的 bug +- uni-pagination 修复 current 、value 属性未监听,导致高亮样式失效的 bug +- uni-rate 优化 默认值修改为 0 颗星 +- uni-search-bar 修复 value 属性与 modelValue 属性不兼容的Bug +- uni-swipe-action 新增 close-all 方法,关闭所有已打开的组件 +- uni-swipe-action 新增 resize() 方法,在非微信小程序、h5、app-vue端出现不能滑动的问题的时候,重置组件 +- uni-swipe-action 修复 app 端偶尔出现类似 Page[x][-x,xx;-x,xx,x,x-x] 的问题 +- uni-swipe-action 优化 微信小程序、h5、app-vue 滑动逻辑,避免出现动态新增组件后不能滑动的问题 +- uni-tag 新增 提供组件设计资源,组件样式调整 +- uni-tag 移除 插槽 +- uni-tag 移除 type 属性的 royal 选项 +- uni-tag type 不是 default 时,size 为 small 字体大小显示不正确 +## 1.4.2(2021-08-20) +- 新增 uni-ui 组件支持国际化 i18n +- uni-collapse 优化 show-arrow 属性默认为true +- uni-collapse 新增 show-arrow 属性,控制是否显示右侧箭头 +- uni-data-checkbox 修复 单选 list 模式下 ,icon 为 left 时,选中图标不显示的问题 +- uni-easyinput 修复 在 uni-forms 的动态表单中默认值校验不通过的 bug +- uni-file-picker 修复 由于 0.2.11 版本引起的不能回显图片的Bug +- uni-file-picker 新增 clearFiles(index) 方法,可以手动删除指定文件 +- uni-file-picker 修复 v-model 值设为 null 报错的Bug +- uni-swipe-action 新增 close-all 方法,关闭所有已打开的组件 +- uni-swipe-action 新增 resize() 方法,在非微信小程序、h5、app-vue端出现不能滑动的问题的时候,重置组件 +- uni-swipe-action 修复 app 端偶尔出现类似 Page[x][-x,xx;-x,xx,x,x-x] 的问题 +- uni-swipe-action 优化 微信小程序、h5、app-vue 滑动逻辑,避免出现动态新增组件后不能滑动的问题 +## 1.4.0(2021-08-13) +- uni-calendar 修复 弹出层被 tabbar 遮盖 bug +- uni-data-checkbox 修复 在 uni-forms 中重置表单,错误信息无法清除的问题 +- uni-dateformat 调整 默认时间不再是当前时间,而是显示'-'字符 +- uni-datetime-picker 新增 适配 vue3 +- uni-datetime-picker 新增 支持作为 uni-forms 子组件相关功能 +- uni-datetime-picker 修复 在 uni-forms 中使用时,选择时间报 NAN 错误的 bug +- uni-datetime-picker 修复 type 属性动态赋值无效的 bug +- uni-datetime-picker 修复 ‘确认’按钮被 tabbar 遮盖 bug +- uni-datetime-picker 修复 组件未赋值时范围选左、右日历相同的 bug +- uni-datetime-picker 修复 范围选未正确显示当前值的 bug +- uni-datetime-picker 修复 h5 平台(移动端)报错 'cale' of undefined 的 bug +- uni-easyinput 修复 在 uni-forms 中重置表单,错误信息无法清除的问题 +- uni-file-picker 修复 return-type="object" 时,无法删除文件的Bug +- uni-file-picker 修复 auto-upload 属性失效的Bug +- uni-forms 修复 没有添加校验规则的字段依然报错的Bug +- uni-forms 修复 重置表单错误信息无法清除的问题 +- uni-forms 优化 组件文档 +- uni-forms 修复 表单验证只生效一次的问题 +- uni-tag type 不是 default 时,size 为 small 字体大小显示不正确 +## 1.3.9(2021-08-02) +- uni-datetime-picker 新增 return-type 属性支持返回 date 日期对象 +- uni-file-picker 修复 fileExtname属性不指定值报错的Bug +- uni-file-picker 修复 在某种场景下图片不回显的Bug +- uni-link 支持自定义插槽 +## 1.3.8(2021-07-31) +- uni-ui 组件兼容 vue3 +- uni-collapse 修复 由1.2.0版本引起的 change 事件返回 undefined 的Bug +- uni-collapse 优化 组件示例 +- uni-collapse 新增 组件折叠动画 +- uni-collapse 新增 value\v-model 属性 ,动态修改面板折叠状态 +- uni-collapse 新增 title 插槽 ,可定义面板标题 +- uni-collapse 新增 border 属性 ,显示隐藏面板内容分隔线 +- uni-collapse 新增 title-border 属性 ,显示隐藏面板标题分隔线 +- uni-collapse 修复 resize 方法失效的Bug +- uni-collapse 修复 change 事件返回参数不正确的Bug +- uni-collapse 优化 H5、App 平台自动更具内容更新高度,无需调用 reszie() 方法 +- uni-data-checkbox 优化 在uni-forms组件,与label不对齐的问题 +- uni-data-checkbox 修复 单选默认值为0不能选中的Bug +- uni-easyinput 优化 errorMessage 属性支持 Boolean 类型 +- uni-file-picker 修复 return-type为object下,返回值不正确的Bug +- uni-file-picker 修复(重要) H5 平台下如果和uni-forms组件一同使用导致页面卡死的问题 +- uni-file-picker 优化 h5平台下上传文件导致页面卡死的问题 +- uni-forms 修复 vue2 下条件编译导致destroyed生命周期失效的Bug +- uni-forms 修复 1.2.1 引起的示例在小程序平台报错的Bug +- uni-forms 修复 动态校验表单,默认值为空的情况下校验失效的Bug +- uni-forms 修复 不指定name属性时,运行报错的Bug +- uni-forms 优化 label默认宽度从65调整至70,使required为true且四字时不换行 +- uni-forms 优化 组件示例,新增动态校验示例代码 +- uni-forms 优化 组件文档,使用方式更清晰 +- uni-list 修复 与其他组件嵌套使用时,点击失效的Bug +- uni-swipe-action 修复 跨页面修改组件数据 ,导致不能滑动的问题 +## 1.3.7(2021-07-16) +- uni-ui 兼容 vue3,如何创建vue3项目,详见 [uni-app 项目支持 vue3 介绍](https://ask.dcloud.net.cn/article/37834) +- uni-datetime-picker 修复 单选日期类型,初始赋值后不在当前日历的 bug +- uni-datetime-picker 新增 clearIcon 属性,显示框的清空按钮可配置显示隐藏(仅 pc 有效) +- uni-datetime-picker 优化 移动端移除显示框的清空按钮,无实际用途 +- uni-datetime-picker 修复 组件赋值为空,界面未更新的 bug +- uni-datetime-picker 修复 start 和 end 不能动态赋值的 bug +- uni-datetime-picker 修复 范围选类型,用户选择后再次选择右侧日历(结束日期)显示不正确的 bug +## 1.3.6(2021-07-09) +- uni-data-checkbox 优化 删除无用日志 +- uni-data-checkbox 修复 由 0.1.9 引起的非 nvue 端图标不显示的问题 +- uni-data-checkbox 修复 nvue 黑框样式问题 +- uni-datetime-picker 修复 范围选择不能动态赋值的 bug +- uni-datetime-picker 修复 范围选择的初始时间在一个月内时,造成无法选择的bug +- uni-datetime-picker 优化 弹出层在超出视窗边缘定位不准确的问题 +- uni-datetime-picker 修复 范围起始点样式的背景色与今日样式的字体前景色融合,导致日期字体看不清的 bug +- uni-datetime-picker 优化 弹出层在超出视窗边缘被遮盖的问题 +- uni-datetime-picker 新增 maskClick 事件 +- uni-datetime-picker 修复 特殊情况日历 rpx 布局错误的 bug,rpx -> px +- uni-datetime-picker 修复 范围选择时清空返回值不合理的bug,['', ''] -> [] +- uni-datetime-picker 新增 日期时间显示框支持插槽 +- uni-file-picker 修复 sourceType 缺少默认值导致 ios 无法选择文件 +- uni-file-picker 优化 解耦与uniCloud的强绑定关系 ,如不绑定服务空间,默认autoUpload为false且不可更改 +- uni-table 新增 uni-th 支持 date 日期筛选范围 +- uni-table 新增 uni-th 支持 range 筛选范围 +- uni-table 新增 uni-th 筛选功能 +## 1.3.5(2021-07-02) +- uni-card 优化 图文卡片无图片加载时,提供占位图标 +- uni-card 新增 header 插槽,自定义卡片头部( 图文卡片 mode="style" 时,不支持) +- uni-card 修复 thumbnail 不存在仍然占位的 bug +- uni-data-checkbox 修复 selectedTextColor 属性不生效的Bug +- uni-datetime-picker 优化 添加 uni-icons 依赖 +- uni-easyinput 修复 confirmType 属性(仅 type="text" 生效)导致多行文本框无法换行的 bug +- uni-file-picker 修复 由 0.0.10 版本引发的 returnType 属性失效的问题 +- uni-file-picker 优化 文件上传后进度条消失时机 +- uni-file-picker 修复 在uni-forms 中,删除文件 ,获取的值不对的Bug +- uni-forms 修复 pattern 属性在微信小程序平台无效的问题 +## 1.3.4(2021-06-25) +- uni-badge 优化 示例项目 +- uni-countdown 修复 uni-countdown 重复赋值跳两秒的 bug +- uni-easyinput 修复 passwordIcon 属性拼写错误的 bug +- uni-forms 修复 validate-trigger属性为submit且err-show-type属性为toast时不能弹出的Bug +- uni-forms 修复 只写setRules方法而导致校验不生效的Bug +- uni-forms 修复 由上个办法引发的错误提示文字错位的Bug +- uni-forms 修复 不设置 label 属性 ,无法设置label插槽的问题 +- uni-forms 修复 不设置label属性,label-width属性不生效的bug +- uni-forms 修复 setRules 方法与rules属性冲突的问题 +- uni-link 新增 download 属性,H5平台下载文件名 +- uni-popup 新增 mask-click 遮罩层点击事件 +- uni-popup 修复 nvue 平台中间弹出后,点击内容,再点击遮罩无法关闭的Bug +- uni-tag 修复 uni-tag 在字节跳动小程序上 css 类名编译错误的 bug +## 1.3.3(2021-06-18) +- uni-easyinput 新增 passwordIcon 属性,当type=password时是否显示小眼睛图标 +- uni-easyinput 修复 confirmType 属性不生效的问题 +- uni-easyinput 修复 disabled 状态可清出内容的 bug +- uni-file-picker 修复 删除文件时无法触发 v-model 的Bug +- uni-popup 修复 H5平台中间弹出后,点击内容,再点击遮罩无法关闭的Bug +- uni-popup 修复 错误的 watch 字段 +- uni-popup 修复 safeArea 属性不生效的问题 +- uni-popup 修复 点击内容,再点击遮罩无法关闭的Bug +## 1.3.2(2021-06-04) +- uni-data-checkbox 新增 map 属性,可以方便映射text/value属性 +- uni-data-checkbox 修复 不关联服务空间的情况下组件报错的Bug +- uni-data-picker 修复 上个版本引出的本地数据无法选择带有children的2级节点 +- uni-forms 修复 动态删减数据导致报错的问题 +- uni-forms 新增 modelValue 属性 ,value 即将废弃 +- uni-forms 新增 uni-forms-item 可以设置单独的 rules +- uni-forms 新增 validate 事件增加 keepitem 参数,可以选择那些字段不过滤 +- uni-forms 优化 submit 事件重命名为 validate +- uni-data-picker 修复 无法加载云端数据的问题 +- uni-data-picker 修复 v-model无效问题 +- uni-data-picker 修复 loaddata 为空数据组时加载时间过长问题 +- uni-datetime-picker 修复 图标在小程序上不显示的 bug +- uni-datetime-picker 优化 重命名引用组件,避免潜在组件命名冲突 +- uni-datetime-picker 优化 代码目录扁平化 +- uni-tag 修复 未定义 sass 变量 "$uni-color-royal" 的bug +## 1.3.1(2021-05-14) +- uni-badge 新增 uni-badge 的 absolute 属性,支持定位 +- uni-badge 新增 uni-badge 的 offset 属性,支持定位偏移 +- uni-badge 新增 uni-badge 的 is-dot 属性,支持仅显示有一个小点 +- uni-badge 新增 uni-badge 的 max-num 属性,支持自定义封顶的数字值,超过 99 显示99+ +- uni-badge 优化 uni-badge 属性 custom-style, 支持以对象形式自定义样式 +- uni-badge 修复 uni-badge 在 App 端,数字小于10时不是圆形的bug +- uni-badge 修复 uni-badge 在父元素不是 flex 布局时,宽度缩小的bug +- uni-badge 新增 uni-badge 属性 custom-style, 支持自定义样式 +- uni-datetime-picker 修复 ios 下不识别 '-' 日期格式的 bug +- uni-datetime-picker 优化 pc 下弹出层添加边框和阴影 +- uni-datetime-picker 修复 在 admin 中获取弹出层定位错误的bug +- uni-datetime-picker 修复 type 属性向下兼容,默认值从 date 变更为 datetime +- uni-datetime-picker 支持日历形式的日期+时间的范围选择 +- uni-steps 修复 uni-steps 横向布局时,多行文字高度不合理的 bug +- uni-countdown 修复 uni-countdown 不能控制倒计时的 bug +- uni-tag 修复 royal 类型无效的bug +- uni-tag 修复 uni-tag 宽度不自适应的bug +- uni-tag 新增 uni-tag 支持属性 custom-style 自定义样式 +- uni-link 新增 href 属性支持 tel:|mailto: +- uni-popup 修复 组件内放置 input 、textarea 组件,无法聚焦的问题 +- uni-popup 新增 type 属性的 left\right 值,支持左右弹出 +- uni-popup 新增 open(String:type) 方法参数 ,可以省略 type 属性 ,直接传入类型打开指定弹窗 +- uni-popup 新增 backgroundColor 属性,可定义主窗口背景色,默认不显示背景色 +- uni-popup 新增 safeArea 属性,是否适配底部安全区 +- uni-popup 修复 App\h5\微信小程序底部安全区占位不对的Bug +- uni-popup 修复 App 端弹出等待的Bug +- uni-popup 优化 提升低配设备性能,优化动画卡顿问题 +- uni-popup 优化 更简单的组件自定义方式 +- uni-table 修复 示例项目缺少组件的Bug +- uni-forms 修复 自定义检验器失效的问题 +- uni-title 修复 示例项目缺少组件的Bug +- uni-transition 修复 示例项目缺少组件的Bug +- uni-swiper-dot 修复 示例项目缺少组件的Bug +- uni-ui 新增 组件示例地址 +## 1.3.0(2021-04-23) +- uni-combox 优化 添加依赖 uni-icons, 导入后自动下载依赖 +- uni-data-picker 修复 非树形数据有 where 属性查询报错的问题 +- uni-fav 优化 添加依赖 uni-icons, 导入后自动下载依赖 +- uni-goods-nav 优化 添加依赖 uni-icons, 导入后自动下载依赖 +- uni-nav-bar 优化 添加依赖 uni-icons, 导入后自动下载依赖 +- uni-notice-bar 优化 添加依赖 uni-icons, 导入后自动下载依赖 +- uni-number-box 修复 uni-number-box 浮点数运算不精确的 bug +- uni-number-box 修复 uni-number-box change 事件触发不正确的 bug +- uni-number-box 新增 uni-number-box v-model 双向绑定 +- uni-rate 修复 布局变化后 uni-rate 星星计算不准确的 bug +- uni-rate 优化 添加依赖 uni-icons, 导入 uni-rate 自动下载依赖 +- uni-search-bar 优化 添加依赖 uni-icons, 导入后自动下载依赖 +- uni-steps 优化 添加依赖 uni-icons, 导入后自动下载依赖 +- uni-transition 新增 通过方法自定义动画 +- uni-transition 新增 custom-class 非 NVUE 平台支持自定义 class 定制样式 +- uni-transition 优化 动画触发逻辑,使动画更流畅 +- uni-transition 优化 支持单独的动画类型 +- uni-transition 优化 文档示例 +## 1.2.13(2021-04-16) +- uni-ui 新增 uni-data-picker 支持云端非树形表结构数据 +- uni-ui 修复 uni-data-checkbox nvue 下无法选中的问题 +- uni-ui 修复 uni-data-picker 根节点 parent_field 字段等于null时选择界面错乱问题 +- uni-ui 修复 uni-file-picker 选择的文件非 file-extname 字段指定的扩展名报错的Bug +- uni-ui 修复 uni-swipe-action 报错 nv_navigator is not defined 的bug +- uni-ui 修复 uni-load-more 在首页使用时,h5 平台报 'uni is not defined' 的 bug +- uni-ui 优化 uni-file-picker file-extname 字段支持字符串写法,多个扩展名需要用逗号分隔 +- uni-ui 优化 uni-pagination PC 和 移动端适配不同的 ui +- uni-ui 更新 uni-file-picker 组件示例 +- uni-ui 修复 uni-nav-bar 当 fixed 属性为 true 时铺不满屏幕的 bug +- uni-ui 新增 uni-search-bar 的 focus 事件 +- uni-ui 修复 uni-rate 属性 margin 值为 string 组件失效的 bug +- uni-data-picker 修复 本地数据概率无法回显时问题 +- uni-table 新增 sortable 属性,是否开启单列排序 +- uni-table 优化 表格多选逻辑 +## 1.2.12(2021-03-23) +- uni-ui 新增 uni-datetime-picker 的 hide-second 属性、border 属性; +- uni-ui 修复 uni-datetime-picker 选择跟显示的日期不一样的 bug, +- uni-ui 修复 uni-datetime-picker change事件触发2次的 bug +- uni-ui 修复 uni-datetime-picker 分、秒 end 范围错误的 bug +- uni-ui 新增 uni-tr selectable 属性,用于 type=selection 时,设置某行是否可由全选按钮控制 +- uni-ui 新增 uni-data-checkbox 新增 disabled属性,支持nvue +- uni-ui 优化 uni-data-checkbox 无选项时提示“暂无数据” +- uni-ui 优化 uni-data-checkbox 默认颜色显示 +- uni-ui 新增 uni-link href 属性支持 tel:|mailto: +- uni-ui 新增 uni-table 示例demo +- uni-ui 修复 uni-data-picker 微信小程序某些情况下无法选择的问题,事件无法触发的问题 +- uni-ui 修复 uni-nav-bar easycom 下,找不到 uni-status-bar 的bug +- uni-ui 修复 uni-easyinput 示例在 qq 小程序上的bug +- uni-ui 修复 uni-forms 动态显示uni-forms-item的情况下,submit 方法获取值错误的Bug +- uni-ui 调整 cli 项目 建议使用 easycom 方式引用组件,如使用按需引用,需手动维护组件内部引用 + +## 1.2.11(2021-02-24) +- 调整为uni_modules目录规范 +- uni-data-picker 新增 数据驱动的picker选择器 +- uni-file-picker 新增 文件选择上传 +- uni-row 新增 栅格系统 +- uni-data-checkbox 优化 支持 nvue +- uni-forms 修复 偶发性获取表单值错误的Bug +- uni-forms 修复 校验 uni-data-picker value 为 0 时,返回值错误的Bug +- uni-forms 修复 uni-forms-item 组件隐藏时依然触发校验的bug +- uni-forms 优化 实时校验 +- uni-forms 优化 兼容nvue页面 +- uni-easyinput 优化 兼容nvue页面 +- uni-group 优化 兼容nvue页面 +- uni-popup 优化 组件适配 PC +- uni-fab 优化 适配 PC +- uni-swiper-dot 优化 适配 PC +- uni-rate 优化 适配 PC +- uni-notice-bar 优化 适配 PC +- uni-indexed-list 优化 适配 PC +- uni-combox 优化 适配 PC +- uni-transition 优化 适配 PC +- uni-nav-bar 优化 适配 PC +- uni-swipe-action 优化 适配 PC diff --git a/uni_modules/uni-ui/components/uni-ui/uni-ui.vue b/uni_modules/uni-ui/components/uni-ui/uni-ui.vue new file mode 100644 index 0000000..0970892 --- /dev/null +++ b/uni_modules/uni-ui/components/uni-ui/uni-ui.vue @@ -0,0 +1,7 @@ + + + diff --git a/uni_modules/uni-ui/package.json b/uni_modules/uni-ui/package.json new file mode 100644 index 0000000..0fba2bf --- /dev/null +++ b/uni_modules/uni-ui/package.json @@ -0,0 +1,128 @@ +{ + "id": "uni-ui", + "displayName": "uni-ui", + "version": "1.4.15", + "description": "uni-ui 是基于uni-app的、全端兼容的、高性能UI框架", + "keywords": [ + "uni-ui", + "uniui", + "UI组件库", + "ui框架", + "ui库" +], + "repository": "https://github.com/dcloudio/uni-ui", + "engines": { + "HBuilderX": "^3.2.10" + }, + "directories": { + "example": "../../temps/example_temps" + }, + "dcloudext": { + "category": [ + "前端组件", + "通用组件" + ], + "sale": { + "regular": { + "price": "0.00" + }, + "sourcecode": { + "price": "0.00" + } + }, + "contact": { + "qq": "" + }, + "declaration": { + "ads": "无", + "data": "无", + "permissions": "无" + }, + "npmurl": "https://www.npmjs.com/package/@dcloudio/uni-ui" + }, + "uni_modules": { + "dependencies": [ + "uni-badge", + "uni-calendar", + "uni-card", + "uni-collapse", + "uni-combox", + "uni-countdown", + "uni-data-checkbox", + "uni-data-picker", + "uni-dateformat", + "uni-datetime-picker", + "uni-drawer", + "uni-easyinput", + "uni-fab", + "uni-fav", + "uni-file-picker", + "uni-forms", + "uni-goods-nav", + "uni-grid", + "uni-group", + "uni-icons", + "uni-indexed-list", + "uni-link", + "uni-list", + "uni-load-more", + "uni-nav-bar", + "uni-notice-bar", + "uni-number-box", + "uni-pagination", + "uni-popup", + "uni-rate", + "uni-row", + "uni-search-bar", + "uni-segmented-control", + "uni-steps", + "uni-swipe-action", + "uni-swiper-dot", + "uni-table", + "uni-tag", + "uni-title", + "uni-transition" + ], + "encrypt": [], + "platforms": { + "cloud": { + "tcb": "y", + "aliyun": "y" + }, + "client": { + "App": { + "app-vue": "y", + "app-nvue": "y" + }, + "H5-mobile": { + "Safari": "y", + "Android Browser": "y", + "微信浏览器(Android)": "y", + "QQ浏览器(Android)": "y" + }, + "H5-pc": { + "Chrome": "y", + "IE": "y", + "Edge": "y", + "Firefox": "y", + "Safari": "y" + }, + "小程序": { + "微信": "y", + "阿里": "y", + "百度": "y", + "字节跳动": "y", + "QQ": "y" + }, + "快应用": { + "华为": "u", + "联盟": "u" + }, + "Vue": { + "vue2": "y", + "vue3": "y" + } + } + } + } +} \ No newline at end of file diff --git a/uni_modules/uni-ui/readme.md b/uni_modules/uni-ui/readme.md new file mode 100644 index 0000000..5541b22 --- /dev/null +++ b/uni_modules/uni-ui/readme.md @@ -0,0 +1,248 @@ +> 当前插件不包含示例页面 ,如需示例请在 HBuiderX 中新建 `hello uni-app > 扩展组件` 中查看 +> +> 代码示例地址 :[https://ext.dcloud.net.cn/plugin?id=4941](https://ext.dcloud.net.cn/plugin?id=4941) +> +> 组件演示地址:[https://hellouniapp.dcloud.net.cn](https://hellouniapp.dcloud.net.cn/pages/extUI/badge/badge) +> +> 组件文档地址:[https://uniapp.dcloud.io/component/uniui/uni-ui](https://uniapp.dcloud.io/component/uniui/uni-ui) + +# uni-ui 介绍 + +## uni-ui产品特点 + +### 1. 高性能 + +目前为止,在小程序和混合app领域,暂时还没有比 `uni-ui` 更高性能的框架。 +- 自动差量更新数据 + +虽然uni-app支持小程序自定义组件,所有小程序的ui库都可以用。但小程序自定义组件的ui库都需要使用setData手动更新数据,在大数据量时、或高频更新数据时,很容易产生性能问题。 + +而 `uni-ui` 属于vue组件,uni-app引擎底层自动diff更新数据。当然其实插件市场里众多vue组件都具备这个特点。 +- 优化逻辑层和视图层通讯折损 + +非H5,不管是小程序还是App,不管是app的webview渲染还是原生渲染,全都是逻辑层和视图层分离的。这里就有一个逻辑层和视图层通讯的折损问题。 +比如在视图层拖动一个可跟手的组件,由于通讯的损耗,用js监听很难做到实时跟手。 + +这时就需要使用css动画以及平台底层提供的wxs、bindingx等技术。不过这些技术都比较复杂,所以 `uni-ui` 里做了封装,在需要跟手式操作的ui组件,比如swiperaction列表项左滑菜单,就在底层使用了这些技术,实现了高性能的交互体验 +- 背景停止 + +很多ui组件是会一直动的,比如轮播图、跑马灯。即便这个窗体被新窗体挡住,它在背景层仍然在消耗着硬件资源。在Android的webview版本为chrome66以上,背景操作ui会引发很严重的性能问题,造成前台界面明显卡顿。 + +而 `uni-ui` 的组件,会自动判断自己的显示状态,在组件不再可见时,不会再消耗硬件资源。 + +### 2. 全端 + + `uni-ui` 的组件都是多端自适应的,底层会抹平很多小程序平台的差异或bug。 + +比如导航栏navbar组件,会自动处理不同端的状态栏。 +比如swiperaction组件,在app和微信小程序上会使用交互体验更好的wxs技术,但在不支持wxs的其他小程序端会使用js模拟类似效果。 + + `uni-ui` 还支持nvue原生渲染,[详见](https://github.com/dcloudio/uni-ui/tree/nvue-uni-ui) + +未来 `uni-ui` 还会支持pc等大屏设备。 + +### 3. 与uni统计自动集成实现免打点 + +uni统计是优秀的多端统计平台,见[tongji.dcloud.net.cn](https://tongji.dcloud.net.cn)。 + +除了一张报表看全端,它的另一个重要特点是免打点。 +比如使用 `uni-ui` 的navbar标题栏、收藏、购物车等组件,均可实现自动打点,统计页面标题等各种行为数据。 +当然你也可以关闭uni统计,这不是强制的。 + +### 4. 主题扩展 + + `uni-ui` 支持[uni.scss](https://uniapp.dcloud.io/collocation/uni-scss),可以方便的切换App的风格。 + +ui是一种需求非常发散的产品,DCloud官方也无意用 `uni-ui` 压制第三方ui插件的空间,但官方有义务在性能和多端方面提供一个开源的标杆给大家。 + +我们欢迎更多优秀的ui组件出现,也欢迎更多人贡献 `uni-ui` 的主题风格,满足更多用户的需求。 + + +## 快速开始 + +uni-ui支持 HBuilderX直接新建项目模板、npm安装和单独导入个别组件等多种使用方式 + +### 在HBuilderX 新建uni-app项目的模板中,选择uni-ui模板 +![HBuilderX内创建uni-ui项目](https://img.cdn.aliyun.dcloud.net.cn/uni-app/doc/create-uni-ui-project.jpg) + +由于uni-app独特的[easycom](https://uniapp.dcloud.io/collocation/pages?id=easycom)技术,可以免引用、注册,直接使用各种符合规则的vue组件。 + +在代码区键入`u`,拉出各种内置或uni-ui的组件列表,选择其中一个,即可使用该组件。 + +光标放在组件名称上,按F1,可以查阅组件的文档。 + +![uni-ui代码块](https://img.cdn.aliyun.dcloud.net.cn/uni-app/doc/uni-ui-snippet.jpg) + +### 通过 uni_modules 单独安装组件 +如果你没有创建uni-ui项目模板,也可以在你的工程里,通过 uni_modules 单独安装需要的某个组件。下表为uni-ui的扩展组件清单,点击每个组件在详情页面可以导入组件到项目下,导入后直接使用即可,无需import和注册。 + +|组件名|组件说明| +|---|---| +|uni-badge|[数字角标](https://ext.dcloud.net.cn/plugin?name=uni-badge)| +|uni-calendar|[日历](https://ext.dcloud.net.cn/plugin?name=uni-calendar)| +|uni-card|[卡片](https://ext.dcloud.net.cn/plugin?name=uni-card)| +|uni-collapse|[折叠面板](https://ext.dcloud.net.cn/plugin?name=uni-collapse)| +|uni-combox|[组合框](https://ext.dcloud.net.cn/plugin?name=uni-combox)| +|uni-countdown|[倒计时](https://ext.dcloud.net.cn/plugin?name=uni-countdown)| +|uni-data-checkbox|[数据选择器](https://ext.dcloud.net.cn/plugin?name=uni-data-checkbox)| +|uni-data-picker|[数据驱动的picker选择器](https://ext.dcloud.net.cn/plugin?name=uni-data-picker)| +|uni-dateformat|[日期格式化](https://ext.dcloud.net.cn/plugin?name=uni-dateformat)| +|uni-datetime-picker|[日期选择器](https://ext.dcloud.net.cn/plugin?name=uni-datetime-picker)| +|uni-drawer|[抽屉](https://ext.dcloud.net.cn/plugin?name=uni-drawer)| +|uni-easyinput|[增强输入框](https://ext.dcloud.net.cn/plugin?name=uni-easyinput)| +|uni-fab|[悬浮按钮](https://ext.dcloud.net.cn/plugin?name=uni-fab)| +|uni-fav|[收藏按钮](https://ext.dcloud.net.cn/plugin?name=uni-fav)| +|uni-file-picker|[文件选择上传](https://ext.dcloud.net.cn/plugin?name=uni-file-picker)| +|uni-forms|[表单](https://ext.dcloud.net.cn/plugin?name=uni-forms)| +|uni-goods-nav|[商品导航](https://ext.dcloud.net.cn/plugin?name=uni-goods-nav)| +|uni-grid|[宫格](https://ext.dcloud.net.cn/plugin?name=uni-grid)| +|uni-group|[分组](https://ext.dcloud.net.cn/plugin?name=uni-group)| +|uni-icons|[图标](https://ext.dcloud.net.cn/plugin?name=uni-icons)| +|uni-indexed-list|[索引列表](https://ext.dcloud.net.cn/plugin?name=uni-indexed-list)| +|uni-link|[超链接](https://ext.dcloud.net.cn/plugin?name=uni-link)| +|uni-list|[列表](https://ext.dcloud.net.cn/plugin?name=uni-list)| +|uni-load-more|[加载更多](https://ext.dcloud.net.cn/plugin?name=uni-load-more)| +|uni-nav-bar|[自定义导航栏](https://ext.dcloud.net.cn/plugin?name=uni-nav-bar)| +|uni-notice-bar|[通告栏](https://ext.dcloud.net.cn/plugin?name=uni-notice-bar)| +|uni-number-box|[数字输入框](https://ext.dcloud.net.cn/plugin?name=uni-number-box)| +|uni-pagination|[分页器](https://ext.dcloud.net.cn/plugin?name=uni-pagination)| +|uni-popup|[弹出层](https://ext.dcloud.net.cn/plugin?name=uni-popup)| +|uni-rate|[评分](https://ext.dcloud.net.cn/plugin?name=uni-rate)| +|uni-row|[布局-行](https://ext.dcloud.net.cn/plugin?name=uni-row)| +|uni-search-bar|[搜索栏](https://ext.dcloud.net.cn/plugin?name=uni-search-bar)| +|Section|[标题栏](https://ext.dcloud.net.cn/plugin?name=uni-section)| +|uni-segmented-control|[分段器](https://ext.dcloud.net.cn/plugin?name=uni-segmented-control)| +|uni-steps|[步骤条](https://ext.dcloud.net.cn/plugin?name=uni-steps)| +|uni-swipe-action|[滑动操作](https://ext.dcloud.net.cn/plugin?name=uni-swipe-action)| +|uni-swiper-dot|[轮播图指示点](https://ext.dcloud.net.cn/plugin?name=uni-swiper-dot)| +|uni-table|[表格](https://ext.dcloud.net.cn/plugin?name=uni-table)| +|uni-tag|[标签](https://ext.dcloud.net.cn/plugin?name=uni-tag)| +|uni-title|[章节标题](https://ext.dcloud.net.cn/plugin?name=uni-title)| +|uni-transition|[过渡动画](https://ext.dcloud.net.cn/plugin?name=uni-transition)| + + +使用 `uni_modules` 方式安装组件库,可以直接通过插件市场导入,通过右键菜单快速更新组件,不需要引用、注册,直接在页面中使用 `uni-ui` 组件。[点击安装 uni-ui 组件库](https://ext.dcloud.net.cn/plugin?id=55) + +**注意:下载最新的组件目前仅支持 uni_modules ,非 uni_modules 版本最高支持到组件的1.2.10版本** + +如不能升级到 `uni_modules` 版本,可以使用 `uni_modules` 安装好对应组件,将组件拷贝到对应目录。 + +例如需更新 `uni-list`和`uni-badge` ,将 `uni_modules>uni-list>components`和`uni_modules>uni-badege>components`下所有目录拷贝到如下目录即可: + + +**目录示例** + +```json +┌─components 组件目录 +│ ├─uni-list list 列表目录 +│ │ └─uni-list.vue list 组件文件 +│ ├─uni-list-item list-item 列表目录 +│ │ └─uni-list-item.vue list 组件文件 +│ ├─uni-badge badge 角标目录 +│ │ └─uni-badge.vue badge 组件文件 +│ └─ //.... 更多组件文件 +├─pages 业务页面文件存放的目录 +│ ├─index +│ │ └─index.vue index示例页面 +├─main.js Vue初始化入口文件 +├─App.vue 应用配置,用来配置App全局样式以及监听 应用生命周期 +├─manifest.json 配置应用名称、appid、logo、版本等打包信息,详见 +└─pages.json 配置页 + +``` + +### 通过 `uni_modules` 导入全部组件 +如果想一次把所有uni-ui组件导入到项目中,只需要导入一个 `uni-ui` 组件即可 [点击去导入](https://ext.dcloud.net.cn/plugin?id=55)。 + +如果没有自动导入其他组件,可以在 uni-ui 组件目录上右键选择 `安装三方插件依赖` 即可。 + + + +### npm安装 +在 `vue-cli` 项目中可以使用 `npm` 安装 `uni-ui` 库 ,或者直接在 `HBuilderX` 项目中使用 `npm` 。 + +> **注意** +> cli 项目默认是不编译 `node_modules` 下的组件的,导致条件编译等功能失效 ,导致组件异常 +> 需要在根目录创建 `vue.config.js` 文件 ,增加 `@dcloudio/uni-ui` 包的编译即可正常 +> ```javascript +> // vue.config.js +> module.exports = { +> transpileDependencies:['@dcloudio/uni-ui'] +> } +> ``` + + + +**准备 sass** + +`vue-cli` 项目请先安装 sass 及 sass-loader,如在 HBuliderX 中使用,可跳过此步。 + +- 安装 sass +``` + npm i sass -D 或 yarn add sass -D +``` + +- 安装 sass-loader +``` +npm i sass-loader@10.1.1 -D 或 yarn add sass-loader@10.1.1 -D +``` + +> 如果 `node` 版本小于 16 ,sass-loader 请使用低于 @11.0.0 的版本,[sass-loader@11.0.0 不支持 vue@2.6.12 ](https://stackoverflow.com/questions/66082397/typeerror-this-getoptions-is-not-a-function) +> 如果 `node` 版本大于 16 , `sass-loader` 建议使用 `v8.x` 版本 + +**安装 uni-ui** + +``` +npm i @dcloudio/uni-ui 或 yarn add @dcloudio/uni-ui +``` + + + +**配置easycom** + +使用 `npm` 安装好 `uni-ui` 之后,需要配置 `easycom` 规则,让 `npm` 安装的组件支持 `easycom` + +打开项目根目录下的 `pages.json` 并添加 `easycom` 节点: + +```javascript +// pages.json +{ + "easycom": { + "autoscan": true, + "custom": { + // uni-ui 规则如下配置 + "^uni-(.*)": "@dcloudio/uni-ui/lib/uni-$1/uni-$1.vue" + } + }, + + // 其他内容 + pages:[ + // ... + ] +} + +``` + +在 ``template`` 中使用组件: + +```html + + + +``` + + **注意** + - uni-ui 现在只推荐使用 `easycom` ,如自己引用组件,可能会出现组件找不到的问题 + - 使用 npm 安装的组件,默认情况下 babel-loader 会忽略所有 node_modules 中的文件 ,导致条件编译失效,需要通过配置 `vue.config.js` 解决: + ```javascript + // 在根目录创建 vue.config.js 文件,并配置如下 + module.exports = { + transpileDependencies: ['@dcloudio/uni-ui'] + } + ``` + - uni-ui 是uni-app内置组件的扩展。注意与web开发不同,uni-ui不包括基础组件,它是基础组件的补充。web开发中有的开发者习惯用一个ui库完成所有开发,但在uni-app体系中,推荐开发者首先使用性能更高的基础组件,然后按需引入必要的扩展组件。 + - `uni-ui` 不支持使用 `Vue.use()` 的方式安装 + + +### 贡献代码 +在使用 `uni-ui` 中,如遇到无法解决的问题,请提 [Issues](https://github.com/dcloudio/uni-ui/issues) 给我们,假如您有更好的点子或更好的实现方式,也欢迎给我们提交 [PR](https://github.com/dcloudio/uni-ui/pulls) \ No newline at end of file

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 sq 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 literal 0 HcmV?d00001 diff --git a/static/img/seach.png b/static/img/seach.png new file mode 100644 index 0000000000000000000000000000000000000000..283e5ad09159db0f1ef89eca7ebf11bf17278387 GIT binary patch literal 2174 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 IM6N<$f+gp>)c^nh literal 0 HcmV?d00001 diff --git a/static/img/select1.png b/static/img/select1.png new file mode 100644 index 0000000000000000000000000000000000000000..6e75ad08db15a747e138cddc69ec93ff944e2d1c GIT binary patch literal 2146 zcmV-o2%YzdP)Px-97#k$R9Hv7S!-;QdmVn>ZUxqL-QM0#H>O81l9(u7fTJf0N8>>gKX}XehOp2< zDVM=owl`fMP%;HFb5vrYCPt4MKSbQ6#fR_M#3cwx!p8#MJ;93A|0-!0nUm8FHKn%bXfG~i+ z0QfV2$Kv~%0M`nX41N*7x5c|j0IT)?dHiI07Qnv&{2stH0QUhbRU@q0Ml|zg07n75 z0pJ4w8mry3#^31zHv#+{z#oOHlx4RPP#u8R1jx?|zpN2M&6lYFo&fk2fZqam1RzuD z-{pXA0Psx!9^s2?#bUW9mMu0;-vKxQ{4F0`d7uoQuL#;-E_#5q0MFo%1Xk4({?N9ga-MeXNX(>B2G$i@`ev7KA zB#o@H+;#zYm#h*!pW>_H3EJ0%zJi;QNu5rYRutu-)9KV(tyVdk%`V=)efw!wSC=gq z3{pen7lVqdJ|a+Ze;&XAQ5M$?D?!?9wuIB^e0Jo>k!FjU#So&E4DE`=qC*r?suE%_uU&8DZOre^y4`x}Rchg%bg zL~%-70Ps5ieFRD$unQL`1e$GZY)tEPy2W@rPV-Qp)V&C@y}dng?AWoW!{KN)o6S^S zyq|ji{{6Xg=gw^$9UW~-Bod{{H0%DqNG5>>L^Yz|U0zzPc5(am?c=+4?V7oM{kr+i zojc}qI?afzYth_pxBJQQSbA$4Vg?PbNBAu*wD~WJP-)9 z&CSgQqYUc4w>y?WIo5_~lavHpLSKqCNF`E`FwIb9?!W!-rPMsJ-O&EFn1~x3eBB8dsZ6= z1avi;yAUWvbkW;iT8=o%H#9mUuj_ zmt|S?csx%IA3j`Y?xkonI_-A5wId@VGE`ge8-L*I+Mx7I<3uSvo!bY z;NYNUczC#Netv#6OcD#{0)Lt|_rk(LwLDpgSx#G6-rwX-jQF33hOTP+VK5kG4;?x*)7RJc zlFepYk^D26Oez|UPM$t}x`BC;rMDLQR=8$TwCg?s)dT1jQm;@8mURP@$rRhSZ(rQy za><>YolTM?HL!LwnR~rn?da&JA(>3RUy$6NW>?sn5GY@t6hXzgQZ0+wAkp33J$drv z$+nJ;j+RIyGOj4fCcocrQdPC8Wop=j{@DZI*8mpsHJcId5Y1gxR`Z(}42HR#J9nnG zY}qm&3Wb_(-MVE+Bob@EBtdeJ)(hZ2xnd$V<@*-VDu1b-`I00_i(0K#O{G#)U#pGo zLV}r+*fO6ILo{mA6)K44;)LXf06tQKY1Zo!0%LAxd&CAWw~FN&%OU-u4*(U0p)KL)SQ!kN3<*S;i_#&jgCzg z8QpIK_yvG}09YQ1)x&81T8d*HED-EBgm`(sVCMnc5E_H;lyW5}&6Rw#9P>N@;V}*8 zQ_Qtwo3)+^zLHxoFOog_9YqF@a{K`P3SdlpU)2b!VTR{PoUZVU=`#X6k9Ej=9&{cY zO*tn{K5h&1QeU#GSP|9Lkgf)3ULUZ>=Ya%Yd4T!fxGzn~7jq*)ag@k+ey-_ksSy1C Y0UO2C$$)ke{{R3007*qoM6N<$g1NgD3jhEB literal 0 HcmV?d00001 diff --git a/static/img/select2.png b/static/img/select2.png new file mode 100644 index 0000000000000000000000000000000000000000..af2027318d5d1c5196b7d5481caefdd9cde871b0 GIT binary patch literal 2630 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 literal 0 HcmV?d00001 diff --git a/static/img/shop_cart.png b/static/img/shop_cart.png new file mode 100644 index 0000000000000000000000000000000000000000..b79d0edcb136442477cf7864465b60ce86a9fba7 GIT binary patch literal 2455 zcmV;I3263-P)Px;QAtEWRCr$PTYGSvRTcl8`|YMFX@WC~1$pWWR0F2F-`%B@76@1Y9Rb1C0x}8; zC`<(f+Yv@yI*L@l2cSinVn-B27Ni8LvOeSY5r38%ky9cOa zc_)DO3Qvlj=N&#UFz}B^dswA$6Sqb>o!-AtC>)`blEZT6NlC=aEI(32^c4W_tB`x6 zG3M$jbwzsG1Q5HkvbVQ4HatAM6u|WW+MKzM=W@AIhlYmok@m6*0(^l}asS=HIwViRf--USf<9q{l}hk$9Kqc`M~0t;4{U zeL_U9T5A`DVYs>`Abj6HhKSZySo(0WSUkU?0HahYbu55enfd6Jc~-k3iRe|MqobGA z1VlQWKG<5j5kTD0xq8~PX$#k^S@W-5*dc%%X|0{6l(Mzk*_baxx3#vLnU_hxR!H4k zEEZ3$2?(vV03b!yfsU|elv1Z;GMN_|V|MeTBoc|kJkRR`aA;XeiDNmtCLl@&p==Fd zvc`w(GiIJ=jFCu*{Loteq>_XpqGdG$kxHfRW9G$<$D>NAk7hENHIYYQ=Z*FzAOKua z4-hw%_S!^r5z)Cp5Zw1R0pcM5XE?S><$PAnKxnNm1#m}&(~?w40u}k8wGJdO97A6# z6bh%*4219dXA;qaE|bN~w})ZqW}J}(L=Jl*dV!f|ItFgE)_$aBAhg!LQ2RtQ!#OY? z34*{4x2OVf006n&CRjKCp|$q3nt@2C(;u+bK2gC-3>sr*N78%8sAMvkQc7i9JBjEo z%v}5RId|^d1M~U(?*a5U0=KlawH>l{?b=+F!O&WN62NaOY?P;r3u}&uWHPy*QtHbQ5@F~lTF}KwWM2XtJ z7J$5GxTo*6#+YwK6^KQP7I~XCZTb^{lN=jIthJYBv)NzN41@@gq>7nuC8BAL(7TK= z!bnAO%$YN%t57Hi$^1dbz}K1ib72@hS{D$$?=L2zp91JA3uWd%hhcaMfIU`j?`{Q3 zmFMFC4s+(cDrcQB=C5@DkxV8RD5dTN@E%9#)A@Yol|c|x zaus_VloHqaT>w|O#xV2sVHl2g{nQPF@B3Gm5H8EM%zR^4SJ(COV6w-(cMQ;4?<3oS znJ=iY>mp-}lneC(p|w62z%MHVujuUT{Ayoc-}ZiKlF8(uN+~J7-Ish};6EG$!QZC@M5!E?29b&E5`Yk)w*pv| z%jI62K7INg%`$VjoN8}xKbVMwMwIg`<}A>bv9Ynk%54I5pAoXHwAR90f4XAz1&mji zc|@Ag_GDy8BODP)N1#x2E(j70cLYJOWa28FilM1g>S$(`yunRUrXsRc-)M^j3K>MLj|%-mrD+)*o!xutE5U@iCRHF)l#5`rF&vg`~NKh}0B~ zZ1(4JtzVVPJ;!ikPq zN~xL5>^7!0d!;9pPeePcwf`&>3L7VDBx}gl*kc|xSaCxmqQSPcRNP)58g*;5blIAy ztl<$Mski5OM*`SiGEC3&p6T!Jm;S1jW|`9UJ32Z#t57J+0x+hO8k#X<#>UAi<3<9Z z5{bkyp66W$-~<3d_3vQjrn-2VZPrbdQTJWxGEI@TpyN{R%yBr7`Bmm3A}|2w{J2*^Q&$ zG{#7@G<9gLPX_QS0Pmhe(PnFHZ#J8KzA2fd)>=p!A!{ZZtBo1+gdA!^8x_EK|IFH%fm1n+?5dxyER(kVH1_?1)>D*ULZ<9{12O! Va(>#vl+6GD002ovPDHLkV1f~5qyqo| literal 0 HcmV?d00001 diff --git a/static/img/tabbar_img.png b/static/img/tabbar_img.png new file mode 100644 index 0000000000000000000000000000000000000000..06606f786dca9424e66fead9bf310c53d7a38a3d GIT binary patch literal 10648 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 N002ovPDHLkV1h?c5h4Hp literal 0 HcmV?d00001 diff --git a/uni.scss b/uni.scss new file mode 100644 index 0000000..a05adb4 --- /dev/null +++ b/uni.scss @@ -0,0 +1,76 @@ +/** + * 这里是uni-app内置的常用样式变量 + * + * uni-app 官方扩展插件及插件市场(https://ext.dcloud.net.cn)上很多三方插件均使用了这些样式变量 + * 如果你是插件开发者,建议你使用scss预处理,并在插件代码中直接使用这些变量(无需 import 这个文件),方便用户通过搭积木的方式开发整体风格一致的App + * + */ + +/** + * 如果你是App开发者(插件使用者),你可以通过修改这些变量来定制自己的插件主题,实现自定义主题功能 + * + * 如果你的项目同样使用了scss预处理,你也可以直接在你的 scss 代码中使用如下变量,同时无需 import 这个文件 + */ + +/* 颜色变量 */ + +/* 行为相关颜色 */ +$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:16; + +/* 图片尺寸 */ +$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/custom-waterfalls-flow/changelog.md b/uni_modules/custom-waterfalls-flow/changelog.md new file mode 100644 index 0000000..67cd423 --- /dev/null +++ b/uni_modules/custom-waterfalls-flow/changelog.md @@ -0,0 +1,17 @@ +## 1.0.7(2022-05-26) +1. 优化局部改变数据更新问题,避免重新加载数据,只改变局部 +## 1.0.6(2022-04-18) +1. 修改tab快速切换时会出现的BUG +## 1.0.5(2022-04-18) +1. 修复可能存在数据错误的BUG; +2. 兼容,今后可以无需调用refresh()就可以更新数据; +## 1.0.4(2022-04-18) +1. 修复BUG; +## 1.0.3(2022-04-15) +1. 优化代码; +2. 修改懒加载数据存在的BUG; +## 1.0.1(2022-03-11) +1. 增加隐藏图片字段的键名字段hideImageKey,默认hide +2. 支持在列表中配置hide参数进行隐藏图片 +## 1.0.0(2022-03-09) +使用最简单的思想实现瀑布流 diff --git a/uni_modules/custom-waterfalls-flow/components/custom-waterfalls-flow/custom-waterfalls-flow.vue b/uni_modules/custom-waterfalls-flow/components/custom-waterfalls-flow/custom-waterfalls-flow.vue new file mode 100644 index 0000000..310cdf9 --- /dev/null +++ b/uni_modules/custom-waterfalls-flow/components/custom-waterfalls-flow/custom-waterfalls-flow.vue @@ -0,0 +1,323 @@ + + + diff --git a/uni_modules/custom-waterfalls-flow/package.json b/uni_modules/custom-waterfalls-flow/package.json new file mode 100644 index 0000000..e3e1392 --- /dev/null +++ b/uni_modules/custom-waterfalls-flow/package.json @@ -0,0 +1,81 @@ +{ + "id": "custom-waterfalls-flow", + "displayName": "瀑布流 灵活配置 简单易用 兼容vue2vue3小程序、H5、app等多端", + "version": "1.0.7", + "description": "瀑布流,根据内容自动计算进行流式布局,简单参数配置,实现兼容多端及vue2和vue3的瀑布流布局", + "keywords": [ + "瀑布流", + "瀑布流式布局" +], + "repository": "https://gitee.com/my_dear_li_pan/my-uni-modules.git", + "engines": { + "HBuilderX": "^3.3.11" + }, + "dcloudext": { + "category": [ + "前端组件", + "通用组件" + ], + "sale": { + "regular": { + "price": "0.00" + }, + "sourcecode": { + "price": "0.00" + } + }, + "contact": { + "qq": "" + }, + "declaration": { + "ads": "无", + "data": "插件不采集任何数据", + "permissions": "无" + }, + "npmurl": "" + }, + "uni_modules": { + "dependencies": [], + "encrypt": [], + "platforms": { + "cloud": { + "tcb": "y", + "aliyun": "y" + }, + "client": { + "Vue": { + "vue2": "y", + "vue3": "y" + }, + "App": { + "app-vue": "y", + "app-nvue": "n" + }, + "H5-mobile": { + "Safari": "y", + "Android Browser": "y", + "微信浏览器(Android)": "y", + "QQ浏览器(Android)": "y" + }, + "H5-pc": { + "Chrome": "y", + "IE": "u", + "Edge": "u", + "Firefox": "y", + "Safari": "u" + }, + "小程序": { + "微信": "y", + "阿里": "u", + "百度": "y", + "字节跳动": "y", + "QQ": "u" + }, + "快应用": { + "华为": "u", + "联盟": "u" + } + } + } + } +} \ No newline at end of file diff --git a/uni_modules/custom-waterfalls-flow/readme.md b/uni_modules/custom-waterfalls-flow/readme.md new file mode 100644 index 0000000..5ac9f19 --- /dev/null +++ b/uni_modules/custom-waterfalls-flow/readme.md @@ -0,0 +1,445 @@ +- 概要 +- 支持的平台 +- 使用方式 +- 属性说明 +- 事件说明 +- 组件方法 +- refresh的使用示例 +- 隐藏单项图片示例 +- 完整示例 +- 温馨提示 +- 关注我,不迷路 +- 个人作品展示 + +