From 49be2aa37c7bbb466fe0ae6614181eba88fed1de Mon Sep 17 00:00:00 2001 From: "juncheng.li" Date: Fri, 24 Mar 2023 10:07:29 +0800 Subject: [PATCH 1/2] =?UTF-8?q?=E9=9B=86=E6=88=90uview?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- fe/PDA/App.vue | 1 + fe/PDA/main.js | 3 + fe/PDA/uni.scss | 3 +- fe/PDA/uni_modules/vk-uview-ui/changelog.md | 135 ++ .../u-action-sheet/u-action-sheet.vue | 246 +++ .../components/u-alert-tips/u-alert-tips.vue | 257 ++++ .../u-avatar-cropper/u-avatar-cropper.vue | 290 ++++ .../components/u-avatar-cropper/weCropper.js | 1256 +++++++++++++++ .../components/u-avatar/u-avatar.vue | 263 ++++ .../components/u-back-top/u-back-top.vue | 153 ++ .../components/u-badge/u-badge.vue | 216 +++ .../components/u-button/u-button.vue | 602 ++++++++ .../components/u-calendar/u-calendar.vue | 666 ++++++++ .../u-car-keyboard/u-car-keyboard.vue | 267 ++++ .../vk-uview-ui/components/u-card/u-card.vue | 300 ++++ .../components/u-cell-group/u-cell-group.vue | 70 + .../components/u-cell-item/u-cell-item.vue | 317 ++++ .../u-checkbox-group/u-checkbox-group.vue | 178 +++ .../components/u-checkbox/u-checkbox.vue | 322 ++++ .../u-circle-progress/u-circle-progress.vue | 220 +++ .../vk-uview-ui/components/u-col/u-col.vue | 157 ++ .../u-collapse-item/u-collapse-item.vue | 206 +++ .../components/u-collapse/u-collapse.vue | 100 ++ .../u-column-notice/u-column-notice.vue | 238 +++ .../components/u-count-down/u-count-down.vue | 175 +++ .../components/u-count-down/utils.js | 62 + .../components/u-count-to/u-count-to.vue | 266 ++++ .../components/u-divider/u-divider.vue | 153 ++ .../u-dropdown-item/u-dropdown-item.vue | 166 ++ .../components/u-dropdown/u-dropdown.vue | 299 ++++ .../components/u-empty/u-empty.vue | 193 +++ .../components/u-field/u-field.vue | 402 +++++ .../components/u-form-item/u-form-item.vue | 509 +++++++ .../vk-uview-ui/components/u-form/u-form.vue | 148 ++ .../u-full-screen/u-full-screen.vue | 52 + .../vk-uview-ui/components/u-gap/u-gap.vue | 54 + .../components/u-grid-item/u-grid-item.vue | 127 ++ .../vk-uview-ui/components/u-grid/u-grid.vue | 109 ++ .../vk-uview-ui/components/u-icon/u-icon.vue | 369 +++++ .../components/u-image/u-image.vue | 269 ++++ .../u-index-anchor/u-index-anchor.vue | 89 ++ .../components/u-index-list/u-index-list.vue | 315 ++++ .../components/u-input/u-input.vue | 460 ++++++ .../components/u-keyboard/u-keyboard.vue | 285 ++++ .../components/u-lazy-load/u-lazy-load.vue | 254 +++ .../u-line-progress/u-line-progress.vue | 147 ++ .../vk-uview-ui/components/u-line/u-line.vue | 84 + .../vk-uview-ui/components/u-link/u-link.vue | 89 ++ .../u-loading-page/u-loading-page.vue | 25 + .../components/u-loading/u-loading.vue | 106 ++ .../components/u-loadmore/u-loadmore.vue | 204 +++ .../vk-uview-ui/components/u-mask/u-mask.vue | 137 ++ .../u-message-input/u-message-input.vue | 327 ++++ .../components/u-modal/u-modal.vue | 339 +++++ .../components/u-navbar/u-navbar.vue | 315 ++++ .../components/u-no-network/u-no-network.vue | 233 +++ .../components/u-notice-bar/u-notice-bar.vue | 273 ++++ .../components/u-number-box/u-number-box.vue | 476 ++++++ .../u-number-keyboard/u-number-keyboard.vue | 170 +++ .../components/u-parse/libs/CssHandler.js | 100 ++ .../components/u-parse/libs/MpHtmlParser.js | 581 +++++++ .../components/u-parse/libs/config.js | 80 + .../components/u-parse/libs/trees.vue | 537 +++++++ .../components/u-parse/u-parse.vue | 676 ++++++++ .../components/u-picker/u-picker.vue | 895 +++++++++++ .../components/u-popup/u-popup.vue | 480 ++++++ .../u-radio-group/u-radio-group.vue | 176 +++ .../components/u-radio/u-radio.vue | 276 ++++ .../vk-uview-ui/components/u-rate/u-rate.vue | 293 ++++ .../components/u-read-more/u-read-more.vue | 180 +++ .../components/u-row-notice/u-row-notice.vue | 270 ++++ .../vk-uview-ui/components/u-row/u-row.vue | 85 ++ .../components/u-search/u-search.vue | 357 +++++ .../components/u-section/u-section.vue | 155 ++ .../components/u-select/u-select.vue | 437 ++++++ .../components/u-skeleton/u-skeleton.vue | 199 +++ .../components/u-slider/u-slider.vue | 290 ++++ .../components/u-steps/u-steps.vue | 200 +++ .../components/u-sticky/u-sticky.vue | 166 ++ .../components/u-subsection/u-subsection.vue | 404 +++++ .../u-swipe-action/u-swipe-action.vue | 256 ++++ .../components/u-swiper/u-swiper.vue | 341 +++++ .../components/u-switch/u-switch.vue | 191 +++ .../components/u-tabbar/u-tabbar.vue | 373 +++++ .../components/u-table/u-table.vue | 85 ++ .../u-tabs-swiper/u-tabs-swiper.vue | 489 ++++++ .../vk-uview-ui/components/u-tabs/u-tabs.vue | 399 +++++ .../vk-uview-ui/components/u-tag/u-tag.vue | 295 ++++ .../vk-uview-ui/components/u-td/u-td.vue | 66 + .../vk-uview-ui/components/u-th/u-th.vue | 62 + .../u-time-line-item/u-time-line-item.vue | 83 + .../components/u-time-line/u-time-line.vue | 43 + .../components/u-toast/u-toast.vue | 220 +++ .../components/u-top-tips/u-top-tips.vue | 121 ++ .../vk-uview-ui/components/u-tr/u-tr.vue | 25 + .../components/u-upload/u-upload.vue | 728 +++++++++ .../u-verification-code.vue | 175 +++ .../components/u-waterfall/u-waterfall.vue | 199 +++ .../components/vk-uview-ui/vk-uview-ui.vue | 15 + fe/PDA/uni_modules/vk-uview-ui/iconfont.css | 910 +++++++++++ fe/PDA/uni_modules/vk-uview-ui/index.js | 146 ++ fe/PDA/uni_modules/vk-uview-ui/index.scss | 23 + .../vk-uview-ui/libs/address/areas.json | 1 + .../vk-uview-ui/libs/address/citys.json | 1 + .../vk-uview-ui/libs/address/provinces.json | 1 + .../vk-uview-ui/libs/config/config.js | 15 + .../vk-uview-ui/libs/config/zIndex.js | 20 + .../vk-uview-ui/libs/css/color.scss | 155 ++ .../vk-uview-ui/libs/css/common.scss | 176 +++ .../libs/css/style.components.scss | 7 + .../vk-uview-ui/libs/css/style.h5.scss | 8 + .../vk-uview-ui/libs/css/style.mp.scss | 72 + .../vk-uview-ui/libs/css/style.nvue.scss | 3 + .../vk-uview-ui/libs/css/style.vue.scss | 175 +++ .../vk-uview-ui/libs/function/$parent.js | 18 + .../vk-uview-ui/libs/function/addUnit.js | 8 + .../vk-uview-ui/libs/function/bem.js | 4 + .../vk-uview-ui/libs/function/color.js | 37 + .../libs/function/colorGradient.js | 134 ++ .../vk-uview-ui/libs/function/debounce.js | 29 + .../vk-uview-ui/libs/function/deepClone.js | 23 + .../vk-uview-ui/libs/function/deepMerge.js | 30 + .../vk-uview-ui/libs/function/getParent.js | 47 + .../vk-uview-ui/libs/function/guid.js | 41 + .../vk-uview-ui/libs/function/md5.js | 385 +++++ .../vk-uview-ui/libs/function/queryParams.js | 58 + .../vk-uview-ui/libs/function/random.js | 10 + .../vk-uview-ui/libs/function/randomArray.js | 7 + .../vk-uview-ui/libs/function/route.js | 122 ++ .../vk-uview-ui/libs/function/sys.js | 9 + .../vk-uview-ui/libs/function/test.js | 232 +++ .../vk-uview-ui/libs/function/throttle.js | 34 + .../vk-uview-ui/libs/function/timeFormat.js | 51 + .../vk-uview-ui/libs/function/timeFrom.js | 47 + .../vk-uview-ui/libs/function/toast.js | 9 + .../vk-uview-ui/libs/function/trim.js | 15 + .../vk-uview-ui/libs/function/type2icon.js | 35 + .../vk-uview-ui/libs/mixin/mixin.js | 86 ++ .../vk-uview-ui/libs/mixin/mpShare.js | 18 + .../vk-uview-ui/libs/request/index.js | 169 ++ .../vk-uview-ui/libs/store/index.js | 19 + .../vk-uview-ui/libs/util/async-validator.js | 1356 +++++++++++++++++ .../vk-uview-ui/libs/util/emitter.js | 64 + fe/PDA/uni_modules/vk-uview-ui/package.json | 82 + fe/PDA/uni_modules/vk-uview-ui/readme.md | 125 ++ fe/PDA/uni_modules/vk-uview-ui/theme.scss | 38 + 146 files changed, 30204 insertions(+), 1 deletion(-) create mode 100644 fe/PDA/uni_modules/vk-uview-ui/changelog.md create mode 100644 fe/PDA/uni_modules/vk-uview-ui/components/u-action-sheet/u-action-sheet.vue create mode 100644 fe/PDA/uni_modules/vk-uview-ui/components/u-alert-tips/u-alert-tips.vue create mode 100644 fe/PDA/uni_modules/vk-uview-ui/components/u-avatar-cropper/u-avatar-cropper.vue create mode 100644 fe/PDA/uni_modules/vk-uview-ui/components/u-avatar-cropper/weCropper.js create mode 100644 fe/PDA/uni_modules/vk-uview-ui/components/u-avatar/u-avatar.vue create mode 100644 fe/PDA/uni_modules/vk-uview-ui/components/u-back-top/u-back-top.vue create mode 100644 fe/PDA/uni_modules/vk-uview-ui/components/u-badge/u-badge.vue create mode 100644 fe/PDA/uni_modules/vk-uview-ui/components/u-button/u-button.vue create mode 100644 fe/PDA/uni_modules/vk-uview-ui/components/u-calendar/u-calendar.vue create mode 100644 fe/PDA/uni_modules/vk-uview-ui/components/u-car-keyboard/u-car-keyboard.vue create mode 100644 fe/PDA/uni_modules/vk-uview-ui/components/u-card/u-card.vue create mode 100644 fe/PDA/uni_modules/vk-uview-ui/components/u-cell-group/u-cell-group.vue create mode 100644 fe/PDA/uni_modules/vk-uview-ui/components/u-cell-item/u-cell-item.vue create mode 100644 fe/PDA/uni_modules/vk-uview-ui/components/u-checkbox-group/u-checkbox-group.vue create mode 100644 fe/PDA/uni_modules/vk-uview-ui/components/u-checkbox/u-checkbox.vue create mode 100644 fe/PDA/uni_modules/vk-uview-ui/components/u-circle-progress/u-circle-progress.vue create mode 100644 fe/PDA/uni_modules/vk-uview-ui/components/u-col/u-col.vue create mode 100644 fe/PDA/uni_modules/vk-uview-ui/components/u-collapse-item/u-collapse-item.vue create mode 100644 fe/PDA/uni_modules/vk-uview-ui/components/u-collapse/u-collapse.vue create mode 100644 fe/PDA/uni_modules/vk-uview-ui/components/u-column-notice/u-column-notice.vue create mode 100644 fe/PDA/uni_modules/vk-uview-ui/components/u-count-down/u-count-down.vue create mode 100644 fe/PDA/uni_modules/vk-uview-ui/components/u-count-down/utils.js create mode 100644 fe/PDA/uni_modules/vk-uview-ui/components/u-count-to/u-count-to.vue create mode 100644 fe/PDA/uni_modules/vk-uview-ui/components/u-divider/u-divider.vue create mode 100644 fe/PDA/uni_modules/vk-uview-ui/components/u-dropdown-item/u-dropdown-item.vue create mode 100644 fe/PDA/uni_modules/vk-uview-ui/components/u-dropdown/u-dropdown.vue create mode 100644 fe/PDA/uni_modules/vk-uview-ui/components/u-empty/u-empty.vue create mode 100644 fe/PDA/uni_modules/vk-uview-ui/components/u-field/u-field.vue create mode 100644 fe/PDA/uni_modules/vk-uview-ui/components/u-form-item/u-form-item.vue create mode 100644 fe/PDA/uni_modules/vk-uview-ui/components/u-form/u-form.vue create mode 100644 fe/PDA/uni_modules/vk-uview-ui/components/u-full-screen/u-full-screen.vue create mode 100644 fe/PDA/uni_modules/vk-uview-ui/components/u-gap/u-gap.vue create mode 100644 fe/PDA/uni_modules/vk-uview-ui/components/u-grid-item/u-grid-item.vue create mode 100644 fe/PDA/uni_modules/vk-uview-ui/components/u-grid/u-grid.vue create mode 100644 fe/PDA/uni_modules/vk-uview-ui/components/u-icon/u-icon.vue create mode 100644 fe/PDA/uni_modules/vk-uview-ui/components/u-image/u-image.vue create mode 100644 fe/PDA/uni_modules/vk-uview-ui/components/u-index-anchor/u-index-anchor.vue create mode 100644 fe/PDA/uni_modules/vk-uview-ui/components/u-index-list/u-index-list.vue create mode 100644 fe/PDA/uni_modules/vk-uview-ui/components/u-input/u-input.vue create mode 100644 fe/PDA/uni_modules/vk-uview-ui/components/u-keyboard/u-keyboard.vue create mode 100644 fe/PDA/uni_modules/vk-uview-ui/components/u-lazy-load/u-lazy-load.vue create mode 100644 fe/PDA/uni_modules/vk-uview-ui/components/u-line-progress/u-line-progress.vue create mode 100644 fe/PDA/uni_modules/vk-uview-ui/components/u-line/u-line.vue create mode 100644 fe/PDA/uni_modules/vk-uview-ui/components/u-link/u-link.vue create mode 100644 fe/PDA/uni_modules/vk-uview-ui/components/u-loading-page/u-loading-page.vue create mode 100644 fe/PDA/uni_modules/vk-uview-ui/components/u-loading/u-loading.vue create mode 100644 fe/PDA/uni_modules/vk-uview-ui/components/u-loadmore/u-loadmore.vue create mode 100644 fe/PDA/uni_modules/vk-uview-ui/components/u-mask/u-mask.vue create mode 100644 fe/PDA/uni_modules/vk-uview-ui/components/u-message-input/u-message-input.vue create mode 100644 fe/PDA/uni_modules/vk-uview-ui/components/u-modal/u-modal.vue create mode 100644 fe/PDA/uni_modules/vk-uview-ui/components/u-navbar/u-navbar.vue create mode 100644 fe/PDA/uni_modules/vk-uview-ui/components/u-no-network/u-no-network.vue create mode 100644 fe/PDA/uni_modules/vk-uview-ui/components/u-notice-bar/u-notice-bar.vue create mode 100644 fe/PDA/uni_modules/vk-uview-ui/components/u-number-box/u-number-box.vue create mode 100644 fe/PDA/uni_modules/vk-uview-ui/components/u-number-keyboard/u-number-keyboard.vue create mode 100644 fe/PDA/uni_modules/vk-uview-ui/components/u-parse/libs/CssHandler.js create mode 100644 fe/PDA/uni_modules/vk-uview-ui/components/u-parse/libs/MpHtmlParser.js create mode 100644 fe/PDA/uni_modules/vk-uview-ui/components/u-parse/libs/config.js create mode 100644 fe/PDA/uni_modules/vk-uview-ui/components/u-parse/libs/trees.vue create mode 100644 fe/PDA/uni_modules/vk-uview-ui/components/u-parse/u-parse.vue create mode 100644 fe/PDA/uni_modules/vk-uview-ui/components/u-picker/u-picker.vue create mode 100644 fe/PDA/uni_modules/vk-uview-ui/components/u-popup/u-popup.vue create mode 100644 fe/PDA/uni_modules/vk-uview-ui/components/u-radio-group/u-radio-group.vue create mode 100644 fe/PDA/uni_modules/vk-uview-ui/components/u-radio/u-radio.vue create mode 100644 fe/PDA/uni_modules/vk-uview-ui/components/u-rate/u-rate.vue create mode 100644 fe/PDA/uni_modules/vk-uview-ui/components/u-read-more/u-read-more.vue create mode 100644 fe/PDA/uni_modules/vk-uview-ui/components/u-row-notice/u-row-notice.vue create mode 100644 fe/PDA/uni_modules/vk-uview-ui/components/u-row/u-row.vue create mode 100644 fe/PDA/uni_modules/vk-uview-ui/components/u-search/u-search.vue create mode 100644 fe/PDA/uni_modules/vk-uview-ui/components/u-section/u-section.vue create mode 100644 fe/PDA/uni_modules/vk-uview-ui/components/u-select/u-select.vue create mode 100644 fe/PDA/uni_modules/vk-uview-ui/components/u-skeleton/u-skeleton.vue create mode 100644 fe/PDA/uni_modules/vk-uview-ui/components/u-slider/u-slider.vue create mode 100644 fe/PDA/uni_modules/vk-uview-ui/components/u-steps/u-steps.vue create mode 100644 fe/PDA/uni_modules/vk-uview-ui/components/u-sticky/u-sticky.vue create mode 100644 fe/PDA/uni_modules/vk-uview-ui/components/u-subsection/u-subsection.vue create mode 100644 fe/PDA/uni_modules/vk-uview-ui/components/u-swipe-action/u-swipe-action.vue create mode 100644 fe/PDA/uni_modules/vk-uview-ui/components/u-swiper/u-swiper.vue create mode 100644 fe/PDA/uni_modules/vk-uview-ui/components/u-switch/u-switch.vue create mode 100644 fe/PDA/uni_modules/vk-uview-ui/components/u-tabbar/u-tabbar.vue create mode 100644 fe/PDA/uni_modules/vk-uview-ui/components/u-table/u-table.vue create mode 100644 fe/PDA/uni_modules/vk-uview-ui/components/u-tabs-swiper/u-tabs-swiper.vue create mode 100644 fe/PDA/uni_modules/vk-uview-ui/components/u-tabs/u-tabs.vue create mode 100644 fe/PDA/uni_modules/vk-uview-ui/components/u-tag/u-tag.vue create mode 100644 fe/PDA/uni_modules/vk-uview-ui/components/u-td/u-td.vue create mode 100644 fe/PDA/uni_modules/vk-uview-ui/components/u-th/u-th.vue create mode 100644 fe/PDA/uni_modules/vk-uview-ui/components/u-time-line-item/u-time-line-item.vue create mode 100644 fe/PDA/uni_modules/vk-uview-ui/components/u-time-line/u-time-line.vue create mode 100644 fe/PDA/uni_modules/vk-uview-ui/components/u-toast/u-toast.vue create mode 100644 fe/PDA/uni_modules/vk-uview-ui/components/u-top-tips/u-top-tips.vue create mode 100644 fe/PDA/uni_modules/vk-uview-ui/components/u-tr/u-tr.vue create mode 100644 fe/PDA/uni_modules/vk-uview-ui/components/u-upload/u-upload.vue create mode 100644 fe/PDA/uni_modules/vk-uview-ui/components/u-verification-code/u-verification-code.vue create mode 100644 fe/PDA/uni_modules/vk-uview-ui/components/u-waterfall/u-waterfall.vue create mode 100644 fe/PDA/uni_modules/vk-uview-ui/components/vk-uview-ui/vk-uview-ui.vue create mode 100644 fe/PDA/uni_modules/vk-uview-ui/iconfont.css create mode 100644 fe/PDA/uni_modules/vk-uview-ui/index.js create mode 100644 fe/PDA/uni_modules/vk-uview-ui/index.scss create mode 100644 fe/PDA/uni_modules/vk-uview-ui/libs/address/areas.json create mode 100644 fe/PDA/uni_modules/vk-uview-ui/libs/address/citys.json create mode 100644 fe/PDA/uni_modules/vk-uview-ui/libs/address/provinces.json create mode 100644 fe/PDA/uni_modules/vk-uview-ui/libs/config/config.js create mode 100644 fe/PDA/uni_modules/vk-uview-ui/libs/config/zIndex.js create mode 100644 fe/PDA/uni_modules/vk-uview-ui/libs/css/color.scss create mode 100644 fe/PDA/uni_modules/vk-uview-ui/libs/css/common.scss create mode 100644 fe/PDA/uni_modules/vk-uview-ui/libs/css/style.components.scss create mode 100644 fe/PDA/uni_modules/vk-uview-ui/libs/css/style.h5.scss create mode 100644 fe/PDA/uni_modules/vk-uview-ui/libs/css/style.mp.scss create mode 100644 fe/PDA/uni_modules/vk-uview-ui/libs/css/style.nvue.scss create mode 100644 fe/PDA/uni_modules/vk-uview-ui/libs/css/style.vue.scss create mode 100644 fe/PDA/uni_modules/vk-uview-ui/libs/function/$parent.js create mode 100644 fe/PDA/uni_modules/vk-uview-ui/libs/function/addUnit.js create mode 100644 fe/PDA/uni_modules/vk-uview-ui/libs/function/bem.js create mode 100644 fe/PDA/uni_modules/vk-uview-ui/libs/function/color.js create mode 100644 fe/PDA/uni_modules/vk-uview-ui/libs/function/colorGradient.js create mode 100644 fe/PDA/uni_modules/vk-uview-ui/libs/function/debounce.js create mode 100644 fe/PDA/uni_modules/vk-uview-ui/libs/function/deepClone.js create mode 100644 fe/PDA/uni_modules/vk-uview-ui/libs/function/deepMerge.js create mode 100644 fe/PDA/uni_modules/vk-uview-ui/libs/function/getParent.js create mode 100644 fe/PDA/uni_modules/vk-uview-ui/libs/function/guid.js create mode 100644 fe/PDA/uni_modules/vk-uview-ui/libs/function/md5.js create mode 100644 fe/PDA/uni_modules/vk-uview-ui/libs/function/queryParams.js create mode 100644 fe/PDA/uni_modules/vk-uview-ui/libs/function/random.js create mode 100644 fe/PDA/uni_modules/vk-uview-ui/libs/function/randomArray.js create mode 100644 fe/PDA/uni_modules/vk-uview-ui/libs/function/route.js create mode 100644 fe/PDA/uni_modules/vk-uview-ui/libs/function/sys.js create mode 100644 fe/PDA/uni_modules/vk-uview-ui/libs/function/test.js create mode 100644 fe/PDA/uni_modules/vk-uview-ui/libs/function/throttle.js create mode 100644 fe/PDA/uni_modules/vk-uview-ui/libs/function/timeFormat.js create mode 100644 fe/PDA/uni_modules/vk-uview-ui/libs/function/timeFrom.js create mode 100644 fe/PDA/uni_modules/vk-uview-ui/libs/function/toast.js create mode 100644 fe/PDA/uni_modules/vk-uview-ui/libs/function/trim.js create mode 100644 fe/PDA/uni_modules/vk-uview-ui/libs/function/type2icon.js create mode 100644 fe/PDA/uni_modules/vk-uview-ui/libs/mixin/mixin.js create mode 100644 fe/PDA/uni_modules/vk-uview-ui/libs/mixin/mpShare.js create mode 100644 fe/PDA/uni_modules/vk-uview-ui/libs/request/index.js create mode 100644 fe/PDA/uni_modules/vk-uview-ui/libs/store/index.js create mode 100644 fe/PDA/uni_modules/vk-uview-ui/libs/util/async-validator.js create mode 100644 fe/PDA/uni_modules/vk-uview-ui/libs/util/emitter.js create mode 100644 fe/PDA/uni_modules/vk-uview-ui/package.json create mode 100644 fe/PDA/uni_modules/vk-uview-ui/readme.md create mode 100644 fe/PDA/uni_modules/vk-uview-ui/theme.scss diff --git a/fe/PDA/App.vue b/fe/PDA/App.vue index 4b5a39766..87fb0f95f 100644 --- a/fe/PDA/App.vue +++ b/fe/PDA/App.vue @@ -18,6 +18,7 @@ diff --git a/fe/PDA/uni_modules/vk-uview-ui/components/u-alert-tips/u-alert-tips.vue b/fe/PDA/uni_modules/vk-uview-ui/components/u-alert-tips/u-alert-tips.vue new file mode 100644 index 000000000..48b3d85f3 --- /dev/null +++ b/fe/PDA/uni_modules/vk-uview-ui/components/u-alert-tips/u-alert-tips.vue @@ -0,0 +1,257 @@ + + + + + diff --git a/fe/PDA/uni_modules/vk-uview-ui/components/u-avatar-cropper/u-avatar-cropper.vue b/fe/PDA/uni_modules/vk-uview-ui/components/u-avatar-cropper/u-avatar-cropper.vue new file mode 100644 index 000000000..a48dd5464 --- /dev/null +++ b/fe/PDA/uni_modules/vk-uview-ui/components/u-avatar-cropper/u-avatar-cropper.vue @@ -0,0 +1,290 @@ + + + + + diff --git a/fe/PDA/uni_modules/vk-uview-ui/components/u-avatar-cropper/weCropper.js b/fe/PDA/uni_modules/vk-uview-ui/components/u-avatar-cropper/weCropper.js new file mode 100644 index 000000000..6dac90087 --- /dev/null +++ b/fe/PDA/uni_modules/vk-uview-ui/components/u-avatar-cropper/weCropper.js @@ -0,0 +1,1256 @@ +/** + * we-cropper v1.3.9 + * (c) 2020 dlhandsome + * @license MIT + */ +'use strict'; + +var device = void 0; +var TOUCH_STATE = ['touchstarted', 'touchmoved', 'touchended']; + +function firstLetterUpper(str) { + return str.charAt(0).toUpperCase() + str.slice(1) +} + +function setTouchState(instance) { + var arg = [], + len = arguments.length - 1; + while (len-- > 0) arg[len] = arguments[len + 1]; + + TOUCH_STATE.forEach(function(key, i) { + if (arg[i] !== undefined) { + instance[key] = arg[i]; + } + }); +} + +function validator(instance, o) { + Object.defineProperties(instance, o); +} + +function getDevice() { + if (!device) { + device = uni.getSystemInfoSync(); + } + return device +} + +var tmp = {}; + +var ref = getDevice(); +var pixelRatio = ref.pixelRatio; + +var DEFAULT = { + id: { + default: 'cropper', + get: function get() { + return tmp.id + }, + set: function set(value) { + if (typeof(value) !== 'string') { + console.error(("id:" + value + " is invalid")); + } + tmp.id = value; + } + }, + width: { + default: 750, + get: function get() { + return tmp.width + }, + set: function set(value) { + if (typeof(value) !== 'number') { + console.error(("width:" + value + " is invalid")); + } + tmp.width = value; + } + }, + height: { + default: 750, + get: function get() { + return tmp.height + }, + set: function set(value) { + if (typeof(value) !== 'number') { + console.error(("height:" + value + " is invalid")); + } + tmp.height = value; + } + }, + pixelRatio: { + default: pixelRatio, + get: function get() { + return tmp.pixelRatio + }, + set: function set(value) { + if (typeof(value) !== 'number') { + console.error(("pixelRatio:" + value + " is invalid")); + } + tmp.pixelRatio = value; + } + }, + scale: { + default: 2.5, + get: function get() { + return tmp.scale + }, + set: function set(value) { + if (typeof(value) !== 'number') { + console.error(("scale:" + value + " is invalid")); + } + tmp.scale = value; + } + }, + zoom: { + default: 5, + get: function get() { + return tmp.zoom + }, + set: function set(value) { + if (typeof(value) !== 'number') { + console.error(("zoom:" + value + " is invalid")); + } else if (value < 0 || value > 10) { + console.error("zoom should be ranged in 0 ~ 10"); + } + tmp.zoom = value; + } + }, + src: { + default: '', + get: function get() { + return tmp.src + }, + set: function set(value) { + if (typeof(value) !== 'string') { + console.error(("src:" + value + " is invalid")); + } + tmp.src = value; + } + }, + cut: { + default: {}, + get: function get() { + return tmp.cut + }, + set: function set(value) { + if (typeof(value) !== 'object') { + console.error(("cut:" + value + " is invalid")); + } + tmp.cut = value; + } + }, + boundStyle: { + default: {}, + get: function get() { + return tmp.boundStyle + }, + set: function set(value) { + if (typeof(value) !== 'object') { + console.error(("boundStyle:" + value + " is invalid")); + } + tmp.boundStyle = value; + } + }, + onReady: { + default: null, + get: function get() { + return tmp.ready + }, + set: function set(value) { + tmp.ready = value; + } + }, + onBeforeImageLoad: { + default: null, + get: function get() { + return tmp.beforeImageLoad + }, + set: function set(value) { + tmp.beforeImageLoad = value; + } + }, + onImageLoad: { + default: null, + get: function get() { + return tmp.imageLoad + }, + set: function set(value) { + tmp.imageLoad = value; + } + }, + onBeforeDraw: { + default: null, + get: function get() { + return tmp.beforeDraw + }, + set: function set(value) { + tmp.beforeDraw = value; + } + } +}; + +var ref$1 = getDevice(); +var windowWidth = ref$1.windowWidth; + +function prepare() { + var self = this; + + // v1.4.0 版本中将不再自动绑定we-cropper实例 + self.attachPage = function() { + var pages = getCurrentPages(); + // 获取到当前page上下文 + var pageContext = pages[pages.length - 1]; + // 把this依附在Page上下文的wecropper属性上,便于在page钩子函数中访问 + Object.defineProperty(pageContext, 'wecropper', { + get: function get() { + console.warn( + 'Instance will not be automatically bound to the page after v1.4.0\n\n' + + 'Please use a custom instance name instead\n\n' + + 'Example: \n' + + 'this.mycropper = new WeCropper(options)\n\n' + + '// ...\n' + + 'this.mycropper.getCropperImage()' + ); + return self + }, + configurable: true + }); + }; + + self.createCtx = function() { + var id = self.id; + var targetId = self.targetId; + + if (id) { + self.ctx = self.ctx || uni.createCanvasContext(id); + self.targetCtx = self.targetCtx || uni.createCanvasContext(targetId); + } else { + console.error("constructor: create canvas context failed, 'id' must be valuable"); + } + }; + + self.deviceRadio = windowWidth / 750; +} + +var commonjsGlobal = typeof window !== 'undefined' ? window : typeof global !== 'undefined' ? global : typeof self !== + 'undefined' ? self : {}; + + + + + +function createCommonjsModule(fn, module) { + return module = { + exports: {} + }, fn(module, module.exports), module.exports; +} + +var tools = createCommonjsModule(function(module, exports) { + /** + * String type check + */ + exports.isStr = function(v) { + return typeof v === 'string'; + }; + /** + * Number type check + */ + exports.isNum = function(v) { + return typeof v === 'number'; + }; + /** + * Array type check + */ + exports.isArr = Array.isArray; + /** + * undefined type check + */ + exports.isUndef = function(v) { + return v === undefined; + }; + + exports.isTrue = function(v) { + return v === true; + }; + + exports.isFalse = function(v) { + return v === false; + }; + /** + * Function type check + */ + exports.isFunc = function(v) { + return typeof v === 'function'; + }; + /** + * Quick object check - this is primarily used to tell + * Objects from primitive values when we know the value + * is a JSON-compliant type. + */ + exports.isObj = exports.isObject = function(obj) { + return obj !== null && typeof obj === 'object' + }; + + /** + * Strict object type check. Only returns true + * for plain JavaScript objects. + */ + var _toString = Object.prototype.toString; + exports.isPlainObject = function(obj) { + return _toString.call(obj) === '[object Object]' + }; + + /** + * Check whether the object has the property. + */ + var hasOwnProperty = Object.prototype.hasOwnProperty; + exports.hasOwn = function(obj, key) { + return hasOwnProperty.call(obj, key) + }; + + /** + * Perform no operation. + * Stubbing args to make Flow happy without leaving useless transpiled code + * with ...rest (https://flow.org/blog/2017/05/07/Strict-Function-Call-Arity/) + */ + exports.noop = function(a, b, c) {}; + + /** + * Check if val is a valid array index. + */ + exports.isValidArrayIndex = function(val) { + var n = parseFloat(String(val)); + return n >= 0 && Math.floor(n) === n && isFinite(val) + }; +}); + +var tools_7 = tools.isFunc; +var tools_10 = tools.isPlainObject; + +var EVENT_TYPE = ['ready', 'beforeImageLoad', 'beforeDraw', 'imageLoad']; + +function observer() { + var self = this; + + self.on = function(event, fn) { + if (EVENT_TYPE.indexOf(event) > -1) { + if (tools_7(fn)) { + event === 'ready' ? + fn(self) : + self[("on" + (firstLetterUpper(event)))] = fn; + } + } else { + console.error(("event: " + event + " is invalid")); + } + return self + }; +} + +function wxPromise(fn) { + return function(obj) { + var args = [], + len = arguments.length - 1; + while (len-- > 0) args[len] = arguments[len + 1]; + + if (obj === void 0) obj = {}; + return new Promise(function(resolve, reject) { + obj.success = function(res) { + resolve(res); + }; + obj.fail = function(err) { + reject(err); + }; + fn.apply(void 0, [obj].concat(args)); + }) + } +} + +function draw(ctx, reserve) { + if (reserve === void 0) reserve = false; + + return new Promise(function(resolve) { + ctx.draw(reserve, resolve); + }) +} + +var getImageInfo = wxPromise(uni.getImageInfo); + +var canvasToTempFilePath = wxPromise(uni.canvasToTempFilePath); + +var base64 = createCommonjsModule(function(module, exports) { + /*! http://mths.be/base64 v0.1.0 by @mathias | MIT license */ + (function(root) { + + // Detect free variables `exports`. + var freeExports = 'object' == 'object' && exports; + + // Detect free variable `module`. + var freeModule = 'object' == 'object' && module && + module.exports == freeExports && module; + + // Detect free variable `global`, from Node.js or Browserified code, and use + // it as `root`. + var freeGlobal = typeof commonjsGlobal == 'object' && commonjsGlobal; + if (freeGlobal.global === freeGlobal || freeGlobal.window === freeGlobal) { + root = freeGlobal; + } + + /*--------------------------------------------------------------------------*/ + + var InvalidCharacterError = function(message) { + this.message = message; + }; + InvalidCharacterError.prototype = new Error; + InvalidCharacterError.prototype.name = 'InvalidCharacterError'; + + var error = function(message) { + // Note: the error messages used throughout this file match those used by + // the native `atob`/`btoa` implementation in Chromium. + throw new InvalidCharacterError(message); + }; + + var TABLE = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'; + // http://whatwg.org/html/common-microsyntaxes.html#space-character + var REGEX_SPACE_CHARACTERS = /[\t\n\f\r ]/g; + + // `decode` is designed to be fully compatible with `atob` as described in the + // HTML Standard. http://whatwg.org/html/webappapis.html#dom-windowbase64-atob + // The optimized base64-decoding algorithm used is based on @atk’s excellent + // implementation. https://gist.github.com/atk/1020396 + var decode = function(input) { + input = String(input) + .replace(REGEX_SPACE_CHARACTERS, ''); + var length = input.length; + if (length % 4 == 0) { + input = input.replace(/==?$/, ''); + length = input.length; + } + if ( + length % 4 == 1 || + // http://whatwg.org/C#alphanumeric-ascii-characters + /[^+a-zA-Z0-9/]/.test(input) + ) { + error( + 'Invalid character: the string to be decoded is not correctly encoded.' + ); + } + var bitCounter = 0; + var bitStorage; + var buffer; + var output = ''; + var position = -1; + while (++position < length) { + buffer = TABLE.indexOf(input.charAt(position)); + bitStorage = bitCounter % 4 ? bitStorage * 64 + buffer : buffer; + // Unless this is the first of a group of 4 characters… + if (bitCounter++ % 4) { + // …convert the first 8 bits to a single ASCII character. + output += String.fromCharCode( + 0xFF & bitStorage >> (-2 * bitCounter & 6) + ); + } + } + return output; + }; + + // `encode` is designed to be fully compatible with `btoa` as described in the + // HTML Standard: http://whatwg.org/html/webappapis.html#dom-windowbase64-btoa + var encode = function(input) { + input = String(input); + if (/[^\0-\xFF]/.test(input)) { + // Note: no need to special-case astral symbols here, as surrogates are + // matched, and the input is supposed to only contain ASCII anyway. + error( + 'The string to be encoded contains characters outside of the ' + + 'Latin1 range.' + ); + } + var padding = input.length % 3; + var output = ''; + var position = -1; + var a; + var b; + var c; + var buffer; + // Make sure any padding is handled outside of the loop. + var length = input.length - padding; + + while (++position < length) { + // Read three bytes, i.e. 24 bits. + a = input.charCodeAt(position) << 16; + b = input.charCodeAt(++position) << 8; + c = input.charCodeAt(++position); + buffer = a + b + c; + // Turn the 24 bits into four chunks of 6 bits each, and append the + // matching character for each of them to the output. + output += ( + TABLE.charAt(buffer >> 18 & 0x3F) + + TABLE.charAt(buffer >> 12 & 0x3F) + + TABLE.charAt(buffer >> 6 & 0x3F) + + TABLE.charAt(buffer & 0x3F) + ); + } + + if (padding == 2) { + a = input.charCodeAt(position) << 8; + b = input.charCodeAt(++position); + buffer = a + b; + output += ( + TABLE.charAt(buffer >> 10) + + TABLE.charAt((buffer >> 4) & 0x3F) + + TABLE.charAt((buffer << 2) & 0x3F) + + '=' + ); + } else if (padding == 1) { + buffer = input.charCodeAt(position); + output += ( + TABLE.charAt(buffer >> 2) + + TABLE.charAt((buffer << 4) & 0x3F) + + '==' + ); + } + + return output; + }; + + var base64 = { + 'encode': encode, + 'decode': decode, + 'version': '0.1.0' + }; + + // Some AMD build optimizers, like r.js, check for specific condition patterns + // like the following: + if ( + typeof undefined == 'function' && + typeof undefined.amd == 'object' && + undefined.amd + ) { + undefined(function() { + return base64; + }); + } else if (freeExports && !freeExports.nodeType) { + if (freeModule) { // in Node.js or RingoJS v0.8.0+ + freeModule.exports = base64; + } else { // in Narwhal or RingoJS v0.7.0- + for (var key in base64) { + base64.hasOwnProperty(key) && (freeExports[key] = base64[key]); + } + } + } else { // in Rhino or a web browser + root.base64 = base64; + } + + }(commonjsGlobal)); +}); + +function makeURI(strData, type) { + return 'data:' + type + ';base64,' + strData +} + +function fixType(type) { + type = type.toLowerCase().replace(/jpg/i, 'jpeg'); + var r = type.match(/png|jpeg|bmp|gif/)[0]; + return 'image/' + r +} + +function encodeData(data) { + var str = ''; + if (typeof data === 'string') { + str = data; + } else { + for (var i = 0; i < data.length; i++) { + str += String.fromCharCode(data[i]); + } + } + return base64.encode(str) +} + +/** + * 获取图像区域隐含的像素数据 + * @param canvasId canvas标识 + * @param x 将要被提取的图像数据矩形区域的左上角 x 坐标 + * @param y 将要被提取的图像数据矩形区域的左上角 y 坐标 + * @param width 将要被提取的图像数据矩形区域的宽度 + * @param height 将要被提取的图像数据矩形区域的高度 + * @param done 完成回调 + */ +function getImageData(canvasId, x, y, width, height, done) { + uni.canvasGetImageData({ + canvasId: canvasId, + x: x, + y: y, + width: width, + height: height, + success: function success(res) { + done(res, null); + }, + fail: function fail(res) { + done(null, res); + } + }); +} + +/** + * 生成bmp格式图片 + * 按照规则生成图片响应头和响应体 + * @param oData 用来描述 canvas 区域隐含的像素数据 { data, width, height } = oData + * @returns {*} base64字符串 + */ +function genBitmapImage(oData) { + // + // BITMAPFILEHEADER: http://msdn.microsoft.com/en-us/library/windows/desktop/dd183374(v=vs.85).aspx + // BITMAPINFOHEADER: http://msdn.microsoft.com/en-us/library/dd183376.aspx + // + var biWidth = oData.width; + var biHeight = oData.height; + var biSizeImage = biWidth * biHeight * 3; + var bfSize = biSizeImage + 54; // total header size = 54 bytes + + // + // typedef struct tagBITMAPFILEHEADER { + // WORD bfType; + // DWORD bfSize; + // WORD bfReserved1; + // WORD bfReserved2; + // DWORD bfOffBits; + // } BITMAPFILEHEADER; + // + var BITMAPFILEHEADER = [ + // WORD bfType -- The file type signature; must be "BM" + 0x42, 0x4D, + // DWORD bfSize -- The size, in bytes, of the bitmap file + bfSize & 0xff, bfSize >> 8 & 0xff, bfSize >> 16 & 0xff, bfSize >> 24 & 0xff, + // WORD bfReserved1 -- Reserved; must be zero + 0, 0, + // WORD bfReserved2 -- Reserved; must be zero + 0, 0, + // DWORD bfOffBits -- The offset, in bytes, from the beginning of the BITMAPFILEHEADER structure to the bitmap bits. + 54, 0, 0, 0 + ]; + + // + // typedef struct tagBITMAPINFOHEADER { + // DWORD biSize; + // LONG biWidth; + // LONG biHeight; + // WORD biPlanes; + // WORD biBitCount; + // DWORD biCompression; + // DWORD biSizeImage; + // LONG biXPelsPerMeter; + // LONG biYPelsPerMeter; + // DWORD biClrUsed; + // DWORD biClrImportant; + // } BITMAPINFOHEADER, *PBITMAPINFOHEADER; + // + var BITMAPINFOHEADER = [ + // DWORD biSize -- The number of bytes required by the structure + 40, 0, 0, 0, + // LONG biWidth -- The width of the bitmap, in pixels + biWidth & 0xff, biWidth >> 8 & 0xff, biWidth >> 16 & 0xff, biWidth >> 24 & 0xff, + // LONG biHeight -- The height of the bitmap, in pixels + biHeight & 0xff, biHeight >> 8 & 0xff, biHeight >> 16 & 0xff, biHeight >> 24 & 0xff, + // WORD biPlanes -- The number of planes for the target device. This value must be set to 1 + 1, 0, + // WORD biBitCount -- The number of bits-per-pixel, 24 bits-per-pixel -- the bitmap + // has a maximum of 2^24 colors (16777216, Truecolor) + 24, 0, + // DWORD biCompression -- The type of compression, BI_RGB (code 0) -- uncompressed + 0, 0, 0, 0, + // DWORD biSizeImage -- The size, in bytes, of the image. This may be set to zero for BI_RGB bitmaps + biSizeImage & 0xff, biSizeImage >> 8 & 0xff, biSizeImage >> 16 & 0xff, biSizeImage >> 24 & 0xff, + // LONG biXPelsPerMeter, unused + 0, 0, 0, 0, + // LONG biYPelsPerMeter, unused + 0, 0, 0, 0, + // DWORD biClrUsed, the number of color indexes of palette, unused + 0, 0, 0, 0, + // DWORD biClrImportant, unused + 0, 0, 0, 0 + ]; + + var iPadding = (4 - ((biWidth * 3) % 4)) % 4; + + var aImgData = oData.data; + + var strPixelData = ''; + var biWidth4 = biWidth << 2; + var y = biHeight; + var fromCharCode = String.fromCharCode; + + do { + var iOffsetY = biWidth4 * (y - 1); + var strPixelRow = ''; + for (var x = 0; x < biWidth; x++) { + var iOffsetX = x << 2; + strPixelRow += fromCharCode(aImgData[iOffsetY + iOffsetX + 2]) + + fromCharCode(aImgData[iOffsetY + iOffsetX + 1]) + + fromCharCode(aImgData[iOffsetY + iOffsetX]); + } + + for (var c = 0; c < iPadding; c++) { + strPixelRow += String.fromCharCode(0); + } + + strPixelData += strPixelRow; + } while (--y) + + var strEncoded = encodeData(BITMAPFILEHEADER.concat(BITMAPINFOHEADER)) + encodeData(strPixelData); + + return strEncoded +} + +/** + * 转换为图片base64 + * @param canvasId canvas标识 + * @param x 将要被提取的图像数据矩形区域的左上角 x 坐标 + * @param y 将要被提取的图像数据矩形区域的左上角 y 坐标 + * @param width 将要被提取的图像数据矩形区域的宽度 + * @param height 将要被提取的图像数据矩形区域的高度 + * @param type 转换图片类型 + * @param done 完成回调 + */ +function convertToImage(canvasId, x, y, width, height, type, done) { + if (done === void 0) done = function() {}; + + if (type === undefined) { + type = 'png'; + } + type = fixType(type); + if (/bmp/.test(type)) { + getImageData(canvasId, x, y, width, height, function(data, err) { + var strData = genBitmapImage(data); + tools_7(done) && done(makeURI(strData, 'image/' + type), err); + }); + } else { + console.error('暂不支持生成\'' + type + '\'类型的base64图片'); + } +} + +var CanvasToBase64 = { + convertToImage: convertToImage, + // convertToPNG: function (width, height, done) { + // return convertToImage(width, height, 'png', done) + // }, + // convertToJPEG: function (width, height, done) { + // return convertToImage(width, height, 'jpeg', done) + // }, + // convertToGIF: function (width, height, done) { + // return convertToImage(width, height, 'gif', done) + // }, + convertToBMP: function(ref, done) { + if (ref === void 0) ref = {}; + var canvasId = ref.canvasId; + var x = ref.x; + var y = ref.y; + var width = ref.width; + var height = ref.height; + if (done === void 0) done = function() {}; + + return convertToImage(canvasId, x, y, width, height, 'bmp', done) + } +}; + +function methods() { + var self = this; + + var boundWidth = self.width; // 裁剪框默认宽度,即整个画布宽度 + var boundHeight = self.height; // 裁剪框默认高度,即整个画布高度 + + var id = self.id; + var targetId = self.targetId; + var pixelRatio = self.pixelRatio; + + var ref = self.cut; + var x = ref.x; + if (x === void 0) x = 0; + var y = ref.y; + if (y === void 0) y = 0; + var width = ref.width; + if (width === void 0) width = boundWidth; + var height = ref.height; + if (height === void 0) height = boundHeight; + + self.updateCanvas = function(done) { + if (self.croperTarget) { + // 画布绘制图片 + self.ctx.drawImage( + self.croperTarget, + self.imgLeft, + self.imgTop, + self.scaleWidth, + self.scaleHeight + ); + } + tools_7(self.onBeforeDraw) && self.onBeforeDraw(self.ctx, self); + + self.setBoundStyle(self.boundStyle); // 设置边界样式 + + self.ctx.draw(false, done); + return self + }; + + self.pushOrigin = self.pushOrign = function(src) { + self.src = src; + + tools_7(self.onBeforeImageLoad) && self.onBeforeImageLoad(self.ctx, self); + + return getImageInfo({ + src: src + }) + .then(function(res) { + var innerAspectRadio = res.width / res.height; + var customAspectRadio = width / height; + + self.croperTarget = res.path; + + if (innerAspectRadio < customAspectRadio) { + self.rectX = x; + self.baseWidth = width; + self.baseHeight = width / innerAspectRadio; + self.rectY = y - Math.abs((height - self.baseHeight) / 2); + } else { + self.rectY = y; + self.baseWidth = height * innerAspectRadio; + self.baseHeight = height; + self.rectX = x - Math.abs((width - self.baseWidth) / 2); + } + + self.imgLeft = self.rectX; + self.imgTop = self.rectY; + self.scaleWidth = self.baseWidth; + self.scaleHeight = self.baseHeight; + + self.update(); + + return new Promise(function(resolve) { + self.updateCanvas(resolve); + }) + }) + .then(function() { + tools_7(self.onImageLoad) && self.onImageLoad(self.ctx, self); + }) + }; + + self.removeImage = function() { + self.src = ''; + self.croperTarget = ''; + return draw(self.ctx) + }; + + self.getCropperBase64 = function(done) { + if (done === void 0) done = function() {}; + + CanvasToBase64.convertToBMP({ + canvasId: id, + x: x, + y: y, + width: width, + height: height + }, done); + }; + + self.getCropperImage = function(opt, fn) { + var customOptions = opt; + + var canvasOptions = { + canvasId: id, + x: x, + y: y, + width: width, + height: height + }; + + var task = function() { + return Promise.resolve(); + }; + + if ( + tools_10(customOptions) && + customOptions.original + ) { + // original mode + task = function() { + self.targetCtx.drawImage( + self.croperTarget, + self.imgLeft * pixelRatio, + self.imgTop * pixelRatio, + self.scaleWidth * pixelRatio, + self.scaleHeight * pixelRatio + ); + + canvasOptions = { + canvasId: targetId, + x: x * pixelRatio, + y: y * pixelRatio, + width: width * pixelRatio, + height: height * pixelRatio + }; + + return draw(self.targetCtx) + }; + } + + return task() + .then(function() { + if (tools_10(customOptions)) { + canvasOptions = Object.assign({}, canvasOptions, customOptions); + } + + if (tools_7(customOptions)) { + fn = customOptions; + } + + var arg = canvasOptions.componentContext ? [canvasOptions, canvasOptions.componentContext] : [canvasOptions]; + + return canvasToTempFilePath.apply(null, arg) + }) + .then(function(res) { + var tempFilePath = res.tempFilePath; + + return tools_7(fn) ? + fn.call(self, tempFilePath, null) : + tempFilePath + }) + .catch(function(err) { + if (tools_7(fn)) { + fn.call(self, null, err); + } else { + throw err + } + }) + }; +} + +/** + * 获取最新缩放值 + * @param oldScale 上一次触摸结束后的缩放值 + * @param oldDistance 上一次触摸结束后的双指距离 + * @param zoom 缩放系数 + * @param touch0 第一指touch对象 + * @param touch1 第二指touch对象 + * @returns {*} + */ +var getNewScale = function(oldScale, oldDistance, zoom, touch0, touch1) { + var xMove, yMove, newDistance; + // 计算二指最新距离 + xMove = Math.round(touch1.x - touch0.x); + yMove = Math.round(touch1.y - touch0.y); + newDistance = Math.round(Math.sqrt(xMove * xMove + yMove * yMove)); + + return oldScale + 0.001 * zoom * (newDistance - oldDistance) +}; + +function update() { + var self = this; + + if (!self.src) { + return + } + + self.__oneTouchStart = function(touch) { + self.touchX0 = Math.round(touch.x); + self.touchY0 = Math.round(touch.y); + }; + + self.__oneTouchMove = function(touch) { + var xMove, yMove; + // 计算单指移动的距离 + if (self.touchended) { + return self.updateCanvas() + } + xMove = Math.round(touch.x - self.touchX0); + yMove = Math.round(touch.y - self.touchY0); + + var imgLeft = Math.round(self.rectX + xMove); + var imgTop = Math.round(self.rectY + yMove); + + self.outsideBound(imgLeft, imgTop); + + self.updateCanvas(); + }; + + self.__twoTouchStart = function(touch0, touch1) { + var xMove, yMove, oldDistance; + + self.touchX1 = Math.round(self.rectX + self.scaleWidth / 2); + self.touchY1 = Math.round(self.rectY + self.scaleHeight / 2); + + // 计算两指距离 + xMove = Math.round(touch1.x - touch0.x); + yMove = Math.round(touch1.y - touch0.y); + oldDistance = Math.round(Math.sqrt(xMove * xMove + yMove * yMove)); + + self.oldDistance = oldDistance; + }; + + self.__twoTouchMove = function(touch0, touch1) { + var oldScale = self.oldScale; + var oldDistance = self.oldDistance; + var scale = self.scale; + var zoom = self.zoom; + + self.newScale = getNewScale(oldScale, oldDistance, zoom, touch0, touch1); + + // 设定缩放范围 + self.newScale <= 1 && (self.newScale = 1); + self.newScale >= scale && (self.newScale = scale); + + self.scaleWidth = Math.round(self.newScale * self.baseWidth); + self.scaleHeight = Math.round(self.newScale * self.baseHeight); + var imgLeft = Math.round(self.touchX1 - self.scaleWidth / 2); + var imgTop = Math.round(self.touchY1 - self.scaleHeight / 2); + + self.outsideBound(imgLeft, imgTop); + + self.updateCanvas(); + }; + + self.__xtouchEnd = function() { + self.oldScale = self.newScale; + self.rectX = self.imgLeft; + self.rectY = self.imgTop; + }; +} + +var handle = { + // 图片手势初始监测 + touchStart: function touchStart(e) { + var self = this; + var ref = e.touches; + var touch0 = ref[0]; + var touch1 = ref[1]; + + if (!self.src) { + return + } + + setTouchState(self, true, null, null); + + // 计算第一个触摸点的位置,并参照改点进行缩放 + self.__oneTouchStart(touch0); + + // 两指手势触发 + if (e.touches.length >= 2) { + self.__twoTouchStart(touch0, touch1); + } + }, + + // 图片手势动态缩放 + touchMove: function touchMove(e) { + var self = this; + var ref = e.touches; + var touch0 = ref[0]; + var touch1 = ref[1]; + + if (!self.src) { + return + } + + setTouchState(self, null, true); + + // 单指手势时触发 + if (e.touches.length === 1) { + self.__oneTouchMove(touch0); + } + // 两指手势触发 + if (e.touches.length >= 2) { + self.__twoTouchMove(touch0, touch1); + } + }, + + touchEnd: function touchEnd(e) { + var self = this; + + if (!self.src) { + return + } + + setTouchState(self, false, false, true); + self.__xtouchEnd(); + } +}; + +function cut() { + var self = this; + var boundWidth = self.width; // 裁剪框默认宽度,即整个画布宽度 + var boundHeight = self.height; + // 裁剪框默认高度,即整个画布高度 + var ref = self.cut; + var x = ref.x; + if (x === void 0) x = 0; + var y = ref.y; + if (y === void 0) y = 0; + var width = ref.width; + if (width === void 0) width = boundWidth; + var height = ref.height; + if (height === void 0) height = boundHeight; + + /** + * 设置边界 + * @param imgLeft 图片左上角横坐标值 + * @param imgTop 图片左上角纵坐标值 + */ + self.outsideBound = function(imgLeft, imgTop) { + self.imgLeft = imgLeft >= x ? + x : + self.scaleWidth + imgLeft - x <= width ? + x + width - self.scaleWidth : + imgLeft; + + self.imgTop = imgTop >= y ? + y : + self.scaleHeight + imgTop - y <= height ? + y + height - self.scaleHeight : + imgTop; + }; + + /** + * 设置边界样式 + * @param color 边界颜色 + */ + self.setBoundStyle = function(ref) { + if (ref === void 0) ref = {}; + var color = ref.color; + if (color === void 0) color = '#04b00f'; + var mask = ref.mask; + if (mask === void 0) mask = 'rgba(0, 0, 0, 0.3)'; + var lineWidth = ref.lineWidth; + if (lineWidth === void 0) lineWidth = 1; + + var half = lineWidth / 2; + var boundOption = [{ + start: { + x: x - half, + y: y + 10 - half + }, + step1: { + x: x - half, + y: y - half + }, + step2: { + x: x + 10 - half, + y: y - half + } + }, + { + start: { + x: x - half, + y: y + height - 10 + half + }, + step1: { + x: x - half, + y: y + height + half + }, + step2: { + x: x + 10 - half, + y: y + height + half + } + }, + { + start: { + x: x + width - 10 + half, + y: y - half + }, + step1: { + x: x + width + half, + y: y - half + }, + step2: { + x: x + width + half, + y: y + 10 - half + } + }, + { + start: { + x: x + width + half, + y: y + height - 10 + half + }, + step1: { + x: x + width + half, + y: y + height + half + }, + step2: { + x: x + width - 10 + half, + y: y + height + half + } + } + ]; + + // 绘制半透明层 + self.ctx.beginPath(); + self.ctx.setFillStyle(mask); + self.ctx.fillRect(0, 0, x, boundHeight); + self.ctx.fillRect(x, 0, width, y); + self.ctx.fillRect(x, y + height, width, boundHeight - y - height); + self.ctx.fillRect(x + width, 0, boundWidth - x - width, boundHeight); + self.ctx.fill(); + + boundOption.forEach(function(op) { + self.ctx.beginPath(); + self.ctx.setStrokeStyle(color); + self.ctx.setLineWidth(lineWidth); + self.ctx.moveTo(op.start.x, op.start.y); + self.ctx.lineTo(op.step1.x, op.step1.y); + self.ctx.lineTo(op.step2.x, op.step2.y); + self.ctx.stroke(); + }); + }; +} + +var version = "1.3.9"; + +var WeCropper = function WeCropper(params) { + var self = this; + var _default = {}; + + validator(self, DEFAULT); + + Object.keys(DEFAULT).forEach(function(key) { + _default[key] = DEFAULT[key].default; + }); + Object.assign(self, _default, params); + + self.prepare(); + self.attachPage(); + self.createCtx(); + self.observer(); + self.cutt(); + self.methods(); + self.init(); + self.update(); + + return self +}; + +WeCropper.prototype.init = function init() { + var self = this; + var src = self.src; + + self.version = version; + + typeof self.onReady === 'function' && self.onReady(self.ctx, self); + + if (src) { + self.pushOrign(src); + } else { + self.updateCanvas(); + } + setTouchState(self, false, false, false); + + self.oldScale = 1; + self.newScale = 1; + + return self +}; + +Object.assign(WeCropper.prototype, handle); + +WeCropper.prototype.prepare = prepare; +WeCropper.prototype.observer = observer; +WeCropper.prototype.methods = methods; +WeCropper.prototype.cutt = cut; +WeCropper.prototype.update = update; + +export default WeCropper; diff --git a/fe/PDA/uni_modules/vk-uview-ui/components/u-avatar/u-avatar.vue b/fe/PDA/uni_modules/vk-uview-ui/components/u-avatar/u-avatar.vue new file mode 100644 index 000000000..ab21c46f3 --- /dev/null +++ b/fe/PDA/uni_modules/vk-uview-ui/components/u-avatar/u-avatar.vue @@ -0,0 +1,263 @@ + + + + + diff --git a/fe/PDA/uni_modules/vk-uview-ui/components/u-back-top/u-back-top.vue b/fe/PDA/uni_modules/vk-uview-ui/components/u-back-top/u-back-top.vue new file mode 100644 index 000000000..7970fc7ab --- /dev/null +++ b/fe/PDA/uni_modules/vk-uview-ui/components/u-back-top/u-back-top.vue @@ -0,0 +1,153 @@ + + + + + diff --git a/fe/PDA/uni_modules/vk-uview-ui/components/u-badge/u-badge.vue b/fe/PDA/uni_modules/vk-uview-ui/components/u-badge/u-badge.vue new file mode 100644 index 000000000..0efa75169 --- /dev/null +++ b/fe/PDA/uni_modules/vk-uview-ui/components/u-badge/u-badge.vue @@ -0,0 +1,216 @@ + + + + + diff --git a/fe/PDA/uni_modules/vk-uview-ui/components/u-button/u-button.vue b/fe/PDA/uni_modules/vk-uview-ui/components/u-button/u-button.vue new file mode 100644 index 000000000..2647afc4c --- /dev/null +++ b/fe/PDA/uni_modules/vk-uview-ui/components/u-button/u-button.vue @@ -0,0 +1,602 @@ + + + + + diff --git a/fe/PDA/uni_modules/vk-uview-ui/components/u-calendar/u-calendar.vue b/fe/PDA/uni_modules/vk-uview-ui/components/u-calendar/u-calendar.vue new file mode 100644 index 000000000..fe9f2dcd1 --- /dev/null +++ b/fe/PDA/uni_modules/vk-uview-ui/components/u-calendar/u-calendar.vue @@ -0,0 +1,666 @@ + + + + diff --git a/fe/PDA/uni_modules/vk-uview-ui/components/u-car-keyboard/u-car-keyboard.vue b/fe/PDA/uni_modules/vk-uview-ui/components/u-car-keyboard/u-car-keyboard.vue new file mode 100644 index 000000000..e55db268c --- /dev/null +++ b/fe/PDA/uni_modules/vk-uview-ui/components/u-car-keyboard/u-car-keyboard.vue @@ -0,0 +1,267 @@ + + + + + diff --git a/fe/PDA/uni_modules/vk-uview-ui/components/u-card/u-card.vue b/fe/PDA/uni_modules/vk-uview-ui/components/u-card/u-card.vue new file mode 100644 index 000000000..03f9924ad --- /dev/null +++ b/fe/PDA/uni_modules/vk-uview-ui/components/u-card/u-card.vue @@ -0,0 +1,300 @@ + + + + + diff --git a/fe/PDA/uni_modules/vk-uview-ui/components/u-cell-group/u-cell-group.vue b/fe/PDA/uni_modules/vk-uview-ui/components/u-cell-group/u-cell-group.vue new file mode 100644 index 000000000..3fbca7258 --- /dev/null +++ b/fe/PDA/uni_modules/vk-uview-ui/components/u-cell-group/u-cell-group.vue @@ -0,0 +1,70 @@ + + + + + diff --git a/fe/PDA/uni_modules/vk-uview-ui/components/u-cell-item/u-cell-item.vue b/fe/PDA/uni_modules/vk-uview-ui/components/u-cell-item/u-cell-item.vue new file mode 100644 index 000000000..90ee11795 --- /dev/null +++ b/fe/PDA/uni_modules/vk-uview-ui/components/u-cell-item/u-cell-item.vue @@ -0,0 +1,317 @@ + + + + + diff --git a/fe/PDA/uni_modules/vk-uview-ui/components/u-checkbox-group/u-checkbox-group.vue b/fe/PDA/uni_modules/vk-uview-ui/components/u-checkbox-group/u-checkbox-group.vue new file mode 100644 index 000000000..18c39e76c --- /dev/null +++ b/fe/PDA/uni_modules/vk-uview-ui/components/u-checkbox-group/u-checkbox-group.vue @@ -0,0 +1,178 @@ + + + + + diff --git a/fe/PDA/uni_modules/vk-uview-ui/components/u-checkbox/u-checkbox.vue b/fe/PDA/uni_modules/vk-uview-ui/components/u-checkbox/u-checkbox.vue new file mode 100644 index 000000000..a0498fee6 --- /dev/null +++ b/fe/PDA/uni_modules/vk-uview-ui/components/u-checkbox/u-checkbox.vue @@ -0,0 +1,322 @@ + + + + + diff --git a/fe/PDA/uni_modules/vk-uview-ui/components/u-circle-progress/u-circle-progress.vue b/fe/PDA/uni_modules/vk-uview-ui/components/u-circle-progress/u-circle-progress.vue new file mode 100644 index 000000000..46e7c1810 --- /dev/null +++ b/fe/PDA/uni_modules/vk-uview-ui/components/u-circle-progress/u-circle-progress.vue @@ -0,0 +1,220 @@ + + + + + diff --git a/fe/PDA/uni_modules/vk-uview-ui/components/u-col/u-col.vue b/fe/PDA/uni_modules/vk-uview-ui/components/u-col/u-col.vue new file mode 100644 index 000000000..fc47dfa10 --- /dev/null +++ b/fe/PDA/uni_modules/vk-uview-ui/components/u-col/u-col.vue @@ -0,0 +1,157 @@ + + + + + diff --git a/fe/PDA/uni_modules/vk-uview-ui/components/u-collapse-item/u-collapse-item.vue b/fe/PDA/uni_modules/vk-uview-ui/components/u-collapse-item/u-collapse-item.vue new file mode 100644 index 000000000..963e98faa --- /dev/null +++ b/fe/PDA/uni_modules/vk-uview-ui/components/u-collapse-item/u-collapse-item.vue @@ -0,0 +1,206 @@ + + + + + diff --git a/fe/PDA/uni_modules/vk-uview-ui/components/u-collapse/u-collapse.vue b/fe/PDA/uni_modules/vk-uview-ui/components/u-collapse/u-collapse.vue new file mode 100644 index 000000000..f6e4bf02c --- /dev/null +++ b/fe/PDA/uni_modules/vk-uview-ui/components/u-collapse/u-collapse.vue @@ -0,0 +1,100 @@ + + + + + diff --git a/fe/PDA/uni_modules/vk-uview-ui/components/u-column-notice/u-column-notice.vue b/fe/PDA/uni_modules/vk-uview-ui/components/u-column-notice/u-column-notice.vue new file mode 100644 index 000000000..709ca5c98 --- /dev/null +++ b/fe/PDA/uni_modules/vk-uview-ui/components/u-column-notice/u-column-notice.vue @@ -0,0 +1,238 @@ + + + + + diff --git a/fe/PDA/uni_modules/vk-uview-ui/components/u-count-down/u-count-down.vue b/fe/PDA/uni_modules/vk-uview-ui/components/u-count-down/u-count-down.vue new file mode 100644 index 000000000..0d7cc21b3 --- /dev/null +++ b/fe/PDA/uni_modules/vk-uview-ui/components/u-count-down/u-count-down.vue @@ -0,0 +1,175 @@ + + + + + diff --git a/fe/PDA/uni_modules/vk-uview-ui/components/u-count-down/utils.js b/fe/PDA/uni_modules/vk-uview-ui/components/u-count-down/utils.js new file mode 100644 index 000000000..8c7500501 --- /dev/null +++ b/fe/PDA/uni_modules/vk-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/fe/PDA/uni_modules/vk-uview-ui/components/u-count-to/u-count-to.vue b/fe/PDA/uni_modules/vk-uview-ui/components/u-count-to/u-count-to.vue new file mode 100644 index 000000000..1825072a7 --- /dev/null +++ b/fe/PDA/uni_modules/vk-uview-ui/components/u-count-to/u-count-to.vue @@ -0,0 +1,266 @@ + + + + + diff --git a/fe/PDA/uni_modules/vk-uview-ui/components/u-divider/u-divider.vue b/fe/PDA/uni_modules/vk-uview-ui/components/u-divider/u-divider.vue new file mode 100644 index 000000000..6f8d7e69e --- /dev/null +++ b/fe/PDA/uni_modules/vk-uview-ui/components/u-divider/u-divider.vue @@ -0,0 +1,153 @@ + + + + + diff --git a/fe/PDA/uni_modules/vk-uview-ui/components/u-dropdown-item/u-dropdown-item.vue b/fe/PDA/uni_modules/vk-uview-ui/components/u-dropdown-item/u-dropdown-item.vue new file mode 100644 index 000000000..380268ad6 --- /dev/null +++ b/fe/PDA/uni_modules/vk-uview-ui/components/u-dropdown-item/u-dropdown-item.vue @@ -0,0 +1,166 @@ + + + + + diff --git a/fe/PDA/uni_modules/vk-uview-ui/components/u-dropdown/u-dropdown.vue b/fe/PDA/uni_modules/vk-uview-ui/components/u-dropdown/u-dropdown.vue new file mode 100644 index 000000000..b9438b473 --- /dev/null +++ b/fe/PDA/uni_modules/vk-uview-ui/components/u-dropdown/u-dropdown.vue @@ -0,0 +1,299 @@ + + + + + diff --git a/fe/PDA/uni_modules/vk-uview-ui/components/u-empty/u-empty.vue b/fe/PDA/uni_modules/vk-uview-ui/components/u-empty/u-empty.vue new file mode 100644 index 000000000..2c77b24ee --- /dev/null +++ b/fe/PDA/uni_modules/vk-uview-ui/components/u-empty/u-empty.vue @@ -0,0 +1,193 @@ + + + + + diff --git a/fe/PDA/uni_modules/vk-uview-ui/components/u-field/u-field.vue b/fe/PDA/uni_modules/vk-uview-ui/components/u-field/u-field.vue new file mode 100644 index 000000000..efa31e6a6 --- /dev/null +++ b/fe/PDA/uni_modules/vk-uview-ui/components/u-field/u-field.vue @@ -0,0 +1,402 @@ +