From f72d87783ea4962f94315e6505141624aada0b14 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=8E=8B=E7=90=9B?= <2103494704@qq.com> Date: Mon, 3 Jul 2023 17:49:29 +0800 Subject: [PATCH] =?UTF-8?q?ipad=E9=9D=99=E6=80=81=E5=BC=80=E5=A7=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 24 + App.vue | 21 + common/QqmapWxJssdk.min.js | 1 + common/QrCode.js | 425 +++ common/util.js | 26 + components/drag_demo/DragButton.vue | 143 + components/drag_demo/Inform.vue | 78 + components/drag_demo/index.vue | 43 + components/head-info/head-info.vue | 43 + components/sider-bar/slider-bar.vue | 32 + .../uni-plate-input/uni-plate-input.css | 208 ++ .../uni-plate-input/uni-plate-input.less | 154 + .../uni-plate-input/uni-plate-input.vue | 265 ++ config/index.js | 22 + index.html | 20 + main.js | 27 + manifest.json | 88 + pages.json | 32 + pages/index/index.vue | 85 + static/images/discern/error1.png | Bin 0 -> 4250 bytes static/images/discern/error2.png | Bin 0 -> 3458 bytes static/images/discern/error3.png | Bin 0 -> 2336 bytes static/images/discern/ex1.png | Bin 0 -> 3384 bytes static/images/discern/ex2.png | Bin 0 -> 2473 bytes static/images/discern/no.png | Bin 0 -> 1178 bytes static/images/discern/ok.png | Bin 0 -> 1322 bytes static/images/discern/yes.png | Bin 0 -> 2102 bytes static/images/right.png | Bin 0 -> 3087 bytes static/images/theme/dakaH.png | Bin 0 -> 1063 bytes static/images/theme/dakaH_a.png | Bin 0 -> 1753 bytes static/images/theme/icon_home.png | Bin 0 -> 1569 bytes static/images/theme/icon_home_a.png | Bin 0 -> 1061 bytes static/images/theme/icon_mine.png | Bin 0 -> 2643 bytes static/images/theme/mine.png | Bin 0 -> 1891 bytes static/images/theme/mine_a.png | Bin 0 -> 1548 bytes static/images/theme/tjHui.png | Bin 0 -> 1706 bytes static/images/theme/tongJ.png | Bin 0 -> 1389 bytes static/images/theme/toux.png | Bin 0 -> 5184 bytes static/images/theme/xiaoxi.png | Bin 0 -> 2039 bytes static/images/theme/xiaoxi_a.png | Bin 0 -> 1364 bytes store/index.js | 130 + style/css/flex-main.css | 106 + style/css/layout.css | 63 + style/css/main.css | 2989 +++++++++++++++++ style/iconfont.css | 67 + uni.scss | 76 + uni_modules/liu-step-bar/changelog.md | 8 + .../components/liu-step-bar/liu-step-bar.vue | 133 + uni_modules/liu-step-bar/package.json | 84 + uni_modules/liu-step-bar/readme.md | 47 + .../liu-step-bar/static/checkedImg.png | Bin 0 -> 4195 bytes .../liu-step-bar/static/unCheckedImg.png | Bin 0 -> 1610 bytes uni_modules/uni-calendar/changelog.md | 24 + .../components/uni-calendar/calendar.js | 546 +++ .../components/uni-calendar/i18n/en.json | 12 + .../components/uni-calendar/i18n/index.js | 8 + .../components/uni-calendar/i18n/zh-Hans.json | 12 + .../components/uni-calendar/i18n/zh-Hant.json | 12 + .../uni-calendar/uni-calendar-item.vue | 188 ++ .../components/uni-calendar/uni-calendar.vue | 562 ++++ .../components/uni-calendar/util.js | 360 ++ uni_modules/uni-calendar/package.json | 85 + uni_modules/uni-calendar/readme.md | 103 + uni_modules/uni-data-select/changelog.md | 33 + .../uni-data-select/uni-data-select.vue | 502 +++ uni_modules/uni-data-select/package.json | 85 + uni_modules/uni-data-select/readme.md | 8 + uni_modules/uni-file-picker/changelog.md | 67 + .../uni-file-picker/choose-and-upload-file.js | 224 ++ .../uni-file-picker/uni-file-picker.vue | 667 ++++ .../uni-file-picker/upload-file.vue | 325 ++ .../uni-file-picker/upload-image.vue | 292 ++ .../components/uni-file-picker/utils.js | 109 + uni_modules/uni-file-picker/package.json | 83 + uni_modules/uni-file-picker/readme.md | 11 + uni_modules/uni-icons/changelog.md | 22 + .../uni-icons/components/uni-icons/icons.js | 1169 +++++++ .../components/uni-icons/uni-icons.vue | 96 + .../components/uni-icons/uniicons.css | 663 ++++ .../components/uni-icons/uniicons.ttf | Bin 0 -> 35760 bytes uni_modules/uni-icons/package.json | 86 + uni_modules/uni-icons/readme.md | 8 + uni_modules/uni-load-more/changelog.md | 19 + .../components/uni-load-more/i18n/en.json | 5 + .../components/uni-load-more/i18n/index.js | 8 + .../uni-load-more/i18n/zh-Hans.json | 5 + .../uni-load-more/i18n/zh-Hant.json | 5 + .../uni-load-more/uni-load-more.vue | 399 +++ uni_modules/uni-load-more/package.json | 86 + uni_modules/uni-load-more/readme.md | 14 + uni_modules/uni-popup/changelog.md | 66 + .../components/uni-popup-dialog/keypress.js | 45 + .../uni-popup-dialog/uni-popup-dialog.vue | 275 ++ .../uni-popup-message/uni-popup-message.vue | 143 + .../uni-popup-share/uni-popup-share.vue | 187 ++ .../components/uni-popup/i18n/en.json | 7 + .../components/uni-popup/i18n/index.js | 8 + .../components/uni-popup/i18n/zh-Hans.json | 7 + .../components/uni-popup/i18n/zh-Hant.json | 7 + .../components/uni-popup/keypress.js | 45 + .../uni-popup/components/uni-popup/popup.js | 26 + .../components/uni-popup/uni-popup.vue | 474 +++ uni_modules/uni-popup/package.json | 87 + uni_modules/uni-popup/readme.md | 17 + uni_modules/uni-scss/changelog.md | 8 + uni_modules/uni-scss/index.scss | 1 + uni_modules/uni-scss/package.json | 82 + uni_modules/uni-scss/readme.md | 4 + uni_modules/uni-scss/styles/index.scss | 7 + .../uni-scss/styles/setting/_border.scss | 3 + .../uni-scss/styles/setting/_color.scss | 66 + .../uni-scss/styles/setting/_radius.scss | 55 + .../uni-scss/styles/setting/_space.scss | 56 + .../uni-scss/styles/setting/_styles.scss | 167 + .../uni-scss/styles/setting/_text.scss | 24 + .../uni-scss/styles/setting/_variables.scss | 146 + .../uni-scss/styles/tools/functions.scss | 19 + uni_modules/uni-scss/theme.scss | 31 + uni_modules/uni-scss/variables.scss | 62 + uni_modules/uni-transition/changelog.md | 20 + .../uni-transition/createAnimation.js | 128 + .../uni-transition/uni-transition.vue | 277 ++ uni_modules/uni-transition/package.json | 87 + uni_modules/uni-transition/readme.md | 11 + .../vant/dist/action-sheet/index.d.ts | 1 + wxcomponents/vant/dist/action-sheet/index.js | 71 + .../vant/dist/action-sheet/index.json | 8 + wxcomponents/vant/dist/action-sheet/index.vue | 112 + .../vant/dist/action-sheet/index.wxml | 69 + .../vant/dist/action-sheet/index.wxss | 1 + wxcomponents/vant/dist/area/index.d.ts | 1 + wxcomponents/vant/dist/area/index.js | 220 ++ wxcomponents/vant/dist/area/index.json | 6 + wxcomponents/vant/dist/area/index.vue | 234 ++ wxcomponents/vant/dist/area/index.wxml | 20 + wxcomponents/vant/dist/area/index.wxs | 8 + wxcomponents/vant/dist/area/index.wxss | 1 + wxcomponents/vant/dist/button/index.d.ts | 1 + wxcomponents/vant/dist/button/index.js | 64 + wxcomponents/vant/dist/button/index.json | 7 + wxcomponents/vant/dist/button/index.vue | 92 + wxcomponents/vant/dist/button/index.wxml | 54 + wxcomponents/vant/dist/button/index.wxs | 39 + wxcomponents/vant/dist/button/index.wxss | 1 + wxcomponents/vant/dist/calendar/calendar.vue | 37 + wxcomponents/vant/dist/calendar/calendar.wxml | 68 + .../calendar/components/header/index.d.ts | 1 + .../dist/calendar/components/header/index.js | 37 + .../calendar/components/header/index.json | 3 + .../dist/calendar/components/header/index.vue | 64 + .../calendar/components/header/index.wxml | 16 + .../calendar/components/header/index.wxss | 1 + .../dist/calendar/components/month/index.d.ts | 6 + .../dist/calendar/components/month/index.js | 154 + .../dist/calendar/components/month/index.json | 3 + .../dist/calendar/components/month/index.vue | 194 ++ .../dist/calendar/components/month/index.wxml | 39 + .../dist/calendar/components/month/index.wxs | 71 + .../dist/calendar/components/month/index.wxss | 1 + wxcomponents/vant/dist/calendar/index.d.ts | 1 + wxcomponents/vant/dist/calendar/index.js | 342 ++ wxcomponents/vant/dist/calendar/index.json | 10 + wxcomponents/vant/dist/calendar/index.vue | 370 ++ wxcomponents/vant/dist/calendar/index.wxml | 26 + wxcomponents/vant/dist/calendar/index.wxs | 37 + wxcomponents/vant/dist/calendar/index.wxss | 1 + wxcomponents/vant/dist/calendar/utils.d.ts | 12 + wxcomponents/vant/dist/calendar/utils.js | 83 + wxcomponents/vant/dist/calendar/utils.wxs | 25 + wxcomponents/vant/dist/card/index.d.ts | 1 + wxcomponents/vant/dist/card/index.js | 49 + wxcomponents/vant/dist/card/index.json | 6 + wxcomponents/vant/dist/card/index.vue | 105 + wxcomponents/vant/dist/card/index.wxml | 56 + wxcomponents/vant/dist/card/index.wxss | 1 + wxcomponents/vant/dist/cascader/index.d.ts | 1 + wxcomponents/vant/dist/cascader/index.js | 208 ++ wxcomponents/vant/dist/cascader/index.json | 8 + wxcomponents/vant/dist/cascader/index.vue | 243 ++ wxcomponents/vant/dist/cascader/index.wxml | 53 + wxcomponents/vant/dist/cascader/index.wxs | 24 + wxcomponents/vant/dist/cascader/index.wxss | 1 + wxcomponents/vant/dist/cell-group/index.d.ts | 1 + wxcomponents/vant/dist/cell-group/index.js | 11 + wxcomponents/vant/dist/cell-group/index.json | 3 + wxcomponents/vant/dist/cell-group/index.vue | 28 + wxcomponents/vant/dist/cell-group/index.wxml | 11 + wxcomponents/vant/dist/cell-group/index.wxss | 1 + wxcomponents/vant/dist/cell/index.d.ts | 1 + wxcomponents/vant/dist/cell/index.js | 38 + wxcomponents/vant/dist/cell/index.json | 6 + wxcomponents/vant/dist/cell/index.vue | 76 + wxcomponents/vant/dist/cell/index.wxml | 47 + wxcomponents/vant/dist/cell/index.wxs | 17 + wxcomponents/vant/dist/cell/index.wxss | 1 + .../vant/dist/checkbox-group/index.d.ts | 1 + .../vant/dist/checkbox-group/index.js | 36 + .../vant/dist/checkbox-group/index.json | 3 + .../vant/dist/checkbox-group/index.vue | 50 + .../vant/dist/checkbox-group/index.wxml | 5 + .../vant/dist/checkbox-group/index.wxss | 1 + wxcomponents/vant/dist/checkbox/index.d.ts | 1 + wxcomponents/vant/dist/checkbox/index.js | 77 + wxcomponents/vant/dist/checkbox/index.json | 6 + wxcomponents/vant/dist/checkbox/index.vue | 102 + wxcomponents/vant/dist/checkbox/index.wxml | 31 + wxcomponents/vant/dist/checkbox/index.wxs | 20 + wxcomponents/vant/dist/checkbox/index.wxss | 1 + wxcomponents/vant/dist/circle/canvas.d.ts | 4 + wxcomponents/vant/dist/circle/canvas.js | 43 + wxcomponents/vant/dist/circle/index.d.ts | 1 + wxcomponents/vant/dist/circle/index.js | 193 ++ wxcomponents/vant/dist/circle/index.json | 3 + wxcomponents/vant/dist/circle/index.vue | 211 ++ wxcomponents/vant/dist/circle/index.wxml | 9 + wxcomponents/vant/dist/circle/index.wxss | 1 + wxcomponents/vant/dist/col/index.d.ts | 1 + wxcomponents/vant/dist/col/index.js | 9 + wxcomponents/vant/dist/col/index.json | 3 + wxcomponents/vant/dist/col/index.vue | 23 + wxcomponents/vant/dist/col/index.wxml | 9 + wxcomponents/vant/dist/col/index.wxs | 18 + wxcomponents/vant/dist/col/index.wxss | 1 + .../vant/dist/collapse-item/animate.d.ts | 2 + .../vant/dist/collapse-item/animate.js | 39 + .../vant/dist/collapse-item/index.d.ts | 1 + wxcomponents/vant/dist/collapse-item/index.js | 60 + .../vant/dist/collapse-item/index.json | 6 + .../vant/dist/collapse-item/index.vue | 86 + .../vant/dist/collapse-item/index.wxml | 45 + .../vant/dist/collapse-item/index.wxss | 1 + wxcomponents/vant/dist/collapse/index.d.ts | 1 + wxcomponents/vant/dist/collapse/index.js | 46 + wxcomponents/vant/dist/collapse/index.json | 3 + wxcomponents/vant/dist/collapse/index.vue | 60 + wxcomponents/vant/dist/collapse/index.wxml | 3 + wxcomponents/vant/dist/collapse/index.wxss | 1 + wxcomponents/vant/dist/common/color.d.ts | 7 + wxcomponents/vant/dist/common/color.js | 7 + wxcomponents/vant/dist/common/component.d.ts | 4 + wxcomponents/vant/dist/common/component.js | 46 + wxcomponents/vant/dist/common/index.css | 1 + wxcomponents/vant/dist/common/index.wxss | 1 + wxcomponents/vant/dist/common/relation.d.ts | 15 + wxcomponents/vant/dist/common/relation.js | 56 + .../vant/dist/common/style/clearfix.css | 1 + .../vant/dist/common/style/clearfix.wxss | 1 + .../vant/dist/common/style/ellipsis.css | 1 + .../vant/dist/common/style/ellipsis.wxss | 1 + .../vant/dist/common/style/hairline.css | 1 + .../vant/dist/common/style/hairline.wxss | 1 + .../dist/common/style/mixins/clearfix.css | 0 .../dist/common/style/mixins/clearfix.wxss | 0 .../dist/common/style/mixins/ellipsis.css | 0 .../dist/common/style/mixins/ellipsis.wxss | 0 .../dist/common/style/mixins/hairline.css | 0 .../dist/common/style/mixins/hairline.wxss | 0 wxcomponents/vant/dist/common/style/var.css | 0 wxcomponents/vant/dist/common/style/var.wxss | 0 wxcomponents/vant/dist/common/utils.d.ts | 17 + wxcomponents/vant/dist/common/utils.js | 76 + wxcomponents/vant/dist/common/validator.d.ts | 9 + wxcomponents/vant/dist/common/validator.js | 31 + wxcomponents/vant/dist/common/version.d.ts | 9 + wxcomponents/vant/dist/common/version.js | 59 + .../vant/dist/config-provider/index.d.ts | 1 + .../vant/dist/config-provider/index.js | 9 + .../vant/dist/config-provider/index.json | 3 + .../vant/dist/config-provider/index.vue | 23 + .../vant/dist/config-provider/index.wxml | 5 + .../vant/dist/config-provider/index.wxs | 29 + wxcomponents/vant/dist/count-down/index.d.ts | 1 + wxcomponents/vant/dist/count-down/index.js | 100 + wxcomponents/vant/dist/count-down/index.json | 3 + wxcomponents/vant/dist/count-down/index.vue | 115 + wxcomponents/vant/dist/count-down/index.wxml | 4 + wxcomponents/vant/dist/count-down/index.wxss | 1 + wxcomponents/vant/dist/count-down/utils.d.ts | 10 + wxcomponents/vant/dist/count-down/utils.js | 57 + .../vant/dist/datetime-picker/index.d.ts | 1 + .../vant/dist/datetime-picker/index.js | 295 ++ .../vant/dist/datetime-picker/index.json | 6 + .../vant/dist/datetime-picker/index.vue | 309 ++ .../vant/dist/datetime-picker/index.wxml | 16 + .../vant/dist/datetime-picker/index.wxss | 1 + wxcomponents/vant/dist/definitions/index.d.ts | 28 + wxcomponents/vant/dist/definitions/index.js | 1 + wxcomponents/vant/dist/dialog/dialog.d.ts | 55 + wxcomponents/vant/dist/dialog/dialog.js | 77 + wxcomponents/vant/dist/dialog/index.d.ts | 1 + wxcomponents/vant/dist/dialog/index.js | 122 + wxcomponents/vant/dist/dialog/index.json | 9 + wxcomponents/vant/dist/dialog/index.vue | 167 + wxcomponents/vant/dist/dialog/index.wxml | 113 + wxcomponents/vant/dist/dialog/index.wxss | 1 + wxcomponents/vant/dist/divider/index.d.ts | 1 + wxcomponents/vant/dist/divider/index.js | 12 + wxcomponents/vant/dist/divider/index.json | 4 + wxcomponents/vant/dist/divider/index.vue | 28 + wxcomponents/vant/dist/divider/index.wxml | 9 + wxcomponents/vant/dist/divider/index.wxs | 18 + wxcomponents/vant/dist/divider/index.wxss | 1 + .../vant/dist/dropdown-item/index.d.ts | 1 + wxcomponents/vant/dist/dropdown-item/index.js | 130 + .../vant/dist/dropdown-item/index.json | 8 + .../vant/dist/dropdown-item/index.vue | 157 + .../vant/dist/dropdown-item/index.wxml | 50 + .../vant/dist/dropdown-item/index.wxss | 1 + .../vant/dist/dropdown-item/shared.d.ts | 5 + .../vant/dist/dropdown-item/shared.js | 1 + .../vant/dist/dropdown-menu/index.d.ts | 1 + wxcomponents/vant/dist/dropdown-menu/index.js | 117 + .../vant/dist/dropdown-menu/index.json | 3 + .../vant/dist/dropdown-menu/index.vue | 139 + .../vant/dist/dropdown-menu/index.wxml | 23 + .../vant/dist/dropdown-menu/index.wxs | 16 + .../vant/dist/dropdown-menu/index.wxss | 1 + wxcomponents/vant/dist/empty/index.d.ts | 1 + wxcomponents/vant/dist/empty/index.js | 10 + wxcomponents/vant/dist/empty/index.json | 4 + wxcomponents/vant/dist/empty/index.vue | 42 + wxcomponents/vant/dist/empty/index.wxml | 22 + wxcomponents/vant/dist/empty/index.wxs | 15 + wxcomponents/vant/dist/empty/index.wxss | 1 + wxcomponents/vant/dist/field/index.d.ts | 1 + wxcomponents/vant/dist/field/index.js | 112 + wxcomponents/vant/dist/field/index.json | 7 + wxcomponents/vant/dist/field/index.vue | 156 + wxcomponents/vant/dist/field/index.wxml | 56 + wxcomponents/vant/dist/field/index.wxs | 18 + wxcomponents/vant/dist/field/index.wxss | 1 + wxcomponents/vant/dist/field/input.vue | 15 + wxcomponents/vant/dist/field/input.wxml | 28 + wxcomponents/vant/dist/field/props.d.ts | 4 + wxcomponents/vant/dist/field/props.js | 64 + wxcomponents/vant/dist/field/textarea.vue | 15 + wxcomponents/vant/dist/field/textarea.wxml | 29 + wxcomponents/vant/dist/field/types.d.ts | 8 + wxcomponents/vant/dist/field/types.js | 1 + .../vant/dist/goods-action-button/index.d.ts | 1 + .../vant/dist/goods-action-button/index.js | 36 + .../vant/dist/goods-action-button/index.json | 6 + .../vant/dist/goods-action-button/index.vue | 53 + .../vant/dist/goods-action-button/index.wxml | 30 + .../vant/dist/goods-action-button/index.wxss | 1 + .../vant/dist/goods-action-icon/index.d.ts | 1 + .../vant/dist/goods-action-icon/index.js | 25 + .../vant/dist/goods-action-icon/index.json | 7 + .../vant/dist/goods-action-icon/index.vue | 44 + .../vant/dist/goods-action-icon/index.wxml | 36 + .../vant/dist/goods-action-icon/index.wxss | 1 + .../vant/dist/goods-action/index.d.ts | 1 + wxcomponents/vant/dist/goods-action/index.js | 15 + .../vant/dist/goods-action/index.json | 3 + wxcomponents/vant/dist/goods-action/index.vue | 29 + .../vant/dist/goods-action/index.wxml | 5 + .../vant/dist/goods-action/index.wxss | 1 + wxcomponents/vant/dist/grid-item/index.d.ts | 1 + wxcomponents/vant/dist/grid-item/index.js | 52 + wxcomponents/vant/dist/grid-item/index.json | 6 + wxcomponents/vant/dist/grid-item/index.vue | 82 + wxcomponents/vant/dist/grid-item/index.wxml | 27 + wxcomponents/vant/dist/grid-item/index.wxs | 32 + wxcomponents/vant/dist/grid-item/index.wxss | 1 + wxcomponents/vant/dist/grid/index.d.ts | 1 + wxcomponents/vant/dist/grid/index.js | 55 + wxcomponents/vant/dist/grid/index.json | 3 + wxcomponents/vant/dist/grid/index.vue | 69 + wxcomponents/vant/dist/grid/index.wxml | 8 + wxcomponents/vant/dist/grid/index.wxs | 13 + wxcomponents/vant/dist/grid/index.wxss | 1 + wxcomponents/vant/dist/icon/index.d.ts | 1 + wxcomponents/vant/dist/icon/index.js | 20 + wxcomponents/vant/dist/icon/index.json | 6 + wxcomponents/vant/dist/icon/index.vue | 37 + wxcomponents/vant/dist/icon/index.wxml | 20 + wxcomponents/vant/dist/icon/index.wxs | 43 + wxcomponents/vant/dist/icon/index.wxss | 1 + wxcomponents/vant/dist/image/index.d.ts | 1 + wxcomponents/vant/dist/image/index.js | 64 + wxcomponents/vant/dist/image/index.json | 7 + wxcomponents/vant/dist/image/index.vue | 90 + wxcomponents/vant/dist/image/index.wxml | 35 + wxcomponents/vant/dist/image/index.wxs | 32 + wxcomponents/vant/dist/image/index.wxss | 1 + .../vant/dist/index-anchor/index.d.ts | 1 + wxcomponents/vant/dist/index-anchor/index.js | 25 + .../vant/dist/index-anchor/index.json | 3 + wxcomponents/vant/dist/index-anchor/index.vue | 44 + .../vant/dist/index-anchor/index.wxml | 14 + .../vant/dist/index-anchor/index.wxss | 1 + wxcomponents/vant/dist/index-bar/index.d.ts | 1 + wxcomponents/vant/dist/index-bar/index.js | 246 ++ wxcomponents/vant/dist/index-bar/index.json | 3 + wxcomponents/vant/dist/index-bar/index.vue | 266 ++ wxcomponents/vant/dist/index-bar/index.wxml | 22 + wxcomponents/vant/dist/index-bar/index.wxss | 1 + wxcomponents/vant/dist/info/index.d.ts | 1 + wxcomponents/vant/dist/info/index.js | 8 + wxcomponents/vant/dist/info/index.json | 3 + wxcomponents/vant/dist/info/index.vue | 20 + wxcomponents/vant/dist/info/index.wxml | 7 + wxcomponents/vant/dist/info/index.wxss | 1 + wxcomponents/vant/dist/loading/index.d.ts | 1 + wxcomponents/vant/dist/loading/index.js | 16 + wxcomponents/vant/dist/loading/index.json | 3 + wxcomponents/vant/dist/loading/index.vue | 35 + wxcomponents/vant/dist/loading/index.wxml | 19 + wxcomponents/vant/dist/loading/index.wxs | 22 + wxcomponents/vant/dist/loading/index.wxss | 1 + wxcomponents/vant/dist/mixins/basic.d.ts | 1 + wxcomponents/vant/dist/mixins/basic.js | 11 + wxcomponents/vant/dist/mixins/button.d.ts | 1 + wxcomponents/vant/dist/mixins/button.js | 44 + wxcomponents/vant/dist/mixins/link.d.ts | 1 + wxcomponents/vant/dist/mixins/link.js | 23 + .../vant/dist/mixins/page-scroll.d.ts | 6 + wxcomponents/vant/dist/mixins/page-scroll.js | 42 + wxcomponents/vant/dist/mixins/touch.d.ts | 1 + wxcomponents/vant/dist/mixins/touch.js | 37 + wxcomponents/vant/dist/mixins/transition.d.ts | 1 + wxcomponents/vant/dist/mixins/transition.js | 118 + wxcomponents/vant/dist/nav-bar/index.d.ts | 1 + wxcomponents/vant/dist/nav-bar/index.js | 65 + wxcomponents/vant/dist/nav-bar/index.json | 6 + wxcomponents/vant/dist/nav-bar/index.vue | 99 + wxcomponents/vant/dist/nav-bar/index.wxml | 42 + wxcomponents/vant/dist/nav-bar/index.wxs | 13 + wxcomponents/vant/dist/nav-bar/index.wxss | 1 + wxcomponents/vant/dist/notice-bar/index.d.ts | 1 + wxcomponents/vant/dist/notice-bar/index.js | 120 + wxcomponents/vant/dist/notice-bar/index.json | 6 + wxcomponents/vant/dist/notice-bar/index.vue | 150 + wxcomponents/vant/dist/notice-bar/index.wxml | 38 + wxcomponents/vant/dist/notice-bar/index.wxs | 15 + wxcomponents/vant/dist/notice-bar/index.wxss | 1 + wxcomponents/vant/dist/notify/index.d.ts | 1 + wxcomponents/vant/dist/notify/index.js | 65 + wxcomponents/vant/dist/notify/index.json | 6 + wxcomponents/vant/dist/notify/index.vue | 84 + wxcomponents/vant/dist/notify/index.wxml | 21 + wxcomponents/vant/dist/notify/index.wxs | 22 + wxcomponents/vant/dist/notify/index.wxss | 1 + wxcomponents/vant/dist/notify/notify.d.ts | 22 + wxcomponents/vant/dist/notify/notify.js | 53 + wxcomponents/vant/dist/overlay/index.d.ts | 1 + wxcomponents/vant/dist/overlay/index.js | 30 + wxcomponents/vant/dist/overlay/index.json | 6 + wxcomponents/vant/dist/overlay/index.vue | 52 + wxcomponents/vant/dist/overlay/index.wxml | 7 + wxcomponents/vant/dist/overlay/index.wxss | 1 + wxcomponents/vant/dist/overlay/overlay.vue | 17 + wxcomponents/vant/dist/overlay/overlay.wxml | 10 + wxcomponents/vant/dist/panel/index.d.ts | 1 + wxcomponents/vant/dist/panel/index.js | 9 + wxcomponents/vant/dist/panel/index.json | 6 + wxcomponents/vant/dist/panel/index.vue | 34 + wxcomponents/vant/dist/panel/index.wxml | 19 + wxcomponents/vant/dist/panel/index.wxss | 1 + .../vant/dist/picker-column/index.d.ts | 1 + wxcomponents/vant/dist/picker-column/index.js | 118 + .../vant/dist/picker-column/index.json | 3 + .../vant/dist/picker-column/index.vue | 134 + .../vant/dist/picker-column/index.wxml | 23 + .../vant/dist/picker-column/index.wxs | 36 + .../vant/dist/picker-column/index.wxss | 1 + wxcomponents/vant/dist/picker/index.d.ts | 1 + wxcomponents/vant/dist/picker/index.js | 136 + wxcomponents/vant/dist/picker/index.json | 7 + wxcomponents/vant/dist/picker/index.vue | 165 + wxcomponents/vant/dist/picker/index.wxml | 37 + wxcomponents/vant/dist/picker/index.wxs | 42 + wxcomponents/vant/dist/picker/index.wxss | 1 + wxcomponents/vant/dist/picker/shared.d.ts | 21 + wxcomponents/vant/dist/picker/shared.js | 21 + wxcomponents/vant/dist/picker/toolbar.vue | 25 + wxcomponents/vant/dist/picker/toolbar.wxml | 23 + wxcomponents/vant/dist/popup/index.d.ts | 1 + wxcomponents/vant/dist/popup/index.js | 97 + wxcomponents/vant/dist/popup/index.json | 7 + wxcomponents/vant/dist/popup/index.vue | 122 + wxcomponents/vant/dist/popup/index.wxml | 21 + wxcomponents/vant/dist/popup/index.wxs | 18 + wxcomponents/vant/dist/popup/index.wxss | 1 + wxcomponents/vant/dist/popup/popup.vue | 18 + wxcomponents/vant/dist/popup/popup.wxml | 14 + wxcomponents/vant/dist/progress/index.d.ts | 1 + wxcomponents/vant/dist/progress/index.js | 51 + wxcomponents/vant/dist/progress/index.json | 3 + wxcomponents/vant/dist/progress/index.vue | 69 + wxcomponents/vant/dist/progress/index.wxml | 20 + wxcomponents/vant/dist/progress/index.wxs | 36 + wxcomponents/vant/dist/progress/index.wxss | 1 + wxcomponents/vant/dist/radio-group/index.d.ts | 1 + wxcomponents/vant/dist/radio-group/index.js | 22 + wxcomponents/vant/dist/radio-group/index.json | 3 + wxcomponents/vant/dist/radio-group/index.vue | 36 + wxcomponents/vant/dist/radio-group/index.wxml | 5 + wxcomponents/vant/dist/radio-group/index.wxss | 1 + wxcomponents/vant/dist/radio/index.d.ts | 1 + wxcomponents/vant/dist/radio/index.js | 66 + wxcomponents/vant/dist/radio/index.json | 6 + wxcomponents/vant/dist/radio/index.vue | 91 + wxcomponents/vant/dist/radio/index.wxml | 30 + wxcomponents/vant/dist/radio/index.wxs | 33 + wxcomponents/vant/dist/radio/index.wxss | 1 + wxcomponents/vant/dist/rate/index.d.ts | 1 + wxcomponents/vant/dist/rate/index.js | 78 + wxcomponents/vant/dist/rate/index.json | 6 + wxcomponents/vant/dist/rate/index.vue | 98 + wxcomponents/vant/dist/rate/index.wxml | 35 + wxcomponents/vant/dist/rate/index.wxss | 1 + wxcomponents/vant/dist/row/index.d.ts | 1 + wxcomponents/vant/dist/row/index.js | 23 + wxcomponents/vant/dist/row/index.json | 3 + wxcomponents/vant/dist/row/index.vue | 37 + wxcomponents/vant/dist/row/index.wxml | 5 + wxcomponents/vant/dist/row/index.wxs | 18 + wxcomponents/vant/dist/row/index.wxss | 1 + wxcomponents/vant/dist/search/index.d.ts | 1 + wxcomponents/vant/dist/search/index.js | 93 + wxcomponents/vant/dist/search/index.json | 6 + wxcomponents/vant/dist/search/index.vue | 122 + wxcomponents/vant/dist/search/index.wxml | 53 + wxcomponents/vant/dist/search/index.wxss | 1 + wxcomponents/vant/dist/share-sheet/index.d.ts | 1 + wxcomponents/vant/dist/share-sheet/index.js | 55 + wxcomponents/vant/dist/share-sheet/index.json | 7 + wxcomponents/vant/dist/share-sheet/index.vue | 94 + wxcomponents/vant/dist/share-sheet/index.wxml | 46 + wxcomponents/vant/dist/share-sheet/index.wxs | 12 + wxcomponents/vant/dist/share-sheet/index.wxss | 1 + .../vant/dist/share-sheet/options.d.ts | 1 + wxcomponents/vant/dist/share-sheet/options.js | 14 + .../vant/dist/share-sheet/options.json | 3 + .../vant/dist/share-sheet/options.vue | 36 + .../vant/dist/share-sheet/options.wxml | 20 + .../vant/dist/share-sheet/options.wxs | 14 + .../vant/dist/share-sheet/options.wxss | 1 + .../vant/dist/sidebar-item/index.d.ts | 1 + wxcomponents/vant/dist/sidebar-item/index.js | 29 + .../vant/dist/sidebar-item/index.json | 6 + wxcomponents/vant/dist/sidebar-item/index.vue | 49 + .../vant/dist/sidebar-item/index.wxml | 18 + .../vant/dist/sidebar-item/index.wxss | 1 + wxcomponents/vant/dist/sidebar/index.d.ts | 1 + wxcomponents/vant/dist/sidebar/index.js | 34 + wxcomponents/vant/dist/sidebar/index.json | 3 + wxcomponents/vant/dist/sidebar/index.vue | 48 + wxcomponents/vant/dist/sidebar/index.wxml | 3 + wxcomponents/vant/dist/sidebar/index.wxss | 1 + wxcomponents/vant/dist/skeleton/index.d.ts | 1 + wxcomponents/vant/dist/skeleton/index.js | 46 + wxcomponents/vant/dist/skeleton/index.json | 4 + wxcomponents/vant/dist/skeleton/index.vue | 69 + wxcomponents/vant/dist/skeleton/index.wxml | 29 + wxcomponents/vant/dist/skeleton/index.wxss | 1 + wxcomponents/vant/dist/slider/index.d.ts | 1 + wxcomponents/vant/dist/slider/index.js | 203 ++ wxcomponents/vant/dist/slider/index.json | 3 + wxcomponents/vant/dist/slider/index.vue | 231 ++ wxcomponents/vant/dist/slider/index.wxml | 68 + wxcomponents/vant/dist/slider/index.wxs | 14 + wxcomponents/vant/dist/slider/index.wxss | 1 + wxcomponents/vant/dist/stepper/index.d.ts | 1 + wxcomponents/vant/dist/stepper/index.js | 188 ++ wxcomponents/vant/dist/stepper/index.json | 3 + wxcomponents/vant/dist/stepper/index.vue | 208 ++ wxcomponents/vant/dist/stepper/index.wxml | 43 + wxcomponents/vant/dist/stepper/index.wxs | 22 + wxcomponents/vant/dist/stepper/index.wxss | 1 + wxcomponents/vant/dist/steps/index-status.wxs | 12 + wxcomponents/vant/dist/steps/index.d.ts | 1 + wxcomponents/vant/dist/steps/index.js | 33 + wxcomponents/vant/dist/steps/index.json | 6 + wxcomponents/vant/dist/steps/index.vue | 65 + wxcomponents/vant/dist/steps/index.wxml | 54 + wxcomponents/vant/dist/steps/index.wxss | 1 + wxcomponents/vant/dist/sticky/index.d.ts | 1 + wxcomponents/vant/dist/sticky/index.js | 118 + wxcomponents/vant/dist/sticky/index.json | 3 + wxcomponents/vant/dist/sticky/index.vue | 134 + wxcomponents/vant/dist/sticky/index.wxml | 8 + wxcomponents/vant/dist/sticky/index.wxs | 25 + wxcomponents/vant/dist/sticky/index.wxss | 1 + wxcomponents/vant/dist/submit-bar/index.d.ts | 1 + wxcomponents/vant/dist/submit-bar/index.js | 56 + wxcomponents/vant/dist/submit-bar/index.json | 7 + wxcomponents/vant/dist/submit-bar/index.vue | 98 + wxcomponents/vant/dist/submit-bar/index.wxml | 44 + wxcomponents/vant/dist/submit-bar/index.wxss | 1 + wxcomponents/vant/dist/swipe-cell/index.d.ts | 1 + wxcomponents/vant/dist/swipe-cell/index.js | 133 + wxcomponents/vant/dist/swipe-cell/index.json | 3 + wxcomponents/vant/dist/swipe-cell/index.vue | 155 + wxcomponents/vant/dist/swipe-cell/index.wxml | 20 + wxcomponents/vant/dist/swipe-cell/index.wxss | 1 + wxcomponents/vant/dist/switch/index.d.ts | 1 + wxcomponents/vant/dist/switch/index.js | 36 + wxcomponents/vant/dist/switch/index.json | 6 + wxcomponents/vant/dist/switch/index.vue | 54 + wxcomponents/vant/dist/switch/index.wxml | 16 + wxcomponents/vant/dist/switch/index.wxs | 26 + wxcomponents/vant/dist/switch/index.wxss | 1 + wxcomponents/vant/dist/tab/index.d.ts | 1 + wxcomponents/vant/dist/tab/index.js | 56 + wxcomponents/vant/dist/tab/index.json | 3 + wxcomponents/vant/dist/tab/index.vue | 70 + wxcomponents/vant/dist/tab/index.wxml | 8 + wxcomponents/vant/dist/tab/index.wxss | 1 + wxcomponents/vant/dist/tabbar-item/index.d.ts | 1 + wxcomponents/vant/dist/tabbar-item/index.js | 68 + wxcomponents/vant/dist/tabbar-item/index.json | 7 + wxcomponents/vant/dist/tabbar-item/index.vue | 95 + wxcomponents/vant/dist/tabbar-item/index.wxml | 28 + wxcomponents/vant/dist/tabbar-item/index.wxss | 1 + wxcomponents/vant/dist/tabbar/index.d.ts | 1 + wxcomponents/vant/dist/tabbar/index.js | 65 + wxcomponents/vant/dist/tabbar/index.json | 3 + wxcomponents/vant/dist/tabbar/index.vue | 81 + wxcomponents/vant/dist/tabbar/index.wxml | 10 + wxcomponents/vant/dist/tabbar/index.wxss | 1 + wxcomponents/vant/dist/tabs/index.d.ts | 1 + wxcomponents/vant/dist/tabs/index.js | 299 ++ wxcomponents/vant/dist/tabs/index.json | 7 + wxcomponents/vant/dist/tabs/index.vue | 340 ++ wxcomponents/vant/dist/tabs/index.wxml | 63 + wxcomponents/vant/dist/tabs/index.wxs | 83 + wxcomponents/vant/dist/tabs/index.wxss | 1 + wxcomponents/vant/dist/tag/index.d.ts | 1 + wxcomponents/vant/dist/tag/index.js | 21 + wxcomponents/vant/dist/tag/index.json | 6 + wxcomponents/vant/dist/tag/index.vue | 38 + wxcomponents/vant/dist/tag/index.wxml | 15 + wxcomponents/vant/dist/tag/index.wxs | 13 + wxcomponents/vant/dist/tag/index.wxss | 1 + wxcomponents/vant/dist/toast/index.d.ts | 1 + wxcomponents/vant/dist/toast/index.js | 29 + wxcomponents/vant/dist/toast/index.json | 9 + wxcomponents/vant/dist/toast/index.vue | 64 + wxcomponents/vant/dist/toast/index.wxml | 36 + wxcomponents/vant/dist/toast/index.wxss | 1 + wxcomponents/vant/dist/toast/toast.d.ts | 28 + wxcomponents/vant/dist/toast/toast.js | 68 + wxcomponents/vant/dist/transition/index.d.ts | 1 + wxcomponents/vant/dist/transition/index.js | 13 + wxcomponents/vant/dist/transition/index.json | 3 + wxcomponents/vant/dist/transition/index.vue | 27 + wxcomponents/vant/dist/transition/index.wxml | 10 + wxcomponents/vant/dist/transition/index.wxs | 17 + wxcomponents/vant/dist/transition/index.wxss | 1 + wxcomponents/vant/dist/tree-select/index.d.ts | 1 + wxcomponents/vant/dist/tree-select/index.js | 68 + wxcomponents/vant/dist/tree-select/index.json | 8 + wxcomponents/vant/dist/tree-select/index.vue | 97 + wxcomponents/vant/dist/tree-select/index.wxml | 41 + wxcomponents/vant/dist/tree-select/index.wxs | 12 + wxcomponents/vant/dist/tree-select/index.wxss | 1 + wxcomponents/vant/dist/uploader/index.d.ts | 1 + wxcomponents/vant/dist/uploader/index.js | 165 + wxcomponents/vant/dist/uploader/index.json | 7 + wxcomponents/vant/dist/uploader/index.vue | 214 ++ wxcomponents/vant/dist/uploader/index.wxml | 83 + wxcomponents/vant/dist/uploader/index.wxs | 17 + wxcomponents/vant/dist/uploader/index.wxss | 1 + wxcomponents/vant/dist/uploader/shared.d.ts | 53 + wxcomponents/vant/dist/uploader/shared.js | 57 + wxcomponents/vant/dist/uploader/utils.d.ts | 24 + wxcomponents/vant/dist/uploader/utils.js | 80 + wxcomponents/vant/dist/wxs/add-unit.wxs | 12 + wxcomponents/vant/dist/wxs/array.wxs | 5 + wxcomponents/vant/dist/wxs/bem.wxs | 39 + wxcomponents/vant/dist/wxs/memoize.wxs | 55 + wxcomponents/vant/dist/wxs/object.wxs | 13 + wxcomponents/vant/dist/wxs/style.wxs | 42 + wxcomponents/vant/dist/wxs/utils.wxs | 10 + 676 files changed, 33856 insertions(+) create mode 100644 .gitignore create mode 100644 App.vue create mode 100644 common/QqmapWxJssdk.min.js create mode 100644 common/QrCode.js create mode 100644 common/util.js create mode 100644 components/drag_demo/DragButton.vue create mode 100644 components/drag_demo/Inform.vue create mode 100644 components/drag_demo/index.vue create mode 100644 components/head-info/head-info.vue create mode 100644 components/sider-bar/slider-bar.vue create mode 100644 components/uni-plate-input/uni-plate-input.css create mode 100644 components/uni-plate-input/uni-plate-input.less create mode 100644 components/uni-plate-input/uni-plate-input.vue create mode 100644 config/index.js create mode 100644 index.html create mode 100644 main.js create mode 100644 manifest.json create mode 100644 pages.json create mode 100644 pages/index/index.vue create mode 100644 static/images/discern/error1.png create mode 100644 static/images/discern/error2.png create mode 100644 static/images/discern/error3.png create mode 100644 static/images/discern/ex1.png create mode 100644 static/images/discern/ex2.png create mode 100644 static/images/discern/no.png create mode 100644 static/images/discern/ok.png create mode 100644 static/images/discern/yes.png create mode 100644 static/images/right.png create mode 100644 static/images/theme/dakaH.png create mode 100644 static/images/theme/dakaH_a.png create mode 100644 static/images/theme/icon_home.png create mode 100644 static/images/theme/icon_home_a.png create mode 100644 static/images/theme/icon_mine.png create mode 100644 static/images/theme/mine.png create mode 100644 static/images/theme/mine_a.png create mode 100644 static/images/theme/tjHui.png create mode 100644 static/images/theme/tongJ.png create mode 100644 static/images/theme/toux.png create mode 100644 static/images/theme/xiaoxi.png create mode 100644 static/images/theme/xiaoxi_a.png create mode 100644 store/index.js create mode 100644 style/css/flex-main.css create mode 100644 style/css/layout.css create mode 100644 style/css/main.css create mode 100644 style/iconfont.css create mode 100644 uni.scss create mode 100644 uni_modules/liu-step-bar/changelog.md create mode 100644 uni_modules/liu-step-bar/components/liu-step-bar/liu-step-bar.vue create mode 100644 uni_modules/liu-step-bar/package.json create mode 100644 uni_modules/liu-step-bar/readme.md create mode 100644 uni_modules/liu-step-bar/static/checkedImg.png create mode 100644 uni_modules/liu-step-bar/static/unCheckedImg.png create mode 100644 uni_modules/uni-calendar/changelog.md create mode 100644 uni_modules/uni-calendar/components/uni-calendar/calendar.js create mode 100644 uni_modules/uni-calendar/components/uni-calendar/i18n/en.json create mode 100644 uni_modules/uni-calendar/components/uni-calendar/i18n/index.js create mode 100644 uni_modules/uni-calendar/components/uni-calendar/i18n/zh-Hans.json create mode 100644 uni_modules/uni-calendar/components/uni-calendar/i18n/zh-Hant.json create mode 100644 uni_modules/uni-calendar/components/uni-calendar/uni-calendar-item.vue create mode 100644 uni_modules/uni-calendar/components/uni-calendar/uni-calendar.vue create mode 100644 uni_modules/uni-calendar/components/uni-calendar/util.js create mode 100644 uni_modules/uni-calendar/package.json create mode 100644 uni_modules/uni-calendar/readme.md create mode 100644 uni_modules/uni-data-select/changelog.md create mode 100644 uni_modules/uni-data-select/components/uni-data-select/uni-data-select.vue create mode 100644 uni_modules/uni-data-select/package.json create mode 100644 uni_modules/uni-data-select/readme.md create mode 100644 uni_modules/uni-file-picker/changelog.md create mode 100644 uni_modules/uni-file-picker/components/uni-file-picker/choose-and-upload-file.js create mode 100644 uni_modules/uni-file-picker/components/uni-file-picker/uni-file-picker.vue create mode 100644 uni_modules/uni-file-picker/components/uni-file-picker/upload-file.vue create mode 100644 uni_modules/uni-file-picker/components/uni-file-picker/upload-image.vue create mode 100644 uni_modules/uni-file-picker/components/uni-file-picker/utils.js create mode 100644 uni_modules/uni-file-picker/package.json create mode 100644 uni_modules/uni-file-picker/readme.md create mode 100644 uni_modules/uni-icons/changelog.md create mode 100644 uni_modules/uni-icons/components/uni-icons/icons.js create mode 100644 uni_modules/uni-icons/components/uni-icons/uni-icons.vue create mode 100644 uni_modules/uni-icons/components/uni-icons/uniicons.css create mode 100644 uni_modules/uni-icons/components/uni-icons/uniicons.ttf create mode 100644 uni_modules/uni-icons/package.json create mode 100644 uni_modules/uni-icons/readme.md create mode 100644 uni_modules/uni-load-more/changelog.md create mode 100644 uni_modules/uni-load-more/components/uni-load-more/i18n/en.json create mode 100644 uni_modules/uni-load-more/components/uni-load-more/i18n/index.js create mode 100644 uni_modules/uni-load-more/components/uni-load-more/i18n/zh-Hans.json create mode 100644 uni_modules/uni-load-more/components/uni-load-more/i18n/zh-Hant.json create mode 100644 uni_modules/uni-load-more/components/uni-load-more/uni-load-more.vue create mode 100644 uni_modules/uni-load-more/package.json create mode 100644 uni_modules/uni-load-more/readme.md create mode 100644 uni_modules/uni-popup/changelog.md create mode 100644 uni_modules/uni-popup/components/uni-popup-dialog/keypress.js create mode 100644 uni_modules/uni-popup/components/uni-popup-dialog/uni-popup-dialog.vue create mode 100644 uni_modules/uni-popup/components/uni-popup-message/uni-popup-message.vue create mode 100644 uni_modules/uni-popup/components/uni-popup-share/uni-popup-share.vue create mode 100644 uni_modules/uni-popup/components/uni-popup/i18n/en.json create mode 100644 uni_modules/uni-popup/components/uni-popup/i18n/index.js create mode 100644 uni_modules/uni-popup/components/uni-popup/i18n/zh-Hans.json create mode 100644 uni_modules/uni-popup/components/uni-popup/i18n/zh-Hant.json create mode 100644 uni_modules/uni-popup/components/uni-popup/keypress.js create mode 100644 uni_modules/uni-popup/components/uni-popup/popup.js create mode 100644 uni_modules/uni-popup/components/uni-popup/uni-popup.vue create mode 100644 uni_modules/uni-popup/package.json create mode 100644 uni_modules/uni-popup/readme.md create mode 100644 uni_modules/uni-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-transition/changelog.md create mode 100644 uni_modules/uni-transition/components/uni-transition/createAnimation.js create mode 100644 uni_modules/uni-transition/components/uni-transition/uni-transition.vue create mode 100644 uni_modules/uni-transition/package.json create mode 100644 uni_modules/uni-transition/readme.md create mode 100644 wxcomponents/vant/dist/action-sheet/index.d.ts create mode 100644 wxcomponents/vant/dist/action-sheet/index.js create mode 100644 wxcomponents/vant/dist/action-sheet/index.json create mode 100644 wxcomponents/vant/dist/action-sheet/index.vue create mode 100644 wxcomponents/vant/dist/action-sheet/index.wxml create mode 100644 wxcomponents/vant/dist/action-sheet/index.wxss create mode 100644 wxcomponents/vant/dist/area/index.d.ts create mode 100644 wxcomponents/vant/dist/area/index.js create mode 100644 wxcomponents/vant/dist/area/index.json create mode 100644 wxcomponents/vant/dist/area/index.vue create mode 100644 wxcomponents/vant/dist/area/index.wxml create mode 100644 wxcomponents/vant/dist/area/index.wxs create mode 100644 wxcomponents/vant/dist/area/index.wxss create mode 100644 wxcomponents/vant/dist/button/index.d.ts create mode 100644 wxcomponents/vant/dist/button/index.js create mode 100644 wxcomponents/vant/dist/button/index.json create mode 100644 wxcomponents/vant/dist/button/index.vue create mode 100644 wxcomponents/vant/dist/button/index.wxml create mode 100644 wxcomponents/vant/dist/button/index.wxs create mode 100644 wxcomponents/vant/dist/button/index.wxss create mode 100644 wxcomponents/vant/dist/calendar/calendar.vue create mode 100644 wxcomponents/vant/dist/calendar/calendar.wxml create mode 100644 wxcomponents/vant/dist/calendar/components/header/index.d.ts create mode 100644 wxcomponents/vant/dist/calendar/components/header/index.js create mode 100644 wxcomponents/vant/dist/calendar/components/header/index.json create mode 100644 wxcomponents/vant/dist/calendar/components/header/index.vue create mode 100644 wxcomponents/vant/dist/calendar/components/header/index.wxml create mode 100644 wxcomponents/vant/dist/calendar/components/header/index.wxss create mode 100644 wxcomponents/vant/dist/calendar/components/month/index.d.ts create mode 100644 wxcomponents/vant/dist/calendar/components/month/index.js create mode 100644 wxcomponents/vant/dist/calendar/components/month/index.json create mode 100644 wxcomponents/vant/dist/calendar/components/month/index.vue create mode 100644 wxcomponents/vant/dist/calendar/components/month/index.wxml create mode 100644 wxcomponents/vant/dist/calendar/components/month/index.wxs create mode 100644 wxcomponents/vant/dist/calendar/components/month/index.wxss create mode 100644 wxcomponents/vant/dist/calendar/index.d.ts create mode 100644 wxcomponents/vant/dist/calendar/index.js create mode 100644 wxcomponents/vant/dist/calendar/index.json create mode 100644 wxcomponents/vant/dist/calendar/index.vue create mode 100644 wxcomponents/vant/dist/calendar/index.wxml create mode 100644 wxcomponents/vant/dist/calendar/index.wxs create mode 100644 wxcomponents/vant/dist/calendar/index.wxss create mode 100644 wxcomponents/vant/dist/calendar/utils.d.ts create mode 100644 wxcomponents/vant/dist/calendar/utils.js create mode 100644 wxcomponents/vant/dist/calendar/utils.wxs create mode 100644 wxcomponents/vant/dist/card/index.d.ts create mode 100644 wxcomponents/vant/dist/card/index.js create mode 100644 wxcomponents/vant/dist/card/index.json create mode 100644 wxcomponents/vant/dist/card/index.vue create mode 100644 wxcomponents/vant/dist/card/index.wxml create mode 100644 wxcomponents/vant/dist/card/index.wxss create mode 100644 wxcomponents/vant/dist/cascader/index.d.ts create mode 100644 wxcomponents/vant/dist/cascader/index.js create mode 100644 wxcomponents/vant/dist/cascader/index.json create mode 100644 wxcomponents/vant/dist/cascader/index.vue create mode 100644 wxcomponents/vant/dist/cascader/index.wxml create mode 100644 wxcomponents/vant/dist/cascader/index.wxs create mode 100644 wxcomponents/vant/dist/cascader/index.wxss create mode 100644 wxcomponents/vant/dist/cell-group/index.d.ts create mode 100644 wxcomponents/vant/dist/cell-group/index.js create mode 100644 wxcomponents/vant/dist/cell-group/index.json create mode 100644 wxcomponents/vant/dist/cell-group/index.vue create mode 100644 wxcomponents/vant/dist/cell-group/index.wxml create mode 100644 wxcomponents/vant/dist/cell-group/index.wxss create mode 100644 wxcomponents/vant/dist/cell/index.d.ts create mode 100644 wxcomponents/vant/dist/cell/index.js create mode 100644 wxcomponents/vant/dist/cell/index.json create mode 100644 wxcomponents/vant/dist/cell/index.vue create mode 100644 wxcomponents/vant/dist/cell/index.wxml create mode 100644 wxcomponents/vant/dist/cell/index.wxs create mode 100644 wxcomponents/vant/dist/cell/index.wxss create mode 100644 wxcomponents/vant/dist/checkbox-group/index.d.ts create mode 100644 wxcomponents/vant/dist/checkbox-group/index.js create mode 100644 wxcomponents/vant/dist/checkbox-group/index.json create mode 100644 wxcomponents/vant/dist/checkbox-group/index.vue create mode 100644 wxcomponents/vant/dist/checkbox-group/index.wxml create mode 100644 wxcomponents/vant/dist/checkbox-group/index.wxss create mode 100644 wxcomponents/vant/dist/checkbox/index.d.ts create mode 100644 wxcomponents/vant/dist/checkbox/index.js create mode 100644 wxcomponents/vant/dist/checkbox/index.json create mode 100644 wxcomponents/vant/dist/checkbox/index.vue create mode 100644 wxcomponents/vant/dist/checkbox/index.wxml create mode 100644 wxcomponents/vant/dist/checkbox/index.wxs create mode 100644 wxcomponents/vant/dist/checkbox/index.wxss create mode 100644 wxcomponents/vant/dist/circle/canvas.d.ts create mode 100644 wxcomponents/vant/dist/circle/canvas.js create mode 100644 wxcomponents/vant/dist/circle/index.d.ts create mode 100644 wxcomponents/vant/dist/circle/index.js create mode 100644 wxcomponents/vant/dist/circle/index.json create mode 100644 wxcomponents/vant/dist/circle/index.vue create mode 100644 wxcomponents/vant/dist/circle/index.wxml create mode 100644 wxcomponents/vant/dist/circle/index.wxss create mode 100644 wxcomponents/vant/dist/col/index.d.ts create mode 100644 wxcomponents/vant/dist/col/index.js create mode 100644 wxcomponents/vant/dist/col/index.json create mode 100644 wxcomponents/vant/dist/col/index.vue create mode 100644 wxcomponents/vant/dist/col/index.wxml create mode 100644 wxcomponents/vant/dist/col/index.wxs create mode 100644 wxcomponents/vant/dist/col/index.wxss create mode 100644 wxcomponents/vant/dist/collapse-item/animate.d.ts create mode 100644 wxcomponents/vant/dist/collapse-item/animate.js create mode 100644 wxcomponents/vant/dist/collapse-item/index.d.ts create mode 100644 wxcomponents/vant/dist/collapse-item/index.js create mode 100644 wxcomponents/vant/dist/collapse-item/index.json create mode 100644 wxcomponents/vant/dist/collapse-item/index.vue create mode 100644 wxcomponents/vant/dist/collapse-item/index.wxml create mode 100644 wxcomponents/vant/dist/collapse-item/index.wxss create mode 100644 wxcomponents/vant/dist/collapse/index.d.ts create mode 100644 wxcomponents/vant/dist/collapse/index.js create mode 100644 wxcomponents/vant/dist/collapse/index.json create mode 100644 wxcomponents/vant/dist/collapse/index.vue create mode 100644 wxcomponents/vant/dist/collapse/index.wxml create mode 100644 wxcomponents/vant/dist/collapse/index.wxss create mode 100644 wxcomponents/vant/dist/common/color.d.ts create mode 100644 wxcomponents/vant/dist/common/color.js create mode 100644 wxcomponents/vant/dist/common/component.d.ts create mode 100644 wxcomponents/vant/dist/common/component.js create mode 100644 wxcomponents/vant/dist/common/index.css create mode 100644 wxcomponents/vant/dist/common/index.wxss create mode 100644 wxcomponents/vant/dist/common/relation.d.ts create mode 100644 wxcomponents/vant/dist/common/relation.js create mode 100644 wxcomponents/vant/dist/common/style/clearfix.css create mode 100644 wxcomponents/vant/dist/common/style/clearfix.wxss create mode 100644 wxcomponents/vant/dist/common/style/ellipsis.css create mode 100644 wxcomponents/vant/dist/common/style/ellipsis.wxss create mode 100644 wxcomponents/vant/dist/common/style/hairline.css create mode 100644 wxcomponents/vant/dist/common/style/hairline.wxss create mode 100644 wxcomponents/vant/dist/common/style/mixins/clearfix.css create mode 100644 wxcomponents/vant/dist/common/style/mixins/clearfix.wxss create mode 100644 wxcomponents/vant/dist/common/style/mixins/ellipsis.css create mode 100644 wxcomponents/vant/dist/common/style/mixins/ellipsis.wxss create mode 100644 wxcomponents/vant/dist/common/style/mixins/hairline.css create mode 100644 wxcomponents/vant/dist/common/style/mixins/hairline.wxss create mode 100644 wxcomponents/vant/dist/common/style/var.css create mode 100644 wxcomponents/vant/dist/common/style/var.wxss create mode 100644 wxcomponents/vant/dist/common/utils.d.ts create mode 100644 wxcomponents/vant/dist/common/utils.js create mode 100644 wxcomponents/vant/dist/common/validator.d.ts create mode 100644 wxcomponents/vant/dist/common/validator.js create mode 100644 wxcomponents/vant/dist/common/version.d.ts create mode 100644 wxcomponents/vant/dist/common/version.js create mode 100644 wxcomponents/vant/dist/config-provider/index.d.ts create mode 100644 wxcomponents/vant/dist/config-provider/index.js create mode 100644 wxcomponents/vant/dist/config-provider/index.json create mode 100644 wxcomponents/vant/dist/config-provider/index.vue create mode 100644 wxcomponents/vant/dist/config-provider/index.wxml create mode 100644 wxcomponents/vant/dist/config-provider/index.wxs create mode 100644 wxcomponents/vant/dist/count-down/index.d.ts create mode 100644 wxcomponents/vant/dist/count-down/index.js create mode 100644 wxcomponents/vant/dist/count-down/index.json create mode 100644 wxcomponents/vant/dist/count-down/index.vue create mode 100644 wxcomponents/vant/dist/count-down/index.wxml create mode 100644 wxcomponents/vant/dist/count-down/index.wxss create mode 100644 wxcomponents/vant/dist/count-down/utils.d.ts create mode 100644 wxcomponents/vant/dist/count-down/utils.js create mode 100644 wxcomponents/vant/dist/datetime-picker/index.d.ts create mode 100644 wxcomponents/vant/dist/datetime-picker/index.js create mode 100644 wxcomponents/vant/dist/datetime-picker/index.json create mode 100644 wxcomponents/vant/dist/datetime-picker/index.vue create mode 100644 wxcomponents/vant/dist/datetime-picker/index.wxml create mode 100644 wxcomponents/vant/dist/datetime-picker/index.wxss create mode 100644 wxcomponents/vant/dist/definitions/index.d.ts create mode 100644 wxcomponents/vant/dist/definitions/index.js create mode 100644 wxcomponents/vant/dist/dialog/dialog.d.ts create mode 100644 wxcomponents/vant/dist/dialog/dialog.js create mode 100644 wxcomponents/vant/dist/dialog/index.d.ts create mode 100644 wxcomponents/vant/dist/dialog/index.js create mode 100644 wxcomponents/vant/dist/dialog/index.json create mode 100644 wxcomponents/vant/dist/dialog/index.vue create mode 100644 wxcomponents/vant/dist/dialog/index.wxml create mode 100644 wxcomponents/vant/dist/dialog/index.wxss create mode 100644 wxcomponents/vant/dist/divider/index.d.ts create mode 100644 wxcomponents/vant/dist/divider/index.js create mode 100644 wxcomponents/vant/dist/divider/index.json create mode 100644 wxcomponents/vant/dist/divider/index.vue create mode 100644 wxcomponents/vant/dist/divider/index.wxml create mode 100644 wxcomponents/vant/dist/divider/index.wxs create mode 100644 wxcomponents/vant/dist/divider/index.wxss create mode 100644 wxcomponents/vant/dist/dropdown-item/index.d.ts create mode 100644 wxcomponents/vant/dist/dropdown-item/index.js create mode 100644 wxcomponents/vant/dist/dropdown-item/index.json create mode 100644 wxcomponents/vant/dist/dropdown-item/index.vue create mode 100644 wxcomponents/vant/dist/dropdown-item/index.wxml create mode 100644 wxcomponents/vant/dist/dropdown-item/index.wxss create mode 100644 wxcomponents/vant/dist/dropdown-item/shared.d.ts create mode 100644 wxcomponents/vant/dist/dropdown-item/shared.js create mode 100644 wxcomponents/vant/dist/dropdown-menu/index.d.ts create mode 100644 wxcomponents/vant/dist/dropdown-menu/index.js create mode 100644 wxcomponents/vant/dist/dropdown-menu/index.json create mode 100644 wxcomponents/vant/dist/dropdown-menu/index.vue create mode 100644 wxcomponents/vant/dist/dropdown-menu/index.wxml create mode 100644 wxcomponents/vant/dist/dropdown-menu/index.wxs create mode 100644 wxcomponents/vant/dist/dropdown-menu/index.wxss create mode 100644 wxcomponents/vant/dist/empty/index.d.ts create mode 100644 wxcomponents/vant/dist/empty/index.js create mode 100644 wxcomponents/vant/dist/empty/index.json create mode 100644 wxcomponents/vant/dist/empty/index.vue create mode 100644 wxcomponents/vant/dist/empty/index.wxml create mode 100644 wxcomponents/vant/dist/empty/index.wxs create mode 100644 wxcomponents/vant/dist/empty/index.wxss create mode 100644 wxcomponents/vant/dist/field/index.d.ts create mode 100644 wxcomponents/vant/dist/field/index.js create mode 100644 wxcomponents/vant/dist/field/index.json create mode 100644 wxcomponents/vant/dist/field/index.vue create mode 100644 wxcomponents/vant/dist/field/index.wxml create mode 100644 wxcomponents/vant/dist/field/index.wxs create mode 100644 wxcomponents/vant/dist/field/index.wxss create mode 100644 wxcomponents/vant/dist/field/input.vue create mode 100644 wxcomponents/vant/dist/field/input.wxml create mode 100644 wxcomponents/vant/dist/field/props.d.ts create mode 100644 wxcomponents/vant/dist/field/props.js create mode 100644 wxcomponents/vant/dist/field/textarea.vue create mode 100644 wxcomponents/vant/dist/field/textarea.wxml create mode 100644 wxcomponents/vant/dist/field/types.d.ts create mode 100644 wxcomponents/vant/dist/field/types.js create mode 100644 wxcomponents/vant/dist/goods-action-button/index.d.ts create mode 100644 wxcomponents/vant/dist/goods-action-button/index.js create mode 100644 wxcomponents/vant/dist/goods-action-button/index.json create mode 100644 wxcomponents/vant/dist/goods-action-button/index.vue create mode 100644 wxcomponents/vant/dist/goods-action-button/index.wxml create mode 100644 wxcomponents/vant/dist/goods-action-button/index.wxss create mode 100644 wxcomponents/vant/dist/goods-action-icon/index.d.ts create mode 100644 wxcomponents/vant/dist/goods-action-icon/index.js create mode 100644 wxcomponents/vant/dist/goods-action-icon/index.json create mode 100644 wxcomponents/vant/dist/goods-action-icon/index.vue create mode 100644 wxcomponents/vant/dist/goods-action-icon/index.wxml create mode 100644 wxcomponents/vant/dist/goods-action-icon/index.wxss create mode 100644 wxcomponents/vant/dist/goods-action/index.d.ts create mode 100644 wxcomponents/vant/dist/goods-action/index.js create mode 100644 wxcomponents/vant/dist/goods-action/index.json create mode 100644 wxcomponents/vant/dist/goods-action/index.vue create mode 100644 wxcomponents/vant/dist/goods-action/index.wxml create mode 100644 wxcomponents/vant/dist/goods-action/index.wxss create mode 100644 wxcomponents/vant/dist/grid-item/index.d.ts create mode 100644 wxcomponents/vant/dist/grid-item/index.js create mode 100644 wxcomponents/vant/dist/grid-item/index.json create mode 100644 wxcomponents/vant/dist/grid-item/index.vue create mode 100644 wxcomponents/vant/dist/grid-item/index.wxml create mode 100644 wxcomponents/vant/dist/grid-item/index.wxs create mode 100644 wxcomponents/vant/dist/grid-item/index.wxss create mode 100644 wxcomponents/vant/dist/grid/index.d.ts create mode 100644 wxcomponents/vant/dist/grid/index.js create mode 100644 wxcomponents/vant/dist/grid/index.json create mode 100644 wxcomponents/vant/dist/grid/index.vue create mode 100644 wxcomponents/vant/dist/grid/index.wxml create mode 100644 wxcomponents/vant/dist/grid/index.wxs create mode 100644 wxcomponents/vant/dist/grid/index.wxss create mode 100644 wxcomponents/vant/dist/icon/index.d.ts create mode 100644 wxcomponents/vant/dist/icon/index.js create mode 100644 wxcomponents/vant/dist/icon/index.json create mode 100644 wxcomponents/vant/dist/icon/index.vue create mode 100644 wxcomponents/vant/dist/icon/index.wxml create mode 100644 wxcomponents/vant/dist/icon/index.wxs create mode 100644 wxcomponents/vant/dist/icon/index.wxss create mode 100644 wxcomponents/vant/dist/image/index.d.ts create mode 100644 wxcomponents/vant/dist/image/index.js create mode 100644 wxcomponents/vant/dist/image/index.json create mode 100644 wxcomponents/vant/dist/image/index.vue create mode 100644 wxcomponents/vant/dist/image/index.wxml create mode 100644 wxcomponents/vant/dist/image/index.wxs create mode 100644 wxcomponents/vant/dist/image/index.wxss create mode 100644 wxcomponents/vant/dist/index-anchor/index.d.ts create mode 100644 wxcomponents/vant/dist/index-anchor/index.js create mode 100644 wxcomponents/vant/dist/index-anchor/index.json create mode 100644 wxcomponents/vant/dist/index-anchor/index.vue create mode 100644 wxcomponents/vant/dist/index-anchor/index.wxml create mode 100644 wxcomponents/vant/dist/index-anchor/index.wxss create mode 100644 wxcomponents/vant/dist/index-bar/index.d.ts create mode 100644 wxcomponents/vant/dist/index-bar/index.js create mode 100644 wxcomponents/vant/dist/index-bar/index.json create mode 100644 wxcomponents/vant/dist/index-bar/index.vue create mode 100644 wxcomponents/vant/dist/index-bar/index.wxml create mode 100644 wxcomponents/vant/dist/index-bar/index.wxss create mode 100644 wxcomponents/vant/dist/info/index.d.ts create mode 100644 wxcomponents/vant/dist/info/index.js create mode 100644 wxcomponents/vant/dist/info/index.json create mode 100644 wxcomponents/vant/dist/info/index.vue create mode 100644 wxcomponents/vant/dist/info/index.wxml create mode 100644 wxcomponents/vant/dist/info/index.wxss create mode 100644 wxcomponents/vant/dist/loading/index.d.ts create mode 100644 wxcomponents/vant/dist/loading/index.js create mode 100644 wxcomponents/vant/dist/loading/index.json create mode 100644 wxcomponents/vant/dist/loading/index.vue create mode 100644 wxcomponents/vant/dist/loading/index.wxml create mode 100644 wxcomponents/vant/dist/loading/index.wxs create mode 100644 wxcomponents/vant/dist/loading/index.wxss create mode 100644 wxcomponents/vant/dist/mixins/basic.d.ts create mode 100644 wxcomponents/vant/dist/mixins/basic.js create mode 100644 wxcomponents/vant/dist/mixins/button.d.ts create mode 100644 wxcomponents/vant/dist/mixins/button.js create mode 100644 wxcomponents/vant/dist/mixins/link.d.ts create mode 100644 wxcomponents/vant/dist/mixins/link.js create mode 100644 wxcomponents/vant/dist/mixins/page-scroll.d.ts create mode 100644 wxcomponents/vant/dist/mixins/page-scroll.js create mode 100644 wxcomponents/vant/dist/mixins/touch.d.ts create mode 100644 wxcomponents/vant/dist/mixins/touch.js create mode 100644 wxcomponents/vant/dist/mixins/transition.d.ts create mode 100644 wxcomponents/vant/dist/mixins/transition.js create mode 100644 wxcomponents/vant/dist/nav-bar/index.d.ts create mode 100644 wxcomponents/vant/dist/nav-bar/index.js create mode 100644 wxcomponents/vant/dist/nav-bar/index.json create mode 100644 wxcomponents/vant/dist/nav-bar/index.vue create mode 100644 wxcomponents/vant/dist/nav-bar/index.wxml create mode 100644 wxcomponents/vant/dist/nav-bar/index.wxs create mode 100644 wxcomponents/vant/dist/nav-bar/index.wxss create mode 100644 wxcomponents/vant/dist/notice-bar/index.d.ts create mode 100644 wxcomponents/vant/dist/notice-bar/index.js create mode 100644 wxcomponents/vant/dist/notice-bar/index.json create mode 100644 wxcomponents/vant/dist/notice-bar/index.vue create mode 100644 wxcomponents/vant/dist/notice-bar/index.wxml create mode 100644 wxcomponents/vant/dist/notice-bar/index.wxs create mode 100644 wxcomponents/vant/dist/notice-bar/index.wxss create mode 100644 wxcomponents/vant/dist/notify/index.d.ts create mode 100644 wxcomponents/vant/dist/notify/index.js create mode 100644 wxcomponents/vant/dist/notify/index.json create mode 100644 wxcomponents/vant/dist/notify/index.vue create mode 100644 wxcomponents/vant/dist/notify/index.wxml create mode 100644 wxcomponents/vant/dist/notify/index.wxs create mode 100644 wxcomponents/vant/dist/notify/index.wxss create mode 100644 wxcomponents/vant/dist/notify/notify.d.ts create mode 100644 wxcomponents/vant/dist/notify/notify.js create mode 100644 wxcomponents/vant/dist/overlay/index.d.ts create mode 100644 wxcomponents/vant/dist/overlay/index.js create mode 100644 wxcomponents/vant/dist/overlay/index.json create mode 100644 wxcomponents/vant/dist/overlay/index.vue create mode 100644 wxcomponents/vant/dist/overlay/index.wxml create mode 100644 wxcomponents/vant/dist/overlay/index.wxss create mode 100644 wxcomponents/vant/dist/overlay/overlay.vue create mode 100644 wxcomponents/vant/dist/overlay/overlay.wxml create mode 100644 wxcomponents/vant/dist/panel/index.d.ts create mode 100644 wxcomponents/vant/dist/panel/index.js create mode 100644 wxcomponents/vant/dist/panel/index.json create mode 100644 wxcomponents/vant/dist/panel/index.vue create mode 100644 wxcomponents/vant/dist/panel/index.wxml create mode 100644 wxcomponents/vant/dist/panel/index.wxss create mode 100644 wxcomponents/vant/dist/picker-column/index.d.ts create mode 100644 wxcomponents/vant/dist/picker-column/index.js create mode 100644 wxcomponents/vant/dist/picker-column/index.json create mode 100644 wxcomponents/vant/dist/picker-column/index.vue create mode 100644 wxcomponents/vant/dist/picker-column/index.wxml create mode 100644 wxcomponents/vant/dist/picker-column/index.wxs create mode 100644 wxcomponents/vant/dist/picker-column/index.wxss create mode 100644 wxcomponents/vant/dist/picker/index.d.ts create mode 100644 wxcomponents/vant/dist/picker/index.js create mode 100644 wxcomponents/vant/dist/picker/index.json create mode 100644 wxcomponents/vant/dist/picker/index.vue create mode 100644 wxcomponents/vant/dist/picker/index.wxml create mode 100644 wxcomponents/vant/dist/picker/index.wxs create mode 100644 wxcomponents/vant/dist/picker/index.wxss create mode 100644 wxcomponents/vant/dist/picker/shared.d.ts create mode 100644 wxcomponents/vant/dist/picker/shared.js create mode 100644 wxcomponents/vant/dist/picker/toolbar.vue create mode 100644 wxcomponents/vant/dist/picker/toolbar.wxml create mode 100644 wxcomponents/vant/dist/popup/index.d.ts create mode 100644 wxcomponents/vant/dist/popup/index.js create mode 100644 wxcomponents/vant/dist/popup/index.json create mode 100644 wxcomponents/vant/dist/popup/index.vue create mode 100644 wxcomponents/vant/dist/popup/index.wxml create mode 100644 wxcomponents/vant/dist/popup/index.wxs create mode 100644 wxcomponents/vant/dist/popup/index.wxss create mode 100644 wxcomponents/vant/dist/popup/popup.vue create mode 100644 wxcomponents/vant/dist/popup/popup.wxml create mode 100644 wxcomponents/vant/dist/progress/index.d.ts create mode 100644 wxcomponents/vant/dist/progress/index.js create mode 100644 wxcomponents/vant/dist/progress/index.json create mode 100644 wxcomponents/vant/dist/progress/index.vue create mode 100644 wxcomponents/vant/dist/progress/index.wxml create mode 100644 wxcomponents/vant/dist/progress/index.wxs create mode 100644 wxcomponents/vant/dist/progress/index.wxss create mode 100644 wxcomponents/vant/dist/radio-group/index.d.ts create mode 100644 wxcomponents/vant/dist/radio-group/index.js create mode 100644 wxcomponents/vant/dist/radio-group/index.json create mode 100644 wxcomponents/vant/dist/radio-group/index.vue create mode 100644 wxcomponents/vant/dist/radio-group/index.wxml create mode 100644 wxcomponents/vant/dist/radio-group/index.wxss create mode 100644 wxcomponents/vant/dist/radio/index.d.ts create mode 100644 wxcomponents/vant/dist/radio/index.js create mode 100644 wxcomponents/vant/dist/radio/index.json create mode 100644 wxcomponents/vant/dist/radio/index.vue create mode 100644 wxcomponents/vant/dist/radio/index.wxml create mode 100644 wxcomponents/vant/dist/radio/index.wxs create mode 100644 wxcomponents/vant/dist/radio/index.wxss create mode 100644 wxcomponents/vant/dist/rate/index.d.ts create mode 100644 wxcomponents/vant/dist/rate/index.js create mode 100644 wxcomponents/vant/dist/rate/index.json create mode 100644 wxcomponents/vant/dist/rate/index.vue create mode 100644 wxcomponents/vant/dist/rate/index.wxml create mode 100644 wxcomponents/vant/dist/rate/index.wxss create mode 100644 wxcomponents/vant/dist/row/index.d.ts create mode 100644 wxcomponents/vant/dist/row/index.js create mode 100644 wxcomponents/vant/dist/row/index.json create mode 100644 wxcomponents/vant/dist/row/index.vue create mode 100644 wxcomponents/vant/dist/row/index.wxml create mode 100644 wxcomponents/vant/dist/row/index.wxs create mode 100644 wxcomponents/vant/dist/row/index.wxss create mode 100644 wxcomponents/vant/dist/search/index.d.ts create mode 100644 wxcomponents/vant/dist/search/index.js create mode 100644 wxcomponents/vant/dist/search/index.json create mode 100644 wxcomponents/vant/dist/search/index.vue create mode 100644 wxcomponents/vant/dist/search/index.wxml create mode 100644 wxcomponents/vant/dist/search/index.wxss create mode 100644 wxcomponents/vant/dist/share-sheet/index.d.ts create mode 100644 wxcomponents/vant/dist/share-sheet/index.js create mode 100644 wxcomponents/vant/dist/share-sheet/index.json create mode 100644 wxcomponents/vant/dist/share-sheet/index.vue create mode 100644 wxcomponents/vant/dist/share-sheet/index.wxml create mode 100644 wxcomponents/vant/dist/share-sheet/index.wxs create mode 100644 wxcomponents/vant/dist/share-sheet/index.wxss create mode 100644 wxcomponents/vant/dist/share-sheet/options.d.ts create mode 100644 wxcomponents/vant/dist/share-sheet/options.js create mode 100644 wxcomponents/vant/dist/share-sheet/options.json create mode 100644 wxcomponents/vant/dist/share-sheet/options.vue create mode 100644 wxcomponents/vant/dist/share-sheet/options.wxml create mode 100644 wxcomponents/vant/dist/share-sheet/options.wxs create mode 100644 wxcomponents/vant/dist/share-sheet/options.wxss create mode 100644 wxcomponents/vant/dist/sidebar-item/index.d.ts create mode 100644 wxcomponents/vant/dist/sidebar-item/index.js create mode 100644 wxcomponents/vant/dist/sidebar-item/index.json create mode 100644 wxcomponents/vant/dist/sidebar-item/index.vue create mode 100644 wxcomponents/vant/dist/sidebar-item/index.wxml create mode 100644 wxcomponents/vant/dist/sidebar-item/index.wxss create mode 100644 wxcomponents/vant/dist/sidebar/index.d.ts create mode 100644 wxcomponents/vant/dist/sidebar/index.js create mode 100644 wxcomponents/vant/dist/sidebar/index.json create mode 100644 wxcomponents/vant/dist/sidebar/index.vue create mode 100644 wxcomponents/vant/dist/sidebar/index.wxml create mode 100644 wxcomponents/vant/dist/sidebar/index.wxss create mode 100644 wxcomponents/vant/dist/skeleton/index.d.ts create mode 100644 wxcomponents/vant/dist/skeleton/index.js create mode 100644 wxcomponents/vant/dist/skeleton/index.json create mode 100644 wxcomponents/vant/dist/skeleton/index.vue create mode 100644 wxcomponents/vant/dist/skeleton/index.wxml create mode 100644 wxcomponents/vant/dist/skeleton/index.wxss create mode 100644 wxcomponents/vant/dist/slider/index.d.ts create mode 100644 wxcomponents/vant/dist/slider/index.js create mode 100644 wxcomponents/vant/dist/slider/index.json create mode 100644 wxcomponents/vant/dist/slider/index.vue create mode 100644 wxcomponents/vant/dist/slider/index.wxml create mode 100644 wxcomponents/vant/dist/slider/index.wxs create mode 100644 wxcomponents/vant/dist/slider/index.wxss create mode 100644 wxcomponents/vant/dist/stepper/index.d.ts create mode 100644 wxcomponents/vant/dist/stepper/index.js create mode 100644 wxcomponents/vant/dist/stepper/index.json create mode 100644 wxcomponents/vant/dist/stepper/index.vue create mode 100644 wxcomponents/vant/dist/stepper/index.wxml create mode 100644 wxcomponents/vant/dist/stepper/index.wxs create mode 100644 wxcomponents/vant/dist/stepper/index.wxss create mode 100644 wxcomponents/vant/dist/steps/index-status.wxs create mode 100644 wxcomponents/vant/dist/steps/index.d.ts create mode 100644 wxcomponents/vant/dist/steps/index.js create mode 100644 wxcomponents/vant/dist/steps/index.json create mode 100644 wxcomponents/vant/dist/steps/index.vue create mode 100644 wxcomponents/vant/dist/steps/index.wxml create mode 100644 wxcomponents/vant/dist/steps/index.wxss create mode 100644 wxcomponents/vant/dist/sticky/index.d.ts create mode 100644 wxcomponents/vant/dist/sticky/index.js create mode 100644 wxcomponents/vant/dist/sticky/index.json create mode 100644 wxcomponents/vant/dist/sticky/index.vue create mode 100644 wxcomponents/vant/dist/sticky/index.wxml create mode 100644 wxcomponents/vant/dist/sticky/index.wxs create mode 100644 wxcomponents/vant/dist/sticky/index.wxss create mode 100644 wxcomponents/vant/dist/submit-bar/index.d.ts create mode 100644 wxcomponents/vant/dist/submit-bar/index.js create mode 100644 wxcomponents/vant/dist/submit-bar/index.json create mode 100644 wxcomponents/vant/dist/submit-bar/index.vue create mode 100644 wxcomponents/vant/dist/submit-bar/index.wxml create mode 100644 wxcomponents/vant/dist/submit-bar/index.wxss create mode 100644 wxcomponents/vant/dist/swipe-cell/index.d.ts create mode 100644 wxcomponents/vant/dist/swipe-cell/index.js create mode 100644 wxcomponents/vant/dist/swipe-cell/index.json create mode 100644 wxcomponents/vant/dist/swipe-cell/index.vue create mode 100644 wxcomponents/vant/dist/swipe-cell/index.wxml create mode 100644 wxcomponents/vant/dist/swipe-cell/index.wxss create mode 100644 wxcomponents/vant/dist/switch/index.d.ts create mode 100644 wxcomponents/vant/dist/switch/index.js create mode 100644 wxcomponents/vant/dist/switch/index.json create mode 100644 wxcomponents/vant/dist/switch/index.vue create mode 100644 wxcomponents/vant/dist/switch/index.wxml create mode 100644 wxcomponents/vant/dist/switch/index.wxs create mode 100644 wxcomponents/vant/dist/switch/index.wxss create mode 100644 wxcomponents/vant/dist/tab/index.d.ts create mode 100644 wxcomponents/vant/dist/tab/index.js create mode 100644 wxcomponents/vant/dist/tab/index.json create mode 100644 wxcomponents/vant/dist/tab/index.vue create mode 100644 wxcomponents/vant/dist/tab/index.wxml create mode 100644 wxcomponents/vant/dist/tab/index.wxss create mode 100644 wxcomponents/vant/dist/tabbar-item/index.d.ts create mode 100644 wxcomponents/vant/dist/tabbar-item/index.js create mode 100644 wxcomponents/vant/dist/tabbar-item/index.json create mode 100644 wxcomponents/vant/dist/tabbar-item/index.vue create mode 100644 wxcomponents/vant/dist/tabbar-item/index.wxml create mode 100644 wxcomponents/vant/dist/tabbar-item/index.wxss create mode 100644 wxcomponents/vant/dist/tabbar/index.d.ts create mode 100644 wxcomponents/vant/dist/tabbar/index.js create mode 100644 wxcomponents/vant/dist/tabbar/index.json create mode 100644 wxcomponents/vant/dist/tabbar/index.vue create mode 100644 wxcomponents/vant/dist/tabbar/index.wxml create mode 100644 wxcomponents/vant/dist/tabbar/index.wxss create mode 100644 wxcomponents/vant/dist/tabs/index.d.ts create mode 100644 wxcomponents/vant/dist/tabs/index.js create mode 100644 wxcomponents/vant/dist/tabs/index.json create mode 100644 wxcomponents/vant/dist/tabs/index.vue create mode 100644 wxcomponents/vant/dist/tabs/index.wxml create mode 100644 wxcomponents/vant/dist/tabs/index.wxs create mode 100644 wxcomponents/vant/dist/tabs/index.wxss create mode 100644 wxcomponents/vant/dist/tag/index.d.ts create mode 100644 wxcomponents/vant/dist/tag/index.js create mode 100644 wxcomponents/vant/dist/tag/index.json create mode 100644 wxcomponents/vant/dist/tag/index.vue create mode 100644 wxcomponents/vant/dist/tag/index.wxml create mode 100644 wxcomponents/vant/dist/tag/index.wxs create mode 100644 wxcomponents/vant/dist/tag/index.wxss create mode 100644 wxcomponents/vant/dist/toast/index.d.ts create mode 100644 wxcomponents/vant/dist/toast/index.js create mode 100644 wxcomponents/vant/dist/toast/index.json create mode 100644 wxcomponents/vant/dist/toast/index.vue create mode 100644 wxcomponents/vant/dist/toast/index.wxml create mode 100644 wxcomponents/vant/dist/toast/index.wxss create mode 100644 wxcomponents/vant/dist/toast/toast.d.ts create mode 100644 wxcomponents/vant/dist/toast/toast.js create mode 100644 wxcomponents/vant/dist/transition/index.d.ts create mode 100644 wxcomponents/vant/dist/transition/index.js create mode 100644 wxcomponents/vant/dist/transition/index.json create mode 100644 wxcomponents/vant/dist/transition/index.vue create mode 100644 wxcomponents/vant/dist/transition/index.wxml create mode 100644 wxcomponents/vant/dist/transition/index.wxs create mode 100644 wxcomponents/vant/dist/transition/index.wxss create mode 100644 wxcomponents/vant/dist/tree-select/index.d.ts create mode 100644 wxcomponents/vant/dist/tree-select/index.js create mode 100644 wxcomponents/vant/dist/tree-select/index.json create mode 100644 wxcomponents/vant/dist/tree-select/index.vue create mode 100644 wxcomponents/vant/dist/tree-select/index.wxml create mode 100644 wxcomponents/vant/dist/tree-select/index.wxs create mode 100644 wxcomponents/vant/dist/tree-select/index.wxss create mode 100644 wxcomponents/vant/dist/uploader/index.d.ts create mode 100644 wxcomponents/vant/dist/uploader/index.js create mode 100644 wxcomponents/vant/dist/uploader/index.json create mode 100644 wxcomponents/vant/dist/uploader/index.vue create mode 100644 wxcomponents/vant/dist/uploader/index.wxml create mode 100644 wxcomponents/vant/dist/uploader/index.wxs create mode 100644 wxcomponents/vant/dist/uploader/index.wxss create mode 100644 wxcomponents/vant/dist/uploader/shared.d.ts create mode 100644 wxcomponents/vant/dist/uploader/shared.js create mode 100644 wxcomponents/vant/dist/uploader/utils.d.ts create mode 100644 wxcomponents/vant/dist/uploader/utils.js create mode 100644 wxcomponents/vant/dist/wxs/add-unit.wxs create mode 100644 wxcomponents/vant/dist/wxs/array.wxs create mode 100644 wxcomponents/vant/dist/wxs/bem.wxs create mode 100644 wxcomponents/vant/dist/wxs/memoize.wxs create mode 100644 wxcomponents/vant/dist/wxs/object.wxs create mode 100644 wxcomponents/vant/dist/wxs/style.wxs create mode 100644 wxcomponents/vant/dist/wxs/utils.wxs diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..a25d44a --- /dev/null +++ b/.gitignore @@ -0,0 +1,24 @@ +.DS_Store +node_modules +/dist +.history +.hbuilderx +unpackage + +# local env files +.env.local +.env.*.local + +# Log files +npm-debug.log* +yarn-debug.log* +yarn-error.log* + +# Editor directories and files +.idea +.vscode +*.suo +*.ntvs* +*.njsproj +*.sln +*.sw? diff --git a/App.vue b/App.vue new file mode 100644 index 0000000..4555a00 --- /dev/null +++ b/App.vue @@ -0,0 +1,21 @@ + + + diff --git a/common/QqmapWxJssdk.min.js b/common/QqmapWxJssdk.min.js new file mode 100644 index 0000000..8fa1477 --- /dev/null +++ b/common/QqmapWxJssdk.min.js @@ -0,0 +1 @@ +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 URL_DIRECTION = BASE_URL + 'direction/v1/'; var MODE = { driving: 'driving', transit: 'transit' }; var EARTH_RADIUS = 6378136.49; var Utils = { safeAdd(x, y) { var lsw = (x & 0xffff) + (y & 0xffff); var msw = (x >> 16) + (y >> 16) + (lsw >> 16); return (msw << 16) | (lsw & 0xffff) }, bitRotateLeft(num, cnt) { return (num << cnt) | (num >>> (32 - cnt)) }, md5cmn(q, a, b, x, s, t) { return this.safeAdd(this.bitRotateLeft(this.safeAdd(this.safeAdd(a, q), this.safeAdd(x, t)), s), b) }, md5ff(a, b, c, d, x, s, t) { return this.md5cmn((b & c) | (~b & d), a, b, x, s, t) }, md5gg(a, b, c, d, x, s, t) { return this.md5cmn((b & d) | (c & ~d), a, b, x, s, t) }, md5hh(a, b, c, d, x, s, t) { return this.md5cmn(b ^ c ^ d, a, b, x, s, t) }, md5ii(a, b, c, d, x, s, t) { return this.md5cmn(c ^ (b | ~d), a, b, x, s, t) }, binlMD5(x, len) { x[len >> 5] |= 0x80 << (len % 32); x[((len + 64) >>> 9 << 4) + 14] = len; var i; var olda; var oldb; var oldc; var oldd; var a = 1732584193; var b = -271733879; var c = -1732584194; var d = 271733878; for (i = 0; i < x.length; i += 16) { olda = a; oldb = b; oldc = c; oldd = d; a = this.md5ff(a, b, c, d, x[i], 7, -680876936); d = this.md5ff(d, a, b, c, x[i + 1], 12, -389564586); c = this.md5ff(c, d, a, b, x[i + 2], 17, 606105819); b = this.md5ff(b, c, d, a, x[i + 3], 22, -1044525330); a = this.md5ff(a, b, c, d, x[i + 4], 7, -176418897); d = this.md5ff(d, a, b, c, x[i + 5], 12, 1200080426); c = this.md5ff(c, d, a, b, x[i + 6], 17, -1473231341); b = this.md5ff(b, c, d, a, x[i + 7], 22, -45705983); a = this.md5ff(a, b, c, d, x[i + 8], 7, 1770035416); d = this.md5ff(d, a, b, c, x[i + 9], 12, -1958414417); c = this.md5ff(c, d, a, b, x[i + 10], 17, -42063); b = this.md5ff(b, c, d, a, x[i + 11], 22, -1990404162); a = this.md5ff(a, b, c, d, x[i + 12], 7, 1804603682); d = this.md5ff(d, a, b, c, x[i + 13], 12, -40341101); c = this.md5ff(c, d, a, b, x[i + 14], 17, -1502002290); b = this.md5ff(b, c, d, a, x[i + 15], 22, 1236535329); a = this.md5gg(a, b, c, d, x[i + 1], 5, -165796510); d = this.md5gg(d, a, b, c, x[i + 6], 9, -1069501632); c = this.md5gg(c, d, a, b, x[i + 11], 14, 643717713); b = this.md5gg(b, c, d, a, x[i], 20, -373897302); a = this.md5gg(a, b, c, d, x[i + 5], 5, -701558691); d = this.md5gg(d, a, b, c, x[i + 10], 9, 38016083); c = this.md5gg(c, d, a, b, x[i + 15], 14, -660478335); b = this.md5gg(b, c, d, a, x[i + 4], 20, -405537848); a = this.md5gg(a, b, c, d, x[i + 9], 5, 568446438); d = this.md5gg(d, a, b, c, x[i + 14], 9, -1019803690); c = this.md5gg(c, d, a, b, x[i + 3], 14, -187363961); b = this.md5gg(b, c, d, a, x[i + 8], 20, 1163531501); a = this.md5gg(a, b, c, d, x[i + 13], 5, -1444681467); d = this.md5gg(d, a, b, c, x[i + 2], 9, -51403784); c = this.md5gg(c, d, a, b, x[i + 7], 14, 1735328473); b = this.md5gg(b, c, d, a, x[i + 12], 20, -1926607734); a = this.md5hh(a, b, c, d, x[i + 5], 4, -378558); d = this.md5hh(d, a, b, c, x[i + 8], 11, -2022574463); c = this.md5hh(c, d, a, b, x[i + 11], 16, 1839030562); b = this.md5hh(b, c, d, a, x[i + 14], 23, -35309556); a = this.md5hh(a, b, c, d, x[i + 1], 4, -1530992060); d = this.md5hh(d, a, b, c, x[i + 4], 11, 1272893353); c = this.md5hh(c, d, a, b, x[i + 7], 16, -155497632); b = this.md5hh(b, c, d, a, x[i + 10], 23, -1094730640); a = this.md5hh(a, b, c, d, x[i + 13], 4, 681279174); d = this.md5hh(d, a, b, c, x[i], 11, -358537222); c = this.md5hh(c, d, a, b, x[i + 3], 16, -722521979); b = this.md5hh(b, c, d, a, x[i + 6], 23, 76029189); a = this.md5hh(a, b, c, d, x[i + 9], 4, -640364487); d = this.md5hh(d, a, b, c, x[i + 12], 11, -421815835); c = this.md5hh(c, d, a, b, x[i + 15], 16, 530742520); b = this.md5hh(b, c, d, a, x[i + 2], 23, -995338651); a = this.md5ii(a, b, c, d, x[i], 6, -198630844); d = this.md5ii(d, a, b, c, x[i + 7], 10, 1126891415); c = this.md5ii(c, d, a, b, x[i + 14], 15, -1416354905); b = this.md5ii(b, c, d, a, x[i + 5], 21, -57434055); a = this.md5ii(a, b, c, d, x[i + 12], 6, 1700485571); d = this.md5ii(d, a, b, c, x[i + 3], 10, -1894986606); c = this.md5ii(c, d, a, b, x[i + 10], 15, -1051523); b = this.md5ii(b, c, d, a, x[i + 1], 21, -2054922799); a = this.md5ii(a, b, c, d, x[i + 8], 6, 1873313359); d = this.md5ii(d, a, b, c, x[i + 15], 10, -30611744); c = this.md5ii(c, d, a, b, x[i + 6], 15, -1560198380); b = this.md5ii(b, c, d, a, x[i + 13], 21, 1309151649); a = this.md5ii(a, b, c, d, x[i + 4], 6, -145523070); d = this.md5ii(d, a, b, c, x[i + 11], 10, -1120210379); c = this.md5ii(c, d, a, b, x[i + 2], 15, 718787259); b = this.md5ii(b, c, d, a, x[i + 9], 21, -343485551); a = this.safeAdd(a, olda); b = this.safeAdd(b, oldb); c = this.safeAdd(c, oldc); d = this.safeAdd(d, oldd) } return [a, b, c, d] }, binl2rstr(input) { var i; var output = ''; var length32 = input.length * 32; for (i = 0; i < length32; i += 8) { output += String.fromCharCode((input[i >> 5] >>> (i % 32)) & 0xff) } return output }, rstr2binl(input) { var i; var output = []; output[(input.length >> 2) - 1] = undefined; for (i = 0; i < output.length; i += 1) { output[i] = 0 } var length8 = input.length * 8; for (i = 0; i < length8; i += 8) { output[i >> 5] |= (input.charCodeAt(i / 8) & 0xff) << (i % 32) } return output }, rstrMD5(s) { return this.binl2rstr(this.binlMD5(this.rstr2binl(s), s.length * 8)) }, rstrHMACMD5(key, data) { var i; var bkey = this.rstr2binl(key); var ipad = []; var opad = []; var hash; ipad[15] = opad[15] = undefined; if (bkey.length > 16) { bkey = this.binlMD5(bkey, key.length * 8) } for (i = 0; i < 16; i += 1) { ipad[i] = bkey[i] ^ 0x36363636; opad[i] = bkey[i] ^ 0x5c5c5c5c } hash = this.binlMD5(ipad.concat(this.rstr2binl(data)), 512 + data.length * 8); return this.binl2rstr(this.binlMD5(opad.concat(hash), 512 + 128)) }, rstr2hex(input) { var hexTab = '0123456789abcdef'; var output = ''; var x; var i; for (i = 0; i < input.length; i += 1) { x = input.charCodeAt(i); output += hexTab.charAt((x >>> 4) & 0x0f) + hexTab.charAt(x & 0x0f) } return output }, str2rstrUTF8(input) { return unescape(encodeURIComponent(input)) }, rawMD5(s) { return this.rstrMD5(this.str2rstrUTF8(s)) }, hexMD5(s) { return this.rstr2hex(this.rawMD5(s)) }, rawHMACMD5(k, d) { return this.rstrHMACMD5(this.str2rstrUTF8(k), str2rstrUTF8(d)) }, hexHMACMD5(k, d) { return this.rstr2hex(this.rawHMACMD5(k, d)) }, md5(string, key, raw) { if (!key) { if (!raw) { return this.hexMD5(string) } return this.rawMD5(string) } if (!raw) { return this.hexHMACMD5(key, string) } return this.rawHMACMD5(key, string) }, getSig(requestParam, sk, feature, mode) { var sig = null; var requestArr = []; Object.keys(requestParam).sort().forEach(function (key) { requestArr.push(key + '=' + requestParam[key]) }); if (feature == 'search') { sig = '/ws/place/v1/search?' + requestArr.join('&') + sk } if (feature == 'suggest') { sig = '/ws/place/v1/suggestion?' + requestArr.join('&') + sk } if (feature == 'reverseGeocoder') { sig = '/ws/geocoder/v1/?' + requestArr.join('&') + sk } if (feature == 'geocoder') { sig = '/ws/geocoder/v1/?' + requestArr.join('&') + sk } if (feature == 'getCityList') { sig = '/ws/district/v1/list?' + requestArr.join('&') + sk } if (feature == 'getDistrictByCityId') { sig = '/ws/district/v1/getchildren?' + requestArr.join('&') + sk } if (feature == 'calculateDistance') { sig = '/ws/distance/v1/?' + requestArr.join('&') + sk } if (feature == 'direction') { sig = '/ws/direction/v1/' + mode + '?' + requestArr.join('&') + sk } sig = this.md5(sig); return sig }, 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 }, 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 }, 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 }) }, 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 () { } }, 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 }, checkKeyword(param) { return !this.checkParamKeyEmpty(param, 'keyword') }, 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 }, buildErrorConfig(errCode, errMsg) { return { status: errCode, message: errMsg } }, 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) { 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 if (feature == 'direction') { var direction = data.result.routes; param.success(data, direction) } else { param.success(data) } }, 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 { constructor(options) { if (!options.key) { throw Error('key值不能为空') } this.key = options.key }; 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 + ")"; if (options.sig) { requestParam.sig = Utils.getSig(requestParam, options.sig, 'search') } } else if (rectangle && !region) { requestParam.boundary = "rectangle(" + rectangle + ")"; if (options.sig) { requestParam.sig = Utils.getSig(requestParam, options.sig, 'search') } } else { requestParam.boundary = "nearby(" + result.latitude + "," + result.longitude + "," + distance + "," + auto_extend + ")"; if (options.sig) { requestParam.sig = Utils.getSig(requestParam, options.sig, 'search') } } wx.request(Utils.buildWxRequestConfig(options, { url: URL_SEARCH, data: requestParam }, 'search')) }; Utils.locationProcess(options, locationsuccess) }; 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; if (options.sig) { requestParam.sig = Utils.getSig(requestParam, options.sig, 'suggest') } wx.request(Utils.buildWxRequestConfig(options, { url: URL_SUGGESTION, data: requestParam }, "suggest")) }; Utils.locationProcess(options, locationsuccess) } else { if (options.sig) { requestParam.sig = Utils.getSig(requestParam, options.sig, 'suggest') } wx.request(Utils.buildWxRequestConfig(options, { url: URL_SUGGESTION, data: requestParam }, "suggest")) } }; 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; if (options.sig) { requestParam.sig = Utils.getSig(requestParam, options.sig, 'reverseGeocoder') } wx.request(Utils.buildWxRequestConfig(options, { url: URL_GET_GEOCODER, data: requestParam }, 'reverseGeocoder')) }; Utils.locationProcess(options, locationsuccess) }; 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 } if (options.sig) { requestParam.sig = Utils.getSig(requestParam, options.sig, 'geocoder') } wx.request(Utils.buildWxRequestConfig(options, { url: URL_GET_GEOCODER, data: requestParam }, 'geocoder')) }; getCityList(options) { var that = this; options = options || {}; Utils.polyfillParam(options); var requestParam = { output: 'json', key: that.key }; if (options.sig) { requestParam.sig = Utils.getSig(requestParam, options.sig, 'getCityList') } wx.request(Utils.buildWxRequestConfig(options, { url: URL_CITY_LIST, data: requestParam }, 'getCityList')) }; 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 }; if (options.sig) { requestParam.sig = Utils.getSig(requestParam, options.sig, 'getDistrictByCityId') } wx.request(Utils.buildWxRequestConfig(options, { url: URL_AREA_LIST, data: requestParam }, 'getDistrictByCityId')) }; 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; if (options.sig) { requestParam.sig = Utils.getSig(requestParam, options.sig, 'calculateDistance') } wx.request(Utils.buildWxRequestConfig(options, { url: URL_DISTANCE, data: requestParam }, 'calculateDistance')) }; Utils.locationProcess(options, locationsuccess) } }; direction(options) { var that = this; options = options || {}; Utils.polyfillParam(options); if (Utils.checkParamKeyEmpty(options, 'to')) { return } var requestParam = { output: 'json', key: that.key }; if (typeof options.to == 'string') { requestParam.to = options.to } else { requestParam.to = options.to.latitude + ',' + options.to.longitude } var SET_URL_DIRECTION = null; options.mode = options.mode || MODE.driving; SET_URL_DIRECTION = URL_DIRECTION + options.mode; if (options.from) { options.location = options.from } if (options.mode == MODE.driving) { if (options.from_poi) { requestParam.from_poi = options.from_poi } if (options.heading) { requestParam.heading = options.heading } if (options.speed) { requestParam.speed = options.speed } if (options.accuracy) { requestParam.accuracy = options.accuracy } if (options.road_type) { requestParam.road_type = options.road_type } if (options.to_poi) { requestParam.to_poi = options.to_poi } if (options.from_track) { requestParam.from_track = options.from_track } if (options.waypoints) { requestParam.waypoints = options.waypoints } if (options.policy) { requestParam.policy = options.policy } if (options.plate_number) { requestParam.plate_number = options.plate_number } } if (options.mode == MODE.transit) { if (options.departure_time) { requestParam.departure_time = options.departure_time } if (options.policy) { requestParam.policy = options.policy } } var locationsuccess = function (result) { requestParam.from = result.latitude + ',' + result.longitude; if (options.sig) { requestParam.sig = Utils.getSig(requestParam, options.sig, 'direction', options.mode) } wx.request(Utils.buildWxRequestConfig(options, { url: SET_URL_DIRECTION, data: requestParam }, 'direction')) }; Utils.locationProcess(options, locationsuccess) } }; module.exports = QQMapWX; \ No newline at end of file diff --git a/common/QrCode.js b/common/QrCode.js new file mode 100644 index 0000000..a200359 --- /dev/null +++ b/common/QrCode.js @@ -0,0 +1,425 @@ +// Core code comes from https://github.com/davidshimjs/qrcodejs +var QRCode; + +(function () { + /** + * Get the type by string length + * + * @private + * @param {String} sText + * @param {Number} nCorrectLevel + * @return {Number} type + */ + function _getTypeNumber(sText, nCorrectLevel) { + var nType = 1; + var length = _getUTF8Length(sText); + + for (var i = 0, len = QRCodeLimitLength.length; i <= len; i++) { + var nLimit = 0; + + switch (nCorrectLevel) { + case QRErrorCorrectLevel.L: + nLimit = QRCodeLimitLength[i][0]; + break; + case QRErrorCorrectLevel.M: + nLimit = QRCodeLimitLength[i][1]; + break; + case QRErrorCorrectLevel.Q: + nLimit = QRCodeLimitLength[i][2]; + break; + case QRErrorCorrectLevel.H: + nLimit = QRCodeLimitLength[i][3]; + break; + } + + if (length <= nLimit) { + break; + } else { + nType++; + } + } + + if (nType > QRCodeLimitLength.length) { + throw new Error("Too long data"); + } + + return nType; + } + + function _getUTF8Length(sText) { + var replacedText = encodeURI(sText).toString().replace(/\%[0-9a-fA-F]{2}/g, 'a'); + return replacedText.length + (replacedText.length != sText ? 3 : 0); + } + + function QR8bitByte(data) { + this.mode = QRMode.MODE_8BIT_BYTE; + this.data = data; + this.parsedData = []; + + // Added to support UTF-8 Characters + for (var i = 0, l = this.data.length; i < l; i++) { + var byteArray = []; + var code = this.data.charCodeAt(i); + + if (code > 0x10000) { + byteArray[0] = 0xF0 | ((code & 0x1C0000) >>> 18); + byteArray[1] = 0x80 | ((code & 0x3F000) >>> 12); + byteArray[2] = 0x80 | ((code & 0xFC0) >>> 6); + byteArray[3] = 0x80 | (code & 0x3F); + } else if (code > 0x800) { + byteArray[0] = 0xE0 | ((code & 0xF000) >>> 12); + byteArray[1] = 0x80 | ((code & 0xFC0) >>> 6); + byteArray[2] = 0x80 | (code & 0x3F); + } else if (code > 0x80) { + byteArray[0] = 0xC0 | ((code & 0x7C0) >>> 6); + byteArray[1] = 0x80 | (code & 0x3F); + } else { + byteArray[0] = code; + } + + this.parsedData.push(byteArray); + } + + this.parsedData = Array.prototype.concat.apply([], this.parsedData); + + if (this.parsedData.length != this.data.length) { + this.parsedData.unshift(191); + this.parsedData.unshift(187); + this.parsedData.unshift(239); + } + } + + QR8bitByte.prototype = { + getLength: function (buffer) { + return this.parsedData.length; + }, + write: function (buffer) { + for (var i = 0, l = this.parsedData.length; i < l; i++) { + buffer.put(this.parsedData[i], 8); + } + } + }; + + + // QRCodeModel + function QRCodeModel(typeNumber, errorCorrectLevel) { + this.typeNumber = typeNumber; + this.errorCorrectLevel = errorCorrectLevel; + this.modules = null; + this.moduleCount = 0; + this.dataCache = null; + this.dataList = []; + } + QRCodeModel.prototype = { + addData: function (data) { var newData = new QR8bitByte(data); this.dataList.push(newData); this.dataCache = null; }, isDark: function (row, col) { + if (row < 0 || this.moduleCount <= row || col < 0 || this.moduleCount <= col) { throw new Error(row + "," + col); } + return this.modules[row][col]; + }, getModuleCount: function () { return this.moduleCount; }, make: function () { this.makeImpl(false, this.getBestMaskPattern()); }, makeImpl: function (test, maskPattern) { + this.moduleCount = this.typeNumber * 4 + 17; this.modules = new Array(this.moduleCount); for (var row = 0; row < this.moduleCount; row++) { this.modules[row] = new Array(this.moduleCount); for (var col = 0; col < this.moduleCount; col++) { this.modules[row][col] = null; } } + this.setupPositionProbePattern(0, 0); this.setupPositionProbePattern(this.moduleCount - 7, 0); this.setupPositionProbePattern(0, this.moduleCount - 7); this.setupPositionAdjustPattern(); this.setupTimingPattern(); this.setupTypeInfo(test, maskPattern); if (this.typeNumber >= 7) { this.setupTypeNumber(test); } + if (this.dataCache == null) { this.dataCache = QRCodeModel.createData(this.typeNumber, this.errorCorrectLevel, this.dataList); } + this.mapData(this.dataCache, maskPattern); + }, setupPositionProbePattern: function (row, col) { for (var r = -1; r <= 7; r++) { if (row + r <= -1 || this.moduleCount <= row + r) continue; for (var c = -1; c <= 7; c++) { if (col + c <= -1 || this.moduleCount <= col + c) continue; if ((0 <= r && r <= 6 && (c == 0 || c == 6)) || (0 <= c && c <= 6 && (r == 0 || r == 6)) || (2 <= r && r <= 4 && 2 <= c && c <= 4)) { this.modules[row + r][col + c] = true; } else { this.modules[row + r][col + c] = false; } } } }, getBestMaskPattern: function () { + var minLostPoint = 0; var pattern = 0; for (var i = 0; i < 8; i++) { this.makeImpl(true, i); var lostPoint = QRUtil.getLostPoint(this); if (i == 0 || minLostPoint > lostPoint) { minLostPoint = lostPoint; pattern = i; } } + return pattern; + }, createMovieClip: function (target_mc, instance_name, depth) { + var qr_mc = target_mc.createEmptyMovieClip(instance_name, depth); var cs = 1; this.make(); for (var row = 0; row < this.modules.length; row++) { var y = row * cs; for (var col = 0; col < this.modules[row].length; col++) { var x = col * cs; var dark = this.modules[row][col]; if (dark) { qr_mc.beginFill(0, 100); qr_mc.moveTo(x, y); qr_mc.lineTo(x + cs, y); qr_mc.lineTo(x + cs, y + cs); qr_mc.lineTo(x, y + cs); qr_mc.endFill(); } } } + return qr_mc; + }, setupTimingPattern: function () { + for (var r = 8; r < this.moduleCount - 8; r++) { + if (this.modules[r][6] != null) { continue; } + this.modules[r][6] = (r % 2 == 0); + } + for (var c = 8; c < this.moduleCount - 8; c++) { + if (this.modules[6][c] != null) { continue; } + this.modules[6][c] = (c % 2 == 0); + } + }, setupPositionAdjustPattern: function () { + var pos = QRUtil.getPatternPosition(this.typeNumber); for (var i = 0; i < pos.length; i++) { + for (var j = 0; j < pos.length; j++) { + var row = pos[i]; var col = pos[j]; if (this.modules[row][col] != null) { continue; } + for (var r = -2; r <= 2; r++) { for (var c = -2; c <= 2; c++) { if (r == -2 || r == 2 || c == -2 || c == 2 || (r == 0 && c == 0)) { this.modules[row + r][col + c] = true; } else { this.modules[row + r][col + c] = false; } } } + } + } + }, setupTypeNumber: function (test) { + var bits = QRUtil.getBCHTypeNumber(this.typeNumber); for (var i = 0; i < 18; i++) { var mod = (!test && ((bits >> i) & 1) == 1); this.modules[Math.floor(i / 3)][i % 3 + this.moduleCount - 8 - 3] = mod; } + for (var i = 0; i < 18; i++) { var mod = (!test && ((bits >> i) & 1) == 1); this.modules[i % 3 + this.moduleCount - 8 - 3][Math.floor(i / 3)] = mod; } + }, setupTypeInfo: function (test, maskPattern) { + var data = (this.errorCorrectLevel << 3) | maskPattern; var bits = QRUtil.getBCHTypeInfo(data); for (var i = 0; i < 15; i++) { var mod = (!test && ((bits >> i) & 1) == 1); if (i < 6) { this.modules[i][8] = mod; } else if (i < 8) { this.modules[i + 1][8] = mod; } else { this.modules[this.moduleCount - 15 + i][8] = mod; } } + for (var i = 0; i < 15; i++) { var mod = (!test && ((bits >> i) & 1) == 1); if (i < 8) { this.modules[8][this.moduleCount - i - 1] = mod; } else if (i < 9) { this.modules[8][15 - i - 1 + 1] = mod; } else { this.modules[8][15 - i - 1] = mod; } } + this.modules[this.moduleCount - 8][8] = (!test); + }, mapData: function (data, maskPattern) { + var inc = -1; var row = this.moduleCount - 1; var bitIndex = 7; var byteIndex = 0; for (var col = this.moduleCount - 1; col > 0; col -= 2) { + if (col == 6) col--; while (true) { + for (var c = 0; c < 2; c++) { + if (this.modules[row][col - c] == null) { + var dark = false; if (byteIndex < data.length) { dark = (((data[byteIndex] >>> bitIndex) & 1) == 1); } + var mask = QRUtil.getMask(maskPattern, row, col - c); if (mask) { dark = !dark; } + this.modules[row][col - c] = dark; bitIndex--; if (bitIndex == -1) { byteIndex++; bitIndex = 7; } + } + } + row += inc; if (row < 0 || this.moduleCount <= row) { row -= inc; inc = -inc; break; } + } + } + } + }; + QRCodeModel.PAD0 = 0xEC; + QRCodeModel.PAD1 = 0x11; + QRCodeModel.createData = function (typeNumber, errorCorrectLevel, dataList) { + var rsBlocks = QRRSBlock.getRSBlocks(typeNumber, errorCorrectLevel); var buffer = new QRBitBuffer(); for (var i = 0; i < dataList.length; i++) { var data = dataList[i]; buffer.put(data.mode, 4); buffer.put(data.getLength(), QRUtil.getLengthInBits(data.mode, typeNumber)); data.write(buffer); } + var totalDataCount = 0; for (var i = 0; i < rsBlocks.length; i++) { totalDataCount += rsBlocks[i].dataCount; } + if (buffer.getLengthInBits() > totalDataCount * 8) { + throw new Error("code length overflow. (" + + buffer.getLengthInBits() + + ">" + + totalDataCount * 8 + + ")"); + } + if (buffer.getLengthInBits() + 4 <= totalDataCount * 8) { buffer.put(0, 4); } + while (buffer.getLengthInBits() % 8 != 0) { buffer.putBit(false); } + while (true) { + if (buffer.getLengthInBits() >= totalDataCount * 8) { break; } + buffer.put(QRCodeModel.PAD0, 8); if (buffer.getLengthInBits() >= totalDataCount * 8) { break; } + buffer.put(QRCodeModel.PAD1, 8); + } + return QRCodeModel.createBytes(buffer, rsBlocks); + }; + QRCodeModel.createBytes = function (buffer, rsBlocks) { + var offset = 0; var maxDcCount = 0; var maxEcCount = 0; var dcdata = new Array(rsBlocks.length); var ecdata = new Array(rsBlocks.length); for (var r = 0; r < rsBlocks.length; r++) { + var dcCount = rsBlocks[r].dataCount; var ecCount = rsBlocks[r].totalCount - dcCount; maxDcCount = Math.max(maxDcCount, dcCount); maxEcCount = Math.max(maxEcCount, ecCount); dcdata[r] = new Array(dcCount); for (var i = 0; i < dcdata[r].length; i++) { dcdata[r][i] = 0xff & buffer.buffer[i + offset]; } + offset += dcCount; var rsPoly = QRUtil.getErrorCorrectPolynomial(ecCount); var rawPoly = new QRPolynomial(dcdata[r], rsPoly.getLength() - 1); var modPoly = rawPoly.mod(rsPoly); ecdata[r] = new Array(rsPoly.getLength() - 1); for (var i = 0; i < ecdata[r].length; i++) { var modIndex = i + modPoly.getLength() - ecdata[r].length; ecdata[r][i] = (modIndex >= 0) ? modPoly.get(modIndex) : 0; } + } + var totalCodeCount = 0; for (var i = 0; i < rsBlocks.length; i++) { totalCodeCount += rsBlocks[i].totalCount; } + var data = new Array(totalCodeCount); var index = 0; for (var i = 0; i < maxDcCount; i++) { for (var r = 0; r < rsBlocks.length; r++) { if (i < dcdata[r].length) { data[index++] = dcdata[r][i]; } } } + for (var i = 0; i < maxEcCount; i++) { for (var r = 0; r < rsBlocks.length; r++) { if (i < ecdata[r].length) { data[index++] = ecdata[r][i]; } } } + return data; + }; + var QRMode = { MODE_NUMBER: 1 << 0, MODE_ALPHA_NUM: 1 << 1, MODE_8BIT_BYTE: 1 << 2, MODE_KANJI: 1 << 3 }; + var QRErrorCorrectLevel = { L: 1, M: 0, Q: 3, H: 2 }; + var QRMaskPattern = { PATTERN000: 0, PATTERN001: 1, PATTERN010: 2, PATTERN011: 3, PATTERN100: 4, PATTERN101: 5, PATTERN110: 6, PATTERN111: 7 }; + var QRUtil = { + PATTERN_POSITION_TABLE: [[], [6, 18], [6, 22], [6, 26], [6, 30], [6, 34], [6, 22, 38], [6, 24, 42], [6, 26, 46], [6, 28, 50], [6, 30, 54], [6, 32, 58], [6, 34, 62], [6, 26, 46, 66], [6, 26, 48, 70], [6, 26, 50, 74], [6, 30, 54, 78], [6, 30, 56, 82], [6, 30, 58, 86], [6, 34, 62, 90], [6, 28, 50, 72, 94], [6, 26, 50, 74, 98], [6, 30, 54, 78, 102], [6, 28, 54, 80, 106], [6, 32, 58, 84, 110], [6, 30, 58, 86, 114], [6, 34, 62, 90, 118], [6, 26, 50, 74, 98, 122], [6, 30, 54, 78, 102, 126], [6, 26, 52, 78, 104, 130], [6, 30, 56, 82, 108, 134], [6, 34, 60, 86, 112, 138], [6, 30, 58, 86, 114, 142], [6, 34, 62, 90, 118, 146], [6, 30, 54, 78, 102, 126, 150], [6, 24, 50, 76, 102, 128, 154], [6, 28, 54, 80, 106, 132, 158], [6, 32, 58, 84, 110, 136, 162], [6, 26, 54, 82, 110, 138, 166], [6, 30, 58, 86, 114, 142, 170]], G15: (1 << 10) | (1 << 8) | (1 << 5) | (1 << 4) | (1 << 2) | (1 << 1) | (1 << 0), G18: (1 << 12) | (1 << 11) | (1 << 10) | (1 << 9) | (1 << 8) | (1 << 5) | (1 << 2) | (1 << 0), G15_MASK: (1 << 14) | (1 << 12) | (1 << 10) | (1 << 4) | (1 << 1), getBCHTypeInfo: function (data) { + var d = data << 10; while (QRUtil.getBCHDigit(d) - QRUtil.getBCHDigit(QRUtil.G15) >= 0) { d ^= (QRUtil.G15 << (QRUtil.getBCHDigit(d) - QRUtil.getBCHDigit(QRUtil.G15))); } + return ((data << 10) | d) ^ QRUtil.G15_MASK; + }, getBCHTypeNumber: function (data) { + var d = data << 12; while (QRUtil.getBCHDigit(d) - QRUtil.getBCHDigit(QRUtil.G18) >= 0) { d ^= (QRUtil.G18 << (QRUtil.getBCHDigit(d) - QRUtil.getBCHDigit(QRUtil.G18))); } + return (data << 12) | d; + }, getBCHDigit: function (data) { + var digit = 0; while (data != 0) { digit++; data >>>= 1; } + return digit; + }, getPatternPosition: function (typeNumber) { return QRUtil.PATTERN_POSITION_TABLE[typeNumber - 1]; }, getMask: function (maskPattern, i, j) { switch (maskPattern) { case QRMaskPattern.PATTERN000: return (i + j) % 2 == 0; case QRMaskPattern.PATTERN001: return i % 2 == 0; case QRMaskPattern.PATTERN010: return j % 3 == 0; case QRMaskPattern.PATTERN011: return (i + j) % 3 == 0; case QRMaskPattern.PATTERN100: return (Math.floor(i / 2) + Math.floor(j / 3)) % 2 == 0; case QRMaskPattern.PATTERN101: return (i * j) % 2 + (i * j) % 3 == 0; case QRMaskPattern.PATTERN110: return ((i * j) % 2 + (i * j) % 3) % 2 == 0; case QRMaskPattern.PATTERN111: return ((i * j) % 3 + (i + j) % 2) % 2 == 0; default: throw new Error("bad maskPattern:" + maskPattern); } }, getErrorCorrectPolynomial: function (errorCorrectLength) { + var a = new QRPolynomial([1], 0); for (var i = 0; i < errorCorrectLength; i++) { a = a.multiply(new QRPolynomial([1, QRMath.gexp(i)], 0)); } + return a; + }, getLengthInBits: function (mode, type) { if (1 <= type && type < 10) { switch (mode) { case QRMode.MODE_NUMBER: return 10; case QRMode.MODE_ALPHA_NUM: return 9; case QRMode.MODE_8BIT_BYTE: return 8; case QRMode.MODE_KANJI: return 8; default: throw new Error("mode:" + mode); } } else if (type < 27) { switch (mode) { case QRMode.MODE_NUMBER: return 12; case QRMode.MODE_ALPHA_NUM: return 11; case QRMode.MODE_8BIT_BYTE: return 16; case QRMode.MODE_KANJI: return 10; default: throw new Error("mode:" + mode); } } else if (type < 41) { switch (mode) { case QRMode.MODE_NUMBER: return 14; case QRMode.MODE_ALPHA_NUM: return 13; case QRMode.MODE_8BIT_BYTE: return 16; case QRMode.MODE_KANJI: return 12; default: throw new Error("mode:" + mode); } } else { throw new Error("type:" + type); } }, getLostPoint: function (qrCode) { + var moduleCount = qrCode.getModuleCount(); var lostPoint = 0; for (var row = 0; row < moduleCount; row++) { + for (var col = 0; col < moduleCount; col++) { + var sameCount = 0; var dark = qrCode.isDark(row, col); for (var r = -1; r <= 1; r++) { + if (row + r < 0 || moduleCount <= row + r) { continue; } + for (var c = -1; c <= 1; c++) { + if (col + c < 0 || moduleCount <= col + c) { continue; } + if (r == 0 && c == 0) { continue; } + if (dark == qrCode.isDark(row + r, col + c)) { sameCount++; } + } + } + if (sameCount > 5) { lostPoint += (3 + sameCount - 5); } + } + } + for (var row = 0; row < moduleCount - 1; row++) { for (var col = 0; col < moduleCount - 1; col++) { var count = 0; if (qrCode.isDark(row, col)) count++; if (qrCode.isDark(row + 1, col)) count++; if (qrCode.isDark(row, col + 1)) count++; if (qrCode.isDark(row + 1, col + 1)) count++; if (count == 0 || count == 4) { lostPoint += 3; } } } + for (var row = 0; row < moduleCount; row++) { for (var col = 0; col < moduleCount - 6; col++) { if (qrCode.isDark(row, col) && !qrCode.isDark(row, col + 1) && qrCode.isDark(row, col + 2) && qrCode.isDark(row, col + 3) && qrCode.isDark(row, col + 4) && !qrCode.isDark(row, col + 5) && qrCode.isDark(row, col + 6)) { lostPoint += 40; } } } + for (var col = 0; col < moduleCount; col++) { for (var row = 0; row < moduleCount - 6; row++) { if (qrCode.isDark(row, col) && !qrCode.isDark(row + 1, col) && qrCode.isDark(row + 2, col) && qrCode.isDark(row + 3, col) && qrCode.isDark(row + 4, col) && !qrCode.isDark(row + 5, col) && qrCode.isDark(row + 6, col)) { lostPoint += 40; } } } + var darkCount = 0; for (var col = 0; col < moduleCount; col++) { for (var row = 0; row < moduleCount; row++) { if (qrCode.isDark(row, col)) { darkCount++; } } } + var ratio = Math.abs(100 * darkCount / moduleCount / moduleCount - 50) / 5; lostPoint += ratio * 10; return lostPoint; + } + }; + var QRMath = { + glog: function (n) { + if (n < 1) { throw new Error("glog(" + n + ")"); } + return QRMath.LOG_TABLE[n]; + }, gexp: function (n) { + while (n < 0) { n += 255; } + while (n >= 256) { n -= 255; } + return QRMath.EXP_TABLE[n]; + }, EXP_TABLE: new Array(256), LOG_TABLE: new Array(256) + }; for (var i = 0; i < 8; i++) { QRMath.EXP_TABLE[i] = 1 << i; } + for (var i = 8; i < 256; i++) { QRMath.EXP_TABLE[i] = QRMath.EXP_TABLE[i - 4] ^ QRMath.EXP_TABLE[i - 5] ^ QRMath.EXP_TABLE[i - 6] ^ QRMath.EXP_TABLE[i - 8]; } + for (var i = 0; i < 255; i++) { QRMath.LOG_TABLE[QRMath.EXP_TABLE[i]] = i; } + function QRPolynomial(num, shift) { + if (num.length == undefined) { throw new Error(num.length + "/" + shift); } + var offset = 0; while (offset < num.length && num[offset] == 0) { offset++; } + this.num = new Array(num.length - offset + shift); for (var i = 0; i < num.length - offset; i++) { this.num[i] = num[i + offset]; } + } + QRPolynomial.prototype = { + get: function (index) { return this.num[index]; }, getLength: function () { return this.num.length; }, multiply: function (e) { + var num = new Array(this.getLength() + e.getLength() - 1); for (var i = 0; i < this.getLength(); i++) { for (var j = 0; j < e.getLength(); j++) { num[i + j] ^= QRMath.gexp(QRMath.glog(this.get(i)) + QRMath.glog(e.get(j))); } } + return new QRPolynomial(num, 0); + }, mod: function (e) { + if (this.getLength() - e.getLength() < 0) { return this; } + var ratio = QRMath.glog(this.get(0)) - QRMath.glog(e.get(0)); var num = new Array(this.getLength()); for (var i = 0; i < this.getLength(); i++) { num[i] = this.get(i); } + for (var i = 0; i < e.getLength(); i++) { num[i] ^= QRMath.gexp(QRMath.glog(e.get(i)) + ratio); } + return new QRPolynomial(num, 0).mod(e); + } + }; + function QRRSBlock(totalCount, dataCount) { this.totalCount = totalCount; this.dataCount = dataCount; } + QRRSBlock.RS_BLOCK_TABLE = [[1, 26, 19], [1, 26, 16], [1, 26, 13], [1, 26, 9], [1, 44, 34], [1, 44, 28], [1, 44, 22], [1, 44, 16], [1, 70, 55], [1, 70, 44], [2, 35, 17], [2, 35, 13], [1, 100, 80], [2, 50, 32], [2, 50, 24], [4, 25, 9], [1, 134, 108], [2, 67, 43], [2, 33, 15, 2, 34, 16], [2, 33, 11, 2, 34, 12], [2, 86, 68], [4, 43, 27], [4, 43, 19], [4, 43, 15], [2, 98, 78], [4, 49, 31], [2, 32, 14, 4, 33, 15], [4, 39, 13, 1, 40, 14], [2, 121, 97], [2, 60, 38, 2, 61, 39], [4, 40, 18, 2, 41, 19], [4, 40, 14, 2, 41, 15], [2, 146, 116], [3, 58, 36, 2, 59, 37], [4, 36, 16, 4, 37, 17], [4, 36, 12, 4, 37, 13], [2, 86, 68, 2, 87, 69], [4, 69, 43, 1, 70, 44], [6, 43, 19, 2, 44, 20], [6, 43, 15, 2, 44, 16], [4, 101, 81], [1, 80, 50, 4, 81, 51], [4, 50, 22, 4, 51, 23], [3, 36, 12, 8, 37, 13], [2, 116, 92, 2, 117, 93], [6, 58, 36, 2, 59, 37], [4, 46, 20, 6, 47, 21], [7, 42, 14, 4, 43, 15], [4, 133, 107], [8, 59, 37, 1, 60, 38], [8, 44, 20, 4, 45, 21], [12, 33, 11, 4, 34, 12], [3, 145, 115, 1, 146, 116], [4, 64, 40, 5, 65, 41], [11, 36, 16, 5, 37, 17], [11, 36, 12, 5, 37, 13], [5, 109, 87, 1, 110, 88], [5, 65, 41, 5, 66, 42], [5, 54, 24, 7, 55, 25], [11, 36, 12], [5, 122, 98, 1, 123, 99], [7, 73, 45, 3, 74, 46], [15, 43, 19, 2, 44, 20], [3, 45, 15, 13, 46, 16], [1, 135, 107, 5, 136, 108], [10, 74, 46, 1, 75, 47], [1, 50, 22, 15, 51, 23], [2, 42, 14, 17, 43, 15], [5, 150, 120, 1, 151, 121], [9, 69, 43, 4, 70, 44], [17, 50, 22, 1, 51, 23], [2, 42, 14, 19, 43, 15], [3, 141, 113, 4, 142, 114], [3, 70, 44, 11, 71, 45], [17, 47, 21, 4, 48, 22], [9, 39, 13, 16, 40, 14], [3, 135, 107, 5, 136, 108], [3, 67, 41, 13, 68, 42], [15, 54, 24, 5, 55, 25], [15, 43, 15, 10, 44, 16], [4, 144, 116, 4, 145, 117], [17, 68, 42], [17, 50, 22, 6, 51, 23], [19, 46, 16, 6, 47, 17], [2, 139, 111, 7, 140, 112], [17, 74, 46], [7, 54, 24, 16, 55, 25], [34, 37, 13], [4, 151, 121, 5, 152, 122], [4, 75, 47, 14, 76, 48], [11, 54, 24, 14, 55, 25], [16, 45, 15, 14, 46, 16], [6, 147, 117, 4, 148, 118], [6, 73, 45, 14, 74, 46], [11, 54, 24, 16, 55, 25], [30, 46, 16, 2, 47, 17], [8, 132, 106, 4, 133, 107], [8, 75, 47, 13, 76, 48], [7, 54, 24, 22, 55, 25], [22, 45, 15, 13, 46, 16], [10, 142, 114, 2, 143, 115], [19, 74, 46, 4, 75, 47], [28, 50, 22, 6, 51, 23], [33, 46, 16, 4, 47, 17], [8, 152, 122, 4, 153, 123], [22, 73, 45, 3, 74, 46], [8, 53, 23, 26, 54, 24], [12, 45, 15, 28, 46, 16], [3, 147, 117, 10, 148, 118], [3, 73, 45, 23, 74, 46], [4, 54, 24, 31, 55, 25], [11, 45, 15, 31, 46, 16], [7, 146, 116, 7, 147, 117], [21, 73, 45, 7, 74, 46], [1, 53, 23, 37, 54, 24], [19, 45, 15, 26, 46, 16], [5, 145, 115, 10, 146, 116], [19, 75, 47, 10, 76, 48], [15, 54, 24, 25, 55, 25], [23, 45, 15, 25, 46, 16], [13, 145, 115, 3, 146, 116], [2, 74, 46, 29, 75, 47], [42, 54, 24, 1, 55, 25], [23, 45, 15, 28, 46, 16], [17, 145, 115], [10, 74, 46, 23, 75, 47], [10, 54, 24, 35, 55, 25], [19, 45, 15, 35, 46, 16], [17, 145, 115, 1, 146, 116], [14, 74, 46, 21, 75, 47], [29, 54, 24, 19, 55, 25], [11, 45, 15, 46, 46, 16], [13, 145, 115, 6, 146, 116], [14, 74, 46, 23, 75, 47], [44, 54, 24, 7, 55, 25], [59, 46, 16, 1, 47, 17], [12, 151, 121, 7, 152, 122], [12, 75, 47, 26, 76, 48], [39, 54, 24, 14, 55, 25], [22, 45, 15, 41, 46, 16], [6, 151, 121, 14, 152, 122], [6, 75, 47, 34, 76, 48], [46, 54, 24, 10, 55, 25], [2, 45, 15, 64, 46, 16], [17, 152, 122, 4, 153, 123], [29, 74, 46, 14, 75, 47], [49, 54, 24, 10, 55, 25], [24, 45, 15, 46, 46, 16], [4, 152, 122, 18, 153, 123], [13, 74, 46, 32, 75, 47], [48, 54, 24, 14, 55, 25], [42, 45, 15, 32, 46, 16], [20, 147, 117, 4, 148, 118], [40, 75, 47, 7, 76, 48], [43, 54, 24, 22, 55, 25], [10, 45, 15, 67, 46, 16], [19, 148, 118, 6, 149, 119], [18, 75, 47, 31, 76, 48], [34, 54, 24, 34, 55, 25], [20, 45, 15, 61, 46, 16]]; + QRRSBlock.getRSBlocks = function (typeNumber, errorCorrectLevel) { + var rsBlock = QRRSBlock.getRsBlockTable(typeNumber, errorCorrectLevel); if (rsBlock == undefined) { throw new Error("bad rs block @ typeNumber:" + typeNumber + "/errorCorrectLevel:" + errorCorrectLevel); } + var length = rsBlock.length / 3; var list = []; for (var i = 0; i < length; i++) { var count = rsBlock[i * 3 + 0]; var totalCount = rsBlock[i * 3 + 1]; var dataCount = rsBlock[i * 3 + 2]; for (var j = 0; j < count; j++) { list.push(new QRRSBlock(totalCount, dataCount)); } } + return list; + }; + QRRSBlock.getRsBlockTable = function (typeNumber, errorCorrectLevel) { switch (errorCorrectLevel) { case QRErrorCorrectLevel.L: return QRRSBlock.RS_BLOCK_TABLE[(typeNumber - 1) * 4 + 0]; case QRErrorCorrectLevel.M: return QRRSBlock.RS_BLOCK_TABLE[(typeNumber - 1) * 4 + 1]; case QRErrorCorrectLevel.Q: return QRRSBlock.RS_BLOCK_TABLE[(typeNumber - 1) * 4 + 2]; case QRErrorCorrectLevel.H: return QRRSBlock.RS_BLOCK_TABLE[(typeNumber - 1) * 4 + 3]; default: return undefined; } }; + function QRBitBuffer() { this.buffer = []; this.length = 0; } + QRBitBuffer.prototype = { + get: function (index) { var bufIndex = Math.floor(index / 8); return ((this.buffer[bufIndex] >>> (7 - index % 8)) & 1) == 1; }, put: function (num, length) { for (var i = 0; i < length; i++) { this.putBit(((num >>> (length - i - 1)) & 1) == 1); } }, getLengthInBits: function () { return this.length; }, putBit: function (bit) { + var bufIndex = Math.floor(this.length / 8); if (this.buffer.length <= bufIndex) { this.buffer.push(0); } + if (bit) { this.buffer[bufIndex] |= (0x80 >>> (this.length % 8)); } + this.length++; + } + }; + var QRCodeLimitLength = [[17, 14, 11, 7], [32, 26, 20, 14], [53, 42, 32, 24], [78, 62, 46, 34], [106, 84, 60, 44], [134, 106, 74, 58], [154, 122, 86, 64], [192, 152, 108, 84], [230, 180, 130, 98], [271, 213, 151, 119], [321, 251, 177, 137], [367, 287, 203, 155], [425, 331, 241, 177], [458, 362, 258, 194], [520, 412, 292, 220], [586, 450, 322, 250], [644, 504, 364, 280], [718, 560, 394, 310], [792, 624, 442, 338], [858, 666, 482, 382], [929, 711, 509, 403], [1003, 779, 565, 439], [1091, 857, 611, 461], [1171, 911, 661, 511], [1273, 997, 715, 535], [1367, 1059, 751, 593], [1465, 1125, 805, 625], [1528, 1190, 868, 658], [1628, 1264, 908, 698], [1732, 1370, 982, 742], [1840, 1452, 1030, 790], [1952, 1538, 1112, 842], [2068, 1628, 1168, 898], [2188, 1722, 1228, 958], [2303, 1809, 1283, 983], [2431, 1911, 1351, 1051], [2563, 1989, 1423, 1093], [2699, 2099, 1499, 1139], [2809, 2213, 1579, 1219], [2953, 2331, 1663, 1273]]; + + // QRCode object + QRCode = function (canvasId, vOption) { + this._htOption = { + width: 256, + height: 256, + typeNumber: 4, + colorDark: "#000000", + colorLight: "#ffffff", + correctLevel: QRErrorCorrectLevel.H + }; + + if (typeof vOption === 'string') { + vOption = { + text: vOption + }; + } + + // Overwrites options + if (vOption) { + for (var i in vOption) { + this._htOption[i] = vOption[i]; + } + } + + this._oQRCode = null; + this.canvasId = canvasId + + if (this._htOption.text && this.canvasId) { + this.makeCode(this._htOption.text); + } + }; + + QRCode.prototype.makeCode = function (sText) { + this._oQRCode = new QRCodeModel(_getTypeNumber(sText, this._htOption.correctLevel), this._htOption.correctLevel); + this._oQRCode.addData(sText); + this._oQRCode.make(); + this.makeImage(); + }; + + QRCode.prototype.makeImage = function () { + var _oContext + if (this._htOption.usingIn) { + _oContext = wx.createCanvasContext(this.canvasId, this._htOption.usingIn) + } + else { + _oContext = wx.createCanvasContext(this.canvasId) + } + var _htOption = this._htOption; + var oQRCode = this._oQRCode + + var nCount = oQRCode.getModuleCount(); + var nWidth = _htOption.padding ? (_htOption.width - 2 * _htOption.padding) / nCount : _htOption.width / nCount; + var nHeight = _htOption.padding ? (_htOption.height - 2 * _htOption.padding) / nCount : _htOption.height / nCount; + var nRoundedHeight = Math.round(nHeight); + var nRoundedWidth = Math.round(nWidth); + + if (_htOption.image && _htOption.image != '') { + _oContext.drawImage(_htOption.image, 0, 0, _htOption.width, _htOption.height) + } + _oContext.setFillStyle('#fff') + _oContext.fillRect(0, 0, _htOption.width, _htOption.height) + _oContext.save() + for (var row = 0; row < nCount; row++) { + for (var col = 0; col < nCount; col++) { + var bIsDark = oQRCode.isDark(row, col); + var nLeft = _htOption.padding ? col * nWidth + _htOption.padding : col * nWidth; + var nTop = _htOption.padding ? row * nHeight + _htOption.padding : row * nHeight; + _oContext.setStrokeStyle(bIsDark ? _htOption.colorDark : _htOption.colorLight) + // _oContext.setStrokeStyle('red') + _oContext.setLineWidth(1) + _oContext.setFillStyle(bIsDark ? _htOption.colorDark : _htOption.colorLight) + // _oContext.setFillStyle('red') + // if (bIsDark) { + _oContext.fillRect(nLeft, nTop, nWidth, nHeight); + // } + + // 안티 앨리어싱 방지 처리 + // if (bIsDark) { + _oContext.strokeRect( + Math.floor(nLeft) + 0.5, + Math.floor(nTop) + 0.5, + nRoundedHeight + ); + + _oContext.strokeRect( + Math.ceil(nLeft) - 0.5, + Math.ceil(nTop) - 0.5, + nRoundedWidth, + nRoundedHeight + ); + // } + // _oContext.fillRect( + // Math.floor(nLeft) + 0.5, + // Math.floor(nTop) + 0.5, + // nRoundedWidth, + // nRoundedHeight + // ); + // _oContext.fillRect( + // Math.ceil(nLeft) - 0.5, + // Math.ceil(nTop) - 0.5, + // nRoundedWidth, + // nRoundedHeight + // ); + // _oContext.clearRect( + // Math.floor(nLeft) + 0.5, + // Math.floor(nTop) + 0.5, + // nRoundedWidth, + // nRoundedHeight + // ); + // _oContext.clearRect( + // Math.ceil(nLeft) - 0.5, + // Math.ceil(nTop) - 0.5, + // nRoundedWidth, + // nRoundedHeight + // ); + } + } + + _oContext.draw(false, () => { + setTimeout(() => { + this.exportImage() + }, 800) + }) + }; + // 保存为图片,将临时路径传给回调 + QRCode.prototype.exportImage = function (callback) { + if (this._htOption.callback && typeof this._htOption.callback === 'function') { + wx.canvasToTempFilePath({ + x: 0, + y: 0, + width: this._htOption.width, + height: this._htOption.height, + destWidth: this._htOption.width, + destHeight: this._htOption.height, + canvasId: this.canvasId, + success: (res) => { + this._htOption.callback({path: res.tempFilePath}) + } + }) + } + } + + QRCode.CorrectLevel = QRErrorCorrectLevel; +})(); + +module.exports = QRCode \ No newline at end of file diff --git a/common/util.js b/common/util.js new file mode 100644 index 0000000..f49a03f --- /dev/null +++ b/common/util.js @@ -0,0 +1,26 @@ +const formatTime = date => { + const year = date.getFullYear() + const month = date.getMonth() + 1 + const day = date.getDate() + const hour = date.getHours() + const minute = date.getMinutes() + const second = date.getSeconds() + return [year, month, day].map(formatNumber).join('/') + ' ' + [hour, minute, second].map(formatNumber).join(':') +} +const formatDate = date => { + const year = date.getFullYear() + const month = date.getMonth() + 1 + const day = date.getDate() + + + return [year, month, day].map(formatNumber).join('-') +} +const formatNumber = n => { + n = n.toString() + return n[1] ? n : '0' + n +} + +module.exports = { + formatTime: formatTime, + formatDate: formatDate +} \ No newline at end of file diff --git a/components/drag_demo/DragButton.vue b/components/drag_demo/DragButton.vue new file mode 100644 index 0000000..c0b90de --- /dev/null +++ b/components/drag_demo/DragButton.vue @@ -0,0 +1,143 @@ + + + + + diff --git a/components/drag_demo/Inform.vue b/components/drag_demo/Inform.vue new file mode 100644 index 0000000..e74f4c2 --- /dev/null +++ b/components/drag_demo/Inform.vue @@ -0,0 +1,78 @@ + + + + + diff --git a/components/drag_demo/index.vue b/components/drag_demo/index.vue new file mode 100644 index 0000000..a209e2b --- /dev/null +++ b/components/drag_demo/index.vue @@ -0,0 +1,43 @@ + + + + + diff --git a/components/head-info/head-info.vue b/components/head-info/head-info.vue new file mode 100644 index 0000000..bdb870d --- /dev/null +++ b/components/head-info/head-info.vue @@ -0,0 +1,43 @@ + + + + + diff --git a/components/sider-bar/slider-bar.vue b/components/sider-bar/slider-bar.vue new file mode 100644 index 0000000..db3e72b --- /dev/null +++ b/components/sider-bar/slider-bar.vue @@ -0,0 +1,32 @@ + + + \ No newline at end of file diff --git a/components/uni-plate-input/uni-plate-input.css b/components/uni-plate-input/uni-plate-input.css new file mode 100644 index 0000000..d381cff --- /dev/null +++ b/components/uni-plate-input/uni-plate-input.css @@ -0,0 +1,208 @@ +.so-mask { + position: fixed; + top: 0; + bottom: 0; + right: 0; + left: 0; + background: rgba(0, 0, 0, 0.5); + z-index: 998 +} + +.so-plate { + box-sizing: border-box; + position: absolute; + bottom: 0; + width: 100%; + left: 0; + background: #fff; + padding: 25upx 25upx 0 25upx +} + +.so-plate-head { + display: -webkit-box; + display: flex; + -webkit-box-pack: justify; + justify-content: space-between; + -webkit-box-align: center; + align-items: center +} + +.so-plate-type { + -webkit-box-flex: 1; + flex: 1; + display: block +} + +.so-plate-type label { + display: inline-block; + min-height: 32upx; + font-size: 26upx; + margin-right: 20upx +} + +.so-plate-body { + box-sizing: border-box; + padding: 30upx 0; + display: -webkit-box; + display: flex; + -webkit-box-pack: justify; + justify-content: space-between; + -webkit-box-align: center; + align-items: center +} + +.so-plate-word { + border: 1upx solid #ccc; + border-radius: 10upx; + height: 0; + margin: 0 5upx; + box-sizing: border-box; + padding-bottom: calc(4.28571429%); + width: calc(4.28571429%); + position: relative +} + +.so-plate-word.active { + border-color: #007aff; + box-shadow: 0 0 15upx 0 #007aff +} + +.so-plate-word text { + position: absolute; + top: 50%; + left: 50%; + -webkit-transform: translateX(-50%) translateY(-50%); + transform: translateX(-50%) translateY(-50%); + font-weight: 700; + font-size: 32upx +} + +.so-plate-dot { + width: 15upx; + height: 15upx; + background: #ccc; + border-radius: 50%; + margin: 0 5upx +} + +.so-plate-keyboard { + background: #eee; + margin-left: -25upx; + margin-right: -25upx; + padding: 20upx 25upx 10upx 25upx; + box-sizing: border-box; + -webkit-transition: all .3s; + transition: all .3s +} + +.so-plate-keyboard>view { + display: -webkit-box; + display: flex; + flex-wrap: wrap; + -webkit-box-pack: justify; + justify-content: space-between +} + +.so-plate-key { + display: block; + background: #fff; + border-radius: 10upx; + box-shadow: 0 0 8upx 0 #bbb; + width: 80upx; + height: 80upx; + margin: 5upx 0; + font-size: 32upx; + text-align: center; + display: -webkit-box; + display: flex; + -webkit-box-align: center; + align-items: center; + -webkit-box-pack: center; + justify-content: center; + position: relative +} + +.so-plate-key.hover { + background: #efefef +} + +.so-plate-key.fill-block { + width: 80upx; + height: 80upx; + background: none; + box-shadow: none +} + +.so-plate-btn { + display: inline-block; + background: #fff; + border-radius: 10upx; + box-shadow: 0 0 10upx 0 #bbb; + font-size: 28upx; + text-align: center; + margin: 0 0 0 10upx +} + +.so-plate-btn-group { + display: -webkit-box; + display: flex; + -webkit-box-pack: justify; + justify-content: space-between; + background: #eee; + margin-left: -25upx; + margin-right: -25upx; + box-sizing: border-box; + padding: 0 25upx 10upx 25upx +} + +.so-plate-btn--cancel { + margin: 0 +} + +.so-plate-btn--submit { + background: #5773f9; + color: #fff +} + +.so-plate-btn--delete { + color: #fd6b6d +} + +.animation-scale-up { + -webkit-animation-duration: .2s; + animation-duration: .2s; + -webkit-animation-timing-function: ease-out; + animation-timing-function: ease-out; + -webkit-animation-fill-mode: both; + animation-fill-mode: both; + -webkit-animation-name: scale-up; + animation-name: scale-up +} + +@-webkit-keyframes scale-up { + 0% { + opacity: .8; + -webkit-transform: scale(.8); + transform: scale(.8) + } + + 100% { + opacity: 1; + -webkit-transform: scale(1); + transform: scale(1) + } +} + +@keyframes scale-up { + 0% { + opacity: .8; + -webkit-transform: scale(.8); + transform: scale(.8) + } + + 100% { + opacity: 1; + -webkit-transform: scale(1); + transform: scale(1) + } +} diff --git a/components/uni-plate-input/uni-plate-input.less b/components/uni-plate-input/uni-plate-input.less new file mode 100644 index 0000000..b3594d3 --- /dev/null +++ b/components/uni-plate-input/uni-plate-input.less @@ -0,0 +1,154 @@ +.so-mask { + position: fixed; + top: 0; + bottom: 0; + right: 0; + left: 0; + background: rgba(0, 0, 0, 0.5); + z-index: 998; +} +.so-plate { + box-sizing: border-box; + position: absolute; + bottom: 0; + width: 100%; + left: 0; + background: #fff; + padding: 25upx 25upx 0 25upx; + &-head { + display: flex; + justify-content: space-between; + align-items: center; + } + &-type { + flex:1; + display:block; + label { + display: inline-block; + min-height: 32upx; + font-size: 26upx; + margin-right: 10upx; + } + } + &-body { + box-sizing: border-box; + padding: 30upx 0; + display: flex; + justify-content: space-between; + align-items: center; + } + &-word { + border: 1upx solid #ccc; + border-radius: 10upx; + height: 0; + margin: 0 5upx; + box-sizing: border-box; + padding-bottom: calc((100% - 70upx) / 7); + width: calc((100% - 70upx) / 7); + position: relative; + &.active { + border-color: #007aff; + box-shadow: 0 0 15upx 0 #007aff; + } + text { + position: absolute; + top: 50%; + left: 50%; + transform: translateX(-50%) translateY(-50%); + font-weight: 700; + font-size: 32upx; + } + } + &-dot { + width: 15upx; + height: 15upx; + background: #ccc; + border-radius: 50%; + margin: 0 5upx; + } + &-keyboard { + background: #eee; + margin-left: -25upx; + margin-right: -25upx; + padding: 20upx 25upx 10upx 25upx; + box-sizing: border-box; + transition: all .3s; + &>view{ + display: flex; + flex-wrap: wrap; + justify-content: space-between; + } + } + &-key { + display: block; + background: #fff; + border-radius: 10upx; + box-shadow: 0 0 8upx 0 #bbb; + width: 80upx; + height: 80upx; + margin: 5upx 0; + font-size: 32upx; + text-align: center; + display: flex; + align-items: center; + justify-content: center; + position: relative; + &.hover { + background: #efefef; + } + &.fill-block { + width: 80upx; + height: 80upx; + background: none; + box-shadow: none; + } + } + &-btn { + display: inline-block; + background: #fff; + border-radius: 10upx; + box-shadow: 0 0 10upx 0 #bbb; + font-size: 28upx; + text-align: center; + margin:0 0 0 10upx; + padding:0 25upx; + &-group{ + display: flex; + justify-content: space-between; + background: #eee; + margin-left: -25upx; + margin-right: -25upx; + box-sizing: border-box; + padding: 0 25upx 10upx 25upx; + } + &--cancel{ + margin:0; + } + &--submit{ + background:#5773f9; + color:#fff; + } + &--delete{ + color:#fd6b6d; + } + } +} + + +.animation-scale-up { + animation-duration: .2s; + animation-timing-function: ease-out; + animation-fill-mode: both; + animation-name: scale-up +} +@keyframes scale-up { + 0% { + opacity: .8; + transform: scale(.8) + } + + 100% { + opacity: 1; + transform: scale(1) + } +} \ No newline at end of file diff --git a/components/uni-plate-input/uni-plate-input.vue b/components/uni-plate-input/uni-plate-input.vue new file mode 100644 index 0000000..029a9d8 --- /dev/null +++ b/components/uni-plate-input/uni-plate-input.vue @@ -0,0 +1,265 @@ +/** +* @author minisola +* @version 20190814 +*/ + + + diff --git a/config/index.js b/config/index.js new file mode 100644 index 0000000..d2c90c8 --- /dev/null +++ b/config/index.js @@ -0,0 +1,22 @@ +export default { + + /** + * @description secret + */ + // secret:'0941059588804f6c34535827a4db8f3f', + /** + * @description appid + */ + // appid:'wx6f99275e17e83d6b', + /** + * @description token在Cookie中存储的天数,默认1天 + */ + cookieExpires: 1, + /** + * @description api请求基础路径 + */ + // local: "http://192.168.0.103:8891", + local: "http://61.184.202.72:8891", + imgSrc: "http://116.205.142.169/HtRtosResource/assets/", + mapkey: "FUFBZ-KBIWW-P63RR-RR4W3-BNV4H-T6BGX" +} 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..0cec6c1 --- /dev/null +++ b/main.js @@ -0,0 +1,27 @@ +import App from './App' +import store from './store' +import config from '@/config'; +const { local, mapkey, imgSrc} = config; +Vue.prototype.$local = local; +Vue.prototype.$imgSrc = imgSrc; +// 配置公共方法 +import util from './common/util.js'; +Vue.prototype.$util = util; + +import Vue from 'vue' +Vue.config.productionTip = false +App.mpType = 'app' + +import uniPop from './uni_modules/uni-popup/components/uni-popup/uni-popup' +import liuStepBar from './uni_modules/liu-step-bar/components/liu-step-bar/liu-step-bar' + +Vue.component('uni-pop', uniPop) +Vue.component('liu-step-bar', liuStepBar) + + +const app = new Vue({ + store, + ...App +}) +app.$mount() + diff --git a/manifest.json b/manifest.json new file mode 100644 index 0000000..311f8bc --- /dev/null +++ b/manifest.json @@ -0,0 +1,88 @@ +{ + "name": "gang", + "appid": "__UNI__820CEDC", + "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": "wxb5fe43c6c0f0a8da", + "setting": { + "urlCheck": false, + "es6": true, + "ignoreDevUnusedFiles": false + }, + "usingComponents": true, + "permission": { + "scope.userLocation": { + "desc": "获取当前定位判断距离" + } + }, + "requiredPrivateInfos": [ + "getLocation" + ], + "plugins": { + "ocr-plugin": { + "version": "3.1.1", + "provider": "wx4418e3e031e551be" + } + } + }, + "mp-alipay": { + "usingComponents": true + }, + "mp-baidu": { + "usingComponents": true + }, + "mp-toutiao": { + "usingComponents": true + }, + "uniStatistics": { + "enable": false + }, + "vueVersion": "2" +} diff --git a/pages.json b/pages.json new file mode 100644 index 0000000..1356288 --- /dev/null +++ b/pages.json @@ -0,0 +1,32 @@ +{ + "pages": [ //pages数组中第一项表示应用启动页,参考:https://uniapp.dcloud.io/collocation/pages + { + "path": "pages/index/index", + "style": { + "navigationBarTitleText": "首页" + } + } + ], + "tabBar": { + "color": "#9A9A9A", + "selectedColor": "#000000", + "list": [] + }, + "globalStyle": { + "backgroundTextStyle": "light", + "navigationBarBackgroundColor": "#0052A4", + "navigationBarTitleText": "港口Ipad", + "navigationBarTextStyle": "white" + + + }, + "uniIdRouter": {}, + "condition": { //模式配置,仅开发期间生效 + "current": 0, //当前激活的模式(list 的索引项) + "list": [{ + "name": "", //模式名称 + "path": "", //启动页面,必选 + "query": "" //启动参数,在页面的onLoad函数里面得到 + }] + } +} diff --git a/pages/index/index.vue b/pages/index/index.vue new file mode 100644 index 0000000..b809eeb --- /dev/null +++ b/pages/index/index.vue @@ -0,0 +1,85 @@ + + + + + diff --git a/static/images/discern/error1.png b/static/images/discern/error1.png new file mode 100644 index 0000000000000000000000000000000000000000..0869cb3b9b85e9dc051a12cbf7c86d8f1fec19c4 GIT binary patch literal 4250 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 literal 0 HcmV?d00001 diff --git a/static/images/discern/ex2.png b/static/images/discern/ex2.png new file mode 100644 index 0000000000000000000000000000000000000000..909a5d80d462b210efb71b332d9a28774ead193a GIT binary patch literal 2473 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 literal 0 HcmV?d00001 diff --git a/static/images/discern/no.png b/static/images/discern/no.png new file mode 100644 index 0000000000000000000000000000000000000000..9ffabf281420becc6e850b07146994ff3ef6a376 GIT binary patch literal 1178 zcmV;L1ZDe)P)5Df{@QE(z6 zh=MM}g)0N1WFOV!P}XR4~Z@7(#J=)V0p_v=%q zPIaA5PTskRE+{E5kO0!TFjyhw`cf@->v#bu1TxYDfv!W1HLG0Nf6& z16Bfq_TKZrpTH5|E8tsT7HHU(iLHe8!iLh5_M!u;+5JA?5nu~28tE0Ozk&CG_keQ( zSc2!u!!4yAgFZ;puCSoD0*8RtDnJ^o0A2*X2ksU2WDoh`yeSPDf~?v0EN}o=RRK_I z1o!~h2P}%fwgJatG!@-lvxc9T2cVX*bv5uLaM7O21NpYiqrTDYo^)%MA)Ouo_IkWJ zCk%XDFCmSATY#Ml0O|A?a9<1(mHTv3H#aT@_6G)CH}xto9Ej6|0*{*Z5OAFjsCUCU z2DUy$x@>77Z*BBi2A_Mnxeds~>Sm8u=Xg{?N{?;{S?+)MLHah0F}#1AbosI{te*eyBl77wJu5~So_NIz+k|}mWzwNRvVZ^M z!pEP)K$in|6m`8mk=UDpnwk8Wv%B^LVKwCGZ98b3I2ki(bX#CBB{~))=$ay{^`9oa zuwKYx$BWEi|I_>0Xy$r%Le4;IBwef-J zH1QIX$L9K>vew%?J915@kVZ=aJkk7EXVj?OZsGDo2${K0K zRJZ+%*UGQinNY~xZY>#Gx0v!##n53R%tZRoWL)w@OWrGqr9C~?9 z#R1*E=mgTq3%m5HBGj)vZ~BBry<5Zl3j7wbxa9Fi3rDwxHPdcH{{UYq&=zpd^Q*2$ zC4D(Fm|=Uj&vrgDOVX1vH9iqdL1s3ZIr2;Mp)P)Uu=!vCy$O6Ha;IGMwH9}BMv{rY z->x8Uh`FK*GIQ%j;Iv5ene=WbM%_gwF>bR@xR81QIO|!Bwz@tRqYe9H-`VxjLg`)L zGu7SR^wbJFk4GKsTfo~30D8bKp><(m4s2{@(y%XC&+2+nr+UXO80%^Pd8cj-Diduc zo^sZpn8q-m2}z^ zt34r7R;)<2-mV7L+7i!zz2}1U{G^?6ekdrC1?x^kDkZwArn@AwpbZP~qo?es!zk2r zS63=K`fl)n>Z)_6h1@7)5oicF6Wdh$4uNW5UwOPMrEzUYhJ`yGEEjrU^|4Z_`c)+K sRin%&oJt=Tv^xFHRP~Q4gS82`1nj5^Qa$_rzyJUM07*qoM6N<$g6BaqBme*a literal 0 HcmV?d00001 diff --git a/static/images/discern/ok.png b/static/images/discern/ok.png new file mode 100644 index 0000000000000000000000000000000000000000..595b04493931a389ee00aed5bc4b6f509b6e64f5 GIT binary patch literal 1322 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 T7R>9T00000NkvXXu0mjf6K~?| literal 0 HcmV?d00001 diff --git a/static/images/theme/icon_home_a.png b/static/images/theme/icon_home_a.png new file mode 100644 index 0000000000000000000000000000000000000000..7838019fd10d27a0d4b03d3b1d080f90dafe820f GIT binary patch literal 1061 zcmV+=1ls$FP)Px#L}ge>W=%~1DgXcg2mk?xX#fNO00031000^Q000001E2u_0{{R30RRC20H6W@ z1ONa40RR91E}#Pd1ONa40RR91E&u=k08)}91ONa7k4Z#9RA>e5na@uXK@`Wovn?PX zMkF4LG0~gC#l-mgCu-1`7^S;KppBXsO-%65@a9oS)R+)uw@80zAPN#AB*qxeMmTu& zpcwoWq6FHGZ%azsZKvHWyG?7l2X^MooA3MV+nMRi0yuHq7;C`gNQ)EFNlhtPuc#x8IV}AB21UCA&Y5l6X+rjjDyok_AAuv45XSlu_VuO3w58~>MMW2pwI2GbLmM^s zp;d0iY-GZ=SR`Z&Qk=G|bpc$ZY>V^`piODQOn9=m0NK4nfwDbC7H>d7oNEN`7P%zs zoFAgh*Hh+S<@Gb!xHfQapcAq9lY-DGm?LPD-I$3?rA)<@iU(KJ3*hk)3R`0-G{-T5 zX9PcOsh`2QIB;1zPdY)Gh_wbib5)KLXjP(^4ZkthA=}G3xU8NdnFvk9;-FU<_({tA zB4z&Vs>wpZ8n{Z3{!7Dq0m^i_Ktz_J*?m>*}+s%!J z_VTDQEJJcB2=!Lc8Sg+rpB+1sFZP!ZrvdVt5CIh}Q7a&`x{(QDY60UwRsrMIys z!&b_Q$@msY8@AOl&L-c zCj}GGpYL~~uEzX%Waq6>%r7jNP|okNX7DYW>S=z9N1QQyL!H|e@QNKORdC~waJpX2 zxYHRn>Q^&v%!t$VYQ~+;uu;F7abrfDuK$-APi^9zPM=X<|DMvg`H#_@UKeMaxd!Nb zw3zN(vNGob7;MiQTfD6ebx*=OvV%T+w$YJP_<++Nzjo4o-1I-Nmf?=TB}K(ah<`!Q f|3Tbd;Vu6F_gV4G%bGyP00000NkvXXu0mjfaBt)a literal 0 HcmV?d00001 diff --git a/static/images/theme/icon_mine.png b/static/images/theme/icon_mine.png new file mode 100644 index 0000000000000000000000000000000000000000..e12c5e52456f2546586c7ad78ca8205f00235230 GIT binary patch literal 2643 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 C=3EN^ literal 0 HcmV?d00001 diff --git a/static/images/theme/mine.png b/static/images/theme/mine.png new file mode 100644 index 0000000000000000000000000000000000000000..62b208fe3a3e8e3b181c6cef8ffd022c2268d7eb GIT binary patch literal 1891 zcmV-p2b}ncP)Px#L}ge>W=%~1DgXcg2mk?xX#fNO00031000^Q000001E2u_0{{R30RRC20H6W@ z1ONa40RR91E}#Pd1ONa40RR91E&u=k08)}91ONaA%}GQ-RA>d|nQLrRMHI)`-O@^F z0fUupgBnzf8iP@q8lRN5C>Z&orfRgtq)A`2rXsD<7%1Qan@Z7AN->i70Aq>h7o|ov zHb4SOYkYqY6@jEwg_^d|_ru>=?yS@8?!9++Z~fv;X6MYAIsf_JbI&~2HEjx>f`WqS z@$vEVhlht}xm+%{$K&ZrNl7_fU0prqRCg|?fJ#eC7Yq#z<%5?)x|K9t$L0n4DStz1 zal75`H8wW>rq@R*$4tDiurPgme0(Fs?jv{GAwXO4{HLVnnwpw^vSSn6CTik*c6Ucd z$MXPIlO}lA=;Q(f|1xARFO^`(dNxd(Encs89e6`}g_Rr?aboyNfOnJb3hLks%6kcg z{X2H-_+8aO+C?ZW92ptOLRUcf7F8!XM!4Cqw~ zn2rxYref#LonI=QSzcURykcx@Y$G=5TD$L%v%xs4>B5Q;5y#VsAhnTh&=5Bfr|Tg< zuIVgALL=_XnKQ3Kezj^0Mr(FhBh2k{YJ z_*ukfq%03Fk?HgKHeD>4|9Z@;|EVcPaML^o(ahZ%fzS~(_>S)~equMLoR;{O#ZKwHEaOpE!9cN<{iyhLF% z;Sr9EgbjF=TK&U(VXs!6B-$cAIy(A*vZRC0h>)lj4TTXZ2h)fCnAG7U;q{2f;T~JW zA-h}wAiu3-r*p91RhY;DXDOYYTN1CVtW3rrLm9D998|K?Ii7A+n8=Hj94faY-rL)| z!1#1xe|FopZ5^S2oY3XuNk8t|o>JVCT1 z&b}kCA`*8a6RfA8Kp$}mmPz3fB?sr0#0e99A($5o;AEM7Py+qUQkX$~E44qjB%YL% zbOJBlPF@QXPzHSB@XI=zj>pjHrkMp2pxsWd!NX zY?(h)<#4%ej|%`^uYz!!A-gH>=6YgnIB+vPgr}2gX%h%Lun!W3)n<08E}}E17_oo2 zf_Q9!^o;=!4$F9|luI5t@LE2+tW0}vfDt$>L;73FONi}mO8^=~Ok67la-aV&d$kRw~xx>IzUlT(M^z&Yli!Ey_pPI*+RU} zWoY&G?c0AbYa6aEX5tE%fp$HF9-}O$rJH$?30H2^oku5^p0Xb7HP!~i=pM(2>)jJZ zafDGCWRn=Q0}SSV&Xk>$16yRheKfM;#AV_i#kd<54r$Aj064|~| zt|UH4NJx06zP?^vOIun;M4SQW#akN;!lCZOr9+A1KWQf~h(YU}LTvzu#bYI*||5eUXz z`xBVtldjcG!T*XooIEc3f7bO%HYLuUVi|;G3BODkke?)#^Ep4(bTNrCeRg(s<}>rG z2gs|yAb+0pB-@9NluqSgi4z_b7;V-*rT_mL${QiwrvRMH*Q{AHv!|!$WiZP~ikpm? zGWu-L`%;yZhF^NpEE10$9O9w8ai2K$0)%GOf#{ZRa zRP)#2^`pGRN;@MxCbmJwIBy{;**;$_Rqz;L;Ll^=cS(8Du8s!h(fdOI*_WK0obz9k z7Gi7>j?=#^YR9F_3!LWqLUx?~XOhQ7D{o7~>(bKF_M1&f7a^wh*O)@H;M0l&Z5=YE dmeKze{T~9_tgCJB-7^3H002ovPDHLkV1lv_cwztm literal 0 HcmV?d00001 diff --git a/static/images/theme/mine_a.png b/static/images/theme/mine_a.png new file mode 100644 index 0000000000000000000000000000000000000000..34a7bc25c5da2da3773c99ea9b468a0a7394ae61 GIT binary patch literal 1548 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 literal 0 HcmV?d00001 diff --git a/static/images/theme/toux.png b/static/images/theme/toux.png new file mode 100644 index 0000000000000000000000000000000000000000..f2b305430573c48313f75c44e9816f85f5bc9b63 GIT binary patch literal 5184 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 V#+oYUd8_~c002ovPDHLkV1nzjtL*>) literal 0 HcmV?d00001 diff --git a/static/images/theme/xiaoxi_a.png b/static/images/theme/xiaoxi_a.png new file mode 100644 index 0000000000000000000000000000000000000000..f93913b6e4e67ad50725ad2d236b13e682f9de2f GIT binary patch literal 1364 zcmV-a1*`grP)Px#L}ge>W=%~1DgXcg2mk?xX#fNO00031000^Q000001E2u_0{{R30RRC20H6W@ z1ONa40RR91E}#Pd1ONa40RR91E&u=k08)}91ONa8zDYzuRA>e5nO$rYRTRhnceWo$ z(Y6x7U9I{6Hc&0q7t#12jYVsX1hy;fb|vaVeQl!g#X=fwFuoWKF~%3vgl?CXMHFdb zRfs+qKjK$|pTv&{B8gZ5DIe|5T+iLv%iPZH?9499?wEL!-Fxmi=id9fXFl%C8HQ4n z4I|e>W9< z&GR^n{YeYl3ut=~YM8{f`_6mrt2h=89*(zy8_&@g_bTHQCo=p7#x~=o=#D~UcR@W@ho1Mg0(g^}7xy&JMdD6QfJ1ZtkZ_=CFJ zuxFtOGFS_Tk|-TmzIp;^C23=)&uFTYbsx3_qYc(1AqnVW+X3BOZ=# zsR*@%zi(cGfkDq*>$T?yFai`o#Rw7UZz7;XLqb%dk`BFH`?c)4;~p6JK-I6r^>c@6;k?EJA(y2bf5}` z{;b`>7j4eN6!q0Aiv>P)RP2b&s?k?+N`FS>vA`L6RD=Iy-j2xFRg%jD@0+-S6lp6@O&Sd!?%@SD0oiBPNOCAy#)>?-gx|9 zI6jw&BlA?LubZTEefB>lXsq z<&xE$2Po-3Aji)iap@Hq?V>MiVuSLYkC1&!S&N6P%NI7`we=_RM_f)i-n);sTahu{ zR?+Blz6hsg`URG^h|2|tT72I$v#0maTT^y^UG=>*@)7zvcU|G&5+;@m;>_779f3`> z0QwkErXn7;7F^j_Jh;jk8KWdkY9$Q5g4E*IOn0Nwe;i;uMPtX2jJ>2z|G!+02>c6F WfIeh0;_1Es0000 { + try { + uni.request({ + url: url, + method: method, + data: params, + header: { + // 'token': uni.getStorageSync('token'), + } + }).then(data => { //data为一个数组,数组第一项为错误信息,第二项为返回数据 + let [error, res] = data; + if (res) { + // let jsRes = JSON.parse(res.data.replace(/'/g,"\"")) + let jsRes = res.data + resolve(jsRes); + } else { + resolve({ + "msg": "请求失败!" + }); + } + }) + } catch (error) { + reject(error) + } + }) + }, + najax(state, { + url, + params, + method + }) { + if (uni.getStorageSync('networkType') == 'none') { + uni.showToast({ + title: '检查网络是否连接', + icon: "none" + }); + return false; + } + //返回异步加载结果 + return new Promise((resolve, reject) => { + try { + uni.request({ + url: url, + method: method, + data: params, + header: { + // 'token': uni.getStorageSync('token'), + 'content-type': 'application/x-www-form-urlencoded', + // 'content-type': 'multipart/form-data' + // 'content-type': 'application/json' + } + }).then(data => { //data为一个数组,数组第一项为错误信息,第二项为返回数据 + let [error, res] = data; + if (res) { + // let jsRes = JSON.parse(res.data.replace(/'/g,"\"")) + let jsRes = res.data + resolve(jsRes); + } else { + resolve({ + "msg": "请求失败!" + }); + } + }) + } catch (error) { + reject(error) + } + }) + } + } +}) + +export default store diff --git a/style/css/flex-main.css b/style/css/flex-main.css new file mode 100644 index 0000000..0d6aae6 --- /dev/null +++ b/style/css/flex-main.css @@ -0,0 +1,106 @@ +/*单行文本溢出省略号*/ +.one-t { + overflow: hidden; + white-space: nowrap; + text-overflow: ellipsis; + transition: all linear 0.2s; +} +/*多行文本溢出省略号*/ +.more-t { + overflow: hidden; + text-overflow: ellipsis; + display: -webkit-box; + -webkit-line-clamp: 2; + -webkit-box-orient: vertical; + transition: all linear 0.2s; +} + + +/* ================== + flex布局(colorui里面也有相关基础样式) + ==================== */ + /* 多行排列 */ + .x-more{ + display: flex; + flex-direction: row; + flex-wrap: wrap; + text-align: center; + } +/* x水平排列*/ + +.x-f { + display: flex; + align-items: center; +} +/*x两端且水平居中*/ +.x-bc { + display: flex; + justify-content: space-between; + align-items: center; +} +/*x平分且水平居中*/ +.x-ac { + display: flex; + justify-content: space-around; + align-items: center; +} + +.x-sc { + display: flex; + justify-content: space-evenly; + align-items: center; +} + +/*x水平靠上对齐*/ +.x-start { + display: flex; + align-items: flex-start; +} +/*x水平靠下对齐*/ +.x-end { + display: flex; + align-items: flex-end; + text-align: end; +} +/*上下左右居中*/ +.x-c { + display: flex; + justify-content: center; + align-items: center; +} +/*y竖直靠左*/ +.y-start { + display: flex; + flex-direction: column; + align-items: flex-start; +} +/*y竖直靠右*/ +.y-end { + display: flex; + flex-direction: column; + align-items: flex-end; +} +/*y竖直居中*/ +.y-f { + display: flex; + flex-direction: column; + align-items: center; +} + /* y竖直两端 */ +.y-b { + display: flex; + flex-direction: column; + justify-content: space-between; +} +/*y竖直两端居中*/ +.y-bc { + display: flex; + flex-direction: column; + align-items: center; + justify-content: space-between; +} +.y-sc{ + display: flex; + flex-direction: column; + justify-content: space-evenly; +} diff --git a/style/css/layout.css b/style/css/layout.css new file mode 100644 index 0000000..553d603 --- /dev/null +++ b/style/css/layout.css @@ -0,0 +1,63 @@ +.container { + min-height: 100vh; + background-color: #f5f6fa; +} +.zhanwei { + height: 100rpx; +} +.center { + text-align: center; +} +.red { + color: #e54d42; +} +.green { + color: #05b578; +} +.hui { + color: #999999; +} +.blue { + color: #1073d7; +} +.head { + background-color: #fff; + height: 120rpx; + display: flex; + justify-content: space-between; + padding: 20rpx; +} + +.head .info { + display: flex; + justify-content: start; +} + +.head .info .toux { + width: 80rpx; + height: 80rpx; + border-radius: 120rpx; + background-color: #cccccc; + margin-right: 20rpx; +} + +.head .info .name { + color: #333; + font-size: 30rpx; + line-height: 40rpx; +} + +.head .info .che { + color: #ccc; + font-size: 25rpx; + line-height: 50rpx; +} + +.head .rqi { + color: #ccc; + height: 80rpx; + line-height: 80rpx; + font-size: 25rpx; +} + + diff --git a/style/css/main.css b/style/css/main.css new file mode 100644 index 0000000..124692c --- /dev/null +++ b/style/css/main.css @@ -0,0 +1,2989 @@ +/* + ColorUi for uniApp v2.1.6 | by 文晓港 2019-05-31 10:44:24 + 仅供学习交流,如作它用所承受的法律责任一概与作者无关 + + *使用ColorUi开发扩展与插件时,请注明基于ColorUi开发 + + (QQ交流群:240787041) +*/ + +/* ================== + 初始化 + ==================== */ +body { + background-color: #f1f1f1; + font-size: 28rpx; + color: #333333; + font-family: Helvetica Neue, Helvetica, sans-serif; +} + +view, +scroll-view, +swiper, +button, +input, +textarea, +label, +navigator, +image { + box-sizing: border-box; +} + +.round { + border-radius: 5000rpx; +} + +.radius { + border-radius: 6rpx; +} + +.page { + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; +} + + +/* ================== + 图片 + ==================== */ + +image { + max-width: 100%; + display: inline-block; + position: relative; + z-index: 0; +} + +image.loading::before { + content: ""; + background-color: #f5f5f5; + display: block; + position: absolute; + width: 100%; + height: 100%; + z-index: -2; +} + +image.loading::after { + content: "\e7f1"; + font-family: "cuIcon"; + position: absolute; + top: 0; + left: 0; + width: 32rpx; + height: 32rpx; + line-height: 32rpx; + right: 0; + bottom: 0; + z-index: -1; + font-size: 32rpx; + margin: auto; + color: #ccc; + -webkit-animation: cuIcon-spin 2s infinite linear; + animation: cuIcon-spin 2s infinite linear; + display: block; +} + +.response { + width: 100%; +} + +/* ================== + 边框 + ==================== */ + +/* -- 实线 -- */ + +.solid, +.solid-top, +.solid-right, +.solid-bottom, +.solid-left, +.solids, +.solids-top, +.solids-right, +.solids-bottom, +.solids-left, +.dashed, +.dashed-top, +.dashed-right, +.dashed-bottom, +.dashed-left { + position: relative; +} + +.solid::after, +.solid-top::after, +.solid-right::after, +.solid-bottom::after, +.solid-left::after, +.solids::after, +.solids-top::after, +.solids-right::after, +.solids-bottom::after, +.solids-left::after, +.dashed::after, +.dashed-top::after, +.dashed-right::after, +.dashed-bottom::after, +.dashed-left::after { + content: " "; + width: 200%; + height: 200%; + position: absolute; + top: 0; + left: 0; + border-radius: inherit; + transform: scale(0.5); + transform-origin: 0 0; + pointer-events: none; + box-sizing: border-box; +} + +.solid::after { + border: 1rpx solid rgba(0, 0, 0, 0.1); +} + +.solid-top::after { + border-top: 1rpx solid rgba(0, 0, 0, 0.1); +} + +.solid-right::after { + border-right: 1rpx solid rgba(0, 0, 0, 0.1); +} + +.solid-bottom::after { + border-bottom: 1rpx solid rgba(0, 0, 0, 0.1); +} + +.solid-left::after { + border-left: 1rpx solid rgba(0, 0, 0, 0.1); +} + +.solids::after { + border: 8rpx solid #eee; +} + +.solids-top::after { + border-top: 8rpx solid #eee; +} + +.solids-right::after { + border-right: 8rpx solid #eee; +} + +.solids-bottom::after { + border-bottom: 8rpx solid #eee; +} + +.solids-left::after { + border-left: 8rpx solid #eee; +} + +/* -- 虚线 -- */ + +.dashed::after { + border: 1rpx dashed #ddd; +} + +.dashed-top::after { + border-top: 1rpx dashed #ddd; +} + +.dashed-right::after { + border-right: 1rpx dashed #ddd; +} + +.dashed-bottom::after { + border-bottom: 1rpx dashed #ddd; +} + +.dashed-left::after { + border-left: 1rpx dashed #ddd; +} + +/* -- 阴影 -- */ + +.shadow[class*='white'] { + --ShadowSize: 0 1rpx 6rpx; +} + +.shadow-lg { + --ShadowSize: 0rpx 40rpx 100rpx 0rpx; +} + +.shadow-warp { + position: relative; + box-shadow: 0 0 10rpx rgba(0, 0, 0, 0.1); +} + +.shadow-warp:before, +.shadow-warp:after { + position: absolute; + content: ""; + top: 20rpx; + bottom: 30rpx; + left: 20rpx; + width: 50%; + box-shadow: 0 30rpx 20rpx rgba(0, 0, 0, 0.2); + transform: rotate(-3deg); + z-index: -1; +} + +.shadow-warp:after { + right: 20rpx; + left: auto; + transform: rotate(3deg); +} + +.shadow-blur { + position: relative; +} + +.shadow-blur::before { + content: ""; + display: block; + background: inherit; + filter: blur(10rpx); + position: absolute; + width: 100%; + height: 100%; + top: 10rpx; + left: 10rpx; + z-index: -1; + opacity: 0.4; + transform-origin: 0 0; + border-radius: inherit; + transform: scale(1, 1); +} + +/* ================== + 按钮 + ==================== */ + +.cu-btn { + position: relative; + border: 0rpx; + display: inline-flex; + align-items: center; + justify-content: center; + box-sizing: border-box; + padding: 0 30rpx; + font-size: 28rpx; + height: 64rpx; + line-height: 1; + text-align: center; + text-decoration: none; + overflow: visible; + margin-left: initial; + transform: translate(0rpx, 0rpx); + margin-right: initial; +} + +.cu-btn::after { + display: none; +} + +.cu-btn:not([class*="bg-"]) { + background-color: #f0f0f0; +} + +.cu-btn[class*="line"] { + background-color: transparent; +} + +.cu-btn[class*="line"]::after { + content: " "; + display: block; + width: 200%; + height: 200%; + position: absolute; + top: 0; + left: 0; + border: 1rpx solid currentColor; + transform: scale(0.5); + transform-origin: 0 0; + box-sizing: border-box; + border-radius: 12rpx; + z-index: 1; + pointer-events: none; +} + +.cu-btn.round[class*="line"]::after { + border-radius: 1000rpx; +} + +.cu-btn[class*="lines"]::after { + border: 6rpx solid currentColor; +} + +.cu-btn[class*="bg-"]::after { + display: none; +} + +.cu-btn.sm { + padding: 0 20rpx; + font-size: 20rpx; + height: 48rpx; +} + +.cu-btn.lg { + padding: 0 40rpx; + font-size: 32rpx; + height: 80rpx; +} + +.cu-btn.cuIcon.sm { + width: 48rpx; + height: 48rpx; +} + +.cu-btn.cuIcon { + width: 64rpx; + height: 64rpx; + border-radius: 500rpx; + padding: 0; +} + +button.cuIcon.lg { + width: 80rpx; + height: 80rpx; +} + +.cu-btn.shadow-blur::before { + top: 4rpx; + left: 4rpx; + filter: blur(6rpx); + opacity: 0.6; +} + +.cu-btn.button-hover { + transform: translate(1rpx, 1rpx); +} + +.block { + display: block; +} + +.cu-btn.block { + display: flex; +} + +.cu-btn[disabled] { + opacity: 0.6; + color: #ffffff; +} + +/* ================== + 徽章 + ==================== */ + +.cu-tag { + font-size: 24rpx; + vertical-align: middle; + position: relative; + display: inline-flex; + align-items: center; + justify-content: center; + box-sizing: border-box; + padding: 0rpx 16rpx; + height: 48rpx; + font-family: Helvetica Neue, Helvetica, sans-serif; + white-space: nowrap; +} + +.cu-tag:not([class*="bg"]):not([class*="line"]) { + background-color: #f1f1f1; +} + +.cu-tag[class*="line-"]::after { + content: " "; + width: 200%; + height: 200%; + position: absolute; + top: 0; + left: 0; + border: 1rpx solid currentColor; + transform: scale(0.5); + transform-origin: 0 0; + box-sizing: border-box; + border-radius: inherit; + z-index: 1; + pointer-events: none; +} + +.cu-tag.radius[class*="line"]::after { + border-radius: 12rpx; +} + +.cu-tag.round[class*="line"]::after { + border-radius: 1000rpx; +} + +.cu-tag[class*="line-"]::after { + border-radius: 0; +} + +.cu-tag+.cu-tag { + margin-left: 10rpx; +} + +.cu-tag.sm { + font-size: 20rpx; + padding: 0rpx 12rpx; + height: 32rpx; +} + +.cu-capsule { + display: inline-flex; + vertical-align: middle; +} + +.cu-capsule+.cu-capsule { + margin-left: 10rpx; +} + +.cu-capsule .cu-tag { + margin: 0; +} + +.cu-capsule .cu-tag[class*="line-"]:last-child::after { + border-left: 0rpx solid transparent; +} + +.cu-capsule .cu-tag[class*="line-"]:first-child::after { + border-right: 0rpx solid transparent; +} + +.cu-capsule.radius .cu-tag:first-child { + border-top-left-radius: 6rpx; + border-bottom-left-radius: 6rpx; +} + +.cu-capsule.radius .cu-tag:last-child::after, +.cu-capsule.radius .cu-tag[class*="line-"] { + border-top-right-radius: 12rpx; + border-bottom-right-radius: 12rpx; +} + +.cu-capsule.round .cu-tag:first-child { + border-top-left-radius: 200rpx; + border-bottom-left-radius: 200rpx; + text-indent: 4rpx; +} + +.cu-capsule.round .cu-tag:last-child::after, +.cu-capsule.round .cu-tag:last-child { + border-top-right-radius: 200rpx; + border-bottom-right-radius: 200rpx; + text-indent: -4rpx; +} + +.cu-tag.badge { + border-radius: 200rpx; + position: absolute; + top: -10rpx; + right: -10rpx; + font-size: 20rpx; + padding: 0rpx 10rpx; + height: 28rpx; + color: #ffffff; +} + +.cu-tag.badge:not([class*="bg-"]) { + background-color: #dd514c; +} + +.cu-tag:empty:not([class*="cuIcon-"]) { + padding: 0rpx; + width: 16rpx; + height: 16rpx; + top: -4rpx; + right: -4rpx; +} + +.cu-tag[class*="cuIcon-"] { + width: 32rpx; + height: 32rpx; + top: -4rpx; + right: -4rpx; +} + +/* ================== + 头像 + ==================== */ + +.cu-avatar { + font-variant: small-caps; + margin: 0; + padding: 0; + display: inline-flex; + text-align: center; + justify-content: center; + align-items: center; + background-color: #ccc; + color: #ffffff; + white-space: nowrap; + position: relative; + width: 64rpx; + height: 64rpx; + background-size: cover; + background-position: center; + vertical-align: middle; + font-size: 1.5em; +} + +.cu-avatar.sm { + width: 48rpx; + height: 48rpx; + font-size: 1em; +} + +.cu-avatar.lg { + width: 96rpx; + height: 96rpx; + font-size: 2em; +} + +.cu-avatar.xl { + width: 128rpx; + height: 128rpx; + font-size: 2.5em; +} + +.cu-avatar .avatar-text { + font-size: 0.4em; +} + +.cu-avatar-group { + direction: rtl; + unicode-bidi: bidi-override; + padding: 0 10rpx 0 40rpx; + display: inline-block; +} + +.cu-avatar-group .cu-avatar { + margin-left: -30rpx; + border: 4rpx solid #f1f1f1; + vertical-align: middle; +} + +.cu-avatar-group .cu-avatar.sm { + margin-left: -20rpx; + border: 1rpx solid #f1f1f1; +} + +/* ================== + 进度条 + ==================== */ + +.cu-progress { + overflow: hidden; + height: 28rpx; + background-color: #ebeef5; + display: inline-flex; + align-items: center; + width: 100%; +} + +.cu-progress+view, +.cu-progress+text { + line-height: 1; +} + +.cu-progress.xs { + height: 10rpx; +} + +.cu-progress.sm { + height: 20rpx; +} + +.cu-progress view { + width: 0; + height: 100%; + align-items: center; + display: flex; + justify-items: flex-end; + justify-content: space-around; + font-size: 20rpx; + color: #ffffff; + transition: width 0.6s ease; +} + +.cu-progress text { + align-items: center; + display: flex; + font-size: 20rpx; + color: #333333; + text-indent: 10rpx; +} + +.cu-progress.text-progress { + padding-right: 60rpx; +} + +.cu-progress.striped view { + background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-size: 72rpx 72rpx; +} + +.cu-progress.active view { + animation: progress-stripes 2s linear infinite; +} + +@keyframes progress-stripes { + from { + background-position: 72rpx 0; + } + + to { + background-position: 0 0; + } +} + +/* ================== + 加载 + ==================== */ + +.cu-load { + display: block; + line-height: 3em; + text-align: center; +} + +.cu-load::before { + font-family: "cuIcon"; + display: inline-block; + margin-right: 6rpx; +} + +.cu-load.loading::before { + content: "\e67a"; + animation: cuIcon-spin 2s infinite linear; +} + +.cu-load.loading::after { + content: "加载中..."; +} + +.cu-load.over::before { + content: "\e64a"; +} + +.cu-load.over::after { + content: "没有更多了"; +} + +.cu-load.erro::before { + content: "\e658"; +} + +.cu-load.erro::after { + content: "加载失败"; +} + +.cu-load.load-cuIcon::before { + font-size: 32rpx; +} + +.cu-load.load-cuIcon::after { + display: none; +} + +.cu-load.load-cuIcon.over { + display: none; +} + +.cu-load.load-modal { + position: fixed; + top: 0; + right: 0; + bottom: 140rpx; + left: 0; + margin: auto; + width: 260rpx; + height: 260rpx; + background-color: #ffffff; + border-radius: 10rpx; + box-shadow: 0 0 0rpx 2000rpx rgba(0, 0, 0, 0.5); + display: flex; + align-items: center; + flex-direction: column; + justify-content: center; + font-size: 28rpx; + z-index: 9999; + line-height: 2.4em; +} + +.cu-load.load-modal [class*="cuIcon-"] { + font-size: 60rpx; +} + +.cu-load.load-modal image { + width: 70rpx; + height: 70rpx; +} + +.cu-load.load-modal::after { + content: ""; + position: absolute; + background-color: #ffffff; + border-radius: 50%; + width: 200rpx; + height: 200rpx; + font-size: 10px; + border-top: 6rpx solid rgba(0, 0, 0, 0.05); + border-right: 6rpx solid rgba(0, 0, 0, 0.05); + border-bottom: 6rpx solid rgba(0, 0, 0, 0.05); + border-left: 6rpx solid #f37b1d; + animation: cuIcon-spin 1s infinite linear; + z-index: -1; +} + +.load-progress { + pointer-events: none; + top: 0; + position: fixed; + width: 100%; + left: 0; + z-index: 2000; +} + +.load-progress.hide { + display: none; +} + +.load-progress .load-progress-bar { + position: relative; + width: 100%; + height: 4rpx; + overflow: hidden; + transition: all 200ms ease 0s; +} + +.load-progress .load-progress-spinner { + position: absolute; + top: 10rpx; + right: 10rpx; + z-index: 2000; + display: block; +} + +.load-progress .load-progress-spinner::after { + content: ""; + display: block; + width: 24rpx; + height: 24rpx; + -webkit-box-sizing: border-box; + box-sizing: border-box; + border: solid 4rpx transparent; + border-top-color: inherit; + border-left-color: inherit; + border-radius: 50%; + -webkit-animation: load-progress-spinner 0.4s linear infinite; + animation: load-progress-spinner 0.4s linear infinite; +} + +@-webkit-keyframes load-progress-spinner { + 0% { + -webkit-transform: rotate(0); + transform: rotate(0); + } + + 100% { + -webkit-transform: rotate(360deg); + transform: rotate(360deg); + } +} + +@keyframes load-progress-spinner { + 0% { + -webkit-transform: rotate(0); + transform: rotate(0); + } + + 100% { + -webkit-transform: rotate(360deg); + transform: rotate(360deg); + } +} + +/* ================== + 列表 + ==================== */ +.grayscale { + filter: grayscale(1); +} + +.cu-list+.cu-list { + margin-top: 30rpx +} + +.cu-list>.cu-item { + transition: all .6s ease-in-out 0s; + transform: translateX(0rpx) +} + +.cu-list>.cu-item.move-cur { + transform: translateX(-260rpx) +} + +.cu-list>.cu-item .move { + position: absolute; + right: 0; + display: flex; + width: 260rpx; + height: 100%; + transform: translateX(100%) +} + +.cu-list>.cu-item .move view { + display: flex; + flex: 1; + justify-content: center; + align-items: center +} + +.cu-list.menu-avatar { + overflow: hidden; +} + +.cu-list.menu-avatar>.cu-item { + position: relative; + display: flex; + padding-right: 10rpx; + height: 140rpx; + background-color: #ffffff; + justify-content: flex-end; + align-items: center +} + +.cu-list.menu-avatar>.cu-item>.cu-avatar { + position: absolute; + left: 30rpx +} + +.cu-list.menu-avatar>.cu-item .flex .text-cut { + max-width: 510rpx +} + +.cu-list.menu-avatar>.cu-item .content { + position: absolute; + left: 146rpx; + width: calc(100% - 96rpx - 60rpx - 120rpx - 20rpx); + line-height: 1.6em; +} + +.cu-list.menu-avatar>.cu-item .content.flex-sub { + width: calc(100% - 96rpx - 60rpx - 20rpx); +} + +.cu-list.menu-avatar>.cu-item .content>view:first-child { + font-size: 30rpx; + display: flex; + align-items: center +} + +.cu-list.menu-avatar>.cu-item .content .cu-tag.sm { + display: inline-block; + margin-left: 10rpx; + height: 28rpx; + font-size: 16rpx; + line-height: 32rpx +} + +.cu-list.menu-avatar>.cu-item .action { + width: 100rpx; + text-align: center +} + +.cu-list.menu-avatar>.cu-item .action view+view { + margin-top: 10rpx +} + +.cu-list.menu-avatar.comment>.cu-item .content { + position: relative; + left: 0; + width: auto; + flex: 1; +} + +.cu-list.menu-avatar.comment>.cu-item { + padding: 30rpx 30rpx 30rpx 120rpx; + height: auto +} + +.cu-list.menu-avatar.comment .cu-avatar { + align-self: flex-start +} + +.cu-list.menu>.cu-item { + position: relative; + display: flex; + padding: 0 30rpx; + min-height: 100rpx; + background-color: #ffffff; + justify-content: space-between; + align-items: center +} + +.cu-list.menu>.cu-item:last-child:after { + border: none +} + +.cu-list.menu-avatar>.cu-item:after, +.cu-list.menu>.cu-item:after { + position: absolute; + top: 0; + left: 0; + box-sizing: border-box; + width: 200%; + height: 200%; + border-bottom: 1rpx solid #ddd; + border-radius: inherit; + content: " "; + transform: scale(.5); + transform-origin: 0 0; + pointer-events: none +} + +.cu-list.menu>.cu-item.grayscale { + background-color: #f5f5f5 +} + +.cu-list.menu>.cu-item.cur { + background-color: #fcf7e9 +} + +.cu-list.menu>.cu-item.arrow { + padding-right: 90rpx +} + +.cu-list.menu>.cu-item.arrow:before { + position: absolute; + top: 0; + right: 30rpx; + bottom: 0; + display: block; + margin: auto; + width: 30rpx; + height: 30rpx; + color: #8799a3; + content: "\e6a3"; + text-align: center; + font-size: 34rpx; + font-family: cuIcon; + line-height: 30rpx +} + +.cu-list.menu>.cu-item button.content { + padding: 0; + background-color: transparent; + justify-content: flex-start +} + +.cu-list.menu>.cu-item button.content:after { + display: none +} + +.cu-list.menu>.cu-item .cu-avatar-group .cu-avatar { + border-color: #ffffff +} + +.cu-list.menu>.cu-item .content>view:first-child { + display: flex; + align-items: center +} + +.cu-list.menu>.cu-item .content>text[class*=cuIcon] { + display: inline-block; + margin-right: 10rpx; + width: 1.6em; + text-align: center +} + +.cu-list.menu>.cu-item .content>image { + display: inline-block; + margin-right: 10rpx; + width: 1.6em; + height: 1.6em; + vertical-align: middle +} + +.cu-list.menu>.cu-item .content { + font-size: 30rpx; + line-height: 1.6em; + flex: 1 +} + +.cu-list.menu>.cu-item .content .cu-tag.sm { + display: inline-block; + margin-left: 10rpx; + height: 28rpx; + font-size: 16rpx; + line-height: 32rpx +} + +.cu-list.menu>.cu-item .action .cu-tag:empty { + right: 10rpx +} + +.cu-list.menu { + display: block; + overflow: hidden +} + +.cu-list.menu.sm-border>.cu-item:after { + left: 30rpx; + width: calc(200% - 120rpx) +} + +.cu-list.grid>.cu-item { + position: relative; + display: flex; + padding: 20rpx 0 30rpx; + transition-duration: 0s; + flex-direction: column; +} + +.cu-list.grid>.cu-item:after { + position: absolute; + top: 0; + left: 0; + box-sizing: border-box; + width: 200%; + height: 200%; + border-right: 1px solid rgba(0, 0, 0, .1); + border-bottom: 1px solid rgba(0, 0, 0, .1); + border-radius: inherit; + content: " "; + transform: scale(.5); + transform-origin: 0 0; + pointer-events: none +} + +.cu-list.grid>.cu-item text { + display: block; + margin-top: 10rpx; + color: #888; + font-size: 26rpx; + line-height: 40rpx +} + +.cu-list.grid>.cu-item [class*=cuIcon] { + position: relative; + display: block; + margin-top: 20rpx; + width: 100%; + font-size: 48rpx +} + +.cu-list.grid>.cu-item .cu-tag { + right: auto; + left: 50%; + margin-left: 20rpx +} + +.cu-list.grid { + background-color: #ffffff; + text-align: center +} + +.cu-list.grid.no-border>.cu-item { + padding-top: 10rpx; + padding-bottom: 20rpx +} + +.cu-list.grid.no-border>.cu-item:after { + border: none +} + +.cu-list.grid.no-border { + padding: 20rpx 10rpx +} + +.cu-list.grid.col-3>.cu-item:nth-child(3n):after, +.cu-list.grid.col-4>.cu-item:nth-child(4n):after, +.cu-list.grid.col-5>.cu-item:nth-child(5n):after { + border-right-width: 0 +} + +.cu-list.card-menu { + overflow: hidden; + margin-right: 30rpx; + margin-left: 30rpx; + border-radius: 20rpx +} + + +/* ================== + 操作条 + ==================== */ + +.cu-bar { + display: flex; + position: relative; + align-items: center; + min-height: 100rpx; + justify-content: space-between; +} + +.cu-bar .action { + display: flex; + align-items: center; + height: 100%; + justify-content: center; + max-width: 100%; +} + +.cu-bar .action.border-title { + position: relative; + top: -10rpx; +} + +.cu-bar .action.border-title text[class*="bg-"]:last-child { + position: absolute; + bottom: -0.5rem; + min-width: 2rem; + height: 6rpx; + left: 0; +} + +.cu-bar .action.sub-title { + position: relative; + top: -0.2rem; +} + +.cu-bar .action.sub-title text { + position: relative; + z-index: 1; +} + +.cu-bar .action.sub-title text[class*="bg-"]:last-child { + position: absolute; + display: inline-block; + bottom: -0.2rem; + border-radius: 6rpx; + width: 100%; + height: 0.6rem; + left: 0.6rem; + opacity: 0.3; + z-index: 0; +} + +.cu-bar .action.sub-title text[class*="text-"]:last-child { + position: absolute; + display: inline-block; + bottom: -0.7rem; + left: 0.5rem; + opacity: 0.2; + z-index: 0; + text-align: right; + font-weight: 900; + font-size: 36rpx; +} + +.cu-bar.justify-center .action.border-title text:last-child, +.cu-bar.justify-center .action.sub-title text:last-child { + left: 0; + right: 0; + margin: auto; + text-align: center; +} + +.cu-bar .action:first-child { + margin-left: 30rpx; + font-size: 30rpx; +} + +.cu-bar .action text.text-cut { + text-align: left; + width: 100%; +} + +.cu-bar .cu-avatar:first-child { + margin-left: 20rpx; +} + +.cu-bar .action:first-child>text[class*="cuIcon-"] { + margin-left: -0.3em; + margin-right: 0.3em; +} + +.cu-bar .action:last-child { + margin-right: 30rpx; +} + +.cu-bar .action>text[class*="cuIcon-"], +.cu-bar .action>view[class*="cuIcon-"] { + font-size: 36rpx; +} + +.cu-bar .action>text[class*="cuIcon-"]+text[class*="cuIcon-"] { + margin-left: 0.5em; +} + +.cu-bar .content { + position: absolute; + text-align: center; + width: calc(100% - 340rpx); + left: 0; + right: 0; + bottom: 0; + top: 0; + margin: auto; + height: 60rpx; + font-size: 32rpx; + line-height: 60rpx; + cursor: none; + pointer-events: none; + text-overflow: ellipsis; + white-space: nowrap; + overflow: hidden; +} + +.cu-bar.ios .content { + bottom: 7px; + height: 30px; + font-size: 32rpx; + line-height: 30px; +} + +.cu-bar.btn-group { + justify-content: space-around; +} + +.cu-bar.btn-group button { + padding: 20rpx 32rpx; +} + +.cu-bar.btn-group button { + flex: 1; + margin: 0 20rpx; + max-width: 50%; +} + +.cu-bar .search-form { + background-color: #f5f5f5; + line-height: 64rpx; + height: 64rpx; + font-size: 24rpx; + color: #333333; + flex: 1; + display: flex; + align-items: center; + margin: 0 30rpx; +} + +.cu-bar .search-form+.action { + margin-right: 30rpx; +} + +.cu-bar .search-form input { + flex: 1; + padding-right: 30rpx; + height: 64rpx; + line-height: 64rpx; + font-size: 26rpx; + background-color: transparent; +} + +.cu-bar .search-form [class*="cuIcon-"] { + margin: 0 0.5em 0 0.8em; +} + +.cu-bar .search-form [class*="cuIcon-"]::before { + top: 0rpx; +} + +.cu-bar.fixed, +.nav.fixed { + position: fixed; + width: 100%; + top: 0; + z-index: 1024; + box-shadow: 0 1rpx 6rpx rgba(0, 0, 0, 0.1); +} + +.cu-bar.foot { + position: fixed; + width: 100%; + bottom: 0; + z-index: 1024; + box-shadow: 0 -1rpx 6rpx rgba(0, 0, 0, 0.1); +} + +.cu-bar.tabbar { + padding: 0; + height: calc(100rpx + env(safe-area-inset-bottom) / 2); + padding-bottom: calc(env(safe-area-inset-bottom) / 2); +} + +.cu-tabbar-height { + min-height: 100rpx; + height: calc(100rpx + env(safe-area-inset-bottom) / 2); +} + +.cu-bar.tabbar.shadow { + box-shadow: 0 -1rpx 6rpx rgba(0, 0, 0, 0.1); +} + +.cu-bar.tabbar .action { + font-size: 22rpx; + position: relative; + flex: 1; + text-align: center; + padding: 0; + display: block; + height: auto; + line-height: 1; + margin: 0; + background-color: inherit; + overflow: initial; +} + +.cu-bar.tabbar.shop .action { + width: 140rpx; + flex: initial; +} + +.cu-bar.tabbar .action.add-action { + position: relative; + z-index: 2; + padding-top: 50rpx; +} + +.cu-bar.tabbar .action.add-action [class*="cuIcon-"] { + position: absolute; + width: 70rpx; + z-index: 2; + height: 70rpx; + border-radius: 50%; + line-height: 70rpx; + font-size: 50rpx; + top: -35rpx; + left: 0; + right: 0; + margin: auto; + padding: 0; +} + +.cu-bar.tabbar .action.add-action::after { + content: ""; + position: absolute; + width: 100rpx; + height: 100rpx; + top: -50rpx; + left: 0; + right: 0; + margin: auto; + box-shadow: 0 -3rpx 8rpx rgba(0, 0, 0, 0.08); + border-radius: 50rpx; + background-color: inherit; + z-index: 0; +} + +.cu-bar.tabbar .action.add-action::before { + content: ""; + position: absolute; + width: 100rpx; + height: 30rpx; + bottom: 30rpx; + left: 0; + right: 0; + margin: auto; + background-color: inherit; + z-index: 1; +} + +.cu-bar.tabbar .btn-group { + flex: 1; + display: flex; + justify-content: space-around; + align-items: center; + padding: 0 10rpx; +} + +.cu-bar.tabbar button.action::after { + border: 0; +} + +.cu-bar.tabbar .action [class*="cuIcon-"] { + width: 100rpx; + position: relative; + display: block; + height: auto; + margin: 0 auto 10rpx; + text-align: center; + font-size: 40rpx; +} + +.cu-bar.tabbar .action .cuIcon-cu-image { + margin: 0 auto; + line-height: 1 !important; +} + +.cu-bar.tabbar .action .cuIcon-cu-image image { + width: 50rpx; + height: 50rpx; + display: inline-block; +} + +.cu-bar.tabbar .submit { + align-items: center; + display: flex; + justify-content: center; + text-align: center; + position: relative; + flex: 2; + align-self: stretch; +} + +.cu-bar.tabbar .submit:last-child { + flex: 2.6; +} + +.cu-bar.tabbar .submit+.submit { + flex: 2; +} + +.cu-bar.tabbar.border .action::before { + content: " "; + width: 200%; + height: 200%; + position: absolute; + top: 0; + left: 0; + transform: scale(0.5); + transform-origin: 0 0; + border-right: 1rpx solid rgba(0, 0, 0, 0.1); + z-index: 3; +} + +.cu-bar.tabbar.border .action:last-child:before { + display: none; +} + +.cu-bar.input { + padding-right: 20rpx; + background-color: #ffffff; +} + +.cu-bar.input input { + overflow: initial; + line-height: 64rpx; + height: 64rpx; + min-height: 64rpx; + flex: 1; + font-size: 30rpx; + margin: 0 20rpx; +} + +.cu-bar.input .action { + margin-left: 20rpx; +} + +.cu-bar.input .action [class*="cuIcon-"] { + font-size: 48rpx; +} + +.cu-bar.input input+.action { + margin-right: 20rpx; + margin-left: 0rpx; +} + +.cu-bar.input .action:first-child [class*="cuIcon-"] { + margin-left: 0rpx; +} + +.cu-custom { + display: block; + position: relative; +} + +.cu-custom .cu-bar .content { + width: calc(100% - 440rpx); +} + +/* #ifdef MP-ALIPAY */ +.cu-custom .cu-bar .action .cuIcon-back { + opacity: 0; +} + +/* #endif */ + +.cu-custom .cu-bar .content image { + height: 60rpx; + width: 240rpx; +} + +.cu-custom .cu-bar { + min-height: 0px; + /* #ifdef MP-WEIXIN */ + padding-right: 220rpx; + /* #endif */ + /* #ifdef MP-ALIPAY */ + padding-right: 150rpx; + /* #endif */ + box-shadow: 0rpx 0rpx 0rpx; + z-index: 9999; +} + +.cu-custom .cu-bar .border-custom { + position: relative; + background: rgba(0, 0, 0, 0.15); + border-radius: 1000rpx; + height: 30px; +} + +.cu-custom .cu-bar .border-custom::after { + content: " "; + width: 200%; + height: 200%; + position: absolute; + top: 0; + left: 0; + border-radius: inherit; + transform: scale(0.5); + transform-origin: 0 0; + pointer-events: none; + box-sizing: border-box; + border: 1rpx solid #ffffff; + opacity: 0.5; +} + +.cu-custom .cu-bar .border-custom::before { + content: " "; + width: 1rpx; + height: 110%; + position: absolute; + top: 22.5%; + left: 0; + right: 0; + margin: auto; + transform: scale(0.5); + transform-origin: 0 0; + pointer-events: none; + box-sizing: border-box; + opacity: 0.6; + background-color: #ffffff; +} + +.cu-custom .cu-bar .border-custom text { + display: block; + flex: 1; + margin: auto !important; + text-align: center; + font-size: 34rpx; +} + +/* ================== + 导航栏 + ==================== */ + +.nav { + white-space: nowrap; +} + +::-webkit-scrollbar { + display: none; +} + +.nav .cu-item { + height: 90rpx; + display: inline-block; + line-height: 90rpx; + margin: 0 10rpx; + padding: 0 20rpx; +} + +.nav .cu-item.cur { + border-bottom: 4rpx solid; +} + +/* ================== + 时间轴 + ==================== */ + +.cu-timeline { + display: block; + background-color: #ffffff; +} + +.cu-timeline .cu-time { + width: 120rpx; + text-align: center; + padding: 20rpx 0; + font-size: 26rpx; + color: #888; + display: block; +} + +.cu-timeline>.cu-item { + padding: 30rpx 30rpx 30rpx 120rpx; + position: relative; + display: block; + z-index: 0; +} + +.cu-timeline>.cu-item:not([class*="text-"]) { + color: #ccc; +} + +.cu-timeline>.cu-item::after { + content: ""; + display: block; + position: absolute; + width: 1rpx; + background-color: #ddd; + left: 60rpx; + height: 100%; + top: 0; + z-index: 8; +} + +.cu-timeline>.cu-item::before { + font-family: "cuIcon"; + display: block; + position: absolute; + top: 36rpx; + z-index: 9; + background-color: #ffffff; + width: 50rpx; + height: 50rpx; + text-align: center; + border: none; + line-height: 50rpx; + left: 36rpx; +} + +.cu-timeline>.cu-item:not([class*="cuIcon-"])::before { + content: "\e763"; +} + +.cu-timeline>.cu-item[class*="cuIcon-"]::before { + background-color: #ffffff; + width: 50rpx; + height: 50rpx; + text-align: center; + border: none; + line-height: 50rpx; + left: 36rpx; +} + +.cu-timeline>.cu-item>.content { + padding: 30rpx; + border-radius: 6rpx; + display: block; + line-height: 1.6; +} + +.cu-timeline>.cu-item>.content:not([class*="bg-"]) { + background-color: #f1f1f1; + color: #333333; +} + +.cu-timeline>.cu-item>.content+.content { + margin-top: 20rpx; +} + +/* ================== + 卡片 + ==================== */ + +.cu-card { + display: block; + overflow: hidden; +} + +.cu-card>.cu-item { + display: block; + background-color: #ffffff; + overflow: hidden; + border-radius: 10rpx; + margin: 30rpx; +} + +.cu-card>.cu-item.shadow-blur { + overflow: initial; +} + +.cu-card.no-card>.cu-item { + margin: 0rpx; + border-radius: 0rpx; +} + +.cu-card .grid.grid-square { + margin-bottom: -20rpx; +} + +.cu-card.case .image { + position: relative; +} + +.cu-card.case .image image { + width: 100%; +} + +.cu-card.case .image .cu-tag { + position: absolute; + right: 0; + top: 0; +} + +.cu-card.case .image .cu-bar { + position: absolute; + bottom: 0; + width: 100%; + background-color: transparent; + padding: 0rpx 30rpx; +} + +.cu-card.case.no-card .image { + margin: 30rpx 30rpx 0; + overflow: hidden; + border-radius: 10rpx; +} + +.cu-card.dynamic { + display: block; +} + +.cu-card.dynamic>.cu-item { + display: block; + background-color: #ffffff; + overflow: hidden; +} + +.cu-card.dynamic>.cu-item>.text-content { + padding: 0 30rpx 0; + max-height: 6.4em; + overflow: hidden; + font-size: 30rpx; + margin-bottom: 20rpx; +} + +.cu-card.dynamic>.cu-item .square-img { + width: 100%; + height: 200rpx; + border-radius: 6rpx; +} + +.cu-card.dynamic>.cu-item .only-img { + width: 100%; + height: 320rpx; + border-radius: 6rpx; +} + +/* card.dynamic>.cu-item .comment { + padding: 20rpx; + background-color: #f1f1f1; + margin: 0 30rpx 30rpx; + border-radius: 6rpx; +} */ + +.cu-card.article { + display: block; +} + +.cu-card.article>.cu-item { + padding-bottom: 30rpx; +} + +.cu-card.article>.cu-item .title { + font-size: 30rpx; + font-weight: 900; + color: #333333; + line-height: 100rpx; + padding: 0 30rpx; +} + +.cu-card.article>.cu-item .content { + display: flex; + padding: 0 30rpx; +} + +.cu-card.article>.cu-item .content>image { + width: 240rpx; + height: 6.4em; + margin-right: 20rpx; + border-radius: 6rpx; +} + +.cu-card.article>.cu-item .content .desc { + flex: 1; + display: flex; + flex-direction: column; + justify-content: space-between; +} + +.cu-card.article>.cu-item .content .text-content { + font-size: 28rpx; + color: #888; + height: 4.8em; + overflow: hidden; +} + + +/* ================== + 模态窗口 + ==================== */ + +.cu-modal { + position: fixed; + top: 0; + right: 0; + bottom: 0; + left: 0; + z-index: 1110; + opacity: 0; + outline: 0; + text-align: center; + -ms-transform: scale(1.185); + transform: scale(1.185); + backface-visibility: hidden; + perspective: 2000rpx; + background: rgba(0, 0, 0, 0.6); + transition: all 0.3s ease-in-out 0s; + pointer-events: none; +} + +.cu-modal::before { + content: "\200B"; + display: inline-block; + height: 100%; + vertical-align: middle; +} + +.cu-modal.show { + opacity: 1; + transition-duration: 0.3s; + -ms-transform: scale(1); + transform: scale(1); + overflow-x: hidden; + overflow-y: auto; + pointer-events: auto; +} + +.cu-dialog { + position: relative; + display: inline-block; + vertical-align: middle; + margin-left: auto; + margin-right: auto; + width: 680rpx; + max-width: 100%; + background-color: #f8f8f8; + border-radius: 10rpx; + overflow: hidden; +} + +.cu-modal.bottom-modal::before { + vertical-align: bottom; +} + +.cu-modal.bottom-modal .cu-dialog { + width: 100%; + border-radius: 0; +} + +.cu-modal.bottom-modal { + margin-bottom: -1000rpx; +} + +.cu-modal.bottom-modal.show { + margin-bottom: 0; +} + +.cu-modal.drawer-modal { + transform: scale(1); + display: flex; +} + +.cu-modal.drawer-modal .cu-dialog { + height: 100%; + min-width: 200rpx; + border-radius: 0; + margin: initial; + transition-duration: 0.3s; +} + +.cu-modal.drawer-modal.justify-start .cu-dialog { + transform: translateX(-100%); +} + +.cu-modal.drawer-modal.justify-end .cu-dialog { + transform: translateX(100%); +} + +.cu-modal.drawer-modal.show .cu-dialog { + transform: translateX(0%); +} +.cu-modal .cu-dialog>.cu-bar:first-child .action{ + min-width: 100rpx; + margin-right: 0; + min-height: 100rpx; +} +/* ================== + 轮播 + ==================== */ +swiper .a-swiper-dot { + display: inline-block; + width: 16rpx; + height: 16rpx; + background: rgba(0, 0, 0, .3); + border-radius: 50%; + vertical-align: middle; +} + +swiper[class*="-dot"] .wx-swiper-dots, +swiper[class*="-dot"] .a-swiper-dots, +swiper[class*="-dot"] .uni-swiper-dots { + display: flex; + align-items: center; + width: 100%; + justify-content: center; +} + +swiper.square-dot .wx-swiper-dot, +swiper.square-dot .a-swiper-dot, +swiper.square-dot .uni-swiper-dot { + background-color: #ffffff; + opacity: 0.4; + width: 10rpx; + height: 10rpx; + border-radius: 20rpx; + margin: 0 8rpx !important; +} + +swiper.square-dot .wx-swiper-dot.wx-swiper-dot-active, +swiper.square-dot .a-swiper-dot.a-swiper-dot-active, +swiper.square-dot .uni-swiper-dot.uni-swiper-dot-active { + opacity: 1; + width: 30rpx; +} + +swiper.round-dot .wx-swiper-dot, +swiper.round-dot .a-swiper-dot, +swiper.round-dot .uni-swiper-dot { + width: 10rpx; + height: 10rpx; + position: relative; + margin: 4rpx 8rpx !important; +} + +swiper.round-dot .wx-swiper-dot.wx-swiper-dot-active::after, +swiper.round-dot .a-swiper-dot.a-swiper-dot-active::after, +swiper.round-dot .uni-swiper-dot.uni-swiper-dot-active::after { + content: ""; + position: absolute; + width: 10rpx; + height: 10rpx; + top: 0rpx; + left: 0rpx; + right: 0; + bottom: 0; + margin: auto; + background-color: #ffffff; + border-radius: 20rpx; +} + +swiper.round-dot .wx-swiper-dot.wx-swiper-dot-active, +swiper.round-dot .a-swiper-dot.a-swiper-dot-active, +swiper.round-dot .uni-swiper-dot.uni-swiper-dot-active { + width: 18rpx; + height: 18rpx; +} + +.screen-swiper, +.screen-swiper.screen-swiper-item { + height: 190rpx; +} + + +.screen-swiper image, +.screen-swiper video, +.swiper-item image, +.swiper-item video { + width: 100%; + display: block; + height: 190rpx; + margin: 0; + pointer-events: none; +} + +/* -- 内外边距 -- */ + +.margin-0 { + margin: 0; +} + +.margin-xs { + margin: 10rpx; +} + +.margin-sm { + margin: 20rpx; +} + +.margin { + margin: 30rpx; +} + +.margin-lg { + margin: 40rpx; +} + +.margin-xl { + margin: 50rpx; +} + +.margin-top-xs { + margin-top: 10rpx; +} + +.margin-top-sm { + margin-top: 20rpx; +} + +.margin-top { + margin-top: 30rpx; +} + +.margin-top-lg { + margin-top: 40rpx; +} + +.margin-top-xl { + margin-top: 50rpx; +} + +.margin-right-xs { + margin-right: 10rpx; +} + +.margin-right-sm { + margin-right: 20rpx; +} + +.margin-right { + margin-right: 30rpx; +} + +.margin-right-lg { + margin-right: 40rpx; +} + +.margin-right-xl { + margin-right: 50rpx; +} + +.margin-bottom-xs { + margin-bottom: 10rpx; +} + +.margin-bottom-sm { + margin-bottom: 20rpx; +} + +.margin-bottom { + margin-bottom: 30rpx; +} + +.margin-bottom-lg { + margin-bottom: 40rpx; +} + +.margin-bottom-xl { + margin-bottom: 50rpx; +} + +.margin-left-xs { + margin-left: 10rpx; +} + +.margin-left-sm { + margin-left: 20rpx; +} + +.margin-left { + margin-left: 30rpx; +} + +.margin-left-lg { + margin-left: 40rpx; +} + +.margin-left-xl { + margin-left: 50rpx; +} + +.margin-lr-xs { + margin-left: 10rpx; + margin-right: 10rpx; +} + +.margin-lr-sm { + margin-left: 20rpx; + margin-right: 20rpx; +} + +.margin-lr { + margin-left: 30rpx; + margin-right: 30rpx; +} + +.margin-lr-lg { + margin-left: 40rpx; + margin-right: 40rpx; +} + +.margin-lr-xl { + margin-left: 50rpx; + margin-right: 50rpx; +} + +.margin-tb-xs { + margin-top: 10rpx; + margin-bottom: 10rpx; +} + +.margin-tb-sm { + margin-top: 20rpx; + margin-bottom: 20rpx; +} + +.margin-tb { + margin-top: 30rpx; + margin-bottom: 30rpx; +} + +.margin-tb-lg { + margin-top: 40rpx; + margin-bottom: 40rpx; +} + +.margin-tb-xl { + margin-top: 50rpx; + margin-bottom: 50rpx; +} + +.padding-0 { + padding: 0; +} + +.padding-xs { + padding: 10rpx; +} + +.padding-sm { + padding: 20rpx; +} + +.padding { + padding: 30rpx; +} + +.padding-lg { + padding: 40rpx; +} + +.padding-xl { + padding: 50rpx; +} + +.padding-top-xs { + padding-top: 10rpx; +} + +.padding-top-sm { + padding-top: 20rpx; +} + +.padding-top { + padding-top: 30rpx; +} + +.padding-top-lg { + padding-top: 40rpx; +} + +.padding-top-xl { + padding-top: 50rpx; +} + +.padding-right-xs { + padding-right: 10rpx; +} + +.padding-right-sm { + padding-right: 20rpx; +} + +.padding-right { + padding-right: 30rpx; +} + +.padding-right-lg { + padding-right: 40rpx; +} + +.padding-right-xl { + padding-right: 50rpx; +} + +.padding-bottom-xs { + padding-bottom: 10rpx; +} + +.padding-bottom-sm { + padding-bottom: 20rpx; +} + +.padding-bottom { + padding-bottom: 30rpx; +} + +.padding-bottom-lg { + padding-bottom: 40rpx; +} + +.padding-bottom-xl { + padding-bottom: 50rpx; +} + +.padding-left-xs { + padding-left: 10rpx; +} + +.padding-left-sm { + padding-left: 20rpx; +} + +.padding-left { + padding-left: 30rpx; +} + +.padding-left-lg { + padding-left: 40rpx; +} + +.padding-left-xl { + padding-left: 50rpx; +} + +.padding-lr-xs { + padding-left: 10rpx; + padding-right: 10rpx; +} + +.padding-lr-sm { + padding-left: 20rpx; + padding-right: 20rpx; +} + +.padding-lr { + padding-left: 30rpx; + padding-right: 30rpx; +} + +.padding-lr-lg { + padding-left: 40rpx; + padding-right: 40rpx; +} + +.padding-lr-xl { + padding-left: 50rpx; + padding-right: 50rpx; +} + +.padding-tb-xs { + padding-top: 10rpx; + padding-bottom: 10rpx; +} + +.padding-tb-sm { + padding-top: 20rpx; + padding-bottom: 20rpx; +} + +.padding-tb { + padding-top: 30rpx; + padding-bottom: 30rpx; +} + +.padding-tb-lg { + padding-top: 40rpx; + padding-bottom: 40rpx; +} + +.padding-tb-xl { + padding-top: 50rpx; + padding-bottom: 50rpx; +} + +/* -- 浮动 -- */ + +.cf::after, +.cf::before { + content: " "; + display: table; +} + +.cf::after { + clear: both; +} + +.fl { + float: left; +} + +.fr { + float: right; +} + +/* ================== + 背景 + ==================== */ + +.line-red::after, +.lines-red::after { + border-color: #e54d42; +} + +.line-orange::after, +.lines-orange::after { + border-color: #f37b1d; +} + +.line-yellow::after, +.lines-yellow::after { + border-color: #fbbd08; +} + +.line-olive::after, +.lines-olive::after { + border-color: #8dc63f; +} + +.line-green::after, +.lines-green::after { + border-color: #39b54a; +} + +.line-cyan::after, +.lines-cyan::after { + border-color: #1cbbb4; +} + +.line-blue::after, +.lines-blue::after { + border-color: #0081ff; +} + +.line-purple::after, +.lines-purple::after { + border-color: #6739b6; +} + +.line-mauve::after, +.lines-mauve::after { + border-color: #9c26b0; +} + +.line-pink::after, +.lines-pink::after { + border-color: #e03997; +} + +.line-brown::after, +.lines-brown::after { + border-color: #a5673f; +} + +.line-grey::after, +.lines-grey::after { + border-color: #8799a3; +} + +.line-gray::after, +.lines-gray::after { + border-color: #aaaaaa; +} + +.line-black::after, +.lines-black::after { + border-color: #333333; +} + +.line-white::after, +.lines-white::after { + border-color: #ffffff; +} + +.bg-red { + background-color: #e54d42; + color: #ffffff; +} + +.bg-orange { + background-color: #f37b1d; + color: #ffffff; +} +.bg-skyblue{ + background-color: #6BADFF; + color: #ffffff; +} +.bg-yellow { + background-color: #fbbd08; + color: #333333; +} + +.bg-olive { + background-color: #8dc63f; + color: #ffffff; +} + +.bg-green { + background-color: #39b54a; + color: #ffffff; +} + +.bg-cyan { + background-color: #1cbbb4; + color: #ffffff; +} + +.bg-blue { + background-color: #0081ff; + color: #ffffff; +} + +.bg-purple { + background-color: #6739b6; + color: #ffffff; +} + +.bg-mauve { + background-color: #9c26b0; + color: #ffffff; +} + +.bg-pink { + background-color: #e03997; + color: #ffffff; +} + +.bg-brown { + background-color: #a5673f; + color: #ffffff; +} + +.bg-grey { + background-color: #8799a3; + color: #ffffff; +} + +.bg-gray { + background-color: #f0f0f0; + color: #333333; +} + +.bg-black { + background-color: #333333; + color: #ffffff; +} + +.bg-white { + background-color: #ffffff; + color: #666666; +} + + +.bg-shadeTop { + background-image: linear-gradient(rgba(0, 0, 0, 1), rgba(0, 0, 0, 0.01)); + color: #ffffff; +} + +.bg-shadeBottom { + background-image: linear-gradient(rgba(0, 0, 0, 0.01), rgba(0, 0, 0, 1)); + color: #ffffff; +} + +.bg-red.light { + color: #e54d42; + background-color: #fadbd9; +} + +.bg-orange.light { + color: #f37b1d; + background-color: #fde6d2; +} + +.bg-yellow.light { + color: #fbbd08; + background-color: #fef2ced2; +} + +.bg-olive.light { + color: #8dc63f; + background-color: #e8f4d9; +} + +.bg-green.light { + color: #39b54a; + background-color: #d7f0dbff; +} + +.bg-cyan.light { + color: #1cbbb4; + background-color: #d2f1f0; +} + +.bg-blue.light { + color: #0081ff; + background-color: #cce6ff; +} + +.bg-purple.light { + color: #6739b6; + background-color: #e1d7f0; +} + +.bg-mauve.light { + color: #9c26b0; + background-color: #ebd4ef; +} + +.bg-pink.light { + color: #e03997; + background-color: #f9d7ea; +} + +.bg-brown.light { + color: #a5673f; + background-color: #ede1d9; +} + +.bg-grey.light { + color: #8799a3; + background-color: #e7ebed; +} + +.bg-gradual-red { + background-image: linear-gradient(45deg, #f43f3b, #ec008c); + color: #ffffff; +} + +.bg-gradual-orange { + background-image: linear-gradient(45deg, #ff9700, #ed1c24); + color: #ffffff; +} + +.bg-gradual-green { + background-image: linear-gradient(45deg, #39b54a, #8dc63f); + color: #ffffff; +} + +.bg-gradual-purple { + background-image: linear-gradient(45deg, #9000ff, #5e00ff); + color: #ffffff; +} + +.bg-gradual-pink { + background-image: linear-gradient(45deg, #ec008c, #6739b6); + color: #ffffff; +} + +.bg-gradual-blue { + background-image: linear-gradient(45deg, #0081ff, #1cbbb4); + color: #ffffff; +} + +.shadow[class*="-red"] { + box-shadow: 6rpx 6rpx 8rpx rgba(204, 69, 59, 0.2); +} + +.shadow[class*="-orange"] { + box-shadow: 6rpx 6rpx 8rpx rgba(217, 109, 26, 0.2); +} + +.shadow[class*="-yellow"] { + box-shadow: 6rpx 6rpx 8rpx rgba(224, 170, 7, 0.2); +} + +.shadow[class*="-olive"] { + box-shadow: 6rpx 6rpx 8rpx rgba(124, 173, 55, 0.2); +} + +.shadow[class*="-green"] { + box-shadow: 6rpx 6rpx 8rpx rgba(48, 156, 63, 0.2); +} + +.shadow[class*="-cyan"] { + box-shadow: 6rpx 6rpx 8rpx rgba(28, 187, 180, 0.2); +} + +.shadow[class*="-blue"] { + box-shadow: 6rpx 6rpx 8rpx rgba(0, 102, 204, 0.2); +} + +.shadow[class*="-purple"] { + box-shadow: 6rpx 6rpx 8rpx rgba(88, 48, 156, 0.2); +} + +.shadow[class*="-mauve"] { + box-shadow: 6rpx 6rpx 8rpx rgba(133, 33, 150, 0.2); +} + +.shadow[class*="-pink"] { + box-shadow: 6rpx 6rpx 8rpx rgba(199, 50, 134, 0.2); +} + +.shadow[class*="-brown"] { + box-shadow: 6rpx 6rpx 8rpx rgba(140, 88, 53, 0.2); +} + +.shadow[class*="-grey"] { + box-shadow: 6rpx 6rpx 8rpx rgba(114, 130, 138, 0.2); +} + +.shadow[class*="-gray"] { + box-shadow: 6rpx 6rpx 8rpx rgba(114, 130, 138, 0.2); +} + +.shadow[class*="-black"] { + box-shadow: 6rpx 6rpx 8rpx rgba(26, 26, 26, 0.2); +} + +.shadow[class*="-white"] { + box-shadow: 6rpx 6rpx 8rpx rgba(26, 26, 26, 0.2); +} + +.text-shadow[class*="-red"] { + text-shadow: 6rpx 6rpx 8rpx rgba(204, 69, 59, 0.2); +} + +.text-shadow[class*="-orange"] { + text-shadow: 6rpx 6rpx 8rpx rgba(217, 109, 26, 0.2); +} + +.text-shadow[class*="-yellow"] { + text-shadow: 6rpx 6rpx 8rpx rgba(224, 170, 7, 0.2); +} + +.text-shadow[class*="-olive"] { + text-shadow: 6rpx 6rpx 8rpx rgba(124, 173, 55, 0.2); +} + +.text-shadow[class*="-green"] { + text-shadow: 6rpx 6rpx 8rpx rgba(48, 156, 63, 0.2); +} + +.text-shadow[class*="-cyan"] { + text-shadow: 6rpx 6rpx 8rpx rgba(28, 187, 180, 0.2); +} + +.text-shadow[class*="-blue"] { + text-shadow: 6rpx 6rpx 8rpx rgba(0, 102, 204, 0.2); +} + +.text-shadow[class*="-purple"] { + text-shadow: 6rpx 6rpx 8rpx rgba(88, 48, 156, 0.2); +} + +.text-shadow[class*="-mauve"] { + text-shadow: 6rpx 6rpx 8rpx rgba(133, 33, 150, 0.2); +} + +.text-shadow[class*="-pink"] { + text-shadow: 6rpx 6rpx 8rpx rgba(199, 50, 134, 0.2); +} + +.text-shadow[class*="-brown"] { + text-shadow: 6rpx 6rpx 8rpx rgba(140, 88, 53, 0.2); +} + +.text-shadow[class*="-grey"] { + text-shadow: 6rpx 6rpx 8rpx rgba(114, 130, 138, 0.2); +} + +.text-shadow[class*="-gray"] { + text-shadow: 6rpx 6rpx 8rpx rgba(114, 130, 138, 0.2); +} + +.text-shadow[class*="-black"] { + text-shadow: 6rpx 6rpx 8rpx rgba(26, 26, 26, 0.2); +} + +.bg-img { + background-size: cover; + background-position: center; + background-repeat: no-repeat; +} + +.bg-mask { + background-color: #333333; + position: relative; +} + +.bg-mask::after { + content: ""; + border-radius: inherit; + width: 100%; + height: 100%; + display: block; + background-color: rgba(0, 0, 0, 0.4); + position: absolute; + left: 0; + right: 0; + bottom: 0; + top: 0; +} + +.bg-mask view, +.bg-mask cover-view { + z-index: 5; + position: relative; +} + +.bg-video { + position: relative; +} + +.bg-video video { + display: block; + height: 100%; + width: 100%; + -o-object-fit: cover; + object-fit: cover; + position: absolute; + top: 0; + z-index: 0; + pointer-events: none; +} + +/* ================== + 文本 + ==================== */ + +.text-xs { + font-size: 20rpx; +} + +.text-sm { + font-size: 24rpx; +} + +.text-df { + font-size: 28rpx; +} + +.text-lg { + font-size: 32rpx; +} + +.text-xl { + font-size: 36rpx; +} + +.text-xxl { + font-size: 44rpx; +} + +.text-sl { + font-size: 80rpx; +} + +.text-xsl { + font-size: 120rpx; +} + +.text-Abc { + text-transform: Capitalize; +} + +.text-ABC { + text-transform: Uppercase; +} + +.text-abc { + text-transform: Lowercase; +} + +.text-price::before { + content: "¥"; + font-size: 80%; + margin-right: 4rpx; +} + +.text-cut { + text-overflow: ellipsis; + white-space: nowrap; + overflow: hidden; +} + +.text-bold { + font-weight: bold; +} + +.text-center { + text-align: center; +} + +.text-content { + line-height: 1.6; +} + +.text-left { + text-align: left; +} + +.text-right { + text-align: right; +} + +.text-red, +.line-red, +.lines-red { + color: #e54d42; +} +.text-skyblue, +.line-skyblue, +.lines-skyblue { + color: #6BADFF; +} +.text-orange, +.line-orange, +.lines-orange { + color: #f37b1d; +} + +.text-yellow, +.line-yellow, +.lines-yellow { + color: #fbbd08 !important; +} + +.text-olive, +.line-olive, +.lines-olive { + color: #8dc63f; +} + +.text-green, +.line-green, +.lines-green { + color: #39b54a; +} + +.text-cyan, +.line-cyan, +.lines-cyan { + color: #1cbbb4; +} + +.text-blue, +.line-blue, +.lines-blue { + color: #0081ff !important; +} + +.text-purple, +.line-purple, +.lines-purple { + color: #6739b6; +} + +.text-mauve, +.line-mauve, +.lines-mauve { + color: #9c26b0 !important; +} + +.text-pink, +.line-pink, +.lines-pink { + color: #e03997; +} + +.text-brown, +.line-brown, +.lines-brown { + color: #a5673f; +} + +.text-grey, +.line-grey, +.lines-grey { + color: #8799a3 !important; +} + +.text-gray, +.line-gray, +.lines-gray { + color: #aaaaaa; +} + +.text-black, +.line-black, +.lines-black { + color: #333333; +} + +.text-white, +.line-white, +.lines-white { + color: #ffffff; +} +/*字体*/ +.f10 { + font-size: 20rpx; +} + +.f12 { + font-size: 24rpx; +} +.f13 { + font-size: 26rpx; +} +.f14 { + font-size: 28rpx; +} + +.f15 { + font-size: 30rpx; +} + +.f16 { + font-size: 32rpx; +} +.f18 { + font-size: 36rpx; +} + +.f20 { + font-size: 40rpx; +} + +.f24 { + font-size: 48rpx; +} +.f28 { + font-size: 56rpx; +} +.content{ + width: 100vw; + height: 100vh; +} +image{ + width: 100%; + height: 100%; + vertical-align: center; +} +.ml10{ + margin-left: 10rpx; +} \ No newline at end of file diff --git a/style/iconfont.css b/style/iconfont.css new file mode 100644 index 0000000..4eb3850 --- /dev/null +++ b/style/iconfont.css @@ -0,0 +1,67 @@ +@font-face { + font-family: 'iconfont'; + /* Project id 3979772 */ + src: url('//at.alicdn.com/t/c/font_3979772_sd5890vlebd.woff2?t=1679996974313') format('woff2'), + url('//at.alicdn.com/t/c/font_3979772_sd5890vlebd.woff?t=1679996974313') format('woff'), + url('//at.alicdn.com/t/c/font_3979772_sd5890vlebd.ttf?t=1679996974313') format('truetype'); +} + +.iconfont { + font-family: "iconfont" !important; + font-size: 16px; + font-style: normal; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} + +.icon-queren:before { + content: "\e6bd"; +} + +.icon-dingweixiao:before { + content: "\e8ba"; +} + +.icon-shijian:before { + content: "\eb2a"; +} + +.icon-renyuan:before { + content: "\e799"; +} + +.icon-truck:before { + content: "\e606"; +} + +.icon-custom-finsh:before { + content: "\e604"; +} + +.icon-iconfonticonfonti2:before { + content: "\e62c"; +} + +.icon-iconfontphone:before { + content: "\e634"; +} + +.icon-iconfontwujingongju:before { + content: "\e641"; +} + +.icon-iconfonticon:before { + content: "\e639"; +} + +.icon-iconfont-shouye:before { + content: "\e68d"; +} + +.icon-iconfont-jiaoyi:before { + content: "\e68e"; +} + +.icon-kache:before { + content: "\e626"; +} diff --git a/uni.scss b/uni.scss new file mode 100644 index 0000000..a9a742d --- /dev/null +++ b/uni.scss @@ -0,0 +1,76 @@ +/** + * 这里是uni-app内置的常用样式变量 + * + * uni-app 官方扩展插件及插件市场(https://ext.dcloud.net.cn)上很多三方插件均使用了这些样式变量 + * 如果你是插件开发者,建议你使用scss预处理,并在插件代码中直接使用这些变量(无需 import 这个文件),方便用户通过搭积木的方式开发整体风格一致的App + * + */ + +/** + * 如果你是App开发者(插件使用者),你可以通过修改这些变量来定制自己的插件主题,实现自定义主题功能 + * + * 如果你的项目同样使用了scss预处理,你也可以直接在你的 scss 代码中使用如下变量,同时无需 import 这个文件 + */ + +/* 颜色变量 */ + +/* 行为相关颜色 */ +$uni-color-primary: #007aff; +$uni-color-success: #4cd964; +$uni-color-warning: #f0ad4e; +$uni-color-error: #dd524d; + +/* 文字基本颜色 */ +$uni-text-color:#333;//基本色 +$uni-text-color-inverse:#fff;//反色 +$uni-text-color-grey:#999;//辅助灰色,如加载更多的提示信息 +$uni-text-color-placeholder: #808080; +$uni-text-color-disable:#c0c0c0; + +/* 背景颜色 */ +$uni-bg-color:#ffffff; +$uni-bg-color-grey:#f8f8f8; +$uni-bg-color-hover:#f1f1f1;//点击状态颜色 +$uni-bg-color-mask:rgba(0, 0, 0, 0.4);//遮罩颜色 + +/* 边框颜色 */ +$uni-border-color:#c8c7cc; + +/* 尺寸变量 */ + +/* 文字尺寸 */ +$uni-font-size-sm:12px; +$uni-font-size-base:14px; +$uni-font-size-lg:16; + +/* 图片尺寸 */ +$uni-img-size-sm:20px; +$uni-img-size-base:26px; +$uni-img-size-lg:40px; + +/* Border Radius */ +$uni-border-radius-sm: 2px; +$uni-border-radius-base: 3px; +$uni-border-radius-lg: 6px; +$uni-border-radius-circle: 50%; + +/* 水平间距 */ +$uni-spacing-row-sm: 5px; +$uni-spacing-row-base: 10px; +$uni-spacing-row-lg: 15px; + +/* 垂直间距 */ +$uni-spacing-col-sm: 4px; +$uni-spacing-col-base: 8px; +$uni-spacing-col-lg: 12px; + +/* 透明度 */ +$uni-opacity-disabled: 0.3; // 组件禁用态的透明度 + +/* 文章场景相关 */ +$uni-color-title: #2C405A; // 文章标题颜色 +$uni-font-size-title:20px; +$uni-color-subtitle: #555555; // 二级标题颜色 +$uni-font-size-subtitle:26px; +$uni-color-paragraph: #3F536E; // 文章段落颜色 +$uni-font-size-paragraph:15px; diff --git a/uni_modules/liu-step-bar/changelog.md b/uni_modules/liu-step-bar/changelog.md new file mode 100644 index 0000000..f2d0d64 --- /dev/null +++ b/uni_modules/liu-step-bar/changelog.md @@ -0,0 +1,8 @@ +## 1.0.3(2023-03-20) +使用说明更新 +## 1.0.2(2023-03-20) +多样化支持 +## 1.0.1(2023-03-10) +初始化发布 +## 1.0.0(2023-03-10) +初始发布 diff --git a/uni_modules/liu-step-bar/components/liu-step-bar/liu-step-bar.vue b/uni_modules/liu-step-bar/components/liu-step-bar/liu-step-bar.vue new file mode 100644 index 0000000..6e59e84 --- /dev/null +++ b/uni_modules/liu-step-bar/components/liu-step-bar/liu-step-bar.vue @@ -0,0 +1,133 @@ + + + + + diff --git a/uni_modules/liu-step-bar/package.json b/uni_modules/liu-step-bar/package.json new file mode 100644 index 0000000..a42dc58 --- /dev/null +++ b/uni_modules/liu-step-bar/package.json @@ -0,0 +1,84 @@ +{ + "id": "liu-step-bar", + "displayName": "横向步骤条、多级步骤条、自定义步骤条", + "version": "1.0.3", + "description": "简单好用的横向步骤条组件", + "keywords": [ + "步骤", + "步骤条", + "step", + "steps" +], + "repository": "", + "engines": { + "HBuilderX": "^3.1.0" + }, + "dcloudext": { + "type": "component-vue", + "sale": { + "regular": { + "price": "0.00" + }, + "sourcecode": { + "price": "0.00" + } + }, + "contact": { + "qq": "2364518038" + }, + "declaration": { + "ads": "无", + "data": "无", + "permissions": "无" + }, + "npmurl": "" + }, + "uni_modules": { + "dependencies": [], + "encrypt": [], + "platforms": { + "cloud": { + "tcb": "y", + "aliyun": "y" + }, + "client": { + "Vue": { + "vue2": "y", + "vue3": "y" + }, + "App": { + "app-vue": "y", + "app-nvue": "u" + }, + "H5-mobile": { + "Safari": "y", + "Android Browser": "y", + "微信浏览器(Android)": "y", + "QQ浏览器(Android)": "y" + }, + "H5-pc": { + "Chrome": "y", + "IE": "u", + "Edge": "y", + "Firefox": "y", + "Safari": "y" + }, + "小程序": { + "微信": "y", + "阿里": "u", + "百度": "u", + "字节跳动": "u", + "QQ": "u", + "钉钉": "u", + "快手": "u", + "飞书": "u", + "京东": "u" + }, + "快应用": { + "华为": "u", + "联盟": "u" + } + } + } + } +} \ No newline at end of file diff --git a/uni_modules/liu-step-bar/readme.md b/uni_modules/liu-step-bar/readme.md new file mode 100644 index 0000000..ba44677 --- /dev/null +++ b/uni_modules/liu-step-bar/readme.md @@ -0,0 +1,47 @@ +### liu-step-bar适用于uni-app项目的步骤条组件 +### 本组件目前兼容微信小程序、H5 +### 本组件支持自定义步骤内容、步骤回显、点击 +### 如使用过程中有问题或有一些好的建议,欢迎qq联系:2364518038 + +### 使用方式(uni_modules版本) +``` html + +``` +``` javascript +export default { + data() { + return { + step: 1, //当前步骤 + stepList: [{ + name: '第一步', + id: 1 + }, { + name: '第二步', + id: 2 + }, { + name: '第三步', + id: 3 + }], //步骤列表 + }; + }, + methods: { + //点击步骤 + clickStep(e){ + this.step = e.id + console.log('============:', e) + } + } +} +``` + +### 属性说明 +| 名称 | 类型 | 默认值 | 描述 | +| ----------------------------|--------------- | ---------------------- | ---------------| +| step | Number | 1 | 当前步骤 +| stepList | Array | [] | 步骤信息 +| checkedImg | String | checkedImg | 已完成的图片路径 +| unCheckedImg | String | unCheckedImg | 未完成的图片路径 +| checkedColor | String | #287BF8 | 已完成的字体颜色 +| unCheckedColor | String | #333333 | 未完成的字体颜色 +| checkedLine | String | #287BF8 | 已完成的线条颜色 +| unCheckedLine | String | #bebebe | 未完成的线条颜色 \ No newline at end of file diff --git a/uni_modules/liu-step-bar/static/checkedImg.png b/uni_modules/liu-step-bar/static/checkedImg.png new file mode 100644 index 0000000000000000000000000000000000000000..248853808564650310cf4722425425d76622d996 GIT binary patch literal 4195 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 literal 0 HcmV?d00001 diff --git a/uni_modules/liu-step-bar/static/unCheckedImg.png b/uni_modules/liu-step-bar/static/unCheckedImg.png new file mode 100644 index 0000000000000000000000000000000000000000..2e59d629d4acbec75383f316ad1965993d7f2aeb GIT binary patch literal 1610 zcmV-Q2DSN#P)Px#L}ge>W=%~1DgXcg2mk?xX#fNO00031000^Q000001E2u_0{{R30RRC20H6W@ z1ONa40RR91NT34%1ONa40RR91NB{r;0FW_8?*IS=v`IukRCodHoX=|=RTRhP#n+NW z5{0^upwMJfP)ba@5G1rvsp7V+MYOmPC1ep$`ZsjdBG%$Ua3dlmYPY3U0|`NJ(Ml`| z-J}I2x`UA~ojd2A^Ub+;X72o`co|}6XJ<&w zO^Z|F0mlg~$HY-bExb*~`&!-+Z#%AP`D3M0scD%BD%Pz?lyS9jQhZ4~Dn23hf_vI| zN&HUyT4JsDVr*CTl_~jmpUp@vQi}m^EmVwnx(VoJn0d zRTbYCH^kirKHy6=li=eTks~wWPvWBne42^#-)y@Y-z#1eYvQ8{e8b1R-3rmwQA`a^ zs=)>EaJLO-yx$GAcUnihwY2S~7D(b8QzKWz$I~{p%k}?K`zIvQVj4d}2z!uQKAmP9Qj>S9iH#7Qh@qSkk>5|=8k ztGj&}=R&MN5{EH|Zk6ZEiPGU86}}obCUq1@;!MiOO)-ySPLwFkWenVhIvw5Gb{UC7 z#&9SvsyK*6Yzr<{)?3h4Ak{oC=H)!6C9o6)#7L}>i0ooglvDI&F>-sPrF<9e$o(Vg zYAelQv6(3$^gOn7S9YW_}gx1vA&_)^9cM)0J)ShqapbKncCYC8SW5 z7bEKMFH8=3Z_hmD9eg@dw{QVZo>4bj4+P@y_90ucz|ZS7@9e^scXxyHvv}-(vf`aT zUG<(D&s3;+3G`9WA~*Fi!3Wp3yi*@POe_vgAtd{-Z-($Ssi=D)6372u?|8=gKL5o- z@A@yUAH~*=u5kR>A@AZFd!je?x0E}$`w(YZG#7{eey`#XKQ=PTBs7^upeY)*1Y^!8 zOWS>G0$bS308LRK<+mzY)1Haz+4~>Iju(a)b9z&o}s{pXe8L|~DZ9AVw%>@cBA1p+&v|TTdh3|#2Nd|3N zM#F`t6)bH#pEu0~;;P&VmbU8!;!#^OFlAu{OWV%p`*_bZs~MQjv4W*-=kpx|;vsD_ zFxka?PQQW83?|ZUn+t?6Om_7f7B(Y%^aWat*wEJ^W&+U}l0C)L2sfXqJZ zn<0Eng1Z{!ZJ$QvnS%KLwh!Ah7G2ZgWqz0NzESsj1s#Ge#_!MgQ^Hpu)FM2CQwEg} zFZ`Ds(GM>urI^~fP-c*K!D-=35oQo;%A)cCs!k73NjaXZI_FC_n19YW4Z`RfGKf-T zQTY&OC{N>2%rBOL+~u1?tGaqc|4FQKF7}34>ksqc231_q%B8TN_&+YWm|G%k>0&_* zbv0f^_+C65lofP&Lvg(*fq1#41#JbQrbL?5;-*;C_cgkInFWEQ>Y5fO#7K3ilVcDQ zuV@luTSSgQ^|fVSQR`ljn4KRAgPM2M zn8ZuHpNkCOc?8{x%!z#!GYBq~K z;d?gVJV`A4rzv_?QzDfgH;GeGB9))Vi4%$K5~}>bQbM5$^NFt1hxsG|)z?v0jcfgs z$h!|m#9r^<-jj`G@mtaSBX8ycDTojfi`(4Ki#*+*i_Zl93*H?iKn1CT-2eap07*qo IM6N<$f*LK_YXATM literal 0 HcmV?d00001 diff --git a/uni_modules/uni-calendar/changelog.md b/uni_modules/uni-calendar/changelog.md new file mode 100644 index 0000000..302b60d --- /dev/null +++ b/uni_modules/uni-calendar/changelog.md @@ -0,0 +1,24 @@ +## 1.4.9(2023-02-02) +- 修复 某些情况切换月份错误问题 +## 1.4.8(2023-01-30) +- 修复 某些情况切换月份错误问题 +## 1.4.7(2022-09-16) +- 可以使用 uni-scss 控制主题色 +## 1.4.6(2022-09-08) +- fix: 表头年月切换,导致改变当前日期为选择月1号,且未触发change事件 +## 1.4.5(2022-02-25) +- 修复 条件编译 nvue 不支持的 css 样式 +## 1.4.4(2022-02-25) +- 修复 条件编译 nvue 不支持的 css 样式 +## 1.4.3(2021-09-22) +- 修复 startDate、 endDate 属性失效的 bug +## 1.4.2(2021-08-24) +- 新增 支持国际化 +## 1.4.1(2021-08-05) +- 修复 弹出层被 tabbar 遮盖 bug +## 1.4.0(2021-07-30) +- 组件兼容 vue3,如何创建vue3项目,详见 [uni-app 项目支持 vue3 介绍](https://ask.dcloud.net.cn/article/37834) +## 1.3.16(2021-05-12) +- 新增 组件示例地址 +## 1.3.15(2021-02-04) +- 调整为uni_modules目录规范 diff --git a/uni_modules/uni-calendar/components/uni-calendar/calendar.js b/uni_modules/uni-calendar/components/uni-calendar/calendar.js new file mode 100644 index 0000000..b8d7d6f --- /dev/null +++ b/uni_modules/uni-calendar/components/uni-calendar/calendar.js @@ -0,0 +1,546 @@ +/** +* @1900-2100区间内的公历、农历互转 +* @charset UTF-8 +* @github https://github.com/jjonline/calendar.js +* @Author Jea杨(JJonline@JJonline.Cn) +* @Time 2014-7-21 +* @Time 2016-8-13 Fixed 2033hex、Attribution Annals +* @Time 2016-9-25 Fixed lunar LeapMonth Param Bug +* @Time 2017-7-24 Fixed use getTerm Func Param Error.use solar year,NOT lunar year +* @Version 1.0.3 +* @公历转农历:calendar.solar2lunar(1987,11,01); //[you can ignore params of prefix 0] +* @农历转公历:calendar.lunar2solar(1987,09,10); //[you can ignore params of prefix 0] +*/ +/* eslint-disable */ +var calendar = { + + /** + * 农历1900-2100的润大小信息表 + * @Array Of Property + * @return Hex + */ + lunarInfo: [0x04bd8, 0x04ae0, 0x0a570, 0x054d5, 0x0d260, 0x0d950, 0x16554, 0x056a0, 0x09ad0, 0x055d2, // 1900-1909 + 0x04ae0, 0x0a5b6, 0x0a4d0, 0x0d250, 0x1d255, 0x0b540, 0x0d6a0, 0x0ada2, 0x095b0, 0x14977, // 1910-1919 + 0x04970, 0x0a4b0, 0x0b4b5, 0x06a50, 0x06d40, 0x1ab54, 0x02b60, 0x09570, 0x052f2, 0x04970, // 1920-1929 + 0x06566, 0x0d4a0, 0x0ea50, 0x06e95, 0x05ad0, 0x02b60, 0x186e3, 0x092e0, 0x1c8d7, 0x0c950, // 1930-1939 + 0x0d4a0, 0x1d8a6, 0x0b550, 0x056a0, 0x1a5b4, 0x025d0, 0x092d0, 0x0d2b2, 0x0a950, 0x0b557, // 1940-1949 + 0x06ca0, 0x0b550, 0x15355, 0x04da0, 0x0a5b0, 0x14573, 0x052b0, 0x0a9a8, 0x0e950, 0x06aa0, // 1950-1959 + 0x0aea6, 0x0ab50, 0x04b60, 0x0aae4, 0x0a570, 0x05260, 0x0f263, 0x0d950, 0x05b57, 0x056a0, // 1960-1969 + 0x096d0, 0x04dd5, 0x04ad0, 0x0a4d0, 0x0d4d4, 0x0d250, 0x0d558, 0x0b540, 0x0b6a0, 0x195a6, // 1970-1979 + 0x095b0, 0x049b0, 0x0a974, 0x0a4b0, 0x0b27a, 0x06a50, 0x06d40, 0x0af46, 0x0ab60, 0x09570, // 1980-1989 + 0x04af5, 0x04970, 0x064b0, 0x074a3, 0x0ea50, 0x06b58, 0x05ac0, 0x0ab60, 0x096d5, 0x092e0, // 1990-1999 + 0x0c960, 0x0d954, 0x0d4a0, 0x0da50, 0x07552, 0x056a0, 0x0abb7, 0x025d0, 0x092d0, 0x0cab5, // 2000-2009 + 0x0a950, 0x0b4a0, 0x0baa4, 0x0ad50, 0x055d9, 0x04ba0, 0x0a5b0, 0x15176, 0x052b0, 0x0a930, // 2010-2019 + 0x07954, 0x06aa0, 0x0ad50, 0x05b52, 0x04b60, 0x0a6e6, 0x0a4e0, 0x0d260, 0x0ea65, 0x0d530, // 2020-2029 + 0x05aa0, 0x076a3, 0x096d0, 0x04afb, 0x04ad0, 0x0a4d0, 0x1d0b6, 0x0d250, 0x0d520, 0x0dd45, // 2030-2039 + 0x0b5a0, 0x056d0, 0x055b2, 0x049b0, 0x0a577, 0x0a4b0, 0x0aa50, 0x1b255, 0x06d20, 0x0ada0, // 2040-2049 + /** Add By JJonline@JJonline.Cn**/ + 0x14b63, 0x09370, 0x049f8, 0x04970, 0x064b0, 0x168a6, 0x0ea50, 0x06b20, 0x1a6c4, 0x0aae0, // 2050-2059 + 0x0a2e0, 0x0d2e3, 0x0c960, 0x0d557, 0x0d4a0, 0x0da50, 0x05d55, 0x056a0, 0x0a6d0, 0x055d4, // 2060-2069 + 0x052d0, 0x0a9b8, 0x0a950, 0x0b4a0, 0x0b6a6, 0x0ad50, 0x055a0, 0x0aba4, 0x0a5b0, 0x052b0, // 2070-2079 + 0x0b273, 0x06930, 0x07337, 0x06aa0, 0x0ad50, 0x14b55, 0x04b60, 0x0a570, 0x054e4, 0x0d160, // 2080-2089 + 0x0e968, 0x0d520, 0x0daa0, 0x16aa6, 0x056d0, 0x04ae0, 0x0a9d4, 0x0a2d0, 0x0d150, 0x0f252, // 2090-2099 + 0x0d520], // 2100 + + /** + * 公历每个月份的天数普通表 + * @Array Of Property + * @return Number + */ + solarMonth: [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31], + + /** + * 天干地支之天干速查表 + * @Array Of Property trans["甲","乙","丙","丁","戊","己","庚","辛","壬","癸"] + * @return Cn string + */ + Gan: ['\u7532', '\u4e59', '\u4e19', '\u4e01', '\u620a', '\u5df1', '\u5e9a', '\u8f9b', '\u58ec', '\u7678'], + + /** + * 天干地支之地支速查表 + * @Array Of Property + * @trans["子","丑","寅","卯","辰","巳","午","未","申","酉","戌","亥"] + * @return Cn string + */ + Zhi: ['\u5b50', '\u4e11', '\u5bc5', '\u536f', '\u8fb0', '\u5df3', '\u5348', '\u672a', '\u7533', '\u9149', '\u620c', '\u4ea5'], + + /** + * 天干地支之地支速查表<=>生肖 + * @Array Of Property + * @trans["鼠","牛","虎","兔","龙","蛇","马","羊","猴","鸡","狗","猪"] + * @return Cn string + */ + Animals: ['\u9f20', '\u725b', '\u864e', '\u5154', '\u9f99', '\u86c7', '\u9a6c', '\u7f8a', '\u7334', '\u9e21', '\u72d7', '\u732a'], + + /** + * 24节气速查表 + * @Array Of Property + * @trans["小寒","大寒","立春","雨水","惊蛰","春分","清明","谷雨","立夏","小满","芒种","夏至","小暑","大暑","立秋","处暑","白露","秋分","寒露","霜降","立冬","小雪","大雪","冬至"] + * @return Cn string + */ + solarTerm: ['\u5c0f\u5bd2', '\u5927\u5bd2', '\u7acb\u6625', '\u96e8\u6c34', '\u60ca\u86f0', '\u6625\u5206', '\u6e05\u660e', '\u8c37\u96e8', '\u7acb\u590f', '\u5c0f\u6ee1', '\u8292\u79cd', '\u590f\u81f3', '\u5c0f\u6691', '\u5927\u6691', '\u7acb\u79cb', '\u5904\u6691', '\u767d\u9732', '\u79cb\u5206', '\u5bd2\u9732', '\u971c\u964d', '\u7acb\u51ac', '\u5c0f\u96ea', '\u5927\u96ea', '\u51ac\u81f3'], + + /** + * 1900-2100各年的24节气日期速查表 + * @Array Of Property + * @return 0x string For splice + */ + sTermInfo: ['9778397bd097c36b0b6fc9274c91aa', '97b6b97bd19801ec9210c965cc920e', '97bcf97c3598082c95f8c965cc920f', + '97bd0b06bdb0722c965ce1cfcc920f', 'b027097bd097c36b0b6fc9274c91aa', '97b6b97bd19801ec9210c965cc920e', + '97bcf97c359801ec95f8c965cc920f', '97bd0b06bdb0722c965ce1cfcc920f', 'b027097bd097c36b0b6fc9274c91aa', + '97b6b97bd19801ec9210c965cc920e', '97bcf97c359801ec95f8c965cc920f', '97bd0b06bdb0722c965ce1cfcc920f', + 'b027097bd097c36b0b6fc9274c91aa', '9778397bd19801ec9210c965cc920e', '97b6b97bd19801ec95f8c965cc920f', + '97bd09801d98082c95f8e1cfcc920f', '97bd097bd097c36b0b6fc9210c8dc2', '9778397bd197c36c9210c9274c91aa', + '97b6b97bd19801ec95f8c965cc920e', '97bd09801d98082c95f8e1cfcc920f', '97bd097bd097c36b0b6fc9210c8dc2', + '9778397bd097c36c9210c9274c91aa', '97b6b97bd19801ec95f8c965cc920e', '97bcf97c3598082c95f8e1cfcc920f', + '97bd097bd097c36b0b6fc9210c8dc2', '9778397bd097c36c9210c9274c91aa', '97b6b97bd19801ec9210c965cc920e', + '97bcf97c3598082c95f8c965cc920f', '97bd097bd097c35b0b6fc920fb0722', '9778397bd097c36b0b6fc9274c91aa', + '97b6b97bd19801ec9210c965cc920e', '97bcf97c3598082c95f8c965cc920f', '97bd097bd097c35b0b6fc920fb0722', + '9778397bd097c36b0b6fc9274c91aa', '97b6b97bd19801ec9210c965cc920e', '97bcf97c359801ec95f8c965cc920f', + '97bd097bd097c35b0b6fc920fb0722', '9778397bd097c36b0b6fc9274c91aa', '97b6b97bd19801ec9210c965cc920e', + '97bcf97c359801ec95f8c965cc920f', '97bd097bd097c35b0b6fc920fb0722', '9778397bd097c36b0b6fc9274c91aa', + '97b6b97bd19801ec9210c965cc920e', '97bcf97c359801ec95f8c965cc920f', '97bd097bd07f595b0b6fc920fb0722', + '9778397bd097c36b0b6fc9210c8dc2', '9778397bd19801ec9210c9274c920e', '97b6b97bd19801ec95f8c965cc920f', + '97bd07f5307f595b0b0bc920fb0722', '7f0e397bd097c36b0b6fc9210c8dc2', '9778397bd097c36c9210c9274c920e', + '97b6b97bd19801ec95f8c965cc920f', '97bd07f5307f595b0b0bc920fb0722', '7f0e397bd097c36b0b6fc9210c8dc2', + '9778397bd097c36c9210c9274c91aa', '97b6b97bd19801ec9210c965cc920e', '97bd07f1487f595b0b0bc920fb0722', + '7f0e397bd097c36b0b6fc9210c8dc2', '9778397bd097c36b0b6fc9274c91aa', '97b6b97bd19801ec9210c965cc920e', + '97bcf7f1487f595b0b0bb0b6fb0722', '7f0e397bd097c35b0b6fc920fb0722', '9778397bd097c36b0b6fc9274c91aa', + '97b6b97bd19801ec9210c965cc920e', '97bcf7f1487f595b0b0bb0b6fb0722', '7f0e397bd097c35b0b6fc920fb0722', + '9778397bd097c36b0b6fc9274c91aa', '97b6b97bd19801ec9210c965cc920e', '97bcf7f1487f531b0b0bb0b6fb0722', + '7f0e397bd097c35b0b6fc920fb0722', '9778397bd097c36b0b6fc9274c91aa', '97b6b97bd19801ec9210c965cc920e', + '97bcf7f1487f531b0b0bb0b6fb0722', '7f0e397bd07f595b0b6fc920fb0722', '9778397bd097c36b0b6fc9274c91aa', + '97b6b97bd19801ec9210c9274c920e', '97bcf7f0e47f531b0b0bb0b6fb0722', '7f0e397bd07f595b0b0bc920fb0722', + '9778397bd097c36b0b6fc9210c91aa', '97b6b97bd197c36c9210c9274c920e', '97bcf7f0e47f531b0b0bb0b6fb0722', + '7f0e397bd07f595b0b0bc920fb0722', '9778397bd097c36b0b6fc9210c8dc2', '9778397bd097c36c9210c9274c920e', + '97b6b7f0e47f531b0723b0b6fb0722', '7f0e37f5307f595b0b0bc920fb0722', '7f0e397bd097c36b0b6fc9210c8dc2', + '9778397bd097c36b0b70c9274c91aa', '97b6b7f0e47f531b0723b0b6fb0721', '7f0e37f1487f595b0b0bb0b6fb0722', + '7f0e397bd097c35b0b6fc9210c8dc2', '9778397bd097c36b0b6fc9274c91aa', '97b6b7f0e47f531b0723b0b6fb0721', + '7f0e27f1487f595b0b0bb0b6fb0722', '7f0e397bd097c35b0b6fc920fb0722', '9778397bd097c36b0b6fc9274c91aa', + '97b6b7f0e47f531b0723b0b6fb0721', '7f0e27f1487f531b0b0bb0b6fb0722', '7f0e397bd097c35b0b6fc920fb0722', + '9778397bd097c36b0b6fc9274c91aa', '97b6b7f0e47f531b0723b0b6fb0721', '7f0e27f1487f531b0b0bb0b6fb0722', + '7f0e397bd097c35b0b6fc920fb0722', '9778397bd097c36b0b6fc9274c91aa', '97b6b7f0e47f531b0723b0b6fb0721', + '7f0e27f1487f531b0b0bb0b6fb0722', '7f0e397bd07f595b0b0bc920fb0722', '9778397bd097c36b0b6fc9274c91aa', + '97b6b7f0e47f531b0723b0787b0721', '7f0e27f0e47f531b0b0bb0b6fb0722', '7f0e397bd07f595b0b0bc920fb0722', + '9778397bd097c36b0b6fc9210c91aa', '97b6b7f0e47f149b0723b0787b0721', '7f0e27f0e47f531b0723b0b6fb0722', + '7f0e397bd07f595b0b0bc920fb0722', '9778397bd097c36b0b6fc9210c8dc2', '977837f0e37f149b0723b0787b0721', + '7f07e7f0e47f531b0723b0b6fb0722', '7f0e37f5307f595b0b0bc920fb0722', '7f0e397bd097c35b0b6fc9210c8dc2', + '977837f0e37f14998082b0787b0721', '7f07e7f0e47f531b0723b0b6fb0721', '7f0e37f1487f595b0b0bb0b6fb0722', + '7f0e397bd097c35b0b6fc9210c8dc2', '977837f0e37f14998082b0787b06bd', '7f07e7f0e47f531b0723b0b6fb0721', + '7f0e27f1487f531b0b0bb0b6fb0722', '7f0e397bd097c35b0b6fc920fb0722', '977837f0e37f14998082b0787b06bd', + '7f07e7f0e47f531b0723b0b6fb0721', '7f0e27f1487f531b0b0bb0b6fb0722', '7f0e397bd097c35b0b6fc920fb0722', + '977837f0e37f14998082b0787b06bd', '7f07e7f0e47f531b0723b0b6fb0721', '7f0e27f1487f531b0b0bb0b6fb0722', + '7f0e397bd07f595b0b0bc920fb0722', '977837f0e37f14998082b0787b06bd', '7f07e7f0e47f531b0723b0b6fb0721', + '7f0e27f1487f531b0b0bb0b6fb0722', '7f0e397bd07f595b0b0bc920fb0722', '977837f0e37f14998082b0787b06bd', + '7f07e7f0e47f149b0723b0787b0721', '7f0e27f0e47f531b0b0bb0b6fb0722', '7f0e397bd07f595b0b0bc920fb0722', + '977837f0e37f14998082b0723b06bd', '7f07e7f0e37f149b0723b0787b0721', '7f0e27f0e47f531b0723b0b6fb0722', + '7f0e397bd07f595b0b0bc920fb0722', '977837f0e37f14898082b0723b02d5', '7ec967f0e37f14998082b0787b0721', + '7f07e7f0e47f531b0723b0b6fb0722', '7f0e37f1487f595b0b0bb0b6fb0722', '7f0e37f0e37f14898082b0723b02d5', + '7ec967f0e37f14998082b0787b0721', '7f07e7f0e47f531b0723b0b6fb0722', '7f0e37f1487f531b0b0bb0b6fb0722', + '7f0e37f0e37f14898082b0723b02d5', '7ec967f0e37f14998082b0787b06bd', '7f07e7f0e47f531b0723b0b6fb0721', + '7f0e37f1487f531b0b0bb0b6fb0722', '7f0e37f0e37f14898082b072297c35', '7ec967f0e37f14998082b0787b06bd', + '7f07e7f0e47f531b0723b0b6fb0721', '7f0e27f1487f531b0b0bb0b6fb0722', '7f0e37f0e37f14898082b072297c35', + '7ec967f0e37f14998082b0787b06bd', '7f07e7f0e47f531b0723b0b6fb0721', '7f0e27f1487f531b0b0bb0b6fb0722', + '7f0e37f0e366aa89801eb072297c35', '7ec967f0e37f14998082b0787b06bd', '7f07e7f0e47f149b0723b0787b0721', + '7f0e27f1487f531b0b0bb0b6fb0722', '7f0e37f0e366aa89801eb072297c35', '7ec967f0e37f14998082b0723b06bd', + '7f07e7f0e47f149b0723b0787b0721', '7f0e27f0e47f531b0723b0b6fb0722', '7f0e37f0e366aa89801eb072297c35', + '7ec967f0e37f14998082b0723b06bd', '7f07e7f0e37f14998083b0787b0721', '7f0e27f0e47f531b0723b0b6fb0722', + '7f0e37f0e366aa89801eb072297c35', '7ec967f0e37f14898082b0723b02d5', '7f07e7f0e37f14998082b0787b0721', + '7f07e7f0e47f531b0723b0b6fb0722', '7f0e36665b66aa89801e9808297c35', '665f67f0e37f14898082b0723b02d5', + '7ec967f0e37f14998082b0787b0721', '7f07e7f0e47f531b0723b0b6fb0722', '7f0e36665b66a449801e9808297c35', + '665f67f0e37f14898082b0723b02d5', '7ec967f0e37f14998082b0787b06bd', '7f07e7f0e47f531b0723b0b6fb0721', + '7f0e36665b66a449801e9808297c35', '665f67f0e37f14898082b072297c35', '7ec967f0e37f14998082b0787b06bd', + '7f07e7f0e47f531b0723b0b6fb0721', '7f0e26665b66a449801e9808297c35', '665f67f0e37f1489801eb072297c35', + '7ec967f0e37f14998082b0787b06bd', '7f07e7f0e47f531b0723b0b6fb0721', '7f0e27f1487f531b0b0bb0b6fb0722'], + + /** + * 数字转中文速查表 + * @Array Of Property + * @trans ['日','一','二','三','四','五','六','七','八','九','十'] + * @return Cn string + */ + nStr1: ['\u65e5', '\u4e00', '\u4e8c', '\u4e09', '\u56db', '\u4e94', '\u516d', '\u4e03', '\u516b', '\u4e5d', '\u5341'], + + /** + * 日期转农历称呼速查表 + * @Array Of Property + * @trans ['初','十','廿','卅'] + * @return Cn string + */ + nStr2: ['\u521d', '\u5341', '\u5eff', '\u5345'], + + /** + * 月份转农历称呼速查表 + * @Array Of Property + * @trans ['正','一','二','三','四','五','六','七','八','九','十','冬','腊'] + * @return Cn string + */ + nStr3: ['\u6b63', '\u4e8c', '\u4e09', '\u56db', '\u4e94', '\u516d', '\u4e03', '\u516b', '\u4e5d', '\u5341', '\u51ac', '\u814a'], + + /** + * 返回农历y年一整年的总天数 + * @param lunar Year + * @return Number + * @eg:var count = calendar.lYearDays(1987) ;//count=387 + */ + lYearDays: function (y) { + var i; var sum = 348 + for (i = 0x8000; i > 0x8; i >>= 1) { sum += (this.lunarInfo[y - 1900] & i) ? 1 : 0 } + return (sum + this.leapDays(y)) + }, + + /** + * 返回农历y年闰月是哪个月;若y年没有闰月 则返回0 + * @param lunar Year + * @return Number (0-12) + * @eg:var leapMonth = calendar.leapMonth(1987) ;//leapMonth=6 + */ + leapMonth: function (y) { // 闰字编码 \u95f0 + return (this.lunarInfo[y - 1900] & 0xf) + }, + + /** + * 返回农历y年闰月的天数 若该年没有闰月则返回0 + * @param lunar Year + * @return Number (0、29、30) + * @eg:var leapMonthDay = calendar.leapDays(1987) ;//leapMonthDay=29 + */ + leapDays: function (y) { + if (this.leapMonth(y)) { + return ((this.lunarInfo[y - 1900] & 0x10000) ? 30 : 29) + } + return (0) + }, + + /** + * 返回农历y年m月(非闰月)的总天数,计算m为闰月时的天数请使用leapDays方法 + * @param lunar Year + * @return Number (-1、29、30) + * @eg:var MonthDay = calendar.monthDays(1987,9) ;//MonthDay=29 + */ + monthDays: function (y, m) { + if (m > 12 || m < 1) { return -1 }// 月份参数从1至12,参数错误返回-1 + return ((this.lunarInfo[y - 1900] & (0x10000 >> m)) ? 30 : 29) + }, + + /** + * 返回公历(!)y年m月的天数 + * @param solar Year + * @return Number (-1、28、29、30、31) + * @eg:var solarMonthDay = calendar.leapDays(1987) ;//solarMonthDay=30 + */ + solarDays: function (y, m) { + if (m > 12 || m < 1) { return -1 } // 若参数错误 返回-1 + var ms = m - 1 + if (ms == 1) { // 2月份的闰平规律测算后确认返回28或29 + return (((y % 4 == 0) && (y % 100 != 0) || (y % 400 == 0)) ? 29 : 28) + } else { + return (this.solarMonth[ms]) + } + }, + + /** + * 农历年份转换为干支纪年 + * @param lYear 农历年的年份数 + * @return Cn string + */ + toGanZhiYear: function (lYear) { + var ganKey = (lYear - 3) % 10 + var zhiKey = (lYear - 3) % 12 + if (ganKey == 0) ganKey = 10// 如果余数为0则为最后一个天干 + if (zhiKey == 0) zhiKey = 12// 如果余数为0则为最后一个地支 + return this.Gan[ganKey - 1] + this.Zhi[zhiKey - 1] + }, + + /** + * 公历月、日判断所属星座 + * @param cMonth [description] + * @param cDay [description] + * @return Cn string + */ + toAstro: function (cMonth, cDay) { + var s = '\u9b54\u7faf\u6c34\u74f6\u53cc\u9c7c\u767d\u7f8a\u91d1\u725b\u53cc\u5b50\u5de8\u87f9\u72ee\u5b50\u5904\u5973\u5929\u79e4\u5929\u874e\u5c04\u624b\u9b54\u7faf' + var arr = [20, 19, 21, 21, 21, 22, 23, 23, 23, 23, 22, 22] + return s.substr(cMonth * 2 - (cDay < arr[cMonth - 1] ? 2 : 0), 2) + '\u5ea7'// 座 + }, + + /** + * 传入offset偏移量返回干支 + * @param offset 相对甲子的偏移量 + * @return Cn string + */ + toGanZhi: function (offset) { + return this.Gan[offset % 10] + this.Zhi[offset % 12] + }, + + /** + * 传入公历(!)y年获得该年第n个节气的公历日期 + * @param y公历年(1900-2100);n二十四节气中的第几个节气(1~24);从n=1(小寒)算起 + * @return day Number + * @eg:var _24 = calendar.getTerm(1987,3) ;//_24=4;意即1987年2月4日立春 + */ + getTerm: function (y, n) { + if (y < 1900 || y > 2100) { return -1 } + if (n < 1 || n > 24) { return -1 } + var _table = this.sTermInfo[y - 1900] + var _info = [ + parseInt('0x' + _table.substr(0, 5)).toString(), + parseInt('0x' + _table.substr(5, 5)).toString(), + parseInt('0x' + _table.substr(10, 5)).toString(), + parseInt('0x' + _table.substr(15, 5)).toString(), + parseInt('0x' + _table.substr(20, 5)).toString(), + parseInt('0x' + _table.substr(25, 5)).toString() + ] + var _calday = [ + _info[0].substr(0, 1), + _info[0].substr(1, 2), + _info[0].substr(3, 1), + _info[0].substr(4, 2), + + _info[1].substr(0, 1), + _info[1].substr(1, 2), + _info[1].substr(3, 1), + _info[1].substr(4, 2), + + _info[2].substr(0, 1), + _info[2].substr(1, 2), + _info[2].substr(3, 1), + _info[2].substr(4, 2), + + _info[3].substr(0, 1), + _info[3].substr(1, 2), + _info[3].substr(3, 1), + _info[3].substr(4, 2), + + _info[4].substr(0, 1), + _info[4].substr(1, 2), + _info[4].substr(3, 1), + _info[4].substr(4, 2), + + _info[5].substr(0, 1), + _info[5].substr(1, 2), + _info[5].substr(3, 1), + _info[5].substr(4, 2) + ] + return parseInt(_calday[n - 1]) + }, + + /** + * 传入农历数字月份返回汉语通俗表示法 + * @param lunar month + * @return Cn string + * @eg:var cnMonth = calendar.toChinaMonth(12) ;//cnMonth='腊月' + */ + toChinaMonth: function (m) { // 月 => \u6708 + if (m > 12 || m < 1) { return -1 } // 若参数错误 返回-1 + var s = this.nStr3[m - 1] + s += '\u6708'// 加上月字 + return s + }, + + /** + * 传入农历日期数字返回汉字表示法 + * @param lunar day + * @return Cn string + * @eg:var cnDay = calendar.toChinaDay(21) ;//cnMonth='廿一' + */ + toChinaDay: function (d) { // 日 => \u65e5 + var s + switch (d) { + case 10: + s = '\u521d\u5341'; break + case 20: + s = '\u4e8c\u5341'; break + break + case 30: + s = '\u4e09\u5341'; break + break + default : + s = this.nStr2[Math.floor(d / 10)] + s += this.nStr1[d % 10] + } + return (s) + }, + + /** + * 年份转生肖[!仅能大致转换] => 精确划分生肖分界线是“立春” + * @param y year + * @return Cn string + * @eg:var animal = calendar.getAnimal(1987) ;//animal='兔' + */ + getAnimal: function (y) { + return this.Animals[(y - 4) % 12] + }, + + /** + * 传入阳历年月日获得详细的公历、农历object信息 <=>JSON + * @param y solar year + * @param m solar month + * @param d solar day + * @return JSON object + * @eg:console.log(calendar.solar2lunar(1987,11,01)); + */ + solar2lunar: function (y, m, d) { // 参数区间1900.1.31~2100.12.31 + // 年份限定、上限 + if (y < 1900 || y > 2100) { + return -1// undefined转换为数字变为NaN + } + // 公历传参最下限 + if (y == 1900 && m == 1 && d < 31) { + return -1 + } + // 未传参 获得当天 + if (!y) { + var objDate = new Date() + } else { + var objDate = new Date(y, parseInt(m) - 1, d) + } + var i; var leap = 0; var temp = 0 + // 修正ymd参数 + var y = objDate.getFullYear() + var m = objDate.getMonth() + 1 + var d = objDate.getDate() + var offset = (Date.UTC(objDate.getFullYear(), objDate.getMonth(), objDate.getDate()) - Date.UTC(1900, 0, 31)) / 86400000 + for (i = 1900; i < 2101 && offset > 0; i++) { + temp = this.lYearDays(i) + offset -= temp + } + if (offset < 0) { + offset += temp; i-- + } + + // 是否今天 + var isTodayObj = new Date() + var isToday = false + if (isTodayObj.getFullYear() == y && isTodayObj.getMonth() + 1 == m && isTodayObj.getDate() == d) { + isToday = true + } + // 星期几 + var nWeek = objDate.getDay() + var cWeek = this.nStr1[nWeek] + // 数字表示周几顺应天朝周一开始的惯例 + if (nWeek == 0) { + nWeek = 7 + } + // 农历年 + var year = i + var leap = this.leapMonth(i) // 闰哪个月 + var isLeap = false + + // 效验闰月 + for (i = 1; i < 13 && offset > 0; i++) { + // 闰月 + if (leap > 0 && i == (leap + 1) && isLeap == false) { + --i + isLeap = true; temp = this.leapDays(year) // 计算农历闰月天数 + } else { + temp = this.monthDays(year, i)// 计算农历普通月天数 + } + // 解除闰月 + if (isLeap == true && i == (leap + 1)) { isLeap = false } + offset -= temp + } + // 闰月导致数组下标重叠取反 + if (offset == 0 && leap > 0 && i == leap + 1) { + if (isLeap) { + isLeap = false + } else { + isLeap = true; --i + } + } + if (offset < 0) { + offset += temp; --i + } + // 农历月 + var month = i + // 农历日 + var day = offset + 1 + // 天干地支处理 + var sm = m - 1 + var gzY = this.toGanZhiYear(year) + + // 当月的两个节气 + // bugfix-2017-7-24 11:03:38 use lunar Year Param `y` Not `year` + var firstNode = this.getTerm(y, (m * 2 - 1))// 返回当月「节」为几日开始 + var secondNode = this.getTerm(y, (m * 2))// 返回当月「节」为几日开始 + + // 依据12节气修正干支月 + var gzM = this.toGanZhi((y - 1900) * 12 + m + 11) + if (d >= firstNode) { + gzM = this.toGanZhi((y - 1900) * 12 + m + 12) + } + + // 传入的日期的节气与否 + var isTerm = false + var Term = null + if (firstNode == d) { + isTerm = true + Term = this.solarTerm[m * 2 - 2] + } + if (secondNode == d) { + isTerm = true + Term = this.solarTerm[m * 2 - 1] + } + // 日柱 当月一日与 1900/1/1 相差天数 + var dayCyclical = Date.UTC(y, sm, 1, 0, 0, 0, 0) / 86400000 + 25567 + 10 + var gzD = this.toGanZhi(dayCyclical + d - 1) + // 该日期所属的星座 + var astro = this.toAstro(m, d) + + return { 'lYear': year, 'lMonth': month, 'lDay': day, 'Animal': this.getAnimal(year), 'IMonthCn': (isLeap ? '\u95f0' : '') + this.toChinaMonth(month), 'IDayCn': this.toChinaDay(day), 'cYear': y, 'cMonth': m, 'cDay': d, 'gzYear': gzY, 'gzMonth': gzM, 'gzDay': gzD, 'isToday': isToday, 'isLeap': isLeap, 'nWeek': nWeek, 'ncWeek': '\u661f\u671f' + cWeek, 'isTerm': isTerm, 'Term': Term, 'astro': astro } + }, + + /** + * 传入农历年月日以及传入的月份是否闰月获得详细的公历、农历object信息 <=>JSON + * @param y lunar year + * @param m lunar month + * @param d lunar day + * @param isLeapMonth lunar month is leap or not.[如果是农历闰月第四个参数赋值true即可] + * @return JSON object + * @eg:console.log(calendar.lunar2solar(1987,9,10)); + */ + lunar2solar: function (y, m, d, isLeapMonth) { // 参数区间1900.1.31~2100.12.1 + var isLeapMonth = !!isLeapMonth + var leapOffset = 0 + var leapMonth = this.leapMonth(y) + var leapDay = this.leapDays(y) + if (isLeapMonth && (leapMonth != m)) { return -1 }// 传参要求计算该闰月公历 但该年得出的闰月与传参的月份并不同 + if (y == 2100 && m == 12 && d > 1 || y == 1900 && m == 1 && d < 31) { return -1 }// 超出了最大极限值 + var day = this.monthDays(y, m) + var _day = day + // bugFix 2016-9-25 + // if month is leap, _day use leapDays method + if (isLeapMonth) { + _day = this.leapDays(y, m) + } + if (y < 1900 || y > 2100 || d > _day) { return -1 }// 参数合法性效验 + + // 计算农历的时间差 + var offset = 0 + for (var i = 1900; i < y; i++) { + offset += this.lYearDays(i) + } + var leap = 0; var isAdd = false + for (var i = 1; i < m; i++) { + leap = this.leapMonth(y) + if (!isAdd) { // 处理闰月 + if (leap <= i && leap > 0) { + offset += this.leapDays(y); isAdd = true + } + } + offset += this.monthDays(y, i) + } + // 转换闰月农历 需补充该年闰月的前一个月的时差 + if (isLeapMonth) { offset += day } + // 1900年农历正月一日的公历时间为1900年1月30日0时0分0秒(该时间也是本农历的最开始起始点) + var stmap = Date.UTC(1900, 1, 30, 0, 0, 0) + var calObj = new Date((offset + d - 31) * 86400000 + stmap) + var cY = calObj.getUTCFullYear() + var cM = calObj.getUTCMonth() + 1 + var cD = calObj.getUTCDate() + + return this.solar2lunar(cY, cM, cD) + } +} + +export default calendar diff --git a/uni_modules/uni-calendar/components/uni-calendar/i18n/en.json b/uni_modules/uni-calendar/components/uni-calendar/i18n/en.json new file mode 100644 index 0000000..526a4f3 --- /dev/null +++ b/uni_modules/uni-calendar/components/uni-calendar/i18n/en.json @@ -0,0 +1,12 @@ +{ + "uni-calender.ok": "ok", + "uni-calender.cancel": "cancel", + "uni-calender.today": "today", + "uni-calender.MON": "MON", + "uni-calender.TUE": "TUE", + "uni-calender.WED": "WED", + "uni-calender.THU": "THU", + "uni-calender.FRI": "FRI", + "uni-calender.SAT": "SAT", + "uni-calender.SUN": "SUN" +} diff --git a/uni_modules/uni-calendar/components/uni-calendar/i18n/index.js b/uni_modules/uni-calendar/components/uni-calendar/i18n/index.js new file mode 100644 index 0000000..fa8f0f3 --- /dev/null +++ b/uni_modules/uni-calendar/components/uni-calendar/i18n/index.js @@ -0,0 +1,8 @@ +import en from './en.json' +import zhHans from './zh-Hans.json' +import zhHant from './zh-Hant.json' +export default { + en, + 'zh-Hans': zhHans, + 'zh-Hant': zhHant +} diff --git a/uni_modules/uni-calendar/components/uni-calendar/i18n/zh-Hans.json b/uni_modules/uni-calendar/components/uni-calendar/i18n/zh-Hans.json new file mode 100644 index 0000000..4d959a4 --- /dev/null +++ b/uni_modules/uni-calendar/components/uni-calendar/i18n/zh-Hans.json @@ -0,0 +1,12 @@ +{ + "uni-calender.ok": "确定", + "uni-calender.cancel": "取消", + "uni-calender.today": "今日", + "uni-calender.SUN": "日", + "uni-calender.MON": "一", + "uni-calender.TUE": "二", + "uni-calender.WED": "三", + "uni-calender.THU": "四", + "uni-calender.FRI": "五", + "uni-calender.SAT": "六" +} diff --git a/uni_modules/uni-calendar/components/uni-calendar/i18n/zh-Hant.json b/uni_modules/uni-calendar/components/uni-calendar/i18n/zh-Hant.json new file mode 100644 index 0000000..8dabf81 --- /dev/null +++ b/uni_modules/uni-calendar/components/uni-calendar/i18n/zh-Hant.json @@ -0,0 +1,12 @@ +{ + "uni-calender.ok": "確定", + "uni-calender.cancel": "取消", + "uni-calender.today": "今日", + "uni-calender.SUN": "日", + "uni-calender.MON": "一", + "uni-calender.TUE": "二", + "uni-calender.WED": "三", + "uni-calender.THU": "四", + "uni-calender.FRI": "五", + "uni-calender.SAT": "六" +} diff --git a/uni_modules/uni-calendar/components/uni-calendar/uni-calendar-item.vue b/uni_modules/uni-calendar/components/uni-calendar/uni-calendar-item.vue new file mode 100644 index 0000000..d29ead5 --- /dev/null +++ b/uni_modules/uni-calendar/components/uni-calendar/uni-calendar-item.vue @@ -0,0 +1,188 @@ + + + + + diff --git a/uni_modules/uni-calendar/components/uni-calendar/uni-calendar.vue b/uni_modules/uni-calendar/components/uni-calendar/uni-calendar.vue new file mode 100644 index 0000000..1273d76 --- /dev/null +++ b/uni_modules/uni-calendar/components/uni-calendar/uni-calendar.vue @@ -0,0 +1,562 @@ + + + + + diff --git a/uni_modules/uni-calendar/components/uni-calendar/util.js b/uni_modules/uni-calendar/components/uni-calendar/util.js new file mode 100644 index 0000000..671f61e --- /dev/null +++ b/uni_modules/uni-calendar/components/uni-calendar/util.js @@ -0,0 +1,360 @@ +import CALENDAR from './calendar.js' + +class Calendar { + constructor({ + date, + selected, + startDate, + endDate, + range + } = {}) { + // 当前日期 + this.date = this.getDate(new Date()) // 当前初入日期 + // 打点信息 + this.selected = selected || []; + // 范围开始 + this.startDate = startDate + // 范围结束 + this.endDate = endDate + this.range = range + // 多选状态 + this.cleanMultipleStatus() + // 每周日期 + this.weeks = {} + // this._getWeek(this.date.fullDate) + } + /** + * 设置日期 + * @param {Object} date + */ + setDate(date) { + this.selectDate = this.getDate(date) + this._getWeek(this.selectDate.fullDate) + } + + /** + * 清理多选状态 + */ + cleanMultipleStatus() { + this.multipleStatus = { + before: '', + after: '', + data: [] + } + } + + /** + * 重置开始日期 + */ + resetSatrtDate(startDate) { + // 范围开始 + this.startDate = startDate + + } + + /** + * 重置结束日期 + */ + resetEndDate(endDate) { + // 范围结束 + this.endDate = endDate + } + + /** + * 获取任意时间 + */ + getDate(date, AddDayCount = 0, str = 'day') { + if (!date) { + date = new Date() + } + if (typeof date !== 'object') { + date = date.replace(/-/g, '/') + } + const dd = new Date(date) + switch (str) { + case 'day': + dd.setDate(dd.getDate() + AddDayCount) // 获取AddDayCount天后的日期 + break + case 'month': + if (dd.getDate() === 31 && AddDayCount>0) { + dd.setDate(dd.getDate() + AddDayCount) + } else { + const preMonth = dd.getMonth() + dd.setMonth(preMonth + AddDayCount) // 获取AddDayCount天后的日期 + const nextMonth = dd.getMonth() + // 处理 pre 切换月份目标月份为2月没有当前日(30 31) 切换错误问题 + if(AddDayCount<0 && preMonth!==0 && nextMonth-preMonth>AddDayCount){ + dd.setMonth(nextMonth+(nextMonth-preMonth+AddDayCount)) + } + // 处理 next 切换月份目标月份为2月没有当前日(30 31) 切换错误问题 + if(AddDayCount>0 && nextMonth-preMonth>AddDayCount){ + dd.setMonth(nextMonth-(nextMonth-preMonth-AddDayCount)) + } + } + break + case 'year': + dd.setFullYear(dd.getFullYear() + AddDayCount) // 获取AddDayCount天后的日期 + break + } + const y = dd.getFullYear() + const m = dd.getMonth() + 1 < 10 ? '0' + (dd.getMonth() + 1) : dd.getMonth() + 1 // 获取当前月份的日期,不足10补0 + const d = dd.getDate() < 10 ? '0' + dd.getDate() : dd.getDate() // 获取当前几号,不足10补0 + return { + fullDate: y + '-' + m + '-' + d, + year: y, + month: m, + date: d, + day: dd.getDay() + } + } + + + /** + * 获取上月剩余天数 + */ + _getLastMonthDays(firstDay, full) { + let dateArr = [] + for (let i = firstDay; i > 0; i--) { + const beforeDate = new Date(full.year, full.month - 1, -i + 1).getDate() + dateArr.push({ + date: beforeDate, + month: full.month - 1, + lunar: this.getlunar(full.year, full.month - 1, beforeDate), + disable: true + }) + } + return dateArr + } + /** + * 获取本月天数 + */ + _currentMonthDys(dateData, full) { + let dateArr = [] + let fullDate = this.date.fullDate + for (let i = 1; i <= dateData; i++) { + let nowDate = full.year + '-' + (full.month < 10 ? + full.month : full.month) + '-' + (i < 10 ? + '0' + i : i) + // 是否今天 + let isDay = fullDate === nowDate + // 获取打点信息 + let info = this.selected && this.selected.find((item) => { + if (this.dateEqual(nowDate, item.date)) { + return item + } + }) + + // 日期禁用 + let disableBefore = true + let disableAfter = true + if (this.startDate) { + // let dateCompBefore = this.dateCompare(this.startDate, fullDate) + // disableBefore = this.dateCompare(dateCompBefore ? this.startDate : fullDate, nowDate) + disableBefore = this.dateCompare(this.startDate, nowDate) + } + + if (this.endDate) { + // let dateCompAfter = this.dateCompare(fullDate, this.endDate) + // disableAfter = this.dateCompare(nowDate, dateCompAfter ? this.endDate : fullDate) + disableAfter = this.dateCompare(nowDate, this.endDate) + } + let multiples = this.multipleStatus.data + let checked = false + let multiplesStatus = -1 + if (this.range) { + if (multiples) { + multiplesStatus = multiples.findIndex((item) => { + return this.dateEqual(item, nowDate) + }) + } + if (multiplesStatus !== -1) { + checked = true + } + } + let data = { + fullDate: nowDate, + year: full.year, + date: i, + multiple: this.range ? checked : false, + beforeMultiple: this.dateEqual(this.multipleStatus.before, nowDate), + afterMultiple: this.dateEqual(this.multipleStatus.after, nowDate), + month: full.month, + lunar: this.getlunar(full.year, full.month, i), + disable: !(disableBefore && disableAfter), + isDay + } + if (info) { + data.extraInfo = info + } + + dateArr.push(data) + } + return dateArr + } + /** + * 获取下月天数 + */ + _getNextMonthDays(surplus, full) { + let dateArr = [] + for (let i = 1; i < surplus + 1; i++) { + dateArr.push({ + date: i, + month: Number(full.month) + 1, + lunar: this.getlunar(full.year, Number(full.month) + 1, i), + disable: true + }) + } + return dateArr + } + + /** + * 获取当前日期详情 + * @param {Object} date + */ + getInfo(date) { + if (!date) { + date = new Date() + } + const dateInfo = this.canlender.find(item => item.fullDate === this.getDate(date).fullDate) + return dateInfo + } + + /** + * 比较时间大小 + */ + dateCompare(startDate, endDate) { + // 计算截止时间 + startDate = new Date(startDate.replace('-', '/').replace('-', '/')) + // 计算详细项的截止时间 + endDate = new Date(endDate.replace('-', '/').replace('-', '/')) + if (startDate <= endDate) { + return true + } else { + return false + } + } + + /** + * 比较时间是否相等 + */ + dateEqual(before, after) { + // 计算截止时间 + before = new Date(before.replace('-', '/').replace('-', '/')) + // 计算详细项的截止时间 + after = new Date(after.replace('-', '/').replace('-', '/')) + if (before.getTime() - after.getTime() === 0) { + return true + } else { + return false + } + } + + + /** + * 获取日期范围内所有日期 + * @param {Object} begin + * @param {Object} end + */ + geDateAll(begin, end) { + var arr = [] + var ab = begin.split('-') + var ae = end.split('-') + var db = new Date() + db.setFullYear(ab[0], ab[1] - 1, ab[2]) + var de = new Date() + de.setFullYear(ae[0], ae[1] - 1, ae[2]) + var unixDb = db.getTime() - 24 * 60 * 60 * 1000 + var unixDe = de.getTime() - 24 * 60 * 60 * 1000 + for (var k = unixDb; k <= unixDe;) { + k = k + 24 * 60 * 60 * 1000 + arr.push(this.getDate(new Date(parseInt(k))).fullDate) + } + return arr + } + /** + * 计算阴历日期显示 + */ + getlunar(year, month, date) { + return CALENDAR.solar2lunar(year, month, date) + } + /** + * 设置打点 + */ + setSelectInfo(data, value) { + this.selected = value + this._getWeek(data) + } + + /** + * 获取多选状态 + */ + setMultiple(fullDate) { + let { + before, + after + } = this.multipleStatus + + if (!this.range) return + if (before && after) { + this.multipleStatus.before = '' + this.multipleStatus.after = '' + this.multipleStatus.data = [] + } else { + if (!before) { + this.multipleStatus.before = fullDate + } else { + this.multipleStatus.after = fullDate + if (this.dateCompare(this.multipleStatus.before, this.multipleStatus.after)) { + this.multipleStatus.data = this.geDateAll(this.multipleStatus.before, this.multipleStatus.after); + } else { + this.multipleStatus.data = this.geDateAll(this.multipleStatus.after, this.multipleStatus.before); + } + } + } + this._getWeek(fullDate) + } + + /** + * 获取每周数据 + * @param {Object} dateData + */ + _getWeek(dateData) { + const { + year, + month + } = this.getDate(dateData) + let firstDay = new Date(year, month - 1, 1).getDay() + let currentDay = new Date(year, month, 0).getDate() + let dates = { + lastMonthDays: this._getLastMonthDays(firstDay, this.getDate(dateData)), // 上个月末尾几天 + currentMonthDys: this._currentMonthDys(currentDay, this.getDate(dateData)), // 本月天数 + nextMonthDays: [], // 下个月开始几天 + weeks: [] + } + let canlender = [] + const surplus = 42 - (dates.lastMonthDays.length + dates.currentMonthDys.length) + dates.nextMonthDays = this._getNextMonthDays(surplus, this.getDate(dateData)) + canlender = canlender.concat(dates.lastMonthDays, dates.currentMonthDys, dates.nextMonthDays) + let weeks = {} + // 拼接数组 上个月开始几天 + 本月天数+ 下个月开始几天 + for (let i = 0; i < canlender.length; i++) { + if (i % 7 === 0) { + weeks[parseInt(i / 7)] = new Array(7) + } + weeks[parseInt(i / 7)][i % 7] = canlender[i] + } + this.canlender = canlender + this.weeks = weeks + } + + //静态方法 + // static init(date) { + // if (!this.instance) { + // this.instance = new Calendar(date); + // } + // return this.instance; + // } +} + + +export default Calendar diff --git a/uni_modules/uni-calendar/package.json b/uni_modules/uni-calendar/package.json new file mode 100644 index 0000000..713a2c4 --- /dev/null +++ b/uni_modules/uni-calendar/package.json @@ -0,0 +1,85 @@ +{ + "id": "uni-calendar", + "displayName": "uni-calendar 日历", + "version": "1.4.9", + "description": "日历组件", + "keywords": [ + "uni-ui", + "uniui", + "日历", + "", + "打卡", + "日历选择" +], + "repository": "https://github.com/dcloudio/uni-ui", + "engines": { + "HBuilderX": "" + }, + "directories": { + "example": "../../temps/example_temps" + }, +"dcloudext": { + "sale": { + "regular": { + "price": "0.00" + }, + "sourcecode": { + "price": "0.00" + } + }, + "contact": { + "qq": "" + }, + "declaration": { + "ads": "无", + "data": "无", + "permissions": "无" + }, + "npmurl": "https://www.npmjs.com/package/@dcloudio/uni-ui", + "type": "component-vue" + }, + "uni_modules": { + "dependencies": [], + "encrypt": [], + "platforms": { + "cloud": { + "tcb": "y", + "aliyun": "y" + }, + "client": { + "App": { + "app-vue": "y", + "app-nvue": "y" + }, + "H5-mobile": { + "Safari": "y", + "Android Browser": "y", + "微信浏览器(Android)": "y", + "QQ浏览器(Android)": "y" + }, + "H5-pc": { + "Chrome": "y", + "IE": "y", + "Edge": "y", + "Firefox": "y", + "Safari": "y" + }, + "小程序": { + "微信": "y", + "阿里": "y", + "百度": "y", + "字节跳动": "y", + "QQ": "y" + }, + "快应用": { + "华为": "u", + "联盟": "u" + }, + "Vue": { + "vue2": "y", + "vue3": "y" + } + } + } + } +} \ No newline at end of file diff --git a/uni_modules/uni-calendar/readme.md b/uni_modules/uni-calendar/readme.md new file mode 100644 index 0000000..4f3ca0e --- /dev/null +++ b/uni_modules/uni-calendar/readme.md @@ -0,0 +1,103 @@ + + +## Calendar 日历 +> **组件名:uni-calendar** +> 代码块: `uCalendar` + + +日历组件 + +> **注意事项** +> 为了避免错误使用,给大家带来不好的开发体验,请在使用组件前仔细阅读下面的注意事项,可以帮你避免一些错误。 +> - 本组件农历转换使用的js是 [@1900-2100区间内的公历、农历互转](https://github.com/jjonline/calendar.js) +> - 仅支持自定义组件模式 +> - `date`属性传入的应该是一个 String ,如: 2019-06-27 ,而不是 new Date() +> - 通过 `insert` 属性来确定当前的事件是 @change 还是 @confirm 。理应合并为一个事件,但是为了区分模式,现使用两个事件,这里需要注意 +> - 弹窗模式下无法阻止后面的元素滚动,如有需要阻止,请在弹窗弹出后,手动设置滚动元素为不可滚动 + + +### 安装方式 + +本组件符合[easycom](https://uniapp.dcloud.io/collocation/pages?id=easycom)规范,`HBuilderX 2.5.5`起,只需将本组件导入项目,在页面`template`中即可直接使用,无需在页面中`import`和注册`components`。 + +如需通过`npm`方式使用`uni-ui`组件,另见文档:[https://ext.dcloud.net.cn/plugin?id=55](https://ext.dcloud.net.cn/plugin?id=55) + +### 基本用法 + +在 ``template`` 中使用组件 + +```html + + + +``` + +### 通过方法打开日历 + +需要设置 `insert` 为 `false` + +```html + + + + +``` + +```javascript + +export default { + data() { + return {}; + }, + methods: { + open(){ + this.$refs.calendar.open(); + }, + confirm(e) { + console.log(e); + } + } +}; + +``` + + +## API + +### Calendar Props + +| 属性名 | 类型 | 默认值| 说明 | +| | | +| date | String |- | 自定义当前时间,默认为今天 | +| lunar | Boolean | false | 显示农历 | +| startDate | String |- | 日期选择范围-开始日期 | +| endDate | String |- | 日期选择范围-结束日期 | +| range | Boolean | false | 范围选择 | +| insert | Boolean | false | 插入模式,可选值,ture:插入模式;false:弹窗模式;默认为插入模式 | +|clearDate |Boolean |true |弹窗模式是否清空上次选择内容 | +| selected | Array |- | 打点,期待格式[{date: '2019-06-27', info: '签到', data: { custom: '自定义信息', name: '自定义消息头',xxx:xxx... }}] | +|showMonth | Boolean | true | 是否显示月份为背景 | + +### Calendar Events + +| 事件名 | 说明 |返回值| +| | | | +| open | 弹出日历组件,`insert :false` 时生效|- | + + + + + +## 组件示例 + +点击查看:[https://hellouniapp.dcloud.net.cn/pages/extUI/calendar/calendar](https://hellouniapp.dcloud.net.cn/pages/extUI/calendar/calendar) \ No newline at end of file diff --git a/uni_modules/uni-data-select/changelog.md b/uni_modules/uni-data-select/changelog.md new file mode 100644 index 0000000..dd87dbb --- /dev/null +++ b/uni_modules/uni-data-select/changelog.md @@ -0,0 +1,33 @@ +## 1.0.5(2023-02-03) +- 修复 禁用时会显示清空按钮 +## 1.0.4(2023-02-02) +- 优化 查询条件短期内多次变更只查询最后一次变更后的结果 +- 调整 内部缓存键名调整为 uni-data-select-lastSelectedValue +## 1.0.3(2023-01-16) +- 修复 不关联服务空间报错的问题 +## 1.0.2(2023-01-14) +- 新增 属性 `format` 可用于格式化显示选项内容 +## 1.0.1(2022-12-06) +- 修复 当where变化时,数据不会自动更新的问题 +## 0.1.9(2022-09-05) +- 修复 微信小程序下拉框出现后选择会点击到蒙板后面的输入框 +## 0.1.8(2022-08-29) +- 修复 点击的位置不准确 +## 0.1.7(2022-08-12) +- 新增 支持 disabled 属性 +## 0.1.6(2022-07-06) +- 修复 pc端宽度异常的bug +## 0.1.5 +- 修复 pc端宽度异常的bug +## 0.1.4(2022-07-05) +- 优化 显示样式 +## 0.1.3(2022-06-02) +- 修复 localdata 赋值不生效的 bug +- 新增 支持 uni.scss 修改颜色 +- 新增 支持选项禁用(数据选项设置 disabled: true 即禁用) +## 0.1.2(2022-05-08) +- 修复 当 value 为 0 时选择不生效的 bug +## 0.1.1(2022-05-07) +- 新增 记住上次的选项(仅 collection 存在时有效) +## 0.1.0(2022-04-22) +- 初始化 diff --git a/uni_modules/uni-data-select/components/uni-data-select/uni-data-select.vue b/uni_modules/uni-data-select/components/uni-data-select/uni-data-select.vue new file mode 100644 index 0000000..2c2a9ac --- /dev/null +++ b/uni_modules/uni-data-select/components/uni-data-select/uni-data-select.vue @@ -0,0 +1,502 @@ + + + + + diff --git a/uni_modules/uni-data-select/package.json b/uni_modules/uni-data-select/package.json new file mode 100644 index 0000000..3d40897 --- /dev/null +++ b/uni_modules/uni-data-select/package.json @@ -0,0 +1,85 @@ +{ + "id": "uni-data-select", + "displayName": "uni-data-select 下拉框选择器", + "version": "1.0.5", + "description": "通过数据驱动的下拉框选择器", + "keywords": [ + "uni-ui", + "select", + "uni-data-select", + "下拉框", + "下拉选" +], + "repository": "https://github.com/dcloudio/uni-ui", + "engines": { + "HBuilderX": "^3.1.1" + }, + "directories": { + "example": "../../temps/example_temps" + }, +"dcloudext": { + "sale": { + "regular": { + "price": "0.00" + }, + "sourcecode": { + "price": "0.00" + } + }, + "contact": { + "qq": "" + }, + "declaration": { + "ads": "无", + "data": "无", + "permissions": "无" + }, + "npmurl": "https://www.npmjs.com/package/@dcloudio/uni-ui", + "type": "component-vue" + }, + "uni_modules": { + "dependencies": ["uni-load-more"], + "encrypt": [], + "platforms": { + "cloud": { + "tcb": "y", + "aliyun": "y" + }, + "client": { + "App": { + "app-vue": "u", + "app-nvue": "n" + }, + "H5-mobile": { + "Safari": "y", + "Android Browser": "y", + "微信浏览器(Android)": "y", + "QQ浏览器(Android)": "y" + }, + "H5-pc": { + "Chrome": "y", + "IE": "y", + "Edge": "y", + "Firefox": "y", + "Safari": "y" + }, + "小程序": { + "微信": "y", + "阿里": "u", + "百度": "u", + "字节跳动": "u", + "QQ": "u", + "京东": "u" + }, + "快应用": { + "华为": "u", + "联盟": "u" + }, + "Vue": { + "vue2": "y", + "vue3": "y" + } + } + } + } +} diff --git a/uni_modules/uni-data-select/readme.md b/uni_modules/uni-data-select/readme.md new file mode 100644 index 0000000..eb58de3 --- /dev/null +++ b/uni_modules/uni-data-select/readme.md @@ -0,0 +1,8 @@ +## DataSelect 下拉框选择器 +> **组件名:uni-data-select** +> 代码块: `uDataSelect` + +当选项过多时,使用下拉菜单展示并选择内容 + +### [查看文档](https://uniapp.dcloud.io/component/uniui/uni-data-select) +#### 如使用过程中有任何问题,或者您对uni-ui有一些好的建议,欢迎加入 uni-ui 交流群:871950839 diff --git a/uni_modules/uni-file-picker/changelog.md b/uni_modules/uni-file-picker/changelog.md new file mode 100644 index 0000000..b8230e9 --- /dev/null +++ b/uni_modules/uni-file-picker/changelog.md @@ -0,0 +1,67 @@ +## 1.0.4(2023-03-29) +- 修复 手动上传删除一个文件后不能再上传的bug +## 1.0.3(2022-12-19) +- 新增 sourceType 属性, 可以自定义图片和视频选择的来源 +## 1.0.2(2022-07-04) +- 修复 在uni-forms下样式不生效的bug +## 1.0.1(2021-11-23) +- 修复 参数为对象的情况下,url在某些情况显示错误的bug +## 1.0.0(2021-11-19) +- 优化 组件UI,并提供设计资源,详见:[https://uniapp.dcloud.io/component/uniui/resource](https://uniapp.dcloud.io/component/uniui/resource) +- 文档迁移,详见:[https://uniapp.dcloud.io/component/uniui/uni-file-picker](https://uniapp.dcloud.io/component/uniui/uni-file-picker) +## 0.2.16(2021-11-08) +- 修复 传入空对象 ,显示错误的Bug +## 0.2.15(2021-08-30) +- 修复 return-type="object" 时且存在v-model时,无法删除文件的Bug +## 0.2.14(2021-08-23) +- 新增 参数中返回 fileID 字段 +## 0.2.13(2021-08-23) +- 修复 腾讯云传入fileID 不能回显的bug +- 修复 选择图片后,不能放大的问题 +## 0.2.12(2021-08-17) +- 修复 由于 0.2.11 版本引起的不能回显图片的Bug +## 0.2.11(2021-08-16) +- 新增 clearFiles(index) 方法,可以手动删除指定文件 +- 修复 v-model 值设为 null 报错的Bug +## 0.2.10(2021-08-13) +- 修复 return-type="object" 时,无法删除文件的Bug +## 0.2.9(2021-08-03) +- 修复 auto-upload 属性失效的Bug +## 0.2.8(2021-07-31) +- 修复 fileExtname属性不指定值报错的Bug +## 0.2.7(2021-07-31) +- 修复 在某种场景下图片不回显的Bug +## 0.2.6(2021-07-30) +- 修复 return-type为object下,返回值不正确的Bug +## 0.2.5(2021-07-30) +- 修复(重要) H5 平台下如果和uni-forms组件一同使用导致页面卡死的问题 +## 0.2.3(2021-07-28) +- 优化 调整示例代码 +## 0.2.2(2021-07-27) +- 修复 vue3 下赋值错误的Bug +- 优化 h5平台下上传文件导致页面卡死的问题 +## 0.2.0(2021-07-13) +- 组件兼容 vue3,如何创建vue3项目,详见 [uni-app 项目支持 vue3 介绍](https://ask.dcloud.net.cn/article/37834) +## 0.1.1(2021-07-02) +- 修复 sourceType 缺少默认值导致 ios 无法选择文件 +## 0.1.0(2021-06-30) +- 优化 解耦与uniCloud的强绑定关系 ,如不绑定服务空间,默认autoUpload为false且不可更改 +## 0.0.11(2021-06-30) +- 修复 由 0.0.10 版本引发的 returnType 属性失效的问题 +## 0.0.10(2021-06-29) +- 优化 文件上传后进度条消失时机 +## 0.0.9(2021-06-29) +- 修复 在uni-forms 中,删除文件 ,获取的值不对的Bug +## 0.0.8(2021-06-15) +- 修复 删除文件时无法触发 v-model 的Bug +## 0.0.7(2021-05-12) +- 新增 组件示例地址 +## 0.0.6(2021-04-09) +- 修复 选择的文件非 file-extname 字段指定的扩展名报错的Bug +## 0.0.5(2021-04-09) +- 优化 更新组件示例 +## 0.0.4(2021-04-09) +- 优化 file-extname 字段支持字符串写法,多个扩展名需要用逗号分隔 +## 0.0.3(2021-02-05) +- 调整为uni_modules目录规范 +- 修复 微信小程序不指定 fileExtname 属性选择失败的Bug diff --git a/uni_modules/uni-file-picker/components/uni-file-picker/choose-and-upload-file.js b/uni_modules/uni-file-picker/components/uni-file-picker/choose-and-upload-file.js new file mode 100644 index 0000000..018590d --- /dev/null +++ b/uni_modules/uni-file-picker/components/uni-file-picker/choose-and-upload-file.js @@ -0,0 +1,224 @@ +'use strict'; + +const ERR_MSG_OK = 'chooseAndUploadFile:ok'; +const ERR_MSG_FAIL = 'chooseAndUploadFile:fail'; + +function chooseImage(opts) { + const { + count, + sizeType = ['original', 'compressed'], + sourceType, + extension + } = opts + return new Promise((resolve, reject) => { + uni.chooseImage({ + count, + sizeType, + sourceType, + extension, + success(res) { + resolve(normalizeChooseAndUploadFileRes(res, 'image')); + }, + fail(res) { + reject({ + errMsg: res.errMsg.replace('chooseImage:fail', ERR_MSG_FAIL), + }); + }, + }); + }); +} + +function chooseVideo(opts) { + const { + camera, + compressed, + maxDuration, + sourceType, + extension + } = opts; + return new Promise((resolve, reject) => { + uni.chooseVideo({ + camera, + compressed, + maxDuration, + sourceType, + extension, + success(res) { + const { + tempFilePath, + duration, + size, + height, + width + } = res; + resolve(normalizeChooseAndUploadFileRes({ + errMsg: 'chooseVideo:ok', + tempFilePaths: [tempFilePath], + tempFiles: [ + { + name: (res.tempFile && res.tempFile.name) || '', + path: tempFilePath, + size, + type: (res.tempFile && res.tempFile.type) || '', + width, + height, + duration, + fileType: 'video', + cloudPath: '', + }, ], + }, 'video')); + }, + fail(res) { + reject({ + errMsg: res.errMsg.replace('chooseVideo:fail', ERR_MSG_FAIL), + }); + }, + }); + }); +} + +function chooseAll(opts) { + const { + count, + extension + } = opts; + return new Promise((resolve, reject) => { + let chooseFile = uni.chooseFile; + if (typeof wx !== 'undefined' && + typeof wx.chooseMessageFile === 'function') { + chooseFile = wx.chooseMessageFile; + } + if (typeof chooseFile !== 'function') { + return reject({ + errMsg: ERR_MSG_FAIL + ' 请指定 type 类型,该平台仅支持选择 image 或 video。', + }); + } + chooseFile({ + type: 'all', + count, + extension, + success(res) { + resolve(normalizeChooseAndUploadFileRes(res)); + }, + fail(res) { + reject({ + errMsg: res.errMsg.replace('chooseFile:fail', ERR_MSG_FAIL), + }); + }, + }); + }); +} + +function normalizeChooseAndUploadFileRes(res, fileType) { + res.tempFiles.forEach((item, index) => { + if (!item.name) { + item.name = item.path.substring(item.path.lastIndexOf('/') + 1); + } + if (fileType) { + item.fileType = fileType; + } + item.cloudPath = + Date.now() + '_' + index + item.name.substring(item.name.lastIndexOf('.')); + }); + if (!res.tempFilePaths) { + res.tempFilePaths = res.tempFiles.map((file) => file.path); + } + return res; +} + +function uploadCloudFiles(files, max = 5, onUploadProgress) { + files = JSON.parse(JSON.stringify(files)) + const len = files.length + let count = 0 + let self = this + return new Promise(resolve => { + while (count < max) { + next() + } + + function next() { + let cur = count++ + if (cur >= len) { + !files.find(item => !item.url && !item.errMsg) && resolve(files) + return + } + const fileItem = files[cur] + const index = self.files.findIndex(v => v.uuid === fileItem.uuid) + fileItem.url = '' + delete fileItem.errMsg + + uniCloud + .uploadFile({ + filePath: fileItem.path, + cloudPath: fileItem.cloudPath, + fileType: fileItem.fileType, + onUploadProgress: res => { + res.index = index + onUploadProgress && onUploadProgress(res) + } + }) + .then(res => { + fileItem.url = res.fileID + fileItem.index = index + if (cur < len) { + next() + } + }) + .catch(res => { + fileItem.errMsg = res.errMsg || res.message + fileItem.index = index + if (cur < len) { + next() + } + }) + } + }) +} + + + + + +function uploadFiles(choosePromise, { + onChooseFile, + onUploadProgress +}) { + return choosePromise + .then((res) => { + if (onChooseFile) { + const customChooseRes = onChooseFile(res); + if (typeof customChooseRes !== 'undefined') { + return Promise.resolve(customChooseRes).then((chooseRes) => typeof chooseRes === 'undefined' ? + res : chooseRes); + } + } + return res; + }) + .then((res) => { + if (res === false) { + return { + errMsg: ERR_MSG_OK, + tempFilePaths: [], + tempFiles: [], + }; + } + return res + }) +} + +function chooseAndUploadFile(opts = { + type: 'all' +}) { + if (opts.type === 'image') { + return uploadFiles(chooseImage(opts), opts); + } + else if (opts.type === 'video') { + return uploadFiles(chooseVideo(opts), opts); + } + return uploadFiles(chooseAll(opts), opts); +} + +export { + chooseAndUploadFile, + uploadCloudFiles +}; diff --git a/uni_modules/uni-file-picker/components/uni-file-picker/uni-file-picker.vue b/uni_modules/uni-file-picker/components/uni-file-picker/uni-file-picker.vue new file mode 100644 index 0000000..7a13a6c --- /dev/null +++ b/uni_modules/uni-file-picker/components/uni-file-picker/uni-file-picker.vue @@ -0,0 +1,667 @@ + + + + + diff --git a/uni_modules/uni-file-picker/components/uni-file-picker/upload-file.vue b/uni_modules/uni-file-picker/components/uni-file-picker/upload-file.vue new file mode 100644 index 0000000..eb1840b --- /dev/null +++ b/uni_modules/uni-file-picker/components/uni-file-picker/upload-file.vue @@ -0,0 +1,325 @@ + + + + + diff --git a/uni_modules/uni-file-picker/components/uni-file-picker/upload-image.vue b/uni_modules/uni-file-picker/components/uni-file-picker/upload-image.vue new file mode 100644 index 0000000..51ace0b --- /dev/null +++ b/uni_modules/uni-file-picker/components/uni-file-picker/upload-image.vue @@ -0,0 +1,292 @@ + + + + + diff --git a/uni_modules/uni-file-picker/components/uni-file-picker/utils.js b/uni_modules/uni-file-picker/components/uni-file-picker/utils.js new file mode 100644 index 0000000..60aaa3e --- /dev/null +++ b/uni_modules/uni-file-picker/components/uni-file-picker/utils.js @@ -0,0 +1,109 @@ +/** + * 获取文件名和后缀 + * @param {String} name + */ +export const get_file_ext = (name) => { + const last_len = name.lastIndexOf('.') + const len = name.length + return { + name: name.substring(0, last_len), + ext: name.substring(last_len + 1, len) + } +} + +/** + * 获取扩展名 + * @param {Array} fileExtname + */ +export const get_extname = (fileExtname) => { + if (!Array.isArray(fileExtname)) { + let extname = fileExtname.replace(/(\[|\])/g, '') + return extname.split(',') + } else { + return fileExtname + } + return [] +} + +/** + * 获取文件和检测是否可选 + */ +export const get_files_and_is_max = (res, _extname) => { + let filePaths = [] + let files = [] + if(!_extname || _extname.length === 0){ + return { + filePaths, + files + } + } + res.tempFiles.forEach(v => { + let fileFullName = get_file_ext(v.name) + const extname = fileFullName.ext.toLowerCase() + if (_extname.indexOf(extname) !== -1) { + files.push(v) + filePaths.push(v.path) + } + }) + if (files.length !== res.tempFiles.length) { + uni.showToast({ + title: `当前选择了${res.tempFiles.length}个文件 ,${res.tempFiles.length - files.length} 个文件格式不正确`, + icon: 'none', + duration: 5000 + }) + } + + return { + filePaths, + files + } +} + + +/** + * 获取图片信息 + * @param {Object} filepath + */ +export const get_file_info = (filepath) => { + return new Promise((resolve, reject) => { + uni.getImageInfo({ + src: filepath, + success(res) { + resolve(res) + }, + fail(err) { + reject(err) + } + }) + }) +} +/** + * 获取封装数据 + */ +export const get_file_data = async (files, type = 'image') => { + // 最终需要上传数据库的数据 + let fileFullName = get_file_ext(files.name) + const extname = fileFullName.ext.toLowerCase() + let filedata = { + name: files.name, + uuid: files.uuid, + extname: extname || '', + cloudPath: files.cloudPath, + fileType: files.fileType, + url: files.path || files.path, + size: files.size, //单位是字节 + image: {}, + path: files.path, + video: {} + } + if (type === 'image') { + const imageinfo = await get_file_info(files.path) + delete filedata.video + filedata.image.width = imageinfo.width + filedata.image.height = imageinfo.height + filedata.image.location = imageinfo.path + } else { + delete filedata.image + } + return filedata +} diff --git a/uni_modules/uni-file-picker/package.json b/uni_modules/uni-file-picker/package.json new file mode 100644 index 0000000..35c926c --- /dev/null +++ b/uni_modules/uni-file-picker/package.json @@ -0,0 +1,83 @@ +{ + "id": "uni-file-picker", + "displayName": "uni-file-picker 文件选择上传", + "version": "1.0.4", + "description": "文件选择上传组件,可以选择图片、视频等任意文件并上传到当前绑定的服务空间", + "keywords": [ + "uni-ui", + "uniui", + "图片上传", + "文件上传" +], + "repository": "https://github.com/dcloudio/uni-ui", + "engines": { + "HBuilderX": "" + }, + "directories": { + "example": "../../temps/example_temps" + }, +"dcloudext": { + "sale": { + "regular": { + "price": "0.00" + }, + "sourcecode": { + "price": "0.00" + } + }, + "contact": { + "qq": "" + }, + "declaration": { + "ads": "无", + "data": "无", + "permissions": "无" + }, + "npmurl": "https://www.npmjs.com/package/@dcloudio/uni-ui", + "type": "component-vue" + }, + "uni_modules": { + "dependencies": ["uni-scss"], + "encrypt": [], + "platforms": { + "cloud": { + "tcb": "y", + "aliyun": "y" + }, + "client": { + "App": { + "app-vue": "y", + "app-nvue": "n" + }, + "H5-mobile": { + "Safari": "y", + "Android Browser": "y", + "微信浏览器(Android)": "y", + "QQ浏览器(Android)": "y" + }, + "H5-pc": { + "Chrome": "y", + "IE": "y", + "Edge": "y", + "Firefox": "y", + "Safari": "y" + }, + "小程序": { + "微信": "y", + "阿里": "y", + "百度": "y", + "字节跳动": "y", + "QQ": "y" + }, + "快应用": { + "华为": "u", + "联盟": "u" + }, + "Vue": { + "vue2": "y", + "vue3": "y" + } + } + } + } +} diff --git a/uni_modules/uni-file-picker/readme.md b/uni_modules/uni-file-picker/readme.md new file mode 100644 index 0000000..c8399a5 --- /dev/null +++ b/uni_modules/uni-file-picker/readme.md @@ -0,0 +1,11 @@ + +## FilePicker 文件选择上传 + +> **组件名:uni-file-picker** +> 代码块: `uFilePicker` + + +文件选择上传组件,可以选择图片、视频等任意文件并上传到当前绑定的服务空间 + +### [查看文档](https://uniapp.dcloud.io/component/uniui/uni-file-picker) +#### 如使用过程中有任何问题,或者您对uni-ui有一些好的建议,欢迎加入 uni-ui 交流群:871950839 \ No newline at end of file diff --git a/uni_modules/uni-icons/changelog.md b/uni_modules/uni-icons/changelog.md new file mode 100644 index 0000000..6449885 --- /dev/null +++ b/uni_modules/uni-icons/changelog.md @@ -0,0 +1,22 @@ +## 1.3.5(2022-01-24) +- 优化 size 属性可以传入不带单位的字符串数值 +## 1.3.4(2022-01-24) +- 优化 size 支持其他单位 +## 1.3.3(2022-01-17) +- 修复 nvue 有些图标不显示的bug,兼容老版本图标 +## 1.3.2(2021-12-01) +- 优化 示例可复制图标名称 +## 1.3.1(2021-11-23) +- 优化 兼容旧组件 type 值 +## 1.3.0(2021-11-19) +- 新增 更多图标 +- 优化 自定义图标使用方式 +- 优化 组件UI,并提供设计资源,详见:[https://uniapp.dcloud.io/component/uniui/resource](https://uniapp.dcloud.io/component/uniui/resource) +- 文档迁移,详见:[https://uniapp.dcloud.io/component/uniui/uni-icons](https://uniapp.dcloud.io/component/uniui/uni-icons) +## 1.1.7(2021-11-08) +## 1.2.0(2021-07-30) +- 组件兼容 vue3,如何创建vue3项目,详见 [uni-app 项目支持 vue3 介绍](https://ask.dcloud.net.cn/article/37834) +## 1.1.5(2021-05-12) +- 新增 组件示例地址 +## 1.1.4(2021-02-05) +- 调整为uni_modules目录规范 diff --git a/uni_modules/uni-icons/components/uni-icons/icons.js b/uni_modules/uni-icons/components/uni-icons/icons.js new file mode 100644 index 0000000..7889936 --- /dev/null +++ b/uni_modules/uni-icons/components/uni-icons/icons.js @@ -0,0 +1,1169 @@ +export default { + "id": "2852637", + "name": "uniui图标库", + "font_family": "uniicons", + "css_prefix_text": "uniui-", + "description": "", + "glyphs": [ + { + "icon_id": "25027049", + "name": "yanse", + "font_class": "color", + "unicode": "e6cf", + "unicode_decimal": 59087 + }, + { + "icon_id": "25027048", + "name": "wallet", + "font_class": "wallet", + "unicode": "e6b1", + "unicode_decimal": 59057 + }, + { + "icon_id": "25015720", + "name": "settings-filled", + "font_class": "settings-filled", + "unicode": "e6ce", + "unicode_decimal": 59086 + }, + { + "icon_id": "25015434", + "name": "shimingrenzheng-filled", + "font_class": "auth-filled", + "unicode": "e6cc", + "unicode_decimal": 59084 + }, + { + "icon_id": "24934246", + "name": "shop-filled", + "font_class": "shop-filled", + "unicode": "e6cd", + "unicode_decimal": 59085 + }, + { + "icon_id": "24934159", + "name": "staff-filled-01", + "font_class": "staff-filled", + "unicode": "e6cb", + "unicode_decimal": 59083 + }, + { + "icon_id": "24932461", + "name": "VIP-filled", + "font_class": "vip-filled", + "unicode": "e6c6", + "unicode_decimal": 59078 + }, + { + "icon_id": "24932462", + "name": "plus_circle_fill", + "font_class": "plus-filled", + "unicode": "e6c7", + "unicode_decimal": 59079 + }, + { + "icon_id": "24932463", + "name": "folder_add-filled", + "font_class": "folder-add-filled", + "unicode": "e6c8", + "unicode_decimal": 59080 + }, + { + "icon_id": "24932464", + "name": "yanse-filled", + "font_class": "color-filled", + "unicode": "e6c9", + "unicode_decimal": 59081 + }, + { + "icon_id": "24932465", + "name": "tune-filled", + "font_class": "tune-filled", + "unicode": "e6ca", + "unicode_decimal": 59082 + }, + { + "icon_id": "24932455", + "name": "a-rilidaka-filled", + "font_class": "calendar-filled", + "unicode": "e6c0", + "unicode_decimal": 59072 + }, + { + "icon_id": "24932456", + "name": "notification-filled", + "font_class": "notification-filled", + "unicode": "e6c1", + "unicode_decimal": 59073 + }, + { + "icon_id": "24932457", + "name": "wallet-filled", + "font_class": "wallet-filled", + "unicode": "e6c2", + "unicode_decimal": 59074 + }, + { + "icon_id": "24932458", + "name": "paihangbang-filled", + "font_class": "medal-filled", + "unicode": "e6c3", + "unicode_decimal": 59075 + }, + { + "icon_id": "24932459", + "name": "gift-filled", + "font_class": "gift-filled", + "unicode": "e6c4", + "unicode_decimal": 59076 + }, + { + "icon_id": "24932460", + "name": "fire-filled", + "font_class": "fire-filled", + "unicode": "e6c5", + "unicode_decimal": 59077 + }, + { + "icon_id": "24928001", + "name": "refreshempty", + "font_class": "refreshempty", + "unicode": "e6bf", + "unicode_decimal": 59071 + }, + { + "icon_id": "24926853", + "name": "location-ellipse", + "font_class": "location-filled", + "unicode": "e6af", + "unicode_decimal": 59055 + }, + { + "icon_id": "24926735", + "name": "person-filled", + "font_class": "person-filled", + "unicode": "e69d", + "unicode_decimal": 59037 + }, + { + "icon_id": "24926703", + "name": "personadd-filled", + "font_class": "personadd-filled", + "unicode": "e698", + "unicode_decimal": 59032 + }, + { + "icon_id": "24923351", + "name": "back", + "font_class": "back", + "unicode": "e6b9", + "unicode_decimal": 59065 + }, + { + "icon_id": "24923352", + "name": "forward", + "font_class": "forward", + "unicode": "e6ba", + "unicode_decimal": 59066 + }, + { + "icon_id": "24923353", + "name": "arrowthinright", + "font_class": "arrow-right", + "unicode": "e6bb", + "unicode_decimal": 59067 + }, + { + "icon_id": "24923353", + "name": "arrowthinright", + "font_class": "arrowthinright", + "unicode": "e6bb", + "unicode_decimal": 59067 + }, + { + "icon_id": "24923354", + "name": "arrowthinleft", + "font_class": "arrow-left", + "unicode": "e6bc", + "unicode_decimal": 59068 + }, + { + "icon_id": "24923354", + "name": "arrowthinleft", + "font_class": "arrowthinleft", + "unicode": "e6bc", + "unicode_decimal": 59068 + }, + { + "icon_id": "24923355", + "name": "arrowthinup", + "font_class": "arrow-up", + "unicode": "e6bd", + "unicode_decimal": 59069 + }, + { + "icon_id": "24923355", + "name": "arrowthinup", + "font_class": "arrowthinup", + "unicode": "e6bd", + "unicode_decimal": 59069 + }, + { + "icon_id": "24923356", + "name": "arrowthindown", + "font_class": "arrow-down", + "unicode": "e6be", + "unicode_decimal": 59070 + },{ + "icon_id": "24923356", + "name": "arrowthindown", + "font_class": "arrowthindown", + "unicode": "e6be", + "unicode_decimal": 59070 + }, + { + "icon_id": "24923349", + "name": "arrowdown", + "font_class": "bottom", + "unicode": "e6b8", + "unicode_decimal": 59064 + },{ + "icon_id": "24923349", + "name": "arrowdown", + "font_class": "arrowdown", + "unicode": "e6b8", + "unicode_decimal": 59064 + }, + { + "icon_id": "24923346", + "name": "arrowright", + "font_class": "right", + "unicode": "e6b5", + "unicode_decimal": 59061 + }, + { + "icon_id": "24923346", + "name": "arrowright", + "font_class": "arrowright", + "unicode": "e6b5", + "unicode_decimal": 59061 + }, + { + "icon_id": "24923347", + "name": "arrowup", + "font_class": "top", + "unicode": "e6b6", + "unicode_decimal": 59062 + }, + { + "icon_id": "24923347", + "name": "arrowup", + "font_class": "arrowup", + "unicode": "e6b6", + "unicode_decimal": 59062 + }, + { + "icon_id": "24923348", + "name": "arrowleft", + "font_class": "left", + "unicode": "e6b7", + "unicode_decimal": 59063 + }, + { + "icon_id": "24923348", + "name": "arrowleft", + "font_class": "arrowleft", + "unicode": "e6b7", + "unicode_decimal": 59063 + }, + { + "icon_id": "24923334", + "name": "eye", + "font_class": "eye", + "unicode": "e651", + "unicode_decimal": 58961 + }, + { + "icon_id": "24923335", + "name": "eye-filled", + "font_class": "eye-filled", + "unicode": "e66a", + "unicode_decimal": 58986 + }, + { + "icon_id": "24923336", + "name": "eye-slash", + "font_class": "eye-slash", + "unicode": "e6b3", + "unicode_decimal": 59059 + }, + { + "icon_id": "24923337", + "name": "eye-slash-filled", + "font_class": "eye-slash-filled", + "unicode": "e6b4", + "unicode_decimal": 59060 + }, + { + "icon_id": "24923305", + "name": "info-filled", + "font_class": "info-filled", + "unicode": "e649", + "unicode_decimal": 58953 + }, + { + "icon_id": "24923299", + "name": "reload-01", + "font_class": "reload", + "unicode": "e6b2", + "unicode_decimal": 59058 + }, + { + "icon_id": "24923195", + "name": "mic_slash_fill", + "font_class": "micoff-filled", + "unicode": "e6b0", + "unicode_decimal": 59056 + }, + { + "icon_id": "24923165", + "name": "map-pin-ellipse", + "font_class": "map-pin-ellipse", + "unicode": "e6ac", + "unicode_decimal": 59052 + }, + { + "icon_id": "24923166", + "name": "map-pin", + "font_class": "map-pin", + "unicode": "e6ad", + "unicode_decimal": 59053 + }, + { + "icon_id": "24923167", + "name": "location", + "font_class": "location", + "unicode": "e6ae", + "unicode_decimal": 59054 + }, + { + "icon_id": "24923064", + "name": "starhalf", + "font_class": "starhalf", + "unicode": "e683", + "unicode_decimal": 59011 + }, + { + "icon_id": "24923065", + "name": "star", + "font_class": "star", + "unicode": "e688", + "unicode_decimal": 59016 + }, + { + "icon_id": "24923066", + "name": "star-filled", + "font_class": "star-filled", + "unicode": "e68f", + "unicode_decimal": 59023 + }, + { + "icon_id": "24899646", + "name": "a-rilidaka", + "font_class": "calendar", + "unicode": "e6a0", + "unicode_decimal": 59040 + }, + { + "icon_id": "24899647", + "name": "fire", + "font_class": "fire", + "unicode": "e6a1", + "unicode_decimal": 59041 + }, + { + "icon_id": "24899648", + "name": "paihangbang", + "font_class": "medal", + "unicode": "e6a2", + "unicode_decimal": 59042 + }, + { + "icon_id": "24899649", + "name": "font", + "font_class": "font", + "unicode": "e6a3", + "unicode_decimal": 59043 + }, + { + "icon_id": "24899650", + "name": "gift", + "font_class": "gift", + "unicode": "e6a4", + "unicode_decimal": 59044 + }, + { + "icon_id": "24899651", + "name": "link", + "font_class": "link", + "unicode": "e6a5", + "unicode_decimal": 59045 + }, + { + "icon_id": "24899652", + "name": "notification", + "font_class": "notification", + "unicode": "e6a6", + "unicode_decimal": 59046 + }, + { + "icon_id": "24899653", + "name": "staff", + "font_class": "staff", + "unicode": "e6a7", + "unicode_decimal": 59047 + }, + { + "icon_id": "24899654", + "name": "VIP", + "font_class": "vip", + "unicode": "e6a8", + "unicode_decimal": 59048 + }, + { + "icon_id": "24899655", + "name": "folder_add", + "font_class": "folder-add", + "unicode": "e6a9", + "unicode_decimal": 59049 + }, + { + "icon_id": "24899656", + "name": "tune", + "font_class": "tune", + "unicode": "e6aa", + "unicode_decimal": 59050 + }, + { + "icon_id": "24899657", + "name": "shimingrenzheng", + "font_class": "auth", + "unicode": "e6ab", + "unicode_decimal": 59051 + }, + { + "icon_id": "24899565", + "name": "person", + "font_class": "person", + "unicode": "e699", + "unicode_decimal": 59033 + }, + { + "icon_id": "24899566", + "name": "email-filled", + "font_class": "email-filled", + "unicode": "e69a", + "unicode_decimal": 59034 + }, + { + "icon_id": "24899567", + "name": "phone-filled", + "font_class": "phone-filled", + "unicode": "e69b", + "unicode_decimal": 59035 + }, + { + "icon_id": "24899568", + "name": "phone", + "font_class": "phone", + "unicode": "e69c", + "unicode_decimal": 59036 + }, + { + "icon_id": "24899570", + "name": "email", + "font_class": "email", + "unicode": "e69e", + "unicode_decimal": 59038 + }, + { + "icon_id": "24899571", + "name": "personadd", + "font_class": "personadd", + "unicode": "e69f", + "unicode_decimal": 59039 + }, + { + "icon_id": "24899558", + "name": "chatboxes-filled", + "font_class": "chatboxes-filled", + "unicode": "e692", + "unicode_decimal": 59026 + }, + { + "icon_id": "24899559", + "name": "contact", + "font_class": "contact", + "unicode": "e693", + "unicode_decimal": 59027 + }, + { + "icon_id": "24899560", + "name": "chatbubble-filled", + "font_class": "chatbubble-filled", + "unicode": "e694", + "unicode_decimal": 59028 + }, + { + "icon_id": "24899561", + "name": "contact-filled", + "font_class": "contact-filled", + "unicode": "e695", + "unicode_decimal": 59029 + }, + { + "icon_id": "24899562", + "name": "chatboxes", + "font_class": "chatboxes", + "unicode": "e696", + "unicode_decimal": 59030 + }, + { + "icon_id": "24899563", + "name": "chatbubble", + "font_class": "chatbubble", + "unicode": "e697", + "unicode_decimal": 59031 + }, + { + "icon_id": "24881290", + "name": "upload-filled", + "font_class": "upload-filled", + "unicode": "e68e", + "unicode_decimal": 59022 + }, + { + "icon_id": "24881292", + "name": "upload", + "font_class": "upload", + "unicode": "e690", + "unicode_decimal": 59024 + }, + { + "icon_id": "24881293", + "name": "weixin", + "font_class": "weixin", + "unicode": "e691", + "unicode_decimal": 59025 + }, + { + "icon_id": "24881274", + "name": "compose", + "font_class": "compose", + "unicode": "e67f", + "unicode_decimal": 59007 + }, + { + "icon_id": "24881275", + "name": "qq", + "font_class": "qq", + "unicode": "e680", + "unicode_decimal": 59008 + }, + { + "icon_id": "24881276", + "name": "download-filled", + "font_class": "download-filled", + "unicode": "e681", + "unicode_decimal": 59009 + }, + { + "icon_id": "24881277", + "name": "pengyouquan", + "font_class": "pyq", + "unicode": "e682", + "unicode_decimal": 59010 + }, + { + "icon_id": "24881279", + "name": "sound", + "font_class": "sound", + "unicode": "e684", + "unicode_decimal": 59012 + }, + { + "icon_id": "24881280", + "name": "trash-filled", + "font_class": "trash-filled", + "unicode": "e685", + "unicode_decimal": 59013 + }, + { + "icon_id": "24881281", + "name": "sound-filled", + "font_class": "sound-filled", + "unicode": "e686", + "unicode_decimal": 59014 + }, + { + "icon_id": "24881282", + "name": "trash", + "font_class": "trash", + "unicode": "e687", + "unicode_decimal": 59015 + }, + { + "icon_id": "24881284", + "name": "videocam-filled", + "font_class": "videocam-filled", + "unicode": "e689", + "unicode_decimal": 59017 + }, + { + "icon_id": "24881285", + "name": "spinner-cycle", + "font_class": "spinner-cycle", + "unicode": "e68a", + "unicode_decimal": 59018 + }, + { + "icon_id": "24881286", + "name": "weibo", + "font_class": "weibo", + "unicode": "e68b", + "unicode_decimal": 59019 + }, + { + "icon_id": "24881288", + "name": "videocam", + "font_class": "videocam", + "unicode": "e68c", + "unicode_decimal": 59020 + }, + { + "icon_id": "24881289", + "name": "download", + "font_class": "download", + "unicode": "e68d", + "unicode_decimal": 59021 + }, + { + "icon_id": "24879601", + "name": "help", + "font_class": "help", + "unicode": "e679", + "unicode_decimal": 59001 + }, + { + "icon_id": "24879602", + "name": "navigate-filled", + "font_class": "navigate-filled", + "unicode": "e67a", + "unicode_decimal": 59002 + }, + { + "icon_id": "24879603", + "name": "plusempty", + "font_class": "plusempty", + "unicode": "e67b", + "unicode_decimal": 59003 + }, + { + "icon_id": "24879604", + "name": "smallcircle", + "font_class": "smallcircle", + "unicode": "e67c", + "unicode_decimal": 59004 + }, + { + "icon_id": "24879605", + "name": "minus-filled", + "font_class": "minus-filled", + "unicode": "e67d", + "unicode_decimal": 59005 + }, + { + "icon_id": "24879606", + "name": "micoff", + "font_class": "micoff", + "unicode": "e67e", + "unicode_decimal": 59006 + }, + { + "icon_id": "24879588", + "name": "closeempty", + "font_class": "closeempty", + "unicode": "e66c", + "unicode_decimal": 58988 + }, + { + "icon_id": "24879589", + "name": "clear", + "font_class": "clear", + "unicode": "e66d", + "unicode_decimal": 58989 + }, + { + "icon_id": "24879590", + "name": "navigate", + "font_class": "navigate", + "unicode": "e66e", + "unicode_decimal": 58990 + }, + { + "icon_id": "24879591", + "name": "minus", + "font_class": "minus", + "unicode": "e66f", + "unicode_decimal": 58991 + }, + { + "icon_id": "24879592", + "name": "image", + "font_class": "image", + "unicode": "e670", + "unicode_decimal": 58992 + }, + { + "icon_id": "24879593", + "name": "mic", + "font_class": "mic", + "unicode": "e671", + "unicode_decimal": 58993 + }, + { + "icon_id": "24879594", + "name": "paperplane", + "font_class": "paperplane", + "unicode": "e672", + "unicode_decimal": 58994 + }, + { + "icon_id": "24879595", + "name": "close", + "font_class": "close", + "unicode": "e673", + "unicode_decimal": 58995 + }, + { + "icon_id": "24879596", + "name": "help-filled", + "font_class": "help-filled", + "unicode": "e674", + "unicode_decimal": 58996 + }, + { + "icon_id": "24879597", + "name": "plus-filled", + "font_class": "paperplane-filled", + "unicode": "e675", + "unicode_decimal": 58997 + }, + { + "icon_id": "24879598", + "name": "plus", + "font_class": "plus", + "unicode": "e676", + "unicode_decimal": 58998 + }, + { + "icon_id": "24879599", + "name": "mic-filled", + "font_class": "mic-filled", + "unicode": "e677", + "unicode_decimal": 58999 + }, + { + "icon_id": "24879600", + "name": "image-filled", + "font_class": "image-filled", + "unicode": "e678", + "unicode_decimal": 59000 + }, + { + "icon_id": "24855900", + "name": "locked-filled", + "font_class": "locked-filled", + "unicode": "e668", + "unicode_decimal": 58984 + }, + { + "icon_id": "24855901", + "name": "info", + "font_class": "info", + "unicode": "e669", + "unicode_decimal": 58985 + }, + { + "icon_id": "24855903", + "name": "locked", + "font_class": "locked", + "unicode": "e66b", + "unicode_decimal": 58987 + }, + { + "icon_id": "24855884", + "name": "camera-filled", + "font_class": "camera-filled", + "unicode": "e658", + "unicode_decimal": 58968 + }, + { + "icon_id": "24855885", + "name": "chat-filled", + "font_class": "chat-filled", + "unicode": "e659", + "unicode_decimal": 58969 + }, + { + "icon_id": "24855886", + "name": "camera", + "font_class": "camera", + "unicode": "e65a", + "unicode_decimal": 58970 + }, + { + "icon_id": "24855887", + "name": "circle", + "font_class": "circle", + "unicode": "e65b", + "unicode_decimal": 58971 + }, + { + "icon_id": "24855888", + "name": "checkmarkempty", + "font_class": "checkmarkempty", + "unicode": "e65c", + "unicode_decimal": 58972 + }, + { + "icon_id": "24855889", + "name": "chat", + "font_class": "chat", + "unicode": "e65d", + "unicode_decimal": 58973 + }, + { + "icon_id": "24855890", + "name": "circle-filled", + "font_class": "circle-filled", + "unicode": "e65e", + "unicode_decimal": 58974 + }, + { + "icon_id": "24855891", + "name": "flag", + "font_class": "flag", + "unicode": "e65f", + "unicode_decimal": 58975 + }, + { + "icon_id": "24855892", + "name": "flag-filled", + "font_class": "flag-filled", + "unicode": "e660", + "unicode_decimal": 58976 + }, + { + "icon_id": "24855893", + "name": "gear-filled", + "font_class": "gear-filled", + "unicode": "e661", + "unicode_decimal": 58977 + }, + { + "icon_id": "24855894", + "name": "home", + "font_class": "home", + "unicode": "e662", + "unicode_decimal": 58978 + }, + { + "icon_id": "24855895", + "name": "home-filled", + "font_class": "home-filled", + "unicode": "e663", + "unicode_decimal": 58979 + }, + { + "icon_id": "24855896", + "name": "gear", + "font_class": "gear", + "unicode": "e664", + "unicode_decimal": 58980 + }, + { + "icon_id": "24855897", + "name": "smallcircle-filled", + "font_class": "smallcircle-filled", + "unicode": "e665", + "unicode_decimal": 58981 + }, + { + "icon_id": "24855898", + "name": "map-filled", + "font_class": "map-filled", + "unicode": "e666", + "unicode_decimal": 58982 + }, + { + "icon_id": "24855899", + "name": "map", + "font_class": "map", + "unicode": "e667", + "unicode_decimal": 58983 + }, + { + "icon_id": "24855825", + "name": "refresh-filled", + "font_class": "refresh-filled", + "unicode": "e656", + "unicode_decimal": 58966 + }, + { + "icon_id": "24855826", + "name": "refresh", + "font_class": "refresh", + "unicode": "e657", + "unicode_decimal": 58967 + }, + { + "icon_id": "24855808", + "name": "cloud-upload", + "font_class": "cloud-upload", + "unicode": "e645", + "unicode_decimal": 58949 + }, + { + "icon_id": "24855809", + "name": "cloud-download-filled", + "font_class": "cloud-download-filled", + "unicode": "e646", + "unicode_decimal": 58950 + }, + { + "icon_id": "24855810", + "name": "cloud-download", + "font_class": "cloud-download", + "unicode": "e647", + "unicode_decimal": 58951 + }, + { + "icon_id": "24855811", + "name": "cloud-upload-filled", + "font_class": "cloud-upload-filled", + "unicode": "e648", + "unicode_decimal": 58952 + }, + { + "icon_id": "24855813", + "name": "redo", + "font_class": "redo", + "unicode": "e64a", + "unicode_decimal": 58954 + }, + { + "icon_id": "24855814", + "name": "images-filled", + "font_class": "images-filled", + "unicode": "e64b", + "unicode_decimal": 58955 + }, + { + "icon_id": "24855815", + "name": "undo-filled", + "font_class": "undo-filled", + "unicode": "e64c", + "unicode_decimal": 58956 + }, + { + "icon_id": "24855816", + "name": "more", + "font_class": "more", + "unicode": "e64d", + "unicode_decimal": 58957 + }, + { + "icon_id": "24855817", + "name": "more-filled", + "font_class": "more-filled", + "unicode": "e64e", + "unicode_decimal": 58958 + }, + { + "icon_id": "24855818", + "name": "undo", + "font_class": "undo", + "unicode": "e64f", + "unicode_decimal": 58959 + }, + { + "icon_id": "24855819", + "name": "images", + "font_class": "images", + "unicode": "e650", + "unicode_decimal": 58960 + }, + { + "icon_id": "24855821", + "name": "paperclip", + "font_class": "paperclip", + "unicode": "e652", + "unicode_decimal": 58962 + }, + { + "icon_id": "24855822", + "name": "settings", + "font_class": "settings", + "unicode": "e653", + "unicode_decimal": 58963 + }, + { + "icon_id": "24855823", + "name": "search", + "font_class": "search", + "unicode": "e654", + "unicode_decimal": 58964 + }, + { + "icon_id": "24855824", + "name": "redo-filled", + "font_class": "redo-filled", + "unicode": "e655", + "unicode_decimal": 58965 + }, + { + "icon_id": "24841702", + "name": "list", + "font_class": "list", + "unicode": "e644", + "unicode_decimal": 58948 + }, + { + "icon_id": "24841489", + "name": "mail-open-filled", + "font_class": "mail-open-filled", + "unicode": "e63a", + "unicode_decimal": 58938 + }, + { + "icon_id": "24841491", + "name": "hand-thumbsdown-filled", + "font_class": "hand-down-filled", + "unicode": "e63c", + "unicode_decimal": 58940 + }, + { + "icon_id": "24841492", + "name": "hand-thumbsdown", + "font_class": "hand-down", + "unicode": "e63d", + "unicode_decimal": 58941 + }, + { + "icon_id": "24841493", + "name": "hand-thumbsup-filled", + "font_class": "hand-up-filled", + "unicode": "e63e", + "unicode_decimal": 58942 + }, + { + "icon_id": "24841494", + "name": "hand-thumbsup", + "font_class": "hand-up", + "unicode": "e63f", + "unicode_decimal": 58943 + }, + { + "icon_id": "24841496", + "name": "heart-filled", + "font_class": "heart-filled", + "unicode": "e641", + "unicode_decimal": 58945 + }, + { + "icon_id": "24841498", + "name": "mail-open", + "font_class": "mail-open", + "unicode": "e643", + "unicode_decimal": 58947 + }, + { + "icon_id": "24841488", + "name": "heart", + "font_class": "heart", + "unicode": "e639", + "unicode_decimal": 58937 + }, + { + "icon_id": "24839963", + "name": "loop", + "font_class": "loop", + "unicode": "e633", + "unicode_decimal": 58931 + }, + { + "icon_id": "24839866", + "name": "pulldown", + "font_class": "pulldown", + "unicode": "e632", + "unicode_decimal": 58930 + }, + { + "icon_id": "24813798", + "name": "scan", + "font_class": "scan", + "unicode": "e62a", + "unicode_decimal": 58922 + }, + { + "icon_id": "24813786", + "name": "bars", + "font_class": "bars", + "unicode": "e627", + "unicode_decimal": 58919 + }, + { + "icon_id": "24813788", + "name": "cart-filled", + "font_class": "cart-filled", + "unicode": "e629", + "unicode_decimal": 58921 + }, + { + "icon_id": "24813790", + "name": "checkbox", + "font_class": "checkbox", + "unicode": "e62b", + "unicode_decimal": 58923 + }, + { + "icon_id": "24813791", + "name": "checkbox-filled", + "font_class": "checkbox-filled", + "unicode": "e62c", + "unicode_decimal": 58924 + }, + { + "icon_id": "24813794", + "name": "shop", + "font_class": "shop", + "unicode": "e62f", + "unicode_decimal": 58927 + }, + { + "icon_id": "24813795", + "name": "headphones", + "font_class": "headphones", + "unicode": "e630", + "unicode_decimal": 58928 + }, + { + "icon_id": "24813796", + "name": "cart", + "font_class": "cart", + "unicode": "e631", + "unicode_decimal": 58929 + } + ] +} diff --git a/uni_modules/uni-icons/components/uni-icons/uni-icons.vue b/uni_modules/uni-icons/components/uni-icons/uni-icons.vue new file mode 100644 index 0000000..a87f68e --- /dev/null +++ b/uni_modules/uni-icons/components/uni-icons/uni-icons.vue @@ -0,0 +1,96 @@ + + + + + diff --git a/uni_modules/uni-icons/components/uni-icons/uniicons.css b/uni_modules/uni-icons/components/uni-icons/uniicons.css new file mode 100644 index 0000000..2f56eab --- /dev/null +++ b/uni_modules/uni-icons/components/uni-icons/uniicons.css @@ -0,0 +1,663 @@ +.uniui-color:before { + content: "\e6cf"; +} + +.uniui-wallet:before { + content: "\e6b1"; +} + +.uniui-settings-filled:before { + content: "\e6ce"; +} + +.uniui-auth-filled:before { + content: "\e6cc"; +} + +.uniui-shop-filled:before { + content: "\e6cd"; +} + +.uniui-staff-filled:before { + content: "\e6cb"; +} + +.uniui-vip-filled:before { + content: "\e6c6"; +} + +.uniui-plus-filled:before { + content: "\e6c7"; +} + +.uniui-folder-add-filled:before { + content: "\e6c8"; +} + +.uniui-color-filled:before { + content: "\e6c9"; +} + +.uniui-tune-filled:before { + content: "\e6ca"; +} + +.uniui-calendar-filled:before { + content: "\e6c0"; +} + +.uniui-notification-filled:before { + content: "\e6c1"; +} + +.uniui-wallet-filled:before { + content: "\e6c2"; +} + +.uniui-medal-filled:before { + content: "\e6c3"; +} + +.uniui-gift-filled:before { + content: "\e6c4"; +} + +.uniui-fire-filled:before { + content: "\e6c5"; +} + +.uniui-refreshempty:before { + content: "\e6bf"; +} + +.uniui-location-filled:before { + content: "\e6af"; +} + +.uniui-person-filled:before { + content: "\e69d"; +} + +.uniui-personadd-filled:before { + content: "\e698"; +} + +.uniui-back:before { + content: "\e6b9"; +} + +.uniui-forward:before { + content: "\e6ba"; +} + +.uniui-arrow-right:before { + content: "\e6bb"; +} + +.uniui-arrowthinright:before { + content: "\e6bb"; +} + +.uniui-arrow-left:before { + content: "\e6bc"; +} + +.uniui-arrowthinleft:before { + content: "\e6bc"; +} + +.uniui-arrow-up:before { + content: "\e6bd"; +} + +.uniui-arrowthinup:before { + content: "\e6bd"; +} + +.uniui-arrow-down:before { + content: "\e6be"; +} + +.uniui-arrowthindown:before { + content: "\e6be"; +} + +.uniui-bottom:before { + content: "\e6b8"; +} + +.uniui-arrowdown:before { + content: "\e6b8"; +} + +.uniui-right:before { + content: "\e6b5"; +} + +.uniui-arrowright:before { + content: "\e6b5"; +} + +.uniui-top:before { + content: "\e6b6"; +} + +.uniui-arrowup:before { + content: "\e6b6"; +} + +.uniui-left:before { + content: "\e6b7"; +} + +.uniui-arrowleft:before { + content: "\e6b7"; +} + +.uniui-eye:before { + content: "\e651"; +} + +.uniui-eye-filled:before { + content: "\e66a"; +} + +.uniui-eye-slash:before { + content: "\e6b3"; +} + +.uniui-eye-slash-filled:before { + content: "\e6b4"; +} + +.uniui-info-filled:before { + content: "\e649"; +} + +.uniui-reload:before { + content: "\e6b2"; +} + +.uniui-micoff-filled:before { + content: "\e6b0"; +} + +.uniui-map-pin-ellipse:before { + content: "\e6ac"; +} + +.uniui-map-pin:before { + content: "\e6ad"; +} + +.uniui-location:before { + content: "\e6ae"; +} + +.uniui-starhalf:before { + content: "\e683"; +} + +.uniui-star:before { + content: "\e688"; +} + +.uniui-star-filled:before { + content: "\e68f"; +} + +.uniui-calendar:before { + content: "\e6a0"; +} + +.uniui-fire:before { + content: "\e6a1"; +} + +.uniui-medal:before { + content: "\e6a2"; +} + +.uniui-font:before { + content: "\e6a3"; +} + +.uniui-gift:before { + content: "\e6a4"; +} + +.uniui-link:before { + content: "\e6a5"; +} + +.uniui-notification:before { + content: "\e6a6"; +} + +.uniui-staff:before { + content: "\e6a7"; +} + +.uniui-vip:before { + content: "\e6a8"; +} + +.uniui-folder-add:before { + content: "\e6a9"; +} + +.uniui-tune:before { + content: "\e6aa"; +} + +.uniui-auth:before { + content: "\e6ab"; +} + +.uniui-person:before { + content: "\e699"; +} + +.uniui-email-filled:before { + content: "\e69a"; +} + +.uniui-phone-filled:before { + content: "\e69b"; +} + +.uniui-phone:before { + content: "\e69c"; +} + +.uniui-email:before { + content: "\e69e"; +} + +.uniui-personadd:before { + content: "\e69f"; +} + +.uniui-chatboxes-filled:before { + content: "\e692"; +} + +.uniui-contact:before { + content: "\e693"; +} + +.uniui-chatbubble-filled:before { + content: "\e694"; +} + +.uniui-contact-filled:before { + content: "\e695"; +} + +.uniui-chatboxes:before { + content: "\e696"; +} + +.uniui-chatbubble:before { + content: "\e697"; +} + +.uniui-upload-filled:before { + content: "\e68e"; +} + +.uniui-upload:before { + content: "\e690"; +} + +.uniui-weixin:before { + content: "\e691"; +} + +.uniui-compose:before { + content: "\e67f"; +} + +.uniui-qq:before { + content: "\e680"; +} + +.uniui-download-filled:before { + content: "\e681"; +} + +.uniui-pyq:before { + content: "\e682"; +} + +.uniui-sound:before { + content: "\e684"; +} + +.uniui-trash-filled:before { + content: "\e685"; +} + +.uniui-sound-filled:before { + content: "\e686"; +} + +.uniui-trash:before { + content: "\e687"; +} + +.uniui-videocam-filled:before { + content: "\e689"; +} + +.uniui-spinner-cycle:before { + content: "\e68a"; +} + +.uniui-weibo:before { + content: "\e68b"; +} + +.uniui-videocam:before { + content: "\e68c"; +} + +.uniui-download:before { + content: "\e68d"; +} + +.uniui-help:before { + content: "\e679"; +} + +.uniui-navigate-filled:before { + content: "\e67a"; +} + +.uniui-plusempty:before { + content: "\e67b"; +} + +.uniui-smallcircle:before { + content: "\e67c"; +} + +.uniui-minus-filled:before { + content: "\e67d"; +} + +.uniui-micoff:before { + content: "\e67e"; +} + +.uniui-closeempty:before { + content: "\e66c"; +} + +.uniui-clear:before { + content: "\e66d"; +} + +.uniui-navigate:before { + content: "\e66e"; +} + +.uniui-minus:before { + content: "\e66f"; +} + +.uniui-image:before { + content: "\e670"; +} + +.uniui-mic:before { + content: "\e671"; +} + +.uniui-paperplane:before { + content: "\e672"; +} + +.uniui-close:before { + content: "\e673"; +} + +.uniui-help-filled:before { + content: "\e674"; +} + +.uniui-paperplane-filled:before { + content: "\e675"; +} + +.uniui-plus:before { + content: "\e676"; +} + +.uniui-mic-filled:before { + content: "\e677"; +} + +.uniui-image-filled:before { + content: "\e678"; +} + +.uniui-locked-filled:before { + content: "\e668"; +} + +.uniui-info:before { + content: "\e669"; +} + +.uniui-locked:before { + content: "\e66b"; +} + +.uniui-camera-filled:before { + content: "\e658"; +} + +.uniui-chat-filled:before { + content: "\e659"; +} + +.uniui-camera:before { + content: "\e65a"; +} + +.uniui-circle:before { + content: "\e65b"; +} + +.uniui-checkmarkempty:before { + content: "\e65c"; +} + +.uniui-chat:before { + content: "\e65d"; +} + +.uniui-circle-filled:before { + content: "\e65e"; +} + +.uniui-flag:before { + content: "\e65f"; +} + +.uniui-flag-filled:before { + content: "\e660"; +} + +.uniui-gear-filled:before { + content: "\e661"; +} + +.uniui-home:before { + content: "\e662"; +} + +.uniui-home-filled:before { + content: "\e663"; +} + +.uniui-gear:before { + content: "\e664"; +} + +.uniui-smallcircle-filled:before { + content: "\e665"; +} + +.uniui-map-filled:before { + content: "\e666"; +} + +.uniui-map:before { + content: "\e667"; +} + +.uniui-refresh-filled:before { + content: "\e656"; +} + +.uniui-refresh:before { + content: "\e657"; +} + +.uniui-cloud-upload:before { + content: "\e645"; +} + +.uniui-cloud-download-filled:before { + content: "\e646"; +} + +.uniui-cloud-download:before { + content: "\e647"; +} + +.uniui-cloud-upload-filled:before { + content: "\e648"; +} + +.uniui-redo:before { + content: "\e64a"; +} + +.uniui-images-filled:before { + content: "\e64b"; +} + +.uniui-undo-filled:before { + content: "\e64c"; +} + +.uniui-more:before { + content: "\e64d"; +} + +.uniui-more-filled:before { + content: "\e64e"; +} + +.uniui-undo:before { + content: "\e64f"; +} + +.uniui-images:before { + content: "\e650"; +} + +.uniui-paperclip:before { + content: "\e652"; +} + +.uniui-settings:before { + content: "\e653"; +} + +.uniui-search:before { + content: "\e654"; +} + +.uniui-redo-filled:before { + content: "\e655"; +} + +.uniui-list:before { + content: "\e644"; +} + +.uniui-mail-open-filled:before { + content: "\e63a"; +} + +.uniui-hand-down-filled:before { + content: "\e63c"; +} + +.uniui-hand-down:before { + content: "\e63d"; +} + +.uniui-hand-up-filled:before { + content: "\e63e"; +} + +.uniui-hand-up:before { + content: "\e63f"; +} + +.uniui-heart-filled:before { + content: "\e641"; +} + +.uniui-mail-open:before { + content: "\e643"; +} + +.uniui-heart:before { + content: "\e639"; +} + +.uniui-loop:before { + content: "\e633"; +} + +.uniui-pulldown:before { + content: "\e632"; +} + +.uniui-scan:before { + content: "\e62a"; +} + +.uniui-bars:before { + content: "\e627"; +} + +.uniui-cart-filled:before { + content: "\e629"; +} + +.uniui-checkbox:before { + content: "\e62b"; +} + +.uniui-checkbox-filled:before { + content: "\e62c"; +} + +.uniui-shop:before { + content: "\e62f"; +} + +.uniui-headphones:before { + content: "\e630"; +} + +.uniui-cart:before { + content: "\e631"; +} diff --git a/uni_modules/uni-icons/components/uni-icons/uniicons.ttf b/uni_modules/uni-icons/components/uni-icons/uniicons.ttf new file mode 100644 index 0000000000000000000000000000000000000000..835f33bc9411461b8b9046b3fec742e921d6ce3a GIT binary patch literal 35760 zcmeFacbp?vl{Q?rN>WLsSXIigCAC7gI!S6tox^m`be^1}CwPJ>yxZ{uSzi{WC_=LI+*Wx!<-H!v})21fuKMZQ#fB2Fs zuEGwU_ZyDmuR3&e_s&PS@Be}0T=(JF$l;w=9Als0-iQ4lE^0cm^YDeWhnK#G<4!$@ z>-QZydhsP6Kl0Pv9Cw|EbP-?YO$@C;`+ zuKnR1zxV)MXnddfv56Dn_-W<%#_jZ^d%1f!hyI(6O8C!lXY}93nl=3f9^gzbYS03Jm0vJ;T)Z1IKntfUtypB#zx`e6wG3 zC5AhB&Me^QdH${3yL1otSUp#NN^cKN_yKnkm%XqxczWUgrT^Oo|6lL`SPy&+DZ_DX z1{?B^82rf|!cpSXHhg1*;kZecHy+MI*MqCu>g9T0eYieaf9edzAC9!tJL|pm0UQ~l zBQN;JaG!_sb8)VT%i=%By_I_#_ZIFh?(N(=xVtf?-^|^~y@`7RcMEqbcN=#*_eSmx z?)BVjxU0EqFm9T;Q`~9pTJAdTdhWH{>+qBtxEr~fxSP3Gb60T(xkKDx?g)33JH{R7 zPH-1465x0fg%5CGeb33>TxSiZCZa24wyO7(&Q z>$wfwMs5?gnVaOMxM^;NYvpFSIc_<(f-7(s&u0CxL#u8VbF$klItIryQ@x|5W z48lm`>dOtnnB(dz48rK+>MISxIOOW948n-y>Z=XH*yQSK48kbo>T3axcUVKK~8Y>od!W-aP?gVL3VKU-3CF5aP>U~L7s5+3k`x~;p%%0f{fwn z`wW7#;p+Phg52Ti2MmG);_4R}1X;w@scs-hC9Y0&13^AJNK#+l4o$3aH zH00`3HxT3^SEssxAR)Or)eQt$$+z7tkWDxWPSHIIBXb!IaW`m$ZxcXZRf;QpmZ#4*d zg{!~KAZQq_ewRVeHC+Ae20`m^^>-Kq{lnGoHVB%CtKVY~bP`v;*C1#ou700E&{JIf zeuJQ~xcWN{g6`t#?=lEljH|!fAm}r${tpI0vvKtY41$j1>hCcK+K#I~Xb|)sSAVZT z(12Y1eFi}na`pEc1g*%`|Ir}mN3Q+>gPp}tAE%avLosrF^GJG z`bQ0dZsqD9GYDFitAE@e=v%J-34@?{x%wv!f)3{DpE3yAn5#cz5cD!v|Fl8S&|Lj9 z20>SI_0JjvtVjlpxwFpV+N5QQ~$g{(D+>a3kE^= zbM-G81S^26f5{-&16=*f2Ej7m>R&MkHUd}wszKz<)E_qpb^}-cnn7g6)t@j3wggxI zxp1QBm2=klxXa|a&TVx+;Qp=WwVt{>D}O~9QXW)O>O0h5db_-@^8Ud$^pPT-1=NS-v_4k2r|_kM*0!vaW9xyNll~`AaKH zuPQxR4wv6t{%QC2?wh**v$DGKU?rS_5?F|crGafkiL7dNk-%Y_E4VmkSn6>Hb;SUukEx3l0# zej=BS$yT%Av8Uc*J`xpdRw>aQ5n{34Scli{%@0hjo|#!%t;CXMOO1~vM@By$$wu(0 z7+*JsbCF0c%-{dHFL+pQI~s3&zjaOf89{d%!`6o3fsCO(`6

PqiNa$~E4XJ#a8s%?nsx`&SiQ7Wz{CE9c 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 literal 0 HcmV?d00001 diff --git a/uni_modules/uni-icons/package.json b/uni_modules/uni-icons/package.json new file mode 100644 index 0000000..d1c4e77 --- /dev/null +++ b/uni_modules/uni-icons/package.json @@ -0,0 +1,86 @@ +{ + "id": "uni-icons", + "displayName": "uni-icons 图标", + "version": "1.3.5", + "description": "图标组件,用于展示移动端常见的图标,可自定义颜色、大小。", + "keywords": [ + "uni-ui", + "uniui", + "icon", + "图标" +], + "repository": "https://github.com/dcloudio/uni-ui", + "engines": { + "HBuilderX": "^3.2.14" + }, + "directories": { + "example": "../../temps/example_temps" + }, + "dcloudext": { + "category": [ + "前端组件", + "通用组件" + ], + "sale": { + "regular": { + "price": "0.00" + }, + "sourcecode": { + "price": "0.00" + } + }, + "contact": { + "qq": "" + }, + "declaration": { + "ads": "无", + "data": "无", + "permissions": "无" + }, + "npmurl": "https://www.npmjs.com/package/@dcloudio/uni-ui" + }, + "uni_modules": { + "dependencies": ["uni-scss"], + "encrypt": [], + "platforms": { + "cloud": { + "tcb": "y", + "aliyun": "y" + }, + "client": { + "App": { + "app-vue": "y", + "app-nvue": "y" + }, + "H5-mobile": { + "Safari": "y", + "Android Browser": "y", + "微信浏览器(Android)": "y", + "QQ浏览器(Android)": "y" + }, + "H5-pc": { + "Chrome": "y", + "IE": "y", + "Edge": "y", + "Firefox": "y", + "Safari": "y" + }, + "小程序": { + "微信": "y", + "阿里": "y", + "百度": "y", + "字节跳动": "y", + "QQ": "y" + }, + "快应用": { + "华为": "u", + "联盟": "u" + }, + "Vue": { + "vue2": "y", + "vue3": "y" + } + } + } + } +} \ No newline at end of file diff --git a/uni_modules/uni-icons/readme.md b/uni_modules/uni-icons/readme.md new file mode 100644 index 0000000..86234ba --- /dev/null +++ b/uni_modules/uni-icons/readme.md @@ -0,0 +1,8 @@ +## Icons 图标 +> **组件名:uni-icons** +> 代码块: `uIcons` + +用于展示 icons 图标 。 + +### [查看文档](https://uniapp.dcloud.io/component/uniui/uni-icons) +#### 如使用过程中有任何问题,或者您对uni-ui有一些好的建议,欢迎加入 uni-ui 交流群:871950839 diff --git a/uni_modules/uni-load-more/changelog.md b/uni_modules/uni-load-more/changelog.md new file mode 100644 index 0000000..8f03f1d --- /dev/null +++ b/uni_modules/uni-load-more/changelog.md @@ -0,0 +1,19 @@ +## 1.3.3(2022-01-20) +- 新增 showText属性 ,是否显示文本 +## 1.3.2(2022-01-19) +- 修复 nvue 平台下不显示文本的bug +## 1.3.1(2022-01-19) +- 修复 微信小程序平台样式选择器报警告的问题 +## 1.3.0(2021-11-19) +- 优化 组件UI,并提供设计资源,详见:[https://uniapp.dcloud.io/component/uniui/resource](https://uniapp.dcloud.io/component/uniui/resource) +- 文档迁移,详见:[https://uniapp.dcloud.io/component/uniui/uni-load-more](https://uniapp.dcloud.io/component/uniui/uni-load-more) +## 1.2.1(2021-08-24) +- 新增 支持国际化 +## 1.2.0(2021-07-30) +- 组件兼容 vue3,如何创建vue3项目,详见 [uni-app 项目支持 vue3 介绍](https://ask.dcloud.net.cn/article/37834) +## 1.1.8(2021-05-12) +- 新增 组件示例地址 +## 1.1.7(2021-03-30) +- 修复 uni-load-more 在首页使用时,h5 平台报 'uni is not defined' 的 bug +## 1.1.6(2021-02-05) +- 调整为uni_modules目录规范 diff --git a/uni_modules/uni-load-more/components/uni-load-more/i18n/en.json b/uni_modules/uni-load-more/components/uni-load-more/i18n/en.json new file mode 100644 index 0000000..6f45b0e --- /dev/null +++ b/uni_modules/uni-load-more/components/uni-load-more/i18n/en.json @@ -0,0 +1,5 @@ +{ + "uni-load-more.contentdown": "Pull up to show more", + "uni-load-more.contentrefresh": "loading...", + "uni-load-more.contentnomore": "No more data" +} diff --git a/uni_modules/uni-load-more/components/uni-load-more/i18n/index.js b/uni_modules/uni-load-more/components/uni-load-more/i18n/index.js new file mode 100644 index 0000000..fa8f0f3 --- /dev/null +++ b/uni_modules/uni-load-more/components/uni-load-more/i18n/index.js @@ -0,0 +1,8 @@ +import en from './en.json' +import zhHans from './zh-Hans.json' +import zhHant from './zh-Hant.json' +export default { + en, + 'zh-Hans': zhHans, + 'zh-Hant': zhHant +} diff --git a/uni_modules/uni-load-more/components/uni-load-more/i18n/zh-Hans.json b/uni_modules/uni-load-more/components/uni-load-more/i18n/zh-Hans.json new file mode 100644 index 0000000..3a14ca0 --- /dev/null +++ b/uni_modules/uni-load-more/components/uni-load-more/i18n/zh-Hans.json @@ -0,0 +1,5 @@ +{ + "uni-load-more.contentdown": "上拉显示更多", + "uni-load-more.contentrefresh": "正在加载...", + "uni-load-more.contentnomore": "没有更多数据了" +} diff --git a/uni_modules/uni-load-more/components/uni-load-more/i18n/zh-Hant.json b/uni_modules/uni-load-more/components/uni-load-more/i18n/zh-Hant.json new file mode 100644 index 0000000..ee99b06 --- /dev/null +++ b/uni_modules/uni-load-more/components/uni-load-more/i18n/zh-Hant.json @@ -0,0 +1,5 @@ +{ + "uni-load-more.contentdown": "上拉顯示更多", + "uni-load-more.contentrefresh": "正在加載...", + "uni-load-more.contentnomore": "沒有更多數據了" +} diff --git a/uni_modules/uni-load-more/components/uni-load-more/uni-load-more.vue b/uni_modules/uni-load-more/components/uni-load-more/uni-load-more.vue new file mode 100644 index 0000000..ededbc2 --- /dev/null +++ b/uni_modules/uni-load-more/components/uni-load-more/uni-load-more.vue @@ -0,0 +1,399 @@ + + + + + diff --git a/uni_modules/uni-load-more/package.json b/uni_modules/uni-load-more/package.json new file mode 100644 index 0000000..2fa6f04 --- /dev/null +++ b/uni_modules/uni-load-more/package.json @@ -0,0 +1,86 @@ +{ + "id": "uni-load-more", + "displayName": "uni-load-more 加载更多", + "version": "1.3.3", + "description": "LoadMore 组件,常用在列表里面,做滚动加载使用。", + "keywords": [ + "uni-ui", + "uniui", + "加载更多", + "load-more" +], + "repository": "https://github.com/dcloudio/uni-ui", + "engines": { + "HBuilderX": "" + }, + "directories": { + "example": "../../temps/example_temps" + }, + "dcloudext": { + "category": [ + "前端组件", + "通用组件" + ], + "sale": { + "regular": { + "price": "0.00" + }, + "sourcecode": { + "price": "0.00" + } + }, + "contact": { + "qq": "" + }, + "declaration": { + "ads": "无", + "data": "无", + "permissions": "无" + }, + "npmurl": "https://www.npmjs.com/package/@dcloudio/uni-ui" + }, + "uni_modules": { + "dependencies": ["uni-scss"], + "encrypt": [], + "platforms": { + "cloud": { + "tcb": "y", + "aliyun": "y" + }, + "client": { + "App": { + "app-vue": "y", + "app-nvue": "y" + }, + "H5-mobile": { + "Safari": "y", + "Android Browser": "y", + "微信浏览器(Android)": "y", + "QQ浏览器(Android)": "y" + }, + "H5-pc": { + "Chrome": "y", + "IE": "y", + "Edge": "y", + "Firefox": "y", + "Safari": "y" + }, + "小程序": { + "微信": "y", + "阿里": "y", + "百度": "y", + "字节跳动": "y", + "QQ": "y" + }, + "快应用": { + "华为": "u", + "联盟": "u" + }, + "Vue": { + "vue2": "y", + "vue3": "y" + } + } + } + } +} \ No newline at end of file diff --git a/uni_modules/uni-load-more/readme.md b/uni_modules/uni-load-more/readme.md new file mode 100644 index 0000000..54dc1fa --- /dev/null +++ b/uni_modules/uni-load-more/readme.md @@ -0,0 +1,14 @@ + + +### LoadMore 加载更多 +> **组件名:uni-load-more** +> 代码块: `uLoadMore` + + +用于列表中,做滚动加载使用,展示 loading 的各种状态。 + + +### [查看文档](https://uniapp.dcloud.io/component/uniui/uni-load-more) +#### 如使用过程中有任何问题,或者您对uni-ui有一些好的建议,欢迎加入 uni-ui 交流群:871950839 + + diff --git a/uni_modules/uni-popup/changelog.md b/uni_modules/uni-popup/changelog.md new file mode 100644 index 0000000..41abeb4 --- /dev/null +++ b/uni_modules/uni-popup/changelog.md @@ -0,0 +1,66 @@ +## 1.8.2(2023-02-02) +- uni-popup-dialog 组件新增 inputType 属性 +## 1.8.1(2022-12-01) +- 修复 nvue 下 v-show 报错 +## 1.8.0(2022-11-29) +- 优化 主题样式 +## 1.7.9(2022-04-02) +- 修复 弹出层内部无法滚动的bug +## 1.7.8(2022-03-28) +- 修复 小程序中高度错误的bug +## 1.7.7(2022-03-17) +- 修复 快速调用open出现问题的Bug +## 1.7.6(2022-02-14) +- 修复 safeArea 属性不能设置为false的bug +## 1.7.5(2022-01-19) +- 修复 isMaskClick 失效的bug +## 1.7.4(2022-01-19) +- 新增 cancelText \ confirmText 属性 ,可自定义文本 +- 新增 maskBackgroundColor 属性 ,可以修改蒙版颜色 +- 优化 maskClick属性 更新为 isMaskClick ,解决微信小程序警告的问题 +## 1.7.3(2022-01-13) +- 修复 设置 safeArea 属性不生效的bug +## 1.7.2(2021-11-26) +- 优化 组件示例 +## 1.7.1(2021-11-26) +- 修复 vuedoc 文字错误 +## 1.7.0(2021-11-19) +- 优化 组件UI,并提供设计资源,详见:[https://uniapp.dcloud.io/component/uniui/resource](https://uniapp.dcloud.io/component/uniui/resource) +- 文档迁移,详见:[https://uniapp.dcloud.io/component/uniui/uni-popup](https://uniapp.dcloud.io/component/uniui/uni-popup) +## 1.6.2(2021-08-24) +- 新增 支持国际化 +## 1.6.1(2021-07-30) +- 优化 vue3下事件警告的问题 +## 1.6.0(2021-07-13) +- 组件兼容 vue3,如何创建vue3项目,详见 [uni-app 项目支持 vue3 介绍](https://ask.dcloud.net.cn/article/37834) +## 1.5.0(2021-06-23) +- 新增 mask-click 遮罩层点击事件 +## 1.4.5(2021-06-22) +- 修复 nvue 平台中间弹出后,点击内容,再点击遮罩无法关闭的Bug +## 1.4.4(2021-06-18) +- 修复 H5平台中间弹出后,点击内容,再点击遮罩无法关闭的Bug +## 1.4.3(2021-06-08) +- 修复 错误的 watch 字段 +- 修复 safeArea 属性不生效的问题 +- 修复 点击内容,再点击遮罩无法关闭的Bug +## 1.4.2(2021-05-12) +- 新增 组件示例地址 +## 1.4.1(2021-04-29) +- 修复 组件内放置 input 、textarea 组件,无法聚焦的问题 +## 1.4.0 (2021-04-29) +- 新增 type 属性的 left\right 值,支持左右弹出 +- 新增 open(String:type) 方法参数 ,可以省略 type 属性 ,直接传入类型打开指定弹窗 +- 新增 backgroundColor 属性,可定义主窗口背景色,默认不显示背景色 +- 新增 safeArea 属性,是否适配底部安全区 +- 修复 App\h5\微信小程序底部安全区占位不对的Bug +- 修复 App 端弹出等待的Bug +- 优化 提升低配设备性能,优化动画卡顿问题 +- 优化 更简单的组件自定义方式 +## 1.2.9(2021-02-05) +- 优化 组件引用关系,通过uni_modules引用组件 +## 1.2.8(2021-02-05) +- 调整为uni_modules目录规范 +## 1.2.7(2021-02-05) +- 调整为uni_modules目录规范 +- 新增 支持 PC 端 +- 新增 uni-popup-message 、uni-popup-dialog扩展组件支持 PC 端 diff --git a/uni_modules/uni-popup/components/uni-popup-dialog/keypress.js b/uni_modules/uni-popup/components/uni-popup-dialog/keypress.js new file mode 100644 index 0000000..a747b9f --- /dev/null +++ b/uni_modules/uni-popup/components/uni-popup-dialog/keypress.js @@ -0,0 +1,45 @@ +// #ifdef H5 +export default { + name: 'Keypress', + props: { + disable: { + type: Boolean, + default: false + } + }, + mounted () { + const keyNames = { + esc: ['Esc', 'Escape'], + tab: 'Tab', + enter: 'Enter', + space: [' ', 'Spacebar'], + up: ['Up', 'ArrowUp'], + left: ['Left', 'ArrowLeft'], + right: ['Right', 'ArrowRight'], + down: ['Down', 'ArrowDown'], + delete: ['Backspace', 'Delete', 'Del'] + } + const listener = ($event) => { + if (this.disable) { + return + } + const keyName = Object.keys(keyNames).find(key => { + const keyName = $event.key + const value = keyNames[key] + return value === keyName || (Array.isArray(value) && value.includes(keyName)) + }) + if (keyName) { + // 避免和其他按键事件冲突 + setTimeout(() => { + this.$emit(keyName, {}) + }, 0) + } + } + document.addEventListener('keyup', listener) + this.$once('hook:beforeDestroy', () => { + document.removeEventListener('keyup', listener) + }) + }, + render: () => {} +} +// #endif diff --git a/uni_modules/uni-popup/components/uni-popup-dialog/uni-popup-dialog.vue b/uni_modules/uni-popup/components/uni-popup-dialog/uni-popup-dialog.vue new file mode 100644 index 0000000..9bc87fc --- /dev/null +++ b/uni_modules/uni-popup/components/uni-popup-dialog/uni-popup-dialog.vue @@ -0,0 +1,275 @@ + + + + + diff --git a/uni_modules/uni-popup/components/uni-popup-message/uni-popup-message.vue b/uni_modules/uni-popup/components/uni-popup-message/uni-popup-message.vue new file mode 100644 index 0000000..7f27a1e --- /dev/null +++ b/uni_modules/uni-popup/components/uni-popup-message/uni-popup-message.vue @@ -0,0 +1,143 @@ + + + + diff --git a/uni_modules/uni-popup/components/uni-popup-share/uni-popup-share.vue b/uni_modules/uni-popup/components/uni-popup-share/uni-popup-share.vue new file mode 100644 index 0000000..ab08656 --- /dev/null +++ b/uni_modules/uni-popup/components/uni-popup-share/uni-popup-share.vue @@ -0,0 +1,187 @@ + + + + diff --git a/uni_modules/uni-popup/components/uni-popup/i18n/en.json b/uni_modules/uni-popup/components/uni-popup/i18n/en.json new file mode 100644 index 0000000..8c0f5f3 --- /dev/null +++ b/uni_modules/uni-popup/components/uni-popup/i18n/en.json @@ -0,0 +1,7 @@ +{ + "uni-popup.cancel": "cancel", + "uni-popup.ok": "ok", + "uni-popup.placeholder": "pleace enter", + "uni-popup.title": "Hint", + "uni-popup.shareTitle": "Share to" +} diff --git a/uni_modules/uni-popup/components/uni-popup/i18n/index.js b/uni_modules/uni-popup/components/uni-popup/i18n/index.js new file mode 100644 index 0000000..fa8f0f3 --- /dev/null +++ b/uni_modules/uni-popup/components/uni-popup/i18n/index.js @@ -0,0 +1,8 @@ +import en from './en.json' +import zhHans from './zh-Hans.json' +import zhHant from './zh-Hant.json' +export default { + en, + 'zh-Hans': zhHans, + 'zh-Hant': zhHant +} diff --git a/uni_modules/uni-popup/components/uni-popup/i18n/zh-Hans.json b/uni_modules/uni-popup/components/uni-popup/i18n/zh-Hans.json new file mode 100644 index 0000000..8e5b99f --- /dev/null +++ b/uni_modules/uni-popup/components/uni-popup/i18n/zh-Hans.json @@ -0,0 +1,7 @@ +{ + "uni-popup.cancel": "取消", + "uni-popup.ok": "确定", + "uni-popup.placeholder": "请输入", + "uni-popup.title": "提示", + "uni-popup.shareTitle": "分享到" +} diff --git a/uni_modules/uni-popup/components/uni-popup/i18n/zh-Hant.json b/uni_modules/uni-popup/components/uni-popup/i18n/zh-Hant.json new file mode 100644 index 0000000..06ce162 --- /dev/null +++ b/uni_modules/uni-popup/components/uni-popup/i18n/zh-Hant.json @@ -0,0 +1,7 @@ +{ + "uni-popup.cancel": "取消", + "uni-popup.ok": "確定", + "uni-popup.placeholder": "請輸入", + "uni-popup.title": "提示", + "uni-popup.shareTitle": "分享到" +} diff --git a/uni_modules/uni-popup/components/uni-popup/keypress.js b/uni_modules/uni-popup/components/uni-popup/keypress.js new file mode 100644 index 0000000..16a5818 --- /dev/null +++ b/uni_modules/uni-popup/components/uni-popup/keypress.js @@ -0,0 +1,45 @@ +// #ifdef H5 +export default { + name: 'Keypress', + props: { + disable: { + type: Boolean, + default: false + } + }, + mounted () { + const keyNames = { + esc: ['Esc', 'Escape'], + tab: 'Tab', + enter: 'Enter', + space: [' ', 'Spacebar'], + up: ['Up', 'ArrowUp'], + left: ['Left', 'ArrowLeft'], + right: ['Right', 'ArrowRight'], + down: ['Down', 'ArrowDown'], + delete: ['Backspace', 'Delete', 'Del'] + } + const listener = ($event) => { + if (this.disable) { + return + } + const keyName = Object.keys(keyNames).find(key => { + const keyName = $event.key + const value = keyNames[key] + return value === keyName || (Array.isArray(value) && value.includes(keyName)) + }) + if (keyName) { + // 避免和其他按键事件冲突 + setTimeout(() => { + this.$emit(keyName, {}) + }, 0) + } + } + document.addEventListener('keyup', listener) + // this.$once('hook:beforeDestroy', () => { + // document.removeEventListener('keyup', listener) + // }) + }, + render: () => {} +} +// #endif diff --git a/uni_modules/uni-popup/components/uni-popup/popup.js b/uni_modules/uni-popup/components/uni-popup/popup.js new file mode 100644 index 0000000..a37fb9f --- /dev/null +++ b/uni_modules/uni-popup/components/uni-popup/popup.js @@ -0,0 +1,26 @@ + +export default { + data() { + return { + + } + }, + created(){ + this.popup = this.getParent() + }, + methods:{ + /** + * 获取父元素实例 + */ + getParent(name = 'uniPopup') { + let parent = this.$parent; + let parentName = parent.$options.name; + while (parentName !== name) { + parent = parent.$parent; + if (!parent) return false + parentName = parent.$options.name; + } + return parent; + }, + } +} diff --git a/uni_modules/uni-popup/components/uni-popup/uni-popup.vue b/uni_modules/uni-popup/components/uni-popup/uni-popup.vue new file mode 100644 index 0000000..db90c59 --- /dev/null +++ b/uni_modules/uni-popup/components/uni-popup/uni-popup.vue @@ -0,0 +1,474 @@ + + + + diff --git a/uni_modules/uni-popup/package.json b/uni_modules/uni-popup/package.json new file mode 100644 index 0000000..8a17034 --- /dev/null +++ b/uni_modules/uni-popup/package.json @@ -0,0 +1,87 @@ +{ + "id": "uni-popup", + "displayName": "uni-popup 弹出层", + "version": "1.8.2", + "description": " Popup 组件,提供常用的弹层", + "keywords": [ + "uni-ui", + "弹出层", + "弹窗", + "popup", + "弹框" + ], + "repository": "https://github.com/dcloudio/uni-ui", + "engines": { + "HBuilderX": "" + }, + "directories": { + "example": "../../temps/example_temps" + }, + "dcloudext": { + "sale": { + "regular": { + "price": "0.00" + }, + "sourcecode": { + "price": "0.00" + } + }, + "contact": { + "qq": "" + }, + "declaration": { + "ads": "无", + "data": "无", + "permissions": "无" + }, + "npmurl": "https://www.npmjs.com/package/@dcloudio/uni-ui", + "type": "component-vue" + }, + "uni_modules": { + "dependencies": [ + "uni-scss", + "uni-transition" + ], + "encrypt": [], + "platforms": { + "cloud": { + "tcb": "y", + "aliyun": "y" + }, + "client": { + "App": { + "app-vue": "y", + "app-nvue": "y" + }, + "H5-mobile": { + "Safari": "y", + "Android Browser": "y", + "微信浏览器(Android)": "y", + "QQ浏览器(Android)": "y" + }, + "H5-pc": { + "Chrome": "y", + "IE": "y", + "Edge": "y", + "Firefox": "y", + "Safari": "y" + }, + "小程序": { + "微信": "y", + "阿里": "y", + "百度": "y", + "字节跳动": "y", + "QQ": "y" + }, + "快应用": { + "华为": "u", + "联盟": "u" + }, + "Vue": { + "vue2": "y", + "vue3": "y" + } + } + } + } +} diff --git a/uni_modules/uni-popup/readme.md b/uni_modules/uni-popup/readme.md new file mode 100644 index 0000000..fdad4b3 --- /dev/null +++ b/uni_modules/uni-popup/readme.md @@ -0,0 +1,17 @@ + + +## Popup 弹出层 +> **组件名:uni-popup** +> 代码块: `uPopup` +> 关联组件:`uni-transition` + + +弹出层组件,在应用中弹出一个消息提示窗口、提示框等 + +### [查看文档](https://uniapp.dcloud.io/component/uniui/uni-popup) +#### 如使用过程中有任何问题,或者您对uni-ui有一些好的建议,欢迎加入 uni-ui 交流群:871950839 + + + + + diff --git a/uni_modules/uni-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-transition/changelog.md b/uni_modules/uni-transition/changelog.md new file mode 100644 index 0000000..ad489f1 --- /dev/null +++ b/uni_modules/uni-transition/changelog.md @@ -0,0 +1,20 @@ +## 1.3.1(2021-11-23) +- 修复 init 方法初始化问题 +## 1.3.0(2021-11-19) +- 优化 组件UI,并提供设计资源,详见:[https://uniapp.dcloud.io/component/uniui/resource](https://uniapp.dcloud.io/component/uniui/resource) +- 文档迁移,详见:[https://uniapp.dcloud.io/component/uniui/uni-transition](https://uniapp.dcloud.io/component/uniui/uni-transition) +## 1.2.1(2021-09-27) +- 修复 init 方法不生效的 Bug +## 1.2.0(2021-07-30) +- 组件兼容 vue3,如何创建 vue3 项目,详见 [uni-app 项目支持 vue3 介绍](https://ask.dcloud.net.cn/article/37834) +## 1.1.1(2021-05-12) +- 新增 示例地址 +- 修复 示例项目缺少组件的 Bug +## 1.1.0(2021-04-22) +- 新增 通过方法自定义动画 +- 新增 custom-class 非 NVUE 平台支持自定义 class 定制样式 +- 优化 动画触发逻辑,使动画更流畅 +- 优化 支持单独的动画类型 +- 优化 文档示例 +## 1.0.2(2021-02-05) +- 调整为 uni_modules 目录规范 diff --git a/uni_modules/uni-transition/components/uni-transition/createAnimation.js b/uni_modules/uni-transition/components/uni-transition/createAnimation.js new file mode 100644 index 0000000..af47dbc --- /dev/null +++ b/uni_modules/uni-transition/components/uni-transition/createAnimation.js @@ -0,0 +1,128 @@ +// const defaultOption = { +// duration: 300, +// timingFunction: 'linear', +// delay: 0, +// transformOrigin: '50% 50% 0' +// } +// #ifdef APP-NVUE +const nvueAnimation = uni.requireNativePlugin('animation') +// #endif +class MPAnimation { + constructor(options, _this) { + this.options = options + this.animation = uni.createAnimation(options) + this.currentStepAnimates = {} + this.next = 0 + this.$ = _this + + } + + _nvuePushAnimates(type, args) { + let aniObj = this.currentStepAnimates[this.next] + let styles = {} + if (!aniObj) { + styles = { + styles: {}, + config: {} + } + } else { + styles = aniObj + } + if (animateTypes1.includes(type)) { + if (!styles.styles.transform) { + styles.styles.transform = '' + } + let unit = '' + if(type === 'rotate'){ + unit = 'deg' + } + styles.styles.transform += `${type}(${args+unit}) ` + } else { + styles.styles[type] = `${args}` + } + this.currentStepAnimates[this.next] = styles + } + _animateRun(styles = {}, config = {}) { + let ref = this.$.$refs['ani'].ref + if (!ref) return + return new Promise((resolve, reject) => { + nvueAnimation.transition(ref, { + styles, + ...config + }, res => { + resolve() + }) + }) + } + + _nvueNextAnimate(animates, step = 0, fn) { + let obj = animates[step] + if (obj) { + let { + styles, + config + } = obj + this._animateRun(styles, config).then(() => { + step += 1 + this._nvueNextAnimate(animates, step, fn) + }) + } else { + this.currentStepAnimates = {} + typeof fn === 'function' && fn() + this.isEnd = true + } + } + + step(config = {}) { + // #ifndef APP-NVUE + this.animation.step(config) + // #endif + // #ifdef APP-NVUE + this.currentStepAnimates[this.next].config = Object.assign({}, this.options, config) + this.currentStepAnimates[this.next].styles.transformOrigin = this.currentStepAnimates[this.next].config.transformOrigin + this.next++ + // #endif + return this + } + + run(fn) { + // #ifndef APP-NVUE + this.$.animationData = this.animation.export() + this.$.timer = setTimeout(() => { + typeof fn === 'function' && fn() + }, this.$.durationTime) + // #endif + // #ifdef APP-NVUE + this.isEnd = false + let ref = this.$.$refs['ani'] && this.$.$refs['ani'].ref + if(!ref) return + this._nvueNextAnimate(this.currentStepAnimates, 0, fn) + this.next = 0 + // #endif + } +} + + +const animateTypes1 = ['matrix', 'matrix3d', 'rotate', 'rotate3d', 'rotateX', 'rotateY', 'rotateZ', 'scale', 'scale3d', + 'scaleX', 'scaleY', 'scaleZ', 'skew', 'skewX', 'skewY', 'translate', 'translate3d', 'translateX', 'translateY', + 'translateZ' +] +const animateTypes2 = ['opacity', 'backgroundColor'] +const animateTypes3 = ['width', 'height', 'left', 'right', 'top', 'bottom'] +animateTypes1.concat(animateTypes2, animateTypes3).forEach(type => { + MPAnimation.prototype[type] = function(...args) { + // #ifndef APP-NVUE + this.animation[type](...args) + // #endif + // #ifdef APP-NVUE + this._nvuePushAnimates(type, args) + // #endif + return this + } +}) + +export function createAnimation(option, _this) { + if(!_this) return + clearTimeout(_this.timer) + return new MPAnimation(option, _this) +} diff --git a/uni_modules/uni-transition/components/uni-transition/uni-transition.vue b/uni_modules/uni-transition/components/uni-transition/uni-transition.vue new file mode 100644 index 0000000..be5e794 --- /dev/null +++ b/uni_modules/uni-transition/components/uni-transition/uni-transition.vue @@ -0,0 +1,277 @@ + + + + + diff --git a/uni_modules/uni-transition/package.json b/uni_modules/uni-transition/package.json new file mode 100644 index 0000000..379e9aa --- /dev/null +++ b/uni_modules/uni-transition/package.json @@ -0,0 +1,87 @@ +{ + "id": "uni-transition", + "displayName": "uni-transition 过渡动画", + "version": "1.3.1", + "description": "元素的简单过渡动画", + "keywords": [ + "uni-ui", + "uniui", + "动画", + "过渡", + "过渡动画" +], + "repository": "https://github.com/dcloudio/uni-ui", + "engines": { + "HBuilderX": "" + }, + "directories": { + "example": "../../temps/example_temps" + }, + "dcloudext": { + "category": [ + "前端组件", + "通用组件" + ], + "sale": { + "regular": { + "price": "0.00" + }, + "sourcecode": { + "price": "0.00" + } + }, + "contact": { + "qq": "" + }, + "declaration": { + "ads": "无", + "data": "无", + "permissions": "无" + }, + "npmurl": "https://www.npmjs.com/package/@dcloudio/uni-ui" + }, + "uni_modules": { + "dependencies": ["uni-scss"], + "encrypt": [], + "platforms": { + "cloud": { + "tcb": "y", + "aliyun": "y" + }, + "client": { + "App": { + "app-vue": "y", + "app-nvue": "y" + }, + "H5-mobile": { + "Safari": "y", + "Android Browser": "y", + "微信浏览器(Android)": "y", + "QQ浏览器(Android)": "y" + }, + "H5-pc": { + "Chrome": "y", + "IE": "y", + "Edge": "y", + "Firefox": "y", + "Safari": "y" + }, + "小程序": { + "微信": "y", + "阿里": "y", + "百度": "y", + "字节跳动": "y", + "QQ": "y" + }, + "快应用": { + "华为": "u", + "联盟": "u" + }, + "Vue": { + "vue2": "y", + "vue3": "y" + } + } + } + } +} \ No newline at end of file diff --git a/uni_modules/uni-transition/readme.md b/uni_modules/uni-transition/readme.md new file mode 100644 index 0000000..1e104fe --- /dev/null +++ b/uni_modules/uni-transition/readme.md @@ -0,0 +1,11 @@ + + +## Transition 过渡动画 +> **组件名:uni-transition** +> 代码块: `uTransition` + + +元素过渡动画 + +### [查看文档](https://uniapp.dcloud.io/component/uniui/uni-transition) +#### 如使用过程中有任何问题,或者您对uni-ui有一些好的建议,欢迎加入 uni-ui 交流群:871950839 \ No newline at end of file diff --git a/wxcomponents/vant/dist/action-sheet/index.d.ts b/wxcomponents/vant/dist/action-sheet/index.d.ts new file mode 100644 index 0000000..cb0ff5c --- /dev/null +++ b/wxcomponents/vant/dist/action-sheet/index.d.ts @@ -0,0 +1 @@ +export {}; diff --git a/wxcomponents/vant/dist/action-sheet/index.js b/wxcomponents/vant/dist/action-sheet/index.js new file mode 100644 index 0000000..aee6999 --- /dev/null +++ b/wxcomponents/vant/dist/action-sheet/index.js @@ -0,0 +1,71 @@ +import { VantComponent } from '../common/component'; +import { button } from '../mixins/button'; +VantComponent({ + classes: ['list-class'], + mixins: [button], + props: { + show: Boolean, + title: String, + cancelText: String, + description: String, + round: { + type: Boolean, + value: true, + }, + zIndex: { + type: Number, + value: 100, + }, + actions: { + type: Array, + value: [], + }, + overlay: { + type: Boolean, + value: true, + }, + closeOnClickOverlay: { + type: Boolean, + value: true, + }, + closeOnClickAction: { + type: Boolean, + value: true, + }, + safeAreaInsetBottom: { + type: Boolean, + value: true, + }, + }, + methods: { + onSelect(event) { + const { index } = event.currentTarget.dataset; + const { actions, closeOnClickAction, canIUseGetUserProfile } = this.data; + const item = actions[index]; + if (item) { + this.$emit('select', item); + if (closeOnClickAction) { + this.onClose(); + } + if (item.openType === 'getUserInfo' && canIUseGetUserProfile) { + wx.getUserProfile({ + desc: item.getUserProfileDesc || ' ', + complete: (userProfile) => { + this.$emit('getuserinfo', userProfile); + }, + }); + } + } + }, + onCancel() { + this.$emit('cancel'); + }, + onClose() { + this.$emit('close'); + }, + onClickOverlay() { + this.$emit('click-overlay'); + this.onClose(); + }, + }, +}); diff --git a/wxcomponents/vant/dist/action-sheet/index.json b/wxcomponents/vant/dist/action-sheet/index.json new file mode 100644 index 0000000..19bf989 --- /dev/null +++ b/wxcomponents/vant/dist/action-sheet/index.json @@ -0,0 +1,8 @@ +{ + "component": true, + "usingComponents": { + "van-icon": "../icon/index", + "van-popup": "../popup/index", + "van-loading": "../loading/index" + } +} diff --git a/wxcomponents/vant/dist/action-sheet/index.vue b/wxcomponents/vant/dist/action-sheet/index.vue new file mode 100644 index 0000000..616bb0a --- /dev/null +++ b/wxcomponents/vant/dist/action-sheet/index.vue @@ -0,0 +1,112 @@ + + + + \ No newline at end of file diff --git a/wxcomponents/vant/dist/action-sheet/index.wxml b/wxcomponents/vant/dist/action-sheet/index.wxml new file mode 100644 index 0000000..d59a45d --- /dev/null +++ b/wxcomponents/vant/dist/action-sheet/index.wxml @@ -0,0 +1,69 @@ + + + + + {{ title }} + + + + {{ description }} + + + + + + + + + + {{ cancelText }} + + + diff --git a/wxcomponents/vant/dist/action-sheet/index.wxss b/wxcomponents/vant/dist/action-sheet/index.wxss new file mode 100644 index 0000000..eedd361 --- /dev/null +++ b/wxcomponents/vant/dist/action-sheet/index.wxss @@ -0,0 +1 @@ +@import '../common/index.wxss';.van-action-sheet{color:var(--action-sheet-item-text-color,#323233);max-height:var(--action-sheet-max-height,90%)!important}.van-action-sheet__cancel,.van-action-sheet__item{background-color:var(--action-sheet-item-background,#fff);font-size:var(--action-sheet-item-font-size,16px);line-height:var(--action-sheet-item-line-height,22px);padding:14px 16px;text-align:center}.van-action-sheet__cancel--hover,.van-action-sheet__item--hover{background-color:#f2f3f5}.van-action-sheet__cancel:after,.van-action-sheet__item:after{border-width:0}.van-action-sheet__cancel{color:var(--action-sheet-cancel-text-color,#646566)}.van-action-sheet__gap{background-color:var(--action-sheet-cancel-padding-color,#f7f8fa);display:block;height:var(--action-sheet-cancel-padding-top,8px)}.van-action-sheet__item--disabled{color:var(--action-sheet-item-disabled-text-color,#c8c9cc)}.van-action-sheet__item--disabled.van-action-sheet__item--hover{background-color:var(--action-sheet-item-background,#fff)}.van-action-sheet__subname{color:var(--action-sheet-subname-color,#969799);font-size:var(--action-sheet-subname-font-size,12px);line-height:var(--action-sheet-subname-line-height,20px);margin-top:var(--padding-xs,8px)}.van-action-sheet__header{font-size:var(--action-sheet-header-font-size,16px);font-weight:var(--font-weight-bold,500);line-height:var(--action-sheet-header-height,48px);text-align:center}.van-action-sheet__description{color:var(--action-sheet-description-color,#969799);font-size:var(--action-sheet-description-font-size,14px);line-height:var(--action-sheet-description-line-height,20px);padding:20px var(--padding-md,16px);text-align:center}.van-action-sheet__close{color:var(--action-sheet-close-icon-color,#c8c9cc);font-size:var(--action-sheet-close-icon-size,22px)!important;line-height:inherit!important;padding:var(--action-sheet-close-icon-padding,0 16px);position:absolute!important;right:0;top:0}.van-action-sheet__loading{display:flex!important} \ No newline at end of file diff --git a/wxcomponents/vant/dist/area/index.d.ts b/wxcomponents/vant/dist/area/index.d.ts new file mode 100644 index 0000000..cb0ff5c --- /dev/null +++ b/wxcomponents/vant/dist/area/index.d.ts @@ -0,0 +1 @@ +export {}; diff --git a/wxcomponents/vant/dist/area/index.js b/wxcomponents/vant/dist/area/index.js new file mode 100644 index 0000000..9cf1edd --- /dev/null +++ b/wxcomponents/vant/dist/area/index.js @@ -0,0 +1,220 @@ +import { VantComponent } from '../common/component'; +import { pickerProps } from '../picker/shared'; +import { requestAnimationFrame } from '../common/utils'; +const EMPTY_CODE = '000000'; +VantComponent({ + classes: ['active-class', 'toolbar-class', 'column-class'], + props: Object.assign(Object.assign({}, pickerProps), { showToolbar: { + type: Boolean, + value: true, + }, value: { + type: String, + observer(value) { + this.code = value; + this.setValues(); + }, + }, areaList: { + type: Object, + value: {}, + observer: 'setValues', + }, columnsNum: { + type: null, + value: 3, + }, columnsPlaceholder: { + type: Array, + observer(val) { + this.setData({ + typeToColumnsPlaceholder: { + province: val[0] || '', + city: val[1] || '', + county: val[2] || '', + }, + }); + }, + } }), + data: { + columns: [{ values: [] }, { values: [] }, { values: [] }], + typeToColumnsPlaceholder: {}, + }, + mounted() { + requestAnimationFrame(() => { + this.setValues(); + }); + }, + methods: { + getPicker() { + if (this.picker == null) { + this.picker = this.selectComponent('.van-area__picker'); + } + return this.picker; + }, + onCancel(event) { + this.emit('cancel', event.detail); + }, + onConfirm(event) { + const { index } = event.detail; + let { value } = event.detail; + value = this.parseValues(value); + this.emit('confirm', { value, index }); + }, + emit(type, detail) { + detail.values = detail.value; + delete detail.value; + this.$emit(type, detail); + }, + parseValues(values) { + const { columnsPlaceholder } = this.data; + return values.map((value, index) => { + if (value && + (!value.code || value.name === columnsPlaceholder[index])) { + return Object.assign(Object.assign({}, value), { code: '', name: '' }); + } + return value; + }); + }, + onChange(event) { + var _a; + const { index, picker, value } = event.detail; + this.code = value[index].code; + (_a = this.setValues()) === null || _a === void 0 ? void 0 : _a.then(() => { + this.$emit('change', { + picker, + values: this.parseValues(picker.getValues()), + index, + }); + }); + }, + getConfig(type) { + const { areaList } = this.data; + return (areaList && areaList[`${type}_list`]) || {}; + }, + getList(type, code) { + if (type !== 'province' && !code) { + return []; + } + const { typeToColumnsPlaceholder } = this.data; + const list = this.getConfig(type); + let result = Object.keys(list).map((code) => ({ + code, + name: list[code], + })); + if (code != null) { + // oversea code + if (code[0] === '9' && type === 'city') { + code = '9'; + } + result = result.filter((item) => item.code.indexOf(code) === 0); + } + if (typeToColumnsPlaceholder[type] && result.length) { + // set columns placeholder + const codeFill = type === 'province' + ? '' + : type === 'city' + ? EMPTY_CODE.slice(2, 4) + : EMPTY_CODE.slice(4, 6); + result.unshift({ + code: `${code}${codeFill}`, + name: typeToColumnsPlaceholder[type], + }); + } + return result; + }, + getIndex(type, code) { + let compareNum = type === 'province' ? 2 : type === 'city' ? 4 : 6; + const list = this.getList(type, code.slice(0, compareNum - 2)); + // oversea code + if (code[0] === '9' && type === 'province') { + compareNum = 1; + } + code = code.slice(0, compareNum); + for (let i = 0; i < list.length; i++) { + if (list[i].code.slice(0, compareNum) === code) { + return i; + } + } + return 0; + }, + setValues() { + const picker = this.getPicker(); + if (!picker) { + return; + } + let code = this.code || this.getDefaultCode(); + const provinceList = this.getList('province'); + const cityList = this.getList('city', code.slice(0, 2)); + const stack = []; + const indexes = []; + const { columnsNum } = this.data; + if (columnsNum >= 1) { + stack.push(picker.setColumnValues(0, provinceList, false)); + indexes.push(this.getIndex('province', code)); + } + if (columnsNum >= 2) { + stack.push(picker.setColumnValues(1, cityList, false)); + indexes.push(this.getIndex('city', code)); + if (cityList.length && code.slice(2, 4) === '00') { + [{ code }] = cityList; + } + } + if (columnsNum === 3) { + stack.push(picker.setColumnValues(2, this.getList('county', code.slice(0, 4)), false)); + indexes.push(this.getIndex('county', code)); + } + return Promise.all(stack) + .catch(() => { }) + .then(() => picker.setIndexes(indexes)) + .catch(() => { }); + }, + getDefaultCode() { + const { columnsPlaceholder } = this.data; + if (columnsPlaceholder.length) { + return EMPTY_CODE; + } + const countyCodes = Object.keys(this.getConfig('county')); + if (countyCodes[0]) { + return countyCodes[0]; + } + const cityCodes = Object.keys(this.getConfig('city')); + if (cityCodes[0]) { + return cityCodes[0]; + } + return ''; + }, + getValues() { + const picker = this.getPicker(); + if (!picker) { + return []; + } + return this.parseValues(picker.getValues().filter((value) => !!value)); + }, + getDetail() { + const values = this.getValues(); + const area = { + code: '', + country: '', + province: '', + city: '', + county: '', + }; + if (!values.length) { + return area; + } + const names = values.map((item) => item.name); + area.code = values[values.length - 1].code; + if (area.code[0] === '9') { + area.country = names[1] || ''; + area.province = names[2] || ''; + } + else { + area.province = names[0] || ''; + area.city = names[1] || ''; + area.county = names[2] || ''; + } + return area; + }, + reset(code) { + this.code = code || ''; + return this.setValues(); + }, + }, +}); diff --git a/wxcomponents/vant/dist/area/index.json b/wxcomponents/vant/dist/area/index.json new file mode 100644 index 0000000..a778e91 --- /dev/null +++ b/wxcomponents/vant/dist/area/index.json @@ -0,0 +1,6 @@ +{ + "component": true, + "usingComponents": { + "van-picker": "../picker/index" + } +} diff --git a/wxcomponents/vant/dist/area/index.vue b/wxcomponents/vant/dist/area/index.vue new file mode 100644 index 0000000..907975f --- /dev/null +++ b/wxcomponents/vant/dist/area/index.vue @@ -0,0 +1,234 @@ + + + + \ No newline at end of file diff --git a/wxcomponents/vant/dist/area/index.wxml b/wxcomponents/vant/dist/area/index.wxml new file mode 100644 index 0000000..3a437b7 --- /dev/null +++ b/wxcomponents/vant/dist/area/index.wxml @@ -0,0 +1,20 @@ + + + diff --git a/wxcomponents/vant/dist/area/index.wxs b/wxcomponents/vant/dist/area/index.wxs new file mode 100644 index 0000000..07723c1 --- /dev/null +++ b/wxcomponents/vant/dist/area/index.wxs @@ -0,0 +1,8 @@ +/* eslint-disable */ +function displayColumns(columns, columnsNum) { + return columns.slice(0, +columnsNum); +} + +module.exports = { + displayColumns: displayColumns, +}; diff --git a/wxcomponents/vant/dist/area/index.wxss b/wxcomponents/vant/dist/area/index.wxss new file mode 100644 index 0000000..99694d6 --- /dev/null +++ b/wxcomponents/vant/dist/area/index.wxss @@ -0,0 +1 @@ +@import '../common/index.wxss'; \ No newline at end of file diff --git a/wxcomponents/vant/dist/button/index.d.ts b/wxcomponents/vant/dist/button/index.d.ts new file mode 100644 index 0000000..cb0ff5c --- /dev/null +++ b/wxcomponents/vant/dist/button/index.d.ts @@ -0,0 +1 @@ +export {}; diff --git a/wxcomponents/vant/dist/button/index.js b/wxcomponents/vant/dist/button/index.js new file mode 100644 index 0000000..0e3c134 --- /dev/null +++ b/wxcomponents/vant/dist/button/index.js @@ -0,0 +1,64 @@ +import { VantComponent } from '../common/component'; +import { button } from '../mixins/button'; +import { canIUseFormFieldButton } from '../common/version'; +const mixins = [button]; +if (canIUseFormFieldButton()) { + mixins.push('wx://form-field-button'); +} +VantComponent({ + mixins, + classes: ['hover-class', 'loading-class'], + data: { + baseStyle: '', + }, + props: { + formType: String, + icon: String, + classPrefix: { + type: String, + value: 'van-icon', + }, + plain: Boolean, + block: Boolean, + round: Boolean, + square: Boolean, + loading: Boolean, + hairline: Boolean, + disabled: Boolean, + loadingText: String, + customStyle: String, + loadingType: { + type: String, + value: 'circular', + }, + type: { + type: String, + value: 'default', + }, + dataset: null, + size: { + type: String, + value: 'normal', + }, + loadingSize: { + type: String, + value: '20px', + }, + color: String, + }, + methods: { + onClick(event) { + this.$emit('click', event); + const { canIUseGetUserProfile, openType, getUserProfileDesc, lang, } = this.data; + if (openType === 'getUserInfo' && canIUseGetUserProfile) { + wx.getUserProfile({ + desc: getUserProfileDesc || ' ', + lang: lang || 'en', + complete: (userProfile) => { + this.$emit('getuserinfo', userProfile); + }, + }); + } + }, + }, +}); diff --git a/wxcomponents/vant/dist/button/index.json b/wxcomponents/vant/dist/button/index.json new file mode 100644 index 0000000..e00a588 --- /dev/null +++ b/wxcomponents/vant/dist/button/index.json @@ -0,0 +1,7 @@ +{ + "component": true, + "usingComponents": { + "van-icon": "../icon/index", + "van-loading": "../loading/index" + } +} diff --git a/wxcomponents/vant/dist/button/index.vue b/wxcomponents/vant/dist/button/index.vue new file mode 100644 index 0000000..9555e12 --- /dev/null +++ b/wxcomponents/vant/dist/button/index.vue @@ -0,0 +1,92 @@ + + + + \ No newline at end of file diff --git a/wxcomponents/vant/dist/button/index.wxml b/wxcomponents/vant/dist/button/index.wxml new file mode 100644 index 0000000..b5abebb --- /dev/null +++ b/wxcomponents/vant/dist/button/index.wxml @@ -0,0 +1,54 @@ + + + + diff --git a/wxcomponents/vant/dist/button/index.wxs b/wxcomponents/vant/dist/button/index.wxs new file mode 100644 index 0000000..8b649fe --- /dev/null +++ b/wxcomponents/vant/dist/button/index.wxs @@ -0,0 +1,39 @@ +/* eslint-disable */ +var style = require('../wxs/style.wxs'); + +function rootStyle(data) { + if (!data.color) { + return data.customStyle; + } + + var properties = { + color: data.plain ? data.color : '#fff', + background: data.plain ? null : data.color, + }; + + // hide border when color is linear-gradient + if (data.color.indexOf('gradient') !== -1) { + properties.border = 0; + } else { + properties['border-color'] = data.color; + } + + return style([properties, data.customStyle]); +} + +function loadingColor(data) { + if (data.plain) { + return data.color ? data.color : '#c9c9c9'; + } + + if (data.type === 'default') { + return '#c9c9c9'; + } + + return '#fff'; +} + +module.exports = { + rootStyle: rootStyle, + loadingColor: loadingColor, +}; diff --git a/wxcomponents/vant/dist/button/index.wxss b/wxcomponents/vant/dist/button/index.wxss new file mode 100644 index 0000000..bd8bb5a --- /dev/null +++ b/wxcomponents/vant/dist/button/index.wxss @@ -0,0 +1 @@ +@import '../common/index.wxss';.van-button{-webkit-text-size-adjust:100%;align-items:center;-webkit-appearance:none;border-radius:var(--button-border-radius,2px);box-sizing:border-box;display:inline-flex;font-size:var(--button-default-font-size,16px);height:var(--button-default-height,44px);justify-content:center;line-height:var(--button-line-height,20px);padding:0;position:relative;text-align:center;transition:opacity .2s;vertical-align:middle}.van-button:before{background-color:#000;border:inherit;border-color:#000;border-radius:inherit;content:" ";height:100%;left:50%;opacity:0;position:absolute;top:50%;transform:translate(-50%,-50%);width:100%}.van-button:after{border-width:0}.van-button--active:before{opacity:.15}.van-button--unclickable:after{display:none}.van-button--default{background:var(--button-default-background-color,#fff);border:var(--button-border-width,1px) solid var(--button-default-border-color,#ebedf0);color:var(--button-default-color,#323233)}.van-button--primary{background:var(--button-primary-background-color,#07c160);border:var(--button-border-width,1px) solid var(--button-primary-border-color,#07c160);color:var(--button-primary-color,#fff)}.van-button--info{background:var(--button-info-background-color,#1989fa);border:var(--button-border-width,1px) solid var(--button-info-border-color,#1989fa);color:var(--button-info-color,#fff)}.van-button--danger{background:var(--button-danger-background-color,#ee0a24);border:var(--button-border-width,1px) solid var(--button-danger-border-color,#ee0a24);color:var(--button-danger-color,#fff)}.van-button--warning{background:var(--button-warning-background-color,#ff976a);border:var(--button-border-width,1px) solid var(--button-warning-border-color,#ff976a);color:var(--button-warning-color,#fff)}.van-button--plain{background:var(--button-plain-background-color,#fff)}.van-button--plain.van-button--primary{color:var(--button-primary-background-color,#07c160)}.van-button--plain.van-button--info{color:var(--button-info-background-color,#1989fa)}.van-button--plain.van-button--danger{color:var(--button-danger-background-color,#ee0a24)}.van-button--plain.van-button--warning{color:var(--button-warning-background-color,#ff976a)}.van-button--large{height:var(--button-large-height,50px);width:100%}.van-button--normal{font-size:var(--button-normal-font-size,14px);padding:0 15px}.van-button--small{font-size:var(--button-small-font-size,12px);height:var(--button-small-height,30px);min-width:var(--button-small-min-width,60px);padding:0 var(--padding-xs,8px)}.van-button--mini{display:inline-block;font-size:var(--button-mini-font-size,10px);height:var(--button-mini-height,22px);min-width:var(--button-mini-min-width,50px)}.van-button--mini+.van-button--mini{margin-left:5px}.van-button--block{display:flex;width:100%}.van-button--round{border-radius:var(--button-round-border-radius,999px)}.van-button--square{border-radius:0}.van-button--disabled{opacity:var(--button-disabled-opacity,.5)}.van-button__text{display:inline}.van-button__icon+.van-button__text:not(:empty),.van-button__loading-text{margin-left:4px}.van-button__icon{line-height:inherit!important;min-width:1em;vertical-align:top}.van-button--hairline{border-width:0;padding-top:1px}.van-button--hairline:after{border-color:inherit;border-radius:calc(var(--button-border-radius, 2px)*2);border-width:1px}.van-button--hairline.van-button--round:after{border-radius:var(--button-round-border-radius,999px)}.van-button--hairline.van-button--square:after{border-radius:0} \ No newline at end of file diff --git a/wxcomponents/vant/dist/calendar/calendar.vue b/wxcomponents/vant/dist/calendar/calendar.vue new file mode 100644 index 0000000..cd45e25 --- /dev/null +++ b/wxcomponents/vant/dist/calendar/calendar.vue @@ -0,0 +1,37 @@ + + + + \ No newline at end of file diff --git a/wxcomponents/vant/dist/calendar/calendar.wxml b/wxcomponents/vant/dist/calendar/calendar.wxml new file mode 100644 index 0000000..2ba6f30 --- /dev/null +++ b/wxcomponents/vant/dist/calendar/calendar.wxml @@ -0,0 +1,68 @@ + +

+ +
+ + + + + + + + + + + + {{ + computed.getButtonDisabled(type, currentDate, minRange) + ? confirmDisabledText + : confirmText + }} + + + diff --git a/wxcomponents/vant/dist/calendar/components/header/index.d.ts b/wxcomponents/vant/dist/calendar/components/header/index.d.ts new file mode 100644 index 0000000..cb0ff5c --- /dev/null +++ b/wxcomponents/vant/dist/calendar/components/header/index.d.ts @@ -0,0 +1 @@ +export {}; diff --git a/wxcomponents/vant/dist/calendar/components/header/index.js b/wxcomponents/vant/dist/calendar/components/header/index.js new file mode 100644 index 0000000..8fb3682 --- /dev/null +++ b/wxcomponents/vant/dist/calendar/components/header/index.js @@ -0,0 +1,37 @@ +import { VantComponent } from '../../../common/component'; +VantComponent({ + props: { + title: { + type: String, + value: '日期选择', + }, + subtitle: String, + showTitle: Boolean, + showSubtitle: Boolean, + firstDayOfWeek: { + type: Number, + observer: 'initWeekDay', + }, + }, + data: { + weekdays: [], + }, + created() { + this.initWeekDay(); + }, + methods: { + initWeekDay() { + const defaultWeeks = ['日', '一', '二', '三', '四', '五', '六']; + const firstDayOfWeek = this.data.firstDayOfWeek || 0; + this.setData({ + weekdays: [ + ...defaultWeeks.slice(firstDayOfWeek, 7), + ...defaultWeeks.slice(0, firstDayOfWeek), + ], + }); + }, + onClickSubtitle(event) { + this.$emit('click-subtitle', event); + }, + }, +}); diff --git a/wxcomponents/vant/dist/calendar/components/header/index.json b/wxcomponents/vant/dist/calendar/components/header/index.json new file mode 100644 index 0000000..467ce29 --- /dev/null +++ b/wxcomponents/vant/dist/calendar/components/header/index.json @@ -0,0 +1,3 @@ +{ + "component": true +} diff --git a/wxcomponents/vant/dist/calendar/components/header/index.vue b/wxcomponents/vant/dist/calendar/components/header/index.vue new file mode 100644 index 0000000..fd8fd55 --- /dev/null +++ b/wxcomponents/vant/dist/calendar/components/header/index.vue @@ -0,0 +1,64 @@ + + + + \ No newline at end of file diff --git a/wxcomponents/vant/dist/calendar/components/header/index.wxml b/wxcomponents/vant/dist/calendar/components/header/index.wxml new file mode 100644 index 0000000..7e56c83 --- /dev/null +++ b/wxcomponents/vant/dist/calendar/components/header/index.wxml @@ -0,0 +1,16 @@ + + + + {{ title }} + + + + {{ subtitle }} + + + + + {{ item }} + + + diff --git a/wxcomponents/vant/dist/calendar/components/header/index.wxss b/wxcomponents/vant/dist/calendar/components/header/index.wxss new file mode 100644 index 0000000..272537e --- /dev/null +++ b/wxcomponents/vant/dist/calendar/components/header/index.wxss @@ -0,0 +1 @@ +@import '../../../common/index.wxss';.van-calendar__header{box-shadow:var(--calendar-header-box-shadow,0 2px 10px hsla(220,1%,50%,.16));flex-shrink:0}.van-calendar__header-subtitle,.van-calendar__header-title{font-weight:var(--font-weight-bold,500);height:var(--calendar-header-title-height,44px);line-height:var(--calendar-header-title-height,44px);text-align:center}.van-calendar__header-title+.van-calendar__header-title,.van-calendar__header-title:empty{display:none}.van-calendar__header-title:empty+.van-calendar__header-title{display:block!important}.van-calendar__weekdays{display:flex}.van-calendar__weekday{flex:1;font-size:var(--calendar-weekdays-font-size,12px);line-height:var(--calendar-weekdays-height,30px);text-align:center} \ No newline at end of file diff --git a/wxcomponents/vant/dist/calendar/components/month/index.d.ts b/wxcomponents/vant/dist/calendar/components/month/index.d.ts new file mode 100644 index 0000000..3ccf85a --- /dev/null +++ b/wxcomponents/vant/dist/calendar/components/month/index.d.ts @@ -0,0 +1,6 @@ +export interface Day { + date: Date; + type: string; + text: number; + bottomInfo?: string; +} diff --git a/wxcomponents/vant/dist/calendar/components/month/index.js b/wxcomponents/vant/dist/calendar/components/month/index.js new file mode 100644 index 0000000..d04c0fe --- /dev/null +++ b/wxcomponents/vant/dist/calendar/components/month/index.js @@ -0,0 +1,154 @@ +import { VantComponent } from '../../../common/component'; +import { getMonthEndDay, compareDay, getPrevDay, getNextDay, } from '../../utils'; +VantComponent({ + props: { + date: { + type: null, + observer: 'setDays', + }, + type: { + type: String, + observer: 'setDays', + }, + color: String, + minDate: { + type: null, + observer: 'setDays', + }, + maxDate: { + type: null, + observer: 'setDays', + }, + showMark: Boolean, + rowHeight: null, + formatter: { + type: null, + observer: 'setDays', + }, + currentDate: { + type: null, + observer: 'setDays', + }, + firstDayOfWeek: { + type: Number, + observer: 'setDays', + }, + allowSameDay: Boolean, + showSubtitle: Boolean, + showMonthTitle: Boolean, + }, + data: { + visible: true, + days: [], + }, + methods: { + onClick(event) { + const { index } = event.currentTarget.dataset; + const item = this.data.days[index]; + if (item.type !== 'disabled') { + this.$emit('click', item); + } + }, + setDays() { + const days = []; + const startDate = new Date(this.data.date); + const year = startDate.getFullYear(); + const month = startDate.getMonth(); + const totalDay = getMonthEndDay(startDate.getFullYear(), startDate.getMonth() + 1); + for (let day = 1; day <= totalDay; day++) { + const date = new Date(year, month, day); + const type = this.getDayType(date); + let config = { + date, + type, + text: day, + bottomInfo: this.getBottomInfo(type), + }; + if (this.data.formatter) { + config = this.data.formatter(config); + } + days.push(config); + } + this.setData({ days }); + }, + getMultipleDayType(day) { + const { currentDate } = this.data; + if (!Array.isArray(currentDate)) { + return ''; + } + const isSelected = (date) => currentDate.some((item) => compareDay(item, date) === 0); + if (isSelected(day)) { + const prevDay = getPrevDay(day); + const nextDay = getNextDay(day); + const prevSelected = isSelected(prevDay); + const nextSelected = isSelected(nextDay); + if (prevSelected && nextSelected) { + return 'multiple-middle'; + } + if (prevSelected) { + return 'end'; + } + return nextSelected ? 'start' : 'multiple-selected'; + } + return ''; + }, + getRangeDayType(day) { + const { currentDate, allowSameDay } = this.data; + if (!Array.isArray(currentDate)) { + return ''; + } + const [startDay, endDay] = currentDate; + if (!startDay) { + return ''; + } + const compareToStart = compareDay(day, startDay); + if (!endDay) { + return compareToStart === 0 ? 'start' : ''; + } + const compareToEnd = compareDay(day, endDay); + if (compareToStart === 0 && compareToEnd === 0 && allowSameDay) { + return 'start-end'; + } + if (compareToStart === 0) { + return 'start'; + } + if (compareToEnd === 0) { + return 'end'; + } + if (compareToStart > 0 && compareToEnd < 0) { + return 'middle'; + } + return ''; + }, + getDayType(day) { + const { type, minDate, maxDate, currentDate } = this.data; + if (compareDay(day, minDate) < 0 || compareDay(day, maxDate) > 0) { + return 'disabled'; + } + if (type === 'single') { + return compareDay(day, currentDate) === 0 ? 'selected' : ''; + } + if (type === 'multiple') { + return this.getMultipleDayType(day); + } + /* istanbul ignore else */ + if (type === 'range') { + return this.getRangeDayType(day); + } + return ''; + }, + getBottomInfo(type) { + if (this.data.type === 'range') { + if (type === 'start') { + return '开始'; + } + if (type === 'end') { + return '结束'; + } + if (type === 'start-end') { + return '开始/结束'; + } + } + }, + }, +}); diff --git a/wxcomponents/vant/dist/calendar/components/month/index.json b/wxcomponents/vant/dist/calendar/components/month/index.json new file mode 100644 index 0000000..467ce29 --- /dev/null +++ b/wxcomponents/vant/dist/calendar/components/month/index.json @@ -0,0 +1,3 @@ +{ + "component": true +} diff --git a/wxcomponents/vant/dist/calendar/components/month/index.vue b/wxcomponents/vant/dist/calendar/components/month/index.vue new file mode 100644 index 0000000..e94271c --- /dev/null +++ b/wxcomponents/vant/dist/calendar/components/month/index.vue @@ -0,0 +1,194 @@ + + + + \ No newline at end of file diff --git a/wxcomponents/vant/dist/calendar/components/month/index.wxml b/wxcomponents/vant/dist/calendar/components/month/index.wxml new file mode 100644 index 0000000..0c73b2f --- /dev/null +++ b/wxcomponents/vant/dist/calendar/components/month/index.wxml @@ -0,0 +1,39 @@ + + + + + + {{ computed.formatMonthTitle(date) }} + + + + + {{ computed.getMark(date) }} + + + + + {{ item.topInfo }} + {{ item.text }} + + {{ item.bottomInfo }} + + + + + {{ item.topInfo }} + {{ item.text }} + + {{ item.bottomInfo }} + + + + + diff --git a/wxcomponents/vant/dist/calendar/components/month/index.wxs b/wxcomponents/vant/dist/calendar/components/month/index.wxs new file mode 100644 index 0000000..55e45a5 --- /dev/null +++ b/wxcomponents/vant/dist/calendar/components/month/index.wxs @@ -0,0 +1,71 @@ +/* eslint-disable */ +var utils = require('../../utils.wxs'); + +function getMark(date) { + return getDate(date).getMonth() + 1; +} + +var ROW_HEIGHT = 64; + +function getDayStyle(type, index, date, rowHeight, color, firstDayOfWeek) { + var style = []; + var current = getDate(date).getDay() || 7; + var offset = current < firstDayOfWeek ? (7 - firstDayOfWeek + current) : + current === 7 && firstDayOfWeek === 0 ? 0 : + (current - firstDayOfWeek); + + if (index === 0) { + style.push(['margin-left', (100 * offset) / 7 + '%']); + } + + if (rowHeight !== ROW_HEIGHT) { + style.push(['height', rowHeight + 'px']); + } + + if (color) { + if ( + type === 'start' || + type === 'end' || + type === 'start-end' || + type === 'multiple-selected' || + type === 'multiple-middle' + ) { + style.push(['background', color]); + } else if (type === 'middle') { + style.push(['color', color]); + } + } + + return style + .map(function(item) { + return item.join(':'); + }) + .join(';'); +} + +function formatMonthTitle(date) { + date = getDate(date); + return date.getFullYear() + '年' + (date.getMonth() + 1) + '月'; +} + +function getMonthStyle(visible, date, rowHeight) { + if (!visible) { + date = getDate(date); + + var totalDay = utils.getMonthEndDay( + date.getFullYear(), + date.getMonth() + 1 + ); + var offset = getDate(date).getDay(); + var padding = Math.ceil((totalDay + offset) / 7) * rowHeight; + + return 'padding-bottom:' + padding + 'px'; + } +} + +module.exports = { + getMark: getMark, + getDayStyle: getDayStyle, + formatMonthTitle: formatMonthTitle, + getMonthStyle: getMonthStyle +}; diff --git a/wxcomponents/vant/dist/calendar/components/month/index.wxss b/wxcomponents/vant/dist/calendar/components/month/index.wxss new file mode 100644 index 0000000..9aee73d --- /dev/null +++ b/wxcomponents/vant/dist/calendar/components/month/index.wxss @@ -0,0 +1 @@ +@import '../../../common/index.wxss';.van-calendar{background-color:var(--calendar-background-color,#fff);display:flex;flex-direction:column;height:100%}.van-calendar__month-title{font-size:var(--calendar-month-title-font-size,14px);font-weight:var(--font-weight-bold,500);height:var(--calendar-header-title-height,44px);line-height:var(--calendar-header-title-height,44px);text-align:center}.van-calendar__days{display:flex;flex-wrap:wrap;position:relative;-webkit-user-select:none;user-select:none}.van-calendar__month-mark{color:var(--calendar-month-mark-color,rgba(242,243,245,.8));font-size:var(--calendar-month-mark-font-size,160px);left:50%;pointer-events:none;position:absolute;top:50%;transform:translate(-50%,-50%);z-index:0}.van-calendar__day,.van-calendar__selected-day{align-items:center;display:flex;justify-content:center;text-align:center}.van-calendar__day{font-size:var(--calendar-day-font-size,16px);height:var(--calendar-day-height,64px);position:relative;width:14.285%}.van-calendar__day--end,.van-calendar__day--multiple-middle,.van-calendar__day--multiple-selected,.van-calendar__day--start,.van-calendar__day--start-end{background-color:var(--calendar-range-edge-background-color,#ee0a24);color:var(--calendar-range-edge-color,#fff)}.van-calendar__day--start{border-radius:4px 0 0 4px}.van-calendar__day--end{border-radius:0 4px 4px 0}.van-calendar__day--multiple-selected,.van-calendar__day--start-end{border-radius:4px}.van-calendar__day--middle{color:var(--calendar-range-middle-color,#ee0a24)}.van-calendar__day--middle:after{background-color:currentColor;bottom:0;content:"";left:0;opacity:var(--calendar-range-middle-background-opacity,.1);position:absolute;right:0;top:0}.van-calendar__day--disabled{color:var(--calendar-day-disabled-color,#c8c9cc);cursor:default}.van-calendar__bottom-info,.van-calendar__top-info{font-size:var(--calendar-info-font-size,10px);left:0;line-height:var(--calendar-info-line-height,14px);position:absolute;right:0}@media (max-width:350px){.van-calendar__bottom-info,.van-calendar__top-info{font-size:9px}}.van-calendar__top-info{top:6px}.van-calendar__bottom-info{bottom:6px}.van-calendar__selected-day{background-color:var(--calendar-selected-day-background-color,#ee0a24);border-radius:4px;color:var(--calendar-selected-day-color,#fff);height:var(--calendar-selected-day-size,54px);width:var(--calendar-selected-day-size,54px)} \ No newline at end of file diff --git a/wxcomponents/vant/dist/calendar/index.d.ts b/wxcomponents/vant/dist/calendar/index.d.ts new file mode 100644 index 0000000..cb0ff5c --- /dev/null +++ b/wxcomponents/vant/dist/calendar/index.d.ts @@ -0,0 +1 @@ +export {}; diff --git a/wxcomponents/vant/dist/calendar/index.js b/wxcomponents/vant/dist/calendar/index.js new file mode 100644 index 0000000..0c529ef --- /dev/null +++ b/wxcomponents/vant/dist/calendar/index.js @@ -0,0 +1,342 @@ +import { VantComponent } from '../common/component'; +import { ROW_HEIGHT, getPrevDay, getNextDay, getToday, compareDay, copyDates, calcDateNum, formatMonthTitle, compareMonth, getMonths, getDayByOffset, } from './utils'; +import Toast from '../toast/toast'; +import { requestAnimationFrame } from '../common/utils'; +const initialMinDate = getToday().getTime(); +const initialMaxDate = (() => { + const now = getToday(); + return new Date(now.getFullYear(), now.getMonth() + 6, now.getDate()).getTime(); +})(); +const getTime = (date) => date instanceof Date ? date.getTime() : date; +VantComponent({ + props: { + title: { + type: String, + value: '日期选择', + }, + color: String, + show: { + type: Boolean, + observer(val) { + if (val) { + this.initRect(); + this.scrollIntoView(); + } + }, + }, + formatter: null, + confirmText: { + type: String, + value: '确定', + }, + confirmDisabledText: { + type: String, + value: '确定', + }, + rangePrompt: String, + showRangePrompt: { + type: Boolean, + value: true, + }, + defaultDate: { + type: null, + observer(val) { + this.setData({ currentDate: val }); + this.scrollIntoView(); + }, + }, + allowSameDay: Boolean, + type: { + type: String, + value: 'single', + observer: 'reset', + }, + minDate: { + type: Number, + value: initialMinDate, + }, + maxDate: { + type: Number, + value: initialMaxDate, + }, + position: { + type: String, + value: 'bottom', + }, + rowHeight: { + type: null, + value: ROW_HEIGHT, + }, + round: { + type: Boolean, + value: true, + }, + poppable: { + type: Boolean, + value: true, + }, + showMark: { + type: Boolean, + value: true, + }, + showTitle: { + type: Boolean, + value: true, + }, + showConfirm: { + type: Boolean, + value: true, + }, + showSubtitle: { + type: Boolean, + value: true, + }, + safeAreaInsetBottom: { + type: Boolean, + value: true, + }, + closeOnClickOverlay: { + type: Boolean, + value: true, + }, + maxRange: { + type: null, + value: null, + }, + minRange: { + type: Number, + value: 1, + }, + firstDayOfWeek: { + type: Number, + value: 0, + }, + readonly: Boolean, + }, + data: { + subtitle: '', + currentDate: null, + scrollIntoView: '', + }, + created() { + this.setData({ + currentDate: this.getInitialDate(this.data.defaultDate), + }); + }, + mounted() { + if (this.data.show || !this.data.poppable) { + this.initRect(); + this.scrollIntoView(); + } + }, + methods: { + reset() { + this.setData({ currentDate: this.getInitialDate() }); + this.scrollIntoView(); + }, + initRect() { + if (this.contentObserver != null) { + this.contentObserver.disconnect(); + } + const contentObserver = this.createIntersectionObserver({ + thresholds: [0, 0.1, 0.9, 1], + observeAll: true, + }); + this.contentObserver = contentObserver; + contentObserver.relativeTo('.van-calendar__body'); + contentObserver.observe('.month', (res) => { + if (res.boundingClientRect.top <= res.relativeRect.top) { + // @ts-ignore + this.setData({ subtitle: formatMonthTitle(res.dataset.date) }); + } + }); + }, + limitDateRange(date, minDate = null, maxDate = null) { + minDate = minDate || this.data.minDate; + maxDate = maxDate || this.data.maxDate; + if (compareDay(date, minDate) === -1) { + return minDate; + } + if (compareDay(date, maxDate) === 1) { + return maxDate; + } + return date; + }, + getInitialDate(defaultDate = null) { + const { type, minDate, maxDate, allowSameDay } = this.data; + const now = getToday().getTime(); + if (type === 'range') { + if (!Array.isArray(defaultDate)) { + defaultDate = []; + } + const [startDay, endDay] = defaultDate || []; + const start = this.limitDateRange(startDay || now, minDate, getPrevDay(new Date(maxDate)).getTime()); + const date = getTime(endDay || now); + const end = this.limitDateRange(date, allowSameDay ? date : getNextDay(new Date(minDate)).getTime()); + return [start, end]; + } + if (type === 'multiple') { + if (Array.isArray(defaultDate)) { + return defaultDate.map((date) => this.limitDateRange(date)); + } + return [this.limitDateRange(now)]; + } + if (!defaultDate || Array.isArray(defaultDate)) { + defaultDate = now; + } + return this.limitDateRange(defaultDate); + }, + scrollIntoView() { + requestAnimationFrame(() => { + const { currentDate, type, show, poppable, minDate, maxDate } = this.data; + // @ts-ignore + const targetDate = type === 'single' ? currentDate : currentDate[0]; + const displayed = show || !poppable; + if (!targetDate || !displayed) { + return; + } + const months = getMonths(minDate, maxDate); + months.some((month, index) => { + if (compareMonth(month, targetDate) === 0) { + this.setData({ scrollIntoView: `month${index}` }); + return true; + } + return false; + }); + }); + }, + onOpen() { + this.$emit('open'); + }, + onOpened() { + this.$emit('opened'); + }, + onClose() { + this.$emit('close'); + }, + onClosed() { + this.$emit('closed'); + }, + onClickDay(event) { + if (this.data.readonly) { + return; + } + let { date } = event.detail; + const { type, currentDate, allowSameDay } = this.data; + if (type === 'range') { + // @ts-ignore + const [startDay, endDay] = currentDate; + if (startDay && !endDay) { + const compareToStart = compareDay(date, startDay); + if (compareToStart === 1) { + const { days } = this.selectComponent('.month').data; + days.some((day, index) => { + const isDisabled = day.type === 'disabled' && + getTime(startDay) < getTime(day.date) && + getTime(day.date) < getTime(date); + if (isDisabled) { + ({ date } = days[index - 1]); + } + return isDisabled; + }); + this.select([startDay, date], true); + } + else if (compareToStart === -1) { + this.select([date, null]); + } + else if (allowSameDay) { + this.select([date, date]); + } + } + else { + this.select([date, null]); + } + } + else if (type === 'multiple') { + let selectedIndex; + // @ts-ignore + const selected = currentDate.some((dateItem, index) => { + const equal = compareDay(dateItem, date) === 0; + if (equal) { + selectedIndex = index; + } + return equal; + }); + if (selected) { + // @ts-ignore + const cancelDate = currentDate.splice(selectedIndex, 1); + this.setData({ currentDate }); + this.unselect(cancelDate); + } + else { + // @ts-ignore + this.select([...currentDate, date]); + } + } + else { + this.select(date, true); + } + }, + unselect(dateArray) { + const date = dateArray[0]; + if (date) { + this.$emit('unselect', copyDates(date)); + } + }, + select(date, complete) { + if (complete && this.data.type === 'range') { + const valid = this.checkRange(date); + if (!valid) { + // auto selected to max range if showConfirm + if (this.data.showConfirm) { + this.emit([ + date[0], + getDayByOffset(date[0], this.data.maxRange - 1), + ]); + } + else { + this.emit(date); + } + return; + } + } + this.emit(date); + if (complete && !this.data.showConfirm) { + this.onConfirm(); + } + }, + emit(date) { + this.setData({ + currentDate: Array.isArray(date) ? date.map(getTime) : getTime(date), + }); + this.$emit('select', copyDates(date)); + }, + checkRange(date) { + const { maxRange, rangePrompt, showRangePrompt } = this.data; + if (maxRange && calcDateNum(date) > maxRange) { + if (showRangePrompt) { + Toast({ + context: this, + message: rangePrompt || `选择天数不能超过 ${maxRange} 天`, + }); + } + this.$emit('over-range'); + return false; + } + return true; + }, + onConfirm() { + if (this.data.type === 'range' && + !this.checkRange(this.data.currentDate)) { + return; + } + wx.nextTick(() => { + // @ts-ignore + this.$emit('confirm', copyDates(this.data.currentDate)); + }); + }, + onClickSubtitle(event) { + this.$emit('click-subtitle', event); + }, + }, +}); diff --git a/wxcomponents/vant/dist/calendar/index.json b/wxcomponents/vant/dist/calendar/index.json new file mode 100644 index 0000000..397d5ae --- /dev/null +++ b/wxcomponents/vant/dist/calendar/index.json @@ -0,0 +1,10 @@ +{ + "component": true, + "usingComponents": { + "header": "./components/header/index", + "month": "./components/month/index", + "van-button": "../button/index", + "van-popup": "../popup/index", + "van-toast": "../toast/index" + } +} diff --git a/wxcomponents/vant/dist/calendar/index.vue b/wxcomponents/vant/dist/calendar/index.vue new file mode 100644 index 0000000..3a0dc3f --- /dev/null +++ b/wxcomponents/vant/dist/calendar/index.vue @@ -0,0 +1,370 @@ + + + + \ No newline at end of file diff --git a/wxcomponents/vant/dist/calendar/index.wxml b/wxcomponents/vant/dist/calendar/index.wxml new file mode 100644 index 0000000..9667eef --- /dev/null +++ b/wxcomponents/vant/dist/calendar/index.wxml @@ -0,0 +1,26 @@ + + + + + + + + + + + + diff --git a/wxcomponents/vant/dist/calendar/index.wxs b/wxcomponents/vant/dist/calendar/index.wxs new file mode 100644 index 0000000..0a56646 --- /dev/null +++ b/wxcomponents/vant/dist/calendar/index.wxs @@ -0,0 +1,37 @@ +/* eslint-disable */ +var utils = require('./utils.wxs'); + +function getMonths(minDate, maxDate) { + var months = []; + var cursor = getDate(minDate); + + cursor.setDate(1); + + do { + months.push(cursor.getTime()); + cursor.setMonth(cursor.getMonth() + 1); + } while (utils.compareMonth(cursor, getDate(maxDate)) !== 1); + + return months; +} + +function getButtonDisabled(type, currentDate, minRange) { + if (currentDate == null) { + return true; + } + + if (type === 'range') { + return !currentDate[0] || !currentDate[1]; + } + + if (type === 'multiple') { + return currentDate.length < minRange; + } + + return !currentDate; +} + +module.exports = { + getMonths: getMonths, + getButtonDisabled: getButtonDisabled +}; diff --git a/wxcomponents/vant/dist/calendar/index.wxss b/wxcomponents/vant/dist/calendar/index.wxss new file mode 100644 index 0000000..05df518 --- /dev/null +++ b/wxcomponents/vant/dist/calendar/index.wxss @@ -0,0 +1 @@ +@import '../common/index.wxss';.van-calendar{background-color:var(--calendar-background-color,#fff);display:flex;flex-direction:column;height:var(--calendar-height,100%)}.van-calendar__close-icon{top:11px}.van-calendar__popup--bottom,.van-calendar__popup--top{height:var(--calendar-popup-height,80%)}.van-calendar__popup--left,.van-calendar__popup--right{height:100%}.van-calendar__body{-webkit-overflow-scrolling:touch;flex:1;overflow:auto}.van-calendar__footer{flex-shrink:0;padding:0 var(--padding-md,16px)}.van-calendar__footer--safe-area-inset-bottom{padding-bottom:env(safe-area-inset-bottom)}.van-calendar__footer+.van-calendar__footer,.van-calendar__footer:empty{display:none}.van-calendar__footer:empty+.van-calendar__footer{display:block!important}.van-calendar__confirm{height:var(--calendar-confirm-button-height,36px)!important;line-height:var(--calendar-confirm-button-line-height,34px)!important;margin:var(--calendar-confirm-button-margin,7px 0)!important} \ No newline at end of file diff --git a/wxcomponents/vant/dist/calendar/utils.d.ts b/wxcomponents/vant/dist/calendar/utils.d.ts new file mode 100644 index 0000000..889e6e7 --- /dev/null +++ b/wxcomponents/vant/dist/calendar/utils.d.ts @@ -0,0 +1,12 @@ +export declare const ROW_HEIGHT = 64; +export declare function formatMonthTitle(date: Date): string; +export declare function compareMonth(date1: Date | number, date2: Date | number): 0 | 1 | -1; +export declare function compareDay(day1: Date | number, day2: Date | number): 0 | 1 | -1; +export declare function getDayByOffset(date: Date, offset: number): Date; +export declare function getPrevDay(date: Date): Date; +export declare function getNextDay(date: Date): Date; +export declare function getToday(): Date; +export declare function calcDateNum(date: [Date, Date]): number; +export declare function copyDates(dates: Date | Date[]): Date | Date[]; +export declare function getMonthEndDay(year: number, month: number): number; +export declare function getMonths(minDate: number, maxDate: number): number[]; diff --git a/wxcomponents/vant/dist/calendar/utils.js b/wxcomponents/vant/dist/calendar/utils.js new file mode 100644 index 0000000..83d6971 --- /dev/null +++ b/wxcomponents/vant/dist/calendar/utils.js @@ -0,0 +1,83 @@ +export const ROW_HEIGHT = 64; +export function formatMonthTitle(date) { + if (!(date instanceof Date)) { + date = new Date(date); + } + return `${date.getFullYear()}年${date.getMonth() + 1}月`; +} +export function compareMonth(date1, date2) { + if (!(date1 instanceof Date)) { + date1 = new Date(date1); + } + if (!(date2 instanceof Date)) { + date2 = new Date(date2); + } + const year1 = date1.getFullYear(); + const year2 = date2.getFullYear(); + const month1 = date1.getMonth(); + const month2 = date2.getMonth(); + if (year1 === year2) { + return month1 === month2 ? 0 : month1 > month2 ? 1 : -1; + } + return year1 > year2 ? 1 : -1; +} +export function compareDay(day1, day2) { + if (!(day1 instanceof Date)) { + day1 = new Date(day1); + } + if (!(day2 instanceof Date)) { + day2 = new Date(day2); + } + const compareMonthResult = compareMonth(day1, day2); + if (compareMonthResult === 0) { + const date1 = day1.getDate(); + const date2 = day2.getDate(); + return date1 === date2 ? 0 : date1 > date2 ? 1 : -1; + } + return compareMonthResult; +} +export function getDayByOffset(date, offset) { + date = new Date(date); + date.setDate(date.getDate() + offset); + return date; +} +export function getPrevDay(date) { + return getDayByOffset(date, -1); +} +export function getNextDay(date) { + return getDayByOffset(date, 1); +} +export function getToday() { + const today = new Date(); + today.setHours(0, 0, 0, 0); + return today; +} +export function calcDateNum(date) { + const day1 = new Date(date[0]).getTime(); + const day2 = new Date(date[1]).getTime(); + return (day2 - day1) / (1000 * 60 * 60 * 24) + 1; +} +export function copyDates(dates) { + if (Array.isArray(dates)) { + return dates.map((date) => { + if (date === null) { + return date; + } + return new Date(date); + }); + } + return new Date(dates); +} +export function getMonthEndDay(year, month) { + return 32 - new Date(year, month - 1, 32).getDate(); +} +export function getMonths(minDate, maxDate) { + const months = []; + const cursor = new Date(minDate); + cursor.setDate(1); + do { + months.push(cursor.getTime()); + cursor.setMonth(cursor.getMonth() + 1); + } while (compareMonth(cursor, maxDate) !== 1); + return months; +} diff --git a/wxcomponents/vant/dist/calendar/utils.wxs b/wxcomponents/vant/dist/calendar/utils.wxs new file mode 100644 index 0000000..e57f6b3 --- /dev/null +++ b/wxcomponents/vant/dist/calendar/utils.wxs @@ -0,0 +1,25 @@ +/* eslint-disable */ +function getMonthEndDay(year, month) { + return 32 - getDate(year, month - 1, 32).getDate(); +} + +function compareMonth(date1, date2) { + date1 = getDate(date1); + date2 = getDate(date2); + + var year1 = date1.getFullYear(); + var year2 = date2.getFullYear(); + var month1 = date1.getMonth(); + var month2 = date2.getMonth(); + + if (year1 === year2) { + return month1 === month2 ? 0 : month1 > month2 ? 1 : -1; + } + + return year1 > year2 ? 1 : -1; +} + +module.exports = { + getMonthEndDay: getMonthEndDay, + compareMonth: compareMonth +}; diff --git a/wxcomponents/vant/dist/card/index.d.ts b/wxcomponents/vant/dist/card/index.d.ts new file mode 100644 index 0000000..cb0ff5c --- /dev/null +++ b/wxcomponents/vant/dist/card/index.d.ts @@ -0,0 +1 @@ +export {}; diff --git a/wxcomponents/vant/dist/card/index.js b/wxcomponents/vant/dist/card/index.js new file mode 100644 index 0000000..5bbd212 --- /dev/null +++ b/wxcomponents/vant/dist/card/index.js @@ -0,0 +1,49 @@ +import { link } from '../mixins/link'; +import { VantComponent } from '../common/component'; +VantComponent({ + classes: [ + 'num-class', + 'desc-class', + 'thumb-class', + 'title-class', + 'price-class', + 'origin-price-class', + ], + mixins: [link], + props: { + tag: String, + num: String, + desc: String, + thumb: String, + title: String, + price: { + type: String, + observer: 'updatePrice', + }, + centered: Boolean, + lazyLoad: Boolean, + thumbLink: String, + originPrice: String, + thumbMode: { + type: String, + value: 'aspectFit', + }, + currency: { + type: String, + value: '¥', + }, + }, + methods: { + updatePrice() { + const { price } = this.data; + const priceArr = price.toString().split('.'); + this.setData({ + integerStr: priceArr[0], + decimalStr: priceArr[1] ? `.${priceArr[1]}` : '', + }); + }, + onClickThumb() { + this.jumpLink('thumbLink'); + }, + }, +}); diff --git a/wxcomponents/vant/dist/card/index.json b/wxcomponents/vant/dist/card/index.json new file mode 100644 index 0000000..e917407 --- /dev/null +++ b/wxcomponents/vant/dist/card/index.json @@ -0,0 +1,6 @@ +{ + "component": true, + "usingComponents": { + "van-tag": "../tag/index" + } +} diff --git a/wxcomponents/vant/dist/card/index.vue b/wxcomponents/vant/dist/card/index.vue new file mode 100644 index 0000000..023767d --- /dev/null +++ b/wxcomponents/vant/dist/card/index.vue @@ -0,0 +1,105 @@ + + + + \ No newline at end of file diff --git a/wxcomponents/vant/dist/card/index.wxml b/wxcomponents/vant/dist/card/index.wxml new file mode 100644 index 0000000..62173e4 --- /dev/null +++ b/wxcomponents/vant/dist/card/index.wxml @@ -0,0 +1,56 @@ + + + + + + + + + {{ tag }} + + + + + + + {{ title }} + + + {{ desc }} + + + + + + + + + {{ currency }} + {{ integerStr }} + {{ decimalStr }} + + + {{ currency }} {{ originPrice }} + + x {{ num }} + + + + + + + + + + diff --git a/wxcomponents/vant/dist/card/index.wxss b/wxcomponents/vant/dist/card/index.wxss new file mode 100644 index 0000000..0f4d7c5 --- /dev/null +++ b/wxcomponents/vant/dist/card/index.wxss @@ -0,0 +1 @@ +@import '../common/index.wxss';.van-card{background-color:var(--card-background-color,#fafafa);box-sizing:border-box;color:var(--card-text-color,#323233);font-size:var(--card-font-size,12px);padding:var(--card-padding,8px 16px);position:relative}.van-card__header{display:flex}.van-card__header--center{align-items:center;justify-content:center}.van-card__thumb{flex:none;height:var(--card-thumb-size,88px);margin-right:var(--padding-xs,8px);position:relative;width:var(--card-thumb-size,88px)}.van-card__thumb:empty{display:none}.van-card__img{border-radius:8px;height:100%;width:100%}.van-card__content{display:flex;flex:1;flex-direction:column;justify-content:space-between;min-height:var(--card-thumb-size,88px);min-width:0;position:relative}.van-card__content--center{justify-content:center}.van-card__desc,.van-card__title{word-wrap:break-word}.van-card__title{font-weight:700;line-height:var(--card-title-line-height,16px)}.van-card__desc{color:var(--card-desc-color,#646566);line-height:var(--card-desc-line-height,20px)}.van-card__bottom{line-height:20px}.van-card__price{color:var(--card-price-color,#ee0a24);display:inline-block;font-size:var(--card-price-font-size,12px);font-weight:700}.van-card__price-integer{font-size:var(--card-price-integer-font-size,16px)}.van-card__price-decimal,.van-card__price-integer{font-family:var(--card-price-font-family,Avenir-Heavy,PingFang SC,Helvetica Neue,Arial,sans-serif)}.van-card__origin-price{color:var(--card-origin-price-color,#646566);display:inline-block;font-size:var(--card-origin-price-font-size,10px);margin-left:5px;text-decoration:line-through}.van-card__num{float:right}.van-card__tag{left:0;position:absolute!important;top:2px}.van-card__footer{flex:none;text-align:right;width:100%} \ No newline at end of file diff --git a/wxcomponents/vant/dist/cascader/index.d.ts b/wxcomponents/vant/dist/cascader/index.d.ts new file mode 100644 index 0000000..cb0ff5c --- /dev/null +++ b/wxcomponents/vant/dist/cascader/index.d.ts @@ -0,0 +1 @@ +export {}; diff --git a/wxcomponents/vant/dist/cascader/index.js b/wxcomponents/vant/dist/cascader/index.js new file mode 100644 index 0000000..486928a --- /dev/null +++ b/wxcomponents/vant/dist/cascader/index.js @@ -0,0 +1,208 @@ +import { VantComponent } from '../common/component'; +var FieldName; +(function (FieldName) { + FieldName["TEXT"] = "text"; + FieldName["VALUE"] = "value"; + FieldName["CHILDREN"] = "children"; +})(FieldName || (FieldName = {})); +const defaultFieldNames = { + text: FieldName.TEXT, + value: FieldName.VALUE, + children: FieldName.CHILDREN, +}; +VantComponent({ + props: { + title: String, + value: { + type: String, + observer: 'updateValue', + }, + placeholder: { + type: String, + value: '请选择', + }, + activeColor: { + type: String, + value: '#1989fa', + }, + options: { + type: Array, + value: [], + observer: 'updateOptions', + }, + swipeable: { + type: Boolean, + value: false, + }, + closeable: { + type: Boolean, + value: true, + }, + showHeader: { + type: Boolean, + value: true, + }, + closeIcon: { + type: String, + value: 'cross', + }, + fieldNames: { + type: Object, + value: defaultFieldNames, + observer: 'updateFieldNames', + }, + }, + data: { + tabs: [], + activeTab: 0, + textKey: FieldName.TEXT, + valueKey: FieldName.VALUE, + childrenKey: FieldName.CHILDREN, + }, + created() { + this.updateTabs(); + }, + methods: { + updateOptions(val, oldVal) { + const isAsync = !!(val.length && oldVal.length); + this.updateTabs(isAsync); + }, + updateValue(val) { + if (val !== undefined) { + const values = this.data.tabs.map((tab) => tab.selected && tab.selected[this.data.valueKey]); + if (values.indexOf(val) > -1) { + return; + } + } + this.updateTabs(); + }, + updateFieldNames() { + const { text = 'text', value = 'value', children = 'children', } = this.data.fieldNames || defaultFieldNames; + this.setData({ + textKey: text, + valueKey: value, + childrenKey: children, + }); + }, + getSelectedOptionsByValue(options, value) { + for (let i = 0; i < options.length; i++) { + const option = options[i]; + if (option[this.data.valueKey] === value) { + return [option]; + } + if (option[this.data.childrenKey]) { + const selectedOptions = this.getSelectedOptionsByValue(option[this.data.childrenKey], value); + if (selectedOptions) { + return [option, ...selectedOptions]; + } + } + } + }, + updateTabs(isAsync = false) { + const { options, value } = this.data; + if (value !== undefined) { + const selectedOptions = this.getSelectedOptionsByValue(options, value); + if (selectedOptions) { + let optionsCursor = options; + const tabs = selectedOptions.map((option) => { + const tab = { + options: optionsCursor, + selected: option, + }; + const next = optionsCursor.find((item) => item[this.data.valueKey] === option[this.data.valueKey]); + if (next) { + optionsCursor = next[this.data.childrenKey]; + } + return tab; + }); + if (optionsCursor) { + tabs.push({ + options: optionsCursor, + selected: null, + }); + } + this.setData({ + tabs, + }); + wx.nextTick(() => { + this.setData({ + activeTab: tabs.length - 1, + }); + }); + return; + } + } + // 异步更新 + if (isAsync) { + const { tabs } = this.data; + tabs[tabs.length - 1].options = + options[options.length - 1][this.data.childrenKey]; + this.setData({ + tabs, + }); + return; + } + this.setData({ + tabs: [ + { + options, + selected: null, + }, + ], + }); + }, + onClose() { + this.$emit('close'); + }, + onClickTab(e) { + const { index: tabIndex, title } = e.detail; + this.$emit('click-tab', { title, tabIndex }); + this.setData({ + activeTab: tabIndex, + }); + }, + // 选中 + onSelect(e) { + const { option, tabIndex } = e.currentTarget.dataset; + if (option && option.disabled) { + return; + } + const { valueKey, childrenKey } = this.data; + let { tabs } = this.data; + tabs[tabIndex].selected = option; + if (tabs.length > tabIndex + 1) { + tabs = tabs.slice(0, tabIndex + 1); + } + if (option[childrenKey]) { + const nextTab = { + options: option[childrenKey], + selected: null, + }; + if (tabs[tabIndex + 1]) { + tabs[tabIndex + 1] = nextTab; + } + else { + tabs.push(nextTab); + } + wx.nextTick(() => { + this.setData({ + activeTab: tabIndex + 1, + }); + }); + } + this.setData({ + tabs, + }); + const selectedOptions = tabs.map((tab) => tab.selected).filter(Boolean); + const params = { + value: option[valueKey], + tabIndex, + selectedOptions, + }; + this.$emit('change', params); + if (!option[childrenKey]) { + this.$emit('finish', params); + } + }, + }, +}); diff --git a/wxcomponents/vant/dist/cascader/index.json b/wxcomponents/vant/dist/cascader/index.json new file mode 100644 index 0000000..d0f75eb --- /dev/null +++ b/wxcomponents/vant/dist/cascader/index.json @@ -0,0 +1,8 @@ +{ + "component": true, + "usingComponents": { + "van-icon": "../icon/index", + "van-tab": "../tab/index", + "van-tabs": "../tabs/index" + } +} \ No newline at end of file diff --git a/wxcomponents/vant/dist/cascader/index.vue b/wxcomponents/vant/dist/cascader/index.vue new file mode 100644 index 0000000..6da2550 --- /dev/null +++ b/wxcomponents/vant/dist/cascader/index.vue @@ -0,0 +1,243 @@ + + + + \ No newline at end of file diff --git a/wxcomponents/vant/dist/cascader/index.wxml b/wxcomponents/vant/dist/cascader/index.wxml new file mode 100644 index 0000000..b1d724b --- /dev/null +++ b/wxcomponents/vant/dist/cascader/index.wxml @@ -0,0 +1,53 @@ + + + + {{ title }} + + + + + + + + + + + {{ option[textKey] }} + + + + + + + diff --git a/wxcomponents/vant/dist/cascader/index.wxs b/wxcomponents/vant/dist/cascader/index.wxs new file mode 100644 index 0000000..cba6465 --- /dev/null +++ b/wxcomponents/vant/dist/cascader/index.wxs @@ -0,0 +1,24 @@ +var utils = require('../wxs/utils.wxs'); +var style = require('../wxs/style.wxs'); + +function isSelected(tab, textKey, option) { + return tab.selected && tab.selected[textKey] === option[textKey] +} + +function optionClass(tab, textKey, option) { + return utils.bem('cascader__option', { selected: isSelected({ tab, textKey, option }), disabled: option.disabled }) +} + +function optionStyle(data) { + var color = data.option.color || (isSelected(data.tab, data.textKey, data.option) ? data.activeColor : undefined); + return style({ + color + }); +} + + +module.exports = { + isSelected: isSelected, + optionClass: optionClass, + optionStyle: optionStyle, +}; \ No newline at end of file diff --git a/wxcomponents/vant/dist/cascader/index.wxss b/wxcomponents/vant/dist/cascader/index.wxss new file mode 100644 index 0000000..7062486 --- /dev/null +++ b/wxcomponents/vant/dist/cascader/index.wxss @@ -0,0 +1 @@ +@import '../common/index.wxss';.van-cascader__header{align-items:center;display:flex;height:48px;justify-content:space-between;padding:0 16px}.van-cascader__title{font-size:16px;font-weight:600;line-height:20px}.van-cascader__close-icon{color:#c8c9cc;font-size:22px;height:22px}.van-cascader__tabs-wrap{height:48px!important;padding:0 8px}.van-cascader__tab{color:#323233!important;flex:none!important;font-weight:600!important;padding:0 8px!important}.van-cascader__tab--unselected{color:#969799!important;font-weight:400!important}.van-cascader__option{align-items:center;cursor:pointer;display:flex;font-size:14px;justify-content:space-between;line-height:20px;padding:10px 16px}.van-cascader__option:active{background-color:#f2f3f5}.van-cascader__option--selected{color:#1989fa;font-weight:600}.van-cascader__option--disabled{color:#c8c9cc;cursor:not-allowed}.van-cascader__option--disabled:active{background-color:initial}.van-cascader__options{-webkit-overflow-scrolling:touch;box-sizing:border-box;height:384px;overflow-y:auto;padding-top:6px} \ No newline at end of file diff --git a/wxcomponents/vant/dist/cell-group/index.d.ts b/wxcomponents/vant/dist/cell-group/index.d.ts new file mode 100644 index 0000000..cb0ff5c --- /dev/null +++ b/wxcomponents/vant/dist/cell-group/index.d.ts @@ -0,0 +1 @@ +export {}; diff --git a/wxcomponents/vant/dist/cell-group/index.js b/wxcomponents/vant/dist/cell-group/index.js new file mode 100644 index 0000000..170760f --- /dev/null +++ b/wxcomponents/vant/dist/cell-group/index.js @@ -0,0 +1,11 @@ +import { VantComponent } from '../common/component'; +VantComponent({ + props: { + title: String, + border: { + type: Boolean, + value: true, + }, + inset: Boolean, + }, +}); diff --git a/wxcomponents/vant/dist/cell-group/index.json b/wxcomponents/vant/dist/cell-group/index.json new file mode 100644 index 0000000..467ce29 --- /dev/null +++ b/wxcomponents/vant/dist/cell-group/index.json @@ -0,0 +1,3 @@ +{ + "component": true +} diff --git a/wxcomponents/vant/dist/cell-group/index.vue b/wxcomponents/vant/dist/cell-group/index.vue new file mode 100644 index 0000000..74e139c --- /dev/null +++ b/wxcomponents/vant/dist/cell-group/index.vue @@ -0,0 +1,28 @@ + + + + \ No newline at end of file diff --git a/wxcomponents/vant/dist/cell-group/index.wxml b/wxcomponents/vant/dist/cell-group/index.wxml new file mode 100644 index 0000000..311e064 --- /dev/null +++ b/wxcomponents/vant/dist/cell-group/index.wxml @@ -0,0 +1,11 @@ + + + + {{ title }} + + + + diff --git a/wxcomponents/vant/dist/cell-group/index.wxss b/wxcomponents/vant/dist/cell-group/index.wxss new file mode 100644 index 0000000..08b252f --- /dev/null +++ b/wxcomponents/vant/dist/cell-group/index.wxss @@ -0,0 +1 @@ +@import '../common/index.wxss';.van-cell-group--inset{border-radius:var(--cell-group-inset-border-radius,8px);margin:var(--cell-group-inset-padding,0 16px);overflow:hidden}.van-cell-group__title{color:var(--cell-group-title-color,#969799);font-size:var(--cell-group-title-font-size,14px);line-height:var(--cell-group-title-line-height,16px);padding:var(--cell-group-title-padding,16px 16px 8px)}.van-cell-group__title--inset{padding:var(--cell-group-inset-title-padding,16px 16px 8px 32px)} \ No newline at end of file diff --git a/wxcomponents/vant/dist/cell/index.d.ts b/wxcomponents/vant/dist/cell/index.d.ts new file mode 100644 index 0000000..cb0ff5c --- /dev/null +++ b/wxcomponents/vant/dist/cell/index.d.ts @@ -0,0 +1 @@ +export {}; diff --git a/wxcomponents/vant/dist/cell/index.js b/wxcomponents/vant/dist/cell/index.js new file mode 100644 index 0000000..35548b9 --- /dev/null +++ b/wxcomponents/vant/dist/cell/index.js @@ -0,0 +1,38 @@ +import { link } from '../mixins/link'; +import { VantComponent } from '../common/component'; +VantComponent({ + classes: [ + 'title-class', + 'label-class', + 'value-class', + 'right-icon-class', + 'hover-class', + ], + mixins: [link], + props: { + title: null, + value: null, + icon: String, + size: String, + label: String, + center: Boolean, + isLink: Boolean, + required: Boolean, + clickable: Boolean, + titleWidth: String, + customStyle: String, + arrowDirection: String, + useLabelSlot: Boolean, + border: { + type: Boolean, + value: true, + }, + titleStyle: String, + }, + methods: { + onClick(event) { + this.$emit('click', event.detail); + this.jumpLink(); + }, + }, +}); diff --git a/wxcomponents/vant/dist/cell/index.json b/wxcomponents/vant/dist/cell/index.json new file mode 100644 index 0000000..0a336c0 --- /dev/null +++ b/wxcomponents/vant/dist/cell/index.json @@ -0,0 +1,6 @@ +{ + "component": true, + "usingComponents": { + "van-icon": "../icon/index" + } +} diff --git a/wxcomponents/vant/dist/cell/index.vue b/wxcomponents/vant/dist/cell/index.vue new file mode 100644 index 0000000..559527d --- /dev/null +++ b/wxcomponents/vant/dist/cell/index.vue @@ -0,0 +1,76 @@ + + + + \ No newline at end of file diff --git a/wxcomponents/vant/dist/cell/index.wxml b/wxcomponents/vant/dist/cell/index.wxml new file mode 100644 index 0000000..8387c3c --- /dev/null +++ b/wxcomponents/vant/dist/cell/index.wxml @@ -0,0 +1,47 @@ + + + + + + + + + + {{ title }} + + + + + {{ label }} + + + + + {{ value }} + + + + + + + + diff --git a/wxcomponents/vant/dist/cell/index.wxs b/wxcomponents/vant/dist/cell/index.wxs new file mode 100644 index 0000000..e3500c4 --- /dev/null +++ b/wxcomponents/vant/dist/cell/index.wxs @@ -0,0 +1,17 @@ +/* eslint-disable */ +var style = require('../wxs/style.wxs'); +var addUnit = require('../wxs/add-unit.wxs'); + +function titleStyle(data) { + return style([ + { + 'max-width': addUnit(data.titleWidth), + 'min-width': addUnit(data.titleWidth), + }, + data.titleStyle, + ]); +} + +module.exports = { + titleStyle: titleStyle, +}; diff --git a/wxcomponents/vant/dist/cell/index.wxss b/wxcomponents/vant/dist/cell/index.wxss new file mode 100644 index 0000000..1802f8e --- /dev/null +++ b/wxcomponents/vant/dist/cell/index.wxss @@ -0,0 +1 @@ +@import '../common/index.wxss';.van-cell{background-color:var(--cell-background-color,#fff);box-sizing:border-box;color:var(--cell-text-color,#323233);display:flex;font-size:var(--cell-font-size,14px);line-height:var(--cell-line-height,24px);padding:var(--cell-vertical-padding,10px) var(--cell-horizontal-padding,16px);position:relative;width:100%}.van-cell:after{border-bottom:1px solid #ebedf0;bottom:0;box-sizing:border-box;content:" ";left:16px;pointer-events:none;position:absolute;right:16px;transform:scaleY(.5);transform-origin:center}.van-cell--borderless:after{display:none}.van-cell-group{background-color:var(--cell-background-color,#fff)}.van-cell__label{color:var(--cell-label-color,#969799);font-size:var(--cell-label-font-size,12px);line-height:var(--cell-label-line-height,18px);margin-top:var(--cell-label-margin-top,3px)}.van-cell__value{color:var(--cell-value-color,#969799);overflow:hidden;text-align:right;vertical-align:middle}.van-cell__title,.van-cell__value{flex:1}.van-cell__title:empty,.van-cell__value:empty{display:none}.van-cell__left-icon-wrap,.van-cell__right-icon-wrap{align-items:center;display:flex;font-size:var(--cell-icon-size,16px);height:var(--cell-line-height,24px)}.van-cell__left-icon-wrap{margin-right:var(--padding-base,4px)}.van-cell__right-icon-wrap{color:var(--cell-right-icon-color,#969799);margin-left:var(--padding-base,4px)}.van-cell__left-icon{vertical-align:middle}.van-cell__left-icon,.van-cell__right-icon{line-height:var(--cell-line-height,24px)}.van-cell--clickable.van-cell--hover{background-color:var(--cell-active-color,#f2f3f5)}.van-cell--required{overflow:visible}.van-cell--required:before{color:var(--cell-required-color,#ee0a24);content:"*";font-size:var(--cell-font-size,14px);left:var(--padding-xs,8px);position:absolute}.van-cell--center{align-items:center}.van-cell--large{padding-bottom:var(--cell-large-vertical-padding,12px);padding-top:var(--cell-large-vertical-padding,12px)}.van-cell--large .van-cell__title{font-size:var(--cell-large-title-font-size,16px)}.van-cell--large .van-cell__value{font-size:var(--cell-large-value-font-size,16px)}.van-cell--large .van-cell__label{font-size:var(--cell-large-label-font-size,14px)} \ No newline at end of file diff --git a/wxcomponents/vant/dist/checkbox-group/index.d.ts b/wxcomponents/vant/dist/checkbox-group/index.d.ts new file mode 100644 index 0000000..cb0ff5c --- /dev/null +++ b/wxcomponents/vant/dist/checkbox-group/index.d.ts @@ -0,0 +1 @@ +export {}; diff --git a/wxcomponents/vant/dist/checkbox-group/index.js b/wxcomponents/vant/dist/checkbox-group/index.js new file mode 100644 index 0000000..c47d97d --- /dev/null +++ b/wxcomponents/vant/dist/checkbox-group/index.js @@ -0,0 +1,36 @@ +import { useChildren } from '../common/relation'; +import { VantComponent } from '../common/component'; +VantComponent({ + field: true, + relation: useChildren('checkbox', function (target) { + this.updateChild(target); + }), + props: { + max: Number, + value: { + type: Array, + observer: 'updateChildren', + }, + disabled: { + type: Boolean, + observer: 'updateChildren', + }, + direction: { + type: String, + value: 'vertical', + }, + }, + methods: { + updateChildren() { + this.children.forEach((child) => this.updateChild(child)); + }, + updateChild(child) { + const { value, disabled, direction } = this.data; + child.setData({ + value: value.indexOf(child.data.name) !== -1, + parentDisabled: disabled, + direction, + }); + }, + }, +}); diff --git a/wxcomponents/vant/dist/checkbox-group/index.json b/wxcomponents/vant/dist/checkbox-group/index.json new file mode 100644 index 0000000..467ce29 --- /dev/null +++ b/wxcomponents/vant/dist/checkbox-group/index.json @@ -0,0 +1,3 @@ +{ + "component": true +} diff --git a/wxcomponents/vant/dist/checkbox-group/index.vue b/wxcomponents/vant/dist/checkbox-group/index.vue new file mode 100644 index 0000000..c733e55 --- /dev/null +++ b/wxcomponents/vant/dist/checkbox-group/index.vue @@ -0,0 +1,50 @@ + + + + \ No newline at end of file diff --git a/wxcomponents/vant/dist/checkbox-group/index.wxml b/wxcomponents/vant/dist/checkbox-group/index.wxml new file mode 100644 index 0000000..638bf9d --- /dev/null +++ b/wxcomponents/vant/dist/checkbox-group/index.wxml @@ -0,0 +1,5 @@ + + + + + diff --git a/wxcomponents/vant/dist/checkbox-group/index.wxss b/wxcomponents/vant/dist/checkbox-group/index.wxss new file mode 100644 index 0000000..c5666d7 --- /dev/null +++ b/wxcomponents/vant/dist/checkbox-group/index.wxss @@ -0,0 +1 @@ +@import '../common/index.wxss';.van-checkbox-group--horizontal{display:flex;flex-wrap:wrap} \ No newline at end of file diff --git a/wxcomponents/vant/dist/checkbox/index.d.ts b/wxcomponents/vant/dist/checkbox/index.d.ts new file mode 100644 index 0000000..cb0ff5c --- /dev/null +++ b/wxcomponents/vant/dist/checkbox/index.d.ts @@ -0,0 +1 @@ +export {}; diff --git a/wxcomponents/vant/dist/checkbox/index.js b/wxcomponents/vant/dist/checkbox/index.js new file mode 100644 index 0000000..e3b78ab --- /dev/null +++ b/wxcomponents/vant/dist/checkbox/index.js @@ -0,0 +1,77 @@ +import { useParent } from '../common/relation'; +import { VantComponent } from '../common/component'; +function emit(target, value) { + target.$emit('input', value); + target.$emit('change', value); +} +VantComponent({ + field: true, + relation: useParent('checkbox-group'), + classes: ['icon-class', 'label-class'], + props: { + value: Boolean, + disabled: Boolean, + useIconSlot: Boolean, + checkedColor: String, + labelPosition: { + type: String, + value: 'right', + }, + labelDisabled: Boolean, + shape: { + type: String, + value: 'round', + }, + iconSize: { + type: null, + value: 20, + }, + }, + data: { + parentDisabled: false, + direction: 'vertical', + }, + methods: { + emitChange(value) { + if (this.parent) { + this.setParentValue(this.parent, value); + } + else { + emit(this, value); + } + }, + toggle() { + const { parentDisabled, disabled, value } = this.data; + if (!disabled && !parentDisabled) { + this.emitChange(!value); + } + }, + onClickLabel() { + const { labelDisabled, parentDisabled, disabled, value } = this.data; + if (!disabled && !labelDisabled && !parentDisabled) { + this.emitChange(!value); + } + }, + setParentValue(parent, value) { + const parentValue = parent.data.value.slice(); + const { name } = this.data; + const { max } = parent.data; + if (value) { + if (max && parentValue.length >= max) { + return; + } + if (parentValue.indexOf(name) === -1) { + parentValue.push(name); + emit(parent, parentValue); + } + } + else { + const index = parentValue.indexOf(name); + if (index !== -1) { + parentValue.splice(index, 1); + emit(parent, parentValue); + } + } + }, + }, +}); diff --git a/wxcomponents/vant/dist/checkbox/index.json b/wxcomponents/vant/dist/checkbox/index.json new file mode 100644 index 0000000..0a336c0 --- /dev/null +++ b/wxcomponents/vant/dist/checkbox/index.json @@ -0,0 +1,6 @@ +{ + "component": true, + "usingComponents": { + "van-icon": "../icon/index" + } +} diff --git a/wxcomponents/vant/dist/checkbox/index.vue b/wxcomponents/vant/dist/checkbox/index.vue new file mode 100644 index 0000000..4b95088 --- /dev/null +++ b/wxcomponents/vant/dist/checkbox/index.vue @@ -0,0 +1,102 @@ + + + + \ No newline at end of file diff --git a/wxcomponents/vant/dist/checkbox/index.wxml b/wxcomponents/vant/dist/checkbox/index.wxml new file mode 100644 index 0000000..39a7bb0 --- /dev/null +++ b/wxcomponents/vant/dist/checkbox/index.wxml @@ -0,0 +1,31 @@ + + + + + + + + + + + + + + + diff --git a/wxcomponents/vant/dist/checkbox/index.wxs b/wxcomponents/vant/dist/checkbox/index.wxs new file mode 100644 index 0000000..eb9c772 --- /dev/null +++ b/wxcomponents/vant/dist/checkbox/index.wxs @@ -0,0 +1,20 @@ +/* eslint-disable */ +var style = require('../wxs/style.wxs'); +var addUnit = require('../wxs/add-unit.wxs'); + +function iconStyle(checkedColor, value, disabled, parentDisabled, iconSize) { + var styles = { + 'font-size': addUnit(iconSize), + }; + + if (checkedColor && value && !disabled && !parentDisabled) { + styles['border-color'] = checkedColor; + styles['background-color'] = checkedColor; + } + + return style(styles); +} + +module.exports = { + iconStyle: iconStyle, +}; diff --git a/wxcomponents/vant/dist/checkbox/index.wxss b/wxcomponents/vant/dist/checkbox/index.wxss new file mode 100644 index 0000000..da2272a --- /dev/null +++ b/wxcomponents/vant/dist/checkbox/index.wxss @@ -0,0 +1 @@ +@import '../common/index.wxss';.van-checkbox{align-items:center;display:flex;overflow:hidden;-webkit-user-select:none;user-select:none}.van-checkbox--horizontal{margin-right:12px}.van-checkbox__icon-wrap,.van-checkbox__label{line-height:var(--checkbox-size,20px)}.van-checkbox__icon-wrap{flex:none}.van-checkbox__icon{align-items:center;border:1px solid var(--checkbox-border-color,#c8c9cc);box-sizing:border-box;color:transparent;display:flex;font-size:var(--checkbox-size,20px);height:1em;justify-content:center;text-align:center;transition-duration:var(--checkbox-transition-duration,.2s);transition-property:color,border-color,background-color;width:1em}.van-checkbox__icon--round{border-radius:100%}.van-checkbox__icon--checked{background-color:var(--checkbox-checked-icon-color,#1989fa);border-color:var(--checkbox-checked-icon-color,#1989fa);color:#fff}.van-checkbox__icon--disabled{background-color:var(--checkbox-disabled-background-color,#ebedf0);border-color:var(--checkbox-disabled-icon-color,#c8c9cc)}.van-checkbox__icon--disabled.van-checkbox__icon--checked{color:var(--checkbox-disabled-icon-color,#c8c9cc)}.van-checkbox__label{word-wrap:break-word;color:var(--checkbox-label-color,#323233);padding-left:var(--checkbox-label-margin,10px)}.van-checkbox__label--left{float:left;margin:0 var(--checkbox-label-margin,10px) 0 0}.van-checkbox__label--disabled{color:var(--checkbox-disabled-label-color,#c8c9cc)}.van-checkbox__label:empty{margin:0} \ No newline at end of file diff --git a/wxcomponents/vant/dist/circle/canvas.d.ts b/wxcomponents/vant/dist/circle/canvas.d.ts new file mode 100644 index 0000000..8a0b71e --- /dev/null +++ b/wxcomponents/vant/dist/circle/canvas.d.ts @@ -0,0 +1,4 @@ +/// +type CanvasContext = WechatMiniprogram.CanvasContext; +export declare function adaptor(ctx: CanvasContext & Record): CanvasContext; +export {}; diff --git a/wxcomponents/vant/dist/circle/canvas.js b/wxcomponents/vant/dist/circle/canvas.js new file mode 100644 index 0000000..3ade4cd --- /dev/null +++ b/wxcomponents/vant/dist/circle/canvas.js @@ -0,0 +1,43 @@ +export function adaptor(ctx) { + // @ts-ignore + return Object.assign(ctx, { + setStrokeStyle(val) { + ctx.strokeStyle = val; + }, + setLineWidth(val) { + ctx.lineWidth = val; + }, + setLineCap(val) { + ctx.lineCap = val; + }, + setFillStyle(val) { + ctx.fillStyle = val; + }, + setFontSize(val) { + ctx.font = String(val); + }, + setGlobalAlpha(val) { + ctx.globalAlpha = val; + }, + setLineJoin(val) { + ctx.lineJoin = val; + }, + setTextAlign(val) { + ctx.textAlign = val; + }, + setMiterLimit(val) { + ctx.miterLimit = val; + }, + setShadow(offsetX, offsetY, blur, color) { + ctx.shadowOffsetX = offsetX; + ctx.shadowOffsetY = offsetY; + ctx.shadowBlur = blur; + ctx.shadowColor = color; + }, + setTextBaseline(val) { + ctx.textBaseline = val; + }, + createCircularGradient() { }, + draw() { }, + }); +} diff --git a/wxcomponents/vant/dist/circle/index.d.ts b/wxcomponents/vant/dist/circle/index.d.ts new file mode 100644 index 0000000..cb0ff5c --- /dev/null +++ b/wxcomponents/vant/dist/circle/index.d.ts @@ -0,0 +1 @@ +export {}; diff --git a/wxcomponents/vant/dist/circle/index.js b/wxcomponents/vant/dist/circle/index.js new file mode 100644 index 0000000..2a4baf5 --- /dev/null +++ b/wxcomponents/vant/dist/circle/index.js @@ -0,0 +1,193 @@ +import { BLUE, WHITE } from '../common/color'; +import { VantComponent } from '../common/component'; +import { getSystemInfoSync } from '../common/utils'; +import { isObj } from '../common/validator'; +import { canIUseCanvas2d } from '../common/version'; +import { adaptor } from './canvas'; +function format(rate) { + return Math.min(Math.max(rate, 0), 100); +} +const PERIMETER = 2 * Math.PI; +const BEGIN_ANGLE = -Math.PI / 2; +const STEP = 1; +VantComponent({ + props: { + text: String, + lineCap: { + type: String, + value: 'round', + }, + value: { + type: Number, + value: 0, + observer: 'reRender', + }, + speed: { + type: Number, + value: 50, + }, + size: { + type: Number, + value: 100, + observer() { + this.drawCircle(this.currentValue); + }, + }, + fill: String, + layerColor: { + type: String, + value: WHITE, + }, + color: { + type: null, + value: BLUE, + observer() { + this.setHoverColor().then(() => { + this.drawCircle(this.currentValue); + }); + }, + }, + type: { + type: String, + value: '', + }, + strokeWidth: { + type: Number, + value: 4, + }, + clockwise: { + type: Boolean, + value: true, + }, + }, + data: { + hoverColor: BLUE, + }, + methods: { + getContext() { + const { type, size } = this.data; + if (type === '' || !canIUseCanvas2d()) { + const ctx = wx.createCanvasContext('van-circle', this); + return Promise.resolve(ctx); + } + const dpr = getSystemInfoSync().pixelRatio; + return new Promise((resolve) => { + wx.createSelectorQuery() + .in(this) + .select('#van-circle') + .node() + .exec((res) => { + const canvas = res[0].node; + const ctx = canvas.getContext(type); + if (!this.inited) { + this.inited = true; + canvas.width = size * dpr; + canvas.height = size * dpr; + ctx.scale(dpr, dpr); + } + resolve(adaptor(ctx)); + }); + }); + }, + setHoverColor() { + const { color, size } = this.data; + if (isObj(color)) { + return this.getContext().then((context) => { + const LinearColor = context.createLinearGradient(size, 0, 0, 0); + Object.keys(color) + .sort((a, b) => parseFloat(a) - parseFloat(b)) + .map((key) => LinearColor.addColorStop(parseFloat(key) / 100, color[key])); + this.hoverColor = LinearColor; + }); + } + this.hoverColor = color; + return Promise.resolve(); + }, + presetCanvas(context, strokeStyle, beginAngle, endAngle, fill) { + const { strokeWidth, lineCap, clockwise, size } = this.data; + const position = size / 2; + const radius = position - strokeWidth / 2; + context.setStrokeStyle(strokeStyle); + context.setLineWidth(strokeWidth); + context.setLineCap(lineCap); + context.beginPath(); + context.arc(position, position, radius, beginAngle, endAngle, !clockwise); + context.stroke(); + if (fill) { + context.setFillStyle(fill); + context.fill(); + } + }, + renderLayerCircle(context) { + const { layerColor, fill } = this.data; + this.presetCanvas(context, layerColor, 0, PERIMETER, fill); + }, + renderHoverCircle(context, formatValue) { + const { clockwise } = this.data; + // 结束角度 + const progress = PERIMETER * (formatValue / 100); + const endAngle = clockwise + ? BEGIN_ANGLE + progress + : 3 * Math.PI - (BEGIN_ANGLE + progress); + this.presetCanvas(context, this.hoverColor, BEGIN_ANGLE, endAngle); + }, + drawCircle(currentValue) { + const { size } = this.data; + this.getContext().then((context) => { + context.clearRect(0, 0, size, size); + this.renderLayerCircle(context); + const formatValue = format(currentValue); + if (formatValue !== 0) { + this.renderHoverCircle(context, formatValue); + } + context.draw(); + }); + }, + reRender() { + // tofector 动画暂时没有想到好的解决方案 + const { value, speed } = this.data; + if (speed <= 0 || speed > 1000) { + this.drawCircle(value); + return; + } + this.clearMockInterval(); + this.currentValue = this.currentValue || 0; + const run = () => { + this.interval = setTimeout(() => { + if (this.currentValue !== value) { + if (Math.abs(this.currentValue - value) < STEP) { + this.currentValue = value; + } + else if (this.currentValue < value) { + this.currentValue += STEP; + } + else { + this.currentValue -= STEP; + } + this.drawCircle(this.currentValue); + run(); + } + else { + this.clearMockInterval(); + } + }, 1000 / speed); + }; + run(); + }, + clearMockInterval() { + if (this.interval) { + clearTimeout(this.interval); + this.interval = null; + } + }, + }, + mounted() { + this.currentValue = this.data.value; + this.setHoverColor().then(() => { + this.drawCircle(this.currentValue); + }); + }, + destroyed() { + this.clearMockInterval(); + }, +}); diff --git a/wxcomponents/vant/dist/circle/index.json b/wxcomponents/vant/dist/circle/index.json new file mode 100644 index 0000000..467ce29 --- /dev/null +++ b/wxcomponents/vant/dist/circle/index.json @@ -0,0 +1,3 @@ +{ + "component": true +} diff --git a/wxcomponents/vant/dist/circle/index.vue b/wxcomponents/vant/dist/circle/index.vue new file mode 100644 index 0000000..39e1173 --- /dev/null +++ b/wxcomponents/vant/dist/circle/index.vue @@ -0,0 +1,211 @@ + + + + \ No newline at end of file diff --git a/wxcomponents/vant/dist/circle/index.wxml b/wxcomponents/vant/dist/circle/index.wxml new file mode 100644 index 0000000..52bc59f --- /dev/null +++ b/wxcomponents/vant/dist/circle/index.wxml @@ -0,0 +1,9 @@ + + + + + + + + {{ text }} + diff --git a/wxcomponents/vant/dist/circle/index.wxss b/wxcomponents/vant/dist/circle/index.wxss new file mode 100644 index 0000000..2200751 --- /dev/null +++ b/wxcomponents/vant/dist/circle/index.wxss @@ -0,0 +1 @@ +@import '../common/index.wxss';.van-circle{display:inline-block;position:relative;text-align:center}.van-circle__text{color:var(--circle-text-color,#323233);left:0;position:absolute;top:50%;transform:translateY(-50%);width:100%} \ No newline at end of file diff --git a/wxcomponents/vant/dist/col/index.d.ts b/wxcomponents/vant/dist/col/index.d.ts new file mode 100644 index 0000000..cb0ff5c --- /dev/null +++ b/wxcomponents/vant/dist/col/index.d.ts @@ -0,0 +1 @@ +export {}; diff --git a/wxcomponents/vant/dist/col/index.js b/wxcomponents/vant/dist/col/index.js new file mode 100644 index 0000000..02bb78d --- /dev/null +++ b/wxcomponents/vant/dist/col/index.js @@ -0,0 +1,9 @@ +import { useParent } from '../common/relation'; +import { VantComponent } from '../common/component'; +VantComponent({ + relation: useParent('row'), + props: { + span: Number, + offset: Number, + }, +}); diff --git a/wxcomponents/vant/dist/col/index.json b/wxcomponents/vant/dist/col/index.json new file mode 100644 index 0000000..467ce29 --- /dev/null +++ b/wxcomponents/vant/dist/col/index.json @@ -0,0 +1,3 @@ +{ + "component": true +} diff --git a/wxcomponents/vant/dist/col/index.vue b/wxcomponents/vant/dist/col/index.vue new file mode 100644 index 0000000..f766d6e --- /dev/null +++ b/wxcomponents/vant/dist/col/index.vue @@ -0,0 +1,23 @@ + + + + \ No newline at end of file diff --git a/wxcomponents/vant/dist/col/index.wxml b/wxcomponents/vant/dist/col/index.wxml new file mode 100644 index 0000000..975348b --- /dev/null +++ b/wxcomponents/vant/dist/col/index.wxml @@ -0,0 +1,9 @@ + + + + + + diff --git a/wxcomponents/vant/dist/col/index.wxs b/wxcomponents/vant/dist/col/index.wxs new file mode 100644 index 0000000..507c1cb --- /dev/null +++ b/wxcomponents/vant/dist/col/index.wxs @@ -0,0 +1,18 @@ +/* eslint-disable */ +var style = require('../wxs/style.wxs'); +var addUnit = require('../wxs/add-unit.wxs'); + +function rootStyle(data) { + if (!data.gutter) { + return ''; + } + + return style({ + 'padding-right': addUnit(data.gutter / 2), + 'padding-left': addUnit(data.gutter / 2), + }); +} + +module.exports = { + rootStyle: rootStyle, +}; diff --git a/wxcomponents/vant/dist/col/index.wxss b/wxcomponents/vant/dist/col/index.wxss new file mode 100644 index 0000000..2fa265e --- /dev/null +++ b/wxcomponents/vant/dist/col/index.wxss @@ -0,0 +1 @@ +@import '../common/index.wxss';.van-col{box-sizing:border-box;float:left}.van-col--1{width:4.16666667%}.van-col--offset-1{margin-left:4.16666667%}.van-col--2{width:8.33333333%}.van-col--offset-2{margin-left:8.33333333%}.van-col--3{width:12.5%}.van-col--offset-3{margin-left:12.5%}.van-col--4{width:16.66666667%}.van-col--offset-4{margin-left:16.66666667%}.van-col--5{width:20.83333333%}.van-col--offset-5{margin-left:20.83333333%}.van-col--6{width:25%}.van-col--offset-6{margin-left:25%}.van-col--7{width:29.16666667%}.van-col--offset-7{margin-left:29.16666667%}.van-col--8{width:33.33333333%}.van-col--offset-8{margin-left:33.33333333%}.van-col--9{width:37.5%}.van-col--offset-9{margin-left:37.5%}.van-col--10{width:41.66666667%}.van-col--offset-10{margin-left:41.66666667%}.van-col--11{width:45.83333333%}.van-col--offset-11{margin-left:45.83333333%}.van-col--12{width:50%}.van-col--offset-12{margin-left:50%}.van-col--13{width:54.16666667%}.van-col--offset-13{margin-left:54.16666667%}.van-col--14{width:58.33333333%}.van-col--offset-14{margin-left:58.33333333%}.van-col--15{width:62.5%}.van-col--offset-15{margin-left:62.5%}.van-col--16{width:66.66666667%}.van-col--offset-16{margin-left:66.66666667%}.van-col--17{width:70.83333333%}.van-col--offset-17{margin-left:70.83333333%}.van-col--18{width:75%}.van-col--offset-18{margin-left:75%}.van-col--19{width:79.16666667%}.van-col--offset-19{margin-left:79.16666667%}.van-col--20{width:83.33333333%}.van-col--offset-20{margin-left:83.33333333%}.van-col--21{width:87.5%}.van-col--offset-21{margin-left:87.5%}.van-col--22{width:91.66666667%}.van-col--offset-22{margin-left:91.66666667%}.van-col--23{width:95.83333333%}.van-col--offset-23{margin-left:95.83333333%}.van-col--24{width:100%}.van-col--offset-24{margin-left:100%} \ No newline at end of file diff --git a/wxcomponents/vant/dist/collapse-item/animate.d.ts b/wxcomponents/vant/dist/collapse-item/animate.d.ts new file mode 100644 index 0000000..32157b6 --- /dev/null +++ b/wxcomponents/vant/dist/collapse-item/animate.d.ts @@ -0,0 +1,2 @@ +/// +export declare function setContentAnimate(context: WechatMiniprogram.Component.TrivialInstance, expanded: boolean, mounted: boolean): void; diff --git a/wxcomponents/vant/dist/collapse-item/animate.js b/wxcomponents/vant/dist/collapse-item/animate.js new file mode 100644 index 0000000..f966ac5 --- /dev/null +++ b/wxcomponents/vant/dist/collapse-item/animate.js @@ -0,0 +1,39 @@ +import { getRect } from '../common/utils'; +function useAnimation(context, expanded, mounted, height) { + const animation = wx.createAnimation({ + duration: 0, + timingFunction: 'ease-in-out', + }); + if (expanded) { + if (height === 0) { + animation.height('auto').top(1).step(); + } + else { + animation + .height(height) + .top(1) + .step({ + duration: mounted ? 300 : 1, + }) + .height('auto') + .step(); + } + context.setData({ + animation: animation.export(), + }); + return; + } + animation.height(height).top(0).step({ duration: 1 }).height(0).step({ + duration: 300, + }); + context.setData({ + animation: animation.export(), + }); +} +export function setContentAnimate(context, expanded, mounted) { + getRect(context, '.van-collapse-item__content') + .then((rect) => rect.height) + .then((height) => { + useAnimation(context, expanded, mounted, height); + }); +} diff --git a/wxcomponents/vant/dist/collapse-item/index.d.ts b/wxcomponents/vant/dist/collapse-item/index.d.ts new file mode 100644 index 0000000..cb0ff5c --- /dev/null +++ b/wxcomponents/vant/dist/collapse-item/index.d.ts @@ -0,0 +1 @@ +export {}; diff --git a/wxcomponents/vant/dist/collapse-item/index.js b/wxcomponents/vant/dist/collapse-item/index.js new file mode 100644 index 0000000..5bac368 --- /dev/null +++ b/wxcomponents/vant/dist/collapse-item/index.js @@ -0,0 +1,60 @@ +import { VantComponent } from '../common/component'; +import { useParent } from '../common/relation'; +import { setContentAnimate } from './animate'; +VantComponent({ + classes: ['title-class', 'content-class'], + relation: useParent('collapse'), + props: { + size: String, + name: null, + title: null, + value: null, + icon: String, + label: String, + disabled: Boolean, + clickable: Boolean, + border: { + type: Boolean, + value: true, + }, + isLink: { + type: Boolean, + value: true, + }, + }, + data: { + expanded: false, + }, + mounted() { + this.updateExpanded(); + this.mounted = true; + }, + methods: { + updateExpanded() { + if (!this.parent) { + return; + } + const { value, accordion } = this.parent.data; + const { children = [] } = this.parent; + const { name } = this.data; + const index = children.indexOf(this); + const currentName = name == null ? index : name; + const expanded = accordion + ? value === currentName + : (value || []).some((name) => name === currentName); + if (expanded !== this.data.expanded) { + setContentAnimate(this, expanded, this.mounted); + } + this.setData({ index, expanded }); + }, + onClick() { + if (this.data.disabled) { + return; + } + const { name, expanded } = this.data; + const index = this.parent.children.indexOf(this); + const currentName = name == null ? index : name; + this.parent.switch(currentName, !expanded); + }, + }, +}); diff --git a/wxcomponents/vant/dist/collapse-item/index.json b/wxcomponents/vant/dist/collapse-item/index.json new file mode 100644 index 0000000..0e5425c --- /dev/null +++ b/wxcomponents/vant/dist/collapse-item/index.json @@ -0,0 +1,6 @@ +{ + "component": true, + "usingComponents": { + "van-cell": "../cell/index" + } +} diff --git a/wxcomponents/vant/dist/collapse-item/index.vue b/wxcomponents/vant/dist/collapse-item/index.vue new file mode 100644 index 0000000..074d53d --- /dev/null +++ b/wxcomponents/vant/dist/collapse-item/index.vue @@ -0,0 +1,86 @@ + + + + \ No newline at end of file diff --git a/wxcomponents/vant/dist/collapse-item/index.wxml b/wxcomponents/vant/dist/collapse-item/index.wxml new file mode 100644 index 0000000..f11d0d4 --- /dev/null +++ b/wxcomponents/vant/dist/collapse-item/index.wxml @@ -0,0 +1,45 @@ + + + + + + + + + + + + + + + diff --git a/wxcomponents/vant/dist/collapse-item/index.wxss b/wxcomponents/vant/dist/collapse-item/index.wxss new file mode 100644 index 0000000..4a65b5a --- /dev/null +++ b/wxcomponents/vant/dist/collapse-item/index.wxss @@ -0,0 +1 @@ +@import '../common/index.wxss';.van-collapse-item__title .van-cell__right-icon{transform:rotate(90deg);transition:transform var(--collapse-item-transition-duration,.3s)}.van-collapse-item__title--expanded .van-cell__right-icon{transform:rotate(-90deg)}.van-collapse-item__title--disabled .van-cell,.van-collapse-item__title--disabled .van-cell__right-icon{color:var(--collapse-item-title-disabled-color,#c8c9cc)!important}.van-collapse-item__title--disabled .van-cell--hover{background-color:#fff!important}.van-collapse-item__wrapper{overflow:hidden}.van-collapse-item__content{background-color:var(--collapse-item-content-background-color,#fff);color:var(--collapse-item-content-text-color,#969799);font-size:var(--collapse-item-content-font-size,13px);line-height:var(--collapse-item-content-line-height,1.5);padding:var(--collapse-item-content-padding,15px)} \ No newline at end of file diff --git a/wxcomponents/vant/dist/collapse/index.d.ts b/wxcomponents/vant/dist/collapse/index.d.ts new file mode 100644 index 0000000..cb0ff5c --- /dev/null +++ b/wxcomponents/vant/dist/collapse/index.d.ts @@ -0,0 +1 @@ +export {}; diff --git a/wxcomponents/vant/dist/collapse/index.js b/wxcomponents/vant/dist/collapse/index.js new file mode 100644 index 0000000..3616087 --- /dev/null +++ b/wxcomponents/vant/dist/collapse/index.js @@ -0,0 +1,46 @@ +import { VantComponent } from '../common/component'; +import { useChildren } from '../common/relation'; +VantComponent({ + relation: useChildren('collapse-item'), + props: { + value: { + type: null, + observer: 'updateExpanded', + }, + accordion: { + type: Boolean, + observer: 'updateExpanded', + }, + border: { + type: Boolean, + value: true, + }, + }, + methods: { + updateExpanded() { + this.children.forEach((child) => { + child.updateExpanded(); + }); + }, + switch(name, expanded) { + const { accordion, value } = this.data; + const changeItem = name; + if (!accordion) { + name = expanded + ? (value || []).concat(name) + : (value || []).filter((activeName) => activeName !== name); + } + else { + name = expanded ? name : ''; + } + if (expanded) { + this.$emit('open', changeItem); + } + else { + this.$emit('close', changeItem); + } + this.$emit('change', name); + this.$emit('input', name); + }, + }, +}); diff --git a/wxcomponents/vant/dist/collapse/index.json b/wxcomponents/vant/dist/collapse/index.json new file mode 100644 index 0000000..467ce29 --- /dev/null +++ b/wxcomponents/vant/dist/collapse/index.json @@ -0,0 +1,3 @@ +{ + "component": true +} diff --git a/wxcomponents/vant/dist/collapse/index.vue b/wxcomponents/vant/dist/collapse/index.vue new file mode 100644 index 0000000..446cae8 --- /dev/null +++ b/wxcomponents/vant/dist/collapse/index.vue @@ -0,0 +1,60 @@ + + + + \ No newline at end of file diff --git a/wxcomponents/vant/dist/collapse/index.wxml b/wxcomponents/vant/dist/collapse/index.wxml new file mode 100644 index 0000000..fd4e171 --- /dev/null +++ b/wxcomponents/vant/dist/collapse/index.wxml @@ -0,0 +1,3 @@ + + + diff --git a/wxcomponents/vant/dist/collapse/index.wxss b/wxcomponents/vant/dist/collapse/index.wxss new file mode 100644 index 0000000..99694d6 --- /dev/null +++ b/wxcomponents/vant/dist/collapse/index.wxss @@ -0,0 +1 @@ +@import '../common/index.wxss'; \ No newline at end of file diff --git a/wxcomponents/vant/dist/common/color.d.ts b/wxcomponents/vant/dist/common/color.d.ts new file mode 100644 index 0000000..386f307 --- /dev/null +++ b/wxcomponents/vant/dist/common/color.d.ts @@ -0,0 +1,7 @@ +export declare const RED = "#ee0a24"; +export declare const BLUE = "#1989fa"; +export declare const WHITE = "#fff"; +export declare const GREEN = "#07c160"; +export declare const ORANGE = "#ff976a"; +export declare const GRAY = "#323233"; +export declare const GRAY_DARK = "#969799"; diff --git a/wxcomponents/vant/dist/common/color.js b/wxcomponents/vant/dist/common/color.js new file mode 100644 index 0000000..6b285bd --- /dev/null +++ b/wxcomponents/vant/dist/common/color.js @@ -0,0 +1,7 @@ +export const RED = '#ee0a24'; +export const BLUE = '#1989fa'; +export const WHITE = '#fff'; +export const GREEN = '#07c160'; +export const ORANGE = '#ff976a'; +export const GRAY = '#323233'; +export const GRAY_DARK = '#969799'; diff --git a/wxcomponents/vant/dist/common/component.d.ts b/wxcomponents/vant/dist/common/component.d.ts new file mode 100644 index 0000000..1d0fd27 --- /dev/null +++ b/wxcomponents/vant/dist/common/component.d.ts @@ -0,0 +1,4 @@ +/// +import { VantComponentOptions } from 'definitions/index'; +declare function VantComponent(vantOptions: VantComponentOptions): void; +export { VantComponent }; diff --git a/wxcomponents/vant/dist/common/component.js b/wxcomponents/vant/dist/common/component.js new file mode 100644 index 0000000..938d96b --- /dev/null +++ b/wxcomponents/vant/dist/common/component.js @@ -0,0 +1,46 @@ +import { basic } from '../mixins/basic'; +function mapKeys(source, target, map) { + Object.keys(map).forEach((key) => { + if (source[key]) { + target[map[key]] = source[key]; + } + }); +} +function VantComponent(vantOptions) { + const options = {}; + mapKeys(vantOptions, options, { + data: 'data', + props: 'properties', + watch: 'observers', + mixins: 'behaviors', + methods: 'methods', + beforeCreate: 'created', + created: 'attached', + mounted: 'ready', + destroyed: 'detached', + classes: 'externalClasses', + }); + // add default externalClasses + options.externalClasses = options.externalClasses || []; + options.externalClasses.push('custom-class'); + // add default behaviors + options.behaviors = options.behaviors || []; + options.behaviors.push(basic); + // add relations + const { relation } = vantOptions; + if (relation) { + options.relations = relation.relations; + options.behaviors.push(relation.mixin); + } + // map field to form-field behavior + if (vantOptions.field) { + options.behaviors.push('wx://form-field'); + } + // add default options + options.options = { + multipleSlots: true, + addGlobalClass: true, + }; + Component(options); +} +export { VantComponent }; diff --git a/wxcomponents/vant/dist/common/index.css b/wxcomponents/vant/dist/common/index.css new file mode 100644 index 0000000..a73bb7a --- /dev/null +++ b/wxcomponents/vant/dist/common/index.css @@ -0,0 +1 @@ +.van-ellipsis{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.van-multi-ellipsis--l2{-webkit-line-clamp:2}.van-multi-ellipsis--l2,.van-multi-ellipsis--l3{-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden;text-overflow:ellipsis}.van-multi-ellipsis--l3{-webkit-line-clamp:3}.van-clearfix:after{clear:both;content:"";display:table}.van-hairline,.van-hairline--bottom,.van-hairline--left,.van-hairline--right,.van-hairline--surround,.van-hairline--top,.van-hairline--top-bottom{position:relative}.van-hairline--bottom:after,.van-hairline--left:after,.van-hairline--right:after,.van-hairline--surround:after,.van-hairline--top-bottom:after,.van-hairline--top:after,.van-hairline:after{border:0 solid #ebedf0;bottom:-50%;box-sizing:border-box;content:" ";left:-50%;pointer-events:none;position:absolute;right:-50%;top:-50%;transform:scale(.5);transform-origin:center}.van-hairline--top:after{border-top-width:1px}.van-hairline--left:after{border-left-width:1px}.van-hairline--right:after{border-right-width:1px}.van-hairline--bottom:after{border-bottom-width:1px}.van-hairline--top-bottom:after{border-width:1px 0}.van-hairline--surround:after{border-width:1px} \ No newline at end of file diff --git a/wxcomponents/vant/dist/common/index.wxss b/wxcomponents/vant/dist/common/index.wxss new file mode 100644 index 0000000..a73bb7a --- /dev/null +++ b/wxcomponents/vant/dist/common/index.wxss @@ -0,0 +1 @@ +.van-ellipsis{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.van-multi-ellipsis--l2{-webkit-line-clamp:2}.van-multi-ellipsis--l2,.van-multi-ellipsis--l3{-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden;text-overflow:ellipsis}.van-multi-ellipsis--l3{-webkit-line-clamp:3}.van-clearfix:after{clear:both;content:"";display:table}.van-hairline,.van-hairline--bottom,.van-hairline--left,.van-hairline--right,.van-hairline--surround,.van-hairline--top,.van-hairline--top-bottom{position:relative}.van-hairline--bottom:after,.van-hairline--left:after,.van-hairline--right:after,.van-hairline--surround:after,.van-hairline--top-bottom:after,.van-hairline--top:after,.van-hairline:after{border:0 solid #ebedf0;bottom:-50%;box-sizing:border-box;content:" ";left:-50%;pointer-events:none;position:absolute;right:-50%;top:-50%;transform:scale(.5);transform-origin:center}.van-hairline--top:after{border-top-width:1px}.van-hairline--left:after{border-left-width:1px}.van-hairline--right:after{border-right-width:1px}.van-hairline--bottom:after{border-bottom-width:1px}.van-hairline--top-bottom:after{border-width:1px 0}.van-hairline--surround:after{border-width:1px} \ No newline at end of file diff --git a/wxcomponents/vant/dist/common/relation.d.ts b/wxcomponents/vant/dist/common/relation.d.ts new file mode 100644 index 0000000..10193fa --- /dev/null +++ b/wxcomponents/vant/dist/common/relation.d.ts @@ -0,0 +1,15 @@ +/// +type TrivialInstance = WechatMiniprogram.Component.TrivialInstance; +export declare function useParent(name: string, onEffect?: (this: TrivialInstance) => void): { + relations: { + [x: string]: WechatMiniprogram.Component.RelationOption; + }; + mixin: string; +}; +export declare function useChildren(name: string, onEffect?: (this: TrivialInstance, target: TrivialInstance) => void): { + relations: { + [x: string]: WechatMiniprogram.Component.RelationOption; + }; + mixin: string; +}; +export {}; diff --git a/wxcomponents/vant/dist/common/relation.js b/wxcomponents/vant/dist/common/relation.js new file mode 100644 index 0000000..04e2934 --- /dev/null +++ b/wxcomponents/vant/dist/common/relation.js @@ -0,0 +1,56 @@ +export function useParent(name, onEffect) { + const path = `../${name}/index`; + return { + relations: { + [path]: { + type: 'ancestor', + linked() { + onEffect && onEffect.call(this); + }, + linkChanged() { + onEffect && onEffect.call(this); + }, + unlinked() { + onEffect && onEffect.call(this); + }, + }, + }, + mixin: Behavior({ + created() { + Object.defineProperty(this, 'parent', { + get: () => this.getRelationNodes(path)[0], + }); + Object.defineProperty(this, 'index', { + // @ts-ignore + get: () => { var _a, _b; return (_b = (_a = this.parent) === null || _a === void 0 ? void 0 : _a.children) === null || _b === void 0 ? void 0 : _b.indexOf(this); }, + }); + }, + }), + }; +} +export function useChildren(name, onEffect) { + const path = `../${name}/index`; + return { + relations: { + [path]: { + type: 'descendant', + linked(target) { + onEffect && onEffect.call(this, target); + }, + linkChanged(target) { + onEffect && onEffect.call(this, target); + }, + unlinked(target) { + onEffect && onEffect.call(this, target); + }, + }, + }, + mixin: Behavior({ + created() { + Object.defineProperty(this, 'children', { + get: () => this.getRelationNodes(path) || [], + }); + }, + }), + }; +} diff --git a/wxcomponents/vant/dist/common/style/clearfix.css b/wxcomponents/vant/dist/common/style/clearfix.css new file mode 100644 index 0000000..442246f --- /dev/null +++ b/wxcomponents/vant/dist/common/style/clearfix.css @@ -0,0 +1 @@ +.van-clearfix:after{clear:both;content:"";display:table} \ No newline at end of file diff --git a/wxcomponents/vant/dist/common/style/clearfix.wxss b/wxcomponents/vant/dist/common/style/clearfix.wxss new file mode 100644 index 0000000..442246f --- /dev/null +++ b/wxcomponents/vant/dist/common/style/clearfix.wxss @@ -0,0 +1 @@ +.van-clearfix:after{clear:both;content:"";display:table} \ No newline at end of file diff --git a/wxcomponents/vant/dist/common/style/ellipsis.css b/wxcomponents/vant/dist/common/style/ellipsis.css new file mode 100644 index 0000000..ee701df --- /dev/null +++ b/wxcomponents/vant/dist/common/style/ellipsis.css @@ -0,0 +1 @@ +.van-ellipsis{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.van-multi-ellipsis--l2{-webkit-line-clamp:2}.van-multi-ellipsis--l2,.van-multi-ellipsis--l3{-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden;text-overflow:ellipsis}.van-multi-ellipsis--l3{-webkit-line-clamp:3} \ No newline at end of file diff --git a/wxcomponents/vant/dist/common/style/ellipsis.wxss b/wxcomponents/vant/dist/common/style/ellipsis.wxss new file mode 100644 index 0000000..ee701df --- /dev/null +++ b/wxcomponents/vant/dist/common/style/ellipsis.wxss @@ -0,0 +1 @@ +.van-ellipsis{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.van-multi-ellipsis--l2{-webkit-line-clamp:2}.van-multi-ellipsis--l2,.van-multi-ellipsis--l3{-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden;text-overflow:ellipsis}.van-multi-ellipsis--l3{-webkit-line-clamp:3} \ No newline at end of file diff --git a/wxcomponents/vant/dist/common/style/hairline.css b/wxcomponents/vant/dist/common/style/hairline.css new file mode 100644 index 0000000..f7c6260 --- /dev/null +++ b/wxcomponents/vant/dist/common/style/hairline.css @@ -0,0 +1 @@ +.van-hairline,.van-hairline--bottom,.van-hairline--left,.van-hairline--right,.van-hairline--surround,.van-hairline--top,.van-hairline--top-bottom{position:relative}.van-hairline--bottom:after,.van-hairline--left:after,.van-hairline--right:after,.van-hairline--surround:after,.van-hairline--top-bottom:after,.van-hairline--top:after,.van-hairline:after{border:0 solid #ebedf0;bottom:-50%;box-sizing:border-box;content:" ";left:-50%;pointer-events:none;position:absolute;right:-50%;top:-50%;transform:scale(.5);transform-origin:center}.van-hairline--top:after{border-top-width:1px}.van-hairline--left:after{border-left-width:1px}.van-hairline--right:after{border-right-width:1px}.van-hairline--bottom:after{border-bottom-width:1px}.van-hairline--top-bottom:after{border-width:1px 0}.van-hairline--surround:after{border-width:1px} \ No newline at end of file diff --git a/wxcomponents/vant/dist/common/style/hairline.wxss b/wxcomponents/vant/dist/common/style/hairline.wxss new file mode 100644 index 0000000..f7c6260 --- /dev/null +++ b/wxcomponents/vant/dist/common/style/hairline.wxss @@ -0,0 +1 @@ +.van-hairline,.van-hairline--bottom,.van-hairline--left,.van-hairline--right,.van-hairline--surround,.van-hairline--top,.van-hairline--top-bottom{position:relative}.van-hairline--bottom:after,.van-hairline--left:after,.van-hairline--right:after,.van-hairline--surround:after,.van-hairline--top-bottom:after,.van-hairline--top:after,.van-hairline:after{border:0 solid #ebedf0;bottom:-50%;box-sizing:border-box;content:" ";left:-50%;pointer-events:none;position:absolute;right:-50%;top:-50%;transform:scale(.5);transform-origin:center}.van-hairline--top:after{border-top-width:1px}.van-hairline--left:after{border-left-width:1px}.van-hairline--right:after{border-right-width:1px}.van-hairline--bottom:after{border-bottom-width:1px}.van-hairline--top-bottom:after{border-width:1px 0}.van-hairline--surround:after{border-width:1px} \ No newline at end of file diff --git a/wxcomponents/vant/dist/common/style/mixins/clearfix.css b/wxcomponents/vant/dist/common/style/mixins/clearfix.css new file mode 100644 index 0000000..e69de29 diff --git a/wxcomponents/vant/dist/common/style/mixins/clearfix.wxss b/wxcomponents/vant/dist/common/style/mixins/clearfix.wxss new file mode 100644 index 0000000..e69de29 diff --git a/wxcomponents/vant/dist/common/style/mixins/ellipsis.css b/wxcomponents/vant/dist/common/style/mixins/ellipsis.css new file mode 100644 index 0000000..e69de29 diff --git a/wxcomponents/vant/dist/common/style/mixins/ellipsis.wxss b/wxcomponents/vant/dist/common/style/mixins/ellipsis.wxss new file mode 100644 index 0000000..e69de29 diff --git a/wxcomponents/vant/dist/common/style/mixins/hairline.css b/wxcomponents/vant/dist/common/style/mixins/hairline.css new file mode 100644 index 0000000..e69de29 diff --git a/wxcomponents/vant/dist/common/style/mixins/hairline.wxss b/wxcomponents/vant/dist/common/style/mixins/hairline.wxss new file mode 100644 index 0000000..e69de29 diff --git a/wxcomponents/vant/dist/common/style/var.css b/wxcomponents/vant/dist/common/style/var.css new file mode 100644 index 0000000..e69de29 diff --git a/wxcomponents/vant/dist/common/style/var.wxss b/wxcomponents/vant/dist/common/style/var.wxss new file mode 100644 index 0000000..e69de29 diff --git a/wxcomponents/vant/dist/common/utils.d.ts b/wxcomponents/vant/dist/common/utils.d.ts new file mode 100644 index 0000000..719f2ed --- /dev/null +++ b/wxcomponents/vant/dist/common/utils.d.ts @@ -0,0 +1,17 @@ +/// +/// +/// +/// +/// +export { isDef } from './validator'; +export { getSystemInfoSync } from './version'; +export declare function range(num: number, min: number, max: number): number; +export declare function nextTick(cb: (...args: any[]) => void): void; +export declare function addUnit(value?: string | number): string | undefined; +export declare function requestAnimationFrame(cb: () => void): NodeJS.Timeout; +export declare function pickExclude(obj: unknown, keys: string[]): {}; +export declare function getRect(context: WechatMiniprogram.Component.TrivialInstance, selector: string): Promise; +export declare function getAllRect(context: WechatMiniprogram.Component.TrivialInstance, selector: string): Promise; +export declare function groupSetData(context: WechatMiniprogram.Component.TrivialInstance, cb: () => void): void; +export declare function toPromise(promiseLike: Promise | unknown): Promise; +export declare function getCurrentPage(): T & WechatMiniprogram.OptionalInterface & WechatMiniprogram.Page.InstanceProperties & WechatMiniprogram.Page.InstanceMethods & WechatMiniprogram.Page.Data & WechatMiniprogram.IAnyObject; diff --git a/wxcomponents/vant/dist/common/utils.js b/wxcomponents/vant/dist/common/utils.js new file mode 100644 index 0000000..f81f5f4 --- /dev/null +++ b/wxcomponents/vant/dist/common/utils.js @@ -0,0 +1,76 @@ +import { isDef, isNumber, isPlainObject, isPromise } from './validator'; +import { canIUseGroupSetData, canIUseNextTick } from './version'; +export { isDef } from './validator'; +export { getSystemInfoSync } from './version'; +export function range(num, min, max) { + return Math.min(Math.max(num, min), max); +} +export function nextTick(cb) { + if (canIUseNextTick()) { + wx.nextTick(cb); + } + else { + setTimeout(() => { + cb(); + }, 1000 / 30); + } +} +export function addUnit(value) { + if (!isDef(value)) { + return undefined; + } + value = String(value); + return isNumber(value) ? `${value}px` : value; +} +export function requestAnimationFrame(cb) { + return setTimeout(() => { + cb(); + }, 1000 / 30); +} +export function pickExclude(obj, keys) { + if (!isPlainObject(obj)) { + return {}; + } + return Object.keys(obj).reduce((prev, key) => { + if (!keys.includes(key)) { + prev[key] = obj[key]; + } + return prev; + }, {}); +} +export function getRect(context, selector) { + return new Promise((resolve) => { + wx.createSelectorQuery() + .in(context) + .select(selector) + .boundingClientRect() + .exec((rect = []) => resolve(rect[0])); + }); +} +export function getAllRect(context, selector) { + return new Promise((resolve) => { + wx.createSelectorQuery() + .in(context) + .selectAll(selector) + .boundingClientRect() + .exec((rect = []) => resolve(rect[0])); + }); +} +export function groupSetData(context, cb) { + if (canIUseGroupSetData()) { + context.groupSetData(cb); + } + else { + cb(); + } +} +export function toPromise(promiseLike) { + if (isPromise(promiseLike)) { + return promiseLike; + } + return Promise.resolve(promiseLike); +} +export function getCurrentPage() { + const pages = getCurrentPages(); + return pages[pages.length - 1]; +} diff --git a/wxcomponents/vant/dist/common/validator.d.ts b/wxcomponents/vant/dist/common/validator.d.ts new file mode 100644 index 0000000..152894a --- /dev/null +++ b/wxcomponents/vant/dist/common/validator.d.ts @@ -0,0 +1,9 @@ +export declare function isFunction(val: unknown): val is Function; +export declare function isPlainObject(val: unknown): val is Record; +export declare function isPromise(val: unknown): val is Promise; +export declare function isDef(value: unknown): boolean; +export declare function isObj(x: unknown): x is Record; +export declare function isNumber(value: string): boolean; +export declare function isBoolean(value: unknown): value is boolean; +export declare function isImageUrl(url: string): boolean; +export declare function isVideoUrl(url: string): boolean; diff --git a/wxcomponents/vant/dist/common/validator.js b/wxcomponents/vant/dist/common/validator.js new file mode 100644 index 0000000..f11f844 --- /dev/null +++ b/wxcomponents/vant/dist/common/validator.js @@ -0,0 +1,31 @@ +// eslint-disable-next-line @typescript-eslint/ban-types +export function isFunction(val) { + return typeof val === 'function'; +} +export function isPlainObject(val) { + return val !== null && typeof val === 'object' && !Array.isArray(val); +} +export function isPromise(val) { + return isPlainObject(val) && isFunction(val.then) && isFunction(val.catch); +} +export function isDef(value) { + return value !== undefined && value !== null; +} +export function isObj(x) { + const type = typeof x; + return x !== null && (type === 'object' || type === 'function'); +} +export function isNumber(value) { + return /^\d+(\.\d+)?$/.test(value); +} +export function isBoolean(value) { + return typeof value === 'boolean'; +} +const IMAGE_REGEXP = /\.(jpeg|jpg|gif|png|svg|webp|jfif|bmp|dpg)/i; +const VIDEO_REGEXP = /\.(mp4|mpg|mpeg|dat|asf|avi|rm|rmvb|mov|wmv|flv|mkv)/i; +export function isImageUrl(url) { + return IMAGE_REGEXP.test(url); +} +export function isVideoUrl(url) { + return VIDEO_REGEXP.test(url); +} diff --git a/wxcomponents/vant/dist/common/version.d.ts b/wxcomponents/vant/dist/common/version.d.ts new file mode 100644 index 0000000..7142201 --- /dev/null +++ b/wxcomponents/vant/dist/common/version.d.ts @@ -0,0 +1,9 @@ +/// +export declare function getSystemInfoSync(): WechatMiniprogram.SystemInfo; +export declare function canIUseModel(): boolean; +export declare function canIUseFormFieldButton(): boolean; +export declare function canIUseAnimate(): boolean; +export declare function canIUseGroupSetData(): boolean; +export declare function canIUseNextTick(): boolean; +export declare function canIUseCanvas2d(): boolean; +export declare function canIUseGetUserProfile(): boolean; diff --git a/wxcomponents/vant/dist/common/version.js b/wxcomponents/vant/dist/common/version.js new file mode 100644 index 0000000..c675e1f --- /dev/null +++ b/wxcomponents/vant/dist/common/version.js @@ -0,0 +1,59 @@ +let systemInfo; +export function getSystemInfoSync() { + if (systemInfo == null) { + systemInfo = wx.getSystemInfoSync(); + } + return systemInfo; +} +function compareVersion(v1, v2) { + v1 = v1.split('.'); + v2 = v2.split('.'); + const len = Math.max(v1.length, v2.length); + while (v1.length < len) { + v1.push('0'); + } + while (v2.length < len) { + v2.push('0'); + } + for (let i = 0; i < len; i++) { + const num1 = parseInt(v1[i], 10); + const num2 = parseInt(v2[i], 10); + if (num1 > num2) { + return 1; + } + if (num1 < num2) { + return -1; + } + } + return 0; +} +function gte(version) { + const system = getSystemInfoSync(); + return compareVersion(system.SDKVersion, version) >= 0; +} +export function canIUseModel() { + return gte('2.9.3'); +} +export function canIUseFormFieldButton() { + return gte('2.10.3'); +} +export function canIUseAnimate() { + return gte('2.9.0'); +} +export function canIUseGroupSetData() { + return gte('2.4.0'); +} +export function canIUseNextTick() { + try { + return wx.canIUse('nextTick'); + } + catch (e) { + return gte('2.7.1'); + } +} +export function canIUseCanvas2d() { + return gte('2.9.0'); +} +export function canIUseGetUserProfile() { + return !!wx.getUserProfile; +} diff --git a/wxcomponents/vant/dist/config-provider/index.d.ts b/wxcomponents/vant/dist/config-provider/index.d.ts new file mode 100644 index 0000000..cb0ff5c --- /dev/null +++ b/wxcomponents/vant/dist/config-provider/index.d.ts @@ -0,0 +1 @@ +export {}; diff --git a/wxcomponents/vant/dist/config-provider/index.js b/wxcomponents/vant/dist/config-provider/index.js new file mode 100644 index 0000000..0cb23f4 --- /dev/null +++ b/wxcomponents/vant/dist/config-provider/index.js @@ -0,0 +1,9 @@ +import { VantComponent } from '../common/component'; +VantComponent({ + props: { + themeVars: { + type: Object, + value: {}, + }, + }, +}); diff --git a/wxcomponents/vant/dist/config-provider/index.json b/wxcomponents/vant/dist/config-provider/index.json new file mode 100644 index 0000000..467ce29 --- /dev/null +++ b/wxcomponents/vant/dist/config-provider/index.json @@ -0,0 +1,3 @@ +{ + "component": true +} diff --git a/wxcomponents/vant/dist/config-provider/index.vue b/wxcomponents/vant/dist/config-provider/index.vue new file mode 100644 index 0000000..65a2deb --- /dev/null +++ b/wxcomponents/vant/dist/config-provider/index.vue @@ -0,0 +1,23 @@ + + + + \ No newline at end of file diff --git a/wxcomponents/vant/dist/config-provider/index.wxml b/wxcomponents/vant/dist/config-provider/index.wxml new file mode 100644 index 0000000..3cfb461 --- /dev/null +++ b/wxcomponents/vant/dist/config-provider/index.wxml @@ -0,0 +1,5 @@ + + + + + diff --git a/wxcomponents/vant/dist/config-provider/index.wxs b/wxcomponents/vant/dist/config-provider/index.wxs new file mode 100644 index 0000000..7ca0203 --- /dev/null +++ b/wxcomponents/vant/dist/config-provider/index.wxs @@ -0,0 +1,29 @@ +/* eslint-disable */ +var object = require('../wxs/object.wxs'); +var style = require('../wxs/style.wxs'); + +function kebabCase(word) { + var newWord = word + .replace(getRegExp("[A-Z]", 'g'), function (i) { + return '-' + i; + }) + .toLowerCase() + .replace(getRegExp("^-"), ''); + + return newWord; +} + +function mapThemeVarsToCSSVars(themeVars) { + var cssVars = {}; + object.keys(themeVars).forEach(function (key) { + var cssVarsKey = '--' + kebabCase(key); + cssVars[cssVarsKey] = themeVars[key]; + }); + + return style(cssVars); +} + +module.exports = { + kebabCase: kebabCase, + mapThemeVarsToCSSVars: mapThemeVarsToCSSVars, +}; diff --git a/wxcomponents/vant/dist/count-down/index.d.ts b/wxcomponents/vant/dist/count-down/index.d.ts new file mode 100644 index 0000000..cb0ff5c --- /dev/null +++ b/wxcomponents/vant/dist/count-down/index.d.ts @@ -0,0 +1 @@ +export {}; diff --git a/wxcomponents/vant/dist/count-down/index.js b/wxcomponents/vant/dist/count-down/index.js new file mode 100644 index 0000000..da24145 --- /dev/null +++ b/wxcomponents/vant/dist/count-down/index.js @@ -0,0 +1,100 @@ +import { VantComponent } from '../common/component'; +import { isSameSecond, parseFormat, parseTimeData } from './utils'; +function simpleTick(fn) { + return setTimeout(fn, 30); +} +VantComponent({ + props: { + useSlot: Boolean, + millisecond: Boolean, + time: { + type: Number, + observer: 'reset', + }, + format: { + type: String, + value: 'HH:mm:ss', + }, + autoStart: { + type: Boolean, + value: true, + }, + }, + data: { + timeData: parseTimeData(0), + formattedTime: '0', + }, + destroyed() { + clearTimeout(this.tid); + this.tid = null; + }, + methods: { + // 开始 + start() { + if (this.counting) { + return; + } + this.counting = true; + this.endTime = Date.now() + this.remain; + this.tick(); + }, + // 暂停 + pause() { + this.counting = false; + clearTimeout(this.tid); + }, + // 重置 + reset() { + this.pause(); + this.remain = this.data.time; + this.setRemain(this.remain); + if (this.data.autoStart) { + this.start(); + } + }, + tick() { + if (this.data.millisecond) { + this.microTick(); + } + else { + this.macroTick(); + } + }, + microTick() { + this.tid = simpleTick(() => { + this.setRemain(this.getRemain()); + if (this.remain !== 0) { + this.microTick(); + } + }); + }, + macroTick() { + this.tid = simpleTick(() => { + const remain = this.getRemain(); + if (!isSameSecond(remain, this.remain) || remain === 0) { + this.setRemain(remain); + } + if (this.remain !== 0) { + this.macroTick(); + } + }); + }, + getRemain() { + return Math.max(this.endTime - Date.now(), 0); + }, + setRemain(remain) { + this.remain = remain; + const timeData = parseTimeData(remain); + if (this.data.useSlot) { + this.$emit('change', timeData); + } + this.setData({ + formattedTime: parseFormat(this.data.format, timeData), + }); + if (remain === 0) { + this.pause(); + this.$emit('finish'); + } + }, + }, +}); diff --git a/wxcomponents/vant/dist/count-down/index.json b/wxcomponents/vant/dist/count-down/index.json new file mode 100644 index 0000000..467ce29 --- /dev/null +++ b/wxcomponents/vant/dist/count-down/index.json @@ -0,0 +1,3 @@ +{ + "component": true +} diff --git a/wxcomponents/vant/dist/count-down/index.vue b/wxcomponents/vant/dist/count-down/index.vue new file mode 100644 index 0000000..32924a6 --- /dev/null +++ b/wxcomponents/vant/dist/count-down/index.vue @@ -0,0 +1,115 @@ + + + + \ No newline at end of file diff --git a/wxcomponents/vant/dist/count-down/index.wxml b/wxcomponents/vant/dist/count-down/index.wxml new file mode 100644 index 0000000..e206e16 --- /dev/null +++ b/wxcomponents/vant/dist/count-down/index.wxml @@ -0,0 +1,4 @@ + + + {{ formattedTime }} + diff --git a/wxcomponents/vant/dist/count-down/index.wxss b/wxcomponents/vant/dist/count-down/index.wxss new file mode 100644 index 0000000..8b957f7 --- /dev/null +++ b/wxcomponents/vant/dist/count-down/index.wxss @@ -0,0 +1 @@ +@import '../common/index.wxss';.van-count-down{color:var(--count-down-text-color,#323233);font-size:var(--count-down-font-size,14px);line-height:var(--count-down-line-height,20px)} \ No newline at end of file diff --git a/wxcomponents/vant/dist/count-down/utils.d.ts b/wxcomponents/vant/dist/count-down/utils.d.ts new file mode 100644 index 0000000..876a6c1 --- /dev/null +++ b/wxcomponents/vant/dist/count-down/utils.d.ts @@ -0,0 +1,10 @@ +export type TimeData = { + days: number; + hours: number; + minutes: number; + seconds: number; + milliseconds: number; +}; +export declare function parseTimeData(time: number): TimeData; +export declare function parseFormat(format: string, timeData: TimeData): string; +export declare function isSameSecond(time1: number, time2: number): boolean; diff --git a/wxcomponents/vant/dist/count-down/utils.js b/wxcomponents/vant/dist/count-down/utils.js new file mode 100644 index 0000000..cbdbd79 --- /dev/null +++ b/wxcomponents/vant/dist/count-down/utils.js @@ -0,0 +1,57 @@ +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) { + const { days } = timeData; + let { hours, minutes, seconds, milliseconds } = timeData; + if (format.indexOf('DD') === -1) { + hours += days * 24; + } + else { + format = format.replace('DD', padZero(days)); + } + 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/wxcomponents/vant/dist/datetime-picker/index.d.ts b/wxcomponents/vant/dist/datetime-picker/index.d.ts new file mode 100644 index 0000000..cb0ff5c --- /dev/null +++ b/wxcomponents/vant/dist/datetime-picker/index.d.ts @@ -0,0 +1 @@ +export {}; diff --git a/wxcomponents/vant/dist/datetime-picker/index.js b/wxcomponents/vant/dist/datetime-picker/index.js new file mode 100644 index 0000000..3334170 --- /dev/null +++ b/wxcomponents/vant/dist/datetime-picker/index.js @@ -0,0 +1,295 @@ +import { VantComponent } from '../common/component'; +import { isDef } from '../common/validator'; +import { pickerProps } from '../picker/shared'; +const currentYear = new Date().getFullYear(); +function isValidDate(date) { + return isDef(date) && !isNaN(new Date(date).getTime()); +} +function range(num, min, max) { + return Math.min(Math.max(num, min), max); +} +function padZero(val) { + return `00${val}`.slice(-2); +} +function times(n, iteratee) { + let index = -1; + const result = Array(n < 0 ? 0 : n); + while (++index < n) { + result[index] = iteratee(index); + } + return result; +} +function getTrueValue(formattedValue) { + if (formattedValue === undefined) { + formattedValue = '1'; + } + while (isNaN(parseInt(formattedValue, 10))) { + formattedValue = formattedValue.slice(1); + } + return parseInt(formattedValue, 10); +} +function getMonthEndDay(year, month) { + return 32 - new Date(year, month - 1, 32).getDate(); +} +const defaultFormatter = (type, value) => value; +VantComponent({ + classes: ['active-class', 'toolbar-class', 'column-class'], + props: Object.assign(Object.assign({}, pickerProps), { value: { + type: null, + observer: 'updateValue', + }, filter: null, type: { + type: String, + value: 'datetime', + observer: 'updateValue', + }, showToolbar: { + type: Boolean, + value: true, + }, formatter: { + type: null, + value: defaultFormatter, + }, minDate: { + type: Number, + value: new Date(currentYear - 10, 0, 1).getTime(), + observer: 'updateValue', + }, maxDate: { + type: Number, + value: new Date(currentYear + 10, 11, 31).getTime(), + observer: 'updateValue', + }, minHour: { + type: Number, + value: 0, + observer: 'updateValue', + }, maxHour: { + type: Number, + value: 23, + observer: 'updateValue', + }, minMinute: { + type: Number, + value: 0, + observer: 'updateValue', + }, maxMinute: { + type: Number, + value: 59, + observer: 'updateValue', + } }), + data: { + innerValue: Date.now(), + columns: [], + }, + methods: { + updateValue() { + const { data } = this; + const val = this.correctValue(data.value); + const isEqual = val === data.innerValue; + this.updateColumnValue(val).then(() => { + if (!isEqual) { + this.$emit('input', val); + } + }); + }, + getPicker() { + if (this.picker == null) { + this.picker = this.selectComponent('.van-datetime-picker'); + const { picker } = this; + const { setColumnValues } = picker; + picker.setColumnValues = (...args) => setColumnValues.apply(picker, [...args, false]); + } + return this.picker; + }, + updateColumns() { + const { formatter = defaultFormatter } = this.data; + const results = this.getOriginColumns().map((column) => ({ + values: column.values.map((value) => formatter(column.type, value)), + })); + return this.set({ columns: results }); + }, + getOriginColumns() { + const { filter } = this.data; + const results = this.getRanges().map(({ type, range }) => { + let values = times(range[1] - range[0] + 1, (index) => { + const value = range[0] + index; + return type === 'year' ? `${value}` : padZero(value); + }); + if (filter) { + values = filter(type, values); + } + return { type, values }; + }); + return results; + }, + getRanges() { + const { data } = this; + if (data.type === 'time') { + return [ + { + type: 'hour', + range: [data.minHour, data.maxHour], + }, + { + type: 'minute', + range: [data.minMinute, data.maxMinute], + }, + ]; + } + const { maxYear, maxDate, maxMonth, maxHour, maxMinute, } = this.getBoundary('max', data.innerValue); + const { minYear, minDate, minMonth, minHour, minMinute, } = this.getBoundary('min', data.innerValue); + const result = [ + { + type: 'year', + range: [minYear, maxYear], + }, + { + type: 'month', + range: [minMonth, maxMonth], + }, + { + type: 'day', + range: [minDate, maxDate], + }, + { + type: 'hour', + range: [minHour, maxHour], + }, + { + type: 'minute', + range: [minMinute, maxMinute], + }, + ]; + if (data.type === 'date') + result.splice(3, 2); + if (data.type === 'year-month') + result.splice(2, 3); + return result; + }, + correctValue(value) { + const { data } = this; + // validate value + const isDateType = data.type !== 'time'; + if (isDateType && !isValidDate(value)) { + value = data.minDate; + } + else if (!isDateType && !value) { + const { minHour } = data; + value = `${padZero(minHour)}:00`; + } + // time type + if (!isDateType) { + let [hour, minute] = value.split(':'); + hour = padZero(range(hour, data.minHour, data.maxHour)); + minute = padZero(range(minute, data.minMinute, data.maxMinute)); + return `${hour}:${minute}`; + } + // date type + value = Math.max(value, data.minDate); + value = Math.min(value, data.maxDate); + return value; + }, + getBoundary(type, innerValue) { + const value = new Date(innerValue); + const boundary = new Date(this.data[`${type}Date`]); + const year = boundary.getFullYear(); + let month = 1; + let date = 1; + let hour = 0; + let minute = 0; + if (type === 'max') { + month = 12; + date = getMonthEndDay(value.getFullYear(), value.getMonth() + 1); + hour = 23; + minute = 59; + } + if (value.getFullYear() === year) { + month = boundary.getMonth() + 1; + if (value.getMonth() + 1 === month) { + date = boundary.getDate(); + if (value.getDate() === date) { + hour = boundary.getHours(); + if (value.getHours() === hour) { + minute = boundary.getMinutes(); + } + } + } + } + return { + [`${type}Year`]: year, + [`${type}Month`]: month, + [`${type}Date`]: date, + [`${type}Hour`]: hour, + [`${type}Minute`]: minute, + }; + }, + onCancel() { + this.$emit('cancel'); + }, + onConfirm() { + this.$emit('confirm', this.data.innerValue); + }, + onChange() { + const { data } = this; + let value; + const picker = this.getPicker(); + const originColumns = this.getOriginColumns(); + if (data.type === 'time') { + const indexes = picker.getIndexes(); + value = `${+originColumns[0].values[indexes[0]]}:${+originColumns[1] + .values[indexes[1]]}`; + } + else { + const indexes = picker.getIndexes(); + const values = indexes.map((value, index) => originColumns[index].values[value]); + const year = getTrueValue(values[0]); + const month = getTrueValue(values[1]); + const maxDate = getMonthEndDay(year, month); + let date = getTrueValue(values[2]); + if (data.type === 'year-month') { + date = 1; + } + date = date > maxDate ? maxDate : date; + let hour = 0; + let minute = 0; + if (data.type === 'datetime') { + hour = getTrueValue(values[3]); + minute = getTrueValue(values[4]); + } + value = new Date(year, month - 1, date, hour, minute); + } + value = this.correctValue(value); + this.updateColumnValue(value).then(() => { + this.$emit('input', value); + this.$emit('change', picker); + }); + }, + updateColumnValue(value) { + let values = []; + const { type } = this.data; + const formatter = this.data.formatter || defaultFormatter; + const picker = this.getPicker(); + if (type === 'time') { + const pair = value.split(':'); + values = [formatter('hour', pair[0]), formatter('minute', pair[1])]; + } + else { + const date = new Date(value); + values = [ + formatter('year', `${date.getFullYear()}`), + formatter('month', padZero(date.getMonth() + 1)), + ]; + if (type === 'date') { + values.push(formatter('day', padZero(date.getDate()))); + } + if (type === 'datetime') { + values.push(formatter('day', padZero(date.getDate())), formatter('hour', padZero(date.getHours())), formatter('minute', padZero(date.getMinutes()))); + } + } + return this.set({ innerValue: value }) + .then(() => this.updateColumns()) + .then(() => picker.setValues(values)); + }, + }, + created() { + const innerValue = this.correctValue(this.data.value); + this.updateColumnValue(innerValue).then(() => { + this.$emit('input', innerValue); + }); + }, +}); diff --git a/wxcomponents/vant/dist/datetime-picker/index.json b/wxcomponents/vant/dist/datetime-picker/index.json new file mode 100644 index 0000000..a778e91 --- /dev/null +++ b/wxcomponents/vant/dist/datetime-picker/index.json @@ -0,0 +1,6 @@ +{ + "component": true, + "usingComponents": { + "van-picker": "../picker/index" + } +} diff --git a/wxcomponents/vant/dist/datetime-picker/index.vue b/wxcomponents/vant/dist/datetime-picker/index.vue new file mode 100644 index 0000000..497155d --- /dev/null +++ b/wxcomponents/vant/dist/datetime-picker/index.vue @@ -0,0 +1,309 @@ + + + + \ No newline at end of file diff --git a/wxcomponents/vant/dist/datetime-picker/index.wxml b/wxcomponents/vant/dist/datetime-picker/index.wxml new file mode 100644 index 0000000..ade2202 --- /dev/null +++ b/wxcomponents/vant/dist/datetime-picker/index.wxml @@ -0,0 +1,16 @@ + diff --git a/wxcomponents/vant/dist/datetime-picker/index.wxss b/wxcomponents/vant/dist/datetime-picker/index.wxss new file mode 100644 index 0000000..99694d6 --- /dev/null +++ b/wxcomponents/vant/dist/datetime-picker/index.wxss @@ -0,0 +1 @@ +@import '../common/index.wxss'; \ No newline at end of file diff --git a/wxcomponents/vant/dist/definitions/index.d.ts b/wxcomponents/vant/dist/definitions/index.d.ts new file mode 100644 index 0000000..d0554f6 --- /dev/null +++ b/wxcomponents/vant/dist/definitions/index.d.ts @@ -0,0 +1,28 @@ +/// +interface VantComponentInstance { + parent: WechatMiniprogram.Component.TrivialInstance; + children: WechatMiniprogram.Component.TrivialInstance[]; + index: number; + $emit: (name: string, detail?: unknown, options?: WechatMiniprogram.Component.TriggerEventOption) => void; +} +export type VantComponentOptions = { + data?: Data; + field?: boolean; + classes?: string[]; + mixins?: string[]; + props?: Props; + relation?: { + relations: Record; + mixin: string; + }; + watch?: Record any>; + methods?: Methods; + beforeCreate?: () => void; + created?: () => void; + mounted?: () => void; + destroyed?: () => void; +} & ThisType, Props, Methods> & Record>; +export {}; diff --git a/wxcomponents/vant/dist/definitions/index.js b/wxcomponents/vant/dist/definitions/index.js new file mode 100644 index 0000000..cb0ff5c --- /dev/null +++ b/wxcomponents/vant/dist/definitions/index.js @@ -0,0 +1 @@ +export {}; diff --git a/wxcomponents/vant/dist/dialog/dialog.d.ts b/wxcomponents/vant/dist/dialog/dialog.d.ts new file mode 100644 index 0000000..db2da5f --- /dev/null +++ b/wxcomponents/vant/dist/dialog/dialog.d.ts @@ -0,0 +1,55 @@ +/// +/// +export type Action = 'confirm' | 'cancel' | 'overlay'; +type DialogContext = WechatMiniprogram.Page.TrivialInstance | WechatMiniprogram.Component.TrivialInstance; +interface DialogOptions { + lang?: string; + show?: boolean; + title?: string; + width?: string | number | null; + zIndex?: number; + theme?: string; + context?: (() => DialogContext) | DialogContext; + message?: string; + overlay?: boolean; + selector?: string; + ariaLabel?: string; + /** + * @deprecated use custom-class instead + */ + className?: string; + customStyle?: string; + transition?: string; + /** + * @deprecated use beforeClose instead + */ + asyncClose?: boolean; + beforeClose?: null | ((action: Action) => Promise | void); + businessId?: number; + sessionFrom?: string; + overlayStyle?: string; + appParameter?: string; + messageAlign?: string; + sendMessageImg?: string; + showMessageCard?: boolean; + sendMessagePath?: string; + sendMessageTitle?: string; + confirmButtonText?: string; + cancelButtonText?: string; + showConfirmButton?: boolean; + showCancelButton?: boolean; + closeOnClickOverlay?: boolean; + confirmButtonOpenType?: string; +} +declare const Dialog: { + (options: DialogOptions): Promise; + alert(options: DialogOptions): Promise; + confirm(options: DialogOptions): Promise; + close(): void; + stopLoading(): void; + currentOptions: DialogOptions; + defaultOptions: DialogOptions; + setDefaultOptions(options: DialogOptions): void; + resetDefaultOptions(): void; +}; +export default Dialog; diff --git a/wxcomponents/vant/dist/dialog/dialog.js b/wxcomponents/vant/dist/dialog/dialog.js new file mode 100644 index 0000000..a96ec08 --- /dev/null +++ b/wxcomponents/vant/dist/dialog/dialog.js @@ -0,0 +1,77 @@ +let queue = []; +const defaultOptions = { + show: false, + title: '', + width: null, + theme: 'default', + message: '', + zIndex: 100, + overlay: true, + selector: '#van-dialog', + className: '', + asyncClose: false, + beforeClose: null, + transition: 'scale', + customStyle: '', + messageAlign: '', + overlayStyle: '', + confirmButtonText: '确认', + cancelButtonText: '取消', + showConfirmButton: true, + showCancelButton: false, + closeOnClickOverlay: false, + confirmButtonOpenType: '', +}; +let currentOptions = Object.assign({}, defaultOptions); +function getContext() { + const pages = getCurrentPages(); + return pages[pages.length - 1]; +} +const Dialog = (options) => { + options = Object.assign(Object.assign({}, currentOptions), options); + return new Promise((resolve, reject) => { + const context = (typeof options.context === 'function' + ? options.context() + : options.context) || getContext(); + const dialog = context.selectComponent(options.selector); + delete options.context; + delete options.selector; + if (dialog) { + dialog.setData(Object.assign({ callback: (action, instance) => { + action === 'confirm' ? resolve(instance) : reject(instance); + } }, options)); + wx.nextTick(() => { + dialog.setData({ show: true }); + }); + queue.push(dialog); + } + else { + console.warn('未找到 van-dialog 节点,请确认 selector 及 context 是否正确'); + } + }); +}; +Dialog.alert = (options) => Dialog(options); +Dialog.confirm = (options) => Dialog(Object.assign({ showCancelButton: true }, options)); +Dialog.close = () => { + queue.forEach((dialog) => { + dialog.close(); + }); + queue = []; +}; +Dialog.stopLoading = () => { + queue.forEach((dialog) => { + dialog.stopLoading(); + }); +}; +Dialog.currentOptions = currentOptions; +Dialog.defaultOptions = defaultOptions; +Dialog.setDefaultOptions = (options) => { + currentOptions = Object.assign(Object.assign({}, currentOptions), options); + Dialog.currentOptions = currentOptions; +}; +Dialog.resetDefaultOptions = () => { + currentOptions = Object.assign({}, defaultOptions); + Dialog.currentOptions = currentOptions; +}; +Dialog.resetDefaultOptions(); +export default Dialog; diff --git a/wxcomponents/vant/dist/dialog/index.d.ts b/wxcomponents/vant/dist/dialog/index.d.ts new file mode 100644 index 0000000..cb0ff5c --- /dev/null +++ b/wxcomponents/vant/dist/dialog/index.d.ts @@ -0,0 +1 @@ +export {}; diff --git a/wxcomponents/vant/dist/dialog/index.js b/wxcomponents/vant/dist/dialog/index.js new file mode 100644 index 0000000..6f24cf4 --- /dev/null +++ b/wxcomponents/vant/dist/dialog/index.js @@ -0,0 +1,122 @@ +import { VantComponent } from '../common/component'; +import { button } from '../mixins/button'; +import { GRAY, RED } from '../common/color'; +import { toPromise } from '../common/utils'; +VantComponent({ + mixins: [button], + props: { + show: { + type: Boolean, + observer(show) { + !show && this.stopLoading(); + }, + }, + title: String, + message: String, + theme: { + type: String, + value: 'default', + }, + useSlot: Boolean, + className: String, + customStyle: String, + asyncClose: Boolean, + messageAlign: String, + beforeClose: null, + overlayStyle: String, + useTitleSlot: Boolean, + showCancelButton: Boolean, + closeOnClickOverlay: Boolean, + confirmButtonOpenType: String, + width: null, + zIndex: { + type: Number, + value: 2000, + }, + confirmButtonText: { + type: String, + value: '确认', + }, + cancelButtonText: { + type: String, + value: '取消', + }, + confirmButtonColor: { + type: String, + value: RED, + }, + cancelButtonColor: { + type: String, + value: GRAY, + }, + showConfirmButton: { + type: Boolean, + value: true, + }, + overlay: { + type: Boolean, + value: true, + }, + transition: { + type: String, + value: 'scale', + }, + }, + data: { + loading: { + confirm: false, + cancel: false, + }, + callback: (() => { }), + }, + methods: { + onConfirm() { + this.handleAction('confirm'); + }, + onCancel() { + this.handleAction('cancel'); + }, + onClickOverlay() { + this.close('overlay'); + }, + close(action) { + this.setData({ show: false }); + wx.nextTick(() => { + this.$emit('close', action); + const { callback } = this.data; + if (callback) { + callback(action, this); + } + }); + }, + stopLoading() { + this.setData({ + loading: { + confirm: false, + cancel: false, + }, + }); + }, + handleAction(action) { + this.$emit(action, { dialog: this }); + const { asyncClose, beforeClose } = this.data; + if (!asyncClose && !beforeClose) { + this.close(action); + return; + } + this.setData({ + [`loading.${action}`]: true, + }); + if (beforeClose) { + toPromise(beforeClose(action)).then((value) => { + if (value) { + this.close(action); + } + else { + this.stopLoading(); + } + }); + } + }, + }, +}); diff --git a/wxcomponents/vant/dist/dialog/index.json b/wxcomponents/vant/dist/dialog/index.json new file mode 100644 index 0000000..43417fc --- /dev/null +++ b/wxcomponents/vant/dist/dialog/index.json @@ -0,0 +1,9 @@ +{ + "component": true, + "usingComponents": { + "van-popup": "../popup/index", + "van-button": "../button/index", + "van-goods-action": "../goods-action/index", + "van-goods-action-button": "../goods-action-button/index" + } +} diff --git a/wxcomponents/vant/dist/dialog/index.vue b/wxcomponents/vant/dist/dialog/index.vue new file mode 100644 index 0000000..7ad7860 --- /dev/null +++ b/wxcomponents/vant/dist/dialog/index.vue @@ -0,0 +1,167 @@ + + + + \ No newline at end of file diff --git a/wxcomponents/vant/dist/dialog/index.wxml b/wxcomponents/vant/dist/dialog/index.wxml new file mode 100644 index 0000000..e1ac81e --- /dev/null +++ b/wxcomponents/vant/dist/dialog/index.wxml @@ -0,0 +1,113 @@ + + + + + + {{ title }} + + + + + {{ message }} + + + + + {{ cancelButtonText }} + + + {{ confirmButtonText }} + + + + + + {{ cancelButtonText }} + + + {{ confirmButtonText }} + + + diff --git a/wxcomponents/vant/dist/dialog/index.wxss b/wxcomponents/vant/dist/dialog/index.wxss new file mode 100644 index 0000000..507a789 --- /dev/null +++ b/wxcomponents/vant/dist/dialog/index.wxss @@ -0,0 +1 @@ +@import '../common/index.wxss';.van-dialog{background-color:var(--dialog-background-color,#fff);border-radius:var(--dialog-border-radius,16px);font-size:var(--dialog-font-size,16px);overflow:hidden;top:45%!important;width:var(--dialog-width,320px)}@media (max-width:321px){.van-dialog{width:var(--dialog-small-screen-width,90%)}}.van-dialog__header{font-weight:var(--dialog-header-font-weight,500);line-height:var(--dialog-header-line-height,24px);padding-top:var(--dialog-header-padding-top,24px);text-align:center}.van-dialog__header--isolated{padding:var(--dialog-header-isolated-padding,24px 0)}.van-dialog__message{-webkit-overflow-scrolling:touch;font-size:var(--dialog-message-font-size,14px);line-height:var(--dialog-message-line-height,20px);max-height:var(--dialog-message-max-height,60vh);overflow-y:auto;padding:var(--dialog-message-padding,24px);text-align:center}.van-dialog__message-text{word-wrap:break-word}.van-dialog__message--hasTitle{color:var(--dialog-has-title-message-text-color,#646566);padding-top:var(--dialog-has-title-message-padding-top,8px)}.van-dialog__message--round-button{color:#323233;padding-bottom:16px}.van-dialog__message--left{text-align:left}.van-dialog__message--right{text-align:right}.van-dialog__message--justify{text-align:justify}.van-dialog__footer{display:flex}.van-dialog__footer--round-button{padding:8px 24px 16px!important;position:relative!important}.van-dialog__button{flex:1}.van-dialog__cancel,.van-dialog__confirm{border:0!important}.van-dialog-bounce-enter{opacity:0;transform:translate3d(-50%,-50%,0) scale(.7)}.van-dialog-bounce-leave-active{opacity:0;transform:translate3d(-50%,-50%,0) scale(.9)} \ No newline at end of file diff --git a/wxcomponents/vant/dist/divider/index.d.ts b/wxcomponents/vant/dist/divider/index.d.ts new file mode 100644 index 0000000..cb0ff5c --- /dev/null +++ b/wxcomponents/vant/dist/divider/index.d.ts @@ -0,0 +1 @@ +export {}; diff --git a/wxcomponents/vant/dist/divider/index.js b/wxcomponents/vant/dist/divider/index.js new file mode 100644 index 0000000..9596edd --- /dev/null +++ b/wxcomponents/vant/dist/divider/index.js @@ -0,0 +1,12 @@ +import { VantComponent } from '../common/component'; +VantComponent({ + props: { + dashed: Boolean, + hairline: Boolean, + contentPosition: String, + fontSize: String, + borderColor: String, + textColor: String, + customStyle: String, + }, +}); diff --git a/wxcomponents/vant/dist/divider/index.json b/wxcomponents/vant/dist/divider/index.json new file mode 100644 index 0000000..a89ef4d --- /dev/null +++ b/wxcomponents/vant/dist/divider/index.json @@ -0,0 +1,4 @@ +{ + "component": true, + "usingComponents": {} +} diff --git a/wxcomponents/vant/dist/divider/index.vue b/wxcomponents/vant/dist/divider/index.vue new file mode 100644 index 0000000..c173fdb --- /dev/null +++ b/wxcomponents/vant/dist/divider/index.vue @@ -0,0 +1,28 @@ + + + + \ No newline at end of file diff --git a/wxcomponents/vant/dist/divider/index.wxml b/wxcomponents/vant/dist/divider/index.wxml new file mode 100644 index 0000000..f6a5a45 --- /dev/null +++ b/wxcomponents/vant/dist/divider/index.wxml @@ -0,0 +1,9 @@ + + + + + + diff --git a/wxcomponents/vant/dist/divider/index.wxs b/wxcomponents/vant/dist/divider/index.wxs new file mode 100644 index 0000000..215b14f --- /dev/null +++ b/wxcomponents/vant/dist/divider/index.wxs @@ -0,0 +1,18 @@ +/* eslint-disable */ +var style = require('../wxs/style.wxs'); +var addUnit = require('../wxs/add-unit.wxs'); + +function rootStyle(data) { + return style([ + { + 'border-color': data.borderColor, + color: data.textColor, + 'font-size': addUnit(data.fontSize), + }, + data.customStyle, + ]); +} + +module.exports = { + rootStyle: rootStyle, +}; diff --git a/wxcomponents/vant/dist/divider/index.wxss b/wxcomponents/vant/dist/divider/index.wxss new file mode 100644 index 0000000..e91dc44 --- /dev/null +++ b/wxcomponents/vant/dist/divider/index.wxss @@ -0,0 +1 @@ +@import '../common/index.wxss';.van-divider{align-items:center;border:0 solid var(--divider-border-color,#ebedf0);color:var(--divider-text-color,#969799);display:flex;font-size:var(--divider-font-size,14px);line-height:var(--divider-line-height,24px);margin:var(--divider-margin,16px 0)}.van-divider:after,.van-divider:before{border-color:inherit;border-style:inherit;border-width:1px 0 0;box-sizing:border-box;display:block;flex:1;height:1px}.van-divider:before{content:""}.van-divider--hairline:after,.van-divider--hairline:before{transform:scaleY(.5)}.van-divider--dashed{border-style:dashed}.van-divider--center:before,.van-divider--left:before,.van-divider--right:before{margin-right:var(--divider-content-padding,16px)}.van-divider--center:after,.van-divider--left:after,.van-divider--right:after{content:"";margin-left:var(--divider-content-padding,16px)}.van-divider--left:before{max-width:var(--divider-content-left-width,10%)}.van-divider--right:after{max-width:var(--divider-content-right-width,10%)} \ No newline at end of file diff --git a/wxcomponents/vant/dist/dropdown-item/index.d.ts b/wxcomponents/vant/dist/dropdown-item/index.d.ts new file mode 100644 index 0000000..cb0ff5c --- /dev/null +++ b/wxcomponents/vant/dist/dropdown-item/index.d.ts @@ -0,0 +1 @@ +export {}; diff --git a/wxcomponents/vant/dist/dropdown-item/index.js b/wxcomponents/vant/dist/dropdown-item/index.js new file mode 100644 index 0000000..fd61a47 --- /dev/null +++ b/wxcomponents/vant/dist/dropdown-item/index.js @@ -0,0 +1,130 @@ +import { useParent } from '../common/relation'; +import { VantComponent } from '../common/component'; +VantComponent({ + classes: ['item-title-class'], + field: true, + relation: useParent('dropdown-menu', function () { + this.updateDataFromParent(); + }), + props: { + value: { + type: null, + observer: 'rerender', + }, + title: { + type: String, + observer: 'rerender', + }, + disabled: Boolean, + titleClass: { + type: String, + observer: 'rerender', + }, + options: { + type: Array, + value: [], + observer: 'rerender', + }, + popupStyle: String, + useBeforeToggle: { + type: Boolean, + value: false, + }, + rootPortal: { + type: Boolean, + value: false, + }, + }, + data: { + transition: true, + showPopup: false, + showWrapper: false, + displayTitle: '', + safeAreaTabBar: false, + }, + methods: { + rerender() { + wx.nextTick(() => { + var _a; + (_a = this.parent) === null || _a === void 0 ? void 0 : _a.updateItemListData(); + }); + }, + updateDataFromParent() { + if (this.parent) { + const { overlay, duration, activeColor, closeOnClickOverlay, direction, safeAreaTabBar, } = this.parent.data; + this.setData({ + overlay, + duration, + activeColor, + closeOnClickOverlay, + direction, + safeAreaTabBar, + }); + } + }, + onOpen() { + this.$emit('open'); + }, + onOpened() { + this.$emit('opened'); + }, + onClose() { + this.$emit('close'); + }, + onClosed() { + this.$emit('closed'); + this.setData({ showWrapper: false }); + }, + onOptionTap(event) { + const { option } = event.currentTarget.dataset; + const { value } = option; + const shouldEmitChange = this.data.value !== value; + this.setData({ showPopup: false, value }); + this.$emit('close'); + this.rerender(); + if (shouldEmitChange) { + this.$emit('change', value); + } + }, + toggle(show, options = {}) { + const { showPopup } = this.data; + if (typeof show !== 'boolean') { + show = !showPopup; + } + if (show === showPopup) { + return; + } + this.onBeforeToggle(show).then((status) => { + var _a; + if (!status) { + return; + } + this.setData({ + transition: !options.immediate, + showPopup: show, + }); + if (show) { + (_a = this.parent) === null || _a === void 0 ? void 0 : _a.getChildWrapperStyle().then((wrapperStyle) => { + this.setData({ wrapperStyle, showWrapper: true }); + this.rerender(); + }); + } + else { + this.rerender(); + } + }); + }, + onBeforeToggle(status) { + const { useBeforeToggle } = this.data; + if (!useBeforeToggle) { + return Promise.resolve(true); + } + return new Promise((resolve) => { + this.$emit('before-toggle', { + status, + callback: (value) => resolve(value), + }); + }); + }, + }, +}); diff --git a/wxcomponents/vant/dist/dropdown-item/index.json b/wxcomponents/vant/dist/dropdown-item/index.json new file mode 100644 index 0000000..88d5409 --- /dev/null +++ b/wxcomponents/vant/dist/dropdown-item/index.json @@ -0,0 +1,8 @@ +{ + "component": true, + "usingComponents": { + "van-popup": "../popup/index", + "van-cell": "../cell/index", + "van-icon": "../icon/index" + } +} diff --git a/wxcomponents/vant/dist/dropdown-item/index.vue b/wxcomponents/vant/dist/dropdown-item/index.vue new file mode 100644 index 0000000..4d62a69 --- /dev/null +++ b/wxcomponents/vant/dist/dropdown-item/index.vue @@ -0,0 +1,157 @@ + + + + \ No newline at end of file diff --git a/wxcomponents/vant/dist/dropdown-item/index.wxml b/wxcomponents/vant/dist/dropdown-item/index.wxml new file mode 100644 index 0000000..63904f4 --- /dev/null +++ b/wxcomponents/vant/dist/dropdown-item/index.wxml @@ -0,0 +1,50 @@ + + + + + + + {{ item.text }} + + + + + + + diff --git a/wxcomponents/vant/dist/dropdown-item/index.wxss b/wxcomponents/vant/dist/dropdown-item/index.wxss new file mode 100644 index 0000000..80505e9 --- /dev/null +++ b/wxcomponents/vant/dist/dropdown-item/index.wxss @@ -0,0 +1 @@ +@import '../common/index.wxss';.van-dropdown-item{left:0;overflow:hidden;position:fixed;right:0}.van-dropdown-item__option{text-align:left}.van-dropdown-item__option--active .van-dropdown-item__icon,.van-dropdown-item__option--active .van-dropdown-item__title{color:var(--dropdown-menu-option-active-color,#ee0a24)}.van-dropdown-item--up{top:0}.van-dropdown-item--down{bottom:0}.van-dropdown-item__icon{display:block;line-height:inherit} \ No newline at end of file diff --git a/wxcomponents/vant/dist/dropdown-item/shared.d.ts b/wxcomponents/vant/dist/dropdown-item/shared.d.ts new file mode 100644 index 0000000..774eb4c --- /dev/null +++ b/wxcomponents/vant/dist/dropdown-item/shared.d.ts @@ -0,0 +1,5 @@ +export interface Option { + text: string; + value: string | number; + icon: string; +} diff --git a/wxcomponents/vant/dist/dropdown-item/shared.js b/wxcomponents/vant/dist/dropdown-item/shared.js new file mode 100644 index 0000000..cb0ff5c --- /dev/null +++ b/wxcomponents/vant/dist/dropdown-item/shared.js @@ -0,0 +1 @@ +export {}; diff --git a/wxcomponents/vant/dist/dropdown-menu/index.d.ts b/wxcomponents/vant/dist/dropdown-menu/index.d.ts new file mode 100644 index 0000000..cb0ff5c --- /dev/null +++ b/wxcomponents/vant/dist/dropdown-menu/index.d.ts @@ -0,0 +1 @@ +export {}; diff --git a/wxcomponents/vant/dist/dropdown-menu/index.js b/wxcomponents/vant/dist/dropdown-menu/index.js new file mode 100644 index 0000000..9858ab3 --- /dev/null +++ b/wxcomponents/vant/dist/dropdown-menu/index.js @@ -0,0 +1,117 @@ +import { VantComponent } from '../common/component'; +import { useChildren } from '../common/relation'; +import { addUnit, getRect, getSystemInfoSync } from '../common/utils'; +let ARRAY = []; +VantComponent({ + field: true, + classes: ['title-class'], + relation: useChildren('dropdown-item', function () { + this.updateItemListData(); + }), + props: { + activeColor: { + type: String, + observer: 'updateChildrenData', + }, + overlay: { + type: Boolean, + value: true, + observer: 'updateChildrenData', + }, + zIndex: { + type: Number, + value: 10, + }, + duration: { + type: Number, + value: 200, + observer: 'updateChildrenData', + }, + direction: { + type: String, + value: 'down', + observer: 'updateChildrenData', + }, + safeAreaTabBar: { + type: Boolean, + value: false, + }, + closeOnClickOverlay: { + type: Boolean, + value: true, + observer: 'updateChildrenData', + }, + closeOnClickOutside: { + type: Boolean, + value: true, + }, + }, + data: { + itemListData: [], + }, + beforeCreate() { + const { windowHeight } = getSystemInfoSync(); + this.windowHeight = windowHeight; + ARRAY.push(this); + }, + destroyed() { + ARRAY = ARRAY.filter((item) => item !== this); + }, + methods: { + updateItemListData() { + this.setData({ + itemListData: this.children.map((child) => child.data), + }); + }, + updateChildrenData() { + this.children.forEach((child) => { + child.updateDataFromParent(); + }); + }, + toggleItem(active) { + this.children.forEach((item, index) => { + const { showPopup } = item.data; + if (index === active) { + item.toggle(); + } + else if (showPopup) { + item.toggle(false, { immediate: true }); + } + }); + }, + close() { + this.children.forEach((child) => { + child.toggle(false, { immediate: true }); + }); + }, + getChildWrapperStyle() { + const { zIndex, direction } = this.data; + return getRect(this, '.van-dropdown-menu').then((rect) => { + const { top = 0, bottom = 0 } = rect; + const offset = direction === 'down' ? bottom : this.windowHeight - top; + let wrapperStyle = `z-index: ${zIndex};`; + if (direction === 'down') { + wrapperStyle += `top: ${addUnit(offset)};`; + } + else { + wrapperStyle += `bottom: ${addUnit(offset)};`; + } + return wrapperStyle; + }); + }, + onTitleTap(event) { + const { index } = event.currentTarget.dataset; + const child = this.children[index]; + if (!child.data.disabled) { + ARRAY.forEach((menuItem) => { + if (menuItem && + menuItem.data.closeOnClickOutside && + menuItem !== this) { + menuItem.close(); + } + }); + this.toggleItem(index); + } + }, + }, +}); diff --git a/wxcomponents/vant/dist/dropdown-menu/index.json b/wxcomponents/vant/dist/dropdown-menu/index.json new file mode 100644 index 0000000..467ce29 --- /dev/null +++ b/wxcomponents/vant/dist/dropdown-menu/index.json @@ -0,0 +1,3 @@ +{ + "component": true +} diff --git a/wxcomponents/vant/dist/dropdown-menu/index.vue b/wxcomponents/vant/dist/dropdown-menu/index.vue new file mode 100644 index 0000000..fdbeac2 --- /dev/null +++ b/wxcomponents/vant/dist/dropdown-menu/index.vue @@ -0,0 +1,139 @@ + + + + \ No newline at end of file diff --git a/wxcomponents/vant/dist/dropdown-menu/index.wxml b/wxcomponents/vant/dist/dropdown-menu/index.wxml new file mode 100644 index 0000000..ec165a9 --- /dev/null +++ b/wxcomponents/vant/dist/dropdown-menu/index.wxml @@ -0,0 +1,23 @@ + + + + + + + + {{ computed.displayTitle(item) }} + + + + + + diff --git a/wxcomponents/vant/dist/dropdown-menu/index.wxs b/wxcomponents/vant/dist/dropdown-menu/index.wxs new file mode 100644 index 0000000..6538854 --- /dev/null +++ b/wxcomponents/vant/dist/dropdown-menu/index.wxs @@ -0,0 +1,16 @@ +/* eslint-disable */ +function displayTitle(item) { + if (item.title) { + return item.title; + } + + var match = item.options.filter(function(option) { + return option.value === item.value; + }); + var displayTitle = match.length ? match[0].text : ''; + return displayTitle; +} + +module.exports = { + displayTitle: displayTitle +}; diff --git a/wxcomponents/vant/dist/dropdown-menu/index.wxss b/wxcomponents/vant/dist/dropdown-menu/index.wxss new file mode 100644 index 0000000..dba000e --- /dev/null +++ b/wxcomponents/vant/dist/dropdown-menu/index.wxss @@ -0,0 +1 @@ +@import '../common/index.wxss';.van-dropdown-menu{background-color:var(--dropdown-menu-background-color,#fff);box-shadow:var(--dropdown-menu-box-shadow,0 2px 12px hsla(210,1%,40%,.12));display:flex;height:var(--dropdown-menu-height,50px);-webkit-user-select:none;user-select:none}.van-dropdown-menu__item{align-items:center;display:flex;flex:1;justify-content:center;min-width:0}.van-dropdown-menu__item:active{opacity:.7}.van-dropdown-menu__item--disabled:active{opacity:1}.van-dropdown-menu__item--disabled .van-dropdown-menu__title{color:var(--dropdown-menu-title-disabled-text-color,#969799)}.van-dropdown-menu__title{box-sizing:border-box;color:var(--dropdown-menu-title-text-color,#323233);font-size:var(--dropdown-menu-title-font-size,15px);line-height:var(--dropdown-menu-title-line-height,18px);max-width:100%;padding:var(--dropdown-menu-title-padding,0 24px 0 8px);position:relative}.van-dropdown-menu__title:after{border-color:transparent transparent currentcolor currentcolor;border-style:solid;border-width:3px;content:"";margin-top:-5px;opacity:.8;position:absolute;right:11px;top:50%;transform:rotate(-45deg)}.van-dropdown-menu__title--active{color:var(--dropdown-menu-title-active-text-color,#ee0a24)}.van-dropdown-menu__title--down:after{margin-top:-1px;transform:rotate(135deg)} \ No newline at end of file diff --git a/wxcomponents/vant/dist/empty/index.d.ts b/wxcomponents/vant/dist/empty/index.d.ts new file mode 100644 index 0000000..cb0ff5c --- /dev/null +++ b/wxcomponents/vant/dist/empty/index.d.ts @@ -0,0 +1 @@ +export {}; diff --git a/wxcomponents/vant/dist/empty/index.js b/wxcomponents/vant/dist/empty/index.js new file mode 100644 index 0000000..842e1bb --- /dev/null +++ b/wxcomponents/vant/dist/empty/index.js @@ -0,0 +1,10 @@ +import { VantComponent } from '../common/component'; +VantComponent({ + props: { + description: String, + image: { + type: String, + value: 'default', + }, + }, +}); diff --git a/wxcomponents/vant/dist/empty/index.json b/wxcomponents/vant/dist/empty/index.json new file mode 100644 index 0000000..a89ef4d --- /dev/null +++ b/wxcomponents/vant/dist/empty/index.json @@ -0,0 +1,4 @@ +{ + "component": true, + "usingComponents": {} +} diff --git a/wxcomponents/vant/dist/empty/index.vue b/wxcomponents/vant/dist/empty/index.vue new file mode 100644 index 0000000..de2e513 --- /dev/null +++ b/wxcomponents/vant/dist/empty/index.vue @@ -0,0 +1,42 @@ + + + + \ No newline at end of file diff --git a/wxcomponents/vant/dist/empty/index.wxml b/wxcomponents/vant/dist/empty/index.wxml new file mode 100644 index 0000000..9c7b719 --- /dev/null +++ b/wxcomponents/vant/dist/empty/index.wxml @@ -0,0 +1,22 @@ + + + + + + + + + + + + + + + + {{ description }} + + + + + + diff --git a/wxcomponents/vant/dist/empty/index.wxs b/wxcomponents/vant/dist/empty/index.wxs new file mode 100644 index 0000000..cf92ece --- /dev/null +++ b/wxcomponents/vant/dist/empty/index.wxs @@ -0,0 +1,15 @@ +/* eslint-disable */ +var PRESETS = ['error', 'search', 'default', 'network']; + +function imageUrl(image) { + if (PRESETS.indexOf(image) !== -1) { + return 'https://img.yzcdn.cn/vant/empty-image-' + image + '.png'; + } + + return image; +} + +module.exports = { + imageUrl: imageUrl, +}; + diff --git a/wxcomponents/vant/dist/empty/index.wxss b/wxcomponents/vant/dist/empty/index.wxss new file mode 100644 index 0000000..0fb74fe --- /dev/null +++ b/wxcomponents/vant/dist/empty/index.wxss @@ -0,0 +1 @@ +@import '../common/index.wxss';.van-empty{align-items:center;box-sizing:border-box;display:flex;flex-direction:column;justify-content:center;padding:32px 0}.van-empty__image{height:160px;width:160px}.van-empty__image:empty{display:none}.van-empty__image__img{height:100%;width:100%}.van-empty__image:not(:empty)+.van-empty__image{display:none}.van-empty__description{color:#969799;font-size:14px;line-height:20px;margin-top:16px;padding:0 60px}.van-empty__description:empty,.van-empty__description:not(:empty)+.van-empty__description{display:none}.van-empty__bottom{margin-top:24px} \ No newline at end of file diff --git a/wxcomponents/vant/dist/field/index.d.ts b/wxcomponents/vant/dist/field/index.d.ts new file mode 100644 index 0000000..cb0ff5c --- /dev/null +++ b/wxcomponents/vant/dist/field/index.d.ts @@ -0,0 +1 @@ +export {}; diff --git a/wxcomponents/vant/dist/field/index.js b/wxcomponents/vant/dist/field/index.js new file mode 100644 index 0000000..7d98207 --- /dev/null +++ b/wxcomponents/vant/dist/field/index.js @@ -0,0 +1,112 @@ +import { nextTick } from '../common/utils'; +import { VantComponent } from '../common/component'; +import { commonProps, inputProps, textareaProps } from './props'; +VantComponent({ + field: true, + classes: ['input-class', 'right-icon-class', 'label-class'], + props: Object.assign(Object.assign(Object.assign(Object.assign({}, commonProps), inputProps), textareaProps), { size: String, icon: String, label: String, error: Boolean, center: Boolean, isLink: Boolean, leftIcon: String, rightIcon: String, autosize: null, required: Boolean, iconClass: String, clickable: Boolean, inputAlign: String, customStyle: String, errorMessage: String, arrowDirection: String, showWordLimit: Boolean, errorMessageAlign: String, readonly: { + type: Boolean, + observer: 'setShowClear', + }, clearable: { + type: Boolean, + observer: 'setShowClear', + }, clearTrigger: { + type: String, + value: 'focus', + }, border: { + type: Boolean, + value: true, + }, titleWidth: { + type: String, + value: '6.2em', + }, clearIcon: { + type: String, + value: 'clear', + }, extraEventParams: { + type: Boolean, + value: false, + } }), + data: { + focused: false, + innerValue: '', + showClear: false, + }, + created() { + this.value = this.data.value; + this.setData({ innerValue: this.value }); + }, + methods: { + onInput(event) { + const { value = '' } = event.detail || {}; + this.value = value; + this.setShowClear(); + this.emitChange(event.detail); + }, + onFocus(event) { + this.focused = true; + this.setShowClear(); + this.$emit('focus', event.detail); + }, + onBlur(event) { + this.focused = false; + this.setShowClear(); + this.$emit('blur', event.detail); + }, + onClickIcon() { + this.$emit('click-icon'); + }, + onClickInput(event) { + this.$emit('click-input', event.detail); + }, + onClear() { + this.setData({ innerValue: '' }); + this.value = ''; + this.setShowClear(); + nextTick(() => { + this.emitChange({ value: '' }); + this.$emit('clear', ''); + }); + }, + onConfirm(event) { + const { value = '' } = event.detail || {}; + this.value = value; + this.setShowClear(); + this.$emit('confirm', value); + }, + setValue(value) { + this.value = value; + this.setShowClear(); + if (value === '') { + this.setData({ innerValue: '' }); + } + this.emitChange({ value }); + }, + onLineChange(event) { + this.$emit('linechange', event.detail); + }, + onKeyboardHeightChange(event) { + this.$emit('keyboardheightchange', event.detail); + }, + emitChange(detail) { + const { extraEventParams } = this.data; + this.setData({ value: detail.value }); + nextTick(() => { + const data = extraEventParams ? detail : detail.value; + this.$emit('input', data); + this.$emit('change', data); + }); + }, + setShowClear() { + const { clearable, readonly, clearTrigger } = this.data; + const { focused, value } = this; + let showClear = false; + if (clearable && !readonly) { + const hasValue = !!value; + const trigger = clearTrigger === 'always' || (clearTrigger === 'focus' && focused); + showClear = hasValue && trigger; + } + this.setData({ showClear }); + }, + noop() { }, + }, +}); diff --git a/wxcomponents/vant/dist/field/index.json b/wxcomponents/vant/dist/field/index.json new file mode 100644 index 0000000..5906c50 --- /dev/null +++ b/wxcomponents/vant/dist/field/index.json @@ -0,0 +1,7 @@ +{ + "component": true, + "usingComponents": { + "van-cell": "../cell/index", + "van-icon": "../icon/index" + } +} diff --git a/wxcomponents/vant/dist/field/index.vue b/wxcomponents/vant/dist/field/index.vue new file mode 100644 index 0000000..0ba592d --- /dev/null +++ b/wxcomponents/vant/dist/field/index.vue @@ -0,0 +1,156 @@ + + + + \ No newline at end of file diff --git a/wxcomponents/vant/dist/field/index.wxml b/wxcomponents/vant/dist/field/index.wxml new file mode 100644 index 0000000..ec2e0ea --- /dev/null +++ b/wxcomponents/vant/dist/field/index.wxml @@ -0,0 +1,56 @@ + + + + + + + {{ label }} + + + + + + + + + + + + + + + + + + + + + {{ value.length >= maxlength ? maxlength : value.length }}/{{ maxlength }} + + + {{ errorMessage }} + + diff --git a/wxcomponents/vant/dist/field/index.wxs b/wxcomponents/vant/dist/field/index.wxs new file mode 100644 index 0000000..78575b9 --- /dev/null +++ b/wxcomponents/vant/dist/field/index.wxs @@ -0,0 +1,18 @@ +/* eslint-disable */ +var style = require('../wxs/style.wxs'); +var addUnit = require('../wxs/add-unit.wxs'); + +function inputStyle(autosize) { + if (autosize && autosize.constructor === 'Object') { + return style({ + 'min-height': addUnit(autosize.minHeight), + 'max-height': addUnit(autosize.maxHeight), + }); + } + + return ''; +} + +module.exports = { + inputStyle: inputStyle, +}; diff --git a/wxcomponents/vant/dist/field/index.wxss b/wxcomponents/vant/dist/field/index.wxss new file mode 100644 index 0000000..7571fe6 --- /dev/null +++ b/wxcomponents/vant/dist/field/index.wxss @@ -0,0 +1 @@ +@import '../common/index.wxss';.van-field{--cell-icon-size:var(--field-icon-size,16px)}.van-field__label{color:var(--field-label-color,#646566)}.van-field__label--disabled{color:var(--field-disabled-text-color,#c8c9cc)}.van-field__body{align-items:center;display:flex}.van-field__body--textarea{box-sizing:border-box;line-height:1.2em;min-height:var(--cell-line-height,24px);padding:3.6px 0}.van-field__control:empty+.van-field__control{display:block}.van-field__control{background-color:initial;border:0;box-sizing:border-box;color:var(--field-input-text-color,#323233);display:none;height:var(--cell-line-height,24px);line-height:inherit;margin:0;min-height:var(--cell-line-height,24px);padding:0;position:relative;resize:none;text-align:left;width:100%}.van-field__control:empty{display:none}.van-field__control--textarea{height:var(--field-text-area-min-height,18px);min-height:var(--field-text-area-min-height,18px)}.van-field__control--error{color:var(--field-input-error-text-color,#ee0a24)}.van-field__control--disabled{background-color:initial;color:var(--field-input-disabled-text-color,#c8c9cc);opacity:1}.van-field__control--center{text-align:center}.van-field__control--right{text-align:right}.van-field__control--custom{align-items:center;display:flex;min-height:var(--cell-line-height,24px)}.van-field__placeholder{color:var(--field-placeholder-text-color,#c8c9cc);left:0;pointer-events:none;position:absolute;right:0;top:0}.van-field__placeholder--error{color:var(--field-error-message-color,#ee0a24)}.van-field__icon-root{align-items:center;display:flex;min-height:var(--cell-line-height,24px)}.van-field__clear-root,.van-field__icon-container{line-height:inherit;margin-right:calc(var(--padding-xs, 8px)*-1);padding:0 var(--padding-xs,8px);vertical-align:middle}.van-field__button,.van-field__clear-root,.van-field__icon-container{flex-shrink:0}.van-field__clear-root{color:var(--field-clear-icon-color,#c8c9cc);font-size:var(--field-clear-icon-size,16px)}.van-field__icon-container{color:var(--field-icon-container-color,#969799);font-size:var(--field-icon-size,16px)}.van-field__icon-container:empty{display:none}.van-field__button{padding-left:var(--padding-xs,8px)}.van-field__button:empty{display:none}.van-field__error-message{color:var(--field-error-message-color,#ee0a24);font-size:var(--field-error-message-text-font-size,12px);text-align:left}.van-field__error-message--center{text-align:center}.van-field__error-message--right{text-align:right}.van-field__word-limit{color:var(--field-word-limit-color,#646566);font-size:var(--field-word-limit-font-size,12px);line-height:var(--field-word-limit-line-height,16px);margin-top:var(--padding-base,4px);text-align:right}.van-field__word-num{display:inline}.van-field__word-num--full{color:var(--field-word-num-full-color,#ee0a24)} \ No newline at end of file diff --git a/wxcomponents/vant/dist/field/input.vue b/wxcomponents/vant/dist/field/input.vue new file mode 100644 index 0000000..ca849c1 --- /dev/null +++ b/wxcomponents/vant/dist/field/input.vue @@ -0,0 +1,15 @@ + + + + \ No newline at end of file diff --git a/wxcomponents/vant/dist/field/input.wxml b/wxcomponents/vant/dist/field/input.wxml new file mode 100644 index 0000000..efe9a08 --- /dev/null +++ b/wxcomponents/vant/dist/field/input.wxml @@ -0,0 +1,28 @@ + diff --git a/wxcomponents/vant/dist/field/props.d.ts b/wxcomponents/vant/dist/field/props.d.ts new file mode 100644 index 0000000..5cd130a --- /dev/null +++ b/wxcomponents/vant/dist/field/props.d.ts @@ -0,0 +1,4 @@ +/// +export declare const commonProps: WechatMiniprogram.Component.PropertyOption; +export declare const inputProps: WechatMiniprogram.Component.PropertyOption; +export declare const textareaProps: WechatMiniprogram.Component.PropertyOption; diff --git a/wxcomponents/vant/dist/field/props.js b/wxcomponents/vant/dist/field/props.js new file mode 100644 index 0000000..ae405b3 --- /dev/null +++ b/wxcomponents/vant/dist/field/props.js @@ -0,0 +1,64 @@ +export const commonProps = { + value: { + type: String, + observer(value) { + if (value !== this.value) { + this.setData({ innerValue: value }); + this.value = value; + } + }, + }, + placeholder: String, + placeholderStyle: String, + placeholderClass: String, + disabled: Boolean, + maxlength: { + type: Number, + value: -1, + }, + cursorSpacing: { + type: Number, + value: 50, + }, + autoFocus: Boolean, + focus: Boolean, + cursor: { + type: Number, + value: -1, + }, + selectionStart: { + type: Number, + value: -1, + }, + selectionEnd: { + type: Number, + value: -1, + }, + adjustPosition: { + type: Boolean, + value: true, + }, + holdKeyboard: Boolean, +}; +export const inputProps = { + type: { + type: String, + value: 'text', + }, + password: Boolean, + confirmType: String, + confirmHold: Boolean, + alwaysEmbed: Boolean, +}; +export const textareaProps = { + autoHeight: Boolean, + fixed: Boolean, + showConfirmBar: { + type: Boolean, + value: true, + }, + disableDefaultPadding: { + type: Boolean, + value: true, + }, +}; diff --git a/wxcomponents/vant/dist/field/textarea.vue b/wxcomponents/vant/dist/field/textarea.vue new file mode 100644 index 0000000..65e348b --- /dev/null +++ b/wxcomponents/vant/dist/field/textarea.vue @@ -0,0 +1,15 @@ + + + + \ No newline at end of file diff --git a/wxcomponents/vant/dist/field/textarea.wxml b/wxcomponents/vant/dist/field/textarea.wxml new file mode 100644 index 0000000..5015a51 --- /dev/null +++ b/wxcomponents/vant/dist/field/textarea.wxml @@ -0,0 +1,29 @@ +