From 5798c336b9c6c94c80d00c81f46875259f94e73e Mon Sep 17 00:00:00 2001 From: unknown <331404948@qq.com> Date: Fri, 11 Aug 2023 09:12:11 +0800 Subject: [PATCH] first commit --- .gitignore | 7 + App.vue | 20 + README.md | 0 common/css/app.scss | 65 + common/js/utils.js | 96 ++ common/sdk/qqmap-wx-jssdk.js | 741 +++++++++++ common/sdk/qqmap-wx-jssdk.min.js | 3 + components/UserTab/UserTab - 副本.vue | 130 ++ components/UserTab/UserTab.vue | 117 ++ config/api.js | 10 + config/request.js | 52 + index.html | 20 + main.js | 37 + manifest.json | 100 ++ package.json | 15 + pages.json | 104 ++ pages/index/index.vue | 60 + pages/other/webView/webView.vue | 27 + pages/tabbar/index/index.vue | 404 ++++++ pages/tabbar/learnCar/index.vue | 30 + pages/tabbar/mine/index.vue | 31 + pages/userCenter/login/login.vue | 71 ++ pages/userCenter/login/loginByPhone.vue | 187 +++ project.config.json | 28 + project.private.config.json | 7 + site.config.js | 12 + static/images/bigImg/index_banner.png | Bin 0 -> 298852 bytes static/images/index/dingwei.png | Bin 0 -> 1015 bytes static/images/index/ic_baoming.png | Bin 0 -> 2738 bytes static/images/index/ic_jiaxiao.png | Bin 0 -> 2310 bytes static/images/index/ic_kaochang.png | Bin 0 -> 2827 bytes static/images/index/ic_lilun.png | Bin 0 -> 2159 bytes static/images/index/ic_peilian.png | Bin 0 -> 2335 bytes static/images/index/img_1@2x.png | Bin 0 -> 2508 bytes static/images/index/img_2@2x.png | Bin 0 -> 1868 bytes static/images/index/img_3@2x.png | Bin 0 -> 2453 bytes static/images/index/img_4@2x.png | Bin 0 -> 2682 bytes static/images/index/img_5@2x.png | Bin 0 -> 2798 bytes static/images/index/img_6@2x.png | Bin 0 -> 2674 bytes static/images/index/scan.png | Bin 0 -> 891 bytes static/images/index/searchIcon.png | Bin 0 -> 737 bytes static/images/index/我的@2x.png | Bin 0 -> 981 bytes static/images/index/报名@2x.png | Bin 0 -> 1352 bytes static/images/index/首页@2x.png | Bin 0 -> 1205 bytes static/images/logo.png | Bin 0 -> 10347 bytes static/images/tabbar/btn_shouye_cli.png | Bin 0 -> 1736 bytes static/images/tabbar/btn_shouye_nor.png | Bin 0 -> 2786 bytes static/images/tabbar/btn_wode_cli.png | Bin 0 -> 1369 bytes static/images/tabbar/btn_wode_nor.png | Bin 0 -> 2106 bytes static/images/tabbar/btn_xueche_cli.png | Bin 0 -> 1638 bytes static/images/tabbar/btn_xueche_nor.png | Bin 0 -> 1961 bytes static/images/tabbar/sy.png | Bin 0 -> 1057 bytes static/images/tabbar/syActive.png | Bin 0 -> 861 bytes static/images/tabbar/tk.png | Bin 0 -> 929 bytes static/images/tabbar/tkActive.png | Bin 0 -> 826 bytes static/images/tabbar/wd.png | Bin 0 -> 1628 bytes static/images/tabbar/wdActive.png | Bin 0 -> 1330 bytes static/images/tabbar/zx.png | Bin 0 -> 587 bytes static/images/tabbar/zxActive.png | Bin 0 -> 547 bytes static/images/userCenter/loginTopBg.png | Bin 0 -> 36319 bytes static/images/userCenter/title_1.png | Bin 0 -> 8982 bytes .../__MACOSX/登录流程切图/._.DS_Store | Bin 0 -> 120 bytes .../__MACOSX/登录流程切图/._btn_1.png | Bin 0 -> 233 bytes .../登录流程切图/.DS_Store | Bin 0 -> 6148 bytes .../登录流程切图/登录流程切图/bg_1.png | Bin 0 -> 36319 bytes .../登录流程切图/btn_1.png | Bin 0 -> 461 bytes .../登录流程切图/btn_2.png | Bin 0 -> 567 bytes .../登录流程切图/title_1.png | Bin 0 -> 8982 bytes static/logo.png | Bin 0 -> 4023 bytes store/getters.js | 21 + store/index.js | 90 ++ store/modules/add.js | 91 ++ store/modules/user.js | 31 + uni.promisify.adaptor.js | 10 + uni.scss | 80 ++ uni_modules/uni-config-center/changelog.md | 6 + uni_modules/uni-config-center/package.json | 81 ++ uni_modules/uni-config-center/readme.md | 93 ++ .../common/uni-config-center/index.js | 1 + .../common/uni-config-center/package.json | 9 + uni_modules/uni-open-bridge-common/changelog.md | 25 + uni_modules/uni-open-bridge-common/package.json | 84 ++ uni_modules/uni-open-bridge-common/readme.md | 5 + .../common/uni-open-bridge-common/bridge-error.js | 26 + .../common/uni-open-bridge-common/config.js | 124 ++ .../common/uni-open-bridge-common/consts.js | 30 + .../common/uni-open-bridge-common/index.js | 317 +++++ .../common/uni-open-bridge-common/package.json | 15 + .../common/uni-open-bridge-common/storage.js | 111 ++ .../uni-open-bridge-common/uni-cloud-cache.js | 324 +++++ .../common/uni-open-bridge-common/validator.js | 31 + .../common/uni-open-bridge-common/weixin-server.js | 203 +++ .../uniCloud/database/opendb-open-data.schema.json | 19 + 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_modules/uni-scss/styles/setting/_border.scss | 3 + uni_modules/uni-scss/styles/setting/_color.scss | 66 + uni_modules/uni-scss/styles/setting/_radius.scss | 55 + uni_modules/uni-scss/styles/setting/_space.scss | 56 + uni_modules/uni-scss/styles/setting/_styles.scss | 167 +++ uni_modules/uni-scss/styles/setting/_text.scss | 24 + .../uni-scss/styles/setting/_variables.scss | 146 +++ uni_modules/uni-scss/styles/tools/functions.scss | 19 + uni_modules/uni-scss/theme.scss | 31 + uni_modules/uni-scss/variables.scss | 62 + uni_modules/uni-swiper-dot/changelog.md | 12 + .../components/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/uview-ui/LICENSE | 21 + uni_modules/uview-ui/README.md | 66 + uni_modules/uview-ui/changelog.md | 362 ++++++ .../uview-ui/components/u--form/u--form.vue | 78 ++ .../uview-ui/components/u--image/u--image.vue | 47 + .../uview-ui/components/u--input/u--input.vue | 73 ++ .../uview-ui/components/u--text/u--text.vue | 44 + .../components/u--textarea/u--textarea.vue | 48 + .../uview-ui/components/u-action-sheet/props.js | 54 + .../components/u-action-sheet/u-action-sheet.vue | 278 ++++ uni_modules/uview-ui/components/u-album/props.js | 59 + .../uview-ui/components/u-album/u-album.vue | 259 ++++ uni_modules/uview-ui/components/u-alert/props.js | 44 + .../uview-ui/components/u-alert/u-alert.vue | 243 ++++ .../uview-ui/components/u-avatar-group/props.js | 52 + .../components/u-avatar-group/u-avatar-group.vue | 103 ++ uni_modules/uview-ui/components/u-avatar/props.js | 78 ++ .../uview-ui/components/u-avatar/u-avatar.vue | 172 +++ .../uview-ui/components/u-back-top/props.js | 54 + .../uview-ui/components/u-back-top/u-back-top.vue | 129 ++ uni_modules/uview-ui/components/u-badge/props.js | 72 ++ .../uview-ui/components/u-badge/u-badge.vue | 171 +++ uni_modules/uview-ui/components/u-button/nvue.scss | 46 + uni_modules/uview-ui/components/u-button/props.js | 161 +++ .../uview-ui/components/u-button/u-button.vue | 490 +++++++ uni_modules/uview-ui/components/u-button/vue.scss | 80 ++ .../uview-ui/components/u-calendar/header.vue | 99 ++ .../uview-ui/components/u-calendar/month.vue | 579 +++++++++ .../uview-ui/components/u-calendar/props.js | 144 +++ .../uview-ui/components/u-calendar/u-calendar.vue | 384 ++++++ uni_modules/uview-ui/components/u-calendar/util.js | 85 ++ .../uview-ui/components/u-car-keyboard/props.js | 14 + .../components/u-car-keyboard/u-car-keyboard.vue | 311 +++++ .../uview-ui/components/u-cell-group/props.js | 14 + .../components/u-cell-group/u-cell-group.vue | 61 + uni_modules/uview-ui/components/u-cell/props.js | 110 ++ uni_modules/uview-ui/components/u-cell/u-cell.vue | 229 ++++ .../uview-ui/components/u-checkbox-group/props.js | 82 ++ .../u-checkbox-group/u-checkbox-group.vue | 103 ++ .../uview-ui/components/u-checkbox/props.js | 69 + .../uview-ui/components/u-checkbox/u-checkbox.vue | 344 +++++ .../uview-ui/components/u-circle-progress/props.js | 8 + .../u-circle-progress/u-circle-progress.vue | 198 +++ .../uview-ui/components/u-code-input/props.js | 79 ++ .../components/u-code-input/u-code-input.vue | 252 ++++ uni_modules/uview-ui/components/u-code/props.js | 34 + uni_modules/uview-ui/components/u-code/u-code.vue | 129 ++ uni_modules/uview-ui/components/u-col/props.js | 29 + uni_modules/uview-ui/components/u-col/u-col.vue | 162 +++ .../uview-ui/components/u-collapse-item/props.js | 59 + .../components/u-collapse-item/u-collapse-item.vue | 225 ++++ .../uview-ui/components/u-collapse/props.js | 19 + .../uview-ui/components/u-collapse/u-collapse.vue | 90 ++ .../uview-ui/components/u-column-notice/props.js | 55 + .../components/u-column-notice/u-column-notice.vue | 160 +++ .../uview-ui/components/u-count-down/props.js | 24 + .../components/u-count-down/u-count-down.vue | 163 +++ .../uview-ui/components/u-count-down/utils.js | 62 + .../uview-ui/components/u-count-to/props.js | 59 + .../uview-ui/components/u-count-to/u-count-to.vue | 184 +++ .../uview-ui/components/u-datetime-picker/props.js | 116 ++ .../u-datetime-picker/u-datetime-picker.vue | 360 ++++++ uni_modules/uview-ui/components/u-divider/props.js | 44 + .../uview-ui/components/u-divider/u-divider.vue | 116 ++ .../uview-ui/components/u-dropdown-item/props.js | 36 + .../components/u-dropdown-item/u-dropdown-item.vue | 127 ++ .../uview-ui/components/u-dropdown/props.js | 65 + .../uview-ui/components/u-dropdown/u-dropdown.vue | 127 ++ uni_modules/uview-ui/components/u-empty/props.js | 59 + .../uview-ui/components/u-empty/u-empty.vue | 128 ++ .../uview-ui/components/u-form-item/props.js | 48 + .../components/u-form-item/u-form-item.vue | 235 ++++ uni_modules/uview-ui/components/u-form/props.js | 45 + uni_modules/uview-ui/components/u-form/u-form.vue | 214 ++++ uni_modules/uview-ui/components/u-gap/props.js | 24 + uni_modules/uview-ui/components/u-gap/u-gap.vue | 38 + .../uview-ui/components/u-grid-item/props.js | 14 + .../components/u-grid-item/u-grid-item.vue | 209 +++ uni_modules/uview-ui/components/u-grid/props.js | 19 + uni_modules/uview-ui/components/u-grid/u-grid.vue | 97 ++ uni_modules/uview-ui/components/u-icon/icons.js | 214 ++++ uni_modules/uview-ui/components/u-icon/props.js | 89 ++ uni_modules/uview-ui/components/u-icon/u-icon.vue | 234 ++++ uni_modules/uview-ui/components/u-image/props.js | 84 ++ .../uview-ui/components/u-image/u-image.vue | 232 ++++ .../uview-ui/components/u-index-anchor/props.js | 29 + .../components/u-index-anchor/u-index-anchor.vue | 91 ++ .../uview-ui/components/u-index-item/props.js | 5 + .../components/u-index-item/u-index-item.vue | 87 ++ .../uview-ui/components/u-index-list/props.js | 29 + .../components/u-index-list/u-index-list.vue | 440 +++++++ uni_modules/uview-ui/components/u-input/props.js | 187 +++ .../uview-ui/components/u-input/u-input.vue | 354 ++++++ .../uview-ui/components/u-keyboard/props.js | 84 ++ .../uview-ui/components/u-keyboard/u-keyboard.vue | 164 +++ .../uview-ui/components/u-line-progress/props.js | 28 + .../components/u-line-progress/u-line-progress.vue | 144 +++ uni_modules/uview-ui/components/u-line/props.js | 33 + uni_modules/uview-ui/components/u-line/u-line.vue | 62 + uni_modules/uview-ui/components/u-link/props.js | 39 + uni_modules/uview-ui/components/u-link/u-link.vue | 83 ++ .../uview-ui/components/u-list-item/props.js | 9 + .../components/u-list-item/u-list-item.vue | 116 ++ uni_modules/uview-ui/components/u-list/props.js | 76 ++ uni_modules/uview-ui/components/u-list/u-list.vue | 157 +++ .../uview-ui/components/u-loading-icon/props.js | 59 + .../components/u-loading-icon/u-loading-icon.vue | 343 +++++ .../uview-ui/components/u-loading-page/props.js | 49 + .../components/u-loading-page/u-loading-page.vue | 115 ++ .../uview-ui/components/u-loadmore/props.js | 94 ++ .../uview-ui/components/u-loadmore/u-loadmore.vue | 150 +++ uni_modules/uview-ui/components/u-modal/props.js | 84 ++ .../uview-ui/components/u-modal/u-modal.vue | 227 ++++ uni_modules/uview-ui/components/u-navbar/props.js | 84 ++ .../uview-ui/components/u-navbar/u-navbar.vue | 186 +++ .../uview-ui/components/u-no-network/props.js | 19 + .../components/u-no-network/u-no-network.vue | 220 ++++ .../uview-ui/components/u-notice-bar/props.js | 70 + .../components/u-notice-bar/u-notice-bar.vue | 101 ++ uni_modules/uview-ui/components/u-notify/props.js | 49 + .../uview-ui/components/u-notify/u-notify.vue | 211 +++ .../uview-ui/components/u-number-box/props.js | 109 ++ .../components/u-number-box/u-number-box.vue | 416 ++++++ .../uview-ui/components/u-number-keyboard/props.js | 19 + .../u-number-keyboard/u-number-keyboard.vue | 196 +++ uni_modules/uview-ui/components/u-overlay/props.js | 24 + .../uview-ui/components/u-overlay/u-overlay.vue | 68 + .../uview-ui/components/u-parse/node/node.vue | 499 ++++++++ uni_modules/uview-ui/components/u-parse/parser.js | 1075 ++++++++++++++++ uni_modules/uview-ui/components/u-parse/props.js | 45 + .../uview-ui/components/u-parse/u-parse.vue | 366 ++++++ .../uview-ui/components/u-picker-column/props.js | 5 + .../components/u-picker-column/u-picker-column.vue | 27 + uni_modules/uview-ui/components/u-picker/props.js | 79 ++ .../uview-ui/components/u-picker/u-picker.vue | 283 +++++ uni_modules/uview-ui/components/u-popup/props.js | 79 ++ .../uview-ui/components/u-popup/u-popup.vue | 304 +++++ .../uview-ui/components/u-radio-group/props.js | 85 ++ .../components/u-radio-group/u-radio-group.vue | 108 ++ uni_modules/uview-ui/components/u-radio/props.js | 64 + .../uview-ui/components/u-radio/u-radio.vue | 339 +++++ uni_modules/uview-ui/components/u-rate/props.js | 69 + uni_modules/uview-ui/components/u-rate/u-rate.vue | 306 +++++ .../uview-ui/components/u-read-more/props.js | 61 + .../components/u-read-more/u-read-more.vue | 157 +++ .../uview-ui/components/u-row-notice/props.js | 39 + .../components/u-row-notice/u-row-notice.vue | 330 +++++ uni_modules/uview-ui/components/u-row/props.js | 19 + uni_modules/uview-ui/components/u-row/u-row.vue | 93 ++ .../uview-ui/components/u-safe-bottom/props.js | 5 + .../components/u-safe-bottom/u-safe-bottom.vue | 56 + .../uview-ui/components/u-scroll-list/nvue.js | 28 + .../uview-ui/components/u-scroll-list/other.js | 0 .../uview-ui/components/u-scroll-list/props.js | 34 + .../components/u-scroll-list/scrollWxs.wxs | 50 + .../components/u-scroll-list/u-scroll-list.vue | 224 ++++ uni_modules/uview-ui/components/u-search/props.js | 118 ++ .../uview-ui/components/u-search/u-search.vue | 303 +++++ .../uview-ui/components/u-skeleton/props.js | 59 + .../uview-ui/components/u-skeleton/u-skeleton.vue | 244 ++++ .../uview-ui/components/u-slider/mpother.js | 113 ++ uni_modules/uview-ui/components/u-slider/mpwxs.js | 42 + uni_modules/uview-ui/components/u-slider/mpwxs.wxs | 121 ++ .../uview-ui/components/u-slider/nvue - 副本.js | 180 +++ uni_modules/uview-ui/components/u-slider/nvue.js | 193 +++ uni_modules/uview-ui/components/u-slider/props.js | 54 + .../uview-ui/components/u-slider/u-slider.vue | 55 + .../uview-ui/components/u-status-bar/props.js | 8 + .../components/u-status-bar/u-status-bar.vue | 46 + .../uview-ui/components/u-steps-item/props.js | 24 + .../components/u-steps-item/u-steps-item.vue | 316 +++++ uni_modules/uview-ui/components/u-steps/props.js | 39 + .../uview-ui/components/u-steps/u-steps.vue | 80 ++ uni_modules/uview-ui/components/u-sticky/props.js | 40 + .../uview-ui/components/u-sticky/u-sticky.vue | 212 +++ .../uview-ui/components/u-subsection/props.js | 49 + .../components/u-subsection/u-subsection.vue | 299 +++++ .../u-swipe-action-item/index - backup.wxs | 256 ++++ .../components/u-swipe-action-item/index.wxs | 225 ++++ .../u-swipe-action-item/nvue - backup.js | 270 ++++ .../components/u-swipe-action-item/nvue.js | 174 +++ .../components/u-swipe-action-item/props.js | 41 + .../u-swipe-action-item/u-swipe-action-item.vue | 190 +++ .../uview-ui/components/u-swipe-action-item/wxs.js | 15 + .../uview-ui/components/u-swipe-action/props.js | 9 + .../components/u-swipe-action/u-swipe-action.vue | 67 + .../components/u-swiper-indicator/props.js | 29 + .../u-swiper-indicator/u-swiper-indicator.vue | 110 ++ uni_modules/uview-ui/components/u-swiper/props.js | 125 ++ .../uview-ui/components/u-swiper/u-swiper.vue | 255 ++++ uni_modules/uview-ui/components/u-switch/props.js | 54 + .../uview-ui/components/u-switch/u-switch.vue | 177 +++ .../uview-ui/components/u-tabbar-item/props.js | 35 + .../components/u-tabbar-item/u-tabbar-item.vue | 142 +++ uni_modules/uview-ui/components/u-tabbar/props.js | 44 + .../uview-ui/components/u-tabbar/u-tabbar.vue | 141 ++ uni_modules/uview-ui/components/u-table/props.js | 5 + .../uview-ui/components/u-table/u-table.vue | 29 + .../uview-ui/components/u-tabs-item/props.js | 5 + .../components/u-tabs-item/u-tabs-item.vue | 29 + uni_modules/uview-ui/components/u-tabs/props.js | 64 + uni_modules/uview-ui/components/u-tabs/u-tabs.vue | 354 ++++++ uni_modules/uview-ui/components/u-tag/props.js | 84 ++ uni_modules/uview-ui/components/u-tag/u-tag.vue | 358 ++++++ uni_modules/uview-ui/components/u-td/props.js | 5 + uni_modules/uview-ui/components/u-td/u-td.vue | 31 + uni_modules/uview-ui/components/u-text/props.js | 110 ++ uni_modules/uview-ui/components/u-text/u-text.vue | 223 ++++ uni_modules/uview-ui/components/u-text/value.js | 85 ++ .../uview-ui/components/u-textarea/props.js | 119 ++ .../uview-ui/components/u-textarea/u-textarea.vue | 239 ++++ .../uview-ui/components/u-toast/u-toast.vue | 291 +++++ uni_modules/uview-ui/components/u-toolbar/props.js | 34 + .../uview-ui/components/u-toolbar/u-toolbar.vue | 102 ++ .../uview-ui/components/u-tooltip/clipboard.min.js | 58 + uni_modules/uview-ui/components/u-tooltip/props.js | 59 + .../uview-ui/components/u-tooltip/u-tooltip.vue | 365 ++++++ uni_modules/uview-ui/components/u-tr/props.js | 5 + uni_modules/uview-ui/components/u-tr/u-tr.vue | 31 + .../components/u-transition/nvue.ani-map.js | 68 + .../uview-ui/components/u-transition/props.js | 24 + .../uview-ui/components/u-transition/transition.js | 157 +++ .../components/u-transition/u-transition.vue | 92 ++ .../components/u-transition/vue.ani-style.scss | 113 ++ uni_modules/uview-ui/components/u-upload/mixin.js | 21 + uni_modules/uview-ui/components/u-upload/props.js | 124 ++ .../uview-ui/components/u-upload/u-upload.vue | 558 ++++++++ uni_modules/uview-ui/components/u-upload/utils.js | 151 +++ .../uview-ui/components/uview-ui/uview-ui.vue | 15 + uni_modules/uview-ui/index.js | 79 ++ uni_modules/uview-ui/index.scss | 23 + uni_modules/uview-ui/libs/config/color.js | 17 + uni_modules/uview-ui/libs/config/config.js | 34 + uni_modules/uview-ui/libs/config/props.js | 190 +++ .../uview-ui/libs/config/props/actionSheet.js | 25 + uni_modules/uview-ui/libs/config/props/album.js | 25 + uni_modules/uview-ui/libs/config/props/alert.js | 22 + uni_modules/uview-ui/libs/config/props/avatar.js | 28 + .../uview-ui/libs/config/props/avatarGroup.js | 23 + uni_modules/uview-ui/libs/config/props/backtop.js | 27 + uni_modules/uview-ui/libs/config/props/badge.js | 27 + uni_modules/uview-ui/libs/config/props/button.js | 42 + uni_modules/uview-ui/libs/config/props/calendar.js | 42 + .../uview-ui/libs/config/props/carKeyboard.js | 15 + uni_modules/uview-ui/libs/config/props/cell.js | 35 + .../uview-ui/libs/config/props/cellGroup.js | 17 + uni_modules/uview-ui/libs/config/props/checkbox.js | 27 + .../uview-ui/libs/config/props/checkboxGroup.js | 29 + .../uview-ui/libs/config/props/circleProgress.js | 15 + uni_modules/uview-ui/libs/config/props/code.js | 21 + .../uview-ui/libs/config/props/codeInput.js | 29 + uni_modules/uview-ui/libs/config/props/col.js | 19 + uni_modules/uview-ui/libs/config/props/collapse.js | 17 + .../uview-ui/libs/config/props/collapseItem.js | 25 + .../uview-ui/libs/config/props/columnNotice.js | 24 + .../uview-ui/libs/config/props/countDown.js | 18 + uni_modules/uview-ui/libs/config/props/countTo.js | 25 + .../uview-ui/libs/config/props/datetimePicker.js | 36 + uni_modules/uview-ui/libs/config/props/divider.js | 23 + uni_modules/uview-ui/libs/config/props/empty.js | 26 + uni_modules/uview-ui/libs/config/props/form.js | 22 + uni_modules/uview-ui/libs/config/props/formItem.js | 23 + uni_modules/uview-ui/libs/config/props/gap.js | 19 + uni_modules/uview-ui/libs/config/props/grid.js | 17 + uni_modules/uview-ui/libs/config/props/gridItem.js | 16 + uni_modules/uview-ui/libs/config/props/icon.js | 36 + uni_modules/uview-ui/libs/config/props/image.js | 30 + .../uview-ui/libs/config/props/indexAnchor.js | 19 + .../uview-ui/libs/config/props/indexList.js | 19 + uni_modules/uview-ui/libs/config/props/input.js | 48 + uni_modules/uview-ui/libs/config/props/keyboard.js | 30 + uni_modules/uview-ui/libs/config/props/line.js | 20 + .../uview-ui/libs/config/props/lineProgress.js | 19 + uni_modules/uview-ui/libs/config/props/link.js | 26 + uni_modules/uview-ui/libs/config/props/list.js | 28 + uni_modules/uview-ui/libs/config/props/listItem.js | 15 + .../uview-ui/libs/config/props/loadingIcon.js | 30 + .../uview-ui/libs/config/props/loadingPage.js | 23 + uni_modules/uview-ui/libs/config/props/loadmore.js | 32 + uni_modules/uview-ui/libs/config/props/modal.js | 30 + uni_modules/uview-ui/libs/config/props/navbar.js | 32 + .../uview-ui/libs/config/props/noNetwork.js | 18 + .../uview-ui/libs/config/props/noticeBar.js | 27 + uni_modules/uview-ui/libs/config/props/notify.js | 22 + .../uview-ui/libs/config/props/numberBox.js | 35 + .../uview-ui/libs/config/props/numberKeyboard.js | 17 + uni_modules/uview-ui/libs/config/props/overlay.js | 18 + uni_modules/uview-ui/libs/config/props/parse.js | 22 + uni_modules/uview-ui/libs/config/props/picker.js | 29 + uni_modules/uview-ui/libs/config/props/popup.js | 29 + uni_modules/uview-ui/libs/config/props/radio.js | 27 + .../uview-ui/libs/config/props/radioGroup.js | 30 + uni_modules/uview-ui/libs/config/props/rate.js | 26 + uni_modules/uview-ui/libs/config/props/readMore.js | 22 + uni_modules/uview-ui/libs/config/props/row.js | 17 + .../uview-ui/libs/config/props/rowNotice.js | 21 + .../uview-ui/libs/config/props/scrollList.js | 20 + uni_modules/uview-ui/libs/config/props/search.js | 37 + uni_modules/uview-ui/libs/config/props/section.js | 24 + uni_modules/uview-ui/libs/config/props/skeleton.js | 25 + uni_modules/uview-ui/libs/config/props/slider.js | 25 + .../uview-ui/libs/config/props/statusBar.js | 15 + uni_modules/uview-ui/libs/config/props/steps.js | 21 + .../uview-ui/libs/config/props/stepsItem.js | 18 + uni_modules/uview-ui/libs/config/props/sticky.js | 20 + .../uview-ui/libs/config/props/subsection.js | 23 + .../uview-ui/libs/config/props/swipeAction.js | 15 + .../uview-ui/libs/config/props/swipeActionItem.js | 21 + uni_modules/uview-ui/libs/config/props/swiper.js | 39 + .../uview-ui/libs/config/props/swipterIndicator.js | 19 + uni_modules/uview-ui/libs/config/props/switch.js | 24 + uni_modules/uview-ui/libs/config/props/tabbar.js | 22 + .../uview-ui/libs/config/props/tabbarItem.js | 20 + uni_modules/uview-ui/libs/config/props/tabs.js | 32 + uni_modules/uview-ui/libs/config/props/tag.js | 29 + uni_modules/uview-ui/libs/config/props/text.js | 38 + uni_modules/uview-ui/libs/config/props/textarea.js | 36 + uni_modules/uview-ui/libs/config/props/toast.js | 30 + uni_modules/uview-ui/libs/config/props/toolbar.js | 21 + uni_modules/uview-ui/libs/config/props/tooltip.js | 25 + .../uview-ui/libs/config/props/transition.js | 18 + uni_modules/uview-ui/libs/config/props/upload.js | 36 + uni_modules/uview-ui/libs/config/zIndex.js | 20 + uni_modules/uview-ui/libs/css/color.scss | 155 +++ uni_modules/uview-ui/libs/css/common.scss | 97 ++ uni_modules/uview-ui/libs/css/components.scss | 15 + uni_modules/uview-ui/libs/css/flex.scss | 257 ++++ uni_modules/uview-ui/libs/css/h5.scss | 0 uni_modules/uview-ui/libs/css/mixin.scss | 8 + uni_modules/uview-ui/libs/css/mp.scss | 0 uni_modules/uview-ui/libs/css/nvue.scss | 0 uni_modules/uview-ui/libs/css/vue.scss | 27 + .../uview-ui/libs/function/colorGradient.js | 134 ++ uni_modules/uview-ui/libs/function/debounce.js | 29 + uni_modules/uview-ui/libs/function/digit.js | 167 +++ uni_modules/uview-ui/libs/function/index.js | 731 +++++++++++ uni_modules/uview-ui/libs/function/platform.js | 75 ++ uni_modules/uview-ui/libs/function/test.js | 288 +++++ uni_modules/uview-ui/libs/function/throttle.js | 30 + .../uview-ui/libs/luch-request/adapters/index.js | 97 ++ .../libs/luch-request/core/InterceptorManager.js | 50 + .../uview-ui/libs/luch-request/core/Request.js | 198 +++ .../libs/luch-request/core/buildFullPath.js | 20 + .../uview-ui/libs/luch-request/core/defaults.js | 29 + .../libs/luch-request/core/dispatchRequest.js | 3 + .../uview-ui/libs/luch-request/core/mergeConfig.js | 103 ++ .../uview-ui/libs/luch-request/core/settle.js | 16 + .../uview-ui/libs/luch-request/helpers/buildURL.js | 69 + .../libs/luch-request/helpers/combineURLs.js | 14 + .../libs/luch-request/helpers/isAbsoluteURL.js | 14 + uni_modules/uview-ui/libs/luch-request/index.d.ts | 116 ++ uni_modules/uview-ui/libs/luch-request/index.js | 3 + uni_modules/uview-ui/libs/luch-request/utils.js | 131 ++ .../uview-ui/libs/luch-request/utils/clone.js | 264 ++++ uni_modules/uview-ui/libs/mixin/button.js | 13 + uni_modules/uview-ui/libs/mixin/mixin.js | 160 +++ uni_modules/uview-ui/libs/mixin/mpMixin.js | 8 + uni_modules/uview-ui/libs/mixin/mpShare.js | 13 + uni_modules/uview-ui/libs/mixin/openType.js | 25 + uni_modules/uview-ui/libs/mixin/style.js | 228 ++++ uni_modules/uview-ui/libs/mixin/touch.js | 59 + uni_modules/uview-ui/libs/util/async-validator.js | 1343 ++++++++++++++++++++ uni_modules/uview-ui/libs/util/calendar.js | 546 ++++++++ uni_modules/uview-ui/libs/util/dayjs.js | 308 +++++ uni_modules/uview-ui/libs/util/emitter.js | 51 + uni_modules/uview-ui/libs/util/route.js | 124 ++ uni_modules/uview-ui/package.json | 84 ++ uni_modules/uview-ui/theme.scss | 44 + 480 files changed, 43756 insertions(+) create mode 100644 .gitignore create mode 100644 App.vue create mode 100644 README.md create mode 100644 common/css/app.scss create mode 100644 common/js/utils.js create mode 100644 common/sdk/qqmap-wx-jssdk.js create mode 100644 common/sdk/qqmap-wx-jssdk.min.js create mode 100644 components/UserTab/UserTab - 副本.vue create mode 100644 components/UserTab/UserTab.vue create mode 100644 config/api.js create mode 100644 config/request.js create mode 100644 index.html create mode 100644 main.js create mode 100644 manifest.json create mode 100644 package.json create mode 100644 pages.json create mode 100644 pages/index/index.vue create mode 100644 pages/other/webView/webView.vue create mode 100644 pages/tabbar/index/index.vue create mode 100644 pages/tabbar/learnCar/index.vue create mode 100644 pages/tabbar/mine/index.vue create mode 100644 pages/userCenter/login/login.vue create mode 100644 pages/userCenter/login/loginByPhone.vue create mode 100644 project.config.json create mode 100644 project.private.config.json create mode 100644 site.config.js create mode 100644 static/images/bigImg/index_banner.png create mode 100644 static/images/index/dingwei.png create mode 100644 static/images/index/ic_baoming.png create mode 100644 static/images/index/ic_jiaxiao.png create mode 100644 static/images/index/ic_kaochang.png create mode 100644 static/images/index/ic_lilun.png create mode 100644 static/images/index/ic_peilian.png create mode 100644 static/images/index/img_1@2x.png create mode 100644 static/images/index/img_2@2x.png create mode 100644 static/images/index/img_3@2x.png create mode 100644 static/images/index/img_4@2x.png create mode 100644 static/images/index/img_5@2x.png create mode 100644 static/images/index/img_6@2x.png create mode 100644 static/images/index/scan.png create mode 100644 static/images/index/searchIcon.png create mode 100644 static/images/index/我的@2x.png create mode 100644 static/images/index/报名@2x.png create mode 100644 static/images/index/首页@2x.png create mode 100644 static/images/logo.png create mode 100644 static/images/tabbar/btn_shouye_cli.png create mode 100644 static/images/tabbar/btn_shouye_nor.png create mode 100644 static/images/tabbar/btn_wode_cli.png create mode 100644 static/images/tabbar/btn_wode_nor.png create mode 100644 static/images/tabbar/btn_xueche_cli.png create mode 100644 static/images/tabbar/btn_xueche_nor.png create mode 100644 static/images/tabbar/sy.png create mode 100644 static/images/tabbar/syActive.png create mode 100644 static/images/tabbar/tk.png create mode 100644 static/images/tabbar/tkActive.png create mode 100644 static/images/tabbar/wd.png create mode 100644 static/images/tabbar/wdActive.png create mode 100644 static/images/tabbar/zx.png create mode 100644 static/images/tabbar/zxActive.png create mode 100644 static/images/userCenter/loginTopBg.png create mode 100644 static/images/userCenter/title_1.png create mode 100644 static/images/登录流程切图/__MACOSX/登录流程切图/._.DS_Store create mode 100644 static/images/登录流程切图/__MACOSX/登录流程切图/._btn_1.png create mode 100644 static/images/登录流程切图/登录流程切图/.DS_Store create mode 100644 static/images/登录流程切图/登录流程切图/bg_1.png create mode 100644 static/images/登录流程切图/登录流程切图/btn_1.png create mode 100644 static/images/登录流程切图/登录流程切图/btn_2.png create mode 100644 static/images/登录流程切图/登录流程切图/title_1.png create mode 100644 static/logo.png create mode 100644 store/getters.js create mode 100644 store/index.js create mode 100644 store/modules/add.js create mode 100644 store/modules/user.js create mode 100644 uni.promisify.adaptor.js create mode 100644 uni.scss create mode 100644 uni_modules/uni-config-center/changelog.md create mode 100644 uni_modules/uni-config-center/package.json create mode 100644 uni_modules/uni-config-center/readme.md create mode 100644 uni_modules/uni-config-center/uniCloud/cloudfunctions/common/uni-config-center/index.js create mode 100644 uni_modules/uni-config-center/uniCloud/cloudfunctions/common/uni-config-center/package.json create mode 100644 uni_modules/uni-open-bridge-common/changelog.md create mode 100644 uni_modules/uni-open-bridge-common/package.json create mode 100644 uni_modules/uni-open-bridge-common/readme.md create mode 100644 uni_modules/uni-open-bridge-common/uniCloud/cloudfunctions/common/uni-open-bridge-common/bridge-error.js create mode 100644 uni_modules/uni-open-bridge-common/uniCloud/cloudfunctions/common/uni-open-bridge-common/config.js create mode 100644 uni_modules/uni-open-bridge-common/uniCloud/cloudfunctions/common/uni-open-bridge-common/consts.js create mode 100644 uni_modules/uni-open-bridge-common/uniCloud/cloudfunctions/common/uni-open-bridge-common/index.js create mode 100644 uni_modules/uni-open-bridge-common/uniCloud/cloudfunctions/common/uni-open-bridge-common/package.json create mode 100644 uni_modules/uni-open-bridge-common/uniCloud/cloudfunctions/common/uni-open-bridge-common/storage.js create mode 100644 uni_modules/uni-open-bridge-common/uniCloud/cloudfunctions/common/uni-open-bridge-common/uni-cloud-cache.js create mode 100644 uni_modules/uni-open-bridge-common/uniCloud/cloudfunctions/common/uni-open-bridge-common/validator.js create mode 100644 uni_modules/uni-open-bridge-common/uniCloud/cloudfunctions/common/uni-open-bridge-common/weixin-server.js create mode 100644 uni_modules/uni-open-bridge-common/uniCloud/database/opendb-open-data.schema.json 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-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/uview-ui/LICENSE create mode 100644 uni_modules/uview-ui/README.md create mode 100644 uni_modules/uview-ui/changelog.md create mode 100644 uni_modules/uview-ui/components/u--form/u--form.vue create mode 100644 uni_modules/uview-ui/components/u--image/u--image.vue create mode 100644 uni_modules/uview-ui/components/u--input/u--input.vue create mode 100644 uni_modules/uview-ui/components/u--text/u--text.vue create mode 100644 uni_modules/uview-ui/components/u--textarea/u--textarea.vue create mode 100644 uni_modules/uview-ui/components/u-action-sheet/props.js create mode 100644 uni_modules/uview-ui/components/u-action-sheet/u-action-sheet.vue create mode 100644 uni_modules/uview-ui/components/u-album/props.js create mode 100644 uni_modules/uview-ui/components/u-album/u-album.vue create mode 100644 uni_modules/uview-ui/components/u-alert/props.js create mode 100644 uni_modules/uview-ui/components/u-alert/u-alert.vue create mode 100644 uni_modules/uview-ui/components/u-avatar-group/props.js create mode 100644 uni_modules/uview-ui/components/u-avatar-group/u-avatar-group.vue create mode 100644 uni_modules/uview-ui/components/u-avatar/props.js create mode 100644 uni_modules/uview-ui/components/u-avatar/u-avatar.vue create mode 100644 uni_modules/uview-ui/components/u-back-top/props.js create mode 100644 uni_modules/uview-ui/components/u-back-top/u-back-top.vue create mode 100644 uni_modules/uview-ui/components/u-badge/props.js create mode 100644 uni_modules/uview-ui/components/u-badge/u-badge.vue create mode 100644 uni_modules/uview-ui/components/u-button/nvue.scss create mode 100644 uni_modules/uview-ui/components/u-button/props.js create mode 100644 uni_modules/uview-ui/components/u-button/u-button.vue create mode 100644 uni_modules/uview-ui/components/u-button/vue.scss create mode 100644 uni_modules/uview-ui/components/u-calendar/header.vue create mode 100644 uni_modules/uview-ui/components/u-calendar/month.vue create mode 100644 uni_modules/uview-ui/components/u-calendar/props.js create mode 100644 uni_modules/uview-ui/components/u-calendar/u-calendar.vue create mode 100644 uni_modules/uview-ui/components/u-calendar/util.js create mode 100644 uni_modules/uview-ui/components/u-car-keyboard/props.js create mode 100644 uni_modules/uview-ui/components/u-car-keyboard/u-car-keyboard.vue create mode 100644 uni_modules/uview-ui/components/u-cell-group/props.js create mode 100644 uni_modules/uview-ui/components/u-cell-group/u-cell-group.vue create mode 100644 uni_modules/uview-ui/components/u-cell/props.js create mode 100644 uni_modules/uview-ui/components/u-cell/u-cell.vue create mode 100644 uni_modules/uview-ui/components/u-checkbox-group/props.js create mode 100644 uni_modules/uview-ui/components/u-checkbox-group/u-checkbox-group.vue create mode 100644 uni_modules/uview-ui/components/u-checkbox/props.js create mode 100644 uni_modules/uview-ui/components/u-checkbox/u-checkbox.vue create mode 100644 uni_modules/uview-ui/components/u-circle-progress/props.js create mode 100644 uni_modules/uview-ui/components/u-circle-progress/u-circle-progress.vue create mode 100644 uni_modules/uview-ui/components/u-code-input/props.js create mode 100644 uni_modules/uview-ui/components/u-code-input/u-code-input.vue create mode 100644 uni_modules/uview-ui/components/u-code/props.js create mode 100644 uni_modules/uview-ui/components/u-code/u-code.vue create mode 100644 uni_modules/uview-ui/components/u-col/props.js create mode 100644 uni_modules/uview-ui/components/u-col/u-col.vue create mode 100644 uni_modules/uview-ui/components/u-collapse-item/props.js create mode 100644 uni_modules/uview-ui/components/u-collapse-item/u-collapse-item.vue create mode 100644 uni_modules/uview-ui/components/u-collapse/props.js create mode 100644 uni_modules/uview-ui/components/u-collapse/u-collapse.vue create mode 100644 uni_modules/uview-ui/components/u-column-notice/props.js create mode 100644 uni_modules/uview-ui/components/u-column-notice/u-column-notice.vue create mode 100644 uni_modules/uview-ui/components/u-count-down/props.js create mode 100644 uni_modules/uview-ui/components/u-count-down/u-count-down.vue create mode 100644 uni_modules/uview-ui/components/u-count-down/utils.js create mode 100644 uni_modules/uview-ui/components/u-count-to/props.js create mode 100644 uni_modules/uview-ui/components/u-count-to/u-count-to.vue create mode 100644 uni_modules/uview-ui/components/u-datetime-picker/props.js create mode 100644 uni_modules/uview-ui/components/u-datetime-picker/u-datetime-picker.vue create mode 100644 uni_modules/uview-ui/components/u-divider/props.js create mode 100644 uni_modules/uview-ui/components/u-divider/u-divider.vue create mode 100644 uni_modules/uview-ui/components/u-dropdown-item/props.js create mode 100644 uni_modules/uview-ui/components/u-dropdown-item/u-dropdown-item.vue create mode 100644 uni_modules/uview-ui/components/u-dropdown/props.js create mode 100644 uni_modules/uview-ui/components/u-dropdown/u-dropdown.vue create mode 100644 uni_modules/uview-ui/components/u-empty/props.js create mode 100644 uni_modules/uview-ui/components/u-empty/u-empty.vue create mode 100644 uni_modules/uview-ui/components/u-form-item/props.js create mode 100644 uni_modules/uview-ui/components/u-form-item/u-form-item.vue create mode 100644 uni_modules/uview-ui/components/u-form/props.js create mode 100644 uni_modules/uview-ui/components/u-form/u-form.vue create mode 100644 uni_modules/uview-ui/components/u-gap/props.js create mode 100644 uni_modules/uview-ui/components/u-gap/u-gap.vue create mode 100644 uni_modules/uview-ui/components/u-grid-item/props.js create mode 100644 uni_modules/uview-ui/components/u-grid-item/u-grid-item.vue create mode 100644 uni_modules/uview-ui/components/u-grid/props.js create mode 100644 uni_modules/uview-ui/components/u-grid/u-grid.vue create mode 100644 uni_modules/uview-ui/components/u-icon/icons.js create mode 100644 uni_modules/uview-ui/components/u-icon/props.js create mode 100644 uni_modules/uview-ui/components/u-icon/u-icon.vue create mode 100644 uni_modules/uview-ui/components/u-image/props.js create mode 100644 uni_modules/uview-ui/components/u-image/u-image.vue create mode 100644 uni_modules/uview-ui/components/u-index-anchor/props.js create mode 100644 uni_modules/uview-ui/components/u-index-anchor/u-index-anchor.vue create mode 100644 uni_modules/uview-ui/components/u-index-item/props.js create mode 100644 uni_modules/uview-ui/components/u-index-item/u-index-item.vue create mode 100644 uni_modules/uview-ui/components/u-index-list/props.js create mode 100644 uni_modules/uview-ui/components/u-index-list/u-index-list.vue create mode 100644 uni_modules/uview-ui/components/u-input/props.js create mode 100644 uni_modules/uview-ui/components/u-input/u-input.vue create mode 100644 uni_modules/uview-ui/components/u-keyboard/props.js create mode 100644 uni_modules/uview-ui/components/u-keyboard/u-keyboard.vue create mode 100644 uni_modules/uview-ui/components/u-line-progress/props.js create mode 100644 uni_modules/uview-ui/components/u-line-progress/u-line-progress.vue create mode 100644 uni_modules/uview-ui/components/u-line/props.js create mode 100644 uni_modules/uview-ui/components/u-line/u-line.vue create mode 100644 uni_modules/uview-ui/components/u-link/props.js create mode 100644 uni_modules/uview-ui/components/u-link/u-link.vue create mode 100644 uni_modules/uview-ui/components/u-list-item/props.js create mode 100644 uni_modules/uview-ui/components/u-list-item/u-list-item.vue create mode 100644 uni_modules/uview-ui/components/u-list/props.js create mode 100644 uni_modules/uview-ui/components/u-list/u-list.vue create mode 100644 uni_modules/uview-ui/components/u-loading-icon/props.js create mode 100644 uni_modules/uview-ui/components/u-loading-icon/u-loading-icon.vue create mode 100644 uni_modules/uview-ui/components/u-loading-page/props.js create mode 100644 uni_modules/uview-ui/components/u-loading-page/u-loading-page.vue create mode 100644 uni_modules/uview-ui/components/u-loadmore/props.js create mode 100644 uni_modules/uview-ui/components/u-loadmore/u-loadmore.vue create mode 100644 uni_modules/uview-ui/components/u-modal/props.js create mode 100644 uni_modules/uview-ui/components/u-modal/u-modal.vue create mode 100644 uni_modules/uview-ui/components/u-navbar/props.js create mode 100644 uni_modules/uview-ui/components/u-navbar/u-navbar.vue create mode 100644 uni_modules/uview-ui/components/u-no-network/props.js create mode 100644 uni_modules/uview-ui/components/u-no-network/u-no-network.vue create mode 100644 uni_modules/uview-ui/components/u-notice-bar/props.js create mode 100644 uni_modules/uview-ui/components/u-notice-bar/u-notice-bar.vue create mode 100644 uni_modules/uview-ui/components/u-notify/props.js create mode 100644 uni_modules/uview-ui/components/u-notify/u-notify.vue create mode 100644 uni_modules/uview-ui/components/u-number-box/props.js create mode 100644 uni_modules/uview-ui/components/u-number-box/u-number-box.vue create mode 100644 uni_modules/uview-ui/components/u-number-keyboard/props.js create mode 100644 uni_modules/uview-ui/components/u-number-keyboard/u-number-keyboard.vue create mode 100644 uni_modules/uview-ui/components/u-overlay/props.js create mode 100644 uni_modules/uview-ui/components/u-overlay/u-overlay.vue create mode 100644 uni_modules/uview-ui/components/u-parse/node/node.vue create mode 100644 uni_modules/uview-ui/components/u-parse/parser.js create mode 100644 uni_modules/uview-ui/components/u-parse/props.js create mode 100644 uni_modules/uview-ui/components/u-parse/u-parse.vue create mode 100644 uni_modules/uview-ui/components/u-picker-column/props.js create mode 100644 uni_modules/uview-ui/components/u-picker-column/u-picker-column.vue create mode 100644 uni_modules/uview-ui/components/u-picker/props.js create mode 100644 uni_modules/uview-ui/components/u-picker/u-picker.vue create mode 100644 uni_modules/uview-ui/components/u-popup/props.js create mode 100644 uni_modules/uview-ui/components/u-popup/u-popup.vue create mode 100644 uni_modules/uview-ui/components/u-radio-group/props.js create mode 100644 uni_modules/uview-ui/components/u-radio-group/u-radio-group.vue create mode 100644 uni_modules/uview-ui/components/u-radio/props.js create mode 100644 uni_modules/uview-ui/components/u-radio/u-radio.vue create mode 100644 uni_modules/uview-ui/components/u-rate/props.js create mode 100644 uni_modules/uview-ui/components/u-rate/u-rate.vue create mode 100644 uni_modules/uview-ui/components/u-read-more/props.js create mode 100644 uni_modules/uview-ui/components/u-read-more/u-read-more.vue create mode 100644 uni_modules/uview-ui/components/u-row-notice/props.js create mode 100644 uni_modules/uview-ui/components/u-row-notice/u-row-notice.vue create mode 100644 uni_modules/uview-ui/components/u-row/props.js create mode 100644 uni_modules/uview-ui/components/u-row/u-row.vue create mode 100644 uni_modules/uview-ui/components/u-safe-bottom/props.js create mode 100644 uni_modules/uview-ui/components/u-safe-bottom/u-safe-bottom.vue create mode 100644 uni_modules/uview-ui/components/u-scroll-list/nvue.js create mode 100644 uni_modules/uview-ui/components/u-scroll-list/other.js create mode 100644 uni_modules/uview-ui/components/u-scroll-list/props.js create mode 100644 uni_modules/uview-ui/components/u-scroll-list/scrollWxs.wxs create mode 100644 uni_modules/uview-ui/components/u-scroll-list/u-scroll-list.vue create mode 100644 uni_modules/uview-ui/components/u-search/props.js create mode 100644 uni_modules/uview-ui/components/u-search/u-search.vue create mode 100644 uni_modules/uview-ui/components/u-skeleton/props.js create mode 100644 uni_modules/uview-ui/components/u-skeleton/u-skeleton.vue create mode 100644 uni_modules/uview-ui/components/u-slider/mpother.js create mode 100644 uni_modules/uview-ui/components/u-slider/mpwxs.js create mode 100644 uni_modules/uview-ui/components/u-slider/mpwxs.wxs create mode 100644 uni_modules/uview-ui/components/u-slider/nvue - 副本.js create mode 100644 uni_modules/uview-ui/components/u-slider/nvue.js create mode 100644 uni_modules/uview-ui/components/u-slider/props.js create mode 100644 uni_modules/uview-ui/components/u-slider/u-slider.vue create mode 100644 uni_modules/uview-ui/components/u-status-bar/props.js create mode 100644 uni_modules/uview-ui/components/u-status-bar/u-status-bar.vue create mode 100644 uni_modules/uview-ui/components/u-steps-item/props.js create mode 100644 uni_modules/uview-ui/components/u-steps-item/u-steps-item.vue create mode 100644 uni_modules/uview-ui/components/u-steps/props.js create mode 100644 uni_modules/uview-ui/components/u-steps/u-steps.vue create mode 100644 uni_modules/uview-ui/components/u-sticky/props.js create mode 100644 uni_modules/uview-ui/components/u-sticky/u-sticky.vue create mode 100644 uni_modules/uview-ui/components/u-subsection/props.js create mode 100644 uni_modules/uview-ui/components/u-subsection/u-subsection.vue create mode 100644 uni_modules/uview-ui/components/u-swipe-action-item/index - backup.wxs create mode 100644 uni_modules/uview-ui/components/u-swipe-action-item/index.wxs create mode 100644 uni_modules/uview-ui/components/u-swipe-action-item/nvue - backup.js create mode 100644 uni_modules/uview-ui/components/u-swipe-action-item/nvue.js create mode 100644 uni_modules/uview-ui/components/u-swipe-action-item/props.js create mode 100644 uni_modules/uview-ui/components/u-swipe-action-item/u-swipe-action-item.vue create mode 100644 uni_modules/uview-ui/components/u-swipe-action-item/wxs.js create mode 100644 uni_modules/uview-ui/components/u-swipe-action/props.js create mode 100644 uni_modules/uview-ui/components/u-swipe-action/u-swipe-action.vue create mode 100644 uni_modules/uview-ui/components/u-swiper-indicator/props.js create mode 100644 uni_modules/uview-ui/components/u-swiper-indicator/u-swiper-indicator.vue create mode 100644 uni_modules/uview-ui/components/u-swiper/props.js create mode 100644 uni_modules/uview-ui/components/u-swiper/u-swiper.vue create mode 100644 uni_modules/uview-ui/components/u-switch/props.js create mode 100644 uni_modules/uview-ui/components/u-switch/u-switch.vue create mode 100644 uni_modules/uview-ui/components/u-tabbar-item/props.js create mode 100644 uni_modules/uview-ui/components/u-tabbar-item/u-tabbar-item.vue create mode 100644 uni_modules/uview-ui/components/u-tabbar/props.js create mode 100644 uni_modules/uview-ui/components/u-tabbar/u-tabbar.vue create mode 100644 uni_modules/uview-ui/components/u-table/props.js create mode 100644 uni_modules/uview-ui/components/u-table/u-table.vue create mode 100644 uni_modules/uview-ui/components/u-tabs-item/props.js create mode 100644 uni_modules/uview-ui/components/u-tabs-item/u-tabs-item.vue create mode 100644 uni_modules/uview-ui/components/u-tabs/props.js create mode 100644 uni_modules/uview-ui/components/u-tabs/u-tabs.vue create mode 100644 uni_modules/uview-ui/components/u-tag/props.js create mode 100644 uni_modules/uview-ui/components/u-tag/u-tag.vue create mode 100644 uni_modules/uview-ui/components/u-td/props.js create mode 100644 uni_modules/uview-ui/components/u-td/u-td.vue create mode 100644 uni_modules/uview-ui/components/u-text/props.js create mode 100644 uni_modules/uview-ui/components/u-text/u-text.vue create mode 100644 uni_modules/uview-ui/components/u-text/value.js create mode 100644 uni_modules/uview-ui/components/u-textarea/props.js create mode 100644 uni_modules/uview-ui/components/u-textarea/u-textarea.vue create mode 100644 uni_modules/uview-ui/components/u-toast/u-toast.vue create mode 100644 uni_modules/uview-ui/components/u-toolbar/props.js create mode 100644 uni_modules/uview-ui/components/u-toolbar/u-toolbar.vue create mode 100644 uni_modules/uview-ui/components/u-tooltip/clipboard.min.js create mode 100644 uni_modules/uview-ui/components/u-tooltip/props.js create mode 100644 uni_modules/uview-ui/components/u-tooltip/u-tooltip.vue create mode 100644 uni_modules/uview-ui/components/u-tr/props.js create mode 100644 uni_modules/uview-ui/components/u-tr/u-tr.vue create mode 100644 uni_modules/uview-ui/components/u-transition/nvue.ani-map.js create mode 100644 uni_modules/uview-ui/components/u-transition/props.js create mode 100644 uni_modules/uview-ui/components/u-transition/transition.js create mode 100644 uni_modules/uview-ui/components/u-transition/u-transition.vue create mode 100644 uni_modules/uview-ui/components/u-transition/vue.ani-style.scss create mode 100644 uni_modules/uview-ui/components/u-upload/mixin.js create mode 100644 uni_modules/uview-ui/components/u-upload/props.js create mode 100644 uni_modules/uview-ui/components/u-upload/u-upload.vue create mode 100644 uni_modules/uview-ui/components/u-upload/utils.js create mode 100644 uni_modules/uview-ui/components/uview-ui/uview-ui.vue create mode 100644 uni_modules/uview-ui/index.js create mode 100644 uni_modules/uview-ui/index.scss create mode 100644 uni_modules/uview-ui/libs/config/color.js create mode 100644 uni_modules/uview-ui/libs/config/config.js create mode 100644 uni_modules/uview-ui/libs/config/props.js create mode 100644 uni_modules/uview-ui/libs/config/props/actionSheet.js create mode 100644 uni_modules/uview-ui/libs/config/props/album.js create mode 100644 uni_modules/uview-ui/libs/config/props/alert.js create mode 100644 uni_modules/uview-ui/libs/config/props/avatar.js create mode 100644 uni_modules/uview-ui/libs/config/props/avatarGroup.js create mode 100644 uni_modules/uview-ui/libs/config/props/backtop.js create mode 100644 uni_modules/uview-ui/libs/config/props/badge.js create mode 100644 uni_modules/uview-ui/libs/config/props/button.js create mode 100644 uni_modules/uview-ui/libs/config/props/calendar.js create mode 100644 uni_modules/uview-ui/libs/config/props/carKeyboard.js create mode 100644 uni_modules/uview-ui/libs/config/props/cell.js create mode 100644 uni_modules/uview-ui/libs/config/props/cellGroup.js create mode 100644 uni_modules/uview-ui/libs/config/props/checkbox.js create mode 100644 uni_modules/uview-ui/libs/config/props/checkboxGroup.js create mode 100644 uni_modules/uview-ui/libs/config/props/circleProgress.js create mode 100644 uni_modules/uview-ui/libs/config/props/code.js create mode 100644 uni_modules/uview-ui/libs/config/props/codeInput.js create mode 100644 uni_modules/uview-ui/libs/config/props/col.js create mode 100644 uni_modules/uview-ui/libs/config/props/collapse.js create mode 100644 uni_modules/uview-ui/libs/config/props/collapseItem.js create mode 100644 uni_modules/uview-ui/libs/config/props/columnNotice.js create mode 100644 uni_modules/uview-ui/libs/config/props/countDown.js create mode 100644 uni_modules/uview-ui/libs/config/props/countTo.js create mode 100644 uni_modules/uview-ui/libs/config/props/datetimePicker.js create mode 100644 uni_modules/uview-ui/libs/config/props/divider.js create mode 100644 uni_modules/uview-ui/libs/config/props/empty.js create mode 100644 uni_modules/uview-ui/libs/config/props/form.js create mode 100644 uni_modules/uview-ui/libs/config/props/formItem.js create mode 100644 uni_modules/uview-ui/libs/config/props/gap.js create mode 100644 uni_modules/uview-ui/libs/config/props/grid.js create mode 100644 uni_modules/uview-ui/libs/config/props/gridItem.js create mode 100644 uni_modules/uview-ui/libs/config/props/icon.js create mode 100644 uni_modules/uview-ui/libs/config/props/image.js create mode 100644 uni_modules/uview-ui/libs/config/props/indexAnchor.js create mode 100644 uni_modules/uview-ui/libs/config/props/indexList.js create mode 100644 uni_modules/uview-ui/libs/config/props/input.js create mode 100644 uni_modules/uview-ui/libs/config/props/keyboard.js create mode 100644 uni_modules/uview-ui/libs/config/props/line.js create mode 100644 uni_modules/uview-ui/libs/config/props/lineProgress.js create mode 100644 uni_modules/uview-ui/libs/config/props/link.js create mode 100644 uni_modules/uview-ui/libs/config/props/list.js create mode 100644 uni_modules/uview-ui/libs/config/props/listItem.js create mode 100644 uni_modules/uview-ui/libs/config/props/loadingIcon.js create mode 100644 uni_modules/uview-ui/libs/config/props/loadingPage.js create mode 100644 uni_modules/uview-ui/libs/config/props/loadmore.js create mode 100644 uni_modules/uview-ui/libs/config/props/modal.js create mode 100644 uni_modules/uview-ui/libs/config/props/navbar.js create mode 100644 uni_modules/uview-ui/libs/config/props/noNetwork.js create mode 100644 uni_modules/uview-ui/libs/config/props/noticeBar.js create mode 100644 uni_modules/uview-ui/libs/config/props/notify.js create mode 100644 uni_modules/uview-ui/libs/config/props/numberBox.js create mode 100644 uni_modules/uview-ui/libs/config/props/numberKeyboard.js create mode 100644 uni_modules/uview-ui/libs/config/props/overlay.js create mode 100644 uni_modules/uview-ui/libs/config/props/parse.js create mode 100644 uni_modules/uview-ui/libs/config/props/picker.js create mode 100644 uni_modules/uview-ui/libs/config/props/popup.js create mode 100644 uni_modules/uview-ui/libs/config/props/radio.js create mode 100644 uni_modules/uview-ui/libs/config/props/radioGroup.js create mode 100644 uni_modules/uview-ui/libs/config/props/rate.js create mode 100644 uni_modules/uview-ui/libs/config/props/readMore.js create mode 100644 uni_modules/uview-ui/libs/config/props/row.js create mode 100644 uni_modules/uview-ui/libs/config/props/rowNotice.js create mode 100644 uni_modules/uview-ui/libs/config/props/scrollList.js create mode 100644 uni_modules/uview-ui/libs/config/props/search.js create mode 100644 uni_modules/uview-ui/libs/config/props/section.js create mode 100644 uni_modules/uview-ui/libs/config/props/skeleton.js create mode 100644 uni_modules/uview-ui/libs/config/props/slider.js create mode 100644 uni_modules/uview-ui/libs/config/props/statusBar.js create mode 100644 uni_modules/uview-ui/libs/config/props/steps.js create mode 100644 uni_modules/uview-ui/libs/config/props/stepsItem.js create mode 100644 uni_modules/uview-ui/libs/config/props/sticky.js create mode 100644 uni_modules/uview-ui/libs/config/props/subsection.js create mode 100644 uni_modules/uview-ui/libs/config/props/swipeAction.js create mode 100644 uni_modules/uview-ui/libs/config/props/swipeActionItem.js create mode 100644 uni_modules/uview-ui/libs/config/props/swiper.js create mode 100644 uni_modules/uview-ui/libs/config/props/swipterIndicator.js create mode 100644 uni_modules/uview-ui/libs/config/props/switch.js create mode 100644 uni_modules/uview-ui/libs/config/props/tabbar.js create mode 100644 uni_modules/uview-ui/libs/config/props/tabbarItem.js create mode 100644 uni_modules/uview-ui/libs/config/props/tabs.js create mode 100644 uni_modules/uview-ui/libs/config/props/tag.js create mode 100644 uni_modules/uview-ui/libs/config/props/text.js create mode 100644 uni_modules/uview-ui/libs/config/props/textarea.js create mode 100644 uni_modules/uview-ui/libs/config/props/toast.js create mode 100644 uni_modules/uview-ui/libs/config/props/toolbar.js create mode 100644 uni_modules/uview-ui/libs/config/props/tooltip.js create mode 100644 uni_modules/uview-ui/libs/config/props/transition.js create mode 100644 uni_modules/uview-ui/libs/config/props/upload.js create mode 100644 uni_modules/uview-ui/libs/config/zIndex.js create mode 100644 uni_modules/uview-ui/libs/css/color.scss create mode 100644 uni_modules/uview-ui/libs/css/common.scss create mode 100644 uni_modules/uview-ui/libs/css/components.scss create mode 100644 uni_modules/uview-ui/libs/css/flex.scss create mode 100644 uni_modules/uview-ui/libs/css/h5.scss create mode 100644 uni_modules/uview-ui/libs/css/mixin.scss create mode 100644 uni_modules/uview-ui/libs/css/mp.scss create mode 100644 uni_modules/uview-ui/libs/css/nvue.scss create mode 100644 uni_modules/uview-ui/libs/css/vue.scss create mode 100644 uni_modules/uview-ui/libs/function/colorGradient.js create mode 100644 uni_modules/uview-ui/libs/function/debounce.js create mode 100644 uni_modules/uview-ui/libs/function/digit.js create mode 100644 uni_modules/uview-ui/libs/function/index.js create mode 100644 uni_modules/uview-ui/libs/function/platform.js create mode 100644 uni_modules/uview-ui/libs/function/test.js create mode 100644 uni_modules/uview-ui/libs/function/throttle.js create mode 100644 uni_modules/uview-ui/libs/luch-request/adapters/index.js create mode 100644 uni_modules/uview-ui/libs/luch-request/core/InterceptorManager.js create mode 100644 uni_modules/uview-ui/libs/luch-request/core/Request.js create mode 100644 uni_modules/uview-ui/libs/luch-request/core/buildFullPath.js create mode 100644 uni_modules/uview-ui/libs/luch-request/core/defaults.js create mode 100644 uni_modules/uview-ui/libs/luch-request/core/dispatchRequest.js create mode 100644 uni_modules/uview-ui/libs/luch-request/core/mergeConfig.js create mode 100644 uni_modules/uview-ui/libs/luch-request/core/settle.js create mode 100644 uni_modules/uview-ui/libs/luch-request/helpers/buildURL.js create mode 100644 uni_modules/uview-ui/libs/luch-request/helpers/combineURLs.js create mode 100644 uni_modules/uview-ui/libs/luch-request/helpers/isAbsoluteURL.js create mode 100644 uni_modules/uview-ui/libs/luch-request/index.d.ts create mode 100644 uni_modules/uview-ui/libs/luch-request/index.js create mode 100644 uni_modules/uview-ui/libs/luch-request/utils.js create mode 100644 uni_modules/uview-ui/libs/luch-request/utils/clone.js create mode 100644 uni_modules/uview-ui/libs/mixin/button.js create mode 100644 uni_modules/uview-ui/libs/mixin/mixin.js create mode 100644 uni_modules/uview-ui/libs/mixin/mpMixin.js create mode 100644 uni_modules/uview-ui/libs/mixin/mpShare.js create mode 100644 uni_modules/uview-ui/libs/mixin/openType.js create mode 100644 uni_modules/uview-ui/libs/mixin/style.js create mode 100644 uni_modules/uview-ui/libs/mixin/touch.js create mode 100644 uni_modules/uview-ui/libs/util/async-validator.js create mode 100644 uni_modules/uview-ui/libs/util/calendar.js create mode 100644 uni_modules/uview-ui/libs/util/dayjs.js create mode 100644 uni_modules/uview-ui/libs/util/emitter.js create mode 100644 uni_modules/uview-ui/libs/util/route.js create mode 100644 uni_modules/uview-ui/package.json create mode 100644 uni_modules/uview-ui/theme.scss diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..c3d8c3c --- /dev/null +++ b/.gitignore @@ -0,0 +1,7 @@ +node_modules +package-lock.json +unpackage/dist +unpackage/cache +.hbuilderx +unpackage + diff --git a/App.vue b/App.vue new file mode 100644 index 0000000..2211627 --- /dev/null +++ b/App.vue @@ -0,0 +1,20 @@ + + + diff --git a/README.md b/README.md new file mode 100644 index 0000000..e69de29 diff --git a/common/css/app.scss b/common/css/app.scss new file mode 100644 index 0000000..98da871 --- /dev/null +++ b/common/css/app.scss @@ -0,0 +1,65 @@ +page { + background-color: #fff; + font-size: 32rpx; + font-family: -apple-system-font, Helvetica Neue, Helvetica, sans-serif; +} +view { + box-sizing: border-box; +} + +.oneRowText { + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; +} +.towRowText { + display: -webkit-box; + overflow: hidden; + white-space: normal; + text-overflow: ellipsis; + word-wrap: break-word; + -webkit-line-clamp: 2; + -webkit-box-orient: vertical +} +.bgLinear { + background: linear-gradient(180deg, #3593FB 0%, #53D3E5 100%); +} +.flex-b { + justify-content: space-between; + display: flex; + align-items: center; +} +.flex { + display: flex; + align-items: center; +} +.pageBg { + background: #F6F6F6; +} +.pad { + padding: 0 28rpx; +} +.status_bar { + height: var(--status-bar-height); + width: 100%; + } +image { + display: block; + width: 100%; + height: 100%; +} +.placeholderClassFFF { + color: #fff !important; +} +.star { + display: flex; + align-items: center; + .starText { + font-size: 26rpx; + color: #F5682D; + } +} + +.my .u-input { + height: 100%; + } \ No newline at end of file diff --git a/common/js/utils.js b/common/js/utils.js new file mode 100644 index 0000000..17ea3fd --- /dev/null +++ b/common/js/utils.js @@ -0,0 +1,96 @@ +import store from '@/store'; + +const install = (Vue, vm) => { + + // 打开地图 + const openMap = (lat, lng) => { + uni.openLocation({ + latitude: lat, + longitude: lng + }) + } + + // 距离换算 + const distanceFn = (val) => { + if (val * 1 < 1000) { + return val + '米' + } else { + return (val / 1000).toFixed(2) + '公里' + } + } + // 价格计算 + const priceTo = (price = 0) => { + // return (price / 100).toFixed(2) + return (parseInt(price * 100) / 100 / 100).toFixed(2) + + } + + const distanceLatLng = (lat1, lng1) => { + var that = this; + let lat2 = store.state.latLng.lat; + let lng2 = store.state.latLng.lng; + let rad1 = lat1 * Math.PI / 180.0; + let rad2 = lat2 * Math.PI / 180.0; + let a = rad1 - rad2; + let b = lng1 * Math.PI / 180.0 - lng2 * Math.PI / 180.0; + let s = 2 * Math.asin(Math.sqrt(Math.pow(Math.sin(a / 2), 2) + Math.cos(rad1) * + Math.cos( + rad2) * Math.pow( + Math.sin(b / 2), 2))); + s = s * 6378.137; + s = Math.round(s * 10000) / 10000; + s = s.toString(); + s = s.substring(0, s.indexOf('.') + 2); + return s + + } + + const getLocation = () => { + return new Promise((resolve, reject) => { + uni.getLocation({ + type: 'wgs84', + success: function(res) { + console.log('当前位置的经度:' + res.longitude); + console.log('当前位置的纬度:' + res.latitude); + let obj = { + lat: res.latitude, + lng: res.longitude + } + store.commit('updateLatLng', obj) + resolve(obj) + } + }); + }).catch((e) => {}) + } + + + + + function addZeroPrefix(number) { + return number < 10 ? `0${number}` : number + } + + let getDate = (date, splitor = '-') => { + const year = date.getFullYear() + const month = date.getMonth() + 1 + const day = date.getDate() + return `${year}${splitor}${addZeroPrefix(month)}${splitor}${addZeroPrefix(day)}` + } + + + + + + vm.$u.utils = { + openMap, + getLocation, + priceTo, + distanceLatLng, + distanceFn, + getDate, + } +} + +export default { + install +} \ No newline at end of file diff --git a/common/sdk/qqmap-wx-jssdk.js b/common/sdk/qqmap-wx-jssdk.js new file mode 100644 index 0000000..b114e29 --- /dev/null +++ b/common/sdk/qqmap-wx-jssdk.js @@ -0,0 +1,741 @@ +/** + * 微信小程序JavaScriptSDK + * + * @version 1.1 + * @date 2019-01-20 + */ + +var ERROR_CONF = { + KEY_ERR: 311, + KEY_ERR_MSG: 'key格式错误', + PARAM_ERR: 310, + PARAM_ERR_MSG: '请求参数信息有误', + SYSTEM_ERR: 600, + SYSTEM_ERR_MSG: '系统错误', + WX_ERR_CODE: 1000, + WX_OK_CODE: 200 +}; +var BASE_URL = 'https://apis.map.qq.com/ws/'; +var URL_SEARCH = BASE_URL + 'place/v1/search'; +var URL_SUGGESTION = BASE_URL + 'place/v1/suggestion'; +var URL_GET_GEOCODER = BASE_URL + 'geocoder/v1/'; +var URL_CITY_LIST = BASE_URL + 'district/v1/list'; +var URL_AREA_LIST = BASE_URL + 'district/v1/getchildren'; +var URL_DISTANCE = BASE_URL + 'distance/v1/'; +var EARTH_RADIUS = 6378136.49; +var Utils = { + /** + * 得到终点query字符串 + * @param {Array|String} 检索数据 + */ + location2query(data) { + if (typeof data == 'string') { + return data; + } + var query = ''; + for (var i = 0; i < data.length; i++) { + var d = data[i]; + if (!!query) { + query += ';'; + } + if (d.location) { + query = query + d.location.lat + ',' + d.location.lng; + } + if (d.latitude && d.longitude) { + query = query + d.latitude + ',' + d.longitude; + } + } + return query; + }, + + /** + * 计算角度 + */ + rad(d) { + return d * Math.PI / 180.0; + }, + /** + * 处理终点location数组 + * @return 返回终点数组 + */ + getEndLocation(location){ + var to = location.split(';'); + var endLocation = []; + for (var i = 0; i < to.length; i++) { + endLocation.push({ + lat: parseFloat(to[i].split(',')[0]), + lng: parseFloat(to[i].split(',')[1]) + }) + } + return endLocation; + }, + + /** + * 计算两点间直线距离 + * @param a 表示纬度差 + * @param b 表示经度差 + * @return 返回的是距离,单位m + */ + getDistance(latFrom, lngFrom, latTo, lngTo) { + var radLatFrom = this.rad(latFrom); + var radLatTo = this.rad(latTo); + var a = radLatFrom - radLatTo; + var b = this.rad(lngFrom) - this.rad(lngTo); + var distance = 2 * Math.asin(Math.sqrt(Math.pow(Math.sin(a / 2), 2) + Math.cos(radLatFrom) * Math.cos(radLatTo) * Math.pow(Math.sin(b / 2), 2))); + distance = distance * EARTH_RADIUS; + distance = Math.round(distance * 10000) / 10000; + return parseFloat(distance.toFixed(0)); + }, + /** + * 使用微信接口进行定位 + */ + getWXLocation(success, fail, complete) { + wx.getLocation({ + type: 'gcj02', + success: success, + fail: fail, + complete: complete + }); + }, + + /** + * 获取location参数 + */ + getLocationParam(location) { + if (typeof location == 'string') { + var locationArr = location.split(','); + if (locationArr.length === 2) { + location = { + latitude: location.split(',')[0], + longitude: location.split(',')[1] + }; + } else { + location = {}; + } + } + return location; + }, + + /** + * 回调函数默认处理 + */ + polyfillParam(param) { + param.success = param.success || function () { }; + param.fail = param.fail || function () { }; + param.complete = param.complete || function () { }; + }, + + /** + * 验证param对应的key值是否为空 + * + * @param {Object} param 接口参数 + * @param {String} key 对应参数的key + */ + checkParamKeyEmpty(param, key) { + if (!param[key]) { + var errconf = this.buildErrorConfig(ERROR_CONF.PARAM_ERR, ERROR_CONF.PARAM_ERR_MSG + key +'参数格式有误'); + param.fail(errconf); + param.complete(errconf); + return true; + } + return false; + }, + + /** + * 验证参数中是否存在检索词keyword + * + * @param {Object} param 接口参数 + */ + checkKeyword(param){ + return !this.checkParamKeyEmpty(param, 'keyword'); + }, + + /** + * 验证location值 + * + * @param {Object} param 接口参数 + */ + checkLocation(param) { + var location = this.getLocationParam(param.location); + if (!location || !location.latitude || !location.longitude) { + var errconf = this.buildErrorConfig(ERROR_CONF.PARAM_ERR, ERROR_CONF.PARAM_ERR_MSG + ' location参数格式有误'); + param.fail(errconf); + param.complete(errconf); + return false; + } + return true; + }, + + /** + * 构造错误数据结构 + * @param {Number} errCode 错误码 + * @param {Number} errMsg 错误描述 + */ + buildErrorConfig(errCode, errMsg) { + return { + status: errCode, + message: errMsg + }; + }, + + /** + * + * 数据处理函数 + * 根据传入参数不同处理不同数据 + * @param {String} feature 功能名称 + * search 地点搜索 + * suggest关键词提示 + * reverseGeocoder逆地址解析 + * geocoder地址解析 + * getCityList获取城市列表:父集 + * getDistrictByCityId获取区县列表:子集 + * calculateDistance距离计算 + * @param {Object} param 接口参数 + * @param {Object} data 数据 + */ + handleData(param,data,feature){ + if (feature === 'search') { + var searchResult = data.data; + var searchSimplify = []; + for (var i = 0; i < searchResult.length; i++) { + searchSimplify.push({ + id: searchResult[i].id || null, + title: searchResult[i].title || null, + latitude: searchResult[i].location && searchResult[i].location.lat || null, + longitude: searchResult[i].location && searchResult[i].location.lng || null, + address: searchResult[i].address || null, + category: searchResult[i].category || null, + tel: searchResult[i].tel || null, + adcode: searchResult[i].ad_info && searchResult[i].ad_info.adcode || null, + city: searchResult[i].ad_info && searchResult[i].ad_info.city || null, + district: searchResult[i].ad_info && searchResult[i].ad_info.district || null, + province: searchResult[i].ad_info && searchResult[i].ad_info.province || null + }) + } + param.success(data, { + searchResult: searchResult, + searchSimplify: searchSimplify + }) + } else if (feature === 'suggest') { + var suggestResult = data.data; + var suggestSimplify = []; + for (var i = 0; i < suggestResult.length; i++) { + suggestSimplify.push({ + adcode: suggestResult[i].adcode || null, + address: suggestResult[i].address || null, + category: suggestResult[i].category || null, + city: suggestResult[i].city || null, + district: suggestResult[i].district || null, + id: suggestResult[i].id || null, + latitude: suggestResult[i].location && suggestResult[i].location.lat || null, + longitude: suggestResult[i].location && suggestResult[i].location.lng || null, + province: suggestResult[i].province || null, + title: suggestResult[i].title || null, + type: suggestResult[i].type || null + }) + } + param.success(data, { + suggestResult: suggestResult, + suggestSimplify: suggestSimplify + }) + } else if (feature === 'reverseGeocoder') { + var reverseGeocoderResult = data.result; + var reverseGeocoderSimplify = { + address: reverseGeocoderResult.address || null, + latitude: reverseGeocoderResult.location && reverseGeocoderResult.location.lat || null, + longitude: reverseGeocoderResult.location && reverseGeocoderResult.location.lng || null, + adcode: reverseGeocoderResult.ad_info && reverseGeocoderResult.ad_info.adcode || null, + city: reverseGeocoderResult.address_component && reverseGeocoderResult.address_component.city || null, + district: reverseGeocoderResult.address_component && reverseGeocoderResult.address_component.district || null, + nation: reverseGeocoderResult.address_component && reverseGeocoderResult.address_component.nation || null, + province: reverseGeocoderResult.address_component && reverseGeocoderResult.address_component.province || null, + street: reverseGeocoderResult.address_component && reverseGeocoderResult.address_component.street || null, + street_number: reverseGeocoderResult.address_component && reverseGeocoderResult.address_component.street_number || null, + recommend: reverseGeocoderResult.formatted_addresses && reverseGeocoderResult.formatted_addresses.recommend || null, + rough: reverseGeocoderResult.formatted_addresses && reverseGeocoderResult.formatted_addresses.rough || null + }; + if (reverseGeocoderResult.pois) {//判断是否返回周边poi + var pois = reverseGeocoderResult.pois; + var poisSimplify = []; + for (var i = 0;i < pois.length;i++) { + poisSimplify.push({ + id: pois[i].id || null, + title: pois[i].title || null, + latitude: pois[i].location && pois[i].location.lat || null, + longitude: pois[i].location && pois[i].location.lng || null, + address: pois[i].address || null, + category: pois[i].category || null, + adcode: pois[i].ad_info && pois[i].ad_info.adcode || null, + city: pois[i].ad_info && pois[i].ad_info.city || null, + district: pois[i].ad_info && pois[i].ad_info.district || null, + province: pois[i].ad_info && pois[i].ad_info.province || null + }) + } + param.success(data,{ + reverseGeocoderResult: reverseGeocoderResult, + reverseGeocoderSimplify: reverseGeocoderSimplify, + pois: pois, + poisSimplify: poisSimplify + }) + } else { + param.success(data, { + reverseGeocoderResult: reverseGeocoderResult, + reverseGeocoderSimplify: reverseGeocoderSimplify + }) + } + } else if (feature === 'geocoder') { + var geocoderResult = data.result; + var geocoderSimplify = { + title: geocoderResult.title || null, + latitude: geocoderResult.location && geocoderResult.location.lat || null, + longitude: geocoderResult.location && geocoderResult.location.lng || null, + adcode: geocoderResult.ad_info && geocoderResult.ad_info.adcode || null, + province: geocoderResult.address_components && geocoderResult.address_components.province || null, + city: geocoderResult.address_components && geocoderResult.address_components.city || null, + district: geocoderResult.address_components && geocoderResult.address_components.district || null, + street: geocoderResult.address_components && geocoderResult.address_components.street || null, + street_number: geocoderResult.address_components && geocoderResult.address_components.street_number || null, + level: geocoderResult.level || null + }; + param.success(data,{ + geocoderResult: geocoderResult, + geocoderSimplify: geocoderSimplify + }); + } else if (feature === 'getCityList') { + var provinceResult = data.result[0]; + var cityResult = data.result[1]; + var districtResult = data.result[2]; + param.success(data,{ + provinceResult: provinceResult, + cityResult: cityResult, + districtResult: districtResult + }); + } else if (feature === 'getDistrictByCityId') { + var districtByCity = data.result[0]; + param.success(data, districtByCity); + } else if (feature === 'calculateDistance') { + var calculateDistanceResult = data.result.elements; + var distance = []; + for (var i = 0; i < calculateDistanceResult.length; i++){ + distance.push(calculateDistanceResult[i].distance); + } + param.success(data, { + calculateDistanceResult: calculateDistanceResult, + distance: distance + }); + } else { + param.success(data); + } + }, + + /** + * 构造微信请求参数,公共属性处理 + * + * @param {Object} param 接口参数 + * @param {Object} param 配置项 + * @param {String} feature 方法名 + */ + buildWxRequestConfig(param, options, feature) { + var that = this; + options.header = { "content-type": "application/json" }; + options.method = 'GET'; + options.success = function (res) { + var data = res.data; + if (data.status === 0) { + that.handleData(param, data, feature); + } else { + param.fail(data); + } + }; + options.fail = function (res) { + res.statusCode = ERROR_CONF.WX_ERR_CODE; + param.fail(that.buildErrorConfig(ERROR_CONF.WX_ERR_CODE, res.errMsg)); + }; + options.complete = function (res) { + var statusCode = +res.statusCode; + switch(statusCode) { + case ERROR_CONF.WX_ERR_CODE: { + param.complete(that.buildErrorConfig(ERROR_CONF.WX_ERR_CODE, res.errMsg)); + break; + } + case ERROR_CONF.WX_OK_CODE: { + var data = res.data; + if (data.status === 0) { + param.complete(data); + } else { + param.complete(that.buildErrorConfig(data.status, data.message)); + } + break; + } + default:{ + param.complete(that.buildErrorConfig(ERROR_CONF.SYSTEM_ERR, ERROR_CONF.SYSTEM_ERR_MSG)); + } + + } + }; + return options; + }, + + /** + * 处理用户参数是否传入坐标进行不同的处理 + */ + locationProcess(param, locationsuccess, locationfail, locationcomplete) { + var that = this; + locationfail = locationfail || function (res) { + res.statusCode = ERROR_CONF.WX_ERR_CODE; + param.fail(that.buildErrorConfig(ERROR_CONF.WX_ERR_CODE, res.errMsg)); + }; + locationcomplete = locationcomplete || function (res) { + if (res.statusCode == ERROR_CONF.WX_ERR_CODE) { + param.complete(that.buildErrorConfig(ERROR_CONF.WX_ERR_CODE, res.errMsg)); + } + }; + if (!param.location) { + that.getWXLocation(locationsuccess, locationfail, locationcomplete); + } else if (that.checkLocation(param)) { + var location = Utils.getLocationParam(param.location); + locationsuccess(location); + } + } +}; + + +class QQMapWX { + + /** + * 构造函数 + * + * @param {Object} options 接口参数,key 为必选参数 + */ + constructor(options) { + if (!options.key) { + throw Error('key值不能为空'); + } + this.key = options.key; + }; + + /** + * POI周边检索 + * + * @param {Object} options 接口参数对象 + * + * 参数对象结构可以参考 + * @see http://lbs.qq.com/webservice_v1/guide-search.html + */ + search(options) { + var that = this; + options = options || {}; + + Utils.polyfillParam(options); + + if (!Utils.checkKeyword(options)) { + return; + } + + var requestParam = { + keyword: options.keyword, + orderby: options.orderby || '_distance', + page_size: options.page_size || 10, + page_index: options.page_index || 1, + output: 'json', + key: that.key + }; + + if (options.address_format) { + requestParam.address_format = options.address_format; + } + + if (options.filter) { + requestParam.filter = options.filter; + } + + var distance = options.distance || "1000"; + var auto_extend = options.auto_extend || 1; + var region = null; + var rectangle = null; + + //判断城市限定参数 + if (options.region) { + region = options.region; + } + + //矩形限定坐标(暂时只支持字符串格式) + if (options.rectangle) { + rectangle = options.rectangle; + } + + var locationsuccess = function (result) { + if (region && !rectangle) { + //城市限定参数拼接 + requestParam.boundary = "region(" + region + "," + auto_extend + "," + result.latitude + "," + result.longitude + ")"; + } else if (rectangle && !region) { + //矩形搜索 + requestParam.boundary = "rectangle(" + rectangle + ")"; + } else { + requestParam.boundary = "nearby(" + result.latitude + "," + result.longitude + "," + distance + "," + auto_extend + ")"; + } + wx.request(Utils.buildWxRequestConfig(options, { + url: URL_SEARCH, + data: requestParam + }, 'search')); + }; + Utils.locationProcess(options, locationsuccess); + }; + + /** + * sug模糊检索 + * + * @param {Object} options 接口参数对象 + * + * 参数对象结构可以参考 + * http://lbs.qq.com/webservice_v1/guide-suggestion.html + */ + getSuggestion(options) { + var that = this; + options = options || {}; + Utils.polyfillParam(options); + + if (!Utils.checkKeyword(options)) { + return; + } + + var requestParam = { + keyword: options.keyword, + region: options.region || '全国', + region_fix: options.region_fix || 0, + policy: options.policy || 0, + page_size: options.page_size || 10,//控制显示条数 + page_index: options.page_index || 1,//控制页数 + get_subpois : options.get_subpois || 0,//返回子地点 + output: 'json', + key: that.key + }; + //长地址 + if (options.address_format) { + requestParam.address_format = options.address_format; + } + //过滤 + if (options.filter) { + requestParam.filter = options.filter; + } + //排序 + if (options.location) { + var locationsuccess = function (result) { + requestParam.location = result.latitude + ',' + result.longitude; + wx.request(Utils.buildWxRequestConfig(options, { + url: URL_SUGGESTION, + data: requestParam + }, "suggest")); + }; + Utils.locationProcess(options, locationsuccess); + } else { + wx.request(Utils.buildWxRequestConfig(options, { + url: URL_SUGGESTION, + data: requestParam + }, "suggest")); + } + }; + + /** + * 逆地址解析 + * + * @param {Object} options 接口参数对象 + * + * 请求参数结构可以参考 + * http://lbs.qq.com/webservice_v1/guide-gcoder.html + */ + reverseGeocoder(options) { + var that = this; + options = options || {}; + Utils.polyfillParam(options); + var requestParam = { + coord_type: options.coord_type || 5, + get_poi: options.get_poi || 0, + output: 'json', + key: that.key + }; + if (options.poi_options) { + requestParam.poi_options = options.poi_options + } + + var locationsuccess = function (result) { + requestParam.location = result.latitude + ',' + result.longitude; + wx.request(Utils.buildWxRequestConfig(options, { + url: URL_GET_GEOCODER, + data: requestParam + }, 'reverseGeocoder')); + }; + Utils.locationProcess(options, locationsuccess); + }; + + /** + * 地址解析 + * + * @param {Object} options 接口参数对象 + * + * 请求参数结构可以参考 + * http://lbs.qq.com/webservice_v1/guide-geocoder.html + */ + geocoder(options) { + var that = this; + options = options || {}; + Utils.polyfillParam(options); + + if (Utils.checkParamKeyEmpty(options, 'address')) { + return; + } + + var requestParam = { + address: options.address, + output: 'json', + key: that.key + }; + + //城市限定 + if (options.region) { + requestParam.region = options.region; + } + + wx.request(Utils.buildWxRequestConfig(options, { + url: URL_GET_GEOCODER, + data: requestParam + },'geocoder')); + }; + + + /** + * 获取城市列表 + * + * @param {Object} options 接口参数对象 + * + * 请求参数结构可以参考 + * http://lbs.qq.com/webservice_v1/guide-region.html + */ + getCityList(options) { + var that = this; + options = options || {}; + Utils.polyfillParam(options); + var requestParam = { + output: 'json', + key: that.key + }; + + wx.request(Utils.buildWxRequestConfig(options, { + url: URL_CITY_LIST, + data: requestParam + },'getCityList')); + }; + + /** + * 获取对应城市ID的区县列表 + * + * @param {Object} options 接口参数对象 + * + * 请求参数结构可以参考 + * http://lbs.qq.com/webservice_v1/guide-region.html + */ + getDistrictByCityId(options) { + var that = this; + options = options || {}; + Utils.polyfillParam(options); + + if (Utils.checkParamKeyEmpty(options, 'id')) { + return; + } + + var requestParam = { + id: options.id || '', + output: 'json', + key: that.key + }; + + wx.request(Utils.buildWxRequestConfig(options, { + url: URL_AREA_LIST, + data: requestParam + },'getDistrictByCityId')); + }; + + /** + * 用于单起点到多终点的路线距离(非直线距离)计算: + * 支持两种距离计算方式:步行和驾车。 + * 起点到终点最大限制直线距离10公里。 + * + * 新增直线距离计算。 + * + * @param {Object} options 接口参数对象 + * + * 请求参数结构可以参考 + * http://lbs.qq.com/webservice_v1/guide-distance.html + */ + calculateDistance(options) { + var that = this; + options = options || {}; + Utils.polyfillParam(options); + + if (Utils.checkParamKeyEmpty(options, 'to')) { + return; + } + + var requestParam = { + mode: options.mode || 'walking', + to: Utils.location2query(options.to), + output: 'json', + key: that.key + }; + + if (options.from) { + options.location = options.from; + } + + //计算直线距离 + if(requestParam.mode == 'straight'){ + var locationsuccess = function (result) { + var locationTo = Utils.getEndLocation(requestParam.to);//处理终点坐标 + var data = { + message:"query ok", + result:{ + elements:[] + }, + status:0 + }; + for (var i = 0; i < locationTo.length; i++) { + data.result.elements.push({//将坐标存入 + distance: Utils.getDistance(result.latitude, result.longitude, locationTo[i].lat, locationTo[i].lng), + duration:0, + from:{ + lat: result.latitude, + lng:result.longitude + }, + to:{ + lat: locationTo[i].lat, + lng: locationTo[i].lng + } + }); + } + var calculateResult = data.result.elements; + var distanceResult = []; + for (var i = 0; i < calculateResult.length; i++) { + distanceResult.push(calculateResult[i].distance); + } + return options.success(data,{ + calculateResult: calculateResult, + distanceResult: distanceResult + }); + }; + + Utils.locationProcess(options, locationsuccess); + } else { + var locationsuccess = function (result) { + requestParam.from = result.latitude + ',' + result.longitude; + wx.request(Utils.buildWxRequestConfig(options, { + url: URL_DISTANCE, + data: requestParam + },'calculateDistance')); + }; + + Utils.locationProcess(options, locationsuccess); + } + } +}; + +module.exports = QQMapWX; \ No newline at end of file diff --git a/common/sdk/qqmap-wx-jssdk.min.js b/common/sdk/qqmap-wx-jssdk.min.js new file mode 100644 index 0000000..b8fbad4 --- /dev/null +++ b/common/sdk/qqmap-wx-jssdk.min.js @@ -0,0 +1,3 @@ +var ERROR_CONF={KEY_ERR:311,KEY_ERR_MSG:'key格式错误',PARAM_ERR:310,PARAM_ERR_MSG:'请求参数信息有误',SYSTEM_ERR:600,SYSTEM_ERR_MSG:'系统错误',WX_ERR_CODE:1000,WX_OK_CODE:200};var BASE_URL='https://apis.map.qq.com/ws/';var URL_SEARCH=BASE_URL+'place/v1/search';var URL_SUGGESTION=BASE_URL+'place/v1/suggestion';var URL_GET_GEOCODER=BASE_URL+'geocoder/v1/';var URL_CITY_LIST=BASE_URL+'district/v1/list';var URL_AREA_LIST=BASE_URL+'district/v1/getchildren';var URL_DISTANCE=BASE_URL+'distance/v1/';var EARTH_RADIUS=6378136.49;var Utils={location2query(data){if(typeof data=='string'){return data}var query='';for(var i=0;i + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/components/UserTab/UserTab.vue b/components/UserTab/UserTab.vue new file mode 100644 index 0000000..5de086a --- /dev/null +++ b/components/UserTab/UserTab.vue @@ -0,0 +1,117 @@ + + + + + \ No newline at end of file diff --git a/config/api.js b/config/api.js new file mode 100644 index 0000000..e1cc984 --- /dev/null +++ b/config/api.js @@ -0,0 +1,10 @@ + + +const http = uni.$u.http + +// 隐私政策 +export const getAgreement = (params, config = {}) => http.post('/util/manage/getAgreement.do', params, config) +// 验证码登录 +export const loginSMS = (data) => http.post('/account/manage/login.do', data) +// 登录发验证码 +export const getLoginCode = (data) => http.post('/util/manage/getLoginRegistCode.do', data) diff --git a/config/request.js b/config/request.js new file mode 100644 index 0000000..9e7c0a2 --- /dev/null +++ b/config/request.js @@ -0,0 +1,52 @@ + +// 此vm参数为页面的实例,可以通过它引用vuex中的变量 +module.exports = (vm) => { + // 初始化请求配置 + uni.$u.http.setConfig((config) => { + /* config 为默认全局配置*/ + config.baseURL = 'http://121.41.97.244:8090'; /* 根域名 */ + config.header['content-type'] = 'application/x-www-form-urlencoded; charset=UTF-8' + return config + }) + + // 请求拦截 + uni.$u.http.interceptors.request.use((config) => { // 可使用async await 做异步操作 + // 初始化请求拦截器时,会执行此方法,此时data为undefined,赋予默认{} + config.data = config.data || {} + // 根据custom参数中配置的是否需要token,添加对应的请求头 + if(config?.custom?.auth) { + // 可以在此通过vm引用vuex中的变量,具体值在vm.$store.state中 + config.header.token = vm.$store.state.userInfo.token + } + return config + }, config => { // 可使用async await 做异步操作 + return Promise.reject(config) + }) + + // 响应拦截 + uni.$u.http.interceptors.response.use((response) => { /* 对响应成功做点什么 可使用async await 做异步操作*/ + const data = response.data + console.log('response') + console.log(data) + // 自定义参数 + const custom = response.config?.custom + if (data.code !== 0) { + // 如果没有显式定义custom的toast参数为false的话,默认对报错进行toast弹出提示 + if (custom.toast !== false) { + uni.$u.toast(data.message) + } + + // 如果需要catch返回,则进行reject + if (custom?.catch) { + return Promise.reject(data) + } else { + // 否则返回一个pending中的promise,请求不会进入catch中 + return new Promise(() => { }) + } + } + return data === undefined ? {} : data + }, (response) => { + // 对响应错误做点什么 (statusCode !== 200) + return Promise.reject(response) + }) +} \ 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..4f59e28 --- /dev/null +++ b/main.js @@ -0,0 +1,37 @@ +import App from './App' +import Vue from 'vue' +import store from './store'; + +// import config from "./utils/config.js" +// import {storage, goPage} from "./utils/utils.js" +// Vue.prototype.$config = config; +// Vue.prototype.$goPage = goPage; + +import './uni.promisify.adaptor' +Vue.config.productionTip = false +App.mpType = 'app' + +// main.js,注意要在use方法之后执行 +import uView from '@/uni_modules/uview-ui' +Vue.use(uView) + +import tabBar from "components/UserTab/UserTab.vue" +Vue.component('tabBar',tabBar) + +const app = new Vue({ + ...App, + store +}) + +require('./config/request.js')(app) + + +import utils from "@/common/js/utils.js" +console.log(utils) +// 自定义工具 + +Vue.use(utils,app) + +app.$mount() + + diff --git a/manifest.json b/manifest.json new file mode 100644 index 0000000..72ac63f --- /dev/null +++ b/manifest.json @@ -0,0 +1,100 @@ +{ + "name" : "recruitStudent", + "appid" : "__UNI__BD23957", + "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" : "wx2d71605af3b620e6", + "setting" : { + "urlCheck" : false, + "es6" : true + }, + "usingComponents" : true, + "permission" : { + "scope.userLocation" : { + "desc" : "查询用户地理位置,推荐本地驾校,提高用户服务" + } + } + }, + "mp-alipay" : { + "usingComponents" : true + }, + "mp-baidu" : { + "usingComponents" : true + }, + "mp-toutiao" : { + "usingComponents" : true + }, + "uniStatistics" : { + "enable" : false + }, + "vueVersion" : "2", + "h5" : { + "devServer" : { + "port" : 8000, + "disableHostCheck" : true, + "proxy" : { + "/api" : { + "target" : "http://121.41.97.244:8090", + "changeOrigin" : true, + "secure" : true, + "pathRewrite" : { + //使用代理; 告诉他你这个连接要用代理 + "^/api" : "" + } + } + }, + "https" : false + }, + "router" : { + "mode" : "hash", + "base" : "/h5" + } + } +} diff --git a/package.json b/package.json new file mode 100644 index 0000000..6b8150f --- /dev/null +++ b/package.json @@ -0,0 +1,15 @@ +{ + "name": "recruitStudent", + "version": "1.0.0", + "description": "", + "main": "main.js", + "scripts": { + "test": "echo \"Error: no test specified\" && exit 1" + }, + "keywords": [], + "author": "", + "license": "ISC", + "dependencies": { + "uview-ui": "^2.0.36" + } +} diff --git a/pages.json b/pages.json new file mode 100644 index 0000000..425f69c --- /dev/null +++ b/pages.json @@ -0,0 +1,104 @@ +{ + "pages": [ + { + "path": "pages/tabbar/index/index", + "style": { + "navigationBarTitleText": "首页", + "navigationStyle": "custom", + "enablePullDownRefresh": true, + "backgroundTextStyle": "dark" + } + }, + { + "path": "pages/tabbar/mine/index", + "style": { + "navigationBarTitleText": "", + "navigationStyle": "custom", + "enablePullDownRefresh": true, + "backgroundTextStyle": "dark" + } + }, + { + "path": "pages/tabbar/learnCar/index", + "style": { + "navigationBarTitleText": "", + "navigationStyle": "custom", + "enablePullDownRefresh": true, + "backgroundTextStyle": "dark" + } + } + ], + "subPackages": [ + { + "root": "pages/userCenter", + "pages": [ + { + "path": "login/login", + "style": { + "navigationBarTitleText": "登录", + "navigationStyle": "custom", + "enablePullDownRefresh": false, + "backgroundTextStyle": "dark" + } + }, + { + "path": "login/loginByPhone", + "style": { + "navigationBarTitleText": "手机号登录", + "navigationStyle": "custom", + "enablePullDownRefresh": false, + "backgroundTextStyle": "dark" + } + } + ] + }, + { + "root": "pages/other", + "pages": [ + { + "path": "webView/webView", + "style": { + "navigationBarTitleText": "", + "navigationStyle": "custom", + "enablePullDownRefresh": false, + "backgroundTextStyle": "dark" + } + } + ] + } + ], + "globalStyle": { + "navigationBarTextStyle": "black", + "navigationBarTitleText": "学车小程序", + "navigationBarBackgroundColor": "#F8F8F8", + "backgroundColor": "#F8F8F8" + }, + "uniIdRouter": {}, + "tabBar": { + "color": "#999999", + "selectedColor": "#218DFF", + "backgroundColor": "#FFFFFF", + "list": [{ + "pagePath": "pages/tabbar/index/index", + "text": "首页", + "iconPath": "static/images/tabbar/btn_shouye_nor.png", + "selectedIconPath": "static/images/tabbar/btn_shouye_cli.png" + }, + { + "pagePath": "pages/tabbar/learnCar/index", + "text": "学车", + "iconPath": "static/images/tabbar/btn_xueche_nor.png", + "selectedIconPath": "static/images/tabbar/btn_xueche_cli.png" + }, + { + "pagePath": "pages/tabbar/mine/index", + "text": "我的", + "iconPath": "static/images/tabbar/btn_wode_nor.png", + "selectedIconPath": "static/images/tabbar/btn_wode_cli.png" + } + ] + }, + "easycom": { + "^u-(.*)": "@/uni_modules/uview-ui/components/u-$1/u-$1.vue" + } +} diff --git a/pages/index/index.vue b/pages/index/index.vue new file mode 100644 index 0000000..74eb186 --- /dev/null +++ b/pages/index/index.vue @@ -0,0 +1,60 @@ + + + + + diff --git a/pages/other/webView/webView.vue b/pages/other/webView/webView.vue new file mode 100644 index 0000000..61d9919 --- /dev/null +++ b/pages/other/webView/webView.vue @@ -0,0 +1,27 @@ + + + + + diff --git a/pages/tabbar/index/index.vue b/pages/tabbar/index/index.vue new file mode 100644 index 0000000..7fdd9a0 --- /dev/null +++ b/pages/tabbar/index/index.vue @@ -0,0 +1,404 @@ + + + + + + diff --git a/pages/tabbar/learnCar/index.vue b/pages/tabbar/learnCar/index.vue new file mode 100644 index 0000000..612e833 --- /dev/null +++ b/pages/tabbar/learnCar/index.vue @@ -0,0 +1,30 @@ + + + + + diff --git a/pages/tabbar/mine/index.vue b/pages/tabbar/mine/index.vue new file mode 100644 index 0000000..05d501f --- /dev/null +++ b/pages/tabbar/mine/index.vue @@ -0,0 +1,31 @@ + + + + + diff --git a/pages/userCenter/login/login.vue b/pages/userCenter/login/login.vue new file mode 100644 index 0000000..ea765d1 --- /dev/null +++ b/pages/userCenter/login/login.vue @@ -0,0 +1,71 @@ + + + + + \ No newline at end of file diff --git a/pages/userCenter/login/loginByPhone.vue b/pages/userCenter/login/loginByPhone.vue new file mode 100644 index 0000000..b700bce --- /dev/null +++ b/pages/userCenter/login/loginByPhone.vue @@ -0,0 +1,187 @@ + + + + + \ No newline at end of file diff --git a/project.config.json b/project.config.json new file mode 100644 index 0000000..fa74469 --- /dev/null +++ b/project.config.json @@ -0,0 +1,28 @@ +{ + "appid": "wx0820ae1a0b635ae2", + "compileType": "miniprogram", + "libVersion": "2.32.2", + "packOptions": { + "ignore": [], + "include": [] + }, + "setting": { + "coverView": true, + "es6": true, + "postcss": true, + "minified": true, + "enhance": true, + "showShadowRootInWxmlPanel": true, + "packNpmRelationList": [], + "babelSetting": { + "ignore": [], + "disablePlugins": [], + "outputPath": "" + } + }, + "condition": {}, + "editorSetting": { + "tabIndent": "insertSpaces", + "tabSize": 2 + } +} \ No newline at end of file diff --git a/project.private.config.json b/project.private.config.json new file mode 100644 index 0000000..c4be9c3 --- /dev/null +++ b/project.private.config.json @@ -0,0 +1,7 @@ +{ + "description": "项目私有配置文件。此文件中的内容将覆盖 project.config.json 中的相同字段。项目的改动优先同步到此文件中。详见文档:https://developers.weixin.qq.com/miniprogram/dev/devtools/projectconfig.html", + "projectname": "recruitStudent", + "setting": { + "compileHotReLoad": true + } +} \ No newline at end of file diff --git a/site.config.js b/site.config.js new file mode 100644 index 0000000..e2bc6da --- /dev/null +++ b/site.config.js @@ -0,0 +1,12 @@ +const VUE_APP_PLATFORM = process.env.VUE_APP_PLATFORM; +module.exports = { + APP_API: VUE_APP_PLATFORM === 'h5' ? 'http://121.41.97.244:8090' : '', + APP_HOST: VUE_APP_PLATFORM === 'h5' ? '' : 'https://www.jaxc.cn/api', + TEMP_HOST: VUE_APP_PLATFORM === 'h5' ? '' : 'http://121.41.97.244:8090 https://www.jaxc.cn/api', + ADD_API: VUE_APP_PLATFORM === 'h5' ? '/addApi': 'http://121.41.97.244:48084', //http://121.41.97.244:48084 + APP_NAME: '', + VERSION: '1.0.0', + gaodeMapUrl: 'https://webapi.amap.com/maps?v=1.4.15&key=4545202996c625152b7f2c1aa0ffb8ea&plugin=AMap.DistrictSearch,AMap.CustomLayer,AMap.MarkerClusterer', + locationIcon: 'http://3dtest.hzhuishi.cn/images/location.png', + AThreeFace : true, //是否启用人脸识别 +}; diff --git a/static/images/bigImg/index_banner.png b/static/images/bigImg/index_banner.png new file mode 100644 index 0000000000000000000000000000000000000000..3ba02e294b30ec5482a61b3ab463dd4e31569d29 GIT binary patch literal 298852 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

Ku65*;DOKm2VO|V4JSzdI|L^|7Ty;c-U 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 z®Xlv}4Xv@k$E=5pda5L5(~WWTqvylsn%5K& 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 Ef+dTUiU0rr literal 0 HcmV?d00001 diff --git a/static/images/index/dingwei.png b/static/images/index/dingwei.png new file mode 100644 index 0000000000000000000000000000000000000000..48ea4dafbe321aa47463b633ae9e5c62327f766f GIT binary patch literal 1015 zcmeAS@N?(olHy`uVBq!ia0vp^Qb4T6!3-qd>Qrk1DaPU;cPEB*=VV?2+2sK~A+A8d z|D%BJA)wA8vlkfjH6=lQ!3>N{%q(nN+`IyULc$_q;u4aoYU&!ATH3mL`UXbErsfuw z);9JIjvk&~A)(PRvGECsNonaBnOS+ol~pwj&8=~M1^7Y&IA3uNn{`2?W>*``*U{YA- z>Eak7A-VP7>-g?OhT{+4SB0IQb>XLv%Mv3mzJ=S`UYLk24e)gF%?-0P`~JSa+&+8$ z)=>RDg|UB{f3bVtZg0Qc{r&aIl7Cn8MJx4RYZMzVy>r{6SmR2~^H{%?(onvsL2Lf)Qikt^?BNQ%Z~EEl`KBy81(op*B`YtFGB-Eb(fm{Z%PT4Cut ztBC1m*Bc02Gz$CC{V98PkWs_dH5?zJ_&26~-6@*)HjCx;M4-3 zMfAignG0)8Yu0UwC_TkAZ&jmN?xWocY}aH}9^f}+JUE4ILsHbCtV`tyj*BDwx0LIb z7)~>7I%2&nMStOR+g+UhWj#@!Rlo@kajm<(};umQ8umvSir@(>Jr@ zw7$&x%f_`RiZ@7Y$0`l?JG#BWX))1yu78icUbN)2@!u&v*?Zd-%_{XRK6CeijqB%I z1)7&9U6Wu<_Sznhc;X4$2DYNK4q>$^JDI|bXFZr=`S#nFH(7m`=d>6}s>+;uaK^)! zFI`&Z$^X?^IeM2Pj&59`mdKI;Vst0Orz{ AA^-pY literal 0 HcmV?d00001 diff --git a/static/images/index/ic_baoming.png b/static/images/index/ic_baoming.png new file mode 100644 index 0000000000000000000000000000000000000000..250e3abdc95d4d607c4418da7c2aa1fe2aa69a9c GIT binary patch literal 2738 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 literal 0 HcmV?d00001 diff --git a/static/images/index/ic_jiaxiao.png b/static/images/index/ic_jiaxiao.png new file mode 100644 index 0000000000000000000000000000000000000000..ec295ea35f60dd3a457c5c16a8ad9f5d0a339e5d GIT binary patch literal 2310 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 literal 0 HcmV?d00001 diff --git a/static/images/index/ic_lilun.png b/static/images/index/ic_lilun.png new file mode 100644 index 0000000000000000000000000000000000000000..72c6922eda3488edd4536c2125d47b3aa78a376f GIT binary patch literal 2159 zcmX|>c|6qX7stoa<`p-oUtP-W`lV5_l+v}uU_vx9V{Jw>WWAP#VHg^bEMqBU`QCn1 zH%4-e3f;(_Z8DZ&tYg<;60(jh&+n^#zk6Qq=bYz!o^zgmo+a)o#zay=Rsw-QNSc`% zW8p~H9=pY0&po5y1qYD;tcf9l*?L5PK#0D%YGI9rMeu(c9tJ|;HeXl4>MB@U0}F7v z0hYd}D{Ej$xIJGMg5|aUd01J2#g%P+d-Wf_7jIX7Z(00D|DJAd^1UARKlst8p`oFv zsd+(5_ctv)9o-+MXM!P^SQ5;w2o^9{!WAq5gCkhNSQD;V6Rd0qSQuLZ&X!2O>v8K@@5b z?4zJy3N<(iqC`OOV*Ro$Sb2h{X}+8$8b3+nnn zLsMG=tF3_t8hL;<09b>dnagh;0_-8sIs)280H?E`!-e5-MgeCGbdCe=IOzTay7{1Y z0`$R50^Z0pZ*-bB1qR2ahXi2gGZ>i$<1>Ii3;1(jViruyfvKYJpe`4k5Z@*KYY^3W}<_MwiTNoXBBe;o&hcu}PWFo--I#^{l@B z{_!uf3(G6Qwe`)d5Bl;*1Y(D}nK8=RW2oehIHyPG!;MZNC<6ogPyNnX;-x{q6r7%W zpYRv=P4n~Oh0oSHr&ZddRGKW*Riq806jbnWiAttu1@-F7Um~)JTgek4!tfgoZf?VR z6B}#gi@F+Zvwp*E@8@(D+3b9!oxArWC!NQieG^d7J@92OT}xA2*LaUON}5p|b~bYJ z9M1SY?c;L=+=>0FGB^d3wbOdqH$>;F@80EHG)p#9J+@QHRDQf9(EerW;krjZOt6gMXs#__Vm;21(Vi8IL8L! z3Z>6pT)uQeXXTytIWMG!zCUUIVdoCBiS&oN7G>O|IHo1Y;mS=Bq!71+ovh*ieTDIv z9iY~}2pLcKb$XMU@pGXgEqIam3@6KWlBV1BE(!nfE#W2qsrIkyw?k)r*aS8tK%b?R zijFXalK#646miF}2Q6)W#J;q$4Z2HO^>=XaJejupZF{>BLeb*Rff60p$=CG= zWqtU}B8Wj!37Ib9qjCD7U#2)Nh8~;JS--_S9h)c2pKok#w)~HhofhV#{yPs2DmS-; zvntD^=pM8jk1zbzn^=#a5AwQ6^_^2;$S2BM_BJ+Mc{qx*86=@@LoU`1O%AAEGF&y6c z-eG0G_aQypMcAa0CbvoolgOw0-Qwb8Wse9&2JmzK=h!sb51&b8`3{ir3g;89lYH4%5&}`}W9#nHha8=qL3m z$0Ba=^uKs->GHt7ay1FI=5)bpgtN%9&VWioaICf}Dt+VHWZR?GR?LA;pIq~!@ihI*e#wAHkRJ z?b6Z`0go!MbwXeHsUeuY(*x!8dNMe1G2iZqyMyabb_2&P;#a=ihzPIEj(yTv!4c+O z^7C^Vb~;s2F(u5CE(vqYXq}hgRM6y{3)Q9h+3l$ax%G{WLZ`+LW>xXCp8TB=5-5ol z%oY#fyS_Y(+WOhGsd2@Lfhd+pp=}lOTl2-l#DLXK>%i&SE~>5tUR;KGvh4_^k;OYz zhE87Jl~oR5-pNMGsOI6&v=gOhd1UE;AjCU5MiBCNQcyY&y(7#=={ z`+hw?f8_ex8kG?5>(snsS>Ldz@+!51dn=@*-QT)uJH<2=XN>Qyl$zH+l`e@7w>r=Z Pf4c}XG{%@|=p6Z9sZzgl literal 0 HcmV?d00001 diff --git a/static/images/index/ic_peilian.png b/static/images/index/ic_peilian.png new file mode 100644 index 0000000000000000000000000000000000000000..cfe1b0419c78232436a6f28a79e60147682c5213 GIT binary patch literal 2335 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 literal 0 HcmV?d00001 diff --git a/static/images/index/img_5@2x.png b/static/images/index/img_5@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..1c978b317e68d0351550cd2147fdba7f709f37bf GIT binary patch literal 2798 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 literal 0 HcmV?d00001 diff --git a/static/images/index/scan.png b/static/images/index/scan.png new file mode 100644 index 0000000000000000000000000000000000000000..e77ee599bbb7b64a2ded7afa9e4fbcf8a03e90c6 GIT binary patch literal 891 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I3?%1nZ+ru!7>k44ofy`glX(f`Tn+FEaRt)< z!QkDycb`6e`ts$=>({R#A`tTJ+qV$LZ!mzcfBg9I_3Kxl79ap>`TqSoP#nmBkU$1d z7f|Zs$B#h9n>TNO;vYVI0GbaZAyPnDAR8zS;l6+W9w-7-2_%64E)HY^6+i&Q9JmOO z3zGrS5G_Cw2$;l*jsiXARubeF%)rRTFD#*EY+`C|VQFRWr+1WK=(#+XQSFT*YZRfs&hmN1UaPiXhoA)0+di?6m+jk#-{QSFhUwbJ70~3>{ zi(^Q{;kDDBmo+&Ev|f)86Yzesf*8C1!H!S53Tn5>Z=K?#q{gw)#WAz@+vchpnOpXo#G9(h-F~q2SytR9 zYYzS?+y5%11-;2X-6;OhuJW$;qjr_*?3>?p>`cszerQT2%T&qCzjwvr57WABp7y`~ z9y98eoe*m_YdDc_pUkrPit(j?EP(yW)|Ps<|zJudfuwpc0%O;w6LA+wimVk zKly)cUVY(P2OYn+v#;3Ao!Tt6{rR(RQSx53yEnS6%kW=n{P)t)1i!2O%qySh7EPQj za&qoeF3SMXw7Qk`+F6+`Pi|(P6L!*ET|9S<`Ce(0*V7LAe9BWeyXM#a=X<3;{8sSl zeevE;<+$02iNdko))F`N<*UIl4BKPQox0YGaDpSe71BOmOPx? zc;JV@HfQ&?bGjVOtcx=^+;=cma6a&5k$WssH}OEYFXzvHwn-niTywGX{|QWA44$rjF6*2UngA+U2FL&a literal 0 HcmV?d00001 diff --git a/static/images/index/searchIcon.png b/static/images/index/searchIcon.png new file mode 100644 index 0000000000000000000000000000000000000000..9337fb1c3da70e3c80418767936c3508d330c888 GIT binary patch literal 737 zcmeAS@N?(olHy`uVBq!ia0vp^8X(NU3?z3ec*FxK#^NA%Cx&(BWL^R}X99deT!Hle z;R38CJ>&rT$GIfPFPMRmiJ6s+i-(tAKu}ClT2bBI!_&t%Bs4rJIVH8Ax}mY9wSB_G zNt5R+UcO@ehK-w#9y@X2`i;8}A3c8Z;^nK?KYsoBr{Vr^J}}5iJY5_^EKVPtk{#US zAkrq@XyWDlc~aCvUJc*N>zX=_eg6MHSYC>In(xfCS?9KI{`}^R<@R3P0R=WMGGkcxK(N!ytY^me<5w|vJ*3?_F6Samt-;2MSddS?=*zPsDDV2bV@k%qaKESuJOb?Lcy zK7IY*wN}9Qh4W6xez-FKLE~hP=K;aZrZdzp320?)U`kZF+pv<&_r@Q#Gk;6orQNCh zv?KH2^sIx^GY|H1SZQrgu3fl6Q6p{VA{&uIT#2)0rsZ-iOxYO5quhDL?dCzzBnF@0 z_2SD9C}gkW6e!tu_9|yX=c%@4iHhRYsfRVf@2U#$n<%>c{`k#hm9dY0!v@tBf$0Y> zuT0q(SG4qt-S55371P`g=2UclE!!Pe(R4;gpQ;bI-$ntAWwU;OXk;vd$@?2>@$}y+;55 literal 0 HcmV?d00001 diff --git a/static/images/index/我的@2x.png b/static/images/index/我的@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..653ec3d1cf8710deadb7585c8b90b99ef586033d GIT binary patch literal 981 zcmeAS@N?(olHy`uVBq!ia0vp^79h;Q3?%1AoYnzSjKx9jP7LeL$-D%z`2u`GT!Dgc zU~FuxrKP2ypkQffsi&t0WUH&Io12>h#SIJ$bai!s;$~)MKrT=gLIP!tjEsP?K++Hl zOifKqOiX~XKoKAVLP8ioHUvPpKs68m7ld$;wF5=qT)1L1?GSMw2{Z@JMrOdp;S4mz zaPgz-GK_%15m^%C7tFxO#LUXZ!O6|T%f~MuC?qT*CMhGMqN=HHXYUyh6cQdAmynp2 zU07OKQ&->6(AL{Oea6gHYd3G(v2)L!1BZ{CIC=Kmg$oyN-M;_i#mm&5bt5tT;H{_@5q!=Wl*u;U5`dR;$$MMCvt!dpTkDhh%D9Rm+SfRCg!E`he?r{&G|V(?GK%;7f!d_Vs?5J>*pP9Rt8thnr{hM8OG`_ zSQo@l8qv{}-?Tc+O3$Qq1OGIs49EBtw&i zFww4WMql^`qssNq3)FnuH5i2VsT^GY!9$B7u;?hOO;0g@LfjNDJ+)897U#QT{u%G- z%du7a6cKs%Kj(3!3Z8$qm61oeZ?<(W53lyud*B+Sczn&{W9mC>_Wt~RYWegJf!>?@ zc0|6^Gq5y#cgM_6tzr4{S)qsIzT0)|tlvL9v7giVoc!O8E#GwJr=G~xeQ@pKZBGH8 zdp3G`8H}rZmw$SG>&~~{(%)hG{(hKnI&|}~sju!!OxPxWa-AVdT=JVg&#&os+MTxd SkFv=D;? zz`?=6*w|Q0OG`yXML|Kq($W&h)zi}him0orTU%S3o0|hgbai#LwYAO6%z$h|Lqnhf z9UUE0Q&S*UUtb@{1u6q_AqtF)jDQRv2~-IbG%+y&vJDIjAPk@&P!~iNC<0`|#eocD zHc$;*1j2@B1hUZ>KrTcC!hn+yl@Ko61UMJSKo$hr1rdQLK$C@YA!qVEt!O7Xx%g4_@C^#f6JR&MOCO#oC zB{efEJFlp?yt2BcwywURv8lPGt+T7Aw{PN<>9gm|ows1&lI6=+tX#c*^OmjKckJ4; zcmL62Cr+L^edgTx^A|2(yMFW5tvh$`KX~-`>GKyaU%h$z?)}G4pTB(l_Wj4tU%&tS z{nwi3B*?(P6zu8Z7~*mK>9ovXVMl>B>kclBrbn$Vfd_?I_Us6GBx+;G!mPDuQO6PO zdmc6nPXhuSd)cKPH=X=!|91jo+1i}cC4Z)U58fa8_sy3tU#_h2;97a(ZKju2|L!09 zYfL(pH7!j$m%2draB9@~h7J2wD_83NGmtROW?OiF<#n!fdzR(DnG%=h3C~TO@oIwf zpI>jkH%GV1Wn5#QeQ@z1wTw&bzBgAgggHH3P zD&Kg%{ZZPxl^h?kc6W5>?D!yEvF~Qznb$px{nw7&-Ib?MR@&Lok@J>WEqe2t3$p7Q z=kvZ)QhH?ZhxNw>e;1ca{%wus)^AUoDHcA^ty{SLk=lW~OoD=%H5^CQ>27m2w`D%| zdCKj-d=)Ft926)x&KFZAJ3}WRua@6n)tPOK3y!y03ozNOJUOHMm$-q1zRm9-5e_l6 zBUkLEt>Tnp;JN?jhie6Y&+KC-RkEKK-Clg)v67%*WF@!42CIif*EX+`W8EiP*wJBe zC%$o`ZD)D;6(iZ{jCt#Y1Sf8(c6ifu*O6!D^Fl#`sKsa45>^~4JJIjXv`qSfWajy~ z_kK6OPdEDadGW0I_PgI09oD$~+~;QRg%$j>HU&TA{Ltht|D`d!_3MR&{ACV%xx5vo zEI$3TWr54lzC@0cSA{bfCCYquu9E1fc>PT+bZ$9IQs^|lm#2%E))~g;oJn14yL#K& k*KR?jTd$@qy|Dg={PnPDCK5}-=YWbpPgg&ebxsLQ05k#a0{{R3 literal 0 HcmV?d00001 diff --git a/static/images/index/首页@2x.png b/static/images/index/首页@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..643278585bc904474687dd6f5fbb376872ef326b GIT binary patch literal 1205 zcmeAS@N?(olHy`uVBq!ia0vp^79h;Q3?%1AoYnzSjKx9jP7LeL$-D%zPXzdcxB>+k z82&Rf{AXANCTD`lN&giZ{!0PT%>Uxu|3x}qi*)`Mn)IK){eyJdf05SzvYr2>I{r(y z{gCecFV*u?vhycUnRv%f>8@YWUH>J!eo3_dlJ5R3(e+!R{kKH-Zy;N$>$fD3+wnu9 z>xV?gABpZi;$1()yZ%UZ{sC&2?EE7EL>)gtB0$s)6#OIE0T%E212j#d^OscTFQCaF z)bUFa$nN|L6oCjzbp8e+sSc1WAd5PGOLl-npn^ay&n?APbnaRCkAX2cy(Gvl zn1PXrnT3^&or8;uo0peQP*_q*PEAciQ%Bdpz{u3n-oe4i&BN2n+uO${ASfs#EIcwQ zIwm$QAu%~6Ej=S6D=)vew5+V6vZ}tJv8koCt)sKEtE;=Wf8xYRlc&#|J9plKMQhh@ z*|u}{o;~~b?>}_t$kAgbPMkP%;qsO1H*ej(bN~K>$4{TXc=_thyN@3~fBE*~=da&? z{{H*7uU7suFxma^ba4!kkbHaacXW3k1N(>dooe4tw@gVi@m$wBv1P(*rzdqYxw1VH zom8jK3fy@5`~A{w-}k)FE|)xi)4%zF<&|%N z5>ZU8uJRfw;f^m^Th9jEI@I(xVC9*~Jl@u%&j=%vDUGVG&hZJImoA7#h`9xu zd{~>zn4_JUz#CI4@@ui}toxK0!x<3&v{raykxG(w!>lnW~Xp$+nTInDAusH?~v(@Yrz?9 zk2Sny8XsGcI#L$(3CGu6 zYhOGk^~uGTZEelZ*)nc&z0^AEqHuS~%*hkpT{@%c!JqNWY>Bl=G4rL;SuYz(CZ_2* zWG$X)<{`Lifpa)ZkZtURg{$R)cx5wREP1)2@yYxJx@>bLa)s+|NEL5c!gPUiNybUj tL!s6du12!l4*CM#ljlgSIXb8QDgR8)zY~gei{64t98Xt2mvv4FO#tC&N)rG8 literal 0 HcmV?d00001 diff --git a/static/images/logo.png b/static/images/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..415dc986d46f58cfee8cbcb27430949ac64055ef GIT binary patch literal 10347 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 JPDHLkV1hR~bBF){ literal 0 HcmV?d00001 diff --git a/static/images/tabbar/btn_shouye_cli.png b/static/images/tabbar/btn_shouye_cli.png new file mode 100644 index 0000000000000000000000000000000000000000..5e98f5e90f2ad5118a64ba60cb28732a6131dc10 GIT binary patch literal 1736 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 bxEc5gwkj5+z`pC^00000NkvXXu0mjfX3ui8 literal 0 HcmV?d00001 diff --git a/static/images/tabbar/btn_wode_nor.png b/static/images/tabbar/btn_wode_nor.png new file mode 100644 index 0000000000000000000000000000000000000000..23fae10bbb57a16869be702ce63c13f5d5bdb1fc GIT binary patch literal 2106 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 literal 0 HcmV?d00001 diff --git a/static/images/tabbar/tk.png b/static/images/tabbar/tk.png new file mode 100644 index 0000000000000000000000000000000000000000..5d35ee78d6bbb69889fea2887753aaff0437fb35 GIT binary patch literal 929 zcmV;S177@zP)Px&TS-JgRA@u(noVmIK@f(k#+VQgO^)6d1tEcSx6z=2qW%GMQ$f6_2f>41L_wp6 z#Df7ZA|CYM=SlMe3<{#6p{tKMh-dYrn24Bl*^-X4GA=u_y**=QH<>vtOjXVM)LYZ@ zv4gNmHe4l~P=Ky9rwd05M?16wiK9C_JiMt|txhuYJ^)zn%gD@CMEr<|kC}O#h<^Ci z^396{wUCucmth`3X0{o3mYf06PR3n z&o3@6zMGqy`<|4)?4TnfBfaHv`2_%M^8t&=SwO_ITI<_!HGM%*2yqYqN)BQ_7-Jp* zz~6JeR4VoK_4Q3L^DzKe>rlfbgqeBN7&F}{*b7t$aR?C~xE$TaF!Nz!%)|P4Ddk20 zunikT#C6QNHE4ZzVh+1pCwe3J%8H-QE2qj42aQPiCODd1*#B3&3a% zDP_}3q1WhUEi`St0yNUW!cmuTNIP;_<-2Gt9ChhZR*s~t^q`i&2XpE^nxc|f3v5q!?95=>Xi944&60}uF3!fXP zQfj{yptZIS)y|s_WNx5R$~^$^JbXM$9Jy!*d?9lK6+-Mn#FsS)`@%Zu{IYRrAaer^ z4?GrmwP{z(SlG0Xxq^lVx2xo(BxkdL%pEioa18+Li|eH=>TFh!Z2=mJxB&pCqOkUN zk+!w{gSU&tg`m^Y7z zGeHoH#X&CJTRRr(_^<-B<1MTMC>$*u?a&Uan$i6Y9e`L@V{va|00000NkvXXu0mjf DhHa_k literal 0 HcmV?d00001 diff --git a/static/images/tabbar/tkActive.png b/static/images/tabbar/tkActive.png new file mode 100644 index 0000000000000000000000000000000000000000..8a93d5b44160e4f138471d6f55a3b9a8555a9a7f GIT binary patch literal 826 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 literal 0 HcmV?d00001 diff --git a/static/images/tabbar/zx.png b/static/images/tabbar/zx.png new file mode 100644 index 0000000000000000000000000000000000000000..3b10903cfbd969b08c8a0d7aa806c96393577120 GIT binary patch literal 587 zcmV-R0<`^!P)Px%1xZ9fRA@u(nmbMdF%X7lqSPP`02Sf@Yb!#6l7<#Kpyv#nfHTko9keu*Afd?K z10X7L07U92gMwI;L|N}-z0TUPxAtScncp+BmJuTPFcMBkpz9Xt6w&A++Uxc9#^dod z5gh@*hGz~KBI0wW)4A&R`|l>(jMAMzjz*(5MBMTWaK;=W`s#MO`zBZ;sFd=7h)#Tl zENnx>N2SzhnXN`pA;fnfS42EiO1=67Eu}mlqL)9LhFa^*x}a1{)LMI)p@k4E8>=G9 zTBOY=I|Y?e9uv_G0Bl!44iNEDDfQ&a8BRfk5T6Xlf^DF+-kAc$EX&RSV7DgxN1o^R z0Pw3e*P#EB<`_GDzOyVlN5ossys|Mwbdl%z-AX~rl2n3`H#th4id zmTow8l;g#L Z{Q@NTS002ovPDHLkV1lFB3#kAA literal 0 HcmV?d00001 diff --git a/static/images/tabbar/zxActive.png b/static/images/tabbar/zxActive.png new file mode 100644 index 0000000000000000000000000000000000000000..b266dd6a0e1c2a5671cd67a79b26e4e3fa4e34a2 GIT binary patch literal 547 zcmV+;0^I$HP)Px$-AP12RA@u(njudEF%-w&8y#|Fjtw<~m_}epNH7@2mq6eMTlfTIBRB+Kf?+Tu zBv=G`0yD*iTbSeyN-k^*VYJ8YwU?H@)7Renz5l=OwU;6U@?apGz@Yz4X;w5iMc2;d z`bQj}N`!5cvgA?%B;pt)+!cg4c|O7?U2IzGP9PruWZ5Oa`B-pN5MomYs|BsJqbmT} za2s+O9d?JU;=U?YE$C_|dUegNDv-p+FU{ggCeTXzP5PncSCqrnvQoGd>jngx^wU z9CXkuF0^#3ooM!cqmFQ~D;666^X0>v7`nZAR0ajmpI%f|m!fDe)+Kp1Ww2A$Wl#ed zU`4qYO>Cs9x|9urSACSS1@sD(Qa8NnqZCk^V~tl`o551%X3(tdg_3ofW1Ujet6~&P zdkJR4z~@m#rTP9V#j9dOQItUqWWacPVMYJ2M!o8z6h*x{rUe5^*)VuzUCI{FKyg)0 zVZ7?v43;uCgYtPa<##8=UN*;Owr)U|H3GSQ6U>FGWIY9OMb2j7$b0T=S3~lS(!lo^ l)IbuQnt~N|N)7|Td;(s+vPkx<0%rgK002ovPDHLkV1nGJ@{j-k literal 0 HcmV?d00001 diff --git a/static/images/userCenter/loginTopBg.png b/static/images/userCenter/loginTopBg.png new file mode 100644 index 0000000000000000000000000000000000000000..1086c92a4dc271a1676d2ce68ca280116f4a0322 GIT binary patch literal 36319 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 literal 0 HcmV?d00001 diff --git a/static/images/userCenter/title_1.png b/static/images/userCenter/title_1.png new file mode 100644 index 0000000000000000000000000000000000000000..4e43a564c77372cb509e678188f3dd35e8aeba93 GIT binary patch literal 8982 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 Iur73U08|YJ=l}o! literal 0 HcmV?d00001 diff --git a/static/images/登录流程切图/__MACOSX/登录流程切图/._btn_1.png b/static/images/登录流程切图/__MACOSX/登录流程切图/._btn_1.png new file mode 100644 index 0000000000000000000000000000000000000000..9d0ad85bbe84f7eb9fd66817616217dcd1dbebad GIT binary patch literal 233 zcmZQz6=P>$Vqox1Ojhs@R)|o50+1L3ClDI}@pd2v@m~Tl5x_AdBnYYuq~ib(YeM-j z3S`;=AQoU?kV?+a)k`cW$Vt`9Nh~fYEly2INi0cK4hV)Sz5t{p85l$n>IzE}ixTrn tGV@XyK5?E(0jU!y`6U9P3-t{QER3wpOp+4~EYpmw1Bz11GE>W~832RDCXE09 literal 0 HcmV?d00001 diff --git a/static/images/登录流程切图/登录流程切图/.DS_Store b/static/images/登录流程切图/登录流程切图/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..49f0b45ae1fe26e25db25160b66de0831db051c9 GIT binary patch literal 6148 zcmeHKyH3ME5S%3`ETu_F6Y0JnQvTo+B?UDfkjQ`{B#Tf$?=GLiC&KIl6l2m-z^=4A zcY8ZNdkXIz09n7@uYfs#hOUT{hOz0o`pB*#qbT-_C7$tw!%cU*8&&_DP;P@32kfxI z8Ncn0E!XtL-ssDBGmd~6Uhqio@Nk(Wi*GEWW=I86fm9$BNCp1A0_@pp&CD@lDv%1K z0$&Q~|Dn(oYhdqazYYdHzU%r_QH^7}OAt%UYhdrl6`DAe=v0X-hB%%15_L7OcXT?$ zcIIFjQdT)4BHlE&am%e@Mz%Dv%2NDFtM@x!tV!Nzq$J vAE&*x(D(FDW381l3=RRDXe+)xt1CKYT@CCVjn2H$iFpuEUD8s4-%#KKFOn!& literal 0 HcmV?d00001 diff --git a/static/images/登录流程切图/登录流程切图/bg_1.png b/static/images/登录流程切图/登录流程切图/bg_1.png new file mode 100644 index 0000000000000000000000000000000000000000..1086c92a4dc271a1676d2ce68ca280116f4a0322 GIT binary patch literal 36319 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 literal 0 HcmV?d00001 diff --git a/static/images/登录流程切图/登录流程切图/btn_1.png b/static/images/登录流程切图/登录流程切图/btn_1.png new file mode 100644 index 0000000000000000000000000000000000000000..fdbfd5d08d646cae869d06b32545304bd2d2eee7 GIT binary patch literal 461 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|Tv8)E(|mmy zw18|52FCVG1{RPKAeI7R1_tH@j10^`nh_+nfC(-uuz(rC1}QWNE&K#jX71_Y7-Au~ zbh2Syvx9)^-tHAUn(r?07UWcv`aW&-9EGV?ot$Z2;^eZ8^mty8ww4T<7QUR&-SEBw=XerDlp zoAZB{WzJ)@&B$G|^|u1YzRu~Xm5Xoeb-5O0eRSR;ja40`Ob1G1{PD z3-goOCdsAjq{p-7YMSF=jvm7qeOJ$4DXs2d;L!=+acYfJ;UnAr(8fkrg+z~ITyxm9 zA96)^uBkM2c0JMBxb@67xiX&_vy3t(O!>{meA{&5&1JjVUj5xaSwPu+<=SLD(e=M( ita#UR@mk%7=YP20N1V3FQvBuw3QA8`KbLh*2~7a<7qy50 literal 0 HcmV?d00001 diff --git a/static/images/登录流程切图/登录流程切图/btn_2.png b/static/images/登录流程切图/登录流程切图/btn_2.png new file mode 100644 index 0000000000000000000000000000000000000000..d5c36eacc6fa9a606254dab776683ff838711be5 GIT binary patch literal 567 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 s95OUafkYqmlSEl)+V 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 SYs}WS&%*SCNx89m_ state.user.userInfo, +// pushMessage: state => state.push.pushMessage, +// currentAdd: state=>{ +// }; + +export default { + pushMessage: state => state.push.pushMessage, + getCurrentAdd: function (state) { + //返回一个函数用于接收 + return function (id) { + let add = state.add.addList.find(item => item.id == id) + if(add) { + return add + }else { + return {} + } + } + } +}; + diff --git a/store/index.js b/store/index.js new file mode 100644 index 0000000..061f5dc --- /dev/null +++ b/store/index.js @@ -0,0 +1,90 @@ +import Vue from 'vue'; +import Vuex from 'vuex'; +import add from './modules/add'; +import user from './modules/user'; +import getters from './getters'; + +Vue.use(Vuex); + +const store = new Vuex.Store({ + state: { + currentSchool: '', + userInfo: {}, + latLng: {}, + + classChooseItem: {}, + pdfUrl: '', + webViewUrl: '', + havePay: 0, //tabbar 页面是否显示报错小图标 + currentMyMsg: {}, + billPrice: 0, //开发票的id + TrainingOrderId: '', //退款流程里的驾校id + bankInfo: { + realName: uni.getStorageSync('userInfo').realName, + phoneCode: '' + }, + chooseCoachItem: { + coachId: '' + }, //报名时选择的教练 + realAuthsuccee: false, + + }, + getters, + mutations: { + // 选择学校 + upDateTrainingSchoolId(state, currentSchool) { + state.currentSchool = currentSchool + }, + // webViewUrl + updateWebVeiwUrl(state, url) { + state.webViewUrl = url + }, + // 更新用户信息 + upDateUserInfo(state, userInfo) { + state.userInfo = userInfo + }, + updatePushMyMsg(state, item) { + state.currentMyMsg = item + }, + upDateBillPrice(state, billPrice) { + state.billPrice = billPrice + }, + upDateTrainingOrderId(state, trainingOrderId) { + state.trainingOrderId = trainingOrderId + }, + // tabbar 页面是否显示报错小图标 + updateHavePay(state, havePay) { + state.havePay = havePay + }, + // 报名时选择教练 + upDateCoachItem(state, item) { + state.chooseCoachItem = item + }, + // 申请退款时的银行卡信息 + upDateBankInfo(state, obj) { + for (let k in obj) { + if (state.bankInfo[k]) { + state.bankInfo[k] = obj[k] + } else { + uni.$set(state.bankInfo, k, obj[k]) + } + } + }, + // 更新经纬度 + updateLatLng(state, item) { + state.latLng = item + }, + + + }, + actions: { + + + }, + modules: { + add, + user, + }, +}); + +export default store; \ No newline at end of file diff --git a/store/modules/add.js b/store/modules/add.js new file mode 100644 index 0000000..d5e9a65 --- /dev/null +++ b/store/modules/add.js @@ -0,0 +1,91 @@ + +// import addApi from '@/api/add.js'; // 引入 + +const add = { + state: { + addList: [] + }, + mutations: { + // 更新广告列表 + upDateAddList(state, list) { + state.addList = list + }, + + // 更新当前广告点击量 + upDateViews(state, id) { + let add = state.addList.find(item=>item.id==id) + add.clicks ++ + }, + + + + + }, + actions: { + // 点击广告 + async addClick({commit, dispatch}, curAdd) { + // await dispatch('updateStatistics') + curAdd.clicks ++ + if(!curAdd.adBannerDO.jumpUrl) { + return false + } + + commit('updateWebVeiwUrl', curAdd.adBannerDO.jumpUrl) + uni.navigateTo({ + url:'/pages/commeWebView/addWebView' + }) + }, + // 获取当前广告 + getCurrentAdd({state},id) { + console.log(id) + console.log(state.addList) + let curAdd = state.addList.find(item=>item.id==id) + if(curAdd) { + curAdd.views ++ + return curAdd + }else { + return {} + } + }, + // // 广告 + // async addPageFn({commit,state, dispatch}) { + // await dispatch('updateStatistics') + // let obj = { + // pageNo: 1, + // pageSize: 30, + // adClient: 1 + // } + // const [err, res] = await addApi.addPage(obj) + // let list = res.data.records.map(item=>{ + // item.views = 0 + // item.clicks = 0 + // return item + // }) + // commit('upDateAddList', list) + // console.log('广告列表') + // console.log(list) + + // }, + // 更新广告点击量 + async updateStatistics({ dispatch,state, commit }) { + let statistics = state.addList.filter(item=>item.views) + console.log('调用更新广告接口') + if(statistics.length) { + let stcsList = statistics.map(add=>{ + let obj = { + "adPositionId": add.id, + "adId": add.adId, + "views": add.views, + "clicks": add.clicks + } + return obj + }) + const [err, res] = await addApi.batchUpdate(stcsList) + console.log('更新广告点击量请求结果') + console.log(res) + } + } + } +} + + export default add \ No newline at end of file diff --git a/store/modules/user.js b/store/modules/user.js new file mode 100644 index 0000000..5af0505 --- /dev/null +++ b/store/modules/user.js @@ -0,0 +1,31 @@ + +import addApi from '../../common/sdk/qqmap-wx-jssdk.min.js'; // 引入 + +const user = { + state: { + addList: [] + }, + mutations: { + // 更新广告列表 + upDateAddList(state, list) { + state.addList = list + }, + }, + actions: { + // 点击广告 + async addClick({commit, dispatch}, curAdd) { + // await dispatch('updateStatistics') + curAdd.clicks ++ + if(!curAdd.adBannerDO.jumpUrl) { + return false + } + + commit('updateWebVeiwUrl', curAdd.adBannerDO.jumpUrl) + uni.navigateTo({ + url:'/pages/commeWebView/addWebView' + }) + }, + } +} + + export default user \ No newline at end of file diff --git a/uni.promisify.adaptor.js b/uni.promisify.adaptor.js new file mode 100644 index 0000000..47fbce1 --- /dev/null +++ b/uni.promisify.adaptor.js @@ -0,0 +1,10 @@ +uni.addInterceptor({ + returnValue (res) { + if (!(!!res && (typeof res === "object" || typeof res === "function") && typeof res.then === "function")) { + return res; + } + return new Promise((resolve, reject) => { + res.then((res) => res[0] ? reject(res[0]) : resolve(res[1])); + }); + }, +}); \ No newline at end of file diff --git a/uni.scss b/uni.scss new file mode 100644 index 0000000..8738726 --- /dev/null +++ b/uni.scss @@ -0,0 +1,80 @@ +/** + * 这里是uni-app内置的常用样式变量 + * + * uni-app 官方扩展插件及插件市场(https://ext.dcloud.net.cn)上很多三方插件均使用了这些样式变量 + * 如果你是插件开发者,建议你使用scss预处理,并在插件代码中直接使用这些变量(无需 import 这个文件),方便用户通过搭积木的方式开发整体风格一致的App + * + */ + +/** + * 如果你是App开发者(插件使用者),你可以通过修改这些变量来定制自己的插件主题,实现自定义主题功能 + * + * 如果你的项目同样使用了scss预处理,你也可以直接在你的 scss 代码中使用如下变量,同时无需 import 这个文件 + */ + +/* 颜色变量 */ +@import '@/uni_modules/uview-ui/theme.scss'; + +/* 行为相关颜色 */ +$uni-color-primary: #007aff; +$uni-color-success: #4cd964; +$uni-color-warning: #f0ad4e; +$uni-color-error: #dd524d; + +/* 文字基本颜色 */ +$uni-text-color:#333;//基本色 +$uni-text-color-inverse:#fff;//反色 +$uni-text-color-grey:#999;//辅助灰色,如加载更多的提示信息 +$uni-text-color-placeholder: #808080; +$uni-text-color-disable:#c0c0c0; + +/* 背景颜色 */ +$uni-bg-color:#ffffff; +$uni-bg-color-grey:#f8f8f8; +$uni-bg-color-hover:#f1f1f1;//点击状态颜色 +$uni-bg-color-mask:rgba(0, 0, 0, 0.4);//遮罩颜色 + +/* 边框颜色 */ +$uni-border-color:#c8c7cc; + +/* 尺寸变量 */ + +/* 文字尺寸 */ +$uni-font-size-sm:12px; +$uni-font-size-base:14px; +$uni-font-size-lg: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; + +// 自已定义的 +$themC: #1989FA, diff --git a/uni_modules/uni-config-center/changelog.md b/uni_modules/uni-config-center/changelog.md new file mode 100644 index 0000000..57dbcb5 --- /dev/null +++ b/uni_modules/uni-config-center/changelog.md @@ -0,0 +1,6 @@ +## 0.0.3(2022-11-11) +- 修复 config 方法获取根节点为数组格式配置时错误的转化为了对象的Bug +## 0.0.2(2021-04-16) +- 修改插件package信息 +## 0.0.1(2021-03-15) +- 初始化项目 diff --git a/uni_modules/uni-config-center/package.json b/uni_modules/uni-config-center/package.json new file mode 100644 index 0000000..bace866 --- /dev/null +++ b/uni_modules/uni-config-center/package.json @@ -0,0 +1,81 @@ +{ + "id": "uni-config-center", + "displayName": "uni-config-center", + "version": "0.0.3", + "description": "uniCloud 配置中心", + "keywords": [ + "配置", + "配置中心" +], + "repository": "", + "engines": { + "HBuilderX": "^3.1.0" + }, +"dcloudext": { + "sale": { + "regular": { + "price": "0.00" + }, + "sourcecode": { + "price": "0.00" + } + }, + "contact": { + "qq": "" + }, + "declaration": { + "ads": "无", + "data": "无", + "permissions": "无" + }, + "npmurl": "", + "type": "unicloud-template-function" + }, + "directories": { + "example": "../../../scripts/dist" + }, + "uni_modules": { + "dependencies": [], + "encrypt": [], + "platforms": { + "cloud": { + "tcb": "y", + "aliyun": "y" + }, + "client": { + "App": { + "app-vue": "u", + "app-nvue": "u" + }, + "H5-mobile": { + "Safari": "u", + "Android Browser": "u", + "微信浏览器(Android)": "u", + "QQ浏览器(Android)": "u" + }, + "H5-pc": { + "Chrome": "u", + "IE": "u", + "Edge": "u", + "Firefox": "u", + "Safari": "u" + }, + "小程序": { + "微信": "u", + "阿里": "u", + "百度": "u", + "字节跳动": "u", + "QQ": "u" + }, + "快应用": { + "华为": "u", + "联盟": "u" + }, + "Vue": { + "vue2": "y", + "vue3": "u" + } + } + } + } +} diff --git a/uni_modules/uni-config-center/readme.md b/uni_modules/uni-config-center/readme.md new file mode 100644 index 0000000..03f7fc2 --- /dev/null +++ b/uni_modules/uni-config-center/readme.md @@ -0,0 +1,93 @@ +# 为什么使用uni-config-center + +实际开发中很多插件需要配置文件才可以正常运行,如果每个插件都单独进行配置的话就会产生下面这样的目录结构 + +```bash +cloudfunctions +└─────common 公共模块 + ├─plugin-a // 插件A对应的目录 + │ ├─index.js + │ ├─config.json // plugin-a对应的配置文件 + │ └─other-file.cert // plugin-a依赖的其他文件 + └─plugin-b // plugin-b对应的目录 + ├─index.js + └─config.json // plugin-b对应的配置文件 +``` + +假设插件作者要发布一个项目模板,里面使用了很多需要配置的插件,无论是作者发布还是用户使用都是一个大麻烦。 + +uni-config-center就是用了统一管理这些配置文件的,使用uni-config-center后的目录结构如下 + +```bash +cloudfunctions +└─────common 公共模块 + ├─plugin-a // 插件A对应的目录 + │ └─index.js + ├─plugin-b // plugin-b对应的目录 + │ └─index.js + └─uni-config-center + ├─index.js // config-center入口文件 + ├─plugin-a + │ ├─config.json // plugin-a对应的配置文件 + │ └─other-file.cert // plugin-a依赖的其他文件 + └─plugin-b + └─config.json // plugin-b对应的配置文件 +``` + +使用uni-config-center后的优势 + +- 配置文件统一管理,分离插件主体和配置信息,更新插件更方便 +- 支持对config.json设置schema,插件使用者在HBuilderX内编写config.json文件时会有更好的提示(后续HBuilderX会提供支持) + +# 用法 + +在要使用uni-config-center的公共模块或云函数内引入uni-config-center依赖,请参考:[使用公共模块](https://uniapp.dcloud.net.cn/uniCloud/cf-common) + +```js +const createConfig = require('uni-config-center') + +const uniIdConfig = createConfig({ + pluginId: 'uni-id', // 插件id + defaultConfig: { // 默认配置 + tokenExpiresIn: 7200, + tokenExpiresThreshold: 600, + }, + customMerge: function(defaultConfig, userConfig) { // 自定义默认配置和用户配置的合并规则,不设置的情况侠会对默认配置和用户配置进行深度合并 + // defaudltConfig 默认配置 + // userConfig 用户配置 + return Object.assign(defaultConfig, userConfig) + } +}) + + +// 以如下配置为例 +// { +// "tokenExpiresIn": 7200, +// "passwordErrorLimit": 6, +// "bindTokenToDevice": false, +// "passwordErrorRetryTime": 3600, +// "app-plus": { +// "tokenExpiresIn": 2592000 +// }, +// "service": { +// "sms": { +// "codeExpiresIn": 300 +// } +// } +// } + +// 获取配置 +uniIdConfig.config() // 获取全部配置,注意:uni-config-center内不存在对应插件目录时会返回空对象 +uniIdConfig.config('tokenExpiresIn') // 指定键值获取配置,返回:7200 +uniIdConfig.config('service.sms.codeExpiresIn') // 指定键值获取配置,返回:300 +uniIdConfig.config('tokenExpiresThreshold', 600) // 指定键值获取配置,如果不存在则取传入的默认值,返回:600 + +// 获取文件绝对路径 +uniIdConfig.resolve('custom-token.js') // 获取uni-config-center/uni-id/custom-token.js文件的路径 + +// 引用文件(require) +uniIDConfig.requireFile('custom-token.js') // 使用require方式引用uni-config-center/uni-id/custom-token.js文件。文件不存在时返回undefined,文件内有其他错误导致require失败时会抛出错误。 + +// 判断是否包含某文件 +uniIDConfig.hasFile('custom-token.js') // 配置目录是否包含某文件,true: 文件存在,false: 文件不存在 +``` \ No newline at end of file diff --git a/uni_modules/uni-config-center/uniCloud/cloudfunctions/common/uni-config-center/index.js b/uni_modules/uni-config-center/uniCloud/cloudfunctions/common/uni-config-center/index.js new file mode 100644 index 0000000..00ba62f --- /dev/null +++ b/uni_modules/uni-config-center/uniCloud/cloudfunctions/common/uni-config-center/index.js @@ -0,0 +1 @@ +"use strict";var t=require("fs"),r=require("path");function e(t){return t&&"object"==typeof t&&"default"in t?t:{default:t}}var n=e(t),o=e(r),i="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:{};var u=function(t){var r={exports:{}};return t(r,r.exports),r.exports}((function(t,r){var e="__lodash_hash_undefined__",n=9007199254740991,o="[object Arguments]",u="[object Function]",c="[object Object]",a=/^\[object .+?Constructor\]$/,f=/^(?:0|[1-9]\d*)$/,s={};s["[object Float32Array]"]=s["[object Float64Array]"]=s["[object Int8Array]"]=s["[object Int16Array]"]=s["[object Int32Array]"]=s["[object Uint8Array]"]=s["[object Uint8ClampedArray]"]=s["[object Uint16Array]"]=s["[object Uint32Array]"]=!0,s[o]=s["[object Array]"]=s["[object ArrayBuffer]"]=s["[object Boolean]"]=s["[object DataView]"]=s["[object Date]"]=s["[object Error]"]=s[u]=s["[object Map]"]=s["[object Number]"]=s[c]=s["[object RegExp]"]=s["[object Set]"]=s["[object String]"]=s["[object WeakMap]"]=!1;var l="object"==typeof i&&i&&i.Object===Object&&i,h="object"==typeof self&&self&&self.Object===Object&&self,p=l||h||Function("return this")(),_=r&&!r.nodeType&&r,v=_&&t&&!t.nodeType&&t,d=v&&v.exports===_,y=d&&l.process,g=function(){try{var t=v&&v.require&&v.require("util").types;return t||y&&y.binding&&y.binding("util")}catch(t){}}(),b=g&&g.isTypedArray;function j(t,r,e){switch(e.length){case 0:return t.call(r);case 1:return t.call(r,e[0]);case 2:return t.call(r,e[0],e[1]);case 3:return t.call(r,e[0],e[1],e[2])}return t.apply(r,e)}var w,O,m,A=Array.prototype,z=Function.prototype,M=Object.prototype,x=p["__core-js_shared__"],C=z.toString,F=M.hasOwnProperty,U=(w=/[^.]+$/.exec(x&&x.keys&&x.keys.IE_PROTO||""))?"Symbol(src)_1."+w:"",S=M.toString,I=C.call(Object),P=RegExp("^"+C.call(F).replace(/[\\^$.*+?()[\]{}|]/g,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$"),T=d?p.Buffer:void 0,q=p.Symbol,E=p.Uint8Array,$=T?T.allocUnsafe:void 0,D=(O=Object.getPrototypeOf,m=Object,function(t){return O(m(t))}),k=Object.create,B=M.propertyIsEnumerable,N=A.splice,L=q?q.toStringTag:void 0,R=function(){try{var t=vt(Object,"defineProperty");return t({},"",{}),t}catch(t){}}(),G=T?T.isBuffer:void 0,V=Math.max,W=Date.now,H=vt(p,"Map"),J=vt(Object,"create"),K=function(){function t(){}return function(r){if(!xt(r))return{};if(k)return k(r);t.prototype=r;var e=new t;return t.prototype=void 0,e}}();function Q(t){var r=-1,e=null==t?0:t.length;for(this.clear();++r-1},X.prototype.set=function(t,r){var e=this.__data__,n=nt(e,t);return n<0?(++this.size,e.push([t,r])):e[n][1]=r,this},Y.prototype.clear=function(){this.size=0,this.__data__={hash:new Q,map:new(H||X),string:new Q}},Y.prototype.delete=function(t){var r=_t(this,t).delete(t);return this.size-=r?1:0,r},Y.prototype.get=function(t){return _t(this,t).get(t)},Y.prototype.has=function(t){return _t(this,t).has(t)},Y.prototype.set=function(t,r){var e=_t(this,t),n=e.size;return e.set(t,r),this.size+=e.size==n?0:1,this},Z.prototype.clear=function(){this.__data__=new X,this.size=0},Z.prototype.delete=function(t){var r=this.__data__,e=r.delete(t);return this.size=r.size,e},Z.prototype.get=function(t){return this.__data__.get(t)},Z.prototype.has=function(t){return this.__data__.has(t)},Z.prototype.set=function(t,r){var e=this.__data__;if(e instanceof X){var n=e.__data__;if(!H||n.length<199)return n.push([t,r]),this.size=++e.size,this;e=this.__data__=new Y(n)}return e.set(t,r),this.size=e.size,this};var it,ut=function(t,r,e){for(var n=-1,o=Object(t),i=e(t),u=i.length;u--;){var c=i[it?u:++n];if(!1===r(o[c],c,o))break}return t};function ct(t){return null==t?void 0===t?"[object Undefined]":"[object Null]":L&&L in Object(t)?function(t){var r=F.call(t,L),e=t[L];try{t[L]=void 0;var n=!0}catch(t){}var o=S.call(t);n&&(r?t[L]=e:delete t[L]);return o}(t):function(t){return S.call(t)}(t)}function at(t){return Ct(t)&&ct(t)==o}function ft(t){return!(!xt(t)||function(t){return!!U&&U in t}(t))&&(zt(t)?P:a).test(function(t){if(null!=t){try{return C.call(t)}catch(t){}try{return t+""}catch(t){}}return""}(t))}function st(t){if(!xt(t))return function(t){var r=[];if(null!=t)for(var e in Object(t))r.push(e);return r}(t);var r=yt(t),e=[];for(var n in t)("constructor"!=n||!r&&F.call(t,n))&&e.push(n);return e}function lt(t,r,e,n,o){t!==r&&ut(r,(function(i,u){if(o||(o=new Z),xt(i))!function(t,r,e,n,o,i,u){var a=gt(t,e),f=gt(r,e),s=u.get(f);if(s)return void rt(t,e,s);var l=i?i(a,f,e+"",t,r,u):void 0,h=void 0===l;if(h){var p=Ot(f),_=!p&&At(f),v=!p&&!_&&Ft(f);l=f,p||_||v?Ot(a)?l=a:Ct(j=a)&&mt(j)?l=function(t,r){var e=-1,n=t.length;r||(r=Array(n));for(;++e-1&&t%1==0&&t0){if(++r>=800)return arguments[0]}else r=0;return t.apply(void 0,arguments)}}(pt);function jt(t,r){return t===r||t!=t&&r!=r}var wt=at(function(){return arguments}())?at:function(t){return Ct(t)&&F.call(t,"callee")&&!B.call(t,"callee")},Ot=Array.isArray;function mt(t){return null!=t&&Mt(t.length)&&!zt(t)}var At=G||function(){return!1};function zt(t){if(!xt(t))return!1;var r=ct(t);return r==u||"[object GeneratorFunction]"==r||"[object AsyncFunction]"==r||"[object Proxy]"==r}function Mt(t){return"number"==typeof t&&t>-1&&t%1==0&&t<=n}function xt(t){var r=typeof t;return null!=t&&("object"==r||"function"==r)}function Ct(t){return null!=t&&"object"==typeof t}var Ft=b?function(t){return function(r){return t(r)}}(b):function(t){return Ct(t)&&Mt(t.length)&&!!s[ct(t)]};function Ut(t){return mt(t)?tt(t,!0):st(t)}var St,It=(St=function(t,r,e){lt(t,r,e)},ht((function(t,r){var e=-1,n=r.length,o=n>1?r[n-1]:void 0,i=n>2?r[2]:void 0;for(o=St.length>3&&"function"==typeof o?(n--,o):void 0,i&&function(t,r,e){if(!xt(e))return!1;var n=typeof r;return!!("number"==n?mt(e)&&dt(r,e.length):"string"==n&&r in e)&&jt(e[r],t)}(r[0],r[1],i)&&(o=n<3?void 0:o,n=1),t=Object(t);++ec.call(t,r);class f{constructor({pluginId:t,defaultConfig:r={},customMerge:e,root:n}){this.pluginId=t,this.defaultConfig=r,this.pluginConfigPath=o.default.resolve(n||__dirname,t),this.customMerge=e,this._config=void 0}resolve(t){return o.default.resolve(this.pluginConfigPath,t)}hasFile(t){return n.default.existsSync(this.resolve(t))}requireFile(t){try{return require(this.resolve(t))}catch(t){if("MODULE_NOT_FOUND"===t.code)return;throw t}}_getUserConfig(){return this.requireFile("config.json")}config(t,r){if(!this._config){const t=this._getUserConfig();this._config=Array.isArray(t)?t:(this.customMerge||u)(this.defaultConfig,t)}let e=this._config;return t?function(t,r,e){if("number"==typeof r)return t[r];if("symbol"==typeof r)return a(t,r)?t[r]:e;const n="string"!=typeof(o=r)?o:o.split(".").reduce(((t,r)=>(r.split(/\[([^}]+)\]/g).forEach((r=>r&&t.push(r))),t)),[]);var o;let i=t;for(let t=0;t { + return (item.dcloudAppid === appid) + }) + } + return this._uniIdConfig + } +} + +class AppConfig extends ConfigBase { + + constructor() { + super() + } + + get(appid, platform) { + if (!this.isSupport(platform)) { + return null + } + + let appConfig = this.getAppConfig(appid) + if (!appConfig) { + return null + } + + return this.getOauthConfig(appConfig, platform) + } + + isSupport(platformName) { + return (Support_Platforms.indexOf(platformName) >= 0) + } + + getOauthConfig(appConfig, platformName) { + let treePath = OauthConfig[platformName] + let node = this.findNode(appConfig, treePath) + if (node && node.appid && node.appsecret) { + return { + appid: node.appid, + secret: node.appsecret + } + } + return null + } + + findNode(treeNode, arrayPath) { + let node = treeNode + for (let treePath of arrayPath) { + for (let name of treePath) { + const currentNode = node[name] + if (currentNode) { + node = currentNode + } else { + node = null + break + } + } + if (node === null) { + node = treeNode + } else { + break + } + } + return node + } +} + + +module.exports = { + AppConfig +}; \ No newline at end of file diff --git a/uni_modules/uni-open-bridge-common/uniCloud/cloudfunctions/common/uni-open-bridge-common/consts.js b/uni_modules/uni-open-bridge-common/uniCloud/cloudfunctions/common/uni-open-bridge-common/consts.js new file mode 100644 index 0000000..4c666e9 --- /dev/null +++ b/uni_modules/uni-open-bridge-common/uniCloud/cloudfunctions/common/uni-open-bridge-common/consts.js @@ -0,0 +1,30 @@ +'use strict'; + +const TAG = "UNI_OPEN_BRIDGE" + +const HTTP_STATUS = { + SUCCESS: 200 +} + +const ProviderType = { + WEIXIN_MP: 'weixin-mp', + WEIXIN_H5: 'weixin-h5', + WEIXIN_APP: 'weixin-app', + WEIXIN_WEB: 'weixin-web', + QQ_MP: 'qq-mp', + QQ_APP: 'qq-app' +} + +// old +const PlatformType = ProviderType + +const ErrorCodeType = { + SYSTEM_ERROR: TAG + "_SYSTEM_ERROR" +} + +module.exports = { + HTTP_STATUS, + ProviderType, + PlatformType, + ErrorCodeType +} diff --git a/uni_modules/uni-open-bridge-common/uniCloud/cloudfunctions/common/uni-open-bridge-common/index.js b/uni_modules/uni-open-bridge-common/uniCloud/cloudfunctions/common/uni-open-bridge-common/index.js new file mode 100644 index 0000000..fc23cd9 --- /dev/null +++ b/uni_modules/uni-open-bridge-common/uniCloud/cloudfunctions/common/uni-open-bridge-common/index.js @@ -0,0 +1,317 @@ +'use strict'; + +const { + PlatformType, + ProviderType, + ErrorCodeType +} = require('./consts.js') + +const { + AppConfig +} = require('./config.js') + +const { + Storage +} = require('./storage.js') + +const { + BridgeError +} = require('./bridge-error.js') + +const { + WeixinServer +} = require('./weixin-server.js') + +const appConfig = new AppConfig() + +class AccessToken extends Storage { + + constructor() { + super('access-token', ['provider', 'appid']) + } + + async update(key) { + super.update(key) + + const result = await this.getByWeixinServer(key) + + return this.set(key, result.value, result.duration) + } + + async fallback(key) { + return this.getByWeixinServer(key) + } + + async getByWeixinServer(key) { + const oauthConfig = appConfig.get(key.dcloudAppid, key.provider) + let methodName + if (key.provider === ProviderType.WEIXIN_MP) { + methodName = 'GetMPAccessTokenData' + } else if (key.provider === ProviderType.WEIXIN_H5) { + methodName = 'GetH5AccessTokenData' + } else { + throw new BridgeError(ErrorCodeType.SYSTEM_ERROR, "provider invalid") + } + + const responseData = await WeixinServer[methodName](oauthConfig) + + const duration = responseData.expires_in || (60 * 60 * 2) + delete responseData.expires_in + + return { + value: responseData, + duration + } + } +} + +class UserAccessToken extends Storage { + + constructor() { + super('user-access-token', ['provider', 'appid', 'openid']) + } +} + +class SessionKey extends Storage { + + constructor() { + super('session-key', ['provider', 'appid', 'openid']) + } +} + +class Encryptkey extends Storage { + + constructor() { + super('encrypt-key', ['provider', 'appid', 'openid']) + } + + async update(key) { + super.update(key) + + const result = await this.getByWeixinServer(key) + + return this.set(key, result.value, result.duration) + } + + getKeyString(key) { + return `${super.getKeyString(key)}-${key.version}` + } + + getExpiresIn(value) { + if (value <= 0) { + return 60 + } + return value + } + + async fallback(key) { + return this.getByWeixinServer(key) + } + + async getByWeixinServer(key) { + const accessToken = await Factory.Get(AccessToken, key) + const userSession = await Factory.Get(SessionKey, key) + + const responseData = await WeixinServer.GetUserEncryptKeyData({ + openid: key.openid, + access_token: accessToken.access_token, + session_key: userSession.session_key + }) + + const keyInfo = responseData.key_info_list.find((item) => { + return item.version === key.version + }) + + if (!keyInfo) { + throw new BridgeError(ErrorCodeType.SYSTEM_ERROR, 'key version invalid') + } + + const value = { + encrypt_key: keyInfo.encrypt_key, + iv: keyInfo.iv + } + + return { + value, + duration: keyInfo.expire_in + } + } +} + +class Ticket extends Storage { + + constructor() { + super('ticket', ['provider', 'appid']) + } + + async update(key) { + super.update(key) + + const result = await this.getByWeixinServer(key) + + return this.set(key, result.value, result.duration) + } + + async fallback(key) { + return this.getByWeixinServer(key) + } + + async getByWeixinServer(key) { + const accessToken = await Factory.Get(AccessToken, { + dcloudAppid: key.dcloudAppid, + provider: ProviderType.WEIXIN_H5 + }) + + const responseData = await WeixinServer.GetH5TicketData(accessToken) + + const duration = responseData.expires_in || (60 * 60 * 2) + delete responseData.expires_in + delete responseData.errcode + delete responseData.errmsg + + return { + value: responseData, + duration + } + } +} + + +const Factory = { + + async Get(T, key, fallback) { + Factory.FixOldKey(key) + return Factory.MakeUnique(T).get(key, fallback) + }, + + async Set(T, key, value, expiresIn) { + Factory.FixOldKey(key) + return Factory.MakeUnique(T).set(key, value, expiresIn) + }, + + async Remove(T, key) { + Factory.FixOldKey(key) + return Factory.MakeUnique(T).remove(key) + }, + + async Update(T, key) { + Factory.FixOldKey(key) + return Factory.MakeUnique(T).update(key) + }, + + FixOldKey(key) { + if (!key.provider) { + key.provider = key.platform + } + + const configData = appConfig.get(key.dcloudAppid, key.provider) + if (!configData) { + throw new BridgeError(ErrorCodeType.SYSTEM_ERROR, 'appid or provider invalid') + } + key.appid = configData.appid + }, + + MakeUnique(T) { + return new T() + } +} + + +// exports + +async function getAccessToken(key, fallback) { + return Factory.Get(AccessToken, key, fallback) +} + +async function setAccessToken(key, value, expiresIn) { + return Factory.Set(AccessToken, key, value, expiresIn) +} + +async function removeAccessToken(key) { + return Factory.Remove(AccessToken, key) +} + +async function updateAccessToken(key) { + return Factory.Update(AccessToken, key) +} + +async function getUserAccessToken(key, fallback) { + return Factory.Get(UserAccessToken, key, fallback) +} + +async function setUserAccessToken(key, value, expiresIn) { + return Factory.Set(UserAccessToken, key, value, expiresIn) +} + +async function removeUserAccessToken(key) { + return Factory.Remove(UserAccessToken, key) +} + +async function getSessionKey(key, fallback) { + return Factory.Get(SessionKey, key, fallback) +} + +async function setSessionKey(key, value, expiresIn) { + return Factory.Set(SessionKey, key, value, expiresIn) +} + +async function removeSessionKey(key) { + return Factory.Remove(SessionKey, key) +} + +async function getEncryptKey(key, fallback) { + return Factory.Get(Encryptkey, key, fallback) +} + +async function setEncryptKey(key, value, expiresIn) { + return Factory.Set(Encryptkey, key, value, expiresIn) +} + +async function removeEncryptKey(key) { + return Factory.Remove(Encryptkey, key) +} + +async function updateEncryptKey(key) { + return Factory.Update(Encryptkey, key) +} + +async function getTicket(key, fallback) { + return Factory.Get(Ticket, key, fallback) +} + +async function setTicket(key, value, expiresIn) { + return Factory.Set(Ticket, key, value, expiresIn) +} + +async function removeTicket(key) { + return Factory.Remove(Ticket, key) +} + +async function updateTicket(key) { + return Factory.Update(Ticket, key) +} + +module.exports = { + getAccessToken, + setAccessToken, + removeAccessToken, + updateAccessToken, + getUserAccessToken, + setUserAccessToken, + removeUserAccessToken, + getSessionKey, + setSessionKey, + removeSessionKey, + getEncryptKey, + setEncryptKey, + removeEncryptKey, + updateEncryptKey, + getTicket, + setTicket, + removeTicket, + updateTicket, + ProviderType, + PlatformType, + WeixinServer, + ErrorCodeType +} diff --git a/uni_modules/uni-open-bridge-common/uniCloud/cloudfunctions/common/uni-open-bridge-common/package.json b/uni_modules/uni-open-bridge-common/uniCloud/cloudfunctions/common/uni-open-bridge-common/package.json new file mode 100644 index 0000000..a017b49 --- /dev/null +++ b/uni_modules/uni-open-bridge-common/uniCloud/cloudfunctions/common/uni-open-bridge-common/package.json @@ -0,0 +1,15 @@ +{ + "name": "uni-open-bridge-common", + "version": "1.0.0", + "description": "", + "main": "index.js", + "scripts": { + "test": "echo \"Error: no test specified\" && exit 1" + }, + "keywords": [], + "author": "", + "license": "ISC", + "dependencies": { + "uni-config-center": "file:../../../../../uni-config-center/uniCloud/cloudfunctions/common/uni-config-center" + } +} \ No newline at end of file diff --git a/uni_modules/uni-open-bridge-common/uniCloud/cloudfunctions/common/uni-open-bridge-common/storage.js b/uni_modules/uni-open-bridge-common/uniCloud/cloudfunctions/common/uni-open-bridge-common/storage.js new file mode 100644 index 0000000..bfb13a1 --- /dev/null +++ b/uni_modules/uni-open-bridge-common/uniCloud/cloudfunctions/common/uni-open-bridge-common/storage.js @@ -0,0 +1,111 @@ +'use strict'; + +const { + Validator +} = require('./validator.js') + +const { + CacheKeyCascade +} = require('./uni-cloud-cache.js') + +const { + BridgeError +} = require('./bridge-error.js') + +class Storage { + + constructor(type, keys) { + this._type = type || null + this._keys = keys || [] + } + + async get(key, fallback) { + this.validateKey(key) + const result = await this.create(key, fallback).get() + return result.value + } + + async set(key, value, expiresIn) { + this.validateKey(key) + this.validateValue(value) + const expires_in = this.getExpiresIn(expiresIn) + if (expires_in !== 0) { + await this.create(key).set(this.getValue(value), expires_in) + } + } + + async remove(key) { + this.validateKey(key) + await this.create(key).remove() + } + + // virtual + async update(key) { + this.validateKey(key) + } + + async ttl(key) { + this.validateKey(key) + // 后续考虑支持 + } + + async fallback(key) {} + + getKeyString(key) { + const keyArray = [Storage.Prefix] + this._keys.forEach((name) => { + keyArray.push(key[name]) + }) + keyArray.push(this._type) + return keyArray.join(':') + } + + getValue(value) { + return value + } + + getExpiresIn(value) { + if (value !== undefined) { + return value + } + return -1 + } + + validateKey(key) { + Validator.Key(this._keys, key) + } + + validateValue(value) { + Validator.Value(value) + } + + create(key, fallback) { + const keyString = this.getKeyString(key) + const options = { + layers: [{ + type: 'database', + key: keyString + }, { + type: 'redis', + key: keyString + }] + } + + const _this = this + return new CacheKeyCascade({ + ...options, + fallback: async function() { + if (fallback) { + return fallback(key) + } else if (_this.fallback) { + return _this.fallback(key) + } + } + }) + } +} +Storage.Prefix = "uni-id" + +module.exports = { + Storage +}; diff --git a/uni_modules/uni-open-bridge-common/uniCloud/cloudfunctions/common/uni-open-bridge-common/uni-cloud-cache.js b/uni_modules/uni-open-bridge-common/uniCloud/cloudfunctions/common/uni-open-bridge-common/uni-cloud-cache.js new file mode 100644 index 0000000..2e4286b --- /dev/null +++ b/uni_modules/uni-open-bridge-common/uniCloud/cloudfunctions/common/uni-open-bridge-common/uni-cloud-cache.js @@ -0,0 +1,324 @@ +const db = uniCloud.database() + +function getType(value) { + return Object.prototype.toString.call(value).slice(8, -1).toLowerCase() +} + +const validator = { + key: function(value) { + const err = new Error('Invalid key') + if (typeof value !== 'string') { + throw err + } + const valueTrim = value.trim() + if (!valueTrim || valueTrim !== value) { + throw err + } + }, + value: function(value) { + // 仅作简单校验 + const type = getType(value) + const validValueType = ['null', 'number', 'string', 'array', 'object'] + if (validValueType.indexOf(type) === -1) { + throw new Error('Invalid value type') + } + }, + duration: function(value) { + const err = new Error('Invalid duration') + if (value === undefined) { + return + } + if (typeof value !== 'number' || value === 0) { + throw err + } + } +} + +/** + * 入库时 expired 为过期时间对应的时间戳,永不过期用-1表示 + * 返回结果时 与redis对齐,-1表示永不过期,-2表示已过期或不存在 + */ +class DatabaseCache { + constructor({ + collection = 'opendb-open-data' + } = {}) { + this.type = 'db' + this.collection = db.collection(collection) + } + + _serializeValue(value) { + return value === undefined ? null : JSON.stringify(value) + } + + _deserializeValue(value) { + return value ? JSON.parse(value) : value + } + + async set(key, value, duration) { + validator.key(key) + validator.value(value) + validator.duration(duration) + value = this._serializeValue(value) + await this.collection.doc(key).set({ + value, + expired: duration && duration !== -1 ? Date.now() + (duration * 1000) : -1 + }) + } + + async _getWithDuration(key) { + const getKeyRes = await this.collection.doc(key).get() + const record = getKeyRes.data[0] + if (!record) { + return { + value: null, + duration: -2 + } + } + const value = this._deserializeValue(record.value) + const expired = record.expired + if (expired === -1) { + return { + value, + duration: -1 + } + } + const duration = expired - Date.now() + if (duration <= 0) { + await this.remove(key) + return { + value: null, + duration: -2 + } + } + return { + value, + duration: Math.floor(duration / 1000) + } + } + + async get(key, { + withDuration = true + } = {}) { + const result = await this._getWithDuration(key) + if (!withDuration) { + delete result.duration + } + return result + } + + async remove(key) { + await this.collection.doc(key).remove() + } +} + +class RedisCache { + constructor() { + this.type = 'redis' + this.redis = uniCloud.redis() + } + + _serializeValue(value) { + return value === undefined ? null : JSON.stringify(value) + } + + _deserializeValue(value) { + return value ? JSON.parse(value) : value + } + + async set(key, value, duration) { + validator.key(key) + validator.value(value) + validator.duration(duration) + value = this._serializeValue(value) + if (!duration || duration === -1) { + await this.redis.set(key, value) + } else { + await this.redis.set(key, value, 'EX', duration) + } + } + + async get(key, { + withDuration = false + } = {}) { + let value = await this.redis.get(key) + value = this._deserializeValue(value) + if (!withDuration) { + return { + value + } + } + const durationSecond = await this.redis.ttl(key) + let duration + switch (durationSecond) { + case -1: + duration = -1 + break + case -2: + duration = -2 + break + default: + duration = durationSecond + break + } + return { + value, + duration + } + } + + async remove(key) { + await this.redis.del(key) + } +} + +class Cache { + constructor({ + type, + collection + } = {}) { + if (type === 'database') { + return new DatabaseCache({ + collection + }) + } else if (type === 'redis') { + return new RedisCache() + } else { + throw new Error('Invalid cache type') + } + } +} + +class CacheKey { + constructor({ + type, + collection, + cache, + key, + fallback + } = {}) { + this.cache = cache || new Cache({ + type, + collection + }) + this.key = key + this.fallback = fallback + } + + async set(value, duration) { + await this.cache.set(this.key, value, duration) + } + + async setWithSync(value, duration, syncMethod) { + await Promise.all([ + this.set(this.key, value, duration), + syncMethod(value, duration) + ]) + } + + async get() { + let { + value, + duration + } = await this.cache.get(this.key) + if (value !== null && value !== undefined) { + return { + value, + duration + } + } + if (!this.fallback) { + return { + value: null, + duration: -2 + } + } + const fallbackResult = await this.fallback() + value = fallbackResult.value + duration = fallbackResult.duration + if (value !== null && duration !== undefined) { + await this.cache.set(this.key, value, duration) + } + return { + value, + duration + } + } + + async remove() { + await this.cache.remove(this.key) + } +} + +class CacheKeyCascade { + constructor({ + layers, // [{cache, type, collection, key}] 从低级到高级排序,[DbCacheKey, RedisCacheKey] + fallback + } = {}) { + this.layers = layers + this.cacheLayers = [] + let lastCacheKey + for (let i = 0; i < layers.length; i++) { + const { + type, + cache, + collection, + key + } = layers[i] + const lastCacheKeyTemp = lastCacheKey + try { + const currentCacheKey = new CacheKey({ + type, + collection, + cache, + key, + fallback: i === 0 ? fallback : function() { + return lastCacheKeyTemp.get() + } + }) + this.cacheLayers.push(currentCacheKey) + lastCacheKey = currentCacheKey + } catch (e) {} + } + this.highLevelCache = lastCacheKey + } + + async set(value, duration) { + return Promise.all( + this.cacheLayers.map(item => { + return item.set(value, duration) + }) + ) + } + + async setWithSync(value, duration, syncMethod) { + const setPromise = this.cacheLayers.map(item => { + return item.set(value, duration) + }) + return Promise.all( + [ + ...setPromise, + syncMethod(value, duration) + ] + ) + } + + async get() { + return this.highLevelCache.get() + } + + async remove() { + await Promise.all( + this.cacheLayers.map(cacheKeyItem => { + return cacheKeyItem.remove() + }) + ) + } +} + +module.exports = { + Cache, + DatabaseCache, + RedisCache, + CacheKey, + CacheKeyCascade +} diff --git a/uni_modules/uni-open-bridge-common/uniCloud/cloudfunctions/common/uni-open-bridge-common/validator.js b/uni_modules/uni-open-bridge-common/uniCloud/cloudfunctions/common/uni-open-bridge-common/validator.js new file mode 100644 index 0000000..47a455b --- /dev/null +++ b/uni_modules/uni-open-bridge-common/uniCloud/cloudfunctions/common/uni-open-bridge-common/validator.js @@ -0,0 +1,31 @@ +const Validator = { + + Key(keyArray, parameters) { + for (let i = 0; i < keyArray.length; i++) { + const keyName = keyArray[i] + if (typeof parameters[keyName] !== 'string') { + Validator.ThrowNewError(`Invalid ${keyName}`) + } + if (parameters[keyName].length < 1) { + Validator.ThrowNewError(`Invalid ${keyName}`) + } + } + }, + + Value(value) { + if (value === undefined) { + Validator.ThrowNewError('Invalid Value') + } + if (typeof value !== 'object') { + Validator.ThrowNewError('Invalid Value Type') + } + }, + + ThrowNewError(message) { + throw new Error(message) + } +} + +module.exports = { + Validator +} diff --git a/uni_modules/uni-open-bridge-common/uniCloud/cloudfunctions/common/uni-open-bridge-common/weixin-server.js b/uni_modules/uni-open-bridge-common/uniCloud/cloudfunctions/common/uni-open-bridge-common/weixin-server.js new file mode 100644 index 0000000..ef476f1 --- /dev/null +++ b/uni_modules/uni-open-bridge-common/uniCloud/cloudfunctions/common/uni-open-bridge-common/weixin-server.js @@ -0,0 +1,203 @@ +'use strict'; + +const crypto = require('crypto') + +const { + HTTP_STATUS +} = require('./consts.js') + +const { + BridgeError +} = require('./bridge-error.js') + +class WeixinServer { + + constructor(options = {}) { + this._appid = options.appid + this._secret = options.secret + } + + getAccessToken() { + return uniCloud.httpclient.request(WeixinServer.AccessToken_Url, { + dataType: 'json', + method: 'POST', + contentType: 'json', + data: { + appid: this._appid, + secret: this._secret, + grant_type: "client_credential" + } + }) + } + + // 使用客户端获取的 code 从微信服务器换取 openid,code 仅可使用一次 + codeToSession(code) { + return uniCloud.httpclient.request(WeixinServer.Code2Session_Url, { + dataType: 'json', + data: { + appid: this._appid, + secret: this._secret, + js_code: code, + grant_type: 'authorization_code' + } + }) + } + + getUserEncryptKey({ + access_token, + openid, + session_key + }) { + console.log(access_token, openid, session_key); + const signature = crypto.createHmac('sha256', session_key).update('').digest('hex') + return uniCloud.httpclient.request(WeixinServer.User_Encrypt_Key_Url, { + dataType: 'json', + method: 'POST', + dataAsQueryString: true, + data: { + access_token, + openid: openid, + signature: signature, + sig_method: 'hmac_sha256' + } + }) + } + + getH5AccessToken() { + return uniCloud.httpclient.request(WeixinServer.AccessToken_H5_Url, { + dataType: 'json', + method: 'GET', + data: { + appid: this._appid, + secret: this._secret, + grant_type: "client_credential" + } + }) + } + + getH5Ticket(access_token) { + return uniCloud.httpclient.request(WeixinServer.Ticket_Url, { + dataType: 'json', + dataAsQueryString: true, + method: 'POST', + data: { + access_token + } + }) + } + + getH5AccessTokenForEip() { + return uniCloud.httpProxyForEip.postForm(WeixinServer.AccessToken_H5_Url, { + appid: this._appid, + secret: this._secret, + grant_type: "client_credential" + }, { + dataType: 'json' + }) + } + + getH5TicketForEip(access_token) { + return uniCloud.httpProxyForEip.postForm(WeixinServer.Ticket_Url, { + access_token + }, { + dataType: 'json', + dataAsQueryString: true + }) + } +} + +WeixinServer.AccessToken_Url = 'https://api.weixin.qq.com/cgi-bin/stable_token' +WeixinServer.Code2Session_Url = 'https://api.weixin.qq.com/sns/jscode2session' +WeixinServer.User_Encrypt_Key_Url = 'https://api.weixin.qq.com/wxa/business/getuserencryptkey' +WeixinServer.AccessToken_H5_Url = 'https://api.weixin.qq.com/cgi-bin/token' +WeixinServer.Ticket_Url = 'https://api.weixin.qq.com/cgi-bin/ticket/getticket?type=jsapi' + +WeixinServer.GetMPAccessToken = function(options) { + return new WeixinServer(options).getAccessToken() +} + +WeixinServer.GetCodeToSession = function(options) { + return new WeixinServer(options).codeToSession(options.code) +} + +WeixinServer.GetUserEncryptKey = function(options) { + return new WeixinServer(options).getUserEncryptKey(options) +} + +WeixinServer.GetH5AccessToken = function(options) { + return new WeixinServer(options).getH5AccessToken() +} + +WeixinServer.GetH5Ticket = function(options) { + return new WeixinServer(options).getH5Ticket(options.access_token) +} + +//////////////////////////////////////////////////////////////// + +function isAliyun() { + return (uniCloud.getCloudInfos()[0].provider === 'aliyun') +} + +WeixinServer.GetResponseData = function(response) { + console.log("WeixinServer::response", response) + + if (!(response.status === HTTP_STATUS.SUCCESS || response.statusCodeValue === HTTP_STATUS.SUCCESS)) { + throw new BridgeError(response.status || response.statusCodeValue, response.status || response.statusCodeValue) + } + + const responseData = response.data || response.body + + if (responseData.errcode !== undefined && responseData.errcode !== 0) { + throw new BridgeError(responseData.errcode, responseData.errmsg) + } + + return responseData +} + +WeixinServer.GetMPAccessTokenData = async function(options) { + const response = await new WeixinServer(options).getAccessToken() + return WeixinServer.GetResponseData(response) +} + +WeixinServer.GetCodeToSessionData = async function(options) { + const response = await new WeixinServer(options).codeToSession(options.code) + return WeixinServer.GetResponseData(response) +} + +WeixinServer.GetUserEncryptKeyData = async function(options) { + const response = await new WeixinServer(options).getUserEncryptKey(options) + return WeixinServer.GetResponseData(response) +} + +WeixinServer.GetH5AccessTokenData = async function(options) { + const ws = new WeixinServer(options) + let response + if (isAliyun()) { + response = await ws.getH5AccessTokenForEip() + if (typeof response === 'string') { + response = JSON.parse(response) + } + } else { + response = await ws.getH5AccessToken() + } + return WeixinServer.GetResponseData(response) +} + +WeixinServer.GetH5TicketData = async function(options) { + const ws = new WeixinServer(options) + let response + if (isAliyun()) { + response = await ws.getH5TicketForEip(options.access_token) + if (typeof response === 'string') { + response = JSON.parse(response) + } + } else { + response = await ws.getH5Ticket(options.access_token) + } + return WeixinServer.GetResponseData(response) +} + + +module.exports = { + WeixinServer +} diff --git a/uni_modules/uni-open-bridge-common/uniCloud/database/opendb-open-data.schema.json b/uni_modules/uni-open-bridge-common/uniCloud/database/opendb-open-data.schema.json new file mode 100644 index 0000000..bc25098 --- /dev/null +++ b/uni_modules/uni-open-bridge-common/uniCloud/database/opendb-open-data.schema.json @@ -0,0 +1,19 @@ +// 文档教程: https://uniapp.dcloud.net.cn/uniCloud/schema +{ + "bsonType": "object", + "required": ["_id", "value"], + "properties": { + "_id": { + "bsonType": "string", + "description": "key,格式:uni-id:[provider]:[appid]:[openid]:[access-token|user-access-token|session-key|encrypt-key-version|ticket]" + }, + "value": { + "bsonType": "object", + "description": "字段_id对应的值" + }, + "expired": { + "bsonType": "date", + "description": "过期时间" + } + } +} 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-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..b222c0f --- /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/uview-ui/LICENSE b/uni_modules/uview-ui/LICENSE new file mode 100644 index 0000000..4db40ef --- /dev/null +++ b/uni_modules/uview-ui/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2023 www.uviewui.com + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/uni_modules/uview-ui/README.md b/uni_modules/uview-ui/README.md new file mode 100644 index 0000000..c78ff47 --- /dev/null +++ b/uni_modules/uview-ui/README.md @@ -0,0 +1,66 @@ +

+ logo +

+

uView 2.0

+

多平台快速开发的UI框架

+ +[![stars](https://img.shields.io/github/stars/umicro/uView2.0?style=flat-square&logo=GitHub)](https://github.com/umicro/uView2.0) +[![forks](https://img.shields.io/github/forks/umicro/uView2.0?style=flat-square&logo=GitHub)](https://github.com/umicro/uView2.0) +[![issues](https://img.shields.io/github/issues/umicro/uView2.0?style=flat-square&logo=GitHub)](https://github.com/umicro/uView2.0/issues) +[![Website](https://img.shields.io/badge/uView-up-blue?style=flat-square)](https://uviewui.com) +[![release](https://img.shields.io/github/v/release/umicro/uView2.0?style=flat-square)](https://gitee.com/umicro/uView2.0/releases) +[![license](https://img.shields.io/github/license/umicro/uView2.0?style=flat-square)](https://en.wikipedia.org/wiki/MIT_License) + +## 说明 + +uView UI,是[uni-app](https://uniapp.dcloud.io/)全面兼容nvue的uni-app生态框架,全面的组件和便捷的工具会让您信手拈来,如鱼得水 + +## [官方文档:https://uviewui.com](https://uviewui.com) + + +## 预览 + +您可以通过**微信**扫码,查看最佳的演示效果。 +
+
+ + + +## 链接 + +- [官方文档](https://www.uviewui.com/) +- [更新日志](https://www.uviewui.com/components/changelog.html) +- [升级指南](https://www.uviewui.com/components/changeGuide.html) +- [关于我们](https://www.uviewui.com/cooperation/about.html) + +## 交流反馈 + +欢迎加入我们的QQ群交流反馈:[点此跳转](https://www.uviewui.com/components/addQQGroup.html) + +## 关于PR + +> 我们非常乐意接受各位的优质PR,但在此之前我希望您了解uView2.0是一个需要兼容多个平台的(小程序、h5、ios app、android app)包括nvue页面、vue页面。 +> 所以希望在您修复bug并提交之前尽可能的去这些平台测试一下兼容性。最好能携带测试截图以方便审核。非常感谢! + +## 安装 + +#### **uni-app插件市场链接** —— [https://ext.dcloud.net.cn/plugin?id=1593](https://ext.dcloud.net.cn/plugin?id=1593) + +请通过[官网安装文档](https://www.uviewui.com/components/install.html)了解更详细的内容 + +## 快速上手 + +请通过[快速上手](https://uviewui.com/components/quickstart.html)了解更详细的内容 + +## 使用方法 +配置easycom规则后,自动按需引入,无需`import`组件,直接引用即可。 + +```html + +``` + +## 版权信息 +uView遵循[MIT](https://en.wikipedia.org/wiki/MIT_License)开源协议,意味着您无需支付任何费用,也无需授权,即可将uView应用到您的产品中。 + diff --git a/uni_modules/uview-ui/changelog.md b/uni_modules/uview-ui/changelog.md new file mode 100644 index 0000000..f2bae72 --- /dev/null +++ b/uni_modules/uview-ui/changelog.md @@ -0,0 +1,362 @@ +## 2.0.36(2023-03-27) +# uView2.0重磅发布,利剑出鞘,一统江湖 + +1. 重构`deepClone` & `deepMerge`方法 +2. 其他优化 +## 2.0.34(2022-09-24) +# uView2.0重磅发布,利剑出鞘,一统江湖 + +1. `u-input`、`u-textarea`增加`ignoreCompositionEvent`属性 +2. 修复`route`方法调用可能报错的问题 +3. 修复`u-no-network`组件`z-index`无效的问题 +4. 修复`textarea`组件在h5上confirmType=""报错的问题 +5. `u-rate`适配`nvue` +6. 优化验证手机号码的正则表达式(根据工信部发布的《电信网编号计划(2017年版)》进行修改。) +7. `form-item`添加`labelPosition`属性 +8. `u-calendar`修复`maxDate`设置为当前日期,并且当前时间大于08:00时无法显示日期列表的问题 (#724) +9. `u-radio`增加一个默认插槽用于自定义修改label内容 (#680) +10. 修复`timeFormat`函数在safari重的兼容性问题 (#664) +## 2.0.33(2022-06-17) +# uView2.0重磅发布,利剑出鞘,一统江湖 + +1. 修复`loadmore`组件`lineColor`类型错误问题 +2. 修复`u-parse`组件`imgtap`、`linktap`不生效问题 +## 2.0.32(2022-06-16) +# uView2.0重磅发布,利剑出鞘,一统江湖 +1. `u-loadmore`新增自定义颜色、虚/实线 +2. 修复`u-swiper-action`组件部分平台不能上下滑动的问题 +3. 修复`u-list`回弹问题 +4. 修复`notice-bar`组件动画在低端安卓机可能会抖动的问题 +5. `u-loading-page`添加控制图标大小的属性`iconSize` +6. 修复`u-tooltip`组件`color`参数不生效的问题 +7. 修复`u--input`组件使用`blur`事件输出为`undefined`的bug +8. `u-code-input`组件新增键盘弹起时,是否自动上推页面参数`adjustPosition` +9. 修复`image`组件`load`事件无回调对象问题 +10. 修复`button`组件`loadingSize`设置无效问题 +10. 其他修复 +## 2.0.31(2022-04-19) +# uView2.0重磅发布,利剑出鞘,一统江湖 + +1. 修复`upload`在`vue`页面上传成功后没有成功标志的问题 +2. 解决演示项目中微信小程序模拟上传图片一直出于上传中问题 +3. 修复`u-code-input`组件在`nvue`页面编译到`app`平台上光标异常问题(`app`去除此功能) +4. 修复`actionSheet`组件标题关闭按钮点击事件名称错误的问题 +5. 其他修复 +## 2.0.30(2022-04-04) +# uView2.0重磅发布,利剑出鞘,一统江湖 + +1. `u-rate`增加`readonly`属性 +2. `tabs`滑块支持设置背景图片 +3. 修复`u-subsection` `mode`为`subsection`时,滑块样式不正确的问题 +4. `u-code-input`添加光标效果动画 +5. 修复`popup`的`open`事件不触发 +6. 修复`u-flex-column`无效的问题 +7. 修复`u-datetime-picker`索引在特定场合异常问题 +8. 修复`u-datetime-picker`最小时间字符串模板错误问题 +9. `u-swiper`添加`m3u8`验证 +10. `u-swiper`修改判断image和video逻辑 +11. 修复`swiper`无法使用本地图片问题,增加`type`参数 +12. 修复`u-row-notice`格式错误问题 +13. 修复`u-switch`组件当`unit`为`rpx`时,`nodeStyle`消失的问题 +14. 修复`datetime-picker`组件`showToolbar`与`visibleItemCount`属性无效的问题 +15. 修复`upload`组件条件编译位置判断错误,导致`previewImage`属性设置为`false`时,整个组件都会被隐藏的问题 +16. 修复`u-checkbox-group`设置`shape`属性无效的问题 +17. 修复`u-upload`的`capture`传入字符串的时候不生效的问题 +18. 修复`u-action-sheet`组件,关闭事件逻辑错误的问题 +19. 修复`u-list`触顶事件的触发错误的问题 +20. 修复`u-text`只有手机号可拨打的问题 +21. 修复`u-textarea`不能换行的问题 +22. 其他修复 +## 2.0.29(2022-03-13) +# uView2.0重磅发布,利剑出鞘,一统江湖 + +1. 修复`u--text`组件设置`decoration`属性未生效的问题 +2. 修复`u-datetime-picker`使用`formatter`后返回值不正确 +3. 修复`u-datetime-picker` `intercept` 可能为undefined +4. 修复已设置单位 uni..config.unit = 'rpx'时,线型指示器 `transform` 的位置翻倍,导致指示器超出宽度 +5. 修复mixin中bem方法生成的类名在支付宝和字节小程序中失效 +6. 修复默认值传值为空的时候,打开`u-datetime-picker`报错,不能选中第一列时间的bug +7. 修复`u-datetime-picker`使用`formatter`后返回值不正确 +8. 修复`u-image`组件`loading`无效果的问题 +9. 修复`config.unit`属性设为`rpx`时,导航栏占用高度不足导致塌陷的问题 +10. 修复`u-datetime-picker`组件`itemHeight`无效问题 +11. 其他修复 +## 2.0.28(2022-02-22) +# uView2.0重磅发布,利剑出鞘,一统江湖 + +1. search组件新增searchIconSize属性 +2. 兼容Safari/Webkit中传入时间格式如2022-02-17 12:00:56 +3. 修复text value.js 判断日期出format错误问题 +4. priceFormat格式化金额出现精度错误 +5. priceFormat在部分情况下出现精度损失问题 +6. 优化表单rules提示 +7. 修复avatar组件src为空时,展示状态不对 +8. 其他修复 +## 2.0.27(2022-01-28) +# uView2.0重磅发布,利剑出鞘,一统江湖 + +1.样式修复 +## 2.0.26(2022-01-28) +# uView2.0重磅发布,利剑出鞘,一统江湖 + +1.样式修复 +## 2.0.25(2022-01-27) +# uView2.0重磅发布,利剑出鞘,一统江湖 + +1. 修复text组件mode=price时,可能会导致精度错误的问题 +2. 添加$u.setConfig()方法,可设置uView内置的config, props, zIndex, color属性,详见:[修改uView内置配置方案](https://uviewui.com/components/setting.html#%E9%BB%98%E8%AE%A4%E5%8D%95%E4%BD%8D%E9%85%8D%E7%BD%AE) +3. 优化form组件在errorType=toast时,如果输入错误页面会有抖动的问题 +4. 修复$u.addUnit()对配置默认单位可能无效的问题 +## 2.0.24(2022-01-25) +# uView2.0重磅发布,利剑出鞘,一统江湖 + +1. 修复swiper在current指定非0时缩放有误 +2. 修复u-icon添加stop属性的时候报错 +3. 优化遗留的通过正则判断rpx单位的问题 +4. 优化Layout布局 vue使用gutter时,会超出固定区域 +5. 优化search组件高度单位问题(rpx -> px) +6. 修复u-image slot 加载和错误的图片失去了高度 +7. 修复u-index-list中footer插槽与header插槽存在性判断错误 +8. 修复部分机型下u-popup关闭时会闪烁 +9. 修复u-image在nvue-app下失去宽高 +10. 修复u-popup运行报错 +11. 修复u-tooltip报错 +12. 修复box-sizing在app下的警告 +13. 修复u-navbar在小程序中报运行时错误 +14. 其他修复 +## 2.0.23(2022-01-24) +# uView2.0重磅发布,利剑出鞘,一统江湖 + +1. 修复image组件在hx3.3.9的nvue下可能会显示异常的问题 +2. 修复col组件gutter参数带rpx单位处理不正确的问题 +3. 修复text组件单行时无法显示省略号的问题 +4. navbar添加titleStyle参数 +5. 升级到hx3.3.9可消除nvue下控制台样式警告的问题 +## 2.0.22(2022-01-19) +# uView2.0重磅发布,利剑出鞘,一统江湖 + +1. $u.page()方法优化,避免在特殊场景可能报错的问题 +2. picker组件添加immediateChange参数 +3. 新增$u.pages()方法 +## 2.0.21(2022-01-19) +# uView2.0重磅发布,利剑出鞘,一统江湖 + +1. 优化:form组件在用户设置rules的时候提示用户model必传 +2. 优化遗留的通过正则判断rpx单位的问题 +3. 修复微信小程序环境中tabbar组件开启safeAreaInsetBottom属性后,placeholder高度填充不正确 +4. 修复swiper在current指定非0时缩放有误 +5. 修复u-icon添加stop属性的时候报错 +6. 修复upload组件在accept=all的时候没有作用 +7. 修复在text组件mode为phone时call属性无效的问题 +8. 处理u-form clearValidate方法 +9. 其他修复 +## 2.0.20(2022-01-14) +# uView2.0重磅发布,利剑出鞘,一统江湖 + +1. 修复calendar默认会选择一个日期,如果直接点确定的话,无法取到值的问题 +2. 修复Slider缺少disabled props 还有注释 +3. 修复u-notice-bar点击事件无法拿到index索引值的问题 +4. 修复u-collapse-item在vue文件下,app端自定义插槽不生效的问题 +5. 优化头像为空时显示默认头像 +6. 修复图片地址赋值后判断加载状态为完成问题 +7. 修复日历滚动到默认日期月份区域 +8. search组件暴露点击左边icon事件 +9. 修复u-form clearValidate方法不生效 +10. upload h5端增加返回文件参数(文件的name参数) +11. 处理upload选择文件后url为blob类型无法预览的问题 +12. u-code-input 修复输入框没有往左移出一半屏幕 +13. 修复Upload上传 disabled为true时,控制台报hoverClass类型错误 +14. 临时处理ios app下grid点击坍塌问题 +15. 其他修复 +## 2.0.19(2021-12-29) +# uView2.0重磅发布,利剑出鞘,一统江湖 + +1. 优化微信小程序包体积可在微信中预览,请升级HbuilderX3.3.4,同时在“运行->运行到小程序模拟器”中勾选“运行时是否压缩代码” +2. 优化微信小程序setData性能,处理某些方法如$u.route()无法在模板中使用的问题 +3. navbar添加autoBack参数 +4. 允许avatar组件的事件冒泡 +5. 修复cell组件报错问题 +6. 其他修复 +## 2.0.18(2021-12-28) +# uView2.0重磅发布,利剑出鞘,一统江湖 + +1. 修复app端编译报错问题 +2. 重新处理微信小程序端setData过大的性能问题 +3. 修复边框问题 +4. 修复最大最小月份不大于0则没有数据出现的问题 +5. 修复SwipeAction微信小程序端无法上下滑动问题 +6. 修复input的placeholder在小程序端默认显示为true问题 +7. 修复divider组件click事件无效问题 +8. 修复u-code-input maxlength 属性值为 String 类型时显示异常 +9. 修复当 grid只有 1到2时 在小程序端algin设置无效的问题 +10. 处理form-item的label为top时,取消错误提示的左边距 +11. 其他修复 +## 2.0.17(2021-12-26) +## uView正在参与开源中国的“年度最佳项目”评选,之前投过票的现在也可以投票,恳请同学们投一票,[点此帮助uView](https://www.oschina.net/project/top_cn_2021/?id=583) + +# uView2.0重磅发布,利剑出鞘,一统江湖 + +1. 解决HBuilderX3.3.3.20211225版本导致的样式问题 +2. calendar日历添加monthNum参数 +3. navbar添加center slot +## 2.0.16(2021-12-25) +## uView正在参与开源中国的“年度最佳项目”评选,之前投过票的现在也可以投票,恳请同学们投一票,[点此帮助uView](https://www.oschina.net/project/top_cn_2021/?id=583) + +# uView2.0重磅发布,利剑出鞘,一统江湖 + +1. 解决微信小程序setData性能问题 +2. 修复count-down组件change事件不触发问题 +## 2.0.15(2021-12-21) +## uView正在参与开源中国的“年度最佳项目”评选,之前投过票的现在也可以投票,恳请同学们投一票,[点此帮助uView](https://www.oschina.net/project/top_cn_2021/?id=583) + +# uView2.0重磅发布,利剑出鞘,一统江湖 + +1. 修复Cell单元格titleWidth无效 +2. 修复cheakbox组件ischecked不更新 +3. 修复keyboard是否显示"."按键默认值问题 +4. 修复number-keyboard是否显示键盘的"."符号问题 +5. 修复Input输入框 readonly无效 +6. 修复u-avatar 导致打包app、H5时候报错问题 +7. 修复Upload上传deletable无效 +8. 修复upload当设置maxSize时无效的问题 +9. 修复tabs lineWidth传入带单位的字符串的时候偏移量计算错误问题 +10. 修复rate组件在有padding的view内,显示的星星位置和可触摸区域不匹配,无法正常选中星星 +## 2.0.13(2021-12-14) +## [点击加群交流反馈:364463526](https://jq.qq.com/?_chanwv=1027&k=mCxS3TGY) + +# uView2.0重磅发布,利剑出鞘,一统江湖 + +1. 修复配置默认单位为rpx可能会导致自定义导航栏高度异常的问题 +## 2.0.12(2021-12-14) +## [点击加群交流反馈:364463526](https://jq.qq.com/?_chanwv=1027&k=mCxS3TGY) + +# uView2.0重磅发布,利剑出鞘,一统江湖 + +1. 修复tabs组件在vue环境下划线消失的问题 +2. 修复upload组件在安卓小程序无法选择视频的问题 +3. 添加uni.$u.config.unit配置,用于配置参数默认单位,详见:[默认单位配置](https://www.uviewui.com/components/setting.html#%E9%BB%98%E8%AE%A4%E5%8D%95%E4%BD%8D%E9%85%8D%E7%BD%AE) +4. 修复textarea组件在没绑定v-model时,字符统计不生效问题 +5. 修复nvue下控制是否出现滚动条失效问题 +## 2.0.11(2021-12-13) +## [点击加群交流反馈:364463526](https://jq.qq.com/?_chanwv=1027&k=mCxS3TGY) + +# uView2.0重磅发布,利剑出鞘,一统江湖 + +1. text组件align参数无效的问题 +2. subsection组件添加keyName参数 +3. upload组件无法判断[Object file]类型的问题 +4. 处理notify层级过低问题 +5. codeInput组件添加disabledDot参数 +6. 处理actionSheet组件round参数无效的问题 +7. calendar组件添加round参数用于控制圆角值 +8. 处理swipeAction组件在vue环境下默认被打开的问题 +9. button组件的throttleTime节流参数无效的问题 +10. 解决u-notify手动关闭方法close()无效的问题 +11. input组件readonly不生效问题 +12. tag组件type参数为info不生效问题 +## 2.0.10(2021-12-08) +## [点击加群交流反馈:364463526](https://jq.qq.com/?_chanwv=1027&k=mCxS3TGY) + +# uView2.0重磅发布,利剑出鞘,一统江湖 + +1. 修复button sendMessagePath属性不生效 +2. 修复DatetimePicker选择器title无效 +3. 修复u-toast设置loading=true不生效 +4. 修复u-text金额模式传0报错 +5. 修复u-toast组件的icon属性配置不生效 +6. button的icon在特殊场景下的颜色优化 +7. IndexList优化,增加# +## 2.0.9(2021-12-01) +## [点击加群交流反馈:232041042](https://jq.qq.com/?_wv=1027&k=KnbeceDU) + +# uView2.0重磅发布,利剑出鞘,一统江湖 + +1. 优化swiper的height支持100%值(仅vue有效),修复嵌入视频时click事件无法触发的问题 +2. 优化tabs组件对list值为空的判断,或者动态变化list时重新计算相关尺寸的问题 +3. 优化datetime-picker组件逻辑,让其后续打开的默认值为上一次的选中值,需要通过v-model绑定值才有效 +4. 修复upload内嵌在其他组件中,选择图片可能不会换行的问题 +## 2.0.8(2021-12-01) +## [点击加群交流反馈:232041042](https://jq.qq.com/?_wv=1027&k=KnbeceDU) + +# uView2.0重磅发布,利剑出鞘,一统江湖 + +1. 修复toast的position参数无效问题 +2. 处理input在ios nvue上无法获得焦点的问题 +3. avatar-group组件添加extraValue参数,让剩余展示数量可手动控制 +4. tabs组件添加keyName参数用于配置从对象中读取的键名 +5. 处理text组件名字脱敏默认配置无效的问题 +6. 处理picker组件item文本太长换行问题 +## 2.0.7(2021-11-30) +## [点击加群交流反馈:232041042](https://jq.qq.com/?_wv=1027&k=KnbeceDU) + +# uView2.0重磅发布,利剑出鞘,一统江湖 + +1. 修复radio和checkbox动态改变v-model无效的问题。 +2. 优化form规则validator在微信小程序用法 +3. 修复backtop组件mode参数在微信小程序无效的问题 +4. 处理Album的previewFullImage属性无效的问题 +5. 处理u-datetime-picker组件mode='time'在选择改变时间时,控制台报错的问题 +## 2.0.6(2021-11-27) +## [点击加群交流反馈:232041042](https://jq.qq.com/?_wv=1027&k=KnbeceDU) + +# uView2.0重磅发布,利剑出鞘,一统江湖 + +1. 处理tag组件在vue下边框无效的问题。 +2. 处理popup组件圆角参数可能无效的问题。 +3. 处理tabs组件lineColor参数可能无效的问题。 +4. propgress组件在值很小时,显示异常的问题。 +## 2.0.5(2021-11-25) +## [点击加群交流反馈:232041042](https://jq.qq.com/?_wv=1027&k=KnbeceDU) + +# uView2.0重磅发布,利剑出鞘,一统江湖 + +1. calendar在vue下显示异常问题。 +2. form组件labelPosition和errorType参数无效的问题 +3. input组件inputAlign无效的问题 +4. 其他一些修复 +## 2.0.4(2021-11-23) +## [点击加群交流反馈:232041042](https://jq.qq.com/?_wv=1027&k=KnbeceDU) + +# uView2.0重磅发布,利剑出鞘,一统江湖 + +0. input组件缺失@confirm事件,以及subfix和prefix无效问题 +1. component.scss文件样式在vue下干扰全局布局问题 +2. 修复subsection在vue环境下表现异常的问题 +3. tag组件的bgColor等参数无效的问题 +4. upload组件不换行的问题 +5. 其他的一些修复处理 +## 2.0.3(2021-11-16) +## [点击加群交流反馈:1129077272](https://jq.qq.com/?_wv=1027&k=KnbeceDU) + +# uView2.0重磅发布,利剑出鞘,一统江湖 + +1. uView2.0已实现全面兼容nvue +2. uView2.0对1.x进行了架构重构,细节和性能都有极大提升 +3. 目前uView2.0为公测阶段,相关细节可能会有变动 +4. 我们写了一份与1.x的对比指南,详见[对比1.x](https://www.uviewui.com/components/diff1.x.html) +5. 处理modal的confirm回调事件拼写错误问题 +6. 处理input组件@input事件参数错误问题 +7. 其他一些修复 +## 2.0.2(2021-11-16) +## [点击加群交流反馈:1129077272](https://jq.qq.com/?_wv=1027&k=KnbeceDU) + +# uView2.0重磅发布,利剑出鞘,一统江湖 + +1. uView2.0已实现全面兼容nvue +2. uView2.0对1.x进行了架构重构,细节和性能都有极大提升 +3. 目前uView2.0为公测阶段,相关细节可能会有变动 +4. 我们写了一份与1.x的对比指南,详见[对比1.x](https://www.uviewui.com/components/diff1.x.html) +5. 修复input组件formatter参数缺失问题 +6. 优化loading-icon组件的scss写法问题,防止不兼容新版本scss +## 2.0.0(2020-11-15) +## [点击加群交流反馈:1129077272](https://jq.qq.com/?_wv=1027&k=KnbeceDU) + +# uView2.0重磅发布,利剑出鞘,一统江湖 + +1. uView2.0已实现全面兼容nvue +2. uView2.0对1.x进行了架构重构,细节和性能都有极大提升 +3. 目前uView2.0为公测阶段,相关细节可能会有变动 +4. 我们写了一份与1.x的对比指南,详见[对比1.x](https://www.uviewui.com/components/diff1.x.html) +5. 修复input组件formatter参数缺失问题 + + diff --git a/uni_modules/uview-ui/components/u--form/u--form.vue b/uni_modules/uview-ui/components/u--form/u--form.vue new file mode 100644 index 0000000..fdfc212 --- /dev/null +++ b/uni_modules/uview-ui/components/u--form/u--form.vue @@ -0,0 +1,78 @@ + + + diff --git a/uni_modules/uview-ui/components/u--image/u--image.vue b/uni_modules/uview-ui/components/u--image/u--image.vue new file mode 100644 index 0000000..21b7ab1 --- /dev/null +++ b/uni_modules/uview-ui/components/u--image/u--image.vue @@ -0,0 +1,47 @@ + + + \ No newline at end of file diff --git a/uni_modules/uview-ui/components/u--input/u--input.vue b/uni_modules/uview-ui/components/u--input/u--input.vue new file mode 100644 index 0000000..1e58b01 --- /dev/null +++ b/uni_modules/uview-ui/components/u--input/u--input.vue @@ -0,0 +1,73 @@ + + + \ No newline at end of file diff --git a/uni_modules/uview-ui/components/u--text/u--text.vue b/uni_modules/uview-ui/components/u--text/u--text.vue new file mode 100644 index 0000000..44ee52a --- /dev/null +++ b/uni_modules/uview-ui/components/u--text/u--text.vue @@ -0,0 +1,44 @@ + + + diff --git a/uni_modules/uview-ui/components/u--textarea/u--textarea.vue b/uni_modules/uview-ui/components/u--textarea/u--textarea.vue new file mode 100644 index 0000000..f4df0b9 --- /dev/null +++ b/uni_modules/uview-ui/components/u--textarea/u--textarea.vue @@ -0,0 +1,48 @@ + + + diff --git a/uni_modules/uview-ui/components/u-action-sheet/props.js b/uni_modules/uview-ui/components/u-action-sheet/props.js new file mode 100644 index 0000000..e96e04f --- /dev/null +++ b/uni_modules/uview-ui/components/u-action-sheet/props.js @@ -0,0 +1,54 @@ +export default { + props: { + // 操作菜单是否展示 (默认false) + show: { + type: Boolean, + default: uni.$u.props.actionSheet.show + }, + // 标题 + title: { + type: String, + default: uni.$u.props.actionSheet.title + }, + // 选项上方的描述信息 + description: { + type: String, + default: uni.$u.props.actionSheet.description + }, + // 数据 + actions: { + type: Array, + default: uni.$u.props.actionSheet.actions + }, + // 取消按钮的文字,不为空时显示按钮 + cancelText: { + type: String, + default: uni.$u.props.actionSheet.cancelText + }, + // 点击某个菜单项时是否关闭弹窗 + closeOnClickAction: { + type: Boolean, + default: uni.$u.props.actionSheet.closeOnClickAction + }, + // 处理底部安全区(默认true) + safeAreaInsetBottom: { + type: Boolean, + default: uni.$u.props.actionSheet.safeAreaInsetBottom + }, + // 小程序的打开方式 + openType: { + type: String, + default: uni.$u.props.actionSheet.openType + }, + // 点击遮罩是否允许关闭 (默认true) + closeOnClickOverlay: { + type: Boolean, + default: uni.$u.props.actionSheet.closeOnClickOverlay + }, + // 圆角值 + round: { + type: [Boolean, String, Number], + default: uni.$u.props.actionSheet.round + } + } +} diff --git a/uni_modules/uview-ui/components/u-action-sheet/u-action-sheet.vue b/uni_modules/uview-ui/components/u-action-sheet/u-action-sheet.vue new file mode 100644 index 0000000..26d5d8d --- /dev/null +++ b/uni_modules/uview-ui/components/u-action-sheet/u-action-sheet.vue @@ -0,0 +1,278 @@ + + + + + + diff --git a/uni_modules/uview-ui/components/u-album/props.js b/uni_modules/uview-ui/components/u-album/props.js new file mode 100644 index 0000000..75cdb37 --- /dev/null +++ b/uni_modules/uview-ui/components/u-album/props.js @@ -0,0 +1,59 @@ +export default { + props: { + // 图片地址,Array|Array形式 + urls: { + type: Array, + default: uni.$u.props.album.urls + }, + // 指定从数组的对象元素中读取哪个属性作为图片地址 + keyName: { + type: String, + default: uni.$u.props.album.keyName + }, + // 单图时,图片长边的长度 + singleSize: { + type: [String, Number], + default: uni.$u.props.album.singleSize + }, + // 多图时,图片边长 + multipleSize: { + type: [String, Number], + default: uni.$u.props.album.multipleSize + }, + // 多图时,图片水平和垂直之间的间隔 + space: { + type: [String, Number], + default: uni.$u.props.album.space + }, + // 单图时,图片缩放裁剪的模式 + singleMode: { + type: String, + default: uni.$u.props.album.singleMode + }, + // 多图时,图片缩放裁剪的模式 + multipleMode: { + type: String, + default: uni.$u.props.album.multipleMode + }, + // 最多展示的图片数量,超出时最后一个位置将会显示剩余图片数量 + maxCount: { + type: [String, Number], + default: uni.$u.props.album.maxCount + }, + // 是否可以预览图片 + previewFullImage: { + type: Boolean, + default: uni.$u.props.album.previewFullImage + }, + // 每行展示图片数量,如设置,singleSize和multipleSize将会无效 + rowCount: { + type: [String, Number], + default: uni.$u.props.album.rowCount + }, + // 超出maxCount时是否显示查看更多的提示 + showMore: { + type: Boolean, + default: uni.$u.props.album.showMore + } + } +} diff --git a/uni_modules/uview-ui/components/u-album/u-album.vue b/uni_modules/uview-ui/components/u-album/u-album.vue new file mode 100644 index 0000000..687e2d5 --- /dev/null +++ b/uni_modules/uview-ui/components/u-album/u-album.vue @@ -0,0 +1,259 @@ + + + + + \ No newline at end of file diff --git a/uni_modules/uview-ui/components/u-alert/props.js b/uni_modules/uview-ui/components/u-alert/props.js new file mode 100644 index 0000000..4297e2c --- /dev/null +++ b/uni_modules/uview-ui/components/u-alert/props.js @@ -0,0 +1,44 @@ +export default { + props: { + // 显示文字 + title: { + type: String, + default: uni.$u.props.alert.title + }, + // 主题,success/warning/info/error + type: { + type: String, + default: uni.$u.props.alert.type + }, + // 辅助性文字 + description: { + type: String, + default: uni.$u.props.alert.description + }, + // 是否可关闭 + closable: { + type: Boolean, + default: uni.$u.props.alert.closable + }, + // 是否显示图标 + showIcon: { + type: Boolean, + default: uni.$u.props.alert.showIcon + }, + // 浅或深色调,light-浅色,dark-深色 + effect: { + type: String, + default: uni.$u.props.alert.effect + }, + // 文字是否居中 + center: { + type: Boolean, + default: uni.$u.props.alert.center + }, + // 字体大小 + fontSize: { + type: [String, Number], + default: uni.$u.props.alert.fontSize + } + } +} diff --git a/uni_modules/uview-ui/components/u-alert/u-alert.vue b/uni_modules/uview-ui/components/u-alert/u-alert.vue new file mode 100644 index 0000000..81f7d43 --- /dev/null +++ b/uni_modules/uview-ui/components/u-alert/u-alert.vue @@ -0,0 +1,243 @@ + + + + + diff --git a/uni_modules/uview-ui/components/u-avatar-group/props.js b/uni_modules/uview-ui/components/u-avatar-group/props.js new file mode 100644 index 0000000..58b42ac --- /dev/null +++ b/uni_modules/uview-ui/components/u-avatar-group/props.js @@ -0,0 +1,52 @@ +export default { + props: { + // 头像图片组 + urls: { + type: Array, + default: uni.$u.props.avatarGroup.urls + }, + // 最多展示的头像数量 + maxCount: { + type: [String, Number], + default: uni.$u.props.avatarGroup.maxCount + }, + // 头像形状 + shape: { + type: String, + default: uni.$u.props.avatarGroup.shape + }, + // 图片裁剪模式 + mode: { + type: String, + default: uni.$u.props.avatarGroup.mode + }, + // 超出maxCount时是否显示查看更多的提示 + showMore: { + type: Boolean, + default: uni.$u.props.avatarGroup.showMore + }, + // 头像大小 + size: { + type: [String, Number], + default: uni.$u.props.avatarGroup.size + }, + // 指定从数组的对象元素中读取哪个属性作为图片地址 + keyName: { + type: String, + default: uni.$u.props.avatarGroup.keyName + }, + // 头像之间的遮挡比例 + gap: { + type: [String, Number], + validator(value) { + return value >= 0 && value <= 1 + }, + default: uni.$u.props.avatarGroup.gap + }, + // 需额外显示的值 + extraValue: { + type: [Number, String], + default: uni.$u.props.avatarGroup.extraValue + } + } +} diff --git a/uni_modules/uview-ui/components/u-avatar-group/u-avatar-group.vue b/uni_modules/uview-ui/components/u-avatar-group/u-avatar-group.vue new file mode 100644 index 0000000..7e996d7 --- /dev/null +++ b/uni_modules/uview-ui/components/u-avatar-group/u-avatar-group.vue @@ -0,0 +1,103 @@ + + + + + diff --git a/uni_modules/uview-ui/components/u-avatar/props.js b/uni_modules/uview-ui/components/u-avatar/props.js new file mode 100644 index 0000000..34ca0f2 --- /dev/null +++ b/uni_modules/uview-ui/components/u-avatar/props.js @@ -0,0 +1,78 @@ +export default { + props: { + // 头像图片路径(不能为相对路径) + src: { + type: String, + default: uni.$u.props.avatar.src + }, + // 头像形状,circle-圆形,square-方形 + shape: { + type: String, + default: uni.$u.props.avatar.shape + }, + // 头像尺寸 + size: { + type: [String, Number], + default: uni.$u.props.avatar.size + }, + // 裁剪模式 + mode: { + type: String, + default: uni.$u.props.avatar.mode + }, + // 显示的文字 + text: { + type: String, + default: uni.$u.props.avatar.text + }, + // 背景色 + bgColor: { + type: String, + default: uni.$u.props.avatar.bgColor + }, + // 文字颜色 + color: { + type: String, + default: uni.$u.props.avatar.color + }, + // 文字大小 + fontSize: { + type: [String, Number], + default: uni.$u.props.avatar.fontSize + }, + // 显示的图标 + icon: { + type: String, + default: uni.$u.props.avatar.icon + }, + // 显示小程序头像,只对百度,微信,QQ小程序有效 + mpAvatar: { + type: Boolean, + default: uni.$u.props.avatar.mpAvatar + }, + // 是否使用随机背景色 + randomBgColor: { + type: Boolean, + default: uni.$u.props.avatar.randomBgColor + }, + // 加载失败的默认头像(组件有内置默认图片) + defaultUrl: { + type: String, + default: uni.$u.props.avatar.defaultUrl + }, + // 如果配置了randomBgColor为true,且配置了此值,则从默认的背景色数组中取出对应索引的颜色值,取值0-19之间 + colorIndex: { + type: [String, Number], + // 校验参数规则,索引在0-19之间 + validator(n) { + return uni.$u.test.range(n, [0, 19]) || n === '' + }, + default: uni.$u.props.avatar.colorIndex + }, + // 组件标识符 + name: { + type: String, + default: uni.$u.props.avatar.name + } + } +} diff --git a/uni_modules/uview-ui/components/u-avatar/u-avatar.vue b/uni_modules/uview-ui/components/u-avatar/u-avatar.vue new file mode 100644 index 0000000..3319be5 --- /dev/null +++ b/uni_modules/uview-ui/components/u-avatar/u-avatar.vue @@ -0,0 +1,172 @@ + + + + + diff --git a/uni_modules/uview-ui/components/u-back-top/props.js b/uni_modules/uview-ui/components/u-back-top/props.js new file mode 100644 index 0000000..6c702c2 --- /dev/null +++ b/uni_modules/uview-ui/components/u-back-top/props.js @@ -0,0 +1,54 @@ +export default { + props: { + // 返回顶部的形状,circle-圆形,square-方形 + mode: { + type: String, + default: uni.$u.props.backtop.mode + }, + // 自定义图标 + icon: { + type: String, + default: uni.$u.props.backtop.icon + }, + // 提示文字 + text: { + type: String, + default: uni.$u.props.backtop.text + }, + // 返回顶部滚动时间 + duration: { + type: [String, Number], + default: uni.$u.props.backtop.duration + }, + // 滚动距离 + scrollTop: { + type: [String, Number], + default: uni.$u.props.backtop.scrollTop + }, + // 距离顶部多少距离显示,单位px + top: { + type: [String, Number], + default: uni.$u.props.backtop.top + }, + // 返回顶部按钮到底部的距离,单位px + bottom: { + type: [String, Number], + default: uni.$u.props.backtop.bottom + }, + // 返回顶部按钮到右边的距离,单位px + right: { + type: [String, Number], + default: uni.$u.props.backtop.right + }, + // 层级 + zIndex: { + type: [String, Number], + default: uni.$u.props.backtop.zIndex + }, + // 图标的样式,对象形式 + iconStyle: { + type: Object, + default: uni.$u.props.backtop.iconStyle + } + } +} diff --git a/uni_modules/uview-ui/components/u-back-top/u-back-top.vue b/uni_modules/uview-ui/components/u-back-top/u-back-top.vue new file mode 100644 index 0000000..2d07566 --- /dev/null +++ b/uni_modules/uview-ui/components/u-back-top/u-back-top.vue @@ -0,0 +1,129 @@ + + + + + diff --git a/uni_modules/uview-ui/components/u-badge/props.js b/uni_modules/uview-ui/components/u-badge/props.js new file mode 100644 index 0000000..74c032c --- /dev/null +++ b/uni_modules/uview-ui/components/u-badge/props.js @@ -0,0 +1,72 @@ +export default { + props: { + // 是否显示圆点 + isDot: { + type: Boolean, + default: uni.$u.props.badge.isDot + }, + // 显示的内容 + value: { + type: [Number, String], + default: uni.$u.props.badge.value + }, + // 是否显示 + show: { + type: Boolean, + default: uni.$u.props.badge.show + }, + // 最大值,超过最大值会显示 '{max}+' + max: { + type: [Number, String], + default: uni.$u.props.badge.max + }, + // 主题类型,error|warning|success|primary + type: { + type: String, + default: uni.$u.props.badge.type + }, + // 当数值为 0 时,是否展示 Badge + showZero: { + type: Boolean, + default: uni.$u.props.badge.showZero + }, + // 背景颜色,优先级比type高,如设置,type参数会失效 + bgColor: { + type: [String, null], + default: uni.$u.props.badge.bgColor + }, + // 字体颜色 + color: { + type: [String, null], + default: uni.$u.props.badge.color + }, + // 徽标形状,circle-四角均为圆角,horn-左下角为直角 + shape: { + type: String, + default: uni.$u.props.badge.shape + }, + // 设置数字的显示方式,overflow|ellipsis|limit + // overflow会根据max字段判断,超出显示`${max}+` + // ellipsis会根据max判断,超出显示`${max}...` + // limit会依据1000作为判断条件,超出1000,显示`${value/1000}K`,比如2.2k、3.34w,最多保留2位小数 + numberType: { + type: String, + default: uni.$u.props.badge.numberType + }, + // 设置badge的位置偏移,格式为 [x, y],也即设置的为top和right的值,absolute为true时有效 + offset: { + type: Array, + default: uni.$u.props.badge.offset + }, + // 是否反转背景和字体颜色 + inverted: { + type: Boolean, + default: uni.$u.props.badge.inverted + }, + // 是否绝对定位 + absolute: { + type: Boolean, + default: uni.$u.props.badge.absolute + } + } +} diff --git a/uni_modules/uview-ui/components/u-badge/u-badge.vue b/uni_modules/uview-ui/components/u-badge/u-badge.vue new file mode 100644 index 0000000..53cfc81 --- /dev/null +++ b/uni_modules/uview-ui/components/u-badge/u-badge.vue @@ -0,0 +1,171 @@ + + + + + diff --git a/uni_modules/uview-ui/components/u-button/nvue.scss b/uni_modules/uview-ui/components/u-button/nvue.scss new file mode 100644 index 0000000..490db7d --- /dev/null +++ b/uni_modules/uview-ui/components/u-button/nvue.scss @@ -0,0 +1,46 @@ +$u-button-active-opacity:0.75 !default; +$u-button-loading-text-margin-left:4px !default; +$u-button-text-color: #FFFFFF !default; +$u-button-text-plain-error-color:$u-error !default; +$u-button-text-plain-warning-color:$u-warning !default; +$u-button-text-plain-success-color:$u-success !default; +$u-button-text-plain-info-color:$u-info !default; +$u-button-text-plain-primary-color:$u-primary !default; +.u-button { + &--active { + opacity: $u-button-active-opacity; + } + + &--active--plain { + background-color: rgb(217, 217, 217); + } + + &__loading-text { + margin-left:$u-button-loading-text-margin-left; + } + + &__text, + &__loading-text { + color:$u-button-text-color; + } + + &__text--plain--error { + color:$u-button-text-plain-error-color; + } + + &__text--plain--warning { + color:$u-button-text-plain-warning-color; + } + + &__text--plain--success{ + color:$u-button-text-plain-success-color; + } + + &__text--plain--info { + color:$u-button-text-plain-info-color; + } + + &__text--plain--primary { + color:$u-button-text-plain-primary-color; + } +} \ No newline at end of file diff --git a/uni_modules/uview-ui/components/u-button/props.js b/uni_modules/uview-ui/components/u-button/props.js new file mode 100644 index 0000000..07fd844 --- /dev/null +++ b/uni_modules/uview-ui/components/u-button/props.js @@ -0,0 +1,161 @@ +/* + * @Author : LQ + * @Description : + * @version : 1.0 + * @Date : 2021-08-16 10:04:04 + * @LastAuthor : LQ + * @lastTime : 2021-08-16 10:04:24 + * @FilePath : /u-view2.0/uview-ui/components/u-button/props.js + */ +export default { + props: { + // 是否细边框 + hairline: { + type: Boolean, + default: uni.$u.props.button.hairline + }, + // 按钮的预置样式,info,primary,error,warning,success + type: { + type: String, + default: uni.$u.props.button.type + }, + // 按钮尺寸,large,normal,small,mini + size: { + type: String, + default: uni.$u.props.button.size + }, + // 按钮形状,circle(两边为半圆),square(带圆角) + shape: { + type: String, + default: uni.$u.props.button.shape + }, + // 按钮是否镂空 + plain: { + type: Boolean, + default: uni.$u.props.button.plain + }, + // 是否禁止状态 + disabled: { + type: Boolean, + default: uni.$u.props.button.disabled + }, + // 是否加载中 + loading: { + type: Boolean, + default: uni.$u.props.button.loading + }, + // 加载中提示文字 + loadingText: { + type: [String, Number], + default: uni.$u.props.button.loadingText + }, + // 加载状态图标类型 + loadingMode: { + type: String, + default: uni.$u.props.button.loadingMode + }, + // 加载图标大小 + loadingSize: { + type: [String, Number], + default: uni.$u.props.button.loadingSize + }, + // 开放能力,具体请看uniapp稳定关于button组件部分说明 + // https://uniapp.dcloud.io/component/button + openType: { + type: String, + default: uni.$u.props.button.openType + }, + // 用于
组件,点击分别会触发 组件的 submit/reset 事件 + // 取值为submit(提交表单),reset(重置表单) + formType: { + type: String, + default: uni.$u.props.button.formType + }, + // 打开 APP 时,向 APP 传递的参数,open-type=launchApp时有效 + // 只微信小程序、QQ小程序有效 + appParameter: { + type: String, + default: uni.$u.props.button.appParameter + }, + // 指定是否阻止本节点的祖先节点出现点击态,微信小程序有效 + hoverStopPropagation: { + type: Boolean, + default: uni.$u.props.button.hoverStopPropagation + }, + // 指定返回用户信息的语言,zh_CN 简体中文,zh_TW 繁体中文,en 英文。只微信小程序有效 + lang: { + type: String, + default: uni.$u.props.button.lang + }, + // 会话来源,open-type="contact"时有效。只微信小程序有效 + sessionFrom: { + type: String, + default: uni.$u.props.button.sessionFrom + }, + // 会话内消息卡片标题,open-type="contact"时有效 + // 默认当前标题,只微信小程序有效 + sendMessageTitle: { + type: String, + default: uni.$u.props.button.sendMessageTitle + }, + // 会话内消息卡片点击跳转小程序路径,open-type="contact"时有效 + // 默认当前分享路径,只微信小程序有效 + sendMessagePath: { + type: String, + default: uni.$u.props.button.sendMessagePath + }, + // 会话内消息卡片图片,open-type="contact"时有效 + // 默认当前页面截图,只微信小程序有效 + sendMessageImg: { + type: String, + default: uni.$u.props.button.sendMessageImg + }, + // 是否显示会话内消息卡片,设置此参数为 true,用户进入客服会话会在右下角显示"可能要发送的小程序"提示, + // 用户点击后可以快速发送小程序消息,open-type="contact"时有效 + showMessageCard: { + type: Boolean, + default: uni.$u.props.button.showMessageCard + }, + // 额外传参参数,用于小程序的data-xxx属性,通过target.dataset.name获取 + dataName: { + type: String, + default: uni.$u.props.button.dataName + }, + // 节流,一定时间内只能触发一次 + throttleTime: { + type: [String, Number], + default: uni.$u.props.button.throttleTime + }, + // 按住后多久出现点击态,单位毫秒 + hoverStartTime: { + type: [String, Number], + default: uni.$u.props.button.hoverStartTime + }, + // 手指松开后点击态保留时间,单位毫秒 + hoverStayTime: { + type: [String, Number], + default: uni.$u.props.button.hoverStayTime + }, + // 按钮文字,之所以通过props传入,是因为slot传入的话 + // nvue中无法控制文字的样式 + text: { + type: [String, Number], + default: uni.$u.props.button.text + }, + // 按钮图标 + icon: { + type: String, + default: uni.$u.props.button.icon + }, + // 按钮图标 + iconColor: { + type: String, + default: uni.$u.props.button.icon + }, + // 按钮颜色,支持传入linear-gradient渐变色 + color: { + type: String, + default: uni.$u.props.button.color + } + } +} diff --git a/uni_modules/uview-ui/components/u-button/u-button.vue b/uni_modules/uview-ui/components/u-button/u-button.vue new file mode 100644 index 0000000..5494351 --- /dev/null +++ b/uni_modules/uview-ui/components/u-button/u-button.vue @@ -0,0 +1,490 @@ + + + + + diff --git a/uni_modules/uview-ui/components/u-button/vue.scss b/uni_modules/uview-ui/components/u-button/vue.scss new file mode 100644 index 0000000..32019b2 --- /dev/null +++ b/uni_modules/uview-ui/components/u-button/vue.scss @@ -0,0 +1,80 @@ +// nvue下hover-class无效 +$u-button-before-top:50% !default; +$u-button-before-left:50% !default; +$u-button-before-width:100% !default; +$u-button-before-height:100% !default; +$u-button-before-transform:translate(-50%, -50%) !default; +$u-button-before-opacity:0 !default; +$u-button-before-background-color:#000 !default; +$u-button-before-border-color:#000 !default; +$u-button-active-before-opacity:.15 !default; +$u-button-icon-margin-left:4px !default; +$u-button-plain-u-button-info-color:$u-info; +$u-button-plain-u-button-success-color:$u-success; +$u-button-plain-u-button-error-color:$u-error; +$u-button-plain-u-button-warning-color:$u-error; + +.u-button { + width: 100%; + + &__text { + white-space: nowrap; + line-height: 1; + } + + &:before { + position: absolute; + top:$u-button-before-top; + left:$u-button-before-left; + width:$u-button-before-width; + height:$u-button-before-height; + border: inherit; + border-radius: inherit; + transform:$u-button-before-transform; + opacity:$u-button-before-opacity; + content: " "; + background-color:$u-button-before-background-color; + border-color:$u-button-before-border-color; + } + + &--active { + &:before { + opacity: .15 + } + } + + &__icon+&__text:not(:empty), + &__loading-text { + margin-left:$u-button-icon-margin-left; + } + + &--plain { + &.u-button--primary { + color: $u-primary; + } + } + + &--plain { + &.u-button--info { + color:$u-button-plain-u-button-info-color; + } + } + + &--plain { + &.u-button--success { + color:$u-button-plain-u-button-success-color; + } + } + + &--plain { + &.u-button--error { + color:$u-button-plain-u-button-error-color; + } + } + + &--plain { + &.u-button--warning { + color:$u-button-plain-u-button-warning-color; + } + } +} diff --git a/uni_modules/uview-ui/components/u-calendar/header.vue b/uni_modules/uview-ui/components/u-calendar/header.vue new file mode 100644 index 0000000..dc4f7d0 --- /dev/null +++ b/uni_modules/uview-ui/components/u-calendar/header.vue @@ -0,0 +1,99 @@ + + + + + diff --git a/uni_modules/uview-ui/components/u-calendar/month.vue b/uni_modules/uview-ui/components/u-calendar/month.vue new file mode 100644 index 0000000..c20937f --- /dev/null +++ b/uni_modules/uview-ui/components/u-calendar/month.vue @@ -0,0 +1,579 @@ + + + + + diff --git a/uni_modules/uview-ui/components/u-calendar/props.js b/uni_modules/uview-ui/components/u-calendar/props.js new file mode 100644 index 0000000..2ad7bc7 --- /dev/null +++ b/uni_modules/uview-ui/components/u-calendar/props.js @@ -0,0 +1,144 @@ +export default { + props: { + // 日历顶部标题 + title: { + type: String, + default: uni.$u.props.calendar.title + }, + // 是否显示标题 + showTitle: { + type: Boolean, + default: uni.$u.props.calendar.showTitle + }, + // 是否显示副标题 + showSubtitle: { + type: Boolean, + default: uni.$u.props.calendar.showSubtitle + }, + // 日期类型选择,single-选择单个日期,multiple-可以选择多个日期,range-选择日期范围 + mode: { + type: String, + default: uni.$u.props.calendar.mode + }, + // mode=range时,第一个日期底部的提示文字 + startText: { + type: String, + default: uni.$u.props.calendar.startText + }, + // mode=range时,最后一个日期底部的提示文字 + endText: { + type: String, + default: uni.$u.props.calendar.endText + }, + // 自定义列表 + customList: { + type: Array, + default: uni.$u.props.calendar.customList + }, + // 主题色,对底部按钮和选中日期有效 + color: { + type: String, + default: uni.$u.props.calendar.color + }, + // 最小的可选日期 + minDate: { + type: [String, Number], + default: uni.$u.props.calendar.minDate + }, + // 最大可选日期 + maxDate: { + type: [String, Number], + default: uni.$u.props.calendar.maxDate + }, + // 默认选中的日期,mode为multiple或range是必须为数组格式 + defaultDate: { + type: [Array, String, Date, null], + default: uni.$u.props.calendar.defaultDate + }, + // mode=multiple时,最多可选多少个日期 + maxCount: { + type: [String, Number], + default: uni.$u.props.calendar.maxCount + }, + // 日期行高 + rowHeight: { + type: [String, Number], + default: uni.$u.props.calendar.rowHeight + }, + // 日期格式化函数 + formatter: { + type: [Function, null], + default: uni.$u.props.calendar.formatter + }, + // 是否显示农历 + showLunar: { + type: Boolean, + default: uni.$u.props.calendar.showLunar + }, + // 是否显示月份背景色 + showMark: { + type: Boolean, + default: uni.$u.props.calendar.showMark + }, + // 确定按钮的文字 + confirmText: { + type: String, + default: uni.$u.props.calendar.confirmText + }, + // 确认按钮处于禁用状态时的文字 + confirmDisabledText: { + type: String, + default: uni.$u.props.calendar.confirmDisabledText + }, + // 是否显示日历弹窗 + show: { + type: Boolean, + default: uni.$u.props.calendar.show + }, + // 是否允许点击遮罩关闭日历 + closeOnClickOverlay: { + type: Boolean, + default: uni.$u.props.calendar.closeOnClickOverlay + }, + // 是否为只读状态,只读状态下禁止选择日期 + readonly: { + type: Boolean, + default: uni.$u.props.calendar.readonly + }, + // 是否展示确认按钮 + showConfirm: { + type: Boolean, + default: uni.$u.props.calendar.showConfirm + }, + // 日期区间最多可选天数,默认无限制,mode = range时有效 + maxRange: { + type: [Number, String], + default: uni.$u.props.calendar.maxRange + }, + // 范围选择超过最多可选天数时的提示文案,mode = range时有效 + rangePrompt: { + type: String, + default: uni.$u.props.calendar.rangePrompt + }, + // 范围选择超过最多可选天数时,是否展示提示文案,mode = range时有效 + showRangePrompt: { + type: Boolean, + default: uni.$u.props.calendar.showRangePrompt + }, + // 是否允许日期范围的起止时间为同一天,mode = range时有效 + allowSameDay: { + type: Boolean, + default: uni.$u.props.calendar.allowSameDay + }, + // 圆角值 + round: { + type: [Boolean, String, Number], + default: uni.$u.props.calendar.round + }, + // 最多展示月份数量 + monthNum: { + type: [Number, String], + default: 3 + } + } +} diff --git a/uni_modules/uview-ui/components/u-calendar/u-calendar.vue b/uni_modules/uview-ui/components/u-calendar/u-calendar.vue new file mode 100644 index 0000000..511f993 --- /dev/null +++ b/uni_modules/uview-ui/components/u-calendar/u-calendar.vue @@ -0,0 +1,384 @@ + + + + + diff --git a/uni_modules/uview-ui/components/u-calendar/util.js b/uni_modules/uview-ui/components/u-calendar/util.js new file mode 100644 index 0000000..ca4736b --- /dev/null +++ b/uni_modules/uview-ui/components/u-calendar/util.js @@ -0,0 +1,85 @@ +export default { + methods: { + // 设置月份数据 + setMonth() { + // 月初是周几 + const day = dayjs(this.date).date(1).day() + const start = day == 0 ? 6 : day - 1 + + // 本月天数 + const days = dayjs(this.date).endOf('month').format('D') + + // 上个月天数 + const prevDays = dayjs(this.date).endOf('month').subtract(1, 'month').format('D') + + // 日期数据 + const arr = [] + // 清空表格 + this.month = [] + + // 添加上月数据 + arr.push( + ...new Array(start).fill(1).map((e, i) => { + const day = prevDays - start + i + 1 + + return { + value: day, + disabled: true, + date: dayjs(this.date).subtract(1, 'month').date(day).format('YYYY-MM-DD') + } + }) + ) + + // 添加本月数据 + arr.push( + ...new Array(days - 0).fill(1).map((e, i) => { + const day = i + 1 + + return { + value: day, + date: dayjs(this.date).date(day).format('YYYY-MM-DD') + } + }) + ) + + // 添加下个月 + arr.push( + ...new Array(42 - days - start).fill(1).map((e, i) => { + const day = i + 1 + + return { + value: day, + disabled: true, + date: dayjs(this.date).add(1, 'month').date(day).format('YYYY-MM-DD') + } + }) + ) + + // 分割数组 + for (let n = 0; n < arr.length; n += 7) { + this.month.push( + arr.slice(n, n + 7).map((e, i) => { + e.index = i + n + + // 自定义信息 + const custom = this.customList.find((c) => c.date == e.date) + + // 农历 + if (this.lunar) { + const { + IDayCn, + IMonthCn + } = this.getLunar(e.date) + e.lunar = IDayCn == '初一' ? IMonthCn : IDayCn + } + + return { + ...e, + ...custom + } + }) + ) + } + } + } +} diff --git a/uni_modules/uview-ui/components/u-car-keyboard/props.js b/uni_modules/uview-ui/components/u-car-keyboard/props.js new file mode 100644 index 0000000..3553647 --- /dev/null +++ b/uni_modules/uview-ui/components/u-car-keyboard/props.js @@ -0,0 +1,14 @@ +export default { + props: { + // 是否打乱键盘按键的顺序 + random: { + type: Boolean, + default: false + }, + // 输入一个中文后,是否自动切换到英文 + autoChange: { + type: Boolean, + default: false + } + } +} diff --git a/uni_modules/uview-ui/components/u-car-keyboard/u-car-keyboard.vue b/uni_modules/uview-ui/components/u-car-keyboard/u-car-keyboard.vue new file mode 100644 index 0000000..51175b5 --- /dev/null +++ b/uni_modules/uview-ui/components/u-car-keyboard/u-car-keyboard.vue @@ -0,0 +1,311 @@ + + + + + diff --git a/uni_modules/uview-ui/components/u-cell-group/props.js b/uni_modules/uview-ui/components/u-cell-group/props.js new file mode 100644 index 0000000..350ef40 --- /dev/null +++ b/uni_modules/uview-ui/components/u-cell-group/props.js @@ -0,0 +1,14 @@ +export default { + props: { + // 分组标题 + title: { + type: String, + default: uni.$u.props.cellGroup.title + }, + // 是否显示外边框 + border: { + type: Boolean, + default: uni.$u.props.cellGroup.border + } + } +} diff --git a/uni_modules/uview-ui/components/u-cell-group/u-cell-group.vue b/uni_modules/uview-ui/components/u-cell-group/u-cell-group.vue new file mode 100644 index 0000000..a9508c0 --- /dev/null +++ b/uni_modules/uview-ui/components/u-cell-group/u-cell-group.vue @@ -0,0 +1,61 @@ + + + + + + diff --git a/uni_modules/uview-ui/components/u-cell/props.js b/uni_modules/uview-ui/components/u-cell/props.js new file mode 100644 index 0000000..da03330 --- /dev/null +++ b/uni_modules/uview-ui/components/u-cell/props.js @@ -0,0 +1,110 @@ +export default { + props: { + // 标题 + title: { + type: [String, Number], + default: uni.$u.props.cell.title + }, + // 标题下方的描述信息 + label: { + type: [String, Number], + default: uni.$u.props.cell.label + }, + // 右侧的内容 + value: { + type: [String, Number], + default: uni.$u.props.cell.value + }, + // 左侧图标名称,或者图片链接(本地文件建议使用绝对地址) + icon: { + type: String, + default: uni.$u.props.cell.icon + }, + // 是否禁用cell + disabled: { + type: Boolean, + default: uni.$u.props.cell.disabled + }, + // 是否显示下边框 + border: { + type: Boolean, + default: uni.$u.props.cell.border + }, + // 内容是否垂直居中(主要是针对右侧的value部分) + center: { + type: Boolean, + default: uni.$u.props.cell.center + }, + // 点击后跳转的URL地址 + url: { + type: String, + default: uni.$u.props.cell.url + }, + // 链接跳转的方式,内部使用的是uView封装的route方法,可能会进行拦截操作 + linkType: { + type: String, + default: uni.$u.props.cell.linkType + }, + // 是否开启点击反馈(表现为点击时加上灰色背景) + clickable: { + type: Boolean, + default: uni.$u.props.cell.clickable + }, + // 是否展示右侧箭头并开启点击反馈 + isLink: { + type: Boolean, + default: uni.$u.props.cell.isLink + }, + // 是否显示表单状态下的必填星号(此组件可能会内嵌入input组件) + required: { + type: Boolean, + default: uni.$u.props.cell.required + }, + // 右侧的图标箭头 + rightIcon: { + type: String, + default: uni.$u.props.cell.rightIcon + }, + // 右侧箭头的方向,可选值为:left,up,down + arrowDirection: { + type: String, + default: uni.$u.props.cell.arrowDirection + }, + // 左侧图标样式 + iconStyle: { + type: [Object, String], + default: () => { + return uni.$u.props.cell.iconStyle + } + }, + // 右侧箭头图标的样式 + rightIconStyle: { + type: [Object, String], + default: () => { + return uni.$u.props.cell.rightIconStyle + } + }, + // 标题的样式 + titleStyle: { + type: [Object, String], + default: () => { + return uni.$u.props.cell.titleStyle + } + }, + // 单位元的大小,可选值为large + size: { + type: String, + default: uni.$u.props.cell.size + }, + // 点击cell是否阻止事件传播 + stop: { + type: Boolean, + default: uni.$u.props.cell.stop + }, + // 标识符,cell被点击时返回 + name: { + type: [Number, String], + default: uni.$u.props.cell.name + } + } +} diff --git a/uni_modules/uview-ui/components/u-cell/u-cell.vue b/uni_modules/uview-ui/components/u-cell/u-cell.vue new file mode 100644 index 0000000..b099c90 --- /dev/null +++ b/uni_modules/uview-ui/components/u-cell/u-cell.vue @@ -0,0 +1,229 @@ + + + + + diff --git a/uni_modules/uview-ui/components/u-checkbox-group/props.js b/uni_modules/uview-ui/components/u-checkbox-group/props.js new file mode 100644 index 0000000..2f818a1 --- /dev/null +++ b/uni_modules/uview-ui/components/u-checkbox-group/props.js @@ -0,0 +1,82 @@ +export default { + props: { + // 标识符 + name: { + type: String, + default: uni.$u.props.checkboxGroup.name + }, + // 绑定的值 + value: { + type: Array, + default: uni.$u.props.checkboxGroup.value + }, + // 形状,circle-圆形,square-方形 + shape: { + type: String, + default: uni.$u.props.checkboxGroup.shape + }, + // 是否禁用全部checkbox + disabled: { + type: Boolean, + default: uni.$u.props.checkboxGroup.disabled + }, + + // 选中状态下的颜色,如设置此值,将会覆盖parent的activeColor值 + activeColor: { + type: String, + default: uni.$u.props.checkboxGroup.activeColor + }, + // 未选中的颜色 + inactiveColor: { + type: String, + default: uni.$u.props.checkboxGroup.inactiveColor + }, + + // 整个组件的尺寸,默认px + size: { + type: [String, Number], + default: uni.$u.props.checkboxGroup.size + }, + // 布局方式,row-横向,column-纵向 + placement: { + type: String, + default: uni.$u.props.checkboxGroup.placement + }, + // label的字体大小,px单位 + labelSize: { + type: [String, Number], + default: uni.$u.props.checkboxGroup.labelSize + }, + // label的字体颜色 + labelColor: { + type: [String], + default: uni.$u.props.checkboxGroup.labelColor + }, + // 是否禁止点击文本操作 + labelDisabled: { + type: Boolean, + default: uni.$u.props.checkboxGroup.labelDisabled + }, + // 图标颜色 + iconColor: { + type: String, + default: uni.$u.props.checkboxGroup.iconColor + }, + // 图标的大小,单位px + iconSize: { + type: [String, Number], + default: uni.$u.props.checkboxGroup.iconSize + }, + // 勾选图标的对齐方式,left-左边,right-右边 + iconPlacement: { + type: String, + default: uni.$u.props.checkboxGroup.iconPlacement + }, + // 竖向配列时,是否显示下划线 + borderBottom: { + type: Boolean, + default: uni.$u.props.checkboxGroup.borderBottom + } + + } +} diff --git a/uni_modules/uview-ui/components/u-checkbox-group/u-checkbox-group.vue b/uni_modules/uview-ui/components/u-checkbox-group/u-checkbox-group.vue new file mode 100644 index 0000000..7a6b4fa --- /dev/null +++ b/uni_modules/uview-ui/components/u-checkbox-group/u-checkbox-group.vue @@ -0,0 +1,103 @@ + + + + + diff --git a/uni_modules/uview-ui/components/u-checkbox/props.js b/uni_modules/uview-ui/components/u-checkbox/props.js new file mode 100644 index 0000000..93f4fd9 --- /dev/null +++ b/uni_modules/uview-ui/components/u-checkbox/props.js @@ -0,0 +1,69 @@ +export default { + props: { + // checkbox的名称 + name: { + type: [String, Number, Boolean], + default: uni.$u.props.checkbox.name + }, + // 形状,square为方形,circle为圆型 + shape: { + type: String, + default: uni.$u.props.checkbox.shape + }, + // 整体的大小 + size: { + type: [String, Number], + default: uni.$u.props.checkbox.size + }, + // 是否默认选中 + checked: { + type: Boolean, + default: uni.$u.props.checkbox.checked + }, + // 是否禁用 + disabled: { + type: [String, Boolean], + default: uni.$u.props.checkbox.disabled + }, + // 选中状态下的颜色,如设置此值,将会覆盖parent的activeColor值 + activeColor: { + type: String, + default: uni.$u.props.checkbox.activeColor + }, + // 未选中的颜色 + inactiveColor: { + type: String, + default: uni.$u.props.checkbox.inactiveColor + }, + // 图标的大小,单位px + iconSize: { + type: [String, Number], + default: uni.$u.props.checkbox.iconSize + }, + // 图标颜色 + iconColor: { + type: String, + default: uni.$u.props.checkbox.iconColor + }, + // label提示文字,因为nvue下,直接slot进来的文字,由于特殊的结构,无法修改样式 + label: { + type: [String, Number], + default: uni.$u.props.checkbox.label + }, + // label的字体大小,px单位 + labelSize: { + type: [String, Number], + default: uni.$u.props.checkbox.labelSize + }, + // label的颜色 + labelColor: { + type: String, + default: uni.$u.props.checkbox.labelColor + }, + // 是否禁止点击提示语选中复选框 + labelDisabled: { + type: [String, Boolean], + default: uni.$u.props.checkbox.labelDisabled + } + } +} diff --git a/uni_modules/uview-ui/components/u-checkbox/u-checkbox.vue b/uni_modules/uview-ui/components/u-checkbox/u-checkbox.vue new file mode 100644 index 0000000..6429cca --- /dev/null +++ b/uni_modules/uview-ui/components/u-checkbox/u-checkbox.vue @@ -0,0 +1,344 @@ + + + + + diff --git a/uni_modules/uview-ui/components/u-circle-progress/props.js b/uni_modules/uview-ui/components/u-circle-progress/props.js new file mode 100644 index 0000000..d776cfb --- /dev/null +++ b/uni_modules/uview-ui/components/u-circle-progress/props.js @@ -0,0 +1,8 @@ +export default { + props: { + percentage: { + type: [String, Number], + default: uni.$u.props.circleProgress.percentage + } + } +} diff --git a/uni_modules/uview-ui/components/u-circle-progress/u-circle-progress.vue b/uni_modules/uview-ui/components/u-circle-progress/u-circle-progress.vue new file mode 100644 index 0000000..d1ee286 --- /dev/null +++ b/uni_modules/uview-ui/components/u-circle-progress/u-circle-progress.vue @@ -0,0 +1,198 @@ + + + + + diff --git a/uni_modules/uview-ui/components/u-code-input/props.js b/uni_modules/uview-ui/components/u-code-input/props.js new file mode 100644 index 0000000..0f016ee --- /dev/null +++ b/uni_modules/uview-ui/components/u-code-input/props.js @@ -0,0 +1,79 @@ +export default { + props: { + // 键盘弹起时,是否自动上推页面 + adjustPosition: { + type: Boolean, + default: uni.$u.props.codeInput.adjustPosition + }, + // 最大输入长度 + maxlength: { + type: [String, Number], + default: uni.$u.props.codeInput.maxlength + }, + // 是否用圆点填充 + dot: { + type: Boolean, + default: uni.$u.props.codeInput.dot + }, + // 显示模式,box-盒子模式,line-底部横线模式 + mode: { + type: String, + default: uni.$u.props.codeInput.mode + }, + // 是否细边框 + hairline: { + type: Boolean, + default: uni.$u.props.codeInput.hairline + }, + // 字符间的距离 + space: { + type: [String, Number], + default: uni.$u.props.codeInput.space + }, + // 预置值 + value: { + type: [String, Number], + default: uni.$u.props.codeInput.value + }, + // 是否自动获取焦点 + focus: { + type: Boolean, + default: uni.$u.props.codeInput.focus + }, + // 字体是否加粗 + bold: { + type: Boolean, + default: uni.$u.props.codeInput.bold + }, + // 字体颜色 + color: { + type: String, + default: uni.$u.props.codeInput.color + }, + // 字体大小 + fontSize: { + type: [String, Number], + default: uni.$u.props.codeInput.fontSize + }, + // 输入框的大小,宽等于高 + size: { + type: [String, Number], + default: uni.$u.props.codeInput.size + }, + // 是否隐藏原生键盘,如果想用自定义键盘的话,需设置此参数为true + disabledKeyboard: { + type: Boolean, + default: uni.$u.props.codeInput.disabledKeyboard + }, + // 边框和线条颜色 + borderColor: { + type: String, + default: uni.$u.props.codeInput.borderColor + }, + // 是否禁止输入"."符号 + disabledDot: { + type: Boolean, + default: uni.$u.props.codeInput.disabledDot + } + } +} diff --git a/uni_modules/uview-ui/components/u-code-input/u-code-input.vue b/uni_modules/uview-ui/components/u-code-input/u-code-input.vue new file mode 100644 index 0000000..96241cf --- /dev/null +++ b/uni_modules/uview-ui/components/u-code-input/u-code-input.vue @@ -0,0 +1,252 @@ + + + + + diff --git a/uni_modules/uview-ui/components/u-code/props.js b/uni_modules/uview-ui/components/u-code/props.js new file mode 100644 index 0000000..eaf80d0 --- /dev/null +++ b/uni_modules/uview-ui/components/u-code/props.js @@ -0,0 +1,34 @@ +export default { + props: { + // 倒计时总秒数 + seconds: { + type: [String, Number], + default: uni.$u.props.code.seconds + }, + // 尚未开始时提示 + startText: { + type: String, + default: uni.$u.props.code.startText + }, + // 正在倒计时中的提示 + changeText: { + type: String, + default: uni.$u.props.code.changeText + }, + // 倒计时结束时的提示 + endText: { + type: String, + default: uni.$u.props.code.endText + }, + // 是否在H5刷新或各端返回再进入时继续倒计时 + keepRunning: { + type: Boolean, + default: uni.$u.props.code.keepRunning + }, + // 为了区分多个页面,或者一个页面多个倒计时组件本地存储的继续倒计时变了 + uniqueKey: { + type: String, + default: uni.$u.props.code.uniqueKey + } + } +} diff --git a/uni_modules/uview-ui/components/u-code/u-code.vue b/uni_modules/uview-ui/components/u-code/u-code.vue new file mode 100644 index 0000000..f79a09a --- /dev/null +++ b/uni_modules/uview-ui/components/u-code/u-code.vue @@ -0,0 +1,129 @@ + + + + + diff --git a/uni_modules/uview-ui/components/u-col/props.js b/uni_modules/uview-ui/components/u-col/props.js new file mode 100644 index 0000000..0622251 --- /dev/null +++ b/uni_modules/uview-ui/components/u-col/props.js @@ -0,0 +1,29 @@ +export default { + props: { + // 占父容器宽度的多少等分,总分为12份 + span: { + type: [String, Number], + default: uni.$u.props.col.span + }, + // 指定栅格左侧的间隔数(总12栏) + offset: { + type: [String, Number], + default: uni.$u.props.col.offset + }, + // 水平排列方式,可选值为`start`(或`flex-start`)、`end`(或`flex-end`)、`center`、`around`(或`space-around`)、`between`(或`space-between`) + justify: { + type: String, + default: uni.$u.props.col.justify + }, + // 垂直对齐方式,可选值为top、center、bottom、stretch + align: { + type: String, + default: uni.$u.props.col.align + }, + // 文字对齐方式 + textAlign: { + type: String, + default: uni.$u.props.col.textAlign + } + } +} diff --git a/uni_modules/uview-ui/components/u-col/u-col.vue b/uni_modules/uview-ui/components/u-col/u-col.vue new file mode 100644 index 0000000..8be1517 --- /dev/null +++ b/uni_modules/uview-ui/components/u-col/u-col.vue @@ -0,0 +1,162 @@ + + + + + diff --git a/uni_modules/uview-ui/components/u-collapse-item/props.js b/uni_modules/uview-ui/components/u-collapse-item/props.js new file mode 100644 index 0000000..bd5749b --- /dev/null +++ b/uni_modules/uview-ui/components/u-collapse-item/props.js @@ -0,0 +1,59 @@ +export default { + props: { + // 标题 + title: { + type: String, + default: uni.$u.props.collapseItem.title + }, + // 标题右侧内容 + value: { + type: String, + default: uni.$u.props.collapseItem.value + }, + // 标题下方的描述信息 + label: { + type: String, + default: uni.$u.props.collapseItem.label + }, + // 是否禁用折叠面板 + disabled: { + type: Boolean, + default: uni.$u.props.collapseItem.disabled + }, + // 是否展示右侧箭头并开启点击反馈 + isLink: { + type: Boolean, + default: uni.$u.props.collapseItem.isLink + }, + // 是否开启点击反馈 + clickable: { + type: Boolean, + default: uni.$u.props.collapseItem.clickable + }, + // 是否显示内边框 + border: { + type: Boolean, + default: uni.$u.props.collapseItem.border + }, + // 标题的对齐方式 + align: { + type: String, + default: uni.$u.props.collapseItem.align + }, + // 唯一标识符 + name: { + type: [String, Number], + default: uni.$u.props.collapseItem.name + }, + // 标题左侧图片,可为绝对路径的图片或内置图标 + icon: { + type: String, + default: uni.$u.props.collapseItem.icon + }, + // 面板展开收起的过渡时间,单位ms + duration: { + type: Number, + default: uni.$u.props.collapseItem.duration + } + } +} diff --git a/uni_modules/uview-ui/components/u-collapse-item/u-collapse-item.vue b/uni_modules/uview-ui/components/u-collapse-item/u-collapse-item.vue new file mode 100644 index 0000000..0e1b703 --- /dev/null +++ b/uni_modules/uview-ui/components/u-collapse-item/u-collapse-item.vue @@ -0,0 +1,225 @@ + + + + + diff --git a/uni_modules/uview-ui/components/u-collapse/props.js b/uni_modules/uview-ui/components/u-collapse/props.js new file mode 100644 index 0000000..7ee6d31 --- /dev/null +++ b/uni_modules/uview-ui/components/u-collapse/props.js @@ -0,0 +1,19 @@ +export default { + props: { + // 当前展开面板的name,非手风琴模式:[],手风琴模式:string | number + value: { + type: [String, Number, Array, null], + default: uni.$u.props.collapse.value + }, + // 是否手风琴模式 + accordion: { + type: Boolean, + default: uni.$u.props.collapse.accordion + }, + // 是否显示外边框 + border: { + type: Boolean, + default: uni.$u.props.collapse.border + } + } +} diff --git a/uni_modules/uview-ui/components/u-collapse/u-collapse.vue b/uni_modules/uview-ui/components/u-collapse/u-collapse.vue new file mode 100644 index 0000000..fc188a2 --- /dev/null +++ b/uni_modules/uview-ui/components/u-collapse/u-collapse.vue @@ -0,0 +1,90 @@ + + + + + diff --git a/uni_modules/uview-ui/components/u-column-notice/props.js b/uni_modules/uview-ui/components/u-column-notice/props.js new file mode 100644 index 0000000..4809154 --- /dev/null +++ b/uni_modules/uview-ui/components/u-column-notice/props.js @@ -0,0 +1,55 @@ +export default { + props: { + // 显示的内容,字符串 + text: { + type: [Array], + default: uni.$u.props.columnNotice.text + }, + // 是否显示左侧的音量图标 + icon: { + type: String, + default: uni.$u.props.columnNotice.icon + }, + // 通告模式,link-显示右箭头,closable-显示右侧关闭图标 + mode: { + type: String, + default: uni.$u.props.columnNotice.mode + }, + // 文字颜色,各图标也会使用文字颜色 + color: { + type: String, + default: uni.$u.props.columnNotice.color + }, + // 背景颜色 + bgColor: { + type: String, + default: uni.$u.props.columnNotice.bgColor + }, + // 字体大小,单位px + fontSize: { + type: [String, Number], + default: uni.$u.props.columnNotice.fontSize + }, + // 水平滚动时的滚动速度,即每秒滚动多少px(px),这有利于控制文字无论多少时,都能有一个恒定的速度 + speed: { + type: [String, Number], + default: uni.$u.props.columnNotice.speed + }, + // direction = row时,是否使用步进形式滚动 + step: { + type: Boolean, + default: uni.$u.props.columnNotice.step + }, + // 滚动一个周期的时间长,单位ms + duration: { + type: [String, Number], + default: uni.$u.props.columnNotice.duration + }, + // 是否禁止用手滑动切换 + // 目前HX2.6.11,只支持App 2.5.5+、H5 2.5.5+、支付宝小程序、字节跳动小程序 + disableTouch: { + type: Boolean, + default: uni.$u.props.columnNotice.disableTouch + } + } +} diff --git a/uni_modules/uview-ui/components/u-column-notice/u-column-notice.vue b/uni_modules/uview-ui/components/u-column-notice/u-column-notice.vue new file mode 100644 index 0000000..fc39532 --- /dev/null +++ b/uni_modules/uview-ui/components/u-column-notice/u-column-notice.vue @@ -0,0 +1,160 @@ + + + + + diff --git a/uni_modules/uview-ui/components/u-count-down/props.js b/uni_modules/uview-ui/components/u-count-down/props.js new file mode 100644 index 0000000..d62f025 --- /dev/null +++ b/uni_modules/uview-ui/components/u-count-down/props.js @@ -0,0 +1,24 @@ +export default { + props: { + // 倒计时时长,单位ms + time: { + type: [String, Number], + default: uni.$u.props.countDown.time + }, + // 时间格式,DD-日,HH-时,mm-分,ss-秒,SSS-毫秒 + format: { + type: String, + default: uni.$u.props.countDown.format + }, + // 是否自动开始倒计时 + autoStart: { + type: Boolean, + default: uni.$u.props.countDown.autoStart + }, + // 是否展示毫秒倒计时 + millisecond: { + type: Boolean, + default: uni.$u.props.countDown.millisecond + } + } +} diff --git a/uni_modules/uview-ui/components/u-count-down/u-count-down.vue b/uni_modules/uview-ui/components/u-count-down/u-count-down.vue new file mode 100644 index 0000000..b5e85a6 --- /dev/null +++ b/uni_modules/uview-ui/components/u-count-down/u-count-down.vue @@ -0,0 +1,163 @@ + + + + + diff --git a/uni_modules/uview-ui/components/u-count-down/utils.js b/uni_modules/uview-ui/components/u-count-down/utils.js new file mode 100644 index 0000000..8c75005 --- /dev/null +++ b/uni_modules/uview-ui/components/u-count-down/utils.js @@ -0,0 +1,62 @@ +// 补0,如1 -> 01 +function padZero(num, targetLength = 2) { + let str = `${num}` + while (str.length < targetLength) { + str = `0${str}` + } + return str +} +const SECOND = 1000 +const MINUTE = 60 * SECOND +const HOUR = 60 * MINUTE +const DAY = 24 * HOUR +export function parseTimeData(time) { + const days = Math.floor(time / DAY) + const hours = Math.floor((time % DAY) / HOUR) + const minutes = Math.floor((time % HOUR) / MINUTE) + const seconds = Math.floor((time % MINUTE) / SECOND) + const milliseconds = Math.floor(time % SECOND) + return { + days, + hours, + minutes, + seconds, + milliseconds + } +} +export function parseFormat(format, timeData) { + let { + days, + hours, + minutes, + seconds, + milliseconds + } = timeData + // 如果格式化字符串中不存在DD(天),则将天的时间转为小时中去 + if (format.indexOf('DD') === -1) { + hours += days * 24 + } else { + // 对天补0 + format = format.replace('DD', padZero(days)) + } + // 其他同理于DD的格式化处理方式 + if (format.indexOf('HH') === -1) { + minutes += hours * 60 + } else { + format = format.replace('HH', padZero(hours)) + } + if (format.indexOf('mm') === -1) { + seconds += minutes * 60 + } else { + format = format.replace('mm', padZero(minutes)) + } + if (format.indexOf('ss') === -1) { + milliseconds += seconds * 1000 + } else { + format = format.replace('ss', padZero(seconds)) + } + return format.replace('SSS', padZero(milliseconds, 3)) +} +export function isSameSecond(time1, time2) { + return Math.floor(time1 / 1000) === Math.floor(time2 / 1000) +} diff --git a/uni_modules/uview-ui/components/u-count-to/props.js b/uni_modules/uview-ui/components/u-count-to/props.js new file mode 100644 index 0000000..86873c1 --- /dev/null +++ b/uni_modules/uview-ui/components/u-count-to/props.js @@ -0,0 +1,59 @@ +export default { + props: { + // 开始的数值,默认从0增长到某一个数 + startVal: { + type: [String, Number], + default: uni.$u.props.countTo.startVal + }, + // 要滚动的目标数值,必须 + endVal: { + type: [String, Number], + default: uni.$u.props.countTo.endVal + }, + // 滚动到目标数值的动画持续时间,单位为毫秒(ms) + duration: { + type: [String, Number], + default: uni.$u.props.countTo.duration + }, + // 设置数值后是否自动开始滚动 + autoplay: { + type: Boolean, + default: uni.$u.props.countTo.autoplay + }, + // 要显示的小数位数 + decimals: { + type: [String, Number], + default: uni.$u.props.countTo.decimals + }, + // 是否在即将到达目标数值的时候,使用缓慢滚动的效果 + useEasing: { + type: Boolean, + default: uni.$u.props.countTo.useEasing + }, + // 十进制分割 + decimal: { + type: [String, Number], + default: uni.$u.props.countTo.decimal + }, + // 字体颜色 + color: { + type: String, + default: uni.$u.props.countTo.color + }, + // 字体大小 + fontSize: { + type: [String, Number], + default: uni.$u.props.countTo.fontSize + }, + // 是否加粗字体 + bold: { + type: Boolean, + default: uni.$u.props.countTo.bold + }, + // 千位分隔符,类似金额的分割(¥23,321.05中的",") + separator: { + type: String, + default: uni.$u.props.countTo.separator + } + } +} diff --git a/uni_modules/uview-ui/components/u-count-to/u-count-to.vue b/uni_modules/uview-ui/components/u-count-to/u-count-to.vue new file mode 100644 index 0000000..417b732 --- /dev/null +++ b/uni_modules/uview-ui/components/u-count-to/u-count-to.vue @@ -0,0 +1,184 @@ + + + + + diff --git a/uni_modules/uview-ui/components/u-datetime-picker/props.js b/uni_modules/uview-ui/components/u-datetime-picker/props.js new file mode 100644 index 0000000..f44c0f9 --- /dev/null +++ b/uni_modules/uview-ui/components/u-datetime-picker/props.js @@ -0,0 +1,116 @@ +export default { + props: { + // 是否打开组件 + show: { + type: Boolean, + default: uni.$u.props.datetimePicker.show + }, + // 是否展示顶部的操作栏 + showToolbar: { + type: Boolean, + default: uni.$u.props.datetimePicker.showToolbar + }, + // 绑定值 + value: { + type: [String, Number], + default: uni.$u.props.datetimePicker.value + }, + // 顶部标题 + title: { + type: String, + default: uni.$u.props.datetimePicker.title + }, + // 展示格式,mode=date为日期选择,mode=time为时间选择,mode=year-month为年月选择,mode=datetime为日期时间选择 + mode: { + type: String, + default: uni.$u.props.datetimePicker.mode + }, + // 可选的最大时间 + maxDate: { + type: Number, + // 最大默认值为后10年 + default: uni.$u.props.datetimePicker.maxDate + }, + // 可选的最小时间 + minDate: { + type: Number, + // 最小默认值为前10年 + default: uni.$u.props.datetimePicker.minDate + }, + // 可选的最小小时,仅mode=time有效 + minHour: { + type: Number, + default: uni.$u.props.datetimePicker.minHour + }, + // 可选的最大小时,仅mode=time有效 + maxHour: { + type: Number, + default: uni.$u.props.datetimePicker.maxHour + }, + // 可选的最小分钟,仅mode=time有效 + minMinute: { + type: Number, + default: uni.$u.props.datetimePicker.minMinute + }, + // 可选的最大分钟,仅mode=time有效 + maxMinute: { + type: Number, + default: uni.$u.props.datetimePicker.maxMinute + }, + // 选项过滤函数 + filter: { + type: [Function, null], + default: uni.$u.props.datetimePicker.filter + }, + // 选项格式化函数 + formatter: { + type: [Function, null], + default: uni.$u.props.datetimePicker.formatter + }, + // 是否显示加载中状态 + loading: { + type: Boolean, + default: uni.$u.props.datetimePicker.loading + }, + // 各列中,单个选项的高度 + itemHeight: { + type: [String, Number], + default: uni.$u.props.datetimePicker.itemHeight + }, + // 取消按钮的文字 + cancelText: { + type: String, + default: uni.$u.props.datetimePicker.cancelText + }, + // 确认按钮的文字 + confirmText: { + type: String, + default: uni.$u.props.datetimePicker.confirmText + }, + // 取消按钮的颜色 + cancelColor: { + type: String, + default: uni.$u.props.datetimePicker.cancelColor + }, + // 确认按钮的颜色 + confirmColor: { + type: String, + default: uni.$u.props.datetimePicker.confirmColor + }, + // 每列中可见选项的数量 + visibleItemCount: { + type: [String, Number], + default: uni.$u.props.datetimePicker.visibleItemCount + }, + // 是否允许点击遮罩关闭选择器 + closeOnClickOverlay: { + type: Boolean, + default: uni.$u.props.datetimePicker.closeOnClickOverlay + }, + // 各列的默认索引 + defaultIndex: { + type: Array, + default: uni.$u.props.datetimePicker.defaultIndex + } + } +} diff --git a/uni_modules/uview-ui/components/u-datetime-picker/u-datetime-picker.vue b/uni_modules/uview-ui/components/u-datetime-picker/u-datetime-picker.vue new file mode 100644 index 0000000..18d8dcc --- /dev/null +++ b/uni_modules/uview-ui/components/u-datetime-picker/u-datetime-picker.vue @@ -0,0 +1,360 @@ + + + + + diff --git a/uni_modules/uview-ui/components/u-divider/props.js b/uni_modules/uview-ui/components/u-divider/props.js new file mode 100644 index 0000000..1fa8359 --- /dev/null +++ b/uni_modules/uview-ui/components/u-divider/props.js @@ -0,0 +1,44 @@ +export default { + props: { + // 是否虚线 + dashed: { + type: Boolean, + default: uni.$u.props.divider.dashed + }, + // 是否细线 + hairline: { + type: Boolean, + default: uni.$u.props.divider.hairline + }, + // 是否以点替代文字,优先于text字段起作用 + dot: { + type: Boolean, + default: uni.$u.props.divider.dot + }, + // 内容文本的位置,left-左边,center-中间,right-右边 + textPosition: { + type: String, + default: uni.$u.props.divider.textPosition + }, + // 文本内容 + text: { + type: [String, Number], + default: uni.$u.props.divider.text + }, + // 文本大小 + textSize: { + type: [String, Number], + default: uni.$u.props.divider.textSize + }, + // 文本颜色 + textColor: { + type: String, + default: uni.$u.props.divider.textColor + }, + // 线条颜色 + lineColor: { + type: String, + default: uni.$u.props.divider.lineColor + } + } +} diff --git a/uni_modules/uview-ui/components/u-divider/u-divider.vue b/uni_modules/uview-ui/components/u-divider/u-divider.vue new file mode 100644 index 0000000..b629da6 --- /dev/null +++ b/uni_modules/uview-ui/components/u-divider/u-divider.vue @@ -0,0 +1,116 @@ + + + + + diff --git a/uni_modules/uview-ui/components/u-dropdown-item/props.js b/uni_modules/uview-ui/components/u-dropdown-item/props.js new file mode 100644 index 0000000..501a1f0 --- /dev/null +++ b/uni_modules/uview-ui/components/u-dropdown-item/props.js @@ -0,0 +1,36 @@ +export default { + props: { + // 当前选中项的value值 + value: { + type: [Number, String, Array], + default: '' + }, + // 菜单项标题 + title: { + type: [String, Number], + default: '' + }, + // 选项数据,如果传入了默认slot,此参数无效 + options: { + type: Array, + default() { + return [] + } + }, + // 是否禁用此菜单项 + disabled: { + type: Boolean, + default: false + }, + // 下拉弹窗的高度 + height: { + type: [Number, String], + default: 'auto' + }, + // 点击遮罩是否可以收起弹窗 + closeOnClickOverlay: { + type: Boolean, + default: true + } + } +} diff --git a/uni_modules/uview-ui/components/u-dropdown-item/u-dropdown-item.vue b/uni_modules/uview-ui/components/u-dropdown-item/u-dropdown-item.vue new file mode 100644 index 0000000..f830291 --- /dev/null +++ b/uni_modules/uview-ui/components/u-dropdown-item/u-dropdown-item.vue @@ -0,0 +1,127 @@ + + + + + diff --git a/uni_modules/uview-ui/components/u-dropdown/props.js b/uni_modules/uview-ui/components/u-dropdown/props.js new file mode 100644 index 0000000..5f8465e --- /dev/null +++ b/uni_modules/uview-ui/components/u-dropdown/props.js @@ -0,0 +1,65 @@ +export default { + props: { + // 标题选中时的样式 + activeStyle: { + type: [String, Object], + default: () => ({ + color: '#2979ff', + fontSize: '14px' + }) + }, + // 标题未选中时的样式 + inactiveStyle: { + type: [String, Object], + default: () => ({ + color: '#606266', + fontSize: '14px' + }) + }, + // 点击遮罩是否关闭菜单 + closeOnClickMask: { + type: Boolean, + default: true + }, + // 点击当前激活项标题是否关闭菜单 + closeOnClickSelf: { + type: Boolean, + default: true + }, + // 过渡时间 + duration: { + type: [Number, String], + default: 300 + }, + // 标题菜单的高度 + height: { + type: [Number, String], + default: 40 + }, + // 是否显示下边框 + borderBottom: { + type: Boolean, + default: false + }, + // 标题的字体大小 + titleSize: { + type: [Number, String], + default: 14 + }, + // 下拉出来的内容部分的圆角值 + borderRadius: { + type: [Number, String], + default: 0 + }, + // 菜单右侧的icon图标 + menuIcon: { + type: String, + default: 'arrow-down' + }, + // 菜单右侧图标的大小 + menuIconSize: { + type: [Number, String], + default: 14 + } + } +} diff --git a/uni_modules/uview-ui/components/u-dropdown/u-dropdown.vue b/uni_modules/uview-ui/components/u-dropdown/u-dropdown.vue new file mode 100644 index 0000000..f830291 --- /dev/null +++ b/uni_modules/uview-ui/components/u-dropdown/u-dropdown.vue @@ -0,0 +1,127 @@ + + + + + diff --git a/uni_modules/uview-ui/components/u-empty/props.js b/uni_modules/uview-ui/components/u-empty/props.js new file mode 100644 index 0000000..78662f8 --- /dev/null +++ b/uni_modules/uview-ui/components/u-empty/props.js @@ -0,0 +1,59 @@ +export default { + props: { + // 内置图标名称,或图片路径,建议绝对路径 + icon: { + type: String, + default: uni.$u.props.empty.icon + }, + // 提示文字 + text: { + type: String, + default: uni.$u.props.empty.text + }, + // 文字颜色 + textColor: { + type: String, + default: uni.$u.props.empty.textColor + }, + // 文字大小 + textSize: { + type: [String, Number], + default: uni.$u.props.empty.textSize + }, + // 图标的颜色 + iconColor: { + type: String, + default: uni.$u.props.empty.iconColor + }, + // 图标的大小 + iconSize: { + type: [String, Number], + default: uni.$u.props.empty.iconSize + }, + // 选择预置的图标类型 + mode: { + type: String, + default: uni.$u.props.empty.mode + }, + // 图标宽度,单位px + width: { + type: [String, Number], + default: uni.$u.props.empty.width + }, + // 图标高度,单位px + height: { + type: [String, Number], + default: uni.$u.props.empty.height + }, + // 是否显示组件 + show: { + type: Boolean, + default: uni.$u.props.empty.show + }, + // 组件距离上一个元素之间的距离,默认px单位 + marginTop: { + type: [String, Number], + default: uni.$u.props.empty.marginTop + } + } +} diff --git a/uni_modules/uview-ui/components/u-empty/u-empty.vue b/uni_modules/uview-ui/components/u-empty/u-empty.vue new file mode 100644 index 0000000..03d6a27 --- /dev/null +++ b/uni_modules/uview-ui/components/u-empty/u-empty.vue @@ -0,0 +1,128 @@ + + + + + diff --git a/uni_modules/uview-ui/components/u-form-item/props.js b/uni_modules/uview-ui/components/u-form-item/props.js new file mode 100644 index 0000000..7b16655 --- /dev/null +++ b/uni_modules/uview-ui/components/u-form-item/props.js @@ -0,0 +1,48 @@ +export default { + props: { + // input的label提示语 + label: { + type: String, + default: uni.$u.props.formItem.label + }, + // 绑定的值 + prop: { + type: String, + default: uni.$u.props.formItem.prop + }, + // 是否显示表单域的下划线边框 + borderBottom: { + type: [String, Boolean], + default: uni.$u.props.formItem.borderBottom + }, + // label的位置,left-左边,top-上边 + labelPosition: { + type: String, + default: uni.$u.props.formItem.labelPosition + }, + // label的宽度,单位px + labelWidth: { + type: [String, Number], + default: uni.$u.props.formItem.labelWidth + }, + // 右侧图标 + rightIcon: { + type: String, + default: uni.$u.props.formItem.rightIcon + }, + // 左侧图标 + leftIcon: { + type: String, + default: uni.$u.props.formItem.leftIcon + }, + // 是否显示左边的必填星号,只作显示用,具体校验必填的逻辑,请在rules中配置 + required: { + type: Boolean, + default: uni.$u.props.formItem.required + }, + leftIconStyle: { + type: [String, Object], + default: uni.$u.props.formItem.leftIconStyle, + } + } +} diff --git a/uni_modules/uview-ui/components/u-form-item/u-form-item.vue b/uni_modules/uview-ui/components/u-form-item/u-form-item.vue new file mode 100644 index 0000000..6aa8d69 --- /dev/null +++ b/uni_modules/uview-ui/components/u-form-item/u-form-item.vue @@ -0,0 +1,235 @@ + + + + + diff --git a/uni_modules/uview-ui/components/u-form/props.js b/uni_modules/uview-ui/components/u-form/props.js new file mode 100644 index 0000000..f2a629c --- /dev/null +++ b/uni_modules/uview-ui/components/u-form/props.js @@ -0,0 +1,45 @@ +export default { + props: { + // 当前form的需要验证字段的集合 + model: { + type: Object, + default: uni.$u.props.form.model + }, + // 验证规则 + rules: { + type: [Object, Function, Array], + default: uni.$u.props.form.rules + }, + // 有错误时的提示方式,message-提示信息,toast-进行toast提示 + // border-bottom-下边框呈现红色,none-无提示 + errorType: { + type: String, + default: uni.$u.props.form.errorType + }, + // 是否显示表单域的下划线边框 + borderBottom: { + type: Boolean, + default: uni.$u.props.form.borderBottom + }, + // label的位置,left-左边,top-上边 + labelPosition: { + type: String, + default: uni.$u.props.form.labelPosition + }, + // label的宽度,单位px + labelWidth: { + type: [String, Number], + default: uni.$u.props.form.labelWidth + }, + // lable字体的对齐方式 + labelAlign: { + type: String, + default: uni.$u.props.form.labelAlign + }, + // lable的样式,对象形式 + labelStyle: { + type: Object, + default: uni.$u.props.form.labelStyle + } + } +} diff --git a/uni_modules/uview-ui/components/u-form/u-form.vue b/uni_modules/uview-ui/components/u-form/u-form.vue new file mode 100644 index 0000000..fe2dde2 --- /dev/null +++ b/uni_modules/uview-ui/components/u-form/u-form.vue @@ -0,0 +1,214 @@ + + + + + diff --git a/uni_modules/uview-ui/components/u-gap/props.js b/uni_modules/uview-ui/components/u-gap/props.js new file mode 100644 index 0000000..89953e3 --- /dev/null +++ b/uni_modules/uview-ui/components/u-gap/props.js @@ -0,0 +1,24 @@ +export default { + props: { + // 背景颜色(默认transparent) + bgColor: { + type: String, + default: uni.$u.props.gap.bgColor + }, + // 分割槽高度,单位px(默认30) + height: { + type: [String, Number], + default: uni.$u.props.gap.height + }, + // 与上一个组件的距离 + marginTop: { + type: [String, Number], + default: uni.$u.props.gap.marginTop + }, + // 与下一个组件的距离 + marginBottom: { + type: [String, Number], + default: uni.$u.props.gap.marginBottom + } + } +} diff --git a/uni_modules/uview-ui/components/u-gap/u-gap.vue b/uni_modules/uview-ui/components/u-gap/u-gap.vue new file mode 100644 index 0000000..e4429f0 --- /dev/null +++ b/uni_modules/uview-ui/components/u-gap/u-gap.vue @@ -0,0 +1,38 @@ + + + + + diff --git a/uni_modules/uview-ui/components/u-grid-item/props.js b/uni_modules/uview-ui/components/u-grid-item/props.js new file mode 100644 index 0000000..06c3c66 --- /dev/null +++ b/uni_modules/uview-ui/components/u-grid-item/props.js @@ -0,0 +1,14 @@ +export default { + props: { + // 宫格的name + name: { + type: [String, Number, null], + default: uni.$u.props.gridItem.name + }, + // 背景颜色 + bgColor: { + type: String, + default: uni.$u.props.gridItem.bgColor + } + } +} diff --git a/uni_modules/uview-ui/components/u-grid-item/u-grid-item.vue b/uni_modules/uview-ui/components/u-grid-item/u-grid-item.vue new file mode 100644 index 0000000..fc0c7cf --- /dev/null +++ b/uni_modules/uview-ui/components/u-grid-item/u-grid-item.vue @@ -0,0 +1,209 @@ + + + + + diff --git a/uni_modules/uview-ui/components/u-grid/props.js b/uni_modules/uview-ui/components/u-grid/props.js new file mode 100644 index 0000000..87b0f6a --- /dev/null +++ b/uni_modules/uview-ui/components/u-grid/props.js @@ -0,0 +1,19 @@ +export default { + props: { + // 分成几列 + col: { + type: [String, Number], + default: uni.$u.props.grid.col + }, + // 是否显示边框 + border: { + type: Boolean, + default: uni.$u.props.grid.border + }, + // 宫格对齐方式,表现为数量少的时候,靠左,居中,还是靠右 + align: { + type: String, + default: uni.$u.props.grid.align + } + } +} diff --git a/uni_modules/uview-ui/components/u-grid/u-grid.vue b/uni_modules/uview-ui/components/u-grid/u-grid.vue new file mode 100644 index 0000000..b43cc27 --- /dev/null +++ b/uni_modules/uview-ui/components/u-grid/u-grid.vue @@ -0,0 +1,97 @@ + + + + + diff --git a/uni_modules/uview-ui/components/u-icon/icons.js b/uni_modules/uview-ui/components/u-icon/icons.js new file mode 100644 index 0000000..f4d0fe2 --- /dev/null +++ b/uni_modules/uview-ui/components/u-icon/icons.js @@ -0,0 +1,214 @@ +export default { + 'uicon-level': '\ue693', + 'uicon-column-line': '\ue68e', + 'uicon-checkbox-mark': '\ue807', + 'uicon-folder': '\ue7f5', + 'uicon-movie': '\ue7f6', + 'uicon-star-fill': '\ue669', + 'uicon-star': '\ue65f', + 'uicon-phone-fill': '\ue64f', + 'uicon-phone': '\ue622', + 'uicon-apple-fill': '\ue881', + 'uicon-chrome-circle-fill': '\ue885', + 'uicon-backspace': '\ue67b', + 'uicon-attach': '\ue632', + 'uicon-cut': '\ue948', + 'uicon-empty-car': '\ue602', + 'uicon-empty-coupon': '\ue682', + 'uicon-empty-address': '\ue646', + 'uicon-empty-favor': '\ue67c', + 'uicon-empty-permission': '\ue686', + 'uicon-empty-news': '\ue687', + 'uicon-empty-search': '\ue664', + 'uicon-github-circle-fill': '\ue887', + 'uicon-rmb': '\ue608', + 'uicon-person-delete-fill': '\ue66a', + 'uicon-reload': '\ue788', + 'uicon-order': '\ue68f', + 'uicon-server-man': '\ue6bc', + 'uicon-search': '\ue62a', + 'uicon-fingerprint': '\ue955', + 'uicon-more-dot-fill': '\ue630', + 'uicon-scan': '\ue662', + 'uicon-share-square': '\ue60b', + 'uicon-map': '\ue61d', + 'uicon-map-fill': '\ue64e', + 'uicon-tags': '\ue629', + 'uicon-tags-fill': '\ue651', + 'uicon-bookmark-fill': '\ue63b', + 'uicon-bookmark': '\ue60a', + 'uicon-eye': '\ue613', + 'uicon-eye-fill': '\ue641', + 'uicon-mic': '\ue64a', + 'uicon-mic-off': '\ue649', + 'uicon-calendar': '\ue66e', + 'uicon-calendar-fill': '\ue634', + 'uicon-trash': '\ue623', + 'uicon-trash-fill': '\ue658', + 'uicon-play-left': '\ue66d', + 'uicon-play-right': '\ue610', + 'uicon-minus': '\ue618', + 'uicon-plus': '\ue62d', + 'uicon-info': '\ue653', + 'uicon-info-circle': '\ue7d2', + 'uicon-info-circle-fill': '\ue64b', + 'uicon-question': '\ue715', + 'uicon-error': '\ue6d3', + 'uicon-close': '\ue685', + 'uicon-checkmark': '\ue6a8', + 'uicon-android-circle-fill': '\ue67e', + 'uicon-android-fill': '\ue67d', + 'uicon-ie': '\ue87b', + 'uicon-IE-circle-fill': '\ue889', + 'uicon-google': '\ue87a', + 'uicon-google-circle-fill': '\ue88a', + 'uicon-setting-fill': '\ue872', + 'uicon-setting': '\ue61f', + 'uicon-minus-square-fill': '\ue855', + 'uicon-plus-square-fill': '\ue856', + 'uicon-heart': '\ue7df', + 'uicon-heart-fill': '\ue851', + 'uicon-camera': '\ue7d7', + 'uicon-camera-fill': '\ue870', + 'uicon-more-circle': '\ue63e', + 'uicon-more-circle-fill': '\ue645', + 'uicon-chat': '\ue620', + 'uicon-chat-fill': '\ue61e', + 'uicon-bag-fill': '\ue617', + 'uicon-bag': '\ue619', + 'uicon-error-circle-fill': '\ue62c', + 'uicon-error-circle': '\ue624', + 'uicon-close-circle': '\ue63f', + 'uicon-close-circle-fill': '\ue637', + 'uicon-checkmark-circle': '\ue63d', + 'uicon-checkmark-circle-fill': '\ue635', + 'uicon-question-circle-fill': '\ue666', + 'uicon-question-circle': '\ue625', + 'uicon-share': '\ue631', + 'uicon-share-fill': '\ue65e', + 'uicon-shopping-cart': '\ue621', + 'uicon-shopping-cart-fill': '\ue65d', + 'uicon-bell': '\ue609', + 'uicon-bell-fill': '\ue640', + 'uicon-list': '\ue650', + 'uicon-list-dot': '\ue616', + 'uicon-zhihu': '\ue6ba', + 'uicon-zhihu-circle-fill': '\ue709', + 'uicon-zhifubao': '\ue6b9', + 'uicon-zhifubao-circle-fill': '\ue6b8', + 'uicon-weixin-circle-fill': '\ue6b1', + 'uicon-weixin-fill': '\ue6b2', + 'uicon-twitter-circle-fill': '\ue6ab', + 'uicon-twitter': '\ue6aa', + 'uicon-taobao-circle-fill': '\ue6a7', + 'uicon-taobao': '\ue6a6', + 'uicon-weibo-circle-fill': '\ue6a5', + 'uicon-weibo': '\ue6a4', + 'uicon-qq-fill': '\ue6a1', + 'uicon-qq-circle-fill': '\ue6a0', + 'uicon-moments-circel-fill': '\ue69a', + 'uicon-moments': '\ue69b', + 'uicon-qzone': '\ue695', + 'uicon-qzone-circle-fill': '\ue696', + 'uicon-baidu-circle-fill': '\ue680', + 'uicon-baidu': '\ue681', + 'uicon-facebook-circle-fill': '\ue68a', + 'uicon-facebook': '\ue689', + 'uicon-car': '\ue60c', + 'uicon-car-fill': '\ue636', + 'uicon-warning-fill': '\ue64d', + 'uicon-warning': '\ue694', + 'uicon-clock-fill': '\ue638', + 'uicon-clock': '\ue60f', + 'uicon-edit-pen': '\ue612', + 'uicon-edit-pen-fill': '\ue66b', + 'uicon-email': '\ue611', + 'uicon-email-fill': '\ue642', + 'uicon-minus-circle': '\ue61b', + 'uicon-minus-circle-fill': '\ue652', + 'uicon-plus-circle': '\ue62e', + 'uicon-plus-circle-fill': '\ue661', + 'uicon-file-text': '\ue663', + 'uicon-file-text-fill': '\ue665', + 'uicon-pushpin': '\ue7e3', + 'uicon-pushpin-fill': '\ue86e', + 'uicon-grid': '\ue673', + 'uicon-grid-fill': '\ue678', + 'uicon-play-circle': '\ue647', + 'uicon-play-circle-fill': '\ue655', + 'uicon-pause-circle-fill': '\ue654', + 'uicon-pause': '\ue8fa', + 'uicon-pause-circle': '\ue643', + 'uicon-eye-off': '\ue648', + 'uicon-eye-off-outline': '\ue62b', + 'uicon-gift-fill': '\ue65c', + 'uicon-gift': '\ue65b', + 'uicon-rmb-circle-fill': '\ue657', + 'uicon-rmb-circle': '\ue677', + 'uicon-kefu-ermai': '\ue656', + 'uicon-server-fill': '\ue751', + 'uicon-coupon-fill': '\ue8c4', + 'uicon-coupon': '\ue8ae', + 'uicon-integral': '\ue704', + 'uicon-integral-fill': '\ue703', + 'uicon-home-fill': '\ue964', + 'uicon-home': '\ue965', + 'uicon-hourglass-half-fill': '\ue966', + 'uicon-hourglass': '\ue967', + 'uicon-account': '\ue628', + 'uicon-plus-people-fill': '\ue626', + 'uicon-minus-people-fill': '\ue615', + 'uicon-account-fill': '\ue614', + 'uicon-thumb-down-fill': '\ue726', + 'uicon-thumb-down': '\ue727', + 'uicon-thumb-up': '\ue733', + 'uicon-thumb-up-fill': '\ue72f', + 'uicon-lock-fill': '\ue979', + 'uicon-lock-open': '\ue973', + 'uicon-lock-opened-fill': '\ue974', + 'uicon-lock': '\ue97a', + 'uicon-red-packet-fill': '\ue690', + 'uicon-photo-fill': '\ue98b', + 'uicon-photo': '\ue98d', + 'uicon-volume-off-fill': '\ue659', + 'uicon-volume-off': '\ue644', + 'uicon-volume-fill': '\ue670', + 'uicon-volume': '\ue633', + 'uicon-red-packet': '\ue691', + 'uicon-download': '\ue63c', + 'uicon-arrow-up-fill': '\ue6b0', + 'uicon-arrow-down-fill': '\ue600', + 'uicon-play-left-fill': '\ue675', + 'uicon-play-right-fill': '\ue676', + 'uicon-rewind-left-fill': '\ue679', + 'uicon-rewind-right-fill': '\ue67a', + 'uicon-arrow-downward': '\ue604', + 'uicon-arrow-leftward': '\ue601', + 'uicon-arrow-rightward': '\ue603', + 'uicon-arrow-upward': '\ue607', + 'uicon-arrow-down': '\ue60d', + 'uicon-arrow-right': '\ue605', + 'uicon-arrow-left': '\ue60e', + 'uicon-arrow-up': '\ue606', + 'uicon-skip-back-left': '\ue674', + 'uicon-skip-forward-right': '\ue672', + 'uicon-rewind-right': '\ue66f', + 'uicon-rewind-left': '\ue671', + 'uicon-arrow-right-double': '\ue68d', + 'uicon-arrow-left-double': '\ue68c', + 'uicon-wifi-off': '\ue668', + 'uicon-wifi': '\ue667', + 'uicon-empty-data': '\ue62f', + 'uicon-empty-history': '\ue684', + 'uicon-empty-list': '\ue68b', + 'uicon-empty-page': '\ue627', + 'uicon-empty-order': '\ue639', + 'uicon-man': '\ue697', + 'uicon-woman': '\ue69c', + 'uicon-man-add': '\ue61c', + 'uicon-man-add-fill': '\ue64c', + 'uicon-man-delete': '\ue61a', + 'uicon-man-delete-fill': '\ue66a', + 'uicon-zh': '\ue70a', + 'uicon-en': '\ue692' +} diff --git a/uni_modules/uview-ui/components/u-icon/props.js b/uni_modules/uview-ui/components/u-icon/props.js new file mode 100644 index 0000000..71845b7 --- /dev/null +++ b/uni_modules/uview-ui/components/u-icon/props.js @@ -0,0 +1,89 @@ +export default { + props: { + // 图标类名 + name: { + type: String, + default: uni.$u.props.icon.name + }, + // 图标颜色,可接受主题色 + color: { + type: String, + default: uni.$u.props.icon.color + }, + // 字体大小,单位px + size: { + type: [String, Number], + default: uni.$u.props.icon.size + }, + // 是否显示粗体 + bold: { + type: Boolean, + default: uni.$u.props.icon.bold + }, + // 点击图标的时候传递事件出去的index(用于区分点击了哪一个) + index: { + type: [String, Number], + default: uni.$u.props.icon.index + }, + // 触摸图标时的类名 + hoverClass: { + type: String, + default: uni.$u.props.icon.hoverClass + }, + // 自定义扩展前缀,方便用户扩展自己的图标库 + customPrefix: { + type: String, + default: uni.$u.props.icon.customPrefix + }, + // 图标右边或者下面的文字 + label: { + type: [String, Number], + default: uni.$u.props.icon.label + }, + // label的位置,只能右边或者下边 + labelPos: { + type: String, + default: uni.$u.props.icon.labelPos + }, + // label的大小 + labelSize: { + type: [String, Number], + default: uni.$u.props.icon.labelSize + }, + // label的颜色 + labelColor: { + type: String, + default: uni.$u.props.icon.labelColor + }, + // label与图标的距离 + space: { + type: [String, Number], + default: uni.$u.props.icon.space + }, + // 图片的mode + imgMode: { + type: String, + default: uni.$u.props.icon.imgMode + }, + // 用于显示图片小图标时,图片的宽度 + width: { + type: [String, Number], + default: uni.$u.props.icon.width + }, + // 用于显示图片小图标时,图片的高度 + height: { + type: [String, Number], + default: uni.$u.props.icon.height + }, + // 用于解决某些情况下,让图标垂直居中的用途 + top: { + type: [String, Number], + default: uni.$u.props.icon.top + }, + // 是否阻止事件传播 + stop: { + type: Boolean, + default: uni.$u.props.icon.stop + } + } +} diff --git a/uni_modules/uview-ui/components/u-icon/u-icon.vue b/uni_modules/uview-ui/components/u-icon/u-icon.vue new file mode 100644 index 0000000..9340328 --- /dev/null +++ b/uni_modules/uview-ui/components/u-icon/u-icon.vue @@ -0,0 +1,234 @@ + + + + + diff --git a/uni_modules/uview-ui/components/u-image/props.js b/uni_modules/uview-ui/components/u-image/props.js new file mode 100644 index 0000000..2eabb74 --- /dev/null +++ b/uni_modules/uview-ui/components/u-image/props.js @@ -0,0 +1,84 @@ +export default { + props: { + // 图片地址 + src: { + type: String, + default: uni.$u.props.image.src + }, + // 裁剪模式 + mode: { + type: String, + default: uni.$u.props.image.mode + }, + // 宽度,单位任意 + width: { + type: [String, Number], + default: uni.$u.props.image.width + }, + // 高度,单位任意 + height: { + type: [String, Number], + default: uni.$u.props.image.height + }, + // 图片形状,circle-圆形,square-方形 + shape: { + type: String, + default: uni.$u.props.image.shape + }, + // 圆角,单位任意 + radius: { + type: [String, Number], + default: uni.$u.props.image.radius + }, + // 是否懒加载,微信小程序、App、百度小程序、字节跳动小程序 + lazyLoad: { + type: Boolean, + default: uni.$u.props.image.lazyLoad + }, + // 开启长按图片显示识别微信小程序码菜单 + showMenuByLongpress: { + type: Boolean, + default: uni.$u.props.image.showMenuByLongpress + }, + // 加载中的图标,或者小图片 + loadingIcon: { + type: String, + default: uni.$u.props.image.loadingIcon + }, + // 加载失败的图标,或者小图片 + errorIcon: { + type: String, + default: uni.$u.props.image.errorIcon + }, + // 是否显示加载中的图标或者自定义的slot + showLoading: { + type: Boolean, + default: uni.$u.props.image.showLoading + }, + // 是否显示加载错误的图标或者自定义的slot + showError: { + type: Boolean, + default: uni.$u.props.image.showError + }, + // 是否需要淡入效果 + fade: { + type: Boolean, + default: uni.$u.props.image.fade + }, + // 只支持网络资源,只对微信小程序有效 + webp: { + type: Boolean, + default: uni.$u.props.image.webp + }, + // 过渡时间,单位ms + duration: { + type: [String, Number], + default: uni.$u.props.image.duration + }, + // 背景颜色,用于深色页面加载图片时,为了和背景色融合 + bgColor: { + type: String, + default: uni.$u.props.image.bgColor + } + } +} diff --git a/uni_modules/uview-ui/components/u-image/u-image.vue b/uni_modules/uview-ui/components/u-image/u-image.vue new file mode 100644 index 0000000..473e35b --- /dev/null +++ b/uni_modules/uview-ui/components/u-image/u-image.vue @@ -0,0 +1,232 @@ + + + + + diff --git a/uni_modules/uview-ui/components/u-index-anchor/props.js b/uni_modules/uview-ui/components/u-index-anchor/props.js new file mode 100644 index 0000000..6d8b59a --- /dev/null +++ b/uni_modules/uview-ui/components/u-index-anchor/props.js @@ -0,0 +1,29 @@ +export default { + props: { + // 列表锚点文本内容 + text: { + type: [String, Number], + default: uni.$u.props.indexAnchor.text + }, + // 列表锚点文字颜色 + color: { + type: String, + default: uni.$u.props.indexAnchor.color + }, + // 列表锚点文字大小,单位默认px + size: { + type: [String, Number], + default: uni.$u.props.indexAnchor.size + }, + // 列表锚点背景颜色 + bgColor: { + type: String, + default: uni.$u.props.indexAnchor.bgColor + }, + // 列表锚点高度,单位默认px + height: { + type: [String, Number], + default: uni.$u.props.indexAnchor.height + } + } +} diff --git a/uni_modules/uview-ui/components/u-index-anchor/u-index-anchor.vue b/uni_modules/uview-ui/components/u-index-anchor/u-index-anchor.vue new file mode 100644 index 0000000..b95ddef --- /dev/null +++ b/uni_modules/uview-ui/components/u-index-anchor/u-index-anchor.vue @@ -0,0 +1,91 @@ + + + + + diff --git a/uni_modules/uview-ui/components/u-index-item/props.js b/uni_modules/uview-ui/components/u-index-item/props.js new file mode 100644 index 0000000..7c11331 --- /dev/null +++ b/uni_modules/uview-ui/components/u-index-item/props.js @@ -0,0 +1,5 @@ +export default { + props: { + + } +} diff --git a/uni_modules/uview-ui/components/u-index-item/u-index-item.vue b/uni_modules/uview-ui/components/u-index-item/u-index-item.vue new file mode 100644 index 0000000..0bc7fb3 --- /dev/null +++ b/uni_modules/uview-ui/components/u-index-item/u-index-item.vue @@ -0,0 +1,87 @@ + + + + + diff --git a/uni_modules/uview-ui/components/u-index-list/props.js b/uni_modules/uview-ui/components/u-index-list/props.js new file mode 100644 index 0000000..354d459 --- /dev/null +++ b/uni_modules/uview-ui/components/u-index-list/props.js @@ -0,0 +1,29 @@ +export default { + props: { + // 右边锚点非激活的颜色 + inactiveColor: { + type: String, + default: uni.$u.props.indexList.inactiveColor + }, + // 右边锚点激活的颜色 + activeColor: { + type: String, + default: uni.$u.props.indexList.activeColor + }, + // 索引字符列表,数组形式 + indexList: { + type: Array, + default: uni.$u.props.indexList.indexList + }, + // 是否开启锚点自动吸顶 + sticky: { + type: Boolean, + default: uni.$u.props.indexList.sticky + }, + // 自定义导航栏的高度 + customNavHeight: { + type: [String, Number], + default: uni.$u.props.indexList.customNavHeight + } + } +} diff --git a/uni_modules/uview-ui/components/u-index-list/u-index-list.vue b/uni_modules/uview-ui/components/u-index-list/u-index-list.vue new file mode 100644 index 0000000..d712618 --- /dev/null +++ b/uni_modules/uview-ui/components/u-index-list/u-index-list.vue @@ -0,0 +1,440 @@ + + + + + diff --git a/uni_modules/uview-ui/components/u-input/props.js b/uni_modules/uview-ui/components/u-input/props.js new file mode 100644 index 0000000..2c50870 --- /dev/null +++ b/uni_modules/uview-ui/components/u-input/props.js @@ -0,0 +1,187 @@ +export default { + props: { + // 输入的值 + value: { + type: [String, Number], + default: uni.$u.props.input.value + }, + // 输入框类型 + // number-数字输入键盘,app-vue下可以输入浮点数,app-nvue和小程序平台下只能输入整数 + // idcard-身份证输入键盘,微信、支付宝、百度、QQ小程序 + // digit-带小数点的数字键盘,App的nvue页面、微信、支付宝、百度、头条、QQ小程序 + // text-文本输入键盘 + type: { + type: String, + default: uni.$u.props.input.type + }, + // 如果 textarea 是在一个 position:fixed 的区域,需要显示指定属性 fixed 为 true, + // 兼容性:微信小程序、百度小程序、字节跳动小程序、QQ小程序 + fixed: { + type: Boolean, + default: uni.$u.props.input.fixed + }, + // 是否禁用输入框 + disabled: { + type: Boolean, + default: uni.$u.props.input.disabled + }, + // 禁用状态时的背景色 + disabledColor: { + type: String, + default: uni.$u.props.input.disabledColor + }, + // 是否显示清除控件 + clearable: { + type: Boolean, + default: uni.$u.props.input.clearable + }, + // 是否密码类型 + password: { + type: Boolean, + default: uni.$u.props.input.password + }, + // 最大输入长度,设置为 -1 的时候不限制最大长度 + maxlength: { + type: [String, Number], + default: uni.$u.props.input.maxlength + }, + // 输入框为空时的占位符 + placeholder: { + type: String, + default: uni.$u.props.input.placeholder + }, + // 指定placeholder的样式类,注意页面或组件的style中写了scoped时,需要在类名前写/deep/ + placeholderClass: { + type: String, + default: uni.$u.props.input.placeholderClass + }, + // 指定placeholder的样式 + placeholderStyle: { + type: [String, Object], + default: uni.$u.props.input.placeholderStyle + }, + // 是否显示输入字数统计,只在 type ="text"或type ="textarea"时有效 + showWordLimit: { + type: Boolean, + default: uni.$u.props.input.showWordLimit + }, + // 设置右下角按钮的文字,有效值:send|search|next|go|done,兼容性详见uni-app文档 + // https://uniapp.dcloud.io/component/input + // https://uniapp.dcloud.io/component/textarea + confirmType: { + type: String, + default: uni.$u.props.input.confirmType + }, + // 点击键盘右下角按钮时是否保持键盘不收起,H5无效 + confirmHold: { + type: Boolean, + default: uni.$u.props.input.confirmHold + }, + // focus时,点击页面的时候不收起键盘,微信小程序有效 + holdKeyboard: { + type: Boolean, + default: uni.$u.props.input.holdKeyboard + }, + // 自动获取焦点 + // 在 H5 平台能否聚焦以及软键盘是否跟随弹出,取决于当前浏览器本身的实现。nvue 页面不支持,需使用组件的 focus()、blur() 方法控制焦点 + focus: { + type: Boolean, + default: uni.$u.props.input.focus + }, + // 键盘收起时,是否自动失去焦点,目前仅App3.0.0+有效 + autoBlur: { + type: Boolean, + default: uni.$u.props.input.autoBlur + }, + // 是否去掉 iOS 下的默认内边距,仅微信小程序,且type=textarea时有效 + disableDefaultPadding: { + type: Boolean, + default: uni.$u.props.input.disableDefaultPadding + }, + // 指定focus时光标的位置 + cursor: { + type: [String, Number], + default: uni.$u.props.input.cursor + }, + // 输入框聚焦时底部与键盘的距离 + cursorSpacing: { + type: [String, Number], + default: uni.$u.props.input.cursorSpacing + }, + // 光标起始位置,自动聚集时有效,需与selection-end搭配使用 + selectionStart: { + type: [String, Number], + default: uni.$u.props.input.selectionStart + }, + // 光标结束位置,自动聚集时有效,需与selection-start搭配使用 + selectionEnd: { + type: [String, Number], + default: uni.$u.props.input.selectionEnd + }, + // 键盘弹起时,是否自动上推页面 + adjustPosition: { + type: Boolean, + default: uni.$u.props.input.adjustPosition + }, + // 输入框内容对齐方式,可选值为:left|center|right + inputAlign: { + type: String, + default: uni.$u.props.input.inputAlign + }, + // 输入框字体的大小 + fontSize: { + type: [String, Number], + default: uni.$u.props.input.fontSize + }, + // 输入框字体颜色 + color: { + type: String, + default: uni.$u.props.input.color + }, + // 输入框前置图标 + prefixIcon: { + type: String, + default: uni.$u.props.input.prefixIcon + }, + // 前置图标样式,对象或字符串 + prefixIconStyle: { + type: [String, Object], + default: uni.$u.props.input.prefixIconStyle + }, + // 输入框后置图标 + suffixIcon: { + type: String, + default: uni.$u.props.input.suffixIcon + }, + // 后置图标样式,对象或字符串 + suffixIconStyle: { + type: [String, Object], + default: uni.$u.props.input.suffixIconStyle + }, + // 边框类型,surround-四周边框,bottom-底部边框,none-无边框 + border: { + type: String, + default: uni.$u.props.input.border + }, + // 是否只读,与disabled不同之处在于disabled会置灰组件,而readonly则不会 + readonly: { + type: Boolean, + default: uni.$u.props.input.readonly + }, + // 输入框形状,circle-圆形,square-方形 + shape: { + type: String, + default: uni.$u.props.input.shape + }, + // 用于处理或者过滤输入框内容的方法 + formatter: { + type: [Function, null], + default: uni.$u.props.input.formatter + }, + // 是否忽略组件内对文本合成系统事件的处理 + ignoreCompositionEvent: { + type: Boolean, + default: true + } + } +} diff --git a/uni_modules/uview-ui/components/u-input/u-input.vue b/uni_modules/uview-ui/components/u-input/u-input.vue new file mode 100644 index 0000000..30073eb --- /dev/null +++ b/uni_modules/uview-ui/components/u-input/u-input.vue @@ -0,0 +1,354 @@ + + + + + diff --git a/uni_modules/uview-ui/components/u-keyboard/props.js b/uni_modules/uview-ui/components/u-keyboard/props.js new file mode 100644 index 0000000..cfdb00a --- /dev/null +++ b/uni_modules/uview-ui/components/u-keyboard/props.js @@ -0,0 +1,84 @@ +export default { + props: { + // 键盘的类型,number-数字键盘,card-身份证键盘,car-车牌号键盘 + mode: { + type: String, + default: uni.$u.props.keyboard.mode + }, + // 是否显示键盘的"."符号 + dotDisabled: { + type: Boolean, + default: uni.$u.props.keyboard.dotDisabled + }, + // 是否显示顶部工具条 + tooltip: { + type: Boolean, + default: uni.$u.props.keyboard.tooltip + }, + // 是否显示工具条中间的提示 + showTips: { + type: Boolean, + default: uni.$u.props.keyboard.showTips + }, + // 工具条中间的提示文字 + tips: { + type: String, + default: uni.$u.props.keyboard.tips + }, + // 是否显示工具条左边的"取消"按钮 + showCancel: { + type: Boolean, + default: uni.$u.props.keyboard.showCancel + }, + // 是否显示工具条右边的"完成"按钮 + showConfirm: { + type: Boolean, + default: uni.$u.props.keyboard.showConfirm + }, + // 是否打乱键盘按键的顺序 + random: { + type: Boolean, + default: uni.$u.props.keyboard.random + }, + // 是否开启底部安全区适配,开启的话,会在iPhoneX机型底部添加一定的内边距 + safeAreaInsetBottom: { + type: Boolean, + default: uni.$u.props.keyboard.safeAreaInsetBottom + }, + // 是否允许通过点击遮罩关闭键盘 + closeOnClickOverlay: { + type: Boolean, + default: uni.$u.props.keyboard.closeOnClickOverlay + }, + // 控制键盘的弹出与收起 + show: { + type: Boolean, + default: uni.$u.props.keyboard.show + }, + // 是否显示遮罩,某些时候数字键盘时,用户希望看到自己的数值,所以可能不想要遮罩 + overlay: { + type: Boolean, + default: uni.$u.props.keyboard.overlay + }, + // z-index值 + zIndex: { + type: [String, Number], + default: uni.$u.props.keyboard.zIndex + }, + // 取消按钮的文字 + cancelText: { + type: String, + default: uni.$u.props.keyboard.cancelText + }, + // 确认按钮的文字 + confirmText: { + type: String, + default: uni.$u.props.keyboard.confirmText + }, + // 输入一个中文后,是否自动切换到英文 + autoChange: { + type: Boolean, + default: uni.$u.props.keyboard.autoChange + } + } +} diff --git a/uni_modules/uview-ui/components/u-keyboard/u-keyboard.vue b/uni_modules/uview-ui/components/u-keyboard/u-keyboard.vue new file mode 100644 index 0000000..14228cb --- /dev/null +++ b/uni_modules/uview-ui/components/u-keyboard/u-keyboard.vue @@ -0,0 +1,164 @@ + + + + + diff --git a/uni_modules/uview-ui/components/u-line-progress/props.js b/uni_modules/uview-ui/components/u-line-progress/props.js new file mode 100644 index 0000000..a4210bd --- /dev/null +++ b/uni_modules/uview-ui/components/u-line-progress/props.js @@ -0,0 +1,28 @@ +export default { + props: { + // 激活部分的颜色 + activeColor: { + type: String, + default: uni.$u.props.lineProgress.activeColor + }, + inactiveColor: { + type: String, + default: uni.$u.props.lineProgress.color + }, + // 进度百分比,数值 + percentage: { + type: [String, Number], + default: uni.$u.props.lineProgress.inactiveColor + }, + // 是否在进度条内部显示百分比的值 + showText: { + type: Boolean, + default: uni.$u.props.lineProgress.showText + }, + // 进度条的高度,单位px + height: { + type: [String, Number], + default: uni.$u.props.lineProgress.height + } + } +} diff --git a/uni_modules/uview-ui/components/u-line-progress/u-line-progress.vue b/uni_modules/uview-ui/components/u-line-progress/u-line-progress.vue new file mode 100644 index 0000000..4e27931 --- /dev/null +++ b/uni_modules/uview-ui/components/u-line-progress/u-line-progress.vue @@ -0,0 +1,144 @@ + + + + + diff --git a/uni_modules/uview-ui/components/u-line/props.js b/uni_modules/uview-ui/components/u-line/props.js new file mode 100644 index 0000000..2308cc3 --- /dev/null +++ b/uni_modules/uview-ui/components/u-line/props.js @@ -0,0 +1,33 @@ +export default { + props: { + color: { + type: String, + default: uni.$u.props.line.color + }, + // 长度,竖向时表现为高度,横向时表现为长度,可以为百分比,带px单位的值等 + length: { + type: [String, Number], + default: uni.$u.props.line.length + }, + // 线条方向,col-竖向,row-横向 + direction: { + type: String, + default: uni.$u.props.line.direction + }, + // 是否显示细边框 + hairline: { + type: Boolean, + default: uni.$u.props.line.hairline + }, + // 线条与上下左右元素的间距,字符串形式,如"30px"、"20px 30px" + margin: { + type: [String, Number], + default: uni.$u.props.line.margin + }, + // 是否虚线,true-虚线,false-实线 + dashed: { + type: Boolean, + default: uni.$u.props.line.dashed + } + } +} diff --git a/uni_modules/uview-ui/components/u-line/u-line.vue b/uni_modules/uview-ui/components/u-line/u-line.vue new file mode 100644 index 0000000..e0a6d92 --- /dev/null +++ b/uni_modules/uview-ui/components/u-line/u-line.vue @@ -0,0 +1,62 @@ + + + + + diff --git a/uni_modules/uview-ui/components/u-link/props.js b/uni_modules/uview-ui/components/u-link/props.js new file mode 100644 index 0000000..d39353f --- /dev/null +++ b/uni_modules/uview-ui/components/u-link/props.js @@ -0,0 +1,39 @@ +export default { + props: { + // 文字颜色 + color: { + type: String, + default: uni.$u.props.link.color + }, + // 字体大小,单位px + fontSize: { + type: [String, Number], + default: uni.$u.props.link.fontSize + }, + // 是否显示下划线 + underLine: { + type: Boolean, + default: uni.$u.props.link.underLine + }, + // 要跳转的链接 + href: { + type: String, + default: uni.$u.props.link.href + }, + // 小程序中复制到粘贴板的提示语 + mpTips: { + type: String, + default: uni.$u.props.link.mpTips + }, + // 下划线颜色 + lineColor: { + type: String, + default: uni.$u.props.link.lineColor + }, + // 超链接的问题,不使用slot形式传入,是因为nvue下无法修改颜色 + text: { + type: String, + default: uni.$u.props.link.text + } + } +} diff --git a/uni_modules/uview-ui/components/u-link/u-link.vue b/uni_modules/uview-ui/components/u-link/u-link.vue new file mode 100644 index 0000000..c6802a5 --- /dev/null +++ b/uni_modules/uview-ui/components/u-link/u-link.vue @@ -0,0 +1,83 @@ + + + + + diff --git a/uni_modules/uview-ui/components/u-list-item/props.js b/uni_modules/uview-ui/components/u-list-item/props.js new file mode 100644 index 0000000..58ddc49 --- /dev/null +++ b/uni_modules/uview-ui/components/u-list-item/props.js @@ -0,0 +1,9 @@ +export default { + props: { + // 用于滚动到指定item + anchor: { + type: [String, Number], + default: uni.$u.props.listItem.anchor + } + } +} diff --git a/uni_modules/uview-ui/components/u-list-item/u-list-item.vue b/uni_modules/uview-ui/components/u-list-item/u-list-item.vue new file mode 100644 index 0000000..1a25db6 --- /dev/null +++ b/uni_modules/uview-ui/components/u-list-item/u-list-item.vue @@ -0,0 +1,116 @@ + + + + + diff --git a/uni_modules/uview-ui/components/u-list/props.js b/uni_modules/uview-ui/components/u-list/props.js new file mode 100644 index 0000000..25406f4 --- /dev/null +++ b/uni_modules/uview-ui/components/u-list/props.js @@ -0,0 +1,76 @@ +export default { + props: { + // 控制是否出现滚动条,仅nvue有效 + showScrollbar: { + type: Boolean, + default: uni.$u.props.list.showScrollbar + }, + // 距底部多少时触发scrolltolower事件 + lowerThreshold: { + type: [String, Number], + default: uni.$u.props.list.lowerThreshold + }, + // 距顶部多少时触发scrolltoupper事件,非nvue有效 + upperThreshold: { + type: [String, Number], + default: uni.$u.props.list.upperThreshold + }, + // 设置竖向滚动条位置 + scrollTop: { + type: [String, Number], + default: uni.$u.props.list.scrollTop + }, + // 控制 onscroll 事件触发的频率,仅nvue有效 + offsetAccuracy: { + type: [String, Number], + default: uni.$u.props.list.offsetAccuracy + }, + // 启用 flexbox 布局。开启后,当前节点声明了display: flex就会成为flex container,并作用于其孩子节点,仅微信小程序有效 + enableFlex: { + type: Boolean, + default: uni.$u.props.list.enableFlex + }, + // 是否按分页模式显示List,默认值false + pagingEnabled: { + type: Boolean, + default: uni.$u.props.list.pagingEnabled + }, + // 是否允许List滚动 + scrollable: { + type: Boolean, + default: uni.$u.props.list.scrollable + }, + // 值应为某子元素id(id不能以数字开头) + scrollIntoView: { + type: String, + default: uni.$u.props.list.scrollIntoView + }, + // 在设置滚动条位置时使用动画过渡 + scrollWithAnimation: { + type: Boolean, + default: uni.$u.props.list.scrollWithAnimation + }, + // iOS点击顶部状态栏、安卓双击标题栏时,滚动条返回顶部,只对微信小程序有效 + enableBackToTop: { + type: Boolean, + default: uni.$u.props.list.enableBackToTop + }, + // 列表的高度 + height: { + type: [String, Number], + default: uni.$u.props.list.height + }, + // 列表宽度 + width: { + type: [String, Number], + default: uni.$u.props.list.width + }, + // 列表前后预渲染的屏数,1代表一个屏幕的高度,1.5代表1个半屏幕高度 + preLoadScreen: { + type: [String, Number], + default: uni.$u.props.list.preLoadScreen + } + // vue下,是否开启虚拟列表 + + } +} diff --git a/uni_modules/uview-ui/components/u-list/u-list.vue b/uni_modules/uview-ui/components/u-list/u-list.vue new file mode 100644 index 0000000..4447cab --- /dev/null +++ b/uni_modules/uview-ui/components/u-list/u-list.vue @@ -0,0 +1,157 @@ + + + + + diff --git a/uni_modules/uview-ui/components/u-loading-icon/props.js b/uni_modules/uview-ui/components/u-loading-icon/props.js new file mode 100644 index 0000000..c35524e --- /dev/null +++ b/uni_modules/uview-ui/components/u-loading-icon/props.js @@ -0,0 +1,59 @@ +export default { + props: { + // 是否显示组件 + show: { + type: Boolean, + default: uni.$u.props.loadingIcon.show + }, + // 颜色 + color: { + type: String, + default: uni.$u.props.loadingIcon.color + }, + // 提示文字颜色 + textColor: { + type: String, + default: uni.$u.props.loadingIcon.textColor + }, + // 文字和图标是否垂直排列 + vertical: { + type: Boolean, + default: uni.$u.props.loadingIcon.vertical + }, + // 模式选择,circle-圆形,spinner-花朵形,semicircle-半圆形 + mode: { + type: String, + default: uni.$u.props.loadingIcon.mode + }, + // 图标大小,单位默认px + size: { + type: [String, Number], + default: uni.$u.props.loadingIcon.size + }, + // 文字大小 + textSize: { + type: [String, Number], + default: uni.$u.props.loadingIcon.textSize + }, + // 文字内容 + text: { + type: [String, Number], + default: uni.$u.props.loadingIcon.text + }, + // 动画模式 + timingFunction: { + type: String, + default: uni.$u.props.loadingIcon.timingFunction + }, + // 动画执行周期时间 + duration: { + type: [String, Number], + default: uni.$u.props.loadingIcon.duration + }, + // mode=circle时的暗边颜色 + inactiveColor: { + type: String, + default: uni.$u.props.loadingIcon.inactiveColor + } + } +} diff --git a/uni_modules/uview-ui/components/u-loading-icon/u-loading-icon.vue b/uni_modules/uview-ui/components/u-loading-icon/u-loading-icon.vue new file mode 100644 index 0000000..2ede5c3 --- /dev/null +++ b/uni_modules/uview-ui/components/u-loading-icon/u-loading-icon.vue @@ -0,0 +1,343 @@ + + + + + diff --git a/uni_modules/uview-ui/components/u-loading-page/props.js b/uni_modules/uview-ui/components/u-loading-page/props.js new file mode 100644 index 0000000..e239b61 --- /dev/null +++ b/uni_modules/uview-ui/components/u-loading-page/props.js @@ -0,0 +1,49 @@ +export default { + props: { + // 提示内容 + loadingText: { + type: [String, Number], + default: uni.$u.props.loadingPage.loadingText + }, + // 文字上方用于替换loading动画的图片 + image: { + type: String, + default: uni.$u.props.loadingPage.image + }, + // 加载动画的模式,circle-圆形,spinner-花朵形,semicircle-半圆形 + loadingMode: { + type: String, + default: uni.$u.props.loadingPage.loadingMode + }, + // 是否加载中 + loading: { + type: Boolean, + default: uni.$u.props.loadingPage.loading + }, + // 背景色 + bgColor: { + type: String, + default: uni.$u.props.loadingPage.bgColor + }, + // 文字颜色 + color: { + type: String, + default: uni.$u.props.loadingPage.color + }, + // 文字大小 + fontSize: { + type: [String, Number], + default: uni.$u.props.loadingPage.fontSize + }, + // 图标大小 + iconSize: { + type: [String, Number], + default: uni.$u.props.loadingPage.fontSize + }, + // 加载中图标的颜色,只能rgb或者十六进制颜色值 + loadingColor: { + type: String, + default: uni.$u.props.loadingPage.loadingColor + } + } +} diff --git a/uni_modules/uview-ui/components/u-loading-page/u-loading-page.vue b/uni_modules/uview-ui/components/u-loading-page/u-loading-page.vue new file mode 100644 index 0000000..03a78ad --- /dev/null +++ b/uni_modules/uview-ui/components/u-loading-page/u-loading-page.vue @@ -0,0 +1,115 @@ + + + + + diff --git a/uni_modules/uview-ui/components/u-loadmore/props.js b/uni_modules/uview-ui/components/u-loadmore/props.js new file mode 100644 index 0000000..1e67d89 --- /dev/null +++ b/uni_modules/uview-ui/components/u-loadmore/props.js @@ -0,0 +1,94 @@ +export default { + props: { + // 组件状态,loadmore-加载前的状态,loading-加载中的状态,nomore-没有更多的状态 + status: { + type: String, + default: uni.$u.props.loadmore.status + }, + // 组件背景色 + bgColor: { + type: String, + default: uni.$u.props.loadmore.bgColor + }, + // 是否显示加载中的图标 + icon: { + type: Boolean, + default: uni.$u.props.loadmore.icon + }, + // 字体大小 + fontSize: { + type: [String, Number], + default: uni.$u.props.loadmore.fontSize + }, + // 图标大小 + iconSize: { + type: [String, Number], + default: uni.$u.props.loadmore.iconSize + }, + // 字体颜色 + color: { + type: String, + default: uni.$u.props.loadmore.color + }, + // 加载中状态的图标,spinner-花朵状图标,circle-圆圈状,semicircle-半圆 + loadingIcon: { + type: String, + default: uni.$u.props.loadmore.loadingIcon + }, + // 加载前的提示语 + loadmoreText: { + type: String, + default: uni.$u.props.loadmore.loadmoreText + }, + // 加载中提示语 + loadingText: { + type: String, + default: uni.$u.props.loadmore.loadingText + }, + // 没有更多的提示语 + nomoreText: { + type: String, + default: uni.$u.props.loadmore.nomoreText + }, + // 在“没有更多”状态下,是否显示粗点 + isDot: { + type: Boolean, + default: uni.$u.props.loadmore.isDot + }, + // 加载中图标的颜色 + iconColor: { + type: String, + default: uni.$u.props.loadmore.iconColor + }, + // 上边距 + marginTop: { + type: [String, Number], + default: uni.$u.props.loadmore.marginTop + }, + // 下边距 + marginBottom: { + type: [String, Number], + default: uni.$u.props.loadmore.marginBottom + }, + // 高度,单位px + height: { + type: [String, Number], + default: uni.$u.props.loadmore.height + }, + // 是否显示左边分割线 + line: { + type: Boolean, + default: uni.$u.props.loadmore.line + }, + // 线条颜色 + lineColor: { + type: String, + default: uni.$u.props.loadmore.lineColor + }, + // 是否虚线,true-虚线,false-实线 + dashed: { + type: Boolean, + default: uni.$u.props.loadmore.dashed + } + } +} diff --git a/uni_modules/uview-ui/components/u-loadmore/u-loadmore.vue b/uni_modules/uview-ui/components/u-loadmore/u-loadmore.vue new file mode 100644 index 0000000..73c79fe --- /dev/null +++ b/uni_modules/uview-ui/components/u-loadmore/u-loadmore.vue @@ -0,0 +1,150 @@ + + + + + diff --git a/uni_modules/uview-ui/components/u-modal/props.js b/uni_modules/uview-ui/components/u-modal/props.js new file mode 100644 index 0000000..f76672c --- /dev/null +++ b/uni_modules/uview-ui/components/u-modal/props.js @@ -0,0 +1,84 @@ +export default { + props: { + // 是否展示modal + show: { + type: Boolean, + default: uni.$u.props.modal.show + }, + // 标题 + title: { + type: [String], + default: uni.$u.props.modal.title + }, + // 弹窗内容 + content: { + type: String, + default: uni.$u.props.modal.content + }, + // 确认文案 + confirmText: { + type: String, + default: uni.$u.props.modal.confirmText + }, + // 取消文案 + cancelText: { + type: String, + default: uni.$u.props.modal.cancelText + }, + // 是否显示确认按钮 + showConfirmButton: { + type: Boolean, + default: uni.$u.props.modal.showConfirmButton + }, + // 是否显示取消按钮 + showCancelButton: { + type: Boolean, + default: uni.$u.props.modal.showCancelButton + }, + // 确认按钮颜色 + confirmColor: { + type: String, + default: uni.$u.props.modal.confirmColor + }, + // 取消文字颜色 + cancelColor: { + type: String, + default: uni.$u.props.modal.cancelColor + }, + // 对调确认和取消的位置 + buttonReverse: { + type: Boolean, + default: uni.$u.props.modal.buttonReverse + }, + // 是否开启缩放效果 + zoom: { + type: Boolean, + default: uni.$u.props.modal.zoom + }, + // 是否异步关闭,只对确定按钮有效 + asyncClose: { + type: Boolean, + default: uni.$u.props.modal.asyncClose + }, + // 是否允许点击遮罩关闭modal + closeOnClickOverlay: { + type: Boolean, + default: uni.$u.props.modal.closeOnClickOverlay + }, + // 给一个负的margin-top,往上偏移,避免和键盘重合的情况 + negativeTop: { + type: [String, Number], + default: uni.$u.props.modal.negativeTop + }, + // modal宽度,不支持百分比,可以数值,px,rpx单位 + width: { + type: [String, Number], + default: uni.$u.props.modal.width + }, + // 确认按钮的样式,circle-圆形,square-方形,如设置,将不会显示取消按钮 + confirmButtonShape: { + type: String, + default: uni.$u.props.modal.confirmButtonShape + } + } +} diff --git a/uni_modules/uview-ui/components/u-modal/u-modal.vue b/uni_modules/uview-ui/components/u-modal/u-modal.vue new file mode 100644 index 0000000..2cbc737 --- /dev/null +++ b/uni_modules/uview-ui/components/u-modal/u-modal.vue @@ -0,0 +1,227 @@ + + + + + diff --git a/uni_modules/uview-ui/components/u-navbar/props.js b/uni_modules/uview-ui/components/u-navbar/props.js new file mode 100644 index 0000000..5398de2 --- /dev/null +++ b/uni_modules/uview-ui/components/u-navbar/props.js @@ -0,0 +1,84 @@ +export default { + props: { + // 是否开启顶部安全区适配 + safeAreaInsetTop: { + type: Boolean, + default: uni.$u.props.navbar.safeAreaInsetTop + }, + // 固定在顶部时,是否生成一个等高元素,以防止塌陷 + placeholder: { + type: Boolean, + default: uni.$u.props.navbar.placeholder + }, + // 是否固定在顶部 + fixed: { + type: Boolean, + default: uni.$u.props.navbar.fixed + }, + // 是否显示下边框 + border: { + type: Boolean, + default: uni.$u.props.navbar.border + }, + // 左边的图标 + leftIcon: { + type: String, + default: uni.$u.props.navbar.leftIcon + }, + // 左边的提示文字 + leftText: { + type: String, + default: uni.$u.props.navbar.leftText + }, + // 左右的提示文字 + rightText: { + type: String, + default: uni.$u.props.navbar.rightText + }, + // 右边的图标 + rightIcon: { + type: String, + default: uni.$u.props.navbar.rightIcon + }, + // 标题 + title: { + type: [String, Number], + default: uni.$u.props.navbar.title + }, + // 背景颜色 + bgColor: { + type: String, + default: uni.$u.props.navbar.bgColor + }, + // 标题的宽度 + titleWidth: { + type: [String, Number], + default: uni.$u.props.navbar.titleWidth + }, + // 导航栏高度 + height: { + type: [String, Number], + default: uni.$u.props.navbar.height + }, + // 左侧返回图标的大小 + leftIconSize: { + type: [String, Number], + default: uni.$u.props.navbar.leftIconSize + }, + // 左侧返回图标的颜色 + leftIconColor: { + type: String, + default: uni.$u.props.navbar.leftIconColor + }, + // 点击左侧区域(返回图标),是否自动返回上一页 + autoBack: { + type: Boolean, + default: uni.$u.props.navbar.autoBack + }, + // 标题的样式,对象或字符串 + titleStyle: { + type: [String, Object], + default: uni.$u.props.navbar.titleStyle + } + } +} diff --git a/uni_modules/uview-ui/components/u-navbar/u-navbar.vue b/uni_modules/uview-ui/components/u-navbar/u-navbar.vue new file mode 100644 index 0000000..2b206b7 --- /dev/null +++ b/uni_modules/uview-ui/components/u-navbar/u-navbar.vue @@ -0,0 +1,186 @@ + + + + + diff --git a/uni_modules/uview-ui/components/u-no-network/props.js b/uni_modules/uview-ui/components/u-no-network/props.js new file mode 100644 index 0000000..9f3af62 --- /dev/null +++ b/uni_modules/uview-ui/components/u-no-network/props.js @@ -0,0 +1,19 @@ +export default { + props: { + // 页面文字提示 + tips: { + type: String, + default: uni.$u.props.noNetwork.tips + }, + // 一个z-index值,用于设置没有网络这个组件的层次,因为页面可能会有其他定位的元素层级过高,导致此组件被覆盖 + zIndex: { + type: [String, Number], + default: uni.$u.props.noNetwork.zIndex + }, + // image 没有网络的图片提示 + image: { + type: String, + default: uni.$u.props.noNetwork.image + } + } +} diff --git a/uni_modules/uview-ui/components/u-no-network/u-no-network.vue b/uni_modules/uview-ui/components/u-no-network/u-no-network.vue new file mode 100644 index 0000000..9710729 --- /dev/null +++ b/uni_modules/uview-ui/components/u-no-network/u-no-network.vue @@ -0,0 +1,220 @@ + + + + + diff --git a/uni_modules/uview-ui/components/u-notice-bar/props.js b/uni_modules/uview-ui/components/u-notice-bar/props.js new file mode 100644 index 0000000..7040c29 --- /dev/null +++ b/uni_modules/uview-ui/components/u-notice-bar/props.js @@ -0,0 +1,70 @@ +export default { + props: { + // 显示的内容,数组 + text: { + type: [Array, String], + default: uni.$u.props.noticeBar.text + }, + // 通告滚动模式,row-横向滚动,column-竖向滚动 + direction: { + type: String, + default: uni.$u.props.noticeBar.direction + }, + // direction = row时,是否使用步进形式滚动 + step: { + type: Boolean, + default: uni.$u.props.noticeBar.step + }, + // 是否显示左侧的音量图标 + icon: { + type: String, + default: uni.$u.props.noticeBar.icon + }, + // 通告模式,link-显示右箭头,closable-显示右侧关闭图标 + mode: { + type: String, + default: uni.$u.props.noticeBar.mode + }, + // 文字颜色,各图标也会使用文字颜色 + color: { + type: String, + default: uni.$u.props.noticeBar.color + }, + // 背景颜色 + bgColor: { + type: String, + default: uni.$u.props.noticeBar.bgColor + }, + // 水平滚动时的滚动速度,即每秒滚动多少px(px),这有利于控制文字无论多少时,都能有一个恒定的速度 + speed: { + type: [String, Number], + default: uni.$u.props.noticeBar.speed + }, + // 字体大小 + fontSize: { + type: [String, Number], + default: uni.$u.props.noticeBar.fontSize + }, + // 滚动一个周期的时间长,单位ms + duration: { + type: [String, Number], + default: uni.$u.props.noticeBar.duration + }, + // 是否禁止用手滑动切换 + // 目前HX2.6.11,只支持App 2.5.5+、H5 2.5.5+、支付宝小程序、字节跳动小程序 + disableTouch: { + type: Boolean, + default: uni.$u.props.noticeBar.disableTouch + }, + // 跳转的页面路径 + url: { + type: String, + default: uni.$u.props.noticeBar.url + }, + // 页面跳转的类型 + linkType: { + type: String, + default: uni.$u.props.noticeBar.linkType + } + } +} diff --git a/uni_modules/uview-ui/components/u-notice-bar/u-notice-bar.vue b/uni_modules/uview-ui/components/u-notice-bar/u-notice-bar.vue new file mode 100644 index 0000000..a06eb39 --- /dev/null +++ b/uni_modules/uview-ui/components/u-notice-bar/u-notice-bar.vue @@ -0,0 +1,101 @@ + + + + diff --git a/uni_modules/uview-ui/components/u-notify/props.js b/uni_modules/uview-ui/components/u-notify/props.js new file mode 100644 index 0000000..57a9d71 --- /dev/null +++ b/uni_modules/uview-ui/components/u-notify/props.js @@ -0,0 +1,49 @@ +export default { + props: { + // 到顶部的距离 + top: { + type: [String, Number], + default: uni.$u.props.notify.top + }, + // 是否展示组件 + // show: { + // type: Boolean, + // default: uni.$u.props.notify.show + // }, + // type主题,primary,success,warning,error + type: { + type: String, + default: uni.$u.props.notify.type + }, + // 字体颜色 + color: { + type: String, + default: uni.$u.props.notify.color + }, + // 背景颜色 + bgColor: { + type: String, + default: uni.$u.props.notify.bgColor + }, + // 展示的文字内容 + message: { + type: String, + default: uni.$u.props.notify.message + }, + // 展示时长,为0时不消失,单位ms + duration: { + type: [String, Number], + default: uni.$u.props.notify.duration + }, + // 字体大小 + fontSize: { + type: [String, Number], + default: uni.$u.props.notify.fontSize + }, + // 是否留出顶部安全距离(状态栏高度) + safeAreaInsetTop: { + type: Boolean, + default: uni.$u.props.notify.safeAreaInsetTop + } + } +} diff --git a/uni_modules/uview-ui/components/u-notify/u-notify.vue b/uni_modules/uview-ui/components/u-notify/u-notify.vue new file mode 100644 index 0000000..30adb72 --- /dev/null +++ b/uni_modules/uview-ui/components/u-notify/u-notify.vue @@ -0,0 +1,211 @@ + + + + + diff --git a/uni_modules/uview-ui/components/u-number-box/props.js b/uni_modules/uview-ui/components/u-number-box/props.js new file mode 100644 index 0000000..fb0fa94 --- /dev/null +++ b/uni_modules/uview-ui/components/u-number-box/props.js @@ -0,0 +1,109 @@ +export default { + props: { + // 步进器标识符,在change回调返回 + name: { + type: [String, Number], + default: uni.$u.props.numberBox.name + }, + // 用于双向绑定的值,初始化时设置设为默认min值(最小值) + value: { + type: [String, Number], + default: uni.$u.props.numberBox.value + }, + // 最小值 + min: { + type: [String, Number], + default: uni.$u.props.numberBox.min + }, + // 最大值 + max: { + type: [String, Number], + default: uni.$u.props.numberBox.max + }, + // 加减的步长,可为小数 + step: { + type: [String, Number], + default: uni.$u.props.numberBox.step + }, + // 是否只允许输入整数 + integer: { + type: Boolean, + default: uni.$u.props.numberBox.integer + }, + // 是否禁用,包括输入框,加减按钮 + disabled: { + type: Boolean, + default: uni.$u.props.numberBox.disabled + }, + // 是否禁用输入框 + disabledInput: { + type: Boolean, + default: uni.$u.props.numberBox.disabledInput + }, + // 是否开启异步变更,开启后需要手动控制输入值 + asyncChange: { + type: Boolean, + default: uni.$u.props.numberBox.asyncChange + }, + // 输入框宽度,单位为px + inputWidth: { + type: [String, Number], + default: uni.$u.props.numberBox.inputWidth + }, + // 是否显示减少按钮 + showMinus: { + type: Boolean, + default: uni.$u.props.numberBox.showMinus + }, + // 是否显示增加按钮 + showPlus: { + type: Boolean, + default: uni.$u.props.numberBox.showPlus + }, + // 显示的小数位数 + decimalLength: { + type: [String, Number, null], + default: uni.$u.props.numberBox.decimalLength + }, + // 是否开启长按加减手势 + longPress: { + type: Boolean, + default: uni.$u.props.numberBox.longPress + }, + // 输入框文字和加减按钮图标的颜色 + color: { + type: String, + default: uni.$u.props.numberBox.color + }, + // 按钮大小,宽高等于此值,单位px,输入框高度和此值保持一致 + buttonSize: { + type: [String, Number], + default: uni.$u.props.numberBox.buttonSize + }, + // 输入框和按钮的背景颜色 + bgColor: { + type: String, + default: uni.$u.props.numberBox.bgColor + }, + // 指定光标于键盘的距离,避免键盘遮挡输入框,单位px + cursorSpacing: { + type: [String, Number], + default: uni.$u.props.numberBox.cursorSpacing + }, + // 是否禁用增加按钮 + disablePlus: { + type: Boolean, + default: uni.$u.props.numberBox.disablePlus + }, + // 是否禁用减少按钮 + disableMinus: { + type: Boolean, + default: uni.$u.props.numberBox.disableMinus + }, + // 加减按钮图标的样式 + iconStyle: { + type: [Object, String], + default: uni.$u.props.numberBox.iconStyle + } + } +} diff --git a/uni_modules/uview-ui/components/u-number-box/u-number-box.vue b/uni_modules/uview-ui/components/u-number-box/u-number-box.vue new file mode 100644 index 0000000..69211c5 --- /dev/null +++ b/uni_modules/uview-ui/components/u-number-box/u-number-box.vue @@ -0,0 +1,416 @@ + + + + + diff --git a/uni_modules/uview-ui/components/u-number-keyboard/props.js b/uni_modules/uview-ui/components/u-number-keyboard/props.js new file mode 100644 index 0000000..5e3bf55 --- /dev/null +++ b/uni_modules/uview-ui/components/u-number-keyboard/props.js @@ -0,0 +1,19 @@ +export default { + props: { + // 键盘的类型,number-数字键盘,card-身份证键盘 + mode: { + type: String, + default: uni.$u.props.numberKeyboard.value + }, + // 是否显示键盘的"."符号 + dotDisabled: { + type: Boolean, + default: uni.$u.props.numberKeyboard.dotDisabled + }, + // 是否打乱键盘按键的顺序 + random: { + type: Boolean, + default: uni.$u.props.numberKeyboard.random + } + } +} diff --git a/uni_modules/uview-ui/components/u-number-keyboard/u-number-keyboard.vue b/uni_modules/uview-ui/components/u-number-keyboard/u-number-keyboard.vue new file mode 100644 index 0000000..4f505c6 --- /dev/null +++ b/uni_modules/uview-ui/components/u-number-keyboard/u-number-keyboard.vue @@ -0,0 +1,196 @@ + + + + + diff --git a/uni_modules/uview-ui/components/u-overlay/props.js b/uni_modules/uview-ui/components/u-overlay/props.js new file mode 100644 index 0000000..e6974df --- /dev/null +++ b/uni_modules/uview-ui/components/u-overlay/props.js @@ -0,0 +1,24 @@ +export default { + props: { + // 是否显示遮罩 + show: { + type: Boolean, + default: uni.$u.props.overlay.show + }, + // 层级z-index + zIndex: { + type: [String, Number], + default: uni.$u.props.overlay.zIndex + }, + // 遮罩的过渡时间,单位为ms + duration: { + type: [String, Number], + default: uni.$u.props.overlay.duration + }, + // 不透明度值,当做rgba的第四个参数 + opacity: { + type: [String, Number], + default: uni.$u.props.overlay.opacity + } + } +} diff --git a/uni_modules/uview-ui/components/u-overlay/u-overlay.vue b/uni_modules/uview-ui/components/u-overlay/u-overlay.vue new file mode 100644 index 0000000..92de4e9 --- /dev/null +++ b/uni_modules/uview-ui/components/u-overlay/u-overlay.vue @@ -0,0 +1,68 @@ + + + + + diff --git a/uni_modules/uview-ui/components/u-parse/node/node.vue b/uni_modules/uview-ui/components/u-parse/node/node.vue new file mode 100644 index 0000000..73e30fd --- /dev/null +++ b/uni_modules/uview-ui/components/u-parse/node/node.vue @@ -0,0 +1,499 @@ +