From 1230ba322ae7c972099b99a11599f946af57664b Mon Sep 17 00:00:00 2001 From: well <347471159@qq.com> Date: Fri, 27 Mar 2026 10:41:46 +0800 Subject: [PATCH] first commit --- .vscode/settings.json | 3 + app.js | 28 + app.json | 140 + app.wxss | 11 + assets/icons/1.png | Bin 0 -> 25337 bytes assets/icons/2.png | Bin 0 -> 25075 bytes assets/icons/3.png | Bin 0 -> 28703 bytes assets/icons/add-comment.png | Bin 0 -> 2988 bytes assets/icons/close.png | Bin 0 -> 62085 bytes assets/icons/courses.png | Bin 0 -> 4969 bytes assets/icons/default.png | Bin 0 -> 25788 bytes assets/icons/notpurchased.png | Bin 0 -> 2071 bytes assets/icons/pause.png | Bin 0 -> 1846 bytes assets/icons/play.png | Bin 0 -> 3784 bytes assets/icons/unlock.png | Bin 0 -> 2116 bytes assets/images/背景.png | Bin 0 -> 160273 bytes components/calendar/calendar.js | 149 + components/calendar/calendar.json | 4 + components/calendar/calendar.wxml | 38 + components/calendar/calendar.wxss | 157 + components/calendar/dayjs.js | 1 + components/pause-mask/index.js | 19 + components/pause-mask/index.json | 7 + components/pause-mask/index.wxml | 7 + components/pause-mask/index.wxss | 65 + components/question-display/index.js | 93 + components/question-display/index.json | 5 + components/question-display/index.wxml | 79 + components/question-display/index.wxss | 155 + components/resize-box/index.js | 105 + components/resize-box/index.json | 4 + components/resize-box/index.wxml | 13 + components/resize-box/index.wxss | 48 + config/api.js | 6 + config/api_config.js | 62 + config/camp_api.js | 544 ++++ config/question_api.js | 144 + config/util.js | 59 + img/cgz_03.png | Bin 0 -> 1692 bytes img/cgz_05.png | Bin 0 -> 963 bytes img/cgz_07.png | Bin 0 -> 1764 bytes img/cgz_09.png | Bin 0 -> 1030 bytes img/footerpic.png | Bin 0 -> 8020 bytes img/footerpic1.png | Bin 0 -> 8718 bytes img/footerpic2.png | Bin 0 -> 8425 bytes img/footerpic3.png | Bin 0 -> 9194 bytes img/minemainback.png | Bin 0 -> 214591 bytes img/pause.png | Bin 0 -> 11519 bytes img/play.png | Bin 0 -> 13615 bytes .../@vant/weapp/action-sheet/index.js | 76 + .../@vant/weapp/action-sheet/index.json | 8 + .../@vant/weapp/action-sheet/index.wxml | 69 + .../@vant/weapp/action-sheet/index.wxss | 1 + miniprogram_npm/@vant/weapp/area/index.js | 266 ++ miniprogram_npm/@vant/weapp/area/index.json | 6 + miniprogram_npm/@vant/weapp/area/index.wxml | 20 + miniprogram_npm/@vant/weapp/area/index.wxs | 8 + miniprogram_npm/@vant/weapp/area/index.wxss | 1 + miniprogram_npm/@vant/weapp/button/index.js | 71 + miniprogram_npm/@vant/weapp/button/index.json | 7 + miniprogram_npm/@vant/weapp/button/index.wxml | 53 + miniprogram_npm/@vant/weapp/button/index.wxs | 39 + miniprogram_npm/@vant/weapp/button/index.wxss | 1 + .../@vant/weapp/calendar/calendar.wxml | 68 + .../weapp/calendar/components/header/index.js | 46 + .../calendar/components/header/index.json | 3 + .../calendar/components/header/index.wxml | 16 + .../calendar/components/header/index.wxss | 1 + .../weapp/calendar/components/month/index.js | 173 ++ .../calendar/components/month/index.json | 3 + .../calendar/components/month/index.wxml | 39 + .../weapp/calendar/components/month/index.wxs | 71 + .../calendar/components/month/index.wxss | 1 + miniprogram_npm/@vant/weapp/calendar/index.js | 382 +++ .../@vant/weapp/calendar/index.json | 10 + .../@vant/weapp/calendar/index.wxml | 25 + .../@vant/weapp/calendar/index.wxs | 37 + .../@vant/weapp/calendar/index.wxss | 1 + miniprogram_npm/@vant/weapp/calendar/utils.js | 97 + .../@vant/weapp/calendar/utils.wxs | 25 + miniprogram_npm/@vant/weapp/card/index.js | 51 + miniprogram_npm/@vant/weapp/card/index.json | 6 + miniprogram_npm/@vant/weapp/card/index.wxml | 56 + miniprogram_npm/@vant/weapp/card/index.wxss | 1 + .../@vant/weapp/cell-group/index.js | 13 + .../@vant/weapp/cell-group/index.json | 3 + .../@vant/weapp/cell-group/index.wxml | 11 + .../@vant/weapp/cell-group/index.wxss | 1 + miniprogram_npm/@vant/weapp/cell/index.js | 40 + miniprogram_npm/@vant/weapp/cell/index.json | 6 + miniprogram_npm/@vant/weapp/cell/index.wxml | 47 + miniprogram_npm/@vant/weapp/cell/index.wxs | 17 + miniprogram_npm/@vant/weapp/cell/index.wxss | 1 + .../@vant/weapp/checkbox-group/index.js | 44 + .../@vant/weapp/checkbox-group/index.json | 3 + .../@vant/weapp/checkbox-group/index.wxml | 5 + .../@vant/weapp/checkbox-group/index.wxss | 1 + miniprogram_npm/@vant/weapp/checkbox/index.js | 84 + .../@vant/weapp/checkbox/index.json | 6 + .../@vant/weapp/checkbox/index.wxml | 31 + .../@vant/weapp/checkbox/index.wxs | 20 + .../@vant/weapp/checkbox/index.wxss | 1 + miniprogram_npm/@vant/weapp/circle/canvas.js | 47 + miniprogram_npm/@vant/weapp/circle/index.js | 217 ++ miniprogram_npm/@vant/weapp/circle/index.json | 3 + miniprogram_npm/@vant/weapp/circle/index.wxml | 9 + miniprogram_npm/@vant/weapp/circle/index.wxss | 1 + miniprogram_npm/@vant/weapp/col/index.js | 11 + miniprogram_npm/@vant/weapp/col/index.json | 3 + miniprogram_npm/@vant/weapp/col/index.wxml | 9 + miniprogram_npm/@vant/weapp/col/index.wxs | 18 + miniprogram_npm/@vant/weapp/col/index.wxss | 1 + .../@vant/weapp/collapse-item/animate.js | 77 + .../@vant/weapp/collapse-item/index.js | 68 + .../@vant/weapp/collapse-item/index.json | 6 + .../@vant/weapp/collapse-item/index.wxml | 44 + .../@vant/weapp/collapse-item/index.wxss | 1 + miniprogram_npm/@vant/weapp/collapse/index.js | 50 + .../@vant/weapp/collapse/index.json | 3 + .../@vant/weapp/collapse/index.wxml | 3 + .../@vant/weapp/collapse/index.wxss | 1 + miniprogram_npm/@vant/weapp/common/color.js | 10 + .../@vant/weapp/common/component.js | 48 + miniprogram_npm/@vant/weapp/common/index.wxss | 1 + .../@vant/weapp/common/relation.js | 79 + .../@vant/weapp/common/style/clearfix.wxss | 1 + .../@vant/weapp/common/style/ellipsis.wxss | 1 + .../@vant/weapp/common/style/hairline.wxss | 1 + .../weapp/common/style/mixins/clearfix.wxss | 0 .../weapp/common/style/mixins/ellipsis.wxss | 0 .../weapp/common/style/mixins/hairline.wxss | 0 .../@vant/weapp/common/style/theme.wxss | 0 .../@vant/weapp/common/style/var.wxss | 0 miniprogram_npm/@vant/weapp/common/utils.js | 120 + .../@vant/weapp/common/validator.js | 43 + miniprogram_npm/@vant/weapp/common/version.js | 58 + .../@vant/weapp/config-provider/index.js | 11 + .../@vant/weapp/config-provider/index.json | 3 + .../@vant/weapp/config-provider/index.wxml | 5 + .../@vant/weapp/config-provider/index.wxs | 29 + .../@vant/weapp/count-down/index.js | 103 + .../@vant/weapp/count-down/index.json | 3 + .../@vant/weapp/count-down/index.wxml | 4 + .../@vant/weapp/count-down/index.wxss | 1 + .../@vant/weapp/count-down/utils.js | 65 + .../@vant/weapp/datetime-picker/index.js | 375 +++ .../@vant/weapp/datetime-picker/index.json | 6 + .../@vant/weapp/datetime-picker/index.wxml | 16 + .../@vant/weapp/datetime-picker/index.wxss | 1 + .../@vant/weapp/definitions/index.js | 2 + miniprogram_npm/@vant/weapp/dialog/dialog.js | 104 + miniprogram_npm/@vant/weapp/dialog/index.js | 126 + miniprogram_npm/@vant/weapp/dialog/index.json | 9 + miniprogram_npm/@vant/weapp/dialog/index.wxml | 113 + miniprogram_npm/@vant/weapp/dialog/index.wxss | 1 + miniprogram_npm/@vant/weapp/divider/index.js | 14 + .../@vant/weapp/divider/index.json | 4 + .../@vant/weapp/divider/index.wxml | 9 + miniprogram_npm/@vant/weapp/divider/index.wxs | 18 + .../@vant/weapp/divider/index.wxss | 1 + .../@vant/weapp/dropdown-item/index.js | 117 + .../@vant/weapp/dropdown-item/index.json | 8 + .../@vant/weapp/dropdown-item/index.wxml | 48 + .../@vant/weapp/dropdown-item/index.wxss | 1 + .../@vant/weapp/dropdown-item/shared.js | 2 + .../@vant/weapp/dropdown-menu/index.js | 126 + .../@vant/weapp/dropdown-menu/index.json | 3 + .../@vant/weapp/dropdown-menu/index.wxml | 23 + .../@vant/weapp/dropdown-menu/index.wxs | 16 + .../@vant/weapp/dropdown-menu/index.wxss | 1 + miniprogram_npm/@vant/weapp/empty/index.js | 12 + miniprogram_npm/@vant/weapp/empty/index.json | 4 + miniprogram_npm/@vant/weapp/empty/index.wxml | 22 + miniprogram_npm/@vant/weapp/empty/index.wxs | 14 + miniprogram_npm/@vant/weapp/empty/index.wxss | 1 + miniprogram_npm/@vant/weapp/field/index.js | 151 + miniprogram_npm/@vant/weapp/field/index.json | 7 + miniprogram_npm/@vant/weapp/field/index.wxml | 56 + miniprogram_npm/@vant/weapp/field/index.wxs | 18 + miniprogram_npm/@vant/weapp/field/index.wxss | 1 + miniprogram_npm/@vant/weapp/field/input.wxml | 27 + miniprogram_npm/@vant/weapp/field/props.js | 66 + .../@vant/weapp/field/textarea.wxml | 29 + .../@vant/weapp/goods-action-button/index.js | 39 + .../weapp/goods-action-button/index.json | 6 + .../weapp/goods-action-button/index.wxml | 30 + .../weapp/goods-action-button/index.wxss | 1 + .../@vant/weapp/goods-action-icon/index.js | 23 + .../@vant/weapp/goods-action-icon/index.json | 7 + .../@vant/weapp/goods-action-icon/index.wxml | 35 + .../@vant/weapp/goods-action-icon/index.wxss | 1 + .../@vant/weapp/goods-action/index.js | 17 + .../@vant/weapp/goods-action/index.json | 3 + .../@vant/weapp/goods-action/index.wxml | 5 + .../@vant/weapp/goods-action/index.wxss | 1 + .../@vant/weapp/grid-item/index.js | 64 + .../@vant/weapp/grid-item/index.json | 6 + .../@vant/weapp/grid-item/index.wxml | 27 + .../@vant/weapp/grid-item/index.wxs | 32 + .../@vant/weapp/grid-item/index.wxss | 1 + miniprogram_npm/@vant/weapp/grid/index.js | 57 + miniprogram_npm/@vant/weapp/grid/index.json | 3 + miniprogram_npm/@vant/weapp/grid/index.wxml | 8 + miniprogram_npm/@vant/weapp/grid/index.wxs | 13 + miniprogram_npm/@vant/weapp/grid/index.wxss | 1 + miniprogram_npm/@vant/weapp/icon/index.js | 22 + miniprogram_npm/@vant/weapp/icon/index.json | 6 + miniprogram_npm/@vant/weapp/icon/index.wxml | 20 + miniprogram_npm/@vant/weapp/icon/index.wxs | 39 + miniprogram_npm/@vant/weapp/icon/index.wxss | 1 + miniprogram_npm/@vant/weapp/image/index.js | 62 + miniprogram_npm/@vant/weapp/image/index.json | 7 + miniprogram_npm/@vant/weapp/image/index.wxml | 34 + miniprogram_npm/@vant/weapp/image/index.wxs | 32 + miniprogram_npm/@vant/weapp/image/index.wxss | 1 + .../@vant/weapp/index-anchor/index.js | 28 + .../@vant/weapp/index-anchor/index.json | 3 + .../@vant/weapp/index-anchor/index.wxml | 14 + .../@vant/weapp/index-anchor/index.wxss | 1 + .../@vant/weapp/index-bar/index.js | 281 ++ .../@vant/weapp/index-bar/index.json | 3 + .../@vant/weapp/index-bar/index.wxml | 22 + .../@vant/weapp/index-bar/index.wxss | 1 + miniprogram_npm/@vant/weapp/info/index.js | 10 + miniprogram_npm/@vant/weapp/info/index.json | 3 + miniprogram_npm/@vant/weapp/info/index.wxml | 7 + miniprogram_npm/@vant/weapp/info/index.wxss | 1 + miniprogram_npm/@vant/weapp/loading/index.js | 18 + .../@vant/weapp/loading/index.json | 3 + .../@vant/weapp/loading/index.wxml | 19 + miniprogram_npm/@vant/weapp/loading/index.wxs | 22 + .../@vant/weapp/loading/index.wxss | 1 + miniprogram_npm/@vant/weapp/mixins/basic.js | 16 + miniprogram_npm/@vant/weapp/mixins/button.js | 44 + miniprogram_npm/@vant/weapp/mixins/link.js | 30 + .../@vant/weapp/mixins/page-scroll.js | 41 + miniprogram_npm/@vant/weapp/mixins/touch.js | 40 + .../@vant/weapp/mixins/transition.js | 155 + miniprogram_npm/@vant/weapp/nav-bar/index.js | 68 + .../@vant/weapp/nav-bar/index.json | 6 + .../@vant/weapp/nav-bar/index.wxml | 42 + miniprogram_npm/@vant/weapp/nav-bar/index.wxs | 13 + .../@vant/weapp/nav-bar/index.wxss | 1 + .../@vant/weapp/notice-bar/index.js | 131 + .../@vant/weapp/notice-bar/index.json | 6 + .../@vant/weapp/notice-bar/index.wxml | 39 + .../@vant/weapp/notice-bar/index.wxs | 15 + .../@vant/weapp/notice-bar/index.wxss | 1 + miniprogram_npm/@vant/weapp/notify/index.js | 70 + miniprogram_npm/@vant/weapp/notify/index.json | 6 + miniprogram_npm/@vant/weapp/notify/index.wxml | 21 + miniprogram_npm/@vant/weapp/notify/index.wxs | 22 + miniprogram_npm/@vant/weapp/notify/index.wxss | 1 + miniprogram_npm/@vant/weapp/notify/notify.js | 64 + miniprogram_npm/@vant/weapp/overlay/index.js | 28 + .../@vant/weapp/overlay/index.json | 6 + .../@vant/weapp/overlay/index.wxml | 21 + .../@vant/weapp/overlay/index.wxss | 1 + miniprogram_npm/@vant/weapp/panel/index.js | 11 + miniprogram_npm/@vant/weapp/panel/index.json | 6 + miniprogram_npm/@vant/weapp/panel/index.wxml | 19 + miniprogram_npm/@vant/weapp/panel/index.wxss | 1 + .../@vant/weapp/picker-column/index.js | 132 + .../@vant/weapp/picker-column/index.json | 3 + .../@vant/weapp/picker-column/index.wxml | 23 + .../@vant/weapp/picker-column/index.wxs | 36 + .../@vant/weapp/picker-column/index.wxss | 1 + miniprogram_npm/@vant/weapp/picker/index.js | 179 ++ miniprogram_npm/@vant/weapp/picker/index.json | 7 + miniprogram_npm/@vant/weapp/picker/index.wxml | 37 + miniprogram_npm/@vant/weapp/picker/index.wxs | 42 + miniprogram_npm/@vant/weapp/picker/index.wxss | 1 + miniprogram_npm/@vant/weapp/picker/shared.js | 24 + .../@vant/weapp/picker/toolbar.wxml | 23 + miniprogram_npm/@vant/weapp/popup/index.js | 89 + miniprogram_npm/@vant/weapp/popup/index.json | 7 + miniprogram_npm/@vant/weapp/popup/index.wxml | 25 + miniprogram_npm/@vant/weapp/popup/index.wxs | 18 + miniprogram_npm/@vant/weapp/popup/index.wxss | 1 + miniprogram_npm/@vant/weapp/progress/index.js | 56 + .../@vant/weapp/progress/index.json | 3 + .../@vant/weapp/progress/index.wxml | 20 + .../@vant/weapp/progress/index.wxs | 36 + .../@vant/weapp/progress/index.wxss | 1 + .../@vant/weapp/radio-group/index.js | 26 + .../@vant/weapp/radio-group/index.json | 3 + .../@vant/weapp/radio-group/index.wxml | 5 + .../@vant/weapp/radio-group/index.wxss | 1 + miniprogram_npm/@vant/weapp/radio/index.js | 75 + miniprogram_npm/@vant/weapp/radio/index.json | 6 + miniprogram_npm/@vant/weapp/radio/index.wxml | 30 + miniprogram_npm/@vant/weapp/radio/index.wxs | 33 + miniprogram_npm/@vant/weapp/radio/index.wxss | 1 + miniprogram_npm/@vant/weapp/rate/index.js | 102 + miniprogram_npm/@vant/weapp/rate/index.json | 6 + miniprogram_npm/@vant/weapp/rate/index.wxml | 35 + miniprogram_npm/@vant/weapp/rate/index.wxss | 1 + miniprogram_npm/@vant/weapp/row/index.js | 26 + miniprogram_npm/@vant/weapp/row/index.json | 3 + miniprogram_npm/@vant/weapp/row/index.wxml | 5 + miniprogram_npm/@vant/weapp/row/index.wxs | 18 + miniprogram_npm/@vant/weapp/row/index.wxss | 1 + miniprogram_npm/@vant/weapp/search/index.js | 84 + miniprogram_npm/@vant/weapp/search/index.json | 6 + miniprogram_npm/@vant/weapp/search/index.wxml | 51 + miniprogram_npm/@vant/weapp/search/index.wxss | 1 + .../@vant/weapp/share-sheet/index.js | 57 + .../@vant/weapp/share-sheet/index.json | 7 + .../@vant/weapp/share-sheet/index.wxml | 46 + .../@vant/weapp/share-sheet/index.wxs | 12 + .../@vant/weapp/share-sheet/index.wxss | 1 + .../@vant/weapp/share-sheet/options.js | 31 + .../@vant/weapp/share-sheet/options.json | 3 + .../@vant/weapp/share-sheet/options.wxml | 20 + .../@vant/weapp/share-sheet/options.wxs | 14 + .../@vant/weapp/share-sheet/options.wxss | 1 + .../@vant/weapp/sidebar-item/index.js | 32 + .../@vant/weapp/sidebar-item/index.json | 6 + .../@vant/weapp/sidebar-item/index.wxml | 18 + .../@vant/weapp/sidebar-item/index.wxss | 1 + miniprogram_npm/@vant/weapp/sidebar/index.js | 38 + .../@vant/weapp/sidebar/index.json | 3 + .../@vant/weapp/sidebar/index.wxml | 3 + .../@vant/weapp/sidebar/index.wxss | 1 + miniprogram_npm/@vant/weapp/skeleton/index.js | 48 + .../@vant/weapp/skeleton/index.json | 4 + .../@vant/weapp/skeleton/index.wxml | 29 + .../@vant/weapp/skeleton/index.wxss | 1 + miniprogram_npm/@vant/weapp/slider/index.js | 115 + miniprogram_npm/@vant/weapp/slider/index.json | 3 + miniprogram_npm/@vant/weapp/slider/index.wxml | 30 + miniprogram_npm/@vant/weapp/slider/index.wxs | 14 + miniprogram_npm/@vant/weapp/slider/index.wxss | 1 + miniprogram_npm/@vant/weapp/stepper/index.js | 218 ++ .../@vant/weapp/stepper/index.json | 3 + .../@vant/weapp/stepper/index.wxml | 42 + miniprogram_npm/@vant/weapp/stepper/index.wxs | 22 + .../@vant/weapp/stepper/index.wxss | 1 + miniprogram_npm/@vant/weapp/steps/index.js | 35 + miniprogram_npm/@vant/weapp/steps/index.json | 6 + miniprogram_npm/@vant/weapp/steps/index.wxml | 54 + miniprogram_npm/@vant/weapp/steps/index.wxss | 1 + miniprogram_npm/@vant/weapp/sticky/index.js | 124 + miniprogram_npm/@vant/weapp/sticky/index.json | 3 + miniprogram_npm/@vant/weapp/sticky/index.wxml | 8 + miniprogram_npm/@vant/weapp/sticky/index.wxs | 25 + miniprogram_npm/@vant/weapp/sticky/index.wxss | 1 + .../@vant/weapp/submit-bar/index.js | 61 + .../@vant/weapp/submit-bar/index.json | 7 + .../@vant/weapp/submit-bar/index.wxml | 44 + .../@vant/weapp/submit-bar/index.wxss | 1 + .../@vant/weapp/swipe-cell/index.js | 162 ++ .../@vant/weapp/swipe-cell/index.json | 3 + .../@vant/weapp/swipe-cell/index.wxml | 20 + .../@vant/weapp/swipe-cell/index.wxss | 1 + miniprogram_npm/@vant/weapp/switch/index.js | 42 + miniprogram_npm/@vant/weapp/switch/index.json | 6 + miniprogram_npm/@vant/weapp/switch/index.wxml | 16 + miniprogram_npm/@vant/weapp/switch/index.wxs | 26 + miniprogram_npm/@vant/weapp/switch/index.wxss | 1 + miniprogram_npm/@vant/weapp/tab/index.js | 58 + miniprogram_npm/@vant/weapp/tab/index.json | 3 + miniprogram_npm/@vant/weapp/tab/index.wxml | 8 + miniprogram_npm/@vant/weapp/tab/index.wxss | 1 + .../@vant/weapp/tabbar-item/index.js | 58 + .../@vant/weapp/tabbar-item/index.json | 7 + .../@vant/weapp/tabbar-item/index.wxml | 28 + .../@vant/weapp/tabbar-item/index.wxss | 1 + miniprogram_npm/@vant/weapp/tabbar/index.js | 70 + miniprogram_npm/@vant/weapp/tabbar/index.json | 3 + miniprogram_npm/@vant/weapp/tabbar/index.wxml | 10 + miniprogram_npm/@vant/weapp/tabbar/index.wxss | 1 + miniprogram_npm/@vant/weapp/tabs/index.js | 319 +++ miniprogram_npm/@vant/weapp/tabs/index.json | 7 + miniprogram_npm/@vant/weapp/tabs/index.wxml | 63 + miniprogram_npm/@vant/weapp/tabs/index.wxs | 82 + miniprogram_npm/@vant/weapp/tabs/index.wxss | 1 + miniprogram_npm/@vant/weapp/tag/index.js | 23 + miniprogram_npm/@vant/weapp/tag/index.json | 6 + miniprogram_npm/@vant/weapp/tag/index.wxml | 15 + miniprogram_npm/@vant/weapp/tag/index.wxs | 13 + miniprogram_npm/@vant/weapp/tag/index.wxss | 1 + miniprogram_npm/@vant/weapp/toast/index.js | 31 + miniprogram_npm/@vant/weapp/toast/index.json | 9 + miniprogram_npm/@vant/weapp/toast/index.wxml | 33 + miniprogram_npm/@vant/weapp/toast/index.wxss | 1 + miniprogram_npm/@vant/weapp/toast/toast.js | 92 + .../@vant/weapp/transition/index.js | 15 + .../@vant/weapp/transition/index.json | 3 + .../@vant/weapp/transition/index.wxml | 10 + .../@vant/weapp/transition/index.wxs | 17 + .../@vant/weapp/transition/index.wxss | 1 + .../@vant/weapp/tree-select/index.js | 73 + .../@vant/weapp/tree-select/index.json | 8 + .../@vant/weapp/tree-select/index.wxml | 41 + .../@vant/weapp/tree-select/index.wxs | 12 + .../@vant/weapp/tree-select/index.wxss | 1 + miniprogram_npm/@vant/weapp/uploader/index.js | 246 ++ .../@vant/weapp/uploader/index.json | 7 + .../@vant/weapp/uploader/index.wxml | 83 + .../@vant/weapp/uploader/index.wxs | 14 + .../@vant/weapp/uploader/index.wxss | 1 + .../@vant/weapp/uploader/shared.js | 33 + miniprogram_npm/@vant/weapp/uploader/utils.js | 158 + miniprogram_npm/@vant/weapp/wxs/add-unit.wxs | 12 + miniprogram_npm/@vant/weapp/wxs/array.wxs | 5 + miniprogram_npm/@vant/weapp/wxs/bem.wxs | 39 + miniprogram_npm/@vant/weapp/wxs/memoize.wxs | 55 + miniprogram_npm/@vant/weapp/wxs/object.wxs | 13 + miniprogram_npm/@vant/weapp/wxs/style.wxs | 42 + miniprogram_npm/@vant/weapp/wxs/utils.wxs | 10 + node_modules/@vant/weapp/LICENSE | 7 + node_modules/@vant/weapp/README.md | 116 + .../@vant/weapp/changelog.generated.md | 50 + .../@vant/weapp/dist/action-sheet/index.d.ts | 1 + .../@vant/weapp/dist/action-sheet/index.js | 70 + .../@vant/weapp/dist/action-sheet/index.json | 8 + .../@vant/weapp/dist/action-sheet/index.wxml | 69 + .../@vant/weapp/dist/action-sheet/index.wxss | 1 + node_modules/@vant/weapp/dist/area/index.d.ts | 1 + node_modules/@vant/weapp/dist/area/index.js | 235 ++ node_modules/@vant/weapp/dist/area/index.json | 6 + node_modules/@vant/weapp/dist/area/index.wxml | 20 + node_modules/@vant/weapp/dist/area/index.wxs | 8 + node_modules/@vant/weapp/dist/area/index.wxss | 1 + .../@vant/weapp/dist/button/index.d.ts | 1 + node_modules/@vant/weapp/dist/button/index.js | 69 + .../@vant/weapp/dist/button/index.json | 7 + .../@vant/weapp/dist/button/index.wxml | 53 + .../@vant/weapp/dist/button/index.wxs | 39 + .../@vant/weapp/dist/button/index.wxss | 1 + .../@vant/weapp/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 + .../calendar/components/header/index.wxml | 16 + .../calendar/components/header/index.wxss | 1 + .../dist/calendar/components/month/index.d.ts | 1 + .../dist/calendar/components/month/index.js | 163 ++ .../dist/calendar/components/month/index.json | 3 + .../dist/calendar/components/month/index.wxml | 39 + .../dist/calendar/components/month/index.wxs | 71 + .../dist/calendar/components/month/index.wxss | 1 + .../@vant/weapp/dist/calendar/index.d.ts | 1 + .../@vant/weapp/dist/calendar/index.js | 346 +++ .../@vant/weapp/dist/calendar/index.json | 10 + .../@vant/weapp/dist/calendar/index.wxml | 25 + .../@vant/weapp/dist/calendar/index.wxs | 37 + .../@vant/weapp/dist/calendar/index.wxss | 1 + .../@vant/weapp/dist/calendar/utils.d.ts | 18 + .../@vant/weapp/dist/calendar/utils.js | 83 + .../@vant/weapp/dist/calendar/utils.wxs | 25 + node_modules/@vant/weapp/dist/card/index.d.ts | 1 + node_modules/@vant/weapp/dist/card/index.js | 49 + node_modules/@vant/weapp/dist/card/index.json | 6 + node_modules/@vant/weapp/dist/card/index.wxml | 56 + node_modules/@vant/weapp/dist/card/index.wxss | 1 + .../@vant/weapp/dist/cell-group/index.d.ts | 1 + .../@vant/weapp/dist/cell-group/index.js | 11 + .../@vant/weapp/dist/cell-group/index.json | 3 + .../@vant/weapp/dist/cell-group/index.wxml | 11 + .../@vant/weapp/dist/cell-group/index.wxss | 1 + node_modules/@vant/weapp/dist/cell/index.d.ts | 1 + node_modules/@vant/weapp/dist/cell/index.js | 38 + node_modules/@vant/weapp/dist/cell/index.json | 6 + node_modules/@vant/weapp/dist/cell/index.wxml | 47 + node_modules/@vant/weapp/dist/cell/index.wxs | 17 + node_modules/@vant/weapp/dist/cell/index.wxss | 1 + .../weapp/dist/checkbox-group/index.d.ts | 1 + .../@vant/weapp/dist/checkbox-group/index.js | 36 + .../weapp/dist/checkbox-group/index.json | 3 + .../weapp/dist/checkbox-group/index.wxml | 5 + .../weapp/dist/checkbox-group/index.wxss | 1 + .../@vant/weapp/dist/checkbox/index.d.ts | 1 + .../@vant/weapp/dist/checkbox/index.js | 75 + .../@vant/weapp/dist/checkbox/index.json | 6 + .../@vant/weapp/dist/checkbox/index.wxml | 31 + .../@vant/weapp/dist/checkbox/index.wxs | 20 + .../@vant/weapp/dist/checkbox/index.wxss | 1 + .../@vant/weapp/dist/circle/canvas.d.ts | 6 + .../@vant/weapp/dist/circle/canvas.js | 43 + .../@vant/weapp/dist/circle/index.d.ts | 1 + node_modules/@vant/weapp/dist/circle/index.js | 192 ++ .../@vant/weapp/dist/circle/index.json | 3 + .../@vant/weapp/dist/circle/index.wxml | 9 + .../@vant/weapp/dist/circle/index.wxss | 1 + node_modules/@vant/weapp/dist/col/index.d.ts | 1 + node_modules/@vant/weapp/dist/col/index.js | 9 + node_modules/@vant/weapp/dist/col/index.json | 3 + node_modules/@vant/weapp/dist/col/index.wxml | 9 + node_modules/@vant/weapp/dist/col/index.wxs | 18 + node_modules/@vant/weapp/dist/col/index.wxss | 1 + .../weapp/dist/collapse-item/animate.d.ts | 6 + .../@vant/weapp/dist/collapse-item/animate.js | 70 + .../@vant/weapp/dist/collapse-item/index.d.ts | 1 + .../@vant/weapp/dist/collapse-item/index.js | 59 + .../@vant/weapp/dist/collapse-item/index.json | 6 + .../@vant/weapp/dist/collapse-item/index.wxml | 44 + .../@vant/weapp/dist/collapse-item/index.wxss | 1 + .../@vant/weapp/dist/collapse/index.d.ts | 1 + .../@vant/weapp/dist/collapse/index.js | 44 + .../@vant/weapp/dist/collapse/index.json | 3 + .../@vant/weapp/dist/collapse/index.wxml | 3 + .../@vant/weapp/dist/collapse/index.wxss | 1 + .../@vant/weapp/dist/common/color.d.ts | 7 + node_modules/@vant/weapp/dist/common/color.js | 7 + .../@vant/weapp/dist/common/component.d.ts | 8 + .../@vant/weapp/dist/common/component.js | 45 + .../@vant/weapp/dist/common/index.wxss | 1 + .../@vant/weapp/dist/common/relation.d.ts | 21 + .../@vant/weapp/dist/common/relation.js | 64 + .../weapp/dist/common/style/clearfix.wxss | 1 + .../weapp/dist/common/style/ellipsis.wxss | 1 + .../weapp/dist/common/style/hairline.wxss | 1 + .../dist/common/style/mixins/clearfix.wxss | 0 .../dist/common/style/mixins/ellipsis.wxss | 0 .../dist/common/style/mixins/hairline.wxss | 0 .../@vant/weapp/dist/common/style/theme.wxss | 0 .../@vant/weapp/dist/common/style/var.wxss | 0 .../@vant/weapp/dist/common/utils.d.ts | 31 + node_modules/@vant/weapp/dist/common/utils.js | 90 + .../@vant/weapp/dist/common/validator.d.ts | 11 + .../@vant/weapp/dist/common/validator.js | 31 + .../@vant/weapp/dist/common/version.d.ts | 7 + .../@vant/weapp/dist/common/version.js | 48 + .../weapp/dist/config-provider/index.d.ts | 1 + .../@vant/weapp/dist/config-provider/index.js | 9 + .../weapp/dist/config-provider/index.json | 3 + .../weapp/dist/config-provider/index.wxml | 5 + .../weapp/dist/config-provider/index.wxs | 29 + .../@vant/weapp/dist/count-down/index.d.ts | 1 + .../@vant/weapp/dist/count-down/index.js | 99 + .../@vant/weapp/dist/count-down/index.json | 3 + .../@vant/weapp/dist/count-down/index.wxml | 4 + .../@vant/weapp/dist/count-down/index.wxss | 1 + .../@vant/weapp/dist/count-down/utils.d.ts | 10 + .../@vant/weapp/dist/count-down/utils.js | 53 + .../weapp/dist/datetime-picker/index.d.ts | 1 + .../@vant/weapp/dist/datetime-picker/index.js | 321 +++ .../weapp/dist/datetime-picker/index.json | 6 + .../weapp/dist/datetime-picker/index.wxml | 16 + .../weapp/dist/datetime-picker/index.wxss | 1 + .../@vant/weapp/dist/definitions/index.d.ts | 43 + .../@vant/weapp/dist/definitions/index.js | 1 + .../@vant/weapp/dist/dialog/dialog.d.ts | 58 + .../@vant/weapp/dist/dialog/dialog.js | 84 + .../@vant/weapp/dist/dialog/index.d.ts | 1 + node_modules/@vant/weapp/dist/dialog/index.js | 121 + .../@vant/weapp/dist/dialog/index.json | 9 + .../@vant/weapp/dist/dialog/index.wxml | 113 + .../@vant/weapp/dist/dialog/index.wxss | 1 + .../@vant/weapp/dist/divider/index.d.ts | 1 + .../@vant/weapp/dist/divider/index.js | 12 + .../@vant/weapp/dist/divider/index.json | 4 + .../@vant/weapp/dist/divider/index.wxml | 9 + .../@vant/weapp/dist/divider/index.wxs | 18 + .../@vant/weapp/dist/divider/index.wxss | 1 + .../@vant/weapp/dist/dropdown-item/index.d.ts | 1 + .../@vant/weapp/dist/dropdown-item/index.js | 111 + .../@vant/weapp/dist/dropdown-item/index.json | 8 + .../@vant/weapp/dist/dropdown-item/index.wxml | 48 + .../@vant/weapp/dist/dropdown-item/index.wxss | 1 + .../weapp/dist/dropdown-item/shared.d.ts | 5 + .../@vant/weapp/dist/dropdown-item/shared.js | 1 + .../@vant/weapp/dist/dropdown-menu/index.d.ts | 1 + .../@vant/weapp/dist/dropdown-menu/index.js | 112 + .../@vant/weapp/dist/dropdown-menu/index.json | 3 + .../@vant/weapp/dist/dropdown-menu/index.wxml | 23 + .../@vant/weapp/dist/dropdown-menu/index.wxs | 16 + .../@vant/weapp/dist/dropdown-menu/index.wxss | 1 + .../@vant/weapp/dist/empty/index.d.ts | 1 + node_modules/@vant/weapp/dist/empty/index.js | 10 + .../@vant/weapp/dist/empty/index.json | 4 + .../@vant/weapp/dist/empty/index.wxml | 22 + node_modules/@vant/weapp/dist/empty/index.wxs | 14 + .../@vant/weapp/dist/empty/index.wxss | 1 + .../@vant/weapp/dist/field/index.d.ts | 1 + node_modules/@vant/weapp/dist/field/index.js | 126 + .../@vant/weapp/dist/field/index.json | 7 + .../@vant/weapp/dist/field/index.wxml | 56 + node_modules/@vant/weapp/dist/field/index.wxs | 18 + .../@vant/weapp/dist/field/index.wxss | 1 + .../@vant/weapp/dist/field/input.wxml | 27 + .../@vant/weapp/dist/field/props.d.ts | 4 + node_modules/@vant/weapp/dist/field/props.js | 63 + .../@vant/weapp/dist/field/textarea.wxml | 29 + .../weapp/dist/goods-action-button/index.d.ts | 1 + .../weapp/dist/goods-action-button/index.js | 36 + .../weapp/dist/goods-action-button/index.json | 6 + .../weapp/dist/goods-action-button/index.wxml | 30 + .../weapp/dist/goods-action-button/index.wxss | 1 + .../weapp/dist/goods-action-icon/index.d.ts | 1 + .../weapp/dist/goods-action-icon/index.js | 21 + .../weapp/dist/goods-action-icon/index.json | 7 + .../weapp/dist/goods-action-icon/index.wxml | 35 + .../weapp/dist/goods-action-icon/index.wxss | 1 + .../@vant/weapp/dist/goods-action/index.d.ts | 1 + .../@vant/weapp/dist/goods-action/index.js | 15 + .../@vant/weapp/dist/goods-action/index.json | 3 + .../@vant/weapp/dist/goods-action/index.wxml | 5 + .../@vant/weapp/dist/goods-action/index.wxss | 1 + .../@vant/weapp/dist/grid-item/index.d.ts | 1 + .../@vant/weapp/dist/grid-item/index.js | 62 + .../@vant/weapp/dist/grid-item/index.json | 6 + .../@vant/weapp/dist/grid-item/index.wxml | 27 + .../@vant/weapp/dist/grid-item/index.wxs | 32 + .../@vant/weapp/dist/grid-item/index.wxss | 1 + node_modules/@vant/weapp/dist/grid/index.d.ts | 1 + node_modules/@vant/weapp/dist/grid/index.js | 55 + node_modules/@vant/weapp/dist/grid/index.json | 3 + node_modules/@vant/weapp/dist/grid/index.wxml | 8 + node_modules/@vant/weapp/dist/grid/index.wxs | 13 + node_modules/@vant/weapp/dist/grid/index.wxss | 1 + node_modules/@vant/weapp/dist/icon/index.d.ts | 1 + node_modules/@vant/weapp/dist/icon/index.js | 20 + node_modules/@vant/weapp/dist/icon/index.json | 6 + node_modules/@vant/weapp/dist/icon/index.wxml | 20 + node_modules/@vant/weapp/dist/icon/index.wxs | 39 + node_modules/@vant/weapp/dist/icon/index.wxss | 1 + .../@vant/weapp/dist/image/index.d.ts | 1 + node_modules/@vant/weapp/dist/image/index.js | 60 + .../@vant/weapp/dist/image/index.json | 7 + .../@vant/weapp/dist/image/index.wxml | 34 + node_modules/@vant/weapp/dist/image/index.wxs | 32 + .../@vant/weapp/dist/image/index.wxss | 1 + .../@vant/weapp/dist/index-anchor/index.d.ts | 1 + .../@vant/weapp/dist/index-anchor/index.js | 25 + .../@vant/weapp/dist/index-anchor/index.json | 3 + .../@vant/weapp/dist/index-anchor/index.wxml | 14 + .../@vant/weapp/dist/index-anchor/index.wxss | 1 + .../@vant/weapp/dist/index-bar/index.d.ts | 1 + .../@vant/weapp/dist/index-bar/index.js | 248 ++ .../@vant/weapp/dist/index-bar/index.json | 3 + .../@vant/weapp/dist/index-bar/index.wxml | 22 + .../@vant/weapp/dist/index-bar/index.wxss | 1 + node_modules/@vant/weapp/dist/info/index.d.ts | 1 + node_modules/@vant/weapp/dist/info/index.js | 8 + node_modules/@vant/weapp/dist/info/index.json | 3 + node_modules/@vant/weapp/dist/info/index.wxml | 7 + node_modules/@vant/weapp/dist/info/index.wxss | 1 + .../@vant/weapp/dist/loading/index.d.ts | 1 + .../@vant/weapp/dist/loading/index.js | 16 + .../@vant/weapp/dist/loading/index.json | 3 + .../@vant/weapp/dist/loading/index.wxml | 19 + .../@vant/weapp/dist/loading/index.wxs | 22 + .../@vant/weapp/dist/loading/index.wxss | 1 + .../@vant/weapp/dist/mixins/basic.d.ts | 1 + node_modules/@vant/weapp/dist/mixins/basic.js | 11 + .../@vant/weapp/dist/mixins/button.d.ts | 1 + .../@vant/weapp/dist/mixins/button.js | 41 + .../@vant/weapp/dist/mixins/link.d.ts | 1 + node_modules/@vant/weapp/dist/mixins/link.js | 24 + .../@vant/weapp/dist/mixins/page-scroll.d.ts | 8 + .../@vant/weapp/dist/mixins/page-scroll.js | 33 + .../@vant/weapp/dist/mixins/touch.d.ts | 1 + node_modules/@vant/weapp/dist/mixins/touch.js | 37 + .../@vant/weapp/dist/mixins/transition.d.ts | 1 + .../@vant/weapp/dist/mixins/transition.js | 115 + .../@vant/weapp/dist/nav-bar/index.d.ts | 1 + .../@vant/weapp/dist/nav-bar/index.js | 65 + .../@vant/weapp/dist/nav-bar/index.json | 6 + .../@vant/weapp/dist/nav-bar/index.wxml | 42 + .../@vant/weapp/dist/nav-bar/index.wxs | 13 + .../@vant/weapp/dist/nav-bar/index.wxss | 1 + .../@vant/weapp/dist/notice-bar/index.d.ts | 1 + .../@vant/weapp/dist/notice-bar/index.js | 123 + .../@vant/weapp/dist/notice-bar/index.json | 6 + .../@vant/weapp/dist/notice-bar/index.wxml | 39 + .../@vant/weapp/dist/notice-bar/index.wxs | 15 + .../@vant/weapp/dist/notice-bar/index.wxss | 1 + .../@vant/weapp/dist/notify/index.d.ts | 1 + node_modules/@vant/weapp/dist/notify/index.js | 65 + .../@vant/weapp/dist/notify/index.json | 6 + .../@vant/weapp/dist/notify/index.wxml | 21 + .../@vant/weapp/dist/notify/index.wxs | 22 + .../@vant/weapp/dist/notify/index.wxss | 1 + .../@vant/weapp/dist/notify/notify.d.ts | 20 + .../@vant/weapp/dist/notify/notify.js | 52 + .../@vant/weapp/dist/overlay/index.d.ts | 1 + .../@vant/weapp/dist/overlay/index.js | 26 + .../@vant/weapp/dist/overlay/index.json | 6 + .../@vant/weapp/dist/overlay/index.wxml | 21 + .../@vant/weapp/dist/overlay/index.wxss | 1 + .../@vant/weapp/dist/panel/index.d.ts | 1 + node_modules/@vant/weapp/dist/panel/index.js | 9 + .../@vant/weapp/dist/panel/index.json | 6 + .../@vant/weapp/dist/panel/index.wxml | 19 + .../@vant/weapp/dist/panel/index.wxss | 1 + .../@vant/weapp/dist/picker-column/index.d.ts | 1 + .../@vant/weapp/dist/picker-column/index.js | 124 + .../@vant/weapp/dist/picker-column/index.json | 3 + .../@vant/weapp/dist/picker-column/index.wxml | 23 + .../@vant/weapp/dist/picker-column/index.wxs | 36 + .../@vant/weapp/dist/picker-column/index.wxss | 1 + .../@vant/weapp/dist/picker/index.d.ts | 1 + node_modules/@vant/weapp/dist/picker/index.js | 146 + .../@vant/weapp/dist/picker/index.json | 7 + .../@vant/weapp/dist/picker/index.wxml | 37 + .../@vant/weapp/dist/picker/index.wxs | 42 + .../@vant/weapp/dist/picker/index.wxss | 1 + .../@vant/weapp/dist/picker/shared.d.ts | 21 + .../@vant/weapp/dist/picker/shared.js | 21 + .../@vant/weapp/dist/picker/toolbar.wxml | 23 + .../@vant/weapp/dist/popup/index.d.ts | 1 + node_modules/@vant/weapp/dist/popup/index.js | 84 + .../@vant/weapp/dist/popup/index.json | 7 + .../@vant/weapp/dist/popup/index.wxml | 25 + node_modules/@vant/weapp/dist/popup/index.wxs | 18 + .../@vant/weapp/dist/popup/index.wxss | 1 + .../@vant/weapp/dist/progress/index.d.ts | 1 + .../@vant/weapp/dist/progress/index.js | 51 + .../@vant/weapp/dist/progress/index.json | 3 + .../@vant/weapp/dist/progress/index.wxml | 20 + .../@vant/weapp/dist/progress/index.wxs | 36 + .../@vant/weapp/dist/progress/index.wxss | 1 + .../@vant/weapp/dist/radio-group/index.d.ts | 1 + .../@vant/weapp/dist/radio-group/index.js | 22 + .../@vant/weapp/dist/radio-group/index.json | 3 + .../@vant/weapp/dist/radio-group/index.wxml | 5 + .../@vant/weapp/dist/radio-group/index.wxss | 1 + .../@vant/weapp/dist/radio/index.d.ts | 1 + node_modules/@vant/weapp/dist/radio/index.js | 66 + .../@vant/weapp/dist/radio/index.json | 6 + .../@vant/weapp/dist/radio/index.wxml | 30 + node_modules/@vant/weapp/dist/radio/index.wxs | 33 + .../@vant/weapp/dist/radio/index.wxss | 1 + node_modules/@vant/weapp/dist/rate/index.d.ts | 1 + node_modules/@vant/weapp/dist/rate/index.js | 79 + node_modules/@vant/weapp/dist/rate/index.json | 6 + node_modules/@vant/weapp/dist/rate/index.wxml | 35 + node_modules/@vant/weapp/dist/rate/index.wxss | 1 + node_modules/@vant/weapp/dist/row/index.d.ts | 1 + node_modules/@vant/weapp/dist/row/index.js | 23 + node_modules/@vant/weapp/dist/row/index.json | 3 + node_modules/@vant/weapp/dist/row/index.wxml | 5 + node_modules/@vant/weapp/dist/row/index.wxs | 18 + node_modules/@vant/weapp/dist/row/index.wxss | 1 + .../@vant/weapp/dist/search/index.d.ts | 1 + node_modules/@vant/weapp/dist/search/index.js | 81 + .../@vant/weapp/dist/search/index.json | 6 + .../@vant/weapp/dist/search/index.wxml | 51 + .../@vant/weapp/dist/search/index.wxss | 1 + .../@vant/weapp/dist/share-sheet/index.d.ts | 1 + .../@vant/weapp/dist/share-sheet/index.js | 55 + .../@vant/weapp/dist/share-sheet/index.json | 7 + .../@vant/weapp/dist/share-sheet/index.wxml | 46 + .../@vant/weapp/dist/share-sheet/index.wxs | 12 + .../@vant/weapp/dist/share-sheet/index.wxss | 1 + .../@vant/weapp/dist/share-sheet/options.d.ts | 1 + .../@vant/weapp/dist/share-sheet/options.js | 14 + .../@vant/weapp/dist/share-sheet/options.json | 3 + .../@vant/weapp/dist/share-sheet/options.wxml | 20 + .../@vant/weapp/dist/share-sheet/options.wxs | 14 + .../@vant/weapp/dist/share-sheet/options.wxss | 1 + .../@vant/weapp/dist/sidebar-item/index.d.ts | 1 + .../@vant/weapp/dist/sidebar-item/index.js | 29 + .../@vant/weapp/dist/sidebar-item/index.json | 6 + .../@vant/weapp/dist/sidebar-item/index.wxml | 18 + .../@vant/weapp/dist/sidebar-item/index.wxss | 1 + .../@vant/weapp/dist/sidebar/index.d.ts | 1 + .../@vant/weapp/dist/sidebar/index.js | 34 + .../@vant/weapp/dist/sidebar/index.json | 3 + .../@vant/weapp/dist/sidebar/index.wxml | 3 + .../@vant/weapp/dist/sidebar/index.wxss | 1 + .../@vant/weapp/dist/skeleton/index.d.ts | 1 + .../@vant/weapp/dist/skeleton/index.js | 46 + .../@vant/weapp/dist/skeleton/index.json | 4 + .../@vant/weapp/dist/skeleton/index.wxml | 29 + .../@vant/weapp/dist/skeleton/index.wxss | 1 + .../@vant/weapp/dist/slider/index.d.ts | 1 + node_modules/@vant/weapp/dist/slider/index.js | 104 + .../@vant/weapp/dist/slider/index.json | 3 + .../@vant/weapp/dist/slider/index.wxml | 30 + .../@vant/weapp/dist/slider/index.wxs | 14 + .../@vant/weapp/dist/slider/index.wxss | 1 + .../@vant/weapp/dist/stepper/index.d.ts | 1 + .../@vant/weapp/dist/stepper/index.js | 194 ++ .../@vant/weapp/dist/stepper/index.json | 3 + .../@vant/weapp/dist/stepper/index.wxml | 42 + .../@vant/weapp/dist/stepper/index.wxs | 22 + .../@vant/weapp/dist/stepper/index.wxss | 1 + .../@vant/weapp/dist/steps/index.d.ts | 1 + node_modules/@vant/weapp/dist/steps/index.js | 33 + .../@vant/weapp/dist/steps/index.json | 6 + .../@vant/weapp/dist/steps/index.wxml | 54 + .../@vant/weapp/dist/steps/index.wxss | 1 + .../@vant/weapp/dist/sticky/index.d.ts | 1 + node_modules/@vant/weapp/dist/sticky/index.js | 113 + .../@vant/weapp/dist/sticky/index.json | 3 + .../@vant/weapp/dist/sticky/index.wxml | 8 + .../@vant/weapp/dist/sticky/index.wxs | 25 + .../@vant/weapp/dist/sticky/index.wxss | 1 + .../@vant/weapp/dist/submit-bar/index.d.ts | 1 + .../@vant/weapp/dist/submit-bar/index.js | 57 + .../@vant/weapp/dist/submit-bar/index.json | 7 + .../@vant/weapp/dist/submit-bar/index.wxml | 44 + .../@vant/weapp/dist/submit-bar/index.wxss | 1 + .../@vant/weapp/dist/swipe-cell/index.d.ts | 1 + .../@vant/weapp/dist/swipe-cell/index.js | 132 + .../@vant/weapp/dist/swipe-cell/index.json | 3 + .../@vant/weapp/dist/swipe-cell/index.wxml | 20 + .../@vant/weapp/dist/swipe-cell/index.wxss | 1 + .../@vant/weapp/dist/switch/index.d.ts | 1 + node_modules/@vant/weapp/dist/switch/index.js | 36 + .../@vant/weapp/dist/switch/index.json | 6 + .../@vant/weapp/dist/switch/index.wxml | 16 + .../@vant/weapp/dist/switch/index.wxs | 26 + .../@vant/weapp/dist/switch/index.wxss | 1 + node_modules/@vant/weapp/dist/tab/index.d.ts | 1 + node_modules/@vant/weapp/dist/tab/index.js | 56 + node_modules/@vant/weapp/dist/tab/index.json | 3 + node_modules/@vant/weapp/dist/tab/index.wxml | 8 + node_modules/@vant/weapp/dist/tab/index.wxss | 1 + .../@vant/weapp/dist/tabbar-item/index.d.ts | 1 + .../@vant/weapp/dist/tabbar-item/index.js | 56 + .../@vant/weapp/dist/tabbar-item/index.json | 7 + .../@vant/weapp/dist/tabbar-item/index.wxml | 28 + .../@vant/weapp/dist/tabbar-item/index.wxss | 1 + .../@vant/weapp/dist/tabbar/index.d.ts | 1 + node_modules/@vant/weapp/dist/tabbar/index.js | 65 + .../@vant/weapp/dist/tabbar/index.json | 3 + .../@vant/weapp/dist/tabbar/index.wxml | 10 + .../@vant/weapp/dist/tabbar/index.wxss | 1 + node_modules/@vant/weapp/dist/tabs/index.d.ts | 1 + node_modules/@vant/weapp/dist/tabs/index.js | 286 ++ node_modules/@vant/weapp/dist/tabs/index.json | 7 + node_modules/@vant/weapp/dist/tabs/index.wxml | 63 + node_modules/@vant/weapp/dist/tabs/index.wxs | 82 + node_modules/@vant/weapp/dist/tabs/index.wxss | 1 + node_modules/@vant/weapp/dist/tag/index.d.ts | 1 + node_modules/@vant/weapp/dist/tag/index.js | 21 + node_modules/@vant/weapp/dist/tag/index.json | 6 + node_modules/@vant/weapp/dist/tag/index.wxml | 15 + node_modules/@vant/weapp/dist/tag/index.wxs | 13 + node_modules/@vant/weapp/dist/tag/index.wxss | 1 + .../@vant/weapp/dist/toast/index.d.ts | 1 + node_modules/@vant/weapp/dist/toast/index.js | 29 + .../@vant/weapp/dist/toast/index.json | 9 + .../@vant/weapp/dist/toast/index.wxml | 33 + .../@vant/weapp/dist/toast/index.wxss | 1 + .../@vant/weapp/dist/toast/toast.d.ts | 36 + node_modules/@vant/weapp/dist/toast/toast.js | 70 + .../@vant/weapp/dist/transition/index.d.ts | 1 + .../@vant/weapp/dist/transition/index.js | 13 + .../@vant/weapp/dist/transition/index.json | 3 + .../@vant/weapp/dist/transition/index.wxml | 10 + .../@vant/weapp/dist/transition/index.wxs | 17 + .../@vant/weapp/dist/transition/index.wxss | 1 + .../@vant/weapp/dist/tree-select/index.d.ts | 1 + .../@vant/weapp/dist/tree-select/index.js | 68 + .../@vant/weapp/dist/tree-select/index.json | 8 + .../@vant/weapp/dist/tree-select/index.wxml | 41 + .../@vant/weapp/dist/tree-select/index.wxs | 12 + .../@vant/weapp/dist/tree-select/index.wxss | 1 + .../@vant/weapp/dist/uploader/index.d.ts | 1 + .../@vant/weapp/dist/uploader/index.js | 201 ++ .../@vant/weapp/dist/uploader/index.json | 7 + .../@vant/weapp/dist/uploader/index.wxml | 83 + .../@vant/weapp/dist/uploader/index.wxs | 14 + .../@vant/weapp/dist/uploader/index.wxss | 1 + .../@vant/weapp/dist/uploader/shared.d.ts | 28 + .../@vant/weapp/dist/uploader/shared.js | 30 + .../@vant/weapp/dist/uploader/utils.d.ts | 31 + .../@vant/weapp/dist/uploader/utils.js | 122 + .../@vant/weapp/dist/wxs/add-unit.wxs | 12 + node_modules/@vant/weapp/dist/wxs/array.wxs | 5 + node_modules/@vant/weapp/dist/wxs/bem.wxs | 39 + node_modules/@vant/weapp/dist/wxs/memoize.wxs | 55 + node_modules/@vant/weapp/dist/wxs/object.wxs | 13 + node_modules/@vant/weapp/dist/wxs/style.wxs | 42 + node_modules/@vant/weapp/dist/wxs/utils.wxs | 10 + .../@vant/weapp/lib/action-sheet/index.js | 76 + .../@vant/weapp/lib/action-sheet/index.json | 8 + .../@vant/weapp/lib/action-sheet/index.wxml | 69 + .../@vant/weapp/lib/action-sheet/index.wxss | 1 + node_modules/@vant/weapp/lib/area/index.js | 266 ++ node_modules/@vant/weapp/lib/area/index.json | 6 + node_modules/@vant/weapp/lib/area/index.wxml | 20 + node_modules/@vant/weapp/lib/area/index.wxs | 8 + node_modules/@vant/weapp/lib/area/index.wxss | 1 + node_modules/@vant/weapp/lib/button/index.js | 71 + .../@vant/weapp/lib/button/index.json | 7 + .../@vant/weapp/lib/button/index.wxml | 53 + node_modules/@vant/weapp/lib/button/index.wxs | 39 + .../@vant/weapp/lib/button/index.wxss | 1 + .../@vant/weapp/lib/calendar/calendar.wxml | 68 + .../lib/calendar/components/header/index.js | 46 + .../lib/calendar/components/header/index.json | 3 + .../lib/calendar/components/header/index.wxml | 16 + .../lib/calendar/components/header/index.wxss | 1 + .../lib/calendar/components/month/index.js | 173 ++ .../lib/calendar/components/month/index.json | 3 + .../lib/calendar/components/month/index.wxml | 39 + .../lib/calendar/components/month/index.wxs | 71 + .../lib/calendar/components/month/index.wxss | 1 + .../@vant/weapp/lib/calendar/index.js | 382 +++ .../@vant/weapp/lib/calendar/index.json | 10 + .../@vant/weapp/lib/calendar/index.wxml | 25 + .../@vant/weapp/lib/calendar/index.wxs | 37 + .../@vant/weapp/lib/calendar/index.wxss | 1 + .../@vant/weapp/lib/calendar/utils.js | 97 + .../@vant/weapp/lib/calendar/utils.wxs | 25 + node_modules/@vant/weapp/lib/card/index.js | 51 + node_modules/@vant/weapp/lib/card/index.json | 6 + node_modules/@vant/weapp/lib/card/index.wxml | 56 + node_modules/@vant/weapp/lib/card/index.wxss | 1 + .../@vant/weapp/lib/cell-group/index.js | 13 + .../@vant/weapp/lib/cell-group/index.json | 3 + .../@vant/weapp/lib/cell-group/index.wxml | 11 + .../@vant/weapp/lib/cell-group/index.wxss | 1 + node_modules/@vant/weapp/lib/cell/index.js | 40 + node_modules/@vant/weapp/lib/cell/index.json | 6 + node_modules/@vant/weapp/lib/cell/index.wxml | 47 + node_modules/@vant/weapp/lib/cell/index.wxs | 17 + node_modules/@vant/weapp/lib/cell/index.wxss | 1 + .../@vant/weapp/lib/checkbox-group/index.js | 44 + .../@vant/weapp/lib/checkbox-group/index.json | 3 + .../@vant/weapp/lib/checkbox-group/index.wxml | 5 + .../@vant/weapp/lib/checkbox-group/index.wxss | 1 + .../@vant/weapp/lib/checkbox/index.js | 84 + .../@vant/weapp/lib/checkbox/index.json | 6 + .../@vant/weapp/lib/checkbox/index.wxml | 31 + .../@vant/weapp/lib/checkbox/index.wxs | 20 + .../@vant/weapp/lib/checkbox/index.wxss | 1 + node_modules/@vant/weapp/lib/circle/canvas.js | 47 + node_modules/@vant/weapp/lib/circle/index.js | 217 ++ .../@vant/weapp/lib/circle/index.json | 3 + .../@vant/weapp/lib/circle/index.wxml | 9 + .../@vant/weapp/lib/circle/index.wxss | 1 + node_modules/@vant/weapp/lib/col/index.js | 11 + node_modules/@vant/weapp/lib/col/index.json | 3 + node_modules/@vant/weapp/lib/col/index.wxml | 9 + node_modules/@vant/weapp/lib/col/index.wxs | 18 + node_modules/@vant/weapp/lib/col/index.wxss | 1 + .../@vant/weapp/lib/collapse-item/animate.js | 77 + .../@vant/weapp/lib/collapse-item/index.js | 68 + .../@vant/weapp/lib/collapse-item/index.json | 6 + .../@vant/weapp/lib/collapse-item/index.wxml | 44 + .../@vant/weapp/lib/collapse-item/index.wxss | 1 + .../@vant/weapp/lib/collapse/index.js | 50 + .../@vant/weapp/lib/collapse/index.json | 3 + .../@vant/weapp/lib/collapse/index.wxml | 3 + .../@vant/weapp/lib/collapse/index.wxss | 1 + node_modules/@vant/weapp/lib/common/color.js | 10 + .../@vant/weapp/lib/common/component.js | 48 + .../@vant/weapp/lib/common/index.wxss | 1 + .../@vant/weapp/lib/common/relation.js | 79 + .../weapp/lib/common/style/clearfix.wxss | 1 + .../weapp/lib/common/style/ellipsis.wxss | 1 + .../weapp/lib/common/style/hairline.wxss | 1 + .../lib/common/style/mixins/clearfix.wxss | 0 .../lib/common/style/mixins/ellipsis.wxss | 0 .../lib/common/style/mixins/hairline.wxss | 0 .../@vant/weapp/lib/common/style/theme.wxss | 0 .../@vant/weapp/lib/common/style/var.wxss | 0 node_modules/@vant/weapp/lib/common/utils.js | 120 + .../@vant/weapp/lib/common/validator.js | 43 + .../@vant/weapp/lib/common/version.js | 58 + .../@vant/weapp/lib/config-provider/index.js | 11 + .../weapp/lib/config-provider/index.json | 3 + .../weapp/lib/config-provider/index.wxml | 5 + .../@vant/weapp/lib/config-provider/index.wxs | 29 + .../@vant/weapp/lib/count-down/index.js | 103 + .../@vant/weapp/lib/count-down/index.json | 3 + .../@vant/weapp/lib/count-down/index.wxml | 4 + .../@vant/weapp/lib/count-down/index.wxss | 1 + .../@vant/weapp/lib/count-down/utils.js | 65 + .../@vant/weapp/lib/datetime-picker/index.js | 375 +++ .../weapp/lib/datetime-picker/index.json | 6 + .../weapp/lib/datetime-picker/index.wxml | 16 + .../weapp/lib/datetime-picker/index.wxss | 1 + .../@vant/weapp/lib/definitions/index.js | 2 + node_modules/@vant/weapp/lib/dialog/dialog.js | 104 + node_modules/@vant/weapp/lib/dialog/index.js | 126 + .../@vant/weapp/lib/dialog/index.json | 9 + .../@vant/weapp/lib/dialog/index.wxml | 113 + .../@vant/weapp/lib/dialog/index.wxss | 1 + node_modules/@vant/weapp/lib/divider/index.js | 14 + .../@vant/weapp/lib/divider/index.json | 4 + .../@vant/weapp/lib/divider/index.wxml | 9 + .../@vant/weapp/lib/divider/index.wxs | 18 + .../@vant/weapp/lib/divider/index.wxss | 1 + .../@vant/weapp/lib/dropdown-item/index.js | 117 + .../@vant/weapp/lib/dropdown-item/index.json | 8 + .../@vant/weapp/lib/dropdown-item/index.wxml | 48 + .../@vant/weapp/lib/dropdown-item/index.wxss | 1 + .../@vant/weapp/lib/dropdown-item/shared.js | 2 + .../@vant/weapp/lib/dropdown-menu/index.js | 126 + .../@vant/weapp/lib/dropdown-menu/index.json | 3 + .../@vant/weapp/lib/dropdown-menu/index.wxml | 23 + .../@vant/weapp/lib/dropdown-menu/index.wxs | 16 + .../@vant/weapp/lib/dropdown-menu/index.wxss | 1 + node_modules/@vant/weapp/lib/empty/index.js | 12 + node_modules/@vant/weapp/lib/empty/index.json | 4 + node_modules/@vant/weapp/lib/empty/index.wxml | 22 + node_modules/@vant/weapp/lib/empty/index.wxs | 14 + node_modules/@vant/weapp/lib/empty/index.wxss | 1 + node_modules/@vant/weapp/lib/field/index.js | 151 + node_modules/@vant/weapp/lib/field/index.json | 7 + node_modules/@vant/weapp/lib/field/index.wxml | 56 + node_modules/@vant/weapp/lib/field/index.wxs | 18 + node_modules/@vant/weapp/lib/field/index.wxss | 1 + node_modules/@vant/weapp/lib/field/input.wxml | 27 + node_modules/@vant/weapp/lib/field/props.js | 66 + .../@vant/weapp/lib/field/textarea.wxml | 29 + .../weapp/lib/goods-action-button/index.js | 39 + .../weapp/lib/goods-action-button/index.json | 6 + .../weapp/lib/goods-action-button/index.wxml | 30 + .../weapp/lib/goods-action-button/index.wxss | 1 + .../weapp/lib/goods-action-icon/index.js | 23 + .../weapp/lib/goods-action-icon/index.json | 7 + .../weapp/lib/goods-action-icon/index.wxml | 35 + .../weapp/lib/goods-action-icon/index.wxss | 1 + .../@vant/weapp/lib/goods-action/index.js | 17 + .../@vant/weapp/lib/goods-action/index.json | 3 + .../@vant/weapp/lib/goods-action/index.wxml | 5 + .../@vant/weapp/lib/goods-action/index.wxss | 1 + .../@vant/weapp/lib/grid-item/index.js | 64 + .../@vant/weapp/lib/grid-item/index.json | 6 + .../@vant/weapp/lib/grid-item/index.wxml | 27 + .../@vant/weapp/lib/grid-item/index.wxs | 32 + .../@vant/weapp/lib/grid-item/index.wxss | 1 + node_modules/@vant/weapp/lib/grid/index.js | 57 + node_modules/@vant/weapp/lib/grid/index.json | 3 + node_modules/@vant/weapp/lib/grid/index.wxml | 8 + node_modules/@vant/weapp/lib/grid/index.wxs | 13 + node_modules/@vant/weapp/lib/grid/index.wxss | 1 + node_modules/@vant/weapp/lib/icon/index.js | 22 + node_modules/@vant/weapp/lib/icon/index.json | 6 + node_modules/@vant/weapp/lib/icon/index.wxml | 20 + node_modules/@vant/weapp/lib/icon/index.wxs | 39 + node_modules/@vant/weapp/lib/icon/index.wxss | 1 + node_modules/@vant/weapp/lib/image/index.js | 62 + node_modules/@vant/weapp/lib/image/index.json | 7 + node_modules/@vant/weapp/lib/image/index.wxml | 34 + node_modules/@vant/weapp/lib/image/index.wxs | 32 + node_modules/@vant/weapp/lib/image/index.wxss | 1 + .../@vant/weapp/lib/index-anchor/index.js | 28 + .../@vant/weapp/lib/index-anchor/index.json | 3 + .../@vant/weapp/lib/index-anchor/index.wxml | 14 + .../@vant/weapp/lib/index-anchor/index.wxss | 1 + .../@vant/weapp/lib/index-bar/index.js | 281 ++ .../@vant/weapp/lib/index-bar/index.json | 3 + .../@vant/weapp/lib/index-bar/index.wxml | 22 + .../@vant/weapp/lib/index-bar/index.wxss | 1 + node_modules/@vant/weapp/lib/info/index.js | 10 + node_modules/@vant/weapp/lib/info/index.json | 3 + node_modules/@vant/weapp/lib/info/index.wxml | 7 + node_modules/@vant/weapp/lib/info/index.wxss | 1 + node_modules/@vant/weapp/lib/loading/index.js | 18 + .../@vant/weapp/lib/loading/index.json | 3 + .../@vant/weapp/lib/loading/index.wxml | 19 + .../@vant/weapp/lib/loading/index.wxs | 22 + .../@vant/weapp/lib/loading/index.wxss | 1 + node_modules/@vant/weapp/lib/mixins/basic.js | 16 + node_modules/@vant/weapp/lib/mixins/button.js | 44 + node_modules/@vant/weapp/lib/mixins/link.js | 30 + .../@vant/weapp/lib/mixins/page-scroll.js | 41 + node_modules/@vant/weapp/lib/mixins/touch.js | 40 + .../@vant/weapp/lib/mixins/transition.js | 155 + node_modules/@vant/weapp/lib/nav-bar/index.js | 68 + .../@vant/weapp/lib/nav-bar/index.json | 6 + .../@vant/weapp/lib/nav-bar/index.wxml | 42 + .../@vant/weapp/lib/nav-bar/index.wxs | 13 + .../@vant/weapp/lib/nav-bar/index.wxss | 1 + .../@vant/weapp/lib/notice-bar/index.js | 131 + .../@vant/weapp/lib/notice-bar/index.json | 6 + .../@vant/weapp/lib/notice-bar/index.wxml | 39 + .../@vant/weapp/lib/notice-bar/index.wxs | 15 + .../@vant/weapp/lib/notice-bar/index.wxss | 1 + node_modules/@vant/weapp/lib/notify/index.js | 70 + .../@vant/weapp/lib/notify/index.json | 6 + .../@vant/weapp/lib/notify/index.wxml | 21 + node_modules/@vant/weapp/lib/notify/index.wxs | 22 + .../@vant/weapp/lib/notify/index.wxss | 1 + node_modules/@vant/weapp/lib/notify/notify.js | 64 + node_modules/@vant/weapp/lib/overlay/index.js | 28 + .../@vant/weapp/lib/overlay/index.json | 6 + .../@vant/weapp/lib/overlay/index.wxml | 21 + .../@vant/weapp/lib/overlay/index.wxss | 1 + node_modules/@vant/weapp/lib/panel/index.js | 11 + node_modules/@vant/weapp/lib/panel/index.json | 6 + node_modules/@vant/weapp/lib/panel/index.wxml | 19 + node_modules/@vant/weapp/lib/panel/index.wxss | 1 + .../@vant/weapp/lib/picker-column/index.js | 132 + .../@vant/weapp/lib/picker-column/index.json | 3 + .../@vant/weapp/lib/picker-column/index.wxml | 23 + .../@vant/weapp/lib/picker-column/index.wxs | 36 + .../@vant/weapp/lib/picker-column/index.wxss | 1 + node_modules/@vant/weapp/lib/picker/index.js | 179 ++ .../@vant/weapp/lib/picker/index.json | 7 + .../@vant/weapp/lib/picker/index.wxml | 37 + node_modules/@vant/weapp/lib/picker/index.wxs | 42 + .../@vant/weapp/lib/picker/index.wxss | 1 + node_modules/@vant/weapp/lib/picker/shared.js | 24 + .../@vant/weapp/lib/picker/toolbar.wxml | 23 + node_modules/@vant/weapp/lib/popup/index.js | 89 + node_modules/@vant/weapp/lib/popup/index.json | 7 + node_modules/@vant/weapp/lib/popup/index.wxml | 25 + node_modules/@vant/weapp/lib/popup/index.wxs | 18 + node_modules/@vant/weapp/lib/popup/index.wxss | 1 + .../@vant/weapp/lib/progress/index.js | 56 + .../@vant/weapp/lib/progress/index.json | 3 + .../@vant/weapp/lib/progress/index.wxml | 20 + .../@vant/weapp/lib/progress/index.wxs | 36 + .../@vant/weapp/lib/progress/index.wxss | 1 + .../@vant/weapp/lib/radio-group/index.js | 26 + .../@vant/weapp/lib/radio-group/index.json | 3 + .../@vant/weapp/lib/radio-group/index.wxml | 5 + .../@vant/weapp/lib/radio-group/index.wxss | 1 + node_modules/@vant/weapp/lib/radio/index.js | 75 + node_modules/@vant/weapp/lib/radio/index.json | 6 + node_modules/@vant/weapp/lib/radio/index.wxml | 30 + node_modules/@vant/weapp/lib/radio/index.wxs | 33 + node_modules/@vant/weapp/lib/radio/index.wxss | 1 + node_modules/@vant/weapp/lib/rate/index.js | 102 + node_modules/@vant/weapp/lib/rate/index.json | 6 + node_modules/@vant/weapp/lib/rate/index.wxml | 35 + node_modules/@vant/weapp/lib/rate/index.wxss | 1 + node_modules/@vant/weapp/lib/row/index.js | 26 + node_modules/@vant/weapp/lib/row/index.json | 3 + node_modules/@vant/weapp/lib/row/index.wxml | 5 + node_modules/@vant/weapp/lib/row/index.wxs | 18 + node_modules/@vant/weapp/lib/row/index.wxss | 1 + node_modules/@vant/weapp/lib/search/index.js | 84 + .../@vant/weapp/lib/search/index.json | 6 + .../@vant/weapp/lib/search/index.wxml | 51 + .../@vant/weapp/lib/search/index.wxss | 1 + .../@vant/weapp/lib/share-sheet/index.js | 57 + .../@vant/weapp/lib/share-sheet/index.json | 7 + .../@vant/weapp/lib/share-sheet/index.wxml | 46 + .../@vant/weapp/lib/share-sheet/index.wxs | 12 + .../@vant/weapp/lib/share-sheet/index.wxss | 1 + .../@vant/weapp/lib/share-sheet/options.js | 31 + .../@vant/weapp/lib/share-sheet/options.json | 3 + .../@vant/weapp/lib/share-sheet/options.wxml | 20 + .../@vant/weapp/lib/share-sheet/options.wxs | 14 + .../@vant/weapp/lib/share-sheet/options.wxss | 1 + .../@vant/weapp/lib/sidebar-item/index.js | 32 + .../@vant/weapp/lib/sidebar-item/index.json | 6 + .../@vant/weapp/lib/sidebar-item/index.wxml | 18 + .../@vant/weapp/lib/sidebar-item/index.wxss | 1 + node_modules/@vant/weapp/lib/sidebar/index.js | 38 + .../@vant/weapp/lib/sidebar/index.json | 3 + .../@vant/weapp/lib/sidebar/index.wxml | 3 + .../@vant/weapp/lib/sidebar/index.wxss | 1 + .../@vant/weapp/lib/skeleton/index.js | 48 + .../@vant/weapp/lib/skeleton/index.json | 4 + .../@vant/weapp/lib/skeleton/index.wxml | 29 + .../@vant/weapp/lib/skeleton/index.wxss | 1 + node_modules/@vant/weapp/lib/slider/index.js | 115 + .../@vant/weapp/lib/slider/index.json | 3 + .../@vant/weapp/lib/slider/index.wxml | 30 + node_modules/@vant/weapp/lib/slider/index.wxs | 14 + .../@vant/weapp/lib/slider/index.wxss | 1 + node_modules/@vant/weapp/lib/stepper/index.js | 218 ++ .../@vant/weapp/lib/stepper/index.json | 3 + .../@vant/weapp/lib/stepper/index.wxml | 42 + .../@vant/weapp/lib/stepper/index.wxs | 22 + .../@vant/weapp/lib/stepper/index.wxss | 1 + node_modules/@vant/weapp/lib/steps/index.js | 35 + node_modules/@vant/weapp/lib/steps/index.json | 6 + node_modules/@vant/weapp/lib/steps/index.wxml | 54 + node_modules/@vant/weapp/lib/steps/index.wxss | 1 + node_modules/@vant/weapp/lib/sticky/index.js | 124 + .../@vant/weapp/lib/sticky/index.json | 3 + .../@vant/weapp/lib/sticky/index.wxml | 8 + node_modules/@vant/weapp/lib/sticky/index.wxs | 25 + .../@vant/weapp/lib/sticky/index.wxss | 1 + .../@vant/weapp/lib/submit-bar/index.js | 61 + .../@vant/weapp/lib/submit-bar/index.json | 7 + .../@vant/weapp/lib/submit-bar/index.wxml | 44 + .../@vant/weapp/lib/submit-bar/index.wxss | 1 + .../@vant/weapp/lib/swipe-cell/index.js | 162 ++ .../@vant/weapp/lib/swipe-cell/index.json | 3 + .../@vant/weapp/lib/swipe-cell/index.wxml | 20 + .../@vant/weapp/lib/swipe-cell/index.wxss | 1 + node_modules/@vant/weapp/lib/switch/index.js | 42 + .../@vant/weapp/lib/switch/index.json | 6 + .../@vant/weapp/lib/switch/index.wxml | 16 + node_modules/@vant/weapp/lib/switch/index.wxs | 26 + .../@vant/weapp/lib/switch/index.wxss | 1 + node_modules/@vant/weapp/lib/tab/index.js | 58 + node_modules/@vant/weapp/lib/tab/index.json | 3 + node_modules/@vant/weapp/lib/tab/index.wxml | 8 + node_modules/@vant/weapp/lib/tab/index.wxss | 1 + .../@vant/weapp/lib/tabbar-item/index.js | 58 + .../@vant/weapp/lib/tabbar-item/index.json | 7 + .../@vant/weapp/lib/tabbar-item/index.wxml | 28 + .../@vant/weapp/lib/tabbar-item/index.wxss | 1 + node_modules/@vant/weapp/lib/tabbar/index.js | 70 + .../@vant/weapp/lib/tabbar/index.json | 3 + .../@vant/weapp/lib/tabbar/index.wxml | 10 + .../@vant/weapp/lib/tabbar/index.wxss | 1 + node_modules/@vant/weapp/lib/tabs/index.js | 319 +++ node_modules/@vant/weapp/lib/tabs/index.json | 7 + node_modules/@vant/weapp/lib/tabs/index.wxml | 63 + node_modules/@vant/weapp/lib/tabs/index.wxs | 82 + node_modules/@vant/weapp/lib/tabs/index.wxss | 1 + node_modules/@vant/weapp/lib/tag/index.js | 23 + node_modules/@vant/weapp/lib/tag/index.json | 6 + node_modules/@vant/weapp/lib/tag/index.wxml | 15 + node_modules/@vant/weapp/lib/tag/index.wxs | 13 + node_modules/@vant/weapp/lib/tag/index.wxss | 1 + node_modules/@vant/weapp/lib/toast/index.js | 31 + node_modules/@vant/weapp/lib/toast/index.json | 9 + node_modules/@vant/weapp/lib/toast/index.wxml | 33 + node_modules/@vant/weapp/lib/toast/index.wxss | 1 + node_modules/@vant/weapp/lib/toast/toast.js | 92 + .../@vant/weapp/lib/transition/index.js | 15 + .../@vant/weapp/lib/transition/index.json | 3 + .../@vant/weapp/lib/transition/index.wxml | 10 + .../@vant/weapp/lib/transition/index.wxs | 17 + .../@vant/weapp/lib/transition/index.wxss | 1 + .../@vant/weapp/lib/tree-select/index.js | 73 + .../@vant/weapp/lib/tree-select/index.json | 8 + .../@vant/weapp/lib/tree-select/index.wxml | 41 + .../@vant/weapp/lib/tree-select/index.wxs | 12 + .../@vant/weapp/lib/tree-select/index.wxss | 1 + .../@vant/weapp/lib/uploader/index.js | 246 ++ .../@vant/weapp/lib/uploader/index.json | 7 + .../@vant/weapp/lib/uploader/index.wxml | 83 + .../@vant/weapp/lib/uploader/index.wxs | 14 + .../@vant/weapp/lib/uploader/index.wxss | 1 + .../@vant/weapp/lib/uploader/shared.js | 33 + .../@vant/weapp/lib/uploader/utils.js | 158 + node_modules/@vant/weapp/lib/wxs/add-unit.wxs | 12 + node_modules/@vant/weapp/lib/wxs/array.wxs | 5 + node_modules/@vant/weapp/lib/wxs/bem.wxs | 39 + node_modules/@vant/weapp/lib/wxs/memoize.wxs | 55 + node_modules/@vant/weapp/lib/wxs/object.wxs | 13 + node_modules/@vant/weapp/lib/wxs/style.wxs | 42 + node_modules/@vant/weapp/lib/wxs/utils.wxs | 10 + node_modules/@vant/weapp/package.json | 96 + package-lock.json | 13 + package.json | 15 + pages/allpapers/allpapers.js | 142 + pages/allpapers/allpapers.json | 8 + pages/allpapers/allpapers.wxml | 32 + pages/allpapers/allpapers.wxss | 76 + pages/camp_detail/index.js | 1506 ++++++++++ pages/camp_detail/index.json | 5 + pages/camp_detail/index.wxml | 146 + pages/camp_detail/index.wxss | 719 +++++ pages/camp_detail/modules/camp-service.js | 309 ++ pages/camp_detail/modules/data-fetcher.js | 397 +++ pages/camp_detail/modules/order-service.js | 125 + pages/camp_detail/modules/task-handler.js | 565 ++++ pages/camp_detail/modules/utils.js | 154 + pages/camp_detail/modules/video-controller.js | 319 +++ pages/camp_list/index.js | 271 ++ pages/camp_list/index.json | 6 + pages/camp_list/index.wxml | 50 + pages/camp_list/index.wxss | 212 ++ pages/camp_task_essay_question/index.js | 873 ++++++ pages/camp_task_essay_question/index.json | 5 + pages/camp_task_essay_question/index.wxml | 223 ++ pages/camp_task_essay_question/index.wxss | 1246 ++++++++ .../modules/essay-review-parse.js | 70 + .../modules/task-service.js | 181 ++ pages/camp_task_objective_questions/index.js | 794 ++++++ .../camp_task_objective_questions/index.json | 10 + .../camp_task_objective_questions/index.wxml | 163 ++ .../camp_task_objective_questions/index.wxss | 1638 +++++++++++ .../modules/paper-service.js | 138 + .../modules/result-service.js | 216 ++ .../modules/timer-service.js | 164 ++ .../index.js | 670 +++++ .../index.json | 9 + .../index.wxml | 162 ++ .../index.wxss | 1527 ++++++++++ .../modules/result-service.js | 224 ++ pages/camp_task_subjective_question/index.js | 558 ++++ .../camp_task_subjective_question/index.json | 5 + .../camp_task_subjective_question/index.wxml | 124 + .../camp_task_subjective_question/index.wxss | 1165 ++++++++ .../modules/image-handler.js | 114 + .../modules/task-service.js | 124 + pages/camp_task_text_image/index.js | 213 ++ pages/camp_task_text_image/index.json | 7 + pages/camp_task_text_image/index.wxml | 35 + pages/camp_task_text_image/index.wxss | 143 + .../modules/task-service.js | 89 + .../modules/timer-utils.js | 73 + pages/caogaozhi/caogaozhi.js | 675 +++++ pages/caogaozhi/caogaozhi.json | 3 + pages/caogaozhi/caogaozhi.wxml | 296 ++ pages/caogaozhi/caogaozhi.wxss | 534 ++++ pages/chargeshop/chargeshop.js | 161 ++ pages/chargeshop/chargeshop.json | 4 + pages/chargeshop/chargeshop.wxml | 36 + pages/chargeshop/chargeshop.wxss | 143 + .../classcommunityitemlist.js | 185 ++ .../classcommunityitemlist.json | 4 + .../classcommunityitemlist.wxml | 40 + .../classcommunityitemlist.wxss | 127 + .../classcourselearning.js | 1346 +++++++++ .../classcourselearning.json | 8 + .../classcourselearning.wxml | 163 ++ .../classcourselearning.wxss | 339 +++ pages/classindex/classindex.js | 384 +++ pages/classindex/classindex.json | 8 + pages/classindex/classindex.wxml | 104 + pages/classindex/classindex.wxss | 356 +++ pages/collectioncourse/collectioncourse.js | 152 + pages/collectioncourse/collectioncourse.json | 4 + pages/collectioncourse/collectioncourse.wxml | 36 + pages/collectioncourse/collectioncourse.wxss | 126 + pages/collectionsub/collectionsub.js | 152 + pages/collectionsub/collectionsub.json | 4 + pages/collectionsub/collectionsub.wxml | 35 + pages/collectionsub/collectionsub.wxss | 126 + pages/communityinfo/communityinfo.js | 627 ++++ pages/communityinfo/communityinfo.json | 8 + pages/communityinfo/communityinfo.wxml | 135 + pages/communityinfo/communityinfo.wxss | 241 ++ .../communityinfocomment.js | 500 ++++ .../communityinfocomment.json | 8 + .../communityinfocomment.wxml | 130 + .../communityinfocomment.wxss | 203 ++ pages/communityitemlist/communityitemlist.js | 185 ++ .../communityitemlist/communityitemlist.json | 4 + .../communityitemlist/communityitemlist.wxml | 40 + .../communityitemlist/communityitemlist.wxss | 127 + pages/communitylist/communitylist.js | 558 ++++ pages/communitylist/communitylist.json | 5 + pages/communitylist/communitylist.wxml | 117 + pages/communitylist/communitylist.wxss | 407 +++ pages/courselearning/courselearning.js | 1346 +++++++++ pages/courselearning/courselearning.json | 8 + pages/courselearning/courselearning.wxml | 161 ++ pages/courselearning/courselearning.wxss | 339 +++ pages/createwords/createwords.js | 335 +++ pages/createwords/createwords.json | 8 + pages/createwords/createwords.wxml | 22 + pages/createwords/createwords.wxss | 92 + pages/daitika/daitika.js | 169 ++ pages/daitika/daitika.json | 4 + pages/daitika/daitika.wxml | 27 + pages/daitika/daitika.wxss | 159 ++ pages/examanalysis/examanalysis.js | 705 +++++ pages/examanalysis/examanalysis.json | 3 + pages/examanalysis/examanalysis.wxml | 233 ++ pages/examanalysis/examanalysis.wxss | 635 +++++ pages/examing/examing.js | 739 +++++ pages/examing/examing.json | 4 + pages/examing/examing.wxml | 176 ++ pages/examing/examing.wxss | 369 +++ pages/examlist/examlist.js | 148 + pages/examlist/examlist.json | 8 + pages/examlist/examlist.wxml | 11 + pages/examlist/examlist.wxss | 44 + pages/exammakings/exammakings.js | 126 + pages/exammakings/exammakings.json | 4 + pages/exammakings/exammakings.wxml | 36 + pages/exammakings/exammakings.wxss | 89 + pages/exampaper/exampaper.js | 107 + pages/exampaper/exampaper.json | 4 + pages/exampaper/exampaper.wxml | 51 + pages/exampaper/exampaper.wxss | 149 + pages/exampaper2/exampaper2.js | 111 + pages/exampaper2/exampaper2.json | 3 + pages/exampaper2/exampaper2.wxml | 39 + pages/exampaper2/exampaper2.wxss | 157 + pages/examproblem/examproblem.js | 138 + pages/examproblem/examproblem.json | 3 + pages/examproblem/examproblem.wxml | 57 + pages/examproblem/examproblem.wxss | 156 + pages/explainnote/explainnote.js | 372 +++ pages/explainnote/explainnote.json | 3 + pages/explainnote/explainnote.wxml | 146 + pages/explainnote/explainnote.wxss | 498 ++++ pages/goodsinfo/goodsinfo.js | 68 + pages/goodsinfo/goodsinfo.json | 3 + pages/goodsinfo/goodsinfo.wxml | 24 + pages/goodsinfo/goodsinfo.wxss | 73 + pages/grid/grid.js | 66 + pages/grid/grid.json | 3 + pages/grid/grid.wxml | 6 + pages/grid/grid.wxss | 1 + pages/index/index.js | 484 ++++ pages/index/index.json | 8 + pages/index/index.wxml | 150 + pages/index/index.wxss | 538 ++++ pages/indexclass/indexclass.js | 634 +++++ pages/indexclass/indexclass.json | 8 + pages/indexclass/indexclass.wxml | 118 + pages/indexclass/indexclass.wxss | 431 +++ pages/indexclassintro/indexclassintro.js | 353 +++ pages/indexclassintro/indexclassintro.json | 5 + pages/indexclassintro/indexclassintro.wxml | 54 + pages/indexclassintro/indexclassintro.wxss | 564 ++++ pages/indexclassres/indexclassres.js | 195 ++ pages/indexclassres/indexclassres.json | 8 + pages/indexclassres/indexclassres.wxml | 27 + pages/indexclassres/indexclassres.wxss | 109 + pages/indexclasssubwork/indexclasssubwork.js | 649 +++++ .../indexclasssubwork/indexclasssubwork.json | 8 + .../indexclasssubwork/indexclasssubwork.wxml | 124 + .../indexclasssubwork/indexclasssubwork.wxss | 435 +++ pages/indexclasszx/indexclasszx.js | 395 +++ pages/indexclasszx/indexclasszx.json | 5 + pages/indexclasszx/indexclasszx.wxml | 58 + pages/indexclasszx/indexclasszx.wxss | 513 ++++ .../indexcourselearning.js | 1070 +++++++ .../indexcourselearning.json | 8 + .../indexcourselearning.wxml | 161 ++ .../indexcourselearning.wxss | 340 +++ pages/indexcreatewords/indexcreatewords.js | 338 +++ pages/indexcreatewords/indexcreatewords.json | 8 + pages/indexcreatewords/indexcreatewords.wxml | 22 + pages/indexcreatewords/indexcreatewords.wxss | 92 + .../indexcreatewordssubwork.js | 345 +++ .../indexcreatewordssubwork.json | 8 + .../indexcreatewordssubwork.wxml | 22 + .../indexcreatewordssubwork.wxss | 92 + pages/indexjobtask/indexjobtask.js | 121 + pages/indexjobtask/indexjobtask.json | 11 + pages/indexjobtask/indexjobtask.wxml | 13 + pages/indexjobtask/indexjobtask.wxss | 87 + pages/indexlives/indexlives.js | 153 + pages/indexlives/indexlives.json | 8 + pages/indexlives/indexlives.wxml | 25 + pages/indexlives/indexlives.wxss | 191 ++ pages/indexlivesvoid/indexlivesvoid.js | 143 + pages/indexlivesvoid/indexlivesvoid.json | 8 + pages/indexlivesvoid/indexlivesvoid.wxml | 94 + pages/indexlivesvoid/indexlivesvoid.wxss | 199 ++ .../indexobjectactivelist.js | 123 + .../indexobjectactivelist.json | 8 + .../indexobjectactivelist.wxml | 12 + .../indexobjectactivelist.wxss | 62 + .../indexobjectactiveworkok.js | 126 + .../indexobjectactiveworkok.json | 4 + .../indexobjectactiveworkok.wxml | 39 + .../indexobjectactiveworkok.wxss | 158 + .../indexobjectivework/indexobjectivework.js | 290 ++ .../indexobjectivework.json | 4 + .../indexobjectivework.wxml | 45 + .../indexobjectivework.wxss | 409 +++ pages/indexreslists/indexreslists.js | 144 + pages/indexreslists/indexreslists.json | 8 + pages/indexreslists/indexreslists.wxml | 23 + pages/indexreslists/indexreslists.wxss | 85 + pages/indexreslistsnew/indexreslistsnew.js | 156 + pages/indexreslistsnew/indexreslistsnew.json | 8 + pages/indexreslistsnew/indexreslistsnew.wxml | 22 + pages/indexreslistsnew/indexreslistsnew.wxss | 84 + pages/indexrespage/indexrespage.js | 165 ++ pages/indexrespage/indexrespage.json | 8 + pages/indexrespage/indexrespage.wxml | 27 + pages/indexrespage/indexrespage.wxss | 109 + pages/indexsq/indexsq.js | 286 ++ pages/indexsq/indexsq.json | 5 + pages/indexsq/indexsq.wxml | 44 + pages/indexsq/indexsq.wxss | 508 ++++ pages/knowledge/knowledge.js | 143 + pages/knowledge/knowledge.json | 8 + pages/knowledge/knowledge.wxml | 94 + pages/knowledge/knowledge.wxss | 198 ++ pages/leftright/leftright.js | 29 + pages/leftright/leftright.json | 7 + pages/leftright/leftright.wxml | 10 + pages/leftright/leftright.wxss | 28 + pages/livelist/livelist.js | 132 + pages/livelist/livelist.json | 8 + pages/livelist/livelist.wxml | 45 + pages/livelist/livelist.wxss | 189 ++ pages/livetest/livetest.js | 139 + pages/livetest/livetest.json | 3 + pages/livetest/livetest.wxml | 1 + pages/livetest/livetest.wxss | 1 + pages/main/main.js | 155 + pages/main/main.json | 3 + pages/main/main.wxml | 41 + pages/main/main.wxss | 22 + .../messageencyclopedias.js | 143 + .../messageencyclopedias.json | 8 + .../messageencyclopedias.wxml | 94 + .../messageencyclopedias.wxss | 199 ++ pages/messagelist/messagelist.js | 93 + pages/messagelist/messagelist.json | 8 + pages/messagelist/messagelist.wxml | 12 + pages/messagelist/messagelist.wxss | 62 + pages/mine/mine.js | 362 +++ pages/mine/mine.json | 4 + pages/mine/mine.wxml | 108 + pages/mine/mine.wxss | 362 +++ pages/myaddress/myaddress.js | 240 ++ pages/myaddress/myaddress.json | 3 + pages/myaddress/myaddress.wxml | 68 + pages/myaddress/myaddress.wxss | 140 + pages/mycommunityinfo/mycommunityinfo.js | 243 ++ pages/mycommunityinfo/mycommunityinfo.json | 3 + pages/mycommunityinfo/mycommunityinfo.wxml | 54 + pages/mycommunityinfo/mycommunityinfo.wxss | 330 +++ pages/myexamanalysis/myexamanalysis.js | 683 +++++ pages/myexamanalysis/myexamanalysis.json | 3 + pages/myexamanalysis/myexamanalysis.wxml | 70 + pages/myexamanalysis/myexamanalysis.wxss | 635 +++++ pages/myorder/myorder.js | 75 + pages/myorder/myorder.json | 3 + pages/myorder/myorder.wxml | 27 + pages/myorder/myorder.wxss | 69 + pages/mytest/mytest.js | 42 + pages/mytest/mytest.json | 4 + pages/mytest/mytest.wxml | 9 + pages/mytest/mytest.wxss | 6 + pages/newmine/newmine.js | 318 +++ pages/newmine/newmine.json | 3 + pages/newmine/newmine.wxml | 103 + pages/newmine/newmine.wxss | 353 +++ pages/newtest/newtest.js | 128 + pages/newtest/newtest.json | 3 + pages/newtest/newtest.wxml | 7 + pages/newtest/newtest.wxss | 23 + pages/picsdisplay/picsdisplay.js | 66 + pages/picsdisplay/picsdisplay.json | 3 + pages/picsdisplay/picsdisplay.wxml | 45 + pages/picsdisplay/picsdisplay.wxss | 1 + pages/singledouble/singledouble.js | 72 + pages/singledouble/singledouble.json | 3 + pages/singledouble/singledouble.wxml | 14 + pages/singledouble/singledouble.wxss | 21 + pages/swipecell/swipecell.js | 81 + pages/swipecell/swipecell.json | 3 + pages/swipecell/swipecell.wxml | 18 + pages/swipecell/swipecell.wxss | 1 + pages/tarbar/tarbar.js | 85 + pages/tarbar/tarbar.json | 8 + pages/tarbar/tarbar.wxml | 49 + pages/tarbar/tarbar.wxss | 7 + pages/userlogin/userlogin.js | 286 ++ pages/userlogin/userlogin.json | 4 + pages/userlogin/userlogin.wxml | 122 + pages/userlogin/userlogin.wxss | 209 ++ pages/vipmonth/vipmonth.js | 139 + pages/vipmonth/vipmonth.json | 4 + pages/vipmonth/vipmonth.wxml | 24 + pages/vipmonth/vipmonth.wxss | 126 + pages/vipquanyi/vipquanyi.js | 143 + pages/vipquanyi/vipquanyi.json | 4 + pages/vipquanyi/vipquanyi.wxml | 12 + pages/vipquanyi/vipquanyi.wxss | 45 + pages/viprecharge/viprecharge.js | 115 + pages/viprecharge/viprecharge.json | 4 + pages/viprecharge/viprecharge.wxml | 11 + pages/viprecharge/viprecharge.wxss | 41 + project.config.json | 79 + project.private.config.json | 25 + sitemap.json | 7 + utils/oss.js | 102 + utils/request.js | 95 + utils/util.js | 28 + wxParse/emojis/00.gif | Bin 0 -> 1810 bytes wxParse/emojis/01.gif | Bin 0 -> 1582 bytes wxParse/emojis/02.gif | Bin 0 -> 1804 bytes wxParse/emojis/03.gif | Bin 0 -> 1852 bytes wxParse/emojis/04.gif | Bin 0 -> 1977 bytes wxParse/emojis/05.gif | Bin 0 -> 1866 bytes wxParse/emojis/06.gif | Bin 0 -> 3556 bytes wxParse/emojis/07.gif | Bin 0 -> 3929 bytes wxParse/emojis/08.gif | Bin 0 -> 4679 bytes wxParse/emojis/09.gif | Bin 0 -> 3298 bytes wxParse/emojis/10.gif | Bin 0 -> 3716 bytes wxParse/emojis/100.gif | Bin 0 -> 1780 bytes wxParse/emojis/101.gif | Bin 0 -> 2443 bytes wxParse/emojis/102.gif | Bin 0 -> 1446 bytes wxParse/emojis/103.gif | Bin 0 -> 2166 bytes wxParse/emojis/104.gif | Bin 0 -> 2169 bytes wxParse/emojis/105.gif | Bin 0 -> 1277 bytes wxParse/emojis/106.gif | Bin 0 -> 1041 bytes wxParse/emojis/107.gif | Bin 0 -> 1058 bytes wxParse/emojis/108.gif | Bin 0 -> 1046 bytes wxParse/emojis/109.gif | Bin 0 -> 1081 bytes wxParse/emojis/11.gif | Bin 0 -> 8033 bytes wxParse/emojis/110.gif | Bin 0 -> 1082 bytes wxParse/emojis/111.gif | Bin 0 -> 1039 bytes wxParse/emojis/112.gif | Bin 0 -> 1111 bytes wxParse/emojis/113.gif | Bin 0 -> 1015 bytes wxParse/emojis/114.gif | Bin 0 -> 1003 bytes wxParse/emojis/115.gif | Bin 0 -> 1061 bytes wxParse/emojis/116.gif | Bin 0 -> 996 bytes wxParse/emojis/117.gif | Bin 0 -> 1041 bytes wxParse/emojis/118.gif | Bin 0 -> 1012 bytes wxParse/emojis/119.gif | Bin 0 -> 1101 bytes wxParse/emojis/12.gif | Bin 0 -> 2247 bytes wxParse/emojis/120.gif | Bin 0 -> 1008 bytes wxParse/emojis/121.gif | Bin 0 -> 1060 bytes wxParse/emojis/122.gif | Bin 0 -> 999 bytes wxParse/emojis/123.gif | Bin 0 -> 1055 bytes wxParse/emojis/124.gif | Bin 0 -> 1022 bytes wxParse/emojis/125.gif | Bin 0 -> 1013 bytes wxParse/emojis/126.gif | Bin 0 -> 1030 bytes wxParse/emojis/127.gif | Bin 0 -> 956 bytes wxParse/emojis/128.gif | Bin 0 -> 1022 bytes wxParse/emojis/129.gif | Bin 0 -> 972 bytes wxParse/emojis/13.gif | Bin 0 -> 1736 bytes wxParse/emojis/130.gif | Bin 0 -> 980 bytes wxParse/emojis/131.gif | Bin 0 -> 945 bytes wxParse/emojis/132.gif | Bin 0 -> 936 bytes wxParse/emojis/133.gif | Bin 0 -> 1012 bytes wxParse/emojis/134.gif | Bin 0 -> 968 bytes wxParse/emojis/14.gif | Bin 0 -> 4006 bytes wxParse/emojis/15.gif | Bin 0 -> 1562 bytes wxParse/emojis/16.gif | Bin 0 -> 1413 bytes wxParse/emojis/17.gif | Bin 0 -> 3366 bytes wxParse/emojis/18.gif | Bin 0 -> 8137 bytes wxParse/emojis/19.gif | Bin 0 -> 8135 bytes wxParse/emojis/20.gif | Bin 0 -> 1808 bytes wxParse/emojis/21.gif | Bin 0 -> 1864 bytes wxParse/emojis/22.gif | Bin 0 -> 3010 bytes wxParse/emojis/23.gif | Bin 0 -> 1950 bytes wxParse/emojis/24.gif | Bin 0 -> 2257 bytes wxParse/emojis/25.gif | Bin 0 -> 2446 bytes wxParse/emojis/26.gif | Bin 0 -> 4014 bytes wxParse/emojis/27.gif | Bin 0 -> 2893 bytes wxParse/emojis/28.gif | Bin 0 -> 3262 bytes wxParse/emojis/29.gif | Bin 0 -> 5861 bytes wxParse/emojis/30.gif | Bin 0 -> 1780 bytes wxParse/emojis/31.gif | Bin 0 -> 5174 bytes wxParse/emojis/32.gif | Bin 0 -> 7189 bytes wxParse/emojis/33.gif | Bin 0 -> 4317 bytes wxParse/emojis/34.gif | Bin 0 -> 2140 bytes wxParse/emojis/35.gif | Bin 0 -> 13392 bytes wxParse/emojis/36.gif | Bin 0 -> 1417 bytes wxParse/emojis/37.gif | Bin 0 -> 1195 bytes wxParse/emojis/38.gif | Bin 0 -> 1674 bytes wxParse/emojis/39.gif | Bin 0 -> 1798 bytes wxParse/emojis/40.gif | Bin 0 -> 10092 bytes wxParse/emojis/41.gif | Bin 0 -> 3368 bytes wxParse/emojis/42.gif | Bin 0 -> 13367 bytes wxParse/emojis/43.gif | Bin 0 -> 4327 bytes wxParse/emojis/44.gif | Bin 0 -> 1571 bytes wxParse/emojis/45.gif | Bin 0 -> 4692 bytes wxParse/emojis/46.gif | Bin 0 -> 5162 bytes wxParse/emojis/47.gif | Bin 0 -> 3685 bytes wxParse/emojis/48.gif | Bin 0 -> 1755 bytes wxParse/emojis/49.gif | Bin 0 -> 6361 bytes wxParse/emojis/50.gif | Bin 0 -> 3073 bytes wxParse/emojis/51.gif | Bin 0 -> 3731 bytes wxParse/emojis/52.gif | Bin 0 -> 1532 bytes wxParse/emojis/53.gif | Bin 0 -> 2056 bytes wxParse/emojis/54.gif | Bin 0 -> 2362 bytes wxParse/emojis/55.gif | Bin 0 -> 1582 bytes wxParse/emojis/56.gif | Bin 0 -> 1170 bytes wxParse/emojis/57.gif | Bin 0 -> 5072 bytes wxParse/emojis/58.gif | Bin 0 -> 2596 bytes wxParse/emojis/59.gif | Bin 0 -> 1533 bytes wxParse/emojis/60.gif | Bin 0 -> 2667 bytes wxParse/emojis/61.gif | Bin 0 -> 1136 bytes wxParse/emojis/62.gif | Bin 0 -> 1269 bytes wxParse/emojis/63.gif | Bin 0 -> 971 bytes wxParse/emojis/64.gif | Bin 0 -> 988 bytes wxParse/emojis/65.gif | Bin 0 -> 5285 bytes wxParse/emojis/66.gif | Bin 0 -> 1159 bytes wxParse/emojis/67.gif | Bin 0 -> 2746 bytes wxParse/emojis/68.gif | Bin 0 -> 4148 bytes wxParse/emojis/69.gif | Bin 0 -> 1015 bytes wxParse/emojis/70.gif | Bin 0 -> 1162 bytes wxParse/emojis/71.gif | Bin 0 -> 824 bytes wxParse/emojis/72.gif | Bin 0 -> 3679 bytes wxParse/emojis/73.gif | Bin 0 -> 2195 bytes wxParse/emojis/74.gif | Bin 0 -> 2454 bytes wxParse/emojis/75.gif | Bin 0 -> 1222 bytes wxParse/emojis/76.gif | Bin 0 -> 1211 bytes wxParse/emojis/77.gif | Bin 0 -> 1151 bytes wxParse/emojis/78.gif | Bin 0 -> 1565 bytes wxParse/emojis/79.gif | Bin 0 -> 1518 bytes wxParse/emojis/80.gif | Bin 0 -> 1537 bytes wxParse/emojis/81.gif | Bin 0 -> 1591 bytes wxParse/emojis/82.gif | Bin 0 -> 1547 bytes wxParse/emojis/83.gif | Bin 0 -> 1591 bytes wxParse/emojis/84.gif | Bin 0 -> 3424 bytes wxParse/emojis/85.gif | Bin 0 -> 1581 bytes wxParse/emojis/86.gif | Bin 0 -> 1519 bytes wxParse/emojis/87.gif | Bin 0 -> 1558 bytes wxParse/emojis/88.gif | Bin 0 -> 2134 bytes wxParse/emojis/89.gif | Bin 0 -> 1219 bytes wxParse/emojis/90.gif | Bin 0 -> 2743 bytes wxParse/emojis/91.gif | Bin 0 -> 654 bytes wxParse/emojis/92.gif | Bin 0 -> 1377 bytes wxParse/emojis/93.gif | Bin 0 -> 1119 bytes wxParse/emojis/94.gif | Bin 0 -> 3426 bytes wxParse/emojis/95.gif | Bin 0 -> 3011 bytes wxParse/emojis/96.gif | Bin 0 -> 1796 bytes wxParse/emojis/97.gif | Bin 0 -> 5300 bytes wxParse/emojis/98.gif | Bin 0 -> 1629 bytes wxParse/emojis/99.gif | Bin 0 -> 2261 bytes wxParse/html2json.js | 303 ++ wxParse/htmlparser.js | 192 ++ wxParse/showdown.js | 2532 +++++++++++++++++ wxParse/wxDiscode.js | 207 ++ wxParse/wxParse.js | 240 ++ wxParse/wxParse.wxml | 967 +++++++ wxParse/wxParse.wxss | 207 ++ 1696 files changed, 94393 insertions(+) create mode 100644 .vscode/settings.json create mode 100644 app.js create mode 100644 app.json create mode 100644 app.wxss create mode 100644 assets/icons/1.png create mode 100644 assets/icons/2.png create mode 100644 assets/icons/3.png create mode 100644 assets/icons/add-comment.png create mode 100644 assets/icons/close.png create mode 100644 assets/icons/courses.png create mode 100644 assets/icons/default.png create mode 100644 assets/icons/notpurchased.png create mode 100644 assets/icons/pause.png create mode 100644 assets/icons/play.png create mode 100644 assets/icons/unlock.png create mode 100644 assets/images/背景.png create mode 100644 components/calendar/calendar.js create mode 100644 components/calendar/calendar.json create mode 100644 components/calendar/calendar.wxml create mode 100644 components/calendar/calendar.wxss create mode 100644 components/calendar/dayjs.js create mode 100644 components/pause-mask/index.js create mode 100644 components/pause-mask/index.json create mode 100644 components/pause-mask/index.wxml create mode 100644 components/pause-mask/index.wxss create mode 100644 components/question-display/index.js create mode 100644 components/question-display/index.json create mode 100644 components/question-display/index.wxml create mode 100644 components/question-display/index.wxss create mode 100644 components/resize-box/index.js create mode 100644 components/resize-box/index.json create mode 100644 components/resize-box/index.wxml create mode 100644 components/resize-box/index.wxss create mode 100644 config/api.js create mode 100644 config/api_config.js create mode 100644 config/camp_api.js create mode 100644 config/question_api.js create mode 100644 config/util.js create mode 100644 img/cgz_03.png create mode 100644 img/cgz_05.png create mode 100644 img/cgz_07.png create mode 100644 img/cgz_09.png create mode 100644 img/footerpic.png create mode 100644 img/footerpic1.png create mode 100644 img/footerpic2.png create mode 100644 img/footerpic3.png create mode 100644 img/minemainback.png create mode 100644 img/pause.png create mode 100644 img/play.png create mode 100644 miniprogram_npm/@vant/weapp/action-sheet/index.js create mode 100644 miniprogram_npm/@vant/weapp/action-sheet/index.json create mode 100644 miniprogram_npm/@vant/weapp/action-sheet/index.wxml create mode 100644 miniprogram_npm/@vant/weapp/action-sheet/index.wxss create mode 100644 miniprogram_npm/@vant/weapp/area/index.js create mode 100644 miniprogram_npm/@vant/weapp/area/index.json create mode 100644 miniprogram_npm/@vant/weapp/area/index.wxml create mode 100644 miniprogram_npm/@vant/weapp/area/index.wxs create mode 100644 miniprogram_npm/@vant/weapp/area/index.wxss create mode 100644 miniprogram_npm/@vant/weapp/button/index.js create mode 100644 miniprogram_npm/@vant/weapp/button/index.json create mode 100644 miniprogram_npm/@vant/weapp/button/index.wxml create mode 100644 miniprogram_npm/@vant/weapp/button/index.wxs create mode 100644 miniprogram_npm/@vant/weapp/button/index.wxss create mode 100644 miniprogram_npm/@vant/weapp/calendar/calendar.wxml create mode 100644 miniprogram_npm/@vant/weapp/calendar/components/header/index.js create mode 100644 miniprogram_npm/@vant/weapp/calendar/components/header/index.json create mode 100644 miniprogram_npm/@vant/weapp/calendar/components/header/index.wxml create mode 100644 miniprogram_npm/@vant/weapp/calendar/components/header/index.wxss create mode 100644 miniprogram_npm/@vant/weapp/calendar/components/month/index.js create mode 100644 miniprogram_npm/@vant/weapp/calendar/components/month/index.json create mode 100644 miniprogram_npm/@vant/weapp/calendar/components/month/index.wxml create mode 100644 miniprogram_npm/@vant/weapp/calendar/components/month/index.wxs create mode 100644 miniprogram_npm/@vant/weapp/calendar/components/month/index.wxss create mode 100644 miniprogram_npm/@vant/weapp/calendar/index.js create mode 100644 miniprogram_npm/@vant/weapp/calendar/index.json create mode 100644 miniprogram_npm/@vant/weapp/calendar/index.wxml create mode 100644 miniprogram_npm/@vant/weapp/calendar/index.wxs create mode 100644 miniprogram_npm/@vant/weapp/calendar/index.wxss create mode 100644 miniprogram_npm/@vant/weapp/calendar/utils.js create mode 100644 miniprogram_npm/@vant/weapp/calendar/utils.wxs create mode 100644 miniprogram_npm/@vant/weapp/card/index.js create mode 100644 miniprogram_npm/@vant/weapp/card/index.json create mode 100644 miniprogram_npm/@vant/weapp/card/index.wxml create mode 100644 miniprogram_npm/@vant/weapp/card/index.wxss create mode 100644 miniprogram_npm/@vant/weapp/cell-group/index.js create mode 100644 miniprogram_npm/@vant/weapp/cell-group/index.json create mode 100644 miniprogram_npm/@vant/weapp/cell-group/index.wxml create mode 100644 miniprogram_npm/@vant/weapp/cell-group/index.wxss create mode 100644 miniprogram_npm/@vant/weapp/cell/index.js create mode 100644 miniprogram_npm/@vant/weapp/cell/index.json create mode 100644 miniprogram_npm/@vant/weapp/cell/index.wxml create mode 100644 miniprogram_npm/@vant/weapp/cell/index.wxs create mode 100644 miniprogram_npm/@vant/weapp/cell/index.wxss create mode 100644 miniprogram_npm/@vant/weapp/checkbox-group/index.js create mode 100644 miniprogram_npm/@vant/weapp/checkbox-group/index.json create mode 100644 miniprogram_npm/@vant/weapp/checkbox-group/index.wxml create mode 100644 miniprogram_npm/@vant/weapp/checkbox-group/index.wxss create mode 100644 miniprogram_npm/@vant/weapp/checkbox/index.js create mode 100644 miniprogram_npm/@vant/weapp/checkbox/index.json create mode 100644 miniprogram_npm/@vant/weapp/checkbox/index.wxml create mode 100644 miniprogram_npm/@vant/weapp/checkbox/index.wxs create mode 100644 miniprogram_npm/@vant/weapp/checkbox/index.wxss create mode 100644 miniprogram_npm/@vant/weapp/circle/canvas.js create mode 100644 miniprogram_npm/@vant/weapp/circle/index.js create mode 100644 miniprogram_npm/@vant/weapp/circle/index.json create mode 100644 miniprogram_npm/@vant/weapp/circle/index.wxml create mode 100644 miniprogram_npm/@vant/weapp/circle/index.wxss create mode 100644 miniprogram_npm/@vant/weapp/col/index.js create mode 100644 miniprogram_npm/@vant/weapp/col/index.json create mode 100644 miniprogram_npm/@vant/weapp/col/index.wxml create mode 100644 miniprogram_npm/@vant/weapp/col/index.wxs create mode 100644 miniprogram_npm/@vant/weapp/col/index.wxss create mode 100644 miniprogram_npm/@vant/weapp/collapse-item/animate.js create mode 100644 miniprogram_npm/@vant/weapp/collapse-item/index.js create mode 100644 miniprogram_npm/@vant/weapp/collapse-item/index.json create mode 100644 miniprogram_npm/@vant/weapp/collapse-item/index.wxml create mode 100644 miniprogram_npm/@vant/weapp/collapse-item/index.wxss create mode 100644 miniprogram_npm/@vant/weapp/collapse/index.js create mode 100644 miniprogram_npm/@vant/weapp/collapse/index.json create mode 100644 miniprogram_npm/@vant/weapp/collapse/index.wxml create mode 100644 miniprogram_npm/@vant/weapp/collapse/index.wxss create mode 100644 miniprogram_npm/@vant/weapp/common/color.js create mode 100644 miniprogram_npm/@vant/weapp/common/component.js create mode 100644 miniprogram_npm/@vant/weapp/common/index.wxss create mode 100644 miniprogram_npm/@vant/weapp/common/relation.js create mode 100644 miniprogram_npm/@vant/weapp/common/style/clearfix.wxss create mode 100644 miniprogram_npm/@vant/weapp/common/style/ellipsis.wxss create mode 100644 miniprogram_npm/@vant/weapp/common/style/hairline.wxss create mode 100644 miniprogram_npm/@vant/weapp/common/style/mixins/clearfix.wxss create mode 100644 miniprogram_npm/@vant/weapp/common/style/mixins/ellipsis.wxss create mode 100644 miniprogram_npm/@vant/weapp/common/style/mixins/hairline.wxss create mode 100644 miniprogram_npm/@vant/weapp/common/style/theme.wxss create mode 100644 miniprogram_npm/@vant/weapp/common/style/var.wxss create mode 100644 miniprogram_npm/@vant/weapp/common/utils.js create mode 100644 miniprogram_npm/@vant/weapp/common/validator.js create mode 100644 miniprogram_npm/@vant/weapp/common/version.js create mode 100644 miniprogram_npm/@vant/weapp/config-provider/index.js create mode 100644 miniprogram_npm/@vant/weapp/config-provider/index.json create mode 100644 miniprogram_npm/@vant/weapp/config-provider/index.wxml create mode 100644 miniprogram_npm/@vant/weapp/config-provider/index.wxs create mode 100644 miniprogram_npm/@vant/weapp/count-down/index.js create mode 100644 miniprogram_npm/@vant/weapp/count-down/index.json create mode 100644 miniprogram_npm/@vant/weapp/count-down/index.wxml create mode 100644 miniprogram_npm/@vant/weapp/count-down/index.wxss create mode 100644 miniprogram_npm/@vant/weapp/count-down/utils.js create mode 100644 miniprogram_npm/@vant/weapp/datetime-picker/index.js create mode 100644 miniprogram_npm/@vant/weapp/datetime-picker/index.json create mode 100644 miniprogram_npm/@vant/weapp/datetime-picker/index.wxml create mode 100644 miniprogram_npm/@vant/weapp/datetime-picker/index.wxss create mode 100644 miniprogram_npm/@vant/weapp/definitions/index.js create mode 100644 miniprogram_npm/@vant/weapp/dialog/dialog.js create mode 100644 miniprogram_npm/@vant/weapp/dialog/index.js create mode 100644 miniprogram_npm/@vant/weapp/dialog/index.json create mode 100644 miniprogram_npm/@vant/weapp/dialog/index.wxml create mode 100644 miniprogram_npm/@vant/weapp/dialog/index.wxss create mode 100644 miniprogram_npm/@vant/weapp/divider/index.js create mode 100644 miniprogram_npm/@vant/weapp/divider/index.json create mode 100644 miniprogram_npm/@vant/weapp/divider/index.wxml create mode 100644 miniprogram_npm/@vant/weapp/divider/index.wxs create mode 100644 miniprogram_npm/@vant/weapp/divider/index.wxss create mode 100644 miniprogram_npm/@vant/weapp/dropdown-item/index.js create mode 100644 miniprogram_npm/@vant/weapp/dropdown-item/index.json create mode 100644 miniprogram_npm/@vant/weapp/dropdown-item/index.wxml create mode 100644 miniprogram_npm/@vant/weapp/dropdown-item/index.wxss create mode 100644 miniprogram_npm/@vant/weapp/dropdown-item/shared.js create mode 100644 miniprogram_npm/@vant/weapp/dropdown-menu/index.js create mode 100644 miniprogram_npm/@vant/weapp/dropdown-menu/index.json create mode 100644 miniprogram_npm/@vant/weapp/dropdown-menu/index.wxml create mode 100644 miniprogram_npm/@vant/weapp/dropdown-menu/index.wxs create mode 100644 miniprogram_npm/@vant/weapp/dropdown-menu/index.wxss create mode 100644 miniprogram_npm/@vant/weapp/empty/index.js create mode 100644 miniprogram_npm/@vant/weapp/empty/index.json create mode 100644 miniprogram_npm/@vant/weapp/empty/index.wxml create mode 100644 miniprogram_npm/@vant/weapp/empty/index.wxs create mode 100644 miniprogram_npm/@vant/weapp/empty/index.wxss create mode 100644 miniprogram_npm/@vant/weapp/field/index.js create mode 100644 miniprogram_npm/@vant/weapp/field/index.json create mode 100644 miniprogram_npm/@vant/weapp/field/index.wxml create mode 100644 miniprogram_npm/@vant/weapp/field/index.wxs create mode 100644 miniprogram_npm/@vant/weapp/field/index.wxss create mode 100644 miniprogram_npm/@vant/weapp/field/input.wxml create mode 100644 miniprogram_npm/@vant/weapp/field/props.js create mode 100644 miniprogram_npm/@vant/weapp/field/textarea.wxml create mode 100644 miniprogram_npm/@vant/weapp/goods-action-button/index.js create mode 100644 miniprogram_npm/@vant/weapp/goods-action-button/index.json create mode 100644 miniprogram_npm/@vant/weapp/goods-action-button/index.wxml create mode 100644 miniprogram_npm/@vant/weapp/goods-action-button/index.wxss create mode 100644 miniprogram_npm/@vant/weapp/goods-action-icon/index.js create mode 100644 miniprogram_npm/@vant/weapp/goods-action-icon/index.json create mode 100644 miniprogram_npm/@vant/weapp/goods-action-icon/index.wxml create mode 100644 miniprogram_npm/@vant/weapp/goods-action-icon/index.wxss create mode 100644 miniprogram_npm/@vant/weapp/goods-action/index.js create mode 100644 miniprogram_npm/@vant/weapp/goods-action/index.json create mode 100644 miniprogram_npm/@vant/weapp/goods-action/index.wxml create mode 100644 miniprogram_npm/@vant/weapp/goods-action/index.wxss create mode 100644 miniprogram_npm/@vant/weapp/grid-item/index.js create mode 100644 miniprogram_npm/@vant/weapp/grid-item/index.json create mode 100644 miniprogram_npm/@vant/weapp/grid-item/index.wxml create mode 100644 miniprogram_npm/@vant/weapp/grid-item/index.wxs create mode 100644 miniprogram_npm/@vant/weapp/grid-item/index.wxss create mode 100644 miniprogram_npm/@vant/weapp/grid/index.js create mode 100644 miniprogram_npm/@vant/weapp/grid/index.json create mode 100644 miniprogram_npm/@vant/weapp/grid/index.wxml create mode 100644 miniprogram_npm/@vant/weapp/grid/index.wxs create mode 100644 miniprogram_npm/@vant/weapp/grid/index.wxss create mode 100644 miniprogram_npm/@vant/weapp/icon/index.js create mode 100644 miniprogram_npm/@vant/weapp/icon/index.json create mode 100644 miniprogram_npm/@vant/weapp/icon/index.wxml create mode 100644 miniprogram_npm/@vant/weapp/icon/index.wxs create mode 100644 miniprogram_npm/@vant/weapp/icon/index.wxss create mode 100644 miniprogram_npm/@vant/weapp/image/index.js create mode 100644 miniprogram_npm/@vant/weapp/image/index.json create mode 100644 miniprogram_npm/@vant/weapp/image/index.wxml create mode 100644 miniprogram_npm/@vant/weapp/image/index.wxs create mode 100644 miniprogram_npm/@vant/weapp/image/index.wxss create mode 100644 miniprogram_npm/@vant/weapp/index-anchor/index.js create mode 100644 miniprogram_npm/@vant/weapp/index-anchor/index.json create mode 100644 miniprogram_npm/@vant/weapp/index-anchor/index.wxml create mode 100644 miniprogram_npm/@vant/weapp/index-anchor/index.wxss create mode 100644 miniprogram_npm/@vant/weapp/index-bar/index.js create mode 100644 miniprogram_npm/@vant/weapp/index-bar/index.json create mode 100644 miniprogram_npm/@vant/weapp/index-bar/index.wxml create mode 100644 miniprogram_npm/@vant/weapp/index-bar/index.wxss create mode 100644 miniprogram_npm/@vant/weapp/info/index.js create mode 100644 miniprogram_npm/@vant/weapp/info/index.json create mode 100644 miniprogram_npm/@vant/weapp/info/index.wxml create mode 100644 miniprogram_npm/@vant/weapp/info/index.wxss create mode 100644 miniprogram_npm/@vant/weapp/loading/index.js create mode 100644 miniprogram_npm/@vant/weapp/loading/index.json create mode 100644 miniprogram_npm/@vant/weapp/loading/index.wxml create mode 100644 miniprogram_npm/@vant/weapp/loading/index.wxs create mode 100644 miniprogram_npm/@vant/weapp/loading/index.wxss create mode 100644 miniprogram_npm/@vant/weapp/mixins/basic.js create mode 100644 miniprogram_npm/@vant/weapp/mixins/button.js create mode 100644 miniprogram_npm/@vant/weapp/mixins/link.js create mode 100644 miniprogram_npm/@vant/weapp/mixins/page-scroll.js create mode 100644 miniprogram_npm/@vant/weapp/mixins/touch.js create mode 100644 miniprogram_npm/@vant/weapp/mixins/transition.js create mode 100644 miniprogram_npm/@vant/weapp/nav-bar/index.js create mode 100644 miniprogram_npm/@vant/weapp/nav-bar/index.json create mode 100644 miniprogram_npm/@vant/weapp/nav-bar/index.wxml create mode 100644 miniprogram_npm/@vant/weapp/nav-bar/index.wxs create mode 100644 miniprogram_npm/@vant/weapp/nav-bar/index.wxss create mode 100644 miniprogram_npm/@vant/weapp/notice-bar/index.js create mode 100644 miniprogram_npm/@vant/weapp/notice-bar/index.json create mode 100644 miniprogram_npm/@vant/weapp/notice-bar/index.wxml create mode 100644 miniprogram_npm/@vant/weapp/notice-bar/index.wxs create mode 100644 miniprogram_npm/@vant/weapp/notice-bar/index.wxss create mode 100644 miniprogram_npm/@vant/weapp/notify/index.js create mode 100644 miniprogram_npm/@vant/weapp/notify/index.json create mode 100644 miniprogram_npm/@vant/weapp/notify/index.wxml create mode 100644 miniprogram_npm/@vant/weapp/notify/index.wxs create mode 100644 miniprogram_npm/@vant/weapp/notify/index.wxss create mode 100644 miniprogram_npm/@vant/weapp/notify/notify.js create mode 100644 miniprogram_npm/@vant/weapp/overlay/index.js create mode 100644 miniprogram_npm/@vant/weapp/overlay/index.json create mode 100644 miniprogram_npm/@vant/weapp/overlay/index.wxml create mode 100644 miniprogram_npm/@vant/weapp/overlay/index.wxss create mode 100644 miniprogram_npm/@vant/weapp/panel/index.js create mode 100644 miniprogram_npm/@vant/weapp/panel/index.json create mode 100644 miniprogram_npm/@vant/weapp/panel/index.wxml create mode 100644 miniprogram_npm/@vant/weapp/panel/index.wxss create mode 100644 miniprogram_npm/@vant/weapp/picker-column/index.js create mode 100644 miniprogram_npm/@vant/weapp/picker-column/index.json create mode 100644 miniprogram_npm/@vant/weapp/picker-column/index.wxml create mode 100644 miniprogram_npm/@vant/weapp/picker-column/index.wxs create mode 100644 miniprogram_npm/@vant/weapp/picker-column/index.wxss create mode 100644 miniprogram_npm/@vant/weapp/picker/index.js create mode 100644 miniprogram_npm/@vant/weapp/picker/index.json create mode 100644 miniprogram_npm/@vant/weapp/picker/index.wxml create mode 100644 miniprogram_npm/@vant/weapp/picker/index.wxs create mode 100644 miniprogram_npm/@vant/weapp/picker/index.wxss create mode 100644 miniprogram_npm/@vant/weapp/picker/shared.js create mode 100644 miniprogram_npm/@vant/weapp/picker/toolbar.wxml create mode 100644 miniprogram_npm/@vant/weapp/popup/index.js create mode 100644 miniprogram_npm/@vant/weapp/popup/index.json create mode 100644 miniprogram_npm/@vant/weapp/popup/index.wxml create mode 100644 miniprogram_npm/@vant/weapp/popup/index.wxs create mode 100644 miniprogram_npm/@vant/weapp/popup/index.wxss create mode 100644 miniprogram_npm/@vant/weapp/progress/index.js create mode 100644 miniprogram_npm/@vant/weapp/progress/index.json create mode 100644 miniprogram_npm/@vant/weapp/progress/index.wxml create mode 100644 miniprogram_npm/@vant/weapp/progress/index.wxs create mode 100644 miniprogram_npm/@vant/weapp/progress/index.wxss create mode 100644 miniprogram_npm/@vant/weapp/radio-group/index.js create mode 100644 miniprogram_npm/@vant/weapp/radio-group/index.json create mode 100644 miniprogram_npm/@vant/weapp/radio-group/index.wxml create mode 100644 miniprogram_npm/@vant/weapp/radio-group/index.wxss create mode 100644 miniprogram_npm/@vant/weapp/radio/index.js create mode 100644 miniprogram_npm/@vant/weapp/radio/index.json create mode 100644 miniprogram_npm/@vant/weapp/radio/index.wxml create mode 100644 miniprogram_npm/@vant/weapp/radio/index.wxs create mode 100644 miniprogram_npm/@vant/weapp/radio/index.wxss create mode 100644 miniprogram_npm/@vant/weapp/rate/index.js create mode 100644 miniprogram_npm/@vant/weapp/rate/index.json create mode 100644 miniprogram_npm/@vant/weapp/rate/index.wxml create mode 100644 miniprogram_npm/@vant/weapp/rate/index.wxss create mode 100644 miniprogram_npm/@vant/weapp/row/index.js create mode 100644 miniprogram_npm/@vant/weapp/row/index.json create mode 100644 miniprogram_npm/@vant/weapp/row/index.wxml create mode 100644 miniprogram_npm/@vant/weapp/row/index.wxs create mode 100644 miniprogram_npm/@vant/weapp/row/index.wxss create mode 100644 miniprogram_npm/@vant/weapp/search/index.js create mode 100644 miniprogram_npm/@vant/weapp/search/index.json create mode 100644 miniprogram_npm/@vant/weapp/search/index.wxml create mode 100644 miniprogram_npm/@vant/weapp/search/index.wxss create mode 100644 miniprogram_npm/@vant/weapp/share-sheet/index.js create mode 100644 miniprogram_npm/@vant/weapp/share-sheet/index.json create mode 100644 miniprogram_npm/@vant/weapp/share-sheet/index.wxml create mode 100644 miniprogram_npm/@vant/weapp/share-sheet/index.wxs create mode 100644 miniprogram_npm/@vant/weapp/share-sheet/index.wxss create mode 100644 miniprogram_npm/@vant/weapp/share-sheet/options.js create mode 100644 miniprogram_npm/@vant/weapp/share-sheet/options.json create mode 100644 miniprogram_npm/@vant/weapp/share-sheet/options.wxml create mode 100644 miniprogram_npm/@vant/weapp/share-sheet/options.wxs create mode 100644 miniprogram_npm/@vant/weapp/share-sheet/options.wxss create mode 100644 miniprogram_npm/@vant/weapp/sidebar-item/index.js create mode 100644 miniprogram_npm/@vant/weapp/sidebar-item/index.json create mode 100644 miniprogram_npm/@vant/weapp/sidebar-item/index.wxml create mode 100644 miniprogram_npm/@vant/weapp/sidebar-item/index.wxss create mode 100644 miniprogram_npm/@vant/weapp/sidebar/index.js create mode 100644 miniprogram_npm/@vant/weapp/sidebar/index.json create mode 100644 miniprogram_npm/@vant/weapp/sidebar/index.wxml create mode 100644 miniprogram_npm/@vant/weapp/sidebar/index.wxss create mode 100644 miniprogram_npm/@vant/weapp/skeleton/index.js create mode 100644 miniprogram_npm/@vant/weapp/skeleton/index.json create mode 100644 miniprogram_npm/@vant/weapp/skeleton/index.wxml create mode 100644 miniprogram_npm/@vant/weapp/skeleton/index.wxss create mode 100644 miniprogram_npm/@vant/weapp/slider/index.js create mode 100644 miniprogram_npm/@vant/weapp/slider/index.json create mode 100644 miniprogram_npm/@vant/weapp/slider/index.wxml create mode 100644 miniprogram_npm/@vant/weapp/slider/index.wxs create mode 100644 miniprogram_npm/@vant/weapp/slider/index.wxss create mode 100644 miniprogram_npm/@vant/weapp/stepper/index.js create mode 100644 miniprogram_npm/@vant/weapp/stepper/index.json create mode 100644 miniprogram_npm/@vant/weapp/stepper/index.wxml create mode 100644 miniprogram_npm/@vant/weapp/stepper/index.wxs create mode 100644 miniprogram_npm/@vant/weapp/stepper/index.wxss create mode 100644 miniprogram_npm/@vant/weapp/steps/index.js create mode 100644 miniprogram_npm/@vant/weapp/steps/index.json create mode 100644 miniprogram_npm/@vant/weapp/steps/index.wxml create mode 100644 miniprogram_npm/@vant/weapp/steps/index.wxss create mode 100644 miniprogram_npm/@vant/weapp/sticky/index.js create mode 100644 miniprogram_npm/@vant/weapp/sticky/index.json create mode 100644 miniprogram_npm/@vant/weapp/sticky/index.wxml create mode 100644 miniprogram_npm/@vant/weapp/sticky/index.wxs create mode 100644 miniprogram_npm/@vant/weapp/sticky/index.wxss create mode 100644 miniprogram_npm/@vant/weapp/submit-bar/index.js create mode 100644 miniprogram_npm/@vant/weapp/submit-bar/index.json create mode 100644 miniprogram_npm/@vant/weapp/submit-bar/index.wxml create mode 100644 miniprogram_npm/@vant/weapp/submit-bar/index.wxss create mode 100644 miniprogram_npm/@vant/weapp/swipe-cell/index.js create mode 100644 miniprogram_npm/@vant/weapp/swipe-cell/index.json create mode 100644 miniprogram_npm/@vant/weapp/swipe-cell/index.wxml create mode 100644 miniprogram_npm/@vant/weapp/swipe-cell/index.wxss create mode 100644 miniprogram_npm/@vant/weapp/switch/index.js create mode 100644 miniprogram_npm/@vant/weapp/switch/index.json create mode 100644 miniprogram_npm/@vant/weapp/switch/index.wxml create mode 100644 miniprogram_npm/@vant/weapp/switch/index.wxs create mode 100644 miniprogram_npm/@vant/weapp/switch/index.wxss create mode 100644 miniprogram_npm/@vant/weapp/tab/index.js create mode 100644 miniprogram_npm/@vant/weapp/tab/index.json create mode 100644 miniprogram_npm/@vant/weapp/tab/index.wxml create mode 100644 miniprogram_npm/@vant/weapp/tab/index.wxss create mode 100644 miniprogram_npm/@vant/weapp/tabbar-item/index.js create mode 100644 miniprogram_npm/@vant/weapp/tabbar-item/index.json create mode 100644 miniprogram_npm/@vant/weapp/tabbar-item/index.wxml create mode 100644 miniprogram_npm/@vant/weapp/tabbar-item/index.wxss create mode 100644 miniprogram_npm/@vant/weapp/tabbar/index.js create mode 100644 miniprogram_npm/@vant/weapp/tabbar/index.json create mode 100644 miniprogram_npm/@vant/weapp/tabbar/index.wxml create mode 100644 miniprogram_npm/@vant/weapp/tabbar/index.wxss create mode 100644 miniprogram_npm/@vant/weapp/tabs/index.js create mode 100644 miniprogram_npm/@vant/weapp/tabs/index.json create mode 100644 miniprogram_npm/@vant/weapp/tabs/index.wxml create mode 100644 miniprogram_npm/@vant/weapp/tabs/index.wxs create mode 100644 miniprogram_npm/@vant/weapp/tabs/index.wxss create mode 100644 miniprogram_npm/@vant/weapp/tag/index.js create mode 100644 miniprogram_npm/@vant/weapp/tag/index.json create mode 100644 miniprogram_npm/@vant/weapp/tag/index.wxml create mode 100644 miniprogram_npm/@vant/weapp/tag/index.wxs create mode 100644 miniprogram_npm/@vant/weapp/tag/index.wxss create mode 100644 miniprogram_npm/@vant/weapp/toast/index.js create mode 100644 miniprogram_npm/@vant/weapp/toast/index.json create mode 100644 miniprogram_npm/@vant/weapp/toast/index.wxml create mode 100644 miniprogram_npm/@vant/weapp/toast/index.wxss create mode 100644 miniprogram_npm/@vant/weapp/toast/toast.js create mode 100644 miniprogram_npm/@vant/weapp/transition/index.js create mode 100644 miniprogram_npm/@vant/weapp/transition/index.json create mode 100644 miniprogram_npm/@vant/weapp/transition/index.wxml create mode 100644 miniprogram_npm/@vant/weapp/transition/index.wxs create mode 100644 miniprogram_npm/@vant/weapp/transition/index.wxss create mode 100644 miniprogram_npm/@vant/weapp/tree-select/index.js create mode 100644 miniprogram_npm/@vant/weapp/tree-select/index.json create mode 100644 miniprogram_npm/@vant/weapp/tree-select/index.wxml create mode 100644 miniprogram_npm/@vant/weapp/tree-select/index.wxs create mode 100644 miniprogram_npm/@vant/weapp/tree-select/index.wxss create mode 100644 miniprogram_npm/@vant/weapp/uploader/index.js create mode 100644 miniprogram_npm/@vant/weapp/uploader/index.json create mode 100644 miniprogram_npm/@vant/weapp/uploader/index.wxml create mode 100644 miniprogram_npm/@vant/weapp/uploader/index.wxs create mode 100644 miniprogram_npm/@vant/weapp/uploader/index.wxss create mode 100644 miniprogram_npm/@vant/weapp/uploader/shared.js create mode 100644 miniprogram_npm/@vant/weapp/uploader/utils.js create mode 100644 miniprogram_npm/@vant/weapp/wxs/add-unit.wxs create mode 100644 miniprogram_npm/@vant/weapp/wxs/array.wxs create mode 100644 miniprogram_npm/@vant/weapp/wxs/bem.wxs create mode 100644 miniprogram_npm/@vant/weapp/wxs/memoize.wxs create mode 100644 miniprogram_npm/@vant/weapp/wxs/object.wxs create mode 100644 miniprogram_npm/@vant/weapp/wxs/style.wxs create mode 100644 miniprogram_npm/@vant/weapp/wxs/utils.wxs create mode 100644 node_modules/@vant/weapp/LICENSE create mode 100644 node_modules/@vant/weapp/README.md create mode 100644 node_modules/@vant/weapp/changelog.generated.md create mode 100644 node_modules/@vant/weapp/dist/action-sheet/index.d.ts create mode 100644 node_modules/@vant/weapp/dist/action-sheet/index.js create mode 100644 node_modules/@vant/weapp/dist/action-sheet/index.json create mode 100644 node_modules/@vant/weapp/dist/action-sheet/index.wxml create mode 100644 node_modules/@vant/weapp/dist/action-sheet/index.wxss create mode 100644 node_modules/@vant/weapp/dist/area/index.d.ts create mode 100644 node_modules/@vant/weapp/dist/area/index.js create mode 100644 node_modules/@vant/weapp/dist/area/index.json create mode 100644 node_modules/@vant/weapp/dist/area/index.wxml create mode 100644 node_modules/@vant/weapp/dist/area/index.wxs create mode 100644 node_modules/@vant/weapp/dist/area/index.wxss create mode 100644 node_modules/@vant/weapp/dist/button/index.d.ts create mode 100644 node_modules/@vant/weapp/dist/button/index.js create mode 100644 node_modules/@vant/weapp/dist/button/index.json create mode 100644 node_modules/@vant/weapp/dist/button/index.wxml create mode 100644 node_modules/@vant/weapp/dist/button/index.wxs create mode 100644 node_modules/@vant/weapp/dist/button/index.wxss create mode 100644 node_modules/@vant/weapp/dist/calendar/calendar.wxml create mode 100644 node_modules/@vant/weapp/dist/calendar/components/header/index.d.ts create mode 100644 node_modules/@vant/weapp/dist/calendar/components/header/index.js create mode 100644 node_modules/@vant/weapp/dist/calendar/components/header/index.json create mode 100644 node_modules/@vant/weapp/dist/calendar/components/header/index.wxml create mode 100644 node_modules/@vant/weapp/dist/calendar/components/header/index.wxss create mode 100644 node_modules/@vant/weapp/dist/calendar/components/month/index.d.ts create mode 100644 node_modules/@vant/weapp/dist/calendar/components/month/index.js create mode 100644 node_modules/@vant/weapp/dist/calendar/components/month/index.json create mode 100644 node_modules/@vant/weapp/dist/calendar/components/month/index.wxml create mode 100644 node_modules/@vant/weapp/dist/calendar/components/month/index.wxs create mode 100644 node_modules/@vant/weapp/dist/calendar/components/month/index.wxss create mode 100644 node_modules/@vant/weapp/dist/calendar/index.d.ts create mode 100644 node_modules/@vant/weapp/dist/calendar/index.js create mode 100644 node_modules/@vant/weapp/dist/calendar/index.json create mode 100644 node_modules/@vant/weapp/dist/calendar/index.wxml create mode 100644 node_modules/@vant/weapp/dist/calendar/index.wxs create mode 100644 node_modules/@vant/weapp/dist/calendar/index.wxss create mode 100644 node_modules/@vant/weapp/dist/calendar/utils.d.ts create mode 100644 node_modules/@vant/weapp/dist/calendar/utils.js create mode 100644 node_modules/@vant/weapp/dist/calendar/utils.wxs create mode 100644 node_modules/@vant/weapp/dist/card/index.d.ts create mode 100644 node_modules/@vant/weapp/dist/card/index.js create mode 100644 node_modules/@vant/weapp/dist/card/index.json create mode 100644 node_modules/@vant/weapp/dist/card/index.wxml create mode 100644 node_modules/@vant/weapp/dist/card/index.wxss create mode 100644 node_modules/@vant/weapp/dist/cell-group/index.d.ts create mode 100644 node_modules/@vant/weapp/dist/cell-group/index.js create mode 100644 node_modules/@vant/weapp/dist/cell-group/index.json create mode 100644 node_modules/@vant/weapp/dist/cell-group/index.wxml create mode 100644 node_modules/@vant/weapp/dist/cell-group/index.wxss create mode 100644 node_modules/@vant/weapp/dist/cell/index.d.ts create mode 100644 node_modules/@vant/weapp/dist/cell/index.js create mode 100644 node_modules/@vant/weapp/dist/cell/index.json create mode 100644 node_modules/@vant/weapp/dist/cell/index.wxml create mode 100644 node_modules/@vant/weapp/dist/cell/index.wxs create mode 100644 node_modules/@vant/weapp/dist/cell/index.wxss create mode 100644 node_modules/@vant/weapp/dist/checkbox-group/index.d.ts create mode 100644 node_modules/@vant/weapp/dist/checkbox-group/index.js create mode 100644 node_modules/@vant/weapp/dist/checkbox-group/index.json create mode 100644 node_modules/@vant/weapp/dist/checkbox-group/index.wxml create mode 100644 node_modules/@vant/weapp/dist/checkbox-group/index.wxss create mode 100644 node_modules/@vant/weapp/dist/checkbox/index.d.ts create mode 100644 node_modules/@vant/weapp/dist/checkbox/index.js create mode 100644 node_modules/@vant/weapp/dist/checkbox/index.json create mode 100644 node_modules/@vant/weapp/dist/checkbox/index.wxml create mode 100644 node_modules/@vant/weapp/dist/checkbox/index.wxs create mode 100644 node_modules/@vant/weapp/dist/checkbox/index.wxss create mode 100644 node_modules/@vant/weapp/dist/circle/canvas.d.ts create mode 100644 node_modules/@vant/weapp/dist/circle/canvas.js create mode 100644 node_modules/@vant/weapp/dist/circle/index.d.ts create mode 100644 node_modules/@vant/weapp/dist/circle/index.js create mode 100644 node_modules/@vant/weapp/dist/circle/index.json create mode 100644 node_modules/@vant/weapp/dist/circle/index.wxml create mode 100644 node_modules/@vant/weapp/dist/circle/index.wxss create mode 100644 node_modules/@vant/weapp/dist/col/index.d.ts create mode 100644 node_modules/@vant/weapp/dist/col/index.js create mode 100644 node_modules/@vant/weapp/dist/col/index.json create mode 100644 node_modules/@vant/weapp/dist/col/index.wxml create mode 100644 node_modules/@vant/weapp/dist/col/index.wxs create mode 100644 node_modules/@vant/weapp/dist/col/index.wxss create mode 100644 node_modules/@vant/weapp/dist/collapse-item/animate.d.ts create mode 100644 node_modules/@vant/weapp/dist/collapse-item/animate.js create mode 100644 node_modules/@vant/weapp/dist/collapse-item/index.d.ts create mode 100644 node_modules/@vant/weapp/dist/collapse-item/index.js create mode 100644 node_modules/@vant/weapp/dist/collapse-item/index.json create mode 100644 node_modules/@vant/weapp/dist/collapse-item/index.wxml create mode 100644 node_modules/@vant/weapp/dist/collapse-item/index.wxss create mode 100644 node_modules/@vant/weapp/dist/collapse/index.d.ts create mode 100644 node_modules/@vant/weapp/dist/collapse/index.js create mode 100644 node_modules/@vant/weapp/dist/collapse/index.json create mode 100644 node_modules/@vant/weapp/dist/collapse/index.wxml create mode 100644 node_modules/@vant/weapp/dist/collapse/index.wxss create mode 100644 node_modules/@vant/weapp/dist/common/color.d.ts create mode 100644 node_modules/@vant/weapp/dist/common/color.js create mode 100644 node_modules/@vant/weapp/dist/common/component.d.ts create mode 100644 node_modules/@vant/weapp/dist/common/component.js create mode 100644 node_modules/@vant/weapp/dist/common/index.wxss create mode 100644 node_modules/@vant/weapp/dist/common/relation.d.ts create mode 100644 node_modules/@vant/weapp/dist/common/relation.js create mode 100644 node_modules/@vant/weapp/dist/common/style/clearfix.wxss create mode 100644 node_modules/@vant/weapp/dist/common/style/ellipsis.wxss create mode 100644 node_modules/@vant/weapp/dist/common/style/hairline.wxss create mode 100644 node_modules/@vant/weapp/dist/common/style/mixins/clearfix.wxss create mode 100644 node_modules/@vant/weapp/dist/common/style/mixins/ellipsis.wxss create mode 100644 node_modules/@vant/weapp/dist/common/style/mixins/hairline.wxss create mode 100644 node_modules/@vant/weapp/dist/common/style/theme.wxss create mode 100644 node_modules/@vant/weapp/dist/common/style/var.wxss create mode 100644 node_modules/@vant/weapp/dist/common/utils.d.ts create mode 100644 node_modules/@vant/weapp/dist/common/utils.js create mode 100644 node_modules/@vant/weapp/dist/common/validator.d.ts create mode 100644 node_modules/@vant/weapp/dist/common/validator.js create mode 100644 node_modules/@vant/weapp/dist/common/version.d.ts create mode 100644 node_modules/@vant/weapp/dist/common/version.js create mode 100644 node_modules/@vant/weapp/dist/config-provider/index.d.ts create mode 100644 node_modules/@vant/weapp/dist/config-provider/index.js create mode 100644 node_modules/@vant/weapp/dist/config-provider/index.json create mode 100644 node_modules/@vant/weapp/dist/config-provider/index.wxml create mode 100644 node_modules/@vant/weapp/dist/config-provider/index.wxs create mode 100644 node_modules/@vant/weapp/dist/count-down/index.d.ts create mode 100644 node_modules/@vant/weapp/dist/count-down/index.js create mode 100644 node_modules/@vant/weapp/dist/count-down/index.json create mode 100644 node_modules/@vant/weapp/dist/count-down/index.wxml create mode 100644 node_modules/@vant/weapp/dist/count-down/index.wxss create mode 100644 node_modules/@vant/weapp/dist/count-down/utils.d.ts create mode 100644 node_modules/@vant/weapp/dist/count-down/utils.js create mode 100644 node_modules/@vant/weapp/dist/datetime-picker/index.d.ts create mode 100644 node_modules/@vant/weapp/dist/datetime-picker/index.js create mode 100644 node_modules/@vant/weapp/dist/datetime-picker/index.json create mode 100644 node_modules/@vant/weapp/dist/datetime-picker/index.wxml create mode 100644 node_modules/@vant/weapp/dist/datetime-picker/index.wxss create mode 100644 node_modules/@vant/weapp/dist/definitions/index.d.ts create mode 100644 node_modules/@vant/weapp/dist/definitions/index.js create mode 100644 node_modules/@vant/weapp/dist/dialog/dialog.d.ts create mode 100644 node_modules/@vant/weapp/dist/dialog/dialog.js create mode 100644 node_modules/@vant/weapp/dist/dialog/index.d.ts create mode 100644 node_modules/@vant/weapp/dist/dialog/index.js create mode 100644 node_modules/@vant/weapp/dist/dialog/index.json create mode 100644 node_modules/@vant/weapp/dist/dialog/index.wxml create mode 100644 node_modules/@vant/weapp/dist/dialog/index.wxss create mode 100644 node_modules/@vant/weapp/dist/divider/index.d.ts create mode 100644 node_modules/@vant/weapp/dist/divider/index.js create mode 100644 node_modules/@vant/weapp/dist/divider/index.json create mode 100644 node_modules/@vant/weapp/dist/divider/index.wxml create mode 100644 node_modules/@vant/weapp/dist/divider/index.wxs create mode 100644 node_modules/@vant/weapp/dist/divider/index.wxss create mode 100644 node_modules/@vant/weapp/dist/dropdown-item/index.d.ts create mode 100644 node_modules/@vant/weapp/dist/dropdown-item/index.js create mode 100644 node_modules/@vant/weapp/dist/dropdown-item/index.json create mode 100644 node_modules/@vant/weapp/dist/dropdown-item/index.wxml create mode 100644 node_modules/@vant/weapp/dist/dropdown-item/index.wxss create mode 100644 node_modules/@vant/weapp/dist/dropdown-item/shared.d.ts create mode 100644 node_modules/@vant/weapp/dist/dropdown-item/shared.js create mode 100644 node_modules/@vant/weapp/dist/dropdown-menu/index.d.ts create mode 100644 node_modules/@vant/weapp/dist/dropdown-menu/index.js create mode 100644 node_modules/@vant/weapp/dist/dropdown-menu/index.json create mode 100644 node_modules/@vant/weapp/dist/dropdown-menu/index.wxml create mode 100644 node_modules/@vant/weapp/dist/dropdown-menu/index.wxs create mode 100644 node_modules/@vant/weapp/dist/dropdown-menu/index.wxss create mode 100644 node_modules/@vant/weapp/dist/empty/index.d.ts create mode 100644 node_modules/@vant/weapp/dist/empty/index.js create mode 100644 node_modules/@vant/weapp/dist/empty/index.json create mode 100644 node_modules/@vant/weapp/dist/empty/index.wxml create mode 100644 node_modules/@vant/weapp/dist/empty/index.wxs create mode 100644 node_modules/@vant/weapp/dist/empty/index.wxss create mode 100644 node_modules/@vant/weapp/dist/field/index.d.ts create mode 100644 node_modules/@vant/weapp/dist/field/index.js create mode 100644 node_modules/@vant/weapp/dist/field/index.json create mode 100644 node_modules/@vant/weapp/dist/field/index.wxml create mode 100644 node_modules/@vant/weapp/dist/field/index.wxs create mode 100644 node_modules/@vant/weapp/dist/field/index.wxss create mode 100644 node_modules/@vant/weapp/dist/field/input.wxml create mode 100644 node_modules/@vant/weapp/dist/field/props.d.ts create mode 100644 node_modules/@vant/weapp/dist/field/props.js create mode 100644 node_modules/@vant/weapp/dist/field/textarea.wxml create mode 100644 node_modules/@vant/weapp/dist/goods-action-button/index.d.ts create mode 100644 node_modules/@vant/weapp/dist/goods-action-button/index.js create mode 100644 node_modules/@vant/weapp/dist/goods-action-button/index.json create mode 100644 node_modules/@vant/weapp/dist/goods-action-button/index.wxml create mode 100644 node_modules/@vant/weapp/dist/goods-action-button/index.wxss create mode 100644 node_modules/@vant/weapp/dist/goods-action-icon/index.d.ts create mode 100644 node_modules/@vant/weapp/dist/goods-action-icon/index.js create mode 100644 node_modules/@vant/weapp/dist/goods-action-icon/index.json create mode 100644 node_modules/@vant/weapp/dist/goods-action-icon/index.wxml create mode 100644 node_modules/@vant/weapp/dist/goods-action-icon/index.wxss create mode 100644 node_modules/@vant/weapp/dist/goods-action/index.d.ts create mode 100644 node_modules/@vant/weapp/dist/goods-action/index.js create mode 100644 node_modules/@vant/weapp/dist/goods-action/index.json create mode 100644 node_modules/@vant/weapp/dist/goods-action/index.wxml create mode 100644 node_modules/@vant/weapp/dist/goods-action/index.wxss create mode 100644 node_modules/@vant/weapp/dist/grid-item/index.d.ts create mode 100644 node_modules/@vant/weapp/dist/grid-item/index.js create mode 100644 node_modules/@vant/weapp/dist/grid-item/index.json create mode 100644 node_modules/@vant/weapp/dist/grid-item/index.wxml create mode 100644 node_modules/@vant/weapp/dist/grid-item/index.wxs create mode 100644 node_modules/@vant/weapp/dist/grid-item/index.wxss create mode 100644 node_modules/@vant/weapp/dist/grid/index.d.ts create mode 100644 node_modules/@vant/weapp/dist/grid/index.js create mode 100644 node_modules/@vant/weapp/dist/grid/index.json create mode 100644 node_modules/@vant/weapp/dist/grid/index.wxml create mode 100644 node_modules/@vant/weapp/dist/grid/index.wxs create mode 100644 node_modules/@vant/weapp/dist/grid/index.wxss create mode 100644 node_modules/@vant/weapp/dist/icon/index.d.ts create mode 100644 node_modules/@vant/weapp/dist/icon/index.js create mode 100644 node_modules/@vant/weapp/dist/icon/index.json create mode 100644 node_modules/@vant/weapp/dist/icon/index.wxml create mode 100644 node_modules/@vant/weapp/dist/icon/index.wxs create mode 100644 node_modules/@vant/weapp/dist/icon/index.wxss create mode 100644 node_modules/@vant/weapp/dist/image/index.d.ts create mode 100644 node_modules/@vant/weapp/dist/image/index.js create mode 100644 node_modules/@vant/weapp/dist/image/index.json create mode 100644 node_modules/@vant/weapp/dist/image/index.wxml create mode 100644 node_modules/@vant/weapp/dist/image/index.wxs create mode 100644 node_modules/@vant/weapp/dist/image/index.wxss create mode 100644 node_modules/@vant/weapp/dist/index-anchor/index.d.ts create mode 100644 node_modules/@vant/weapp/dist/index-anchor/index.js create mode 100644 node_modules/@vant/weapp/dist/index-anchor/index.json create mode 100644 node_modules/@vant/weapp/dist/index-anchor/index.wxml create mode 100644 node_modules/@vant/weapp/dist/index-anchor/index.wxss create mode 100644 node_modules/@vant/weapp/dist/index-bar/index.d.ts create mode 100644 node_modules/@vant/weapp/dist/index-bar/index.js create mode 100644 node_modules/@vant/weapp/dist/index-bar/index.json create mode 100644 node_modules/@vant/weapp/dist/index-bar/index.wxml create mode 100644 node_modules/@vant/weapp/dist/index-bar/index.wxss create mode 100644 node_modules/@vant/weapp/dist/info/index.d.ts create mode 100644 node_modules/@vant/weapp/dist/info/index.js create mode 100644 node_modules/@vant/weapp/dist/info/index.json create mode 100644 node_modules/@vant/weapp/dist/info/index.wxml create mode 100644 node_modules/@vant/weapp/dist/info/index.wxss create mode 100644 node_modules/@vant/weapp/dist/loading/index.d.ts create mode 100644 node_modules/@vant/weapp/dist/loading/index.js create mode 100644 node_modules/@vant/weapp/dist/loading/index.json create mode 100644 node_modules/@vant/weapp/dist/loading/index.wxml create mode 100644 node_modules/@vant/weapp/dist/loading/index.wxs create mode 100644 node_modules/@vant/weapp/dist/loading/index.wxss create mode 100644 node_modules/@vant/weapp/dist/mixins/basic.d.ts create mode 100644 node_modules/@vant/weapp/dist/mixins/basic.js create mode 100644 node_modules/@vant/weapp/dist/mixins/button.d.ts create mode 100644 node_modules/@vant/weapp/dist/mixins/button.js create mode 100644 node_modules/@vant/weapp/dist/mixins/link.d.ts create mode 100644 node_modules/@vant/weapp/dist/mixins/link.js create mode 100644 node_modules/@vant/weapp/dist/mixins/page-scroll.d.ts create mode 100644 node_modules/@vant/weapp/dist/mixins/page-scroll.js create mode 100644 node_modules/@vant/weapp/dist/mixins/touch.d.ts create mode 100644 node_modules/@vant/weapp/dist/mixins/touch.js create mode 100644 node_modules/@vant/weapp/dist/mixins/transition.d.ts create mode 100644 node_modules/@vant/weapp/dist/mixins/transition.js create mode 100644 node_modules/@vant/weapp/dist/nav-bar/index.d.ts create mode 100644 node_modules/@vant/weapp/dist/nav-bar/index.js create mode 100644 node_modules/@vant/weapp/dist/nav-bar/index.json create mode 100644 node_modules/@vant/weapp/dist/nav-bar/index.wxml create mode 100644 node_modules/@vant/weapp/dist/nav-bar/index.wxs create mode 100644 node_modules/@vant/weapp/dist/nav-bar/index.wxss create mode 100644 node_modules/@vant/weapp/dist/notice-bar/index.d.ts create mode 100644 node_modules/@vant/weapp/dist/notice-bar/index.js create mode 100644 node_modules/@vant/weapp/dist/notice-bar/index.json create mode 100644 node_modules/@vant/weapp/dist/notice-bar/index.wxml create mode 100644 node_modules/@vant/weapp/dist/notice-bar/index.wxs create mode 100644 node_modules/@vant/weapp/dist/notice-bar/index.wxss create mode 100644 node_modules/@vant/weapp/dist/notify/index.d.ts create mode 100644 node_modules/@vant/weapp/dist/notify/index.js create mode 100644 node_modules/@vant/weapp/dist/notify/index.json create mode 100644 node_modules/@vant/weapp/dist/notify/index.wxml create mode 100644 node_modules/@vant/weapp/dist/notify/index.wxs create mode 100644 node_modules/@vant/weapp/dist/notify/index.wxss create mode 100644 node_modules/@vant/weapp/dist/notify/notify.d.ts create mode 100644 node_modules/@vant/weapp/dist/notify/notify.js create mode 100644 node_modules/@vant/weapp/dist/overlay/index.d.ts create mode 100644 node_modules/@vant/weapp/dist/overlay/index.js create mode 100644 node_modules/@vant/weapp/dist/overlay/index.json create mode 100644 node_modules/@vant/weapp/dist/overlay/index.wxml create mode 100644 node_modules/@vant/weapp/dist/overlay/index.wxss create mode 100644 node_modules/@vant/weapp/dist/panel/index.d.ts create mode 100644 node_modules/@vant/weapp/dist/panel/index.js create mode 100644 node_modules/@vant/weapp/dist/panel/index.json create mode 100644 node_modules/@vant/weapp/dist/panel/index.wxml create mode 100644 node_modules/@vant/weapp/dist/panel/index.wxss create mode 100644 node_modules/@vant/weapp/dist/picker-column/index.d.ts create mode 100644 node_modules/@vant/weapp/dist/picker-column/index.js create mode 100644 node_modules/@vant/weapp/dist/picker-column/index.json create mode 100644 node_modules/@vant/weapp/dist/picker-column/index.wxml create mode 100644 node_modules/@vant/weapp/dist/picker-column/index.wxs create mode 100644 node_modules/@vant/weapp/dist/picker-column/index.wxss create mode 100644 node_modules/@vant/weapp/dist/picker/index.d.ts create mode 100644 node_modules/@vant/weapp/dist/picker/index.js create mode 100644 node_modules/@vant/weapp/dist/picker/index.json create mode 100644 node_modules/@vant/weapp/dist/picker/index.wxml create mode 100644 node_modules/@vant/weapp/dist/picker/index.wxs create mode 100644 node_modules/@vant/weapp/dist/picker/index.wxss create mode 100644 node_modules/@vant/weapp/dist/picker/shared.d.ts create mode 100644 node_modules/@vant/weapp/dist/picker/shared.js create mode 100644 node_modules/@vant/weapp/dist/picker/toolbar.wxml create mode 100644 node_modules/@vant/weapp/dist/popup/index.d.ts create mode 100644 node_modules/@vant/weapp/dist/popup/index.js create mode 100644 node_modules/@vant/weapp/dist/popup/index.json create mode 100644 node_modules/@vant/weapp/dist/popup/index.wxml create mode 100644 node_modules/@vant/weapp/dist/popup/index.wxs create mode 100644 node_modules/@vant/weapp/dist/popup/index.wxss create mode 100644 node_modules/@vant/weapp/dist/progress/index.d.ts create mode 100644 node_modules/@vant/weapp/dist/progress/index.js create mode 100644 node_modules/@vant/weapp/dist/progress/index.json create mode 100644 node_modules/@vant/weapp/dist/progress/index.wxml create mode 100644 node_modules/@vant/weapp/dist/progress/index.wxs create mode 100644 node_modules/@vant/weapp/dist/progress/index.wxss create mode 100644 node_modules/@vant/weapp/dist/radio-group/index.d.ts create mode 100644 node_modules/@vant/weapp/dist/radio-group/index.js create mode 100644 node_modules/@vant/weapp/dist/radio-group/index.json create mode 100644 node_modules/@vant/weapp/dist/radio-group/index.wxml create mode 100644 node_modules/@vant/weapp/dist/radio-group/index.wxss create mode 100644 node_modules/@vant/weapp/dist/radio/index.d.ts create mode 100644 node_modules/@vant/weapp/dist/radio/index.js create mode 100644 node_modules/@vant/weapp/dist/radio/index.json create mode 100644 node_modules/@vant/weapp/dist/radio/index.wxml create mode 100644 node_modules/@vant/weapp/dist/radio/index.wxs create mode 100644 node_modules/@vant/weapp/dist/radio/index.wxss create mode 100644 node_modules/@vant/weapp/dist/rate/index.d.ts create mode 100644 node_modules/@vant/weapp/dist/rate/index.js create mode 100644 node_modules/@vant/weapp/dist/rate/index.json create mode 100644 node_modules/@vant/weapp/dist/rate/index.wxml create mode 100644 node_modules/@vant/weapp/dist/rate/index.wxss create mode 100644 node_modules/@vant/weapp/dist/row/index.d.ts create mode 100644 node_modules/@vant/weapp/dist/row/index.js create mode 100644 node_modules/@vant/weapp/dist/row/index.json create mode 100644 node_modules/@vant/weapp/dist/row/index.wxml create mode 100644 node_modules/@vant/weapp/dist/row/index.wxs create mode 100644 node_modules/@vant/weapp/dist/row/index.wxss create mode 100644 node_modules/@vant/weapp/dist/search/index.d.ts create mode 100644 node_modules/@vant/weapp/dist/search/index.js create mode 100644 node_modules/@vant/weapp/dist/search/index.json create mode 100644 node_modules/@vant/weapp/dist/search/index.wxml create mode 100644 node_modules/@vant/weapp/dist/search/index.wxss create mode 100644 node_modules/@vant/weapp/dist/share-sheet/index.d.ts create mode 100644 node_modules/@vant/weapp/dist/share-sheet/index.js create mode 100644 node_modules/@vant/weapp/dist/share-sheet/index.json create mode 100644 node_modules/@vant/weapp/dist/share-sheet/index.wxml create mode 100644 node_modules/@vant/weapp/dist/share-sheet/index.wxs create mode 100644 node_modules/@vant/weapp/dist/share-sheet/index.wxss create mode 100644 node_modules/@vant/weapp/dist/share-sheet/options.d.ts create mode 100644 node_modules/@vant/weapp/dist/share-sheet/options.js create mode 100644 node_modules/@vant/weapp/dist/share-sheet/options.json create mode 100644 node_modules/@vant/weapp/dist/share-sheet/options.wxml create mode 100644 node_modules/@vant/weapp/dist/share-sheet/options.wxs create mode 100644 node_modules/@vant/weapp/dist/share-sheet/options.wxss create mode 100644 node_modules/@vant/weapp/dist/sidebar-item/index.d.ts create mode 100644 node_modules/@vant/weapp/dist/sidebar-item/index.js create mode 100644 node_modules/@vant/weapp/dist/sidebar-item/index.json create mode 100644 node_modules/@vant/weapp/dist/sidebar-item/index.wxml create mode 100644 node_modules/@vant/weapp/dist/sidebar-item/index.wxss create mode 100644 node_modules/@vant/weapp/dist/sidebar/index.d.ts create mode 100644 node_modules/@vant/weapp/dist/sidebar/index.js create mode 100644 node_modules/@vant/weapp/dist/sidebar/index.json create mode 100644 node_modules/@vant/weapp/dist/sidebar/index.wxml create mode 100644 node_modules/@vant/weapp/dist/sidebar/index.wxss create mode 100644 node_modules/@vant/weapp/dist/skeleton/index.d.ts create mode 100644 node_modules/@vant/weapp/dist/skeleton/index.js create mode 100644 node_modules/@vant/weapp/dist/skeleton/index.json create mode 100644 node_modules/@vant/weapp/dist/skeleton/index.wxml create mode 100644 node_modules/@vant/weapp/dist/skeleton/index.wxss create mode 100644 node_modules/@vant/weapp/dist/slider/index.d.ts create mode 100644 node_modules/@vant/weapp/dist/slider/index.js create mode 100644 node_modules/@vant/weapp/dist/slider/index.json create mode 100644 node_modules/@vant/weapp/dist/slider/index.wxml create mode 100644 node_modules/@vant/weapp/dist/slider/index.wxs create mode 100644 node_modules/@vant/weapp/dist/slider/index.wxss create mode 100644 node_modules/@vant/weapp/dist/stepper/index.d.ts create mode 100644 node_modules/@vant/weapp/dist/stepper/index.js create mode 100644 node_modules/@vant/weapp/dist/stepper/index.json create mode 100644 node_modules/@vant/weapp/dist/stepper/index.wxml create mode 100644 node_modules/@vant/weapp/dist/stepper/index.wxs create mode 100644 node_modules/@vant/weapp/dist/stepper/index.wxss create mode 100644 node_modules/@vant/weapp/dist/steps/index.d.ts create mode 100644 node_modules/@vant/weapp/dist/steps/index.js create mode 100644 node_modules/@vant/weapp/dist/steps/index.json create mode 100644 node_modules/@vant/weapp/dist/steps/index.wxml create mode 100644 node_modules/@vant/weapp/dist/steps/index.wxss create mode 100644 node_modules/@vant/weapp/dist/sticky/index.d.ts create mode 100644 node_modules/@vant/weapp/dist/sticky/index.js create mode 100644 node_modules/@vant/weapp/dist/sticky/index.json create mode 100644 node_modules/@vant/weapp/dist/sticky/index.wxml create mode 100644 node_modules/@vant/weapp/dist/sticky/index.wxs create mode 100644 node_modules/@vant/weapp/dist/sticky/index.wxss create mode 100644 node_modules/@vant/weapp/dist/submit-bar/index.d.ts create mode 100644 node_modules/@vant/weapp/dist/submit-bar/index.js create mode 100644 node_modules/@vant/weapp/dist/submit-bar/index.json create mode 100644 node_modules/@vant/weapp/dist/submit-bar/index.wxml create mode 100644 node_modules/@vant/weapp/dist/submit-bar/index.wxss create mode 100644 node_modules/@vant/weapp/dist/swipe-cell/index.d.ts create mode 100644 node_modules/@vant/weapp/dist/swipe-cell/index.js create mode 100644 node_modules/@vant/weapp/dist/swipe-cell/index.json create mode 100644 node_modules/@vant/weapp/dist/swipe-cell/index.wxml create mode 100644 node_modules/@vant/weapp/dist/swipe-cell/index.wxss create mode 100644 node_modules/@vant/weapp/dist/switch/index.d.ts create mode 100644 node_modules/@vant/weapp/dist/switch/index.js create mode 100644 node_modules/@vant/weapp/dist/switch/index.json create mode 100644 node_modules/@vant/weapp/dist/switch/index.wxml create mode 100644 node_modules/@vant/weapp/dist/switch/index.wxs create mode 100644 node_modules/@vant/weapp/dist/switch/index.wxss create mode 100644 node_modules/@vant/weapp/dist/tab/index.d.ts create mode 100644 node_modules/@vant/weapp/dist/tab/index.js create mode 100644 node_modules/@vant/weapp/dist/tab/index.json create mode 100644 node_modules/@vant/weapp/dist/tab/index.wxml create mode 100644 node_modules/@vant/weapp/dist/tab/index.wxss create mode 100644 node_modules/@vant/weapp/dist/tabbar-item/index.d.ts create mode 100644 node_modules/@vant/weapp/dist/tabbar-item/index.js create mode 100644 node_modules/@vant/weapp/dist/tabbar-item/index.json create mode 100644 node_modules/@vant/weapp/dist/tabbar-item/index.wxml create mode 100644 node_modules/@vant/weapp/dist/tabbar-item/index.wxss create mode 100644 node_modules/@vant/weapp/dist/tabbar/index.d.ts create mode 100644 node_modules/@vant/weapp/dist/tabbar/index.js create mode 100644 node_modules/@vant/weapp/dist/tabbar/index.json create mode 100644 node_modules/@vant/weapp/dist/tabbar/index.wxml create mode 100644 node_modules/@vant/weapp/dist/tabbar/index.wxss create mode 100644 node_modules/@vant/weapp/dist/tabs/index.d.ts create mode 100644 node_modules/@vant/weapp/dist/tabs/index.js create mode 100644 node_modules/@vant/weapp/dist/tabs/index.json create mode 100644 node_modules/@vant/weapp/dist/tabs/index.wxml create mode 100644 node_modules/@vant/weapp/dist/tabs/index.wxs create mode 100644 node_modules/@vant/weapp/dist/tabs/index.wxss create mode 100644 node_modules/@vant/weapp/dist/tag/index.d.ts create mode 100644 node_modules/@vant/weapp/dist/tag/index.js create mode 100644 node_modules/@vant/weapp/dist/tag/index.json create mode 100644 node_modules/@vant/weapp/dist/tag/index.wxml create mode 100644 node_modules/@vant/weapp/dist/tag/index.wxs create mode 100644 node_modules/@vant/weapp/dist/tag/index.wxss create mode 100644 node_modules/@vant/weapp/dist/toast/index.d.ts create mode 100644 node_modules/@vant/weapp/dist/toast/index.js create mode 100644 node_modules/@vant/weapp/dist/toast/index.json create mode 100644 node_modules/@vant/weapp/dist/toast/index.wxml create mode 100644 node_modules/@vant/weapp/dist/toast/index.wxss create mode 100644 node_modules/@vant/weapp/dist/toast/toast.d.ts create mode 100644 node_modules/@vant/weapp/dist/toast/toast.js create mode 100644 node_modules/@vant/weapp/dist/transition/index.d.ts create mode 100644 node_modules/@vant/weapp/dist/transition/index.js create mode 100644 node_modules/@vant/weapp/dist/transition/index.json create mode 100644 node_modules/@vant/weapp/dist/transition/index.wxml create mode 100644 node_modules/@vant/weapp/dist/transition/index.wxs create mode 100644 node_modules/@vant/weapp/dist/transition/index.wxss create mode 100644 node_modules/@vant/weapp/dist/tree-select/index.d.ts create mode 100644 node_modules/@vant/weapp/dist/tree-select/index.js create mode 100644 node_modules/@vant/weapp/dist/tree-select/index.json create mode 100644 node_modules/@vant/weapp/dist/tree-select/index.wxml create mode 100644 node_modules/@vant/weapp/dist/tree-select/index.wxs create mode 100644 node_modules/@vant/weapp/dist/tree-select/index.wxss create mode 100644 node_modules/@vant/weapp/dist/uploader/index.d.ts create mode 100644 node_modules/@vant/weapp/dist/uploader/index.js create mode 100644 node_modules/@vant/weapp/dist/uploader/index.json create mode 100644 node_modules/@vant/weapp/dist/uploader/index.wxml create mode 100644 node_modules/@vant/weapp/dist/uploader/index.wxs create mode 100644 node_modules/@vant/weapp/dist/uploader/index.wxss create mode 100644 node_modules/@vant/weapp/dist/uploader/shared.d.ts create mode 100644 node_modules/@vant/weapp/dist/uploader/shared.js create mode 100644 node_modules/@vant/weapp/dist/uploader/utils.d.ts create mode 100644 node_modules/@vant/weapp/dist/uploader/utils.js create mode 100644 node_modules/@vant/weapp/dist/wxs/add-unit.wxs create mode 100644 node_modules/@vant/weapp/dist/wxs/array.wxs create mode 100644 node_modules/@vant/weapp/dist/wxs/bem.wxs create mode 100644 node_modules/@vant/weapp/dist/wxs/memoize.wxs create mode 100644 node_modules/@vant/weapp/dist/wxs/object.wxs create mode 100644 node_modules/@vant/weapp/dist/wxs/style.wxs create mode 100644 node_modules/@vant/weapp/dist/wxs/utils.wxs create mode 100644 node_modules/@vant/weapp/lib/action-sheet/index.js create mode 100644 node_modules/@vant/weapp/lib/action-sheet/index.json create mode 100644 node_modules/@vant/weapp/lib/action-sheet/index.wxml create mode 100644 node_modules/@vant/weapp/lib/action-sheet/index.wxss create mode 100644 node_modules/@vant/weapp/lib/area/index.js create mode 100644 node_modules/@vant/weapp/lib/area/index.json create mode 100644 node_modules/@vant/weapp/lib/area/index.wxml create mode 100644 node_modules/@vant/weapp/lib/area/index.wxs create mode 100644 node_modules/@vant/weapp/lib/area/index.wxss create mode 100644 node_modules/@vant/weapp/lib/button/index.js create mode 100644 node_modules/@vant/weapp/lib/button/index.json create mode 100644 node_modules/@vant/weapp/lib/button/index.wxml create mode 100644 node_modules/@vant/weapp/lib/button/index.wxs create mode 100644 node_modules/@vant/weapp/lib/button/index.wxss create mode 100644 node_modules/@vant/weapp/lib/calendar/calendar.wxml create mode 100644 node_modules/@vant/weapp/lib/calendar/components/header/index.js create mode 100644 node_modules/@vant/weapp/lib/calendar/components/header/index.json create mode 100644 node_modules/@vant/weapp/lib/calendar/components/header/index.wxml create mode 100644 node_modules/@vant/weapp/lib/calendar/components/header/index.wxss create mode 100644 node_modules/@vant/weapp/lib/calendar/components/month/index.js create mode 100644 node_modules/@vant/weapp/lib/calendar/components/month/index.json create mode 100644 node_modules/@vant/weapp/lib/calendar/components/month/index.wxml create mode 100644 node_modules/@vant/weapp/lib/calendar/components/month/index.wxs create mode 100644 node_modules/@vant/weapp/lib/calendar/components/month/index.wxss create mode 100644 node_modules/@vant/weapp/lib/calendar/index.js create mode 100644 node_modules/@vant/weapp/lib/calendar/index.json create mode 100644 node_modules/@vant/weapp/lib/calendar/index.wxml create mode 100644 node_modules/@vant/weapp/lib/calendar/index.wxs create mode 100644 node_modules/@vant/weapp/lib/calendar/index.wxss create mode 100644 node_modules/@vant/weapp/lib/calendar/utils.js create mode 100644 node_modules/@vant/weapp/lib/calendar/utils.wxs create mode 100644 node_modules/@vant/weapp/lib/card/index.js create mode 100644 node_modules/@vant/weapp/lib/card/index.json create mode 100644 node_modules/@vant/weapp/lib/card/index.wxml create mode 100644 node_modules/@vant/weapp/lib/card/index.wxss create mode 100644 node_modules/@vant/weapp/lib/cell-group/index.js create mode 100644 node_modules/@vant/weapp/lib/cell-group/index.json create mode 100644 node_modules/@vant/weapp/lib/cell-group/index.wxml create mode 100644 node_modules/@vant/weapp/lib/cell-group/index.wxss create mode 100644 node_modules/@vant/weapp/lib/cell/index.js create mode 100644 node_modules/@vant/weapp/lib/cell/index.json create mode 100644 node_modules/@vant/weapp/lib/cell/index.wxml create mode 100644 node_modules/@vant/weapp/lib/cell/index.wxs create mode 100644 node_modules/@vant/weapp/lib/cell/index.wxss create mode 100644 node_modules/@vant/weapp/lib/checkbox-group/index.js create mode 100644 node_modules/@vant/weapp/lib/checkbox-group/index.json create mode 100644 node_modules/@vant/weapp/lib/checkbox-group/index.wxml create mode 100644 node_modules/@vant/weapp/lib/checkbox-group/index.wxss create mode 100644 node_modules/@vant/weapp/lib/checkbox/index.js create mode 100644 node_modules/@vant/weapp/lib/checkbox/index.json create mode 100644 node_modules/@vant/weapp/lib/checkbox/index.wxml create mode 100644 node_modules/@vant/weapp/lib/checkbox/index.wxs create mode 100644 node_modules/@vant/weapp/lib/checkbox/index.wxss create mode 100644 node_modules/@vant/weapp/lib/circle/canvas.js create mode 100644 node_modules/@vant/weapp/lib/circle/index.js create mode 100644 node_modules/@vant/weapp/lib/circle/index.json create mode 100644 node_modules/@vant/weapp/lib/circle/index.wxml create mode 100644 node_modules/@vant/weapp/lib/circle/index.wxss create mode 100644 node_modules/@vant/weapp/lib/col/index.js create mode 100644 node_modules/@vant/weapp/lib/col/index.json create mode 100644 node_modules/@vant/weapp/lib/col/index.wxml create mode 100644 node_modules/@vant/weapp/lib/col/index.wxs create mode 100644 node_modules/@vant/weapp/lib/col/index.wxss create mode 100644 node_modules/@vant/weapp/lib/collapse-item/animate.js create mode 100644 node_modules/@vant/weapp/lib/collapse-item/index.js create mode 100644 node_modules/@vant/weapp/lib/collapse-item/index.json create mode 100644 node_modules/@vant/weapp/lib/collapse-item/index.wxml create mode 100644 node_modules/@vant/weapp/lib/collapse-item/index.wxss create mode 100644 node_modules/@vant/weapp/lib/collapse/index.js create mode 100644 node_modules/@vant/weapp/lib/collapse/index.json create mode 100644 node_modules/@vant/weapp/lib/collapse/index.wxml create mode 100644 node_modules/@vant/weapp/lib/collapse/index.wxss create mode 100644 node_modules/@vant/weapp/lib/common/color.js create mode 100644 node_modules/@vant/weapp/lib/common/component.js create mode 100644 node_modules/@vant/weapp/lib/common/index.wxss create mode 100644 node_modules/@vant/weapp/lib/common/relation.js create mode 100644 node_modules/@vant/weapp/lib/common/style/clearfix.wxss create mode 100644 node_modules/@vant/weapp/lib/common/style/ellipsis.wxss create mode 100644 node_modules/@vant/weapp/lib/common/style/hairline.wxss create mode 100644 node_modules/@vant/weapp/lib/common/style/mixins/clearfix.wxss create mode 100644 node_modules/@vant/weapp/lib/common/style/mixins/ellipsis.wxss create mode 100644 node_modules/@vant/weapp/lib/common/style/mixins/hairline.wxss create mode 100644 node_modules/@vant/weapp/lib/common/style/theme.wxss create mode 100644 node_modules/@vant/weapp/lib/common/style/var.wxss create mode 100644 node_modules/@vant/weapp/lib/common/utils.js create mode 100644 node_modules/@vant/weapp/lib/common/validator.js create mode 100644 node_modules/@vant/weapp/lib/common/version.js create mode 100644 node_modules/@vant/weapp/lib/config-provider/index.js create mode 100644 node_modules/@vant/weapp/lib/config-provider/index.json create mode 100644 node_modules/@vant/weapp/lib/config-provider/index.wxml create mode 100644 node_modules/@vant/weapp/lib/config-provider/index.wxs create mode 100644 node_modules/@vant/weapp/lib/count-down/index.js create mode 100644 node_modules/@vant/weapp/lib/count-down/index.json create mode 100644 node_modules/@vant/weapp/lib/count-down/index.wxml create mode 100644 node_modules/@vant/weapp/lib/count-down/index.wxss create mode 100644 node_modules/@vant/weapp/lib/count-down/utils.js create mode 100644 node_modules/@vant/weapp/lib/datetime-picker/index.js create mode 100644 node_modules/@vant/weapp/lib/datetime-picker/index.json create mode 100644 node_modules/@vant/weapp/lib/datetime-picker/index.wxml create mode 100644 node_modules/@vant/weapp/lib/datetime-picker/index.wxss create mode 100644 node_modules/@vant/weapp/lib/definitions/index.js create mode 100644 node_modules/@vant/weapp/lib/dialog/dialog.js create mode 100644 node_modules/@vant/weapp/lib/dialog/index.js create mode 100644 node_modules/@vant/weapp/lib/dialog/index.json create mode 100644 node_modules/@vant/weapp/lib/dialog/index.wxml create mode 100644 node_modules/@vant/weapp/lib/dialog/index.wxss create mode 100644 node_modules/@vant/weapp/lib/divider/index.js create mode 100644 node_modules/@vant/weapp/lib/divider/index.json create mode 100644 node_modules/@vant/weapp/lib/divider/index.wxml create mode 100644 node_modules/@vant/weapp/lib/divider/index.wxs create mode 100644 node_modules/@vant/weapp/lib/divider/index.wxss create mode 100644 node_modules/@vant/weapp/lib/dropdown-item/index.js create mode 100644 node_modules/@vant/weapp/lib/dropdown-item/index.json create mode 100644 node_modules/@vant/weapp/lib/dropdown-item/index.wxml create mode 100644 node_modules/@vant/weapp/lib/dropdown-item/index.wxss create mode 100644 node_modules/@vant/weapp/lib/dropdown-item/shared.js create mode 100644 node_modules/@vant/weapp/lib/dropdown-menu/index.js create mode 100644 node_modules/@vant/weapp/lib/dropdown-menu/index.json create mode 100644 node_modules/@vant/weapp/lib/dropdown-menu/index.wxml create mode 100644 node_modules/@vant/weapp/lib/dropdown-menu/index.wxs create mode 100644 node_modules/@vant/weapp/lib/dropdown-menu/index.wxss create mode 100644 node_modules/@vant/weapp/lib/empty/index.js create mode 100644 node_modules/@vant/weapp/lib/empty/index.json create mode 100644 node_modules/@vant/weapp/lib/empty/index.wxml create mode 100644 node_modules/@vant/weapp/lib/empty/index.wxs create mode 100644 node_modules/@vant/weapp/lib/empty/index.wxss create mode 100644 node_modules/@vant/weapp/lib/field/index.js create mode 100644 node_modules/@vant/weapp/lib/field/index.json create mode 100644 node_modules/@vant/weapp/lib/field/index.wxml create mode 100644 node_modules/@vant/weapp/lib/field/index.wxs create mode 100644 node_modules/@vant/weapp/lib/field/index.wxss create mode 100644 node_modules/@vant/weapp/lib/field/input.wxml create mode 100644 node_modules/@vant/weapp/lib/field/props.js create mode 100644 node_modules/@vant/weapp/lib/field/textarea.wxml create mode 100644 node_modules/@vant/weapp/lib/goods-action-button/index.js create mode 100644 node_modules/@vant/weapp/lib/goods-action-button/index.json create mode 100644 node_modules/@vant/weapp/lib/goods-action-button/index.wxml create mode 100644 node_modules/@vant/weapp/lib/goods-action-button/index.wxss create mode 100644 node_modules/@vant/weapp/lib/goods-action-icon/index.js create mode 100644 node_modules/@vant/weapp/lib/goods-action-icon/index.json create mode 100644 node_modules/@vant/weapp/lib/goods-action-icon/index.wxml create mode 100644 node_modules/@vant/weapp/lib/goods-action-icon/index.wxss create mode 100644 node_modules/@vant/weapp/lib/goods-action/index.js create mode 100644 node_modules/@vant/weapp/lib/goods-action/index.json create mode 100644 node_modules/@vant/weapp/lib/goods-action/index.wxml create mode 100644 node_modules/@vant/weapp/lib/goods-action/index.wxss create mode 100644 node_modules/@vant/weapp/lib/grid-item/index.js create mode 100644 node_modules/@vant/weapp/lib/grid-item/index.json create mode 100644 node_modules/@vant/weapp/lib/grid-item/index.wxml create mode 100644 node_modules/@vant/weapp/lib/grid-item/index.wxs create mode 100644 node_modules/@vant/weapp/lib/grid-item/index.wxss create mode 100644 node_modules/@vant/weapp/lib/grid/index.js create mode 100644 node_modules/@vant/weapp/lib/grid/index.json create mode 100644 node_modules/@vant/weapp/lib/grid/index.wxml create mode 100644 node_modules/@vant/weapp/lib/grid/index.wxs create mode 100644 node_modules/@vant/weapp/lib/grid/index.wxss create mode 100644 node_modules/@vant/weapp/lib/icon/index.js create mode 100644 node_modules/@vant/weapp/lib/icon/index.json create mode 100644 node_modules/@vant/weapp/lib/icon/index.wxml create mode 100644 node_modules/@vant/weapp/lib/icon/index.wxs create mode 100644 node_modules/@vant/weapp/lib/icon/index.wxss create mode 100644 node_modules/@vant/weapp/lib/image/index.js create mode 100644 node_modules/@vant/weapp/lib/image/index.json create mode 100644 node_modules/@vant/weapp/lib/image/index.wxml create mode 100644 node_modules/@vant/weapp/lib/image/index.wxs create mode 100644 node_modules/@vant/weapp/lib/image/index.wxss create mode 100644 node_modules/@vant/weapp/lib/index-anchor/index.js create mode 100644 node_modules/@vant/weapp/lib/index-anchor/index.json create mode 100644 node_modules/@vant/weapp/lib/index-anchor/index.wxml create mode 100644 node_modules/@vant/weapp/lib/index-anchor/index.wxss create mode 100644 node_modules/@vant/weapp/lib/index-bar/index.js create mode 100644 node_modules/@vant/weapp/lib/index-bar/index.json create mode 100644 node_modules/@vant/weapp/lib/index-bar/index.wxml create mode 100644 node_modules/@vant/weapp/lib/index-bar/index.wxss create mode 100644 node_modules/@vant/weapp/lib/info/index.js create mode 100644 node_modules/@vant/weapp/lib/info/index.json create mode 100644 node_modules/@vant/weapp/lib/info/index.wxml create mode 100644 node_modules/@vant/weapp/lib/info/index.wxss create mode 100644 node_modules/@vant/weapp/lib/loading/index.js create mode 100644 node_modules/@vant/weapp/lib/loading/index.json create mode 100644 node_modules/@vant/weapp/lib/loading/index.wxml create mode 100644 node_modules/@vant/weapp/lib/loading/index.wxs create mode 100644 node_modules/@vant/weapp/lib/loading/index.wxss create mode 100644 node_modules/@vant/weapp/lib/mixins/basic.js create mode 100644 node_modules/@vant/weapp/lib/mixins/button.js create mode 100644 node_modules/@vant/weapp/lib/mixins/link.js create mode 100644 node_modules/@vant/weapp/lib/mixins/page-scroll.js create mode 100644 node_modules/@vant/weapp/lib/mixins/touch.js create mode 100644 node_modules/@vant/weapp/lib/mixins/transition.js create mode 100644 node_modules/@vant/weapp/lib/nav-bar/index.js create mode 100644 node_modules/@vant/weapp/lib/nav-bar/index.json create mode 100644 node_modules/@vant/weapp/lib/nav-bar/index.wxml create mode 100644 node_modules/@vant/weapp/lib/nav-bar/index.wxs create mode 100644 node_modules/@vant/weapp/lib/nav-bar/index.wxss create mode 100644 node_modules/@vant/weapp/lib/notice-bar/index.js create mode 100644 node_modules/@vant/weapp/lib/notice-bar/index.json create mode 100644 node_modules/@vant/weapp/lib/notice-bar/index.wxml create mode 100644 node_modules/@vant/weapp/lib/notice-bar/index.wxs create mode 100644 node_modules/@vant/weapp/lib/notice-bar/index.wxss create mode 100644 node_modules/@vant/weapp/lib/notify/index.js create mode 100644 node_modules/@vant/weapp/lib/notify/index.json create mode 100644 node_modules/@vant/weapp/lib/notify/index.wxml create mode 100644 node_modules/@vant/weapp/lib/notify/index.wxs create mode 100644 node_modules/@vant/weapp/lib/notify/index.wxss create mode 100644 node_modules/@vant/weapp/lib/notify/notify.js create mode 100644 node_modules/@vant/weapp/lib/overlay/index.js create mode 100644 node_modules/@vant/weapp/lib/overlay/index.json create mode 100644 node_modules/@vant/weapp/lib/overlay/index.wxml create mode 100644 node_modules/@vant/weapp/lib/overlay/index.wxss create mode 100644 node_modules/@vant/weapp/lib/panel/index.js create mode 100644 node_modules/@vant/weapp/lib/panel/index.json create mode 100644 node_modules/@vant/weapp/lib/panel/index.wxml create mode 100644 node_modules/@vant/weapp/lib/panel/index.wxss create mode 100644 node_modules/@vant/weapp/lib/picker-column/index.js create mode 100644 node_modules/@vant/weapp/lib/picker-column/index.json create mode 100644 node_modules/@vant/weapp/lib/picker-column/index.wxml create mode 100644 node_modules/@vant/weapp/lib/picker-column/index.wxs create mode 100644 node_modules/@vant/weapp/lib/picker-column/index.wxss create mode 100644 node_modules/@vant/weapp/lib/picker/index.js create mode 100644 node_modules/@vant/weapp/lib/picker/index.json create mode 100644 node_modules/@vant/weapp/lib/picker/index.wxml create mode 100644 node_modules/@vant/weapp/lib/picker/index.wxs create mode 100644 node_modules/@vant/weapp/lib/picker/index.wxss create mode 100644 node_modules/@vant/weapp/lib/picker/shared.js create mode 100644 node_modules/@vant/weapp/lib/picker/toolbar.wxml create mode 100644 node_modules/@vant/weapp/lib/popup/index.js create mode 100644 node_modules/@vant/weapp/lib/popup/index.json create mode 100644 node_modules/@vant/weapp/lib/popup/index.wxml create mode 100644 node_modules/@vant/weapp/lib/popup/index.wxs create mode 100644 node_modules/@vant/weapp/lib/popup/index.wxss create mode 100644 node_modules/@vant/weapp/lib/progress/index.js create mode 100644 node_modules/@vant/weapp/lib/progress/index.json create mode 100644 node_modules/@vant/weapp/lib/progress/index.wxml create mode 100644 node_modules/@vant/weapp/lib/progress/index.wxs create mode 100644 node_modules/@vant/weapp/lib/progress/index.wxss create mode 100644 node_modules/@vant/weapp/lib/radio-group/index.js create mode 100644 node_modules/@vant/weapp/lib/radio-group/index.json create mode 100644 node_modules/@vant/weapp/lib/radio-group/index.wxml create mode 100644 node_modules/@vant/weapp/lib/radio-group/index.wxss create mode 100644 node_modules/@vant/weapp/lib/radio/index.js create mode 100644 node_modules/@vant/weapp/lib/radio/index.json create mode 100644 node_modules/@vant/weapp/lib/radio/index.wxml create mode 100644 node_modules/@vant/weapp/lib/radio/index.wxs create mode 100644 node_modules/@vant/weapp/lib/radio/index.wxss create mode 100644 node_modules/@vant/weapp/lib/rate/index.js create mode 100644 node_modules/@vant/weapp/lib/rate/index.json create mode 100644 node_modules/@vant/weapp/lib/rate/index.wxml create mode 100644 node_modules/@vant/weapp/lib/rate/index.wxss create mode 100644 node_modules/@vant/weapp/lib/row/index.js create mode 100644 node_modules/@vant/weapp/lib/row/index.json create mode 100644 node_modules/@vant/weapp/lib/row/index.wxml create mode 100644 node_modules/@vant/weapp/lib/row/index.wxs create mode 100644 node_modules/@vant/weapp/lib/row/index.wxss create mode 100644 node_modules/@vant/weapp/lib/search/index.js create mode 100644 node_modules/@vant/weapp/lib/search/index.json create mode 100644 node_modules/@vant/weapp/lib/search/index.wxml create mode 100644 node_modules/@vant/weapp/lib/search/index.wxss create mode 100644 node_modules/@vant/weapp/lib/share-sheet/index.js create mode 100644 node_modules/@vant/weapp/lib/share-sheet/index.json create mode 100644 node_modules/@vant/weapp/lib/share-sheet/index.wxml create mode 100644 node_modules/@vant/weapp/lib/share-sheet/index.wxs create mode 100644 node_modules/@vant/weapp/lib/share-sheet/index.wxss create mode 100644 node_modules/@vant/weapp/lib/share-sheet/options.js create mode 100644 node_modules/@vant/weapp/lib/share-sheet/options.json create mode 100644 node_modules/@vant/weapp/lib/share-sheet/options.wxml create mode 100644 node_modules/@vant/weapp/lib/share-sheet/options.wxs create mode 100644 node_modules/@vant/weapp/lib/share-sheet/options.wxss create mode 100644 node_modules/@vant/weapp/lib/sidebar-item/index.js create mode 100644 node_modules/@vant/weapp/lib/sidebar-item/index.json create mode 100644 node_modules/@vant/weapp/lib/sidebar-item/index.wxml create mode 100644 node_modules/@vant/weapp/lib/sidebar-item/index.wxss create mode 100644 node_modules/@vant/weapp/lib/sidebar/index.js create mode 100644 node_modules/@vant/weapp/lib/sidebar/index.json create mode 100644 node_modules/@vant/weapp/lib/sidebar/index.wxml create mode 100644 node_modules/@vant/weapp/lib/sidebar/index.wxss create mode 100644 node_modules/@vant/weapp/lib/skeleton/index.js create mode 100644 node_modules/@vant/weapp/lib/skeleton/index.json create mode 100644 node_modules/@vant/weapp/lib/skeleton/index.wxml create mode 100644 node_modules/@vant/weapp/lib/skeleton/index.wxss create mode 100644 node_modules/@vant/weapp/lib/slider/index.js create mode 100644 node_modules/@vant/weapp/lib/slider/index.json create mode 100644 node_modules/@vant/weapp/lib/slider/index.wxml create mode 100644 node_modules/@vant/weapp/lib/slider/index.wxs create mode 100644 node_modules/@vant/weapp/lib/slider/index.wxss create mode 100644 node_modules/@vant/weapp/lib/stepper/index.js create mode 100644 node_modules/@vant/weapp/lib/stepper/index.json create mode 100644 node_modules/@vant/weapp/lib/stepper/index.wxml create mode 100644 node_modules/@vant/weapp/lib/stepper/index.wxs create mode 100644 node_modules/@vant/weapp/lib/stepper/index.wxss create mode 100644 node_modules/@vant/weapp/lib/steps/index.js create mode 100644 node_modules/@vant/weapp/lib/steps/index.json create mode 100644 node_modules/@vant/weapp/lib/steps/index.wxml create mode 100644 node_modules/@vant/weapp/lib/steps/index.wxss create mode 100644 node_modules/@vant/weapp/lib/sticky/index.js create mode 100644 node_modules/@vant/weapp/lib/sticky/index.json create mode 100644 node_modules/@vant/weapp/lib/sticky/index.wxml create mode 100644 node_modules/@vant/weapp/lib/sticky/index.wxs create mode 100644 node_modules/@vant/weapp/lib/sticky/index.wxss create mode 100644 node_modules/@vant/weapp/lib/submit-bar/index.js create mode 100644 node_modules/@vant/weapp/lib/submit-bar/index.json create mode 100644 node_modules/@vant/weapp/lib/submit-bar/index.wxml create mode 100644 node_modules/@vant/weapp/lib/submit-bar/index.wxss create mode 100644 node_modules/@vant/weapp/lib/swipe-cell/index.js create mode 100644 node_modules/@vant/weapp/lib/swipe-cell/index.json create mode 100644 node_modules/@vant/weapp/lib/swipe-cell/index.wxml create mode 100644 node_modules/@vant/weapp/lib/swipe-cell/index.wxss create mode 100644 node_modules/@vant/weapp/lib/switch/index.js create mode 100644 node_modules/@vant/weapp/lib/switch/index.json create mode 100644 node_modules/@vant/weapp/lib/switch/index.wxml create mode 100644 node_modules/@vant/weapp/lib/switch/index.wxs create mode 100644 node_modules/@vant/weapp/lib/switch/index.wxss create mode 100644 node_modules/@vant/weapp/lib/tab/index.js create mode 100644 node_modules/@vant/weapp/lib/tab/index.json create mode 100644 node_modules/@vant/weapp/lib/tab/index.wxml create mode 100644 node_modules/@vant/weapp/lib/tab/index.wxss create mode 100644 node_modules/@vant/weapp/lib/tabbar-item/index.js create mode 100644 node_modules/@vant/weapp/lib/tabbar-item/index.json create mode 100644 node_modules/@vant/weapp/lib/tabbar-item/index.wxml create mode 100644 node_modules/@vant/weapp/lib/tabbar-item/index.wxss create mode 100644 node_modules/@vant/weapp/lib/tabbar/index.js create mode 100644 node_modules/@vant/weapp/lib/tabbar/index.json create mode 100644 node_modules/@vant/weapp/lib/tabbar/index.wxml create mode 100644 node_modules/@vant/weapp/lib/tabbar/index.wxss create mode 100644 node_modules/@vant/weapp/lib/tabs/index.js create mode 100644 node_modules/@vant/weapp/lib/tabs/index.json create mode 100644 node_modules/@vant/weapp/lib/tabs/index.wxml create mode 100644 node_modules/@vant/weapp/lib/tabs/index.wxs create mode 100644 node_modules/@vant/weapp/lib/tabs/index.wxss create mode 100644 node_modules/@vant/weapp/lib/tag/index.js create mode 100644 node_modules/@vant/weapp/lib/tag/index.json create mode 100644 node_modules/@vant/weapp/lib/tag/index.wxml create mode 100644 node_modules/@vant/weapp/lib/tag/index.wxs create mode 100644 node_modules/@vant/weapp/lib/tag/index.wxss create mode 100644 node_modules/@vant/weapp/lib/toast/index.js create mode 100644 node_modules/@vant/weapp/lib/toast/index.json create mode 100644 node_modules/@vant/weapp/lib/toast/index.wxml create mode 100644 node_modules/@vant/weapp/lib/toast/index.wxss create mode 100644 node_modules/@vant/weapp/lib/toast/toast.js create mode 100644 node_modules/@vant/weapp/lib/transition/index.js create mode 100644 node_modules/@vant/weapp/lib/transition/index.json create mode 100644 node_modules/@vant/weapp/lib/transition/index.wxml create mode 100644 node_modules/@vant/weapp/lib/transition/index.wxs create mode 100644 node_modules/@vant/weapp/lib/transition/index.wxss create mode 100644 node_modules/@vant/weapp/lib/tree-select/index.js create mode 100644 node_modules/@vant/weapp/lib/tree-select/index.json create mode 100644 node_modules/@vant/weapp/lib/tree-select/index.wxml create mode 100644 node_modules/@vant/weapp/lib/tree-select/index.wxs create mode 100644 node_modules/@vant/weapp/lib/tree-select/index.wxss create mode 100644 node_modules/@vant/weapp/lib/uploader/index.js create mode 100644 node_modules/@vant/weapp/lib/uploader/index.json create mode 100644 node_modules/@vant/weapp/lib/uploader/index.wxml create mode 100644 node_modules/@vant/weapp/lib/uploader/index.wxs create mode 100644 node_modules/@vant/weapp/lib/uploader/index.wxss create mode 100644 node_modules/@vant/weapp/lib/uploader/shared.js create mode 100644 node_modules/@vant/weapp/lib/uploader/utils.js create mode 100644 node_modules/@vant/weapp/lib/wxs/add-unit.wxs create mode 100644 node_modules/@vant/weapp/lib/wxs/array.wxs create mode 100644 node_modules/@vant/weapp/lib/wxs/bem.wxs create mode 100644 node_modules/@vant/weapp/lib/wxs/memoize.wxs create mode 100644 node_modules/@vant/weapp/lib/wxs/object.wxs create mode 100644 node_modules/@vant/weapp/lib/wxs/style.wxs create mode 100644 node_modules/@vant/weapp/lib/wxs/utils.wxs create mode 100644 node_modules/@vant/weapp/package.json create mode 100644 package-lock.json create mode 100644 package.json create mode 100644 pages/allpapers/allpapers.js create mode 100644 pages/allpapers/allpapers.json create mode 100644 pages/allpapers/allpapers.wxml create mode 100644 pages/allpapers/allpapers.wxss create mode 100644 pages/camp_detail/index.js create mode 100644 pages/camp_detail/index.json create mode 100644 pages/camp_detail/index.wxml create mode 100644 pages/camp_detail/index.wxss create mode 100644 pages/camp_detail/modules/camp-service.js create mode 100644 pages/camp_detail/modules/data-fetcher.js create mode 100644 pages/camp_detail/modules/order-service.js create mode 100644 pages/camp_detail/modules/task-handler.js create mode 100644 pages/camp_detail/modules/utils.js create mode 100644 pages/camp_detail/modules/video-controller.js create mode 100644 pages/camp_list/index.js create mode 100644 pages/camp_list/index.json create mode 100644 pages/camp_list/index.wxml create mode 100644 pages/camp_list/index.wxss create mode 100644 pages/camp_task_essay_question/index.js create mode 100644 pages/camp_task_essay_question/index.json create mode 100644 pages/camp_task_essay_question/index.wxml create mode 100644 pages/camp_task_essay_question/index.wxss create mode 100644 pages/camp_task_essay_question/modules/essay-review-parse.js create mode 100644 pages/camp_task_essay_question/modules/task-service.js create mode 100644 pages/camp_task_objective_questions/index.js create mode 100644 pages/camp_task_objective_questions/index.json create mode 100644 pages/camp_task_objective_questions/index.wxml create mode 100644 pages/camp_task_objective_questions/index.wxss create mode 100644 pages/camp_task_objective_questions/modules/paper-service.js create mode 100644 pages/camp_task_objective_questions/modules/result-service.js create mode 100644 pages/camp_task_objective_questions/modules/timer-service.js create mode 100644 pages/camp_task_objective_questions_result/index.js create mode 100644 pages/camp_task_objective_questions_result/index.json create mode 100644 pages/camp_task_objective_questions_result/index.wxml create mode 100644 pages/camp_task_objective_questions_result/index.wxss create mode 100644 pages/camp_task_objective_questions_result/modules/result-service.js create mode 100644 pages/camp_task_subjective_question/index.js create mode 100644 pages/camp_task_subjective_question/index.json create mode 100644 pages/camp_task_subjective_question/index.wxml create mode 100644 pages/camp_task_subjective_question/index.wxss create mode 100644 pages/camp_task_subjective_question/modules/image-handler.js create mode 100644 pages/camp_task_subjective_question/modules/task-service.js create mode 100644 pages/camp_task_text_image/index.js create mode 100644 pages/camp_task_text_image/index.json create mode 100644 pages/camp_task_text_image/index.wxml create mode 100644 pages/camp_task_text_image/index.wxss create mode 100644 pages/camp_task_text_image/modules/task-service.js create mode 100644 pages/camp_task_text_image/modules/timer-utils.js create mode 100644 pages/caogaozhi/caogaozhi.js create mode 100644 pages/caogaozhi/caogaozhi.json create mode 100644 pages/caogaozhi/caogaozhi.wxml create mode 100644 pages/caogaozhi/caogaozhi.wxss create mode 100644 pages/chargeshop/chargeshop.js create mode 100644 pages/chargeshop/chargeshop.json create mode 100644 pages/chargeshop/chargeshop.wxml create mode 100644 pages/chargeshop/chargeshop.wxss create mode 100644 pages/classcommunityitemlist/classcommunityitemlist.js create mode 100644 pages/classcommunityitemlist/classcommunityitemlist.json create mode 100644 pages/classcommunityitemlist/classcommunityitemlist.wxml create mode 100644 pages/classcommunityitemlist/classcommunityitemlist.wxss create mode 100644 pages/classcourselearning/classcourselearning.js create mode 100644 pages/classcourselearning/classcourselearning.json create mode 100644 pages/classcourselearning/classcourselearning.wxml create mode 100644 pages/classcourselearning/classcourselearning.wxss create mode 100644 pages/classindex/classindex.js create mode 100644 pages/classindex/classindex.json create mode 100644 pages/classindex/classindex.wxml create mode 100644 pages/classindex/classindex.wxss create mode 100644 pages/collectioncourse/collectioncourse.js create mode 100644 pages/collectioncourse/collectioncourse.json create mode 100644 pages/collectioncourse/collectioncourse.wxml create mode 100644 pages/collectioncourse/collectioncourse.wxss create mode 100644 pages/collectionsub/collectionsub.js create mode 100644 pages/collectionsub/collectionsub.json create mode 100644 pages/collectionsub/collectionsub.wxml create mode 100644 pages/collectionsub/collectionsub.wxss create mode 100644 pages/communityinfo/communityinfo.js create mode 100644 pages/communityinfo/communityinfo.json create mode 100644 pages/communityinfo/communityinfo.wxml create mode 100644 pages/communityinfo/communityinfo.wxss create mode 100644 pages/communityinfocomment/communityinfocomment.js create mode 100644 pages/communityinfocomment/communityinfocomment.json create mode 100644 pages/communityinfocomment/communityinfocomment.wxml create mode 100644 pages/communityinfocomment/communityinfocomment.wxss create mode 100644 pages/communityitemlist/communityitemlist.js create mode 100644 pages/communityitemlist/communityitemlist.json create mode 100644 pages/communityitemlist/communityitemlist.wxml create mode 100644 pages/communityitemlist/communityitemlist.wxss create mode 100644 pages/communitylist/communitylist.js create mode 100644 pages/communitylist/communitylist.json create mode 100644 pages/communitylist/communitylist.wxml create mode 100644 pages/communitylist/communitylist.wxss create mode 100644 pages/courselearning/courselearning.js create mode 100644 pages/courselearning/courselearning.json create mode 100644 pages/courselearning/courselearning.wxml create mode 100644 pages/courselearning/courselearning.wxss create mode 100644 pages/createwords/createwords.js create mode 100644 pages/createwords/createwords.json create mode 100644 pages/createwords/createwords.wxml create mode 100644 pages/createwords/createwords.wxss create mode 100644 pages/daitika/daitika.js create mode 100644 pages/daitika/daitika.json create mode 100644 pages/daitika/daitika.wxml create mode 100644 pages/daitika/daitika.wxss create mode 100644 pages/examanalysis/examanalysis.js create mode 100644 pages/examanalysis/examanalysis.json create mode 100644 pages/examanalysis/examanalysis.wxml create mode 100644 pages/examanalysis/examanalysis.wxss create mode 100644 pages/examing/examing.js create mode 100644 pages/examing/examing.json create mode 100644 pages/examing/examing.wxml create mode 100644 pages/examing/examing.wxss create mode 100644 pages/examlist/examlist.js create mode 100644 pages/examlist/examlist.json create mode 100644 pages/examlist/examlist.wxml create mode 100644 pages/examlist/examlist.wxss create mode 100644 pages/exammakings/exammakings.js create mode 100644 pages/exammakings/exammakings.json create mode 100644 pages/exammakings/exammakings.wxml create mode 100644 pages/exammakings/exammakings.wxss create mode 100644 pages/exampaper/exampaper.js create mode 100644 pages/exampaper/exampaper.json create mode 100644 pages/exampaper/exampaper.wxml create mode 100644 pages/exampaper/exampaper.wxss create mode 100644 pages/exampaper2/exampaper2.js create mode 100644 pages/exampaper2/exampaper2.json create mode 100644 pages/exampaper2/exampaper2.wxml create mode 100644 pages/exampaper2/exampaper2.wxss create mode 100644 pages/examproblem/examproblem.js create mode 100644 pages/examproblem/examproblem.json create mode 100644 pages/examproblem/examproblem.wxml create mode 100644 pages/examproblem/examproblem.wxss create mode 100644 pages/explainnote/explainnote.js create mode 100644 pages/explainnote/explainnote.json create mode 100644 pages/explainnote/explainnote.wxml create mode 100644 pages/explainnote/explainnote.wxss create mode 100644 pages/goodsinfo/goodsinfo.js create mode 100644 pages/goodsinfo/goodsinfo.json create mode 100644 pages/goodsinfo/goodsinfo.wxml create mode 100644 pages/goodsinfo/goodsinfo.wxss create mode 100644 pages/grid/grid.js create mode 100644 pages/grid/grid.json create mode 100644 pages/grid/grid.wxml create mode 100644 pages/grid/grid.wxss create mode 100644 pages/index/index.js create mode 100644 pages/index/index.json create mode 100644 pages/index/index.wxml create mode 100644 pages/index/index.wxss create mode 100644 pages/indexclass/indexclass.js create mode 100644 pages/indexclass/indexclass.json create mode 100644 pages/indexclass/indexclass.wxml create mode 100644 pages/indexclass/indexclass.wxss create mode 100644 pages/indexclassintro/indexclassintro.js create mode 100644 pages/indexclassintro/indexclassintro.json create mode 100644 pages/indexclassintro/indexclassintro.wxml create mode 100644 pages/indexclassintro/indexclassintro.wxss create mode 100644 pages/indexclassres/indexclassres.js create mode 100644 pages/indexclassres/indexclassres.json create mode 100644 pages/indexclassres/indexclassres.wxml create mode 100644 pages/indexclassres/indexclassres.wxss create mode 100644 pages/indexclasssubwork/indexclasssubwork.js create mode 100644 pages/indexclasssubwork/indexclasssubwork.json create mode 100644 pages/indexclasssubwork/indexclasssubwork.wxml create mode 100644 pages/indexclasssubwork/indexclasssubwork.wxss create mode 100644 pages/indexclasszx/indexclasszx.js create mode 100644 pages/indexclasszx/indexclasszx.json create mode 100644 pages/indexclasszx/indexclasszx.wxml create mode 100644 pages/indexclasszx/indexclasszx.wxss create mode 100644 pages/indexcourselearning/indexcourselearning.js create mode 100644 pages/indexcourselearning/indexcourselearning.json create mode 100644 pages/indexcourselearning/indexcourselearning.wxml create mode 100644 pages/indexcourselearning/indexcourselearning.wxss create mode 100644 pages/indexcreatewords/indexcreatewords.js create mode 100644 pages/indexcreatewords/indexcreatewords.json create mode 100644 pages/indexcreatewords/indexcreatewords.wxml create mode 100644 pages/indexcreatewords/indexcreatewords.wxss create mode 100644 pages/indexcreatewordssubwork/indexcreatewordssubwork.js create mode 100644 pages/indexcreatewordssubwork/indexcreatewordssubwork.json create mode 100644 pages/indexcreatewordssubwork/indexcreatewordssubwork.wxml create mode 100644 pages/indexcreatewordssubwork/indexcreatewordssubwork.wxss create mode 100644 pages/indexjobtask/indexjobtask.js create mode 100644 pages/indexjobtask/indexjobtask.json create mode 100644 pages/indexjobtask/indexjobtask.wxml create mode 100644 pages/indexjobtask/indexjobtask.wxss create mode 100644 pages/indexlives/indexlives.js create mode 100644 pages/indexlives/indexlives.json create mode 100644 pages/indexlives/indexlives.wxml create mode 100644 pages/indexlives/indexlives.wxss create mode 100644 pages/indexlivesvoid/indexlivesvoid.js create mode 100644 pages/indexlivesvoid/indexlivesvoid.json create mode 100644 pages/indexlivesvoid/indexlivesvoid.wxml create mode 100644 pages/indexlivesvoid/indexlivesvoid.wxss create mode 100644 pages/indexobjectactivelist/indexobjectactivelist.js create mode 100644 pages/indexobjectactivelist/indexobjectactivelist.json create mode 100644 pages/indexobjectactivelist/indexobjectactivelist.wxml create mode 100644 pages/indexobjectactivelist/indexobjectactivelist.wxss create mode 100644 pages/indexobjectactiveworkok/indexobjectactiveworkok.js create mode 100644 pages/indexobjectactiveworkok/indexobjectactiveworkok.json create mode 100644 pages/indexobjectactiveworkok/indexobjectactiveworkok.wxml create mode 100644 pages/indexobjectactiveworkok/indexobjectactiveworkok.wxss create mode 100644 pages/indexobjectivework/indexobjectivework.js create mode 100644 pages/indexobjectivework/indexobjectivework.json create mode 100644 pages/indexobjectivework/indexobjectivework.wxml create mode 100644 pages/indexobjectivework/indexobjectivework.wxss create mode 100644 pages/indexreslists/indexreslists.js create mode 100644 pages/indexreslists/indexreslists.json create mode 100644 pages/indexreslists/indexreslists.wxml create mode 100644 pages/indexreslists/indexreslists.wxss create mode 100644 pages/indexreslistsnew/indexreslistsnew.js create mode 100644 pages/indexreslistsnew/indexreslistsnew.json create mode 100644 pages/indexreslistsnew/indexreslistsnew.wxml create mode 100644 pages/indexreslistsnew/indexreslistsnew.wxss create mode 100644 pages/indexrespage/indexrespage.js create mode 100644 pages/indexrespage/indexrespage.json create mode 100644 pages/indexrespage/indexrespage.wxml create mode 100644 pages/indexrespage/indexrespage.wxss create mode 100644 pages/indexsq/indexsq.js create mode 100644 pages/indexsq/indexsq.json create mode 100644 pages/indexsq/indexsq.wxml create mode 100644 pages/indexsq/indexsq.wxss create mode 100644 pages/knowledge/knowledge.js create mode 100644 pages/knowledge/knowledge.json create mode 100644 pages/knowledge/knowledge.wxml create mode 100644 pages/knowledge/knowledge.wxss create mode 100644 pages/leftright/leftright.js create mode 100644 pages/leftright/leftright.json create mode 100644 pages/leftright/leftright.wxml create mode 100644 pages/leftright/leftright.wxss create mode 100644 pages/livelist/livelist.js create mode 100644 pages/livelist/livelist.json create mode 100644 pages/livelist/livelist.wxml create mode 100644 pages/livelist/livelist.wxss create mode 100644 pages/livetest/livetest.js create mode 100644 pages/livetest/livetest.json create mode 100644 pages/livetest/livetest.wxml create mode 100644 pages/livetest/livetest.wxss create mode 100644 pages/main/main.js create mode 100644 pages/main/main.json create mode 100644 pages/main/main.wxml create mode 100644 pages/main/main.wxss create mode 100644 pages/messageencyclopedias/messageencyclopedias.js create mode 100644 pages/messageencyclopedias/messageencyclopedias.json create mode 100644 pages/messageencyclopedias/messageencyclopedias.wxml create mode 100644 pages/messageencyclopedias/messageencyclopedias.wxss create mode 100644 pages/messagelist/messagelist.js create mode 100644 pages/messagelist/messagelist.json create mode 100644 pages/messagelist/messagelist.wxml create mode 100644 pages/messagelist/messagelist.wxss create mode 100644 pages/mine/mine.js create mode 100644 pages/mine/mine.json create mode 100644 pages/mine/mine.wxml create mode 100644 pages/mine/mine.wxss create mode 100644 pages/myaddress/myaddress.js create mode 100644 pages/myaddress/myaddress.json create mode 100644 pages/myaddress/myaddress.wxml create mode 100644 pages/myaddress/myaddress.wxss create mode 100644 pages/mycommunityinfo/mycommunityinfo.js create mode 100644 pages/mycommunityinfo/mycommunityinfo.json create mode 100644 pages/mycommunityinfo/mycommunityinfo.wxml create mode 100644 pages/mycommunityinfo/mycommunityinfo.wxss create mode 100644 pages/myexamanalysis/myexamanalysis.js create mode 100644 pages/myexamanalysis/myexamanalysis.json create mode 100644 pages/myexamanalysis/myexamanalysis.wxml create mode 100644 pages/myexamanalysis/myexamanalysis.wxss create mode 100644 pages/myorder/myorder.js create mode 100644 pages/myorder/myorder.json create mode 100644 pages/myorder/myorder.wxml create mode 100644 pages/myorder/myorder.wxss create mode 100644 pages/mytest/mytest.js create mode 100644 pages/mytest/mytest.json create mode 100644 pages/mytest/mytest.wxml create mode 100644 pages/mytest/mytest.wxss create mode 100644 pages/newmine/newmine.js create mode 100644 pages/newmine/newmine.json create mode 100644 pages/newmine/newmine.wxml create mode 100644 pages/newmine/newmine.wxss create mode 100644 pages/newtest/newtest.js create mode 100644 pages/newtest/newtest.json create mode 100644 pages/newtest/newtest.wxml create mode 100644 pages/newtest/newtest.wxss create mode 100644 pages/picsdisplay/picsdisplay.js create mode 100644 pages/picsdisplay/picsdisplay.json create mode 100644 pages/picsdisplay/picsdisplay.wxml create mode 100644 pages/picsdisplay/picsdisplay.wxss create mode 100644 pages/singledouble/singledouble.js create mode 100644 pages/singledouble/singledouble.json create mode 100644 pages/singledouble/singledouble.wxml create mode 100644 pages/singledouble/singledouble.wxss create mode 100644 pages/swipecell/swipecell.js create mode 100644 pages/swipecell/swipecell.json create mode 100644 pages/swipecell/swipecell.wxml create mode 100644 pages/swipecell/swipecell.wxss create mode 100644 pages/tarbar/tarbar.js create mode 100644 pages/tarbar/tarbar.json create mode 100644 pages/tarbar/tarbar.wxml create mode 100644 pages/tarbar/tarbar.wxss create mode 100644 pages/userlogin/userlogin.js create mode 100644 pages/userlogin/userlogin.json create mode 100644 pages/userlogin/userlogin.wxml create mode 100644 pages/userlogin/userlogin.wxss create mode 100644 pages/vipmonth/vipmonth.js create mode 100644 pages/vipmonth/vipmonth.json create mode 100644 pages/vipmonth/vipmonth.wxml create mode 100644 pages/vipmonth/vipmonth.wxss create mode 100644 pages/vipquanyi/vipquanyi.js create mode 100644 pages/vipquanyi/vipquanyi.json create mode 100644 pages/vipquanyi/vipquanyi.wxml create mode 100644 pages/vipquanyi/vipquanyi.wxss create mode 100644 pages/viprecharge/viprecharge.js create mode 100644 pages/viprecharge/viprecharge.json create mode 100644 pages/viprecharge/viprecharge.wxml create mode 100644 pages/viprecharge/viprecharge.wxss create mode 100644 project.config.json create mode 100644 project.private.config.json create mode 100644 sitemap.json create mode 100644 utils/oss.js create mode 100644 utils/request.js create mode 100644 utils/util.js create mode 100644 wxParse/emojis/00.gif create mode 100644 wxParse/emojis/01.gif create mode 100644 wxParse/emojis/02.gif create mode 100644 wxParse/emojis/03.gif create mode 100644 wxParse/emojis/04.gif create mode 100644 wxParse/emojis/05.gif create mode 100644 wxParse/emojis/06.gif create mode 100644 wxParse/emojis/07.gif create mode 100644 wxParse/emojis/08.gif create mode 100644 wxParse/emojis/09.gif create mode 100644 wxParse/emojis/10.gif create mode 100644 wxParse/emojis/100.gif create mode 100644 wxParse/emojis/101.gif create mode 100644 wxParse/emojis/102.gif create mode 100644 wxParse/emojis/103.gif create mode 100644 wxParse/emojis/104.gif create mode 100644 wxParse/emojis/105.gif create mode 100644 wxParse/emojis/106.gif create mode 100644 wxParse/emojis/107.gif create mode 100644 wxParse/emojis/108.gif create mode 100644 wxParse/emojis/109.gif create mode 100644 wxParse/emojis/11.gif create mode 100644 wxParse/emojis/110.gif create mode 100644 wxParse/emojis/111.gif create mode 100644 wxParse/emojis/112.gif create mode 100644 wxParse/emojis/113.gif create mode 100644 wxParse/emojis/114.gif create mode 100644 wxParse/emojis/115.gif create mode 100644 wxParse/emojis/116.gif create mode 100644 wxParse/emojis/117.gif create mode 100644 wxParse/emojis/118.gif create mode 100644 wxParse/emojis/119.gif create mode 100644 wxParse/emojis/12.gif create mode 100644 wxParse/emojis/120.gif create mode 100644 wxParse/emojis/121.gif create mode 100644 wxParse/emojis/122.gif create mode 100644 wxParse/emojis/123.gif create mode 100644 wxParse/emojis/124.gif create mode 100644 wxParse/emojis/125.gif create mode 100644 wxParse/emojis/126.gif create mode 100644 wxParse/emojis/127.gif create mode 100644 wxParse/emojis/128.gif create mode 100644 wxParse/emojis/129.gif create mode 100644 wxParse/emojis/13.gif create mode 100644 wxParse/emojis/130.gif create mode 100644 wxParse/emojis/131.gif create mode 100644 wxParse/emojis/132.gif create mode 100644 wxParse/emojis/133.gif create mode 100644 wxParse/emojis/134.gif create mode 100644 wxParse/emojis/14.gif create mode 100644 wxParse/emojis/15.gif create mode 100644 wxParse/emojis/16.gif create mode 100644 wxParse/emojis/17.gif create mode 100644 wxParse/emojis/18.gif create mode 100644 wxParse/emojis/19.gif create mode 100644 wxParse/emojis/20.gif create mode 100644 wxParse/emojis/21.gif create mode 100644 wxParse/emojis/22.gif create mode 100644 wxParse/emojis/23.gif create mode 100644 wxParse/emojis/24.gif create mode 100644 wxParse/emojis/25.gif create mode 100644 wxParse/emojis/26.gif create mode 100644 wxParse/emojis/27.gif create mode 100644 wxParse/emojis/28.gif create mode 100644 wxParse/emojis/29.gif create mode 100644 wxParse/emojis/30.gif create mode 100644 wxParse/emojis/31.gif create mode 100644 wxParse/emojis/32.gif create mode 100644 wxParse/emojis/33.gif create mode 100644 wxParse/emojis/34.gif create mode 100644 wxParse/emojis/35.gif create mode 100644 wxParse/emojis/36.gif create mode 100644 wxParse/emojis/37.gif create mode 100644 wxParse/emojis/38.gif create mode 100644 wxParse/emojis/39.gif create mode 100644 wxParse/emojis/40.gif create mode 100644 wxParse/emojis/41.gif create mode 100644 wxParse/emojis/42.gif create mode 100644 wxParse/emojis/43.gif create mode 100644 wxParse/emojis/44.gif create mode 100644 wxParse/emojis/45.gif create mode 100644 wxParse/emojis/46.gif create mode 100644 wxParse/emojis/47.gif create mode 100644 wxParse/emojis/48.gif create mode 100644 wxParse/emojis/49.gif create mode 100644 wxParse/emojis/50.gif create mode 100644 wxParse/emojis/51.gif create mode 100644 wxParse/emojis/52.gif create mode 100644 wxParse/emojis/53.gif create mode 100644 wxParse/emojis/54.gif create mode 100644 wxParse/emojis/55.gif create mode 100644 wxParse/emojis/56.gif create mode 100644 wxParse/emojis/57.gif create mode 100644 wxParse/emojis/58.gif create mode 100644 wxParse/emojis/59.gif create mode 100644 wxParse/emojis/60.gif create mode 100644 wxParse/emojis/61.gif create mode 100644 wxParse/emojis/62.gif create mode 100644 wxParse/emojis/63.gif create mode 100644 wxParse/emojis/64.gif create mode 100644 wxParse/emojis/65.gif create mode 100644 wxParse/emojis/66.gif create mode 100644 wxParse/emojis/67.gif create mode 100644 wxParse/emojis/68.gif create mode 100644 wxParse/emojis/69.gif create mode 100644 wxParse/emojis/70.gif create mode 100644 wxParse/emojis/71.gif create mode 100644 wxParse/emojis/72.gif create mode 100644 wxParse/emojis/73.gif create mode 100644 wxParse/emojis/74.gif create mode 100644 wxParse/emojis/75.gif create mode 100644 wxParse/emojis/76.gif create mode 100644 wxParse/emojis/77.gif create mode 100644 wxParse/emojis/78.gif create mode 100644 wxParse/emojis/79.gif create mode 100644 wxParse/emojis/80.gif create mode 100644 wxParse/emojis/81.gif create mode 100644 wxParse/emojis/82.gif create mode 100644 wxParse/emojis/83.gif create mode 100644 wxParse/emojis/84.gif create mode 100644 wxParse/emojis/85.gif create mode 100644 wxParse/emojis/86.gif create mode 100644 wxParse/emojis/87.gif create mode 100644 wxParse/emojis/88.gif create mode 100644 wxParse/emojis/89.gif create mode 100644 wxParse/emojis/90.gif create mode 100644 wxParse/emojis/91.gif create mode 100644 wxParse/emojis/92.gif create mode 100644 wxParse/emojis/93.gif create mode 100644 wxParse/emojis/94.gif create mode 100644 wxParse/emojis/95.gif create mode 100644 wxParse/emojis/96.gif create mode 100644 wxParse/emojis/97.gif create mode 100644 wxParse/emojis/98.gif create mode 100644 wxParse/emojis/99.gif create mode 100644 wxParse/html2json.js create mode 100644 wxParse/htmlparser.js create mode 100644 wxParse/showdown.js create mode 100644 wxParse/wxDiscode.js create mode 100644 wxParse/wxParse.js create mode 100644 wxParse/wxParse.wxml create mode 100644 wxParse/wxParse.wxss diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 0000000..3b66410 --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,3 @@ +{ + "git.ignoreLimitWarning": true +} \ No newline at end of file diff --git a/app.js b/app.js new file mode 100644 index 0000000..e3d4470 --- /dev/null +++ b/app.js @@ -0,0 +1,28 @@ +// app.js +App({ + onLaunch() { + + }, + globalData: { + userInfo: null, + usersaveinfo: null, + baseimgurl: 'https://ndnd.duiduiedu.com/', + // baseimgurl:'http://127.0.0.1:8081', + // baseUrl: 'http://127.0.0.1:8006/addons/unishop', + baseUrl: 'https://ndnd.duiduiedu.com/addons/unishop', + wxopenid: '', + session_key: '', + currentuserinfo: null, + wxuserid: 1, + picspaht: 'https://ndnd.duiduiedu.com/uploads/pics' + }, + islogin: function () { + const userinfo = wx.getStorageSync('userinfo'); + if (userinfo == null || userinfo.length == 0) { + wx.redirectTo({ + url: '/pages/userlogin/userlogin', + }) + } + + } +}) \ No newline at end of file diff --git a/app.json b/app.json new file mode 100644 index 0000000..d70067b --- /dev/null +++ b/app.json @@ -0,0 +1,140 @@ +{ + "pages": [ + "pages/index/index", + "pages/indexlives/indexlives", + "pages/leftright/leftright", + "pages/mine/mine", + "pages/tarbar/tarbar", + "pages/grid/grid", + "pages/picsdisplay/picsdisplay", + "pages/swipecell/swipecell", + "pages/main/main", + "pages/livelist/livelist", + "pages/courselearning/courselearning", + "pages/messageencyclopedias/messageencyclopedias", + "pages/messagelist/messagelist", + "pages/communityinfo/communityinfo", + "pages/allpapers/allpapers", + "pages/examlist/examlist", + "pages/caogaozhi/caogaozhi", + "pages/examing/examing", + "pages/singledouble/singledouble", + "pages/exampaper/exampaper", + "pages/exampaper2/exampaper2", + "pages/examanalysis/examanalysis", + "pages/explainnote/explainnote", + "pages/exammakings/exammakings", + "pages/examproblem/examproblem", + "pages/userlogin/userlogin", + "pages/communitylist/communitylist", + "pages/communityitemlist/communityitemlist", + "pages/viprecharge/viprecharge", + "pages/vipquanyi/vipquanyi", + "pages/chargeshop/chargeshop", + "pages/goodsinfo/goodsinfo", + "pages/collectionsub/collectionsub", + "pages/collectioncourse/collectioncourse", + "pages/myaddress/myaddress", + "pages/myorder/myorder", + "pages/livetest/livetest", + "pages/mycommunityinfo/mycommunityinfo", + "pages/myexamanalysis/myexamanalysis", + "pages/newtest/newtest", + "pages/vipmonth/vipmonth", + "pages/createwords/createwords", + "pages/communityinfocomment/communityinfocomment", + "pages/knowledge/knowledge", + "pages/daitika/daitika", + "pages/newmine/newmine", + "pages/indexcourselearning/indexcourselearning", + "pages/indexreslists/indexreslists", + "pages/indexrespage/indexrespage", + "pages/indexlivesvoid/indexlivesvoid", + "pages/indexsq/indexsq", + "pages/indexclass/indexclass", + "pages/indexclassintro/indexclassintro", + "pages/indexclasszx/indexclasszx", + "pages/indexjobtask/indexjobtask", + "pages/indexcreatewords/indexcreatewords", + "pages/indexclassres/indexclassres", + "pages/mytest/mytest", + "pages/indexclasssubwork/indexclasssubwork", + "pages/indexcreatewordssubwork/indexcreatewordssubwork", + "pages/indexobjectivework/indexobjectivework", + "pages/indexobjectactivelist/indexobjectactivelist", + "pages/indexobjectactiveworkok/indexobjectactiveworkok", + "pages/indexreslistsnew/indexreslistsnew", + "pages/classindex/classindex", + "pages/classcommunityitemlist/classcommunityitemlist", + "pages/classcourselearning/classcourselearning", + "pages/camp_list/index", + "pages/camp_detail/index", + "pages/camp_task_text_image/index", + "pages/camp_task_subjective_question/index", + "pages/camp_task_essay_question/index", + "pages/camp_task_objective_questions/index", + "pages/camp_task_objective_questions_result/index" + ], + "window": { + "backgroundTextStyle": "light", + "navigationBarBackgroundColor": "#fff", + "navigationBarTitleText": "Weixin", + "navigationBarTextStyle": "black" + }, + "usingComponents": { + "van-button": "@vant/weapp/button/index", + "van-tab": "@vant/weapp/tab/index", + "van-tabs": "@vant/weapp/tabs/index", + "van-cell": "@vant/weapp/cell/index", + "van-cell-group": "@vant/weapp/cell-group/index", + "van-tabbar": "@vant/weapp/tabbar/index", + "van-tabbar-item": "@vant/weapp/tabbar-item/index", + "van-grid": "@vant/weapp/grid/index", + "van-grid-item": "@vant/weapp/grid-item/index", + "van-image": "@vant/weapp/image/index", + "van-swipe-cell": "@vant/weapp/swipe-cell/index", + "van-divider": "@vant/weapp/divider/index", + "van-progress": "@vant/weapp/progress/index", + "van-count-down": "@vant/weapp/count-down/index", + "van-circle": "@vant/weapp/circle/index", + "van-dialog": "@vant/weapp/dialog/index", + "van-overlay": "@vant/weapp/overlay/index", + "van-field": "@vant/weapp/field/index", + "van-switch": "@vant/weapp/switch/index", + "van-dropdown-menu": "@vant/weapp/dropdown-menu/index", + "van-dropdown-item": "@vant/weapp/dropdown-item/index", + "van-popup": "@vant/weapp/popup/index", + "van-action-sheet": "@vant/weapp/action-sheet/index", + "van-toast": "@vant/weapp/toast/index", + "van-calendar": "@vant/weapp/calendar/index", + "calendar": "/components/calendar/calendar", + "van-checkbox": "@vant/weapp/checkbox/index", + "van-checkbox-group": "@vant/weapp/checkbox-group/index", + "pause-mask": "/components/pause-mask/index" + }, + "sitemapLocation": "sitemap.json", + "tabBar": { + "color": "#66666", + "selectedColor": "#f10b2e", + "list": [ + { + "pagePath": "pages/index/index", + "text": "怼学习", + "iconPath": "./img/footerpic.png", + "selectedIconPath": "./img/footerpic1.png" + }, + { + "pagePath": "pages/indexsq/indexsq", + "text": "怼社区", + "iconPath": "./img/footerpic.png", + "selectedIconPath": "./img/footerpic2.png" + }, + { + "pagePath": "pages/mine/mine", + "text": "怼自己", + "iconPath": "./img/footerpic.png", + "selectedIconPath": "./img/footerpic3.png" + } + ] + } +} \ No newline at end of file diff --git a/app.wxss b/app.wxss new file mode 100644 index 0000000..08a83e9 --- /dev/null +++ b/app.wxss @@ -0,0 +1,11 @@ +@import './miniprogram_npm/@vant/weapp/common/index.wxss'; +.container { + height: 100%; + display: flex; + flex-direction: column; + align-items: center; + justify-content:space-between; + padding: 20rpx 10rpx; + box-sizing: border-box; + overflow-x: hidden !important; +} diff --git a/assets/icons/1.png b/assets/icons/1.png new file mode 100644 index 0000000000000000000000000000000000000000..e086c10e7620806d5a96c90203decd7484d0815c GIT binary patch literal 25337 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 literal 0 HcmV?d00001 diff --git a/assets/icons/3.png b/assets/icons/3.png new file mode 100644 index 0000000000000000000000000000000000000000..ac97344047d09edcae25f868461c6bc0c73b3894 GIT binary patch literal 28703 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 KMNUMnLSTXgH*k6Y literal 0 HcmV?d00001 diff --git a/assets/icons/add-comment.png b/assets/icons/add-comment.png new file mode 100644 index 0000000000000000000000000000000000000000..2e15f2b875170571ba188e929adc7ca354ef2d66 GIT binary patch literal 2988 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 literal 0 HcmV?d00001 diff --git a/assets/icons/close.png b/assets/icons/close.png new file mode 100644 index 0000000000000000000000000000000000000000..525b98b019800addb8149b08334de19d87c921e8 GIT binary patch literal 62085 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 Cg~|>9 literal 0 HcmV?d00001 diff --git a/assets/icons/courses.png b/assets/icons/courses.png new file mode 100644 index 0000000000000000000000000000000000000000..192ec4eec497cdf471ee4797e0559f34c8a44318 GIT binary patch literal 4969 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�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 F1OO#%(oz5b literal 0 HcmV?d00001 diff --git a/assets/icons/play.png b/assets/icons/play.png new file mode 100644 index 0000000000000000000000000000000000000000..d08676d90a5db43140cac551358b15c343cd4314 GIT binary patch literal 3784 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 literal 0 HcmV?d00001 diff --git a/assets/icons/unlock.png b/assets/icons/unlock.png new file mode 100644 index 0000000000000000000000000000000000000000..1a2ca1993836437e5f5ba63a1d270788f7f3436e GIT binary patch literal 2116 zcmaJ?dsGu=7LS5raUpFDYL%5V2m&=sW|EKxL>@^HkN|}QsFp{PnLvbOVlqgAtO&{? z#kM?DV0j3YQw0iDfl@&bU6z6($Ch1rhyuPSpeWFaAnFbZwtsj!=gfTf`@Z|T_jg}s z(gXaqo0)DfB@hT^-d=)0eBFY-;Hu^L_lDn=d-(DZCJe=bPz4q*)glCU7?mMpZb1Q%DmMk$ zWF^d_gfK-kk%o^%E4>o5NKk^GSe_6g=fD)#ZDbcc7dN0nFezEDidE~ldLHGqT`n#! z90L^cYZWYpM|ndkR1`qwqgsT_aime@G#ZV};y8jVP!6#aQrT8AM1vrJ#s)wqDg<%q zOfCZ?FFq99p%zwf0|lOo?(iLt5{+RRE&#;G$2-Q;9Z_u*0CG4SfCd2&M8!3zI)fUM z>Zxj-^^yevqLXWt8cd0*$qN>xGBgh3QE;+vqEKl>qPK?Cy2V`KSp)P^4FEdQ0F`PX zwAb1?ED-sF#yhojVuJ<&0udb=r+BcG^d@QnqE+riU{5WoBEQZvSNRSObQ&mUau|3& zvDhFLVd9cZfk>$|P@#~4Fau;W6qH3g{HOfAX;u6Lk3+LWhs&n35d{d#s7$tkO@-tP zCn^VGKvY=Hf*=kJV!<>91;8l+3$62~R$4m3`*T5jI~(}s?Q|h(e5ADa>_koyc?5!S zkhj2HtnVMl+ZAmoS^ra1S0`LkQww_eRyWpRjN=VS3$Y}Xd-(4ok=WmYhup!enXou9Rd8hHp8 zin_1)n(p@>DabDxET)glzZ&G!ZoNtpN*GNQ8?SVEZYBhB$&5WmVcApNxw|%~yJD{IrKs&6Lnz*w}wN>an8q$+4Zm%z*<)O3LXv zaU1DBA!89fYglf@*EJ<3TcXCyUbX3iyOU~ej0X_Y-0U?_dBxyivlFMSg2z{W=FzmQ z_LC27XTt3zZpV4sUsf>&^Q(sUTKzkA^~&pQg!p(iJbHXDw%d~_LVtQ1P&!b1+i=G9 z%H`OU8`I_bmh8dDt!>?@=R$_AHZ%hfoh(VAxpp8~Ut6bj`b`6vZ*D&svCr7Cyq|x! zdtFue>aaxT+_A8+@R+8F^wbkRtuDq!+RYJ#XA<7at3OvxJx;2Z+|fh(HRaEZ=bype zP-k_PVdK=7v183%?O|yrcFY{?$@%U1iqZ5+lSWFsF!if3BH#Re>fh((cgI@HH@A-W zl^KoR;lwOE*u~C#Qekp(Si%X5kIZ8ezjn^rrvlEOyC{1y5!!3MO>8$>)N{XGaP~W8 zrF-?gF~WXk&ISHZ$1$t5Wz*S>KvD6UNA2>CW{b>_(>4btD-qKBL+KxV755Kq4)QsB zTfv$g6*tU&Cwdzg5hN--RD3+PAxKzHCnY*rY_U%a%L~qRer$8yA?uWOwDI!1Y0@iA zQs=V$@Hf`Isa#vuBd>t2nUyBNo((DP$v3E`r19Z12GN5Wqy_Yas!&le)`g6{vMouv^7I~i}AJZv8eA7 zLfw9SQQEmPvwCRIX0~oBw!n170A~m0X1Z)Re75lU-Jfr+D4yb$IQ6f6XyX_tWA1!Q*?=j?jiBpNCe*j|)1Tb^89H{l$b zlUMWV*O`ICHIGWk(d^+ai99t@F6W|`;@8$^xh#HzaHFk#P4hb(FC`8)$(_GQ3y z!;idcnyO?{+)2@gdB`bXu8Ec3XBYP9K|p(%{j(}gVQs|b6U3t_j~-sAJdza zEs1FR&_=QEkbm&*k5^9C0!?X#=gKNShc#=TexFOSsGKgI9F1Fldzg?G?zLroQkQv{ zkz#5h)Hs=)c<$qxBI4Y&2Op%UZjJPeWN)4Ro?t{E6M-(T?0=Rl{MWsOeu8R`$dvyB DPIYAd literal 0 HcmV?d00001 diff --git a/assets/images/背景.png b/assets/images/背景.png new file mode 100644 index 0000000000000000000000000000000000000000..8e70347d38da1e4d4db6446daeef985a30d1266d GIT binary patch literal 160273 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≠yM9f`lC5Pn+Tl^y&6D?EPXie#R7i783F%Vf!O{kpzq;rv;D(bOOlC)t6 zn;r~7cZS=}Xo5sH3l{R;#yl3K&3Hx(31Suw;$rhla5e`@I$E9LK4h~B7;fkuo z2eKyPm{<@B2uK)6U9or;6a#)%9n2Jn%F4?dRUrl0^47&FW5`$ymxEh`5G zeOA@m{xcQ3tQLl=1;XypwsY0%#+0~sQXp7oC4yFM5tCyVth)5ILrVCB1?MdppSY~fB4!xm{|y?;5n#x<$g{EVvIx$FT4p4tB+rPg^1brLkv^Fx zSN3Hrxo4v(k?(uz|2;T#Xdf69K9msNr82J8bjy}C$;!<=a(!*DKqt%Duc9D;Wjb6B z?rIJ(wIDwv=*7sY_k*+5UFW^lPytK~0|&0(3VN2#68?Qc{XGDK79~g4SO8gb9Ibdd}}N;Ba#%^Th{n|NUVyV9q zMLd5IKDLSe#?e82mN3odBZ8O3WlnZqrm+s^mtZdT#{%d(#LibnayT$4c;{9p551fR z?O-2>mwh~?4iL4tCyd;m7KV~l?4ek!Le6M8(mN8OK8}ihn9)%CdQKv_70A_gcxy0JK&sa%Er?hV0(tO^V9X+xyRGVKKS^ z{uF5j?b%F9^(yVbBn2Se?-RBTni{^K4ZP*r+jWvbyoXtfT25`e2Y%^_2gnT2=OP)V zdDpB3&7@`DtOd1r*(gVr`v$I*N#)}EPr?wPgrEXZT~<@oB@YVY`w*CagK?L<9KCM{9Q=X_g+0rfzxS6m>Z z{nbc)$j{dRIWu3PeE?w$f0krGMp4mgXK;HY|L%$Sq2+stC9qrRe!Ul>SwQ$9)1dtx z-@s=_Vc+aQCt{n+#c!h>(2-}AAn6V<i zy?CXct{#CU#_k;9A(K%sZmBh6)qWnkH+=g3HFbRP^1x3a{(iNiTcW0xNE#D{i<<8K z;Hep@h^3|H!QW0i+XlbpmpALPnwQxVn?P1p92glq-ux;rFDrfMa83Ap%6}5@ZKJ0- zoZY=y&9w7Fi8l}S4evC2r>trFdp&jKEkCNThXuvoCJRXWTdavPq{Lj}Z=ND=TpFd7 z7G7j?xRKL9=M9}DEnI5t;=$b=?dAX|a<$qqA%8oHoRQ!@?YyP4g23&ZLD}}-KzAxF zP`v88z)unK(zK%tzF2|huE=bXY`_c4_J_cz2|u6sB=Z{$e#ltaWm#l@C18MhG6*yJ^@S)O2EiaLxd89YxJck0ax`MaiHDtX~>^OEfRbh+b@GF&KWk)0Dn zDgs;6bPDGXb74#N1mnii1D5nYVc1-=*+3;o)@lm({3YaW4%sifHtR3E>mu|FKw-Bg zvZG8ZAkpB1tU}1?%)YyUfq`(-SHI?7k-^?!1KD7xa@qqF}SM$p*8=MPFZUct^ts`JMM{_BuH%rR8Hj#vtnfY<)<9ehd4?0he52Qu6 z7aj2^{h|{Xd_C@y+B)ff5Sbd<`rr3DKR=jGve-5#@o1-i8y5PLUUG2c_ zv1)GG?2kFOkK0#ZFhmk$ItdUS!0MWEg@QXof87?x*I)So3IAMi6euilI0|^UTpt-q zUZhW+twG>x3N0NER(5ungkLxiv*c@2pWQvc-%CVnvPfgdx2gOp5;4e1_DP>as)XdU;wGPCyyhmDZ<$p`u%JTLO( zg{ha1qsY;z6h-k5vaG?M3T%q1f9mYSYwe!mCc-BC3h9BEx}Hw~_x#G8(J(tX~*gOEWt8#ZZmvGTc?BTLi{$GAlCNfEzmE(ZsP z%9!T*E@aIFZg0o-hmw?$1R34hLA(Qe;d;&?V?D42`7j z|C~%D=S?7=Od_95)U8R-?brET$Gr-&?SG&-u-CX-XKKB`74?S=wdI3x5YtjU9k)!F zcx0>kfr70U$PeoN&&$`&6u6YI@Wqz{cxNr!3Ad{t4#^%AUb(-H+QaKFct$4L*v`GQ zcQmwYpqj)Orkj`)AT>Rc*I5)dPCII+b|y5~pO0MLTLp;&5#sPbWd1cHn*W{*9jarz z`0}^>TYfN3Z#-N{)a;&H(eOQ!<0;ofB7Lbl^CGDN!rD;?m@4TmhN0bcJF9&p4(mOV zy!Ug-PO=UWsx9R7vT=ZcXAZCU1`=#2Sv7Kg&4^%(4iQe}3pY945h;s~N%7E`eq@Fx zh@2?ib1l@E*`X{bCZ8>;O+!*A+_pjo2Ri&+->~&k$nYQiEP10rA}!&b6(18!&vs&S zj|(K-Nu1sRS5{oE8}!3tI(Nht@9~k`*Yhgg`csEjXJDbVskkUqEGUeZ^tC>e;)p6h zooT{H8&8QBuHC>k=;dhKzP~jtU{5CV?Y)YlM@VI>tX`+GX(xfBzz)iXI2RA*2t4A! zCduoNxn_rLcv=F&%UtRa1b#=UEd&Y$!7lc$KsPCbi#H#b1_Fi}67;IW8rJIv*)K{; z&sht-9(rb`G zk)rQrw-#NCoR-VQ?s&2N5Dj5;i^=&h^z2UQ9r&tbvE#PQAP`narnn(zxwU?E4)h2x6(2s0fh39d!`LvC}-;$4;2+vWp(ursEDqv+8r0Z z%J1kG&`F31YkzpGddbYEEZyX)D(-V}I|qm80=ARtPteSPes=iUycn!^iNWY%Ya5>6B7KTRkhen{oqYK03`gL=Mi{*XyN(JQ;5jV{1r*t$3@j2csoWw_j zb}Y!)3vrci>_E$WT-wrC>YY8b|FVT^(1WgUBqwhS^$L+omr_cWQcsp3>uWKLIxHsu zMZ^58cMhr5+h7x+lz1t#E3GhXM~RE!=GBGyp^_%?s#=c-cS63?~JjuPWy?yMD8x+sR1fRHk^172mv{iWM( zpfqgn#!|@a3BS824K45ycIQ{DtVI$tXf?3qdXb*xrad~lGk7rA0P?cJ)ewjE$!JaO zlzxf6-f&SgOz}RA|7|&Da++yPPt(qoXZtjnfSbsJ0u<(YXgx>j=)wKs<^a3NH@31h zs*1;IO|5dpzTD{zs3zqbKw%>(0q9+(La8CwyP~uwP{y)-#4(XGU_)M3f6;Q}T7L9Q z_gWaWWKJY}tkiD!GCAkT6r=Z`#}gy!ObQUq07VS{wvT$vf|Z5EhJ)VE$<3^-WPQ^m zFK4pE-B+&}AFvq>95R(~!`I>hg**O^WUpRJ7S^A$^_&$MMEQ=vr%&yf zH8AdO$wWkVjf&l-Sc2?5!$ob>Wk!X54NCD!AV^7hd0Un(uH~8s?|LhzdvoW|c?B?i zX8|d&^q&18&k5CD+~hCOfZ09 zOjB79+gpdfHQLqKzzb)qI_b~h;=xNtkL95J;Vy-5yuo|@fn6R)|{;O$3dr?GL&VVaUr zt3$BKB#XJxsVB~sshrt*Fk;S^w{SRxqPHd{HsZ7m_4VgX1UnZkfpF2bwl=rPsVgTC zgmtuDz7MRPFlqJXRTzu%lNTprVg_(bBrQB1i97d)_UrpKcW(4yiM1ONMfuX*>A2R^ z1pIs>0#Dip2G1N+mRJG876T8&)vS7Kf07-lkJ)e;T3%i@o)7jB`=JQ(`k^RgP3xIx z+R)ZET4mgPB3&v&a2R!H(&t6C@9h75M<2rPk(oU9&g zBftwy8B2=JzX&hJK-oqo+!M3kisuC`ob50q`6QwV`))YEl^e&{D3@4C5_T&mTxAdl zd<9U)cQ$bwGgNPP?niWKiH z^veIZ?-OmoD6a6D@84us&_VmmkUX;#zgIXc3|2l-mxiB+VULxozaqm@ByA0Cl|<2> zhee-Fd_hT=g=$?mjY%BZK%3aDLr~zsY*~0g99%0=_P!(OADh=B+<&{WvVuZ=u*uEz zccV(FxWmgm$o=!t8UzLE76a4xb)xf93*!e zh;(4=`G?v#W=j!cZgl{TWStzQjJMhuR2g9+9Q@e4*(`~qPp&9v-jKc6vQO*`fl+PL ztwe1GG<=b@dh`^0LLepUPOz}W(nDK(5`Mg9>t#nSvQFgL20(UIr!1M$z{)I?DCXAs{9u zVTC8ApCG_C`C&R1`9i`}UNbx>Z`i?+nBhYiWUL4Dz+Qf_R^~v=7Rc;Q%Q-ypQ2Zmh zQgNdG@@zEKu$8BOSUxhxTVAwFqnY;0v?v-4T}Q2xuIY2w2$I zgrO*f^IGeitRF^5w-XNskt4^}LamiW`#FO=Yn=+cP|^ z@I8t}3G+Xqi~!hlKQunSo#}r2f>IiP-T0Y+teYCi{^kvzXw2j>W8k+vf+>dLIrs&F}Ac+3a=zOu;;L{3oWo5n` zpo~0g{w5@$bH6dk6X#{Q_? z4ihNcKzVaVM+ZCIT_x}Ral+QQ-mmM2czLEzx{STS8w!D;U_q&{7@Xf!oQyAS6BDvM zt)b#Z&!a!Rd*NdsrUBP$%DrWZQ3tYqBz5=9i9cS1tv2l#L4gDcuR5ale1#codiCGqZV^K!uCyV;JyyscD7e5RgWP_x zelo|g9j||zm?sm`7ty+=hXJ`;p^&=guRomB7MVO)CSq03628aJY5`O>x`p`}ro?{c z9Ti~y(yikJ4JVFGT;_saA3=F}h#>v%fs+7v%xNFQC$NjB(-2x}Y8sV-_ntJ zEMQxpA1Qi0#tJ?_8&THscp}*ZQT6w@$Lc@&(Fm*f*-jD(gp2MJ7m}AtBkG1Y6Jo=tzsl^R}60N zKpGxAWRw&*o>NIuWUt6}R=P+2Jlq1zp^;J}>ti)??M#pW2I@ku4KZ>;-ws+7EzS~g z`(Bb8cuyhev{|K2v>(Ynkt;Qcx;_P7_-c!5;TH*i$z`()K$jA~^y&E4_dnY7xI#ExLp;_Mn?cTq5i2HUfud8^( z3sf26A;)V%OIMd^`S3-%8=h`IMM%V(s};JyjlddeuBaVTse^@OeK*-z5R(IUdDIOp z;TQWvs1G>eoNM$)#QiHM6WyKSUIPP0+rz7VCP?3H2q?2Z_rZ1KtpZX<&eq)PO26S^ zo6gDw@u0NWl;{P-1@tlCwe|As!979gQJ3KiiOsJyKh4asmM849F#5jWRSI zx#MDIU{p0@3)b?5)Kmd%S3%I>!FU?EWeElpRA*=@3#4&y~sMud6$Lfe%O@>eI5Saw>o{QcTuY z?n|aW|7b}|&hu%#apA*TvNo?s`+b@tcq=l?!gle#6^T2^xU~MZ55G_tba7g$&SCoL z({@=&j(^-u(hoEnB8+{X7oywReXO>3b>&A* zBtUDSvnEOZaLA8)-2vZ!rGDCVRey`TD>S|kNXTDHanbc{C=2naN#nc2A^vLJ80pLkzQQg zZ=7Hh0x+p2Is)k~QXHZId4y|MARF$XLy+tyo3Pt1E{ds^mlN=(t&P^%rh^;bW1<-C zHp+`)i#QU6xqc{WtO{kThhIP^1!?0A&CKlV>`FwGl5Ko4_w=~jij-4qxVX4}ed+E? z{Mu|e=?8gnXH=VNv$Xi-0J>7M5E%jXi{UqLxY==}W_CQ)on07I?Wj54b2E{C7E!Qu zLRG$c+*!tfDre_{$X2eJ4kyhZHFOJz(|gwr6yKm9u8#=>O}Yrj42~VA)&P+N=Qb&+ zsUkk-)(3})!U8`8l-s|c3IzWs8CAPmZTCr<`YfAb<8_Hu@lU<5jK_B~KYuN6*SV~} zzWklXCOH{d#!!3tyJQD@X)_$iy^r~UCm5dLNt(6H@ewjl>S}ufYPuS0GlLj8WDYi- zIZK%-bYg}`&!{y7N-n7p0dx;q_fZvfuSXg?LwQ}@OJ4~T-~!jjOc-4aP%%vS4GNdz zCGXi5s!f{8D33Osf=3d_4LU&s28$eNe5#1m163r`a(3~X*P zqNJnDudc4H`}3QO^FMePXcIXS58rMC5*3+=0Cx9qNmStsvH)*cIDGAz92hdsNyZ^oNX-lhaL%g_USfNx4RYnhK=?6c{I> zvH?_~;G;)4>bHvGBotP{UMJMO8wt_myevUE-fW7Amwj~?)m|Nk(x)F#KVc@)M!^g# zN^q%S{@6c%Vn)f?WMGQC{Qu>{mY{%-^%MNhj}>M=Zd(G7c?&PsH>-j<6b~ghh;n9c z$w*~M1qiEpMk)61lv8n6-P7a>5m>qnJoBd?(?3?mb&%s6%;H3Kzv}mi=Q5@Usd?V8 z32W|&GuWDX#!>fe&^sEtSO@52kc4~%QSzedUBTC_nHs)KYrMoI% zTtm`pe7Pa~96#xQbikPC{qRGg%Lzn$i??plWzdl&dy5xF+I|!{M5#N09sm#`HPHqT zZs`7`DnG|aLp5E>6NhfF${8$}yc@#`a|q`0YjM^pw8%3jnWg_&VDP?d)-om-voNZh zUJsW1wD7Y7{q(DeJj&$tT9GOmqsDQ0Zz1+#4$NGPJ<_Px8;2-i8=q7q_B0I(J!FT*~7O}bdhLtmJgrahp?Jb zamK3ty!#m|n;!Z*Qp;%x@D^+3z1Pl-WjCZ2NX=9eaUgX8_Wu+UDBbQSUsuXj5R6&r zjeWj83!{`U{+L2$$CZN3OD0{Y%X(Du%;-r#upHa}wQR;jVdl6Gzoa71=<*)5)`N${ z`6c3qzb>~XvnMJ2+KFEfeI_-@M0d1@Vvh``cQT*9cf(2L5F7<&gvruy`FQjGjkhu` zFG8Vb!bw5#Rxh$0M|@<8mGW8t$2%37@lt!sPKX#ck+f$G-Z|(9E|+{Ci6}cKg<&d& zPAPZr=VQYFNr%WU(MTid!Q(d-PVY#-yRq<)f+f2y@Fk-Zrtd_VG_E2|9l5kDY{D`| zMva<7HGO(((9`SD^FK0(BKI>XJMr0>2ZjMq4?QmP;DhL4XRvUOv$Bvm% zq;yo!-T_|5M&&w=EUugUKNJ6wC`mO%X8HsnWWEp96HBT!lv*h7oDS@4>K)@utj1h( zAe+DTrmy~Jd!6T;@}_XY4!&PC^6%{X0_x3v zVb)Y_EuSTy&9fMq*u$;2VE*mP+Uwn0v zaP9i~(oLCXg8THvE6#pZCc(ojN&~iM=a9%DU0nn{_Q7eBh4z0!3Ztu?t=v6!4hXTU z$3C;!Mz++Tmx0!Q8ROzCi=ciOYj+al4X$x}^SckZ{O~twUSn;kq+5_sq{I?YA9dGY z>Zq^X@oz}#V<7y>z?yxG#Q)ZToLeg{SFz6J_E%^2x91id&WlZ(-(R@KIx2ITjDo={ zAW*r5;U`ucb&a%d-YC_bmq@I|mX8793|9cP|JY*t_^<(*XcwM{45C7)W59>h1h4e` zW2#KnA+c0m`RG`i@#);29jLb{Q~j4)!EqJkw_@@i6OKT2hF5a;Tdt?9-wP2MwO_kV zSpIb$uSfx(kPj;3>IF+x=TU;4uw8B^CvnbA-H^Bb_J7*ORMP%}r_;}gK zgDDIDxmccHSG0UN$-4_#9j0HXNgc-8m+wE(PQ)4gZ$}Bn(kJ>uGk2P}VjM zB$eKc-WQDlhvwOAYUEl4rC)WaMnm^lbL%_zm_GtnUfihK&8&DIlwdHrVbJ_{5EkZ^ z&^*ZbuAW<}M-P6C|D^nM$smqf;gaBKD*Ne}V@&7OHQKdBE~%XvumDYRD`@KKzv2;m zb&s3jCqUAfO^=T~nk94#qw~Czk|h^1cNdHs4}BL$jCC?)_I^N1Yak1uyD9n=T&d{7 z(;k`gFWwM^2W^nhm|r2llH9E&OdEpPqAOz!4YP-5;~h=JwveXl8VBFpYu-Y^2a1&J z`mMbzsFBB%om^XS=+u9P(MM>0CLYGu4r*@3-4-p`8+nSAA?jAM_E+(hmUzk2sZLpS zkv!3{qhP_8u^G@^K>z`tREbB^ci*VWf8zsKoN}c-rrsS00HAuNsYPDD4p(1b!5;5b^M})BANf!99-W}h|`7cse)K{y*9J#mEVxc zr|w&;{!xqY9WfHnRttFd2C`_u^6(pyE1CNx$Q0o18NO@%{XqOdh3NQSJ@j_xak+r1 z5847#Ravci0%77*!_J^Q?SWVJVq=}~G}dC{l#H^}<#=O8vzz1I_Pu*V=*+r?#_oUJ zFLRLIpSJeqaiY~%#my_{by!(BM?jTqlD+C@89+25qQROrmi1hbEdfflH zBfQw3p+nCV}b+J~^rW%YTSM&)T0)!z;2D8sA)t zCGSIvQ!*z4vW;?2aFEU5#ipfS|Em!O%gtlpR{$V$W>JAPaT|?kcRahTHjJ9$rBv5$ z{p6$o0B8$_@YQHd>7@DFFQIYHGdHXJ%W?_$w7wyT*K@&>*zWST>NuO}ioc1N&Z=Jc zTp$ed{WVS8vtcEtW`Vw#P%c5L#04Mca|7N0@VgV8B9?#Ygf}q-NAUI0Ig>#X0Cf91 z4NTsiWAvL8bw`1w`6;(~gb-2qYUN+B*{OfdoQ>ph#!-?(;63TiMsmCOmPQp9}QxTry<9zd(hd z8aIxhMpI~3cUNFgpi44&qGpHuwOt_!hx#)6ws?>lLuWYjD&vNlTT5Echn~m0x7}2l z2+=Nm0`0wH=bbhi&?+*pZ zGQ!?!$Yc4FQaq!~mAQqp0cnLBfUpE^L#XQanX&fPy$kf?*{uK$gET|f*b1xG?UK_e z9bX^LB6Y>6B=A0K=zf)Xp-gpZSkwlwi829Kw%d(Ce!wG;q3ykxvSllVo+$mg=itzL zi^)Q{Fn4Y)>(3DLR5w}DCLH%lHGR86EB9NKp-rjai95_&EYSBa3ZcKBiMP16{L~T4 zBRv@0Xf#TQ#uPZS>Ixd}y6objryvQpX6@#g`t(K(K`&{7;(e9^)r4^uG53#1uUh|% zC{V~whj7Yrvfj75o~C>}-N_ewO9gDPt=V?m=}b8u=O@KoQS-XvE1N#&W1XMjpI{Of zEoD`b+LrwCqjpS(QR)RpN>!{x3c)8GF946kL-*9WW!i=(dClKRfH$KQC5n=fdcOGf z64U%%HWgyjB+e;m@tx9$Il_ z(zkMqdfUB7eNF{-9m$ut{z{{JVu@IlB9`g;C4ktp`(b+zt^rL%mE^zIwkO!DOKU;L z9o8Dv`G8!2miGPruUtTYPoSiJe zDr^%P;0-$dX83GB&%QfehNArDx%9P zW{JyO9&hQ_feH#H1iG%9w(Q`G=9qiCPc}EA5S=s_?=F>l2O&RDr{mL8iP(|yQi$}J z(iu)v07sod9jA3=bTiFddTZU$#5Nb3*Q{8F)_CVFqVw?-XPw^A|Q&@Gbe9isWcL z6aKm>bJH2s#8(n(kIC(fZehCip`s!$bA3Te-hy&~9(`S!Yd!eeb*G2Z6nsIchQ19J zP7Xv;t}A?QM0b~dY2;5v89*(1ikB)m6F#A>i0~#jF=C#|QEcxQHu$CgjY-jUQY};} zY%U8s{w#n^D)ih`E{7n$WQ5=sq#fy*l6KZZste~j`@xSe%nDfAlB(fYkd=5wsfeCO z1UB#6YR5t-qo&KobtByGP9n+3dSz?~RSG|5@@Eec(D}|Cysm{Ytbw2DzErpaWR-KeVb3V{;1m?~kZC5Z_8lG+Zw}hQI{HJbDJSK&5YqUK{-E2Za@_ow zxqXZ4+Bm29evDH`>f-e(5I(wh3Zz@QkqW+4eRPgLZ79P`G8`)?S}q+j+Hnq`9fcsq zIM2Ar87A{Yx4YA~6`{EIJ4kHF^M!o3O&-tI9WQsLvk>~R=tE6Yxi!(B`rp)aJiB7L zS_e|fURA4fXV8KG3b#Vl$4OW9PYTx6E=yG+npE1=BZI2~J`^Ursm$9M)ijlFAbw%8 z*zox#K=DRGI&bAQvlwx~(ckkNRLlxb43TSPm7O8aXCEv53Bx^~36@%51)%nq4eD!35mp>f zdv=@OQ~EA`fW@&{V?Ykq5io~a(5269>xDZa1n}AqN=Xs(p3`8g)O0Bnh4-0Ek1c)f zZrhG@K8}%8#btk&STAcudZk;WA5)_0-n#ev<+>GUR2kt3|ECy2c|FI{4&WVb4V(gIq_D3ss zcy7^&Ui>7AzJRp!dDeHVyph7>?~qTF3((i%0Nf2xwo-4FcRF<92Z|KA^Qlbe;~`Fp zTpMltEIeWuUZjou=cb()g=XI$89(DUvL=ETn6d|h!%fZ&Bv?#(QA&$liN3@xb&9%D zHRh}#vLQ!fypQVPd=iXMh%#?i=znHDtED9W&Wf-MwFmsI!C@~}mE46QdW=I3OiS=V z2zSX(d6hflRX0WaO)=qh0j(Xbd_V*jWza`WCIfL=v>sM1_^&+vEM|yREHXehxx;up z`vq$;`u$j>sP`{SBX){KzPk!#5;h!4D(3{mOVt91N@8BoA0z z);dCiEx>Dm`n2#T-8w(8)B5r7tus`g8%~^oyk7=vyuH0H83wMm)zYB(p$Y$af0fQj zf;@k_DtMT7Y+gj5+y26yyV5&&x|e~;TgDXwwN9Z#Q)yJ~^N6L(inAn^PwmA8G(dR1GYx0i1;f737(*>4aak&?DE0faj>quh5MT1X_7l_FN{jQ(@ zTPJ3JZZ!gqvGY=b5vOIg<<~4(yRJS=e_bsk2J(H;R~zXE2J_lL5tp4$_r=k#-%S4@ z_@P;(&1##-cof+e0yR&>+vuxTC4jn;@Os8^>yW^TJ)Jd3wfQ|H|2n-RwvTx*Fy)XW z*Dxq<3Xa~)mSYYjk|kY3a~qIBUw+D|<-KqiVf@wt&75?NY%eHAVwsET!yUifrI|4d zxs2vnMO1T61y8w4it^`Ft!hV{)%A=zfre!_9g@m?C$)aIJ>3)5sbQ;r?~3kE_(M|e z!yL{G<_gX;6S6KIdQYr+-N$>7jHl^0FeOW35Yv*6aB~bYd~zeFBgn_mLpjf(=x=kH z>33TF`p>aX!ooTKGHyTyITlSU`_)h>&%_)W-?|N=8Sod!|!`& z(bfZhd_4eiiG%_CqY!kr^u=s-mVCfWS#lN0hUT zEGjy~6I@%8el$1f71j`6!s;WMZjEj$U+CXdgq<*qJE7(`BUEy1k3{J2)NA)g?4PM! ztFksUm1rK)Z&GQ?NU+2B89ttDnUVHF;s~CRzkFKe$$-}Tn@&Q0Zi`1f*!p^_Z z<9VfmeDLl@#}B32zU@%XfRipgS9wcvnn&>%5cb`S=BH3_Tf&4$?P&hC)jt^}e%4B~ zyMi#~?9;dq<*YYa*WLmjLWWWX`k(c^xXr$Fr0(-0bc|sx9T?$yAy2I?<4*nMJ9?7P zeEf4|fl6O`b=GHr3-lGVf2vEd<=@~vD>%dCcpD+S+Vt6T3TXwhLGa(!OtvF6UoYkA zCD#BnSZ7yMP^$+E;td6#ByMS3j7zCLc%XBehMvFv-9pmW>fTiux>p*H_)=%#OB?<7 z>A0q0(4&_3j+wcr!$VR7e&$#~$d7Y!UM8Q49z|K%VX||~B*4d4d%nN@a3ty!5n`RB z(H}Il!Zvd6g-;+R1;|)(K3mM@wpg>kXH7y0U!O!r=S5X}4ozeQ#r}ZB1CzV;-x=Nl z192Ok2)tW_z$;vV4|a)FFNZYpC;F6`219)11futMb=uG^jhZrXDg2_$T7&PdS^0;i z9tHdM>N>BthGu|lh++l4)~Gl$g+X5FJM7vxB5rOLBRyql6**-&9J(LoR?eS=B`tMU z4`nasuayRwk7ja;s!tb?xLOe!INmH;e#E&tn#A01%1e`Ll`8%+L|j#ezG%myMJ+Ao zy$W{z)`qo{l#r`Xul-kq%B~%in1yUkFm_xQ;cvPL+6{{;RtfStkaUd0y=^0_D2nwN z*E_mjw0O>u8VLdvRq3;jz70zQD8}kH2djv^KXnkxgk#6|8;7{!N!41%`#h2oxBI)= z^B`udxFV9tk_5&7@ z7AttQGkA6t0&yS4K^XIZk8pAjrXdJBnlnP*U8nn_{HawuA7Yyd7jY5aa8?M3BvkM` zd47M`iF#fL(sS^nqx1Qi6{4kF5kemlpkbwc?ULJ}e0BZ~)zR3xL^va0FGqesD$ev) zEy8+lkCZ|pK7}{`6Iz1`nfPW0y|mY@+|HpVe63Qc&K!V#2bl1#6|NmtJpDPlRIgRf9pc@vKlS{0LZnU1F*& zc|n~`-cYVF>QNHsnaV7|9;95yW7+nGivRc&kD&f>-qwP}Bau-DHiD=;b<15UX~;r} z0Mdxx@z-1~m13h8b0vKszXfZF-az{Plwrjei;PxeQ>zAp>IudTubCVMp8Dv|_aAkw z8E~c$GB+O}wCw06*Xu%wH&Sxf8zmNg_(0E~DIomI<<`O;{6HbGqDIp_r51=N8O}j` zCvY(l3F6_Q2gI1W+SGs4-)R4Pwgl!4R+k(-9D-eeZ;3R z7>XCnIN>)5*?-Y_HZyhEkJsKBhyIe_ooimdOX;TjPU z@sSQ-Glda;Hbk#GIfQt^gWfxN<5a8XMUiJ4xi2u9q_f^HAaAe*O=fHMb>@Iu9t_lj6O`#N?OijPTYcb@@lhb3jA(5;Q9FsdwGtc_>&W^ zX&Q@iE>DgDIkQ#=ZsM|0qF0~QafzLdr$h>2EIzY1?<%g3fBY3?jaCRSQ0OoPs??rd z>F|EDHILma{EJ^Af)#}Ea;IYGJ!bIbb8TM^$CzIVTdIOQ1kBp*+I-QpQhdU7X%tNn zH#I?zcF&M)1whU91vC|}`)T6H@RZ{08hlJ2A2jajo;^ADOSxGP!7;&9v)%(h0%*IWPT-+l0M&xr(P5xgY!`K)}$fPw#;{7(2Wj!6I!Gjy_iow5mL5 zfpNaT_W4hQB>2&OF7@I5D+}S$lT0cJ2yAyjuPb=%S!q*D>0?a7dWnjz?eIRQEGWqh*+| zq^E6uYIki~S$&zJP~qbk={dw8Sfa=F;}X``bt(*pW>y?$$&}jro^65#7wbkP)&s-+ zYofizB^fMGj=E3Y!Zg|?cGBnNe7fgOhUf1J_@`r1-5x(?`Nfq2ap9p12NR~vsYveP zN~WXG2NA_D`Nm=0>6H0__#-rD3;Dj}mpLC=$z|AQw{qV>QU$_FwF_E?7aFgn3MiU5xN-QzAC(D z7+V)oE3NB1(Hj3C!0|1u1@OxMw4mi>w8(L=q7X&}ZMcQw*RN(;${1<6x~r4B=~++a zPj9nXi13-T6EB?HZy7~zpWQBKRfn?!Pc4ot0c3Qd=?ev`hs>|mI;&XIi`yGTMdI0p z%DgP2s1$G9Dd?$-@XorL|AqC94be8Wfk&dn!U9_#S-m=6ZOh zR-#YeBno-_x_*aeSBD%~#A|`L%`JSmd??KUe%}P$Ngp-j_ElyDyTxPXL)3$Hix$S0 zOd%F6jP9voKc()7?rtRGV#3o{C-O8TgOSsRiX|a&PKxivS^C)DjcST*J=Nl4eQ1H! zXm_+oU!OF%9I_E9KE<_;=35L+?%<=K@Nu7HYHTdh>HE^s8mao+fx9c99fGKce;Rw^ zlr=o;{#EODXhj`SfPe+U=O9h%<%5m_^h;G6xY}Yxh5FWKJdDoM2Dmf%fZ0wzP%0p#W6~rA9~XRQ9+lHEqv!`&15im}Vt^o1At~xUQB4 zu6AhI8;c4hP{W6E#o9}TE*0?ysFV&Y8W_Dl*Q}EhRjp}&6&Y9RF%&qz9N-isI5La} zlYAf@;Co&Aii-~~q~=(NDTJ$klKy)&nGQ=Kqm^{{PwP@PdGs2`)tTm8MRDBU6^6G& zH0>{X?WWFEN`a&l`4bFbJzc#+`KH0um+l7RXqR6-8A?MzG9rEzyS`_yv6W z$dR3S&GI_AZPX(?6SBB{q1Igo_j{jjtngYL>NJGM1YBSwxBQh@bG)BENP^-5e9_ld zzDJ)jAWe|$C;EYr2jM`pdD5XaNs7M0iDqa-koe>xxJvlu61!jUutmd+q`x=+1lF5&0Lu}}czirpG zYAA_XY!MpFju+4nX6GWZ?DME?4d_Ove~<2s<@O5#C~0xiiiO zeKGTOYKab};UinMiSF1d1=sR#(u&tu+`Od0#>QIGZ2J0>ML|@#s4*bS7Rd4xo1vL> zNBE88wC}1WYp>;yi?`}5oirF#RAWD|*7V@(3_6hriIWOB7u_Q(C&jgrb)^XS6DD6n zNz7oXfV+|?V^s5Y#?B*HfrR(j*Ap7WKa{PKwBh}meF8hYsFeOdx1KoqL5RJN==(@r z>FoUX07G*!PH$^Ui8%$K=ENkClO%ofqv4dVm($Thz;kjJzswe?$AGkco9!{}&$?jG zW3W%_9~%d+Z^p+-$D*rt&gPvyq<>n&L>jP5^j#K|+tIZ5I-3X-;U}UkWa>Kw;=mE?xBi>bg zv*KVNY+9vTkET&Of#tK?wGvSC*5U2)?Q}@%O-n_}V+eY?vli741(R%X`{0`is_spe z0-&`f6_HT@364i&H7bROQ>$-&+|^xc!TAOuOd`+ds#qF7b%Fi8CT}HI z7PS}A56z$Q`AAo9mz-AKOyc=6fa>DF_F^@o?5fqulAFMu*BO3!fW28L0w0pg{{RX{ zj8N4|d?!}XZc12BbXzxZ^QWVd+}=&^Cjz0`v{PD(_pDKD=B~)%4N1@3qvOC|R`+@cE;&p8#OWb{NAi}SK{&S_GIsDZ-OG_%IhhJ}aNN zLcGWB{&KqUbM@3RQMIcw_w0&Uc_@G7z+v9h-zg)~Ea^?x5@mwTWc71tY?gw6O4#D1 z+UDomfI(Dk8g%M;UZ(GY$Bka5T58mgr-)f=%)n~1{UU$>9PLi0@^+3ml4<+odv_xR zz(*1PyeK*|%`n5E>0956-s1@v!{2vs@VW{>88pE5=L;7vSr~s>5<>xjeXsh&Wp@U7 z;aa(c{Tf@KN`fw*ah$T)RBE-Fftjq8!pDAqk@ZsHA(_Hiksnvs@Nj!?bYGC7sMc%n zGgY5Sg*|XhUZF-lV${4j-=!A%SAxzTnyhZDugs#=cYj9#b5L$G4DK3@z;Yx)ep4nO zFMzeW;8En=aSVQav?g0)cbPO9biW|Tciaj{dpagY5g_R6ZsZ=8IqaA{fAgzR6^qMw z>|^95?k4tZYHi_AT!>usPpjKjz(BwOgdVwDlE4ZMX%)k{d}p)6o@M3w+UjxnNk9OV z$U=WbxaoIy6@#Ph#XQd+zsmTdEH>{h*)*NV@c~nlQ=FMCE#Hpx6v%f{@r+(h z?cngW@~2Bw120}n<2JLZ3-+9LVsc?m3w;)nEqHzL+4&2R#0rhXxSJz;XI! z({~8dOX9lMWNDibN3gaTdk6M4e9W&QKIBWZ<7mfp5X*r zx0QB2FO*i~GWn{Ag#FaaP^2dGVx2x@?|{Q4UlpT0O-fRm5z)cYaw<5Rr|5PDy|nz& zH2n4}OBLBReL+g_}6yMotqx9)DTaihblObU}5d%l4! zudpNbco6!8!B;c>cPYVHv{o3GyKKK!`eS#)?CPkK|AHAXK)5D~l>L%N3+d=vn*|{#VYeOCF@Xbst7jkrZOa-cqA_z=7*@zfmIHr8@1~%)VCO^VS z4#8y0sO{tH8KNlACFW>pj01@U?F!N}=z@Vofd!x|NFIOl#)cr3(%fo&zxMfr&DP(- ziu*zgWAVe{*ArkLO@EN*j z5W9=Y>qz0y-HYJKt^)yb5g*0sS}f;{uM8y0g~aa(3m2`0YmF!X#uDH&=6Q+X<%kuQe2>{3tZ zHkOyLZLdOZ9pxxTx@GjGODN|Ecr01t`3VuGMB<^P=@44N=o-5733U7^G}n* zoeZiYD#Zw3`e?a_EIfv;zut&+bx}K8f?vB2vS?t*ApJNv?ZzK?9f7ZBoSH~Eh|x(k zn7X={#`|rtKAkc(x!=rQ#pUV_-vF7QHq2_%RkS1s^+I6~|3(@uGDJ&^PAa6;QT2K| zW5Rb`Rp1P|Y>;e>+AB!q(cKbsi1gnHc7@dVD3Lfk?oFikfNh$Ccd9p0t#c)qU9|PI ziQ-lPtMi*0P3ol^to8WHOxa$hE)m8zC%d{#qkq+sy}QJ1#*T)uOk?dq7xf{^1;PIs zYrZQc`qJy2n4I@QFe6NV>qx?hS;OA6XZULy&T-ZiP9*LL)u1q338O3c?SG9{pN4!J ztsHDR*ohJJ`ar7)QMa+iN)ciDo@EKbye}act{X1w(iYhow^<+N?P@QLt?UuR4Iy7{ z60(mJ0kH7gmC%K;K6vAcT9%kor_ek{hXX*7ya!&;@eULtaN{7v%L;V`xDr(jV%=3i ztg8=Y9JMahS8seeVyd(UCW4L(bUoyPRs}j5A-K@PAp=U+}euYXo` zLRD?4s`u4Mm}%}Aq*S!4v4gmWJ&no6`_ybl$Ox~e$7=h_Y%rs-y3~<$01W}~dV23R1i@PuYK+fG>*5xp4XU=O z;v%Z(0L;4Db5uOeBttMxYlkx`J-~9O`}v@?CUH6zFauAnLNKV-0>*B?$2a z3u^*v2Kq9Ibk^77cAfNQ+qc;#evXDi;{9S%$s^r}cn_C0cw}w1+VU^qnqdkY7P_o__1_CNbRRnG6=I#A4po+-^ z*VN%|ea4Q3OB?8`>+sR{A?rt&JPKH2(2n9dYcSe`oDeNvwyg=@@HD_9k zw`Y`Qzu4I*`7F2n(J&p!st1MjAR!8EiTNVZQ7D3Fr=yU0us-xVXy=$H(PvM~6Hl-q z)l<$3K31@~fmYAJz<~6Sg?9s;6j4tk4uQKD>2(E%+r1->?8OTzb+miGFC7l{rB7XU z;yGI5vhCuHUL`a&f=LuEW_r!Wegtr0Fu`daqfm<55bS9W18q7j$3S`9H*jh(CfI1~ z#R|V=@M5v*Pz;6S^r`~qEv7ue>DNT!ewY&IH_)wLz?Ywd&JGMfwo7y;CWqFMykY$F z1W)pcLDn)@G_WAhWgC$s|O@_D?ux0QL9JwM?SX#z^`8C{?TVzYU8HuZ4GJJ0V zs~(g0aH9cw`Ac}MAnPH>dMQmW9+ zGhF4lbYllA!ikk0S~%G9WZ&3DPJ!QWkXgL1@HnKD`O)knMis;e#)i)}8;}(b`o;!e zj-mWtj#N9y$wy&h6P8R6=SyLb+FT3U$G~hPd}f?+q`&jo2s=z>vg&`!Ed0AlECH#V z&|`$5Lq{5{E%j%qMSC9q>d!I?)nc?#WQj0~AUC0W2Hg!s;HCdWs``>h90KJ|E1}pxw|@!mJ^}ew@TG24Fmyqn3o*e=V;50Ew0y*RPfvd3YENU7G)%!mE-nsXWi`l_K9aXQR>^UI;ISamZMuepCT@86>r4N-|>f^hv z08=0HqcHOp3MORGS5&Se#WS$C0HzDQM?sFUZEYg)HOSqIbR~?k7k~jR!#UF@spiB! zZFw<%($pw;HESWf{|x56U}HzLCJ@mMb+>CeGO?t%mn`OSk9*O^#XVk4jK+iYo>Fqe zD5g}L4PJ7mABu*XP^|zTw94+l6(PA6j{xn+r zB6QZFs9?*(P84@4VE{fN*dD~gs)17(oV1~0MdMNC{)KrPe+E&*@f|dRilut#3KZqO z2&a|~b7GNfp@&KrxAhvbeI4m8@a8}4UGAY37#jQ##8;tAr4jtVBk!}wX~FL)ez%~v z+U3Tr9R{O{Q)~U;Q+H8li^N2G*c%jFzP`hajXln+E%ErplT>>n+>H|RNQQZ@pxYWm zSf$`9%pk`X(I0=@L_sK-4PNP)fr2b_kefUBtpRpn0jeYH3acPy5$#zx(}jg9UW0Ug z4NOw%^qtUx6c485!PY5EOI(gJU%a?8tRRkZK8cm0(mmWTd z9|)!gIttNrgR-za4An4}fXD9o+e{>mj;0QJ1?3*P`wUuq9PL~S6+AXP?6w*gluXLA ziNLCb3mKfUXdWA@)MZ!?DLdL$i(tlt(i6vkHL$Y_*EXOxr(>mhOs9u*7jdHj+`1H^ zjQjiwM~4tB1iIbB7DII8kfjW^J=xP4?jwfkpE=52MX#4}>huzqU*G2D)*dHU7Fg=# zvA=^d9(#873T|u-7!@VwPA>EG6DPsJ=++p&sbt?}$RE$}Z+J8}uu~$=<8}>N2DifT zeDeL@gdU{p`d$3Bb^NQBupfFa>>d5@N8BE|cpl^uO)~U>lVA_;igA5i%pHh?+ z2eMG1t9cMgLr?x|`?yc-!ZwU$MDKK;cfR8!Z(Q5r%C&9EnE0!zlvN0uE-d7{Bl+YXKUfsHhS#_Gr^j`g$!AH;t_^|eI1@S}F z^uh__7?A!F?!`;^YwOq(%hRtRcvale3i;kG{N`oIyBvQUS&^>5hJ~#hR>x3uAUEiS zVlHN6zpF?2KaS9jFu1ixx9sr9=~YghSY~s3#CSXg2gX9T+huvFORsAww?~XO3K%Fd z67nDHAr~zEjS4yj9eJcG(VZNB%Obra^m^a%YtTu>lzBK0dm}Ja=*W81A{|8w+tiGo zvq1BwXb40Zoir&jOs0vwOd5o>XK5aUSg)_A^*?nzI9d?MZ1@bdu-^0Gd{FOWPLqU+ z2OTS9F3dhH7_d92dk*&cU>A}8Qy|@A{BViH*9P|{((8KZed5$OlkD;KNk)kE(kD;X z)m%axI|yK9B7|pg&R}9W$F?tBni4E^O~-mT5SkMC%NBc1sjh{HyNMBZ>V5EzQaYhH zKoxxQ(wX?un-9Qb0HFxhI@~yeEJP15Z4zi&Xe`}2KLa8Oi&JNw> zoO4TESnbo4!F5V8F4qL2EQqoALx>OM}}Sta*`!F+s( zIZW1~V(OlD6JnB+zq)~z1uFBd9*4X?#=>|AODo{Fr(dii(GW{8D(YkRX-{kpB$MhW zhUw@!GKsJ^7t7YVkBfF4cnjJSkSz2h!H09pK=+qvtm~;)3Ii8xO2&j4ZCQu%S72`i z%o23ZA45f+MB;0Udply3Akvqau9M!jZPrt#GY=I)J#!NtiQe9q4uUZb@9osJLfR{q z$;MPd*~ID%OXpiksy7VY3bwvr#S)GoQf@GH*S}2Ak>IV6;c>C%aorn&#*Pzez3Whr zu2K$7h_K`6_>zUJB)8Q)eVvKK;Sy~w)d(HDjE+AO5=F~saT(UlYa|Htad?X?0T(Qs zj7?-pog~E_flx3m3o~8*7>^fU!1nGWd9H;5CeM+rH}IxF^6tL#(y^f+3m$jLAW!6E zc8m@>XxGBX;jcsXn>t8ODE`hEy$0qqj5kLV+XZ6HB)aK6-g``C;Z|r_pZ~!w+4otv z6{`AZ*TTSI#sl0&j(^=^dxAcw&tHEBw;3F2mfT*6 zGjXHG<1$ownLKsSdB`^+ytOHj=A5W;8{SQt8i9u~$a3tUW@miq5`5_ZM*YNBw{0-X zitN-r_ZTLKp7{{$Fc_=oEkkFaq(2y9jc-1LbB4XLcW>WiB5_!>Z7#(+I{Z9pUkwM! zj-tCRPG1u&E_L&gzM$tUaypil8*_9KbO5^OU^gUkyW-A^9|lIy!5-!7H$$!SIe1rL zs}a)c1dGoDL^F_~MW64%HxJ?32p(SwB5$n74aNStocsw(^)n;*TovpX3!pZ1NETJ3 zGRRPHd4>Jf4&C3-$G%h0>kch|++d8LH-@;e;J(@mt>pXufkn~77Z8Ir?aE;-Or9ZI zBXn;EQG>dpP97E1S4g$Ezjl0moT!G`svACZ^Ng1r?V4Z@?FiaYq$3lnNUT*(-4x8$ zD~!*1omf$h<=-O?3|zeQ)^*eu1$A*|X;UXX6l(ixJwxCL1N=P~-kVz_E79^YjGlx1 z9I~`XD$AHi+&%X$((CrY9VQp^S(H#O-7}ebMH`V_57xuX<^1H)mUE_ld&`#|B0Y7* z7AqbXOD#&K=)i?yPwAf^+#ARY%|aeD)}xd-|FQ=ULDaogOCR`mOS!EPX2Y4{F_3TQg=D3s!Y(1 zh0A-0j&Yaz@J5DN@eekNUVjDkZ$n$Y=$g#Hu!OxKve@M~Dg=pwFQN@-9(4ltHlfZq z8m_LR*p)L^uqF(^IzU&@jtP_Yh*3@-%BOXqZorY912$-Rs8wl94zK38AZ z;|XN;yxLgp8eckiF^vGW^L*(7E=I{wXwpvi`O>x7f)Y+D{<=X{Ji2GXbFEoLCzdW_ zD#;pOy7LCJpm-OeI9kfbh3)&-iWMMVIO3oRpRYU?M1H& zC~l$SXHj!2i0*AaX+Gu&0=*26WmVve4Hwgcx`x)GKxY4B(i}zOduPR6Tfo=RHn#}w zRX`b zp6mD^*sV;OCdG2c$433{AFBl+Abkn;)XG8OCe01&WKyFO-@Omfbg_hkuMe87L-8Dp z9!IiOFnJQ{iNsxS?;>59G&S00a`CS()~$>3Z1N}&z35@;%&5mTUYW@OJE@lr)+o+R zAI#0QUkU!Vsf{Y`k|ldbN%1QN??VlB4YkRdI_cinkP_-0nuSJ1&IlHVj~z|h7b_Kz zp=YTxB3mml9pBW;)m$ig9jg98>Hmqu5mG0Mx-mL<3H(ctmqDNpq9qFn7u1rFZ@p;X zbOuW@5gKipTFnnGiCM)U(9`^aWPpkEon=rb_U3wCF6IjBr)QgRV!Y&*= z%H-Iu&kMCs?*VHDbs!FOH%8UtpuZ{QD2h}X{OKJReskFvtzLt@XCOa`^d3vLmqg+& zxId9zCyh2C@)=*cP8JrO6j{{zTw`iqx=t@XyD1eg4sm8GFBNF3e(*Ln@d$R9Y8%X{ z;7iv$2z?(#h!OCZ7(8<^BB=Pia1xTS;?=|fMvUSp4v5fj%T;C#HCC@8z zU(y*IlgBoZsHvmqu7qL(9Y2qDZUiAVtk5$4@LS2EY6UrIU@Z+h7IRd6sK(->>!XByXH-k*Dk%o`O61Z2uI!-i zIE{Sly~ry!@V-KPXa7DtK-9?OqS3~HjvanyfHftm$0O3Ic0nEmy|(}53}h*)+b-xx zp!7%qT4^{I>c~@j)~Y`C3SjI*klqSv!+KcBkmV@U+h4`K*wXF=nYrJdDd+$Tf_MX! zM=FC3qfoEHj6hv(Qboh(AG$EmSQL=0V0#&yhinb<6DgXWNZf(@tA|wk(r@!_h1hCZ zLg=pLORpDD6Yods-9bT|c2HYmr_Z{!u?Tn-jPXtKs0cB0zJB-gnk#HvhlVV4RdmB5 zr#x~+XHHat?I_hs&R##mbUeAO=v8Cb0d4|YPz*bad=EZ&SKnYFaY$&4q8I4!67VY6 z3f(1?O!FE>#RW~dMOhU%X~XpNtj)#7D7aH76?Hy{?2#g42L)(Ri*6>}7Yhx?c_ty6 zn*rMutoufwBYil(6OX*=_;hjRU}Fyk6}q%vh&J}T*b(_*LXCmJ7|AU1ZSM{x7QgZa zvRl7U-()G|W&~d203gZ`` zcml~*KvGG@MB;Yb-w{&#(Yj3PrO%!?rkWbHZd*-_g2_djy6O8*#^Ak)gKdQvmB-Ke z(n0WeLbj-M6nEW3FXto*-z1NUrK<%Fi#G=2JZ@~r7o*UZuwNSeb$M3OU#Nn;XAAtc zVOaDT`!1!=LxQR3q+4ksaU9eYU3>-Q0E$tZ<|H!l zzPHzL6e7MIQLlygqQF>SC}AI67%$az)|;8QO3^(JJqbyub`1V?7{3DDM?h9mG(C~H z4fiL~Jz?~`L@38pAH=gK2-)vTSHO558dV@z4YkQ-rc}(tmma!(qGsOeqgj0NUL|bP zU$NK=4*!Y?k@mW&k;W!U>O)f_4g2FvNF;R_GJLcV3Pww~279k9GS)7Y4_{f>Cr}rx z0cJt5D=B$2ah$ZQF5?@hdkwN-5ZPm29}MB*>Il}bg$$NkQS>&J5H-J5!Sz`4*%PAi zK8pImnxMKGjbR&bM=cDK`W@%$1yqm zcz5q$6kV^7LNS?vVuX|x=G+?o%nEX49l5%N-r7a44ZthvCk5`s2;KnwF7os_cw`MZ zw+hxG+d}{(>);2D^42(rsD}WFE*EuvBG#uCAOwMm3Z?P*9Q9s-et{Oh3Mh zk9J3aKP%Kbf~=S@TQ~B-`c_BV8;^RNksDW`+Dk{E=TLVOir10i7Gz5t+{!hPNZkKi zQ%Q&x)V3EFed%?xkoLje_7&E5jf7}O9kD*(IT^k97yXE!8tjT~B6lBnyV1G;RGwJ5S@b#i@hWfBs- z`aWD}I}*#ofp!Jy#rs}@9cC+vjQTuK5e5jEfwMWX?80MfP~*_;0x`#&VC^hg6v3~3 zkQfj`vmhQ0%Lf3e!E3&63Nf7cbP)bwO`gH2PHf&b@s?{X0xJ)LaZ9ANKB0!01j#~; z?uX{H*W6Bfk1NED!Hth?cZ?h2eVmC>3A09fK3E}#E|@nv0)2xn8f1}J?TF}Qmr2ou zkqKRZOQs{)N)X|Bd~ZgWr5gIMJx^?gWTFt3@YuFO;)ZZ>tSc;e-7n7D5qxM_!RA`2WzmsNL-Ibdy9YuCwu!$BcgZ>Wo9G?-H7$i{r(ex z7mL*j6~SABIEUM_WM@nCdZ-T5IbF~{GsK>&unP_uD!dAO0=PvuuXIAU(cw5_RHP)B z#BtHGx)e81e>p^`3eb_8Twn`{-FM@lwKsYD?CPk(MO{uB$ZQbb9f?U_gvKkm#3-P^ zmVu%SBE0EDtmw!grGZso$%K6{f?nSW-ftYoRemviwkni}+}AGhYlO;$zsSQB4L>qO zpr{a6q7r}a$3g{F8IB7_NT}ZO=w`I8I7KsouEL^*#NIU@2D){GxosDNy1n-P=y%tI zXuMb0cCf85j8oNJ3C+rK2_-3;rbzL7;0SA~AvqHOd81pTFYRC^L{L$HVEimxttqNUu>kMM_ zmP2<6LY>{}`2I<&0phY?(X4!^RX=bsL9}HPseBN>mKaH&J5vxf)$5T8>W$?V)tUO_)yUy6SS1zOaIqCY7${oSVl$8c+Y|wtO+){ z+zNR{7+$C_x2A6*aoE(g(R~Hg7^<6S7Bjf3wl9pBFe=a!bjgG!DYtW*)CXxNM*d1d z0;mhtu*RdF5f1j;fc0_OEUu%ryo_m8ed*$hP1HL?j?wNSf(#TrVK5(9#+-T!C8;TJ zwhZ3>qjGeNLC@#d4=iBLymgw($e9ezXZX}A$lUD6v6a4R1 zF`379Dze`3Cd4J)#;6aGbT>r(O^_m7{7M(6wQ0&Ok^xH=>6!frqX$uW7=UiLASg=E z9AwSH34ueO3_jgCtyl& z*Pyrxy^COa$?}p&%<$$#x+5IO2VMN)2~518bDA0%rDuz@+j-%{wA&!qt>{2+sfn*DzL*%g%MM3TReG8%96HY`&v;iSD*eQ^=l1Q(k z$r`#^9~)XB<2}@`pw)2F*stEF`nDG4U4wRleI!%}BMxGjSY2w`7Lq9PrE5a;yHuo5 z)M`iu_7eUo4VBG&u-9ls^y_Pgunz??MXV3e_PSA7JxFlG=)X)Vw5SiW$%{T%S?cNU zdDr;5x?4v>5TK{9$E5phonYI{vc=|3m4l9=Y#_xOP`w8_$6T5P&e6Sh*c!_*xX^eAyRJhAj+G@5+#iGdJK2^lv_D`%bWQ^6N$S( zH8cZq6_i_`yJ7HJ&e%@sZlW0>npOKtZ$~YvD~}Fch^h$_FKa=Vq4H6WXTcvkH5KNW zL<`H{kyQiYs~|dCeGQI_NtegB4hm2?OurjF#ujoLzqvR0{fVMp!5i4x3FQp4EEx{& zgeuMrk*X8Kdf}&|%4~GFu8rBE6omTMRYgL#3P6XSQ*$ z@1xzN&~WZBCAgbV-T?O~*o9wNeR*l&-n2#!a0kqTJp_VUQ1o5FPoB|7{_8K2vImj7oE>moE zkR7Er8qqI?ES7r{PyP~cicoSckvMELs&4gAZlUAru=6bJT|)Q13`;xVxT|6UGf^0O z3AU7uv>FiI&Grb%W_=0e(&`9w9SN*_h`@H^wwhYbtra-pfI#Dgc^#1q@h(Mc?*^!^6`U*jlXie1!qLOt;M z*l5or)mE2Ij4s>On=1_w>e5dii}ic!q|r{OTOX3H;|4nMFV--Z+EP*~G6o6>9{Iut zYfMFq*0%=mhW#G+djIR$VI>T*cYNrX(5ebE7uS0Kf`sZY13yVzueWXE2dz9>nqY@B z4%me18o0e6(i4e9!CIEbgiyVWb+kU2)jy$#yFiiUF&|)}-M?4y*uc1aWSdOb>3} z>z9{E+=jY}i#n*b(9tCrzl@Hahrvr|u?{*4HHLi_{ju7*uoDGCOn7$jw|_eURv&nE zQ=>dir`N}v2gV+C8ahJO$A5cjD;{fVVorxsL|4&rC$<4k+!iGakV@d$3VHn|;yoq< zb-@I!HVajy?o+Ib2vj5F$}ajE@M;I%yM%u#3(?b(B-H1kc#|W}g+Xv#&82Mzsb``( z#5(5E^blwgN86oxY2DA540`Lbr%kfA#wJFD3uafqnJ{RMWe;VnXeFV3dqF6PSZWv) z)Z4w&ELusJ1>08WxKKWFL8hbW2mS0i1p8~Zj_eZyc@m=O5Wcgz{A4bu*#>tLsdk`q zie!07Bqkh=NG}Kn<{&;da{#Nx=(?MJS*5Ox&ZO%nGs&MdwE#EZYGE#dRgE3_CUf{A zo{$y~CRhA5i!3WzwAxBTzF4j31Ree0C?dtfM0d@1_*F|t9ZU0qeU6DQ#8 z31oE<$+9>g)BAD(MgG;y2Pv3&AK73#`MqiWpWj}(LE|iY1 zUME&-tZot#M(4bzj-=O7_;zHwj)Ip8CR#P?uB5pM>+?V_RC{3|SY9N~d}#sfY3Po6 zyV*1){M*L_bX@?J1yMU0h|IpfeohHB+!svfSiBcMV;xbqQK&13Q?&AkWfWr{!o=NA?J*J}xGlC%a(&PPlvFJtjXmeiwRi_^2OYfzdtXAUFQeuPn7zJXc&7)-*j@2DMS!e8(z>0+>8$^ePYH)>) zUA`-~&D$Cah@j6Em~D^R5x&=h_kRQC;(5$MA2BBUM(&tga64k;M1;&M{u>79E0^KZ zFQC~bynhYZn|~gDyJM?us{AyVo8fq>%N5pW>(&rns}re5I`M0_ssAbKMC?wyZb`{f*Mc~&Dkwk) z4h9wMhE9}{XR)**lZadUf>}2bsh__aP3H;k>jFy#1{$L0+M4p-bugAtA*AVW8vm9B zPDf9B#AYY(mM_)tJ?=Qz_Cct( z16a-RN~-}-oQ0~J{8hlN!mbMyWekuTvGq!LCfY64%>r zpBt3P;C#Wrf*{Uja_VFDrvv&idXd+@ zbW^{bim*I8imnSj3sLg2ms8jdrOhCNt{u}i1J=xVazZYEZGx!Z1)jY7uPu?7ik_F- z=j>o*PYQC{gbRIaE-KX^Mab@i1uZ>#qk`c8ec~+gJs-n}!unPS zYRYs-;y|QM$EnY@2fZf-E6NHswvp8Z%(s6l{>4wha0~3>oD=!m8+8R(MLGt$J~jkm zQVB_jGq4^u<1st*!Q;K#%JFDKay%|=5Vw*^IJRrS?SPSoZHH{RU@sF1B@FXuNm((l z9J^(=FQRcfVhH_6j7(eOVB%9ZL=Sx|9oe@b@2V@)=aqw~lS6Z$YeO`D=vyTr>-S6S z#_B^-IUuG$b%^+4DsY!byxln*k>0kv9FTA{RWH32$@VQ@dfi2oSVP^nzp#2 zlfiO3LUxzhuAv^sE?DGTytr>vAv#!#_*$H|BXSub;j|ZxM8})R*)>=;VZb~h9&0+8T^_{b(j7M`E>P;Et~fNuM-a%0 zjPH9dqyq@-eH)*!fLRL)PW*^jz{uVY0h?XYDpYaw`SF555|npHFVh`3qUvg zCN+z(u~~6nQ$Oe9rZa=~G>HA$4&<5Mt|2yHippLc=q~C8K@YTTtck?in8Ok2bq05j za58|&gqOD|=~&GLsckS0kHO5F@)GbaM!h{W@_x#fZdz{(g&ieR+$DpYad6$n zN-)~gYj(!acVk>$vfSO7SXUe&I=)2^<@Jd;gQ}Y`KG9{|?^5M4N!6!_Q{paB-`HDp z@G83di{L(wX4g?CVQPE33L?FZM8Tv{&`3knYcb42E3Hv*b0G~;_7JJ_lVjs7_7t+Y1?Dz2 z(Y=Q(gM0};-bUps_>Da_KJ6H8ShD^CC*FC2g>N_?#QLp4v{4+eLIaG4NOuKu@+tJz zmm!JtDU4m9s&`fD)HuYuJ5C+!E200LMUsCl#X(y1YsA zzxV~k&tKbZgh?63#^$4wMn_7hm+p7K?S@%Jo4lim1RRz~SHekRiD3JP$ztt_E=|RV zmX4_HYN8$uZPj9sT_z`(NaIWQg3TPxPaninfkNY=)ulcMDgK5fe_x5aVo@8CN1fK& z5$G!Yo#Di~vcqInAct|U%XpY99ucP4mkq3SLQUniIG>v8)>r|CgDw`E2~*!A zkB)W!06Zf^2GQiA^Nt<2`hHV0#R% z{|aUK3^zZw#~VM}W&5(l4a2#wyOwkQV~_H_A9_FLv1Pct6W2Ru#kIKeL!^Hi&6mQz znIzFvqtzZ_&xUAr4_FgqDGsC-Oc3gsjft8x$)lo7D&}Z7j;IvIA>yvNgbHFAlZdDGGr~!$81Ppabwj_Gi^55^rA)uV!FLD;t!94`|U)FTHsj7niy) z%XDJsEWTbxYnh2nrfsVULR<;f8QlXp75so|LnOV%IN-B{sJV^Sm8B3RFS~h+_ABBP zQ+e#jAwH~IMKIozmnEIDAdxtbMxa+v?xH)NLkFKk&9h*NP#$g9g=zApWw=Z#42=ms zPSq#`fW<5b05`FFQs0V9F0xL7{o#Jbk}gL6TGb=OOe|-!{#V8tsv)U|%%g=t>@tk5 zg6-eeSNC?oR26!16|=GeWf^S`b5Mm&2eJ+uFa0}Q@kQ2ud6gIb{&`fOcfup9;UB0P zcwYR87ua~_2H*1Ee~jMwRk%Jl(E1Wiq!n~}&|QSV%@o<3LPH~-arC5jvv{l#g=Z{t zSc`CPV%fwn`-^~DA4-%OAkV=0$w1l>tSy#skj2iTjlgbq3?)YHyTL~;b*@yqBx*hT zR_b(@)Apdf-F&G|4tF!l+|GT{^0TTVi1fPo(pXzTx7JEr{H~mhHQ|fU(8w3*JdsF5 z4o{@lCz!hQ)0_iZ8!wtbtEo{VvK4$RWmQ*Znf0ZIK#xod`6!|df~#ZaDu{8R(u?{K z2rA=Av3-V;u+KXyOH?QFDeHL}Ct&|Ga`? z1Ks@sI{G=(UP2ioyAC!&E%t&e5Wpb+kVQ*|A*mx zn?_xFb3fBRP1_0e0M=wS(;0M^OINZbl4mB}hUq#&`SwkvDfjgbv5?b*H!mlUUk#T6 z`cwS*KfpKtDc*htn+)$m<0-DmUcXPkZh&)K_kmmmNC7UWH4anG-B#?m{--#OxofBcls z|I;7y!GHHJ;y+!#a&Dea5|%S8FL2jFZB@!0eLBM)tfH)|FQYVFjFu0b4R-f+C9EbN zUX%1uj&hQtUcEJZ60h}bUHYV)V!oYX0{M~`Cxq9L@^y}KwB0ha`m>eCs-xFEH=1%g zZK-N9-tM5j1aGUi-!Qxv)zY0>Q(r^6+xB)mZLoY6ZD?P1CSK%MOv~@w)b8ba*S*eO zdX|+JkDXt&Yq)wnwfoa`zhAGn`R=T$B z^U7|CmK;kH9{kgXeDH5AqtEuMCcFEFyjbA3-zT-#pC-KiAuJ^wFMCK{^D*`tIrK5E z&To3n!xEXrE`%j4UdR?Rd#F8yA^)+Lwxo3@#ZHHcAxdp!DU_hcoL)MOC()~ zKO5}#ZA+=QM$sCz+A6A6Q8PwcMeX9PS$o9ZD?(68)oN=5u~ktc_DW)fruG&)_6mtD z_RstM{R_|M`P_5vx#!+vU6{^JOMO<+Ml?C#?6-TfF{O^e+q2y&t#w#}20O&9zvWA* zg%&h|E*_bvF7X%kI`6!D>mjY}(c%+Pr23bVF=(<4Br`1`E`3T1*`+$V#Mw%JtlKVJ zulct{kRxqV$>`D)tcdz1T6(!==l{3)00WTnxfm!9?6R}q6l#9zGrA3!ib}+V>u}8r z1!R)#w0F|z>CAn6ktQK`c7MF^#mNua3c{eKsjz}YyH|MM!@bo9kLBU>D0geFt0|54 zE2!Km_G(!O8DwKbl0>C_oS^ z&wQ12^OMq(Xx5|ML^&!nCy<}zW5&O>&!!X@c4D**UKSLA< zBUX3~XqyV(HoyeY(H@sxI?pK6&u#oA6%p zbwH*a&6?t$fy*Q>}YCenKb&{yG0X;5w_;b!8$NeVatFMS!<; zCA{mSCwwNcDy-r**;({X>!Knr%H2?7v{#ny)H42w0$}|6=BR++r1)szW2{f%$a7omQB@C zQ^?`+5V>P@yOeJ&ti*Kp2U}2Q!j2*NvVdYmQ(qG3vpef9oJ|^HeCH5)&LJYjE*`6C zeuepYeEH9%YKTesuuTm@tx^(G6ODyI)pCNL6Di-q_qXV4z%k)|=U#U)CQHq8miP#f zhc4eMh}sLrTruYIgnA;!96*zyj_xHBa79+VxTimOj-$`*3*o(Z%nxS7-o8}j8KQPc zlY`JANrFByryQ;?yfDC;87&+Bc+>RPFgK;~fXzsub>Q-@+{H~JR{41D&t^Bm2}P>2`N4N>RdXLR-~ueSDy>u4Ff(ho};LL zO*4nZJ;ufNPTtM;YDT>}X^QVY>rpyAa=C;B%wht^+xJxmx0D;-uZd7yiB3)RGYhu- z-9iC1X)_4D4i=)={vShSlI$VJOj}xAbUGHIECi#GMIElzE^dcHIEb(LBgF9yKhIU(#YnN5 znvDJw2`*x@0JD2wKgadjSXC#Z#gwBb%OW^57d=lv%pA6{nJ14{+9tDAVFkgF?4KUDH+`PcS%u6zGZHLmjv z7j;6FaYPy!cFg53#0*So-#_G^xQIY;<&Opgg&=a?nH4=PAmy;VX)+!agLMwtY&ZSr zp@k?%L}O{vriHZ>YV=JX9?3yh`VlN`3Qm>B>Llsgigw_$?MVgDiJ;05zDN=PAY^)Q z#?Dfd9O6WJXaV6ckrOMB+>Y4umNT@^i7Y-i*wF|Hg1WavHDi7xHqji+_UNy7QtgAe zJWn@7t4~to{g}RcCG2vR zE#;-Z^jpeL-ade!20mUmqqCwln9BPz@~ksVn?lgaeCkCVe^wNj6W2op@DG|*7CIea zr`%;r7&?k4rGm&en*xE9TlEugEgRitk)}IS;(0y=H%-Ig{C1v@U~KJMB%PLv!|{o5 zW)8!27$ux?#eQ%(_W%fJb!!;Yt2^y6lSws9i@EdcXH3v-*W1kFIvUei;Mj!$N3QzHe$z`eoL~4e#~N*l>3fG&%&iJg z@Z*+0X2pVxlq}gkqPnht8{0RuFU9%7L;wwH-jfZ+L zLExW*0-0KwM&hDiZ_k^+`d`NE9tW8r$<;bnv|Q(hs&bbX$Ht1EH_C$ei%dTuyXDSy zSwj{=PJ`nwr-aU{6O9gzK1|!t9Iy$x=RH-b(`$KJPwC-a$YniHvFPWT|Bnm4R6q8& zdxAb}Pj;3P;Pgb3i}g~l%`tL~llZ___-~Sfgf5}M4k9ne1f_G+bX4Am=s3`7%w?1eK@EuqddFDBBbM(NQO5hc0mIw(o_H<`SPnePgx-dB|DCCcjl?z`H+GWOuTf7!Apd|dq*MMH@8tAm zJx%S3Ke?tT*`H*PqlnHjK_No_4> zu9xjsr{JCSrz&n168r<9a}~%)!Y#v)$@i2ntj^97u4A0e+#C~JTob-~0?w$z^l>~oK2X2~h8d~i8k_V^c zA%8U+BApv!Zu)*sM0&To6wWRdRQveCs#FnbC2UWg{Il^yYDF)thaYlu7I3QM03|s_ z?rZs&J_{b)&bZUSnAbTK#UDt3e%3Hgr3x@Z0iP$T4gjPxT07K*TpB-WWboqd`NB1# zf)iW=5;?rAQ*9+h!mOqn+m@WgQwtq#8>%v3ffLpYvu0D%6V|szKtAwqJ-ifJ{D!+9 zGLAwVbvlPb_s;3}^8vj~S08>|t#Wznv@xHrUsYoE+9Lc0HngQ`Ff>=)SBp|7t1TDw za`O2h&GBj&xZt{Esnkr$3)44CElre0_NlB8KL#Nt{dU8IN;*OXO&S8&RAm%81)_Sz3`YQY$Vx7H(EDc*^4?g`kQ;nYnIK9ut4)^g&naa^_KnIMq$b8iQ^d z!6xysiu0EJBO>z$^OxwQ-(kSu=bU`lv({w--YsM8V+tr4i{dfZ`yW1 zGei2B09GwZ+Mc3g7=e;41_u-MiFxtlPH7OL;d`wM;P=8eSj(3_?R7fZg*N`a$*+d} z9_JrcbhGA<+nU(zXe`9Uhr=$2j#h`~a(pP54 z3)bb>?1M_~&lCJ+_w0nJwhX?8LVS2~$fj?rZQ7Q)#yNjwV0K=V1mq>#=)`{OFOBts znjG?r-fB21@|70?td0w3`-K=gzzf$HC+-JTc~`urV;>(vxjLa+7^fs2cwB*Ond3uJE8S&_@ws?&#TP;YU3mQzAkFOWxF4)!=@IZi((--8 z#9Jottoo30d9h&$#g2F}PH}N`T>*ZPt8JO;dLjac_Sra|Ha-fN2wt4!``q60Q z_dTpUXqg)L`(X@rX13}#k-0U$$}*L$w?{-yzz|Z%pE#s}Nu?3FMBzXFaD7*ARZH-v zSwB4aKr4yNDxa30_TVq77QZ7JzAE{Wl2}3iB&7Mj2O}TQ%^HMXLqppIU7LZ&cbh`9 zp4WkOhl_QOZk<{cvo$s`N~xoqHYgIErO0E3@OG2**~>W%;)d*C#- zUTCu4;^LkQd&rN4Lkbq>w0D6TlivP;+k_9-fx-X>OAJOLvJ6N}J^xKW6yCR#T-OCX^!+%k_Ik znf$uwgZyimP^Rd;yFnK^yIo}KVi1EVuJNIt@#{68I<1xKyFc;GCTIFTY2y5NFp;*z z%!)7bxgom4X|a~d?sv;&+~a$NRwST0m0D7$cInTHG#{6bmgs)I=R9x?xfRda{%x=50ebv z>KstBGYAA|gFJo8{CrJ;q&y54Q2N-l#hvJ#u}MIcnm7#UH(Fq@)f9mAKY7n$9_NFTCOWi z;uld5U0MHrN%44As{dzNg__WI84qlPzc3ppoCRd!s?qfub8kNX>Ibhb^qC=zDWvZm z-VWN4FGa2HPN%rs@J1`RSyEgo(G!-i3&`X#!2a;3^f+Pifxkd zaP=H`{&ia9X>HBQqc%#rBm#(a8=h%f8ujw=ibPfo_uLAN5zOP-zqW$a(QfQ{nV5n) zvQfBXqg&SjWL@mv#$C7*_qVV9d^)#OBJ8mxmj+-ld9^8jTiQbe@KQTN7tGV|$32># zeAw?rmZiCq8Wuk2WYkz_YJMH7O<;l~r_n0m1_3S-MU=VRtbD z8~~>Z1kL5XFm1}&-leG8#LP}(=j+;Jvh|Xc7w(6a+b(N_TQ0R1plWYc+(|n5_L&h_ zWOeGxot*0y*-Z}G1rrE5(VtO>`i0Sv-+WWzVwaovjIt74B|9&m4Q69{?bm*EP;+z6 zMDT_qC-*w*BaF6Z@Z1;eE3ws@uv7h+zDr>ody zP7IkN86tZgE!l0(Yl)%A4psCI*di&@@o{ow5?;ESuUV*$YHT-_h3&^?gIwkmMDOj? zBs_RWtlPPciOc(y)UZ_;fa=!=HPaJyh+cjrS&lYq`))BE`E z7EsCHa)wRtrw?R(6bh9734#Z_WgC6F<&Uv10(}eqY8)2`Z(UYxqfQZs+uepOf%+EP z-hXe{gO`6Hf;5D7Q{{R@qxTy-(@O2w`zBOf*?(%&Sg@8hvD~yE%f7x5xKvvifX>gJ zk|^dgxAA{?jtujqTGS7h#C&bN7R$~vDRB1+gwE_Fme9PiXcznt&ht)iq0eV_%4Ksb zI5hK>c}v}OfU}xzyN!P?fBt$)w`#-_!~ebKY~X?TO!k}VSl!Ki$Q>jH{ny0Ki1Pdh z5f-PnaD8p(=`xCVy{BG!2jYHDq-BiONDyN|+c71m<>UgL!Ne@pOq%LRmuy=T7w>ob z7}vlgn>QbwtlC~Q`WkXfblbI?8eVQQCB7p{dKA_`W|HP>%W`kq^OQo94fgXe>8k>! zY?!($&;kPKcpoW?*5ckcir#1_EL9W8n7d%$4mAAUen;;Q<>o zAVKH2Vo7#CJwUtg{)$V&*)y9GAi@b-@PYrTJ#xpSM0%5Ayk8?t3QjffYK_!8kCN=} z=3Fk)!ErO)m&GsDh9Ew($7EDO^Y%xQNcvmC8Ao;H@!yU+z!t7oMpx&KYhDGYr*X;2 ziFB3ry6R@-ocF(;Z|YrxtSJIDbSAMZo)fjAE%R=>nJO&*(MQdd{=KJOOGX%cwkL zfL4#Sv4_6-`fXbx8cIrj+6(hl1cp|I+-OAWar{BNrmf+uJ%Sukx=8hZ*~@AI8Db*q zuVzo$R(eSNQstL7d&0hkgPZnx&;!(nQPxAxs27 zr94EAtG$t)!@=*0qjhIs@A*tPx7a^EjR`$>;Nae{8`9~`8$YjzeiXaFr)%)%IbCAm zu@LVMLh|i|hmkUm;fP5C+Emj>abv!M<$_x2dGl40bOmWzQ;0WaycNlogZm(J1DADs zCaIbNL8Ll-RnW{lDyL1hA^8%M{_?rk=WF@Pbf2ZUhb`#Pd!Cvo=ojmIAC;0~yLhk% zp&Iu+*!pmm-^6IPW>n_GaS>5=(}G2k&#%eANrP|ueKzF#u1Ly6CRI=k^EM|!@3$TT z)yvAHaPmau`8HV$)7O5F-%as*wH>zD$Rfim9_hL}>mVSwWVX$js~i(gSLw&3%peu) z1g5=6>^(j9V$F@A`J(;FTs_Ij?L|h7(0I{|_-Z6bb1~>~$60^dnBTui8o4dh!tUrb zx18I2jSC%4v4q2%+=Ri#ZcXUg#PKhZ8YOd&*XNedogd;`Li0zleIZr9&Mt&+#weNpJf@Ry6i-n~5Ox;`Vj@9z>4}$MG{}C#2uGDCD%`k7Q=-tuLA=-eG8HE1hMoR9IA&a#ZEzQb^QpGAUzZ)YM?9X(5?W2Scg{VUy=@nF(Cn-SFoPIU+FFrQp4gUWq}p9fn6y^L}OcjgDpc8cJ0WF%8% zA=>BL?xBaw%V#+BaDR*}qZzE^--E;VJDAvesg5zq0rp~Vc z`zLHr_c`!S5EvkWd$Fl&DH!YbZO4>GZaXq`#$Fn~n`|}0+r6-}5W1kk`KST;unHX+ zKsWOub_)AV`(mmNSG}s_vd2+jkiY)_#lCE6(r%x9z@pXVc8}L4DoOuss6;9_HfKzC zvpxa~o4xzEnS&j?g!xMA@qx1>2kCqV9{^Q;-YqHsTw6t|n zH@lLO-1(uqXh&n<5HpZrQspT#gxr#Hy3=whUmoOsoQn*MGw6@7g?*!C*Z?cGHXqBo zpyuMOLmq6V-99@08*-pZ;yUM?J2;pu2Kj^2oa+FRm!0me8fJbihv_oC<(HgxIfqTp z`Tc|DUbB^WudsCoreH~DL@R`j7nxUkQ~Y*gB9#XsT3an{Nyj_l;4T*@GdI&&Q=;`g zf*opVw}p(ZfXuutR=3e*&{IV^gSves-vY*#C@hky-7+zF@T^Ubn3_-W64m6K$G!3u z0pI(qjqe7d(iHG30*XcGJHV$sddeEOa!c|I-&6dkXbq{Ep)?Ds3dw&)Dz-K#_ z-dk)HqxW2o=@3+q`JEr{t(gu>vYMc>j0b;x4+L-}(GwimxZ5WeTyE=_Hq?irC1tA* z%#vE3CU7(uC#_`Iov*caSDv{V2idJb0#5wbp!NG&KeJ})er9Nxo%VT#+uw8?N)%yv z(^SpTxc}oruOLMqyfG`+M(t!Os0h*N0nU9F$x zrl3JxB}*+)L#?}KkG~;Ti+}L9N3@}aoRnm+%;Tupeqj}3qq3yDN$T|J!5aGE z51UWCqOY+4HYMb}VHj{sKI};TN<{gAO4?iH$*}47F_$Jc>&bI%Nga9SzW!bYk=w=i z$kh7=rYpu@sR|oE|8g1WWB^ai*RM|KGS*@S#OI*b$@h;ntpB~R`eO)7o%aJ6=pucl ziB%%5vJDqEgLZ8k3W*-dSdWS{tFuVOodqL4pq|$h*EvO91I_H|ArXBSieT4++mDe{ z`4=jR066V$rSjLV6Q^Pc{_wJBUcRj(;^M5gOE8m0!5O}s`zl^+x$mLIAZNdWyUyPj zs)iAW@x^DfpY=Z5=`c?0oz@fhsaKQrTEb#0dHT{X7qr%Gc{B=bFaC~M>AkSG%vMet zmIsMYj(RZN%9x;g5Fg-buZ|y!;HXDShDf&^(I|A0*4WPP8~M|Z6E&?nf)&T#TCN1F z8D*Z!EbKjRt3~0>+tb;Fm^Jw2N))ENv>7iO(Dof!SN6|8Eq--^O@4^)?DxYhITdRN zNx{v`OwhyE(+HT16YAOClg~ci>lcC@Q6!dA$_9Cn0+HZRQ7nh0%!)H(Omi!o#gn}p z5hS_jZ^G8DL({Frs_ShHl#-IG93coLw<#v*A~>a6zBqUTIT>HMGT6N=5r()oSJTMT zO9}@{Qxbl$ggH0LoouO_2MVPuTyl`MEEX-=;wO3Ex_UJ;q)V~s0r+rDWIg)}%*d1i zqa->ST)c&lQi0pbqc76;zJ^Q{Xf)o;s@$@3En>IX%kuQ^70>c^v`Xuefv)Mr>t2+z z|6340%KKM71rgwO@#H{WTgR;pA?yV2DJp3Z3&j~NA`EJbdY82zo*nXx`BUCxIu=!# z?q2z{)l^#pZNia5_*x78-MwcrCwbwjlBIu5=|;spdh!U!I+@vfz&`{P)^s82D<3kT z?sJ3A22a&6$v(O<1L%Aip@t~^@W%d2I+tb5Y3`JaH13f1p-4%#Ol7R`r_*V?VX!*1lbSBI-kw>H>ZraCkGy)ZsFND<5n z`h&!vKK66}1j}F2j8q_Ixi9N57QeO73%R8NeQ^+@679erF|U0J^D+RN3cmO;_I$*fD9fK!c7_k3IQ1pQByB zx~c0d5eZSQL08j>kBb!j&)cmSfe7nbizo?Fb;Kc?1MjZMtim0ap3OS^g9E$iz&!Gm z)(ZZBCDF0!Ci0cTH|QL@^FWcV*+H<6POe0+q0M;WF0X zfePiwLy9IExn6q7Iar$~o8!^-1#e5sJDbI}=(wc>jlQkw2%Or4Pz+P7FGH$$tZ;fV zRr;M|YT z0Ivf|6D&DH&ZHm4RBb-CwUDnKG^sH`noKd!=@(nn`vvsZP{7`98VqJ64rr@Id6!O~ zTX*};TKfL;7JkL-)Y8J6<);z_kB}k8*?+H)$ADYfF#Jn>?09YK4?~LhCllJOZ0MOD zW8p|_E8*?H+k+P&idO#V0jLAo1Te{%nVW!V1>5VLwtx+`gAAXS)KAxA@#Mi_Q78OjU10$l_?s1`57pi$}n^v|))Wg!% z*skW{=!Mn4hwD#7{*yQLr?D3vjT}iT-+j5XH_+meog}X!UdV6q z+>OOAfX!O<9Q0>^9Xv-A{Cz86v|#!*8)J7mdt1n2#l}LHaqORvhA0lHX?l^CBJ2|S z%SpF&lE+Hr`w`>#oC;ifmh$XY4f_`(d4*?J4JL{on_iL1mK+3(!tpfDw5I8P`m{Of z?~d4op7ksPVEwye{70QSJAGo;R@ekx!Yrqtz3BJRVL$M!-i)d_>H=;$S#!qWoexfR z2pP0q11|TyJ_s1Fu)3@Ag&}L@VY>e5$lEK>lfLFDSdbaTL8C~b7F=$Q<7c>@nAhcE z0`BN&MojZK)XveuMC$3KQAah9L9G_a>QivH$t_wwdAZFUAkW`&*&s%^ zIAY9Nwem%(;w=TdU$;|a__;Kq?L{v5SaX~_$Q}49$IU`G!4&PmOEgPJz+Vv5qkEK# zRpCUX!~A|q*KT8!E8lN`5%|Wha^WW;`Pbr>ic|EPQTh?Z_HF%lu!WcIvp2_wYG(s` zrDjF71Eo5sFxq=8S}P3Y9il5U=)p)YuITEyC|-vlxG6lCSue7VIAp+zbtaP~QV zmEYbOQBe6~5<``*#VYzyUuB2mTBCWzOc52&^-}bc6i@qg`XaBN_y>;L5*TIy7ozkn zG>v~i8=H~Kj#`MLE*mA1m}ig7v~J`MIaMWfG7kHMnKHgcPHy-@R=f|#I;p}@oRFCx zA>cPn{uBe*i>j0rgyyD4OPn!QW!a0&&ga?0?~+ujCndsCA=jgBKQF)Gv7w8(T@)uw zYw0?7k8SHl$z9S8;03W_nx>S-B87gF+!F2J9~_5sn+MSJGM3`ooT$nt7mAk#x{a%3 zPpZXxg}VI$7i+(Csu!$5Kqb9T?pu%sqk;^*N`-KQXNlL_wScohNM*Ass!z#opPRe$M^lY zPC2A_ED_iAxsvdfj|w0eG--p6%}$B-POQ>5U2$lv^S)=PZM^kNS);y=U380(MDtEw zaA3Y#VM?5!#a-0bmX)Fho$`nKMXZ0}*p0k%cR*BSoLo3{T>s*}n=VwGXmH-F~; zO3F>Ds*S_2L#LdP@n5j!Yim3|iJYXhJ(779Xa+>(R0p zaKfvbLUn1@p$4o%`D=+{KeS^Cj&o5Zdd%Mq|EnvEz6C=wN-a-P#$$49($)nlXNyfH z(+Vc&QC;dGfH9_CYH&*&K6pmCKDm5GJ2S{wM;<_GZj*YrrM=WB7EjE!UMGP$KSpOuY#3BlGm2UF3kb=*{gasPekc{Xk$=--0KJO}`A zmko4B^sy!7PP)GXrv*)^@@uD6z!34j(!OV3v4@-**I?Q789tK`T!532h${^E)Wd~Wd ztxO3cG=6Q4)YVK^3ltC0?mSy4F;G((&->Oyb~q;f&bEbZLp5V8-tQs(9R4TXYsVQw zWl!IP;xYG5IP+SK&8-Vc&%>RJc5nWaEUmBD_urGO3w{>9yFiU2+){H-jKSmUQ%+sF zi!RgXP(y6p;M?dnHB;JjzT%{W*|09Sl9Mi8`8!nq`o(SRhvf zk&9AejDQaLc{W$Us|%3f8wuTOx>OGB8K6OA=4qL7?Ar4c5$hOS7!F{mcTUc)w~yHe ztlOtYBRO`AjnD5y>SOP5ulo-DYK{ntze9|J$|NfsSmEmI5v_CtbU0?hhbY9Eif3Ip zTBWJ8NU?>FsFX#^Wl8Oj3WpwwN-W*o=m@Uhp4WNU)Pl-6!E2DlZ*SE;<^2{Zp^r;? z?Sr_v7pQbuO?}l~iOXI9Qn_u*C17$!|24%z^J6l7(xTVquakS!3P$mnGARt8ZKbry zCX8BzVvKT3m5nM5q$HtvT_dWnH7^`Q7USH$*4*~`>kAwxDKK-DWbV9s3QAva^luyw zQluRXwwi{lPoK3Q#t?SAhwct57fz;81ox}@GD`p5H!){H={5{t3kup_9pDbPG+aj= zM|m%sLrb`p;@9JW%&yTVUTOa|NWb$pvP7p7^lsvkGUvzi_c+ZS)vX~H;*P&HW|#|e zeAtp}+lNT6m>;|Q79#UX&s8(_%BS_6)$o2SgRB{B87@095-F0TC00N1&H7)u*yc6S zlkFfN@MBLPFEw}gq2}wd&t;SXARsq>Z{fPtjQ8jPFuuTL>VN8vNPU;;3VZ-U!>BF~ z);x~LVZE3St6rJYtY^LJSNZZJKi=TMA+GW+*C!`qA9O5)n#eoX-8ZR2>`4PO3Yo3^ zq})U|C<9biUXW?~B^*Dq_>Gqp7PfYO01lhi&VE>${q|Wo<4 zTCvgv<1eB0wVYTYn;&*(-{i?6NxuTjMAg2uQ*ug_1_=;Hg_+7t$O{z_Rs>j? z-F#5U{%q8>#?`V57HR8l@$l?uERha}xbFTTbjyi%SFRKGkhZSaPt*uAYbM8xzPWRb?g-oJi1hYt0neuwh zXEL5fJF-UG?nY}>fadp#y*6h9?226zAVGE&^u2!no?g>% zNBz|yO;NCj(-16eb4a;4;(z~?Td~%qW4OP6z=Hh+obmU3-;pXH->jKD%V&aF9x`m> zhW@dHc#LxSr05wiwV)pbpgB?)3NFz0aFzF~)3BVK@A>6pzs@b4;ZNEZCs}_+NeRf0 z6;6b;^ock;81P?tyD_NC&vSI&I}G_eeom&>n>-7@B;YS z2@dqQ7h^Mt;uXG9jyE|dKNroAZfG8{jAFtb|1NaVr)|fx);-4_7oVQNjR}i@Z2V2> z6-efq10RTqkG`Ia+&4Jt)Yf_8NQF;koXdI}GqJ4nPJc8|cX{l;KC#2kn3S%-M}JHI z4_lo^k;QK}V}ODGAmH_BkGnwm03eEwBWP&J?&&NaH6@jIOs0+M=obTxC_Cn`^M*K{ zF6RO3!qQ8qmN^IV5kV#n$5EnREu=gJ&XnRi#*TNP&{i8HOJ^&!$=ZoQY|vWQp5@`=kr#5CG_GJ z35m`=oOsf9L4g=+Rkh0u9p43V1kKUFaZ}^FMPZ2I(kG{1w-3Eko`b1QAa?YRxp-^P zY;xL?qYY9WX>A|=^ov2pF*aGzx|dUxzi8w6>I#I%Z)v`0xxKCW;(vqy``ZkZ`~WddFbx_Vbe)}CxgW8 zE$Ry|X!7R;V(qT>jv&SX3S0-strfu!W3|L8B7tnurpgt#>~Ke^VthrK7d@Ow(r|XB4U_O5y`qfxaEZ{4Msbu@f3odGnc`w;7QBZ7v{mG_)WAn zvi#ae@D%fNFRLL=HY|9pY^adGf3EM#(1F`Oew47_m$7+Q!yKYt&#n2d$GJ2Dt`D|D zjlv>&ByhfzhAN{$D@ITe$}MaYN6hJNe^i}g^u+Eq+l&U!E29jEqPoWv`ghbwm3Z^m zd`y*&kGhsKYoG>`Z*2_ITz+Z#dc_8JslEyYR$h*{17zDe0o7=I6kG`Sw9V%-*BbOt zKq$TQ8RGSUb*ybOhY;~>c!Nh7rs7p&jZkx2zP)Vx$G}Br42F4zkje?&(a7_Z1I}2; z;jF26RcU@k6xKUtALIqpx$RsazV&l!wqQFx$?NzT9BoHajS;0@IPU1kUbnRHF;oP+ zRl%iVJYS%vw{F%ns5Y8xGk^GZrMdfTXmscH+;g27!sk9DvW@?8Ars@Qc=rDC7X1&J zpv)zS(<+%QXmgzvk2P6JyyC!4X+kxn0Jw72dW_d4YX?NNQIm@M^NS0;+&>to%f0ag z{_}smRxmJ#h4F9S%Fsqh{)YA_#61X69kiX3Wi#4OsBM7Wcu_4)0|8i_X%&MH9Z=E& zVduT`caXK$E<;luVRO|$3R{X9jA)hzO0xi%4MN!HTdqxRLF#4w<7*foZnrJ)n%giYD7R=MKejH`1_7*8g_;F<9BWIr z)wo)``AkHoC|#2}=Vzk+`u!4O1oVmG=p(%I!wgc0 z-2{8?^il^9bT4m;s@kqp$~sy*B1J9Gv}BYUO!B{Td|2icD=`i#-0j zk(p#Y_u<=9j=m;!R%7mLeaO9H3tas#g_+~(qRzFBr5pM2M>;5<_~$K&g8iF)g0!)0 zQEoR+$Xt%hT#iIvj!366e-|mZ{)LiGhR~Ov5A(L}=O2wY-+}|Y*~h6`{<8Ez6D+r% zLo2CBSyre{2a<7uVvpTIo?1-^U}GUs*vV9UzTm)4G&(d$&#z{U`u1Xv!ka&33^mS} z)L}`6>N|}3)=?k%ijN9{KeD2Lt4bU$!dw!%W*2gk{NS|NypZO_&&p17$pA@>m-V~{ zpwHV`I4QTIx@7@dwC!XG9O^>q=o(SDY?eCUI}}rWQp>OMt>@g~NKek+8J6~oe3NRT z!$Z6@MQ^)cSh7+9F0Xwi}aoOrwZ;Xl~@mu5XBRA$-F0ruS~U_eQgoLgH0o?!a#-)() zw%ZNK?}NTA)|^%<6Ze21hiH4&5Vwi_*xBcdqd6{yjk}sIBO}zoUpYv_QR(CI-5Yoc z9Nse7&tTWZnjBs$UF*sTWZdk~1d@8SwJrp|eheP78sV-2J_Og>5iElKvb(d>(jbm% zn&`}=ZB>I`1vyMM(C8nHJI@F41kMjS9z9H-`|Bqzu~BR>GC=zdAu&ti;V?9EUYa2x z+c)&J(skic=i8y{@gJZ5;?^XHKS8wn8M4hR933IAHN;;~J=`Xt>e#C*o{<)qiLmX6 zAbN{XuGf|E@P!R%1o(Bo_B%m&Wi(&-gVeCuU^A_QXv}22c*1d|NmTQ6*XKQAW2fy9 z2nn57y|)B=aUqd97jDm4AiM-(ijGbHj}1<^wmDD@vj-`vD?UtUm91RgdG8;nLf(FT z4l3v}5>O=j1ecs?r#cf!FTfP;o(r(f~*j)7hp@yZ`El%-rW* zT2_v)3ZL~cX8QN**)6F+9}hBX@n8q&dgXV6H+z1t?LGHV$K>Wrk+y=+xG{umthIUb zZxUO_Znjdtt##+e64m6%MR%8iqz!@9m0pYouk9KTrr9L^m_w_p=W=yb;y_-IHb))@ z=?PS4RS$=IAydFniqjoybiBHfep8r^ZtBZtN`y+&#+p|`R`M8&VPIq*W3PVAw;65P zknm7irN-XROTLNDaRIPA1*G>3yR-AO65<>QCw>sxy{J`H>rd26_tvfBr>A`6TjdaZ ztF~3JbFx{P)r`nA7(!-`Lo?w%ZP33=fAM^e_rHHTDw%_cnv`FU-#udI#XsXR7K{B^ zPa#kd!_HwCueag0XxKikF*@{H?dx}B0Udm%qt2((G$GRqDl&#T6SJ|myH(t_&v3_y zguB;<+OVma?fK_Z=0Y)Ml~Gy~UA)~}VHwSs$!^cDLfs=b;wlZ#*bWQhv+mdxd|m%o z%Lz~i8~e7SY@H^i^6<|WsKyjAi1}<@DX1}U#djukw&J6LF_nfnchz=;hlb&1RN22k zMuEt5Wi`4Xv60!HH>#}roCEY#OO4;VCMz@40*ra;a9JDg2)69UoZL`}c(E)n(!W>Z zN-?4JGDhxq<)6RIX_qIbpYIXa90-yV?K?520dt|q>m`prui2@+mF(Xp>}y4;vRcSq z&RC(^Qg+1^T=Hj5pDwLg;%OBtrKLk!+GrUw?9bPNGY-=kVxG>r=cOQ~W$qrD(A}HH zR%AmNYGk|3y4~{j^`$hI`wck@PZd6JS`fP<#xZt3)`$H~giZ(DDix$_JM3Dbe`GPO z7f!4yj6*0*gP85>bIWSi|5<+m|4;vm8~Zk=q7~RghX+rr-c5DOE3RA+JaFt zTb8T`?Mwj{A1<%)Z)!lzSicJ>YQDYW;`+>nA4b*TxTzH%9)2d|V|MV?Vm!xQcpznl`AiB;hQKlhB>txiEFJ3!vkoS1Y7#tqqcm*pVssE9}C zA#z}sbmKr?GJ9wS6_uT}ecn%?A1R1Has<>&J+J|IvQ*qZ{0nuPEARD+4TZ_84)!%h ztY|*ZUXuPrj?So@2|o@XaNB}gP%d5x0|AYiL9U!FYclTc=&(QB=RAV#Ktj}e(`K&Y z=N6pCEu+7^Si-K9J#rk`jQo8F$cfOQUGDHBdl;FFJV*=`+&a(3Xml`icHW3? zTv9Yf2j22$+d`8X<@-G5(2R=`fM{CvOJq`4Mv8!Zbhv2?j+)XQUc%Xm9Zr({ZKnEX z&GWsB*$EgMJ@Y}xouBfsxz|%(XX()=@5OGD#bB5I7oTW%TL&UT-KxoDtY+l}gPBdw zZ>%2YrWJ4J{WbmnDa7{!rYWlNxyU}Loxa;O0~L<#Foxk+v9|8~?S&skVIJAo?E4g> z&l$5l8o|^CQ@@jUCrmzj_}&L6=KHK@GseWqZB``4W@Fx!NZ74S-kUbZkF(`jc-x3R z_Jf)A*acp@pQ{^?jWpB#8$N+lL0wV$8yb8f886K&$Cv!7-BrigK#IyhXdyMxkD^qn z;^P8-_PdXO>yr^lO&6~2kNpM#@$_rW81*}n1M_CFa%&8s-dqB8DepP*XJu&Zy*@^* zDYOS@+4H>DzeTEe?sRgN(&Bo)vDBg)q1Tk1gqifGeahfM_h_axwhr2Jax~>nt2KOm zVf1RZow?22&wSd36*hz%!Vej=y5xV-0?D+F3B$)ihOPo2D^ zNG&cNxkNvsiQY{jbb!tJdqJTLZ%+1VZj46H3s0oEKkCBx>%)T!UUk10F5Y*Sz!P)s z=tUccwddaSAdPDWvwMEzfjuY3UCH_!i&suN#$3KR%qMzjs3MoG z$!3Wr+w6%N@13Lj8Pcpe5J?PY4@-CNFjw<3y^$Tz{Z##YmzSQyX_I#53&(yL%V9nH z;by6~3)mDwe2Ff6J1Fgt{}dB7T@LVd|8jQrRCU{pXw=-g8bvw<)z~A{>|gi?{gWk< z&=H8GXbXMyemLGWJ}Qx71Y`DqOMj2qr&4yg0krs~EXqjw~N>YhwP6{f|rj@lzcx z9OSg@Gg~LjpNKo?R5UIy^ZQNs0zba_ooz3DxK3dOS`Xagky3+MrYto%-I%)v7@d-_ z23RHKx?Ov7Mh{;rlWH4zcMqw8MjJJ-wd z+OYTf21RZ2FVQ2yw3hEIHRSs0@Fg?PD1TY%?`ZfoL>|LfCMi<;clsD0mxc7hXNUdI z8Z4S*yNi4ef<&;62HGpoY~0T5^-hR<$>9Ft9T!zOcXtWs^IEq>gEH5@u8 zI;d#Fa$?TnB3ZFv>CQlQTWHs4b+5tvZCb2i-$XU1h3IHD7N4d&CuM!M7@K7k6G4=! zxFKkT=PtdHl)SiEckG(Vp#)&N)ub|XZ3npKOVbti3q4@`nnzY%Y?8;7haB&E?nIT* zB@Q^PMeyiyUj~rX_t^IK2^{tMJ`FVOsoF=K66f+Gg8x}STOyAkP3dnm zX36uyWCEa-E_Qnl?V>$HInUyl2v1#X0yJXh#+1br;MbaOquVW14Bxm}*%5>g@&_euJ(c?VrC-cf zZ>v86IWVDnmy)Itk#>|xF$g?`yh%)fH+$$H{WguOmc)KHXU}_b1rI9XmkuF_XzVgt zZZy~b?Vy5F&)E(7Ig7P;7NyCFe9jQP{s|$LsVBly&-{(c7av*cH6blMr!{aCKHA96bcSLh!ExNd2%pmw_wm6ltRa;yLBR$CAfu?QTaoZ@LvCaEGUW9ZiUu? zSJzuczC)6$^|UbHN~RYu;ap)CPnGZcuao|p6K{03tlz)wTRkcx`Da!UD{H|?J)=Fz zWABQ&O@&08#*!FP`fUz4=H-?&a)cHnz@u`&l3EsB0h$#sk7jB2Kvt4Ii7Sa#JmHju z-hw_1acDGARIYGGX}&1mztB$1WIISahV1S!Yn_SJ^?v;MkEq2s9`r9E!SvzApAf}v zGdZR7{w^Jb&Md{y&fVJj(*JAkJA<0qqPDLM@ zB?T-Xq9B6wrZkn3AiYKiML-A$(n1oD5<*L;A%*0P@67l8{{DV5_x#DsSvfQ3>~q%I z&tB`<&x&WN*E#(lDMf}5Ul1_!H!j#YKk3>5W)f%>DT93z9QrqV({LyaK-@~x36%CJ zZsmWNP~pb4b1BSUZcRVKL<**DlqqNTNt!d_*Y}a5hbjf8ac_4xkH@k*Yj1VD2-Voo zL5TVSJ9vYKy7wJ+173Zi0R<-qE-3MXYs{)(%)ZfsJFbr{kZQF7?hSH zVz*9!oS0V*&ii$d7SL~BEv+5&Nn+$CnSo zjofP91IecCg;8`XDdV~PH+!*k1b8F+mTMk`6;XY>JPfbm*eQxu5R(d4PN3+X+%M{` z=+0N+{V)|KRxTrHZWs+M1lE>g(W>BaBeHd7yj5n&l?LS=NLON0U%*07U0BKkD{J$c z_!}Z?m7&-JuXTgr0*eBL9L+kXKvzq(>keXuw?MG?Er{4^R8oAcQHmk%caaD4v6P5u z+ZVDpL=18wI#Qz2$W)ccv52IZzq%!y3qC{NEZ#)L3FuI&ux{)6AuBVbB9)Ey8n0@t z`R9|{T+C&S2ZGiBFL)H?qn^ZaZ)Bns>LhEY?KkdWo~3&wyw~XV=;8eUYF03p$uZH< z3Xxt@u_6w*Xq$%!!m1l3(%Npyw3cj=6Nt)(yi5=|AI8Pn!uM(lA5r;_7~%y*8FK=~ z9k;87s&u!{?H%^rH;dA}9(^Pk9Fbs6xpzxUOxWzb(#91`bF^sDuCF*&e!Zbxlt+-f zLq9ShbrXdcWIyr*ry79adPHK#k@ewt;PveE^(+s|1V`$8X2=cni<7iD+L$?UI$L%+ z;RHICQLiW!Gj)n+N~PX@x^?}gbN@le`3(`|qnnZ^V@<-JeTvvp&#@j#a@Eo<$~^P( z5V+R9&Ek4K@& z#~Q{HR=YQT*qKac3+ZnxAmmH2?ycL}G&hrVJN?sC8_wZ4Lmd-o<0|I?UWK0SMK$fg z>d<{tO}Y2;Ne|3zpE%}jI?U}EigD5@YoqCdXl;c?4x|~}jml~TG?q3!_t?Du^4NnTy2;i<4ppR-U zuvLbY?3Q6iN(cZ|h)6Xm;A)E!L%a9-Khg_2C>M6okHR<$OTEzGiQ?C_x__?ggq3RK zcrU#>!bIX=BlhjU3$72v%QAprofCR|*A-2;XqMk&X3L^WroR60^jQ=Uns*i+-TWDk zQ?bY#^~ooUjB!FdcDj~6g+HbWXdIuL`4xv~;m!ClSl%VZ=00?&{;sbb^!U?6q|OD? zf)KIK;6)GXuS3TS@9FzF%zw;mIVu%R?e4-Fx>7>S`!B!Z=j-LQ$wV~BM)p%KK=1w7 zZ?pRKYKcSYE8nA;1$N`CFCW3KW0g|zrm{O9GpvGc!Ua_md4xB?a45E}Ubls}@u0sc zN!3~;F3aoEgb<(E+ktoUod!c!m~3uIW!g8`k=HH=n!WFg?*?>Ovr3EKit6{!IHdU3 zRd(PMN;1nKth}N%z@xKQlqtks=1#hbL&DF;M(H{)cU1v!#c%QwJAkJ9pQ}{lDa#>G z@mgQISU|?Z+e}pPLnKSuLKN`)SZE%X_AtM4A8n1`O)YJxq6`jEMP6 z>7F*3{6lQ4g(>f_H<8Iu%LqQ`)%0qt~4kORipA*ZZmvtwTk-uZ3= z`gjDf1mw=2eC`(9G9Q9&qmi~km+b^dtzWK8<5+E-P^}s37s-Lvq4K+5yk#i4SzpIS z6BO_4F6t+GRSF*A>8?i;);q|cdbx(cBZ^mR_%FPrzas? z`Jy1{Y*N*$m))ZUTzG01%8mcJ@ZtJ$uqBJsJv|ttOIEZ^P!yyAGYDzf7GcOj z0eXrHA7*gj${gg^%%g3kTHUl|c4WN#FTXBHD_Fr!m_9!>NX}haU8(*)TzhqK;}TAd zyn!#LE}WtPnEZ@lM%X6Us4b$!H8~>g&u=GUZJOh)r|+X7N_}@89yD^nMb99IlAjWi zJ@A1$<-8s-QRDE?(AqA*Q7dXmRG;Ma#Xm?nuuJFu{?s+&4zXJHH+u))zcEyu*`S=+ zcui~_lT0ZF3OT>Xbi!zU3vMEsk}dyUwG+yA@TBv*fd zCWYZDv&eFw1kLQ8z*QrtfAYv{msOw8Jt-%8@F7h_;{>j`#pQ}P{OPm)(QDR9$0P1d zdO9q{2iH-8_E5Xwe``6mvR&~JO&HFGg=^8cKA|UmqG{;Nzo}K2`nzSNj;}sAcYO)d zYze#T1o{Re4;(EGkTs!6he|9X8jNZZ&MWrzN9H^@CfDpFnELC!1!L}~Te`|WzRMxa zZp%Yy=EOu~gDCc4eXpNw9*Olw$dz#x3g5?ENRy1mXy#wv&fkkt;zElOO3J*D6@R^)X+FFPB`%XH1H_xr~$G7+?J3Qpl$oL2#0bUxt z6u`ga`Y>@E4G)sayY|oSCHBU)RzADH2|ph-h}bS0%_#=NB$8kkB>#0yDco019uD1% zE_5g--%gzOAZ1_gYp!JPbMM@nF1|^=M$<{c>ed%PlxBwH>>2 z^mBJ1j8HQrml||M+3b1P?nRak>kLzqrF|&KJb9P|c&4O}%8U6V4eN{4y8jO%?7hRc zPXl36jodi7vNWrcB-I$KSL8?->PquPKZDIYWU)}V-1k?j?Z^{R+v%)s09zEx0}vmyZq>X!@MSBG~+SYb8(S0Q0nz<+J@c?uw=dH7E3@lVr?R z!MKO2iKZVcwLBdZ5!?FxnjTEOV3KorhY#!{01gyj?DNddn*Z`)cDGEk^!=R z75_9v-KAhDC22gp?*z%i(RexVp1U@9+~g|K?@{He#Gh}o+UmuInTXU2Q@9afPoD{N z``@?WCm{Frmz0SIk*5X}wu7p3$)5{5PR+L&>FXsS=@ftFPkaK26|WyPvy{ZSDgU;+h5mAFJJ!ojZA% znukPsU=s^sH+7I_n%QGI4(Nt4_%{zdo{c$Cj#UCUMx<6Vs$Zn-ofp*8Rb|LzKQI;s z8)qg@#**5u+7mGAxxfIs&Mk|~ynUY*2=UQWpQn2oeeDm_C>_=7d96b|82;My!?^*` z8nU(GugBWKABsBa-kBQF5&)-XoTDqUBc2>ojCB;+NK$Lq~|s-gz{?^Utx z&5ss;VLt)vZwXS(*e*Z+cS;y}wn*FKva3iCfXUI_+0kf~-I28?dK`)2s`}yfDEy=4pYH?Cj3(7ljrPcasOu0Y@lqF&ztLj%z>pPf zr0+QJg7UM*Q9E+jACSibp~GF$=!yHUNuFZh6b70p%UlBV@bDs5)#=+5!6UFzC~$*K zoK_TL^D}s@MT#R3+2rGABVP$z`KMkl+F7q0A-<6Q8Q3_QUzC`WjI}qL9t~yaX6Nk% z;JTC^ie8sZ;uf)#K)|4>u&$T4kp4;c$+3p(0?6qszJp0a(@SEc7(puCexUf;7m?cM07^LjnaKktE82<`mQ&6E#r z+kwF2ZS+^&0TME680n0(0F<0}qPe;i-=4v0UL3}%X3 zkh-fy?rQG&yMCsHrMt_p(Q^L3(&;u%Dpqmd^rHJ2^cm`(1QSHdS9#xv**zY7COPhG zDtF;SJHt*|=S2m~TpBDvFz9KIfk)8+xu4zDRuSyy8ycDCUO_S=1Bz3cW68c4t>&2SOnXV<1d<(-dmV~45F zixFGu#XF(Shdm@W{SjMUgI|@|O8_NC|Dn@snSqvngqURm!v3t+OD(nER|r1f-})w0B-M z$1FHCD`f`>{pp>!;9kl&7ZpZ;{(Q{9ib>14ng+Sx3vc8Vf^pqY)IRJ$f5g3Lu^3cq z!3Zbww6nzZRd8wNUm{A%ADLwFp!<=3vtrh za(UWDxGN`mW+i}{O-@PN1SC?0=7FXC`=9#!v6=5r_5Qi`)mnGmK`i13m||L%7miaiuuS%YJ+*MqTuCzHJ&e7HJf z8;^HNo@kC~Iw0ejXKBt3ZKsH$8c5Cz%ngN%JNb^U3Z@^`ZYxN*%dtZsye9+_tD__i zIs0eRY3GBMYcbQ~38smDTBnro@U;==OJ@$-QfI5^BO*k! z2%LWonPe?hrdFQ+Js_@KH;|^iYRdqdvX+X+7(d0v=C%6)EXJJtDhIfU?TeX%tYy*T zCH*;9eJ9kHl)m6Y;kieyWCva)(Iy)tNIH)^Iro?#B2f> z6UR2hMt7&%6NrBWjUv9=ylz&?N^`(bra8#=uIx5kzacWK$!H^QPTaOA;*m0j^;On+Ce83Q)pd?uCm0mS_9gCD4tRqV|_4 z;?~={3*A7gV!fr~j3kkHM`g!-wWP!=Pe5O%ARVG{1Jk12ShJ5?koLP{<BE-RGjsE6pBDj&=r#w+nw#c<&yuASvZQH*@Fcy#Y(ZkRtZ< zXHR^08;dv)4TyLZ1z@vT77%HCjU3TmlCOXQ+`nf6spo<`%eJe*x?%p>U=N@7?=+0< zDpQ+3Wpdv*pE|X_<|b8=g*H#K-65pH&u8i392wPF3l>97lUt!?l(Q+9&hheh`Q7X% zJ~b%PjY*Rh#CyNn=B}Kyb(U(ktXl@%%Yd%%1z%lW!`tQ$rs-dX-Hw?NOE~DtMioFTtFC5o-aVFh|1pZ^ z@=O6LBP^$B2BTjYYGP#zjy&(3^Ld{zng1~kaK7OK-dcTsZN&dh%I zd@L&Toc;+oYB%F=3jvDpf`Ry8!uJ_<8 zXFhfRxHuK}=x`vKRlmmAbxY9{?aY`K1^%$vOnUqwik7(cPn|@MI)`9t@&5RO3PnBr zssoyB zh&Rv{l|gd>CT2c7X4|H+^^VVs&&0BCL46uJvg$Xp8vK`Cyc^gvK9sMPF0qaxPa+q4$A>#W3q-AX^ZUiD7S{7;;X=uxn^)5(F2JU4>m)mEHES*0D8V3# zz!{^0HwLfIk6s0pIGePip|2^zwE1z0a2AAfgJ+LN2eZ&BP35RB>UjL>Rb0Q0e_kpz zoF85%HLjLgsS#4~SpK@MPzd*|^uy#$%glvngY3$E{r70w0*+?Genj{XbMaZJb65zr zC^Vd{n-|fmtF8k_YJ+aUFQwP9vp-a$S&j&dkg1Z+nD5DeC%{yXFkv04tUgOtME~_R z_qn7!QRf(W4?K13WJp_>@bRcgr$x>1NUvb)Ma${ra&<9HXe-v!mgjU}*Qm?m%F)? zu_)AZ>p&+etorpBK_ol(z~@&qc>6_d`KJVn9vg}4NduaIsF$#>%F`rkA`)*@bhsBHz7?>HzqpUuaZ>vo$_rcI z{fE7$+i~C^m4VjyhK0WVIr#gCnT8`OhmM1R4yr9w>Nb>XQhF((t4!5gt2Cn`X!o;t ztH(%wM3|69X~GDh+84hvaRACBy*m|Xy%MkKP9>jRi*{_Nezw!*2@GgAtL4A*u_pGL z00lepVWh46M@VM}Gm^)bJ~tOiZ=I!TZ-HTdUniOBM(<~GrWL8=qp1rh5P8u=EFJg7 z&fO5Y^V_Ay1MfB4Y`7Z4ayN{q8ULIR4Hg(<)t_CTNRhccYyM~fVWGUZDPd9*Q!M$= z52n1g?=q^OwR13*`7&u=vy}w8?7zXkys{X( zwhE2-{Mmg73nfM=f|Ba!1v|sj4!k#2XR1*)Nv;+jBI&Qu-!g-+x+Ui4m>-YvJbQi{ z=#6h-+?!t`x1Lt)>(!jQvjxR5+vhQt=W3b~tEbVUD>FhwoPy~mzlBH^q&#@#dHU{A zhf@u8u$U=Z3_BD;QZdL894^FMicjc&v8VxdyrOU%4kVhhTl8>ESs)Jd*$oA{Xd-#i z?Dfl>kHzFZ2WENg@Jn)A1U#Wr&PQ2`_uTH}k9WX(q3aU5MZr3jvi4jd=8um-?id;zU5-wKZkjEuBlQ@BoY)g z^D5R=XAvk}ycK*^i8rs^<$I3jgnDn0-s*8Y=D(2?vs z=-NzW^k3o~ZwO(HqMKPWS}$%iVb(LUvTVB=sQ?vhLHx)dG-3ASkAi4<-nHBxaU!SN zEfY*dkWKtq#C%;Ma$tf{qbc$X=6DzS(+GZgM^k|mJ90x&0;bQ_90X&#g8%I-G@8!?|TQZuh2cO4%c|>hYcMKT;{1(u1@JMl^e}Fg0!gC-MphS)(Zt_0%M^W zx*-^wFR^>bj(7dP+U_6tURaSlzTEbJdh?-jXCLJduu1^1*fA2&EmouwFx`;BJwbd) z1)ByIO!^-3DCJmcdS9?|^e%tCY1|y*;P#z3rC^Df06L9Y9g++D^S_5S4p7%~Mg_g| z7XvCopv|OEEUx)1!Cr4;`()Ho%JvX%5Fu~l+QNQeh!fNlNaM1mz7~X$t8^7S27)z~ zj(GvgC=mE*Mai5m_b^J9A;HyweRSbEDsi41&MAuhZAN|_n z)P>OAfPW|h(aI{mdV8~PiQZRIs;;#-C^*yzOrBim0?h{d?zbvDT@X;fRcGNEGR0}Y zs&7EY(eg*4)6x>|$cliLFp46nlchh<90I}SOGSncQ)1 z``InXzz!p4iK5?6=SH)amBb8bT^O@qf*|b@E*x5`-Xj1R4RQ_NI;)%vGa0GxlQ7P{ z6U)72FJO58rl8On)ujdUo6;q(5NuoD_>OV~bWH*|`TI=-V)_zP?!%Lto)o>`D$Piy zWDD3TqeYZL9y4$Q3wo`XN0G5ZgM(a^euRQTCCA#S;C6$_WC%uoxSf-eXm-`wUXk-p zf&?h5C$uLib5UTym^l|JRRWodukKv_y;k~9Hy?{k;~1DAmD)+xU$z{9K0 zzw#`ge(7Nrpb_`q9bvuuyMN_8#f||J~y}gXihx>PDGy%14-i&{`VW4{pPpP(-)5z!EILI6E!L0pM8+9(GN3nI_B{VAnE(^rPb&T5F(ei7nEyV=?3Y#{1 zf!ys3seiu_N863SQ;za$CuP2%zWe7THUR_XvYGj zW|)O}wUI-~@{5b@z~*ewFo8W&q}Q=k2h!cOF(n5ACs^9*9UuU$XjAkAuCUf3ucnw@ zi#id7xB57;y?o(_jTs7*j;%TiX~&=2Rm7txv0cG&cw_Enc!$Nrn_3Hp4ksO;eQhOk z-sXcW9^YA10aRA4X2emV=9-?Xv=x5;MHxC^)9GHmV8pOD^hqFhFP=6s^bT&Yzre>n zgoK`l|Nc!+zkgTozZ3tB$A6#0f8Ow4F!(PPvc2HHx#7R5@jqnnA29lV#f7vjzqS6qyFE2qq`Uq zAKpMwP?|k#19_Tx`*;r75Bxo7LbR4!48-L z78)e^{CEG3CkvL(nf&-dM5S;w { + return dayjs(item).format('YYYY-MM-DD') + }) //底部小圆点需要展示的数组 + while (startDate < endDate) { + const dateString = startDate.format("YYYY-MM-DD") + dateList.push({ + date: startDate.date(), + month: startDate.month(), + year: startDate.year(), + dateString, + spot: timeArr.indexOf(dateString) !== -1 + }) + startDate = startDate.add(1, 'day') + } + this.setData({ + dateList: dateList + }) + }, + + //某一天被点击时 + selectChange(e) { + const year = e.currentTarget.dataset.year + const month = e.currentTarget.dataset.month + const date = e.currentTarget.dataset.date + this.setDate(year, month, date) + } + }, + //组件生命周期 + lifetimes: { + attached() { + let now = this.data.defaultDate ? dayjs(this.data.defaultDate) : dayjs() + this.setDate(now.year(), now.month(), now.date()) + } + }, + //监听参数变化 + observers: { + spot: function (spot) { + console.log("==========") + console.log(spot); + this.dateListInit() + } + } +}) \ No newline at end of file diff --git a/components/calendar/calendar.json b/components/calendar/calendar.json new file mode 100644 index 0000000..e8cfaaf --- /dev/null +++ b/components/calendar/calendar.json @@ -0,0 +1,4 @@ +{ + "component": true, + "usingComponents": {} +} \ No newline at end of file diff --git a/components/calendar/calendar.wxml b/components/calendar/calendar.wxml new file mode 100644 index 0000000..8da6ba6 --- /dev/null +++ b/components/calendar/calendar.wxml @@ -0,0 +1,38 @@ + + + + + {{selectDay.year}}.{{selectDay.month>8?selectDay.month+1:"0"+(selectDay.month+1)}} + + + + + {{open?"收起":"展开"}} + + + + + + + + + + + + + + + + + + + + + {{item.date}} + + + + + + + \ No newline at end of file diff --git a/components/calendar/calendar.wxss b/components/calendar/calendar.wxss new file mode 100644 index 0000000..a1d0213 --- /dev/null +++ b/components/calendar/calendar.wxss @@ -0,0 +1,157 @@ +/* components/calendar/calendar.wxss */ +.flex { + display: flex; + justify-content: space-between; + align-items: center; +} + +.flex-start { + display: flex; + justify-content: flex-start; + align-items: center; +} + +.flex-center { + display: flex; + justify-content: center; + align-items: center; +} + +.flex-end { + display: flex; + justify-content: flex-end; + align-items: center; +} + +.flex-around { + display: flex; + justify-content: space-around; + align-items: center; +} + +.flex1 { + flex: 1; +} + +.flex-wrap { + flex-wrap: wrap; +} + +.align-start { + align-items: flex-start; +} + +.align-end { + align-items: flex-end; +} + +.align-stretch { + align-items: stretch; +} + +.calendar { + background-color: #fff; +} + +.calendar .title { + font-size: 40rpx; + color: #333; + padding: 30rpx; + line-height: 60rpx; +} + +.calendar .title .year-month { + margin-right: 20rpx; +} + +.calendar .title .last-icon { + width: 0; + height: 0; + border-right: 24rpx solid #999; + border-top: 12rpx solid transparent; + border-bottom: 12rpx solid transparent; + margin-left: 10rpx; + +} + +.calendar .title .next-icon { + width: 0; + height: 0; + border-left: 24rpx solid #999; + border-top: 12rpx solid transparent; + border-bottom: 12rpx solid transparent; + margin-left: 40rpx; +} + +.calendar .title .open { + background-color: #f6f6f6; + color: #999; + font-size: 22rpx; + line-height: 36rpx; + border-radius: 18rpx; + padding: 0 14rpx; +} + +.calendar .calendar-week { + line-height: 40rpx; + padding: 0 25rpx; + font-size: 28rpx; + color: #999; +} + +.calendar .calendar-week .view { + width: 100rpx; + text-align: center; +} + +.calendar .calendar-main { + padding: 30rpx 25rpx; +} + +.calendar .calendar-main .date-group { + transition: all 0.3s; + overflow: hidden; + +} + +.calendar .calendar-main .date-transform { + transition: all 0.3s; + +} + +.calendar .calendar-main .day { + position: relative; + width: 100rpx; + color: #666; + text-align: center; + height: 72rpx; +} + +.calendar .calendar-main .day .bg { + height: 56rpx; + line-height: 56rpx; + font-size: 28rpx; + color: #333; + font-weight: bold; +} + +.calendar .calendar-main .day .select { + width: 56rpx; + border-radius: 50%; + text-align: center; + color: #fff; + background: #409eff; + margin: 0 auto; +} + +.calendar .calendar-main .day .other-month { + color: #ccc; +} + +.calendar .calendar-main .day .spot { + width: 8rpx; + height: 8rpx; + background-color: #409eff; + border-radius: 50%; + margin: 6rpx auto 0; +} \ No newline at end of file diff --git a/components/calendar/dayjs.js b/components/calendar/dayjs.js new file mode 100644 index 0000000..4acc24c --- /dev/null +++ b/components/calendar/dayjs.js @@ -0,0 +1 @@ +!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?module.exports=e():"function"==typeof define&&define.amd?define(e):(t="undefined"!=typeof globalThis?globalThis:t||self).dayjs=e()}(this,(function(){"use strict";var t=1e3,e=6e4,n=36e5,r="millisecond",i="second",s="minute",u="hour",a="day",o="week",f="month",h="quarter",c="year",d="date",$="Invalid Date",l=/^(\d{4})[-/]?(\d{1,2})?[-/]?(\d{0,2})[Tt\s]*(\d{1,2})?:?(\d{1,2})?:?(\d{1,2})?[.:]?(\d+)?$/,y=/\[([^\]]+)]|Y{1,4}|M{1,4}|D{1,2}|d{1,4}|H{1,2}|h{1,2}|a|A|m{1,2}|s{1,2}|Z{1,2}|SSS/g,M={name:"en",weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_")},m=function(t,e,n){var r=String(t);return!r||r.length>=e?t:""+Array(e+1-r.length).join(n)+t},g={s:m,z:function(t){var e=-t.utcOffset(),n=Math.abs(e),r=Math.floor(n/60),i=n%60;return(e<=0?"+":"-")+m(r,2,"0")+":"+m(i,2,"0")},m:function t(e,n){if(e.date()1)return t(u[0])}else{var a=e.name;D[a]=e,i=a}return!r&&i&&(v=i),i||!r&&v},w=function(t,e){if(p(t))return t.clone();var n="object"==typeof e?e:{};return n.date=t,n.args=arguments,new _(n)},O=g;O.l=S,O.i=p,O.w=function(t,e){return w(t,{locale:e.$L,utc:e.$u,x:e.$x,$offset:e.$offset})};var _=function(){function M(t){this.$L=S(t.locale,null,!0),this.parse(t)}var m=M.prototype;return m.parse=function(t){this.$d=function(t){var e=t.date,n=t.utc;if(null===e)return new Date(NaN);if(O.u(e))return new Date;if(e instanceof Date)return new Date(e);if("string"==typeof e&&!/Z$/i.test(e)){var r=e.match(l);if(r){var i=r[2]-1||0,s=(r[7]||"0").substring(0,3);return n?new Date(Date.UTC(r[1],i,r[3]||1,r[4]||0,r[5]||0,r[6]||0,s)):new Date(r[1],i,r[3]||1,r[4]||0,r[5]||0,r[6]||0,s)}}return new Date(e)}(t),this.$x=t.x||{},this.init()},m.init=function(){var t=this.$d;this.$y=t.getFullYear(),this.$M=t.getMonth(),this.$D=t.getDate(),this.$W=t.getDay(),this.$H=t.getHours(),this.$m=t.getMinutes(),this.$s=t.getSeconds(),this.$ms=t.getMilliseconds()},m.$utils=function(){return O},m.isValid=function(){return!(this.$d.toString()===$)},m.isSame=function(t,e){var n=w(t);return this.startOf(e)<=n&&n<=this.endOf(e)},m.isAfter=function(t,e){return w(t) + + + {{timerText}} + 点击继续答题 + + \ No newline at end of file diff --git a/components/pause-mask/index.wxss b/components/pause-mask/index.wxss new file mode 100644 index 0000000..d990253 --- /dev/null +++ b/components/pause-mask/index.wxss @@ -0,0 +1,65 @@ +.pause-mask { + position: fixed; + top: 0; + left: 0; + right: 0; + bottom: 0; + background: rgba(0, 0, 0, 0.85); + backdrop-filter: blur(10px); + -webkit-backdrop-filter: blur(10px); + z-index: 1500; + display: flex; + align-items: center; + justify-content: center; + opacity: 0; + visibility: hidden; + pointer-events: none; + transition: all 0.3s ease; +} + +.pause-mask.show { + opacity: 1; + visibility: visible; + pointer-events: auto; +} + +.pause-content { + display: flex; + flex-direction: column; + align-items: center; + text-align: center; + transform: translateY(20rpx); + opacity: 0; + transition: all 0.3s ease; + color: #fff; +} + +.pause-mask.show .pause-content { + transform: translateY(0); + opacity: 1; +} + +.pause-icon { + /* width: 120rpx; + height: 120rpx; */ + margin-bottom: 40rpx; +} + +.pause-title { + font-size: 40rpx; + font-weight: bold; + color: #333; + margin-bottom: 20rpx; +} + +.timer-text { + font-size: 48rpx; + font-weight: bold; + margin-bottom: 20rpx; + color: #fff; +} + +.tip-text { + font-size: 28rpx; + color: rgba(255, 255, 255, 0.8); +} \ No newline at end of file diff --git a/components/question-display/index.js b/components/question-display/index.js new file mode 100644 index 0000000..13d65ec --- /dev/null +++ b/components/question-display/index.js @@ -0,0 +1,93 @@ +Component({ + properties: { + // 题目对象 + question: { + type: Object, + value: {} + }, + // 题目索引 + questionIndex: { + type: Number, + value: 0 + }, + // 用户答案数组(用于显示选中状态) + answers: { + type: Array, + value: [] + }, + // 选项标记数组 + optionMarkers: { + type: Array, + value: ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H'] + }, + // 是否显示答案解析 + showAnalysis: { + type: Boolean, + value: false + }, + // 是否显示答案图标(正确/错误标记) + showAnswerIcon: { + type: Boolean, + value: false + }, + // 是否可点击选项 + clickable: { + type: Boolean, + value: true + } + }, + + data: { + // 组件内部数据 + }, + + attached() { + // 组件挂载时,检查数据 + + }, + + observers: { + // 监听 question 属性变化 + 'question': function(question) { + console.log('question-display 组件 question 属性变化:', question); + } + }, + + methods: { + // 选项点击事件 + onOptionClick(e) { + if (!this.data.clickable) { + return; + } + const index = e.currentTarget.dataset.index; + this.triggerEvent('optionclick', { + optionIndex: index, + questionIndex: this.data.questionIndex + }); + }, + + // 题目容器内触摸:catch 阻止冒泡到问题面板;横向滑动时通知页面切换题目(因 swiper 收不到被 catch 的触摸) + onQuestionTouchStart(e) { + if (e.touches && e.touches[0]) { + this._touchStartX = e.touches[0].clientX; + this._touchStartY = e.touches[0].clientY; + this._swipeHorizontalEmitted = false; + } + }, + onQuestionTouchMove(e) { + if (this._swipeHorizontalEmitted || !e.touches || !e.touches[0]) return; + const dx = e.touches[0].clientX - this._touchStartX; + const dy = e.touches[0].clientY - this._touchStartY; + const threshold = 40; + if (Math.abs(dx) > threshold && Math.abs(dx) > Math.abs(dy)) { + this._swipeHorizontalEmitted = true; + this.triggerEvent('swipehorizontal', { direction: dx > 0 ? 'right' : 'left' }); + } + }, + onQuestionTouchEnd() { + this._swipeHorizontalEmitted = false; + }, + }, + +}); + diff --git a/components/question-display/index.json b/components/question-display/index.json new file mode 100644 index 0000000..a7a3e7a --- /dev/null +++ b/components/question-display/index.json @@ -0,0 +1,5 @@ +{ + "component": true, + "usingComponents": {} +} + diff --git a/components/question-display/index.wxml b/components/question-display/index.wxml new file mode 100644 index 0000000..912c43a --- /dev/null +++ b/components/question-display/index.wxml @@ -0,0 +1,79 @@ + + + + + + {{questionIndex + 1}}. {{question.type === 'single_choice' || question.type === 1 || question.type === 2 ? '单选题' : '多选题'}} + + + + + + + + + + + + {{optionMarkers && optionMarkers[optIndex] ? optionMarkers[optIndex] : String.fromCharCode(65 + optIndex)}} + | + + + + + + + + + ⚠️ 题目没有选项数据 + question: {{question ? '存在' : '不存在'}} + options: {{question && question.options ? question.options.length : '无'}} + + + + + + 你的答案 + {{question.user_answer}} + + + 答案解析 + 正确答案:{{question.correct_answer}} + + + + + + 暂无解析 + + + + + + + + diff --git a/components/question-display/index.wxss b/components/question-display/index.wxss new file mode 100644 index 0000000..9c02736 --- /dev/null +++ b/components/question-display/index.wxss @@ -0,0 +1,155 @@ +.question-page { + display: flex; + flex-direction: column; + width: 100% !important; + height: 100% !important; + box-sizing: border-box; + min-width: 0; + position: relative; + /* padding-top: 20rpx; */ + padding-bottom: 20rpx; +} + +.question-content { + flex: 1; + width: 100% !important; + height: 100% !important; + box-sizing: border-box; + min-width: 0; + display: flex; + flex-direction: column; +} + +.question-content.no-material { + /* 高度由父容器控制 */ +} + +.question-container { + background: #fff; + border-radius: 12rpx; + margin: 0 20rpx 30rpx 20rpx; + padding: 30rpx; + /* box-shadow: 0 2rpx 8rpx rgba(0, 0, 0, 0.05); */ + width: calc(100% - 40rpx) !important; + box-sizing: border-box; + flex: 1; + min-width: 0; + min-height: 0; + overflow-y: auto; +} + +.question-header { + margin-bottom: 20rpx; +} + +.question-type { + color: #666; + font-size: 30rpx; +} + +.options-list { + margin-top: 30rpx; + width: 100%; +} + +.option-item { + margin: 20rpx 0; + display: flex; + align-items: center; + padding: 24rpx 30rpx; + background: #fff; + border-radius: 8rpx; + border: 2rpx solid #E5E5E5; + position: relative; + box-sizing: border-box; + width: 100%; + transition: all 0.2s ease; +} + +.option-selected { + background-color: #E3F0FF !important; + border-color: #1A7CFF !important; +} + +.option-selected .option-letter, +.option-selected .option-text, +.option-selected .separator { + color: #1A7CFF !important; +} + +.option-content { + flex: 1; + display: flex; + align-items: center; +} + +.option-letter { + font-size: 32rpx; + color: #333; + font-weight: 500; + min-width: 40rpx; +} + +.option-text { + flex: 1; + font-size: 32rpx; + color: #333; + margin-left: 20rpx; +} + +.separator { + color: #E5E5E5; + margin: 0 20rpx; +} + +.answer-icon { + width: 32rpx; + height: 32rpx; + position: absolute; + right: 30rpx; + top: 50%; + transform: translateY(-50%); +} + +.answer-analysis { + margin-top: 40rpx; + padding: 20rpx; + background: #F5F7FA; + border-radius: 8rpx; +} + +.analysis-header { + display: flex; + justify-content: space-between; + align-items: center; + margin-bottom: 20rpx; +} + +.analysis-title { + font-size: 32rpx; + color: #333; + font-weight: 500; +} + +/* 你的答案:蓝色,与正确答案的绿色区分 */ +.analysis-header-user .user-answer { + font-size: 28rpx; + color: #1890ff; + font-weight: 500; +} + +.correct-answer { + font-size: 28rpx; + color: #52C41A; +} + +.analysis-content { + font-size: 28rpx; + color: #666; + line-height: 1.6; +} + +.bottom-spacing { + height: 40rpx; +} + diff --git a/components/resize-box/index.js b/components/resize-box/index.js new file mode 100644 index 0000000..9ef49c4 --- /dev/null +++ b/components/resize-box/index.js @@ -0,0 +1,105 @@ +Component({ + properties: { + // 当前高度 + height: { + type: Number, + value: 200 + }, + // 最小高度 + minHeight: { + type: Number, + value: 100 + }, + // 最大高度 + maxHeight: { + type: Number, + value: 400 + }, + // 预设高度点,用于自动吸附 + presetHeights: { + type: Array, + value: [100, 150, 200, 250, 300, 350, 400] + }, + showHandle: { + type: Boolean, + value: true + } + }, + + data: { + isResizing: false, + currentStyle: '', + currentHeight: 200 + }, + + observers: { + 'height': function (val) { + // 只有非拖动时才同步外部高度 + if (!this.data.isResizing) { + this.setData({ currentHeight: val }); + } + } + }, + + methods: { + startResize(e) { + const touch = e.touches[0]; + this.startY = touch.clientY; + this.startHeight = this.data.currentHeight; + + this.setData({ + isResizing: true, + currentStyle: 'transition: none;' + }); + + // 触发开始事件 + this.triggerEvent('resizestart', { + height: this.data.height + }); + }, + + onResize(e) { + if (!this.data.isResizing) return; + + const touch = e.touches[0]; + const deltaY = touch.clientY - this.startY; + let newHeight = this.startHeight + deltaY; + + // 限制高度范围 + newHeight = Math.max(this.properties.minHeight, + Math.min(newHeight, this.properties.maxHeight)); + + this.setData({ + currentHeight: newHeight + }); + + // 触发改变事件 + this.triggerEvent('resize', { + height: newHeight + }); + }, + + endResize() { + if (!this.data.isResizing) return; + + const targetHeight = this.calculateTargetHeight(this.data.currentHeight); + + this.setData({ + isResizing: false, + currentStyle: 'transition: height 0.3s cubic-bezier(.4,0,.2,1);', + currentHeight: targetHeight + }); + + // 触发结束事件 + this.triggerEvent('resizeend', { + height: targetHeight + }); + }, + + calculateTargetHeight(currentHeight) { + return this.properties.presetHeights.reduce((prev, curr) => + Math.abs(curr - currentHeight) < Math.abs(prev - currentHeight) ? curr : prev + ); + } + } +}); \ No newline at end of file diff --git a/components/resize-box/index.json b/components/resize-box/index.json new file mode 100644 index 0000000..2df5ba4 --- /dev/null +++ b/components/resize-box/index.json @@ -0,0 +1,4 @@ +{ + "component": true, + "usingComponents": {} +} \ No newline at end of file diff --git a/components/resize-box/index.wxml b/components/resize-box/index.wxml new file mode 100644 index 0000000..7f8e596 --- /dev/null +++ b/components/resize-box/index.wxml @@ -0,0 +1,13 @@ + + + + + + + + \ No newline at end of file diff --git a/components/resize-box/index.wxss b/components/resize-box/index.wxss new file mode 100644 index 0000000..8605da3 --- /dev/null +++ b/components/resize-box/index.wxss @@ -0,0 +1,48 @@ +.resize-box { + position: relative; + width: 100%; + /* background: #fff; // 由外层控制 */ + /* border-radius: 6px; // 由外层控制 */ + /* border: 1px solid #eee; // 可选 */ + will-change: height; + transform: translateZ(0); + -webkit-transform: translateZ(0); + overflow: hidden; /* 也可以加一层保险 */ +} + +.resize-box.resizing { + transition: none !important; +} + +.resize-handle { + position: absolute; + bottom: -10px; + left: 50%; + transform: translateX(-50%); + width: 60px; + height: 20px; + display: flex; + justify-content: center; + align-items: center; + background: transparent; + z-index: 100; + touch-action: none; +} + +.resize-line { + width: 20px; + height: 2px; + background: #D8D8D8; + border-radius: 1px; + position: relative; +} + +.resize-dots { + position: absolute; + top: -4px; + left: 50%; + transform: translateX(-50%); + width: 10px; + height: 10px; + background: radial-gradient(circle, #999 1px, transparent 1px) 0 0 / 3px 3px; +} \ No newline at end of file diff --git a/config/api.js b/config/api.js new file mode 100644 index 0000000..3aba005 --- /dev/null +++ b/config/api.js @@ -0,0 +1,6 @@ +//测试地址 +const ApiRootUrl = 'https://ndnd.duiduiedu.com/addons/unishop'; +module.exports={ + IndexBanner: ApiRootUrl + 'Banner/List', //获取列表 + IndexUrl: ApiRootUrl + 'News/GetNewsListByPageType', //首页数据接口 +}; diff --git a/config/api_config.js b/config/api_config.js new file mode 100644 index 0000000..df7dd08 --- /dev/null +++ b/config/api_config.js @@ -0,0 +1,62 @@ +// API 域名配置 +// 根据环境自动切换域名 + +// 判断是否为开发环境 +// 可以通过以下方式切换: +// 1. 直接修改下面的 isDevMode 变量 +// 2. 或者通过微信开发者工具的编译条件设置环境变量 +const isDevMode = false; // 改为 true 使用本地开发环境(127.0.0.1:8080) + +const isDev = () => { + return isDevMode; +}; + +// Fiber API 配置(新后端) +const FIBER_API_CONFIG = { + // 开发环境(本地调试) + dev: { + baseURL: 'http://127.0.0.1:8081/api/v1', + }, + // 生产环境(线上部署) + prod: { + baseURL: 'https://api.duiduiedu.com/api/v1', + } +}; + +// PHP API 配置(旧后端,逐步迁移) +const PHP_API_CONFIG = { + // 开发环境 + dev: { + baseURL: 'http://127.0.0.1:8006/addons/unishop', + }, + // 生产环境 + prod: { + baseURL: 'https://ndnd.duiduiedu.com/addons/unishop', + } +}; + +// 获取当前环境配置 +const getFiberApiBaseURL = () => { + return isDev() ? FIBER_API_CONFIG.dev.baseURL : FIBER_API_CONFIG.prod.baseURL; +}; + +const getPhpApiBaseURL = () => { + return isDev() ? PHP_API_CONFIG.dev.baseURL : PHP_API_CONFIG.prod.baseURL; +}; + +export default { + // Fiber API(新后端) + fiberApiBaseURL: getFiberApiBaseURL(), + + // PHP API(旧后端) + phpApiBaseURL: getPhpApiBaseURL(), + + // 图片资源域名 + imageBaseURL: 'https://ndnd.duiduiedu.com/', + + // 工具方法 + isDev, + getFiberApiBaseURL, + getPhpApiBaseURL, +}; + diff --git a/config/camp_api.js b/config/camp_api.js new file mode 100644 index 0000000..f7cc53f --- /dev/null +++ b/config/camp_api.js @@ -0,0 +1,544 @@ +import request from '../utils/request'; + +/** + * 打卡营相关 API 接口 + * 整合了打卡营、任务、订单、支付等所有相关接口 + */ +export const campApi = { + // ==================== 打卡营基础信息 ==================== + + /** + * 获取打卡营分类列表 + */ + getCampCategories: () => { + const url = `/camp/categories?keyword=&page=1&page_size=10`; + return request({ + url, + method: 'GET' + }); + }, + + /** + * 获取打卡营列表 + * @param {String} categoryId - 分类ID,如果为 undefined/null/-1 则返回推荐打卡营 + * @param {String} userId - 用户ID(可选,如果不传则从本地存储获取) + */ + getCamps: (categoryId, userId) => { + const user_id = String(userId || wx.getStorageSync('wxuserid') || ''); + // 已加入打卡营:只返回当前用户已加入的营 + if (categoryId === 'joined') { + return request({ + url: `/camp/camps?joined_only=1&page=1&page_size=50&user_id=${encodeURIComponent(user_id)}`, + method: 'GET' + }); + } + // 推荐打卡营(与后端 RecommendFilter 约定:only_true = 只返回推荐的) + if (!categoryId || categoryId === 'undefined' || categoryId === '-1') { + return request({ + url: `/camp/camps?recommend_filter=only_true&page=1&page_size=20&user_id=${encodeURIComponent(user_id)}`, + method: 'GET' + }); + } + // 按分类筛选 + const url = `/camp/camps?category_id=${categoryId}&page=1&page_size=20&user_id=${encodeURIComponent(user_id)}`; + return request({ + url, + method: 'GET' + }); + }, + + /** + * 获取打卡营详情 + * @param {String} campId - 打卡营ID + * @param {String} userId - 用户ID(可选,如果不传则从本地存储获取) + */ + getCampDetail: (campId, userId) => { + const user_id = String(userId || wx.getStorageSync('wxuserid') || ''); + // 根据 proto 定义,使用查询参数 id + return request({ + url: `/camp/camps/detail?id=${campId}&user_id=${encodeURIComponent(user_id)}`, + method: 'GET' + }); + }, + + /** + * 获取打卡营详情及状态(聚合接口,包含用户状态、小节、任务等完整信息) + * @param {String} campId - 打卡营ID + * @param {String} userId - 用户ID + */ + getCampDetailWithUserStatus: (campId, userId) => { + return request({ + url: `/camp/camp_detail_with_user_status`, + method: 'POST', + data: { + camp_id: String(campId), + user_id: String(userId || wx.getStorageSync('wxuserid') || '') + } + }); + }, + + // ==================== 用户打卡营操作 ==================== + + /** + * 加入打卡营 + * @param {String} campId - 打卡营ID + */ + joinCamp: (campId) => { + return request({ + url: `/camp/user_camp/join`, + method: 'POST', + data: { + user_id: String(wx.getStorageSync('wxuserid') || ''), // 从本地存储获取用户ID + camp_id: campId + } + }); + }, + + /** + * 检查用户是否加入打卡营 + * @param {String} campId - 打卡营ID + */ + checkUserCampStatus: (campId) => { + return request({ + url: `/camp/check_user_camp_status`, + method: 'POST', + data: { + user_id: String(wx.getStorageSync('wxuserid') || ''), // 从本地存储获取用户ID + camp_id: campId + } + }); + }, + + /** + * 重置打卡营进度(新接口) + * @param {String} campId - 打卡营ID + * @param {String} userId - 用户ID + * @param {Boolean} confirm - 是否确认 + */ + resetCampProgress: (campId, userId, confirm = true) => { + return request({ + url: `/camp/user_camp/reset_progress`, + method: 'POST', + data: { + user_id: String(userId || wx.getStorageSync('wxuserid') || ''), + camp_id: String(campId), + confirm: confirm + } + }); + }, + + /** + * 重启打卡营(旧接口,已废弃) + * @deprecated 请使用 resetCampProgress + */ + restartCamp: (campId) => { + return request({ + url: `/camp/${campId}/restart`, + method: 'POST' + }); + }, + + // ==================== 小节相关 ==================== + + /** + * 获取打卡营的小节列表(课程列表) + * @param {String} campId - 打卡营ID + * @param {String} userId - 用户ID(可选,如果不传则从本地存储获取) + */ + getCampCourses: (campId, userId) => { + const user_id = String(userId || wx.getStorageSync('wxuserid') || ''); + // 根据 proto 定义,使用 /camp/sections 接口,通过 camp_id 查询参数 + return request({ + url: `/camp/sections?camp_id=${campId}&page=1&page_size=10&user_id=${encodeURIComponent(user_id)}`, + method: 'GET' + }); + }, + + /** + * 检查是否可开启小节(后端查库:上一小节是否完成等) + * @param {String} campId - 打卡营ID + * @param {String} sectionId - 小节ID + * @returns {Promise<{ success: boolean, can_unlock: boolean, message: string }>} + */ + canUnlockSection: (campId, sectionId) => { + return request({ + url: `/camp/can_unlock_section`, + method: 'POST', + data: { + user_id: String(wx.getStorageSync('wxuserid') || ''), + camp_id: campId, + section_id: sectionId + } + }); + }, + + /** + * 检查任务是否可以开始(前置任务是否已完成) + * @param {String} taskId - 任务ID + * @returns {Promise<{ success: boolean, can_start: boolean, reason: string }>} + */ + canStartTask: (taskId) => { + return request({ + url: `/camp/can_start_task`, + method: 'POST', + data: { + user_id: String(wx.getStorageSync('wxuserid') || ''), + task_id: taskId + } + }); + }, + + /** + * 购买小节(开启第一小节) + * @param {String} campId - 打卡营ID + * @param {String} sectionId - 小节ID + */ + purchaseSection: (campId, sectionId) => { + return request({ + url: `/camp/purchase_section`, + method: 'POST', + data: { + user_id: String(wx.getStorageSync('wxuserid') || ''), + camp_id: campId, + section_id: sectionId + } + }); + }, + + /** + * 获取用户在某营的小节可访问/已购列表 + * @param {String} campId - 打卡营ID + * @param {Number} page - 页码 + * @param {Number} page_size - 每页数量 + */ + listUserSectionAccess: (campId, page = 1, page_size = 1000) => { + return request({ + url: `/camp/list_user_section_access`, + method: 'POST', + data: { + user_id: String(wx.getStorageSync('wxuserid') || ''), + camp_id: campId, + page, + page_size + } + }); + }, + + /** + * 获取每个小节的完成状态 + * @param {String} campId - 打卡营ID + * @param {String} userId - 用户ID + */ + getSectionUserStatus: (campId, userId) => { + return request({ + url: `/camp/section/user-status`, + method: 'POST', + data: { + camp_id: String(campId), + user_id: String(userId || wx.getStorageSync('wxuserid') || '') + } + }); + }, + + /** + * 根据课程小节ID获取用户与课程小节的关联关系 + * @param {String} courseIds - 课程ID列表(逗号分隔) + * @param {String} userId - 用户ID(可选,如果不传则从本地存储获取) + */ + getCourseUserRelations: (courseIds, userId) => { + const user_id = String(userId || wx.getStorageSync('wxuserid') || ''); + return request({ + url: `/camp/course/user-course-relations?course_ids=${courseIds}&user_id=${encodeURIComponent(user_id)}`, + method: 'GET', + }); + }, + + /** + * 获取课程完成状态 + * @param {String} campId - 打卡营ID + * @param {String} courseId - 课程ID + */ + getCourseCompleted: (campId, courseId) => { + return request({ + url: `/camp/${campId}/course/${courseId}/completed`, + method: 'GET' + }); + }, + + // ==================== 任务相关 ==================== + + /** + * 获取任务详情(需要 campId 和 courseId) + * @param {String} campId - 打卡营ID + * @param {String} courseId - 课程ID + * @param {String} taskId - 任务ID + * @param {String} taskType - 任务类型 + */ + getTaskDetail: (campId, courseId, taskId, taskType) => { + return request({ + url: `/camp/${campId}/course/${courseId}/tasks/${taskId}?task_type=${taskType.toUpperCase()}`, + method: 'GET', + }); + }, + + /** + * 按任务ID直接获取任务详情(无需 campId/courseId) + * @param {String} taskId - 任务ID + * @param {String} userId - 用户ID(可选,如果不传则从本地存储获取) + */ + getTaskDetailById: (taskId, userId) => { + const user_id = String(userId || wx.getStorageSync('wxuserid') || ''); + return request({ + url: `/camp/tasks/detail?id=${taskId}&user_id=${encodeURIComponent(user_id)}`, + method: 'GET', + }); + }, + + /** + * 根据任务ID获取任务与用户的关联关系 + * @param {String} taskIds - 任务ID列表(逗号分隔) + * @param {String} userId - 用户ID(可选,如果不传则从本地存储获取) + */ + getCampTaskUserRelations: (taskIds, userId) => { + const user_id = String(userId || wx.getStorageSync('wxuserid') || ''); + return request({ + url: `/camp/task/user_task?task_ids=${taskIds}&user_id=${encodeURIComponent(user_id)}`, + method: 'GET', + }); + }, + + // ==================== 任务进度相关 ==================== + + /** + * 获取用户任务进度详情 + * @param {String} userId - 用户ID + * @param {String} taskId - 任务ID + */ + getProgressDetail: (userId, taskId) => { + // GET 请求的参数作为 query 参数传递(兼容微信小程序,不使用 URLSearchParams) + const user_id = encodeURIComponent(String(userId)); + const task_id = encodeURIComponent(String(taskId)); + return request({ + url: `/camp/progress/info?user_id=${user_id}&task_id=${task_id}`, + method: 'GET' + }); + // 注意:request.js 已处理,当 success=false 时不会显示错误提示(没有进度是正常情况) + }, + + /** + * 更新任务通用进度 + * @param {Object} data - 进度数据 + */ + updateCampProgress: (data) => { + return request({ + url: `/camp/progress/update`, + method: 'POST', + data: data + }); + }, + + /** + * 重置任务进度(用户重新答题) + * @param {Object} data - 重置数据 + */ + resetTaskProgress: (data) => { + return request({ + url: `/camp/reset_task_progress`, + method: 'POST', + data: data + }); + }, + + // ==================== 任务类型特定接口 ==================== + + /** + * 更新视频任务进度 + * @param {String} campId - 打卡营ID + * @param {String} courseId - 课程ID + * @param {String} taskId - 任务ID + * @param {Object} data - 进度数据 + */ + updateVideoProgress: (campId, courseId, taskId, data) => { + return request({ + url: `/camp/${campId}/course/${courseId}/tasks/${taskId}/video`, + method: 'POST', + data: data + }); + }, + + /** + * 更新文本图片任务进度 + * @param {String} campId - 打卡营ID + * @param {String} courseId - 课程ID + * @param {String} taskId - 任务ID + * @param {Object} data - 进度数据 + */ + updateTextImageProgress: (campId, courseId, taskId, data) => { + return request({ + url: `/camp/${campId}/course/${courseId}/tasks/${taskId}/text-image`, + method: 'POST', + data: data + }); + }, + + /** + * 更新主观题任务进度 + * @param {String} campId - 打卡营ID + * @param {String} courseId - 课程ID + * @param {String} taskId - 任务ID + * @param {Object} data - 进度数据 + */ + updateSubjectiveQuestionProgress: (campId, courseId, taskId, data) => { + return request({ + url: `/camp/${campId}/course/${courseId}/tasks/${taskId}/subjective`, + method: 'POST', + data: data + }); + }, + + /** + * 更新申论任务进度 + * @param {String} campId - 打卡营ID + * @param {String} courseId - 课程ID + * @param {String} taskId - 任务ID + * @param {Object} data - 进度数据 + */ + updateEssayProgress: (campId, courseId, taskId, data) => { + return request({ + url: `/camp/${campId}/course/${courseId}/tasks/${taskId}/essay-question/essay`, + method: 'POST', + data: data + }); + }, + + /** + * 更新客观题任务进度 + * @param {String} campId - 打卡营ID + * @param {String} courseId - 课程ID + * @param {String} taskId - 任务ID + * @param {Object} data - 进度数据 + */ + updateObjectiveQuestionProgress: (campId, courseId, taskId, data) => { + return request({ + url: `/camp/${campId}/course/${courseId}/tasks/${taskId}/objective`, + method: 'POST', + data: data + }); + }, + + // ==================== 任务答案相关 ==================== + + /** + * 获取主观题任务的用户答案 + * @param {String} campId - 打卡营ID + * @param {String} courseId - 课程ID + * @param {String} taskId - 任务ID + */ + getSubjectiveTaskUserAnswer: (campId, courseId, taskId) => { + return request({ + url: `/camp/${campId}/course/${courseId}/tasks/${taskId}/subjective/user-answer`, + method: 'GET', + }); + }, + + /** + * 获取申论题任务所有问题的用户答案 + * @param {String} campId - 打卡营ID + * @param {String} courseId - 课程ID + * @param {String} taskId - 任务ID + */ + getEssayQuestionUserAnswer: (campId, courseId, taskId) => { + return request({ + url: `/camp/${campId}/course/${courseId}/tasks/${taskId}/essay-question/user-answer`, + method: 'GET', + }); + }, + + /** + * 获取申论题任务是否需要审核 + * @param {String} campId - 打卡营ID + * @param {String} courseId - 课程ID + * @param {String} taskId - 任务ID + */ + getEssayTaskReviewStatus: (campId, courseId, taskId) => { + return request({ + url: `/camp/${campId}/course/${courseId}/tasks/${taskId}/essay-question/need-audit`, + method: 'GET', + }); + }, + + /** + * 获取客观题答题结算结果 + * @param {String} campId - 打卡营ID + * @param {String} courseId - 课程ID + * @param {String} taskId - 任务ID + */ + getObjectiveQuestionSettlementResult: (campId, courseId, taskId) => { + return request({ + url: `/camp/${campId}/course/${courseId}/tasks/${taskId}/objective/settlement-result`, + method: 'GET', + }); + }, + + // ==================== 订单相关 ==================== + + /** + * 创建订单(打卡营小节) + * @param {Object} orderData - 订单数据 + */ + createOrder: (orderData) => { + return request({ + url: `/order/create`, + method: 'POST', + data: orderData + }); + }, + + /** + * 取消订单 + * @param {Object} orderData - 订单数据 + */ + cancelOrder: (orderData) => { + return request({ + url: `/order/cancel`, + method: 'POST', + data: orderData + }); + }, + + // ==================== 支付相关 ==================== + + /** + * 创建支付(获取预支付ID) + * @param {Object} paymentData - 支付数据 + */ + createPayment: (paymentData) => { + return request({ + url: `/pay/create`, + method: 'POST', + data: paymentData + }); + }, + + /** + * 创建打卡营小节支付请求订单(已废弃,使用 createOrder + createPayment) + * @deprecated 请使用 createOrder + createPayment + */ + createCampPayment: (campId, courseId) => { + return request({ + url: `/camp/${campId}/course/${courseId}/order`, + method: 'POST', + }); + }, + + /** + * 取消支付 + * @deprecated 请使用 cancelOrder + */ + cancelCampPayment: (campId, orderId) => { + return request({ + url: `/camp/${campId}/order/${orderId}/cancel`, + method: 'POST', + }); + }, +}; diff --git a/config/question_api.js b/config/question_api.js new file mode 100644 index 0000000..2ed2063 --- /dev/null +++ b/config/question_api.js @@ -0,0 +1,144 @@ +import apiConfig from './api_config.js'; +import request from '../utils/request.js'; + +// Fiber 后端请求函数 +// 注意:request 函数内部已经会拼接 baseURL,所以这里只需要传入相对路径 +function fiberRequest(options) { + return request({ + url: options.url, // 只传入相对路径,request 函数会拼接 baseURL + method: options.method || 'GET', + data: options.data, + header: options.header || {} + }); +} + +export const questionApi = { + /** + * 获取试卷详情(使用 Fiber 后端) + * @param {string} paperId 试卷ID + * @returns {Promise} 试卷数据 + */ + getPaperDetail: (paperId) => { + return fiberRequest({ + url: `/paper/detail?id=${paperId}`, + method: 'GET' + }).then(res => { + // 转换 Fiber 后端返回格式为前端期望的格式 + if (res.success && res.paper) { + return { + success: true, + code: 200, + data: res.paper, + paper: res.paper // 兼容旧格式 + }; + } + return res; + }); + }, + + /** + * 获取试卷(兼容旧接口,接受 paperId 和 taskId) + * @param {string} paperId 试卷ID + * @param {string} taskId 任务ID(可选) + * @returns {Promise} 试卷数据 + */ + getExamPaper: (paperId, taskId) => { + return questionApi.getPaperDetail(paperId); + }, + + /** + * 获取试卷详情(包含答案和解析,用于答题结果页面) + * @param {string} paperId 试卷ID + * @returns {Promise} 试卷数据(包含答案和解析) + */ + getPaperWithAnswers: (paperId) => { + return fiberRequest({ + url: `/paper/result?id=${paperId}`, + method: 'GET' + }).then(res => { + // 转换 Fiber 后端返回格式为前端期望的格式 + if (res.success && (res.paper || res.data)) { + const paper = res.paper || res.data; + return { + success: true, + code: 200, + data: paper, + paper: paper // 兼容旧格式 + }; + } + return res; + }); + }, + + /** + * 创建答题记录(使用 Fiber 后端) + * @param {object} data 答题记录数据 + * @param {string} data.user_id 用户ID + * @param {string} data.paper_id 试卷ID + * @param {number} data.start_time 开始时间(Unix时间戳,秒) + * @param {number} data.end_time 结束时间(Unix时间戳,秒) + * @param {array} data.answers 答案数组 + * @returns {Promise} 创建结果 + */ + createAnswerRecord: (data) => { + // 转换前端数据格式为 Fiber 后端期望的格式 + const fiberData = { + user_id: String(data.user_id), + paper_id: String(data.paper_id), + task_id: data.task_id ? String(data.task_id) : '', // 打卡营任务ID,用于不同打卡营的答题隔离 + start_time: data.start_time || Math.floor(Date.now() / 1000), + end_time: data.end_time || Math.floor(Date.now() / 1000), + answers: (data.answers || []).map(answer => ({ + question_id: String(answer.question_id), + user_answer: String(answer.user_answer || '') + })) + }; + + return fiberRequest({ + url: `/answer_record/create`, + method: 'POST', + data: fiberData + }).then(res => { + // 转换 Fiber 后端返回格式为前端期望的格式 + if (res.success) { + return { + success: true, + code: 200, + ...res + }; + } + return res; + }); + }, + + /** + * 获取答题记录(使用 Fiber 后端) + * @param {string} userId 用户ID + * @param {string} paperId 试卷ID + * @param {number} page 页码 + * @param {number} pageSize 每页数量 + * @returns {Promise} 答题记录列表 + */ + getAnswerRecord: (userId, paperId, page = 1, pageSize = 100, taskId = '') => { + let url = `/answer_record/detail?user_id=${userId}&paper_id=${paperId}&page=${page}&page_size=${pageSize}`; + if (taskId) { + url += `&task_id=${taskId}`; + } + return fiberRequest({ + url: url, + method: 'GET' + }).then(res => { + // 转换 Fiber 后端返回格式为前端期望的格式 + if (res.success) { + return { + success: true, + code: 200, + ...res + }; + } + return res; + }); + } +}; + + diff --git a/config/util.js b/config/util.js new file mode 100644 index 0000000..3c79781 --- /dev/null +++ b/config/util.js @@ -0,0 +1,59 @@ +/** + * GET请求封装 + */ +function get(url, data = {}) { + return request(url, data, 'GET') +} + +/** + * POST请求封装 + */ +function post(url, data = {}) { + return request(url, data, 'POST') +} + +/** + * 微信的request + */ +function request(url, data = {}, method = "GET") { + var contentType = 'application/json' + return new Promise(function(resolve, reject) { + wx.request({ + url: url, + data: data, + method: method, + header: { + 'Content-Type': contentType + }, + success: function(res) { + console.log('===============================================================================================') + console.log('== 接口地址:' + url) + console.log('== 接口参数:' + JSON.stringify(data)) + console.log('== 请求类型:' + method) + console.log("== 接口状态:" + res.statusCode); + console.log('===============================================================================================') + if (res.statusCode == 200) { + resolve(res.data); + } else { + //请求失败 + reject("请求失败:" + res.statusCode) + } + }, + fail: function(err) { + //服务器连接异常 + console.log('===============================================================================================') + console.log('== 接口地址:' + url) + console.log('== 接口参数:' + JSON.stringify(data)) + console.log('== 请求类型:' + method) + console.log("== 服务器连接异常") + console.log('===============================================================================================') + reject("服务器连接异常,请检查网络再试") + } + }) + }); +} +module.exports = { + request, + get, + post +} diff --git a/img/cgz_03.png b/img/cgz_03.png new file mode 100644 index 0000000000000000000000000000000000000000..cd485fb7618cbf9c08e0071953e2ab8b3c8bdecd GIT binary patch literal 1692 zcmV;N24ne&P)O>l0 z3TO>b>Pzro9G&OnfQP~EfOeY_VFdM@9`sS-Q&4JnvgMS4&wO-H6YgYNMo^8P^=P;g zR9fyl=N_LMQf9*ll|GhVli<#~QIqZKf=>CSjc}t!=hdiKm_!4(xfdJ&T{L&ZR6ZkM z**pjQEUYYl1r^|slUkCY)_*3K&1!AGOUUyJD4}I;s>zr(LLr~DRvHOzISPtX)Buu9 z1@C~ppeEM6!+pXW@DD9soHU}D_2GWqIpGp;986-@?*u!X^peA1w(IvGmyOs~S zyyk>0!d!5x#S3r^%yy zyp!$wg7?}Pah7s<#L{f8V+dOYP%IYey<8>SB_tGBe69IC8WD>IP~-`9SE+=R>|(En zd)%=+xtX3+CDaP}H&*`&M{rNIN6oMFyzX!vrPmpnOm*1B+IUSlOu}qk-D6?B{}g$B zmb2@t=)AI6D6^i*nU*8$cQ{0j2e;UAnAA|mxOf?$#*!X=?01$jLN>d2+TspSb?g-| zHI~YjPNIaWmsr9 z;$eV#I>V^#VoZ5nRP<) zxQnhf0cVi|ngLo;%+(gZ_=G$m4(T8$&{&Q>4NB>>_&tl8u!VF=zK!A!f<)+=*Hom+3~)9mQbqX}mI~L^ zFwadB1LTsvT$XVI1by`Jkua3HD8M_F9|0Bie@M{1bu7W085Fvc&#wPSLv0`hM}YcF z=v#1u5WuA-!{J!t7?pKy6FkG$gYUsrDQ18$>BSB3H(22KePpIFyh??wwvv8udx|^) z6~g97JK9FKk#e6X_ti-@K&^*f!@4&qmd0+PyDv#c5=Mo(`+Gg~ISp>M_2o;R5YXY4 zk3os$&X-U-Ub3IuXjZ?0ng})pe2dgZk!9J2IzE+RsCERj+cK6fsEuV&Wbv^1_ki-JXxI8zxLeop z{dHz_9dq~2Io*5C%$fPsr|$gjIcMj5@0{QKX6DQ~uIsXxZ3UPJzJsfvKk^!o2r)4W zbh!UoH&`2WU7VO&LOpm6hL`w02Rfpv%#fHKfn$RRKz26D%EZwUNceAHWSQe;fTwYZ zFdH1@!KxaT0h1+;`vAUFsSZ8h5a=u=LLaDOW|&h-1ecj(PN~57*bo8U4Hgr!;4qj9 z3cO|X^XGW6@7PX$v5W#Yl?RhRlh1z-yavN~InC>Q8+T)G=4? zydZhPXn`-QSQF1m);n~vG*sYADJDWnvffH$j7pgm!HQr-up-1I!aSbL1hENVZW2VG zOzjfr0x!UN$@5n7;~#={FhXY$wtx-%a}78p(|5y8fLi`}71*J(2vdCJbWt83q;BJM z79sB||CAiA{}P<1tq97`Pb962bR>O=79lP0WlR&HTj1+5O@#NnJAJ@!elznHc><5W zb+_wap&dKe0hARXlqE4HP&c`sca6uHx9(|_2sF~X&4=w|JHdQbW=%6`k3&6|^yL;-=5k-hu3^%@b_0WJMUTbuwLJl0`TN zu7Hc+8WT^nBwB<8V0%${4OnfO2xA4lI@3hROZsf@5QhjU!QXTw&U4C?weBKEf!`9x z)%wacI*ZWmD|g5|r-Fgct*Dx6HH_Yn-3a!9m*9Zpd3%^Q8PWhwGX65Qt|E|K<^(ZX zfZc1;W;=G!M}&f6_fx302x(1!=u{;|=n?p)DR#pR0^g^ySy_OMU}L~XpR!NDOoc?C zjbqb`%9NCiXWqnXMOp$)THf^eXvbQsA_AQD2{4dg^;WVakkOXj8v_4ba0c9uI9Sq* z@*=PcED?M!waGNhzR2@nn+5^#0@x~ZU>Ff-G)L=wOBEJ?TIMn)`Q}`hJb^B}oOufz zDq0(_pY*RAHd&(Qz8SPI@Aa6t-&J&ZtZL!)3KW+rwO4u$kIeOa+#f}7q@ef%yyacv lqp%lp6!<3+vD+U31^^%WHnNibm}&q3002ovPDHLkV1gqkz(W84 literal 0 HcmV?d00001 diff --git a/img/cgz_07.png b/img/cgz_07.png new file mode 100644 index 0000000000000000000000000000000000000000..d3e257ded5cb82687e96e0af12255dc96325c0bd GIT binary patch literal 1764 zcmV`1& z#z(}ciIGR5Vq($)3m1?88rB92aRm$G0t)&ExH55rj~y-UsP0VM_$mqlEiJl0G%+E; zm>7&(fuS>V&pH0ixp(T!a66Ctn7PxF9PV^xdguN=^Zh-!#XmN}z%Eh%m7)NDNW6_2 zUI8#SMOl9Wg8nhs`gaW>h>8MvpZA~wV530`*r+`E1`Lj~S@u~_>%=iqW*`4>yp=x0vIuHwde4!l(8WiKncL1I#k9tc+;?|Y`YKjOzT;=2Qtw7`+0`kTCLj;u# zk~ju@VTiW01@NG2EVcqM7!W*ya#3nc_$~t|#W+n%5V?kcTnA`^CxLL9s%nUX;G6+7 z!7s%HvE*XJpg^zyjNl+R>RsS8c$5rY46pZBV;qQkF;2VQ#fYY?LAeDGq`@Ty@T^ON z2;+!&gR?m51zuBRg95&%)VI-nWEuC75C*F5$= z%Y5|Wg0P=s5TB+TDS%61+SVa}dPQ8SQ^f9WVuWp{$=6>~4ghc#@D^AB-2#XLaU)bj zdk~0#zMAn-&r=RuV4eYNj|reYYg`Jm#*I)Br54SVb%k>rcaGW5rM@a)gxg_}7(f(= zUqVHcRs%p9j@ZX`Q~vZEP#HM&20xF>4CT$m<-oLMN~on zvs{fHsR8LZgsui6>43Nrnrans5R{o=7dQ+N16b_Ew7Jd&7FhvXG6qn;78$^#26IdJ z1_aSc-^7qWYvnfeP60g!V0AFT2EHk@%ZRHEmokOmx{)ATx-0nk;k)G!dq zejX4FK!qc*en4m%h-~c(0G$nhj@+Tn1vlg$uzvyGz>BkGwz5#Ee;goO3!%=GAR0=A z%^VPSfN5=z2|yr&n06renM%=X4#;k>#)BLr4~TSB~6S1QK`;o&1#l<$jW|8*k=Sr7vj0Z-vr7GmVn(ah&C96bA(Y z?|n`YoquzG^E)q+(%*CWdqGKYlY9l}$@;Pw24zVS+&&=eX#;>8OS8n1pEH^b5AG2x zv-AN?ojVNZl2lO>{yOnkgbBCV@E`a%#|(aC47VQ8_Tbvx)JhlVI0kojRoUok{OCM? z+jB@_!5CA;HDqjyRvLb1Pk0M`{T2WGr5AF8krI%j(2YT@rdaTFYt$6U@O(~+FyW6TzL6lPQq=8beehOo7IIm6FSO((v!76jZ^vc;MQEXA01apjyM9m=2%9}%A!Gne4uq^n z^iVxE&JG0@#M(`Rbp0gshXp&z2R0>W>oc`u8-zFje4`-OuK+~ZwG2R0AQ7TP({pGo zoBxkPO9|TDV~Z!mO@*UgjXvfP8wKv~w`CT1=gAq(8eOcuK7n94Wy9=HPyirk`Yf^N z-_9yFOp!%}0DP;*1W~aeS<(T32jORyhXO!UTKi)Pz<3tfQ5Oz$TY8G!vAgih@ZK_6|{St=L+;IL))WgB*z3BXHepMfN7n$qH^ z{fDlM0~j*B+nfpjIw2I7+AE4W+ssPA9h&msj8^9%%6}kxl)UyI0 z$=bnW4A25V6oScVP#XY|*TG*4m;g}I2_P#!C21Z~JFfHXO zC&91_4_Z1n%3ZsWB>-U%)=Z@#o0>OVB&P&!qUi1`t?5zH?)^eIW!G|y)cprJqGw2B$ z{GyX$qt_wF2DQE2-V57po?!!j0j)S0v3~*#0L!GF7f`}}6aWAK07*qoM6N<$f_==m AO#lD@ literal 0 HcmV?d00001 diff --git a/img/footerpic.png b/img/footerpic.png new file mode 100644 index 0000000000000000000000000000000000000000..59bfca138e4d75bb8a1e8422133e2f02bfa49c0a GIT binary patch literal 8020 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 literal 0 HcmV?d00001 diff --git a/img/footerpic1.png b/img/footerpic1.png new file mode 100644 index 0000000000000000000000000000000000000000..284967bf6ce146907b3a553a589661f4179e8207 GIT binary patch literal 8718 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 Nr)8{JqwW;`e*lM`y`TU9 literal 0 HcmV?d00001 diff --git a/img/footerpic2.png b/img/footerpic2.png new file mode 100644 index 0000000000000000000000000000000000000000..0d3111a5b02d5460c9d2d4c3665d6e2b853fc653 GIT binary patch literal 8425 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 K7*!d##s42&NqU(8 literal 0 HcmV?d00001 diff --git a/img/minemainback.png b/img/minemainback.png new file mode 100644 index 0000000000000000000000000000000000000000..903697536b6bc00bcab1cee992e9dd0e08c985f0 GIT binary patch literal 214591 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 Z|37uX2dI|$8@>Pl002ovPDHLkV1l#{$btX> literal 0 HcmV?d00001 diff --git a/img/pause.png b/img/pause.png new file mode 100644 index 0000000000000000000000000000000000000000..e910cfe69e87caf2d91e1a680cf64457eeaf092d GIT binary patch literal 11519 zcmW-n1ymDU8^<@gL%IF)aO zKF)!iGq$^X?^FNh_w1{N+Dk$_T095@La3zp;x%|I1HTnGSm5unpS%uuz=bR7J3}Bu zzfr%?crGG32n0{nMovyc!`jis(b?J&&a5OS#|(FJw6w9afIvK^)3n_6V$Ufh7tSq+ zb!8_H$`kGUAuO!LIDbj>vq@qguumipq&q%;!P6zDAWc=&`5iEZr{oUQ`iR;FV)Qy{d&jDft=>zuY^=w;+$m`GIqLWOK>WaU+nhihp$VS)D85fBLocsAA8F7pmXUyuwH}x4TL!wvdHpa10Ndo z8uIt4_FrZ9NE`%W=jkoW0x2Yf?3^e`VnQYhVrQu!liBnIIFN8Cn&l}5vJ{HYujYS=hG@csxJBqi5lfpw5Z`3Edm+riXb?F@ zvOaWX74%HL;g-b$6Zq#^MJNQ>6W^EkYFL20Hhz%S{petE`QdV#UAZib>IsP@?kY=a zVhSsn;s&}(KLG?ndpXp4CoC1UvA(*rZnK6^tuf76uyyWOwZEzE6zZVhmXJe$SkXg zZzWXnUSP>_G1T`A{P%9g>j3g0S^8TEGAHo%1I)p#^mW8W4~FbBhw}~AyUx#kw-HZ< zmIccVxhX;p^}g0>u&8!=*1e8?@vtj?`N5_i{~=StEpDtkA*47+9jR80UDacU^xcD^ zg%arvyFsLVk9opq@uMLmR)YMV=MYG2%VnfA7ZlQ$n7aajH2$MD{1Hc`@&^Y3d6DVQ zStf%`&`Ms6BuZ^%Xhc$>!LVLP6R;u0No28B5%hRj)Cn>)+DOq!jH)tp+Dy{qC6ZsQ z&x8p#79SY;Z^NmuOsUh`s2hWDF=YPYkii~`ejzoBm}Ke4q52kq!2(khj6viwZ+;=y zWa;?pl#5m%Ya4B($a=)%L@p9;D18+*^Ou=FN+7DU^M_vjb9I6EghZGlhMo~whE2f?!-C~azv|JlcT$?K={?tt zd~VL5_n#XD9WouZkHdx*iXhv;G5$o-W)~0@^-@noPwvN~9oAnD>T%xS27Y?h_LwF1 zhx)HaUJovRdzguqN9idPv+q4*e3<^o_%RWgNvt9pQCG~W8s5W4QT$5yO79hC6nS#B zawUgJY*JO&x1;R4=2vkl5XH=i(KS)TQR*?*UG1wi6MOLD%F*eJPZ3J-IwNV}r>yRyOC>yqhld zxO0Jw@`;0q!|(rLZ*FV`p12bb1`!5!Dw=W7yr=m{lTTek!~0F;JLX8@x4+ta6Z~}F ztdfY69Ch?K&p5p)qPri&i^l85`^Ik+YU?=bNR4?G;%gV_5EmKi`g~W=snl30z#XM5 z8Y^JXX($jX?SJk5I#Odm(yab=``-NQ&D@-b64DYp?b~w&-F8|16z_K z=G&f|xToExM4NL%FHh}Ha!#qX_Q&^!nEvAv#1V?3v3n+Le$X3b{_lN~P3_RZr==gH zJ=XQnzpZnIlyV-|vhM|3tvvUjlC&&#q&F)ToVS>LFAg)a;h)L1LeX?c! z(614f-rm35v&ECeT{{sXW2x`cVa-#GGdJO%^W;-IltYC=I}@f8yn8ScR1?mNlXN9@ zJ#|lYCyJHE4Y#?s?Z@BPY0$k%AxIHT>8buvl2Y>9EyaF;e3?A*$?%g?Er;o6J2yLc zJIOm(yCP?>vqxw4X9Enq^bZ)u#azU^om^ad-R$6v+qp}E?FGLJ+Be@=(OG3VryW11 z`u-}a=Ru-dB9)eXen`GUhF4Gg8tq>FaMj3ZPD(?{Y{``U=v=QvhfmS9>eCduE~9pd zeVLPkbG_vcy(?+?Dfw;3Q5(F*ZpQk?*G-J-m8tCM<9zmiXMP(jHuZco6_u2*xa!|T zm;57%mf@8V-2AZxIc7L!0~RlVB!w&iE}=e?Q>-JB>WJ>rTwvCUJ9&tr8z+t8E!`DgFS`ok zIB7)C0L}u5ujBVimCfF2oG*(n?Y`79+0cBWy7VD`!pUFwbW8J>mdgj1bMEotRsCzL zrijDHg0MQV8QW?nH>+Y>yVrK+J1Mn@+QM3YkKhaW!^8(JWNf&*Usr!m{+9T<;*7Ro zmn@LFnyj7RVqUs7n_Wk>zS-ZC?k=wXTtCWN_;b>O#0sgkKxSDDUTXEVd)qOEOUpz4N zVTwm2E;TMS=QW{C!Y{4~z8a1ibxSU;Si)7$b^C6**x>H-Rn|-A;~5IO&niPXzh0MW z5K*e|{^0U3pf>QRRcumxJ1VeXdAD`RiXTAf-4s=(QCn6yS?i&HxX98X-$2P4szv4g z^qJA?`ga~S2g5!+);$#ow;IcOuXT=WJ!g+1UIz~6<;igcyb+8qi0kTcC_Q;wXHEf& zf2Xr=n>c2m>&HnIZ&C~|{!w~Srck@S{6@`W%=^^SetLRdxu$z}TX8#g+oAYezvZWL zlda6yV9)_!3Eg4%8l8!~^1Mrym+fgp-><&zKJ@3X=eq{I)x|SMSwcByUTJ*Iy*-XB*q z{$=&I&$jn1eDkY0#o1Q$6vL95{H+o0kJFj@AA{r)TAUvzs-7{tK58hZ=`9|WF^QuImRN|#C{B}w4r-9?P#d*)}8}U+?6V+|8q5ToRD_i84^Tfr(Q=<&e zru{!VbTtm_bM&>3>Q67+&UUHX@%B_^jl3c~e%>@s-)>=F5pVhZx+}Lp+Am(1B25R{ z^@;b1aD&tD;_gR+mxf>Vz8qs!U=5Ex@44+y{rZK@CZ=y3H_~?+ z$3s`-hQ*|g7M~eeFGs({dZ)VBr;KDI1Y;;0SGfuj!f=s1b0CA4;+q|u45IS{Pldt zvE#?y%~HLw-U4JwVHJXXmrF*EhUd;_KN`8=*tqYiQ`&4$4T&AT%{d7Acaa z>Zlx5`&3$1jxQzY85nLo;BdH{iOIr-``+x-v2Rck}hv%Qc_-bG(wSBrwGw5>+9l_D5HuL0Hn@;NhW_=;8}U z1h$$&Lb8#jd=MED1dLiSgn)Yhs`emrY+E{b)1NO2yc6Cgbr_nB6Ov8vwq%?!vU4Og zBf~_)#N_AM*_p$O(?Cdz;6$mBIT4d&>dM!tA$r<%2Q3~;5;ju3bo3zeR%tCnEXK`7 zLSN>PjZD;U<3zDvBCv`6*v)S=c_MY!cxM|7lYUnxHXC)$8{Aa9#@e*Bw7ETryvKxu zgu{8S665OYMXQ#rExeUBqvLJ@0!2QauaW2ODRG5<4VBo22YFcJ46ACAYmj5IDWL_y zGDkKcogWs3iNX|CG9`Ww#m6MPb-vp9c90bfb4f7nL;N&u>dwo}9sOG&&KV7KsAIE)noPw(<$QipEhUUMgq8`i>G8L6n=sE?eO2QULi9o%$b z?s0NgR#vu^_DVo+#fB_(yXk+U+{g2Sm3)o$CB*pntQW#=#fkz4^30UrVhFc zQ!ux3b8~}%=(H*-v-+&4s3@!yvx+0HX<9jje8=yf%@O!mEp^f#axKH2pWd9}&etOS zdKH$i!7MCH9S|6pAxuxSzd4eh_9GN`JS;ri$K~H(7C~&+Xx7LkyWvwR5{zd#W40Up z=@N7y5MH_TmL#8TYge6Y;B*$51xyVIf6UCy2aM~SKFh*4c0ZRVseC6&{vJ$Egl#RD z%%qo)R_n4Eg9$axPW{=i81^OPgp-~1-v@$fO#6(f_&ARn-8UQTpH9Y{)_Z9hI?Qay z$(1_Y!u1xp%H(BM1_wg7Px9p|Y z6HZR$%C{vY72JWkMVK-q3a^xvE7%`DUXVvn@c|FkBnr-XRh0z$2q!tn9(1o**A|w& zSf>GrjpOqPo{R2JlEw0WFK1N1H zCMG(k|{dJZ)Wr|W$wGo*_P(Z$8ZPT>m2fkW09N-_0XT3S6MrFpMD ze!Lc{nVGY$dTa2E06m5+gHgnZZO)`q??P2ZK|$fpta8drkhYIFh7HR z*N~xKGOi0Uqggqk&vJWnYis%wqobc3lrKCRjd`o>XR2vp*uWk;!M0C}hz{l& z+@)&XmPjb%e9(x=-D41QOJ$;^mGx=hVv~@Npxbq8ctb9a@)Ss9c$0+4G-TXuB3*cwRe zwm0h;!;G^i+)qVHxm7ZbbIH8WfO0PK$&kfgsQ zaJbx`oRsQ4vFldTT|wa1Fqe{=YWS5?f{zSbiFM@^0+#eOE-o&ag4n~&?TiQ1qDI$k zT@CU)vTz%m9ThdTyVjM%)Hmdq!1;Fk(Xm5x1s59|8v}l}+|j%jaJv8Qn2N^mKmcyH24XW^JzoU1uXxRKzO#aR zP*7rYe!iJdXLU;r27~=c;4w%a5hVQj_3OqB?LmK<*tQBg8JvFNjlTZZpcmQ2P{i}4 zrKRwYY)DT9Sw}~QzAtWVVIilCW}Hld#Y14ra7XFObH{bboFN?cSew?Fc6@${FR&zB z{RDqll7ClMmsDnm++_{^$8-?#n&hoZa2KA{X)?!?^@4%|cRW12Baoyu$v+Mat8ujO z>(^-Lj70#?Zj(JDZW&79;^d40x!#n*d+;t= zYxm{C)vg0`|C%~a8fao>-K@V0x@#VImov=M{Xj89TpT50EYRs`7}mnSgnYW6t?=Aa z?$H@_k@n2<)-tXR<%=R&c52JYZkx4$8v51AjBU9(ry|eu_LK|`16_>WmM%Sxx|m37 zKMzz+ZEPFv4O)iw;c*YB&VqKpM+w?;;ptUi$K_vuGMm zfD&{nJD@lj`K}7mCquT3tmp+jMvjHQ_XVTCKIsp5W7f=V>i{1+1k zd-06sp)du}Nfoi50ag1gUS6Zvl7yTlj8XvT)}Fdi9p&yl&Iog9 zop9zJmZTkBBn@87c`oK?W82o2Epbl;b5h*U@{wZ&CFVgOHnF6(PF2Q+=VaCUi9_k_ zX&FSKyKQs((!m36LfkGT*HAQ%`@36tf_8}Nh@8LMnLHv<3Y(a*cQ{7)Kw)aa<20lq z6Oo^vzd(us)7H_!AtrVt_}%Y{;o&L3$5$r9pHd&l$FTDy^1ZPJGCn^3D-cY*md6!t zTn~}{_|%Z`)m0{r$@a=mRFUT%peQKFzg; zPcbId+d^eCY@f9p?XG$HX}WJ_r{xj=l`kmt-ysekS|hngR7TB$v=(#su=RbDzq$$C zLH}z~D%imh=zU#A&Bljhkw3g@V3%4*KBToiQh{`JlMF%2O(|^3bF^?A>VomhtGz!$y;}pcHu+Xb#f*9Q~nm7mD z1O0Jxk59>QL8U2a!MkXP5K4Ve+c{H3E9|$KjR{=q_MwiB4kLYMt7YY>xZmAPi6=Cp zNt;R;m!3or)4s;RK@LG`>ZfRLUlPlv1ailpKfWS;|Lzy+xt@0C$TPkh8{$Eevw4 zg;MNz0g$JOMZ0+j$A#wGcp#bx+7qgVfiW)fxX#{LP=G8FQ8rkbh_<)6d8wRWf&4)K z)Tlm}8Ej6t-3r^h$VtPMHf8l2X6L(lXKS+rs0ol2 z+_SYGSgHU2B9MHZwbnA~>3{m#_1NzU)AZ-WduF8v9_hgm5fMBfx^^7Vy#z6^!q|`( zD=+u&(GEaHqz-I_1Tdp^yO393Kb@1WXvzllj%1g-!CXv8phVr^wg8_3-TMEd+nj)sB-#-4o4fy%_ zLq5<49~>NvC!(b%Cwp~T3lhC1$3$I;?Emi%B})m~nI$Egedm|r+!~rfVbqfi?!2^W zUm@2zvkva85i3#Y>BbVgi)CeHx(OEON3eO|=@Es63~WkmC}Fss@tT}ruC0Rm#mko_ zFHoz7fVvIJGZBMmoEY!o?_Y7wY@LV>nB)JQy9;@{MCcWAG9*aY8Nm>mMg_lHYC{Xi zYqfsnuGX(|5B-0bEL0nH!h_IcNHPlwlv1e<>aIf70`mN0U;JyFtHedU#EfnFtNAmq zaM!y4e}5Cni-UZ>*{$6vStkMzOIA-)Ygkck#Kt358Aj<@Hf1NlYuu;@_7kk0(KtY7 zkr9DhGS!4pqAp6VO8-e>*W#qpG;GuO>cS zU@pe>p3pM*2XcuQd+z;Q`1$|D(0efX?=iLg!4d%`su4a+K^%t=QJ7*qP|?NDd`ZBJ z>|xjs-<}jo!#W`snHe5#yJ24hjj|MOTStK?o|!taNiPuIs7D={JOmseJ{aRVTUJ!4@YHhbc~ zQB`g$1~I}cNS*MHLQQDkuCA_V5i86}ug_OHBk#YUUKCw4?^saMDuYx+8#S?c4PNBv zxUWFpX{DE7^t?yqA@VM9zsPK$N+PdmgPu{=X{OG<`67#eag+H3&c2*<@&;gWKEN3%B!` z@=<42Ryvab1MpgOb8#&ba-+{wCAXYL68Ky-K&3!bFbo_^2ElaY1<;^pKVK*)jBmS$ zPS!bF%{ex?&6|7*4z8gMS11ErxwEtLds1+NPn?d|`*`R(Pc_Lg7rc*Ex89>mx^8L5 z6&3=Rh2~p=gE86ieGoJN0nA}%r>8!5(}<1r^>Gx93s*q5v9Ym0ZJ8W&j%n<%xY;>5 z2F7crEvFN3?Vl5YUGKK2K|hZJPEI8NklF*#78A6qH11>tfkPP>qy$+^;ewQa$|a~} zlD>ZV@`DNkiW89JId*Sq@9wR=a zyu7?f3>)G0sn^9`!~QSSO4MC_eSJALv|yz=zxz8AN&-GeaWtEao{kRc^!^?PKnlO5 zR)S1rqdoqbnWQtgGFcJvRZUg3lpKSIo01|-fkr!+P%*+^LjPNyzuV3JLd(5X#LAVn zj?dSbd`aiBa;EdN>Gl$0HmqDp`nF95D66jkR^2J#|7b{pCdXM zHv=4Te0=N-a(@H>GODwNBuEq(R%O?c8aO6lWSsv3;dO|KjV;tmz{=6YQhMNvmYN*R z$cM;~^1GvK=R@c2x!bGW-^U_=ypNz4i76e~1e`X^u*Fw``uRgj-Uj!_j8@cm;FexQ zW9Rgt3Cm%UqlBT^|LL5Gkx`n@5L8`NwaJ|S+m)XkK6W=VlV9VPYtpi8MP?jBB(xdW z&I&^&>}xhogZsYZaec;d!vcI~vRn_K82U~bfb8(L6buYO%|RQegklRneOj6T5S09f z698rt9-)grdv^F(UK1-#?XfBKdIKLM7#C^wzzlEIA{7#bRu0J??haZoswi^0)iY=}C?c8i>i)NI*o;h)!5 z)x68?l`BK%2M|`w0s@sDRVpnnJ&(hH;3TJGa@T$R&eYSv%=(?jZ45dV;yErZu4@dN z3>R#0;LcF&Ga`ZoWI^7pr)!I!YX>!Z1IVR zf>5aH$FPPkBLF8#-H-}R8i$sttV1!Rl+dGM-S-2DCcc*o097$+f8cMfPjGx}i#L!7`y$=|_~AJJV| zIJ$2xQMo{T;2i9|b-cs?49Di12t%t%&Kp~rq)YKbvfKj3WN{^%t zq5%pblcU>IUtfRA%)ya#!zC|0ip@qCfLRbQT$*cGzM$fv3wI9!STk&Q0!@Zm$AkZhNbY~f^}ADXmhj7|u{A|qS&o$97BWDqE9=jrJw@}mu% ziT2>DM`w(K9Uz%$W461RI#nhhw1B!%0DNxkY3^iqqVZKS^()! zszGYL%JbL~4#KOjur%cHLrmr5I+_Gu+RxvC?JhaUaJL`0=85efgO6z1sQO~1y!U4a;ry6+k zO+Ug1wQ@kMS3OubIzGn#)7iOjUgLD716v36)Y8f-v65SC$*sYktt(pkZJ_<5-2C%1 zh0wm~b*EqBY`BXDhkes>VA}T#eC97ia1q85I?RGHx*qUEOMYsKIQmm1P{3 zO+dz@8&)6vq1Y=6yI2i{V9qVAAnSG%^(wDn+z3dzyu~Z~_d%3B$Y8sfao>Fb|J|X_& z!-T;(3v&Nnt=8=qd)slZuMSmB1qEf$fJYzuY{o2eQd~9;YHG?i%M$$YnLQO zcnl=ST&61NdSv)KwRYZ3j_U7%uz%CvKY`_u#EIk^dUoStpZrrv*+}2zpb7RsV9cHL z{UnY{OW9!wjz3AcV1DU+O?nffPVsYz?##U6qJ^6LG!3V0P=mlg>8KYZ7B+(XqTL4i zu7V%n9@g!)*8C;u-!R@JcN8~Gt&z(~&DZ( zI@j&-@0*)zEjaW{O!tvsa93SiY?nAjF>G65ASNsix+NL)XlYz}4&CESR_dN& zt42auahU<93mqAvT>oktwveWmk{qv@P~~R=^R$q^8QLmLBFk3`nn)Mf6?fh%ZaV9= z*(jJ!9z;Ev$XKGtd9|+i)tTR zSgHJwj&fvA%m4@~FfjPp>~WZF@hstqJOZ70AYH;>0({B9Q%fsW&)7J<5p*tF8I%^S zrvUyu#2Jwx`HoKL@1M@%ze=5nLBxl4|3p~n<`o|rwl1argW8PdyDBy!QFN$R2u7F? zL`F-RUyu(?3ic}rTjE1`UvLQVhLFj7((7O>DS6ab|LjL?IjBQ)$tk0iu2iyIg+(#v zOuf9*@r~E1V*J@URr=TRIsCT#MVU!q%!(|0^!UK%+RKr+;y5ul0W5*<_yf9ZH{Czg z*NcPYpKN}#Jp*s&>%XLjNDdAhK0LIrfQsTvKXgcF Y>o2Tt|3T`(cT6Bk@@g+iWlaPA2j;UQ0{{R3 literal 0 HcmV?d00001 diff --git a/img/play.png b/img/play.png new file mode 100644 index 0000000000000000000000000000000000000000..e5884a3f5abcdbc0697468cc5611b82dd1cb1028 GIT binary patch literal 13615 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 + + + + {{ title }} + + + + {{ description }} + + + + + + + + + + {{ cancelText }} + + + diff --git a/miniprogram_npm/@vant/weapp/action-sheet/index.wxss b/miniprogram_npm/@vant/weapp/action-sheet/index.wxss new file mode 100644 index 0000000..b48babc --- /dev/null +++ b/miniprogram_npm/@vant/weapp/action-sheet/index.wxss @@ -0,0 +1 @@ +@import '../common/index.wxss';.van-action-sheet{max-height:90%!important;max-height:var(--action-sheet-max-height,90%)!important;color:#323233;color:var(--action-sheet-item-text-color,#323233)}.van-action-sheet__cancel,.van-action-sheet__item{padding:14px 16px;text-align:center;font-size:16px;font-size:var(--action-sheet-item-font-size,16px);line-height:22px;line-height:var(--action-sheet-item-line-height,22px);background-color:#fff;background-color:var(--action-sheet-item-background,#fff)}.van-action-sheet__cancel--hover,.van-action-sheet__item--hover{background-color:#f2f3f5;background-color:var(--active-color,#f2f3f5)}.van-action-sheet__cancel:after,.van-action-sheet__item:after{border-width:0}.van-action-sheet__cancel{color:#646566;color:var(--action-sheet-cancel-text-color,#646566)}.van-action-sheet__gap{display:block;height:8px;height:var(--action-sheet-cancel-padding-top,8px);background-color:#f7f8fa;background-color:var(--action-sheet-cancel-padding-color,#f7f8fa)}.van-action-sheet__item--disabled{color:#c8c9cc;color:var(--action-sheet-item-disabled-text-color,#c8c9cc)}.van-action-sheet__item--disabled.van-action-sheet__item--hover{background-color:#fff;background-color:var(--action-sheet-item-background,#fff)}.van-action-sheet__subname{margin-top:8px;margin-top:var(--padding-xs,8px);font-size:12px;font-size:var(--action-sheet-subname-font-size,12px);color:#969799;color:var(--action-sheet-subname-color,#969799);line-height:20px;line-height:var(--action-sheet-subname-line-height,20px)}.van-action-sheet__header{text-align:center;font-weight:500;font-weight:var(--font-weight-bold,500);font-size:16px;font-size:var(--action-sheet-header-font-size,16px);line-height:48px;line-height:var(--action-sheet-header-height,48px)}.van-action-sheet__description{text-align:center;padding:20px 16px;padding:20px var(--padding-md,16px);color:#969799;color:var(--action-sheet-description-color,#969799);font-size:14px;font-size:var(--action-sheet-description-font-size,14px);line-height:20px;line-height:var(--action-sheet-description-line-height,20px)}.van-action-sheet__close{position:absolute!important;top:0;right:0;line-height:inherit!important;padding:0 16px;padding:var(--action-sheet-close-icon-padding,0 16px);font-size:22px!important;font-size:var(--action-sheet-close-icon-size,22px)!important;color:#c8c9cc;color:var(--action-sheet-close-icon-color,#c8c9cc)}.van-action-sheet__loading{display:flex!important} \ No newline at end of file diff --git a/miniprogram_npm/@vant/weapp/area/index.js b/miniprogram_npm/@vant/weapp/area/index.js new file mode 100644 index 0000000..6b17a07 --- /dev/null +++ b/miniprogram_npm/@vant/weapp/area/index.js @@ -0,0 +1,266 @@ +'use strict'; +var __assign = + (this && this.__assign) || + function () { + __assign = + Object.assign || + function (t) { + for (var s, i = 1, n = arguments.length; i < n; i++) { + s = arguments[i]; + for (var p in s) + if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p]; + } + return t; + }; + return __assign.apply(this, arguments); + }; +Object.defineProperty(exports, '__esModule', { value: true }); +var component_1 = require('../common/component'); +var shared_1 = require('../picker/shared'); +var utils_1 = require('../common/utils'); +var EMPTY_CODE = '000000'; +component_1.VantComponent({ + classes: ['active-class', 'toolbar-class', 'column-class'], + props: __assign(__assign({}, shared_1.pickerProps), { + value: { + type: String, + observer: function (value) { + this.code = value; + this.setValues(); + }, + }, + areaList: { + type: Object, + value: {}, + observer: 'setValues', + }, + columnsNum: { + type: null, + value: 3, + }, + columnsPlaceholder: { + type: Array, + observer: function (val) { + this.setData({ + typeToColumnsPlaceholder: { + province: val[0] || '', + city: val[1] || '', + county: val[2] || '', + }, + }); + }, + }, + }), + data: { + columns: [{ values: [] }, { values: [] }, { values: [] }], + typeToColumnsPlaceholder: {}, + }, + mounted: function () { + var _this = this; + utils_1.requestAnimationFrame(function () { + _this.setValues(); + }); + }, + methods: { + getPicker: function () { + if (this.picker == null) { + this.picker = this.selectComponent('.van-area__picker'); + } + return this.picker; + }, + onCancel: function (event) { + this.emit('cancel', event.detail); + }, + onConfirm: function (event) { + var index = event.detail.index; + var value = event.detail.value; + value = this.parseValues(value); + this.emit('confirm', { value: value, index: index }); + }, + emit: function (type, detail) { + detail.values = detail.value; + delete detail.value; + this.$emit(type, detail); + }, + parseValues: function (values) { + var columnsPlaceholder = this.data.columnsPlaceholder; + return values.map(function (value, index) { + if ( + value && + (!value.code || value.name === columnsPlaceholder[index]) + ) { + return __assign(__assign({}, value), { code: '', name: '' }); + } + return value; + }); + }, + onChange: function (event) { + var _this = this; + var _a; + var _b = event.detail, + index = _b.index, + picker = _b.picker, + value = _b.value; + this.code = value[index].code; + (_a = this.setValues()) === null || _a === void 0 + ? void 0 + : _a.then(function () { + _this.$emit('change', { + picker: picker, + values: _this.parseValues(picker.getValues()), + index: index, + }); + }); + }, + getConfig: function (type) { + var areaList = this.data.areaList; + return (areaList && areaList[type + '_list']) || {}; + }, + getList: function (type, code) { + if (type !== 'province' && !code) { + return []; + } + var typeToColumnsPlaceholder = this.data.typeToColumnsPlaceholder; + var list = this.getConfig(type); + var result = Object.keys(list).map(function (code) { + return { + code: code, + name: list[code], + }; + }); + if (code != null) { + // oversea code + if (code[0] === '9' && type === 'city') { + code = '9'; + } + result = result.filter(function (item) { + return item.code.indexOf(code) === 0; + }); + } + if (typeToColumnsPlaceholder[type] && result.length) { + // set columns placeholder + var 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: function (type, code) { + var compareNum = type === 'province' ? 2 : type === 'city' ? 4 : 6; + var 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 (var i = 0; i < list.length; i++) { + if (list[i].code.slice(0, compareNum) === code) { + return i; + } + } + return 0; + }, + setValues: function () { + var picker = this.getPicker(); + if (!picker) { + return; + } + var code = this.code || this.getDefaultCode(); + var provinceList = this.getList('province'); + var cityList = this.getList('city', code.slice(0, 2)); + var stack = []; + var indexes = []; + var columnsNum = this.data.columnsNum; + 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[0].code; + } + } + 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(function () {}) + .then(function () { + return picker.setIndexes(indexes); + }) + .catch(function () {}); + }, + getDefaultCode: function () { + var columnsPlaceholder = this.data.columnsPlaceholder; + if (columnsPlaceholder.length) { + return EMPTY_CODE; + } + var countyCodes = Object.keys(this.getConfig('county')); + if (countyCodes[0]) { + return countyCodes[0]; + } + var cityCodes = Object.keys(this.getConfig('city')); + if (cityCodes[0]) { + return cityCodes[0]; + } + return ''; + }, + getValues: function () { + var picker = this.getPicker(); + if (!picker) { + return []; + } + return this.parseValues( + picker.getValues().filter(function (value) { + return !!value; + }) + ); + }, + getDetail: function () { + var values = this.getValues(); + var area = { + code: '', + country: '', + province: '', + city: '', + county: '', + }; + if (!values.length) { + return area; + } + var names = values.map(function (item) { + return 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: function (code) { + this.code = code || ''; + return this.setValues(); + }, + }, +}); diff --git a/miniprogram_npm/@vant/weapp/area/index.json b/miniprogram_npm/@vant/weapp/area/index.json new file mode 100644 index 0000000..a778e91 --- /dev/null +++ b/miniprogram_npm/@vant/weapp/area/index.json @@ -0,0 +1,6 @@ +{ + "component": true, + "usingComponents": { + "van-picker": "../picker/index" + } +} diff --git a/miniprogram_npm/@vant/weapp/area/index.wxml b/miniprogram_npm/@vant/weapp/area/index.wxml new file mode 100644 index 0000000..f7dc51f --- /dev/null +++ b/miniprogram_npm/@vant/weapp/area/index.wxml @@ -0,0 +1,20 @@ + + + diff --git a/miniprogram_npm/@vant/weapp/area/index.wxs b/miniprogram_npm/@vant/weapp/area/index.wxs new file mode 100644 index 0000000..07723c1 --- /dev/null +++ b/miniprogram_npm/@vant/weapp/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/miniprogram_npm/@vant/weapp/area/index.wxss b/miniprogram_npm/@vant/weapp/area/index.wxss new file mode 100644 index 0000000..99694d6 --- /dev/null +++ b/miniprogram_npm/@vant/weapp/area/index.wxss @@ -0,0 +1 @@ +@import '../common/index.wxss'; \ No newline at end of file diff --git a/miniprogram_npm/@vant/weapp/button/index.js b/miniprogram_npm/@vant/weapp/button/index.js new file mode 100644 index 0000000..caff63c --- /dev/null +++ b/miniprogram_npm/@vant/weapp/button/index.js @@ -0,0 +1,71 @@ +'use strict'; +Object.defineProperty(exports, '__esModule', { value: true }); +var component_1 = require('../common/component'); +var button_1 = require('../mixins/button'); +var version_1 = require('../common/version'); +var mixins = [button_1.button]; +if (version_1.canIUseFormFieldButton()) { + mixins.push('wx://form-field-button'); +} +component_1.VantComponent({ + mixins: 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: function (event) { + var _this = this; + this.$emit('click', event); + var _a = this.data, + canIUseGetUserProfile = _a.canIUseGetUserProfile, + openType = _a.openType, + getUserProfileDesc = _a.getUserProfileDesc, + lang = _a.lang; + if (openType === 'getUserInfo' && canIUseGetUserProfile) { + wx.getUserProfile({ + desc: getUserProfileDesc || ' ', + lang: lang || 'en', + complete: function (userProfile) { + _this.$emit('getuserinfo', userProfile); + }, + }); + } + }, + }, +}); diff --git a/miniprogram_npm/@vant/weapp/button/index.json b/miniprogram_npm/@vant/weapp/button/index.json new file mode 100644 index 0000000..e00a588 --- /dev/null +++ b/miniprogram_npm/@vant/weapp/button/index.json @@ -0,0 +1,7 @@ +{ + "component": true, + "usingComponents": { + "van-icon": "../icon/index", + "van-loading": "../loading/index" + } +} diff --git a/miniprogram_npm/@vant/weapp/button/index.wxml b/miniprogram_npm/@vant/weapp/button/index.wxml new file mode 100644 index 0000000..8034845 --- /dev/null +++ b/miniprogram_npm/@vant/weapp/button/index.wxml @@ -0,0 +1,53 @@ + + + + diff --git a/miniprogram_npm/@vant/weapp/button/index.wxs b/miniprogram_npm/@vant/weapp/button/index.wxs new file mode 100644 index 0000000..8b649fe --- /dev/null +++ b/miniprogram_npm/@vant/weapp/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/miniprogram_npm/@vant/weapp/button/index.wxss b/miniprogram_npm/@vant/weapp/button/index.wxss new file mode 100644 index 0000000..357f27c --- /dev/null +++ b/miniprogram_npm/@vant/weapp/button/index.wxss @@ -0,0 +1 @@ +@import '../common/index.wxss';.van-button{position:relative;display:inline-flex;align-items:center;justify-content:center;box-sizing:border-box;padding:0;text-align:center;vertical-align:middle;-webkit-appearance:none;-webkit-text-size-adjust:100%;height:44px;height:var(--button-default-height,44px);line-height:20px;line-height:var(--button-line-height,20px);font-size:16px;font-size:var(--button-default-font-size,16px);transition:opacity .2s;transition:opacity var(--animation-duration-fast,.2s);border-radius:2px;border-radius:var(--button-border-radius,2px)}.van-button:before{position:absolute;top:50%;left:50%;width:100%;height:100%;border:inherit;border-radius:inherit;transform:translate(-50%,-50%);opacity:0;content:" ";background-color:#000;background-color:var(--black,#000);border-color:#000;border-color:var(--black,#000)}.van-button:after{border-width:0}.van-button--active:before{opacity:.15}.van-button--unclickable:after{display:none}.van-button--default{color:#323233;color:var(--button-default-color,#323233);background:#fff;background:var(--button-default-background-color,#fff);border:1px solid #ebedf0;border:var(--button-border-width,1px) solid var(--button-default-border-color,#ebedf0)}.van-button--primary{color:#fff;color:var(--button-primary-color,#fff);background:#07c160;background:var(--button-primary-background-color,#07c160);border:1px solid #07c160;border:var(--button-border-width,1px) solid var(--button-primary-border-color,#07c160)}.van-button--info{color:#fff;color:var(--button-info-color,#fff);background:#1989fa;background:var(--button-info-background-color,#1989fa);border:1px solid #1989fa;border:var(--button-border-width,1px) solid var(--button-info-border-color,#1989fa)}.van-button--danger{color:#fff;color:var(--button-danger-color,#fff);background:#ee0a24;background:var(--button-danger-background-color,#ee0a24);border:1px solid #ee0a24;border:var(--button-border-width,1px) solid var(--button-danger-border-color,#ee0a24)}.van-button--warning{color:#fff;color:var(--button-warning-color,#fff);background:#ff976a;background:var(--button-warning-background-color,#ff976a);border:1px solid #ff976a;border:var(--button-border-width,1px) solid var(--button-warning-border-color,#ff976a)}.van-button--plain{background:#fff;background:var(--button-plain-background-color,#fff)}.van-button--plain.van-button--primary{color:#07c160;color:var(--button-primary-background-color,#07c160)}.van-button--plain.van-button--info{color:#1989fa;color:var(--button-info-background-color,#1989fa)}.van-button--plain.van-button--danger{color:#ee0a24;color:var(--button-danger-background-color,#ee0a24)}.van-button--plain.van-button--warning{color:#ff976a;color:var(--button-warning-background-color,#ff976a)}.van-button--large{width:100%;height:50px;height:var(--button-large-height,50px)}.van-button--normal{padding:0 15px;font-size:14px;font-size:var(--button-normal-font-size,14px)}.van-button--small{min-width:60px;min-width:var(--button-small-min-width,60px);height:30px;height:var(--button-small-height,30px);padding:0 8px;padding:0 var(--padding-xs,8px);font-size:12px;font-size:var(--button-small-font-size,12px)}.van-button--mini{display:inline-block;min-width:50px;min-width:var(--button-mini-min-width,50px);height:22px;height:var(--button-mini-height,22px);font-size:10px;font-size:var(--button-mini-font-size,10px)}.van-button--mini+.van-button--mini{margin-left:5px}.van-button--block{display:flex;width:100%}.van-button--round{border-radius:999px;border-radius:var(--button-round-border-radius,999px)}.van-button--square{border-radius:0}.van-button--disabled{opacity:.5;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{min-width:1em;line-height:inherit!important;vertical-align:top}.van-button--hairline{padding-top:1px;border-width:0}.van-button--hairline:after{border-color:inherit;border-width:1px;border-radius:4px;border-radius:calc(var(--button-border-radius, 2px)*2)}.van-button--hairline.van-button--round:after{border-radius:999px;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/miniprogram_npm/@vant/weapp/calendar/calendar.wxml b/miniprogram_npm/@vant/weapp/calendar/calendar.wxml new file mode 100644 index 0000000..808f739 --- /dev/null +++ b/miniprogram_npm/@vant/weapp/calendar/calendar.wxml @@ -0,0 +1,68 @@ + +
+ +
+ + + + + + + + + + + + {{ + computed.getButtonDisabled(type, currentDate) + ? confirmDisabledText + : confirmText + }} + + +
diff --git a/miniprogram_npm/@vant/weapp/calendar/components/header/index.js b/miniprogram_npm/@vant/weapp/calendar/components/header/index.js new file mode 100644 index 0000000..08f230c --- /dev/null +++ b/miniprogram_npm/@vant/weapp/calendar/components/header/index.js @@ -0,0 +1,46 @@ +'use strict'; +var __spreadArray = + (this && this.__spreadArray) || + function (to, from) { + for (var i = 0, il = from.length, j = to.length; i < il; i++, j++) + to[j] = from[i]; + return to; + }; +Object.defineProperty(exports, '__esModule', { value: true }); +var component_1 = require('../../../common/component'); +component_1.VantComponent({ + props: { + title: { + type: String, + value: '日期选择', + }, + subtitle: String, + showTitle: Boolean, + showSubtitle: Boolean, + firstDayOfWeek: { + type: Number, + observer: 'initWeekDay', + }, + }, + data: { + weekdays: [], + }, + created: function () { + this.initWeekDay(); + }, + methods: { + initWeekDay: function () { + var defaultWeeks = ['日', '一', '二', '三', '四', '五', '六']; + var firstDayOfWeek = this.data.firstDayOfWeek || 0; + this.setData({ + weekdays: __spreadArray( + __spreadArray([], defaultWeeks.slice(firstDayOfWeek, 7)), + defaultWeeks.slice(0, firstDayOfWeek) + ), + }); + }, + onClickSubtitle: function (event) { + this.$emit('click-subtitle', event); + }, + }, +}); diff --git a/miniprogram_npm/@vant/weapp/calendar/components/header/index.json b/miniprogram_npm/@vant/weapp/calendar/components/header/index.json new file mode 100644 index 0000000..467ce29 --- /dev/null +++ b/miniprogram_npm/@vant/weapp/calendar/components/header/index.json @@ -0,0 +1,3 @@ +{ + "component": true +} diff --git a/miniprogram_npm/@vant/weapp/calendar/components/header/index.wxml b/miniprogram_npm/@vant/weapp/calendar/components/header/index.wxml new file mode 100644 index 0000000..7e56c83 --- /dev/null +++ b/miniprogram_npm/@vant/weapp/calendar/components/header/index.wxml @@ -0,0 +1,16 @@ + + + + {{ title }} + + + + {{ subtitle }} + + + + + {{ item }} + + + diff --git a/miniprogram_npm/@vant/weapp/calendar/components/header/index.wxss b/miniprogram_npm/@vant/weapp/calendar/components/header/index.wxss new file mode 100644 index 0000000..017e800 --- /dev/null +++ b/miniprogram_npm/@vant/weapp/calendar/components/header/index.wxss @@ -0,0 +1 @@ +@import '../../../common/index.wxss';.van-calendar__header{flex-shrink:0;box-shadow:0 2px 10px rgba(125,126,128,.16);box-shadow:var(--calendar-header-box-shadow,0 2px 10px rgba(125,126,128,.16))}.van-calendar__header-subtitle,.van-calendar__header-title{text-align:center;height:44px;height:var(--calendar-header-title-height,44px);font-weight:500;font-weight:var(--font-weight-bold,500);line-height:44px;line-height:var(--calendar-header-title-height,44px)}.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;text-align:center;font-size:12px;font-size:var(--calendar-weekdays-font-size,12px);line-height:30px;line-height:var(--calendar-weekdays-height,30px)} \ No newline at end of file diff --git a/miniprogram_npm/@vant/weapp/calendar/components/month/index.js b/miniprogram_npm/@vant/weapp/calendar/components/month/index.js new file mode 100644 index 0000000..1dcb49a --- /dev/null +++ b/miniprogram_npm/@vant/weapp/calendar/components/month/index.js @@ -0,0 +1,173 @@ +'use strict'; +Object.defineProperty(exports, '__esModule', { value: true }); +var component_1 = require('../../../common/component'); +var utils_1 = require('../../utils'); +component_1.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: function (event) { + var index = event.currentTarget.dataset.index; + var item = this.data.days[index]; + if (item.type !== 'disabled') { + this.$emit('click', item); + } + }, + setDays: function () { + var days = []; + var startDate = new Date(this.data.date); + var year = startDate.getFullYear(); + var month = startDate.getMonth(); + var totalDay = utils_1.getMonthEndDay( + startDate.getFullYear(), + startDate.getMonth() + 1 + ); + for (var day = 1; day <= totalDay; day++) { + var date = new Date(year, month, day); + var type = this.getDayType(date); + var config = { + date: date, + type: type, + text: day, + bottomInfo: this.getBottomInfo(type), + }; + if (this.data.formatter) { + config = this.data.formatter(config); + } + days.push(config); + } + this.setData({ days: days }); + }, + getMultipleDayType: function (day) { + var currentDate = this.data.currentDate; + if (!Array.isArray(currentDate)) { + return ''; + } + var isSelected = function (date) { + return currentDate.some(function (item) { + return utils_1.compareDay(item, date) === 0; + }); + }; + if (isSelected(day)) { + var prevDay = utils_1.getPrevDay(day); + var nextDay = utils_1.getNextDay(day); + var prevSelected = isSelected(prevDay); + var nextSelected = isSelected(nextDay); + if (prevSelected && nextSelected) { + return 'multiple-middle'; + } + if (prevSelected) { + return 'end'; + } + return nextSelected ? 'start' : 'multiple-selected'; + } + return ''; + }, + getRangeDayType: function (day) { + var _a = this.data, + currentDate = _a.currentDate, + allowSameDay = _a.allowSameDay; + if (!Array.isArray(currentDate)) { + return ''; + } + var startDay = currentDate[0], + endDay = currentDate[1]; + if (!startDay) { + return ''; + } + var compareToStart = utils_1.compareDay(day, startDay); + if (!endDay) { + return compareToStart === 0 ? 'start' : ''; + } + var compareToEnd = utils_1.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: function (day) { + var _a = this.data, + type = _a.type, + minDate = _a.minDate, + maxDate = _a.maxDate, + currentDate = _a.currentDate; + if ( + utils_1.compareDay(day, minDate) < 0 || + utils_1.compareDay(day, maxDate) > 0 + ) { + return 'disabled'; + } + if (type === 'single') { + return utils_1.compareDay(day, currentDate) === 0 ? 'selected' : ''; + } + if (type === 'multiple') { + return this.getMultipleDayType(day); + } + /* istanbul ignore else */ + if (type === 'range') { + return this.getRangeDayType(day); + } + return ''; + }, + getBottomInfo: function (type) { + if (this.data.type === 'range') { + if (type === 'start') { + return '开始'; + } + if (type === 'end') { + return '结束'; + } + if (type === 'start-end') { + return '开始/结束'; + } + } + }, + }, +}); diff --git a/miniprogram_npm/@vant/weapp/calendar/components/month/index.json b/miniprogram_npm/@vant/weapp/calendar/components/month/index.json new file mode 100644 index 0000000..467ce29 --- /dev/null +++ b/miniprogram_npm/@vant/weapp/calendar/components/month/index.json @@ -0,0 +1,3 @@ +{ + "component": true +} diff --git a/miniprogram_npm/@vant/weapp/calendar/components/month/index.wxml b/miniprogram_npm/@vant/weapp/calendar/components/month/index.wxml new file mode 100644 index 0000000..4a2c47c --- /dev/null +++ b/miniprogram_npm/@vant/weapp/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/miniprogram_npm/@vant/weapp/calendar/components/month/index.wxs b/miniprogram_npm/@vant/weapp/calendar/components/month/index.wxs new file mode 100644 index 0000000..55e45a5 --- /dev/null +++ b/miniprogram_npm/@vant/weapp/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/miniprogram_npm/@vant/weapp/calendar/components/month/index.wxss b/miniprogram_npm/@vant/weapp/calendar/components/month/index.wxss new file mode 100644 index 0000000..0a0805b --- /dev/null +++ b/miniprogram_npm/@vant/weapp/calendar/components/month/index.wxss @@ -0,0 +1 @@ +@import '../../../common/index.wxss';.van-calendar{display:flex;flex-direction:column;height:100%;background-color:#fff;background-color:var(--calendar-background-color,#fff)}.van-calendar__month-title{text-align:center;height:44px;height:var(--calendar-header-title-height,44px);font-weight:500;font-weight:var(--font-weight-bold,500);font-size:14px;font-size:var(--calendar-month-title-font-size,14px);line-height:44px;line-height:var(--calendar-header-title-height,44px)}.van-calendar__days{position:relative;display:flex;flex-wrap:wrap;-webkit-user-select:none;user-select:none}.van-calendar__month-mark{position:absolute;top:50%;left:50%;z-index:0;transform:translate(-50%,-50%);pointer-events:none;color:rgba(242,243,245,.8);color:var(--calendar-month-mark-color,rgba(242,243,245,.8));font-size:160px;font-size:var(--calendar-month-mark-font-size,160px)}.van-calendar__day,.van-calendar__selected-day{display:flex;align-items:center;justify-content:center;text-align:center}.van-calendar__day{position:relative;width:14.285%;height:64px;height:var(--calendar-day-height,64px);font-size:16px;font-size:var(--calendar-day-font-size,16px)}.van-calendar__day--end,.van-calendar__day--multiple-middle,.van-calendar__day--multiple-selected,.van-calendar__day--start,.van-calendar__day--start-end{color:#fff;color:var(--calendar-range-edge-color,#fff);background-color:#ee0a24;background-color:var(--calendar-range-edge-background-color,#ee0a24)}.van-calendar__day--start{border-radius:4px 0 0 4px;border-radius:var(--border-radius-md,4px) 0 0 var(--border-radius-md,4px)}.van-calendar__day--end{border-radius:0 4px 4px 0;border-radius:0 var(--border-radius-md,4px) var(--border-radius-md,4px) 0}.van-calendar__day--multiple-selected,.van-calendar__day--start-end{border-radius:4px;border-radius:var(--border-radius-md,4px)}.van-calendar__day--middle{color:#ee0a24;color:var(--calendar-range-middle-color,#ee0a24)}.van-calendar__day--middle:after{position:absolute;top:0;right:0;bottom:0;left:0;background-color:currentColor;content:"";opacity:.1;opacity:var(--calendar-range-middle-background-opacity,.1)}.van-calendar__day--disabled{cursor:default;color:#c8c9cc;color:var(--calendar-day-disabled-color,#c8c9cc)}.van-calendar__bottom-info,.van-calendar__top-info{position:absolute;right:0;left:0;font-size:10px;font-size:var(--calendar-info-font-size,10px);line-height:14px;line-height:var(--calendar-info-line-height,14px)}@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{width:54px;width:var(--calendar-selected-day-size,54px);height:54px;height:var(--calendar-selected-day-size,54px);color:#fff;color:var(--calendar-selected-day-color,#fff);background-color:#ee0a24;background-color:var(--calendar-selected-day-background-color,#ee0a24);border-radius:4px;border-radius:var(--border-radius-md,4px)} \ No newline at end of file diff --git a/miniprogram_npm/@vant/weapp/calendar/index.js b/miniprogram_npm/@vant/weapp/calendar/index.js new file mode 100644 index 0000000..2962b66 --- /dev/null +++ b/miniprogram_npm/@vant/weapp/calendar/index.js @@ -0,0 +1,382 @@ +'use strict'; +var __spreadArray = + (this && this.__spreadArray) || + function (to, from) { + for (var i = 0, il = from.length, j = to.length; i < il; i++, j++) + to[j] = from[i]; + return to; + }; +var __importDefault = + (this && this.__importDefault) || + function (mod) { + return mod && mod.__esModule ? mod : { default: mod }; + }; +Object.defineProperty(exports, '__esModule', { value: true }); +var component_1 = require('../common/component'); +var utils_1 = require('./utils'); +var toast_1 = __importDefault(require('../toast/toast')); +var utils_2 = require('../common/utils'); +var initialMinDate = utils_1.getToday().getTime(); +var initialMaxDate = (function () { + var now = utils_1.getToday(); + return new Date( + now.getFullYear(), + now.getMonth() + 6, + now.getDate() + ).getTime(); +})(); +component_1.VantComponent({ + props: { + title: { + type: String, + value: '日期选择', + }, + color: String, + show: { + type: Boolean, + observer: function (val) { + if (val) { + this.initRect(); + this.scrollIntoView(); + } + }, + }, + formatter: null, + confirmText: { + type: String, + value: '确定', + }, + rangePrompt: String, + showRangePrompt: { + type: Boolean, + value: true, + }, + defaultDate: { + type: null, + observer: function (val) { + this.setData({ currentDate: val }); + this.scrollIntoView(); + }, + }, + allowSameDay: Boolean, + confirmDisabledText: String, + type: { + type: String, + value: 'single', + observer: 'reset', + }, + minDate: { + type: null, + value: initialMinDate, + }, + maxDate: { + type: null, + value: initialMaxDate, + }, + position: { + type: String, + value: 'bottom', + }, + rowHeight: { + type: null, + value: utils_1.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, + }, + firstDayOfWeek: { + type: Number, + value: 0, + }, + }, + data: { + subtitle: '', + currentDate: null, + scrollIntoView: '', + }, + created: function () { + this.setData({ + currentDate: this.getInitialDate(), + }); + }, + mounted: function () { + if (this.data.show || !this.data.poppable) { + this.initRect(); + this.scrollIntoView(); + } + }, + methods: { + reset: function () { + this.setData({ currentDate: this.getInitialDate() }); + this.scrollIntoView(); + }, + initRect: function () { + var _this = this; + if (this.contentObserver != null) { + this.contentObserver.disconnect(); + } + var contentObserver = this.createIntersectionObserver({ + thresholds: [0, 0.1, 0.9, 1], + observeAll: true, + }); + this.contentObserver = contentObserver; + contentObserver.relativeTo('.van-calendar__body'); + contentObserver.observe('.month', function (res) { + if (res.boundingClientRect.top <= res.relativeRect.top) { + // @ts-ignore + _this.setData({ + subtitle: utils_1.formatMonthTitle(res.dataset.date), + }); + } + }); + }, + limitDateRange: function (date, minDate, maxDate) { + if (minDate === void 0) { + minDate = null; + } + if (maxDate === void 0) { + maxDate = null; + } + minDate = minDate || this.data.minDate; + maxDate = maxDate || this.data.maxDate; + if (utils_1.compareDay(date, minDate) === -1) { + return minDate; + } + if (utils_1.compareDay(date, maxDate) === 1) { + return maxDate; + } + return date; + }, + getInitialDate: function (defaultDate) { + var _this = this; + if (defaultDate === void 0) { + defaultDate = null; + } + var _a = this.data, + type = _a.type, + minDate = _a.minDate, + maxDate = _a.maxDate; + var now = utils_1.getToday().getTime(); + if (type === 'range') { + if (!Array.isArray(defaultDate)) { + defaultDate = []; + } + var _b = defaultDate || [], + startDay = _b[0], + endDay = _b[1]; + var start = this.limitDateRange( + startDay || now, + minDate, + utils_1.getPrevDay(maxDate).getTime() + ); + var end = this.limitDateRange( + endDay || now, + utils_1.getNextDay(minDate).getTime() + ); + return [start, end]; + } + if (type === 'multiple') { + if (Array.isArray(defaultDate)) { + return defaultDate.map(function (date) { + return _this.limitDateRange(date); + }); + } + return [this.limitDateRange(now)]; + } + if (!defaultDate || Array.isArray(defaultDate)) { + defaultDate = now; + } + return this.limitDateRange(defaultDate); + }, + scrollIntoView: function () { + var _this = this; + utils_2.requestAnimationFrame(function () { + var _a = _this.data, + currentDate = _a.currentDate, + type = _a.type, + show = _a.show, + poppable = _a.poppable, + minDate = _a.minDate, + maxDate = _a.maxDate; + // @ts-ignore + var targetDate = type === 'single' ? currentDate : currentDate[0]; + var displayed = show || !poppable; + if (!targetDate || !displayed) { + return; + } + var months = utils_1.getMonths(minDate, maxDate); + months.some(function (month, index) { + if (utils_1.compareMonth(month, targetDate) === 0) { + _this.setData({ scrollIntoView: 'month' + index }); + return true; + } + return false; + }); + }); + }, + onOpen: function () { + this.$emit('open'); + }, + onOpened: function () { + this.$emit('opened'); + }, + onClose: function () { + this.$emit('close'); + }, + onClosed: function () { + this.$emit('closed'); + }, + onClickDay: function (event) { + var date = event.detail.date; + var _a = this.data, + type = _a.type, + currentDate = _a.currentDate, + allowSameDay = _a.allowSameDay; + if (type === 'range') { + // @ts-ignore + var startDay = currentDate[0], + endDay = currentDate[1]; + if (startDay && !endDay) { + var compareToStart = utils_1.compareDay(date, startDay); + if (compareToStart === 1) { + 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') { + var selectedIndex_1; + // @ts-ignore + var selected = currentDate.some(function (dateItem, index) { + var equal = utils_1.compareDay(dateItem, date) === 0; + if (equal) { + selectedIndex_1 = index; + } + return equal; + }); + if (selected) { + // @ts-ignore + var cancelDate = currentDate.splice(selectedIndex_1, 1); + this.setData({ currentDate: currentDate }); + this.unselect(cancelDate); + } else { + // @ts-ignore + this.select(__spreadArray(__spreadArray([], currentDate), [date])); + } + } else { + this.select(date, true); + } + }, + unselect: function (dateArray) { + var date = dateArray[0]; + if (date) { + this.$emit('unselect', utils_1.copyDates(date)); + } + }, + select: function (date, complete) { + if (complete && this.data.type === 'range') { + var valid = this.checkRange(date); + if (!valid) { + // auto selected to max range if showConfirm + if (this.data.showConfirm) { + this.emit([ + date[0], + utils_1.getDayByOffset(date[0], this.data.maxRange - 1), + ]); + } else { + this.emit(date); + } + return; + } + } + this.emit(date); + if (complete && !this.data.showConfirm) { + this.onConfirm(); + } + }, + emit: function (date) { + var getTime = function (date) { + return date instanceof Date ? date.getTime() : date; + }; + this.setData({ + currentDate: Array.isArray(date) ? date.map(getTime) : getTime(date), + }); + this.$emit('select', utils_1.copyDates(date)); + }, + checkRange: function (date) { + var _a = this.data, + maxRange = _a.maxRange, + rangePrompt = _a.rangePrompt, + showRangePrompt = _a.showRangePrompt; + if (maxRange && utils_1.calcDateNum(date) > maxRange) { + if (showRangePrompt) { + toast_1.default({ + duration: 0, + context: this, + message: + rangePrompt || + '\u9009\u62E9\u5929\u6570\u4E0D\u80FD\u8D85\u8FC7 ' + + maxRange + + ' \u5929', + }); + } + this.$emit('over-range'); + return false; + } + return true; + }, + onConfirm: function () { + var _this = this; + if ( + this.data.type === 'range' && + !this.checkRange(this.data.currentDate) + ) { + return; + } + wx.nextTick(function () { + // @ts-ignore + _this.$emit('confirm', utils_1.copyDates(_this.data.currentDate)); + }); + }, + onClickSubtitle: function (event) { + this.$emit('click-subtitle', event); + }, + }, +}); diff --git a/miniprogram_npm/@vant/weapp/calendar/index.json b/miniprogram_npm/@vant/weapp/calendar/index.json new file mode 100644 index 0000000..397d5ae --- /dev/null +++ b/miniprogram_npm/@vant/weapp/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/miniprogram_npm/@vant/weapp/calendar/index.wxml b/miniprogram_npm/@vant/weapp/calendar/index.wxml new file mode 100644 index 0000000..bc8bcfd --- /dev/null +++ b/miniprogram_npm/@vant/weapp/calendar/index.wxml @@ -0,0 +1,25 @@ + + + + + + + + + + + + diff --git a/miniprogram_npm/@vant/weapp/calendar/index.wxs b/miniprogram_npm/@vant/weapp/calendar/index.wxs new file mode 100644 index 0000000..2c04be1 --- /dev/null +++ b/miniprogram_npm/@vant/weapp/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) { + if (currentDate == null) { + return true; + } + + if (type === 'range') { + return !currentDate[0] || !currentDate[1]; + } + + if (type === 'multiple') { + return !currentDate.length; + } + + return !currentDate; +} + +module.exports = { + getMonths: getMonths, + getButtonDisabled: getButtonDisabled +}; diff --git a/miniprogram_npm/@vant/weapp/calendar/index.wxss b/miniprogram_npm/@vant/weapp/calendar/index.wxss new file mode 100644 index 0000000..58bd80b --- /dev/null +++ b/miniprogram_npm/@vant/weapp/calendar/index.wxss @@ -0,0 +1 @@ +@import '../common/index.wxss';.van-calendar{display:flex;flex-direction:column;height:100%;height:var(--calendar-height,100%);background-color:#fff;background-color:var(--calendar-background-color,#fff)}.van-calendar__close-icon{top:11px}.van-calendar__popup--bottom,.van-calendar__popup--top{height:80%;height:var(--calendar-popup-height,80%)}.van-calendar__popup--left,.van-calendar__popup--right{height:100%}.van-calendar__body{flex:1;overflow:auto;-webkit-overflow-scrolling:touch}.van-calendar__footer{flex-shrink:0;padding:0 16px;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:36px!important;height:var(--calendar-confirm-button-height,36px)!important;margin:7px 0!important;margin:var(--calendar-confirm-button-margin,7px 0)!important;line-height:34px!important;line-height:var(--calendar-confirm-button-line-height,34px)!important} \ No newline at end of file diff --git a/miniprogram_npm/@vant/weapp/calendar/utils.js b/miniprogram_npm/@vant/weapp/calendar/utils.js new file mode 100644 index 0000000..37e14c2 --- /dev/null +++ b/miniprogram_npm/@vant/weapp/calendar/utils.js @@ -0,0 +1,97 @@ +'use strict'; +Object.defineProperty(exports, '__esModule', { value: true }); +exports.getMonths = exports.getMonthEndDay = exports.copyDates = exports.calcDateNum = exports.getToday = exports.getNextDay = exports.getPrevDay = exports.getDayByOffset = exports.compareDay = exports.compareMonth = exports.formatMonthTitle = exports.ROW_HEIGHT = void 0; +exports.ROW_HEIGHT = 64; +function formatMonthTitle(date) { + if (!(date instanceof Date)) { + date = new Date(date); + } + return date.getFullYear() + '\u5E74' + (date.getMonth() + 1) + '\u6708'; +} +exports.formatMonthTitle = formatMonthTitle; +function compareMonth(date1, date2) { + if (!(date1 instanceof Date)) { + date1 = new Date(date1); + } + if (!(date2 instanceof Date)) { + date2 = new Date(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; +} +exports.compareMonth = compareMonth; +function compareDay(day1, day2) { + if (!(day1 instanceof Date)) { + day1 = new Date(day1); + } + if (!(day2 instanceof Date)) { + day2 = new Date(day2); + } + var compareMonthResult = compareMonth(day1, day2); + if (compareMonthResult === 0) { + var date1 = day1.getDate(); + var date2 = day2.getDate(); + return date1 === date2 ? 0 : date1 > date2 ? 1 : -1; + } + return compareMonthResult; +} +exports.compareDay = compareDay; +function getDayByOffset(date, offset) { + date = new Date(date); + date.setDate(date.getDate() + offset); + return date; +} +exports.getDayByOffset = getDayByOffset; +function getPrevDay(date) { + return getDayByOffset(date, -1); +} +exports.getPrevDay = getPrevDay; +function getNextDay(date) { + return getDayByOffset(date, 1); +} +exports.getNextDay = getNextDay; +function getToday() { + var today = new Date(); + today.setHours(0, 0, 0, 0); + return today; +} +exports.getToday = getToday; +function calcDateNum(date) { + var day1 = new Date(date[0]).getTime(); + var day2 = new Date(date[1]).getTime(); + return (day2 - day1) / (1000 * 60 * 60 * 24) + 1; +} +exports.calcDateNum = calcDateNum; +function copyDates(dates) { + if (Array.isArray(dates)) { + return dates.map(function (date) { + if (date === null) { + return date; + } + return new Date(date); + }); + } + return new Date(dates); +} +exports.copyDates = copyDates; +function getMonthEndDay(year, month) { + return 32 - new Date(year, month - 1, 32).getDate(); +} +exports.getMonthEndDay = getMonthEndDay; +function getMonths(minDate, maxDate) { + var months = []; + var cursor = new Date(minDate); + cursor.setDate(1); + do { + months.push(cursor.getTime()); + cursor.setMonth(cursor.getMonth() + 1); + } while (compareMonth(cursor, maxDate) !== 1); + return months; +} +exports.getMonths = getMonths; diff --git a/miniprogram_npm/@vant/weapp/calendar/utils.wxs b/miniprogram_npm/@vant/weapp/calendar/utils.wxs new file mode 100644 index 0000000..e57f6b3 --- /dev/null +++ b/miniprogram_npm/@vant/weapp/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/miniprogram_npm/@vant/weapp/card/index.js b/miniprogram_npm/@vant/weapp/card/index.js new file mode 100644 index 0000000..cb0f982 --- /dev/null +++ b/miniprogram_npm/@vant/weapp/card/index.js @@ -0,0 +1,51 @@ +'use strict'; +Object.defineProperty(exports, '__esModule', { value: true }); +var link_1 = require('../mixins/link'); +var component_1 = require('../common/component'); +component_1.VantComponent({ + classes: [ + 'num-class', + 'desc-class', + 'thumb-class', + 'title-class', + 'price-class', + 'origin-price-class', + ], + mixins: [link_1.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: function () { + var price = this.data.price; + var priceArr = price.toString().split('.'); + this.setData({ + integerStr: priceArr[0], + decimalStr: priceArr[1] ? '.' + priceArr[1] : '', + }); + }, + onClickThumb: function () { + this.jumpLink('thumbLink'); + }, + }, +}); diff --git a/miniprogram_npm/@vant/weapp/card/index.json b/miniprogram_npm/@vant/weapp/card/index.json new file mode 100644 index 0000000..e917407 --- /dev/null +++ b/miniprogram_npm/@vant/weapp/card/index.json @@ -0,0 +1,6 @@ +{ + "component": true, + "usingComponents": { + "van-tag": "../tag/index" + } +} diff --git a/miniprogram_npm/@vant/weapp/card/index.wxml b/miniprogram_npm/@vant/weapp/card/index.wxml new file mode 100644 index 0000000..62173e4 --- /dev/null +++ b/miniprogram_npm/@vant/weapp/card/index.wxml @@ -0,0 +1,56 @@ + + + + + + + + + {{ tag }} + + + + + + + {{ title }} + + + {{ desc }} + + + + + + + + + {{ currency }} + {{ integerStr }} + {{ decimalStr }} + + + {{ currency }} {{ originPrice }} + + x {{ num }} + + + + + + + + + + diff --git a/miniprogram_npm/@vant/weapp/card/index.wxss b/miniprogram_npm/@vant/weapp/card/index.wxss new file mode 100644 index 0000000..14a2938 --- /dev/null +++ b/miniprogram_npm/@vant/weapp/card/index.wxss @@ -0,0 +1 @@ +@import '../common/index.wxss';.van-card{position:relative;box-sizing:border-box;padding:8px 16px;padding:var(--card-padding,8px 16px);font-size:12px;font-size:var(--card-font-size,12px);color:#323233;color:var(--card-text-color,#323233);background-color:#fafafa;background-color:var(--card-background-color,#fafafa)}.van-card__header{display:flex}.van-card__header--center{align-items:center;justify-content:center}.van-card__thumb{position:relative;flex:none;width:88px;width:var(--card-thumb-size,88px);height:88px;height:var(--card-thumb-size,88px);margin-right:8px;margin-right:var(--padding-xs,8px)}.van-card__thumb:empty{display:none}.van-card__img{width:100%;height:100%;border-radius:8px;border-radius:var(--border-radius-lg,8px)}.van-card__content{position:relative;display:flex;flex:1;flex-direction:column;justify-content:space-between;min-width:0;min-height:88px;min-height:var(--card-thumb-size,88px)}.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:16px;line-height:var(--card-title-line-height,16px)}.van-card__desc{line-height:20px;line-height:var(--card-desc-line-height,20px);color:#646566;color:var(--card-desc-color,#646566)}.van-card__bottom{line-height:20px}.van-card__price{display:inline-block;font-weight:700;color:#ee0a24;color:var(--card-price-color,#ee0a24);font-size:12px;font-size:var(--card-price-font-size,12px)}.van-card__price-integer{font-size:16px;font-size:var(--card-price-integer-font-size,16px)}.van-card__price-decimal,.van-card__price-integer{font-family:Avenir-Heavy,PingFang SC,Helvetica Neue,Arial,sans-serif;font-family:var(--card-price-font-family,Avenir-Heavy,PingFang SC,Helvetica Neue,Arial,sans-serif)}.van-card__origin-price{display:inline-block;margin-left:5px;text-decoration:line-through;font-size:10px;font-size:var(--card-origin-price-font-size,10px);color:#646566;color:var(--card-origin-price-color,#646566)}.van-card__num{float:right}.van-card__tag{position:absolute!important;top:2px;left:0}.van-card__footer{flex:none;width:100%;text-align:right} \ No newline at end of file diff --git a/miniprogram_npm/@vant/weapp/cell-group/index.js b/miniprogram_npm/@vant/weapp/cell-group/index.js new file mode 100644 index 0000000..fc0f664 --- /dev/null +++ b/miniprogram_npm/@vant/weapp/cell-group/index.js @@ -0,0 +1,13 @@ +'use strict'; +Object.defineProperty(exports, '__esModule', { value: true }); +var component_1 = require('../common/component'); +component_1.VantComponent({ + props: { + title: String, + border: { + type: Boolean, + value: true, + }, + inset: Boolean, + }, +}); diff --git a/miniprogram_npm/@vant/weapp/cell-group/index.json b/miniprogram_npm/@vant/weapp/cell-group/index.json new file mode 100644 index 0000000..467ce29 --- /dev/null +++ b/miniprogram_npm/@vant/weapp/cell-group/index.json @@ -0,0 +1,3 @@ +{ + "component": true +} diff --git a/miniprogram_npm/@vant/weapp/cell-group/index.wxml b/miniprogram_npm/@vant/weapp/cell-group/index.wxml new file mode 100644 index 0000000..311e064 --- /dev/null +++ b/miniprogram_npm/@vant/weapp/cell-group/index.wxml @@ -0,0 +1,11 @@ + + + + {{ title }} + + + + diff --git a/miniprogram_npm/@vant/weapp/cell-group/index.wxss b/miniprogram_npm/@vant/weapp/cell-group/index.wxss new file mode 100644 index 0000000..5bc5d0f --- /dev/null +++ b/miniprogram_npm/@vant/weapp/cell-group/index.wxss @@ -0,0 +1 @@ +@import '../common/index.wxss';.van-cell-group--inset{margin:0 16px;margin:var(--cell-group-inset-padding,0 16px);border-radius:8px;border-radius:var(--cell-group-inset-border-radius,8px);overflow:hidden}.van-cell-group__title{padding:16px 16px 8px;padding:var(--cell-group-title-padding,16px 16px 8px);font-size:14px;font-size:var(--cell-group-title-font-size,14px);line-height:16px;line-height:var(--cell-group-title-line-height,16px);color:#969799;color:var(--cell-group-title-color,#969799)}.van-cell-group__title--inset{padding:16px 16px 8px 32px;padding:var(--cell-group-inset-title-padding,16px 16px 8px 32px)} \ No newline at end of file diff --git a/miniprogram_npm/@vant/weapp/cell/index.js b/miniprogram_npm/@vant/weapp/cell/index.js new file mode 100644 index 0000000..7a18c9f --- /dev/null +++ b/miniprogram_npm/@vant/weapp/cell/index.js @@ -0,0 +1,40 @@ +'use strict'; +Object.defineProperty(exports, '__esModule', { value: true }); +var link_1 = require('../mixins/link'); +var component_1 = require('../common/component'); +component_1.VantComponent({ + classes: [ + 'title-class', + 'label-class', + 'value-class', + 'right-icon-class', + 'hover-class', + ], + mixins: [link_1.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: function (event) { + this.$emit('click', event.detail); + this.jumpLink(); + }, + }, +}); diff --git a/miniprogram_npm/@vant/weapp/cell/index.json b/miniprogram_npm/@vant/weapp/cell/index.json new file mode 100644 index 0000000..0a336c0 --- /dev/null +++ b/miniprogram_npm/@vant/weapp/cell/index.json @@ -0,0 +1,6 @@ +{ + "component": true, + "usingComponents": { + "van-icon": "../icon/index" + } +} diff --git a/miniprogram_npm/@vant/weapp/cell/index.wxml b/miniprogram_npm/@vant/weapp/cell/index.wxml new file mode 100644 index 0000000..8387c3c --- /dev/null +++ b/miniprogram_npm/@vant/weapp/cell/index.wxml @@ -0,0 +1,47 @@ + + + + + + + + + + {{ title }} + + + + + {{ label }} + + + + + {{ value }} + + + + + + + + diff --git a/miniprogram_npm/@vant/weapp/cell/index.wxs b/miniprogram_npm/@vant/weapp/cell/index.wxs new file mode 100644 index 0000000..e3500c4 --- /dev/null +++ b/miniprogram_npm/@vant/weapp/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/miniprogram_npm/@vant/weapp/cell/index.wxss b/miniprogram_npm/@vant/weapp/cell/index.wxss new file mode 100644 index 0000000..20f24ce --- /dev/null +++ b/miniprogram_npm/@vant/weapp/cell/index.wxss @@ -0,0 +1 @@ +@import '../common/index.wxss';.van-cell{position:relative;display:flex;box-sizing:border-box;width:100%;padding:10px 16px;padding:var(--cell-vertical-padding,10px) var(--cell-horizontal-padding,16px);font-size:14px;font-size:var(--cell-font-size,14px);line-height:24px;line-height:var(--cell-line-height,24px);color:#323233;color:var(--cell-text-color,#323233);background-color:#fff;background-color:var(--cell-background-color,#fff)}.van-cell:after{position:absolute;box-sizing:border-box;transform-origin:center;content:" ";pointer-events:none;right:16px;bottom:0;left:16px;border-bottom:1px solid #ebedf0;transform:scaleY(.5)}.van-cell--borderless:after{display:none}.van-cell-group{background-color:#fff;background-color:var(--cell-background-color,#fff)}.van-cell__label{margin-top:3px;margin-top:var(--cell-label-margin-top,3px);font-size:12px;font-size:var(--cell-label-font-size,12px);line-height:18px;line-height:var(--cell-label-line-height,18px);color:#969799;color:var(--cell-label-color,#969799)}.van-cell__value{overflow:hidden;text-align:right;vertical-align:middle;color:#969799;color:var(--cell-value-color,#969799)}.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{display:flex;align-items:center;height:24px;height:var(--cell-line-height,24px);font-size:16px;font-size:var(--cell-icon-size,16px)}.van-cell__left-icon-wrap{margin-right:4px;margin-right:var(--padding-base,4px)}.van-cell__right-icon-wrap{margin-left:4px;margin-left:var(--padding-base,4px);color:#969799;color:var(--cell-right-icon-color,#969799)}.van-cell__left-icon{vertical-align:middle}.van-cell__left-icon,.van-cell__right-icon{line-height:24px;line-height:var(--cell-line-height,24px)}.van-cell--clickable.van-cell--hover{background-color:#f2f3f5;background-color:var(--cell-active-color,#f2f3f5)}.van-cell--required{overflow:visible}.van-cell--required:before{position:absolute;content:"*";left:8px;left:var(--padding-xs,8px);font-size:14px;font-size:var(--cell-font-size,14px);color:#ee0a24;color:var(--cell-required-color,#ee0a24)}.van-cell--center{align-items:center}.van-cell--large{padding-top:12px;padding-top:var(--cell-large-vertical-padding,12px);padding-bottom:12px;padding-bottom:var(--cell-large-vertical-padding,12px)}.van-cell--large .van-cell__title{font-size:16px;font-size:var(--cell-large-title-font-size,16px)}.van-cell--large .van-cell__value{font-size:16px;font-size:var(--cell-large-value-font-size,16px)}.van-cell--large .van-cell__label{font-size:14px;font-size:var(--cell-large-label-font-size,14px)} \ No newline at end of file diff --git a/miniprogram_npm/@vant/weapp/checkbox-group/index.js b/miniprogram_npm/@vant/weapp/checkbox-group/index.js new file mode 100644 index 0000000..96aec51 --- /dev/null +++ b/miniprogram_npm/@vant/weapp/checkbox-group/index.js @@ -0,0 +1,44 @@ +'use strict'; +Object.defineProperty(exports, '__esModule', { value: true }); +var relation_1 = require('../common/relation'); +var component_1 = require('../common/component'); +component_1.VantComponent({ + field: true, + relation: relation_1.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: function () { + var _this = this; + this.children.forEach(function (child) { + return _this.updateChild(child); + }); + }, + updateChild: function (child) { + var _a = this.data, + value = _a.value, + disabled = _a.disabled, + direction = _a.direction; + child.setData({ + value: value.indexOf(child.data.name) !== -1, + parentDisabled: disabled, + direction: direction, + }); + }, + }, +}); diff --git a/miniprogram_npm/@vant/weapp/checkbox-group/index.json b/miniprogram_npm/@vant/weapp/checkbox-group/index.json new file mode 100644 index 0000000..467ce29 --- /dev/null +++ b/miniprogram_npm/@vant/weapp/checkbox-group/index.json @@ -0,0 +1,3 @@ +{ + "component": true +} diff --git a/miniprogram_npm/@vant/weapp/checkbox-group/index.wxml b/miniprogram_npm/@vant/weapp/checkbox-group/index.wxml new file mode 100644 index 0000000..638bf9d --- /dev/null +++ b/miniprogram_npm/@vant/weapp/checkbox-group/index.wxml @@ -0,0 +1,5 @@ + + + + + diff --git a/miniprogram_npm/@vant/weapp/checkbox-group/index.wxss b/miniprogram_npm/@vant/weapp/checkbox-group/index.wxss new file mode 100644 index 0000000..c5666d7 --- /dev/null +++ b/miniprogram_npm/@vant/weapp/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/miniprogram_npm/@vant/weapp/checkbox/index.js b/miniprogram_npm/@vant/weapp/checkbox/index.js new file mode 100644 index 0000000..c607f29 --- /dev/null +++ b/miniprogram_npm/@vant/weapp/checkbox/index.js @@ -0,0 +1,84 @@ +'use strict'; +Object.defineProperty(exports, '__esModule', { value: true }); +var relation_1 = require('../common/relation'); +var component_1 = require('../common/component'); +function emit(target, value) { + target.$emit('input', value); + target.$emit('change', value); +} +component_1.VantComponent({ + field: true, + relation: relation_1.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: function (value) { + if (this.parent) { + this.setParentValue(this.parent, value); + } else { + emit(this, value); + } + }, + toggle: function () { + var _a = this.data, + parentDisabled = _a.parentDisabled, + disabled = _a.disabled, + value = _a.value; + if (!disabled && !parentDisabled) { + this.emitChange(!value); + } + }, + onClickLabel: function () { + var _a = this.data, + labelDisabled = _a.labelDisabled, + parentDisabled = _a.parentDisabled, + disabled = _a.disabled, + value = _a.value; + if (!disabled && !labelDisabled && !parentDisabled) { + this.emitChange(!value); + } + }, + setParentValue: function (parent, value) { + var parentValue = parent.data.value.slice(); + var name = this.data.name; + var max = parent.data.max; + if (value) { + if (max && parentValue.length >= max) { + return; + } + if (parentValue.indexOf(name) === -1) { + parentValue.push(name); + emit(parent, parentValue); + } + } else { + var index = parentValue.indexOf(name); + if (index !== -1) { + parentValue.splice(index, 1); + emit(parent, parentValue); + } + } + }, + }, +}); diff --git a/miniprogram_npm/@vant/weapp/checkbox/index.json b/miniprogram_npm/@vant/weapp/checkbox/index.json new file mode 100644 index 0000000..0a336c0 --- /dev/null +++ b/miniprogram_npm/@vant/weapp/checkbox/index.json @@ -0,0 +1,6 @@ +{ + "component": true, + "usingComponents": { + "van-icon": "../icon/index" + } +} diff --git a/miniprogram_npm/@vant/weapp/checkbox/index.wxml b/miniprogram_npm/@vant/weapp/checkbox/index.wxml new file mode 100644 index 0000000..39a7bb0 --- /dev/null +++ b/miniprogram_npm/@vant/weapp/checkbox/index.wxml @@ -0,0 +1,31 @@ + + + + + + + + + + + + + + + diff --git a/miniprogram_npm/@vant/weapp/checkbox/index.wxs b/miniprogram_npm/@vant/weapp/checkbox/index.wxs new file mode 100644 index 0000000..eb9c772 --- /dev/null +++ b/miniprogram_npm/@vant/weapp/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/miniprogram_npm/@vant/weapp/checkbox/index.wxss b/miniprogram_npm/@vant/weapp/checkbox/index.wxss new file mode 100644 index 0000000..62f37d4 --- /dev/null +++ b/miniprogram_npm/@vant/weapp/checkbox/index.wxss @@ -0,0 +1 @@ +@import '../common/index.wxss';.van-checkbox{display:flex;align-items:center;overflow:hidden;-webkit-user-select:none;user-select:none}.van-checkbox--horizontal{margin-right:12px}.van-checkbox__icon-wrap,.van-checkbox__label{line-height:20px;line-height:var(--checkbox-size,20px)}.van-checkbox__icon-wrap{flex:none}.van-checkbox__icon{display:flex;align-items:center;justify-content:center;box-sizing:border-box;width:1em;height:1em;color:transparent;text-align:center;transition-property:color,border-color,background-color;font-size:20px;font-size:var(--checkbox-size,20px);border:1px solid #c8c9cc;border:1px solid var(--checkbox-border-color,#c8c9cc);transition-duration:.2s;transition-duration:var(--checkbox-transition-duration,.2s)}.van-checkbox__icon--round{border-radius:100%}.van-checkbox__icon--checked{color:#fff;color:var(--white,#fff);background-color:#1989fa;background-color:var(--checkbox-checked-icon-color,#1989fa);border-color:#1989fa;border-color:var(--checkbox-checked-icon-color,#1989fa)}.van-checkbox__icon--disabled{background-color:#ebedf0;background-color:var(--checkbox-disabled-background-color,#ebedf0);border-color:#c8c9cc;border-color:var(--checkbox-disabled-icon-color,#c8c9cc)}.van-checkbox__icon--disabled.van-checkbox__icon--checked{color:#c8c9cc;color:var(--checkbox-disabled-icon-color,#c8c9cc)}.van-checkbox__label{word-wrap:break-word;margin-left:10px;margin-left:var(--checkbox-label-margin,10px);color:#323233;color:var(--checkbox-label-color,#323233)}.van-checkbox__label--left{float:left;margin:0 10px 0 0;margin:0 var(--checkbox-label-margin,10px) 0 0}.van-checkbox__label--disabled{color:#c8c9cc;color:var(--checkbox-disabled-label-color,#c8c9cc)}.van-checkbox__label:empty{margin:0} \ No newline at end of file diff --git a/miniprogram_npm/@vant/weapp/circle/canvas.js b/miniprogram_npm/@vant/weapp/circle/canvas.js new file mode 100644 index 0000000..dbee1d7 --- /dev/null +++ b/miniprogram_npm/@vant/weapp/circle/canvas.js @@ -0,0 +1,47 @@ +'use strict'; +Object.defineProperty(exports, '__esModule', { value: true }); +exports.adaptor = void 0; +function adaptor(ctx) { + // @ts-ignore + return Object.assign(ctx, { + setStrokeStyle: function (val) { + ctx.strokeStyle = val; + }, + setLineWidth: function (val) { + ctx.lineWidth = val; + }, + setLineCap: function (val) { + ctx.lineCap = val; + }, + setFillStyle: function (val) { + ctx.fillStyle = val; + }, + setFontSize: function (val) { + ctx.font = String(val); + }, + setGlobalAlpha: function (val) { + ctx.globalAlpha = val; + }, + setLineJoin: function (val) { + ctx.lineJoin = val; + }, + setTextAlign: function (val) { + ctx.textAlign = val; + }, + setMiterLimit: function (val) { + ctx.miterLimit = val; + }, + setShadow: function (offsetX, offsetY, blur, color) { + ctx.shadowOffsetX = offsetX; + ctx.shadowOffsetY = offsetY; + ctx.shadowBlur = blur; + ctx.shadowColor = color; + }, + setTextBaseline: function (val) { + ctx.textBaseline = val; + }, + createCircularGradient: function () {}, + draw: function () {}, + }); +} +exports.adaptor = adaptor; diff --git a/miniprogram_npm/@vant/weapp/circle/index.js b/miniprogram_npm/@vant/weapp/circle/index.js new file mode 100644 index 0000000..416c0bd --- /dev/null +++ b/miniprogram_npm/@vant/weapp/circle/index.js @@ -0,0 +1,217 @@ +'use strict'; +Object.defineProperty(exports, '__esModule', { value: true }); +var color_1 = require('../common/color'); +var component_1 = require('../common/component'); +var utils_1 = require('../common/utils'); +var validator_1 = require('../common/validator'); +var version_1 = require('../common/version'); +var canvas_1 = require('./canvas'); +function format(rate) { + return Math.min(Math.max(rate, 0), 100); +} +var PERIMETER = 2 * Math.PI; +var BEGIN_ANGLE = -Math.PI / 2; +var STEP = 1; +component_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: function () { + this.drawCircle(this.currentValue); + }, + }, + fill: String, + layerColor: { + type: String, + value: color_1.WHITE, + }, + color: { + type: null, + value: color_1.BLUE, + observer: function () { + var _this = this; + this.setHoverColor().then(function () { + _this.drawCircle(_this.currentValue); + }); + }, + }, + type: { + type: String, + value: '', + }, + strokeWidth: { + type: Number, + value: 4, + }, + clockwise: { + type: Boolean, + value: true, + }, + }, + data: { + hoverColor: color_1.BLUE, + }, + methods: { + getContext: function () { + var _this = this; + var _a = this.data, + type = _a.type, + size = _a.size; + if (type === '' || !version_1.canIUseCanvas2d()) { + var ctx = wx.createCanvasContext('van-circle', this); + return Promise.resolve(ctx); + } + var dpr = utils_1.getSystemInfoSync().pixelRatio; + return new Promise(function (resolve) { + wx.createSelectorQuery() + .in(_this) + .select('#van-circle') + .node() + .exec(function (res) { + var canvas = res[0].node; + var ctx = canvas.getContext(type); + if (!_this.inited) { + _this.inited = true; + canvas.width = size * dpr; + canvas.height = size * dpr; + ctx.scale(dpr, dpr); + } + resolve(canvas_1.adaptor(ctx)); + }); + }); + }, + setHoverColor: function () { + var _this = this; + var _a = this.data, + color = _a.color, + size = _a.size; + if (validator_1.isObj(color)) { + return this.getContext().then(function (context) { + var LinearColor = context.createLinearGradient(size, 0, 0, 0); + Object.keys(color) + .sort(function (a, b) { + return parseFloat(a) - parseFloat(b); + }) + .map(function (key) { + return LinearColor.addColorStop( + parseFloat(key) / 100, + color[key] + ); + }); + _this.hoverColor = LinearColor; + }); + } + this.hoverColor = color; + return Promise.resolve(); + }, + presetCanvas: function (context, strokeStyle, beginAngle, endAngle, fill) { + var _a = this.data, + strokeWidth = _a.strokeWidth, + lineCap = _a.lineCap, + clockwise = _a.clockwise, + size = _a.size; + var position = size / 2; + var 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: function (context) { + var _a = this.data, + layerColor = _a.layerColor, + fill = _a.fill; + this.presetCanvas(context, layerColor, 0, PERIMETER, fill); + }, + renderHoverCircle: function (context, formatValue) { + var clockwise = this.data.clockwise; + // 结束角度 + var progress = PERIMETER * (formatValue / 100); + var endAngle = clockwise + ? BEGIN_ANGLE + progress + : 3 * Math.PI - (BEGIN_ANGLE + progress); + this.presetCanvas(context, this.hoverColor, BEGIN_ANGLE, endAngle); + }, + drawCircle: function (currentValue) { + var _this = this; + var size = this.data.size; + this.getContext().then(function (context) { + context.clearRect(0, 0, size, size); + _this.renderLayerCircle(context); + var formatValue = format(currentValue); + if (formatValue !== 0) { + _this.renderHoverCircle(context, formatValue); + } + context.draw(); + }); + }, + reRender: function () { + var _this = this; + // tofector 动画暂时没有想到好的解决方案 + var _a = this.data, + value = _a.value, + speed = _a.speed; + if (speed <= 0 || speed > 1000) { + this.drawCircle(value); + return; + } + this.clearMockInterval(); + this.currentValue = this.currentValue || 0; + var run = function () { + _this.interval = setTimeout(function () { + 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: function () { + if (this.interval) { + clearTimeout(this.interval); + this.interval = null; + } + }, + }, + mounted: function () { + var _this = this; + this.currentValue = this.data.value; + this.setHoverColor().then(function () { + _this.drawCircle(_this.currentValue); + }); + }, + destroyed: function () { + this.clearMockInterval(); + }, +}); diff --git a/miniprogram_npm/@vant/weapp/circle/index.json b/miniprogram_npm/@vant/weapp/circle/index.json new file mode 100644 index 0000000..467ce29 --- /dev/null +++ b/miniprogram_npm/@vant/weapp/circle/index.json @@ -0,0 +1,3 @@ +{ + "component": true +} diff --git a/miniprogram_npm/@vant/weapp/circle/index.wxml b/miniprogram_npm/@vant/weapp/circle/index.wxml new file mode 100644 index 0000000..52bc59f --- /dev/null +++ b/miniprogram_npm/@vant/weapp/circle/index.wxml @@ -0,0 +1,9 @@ + + + + + + + + {{ text }} + diff --git a/miniprogram_npm/@vant/weapp/circle/index.wxss b/miniprogram_npm/@vant/weapp/circle/index.wxss new file mode 100644 index 0000000..5b5ad00 --- /dev/null +++ b/miniprogram_npm/@vant/weapp/circle/index.wxss @@ -0,0 +1 @@ +@import '../common/index.wxss';.van-circle{position:relative;display:inline-block;text-align:center}.van-circle__text{position:absolute;top:50%;left:0;width:100%;transform:translateY(-50%);color:#323233;color:var(--circle-text-color,#323233)} \ No newline at end of file diff --git a/miniprogram_npm/@vant/weapp/col/index.js b/miniprogram_npm/@vant/weapp/col/index.js new file mode 100644 index 0000000..a33c44b --- /dev/null +++ b/miniprogram_npm/@vant/weapp/col/index.js @@ -0,0 +1,11 @@ +'use strict'; +Object.defineProperty(exports, '__esModule', { value: true }); +var relation_1 = require('../common/relation'); +var component_1 = require('../common/component'); +component_1.VantComponent({ + relation: relation_1.useParent('row'), + props: { + span: Number, + offset: Number, + }, +}); diff --git a/miniprogram_npm/@vant/weapp/col/index.json b/miniprogram_npm/@vant/weapp/col/index.json new file mode 100644 index 0000000..467ce29 --- /dev/null +++ b/miniprogram_npm/@vant/weapp/col/index.json @@ -0,0 +1,3 @@ +{ + "component": true +} diff --git a/miniprogram_npm/@vant/weapp/col/index.wxml b/miniprogram_npm/@vant/weapp/col/index.wxml new file mode 100644 index 0000000..975348b --- /dev/null +++ b/miniprogram_npm/@vant/weapp/col/index.wxml @@ -0,0 +1,9 @@ + + + + + + diff --git a/miniprogram_npm/@vant/weapp/col/index.wxs b/miniprogram_npm/@vant/weapp/col/index.wxs new file mode 100644 index 0000000..507c1cb --- /dev/null +++ b/miniprogram_npm/@vant/weapp/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/miniprogram_npm/@vant/weapp/col/index.wxss b/miniprogram_npm/@vant/weapp/col/index.wxss new file mode 100644 index 0000000..44c896a --- /dev/null +++ b/miniprogram_npm/@vant/weapp/col/index.wxss @@ -0,0 +1 @@ +@import '../common/index.wxss';.van-col{float:left;box-sizing:border-box}.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/miniprogram_npm/@vant/weapp/collapse-item/animate.js b/miniprogram_npm/@vant/weapp/collapse-item/animate.js new file mode 100644 index 0000000..4317383 --- /dev/null +++ b/miniprogram_npm/@vant/weapp/collapse-item/animate.js @@ -0,0 +1,77 @@ +'use strict'; +Object.defineProperty(exports, '__esModule', { value: true }); +exports.setContentAnimate = void 0; +var version_1 = require('../common/version'); +var utils_1 = require('../common/utils'); +function useAnimate(context, expanded, mounted, height) { + var selector = '.van-collapse-item__wrapper'; + if (expanded) { + context.animate( + selector, + [ + { height: 0, ease: 'ease-in-out', offset: 0 }, + { height: height + 'px', ease: 'ease-in-out', offset: 1 }, + { height: 'auto', ease: 'ease-in-out', offset: 1 }, + ], + mounted ? 300 : 0, + function () { + context.clearAnimation(selector); + } + ); + return; + } + context.animate( + selector, + [ + { height: height + 'px', ease: 'ease-in-out', offset: 0 }, + { height: 0, ease: 'ease-in-out', offset: 1 }, + ], + 300, + function () { + context.clearAnimation(selector); + } + ); +} +function useAnimation(context, expanded, mounted, height) { + var 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(), + }); +} +function setContentAnimate(context, expanded, mounted) { + utils_1 + .getRect(context, '.van-collapse-item__content') + .then(function (rect) { + return rect.height; + }) + .then(function (height) { + version_1.canIUseAnimate() + ? useAnimate(context, expanded, mounted, height) + : useAnimation(context, expanded, mounted, height); + }); +} +exports.setContentAnimate = setContentAnimate; diff --git a/miniprogram_npm/@vant/weapp/collapse-item/index.js b/miniprogram_npm/@vant/weapp/collapse-item/index.js new file mode 100644 index 0000000..b30315c --- /dev/null +++ b/miniprogram_npm/@vant/weapp/collapse-item/index.js @@ -0,0 +1,68 @@ +'use strict'; +Object.defineProperty(exports, '__esModule', { value: true }); +var component_1 = require('../common/component'); +var relation_1 = require('../common/relation'); +var animate_1 = require('./animate'); +component_1.VantComponent({ + classes: ['title-class', 'content-class'], + relation: relation_1.useParent('collapse'), + props: { + 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: function () { + this.updateExpanded(); + this.mounted = true; + }, + methods: { + updateExpanded: function () { + if (!this.parent) { + return; + } + var _a = this.parent.data, + value = _a.value, + accordion = _a.accordion; + var _b = this.parent.children, + children = _b === void 0 ? [] : _b; + var name = this.data.name; + var index = children.indexOf(this); + var currentName = name == null ? index : name; + var expanded = accordion + ? value === currentName + : (value || []).some(function (name) { + return name === currentName; + }); + if (expanded !== this.data.expanded) { + animate_1.setContentAnimate(this, expanded, this.mounted); + } + this.setData({ index: index, expanded: expanded }); + }, + onClick: function () { + if (this.data.disabled) { + return; + } + var _a = this.data, + name = _a.name, + expanded = _a.expanded; + var index = this.parent.children.indexOf(this); + var currentName = name == null ? index : name; + this.parent.switch(currentName, !expanded); + }, + }, +}); diff --git a/miniprogram_npm/@vant/weapp/collapse-item/index.json b/miniprogram_npm/@vant/weapp/collapse-item/index.json new file mode 100644 index 0000000..0e5425c --- /dev/null +++ b/miniprogram_npm/@vant/weapp/collapse-item/index.json @@ -0,0 +1,6 @@ +{ + "component": true, + "usingComponents": { + "van-cell": "../cell/index" + } +} diff --git a/miniprogram_npm/@vant/weapp/collapse-item/index.wxml b/miniprogram_npm/@vant/weapp/collapse-item/index.wxml new file mode 100644 index 0000000..ae4cc83 --- /dev/null +++ b/miniprogram_npm/@vant/weapp/collapse-item/index.wxml @@ -0,0 +1,44 @@ + + + + + + + + + + + + + + + diff --git a/miniprogram_npm/@vant/weapp/collapse-item/index.wxss b/miniprogram_npm/@vant/weapp/collapse-item/index.wxss new file mode 100644 index 0000000..ef91986 --- /dev/null +++ b/miniprogram_npm/@vant/weapp/collapse-item/index.wxss @@ -0,0 +1 @@ +@import '../common/index.wxss';.van-collapse-item__title .van-cell__right-icon{transform:rotate(90deg);transition:transform .3s;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:#c8c9cc!important;color:var(--collapse-item-title-disabled-color,#c8c9cc)!important}.van-collapse-item__title--disabled .van-cell--hover{background-color:#fff!important;background-color:var(--white,#fff)!important}.van-collapse-item__wrapper{overflow:hidden}.van-collapse-item__content{padding:15px;padding:var(--collapse-item-content-padding,15px);color:#969799;color:var(--collapse-item-content-text-color,#969799);font-size:13px;font-size:var(--collapse-item-content-font-size,13px);line-height:1.5;line-height:var(--collapse-item-content-line-height,1.5);background-color:#fff;background-color:var(--collapse-item-content-background-color,#fff)} \ No newline at end of file diff --git a/miniprogram_npm/@vant/weapp/collapse/index.js b/miniprogram_npm/@vant/weapp/collapse/index.js new file mode 100644 index 0000000..4e2c097 --- /dev/null +++ b/miniprogram_npm/@vant/weapp/collapse/index.js @@ -0,0 +1,50 @@ +'use strict'; +Object.defineProperty(exports, '__esModule', { value: true }); +var component_1 = require('../common/component'); +var relation_1 = require('../common/relation'); +component_1.VantComponent({ + relation: relation_1.useChildren('collapse-item'), + props: { + value: { + type: null, + observer: 'updateExpanded', + }, + accordion: { + type: Boolean, + observer: 'updateExpanded', + }, + border: { + type: Boolean, + value: true, + }, + }, + methods: { + updateExpanded: function () { + this.children.forEach(function (child) { + child.updateExpanded(); + }); + }, + switch: function (name, expanded) { + var _a = this.data, + accordion = _a.accordion, + value = _a.value; + var changeItem = name; + if (!accordion) { + name = expanded + ? (value || []).concat(name) + : (value || []).filter(function (activeName) { + return 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/miniprogram_npm/@vant/weapp/collapse/index.json b/miniprogram_npm/@vant/weapp/collapse/index.json new file mode 100644 index 0000000..467ce29 --- /dev/null +++ b/miniprogram_npm/@vant/weapp/collapse/index.json @@ -0,0 +1,3 @@ +{ + "component": true +} diff --git a/miniprogram_npm/@vant/weapp/collapse/index.wxml b/miniprogram_npm/@vant/weapp/collapse/index.wxml new file mode 100644 index 0000000..fd4e171 --- /dev/null +++ b/miniprogram_npm/@vant/weapp/collapse/index.wxml @@ -0,0 +1,3 @@ + + + diff --git a/miniprogram_npm/@vant/weapp/collapse/index.wxss b/miniprogram_npm/@vant/weapp/collapse/index.wxss new file mode 100644 index 0000000..99694d6 --- /dev/null +++ b/miniprogram_npm/@vant/weapp/collapse/index.wxss @@ -0,0 +1 @@ +@import '../common/index.wxss'; \ No newline at end of file diff --git a/miniprogram_npm/@vant/weapp/common/color.js b/miniprogram_npm/@vant/weapp/common/color.js new file mode 100644 index 0000000..885acaa --- /dev/null +++ b/miniprogram_npm/@vant/weapp/common/color.js @@ -0,0 +1,10 @@ +'use strict'; +Object.defineProperty(exports, '__esModule', { value: true }); +exports.GRAY_DARK = exports.GRAY = exports.ORANGE = exports.GREEN = exports.WHITE = exports.BLUE = exports.RED = void 0; +exports.RED = '#ee0a24'; +exports.BLUE = '#1989fa'; +exports.WHITE = '#fff'; +exports.GREEN = '#07c160'; +exports.ORANGE = '#ff976a'; +exports.GRAY = '#323233'; +exports.GRAY_DARK = '#969799'; diff --git a/miniprogram_npm/@vant/weapp/common/component.js b/miniprogram_npm/@vant/weapp/common/component.js new file mode 100644 index 0000000..2274506 --- /dev/null +++ b/miniprogram_npm/@vant/weapp/common/component.js @@ -0,0 +1,48 @@ +'use strict'; +Object.defineProperty(exports, '__esModule', { value: true }); +exports.VantComponent = void 0; +var basic_1 = require('../mixins/basic'); +function mapKeys(source, target, map) { + Object.keys(map).forEach(function (key) { + if (source[key]) { + target[map[key]] = source[key]; + } + }); +} +function VantComponent(vantOptions) { + var options = {}; + mapKeys(vantOptions, options, { + data: 'data', + props: 'properties', + 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_1.basic); + // add relations + var relation = vantOptions.relation; + 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); +} +exports.VantComponent = VantComponent; diff --git a/miniprogram_npm/@vant/weapp/common/index.wxss b/miniprogram_npm/@vant/weapp/common/index.wxss new file mode 100644 index 0000000..7a896a6 --- /dev/null +++ b/miniprogram_npm/@vant/weapp/common/index.wxss @@ -0,0 +1 @@ +.van-ellipsis{overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.van-multi-ellipsis--l2{-webkit-line-clamp:2}.van-multi-ellipsis--l2,.van-multi-ellipsis--l3{display:-webkit-box;overflow:hidden;text-overflow:ellipsis;-webkit-box-orient:vertical}.van-multi-ellipsis--l3{-webkit-line-clamp:3}.van-clearfix:after{display:table;clear:both;content:""}.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{position:absolute;box-sizing:border-box;transform-origin:center;content:" ";pointer-events:none;top:-50%;right:-50%;bottom:-50%;left:-50%;border:0 solid #ebedf0;transform:scale(.5)}.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/miniprogram_npm/@vant/weapp/common/relation.js b/miniprogram_npm/@vant/weapp/common/relation.js new file mode 100644 index 0000000..fcf9824 --- /dev/null +++ b/miniprogram_npm/@vant/weapp/common/relation.js @@ -0,0 +1,79 @@ +'use strict'; +Object.defineProperty(exports, '__esModule', { value: true }); +exports.useChildren = exports.useParent = void 0; +function useParent(name, onEffect) { + var _a; + var path = '../' + name + '/index'; + return { + relations: + ((_a = {}), + (_a[path] = { + type: 'ancestor', + linked: function () { + onEffect && onEffect.call(this); + }, + linkChanged: function () { + onEffect && onEffect.call(this); + }, + unlinked: function () { + onEffect && onEffect.call(this); + }, + }), + _a), + mixin: Behavior({ + created: function () { + var _this = this; + Object.defineProperty(this, 'parent', { + get: function () { + return _this.getRelationNodes(path)[0]; + }, + }); + Object.defineProperty(this, 'index', { + // @ts-ignore + get: function () { + 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); + }, + }); + }, + }), + }; +} +exports.useParent = useParent; +function useChildren(name, onEffect) { + var _a; + var path = '../' + name + '/index'; + return { + relations: + ((_a = {}), + (_a[path] = { + type: 'descendant', + linked: function (target) { + onEffect && onEffect.call(this, target); + }, + linkChanged: function (target) { + onEffect && onEffect.call(this, target); + }, + unlinked: function (target) { + onEffect && onEffect.call(this, target); + }, + }), + _a), + mixin: Behavior({ + created: function () { + var _this = this; + Object.defineProperty(this, 'children', { + get: function () { + return _this.getRelationNodes(path) || []; + }, + }); + }, + }), + }; +} +exports.useChildren = useChildren; diff --git a/miniprogram_npm/@vant/weapp/common/style/clearfix.wxss b/miniprogram_npm/@vant/weapp/common/style/clearfix.wxss new file mode 100644 index 0000000..a0ca838 --- /dev/null +++ b/miniprogram_npm/@vant/weapp/common/style/clearfix.wxss @@ -0,0 +1 @@ +.van-clearfix:after{display:table;clear:both;content:""} \ No newline at end of file diff --git a/miniprogram_npm/@vant/weapp/common/style/ellipsis.wxss b/miniprogram_npm/@vant/weapp/common/style/ellipsis.wxss new file mode 100644 index 0000000..1e9dbc9 --- /dev/null +++ b/miniprogram_npm/@vant/weapp/common/style/ellipsis.wxss @@ -0,0 +1 @@ +.van-ellipsis{overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.van-multi-ellipsis--l2{-webkit-line-clamp:2}.van-multi-ellipsis--l2,.van-multi-ellipsis--l3{display:-webkit-box;overflow:hidden;text-overflow:ellipsis;-webkit-box-orient:vertical}.van-multi-ellipsis--l3{-webkit-line-clamp:3} \ No newline at end of file diff --git a/miniprogram_npm/@vant/weapp/common/style/hairline.wxss b/miniprogram_npm/@vant/weapp/common/style/hairline.wxss new file mode 100644 index 0000000..cebc4aa --- /dev/null +++ b/miniprogram_npm/@vant/weapp/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{position:absolute;box-sizing:border-box;transform-origin:center;content:" ";pointer-events:none;top:-50%;right:-50%;bottom:-50%;left:-50%;border:0 solid #ebedf0;transform:scale(.5)}.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/miniprogram_npm/@vant/weapp/common/style/mixins/clearfix.wxss b/miniprogram_npm/@vant/weapp/common/style/mixins/clearfix.wxss new file mode 100644 index 0000000..e69de29 diff --git a/miniprogram_npm/@vant/weapp/common/style/mixins/ellipsis.wxss b/miniprogram_npm/@vant/weapp/common/style/mixins/ellipsis.wxss new file mode 100644 index 0000000..e69de29 diff --git a/miniprogram_npm/@vant/weapp/common/style/mixins/hairline.wxss b/miniprogram_npm/@vant/weapp/common/style/mixins/hairline.wxss new file mode 100644 index 0000000..e69de29 diff --git a/miniprogram_npm/@vant/weapp/common/style/theme.wxss b/miniprogram_npm/@vant/weapp/common/style/theme.wxss new file mode 100644 index 0000000..e69de29 diff --git a/miniprogram_npm/@vant/weapp/common/style/var.wxss b/miniprogram_npm/@vant/weapp/common/style/var.wxss new file mode 100644 index 0000000..e69de29 diff --git a/miniprogram_npm/@vant/weapp/common/utils.js b/miniprogram_npm/@vant/weapp/common/utils.js new file mode 100644 index 0000000..e37fb2e --- /dev/null +++ b/miniprogram_npm/@vant/weapp/common/utils.js @@ -0,0 +1,120 @@ +'use strict'; +Object.defineProperty(exports, '__esModule', { value: true }); +exports.getCurrentPage = exports.toPromise = exports.groupSetData = exports.getAllRect = exports.getRect = exports.pickExclude = exports.requestAnimationFrame = exports.addUnit = exports.getSystemInfoSync = exports.nextTick = exports.range = exports.isDef = void 0; +var validator_1 = require('./validator'); +var version_1 = require('./version'); +var validator_2 = require('./validator'); +Object.defineProperty(exports, 'isDef', { + enumerable: true, + get: function () { + return validator_2.isDef; + }, +}); +function range(num, min, max) { + return Math.min(Math.max(num, min), max); +} +exports.range = range; +function nextTick(cb) { + if (version_1.canIUseNextTick()) { + wx.nextTick(cb); + } else { + setTimeout(function () { + cb(); + }, 1000 / 30); + } +} +exports.nextTick = nextTick; +var systemInfo; +function getSystemInfoSync() { + if (systemInfo == null) { + systemInfo = wx.getSystemInfoSync(); + } + return systemInfo; +} +exports.getSystemInfoSync = getSystemInfoSync; +function addUnit(value) { + if (!validator_1.isDef(value)) { + return undefined; + } + value = String(value); + return validator_1.isNumber(value) ? value + 'px' : value; +} +exports.addUnit = addUnit; +function requestAnimationFrame(cb) { + var systemInfo = getSystemInfoSync(); + if (systemInfo.platform === 'devtools') { + return setTimeout(function () { + cb(); + }, 1000 / 30); + } + return wx + .createSelectorQuery() + .selectViewport() + .boundingClientRect() + .exec(function () { + cb(); + }); +} +exports.requestAnimationFrame = requestAnimationFrame; +function pickExclude(obj, keys) { + if (!validator_1.isPlainObject(obj)) { + return {}; + } + return Object.keys(obj).reduce(function (prev, key) { + if (!keys.includes(key)) { + prev[key] = obj[key]; + } + return prev; + }, {}); +} +exports.pickExclude = pickExclude; +function getRect(context, selector) { + return new Promise(function (resolve) { + wx.createSelectorQuery() + .in(context) + .select(selector) + .boundingClientRect() + .exec(function (rect) { + if (rect === void 0) { + rect = []; + } + return resolve(rect[0]); + }); + }); +} +exports.getRect = getRect; +function getAllRect(context, selector) { + return new Promise(function (resolve) { + wx.createSelectorQuery() + .in(context) + .selectAll(selector) + .boundingClientRect() + .exec(function (rect) { + if (rect === void 0) { + rect = []; + } + return resolve(rect[0]); + }); + }); +} +exports.getAllRect = getAllRect; +function groupSetData(context, cb) { + if (version_1.canIUseGroupSetData()) { + context.groupSetData(cb); + } else { + cb(); + } +} +exports.groupSetData = groupSetData; +function toPromise(promiseLike) { + if (validator_1.isPromise(promiseLike)) { + return promiseLike; + } + return Promise.resolve(promiseLike); +} +exports.toPromise = toPromise; +function getCurrentPage() { + var pages = getCurrentPages(); + return pages[pages.length - 1]; +} +exports.getCurrentPage = getCurrentPage; diff --git a/miniprogram_npm/@vant/weapp/common/validator.js b/miniprogram_npm/@vant/weapp/common/validator.js new file mode 100644 index 0000000..798f054 --- /dev/null +++ b/miniprogram_npm/@vant/weapp/common/validator.js @@ -0,0 +1,43 @@ +'use strict'; +Object.defineProperty(exports, '__esModule', { value: true }); +exports.isVideoUrl = exports.isImageUrl = exports.isBoolean = exports.isNumber = exports.isObj = exports.isDef = exports.isPromise = exports.isPlainObject = exports.isFunction = void 0; +// eslint-disable-next-line @typescript-eslint/ban-types +function isFunction(val) { + return typeof val === 'function'; +} +exports.isFunction = isFunction; +function isPlainObject(val) { + return val !== null && typeof val === 'object' && !Array.isArray(val); +} +exports.isPlainObject = isPlainObject; +function isPromise(val) { + return isPlainObject(val) && isFunction(val.then) && isFunction(val.catch); +} +exports.isPromise = isPromise; +function isDef(value) { + return value !== undefined && value !== null; +} +exports.isDef = isDef; +function isObj(x) { + var type = typeof x; + return x !== null && (type === 'object' || type === 'function'); +} +exports.isObj = isObj; +function isNumber(value) { + return /^\d+(\.\d+)?$/.test(value); +} +exports.isNumber = isNumber; +function isBoolean(value) { + return typeof value === 'boolean'; +} +exports.isBoolean = isBoolean; +var IMAGE_REGEXP = /\.(jpeg|jpg|gif|png|svg|webp|jfif|bmp|dpg)/i; +var VIDEO_REGEXP = /\.(mp4|mpg|mpeg|dat|asf|avi|rm|rmvb|mov|wmv|flv|mkv)/i; +function isImageUrl(url) { + return IMAGE_REGEXP.test(url); +} +exports.isImageUrl = isImageUrl; +function isVideoUrl(url) { + return VIDEO_REGEXP.test(url); +} +exports.isVideoUrl = isVideoUrl; diff --git a/miniprogram_npm/@vant/weapp/common/version.js b/miniprogram_npm/@vant/weapp/common/version.js new file mode 100644 index 0000000..c7dc5db --- /dev/null +++ b/miniprogram_npm/@vant/weapp/common/version.js @@ -0,0 +1,58 @@ +'use strict'; +Object.defineProperty(exports, '__esModule', { value: true }); +exports.canIUseGetUserProfile = exports.canIUseCanvas2d = exports.canIUseNextTick = exports.canIUseGroupSetData = exports.canIUseAnimate = exports.canIUseFormFieldButton = exports.canIUseModel = void 0; +var utils_1 = require('./utils'); +function compareVersion(v1, v2) { + v1 = v1.split('.'); + v2 = v2.split('.'); + var len = Math.max(v1.length, v2.length); + while (v1.length < len) { + v1.push('0'); + } + while (v2.length < len) { + v2.push('0'); + } + for (var i = 0; i < len; i++) { + var num1 = parseInt(v1[i], 10); + var num2 = parseInt(v2[i], 10); + if (num1 > num2) { + return 1; + } + if (num1 < num2) { + return -1; + } + } + return 0; +} +function gte(version) { + var system = utils_1.getSystemInfoSync(); + return compareVersion(system.SDKVersion, version) >= 0; +} +function canIUseModel() { + return gte('2.9.3'); +} +exports.canIUseModel = canIUseModel; +function canIUseFormFieldButton() { + return gte('2.10.3'); +} +exports.canIUseFormFieldButton = canIUseFormFieldButton; +function canIUseAnimate() { + return gte('2.9.0'); +} +exports.canIUseAnimate = canIUseAnimate; +function canIUseGroupSetData() { + return gte('2.4.0'); +} +exports.canIUseGroupSetData = canIUseGroupSetData; +function canIUseNextTick() { + return wx.canIUse('nextTick'); +} +exports.canIUseNextTick = canIUseNextTick; +function canIUseCanvas2d() { + return gte('2.9.0'); +} +exports.canIUseCanvas2d = canIUseCanvas2d; +function canIUseGetUserProfile() { + return !!wx.getUserProfile; +} +exports.canIUseGetUserProfile = canIUseGetUserProfile; diff --git a/miniprogram_npm/@vant/weapp/config-provider/index.js b/miniprogram_npm/@vant/weapp/config-provider/index.js new file mode 100644 index 0000000..341d7d9 --- /dev/null +++ b/miniprogram_npm/@vant/weapp/config-provider/index.js @@ -0,0 +1,11 @@ +'use strict'; +Object.defineProperty(exports, '__esModule', { value: true }); +var component_1 = require('../common/component'); +component_1.VantComponent({ + props: { + themeVars: { + type: Object, + value: {}, + }, + }, +}); diff --git a/miniprogram_npm/@vant/weapp/config-provider/index.json b/miniprogram_npm/@vant/weapp/config-provider/index.json new file mode 100644 index 0000000..467ce29 --- /dev/null +++ b/miniprogram_npm/@vant/weapp/config-provider/index.json @@ -0,0 +1,3 @@ +{ + "component": true +} diff --git a/miniprogram_npm/@vant/weapp/config-provider/index.wxml b/miniprogram_npm/@vant/weapp/config-provider/index.wxml new file mode 100644 index 0000000..3cfb461 --- /dev/null +++ b/miniprogram_npm/@vant/weapp/config-provider/index.wxml @@ -0,0 +1,5 @@ + + + + + diff --git a/miniprogram_npm/@vant/weapp/config-provider/index.wxs b/miniprogram_npm/@vant/weapp/config-provider/index.wxs new file mode 100644 index 0000000..7ca0203 --- /dev/null +++ b/miniprogram_npm/@vant/weapp/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/miniprogram_npm/@vant/weapp/count-down/index.js b/miniprogram_npm/@vant/weapp/count-down/index.js new file mode 100644 index 0000000..348d489 --- /dev/null +++ b/miniprogram_npm/@vant/weapp/count-down/index.js @@ -0,0 +1,103 @@ +'use strict'; +Object.defineProperty(exports, '__esModule', { value: true }); +var component_1 = require('../common/component'); +var utils_1 = require('./utils'); +function simpleTick(fn) { + return setTimeout(fn, 30); +} +component_1.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: utils_1.parseTimeData(0), + formattedTime: '0', + }, + destroyed: function () { + clearTimeout(this.tid); + this.tid = null; + }, + methods: { + // 开始 + start: function () { + if (this.counting) { + return; + } + this.counting = true; + this.endTime = Date.now() + this.remain; + this.tick(); + }, + // 暂停 + pause: function () { + this.counting = false; + clearTimeout(this.tid); + }, + // 重置 + reset: function () { + this.pause(); + this.remain = this.data.time; + this.setRemain(this.remain); + if (this.data.autoStart) { + this.start(); + } + }, + tick: function () { + if (this.data.millisecond) { + this.microTick(); + } else { + this.macroTick(); + } + }, + microTick: function () { + var _this = this; + this.tid = simpleTick(function () { + _this.setRemain(_this.getRemain()); + if (_this.remain !== 0) { + _this.microTick(); + } + }); + }, + macroTick: function () { + var _this = this; + this.tid = simpleTick(function () { + var remain = _this.getRemain(); + if (!utils_1.isSameSecond(remain, _this.remain) || remain === 0) { + _this.setRemain(remain); + } + if (_this.remain !== 0) { + _this.macroTick(); + } + }); + }, + getRemain: function () { + return Math.max(this.endTime - Date.now(), 0); + }, + setRemain: function (remain) { + this.remain = remain; + var timeData = utils_1.parseTimeData(remain); + if (this.data.useSlot) { + this.$emit('change', timeData); + } + this.setData({ + formattedTime: utils_1.parseFormat(this.data.format, timeData), + }); + if (remain === 0) { + this.pause(); + this.$emit('finish'); + } + }, + }, +}); diff --git a/miniprogram_npm/@vant/weapp/count-down/index.json b/miniprogram_npm/@vant/weapp/count-down/index.json new file mode 100644 index 0000000..467ce29 --- /dev/null +++ b/miniprogram_npm/@vant/weapp/count-down/index.json @@ -0,0 +1,3 @@ +{ + "component": true +} diff --git a/miniprogram_npm/@vant/weapp/count-down/index.wxml b/miniprogram_npm/@vant/weapp/count-down/index.wxml new file mode 100644 index 0000000..e206e16 --- /dev/null +++ b/miniprogram_npm/@vant/weapp/count-down/index.wxml @@ -0,0 +1,4 @@ + + + {{ formattedTime }} + diff --git a/miniprogram_npm/@vant/weapp/count-down/index.wxss b/miniprogram_npm/@vant/weapp/count-down/index.wxss new file mode 100644 index 0000000..bc33f5d --- /dev/null +++ b/miniprogram_npm/@vant/weapp/count-down/index.wxss @@ -0,0 +1 @@ +@import '../common/index.wxss';.van-count-down{color:#323233;color:var(--count-down-text-color,#323233);font-size:14px;font-size:var(--count-down-font-size,14px);line-height:20px;line-height:var(--count-down-line-height,20px)} \ No newline at end of file diff --git a/miniprogram_npm/@vant/weapp/count-down/utils.js b/miniprogram_npm/@vant/weapp/count-down/utils.js new file mode 100644 index 0000000..10864a2 --- /dev/null +++ b/miniprogram_npm/@vant/weapp/count-down/utils.js @@ -0,0 +1,65 @@ +'use strict'; +Object.defineProperty(exports, '__esModule', { value: true }); +exports.isSameSecond = exports.parseFormat = exports.parseTimeData = void 0; +function padZero(num, targetLength) { + if (targetLength === void 0) { + targetLength = 2; + } + var str = num + ''; + while (str.length < targetLength) { + str = '0' + str; + } + return str; +} +var SECOND = 1000; +var MINUTE = 60 * SECOND; +var HOUR = 60 * MINUTE; +var DAY = 24 * HOUR; +function parseTimeData(time) { + var days = Math.floor(time / DAY); + var hours = Math.floor((time % DAY) / HOUR); + var minutes = Math.floor((time % HOUR) / MINUTE); + var seconds = Math.floor((time % MINUTE) / SECOND); + var milliseconds = Math.floor(time % SECOND); + return { + days: days, + hours: hours, + minutes: minutes, + seconds: seconds, + milliseconds: milliseconds, + }; +} +exports.parseTimeData = parseTimeData; +function parseFormat(format, timeData) { + var days = timeData.days; + var hours = timeData.hours, + minutes = timeData.minutes, + seconds = timeData.seconds, + milliseconds = timeData.milliseconds; + 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)); +} +exports.parseFormat = parseFormat; +function isSameSecond(time1, time2) { + return Math.floor(time1 / 1000) === Math.floor(time2 / 1000); +} +exports.isSameSecond = isSameSecond; diff --git a/miniprogram_npm/@vant/weapp/datetime-picker/index.js b/miniprogram_npm/@vant/weapp/datetime-picker/index.js new file mode 100644 index 0000000..6444056 --- /dev/null +++ b/miniprogram_npm/@vant/weapp/datetime-picker/index.js @@ -0,0 +1,375 @@ +'use strict'; +var __assign = + (this && this.__assign) || + function () { + __assign = + Object.assign || + function (t) { + for (var s, i = 1, n = arguments.length; i < n; i++) { + s = arguments[i]; + for (var p in s) + if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p]; + } + return t; + }; + return __assign.apply(this, arguments); + }; +var __spreadArray = + (this && this.__spreadArray) || + function (to, from) { + for (var i = 0, il = from.length, j = to.length; i < il; i++, j++) + to[j] = from[i]; + return to; + }; +Object.defineProperty(exports, '__esModule', { value: true }); +var component_1 = require('../common/component'); +var validator_1 = require('../common/validator'); +var shared_1 = require('../picker/shared'); +var currentYear = new Date().getFullYear(); +function isValidDate(date) { + return validator_1.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) { + var index = -1; + var 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(); +} +var defaultFormatter = function (type, value) { + return value; +}; +component_1.VantComponent({ + classes: ['active-class', 'toolbar-class', 'column-class'], + props: __assign(__assign({}, shared_1.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: function () { + var _this = this; + var data = this.data; + var val = this.correctValue(data.value); + var isEqual = val === data.innerValue; + this.updateColumnValue(val).then(function () { + if (!isEqual) { + _this.$emit('input', val); + } + }); + }, + getPicker: function () { + if (this.picker == null) { + this.picker = this.selectComponent('.van-datetime-picker'); + var picker_1 = this.picker; + var setColumnValues_1 = picker_1.setColumnValues; + picker_1.setColumnValues = function () { + var args = []; + for (var _i = 0; _i < arguments.length; _i++) { + args[_i] = arguments[_i]; + } + return setColumnValues_1.apply( + picker_1, + __spreadArray(__spreadArray([], args), [false]) + ); + }; + } + return this.picker; + }, + updateColumns: function () { + var _a = this.data.formatter, + formatter = _a === void 0 ? defaultFormatter : _a; + var results = this.getOriginColumns().map(function (column) { + return { + values: column.values.map(function (value) { + return formatter(column.type, value); + }), + }; + }); + return this.set({ columns: results }); + }, + getOriginColumns: function () { + var filter = this.data.filter; + var results = this.getRanges().map(function (_a) { + var type = _a.type, + range = _a.range; + var values = times(range[1] - range[0] + 1, function (index) { + var value = range[0] + index; + return type === 'year' ? '' + value : padZero(value); + }); + if (filter) { + values = filter(type, values); + } + return { type: type, values: values }; + }); + return results; + }, + getRanges: function () { + var data = this.data; + if (data.type === 'time') { + return [ + { + type: 'hour', + range: [data.minHour, data.maxHour], + }, + { + type: 'minute', + range: [data.minMinute, data.maxMinute], + }, + ]; + } + var _a = this.getBoundary('max', data.innerValue), + maxYear = _a.maxYear, + maxDate = _a.maxDate, + maxMonth = _a.maxMonth, + maxHour = _a.maxHour, + maxMinute = _a.maxMinute; + var _b = this.getBoundary('min', data.innerValue), + minYear = _b.minYear, + minDate = _b.minDate, + minMonth = _b.minMonth, + minHour = _b.minHour, + minMinute = _b.minMinute; + var 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: function (value) { + var data = this.data; + // validate value + var isDateType = data.type !== 'time'; + if (isDateType && !isValidDate(value)) { + value = data.minDate; + } else if (!isDateType && !value) { + var minHour = data.minHour; + value = padZero(minHour) + ':00'; + } + // time type + if (!isDateType) { + var _a = value.split(':'), + hour = _a[0], + minute = _a[1]; + 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: function (type, innerValue) { + var _a; + var value = new Date(innerValue); + var boundary = new Date(this.data[type + 'Date']); + var year = boundary.getFullYear(); + var month = 1; + var date = 1; + var hour = 0; + var 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 ( + (_a = {}), + (_a[type + 'Year'] = year), + (_a[type + 'Month'] = month), + (_a[type + 'Date'] = date), + (_a[type + 'Hour'] = hour), + (_a[type + 'Minute'] = minute), + _a + ); + }, + onCancel: function () { + this.$emit('cancel'); + }, + onConfirm: function () { + this.$emit('confirm', this.data.innerValue); + }, + onChange: function () { + var _this = this; + var data = this.data; + var value; + var picker = this.getPicker(); + var originColumns = this.getOriginColumns(); + if (data.type === 'time') { + var indexes = picker.getIndexes(); + value = + +originColumns[0].values[indexes[0]] + + ':' + + +originColumns[1].values[indexes[1]]; + } else { + var indexes = picker.getIndexes(); + var values = indexes.map(function (value, index) { + return originColumns[index].values[value]; + }); + var year = getTrueValue(values[0]); + var month = getTrueValue(values[1]); + var maxDate = getMonthEndDay(year, month); + var date = getTrueValue(values[2]); + if (data.type === 'year-month') { + date = 1; + } + date = date > maxDate ? maxDate : date; + var hour = 0; + var 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(function () { + _this.$emit('input', value); + _this.$emit('change', picker); + }); + }, + updateColumnValue: function (value) { + var _this = this; + var values = []; + var type = this.data.type; + var formatter = this.data.formatter || defaultFormatter; + var picker = this.getPicker(); + if (type === 'time') { + var pair = value.split(':'); + values = [formatter('hour', pair[0]), formatter('minute', pair[1])]; + } else { + var 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(function () { + return _this.updateColumns(); + }) + .then(function () { + return picker.setValues(values); + }); + }, + }, + created: function () { + var _this = this; + var innerValue = this.correctValue(this.data.value); + this.updateColumnValue(innerValue).then(function () { + _this.$emit('input', innerValue); + }); + }, +}); diff --git a/miniprogram_npm/@vant/weapp/datetime-picker/index.json b/miniprogram_npm/@vant/weapp/datetime-picker/index.json new file mode 100644 index 0000000..a778e91 --- /dev/null +++ b/miniprogram_npm/@vant/weapp/datetime-picker/index.json @@ -0,0 +1,6 @@ +{ + "component": true, + "usingComponents": { + "van-picker": "../picker/index" + } +} diff --git a/miniprogram_npm/@vant/weapp/datetime-picker/index.wxml b/miniprogram_npm/@vant/weapp/datetime-picker/index.wxml new file mode 100644 index 0000000..ade2202 --- /dev/null +++ b/miniprogram_npm/@vant/weapp/datetime-picker/index.wxml @@ -0,0 +1,16 @@ + diff --git a/miniprogram_npm/@vant/weapp/datetime-picker/index.wxss b/miniprogram_npm/@vant/weapp/datetime-picker/index.wxss new file mode 100644 index 0000000..99694d6 --- /dev/null +++ b/miniprogram_npm/@vant/weapp/datetime-picker/index.wxss @@ -0,0 +1 @@ +@import '../common/index.wxss'; \ No newline at end of file diff --git a/miniprogram_npm/@vant/weapp/definitions/index.js b/miniprogram_npm/@vant/weapp/definitions/index.js new file mode 100644 index 0000000..c8ad2e5 --- /dev/null +++ b/miniprogram_npm/@vant/weapp/definitions/index.js @@ -0,0 +1,2 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); diff --git a/miniprogram_npm/@vant/weapp/dialog/dialog.js b/miniprogram_npm/@vant/weapp/dialog/dialog.js new file mode 100644 index 0000000..d90d8ea --- /dev/null +++ b/miniprogram_npm/@vant/weapp/dialog/dialog.js @@ -0,0 +1,104 @@ +'use strict'; +var __assign = + (this && this.__assign) || + function () { + __assign = + Object.assign || + function (t) { + for (var s, i = 1, n = arguments.length; i < n; i++) { + s = arguments[i]; + for (var p in s) + if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p]; + } + return t; + }; + return __assign.apply(this, arguments); + }; +Object.defineProperty(exports, '__esModule', { value: true }); +var queue = []; +var 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: '', +}; +var currentOptions = __assign({}, defaultOptions); +function getContext() { + var pages = getCurrentPages(); + return pages[pages.length - 1]; +} +var Dialog = function (options) { + options = __assign(__assign({}, currentOptions), options); + return new Promise(function (resolve, reject) { + var context = options.context || getContext(); + var dialog = context.selectComponent(options.selector); + delete options.context; + delete options.selector; + if (dialog) { + dialog.setData( + __assign( + { + callback: function (action, instance) { + action === 'confirm' ? resolve(instance) : reject(instance); + }, + }, + options + ) + ); + wx.nextTick(function () { + dialog.setData({ show: true }); + }); + queue.push(dialog); + } else { + console.warn( + '未找到 van-dialog 节点,请确认 selector 及 context 是否正确' + ); + } + }); +}; +Dialog.alert = function (options) { + return Dialog(options); +}; +Dialog.confirm = function (options) { + return Dialog(__assign({ showCancelButton: true }, options)); +}; +Dialog.close = function () { + queue.forEach(function (dialog) { + dialog.close(); + }); + queue = []; +}; +Dialog.stopLoading = function () { + queue.forEach(function (dialog) { + dialog.stopLoading(); + }); +}; +Dialog.currentOptions = currentOptions; +Dialog.defaultOptions = defaultOptions; +Dialog.setDefaultOptions = function (options) { + currentOptions = __assign(__assign({}, currentOptions), options); + Dialog.currentOptions = currentOptions; +}; +Dialog.resetDefaultOptions = function () { + currentOptions = __assign({}, defaultOptions); + Dialog.currentOptions = currentOptions; +}; +Dialog.resetDefaultOptions(); +exports.default = Dialog; diff --git a/miniprogram_npm/@vant/weapp/dialog/index.js b/miniprogram_npm/@vant/weapp/dialog/index.js new file mode 100644 index 0000000..135ce71 --- /dev/null +++ b/miniprogram_npm/@vant/weapp/dialog/index.js @@ -0,0 +1,126 @@ +'use strict'; +Object.defineProperty(exports, '__esModule', { value: true }); +var component_1 = require('../common/component'); +var button_1 = require('../mixins/button'); +var color_1 = require('../common/color'); +var utils_1 = require('../common/utils'); +component_1.VantComponent({ + mixins: [button_1.button], + props: { + show: { + type: Boolean, + observer: function (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: color_1.RED, + }, + cancelButtonColor: { + type: String, + value: color_1.GRAY, + }, + showConfirmButton: { + type: Boolean, + value: true, + }, + overlay: { + type: Boolean, + value: true, + }, + transition: { + type: String, + value: 'scale', + }, + }, + data: { + loading: { + confirm: false, + cancel: false, + }, + callback: function () {}, + }, + methods: { + onConfirm: function () { + this.handleAction('confirm'); + }, + onCancel: function () { + this.handleAction('cancel'); + }, + onClickOverlay: function () { + this.close('overlay'); + }, + close: function (action) { + var _this = this; + this.setData({ show: false }); + wx.nextTick(function () { + _this.$emit('close', action); + var callback = _this.data.callback; + if (callback) { + callback(action, _this); + } + }); + }, + stopLoading: function () { + this.setData({ + loading: { + confirm: false, + cancel: false, + }, + }); + }, + handleAction: function (action) { + var _a; + var _this = this; + this.$emit(action, { dialog: this }); + var _b = this.data, + asyncClose = _b.asyncClose, + beforeClose = _b.beforeClose; + if (!asyncClose && !beforeClose) { + this.close(action); + return; + } + this.setData(((_a = {}), (_a['loading.' + action] = true), _a)); + if (beforeClose) { + utils_1.toPromise(beforeClose(action)).then(function (value) { + if (value) { + _this.close(action); + } else { + _this.stopLoading(); + } + }); + } + }, + }, +}); diff --git a/miniprogram_npm/@vant/weapp/dialog/index.json b/miniprogram_npm/@vant/weapp/dialog/index.json new file mode 100644 index 0000000..43417fc --- /dev/null +++ b/miniprogram_npm/@vant/weapp/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/miniprogram_npm/@vant/weapp/dialog/index.wxml b/miniprogram_npm/@vant/weapp/dialog/index.wxml new file mode 100644 index 0000000..f49dee4 --- /dev/null +++ b/miniprogram_npm/@vant/weapp/dialog/index.wxml @@ -0,0 +1,113 @@ + + + + + + {{ title }} + + + + + {{ message }} + + + + + {{ cancelButtonText }} + + + {{ confirmButtonText }} + + + + + + {{ cancelButtonText }} + + + {{ confirmButtonText }} + + + diff --git a/miniprogram_npm/@vant/weapp/dialog/index.wxss b/miniprogram_npm/@vant/weapp/dialog/index.wxss new file mode 100644 index 0000000..68b75c8 --- /dev/null +++ b/miniprogram_npm/@vant/weapp/dialog/index.wxss @@ -0,0 +1 @@ +@import '../common/index.wxss';.van-dialog{top:45%!important;overflow:hidden;width:320px;width:var(--dialog-width,320px);font-size:16px;font-size:var(--dialog-font-size,16px);border-radius:16px;border-radius:var(--dialog-border-radius,16px);background-color:#fff;background-color:var(--dialog-background-color,#fff)}@media (max-width:321px){.van-dialog{width:90%;width:var(--dialog-small-screen-width,90%)}}.van-dialog__header{text-align:center;padding-top:24px;padding-top:var(--dialog-header-padding-top,24px);font-weight:500;font-weight:var(--dialog-header-font-weight,500);line-height:24px;line-height:var(--dialog-header-line-height,24px)}.van-dialog__header--isolated{padding:24px 0;padding:var(--dialog-header-isolated-padding,24px 0)}.van-dialog__message{overflow-y:auto;text-align:center;-webkit-overflow-scrolling:touch;font-size:14px;font-size:var(--dialog-message-font-size,14px);line-height:20px;line-height:var(--dialog-message-line-height,20px);max-height:60vh;max-height:var(--dialog-message-max-height,60vh);padding:24px;padding:var(--dialog-message-padding,24px)}.van-dialog__message-text{word-wrap:break-word}.van-dialog__message--hasTitle{padding-top:8px;padding-top:var(--dialog-has-title-message-padding-top,8px);color:#646566;color:var(--dialog-has-title-message-text-color,#646566)}.van-dialog__message--round-button{padding-bottom:16px;color:#323233}.van-dialog__message--left{text-align:left}.van-dialog__message--right{text-align:right}.van-dialog__footer{display:flex}.van-dialog__footer--round-button{position:relative!important;padding:8px 24px 16px!important}.van-dialog__button{flex:1}.van-dialog__cancel,.van-dialog__confirm{border:0!important}.van-dialog-bounce-enter{transform:translate3d(-50%,-50%,0) scale(.7);opacity:0}.van-dialog-bounce-leave-active{transform:translate3d(-50%,-50%,0) scale(.9);opacity:0} \ No newline at end of file diff --git a/miniprogram_npm/@vant/weapp/divider/index.js b/miniprogram_npm/@vant/weapp/divider/index.js new file mode 100644 index 0000000..b643841 --- /dev/null +++ b/miniprogram_npm/@vant/weapp/divider/index.js @@ -0,0 +1,14 @@ +'use strict'; +Object.defineProperty(exports, '__esModule', { value: true }); +var component_1 = require('../common/component'); +component_1.VantComponent({ + props: { + dashed: Boolean, + hairline: Boolean, + contentPosition: String, + fontSize: String, + borderColor: String, + textColor: String, + customStyle: String, + }, +}); diff --git a/miniprogram_npm/@vant/weapp/divider/index.json b/miniprogram_npm/@vant/weapp/divider/index.json new file mode 100644 index 0000000..a89ef4d --- /dev/null +++ b/miniprogram_npm/@vant/weapp/divider/index.json @@ -0,0 +1,4 @@ +{ + "component": true, + "usingComponents": {} +} diff --git a/miniprogram_npm/@vant/weapp/divider/index.wxml b/miniprogram_npm/@vant/weapp/divider/index.wxml new file mode 100644 index 0000000..f6a5a45 --- /dev/null +++ b/miniprogram_npm/@vant/weapp/divider/index.wxml @@ -0,0 +1,9 @@ + + + + + + diff --git a/miniprogram_npm/@vant/weapp/divider/index.wxs b/miniprogram_npm/@vant/weapp/divider/index.wxs new file mode 100644 index 0000000..215b14f --- /dev/null +++ b/miniprogram_npm/@vant/weapp/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/miniprogram_npm/@vant/weapp/divider/index.wxss b/miniprogram_npm/@vant/weapp/divider/index.wxss new file mode 100644 index 0000000..8b245b8 --- /dev/null +++ b/miniprogram_npm/@vant/weapp/divider/index.wxss @@ -0,0 +1 @@ +@import '../common/index.wxss';.van-divider{display:flex;align-items:center;margin:16px 0;margin:var(--divider-margin,16px 0);color:#969799;color:var(--divider-text-color,#969799);font-size:14px;font-size:var(--divider-font-size,14px);line-height:24px;line-height:var(--divider-line-height,24px);border:0 solid #ebedf0;border-color:var(--divider-border-color,#ebedf0)}.van-divider:after,.van-divider:before{display:block;flex:1;box-sizing:border-box;height:1px;border-color:inherit;border-style:inherit;border-width:1px 0 0}.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:16px;margin-right:var(--divider-content-padding,16px)}.van-divider--center:after,.van-divider--left:after,.van-divider--right:after{content:"";margin-left:16px;margin-left:var(--divider-content-padding,16px)}.van-divider--left:before{max-width:10%;max-width:var(--divider-content-left-width,10%)}.van-divider--right:after{max-width:10%;max-width:var(--divider-content-right-width,10%)} \ No newline at end of file diff --git a/miniprogram_npm/@vant/weapp/dropdown-item/index.js b/miniprogram_npm/@vant/weapp/dropdown-item/index.js new file mode 100644 index 0000000..aac47c9 --- /dev/null +++ b/miniprogram_npm/@vant/weapp/dropdown-item/index.js @@ -0,0 +1,117 @@ +'use strict'; +Object.defineProperty(exports, '__esModule', { value: true }); +var relation_1 = require('../common/relation'); +var component_1 = require('../common/component'); +component_1.VantComponent({ + field: true, + relation: relation_1.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, + }, + data: { + transition: true, + showPopup: false, + showWrapper: false, + displayTitle: '', + }, + methods: { + rerender: function () { + var _this = this; + wx.nextTick(function () { + var _a; + (_a = _this.parent) === null || _a === void 0 + ? void 0 + : _a.updateItemListData(); + }); + }, + updateDataFromParent: function () { + if (this.parent) { + var _a = this.parent.data, + overlay = _a.overlay, + duration = _a.duration, + activeColor = _a.activeColor, + closeOnClickOverlay = _a.closeOnClickOverlay, + direction = _a.direction; + this.setData({ + overlay: overlay, + duration: duration, + activeColor: activeColor, + closeOnClickOverlay: closeOnClickOverlay, + direction: direction, + }); + } + }, + onOpen: function () { + this.$emit('open'); + }, + onOpened: function () { + this.$emit('opened'); + }, + onClose: function () { + this.$emit('close'); + }, + onClosed: function () { + this.$emit('closed'); + this.setData({ showWrapper: false }); + }, + onOptionTap: function (event) { + var option = event.currentTarget.dataset.option; + var value = option.value; + var shouldEmitChange = this.data.value !== value; + this.setData({ showPopup: false, value: value }); + this.$emit('close'); + this.rerender(); + if (shouldEmitChange) { + this.$emit('change', value); + } + }, + toggle: function (show, options) { + var _this = this; + var _a; + if (options === void 0) { + options = {}; + } + var showPopup = this.data.showPopup; + if (typeof show !== 'boolean') { + show = !showPopup; + } + if (show === showPopup) { + return; + } + this.setData({ + transition: !options.immediate, + showPopup: show, + }); + if (show) { + (_a = this.parent) === null || _a === void 0 + ? void 0 + : _a.getChildWrapperStyle().then(function (wrapperStyle) { + _this.setData({ wrapperStyle: wrapperStyle, showWrapper: true }); + _this.rerender(); + }); + } else { + this.rerender(); + } + }, + }, +}); diff --git a/miniprogram_npm/@vant/weapp/dropdown-item/index.json b/miniprogram_npm/@vant/weapp/dropdown-item/index.json new file mode 100644 index 0000000..88d5409 --- /dev/null +++ b/miniprogram_npm/@vant/weapp/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/miniprogram_npm/@vant/weapp/dropdown-item/index.wxml b/miniprogram_npm/@vant/weapp/dropdown-item/index.wxml new file mode 100644 index 0000000..dd75292 --- /dev/null +++ b/miniprogram_npm/@vant/weapp/dropdown-item/index.wxml @@ -0,0 +1,48 @@ + + + + + + + {{ item.text }} + + + + + + + diff --git a/miniprogram_npm/@vant/weapp/dropdown-item/index.wxss b/miniprogram_npm/@vant/weapp/dropdown-item/index.wxss new file mode 100644 index 0000000..7cab3f2 --- /dev/null +++ b/miniprogram_npm/@vant/weapp/dropdown-item/index.wxss @@ -0,0 +1 @@ +@import '../common/index.wxss';.van-dropdown-item{position:fixed;right:0;left:0;overflow:hidden}.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:#ee0a24;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/miniprogram_npm/@vant/weapp/dropdown-item/shared.js b/miniprogram_npm/@vant/weapp/dropdown-item/shared.js new file mode 100644 index 0000000..db8b17d --- /dev/null +++ b/miniprogram_npm/@vant/weapp/dropdown-item/shared.js @@ -0,0 +1,2 @@ +'use strict'; +Object.defineProperty(exports, '__esModule', { value: true }); diff --git a/miniprogram_npm/@vant/weapp/dropdown-menu/index.js b/miniprogram_npm/@vant/weapp/dropdown-menu/index.js new file mode 100644 index 0000000..9c27c64 --- /dev/null +++ b/miniprogram_npm/@vant/weapp/dropdown-menu/index.js @@ -0,0 +1,126 @@ +'use strict'; +Object.defineProperty(exports, '__esModule', { value: true }); +var component_1 = require('../common/component'); +var relation_1 = require('../common/relation'); +var utils_1 = require('../common/utils'); +var ARRAY = []; +component_1.VantComponent({ + field: true, + relation: relation_1.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', + }, + closeOnClickOverlay: { + type: Boolean, + value: true, + observer: 'updateChildrenData', + }, + closeOnClickOutside: { + type: Boolean, + value: true, + }, + }, + data: { + itemListData: [], + }, + beforeCreate: function () { + var windowHeight = utils_1.getSystemInfoSync().windowHeight; + this.windowHeight = windowHeight; + ARRAY.push(this); + }, + destroyed: function () { + var _this = this; + ARRAY = ARRAY.filter(function (item) { + return item !== _this; + }); + }, + methods: { + updateItemListData: function () { + this.setData({ + itemListData: this.children.map(function (child) { + return child.data; + }), + }); + }, + updateChildrenData: function () { + this.children.forEach(function (child) { + child.updateDataFromParent(); + }); + }, + toggleItem: function (active) { + this.children.forEach(function (item, index) { + var showPopup = item.data.showPopup; + if (index === active) { + item.toggle(); + } else if (showPopup) { + item.toggle(false, { immediate: true }); + } + }); + }, + close: function () { + this.children.forEach(function (child) { + child.toggle(false, { immediate: true }); + }); + }, + getChildWrapperStyle: function () { + var _this = this; + var _a = this.data, + zIndex = _a.zIndex, + direction = _a.direction; + return utils_1.getRect(this, '.van-dropdown-menu').then(function (rect) { + var _a = rect.top, + top = _a === void 0 ? 0 : _a, + _b = rect.bottom, + bottom = _b === void 0 ? 0 : _b; + var offset = direction === 'down' ? bottom : _this.windowHeight - top; + var wrapperStyle = 'z-index: ' + zIndex + ';'; + if (direction === 'down') { + wrapperStyle += 'top: ' + utils_1.addUnit(offset) + ';'; + } else { + wrapperStyle += 'bottom: ' + utils_1.addUnit(offset) + ';'; + } + return wrapperStyle; + }); + }, + onTitleTap: function (event) { + var _this = this; + var index = event.currentTarget.dataset.index; + var child = this.children[index]; + if (!child.data.disabled) { + ARRAY.forEach(function (menuItem) { + if ( + menuItem && + menuItem.data.closeOnClickOutside && + menuItem !== _this + ) { + menuItem.close(); + } + }); + this.toggleItem(index); + } + }, + }, +}); diff --git a/miniprogram_npm/@vant/weapp/dropdown-menu/index.json b/miniprogram_npm/@vant/weapp/dropdown-menu/index.json new file mode 100644 index 0000000..467ce29 --- /dev/null +++ b/miniprogram_npm/@vant/weapp/dropdown-menu/index.json @@ -0,0 +1,3 @@ +{ + "component": true +} diff --git a/miniprogram_npm/@vant/weapp/dropdown-menu/index.wxml b/miniprogram_npm/@vant/weapp/dropdown-menu/index.wxml new file mode 100644 index 0000000..037ac3b --- /dev/null +++ b/miniprogram_npm/@vant/weapp/dropdown-menu/index.wxml @@ -0,0 +1,23 @@ + + + + + + + + {{ computed.displayTitle(item) }} + + + + + + diff --git a/miniprogram_npm/@vant/weapp/dropdown-menu/index.wxs b/miniprogram_npm/@vant/weapp/dropdown-menu/index.wxs new file mode 100644 index 0000000..6538854 --- /dev/null +++ b/miniprogram_npm/@vant/weapp/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/miniprogram_npm/@vant/weapp/dropdown-menu/index.wxss b/miniprogram_npm/@vant/weapp/dropdown-menu/index.wxss new file mode 100644 index 0000000..df0b22a --- /dev/null +++ b/miniprogram_npm/@vant/weapp/dropdown-menu/index.wxss @@ -0,0 +1 @@ +@import '../common/index.wxss';.van-dropdown-menu{display:flex;box-shadow:0 2px 12px rgba(100,101,102,.12);-webkit-user-select:none;user-select:none;height:50px;height:var(--dropdown-menu-height,50px);background-color:#fff;background-color:var(--dropdown-menu-background-color,#fff)}.van-dropdown-menu__item{display:flex;flex:1;align-items:center;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:#969799;color:var(--dropdown-menu-title-disabled-text-color,#969799)}.van-dropdown-menu__title{position:relative;box-sizing:border-box;max-width:100%;padding:0 8px;padding:var(--dropdown-menu-title-padding,0 8px);color:#323233;color:var(--dropdown-menu-title-text-color,#323233);font-size:15px;font-size:var(--dropdown-menu-title-font-size,15px);line-height:18px;line-height:var(--dropdown-menu-title-line-height,18px)}.van-dropdown-menu__title:after{position:absolute;top:50%;right:-4px;margin-top:-5px;border-color:transparent transparent currentcolor currentcolor;border-style:solid;border-width:3px;transform:rotate(-45deg);opacity:.8;content:""}.van-dropdown-menu__title--active{color:#ee0a24;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/miniprogram_npm/@vant/weapp/empty/index.js b/miniprogram_npm/@vant/weapp/empty/index.js new file mode 100644 index 0000000..d5b2025 --- /dev/null +++ b/miniprogram_npm/@vant/weapp/empty/index.js @@ -0,0 +1,12 @@ +'use strict'; +Object.defineProperty(exports, '__esModule', { value: true }); +var component_1 = require('../common/component'); +component_1.VantComponent({ + props: { + description: String, + image: { + type: String, + value: 'default', + }, + }, +}); diff --git a/miniprogram_npm/@vant/weapp/empty/index.json b/miniprogram_npm/@vant/weapp/empty/index.json new file mode 100644 index 0000000..e8cfaaf --- /dev/null +++ b/miniprogram_npm/@vant/weapp/empty/index.json @@ -0,0 +1,4 @@ +{ + "component": true, + "usingComponents": {} +} \ No newline at end of file diff --git a/miniprogram_npm/@vant/weapp/empty/index.wxml b/miniprogram_npm/@vant/weapp/empty/index.wxml new file mode 100644 index 0000000..9c7b719 --- /dev/null +++ b/miniprogram_npm/@vant/weapp/empty/index.wxml @@ -0,0 +1,22 @@ + + + + + + + + + + + + + + + + {{ description }} + + + + + + diff --git a/miniprogram_npm/@vant/weapp/empty/index.wxs b/miniprogram_npm/@vant/weapp/empty/index.wxs new file mode 100644 index 0000000..9696dd4 --- /dev/null +++ b/miniprogram_npm/@vant/weapp/empty/index.wxs @@ -0,0 +1,14 @@ +/* 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/miniprogram_npm/@vant/weapp/empty/index.wxss b/miniprogram_npm/@vant/weapp/empty/index.wxss new file mode 100644 index 0000000..40b3747 --- /dev/null +++ b/miniprogram_npm/@vant/weapp/empty/index.wxss @@ -0,0 +1 @@ +@import '../common/index.wxss';.van-empty{display:flex;flex-direction:column;align-items:center;justify-content:center;box-sizing:border-box;padding:32px 0}.van-empty__image{width:160px;height:160px}.van-empty__image:empty{display:none}.van-empty__image__img{width:100%;height:100%}.van-empty__image:not(:empty)+.van-empty__image{display:none}.van-empty__description{margin-top:16px;padding:0 60px;color:#969799;font-size:14px;line-height:20px}.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/miniprogram_npm/@vant/weapp/field/index.js b/miniprogram_npm/@vant/weapp/field/index.js new file mode 100644 index 0000000..e017616 --- /dev/null +++ b/miniprogram_npm/@vant/weapp/field/index.js @@ -0,0 +1,151 @@ +'use strict'; +var __assign = + (this && this.__assign) || + function () { + __assign = + Object.assign || + function (t) { + for (var s, i = 1, n = arguments.length; i < n; i++) { + s = arguments[i]; + for (var p in s) + if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p]; + } + return t; + }; + return __assign.apply(this, arguments); + }; +Object.defineProperty(exports, '__esModule', { value: true }); +var utils_1 = require('../common/utils'); +var component_1 = require('../common/component'); +var props_1 = require('./props'); +component_1.VantComponent({ + field: true, + classes: ['input-class', 'right-icon-class', 'label-class'], + props: __assign( + __assign( + __assign(__assign({}, props_1.commonProps), props_1.inputProps), + props_1.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', + }, + border: { + type: Boolean, + value: true, + }, + titleWidth: { + type: String, + value: '6.2em', + }, + } + ), + data: { + focused: false, + innerValue: '', + showClear: false, + }, + created: function () { + this.value = this.data.value; + this.setData({ innerValue: this.value }); + }, + methods: { + onInput: function (event) { + var _a = (event.detail || {}).value, + value = _a === void 0 ? '' : _a; + this.value = value; + this.setShowClear(); + this.emitChange(); + }, + onFocus: function (event) { + this.focused = true; + this.setShowClear(); + this.$emit('focus', event.detail); + }, + onBlur: function (event) { + this.focused = false; + this.setShowClear(); + this.$emit('blur', event.detail); + }, + onClickIcon: function () { + this.$emit('click-icon'); + }, + onClickInput: function (event) { + this.$emit('click-input', event.detail); + }, + onClear: function () { + var _this = this; + this.setData({ innerValue: '' }); + this.value = ''; + this.setShowClear(); + utils_1.nextTick(function () { + _this.emitChange(); + _this.$emit('clear', ''); + }); + }, + onConfirm: function (event) { + var _a = (event.detail || {}).value, + value = _a === void 0 ? '' : _a; + this.value = value; + this.setShowClear(); + this.$emit('confirm', value); + }, + setValue: function (value) { + this.value = value; + this.setShowClear(); + if (value === '') { + this.setData({ innerValue: '' }); + } + this.emitChange(); + }, + onLineChange: function (event) { + this.$emit('linechange', event.detail); + }, + onKeyboardHeightChange: function (event) { + this.$emit('keyboardheightchange', event.detail); + }, + emitChange: function () { + var _this = this; + this.setData({ value: this.value }); + utils_1.nextTick(function () { + _this.$emit('input', _this.value); + _this.$emit('change', _this.value); + }); + }, + setShowClear: function () { + var _a = this.data, + clearable = _a.clearable, + readonly = _a.readonly; + var _b = this, + focused = _b.focused, + value = _b.value; + this.setData({ + showClear: !!clearable && !!focused && !!value && !readonly, + }); + }, + noop: function () {}, + }, +}); diff --git a/miniprogram_npm/@vant/weapp/field/index.json b/miniprogram_npm/@vant/weapp/field/index.json new file mode 100644 index 0000000..5906c50 --- /dev/null +++ b/miniprogram_npm/@vant/weapp/field/index.json @@ -0,0 +1,7 @@ +{ + "component": true, + "usingComponents": { + "van-cell": "../cell/index", + "van-icon": "../icon/index" + } +} diff --git a/miniprogram_npm/@vant/weapp/field/index.wxml b/miniprogram_npm/@vant/weapp/field/index.wxml new file mode 100644 index 0000000..08eee01 --- /dev/null +++ b/miniprogram_npm/@vant/weapp/field/index.wxml @@ -0,0 +1,56 @@ + + + + + + + {{ label }} + + + + + + + + + + + + + + + + + + + + + {{ value.length >= maxlength ? maxlength : value.length }}/{{ maxlength }} + + + {{ errorMessage }} + + diff --git a/miniprogram_npm/@vant/weapp/field/index.wxs b/miniprogram_npm/@vant/weapp/field/index.wxs new file mode 100644 index 0000000..78575b9 --- /dev/null +++ b/miniprogram_npm/@vant/weapp/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/miniprogram_npm/@vant/weapp/field/index.wxss b/miniprogram_npm/@vant/weapp/field/index.wxss new file mode 100644 index 0000000..6e3b16f --- /dev/null +++ b/miniprogram_npm/@vant/weapp/field/index.wxss @@ -0,0 +1 @@ +@import '../common/index.wxss';.van-field{--cell-icon-size:16px;--cell-icon-size:var(--field-icon-size,16px)}.van-field__label{color:#646566;color:var(--field-label-color,#646566)}.van-field__label--disabled{color:#c8c9cc;color:var(--field-disabled-text-color,#c8c9cc)}.van-field__body{display:flex;align-items:center}.van-field__body--textarea{box-sizing:border-box;padding:3.6px 0;line-height:1.2em;min-height:24px;min-height:var(--cell-line-height,24px)}.van-field__control:empty+.van-field__control{display:block}.van-field__control{position:relative;display:none;box-sizing:border-box;width:100%;margin:0;padding:0;line-height:inherit;text-align:left;background-color:initial;border:0;resize:none;color:#323233;color:var(--field-input-text-color,#323233);height:24px;height:var(--cell-line-height,24px);min-height:24px;min-height:var(--cell-line-height,24px)}.van-field__control:empty{display:none}.van-field__control--textarea{height:18px;height:var(--field-text-area-min-height,18px);min-height:18px;min-height:var(--field-text-area-min-height,18px)}.van-field__control--error{color:#ee0a24;color:var(--field-input-error-text-color,#ee0a24)}.van-field__control--disabled{background-color:initial;opacity:1;color:#c8c9cc;color:var(--field-input-disabled-text-color,#c8c9cc)}.van-field__control--center{text-align:center}.van-field__control--right{text-align:right}.van-field__control--custom{display:flex;align-items:center;min-height:24px;min-height:var(--cell-line-height,24px)}.van-field__placeholder{position:absolute;top:0;right:0;left:0;pointer-events:none;color:#c8c9cc;color:var(--field-placeholder-text-color,#c8c9cc)}.van-field__placeholder--error{color:#ee0a24;color:var(--field-error-message-color,#ee0a24)}.van-field__icon-root{display:flex;align-items:center;min-height:24px;min-height:var(--cell-line-height,24px)}.van-field__clear-root,.van-field__icon-container{line-height:inherit;vertical-align:middle;padding:0 8px;padding:0 var(--padding-xs,8px);margin-right:-8px;margin-right:-var(--padding-xs,8px)}.van-field__button,.van-field__clear-root,.van-field__icon-container{flex-shrink:0}.van-field__clear-root{font-size:16px;font-size:var(--field-clear-icon-size,16px);color:#c8c9cc;color:var(--field-clear-icon-color,#c8c9cc)}.van-field__icon-container{font-size:16px;font-size:var(--field-icon-size,16px);color:#969799;color:var(--field-icon-container-color,#969799)}.van-field__icon-container:empty{display:none}.van-field__button{padding-left:8px;padding-left:var(--padding-xs,8px)}.van-field__button:empty{display:none}.van-field__error-message{text-align:left;font-size:12px;font-size:var(--field-error-message-text-font-size,12px);color:#ee0a24;color:var(--field-error-message-color,#ee0a24)}.van-field__error-message--center{text-align:center}.van-field__error-message--right{text-align:right}.van-field__word-limit{text-align:right;margin-top:4px;margin-top:var(--padding-base,4px);color:#646566;color:var(--field-word-limit-color,#646566);font-size:12px;font-size:var(--field-word-limit-font-size,12px);line-height:16px;line-height:var(--field-word-limit-line-height,16px)}.van-field__word-num{display:inline}.van-field__word-num--full{color:#ee0a24;color:var(--field-word-num-full-color,#ee0a24)} \ No newline at end of file diff --git a/miniprogram_npm/@vant/weapp/field/input.wxml b/miniprogram_npm/@vant/weapp/field/input.wxml new file mode 100644 index 0000000..3ecab24 --- /dev/null +++ b/miniprogram_npm/@vant/weapp/field/input.wxml @@ -0,0 +1,27 @@ + diff --git a/miniprogram_npm/@vant/weapp/field/props.js b/miniprogram_npm/@vant/weapp/field/props.js new file mode 100644 index 0000000..6ce703b --- /dev/null +++ b/miniprogram_npm/@vant/weapp/field/props.js @@ -0,0 +1,66 @@ +'use strict'; +Object.defineProperty(exports, '__esModule', { value: true }); +exports.textareaProps = exports.inputProps = exports.commonProps = void 0; +exports.commonProps = { + value: { + type: String, + observer: function (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, +}; +exports.inputProps = { + type: { + type: String, + value: 'text', + }, + password: Boolean, + confirmType: String, + confirmHold: Boolean, +}; +exports.textareaProps = { + autoHeight: Boolean, + fixed: Boolean, + showConfirmBar: { + type: Boolean, + value: true, + }, + disableDefaultPadding: { + type: Boolean, + value: true, + }, +}; diff --git a/miniprogram_npm/@vant/weapp/field/textarea.wxml b/miniprogram_npm/@vant/weapp/field/textarea.wxml new file mode 100644 index 0000000..5015a51 --- /dev/null +++ b/miniprogram_npm/@vant/weapp/field/textarea.wxml @@ -0,0 +1,29 @@ + + + + + + + + 上传图片 + (最多三张) + + + + + + + + + + + + + + + diff --git a/pages/caogaozhi/caogaozhi.wxss b/pages/caogaozhi/caogaozhi.wxss new file mode 100644 index 0000000..4028062 --- /dev/null +++ b/pages/caogaozhi/caogaozhi.wxss @@ -0,0 +1,534 @@ +.top { + width:100%;height:100rpx;position:fixed;left:0;top:0;z-index:10; +} +.top_nav { + height:100rpx; + line-height:100rpx; + background:#6493FF; + position:relative; + color:#FFF; + font-size:32rpx; +} +.top_nav_center { + width:100%; + text-align:center; +} +.time { + height:100rpx; + line-height:100rpx; + position:absolute; + left:4%; + top:0; +} +.time image{ + width:50rpx; + height:50rpx; + margin-top:25rpx; + float:left; +} +.time text { + height:100rpx; + line-height:100rpx; + display:inline-block; + width:120rpx; + text-align:center; + letter-spacing:5rpx; + color:#FFF; + margin-left:20rpx; +} + +.coll { + position:absolute; + top:15rpx; + right:15%; + width:50rpx; + height:50rpx; + +} +.coll image { + width:100%; + height:100%; +} +.paper { + position:absolute; + top:15rpx; + right:4%; + width:50rpx; + height:50rpx; +} +.paper image { + width:100%; + height:100%; +} + + + + + + + + +.the_foot { + width:100%; + height:100rpx; + position:fixed; + left:0; + bottom:0; + z-index:10; +} +.foot { + height:100rpx; + line-height:100rpx; + background:#6493FF; + position:relative; + color:#FFF; + font-size:30rpx; +} +.foot_left { + width:28%; + height:100rpx; + position:absolute; + left:0; + top:0; +} + +.foot_center { + width:26%; + height:100rpx; + margin:0 auto; + text-align:center; +} +.foot_center image { + width:50rpx; + height:50rpx; + margin-top:25rpx; + float:left; +} +.foot_center text { + height:100rpx; + line-height:100rpx; + display:inline-block; + text-align:center; + color:#FFF; + margin-left:10rpx; +} + + +.foot_right { + width:28%; + height:100rpx; + position:absolute; + right:0; + top:0; +} +.foot button{ + width:90%; + height:70rpx; + line-height:70rpx; + margin-top:17rpx; + color:#6493FF; + font-size:30rpx; + +} + + + + + + + + +/*草稿纸*/ +.topic_cgz{ + position:fixed; + top:0; + width:100%; + height:100%; + background-color:rgba(0,0,0,0.4); + z-index:999; + overflow:hidden; +} +.topic_cgz_tab{ + width: 100%; + height:100%; + padding:0; + position: fixed; + top:0rpx; +} +.topic_cgz_tab .fl{ + width: 25%; + text-align: center; +} +.topic_cgz_tab image{ + width: 60rpx; + height: 60rpx; +} + + + + + + + + + + + + + + + + + + + + +/*滚动层*/ +scroll-item { + z-index:9; +} +.scoll-h { + height:100%; +} +.tab-content { + height:100%; + width:100%; + background:#fff; +} +.the_big_box { + height:100%; + width:100%; + background:#fff; + overflow-x:hidden; +} +.tab-content-top { + margin-top:20rpx; +} + + + + + + +/*问题*/ +.problem { + line-height:50rpx; + margin:20rpx; + font-size:34rpx; + color:#333333; +} +.wxParse-inline { + font-size:34rpx; +} +/*选项*/ +.option_box { + margin:0 30rpx; +} +.option{ + margin:30rpx 0; + margin-bottom:50rpx; +} +.option>view { + float:left; + width:70rpx; + height:70rpx; + position:relative; +} +.option>view>image { + width:100%; + height:100%; +} +.option>view>text { + position:absolute; + width:100%; + height:100%; + text-align:center; + left:0; + line-height:70rpx; + font-size:34rpx; + color:#B3B3B3; +} +.option>text { + margin-left:15rpx; + float:left; + width:85%; + font-size:34rpx; + color:#333; + line-height:50rpx; + margin-top:10rpx; +} +/*答题卡*/ +.Answer_card { + width:100%; + height:100%; + position:fixed; + left:0; + top:0; + background:#fff; + z-index:11; + overflow-y:scroll; +} +.card_top { + height:auto; + border-bottom:10rpx solid #f5f5f5; +} +.card_redius>view { + width:100%; + height:100%; + position:relative; +} +.card_redius { + width:200rpx; + height:200rpx; + border:2px solid #6493FF; + border-radius:50%; + margin:70rpx auto; +} +.card_redius .little_text { + position:absolute; + left:0; + top:40rpx; + width:100%; + text-align:center; + color:#999999; + font-size:30rpx; +} +.big_number { + position:absolute; + width:100%; + left:0; + top:83rpx; + text-align:center; + font-size:60rpx; +} +.circle { + width:80rpx; + height:80rpx; + overflow:hidden; + margin-top:40rpx; + margin-bottom:10rpx; + margin-left:60rpx; + display:inline-block; +} +.circle>view { + width:100%; + height:100%; + position:relative; +} +.circle image { + width:100%; + height:100%; +} +.circle text { + position:absolute; + left:0; + top:0; + width:100%; + text-align:center; + height:80rpx; + line-height: 80rpx; + font-size: 34rpx; + color:#bbb; +} +.title { + height:80rpx; + line-height:80rpx; + margin-top:20rpx; +} +.title>text { + font-size:34rpx; + margin-left:30rpx; + border-left:3px solid #6493FF; + padding-left:20rpx; + font-weight:bold; +} +.card_bottom { + margin:50rpx; +} +.button { + width:48%; + height:100rpx; + display:inline-block; + position:relative; + margin:1%; +} +.button_bj { + width:100%; + height:100%; +} +.button_image { + position:absolute; + left:40rpx; + top:31rpx; + width:40rpx; + height:40rpx; +} +.button text { + width:100%; + position:absolute; + left:30rpx; + top:0; + height:100rpx; + line-height:100rpx; + text-align:center; + color:#fff; + font-size:32rpx; +} +.tag { + padding:20rpx; + border-top:25rpx solid #f5f5f5; + padding-top:40rpx; +} +.tag .class{ + display:inline-block; + border:1px solid #6493FF; + padding:10rpx 20rpx; + font-size:30rpx; + margin-right:20rpx; + color:#6493FF; + border-radius:3px; + margin-bottom:20rpx; +} +.tag .label{ + display:inline-block; + border:1px solid #888888; + padding:10rpx 20rpx; + font-size:30rpx; + margin-right:20rpx; + margin-bottom:20rpx; + color:#888888; + border-radius:3px; +} +.analysis { + border-top:1px solid #f5f5f5; + padding-top:20rpx; + min-height:300rpx; +} +.analysis_title { + height:80rpx; + padding-top:15rpx; + +} +.analysis_title_left{ + margin-left:30rpx; + font-size:34rpx; + border-left:10rpx solid #6493FF; + padding-left:30rpx; + font-weight:bold; + float:left; +} +.analysis_title_right { + float:right; + width:220rpx; + height:60rpx; + background:#6493FF; + border-radius:50rpx; + margin-right:15rpx; +} +.analysis_title_right image { + width:35rpx; + height:35rpx; + position:absolute; + left:37rpx; + top:14rpx; +} +.analysis_title_right text{ + color:#E2EBFF; + height:60rpx; + line-height:60rpx; + padding-left:83rpx; + font-size:30rpx; +} +.list { + margin:20rpx; + border-radius:25rpx; + padding:20rpx; +} +.blue { + background:#E8F1FF; + border:1px solid #6493FF; +} + +.list_top { + position:relative; + height:125rpx; +} +.nickname { + position:absolute; + left:20%; + top:20rpx; + font-size:34rpx; + width:53%; + overflow:hidden; + height:45rpx; +} +.date { + position:absolute; + left:20%; + top:65rpx; + font-size:30rpx; + color:#888; +} +.head { + width:100rpx; + height:100rpx; + position:absolute; + left:2%; + top:10rpx; +} +.ding{ + width:50rpx; + height:50rpx; + position:absolute; + right:20%; + top:25rpx; +} +.zan{ + width:50rpx; + height:50rpx; + position:absolute; + right:8%; + top:20rpx; +} +.list_top image{ + width:100%; + height:100%; + border-radius:50%; +} +.list_down { + font-size:32rpx; + color:#888; +} +.list_down image { + width:120rpx; + height:120rpx; + display:block; + float:left; + margin-right:20rpx; + margin-top:20rpx; +} +.zan_count { + position:absolute; + right:2%; + top:32rpx; + font-size:32rpx; + color:#888888; +} +.image_box { + margin-top:40rpx; +} +.add { + width:120rpx; + height:120rpx; +} +.image_box text { + display:inline-block; + line-height:50rpx; + font-size:34rpx; + margin-left:15rpx; + padding-bottom:11rpx; + color:#888; +} +textarea { + position:static; +} \ No newline at end of file diff --git a/pages/chargeshop/chargeshop.js b/pages/chargeshop/chargeshop.js new file mode 100644 index 0000000..891ee10 --- /dev/null +++ b/pages/chargeshop/chargeshop.js @@ -0,0 +1,161 @@ +const baseUrl = getApp(); +const api = require('../../config/api.js'); +const util = require('../../config/util.js'); +Page({ + + /** + * 页面的初始数据 + */ + data: { + listdata:[ + { + goodsid:1, + goodsimgurl:'https://ndnd.duiduiedu.com/uploads/pics/192187.png', + goodsname:'商品名称测试完成', + goodsintro:'这个商品的确不错哦', + goodsmoney:888, + goodsmoneyintro:'还要现金666元' + }, + { + goodsid:1, + goodsimgurl:'https://ndnd.duiduiedu.com/uploads/pics/192187.png', + goodsname:'商品名称测试完成', + goodsintro:'这个商品的确不错哦', + goodsmoney:888, + goodsmoneyintro:'还要现金666元' + }, { + goodsid:1, + goodsimgurl:'https://ndnd.duiduiedu.com/uploads/pics/192187.png', + goodsname:'商品名称测试完成', + goodsintro:'这个商品的确不错哦', + goodsmoney:888, + goodsmoneyintro:'还要现金666元' + }, { + goodsid:1, + goodsimgurl:'https://ndnd.duiduiedu.com/uploads/pics/192187.png', + goodsname:'商品名称测试完成', + goodsintro:'这个商品的确不错哦', + goodsmoney:888, + goodsmoneyintro:'还要现金666元' + }, { + goodsid:1, + goodsimgurl:'https://ndnd.duiduiedu.com/uploads/pics/192187.png', + goodsname:'商品名称测试完成', + goodsintro:'这个商品的确不错哦', + goodsmoney:888, + goodsmoneyintro:'还要现金666元' + }, + { + goodsid:1, + goodsimgurl:'https://ndnd.duiduiedu.com/uploads/pics/192187.png', + goodsname:'商品名称测试完成', + goodsintro:'这个商品的确不错哦', + goodsmoney:888, + goodsmoneyintro:'还要现金666元' + }, + { + goodsid:1, + goodsimgurl:'https://ndnd.duiduiedu.com/uploads/pics/192187.png', + goodsname:'商品名称测试完成', + goodsintro:'这个商品的确不错哦', + goodsmoney:888, + goodsmoneyintro:'还要现金666元' + }, + { + goodsid:1, + goodsimgurl:'https://ndnd.duiduiedu.com/uploads/pics/192187.png', + goodsname:'商品名称测试完成', + goodsintro:'这个商品的确不错哦', + goodsmoney:888, + goodsmoneyintro:'还要现金666元' + } + ], + userinfo:[] + + }, + + /** + * 生命周期函数--监听页面加载 + */ + onLoad: function (options) { + + baseUrl.islogin(); + }, + + /** + * 生命周期函数--监听页面初次渲染完成 + */ + onReady: function () { + + }, + + /** + * 生命周期函数--监听页面显示 + */ + onShow: function () { + this.loaddata(); + }, + loaddata:function(params) { + //加载数据 + let url = baseUrl.globalData.baseUrl + '/user/getuserinfobyopenid'; + var param = { + id: baseUrl.globalData.currentuserinfo.id + }; + //此处为使用封装的post请求 + util.post(url, param).then((res) => { + // console.log(res); + this.setData({ + userinfo: res.data + }); + + }).catch((errMsg) => { + console.log(errMsg); + }); + }, + myodersclick:function(params) { + wx.navigateTo({ + url: '/pages/myorder/myorder', + }) + }, + goodinfoclick:function(params) { + console.log(params); + wx.navigateTo({ + url: '/pages/goodsinfo/goodsinfo?id=' + }) + }, + + /** + * 生命周期函数--监听页面隐藏 + */ + onHide: function () { + + }, + + /** + * 生命周期函数--监听页面卸载 + */ + onUnload: function () { + + }, + + /** + * 页面相关事件处理函数--监听用户下拉动作 + */ + onPullDownRefresh: function () { + + }, + + /** + * 页面上拉触底事件的处理函数 + */ + onReachBottom: function () { + + }, + + /** + * 用户点击右上角分享 + */ + onShareAppMessage: function () { + + } +}) \ No newline at end of file diff --git a/pages/chargeshop/chargeshop.json b/pages/chargeshop/chargeshop.json new file mode 100644 index 0000000..f6c5e35 --- /dev/null +++ b/pages/chargeshop/chargeshop.json @@ -0,0 +1,4 @@ +{ + "usingComponents": {}, + "navigationBarTitleText": "兑换商城" +} \ No newline at end of file diff --git a/pages/chargeshop/chargeshop.wxml b/pages/chargeshop/chargeshop.wxml new file mode 100644 index 0000000..cf20446 --- /dev/null +++ b/pages/chargeshop/chargeshop.wxml @@ -0,0 +1,36 @@ + + + + + + + + {{userinfo.score}} + + + + + + + + + + + + + + + + + +

商品名称商品名称

+
+ + 文字说明文字说明文字说明 拷贝 3 + + + 666怼币 + +
+
+ \ No newline at end of file diff --git a/pages/chargeshop/chargeshop.wxss b/pages/chargeshop/chargeshop.wxss new file mode 100644 index 0000000..ad4d876 --- /dev/null +++ b/pages/chargeshop/chargeshop.wxss @@ -0,0 +1,143 @@ +/* 兑换商城的头部 */ +.shophead { + width: 666rpx; + height: 232rpx; + background: url('https://ndnd.duiduiedu.com/uploads/pics/shoptop.png') no-repeat; + background-size: cover; + margin: 0 auto; + display: flex; + flex-direction: row; + justify-content: space-between; + align-items: center; +} + +.headleft { + width: 60%; + height: 232rpx; + display: flex; + flex-direction: column; + justify-content: center; + align-items: center; +} + +.leftup image { + + width: 300rpx; + height: 90rpx; + margin: 0 50rpx; + +} + +.leftdown text { + + color: white; + font-size: 30rpx; +} + +.headright { + width: 40%; + height: 232rpx; +} + +.headright { + width: 50%; + height: 232rpx; + display: flex; + flex-direction: column; + justify-content: center; + align-items: center; +} + +.headright image { + + width: 210rpx; + height: 60rpx; +} + +/* 兑换商城的头部 */ + +/* 商品列表 */ + +.goodslist { + width: 666rpx; + margin: 0 auto; + display: flex; + flex-flow: row wrap; + align-content: flex-start; +} + +.goodsitems { + width: 210rpx; + height: 310rpx; + margin-left: 5rpx; + margin-right: 5rpx; + display: flex; + flex-direction: column; + justify-content: center; + align-items: center; + margin-top: 24rpx; +} + +.item1 { + width: 210rpx; + height: 213rpx; + background: url('https://ndnd.duiduiedu.com/uploads/pics/shopbg.png') no-repeat; + background-size: cover; + display: flex; + flex-direction: column; + justify-content: center; + align-items: center; +} + +.item1 image { + width: 192rpx; + height: 187rpx; +} + +.item2 { + width: 192rpx; + height: 32rpx; +} + +.item2 h2 { + width: 192rpx; + height: 32rpx; + white-space: nowrap; + text-overflow: ellipsis; + overflow: hidden; + font-size: 26rpx; + font-weight: 400; +} + +.item3 { + + width: 192rpx; + height: 30rpx; + margin-top: 5rpx; + line-height: 30rpx; + font-size: 22rpx; + white-space: nowrap; + text-overflow: ellipsis; + overflow: hidden; +} + +.item3 text { + + width: 192rpx; + height: 25rpx; + font-size: 22rpx; + color: #b2b2b2; +} + +.item4 { + + font-size: 24rpx; +} + +.item4 text { + + color: #f8bbd2; + font-size: 24rpx; +} + +/* 商品列表 */ \ No newline at end of file diff --git a/pages/classcommunityitemlist/classcommunityitemlist.js b/pages/classcommunityitemlist/classcommunityitemlist.js new file mode 100644 index 0000000..ddf2fb5 --- /dev/null +++ b/pages/classcommunityitemlist/classcommunityitemlist.js @@ -0,0 +1,185 @@ +const baseUrl = getApp(); +const api = require('../../config/api.js'); +const util = require('../../config/util.js'); +Page({ + + /** + * 页面的初始数据 + */ + data: { + pareid: 0, + listdata: [], + liveclickopen: 1, //2 + baseurl: baseUrl.globalData.baseimgurl, + coursename: '' + }, + + /** + * 生命周期函数--监听页面加载 + */ + onLoad: function (options) { + + this.setData({ + pareid: options.typeid + }); + + // this.pageScrollToBottom(); + + }, + + /** + * 生命周期函数--监听页面初次渲染完成 + */ + onReady: function () { + + }, + + /** + * 生命周期函数--监听页面显示 + */ + onShow: function () { + + this.getcousrethree(); + this.getcouresename(); + // this.pageScrollToBottom(); + }, + + /** + * 生命周期函数--监听页面隐藏 + */ + onHide: function () { + + }, + + /** + * 生命周期函数--监听页面卸载 + */ + onUnload: function () { + + }, + + /** + * 页面相关事件处理函数--监听用户下拉动作 + */ + onPullDownRefresh: function () { + + }, + + /** + * 页面上拉触底事件的处理函数 + */ + onReachBottom: function () { + + }, + + /** + * 用户点击右上角分享 + */ + onShareAppMessage: function () { + + }, + liveopen(e) { + let arr = []; + arr = this.data.listdata; + console.log(e.currentTarget.dataset.itemid); + console.log(this.data.listdata); + arr.forEach(function (item, index) { + + if (index == e.currentTarget.dataset.itemid) { + item['liveclickopen'] = 1; //1 + arr[index] = item; + } else { + item['liveclickopen'] = 1; //2 + arr[index] = item + } + }) + this.setData({ + listdata: arr + }) + }, + liveclose(e) { + + let arr = []; + arr = this.data.listdata; + console.log(e.currentTarget.dataset.itemid); + arr.forEach(function (item, index) { + + if (index == e.currentTarget.dataset.itemid) { + item['liveclickopen'] = 2; + arr[index] = item; + } else { + item['liveclickopen'] = 2; + arr[index] = item + } + }) + this.setData({ + listdata: arr + }) + }, + getcouresename: function () { + + let id = this.data.pareid; + const that = this; + let url = baseUrl.globalData.baseUrl + '/classcourse/getcousretwoname'; + var param = { + id: that.data.pareid, + }; + //此处为使用封装的post请求 + util.post(url, param).then((res) => { + console.log(res); + that.setData({ + coursename: res.data['name'] + }); + + }).catch((errMsg) => { + console.log(errMsg); + }); + + }, + getcousrethree: function () { + const that = this; + let url = baseUrl.globalData.baseUrl + '/classcourse/getcoursethree'; + var param = { + pareid: that.data.pareid, + user_id:wx.getStorageSync('wxuserid') + }; + //此处为使用封装的post请求 + util.post(url, param).then((res) => { + console.log(res); + that.setData({ + listdata: res.data + }); + + }).catch((errMsg) => { + console.log(errMsg); + }); + }, + itemclickurl: function (e) { + console.log(e); + // return; + let typeid = e.currentTarget.dataset.typeid; + wx.navigateTo({ + url: '/pages/classcourselearning/classcourselearning?id=' + e.currentTarget.id + '&typeid=' + typeid, + }) + }, + pageScrollToBottom() { + wx.createSelectorQuery().select('#time-mo').boundingClientRect(function (rect) { + + // rect.id // 节点的ID + rect.dataset // 节点的dataset + rect.left // 节点的左边界坐标 + rect.right // 节点的右边界坐标 + rect.top // 节点的上边界坐标 + rect.bottom // 节点的下边界坐标 + rect.width // 节点的宽度 + rect.height + console.log(rect.bottom + 2000) + // 使页面滚动到底部 + wx.pageScrollTo({ + scrollTop: rect.bottom + 2000 + }) + }).exec() + }, + + +}) \ No newline at end of file diff --git a/pages/classcommunityitemlist/classcommunityitemlist.json b/pages/classcommunityitemlist/classcommunityitemlist.json new file mode 100644 index 0000000..3e3a9cd --- /dev/null +++ b/pages/classcommunityitemlist/classcommunityitemlist.json @@ -0,0 +1,4 @@ +{ + "usingComponents": {}, + "navigationBarTitleText": "课程分类" + } \ No newline at end of file diff --git a/pages/classcommunityitemlist/classcommunityitemlist.wxml b/pages/classcommunityitemlist/classcommunityitemlist.wxml new file mode 100644 index 0000000..4771d20 --- /dev/null +++ b/pages/classcommunityitemlist/classcommunityitemlist.wxml @@ -0,0 +1,40 @@ + + + + {{coursename}} + + + + + + + + + {{itemwlmcchina.name}} + + + {{itemwlmcchina.num}} + + + + + + + + + + + {{itemchild.headpicvalue}} + + + {{itemchild.name}} + + + + + + + + + + \ No newline at end of file diff --git a/pages/classcommunityitemlist/classcommunityitemlist.wxss b/pages/classcommunityitemlist/classcommunityitemlist.wxss new file mode 100644 index 0000000..0f8d266 --- /dev/null +++ b/pages/classcommunityitemlist/classcommunityitemlist.wxss @@ -0,0 +1,127 @@ +.itemlist { + background: url('https://ndnd.duiduiedu.com/uploads/pics/kecheng001.png') no-repeat; + width: 750rpx; + height: 50rpx; + line-height: 50rpx; + background-size: cover; + display: flex; + flex-direction: row-reverse; + margin-top: 50rpx; + } + + .itemlist text { + + margin-right: 180rpx; + color: white; + } + + .collectionitems { + width: 680rpx; + height: 100rpx; + margin: 0 auto; + margin-top: 10rpx; + background: url('https://ndnd.duiduiedu.com/uploads/pics/itemlistred.png') no-repeat; + background-size: cover; + + display: flex; + flex-direction: row; + justify-content: space-between; + align-items: center; + } + + .collectionitems2 { + width: 680rpx; + height: 100rpx; + margin: 0 auto; + margin-top: 10px; + background: url('https://ndnd.duiduiedu.com/uploads/pics/itemlistblue.png') no-repeat; + background-size: cover; + + display: flex; + flex-direction: row; + justify-content: space-between; + align-items: center; + } + + .item1 { + width: 60%; + } + + .item1 text { + width: 30%; + margin-left: 65rpx; + color: black; + font-size: 30rpx; + } + + .item2 { + width: 10%; + text-align: right; + } + + .item2 text { + color: black; + font-size: 30rpx; + } + + .item3 { + width: 20%; + text-align: center; + } + + .item3 image { + width: 28rpx; + height: 16rpx; + margin-right: 50rpx; + } + + .itemsup{ + width: 620rpx; + height: 62rpx; + background-color: #dfe2e2; + margin-left: 50rpx; + display: flex; + flex-direction: row; + justify-content: flex-start; + align-items: center; + border-bottom: 1rpx solid #fff; + } + + .itemsup2{ + width: 620rpx; + height: 62rpx; + background-color: #dfe2e2; + margin-left: 50rpx; + display: flex; + flex-direction: row; + justify-content: flex-start; + align-items: center; + display: none; + } + + .upitem1{ + + width: 107rpx; + height: 45rpx; + margin-left: 30rpx; + } + + .upitem1 text{ + + margin-left: 40rpx; + font-size: 28rpx; + } + .upitem2{ + width: 70%; + } + .upitem2 text{ + margin-left: 32rpx; + font-size: 28rpx; + } + .upitem3{ + margin-right: 37rpx; + } + .upitem3 image{ + width: 24rpx; + height: 26rpx; + } \ No newline at end of file diff --git a/pages/classcourselearning/classcourselearning.js b/pages/classcourselearning/classcourselearning.js new file mode 100644 index 0000000..6e34fc8 --- /dev/null +++ b/pages/classcourselearning/classcourselearning.js @@ -0,0 +1,1346 @@ +const Apps = getApp(); +const api = require('../../config/api.js'); +const util = require('../../config/util.js'); +import Toast from '../../miniprogram_npm/@vant/weapp/toast/toast'; +Page({ + + /** + * 页面的初始数据 + */ + data: { + videurl: "https://xyg.jsjbkc.com/pics/xyg1.mp4?v" + Date.now(), + imagecount: 4, + courseid: 1, + itemdata: [], + baseurl: Apps.globalData.baseimgurl, + showview: false, + title: '', + content: '', + images: '', + upload_picture_list: [], + imagesListp: [], + imagestr: [], + imageslists: [], //图片预览 + ismdata: 1, //是否材料型数据跳转 + typeid: 1, + isdisplay: 1, + ispic: 0, + accesstoken: '', + xid: 0, + onefeilei: 0, //课程一级分类 + viptype_id: 1, //VIP类型 + videoContext: {}, // 用于绑定视频标签 + showvide: false, + videtimes: 5, + videtimes2: 10, + cousreshow: false, //检查用户是对课程有权限,对VIP用户onWaiting + headpicvalue: 0,//课程积分 + sliderValue: 0, //控制进度条slider的值, + updateState: false, //防止视频播放过程中导致的拖拽失效 + playStates: false, //控制播放 & 暂停按钮的显示 + fullScreen: false,//是否是全屏 + recommendListArr: [], + chongzhivalue: '怼币购买', + poptitle: '怼币购买后可学习14天', + isfinall: 0, //检测用户的课程是否完成 + video_data: {}, //要播放的视频对象 + show: false, + isvip:false, //是否VIP, + showdiage: false, + pathid:"", + actions: [ + { + name: '1.0倍速', + value: 1 + }, + { + name: '1.25倍速', + value: 1.25 + }, + { + name: '1.5倍速', + value: 1.5 + }, + { + name: '2.0倍速', + value: 2 + }, + ], + }, + showdiagePopup(e) { + console.log(e); + let pathid=e.currentTarget.id; + + let files = pathid; // knowfiles.currentTarget.id; + if(files.length==0){ + + wx.showToast({ + title: '暂时还没有讲义,不可下载',//提示文字 + duration: 2000,//显示时长 + mask: true,//是否显示透明蒙层,防止触摸穿透,默认:false + icon: 'none', //图标,支持"success"、"loading" + success: function () { + return; + },//接口调用成功 + fail: function () { }, //接口调用失败的回调函数 + complete: function () { } //接口调用结束的回调函数 + }) + }else{ + this.setData({ showdiage: true,pathid:pathid }); + } + + }, + + onshowdiageClose() { + this.setData({ showdiage: false }); + }, + vippopmsg: function () { + //vip课程弹出消息框 + //判断VIP课程还有多少天 + this.vipkechengday(this.data.onefeilei, wx.getStorageSync('wxuserid')); + }, + vipkechengday: function (onefeilei, wxuserid) { + //判断VIP课程还有多少天 + const that = this; + let url = Apps.globalData.baseUrl + '/user/vipscourseuserday'; + var param = { + user_id: wxuserid, + sourceid: onefeilei + }; + //此处为使用封装的post请求 + util.post(url, param).then((res) => { + console.log(res); + // 您的VIP会员剩余374天 + Toast('您的VIP会员剩余' + res + '天'); + }).catch((errMsg) => { + console.log(errMsg); + }); + }, + popmsg: function () { + //怼币课程弹出消息框 + //判断怼币课程还有多少天 + console.log(this.data.courseid); + console.log(wx.getStorageSync('wxuserid')); + this.duibikechengday(this.data.courseid, wx.getStorageSync('wxuserid')); + // Toast('您的课程还有8天到期,到期后需重新购买'); + }, + popclick: function () { + if (this.data.isdisplay == 1 && this.data.typeid != 1) { + //弹出购买信息 + this.setData({ + showvide: true + }); + this.videoContext.pause(); + + } + + }, + duibikechengday: function (sourceid, wxuserid) { + //判断怼币课程还有多少天 + //检查用户是否可以听课 + const that = this; + let url = Apps.globalData.baseUrl + '/user/setdecuserscoreday'; + var param = { + user_id: wxuserid, + sourceid: sourceid + }; + //此处为使用封装的post请求 + util.post(url, param).then((res) => { + console.log(res); + Toast('您的课程还有' + res + '天到期,到期后需重新购买'); + }).catch((errMsg) => { + console.log(errMsg); + }); + + }, + bsbtnclick: function () { + let bsdata = !this.data.show; + console.log(bsdata); + this.setData({ + show: bsdata + }) + }, + onClose: function () { + this.setData({ show: false }); + }, + onSelect: function (event) { + console.log(event.detail); + console.log(event.detail.value); + let rate = event.detail.value; + this.videoContext.playbackRate(Number(rate)); + this.onClose(); + }, + bindButtonRate: function (e) { + let rate = e.detail; + console.log(rate); + this.videoContext.playbackRate(Number(rate)); + }, + fullvideo: function (params) { + console.log(params); + // 全屏 + this.videoContext = wx.createVideoContext('myVideo'); + this.videoContext.requestFullScreen({ + direction: 1 + }); + }, + bindfullscreenchange: function (e) { + // let fullScreen = e.detail.fullScreen //值true为进入全屏,false为退出全屏 + // let videoContext = wx.createVideoContext('myVideo') + if (!e.detail.fullScreen) { + // 退出全屏 + this.videoContext.exitFullScreen() + } + else { + // 全屏 + this.videoContext = wx.createVideoContext('myVideo'); + this.videoContext.requestFullScreen({ + direction: -90 + }); + } + }, + /** + * 生命周期函数--监听页面加载 + */ + onLoad: function (options) { + + Apps.islogin(); + console.log(options); + // if (options.typeid == 3) { + // this.setData({ + // chongzhivalue: '充值VIP', + // poptitle: 'VIP期限内可无限畅学' + // }) + // } + this.setData({ + courseid: options.id, + typeid: options.typeid, + updateState: true + }); + + }, + buyclick(event) { + console.log(event.detail); + console.log("===========") + //购买是跳转,还是在这里需要判断购买 + console.log(this.data.viptype_id); + if (this.data.viptype_id == 2) { + //实现怼币购买 + this.kqcheckdescusersorce(wx.getStorageSync('wxuserid'), this.data.cousrceid, this.data.headpicvalue); + } else if (this.data.viptype_id == 3) { + //跳转购买课程页面 + wx.navigateTo({ + url: '/pages/viprecharge/viprecharge', + }) + } + }, + cancleclick() { + this.setData({ showvide: false }); + }, + videoUpdate(e) { + if (this.data.updateState) { + //判断拖拽完成后才触发更新,避免拖拽失效 + const times = e.detail.currentTime.toFixed(0); + let sliderValue = e.detail.currentTime / e.detail.duration * 100; + // console.log(sliderValue); + this.setData({ + sliderValue: sliderValue, + duration: e.detail.duration + }) + // console.log('sliderValue=>' + times); + // console.log('11试看=>' + times); + // this.publicdata(times); + + } + }, + publicdata: function (times) { + + //公共数据 + + //对2,3类型课程需要监控,一判断是否已用怼币购买过,二是判断是否为VIP用户 + if (this.data.viptype_id != 1) { + + //购买用户,怼币购买用户 + //1免费,2怼币,3VIP,4优惠值 + //先检查是否有怼币 + //增加一个两个小时的时长 + // console.log('先检查是否有怼币'); + // console.log(that.data.isdisplay); + if (this.data.isdisplay == 1) { + + if (this.data.cousreshow == false) { + + if (times >= this.data.videtimes) { + this.setData({ + showvide: true, + playStates: false, + sliderValue: times + }); + this.videoContext.pause(); + } + } + } + + } + }, + sliderChanging(e) { + + const times = e.detail.value.toFixed(0); + this.setData({ + updateState: false //拖拽过程中,不允许更新进度条 + }) + if (times >= this.data.videtimes) { + this.videoContext.pause(); + this.publicdata(times); + } else { + this.videoContext.play(); + } + }, + sliderChange(e) { + + const times = e.detail.value.toFixed(0); + this.setData({ + sliderValue: e.detail.value, + updateState: false //完成拖动后允许更新滚动条 + }) + + if (this.data.duration) { + this.videoContext.seek(e.detail.value / 100 * this.data.duration); //完成拖动后,计算对应时间并跳转到指定位置 + this.setData({ + sliderValue: e.detail.value.toFixed(0), + updateState: true //完成拖动后允许更新滚动条 + }) + } + if (times >= this.data.videtimes) { + this.videoContext.pause(); + this.setData({ + showvide: true, + duration: e.detail.duration, + playStates: false, + sliderValue: times + }); + this.publicdata(times); + + } else { + this.videoContext.play(); + } + + + }, + videoOpreation() { + + const playstats = !this.data.playStates; + this.setData({ + playStates: playstats, + }); + this.data.playStates ? this.videoContext.pause() : this.videoContext.play(); + const times = this.data.sliderValue; + console.log(times); + if (times >= this.data.videtimes) { + this.videoContext.pause(); + this.publicdata(times); + } + + }, + + /** + * 生命周期函数--监听页面初次渲染完成 + */ + onReady: function () { + this.videoContext = wx.createVideoContext('myVideo'); + this.setData({ + updateState: true + }) + }, + + /** + * 生命周期函数--监听页面显示 + */ + onShow: function () { + + this.isdisplay(); + this.getcoursedata(this.data.courseid); + // this.wrodtypelist(this.data.courseid); + // this.isjumpurl(this.data.typeid, 1); + // this.isfinallfun(this.data.courseid, wx.getStorageSync('wxuserid'), 2); //2不删除 + + }, + /** + * 生命周期函数--监听页面隐藏 + */ + onHide: function () { + + }, + + /** + * 生命周期函数--监听页面卸载 + */ + onUnload: function () { + + }, + + /** + * 页面相关事件处理函数--监听用户下拉动作 + */ + onPullDownRefresh: function () { + + }, + + /** + * 页面上拉触底事件的处理函数 + */ + onReachBottom: function () { + + }, + + /** + * 用户点击右上角分享 + */ + onShareAppMessage: function () { + + }, + messageclick: function (e) { + + wx.reLaunch({ + url: '/pages/communityinfo/communityinfo?id=' + e.currentTarget.id, + }) + }, + deletewordreply: function (par) { + + //删除留言 + const that = this; + let url = Apps.globalData.baseUrl + '/wordslist/deletewordreply'; + var param = { + wordid: par + }; + //此处为使用封装的post请求 + util.post(url, param).then((res) => { + console.log(res); + this.wrodtypelist(that.data.courseid); + + }).catch((errMsg) => { + console.log(errMsg); + }); + }, + getcoursedata: function (params) { + const that = this; + let url = Apps.globalData.baseUrl + '/classcourse/getcousrefourlist'; + var param = { + id: params, + user_id: wx.getStorageSync('wxuserid') == '' ? 0 : wx.getStorageSync('wxuserid') + }; + //此处为使用封装的post请求 + util.get(url, param).then((res) => { + console.log('res===================='); + console.log(res); + let cousrceid = res.data.id; + let headpicvalue = res.data.headpicvalue; + console.log(res.data.onefeilei); + that.setData({ + itemdata: res.data, //课程数据 + onefeilei: res.data.onefeilei, //课程一级分类 + viptype_id: res.data.viptype_id,//课程类型 + headpicvalue: headpicvalue, //课程积分 + cousrceid: cousrceid, //课程ID + videtimes: res.data.bz, //视听时长 + videurl:res.data.vodurl + }); + + if (that.data.isdisplay == 1) { + + + // if (res.data.viptype_id == 3 || res.data.viptype_id == 2) { + //检查用户是否有课程权限 + // that.checkusercousre(res.data.onefeilei); + // } + console.log(res.data.viptype_id); + if(res.data.viptype_id == 1){ + // console.log(res.data.viptype_i) + // that.setData({ + // cousreshow:true, + // isvip:true + // }) + }else{ + + // that.checkusercousre(res.data.onefeilei); + } + that.checkusercousre(res.data.onefeilei); + // if (that.data.cousreshow == false) { + // //如果怼币课程看否,购买 + // that.checkuserscource(wx.getStorageSync('wxuserid'), cousrceid, headpicvalue); + // } + + // if (res.data.viptype_id == 2) { + // //如果怼币课程看否,购买 + // that.checkuserscource(wx.getStorageSync('wxuserid'), cousrceid, headpicvalue); + // } + // if (res.data.viptype_id == 3 || res.data.viptype_id == 2) { + // //检查用户是否有课程权限 + // that.checkusercousre(res.data.onefeilei, cousrceid); + // } + } + }).catch((errMsg) => { + console.log(errMsg); + }); + }, + kqcheckdescusersorce: function (user_id, sourceid, headpicvalue) { + //扣除用户怼币 + const that = this; + let url = Apps.globalData.baseUrl + '/user/checkdescuserscore'; + var param = { + user_id: user_id, + sourceid: sourceid, + headpicvalue: headpicvalue + }; + //此处为使用封装的post请求 + util.post(url, param).then((res) => { + + console.log(res); + + that.setData({ + cousreshow: res.data + }) + + if (res.data == false) { + + + wx.showModal({ + title: '提示', + content: '您的怼币不够,需要' + headpicvalue + '怼币,才能安心学习该课程', + success (res) { + if (res.confirm) { + console.log('确定'); + wx.navigateTo({ + url: '/pages/index/index', + }) + } else if (res.cancel) { + console.log('取消'); + wx.navigateTo({ + url: '/pages/vipquanyi/vipquanyi', + }) + } + } + }) + + // wx.showModal({ + // title: '提示', + // content: '您的怼币不够,需要' + headpicvalue + '怼币,才能安心学习该课程', + // cancelText: '退出', + // confirmText: '去充怼币', + // success: function (res) { + // if (res.cancel) { + // //这个跳转是左边按钮的跳转链接 + // //这里取消操作 + // console.log('确认扣除怼币' + headpicvalue); + // wx.navigateTo({ + // url: '/pages/index/index', + // }) + + // } else { + // //这里是右边按钮的跳转链接 + // wx.navigateTo({ + // url: '/pages/vipquanyi/vipquanyi', + // }) + // } + // } + // }) + }else{ + + Toast('课程购买成功,您花费了' + headpicvalue + '怼币,请安心学习该课程'); + + // wx.showModal({ + // title: '怼币购买成功', + // content: '课程购买成功,您花费了' + headpicvalue + '怼币,请安心学习该课程', + // success (res) { + // if (res.confirm) { + // console.log('确定'); + // wx.navigateTo({ + // url: '/pages/courselearning/courselearning?id=' + that.data.courseid + "&typeid=" + that.data.typeid, + // }) + // } else if (res.cancel) { + // console.log('取消') + // } + // } + // }) + + // wx.showModal({ + // title: '怼币购买成功', + // content: '课程购买成功,您花费了' + headpicvalue + '怼币,请安心学习该课程', + // cancelText: '好的,去学习', + // confirmText: '去充怼币', + // success: function (res) { + + // // wx.navigateTo({ + // // url: '/pages/courselearning/courselearning?id=' + that.data.courseid + "&typeid=" + that.data.typeid, + // // }) + // } + // }).catch((errMsg) => { + // console.log(errMsg); + // }); + + } + }) + }, + checkuserscource: function (user_id, sourceid, headpicvalue) { + //检查用户是否可以听课 + const that = this; + let url = Apps.globalData.baseUrl + '/user/checkuserscource'; + var param = { + user_id: user_id, + sourceid: sourceid, + headpicvalue: headpicvalue + }; + //此处为使用封装的post请求 + util.post(url, param).then((res) => { + that.setData({ + cousreshow: res.data + }) + + }).catch((errMsg) => { + console.log(errMsg); + }); + + }, + finallclick: function (params) { + + if (this.data.cousreshow == false) { + wx.showToast({ + title: '试听课程,不可操作,请先购买课程',//提示文字 + duration: 2000,//显示时长 + mask: true,//是否显示透明蒙层,防止触摸穿透,默认:false + icon: 'none', //图标,支持"success"、"loading" + success: function () { + return; + },//接口调用成功 + fail: function () { }, //接口调用失败的回调函数 + complete: function () { } //接口调用结束的回调函数 + }) + return; + } + this.isfinallfun(this.data.courseid, wx.getStorageSync('wxuserid'), 1); + }, + isfinallfun: function (id, userid, typeid) { + //是否完成函数 + const that = this; + let url = Apps.globalData.baseUrl + '/classcourse/finallclick'; + var param = { + id: id, + user_id: userid, + typeid: typeid + }; + //此处为使用封装的post请求 + util.post(url, param).then((res) => { + + console.log(res); + that.setData({ + isfinall: res + }) + + }).catch((errMsg) => { + console.log(errMsg); + }); + }, + downfile: function (knowfiles) { + + if (this.data.cousreshow == false && this.data.typeid != 1) { + wx.showToast({ + title: '试听课程,不可操作,请先购买课程',//提示文字 + duration: 2000,//显示时长 + mask: true,//是否显示透明蒙层,防止触摸穿透,默认:false + icon: 'none', //图标,支持"success"、"loading" + success: function () { + return; + },//接口调用成功 + fail: function () { }, //接口调用失败的回调函数 + complete: function () { } //接口调用结束的回调函数 + }) + return; + } + + // let files = knowfiles.currentTarget.id; + let files = this.data.pathid;// knowfiles.currentTarget.id; + + + wx.downloadFile({ + url: this.data.baseurl + files, + success(res) { + + wx.shareFileMessage({ + filePath: res.tempFilePath, + success() {}, + fail: console.error, + }) + + // wx.openDocument({ + // filePath: res.tempFilePath, + // showMenu:true, //关键点 + // success() { + // // wx.showToast({ + // // title: '下载成功',//提示文字 + // // duration: 2000,//显示时长 + // // mask: true,//是否显示透明蒙层,防止触摸穿透,默认:false + // // icon: 'success', //图标,支持"success"、"loading" + // // success: function () { },//接口调用成功 + // // fail: function () { }, //接口调用失败的回调函数 + // // complete: function () { } //接口调用结束的回调函数 + // // }) + // } + // }) + } + }) + }, + downfilepoto: function (knowfiles) { + + if (this.data.cousreshow == false && this.data.typeid != 1) { + wx.showToast({ + title: '试听课程,不可操作,请先购买课程',//提示文字 + duration: 2000,//显示时长 + mask: true,//是否显示透明蒙层,防止触摸穿透,默认:false + icon: 'none', //图标,支持"success"、"loading" + success: function () { + return; + },//接口调用成功 + fail: function () { }, //接口调用失败的回调函数 + complete: function () { } //接口调用结束的回调函数 + }) + return; + } + + // let files = knowfiles.currentTarget.id; + let files = this.data.pathid + + wx.downloadFile({ + url: this.data.baseurl + files, + success(res) { + wx.openDocument({ + filePath: res.tempFilePath, + showMenu:true, //关键点 + success() { + } + }) + } + }) + }, + collectionclick: function (params) { + + let id = params.currentTarget.id; + console.log(id); + this.collectionclickdata(id, wx.getStorageSync('wxuserid')); + + }, + collectionclickdata: function (collection_id, user_id) { + const that = this; + let url = Apps.globalData.baseUrl + '/course/coursecollection'; + var param = { + id: collection_id, + user_id: user_id + }; + //此处为使用封装的post请求 + util.get(url, param).then((res) => { + console.log(res); + this.getcoursedata(that.data.courseid); + + }).catch((errMsg) => { + console.log(errMsg); + }); + }, + displayview: function () { + console.log(this.data.showview); + this.setData({ + showview: (!this.data.showview) + }) + this.getacctoken(); + this.pageScrollToBottom(); + }, + wrodtypelist: function (params) { + + //获取课程留言 + const that = this; + let url = Apps.globalData.baseUrl + '/wordslist/wordscourselist'; + var param = { + id: params, + user_id: wx.getStorageSync('wxuserid') + }; + //此处为使用封装的post请求 + util.get(url, param).then((res) => { + console.log(res); + that.setData({ + replylist: res.data + }); + + }).catch((errMsg) => { + console.log(errMsg); + }); + }, + delesourceclick: function (par) { + const that = this; + wx.showModal({ + title: '删除提示', + content: '您将删除该留言信息', + cancelText: '退出', + confirmText: '确认', + success: function (res) { + if (res.cancel) { + //这个跳转是左边按钮的跳转链接 + //这里取消操作 + console.log(res); + + } else { + //这里是右边按钮的跳转链接 + let id = par.currentTarget.id; + //删除课程留言数据 + let url = Apps.globalData.baseUrl + '/wordslist/wordscoursedelete'; + var param = { + id: id + }; + //此处为使用封装的post请求 + util.post(url, param).then((res) => { + console.log(res); + that.wrodtypelist(that.data.courseid); + + }).catch((errMsg) => { + console.log(errMsg); + }); + } + } + }) + + }, + wordsclick: function (ee) { + + let e1 = ee.currentTarget.id; + // let e2 = Apps.globalData.currentuserinfo.id; + let e2 =wx.getStorageSync('wxuserid'); + const that = this; + let url = Apps.globalData.baseUrl + '/wordslist/wordscourseclickcount'; + var param = { + words_id: e1, + user_id: e2, + }; + //此处为使用封装的post请求 + util.get(url, param).then((res) => { + console.log(res); + + }).catch((errMsg) => { + console.log(errMsg); + }); + }, + uploadpic: function () { + var that = this; + let imagesList = []; + let maxSize = 1024 * 1024; + let maxLength = 6; + let flag = true; + wx.chooseImage({ + count: 9, //最多可以选择的图片总数 + sizeType: ['original', 'compressed'], // 可以指定是原图还是压缩图,默认二者都有 + sourceType: ['album', 'camera'], // 可以指定来源是相册还是相机,默认二者都有 + success: function (res) { + wx.showToast({ + title: '正在上传...', + icon: 'loading', + mask: true, + duration: 500 + }) + for (let i = 0; i < res.tempFiles.length; i++) { + if (res.tempFiles[i].size > maxSize) { + flag = false; + console.log(111) + wx.showModal({ + content: '图片太大,不允许上传', + showCancel: false, + success: function (res) { + if (res.confirm) { + console.log('用户点击确定') + } + } + }); + } + } + if (res.tempFiles.length > maxLength) { + console.log('222'); + wx.showModal({ + content: '最多能上传' + maxLength + '张图片', + showCancel: false, + success: function (res) { + if (res.confirm) { + console.log('确定'); + } + } + }) + } + if (flag == true && res.tempFiles.length <= maxLength) { + that.setData({ + imagesListp: res.tempFilePaths + }) + that.data.imagestr = []; + var arr = ''; + for (let i = 0; i < that.data.imagesListp.length; i++) { + + // that.getpicchekc(that.data.imagesListp[i]); + + // if (that.data.ispic == 1) { + + wx.uploadFile({ + url: Apps.globalData.baseUrl + '/wordslist/uploadpics', + filePath: that.data.imagesListp[i], + name: 'file', + success: function (res) { + //打印 + console.log("------------响应数据:"); + console.log(res.data); + + var message = JSON.parse(res.data); + that.data.imagestr.push(message); + that.setData({ + imagestr: that.data.imagestr + }); + }, + }) + } + + // } + + + } + console.log(res); + }, + fail: function (res) { + console.log(res); + } + }) + + }, + // 删除图片 + removeChooseImage(e) { + let imgs = this.data.imagestr; + let { index } = e.currentTarget.dataset; + imgs.splice(index, 1); + this.setData({ + imagestr: imgs + }) + }, + // 预览图片 + previewBigImage(e) { + let that = this; + let imgs = that.data.imagestr; + let index = e.currentTarget.dataset.index; + let arr = []; + imgs.forEach(function (item, index) { + arr[index] = that.data.baseurl + item + }); + wx.previewImage({ + //当前显示图片 + current: arr[index], + //所有图片 + urls: arr + }) + }, + isjumpblack:function(){ + console.log(wx.getStorageSync('userisblack')); + if(wx.getStorageSync('userisblack')>=2){ + + wx.showToast({ + title: "您已被禁言,请联系管理员",//提示文字 + duration: 5000,//显示时长 + mask: true,//是否显示透明蒙层,防止触摸穿透,默认:false + icon: 'none', //图标,支持"success"、"loading" + success: function () { + + },//接口调用成功 + fail: function () { }, //接口调用失败的回调函数 + complete: function () { } //接口调用结束的回调函数 + }) + } + }, + formSubmit: function (e) { + + Apps.islogin(); + + if(wx.getStorageSync('userisblack')>=2){ + this.isjumpblack(); + return; + } + + let content = this.data.wordstextname; + if (content == '') { + wx.showToast({ + title: '留言内容为空,请填写内容', + icon: 'none', + duration: 1500 + }) + return false; + } + this.getmsgcheck(content); + + }, + bindTextAreaBlur: function (e) { + this.setData({ + wordstextname: e.detail.value + }) + }, + uploadpicsimage: function (e) { + + const that = this; + let url = Apps.globalData.baseUrl + '/wordslist/uploadpics'; + var param = { + url: e + }; + //此处为使用封装的post请求 + util.post(url, param).then((res) => { + console.log(res); + + }).catch((errMsg) => { + console.log(errMsg); + }); + }, + wordsadd: function (content, imagestr) { + + const that = this; + let url = Apps.globalData.baseUrl + '/wordslist/wordscouresadd'; + var param = { + content: content, + imagestr: imagestr, + userid: wx.getStorageSync('wxuserid') == '' ? 3 : wx.getStorageSync('wxuserid'), + wordsid: that.data.courseid, + xid: that.data.xid + }; + //此处为使用封装的post请求 + util.post(url, param).then((res) => { + console.log(res.data); + if (res.data > 0) { + wx.showToast({ + title: '留言内容成功', + icon: 'none', + duration: 1500 + }) + + that.wrodtypelist(that.data.courseid); + + that.setData({ + wordstextname: '', + imagestr: '' + }) + + } + + }).catch((errMsg) => { + console.log(errMsg); + }); + }, + contentclick: function (params) { + + console.log(params); + let id = params.currentTarget.id; + let xid = params.currentTarget.dataset.xid; + console.log(id); + this.setData({ + wordstextname: '回复@' + id, + showview: true, + xid: xid + }); + + // this.addinccomment(xid); + + this.getacctoken(); + + wx.showToast({ + title: '@成功,留言请移底部留言', + icon: 'none', + duration: 1500 + }) + this.pageScrollToBottom(); + + }, rdclick: function (params) { + + this.pageScrollToBottom(); + }, addinccomment: function (params) { + //增加评论数 + console.log(params); + let userid = wx.getStorageSync('wxuserid'); + const that = this; + let url = Apps.globalData.baseUrl + '/wordslist/addcommentcount'; + var param = { + id: params, + userid: userid + }; + //此处为使用封装的post请求 + util.get(url, param).then((res) => { + console.log(res); + // this.wrodtypelist(this.data.courseid) + this.wrodtypelist(that.data.courseid); + }).catch((errMsg) => { + console.log(errMsg); + }); + }, + clickbtn: function (params) { + console.log(params); + let userid = wx.getStorageSync('wxuserid'); + const that = this; + let url = Apps.globalData.baseUrl + '/wordslist/wordscourseclickcount'; + var param = { + words_id: params.currentTarget.id, + user_id: userid + }; + //此处为使用封装的post请求 + util.get(url, param).then((res) => { + console.log(res); + // this.wrodtypelist(this.data.courseid) + this.wrodtypelist(this.data.courseid); + }).catch((errMsg) => { + console.log(errMsg); + }); + }, + knowledgeclick: function (params) { + //知识要点 + if (this.data.cousreshow == false && this.data.typeid != 1) { + wx.showToast({ + title: '试听课程,不可操作,请先购买课程',//提示文字 + duration: 2000,//显示时长 + mask: true,//是否显示透明蒙层,防止触摸穿透,默认:false + icon: 'none', //图标,支持"success"、"loading" + success: function () { + return; + },//接口调用成功 + fail: function () { }, //接口调用失败的回调函数 + complete: function () { } //接口调用结束的回调函数 + }) + return; + } + + let examid = params.currentTarget.id; + if(examid>0){ + wx.navigateTo({ + url: '/pages/knowledge/knowledge?examid=' + examid, + }) + }else{ + Toast('此课程暂无知识要点'); + } + + + }, + examingclick: function (params) { + + if (this.data.cousreshow == false && this.data.typeid != 1) { + wx.showToast({ + title: '试听课程,不可操作,请先购买课程',//提示文字 + duration: 2000,//显示时长 + mask: true,//是否显示透明蒙层,防止触摸穿透,默认:false + icon: 'none', //图标,支持"success"、"loading" + success: function () { + return; + },//接口调用成功 + fail: function () { }, //接口调用失败的回调函数 + complete: function () { } //接口调用结束的回调函数 + }) + return; + } + + let examid = params.currentTarget.id; + let ismdata = this.data.ismdata; + let grouppaper_id = this.data.itemdata.grouppaper_id; + if(grouppaper_id>0){ + + + if (ismdata == 2) { + wx.navigateTo({ + url: '/pages/exammakings/exammakings?examid=' + examid + '&grouppaper_id=' + grouppaper_id, + }) + } else { + wx.navigateTo({ + url: '/pages/examing/examing?examid=' + examid + '&grouppaper_id=' + grouppaper_id, + }) + } + }else{ + + Toast('该课程无练习试题'); + } + }, + preview: function (params) { + let that = this; + console.log(params) + let currentUrl = params.currentTarget.dataset.src; + let arrindex = params.currentTarget.dataset.id; + + let rearr = that.data.replylist[arrindex].pics; + console.log(rearr); + let arr = []; + rearr.forEach(function (item, index) { + arr[index] = that.data.baseurl + item + }); + console.log(arr); + wx.previewImage({ + current: currentUrl, // 当前显示图片的http链接 + urls: arr // 需要预览的图片http链接列表 + }) + }, + isjumpurl: function (id, groupid) { + + const that = this; + let url = Apps.globalData.baseUrl + '/exam/isarrdata'; + var param = { + id: id, + groupid: groupid + }; + //此处为使用封装的post请求 + util.post(url, param).then((res) => { + console.log(res); + that.setData({ + ismdata: res.data + }); + }).catch((errMsg) => { + console.log(errMsg); + }); + }, + isdisplay: function (params) { + //是否显示视频 + const that = this; + let url = Apps.globalData.baseUrl + '/index/isdisplay'; + var param = { + pareid: params + }; + //此处为使用封装的post请求 + util.get(url, param).then((res) => { + console.log(res); + that.setData({ + isdisplay: res.data + }); + + }).catch((errMsg) => { + console.log(errMsg); + }); + + }, + getacctoken: function () { + const that = this; + let url = Apps.globalData.baseUrl + '/user/acctoken'; + var param = { + pareid: '1213' + }; + //此处为使用封装的post请求 + util.get(url, param).then((res) => { + + console.log('-=-=-=-=-=-=-=-='); + console.log(res); + wx.setStorageSync('accesstoen', res.access_token) + that.setData({ + accesstoken: res.access_token + }); + + + }).catch((errMsg) => { + console.log(errMsg); + }); + }, + getmsgcheck: function (params) { + // $url ='https://api.weixin.qq.com/wxa/msg_sec_check?access_token=' .$accessToken; + const that = this; + let url = Apps.globalData.baseUrl + '/user/checkmsg' + var param = { + "openid": wx.getStorageSync('wxopenid'), + "scene": 2, + "version": 2, + "content": params, + "access_token": that.data.accesstoken + }; + //此处为使用封装的post请求 + util.post(url, param).then((res) => { + + that.wordsadd(params, that.data.imagestr); + // if (res.errcode == "0") { + // that.wordsadd(params, that.data.imagestr) + // } else { + + // wx.showToast({ + // title: '留言内容有敏感词请重新输入',//提示文字 + // duration: 2000,//显示时长 + // mask: true,//是否显示透明蒙层,防止触摸穿透,默认:false + // icon: 'none', //图标,支持"success"、"loading" + // success: function () { },//接口调用成功 + // fail: function () { }, //接口调用失败的回调函数 + // complete: function () { } //接口调用结束的回调函数 + // }) + // } + + }).catch((errMsg) => { + console.log(errMsg); + }); + }, + checkusercousre: function (para) { + //vip课程 + //检测用户是否这个课程的权限 + Apps.islogin(); + const that = this; + let url = Apps.globalData.baseUrl + '/user/checkusercousre' + var param = { + user_id: wx.getStorageSync('wxuserid'), + courseid: para, + }; + //此处为使用封装的post请求 + util.post(url, param).then((res) => { + + console.log('// 检查一下用户是否有课程权限 cousreshow=true'); + console.log(res); + console.log(res.data); + // 检查一下用户是否有课程权限 cousreshow=true + that.setData({ + cousreshow: res.data.iscousreshow, + isvip:res.data.isvip + }); + + if(res.data.isvip==false && that.data.viptype_id==2){ + + that.checkuserscource(wx.getStorageSync('wxuserid'), that.data.cousrceid, that.data.headpicvalue); + } + + }).catch((errMsg) => { + console.log(errMsg); + }); + + }, + getpicchekc: function (params) { + // let url="https://api.weixin.qq.com/wxa/media_check_async?access_token="+wx.getStorageSync('accesstoen'); + let url = Apps.globalData.baseUrl + '/user/checkpic' + var param = { + "openid": wx.getStorageSync('wxopenid'), + "scene": 2, + "version": 2, + "media_url": params, + "media_type": 2, + "version": 2, + "access_token": wx.getStorageSync('accesstoen') + }; + //此处为使用封装的post请求 + util.post(url, param).then((res) => { + + console.log("res==========="); + console.log(res); + + this.setData({ + ispic: 1 + }) + + + }).catch((errMsg) => { + console.log(errMsg); + }); + }, + pageScrollToBottom() { + wx.createSelectorQuery().select('#time-mo').boundingClientRect(function (rect) { + + rect.id // 节点的ID + rect.dataset // 节点的dataset + rect.left // 节点的左边界坐标 + rect.right // 节点的右边界坐标 + rect.top // 节点的上边界坐标 + rect.bottom // 节点的下边界坐标 + rect.width // 节点的宽度 + rect.height + console.log(rect.bottom * 20) + // 使页面滚动到底部 + wx.pageScrollTo({ + scrollTop: rect.bottom * 20 + }) + }).exec() + }, + +}) \ No newline at end of file diff --git a/pages/classcourselearning/classcourselearning.json b/pages/classcourselearning/classcourselearning.json new file mode 100644 index 0000000..9c44bd3 --- /dev/null +++ b/pages/classcourselearning/classcourselearning.json @@ -0,0 +1,8 @@ +{ + "usingComponents": {}, + "navigationBarBackgroundColor": "#fff", + "navigationBarTextStyle": "black", + "navigationBarTitleText": "课程学习", + "backgroundColor": "#ccc", + "backgroundTextStyle": "light" + } \ No newline at end of file diff --git a/pages/classcourselearning/classcourselearning.wxml b/pages/classcourselearning/classcourselearning.wxml new file mode 100644 index 0000000..96da078 --- /dev/null +++ b/pages/classcourselearning/classcourselearning.wxml @@ -0,0 +1,163 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/pages/classcourselearning/classcourselearning.wxss b/pages/classcourselearning/classcourselearning.wxss new file mode 100644 index 0000000..c4ef157 --- /dev/null +++ b/pages/classcourselearning/classcourselearning.wxss @@ -0,0 +1,339 @@ +.courselive { + width: 750rpx; + height: 403rpx; +} + +.courselivecontinor { + background-color: #F5F5F5; +} + +.functionalarea { + + display: flex; + flex-flow: row wrap; + align-content: flex-start; + width: 750rpx; + height: 550rpx; +} + +.areaitem { + margin-top: 60rpx; + text-align: center; + width: 33%; + height: 170rpx; +} + +.areaitem image { + width: 120rpx; + height: 170rpx; +} + +.messagearea text { + + display: block; + font-size: 40rpx; + font-weight: 600rpx; + margin-left: 60rpx; +} + +.msseagehead { + display: flex; + flex-direction: row; +} + +.headleft { + margin-left: 60rpx; + margin-top: 50rpx; + width: 140rpx; + height: 140rpx; + border-radius: 50%; + overflow: hidden; +} + +.headleft image { + + width: 130rpx; + height: 133rpx; +} + +.headright { + margin-top: 80rpx; + margin-left: 23rpx; + width: 485rpx; + height: 142rpx; +} + +.headrightup text { + + font-size: 30rpx; + /* font-weight: 400rpx; */ +} + +.headrightdown { + margin-top: 10rpx; +} + +.msseagemiddle { + margin: 0 60rpx; +} + +.mssagemiddledown { + margin: 25rpx auto; +} + +.mssagemiddledown image { + + width: 100%; + height: 265rpx; +} + +.messageend { + + margin: 0 60rpx; + display: flex; + flex-direction: row; + justify-content: space-between; + +} + +.messageendleft { + padding-top: 20rpx; + width: 150rpx; + height: 30rpx; +} + +.messageendleft image { + width: 100rpx; + height: 30rpx; +} + +.messageendmiddle { + width: 150rpx; + height: 30rpx; +} + +.messageendmiddle image { + width: 35rpx; + height: 30rpx; +} + +.messageendmiddle text { + + font-size: 28rpx; + padding-left: 23rpx; +} + +.messageendright { + + width: 150rpx; + height: 30rpx; +} + +.messageendright image { + width: 35rpx; + height: 30rpx; + +} + +.messageendright text { + + font-size: 28rpx; + padding-left: 23rpx; +} + +.feigexian { + + margin: 0 60rpx; + margin-top: 60rpx; + border-bottom: 2rpx solid #ada2a2; +} + +.round-click{ + height: 61rpx; + width: 54rpx; + position: fixed; + bottom: 150rpx; + right: 20rpx; + display: flex; + align-items: center; + justify-content: center; + z-index: 9; + } + .round-click image{ + height: 61rpx; + line-height: 61rpx; + width: 54rpx; + } + + + +.areaclass{ + width: 540rpx; + min-height: 300rpx; + margin: 0 auto; + margin-top: 80rpx; + background-color: #f0f0f1; + border-radius: 5%; + } + .areaclass textarea{ + width: 540rpx; + min-height: 300rpx; + } + + + .areafooter{ + display: flex; + align-items: center; + justify-content: space-between; + width: 540rpx; + height: 60rpx; + margin: 0 auto; + margin-top: 10rpx; + } + .areafooterleft image{ + + width: 52rpx; + height: 52rpx; + + } + .areafooterright text{ + font-size: 28rpx; + font-weight: 600; + color: #217ced; + } + .areafooterright{ + width: 120rpx; + height: 56rpx; + } + .areafooterright button{ + + width: 120rpx; + height: 50rpx; + line-height: 50rpx; + font-size: 28rpx; + font-weight: 600; + color: #217ced; + border:none; + } + button::after { + border: none; + } + + .header_view_hide{ + display: none; + } + .header_view_show{ + display: block; + } + .vipimage image{ + width: 37rpx; + height: 33rpx; + position: relative; + left: -25px; + top: 83px; + } + + + .process-container image{ + + position: relative; + z-index: 99; + transform:translate(20%, -10%); + z-index: 999; + width: 60rpx; + height: 60rpx; + +} + +.slider-container { + height: 1rpx; + position: relative; + z-index: 999; + left: 50%; + top: -379%; + transform: translate(-50%, -78rpx); + z-index: 999; + width: 80%; +} +.slider{ + width: 80%; + margin: 0 auto; +} +.mod_action { + position: relative; + z-index: 999; + left:520rpx; + top:-50rpx; + border-radius: 20%; + /* transform: translate(-50%, -98rpx); */ + width: 180rpx; + height: 15rpx; + +} +.playfull{ + position: relative; + z-index: 999; + left:40rpx; + top:70rpx; + border-radius: 20%; + /* transform: translate(-50%, -98rpx); */ + width: 180rpx; + height: 120rpx; +} +.van-dropdown-menu{ + height: var(--dropdown-menu-height,28px)!important; +} +.van-dropdown-menu__item{ + background: url("https://ndnd.duiduiedu.com/uploads/pics/bsbtn.png"); + width: 300px; + height: 90rpx; + background-size:cover; + background-repeat:no-repeat; +} +.playfull image{ + width: 180rpx; + height: 80rpx; +} +.mod_action image{ + width: 180rpx; + height: 80rpx; +} + + + +.choose_upload_view { + margin-top: 30rpx; + margin-left: 10%; + flex: 1; + height: 100%; + display: flex; + align-items: center; + justify-content: flex-start; + flex-wrap: wrap; + } + .choose_upload_item { + margin-left: 38rpx; + margin-bottom: 20rpx; + position: relative; + width: 100rpx; + display: flex; + align-items: center; + } + .choose_upload_view .choose_upload_img { + width: 100rpx; + height: 100rpx; + } + .choose_upload_view .remove_img_icon { + padding: 4rpx; + position:absolute; + top: -15rpx; + right: -13rpx; + width: 28rpx; + height: 28rpx; + border-radius: 50%; + background-color: rgba(248, 236, 236, 0.5); + } + .other_upload { + margin-left: 15rpx; + width: 80rpx; + } \ No newline at end of file diff --git a/pages/classindex/classindex.js b/pages/classindex/classindex.js new file mode 100644 index 0000000..a4a68bb --- /dev/null +++ b/pages/classindex/classindex.js @@ -0,0 +1,384 @@ +const DEFAULT_PAGE = 0; +const baseUrl = getApp(); +const api = require('../../config/api.js'); +const util = require('../../config/util.js'); +const { default: toast } = require('../../miniprogram_npm/@vant/weapp/toast/toast.js'); +Page({ + + data: { + startPageX: 0, + currentView: DEFAULT_PAGE, + livesdata: [], + baseurl: baseUrl.globalData.baseimgurl, + movies: [], + active: 1, + challengeactive: 1, + toView: `card_${DEFAULT_PAGE}`, + list: [], + itemdata: [], + isdisplay: 1, + onelist: [], //一级数据 + activeshow: 1, + currentid: 1, + classid:1 //班级ID + }, + checkclassshow(event) { + //新增开关功能 + console.log(event); + console.log(event.currentTarget.id); + const id = event.currentTarget.id; + let arr1 = []; + let arr = []; + arr = this.data.onelist; + + // if (id == 1) { + + // arr.forEach(function (item, index) { + // console.log(item); + // if (item.id == 2) { + // arr1[index] = item; + // } + // }) + // this.setData({ + // onelist: arr1 + // }) + + // } else { + // arr.forEach(function (item, index) { + // console.log(item); + // if (item.id == 1) { + // arr1[index] = item; + // } + // }) + // this.setData({ + // onelist: arr1 + // }) + // } + + + + // arr.forEach(function (item, index) { + + // if (index == e.currentTarget.dataset.itemid) { + // item['liveclickopen'] = 2; + // arr[index] = item; + // } else { + // item['liveclickopen'] = 2; + // arr[index] = item + // } + // }) + // this.setData({ + // listdata: arr + // }) + + + }, + footeronChange(event) { + this.setData({ + footeractive: event.detail + }); + }, + onChangefooter(event) { + console.log(event.detail); + this.setData({ + footeractive: event.detail + }); + }, + onChange(event) { + wx.showToast({ + title: `切换到标签 ${event.detail.name}`, + icon: 'none', + }); + }, + touchStart(e) { + this.startPageX = e.changedTouches[0].pageX; + }, + touchEnd(e) { + + const moveX = e.changedTouches[0].pageX - this.startPageX; + const maxPage = this.data.list.length - 1; + if (Math.abs(moveX) >= 150) { + if (moveX > 0) { + this.currentView = this.currentView !== 0 ? this.currentView - 1 : 0; + } else { + this.currentView = this.currentView !== maxPage ? this.currentView + 1 : maxPage; + } + } + this.setData({ + toView: `card_${this.currentView}` + }); + }, + touchecard(e) { + console.log(e.currentTarget.id); + this.getindexcoursetwo(e.currentTarget.id); + this.setData({ + active: e.currentTarget.id + }) + }, + loaditem(id) { + console.log(id); + }, + cardaddclick(e) { + + console.log(e); + + }, + challengeclickleft(e) { + console.log(e.currentTarget.id); + this.setData({ + challengeactive: e.currentTarget.id + }) + }, + /** + * 生命周期函数--监听页面加载 + */ + onLoad: function (options) { + //baseUrl.islogin(); + console.log("------------==============-------------"); + console.log(options.classid); + console.log("------------==============-------------"); + + this.setData({ + classid:options.classid + }); + + }, + getpopindexcouse: function (params) { + //顶级分类 + const that = this; + let url = baseUrl.globalData.baseUrl + '/classindex/indexcoursetop'; + var param = { + id: this.data.classid + }; + //此处为使用封装的post请求 + util.get(url, param).then((res) => { + console.log(res.data[0].id); + that.setData({ + list: res.data, + active:res.data[0].id + }); + if(res.data[0].id>0){ + that.getindexcoursetwo(res.data[0].id); + } + + + }).catch((errMsg) => { + console.log(errMsg); + }); + }, + getindexcourse: function () { + const that = this; + let url = baseUrl.globalData.baseUrl + '/classindex/indexcourse'; + var param = { + id: '123456789' + }; + //此处为使用封装的post请求 + util.get(url, param).then((res) => { + console.log(res); + that.setData({ + list: res.data + }); + + }).catch((errMsg) => { + console.log(errMsg); + }); + }, + getindexcoursetwo: function (e) { + + //得到二级课程的数据 + const that = this; + let url = baseUrl.globalData.baseUrl + '/classindex/indexcoursepara'; + var param = { + pareid: e + }; + //此处为使用封装的post请求 + util.post(url, param).then((res) => { + + console.log('==================='); + console.log(res.data); + that.setData({ + onelist: res.data + }); + + }).catch((errMsg) => { + console.log(errMsg); + }); + }, + /** + * 生命周期函数--监听页面初次渲染完成 + */ + onReady: function () { + + }, + + /** + * 生命周期函数--监听页面显示 + */ + onShow: function () { + + // this.setData({ + // active: 1 + // }); + + // if (wx.getStorageSync('userinfo') != null) { + // baseUrl.globalData.currentuserinfo = wx.getStorageSync('userinfo'); + // wx.setStorageSync('wxopenid', wx.getStorageSync('userinfo').openid); + // } + this.isdisplay(); + wx.showShareMenu({ + withShareTicket: true, + menus: ['shareAppMessage', 'shareTimeline'] + }) + this.getpopindexcouse(); //顶级分类 + // this.getindexcourse(); //一级分类 + console.log("activeid"+this.data.active) + this.getindexcoursetwo(this.data.active); + // this.adsfun(); + //this.indexlives(); + this.isjumpblack(); + + }, + isjumpblack: function () { + console.log(wx.getStorageSync('userisblack')); + if (wx.getStorageSync('userisblack') == 2) { + + wx.showToast({ + title: "不允许访问该程序",//提示文字 + duration: 5000,//显示时长 + mask: true,//是否显示透明蒙层,防止触摸穿透,默认:false + icon: 'none', //图标,支持"success"、"loading" + success: function () { + wx.reLaunch({ + url: '/pages/userlogin/userlogin', + }) + },//接口调用成功 + fail: function () { }, //接口调用失败的回调函数 + complete: function () { } //接口调用结束的回调函数 + }) + } + }, + indexlives: function () { + //直播列表 + const that = this; + let url = baseUrl.globalData.baseUrl + '/lives/indexlives'; + var param = { + id: '123456789' + }; + //此处为使用封装的post请求 + util.get(url, param).then((res) => { + // console.log(res); + that.setData({ + livesdata: res.data + }); + + }).catch((errMsg) => { + console.log(errMsg); + }); + }, + adsfun: function () { + //广告 + const that = this; + let url = baseUrl.globalData.baseUrl + '/ads/index'; + var param = { + id: '123456789' + }; + //此处为使用封装的post请求 + util.get(url, param).then((res) => { + // console.log(res); + that.setData({ + movies: res.data + }); + + }).catch((errMsg) => { + console.log(errMsg); + }); + }, + livelistclick: function () { + + if (this.data.isdisplay == 1) { + // 直播列表 + wx.navigateTo({ + url: '/pages/indexlives/indexlives', + }) + } else { + wx.showToast({ + title: `功能正在开发中`, + icon: 'none', + }); + } + }, + messageclick: function () { + + wx.navigateTo({ + url: '/pages/messagelist/messagelist', + }) + }, + resclick: function () { + wx.navigateTo({ + url: '/pages/indexreslists/indexreslists', + }) + }, + courselearningclick: function (e) { + + //课程学习 + console.log(e.currentTarget.id); + wx.navigateTo({ + url: '/pages/classcommunityitemlist/classcommunityitemlist?typeid=' + e.currentTarget.id, + }) + }, + picsclick: function (e) { + console.log(e); + if (this.data.isdisplay == 1) { + console.log(e.currentTarget.id); + wx.navigateTo({ + url: '/pages/messageencyclopedias/messageencyclopedias?id=' + e.currentTarget.id, + }) + } + + }, + isdisplay: function (params) { + + const that = this; + let url = baseUrl.globalData.baseUrl + '/index/isdisplay'; + var param = { + pareid: params + }; + //此处为使用封装的post请求 + util.get(url, param).then((res) => { + console.log(res); + that.setData({ + isdisplay: res.data + }); + + }).catch((errMsg) => { + console.log(errMsg); + }); + + }, + onShareAppMessage: function (options) {//分享onShareAppMessage + return { + title: '怼怼公考', + path: `/pages/classindex/classindex`, + success: function (res) { + console.log(res, '成功') + console.info(res + '成功'); + wx.showToast({ + title: '分享成功', + }) + // 转发成功 + }, + fail: function (res) { + console.log(res + '失败'); + // 转发失败 + }, + complete: function (res) { + // 不管成功失败都会执行 + console.log(res, '成功或失败') + wx.showToast({ + title: '成功或失败', + }) + } + } + } + +}) \ No newline at end of file diff --git a/pages/classindex/classindex.json b/pages/classindex/classindex.json new file mode 100644 index 0000000..3ed55af --- /dev/null +++ b/pages/classindex/classindex.json @@ -0,0 +1,8 @@ +{ + "usingComponents": {}, + "navigationBarBackgroundColor": "#fff", + "navigationBarTextStyle": "black", + "navigationBarTitleText": "班级课程", + "backgroundColor": "#ccc", + "backgroundTextStyle": "light" + } \ No newline at end of file diff --git a/pages/classindex/classindex.wxml b/pages/classindex/classindex.wxml new file mode 100644 index 0000000..8f047f3 --- /dev/null +++ b/pages/classindex/classindex.wxml @@ -0,0 +1,104 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + {{item.name}} + + + + + + + + + + \ No newline at end of file diff --git a/pages/classindex/classindex.wxss b/pages/classindex/classindex.wxss new file mode 100644 index 0000000..4675bd4 --- /dev/null +++ b/pages/classindex/classindex.wxss @@ -0,0 +1,356 @@ +.swiper { + height: 218rpx; + width: 666rpx; + margin: 0 auto; +} + +.swiper image { + height: 100%; + width: 100%; +} +.cardgongneng{ + display: flex; + flex-wrap: wrap; + align-content: center; + justify-content:space-between; + height: 170rpx; + width: 666rpx; + margin: 25rpx auto; + border: 1rpx solid #e7d1d1; + border-radius: 2%; + box-shadow:1px 1px 1px 1px rgb(236, 234, 234); +} +.cardgongneng2{ + display: flex; + flex-wrap: wrap; + align-content: center; + justify-content:space-between; + height: 170rpx; + width: 570rpx; + margin: 0 auto; +} +.cardgongneng2 image{ + width: 85rpx; + height: 100rpx; + +} +.zhibocss { + display: flex; + flex-wrap: wrap; + align-content: flex-start; + height: 180rpx; + width: 666rpx; + margin: 50rpx auto; + background: url(https://ndnd.duiduiedu.com/uploads/pics/line.png); + background-repeat: no-repeat; + background-size: 666rpx 180rpx; + display: none; +} + +.item1 { + + width: 50rpx; + height: 150rpx; + box-sizing: border-box; + margin: 15rpx 16rpx; +} + +.itemhead { + margin-top: 20rpx; + margin-left: 20rpx; +} + +.itemhead h2 { + + font-weight: 600; + font-family: 'Arial Narrow', Arial; + font-size: large; +} + +.item1 image { + width: 50rpx; + height: 150rpx; +} + +.item2 { + width: 160rpx; + height: 160rpx; +} + +.item2 image { + margin-left: 10rpx; + width: 150rpx; + height: 160rpx; +} + +.item3 { + width: 334rpx; + height: 170rpx; +} + +.item4 { + padding-top: 10rpx; + padding-left: 15rpx; + width: 75rpx; + height: 164rpx; +} + +.item4 image { + + width: 75rpx; + height: 164rpx; +} + +.itemmiddle { + display: flex; + margin-left: 15rpx; + width: 334rpx; + height: 50rpx; +} + +.itemmiddleleft { + display: flex; + margin-top: 10rpx; + flex-direction: row; +} + +.itemmiddleleft text { + color: #AEAEAE; + align-items: center; + font-size: 24rpx; + font-weight: 400; +} + +.itemmiddleleft image { + + width: 30rpx; + height: 30rpx; + padding-right: 10rpx; +} + +.itemmiddleright { + display: flex; + margin-top: 10rpx; + margin-left: 10rpx; + flex-direction: row; +} + +.itemmiddleright text { + color: #AEAEAE; + align-items: center; + font-size: 24rpx; + font-weight: 400; +} + +.itemmiddleright image { + + width: 30rpx; + height: 30rpx; + padding-right: 10rpx; +} + +.itemend { + width: 300rpx; + overflow: hidden; + color: #AEAEAE; + line-height: 28rpx; + margin-bottom: 10rpx; + margin-left: 20rpx; + font-size: 18rpx; +} + +.curriculum { + + margin: 0 auto; + /* margin-top: 20rpx; */ + width: 686rpx; + /* height: 350rpx; */ + /* margin-bottom: 80rpx; */ +} + +.curriculumup { + + width: 750rpx; + height: 55rpx; +} + +.curriculumupstart { + float: left; + width: 660rpx; + height: 55rpx; + margin-top: 20rpx; + margin-bottom: 10rpx; +} + +.curriculumupend { + float: left; + width: 50rpx; + height: 50rpx; +} + +.scroll-box { + white-space: nowrap; + height: 100%; +} + +.card-box { + display: inline-block; +} + +.card image { + height: 55rpx; + line-height: 55rpx; + width: 211rpx; +} + +.card { + display: flex; + justify-content: center; + align-items: center; + box-sizing: border-box; + height: 55rpx; + line-height: 55rpx; + /* margin: 100rpx 200rpx; */ + font-size: 20px; + /* padding-left: 20rpx; + padding-right: 30rpx; */ + margin-left: 10rpx; + border-radius: 4px; +} +.curriculumdown { + display: flex; + flex-flow: row wrap; + align-content: flex-start; + width: 666rpx; + /* height: 295rpx; */ +} + +.curriculumitem { + display: flex; + flex-direction: column; + /* width: 33%; */ + width: 33%; + height: 150rpx; + align-items: center; + margin-top: 20rpx; + /* margin-bottom: 20rpx; */ +} + +.downup { + width: 90rpx; + height: 80rpx; + text-align: center; +} + +.downup image { + width: 80rpx; + height: 90rpx; + text-align: center; +} + +.downdown { + margin-top: 15rpx; + text-align: center; + width: 180rpx; + height: 30rpx; +} + +.downdown text { + font-size: 20rpx; + +} + + + +.curriculumupend image { + width: 50rpx; + height: 50rpx; +} + +.challenge { + width: 666rpx; + margin: 0 auto; + height: 83rpx; +} + +.challengeleft { + + float: left; + width: 429rpx; + height: 80rpx; + +} + +.challengeleft image { + + width: 440rpx; + height: 80rpx; +} + +.challengeright { + float: left; + width: 238rpx; + height: 80rpx; +} + +.challengeright image { + + width: 240rpx; + height: 80rpx; +} + + +.challenge2 { + width: 666rpx; + margin: 0 auto; + height: 83rpx; +} + +.challenge2left { + + float: left; + + width: 238rpx; + height: 80rpx; + +} + +.challenge2left image { + + + width: 253rpx; + height: 80rpx; +} + +.challenge2right { + float: left; + width: 429rpx; + height: 80rpx; +} + +.challenge2right image { + + width: 432rpx; + height: 80rpx; +} + +.van-tabbar-item { + height: 298rpx; + width: 130rpx; +} + +/***parent**/ +.parentclass { + margin: 0 auto; + width: 666rpx; +} +.parentimage{ + width: 200rpx; + height: 30rpx; + margin-top: 10rpx; + +} +.parentimage image{ + width: 200rpx; + height: 30rpx; +} diff --git a/pages/collectioncourse/collectioncourse.js b/pages/collectioncourse/collectioncourse.js new file mode 100644 index 0000000..e32e8a4 --- /dev/null +++ b/pages/collectioncourse/collectioncourse.js @@ -0,0 +1,152 @@ +const baseUrl = getApp(); +const api = require('../../config/api.js'); +const util = require('../../config/util.js'); +Page({ + + /** + * 页面的初始数据 + */ + data: { + listdata:[], + baseurl: baseUrl.globalData.baseimgurl, + liveclickopen: 2, + }, + + /** + * 生命周期函数--监听页面加载 + */ + onLoad: function (options) { + + baseUrl.islogin(); + }, + + /** + * 生命周期函数--监听页面初次渲染完成 + */ + onReady: function () { + + }, + + /** + * 生命周期函数--监听页面显示 + */ + onShow: function () { + this.getcollectioncourse(); + }, + + /** + * 生命周期函数--监听页面隐藏 + */ + onHide: function () { + + }, + + /** + * 生命周期函数--监听页面卸载 + */ + onUnload: function () { + + }, + + /** + * 页面相关事件处理函数--监听用户下拉动作 + */ + onPullDownRefresh: function () { + + }, + + /** + * 页面上拉触底事件的处理函数 + */ + onReachBottom: function () { + + }, + + /** + * 用户点击右上角分享 + */ + onShareAppMessage: function () { + + }, + liveopen(e) { + let arr = []; + console.log('---------'); + console.log(this.data.listdata); + arr = Array.from(this.data.listdata); + // arr = this.data.listdata; + // console.log(e.currentTarget.dataset.itemid); + console.log(arr); + arr.forEach(function(item, index) { + + if (index == e.currentTarget.dataset.itemid) { + item['liveclickopen'] = 1; + arr[index] = item; + } else { + item['liveclickopen'] = 2; + arr[index] = item + } + }); + console.log(arr); + this.setData({ + listdata: arr + }) + }, + liveclose(e) { + + let arr = []; + arr = Array.from(this.data.listdata); + console.log(e.currentTarget.dataset.itemid); + arr.forEach(function (item, index) { + + if (index == e.currentTarget.dataset.itemid) { + item['liveclickopen'] = 2; + arr[index] = item; + } else { + item['liveclickopen'] = 2; + arr[index] = item + } + }); + console.log(arr); + this.setData({ + listdata: arr + }) + }, + communityclick:function(e){ + + console.log(e.currentTarget.id); + wx.navigateTo({ + url: '/pages/courselearning/courselearning?id='+e.currentTarget.id, + }) + }, + collectioncourseclick:function(params) { + wx.navigateTo({ + url: '/pages/collectionsub/collectionsub', + }) + }, + getcollectioncourse:function () { + const that = this; + let url = baseUrl.globalData.baseUrl + '/course/mycollectcourse'; + var param = { + user_id: wx.getStorageSync('wxuserid')==null?3:wx.getStorageSync('wxuserid'), + }; + //此处为使用封装的post请求 + util.post(url, param).then((res) => { + console.log(res.data); + that.setData({ + listdata: res.data + }); + + }).catch((errMsg) => { + console.log(errMsg); + }); + }, + itemclickurl:function(e){ + console.log(e); + // return; + let typeid=e.currentTarget.dataset.typeid; + wx.navigateTo({ + url: '/pages/courselearning/courselearning?id=' + e.currentTarget.id+'&typeid='+typeid, + }) + } + +}) \ No newline at end of file diff --git a/pages/collectioncourse/collectioncourse.json b/pages/collectioncourse/collectioncourse.json new file mode 100644 index 0000000..40a6faa --- /dev/null +++ b/pages/collectioncourse/collectioncourse.json @@ -0,0 +1,4 @@ +{ + "usingComponents": {}, + "navigationBarTitleText": "收藏课程" +} \ No newline at end of file diff --git a/pages/collectioncourse/collectioncourse.wxml b/pages/collectioncourse/collectioncourse.wxml new file mode 100644 index 0000000..33673fa --- /dev/null +++ b/pages/collectioncourse/collectioncourse.wxml @@ -0,0 +1,36 @@ + + + + + + + + + + + + {{itemwlmcchina.gname}} + + + {{itemwlmcchina.num}} + + + + + + + + + + {{item.headpicvalue}} + + + {{item.name}} + + + + + + + + \ No newline at end of file diff --git a/pages/collectioncourse/collectioncourse.wxss b/pages/collectioncourse/collectioncourse.wxss new file mode 100644 index 0000000..71f7c7b --- /dev/null +++ b/pages/collectioncourse/collectioncourse.wxss @@ -0,0 +1,126 @@ +.itemlist { + /* background: url('https://ndnd.duiduiedu.com/uploads/pics/kecheng001.png') no-repeat; */ + width: 750rpx; + height: 50rpx; + line-height: 50rpx; + background-size: cover; + display: flex; + flex-direction: row-reverse; + margin-top: 50rpx; +} + +.itemlist image { + + width: 750rpx; + height: 50rpx; +} + +.collectionitems { + width: 680rpx; + height: 100rpx; + margin: 0 auto; + margin-top: 35rpx; + background: url('https://ndnd.duiduiedu.com/uploads/pics/itemlistred.png') no-repeat; + background-size: cover; + + display: flex; + flex-direction: row; + justify-content: space-between; + align-items: center; +} + +.collectionitems2 { + width: 680rpx; + height: 100rpx; + margin: 0 auto; + margin-top: 35rpx; + background: url('https://ndnd.duiduiedu.com/uploads/pics/itemlistblue.png') no-repeat; + background-size: cover; + + display: flex; + flex-direction: row; + justify-content: space-between; + align-items: center; +} + +.item1 { + width: 33%; +} + +.item1 text { + width: 40%; + margin-left: 65rpx; + color: black; + font-size: 30rpx; +} + +.item2 { + width: 40%; + text-align: right; +} + +.item2 text { + color: black; + font-size: 30rpx; +} + +.item3 { + width: 20%; + text-align: center; +} + +.item3 image { + width: 28rpx; + height: 16rpx; + margin-right: 50rpx; +} + +.itemsup{ + width: 620rpx; + height: 62rpx; + background-color: #dfe2e2; + margin-left: 50rpx; + display: flex; + flex-direction: row; + justify-content: flex-start; + align-items: center; +} + +.itemsup2{ + width: 620rpx; + height: 62rpx; + background-color: #dfe2e2; + margin-left: 50rpx; + display: flex; + flex-direction: row; + justify-content: flex-start; + align-items: center; + display: none; +} + +.upitem1{ + + + width: 100rpx; + height: 45rpx; + margin-left: 30rpx; +} + +.upitem1 text{ + margin-left: 40rpx; + font-size: 28rpx; +} +.upitem2{ + width: 70%; +} +.upitem2 text{ + margin-left: 32rpx; + font-size: 28rpx; +} +.upitem3{ + margin-right: 37rpx; +} +.upitem3 image{ + width: 12rpx; + height: 26rpx; +} \ No newline at end of file diff --git a/pages/collectionsub/collectionsub.js b/pages/collectionsub/collectionsub.js new file mode 100644 index 0000000..78950f3 --- /dev/null +++ b/pages/collectionsub/collectionsub.js @@ -0,0 +1,152 @@ +const baseUrl = getApp(); +const api = require('../../config/api.js'); +const util = require('../../config/util.js'); +Page({ + + /** + * 页面的初始数据 + */ + data: { + listdata:[], + baseurl: baseUrl.globalData.baseimgurl, + liveclickopen: 2, + }, + + /** + * 生命周期函数--监听页面加载 + */ + onLoad: function (options) { + + baseUrl.islogin(); + }, + + /** + * 生命周期函数--监听页面初次渲染完成 + */ + onReady: function () { + + }, + + /** + * 生命周期函数--监听页面显示 + */ + onShow: function () { + this.getcollectioncourse(); + }, + + /** + * 生命周期函数--监听页面隐藏 + */ + onHide: function () { + + }, + + /** + * 生命周期函数--监听页面卸载 + */ + onUnload: function () { + + }, + + /** + * 页面相关事件处理函数--监听用户下拉动作 + */ + onPullDownRefresh: function () { + + }, + + /** + * 页面上拉触底事件的处理函数 + */ + onReachBottom: function () { + + }, + + /** + * 用户点击右上角分享 + */ + onShareAppMessage: function () { + + }, + liveopen(e) { + let arr = []; + console.log('---------'); + console.log(this.data.listdata); + arr = Array.from(this.data.listdata); + // arr = this.data.listdata; + // console.log(e.currentTarget.dataset.itemid); + console.log(arr); + arr.forEach(function(item, index) { + + if (index == e.currentTarget.dataset.itemid) { + item['liveclickopen'] = 1; + arr[index] = item; + } else { + item['liveclickopen'] = 2; + arr[index] = item + } + }); + console.log(arr); + this.setData({ + listdata: arr + }) + }, + liveclose(e) { + + let arr = []; + arr = Array.from(this.data.listdata); + console.log(e.currentTarget.dataset.itemid); + arr.forEach(function (item, index) { + + if (index == e.currentTarget.dataset.itemid) { + item['liveclickopen'] = 2; + arr[index] = item; + } else { + item['liveclickopen'] = 2; + arr[index] = item + } + }); + console.log(arr); + this.setData({ + listdata: arr + }) + }, + communityclick:function(e){ + + console.log(e.currentTarget.id); + wx.navigateTo({ + url: '/pages/courselearning/courselearning?id='+e.currentTarget.id, + }) + }, + collectioncourseclick:function(params) { + wx.navigateTo({ + url: '/pages/collectioncourse/collectioncourse', + }) + }, + getcollectioncourse:function () { + const that = this; + let url = baseUrl.globalData.baseUrl + '/exam/mycollectexam'; + var param = { + user_id: wx.getStorageSync('wxuserid')==null?3:wx.getStorageSync('wxuserid'), + }; + //此处为使用封装的post请求 + util.post(url, param).then((res) => { + console.log(res.data); + that.setData({ + listdata: res.data + }); + + }).catch((errMsg) => { + console.log(errMsg); + }); + }, + itemclickurl:function(e){ + console.log(e); + // return; + let typeid=e.currentTarget.dataset.typeid; + wx.navigateTo({ + url: '/pages/explainnote/explainnote?id=' + e.currentTarget.id+'&typeid='+typeid, + }) + } + +}) \ No newline at end of file diff --git a/pages/collectionsub/collectionsub.json b/pages/collectionsub/collectionsub.json new file mode 100644 index 0000000..40a6faa --- /dev/null +++ b/pages/collectionsub/collectionsub.json @@ -0,0 +1,4 @@ +{ + "usingComponents": {}, + "navigationBarTitleText": "收藏课程" +} \ No newline at end of file diff --git a/pages/collectionsub/collectionsub.wxml b/pages/collectionsub/collectionsub.wxml new file mode 100644 index 0000000..234867d --- /dev/null +++ b/pages/collectionsub/collectionsub.wxml @@ -0,0 +1,35 @@ + + + + + + + + + + + {{itemwlmcchina.gname}} + + + {{itemwlmcchina.num}} + + + + + + + + + + {{item.headpicvalue}} + + + {{item.name}} + + + + + + + + \ No newline at end of file diff --git a/pages/collectionsub/collectionsub.wxss b/pages/collectionsub/collectionsub.wxss new file mode 100644 index 0000000..71f7c7b --- /dev/null +++ b/pages/collectionsub/collectionsub.wxss @@ -0,0 +1,126 @@ +.itemlist { + /* background: url('https://ndnd.duiduiedu.com/uploads/pics/kecheng001.png') no-repeat; */ + width: 750rpx; + height: 50rpx; + line-height: 50rpx; + background-size: cover; + display: flex; + flex-direction: row-reverse; + margin-top: 50rpx; +} + +.itemlist image { + + width: 750rpx; + height: 50rpx; +} + +.collectionitems { + width: 680rpx; + height: 100rpx; + margin: 0 auto; + margin-top: 35rpx; + background: url('https://ndnd.duiduiedu.com/uploads/pics/itemlistred.png') no-repeat; + background-size: cover; + + display: flex; + flex-direction: row; + justify-content: space-between; + align-items: center; +} + +.collectionitems2 { + width: 680rpx; + height: 100rpx; + margin: 0 auto; + margin-top: 35rpx; + background: url('https://ndnd.duiduiedu.com/uploads/pics/itemlistblue.png') no-repeat; + background-size: cover; + + display: flex; + flex-direction: row; + justify-content: space-between; + align-items: center; +} + +.item1 { + width: 33%; +} + +.item1 text { + width: 40%; + margin-left: 65rpx; + color: black; + font-size: 30rpx; +} + +.item2 { + width: 40%; + text-align: right; +} + +.item2 text { + color: black; + font-size: 30rpx; +} + +.item3 { + width: 20%; + text-align: center; +} + +.item3 image { + width: 28rpx; + height: 16rpx; + margin-right: 50rpx; +} + +.itemsup{ + width: 620rpx; + height: 62rpx; + background-color: #dfe2e2; + margin-left: 50rpx; + display: flex; + flex-direction: row; + justify-content: flex-start; + align-items: center; +} + +.itemsup2{ + width: 620rpx; + height: 62rpx; + background-color: #dfe2e2; + margin-left: 50rpx; + display: flex; + flex-direction: row; + justify-content: flex-start; + align-items: center; + display: none; +} + +.upitem1{ + + + width: 100rpx; + height: 45rpx; + margin-left: 30rpx; +} + +.upitem1 text{ + margin-left: 40rpx; + font-size: 28rpx; +} +.upitem2{ + width: 70%; +} +.upitem2 text{ + margin-left: 32rpx; + font-size: 28rpx; +} +.upitem3{ + margin-right: 37rpx; +} +.upitem3 image{ + width: 12rpx; + height: 26rpx; +} \ No newline at end of file diff --git a/pages/communityinfo/communityinfo.js b/pages/communityinfo/communityinfo.js new file mode 100644 index 0000000..df4aeec --- /dev/null +++ b/pages/communityinfo/communityinfo.js @@ -0,0 +1,627 @@ +const Apps = getApp(); +const api = require('../../config/api.js'); +const util = require('../../config/util.js'); +import Toast from '../../miniprogram_npm/@vant/weapp/toast/toast'; +Page({ + + /** + * 页面的初始数据 + */ + data: { + id: 0, + title: '动态修改', + imagecount: 4, + indeximagecount: 4, + baseurl: Apps.globalData.baseimgurl, + indexlist: [], + replylist: [], + wordsid: 0, + wordstextname: '', + title: '', + content: '', + images: '', + upload_picture_list: [], + imagesListp: [], + imagestr: [], + accesstoken: '', + scrollTop: 0, + ispic: 0, + jztype:1 + }, + + /** + * 生命周期函数--监听页面加载 + */ + onLoad: function (options) { + // console.log(options); + this.setData({ + id: options.id, + jztype:options.jztype + }); + if(options.jztype==2){ + this.pageScrollToBottom(); + } + }, + + /** + * 生命周期函数--监听页面初次渲染完成 + */ + onReady: function () { + + }, + + /** + * 生命周期函数--监听页面显示 + */ + onShow: function () { + + this.getwordsinfo(this.data.id); + this.getwordsreply(); + }, + + /** + * 生命周期函数--监听页面隐藏 + */ + onHide: function () { + + }, + + /** + * 生命周期函数--监听页面卸载 + */ + onUnload: function () { + + }, + + /** + * 页面相关事件处理函数--监听用户下拉动作 + */ + onPullDownRefresh: function () { + + }, + + /** + * 页面上拉触底事件的处理函数 + */ + onReachBottom: function () { + + }, + + /** + * 用户点击右上角分享 + */ + onShareAppMessage: function () { + + }, + deleteword:function(par){ + //删除留言 + const that = this; + let url = Apps.globalData.baseUrl + '/wordslist/deleteword'; + var param = { + wordid: par + }; + //此处为使用封装的post请求 + util.post(url, param).then((res) => { + console.log(res); + + this.getwordsinfo(that.data.id); + this.getwordsreply(); + + }).catch((errMsg) => { + console.log(errMsg); + }); + }, + deletewordreply:function(par){ + //删除留言 + const that = this; + let url = Apps.globalData.baseUrl + '/indexclasslist/deletewordreply'; + var param = { + wordid: par + }; + //此处为使用封装的post请求 + util.post(url, param).then((res) => { + console.log(res); + + this.getwordsinfo(that.data.id); + this.getwordsreply(); + + }).catch((errMsg) => { + console.log(errMsg); + }); + }, + getwordsinfo: function (e) { + const that = this; + let url = Apps.globalData.baseUrl + '/indexclasslist/getsinglewords'; + var param = { + id: e, + user_id:wx.getStorageSync('wxuserid') + }; + //此处为使用封装的post请求 + util.post(url, param).then((res) => { + console.log(res); + + that.setData({ + indexlist: res.data, + wordsid: res.data.id + }); + + }).catch((errMsg) => { + console.log(errMsg); + }); + }, + wordsclick: function (ee) { + + let e1 = ee.currentTarget.id; + let e2 = wx.getStorageSync('wxuserid'); + const that = this; + let url = Apps.globalData.baseUrl + '/indexclasslist/wordsclickcount'; + var param = { + words_id: e1, + user_id: e2, + }; + //此处为使用封装的post请求 + util.get(url, param).then((res) => { + + this.getwordsinfo(this.data.id); + this.getwordsreply(); + + }).catch((errMsg) => { + console.log(errMsg); + }); + }, + getwordsreply: function () { + + const that = this; + let url = Apps.globalData.baseUrl + '/indexclasslist/wordsreply'; + var param = { + wordsid: that.data.id, + user_id:wx.getStorageSync('wxuserid') + }; + //此处为使用封装的post请求 + util.get(url, param).then((res) => { + + that.setData({ + replylist: res.data + }); + + }).catch((errMsg) => { + console.log(errMsg); + }); + }, + uploadpic: function () { + var that = this; + let imagesList = []; + let maxSize = 1024 * 1024; + let maxLength = 6; + let flag = true; + wx.chooseImage({ + count: 9, //最多可以选择的图片总数 + sizeType: ['original', 'compressed'], // 可以指定是原图还是压缩图,默认二者都有 + sourceType: ['album', 'camera'], // 可以指定来源是相册还是相机,默认二者都有 + success: function (res) { + wx.showToast({ + title: '正在上传...', + icon: 'loading', + mask: true, + duration: 500 + }) + for (let i = 0; i < res.tempFiles.length; i++) { + if (res.tempFiles[i].size > maxSize) { + flag = false; + console.log(111) + wx.showModal({ + content: '图片太大,不允许上传', + showCancel: false, + success: function (res) { + if (res.confirm) { + console.log('用户点击确定') + } + } + }); + } + } + if (res.tempFiles.length > maxLength) { + + wx.showModal({ + content: '最多能上传' + maxLength + '张图片', + showCancel: false, + success: function (res) { + if (res.confirm) { + console.log('确定'); + } + } + }) + } + if (flag == true && res.tempFiles.length <= maxLength) { + that.setData({ + imagesListp: res.tempFilePaths + }) + that.data.imagestr = []; + var arr = ''; + for (let i = 0; i < that.data.imagesListp.length; i++) { + + // that.getpicchekc(that.data.imagesListp[i]); + + // if (that.data.ispic == 1) { + + wx.uploadFile({ + url: Apps.globalData.baseUrl + '/indexclasslist/uploadpics', + filePath: that.data.imagesListp[i], + name: 'file', + success: function (res) { + //打印 + console.log("------------响应数据:"); + console.log(res.data); + var message = JSON.parse(res.data); + that.data.imagestr.push(message); + that.setData({ + imagestr: that.data.imagestr + }); + }, + }) + // } + } + + } + console.log(res); + }, + fail: function (res) { + console.log(res); + } + }) + + }, + isjumpblack:function(){ + console.log(wx.getStorageSync('userisblack')); + if(wx.getStorageSync('userisblack')>=2){ + + wx.showToast({ + title: "您已被禁言,请联系管理员",//提示文字 + duration: 5000,//显示时长 + mask: true,//是否显示透明蒙层,防止触摸穿透,默认:false + icon: 'none', //图标,支持"success"、"loading" + success: function () { + + },//接口调用成功 + fail: function () { }, //接口调用失败的回调函数 + complete: function () { } //接口调用结束的回调函数 + }) + } + }, + formSubmit: function (e) { + + Apps.islogin(); + this.getacctoken(); + + if(wx.getStorageSync('userisblack')>=2){ + this.isjumpblack(); + return; + } + + this.setData({ + wordstextname:e.detail.value.wordsname + }) + // let content = this.data.wordstextname; + let content=e.detail.value.wordsname; + if (content == '') { + wx.showToast({ + title: '留言内容为空,请填写内容', + icon: 'none', + duration: 1500 + }) + return false; + } + + this.getmsgcheck(content, this.data.accesstoken); + // this.pageScrollToBottom(); + + }, + bindTextAreaBlur: function (e) { + this.setData({ + wordstextname: e.detail.value + }) + }, + uploadpicsimage: function (e) { + + const that = this; + let url = Apps.globalData.baseUrl + '/indexclasslist/uploadpics'; + var param = { + url: e + }; + //此处为使用封装的post请求 + util.post(url, param).then((res) => { + console.log(res); + + }).catch((errMsg) => { + console.log(errMsg); + }); + }, + wordsadd: function (content, imagestr) { + + const that = this; + let url = Apps.globalData.baseUrl + '/indexclasslist/wordsadd'; + var param = { + content: content, + imagestr: imagestr, + userid: wx.getStorageSync('wxuserid') == '' ? 3 : wx.getStorageSync('wxuserid'), + wordsid: that.data.id + }; + //此处为使用封装的post请求 + util.post(url, param).then((res) => { + console.log(res.data); + if (res.data > 0) { + wx.showToast({ + title: '留言内容成功', + icon: 'none', + duration: 1500 + }) + that.getwordsinfo(that.data.id); + that.getwordsreply(); + that.setData({ + wordstextname: '', + imagestr:[] + }) + } + + }).catch((errMsg) => { + console.log(errMsg); + }); + }, + contentclick: function (params) { + + let id = params.currentTarget.id; + let xid = params.currentTarget.dataset.xid; + this.setData({ + wordstextname: '@' + id + }); + this.addinccomment(xid) + wx.showToast({ + title: '@成功,请移底部留言',//提示文字 + duration: 2000,//显示时长 + mask: true,//是否显示透明蒙层,防止触摸穿透,默认:false + icon: 'success', //图标,支持"success"、"loading" + success: function () { },//接口调用成功 + fail: function () { }, //接口调用失败的回调函数 + complete: function () { } //接口调用结束的回调函数 + }) + + this.pageScrollToBottom(); + + }, + deletebtnclick: function (params) { + + //删除主贴,看是否是自己的 + console.log(params); + // Toast('删除成功'); + const that = this; + wx.showModal({ + title: '删除提示', + content: '您将删除该留言信息', + cancelText: '退出', + confirmText: '确认', + success: function (res) { + if (res.cancel) { + //这个跳转是左边按钮的跳转链接 + //这里取消操作 + console.log(res); + + } else { + let wordid=params.currentTarget.id; + that.deleteword(wordid); + } + } + }) + + + + }, + deletebtnclickly:function(params){ + //删除回复贴,看是否是自己的 + console.log(params); + // let wordid=params.currentTarget.id; + // this.deletewordreply(wordid); + // Toast('删除成功'); + + const that = this; + wx.showModal({ + title: '删除提示', + content: '您将删除该留言信息', + cancelText: '退出', + confirmText: '确认', + success: function (res) { + if (res.cancel) { + //这个跳转是左边按钮的跳转链接 + //这里取消操作 + console.log(res); + + } else { + let wordid=params.currentTarget.id; + that.deletewordreply(wordid); + } + } + }) + + }, + addinccomment: function (params) { + //增加评论数 + let userid = wx.getStorageSync('wxuserid'); + const that = this; + let url = Apps.globalData.baseUrl + '/indexclasslist/addcommentrepycount'; + var param = { + id: params, + userid: userid + }; + //此处为使用封装的post请求 + util.get(url, param).then((res) => { + console.log(res); + // this.wrodtypelist(this.data.courseid) + }).catch((errMsg) => { + console.log(errMsg); + }); + }, + // 删除图片 + removeChooseImage(e) { + let imgs = this.data.imagestr; + let { index } = e.currentTarget.dataset; + imgs.splice(index, 1); + this.setData({ + imagestr: imgs + }) + }, + // 预览图片 + previewBigImage(e) { + let that = this; + let imgs = that.data.imagestr; + let index = e.currentTarget.dataset.index; + let arr = []; + imgs.forEach(function (item, index) { + arr[index] = that.data.baseurl + item + }); + wx.previewImage({ + //当前显示图片 + current: arr[index], + //所有图片 + urls: arr + }) + }, + preview: function (params) { + let that = this; + console.log(params) + let currentUrl = params.currentTarget.dataset.src; + let arrindex = params.currentTarget.dataset.id; + let rearr = that.data.replylist[arrindex].pics; + console.log(rearr); + let arr = []; + rearr.forEach(function (item, index) { + arr[index] = that.data.baseurl + item + }); + console.log(arr); + wx.previewImage({ + current: currentUrl, // 当前显示图片的http链接 + urls: arr // 需要预览的图片http链接列表 + }) + }, + preview2: function (params) { + let that = this; + let currentUrl = params.currentTarget.dataset.src; + let arrindex = params.currentTarget.dataset.id; + let rearr = that.data.indexlist[arrindex].pics; + console.log(rearr); + let arr = []; + rearr.forEach(function (item, index) { + arr[index] = that.data.baseurl + item + }); + wx.previewImage({ + current: currentUrl, // 当前显示图片的http链接 + urls: arr // 需要预览的图片http链接列表 + }) + }, communityinfoclick: function (e) { + //社区留言信息 + wx.navigateTo({ + url: '/pages/communityinfo/communityinfo?id=' + e.currentTarget.id, + }) + }, + getacctoken: function () { + const that = this; + let url = Apps.globalData.baseUrl + '/user/acctoken'; + var param = { + pareid: '1213' + }; + //此处为使用封装的post请求 + util.get(url, param).then((res) => { + + wx.setStorageSync('accesstoen', res.access_token); + that.setData({ + accesstoken: res.access_token + }); + + + }).catch((errMsg) => { + console.log(errMsg); + }); + }, + getmsgcheck: function (params, accesstoken) { + // $url ='https://api.weixin.qq.com/wxa/msg_sec_check?access_token=' .$accessToken; + const that = this; + // let url = 'https://api.weixin.qq.com/wxa/msg_sec_check?access_token='+wx.getStorageSync('accesstoen'); + let url = Apps.globalData.baseUrl + '/user/checkmsg' + var param = { + "openid": wx.getStorageSync('wxopenid'), + "scene": 2, + "version": 2, + "content": params, + "access_token": accesstoken //that.data.accesstoken + }; + //此处为使用封装的post请求 + util.post(url, param).then((res) => { + console.log(params, that.data.imagestr); + + that.wordsadd(params, that.data.imagestr); + + // if (res.errcode == "0") { + // that.wordsadd(params, that.data.imagestr); + // }else { + + // wx.showToast({ + // title: '留言内容有敏感词请重新输入',//提示文字 + // duration: 2000,//显示时长 + // mask: true,//是否显示透明蒙层,防止触摸穿透,默认:false + // icon: 'none', //图标,支持"success"、"loading" + // success: function () { },//接口调用成功 + // fail: function () { }, //接口调用失败的回调函数 + // complete: function () { } //接口调用结束的回调函数 + // }) + // } + + }).catch((errMsg) => { + console.log(errMsg); + }); + }, + getpicchekc: function (params) { + // let url="https://api.weixin.qq.com/wxa/media_check_async?access_token="+wx.getStorageSync('accesstoen'); + + let url = Apps.globalData.baseUrl + '/user/checkpic' + var param = { + "openid": wx.getStorageSync('wxopenid'), + "scene": 2, + "version": 2, + "media_url": params, + "media_type": 2, + "version": 2, + "access_token": wx.getStorageSync('accesstoen') + }; + + //此处为使用封装的post请求 + util.post(url, param).then((res) => { + + console.log("res==========="); + console.log(res); + this.setData({ + ispic: 1 + }) + + }).catch((errMsg) => { + console.log(errMsg); + }); + }, + pageScrollToBottom() { + wx.createSelectorQuery().select('#time-mo').boundingClientRect(function (rect) { + + // rect.id // 节点的ID + rect.dataset // 节点的dataset + rect.left // 节点的左边界坐标 + rect.right // 节点的右边界坐标 + rect.top // 节点的上边界坐标 + rect.bottom // 节点的下边界坐标 + rect.width // 节点的宽度 + rect.height + console.log(rect.bottom * 15) + console.log(rect.bottom) + // 使页面滚动到底部 + wx.pageScrollTo({ + scrollTop: rect.bottom * 15 + }) + }).exec() + }, + +}) \ No newline at end of file diff --git a/pages/communityinfo/communityinfo.json b/pages/communityinfo/communityinfo.json new file mode 100644 index 0000000..88569bd --- /dev/null +++ b/pages/communityinfo/communityinfo.json @@ -0,0 +1,8 @@ +{ + "usingComponents": {}, + "navigationBarBackgroundColor": "#fff", + "navigationBarTextStyle": "black", + "navigationBarTitleText": "", + "backgroundColor": "#ccc", + "backgroundTextStyle": "light" +} \ No newline at end of file diff --git a/pages/communityinfo/communityinfo.wxml b/pages/communityinfo/communityinfo.wxml new file mode 100644 index 0000000..2a1ffe3 --- /dev/null +++ b/pages/communityinfo/communityinfo.wxml @@ -0,0 +1,135 @@ + + + + + + + + + + + + + {{item.userinfo['nickname']}} + + + {{item.times}} + + + + + + {{item.name}} + + + + + + + + + + + + + + + + + + + + + {{item.commentcount}} + + + + {{item.wordsclickcount}} + + + + + + + + + + + + + + + + + + + + + {{item.userinfo['nickname']}} + + + {{item.times}} + + + + + + + {{item.name}} + + + + + + + + + + + + + + + + + + + + {{item.commentcount}} + + + + {{item.wordsclickcount}} + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + +
+ +
\ No newline at end of file diff --git a/pages/communityinfo/communityinfo.wxss b/pages/communityinfo/communityinfo.wxss new file mode 100644 index 0000000..99d4720 --- /dev/null +++ b/pages/communityinfo/communityinfo.wxss @@ -0,0 +1,241 @@ +.courselive { + width: 750rpx; + height: 403rpx; +} + +.functionalarea { + display: flex; + flex-flow: row wrap; + align-content: flex-start; + width: 750rpx; + height: 550rpx; +} + +.areaitem { + margin-top: 60rpx; + text-align: center; + width: 33%; + height: 170rpx; +} + +.areaitem image { + width: 120rpx; + height: 170rpx; +} + +.messagearea text { + + display: block; + font-size: 40rpx; + font-weight: 600rpx; + margin-left: 60rpx; +} + +.msseagehead { + display: flex; + flex-direction: row; +} + +.headleft { + margin-left: 60rpx; + margin-top: 50rpx; + width: 140rpx; + height: 140rpx; + border-radius: 50%; + overflow: hidden; +} + +.headleft image { + + width: 130rpx; + height: 133rpx; +} + +.headright { + margin-top: 80rpx; + margin-left: 23rpx; + width: 485rpx; + height: 142rpx; +} + +.headrightup text { + + font-size: 30rpx; + /* font-weight: 400rpx; */ +} + +.headrightdown { + margin-top: 10rpx; +} + +.msseagemiddle { + margin: 0 60rpx; +} + +.mssagemiddledown { + margin: 25rpx auto; +} +.mssagemiddledown2 { + margin: 25rpx auto; +} + +.mssagemiddledown image { + + width: 100%; + height: 265rpx; +} + +.messageend { + + margin: 32rpx 60rpx; + display: flex; + flex-direction: row; + justify-content: space-between; + +} + +.messageendleft { + width: 150rpx; + height: 30rpx; +} + +.messageendleft image { + width: 100rpx; + height: 25rpx; +} + +.messageendmiddle { + width: 150rpx; + height: 30rpx; +} + +.messageendmiddle image { + width: 35rpx; + height: 30rpx; +} +.messageendmiddle text{ + + font-size: 28rpx; + padding-left: 23rpx; +} + +.messageendright{ + + width: 150rpx; + height: 30rpx; +} + +.messageendright image { + width: 35rpx; + height: 30rpx; + +} + +.messageendright text{ + + font-size: 28rpx; + padding-left: 23rpx; +} +.feigexian{ + + margin: 0 60rpx; + margin-top: 60rpx; + border-bottom: 2rpx solid #ada2a2; +} +.areaclass{ + + width: 540rpx; + min-height: 300rpx; + margin: 0 auto; + margin-top: 80rpx; + background-color: #f0f0f1; + border-radius: 5%; +} +.areaclass textarea{ + width: 540rpx; + min-height: 300rpx; +} + + +.areafooter{ + display: flex; + align-items: center; + justify-content: space-between; + width: 540rpx; + height: 60rpx; + margin: 0 auto; + margin-top: 10rpx; +} +.areafooterleft image{ + + width: 52rpx; + height: 52rpx; + +} +.areafooterright text{ + font-size: 28rpx; + font-weight: 600; + color: #217ced; +} +.areafooterright{ + width: 120rpx; + height: 56rpx; +} +.areafooterright button{ + + width: 120rpx; + height: 50rpx; + line-height: 50rpx; + font-size: 28rpx; + font-weight: 600; + color: #217ced; + border:none; +} +button::after { + border: none; +} +.vipimage image{ + width: 37rpx; + height: 33rpx; + position: relative; + left: -25px; + top: 83px; +} + + +.choose_upload_view { + margin-top: 30rpx; + margin-left: 10%; + flex: 1; + height: 100%; + display: flex; + align-items: center; + justify-content: flex-start; + flex-wrap: wrap; + } + .choose_upload_item { + margin-left: 38rpx; + margin-bottom: 20rpx; + position: relative; + width: 100rpx; + display: flex; + align-items: center; + } + .choose_upload_view .choose_upload_img { + width: 100rpx; + height: 100rpx; + } + .choose_upload_view .remove_img_icon { + padding: 4rpx; + position:absolute; + top: -15rpx; + right: -13rpx; + width: 28rpx; + height: 28rpx; + border-radius: 50%; + background-color: rgba(248, 236, 236, 0.5); + } + .other_upload { + margin-left: 15rpx; + width: 80rpx; + } \ No newline at end of file diff --git a/pages/communityinfocomment/communityinfocomment.js b/pages/communityinfocomment/communityinfocomment.js new file mode 100644 index 0000000..a6a68d2 --- /dev/null +++ b/pages/communityinfocomment/communityinfocomment.js @@ -0,0 +1,500 @@ +const Apps = getApp(); +const api = require('../../config/api.js'); +const util = require('../../config/util.js'); +Page({ + + /** + * 页面的初始数据 + */ + data: { + id:0, + imagecount:4, + indeximagecount:4, + baseurl: Apps.globalData.baseimgurl, + indexlist:[], + replylist:[], + wordsid:0, + wordstextname:'', + title: '', + content: '', + images: '' , + upload_picture_list: [], + imagesListp:[], + imagestr:[], + accesstoken:'', + scrollTop: 0, + ispic:0, + xid:0 + }, + + /** + * 生命周期函数--监听页面加载 + */ + onLoad: function (options) { + console.log(options); + this.setData({ + id:options.id + }); + wx.setNavigationBarTitle({ + title: this.data.title, + }) + + this.getacctoken(); + // this.pageScrollToBottom(); + }, + + /** + * 生命周期函数--监听页面初次渲染完成 + */ + onReady: function () { + + }, + + /** + * 生命周期函数--监听页面显示 + */ + onShow: function () { + + this.getwordsinfo(this.data.id); + this.getwordsreply(); + + this.pageScrollToBottom(); + + }, + + /** + * 生命周期函数--监听页面隐藏 + */ + onHide: function () { + + }, + + /** + * 生命周期函数--监听页面卸载 + */ + onUnload: function () { + + }, + + /** + * 页面相关事件处理函数--监听用户下拉动作 + */ + onPullDownRefresh: function () { + + }, + + /** + * 页面上拉触底事件的处理函数 + */ + onReachBottom: function () { + + }, + + /** + * 用户点击右上角分享 + */ + onShareAppMessage: function () { + + }, + getwordsinfo:function(e){ + const that = this; + let url = Apps.globalData.baseUrl + '/wordslist/getsinglewords'; + var param = { + id: e, + }; + //此处为使用封装的post请求 + util.post(url, param).then((res) => { + console.log(res); + console.log("================"); + that.setData({ + indexlist: res.data, + wordsid:res.data.id + }); + + }).catch((errMsg) => { + console.log(errMsg); + }); + }, + wordsclick:function(ee){ + + console.log(ee); + console.log(Apps.globalData.currentuserinfo); + let e1=ee.currentTarget.id; + let e2=wx.getStorageSync('wxuserid'); + const that = this; + let url = Apps.globalData.baseUrl + '/wordslist/wordsclickcount'; + var param = { + words_id: e1, + user_id: e2, + }; + //此处为使用封装的post请求 + util.get(url, param).then((res) => { + console.log(res); + + this.getwordsinfo(this.data.id); + this.getwordsreply(); + + }).catch((errMsg) => { + console.log(errMsg); + }); + }, + getwordsreply:function(){ + + const that = this; + let url = Apps.globalData.baseUrl + '/wordslist/wordsreply'; + var param = { + wordsid: that.data.id + }; + //此处为使用封装的post请求 + util.get(url, param).then((res) => { + console.log(res); + that.setData({ + replylist:res.data + }); + + }).catch((errMsg) => { + console.log(errMsg); + }); + }, + uploadpic:function(){ + var that = this; + let imagesList = []; + let maxSize = 1024 * 1024; + let maxLength = 6; + let flag = true; + wx.chooseImage({ + count: 9, //最多可以选择的图片总数 + sizeType: ['original', 'compressed'], // 可以指定是原图还是压缩图,默认二者都有 + sourceType: ['album', 'camera'], // 可以指定来源是相册还是相机,默认二者都有 + success: function (res) { + wx.showToast({ + title: '正在上传...', + icon: 'loading', + mask: true, + duration: 500 + }) + for (let i = 0; i < res.tempFiles.length; i++) { + if (res.tempFiles[i].size > maxSize) { + flag = false; + console.log(111) + wx.showModal({ + content: '图片太大,不允许上传', + showCancel: false, + success: function (res) { + if (res.confirm) { + console.log('用户点击确定') + } + } + }); + } + } + if (res.tempFiles.length > maxLength) { + console.log('222'); + wx.showModal({ + content: '最多能上传' + maxLength + '张图片', + showCancel: false, + success: function (res) { + if (res.confirm) { + console.log('确定'); + } + } + }) + } + if (flag == true && res.tempFiles.length <= maxLength) { + that.setData({ + imagesListp: res.tempFilePaths + }) + that.data.imagestr=[]; + var arr=''; + for (let i = 0; i < that.data.imagesListp.length; i++) { + + that.getpicchekc(that.data.imagesListp[i]); + + if(that.data.ispic==1){ + + wx.uploadFile({ + url: Apps.globalData.baseUrl + '/wordslist/uploadpics', + filePath: that.data.imagesListp[i], + name: 'file', + success:function(res){ + //打印 + console.log("------------响应数据:"); + console.log(res.data); + var message = JSON.parse(res.data); + that.data.imagestr.push(message); + that.setData({ + imagestr:that.data.imagestr + }); + }, + }) + } + } + + } + console.log(res); + }, + fail: function (res) { + console.log(res); + } + }) + + }, + formSubmit:function(e) { + + Apps.islogin(); + + if(wx.getStorageSync('wxuserid')==''){ + wx.navigateTo({ + url: '/pages/userlogin/userlogin', + }) + } + + let content = this.data.wordstextname; + + if (content == '') { + wx.showToast({ + title: '留言内容为空,请填写内容', + icon: 'none', + duration: 1500 + }) + return false; + } + + // this.wordsadd(content,this.data.imagestr); + + this.getmsgcheck(content,this.data.accesstoken); + this.pageScrollToBottom(); + }, + bindTextAreaBlur: function(e) { + this.setData({ + wordstextname:e.detail.value + }) + }, + uploadpicsimage:function(e){ + + const that = this; + let url = Apps.globalData.baseUrl + '/wordslist/uploadpics'; + var param = { + url: e + }; + //此处为使用封装的post请求 + util.post(url, param).then((res) => { + console.log(res); + + }).catch((errMsg) => { + console.log(errMsg); + }); + }, + wordsadd:function(content,imagestr){ + + const that = this; + let url = Apps.globalData.baseUrl + '/wordslist/wordsadd'; + var param = { + content: content, + imagestr:imagestr, + userid:wx.getStorageSync('wxuserid')==''?3:wx.getStorageSync('wxuserid'), + wordsid:that.data.id, + xid:that.data.xid + }; + //此处为使用封装的post请求 + util.post(url, param).then((res) => { + console.log(res.data); + if(res.data>0){ + wx.showToast({ + title: '留言内容成功', + icon: 'none', + duration: 1500 + }) + that.getwordsinfo(that.data.id); + that.getwordsreply(); + that.setData({ + wordstextname:'' + }) + } + + }).catch((errMsg) => { + console.log(errMsg); + }); + },contentclick:function(params) { + + let id=params.currentTarget.id; + let xid=params.currentTarget.dataset.xid; + this.setData({ + wordstextname:'@'+id, + xid:xid + }); + this.getacctoken(); + // this.addinccomment(xid) + wx.showToast({ + title: '@成功,请移底部留言',//提示文字 + duration:2000,//显示时长 + mask:true,//是否显示透明蒙层,防止触摸穿透,默认:false + icon:'success', //图标,支持"success"、"loading" + success:function(){ },//接口调用成功 + fail: function () { }, //接口调用失败的回调函数 + complete: function () { } //接口调用结束的回调函数 + }) + + this.pageScrollToBottom(); + + },rdclick:function(params) { + wx.navigateTo({ + url: '/pages/communityinfo/communityinfo?id='+params.currentTarget.id, + }) + },addinccomment:function(params) { + //增加评论数 + console.log(params); + let userid=wx.getStorageSync('wxuserid'); + const that = this; + let url = Apps.globalData.baseUrl + '/wordslist/addcommentrepycount'; + var param = { + id:params, + userid:userid + }; + //此处为使用封装的post请求 + util.get(url, param).then((res) => { + console.log(res); + // this.wrodtypelist(this.data.courseid) + + }).catch((errMsg) => { + console.log(errMsg); + }); + }, + preview:function (params) { + let that=this; + console.log(params) + let currentUrl = params.currentTarget.dataset.src; + let arrindex=params.currentTarget.dataset.id; + console.log(arrindex); + let rearr=that.data.replylist[arrindex].pics; + console.log(rearr); + let arr=[]; + rearr.forEach(function (item,index) { + arr[index]=that.data.baseurl+item + }); + console.log(arr); + wx.previewImage({ + current: currentUrl, // 当前显示图片的http链接 + urls: arr // 需要预览的图片http链接列表 + }) + }, + preview2:function (params) { + let that=this; + console.log(params) + let currentUrl = params.currentTarget.dataset.src; + let arrindex=params.currentTarget.dataset.id; + let rearr=that.data.indexlist[arrindex].pics; + console.log(rearr); + let arr=[]; + rearr.forEach(function (item,index) { + arr[index]=that.data.baseurl+item + }); + console.log(arr); + wx.previewImage({ + current: currentUrl, // 当前显示图片的http链接 + urls: arr // 需要预览的图片http链接列表 + }) + },communityinfoclick:function(e){ + //社区留言信息 + console.log(e.currentTarget.id); + wx.navigateTo({ + url: '/pages/communityinfo/communityinfo?id='+e.currentTarget.id, + }) + }, + getacctoken:function() { + const that = this; + let url = Apps.globalData.baseUrl + '/user/acctoken'; + var param = { + pareid: '1213' + }; + //此处为使用封装的post请求 + util.get(url, param).then((res) => { + wx.setStorageSync('accesstoen', res.access_token) + that.setData({ + accesstoken: res.access_token + }); + + + }).catch((errMsg) => { + console.log(errMsg); + }); + }, + getmsgcheck:function (params,accesstoken) { + // $url ='https://api.weixin.qq.com/wxa/msg_sec_check?access_token=' .$accessToken; + const that = this; + // let url = 'https://api.weixin.qq.com/wxa/msg_sec_check?access_token='+wx.getStorageSync('accesstoen'); + let url=Apps.globalData.baseUrl+'/user/checkmsg' + var param = { + "openid": wx.getStorageSync('wxopenid'), + "scene": 2, + "version": 2, + "content":params, + "access_token":that.data.accesstoken + }; + //此处为使用封装的post请求 + util.post(url, param).then((res) => { + + if(res.errcode=="0"){ + that.wordsadd(params,that.data.imagestr) + }else{ + + wx.showToast({ + title: '留言内容有敏感词请重新输入',//提示文字 + duration:2000,//显示时长 + mask:true,//是否显示透明蒙层,防止触摸穿透,默认:false + icon:'none', //图标,支持"success"、"loading" + success:function(){ },//接口调用成功 + fail: function () { }, //接口调用失败的回调函数 + complete: function () { } //接口调用结束的回调函数 + }) + } + + }).catch((errMsg) => { + console.log(errMsg); + }); + }, + getpicchekc:function(params) { + + let url=Apps.globalData.baseUrl+'/user/checkpic' + var param = { + "openid": wx.getStorageSync('wxopenid'), + "scene": 2, + "version": 2, + "media_url":params, + "media_type":2, + "version":2, + "access_token":wx.getStorageSync('accesstoen') + }; + //此处为使用封装的post请求 + util.post(url, param).then((res) => { + + this.setData({ + ispic:1 + }) + + + }).catch((errMsg) => { + console.log(errMsg); + }); + }, + pageScrollToBottom() { + wx.createSelectorQuery().select('#time-mo').boundingClientRect(function (rect) { + + // rect.id // 节点的ID + rect.dataset // 节点的dataset + rect.left // 节点的左边界坐标 + rect.right // 节点的右边界坐标 + rect.top // 节点的上边界坐标 + rect.bottom // 节点的下边界坐标 + rect.width // 节点的宽度 + rect.height + console.log(rect.bottom*15) + console.log(rect.bottom) + // 使页面滚动到底部 + wx.pageScrollTo({ + scrollTop: rect.bottom*15 + }) + }).exec() + }, + +}) \ No newline at end of file diff --git a/pages/communityinfocomment/communityinfocomment.json b/pages/communityinfocomment/communityinfocomment.json new file mode 100644 index 0000000..88569bd --- /dev/null +++ b/pages/communityinfocomment/communityinfocomment.json @@ -0,0 +1,8 @@ +{ + "usingComponents": {}, + "navigationBarBackgroundColor": "#fff", + "navigationBarTextStyle": "black", + "navigationBarTitleText": "", + "backgroundColor": "#ccc", + "backgroundTextStyle": "light" +} \ No newline at end of file diff --git a/pages/communityinfocomment/communityinfocomment.wxml b/pages/communityinfocomment/communityinfocomment.wxml new file mode 100644 index 0000000..b430a18 --- /dev/null +++ b/pages/communityinfocomment/communityinfocomment.wxml @@ -0,0 +1,130 @@ + + + + + + + + + + + + + {{item.userinfo['nickname']}} + + + {{item.times}} + + + + + + {{item.name}} + + + + + + + + + + + + + + + + + + + + + {{item.commentcount}} + + + + {{item.wordsclickcount}} + + + + + + + + + + + + + + + + + + + + + {{item.userinfo['nickname']}} + + + {{item.times}} + + + + + + + {{item.name}} + + + + + + + + + + + + + + + + + + + + {{item.commentcount}} + + + + {{item.wordsclickcount}} + + + + + + + + +
+ + + + + + + + + + + + +
+ +
\ No newline at end of file diff --git a/pages/communityinfocomment/communityinfocomment.wxss b/pages/communityinfocomment/communityinfocomment.wxss new file mode 100644 index 0000000..7129c7f --- /dev/null +++ b/pages/communityinfocomment/communityinfocomment.wxss @@ -0,0 +1,203 @@ +/* pages/communityinfocomment/communityinfocomment.wxss */.courselive { + width: 750rpx; + height: 403rpx; +} + +.functionalarea { + display: flex; + flex-flow: row wrap; + align-content: flex-start; + width: 750rpx; + height: 550rpx; +} + +.areaitem { + margin-top: 60rpx; + text-align: center; + width: 33%; + height: 170rpx; +} + +.areaitem image { + width: 120rpx; + height: 170rpx; +} + +.messagearea text { + + display: block; + font-size: 40rpx; + font-weight: 600rpx; + margin-left: 60rpx; +} + +.msseagehead { + display: flex; + flex-direction: row; +} + +.headleft { + margin-left: 60rpx; + margin-top: 50rpx; + width: 140rpx; + height: 140rpx; + border-radius: 50%; + overflow: hidden; +} + +.headleft image { + + width: 130rpx; + height: 133rpx; +} + +.headright { + margin-top: 80rpx; + margin-left: 23rpx; + width: 485rpx; + height: 142rpx; +} + +.headrightup text { + + font-size: 30rpx; + /* font-weight: 400rpx; */ +} + +.headrightdown { + margin-top: 10rpx; +} + +.msseagemiddle { + margin: 0 60rpx; +} + +.mssagemiddledown { + margin: 25rpx auto; +} +.mssagemiddledown2 { + margin: 25rpx auto; +} + +.mssagemiddledown image { + + width: 100%; + height: 265rpx; +} + +.messageend { + + margin: 0 60rpx; + display: flex; + flex-direction: row; + justify-content: space-between; + +} + +.messageendleft { + width: 150rpx; + height: 30rpx; +} + +.messageendleft image { + width: 100rpx; + height: 30rpx; +} + +.messageendmiddle { + width: 150rpx; + height: 30rpx; +} + +.messageendmiddle image { + width: 35rpx; + height: 30rpx; +} +.messageendmiddle text{ + + font-size: 28rpx; + padding-left: 23rpx; +} + +.messageendright{ + + width: 150rpx; + height: 30rpx; +} + +.messageendright image { + width: 35rpx; + height: 30rpx; + +} + +.messageendright text{ + + font-size: 28rpx; + padding-left: 23rpx; +} +.feigexian{ + + margin: 0 60rpx; + margin-top: 60rpx; + border-bottom: 2rpx solid #ada2a2; +} +.areaclass{ + + width: 540rpx; + min-height: 300rpx; + margin: 0 auto; + margin-top: 80rpx; + background-color: #f0f0f1; + border-radius: 5%; +} +.areaclass textarea{ + width: 540rpx; + min-height: 300rpx; +} + + +.areafooter{ + display: flex; + align-items: center; + justify-content: space-between; + width: 540rpx; + height: 60rpx; + margin: 0 auto; + margin-top: 10rpx; +} +.areafooterleft image{ + + width: 52rpx; + height: 52rpx; + +} +.areafooterright text{ + font-size: 28rpx; + font-weight: 600; + color: #217ced; +} +.areafooterright{ + width: 120rpx; + height: 56rpx; +} +.areafooterright button{ + + width: 120rpx; + height: 50rpx; + line-height: 50rpx; + font-size: 28rpx; + font-weight: 600; + color: #217ced; + border:none; +} +button::after { + border: none; +} +.vipimage image{ + width: 37rpx; + height: 33rpx; + position: relative; + left: -25px; + top: 83px; +} \ No newline at end of file diff --git a/pages/communityitemlist/communityitemlist.js b/pages/communityitemlist/communityitemlist.js new file mode 100644 index 0000000..16f4522 --- /dev/null +++ b/pages/communityitemlist/communityitemlist.js @@ -0,0 +1,185 @@ +const baseUrl = getApp(); +const api = require('../../config/api.js'); +const util = require('../../config/util.js'); +Page({ + + /** + * 页面的初始数据 + */ + data: { + pareid: 0, + listdata: [], + liveclickopen: 1, //2 + baseurl: baseUrl.globalData.baseimgurl, + coursename: '' + }, + + /** + * 生命周期函数--监听页面加载 + */ + onLoad: function (options) { + + this.setData({ + pareid: options.typeid + }); + + // this.pageScrollToBottom(); + + }, + + /** + * 生命周期函数--监听页面初次渲染完成 + */ + onReady: function () { + + }, + + /** + * 生命周期函数--监听页面显示 + */ + onShow: function () { + + this.getcousrethree(); + this.getcouresename(); + // this.pageScrollToBottom(); + }, + + /** + * 生命周期函数--监听页面隐藏 + */ + onHide: function () { + + }, + + /** + * 生命周期函数--监听页面卸载 + */ + onUnload: function () { + + }, + + /** + * 页面相关事件处理函数--监听用户下拉动作 + */ + onPullDownRefresh: function () { + + }, + + /** + * 页面上拉触底事件的处理函数 + */ + onReachBottom: function () { + + }, + + /** + * 用户点击右上角分享 + */ + onShareAppMessage: function () { + + }, + liveopen(e) { + let arr = []; + arr = this.data.listdata; + console.log(e.currentTarget.dataset.itemid); + console.log(this.data.listdata); + arr.forEach(function (item, index) { + + if (index == e.currentTarget.dataset.itemid) { + item['liveclickopen'] = 1; //1 + arr[index] = item; + } else { + item['liveclickopen'] = 1; //2 + arr[index] = item + } + }) + this.setData({ + listdata: arr + }) + }, + liveclose(e) { + + let arr = []; + arr = this.data.listdata; + console.log(e.currentTarget.dataset.itemid); + arr.forEach(function (item, index) { + + if (index == e.currentTarget.dataset.itemid) { + item['liveclickopen'] = 2; + arr[index] = item; + } else { + item['liveclickopen'] = 2; + arr[index] = item + } + }) + this.setData({ + listdata: arr + }) + }, + getcouresename: function () { + + let id = this.data.pareid; + const that = this; + let url = baseUrl.globalData.baseUrl + '/course/getcousretwoname'; + var param = { + id: that.data.pareid, + }; + //此处为使用封装的post请求 + util.post(url, param).then((res) => { + console.log(res); + that.setData({ + coursename: res.data['name'] + }); + + }).catch((errMsg) => { + console.log(errMsg); + }); + + }, + getcousrethree: function () { + const that = this; + let url = baseUrl.globalData.baseUrl + '/course/getcoursethree'; + var param = { + pareid: that.data.pareid, + user_id:wx.getStorageSync('wxuserid') + }; + //此处为使用封装的post请求 + util.post(url, param).then((res) => { + console.log(res); + that.setData({ + listdata: res.data + }); + + }).catch((errMsg) => { + console.log(errMsg); + }); + }, + itemclickurl: function (e) { + console.log(e); + // return; + let typeid = e.currentTarget.dataset.typeid; + wx.navigateTo({ + url: '/pages/courselearning/courselearning?id=' + e.currentTarget.id + '&typeid=' + typeid, + }) + }, + pageScrollToBottom() { + wx.createSelectorQuery().select('#time-mo').boundingClientRect(function (rect) { + + // rect.id // 节点的ID + rect.dataset // 节点的dataset + rect.left // 节点的左边界坐标 + rect.right // 节点的右边界坐标 + rect.top // 节点的上边界坐标 + rect.bottom // 节点的下边界坐标 + rect.width // 节点的宽度 + rect.height + console.log(rect.bottom + 2000) + // 使页面滚动到底部 + wx.pageScrollTo({ + scrollTop: rect.bottom + 2000 + }) + }).exec() + }, + + +}) \ No newline at end of file diff --git a/pages/communityitemlist/communityitemlist.json b/pages/communityitemlist/communityitemlist.json new file mode 100644 index 0000000..833f8dd --- /dev/null +++ b/pages/communityitemlist/communityitemlist.json @@ -0,0 +1,4 @@ +{ + "usingComponents": {}, + "navigationBarTitleText": "课程分类" +} \ No newline at end of file diff --git a/pages/communityitemlist/communityitemlist.wxml b/pages/communityitemlist/communityitemlist.wxml new file mode 100644 index 0000000..4771d20 --- /dev/null +++ b/pages/communityitemlist/communityitemlist.wxml @@ -0,0 +1,40 @@ + + + + {{coursename}} + + + + + + + + + {{itemwlmcchina.name}} + + + {{itemwlmcchina.num}} + + + + + + + + + + + {{itemchild.headpicvalue}} + + + {{itemchild.name}} + + + + + + + + + + \ No newline at end of file diff --git a/pages/communityitemlist/communityitemlist.wxss b/pages/communityitemlist/communityitemlist.wxss new file mode 100644 index 0000000..5fd306a --- /dev/null +++ b/pages/communityitemlist/communityitemlist.wxss @@ -0,0 +1,127 @@ +.itemlist { + background: url('https://ndnd.duiduiedu.com/uploads/pics/kecheng001.png') no-repeat; + width: 750rpx; + height: 50rpx; + line-height: 50rpx; + background-size: cover; + display: flex; + flex-direction: row-reverse; + margin-top: 50rpx; +} + +.itemlist text { + + margin-right: 180rpx; + color: white; +} + +.collectionitems { + width: 680rpx; + height: 100rpx; + margin: 0 auto; + margin-top: 10rpx; + background: url('https://ndnd.duiduiedu.com/uploads/pics/itemlistred.png') no-repeat; + background-size: cover; + + display: flex; + flex-direction: row; + justify-content: space-between; + align-items: center; +} + +.collectionitems2 { + width: 680rpx; + height: 100rpx; + margin: 0 auto; + margin-top: 10px; + background: url('https://ndnd.duiduiedu.com/uploads/pics/itemlistblue.png') no-repeat; + background-size: cover; + + display: flex; + flex-direction: row; + justify-content: space-between; + align-items: center; +} + +.item1 { + width: 60%; +} + +.item1 text { + width: 30%; + margin-left: 65rpx; + color: black; + font-size: 30rpx; +} + +.item2 { + width: 10%; + text-align: right; +} + +.item2 text { + color: black; + font-size: 30rpx; +} + +.item3 { + width: 20%; + text-align: center; +} + +.item3 image { + width: 28rpx; + height: 16rpx; + margin-right: 50rpx; +} + +.itemsup{ + width: 620rpx; + height: 62rpx; + background-color: #dfe2e2; + margin-left: 50rpx; + display: flex; + flex-direction: row; + justify-content: flex-start; + align-items: center; + border-bottom: 1rpx solid #fff; +} + +.itemsup2{ + width: 620rpx; + height: 62rpx; + background-color: #dfe2e2; + margin-left: 50rpx; + display: flex; + flex-direction: row; + justify-content: flex-start; + align-items: center; + display: none; +} + +.upitem1{ + + width: 107rpx; + height: 45rpx; + margin-left: 30rpx; +} + +.upitem1 text{ + + margin-left: 40rpx; + font-size: 28rpx; +} +.upitem2{ + width: 70%; +} +.upitem2 text{ + margin-left: 32rpx; + font-size: 28rpx; +} +.upitem3{ + margin-right: 37rpx; +} +.upitem3 image{ + width: 24rpx; + height: 26rpx; +} \ No newline at end of file diff --git a/pages/communitylist/communitylist.js b/pages/communitylist/communitylist.js new file mode 100644 index 0000000..b6195d9 --- /dev/null +++ b/pages/communitylist/communitylist.js @@ -0,0 +1,558 @@ +const DEFAULT_PAGE = 0; +const Apps = getApp(); +const api = require('../../config/api.js'); +const util = require('../../config/util.js'); +Page({ + + /** + * 页面的初始数据 + */ + data: { + baseurl: Apps.globalData.baseimgurl, + messagelist: [], + startPageX: 0, + currentView: DEFAULT_PAGE, + imagecount: 4, + indeximagecount: 4, + active: 1, + challengeactive: 1, + toView: `card_${DEFAULT_PAGE}`, + list: [], + replylist: [], + imageslists: [], //图片预览 + showview: false, + upload_picture_list: [], + imagesListp: [], + imagestr: [], + id: 1, + accesstoken: '', + typeid: wx.getStorageSync('jmparm') == null ? 1 : wx.getStorageSync('jmparm'), + page: 1, //页面数, + pagecount: 0 + + }, + + /** + * 生命周期函数--监听页面加载 + */ + onLoad: function (options) { + + + if (options.length > 0) { + this.setData({ + active: options.id == '' ? 1 : options.id, + page: 1, + typeid: wx.getStorageSync('jmparm') + }) + } + + }, + displayview: function () { + wx.navigateTo({ + url: '/pages/createwords/createwords?typeid=' + this.data.typeid, + }) + + }, contentclick: function (params) { + + let id = params.currentTarget.id; + let xid = params.currentTarget.dataset.xid; + + this.setData({ + wordstextname: '@' + id + }); + + this.addinccomment(xid) + wx.showToast({ + title: '@成功,请移底部留言',//提示文字 + duration: 2000,//显示时长 + mask: true,//是否显示透明蒙层,防止触摸穿透,默认:false + icon: 'success', //图标,支持"success"、"loading" + success: function () { },//接口调用成功 + fail: function () { }, //接口调用失败的回调函数 + complete: function () { } //接口调用结束的回调函数 + }) + + // this.pageScrollToBottom(); + + }, addinccomment: function (params) { + //增加评论数 + console.log(params); + let userid = wx.getStorageSync('wxuserid'); + const that = this; + let url = Apps.globalData.baseUrl + '/wordslist/addcommentrepycount'; + var param = { + id: params, + userid: userid + }; + //此处为使用封装的post请求 + util.get(url, param).then((res) => { + console.log(res); + // this.wrodtypelist(this.data.courseid) + + }).catch((errMsg) => { + console.log(errMsg); + }); + }, + // pageScrollToBottom() { + // wx.createSelectorQuery().select('#time-mo').boundingClientRect(function (rect) { + + // // rect.id // 节点的ID + // rect.dataset // 节点的dataset + // rect.left // 节点的左边界坐标 + // rect.right // 节点的右边界坐标 + // rect.top // 节点的上边界坐标 + // rect.bottom // 节点的下边界坐标 + // rect.width // 节点的宽度 + // rect.height + // console.log(rect.bottom*15) + // console.log(rect.bottom) + // // 使页面滚动到底部 + // wx.pageScrollTo({ + // scrollTop: rect.bottom*15 + // }) + // }).exec() + // }, + + /** + * 生命周期函数--监听页面初次渲染完成 + */ + onReady: function () { + + }, + + /** + * 生命周期函数--监听页面显示 + */ + onShow: function () { + Apps.islogin(); + this.setData({ + active: wx.getStorageSync('jmparm') == '' ? 1 : wx.getStorageSync('jmparm'), + typeid: wx.getStorageSync('jmparm') == '' ? 1 : wx.getStorageSync('jmparm') + }) + //头部消息 + this.msglist(); + //留言类型 + this.wrodtypelist(); + //回复留言列表 + this.getwords(); + }, + + /** + * 生命周期函数--监听页面隐藏 + */ + onHide: function () { + + }, + getacctoken: function () { + const that = this; + let url = Apps.globalData.baseUrl + '/user/acctoken'; + var param = { + pareid: '1213' + }; + //此处为使用封装的post请求 + util.get(url, param).then((res) => { + + wx.setStorageSync('accesstoen', res.access_token) + that.setData({ + accesstoken: res.access_token + }); + + }).catch((errMsg) => { + console.log(errMsg); + }); + }, + /** + * 生命周期函数--监听页面卸载 + */ + onUnload: function () { + + }, + + /** + * 页面相关事件处理函数--监听用户下拉动作 + */ + onPullDownRefresh: function () { + + }, + + /** + * 页面上拉触底事件的处理函数 + */ + onReachBottom: function () { + + }, + + /** + * 用户点击右上角分享 + */ + onShareAppMessage: function () { + + }, + touchStart(e) { + this.startPageX = e.changedTouches[0].pageX; + }, + touchEnd(e) { + + const moveX = e.changedTouches[0].pageX - this.startPageX; + const maxPage = this.data.list.length - 1; + if (Math.abs(moveX) >= 150) { + if (moveX > 0) { + this.currentView = this.currentView !== 0 ? this.currentView - 1 : 0; + } else { + this.currentView = this.currentView !== maxPage ? this.currentView + 1 : maxPage; + } + } + this.setData({ + toView: `card_${this.currentView}` + }); + }, + touchecard(e) { + + wx.setStorageSync('jmparm', e.currentTarget.id); + this.setData({ + active: e.currentTarget.id, + typeid: e.currentTarget.id + }) + this.getwords(); + }, + duizhiticlick: function () { + wx.navigateTo({ + url: '/pages/allpapers/allpapers', + }) + }, + messagelistclick: function () { + wx.navigateTo({ + url: '/pages/messagelist/messagelist', + }) + }, + communityinfoclick: function (e) { + + wx.navigateTo({ + url: '/pages/communityinfo/communityinfo?id=' + e.currentTarget.id, + }) + }, + communityinfocommentclick: function (e) { + + wx.navigateTo({ + //communityinfocomment + url: '/pages/communityinfo/communityinfo?id=' + e.currentTarget.id + '&jztype=2', + }) + }, + messagelistclick: function (e) { + //资讯列表分类 + wx.navigateTo({ + url: '/pages/messagelist/messagelist?typeid=' + e.currentTarget.id, + }) + }, + messageclick: function (e) { + wx.navigateTo({ + url: '/pages/messageencyclopedias/messageencyclopedias?id=' + e.currentTarget.id, + }) + }, + msglist: function () { + + const that = this; + let url = Apps.globalData.baseUrl + '/msglist/msgindexlist'; + var param = { + id: '123456789' + }; + //此处为使用封装的post请求 + util.get(url, param).then((res) => { + console.log(res); + that.setData({ + messagelist: res.data.sort() + + }); + + }).catch((errMsg) => { + console.log(errMsg); + }); + }, + wrodtypelist: function () { + + const that = this; + let url = Apps.globalData.baseUrl + '/wordslist/getwordslist'; + var param = { + id: '123456789' + }; + //此处为使用封装的post请求 + util.get(url, param).then((res) => { + that.setData({ + list: res.data, + active: this.data.active + }); + + }).catch((errMsg) => { + console.log(errMsg); + }); + }, + getwordspics: function (id) { + //得到单个信息图片数 + const that = this; + let url = Apps.globalData.baseUrl + '/wordslist/getwordssingle'; + var param = { + id: id + }; + //此处为使用封装的post请求 + util.get(url, param).then((res) => { + + console.log(res.data.pics); + that.setData({ + imageslists: res.data.pics, + }); + + }).catch((errMsg) => { + console.log(errMsg); + }); + }, + getwords: function () { + + const that = this; + let url = Apps.globalData.baseUrl + '/wordslist/getwords'; + var param = { + typeid: that.data.typeid, + page: that.data.page + }; + //此处为使用封装的post请求 + util.get(url, param).then((res) => { + console.log(res); + let counts = res.data.length; + that.setData({ + replylist: res.data, + pagecount: counts == 0 ? 1 : counts + }); + + }).catch((errMsg) => { + console.log(errMsg); + }); + }, + wordsclick: function (ee) { + + let e1 = ee.currentTarget.id; + let e2 = wx.getStorageSync('wxuserid'); + const that = this; + let url = Apps.globalData.baseUrl + '/wordslist/wordsclickcount'; + var param = { + words_id: e1, + user_id: e2, + }; + //此处为使用封装的post请求 + util.get(url, param).then((res) => { + + //头部消息 + that.msglist(); + //留言类型 + that.wrodtypelist(); + that.getwords(); + + }).catch((errMsg) => { + console.log(errMsg); + }); + }, + bindTextAreaBlur: function (e) { + this.setData({ + wordstextname: e.detail.value + }) + }, + preview: function (params) { + let that = this; + let currentUrl = params.currentTarget.dataset.src; + let arrindex = params.currentTarget.dataset.id; + let picsid = params.currentTarget.dataset.pics; //单条信息ID + + // that.getwordspics(picsid); //得到单条信息图片 + console.log(that.data.replylist[picsid]); + let rearr = that.data.replylist[picsid].pics; + let arr = []; + rearr.forEach(function (item, index) { + arr[index] = that.data.baseurl + item + }); + console.log('-----'); + console.log(arr); + + wx.previewImage({ + current: currentUrl, // 当前显示图片的http链接 + urls: arr // 需要预览的图片http链接列表 + }) + }, + getmsgcheck: function (params, accesstoken) { + // $url ='https://api.weixin.qq.com/wxa/msg_sec_check?access_token=' .$accessToken; + const that = this; + // let url = 'https://api.weixin.qq.com/wxa/msg_sec_check?access_token='+wx.getStorageSync('accesstoen'); + let url = Apps.globalData.baseUrl + '/user/checkmsg' + var param = { + "openid": wx.getStorageSync('wxopenid'), + "scene": 2, + "version": 2, + "content": params, + "access_token": wx.getStorageSync('accesstoen') + }; + //此处为使用封装的post请求 + util.post(url, param).then((res) => { + + console.log(res); + console.log(res.errcode); + if (res.errcode == "0") { + that.wordsadd(params, that.data.imagestr) + } else { + + wx.showToast({ + title: '留言内容有敏感词请重新输入',//提示文字 + duration: 2000,//显示时长 + mask: true,//是否显示透明蒙层,防止触摸穿透,默认:false + icon: 'none', //图标,支持"success"、"loading" + success: function () { },//接口调用成功 + fail: function () { }, //接口调用失败的回调函数 + complete: function () { } //接口调用结束的回调函数 + }) + } + + }).catch((errMsg) => { + console.log(errMsg); + }); + }, + uploadpic: function () { + var that = this; + let imagesList = []; + let maxSize = 1024 * 1024; + let maxLength = 6; + let flag = true; + wx.chooseImage({ + count: 9, //最多可以选择的图片总数 + sizeType: ['original', 'compressed'], // 可以指定是原图还是压缩图,默认二者都有 + sourceType: ['album', 'camera'], // 可以指定来源是相册还是相机,默认二者都有 + success: function (res) { + wx.showToast({ + title: '正在上传...', + icon: 'loading', + mask: true, + duration: 500 + }) + for (let i = 0; i < res.tempFiles.length; i++) { + if (res.tempFiles[i].size > maxSize) { + flag = false; + console.log(111) + wx.showModal({ + content: '图片太大,不允许上传', + showCancel: false, + success: function (res) { + if (res.confirm) { + console.log('用户点击确定') + } + } + }); + } + } + if (res.tempFiles.length > maxLength) { + console.log('222'); + wx.showModal({ + content: '最多能上传' + maxLength + '张图片', + showCancel: false, + success: function (res) { + if (res.confirm) { + console.log('确定'); + } + } + }) + } + if (flag == true && res.tempFiles.length <= maxLength) { + that.setData({ + imagesListp: res.tempFilePaths + }) + that.data.imagestr = []; + var arr = ''; + for (let i = 0; i < that.data.imagesListp.length; i++) { + wx.uploadFile({ + url: Apps.globalData.baseUrl + '/wordslist/uploadpics', + filePath: that.data.imagesListp[i], + name: 'file', + success: function (res) { + //打印 + console.log("------------响应数据:"); + console.log(res.data); + + var message = JSON.parse(res.data); + that.data.imagestr.push(message); + that.setData({ + imagestr: that.data.imagestr + }); + }, + }) + } + } + console.log(res); + }, + fail: function (res) { + console.log(res); + } + }) + + }, + wordsadd: function (content, imagestr) { + + const that = this; + let url = Apps.globalData.baseUrl + '/wordslist/wordsxqadd'; + var param = { + content: content, + imagestr: imagestr, + userid: wx.getStorageSync('wxuserid') == '' ? 3 : wx.getStorageSync('wxuserid'), + wordstype_ids: this.data.typeid + }; + //此处为使用封装的post请求 + util.post(url, param).then((res) => { + console.log(res.data); + if (res.data > 0) { + wx.showToast({ + title: '留言内容成功', + icon: 'none', + duration: 1500 + }) + this.getwords(); + + that.setData({ + wordstextname: '' + }) + + } + + }).catch((errMsg) => { + console.log(errMsg); + }); + }, + formSubmit: function (e) { + + this.getacctoken(); + let content = this.data.wordstextname; + console.log(content) + if (content == '') { + wx.showToast({ + title: '留言内容为空,请填写内容', + icon: 'none', + duration: 1500 + }) + return false; + } + this.getmsgcheck(content, this.data.accesstoken); + }, + // 触底加载 + onReachBottom: function () { + + this.setData({ + page: this.data.page + 1 + }) + let newpage = (this.data.page + 1); //页数触底加1 + console.log(newpage); + if (newpage * 10 >= this.data.pagecount) { + + wx.showToast({ + title: '触底了,没有可加载的数据了', + icon: 'none', + duration: 1500 + }) + + } else { + this.getwords(); + } + + } +}) \ No newline at end of file diff --git a/pages/communitylist/communitylist.json b/pages/communitylist/communitylist.json new file mode 100644 index 0000000..28c2c6a --- /dev/null +++ b/pages/communitylist/communitylist.json @@ -0,0 +1,5 @@ +{ + "usingComponents": {}, + "enablePullDownRefresh":true, + "navigationBarTitleText": "怼社区" +} \ No newline at end of file diff --git a/pages/communitylist/communitylist.wxml b/pages/communitylist/communitylist.wxml new file mode 100644 index 0000000..103c441 --- /dev/null +++ b/pages/communitylist/communitylist.wxml @@ -0,0 +1,117 @@ + + + + + + + + {{item.name}} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + {{item.userinfo['nickname']}} + + + {{item.times}} + + + + + + + + + + {{item.name}} + + + + + + + + + + + + + + + + + + + {{item.plcommentcount}} + + + + {{item.wordsclickcount}} + + + + + + + + + +
+ + + + + + + + + + + +
+ + + + + +
\ No newline at end of file diff --git a/pages/communitylist/communitylist.wxss b/pages/communitylist/communitylist.wxss new file mode 100644 index 0000000..788b491 --- /dev/null +++ b/pages/communitylist/communitylist.wxss @@ -0,0 +1,407 @@ +.courselive { + width: 750rpx; + height: 403rpx; +} + +.functionalarea { + display: flex; + flex-flow: row wrap; + align-content: flex-start; + width: 750rpx; + height: 550rpx; +} + +.areaitem { + margin-top: 60rpx; + text-align: center; + width: 33%; + height: 170rpx; +} + +.areaitem image { + width: 120rpx; + height: 170rpx; +} + +.messagearea text { + + display: block; + font-size: 40rpx; + font-weight: 600rpx; + margin-left: 60rpx; +} + +.msseagehead { + display: flex; + flex-direction: row; +} + +.headleft { + margin-left: 60rpx; + margin-top: 50rpx; + width: 140rpx; + height: 140rpx; + border-radius: 50%; + overflow: hidden; +} + +.headleft image { + + width: 130rpx; + height: 133rpx; +} + +.headright { + margin-top: 80rpx; + margin-left: 23rpx; + width: 200rpx; + height: 142rpx; +} + +.headrightup text { + + font-size: 30rpx; + font-weight: 400rpx; +} + +.headrightdown { + font-size: 30rpx; + margin-top: 10rpx; +} + +.msseagemiddle { + margin: 0 60rpx; +} + +.mssagemiddledown { + margin: 25rpx auto; +} + +.mssagemiddledown image { + + width: 100%; + height: 265rpx; +} + +.mssagemiddledownone image { + width: 100%; + } + +.messageend { + + margin: 0 60rpx; + display: flex; + flex-direction: row; + justify-content: space-between; + +} + +.messageendleft { + width: 150rpx; + height: 30rpx; +} + +.messageendleft image { + width: 100rpx; + height: 30rpx; +} + +.messageendmiddle { + width: 150rpx; + height: 30rpx; +} + +.messageendmiddle image { + width: 35rpx; + height: 30rpx; +} + +.messageendmiddle text { + + font-size: 28rpx; + padding-left: 23rpx; +} + +.messageendright { + + width: 150rpx; + height: 30rpx; +} + +.messageendright image { + width: 35rpx; + height: 30rpx; + +} + +.messageendright text { + + font-size: 28rpx; + padding-left: 23rpx; +} + +.feigexian { + + margin: 0 60rpx; + margin-top: 60rpx; + border-bottom: 2rpx solid #ada2a2; +} + +.areaclass { + + width: 540rpx; + height: 193rpx; + margin: 0 auto; + margin-top: 80rpx; + background-color: #f0f0f1; + border-radius: 5%; +} + +.areafooter { + display: flex; + align-items: center; + justify-content: space-between; + width: 540rpx; + height: 60rpx; + margin: 0 auto; + margin-top: 10rpx; +} + +.areafooterleft image { + + width: 26rpx; + height: 26rpx; + +} + +.areafooterright text { + font-size: 28rpx; + font-weight: 600; + color: #217ced; +} + +.vipimage image { + width: 37rpx; + height: 33rpx; + position: relative; + left: -32rpx; + top: 148rpx; +} + +/* 社区头部 */ +.communityhead { + width: 680rpx; + height: 210rpx; + margin: 0 auto; + display: flex; + flex-direction: row; + justify-content: flex-start; + align-items: center; +} + +.communityheadleft { + background: url('https://ndnd.duiduiedu.com/uploads/pics/communtlistheadleft.png') no-repeat; + width: 385rpx; + height: 206rpx; + background-size: 100% 100%; + display: flex; + flex-direction: row; + justify-content: space-between; + align-items: center; +} + +.communityheadright { + width: 232rpx; + height: 206rpx; + margin-left: 40rpx; +} + +.communityheadrightup { + width: 240rpx; + height: 80rpx; + margin-top: 20rpx; +} + +.communityheadrightup image { + width: 240rpx; + height: 80rpx; +} + +.communityheadrightdown { + width: 240rpx; + height: 80rpx; + margin-top: 20rpx; +} + +.communityheadrightdown image { + width: 240rpx; + height: 80rpx; +} + +.communityheadleftitem1 { + width: 240rpx; + margin-left: 55rpx; + display: flex; + flex-direction: column; + justify-content: center; + align-items: center; +} + +.communityheadleftitem2 { + width: 80rpx; + height: 180rpx; +} + +.communityheadleftitem2 image { + width: 80rpx; + height: 175rpx; +} + +.messageitem { + width: 240rpx; + height: 38rpx; + /* border: 1rpx solid #1ccfd6; */ + color: #1ccfd6; + margin-bottom: 10rpx; + text-align: center; + overflow: hidden; +} + +/* 社区头部 */ + +/* 社区滑动 */ +.curriculumup { + width: 680rpx; + height: 55rpx; + margin: 0 auto; + margin-top: 40rpx; +} + +.curriculumupstart { + float: left; + width: 680rpx; + height: 55rpx; +} + +.curriculumupend { + float: left; + width: 50rpx; + height: 50rpx; +} + +.scroll-box { + white-space: nowrap; + height: 100%; +} + +.card-box { + display: inline-block; + margin-right: 10rpx; +} + +.card image { + height: 55rpx; + line-height: 55rpx; + width: 211rpx; +} + +.lineclass { + width: 685rpx; + margin: 2rpx auto; + border-bottom: 1rpx solid #dcdcdc; +} + +/* 社区滑动 */ + +/* 补充留言信息右边 */ +.itemright { + width: 200rpx; + margin-top: 50rpx; + margin-left: 30rpx; + display: flex; + flex-direction: row; + justify-content: center; + align-items: center; +} + +.itemright image { + + margin-left: 10rpx; + width: 70rpx; + height: 35rpx; +} + +/* 补充留言信息右边 */ + +.header_view_hide{ + display: none; +} +.header_view_show{ + display: block; +} + +.round-click{ + height: 61rpx; + width: 54rpx; + position: fixed; + bottom: 150rpx; + right: 20rpx; + display: flex; + align-items: center; + justify-content: center; + z-index: 9; +} +.round-click image{ + height: 61rpx; + line-height: 61rpx; + width: 54rpx; +} + +.areaclass{ + width: 540rpx; + min-height: 300rpx; + margin: 0 auto; + margin-top: 80rpx; + background-color: #f0f0f1; + border-radius: 5%; +} +.areaclass textarea{ + width: 540rpx; + min-height: 300rpx; +} + + +.areafooter{ + display: flex; + align-items: center; + justify-content: space-between; + width: 540rpx; + height: 60rpx; + margin: 0 auto; + margin-top: 10rpx; +} +.areafooterleft image{ + + width: 52rpx; + height: 52rpx; + +} +.areafooterright text{ + font-size: 28rpx; + font-weight: 600; + color: #217ced; +} +.areafooterright{ + width: 120rpx; + height: 56rpx; +} +.areafooterright button{ + + width: 120rpx; + height: 50rpx; + line-height: 50rpx; + font-size: 28rpx; + font-weight: 600; + color: #217ced; + border:none; +} \ No newline at end of file diff --git a/pages/courselearning/courselearning.js b/pages/courselearning/courselearning.js new file mode 100644 index 0000000..3e93f2e --- /dev/null +++ b/pages/courselearning/courselearning.js @@ -0,0 +1,1346 @@ +const Apps = getApp(); +const api = require('../../config/api.js'); +const util = require('../../config/util.js'); +import Toast from '../../miniprogram_npm/@vant/weapp/toast/toast'; +Page({ + + /** + * 页面的初始数据 + */ + data: { + videurl: "https://xyg.jsjbkc.com/pics/xyg1.mp4?v" + Date.now(), + imagecount: 4, + courseid: 1, + itemdata: [], + baseurl: Apps.globalData.baseimgurl, + showview: false, + title: '', + content: '', + images: '', + upload_picture_list: [], + imagesListp: [], + imagestr: [], + imageslists: [], //图片预览 + ismdata: 1, //是否材料型数据跳转 + typeid: 1, + isdisplay: 1, + ispic: 0, + accesstoken: '', + xid: 0, + onefeilei: 0, //课程一级分类 + viptype_id: 1, //VIP类型 + videoContext: {}, // 用于绑定视频标签 + showvide: false, + videtimes: 5, + videtimes2: 10, + cousreshow: false, //检查用户是对课程有权限,对VIP用户onWaiting + headpicvalue: 0,//课程积分 + sliderValue: 0, //控制进度条slider的值, + updateState: false, //防止视频播放过程中导致的拖拽失效 + playStates: false, //控制播放 & 暂停按钮的显示 + fullScreen: false,//是否是全屏 + recommendListArr: [], + chongzhivalue: '怼币购买', + poptitle: '怼币购买后可学习14天', + isfinall: 0, //检测用户的课程是否完成 + video_data: {}, //要播放的视频对象 + show: false, + isvip:false, //是否VIP, + showdiage: false, + pathid:"", + actions: [ + { + name: '1.0倍速', + value: 1 + }, + { + name: '1.25倍速', + value: 1.25 + }, + { + name: '1.5倍速', + value: 1.5 + }, + { + name: '2.0倍速', + value: 2 + }, + ], + }, + showdiagePopup(e) { + console.log(e); + let pathid=e.currentTarget.id; + + let files = pathid; // knowfiles.currentTarget.id; + if(files.length==0){ + + wx.showToast({ + title: '暂时还没有讲义,不可下载',//提示文字 + duration: 2000,//显示时长 + mask: true,//是否显示透明蒙层,防止触摸穿透,默认:false + icon: 'none', //图标,支持"success"、"loading" + success: function () { + return; + },//接口调用成功 + fail: function () { }, //接口调用失败的回调函数 + complete: function () { } //接口调用结束的回调函数 + }) + }else{ + this.setData({ showdiage: true,pathid:pathid }); + } + + }, + + onshowdiageClose() { + this.setData({ showdiage: false }); + }, + vippopmsg: function () { + //vip课程弹出消息框 + //判断VIP课程还有多少天 + this.vipkechengday(this.data.onefeilei, wx.getStorageSync('wxuserid')); + }, + vipkechengday: function (onefeilei, wxuserid) { + //判断VIP课程还有多少天 + const that = this; + let url = Apps.globalData.baseUrl + '/user/vipscourseuserday'; + var param = { + user_id: wxuserid, + sourceid: onefeilei + }; + //此处为使用封装的post请求 + util.post(url, param).then((res) => { + console.log(res); + // 您的VIP会员剩余374天 + Toast('您的VIP会员剩余' + res + '天'); + }).catch((errMsg) => { + console.log(errMsg); + }); + }, + popmsg: function () { + //怼币课程弹出消息框 + //判断怼币课程还有多少天 + console.log(this.data.courseid); + console.log(wx.getStorageSync('wxuserid')); + this.duibikechengday(this.data.courseid, wx.getStorageSync('wxuserid')); + // Toast('您的课程还有8天到期,到期后需重新购买'); + }, + popclick: function () { + if (this.data.isdisplay == 1 && this.data.typeid != 1) { + //弹出购买信息 + this.setData({ + showvide: true + }); + this.videoContext.pause(); + + } + + }, + duibikechengday: function (sourceid, wxuserid) { + //判断怼币课程还有多少天 + //检查用户是否可以听课 + const that = this; + let url = Apps.globalData.baseUrl + '/user/setdecuserscoreday'; + var param = { + user_id: wxuserid, + sourceid: sourceid + }; + //此处为使用封装的post请求 + util.post(url, param).then((res) => { + console.log(res); + Toast('您的课程还有' + res + '天到期,到期后需重新购买'); + }).catch((errMsg) => { + console.log(errMsg); + }); + + }, + bsbtnclick: function () { + let bsdata = !this.data.show; + console.log(bsdata); + this.setData({ + show: bsdata + }) + }, + onClose: function () { + this.setData({ show: false }); + }, + onSelect: function (event) { + console.log(event.detail); + console.log(event.detail.value); + let rate = event.detail.value; + this.videoContext.playbackRate(Number(rate)); + this.onClose(); + }, + bindButtonRate: function (e) { + let rate = e.detail; + console.log(rate); + this.videoContext.playbackRate(Number(rate)); + }, + fullvideo: function (params) { + console.log(params); + // 全屏 + this.videoContext = wx.createVideoContext('myVideo'); + this.videoContext.requestFullScreen({ + direction: 1 + }); + }, + bindfullscreenchange: function (e) { + // let fullScreen = e.detail.fullScreen //值true为进入全屏,false为退出全屏 + // let videoContext = wx.createVideoContext('myVideo') + if (!e.detail.fullScreen) { + // 退出全屏 + this.videoContext.exitFullScreen() + } + else { + // 全屏 + this.videoContext = wx.createVideoContext('myVideo'); + this.videoContext.requestFullScreen({ + direction: -90 + }); + } + }, + /** + * 生命周期函数--监听页面加载 + */ + onLoad: function (options) { + + Apps.islogin(); + console.log(options); + if (options.typeid == 3) { + this.setData({ + chongzhivalue: '充值VIP', + poptitle: 'VIP期限内可无限畅学' + }) + } + this.setData({ + courseid: options.id, + typeid: options.typeid, + updateState: true + }); + + }, + buyclick(event) { + console.log(event.detail); + console.log("===========") + //购买是跳转,还是在这里需要判断购买 + console.log(this.data.viptype_id); + if (this.data.viptype_id == 2) { + //实现怼币购买 + this.kqcheckdescusersorce(wx.getStorageSync('wxuserid'), this.data.cousrceid, this.data.headpicvalue); + } else if (this.data.viptype_id == 3) { + //跳转购买课程页面 + wx.navigateTo({ + url: '/pages/viprecharge/viprecharge', + }) + } + }, + cancleclick() { + this.setData({ showvide: false }); + }, + videoUpdate(e) { + if (this.data.updateState) { + //判断拖拽完成后才触发更新,避免拖拽失效 + const times = e.detail.currentTime.toFixed(0); + let sliderValue = e.detail.currentTime / e.detail.duration * 100; + // console.log(sliderValue); + this.setData({ + sliderValue: sliderValue, + duration: e.detail.duration + }) + // console.log('sliderValue=>' + times); + // console.log('11试看=>' + times); + this.publicdata(times); + + } + }, + publicdata: function (times) { + + //公共数据 + + //对2,3类型课程需要监控,一判断是否已用怼币购买过,二是判断是否为VIP用户 + if (this.data.viptype_id != 1) { + + //购买用户,怼币购买用户 + //1免费,2怼币,3VIP,4优惠值 + //先检查是否有怼币 + //增加一个两个小时的时长 + // console.log('先检查是否有怼币'); + // console.log(that.data.isdisplay); + if (this.data.isdisplay == 1) { + + if (this.data.cousreshow == false) { + + if (times >= this.data.videtimes) { + this.setData({ + showvide: true, + playStates: false, + sliderValue: times + }); + this.videoContext.pause(); + } + } + } + + } + }, + sliderChanging(e) { + + const times = e.detail.value.toFixed(0); + this.setData({ + updateState: false //拖拽过程中,不允许更新进度条 + }) + if (times >= this.data.videtimes) { + this.videoContext.pause(); + this.publicdata(times); + } else { + this.videoContext.play(); + } + }, + sliderChange(e) { + + const times = e.detail.value.toFixed(0); + this.setData({ + sliderValue: e.detail.value, + updateState: false //完成拖动后允许更新滚动条 + }) + + if (this.data.duration) { + this.videoContext.seek(e.detail.value / 100 * this.data.duration); //完成拖动后,计算对应时间并跳转到指定位置 + this.setData({ + sliderValue: e.detail.value.toFixed(0), + updateState: true //完成拖动后允许更新滚动条 + }) + } + if (times >= this.data.videtimes) { + this.videoContext.pause(); + this.setData({ + showvide: true, + duration: e.detail.duration, + playStates: false, + sliderValue: times + }); + this.publicdata(times); + + } else { + this.videoContext.play(); + } + + + }, + videoOpreation() { + + const playstats = !this.data.playStates; + this.setData({ + playStates: playstats, + }); + this.data.playStates ? this.videoContext.pause() : this.videoContext.play(); + const times = this.data.sliderValue; + console.log(times); + if (times >= this.data.videtimes) { + this.videoContext.pause(); + this.publicdata(times); + } + + }, + + /** + * 生命周期函数--监听页面初次渲染完成 + */ + onReady: function () { + this.videoContext = wx.createVideoContext('myVideo'); + this.setData({ + updateState: true + }) + }, + + /** + * 生命周期函数--监听页面显示 + */ + onShow: function () { + + this.isdisplay(); + this.getcoursedata(this.data.courseid); + this.wrodtypelist(this.data.courseid); + this.isjumpurl(this.data.typeid, 1); + this.isfinallfun(this.data.courseid, wx.getStorageSync('wxuserid'), 2); //2不删除 + + }, + /** + * 生命周期函数--监听页面隐藏 + */ + onHide: function () { + + }, + + /** + * 生命周期函数--监听页面卸载 + */ + onUnload: function () { + + }, + + /** + * 页面相关事件处理函数--监听用户下拉动作 + */ + onPullDownRefresh: function () { + + }, + + /** + * 页面上拉触底事件的处理函数 + */ + onReachBottom: function () { + + }, + + /** + * 用户点击右上角分享 + */ + onShareAppMessage: function () { + + }, + messageclick: function (e) { + + wx.reLaunch({ + url: '/pages/communityinfo/communityinfo?id=' + e.currentTarget.id, + }) + }, + deletewordreply: function (par) { + + //删除留言 + const that = this; + let url = Apps.globalData.baseUrl + '/wordslist/deletewordreply'; + var param = { + wordid: par + }; + //此处为使用封装的post请求 + util.post(url, param).then((res) => { + console.log(res); + this.wrodtypelist(that.data.courseid); + + }).catch((errMsg) => { + console.log(errMsg); + }); + }, + getcoursedata: function (params) { + const that = this; + let url = Apps.globalData.baseUrl + '/course/getcousrefourlist'; + var param = { + id: params, + user_id: wx.getStorageSync('wxuserid') == '' ? 0 : wx.getStorageSync('wxuserid') + }; + //此处为使用封装的post请求 + util.get(url, param).then((res) => { + console.log('res===================='); + console.log(res); + let cousrceid = res.data.id; + let headpicvalue = res.data.headpicvalue; + console.log(res.data.onefeilei); + that.setData({ + itemdata: res.data, //课程数据 + onefeilei: res.data.onefeilei, //课程一级分类 + viptype_id: res.data.viptype_id,//课程类型 + headpicvalue: headpicvalue, //课程积分 + cousrceid: cousrceid, //课程ID + videtimes: res.data.bz, //视听时长 + videurl:res.data.vodurl + }); + + if (that.data.isdisplay == 1) { + + + // if (res.data.viptype_id == 3 || res.data.viptype_id == 2) { + //检查用户是否有课程权限 + // that.checkusercousre(res.data.onefeilei); + // } + console.log(res.data.viptype_id); + if(res.data.viptype_id == 1){ + // console.log(res.data.viptype_i) + // that.setData({ + // cousreshow:true, + // isvip:true + // }) + }else{ + + // that.checkusercousre(res.data.onefeilei); + } + that.checkusercousre(res.data.onefeilei); + // if (that.data.cousreshow == false) { + // //如果怼币课程看否,购买 + // that.checkuserscource(wx.getStorageSync('wxuserid'), cousrceid, headpicvalue); + // } + + // if (res.data.viptype_id == 2) { + // //如果怼币课程看否,购买 + // that.checkuserscource(wx.getStorageSync('wxuserid'), cousrceid, headpicvalue); + // } + // if (res.data.viptype_id == 3 || res.data.viptype_id == 2) { + // //检查用户是否有课程权限 + // that.checkusercousre(res.data.onefeilei, cousrceid); + // } + } + }).catch((errMsg) => { + console.log(errMsg); + }); + }, + kqcheckdescusersorce: function (user_id, sourceid, headpicvalue) { + //扣除用户怼币 + const that = this; + let url = Apps.globalData.baseUrl + '/user/checkdescuserscore'; + var param = { + user_id: user_id, + sourceid: sourceid, + headpicvalue: headpicvalue + }; + //此处为使用封装的post请求 + util.post(url, param).then((res) => { + + console.log(res); + + that.setData({ + cousreshow: res.data + }) + + if (res.data == false) { + + + wx.showModal({ + title: '提示', + content: '您的怼币不够,需要' + headpicvalue + '怼币,才能安心学习该课程', + success (res) { + if (res.confirm) { + console.log('确定'); + wx.navigateTo({ + url: '/pages/index/index', + }) + } else if (res.cancel) { + console.log('取消'); + wx.navigateTo({ + url: '/pages/vipquanyi/vipquanyi', + }) + } + } + }) + + // wx.showModal({ + // title: '提示', + // content: '您的怼币不够,需要' + headpicvalue + '怼币,才能安心学习该课程', + // cancelText: '退出', + // confirmText: '去充怼币', + // success: function (res) { + // if (res.cancel) { + // //这个跳转是左边按钮的跳转链接 + // //这里取消操作 + // console.log('确认扣除怼币' + headpicvalue); + // wx.navigateTo({ + // url: '/pages/index/index', + // }) + + // } else { + // //这里是右边按钮的跳转链接 + // wx.navigateTo({ + // url: '/pages/vipquanyi/vipquanyi', + // }) + // } + // } + // }) + }else{ + + Toast('课程购买成功,您花费了' + headpicvalue + '怼币,请安心学习该课程'); + + // wx.showModal({ + // title: '怼币购买成功', + // content: '课程购买成功,您花费了' + headpicvalue + '怼币,请安心学习该课程', + // success (res) { + // if (res.confirm) { + // console.log('确定'); + // wx.navigateTo({ + // url: '/pages/courselearning/courselearning?id=' + that.data.courseid + "&typeid=" + that.data.typeid, + // }) + // } else if (res.cancel) { + // console.log('取消') + // } + // } + // }) + + // wx.showModal({ + // title: '怼币购买成功', + // content: '课程购买成功,您花费了' + headpicvalue + '怼币,请安心学习该课程', + // cancelText: '好的,去学习', + // confirmText: '去充怼币', + // success: function (res) { + + // // wx.navigateTo({ + // // url: '/pages/courselearning/courselearning?id=' + that.data.courseid + "&typeid=" + that.data.typeid, + // // }) + // } + // }).catch((errMsg) => { + // console.log(errMsg); + // }); + + } + }) + }, + checkuserscource: function (user_id, sourceid, headpicvalue) { + //检查用户是否可以听课 + const that = this; + let url = Apps.globalData.baseUrl + '/user/checkuserscource'; + var param = { + user_id: user_id, + sourceid: sourceid, + headpicvalue: headpicvalue + }; + //此处为使用封装的post请求 + util.post(url, param).then((res) => { + that.setData({ + cousreshow: res.data + }) + + }).catch((errMsg) => { + console.log(errMsg); + }); + + }, + finallclick: function (params) { + + if (this.data.cousreshow == false) { + wx.showToast({ + title: '试听课程,不可操作,请先购买课程',//提示文字 + duration: 2000,//显示时长 + mask: true,//是否显示透明蒙层,防止触摸穿透,默认:false + icon: 'none', //图标,支持"success"、"loading" + success: function () { + return; + },//接口调用成功 + fail: function () { }, //接口调用失败的回调函数 + complete: function () { } //接口调用结束的回调函数 + }) + return; + } + this.isfinallfun(this.data.courseid, wx.getStorageSync('wxuserid'), 1); + }, + isfinallfun: function (id, userid, typeid) { + //是否完成函数 + const that = this; + let url = Apps.globalData.baseUrl + '/course/finallclick'; + var param = { + id: id, + user_id: userid, + typeid: typeid + }; + //此处为使用封装的post请求 + util.post(url, param).then((res) => { + + console.log(res); + that.setData({ + isfinall: res + }) + + }).catch((errMsg) => { + console.log(errMsg); + }); + }, + downfile: function (knowfiles) { + + if (this.data.cousreshow == false && this.data.typeid != 1) { + wx.showToast({ + title: '试听课程,不可操作,请先购买课程',//提示文字 + duration: 2000,//显示时长 + mask: true,//是否显示透明蒙层,防止触摸穿透,默认:false + icon: 'none', //图标,支持"success"、"loading" + success: function () { + return; + },//接口调用成功 + fail: function () { }, //接口调用失败的回调函数 + complete: function () { } //接口调用结束的回调函数 + }) + return; + } + + // let files = knowfiles.currentTarget.id; + let files = this.data.pathid;// knowfiles.currentTarget.id; + + + wx.downloadFile({ + url: this.data.baseurl + files, + success(res) { + + wx.shareFileMessage({ + filePath: res.tempFilePath, + success() {}, + fail: console.error, + }) + + // wx.openDocument({ + // filePath: res.tempFilePath, + // showMenu:true, //关键点 + // success() { + // // wx.showToast({ + // // title: '下载成功',//提示文字 + // // duration: 2000,//显示时长 + // // mask: true,//是否显示透明蒙层,防止触摸穿透,默认:false + // // icon: 'success', //图标,支持"success"、"loading" + // // success: function () { },//接口调用成功 + // // fail: function () { }, //接口调用失败的回调函数 + // // complete: function () { } //接口调用结束的回调函数 + // // }) + // } + // }) + } + }) + }, + downfilepoto: function (knowfiles) { + + if (this.data.cousreshow == false && this.data.typeid != 1) { + wx.showToast({ + title: '试听课程,不可操作,请先购买课程',//提示文字 + duration: 2000,//显示时长 + mask: true,//是否显示透明蒙层,防止触摸穿透,默认:false + icon: 'none', //图标,支持"success"、"loading" + success: function () { + return; + },//接口调用成功 + fail: function () { }, //接口调用失败的回调函数 + complete: function () { } //接口调用结束的回调函数 + }) + return; + } + + // let files = knowfiles.currentTarget.id; + let files = this.data.pathid + + wx.downloadFile({ + url: this.data.baseurl + files, + success(res) { + wx.openDocument({ + filePath: res.tempFilePath, + showMenu:true, //关键点 + success() { + } + }) + } + }) + }, + collectionclick: function (params) { + + let id = params.currentTarget.id; + console.log(id); + this.collectionclickdata(id, wx.getStorageSync('wxuserid')); + + }, + collectionclickdata: function (collection_id, user_id) { + const that = this; + let url = Apps.globalData.baseUrl + '/course/coursecollection'; + var param = { + id: collection_id, + user_id: user_id + }; + //此处为使用封装的post请求 + util.get(url, param).then((res) => { + console.log(res); + this.getcoursedata(that.data.courseid); + + }).catch((errMsg) => { + console.log(errMsg); + }); + }, + displayview: function () { + console.log(this.data.showview); + this.setData({ + showview: (!this.data.showview) + }) + this.getacctoken(); + this.pageScrollToBottom(); + }, + wrodtypelist: function (params) { + + //获取课程留言 + const that = this; + let url = Apps.globalData.baseUrl + '/wordslist/wordscourselist'; + var param = { + id: params, + user_id: wx.getStorageSync('wxuserid') + }; + //此处为使用封装的post请求 + util.get(url, param).then((res) => { + console.log(res); + that.setData({ + replylist: res.data + }); + + }).catch((errMsg) => { + console.log(errMsg); + }); + }, + delesourceclick: function (par) { + const that = this; + wx.showModal({ + title: '删除提示', + content: '您将删除该留言信息', + cancelText: '退出', + confirmText: '确认', + success: function (res) { + if (res.cancel) { + //这个跳转是左边按钮的跳转链接 + //这里取消操作 + console.log(res); + + } else { + //这里是右边按钮的跳转链接 + let id = par.currentTarget.id; + //删除课程留言数据 + let url = Apps.globalData.baseUrl + '/wordslist/wordscoursedelete'; + var param = { + id: id + }; + //此处为使用封装的post请求 + util.post(url, param).then((res) => { + console.log(res); + that.wrodtypelist(that.data.courseid); + + }).catch((errMsg) => { + console.log(errMsg); + }); + } + } + }) + + }, + wordsclick: function (ee) { + + let e1 = ee.currentTarget.id; + // let e2 = Apps.globalData.currentuserinfo.id; + let e2 =wx.getStorageSync('wxuserid'); + const that = this; + let url = Apps.globalData.baseUrl + '/wordslist/wordscourseclickcount'; + var param = { + words_id: e1, + user_id: e2, + }; + //此处为使用封装的post请求 + util.get(url, param).then((res) => { + console.log(res); + + }).catch((errMsg) => { + console.log(errMsg); + }); + }, + uploadpic: function () { + var that = this; + let imagesList = []; + let maxSize = 1024 * 1024; + let maxLength = 6; + let flag = true; + wx.chooseImage({ + count: 9, //最多可以选择的图片总数 + sizeType: ['original', 'compressed'], // 可以指定是原图还是压缩图,默认二者都有 + sourceType: ['album', 'camera'], // 可以指定来源是相册还是相机,默认二者都有 + success: function (res) { + wx.showToast({ + title: '正在上传...', + icon: 'loading', + mask: true, + duration: 500 + }) + for (let i = 0; i < res.tempFiles.length; i++) { + if (res.tempFiles[i].size > maxSize) { + flag = false; + console.log(111) + wx.showModal({ + content: '图片太大,不允许上传', + showCancel: false, + success: function (res) { + if (res.confirm) { + console.log('用户点击确定') + } + } + }); + } + } + if (res.tempFiles.length > maxLength) { + console.log('222'); + wx.showModal({ + content: '最多能上传' + maxLength + '张图片', + showCancel: false, + success: function (res) { + if (res.confirm) { + console.log('确定'); + } + } + }) + } + if (flag == true && res.tempFiles.length <= maxLength) { + that.setData({ + imagesListp: res.tempFilePaths + }) + that.data.imagestr = []; + var arr = ''; + for (let i = 0; i < that.data.imagesListp.length; i++) { + + // that.getpicchekc(that.data.imagesListp[i]); + + // if (that.data.ispic == 1) { + + wx.uploadFile({ + url: Apps.globalData.baseUrl + '/wordslist/uploadpics', + filePath: that.data.imagesListp[i], + name: 'file', + success: function (res) { + //打印 + console.log("------------响应数据:"); + console.log(res.data); + + var message = JSON.parse(res.data); + that.data.imagestr.push(message); + that.setData({ + imagestr: that.data.imagestr + }); + }, + }) + } + + // } + + + } + console.log(res); + }, + fail: function (res) { + console.log(res); + } + }) + + }, + // 删除图片 + removeChooseImage(e) { + let imgs = this.data.imagestr; + let { index } = e.currentTarget.dataset; + imgs.splice(index, 1); + this.setData({ + imagestr: imgs + }) + }, + // 预览图片 + previewBigImage(e) { + let that = this; + let imgs = that.data.imagestr; + let index = e.currentTarget.dataset.index; + let arr = []; + imgs.forEach(function (item, index) { + arr[index] = that.data.baseurl + item + }); + wx.previewImage({ + //当前显示图片 + current: arr[index], + //所有图片 + urls: arr + }) + }, + isjumpblack:function(){ + console.log(wx.getStorageSync('userisblack')); + if(wx.getStorageSync('userisblack')>=2){ + + wx.showToast({ + title: "您已被禁言,请联系管理员",//提示文字 + duration: 5000,//显示时长 + mask: true,//是否显示透明蒙层,防止触摸穿透,默认:false + icon: 'none', //图标,支持"success"、"loading" + success: function () { + + },//接口调用成功 + fail: function () { }, //接口调用失败的回调函数 + complete: function () { } //接口调用结束的回调函数 + }) + } + }, + formSubmit: function (e) { + + Apps.islogin(); + + if(wx.getStorageSync('userisblack')>=2){ + this.isjumpblack(); + return; + } + + let content = this.data.wordstextname; + if (content == '') { + wx.showToast({ + title: '留言内容为空,请填写内容', + icon: 'none', + duration: 1500 + }) + return false; + } + this.getmsgcheck(content); + + }, + bindTextAreaBlur: function (e) { + this.setData({ + wordstextname: e.detail.value + }) + }, + uploadpicsimage: function (e) { + + const that = this; + let url = Apps.globalData.baseUrl + '/wordslist/uploadpics'; + var param = { + url: e + }; + //此处为使用封装的post请求 + util.post(url, param).then((res) => { + console.log(res); + + }).catch((errMsg) => { + console.log(errMsg); + }); + }, + wordsadd: function (content, imagestr) { + + const that = this; + let url = Apps.globalData.baseUrl + '/wordslist/wordscouresadd'; + var param = { + content: content, + imagestr: imagestr, + userid: wx.getStorageSync('wxuserid') == '' ? 3 : wx.getStorageSync('wxuserid'), + wordsid: that.data.courseid, + xid: that.data.xid + }; + //此处为使用封装的post请求 + util.post(url, param).then((res) => { + console.log(res.data); + if (res.data > 0) { + wx.showToast({ + title: '留言内容成功', + icon: 'none', + duration: 1500 + }) + + that.wrodtypelist(that.data.courseid); + + that.setData({ + wordstextname: '', + imagestr: '' + }) + + } + + }).catch((errMsg) => { + console.log(errMsg); + }); + }, + contentclick: function (params) { + + console.log(params); + let id = params.currentTarget.id; + let xid = params.currentTarget.dataset.xid; + console.log(id); + this.setData({ + wordstextname: '回复@' + id, + showview: true, + xid: xid + }); + + // this.addinccomment(xid); + + this.getacctoken(); + + wx.showToast({ + title: '@成功,留言请移底部留言', + icon: 'none', + duration: 1500 + }) + this.pageScrollToBottom(); + + }, rdclick: function (params) { + + this.pageScrollToBottom(); + }, addinccomment: function (params) { + //增加评论数 + console.log(params); + let userid = wx.getStorageSync('wxuserid'); + const that = this; + let url = Apps.globalData.baseUrl + '/wordslist/addcommentcount'; + var param = { + id: params, + userid: userid + }; + //此处为使用封装的post请求 + util.get(url, param).then((res) => { + console.log(res); + // this.wrodtypelist(this.data.courseid) + this.wrodtypelist(that.data.courseid); + }).catch((errMsg) => { + console.log(errMsg); + }); + }, + clickbtn: function (params) { + console.log(params); + let userid = wx.getStorageSync('wxuserid'); + const that = this; + let url = Apps.globalData.baseUrl + '/wordslist/wordscourseclickcount'; + var param = { + words_id: params.currentTarget.id, + user_id: userid + }; + //此处为使用封装的post请求 + util.get(url, param).then((res) => { + console.log(res); + // this.wrodtypelist(this.data.courseid) + this.wrodtypelist(this.data.courseid); + }).catch((errMsg) => { + console.log(errMsg); + }); + }, + knowledgeclick: function (params) { + //知识要点 + if (this.data.cousreshow == false && this.data.typeid != 1) { + wx.showToast({ + title: '试听课程,不可操作,请先购买课程',//提示文字 + duration: 2000,//显示时长 + mask: true,//是否显示透明蒙层,防止触摸穿透,默认:false + icon: 'none', //图标,支持"success"、"loading" + success: function () { + return; + },//接口调用成功 + fail: function () { }, //接口调用失败的回调函数 + complete: function () { } //接口调用结束的回调函数 + }) + return; + } + + let examid = params.currentTarget.id; + if(examid>0){ + wx.navigateTo({ + url: '/pages/knowledge/knowledge?examid=' + examid, + }) + }else{ + Toast('此课程暂无知识要点'); + } + + + }, + examingclick: function (params) { + + if (this.data.cousreshow == false && this.data.typeid != 1) { + wx.showToast({ + title: '试听课程,不可操作,请先购买课程',//提示文字 + duration: 2000,//显示时长 + mask: true,//是否显示透明蒙层,防止触摸穿透,默认:false + icon: 'none', //图标,支持"success"、"loading" + success: function () { + return; + },//接口调用成功 + fail: function () { }, //接口调用失败的回调函数 + complete: function () { } //接口调用结束的回调函数 + }) + return; + } + + let examid = params.currentTarget.id; + let ismdata = this.data.ismdata; + let grouppaper_id = this.data.itemdata.grouppaper_id; + if(grouppaper_id>0){ + + + if (ismdata == 2) { + wx.navigateTo({ + url: '/pages/exammakings/exammakings?examid=' + examid + '&grouppaper_id=' + grouppaper_id, + }) + } else { + wx.navigateTo({ + url: '/pages/examing/examing?examid=' + examid + '&grouppaper_id=' + grouppaper_id, + }) + } + }else{ + + Toast('该课程无练习试题'); + } + }, + preview: function (params) { + let that = this; + console.log(params) + let currentUrl = params.currentTarget.dataset.src; + let arrindex = params.currentTarget.dataset.id; + + let rearr = that.data.replylist[arrindex].pics; + console.log(rearr); + let arr = []; + rearr.forEach(function (item, index) { + arr[index] = that.data.baseurl + item + }); + console.log(arr); + wx.previewImage({ + current: currentUrl, // 当前显示图片的http链接 + urls: arr // 需要预览的图片http链接列表 + }) + }, + isjumpurl: function (id, groupid) { + + const that = this; + let url = Apps.globalData.baseUrl + '/exam/isarrdata'; + var param = { + id: id, + groupid: groupid + }; + //此处为使用封装的post请求 + util.post(url, param).then((res) => { + console.log(res); + that.setData({ + ismdata: res.data + }); + }).catch((errMsg) => { + console.log(errMsg); + }); + }, + isdisplay: function (params) { + //是否显示视频 + const that = this; + let url = Apps.globalData.baseUrl + '/index/isdisplay'; + var param = { + pareid: params + }; + //此处为使用封装的post请求 + util.get(url, param).then((res) => { + console.log(res); + that.setData({ + isdisplay: res.data + }); + + }).catch((errMsg) => { + console.log(errMsg); + }); + + }, + getacctoken: function () { + const that = this; + let url = Apps.globalData.baseUrl + '/user/acctoken'; + var param = { + pareid: '1213' + }; + //此处为使用封装的post请求 + util.get(url, param).then((res) => { + + console.log('-=-=-=-=-=-=-=-='); + console.log(res); + wx.setStorageSync('accesstoen', res.access_token) + that.setData({ + accesstoken: res.access_token + }); + + + }).catch((errMsg) => { + console.log(errMsg); + }); + }, + getmsgcheck: function (params) { + // $url ='https://api.weixin.qq.com/wxa/msg_sec_check?access_token=' .$accessToken; + const that = this; + let url = Apps.globalData.baseUrl + '/user/checkmsg' + var param = { + "openid": wx.getStorageSync('wxopenid'), + "scene": 2, + "version": 2, + "content": params, + "access_token": that.data.accesstoken + }; + //此处为使用封装的post请求 + util.post(url, param).then((res) => { + + that.wordsadd(params, that.data.imagestr); + // if (res.errcode == "0") { + // that.wordsadd(params, that.data.imagestr) + // } else { + + // wx.showToast({ + // title: '留言内容有敏感词请重新输入',//提示文字 + // duration: 2000,//显示时长 + // mask: true,//是否显示透明蒙层,防止触摸穿透,默认:false + // icon: 'none', //图标,支持"success"、"loading" + // success: function () { },//接口调用成功 + // fail: function () { }, //接口调用失败的回调函数 + // complete: function () { } //接口调用结束的回调函数 + // }) + // } + + }).catch((errMsg) => { + console.log(errMsg); + }); + }, + checkusercousre: function (para) { + //vip课程 + //检测用户是否这个课程的权限 + Apps.islogin(); + const that = this; + let url = Apps.globalData.baseUrl + '/user/checkusercousre' + var param = { + user_id: wx.getStorageSync('wxuserid'), + courseid: para, + }; + //此处为使用封装的post请求 + util.post(url, param).then((res) => { + + console.log('// 检查一下用户是否有课程权限 cousreshow=true'); + console.log(res); + console.log(res.data); + // 检查一下用户是否有课程权限 cousreshow=true + that.setData({ + cousreshow: res.data.iscousreshow, + isvip:res.data.isvip + }); + + if(res.data.isvip==false && that.data.viptype_id==2){ + + that.checkuserscource(wx.getStorageSync('wxuserid'), that.data.cousrceid, that.data.headpicvalue); + } + + }).catch((errMsg) => { + console.log(errMsg); + }); + + }, + getpicchekc: function (params) { + // let url="https://api.weixin.qq.com/wxa/media_check_async?access_token="+wx.getStorageSync('accesstoen'); + let url = Apps.globalData.baseUrl + '/user/checkpic' + var param = { + "openid": wx.getStorageSync('wxopenid'), + "scene": 2, + "version": 2, + "media_url": params, + "media_type": 2, + "version": 2, + "access_token": wx.getStorageSync('accesstoen') + }; + //此处为使用封装的post请求 + util.post(url, param).then((res) => { + + console.log("res==========="); + console.log(res); + + this.setData({ + ispic: 1 + }) + + + }).catch((errMsg) => { + console.log(errMsg); + }); + }, + pageScrollToBottom() { + wx.createSelectorQuery().select('#time-mo').boundingClientRect(function (rect) { + + rect.id // 节点的ID + rect.dataset // 节点的dataset + rect.left // 节点的左边界坐标 + rect.right // 节点的右边界坐标 + rect.top // 节点的上边界坐标 + rect.bottom // 节点的下边界坐标 + rect.width // 节点的宽度 + rect.height + console.log(rect.bottom * 20) + // 使页面滚动到底部 + wx.pageScrollTo({ + scrollTop: rect.bottom * 20 + }) + }).exec() + }, + +}) \ No newline at end of file diff --git a/pages/courselearning/courselearning.json b/pages/courselearning/courselearning.json new file mode 100644 index 0000000..b56a9df --- /dev/null +++ b/pages/courselearning/courselearning.json @@ -0,0 +1,8 @@ +{ + "usingComponents": {}, + "navigationBarBackgroundColor": "#fff", + "navigationBarTextStyle": "black", + "navigationBarTitleText": "课程学习", + "backgroundColor": "#ccc", + "backgroundTextStyle": "light" +} \ No newline at end of file diff --git a/pages/courselearning/courselearning.wxml b/pages/courselearning/courselearning.wxml new file mode 100644 index 0000000..8e066dc --- /dev/null +++ b/pages/courselearning/courselearning.wxml @@ -0,0 +1,161 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 留言区 + + + + + + + + + + + + + + {{item.userinfo['nickname']}} + + + {{item.times}} + + + + + + + {{item.name}} + + + + + + + + + + + + + + + + + + + {{item.commentcount}} + + + + {{item.wordsclickcount}} + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + +
\ No newline at end of file diff --git a/pages/courselearning/courselearning.wxss b/pages/courselearning/courselearning.wxss new file mode 100644 index 0000000..c4ef157 --- /dev/null +++ b/pages/courselearning/courselearning.wxss @@ -0,0 +1,339 @@ +.courselive { + width: 750rpx; + height: 403rpx; +} + +.courselivecontinor { + background-color: #F5F5F5; +} + +.functionalarea { + + display: flex; + flex-flow: row wrap; + align-content: flex-start; + width: 750rpx; + height: 550rpx; +} + +.areaitem { + margin-top: 60rpx; + text-align: center; + width: 33%; + height: 170rpx; +} + +.areaitem image { + width: 120rpx; + height: 170rpx; +} + +.messagearea text { + + display: block; + font-size: 40rpx; + font-weight: 600rpx; + margin-left: 60rpx; +} + +.msseagehead { + display: flex; + flex-direction: row; +} + +.headleft { + margin-left: 60rpx; + margin-top: 50rpx; + width: 140rpx; + height: 140rpx; + border-radius: 50%; + overflow: hidden; +} + +.headleft image { + + width: 130rpx; + height: 133rpx; +} + +.headright { + margin-top: 80rpx; + margin-left: 23rpx; + width: 485rpx; + height: 142rpx; +} + +.headrightup text { + + font-size: 30rpx; + /* font-weight: 400rpx; */ +} + +.headrightdown { + margin-top: 10rpx; +} + +.msseagemiddle { + margin: 0 60rpx; +} + +.mssagemiddledown { + margin: 25rpx auto; +} + +.mssagemiddledown image { + + width: 100%; + height: 265rpx; +} + +.messageend { + + margin: 0 60rpx; + display: flex; + flex-direction: row; + justify-content: space-between; + +} + +.messageendleft { + padding-top: 20rpx; + width: 150rpx; + height: 30rpx; +} + +.messageendleft image { + width: 100rpx; + height: 30rpx; +} + +.messageendmiddle { + width: 150rpx; + height: 30rpx; +} + +.messageendmiddle image { + width: 35rpx; + height: 30rpx; +} + +.messageendmiddle text { + + font-size: 28rpx; + padding-left: 23rpx; +} + +.messageendright { + + width: 150rpx; + height: 30rpx; +} + +.messageendright image { + width: 35rpx; + height: 30rpx; + +} + +.messageendright text { + + font-size: 28rpx; + padding-left: 23rpx; +} + +.feigexian { + + margin: 0 60rpx; + margin-top: 60rpx; + border-bottom: 2rpx solid #ada2a2; +} + +.round-click{ + height: 61rpx; + width: 54rpx; + position: fixed; + bottom: 150rpx; + right: 20rpx; + display: flex; + align-items: center; + justify-content: center; + z-index: 9; + } + .round-click image{ + height: 61rpx; + line-height: 61rpx; + width: 54rpx; + } + + + +.areaclass{ + width: 540rpx; + min-height: 300rpx; + margin: 0 auto; + margin-top: 80rpx; + background-color: #f0f0f1; + border-radius: 5%; + } + .areaclass textarea{ + width: 540rpx; + min-height: 300rpx; + } + + + .areafooter{ + display: flex; + align-items: center; + justify-content: space-between; + width: 540rpx; + height: 60rpx; + margin: 0 auto; + margin-top: 10rpx; + } + .areafooterleft image{ + + width: 52rpx; + height: 52rpx; + + } + .areafooterright text{ + font-size: 28rpx; + font-weight: 600; + color: #217ced; + } + .areafooterright{ + width: 120rpx; + height: 56rpx; + } + .areafooterright button{ + + width: 120rpx; + height: 50rpx; + line-height: 50rpx; + font-size: 28rpx; + font-weight: 600; + color: #217ced; + border:none; + } + button::after { + border: none; + } + + .header_view_hide{ + display: none; + } + .header_view_show{ + display: block; + } + .vipimage image{ + width: 37rpx; + height: 33rpx; + position: relative; + left: -25px; + top: 83px; + } + + + .process-container image{ + + position: relative; + z-index: 99; + transform:translate(20%, -10%); + z-index: 999; + width: 60rpx; + height: 60rpx; + +} + +.slider-container { + height: 1rpx; + position: relative; + z-index: 999; + left: 50%; + top: -379%; + transform: translate(-50%, -78rpx); + z-index: 999; + width: 80%; +} +.slider{ + width: 80%; + margin: 0 auto; +} +.mod_action { + position: relative; + z-index: 999; + left:520rpx; + top:-50rpx; + border-radius: 20%; + /* transform: translate(-50%, -98rpx); */ + width: 180rpx; + height: 15rpx; + +} +.playfull{ + position: relative; + z-index: 999; + left:40rpx; + top:70rpx; + border-radius: 20%; + /* transform: translate(-50%, -98rpx); */ + width: 180rpx; + height: 120rpx; +} +.van-dropdown-menu{ + height: var(--dropdown-menu-height,28px)!important; +} +.van-dropdown-menu__item{ + background: url("https://ndnd.duiduiedu.com/uploads/pics/bsbtn.png"); + width: 300px; + height: 90rpx; + background-size:cover; + background-repeat:no-repeat; +} +.playfull image{ + width: 180rpx; + height: 80rpx; +} +.mod_action image{ + width: 180rpx; + height: 80rpx; +} + + + +.choose_upload_view { + margin-top: 30rpx; + margin-left: 10%; + flex: 1; + height: 100%; + display: flex; + align-items: center; + justify-content: flex-start; + flex-wrap: wrap; + } + .choose_upload_item { + margin-left: 38rpx; + margin-bottom: 20rpx; + position: relative; + width: 100rpx; + display: flex; + align-items: center; + } + .choose_upload_view .choose_upload_img { + width: 100rpx; + height: 100rpx; + } + .choose_upload_view .remove_img_icon { + padding: 4rpx; + position:absolute; + top: -15rpx; + right: -13rpx; + width: 28rpx; + height: 28rpx; + border-radius: 50%; + background-color: rgba(248, 236, 236, 0.5); + } + .other_upload { + margin-left: 15rpx; + width: 80rpx; + } \ No newline at end of file diff --git a/pages/createwords/createwords.js b/pages/createwords/createwords.js new file mode 100644 index 0000000..fd3fb8a --- /dev/null +++ b/pages/createwords/createwords.js @@ -0,0 +1,335 @@ +const DEFAULT_PAGE = 0; +const Apps = getApp(); +const api = require('../../config/api.js'); +const util = require('../../config/util.js'); +Page({ + + /** + * 页面的初始数据 + */ + data: { + baseurl: Apps.globalData.baseimgurl, + messagelist: [], + startPageX: 0, + currentView: DEFAULT_PAGE, + imagecount: 4, + indeximagecount: 4, + active: 1, + challengeactive: 1, + toView: `card_${DEFAULT_PAGE}`, + list: [], + replylist: [], + imageslists: [], //图片预览 + showview: true, + upload_picture_list: [], + imagesListp: [], + imagestr: [], + id: 0, + accesstoken: '', + typeid: 1, + title: '怼社区', + page: 1, //页面数, + pagecount: 0, + wordstextname: '' + }, + + /** + * 生命周期函数--监听页面加载 + */ + onLoad: function (options) { + + Apps.islogin(); + this.setData({ + typeid: options.typeid + }) + this.getacctoken(); + }, + bindTextAreaBlur: function (e) { + console.log(e.detail.value); + this.setData({ + wordstextname: e.detail.value + }) + }, + /** + * 生命周期函数--监听页面初次渲染完成 + */ + onReady: function () { + + }, + + /** + * 生命周期函数--监听页面显示 + */ + onShow: function () { + + + }, + isjumpblack:function(){ + console.log(wx.getStorageSync('userisblack')); + if(wx.getStorageSync('userisblack')>=2){ + + wx.showToast({ + title: "您已被禁言,请联系管理员",//提示文字 + duration: 5000,//显示时长 + mask: true,//是否显示透明蒙层,防止触摸穿透,默认:false + icon: 'none', //图标,支持"success"、"loading" + success: function () { + + },//接口调用成功 + fail: function () { }, //接口调用失败的回调函数 + complete: function () { } //接口调用结束的回调函数 + }) + } + }, + + /** + * 生命周期函数--监听页面隐藏 + */ + onHide: function () { + + }, + + /** + * 生命周期函数--监听页面卸载 + */ + onUnload: function () { + + }, + + /** + * 页面相关事件处理函数--监听用户下拉动作 + */ + onPullDownRefresh: function () { + + }, + + /** + * 页面上拉触底事件的处理函数 + */ + onReachBottom: function () { + + }, + + /** + * 用户点击右上角分享 + */ + onShareAppMessage: function () { + + }, + getacctoken: function () { + const that = this; + let url = Apps.globalData.baseUrl + '/user/acctoken'; + var param = { + pareid: '1213' + }; + //此处为使用封装的post请求 + util.get(url, param).then((res) => { + console.log(res.access_token); + wx.setStorageSync('accesstoen', res.access_token) + that.setData({ + accesstoken: res.access_token + }); + + }).catch((errMsg) => { + console.log(errMsg); + }); + }, + formSubmit: function (e) { + + if(wx.getStorageSync('userisblack')>=2){ + this.isjumpblack(); + return; + } + + let content = this.data.wordstextname; + console.log(content) + if (content == '') { + wx.showToast({ + title: '留言内容为空,请填写内容', + icon: 'none', + duration: 1500 + }) + return false; + } + console.log(this.data.imagestr); + // this.wordsadd(content,this.data.imagestr); + this.getmsgcheck(content, this.data.accesstoken); + wx.setStorageSync('jmparm', this.data.typeid); + wx.switchTab({ + url: '/pages/communitylist/communitylist', + }) + }, + getmsgcheck: function (params, accesstoken) { + // $url ='https://api.weixin.qq.com/wxa/msg_sec_check?access_token=' .$accessToken; + const that = this; + // let url = 'https://api.weixin.qq.com/wxa/msg_sec_check?access_token='+wx.getStorageSync('accesstoen'); + let url = Apps.globalData.baseUrl + '/user/checkmsg' + var param = { + "openid": wx.getStorageSync('wxopenid'), + "scene": 2, + "version": 2, + "content": params, + "access_token": wx.getStorageSync('accesstoen') + }; + //此处为使用封装的post请求 + util.post(url, param).then((res) => { + + console.log(res); + console.log(res.errcode); + if (res.errcode == "0") { + that.wordsadd(params, that.data.imagestr) + } else { + + wx.showToast({ + title: '留言内容有敏感词请重新输入',//提示文字 + duration: 2000,//显示时长 + mask: true,//是否显示透明蒙层,防止触摸穿透,默认:false + icon: 'none', //图标,支持"success"、"loading" + success: function () { },//接口调用成功 + fail: function () { }, //接口调用失败的回调函数 + complete: function () { } //接口调用结束的回调函数 + }) + } + + }).catch((errMsg) => { + console.log(errMsg); + }); + }, + uploadpic: function () { + var that = this; + let imagesList = []; + let maxSize = 1024 * 1024; + let maxLength = 6; + let flag = true; + wx.chooseImage({ + count: 9, //最多可以选择的图片总数 + sizeType: ['original', 'compressed'], // 可以指定是原图还是压缩图,默认二者都有 + sourceType: ['album', 'camera'], // 可以指定来源是相册还是相机,默认二者都有 + success: function (res) { + wx.showToast({ + title: '正在上传...', + icon: 'loading', + mask: true, + duration: 500 + }) + for (let i = 0; i < res.tempFiles.length; i++) { + if (res.tempFiles[i].size > maxSize) { + flag = false; + console.log(111) + wx.showModal({ + content: '图片太大,不允许上传', + showCancel: false, + success: function (res) { + if (res.confirm) { + console.log('用户点击确定') + } + } + }); + } + } + if (res.tempFiles.length > maxLength) { + console.log('222'); + wx.showModal({ + content: '最多能上传' + maxLength + '张图片', + showCancel: false, + success: function (res) { + if (res.confirm) { + console.log('确定'); + } + } + }) + } + if (flag == true && res.tempFiles.length <= maxLength) { + that.setData({ + imagesListp: res.tempFilePaths + }) + that.data.imagestr = []; + var arr = ''; + for (let i = 0; i < that.data.imagesListp.length; i++) { + wx.uploadFile({ + url: Apps.globalData.baseUrl + '/wordslist/uploadpics', + filePath: that.data.imagesListp[i], + name: 'file', + success: function (res) { + //打印 + console.log("------------响应数据:"); + console.log(res.data); + + var message = JSON.parse(res.data); + that.data.imagestr.push(message); + that.setData({ + imagestr: that.data.imagestr + }); + }, + }) + + } + + + } + console.log(res); + }, + fail: function (res) { + console.log(res); + } + }) + + }, + // 删除图片 + removeChooseImage(e) { + let imgs = this.data.imagestr; + let { index } = e.currentTarget.dataset; + imgs.splice(index, 1); + this.setData({ + imagestr: imgs + }) + }, + // 预览图片 + previewBigImage(e) { + let that = this; + let imgs = that.data.imagestr; + let index = e.currentTarget.dataset.index; + let arr = []; + imgs.forEach(function (item, index) { + arr[index] = that.data.baseurl + item + }); + wx.previewImage({ + //当前显示图片 + current: arr[index], + //所有图片 + urls: arr + }) + }, + wordsadd: function (content, imagestr) { + + const that = this; + let url = Apps.globalData.baseUrl + '/wordslist/wordsxqadd'; + var param = { + content: content, + imagestr: imagestr, + userid: wx.getStorageSync('wxuserid') == '' ? 3 : wx.getStorageSync('wxuserid'), + wordstype_ids: this.data.typeid + }; + //此处为使用封装的post请求 + util.post(url, param).then((res) => { + console.log(res.data); + if (res.data > 0) { + wx.showToast({ + title: '留言内容成功', + icon: 'none', + duration: 1500 + }) + // this.getwords(that.data.typeid); + + that.setData({ + wordstextname: '', + imagestr: [] + }) + + } + + }).catch((errMsg) => { + console.log(errMsg); + }); + } +}) \ No newline at end of file diff --git a/pages/createwords/createwords.json b/pages/createwords/createwords.json new file mode 100644 index 0000000..05a72c4 --- /dev/null +++ b/pages/createwords/createwords.json @@ -0,0 +1,8 @@ +{ + "usingComponents": {}, + "navigationBarBackgroundColor": "#fff", + "navigationBarTextStyle": "black", + "navigationBarTitleText": "用户发帖", + "backgroundColor": "#ccc", + "backgroundTextStyle": "light" +} \ No newline at end of file diff --git a/pages/createwords/createwords.wxml b/pages/createwords/createwords.wxml new file mode 100644 index 0000000..550f38b --- /dev/null +++ b/pages/createwords/createwords.wxml @@ -0,0 +1,22 @@ + +
+ + + + + + + + + + + + + + + + + + + +
\ No newline at end of file diff --git a/pages/createwords/createwords.wxss b/pages/createwords/createwords.wxss new file mode 100644 index 0000000..1785e4e --- /dev/null +++ b/pages/createwords/createwords.wxss @@ -0,0 +1,92 @@ +.areaclass { + width: 540rpx; + min-height: 300rpx; + margin: 0 auto; + margin-top: 80rpx; + background-color: #f0f0f1; + border-radius: 5%; +} + +.areaclass textarea { + width: 540rpx; + min-height: 300rpx; +} + + +.areafooter { + display: flex; + align-items: center; + justify-content: space-between; + width: 540rpx; + height: 60rpx; + margin: 0 auto; + margin-top: 10rpx; +} + +.areafooterleft image { + + width: 52rpx; + height: 52rpx; + +} + +.areafooterright text { + font-size: 28rpx; + font-weight: 600; + color: #217ced; +} + +.areafooterright { + width: 120rpx; + height: 56rpx; +} + +.areafooterright button { + + width: 120rpx; + height: 50rpx; + line-height: 50rpx; + font-size: 28rpx; + font-weight: 600; + color: #217ced; + border: none; +} + + + +.choose_upload_view { + margin-top: 30rpx; + margin-left: 10%; + flex: 1; + height: 100%; + display: flex; + align-items: center; + justify-content: flex-start; + flex-wrap: wrap; + } + .choose_upload_item { + margin-left: 38rpx; + margin-bottom: 20rpx; + position: relative; + width: 100rpx; + display: flex; + align-items: center; + } + .choose_upload_view .choose_upload_img { + width: 100rpx; + height: 100rpx; + } + .choose_upload_view .remove_img_icon { + padding: 4rpx; + position:absolute; + top: -15rpx; + right: -13rpx; + width: 28rpx; + height: 28rpx; + border-radius: 50%; + background-color: rgba(248, 236, 236, 0.5); + } + .other_upload { + margin-left: 15rpx; + width: 80rpx; + } \ No newline at end of file diff --git a/pages/daitika/daitika.js b/pages/daitika/daitika.js new file mode 100644 index 0000000..405ccb7 --- /dev/null +++ b/pages/daitika/daitika.js @@ -0,0 +1,169 @@ +const baseUrl = getApp(); +const api = require('../../config/api.js'); +const util = require('../../config/util.js'); +Page({ + + /** + * 页面的初始数据---练习题查看交卷 + */ + data: { + coursetypefour_id: 1, + grouppaper_id: 1, + listdata: [], + list: [], + typeid:1 + }, + + /** + * 生命周期函数--监听页面加载 + */ + onLoad: function (options) { + console.log('==============='); + console.log(options); + this.setData({ + coursetypefour_id: options.id, + grouppaper_id: options.grouppaper_id, + typeid:options.typeid + }); + }, + + /** + * 生命周期函数--监听页面初次渲染完成 + */ + onReady: function () { + + }, + + /** + * 生命周期函数--监听页面显示 + */ + onShow: function () { + this.getexamright(); + }, + + /** + * 生命周期函数--监听页面隐藏 + */ + onHide: function () { + + }, + + /** + * 生命周期函数--监听页面卸载 + */ + onUnload: function () { + + }, + + /** + * 页面相关事件处理函数--监听用户下拉动作 + */ + onPullDownRefresh: function () { + + }, + + /** + * 页面上拉触底事件的处理函数 + */ + onReachBottom: function () { + + }, + + /** + * 用户点击右上角分享 + */ + onShareAppMessage: function () { + + }, + jumpitem:function(e){ + + console.log(e.currentTarget.dataset.id); + const id=e.currentTarget.dataset.id; + + //得到练习题目 + const that = this; + let url = baseUrl.globalData.baseUrl + '/exam/getexamasitem'; + var param = { + id: id + }; + //此处为使用封装的post请求 + util.post(url, param).then((res) => { + console.log(res.data); + wx.navigateTo({ + url: '/pages/examing/examing?examid='+res.data.coursetypefour_id+'&index='+res.data.index+'&now='+res.data.now, + }) + + + // that.setData({ + // list: res.data.itemdata, + // listdata: res.data + // }); + + }).catch((errMsg) => { + console.log(errMsg); + }); + }, + getexamright: function () { + //得到练习题目 + const that = this; + let url = baseUrl.globalData.baseUrl + '/exam/examuseransweras'; + let user_id = wx.getStorageSync('wxuserid') == '' ? 3 : wx.getStorageSync('wxuserid'); + var param = { + coursetypefour_id: that.data.coursetypefour_id, + user_id: user_id + }; + //此处为使用封装的post请求 + util.post(url, param).then((res) => { + console.log(res.data); + that.setData({ + list: res.data.itemdata, + listdata: res.data + }); + + }).catch((errMsg) => { + console.log(errMsg); + }); + }, + viewallexplain: function (params) { + console.log(params); + console.log(this.data.coursetypefour_id); + let typeid = this.data.typeid; + let coursetypefour_id = this.data.coursetypefour_id; + let grouppaper_id = this.data.grouppaper_id; + console.log(this.data.list); + let arr=[]; + arr=this.data.list; + const arrstr=[]; + arr.forEach(element => { + arrstr.push(element.id); + }); + console.log(arrstr); + let jsonstr=JSON.stringify(arr); + this.examaddinnerdata(jsonstr); + + if (typeid == 1) { + wx.navigateTo({ + url: '/pages/exampaper/exampaper?id=' + coursetypefour_id + '&grouppaper_id=' + grouppaper_id, + }) + } else { + wx.navigateTo({ + url: '/pages/exampaper2/exampaper2?id=' + coursetypefour_id + '&grouppaper_id=' + grouppaper_id, + }) + } + },examaddinnerdata:function(listdata){ + //传送数组参数,批量添加数据 + //得到练习题目 + const that = this; + let url = baseUrl.globalData.baseUrl + '/exam/foreachexaminner'; + var param = { + listdata: listdata + }; + //此处为使用封装的post请求 + util.post(url, param).then((res) => { + console.log(res.data); + }).catch((errMsg) => { + console.log(errMsg); + }); + } + +}) \ No newline at end of file diff --git a/pages/daitika/daitika.json b/pages/daitika/daitika.json new file mode 100644 index 0000000..1a1a695 --- /dev/null +++ b/pages/daitika/daitika.json @@ -0,0 +1,4 @@ +{ + "usingComponents": {}, + "navigationBarTitleText": "答题卡" +} \ No newline at end of file diff --git a/pages/daitika/daitika.wxml b/pages/daitika/daitika.wxml new file mode 100644 index 0000000..aac16ee --- /dev/null +++ b/pages/daitika/daitika.wxml @@ -0,0 +1,27 @@ + + + + + + {{listdata.grouppapername}} + + + + + + + {{index+1}} + + + + + + + + + + + + + + \ No newline at end of file diff --git a/pages/daitika/daitika.wxss b/pages/daitika/daitika.wxss new file mode 100644 index 0000000..1ba642b --- /dev/null +++ b/pages/daitika/daitika.wxss @@ -0,0 +1,159 @@ +/* pages/exampaper2/exampaper2.wxss *//* 交卷头部 */ +.exampaperhead { + width: 100%; + height: 225rpx; + border-bottom: 16rpx solid #e6e2e2; + background-color: #f5f5f5; + } + + .headup { + display: flex; + justify-content: center; + align-items: center; + width: 100%; + height: 100rpx; + padding-top: 60rpx; + } + + .headup text { + font-size: 60rpx; + font-weight: 400; + color: #000000; + } + + .headdown { + display: flex; + justify-content: center; + align-items: center; + width: 100%; + height: 55rpx; + padding-top: 30rpx; + } + + .headdown text { + + font-size: 30rpx; + font-weight: 400; + color: #808080; + } + + /* 交卷头部 */ + + /* 提卷内容 */ + .subitexamcontent { + width: 680rpx; + margin: 40rpx auto; + } + + .examcontentup { + height: 40rpx; + border-left: 8rpx solid #1ccfd6; + margin-bottom: 40rpx; + margin-top: 40rpx; + } + + .examcontentup text { + + margin-left: 20rpx; + color: #010101; + font-size: 30rpx; + font-weight: 400; + } + + .examcontentdown { + display: flex; + flex-wrap: wrap; + width: 660rpx; + margin: 0 30rpx; + } + + .downitem { + width: 77rpx; + height: 77rpx; + flex: 0 19% !important; + margin-bottom: 40rpx; + } + + .examcontentdown image { + width: 77rpx; + height: 77rpx; + margin: 0 auto; + margin-top: 20rpx; + } + + .charclass { + display: flex; + justify-items: center; + } + + .charclass text { + width: 37rpx; + height: 33rpx; + position: relative; + right:2rpx; + left: 10px; + top: -36px; + text-align: center; + } + + /* 提卷内容 */ + + /* 试卷时间 */ + .examtiems { + + width: 680rpx; + height: 50rpx; + margin: 50rpx auto; + } + + .examtiems text { + + display: flex; + flex-direction: column; + justify-content: center; + align-items: center; + font-size: 30rpx; + font-weight: 400; + } + + + + /* 试卷解释 */ + .examanalysis { + + display: flex; + flex-direction: row; + justify-content: center; + align-items: center; + position: fixed; + left: 36rpx; + bottom: 20rpx; + width: 680rpx; + height: 100rpx; + margin: 0 auto; + + } + + .alysisleft{ + + width: 330rpx; + height: 130rpx; + align-items: center; + } + + .alysisleft image { + width: 330rpx; + height: 100rpx; + } + .alysisright{ + + width: 330rpx; + height: 80rpx; + } + .alysisright image { + margin-left: 30rpx; + width: 330rpx; + height: 80rpx; + } + + /* 试卷解释 */ \ No newline at end of file diff --git a/pages/examanalysis/examanalysis.js b/pages/examanalysis/examanalysis.js new file mode 100644 index 0000000..e97a6cd --- /dev/null +++ b/pages/examanalysis/examanalysis.js @@ -0,0 +1,705 @@ +var WxParse = require('../../wxParse/wxParse.js'); +const app = getApp(); +var that; +var Interval; +var wechat; +var id; +var intt; +const baseUrl = getApp(); +const api = require('../../config/api.js'); +const util = require('../../config/util.js'); +var startX, endX; +var moveFlag = true; // 判断执行滑动事件 +Page({ + startX: 0, + startY: 0, + isClear: false, + startPageX: 0, + /** + * 页面的初始数据 --解释笔记 + */ + data: { + + title: '试题解释', + time: 2 * 60 * 60 * 1000, //初始时间 + paystatus: 1, //1未开始时间开始状态,2开始 + collection: 1, //1不收藏,2已收藏 + singdouble: 1, //1单选,2多选 + paiduanactive: 1, //1不是判断,2是判断题 + activeopen: true, + baseurl:baseUrl.globalData.baseimgurl, + paystatus: 1, //1未开始时间开始状态,2开始 + collection: 1, //1不收藏,2已收藏 + singdouble: 1, //1单选,2多选 + paiduanactive:1,//1不是判断,2是判断题 + zstime:1, //1正计,0倒计 + typeid:1, //0练习1正式 + activeopen:true, + coursetypefour_id:1, + itemdatacurrent:[], //当前数据 + itemdataall:[], //全部数据 + itemdata: [], //选项数据 + content:"",//富文本数据 + replylist:[], + showModalStatus: false, + pen: 3, + color: '#FFFFFF', + currentTab: 0, + now: 1, //当前页码 + all: 15, //总页码 + height: 0, + Timer_state: 1, + Answer_card: false, + Draft_paper: false, + false_analysis: false, + stem_height: 150, + jiexi: false, + field: { + analysis_text: "", + }, + img: [], + scroll: "scroll", + index: 0, + drag_line: false, + coursetypefour_id:1, + grouppaper_id:1, + typeid:1, + courseid:1,//试题ID + explainlist:[], //试题类型名称 + duicuo:1 //试题作答对与错1全部,2错的题 + }, + + /** + * 生命周期函数--监听页面加载 + */ + onLoad: function (options) { + wx.setNavigationBarTitle({ + title: this.data.title + }) + console.log(options); + this.setData({ + coursetypefour_id:options.coursetypefour_id, + grouppaper_id:options.grouppaper_id, + typeid:options.id, + duicuo:options.id + }); + }, + + /** + * 生命周期函数--监听页面初次渲染完成 + */ + onReady: function () { + + }, + + /** + * 生命周期函数--监听页面显示 + */ + onShow: function () { + this.getcoursetypefourexam(this.data.coursetypefour_id,this.data.grouppaper_id,this.data.duicuo); + this.wrodtypelist(this.data.courseid); + this.getexamexplantypelist(this.data.courseid); //试题类型列表 + }, + + /** + * 生命周期函数--监听页面隐藏 + */ + onHide: function () { + + }, + + /** + * 生命周期函数--监听页面卸载 + */ + onUnload: function () { + + }, + + /** + * 页面相关事件处理函数--监听用户下拉动作 + */ + onPullDownRefresh: function () { + + }, + + /** + * 页面上拉触底事件的处理函数 + */ + onReachBottom: function () { + + }, + + /** + * 用户点击右上角分享 + */ + onShareAppMessage: function () { + + }, + //----------------------------- + // 手机触摸开始 + //----------------------------- + touchStart: function (e) { + //得到触摸点的坐标 + this.startX = e.changedTouches[0].x + this.startY = e.changedTouches[0].y + this.context = wx.createContext() + this.context.setStrokeStyle(this.data.color) + this.context.setLineWidth(this.data.pen) + this.context.setLineCap('round') // 让线条圆润 + this.context.beginPath() + + }, + //----------------------------- + // 触摸后移动 + //----------------------------- + touchMove: function (e) { + + var startX1 = e.changedTouches[0].x + var startY1 = e.changedTouches[0].y + this.context.moveTo(this.startX, this.startY) + this.context.lineTo(startX1, startY1) + this.context.stroke() + this.startX = startX1; + this.startY = startY1; + wx.drawCanvas({ + canvasId: 'myCanvas', + reserve: true, + actions: this.context.getActions() + }) + }, + penSelect: function (e) { + this.setData({ + pen: parseInt(e.currentTarget.dataset.param) + }); + this.isClear = false; + }, + colorSelect: function (e) { + this.setData({ + color: e.currentTarget.dataset.param + }); + this.isClear = false; + }, + cleardraw: function (e) { + this.setData({ + showModalStatus: false + }); + this.setData({ + showModalStatus: true + }); + }, + caogaoclick: function () { + + this.setData({ + showModalStatus: true, + }) + }, + //----------------------------- + // 草稿纸 + //----------------------------- + shows: function () { + const that = this; + console.log(that.data.Draft_paper); + that.data.Draft_paper = !that.data.Draft_paper; + if (that.data.Draft_paper == false) { + that.setData({ + Draft_paper: true, + }) + this.util('open'); + } else { + that.setData({ + Draft_paper: false, + showModalStatus: false + }) + } + }, + util: function (currentStatu) { + var animation = wx.createAnimation({ + duration: 200, + timingFunction: "linear", + delay: 0, + }); + this.animation = animation; + animation.opacity(0).rotateX(-100).step(); + this.setData({ + animationData: animation.export() + }) + setTimeout(function () { + animation.opacity(1).rotateX(0).step(); + this.setData({ + animationData: animation + }) + if (currentStatu == "close") { + this.setData({ + showModalStatus: false + }); + } + }.bind(this), 200) + // 显示 + if (currentStatu == "open") { + this.setData({ + showModalStatus: true + }); + } + }, + touchStart1: function (e) { + startX = e.touches[0].pageX; // 获取触摸时的原点 + moveFlag = true; + }, + // 触摸移动事件 + touchMove1: function (e) { + endX = e.touches[0].pageX; // 获取触摸时的原点 + if (moveFlag) { + if (endX - startX > 50) { + console.log("move right"); + this.move2right(); + moveFlag = false; + } + if (startX - endX > 50) { + console.log("move left"); + this.move2left(); + moveFlag = false; + } + } + + }, + // 触摸结束事件 + touchEnd1: function (e) { + moveFlag = true; // 回复滑动事件 + }, + move2left() { + const that = this; + const index = that.data.index + 1; + const all = that.data.all; + if (index < all) { + + console.log(that.data.itemdataall[index].id); + this.setData({ + index: index, + now: index + 1, + itemdata: that.data.itemdataall[index].examitem, + itemdatacurrent:that.data.itemdataall[index], + content:that.data.itemdataall[index].name.replace(/\ { + console.log(res.data); + that.setData({ + itemdataall: res.data.item, + itemdata:res.data.item[0].examitem, + all:res.data.item.length, + itemdatacurrent:res.data.item[0], + content:res.data.item[0].name.replace(/\ { + console.log(errMsg); + }); + }, //解释开始 + collectionselect: function (e) { + console.log(e); + this.getcollectionclick(e.currentTarget.id,wx.getStorageSync('wxuserid')); + }, + getcollectionclick:function(collection_id,user_id) { + const that = this; + let url = baseUrl.globalData.baseUrl + '/exam/examcollection'; + var param = { + id: collection_id, + user_id:user_id + }; + //此处为使用封装的post请求 + util.get(url, param).then((res) => { + console.log(res); + that.setData({ + collection: res.data + }) + + }).catch((errMsg) => { + console.log(errMsg); + }); + }, + collectionclickdata:function(collection_id,user_id) { + const that = this; + let url = baseUrl.globalData.baseUrl + '/course/coursecollection'; + var param = { + id: collection_id, + user_id:user_id + }; + //此处为使用封装的post请求 + util.get(url, param).then((res) => { + console.log(res); + this.getcoursedata(that.data.courseid); + + }).catch((errMsg) => { + console.log(errMsg); + }); + }, + displayview:function() { + console.log(this.data.showview); + this.setData({ + showview:(!this.data.showview) + }) + }, + wrodtypelist:function(params){ + + //获取课程留言 + const that = this; + let url = baseUrl.globalData.baseUrl + '/exam/wordsexam'; + var param = { + exam_id: params + }; + //此处为使用封装的post请求 + util.get(url, param).then((res) => { + console.log(res); + that.setData({ + replylist: res.data + }); + + }).catch((errMsg) => { + console.log(errMsg); + }); + }, + wordsclick:function(ee){ + + let e1=ee.currentTarget.id; + let e2=baseUrl.globalData.currentuserinfo.id; + const that = this; + let url = baseUrl.globalData.baseUrl + '/wordslist/wordscourseclickcount'; + var param = { + words_id: e1, + user_id: e2, + }; + //此处为使用封装的post请求 + util.get(url, param).then((res) => { + console.log(res); + + }).catch((errMsg) => { + console.log(errMsg); + }); + }, + uploadpic:function(){ + var that = this; + let imagesList = []; + let maxSize = 1024 * 1024; + let maxLength = 6; + let flag = true; + wx.chooseImage({ + count: 9, //最多可以选择的图片总数 + sizeType: ['original', 'compressed'], // 可以指定是原图还是压缩图,默认二者都有 + sourceType: ['album', 'camera'], // 可以指定来源是相册还是相机,默认二者都有 + success: function (res) { + wx.showToast({ + title: '正在上传...', + icon: 'loading', + mask: true, + duration: 500 + }) + for (let i = 0; i < res.tempFiles.length; i++) { + if (res.tempFiles[i].size > maxSize) { + flag = false; + console.log(111) + wx.showModal({ + content: '图片太大,不允许上传', + showCancel: false, + success: function (res) { + if (res.confirm) { + console.log('用户点击确定') + } + } + }); + } + } + if (res.tempFiles.length > maxLength) { + console.log('222'); + wx.showModal({ + content: '最多能上传' + maxLength + '张图片', + showCancel: false, + success: function (res) { + if (res.confirm) { + console.log('确定'); + } + } + }) + } + if (flag == true && res.tempFiles.length <= maxLength) { + that.setData({ + imagesListp: res.tempFilePaths + }) + that.data.imagestr=[]; + var arr=''; + for (let i = 0; i < that.data.imagesListp.length; i++) { + wx.uploadFile({ + url: baseUrl.globalData.baseUrl + '/wordslist/uploadpics', + filePath: that.data.imagesListp[i], + name: 'file', + success:function(res){ + //打印 + console.log("------------响应数据:"); + console.log(res.data); + + var message = JSON.parse(res.data); + that.data.imagestr.push(message); + that.setData({ + imagestr:that.data.imagestr + }); + }, + }) + + } + + + } + console.log(res); + }, + fail: function (res) { + console.log(res); + } + }) + + }, + formSubmit:function(e) { + + if(wx.getStorageSync('wxuserid')==''){ + wx.navigateTo({ + url: '/pages/userlogin/userlogin', + }) + } + + let content = this.data.wordstextname; + console.log(content) + if (content == '') { + wx.showToast({ + title: '留言内容为空,请填写内容', + icon: 'none', + duration: 1500 + }) + return false; + } + // console.log(this.data.imagestr); + this.wordsadd(content,this.data.imagestr); + + }, + bindTextAreaBlur: function(e) { + this.setData({ + wordstextname:e.detail.value + }) + }, + uploadpicsimage:function(e){ + + const that = this; + let url = baseUrl.globalData.baseUrl + '/wordslist/uploadpics'; + var param = { + url: e + }; + //此处为使用封装的post请求 + util.post(url, param).then((res) => { + console.log(res); + + }).catch((errMsg) => { + console.log(errMsg); + }); + }, + wordsadd:function(content,imagestr){ + + const that = this; + let url = baseUrl.globalData.baseUrl + '/exam/examexplainadd'; + var param = { + content: content, + imagestr:imagestr, + userid:wx.getStorageSync('wxuserid')==''?3:wx.getStorageSync('wxuserid'), + exam_id:that.data.courseid + }; + //此处为使用封装的post请求 + util.post(url, param).then((res) => { + console.log(res.data); + if(res.data>0){ + wx.showToast({ + title: '留言内容成功', + icon: 'none', + duration: 1500 + }) + + that.wrodtypelist(that.data.courseid); //试题留言 + that.getexamexplantypelist(that.data.courseid); //试题类型列表 + that.setData({ + wordstextname:'' + }) + + } + + }).catch((errMsg) => { + console.log(errMsg); + }); + },contentclick:function(params) { + + console.log(params); + let id=params.currentTarget.id; + let xid=params.currentTarget.dataset.xid; + console.log(id); + this.setData({ + wordstextname:'回复@'+id, + showview:true + }); + + this.addinccomment(xid); + + wx.showToast({ + title: '@成功,留言请移底部留言', + icon: 'none', + duration: 1500 + }) + + + },rdclick:function(params) { + wx.navigateTo({ + url: '/pages/communityinfo/communityinfo?id='+params.currentTarget.id, + }) + },addinccomment:function(params) { + //增加评论数 + console.log(params); + let userid=wx.getStorageSync('wxuserid'); + const that = this; + let url = baseUrl.globalData.baseUrl + '/exam/addcommentcount'; + var param = { + id:params + }; + //此处为使用封装的post请求 + util.get(url, param).then((res) => { + console.log(res); + // this.wrodtypelist(this.data.courseid) + this.wrodtypelist(that.data.courseid); + this.getexamexplantypelist(that.data.courseid); + }).catch((errMsg) => { + console.log(errMsg); + }); + }, + clickbtn:function(params) { + console.log(params); + let userid=wx.getStorageSync('wxuserid'); + const that = this; + let url = baseUrl.globalData.baseUrl + '/exam/wordscourseclickcount'; + var param = { + words_id:params.currentTarget.id, + user_id: userid + }; + //此处为使用封装的post请求 + util.get(url, param).then((res) => { + console.log(res); + // this.wrodtypelist(this.data.courseid) + this.wrodtypelist(this.data.courseid); + this.getexamexplantypelist(this.data.courseid); + }).catch((errMsg) => { + console.log(errMsg); + }); + }, + preview:function (params) { + let that=this; + console.log(params) + let currentUrl = params.currentTarget.dataset.src; + let arrindex=params.currentTarget.dataset.id; + + let rearr=that.data.replylist[arrindex].pics; + console.log(rearr); + let arr=[]; + rearr.forEach(function (item,index) { + arr[index]=that.data.baseurl+item + }); + console.log(arr); + wx.previewImage({ + current: currentUrl, // 当前显示图片的http链接 + urls: arr // 需要预览的图片http链接列表 + }) + }, + getexamexplantypelist:function(params) { + + console.log(params); + let userid=wx.getStorageSync('wxuserid'); + const that = this; + let url = baseUrl.globalData.baseUrl + '/exam/examexplaintypelist'; + var param = { + exam_id:params + }; + //此处为使用封装的post请求 + util.get(url, param).then((res) => { + console.log(res); + this.setData({ + + explainlist:res.data + + }) + // this.wrodtypelist(this.data.courseid) + // this.wrodtypelist(this.data.courseid); + }).catch((errMsg) => { + console.log(errMsg); + }); + + } + + +}) \ No newline at end of file diff --git a/pages/examanalysis/examanalysis.json b/pages/examanalysis/examanalysis.json new file mode 100644 index 0000000..8835af0 --- /dev/null +++ b/pages/examanalysis/examanalysis.json @@ -0,0 +1,3 @@ +{ + "usingComponents": {} +} \ No newline at end of file diff --git a/pages/examanalysis/examanalysis.wxml b/pages/examanalysis/examanalysis.wxml new file mode 100644 index 0000000..cdc5563 --- /dev/null +++ b/pages/examanalysis/examanalysis.wxml @@ -0,0 +1,233 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + {{now}}/{{all}} + + + + + + + + + + + + + + + + + + + + 【{{itemdatacurrent.itemname}}】 + + + + + + + + + + + + + + + + + + {{item.charmu}} + + + + {{item.title}} + + + + + + + + + + + 【{{itemdatacurrent.itemname}}】 + + + + + + + + + + + + {{item.charmu}} + + + + {{item.title}} + + + + + + + + + + + + 正确答案 + + +     {{itemdatacurrent['answer']}} + + + + + {{itemdatacurrent['answername']}} + + + + + + + + + + {{item.name}} + + + + + + + + + + + + + + + + + + 解释 + + + + + + + + + + + + + + + {{item.userinfo['nickname']}} + + + {{item.times}} + + + + + + + {{item.name}} + + + + + + + + + + + + + + + + + + + {{item.commentcount}} + + + + {{item.wordsclickcount}} + + + + + + + + +
+ + + + + + + + + + + +
+ +
+ + \ No newline at end of file diff --git a/pages/examanalysis/examanalysis.wxss b/pages/examanalysis/examanalysis.wxss new file mode 100644 index 0000000..9390a00 --- /dev/null +++ b/pages/examanalysis/examanalysis.wxss @@ -0,0 +1,635 @@ +.page { + background-color: #ededed; +} + +.examing { + display: flex; + flex-direction: row; + align-items: center; + width: 100%; + height: 80rpx; + background-color: #49dae0; + position: fixed; + top: 0; +} + +.item1 { + width: 50rpx; + height: 50rpx; + margin: 0 19rpx; +} + +.item1 image { + width: 50rpx; + height: 50rpx; + margin: 0 19rpx; +} + +.item4 { + width: 50rpx; + height: 50rpx; + margin-top: 10rpx; + margin-left: 80rpx; + +} + +.item4 image { + width: 50rpx; + height: 44rpx; + margin: 0 19rpx; +} + +.item5 { + width: 100rpx; + height: 50rpx; + margin-top: 10rpx; + margin-left: 120rpx; + +} + +.item5 image { + width: 38rpx; + height: 47rpx; + margin: 0 22rpx; +} + +.item2 { + width: 150rpx; + height: 50rpx; + margin-top: 16rpx; + margin-left: 19rpx; +} + +.item2 text { + width: 150rpx; + height: 50rpx; + color: white; +} + +.item3 { + width: 100rpx; + height: 50rpx; + margin-top: 10rpx; + margin-left: 79rpx; +} + +.item3 text { + width: 100rpx; + height: 50rpx; + color: white; +} + +.examingfooter { + display: flex; + flex-direction: row; + align-items: center; + justify-content: space-between; + width: 100%; + height: 80rpx; + background-color: #49dae0; + position: fixed; + bottom: 0; +} + +.footerleft image { + margin: 0 25rpx; + width: 160rpx; + height: 53rpx; +} + +.footermiddle image { + margin: 0 25rpx; + width: 160rpx; + height: 53rpx; +} + +.footerright image { + margin: 0 25rpx; + width: 160rpx; + height: 53rpx; +} + +.examingcontent { + width: 700rpx; + margin: 80rpx auto; + /* max-height: 250rpx; + overflow: hidden; */ +} + +.examingcontent2 { + width: 700rpx; + margin: 80rpx auto; +} + + +.examingcontent text { + font-size: 30rpx; + font-weight: 400; + +} + +.examintcontentda { + width: 700rpx; + margin: 0 auto; + float: left; + margin-bottom: 80rpx; +} + +.contentleft { + float: left; + width: 50rpx; + height: 50rpx; + line-height: 50rpx; + margin-left: 25rpx; +} + +.contentleft image { + width: 49rpx; + height: 49rpx; +} + +.contentright { + margin-left: 25rpx; + float: left; + width: 600rpx; +} + +.charclass { + display: flex; + justify-items: center; +} + +.charclass text { + width: 37rpx; + height: 33rpx; + position: relative; + left: 4px; + top: -31px; + text-align: center; +} + +.item2 .van-count-down { + color: white; +} + +/*草稿纸*/ +.topic_cgz { + position: fixed; + top: 0; + width: 100%; + height: 100%; + background-color: rgba(0, 0, 0, 0.4); + z-index: 999; + overflow: hidden; +} + +.topic_cgz_tab { + width: 100%; + height: 100%; + padding: 0; + position: fixed; + top: 0rpx; +} + +.topic_cgz_tab .fl { + width: 25%; + text-align: center; +} + +.topic_cgz_tab image { + width: 60rpx; + height: 60rpx; +} + +/*滚动层*/ +scroll-item { + z-index: 9; +} + +.scoll-h { + height: 100%; +} + +.tab-content { + height: 100%; + width: 100%; + background: #fff; +} + +.the_big_box { + height: 100%; + width: 100%; + background: #fff; + overflow-x: hidden; +} + +.tab-content-top { + margin-top: 20rpx; +} + +.toolsclass { + display: flex; + justify-items: center; + justify-content: space-between; + width: 100%; + margin: 0 auto; + height: 200rpx; + position: fixed; + bottom: 200; +} + +.openclass { + + display: flex; + justify-content: center; + width: 700rpx; + margin: 80rpx auto; + +} + +.openclass image { + width: 120rpx; + height: 24rpx; +} + +.examanswer { + display: flex; + flex-direction: row; + justify-content: space-between; + align-items: center; + width: 100%; + height: 180rpx; + background-color: #f0f0f0; + margin: 50rpx auto; +} + +.answerleft { + display: flex; + flex-direction: column; + justify-content: center; + align-items: center; + width: 45%; + height: 180rpx; + align-items: center; +} +.answerleftup{ + + color: #808080; + font-size: 35rpx; +} + +.answerleftdown{ + + color: #1ccfd6; + font-size: 45rpx; + font-weight: 400; +} + +.answerright { + + display: flex; + flex-direction: column; + justify-content: center; + align-items: center; + width: 45%; + height: 180rpx; + align-items: center; + color: #000000; + font-size: 35rpx; +} + +.analysisnote{ + + width: 720rpx; + height: 280rpx; + overflow: hidden; + margin: 0 auto; + display: flex; + flex-direction:row; +} +.analysisnoteleft{ + width: 60%; + display: flex; + flex-wrap: wrap; + justify-content: space-between; + +} +.leftitem{ + margin-right: 20rpx; + line-height: 50rpx; + width: 44%; + height: 50rpx; + border: 1rpx solid #49dae0; + color: #49dae0; + font-size: 26rpx; + text-align: center; + margin-top: 10rpx; + +} + +.leftitem2{ + margin-right: 20rpx; + margin-right: 20rpx; + line-height: 50rpx; + width: 44%; + height: 50rpx; + border: 1rpx solid #909090; + color: #909090; + font-size: 26rpx; + text-align: center; + +} +.analysisnoteright{ + width: 38%; + height: 200rpx; + text-align: right; +} +.analysisnoteright image{ + + width: 180rpx; + height: 50rpx; + margin-right: 20rpx; + +} +.feigexiang{ + + width: 620rpx; + height: 10rpx; + border-bottom: 1rpx solid #dedcdc; + margin: 20rpx auto; +} +.explainline { + width: 705rpx; + height: 30rpx; + margin: 0 auto; + border-left: 8rpx solid #49dae0; +} +.explainline text{ + + + display: flex; + flex-direction: column; + justify-content:baseline; + align-items:left; + height: 30rpx; + line-height: 30rpx; + + font-size: 30rpx; + color:#323232; + margin-left: 30rpx; +} + +/* 笔记解释 */ +.messagearea text { + + display: block; + font-size: 40rpx; + font-weight: 600rpx; + margin-left: 60rpx; +} + +.msseagehead { + display: flex; + flex-direction: row; +} + +.headleft { + margin-left: 60rpx; + margin-top: 50rpx; + width: 140rpx; + height: 140rpx; + border-radius: 50%; + overflow: hidden; +} + +.headleft image { + + width: 130rpx; + height: 133rpx; +} + +.headright { + margin-top: 80rpx; + margin-left: 23rpx; + width: 485rpx; + height: 142rpx; +} + +.headrightup text { + + font-size: 30rpx; + /* font-weight: 400rpx; */ +} + +.headrightdown { + margin-top: 10rpx; +} + +.msseagemiddle { + margin: 0 60rpx; +} + +.mssagemiddledown { + margin: 25rpx auto; +} + +.mssagemiddledown image { + + width: 100%; + height: 265rpx; +} + +.messageend { + + margin: 0 60rpx; + display: flex; + flex-direction: row; + justify-content: space-between; + +} + +.messageendleft { + width: 150rpx; + height: 30rpx; +} + +.messageendleft image { + width: 100rpx; + height: 30rpx; +} + +.messageendmiddle { + width: 150rpx; + height: 30rpx; +} + +.messageendmiddle image { + width: 35rpx; + height: 30rpx; +} + +.messageendmiddle text { + + font-size: 28rpx; + padding-left: 23rpx; +} + +.messageendright { + + width: 150rpx; + height: 30rpx; +} + +.messageendright image { + width: 35rpx; + height: 30rpx; + +} + +.messageendright text { + + font-size: 28rpx; + padding-left: 23rpx; +} +.feigexian{ + + margin: 0 60rpx; + margin-top: 60rpx; + border-bottom: 2rpx solid #ada2a2; +} +.vipimage image{ + width: 37rpx; + height: 33rpx; + position: relative; + left: -25px; + top: 83px; +} + +/* 笔记解释 */ + + +.examingcontent { + width:100%; + margin: 80rpx auto; + /* max-height: 250rpx; + overflow: hidden; */ +} + +.examingcontent2 { + width: 95%; + margin: 80rpx auto; +} + + +.examingcontent text { + font-size: 30rpx; + font-weight: 400; + +} + +.examintcontentda { + width: 700rpx; + margin: 0 auto; + float: left; + margin-bottom: 80rpx; +} + +.contentleft { + float: left; + width: 50rpx; + height: 50rpx; + line-height: 50rpx; + margin-left: 25rpx; +} + +.contentleft image { + width: 49rpx; + height: 49rpx; +} + +.contentright { + margin-left: 25rpx; + float: left; + width: 600rpx; +} + +.charclass { + display: flex; + justify-items: center; +} + +.charclass text { + width: 37rpx; + height: 33rpx; + position: relative; + left: 8rpx; + top: -60rpx; + text-align: center; +} + +.item2 .van-count-down { + color: white; +} + /* + 解释开始 + */ + + +.areaclass{ + width: 540rpx; + min-height: 300rpx; + margin: 0 auto; + margin-top: 80rpx; + background-color: #f0f0f1; + border-radius: 5%; +} +.areaclass textarea{ + width: 540rpx; + min-height: 300rpx; +} + + +.areafooter{ + display: flex; + align-items: center; + justify-content: space-between; + width: 540rpx; + height: 60rpx; + margin: 0 auto; + margin-top: 10rpx; +} +.areafooterleft image{ + + width: 52rpx; + height: 52rpx; + +} +.areafooterright text{ + font-size: 28rpx; + font-weight: 600; + color: #217ced; +} +.areafooterright{ + width: 120rpx; + height: 56rpx; +} +.areafooterright button{ + + width: 120rpx; + height: 50rpx; + line-height: 50rpx; + font-size: 28rpx; + font-weight: 600; + color: #217ced; + border:none; +} +button::after { + border: none; +} + +.header_view_hide{ + display: none; +} +.header_view_show{ + display: block; +} \ No newline at end of file diff --git a/pages/examing/examing.js b/pages/examing/examing.js new file mode 100644 index 0000000..28ba18a --- /dev/null +++ b/pages/examing/examing.js @@ -0,0 +1,739 @@ +var WxParse = require('../../wxParse/wxParse.js'); +const app = getApp(); +var that; +var Interval; +var wechat; +var id; +var intt; +const baseUrl = getApp(); +const api = require('../../config/api.js'); +const util = require('../../config/util.js'); +Page({ + startX: 0, + startY: 0, + isClear: false, + + /** + * 页面的初始数据 + */ + data: { + reexam: 0, //是否反复作答 0不是,1是 + index: 0, + hour: 0, + minute: 0, + second: 0, + millisecond: 0, + timecount: '00:00:00', + cost: 0, + flag: 1, + endtime: "", + baseurl: baseUrl.globalData.baseimgurl, + time: 1 * 60 * 60 * 1000, //初始时间 + paystatus: 1, //1未开始时间开始状态,2开始 + collection: 1, //1不收藏,2已收藏 + singdouble: 1, //1单选,2多选 + paiduanactive: 1,//1不是判断,2是判断题 + zstime: 1, //1正计,0倒计 + typeid: 1, //0练习1正式 + activeopen: true, + coursetypefour_id: 1, + itemdatacurrent: [], //当前数据 + itemdataall: [], //全部数据 + itemdata: [], //选项数据 + content: "",//富文本数据 + showModalStatus: false, + pen: 3, + color: '#FFFFFF', + currentTab: 0, + now: 1, //当前页码 + all: 15, //总页码 + height: 0, + Timer_state: 1, + Answer_card: false, + Draft_paper: false, + false_analysis: false, + stem_height: 150, + jiexi: false, + field: { + analysis_text: "", + }, + img: [], + scroll: "scroll", + drag_line: false, + showvide: false, + showexampop: false, //查看交卷, + examlistdata: [], + examlist: [], + }, + showPopup() { + this.getids(); //先初始答题卡数据 + this.setData({ showexampop: true }); + this.getexamright(); + }, + + onCloseexam() { + this.setData({ showexampop: false }); + }, + + /** + * 生命周期函数--监听页面加载 + */ + onLoad: function (options) { + + baseUrl.islogin(); + console.log(options) + if (options.index) { + this.setData({ + index: options.index, + reexam: 1 + }); + } + + if (options.now) { + this.setData({ + now: options.now + }); + } + this.setData({ + coursetypefour_id: options.examid + }); + + this.start(); + }, + + /**getcoursetypefourexam + * 生命周期函数--监听页面初次渲染完成 + */ + onReady: function () { + + }, + + /** + * 生命周期函数--监听页面显示 + */ + onShow: function () { + + console.log("================"); + console.log(this.data.index); + this.getcoursetypefourexam(this.data.coursetypefour_id, this.data.index); + this.initadddata(this.data.itemdataall, this.data.coursetypefour_id, wx.getStorageSync('wxuserid')); + }, + + /** + * 生命周期函数--监听页面隐藏 + */ + onHide: function () { + + }, + + /** + * 生命周期函数--监听页面卸载 + */ + onUnload: function () { + + }, + + /** + * 页面相关事件处理函数--监听用户下拉动作 + */ + onPullDownRefresh: function () { + + }, + + /** + * 页面上拉触底事件的处理函数 + */ + onReachBottom: function () { + + }, + + /** + * 用户点击右上角分享 + */ + onShareAppMessage: function () { + + }, + start: function () { + + let zstime = this.data.zstime; + if (zstime == 0) { + const countDown = this.selectComponent('.control-count-down'); + countDown.start(); + + } else { + + this.zsstart(); + } + this.setData({ + paystatus: 2 + }) + + }, + pause() { + let zstime = this.data.zstime; + if (zstime == 0) { + const countDown = this.selectComponent('.control-count-down'); + countDown.pause(); + + } else { + // this.zsstop(); + this.zsstop(); + + this.setData({ + showvide: true + }); + + } + this.setData({ + paystatus: 1 + }) + + }, + finished() { + console.log("交卷") + }, + collectionselect: function (e) { + console.log(e); + this.getcollectionclick(e.currentTarget.id, wx.getStorageSync('wxuserid')); + }, + getcollectionclick: function (collection_id, user_id) { + const that = this; + let url = baseUrl.globalData.baseUrl + '/exam/examcollection'; + var param = { + id: collection_id, + user_id: user_id + }; + //此处为使用封装的post请求 + util.get(url, param).then((res) => { + console.log(res); + that.setData({ + collection: res.data + }) + + }).catch((errMsg) => { + console.log(errMsg); + }); + }, + + //----------------------------- + // 手机触摸开始 + //----------------------------- + touchStart: function (e) { + //得到触摸点的坐标 + this.startX = e.changedTouches[0].x + this.startY = e.changedTouches[0].y + this.context = wx.createContext() + this.context.setStrokeStyle(this.data.color) + this.context.setLineWidth(this.data.pen) + this.context.setLineCap('round') // 让线条圆润 + this.context.beginPath() + + }, + //----------------------------- + // 触摸后移动 + //----------------------------- + touchMove: function (e) { + + var startX1 = e.changedTouches[0].x + var startY1 = e.changedTouches[0].y + this.context.moveTo(this.startX, this.startY) + this.context.lineTo(startX1, startY1) + this.context.stroke() + this.startX = startX1; + this.startY = startY1; + wx.drawCanvas({ + canvasId: 'myCanvas', + reserve: true, + actions: this.context.getActions() + }) + }, + penSelect: function (e) { + this.setData({ + pen: parseInt(e.currentTarget.dataset.param) + }); + this.isClear = false; + }, + colorSelect: function (e) { + this.setData({ + color: e.currentTarget.dataset.param + }); + this.isClear = false; + }, + cleardraw: function (e) { + this.setData({ + showModalStatus: false + }); + this.setData({ + showModalStatus: true + }); + }, + caogaoclick: function () { + + this.setData({ + showModalStatus: true, + }) + }, + //----------------------------- + // 草稿纸 + //----------------------------- + shows: function () { + const that = this; + console.log(that.data.Draft_paper); + that.data.Draft_paper = !that.data.Draft_paper; + if (that.data.Draft_paper == false) { + that.setData({ + Draft_paper: true, + }) + this.util('open'); + } else { + that.setData({ + Draft_paper: false, + showModalStatus: false + }) + } + }, + util: function (currentStatu) { + var animation = wx.createAnimation({ + duration: 200, + timingFunction: "linear", + delay: 5, + }); + this.animation = animation; + animation.opacity(0).rotateX(-100).step(); + this.setData({ + animationData: animation.export() + }) + setTimeout(function () { + animation.opacity(1).rotateX(0).step(); + this.setData({ + animationData: animation + }) + if (currentStatu == "close") { + this.setData({ + showModalStatus: false + }); + } + }.bind(this), 200) + // 显示 + if (currentStatu == "open") { + this.setData({ + showModalStatus: true + }); + } + }, //----------------------------- + // 究极的过度效果 + //----------------------------- + guodu: function () { + var animation = wx.createAnimation({ + timingFunction: "ease-in-out", + delay: 15, + }); + this.animation = animation; + animation.opacity(0).translateY(-50).scale(0).step(150); + this.setData({ + animationData: animation.export() + }) + setTimeout(function () { + animation.opacity(1).translateY(0).scale(1).step(100); + this.setData({ + animationData: animation + }) + }.bind(this), 150); + }, + next: function (e) { + + const that = this; + that.getids(); //增加没有选项数据 + that.guodu(); + const index = that.data.index - 0 + 1; + console.log('------------'); + console.log(index); + const all = that.data.all; + if (index < all) { + that.setData({ + index: index, + now: index + 1, + itemdata: that.data.itemdataall[index].examitem, + itemdatacurrent: that.data.itemdataall[index], + content: that.data.itemdataall[index].name.replace(/\ { + if (item.id == index && item.selectvalue == "1") { + item.selectvalue = "2"; + } else if (item.id == index) { + item.selectvalue = "1"; + } + return item + }) + console.log(arr); + this.setData({ + itemdata: arr + }); + + }, //获取id + getids() { + let ids = this.data.itemdata.filter(item => item.selectvalue == '2').map(item => item.charmu); + let dx = this.data.itemdata.filter(item => item.selectvalue == '2').map(item => item.charmu); + console.log(ids); + console.log(dx); + console.log('多选Id:' + ids) + console.log('单选Id:' + dx); + console.log(this.data.itemdatacurrent); + let itemcurrent = this.data.itemdatacurrent; + let user_id = wx.getStorageSync('wxuserid') == '' ? 3 : wx.getStorageSync('wxuserid'); + let examanswer = 1; + if (itemcurrent.examtype == 1) { + examanswer = dx + ''; + } else { + examanswer = ids + ''; + } + this.addexamdata(this.data.coursetypefour_id, itemcurrent.examtype, itemcurrent.typeid, itemcurrent.id, itemcurrent.itemname, examanswer, itemcurrent.answer, user_id, itemcurrent.grouppaper_id, this.data.index, this.data.now); + + }, + initadddata: function (params, coursetypefour_id, user_id) { + //初始化答题卡数据 (1) + + console.log("===========----============="); + console.log(params); + let arr = params; + arr.forEach((element, index) => { + console.log(element); + let itemcurrent = element; + console.log(coursetypefour_id); + console.log(index); + console.log(arr.length); + this.addexamdata(coursetypefour_id, itemcurrent.examtype, itemcurrent.typeid, itemcurrent.id, itemcurrent.itemname, '', itemcurrent.answer, user_id, itemcurrent.grouppaper_id, index, arr.length); + }); + console.log("===========----============="); + }, + bindActive: function (e) { + + let arr = this.data.itemdata.map(item => { + if (item.id === e.currentTarget.dataset.id) { + item.selectvalue = 2 + } else { + item.selectvalue = 1 + } + return item + }) + this.setData({ + itemdata: arr + }); + // this.getids(); + this.next(this.data.now); + }, + openactive: function (e) { + console.log(e); + let opendata = this.data.openactive; + opendata = !opendata; + console.log(opendata); + this.setData({ + activeopen: opendata, + openactive: opendata + }) + + }, + //开始 + zsstart: function () { + var that = this; + //停止(暂停) + clearInterval(intt); + //时间重置 + that.setData({ + hour: that.data.hour, + minute: that.data.minute, + second: that.data.second, + millisecond: that.data.millisecond, + paystatus: 2 + }) + intt = setInterval(function () { that.zstimer() }, 50); + + + }, + //暂停 + zsstop: function () { + clearInterval(intt); + }, + //停止 + zsReset: function () { + var that = this + clearInterval(intt); + that.setData({ + hour: 0, + minute: 0, + second: 0, + millisecond: 0, + timecount: '00:00:00', + }) + }, + zstimer: function () { + var that = this; + // console.log(that.data.millisecond) + that.setData({ + millisecond: that.data.millisecond + 5 + }) + if (that.data.millisecond >= 100) { + that.setData({ + millisecond: 0, + second: that.data.second + 1 + }) + } + if (that.data.second >= 60) { + that.setData({ + second: 0, + minute: that.data.minute + 1 + }) + } + + if (that.data.minute >= 60) { + that.setData({ + minute: 0, + hour: that.data.hour + 1 + }) + } + that.setData({ + timecount: that.data.hour + ":" + that.data.minute + ":" + that.data.second + }) + }, + getcoursetypefourexam: function (params, index) { + + //得到练习题目 + const that = this; + let url = baseUrl.globalData.baseUrl + '/exam/paperexamitemas'; + var param = { + coursetypefour_id: params, + user_id: wx.getStorageSync('wxuserid') + }; + //此处为使用封装的post请求 + util.post(url, param).then((res) => { + + // that.initadddata(res.data.item, params, wx.getStorageSync('wxuserid')); + that.setData({ + itemdataall: res.data.item, + itemdata: res.data.item[index].examitem, + all: res.data.item.length, + itemdatacurrent: res.data.item[index], + content: res.data.item[index].name.replace(/\ { + console.log(errMsg); + }); + }, + addexamdata: function (coursetypefour_id, examtype, typeid, exam_id, itemname, answer, rightanswer, user_id, grouppaper_id, index, now) { + + //得到练习题目 + const that = this; + let url = baseUrl.globalData.baseUrl + '/exam/examaddas'; + var param = { + coursetypefour_id: coursetypefour_id, + examtype: examtype, + typeid: typeid, + exam_id: exam_id, + itemname: itemname, + answer: answer, + rightanswer: rightanswer, + user_id: user_id, + grouppaper_id: grouppaper_id, + index: index, + now: now + }; + //此处为使用封装的post请求 + util.post(url, param).then((res) => { + console.log(res); + + }).catch((errMsg) => { + console.log(errMsg); + }); + }, + subitexam: function () { + let examtype = this.data.singdouble; + let id = this.data.coursetypefour_id; + let typeid = this.data.typeid; + let grouppaper_id = this.data.itemdatacurrent.grouppaper_id; + console.log(id); + this.getids(); + // if (typeid == 1) { + // wx.navigateTo({ + // url: '/pages/daitika/daitika?id=' + id + '&grouppaper_id=' + grouppaper_id, + // }) + // } else { + // wx.navigateTo({ + // url: '/pages/exampaper2/exampaper2?id=' + id + '&grouppaper_id=' + grouppaper_id, + // }) + // } + wx.redirectTo({ + url: '/pages/daitika/daitika?id=' + id + '&grouppaper_id=' + grouppaper_id + '&typeid=' + typeid, + }) + + }, + getexamright: function () { + + //弹出答题卡 + //得到练习题目 + const that = this; + let url = baseUrl.globalData.baseUrl + '/exam/examuseransweras'; + let user_id = wx.getStorageSync('wxuserid') == '' ? 3 : wx.getStorageSync('wxuserid'); + var param = { + coursetypefour_id: that.data.coursetypefour_id, + user_id: user_id + }; + //此处为使用封装的post请求 + util.post(url, param).then((res) => { + console.log(res.data); + that.setData({ + examlist: res.data.itemdata, + examlistdata: res.data + }); + + }).catch((errMsg) => { + console.log(errMsg); + }); + }, + jumpitem: function (e) { + + console.log(e.currentTarget.dataset.id); + const id = e.currentTarget.dataset.id; + + //得到练习题目 + const that = this; + let url = baseUrl.globalData.baseUrl + '/exam/getexamasitem'; + var param = { + id: id + }; + //此处为使用封装的post请求 + util.post(url, param).then((res) => { + console.log("aaaaaaaaaaaaaaaaaaaaaaaaaaa") + console.log(res.data); + // wx.navigateTo({ + // url: '/pages/examing/examing?examid='+res.data.coursetypefour_id+'&index='+res.data.index+'&now='+res.data.now, + // }) + that.setData({ + index: res.data.index, + now: res.data.index - 0 + 1 + }); + + that.getcoursetypefourexam(res.data.coursetypefour_id, res.data.index); + + }).catch((errMsg) => { + console.log(errMsg); + }); + }, + viewallexplain: function (params) { + + let typeid = this.data.typeid; + let coursetypefour_id = this.data.coursetypefour_id; + + let currentdata=this.data.itemdatacurrent; + console.log('currentdata========================'); + console.log(currentdata); + + let grouppaper_id = currentdata.grouppaper_id; + + console.log('grouppaper_id========================'); + console.log(grouppaper_id); + console.log(this.data.examlist); + let arr = []; + arr = this.data.examlist; + const arrstr = []; + arr.forEach(element => { + arrstr.push(element.id); + }); + console.log(arrstr); + let jsonstr = JSON.stringify(arr); + this.examaddinnerdata(jsonstr); + + if (typeid == 1) { + wx.navigateTo({ + url: '/pages/exampaper/exampaper?id=' + coursetypefour_id + '&grouppaper_id=' + grouppaper_id, + }) + } else { + wx.navigateTo({ + url: '/pages/exampaper2/exampaper2?id=' + coursetypefour_id + '&grouppaper_id=' + grouppaper_id, + }) + } + }, examaddinnerdata: function (listdata) { + //传送数组参数,批量添加数据 + //得到练习题目 + const that = this; + let url = baseUrl.globalData.baseUrl + '/exam/foreachexaminner'; + var param = { + listdata: listdata + }; + //此处为使用封装的post请求 + util.post(url, param).then((res) => { + console.log(res.data); + }).catch((errMsg) => { + console.log(errMsg); + }); + } + + +}) \ No newline at end of file diff --git a/pages/examing/examing.json b/pages/examing/examing.json new file mode 100644 index 0000000..6f0c60a --- /dev/null +++ b/pages/examing/examing.json @@ -0,0 +1,4 @@ +{ + "usingComponents": {}, + "navigationBarTitleText": "考试进行中。。。" +} \ No newline at end of file diff --git a/pages/examing/examing.wxml b/pages/examing/examing.wxml new file mode 100644 index 0000000..7e9a745 --- /dev/null +++ b/pages/examing/examing.wxml @@ -0,0 +1,176 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + {{timecount}} + + + {{now}}/{{all}} + + + + + + + + + + + + + + + + + + 【{{itemdatacurrent.itemname}}】 + + + + + + + + + + + + + + + + + + {{item.charmu}} + + + + {{item.title}} + + + + + + + + + + + 【{{itemdatacurrent.itemname}}】 + + + + + + + + + + + + {{item.charmu}} + + + + {{item.title}} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + {{examlistdata.grouppapername}} + + + + + + + {{index+1}} + + + + + + + + + + + + \ No newline at end of file diff --git a/pages/examing/examing.wxss b/pages/examing/examing.wxss new file mode 100644 index 0000000..634fdc0 --- /dev/null +++ b/pages/examing/examing.wxss @@ -0,0 +1,369 @@ +.page { + background-color: #ededed; +} + +.examing { + display: flex; + flex-direction: row; + align-items: center; + width: 100%; + height: 80rpx; + background-color: #49dae0; + position: fixed; + top: 0; +} + +.item1 { + width: 50rpx; + height: 50rpx; + margin: 0 19rpx; +} + +.item1 image { + width: 50rpx; + height: 50rpx; + margin: 0 19rpx; +} + +.item4 { + width: 50rpx; + height: 50rpx; + margin-top: 10rpx; + margin-left: 80rpx; + +} + +.item4 image { + width: 50rpx; + height: 44rpx; + margin: 0 19rpx; +} + +.item5 { + width: 100rpx; + height: 50rpx; + margin-top: 10rpx; + margin-left: 120rpx; + +} + +.item5 image { + width: 38rpx; + height: 47rpx; + margin: 0 22rpx; +} + +.item2 { + width: 150rpx; + height: 50rpx; + margin-top: 16rpx; + margin-left: 19rpx; +} + +.item2 text { + width: 150rpx; + height: 50rpx; + color: white; +} + +.item3 { + width: 100rpx; + height: 50rpx; + margin-top: 10rpx; + margin-left: 79rpx; +} + +.item3 text { + width: 100rpx; + height: 50rpx; + color: white; +} + +.examingfooter { + display: flex; + flex-direction: row; + align-items: center; + justify-content: space-between; + width: 100%; + height: 80rpx; + background-color: #49dae0; + position: fixed; + bottom: 0; +} + +.footerleft image { + margin: 0 25rpx; + width: 160rpx; + height: 53rpx; +} + +.footermiddle image { + margin: 0 25rpx; + width: 160rpx; + height: 53rpx; +} + +.footerright image { + margin: 0 25rpx; + width: 160rpx; + height: 53rpx; +} + +.examingcontent { + width:100%; + margin: 80rpx 20rpx; + /* max-height: 250rpx; + overflow: hidden; */ +} + +.examingcontent2 { + width: 100%; + margin: 80rpx auto; +} + + +.examingcontent text { + font-size: 30rpx; + font-weight: 400; + +} + +.examintcontentda { + width: 700rpx; + margin: 0 auto; + float: left; + margin-bottom: 80rpx; +} + +.contentleft { + float: left; + width: 50rpx; + height: 50rpx; + line-height: 50rpx; + margin-left: 25rpx; +} + +.contentleft image { + width: 49rpx; + height: 49rpx; +} + +.contentright { + margin-left: 25rpx; + float: left; + width: 600rpx; +} + +.charclass { + display: flex; + justify-items: center; +} + +.charclass text { + width: 37rpx; + height: 33rpx; + position: relative; + left: 8rpx; + top: -60rpx; + text-align: center; +} + +.item2 .van-count-down { + color: white; +} + +/*草稿纸*/ +.topic_cgz { + position: fixed; + top: 0; + width: 100%; + height: 100%; + background-color: rgba(0, 0, 0, 0.4); + z-index: 999; + overflow: hidden; +} + +.topic_cgz_tab { + width: 100%; + height: 100%; + padding: 0; + position: fixed; + top: 0rpx; +} + +.topic_cgz_tab .fl { + width: 25%; + text-align: center; +} + +.topic_cgz_tab image { + width: 60rpx; + height: 60rpx; +} + +/*滚动层*/ +scroll-item { + z-index: 9; +} + +.scoll-h { + height: 100%; +} + +.tab-content { + height: 100%; + width: 100%; + background: #fff; +} + +.the_big_box { + height: 100%; + width: 100%; + background: #fff; + overflow-x: hidden; +} + +.tab-content-top { + margin-top: 20rpx; +} + +.toolsclass { + display: flex; + justify-items: center; + justify-content: space-between; + width: 100%; + margin: 0 auto; + height: 200rpx; + position: fixed; + bottom: 200; +} + +.openclass { + + display: flex; + justify-content: center; + width: 700rpx; + margin: 80rpx auto; + +} + +.openclass image { + width: 120rpx; + height: 24rpx; +} +.headdouble{ + display: flex; + flex-direction: row; + width: 100%; + margin: 0 auto; +} +.headdoubleleft{ + width: 100%; +} +.headdoubleright{ + width: 95%; + margin: 0 auto; +} + + + + /* 提卷内容 */ + .popsubitexamcontent { + width: 680rpx; + margin: 40rpx auto; + } + + .popexamcontentup { + height: 40rpx; + border-left: 8rpx solid #1ccfd6; + margin-bottom: 40rpx; + margin-top: 40rpx; + } + + .popexamcontentup text { + + margin-left: 20rpx; + color: #010101; + font-size: 30rpx; + font-weight: 400; + } + + .popexamcontentdown { + display: flex; + flex-wrap: wrap; + width: 660rpx; + margin: 0 30rpx; + } + + .popdownitem { + width: 77rpx; + height: 77rpx; + flex: 0 19% !important; + margin-bottom: 40rpx; + } + + .popexamcontentdown image { + width: 77rpx; + height: 77rpx; + margin: 0 auto; + margin-top: 20rpx; + } + + .popcharclass { + display: flex; + justify-items: center; + } + + .popcharclass text { + width: 37rpx; + height: 33rpx; + position: relative; + right:2rpx; + left: 10px; + top: -36px; + text-align: center; + } + + /* 提卷内容 */ + + + /* 试卷解释 */ + .popexamanalysis { + + display: flex; + flex-direction: row; + justify-content: center; + align-items: center; + position: fixed; + left: 36rpx; + bottom: 20rpx; + width: 680rpx; + height: 100rpx; + margin: 0 auto; + + } + + .popalysisleft{ + + width: 330rpx; + height: 130rpx; + align-items: center; + } + + .popalysisleft image { + width: 330rpx; + height: 100rpx; + } + .popalysisright{ + + width: 330rpx; + height: 80rpx; + } + .popalysisright image { + margin-left: 30rpx; + width: 330rpx; + height: 80rpx; + } + + /* 试卷解释 */ + \ No newline at end of file diff --git a/pages/examlist/examlist.js b/pages/examlist/examlist.js new file mode 100644 index 0000000..eef23bb --- /dev/null +++ b/pages/examlist/examlist.js @@ -0,0 +1,148 @@ +const baseUrl = getApp(); +const api = require('../../config/api.js'); +const util = require('../../config/util.js'); +Page({ + + /** + * 页面的初始数据 + */ + data: { + itemdata:[], + id:1, + typename:'国考', + ismdata:1 //是否材料型数据跳转 + }, + + /** + * 生命周期函数--监听页面加载 + */ + onLoad: function (options) { + console.log(options); + let id=options.id; + this.setData({ + id:id + }) + }, + + /** + * 生命周期函数--监听页面初次渲染完成 + */ + onReady: function () { + + }, + + /** + * 生命周期函数--监听页面显示 + */ + onShow: function () { + this.getpaper(this.data.id); + this.getpaperattrname(this.data.id); + this.isjumpurl(this.data.id,2); + }, + + /** + * 生命周期函数--监听页面隐藏 + */ + onHide: function () { + + }, + + /** + * 生命周期函数--监听页面卸载 + */ + onUnload: function () { + + }, + + /** + * 页面相关事件处理函数--监听用户下拉动作 + */ + onPullDownRefresh: function () { + + }, + + /** + * 页面上拉触底事件的处理函数 + */ + onReachBottom: function () { + + }, + + /** + * 用户点击右上角分享 + */ + onShareAppMessage: function () { + + }, + examingbtnclick:function(e){ + console.log(e); + console.log(this.data.ismdata); + // console.log(this.data.itemdata); + + let grouppaper_id=e.currentTarget.dataset.typeid; + // console.log(grouppaper_id); + // return; + if(this.data.ismdata==2){ + wx.navigateTo({ + url: '/pages/exammakings/exammakings?examid='+e.currentTarget.id+'&grouppaper_id='+grouppaper_id, + }) + }else{ + wx.navigateTo({ + url: '/pages/examing/examing?examid='+e.currentTarget.id+'&grouppaper_id='+grouppaper_id, + }) + } + + }, + isjumpurl:function(id,groupid) { + + const that = this; + let url = baseUrl.globalData.baseUrl + '/exam/isarrdata'; + var param = { + id:id, + groupid:groupid + }; + //此处为使用封装的post请求 + util.post(url, param).then((res) => { + console.log(res); + that.setData({ + ismdata:res.data + }); + }).catch((errMsg) => { + console.log(errMsg); + }); +}, + getpaper:function(params) { + const that = this; + let url = baseUrl.globalData.baseUrl + '/paperlist/getpaperlist'; + var param = { + paperattr_id: params + }; + //此处为使用封装的post请求 + util.get(url, param).then((res) => { + console.log(res); + that.setData({ + itemdata: res.data + }); + + }).catch((errMsg) => { + console.log(errMsg); + }); + }, + getpaperattrname:function(params) { + const that = this; + let url = baseUrl.globalData.baseUrl + '/paperlist/getpaperattrname'; + var param = { + id: params + }; + //此处为使用封装的post请求 + util.get(url, param).then((res) => { + console.log(res); + that.setData({ + typename: res.data.name + }); + + }).catch((errMsg) => { + console.log(errMsg); + }); + } +}) \ No newline at end of file diff --git a/pages/examlist/examlist.json b/pages/examlist/examlist.json new file mode 100644 index 0000000..0f427e2 --- /dev/null +++ b/pages/examlist/examlist.json @@ -0,0 +1,8 @@ +{ + "usingComponents": {}, + "navigationBarBackgroundColor": "#fff", + "navigationBarTextStyle": "black", + "navigationBarTitleText": "国考试卷", + "backgroundColor": "#ccc", + "backgroundTextStyle": "light" +} \ No newline at end of file diff --git a/pages/examlist/examlist.wxml b/pages/examlist/examlist.wxml new file mode 100644 index 0000000..b4e1156 --- /dev/null +++ b/pages/examlist/examlist.wxml @@ -0,0 +1,11 @@ + + {{typename}} + + + + + + + {{item.name}} + + \ No newline at end of file diff --git a/pages/examlist/examlist.wxss b/pages/examlist/examlist.wxss new file mode 100644 index 0000000..9ecd92d --- /dev/null +++ b/pages/examlist/examlist.wxss @@ -0,0 +1,44 @@ +.examlist { + + display: flex; + flex-direction: column; + justify-content: center; + align-items: center; + width: 680rpx; + height: 90rpx; + margin: 0 auto; + background-color: #f5f5f5; + border-bottom: 1rpx solid #9c9898; +} + +.examlist text { + font-size: 40rpx; + font-weight: 400; +} + +.examitemlist { + display: flex; + flex-direction: row; + align-items: center; + width: 680rpx; + height: 100rpx; + margin: 0 auto; + margin-top: 28rpx; + background-color: #f0f0f0; +} + +.itemleft image { + + margin: 0 35rpx; + width: 31rpx; + height: 31rpx; +} + +.itemright{ + width: 470rpx; + overflow: hidden; +} +.itemright text{ + font-size: 30rpx; + font-weight: 400; +} \ No newline at end of file diff --git a/pages/exammakings/exammakings.js b/pages/exammakings/exammakings.js new file mode 100644 index 0000000..c28e0ec --- /dev/null +++ b/pages/exammakings/exammakings.js @@ -0,0 +1,126 @@ +var WxParse = require('../../wxParse/wxParse.js'); +const app = getApp(); +const baseUrl = getApp(); +const api = require('../../config/api.js'); +const util = require('../../config/util.js'); +Page({ + + /** + * 页面的初始数据 + */ + data: { + active: 0, + now: 1, //当前页码 + all: 15, //总页码 + index:1, + grouppaper_id:1,//组卷ID + listdata:[], //数据 + currentdata:[] //当前数据 + }, + onChange:function(event){ + + console.log(event.detail.index); + this.setData({ + active:event.detail.index + }) + }, + + /** + * 生命周期函数--监听页面加载 + */ + onLoad: function (options) { + console.log(options); + + + this.setData({ + grouppaper_id:options.grouppaper_id, + active:0 + }); + }, + + /** + * 生命周期函数--监听页面初次渲染完成 + */ + onReady: function () { + + }, + + /** + * 生命周期函数--监听页面显示 + */ + onShow: function () { + this.getexammaterial(this.data.grouppaper_id); + + }, + + /** + * 生命周期函数--监听页面隐藏 + */ + onHide: function () { + + }, + + /** + * 生命周期函数--监听页面卸载 + */ + onUnload: function () { + + }, + + /** + * 页面相关事件处理函数--监听用户下拉动作 + */ + onPullDownRefresh: function () { + + }, + + /** + * 页面上拉触底事件的处理函数 + */ + onReachBottom: function () { + + }, + + /** + * 用户点击右上角分享 + */ + onShareAppMessage: function () { + + }, + getexammaterial:function(params) { + //得到练习题目 + const that = this; + let url = baseUrl.globalData.baseUrl + '/exam/exammaterial'; + var param = { + grouppaper_id: params + }; + //此处为使用封装的post请求 + util.post(url, param).then((res) => { + console.log(res.data[0]); + that.setData({ + itemdataall: res.data, + listdata:res.data[0].mitemdata, + all:res.data[0].mcount, + currentdata:res.data[0] + }); + + }).catch((errMsg) => { + console.log(errMsg); + }); + }, + clickanswer:function(params) { + console.log(params.currentTarget.id); + let grouppaper_id=params.currentTarget.id; + wx.navigateTo({ + url: '/pages/examproblem/examproblem?grouppaper_id='+grouppaper_id + }) + + }, + clickm:function(params) { + console.log(params.currentTarget.id); + let grouppaper_id=params.currentTarget.id; + wx.navigateTo({ + url: '/pages/exammakings/exammakings?grouppaper_id='+grouppaper_id + }) + } +}) \ No newline at end of file diff --git a/pages/exammakings/exammakings.json b/pages/exammakings/exammakings.json new file mode 100644 index 0000000..a1da9cb --- /dev/null +++ b/pages/exammakings/exammakings.json @@ -0,0 +1,4 @@ +{ + "usingComponents": {}, + "navigationBarTitleText": "材料题" +} \ No newline at end of file diff --git a/pages/exammakings/exammakings.wxml b/pages/exammakings/exammakings.wxml new file mode 100644 index 0000000..3e58a2f --- /dev/null +++ b/pages/exammakings/exammakings.wxml @@ -0,0 +1,36 @@ + + + +{{currentdata.title}} + + +{{active+1}}/{{all}} + + + + + + + + + + + + {{item.namecontents}} + + + + + + + + + + 材料 + + + + 问题 + + + \ No newline at end of file diff --git a/pages/exammakings/exammakings.wxss b/pages/exammakings/exammakings.wxss new file mode 100644 index 0000000..8243cf1 --- /dev/null +++ b/pages/exammakings/exammakings.wxss @@ -0,0 +1,89 @@ +/* 材料头部 */ +.exammakingshead { + width: 100%; + height: 80rpx; + background-color: #49dae0; + display: flex; + flex-direction: row; + justify-content: space-between; + align-items: center; + +} + +.headleft { + width: 580rpx; + overflow: hidden; +} + +.headleft text { + + color: white; + font-size: 30rpx; + margin-left: 40rpx; +} + +.headright text { + color: white; + font-size: 30rpx; + margin-right: 50rpx; +} + +.van-tabs__line { + background-color: #49dae0 !important; +} + +.makingscontent { + margin: 0 40rpx; +} + +.makingscontent text { + margin: 0 40rpx; + font-size: 30rpx; + +} + +/* 材料头部 */ + +/* 材料底部 */ +.makingsfooter { + + width: 100%; + height: 100rpx; + border-top: 2rpx solid #e5e7e7; + margin-top: 20rpx; + display: flex; + justify-content: center; + align-items: center; + position: fixed; + bottom: 0; + background-color: #f5f5f5; + opacity:1; +} + +.footerleft { + width: 160rpx; + height: 50rpx; + line-height: 50rpx; + background-color: #1ccfd6; + text-align: center; +} + +.footerleft text { + color: white; +} + +.footerright { + width: 160rpx; + height: 50rpx; + line-height: 50rpx; + background-color: #dad8d8; + text-align: center; + margin-left: 50rpx; + +} + +.footerright text { + color: black; +} + +/* 材料底部 */ \ No newline at end of file diff --git a/pages/exampaper/exampaper.js b/pages/exampaper/exampaper.js new file mode 100644 index 0000000..dbf954e --- /dev/null +++ b/pages/exampaper/exampaper.js @@ -0,0 +1,107 @@ +const baseUrl = getApp(); +const api = require('../../config/api.js'); +const util = require('../../config/util.js'); +Page({ + + /** + * 页面的初始数据 + */ + data: { + + list:[], + coursetypefour_id:1, + grouppaper_id:1, + }, + + /** + * 生命周期函数--监听页面加载 + */ + onLoad: function (options) { + + console.log(options); + this.setData({ + coursetypefour_id:options.id, + grouppaper_id:options.grouppaper_id + }); + }, + + /** + * 生命周期函数--监听页面初次渲染完成 + */ + onReady: function () { + + }, + + /** + * 生命周期函数--监听页面显示 + */ + onShow: function () { + this.getexamright(); + }, + + /** + * 生命周期函数--监听页面隐藏 + */ + onHide: function () { + + }, + + /** + * 生命周期函数--监听页面卸载 + */ + onUnload: function () { + + }, + + /** + * 页面相关事件处理函数--监听用户下拉动作 + */ + onPullDownRefresh: function () { + + }, + + /** + * 页面上拉触底事件的处理函数 + */ + onReachBottom: function () { + + }, + + /** + * 用户点击右上角分享 + */ + onShareAppMessage: function () { + + }, + viewallexplain:function(params) { + console.log(params); + console.log(this.data.coursetypefour_id); + let typeid=params.currentTarget.id; + let coursetypefour_id=this.data.coursetypefour_id; + let grouppaper_id=this.data.grouppaper_id; + wx.navigateTo({ + url: '/pages/examanalysis/examanalysis?id='+typeid+'&coursetypefour_id='+coursetypefour_id+'&grouppaper_id='+grouppaper_id, + }) +}, +getexamright:function() { + //得到练习题目 + const that = this; + let url = baseUrl.globalData.baseUrl + '/exam/examuseranswerpaper'; + let user_id=wx.getStorageSync('wxuserid')==''?3:wx.getStorageSync('wxuserid'); + var param = { + coursetypefour_id: that.data.coursetypefour_id, + user_id:user_id + }; + //此处为使用封装的post请求 + util.post(url, param).then((res) => { + console.log(res.data); + that.setData({ + list:res.data, + listdata:res.data + }); + + }).catch((errMsg) => { + console.log(errMsg); + }); +} +}) \ No newline at end of file diff --git a/pages/exampaper/exampaper.json b/pages/exampaper/exampaper.json new file mode 100644 index 0000000..8e34fd3 --- /dev/null +++ b/pages/exampaper/exampaper.json @@ -0,0 +1,4 @@ +{ + "usingComponents": {}, + "navigationBarTitleText": "试卷" +} \ No newline at end of file diff --git a/pages/exampaper/exampaper.wxml b/pages/exampaper/exampaper.wxml new file mode 100644 index 0000000..771855d --- /dev/null +++ b/pages/exampaper/exampaper.wxml @@ -0,0 +1,51 @@ + + + + {{list.zdf}} + + + 总分{{list.zf}}分 + + + + + + + + + {{item.title}}(正确率{{item.itemright}}%) + + + + + + + + + {{index+1}} + + + + + + + + + + + + {{list.zf}} + + + + + + + + + + + + + + \ No newline at end of file diff --git a/pages/exampaper/exampaper.wxss b/pages/exampaper/exampaper.wxss new file mode 100644 index 0000000..b7ceadd --- /dev/null +++ b/pages/exampaper/exampaper.wxss @@ -0,0 +1,149 @@ +/* 交卷头部 */ +.exampaperhead { + width: 100%; + height: 225rpx; + border-bottom: 16rpx solid #e6e2e2; + background-color: #f5f5f5; +} + +.headup { + display: flex; + justify-content: center; + align-items: center; + width: 100%; + height: 55rpx; + padding-top: 50rpx; +} + +.headup text { + font-size: 60rpx; + font-weight: 400; + color: #000000; +} + +.headdown { + display: flex; + justify-content: center; + align-items: center; + width: 100%; + height: 55rpx; + padding-top: 30rpx; +} + +.headdown text { + + font-size: 30rpx; + font-weight: 400; + color: #808080; +} + +/* 交卷头部 */ + +/* 提卷内容 */ +.subitexamcontent { + width: 680rpx; + margin: 40rpx auto; +} + +.examcontentup { + height: 40rpx; + border-left: 8rpx solid #1ccfd6; + margin-bottom: 40rpx; + margin-top: 40rpx; +} + +.examcontentup text { + + margin-left: 20rpx; + color: #010101; + font-size: 30rpx; + font-weight: 400; +} + +.examcontentdown { + display: flex; + flex-wrap: wrap; + width: 660rpx; + margin: 0 30rpx; +} + +.downitem { + width: 77rpx; + height: 77rpx; + flex: 0 19% !important; + margin-bottom: 40rpx; +} + +.examcontentdown image { + width: 77rpx; + height: 77rpx; + margin: 0 auto; + margin-top: 20rpx; +} + +.charclass { + display: flex; + justify-items: center; +} + +.charclass text { + width: 37rpx; + height: 33rpx; + position: relative; + right:2rpx; + left: 10px; + top: -36px; + text-align: center; +} + +/* 提卷内容 */ + +/* 试卷时间 */ +.examtiems { + + width: 680rpx; + height: 50rpx; + margin: 50rpx auto; + margin-bottom: 150rpx; +} + +.examtiems text { + + display: flex; + flex-direction: column; + justify-content: center; + align-items: center; + font-size: 30rpx; + font-weight: 400; +} + +/* 试卷时间 */ + +/* 试卷解释 */ +.examanalysis { + + width: 680rpx; + height: 100rpx; + display: flex; + flex-direction: row; + justify-content: space-between; + align-items: center; + margin: 0 auto; + position: fixed; + bottom: 0; + +} + +.alysisleft image { + margin-left: 30rpx; + width: 330rpx; + height: 80rpx; +} + +.alysisright image { + margin-left: 30rpx; + width: 330rpx; + height: 80rpx; +} + +/* 试卷解释 */ \ No newline at end of file diff --git a/pages/exampaper2/exampaper2.js b/pages/exampaper2/exampaper2.js new file mode 100644 index 0000000..68ff555 --- /dev/null +++ b/pages/exampaper2/exampaper2.js @@ -0,0 +1,111 @@ +const baseUrl = getApp(); +const api = require('../../config/api.js'); +const util = require('../../config/util.js'); +Page({ + + /** + * 页面的初始数据---练习题查看交卷 + */ + data: { + title:'练习完成', + coursetypefour_id:1, + grouppaper_id:1, + listdata:[], + list:[] + }, + + /** + * 生命周期函数--监听页面加载 + */ + onLoad: function (options) { + wx.setNavigationBarTitle({ + title: this.data.title + }) + console.log(options); + this.setData({ + coursetypefour_id:options.id, + grouppaper_id:options.grouppaper_id + }); + }, + + /** + * 生命周期函数--监听页面初次渲染完成 + */ + onReady: function () { + + }, + + /** + * 生命周期函数--监听页面显示 + */ + onShow: function () { + this.getexamright(); + }, + + /** + * 生命周期函数--监听页面隐藏 + */ + onHide: function () { + + }, + + /** + * 生命周期函数--监听页面卸载 + */ + onUnload: function () { + + }, + + /** + * 页面相关事件处理函数--监听用户下拉动作 + */ + onPullDownRefresh: function () { + + }, + + /** + * 页面上拉触底事件的处理函数 + */ + onReachBottom: function () { + + }, + + /** + * 用户点击右上角分享 + */ + onShareAppMessage: function () { + + }, + getexamright:function() { + //得到练习题目 + const that = this; + let url = baseUrl.globalData.baseUrl + '/exam/examuseranswer'; + let user_id=wx.getStorageSync('wxuserid')==''?3:wx.getStorageSync('wxuserid'); + var param = { + coursetypefour_id: that.data.coursetypefour_id, + user_id:user_id + }; + //此处为使用封装的post请求 + util.post(url, param).then((res) => { + console.log(res.data); + that.setData({ + list:res.data.itemdata, + listdata:res.data + }); + + }).catch((errMsg) => { + console.log(errMsg); + }); + }, + viewallexplain:function(params) { + console.log(params); + console.log(this.data.coursetypefour_id); + let typeid=params.currentTarget.id; + let coursetypefour_id=this.data.coursetypefour_id; + let grouppaper_id=this.data.grouppaper_id; + wx.navigateTo({ + url: '/pages/examanalysis/examanalysis?id='+typeid+'&coursetypefour_id='+coursetypefour_id+'&grouppaper_id='+grouppaper_id, + }) + } + +}) \ No newline at end of file diff --git a/pages/exampaper2/exampaper2.json b/pages/exampaper2/exampaper2.json new file mode 100644 index 0000000..8835af0 --- /dev/null +++ b/pages/exampaper2/exampaper2.json @@ -0,0 +1,3 @@ +{ + "usingComponents": {} +} \ No newline at end of file diff --git a/pages/exampaper2/exampaper2.wxml b/pages/exampaper2/exampaper2.wxml new file mode 100644 index 0000000..3e14f64 --- /dev/null +++ b/pages/exampaper2/exampaper2.wxml @@ -0,0 +1,39 @@ + + + + + + + + + + + + + {{listdata.grouppapername}}(正确率{{listdata.rightdata}}%) + + + + + + + + {{index+1}} + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/pages/exampaper2/exampaper2.wxss b/pages/exampaper2/exampaper2.wxss new file mode 100644 index 0000000..a1dd107 --- /dev/null +++ b/pages/exampaper2/exampaper2.wxss @@ -0,0 +1,157 @@ +/* pages/exampaper2/exampaper2.wxss *//* 交卷头部 */ +.exampaperhead { + width: 100%; + height: 225rpx; + border-bottom: 16rpx solid #e6e2e2; + background-color: #f5f5f5; +} + +.headup { + display: flex; + justify-content: center; + align-items: center; + width: 100%; + height: 100rpx; + padding-top: 60rpx; +} + +.headup text { + font-size: 60rpx; + font-weight: 400; + color: #000000; +} + +.headdown { + display: flex; + justify-content: center; + align-items: center; + width: 100%; + height: 55rpx; + padding-top: 30rpx; +} + +.headdown text { + + font-size: 30rpx; + font-weight: 400; + color: #808080; +} + +/* 交卷头部 */ + +/* 提卷内容 */ +.subitexamcontent { + width: 680rpx; + margin: 40rpx auto; +} + +.examcontentup { + height: 40rpx; + border-left: 8rpx solid #1ccfd6; + margin-bottom: 40rpx; + margin-top: 40rpx; +} + +.examcontentup text { + + margin-left: 20rpx; + color: #010101; + font-size: 30rpx; + font-weight: 400; +} + +.examcontentdown { + display: flex; + flex-wrap: wrap; + width: 660rpx; + margin: 0 30rpx; +} + +.downitem { + width: 77rpx; + height: 77rpx; + flex: 0 19% !important; + margin-bottom: 40rpx; +} + +.examcontentdown image { + width: 77rpx; + height: 77rpx; + margin: 0 auto; + margin-top: 20rpx; +} + +.charclass { + display: flex; + justify-items: center; +} + +.charclass text { + width: 37rpx; + height: 33rpx; + position: relative; + right:2rpx; + left: 10px; + top: -36px; + text-align: center; +} + +/* 提卷内容 */ + +/* 试卷时间 */ +.examtiems { + + width: 680rpx; + height: 50rpx; + margin: 50rpx auto; +} + +.examtiems text { + + display: flex; + flex-direction: column; + justify-content: center; + align-items: center; + font-size: 30rpx; + font-weight: 400; +} + + + +/* 试卷解释 */ +.examanalysis { + + width: 680rpx; + height: 100rpx; + margin: 0 30rx; + display: flex; + flex-direction: row; + justify-content: center; + align-items: center; + position: fixed; + bottom: 0; +} + +.alysisleft{ + + width: 330rpx; + height: 80rpx; + margin-left: 30rpx; +} + +.alysisleft image { + width: 330rpx; + height: 80rpx; +} +.alysisright{ + + width: 330rpx; + height: 80rpx; +} +.alysisright image { + margin-left: 30rpx; + width: 330rpx; + height: 80rpx; +} + +/* 试卷解释 */ \ No newline at end of file diff --git a/pages/examproblem/examproblem.js b/pages/examproblem/examproblem.js new file mode 100644 index 0000000..4f11e9b --- /dev/null +++ b/pages/examproblem/examproblem.js @@ -0,0 +1,138 @@ +var WxParse = require('../../wxParse/wxParse.js'); +const app = getApp(); +const baseUrl = getApp(); +const api = require('../../config/api.js'); +const util = require('../../config/util.js'); +Page({ + + /** + * 页面的初始数据 + */ + data: { + active: 0, + totaldata:4, + openactive:2, + show:true, + title:'动态修改', + now: 1, //当前页码 + all: 15, //总页码 + index:1, + grouppaper_id:1,//组卷ID + listdata:[], //数据 + currentdata:[] //当前数据 + }, + onChange:function(event){ + + console.log(event.detail.index); + this.setData({ + active:event.detail.index + }) + }, + + /** + * 生命周期函数--监听页面加载 + */ + onLoad: function (options) { + console.log(options); + wx.setNavigationBarTitle({ + title: this.data.title + }) + this.setData({ + grouppaper_id:options.grouppaper_id + }); + + }, + + /** + * 生命周期函数--监听页面初次渲染完成 + */ + onReady: function () { + + }, + + /** + * 生命周期函数--监听页面显示 + */ + onShow: function () { + this.getexammaterial(this.data.grouppaper_id); + this.selectComponent('#tabs').resize(); + }, + + /** + * 生命周期函数--监听页面隐藏 + */ + onHide: function () { + + }, + + /** + * 生命周期函数--监听页面卸载 + */ + onUnload: function () { + + }, + + /** + * 页面相关事件处理函数--监听用户下拉动作 + */ + onPullDownRefresh: function () { + + }, + + /** + * 页面上拉触底事件的处理函数 + */ + onReachBottom: function () { + + }, + + /** + * 用户点击右上角分享 + */ + onShareAppMessage: function () { + + }, + openactiveclick:function(event){ + console.log(event); + this.setData({ + openactive:event.currentTarget.id + }) + }, + getexammaterial:function(params) { + //得到练习题目 + const that = this; + let url = baseUrl.globalData.baseUrl + '/exam/exammaterial'; + var param = { + grouppaper_id: params + }; + //此处为使用封装的post请求 + util.post(url, param).then((res) => { + console.log(res.data[0]); + that.setData({ + itemdataall: res.data, + listdata:res.data[0].itemanswerdata, + all:res.data[0].answercount, + currentdata:res.data[0] + }); + + }).catch((errMsg) => { + console.log(errMsg); + }); +}, +clickanswer:function(params) { + console.log(params.currentTarget.id); + let grouppaper_id=params.currentTarget.id; + wx.navigateTo({ + url: '/pages/examproblem/examproblem?grouppaper_id='+grouppaper_id + }) + + +}, +clickm:function(params) { + console.log(params.currentTarget.id); + let grouppaper_id=params.currentTarget.id; + wx.navigateTo({ + url: '/pages/exammakings/exammakings?grouppaper_id='+grouppaper_id + }) + } +}) \ No newline at end of file diff --git a/pages/examproblem/examproblem.json b/pages/examproblem/examproblem.json new file mode 100644 index 0000000..8835af0 --- /dev/null +++ b/pages/examproblem/examproblem.json @@ -0,0 +1,3 @@ +{ + "usingComponents": {} +} \ No newline at end of file diff --git a/pages/examproblem/examproblem.wxml b/pages/examproblem/examproblem.wxml new file mode 100644 index 0000000..fc48811 --- /dev/null +++ b/pages/examproblem/examproblem.wxml @@ -0,0 +1,57 @@ + + + + {{currentdata.title}} + + + {{active+1}}/{{all}} + + + + + + + + + + + + {{item.namecon}} + + + + + + + + + + 参考答案 + + + + + + + + + {{item.answer}} + + + + + + + + + + + 材料 + + + + 问题 + + + \ No newline at end of file diff --git a/pages/examproblem/examproblem.wxss b/pages/examproblem/examproblem.wxss new file mode 100644 index 0000000..f16dcdb --- /dev/null +++ b/pages/examproblem/examproblem.wxss @@ -0,0 +1,156 @@ +/* 材料头部 */ +.exammakingshead { + width: 100%; + height: 80rpx; + background-color: #49dae0; + display: flex; + flex-direction: row; + justify-content: space-between; + align-items: center; + +} + +.headleft { + width: 580rpx; + overflow: hidden; +} + +.headleft text { + + color: white; + font-size: 30rpx; + margin-left: 40rpx; +} + +.headright text { + color: white; + font-size: 30rpx; + margin-right: 50rpx; +} + +.van-tabs__line { + background-color: #49dae0 !important; +} + +.makingscontent { + margin: 0 40rpx; +} + +.makingscontent text { + margin: 0 40rpx; + font-size: 30rpx; + +} + +.makingscontentdown { + margin-top: 20rpx; + height: 20rpx; + background-color: #eef0f0; +} + +.makingscontentdownanswer { + height: 80rpx; + display: flex; + flex-direction: row; + justify-content: flex-start; + align-items: center; +} + +.itemleft { + margin-left: 30rpx; + width: 50rpx; + height: 50rpx; +} + +.itemleft image { + width: 47rpx; + height: 47rpx; +} + +.itemmiddle { + margin-left: 30rpx; + width: 500rpx; + height: 50rpx; +} + +.itemmiddle text { + font-size: 30rpx; + font-weight: 400; + color: black; +} + +.itemright { + + margin-right: 60rpx; + width: 50rpx; + height: 50rpx; +} + +.itemright image { + width: 20rpx; + height: 20rpx; +} + +.answercontent { + margin: 0 40rpx; +} +.answercontent2{ + display: none; +} + +.answercontent text { + + font-size: 30rpx; + +} + + +/* 材料头部 */ + +/* 材料底部 */ +.makingsfooter { + + width: 100%; + height: 100rpx; + border-top: 2rpx solid #e5e7e7; + margin-top: 20rpx; + display: flex; + justify-content: center; + align-items: center; + position: fixed; + bottom: 0; + background-color: #f5f5f5; + opacity: 1; +} + +.footerleft { + width: 160rpx; + height: 50rpx; + line-height: 50rpx; + + background-color: #dad8d8; + text-align: center; +} + +.footerleft text { + color: white; +} + +.footerright { + width: 160rpx; + height: 50rpx; + line-height: 50rpx; + background-color: #1ccfd6; + text-align: center; + margin-left: 50rpx; + +} + +.footerright text { + color: white; +} +.van-tabs__line{ + left:10%; +} + +/* 材料底部 */ \ No newline at end of file diff --git a/pages/explainnote/explainnote.js b/pages/explainnote/explainnote.js new file mode 100644 index 0000000..c0f5d1e --- /dev/null +++ b/pages/explainnote/explainnote.js @@ -0,0 +1,372 @@ +var WxParse = require('../../wxParse/wxParse.js'); +const app = getApp(); +const baseUrl = getApp(); +const api = require('../../config/api.js'); +const util = require('../../config/util.js'); +Page({ + startX: 0, + startY: 0, + isClear: false, + /** + * 页面的初始数据 + */ + data: { + title: '我的收藏', + singdouble: 2, //1单选,2多选 + paiduanactive:1,//1不是判断,2是判断题 + activeopen:true, + itemdata: [], + itemdatacurrent:[], + exam_id:1, + baseurl:baseUrl.globalData.baseimgurl, + content:'', + examtypename:'' + }, + + /** + * 生命周期函数--监听页面加载 + */ + onLoad: function (options) { + wx.setNavigationBarTitle({ + title: this.data.title + }) + console.log(options); + this.setData({ + exam_id:options.id + }) + }, + + /** + * 生命周期函数--监听页面初次渲染完成 + */ + onReady: function () { + + }, + + /** + * 生命周期函数--监听页面显示 + */ + onShow: function () { + this.getexamdata(this.data.exam_id); + this.wrodtypelist(this.data.exam_id); + }, + + /** + * 生命周期函数--监听页面隐藏 + */ + onHide: function () { + + }, + + /** + * 生命周期函数--监听页面卸载 + */ + onUnload: function () { + + }, + + /** + * 页面相关事件处理函数--监听用户下拉动作 + */ + onPullDownRefresh: function () { + + }, + + /** + * 页面上拉触底事件的处理函数 + */ + onReachBottom: function () { + + }, + + /** + * 用户点击右上角分享 + */ + onShareAppMessage: function () { + + }, + openactive:function(e){ + console.log(e); + let opendata=this.data.openactive; + opendata=!opendata; + console.log(opendata); + this.setData({ + activeopen:opendata, + openactive:opendata + }) + }, + getexamdata:function(params) { + //得到练习题目 + const that = this; + let url = baseUrl.globalData.baseUrl + '/exam/myexamexp'; + var param = { + exam_id:params + }; + //此处为使用封装的post请求 + util.post(url, param).then((res) => { + console.log(res.data); + console.log(res.data.examtypename); + that.setData({ + itemdataall: res.data, + itemdata:res.data.examitem, + examtypename:res.data.examtypename, + content:res.data.name.replace(/\ { + console.log(errMsg); + }); + }, + wrodtypelist:function(params){ + + //获取课程留言 + const that = this; + let url = baseUrl.globalData.baseUrl + '/exam/wordsexam'; + var param = { + exam_id: params + }; + //此处为使用封装的post请求 + util.get(url, param).then((res) => { + console.log(res); + that.setData({ + replylist: res.data + }); + + }).catch((errMsg) => { + console.log(errMsg); + }); + }, + formSubmit:function(e) { + + if(wx.getStorageSync('wxuserid')==''){ + wx.navigateTo({ + url: '/pages/userlogin/userlogin', + }) + } + + let content = this.data.wordstextname; + console.log(content) + if (content == '') { + wx.showToast({ + title: '留言内容为空,请填写内容', + icon: 'none', + duration: 1500 + }) + return false; + } + // console.log(this.data.imagestr); + this.wordsadd(content,this.data.imagestr); + + }, + bindTextAreaBlur: function(e) { + this.setData({ + wordstextname:e.detail.value + }) + }, + uploadpicsimage:function(e){ + + const that = this; + let url = baseUrl.globalData.baseUrl + '/wordslist/uploadpics'; + var param = { + url: e + }; + //此处为使用封装的post请求 + util.post(url, param).then((res) => { + console.log(res); + + }).catch((errMsg) => { + console.log(errMsg); + }); + }, + wordsadd:function(content,imagestr){ + + const that = this; + let url = baseUrl.globalData.baseUrl + '/exam/examexplainadd'; + var param = { + content: content, + imagestr:imagestr, + userid:wx.getStorageSync('wxuserid')==''?3:wx.getStorageSync('wxuserid'), + exam_id:that.data.courseid + }; + //此处为使用封装的post请求 + util.post(url, param).then((res) => { + console.log(res.data); + if(res.data>0){ + wx.showToast({ + title: '留言内容成功', + icon: 'none', + duration: 1500 + }) + + that.wrodtypelist(that.data.exam_id); //试题留言 + that.setData({ + wordstextname:'' + }) + + } + + }).catch((errMsg) => { + console.log(errMsg); + }); + },contentclick:function(params) { + + console.log(params); + let id=params.currentTarget.id; + let xid=params.currentTarget.dataset.xid; + console.log(id); + this.setData({ + wordstextname:'回复@'+id, + showview:true + }); + + this.addinccomment(xid); + + wx.showToast({ + title: '@成功,留言请移底部留言', + icon: 'none', + duration: 1500 + }) + },rdclick:function(params) { + wx.navigateTo({ + url: '/pages/communityinfo/communityinfo?id='+params.currentTarget.id, + }) + },addinccomment:function(params) { + //增加评论数 + console.log(params); + let userid=wx.getStorageSync('wxuserid'); + const that = this; + let url = baseUrl.globalData.baseUrl + '/exam/addcommentcount'; + var param = { + id:params + }; + //此处为使用封装的post请求 + util.get(url, param).then((res) => { + console.log(res); + // this.wrodtypelist(this.data.courseid) + this.wrodtypelist(that.data.courseid); + this.getexamexplantypelist(that.data.courseid); + }).catch((errMsg) => { + console.log(errMsg); + }); + }, + preview:function (params) { + let that=this; + console.log(params) + let currentUrl = params.currentTarget.dataset.src; + let arrindex=params.currentTarget.dataset.id; + + let rearr=that.data.replylist[arrindex].pics; + console.log(rearr); + let arr=[]; + rearr.forEach(function (item,index) { + arr[index]=that.data.baseurl+item + }); + console.log(arr); + wx.previewImage({ + current: currentUrl, // 当前显示图片的http链接 + urls: arr // 需要预览的图片http链接列表 + }) + }, + uploadpic:function(){ + var that = this; + let imagesList = []; + let maxSize = 1024 * 1024; + let maxLength = 6; + let flag = true; + wx.chooseImage({ + count: 9, //最多可以选择的图片总数 + sizeType: ['original', 'compressed'], // 可以指定是原图还是压缩图,默认二者都有 + sourceType: ['album', 'camera'], // 可以指定来源是相册还是相机,默认二者都有 + success: function (res) { + wx.showToast({ + title: '正在上传...', + icon: 'loading', + mask: true, + duration: 500 + }) + for (let i = 0; i < res.tempFiles.length; i++) { + if (res.tempFiles[i].size > maxSize) { + flag = false; + console.log(111) + wx.showModal({ + content: '图片太大,不允许上传', + showCancel: false, + success: function (res) { + if (res.confirm) { + console.log('用户点击确定') + } + } + }); + } + } + if (res.tempFiles.length > maxLength) { + console.log('222'); + wx.showModal({ + content: '最多能上传' + maxLength + '张图片', + showCancel: false, + success: function (res) { + if (res.confirm) { + console.log('确定'); + } + } + }) + } + if (flag == true && res.tempFiles.length <= maxLength) { + that.setData({ + imagesListp: res.tempFilePaths + }) + that.data.imagestr=[]; + var arr=''; + for (let i = 0; i < that.data.imagesListp.length; i++) { + wx.uploadFile({ + url: baseUrl.globalData.baseUrl + '/wordslist/uploadpics', + filePath: that.data.imagesListp[i], + name: 'file', + success:function(res){ + //打印 + console.log("------------响应数据:"); + console.log(res.data); + + var message = JSON.parse(res.data); + that.data.imagestr.push(message); + that.setData({ + imagestr:that.data.imagestr + }); + }, + }) + + } + + + } + console.log(res); + }, + fail: function (res) { + console.log(res); + } + }) + + }, + clickbtn:function(params) { + console.log(params); + let userid=wx.getStorageSync('wxuserid'); + const that = this; + let url = baseUrl.globalData.baseUrl + '/exam/wordscourseclickcount'; + var param = { + words_id:params.currentTarget.id, + user_id: userid + }; + //此处为使用封装的post请求 + util.get(url, param).then((res) => { + console.log(res); + // this.wrodtypelist(this.data.courseid) + this.wrodtypelist(this.data.exam_id); + this.getexamdata(this.data.exam_id); + }).catch((errMsg) => { + console.log(errMsg); + }); +}, + +}) \ No newline at end of file diff --git a/pages/explainnote/explainnote.json b/pages/explainnote/explainnote.json new file mode 100644 index 0000000..8835af0 --- /dev/null +++ b/pages/explainnote/explainnote.json @@ -0,0 +1,3 @@ +{ + "usingComponents": {} +} \ No newline at end of file diff --git a/pages/explainnote/explainnote.wxml b/pages/explainnote/explainnote.wxml new file mode 100644 index 0000000..c155727 --- /dev/null +++ b/pages/explainnote/explainnote.wxml @@ -0,0 +1,146 @@ + + + + + + 【{{examtypename}}】 + + + + + + + + + + + + + + + + + + {{item.charmu}} + + + + {{item.title}} + + + + + + + + + + + 【{{examtypename}}】 + + + + + + + + + + + + {{item.charmu}} + + + + {{item.title}} + + + + + + + + + + + + + + + + + + + + 解析笔记 + + + + + + + + + + + + + + + {{item.userinfo['nickname']}} + + + {{item.times}} + + + + + + + {{item.name}} + + + + + + + + + + + + + + + + + + + {{item.commentcount}} + + + + {{item.wordsclickcount}} + + + + + + + + +
+ + + + + + + + + + + +
diff --git a/pages/explainnote/explainnote.wxss b/pages/explainnote/explainnote.wxss new file mode 100644 index 0000000..ae84948 --- /dev/null +++ b/pages/explainnote/explainnote.wxss @@ -0,0 +1,498 @@ +.page { + background-color: #ededed; +} + +.examing { + display: flex; + flex-direction: row; + align-items: center; + width: 100%; + height: 80rpx; + background-color: #49dae0; + position: fixed; + top: 0; +} + +.item1 { + width: 50rpx; + height: 50rpx; + margin: 0 19rpx; +} + +.item1 image { + width: 50rpx; + height: 50rpx; + margin: 0 19rpx; +} + +.item4 { + width: 50rpx; + height: 50rpx; + margin-top: 10rpx; + margin-left: 80rpx; + +} + +.item4 image { + width: 50rpx; + height: 44rpx; + margin: 0 19rpx; +} + +.item5 { + width: 100rpx; + height: 50rpx; + margin-top: 10rpx; + margin-left: 120rpx; + +} + +.item5 image { + width: 38rpx; + height: 47rpx; + margin: 0 22rpx; +} + +.item2 { + width: 150rpx; + height: 50rpx; + margin-top: 16rpx; + margin-left: 19rpx; +} + +.item2 text { + width: 150rpx; + height: 50rpx; + color: white; +} + +.item3 { + width: 100rpx; + height: 50rpx; + margin-top: 10rpx; + margin-left: 79rpx; +} + +.item3 text { + width: 100rpx; + height: 50rpx; + color: white; +} + +.examingfooter { + display: flex; + flex-direction: row; + align-items: center; + justify-content: space-between; + width: 100%; + height: 80rpx; + background-color: #49dae0; + position: fixed; + bottom: 0; +} + +.footerleft image { + margin: 0 25rpx; + width: 160rpx; + height: 53rpx; +} + +.footermiddle image { + margin: 0 25rpx; + width: 160rpx; + height: 53rpx; +} + +.footerright image { + margin: 0 25rpx; + width: 160rpx; + height: 53rpx; +} + +.examingcontent { + width: 700rpx; + margin: 20rpx auto; + margin-bottom: 40rpx; +} + +.examingcontent2 { + width: 700rpx; + margin: 20rpx auto; + margin-bottom: 40rpx; +} + + +.examingcontent text { + font-size: 30rpx; + font-weight: 400; + +} + +.examintcontentda { + width: 700rpx; + margin: 20rpx auto; + float: left; + margin-bottom: 40rpx; +} + +.contentleft { + float: left; + width: 50rpx; + height: 50rpx; + line-height: 50rpx; + margin-left: 25rpx; +} + +.contentleft image { + width: 49rpx; + height: 49rpx; +} + +.contentright { + margin-left: 25rpx; + float: left; + width: 600rpx; +} + +.charclass { + display: flex; + justify-items: center; +} + +.charclass text { + width: 37rpx; + height: 33rpx; + position: relative; + left: 4px; + top: -31px; + text-align: center; +} + +.item2 .van-count-down { + color: white; +} + +.feigexian{ + width: 100%; + background-color: #f0f0f0; +} +.clear{ clear:both} + +.explainnotefont{ + width: 100%; + height: 100rpx; + line-height: 100rpx; +} +.explainnotefont text{ + + font-size: 40rpx; + margin-left:50rpx; +} +/* 留言区域 */ +.areaclass{ + + width: 80%; + height: 193rpx; + margin: 0 auto; + margin-top: 10rpx; + background-color: #f0f0f1; + border-radius: 5%; +} + +.areafooter{ + display: flex; + align-items: center; + justify-content: space-between; + width: 540rpx; + height: 60rpx; + margin: 0 auto; + margin-top: 10rpx; +} +.areafooterleft image{ + + width: 26rpx; + height: 26rpx; + +} +.areafooterright text{ + font-size: 28rpx; + font-weight: 600; + color: #217ced; +} +/* 留言区域 */ +/* 笔记解释 */ +.messagearea text { + + display: block; + font-size: 40rpx; + font-weight: 600rpx; + margin-left: 60rpx; +} + +.msseagehead { + display: flex; + flex-direction: row; +} + +.headleft { + margin-left: 60rpx; + margin-top: 50rpx; + width: 140rpx; + height: 140rpx; + border-radius: 50%; + overflow: hidden; +} + +.headleft image { + + width: 130rpx; + height: 133rpx; +} + +.headright { + margin-top: 80rpx; + margin-left: 23rpx; + width: 485rpx; + height: 142rpx; +} + +.headrightup text { + + font-size: 30rpx; + /* font-weight: 400rpx; */ +} + +.headrightdown { + margin-top: 10rpx; +} + +.msseagemiddle { + margin: 0 60rpx; +} + +.mssagemiddledown { + margin: 25rpx auto; +} + +.mssagemiddledown image { + + width: 100%; + height: 265rpx; +} + +.messageend { + + margin: 0 60rpx; + display: flex; + flex-direction: row; + justify-content: space-between; + +} + +.messageendleft { + width: 150rpx; + height: 30rpx; +} + +.messageendleft image { + width: 100rpx; + height: 30rpx; +} + +.messageendmiddle { + width: 150rpx; + height: 30rpx; +} + +.messageendmiddle image { + width: 35rpx; + height: 30rpx; +} + +.messageendmiddle text { + + font-size: 28rpx; + padding-left: 23rpx; +} + +.messageendright { + + width: 150rpx; + height: 30rpx; +} + +.messageendright image { + width: 35rpx; + height: 30rpx; + +} + +.messageendright text { + + font-size: 28rpx; + padding-left: 23rpx; +} +.feigexian{ + + margin: 0 60rpx; + margin-top: 60rpx; + border-bottom: 2rpx solid #ada2a2; +} +.vipimage image{ + width: 37rpx; + height: 33rpx; + position: relative; + left: -25px; + top: 83px; +} +.feigexiang{ + + width: 620rpx; + height: 10rpx; + border-bottom: 1rpx solid #dedcdc; + margin: 20rpx auto; +} +/* + 解释开始 + */ + + + .areaclass{ + width: 540rpx; + min-height: 300rpx; + margin: 0 auto; + margin-top: 80rpx; + background-color: #f0f0f1; + border-radius: 5%; +} +.areaclass textarea{ + width: 540rpx; + min-height: 300rpx; +} + + +.areafooter{ + display: flex; + align-items: center; + justify-content: space-between; + width: 540rpx; + height: 60rpx; + margin: 0 auto; + margin-top: 10rpx; +} +.areafooterleft image{ + + width: 52rpx; + height: 52rpx; + +} +.areafooterright text{ + font-size: 28rpx; + font-weight: 600; + color: #217ced; +} +.areafooterright{ + width: 120rpx; + height: 56rpx; +} +.areafooterright button{ + + width: 120rpx; + height: 50rpx; + line-height: 50rpx; + font-size: 28rpx; + font-weight: 600; + color: #217ced; + border:none; +} +button::after { + border: none; +} + +.header_view_hide{ + display: none; +} +.header_view_show{ + display: block; +} + +/* 笔记解释 */ + + +.examingcontent { + width:100%; + margin: 80rpx auto; + /* max-height: 250rpx; + overflow: hidden; */ +} + +.examingcontent2 { + width: 100%; + margin: 80rpx auto; +} + + +.examingcontent text { + font-size: 30rpx; + font-weight: 400; + +} + +.examintcontentda { + width: 700rpx; + margin: 0 auto; + float: left; + margin-bottom: 80rpx; +} + +.contentleft { + float: left; + width: 50rpx; + height: 50rpx; + line-height: 50rpx; + margin-left: 25rpx; +} + +.contentleft image { + width: 49rpx; + height: 49rpx; +} + +.contentright { + margin-left: 25rpx; + float: left; + width: 600rpx; +} + +.charclass { + display: flex; + justify-items: center; +} + +.charclass text { + width: 37rpx; + height: 33rpx; + position: relative; + left: 4px; + top: -31px; + text-align: center; +} + +.item2 .van-count-down { + color: white; +} +.headdouble{ + display: flex; + flex-direction: row; + width: 100%; + margin: 0 auto; + float: left; +} +.headdoubleleft{ + width: 25%; + float: left; +} +.headdoubleright{ + width: 85%; + float: left; +} \ No newline at end of file diff --git a/pages/goodsinfo/goodsinfo.js b/pages/goodsinfo/goodsinfo.js new file mode 100644 index 0000000..ad8d609 --- /dev/null +++ b/pages/goodsinfo/goodsinfo.js @@ -0,0 +1,68 @@ +// pages/goodsinfo/goodsinfo.js +Page({ + + /** + * 页面的初始数据 + */ + data: { + title:'商品详情' + }, + + /** + * 生命周期函数--监听页面加载 + */ + onLoad: function (options) { + wx.setNavigationBarTitle({ + title: this.data.title, + }) + }, + + /** + * 生命周期函数--监听页面初次渲染完成 + */ + onReady: function () { + + }, + + /** + * 生命周期函数--监听页面显示 + */ + onShow: function () { + + }, + + /** + * 生命周期函数--监听页面隐藏 + */ + onHide: function () { + + }, + + /** + * 生命周期函数--监听页面卸载 + */ + onUnload: function () { + + }, + + /** + * 页面相关事件处理函数--监听用户下拉动作 + */ + onPullDownRefresh: function () { + + }, + + /** + * 页面上拉触底事件的处理函数 + */ + onReachBottom: function () { + + }, + + /** + * 用户点击右上角分享 + */ + onShareAppMessage: function () { + + } +}) \ No newline at end of file diff --git a/pages/goodsinfo/goodsinfo.json b/pages/goodsinfo/goodsinfo.json new file mode 100644 index 0000000..8835af0 --- /dev/null +++ b/pages/goodsinfo/goodsinfo.json @@ -0,0 +1,3 @@ +{ + "usingComponents": {} +} \ No newline at end of file diff --git a/pages/goodsinfo/goodsinfo.wxml b/pages/goodsinfo/goodsinfo.wxml new file mode 100644 index 0000000..fa30d2c --- /dev/null +++ b/pages/goodsinfo/goodsinfo.wxml @@ -0,0 +1,24 @@ + + + + + + + + + 马小黑13356489245 + 广东省广州市黄埔区凤凰路99号A栋600 + + + + + + + + + + + + + + \ No newline at end of file diff --git a/pages/goodsinfo/goodsinfo.wxss b/pages/goodsinfo/goodsinfo.wxss new file mode 100644 index 0000000..bb78af7 --- /dev/null +++ b/pages/goodsinfo/goodsinfo.wxss @@ -0,0 +1,73 @@ +/* 商品详情头部 */ +Page { + background-color: #f1f1f1; +} + +.goodsheads { + + width: 666rpx; + height: 155rpx; + margin: 0 auto; + border: 1rpx solid #ffffff; + border-radius: 8rpx; + background-color: #ffffff; + margin-top: 20rpx; + display: flex; + flex-direction: row; + justify-content: flex-start; + align-items: center; + margin-bottom: 100rpx; +} + +.headleft image { + + margin: 0 40rpx; + width: 56rpx; + height: 56rpx; + +} + +.headmiddle { + + width: 452rpx; + height: 90rpx; + display: flex; + flex-direction: column; + justify-content: center; + align-items: left; +} + +.bigfont { + font-size: 30rpx; + color: black; +} + +.smallfont { + + margin-left: 30rpx; + font-size: 26rpx; + color: #b6b6b6; +} +.middledown{ + font-size: 26rpx; + color: black; + width: 452rpx; +} + +.headright image{ + width: 26rpx; + height: 15rpx; +} + +/* 商品详情头部 */ + +/* 商品内容页面 */ + .goodscontent{ + width: 666rpx; + margin: 0 auto; + } + .goodscontent image{ + + width: 100%; + } +/* 商品内容页面 */ \ No newline at end of file diff --git a/pages/grid/grid.js b/pages/grid/grid.js new file mode 100644 index 0000000..0a188ae --- /dev/null +++ b/pages/grid/grid.js @@ -0,0 +1,66 @@ +// pages/grid/grid.js +Page({ + + /** + * 页面的初始数据 + */ + data: { + + }, + + /** + * 生命周期函数--监听页面加载 + */ + onLoad: function (options) { + + }, + + /** + * 生命周期函数--监听页面初次渲染完成 + */ + onReady: function () { + + }, + + /** + * 生命周期函数--监听页面显示 + */ + onShow: function () { + + }, + + /** + * 生命周期函数--监听页面隐藏 + */ + onHide: function () { + + }, + + /** + * 生命周期函数--监听页面卸载 + */ + onUnload: function () { + + }, + + /** + * 页面相关事件处理函数--监听用户下拉动作 + */ + onPullDownRefresh: function () { + + }, + + /** + * 页面上拉触底事件的处理函数 + */ + onReachBottom: function () { + + }, + + /** + * 用户点击右上角分享 + */ + onShareAppMessage: function () { + + } +}) \ No newline at end of file diff --git a/pages/grid/grid.json b/pages/grid/grid.json new file mode 100644 index 0000000..8835af0 --- /dev/null +++ b/pages/grid/grid.json @@ -0,0 +1,3 @@ +{ + "usingComponents": {} +} \ No newline at end of file diff --git a/pages/grid/grid.wxml b/pages/grid/grid.wxml new file mode 100644 index 0000000..292e468 --- /dev/null +++ b/pages/grid/grid.wxml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/pages/grid/grid.wxss b/pages/grid/grid.wxss new file mode 100644 index 0000000..5f51d73 --- /dev/null +++ b/pages/grid/grid.wxss @@ -0,0 +1 @@ +/* pages/grid/grid.wxss */ \ No newline at end of file diff --git a/pages/index/index.js b/pages/index/index.js new file mode 100644 index 0000000..25a4bae --- /dev/null +++ b/pages/index/index.js @@ -0,0 +1,484 @@ +const DEFAULT_PAGE = 0; +const baseUrl = getApp(); +const api = require('../../config/api.js'); +const util = require('../../config/util.js'); +const { default: toast } = require('../../miniprogram_npm/@vant/weapp/toast/toast.js'); +import { campApi } from '../../config/camp_api.js'; +Page({ + + data: { + startPageX: 0, + currentView: DEFAULT_PAGE, + livesdata: [], + baseurl: baseUrl.globalData.baseimgurl, + movies: [], + active: 1, + challengeactive: 1, + toView: `card_${DEFAULT_PAGE}`, + list: [], + itemdata: [], + isdisplay: 1, + onelist: [], //一级数据 + activeshow: 1, + currentid: 1, + // 小方块数据 + blockItems: [] + }, + + // 打卡按钮点击事件 - 跳转到打卡营列表页面 + onCheckinClick() { + console.log('打卡按钮被点击'); + + // 跳转到打卡营列表页面 + wx.navigateTo({ + url: '/pages/camp_list/index', + success: () => { + console.log('跳转到打卡营列表页面成功'); + }, + fail: (err) => { + console.log('跳转失败:', err); + wx.showToast({ + title: '页面跳转失败', + icon: 'none' + }); + } + }); + }, + + // 直播按钮点击事件 + onLiveClick() { + console.log('直播按钮被点击'); + wx.showToast({ + title: '直播功能', + icon: 'none' + }); + // 这里可以添加直播相关的逻辑 + // 比如跳转到直播页面或调用直播接口 + }, + + // 获取小方块数据(使用 Fiber API) + getBlockItems() { + const that = this; + + // 使用统一的 campApi 接口(推荐打卡营) + campApi.getCamps(null) + .then((res) => { + console.log('小方块数据请求成功:', res); + + // Fiber API 返回格式:{ success: true, camps: [...] } + const camps = res.camps || []; + + if (Array.isArray(camps) && camps.length > 0) { + // 处理接口返回的数据,转换为小方块格式 + const blockItems = camps.map((item, index) => ({ + id: item.id || index + 1, + name: item.title || '未知标题', + icon: item.cover_image || 'https://ndnd.duiduiedu.com/uploads/pics/default-icon.png', + description: item.description || '', + // 保存原始数据,用于后续处理 + originalData: item + })); + + that.setData({ + blockItems: blockItems + }); + + console.log('小方块数据更新成功:', blockItems); + } else { + console.log('接口返回数据为空或格式异常:', res); + // 如果接口返回异常,显示空数据 + that.setData({ + blockItems: [] + }); + } + }) + .catch((err) => { + console.log('小方块数据请求失败:', err); + // 请求失败时显示空数据 + that.setData({ + blockItems: [] + }); + }); + }, + + + // 小方块点击事件 - 跳转到打卡营详情页面 + onBlockClick(e) { + const blockId = e.currentTarget.dataset.id; + const blockItem = this.data.blockItems.find(item => item.id == blockId); + + // console.log('小方块被点击:', blockItem); + + if (blockItem && blockItem.originalData) { + const camp = blockItem.originalData; + console.log('打卡营详情:', camp); + + // 直接跳转到打卡营详情页面 + wx.navigateTo({ + url: `/pages/camp_detail/index?id=${camp.id}&title=${encodeURIComponent(camp.title || '打卡营')}`, + success: () => { + console.log('跳转到打卡营详情页面成功:', camp.id); + }, + fail: (err) => { + console.log('跳转失败:', err); + wx.showToast({ + title: '页面跳转失败', + icon: 'none' + }); + } + }); + } else { + wx.showToast({ + title: '数据加载中...', + icon: 'none' + }); + } + }, + checkclassshow(event) { + //新增开关功能 + console.log(event); + console.log(event.currentTarget.id); + const id = event.currentTarget.id; + let arr1 = []; + let arr = []; + arr = this.data.onelist; + + // if (id == 1) { + + // arr.forEach(function (item, index) { + // console.log(item); + // if (item.id == 2) { + // arr1[index] = item; + // } + // }) + // this.setData({ + // onelist: arr1 + // }) + + // } else { + // arr.forEach(function (item, index) { + // console.log(item); + // if (item.id == 1) { + // arr1[index] = item; + // } + // }) + // this.setData({ + // onelist: arr1 + // }) + // } + + + + // arr.forEach(function (item, index) { + + // if (index == e.currentTarget.dataset.itemid) { + // item['liveclickopen'] = 2; + // arr[index] = item; + // } else { + // item['liveclickopen'] = 2; + // arr[index] = item + // } + // }) + // this.setData({ + // listdata: arr + // }) + + + }, + footeronChange(event) { + this.setData({ + footeractive: event.detail + }); + }, + onChangefooter(event) { + console.log(event.detail); + this.setData({ + footeractive: event.detail + }); + }, + onChange(event) { + wx.showToast({ + title: `切换到标签 ${event.detail.name}`, + icon: 'none', + }); + }, + touchStart(e) { + this.startPageX = e.changedTouches[0].pageX; + }, + touchEnd(e) { + + const moveX = e.changedTouches[0].pageX - this.startPageX; + const maxPage = this.data.list.length - 1; + if (Math.abs(moveX) >= 150) { + if (moveX > 0) { + this.currentView = this.currentView !== 0 ? this.currentView - 1 : 0; + } else { + this.currentView = this.currentView !== maxPage ? this.currentView + 1 : maxPage; + } + } + this.setData({ + toView: `card_${this.currentView}` + }); + }, + touchecard(e) { + console.log(e.currentTarget.id); + this.getindexcoursetwo(e.currentTarget.id); + this.setData({ + active: e.currentTarget.id + }) + }, + loaditem(id) { + console.log(id); + }, + cardaddclick(e) { + + console.log(e); + + }, + challengeclickleft(e) { + console.log(e.currentTarget.id); + this.setData({ + challengeactive: e.currentTarget.id + }) + }, + /** + * 生命周期函数--监听页面加载 + */ + onLoad: function (options) { + //baseUrl.islogin(); + // 页面加载时获取小方块数据 + this.getBlockItems(); + }, + getpopindexcouse: function (params) { + //顶级分类 + const that = this; + let url = baseUrl.globalData.baseUrl + '/index/indexcoursetop'; + var param = { + id: '1' + }; + //此处为使用封装的post请求 + util.get(url, param).then((res) => { + console.log(res); + that.setData({ + list: res.data + }); + + }).catch((errMsg) => { + console.log(errMsg); + }); + }, + getindexcourse: function () { + const that = this; + let url = baseUrl.globalData.baseUrl + '/index/indexcourse'; + var param = { + id: '123456789' + }; + //此处为使用封装的post请求 + util.get(url, param).then((res) => { + console.log(res); + that.setData({ + list: res.data + }); + + }).catch((errMsg) => { + console.log(errMsg); + }); + }, + getindexcoursetwo: function (e) { + + //得到二级课程的数据 + const that = this; + let url = baseUrl.globalData.baseUrl + '/index/indexcoursepara'; + var param = { + pareid: e + }; + //此处为使用封装的post请求 + util.post(url, param).then((res) => { + + console.log('==================='); + console.log(res.data); + that.setData({ + onelist: res.data + }); + + }).catch((errMsg) => { + console.log(errMsg); + }); + }, + /** + * 生命周期函数--监听页面初次渲染完成 + */ + onReady: function () { + + }, + + /** + * 生命周期函数--监听页面显示 + */ + onShow: function () { + + this.setData({ + active: 1 + }); + + // if (wx.getStorageSync('userinfo') != null) { + // baseUrl.globalData.currentuserinfo = wx.getStorageSync('userinfo'); + // wx.setStorageSync('wxopenid', wx.getStorageSync('userinfo').openid); + // } + this.isdisplay(); + wx.showShareMenu({ + withShareTicket: true, + menus: ['shareAppMessage', 'shareTimeline'] + }) + this.getpopindexcouse(); //顶级分类 + // this.getindexcourse(); //一级分类 + this.getindexcoursetwo(1); + this.adsfun(); + this.indexlives(); + this.isjumpblack(); + + }, + isjumpblack: function () { + console.log(wx.getStorageSync('userisblack')); + if (wx.getStorageSync('userisblack') == 2) { + + wx.showToast({ + title: "不允许访问该程序",//提示文字 + duration: 5000,//显示时长 + mask: true,//是否显示透明蒙层,防止触摸穿透,默认:false + icon: 'none', //图标,支持"success"、"loading" + success: function () { + wx.reLaunch({ + url: '/pages/userlogin/userlogin', + }) + },//接口调用成功 + fail: function () { }, //接口调用失败的回调函数 + complete: function () { } //接口调用结束的回调函数 + }) + } + }, + indexlives: function () { + //直播列表 + const that = this; + let url = baseUrl.globalData.baseUrl + '/lives/indexlives'; + var param = { + id: '123456789' + }; + //此处为使用封装的post请求 + util.get(url, param).then((res) => { + // console.log(res); + that.setData({ + livesdata: res.data + }); + + }).catch((errMsg) => { + console.log(errMsg); + }); + }, + adsfun: function () { + //广告 + const that = this; + let url = baseUrl.globalData.baseUrl + '/ads/index'; + var param = { + id: '123456789' + }; + //此处为使用封装的post请求 + util.get(url, param).then((res) => { + // console.log(res); + that.setData({ + movies: res.data + }); + + }).catch((errMsg) => { + console.log(errMsg); + }); + }, + livelistclick: function () { + + if (this.data.isdisplay == 1) { + // 直播列表 + wx.navigateTo({ + url: '/pages/indexlives/indexlives', + }) + } else { + wx.showToast({ + title: `功能正在开发中`, + icon: 'none', + }); + } + }, + messageclick: function () { + + wx.navigateTo({ + url: '/pages/messagelist/messagelist', + }) + }, + resclick: function () { + wx.navigateTo({ + url: '/pages/indexreslists/indexreslists', + }) + }, + courselearningclick: function (e) { + + //课程学习 + console.log(e.currentTarget.id); + wx.navigateTo({ + url: '/pages/communityitemlist/communityitemlist?typeid=' + e.currentTarget.id, + }) + }, + picsclick: function (e) { + console.log(e); + if (this.data.isdisplay == 1) { + console.log(e.currentTarget.id); + wx.navigateTo({ + url: '/pages/messageencyclopedias/messageencyclopedias?id=' + e.currentTarget.id, + }) + } + + }, + isdisplay: function (params) { + + const that = this; + let url = baseUrl.globalData.baseUrl + '/index/isdisplay'; + var param = { + pareid: params + }; + //此处为使用封装的post请求 + util.get(url, param).then((res) => { + console.log(res); + that.setData({ + isdisplay: res.data + }); + + }).catch((errMsg) => { + console.log(errMsg); + }); + + }, + onShareAppMessage: function (options) {//分享onShareAppMessage + return { + title: '怼怼公考', + path: `/pages/index/index`, + success: function (res) { + console.log(res, '成功') + console.info(res + '成功'); + wx.showToast({ + title: '分享成功', + }) + // 转发成功 + }, + fail: function (res) { + console.log(res + '失败'); + // 转发失败 + }, + complete: function (res) { + // 不管成功失败都会执行 + console.log(res, '成功或失败') + wx.showToast({ + title: '成功或失败', + }) + } + } + } + +}) \ No newline at end of file diff --git a/pages/index/index.json b/pages/index/index.json new file mode 100644 index 0000000..da483a3 --- /dev/null +++ b/pages/index/index.json @@ -0,0 +1,8 @@ +{ + "usingComponents": {}, + "navigationBarBackgroundColor": "#fff", + "navigationBarTextStyle": "black", + "navigationBarTitleText": "怼学习", + "backgroundColor": "#ccc", + "backgroundTextStyle": "light" +} \ No newline at end of file diff --git a/pages/index/index.wxml b/pages/index/index.wxml new file mode 100644 index 0000000..00b62bc --- /dev/null +++ b/pages/index/index.wxml @@ -0,0 +1,150 @@ + + + + + + + + + + + + + + + {{item.name}} + {{item.description}} + + + + + + + + + + + + 打卡 + > + + + + + + + + 直播 + > + + + + + + + + + + + + + + + +

{{livesdata.name}}

+
+ + + {{livesdata.author}} + + + {{livesdata.times}} + + + + {{livesdata.intro}} + +
+ + + +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + {{item.name}} + + + + + + + + + +
\ No newline at end of file diff --git a/pages/index/index.wxss b/pages/index/index.wxss new file mode 100644 index 0000000..e624567 --- /dev/null +++ b/pages/index/index.wxss @@ -0,0 +1,538 @@ +/* 左右布局容器 - 使用 swiper 的宽高 */ +.layout-container { + width: 666rpx; + height: 218rpx; + margin: 0 auto; + display: flex; + flex-direction: row; + gap: 20rpx; +} + +/* 左侧主内容区域 - 占 3/4 宽度 */ +.main-content-area { + width: 75%; /* 3/4 宽度 */ + height: 100%; + border: 2rpx solid #1ccfd6; + border-radius: 12rpx; + display: flex; + align-items: center; + justify-content: center; + background: #ffffff; + box-shadow: 0 4rpx 12rpx rgba(28, 207, 214, 0.1); +} + +/* 小方块容器样式 */ +.blocks-container { + width: 100%; + height: 100%; + white-space: nowrap; /* 防止换行 */ +} + +/* 小方块样式 */ +.block-item { + display: inline-flex; /* 使用 inline-flex 实现横向排列和内部 flex 布局 */ + flex-direction: column; + align-items: center; + justify-content: center; + width: 200rpx; + height: calc(100% - 40rpx); /* 填满剩余高度,减去上下边距 40rpx */ + margin: 20rpx; /* 上下左右边距都是 20rpx */ + margin-right: 0rpx; + background: #ffffff; + border: 2rpx solid #1ccfd6; /* 优化边框颜色,使用品牌色 */ + border-radius: 12rpx; + box-shadow: 0 2rpx 8rpx rgba(28, 207, 214, 0.15); /* 优化阴影颜色 */ + vertical-align: top; /* 顶部对齐 */ + transition: all 0.3s ease; +} + +.block-item .block-icon { + width: calc(100% - 20rpx); /* 占满小方块宽度,减去左右内边距 */ + height: 100rpx; /* 固定高度 */ + /* margin-bottom: 15rpx; 增加图标与文字之间的间距 */ + display: flex; + align-items: center; + justify-content: center; +} + +.block-item .block-text { + font-size: 26rpx; /* 增加字体大小 */ + color: #333; + text-align: center; + line-height: 1.2; + max-width: 200rpx; /* 增加文字最大宽度,适应更宽的方块 */ + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; + margin: 0 auto; /* 水平居中 */ + font-weight: 500; /* 增加字体粗细 */ + margin-top: 5rpx; +} + +/* 方块描述文字 */ +.block-item .block-desc { + font-size: 20rpx; /* 增加描述文字大小 */ + color: #666; + text-align: center; + line-height: 1.2; + max-width: 200rpx; /* 增加描述文字最大宽度 */ + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; + margin: 6rpx auto 0; /* 增加顶部间距 */ + display: block; +} + +.block-item:first-child { + margin-left: 20rpx; +} + +.block-item:last-child { + margin-right: 20rpx; +} + +.block-item:active { + transform: scale(0.95); + box-shadow: 0 4rpx 12rpx rgba(28, 207, 214, 0.25); /* 优化点击阴影颜色 */ +} + +/* 方块图标图片 */ +.block-icon image { + width: 100%; /* 占满图标容器的宽度 */ + height: 100%; /* 占满图标容器的高度 */ + object-fit: cover; /* 保持图片比例,裁剪多余部分 */ + border-radius: 8rpx; /* 添加圆角 */ +} + +/* 右侧功能按钮区域 - 占 1/4 宽度 */ +.function-buttons { + width: 25%; /* 1/4 宽度 */ + height: 100%; + display: flex; + flex-direction: column; + gap: 20rpx; + box-sizing: border-box; /* 确保边框和内边距包含在宽度内 */ + min-width: 0; /* 允许 flex 子元素收缩 */ +} + +.function-btn { + width: 100%; + height: 50%; /* 每个按钮占一半高度 */ + border-radius: 12rpx; + display: flex; + align-items: center; + padding: 0 10rpx; + box-shadow: 0 2rpx 8rpx rgba(0, 0, 0, 0.1); + transition: all 0.3s ease; + box-sizing: border-box; /* 确保 padding 不会增加总宽度 */ + overflow: hidden; /* 防止内容溢出 */ +} + +.function-btn:active { + transform: scale(0.95); +} + +/* 打卡按钮样式 */ +.checkin-btn { + border: 2rpx solid #1ccfd6; + background: #ffffff; +} + +.checkin-btn .btn-icon image { + width: 24rpx; + height: 24rpx; +} + +/* 直播按钮样式 */ +.live-btn { + border: 2rpx solid #ff6b9d; + background: #ffffff; +} + +.live-btn .btn-icon image { + width: 24rpx; + height: 24rpx; +} + +/* 按钮内部元素 */ +.btn-icon { + margin-right: 6rpx; + display: flex; + align-items: center; + flex-shrink: 0; /* 图标不缩放 */ +} + +.btn-text { + flex: 1; + font-size: 22rpx; + color: #333; + font-weight: 500; + white-space: nowrap; /* 防止文字换行 */ + overflow: hidden; /* 隐藏溢出文字 */ + text-overflow: ellipsis; /* 超出显示省略号 */ +} + +.btn-arrow { + font-size: 18rpx; + color: #999; + font-weight: bold; + flex-shrink: 0; /* 箭头不缩放 */ + margin-left: 4rpx; +} + +.swiper { + height: 218rpx; + width: 666rpx; + margin: 0 auto; +} + +.swiper image { + height: 100%; + width: 100%; +} +.cardgongneng{ + display: flex; + flex-wrap: wrap; + align-content: center; + justify-content:space-between; + height: 170rpx; + width: 666rpx; + margin: 25rpx auto; + border: 1rpx solid #e7d1d1; + border-radius: 2%; + box-shadow:1px 1px 1px 1px rgb(236, 234, 234); +} +.cardgongneng2{ + display: flex; + flex-wrap: wrap; + align-content: center; + justify-content:space-between; + height: 170rpx; + width: 570rpx; + margin: 0 auto; +} +.cardgongneng2 image{ + width: 85rpx; + height: 100rpx; + +} +.zhibocss { + display: flex; + flex-wrap: wrap; + align-content: flex-start; + height: 180rpx; + width: 666rpx; + margin: 50rpx auto; + background: url(https://ndnd.duiduiedu.com/uploads/pics/line.png); + background-repeat: no-repeat; + background-size: 666rpx 180rpx; + display: none; +} + +.item1 { + + width: 50rpx; + height: 150rpx; + box-sizing: border-box; + margin: 15rpx 16rpx; +} + +.itemhead { + margin-top: 20rpx; + margin-left: 20rpx; +} + +.itemhead h2 { + + font-weight: 600; + font-family: 'Arial Narrow', Arial; + font-size: large; +} + +.item1 image { + width: 50rpx; + height: 150rpx; +} + +.item2 { + width: 160rpx; + height: 160rpx; +} + +.item2 image { + margin-left: 10rpx; + width: 150rpx; + height: 160rpx; +} + +.item3 { + width: 334rpx; + height: 170rpx; +} + +.item4 { + padding-top: 10rpx; + padding-left: 15rpx; + width: 75rpx; + height: 164rpx; +} + +.item4 image { + + width: 75rpx; + height: 164rpx; +} + +.itemmiddle { + display: flex; + margin-left: 15rpx; + width: 334rpx; + height: 50rpx; +} + +.itemmiddleleft { + display: flex; + margin-top: 10rpx; + flex-direction: row; +} + +.itemmiddleleft text { + color: #AEAEAE; + align-items: center; + font-size: 24rpx; + font-weight: 400; +} + +.itemmiddleleft image { + + width: 30rpx; + height: 30rpx; + padding-right: 10rpx; +} + +.itemmiddleright { + display: flex; + margin-top: 10rpx; + margin-left: 10rpx; + flex-direction: row; +} + +.itemmiddleright text { + color: #AEAEAE; + align-items: center; + font-size: 24rpx; + font-weight: 400; +} + +.itemmiddleright image { + + width: 30rpx; + height: 30rpx; + padding-right: 10rpx; +} + +.itemend { + width: 300rpx; + overflow: hidden; + color: #AEAEAE; + line-height: 28rpx; + margin-bottom: 10rpx; + margin-left: 20rpx; + font-size: 18rpx; +} + +.curriculum { + + margin: 0 auto; + /* margin-top: 20rpx; */ + width: 686rpx; + /* height: 350rpx; */ + /* margin-bottom: 80rpx; */ +} + +.curriculumup { + + width: 750rpx; + height: 55rpx; +} + +.curriculumupstart { + float: left; + width: 660rpx; + height: 55rpx; + margin-top: 20rpx; + margin-bottom: 10rpx; +} + +.curriculumupend { + float: left; + width: 50rpx; + height: 50rpx; +} + +.scroll-box { + white-space: nowrap; + height: 100%; +} + +.card-box { + display: inline-block; +} + +.card image { + height: 55rpx; + line-height: 55rpx; + width: 211rpx; +} + +.card { + display: flex; + justify-content: center; + align-items: center; + box-sizing: border-box; + height: 55rpx; + line-height: 55rpx; + /* margin: 100rpx 200rpx; */ + font-size: 20px; + /* padding-left: 20rpx; + padding-right: 30rpx; */ + margin-left: 10rpx; + border-radius: 4px; +} +.curriculumdown { + display: flex; + flex-flow: row wrap; + align-content: flex-start; + width: 666rpx; + /* height: 295rpx; */ +} + +.curriculumitem { + display: flex; + flex-direction: column; + /* width: 33%; */ + width: 33%; + height: 150rpx; + align-items: center; + margin-top: 20rpx; + /* margin-bottom: 20rpx; */ +} + +.downup { + width: 90rpx; + height: 80rpx; + text-align: center; +} + +.downup image { + width: 80rpx; + height: 90rpx; + text-align: center; +} + +.downdown { + margin-top: 15rpx; + text-align: center; + width: 180rpx; + height: 30rpx; +} + +.downdown text { + font-size: 20rpx; + +} + + + +.curriculumupend image { + width: 50rpx; + height: 50rpx; +} + +.challenge { + width: 666rpx; + margin: 0 auto; + height: 83rpx; +} + +.challengeleft { + + float: left; + width: 429rpx; + height: 80rpx; + +} + +.challengeleft image { + + width: 440rpx; + height: 80rpx; +} + +.challengeright { + float: left; + width: 238rpx; + height: 80rpx; +} + +.challengeright image { + + width: 240rpx; + height: 80rpx; +} + + +.challenge2 { + width: 666rpx; + margin: 0 auto; + height: 83rpx; +} + +.challenge2left { + + float: left; + + width: 238rpx; + height: 80rpx; + +} + +.challenge2left image { + + + width: 253rpx; + height: 80rpx; +} + +.challenge2right { + float: left; + width: 429rpx; + height: 80rpx; +} + +.challenge2right image { + + width: 432rpx; + height: 80rpx; +} + +.van-tabbar-item { + height: 298rpx; + width: 130rpx; +} + +/***parent**/ +.parentclass { + margin: 0 auto; + width: 666rpx; +} +.parentimage{ + width: 200rpx; + height: 30rpx; + margin-top: 10rpx; + +} +.parentimage image{ + width: 200rpx; + height: 30rpx; +} diff --git a/pages/indexclass/indexclass.js b/pages/indexclass/indexclass.js new file mode 100644 index 0000000..11711c8 --- /dev/null +++ b/pages/indexclass/indexclass.js @@ -0,0 +1,634 @@ +const DEFAULT_PAGE = 0; +const Apps = getApp(); +const api = require('../../config/api.js'); +const util = require('../../config/util.js'); +Page({ + + /** + * 页面的初始数据 + */ + data: { + baseurl: Apps.globalData.baseimgurl, + messagelist: [], + startPageX: 0, + currentView: DEFAULT_PAGE, + imagecount: 4, + indeximagecount: 4, + active: 1, + challengeactive: 1, + toView: `card_${DEFAULT_PAGE}`, + list: [], + replylist: [], + imageslists: [], //图片预览 + showview: false, + upload_picture_list: [], + imagesListp: [], + imagestr: [], + id: 1, + accesstoken: '', + typeid: wx.getStorageSync('jmparm') == null ? 1 : wx.getStorageSync('jmparm'), + page: 1, //页面数, + pagecount: 0, + classintorgg: [], + classid:1 + + }, + + /** + * 生命周期函数--监听页面加载 + */ + onLoad: function (options) { + console.log("=-=-=-=-=-=-=========----------"); + console.log(options.id); + if (options.id > 0) { + this.setData({ + active: options.id == '' ? 1 : options.id, + page: 1, + typeid: wx.getStorageSync('jmparm'), + classid:options.id + }) + } + + }, + displayview: function () { + wx.navigateTo({ + url: '/pages/indexcreatewords/indexcreatewords?typeid=' + this.data.typeid, + }) + + }, + contentclick: function (params) { + + let id = params.currentTarget.id; + let xid = params.currentTarget.dataset.xid; + + this.setData({ + wordstextname: '@' + id + }); + + this.addinccomment(xid) + wx.showToast({ + title: '@成功,请移底部留言', //提示文字 + duration: 2000, //显示时长 + mask: true, //是否显示透明蒙层,防止触摸穿透,默认:false + icon: 'success', //图标,支持"success"、"loading" + success: function () {}, //接口调用成功 + fail: function () {}, //接口调用失败的回调函数 + complete: function () {} //接口调用结束的回调函数 + }) + + // this.pageScrollToBottom(); + + }, + addinccomment: function (params) { + //增加评论数 + console.log(params); + let userid = wx.getStorageSync('wxuserid'); + const that = this; + let url = Apps.globalData.baseUrl + '/indexclasslist/addcommentrepycount'; + var param = { + id: params, + userid: userid + }; + //此处为使用封装的post请求 + util.get(url, param).then((res) => { + console.log(res); + // this.wrodtypelist(this.data.courseid) + + }).catch((errMsg) => { + console.log(errMsg); + }); + }, + // pageScrollToBottom() { + // wx.createSelectorQuery().select('#time-mo').boundingClientRect(function (rect) { + + // // rect.id // 节点的ID + // rect.dataset // 节点的dataset + // rect.left // 节点的左边界坐标 + // rect.right // 节点的右边界坐标 + // rect.top // 节点的上边界坐标 + // rect.bottom // 节点的下边界坐标 + // rect.width // 节点的宽度 + // rect.height + // console.log(rect.bottom*15) + // console.log(rect.bottom) + // // 使页面滚动到底部 + // wx.pageScrollTo({ + // scrollTop: rect.bottom*15 + // }) + // }).exec() + // }, + + /** + * 生命周期函数--监听页面初次渲染完成 + */ + onReady: function () { + + }, + + /** + * 生命周期函数--监听页面显示 + */ + onShow: function () { + Apps.islogin(); + this.setData({ + active: wx.getStorageSync('jmparm') == '' ? 1 : wx.getStorageSync('jmparm'), + typeid: wx.getStorageSync('jmparm') == '' ? 1 : wx.getStorageSync('jmparm') + }) + //头部消息 + this.msglist(); + //留言类型 + this.wrodtypelist(); + //回复留言列表 + this.getwords(); + this.getclassintro(this.data.classid); + }, + + /** + * 生命周期函数--监听页面隐藏 + */ + onHide: function () { + + }, + getacctoken: function () { + const that = this; + let url = Apps.globalData.baseUrl + '/user/acctoken'; + var param = { + pareid: '1213' + }; + //此处为使用封装的post请求 + util.get(url, param).then((res) => { + + wx.setStorageSync('accesstoen', res.access_token) + that.setData({ + accesstoken: res.access_token + }); + + }).catch((errMsg) => { + console.log(errMsg); + }); + }, + /** + * 生命周期函数--监听页面卸载 + */ + onUnload: function () { + + }, + + /** + * 页面相关事件处理函数--监听用户下拉动作 + */ + onPullDownRefresh: function () { + + }, + + /** + * 页面上拉触底事件的处理函数 + */ + onReachBottom: function () { + + }, + + /** + * 用户点击右上角分享 + */ + onShareAppMessage: function () { + + }, + touchStart(e) { + this.startPageX = e.changedTouches[0].pageX; + }, + touchEnd(e) { + + const moveX = e.changedTouches[0].pageX - this.startPageX; + const maxPage = this.data.list.length - 1; + if (Math.abs(moveX) >= 150) { + if (moveX > 0) { + this.currentView = this.currentView !== 0 ? this.currentView - 1 : 0; + } else { + this.currentView = this.currentView !== maxPage ? this.currentView + 1 : maxPage; + } + } + this.setData({ + toView: `card_${this.currentView}` + }); + }, + touchecard(e) { + + wx.setStorageSync('jmparm', e.currentTarget.id); + this.setData({ + active: e.currentTarget.id, + typeid: e.currentTarget.id + }) + this.getwords(); + }, + duizhiticlick: function () { + wx.navigateTo({ + url: '/pages/allpapers/allpapers', + }) + }, + messagelistclick: function () { + wx.navigateTo({ + url: '/pages/messagelist/messagelist', + }) + }, + communityinfoclick: function (e) { + + wx.navigateTo({ + url: '/pages/communityinfo/communityinfo?id=' + e.currentTarget.id, + }) + }, + communityinfocommentclick: function (e) { + + wx.navigateTo({ + //communityinfocomment + url: '/pages/communityinfo/communityinfo?id=' + e.currentTarget.id + '&jztype=2', + }) + }, + messagelistclick: function (e) { + //资讯列表分类 + wx.navigateTo({ + url: '/pages/messagelist/messagelist?typeid=' + e.currentTarget.id, + }) + }, + messageclick: function (e) { + wx.navigateTo({ + url: '/pages/messageencyclopedias/messageencyclopedias?id=' + e.currentTarget.id, + }) + }, + msglist: function () { + + const that = this; + let url = Apps.globalData.baseUrl + '/msglist/msgindexlist'; + var param = { + id: '123456789' + }; + //此处为使用封装的post请求 + util.get(url, param).then((res) => { + console.log(res); + that.setData({ + messagelist: res.data.sort() + + }); + + }).catch((errMsg) => { + console.log(errMsg); + }); + }, + wrodtypelist: function () { + + const that = this; + let url = Apps.globalData.baseUrl + '/indexclass/getindexclasstype'; + var param = { + id: '123456789' + }; + //此处为使用封装的post请求 + util.get(url, param).then((res) => { + that.setData({ + list: res.data, + active: this.data.active + }); + + }).catch((errMsg) => { + console.log(errMsg); + }); + }, + getwordspics: function (id) { + //得到单个信息图片数 + const that = this; + let url = Apps.globalData.baseUrl + '/indexclasslist/getwordssingle'; + var param = { + id: id + }; + //此处为使用封装的post请求 + util.get(url, param).then((res) => { + + console.log(res.data.pics); + that.setData({ + imageslists: res.data.pics, + }); + + }).catch((errMsg) => { + console.log(errMsg); + }); + }, + getclassintro: function (params) { + //得到用户公告 + const that = this; + let url = Apps.globalData.baseUrl + '/indexclasslist/getclassgg'; + var param = { + classid: params + }; + //此处为使用封装的post请求 + util.get(url, param).then((res) => { + console.log(res); + let counts = res.data.length; + that.setData({ + classintorgg: res.data + }); + + }).catch((errMsg) => { + console.log(errMsg); + }); + }, + getwords: function () { + + const that = this; + let url = Apps.globalData.baseUrl + '/indexclasslist/getwords'; + var param = { + typeid: that.data.typeid, + page: that.data.page + }; + //此处为使用封装的post请求 + util.get(url, param).then((res) => { + console.log(res); + let counts = res.data.length; + that.setData({ + replylist: res.data, + pagecount: counts == 0 ? 1 : counts + }); + + }).catch((errMsg) => { + console.log(errMsg); + }); + }, + wordsclick: function (ee) { + + let e1 = ee.currentTarget.id; + let e2 = wx.getStorageSync('wxuserid'); + const that = this; + let url = Apps.globalData.baseUrl + '/indexclasslist/wordsclickcount'; + var param = { + words_id: e1, + user_id: e2, + }; + //此处为使用封装的post请求 + util.get(url, param).then((res) => { + + //头部消息 + that.msglist(); + //留言类型 + that.wrodtypelist(); + that.getwords(); + + }).catch((errMsg) => { + console.log(errMsg); + }); + }, + bindTextAreaBlur: function (e) { + this.setData({ + wordstextname: e.detail.value + }) + }, + preview: function (params) { + let that = this; + let currentUrl = params.currentTarget.dataset.src; + let arrindex = params.currentTarget.dataset.id; + let picsid = params.currentTarget.dataset.pics; //单条信息ID + + // that.getwordspics(picsid); //得到单条信息图片 + console.log(that.data.replylist[picsid]); + let rearr = that.data.replylist[picsid].pics; + let arr = []; + rearr.forEach(function (item, index) { + arr[index] = that.data.baseurl + item + }); + console.log('-----'); + console.log(arr); + + wx.previewImage({ + current: currentUrl, // 当前显示图片的http链接 + urls: arr // 需要预览的图片http链接列表 + }) + }, + getmsgcheck: function (params, accesstoken) { + // $url ='https://api.weixin.qq.com/wxa/msg_sec_check?access_token=' .$accessToken; + const that = this; + // let url = 'https://api.weixin.qq.com/wxa/msg_sec_check?access_token='+wx.getStorageSync('accesstoen'); + let url = Apps.globalData.baseUrl + '/user/checkmsg' + var param = { + "openid": wx.getStorageSync('wxopenid'), + "scene": 2, + "version": 2, + "content": params, + "access_token": wx.getStorageSync('accesstoen') + }; + //此处为使用封装的post请求 + util.post(url, param).then((res) => { + + console.log(res); + console.log(res.errcode); + if (res.errcode == "0") { + that.wordsadd(params, that.data.imagestr) + } else { + + wx.showToast({ + title: '留言内容有敏感词请重新输入', //提示文字 + duration: 2000, //显示时长 + mask: true, //是否显示透明蒙层,防止触摸穿透,默认:false + icon: 'none', //图标,支持"success"、"loading" + success: function () {}, //接口调用成功 + fail: function () {}, //接口调用失败的回调函数 + complete: function () {} //接口调用结束的回调函数 + }) + } + + }).catch((errMsg) => { + console.log(errMsg); + }); + }, + uploadpic: function () { + var that = this; + let imagesList = []; + let maxSize = 1024 * 1024; + let maxLength = 6; + let flag = true; + wx.chooseImage({ + count: 9, //最多可以选择的图片总数 + sizeType: ['original', 'compressed'], // 可以指定是原图还是压缩图,默认二者都有 + sourceType: ['album', 'camera'], // 可以指定来源是相册还是相机,默认二者都有 + success: function (res) { + wx.showToast({ + title: '正在上传...', + icon: 'loading', + mask: true, + duration: 500 + }) + for (let i = 0; i < res.tempFiles.length; i++) { + if (res.tempFiles[i].size > maxSize) { + flag = false; + console.log(111) + wx.showModal({ + content: '图片太大,不允许上传', + showCancel: false, + success: function (res) { + if (res.confirm) { + console.log('用户点击确定') + } + } + }); + } + } + if (res.tempFiles.length > maxLength) { + console.log('222'); + wx.showModal({ + content: '最多能上传' + maxLength + '张图片', + showCancel: false, + success: function (res) { + if (res.confirm) { + console.log('确定'); + } + } + }) + } + if (flag == true && res.tempFiles.length <= maxLength) { + that.setData({ + imagesListp: res.tempFilePaths + }) + that.data.imagestr = []; + var arr = ''; + for (let i = 0; i < that.data.imagesListp.length; i++) { + wx.uploadFile({ + url: Apps.globalData.baseUrl + '/indexclasslist/uploadpics', + filePath: that.data.imagesListp[i], + name: 'file', + success: function (res) { + //打印 + console.log("------------响应数据:"); + console.log(res.data); + + var message = JSON.parse(res.data); + that.data.imagestr.push(message); + that.setData({ + imagestr: that.data.imagestr + }); + }, + }) + } + } + console.log(res); + }, + fail: function (res) { + console.log(res); + } + }) + + }, + wordsadd: function (content, imagestr) { + + const that = this; + let url = Apps.globalData.baseUrl + '/indexclasslist/wordsxqadd'; + var param = { + content: content, + imagestr: imagestr, + userid: wx.getStorageSync('wxuserid') == '' ? 3 : wx.getStorageSync('wxuserid'), + wordstype_ids: this.data.typeid + }; + //此处为使用封装的post请求 + util.post(url, param).then((res) => { + console.log(res.data); + if (res.data > 0) { + wx.showToast({ + title: '留言内容成功', + icon: 'none', + duration: 1500 + }) + this.getwords(); + + that.setData({ + wordstextname: '' + }) + + } + + }).catch((errMsg) => { + console.log(errMsg); + }); + }, + formSubmit: function (e) { + + this.getacctoken(); + let content = this.data.wordstextname; + console.log(content) + if (content == '') { + wx.showToast({ + title: '留言内容为空,请填写内容', + icon: 'none', + duration: 1500 + }) + return false; + } + this.getmsgcheck(content, this.data.accesstoken); + }, + // 触底加载 + onReachBottom: function () { + + this.setData({ + page: this.data.page + 1 + }) + let newpage = (this.data.page + 1); //页数触底加1 + console.log(newpage); + if (newpage * 10 >= this.data.pagecount) { + + wx.showToast({ + title: '触底了,没有可加载的数据了', + icon: 'none', + duration: 1500 + }) + + } else { + this.getwords(); + } + + }, + clickmyroom: function (params) { + console.log(params.currentTarget.id); + console.log(this.data.classid); + console.log("-----------------------"); + // wx.navigateTo({ + // url: '/pages/indexclasszx/indexclasszx?myclassid=' + params.currentTarget.id, + // }) + wx.navigateTo({ + url: '/pages/classindex/classindex?classid='+this.data.classid, + }) + }, + clickclassintro: function (params) { + + const id = params.currentTarget.id; + var urlpath = ""; + if (id == 1) { + urlpath = "/pages/indexclassintro/indexclassintro?id="+ this.data.classid + console.log(urlpath); + wx.navigateTo({ + url: urlpath, + }) + } else if (id == 2) { + //indexreslistsnew + urlpath = "/pages/indexreslistsnew/indexreslistsnew?id=" + this.data.classid + // urlpath = "/pages/indexclassres/indexclassres?id=" + this.data.classid + console.log(urlpath); + wx.navigateTo({ + url: urlpath, + }) + } else if (id == 3) { + + urlpath = "/pages/indexjobtask/indexjobtask?id=" + this.data.classid + console.log(urlpath); + wx.navigateTo({ + url: urlpath, + }) + } else if (id == 4) { + urlpath = "/pages/indexobjectactivelist/indexobjectactivelist?id=" + this.data.classid + console.log(urlpath); + wx.navigateTo({ + url: urlpath, + }) + } else if (id == 5) { + urlpath = "/pages/indexclasssubwork/indexclasssubwork?id=" + this.data.classid + console.log(urlpath); + wx.navigateTo({ + url: urlpath, + }) + } + + } +}) \ No newline at end of file diff --git a/pages/indexclass/indexclass.json b/pages/indexclass/indexclass.json new file mode 100644 index 0000000..092f639 --- /dev/null +++ b/pages/indexclass/indexclass.json @@ -0,0 +1,8 @@ +{ + "usingComponents": {}, + "navigationBarBackgroundColor": "#fff", + "navigationBarTextStyle": "black", + "navigationBarTitleText": "班级", + "backgroundColor": "#ccc", + "backgroundTextStyle": "light" + } \ No newline at end of file diff --git a/pages/indexclass/indexclass.wxml b/pages/indexclass/indexclass.wxml new file mode 100644 index 0000000..90add91 --- /dev/null +++ b/pages/indexclass/indexclass.wxml @@ -0,0 +1,118 @@ + + + + + + + + + {{classintorgg['intro']}} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + {{item.userinfo['nickname']}} + + + {{item.times}} + + + + + + + + + + {{item.name}} + + + + + + + + + + + + + + + + + + + {{item.plcommentcount}} + + + + {{item.wordsclickcount}} + + + + + + + + + +
+ + + + + + + + + + + +
+ + + + + +
\ No newline at end of file diff --git a/pages/indexclass/indexclass.wxss b/pages/indexclass/indexclass.wxss new file mode 100644 index 0000000..206b9cb --- /dev/null +++ b/pages/indexclass/indexclass.wxss @@ -0,0 +1,431 @@ +.courselive { + width: 750rpx; + height: 403rpx; + } + + .functionalarea { + display: flex; + flex-flow: row wrap; + align-content: flex-start; + width: 750rpx; + height: 550rpx; + } + + .areaitem { + margin-top: 60rpx; + text-align: center; + width: 33%; + height: 170rpx; + } + + .areaitem image { + width: 120rpx; + height: 170rpx; + } + + .messagearea text { + + display: block; + font-size: 40rpx; + font-weight: 600rpx; + margin-left: 60rpx; + } + + .msseagehead { + display: flex; + flex-direction: row; + } + + .headleft { + margin-left: 60rpx; + margin-top: 50rpx; + width: 140rpx; + height: 140rpx; + border-radius: 50%; + overflow: hidden; + } + + .headleft image { + + width: 130rpx; + height: 133rpx; + } + + .headright { + margin-top: 80rpx; + margin-left: 23rpx; + width: 200rpx; + height: 142rpx; + } + + .headrightup text { + + font-size: 30rpx; + font-weight: 400rpx; + } + + .headrightdown { + font-size: 30rpx; + margin-top: 10rpx; + } + + .msseagemiddle { + margin: 0 60rpx; + } + + .mssagemiddledown { + margin: 25rpx auto; + } + + .mssagemiddledown image { + + width: 100%; + height: 265rpx; + } + + .mssagemiddledownone image { + width: 100%; + } + + .messageend { + + margin: 0 60rpx; + display: flex; + flex-direction: row; + justify-content: space-between; + + } + + .messageendleft { + width: 150rpx; + height: 30rpx; + } + + .messageendleft image { + width: 100rpx; + height: 30rpx; + } + + .messageendmiddle { + width: 150rpx; + height: 30rpx; + } + + .messageendmiddle image { + width: 35rpx; + height: 30rpx; + } + + .messageendmiddle text { + + font-size: 28rpx; + padding-left: 23rpx; + } + + .messageendright { + + width: 150rpx; + height: 30rpx; + } + + .messageendright image { + width: 35rpx; + height: 30rpx; + + } + + .messageendright text { + + font-size: 28rpx; + padding-left: 23rpx; + } + + .feigexian { + + margin: 0 60rpx; + margin-top: 60rpx; + border-bottom: 2rpx solid #ada2a2; + } + + .areaclass { + + width: 540rpx; + height: 193rpx; + margin: 0 auto; + margin-top: 80rpx; + background-color: #f0f0f1; + border-radius: 5%; + } + + .areafooter { + display: flex; + align-items: center; + justify-content: space-between; + width: 540rpx; + height: 60rpx; + margin: 0 auto; + margin-top: 10rpx; + } + + .areafooterleft image { + + width: 26rpx; + height: 26rpx; + + } + + .areafooterright text { + font-size: 28rpx; + font-weight: 600; + color: #217ced; + } + + .vipimage image { + width: 37rpx; + height: 33rpx; + position: relative; + left: -32rpx; + top: 148rpx; + } + + /* 社区头部 */ + .communityhead { + width: 690rpx; + height: 210rpx; + margin: 0 auto; + display: flex; + flex-direction: row; + justify-content: flex-start; + align-items: center; + } + + .communityheadleft { + + width: 75rpx; + height: 195rpx; + background-size: 100% 100%; + display: flex; + flex-direction: row; + justify-content: space-between; + align-items: center; + } + .communityheadleft image{ + + width: 75rpx; + height: 195rpx; + } + .communityheadmiddle{ + width: 450rpx; + height: 195rpx; + border-radius: 5%; + margin-left:20rpx; + background-color: #D3FDFF; + } + .communityheadmiddle text{ + display: block; + color:#02BBC2; + font-size: 28rpx; + font-weight: 400; + padding-top:32rpx; + padding-left: 32rpx; + } + + .containerclass{ + + display: flex; + flex-direction: row; + justify-content: space-between; + align-items: center; + margin: 0 auto; + width: 690rpx; + height: 180rpx; + margin-top:65rpx; + margin-bottom:50rpx; + border: 1rpx solid #d6cfcf; + border-radius: 2%; + box-shadow: 3px 3px 3px 3px rgb(236, 234, 234); + } + .containerclass image{ + margin-left: 20rpx; + width: 89rpx; + height: 108rpx; + margin-right: 20rpx; + } + + .communityheadright { + width: 140rpx; + height: 195rpx; + margin-left: 20rpx; + } + .communityheadright image { + width: 140rpx; + height: 195rpx; + } + + .communityheadleftitem1 { + width: 240rpx; + margin-left: 55rpx; + display: flex; + flex-direction: column; + justify-content: center; + align-items: center; + } + + .communityheadleftitem2 { + width: 80rpx; + height: 180rpx; + } + + .communityheadleftitem2 image { + width: 80rpx; + height: 175rpx; + } + + .messageitem { + width: 240rpx; + height: 38rpx; + /* border: 1rpx solid #1ccfd6; */ + color: #1ccfd6; + margin-bottom: 10rpx; + text-align: center; + overflow: hidden; + } + + /* 社区头部 */ + + /* 社区滑动 */ + .curriculumup { + width: 680rpx; + height: 55rpx; + margin: 0 auto; + margin-top: 40rpx; + } + + .curriculumupstart { + float: left; + width: 680rpx; + height: 55rpx; + } + + .curriculumupend { + float: left; + width: 50rpx; + height: 50rpx; + } + + .scroll-box { + white-space: nowrap; + height: 100%; + } + + .card-box { + display: inline-block; + margin-right: 10rpx; + } + + .card image { + height: 55rpx; + line-height: 55rpx; + width: 211rpx; + } + + .lineclass { + width: 685rpx; + margin: 2rpx auto; + border-bottom: 1rpx solid #dcdcdc; + } + + /* 社区滑动 */ + + /* 补充留言信息右边 */ + .itemright { + width: 200rpx; + margin-top: 50rpx; + margin-left: 30rpx; + display: flex; + flex-direction: row; + justify-content: center; + align-items: center; + } + + .itemright image { + + margin-left: 10rpx; + width: 70rpx; + height: 35rpx; + } + + /* 补充留言信息右边 */ + + .header_view_hide{ + display: none; + } + .header_view_show{ + display: block; + } + + .round-click{ + height: 61rpx; + width: 54rpx; + position: fixed; + bottom: 150rpx; + right: 20rpx; + display: flex; + align-items: center; + justify-content: center; + z-index: 9; + } + .round-click image{ + height: 61rpx; + line-height: 61rpx; + width: 54rpx; + } + + .areaclass{ + width: 540rpx; + min-height: 300rpx; + margin: 0 auto; + margin-top: 80rpx; + background-color: #f0f0f1; + border-radius: 5%; + } + .areaclass textarea{ + width: 540rpx; + min-height: 300rpx; + } + + + .areafooter{ + display: flex; + align-items: center; + justify-content: space-between; + width: 540rpx; + height: 60rpx; + margin: 0 auto; + margin-top: 10rpx; + } + .areafooterleft image{ + + width: 52rpx; + height: 52rpx; + + } + .areafooterright text{ + font-size: 28rpx; + font-weight: 600; + color: #217ced; + } + .areafooterright{ + width: 120rpx; + height: 56rpx; + } + .areafooterright button{ + + width: 120rpx; + height: 50rpx; + line-height: 50rpx; + font-size: 28rpx; + font-weight: 600; + color: #217ced; + border:none; + } \ No newline at end of file diff --git a/pages/indexclassintro/indexclassintro.js b/pages/indexclassintro/indexclassintro.js new file mode 100644 index 0000000..f70fed3 --- /dev/null +++ b/pages/indexclassintro/indexclassintro.js @@ -0,0 +1,353 @@ +const DEFAULT_PAGE = 0; +const Apps = getApp(); +const api = require('../../config/api.js'); +const util = require('../../config/util.js'); +Page({ + + /** + * 页面的初始数据 + */ + data: { + baseurl: Apps.globalData.baseimgurl, + messagelist: [], + startPageX: 0, + currentView: DEFAULT_PAGE, + imagecount: 4, + indeximagecount: 4, + active: 1, + challengeactive: 1, + toView: `card_${DEFAULT_PAGE}`, + list: [], + replylist: [], + imageslists: [], //图片预览 + showview: false, + upload_picture_list: [], + imagesListp: [], + imagestr: [], + id: 1, + accesstoken: '', + typeid: wx.getStorageSync('jmparm') == null ? 1 : wx.getStorageSync('jmparm'), + page: 1, //页面数, + pagecount: 0, + itemdata:[], + userctive:1, //1退出,2加入 + showdiage:false, + payid:0, //支付ID + totalmoney:0.01, //多少费用 + showdduihuan:false, + valueduihuanma:'' //后台兑换码 + + }, + onCloseduihuan:function (params) { + this.setData({ showduihuan: false }); + }, + duihuanmoney:function (params) { + this.setData({ + showdduihuan: true, + showdiage: false, + }); + }, + onChangeduihuan:function (params) { + console.log("用户已输入兑换码"); + console.log(params.detail); + this.setData({ + valueduihuanma :params.detail, + }) + + }, + querybtn:function (params) { + //确认兑换码 + console.log("确认数据"); + console.log(params); + console.log(this.data.valueduihuanma); + console.log(this.data.payid); + this.duihuanmadui(this.data.valueduihuanma,this.data.payid); + }, + + duihuanmadui:function (valueduihuanma,indexclasslist_id) { + //确认兑换码 + const that = this; + let url = Apps.globalData.baseUrl + '/indexclasslist/userduihuanma'; + var param = { + namenum:valueduihuanma, + indexclasslist_id:indexclasslist_id, + user_id:wx.getStorageSync('wxuserid') + }; + //此处为使用封装的post请求 + util.get(url, param).then((res) => { + console.log(res); + wx.reLaunch({ + url: '/pages/indexsq/indexsq', + }) + + }).catch((errMsg) => { + console.log(errMsg); + }); + }, + + /** + * 生命周期函数--监听页面加载 + */ + onLoad: function (options) { + console.log(options.id); + if (options.id > 0) { + this.setData({ + active: options.id == 1 ? 1 : options.id, + }) + } + }, + /** + * 生命周期函数--监听页面初次渲染完成 + */ + onReady: function () { + + }, + + /** + * 生命周期函数--监听页面显示 + */ + onShow: function () { + Apps.islogin(); + console.log(this.data.active); + this.haveindexclassuser(this.data.active); + this.getpaper(this.data.active); //班级列表 1全部,2我的班级 + + + }, + + /** + * 生命周期函数--监听页面隐藏 + */ + onHide: function () { + + }, + onshowdiageClose() { + this.setData({ showdiage: false }); + }, + showdiagePopup(e) { + console.log(e); + let pathid=e.currentTarget.id; + + this.setData({ showdiage: true,pathid:pathid }); + + + }, + getacctoken: function () { + const that = this; + let url = Apps.globalData.baseUrl + '/user/acctoken'; + var param = { + pareid: '1213' + }; + //此处为使用封装的post请求 + util.get(url, param).then((res) => { + + wx.setStorageSync('accesstoen', res.access_token) + that.setData({ + accesstoken: res.access_token + }); + + }).catch((errMsg) => { + console.log(errMsg); + }); + }, + /** + * 生命周期函数--监听页面卸载 + */ + onUnload: function () { + + }, + + /** + * 页面相关事件处理函数--监听用户下拉动作 + */ + onPullDownRefresh: function () { + + }, + + /** + * 页面上拉触底事件的处理函数 + */ + onReachBottom: function () { + + }, + + /** + * 用户点击右上角分享 + */ + onShareAppMessage: function () { + + }, + exithaveclass:function (params) { + + const that = this; + wx.showModal({ + title: '退出提示', + content: '您将退出该班级', + cancelText: '退出', + confirmText: '确认', + success: function (res) { + if (res.cancel) { + //这个跳转是左边按钮的跳转链接 + //这里取消操作 + console.log(res); + + } else { + that.proexitexam(params); + } + + } + }) + + }, + proexitexam:function(params){ + + console.log(params.currentTarget.id); + const id=params.currentTarget.id; + const that = this; + let url = Apps.globalData.baseUrl + '/indexclass/exitindexclasslist'; + var param = { + id:id, + user_id:wx.getStorageSync('wxuserid') + }; + //此处为使用封装的post请求 + util.get(url, param).then((res) => { + console.log(res); + wx.reLaunch({ + url: '/pages/indexsq/indexsq', + }) + + }).catch((errMsg) => { + console.log(errMsg); + }); + }, + haveindexclassuser: function (par) { + + const that = this; + let url = Apps.globalData.baseUrl + '/indexclass/haveindexclasslist'; + var param = { + id: par, + user_id:wx.getStorageSync('wxuserid') + }; + //此处为使用封装的post请求 + util.get(url, param).then((res) => { + console.log("232222222222222"); + console.log(res); + that.setData({ + userctive: res + }); + + }).catch((errMsg) => { + console.log(errMsg); + }); + }, + getpaper:function(params) { + const that = this; + let url = Apps.globalData.baseUrl + '/indexclass/indexclassfind'; + var param = { + id: params + }; + //此处为使用封装的post请求 + util.get(url, param).then((res) => { + console.log('res=================='); + console.log(res); + that.setData({ + itemdata: res.data + }); + + }).catch((errMsg) => { + console.log(errMsg); + }); + }, + jonclass1:function(par){ + console.log("跳转"); + console.log(par.currentTarget.dataset.money); + let money=par.currentTarget.dataset.money; + console.log(par.currentTarget.id); + let payid=par.currentTarget.id; + this.setData({ + showdiage: true, + payid:payid, + totalmoney:money + }); + }, + payclassmoney:function(e){ + //微信支付 + console.log("微信支付"); + console.log(this.data.payid); + this.payorderclick(this.data.payid,this.data.totalmoney); + }, + payorderclick: function (id,money) { + + + const that = this; + let url = Apps.globalData.baseUrl + '/wxpay/makerorder'; + var param = { + id: id, + openid: wx.getStorageSync('wxopenid'), + paytypeid: 3, //加入班级 + user_id: wx.getStorageSync('wxuserid') == null ? 3 : wx.getStorageSync('wxuserid'), + vipsmonth: money + }; + //此处为使用封装的post请求 + util.post(url, param).then((res) => { + console.log(res); + var rest = res; + // var orders = res.data.orders; + // 调用支付接口开始 + wx.requestPayment({ + timeStamp: rest.timeStamp, + nonceStr: rest.nonceStr, + package: rest.package, + signType: rest.signType, + paySign: rest.paySign, + success: function (res) { + + wx.setStorage("jmparm",2); + wx.reLaunch({ + url: '/pages/indexsq/indexsq', + }) + }, + fail: function (res) { + console.log(res) + }, + complete: function (res) { + console.log(res) + }, + }) + + }).catch((errMsg) => { + console.log(errMsg); + }); + }, + jonclass:function(params) { + //加入学习 + console.log(params.currentTarget.id); + const that = this; + let url = Apps.globalData.baseUrl + '/indexclass/addindexclasslist'; + var param = { + id: params.currentTarget.id, + user_id:wx.getStorageSync('wxuserid') + }; + //此处为使用封装的post请求 + util.get(url, param).then((res) => { + console.log('res=================='); + console.log(res); + + if(res>0){ + wx.setStorageSync('jmparm', 2); + wx.reLaunch({ + url: '/pages/indexsq/indexsq', + }) + } + + }).catch((errMsg) => { + console.log(errMsg); + }); + }, + examingbtnclick:function (params) { + + wx.navigateTo({ + url: '/pages/indexclass/indexclass?id='+params.currentTarget.id + }) + } +}) \ No newline at end of file diff --git a/pages/indexclassintro/indexclassintro.json b/pages/indexclassintro/indexclassintro.json new file mode 100644 index 0000000..8a2c056 --- /dev/null +++ b/pages/indexclassintro/indexclassintro.json @@ -0,0 +1,5 @@ +{ + "usingComponents": {}, + "enablePullDownRefresh":true, + "navigationBarTitleText": "班级介绍" + } \ No newline at end of file diff --git a/pages/indexclassintro/indexclassintro.wxml b/pages/indexclassintro/indexclassintro.wxml new file mode 100644 index 0000000..10c4acd --- /dev/null +++ b/pages/indexclassintro/indexclassintro.wxml @@ -0,0 +1,54 @@ + + + + + + + + {{item.name}} + + + + + 报名时间: {{item.bmclass}} + + + 开班时间: {{item.startclass}} + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/pages/indexclassintro/indexclassintro.wxss b/pages/indexclassintro/indexclassintro.wxss new file mode 100644 index 0000000..15bde82 --- /dev/null +++ b/pages/indexclassintro/indexclassintro.wxss @@ -0,0 +1,564 @@ +/* pages/indexsq/indexsq.wxss */ +.courselive { + width: 750rpx; + height: 403rpx; +} + +.functionalarea { + display: flex; + flex-flow: row wrap; + align-content: flex-start; + width: 750rpx; + height: 550rpx; +} + +.areaitem { + margin-top: 60rpx; + text-align: center; + width: 33%; + height: 170rpx; +} + +.areaitem image { + width: 120rpx; + height: 170rpx; +} + +.messagearea text { + + display: block; + font-size: 40rpx; + font-weight: 600rpx; + margin-left: 60rpx; +} + +.msseagehead { + display: flex; + flex-direction: row; +} + +.headleft { + margin-left: 60rpx; + margin-top: 50rpx; + width: 140rpx; + height: 140rpx; + border-radius: 50%; + overflow: hidden; +} + +.headleft image { + + width: 130rpx; + height: 133rpx; +} + +.headright { + margin-top: 80rpx; + margin-left: 23rpx; + width: 200rpx; + height: 142rpx; +} + +.headrightup text { + + font-size: 30rpx; + font-weight: 400rpx; +} + +.headrightdown { + font-size: 30rpx; + margin-top: 10rpx; +} + +.msseagemiddle { + margin: 0 60rpx; +} + +.mssagemiddledown { + margin: 25rpx auto; +} + +.mssagemiddledown image { + + width: 100%; + height: 265rpx; +} + +.mssagemiddledownone image { + width: 100%; +} + +.messageend { + + margin: 0 60rpx; + display: flex; + flex-direction: row; + justify-content: space-between; + +} + +.messageendleft { + width: 150rpx; + height: 30rpx; +} + +.messageendleft image { + width: 100rpx; + height: 30rpx; +} + +.messageendmiddle { + width: 150rpx; + height: 30rpx; +} + +.messageendmiddle image { + width: 35rpx; + height: 30rpx; +} + +.messageendmiddle text { + + font-size: 28rpx; + padding-left: 23rpx; +} + +.messageendright { + + width: 150rpx; + height: 30rpx; +} + +.messageendright image { + width: 35rpx; + height: 30rpx; + +} + +.messageendright text { + + font-size: 28rpx; + padding-left: 23rpx; +} + +.feigexian { + + margin: 0 60rpx; + margin-top: 60rpx; + border-bottom: 2rpx solid #ada2a2; +} + +.areaclass { + + width: 540rpx; + height: 193rpx; + margin: 0 auto; + margin-top: 80rpx; + background-color: #f0f0f1; + border-radius: 5%; +} + +.areafooter { + display: flex; + align-items: center; + justify-content: space-between; + width: 540rpx; + height: 60rpx; + margin: 0 auto; + margin-top: 10rpx; +} + +.areafooterleft image { + + width: 26rpx; + height: 26rpx; + +} + +.areafooterright text { + font-size: 28rpx; + font-weight: 600; + color: #217ced; +} + +.vipimage image { + width: 37rpx; + height: 33rpx; + position: relative; + left: -32rpx; + top: 148rpx; +} + +/* 社区头部 */ +.communityhead { + width: 695rpx; + height: 210rpx; + margin: 0 auto; + display: flex; + flex-direction: row; + justify-content: flex-start; + align-items: center; + background: url('https://ndnd.duiduiedu.com/uploads/pics/communtlistheadleft.png') no-repeat; + background-size: 100% 100%; +} + +.communityheadleft { + width: 680rpx; + height: 210rpx; + display: flex; + flex-direction: row; + justify-content: space-between; + align-items: center; +} + +.communityheadright { + width: 232rpx; + height: 206rpx; + margin-left: 40rpx; +} + +.communityheadrightup { + width: 240rpx; + height: 80rpx; + margin-top: 20rpx; +} + +.communityheadrightup image { + width: 240rpx; + height: 80rpx; +} + +.communityheadrightdown { + width: 240rpx; + height: 80rpx; + margin-top: 20rpx; +} + +.communityheadrightdown image { + width: 240rpx; + height: 80rpx; +} + +.communityheadleftitem1 { + width: 550rpx; + margin-left: 65rpx; + display: flex; + flex-direction: column; + justify-content: left; + align-items: left; +} + +.communityheadleftitem2 { + width: 100rpx; + height: 210rpx; +} + +.communityheadleftitem2 image { + width: 100rpx; + height: 210rpx; +} + +.messageitem { + width: 400rpx; + height: 38rpx; + border: 1rpx solid #1ccfd6; + color: #1ccfd6; + margin-left: 40rpx; + margin-bottom: 10rpx; + text-align: left; + overflow: hidden; +} + +/* 社区头部 */ + +/* 社区滑动 */ +.curriculumup { + width: 680rpx; + height: 55rpx; + margin: 0 auto; + margin-top: 40rpx; +} + +.curriculumupstart { + float: left; + width: 680rpx; + height: 55rpx; +} + +.curriculumupend { + float: left; + width: 50rpx; + height: 50rpx; +} + +.scroll-box { + white-space: nowrap; + height: 100%; +} + +.card-box { + display: inline-block; + margin-right: 10rpx; +} + +.card image { + height: 55rpx; + line-height: 55rpx; + width: 211rpx; +} + +.lineclass { + width: 685rpx; + margin: 2rpx auto; + border-bottom: 1rpx solid #dcdcdc; +} + +/* 社区滑动 */ + + + +/* 补充留言信息右边 */ + +.header_view_hide { + display: none; +} + +.header_view_show { + display: block; +} + +.round-click { + height: 61rpx; + width: 54rpx; + position: fixed; + bottom: 150rpx; + right: 20rpx; + display: flex; + align-items: center; + justify-content: center; + z-index: 9; +} + +.round-click image { + height: 61rpx; + line-height: 61rpx; + width: 54rpx; +} + +.areaclass { + width: 540rpx; + min-height: 300rpx; + margin: 0 auto; + margin-top: 80rpx; + background-color: #f0f0f1; + border-radius: 5%; +} + +.areaclass textarea { + width: 540rpx; + min-height: 300rpx; +} + + +.areafooter { + display: flex; + align-items: center; + justify-content: space-between; + width: 540rpx; + height: 60rpx; + margin: 0 auto; + margin-top: 10rpx; +} + +.areafooterleft image { + + width: 52rpx; + height: 52rpx; + +} + +.areafooterright text { + font-size: 28rpx; + font-weight: 600; + color: #217ced; +} + +.areafooterright { + width: 120rpx; + height: 56rpx; +} + +.areafooterright button { + + width: 120rpx; + height: 50rpx; + line-height: 50rpx; + font-size: 28rpx; + font-weight: 600; + color: #217ced; + border: none; +} + + +.challenge { + + width: 666rpx; + margin: 0 auto; + margin-top: 35rpx; + margin-bottom: 15rpx; + height: 83rpx; +} + +.challengeleft { + + float: left; + width: 429rpx; + height: 80rpx; + +} + +.challengeleft image { + + width: 440rpx; + height: 80rpx; +} + +.challengeright { + + float: left; + width: 238rpx; + height: 80rpx; +} + +.challengeright image { + + width: 240rpx; + height: 80rpx; +} + + +.challenge2 { + + width: 666rpx; + margin: 0 auto; + margin-top: 35rpx; + margin-bottom: 15rpx; + height: 83rpx; +} + +.challenge2left { + + float: left; + + width: 238rpx; + height: 80rpx; + +} + +.challenge2left image { + + + width: 253rpx; + height: 80rpx; +} + +.challenge2right { + float: left; + width: 429rpx; + height: 80rpx; +} + +.challenge2right image { + + width: 432rpx; + height: 80rpx; +} + +.examitemlist { + display: flex; + flex-direction: row; + align-items: center; + width: 690rpx; + height: 142rpx; + margin: 0 auto; + margin-top: 28rpx; + background-color: #f0f0f0; + background: url('https://ndnd.duiduiedu.com/uploads/pics/classintro.png') no-repeat; + background-size: 100% 100%; +} + +.itemleft image { + + margin: 10rpx 40rpx; + width: 106rpx; + height: 95rpx; +} + +.itemright { + display: flex; + width: 500rpx; + justify-items: center; + align-items: left; +} + +.itemright text { + margin-left: 60rpx; + font-size: 40rpx; + font-weight: 400; +} + +.bmclass { + display: flex; + flex-direction: column; + justify-content: center; + align-items: left; + width: 690rpx; + height: 88rpx; + margin: 20rpx auto; + background-color: #E2FEFF; + border-radius: 10%; +} + +.bmclass text { + + margin-left: 30rpx; + color: #1CCFD6; + font-size: 35rpx; + font-weight: 400; +} + +.kbclass { + display: flex; + flex-direction: column; + justify-content: center; + align-items: left; + width: 690rpx; + height: 88rpx; + margin: 20rpx auto; + background-color: #E2FEFF; + border-radius: 10%; +} + +.kbclass text { + + margin-left: 30rpx; + color: #1CCFD6; + font-size: 35rpx; + font-weight: 400; +} + +.bmclassselect{ + display: flex; + flex-direction: column; + justify-content: center; + align-items: left; + width: 690rpx; + height: 123rpx; + margin: 20rpx auto; +} + +.bmclassselect image{ + + width: 690rpx; + height: 123rpx; +} \ No newline at end of file diff --git a/pages/indexclassres/indexclassres.js b/pages/indexclassres/indexclassres.js new file mode 100644 index 0000000..dabdf5b --- /dev/null +++ b/pages/indexclassres/indexclassres.js @@ -0,0 +1,195 @@ +const DEFAULT_PAGE = 0; +const baseUrl = getApp(); +const api = require('../../config/api.js'); +const util = require('../../config/util.js'); +import Toast from '../../miniprogram_npm/@vant/weapp/toast/toast'; +Page({ + + /** + * 页面的初始数据 + */ + data: { + startPageX: 0, + currentView: DEFAULT_PAGE, + baseurl: baseUrl.globalData.baseimgurl, + movies: [], + active: 1, + challengeactive: 1, + toView: `card_${DEFAULT_PAGE}`, + list: [], + itemdata: [], + resfiles_id: 1, + pathid: "", + showdiage: false, + indexclassrestype_id:0, + classid:0, + classname:'' + }, + getclasstypename:function(classid){ + //班级类型名称 + const that = this; + let url = baseUrl.globalData.baseUrl + '/indexclassres/getindexclassname'; + var param = { + classid: classid + }; + //此处为使用封装的post请求 + util.get(url, param).then((res) => { + console.log(res); + that.setData({ + classname: res.data + }); + wx.setNavigationBarTitle({ + title: res.data}) + + }).catch((errMsg) => { + console.log(errMsg); + }); + }, + getpaperattrlist: function (params,indexclassrestype_id) { + const that = this; + let url = baseUrl.globalData.baseUrl + '/indexclassres/getindexclassreslist'; + var param = { + classid: params, + indexclassrestype_id:indexclassrestype_id + }; + //此处为使用封装的post请求 + util.get(url, param).then((res) => { + console.log(res); + that.setData({ + itemdata: res.data + }); + + }).catch((errMsg) => { + console.log(errMsg); + }); + }, + + /** + * 生命周期函数--监听页面加载 + */ + onLoad: function (options) { + console.log(options); + this.setData({ + classid: options.classid, + indexclassrestype_id:options.indexclassrestype_id + }) + + }, + onshowdiageClose() { + console.log('324323222222') + this.setData({ + showdiage: false + }); + console.log(this.data.showdiage) + }, + downfilepoto: function (knowfiles) { + + // let files = knowfiles.currentTarget.id; + let files = this.data.pathid + wx.downloadFile({ + url: files, + success(res) { + wx.openDocument({ + filePath: res.tempFilePath, + showMenu: true, //关键点 + success() { + } + }) + } + }) + }, + downfile: function (knowfiles) { + + let files = this.data.pathid;// knowfiles.currentTarget.id; + + wx.downloadFile({ + url: files, + success(res) { + + wx.shareFileMessage({ + filePath: res.tempFilePath, + success() { }, + fail: console.error, + }) + + } + }) + }, + showdiagePopup(e) { + console.log(e); + let pathid = e.currentTarget.id; + + let files = pathid; // knowfiles.currentTarget.id; + if (files.length == 0) { + + wx.showToast({ + title: '暂时还没有讲义,不可下载',//提示文字 + duration: 2000,//显示时长 + mask: true,//是否显示透明蒙层,防止触摸穿透,默认:false + icon: 'none', //图标,支持"success"、"loading" + success: function () { + return; + },//接口调用成功 + fail: function () { }, //接口调用失败的回调函数 + complete: function () { } //接口调用结束的回调函数 + }) + } else { + this.setData({ showdiage: true, pathid: pathid }); + } + + }, + + /** + * 生命周期函数--监听页面初次渲染完成 + */ + onReady: function () { + + }, + + /** + * 生命周期函数--监听页面显示 + */ + onShow: function () { + + this.getclasstypename(this.data.indexclassrestype_id); + this.getpaperattrlist(this.data.classid,this.data.indexclassrestype_id); + console.log("this.data.classname========") + console.log(this.data.classname) + + }, + + /** + * 生命周期函数--监听页面隐藏 + */ + onHide: function () { + + }, + + /** + * 生命周期函数--监听页面卸载 + */ + onUnload: function () { + + }, + + /** + * 页面相关事件处理函数--监听用户下拉动作 + */ + onPullDownRefresh: function () { + + }, + + /** + * 页面上拉触底事件的处理函数 + */ + onReachBottom: function () { + + }, + + /** + * 用户点击右上角分享 + */ + onShareAppMessage: function () { + + }, +}) \ No newline at end of file diff --git a/pages/indexclassres/indexclassres.json b/pages/indexclassres/indexclassres.json new file mode 100644 index 0000000..ef4e026 --- /dev/null +++ b/pages/indexclassres/indexclassres.json @@ -0,0 +1,8 @@ +{ + "usingComponents": {}, + "navigationBarBackgroundColor": "#fff", + "navigationBarTextStyle": "black", + "navigationBarTitleText": "资料下载", + "backgroundColor": "#ccc", + "backgroundTextStyle": "light" + } \ No newline at end of file diff --git a/pages/indexclassres/indexclassres.wxml b/pages/indexclassres/indexclassres.wxml new file mode 100644 index 0000000..5f52961 --- /dev/null +++ b/pages/indexclassres/indexclassres.wxml @@ -0,0 +1,27 @@ + + + + + + + + {{item.name}} + + + + + + + + + + + + + + + + + + + diff --git a/pages/indexclassres/indexclassres.wxss b/pages/indexclassres/indexclassres.wxss new file mode 100644 index 0000000..826752b --- /dev/null +++ b/pages/indexclassres/indexclassres.wxss @@ -0,0 +1,109 @@ +.curriculumup { + width: 680rpx; + height: 55rpx; + margin: 0 auto; + margin-top: 40rpx; +} + +.curriculumupstart { + float: left; + width: 680rpx; + height: 55rpx; +} + +.curriculumupend { + float: left; + width: 50rpx; + height: 50rpx; +} + +.scroll-box { + white-space: nowrap; + height: 100%; +} + +.card-box { + display: inline-block; + margin-right: 10rpx; +} + +.card image { + height: 55rpx; + line-height: 55rpx; + width: 211rpx; +} + +.lineclass { + width: 685rpx; + margin: 30rpx auto; + border-bottom: 1rpx solid #dcdcdc; +} + +.itemdataclass { + display: flex; + flex-direction: column; + align-items: flex-start; + width: 680rpx; + height: 200rpx; + margin: 0 auto; + margin-top: 20rpx; + background-color: #f0f0f0; + border-radius: 15rpx; +} + +.item1 { + display: flex; + flex-direction: row; + justify-content: flex-start; + align-items: center; + height: 103rpx; + +} + +.item1up image { + width: 45rpx; + height: 45rpx; + margin-left: 30rpx; + margin-top: 20rpx; +} + +.item1down text { + margin-left: 20rpx; + margin-top: 20rpx; + font-size: 30rpx; + font-weight: 400; +} + +.item2donw image { + margin-left: 10rpx; + margin-top: 20rpx; + width: 272rpx; + height: 55rpx; +} + +.item3 { + width: 80rpx; + margin-right: 35rpx; +} + +.item3 text { + font-size: 30rpx; + font-weight: 400; +} + +.item4 { + margin-right: 50rpx; +} + +.item4 image { + width: 38rpx; + height: 38rpx; +} + +.line_02 { + height: 1px; + border-top: 1px solid #ddd; + text-align: center; + width: 370px; + margin: 0 auto; +} \ No newline at end of file diff --git a/pages/indexclasssubwork/indexclasssubwork.js b/pages/indexclasssubwork/indexclasssubwork.js new file mode 100644 index 0000000..bf485fe --- /dev/null +++ b/pages/indexclasssubwork/indexclasssubwork.js @@ -0,0 +1,649 @@ +const DEFAULT_PAGE = 0; +const Apps = getApp(); +const api = require('../../config/api.js'); +const util = require('../../config/util.js'); +Page({ + + /** + * 页面的初始数据 + */ + data: { + baseurl: Apps.globalData.baseimgurl, + messagelist: [], + startPageX: 0, + currentView: DEFAULT_PAGE, + imagecount: 4, + indeximagecount: 4, + active: 1, + challengeactive: 1, + toView: `card_${DEFAULT_PAGE}`, + list: [], + replylist: [], + replylist1: [], + imageslists: [], //图片预览 + showview: false, + upload_picture_list: [], + imagesListp: [], + imagestr: [], + id: 1, + accesstoken: '', + typeid: wx.getStorageSync('jmparm') == null ? 1 : wx.getStorageSync('jmparm'), + page: 1, //页面数, + pagecount: 0, + classintorgg:[], + classid:0 + + }, + + /** + * 生命周期函数--监听页面加载 + */ + onLoad: function (options) { + console.log("=-=options=-=-=-=-=========----------"); + console.log(options); + if (options.id > 0) { + this.setData({ + active: options.id == '' ? 1 : options.id, + page: 1, + typeid: wx.getStorageSync('jmparm'), + classid:options.id + }) + } + + }, + displayview: function () { + wx.navigateTo({ + url: '/pages/indexcreatewordssubwork/indexcreatewordssubwork?typeid=' + this.data.classid, + }) + + }, contentclick: function (params) { + + let id = params.currentTarget.id; + let xid = params.currentTarget.dataset.xid; + + this.setData({ + wordstextname: '@' + id + }); + + this.addinccomment(xid) + wx.showToast({ + title: '@成功,请移底部留言',//提示文字 + duration: 2000,//显示时长 + mask: true,//是否显示透明蒙层,防止触摸穿透,默认:false + icon: 'success', //图标,支持"success"、"loading" + success: function () { },//接口调用成功 + fail: function () { }, //接口调用失败的回调函数 + complete: function () { } //接口调用结束的回调函数 + }) + + // this.pageScrollToBottom(); + + }, addinccomment: function (params) { + //增加评论数 + console.log(params); + let userid = wx.getStorageSync('wxuserid'); + const that = this; + let url = Apps.globalData.baseUrl + '/indexclasslist/addcommentrepycount'; + var param = { + id: params, + userid: userid + }; + //此处为使用封装的post请求 + util.get(url, param).then((res) => { + console.log(res); + // this.wrodtypelist(this.data.courseid) + + }).catch((errMsg) => { + console.log(errMsg); + }); + }, + // pageScrollToBottom() { + // wx.createSelectorQuery().select('#time-mo').boundingClientRect(function (rect) { + + // // rect.id // 节点的ID + // rect.dataset // 节点的dataset + // rect.left // 节点的左边界坐标 + // rect.right // 节点的右边界坐标 + // rect.top // 节点的上边界坐标 + // rect.bottom // 节点的下边界坐标 + // rect.width // 节点的宽度 + // rect.height + // console.log(rect.bottom*15) + // console.log(rect.bottom) + // // 使页面滚动到底部 + // wx.pageScrollTo({ + // scrollTop: rect.bottom*15 + // }) + // }).exec() + // }, + + /** + * 生命周期函数--监听页面初次渲染完成 + */ + onReady: function () { + + }, + + /** + * 生命周期函数--监听页面显示 + */ + onShow: function () { + Apps.islogin(); + this.setData({ + active: wx.getStorageSync('jmparm') == '' ? 1 : wx.getStorageSync('jmparm'), + typeid: wx.getStorageSync('jmparm') == '' ? 1 : wx.getStorageSync('jmparm') + }) + //头部消息 + this.msglist(); + //留言类型 + this.wrodtypelist(); + //回复留言列表 + this.getwords(); + this.getclassintro(this.data.active); + }, + + /** + * 生命周期函数--监听页面隐藏 + */ + onHide: function () { + + }, + getacctoken: function () { + const that = this; + let url = Apps.globalData.baseUrl + '/user/acctoken'; + var param = { + pareid: '1213' + }; + //此处为使用封装的post请求 + util.get(url, param).then((res) => { + + wx.setStorageSync('accesstoen', res.access_token) + that.setData({ + accesstoken: res.access_token + }); + + }).catch((errMsg) => { + console.log(errMsg); + }); + }, + /** + * 生命周期函数--监听页面卸载 + */ + onUnload: function () { + + }, + + /** + * 页面相关事件处理函数--监听用户下拉动作 + */ + onPullDownRefresh: function () { + + }, + + /** + * 页面上拉触底事件的处理函数 + */ + onReachBottom: function () { + + }, + + /** + * 用户点击右上角分享 + */ + onShareAppMessage: function () { + + }, + touchStart(e) { + this.startPageX = e.changedTouches[0].pageX; + }, + touchEnd(e) { + + const moveX = e.changedTouches[0].pageX - this.startPageX; + const maxPage = this.data.list.length - 1; + if (Math.abs(moveX) >= 150) { + if (moveX > 0) { + this.currentView = this.currentView !== 0 ? this.currentView - 1 : 0; + } else { + this.currentView = this.currentView !== maxPage ? this.currentView + 1 : maxPage; + } + } + this.setData({ + toView: `card_${this.currentView}` + }); + }, + touchecard(e) { + + wx.setStorageSync('jmparm', e.currentTarget.id); + this.setData({ + active: e.currentTarget.id, + typeid: e.currentTarget.id + }) + this.getwords(); + }, + duizhiticlick: function () { + wx.navigateTo({ + url: '/pages/allpapers/allpapers', + }) + }, + messagelistclick: function () { + wx.navigateTo({ + url: '/pages/messagelist/messagelist', + }) + }, + communityinfoclick: function (e) { + + // wx.navigateTo({ + // url: '/pages/communityinfo/communityinfo?id=' + e.currentTarget.id, + // }) + }, + communityinfocommentclick: function (e) { + + wx.navigateTo({ + //communityinfocomment + url: '/pages/communityinfo/communityinfo?id=' + e.currentTarget.id + '&jztype=2', + }) + }, + messagelistclick: function (e) { + //资讯列表分类 + wx.navigateTo({ + url: '/pages/messagelist/messagelist?typeid=' + e.currentTarget.id, + }) + }, + messageclick: function (e) { + wx.navigateTo({ + url: '/pages/messageencyclopedias/messageencyclopedias?id=' + e.currentTarget.id, + }) + }, + msglist: function () { + + const that = this; + let url = Apps.globalData.baseUrl + '/msglist/msgindexlist'; + var param = { + id: '123456789' + }; + //此处为使用封装的post请求 + util.get(url, param).then((res) => { + console.log(res); + that.setData({ + messagelist: res.data.sort() + + }); + + }).catch((errMsg) => { + console.log(errMsg); + }); + }, + wrodtypelist: function () { + + const that = this; + let url = Apps.globalData.baseUrl + '/indexclass/getindexclasstype'; + var param = { + id: '123456789' + }; + //此处为使用封装的post请求 + util.get(url, param).then((res) => { + that.setData({ + list: res.data, + active: this.data.active + }); + + }).catch((errMsg) => { + console.log(errMsg); + }); + }, + getwordspics: function (id) { + //得到单个信息图片数 + const that = this; + let url = Apps.globalData.baseUrl + '/indexclasslist/getwordssingle'; + var param = { + id: id + }; + //此处为使用封装的post请求 + util.get(url, param).then((res) => { + + console.log(res.data.pics); + that.setData({ + imageslists: res.data.pics, + }); + + }).catch((errMsg) => { + console.log(errMsg); + }); + }, + getclassintro:function(params) { + //得到用户公告 + const that = this; + let url = Apps.globalData.baseUrl + '/indexclasslist/getclassgg'; + var param = { + classid: params + }; + //此处为使用封装的post请求 + util.get(url, param).then((res) => { + console.log(res); + let counts = res.data.length; + that.setData({ + classintorgg: res.data + }); + + }).catch((errMsg) => { + console.log(errMsg); + }); + }, + getwords: function () { + + const that = this; + let url = Apps.globalData.baseUrl + '/indexclasslistsubwork/getwords'; + var param = { + typeid: that.data.classid, + page: that.data.page, + user_id: wx.getStorageSync('wxuserid') + }; + //此处为使用封装的post请求 + util.get(url, param).then((res) => { + console.log(res); + let counts = res.data.length; + that.setData({ + replylist: res.data, + replylist1: res.data, + pagecount: counts == 0 ? 1 : counts + }); + + }).catch((errMsg) => { + console.log(errMsg); + }); + }, + wordsclick: function (ee) { + + let e1 = ee.currentTarget.id; + let e2 = wx.getStorageSync('wxuserid'); + const that = this; + let url = Apps.globalData.baseUrl + '/indexclasslistsubwork/wordsclickcount'; + var param = { + words_id: e1, + user_id: e2, + }; + //此处为使用封装的post请求 + util.get(url, param).then((res) => { + + //头部消息 + that.msglist(); + //留言类型 + that.wrodtypelist(); + that.getwords(); + + }).catch((errMsg) => { + console.log(errMsg); + }); + }, + bindTextAreaBlur: function (e) { + this.setData({ + wordstextname: e.detail.value + }) + }, + preview: function (params) { + let that = this; + let currentUrl = params.currentTarget.dataset.src; + let arrindex = params.currentTarget.dataset.id; + let picsid = params.currentTarget.dataset.pics; //单条信息ID + + // that.getwordspics(picsid); //得到单条信息图片 + console.log(that.data.replylist[picsid]); + let rearr = that.data.replylist[picsid].pics; + let arr = []; + rearr.forEach(function (item, index) { + arr[index] = that.data.baseurl + item + }); + console.log('-----'); + console.log(arr); + + wx.previewImage({ + current: currentUrl, // 当前显示图片的http链接 + urls: arr // 需要预览的图片http链接列表 + }) + }, + + preview1: function (params) { + let that = this; + let currentUrl = params.currentTarget.dataset.src; + let arrindex = params.currentTarget.dataset.id; + let picsid = params.currentTarget.dataset.pics; //单条信息ID + + // that.getwordspics(picsid); //得到单条信息图片 + console.log(that.data.replylist1[picsid]); + let rearr = that.data.replylist1[picsid].replyimages; + let arr = []; + rearr.forEach(function (item, index) { + arr[index] = that.data.baseurl + item + }); + console.log('-----'); + console.log(arr); + + wx.previewImage({ + current: currentUrl, // 当前显示图片的http链接 + urls: arr // 需要预览的图片http链接列表 + }) + }, + getmsgcheck: function (params, accesstoken) { + // $url ='https://api.weixin.qq.com/wxa/msg_sec_check?access_token=' .$accessToken; + const that = this; + // let url = 'https://api.weixin.qq.com/wxa/msg_sec_check?access_token='+wx.getStorageSync('accesstoen'); + let url = Apps.globalData.baseUrl + '/user/checkmsg' + var param = { + "openid": wx.getStorageSync('wxopenid'), + "scene": 2, + "version": 2, + "content": params, + "access_token": wx.getStorageSync('accesstoen') + }; + //此处为使用封装的post请求 + util.post(url, param).then((res) => { + + console.log(res); + console.log(res.errcode); + if (res.errcode == "0") { + that.wordsadd(params, that.data.imagestr) + } else { + + wx.showToast({ + title: '留言内容有敏感词请重新输入',//提示文字 + duration: 2000,//显示时长 + mask: true,//是否显示透明蒙层,防止触摸穿透,默认:false + icon: 'none', //图标,支持"success"、"loading" + success: function () { },//接口调用成功 + fail: function () { }, //接口调用失败的回调函数 + complete: function () { } //接口调用结束的回调函数 + }) + } + + }).catch((errMsg) => { + console.log(errMsg); + }); + }, + uploadpic: function () { + var that = this; + let imagesList = []; + let maxSize = 1024 * 1024; + let maxLength = 6; + let flag = true; + wx.chooseImage({ + count: 9, //最多可以选择的图片总数 + sizeType: ['original', 'compressed'], // 可以指定是原图还是压缩图,默认二者都有 + sourceType: ['album', 'camera'], // 可以指定来源是相册还是相机,默认二者都有 + success: function (res) { + wx.showToast({ + title: '正在上传...', + icon: 'loading', + mask: true, + duration: 500 + }) + for (let i = 0; i < res.tempFiles.length; i++) { + if (res.tempFiles[i].size > maxSize) { + flag = false; + console.log(111) + wx.showModal({ + content: '图片太大,不允许上传', + showCancel: false, + success: function (res) { + if (res.confirm) { + console.log('用户点击确定') + } + } + }); + } + } + if (res.tempFiles.length > maxLength) { + console.log('222'); + wx.showModal({ + content: '最多能上传' + maxLength + '张图片', + showCancel: false, + success: function (res) { + if (res.confirm) { + console.log('确定'); + } + } + }) + } + if (flag == true && res.tempFiles.length <= maxLength) { + that.setData({ + imagesListp: res.tempFilePaths + }) + that.data.imagestr = []; + var arr = ''; + for (let i = 0; i < that.data.imagesListp.length; i++) { + wx.uploadFile({ + url: Apps.globalData.baseUrl + '/indexclasslistsubwork/uploadpics', + filePath: that.data.imagesListp[i], + name: 'file', + success: function (res) { + //打印 + console.log("------------响应数据:"); + console.log(res.data); + + var message = JSON.parse(res.data); + that.data.imagestr.push(message); + that.setData({ + imagestr: that.data.imagestr + }); + }, + }) + } + } + console.log(res); + }, + fail: function (res) { + console.log(res); + } + }) + + }, + wordsadd: function (content, imagestr) { + + const that = this; + let url = Apps.globalData.baseUrl + '/indexclasslistsubwork/wordsxqadd'; + var param = { + content: content, + imagestr: imagestr, + userid: wx.getStorageSync('wxuserid') == '' ? 3 : wx.getStorageSync('wxuserid'), + wordstype_ids: this.data.typeid + }; + //此处为使用封装的post请求 + util.post(url, param).then((res) => { + console.log(res.data); + if (res.data > 0) { + wx.showToast({ + title: '留言内容成功', + icon: 'none', + duration: 1500 + }) + this.getwords(); + + that.setData({ + wordstextname: '' + }) + + } + + }).catch((errMsg) => { + console.log(errMsg); + }); + }, + formSubmit: function (e) { + + this.getacctoken(); + let content = this.data.wordstextname; + console.log(content) + if (content == '') { + wx.showToast({ + title: '留言内容为空,请填写内容', + icon: 'none', + duration: 1500 + }) + return false; + } + this.getmsgcheck(content, this.data.accesstoken); + }, + // 触底加载 + onReachBottom: function () { + + this.setData({ + page: this.data.page + 1 + }) + let newpage = (this.data.page + 1); //页数触底加1 + console.log(newpage); + if (newpage * 10 >= this.data.pagecount) { + + wx.showToast({ + title: '触底了,没有可加载的数据了', + icon: 'none', + duration: 1500 + }) + + } else { + this.getwords(); + } + + }, + clickmyroom: function (params) { + console.log(params.currentTarget.id); + wx.navigateTo({ + url: '/pages/indexclasszx/indexclasszx?myclassid=' + params.currentTarget.id, + }) + }, + clickclassintro: function (params) { + + const id = params.currentTarget.id; + var urlpath=""; + if(id==1){ + urlpath="/pages/indexclassintro/indexclassintro?id="+id + console.log(urlpath); + wx.navigateTo({ + url: urlpath, + }) + }else if(id==2){ + urlpath="/pages/indexclassres/indexclassres?id="+id + console.log(urlpath); + wx.navigateTo({ + url: urlpath, + }) + }else if(id==3){ + urlpath="/pages/indexjobtask/indexjobtask?id="+id + console.log(urlpath); + wx.navigateTo({ + url: urlpath, + }) + }else if(id==4){ + urlpath="/pages/indexclassintro/indexclassintro?id="+id + console.log(urlpath); + wx.navigateTo({ + url: urlpath, + }) + }else if(id==5){ + urlpath="/pages/indexclasssubwork/indexclasssubwork?id="+id + console.log(urlpath); + wx.navigateTo({ + url: urlpath, + }) + } + + } +}) \ No newline at end of file diff --git a/pages/indexclasssubwork/indexclasssubwork.json b/pages/indexclasssubwork/indexclasssubwork.json new file mode 100644 index 0000000..0910ccf --- /dev/null +++ b/pages/indexclasssubwork/indexclasssubwork.json @@ -0,0 +1,8 @@ +{ + "usingComponents": {}, + "navigationBarBackgroundColor": "#fff", + "navigationBarTextStyle": "black", + "navigationBarTitleText": "班级", + "backgroundColor": "#ccc", + "backgroundTextStyle": "light" +} \ No newline at end of file diff --git a/pages/indexclasssubwork/indexclasssubwork.wxml b/pages/indexclasssubwork/indexclasssubwork.wxml new file mode 100644 index 0000000..1902a6e --- /dev/null +++ b/pages/indexclasssubwork/indexclasssubwork.wxml @@ -0,0 +1,124 @@ + + + + + + + + + + {{classintorgg['intro']}} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + {{item.userinfo['nickname']}} + + + {{item.times}} + + + + + + + + + + {{item.name}} + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + +
+ + + + + +
\ No newline at end of file diff --git a/pages/indexclasssubwork/indexclasssubwork.wxss b/pages/indexclasssubwork/indexclasssubwork.wxss new file mode 100644 index 0000000..9d0d1e8 --- /dev/null +++ b/pages/indexclasssubwork/indexclasssubwork.wxss @@ -0,0 +1,435 @@ +.courselive { + width: 750rpx; + height: 403rpx; +} + +.functionalarea { + display: flex; + flex-flow: row wrap; + align-content: flex-start; + width: 750rpx; + height: 550rpx; +} + +.areaitem { + margin-top: 60rpx; + text-align: center; + width: 33%; + height: 170rpx; +} + +.areaitem image { + width: 120rpx; + height: 170rpx; +} + +.messagearea text { + + display: block; + font-size: 40rpx; + font-weight: 600rpx; + margin-left: 60rpx; +} + +.msseagehead { + display: flex; + flex-direction: row; +} + +.headleft { + margin-left: 60rpx; + margin-top: 50rpx; + width: 140rpx; + height: 140rpx; + border-radius: 50%; + overflow: hidden; +} + +.headleft image { + + width: 130rpx; + height: 133rpx; +} + +.headright { + margin-top: 80rpx; + margin-left: 23rpx; + width: 200rpx; + height: 142rpx; +} + +.headrightup text { + + font-size: 30rpx; + font-weight: 400rpx; +} + +.headrightdown { + font-size: 30rpx; + margin-top: 10rpx; +} + +.msseagemiddle { + margin: 0 60rpx; +} + +.mssagemiddledown { + margin: 25rpx auto; +} + +.mssagemiddledown image { + + width: 100%; + height: 265rpx; +} + +.mssagemiddledownone image { + width: 100%; + } + +.messageend { + + margin: 0 60rpx; + display: flex; + flex-direction: row; + justify-content: space-between; + +} + +.messageendleft { + width: 150rpx; + height: 30rpx; +} + +.messageendleft image { + width: 100rpx; + height: 30rpx; +} + +.messageendmiddle { + width: 150rpx; + height: 30rpx; +} + +.messageendmiddle image { + width: 35rpx; + height: 30rpx; +} + +.messageendmiddle text { + + font-size: 28rpx; + padding-left: 23rpx; +} + +.messageendright { + + width: 150rpx; + height: 30rpx; +} + +.messageendright image { + width: 35rpx; + height: 30rpx; + +} + +.messageendright text { + + font-size: 28rpx; + padding-left: 23rpx; +} + +.feigexian { + + margin: 0 60rpx; + margin-top: 60rpx; + border-bottom: 2rpx solid #ada2a2; +} + +.areaclass { + + width: 540rpx; + height: 193rpx; + margin: 0 auto; + margin-top: 80rpx; + background-color: #f0f0f1; + border-radius: 5%; +} + +.areafooter { + display: flex; + align-items: center; + justify-content: space-between; + width: 540rpx; + height: 60rpx; + margin: 0 auto; + margin-top: 10rpx; +} + +.areafooterleft image { + + width: 26rpx; + height: 26rpx; + +} + +.areafooterright text { + font-size: 28rpx; + font-weight: 600; + color: #217ced; +} + +.vipimage image { + width: 37rpx; + height: 33rpx; + position: relative; + left: -32rpx; + top: 148rpx; +} + +/* 社区头部 */ +.communityhead { + + width: 690rpx; + height: 210rpx; + margin: 0 auto; + display: flex; + flex-direction: row; + justify-content: flex-start; + align-items: center; + display: none; +} + +.communityheadleft { + + width: 75rpx; + height: 195rpx; + background-size: 100% 100%; + display: flex; + flex-direction: row; + justify-content: space-between; + align-items: center; +} +.communityheadleft image{ + + width: 75rpx; + height: 195rpx; +} +.communityheadmiddle{ + width: 450rpx; + height: 195rpx; + border-radius: 5%; + margin-left:20rpx; + background-color: #D3FDFF; +} +.communityheadmiddle text{ + display: block; + color:#02BBC2; + font-size: 28rpx; + font-weight: 400; + padding-top:32rpx; + padding-left: 32rpx; +} + +.containerclass{ + + display: flex; + display: none; + flex-direction: row; + justify-content: space-between; + align-items: center; + margin: 0 auto; + width: 690rpx; + height: 180rpx; + margin-top:65rpx; + margin-bottom:50rpx; + border: 1rpx solid #d6cfcf; + border-radius: 2%; + box-shadow: 3px 3px 3px 3px rgb(236, 234, 234); +} +.containerclass image{ + margin-left: 20rpx; + width: 89rpx; + height: 108rpx; + margin-right: 20rpx; +} + +.communityheadright { + width: 140rpx; + height: 195rpx; + margin-left: 20rpx; +} +.communityheadright image { + width: 140rpx; + height: 195rpx; +} + +.communityheadleftitem1 { + width: 240rpx; + margin-left: 55rpx; + display: flex; + flex-direction: column; + justify-content: center; + align-items: center; +} + +.communityheadleftitem2 { + width: 80rpx; + height: 180rpx; +} + +.communityheadleftitem2 image { + width: 80rpx; + height: 175rpx; +} + +.messageitem { + width: 240rpx; + height: 38rpx; + /* border: 1rpx solid #1ccfd6; */ + color: #1ccfd6; + margin-bottom: 10rpx; + text-align: center; + overflow: hidden; +} + +/* 社区头部 */ + +/* 社区滑动 */ +.curriculumup { + width: 680rpx; + height: 55rpx; + margin: 0 auto; + margin-top: 40rpx; + display: none; +} + +.curriculumupstart { + float: left; + width: 680rpx; + height: 55rpx; +} + +.curriculumupend { + float: left; + width: 50rpx; + height: 50rpx; +} + +.scroll-box { + white-space: nowrap; + height: 100%; +} + +.card-box { + display: inline-block; + margin-right: 10rpx; +} + +.card image { + height: 55rpx; + line-height: 55rpx; + width: 211rpx; +} + +.lineclass { + width: 685rpx; + margin: 2rpx auto; + border-bottom: 1rpx solid #dcdcdc; +} + +/* 社区滑动 */ + +/* 补充留言信息右边 */ +.itemright { + width: 200rpx; + margin-top: 50rpx; + margin-left: 30rpx; + display: flex; + flex-direction: row; + justify-content: center; + align-items: center; +} + +.itemright image { + + margin-left: 10rpx; + width: 70rpx; + height: 35rpx; +} + +/* 补充留言信息右边 */ + +.header_view_hide{ + display: none; +} +.header_view_show{ + display: block; +} + +.round-click{ + height: 61rpx; + width: 54rpx; + position: fixed; + bottom: 150rpx; + right: 20rpx; + display: flex; + align-items: center; + justify-content: center; + z-index: 9; +} +.round-click image{ + height: 61rpx; + line-height: 61rpx; + width: 54rpx; +} + +.areaclass{ + width: 540rpx; + min-height: 300rpx; + margin: 0 auto; + margin-top: 80rpx; + background-color: #f0f0f1; + border-radius: 5%; +} +.areaclass textarea{ + width: 540rpx; + min-height: 300rpx; +} + + +.areafooter{ + display: flex; + align-items: center; + justify-content: space-between; + width: 540rpx; + height: 60rpx; + margin: 0 auto; + margin-top: 10rpx; +} +.areafooterleft image{ + + width: 52rpx; + height: 52rpx; + +} +.areafooterright text{ + font-size: 28rpx; + font-weight: 600; + color: #217ced; +} +.areafooterright{ + width: 120rpx; + height: 56rpx; +} +.areafooterright button{ + + width: 120rpx; + height: 50rpx; + line-height: 50rpx; + font-size: 28rpx; + font-weight: 600; + color: #217ced; + border:none; +} \ No newline at end of file diff --git a/pages/indexclasszx/indexclasszx.js b/pages/indexclasszx/indexclasszx.js new file mode 100644 index 0000000..065834e --- /dev/null +++ b/pages/indexclasszx/indexclasszx.js @@ -0,0 +1,395 @@ +const DEFAULT_PAGE = 0; +const Apps = getApp(); +const api = require('../../config/api.js'); +const util = require('../../config/util.js'); +Page({ + + /** + * 页面的初始数据 + */ + data: { + baseurl: Apps.globalData.baseimgurl, + messagelist: [], + startPageX: 0, + currentView: DEFAULT_PAGE, + imagecount: 4, + indeximagecount: 4, + active: 1, + challengeactive: 1, + toView: `card_${DEFAULT_PAGE}`, + list: [], + replylist: [], + imageslists: [], //图片预览 + showview: false, + upload_picture_list: [], + imagesListp: [], + imagestr: [], + id: 1, + accesstoken: '', + typeid: wx.getStorageSync('jmparm') == null ? 1 : wx.getStorageSync('jmparm'), + page: 1, //页面数, + pagecount: 0, + h: '00', + m: '00', + s: '00', + //存储计时器 + setInter: '', + num: 1, + resdata:[], //班级信息 + userlistdata:[], //用户数据 + usersingledata:[] + + }, + // 计时器 + queryTime() { + const that = this; + var hou = that.data.h; + var min = that.data.m; + var sec = that.data.s; + that.data.setInter = setInterval(function () { + sec++; + if (sec >= 60) { + sec = 0; + min++; + if (min >= 60) { + min = 0; + hou++; + that.setData({ + h: (hou < 10 ? '0' + min : min) + }); + } else { + that.setData({ + m: (min < 10 ? '0' + min : min) + }); + } + } else { + that.setData({ + s: (sec < 10 ? '0' + sec : sec) + }); + } + var numVal = that.data.num + 1; + that.setData({ num: numVal }); + // console.log('setInterval==' + that.data.num); + }, 1000) + }, + taskStart() { + this.queryTime() + }, + taskEnd() { + //清除计时器 即清除setInter + clearInterval(this.data.setInter) + }, + + /** + * 生命周期函数--监听页面加载 + */ + onLoad: function (options) { + + + if (options.length > 0) { + this.setData({ + active: options.id == '' ? 1 : options.id, + page: 1, + typeid: wx.getStorageSync('jmparm') + }) + } + + }, + displayview: function () { + wx.navigateTo({ + url: '/pages/createwords/createwords?typeid=' + this.data.typeid, + }) + + }, contentclick: function (params) { + + let id = params.currentTarget.id; + let xid = params.currentTarget.dataset.xid; + + this.setData({ + wordstextname: '@' + id + }); + + this.addinccomment(xid) + wx.showToast({ + title: '@成功,请移底部留言',//提示文字 + duration: 2000,//显示时长 + mask: true,//是否显示透明蒙层,防止触摸穿透,默认:false + icon: 'success', //图标,支持"success"、"loading" + success: function () { },//接口调用成功 + fail: function () { }, //接口调用失败的回调函数 + complete: function () { } //接口调用结束的回调函数 + }) + + // this.pageScrollToBottom(); + + }, addinccomment: function (params) { + //增加评论数 + console.log(params); + let userid = wx.getStorageSync('wxuserid'); + const that = this; + let url = Apps.globalData.baseUrl + '/wordslist/addcommentrepycount'; + var param = { + id: params, + userid: userid + }; + //此处为使用封装的post请求 + util.get(url, param).then((res) => { + console.log(res); + // this.wrodtypelist(this.data.courseid) + + }).catch((errMsg) => { + console.log(errMsg); + }); + }, + getroominfo:function(params) { + + const classid=this.data.active; + const that = this; + let url = Apps.globalData.baseUrl + '/indexstudyroom/getroomrennum'; + var param = { + classid: classid + }; + //此处为使用封装的post请求 + util.get(url, param).then((res) => { + console.log("res==================="); + console.log(res); + that.setData({ + resdata:res.data + }); + + }).catch((errMsg) => { + console.log(errMsg); + }); + + }, + addroomuser:function () { + //添加用户与自习室 + const classid=this.data.active; + const that = this; + let url = Apps.globalData.baseUrl + '/indexstudyroom/addroomuser'; + var param = { + classid: classid, + user_id: wx.getStorageSync('wxuserid') + }; + //此处为使用封装的post请求 + util.get(url, param).then((res) => { + console.log("res==================="); + console.log(res); + + }).catch((errMsg) => { + console.log(errMsg); + }); + + }, + updateroomusertime:function (parms) { + //更新停留时间 + const classid=this.data.active; + const that = this; + let url = Apps.globalData.baseUrl + '/indexstudyroom/updateroomusertime'; + var param = { + classid: classid, + user_id: wx.getStorageSync('wxuserid'), + times:parms + }; + //此处为使用封装的post请求 + util.get(url, param).then((res) => { + console.log("ssssssssssssssss==================="); + console.log(res); + + }).catch((errMsg) => { + console.log(errMsg); + }); + + }, + getroomuser:function(params) { + + //得到房间的用户 + //更新停留时间 + const classid=this.data.active; + const that = this; + let url = Apps.globalData.baseUrl + '/indexstudyroom/getroomuser'; + var param = { + classid: classid + }; + //此处为使用封装的post请求 + util.get(url, param).then((res) => { + console.log("aaaaaaaaaaaaaaa=================="); + console.log(res); + that.setData({ + userlistdata:res.data + }) + + }).catch((errMsg) => { + console.log(errMsg); + }); + }, + + + getroomsingleuser:function(params) { + + //得到房间的用户 + //更新停留时间 + const classid=this.data.active; + const that = this; + let url = Apps.globalData.baseUrl + '/indexstudyroom/getroomsingleuser'; + var param = { + classid: classid + }; + //此处为使用封装的post请求 + util.get(url, param).then((res) => { + console.log("aaaaaaaaaaaaaaa=================="); + console.log(res); + that.setData({ + usersingledata:res.data + }) + + }).catch((errMsg) => { + console.log(errMsg); + }); + }, + + /** + * 生命周期函数--监听页面初次渲染完成 + */ + onReady: function () { + + }, + + /** + * 生命周期函数--监听页面显示 + */ + onShow: function () { + this.taskStart(); + Apps.islogin(); + this.setData({ + active: wx.getStorageSync('jmparm') == '' ? 1 : wx.getStorageSync('jmparm'), + typeid: wx.getStorageSync('jmparm') == '' ? 1 : wx.getStorageSync('jmparm') + }) + // //头部消息 + // this.msglist(); + // //留言类型 + // this.wrodtypelist(); + // //回复留言列表 + // this.getwords(); + this.getroominfo(); //得到自习室的信息 + this.addroomuser(); //添加自习室 + this.getroomuser();// 得到用户数 + this.getroomsingleuser(); //得到最后一个用户信息 + }, + + /** + * 生命周期函数--监听页面隐藏 + */ + onHide: function () { + console.log("11111111111111111"); + this.taskEnd(); + }, + getacctoken: function () { + const that = this; + let url = Apps.globalData.baseUrl + '/user/acctoken'; + var param = { + pareid: '1213' + }; + //此处为使用封装的post请求 + util.get(url, param).then((res) => { + + wx.setStorageSync('accesstoen', res.access_token) + that.setData({ + accesstoken: res.access_token + }); + + }).catch((errMsg) => { + console.log(errMsg); + }); + }, + /** + * 生命周期函数--监听页面卸载 + */ + onUnload: function () { + console.log("22222222"); + console.log(this.data.num); + this.updateroomusertime(this.data.num); + //清除计时器 即清除setInter + clearInterval(this.data.setInter); + }, + + /** + * 页面相关事件处理函数--监听用户下拉动作 + */ + onPullDownRefresh: function () { + + }, + + /** + * 页面上拉触底事件的处理函数 + */ + onReachBottom: function () { + + }, + + /** + * 用户点击右上角分享 + */ + onShareAppMessage: function () { + + }, + touchStart(e) { + this.startPageX = e.changedTouches[0].pageX; + }, + touchEnd(e) { + + const moveX = e.changedTouches[0].pageX - this.startPageX; + const maxPage = this.data.list.length - 1; + if (Math.abs(moveX) >= 150) { + if (moveX > 0) { + this.currentView = this.currentView !== 0 ? this.currentView - 1 : 0; + } else { + this.currentView = this.currentView !== maxPage ? this.currentView + 1 : maxPage; + } + } + this.setData({ + toView: `card_${this.currentView}` + }); + }, + touchecard(e) { + + wx.setStorageSync('jmparm', e.currentTarget.id); + this.setData({ + active: e.currentTarget.id, + typeid: e.currentTarget.id + }) + this.getwords(); + }, + duizhiticlick: function () { + wx.navigateTo({ + url: '/pages/allpapers/allpapers', + }) + }, + messagelistclick: function () { + wx.navigateTo({ + url: '/pages/messagelist/messagelist', + }) + }, + + // 触底加载 + onReachBottom: function () { + + this.setData({ + page: this.data.page + 1 + }) + let newpage = (this.data.page + 1); //页数触底加1 + console.log(newpage); + if (newpage * 10 >= this.data.pagecount) { + + wx.showToast({ + title: '触底了,没有可加载的数据了', + icon: 'none', + duration: 1500 + }) + + } else { + this.getwords(); + } + + } +}) \ No newline at end of file diff --git a/pages/indexclasszx/indexclasszx.json b/pages/indexclasszx/indexclasszx.json new file mode 100644 index 0000000..b7e9443 --- /dev/null +++ b/pages/indexclasszx/indexclasszx.json @@ -0,0 +1,5 @@ +{ + "usingComponents": {}, + "enablePullDownRefresh":true, + "navigationBarTitleText": "怼社区" + } \ No newline at end of file diff --git a/pages/indexclasszx/indexclasszx.wxml b/pages/indexclasszx/indexclasszx.wxml new file mode 100644 index 0000000..2cf7e90 --- /dev/null +++ b/pages/indexclasszx/indexclasszx.wxml @@ -0,0 +1,58 @@ + + + + + + + + + + + {{usersingledata['nickname']}} + + + {{usersingledata['times']}} + + + + + + 累计专注{{resdata['totaltimes']}}分钟 + + + + 自习室人数{{resdata['totaluser']}}人 + + + + + + + + + + {{h}}:{{m}}:{{s}} + + + + + + + + + + + + + + + + + {{item.nickname}} + + + + + + + \ No newline at end of file diff --git a/pages/indexclasszx/indexclasszx.wxss b/pages/indexclasszx/indexclasszx.wxss new file mode 100644 index 0000000..461d138 --- /dev/null +++ b/pages/indexclasszx/indexclasszx.wxss @@ -0,0 +1,513 @@ +.courselive { + width: 750rpx; + height: 403rpx; +} + +.functionalarea { + display: flex; + flex-flow: row wrap; + align-content: flex-start; + width: 750rpx; + height: 550rpx; +} + +.areaitem { + margin-top: 60rpx; + text-align: center; + width: 33%; + height: 170rpx; +} + +.areaitem image { + width: 120rpx; + height: 170rpx; +} + +.messagearea text { + + display: block; + font-size: 40rpx; + font-weight: 600rpx; + margin-left: 60rpx; +} + +.msseagehead { + display: flex; + flex-direction: row; +} + +.headleft { + margin-left: 60rpx; + margin-top: 50rpx; + width: 120rpx; + height: 140rpx; + border-radius: 50%; + overflow: hidden; +} + +.headleft image { + + width: 130rpx; + height: 133rpx; +} + +.headright { + margin-top: 80rpx; + width: 200rpx; + height: 142rpx; +} + +.headrightup text { + font-size: 30rpx; + font-weight: 400rpx; +} + +.headrightdown { + font-size: 30rpx; + margin-top: 10rpx; +} + +.msseagemiddle { + margin: 0 60rpx; +} + +.mssagemiddledown { + margin: 25rpx auto; +} + +.mssagemiddledown image { + + width: 100%; + height: 265rpx; +} + +.mssagemiddledownone image { + width: 100%; +} + +.messageend { + + margin: 0 60rpx; + display: flex; + flex-direction: row; + justify-content: space-between; + +} + +.messageendleft { + width: 150rpx; + height: 30rpx; +} + +.messageendleft image { + width: 100rpx; + height: 30rpx; +} + +.messageendmiddle { + width: 150rpx; + height: 30rpx; +} + +.messageendmiddle image { + width: 35rpx; + height: 30rpx; +} + +.messageendmiddle text { + + font-size: 28rpx; + padding-left: 23rpx; +} + +.messageendright { + + width: 150rpx; + height: 30rpx; +} + +.messageendright image { + width: 35rpx; + height: 30rpx; + +} + +.messageendright text { + + font-size: 28rpx; + padding-left: 23rpx; +} + +.feigexian { + + margin: 0 60rpx; + margin-top: 60rpx; + border-bottom: 2rpx solid #ada2a2; +} + +.areaclass { + + width: 540rpx; + height: 193rpx; + margin: 0 auto; + margin-top: 80rpx; + background-color: #f0f0f1; + border-radius: 5%; +} + +.areafooter { + display: flex; + align-items: center; + justify-content: space-between; + width: 540rpx; + height: 60rpx; + margin: 0 auto; + margin-top: 10rpx; +} + +.areafooterleft image { + + width: 26rpx; + height: 26rpx; + +} + +.areafooterright text { + font-size: 28rpx; + font-weight: 600; + color: #217ced; +} + +.vipimage image { + width: 37rpx; + height: 33rpx; + position: relative; + left: -32rpx; + top: 148rpx; +} + +/* 社区头部 */ +.communityhead { + width: 680rpx; + height: 210rpx; + margin: 0 auto; + display: flex; + flex-direction: row; + justify-content: flex-start; + align-items: center; +} + +.communityheadleft { + background: url('https://ndnd.duiduiedu.com/uploads/pics/communtlistheadleft.png') no-repeat; + width: 385rpx; + height: 206rpx; + background-size: 100% 100%; + display: flex; + flex-direction: row; + justify-content: space-between; + align-items: center; +} + +.communityheadright { + width: 232rpx; + height: 206rpx; + margin-left: 40rpx; +} + +.communityheadrightup { + width: 240rpx; + height: 80rpx; + margin-top: 20rpx; +} + +.communityheadrightup image { + width: 240rpx; + height: 80rpx; +} + +.communityheadrightdown { + width: 240rpx; + height: 80rpx; + margin-top: 20rpx; +} + +.communityheadrightdown image { + width: 240rpx; + height: 80rpx; +} + +.communityheadleftitem1 { + width: 240rpx; + margin-left: 55rpx; + display: flex; + flex-direction: column; + justify-content: center; + align-items: center; +} + +.communityheadleftitem2 { + width: 80rpx; + height: 180rpx; +} + +.communityheadleftitem2 image { + width: 80rpx; + height: 175rpx; +} + +.messageitem { + width: 240rpx; + height: 38rpx; + /* border: 1rpx solid #1ccfd6; */ + color: #1ccfd6; + margin-bottom: 10rpx; + text-align: center; + overflow: hidden; +} + +/* 社区头部 */ + +/* 社区滑动 */ +.curriculumup { + width: 680rpx; + height: 55rpx; + margin: 0 auto; + margin-top: 40rpx; +} + +.curriculumupstart { + float: left; + width: 680rpx; + height: 55rpx; +} + +.curriculumupend { + float: left; + width: 50rpx; + height: 50rpx; +} + +.scroll-box { + white-space: nowrap; + height: 100%; +} + +.card-box { + display: inline-block; + margin-right: 10rpx; +} + +.card image { + height: 55rpx; + line-height: 55rpx; + width: 211rpx; +} + +.lineclass { + width: 685rpx; + margin: 2rpx auto; + border-bottom: 1rpx solid #dcdcdc; +} + +/* 社区滑动 */ + +/* 补充留言信息右边 */ +.itemright { + width: 260rpx; + margin-top: 10rpx; + margin-left: 30rpx; + display: flex; + flex-direction: column; + justify-content: center; + align-items: left; +} + +.itemrightup { + font-size: 32rpx; + font-weight: 400; +} + +.itemrightup text { + color: #FD77B0; +} + +.itemrightdown { + margin-top: 10rpx; +} + +.itemrightdown text { + color: #FD77B0; +} + +.middlecss { + display: flex; + flex-direction: column; + justify-content: center; + align-items: center; + width: 690rpx; + height: 160rpx; + margin: 0 auto; + background: url('https://ndnd.duiduiedu.com/uploads/pics/zx003.png') no-repeat; + background-size: 100% 100%; +} + +.middlecss text { + color: white; + font-size: 80rpx; + font-weight: 600; +} + +.middlecssdown { + + display: flex; + flex-direction: row; + justify-content: center; + align-items: center; + width: 690rpx; + height: 450rpx; + margin-top: 85rpx; +} + +.middlecssdown image { + + width: 695rpx; + height: 450rpx; + margin: 0 auto; +} + +.middlecssdown2 { + display: flex; + flex-direction: row; + justify-content: center; + align-items: center; + width: 690rpx; + height: 100rpx; + margin: 0 auto; + margin-top: 71rpx; + margin-bottom: 36rpx; +} + +.middlecssdown2 image { + width: 486rpx; + height: 100rpx; + margin: 0 auto; + +} + +.middlecssdown3 { + display: flex; + flex-flow: row wrap; + justify-content: left; + align-items: left; + width: 690rpx; + margin: 0 auto; +} + +.middlecssdown3row { + display: flex; + flex-direction: column; + justify-content: center; + align-items: center; + width: 94rpx; + height: 122rpx; + margin: 0 auto; + margin-left: 50rpx; + margin-bottom: 30rpx; +} + +.donwup { + width: 103rpx; + height: 103rpx; + +} + +.donwup image { + border-radius: 50%; + overflow: hidden; + width: 103rpx; + height: 103rpx; +} + +.downdown { + + width: 103rpx; + height: 103rpx; +} + +.downdown text { + width: 103rpx; + height: 103rpx; + font-size: 20rpx; +} + +.round-click { + height: 61rpx; + width: 54rpx; + position: fixed; + bottom: 150rpx; + right: 20rpx; + display: flex; + align-items: center; + justify-content: center; + z-index: 9; +} + +.round-click image { + height: 61rpx; + line-height: 61rpx; + width: 54rpx; +} + +.areaclass { + width: 540rpx; + min-height: 300rpx; + margin: 0 auto; + margin-top: 80rpx; + background-color: #f0f0f1; + border-radius: 5%; +} + +.areaclass textarea { + width: 540rpx; + min-height: 300rpx; +} + + +.areafooter { + display: flex; + align-items: center; + justify-content: space-between; + width: 540rpx; + height: 60rpx; + margin: 0 auto; + margin-top: 10rpx; +} + +.areafooterleft image { + + width: 52rpx; + height: 52rpx; + +} + +.areafooterright text { + font-size: 28rpx; + font-weight: 600; + color: #217ced; +} + +.areafooterright { + width: 120rpx; + height: 56rpx; +} + +.areafooterright button { + + width: 120rpx; + height: 50rpx; + line-height: 50rpx; + font-size: 28rpx; + font-weight: 600; + color: #217ced; + border: none; +} \ No newline at end of file diff --git a/pages/indexcourselearning/indexcourselearning.js b/pages/indexcourselearning/indexcourselearning.js new file mode 100644 index 0000000..002c504 --- /dev/null +++ b/pages/indexcourselearning/indexcourselearning.js @@ -0,0 +1,1070 @@ +const Apps = getApp(); +const api = require('../../config/api.js'); +const util = require('../../config/util.js'); +import Toast from '../../miniprogram_npm/@vant/weapp/toast/toast'; +Page({ + + /** + * 页面的初始数据 + */ + data: { + videurl: "https://xyg.jsjbkc.com/pics/xyg1.mp4?v" + Date.now(), + imagecount: 4, + courseid: 1, + itemdata: [], + baseurl: Apps.globalData.baseimgurl, + showview: false, + title: '', + content: '', + images: '', + upload_picture_list: [], + imagesListp: [], + imagestr: [], + imageslists: [], //图片预览 + ismdata: 1, //是否材料型数据跳转 + typeid: 1, + isdisplay: 1, + ispic: 0, + accesstoken: '', + xid: 0, + onefeilei: 0, //课程一级分类 + viptype_id: 1, //VIP类型 + videoContext: {}, // 用于绑定视频标签 + showvide: false, + videtimes: 5, + videtimes2: 10, + cousreshow: false, //检查用户是对课程有权限,对VIP用户onWaiting + headpicvalue: 0,//课程积分 + sliderValue: 0, //控制进度条slider的值, + updateState: false, //防止视频播放过程中导致的拖拽失效 + playStates: false, //控制播放 & 暂停按钮的显示 + fullScreen: false,//是否是全屏 + recommendListArr: [], + chongzhivalue: '怼币购买', + poptitle: '怼币购买后可学习14天', + isfinall: 0, //检测用户的课程是否完成 + video_data: {}, //要播放的视频对象 + show: false, + isvip: false, //是否VIP, + showdiage: false, + pathid: "", + actions: [ + { + name: '1.0倍速', + value: 1 + }, + { + name: '1.25倍速', + value: 1.25 + }, + { + name: '1.5倍速', + value: 1.5 + }, + { + name: '2.0倍速', + value: 2 + }, + ], + }, + showdiagePopup(e) { + console.log(e); + let pathid = e.currentTarget.id; + + let files = pathid; // knowfiles.currentTarget.id; + if (files.length == 0) { + + wx.showToast({ + title: '暂时还没有讲义,不可下载',//提示文字 + duration: 2000,//显示时长 + mask: true,//是否显示透明蒙层,防止触摸穿透,默认:false + icon: 'none', //图标,支持"success"、"loading" + success: function () { + return; + },//接口调用成功 + fail: function () { }, //接口调用失败的回调函数 + complete: function () { } //接口调用结束的回调函数 + }) + } else { + this.setData({ showdiage: true, pathid: pathid }); + } + + }, + + onshowdiageClose() { + this.setData({ showdiage: false }); + }, + vippopmsg: function () { + //vip课程弹出消息框 + //判断VIP课程还有多少天 + this.vipkechengday(this.data.onefeilei, wx.getStorageSync('wxuserid')); + }, + vipkechengday: function (onefeilei, wxuserid) { + //判断VIP课程还有多少天 + const that = this; + let url = Apps.globalData.baseUrl + '/user/vipscourseuserday'; + var param = { + user_id: wxuserid, + sourceid: onefeilei + }; + //此处为使用封装的post请求 + util.post(url, param).then((res) => { + console.log(res); + // 您的VIP会员剩余374天 + Toast('您的VIP会员剩余' + res + '天'); + }).catch((errMsg) => { + console.log(errMsg); + }); + }, + popmsg: function () { + //怼币课程弹出消息框 + //判断怼币课程还有多少天 + console.log(this.data.courseid); + console.log(wx.getStorageSync('wxuserid')); + this.duibikechengday(this.data.courseid, wx.getStorageSync('wxuserid')); + // Toast('您的课程还有8天到期,到期后需重新购买'); + }, + popclick: function () { + if (this.data.isdisplay == 1 && this.data.typeid != 1) { + //弹出购买信息 + this.setData({ + showvide: true + }); + this.videoContext.pause(); + + } + + }, + duibikechengday: function (sourceid, wxuserid) { + //判断怼币课程还有多少天 + //检查用户是否可以听课 + const that = this; + let url = Apps.globalData.baseUrl + '/user/setdecuserscoreday'; + var param = { + user_id: wxuserid, + sourceid: sourceid + }; + //此处为使用封装的post请求 + util.post(url, param).then((res) => { + console.log(res); + Toast('您的课程还有' + res + '天到期,到期后需重新购买'); + }).catch((errMsg) => { + console.log(errMsg); + }); + + }, + bsbtnclick: function () { + let bsdata = !this.data.show; + console.log(bsdata); + this.setData({ + show: bsdata + }) + }, + onClose: function () { + this.setData({ show: false }); + }, + onSelect: function (event) { + console.log(event.detail); + console.log(event.detail.value); + let rate = event.detail.value; + this.videoContext.playbackRate(Number(rate)); + this.onClose(); + }, + bindButtonRate: function (e) { + let rate = e.detail; + console.log(rate); + this.videoContext.playbackRate(Number(rate)); + }, + fullvideo: function (params) { + console.log(params); + // 全屏 + this.videoContext = wx.createVideoContext('myVideo'); + this.videoContext.requestFullScreen({ + direction: 1 + }); + }, + bindfullscreenchange: function (e) { + // let fullScreen = e.detail.fullScreen //值true为进入全屏,false为退出全屏 + // let videoContext = wx.createVideoContext('myVideo') + if (!e.detail.fullScreen) { + // 退出全屏 + this.videoContext.exitFullScreen() + } + else { + // 全屏 + this.videoContext = wx.createVideoContext('myVideo'); + this.videoContext.requestFullScreen({ + direction: -90 + }); + } + }, + /** + * 生命周期函数--监听页面加载 + */ + onLoad: function (options) { + + Apps.islogin(); + console.log("options=========="); + console.log(options); + // if (options.typeid == 3) { + // this.setData({ + // chongzhivalue: '充值VIP', + // poptitle: 'VIP期限内可无限畅学' + // }) + // } + this.setData({ + courseid: options.id, + typeid: options.typeid, + updateState: true + }); + + }, + buyclick(event) { + console.log(event.detail); + console.log("===========") + //购买是跳转,还是在这里需要判断购买 + console.log(this.data.viptype_id); + if (this.data.viptype_id == 2) { + //实现怼币购买 + this.kqcheckdescusersorce(wx.getStorageSync('wxuserid'), this.data.cousrceid, this.data.headpicvalue); + } else if (this.data.viptype_id == 3) { + //跳转购买课程页面 + wx.navigateTo({ + url: '/pages/viprecharge/viprecharge', + }) + } + }, + cancleclick() { + this.setData({ showvide: false }); + }, + videoUpdate(e) { + if (this.data.updateState) { + //判断拖拽完成后才触发更新,避免拖拽失效 + const times = e.detail.currentTime.toFixed(0); + let sliderValue = e.detail.currentTime / e.detail.duration * 100; + // console.log(sliderValue); + this.setData({ + sliderValue: sliderValue, + duration: e.detail.duration + }) + // console.log('sliderValue=>' + times); + // console.log('11试看=>' + times); + this.publicdata(times); + + } + }, + publicdata: function (times) { + + //公共数据 + + //对2,3类型课程需要监控,一判断是否已用怼币购买过,二是判断是否为VIP用户 + if (this.data.viptype_id != 1) { + + //购买用户,怼币购买用户 + //1免费,2怼币,3VIP,4优惠值 + //先检查是否有怼币 + //增加一个两个小时的时长 + // console.log('先检查是否有怼币'); + // console.log(that.data.isdisplay); + if (this.data.isdisplay == 1) { + + if (this.data.cousreshow == false) { + + if (times >= this.data.videtimes) { + this.setData({ + showvide: true, + playStates: false, + sliderValue: times + }); + this.videoContext.pause(); + } + } + } + + } + }, + sliderChanging(e) { + + const times = e.detail.value.toFixed(0); + this.setData({ + updateState: false //拖拽过程中,不允许更新进度条 + }) + if (times >= this.data.videtimes) { + this.videoContext.pause(); + this.publicdata(times); + } else { + this.videoContext.play(); + } + }, + sliderChange(e) { + + const times = e.detail.value.toFixed(0); + this.setData({ + sliderValue: e.detail.value, + updateState: false //完成拖动后允许更新滚动条 + }) + + if (this.data.duration) { + this.videoContext.seek(e.detail.value / 100 * this.data.duration); //完成拖动后,计算对应时间并跳转到指定位置 + this.setData({ + sliderValue: e.detail.value.toFixed(0), + updateState: true //完成拖动后允许更新滚动条 + }) + } + if (times >= this.data.videtimes) { + this.videoContext.pause(); + this.setData({ + showvide: true, + duration: e.detail.duration, + playStates: false, + sliderValue: times + }); + this.publicdata(times); + + } else { + this.videoContext.play(); + } + + + }, + videoOpreation() { + + const playstats = !this.data.playStates; + this.setData({ + playStates: playstats, + }); + this.data.playStates ? this.videoContext.pause() : this.videoContext.play(); + const times = this.data.sliderValue; + console.log(times); + if (times >= this.data.videtimes) { + this.videoContext.pause(); + this.publicdata(times); + } + + }, + + /** + * 生命周期函数--监听页面初次渲染完成 + */ + onReady: function () { + this.videoContext = wx.createVideoContext('myVideo'); + this.setData({ + updateState: true + }) + }, + + /** + * 生命周期函数--监听页面显示 + */ + onShow: function () { + + this.isdisplay(); + this.getcoursedata(this.data.courseid); + this.wrodtypelist(this.data.courseid); + this.isjumpurl(this.data.typeid, 1); + // this.isfinallfun(this.data.courseid, wx.getStorageSync('wxuserid'), 2); //2不删除 + + }, + + isfinallfun: function (id, userid, typeid) { + //是否完成函数 + const that = this; + let url = Apps.globalData.baseUrl + '/course/finallclick'; + var param = { + id: id, + user_id: userid, + typeid: typeid + }; + //此处为使用封装的post请求 + util.post(url, param).then((res) => { + + console.log(res); + that.setData({ + isfinall: res + }) + + }).catch((errMsg) => { + console.log(errMsg); + }); + }, + /** + * 生命周期函数--监听页面隐藏 + */ + onHide: function () { + + }, + + /** + * 生命周期函数--监听页面卸载 + */ + onUnload: function () { + + }, + + /** + * 页面相关事件处理函数--监听用户下拉动作 + */ + onPullDownRefresh: function () { + + }, + + /** + * 页面上拉触底事件的处理函数 + */ + onReachBottom: function () { + + }, + + /** + * 用户点击右上角分享 + */ + onShareAppMessage: function () { + + }, + messageclick: function (e) { + + wx.reLaunch({ + url: '/pages/communityinfo/communityinfo?id=' + e.currentTarget.id, + }) + }, + deletewordreply: function (par) { + + //删除留言 + const that = this; + let url = Apps.globalData.baseUrl + '/wordslist/deletewordreply'; + var param = { + wordid: par + }; + //此处为使用封装的post请求 + util.post(url, param).then((res) => { + console.log(res); + this.wrodtypelist(that.data.courseid); + + }).catch((errMsg) => { + console.log(errMsg); + }); + }, + getcoursedata: function (params) { + const that = this; + let url = Apps.globalData.baseUrl + '/lives/indexcourselives'; + var param = { + id: params, + user_id: wx.getStorageSync('wxuserid') == '' ? 0 : wx.getStorageSync('wxuserid') + }; + //此处为使用封装的post请求 + util.get(url, param).then((res) => { + console.log('res===================='); + console.log(res); + let cousrceid = res.data.id; + that.setData({ + itemdata: res.data, //课程数据 + cousrceid: cousrceid, //课程ID + videtimes: 100000000, //视听时长 + videurl: res.data.liveurl + }); + + }).catch((errMsg) => { + console.log(errMsg); + }); + }, + displayview: function () { + console.log(this.data.showview); + this.setData({ + showview: (!this.data.showview) + }) + this.getacctoken(); + this.pageScrollToBottom(); + }, + wrodtypelist: function (params) { + + //获取课程留言 + const that = this; + let url = Apps.globalData.baseUrl + '/lives/liveswordscourselist'; + var param = { + id: params, + user_id: wx.getStorageSync('wxuserid') + }; + //此处为使用封装的post请求 + util.get(url, param).then((res) => { + console.log(res); + that.setData({ + replylist: res.data + }); + + }).catch((errMsg) => { + console.log(errMsg); + }); + }, + delesourceclick: function (par) { + const that = this; + wx.showModal({ + title: '删除提示', + content: '您将删除该留言信息', + cancelText: '退出', + confirmText: '确认', + success: function (res) { + if (res.cancel) { + //这个跳转是左边按钮的跳转链接 + //这里取消操作 + console.log(res); + + } else { + //这里是右边按钮的跳转链接 + let id = par.currentTarget.id; + //删除课程留言数据 + let url = Apps.globalData.baseUrl + '/lives/liveswordscoursedelete'; + var param = { + id: id + }; + //此处为使用封装的post请求 + util.post(url, param).then((res) => { + console.log(res); + that.wrodtypelist(that.data.courseid); + + }).catch((errMsg) => { + console.log(errMsg); + }); + } + } + }) + + }, + wordsclick: function (ee) { + + let e1 = ee.currentTarget.id; + // let e2 = Apps.globalData.currentuserinfo.id; + let e2 = wx.getStorageSync('wxuserid'); + const that = this; + let url = Apps.globalData.baseUrl + '/wordslist/wordscourseclickcount'; + var param = { + words_id: e1, + user_id: e2, + }; + //此处为使用封装的post请求 + util.get(url, param).then((res) => { + console.log(res); + + }).catch((errMsg) => { + console.log(errMsg); + }); + }, + uploadpic: function () { + var that = this; + let imagesList = []; + let maxSize = 1024 * 1024; + let maxLength = 6; + let flag = true; + wx.chooseImage({ + count: 9, //最多可以选择的图片总数 + sizeType: ['original', 'compressed'], // 可以指定是原图还是压缩图,默认二者都有 + sourceType: ['album', 'camera'], // 可以指定来源是相册还是相机,默认二者都有 + success: function (res) { + wx.showToast({ + title: '正在上传...', + icon: 'loading', + mask: true, + duration: 500 + }) + for (let i = 0; i < res.tempFiles.length; i++) { + if (res.tempFiles[i].size > maxSize) { + flag = false; + console.log(111) + wx.showModal({ + content: '图片太大,不允许上传', + showCancel: false, + success: function (res) { + if (res.confirm) { + console.log('用户点击确定') + } + } + }); + } + } + if (res.tempFiles.length > maxLength) { + console.log('222'); + wx.showModal({ + content: '最多能上传' + maxLength + '张图片', + showCancel: false, + success: function (res) { + if (res.confirm) { + console.log('确定'); + } + } + }) + } + if (flag == true && res.tempFiles.length <= maxLength) { + that.setData({ + imagesListp: res.tempFilePaths + }) + that.data.imagestr = []; + var arr = ''; + for (let i = 0; i < that.data.imagesListp.length; i++) { + + // that.getpicchekc(that.data.imagesListp[i]); + + // if (that.data.ispic == 1) { + + wx.uploadFile({ + url: Apps.globalData.baseUrl + '/wordslist/uploadpics', + filePath: that.data.imagesListp[i], + name: 'file', + success: function (res) { + //打印 + console.log("------------响应数据:"); + console.log(res.data); + + var message = JSON.parse(res.data); + that.data.imagestr.push(message); + that.setData({ + imagestr: that.data.imagestr + }); + }, + }) + } + + // } + + + } + console.log(res); + }, + fail: function (res) { + console.log(res); + } + }) + + }, + // 删除图片 + removeChooseImage(e) { + let imgs = this.data.imagestr; + let { index } = e.currentTarget.dataset; + imgs.splice(index, 1); + this.setData({ + imagestr: imgs + }) + }, + // 预览图片 + previewBigImage(e) { + let that = this; + let imgs = that.data.imagestr; + let index = e.currentTarget.dataset.index; + let arr = []; + imgs.forEach(function (item, index) { + arr[index] = that.data.baseurl + item + }); + wx.previewImage({ + //当前显示图片 + current: arr[index], + //所有图片 + urls: arr + }) + }, + isjumpblack: function () { + console.log(wx.getStorageSync('userisblack')); + if (wx.getStorageSync('userisblack') >= 2) { + + wx.showToast({ + title: "您已被禁言,请联系管理员",//提示文字 + duration: 5000,//显示时长 + mask: true,//是否显示透明蒙层,防止触摸穿透,默认:false + icon: 'none', //图标,支持"success"、"loading" + success: function () { + + },//接口调用成功 + fail: function () { }, //接口调用失败的回调函数 + complete: function () { } //接口调用结束的回调函数 + }) + } + }, + formSubmit: function (e) { + + Apps.islogin(); + + if (wx.getStorageSync('userisblack') >= 2) { + this.isjumpblack(); + return; + } + + let content = this.data.wordstextname; + if (content == '') { + wx.showToast({ + title: '留言内容为空,请填写内容', + icon: 'none', + duration: 1500 + }) + return false; + } + this.getmsgcheck(content); + + }, + bindTextAreaBlur: function (e) { + this.setData({ + wordstextname: e.detail.value + }) + }, + uploadpicsimage: function (e) { + + const that = this; + let url = Apps.globalData.baseUrl + '/wordslist/uploadpics'; + var param = { + url: e + }; + //此处为使用封装的post请求 + util.post(url, param).then((res) => { + console.log(res); + + }).catch((errMsg) => { + console.log(errMsg); + }); + }, + wordsadd: function (content, imagestr) { + + const that = this; + let url = Apps.globalData.baseUrl + '/lives/liveswordscouresadd'; + var param = { + content: content, + imagestr: imagestr, + userid: wx.getStorageSync('wxuserid') == '' ? 3 : wx.getStorageSync('wxuserid'), + wordsid: that.data.courseid, + xid: that.data.xid + }; + //此处为使用封装的post请求 + util.post(url, param).then((res) => { + console.log(res.data); + if (res.data > 0) { + wx.showToast({ + title: '留言内容成功', + icon: 'none', + duration: 1500 + }) + + that.wrodtypelist(that.data.courseid); + + that.setData({ + wordstextname: '', + imagestr: '' + }) + + } + + }).catch((errMsg) => { + console.log(errMsg); + }); + }, + contentclick: function (params) { + + console.log(params); + let id = params.currentTarget.id; + let xid = params.currentTarget.dataset.xid; + console.log(id); + this.setData({ + wordstextname: '回复@' + id, + showview: true, + xid: xid + }); + + // this.addinccomment(xid); + + this.getacctoken(); + + wx.showToast({ + title: '@成功,留言请移底部留言', + icon: 'none', + duration: 1500 + }) + this.pageScrollToBottom(); + + }, rdclick: function (params) { + + this.pageScrollToBottom(); + }, addinccomment: function (params) { + //增加评论数 + console.log(params); + let userid = wx.getStorageSync('wxuserid'); + const that = this; + let url = Apps.globalData.baseUrl + '/wordslist/addcommentcount'; + var param = { + id: params, + userid: userid + }; + //此处为使用封装的post请求 + util.get(url, param).then((res) => { + console.log(res); + // this.wrodtypelist(this.data.courseid) + this.wrodtypelist(that.data.courseid); + }).catch((errMsg) => { + console.log(errMsg); + }); + }, + clickbtn: function (params) { + console.log(params); + let userid = wx.getStorageSync('wxuserid'); + const that = this; + let url = Apps.globalData.baseUrl + '/wordslist/wordscourseclickcount'; + var param = { + words_id: params.currentTarget.id, + user_id: userid + }; + //此处为使用封装的post请求 + util.get(url, param).then((res) => { + console.log(res); + // this.wrodtypelist(this.data.courseid) + this.wrodtypelist(this.data.courseid); + }).catch((errMsg) => { + console.log(errMsg); + }); + }, + knowledgeclick: function (params) { + //知识要点 + if (this.data.cousreshow == false && this.data.typeid != 1) { + wx.showToast({ + title: '试听课程,不可操作,请先购买课程',//提示文字 + duration: 2000,//显示时长 + mask: true,//是否显示透明蒙层,防止触摸穿透,默认:false + icon: 'none', //图标,支持"success"、"loading" + success: function () { + return; + },//接口调用成功 + fail: function () { }, //接口调用失败的回调函数 + complete: function () { } //接口调用结束的回调函数 + }) + return; + } + + let examid = params.currentTarget.id; + if (examid > 0) { + wx.navigateTo({ + url: '/pages/knowledge/knowledge?examid=' + examid, + }) + } else { + Toast('此课程暂无知识要点'); + } + + + }, + examingclick: function (params) { + + if (this.data.cousreshow == false && this.data.typeid != 1) { + wx.showToast({ + title: '试听课程,不可操作,请先购买课程',//提示文字 + duration: 2000,//显示时长 + mask: true,//是否显示透明蒙层,防止触摸穿透,默认:false + icon: 'none', //图标,支持"success"、"loading" + success: function () { + return; + },//接口调用成功 + fail: function () { }, //接口调用失败的回调函数 + complete: function () { } //接口调用结束的回调函数 + }) + return; + } + + let examid = params.currentTarget.id; + let ismdata = this.data.ismdata; + let grouppaper_id = this.data.itemdata.grouppaper_id; + if (grouppaper_id > 0) { + + + if (ismdata == 2) { + wx.navigateTo({ + url: '/pages/exammakings/exammakings?examid=' + examid + '&grouppaper_id=' + grouppaper_id, + }) + } else { + wx.navigateTo({ + url: '/pages/examing/examing?examid=' + examid + '&grouppaper_id=' + grouppaper_id, + }) + } + } else { + + Toast('该课程无练习试题'); + } + }, + preview: function (params) { + let that = this; + console.log(params) + let currentUrl = params.currentTarget.dataset.src; + let arrindex = params.currentTarget.dataset.id; + + let rearr = that.data.replylist[arrindex].pics; + console.log(rearr); + let arr = []; + rearr.forEach(function (item, index) { + arr[index] = that.data.baseurl + item + }); + console.log(arr); + wx.previewImage({ + current: currentUrl, // 当前显示图片的http链接 + urls: arr // 需要预览的图片http链接列表 + }) + }, + isjumpurl: function (id, groupid) { + + const that = this; + let url = Apps.globalData.baseUrl + '/exam/isarrdata'; + var param = { + id: id, + groupid: groupid + }; + //此处为使用封装的post请求 + util.post(url, param).then((res) => { + console.log(res); + that.setData({ + ismdata: res.data + }); + }).catch((errMsg) => { + console.log(errMsg); + }); + }, + isdisplay: function (params) { + //是否显示视频 + const that = this; + let url = Apps.globalData.baseUrl + '/index/isdisplay'; + var param = { + pareid: params + }; + //此处为使用封装的post请求 + util.get(url, param).then((res) => { + console.log(res); + that.setData({ + isdisplay: res.data + }); + + }).catch((errMsg) => { + console.log(errMsg); + }); + + }, + getacctoken: function () { + const that = this; + let url = Apps.globalData.baseUrl + '/user/acctoken'; + var param = { + pareid: '1213' + }; + //此处为使用封装的post请求 + util.get(url, param).then((res) => { + + console.log('-=-=-=-=-=-=-=-='); + console.log(res); + wx.setStorageSync('accesstoen', res.access_token) + that.setData({ + accesstoken: res.access_token + }); + + + }).catch((errMsg) => { + console.log(errMsg); + }); + }, + getmsgcheck: function (params) { + // $url ='https://api.weixin.qq.com/wxa/msg_sec_check?access_token=' .$accessToken; + const that = this; + let url = Apps.globalData.baseUrl + '/user/checkmsg' + var param = { + "openid": wx.getStorageSync('wxopenid'), + "scene": 2, + "version": 2, + "content": params, + "access_token": that.data.accesstoken + }; + //此处为使用封装的post请求 + util.post(url, param).then((res) => { + + that.wordsadd(params, that.data.imagestr); + // if (res.errcode == "0") { + // that.wordsadd(params, that.data.imagestr) + // } else { + + // wx.showToast({ + // title: '留言内容有敏感词请重新输入',//提示文字 + // duration: 2000,//显示时长 + // mask: true,//是否显示透明蒙层,防止触摸穿透,默认:false + // icon: 'none', //图标,支持"success"、"loading" + // success: function () { },//接口调用成功 + // fail: function () { }, //接口调用失败的回调函数 + // complete: function () { } //接口调用结束的回调函数 + // }) + // } + + }).catch((errMsg) => { + console.log(errMsg); + }); + }, + checkusercousre: function (para) { + //vip课程 + //检测用户是否这个课程的权限 + Apps.islogin(); + const that = this; + let url = Apps.globalData.baseUrl + '/user/checkusercousre' + var param = { + user_id: wx.getStorageSync('wxuserid'), + courseid: para, + }; + //此处为使用封装的post请求 + util.post(url, param).then((res) => { + + console.log('// 检查一下用户是否有课程权限 cousreshow=true'); + console.log(res); + console.log(res.data); + // 检查一下用户是否有课程权限 cousreshow=true + that.setData({ + cousreshow: res.data.iscousreshow, + isvip: res.data.isvip + }); + + if (res.data.isvip == false && that.data.viptype_id == 2) { + + that.checkuserscource(wx.getStorageSync('wxuserid'), that.data.cousrceid, that.data.headpicvalue); + } + + }).catch((errMsg) => { + console.log(errMsg); + }); + + }, + getpicchekc: function (params) { + // let url="https://api.weixin.qq.com/wxa/media_check_async?access_token="+wx.getStorageSync('accesstoen'); + let url = Apps.globalData.baseUrl + '/user/checkpic' + var param = { + "openid": wx.getStorageSync('wxopenid'), + "scene": 2, + "version": 2, + "media_url": params, + "media_type": 2, + "version": 2, + "access_token": wx.getStorageSync('accesstoen') + }; + //此处为使用封装的post请求 + util.post(url, param).then((res) => { + + console.log("res==========="); + console.log(res); + + this.setData({ + ispic: 1 + }) + + + }).catch((errMsg) => { + console.log(errMsg); + }); + }, + pageScrollToBottom() { + wx.createSelectorQuery().select('#time-mo').boundingClientRect(function (rect) { + + rect.id // 节点的ID + rect.dataset // 节点的dataset + rect.left // 节点的左边界坐标 + rect.right // 节点的右边界坐标 + rect.top // 节点的上边界坐标 + rect.bottom // 节点的下边界坐标 + rect.width // 节点的宽度 + rect.height + console.log(rect.bottom * 20) + // 使页面滚动到底部 + wx.pageScrollTo({ + scrollTop: rect.bottom * 20 + }) + }).exec() + }, + +}) \ No newline at end of file diff --git a/pages/indexcourselearning/indexcourselearning.json b/pages/indexcourselearning/indexcourselearning.json new file mode 100644 index 0000000..9c44bd3 --- /dev/null +++ b/pages/indexcourselearning/indexcourselearning.json @@ -0,0 +1,8 @@ +{ + "usingComponents": {}, + "navigationBarBackgroundColor": "#fff", + "navigationBarTextStyle": "black", + "navigationBarTitleText": "课程学习", + "backgroundColor": "#ccc", + "backgroundTextStyle": "light" + } \ No newline at end of file diff --git a/pages/indexcourselearning/indexcourselearning.wxml b/pages/indexcourselearning/indexcourselearning.wxml new file mode 100644 index 0000000..3e7a628 --- /dev/null +++ b/pages/indexcourselearning/indexcourselearning.wxml @@ -0,0 +1,161 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 留言区 + + + + + + + + + + + + + + {{item.userinfo['nickname']}} + + + {{item.times}} + + + + + + + {{item.name}} + + + + + + + + + + + + + + + + + + + {{item.commentcount}} + + + + {{item.wordsclickcount}} + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + +
\ No newline at end of file diff --git a/pages/indexcourselearning/indexcourselearning.wxss b/pages/indexcourselearning/indexcourselearning.wxss new file mode 100644 index 0000000..73075cc --- /dev/null +++ b/pages/indexcourselearning/indexcourselearning.wxss @@ -0,0 +1,340 @@ +.courselive { + width: 750rpx; + height: 403rpx; +} + +.courselivecontinor { + background-color: #F5F5F5; +} + +.functionalarea { + + display: flex; + flex-flow: row wrap; + align-content: flex-start; + width: 750rpx; + height: 550rpx; +} + +.areaitem { + margin-top: 60rpx; + text-align: center; + width: 33%; + height: 170rpx; +} + +.areaitem image { + width: 120rpx; + height: 170rpx; +} + +.messagearea text { + + display: block; + font-size: 40rpx; + font-weight: 600rpx; + margin-left: 60rpx; + margin-top: 40rpx; +} + +.msseagehead { + display: flex; + flex-direction: row; +} + +.headleft { + margin-left: 60rpx; + margin-top: 50rpx; + width: 140rpx; + height: 140rpx; + border-radius: 50%; + overflow: hidden; +} + +.headleft image { + + width: 130rpx; + height: 133rpx; +} + +.headright { + margin-top: 80rpx; + margin-left: 23rpx; + width: 485rpx; + height: 142rpx; +} + +.headrightup text { + + font-size: 30rpx; + /* font-weight: 400rpx; */ +} + +.headrightdown { + margin-top: 10rpx; +} + +.msseagemiddle { + margin: 0 60rpx; +} + +.mssagemiddledown { + margin: 25rpx auto; +} + +.mssagemiddledown image { + + width: 100%; + height: 265rpx; +} + +.messageend { + + margin: 0 60rpx; + display: flex; + flex-direction: row; + justify-content: space-between; + +} + +.messageendleft { + padding-top: 20rpx; + width: 150rpx; + height: 30rpx; +} + +.messageendleft image { + width: 100rpx; + height: 30rpx; +} + +.messageendmiddle { + width: 150rpx; + height: 30rpx; +} + +.messageendmiddle image { + width: 35rpx; + height: 30rpx; +} + +.messageendmiddle text { + + font-size: 28rpx; + padding-left: 23rpx; +} + +.messageendright { + + width: 150rpx; + height: 30rpx; +} + +.messageendright image { + width: 35rpx; + height: 30rpx; + +} + +.messageendright text { + + font-size: 28rpx; + padding-left: 23rpx; +} + +.feigexian { + + margin: 0 60rpx; + margin-top: 60rpx; + border-bottom: 2rpx solid #ada2a2; +} + +.round-click{ + height: 61rpx; + width: 54rpx; + position: fixed; + bottom: 150rpx; + right: 20rpx; + display: flex; + align-items: center; + justify-content: center; + z-index: 9; + } + .round-click image{ + height: 61rpx; + line-height: 61rpx; + width: 54rpx; + } + + + +.areaclass{ + width: 540rpx; + min-height: 300rpx; + margin: 0 auto; + margin-top: 80rpx; + background-color: #f0f0f1; + border-radius: 5%; + } + .areaclass textarea{ + width: 540rpx; + min-height: 300rpx; + } + + + .areafooter{ + display: flex; + align-items: center; + justify-content: space-between; + width: 540rpx; + height: 60rpx; + margin: 0 auto; + margin-top: 10rpx; + } + .areafooterleft image{ + + width: 52rpx; + height: 52rpx; + + } + .areafooterright text{ + font-size: 28rpx; + font-weight: 600; + color: #217ced; + } + .areafooterright{ + width: 120rpx; + height: 56rpx; + } + .areafooterright button{ + + width: 120rpx; + height: 50rpx; + line-height: 50rpx; + font-size: 28rpx; + font-weight: 600; + color: #217ced; + border:none; + } + button::after { + border: none; + } + + .header_view_hide{ + display: none; + } + .header_view_show{ + display: block; + } + .vipimage image{ + width: 37rpx; + height: 33rpx; + position: relative; + left: -25px; + top: 83px; + } + + + .process-container image{ + + position: relative; + z-index: 99; + transform:translate(20%, -10%); + z-index: 999; + width: 60rpx; + height: 60rpx; + +} + +.slider-container { + height: 1rpx; + position: relative; + z-index: 999; + left: 50%; + top: -379%; + transform: translate(-50%, -78rpx); + z-index: 999; + width: 80%; +} +.slider{ + width: 80%; + margin: 0 auto; +} +.mod_action { + position: relative; + z-index: 999; + left:520rpx; + top:-50rpx; + border-radius: 20%; + /* transform: translate(-50%, -98rpx); */ + width: 180rpx; + height: 15rpx; + +} +.playfull{ + position: relative; + z-index: 999; + left:40rpx; + top:70rpx; + border-radius: 20%; + /* transform: translate(-50%, -98rpx); */ + width: 180rpx; + height: 120rpx; +} +.van-dropdown-menu{ + height: var(--dropdown-menu-height,28px)!important; +} +.van-dropdown-menu__item{ + background: url("https://ndnd.duiduiedu.com/uploads/pics/bsbtn.png"); + width: 300px; + height: 90rpx; + background-size:cover; + background-repeat:no-repeat; +} +.playfull image{ + width: 180rpx; + height: 80rpx; +} +.mod_action image{ + width: 180rpx; + height: 80rpx; +} + + + +.choose_upload_view { + margin-top: 30rpx; + margin-left: 10%; + flex: 1; + height: 100%; + display: flex; + align-items: center; + justify-content: flex-start; + flex-wrap: wrap; + } + .choose_upload_item { + margin-left: 38rpx; + margin-bottom: 20rpx; + position: relative; + width: 100rpx; + display: flex; + align-items: center; + } + .choose_upload_view .choose_upload_img { + width: 100rpx; + height: 100rpx; + } + .choose_upload_view .remove_img_icon { + padding: 4rpx; + position:absolute; + top: -15rpx; + right: -13rpx; + width: 28rpx; + height: 28rpx; + border-radius: 50%; + background-color: rgba(248, 236, 236, 0.5); + } + .other_upload { + margin-left: 15rpx; + width: 80rpx; + } \ No newline at end of file diff --git a/pages/indexcreatewords/indexcreatewords.js b/pages/indexcreatewords/indexcreatewords.js new file mode 100644 index 0000000..7cea842 --- /dev/null +++ b/pages/indexcreatewords/indexcreatewords.js @@ -0,0 +1,338 @@ +const DEFAULT_PAGE = 0; +const Apps = getApp(); +const api = require('../../config/api.js'); +const util = require('../../config/util.js'); +Page({ + + /** + * 页面的初始数据 + */ + data: { + baseurl: Apps.globalData.baseimgurl, + messagelist: [], + startPageX: 0, + currentView: DEFAULT_PAGE, + imagecount: 4, + indeximagecount: 4, + active: 1, + challengeactive: 1, + toView: `card_${DEFAULT_PAGE}`, + list: [], + replylist: [], + imageslists: [], //图片预览 + showview: true, + upload_picture_list: [], + imagesListp: [], + imagestr: [], + id: 0, + accesstoken: '', + typeid: 1, + title: '怼社区', + page: 1, //页面数, + pagecount: 0, + wordstextname: '' + }, + + /** + * 生命周期函数--监听页面加载 + */ + onLoad: function (options) { + + console.log(options); + + Apps.islogin(); + this.setData({ + typeid: options.typeid + }) + this.getacctoken(); + }, + bindTextAreaBlur: function (e) { + console.log(e.detail.value); + this.setData({ + wordstextname: e.detail.value + }) + }, + /** + * 生命周期函数--监听页面初次渲染完成 + */ + onReady: function () { + + }, + + /** + * 生命周期函数--监听页面显示 + */ + onShow: function () { + + + }, + isjumpblack:function(){ + console.log(wx.getStorageSync('userisblack')); + if(wx.getStorageSync('userisblack')>=2){ + + wx.showToast({ + title: "您已被禁言,请联系管理员",//提示文字 + duration: 5000,//显示时长 + mask: true,//是否显示透明蒙层,防止触摸穿透,默认:false + icon: 'none', //图标,支持"success"、"loading" + success: function () { + + },//接口调用成功 + fail: function () { }, //接口调用失败的回调函数 + complete: function () { } //接口调用结束的回调函数 + }) + } + }, + + /** + * 生命周期函数--监听页面隐藏 + */ + onHide: function () { + + }, + + /** + * 生命周期函数--监听页面卸载 + */ + onUnload: function () { + + }, + + /** + * 页面相关事件处理函数--监听用户下拉动作 + */ + onPullDownRefresh: function () { + + }, + + /** + * 页面上拉触底事件的处理函数 + */ + onReachBottom: function () { + + }, + + /** + * 用户点击右上角分享 + */ + onShareAppMessage: function () { + + }, + getacctoken: function () { + const that = this; + let url = Apps.globalData.baseUrl + '/user/acctoken'; + var param = { + pareid: '1213' + }; + //此处为使用封装的post请求 + util.get(url, param).then((res) => { + console.log(res.access_token); + wx.setStorageSync('accesstoen', res.access_token) + that.setData({ + accesstoken: res.access_token + }); + + }).catch((errMsg) => { + console.log(errMsg); + }); + }, + formSubmit: function (e) { + + if(wx.getStorageSync('userisblack')>=2){ + this.isjumpblack(); + return; + } + + let content = this.data.wordstextname; + console.log(content) + if (content == '') { + wx.showToast({ + title: '留言内容为空,请填写内容', + icon: 'none', + duration: 1500 + }) + return false; + } + console.log(this.data.imagestr); + // this.wordsadd(content,this.data.imagestr); + this.getmsgcheck(content, this.data.accesstoken); + wx.setStorageSync('jmparm', this.data.typeid); + wx.navigateTo({ + url: '/pages/indexclass/indexclass', + }) + + }, + getmsgcheck: function (params, accesstoken) { + // $url ='https://api.weixin.qq.com/wxa/msg_sec_check?access_token=' .$accessToken; + const that = this; + // let url = 'https://api.weixin.qq.com/wxa/msg_sec_check?access_token='+wx.getStorageSync('accesstoen'); + let url = Apps.globalData.baseUrl + '/user/checkmsg' + var param = { + "openid": wx.getStorageSync('wxopenid'), + "scene": 2, + "version": 2, + "content": params, + "access_token": wx.getStorageSync('accesstoen') + }; + //此处为使用封装的post请求 + util.post(url, param).then((res) => { + + console.log(res); + console.log(res.errcode); + if (res.errcode == "0") { + that.wordsadd(params, that.data.imagestr) + } else { + + wx.showToast({ + title: '留言内容有敏感词请重新输入',//提示文字 + duration: 2000,//显示时长 + mask: true,//是否显示透明蒙层,防止触摸穿透,默认:false + icon: 'none', //图标,支持"success"、"loading" + success: function () { },//接口调用成功 + fail: function () { }, //接口调用失败的回调函数 + complete: function () { } //接口调用结束的回调函数 + }) + } + + }).catch((errMsg) => { + console.log(errMsg); + }); + }, + uploadpic: function () { + var that = this; + let imagesList = []; + let maxSize = 1024 * 1024; + let maxLength = 6; + let flag = true; + wx.chooseImage({ + count: 9, //最多可以选择的图片总数 + sizeType: ['original', 'compressed'], // 可以指定是原图还是压缩图,默认二者都有 + sourceType: ['album', 'camera'], // 可以指定来源是相册还是相机,默认二者都有 + success: function (res) { + wx.showToast({ + title: '正在上传...', + icon: 'loading', + mask: true, + duration: 500 + }) + for (let i = 0; i < res.tempFiles.length; i++) { + if (res.tempFiles[i].size > maxSize) { + flag = false; + console.log(111) + wx.showModal({ + content: '图片太大,不允许上传', + showCancel: false, + success: function (res) { + if (res.confirm) { + console.log('用户点击确定') + } + } + }); + } + } + if (res.tempFiles.length > maxLength) { + console.log('222'); + wx.showModal({ + content: '最多能上传' + maxLength + '张图片', + showCancel: false, + success: function (res) { + if (res.confirm) { + console.log('确定'); + } + } + }) + } + if (flag == true && res.tempFiles.length <= maxLength) { + that.setData({ + imagesListp: res.tempFilePaths + }) + that.data.imagestr = []; + var arr = ''; + for (let i = 0; i < that.data.imagesListp.length; i++) { + wx.uploadFile({ + url: Apps.globalData.baseUrl + '/indexclasslist/uploadpics', + filePath: that.data.imagesListp[i], + name: 'file', + success: function (res) { + //打印 + console.log("------------响应数据:"); + console.log(res.data); + + var message = JSON.parse(res.data); + that.data.imagestr.push(message); + that.setData({ + imagestr: that.data.imagestr + }); + }, + }) + + } + + + } + console.log(res); + }, + fail: function (res) { + console.log(res); + } + }) + + }, + // 删除图片 + removeChooseImage(e) { + let imgs = this.data.imagestr; + let { index } = e.currentTarget.dataset; + imgs.splice(index, 1); + this.setData({ + imagestr: imgs + }) + }, + // 预览图片 + previewBigImage(e) { + let that = this; + let imgs = that.data.imagestr; + let index = e.currentTarget.dataset.index; + let arr = []; + imgs.forEach(function (item, index) { + arr[index] = that.data.baseurl + item + }); + wx.previewImage({ + //当前显示图片 + current: arr[index], + //所有图片 + urls: arr + }) + }, + wordsadd: function (content, imagestr) { + + const that = this; + let url = Apps.globalData.baseUrl + '/indexclasslist/wordsxqadd'; + var param = { + content: content, + imagestr: imagestr, + userid: wx.getStorageSync('wxuserid') == '' ? 3 : wx.getStorageSync('wxuserid'), + wordstype_ids: this.data.typeid + }; + //此处为使用封装的post请求 + util.post(url, param).then((res) => { + console.log(res.data); + if (res.data > 0) { + wx.showToast({ + title: '留言内容成功', + icon: 'none', + duration: 1500 + }) + // this.getwords(that.data.typeid); + + that.setData({ + wordstextname: '', + imagestr: [] + }) + + } + + }).catch((errMsg) => { + console.log(errMsg); + }); + } +}) \ No newline at end of file diff --git a/pages/indexcreatewords/indexcreatewords.json b/pages/indexcreatewords/indexcreatewords.json new file mode 100644 index 0000000..d5b31e8 --- /dev/null +++ b/pages/indexcreatewords/indexcreatewords.json @@ -0,0 +1,8 @@ +{ + "usingComponents": {}, + "navigationBarBackgroundColor": "#fff", + "navigationBarTextStyle": "black", + "navigationBarTitleText": "用户发帖", + "backgroundColor": "#ccc", + "backgroundTextStyle": "light" + } \ No newline at end of file diff --git a/pages/indexcreatewords/indexcreatewords.wxml b/pages/indexcreatewords/indexcreatewords.wxml new file mode 100644 index 0000000..550f38b --- /dev/null +++ b/pages/indexcreatewords/indexcreatewords.wxml @@ -0,0 +1,22 @@ + +
+ + + + + + + + + + + + + + + + + + + +
\ No newline at end of file diff --git a/pages/indexcreatewords/indexcreatewords.wxss b/pages/indexcreatewords/indexcreatewords.wxss new file mode 100644 index 0000000..1785e4e --- /dev/null +++ b/pages/indexcreatewords/indexcreatewords.wxss @@ -0,0 +1,92 @@ +.areaclass { + width: 540rpx; + min-height: 300rpx; + margin: 0 auto; + margin-top: 80rpx; + background-color: #f0f0f1; + border-radius: 5%; +} + +.areaclass textarea { + width: 540rpx; + min-height: 300rpx; +} + + +.areafooter { + display: flex; + align-items: center; + justify-content: space-between; + width: 540rpx; + height: 60rpx; + margin: 0 auto; + margin-top: 10rpx; +} + +.areafooterleft image { + + width: 52rpx; + height: 52rpx; + +} + +.areafooterright text { + font-size: 28rpx; + font-weight: 600; + color: #217ced; +} + +.areafooterright { + width: 120rpx; + height: 56rpx; +} + +.areafooterright button { + + width: 120rpx; + height: 50rpx; + line-height: 50rpx; + font-size: 28rpx; + font-weight: 600; + color: #217ced; + border: none; +} + + + +.choose_upload_view { + margin-top: 30rpx; + margin-left: 10%; + flex: 1; + height: 100%; + display: flex; + align-items: center; + justify-content: flex-start; + flex-wrap: wrap; + } + .choose_upload_item { + margin-left: 38rpx; + margin-bottom: 20rpx; + position: relative; + width: 100rpx; + display: flex; + align-items: center; + } + .choose_upload_view .choose_upload_img { + width: 100rpx; + height: 100rpx; + } + .choose_upload_view .remove_img_icon { + padding: 4rpx; + position:absolute; + top: -15rpx; + right: -13rpx; + width: 28rpx; + height: 28rpx; + border-radius: 50%; + background-color: rgba(248, 236, 236, 0.5); + } + .other_upload { + margin-left: 15rpx; + width: 80rpx; + } \ No newline at end of file diff --git a/pages/indexcreatewordssubwork/indexcreatewordssubwork.js b/pages/indexcreatewordssubwork/indexcreatewordssubwork.js new file mode 100644 index 0000000..9c5ba62 --- /dev/null +++ b/pages/indexcreatewordssubwork/indexcreatewordssubwork.js @@ -0,0 +1,345 @@ +const DEFAULT_PAGE = 0; +const Apps = getApp(); +const api = require('../../config/api.js'); +const util = require('../../config/util.js'); +Page({ + + /** + * 页面的初始数据 + */ + data: { + baseurl: Apps.globalData.baseimgurl, + messagelist: [], + startPageX: 0, + currentView: DEFAULT_PAGE, + imagecount: 4, + indeximagecount: 4, + active: 1, + challengeactive: 1, + toView: `card_${DEFAULT_PAGE}`, + list: [], + replylist: [], + imageslists: [], //图片预览 + showview: true, + upload_picture_list: [], + imagesListp: [], + imagestr: [], + id: 0, + accesstoken: '', + typeid: 1, + title: '怼社区', + page: 1, //页面数, + pagecount: 0, + wordstextname: '', + classid:1 + }, + + /** + * 生命周期函数--监听页面加载 + */ + onLoad: function (options) { + + + console.log("options==================="); + console.log(options); + + Apps.islogin(); + this.setData({ + typeid: options.typeid, + classid:options.typeid + }) + this.getacctoken(); + }, + bindTextAreaBlur: function (e) { + console.log(e.detail.value); + this.setData({ + wordstextname: e.detail.value + }) + }, + /** + * 生命周期函数--监听页面初次渲染完成 + */ + onReady: function () { + + }, + + /** + * 生命周期函数--监听页面显示 + */ + onShow: function () { + + + }, + isjumpblack:function(){ + console.log(wx.getStorageSync('userisblack')); + if(wx.getStorageSync('userisblack')>=2){ + + wx.showToast({ + title: "您已被禁言,请联系管理员",//提示文字 + duration: 5000,//显示时长 + mask: true,//是否显示透明蒙层,防止触摸穿透,默认:false + icon: 'none', //图标,支持"success"、"loading" + success: function () { + + },//接口调用成功 + fail: function () { }, //接口调用失败的回调函数 + complete: function () { } //接口调用结束的回调函数 + }) + } + }, + + /** + * 生命周期函数--监听页面隐藏 + */ + onHide: function () { + + }, + + /** + * 生命周期函数--监听页面卸载 + */ + onUnload: function () { + + }, + + /** + * 页面相关事件处理函数--监听用户下拉动作 + */ + onPullDownRefresh: function () { + + }, + + /** + * 页面上拉触底事件的处理函数 + */ + onReachBottom: function () { + + }, + + /** + * 用户点击右上角分享 + */ + onShareAppMessage: function () { + + }, + getacctoken: function () { + const that = this; + let url = Apps.globalData.baseUrl + '/user/acctoken'; + var param = { + pareid: '1213' + }; + //此处为使用封装的post请求 + util.get(url, param).then((res) => { + console.log(res.access_token); + wx.setStorageSync('accesstoen', res.access_token) + that.setData({ + accesstoken: res.access_token + }); + + }).catch((errMsg) => { + console.log(errMsg); + }); + }, + formSubmit: function (e) { + + if(wx.getStorageSync('userisblack')>=2){ + this.isjumpblack(); + return; + } + + let content = this.data.wordstextname; + console.log(content) + if (content == '') { + wx.showToast({ + title: '留言内容为空,请填写内容', + icon: 'none', + duration: 1500 + }) + return false; + } + console.log(this.data.imagestr); + // this.wordsadd(content,this.data.imagestr); + this.getmsgcheck(content, this.data.accesstoken); + wx.setStorageSync('jmparm', this.data.typeid); + wx.navigateTo({ + url: '/pages/indexclasssubwork/indexclasssubwork', + }) + + }, + getmsgcheck: function (params, accesstoken) { + // $url ='https://api.weixin.qq.com/wxa/msg_sec_check?access_token=' .$accessToken; + const that = this; + // let url = 'https://api.weixin.qq.com/wxa/msg_sec_check?access_token='+wx.getStorageSync('accesstoen'); + let url = Apps.globalData.baseUrl + '/user/checkmsg' + var param = { + "openid": wx.getStorageSync('wxopenid'), + "scene": 2, + "version": 2, + "content": params, + "access_token": wx.getStorageSync('accesstoen') + }; + //此处为使用封装的post请求 + util.post(url, param).then((res) => { + + console.log(res); + console.log(res.errcode); + if (res.errcode == "0") { + that.wordsadd(params, that.data.imagestr) + } else { + + wx.showToast({ + title: '留言内容有敏感词请重新输入',//提示文字 + duration: 2000,//显示时长 + mask: true,//是否显示透明蒙层,防止触摸穿透,默认:false + icon: 'none', //图标,支持"success"、"loading" + success: function () { },//接口调用成功 + fail: function () { }, //接口调用失败的回调函数 + complete: function () { } //接口调用结束的回调函数 + }) + } + + }).catch((errMsg) => { + console.log(errMsg); + }); + }, + uploadpic: function () { + var that = this; + let imagesList = []; + let maxSize = 1024 * 1024; + let maxLength = 6; + let flag = true; + wx.chooseImage({ + count: 9, //最多可以选择的图片总数 + sizeType: ['original', 'compressed'], // 可以指定是原图还是压缩图,默认二者都有 + sourceType: ['album', 'camera'], // 可以指定来源是相册还是相机,默认二者都有 + success: function (res) { + wx.showToast({ + title: '正在上传...', + icon: 'loading', + mask: true, + duration: 500 + }) + for (let i = 0; i < res.tempFiles.length; i++) { + if (res.tempFiles[i].size > maxSize) { + flag = false; + console.log(111) + wx.showModal({ + content: '图片太大,不允许上传', + showCancel: false, + success: function (res) { + if (res.confirm) { + console.log('用户点击确定') + } + } + }); + } + } + if (res.tempFiles.length > maxLength) { + console.log('222'); + wx.showModal({ + content: '最多能上传' + maxLength + '张图片', + showCancel: false, + success: function (res) { + if (res.confirm) { + console.log('确定'); + } + } + }) + } + if (flag == true && res.tempFiles.length <= maxLength) { + that.setData({ + imagesListp: res.tempFilePaths + }) + that.data.imagestr = []; + var arr = ''; + for (let i = 0; i < that.data.imagesListp.length; i++) { + wx.uploadFile({ + url: Apps.globalData.baseUrl + '/indexclasslistsubwork/uploadpics', + filePath: that.data.imagesListp[i], + name: 'file', + success: function (res) { + //打印 + console.log("------------响应数据:"); + console.log(res.data); + + var message = JSON.parse(res.data); + that.data.imagestr.push(message); + that.setData({ + imagestr: that.data.imagestr + }); + }, + }) + + } + + + } + console.log(res); + }, + fail: function (res) { + console.log(res); + } + }) + + }, + // 删除图片 + removeChooseImage(e) { + let imgs = this.data.imagestr; + let { index } = e.currentTarget.dataset; + imgs.splice(index, 1); + this.setData({ + imagestr: imgs + }) + }, + // 预览图片 + previewBigImage(e) { + let that = this; + let imgs = that.data.imagestr; + let index = e.currentTarget.dataset.index; + let arr = []; + imgs.forEach(function (item, index) { + arr[index] = that.data.baseurl + item + }); + wx.previewImage({ + //当前显示图片 + current: arr[index], + //所有图片 + urls: arr + }) + }, + wordsadd: function (content, imagestr) { + + const that = this; + let url = Apps.globalData.baseUrl + '/indexclasslistsubwork/wordsxqadd'; + var param = { + content: content, + imagestr: imagestr, + userid: wx.getStorageSync('wxuserid') == '' ? 3 : wx.getStorageSync('wxuserid'), + wordstype_ids: this.data.typeid, + indexclasslist_id:this.data.typeid + }; + //此处为使用封装的post请求 + util.post(url, param).then((res) => { + console.log(res.data); + if (res.data > 0) { + wx.showToast({ + title: '留言内容成功', + icon: 'none', + duration: 1500 + }) + // this.getwords(that.data.typeid); + wx.redirectTo({ + url: '/pages/indexclasssubwork/indexclasssubwork?id='+that.data.typeid, + }) + that.setData({ + wordstextname: '', + imagestr: [] + }) + + } + + }).catch((errMsg) => { + console.log(errMsg); + }); + } +}) \ No newline at end of file diff --git a/pages/indexcreatewordssubwork/indexcreatewordssubwork.json b/pages/indexcreatewordssubwork/indexcreatewordssubwork.json new file mode 100644 index 0000000..83f1885 --- /dev/null +++ b/pages/indexcreatewordssubwork/indexcreatewordssubwork.json @@ -0,0 +1,8 @@ +{ + "usingComponents": {}, + "navigationBarBackgroundColor": "#fff", + "navigationBarTextStyle": "black", + "navigationBarTitleText": "用户发帖", + "backgroundColor": "#ccc", + "backgroundTextStyle": "light" +} \ No newline at end of file diff --git a/pages/indexcreatewordssubwork/indexcreatewordssubwork.wxml b/pages/indexcreatewordssubwork/indexcreatewordssubwork.wxml new file mode 100644 index 0000000..550f38b --- /dev/null +++ b/pages/indexcreatewordssubwork/indexcreatewordssubwork.wxml @@ -0,0 +1,22 @@ + +
+ + + + + + + + + + + + + + + + + + + +
\ No newline at end of file diff --git a/pages/indexcreatewordssubwork/indexcreatewordssubwork.wxss b/pages/indexcreatewordssubwork/indexcreatewordssubwork.wxss new file mode 100644 index 0000000..ac02ede --- /dev/null +++ b/pages/indexcreatewordssubwork/indexcreatewordssubwork.wxss @@ -0,0 +1,92 @@ +.areaclass { + width: 540rpx; + min-height: 300rpx; + margin: 0 auto; + margin-top: 80rpx; + background-color: #f0f0f1; + border-radius: 5%; +} + +.areaclass textarea { + width: 540rpx; + min-height: 300rpx; +} + + +.areafooter { + display: flex; + align-items: center; + justify-content: space-between; + width: 540rpx; + height: 60rpx; + margin: 0 auto; + margin-top: 10rpx; +} + +.areafooterleft image { + + width: 52rpx; + height: 52rpx; + +} + +.areafooterright text { + font-size: 28rpx; + font-weight: 600; + color: #217ced; +} + +.areafooterright { + width: 120rpx; + height: 56rpx; +} + +.areafooterright button { + + width: 120rpx; + height: 50rpx; + line-height: 50rpx; + font-size: 28rpx; + font-weight: 600; + color: #217ced; + border: none; +} + + + +.choose_upload_view { + margin-top: 30rpx; + margin-left: 10%; + flex: 1; + height: 100%; + display: flex; + align-items: center; + justify-content: flex-start; + flex-wrap: wrap; +} +.choose_upload_item { + margin-left: 38rpx; + margin-bottom: 20rpx; + position: relative; + width: 100rpx; + display: flex; + align-items: center; +} +.choose_upload_view .choose_upload_img { + width: 100rpx; + height: 100rpx; +} +.choose_upload_view .remove_img_icon { + padding: 4rpx; + position:absolute; + top: -15rpx; + right: -13rpx; + width: 28rpx; + height: 28rpx; + border-radius: 50%; + background-color: rgba(248, 236, 236, 0.5); +} +.other_upload { + margin-left: 15rpx; + width: 80rpx; +} \ No newline at end of file diff --git a/pages/indexjobtask/indexjobtask.js b/pages/indexjobtask/indexjobtask.js new file mode 100644 index 0000000..55c879d --- /dev/null +++ b/pages/indexjobtask/indexjobtask.js @@ -0,0 +1,121 @@ +const baseUrl = getApp(); +const api = require('../../config/api.js'); +const util = require('../../config/util.js'); +const utiltime = require('../../utils/util.js'); +Page({ + + data: { + date: '', + pareid: 1, + listdata: [], + spot: [], + indexclassid: 1, + workdate: [], + mycnt: 0 + }, + dateChange: function (e) { + + this.getindexclassindex(this.data.indexclassid, e.detail.dateString); + + this.setData({ + dateString: e.detail.dateString, + workdate: e.detail.dateString + }) + }, + /* + * 生命周期函数--监听页面加载 + */ + onLoad(options) { + var timeNow = utiltime.formatDate(new Date()); + this.getindexclassindexbyworkitem(options.id); + this.getindexclassindex(options.id, timeNow); + this.setData({ + indexclassid: options.id, + date: timeNow, + spot: timeNow + }); + }, + + /** + * 生命周期函数--监听页面初次渲染完成 + */ + onReady() { + + }, + + /** + * 生命周期函数--监听页面显示 + */ + onShow() { + this.getindexclassindex(this.data.indexclassid, this.data.workitem); + }, + getindexclassindexbyworkitem: function (indexclassid) { + + const that = this; + let url = baseUrl.globalData.baseUrl + '/indexclass/indexclasslistres2'; + var param = { + indexclasslist_id: indexclassid + }; + //此处为使用封装的post请求 + util.get(url, param).then((res) => { + that.setData({ + spot: res.data.workitem + }); + + }).catch((errMsg) => { + console.log(errMsg); + }); + }, + getindexclassindex: function (indexclassid, workdate) { + const that = this; + let url = baseUrl.globalData.baseUrl + '/indexclass/indexclasslistres'; + var param = { + indexclasslist_id: indexclassid, + workdate: workdate + }; + //此处为使用封装的post请求 + util.get(url, param).then((res) => { + that.setData({ + listdata: res.data.data, + mycnt: res.data.cnt + }); + + }).catch((errMsg) => { + console.log(errMsg); + }); + }, + /** + * 生命周期函数--监听页面隐藏 + */ + onHide() { + + }, + + /** + * 生命周期函数--监听页面卸载 + */ + onUnload() { + + }, + + /** + * 页面相关事件处理函数--监听用户下拉动作 + */ + onPullDownRefresh() { + + }, + + /** + * 页面上拉触底事件的处理函数 + */ + onReachBottom() { + + }, + + /** + * 用户点击右上角分享 + */ + onShareAppMessage() { + + } +}) \ No newline at end of file diff --git a/pages/indexjobtask/indexjobtask.json b/pages/indexjobtask/indexjobtask.json new file mode 100644 index 0000000..33e0824 --- /dev/null +++ b/pages/indexjobtask/indexjobtask.json @@ -0,0 +1,11 @@ +{ + "usingComponents": { + "calendar": "../../components/calendar/calendar" + }, + + "navigationBarBackgroundColor": "#fff", + "navigationBarTextStyle": "black", + "navigationBarTitleText": "作业任务", + "backgroundColor": "#ccc", + "backgroundTextStyle": "light" +} \ No newline at end of file diff --git a/pages/indexjobtask/indexjobtask.wxml b/pages/indexjobtask/indexjobtask.wxml new file mode 100644 index 0000000..72f8df1 --- /dev/null +++ b/pages/indexjobtask/indexjobtask.wxml @@ -0,0 +1,13 @@ + + + + + {{item.workres}} + + + + + + + + \ No newline at end of file diff --git a/pages/indexjobtask/indexjobtask.wxss b/pages/indexjobtask/indexjobtask.wxss new file mode 100644 index 0000000..3be79de --- /dev/null +++ b/pages/indexjobtask/indexjobtask.wxss @@ -0,0 +1,87 @@ +.collectionitems { + width: 680rpx; + height: 160rpx; + margin: 0 auto; + margin-top: 10rpx; + background: url('https://ndnd.duiduiedu.com/uploads/pics/itemlistred.png') no-repeat; + background-size: cover; + + display: flex; + flex-direction: row; + justify-content: space-between; + align-items: center; + margin-bottom: 10rpx; +} + +.collectionitems2 { + width: 680rpx; + height: 160rpx; + margin: 0 auto; + margin-top: 10px; + background: url('https://ndnd.duiduiedu.com/uploads/pics/itemlistblue.png') no-repeat; + background-size: cover; + + display: flex; + flex-direction: row; + justify-content: space-between; + align-items: center; + margin-bottom: 10rpx; +} + +.item1 { + width: 80%; + display: flex; + flex-direction: column; +} + +.item1 text { + width: 100%; + margin-left: 65rpx; + color: black; + font-size: 32rpx; +} + +.item2 { + width: 10%; + text-align: right; +} + +.item2 text { + color: black; + font-size: 30rpx; +} + +.item3 { + width: 20%; + text-align: center; +} + +.item3 image { + width: 54rpx; + height: 53rpx; + margin-right: 50rpx; +} + +.itemsup { + width: 620rpx; + height: 62rpx; + background-color: #dfe2e2; + margin-left: 50rpx; + display: flex; + flex-direction: row; + justify-content: flex-start; + align-items: center; + border-bottom: 1rpx solid #fff; +} + +.itemsup2 { + width: 620rpx; + height: 62rpx; + background-color: #dfe2e2; + margin-left: 50rpx; + display: flex; + flex-direction: row; + justify-content: flex-start; + align-items: center; + display: none; +} \ No newline at end of file diff --git a/pages/indexlives/indexlives.js b/pages/indexlives/indexlives.js new file mode 100644 index 0000000..3879a7e --- /dev/null +++ b/pages/indexlives/indexlives.js @@ -0,0 +1,153 @@ +const baseUrl = getApp(); +const api = require('../../config/api.js'); +const util = require('../../config/util.js'); +Page({ + + /** + * 页面的初始数据 + */ + data: { + liveswitch: 1, + hiddenName: false, + listdata: [], + baseurl: baseUrl.globalData.baseimgurl, + + }, + + /** + * 生命周期函数--监听页面加载 + */ + onLoad: function (options) { + wx.getChannelsLiveInfo({ + finderUserName: 'sph1',// 这里是视频号id + success: res => { + console.log('success:', res) + }, + fail: res => { + console.log('fail:', res) + } + }) + }, + + /** + * 生命周期函数--监听页面初次渲染完成 + */ + onReady: function () { + + }, + + /** + * 生命周期函数--监听页面显示 + */ + onShow: function () { + this.getlivelist(); + }, + + /** + * 生命周期函数--监听页面隐藏 + */ + onHide: function () { + + }, + getlivelist: function () { + const that = this; + let url = baseUrl.globalData.baseUrl + '/lives/liveslist'; + var param = { + id: '123456789' + }; + //此处为使用封装的post请求 + util.get(url, param).then((res) => { + console.log(res); + that.setData({ + listdata: res.data + }); + + }).catch((errMsg) => { + console.log(errMsg); + }); + }, + /** + * 生命周期函数--监听页面卸载 + */ + onUnload: function () { + + }, + clicklives: function (e) { + console.log(e.currentTarget.id); + console.log(e.currentTarget.dataset.ids); + const typeid = e.currentTarget.dataset.ids; + const id = e.currentTarget.id; + if (typeid == 0) { + wx.navigateTo({ + url: '/pages/indexlivesvoid/indexlivesvoid?id=' + id, + }) + } else { + wx.navigateTo({ + url: '/pages/indexcourselearning/indexcourselearning?id=' + e.currentTarget.id, + }) + } + + }, + + /** + * 页面相关事件处理函数--监听用户下拉动作 + */ + onPullDownRefresh: function () { + + }, + + /** + * 页面上拉触底事件的处理函数 + */ + onReachBottom: function () { + + }, + + /** + * 用户点击右上角分享 + */ + onShareAppMessage: function () { + + }, + liveopen(e) { + let arr = []; + arr = this.data.listdata; + console.log(e.currentTarget.dataset.itemid); + arr.forEach(function (item, index) { + + if (index == e.currentTarget.dataset.itemid) { + item['liveclickopen'] = true; + item['liveclickclose'] = false; + arr[index] = item; + } else { + item['liveclickopen'] = false; + item['liveclickclose'] = true; + arr[index] = item + } + }) + this.setData({ + listdata: arr + }) + }, + liveclose(e) { + + let arr = []; + arr = this.data.listdata; + console.log(e.currentTarget.dataset.itemid); + arr.forEach(function (item, index) { + + if (index == e.currentTarget.dataset.itemid) { + item['liveclickopen'] = false; + item['liveclickclose'] = true; + arr[index] = item; + } else { + item['liveclickopen'] = true; + item['liveclickclose'] = false; + arr[index] = item + } + }) + this.setData({ + listdata: arr + }) + } +}) \ No newline at end of file diff --git a/pages/indexlives/indexlives.json b/pages/indexlives/indexlives.json new file mode 100644 index 0000000..598f07e --- /dev/null +++ b/pages/indexlives/indexlives.json @@ -0,0 +1,8 @@ +{ + "usingComponents": {}, + "navigationBarBackgroundColor": "#fff", + "navigationBarTextStyle": "black", + "navigationBarTitleText": "直播列表", + "backgroundColor": "#ccc", + "backgroundTextStyle": "light" + } \ No newline at end of file diff --git a/pages/indexlives/indexlives.wxml b/pages/indexlives/indexlives.wxml new file mode 100644 index 0000000..d082f31 --- /dev/null +++ b/pages/indexlives/indexlives.wxml @@ -0,0 +1,25 @@ + + + + + + + + +

{{item.name}}

+
+ + {{item.intro}} + +
+ + + + + + + + + +
+
\ No newline at end of file diff --git a/pages/indexlives/indexlives.wxss b/pages/indexlives/indexlives.wxss new file mode 100644 index 0000000..16a0c68 --- /dev/null +++ b/pages/indexlives/indexlives.wxss @@ -0,0 +1,191 @@ +.page { + background-color: #f5f5f5; + overflow: hidden; +} + +.zhibocss { + display: flex; + flex-wrap: wrap; + align-content: flex-start; + height: 200rpx; + width: 690rpx; + margin: 0 auto; + margin-top: 50rpx; + background: url(https://ndnd.duiduiedu.com/uploads/pics/line.png); + background-repeat: no-repeat; + background-size: 690rpx 190rpx; + +} + +.livefooter { + height: 23rpx; + width: 623rpx; + margin: 0 auto; + margin-top: -9rpx; +} + +.livefooter image { + + width: 623rpx; + height: 23rpx; + +} + + +.itemhead { + margin-top: 20rpx; + margin-left: 20rpx; +} + +.itemhead h2 { + + font-weight: 800; + font-family: 'Arial Narrow', Arial; + font-size: large; +} + + +.item2 { + margin-left: 10rpx; + margin-top: 10rpx; + width: 160rpx; + height: 160rpx; +} + +.item2 image { + margin-top: 10rpx; + margin-left: 10rpx; + width: 141rpx; + height: 141rpx; + border-radius: 5rpx; +} + +.item3 { + + width: 304rpx; + height: 170rpx; + padding-right: 20rpx; +} + +.item4 { + margin-top: 10rpx; + width: 190rpx; + height: 180rpx; +} + +.itemup image { + margin-top: 10rpx; + width: 190rpx; + height: 61rpx; +} + +.itemdown image { + margin-top: 10rpx; + width: 190rpx; + height: 68rpx; +} + +.itemmiddle { + display: flex; + margin-left: 15rpx; + width: 334rpx; + height: 50rpx; +} + +.itemmiddleleft { + display: flex; + margin-top: 10rpx; + flex-direction: row; +} + +.itemmiddleleft text { + color: #AEAEAE; + align-items: center; + font-size: 24rpx; + font-weight: 400; +} + +.itemmiddleleft image { + + width: 30rpx; + height: 30rpx; + padding-right: 10rpx; +} + +.itemmiddleright { + display: flex; + margin-top: 10rpx; + margin-left: 10rpx; + flex-direction: row; +} + +.itemmiddleright text { + color: #AEAEAE; + align-items: center; + font-size: 24rpx; + font-weight: 400; +} + +.itemmiddleright image { + + width: 30rpx; + height: 30rpx; + padding-right: 10rpx; +} + +.itemend { + width: 300rpx; + overflow: hidden; + height: 80rpx; + color: #AEAEAE; + line-height: 28rpx; + margin-bottom: 10rpx; + margin-left: 20rpx; + margin-top: 10rpx; + font-size: 24rpx; +} + +.content { + margin: 0 auto; + width: 632rpx; + border-left: 2rpx solid red; + border-right: 2rpx solid red; +} + +.contentdown { + margin: 0 auto; + width: 650rpx; + height: 23rpx; + margin-top: -9rpx; +} + +.contentdown image { + margin: 0 auto; + width: 648rpx; + height: 23rpx; +} + +.contentmiddle { + margin: 0 auto; + margin-top: 50rpx; + width: 530rpx; +} + +.contentmiddle text { + font-size: 22rpx; + padding-bottom: 30rpx; + +} + +.contentup { + margin: 0 auto; + width: 555rpx; +} + +.contentup image { + width: 100%; + + margin: 0 auto; + margin-top: 30rpx; + height: 160rpx; +} \ No newline at end of file diff --git a/pages/indexlivesvoid/indexlivesvoid.js b/pages/indexlivesvoid/indexlivesvoid.js new file mode 100644 index 0000000..41b86d0 --- /dev/null +++ b/pages/indexlivesvoid/indexlivesvoid.js @@ -0,0 +1,143 @@ +const baseUrl = getApp(); +const api = require('../../config/api.js'); +const util = require('../../config/util.js'); +Page({ + + onReady: function (e) { + // 使用 wx.createAudioContext 获取 audio 上下文 context + this.audioCtx = wx.createAudioContext('myAudio') + }, + /** + * 页面的初始数据 + */ + data: { + detailid: 0, + voddetail: [], + autodetail: [], + baseurl: baseUrl.globalData.baseimgurl, + replylist:[] + }, + audioPlay: function () { + this.audioCtx.play() + }, + audioPause: function () { + this.audioCtx.pause() + }, + audio14: function () { + this.audioCtx.seek(14) + }, + audioStart: function () { + this.audioCtx.seek(0) + }, + funplay: function () { + console.log("audio play"); + }, + funpause: function () { + console.log("audio pause"); + }, + funtimeupdate: function (u) { + console.log(u.detail.currentTime); + console.log(u.detail.duration); + }, + funended: function () { + console.log("audio end"); + }, + funerror: function (u) { + console.log(u.detail.errMsg); + }, + preview: function (params) { + console.log(params); + let that = this; + let currentUrl = params.currentTarget.dataset.src; + let arrindex = params.currentTarget.dataset.id; + let picsid = params.currentTarget.dataset.pics; //单条信息ID + console.log(picsid); + + let arr = []; + arr[0] = that.data.baseurl + picsid + console.log('-----'); + console.log(arr); + + wx.previewImage({ + current: currentUrl, // 当前显示图片的http链接 + urls: arr // 需要预览的图片http链接列表 + }) + }, + /** + * 生命周期函数--监听页面加载 + */ + onLoad: function (options) { + console.log(options); + this.setData({ + detailid: options.id + }) + }, + + /** + * 生命周期函数--监听页面初次渲染完成 + */ + onReady: function () { + + }, + + /** + * 生命周期函数--监听页面显示 + */ + onShow: function () { + let id = this.data.detailid; + this.msgdetail(id); + }, + + /** + * 生命周期函数--监听页面隐藏 + */ + onHide: function () { + + }, + + /** + * 生命周期函数--监听页面卸载 + */ + onUnload: function () { + + }, + + /** + * 页面相关事件处理函数--监听用户下拉动作 + */ + onPullDownRefresh: function () { + + }, + + /** + * 页面上拉触底事件的处理函数 + */ + onReachBottom: function () { + + }, + + /** + * 用户点击右上角分享 + */ + onShareAppMessage: function () { + + }, + msgdetail: function (e) { + + const that = this; + let url = baseUrl.globalData.baseUrl + '/res/msgdetail'; + var param = { + id: e + }; + //此处为使用封装的post请求 + util.post(url, param).then((res) => { + console.log(res); + that.setData({ + voddetail: res.data + }); + + }).catch((errMsg) => { + console.log(errMsg); + }); + } +}) \ No newline at end of file diff --git a/pages/indexlivesvoid/indexlivesvoid.json b/pages/indexlivesvoid/indexlivesvoid.json new file mode 100644 index 0000000..85c0317 --- /dev/null +++ b/pages/indexlivesvoid/indexlivesvoid.json @@ -0,0 +1,8 @@ +{ + "usingComponents": {}, + "navigationBarBackgroundColor": "#fff", + "navigationBarTextStyle": "black", + "navigationBarTitleText": "直播", + "backgroundColor": "#ccc", + "backgroundTextStyle": "light" + } \ No newline at end of file diff --git a/pages/indexlivesvoid/indexlivesvoid.wxml b/pages/indexlivesvoid/indexlivesvoid.wxml new file mode 100644 index 0000000..70bfca2 --- /dev/null +++ b/pages/indexlivesvoid/indexlivesvoid.wxml @@ -0,0 +1,94 @@ + + + + + + + + + + + + + + + + + + + + + {{voddetail['intro']}} + + + + + + + + + + + \ No newline at end of file diff --git a/pages/indexlivesvoid/indexlivesvoid.wxss b/pages/indexlivesvoid/indexlivesvoid.wxss new file mode 100644 index 0000000..d0ad4e8 --- /dev/null +++ b/pages/indexlivesvoid/indexlivesvoid.wxss @@ -0,0 +1,199 @@ +.courselive { + width: 750rpx; + height: 403rpx; + } + + .courselivecontinor { + background-color: #F5F5F5; + } + + .functionalarea { + display: flex; + flex-flow: row wrap; + align-content: flex-start; + width: 750rpx; + } + + .areaitem { + display: flex; + flex-direction: column; + width: 666rpx; + height: 100rpx; + margin: 0 auto; + margin-top: 20rpx; + } + + .areaitemup { + width: 100%; + height: 60rpx; + margin-top: 30rpx; + text-align: center; + } + + .areaitemdown { + width: 100%; + height: 60rpx; + } + + .percentageclass { + margin: 0 auto; + margin-top: 35rpx; + width: 412rpx; + } + + .messagearea text { + display: block; + font-size: 40rpx; + font-weight: 600rpx; + margin-left: 60rpx; + margin-top: 60rpx; + } + + .msseagehead { + display: flex; + flex-direction: row; + } + + .headleft { + margin-left: 60rpx; + margin-top: 50rpx; + width: 140rpx; + height: 140rpx; + border-radius: 50%; + overflow: hidden; + } + + .headleft image { + + width: 130rpx; + height: 133rpx; + } + + .headright { + margin-top: 80rpx; + margin-left: 23rpx; + width: 200rpx; + height: 142rpx; + } + + .headrightup text { + + height: 40rpx; + width: 100rpx; + overflow: hidden; + font-size: 40rpx; + font-weight: 400rpx; + } + + .headrightdown { + margin-top: 10rpx; + } + + .msseagemiddle { + margin: 0 60rpx; + } + + .mssagemiddledown { + margin: 25rpx auto; + } + + .mssagemiddledown image { + + width: 100%; + height: 265rpx; + } + + .messageend { + + margin: 0 60rpx; + display: flex; + flex-direction: row; + justify-content: space-between; + + } + + .messageendleft { + width: 150rpx; + height: 30rpx; + } + + .messageendleft image { + width: 100rpx; + height: 30rpx; + } + + .messageendmiddle { + width: 150rpx; + height: 30rpx; + } + + .messageendmiddle image { + width: 35rpx; + height: 30rpx; + } + + .messageendmiddle text { + + font-size: 28rpx; + padding-left: 23rpx; + } + + .messageendright { + + width: 150rpx; + height: 30rpx; + } + + .messageendright image { + width: 35rpx; + height: 30rpx; + + } + + .messageendright text { + + font-size: 28rpx; + padding-left: 23rpx; + } + + .feigexian { + + margin: 0 60rpx; + margin-top: 60rpx; + border-bottom: 2rpx solid #ada2a2; + } + + .functionalarea { + margin-top: 0rpx; + } + + .paybtnclass { + margin-right: 80rpx; + } + + .adsclass { + + width: 666rpx; + margin: 0 auto; + background-color: #dbfeff; + height: 100%; + margin-top: 80rpx; + } + + .adsclassup image { + + width: 666rpx; + /* height: 285rpx; */ + /* height: 100%; */ + } + + .adsclassdown { + + width: 580rpx; + margin: 0 auto; + } + + .adsclassdown text { + margin-left: 30rpx; + font-size: 30rpx; + } \ No newline at end of file diff --git a/pages/indexobjectactivelist/indexobjectactivelist.js b/pages/indexobjectactivelist/indexobjectactivelist.js new file mode 100644 index 0000000..e104ce8 --- /dev/null +++ b/pages/indexobjectactivelist/indexobjectactivelist.js @@ -0,0 +1,123 @@ +const baseUrl = getApp(); +const api = require('../../config/api.js'); +const util = require('../../config/util.js'); +Page({ + + /** + * 页面的初始数据 + */ + data: { + messagelist:[], + baseurl:baseUrl.globalData.baseimgurl, + indexclassid:1 + }, + + /** + * 生命周期函数--监听页面加载 + */ + onLoad: function (options) { + console.log(options.id); + this.setData({ + indexclassid:options.id + }) + }, + + /** + * 生命周期函数--监听页面初次渲染完成 + */ + onReady: function () { + + }, + + /** + * 生命周期函数--监听页面显示 + */ + onShow: function () { + this.msglist(this.data.indexclassid); + }, + + /** + * 生命周期函数--监听页面隐藏 + */ + onHide: function () { + + }, + + /** + * 生命周期函数--监听页面卸载 + */ + onUnload: function () { + + }, + + /** + * 页面相关事件处理函数--监听用户下拉动作 + */ + onPullDownRefresh: function () { + + }, + + /** + * 页面上拉触底事件的处理函数 + */ + onReachBottom: function () { + + }, + + /** + * 用户点击右上角分享 + */ + onShareAppMessage: function () { + + }, + messageinfo:function(e){ + console.log("fan----------------"); + console.log(e); + let id=e.currentTarget.id; + this.msgadd(id); + + wx.navigateTo({ + url: '/pages/indexobjectivework/indexobjectivework?id='+id, + }) + }, + msgadd:function (params) { + + + const that = this; + let url = baseUrl.globalData.baseUrl + '/examobjectactive/examaddobjectactive'; + var param = { + user_id: wx.getStorageSync('wxuserid'), + examobjectactive_id:params + }; + //此处为使用封装的post请求 + util.post(url, param).then((res) => { + + console.log(param); + console.log(res); + + + }).catch((errMsg) => { + console.log(errMsg); + }); + + + }, + msglist:function(params){ + + const that = this; + let url = baseUrl.globalData.baseUrl + '/examobjectactive/examobjectactivelist'; + var param = { + id: params + }; + //此处为使用封装的post请求 + util.get(url, param).then((res) => { + console.log(res); + that.setData({ + messagelist: res.data + }); + + }).catch((errMsg) => { + console.log(errMsg); + }); + } +}) \ No newline at end of file diff --git a/pages/indexobjectactivelist/indexobjectactivelist.json b/pages/indexobjectactivelist/indexobjectactivelist.json new file mode 100644 index 0000000..ed04cfa --- /dev/null +++ b/pages/indexobjectactivelist/indexobjectactivelist.json @@ -0,0 +1,8 @@ +{ + "usingComponents": {}, + "navigationBarBackgroundColor": "#fff", + "navigationBarTextStyle": "black", + "navigationBarTitleText": "客观题列表", + "backgroundColor": "#ccc", + "backgroundTextStyle": "light" +} \ No newline at end of file diff --git a/pages/indexobjectactivelist/indexobjectactivelist.wxml b/pages/indexobjectactivelist/indexobjectactivelist.wxml new file mode 100644 index 0000000..9cde991 --- /dev/null +++ b/pages/indexobjectactivelist/indexobjectactivelist.wxml @@ -0,0 +1,12 @@ + + + + + + + {{item.name}} + {{item.intro}} + + + + diff --git a/pages/indexobjectactivelist/indexobjectactivelist.wxss b/pages/indexobjectactivelist/indexobjectactivelist.wxss new file mode 100644 index 0000000..1c7b3fb --- /dev/null +++ b/pages/indexobjectactivelist/indexobjectactivelist.wxss @@ -0,0 +1,62 @@ +.messagelist { + display: flex; + flex-direction: row; + width: 678rpx; + height: 100rpx; + margin: 0 auto; + margin-top: 35rpx; + border-radius: 3%; + border: 1rpx solid #22d0d7; + background-color: #dbfcfa; +} + +.messagelist2 { + display: flex; + flex-direction: row; + width: 678rpx; + height: 100rpx; + margin: 0 auto; + margin-top: 35rpx; + border-radius: 3%; + border: 1rpx solid #fd7bb2; + background-color: #ffe6f3; +} + +.listleft { + + width: 12rpx; + height: 123; + margin: 23rpx 10rpx; +} + +.listleft image { + + width: 192rpx; + height: 123rpx; +} + +.listright { + width: 600rpx; + height: 123rpx; + margin: 23rpx 20rpx; +} + +.listrightup { + width: 600rpx; + overflow: hidden; + height: 50rpx; + line-height: 50rpx; +} + +.listrightup text { + width: 600rpx; + overflow: hidden; + font-size: 30rpx; + font-weight: 600; +} + +.listrightdown text { + width: 600rpx; + overflow: hidden; + font-size: 26rpx; +} \ No newline at end of file diff --git a/pages/indexobjectactiveworkok/indexobjectactiveworkok.js b/pages/indexobjectactiveworkok/indexobjectactiveworkok.js new file mode 100644 index 0000000..d7868da --- /dev/null +++ b/pages/indexobjectactiveworkok/indexobjectactiveworkok.js @@ -0,0 +1,126 @@ +const baseUrl = getApp(); +const api = require('../../config/api.js'); +const util = require('../../config/util.js'); +Page({ + + /** + * 页面的初始数据---练习题查看交卷 + */ + data: { + title:'练习完成', + coursetypefour_id:1, + grouppaper_id:1, + listdata:[], + list:[] + }, + + /** + * 生命周期函数--监听页面加载 + */ + onLoad: function (options) { + + console.log(options.coursetypefour_id); + this.setData({ + coursetypefour_id:options.coursetypefour_id + }); + }, + + /** + * 生命周期函数--监听页面初次渲染完成 + */ + onReady: function () { + + }, + getexamobjectactiovename: function (id) { + //得到试卷名称 + const that = this; + let url = baseUrl.globalData.baseUrl + '/examobjectactive/getexamobjectactiovename'; + var param = { + id: id, + }; + //此处为使用封装的post请求 + util.post(url, param).then((res) => { + + wx.setNavigationBarTitle({ + title: res.data["name"], + }) + + }).catch((errMsg) => { + console.log(errMsg); + }); + }, + /** + * 生命周期函数--监听页面显示 + */ + onShow: function () { + this.getexamright(); + this.getexamobjectactiovename(this.data.coursetypefour_id); + }, + + /** + * 生命周期函数--监听页面隐藏 + */ + onHide: function () { + + }, + + /** + * 生命周期函数--监听页面卸载 + */ + onUnload: function () { + + }, + + /** + * 页面相关事件处理函数--监听用户下拉动作 + */ + onPullDownRefresh: function () { + + }, + + /** + * 页面上拉触底事件的处理函数 + */ + onReachBottom: function () { + + }, + + /** + * 用户点击右上角分享 + */ + onShareAppMessage: function () { + + }, + getexamright:function() { + //得到练习题目 + const that = this; + let url = baseUrl.globalData.baseUrl + '/examobjectactive/examuseranswer'; + let user_id=wx.getStorageSync('wxuserid')==''?3:wx.getStorageSync('wxuserid'); + var param = { + coursetypefour_id: that.data.coursetypefour_id, + user_id:user_id + }; + //此处为使用封装的post请求 + util.post(url, param).then((res) => { + console.log(res.data); + that.setData({ + list:res.data.itemdata, + listdata:res.data + }); + + }).catch((errMsg) => { + console.log(errMsg); + }); + }, + viewallexplain:function(params) { + console.log(params); + console.log(this.data.coursetypefour_id); + let typeid=params.currentTarget.id; + let coursetypefour_id=this.data.coursetypefour_id; + let grouppaper_id=this.data.grouppaper_id; + wx.navigateTo({ + url: '/pages/examanalysis/examanalysis?id='+typeid+'&coursetypefour_id='+coursetypefour_id+'&grouppaper_id='+grouppaper_id, + }) + } + +}) \ No newline at end of file diff --git a/pages/indexobjectactiveworkok/indexobjectactiveworkok.json b/pages/indexobjectactiveworkok/indexobjectactiveworkok.json new file mode 100644 index 0000000..4c8a691 --- /dev/null +++ b/pages/indexobjectactiveworkok/indexobjectactiveworkok.json @@ -0,0 +1,4 @@ +{ + "usingComponents": {}, + "navigationBarTitleText": "练习完成" +} \ No newline at end of file diff --git a/pages/indexobjectactiveworkok/indexobjectactiveworkok.wxml b/pages/indexobjectactiveworkok/indexobjectactiveworkok.wxml new file mode 100644 index 0000000..3e14f64 --- /dev/null +++ b/pages/indexobjectactiveworkok/indexobjectactiveworkok.wxml @@ -0,0 +1,39 @@ + + + + + + + + + + + + + {{listdata.grouppapername}}(正确率{{listdata.rightdata}}%) + + + + + + + + {{index+1}} + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/pages/indexobjectactiveworkok/indexobjectactiveworkok.wxss b/pages/indexobjectactiveworkok/indexobjectactiveworkok.wxss new file mode 100644 index 0000000..efbe5d3 --- /dev/null +++ b/pages/indexobjectactiveworkok/indexobjectactiveworkok.wxss @@ -0,0 +1,158 @@ +/* pages/exampaper2/exampaper2.wxss *//* 交卷头部 */ +.exampaperhead { + width: 100%; + height: 225rpx; + border-bottom: 16rpx solid #e6e2e2; + background-color: #f5f5f5; +} + +.headup { + display: flex; + justify-content: center; + align-items: center; + width: 100%; + height: 100rpx; + padding-top: 60rpx; +} + +.headup text { + font-size: 60rpx; + font-weight: 400; + color: #000000; +} + +.headdown { + display: flex; + justify-content: center; + align-items: center; + width: 100%; + height: 55rpx; + padding-top: 30rpx; +} + +.headdown text { + + font-size: 30rpx; + font-weight: 400; + color: #808080; +} + +/* 交卷头部 */ + +/* 提卷内容 */ +.subitexamcontent { + width: 680rpx; + margin: 40rpx auto; +} + +.examcontentup { + height: 40rpx; + border-left: 8rpx solid #1ccfd6; + margin-bottom: 40rpx; + margin-top: 40rpx; +} + +.examcontentup text { + + margin-left: 20rpx; + color: #010101; + font-size: 30rpx; + font-weight: 400; +} + +.examcontentdown { + display: flex; + flex-wrap: wrap; + width: 660rpx; + margin: 0 30rpx; +} + +.downitem { + width: 77rpx; + height: 77rpx; + flex: 0 19% !important; + margin-bottom: 40rpx; +} + +.examcontentdown image { + width: 77rpx; + height: 77rpx; + margin: 0 auto; + margin-top: 20rpx; +} + +.charclass { + display: flex; + justify-items: center; +} + +.charclass text { + width: 37rpx; + height: 33rpx; + position: relative; + right:2rpx; + left: 10px; + top: -36px; + text-align: center; +} + +/* 提卷内容 */ + +/* 试卷时间 */ +.examtiems { + + width: 680rpx; + height: 50rpx; + margin: 50rpx auto; +} + +.examtiems text { + + display: flex; + flex-direction: column; + justify-content: center; + align-items: center; + font-size: 30rpx; + font-weight: 400; +} + + + +/* 试卷解释 */ +.examanalysis { + + width: 680rpx; + height: 100rpx; + margin: 0 30rx; + display: flex; + flex-direction: row; + justify-content: center; + align-items: center; + position: fixed; + bottom: 0; + display: none; +} + +.alysisleft{ + + width: 330rpx; + height: 80rpx; + margin-left: 30rpx; +} + +.alysisleft image { + width: 330rpx; + height: 80rpx; +} +.alysisright{ + + width: 330rpx; + height: 80rpx; +} +.alysisright image { + margin-left: 30rpx; + width: 330rpx; + height: 80rpx; +} + +/* 试卷解释 */ \ No newline at end of file diff --git a/pages/indexobjectivework/indexobjectivework.js b/pages/indexobjectivework/indexobjectivework.js new file mode 100644 index 0000000..0f002a3 --- /dev/null +++ b/pages/indexobjectivework/indexobjectivework.js @@ -0,0 +1,290 @@ +var WxParse = require('../../wxParse/wxParse.js'); +const app = getApp(); +var that; +var Interval; +var wechat; +var id; +var intt; +const baseUrl = getApp(); +const api = require('../../config/api.js'); +const util = require('../../config/util.js'); +Page({ + startX: 0, + startY: 0, + isClear: false, + + /** + * 页面的初始数据 + */ + data: { + reexam: 0, //是否反复作答 0不是,1是 + index: 0, + hour: 0, + minute: 0, + second: 0, + millisecond: 0, + timecount: '00:00:00', + cost: 0, + flag: 1, + endtime: "", + baseurl: baseUrl.globalData.baseimgurl, + time: 1 * 60 * 60 * 1000, //初始时间 + paystatus: 1, //1未开始时间开始状态,2开始 + collection: 1, //1不收藏,2已收藏 + singdouble: 1, //1单选,2多选 + paiduanactive: 1,//1不是判断,2是判断题 + zstime: 1, //1正计,0倒计 + typeid: 1, //0练习1正式 + activeopen: true, + coursetypefour_id: 1, + itemdatacurrent: [], //当前数据 + itemdataall: [], //全部数据 + itemdata: ['A', 'B', 'C', 'D'], //选项数据 + content: "",//富文本数据 + showModalStatus: false, + pen: 3, + color: '#FFFFFF', + currentTab: 0, + now: 1, //当前页码 + all: 15, //总页码 + height: 0, + Timer_state: 1, + Answer_card: false, + Draft_paper: false, + false_analysis: false, + stem_height: 150, + jiexi: false, + field: { + analysis_text: "", + }, + img: [], + scroll: "scroll", + drag_line: false, + showvide: false, + showexampop: false, //查看交卷, + examlistdata: [], + examlist: [], + }, + showPopup: function (params) { + console.log("params======="); + console.log(params); + let coursetypefour_id = params.currentTarget.id; + + wx.navigateTo({ + url: '/pages/indexobjectactiveworkok/indexobjectactiveworkok?coursetypefour_id=' + coursetypefour_id, + }) + console.log("查看交卷"); + }, + /** + * 生命周期函数--监听页面加载 + */ + onLoad: function (options) { + + baseUrl.islogin(); + this.setData({ + coursetypefour_id: options.id + }) + + }, + + /**getcoursetypefourexam + * 生命周期函数--监听页面初次渲染完成 + */ + onReady: function () { + + }, + + /** + * 生命周期函数--监听页面显示 + */ + onShow: function () { + + this.getcoursetypefourexam(this.data.coursetypefour_id); + this.getexamobjectactiovename(this.data.coursetypefour_id); + // this.initadddata(this.data.itemdataall, this.data.coursetypefour_id, wx.getStorageSync('wxuserid')); + }, + + /** + * 生命周期函数--监听页面隐藏 + */ + onHide: function () { + + }, + + /** + * 生命周期函数--监听页面卸载 + */ + onUnload: function () { + + }, + + /** + * 页面相关事件处理函数--监听用户下拉动作 + */ + onPullDownRefresh: function () { + + }, + + /** + * 页面上拉触底事件的处理函数 + */ + onReachBottom: function () { + + }, + + /** + * 用户点击右上角分享 + */ + onShareAppMessage: function () { + + }, + + + finished() { + console.log("交卷") + }, + collectionselect: function (e) { + console.log(e); + this.getcollectionclick(e.currentTarget.id, wx.getStorageSync('wxuserid')); + }, + + + //----------------------------- + // 手机触摸开始 + //----------------------------- + touchStart: function (e) { + //得到触摸点的坐标 + this.startX = e.changedTouches[0].x + this.startY = e.changedTouches[0].y + this.context = wx.createContext() + this.context.setStrokeStyle(this.data.color) + this.context.setLineWidth(this.data.pen) + this.context.setLineCap('round') // 让线条圆润 + this.context.beginPath() + + }, + //----------------------------- + // 触摸后移动 + //----------------------------- + touchMove: function (e) { + + var startX1 = e.changedTouches[0].x + var startY1 = e.changedTouches[0].y + this.context.moveTo(this.startX, this.startY) + this.context.lineTo(startX1, startY1) + this.context.stroke() + this.startX = startX1; + this.startY = startY1; + wx.drawCanvas({ + canvasId: 'myCanvas', + reserve: true, + actions: this.context.getActions() + }) + }, + + + //多选 + bindList(e) { + this.getids(); + let index = e.currentTarget.dataset.id; + console.log(index); + let arr = this.data.itemdata.map(item => { + if (item.id == index && item.selectvalue == "1") { + item.selectvalue = "2"; + } else if (item.id == index) { + item.selectvalue = "1"; + } + return item + }) + console.log(arr); + this.setData({ + itemdata: arr + }); + + }, //获取id + getids() { + let ids = this.data.itemdata.filter(item => item.selectvalue == '2').map(item => item.charmu); + let dx = this.data.itemdata.filter(item => item.selectvalue == '2').map(item => item.charmu); + console.log(ids); + console.log(dx); + console.log('多选Id:' + ids) + console.log('单选Id:' + dx); + console.log(this.data.itemdatacurrent); + let itemcurrent = this.data.itemdatacurrent; + let user_id = wx.getStorageSync('wxuserid') == '' ? 3 : wx.getStorageSync('wxuserid'); + let examanswer = 1; + if (itemcurrent.examtype == 1) { + examanswer = dx + ''; + } else { + examanswer = ids + ''; + } + // this.addexamdata(this.data.coursetypefour_id, itemcurrent.examtype, itemcurrent.typeid, itemcurrent.id, itemcurrent.itemname, examanswer, itemcurrent.answer, user_id, itemcurrent.grouppaper_id, this.data.index, this.data.now); + + }, + + bindActive: function (params) { + console.log(this.data.coursetypefour_id); + console.log(params.currentTarget.id); + console.log(params.currentTarget.dataset.id); + this.updateexamdata(params.currentTarget.id, params.currentTarget.dataset.id); + + }, + getexamobjectactiovename: function (id) { + //得到试卷名称 + const that = this; + let url = baseUrl.globalData.baseUrl + '/examobjectactive/getexamobjectactiovename'; + var param = { + id: id, + }; + //此处为使用封装的post请求 + util.post(url, param).then((res) => { + + wx.setNavigationBarTitle({ + title: res.data["name"], + }) + + }).catch((errMsg) => { + console.log(errMsg); + }); + }, + updateexamdata: function (id, answer) { + + //得到练习题目 + const that = this; + let url = baseUrl.globalData.baseUrl + '/examobjectactive/updateexamdata'; + var param = { + id: id, + answer: answer, + user_id: wx.getStorageSync('wxuserid') + }; + //此处为使用封装的post请求 + util.post(url, param).then((res) => { + + this.getcoursetypefourexam(that.data.coursetypefour_id); + + }).catch((errMsg) => { + console.log(errMsg); + }); + }, + getcoursetypefourexam: function (params) { + + //得到练习题目 + const that = this; + let url = baseUrl.globalData.baseUrl + '/examobjectactive/paperexamitem'; + var param = { + coursetypefour_id: params, + user_id: wx.getStorageSync('wxuserid') + }; + //此处为使用封装的post请求 + util.post(url, param).then((res) => { + console.log("res===================="); + console.log(res); + that.setData({ + itemdataall: res.data, + itemdata: res.data + }); + }).catch((errMsg) => { + console.log(errMsg); + }); + }, +}) \ No newline at end of file diff --git a/pages/indexobjectivework/indexobjectivework.json b/pages/indexobjectivework/indexobjectivework.json new file mode 100644 index 0000000..6f0c60a --- /dev/null +++ b/pages/indexobjectivework/indexobjectivework.json @@ -0,0 +1,4 @@ +{ + "usingComponents": {}, + "navigationBarTitleText": "考试进行中。。。" +} \ No newline at end of file diff --git a/pages/indexobjectivework/indexobjectivework.wxml b/pages/indexobjectivework/indexobjectivework.wxml new file mode 100644 index 0000000..2c3e00b --- /dev/null +++ b/pages/indexobjectivework/indexobjectivework.wxml @@ -0,0 +1,45 @@ + + + + + + {{item.exam_id}} + + + + + + 【A】 + 【A】 + + + 【B】 + 【B】 + + + + 【C】 + 【C】 + + + + 【D】 + 【D】 + + + + + + + + + + + + + + + + + + diff --git a/pages/indexobjectivework/indexobjectivework.wxss b/pages/indexobjectivework/indexobjectivework.wxss new file mode 100644 index 0000000..1908bad --- /dev/null +++ b/pages/indexobjectivework/indexobjectivework.wxss @@ -0,0 +1,409 @@ +.page { + background-color: #ededed; +} + +.examing { + display: flex; + flex-direction: row; + align-items: center; + width: 100%; + height: 80rpx; + background-color: #49dae0; + position: fixed; + top: 0; +} + +.item1 { + width: 50rpx; + height: 50rpx; + margin: 0 19rpx; +} + +.item1 image { + width: 50rpx; + height: 50rpx; + margin: 0 19rpx; +} + +.item4 { + width: 50rpx; + height: 50rpx; + margin-top: 10rpx; + margin-left: 80rpx; + +} + +.item4 image { + width: 50rpx; + height: 44rpx; + margin: 0 19rpx; +} + +.item5 { + width: 100rpx; + height: 50rpx; + margin-top: 10rpx; + margin-left: 120rpx; + +} + +.item5 image { + width: 38rpx; + height: 47rpx; + margin: 0 22rpx; +} + +.item2 { + width: 150rpx; + height: 50rpx; + margin-top: 16rpx; + margin-left: 19rpx; +} + +.item2 text { + width: 150rpx; + height: 50rpx; + color: white; +} + +.item3 { + width: 100rpx; + height: 50rpx; + margin-top: 10rpx; + margin-left: 79rpx; +} + +.item3 text { + width: 100rpx; + height: 50rpx; + color: white; +} + +.examingfooter { + display: flex; + flex-direction: row; + align-items: center; + justify-content: center; + width: 100%; + height: 80rpx; + background-color: #49dae0; + position: relative; + bottom: 0; +} + +.footerleft image { + margin: 0 25rpx; + width: 160rpx; + height: 53rpx; +} + +.footermiddle image { + margin: 0 auto; + + width: 160rpx; + height: 53rpx; +} + +.footerright image { + margin: 0 25rpx; + width: 160rpx; + height: 53rpx; +} + +.examingcontent { + width: 100%; + margin: 80rpx 20rpx; + /* max-height: 250rpx; + overflow: hidden; */ +} + +.examingcontent2 { + width: 100%; + margin: 80rpx auto; +} + + +.examingcontent text { + font-size: 30rpx; + font-weight: 400; + +} + +.examintcontentda { + width: 700rpx; + margin: 0 auto; + float: left; + margin-bottom: 50rpx; + margin-top: 30rpx; +} + +.contentleft { + float: left; + width: 50rpx; + height: 50rpx; + line-height: 50rpx; + margin-left: 25rpx; +} + +.contentleft image { + width: 49rpx; + height: 49rpx; +} + +.contentright { + display: flex; + flex-direction: row; + margin-left: 25rpx; + margin-right: 50rpx; + width: 600rpx; +} + +.examitem { + + width: 100rpx; + height: 60rpx; + margin-left: 30rpx; + +} +.examitem text{ + + font-size: 50rpx; + width: 100rpx; + height: 60rpx; +} + +.charclass { + display: flex; + justify-items: center; +} + +.charclass text { + width: 37rpx; + height: 33rpx; + position: relative; + left: 8rpx; + top: -60rpx; + text-align: center; +} + +.item2 .van-count-down { + color: white; +} + +/*草稿纸*/ +.topic_cgz { + position: fixed; + top: 0; + width: 100%; + height: 100%; + background-color: rgba(0, 0, 0, 0.4); + z-index: 999; + overflow: hidden; +} + +.topic_cgz_tab { + width: 100%; + height: 100%; + padding: 0; + position: fixed; + top: 0rpx; +} + +.topic_cgz_tab .fl { + width: 25%; + text-align: center; +} + +.topic_cgz_tab image { + width: 60rpx; + height: 60rpx; +} + +/*滚动层*/ +scroll-item { + z-index: 9; +} + +.scoll-h { + height: 100%; +} + +.tab-content { + height: 100%; + width: 100%; + background: #fff; +} + +.the_big_box { + height: 100%; + width: 100%; + background: #fff; + overflow-x: hidden; +} + +.tab-content-top { + margin-top: 20rpx; +} + +.toolsclass { + display: flex; + justify-items: center; + justify-content: space-between; + width: 100%; + margin: 0 auto; + height: 200rpx; + position: fixed; + bottom: 200; +} + +.openclass { + + display: flex; + justify-content: center; + width: 700rpx; + margin: 80rpx auto; + +} + +.openclass image { + width: 120rpx; + height: 24rpx; +} + +.headdouble { + display: flex; + flex-direction: row; + width: 100%; + margin: 0 auto; +} + +.headdoubleleft { + width: 100%; +} + +.headdoubleright { + width: 95%; + margin: 0 auto; +} + + + +/* 提卷内容 */ +.popsubitexamcontent { + width: 680rpx; + margin: 40rpx auto; +} + +.popexamcontentup { + height: 40rpx; + border-left: 8rpx solid #1ccfd6; + margin-bottom: 40rpx; + margin-top: 40rpx; +} + +.popexamcontentup text { + + margin-left: 20rpx; + color: #010101; + font-size: 30rpx; + font-weight: 400; +} + +.popexamcontentdown { + display: flex; + flex-wrap: wrap; + width: 660rpx; + margin: 0 30rpx; +} + +.popdownitem { + width: 77rpx; + height: 77rpx; + flex: 0 19% !important; + margin-bottom: 40rpx; +} + +.popexamcontentdown image { + width: 77rpx; + height: 77rpx; + margin: 0 auto; + margin-top: 20rpx; +} + +.popcharclass { + display: flex; + justify-items: center; +} + +.popcharclass text { + width: 37rpx; + height: 33rpx; + position: relative; + right: 2rpx; + left: 10px; + top: -36px; + text-align: center; +} + +/* 提卷内容 */ + + +/* 试卷解释 */ +.popexamanalysis { + + display: flex; + flex-direction: row; + justify-content: center; + align-items: center; + position: fixed; + left: 36rpx; + bottom: 20rpx; + width: 680rpx; + height: 100rpx; + margin: 0 auto; + +} + +.popalysisleft { + + width: 330rpx; + height: 130rpx; + align-items: center; +} + +.popalysisleft image { + width: 330rpx; + height: 100rpx; +} + +.popalysisright { + + width: 330rpx; + height: 80rpx; +} + +.popalysisright image { + margin-left: 30rpx; + width: 330rpx; + height: 80rpx; +} + +/* 试卷解释 */ + +.examiteminfocs { + position: relative; + height:200rpx; + margin-bottom: 100rpx; + padding-top: 100rpx; +} + +.colorchamu{ + color: rgb(0, 24, 236); +} +.mainclass{ + margin: 0 auto; + display: flex; + flex-direction: column; + padding-bottom: 50rpx; + margin-top: 50rpx; +} \ No newline at end of file diff --git a/pages/indexreslists/indexreslists.js b/pages/indexreslists/indexreslists.js new file mode 100644 index 0000000..656b372 --- /dev/null +++ b/pages/indexreslists/indexreslists.js @@ -0,0 +1,144 @@ +const DEFAULT_PAGE = 0; +const baseUrl = getApp(); +const api = require('../../config/api.js'); +const util = require('../../config/util.js'); +Page({ + + /** + * 页面的初始数据 + */ + data: { + startPageX: 0, + currentView: DEFAULT_PAGE, + baseurl:baseUrl.globalData.baseimgurl, + movies: [], + active: 1, + challengeactive: 1, + toView: `card_${DEFAULT_PAGE}`, + list: [], + itemdata: [], + }, + touchStart(e) { + this.startPageX = e.changedTouches[0].pageX; + }, + touchEnd(e) { + + const moveX = e.changedTouches[0].pageX - this.startPageX; + const maxPage = this.data.list.length - 1; + if (Math.abs(moveX) >= 150) { + if (moveX > 0) { + this.currentView = this.currentView !== 0 ? this.currentView - 1 : 0; + } else { + this.currentView = this.currentView !== maxPage ? this.currentView + 1 : maxPage; + } + } + this.setData({ + toView: `card_${this.currentView}` + }); + }, + touchecard(e) { + console.log(e.currentTarget.id); + this.setData({ + active: e.currentTarget.id + }) + this.getpaperattrlist(e.currentTarget.id); + }, + + /** + * 生命周期函数--监听页面加载 + */ + onLoad: function (options) { + console.log(options); + }, + + /** + * 生命周期函数--监听页面初次渲染完成 + */ + onReady: function () { + + }, + + /** + * 生命周期函数--监听页面显示 + */ + onShow: function () { + this.getpapertype(); + this.getpaperattrlist(1); + }, + + /** + * 生命周期函数--监听页面隐藏 + */ + onHide: function () { + + }, + + /** + * 生命周期函数--监听页面卸载 + */ + onUnload: function () { + + }, + + /** + * 页面相关事件处理函数--监听用户下拉动作 + */ + onPullDownRefresh: function () { + + }, + + /** + * 页面上拉触底事件的处理函数 + */ + onReachBottom: function () { + + }, + + /** + * 用户点击右上角分享 + */ + onShareAppMessage: function () { + + }, + examclicking:function(e){ + + console.log(e); + wx.navigateTo({ + url: '/pages/indexrespage/indexrespage?id='+e.currentTarget.id, + }) + }, + getpapertype:function(){ + const that = this; + let url = baseUrl.globalData.baseUrl + '/paperlist/getpapertypelist'; + var param = { + id: '123456789' + }; + //此处为使用封装的post请求 + util.get(url, param).then((res) => { + console.log(res); + that.setData({ + list: res.data + }); + + }).catch((errMsg) => { + console.log(errMsg); + }); + }, + getpaperattrlist:function(params) { + const that = this; + let url = baseUrl.globalData.baseUrl + '/res/reslist'; + var param = { + papertype_id: params + }; + //此处为使用封装的post请求 + util.get(url, param).then((res) => { + console.log(res); + that.setData({ + itemdata: res.data + }); + + }).catch((errMsg) => { + console.log(errMsg); + }); + } +}) \ No newline at end of file diff --git a/pages/indexreslists/indexreslists.json b/pages/indexreslists/indexreslists.json new file mode 100644 index 0000000..ef4e026 --- /dev/null +++ b/pages/indexreslists/indexreslists.json @@ -0,0 +1,8 @@ +{ + "usingComponents": {}, + "navigationBarBackgroundColor": "#fff", + "navigationBarTextStyle": "black", + "navigationBarTitleText": "资料下载", + "backgroundColor": "#ccc", + "backgroundTextStyle": "light" + } \ No newline at end of file diff --git a/pages/indexreslists/indexreslists.wxml b/pages/indexreslists/indexreslists.wxml new file mode 100644 index 0000000..5cc197b --- /dev/null +++ b/pages/indexreslists/indexreslists.wxml @@ -0,0 +1,23 @@ + + + + + + + + {{item.name}} + + + 点击查看全部 + + + + + + + + + + + + diff --git a/pages/indexreslists/indexreslists.wxss b/pages/indexreslists/indexreslists.wxss new file mode 100644 index 0000000..083b95c --- /dev/null +++ b/pages/indexreslists/indexreslists.wxss @@ -0,0 +1,85 @@ +.curriculumup { + width: 680rpx; + height: 55rpx; + margin: 0 auto; + margin-top: 40rpx; + } + .curriculumupstart { + float: left; + width: 680rpx; + height: 55rpx; + } + + .curriculumupend { + float: left; + width: 50rpx; + height: 50rpx; + } + + .scroll-box { + white-space: nowrap; + height: 100%; + } + + .card-box { + display: inline-block; + margin-right: 10rpx; + } + + .card image { + height: 55rpx; + line-height: 55rpx; + width: 211rpx; + } + .lineclass { + width: 685rpx; + margin: 30rpx auto; + border-bottom: 1rpx solid #dcdcdc; + } + .itemdataclass{ + display: flex; + flex-direction: row; + align-items:center; + justify-content:space-between; + width: 680rpx; + height: 160rpx; + margin: 0 auto; + margin-top:20rpx; + background-color: #f0f0f0; + border-radius: 15rpx; + } + .item1 image{ + width: 110rpx; + height: 110rpx; + margin: 0 35rpx; + } + .item2{ + width: 390rpx; + display: flex; + flex-direction: column; + justify-content: start; + } + .item2up text{ + font-size: 40rpx; + font-weight: 400; + } + .item2donw text{ + font-size: 30rpx; + font-weight: 200; + } + .item3{ + width: 80rpx; + margin-right:35rpx; + } + .item3 text{ + font-size: 30rpx; + font-weight: 400; + } + .item4{ + margin-right:50rpx; + } + .item4 image{ + width: 38rpx; + height: 38rpx; + } + \ No newline at end of file diff --git a/pages/indexreslistsnew/indexreslistsnew.js b/pages/indexreslistsnew/indexreslistsnew.js new file mode 100644 index 0000000..6a30ee8 --- /dev/null +++ b/pages/indexreslistsnew/indexreslistsnew.js @@ -0,0 +1,156 @@ +const DEFAULT_PAGE = 0; +const baseUrl = getApp(); +const api = require('../../config/api.js'); +const util = require('../../config/util.js'); +Page({ + + /** + * 页面的初始数据 + */ + data: { + startPageX: 0, + currentView: DEFAULT_PAGE, + baseurl:baseUrl.globalData.baseimgurl, + movies: [], + active: 1, + challengeactive: 1, + toView: `card_${DEFAULT_PAGE}`, + list: [], + itemdata: [], + pid:0, + classname:"" + }, + touchStart(e) { + this.startPageX = e.changedTouches[0].pageX; + }, + touchEnd(e) { + + const moveX = e.changedTouches[0].pageX - this.startPageX; + const maxPage = this.data.list.length - 1; + if (Math.abs(moveX) >= 150) { + if (moveX > 0) { + this.currentView = this.currentView !== 0 ? this.currentView - 1 : 0; + } else { + this.currentView = this.currentView !== maxPage ? this.currentView + 1 : maxPage; + } + } + this.setData({ + toView: `card_${this.currentView}` + }); + }, + touchecard(e) { + console.log(e.currentTarget.id); + this.setData({ + active: e.currentTarget.id + }) + this.getpaperattrlist(e.currentTarget.id); + }, + + /** + * 生命周期函数--监听页面加载 + */ + onLoad: function (options) { + console.log(options); + this.setData({ + pid:options.id + }) + + wx.setNavigationBarTitle({ + title: '班级资料类型列表'}) + }, + + /** + * 生命周期函数--监听页面初次渲染完成 + */ + onReady: function () { + + }, + + /** + * 生命周期函数--监听页面显示 + */ + onShow: function () { + // this.getpapertype(); + // this.getpaperattrlist(1); + this.getpaperattrlist(this.data.pid); + + }, + + /** + * 生命周期函数--监听页面隐藏 + */ + onHide: function () { + + }, + + /** + * 生命周期函数--监听页面卸载 + */ + onUnload: function () { + + }, + + /** + * 页面相关事件处理函数--监听用户下拉动作 + */ + onPullDownRefresh: function () { + + }, + + /** + * 页面上拉触底事件的处理函数 + */ + onReachBottom: function () { + + }, + + /** + * 用户点击右上角分享 + */ + onShareAppMessage: function () { + + }, + examclicking:function(e){ + + console.log(e); + let id=e.currentTarget.id; + let indexclassrestype_id=e.currentTarget.dataset.indexclassrestypeid; + wx.navigateTo({ + url: '/pages/indexclassres/indexclassres?classid='+indexclassrestype_id+"&indexclassrestype_id="+id, + }) + }, + getpapertype:function(){ + const that = this; + let url = baseUrl.globalData.baseUrl + '/paperlist/getpapertypelist'; + var param = { + id: '123456789' + }; + //此处为使用封装的post请求 + util.get(url, param).then((res) => { + console.log(res); + that.setData({ + list: res.data + }); + + }).catch((errMsg) => { + console.log(errMsg); + }); + }, + getpaperattrlist:function(params) { + const that = this; + let url = baseUrl.globalData.baseUrl + '/res/indexclassrestype'; + var param = { + indexclasslist_id: params + }; + //此处为使用封装的post请求 + util.get(url, param).then((res) => { + console.log(res); + that.setData({ + itemdata: res.data + }); + + }).catch((errMsg) => { + console.log(errMsg); + }); + } +}) \ No newline at end of file diff --git a/pages/indexreslistsnew/indexreslistsnew.json b/pages/indexreslistsnew/indexreslistsnew.json new file mode 100644 index 0000000..027e447 --- /dev/null +++ b/pages/indexreslistsnew/indexreslistsnew.json @@ -0,0 +1,8 @@ +{ + "usingComponents": {}, + "navigationBarBackgroundColor": "#fff", + "navigationBarTextStyle": "black", + "navigationBarTitleText": "资料下载", + "backgroundColor": "#ccc", + "backgroundTextStyle": "light" +} \ No newline at end of file diff --git a/pages/indexreslistsnew/indexreslistsnew.wxml b/pages/indexreslistsnew/indexreslistsnew.wxml new file mode 100644 index 0000000..76ad03b --- /dev/null +++ b/pages/indexreslistsnew/indexreslistsnew.wxml @@ -0,0 +1,22 @@ + + + + + + + + {{item.name}} + + + 点击查看全部 + + + + + + + + + + + \ No newline at end of file diff --git a/pages/indexreslistsnew/indexreslistsnew.wxss b/pages/indexreslistsnew/indexreslistsnew.wxss new file mode 100644 index 0000000..37c80b4 --- /dev/null +++ b/pages/indexreslistsnew/indexreslistsnew.wxss @@ -0,0 +1,84 @@ +.curriculumup { + width: 680rpx; + height: 55rpx; + margin: 0 auto; + margin-top: 40rpx; +} +.curriculumupstart { + float: left; + width: 680rpx; + height: 55rpx; +} + +.curriculumupend { + float: left; + width: 50rpx; + height: 50rpx; +} + +.scroll-box { + white-space: nowrap; + height: 100%; +} + +.card-box { + display: inline-block; + margin-right: 10rpx; +} + +.card image { + height: 55rpx; + line-height: 55rpx; + width: 211rpx; +} +.lineclass { + width: 685rpx; + margin: 30rpx auto; + border-bottom: 1rpx solid #dcdcdc; +} +.itemdataclass{ + display: flex; + flex-direction: row; + align-items:center; + justify-content:space-between; + width: 680rpx; + height: 160rpx; + margin: 0 auto; + margin-top:20rpx; + background-color: #f0f0f0; + border-radius: 15rpx; +} +.item1 image{ + width: 110rpx; + height: 110rpx; + margin: 0 35rpx; +} +.item2{ + width: 390rpx; + display: flex; + flex-direction: column; + justify-content: start; +} +.item2up text{ + font-size: 40rpx; + font-weight: 400; +} +.item2donw text{ + font-size: 30rpx; + font-weight: 200; +} +.item3{ + width: 80rpx; + margin-right:35rpx; +} +.item3 text{ + font-size: 30rpx; + font-weight: 400; +} +.item4{ + margin-right:50rpx; +} +.item4 image{ + width: 38rpx; + height: 38rpx; +} diff --git a/pages/indexrespage/indexrespage.js b/pages/indexrespage/indexrespage.js new file mode 100644 index 0000000..f7b70ad --- /dev/null +++ b/pages/indexrespage/indexrespage.js @@ -0,0 +1,165 @@ +const DEFAULT_PAGE = 0; +const baseUrl = getApp(); +const api = require('../../config/api.js'); +const util = require('../../config/util.js'); +import Toast from '../../miniprogram_npm/@vant/weapp/toast/toast'; +Page({ + + /** + * 页面的初始数据 + */ + data: { + startPageX: 0, + currentView: DEFAULT_PAGE, + baseurl: baseUrl.globalData.baseimgurl, + movies: [], + active: 1, + challengeactive: 1, + toView: `card_${DEFAULT_PAGE}`, + list: [], + itemdata: [], + resfiles_id: 1, + pathid: "", + showdiage: false + }, + getpaperattrlist: function (params) { + const that = this; + let url = baseUrl.globalData.baseUrl + '/res/getrespagelist'; + var param = { + resfiles_id: params + }; + //此处为使用封装的post请求 + util.get(url, param).then((res) => { + console.log(res); + that.setData({ + itemdata: res.data + }); + + }).catch((errMsg) => { + console.log(errMsg); + }); + }, + + /** + * 生命周期函数--监听页面加载 + */ + onLoad: function (options) { + console.log(options); + this.setData({ + resfiles_id: options.id + }) + }, + onshowdiageClose() { + console.log('324323222222') + this.setData({ + showdiage: false + }); + console.log(this.data.showdiage) + }, + downfilepoto: function (knowfiles) { + + // let files = knowfiles.currentTarget.id; + let files = this.data.pathid + wx.downloadFile({ + url: files, + success(res) { + wx.openDocument({ + filePath: res.tempFilePath, + showMenu: true, //关键点 + success() { + } + }) + } + }) + }, + downfile: function (knowfiles) { + + let files = this.data.pathid;// knowfiles.currentTarget.id; + + wx.downloadFile({ + url: files, + success(res) { + + wx.shareFileMessage({ + filePath: res.tempFilePath, + success() { }, + fail: console.error, + }) + + } + }) + }, + showdiagePopup(e) { + console.log(e); + let pathid = e.currentTarget.id; + + let files = pathid; // knowfiles.currentTarget.id; + if (files.length == 0) { + + wx.showToast({ + title: '暂时还没有讲义,不可下载',//提示文字 + duration: 2000,//显示时长 + mask: true,//是否显示透明蒙层,防止触摸穿透,默认:false + icon: 'none', //图标,支持"success"、"loading" + success: function () { + return; + },//接口调用成功 + fail: function () { }, //接口调用失败的回调函数 + complete: function () { } //接口调用结束的回调函数 + }) + } else { + this.setData({ showdiage: true, pathid: pathid }); + } + + }, + + /** + * 生命周期函数--监听页面初次渲染完成 + */ + onReady: function () { + + }, + + /** + * 生命周期函数--监听页面显示 + */ + onShow: function () { + + this.getpaperattrlist(this.data.resfiles_id); + }, + + /** + * 生命周期函数--监听页面隐藏 + */ + onHide: function () { + + }, + + /** + * 生命周期函数--监听页面卸载 + */ + onUnload: function () { + + }, + + /** + * 页面相关事件处理函数--监听用户下拉动作 + */ + onPullDownRefresh: function () { + + }, + + /** + * 页面上拉触底事件的处理函数 + */ + onReachBottom: function () { + + }, + + /** + * 用户点击右上角分享 + */ + onShareAppMessage: function () { + + }, +}) \ No newline at end of file diff --git a/pages/indexrespage/indexrespage.json b/pages/indexrespage/indexrespage.json new file mode 100644 index 0000000..ef4e026 --- /dev/null +++ b/pages/indexrespage/indexrespage.json @@ -0,0 +1,8 @@ +{ + "usingComponents": {}, + "navigationBarBackgroundColor": "#fff", + "navigationBarTextStyle": "black", + "navigationBarTitleText": "资料下载", + "backgroundColor": "#ccc", + "backgroundTextStyle": "light" + } \ No newline at end of file diff --git a/pages/indexrespage/indexrespage.wxml b/pages/indexrespage/indexrespage.wxml new file mode 100644 index 0000000..5f52961 --- /dev/null +++ b/pages/indexrespage/indexrespage.wxml @@ -0,0 +1,27 @@ + + + + + + + + {{item.name}} + + + + + + + + + + + + + + + + + + + diff --git a/pages/indexrespage/indexrespage.wxss b/pages/indexrespage/indexrespage.wxss new file mode 100644 index 0000000..826752b --- /dev/null +++ b/pages/indexrespage/indexrespage.wxss @@ -0,0 +1,109 @@ +.curriculumup { + width: 680rpx; + height: 55rpx; + margin: 0 auto; + margin-top: 40rpx; +} + +.curriculumupstart { + float: left; + width: 680rpx; + height: 55rpx; +} + +.curriculumupend { + float: left; + width: 50rpx; + height: 50rpx; +} + +.scroll-box { + white-space: nowrap; + height: 100%; +} + +.card-box { + display: inline-block; + margin-right: 10rpx; +} + +.card image { + height: 55rpx; + line-height: 55rpx; + width: 211rpx; +} + +.lineclass { + width: 685rpx; + margin: 30rpx auto; + border-bottom: 1rpx solid #dcdcdc; +} + +.itemdataclass { + display: flex; + flex-direction: column; + align-items: flex-start; + width: 680rpx; + height: 200rpx; + margin: 0 auto; + margin-top: 20rpx; + background-color: #f0f0f0; + border-radius: 15rpx; +} + +.item1 { + display: flex; + flex-direction: row; + justify-content: flex-start; + align-items: center; + height: 103rpx; + +} + +.item1up image { + width: 45rpx; + height: 45rpx; + margin-left: 30rpx; + margin-top: 20rpx; +} + +.item1down text { + margin-left: 20rpx; + margin-top: 20rpx; + font-size: 30rpx; + font-weight: 400; +} + +.item2donw image { + margin-left: 10rpx; + margin-top: 20rpx; + width: 272rpx; + height: 55rpx; +} + +.item3 { + width: 80rpx; + margin-right: 35rpx; +} + +.item3 text { + font-size: 30rpx; + font-weight: 400; +} + +.item4 { + margin-right: 50rpx; +} + +.item4 image { + width: 38rpx; + height: 38rpx; +} + +.line_02 { + height: 1px; + border-top: 1px solid #ddd; + text-align: center; + width: 370px; + margin: 0 auto; +} \ No newline at end of file diff --git a/pages/indexsq/indexsq.js b/pages/indexsq/indexsq.js new file mode 100644 index 0000000..e4ba8cf --- /dev/null +++ b/pages/indexsq/indexsq.js @@ -0,0 +1,286 @@ +const DEFAULT_PAGE = 0; +const Apps = getApp(); +const api = require('../../config/api.js'); +const util = require('../../config/util.js'); +Page({ + + /** + * 页面的初始数据 + */ + data: { + baseurl: Apps.globalData.baseimgurl, + messagelist: [], + startPageX: 0, + currentView: DEFAULT_PAGE, + imagecount: 4, + indeximagecount: 4, + active: 1, + challengeactive: 1, + toView: `card_${DEFAULT_PAGE}`, + list: [], + replylist: [], + imageslists: [], //图片预览 + showview: false, + upload_picture_list: [], + imagesListp: [], + imagestr: [], + id: 1, + accesstoken: '', + typeid: wx.getStorageSync('jmparm') == null ? 1 : wx.getStorageSync('jmparm'), + page: 1, //页面数, + pagecount: 0, + itemdata: [], + + }, + + /** + * 生命周期函数--监听页面加载 + */ + onLoad: function (options) { + + + if (options.length > 0) { + this.setData({ + active: options.id == '' ? 1 : options.id, + page: 1, + typeid: wx.getStorageSync('jmparm') + }) + } + wx.setStorageSync('jmparm',1); + this.setData({ + challengeactive: wx.getStorageSync('jmparm') == null ? 1 : wx.getStorageSync('jmparm') + }) + + }, + + + /** + * 生命周期函数--监听页面初次渲染完成 + */ + onReady: function () { + + }, + + /** + * 生命周期函数--监听页面显示 + */ + onShow: function () { + Apps.islogin(); + console.log("=================="); + console.log(wx.getStorageSync('jmparm')) + this.getpaper(wx.getStorageSync('jmparm')); //班级列表 1全部,2我的班级 + this.setData({ + active: wx.getStorageSync('jmparm') == '' ? 1 : wx.getStorageSync('jmparm'), + typeid: wx.getStorageSync('jmparm') == '' ? 1 : wx.getStorageSync('jmparm') + }) + //头部消息 + this.msglist(); + }, + + /** + * 生命周期函数--监听页面隐藏 + */ + onHide: function () { + + }, + getacctoken: function () { + const that = this; + let url = Apps.globalData.baseUrl + '/user/acctoken'; + var param = { + pareid: '1213' + }; + //此处为使用封装的post请求 + util.get(url, param).then((res) => { + + wx.setStorageSync('accesstoen', res.access_token) + that.setData({ + accesstoken: res.access_token + }); + + }).catch((errMsg) => { + console.log(errMsg); + }); + }, + /** + * 生命周期函数--监听页面卸载 + */ + onUnload: function () { + + }, + + /** + * 页面相关事件处理函数--监听用户下拉动作 + */ + onPullDownRefresh: function () { + + }, + + /** + * 页面上拉触底事件的处理函数 + */ + onReachBottom: function () { + + }, + + /** + * 用户点击右上角分享 + */ + onShareAppMessage: function () { + + }, + touchStart(e) { + this.startPageX = e.changedTouches[0].pageX; + }, + touchEnd(e) { + + const moveX = e.changedTouches[0].pageX - this.startPageX; + const maxPage = this.data.list.length - 1; + if (Math.abs(moveX) >= 150) { + if (moveX > 0) { + this.currentView = this.currentView !== 0 ? this.currentView - 1 : 0; + } else { + this.currentView = this.currentView !== maxPage ? this.currentView + 1 : maxPage; + } + } + this.setData({ + toView: `card_${this.currentView}` + }); + }, + touchecard(e) { + + wx.setStorageSync('jmparm', e.currentTarget.id); + this.setData({ + active: e.currentTarget.id, + typeid: e.currentTarget.id + }) + this.getwords(); + }, + duizhiticlick: function () { + wx.navigateTo({ + url: '/pages/allpapers/allpapers', + }) + }, + messagelistclick: function () { + wx.navigateTo({ + url: '/pages/messagelist/messagelist', + }) + }, + communityinfoclick: function (e) { + + wx.navigateTo({ + url: '/pages/communityinfo/communityinfo?id=' + e.currentTarget.id, + }) + }, + communityinfocommentclick: function (e) { + + wx.navigateTo({ + //communityinfocomment + url: '/pages/communityinfo/communityinfo?id=' + e.currentTarget.id + '&jztype=2', + }) + }, + messagelistclick: function (e) { + //资讯列表分类 + wx.navigateTo({ + url: '/pages/messagelist/messagelist?typeid=' + e.currentTarget.id, + }) + }, + messageclick: function (e) { + wx.navigateTo({ + url: '/pages/messageencyclopedias/messageencyclopedias?id=' + e.currentTarget.id, + }) + + // wx.navigateTo({ + // url: '/pages/indexclass/indexclass?id=' + e.currentTarget.id, + // }) + }, + msglist: function () { + + const that = this; + let url = Apps.globalData.baseUrl + '/msglist/msgindexlist'; + var param = { + id: '123456789' + }; + //此处为使用封装的post请求 + util.get(url, param).then((res) => { + console.log(res); + that.setData({ + messagelist: res.data.sort() + + }); + + }).catch((errMsg) => { + console.log(errMsg); + }); + }, + + // 触底加载 + onReachBottom: function () { + + this.setData({ + page: this.data.page + 1 + }) + let newpage = (this.data.page + 1); //页数触底加1 + console.log(newpage); + if (newpage * 10 >= this.data.pagecount) { + + wx.showToast({ + title: '触底了,没有可加载的数据了', + icon: 'none', + duration: 1500 + }) + + } else { + this.getwords(); + } + + }, + getpaper: function (params) { + const that = this; + let url = Apps.globalData.baseUrl + '/indexclass/indexclasslist'; + var param = { + typepid: params, + user_id: wx.getStorageSync('wxuserid') + }; + //此处为使用封装的post请求 + util.get(url, param).then((res) => { + console.log("----------"); + console.log(res.data); + // wx.setStorageSync('jmparm',2); + that.setData({ + itemdata: res.data + }); + + }).catch((errMsg) => { + console.log(errMsg); + }); + }, + examingbtnclick: function (params) { + console.log(params.currentTarget.id); + console.log("---------------------2") + console.log(wx.getStorageSync('jmparm')); + if(wx.getStorageSync('jmparm')==2){ + + wx.setStorageSync('jmparm',1); + + wx.navigateTo({ + url: '/pages/indexclass/indexclass?id=' +params.currentTarget.id, + }) + }else{ + wx.navigateTo({ + url: '/pages/indexclassintro/indexclassintro?id='+params.currentTarget.id, + }) + + } + + + + }, + challengeclickleft(e) { + console.log(e.currentTarget.id); + wx.setStorageSync('jmparm', e.currentTarget.id) + this.setData({ + challengeactive: e.currentTarget.id + }) + this.getpaper(e.currentTarget.id); + } +}) \ No newline at end of file diff --git a/pages/indexsq/indexsq.json b/pages/indexsq/indexsq.json new file mode 100644 index 0000000..b7e9443 --- /dev/null +++ b/pages/indexsq/indexsq.json @@ -0,0 +1,5 @@ +{ + "usingComponents": {}, + "enablePullDownRefresh":true, + "navigationBarTitleText": "怼社区" + } \ No newline at end of file diff --git a/pages/indexsq/indexsq.wxml b/pages/indexsq/indexsq.wxml new file mode 100644 index 0000000..4156c4e --- /dev/null +++ b/pages/indexsq/indexsq.wxml @@ -0,0 +1,44 @@ + + + + + + {{item.name}} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + {{item.name}} + + + diff --git a/pages/indexsq/indexsq.wxss b/pages/indexsq/indexsq.wxss new file mode 100644 index 0000000..178afd8 --- /dev/null +++ b/pages/indexsq/indexsq.wxss @@ -0,0 +1,508 @@ +/* pages/indexsq/indexsq.wxss */ +.courselive { + width: 750rpx; + height: 403rpx; +} + +.functionalarea { + display: flex; + flex-flow: row wrap; + align-content: flex-start; + width: 750rpx; + height: 550rpx; +} + +.areaitem { + margin-top: 60rpx; + text-align: center; + width: 33%; + height: 170rpx; +} + +.areaitem image { + width: 120rpx; + height: 170rpx; +} + +.messagearea text { + + display: block; + font-size: 40rpx; + font-weight: 600rpx; + margin-left: 60rpx; +} + +.msseagehead { + display: flex; + flex-direction: row; +} + +.headleft { + margin-left: 60rpx; + margin-top: 50rpx; + width: 140rpx; + height: 140rpx; + border-radius: 50%; + overflow: hidden; +} + +.headleft image { + + width: 130rpx; + height: 133rpx; +} + +.headright { + margin-top: 80rpx; + margin-left: 23rpx; + width: 200rpx; + height: 142rpx; +} + +.headrightup text { + + font-size: 30rpx; + font-weight: 400rpx; +} + +.headrightdown { + font-size: 30rpx; + margin-top: 10rpx; +} + +.msseagemiddle { + margin: 0 60rpx; +} + +.mssagemiddledown { + margin: 25rpx auto; +} + +.mssagemiddledown image { + + width: 100%; + height: 265rpx; +} + +.mssagemiddledownone image { + width: 100%; +} + +.messageend { + + margin: 0 60rpx; + display: flex; + flex-direction: row; + justify-content: space-between; + +} + +.messageendleft { + width: 150rpx; + height: 30rpx; +} + +.messageendleft image { + width: 100rpx; + height: 30rpx; +} + +.messageendmiddle { + width: 150rpx; + height: 30rpx; +} + +.messageendmiddle image { + width: 35rpx; + height: 30rpx; +} + +.messageendmiddle text { + + font-size: 28rpx; + padding-left: 23rpx; +} + +.messageendright { + + width: 150rpx; + height: 30rpx; +} + +.messageendright image { + width: 35rpx; + height: 30rpx; + +} + +.messageendright text { + + font-size: 28rpx; + padding-left: 23rpx; +} + +.feigexian { + + margin: 0 60rpx; + margin-top: 60rpx; + border-bottom: 2rpx solid #ada2a2; +} + +.areaclass { + + width: 540rpx; + height: 193rpx; + margin: 0 auto; + margin-top: 80rpx; + background-color: #f0f0f1; + border-radius: 5%; +} + +.areafooter { + display: flex; + align-items: center; + justify-content: space-between; + width: 540rpx; + height: 60rpx; + margin: 0 auto; + margin-top: 10rpx; +} + +.areafooterleft image { + + width: 26rpx; + height: 26rpx; + +} + +.areafooterright text { + font-size: 28rpx; + font-weight: 600; + color: #217ced; +} + +.vipimage image { + width: 37rpx; + height: 33rpx; + position: relative; + left: -32rpx; + top: 148rpx; +} + +/* 社区头部 */ +.communityhead { + width: 695rpx; + height: 220rpx; + background: url('https://ndnd.duiduiedu.com/uploads/pics/communtlistheadleft.png') no-repeat; + background-size:100% 100%; + margin: 0 auto; + display: flex; + flex-direction: row; + justify-content: flex-start; + align-items: center; + +} + +.communityheadleft { + width: 690rpx; + height: 210rpx; + display: flex; + flex-direction: row; + justify-content: space-between; + align-items: center; + +} + +.communityheadright { + width: 232rpx; + height: 206rpx; + margin-left: 40rpx; +} + +.communityheadrightup { + width: 240rpx; + height: 80rpx; + margin-top: 20rpx; +} + +.communityheadrightup image { + width: 240rpx; + height: 80rpx; +} + +.communityheadrightdown { + width: 240rpx; + height: 80rpx; + margin-top: 20rpx; +} + +.communityheadrightdown image { + width: 240rpx; + height: 80rpx; +} + +.communityheadleftitem1 { + width: 550rpx; + margin-left: 65rpx; + display: flex; + flex-direction: column; + justify-content: left; + align-items: left; +} + +.communityheadleftitem2 { + width: 100rpx; + height: 210rpx; +} + +.communityheadleftitem2 image { + width: 100rpx; + height: 210rpx; +} + +.messageitem { + width: 400rpx; + height: 38rpx; + border: 1rpx solid #1ccfd6; + color: #1ccfd6; + margin-left: 40rpx; + margin-bottom: 10rpx; + text-align: left; + overflow: hidden; +} + +/* 社区头部 */ + +/* 社区滑动 */ +.curriculumup { + width: 680rpx; + height: 55rpx; + margin: 0 auto; + margin-top: 40rpx; +} + +.curriculumupstart { + float: left; + width: 680rpx; + height: 55rpx; +} + +.curriculumupend { + float: left; + width: 50rpx; + height: 50rpx; +} + +.scroll-box { + white-space: nowrap; + height: 100%; +} + +.card-box { + display: inline-block; + margin-right: 10rpx; +} + +.card image { + height: 55rpx; + line-height: 55rpx; + width: 211rpx; +} + +.lineclass { + width: 685rpx; + margin: 2rpx auto; + border-bottom: 1rpx solid #dcdcdc; +} + +/* 社区滑动 */ + + + +/* 补充留言信息右边 */ + +.header_view_hide { + display: none; +} + +.header_view_show { + display: block; +} + +.round-click { + height: 61rpx; + width: 54rpx; + position: fixed; + bottom: 150rpx; + right: 20rpx; + display: flex; + align-items: center; + justify-content: center; + z-index: 9; +} + +.round-click image { + height: 61rpx; + line-height: 61rpx; + width: 54rpx; +} + +.areaclass { + width: 540rpx; + min-height: 300rpx; + margin: 0 auto; + margin-top: 80rpx; + background-color: #f0f0f1; + border-radius: 5%; +} + +.areaclass textarea { + width: 540rpx; + min-height: 300rpx; +} + + +.areafooter { + display: flex; + align-items: center; + justify-content: space-between; + width: 540rpx; + height: 60rpx; + margin: 0 auto; + margin-top: 10rpx; +} + +.areafooterleft image { + + width: 52rpx; + height: 52rpx; + +} + +.areafooterright text { + font-size: 28rpx; + font-weight: 600; + color: #217ced; +} + +.areafooterright { + width: 120rpx; + height: 56rpx; +} + +.areafooterright button { + + width: 120rpx; + height: 50rpx; + line-height: 50rpx; + font-size: 28rpx; + font-weight: 600; + color: #217ced; + border: none; +} + + +.challenge { + + width: 666rpx; + margin: 0 auto; + margin-top:35rpx; + margin-bottom:15rpx; + height: 83rpx; +} + +.challengeleft { + + float: left; + width: 429rpx; + height: 80rpx; + +} + +.challengeleft image { + + width: 440rpx; + height: 80rpx; +} + +.challengeright { + + float: left; + width: 238rpx; + height: 80rpx; +} + +.challengeright image { + + width: 240rpx; + height: 80rpx; +} + + +.challenge2 { + + width: 666rpx; + margin: 0 auto; + margin-top:35rpx; + margin-bottom:15rpx; + height: 83rpx; +} + +.challenge2left { + + float: left; + + width: 238rpx; + height: 80rpx; + +} + +.challenge2left image { + + + width: 253rpx; + height: 80rpx; +} + +.challenge2right { + float: left; + width: 429rpx; + height: 80rpx; +} + +.challenge2right image { + + width: 432rpx; + height: 80rpx; +} +.examitemlist { + display: flex; + flex-direction: row; + align-items: center; + width: 690rpx; + height: 128rpx; + margin: 0 auto; + margin-top: 28rpx; + background-color: #f0f0f0; + background: url('https://ndnd.duiduiedu.com/uploads/pics/classclass.png') no-repeat; + background-size: 100% 100%; + } + + .itemleft image { + + margin: 10rpx 20rpx; + width: 106rpx; + height: 95rpx; + } + + .itemright{ + display: flex; + width: 500rpx; + justify-items: center; + align-items: left; + } + .itemright text{ + margin-left: 30rpx; + font-size: 40rpx; + font-weight: 400; + } \ No newline at end of file diff --git a/pages/knowledge/knowledge.js b/pages/knowledge/knowledge.js new file mode 100644 index 0000000..4e2b40c --- /dev/null +++ b/pages/knowledge/knowledge.js @@ -0,0 +1,143 @@ +const baseUrl = getApp(); +const api = require('../../config/api.js'); +const util = require('../../config/util.js'); +Page({ + + onReady: function (e) { + // 使用 wx.createAudioContext 获取 audio 上下文 context + this.audioCtx = wx.createAudioContext('myAudio') + }, + /** + * 页面的初始数据 + */ + data: { + detailid: 0, + voddetail: [], + autodetail: [], + baseurl: baseUrl.globalData.baseimgurl + }, + audioPlay: function () { + this.audioCtx.play() + }, + audioPause: function () { + this.audioCtx.pause() + }, + audio14: function () { + this.audioCtx.seek(14) + }, + audioStart: function () { + this.audioCtx.seek(0) + }, + funplay: function () { + console.log("audio play"); + }, + funpause: function () { + console.log("audio pause"); + }, + funtimeupdate: function (u) { + console.log(u.detail.currentTime); + console.log(u.detail.duration); + }, + funended: function () { + console.log("audio end"); + }, + funerror: function (u) { + console.log(u.detail.errMsg); + }, + + /** + * 生命周期函数--监听页面加载 + */ + onLoad: function (options) { + console.log(options); + this.setData({ + detailid: options.examid + }) + }, + + /** + * 生命周期函数--监听页面初次渲染完成 + */ + onReady: function () { + + }, + + /** + * 生命周期函数--监听页面显示 + */ + onShow: function () { + let id = this.data.detailid; + this.msgdetail(id); + }, + + /** + * 生命周期函数--监听页面隐藏 + */ + onHide: function () { + + }, + + /** + * 生命周期函数--监听页面卸载 + */ + onUnload: function () { + + }, + + /** + * 页面相关事件处理函数--监听用户下拉动作 + */ + onPullDownRefresh: function () { + + }, + + /** + * 页面上拉触底事件的处理函数 + */ + onReachBottom: function () { + + }, + + /** + * 用户点击右上角分享 + */ + onShareAppMessage: function () { + + }, + preview: function (params) { + console.log(params); + let that = this; + let currentUrl = params.currentTarget.dataset.src; + let arrindex = params.currentTarget.dataset.id; + let picsid = params.currentTarget.dataset.pics; //单条信息ID + console.log(picsid); + + let arr = []; + arr[0] = that.data.baseurl + picsid + console.log('-----'); + console.log(arr); + + wx.previewImage({ + current: currentUrl, // 当前显示图片的http链接 + urls: arr // 需要预览的图片http链接列表 + }) + }, + msgdetail: function (e) { + + const that = this; + let url = baseUrl.globalData.baseUrl + '/msglist/knowledgedetail'; + var param = { + id: e + }; + //此处为使用封装的post请求 + util.post(url, param).then((res) => { + console.log(res); + that.setData({ + voddetail: res.data + }); + + }).catch((errMsg) => { + console.log(errMsg); + }); + } +}) \ No newline at end of file diff --git a/pages/knowledge/knowledge.json b/pages/knowledge/knowledge.json new file mode 100644 index 0000000..f915065 --- /dev/null +++ b/pages/knowledge/knowledge.json @@ -0,0 +1,8 @@ +{ + "usingComponents": {}, + "navigationBarBackgroundColor": "#fff", + "navigationBarTextStyle": "black", + "navigationBarTitleText": "知识要点", + "backgroundColor": "#ccc", + "backgroundTextStyle": "light" + } \ No newline at end of file diff --git a/pages/knowledge/knowledge.wxml b/pages/knowledge/knowledge.wxml new file mode 100644 index 0000000..583be10 --- /dev/null +++ b/pages/knowledge/knowledge.wxml @@ -0,0 +1,94 @@ + + + + + + + + + + + + + + + + + + + + + {{voddetail['intro']}} + + + + + + + + + + + \ No newline at end of file diff --git a/pages/knowledge/knowledge.wxss b/pages/knowledge/knowledge.wxss new file mode 100644 index 0000000..1be597f --- /dev/null +++ b/pages/knowledge/knowledge.wxss @@ -0,0 +1,198 @@ +.courselive { + width: 750rpx; + height: 403rpx; + } + + .courselivecontinor { + background-color: #F5F5F5; + } + + .functionalarea { + display: flex; + flex-flow: row wrap; + align-content: flex-start; + width: 750rpx; + } + + .areaitem { + display: flex; + flex-direction: column; + width: 666rpx; + height: 100rpx; + margin: 0 auto; + margin-top: 20rpx; + } + + .areaitemup { + width: 100%; + height: 60rpx; + margin-top: 30rpx; + text-align: center; + } + + .areaitemdown { + width: 100%; + height: 60rpx; + } + + .percentageclass { + margin: 0 auto; + margin-top: 35rpx; + width: 412rpx; + } + + .messagearea text { + display: block; + font-size: 40rpx; + font-weight: 600rpx; + margin-left: 60rpx; + margin-top: 60rpx; + } + + .msseagehead { + display: flex; + flex-direction: row; + } + + .headleft { + margin-left: 60rpx; + margin-top: 50rpx; + width: 140rpx; + height: 140rpx; + border-radius: 50%; + overflow: hidden; + } + + .headleft image { + + width: 130rpx; + height: 133rpx; + } + + .headright { + margin-top: 80rpx; + margin-left: 23rpx; + width: 200rpx; + height: 142rpx; + } + + .headrightup text { + + height: 40rpx; + width: 100rpx; + overflow: hidden; + font-size: 40rpx; + font-weight: 400rpx; + } + + .headrightdown { + margin-top: 10rpx; + } + + .msseagemiddle { + margin: 0 60rpx; + } + + .mssagemiddledown { + margin: 25rpx auto; + } + + .mssagemiddledown image { + + width: 100%; + height: 265rpx; + } + + .messageend { + + margin: 0 60rpx; + display: flex; + flex-direction: row; + justify-content: space-between; + + } + + .messageendleft { + width: 150rpx; + height: 30rpx; + } + + .messageendleft image { + width: 100rpx; + height: 30rpx; + } + + .messageendmiddle { + width: 150rpx; + height: 30rpx; + } + + .messageendmiddle image { + width: 35rpx; + height: 30rpx; + } + + .messageendmiddle text { + + font-size: 28rpx; + padding-left: 23rpx; + } + + .messageendright { + + width: 150rpx; + height: 30rpx; + } + + .messageendright image { + width: 35rpx; + height: 30rpx; + + } + + .messageendright text { + + font-size: 28rpx; + padding-left: 23rpx; + } + + .feigexian { + + margin: 0 60rpx; + margin-top: 60rpx; + border-bottom: 2rpx solid #ada2a2; + } + + .functionalarea { + margin-top: 0rpx; + } + + .paybtnclass { + margin-right: 80rpx; + } + + .adsclass { + + width: 666rpx; + margin: 0 auto; + background-color: #dbfeff; + height: 100%; + margin-top: 80rpx; + } + + .adsclassup image { + + width: 666rpx; + /* height: 285rpx; */ + } + + .adsclassdown { + + width: 580rpx; + margin: 0 auto; + } + + .adsclassdown text { + margin-left: 30rpx; + font-size: 30rpx; + } \ No newline at end of file diff --git a/pages/leftright/leftright.js b/pages/leftright/leftright.js new file mode 100644 index 0000000..bc2b024 --- /dev/null +++ b/pages/leftright/leftright.js @@ -0,0 +1,29 @@ +const DEFAULT_PAGE = 0; + +Page({ + startPageX: 0, + currentView: DEFAULT_PAGE, + data: { + toView: `card_${DEFAULT_PAGE}`, + list: ['Javascript', 'Typescript', 'Java', 'PHP', 'Go','中华人民共和国','新中国成产100周年'] + }, + + touchStart(e) { + this.startPageX = e.changedTouches[0].pageX; + }, + + touchEnd(e) { + const moveX = e.changedTouches[0].pageX - this.startPageX; + const maxPage = this.data.list.length - 1; + if (Math.abs(moveX) >= 150){ + if (moveX > 0) { + this.currentView = this.currentView !== 0 ? this.currentView - 1 : 0; + } else { + this.currentView = this.currentView !== maxPage ? this.currentView + 1 : maxPage; + } + } + this.setData({ + toView: `card_${this.currentView}` + }); + } +}) \ No newline at end of file diff --git a/pages/leftright/leftright.json b/pages/leftright/leftright.json new file mode 100644 index 0000000..be3fbe0 --- /dev/null +++ b/pages/leftright/leftright.json @@ -0,0 +1,7 @@ +{ + "navigationBarTitleText": "卡片滑动", + "backgroundColor": "#0D1740", + "navigationBarBackgroundColor": "#0D1740", + "navigationBarTextStyle": "white", + "usingComponents": {} +} \ No newline at end of file diff --git a/pages/leftright/leftright.wxml b/pages/leftright/leftright.wxml new file mode 100644 index 0000000..d2f1621 --- /dev/null +++ b/pages/leftright/leftright.wxml @@ -0,0 +1,10 @@ + + + + + {{item}} + + + + diff --git a/pages/leftright/leftright.wxss b/pages/leftright/leftright.wxss new file mode 100644 index 0000000..da8ed4e --- /dev/null +++ b/pages/leftright/leftright.wxss @@ -0,0 +1,28 @@ +page{ + overflow: hidden; +} +.scroll-box{ + white-space: nowrap; + height: 100%; +} + +.card-box{ + display: inline-block; + height:100vh; + width: 100%; +} + +.card{ + display: flex; + justify-content: center; + align-items: center; + box-sizing: border-box; + height:100vh; + width: 100%; + /* margin: 100rpx 200rpx; */ + font-size: 20px; + padding-left: 20rpx; + padding-right: 30rpx; + margin-left: 10rpx; + border-radius: 4px; +} \ No newline at end of file diff --git a/pages/livelist/livelist.js b/pages/livelist/livelist.js new file mode 100644 index 0000000..59b7af0 --- /dev/null +++ b/pages/livelist/livelist.js @@ -0,0 +1,132 @@ +const baseUrl = getApp(); +const api = require('../../config/api.js'); +const util = require('../../config/util.js'); +Page({ + + /** + * 页面的初始数据 + */ + data: { + liveswitch: 1, + hiddenName: false, + listdata: [], + baseurl:baseUrl.globalData.baseimgurl, + + }, + + /** + * 生命周期函数--监听页面加载 + */ + onLoad: function (options) { + + }, + + /** + * 生命周期函数--监听页面初次渲染完成 + */ + onReady: function () { + + }, + + /** + * 生命周期函数--监听页面显示 + */ + onShow: function () { + this.getlivelist(); + }, + + /** + * 生命周期函数--监听页面隐藏 + */ + onHide: function () { + + }, + getlivelist:function(){ + const that = this; + let url = baseUrl.globalData.baseUrl + '/lives/liveslist'; + var param = { + id: '123456789' + }; + //此处为使用封装的post请求 + util.get(url, param).then((res) => { + console.log(res); + that.setData({ + listdata: res.data + }); + + }).catch((errMsg) => { + console.log(errMsg); + }); + }, + /** + * 生命周期函数--监听页面卸载 + */ + onUnload: function () { + + }, + clicklives:function(e){ + console.log(e.currentTarget.id); + }, + + /** + * 页面相关事件处理函数--监听用户下拉动作 + */ + onPullDownRefresh: function () { + + }, + + /** + * 页面上拉触底事件的处理函数 + */ + onReachBottom: function () { + + }, + + /** + * 用户点击右上角分享 + */ + onShareAppMessage: function () { + + }, + liveopen(e) { + let arr = []; + arr = this.data.listdata; + console.log(e.currentTarget.dataset.itemid); + arr.forEach(function (item, index) { + + if (index == e.currentTarget.dataset.itemid) { + item['liveclickopen'] = true; + item['liveclickclose'] = false; + arr[index] = item; + } else { + item['liveclickopen'] = false; + item['liveclickclose'] = true; + arr[index] = item + } + }) + this.setData({ + listdata: arr + }) + }, + liveclose(e) { + + let arr = []; + arr = this.data.listdata; + console.log(e.currentTarget.dataset.itemid); + arr.forEach(function (item, index) { + + if (index == e.currentTarget.dataset.itemid) { + item['liveclickopen'] = false; + item['liveclickclose'] = true; + arr[index] = item; + } else { + item['liveclickopen'] = true; + item['liveclickclose'] = false; + arr[index] = item + } + }) + this.setData({ + listdata: arr + }) + } +}) \ No newline at end of file diff --git a/pages/livelist/livelist.json b/pages/livelist/livelist.json new file mode 100644 index 0000000..6f61de0 --- /dev/null +++ b/pages/livelist/livelist.json @@ -0,0 +1,8 @@ +{ + "usingComponents": {}, + "navigationBarBackgroundColor": "#fff", + "navigationBarTextStyle": "black", + "navigationBarTitleText": "直播列表", + "backgroundColor": "#ccc", + "backgroundTextStyle": "light" +} \ No newline at end of file diff --git a/pages/livelist/livelist.wxml b/pages/livelist/livelist.wxml new file mode 100644 index 0000000..0d540c3 --- /dev/null +++ b/pages/livelist/livelist.wxml @@ -0,0 +1,45 @@ + + + + + + + + + + +

{{item.name}}

+
+ + + {{item.author}} + + + {{item.times}} + + + + {{item.intro}} + +
+ + + +
+ + + + +
\ No newline at end of file diff --git a/pages/livelist/livelist.wxss b/pages/livelist/livelist.wxss new file mode 100644 index 0000000..1af8d75 --- /dev/null +++ b/pages/livelist/livelist.wxss @@ -0,0 +1,189 @@ +.page { + background-color: #F5F5F5; + overflow: hidden; +} + +.zhibocss { + display: flex; + flex-wrap: wrap; + align-content: flex-start; + height: 180rpx; + width: 666rpx; + margin: 0 auto; + margin-top: 50rpx; + background: url(https://ndnd.duiduiedu.com/uploads/pics/line.png); + background-repeat: no-repeat; + background-size: 666rpx 180rpx; + +} + +.livefooter { + height: 23rpx; + width: 623rpx; + margin: 0 auto; + margin-top: -9rpx; +} + +.livefooter image { + + width: 623rpx; + height: 23rpx; + +} + +.item1 { + + width: 50rpx; + height: 150rpx; + box-sizing: border-box; + margin: 15rpx 16rpx; +} + +.itemhead { + margin-top: 20rpx; + margin-left: 20rpx; +} + +.itemhead h2 { + + font-weight: 600; + font-family: 'Arial Narrow', Arial; + font-size: large; +} + +.item1 image { + width: 50rpx; + height: 150rpx; +} + +.item2 { + width: 160rpx; + height: 160rpx; +} + +.item2 image { + margin-left: 10rpx; + width: 150rpx; + height: 160rpx; +} + +.item3 { + width: 334rpx; + height: 170rpx; + padding-right: 15rpx; +} + +.item4 { + padding-top: 10rpx; + width: 75rpx; + height: 180rpx; +} + +.item4 image { + width: 72rpx; + height: 164rpx; +} + +.itemmiddle { + display: flex; + margin-left: 15rpx; + width: 334rpx; + height: 50rpx; +} + +.itemmiddleleft { + display: flex; + margin-top: 10rpx; + flex-direction: row; +} + +.itemmiddleleft text { + color: #AEAEAE; + align-items: center; + font-size: 24rpx; + font-weight: 400; +} + +.itemmiddleleft image { + + width: 30rpx; + height: 30rpx; + padding-right: 10rpx; +} + +.itemmiddleright { + display: flex; + margin-top: 10rpx; + margin-left: 10rpx; + flex-direction: row; +} + +.itemmiddleright text { + color: #AEAEAE; + align-items: center; + font-size: 24rpx; + font-weight: 400; +} + +.itemmiddleright image { + + width: 30rpx; + height: 30rpx; + padding-right: 10rpx; +} + +.itemend { + width: 300rpx; + overflow: hidden; + height: 56rpx; + color: #AEAEAE; + line-height: 28rpx; + margin-bottom: 10rpx; + margin-left: 20rpx; + font-size: 18rpx; +} + +.content { + margin: 0 auto; + width: 632rpx; + border-left: 2rpx solid red; + border-right: 2rpx solid red; +} + +.contentdown { + margin: 0 auto; + width: 650rpx; + height: 23rpx; + margin-top: -9rpx; +} + +.contentdown image { + margin: 0 auto; + width: 648rpx; + height: 23rpx; +} + +.contentmiddle { + margin: 0 auto; + margin-top: 50rpx; + width: 530rpx; +} + +.contentmiddle text { + font-size: 22rpx; + padding-bottom: 30rpx; + +} + +.contentup { + margin: 0 auto; + width: 555rpx; +} + +.contentup image { + width: 100%; + + margin: 0 auto; + margin-top: 30rpx; + height: 160rpx; +} \ No newline at end of file diff --git a/pages/livetest/livetest.js b/pages/livetest/livetest.js new file mode 100644 index 0000000..399534c --- /dev/null +++ b/pages/livetest/livetest.js @@ -0,0 +1,139 @@ +const baseUrl = getApp(); +const api = require('../../config/api.js'); +const util = require('../../config/util.js'); +Page({ + + /** + * 页面的初始数据 + */ + data: { + roomId:1, + accesstoken:'' + }, + + /** + * 生命周期函数--监听页面加载 + */ + onLoad: function (options) { + this.getroomId(options); + }, + + /** + * 生命周期函数--监听页面初次渲染完成 + */ + onReady: function () { + + }, + getroomId:function(ee){ + const that = this; + let url = baseUrl.globalData.baseUrl + '/user/acctoken'; + var param = { + pareid: ee + }; + //此处为使用封装的post请求 + util.get(url, param).then((res) => { + console.log(res.access_token); + wx.setStorageSync('accesstoen', res.access_token) + that.setData({ + accesstoken: res.access_token + }); + + }).catch((errMsg) => { + console.log(errMsg); + }); + }, + getroomlist:function(){ + //getroomlist + const that = this; + let url = baseUrl.globalData.baseUrl + '/user/getroomlist'; + var param = { + access_token: wx.getStorageSync('accesstoen'), + }; + //此处为使用封装的post请求 + util.post(url, param).then((res) => { + console.log(res); + // that.setData({ + // roomId: res.data.room_info.roomId + // }); + + }).catch((errMsg) => { + console.log(errMsg); + }); + + }, + getroomreplyvodelist:function(){ + + const that = this; + let url = baseUrl.globalData.baseUrl + '/user/getroomreplyvide'; + var param = { + access_token: wx.getStorageSync('accesstoen'), + "action": "get_replay", + "room_id": that.roomId, + }; + //此处为使用封装的post请求 + util.post(url, param).then((res) => { + console.log(res); + // that.setData({ + // roomId: res.data.room_info.roomId + // }); + + }).catch((errMsg) => { + console.log(errMsg); + }); + + }, + + /** + * 生命周期函数--监听页面显示 + */ + onShow: function () { + + + this.getroomlist(this.data.accesstoken); + + let roomId = this.data.roomId // 填写具体的房间号,可通过下面【获取直播房间列表】 API 获取 + let customParams = encodeURIComponent(JSON.stringify({ path: 'pages/index/index', pid: 1 })) + // 开发者在直播间页面路径上携带自定义参数(如示例中的path和pid参数),后续可以在分享卡片链接和跳转至商详页时获取,详见【获取自定义参数】、【直播间到商详页面携带参数】章节(上限600个字符,超过部分会被截断) + this.setData({ + roomId, + customParams + }), + + this.getroomreplyvodelist(); + }, + + /** + * 生命周期函数--监听页面隐藏 + */ + onHide: function () { + + }, + + /** + * 生命周期函数--监听页面卸载 + */ + onUnload: function () { + + }, + + /** + * 页面相关事件处理函数--监听用户下拉动作 + */ + onPullDownRefresh: function () { + + }, + + /** + * 页面上拉触底事件的处理函数 + */ + onReachBottom: function () { + + }, + + /** + * 用户点击右上角分享 + */ + onShareAppMessage: function () { + + } +}) \ No newline at end of file diff --git a/pages/livetest/livetest.json b/pages/livetest/livetest.json new file mode 100644 index 0000000..8835af0 --- /dev/null +++ b/pages/livetest/livetest.json @@ -0,0 +1,3 @@ +{ + "usingComponents": {} +} \ No newline at end of file diff --git a/pages/livetest/livetest.wxml b/pages/livetest/livetest.wxml new file mode 100644 index 0000000..f16a6c7 --- /dev/null +++ b/pages/livetest/livetest.wxml @@ -0,0 +1 @@ + diff --git a/pages/livetest/livetest.wxss b/pages/livetest/livetest.wxss new file mode 100644 index 0000000..bf8d79e --- /dev/null +++ b/pages/livetest/livetest.wxss @@ -0,0 +1 @@ +/* pages/livetest/livetest.wxss */ \ No newline at end of file diff --git a/pages/main/main.js b/pages/main/main.js new file mode 100644 index 0000000..17f2da9 --- /dev/null +++ b/pages/main/main.js @@ -0,0 +1,155 @@ +// index.js +const Apps = getApp(); +Page({ + data: { + userInfo: {}, + currentuserinfo: {}, + hasUserInfo: false, + canIUse: wx.canIUse('button.open-type.getUserInfo'), + canIUseGetUserProfile: false, + canIUseOpenData: wx.canIUse('open-data.type.userAvatarUrl') && wx.canIUse('open-data.type.userNickName') // 如需尝试获取用户信息可改为false + }, + // 事件处理函数 + bindViewTap() { + this.getUserProfile(); + }, + onLoad() { + if (wx.getUserProfile) { + this.setData({ + canIUseGetUserProfile: true + }) + } + }, + getUserProfile(e) { + + const that = this; + // 推荐使用wx.getUserProfile获取用户信息,开发者每次通过该接口获取用户个人信息均需用户确认,开发者妥善保管用户快速填写的头像昵称,避免重复弹窗 + wx.getUserProfile({ + desc: '展示用户信息', // 声明获取用户个人信息后的用途,后续会展示在弹窗中,请谨慎填写 + success: (res) => { + Apps.globalData.usersaveinfo = res.userInfo; + this.setData({ + userInfo: res.userInfo, + hasUserInfo: true + }) + // 登录 + wx.login({ + success(res) { + if (res.code) { + //发起网络请求 + wx.request({ + url: 'https://ndnd.duiduiedu.com/addons/unishop/user/authSession', + data: { + code: res.code, + platform: 'MP-WEIXIN' + }, + header: { + 'content-type': 'application/x-www-form-urlencoded' + }, + method: "GET", + datatype: 'json', + success: function (res) { + console.log(res.data) + Apps.globalData.wxopenid = res.data.data.openid, + Apps.globalData.userInfo = res.data.data.userInfo + } + }) + } else { + console.log('登录失败!' + res.errMsg) + } + } + }) + }, + fail: (err) => { + + // 没有允许定位权限 + wx.showToast({ + title: '您拒绝了微信授权,将无法正常使用微信小程序', + icon: 'none' + }); + } + + }) + }, + getPhoneNumber(e) { + + console.log(Apps.globalData) + + if (e.detail.errMsg == 'getPhoneNumber:ok') { + wx.request({ + url: Apps.globalData.baseUrl + '/user/loginForWechatMini', + data: { + 'encryptedData': e.detail.encryptedData, + 'iv': e.detail.iv, + 'session_key': Apps.globalData.userInfo.session_key, + 'openid': Apps.globalData.userInfo.openid, + 'avatar': Apps.globalData.usersaveinfo.avatarUrl, + 'nickname': Apps.globalData.usersaveinfo.nickName + }, + header: { + 'content-type': 'application/json' // 默认值 + }, + method: "POST", + success(res) { + Apps.globalData.currentuserinfo = res.data.data + } + }) + } else { + // 没有允许定位权限 + wx.showToast({ + title: '您拒绝了微信授权,将无法正常使用微信小程序', + icon: 'none' + }); + + } + + }, + getUserInfo(e) { + // 不推荐使用getUserInfo获取用户信息,预计自2021年4月13日起,getUserInfo将不再弹出弹窗,并直接返回匿名的用户个人信息 + this.setData({ + userInfo: e.detail.userInfo, + hasUserInfo: true + }) + }, + getcureentuserinfo() { + console.log(Apps.globalData.currentuserinfo); + this.setData({ + + // currentuserinfo: Apps.globalData.currentuserinfo + currentuserinfo: wx.getStorageSync('userinfo') + + + }) + }, leftright() { + + wx.navigateTo({ + url: '/pages/leftright/leftright', + }) + + }, swipperpics() { + + wx.navigateTo({ + url: '/pages/mine/mine', + }) + }, + tarbar() { + wx.navigateTo({ + url: '/pages/tarbar/tarbar', + }) + }, + clickgrid() { + wx.navigateTo({ + url: '/pages/grid/grid', + }) + }, + clickpics() { + + wx.navigateTo({ + url: '/pages/picsdisplay/picsdisplay', + }) + }, swipecell() { + wx.navigateTo({ + url: '/pages/swipecell/swipecell', + }) + } +}) \ No newline at end of file diff --git a/pages/main/main.json b/pages/main/main.json new file mode 100644 index 0000000..8835af0 --- /dev/null +++ b/pages/main/main.json @@ -0,0 +1,3 @@ +{ + "usingComponents": {} +} \ No newline at end of file diff --git a/pages/main/main.wxml b/pages/main/main.wxml new file mode 100644 index 0000000..729666c --- /dev/null +++ b/pages/main/main.wxml @@ -0,0 +1,41 @@ + + + + + + + + + {{currentuserinfo.mobile}} + + + + + 请使用1.4.4及以上版本基础库 + + + + {{userInfo.nickName}} + + + + + + + + + + + + + + + + + + + + + {{currentuserinfo.nickname}}--{{currentuserinfo.mobile}}--{{currentuserinfo.openid}}--{{currentuserinfo.id}} + + diff --git a/pages/main/main.wxss b/pages/main/main.wxss new file mode 100644 index 0000000..30c9b0a --- /dev/null +++ b/pages/main/main.wxss @@ -0,0 +1,22 @@ +/**index.wxss**/ +.userinfo { + align-self: flex-start; + margin-left: 10rpx; + display: flex; + /* flex-direction: column; */ + align-items: center; + color: #aaa; + justify-content: start; +} + +.userinfo-avatar { + overflow: hidden; + width: 68rpx; + height:68rpx; + margin: 20rpx; + border-radius: 50%; +} + +.usermotto { + margin-top: 200px; +} \ No newline at end of file diff --git a/pages/messageencyclopedias/messageencyclopedias.js b/pages/messageencyclopedias/messageencyclopedias.js new file mode 100644 index 0000000..9470169 --- /dev/null +++ b/pages/messageencyclopedias/messageencyclopedias.js @@ -0,0 +1,143 @@ +const baseUrl = getApp(); +const api = require('../../config/api.js'); +const util = require('../../config/util.js'); +Page({ + + onReady: function (e) { + // 使用 wx.createAudioContext 获取 audio 上下文 context + this.audioCtx = wx.createAudioContext('myAudio') + }, + /** + * 页面的初始数据 + */ + data: { + detailid: 0, + voddetail: [], + autodetail: [], + baseurl: baseUrl.globalData.baseimgurl, + replylist:[] + }, + audioPlay: function () { + this.audioCtx.play() + }, + audioPause: function () { + this.audioCtx.pause() + }, + audio14: function () { + this.audioCtx.seek(14) + }, + audioStart: function () { + this.audioCtx.seek(0) + }, + funplay: function () { + console.log("audio play"); + }, + funpause: function () { + console.log("audio pause"); + }, + funtimeupdate: function (u) { + console.log(u.detail.currentTime); + console.log(u.detail.duration); + }, + funended: function () { + console.log("audio end"); + }, + funerror: function (u) { + console.log(u.detail.errMsg); + }, + preview: function (params) { + console.log(params); + let that = this; + let currentUrl = params.currentTarget.dataset.src; + let arrindex = params.currentTarget.dataset.id; + let picsid = params.currentTarget.dataset.pics; //单条信息ID + console.log(picsid); + + let arr = []; + arr[0] = that.data.baseurl + picsid + console.log('-----'); + console.log(arr); + + wx.previewImage({ + current: currentUrl, // 当前显示图片的http链接 + urls: arr // 需要预览的图片http链接列表 + }) + }, + /** + * 生命周期函数--监听页面加载 + */ + onLoad: function (options) { + console.log(options); + this.setData({ + detailid: options.id + }) + }, + + /** + * 生命周期函数--监听页面初次渲染完成 + */ + onReady: function () { + + }, + + /** + * 生命周期函数--监听页面显示 + */ + onShow: function () { + let id = this.data.detailid; + this.msgdetail(id); + }, + + /** + * 生命周期函数--监听页面隐藏 + */ + onHide: function () { + + }, + + /** + * 生命周期函数--监听页面卸载 + */ + onUnload: function () { + + }, + + /** + * 页面相关事件处理函数--监听用户下拉动作 + */ + onPullDownRefresh: function () { + + }, + + /** + * 页面上拉触底事件的处理函数 + */ + onReachBottom: function () { + + }, + + /** + * 用户点击右上角分享 + */ + onShareAppMessage: function () { + + }, + msgdetail: function (e) { + + const that = this; + let url = baseUrl.globalData.baseUrl + '/msglist/msgdetail'; + var param = { + id: e + }; + //此处为使用封装的post请求 + util.post(url, param).then((res) => { + console.log(res); + that.setData({ + voddetail: res.data + }); + + }).catch((errMsg) => { + console.log(errMsg); + }); + } +}) \ No newline at end of file diff --git a/pages/messageencyclopedias/messageencyclopedias.json b/pages/messageencyclopedias/messageencyclopedias.json new file mode 100644 index 0000000..f2605eb --- /dev/null +++ b/pages/messageencyclopedias/messageencyclopedias.json @@ -0,0 +1,8 @@ +{ + "usingComponents": {}, + "navigationBarBackgroundColor": "#fff", + "navigationBarTextStyle": "black", + "navigationBarTitleText": "资讯百科", + "backgroundColor": "#ccc", + "backgroundTextStyle": "light" +} \ No newline at end of file diff --git a/pages/messageencyclopedias/messageencyclopedias.wxml b/pages/messageencyclopedias/messageencyclopedias.wxml new file mode 100644 index 0000000..4aed169 --- /dev/null +++ b/pages/messageencyclopedias/messageencyclopedias.wxml @@ -0,0 +1,94 @@ + + + + + + + + + + + + + + + + + + + + + {{voddetail['intro']}} + + + + + + + + + + + \ No newline at end of file diff --git a/pages/messageencyclopedias/messageencyclopedias.wxss b/pages/messageencyclopedias/messageencyclopedias.wxss new file mode 100644 index 0000000..92aa0f4 --- /dev/null +++ b/pages/messageencyclopedias/messageencyclopedias.wxss @@ -0,0 +1,199 @@ +.courselive { + width: 750rpx; + height: 403rpx; +} + +.courselivecontinor { + background-color: #F5F5F5; +} + +.functionalarea { + display: flex; + flex-flow: row wrap; + align-content: flex-start; + width: 750rpx; +} + +.areaitem { + display: flex; + flex-direction: column; + width: 666rpx; + height: 100rpx; + margin: 0 auto; + margin-top: 20rpx; +} + +.areaitemup { + width: 100%; + height: 60rpx; + margin-top: 30rpx; + text-align: center; +} + +.areaitemdown { + width: 100%; + height: 60rpx; +} + +.percentageclass { + margin: 0 auto; + margin-top: 35rpx; + width: 412rpx; +} + +.messagearea text { + display: block; + font-size: 40rpx; + font-weight: 600rpx; + margin-left: 60rpx; + margin-top: 60rpx; +} + +.msseagehead { + display: flex; + flex-direction: row; +} + +.headleft { + margin-left: 60rpx; + margin-top: 50rpx; + width: 140rpx; + height: 140rpx; + border-radius: 50%; + overflow: hidden; +} + +.headleft image { + + width: 130rpx; + height: 133rpx; +} + +.headright { + margin-top: 80rpx; + margin-left: 23rpx; + width: 200rpx; + height: 142rpx; +} + +.headrightup text { + + height: 40rpx; + width: 100rpx; + overflow: hidden; + font-size: 40rpx; + font-weight: 400rpx; +} + +.headrightdown { + margin-top: 10rpx; +} + +.msseagemiddle { + margin: 0 60rpx; +} + +.mssagemiddledown { + margin: 25rpx auto; +} + +.mssagemiddledown image { + + width: 100%; + height: 265rpx; +} + +.messageend { + + margin: 0 60rpx; + display: flex; + flex-direction: row; + justify-content: space-between; + +} + +.messageendleft { + width: 150rpx; + height: 30rpx; +} + +.messageendleft image { + width: 100rpx; + height: 30rpx; +} + +.messageendmiddle { + width: 150rpx; + height: 30rpx; +} + +.messageendmiddle image { + width: 35rpx; + height: 30rpx; +} + +.messageendmiddle text { + + font-size: 28rpx; + padding-left: 23rpx; +} + +.messageendright { + + width: 150rpx; + height: 30rpx; +} + +.messageendright image { + width: 35rpx; + height: 30rpx; + +} + +.messageendright text { + + font-size: 28rpx; + padding-left: 23rpx; +} + +.feigexian { + + margin: 0 60rpx; + margin-top: 60rpx; + border-bottom: 2rpx solid #ada2a2; +} + +.functionalarea { + margin-top: 0rpx; +} + +.paybtnclass { + margin-right: 80rpx; +} + +.adsclass { + + width: 666rpx; + margin: 0 auto; + background-color: #dbfeff; + height: 100%; + margin-top: 80rpx; +} + +.adsclassup image { + + width: 666rpx; + /* height: 285rpx; */ + /* height: 100%; */ +} + +.adsclassdown { + + width: 580rpx; + margin: 0 auto; +} + +.adsclassdown text { + margin-left: 30rpx; + font-size: 30rpx; +} \ No newline at end of file diff --git a/pages/messagelist/messagelist.js b/pages/messagelist/messagelist.js new file mode 100644 index 0000000..36c9678 --- /dev/null +++ b/pages/messagelist/messagelist.js @@ -0,0 +1,93 @@ +const baseUrl = getApp(); +const api = require('../../config/api.js'); +const util = require('../../config/util.js'); +Page({ + + /** + * 页面的初始数据 + */ + data: { + messagelist:[], + baseurl:baseUrl.globalData.baseimgurl + }, + + /** + * 生命周期函数--监听页面加载 + */ + onLoad: function (options) { + + }, + + /** + * 生命周期函数--监听页面初次渲染完成 + */ + onReady: function () { + + }, + + /** + * 生命周期函数--监听页面显示 + */ + onShow: function () { + this.msglist(); + }, + + /** + * 生命周期函数--监听页面隐藏 + */ + onHide: function () { + + }, + + /** + * 生命周期函数--监听页面卸载 + */ + onUnload: function () { + + }, + + /** + * 页面相关事件处理函数--监听用户下拉动作 + */ + onPullDownRefresh: function () { + + }, + + /** + * 页面上拉触底事件的处理函数 + */ + onReachBottom: function () { + + }, + + /** + * 用户点击右上角分享 + */ + onShareAppMessage: function () { + + }, + messageinfo:function(e){ + console.log(e); + wx.navigateTo({ + url: '/pages/messageencyclopedias/messageencyclopedias?id='+e.currentTarget.id, + }) + }, + msglist:function(){ + + const that = this; + let url = baseUrl.globalData.baseUrl + '/msglist/messagelist'; + var param = { + id: '123456789' + }; + //此处为使用封装的post请求 + util.get(url, param).then((res) => { + console.log(res); + that.setData({ + messagelist: res.data + }); + + }).catch((errMsg) => { + console.log(errMsg); + }); + } +}) \ No newline at end of file diff --git a/pages/messagelist/messagelist.json b/pages/messagelist/messagelist.json new file mode 100644 index 0000000..f2605eb --- /dev/null +++ b/pages/messagelist/messagelist.json @@ -0,0 +1,8 @@ +{ + "usingComponents": {}, + "navigationBarBackgroundColor": "#fff", + "navigationBarTextStyle": "black", + "navigationBarTitleText": "资讯百科", + "backgroundColor": "#ccc", + "backgroundTextStyle": "light" +} \ No newline at end of file diff --git a/pages/messagelist/messagelist.wxml b/pages/messagelist/messagelist.wxml new file mode 100644 index 0000000..4c843c1 --- /dev/null +++ b/pages/messagelist/messagelist.wxml @@ -0,0 +1,12 @@ + + + + + + + {{item.name}} + {{item.intro}} + + + + diff --git a/pages/messagelist/messagelist.wxss b/pages/messagelist/messagelist.wxss new file mode 100644 index 0000000..b5e70b8 --- /dev/null +++ b/pages/messagelist/messagelist.wxss @@ -0,0 +1,62 @@ +.messagelist { + display: flex; + flex-direction: row; + width: 678rpx; + height: 170rpx; + margin: 0 auto; + margin-top: 35rpx; + border-radius: 3%; + border: 1rpx solid #22d0d7; + background-color: #dbfcfa; +} + +.messagelist2 { + display: flex; + flex-direction: row; + width: 678rpx; + height: 170rpx; + margin: 0 auto; + margin-top: 35rpx; + border-radius: 3%; + border: 1rpx solid #fd7bb2; + background-color: #ffe6f3; +} + +.listleft { + + width: 192rpx; + height: 123; + margin: 23rpx 20rpx; +} + +.listleft image { + + width: 192rpx; + height: 123rpx; +} + +.listright { + width: 400rpx; + height: 123rpx; + margin: 23rpx 20rpx; +} + +.listrightup { + width: 400rpx; + overflow: hidden; + height: 50rpx; + line-height: 50rpx; +} + +.listrightup text { + width: 400rpx; + overflow: hidden; + font-size: 30rpx; + font-weight: 600; +} + +.listrightdown text { + width: 400rpx; + overflow: hidden; + font-size: 26rpx; +} \ No newline at end of file diff --git a/pages/mine/mine.js b/pages/mine/mine.js new file mode 100644 index 0000000..8ad51a1 --- /dev/null +++ b/pages/mine/mine.js @@ -0,0 +1,362 @@ +const DEFAULT_PAGE = 0; +const Apps = getApp(); +const api = require('../../config/api.js'); +const util = require('../../config/util.js'); +import Dialog from '@vant/weapp/dialog/dialog'; +Page({ + + data: { + myimg: 'https://ndnd.duiduiedu.com/uploads/pics/minemainhead.png', + userinfo: '', + avatar: '', + id: 0, + show: false, + popmsgdata: null, + username: '', + userdatainfo: '' + }, + getUserInfo(event) { + console.log(event.detail); + }, + onClose() { + this.setData({ show: false }); + }, + /** + * 生命周期函数--监听页面加载 + */ + onLoad: function (options) { + + }, + usernamemdclick: function (params) { + this.setData({ showpopup: true }); + console.log(params); + }, + onClosepopup: function (params) { + this.setData({ showpopup: false }); + }, + onChangeuser: function (params) { + console.log(params.detail); + this.setData({ + username: params.detail + }) + }, + saveusername: function (params) { + //保存用户名称 + console.log(this.data.username); + this.updateusername(wx.getStorageSync('wxuserid'), this.data.username); + + }, + /** + * 生命周期函数--监听页面显示 + */ + onShow: function () { + Apps.islogin(); + + // if (Apps.globalData.currentuserinfo == null){ + // wx.redirectTo({ + // url: '/pages/userlogin/userlogin', + // }) + // } + + this.loaddata(); + this.popmsg(); + this.userisblack(wx.getStorageSync('userinfo').mobile); //是否黑名单 + + + + // } + + }, + kfbtn:function (params) { + + try { + wx.openCustomerServiceChat({ + extInfo: { + url: 'https://work.weixin.qq.com/kfid/kfc79f714830ba6cc05' //客服ID + }, + corpId: 'wwaf23716917173cba', //企业微信ID + success(res) {} + }) + } catch (error) { + showToast("请更新至微信最新版本") + } + + }, + userisblack: function (mobile) { + //用户是否黑名单 + //直播列表 + const that = this; + let url = Apps.globalData.baseUrl + '/user/isblack'; + var param = { + mobile: mobile + }; + //此处为使用封装的post请求 + util.post(url, param).then((res) => { + console.log(res); + wx.setStorageSync('userisblack', res); + }).catch((errMsg) => { + console.log(errMsg); + }); + }, + aboutclick: function () { + //关于我们 + wx.navigateTo({ + url: '/pages/messageencyclopedias/messageencyclopedias?id=1', + }) + }, + onChooseAvatar: function (params) { + console.log(params); + }, + onClickShow: function () { + //加载数据 + let url = Apps.globalData.baseUrl + '/user/signdata'; + var param = { + user_id: wx.getStorageSync('wxuserid') + }; + //此处为使用封装的post请求 + util.post(url, param).then((res) => { + + let titles = "签到成功"; + if (res == 1) { + // titles = "签到成功"; + this.popmsg(); + } else if (res == 2) { + // titles = "连续签到成功"; + this.popmsg(); + } else if (res == 3) { + // titles = "重新签到成功"; + this.popmsg(); + } else { + titles = "今天已签到成功,无须再签到" + wx.showToast({ + title: titles,//提示文字 + duration: 2000,//显示时长 + mask: true,//是否显示透明蒙层,防止触摸穿透,默认:false + icon: 'none', //图标,支持"success"、"loading" + success: function () { },//接口调用成功 + fail: function () { }, //接口调用失败的回调函数 + complete: function () { } //接口调用结束的回调函数 + }) + + } + + }).catch((errMsg) => { + console.log(errMsg); + }); + + }, + onClickHide(e) { + this.setData({ show: false }); + //签到 + }, + noop(e) { + //加载数据 + console.log(e); + let url = Apps.globalData.baseUrl + '/user/mpopmsg'; + var param = { + user_id: wx.getStorageSync('wxuserid'), + id: e.currentTarget.id, + xid: e.currentTarget.dataset.xid + }; + //此处为使用封装的post请求 + util.post(url, param).then((res) => { + console.log(res); + this.setData({ show: false }); + this.loaddata(); + this.popmsg(); + + }).catch((errMsg) => { + console.log(errMsg); + }); + + }, + loaddata: function (params) { + + // if (Apps.globalData.currentuserinfo == null){ + // wx.redirectTo({ + // url: '/pages/userlogin/userlogin', + // }) + // } + // Apps.islogin(); // 已在 onShow 中检查,此处移除避免重复跳转 + + //加载数据 + let url = Apps.globalData.baseUrl + '/user/getuserinfobyopenid'; + var param = { + // id: Apps.globalData.currentuserinfo.id + id: wx.getStorageSync('wxuserid') + }; + //此处为使用封装的post请求 + util.post(url, param).then((res) => { + console.log(res); + // 移除重复的登录跳转,避免跳转两次 + // if (res.data == null) { + // //如果用户在数据中没有数据则重新注册 + // wx.navigateTo({ + // url: '/pages/userlogin/userlogin', + // }) + // } + if (res.data) { + Apps.globalData.userinfo = res.data; + // const userdatainfo = wx.getStorageSync('userinfo'); + console.log("res==============") + console.log(res) + this.setData({ + userinfo: res.data, + myimg: res.data.avatar, + username: res.data.username, + userdatainfo: res.data + }) + wx.setStorageSync('wxuserid', res.data.id); + wx.setStorageSync('userinfo', res.data); + wx.setStorageSync('wxopenid', res.data.openid); + } + + }).catch((errMsg) => { + console.log(errMsg); + }); + }, + vipclick: function (params) { + wx.navigateTo({ + url: '/pages/vipquanyi/vipquanyi', + }) + }, + myaddressclick: function (params) { + wx.navigateTo({ + url: '/pages/myaddress/myaddress', + }) + }, + vipchargeclick: function (params) { + wx.navigateTo({ + url: '/pages/viprecharge/viprecharge', + }) + }, + collectioncourseclick: function (params) { + wx.navigateTo({ + url: '/pages/collectionsub/collectionsub', + }) + }, + collectioncourse: function (params) { + wx.navigateTo({ + url: '/pages/collectioncourse/collectioncourse', + }) + }, + vipquanyiclick: function (params) { + wx.redirectTo({ + url: '/pages/viprecharge/viprecharge', + }) + }, + chargeshopclick: function (params) { + wx.navigateTo({ + url: '/pages/chargeshop/chargeshop', + }) + }, + mycommunityinfoclick: function (params) { + wx.navigateTo({ + url: '/pages/mycommunityinfo/mycommunityinfo', //我的怒贴 + }) + }, + myexamanalysisclick: function (params) { + wx.navigateTo({ + url: '/pages/myexamanalysis/myexamanalysis', //我的怒贴 + }) + }, + popmsg: function () { + + //加载弹窗 + if (wx.getStorageSync('wxuserid') == null) + return; + + let url = Apps.globalData.baseUrl + '/user/getpopmsg'; + var param = { + id: wx.getStorageSync('wxuserid') + }; + //此处为使用封装的post请求 + util.post(url, param).then((res) => { + console.log(res); + if (res.data != null) { + this.setData({ + show: true, + popmsgdata: res.data + }); + } + }).catch((errMsg) => { + console.log(errMsg); + }); + + }, + myonChooseAvatar: function (e) { + console.log("fan------------") + console.log(e.detail.avatarUrl); + const tempFilePaths = e.detail.avatarUrl; + const that = this; + wx.uploadFile({ + url: Apps.globalData.baseUrl + '/wordslist/uploadpics', //仅为示例,非真实的接口地址 + filePath: tempFilePaths, + name: 'file', + formData: { + 'user': 'test' + }, + success(res) { + const dataurl = Apps.globalData.baseimgurl + JSON.parse(res.data); + that.updateuserimage(wx.getStorageSync('wxuserid'), dataurl); + that.setData({ + myimg: dataurl + }) + } + }) + }, + updateuserimage: function (id, avatar) { + + //更新用户头像 + const that = this; + let url = Apps.globalData.baseUrl + '/user/updateuserimage'; + var param = { + id: id, + avatar: avatar + }; + //此处为使用封装的post请求 + util.post(url, param).then((res) => { + + }).catch((errMsg) => { + console.log(errMsg); + }); + }, + updateusername: function (id, username) { + + //更新用户头像 + const that = this; + let url = Apps.globalData.baseUrl + '/user/updateusername'; + var param = { + id: id, + username: username + }; + //此处为使用封装的post请求 + util.post(url, param).then((res) => { + that.loaddata(); + }).catch((errMsg) => { + console.log(errMsg); + }); + }, + handleLogout: function () { + try { + wx.removeStorageSync('wxopenid'); + wx.removeStorageSync('wxuserid'); + wx.removeStorageSync('userinfo'); + wx.removeStorageSync('userisblack'); + } catch (e) { + console.log('清理本地登录信息失败:', e); + } + this.setData({ + userinfo: '', + userdatainfo: '', + myimg: 'https://ndnd.duiduiedu.com/uploads/pics/minemainhead.png', + }); + wx.showToast({ + title: '已退出登录', + icon: 'success', + duration: 1500, + }); + // 如需跳到登录页,可放开: + wx.redirectTo({ url: '/pages/userlogin/userlogin' }); + } +}) \ No newline at end of file diff --git a/pages/mine/mine.json b/pages/mine/mine.json new file mode 100644 index 0000000..55c8763 --- /dev/null +++ b/pages/mine/mine.json @@ -0,0 +1,4 @@ +{ + "usingComponents": {}, + "navigationBarTitleText": "怼自己" +} \ No newline at end of file diff --git a/pages/mine/mine.wxml b/pages/mine/mine.wxml new file mode 100644 index 0000000..e6bbed8 --- /dev/null +++ b/pages/mine/mine.wxml @@ -0,0 +1,108 @@ + + + + + + + + + + + + {{userdatainfo.username}} + + + + + + + + + + + + + + + + + + + + + + + + {{userinfo.score}} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + {{popmsgdata.name}}怼币 + 来源:{{popmsgdata.msg}} + + + + + + + + \ No newline at end of file diff --git a/pages/mine/mine.wxss b/pages/mine/mine.wxss new file mode 100644 index 0000000..fc500fa --- /dev/null +++ b/pages/mine/mine.wxss @@ -0,0 +1,362 @@ +/* 我的头部 */ +Image { + height: auto; +} + +.minemain { + width: 690rpx; + height: 250rpx; + margin: 0 auto; + background-image: url('https://ndnd.duiduiedu.com/uploads/pics/minemainback1.png'); + background-repeat: no-repeat; + /*下面的是关键的设置100%显示*/ + background-size: 100% 100%; +} + +.minemainleft { + display: flex; + width: 400rpx; + margin-top: 46rpx; + float: left; +} + +.mineleft1 image { + position: absolute; + left: 0rpx; + width: 153rpx; + height: 156rpx; + align-items: center; + z-index: 0; + border-radius: 50%; +} +.mineleft1 button{ + width: 153rpx; + height: 156rpx; + margin-left: 32rpx; + border-radius: 50%; + flex-direction: column; + justify-content: center; + align-items: center; + z-index: 0; +} + +.mineleft2 { + width: 500rpx; + height: 56rpx; + margin-left: 32rpx; + margin-top: 30rpx; +} +.leftup { + + width: 380rpx; + height: 56rpx; + line-height: 56rpx; + overflow:hidden; +} +.leftup text { + width: 500rpx; + font-size: 40rpx; + color: white; + overflow:hidden; +} +.leftdown{ + width: 300rpx; + height: 56rpx; + line-height: 56rpx; +} +.leftdown label { + width: 300rpx; + font-size: 24rpx; + color: white; +} + +.minemainright { + + float: right; + width: 100rpx; + height: 250rpx; + margin-right: 20rpx; +} + +.item1 { + width: 100rpx; + height: 100rpx; + margin-top: 46rpx; +} + +.item1 image { + width: 60rpx; + height: 60rpx; + margin-top: 46rpx; +} + +/* 我的头部 */ + +/* vip权益 */ +.minevipquanyi { + + display: flex; + flex-direction: row; + justify-content: flex-start; + align-items: center; + width: 690rpx; + height: 100rpx; + margin: 20rpx auto; + background-color: #e2feff; +} + +.minemiddle1 { + + width: 240rpx; + height: 72rpx; + text-align: left; + margin-left: 20rpx; +} + +.minemiddle1 image { + width: 232rpx; + height: 72rpx; +} + +.minemiddle2 { + width: 200rpx; + height: 60rpx; + line-height: 60rpx; + text-align: center; + margin-left: 20rpx; +} + +.minemiddle2 text { + width: 200rpx; + height: 60rpx; + font-weight: 700; + font-size: 40rpx; + color: #1CCFD6; +} + +.minemiddle3 { + width: 220rpx; + height: 60rpx; + text-align: right; + margin-left: 10rpx; + margin-right: 20rpx; +} + +.minemiddle3 image { + width: 208rpx; + height: 64rpx; +} + +/* vip权益 */ + +/* 金币兑换 */ +.minevipduihuan { + + display: flex; + flex-direction: row; + justify-content: center; + align-items: center; + width: 690rpx; + height: 100rpx; + margin: 0 auto; + +} + +.duihuan1 { + width: 340rpx; + text-align: left; +} + +.duihuan1 image { + width: 340rpx; + height: 107rpx; +} + +.duihuan2 { + margin-left: 10rpx; + width: 340rpx; + text-align: left; +} + +.duihuan2 image { + width: 340rpx; + height: 107rpx; +} + +/* 金币兑换 */ + +/* 我的工具列表 */ + +.minetoolslist { + width: 690rpx; + height: 460rpx; + background-color: #e0feff; + margin: 40rpx auto; + border-radius: 3%; +} + +.minetoolslist image { + + margin-left: 110rpx; + margin-top: 40rpx; + margin-bottom: 40rpx; + width: 85rpx; + height: 124rpx; + +} + +/* 我的工具列表 */ + +/* 联系列表 */ +.linklist { + width: 690rpx; + height: 72rpx; + margin: 0 auto; + margin-bottom: 10rpx; +} + +.linklist2 { + width: 690rpx; + margin: 0 auto; + margin-bottom: 20rpx; + +} + +.linklist2 button { + background-image: url('https://ndnd.duiduiedu.com/uploads/pics/minemainmg1.png'); + background-repeat: no-repeat; + height: 72rpx; + border: none; + font-size: 16px; +} + +.linklist3 { + + background-image: url('https://ndnd.duiduiedu.com/uploads/pics/minemainkf.png'); + background-repeat: no-repeat; + background-size: cover; + background-color: #fff1f7; + height: 60rpx; + font-size: 16px; + width: 690rpx; + margin: 0 auto; + margin-bottom: 40rpx; +} + +.linklist3::after { + border: none; +} + +.linklist image { + width: 690rpx; + height: 72rpx; +} + +/* 联系列表 */ +/* vip图标 */ +.vipimage { + display: flex; + flex-direction: row; + justify-content: center; + align-items: center; + position: relative; + padding-right: 0rpx; + top: -2rpx; + left: 170rpx; + width: 250rpx; + height: 33rpx; + +} + +.vipimage text { + line-height: 35rpx; + height: 35rpx; + color: white; + font-size: 28rpx; +} + +.vipimage image { + + margin-left: 0rpx; + width: 37rpx; + height: 33rpx; + z-index: 2; +} + +/* vip图标 */ + +.wrapper { + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; + height: 100%; +} + +.block { + width: 100%; + height: 100%; + background: url('https://ndnd.duiduiedu.com/uploads/pics/userwrapper01.png') center no-repeat; + background-size: contain; +} + +.blockbutton { + width: 200rpx; + height: 40rpx; + position: relative; + left: 100rpx; + top: 400rpx; +} + +.blocktext1 { + + width: 250rpx; + height: 60rpx; + position: relative; + left: 280rpx; + top: 800rpx; +} + +.blocktext1 text { + font-size: 22rpx; +} + +.blocktext2 { + + width: 200rpx; + height: 60rpx; + position: relative; + left: 310rpx; + top: 820rpx; +} + +.blocktext2 text { + font-size: 28rpx; + color: #fbaa4c; +} + +.circleimages { + + position:fixed; + margin-left: 32rpx; + border-radius: 48%; + flex-direction: column; + justify-content: center; + align-items: center; + width: 150rpx; + height: 150rpx; + top: 55rpx; +} +.usernameclass{ + margin: 30 auto; + color: white; +} + +.usercontian{ + height: 750rpx; + text-indent: 10%; + word-break:break-all; + overflow-y: scroll; + padding-left: 20rpx; + padding-right: 40rpx; +} \ No newline at end of file diff --git a/pages/myaddress/myaddress.js b/pages/myaddress/myaddress.js new file mode 100644 index 0000000..1be5e72 --- /dev/null +++ b/pages/myaddress/myaddress.js @@ -0,0 +1,240 @@ +const DEFAULT_PAGE = 0; +const baseUrl = getApp(); +const api = require('../../config/api.js'); +const util = require('../../config/util.js'); +Page({ + + /** + * 页面的初始数据 + */ + data: { + id:1, + title:'我的地址', + listdata:[], //地址列表 + listdatamorei:[],//地址列表默认地址 + currentdata:[], //当前值 + isnewadd:1,//是否新增,1为新增,2为修改 + checked:true + }, + + /** + * 生命周期函数--监听页面加载 + */ + onLoad: function (options) { + wx.setNavigationBarTitle({ + title: this.data.title, + }) + baseUrl.islogin(); + }, + + /** + * 生命周期函数--监听页面初次渲染完成 + */ + onReady: function () { + + }, + + /** + * 生命周期函数--监听页面显示 + */ + onShow: function () { + this.getaddresslist(wx.getStorageSync('wxuserid')); + this.getaddresslistmorei(wx.getStorageSync('wxuserid')); + }, + + /** + * 生命周期函数--监听页面隐藏 + */ + onHide: function () { + + }, + + /** + * 生命周期函数--监听页面卸载 + */ + onUnload: function () { + + }, + + /** + * 页面相关事件处理函数--监听用户下拉动作 + */ + onPullDownRefresh: function () { + + }, + + /** + * 页面上拉触底事件的处理函数 + */ + onReachBottom: function () { + + }, + + /** + * 用户点击右上角分享 + */ + onShareAppMessage: function () { + + }, + onClickShow() { + this.setData({ show: true }); + }, + + onClickHide() { + this.setData({ show: false }); + }, + submit:function(e){ + console.log(e); + let isnewadd=this.data.isnewadd; + let isdefault=this.data.checked?0:1; + + let name=e.detail.value.name; + let areaname=e.detail.value.areaname; + let phone=e.detail.value.phone; + let address=e.detail.value.address; + + if(isnewadd==1){ + + //修改 + //得到当前数据 + const that = this; + let url = baseUrl.globalData.baseUrl + '/myaddress/addressadd'; + var param = { + name:name, + phone:phone, + region:areaname, + addressinfo:address, + isdefault:isdefault + }; + //此处为使用封装的post请求 + util.post(url, param).then((res) => { + // console.log(res); + // that.setData({ + // currentdata:res.data + // }); + }).catch((errMsg) => { + console.log(errMsg); + }); + + + }else{ + + //修改 + //得到当前数据 + const that = this; + let id=that.data.id; + let url = baseUrl.globalData.baseUrl + '/myaddress/updateaddress'; + + var param = { + id:id, + name:name, + phone:phone, + region:areaname, + addressinfo:address, + isdefault:isdefault + }; + //此处为使用封装的post请求 + util.post(url, param).then((res) => { + // console.log(res); + // that.setData({ + // currentdata:res.data + // }); + }).catch((errMsg) => { + console.log(errMsg); + }); + } + this.setData({ show: false }); + wx.navigateTo({ + url: '/pages/myaddress/myaddress', + }) + }, + modfiyclick:function(params) { + console.log(params.currentTarget.id); + let id=params.currentTarget.id; + this.setData({ + show: true, + isnewadd:2, + id:id + }); + this.getcurrentdata(id); + + }, + delclick:function(params) { + console.log(params); + this.deletefun(params.currentTarget.id); + wx.navigateTo({ + url: '/pages/myaddress/myaddress', + }) + }, + onChange({ detail }) { + // 需要手动对 checked 状态进行更新 + console.log(detail) + this.setData({ checked: detail }); + }, + getaddresslist:function(params) { + const that = this; + let url = baseUrl.globalData.baseUrl + '/myaddress/myaddresslist'; + var param = { + user_id:params + }; + //此处为使用封装的post请求 + util.post(url, param).then((res) => { + console.log(res); + that.setData({ + listdata:res.data + }); + }).catch((errMsg) => { + console.log(errMsg); + }); + }, + getaddresslistmorei:function(params) { + const that = this; + let url = baseUrl.globalData.baseUrl + '/myaddress/myaddresslistdefault'; + var param = { + user_id:params + }; + //此处为使用封装的post请求 + util.post(url, param).then((res) => { + console.log(res); + that.setData({ + listdatamorei:res.data + }); + }).catch((errMsg) => { + console.log(errMsg); + }); + },getcurrentdata:function(params) { + //得到当前数据 + const that = this; + let url = baseUrl.globalData.baseUrl + '/myaddress/getmyaddressbyid'; + var param = { + id:params + }; + //此处为使用封装的post请求 + util.post(url, param).then((res) => { + console.log(res); + that.setData({ + currentdata:res.data + }); + }).catch((errMsg) => { + console.log(errMsg); + }); + }, + deletefun:function(params) { + + //得到当前数据 + const that = this; + let url = baseUrl.globalData.baseUrl + '/myaddress/myaddresslistdelete'; + var param = { + id:params + }; + //此处为使用封装的post请求 + util.post(url, param).then((res) => { + // console.log(res); + // that.setData({ + // currentdata:res.data + // }); + }).catch((errMsg) => { + console.log(errMsg); + }); + } +}) \ No newline at end of file diff --git a/pages/myaddress/myaddress.json b/pages/myaddress/myaddress.json new file mode 100644 index 0000000..8835af0 --- /dev/null +++ b/pages/myaddress/myaddress.json @@ -0,0 +1,3 @@ +{ + "usingComponents": {} +} \ No newline at end of file diff --git a/pages/myaddress/myaddress.wxml b/pages/myaddress/myaddress.wxml new file mode 100644 index 0000000..151b14e --- /dev/null +++ b/pages/myaddress/myaddress.wxml @@ -0,0 +1,68 @@ + + + + + + + + {{listdatamorei['name']}}{{listdatamorei['phone']}} + [默认地址] + + {{listdatamorei['addressinfo']}} + + + + + + + + + + + + + + + + + + + {{item.name}}{{item.phone}} + + {{item.addressinfo}} + + + + + + + + + + +
+ + 添加新地址 + + + + + + + + + + + + + + + + + + + +
+
+
\ No newline at end of file diff --git a/pages/myaddress/myaddress.wxss b/pages/myaddress/myaddress.wxss new file mode 100644 index 0000000..f04d9fd --- /dev/null +++ b/pages/myaddress/myaddress.wxss @@ -0,0 +1,140 @@ +/* 商品详情头部 */ +Page { + background-color: #f1f1f1; +} + +.goodsheads { + + width: 666rpx; + height: 155rpx; + margin: 0 auto; + border: 1rpx solid #ffffff; + border-radius: 8rpx; + background-color: #ffffff; + display: flex; + flex-direction: row; + justify-content: flex-start; + align-items: center; +} + +.headleft image { + + margin: 0 40rpx; + width: 56rpx; + height: 56rpx; + +} + +.headmiddle { + + width: 452rpx; + height: 90rpx; + display: flex; + flex-direction: column; + justify-content: center; + align-items: left; +} + +.bigfont { + font-size: 30rpx; + color: black; +} + +.smallfont { + + margin-left: 30rpx; + font-size: 26rpx; + color: #b6b6b6; +} + +.middledown { + font-size: 26rpx; + color: black; + width: 452rpx; +} + +.headright image { + width: 50rpx; + height: 50rpx; +} + +.moreiaddress { + color: red; + font-size: 26rpx; + margin-left: 30rpx; +} + +/* 商品详情头部 */ + +/* 分割线 */ +.feigeixian { + width: 607rpx; + height: 1rpx; + margin: 0 auto; + background-color: #909090; +} + +/* 分割线 */ + +.btnmyaddress { + + width: 666rpx; + margin: 0 auto; + border-top-left-radius: 0; + border-top-right-radius: 0; + border-bottom-right-radius: 5%; + border-bottom-left-radius: 5%; + background-color: #1ccfd6 !important; + font-size: 40rpx; + +} + +/* 弹窗信息 */ + +.wrapper { + display: flex; + flex-direction: column; + justify-content: center; + align-content: center; + width: 520rpx; + height: 670rpx; + + margin: 0 auto; + margin-top: 20%; +} +.wrapperup { + width: 520rpx; + height: 70rpx; + text-align: center; + border-radius: 5% 5% 0 0; + background-color: #1ccfd6; +} +.wrapperup text{ + + text-align: center; + color:white; + font-size:28rpx; + height: 70rpx; + line-height: 70rpx; + +} + +.wrappermiddle{ + width: 520rpx; + height: 570rpx; + background-color:#ffffff; +} +.wrapperdown{ + width: 520rpx; + height: 100rpx; + background-color:#f6f4f4; + border-radius: 0 0 5% 5%; +} +.savebtnclass{ + width: 90%; + height: 70rpx; + background-color: #1ccfd6; + color: white; + margin: 0 auto; + line-height: 70rpx; +} \ No newline at end of file diff --git a/pages/mycommunityinfo/mycommunityinfo.js b/pages/mycommunityinfo/mycommunityinfo.js new file mode 100644 index 0000000..1b25f7a --- /dev/null +++ b/pages/mycommunityinfo/mycommunityinfo.js @@ -0,0 +1,243 @@ +const DEFAULT_PAGE = 0; +const baseUrl = getApp(); +const api = require('../../config/api.js'); +const util = require('../../config/util.js'); +Page({ + + /** + * 页面的初始数据 + */ + data: { + baseurl: baseUrl.globalData.baseimgurl, + messagelist: [], + startPageX: 0, + currentView: DEFAULT_PAGE, + imagecount: 4, + indeximagecount: 4, + active: 1, + challengeactive: 1, + toView: `card_${DEFAULT_PAGE}`, + list: [], + replylist: [], + imageslists: [] //图片预览 + }, + + /** + * 生命周期函数--监听页面加载 + */ + onLoad: function (options) { + wx.setNavigationBarTitle({ + title: '我的怼贴', + }) + baseUrl.islogin(); + }, + + /** + * 生命周期函数--监听页面初次渲染完成 + */ + onReady: function () { + + }, + + /** + * 生命周期函数--监听页面显示 + */ + onShow: function () { + //头部消息 + this.msglist(); + //留言类型 + this.wrodtypelist(); + //回复留言列表 + this.getwords(1); + }, + + /** + * 生命周期函数--监听页面隐藏 + */ + onHide: function () { + + }, + + /** + * 生命周期函数--监听页面卸载 + */ + onUnload: function () { + + }, + + /** + * 页面相关事件处理函数--监听用户下拉动作 + */ + onPullDownRefresh: function () { + + }, + + /** + * 页面上拉触底事件的处理函数 + */ + onReachBottom: function () { + + }, + + /** + * 用户点击右上角分享 + */ + onShareAppMessage: function () { + + }, + touchStart(e) { + this.startPageX = e.changedTouches[0].pageX; + }, + touchEnd(e) { + + const moveX = e.changedTouches[0].pageX - this.startPageX; + const maxPage = this.data.list.length - 1; + if (Math.abs(moveX) >= 150) { + if (moveX > 0) { + this.currentView = this.currentView !== 0 ? this.currentView - 1 : 0; + } else { + this.currentView = this.currentView !== maxPage ? this.currentView + 1 : maxPage; + } + } + this.setData({ + toView: `card_${this.currentView}` + }); + }, + touchecard(e) { + console.log(e.currentTarget.id); + this.setData({ + active: e.currentTarget.id + }) + this.getwords(e.currentTarget.id); + }, + duizhiticlick: function () { + + wx.navigateTo({ + url: '/pages/allpapers/allpapers', + }) + }, + messagelistclick: function () { + wx.navigateTo({ + url: '/pages/messagelist/messagelist', + }) + }, + communityinfoclick: function (e) { + //社区留言信息 + console.log(e.currentTarget.id); + wx.navigateTo({ + url: '/pages/communityinfo/communityinfo?id=' + e.currentTarget.id, + }) + }, + messagelistclick: function (e) { + //资讯列表分类 + wx.navigateTo({ + url: '/pages/messagelist/messagelist?typeid=' + e.currentTarget.id, + }) + }, + messageclick: function (e) { + wx.navigateTo({ + url: '/pages/messageencyclopedias/messageencyclopedias?id=' + e.currentTarget.id, + }) + }, + msglist: function () { + + const that = this; + let url = baseUrl.globalData.baseUrl + '/msglist/msgindexlist'; + var param = { + id: '123456789' + }; + //此处为使用封装的post请求 + util.get(url, param).then((res) => { + console.log(res); + that.setData({ + messagelist: res.data.sort() + + }); + + }).catch((errMsg) => { + console.log(errMsg); + }); + }, + wrodtypelist: function () { + + const that = this; + let url = baseUrl.globalData.baseUrl + '/wordslist/getwordslist'; + var param = { + id: '123456789' + }; + //此处为使用封装的post请求 + util.get(url, param).then((res) => { + console.log(res); + that.setData({ + list: res.data + }); + + }).catch((errMsg) => { + console.log(errMsg); + }); + }, + getwords: function (ee) { + + const that = this; + let url = baseUrl.globalData.baseUrl + '/wordslist/getwordsbyuserid'; + var param = { + typeid: ee, + user_id: wx.getStorageSync('wxuserid') == null ? 3 : wx.getStorageSync('wxuserid') + }; + //此处为使用封装的post请求 + util.get(url, param).then((res) => { + console.log(res); + that.setData({ + replylist: res.data + }); + + }).catch((errMsg) => { + console.log(errMsg); + }); + }, + wordsclick: function (ee) { + console.log(ee); + console.log(baseUrl.globalData.currentuserinfo); + let e1 = ee.currentTarget.id; + let e2 = wx.getStorageSync('wxuserid'); + const that = this; + let url = baseUrl.globalData.baseUrl + '/wordslist/wordsclickcount'; + var param = { + words_id: e1, + user_id: e2, + }; + //此处为使用封装的post请求 + util.get(url, param).then((res) => { + console.log(res); + that.setData({ + replylist: res.data + }); + //头部消息 + that.msglist(); + //留言类型 + that.wrodtypelist(); + + }).catch((errMsg) => { + console.log(errMsg); + }); + }, + preview2: function (params) { + console.log(params); + let that = this; + let currentUrl = params.currentTarget.dataset.src; + let arrindex = params.currentTarget.dataset.id; + let indexpic = params.currentTarget.dataset.cid; + console.log(indexpic); + console.log(arrindex); + let rearr = that.data.replylist[arrindex].pics; + console.log(rearr); + let arr = []; + rearr.forEach(function (item, index) { + arr[index] = that.data.baseurl + item + }); + wx.previewImage({ + current: arr[indexpic], // 当前显示图片的http链接 + urls: arr // 需要预览的图片http链接列表 + }) + } +}) \ No newline at end of file diff --git a/pages/mycommunityinfo/mycommunityinfo.json b/pages/mycommunityinfo/mycommunityinfo.json new file mode 100644 index 0000000..8835af0 --- /dev/null +++ b/pages/mycommunityinfo/mycommunityinfo.json @@ -0,0 +1,3 @@ +{ + "usingComponents": {} +} \ No newline at end of file diff --git a/pages/mycommunityinfo/mycommunityinfo.wxml b/pages/mycommunityinfo/mycommunityinfo.wxml new file mode 100644 index 0000000..7189cec --- /dev/null +++ b/pages/mycommunityinfo/mycommunityinfo.wxml @@ -0,0 +1,54 @@ + + + + + + + + + + + + + + {{item.userinfo['nickname']}} + + + {{item.times}} + + + + + + + + + {{item.name}} + + + + + + + + + + + + + + + + + {{item.commentcount}} + + + {{item.wordsclickcount}} + + + + + + + + \ No newline at end of file diff --git a/pages/mycommunityinfo/mycommunityinfo.wxss b/pages/mycommunityinfo/mycommunityinfo.wxss new file mode 100644 index 0000000..a7773b5 --- /dev/null +++ b/pages/mycommunityinfo/mycommunityinfo.wxss @@ -0,0 +1,330 @@ +.courselive { + width: 750rpx; + height: 403rpx; + } + + .functionalarea { + display: flex; + flex-flow: row wrap; + align-content: flex-start; + width: 750rpx; + height: 550rpx; + } + + .areaitem { + margin-top: 60rpx; + text-align: center; + width: 33%; + height: 170rpx; + } + + .areaitem image { + width: 120rpx; + height: 170rpx; + } + + .messagearea text { + + display: block; + font-size: 40rpx; + font-weight: 600rpx; + margin-left: 60rpx; + } + + .msseagehead { + display: flex; + flex-direction: row; + } + + .headleft { + margin-left: 60rpx; + margin-top: 50rpx; + width: 140rpx; + height: 140rpx; + border-radius: 50%; + overflow: hidden; + } + + .headleft image { + + width: 130rpx; + height: 133rpx; + } + + .headright { + margin-top: 80rpx; + margin-left: 23rpx; + width: 200rpx; + height: 142rpx; + } + + .headrightup text { + + font-size: 30rpx; + font-weight: 400rpx; + } + + .headrightdown { + font-size: 30rpx; + margin-top: 10rpx; + } + + .msseagemiddle { + margin: 0 60rpx; + } + + .mssagemiddledown { + margin: 25rpx auto; + } + + .mssagemiddledown image { + + width: 100%; + height: 265rpx; + } + + .messageend { + + margin: 0 60rpx; + display: flex; + flex-direction: row; + justify-content: space-between; + + } + + .messageendleft { + width: 150rpx; + height: 30rpx; + } + + .messageendleft image { + width: 100rpx; + height: 30rpx; + } + + .messageendmiddle { + width: 150rpx; + height: 30rpx; + } + + .messageendmiddle image { + width: 35rpx; + height: 30rpx; + } + + .messageendmiddle text { + + font-size: 28rpx; + padding-left: 23rpx; + } + + .messageendright { + + width: 150rpx; + height: 30rpx; + } + + .messageendright image { + width: 35rpx; + height: 30rpx; + + } + + .messageendright text { + + font-size: 28rpx; + padding-left: 23rpx; + } + + .feigexian { + + margin: 0 60rpx; + margin-top: 60rpx; + border-bottom: 2rpx solid #ada2a2; + } + + .areaclass { + + width: 540rpx; + height: 193rpx; + margin: 0 auto; + margin-top: 80rpx; + background-color: #f0f0f1; + border-radius: 5%; + } + + .areafooter { + display: flex; + align-items: center; + justify-content: space-between; + width: 540rpx; + height: 60rpx; + margin: 0 auto; + margin-top: 10rpx; + } + + .areafooterleft image { + + width: 26rpx; + height: 26rpx; + + } + + .areafooterright text { + font-size: 28rpx; + font-weight: 600; + color: #217ced; + } + + .vipimage image { + width: 37rpx; + height: 33rpx; + position: relative; + left: -25px; + top: 83px; + } + + /* 社区头部 */ + .communityhead { + width: 680rpx; + height: 210rpx; + margin: 0 auto; + display: flex; + flex-direction: row; + justify-content: flex-start; + align-items: center; + } + + .communityheadleft { + background: url('https://ndnd.duiduiedu.com/uploads/pics/communtlistheadleft.png') no-repeat; + width: 385rpx; + height: 206rpx; + background-size: 100% 100%; + display: flex; + flex-direction: row; + justify-content: space-between; + align-items: center; + } + + .communityheadright { + width: 232rpx; + height: 206rpx; + margin-left: 40rpx; + } + + .communityheadrightup { + width: 240rpx; + height: 80rpx; + margin-top: 20rpx; + } + + .communityheadrightup image { + width: 240rpx; + height: 80rpx; + } + + .communityheadrightdown { + width: 240rpx; + height: 80rpx; + margin-top: 20rpx; + } + + .communityheadrightdown image { + width: 240rpx; + height: 80rpx; + } + + .communityheadleftitem1 { + width: 240rpx; + margin-left: 55rpx; + display: flex; + flex-direction: column; + justify-content: center; + align-items: center; + } + + .communityheadleftitem2 { + width: 80rpx; + height: 180rpx; + } + + .communityheadleftitem2 image { + width: 80rpx; + height: 175rpx; + } + + .messageitem { + width: 240rpx; + height: 38rpx; + border: 1rpx solid #1ccfd6; + color: #1ccfd6; + margin-bottom: 10rpx; + text-align: center; + overflow: hidden; + } + + /* 社区头部 */ + + /* 社区滑动 */ + .curriculumup { + width: 680rpx; + height: 55rpx; + margin: 0 auto; + margin-top: 40rpx; + } + + .curriculumupstart { + float: left; + width: 680rpx; + height: 55rpx; + } + + .curriculumupend { + float: left; + width: 50rpx; + height: 50rpx; + } + + .scroll-box { + white-space: nowrap; + height: 100%; + } + + .card-box { + display: inline-block; + margin-right: 10rpx; + } + + .card image { + height: 55rpx; + line-height: 55rpx; + width: 211rpx; + } + + .lineclass { + width: 685rpx; + margin: 2rpx auto; + border-bottom: 1rpx solid #dcdcdc; + } + + /* 社区滑动 */ + + /* 补充留言信息右边 */ + .itemright { + width: 200rpx; + margin-top: 50rpx; + margin-left: 30rpx; + display: flex; + flex-direction: row; + justify-content: center; + align-items: center; + } + + .itemright image { + + margin-left: 10rpx; + width: 82rpx; + height: 32rpx; + } + + /* 补充留言信息右边 */ \ No newline at end of file diff --git a/pages/myexamanalysis/myexamanalysis.js b/pages/myexamanalysis/myexamanalysis.js new file mode 100644 index 0000000..226d841 --- /dev/null +++ b/pages/myexamanalysis/myexamanalysis.js @@ -0,0 +1,683 @@ +var WxParse = require('../../wxParse/wxParse.js'); +const app = getApp(); +var that; +var Interval; +var wechat; +var id; +var intt; +const baseUrl = getApp(); +const api = require('../../config/api.js'); +const util = require('../../config/util.js'); +var startX, endX; +var moveFlag = true; // 判断执行滑动事件 +Page({ + startX: 0, + startY: 0, + isClear: false, + startPageX: 0, + /** + * 页面的初始数据 --解释笔记 + */ + data: { + + title: '我的试题解释', + time: 2 * 60 * 60 * 1000, //初始时间 + paystatus: 1, //1未开始时间开始状态,2开始 + collection: 1, //1不收藏,2已收藏 + singdouble: 1, //1单选,2多选 + paiduanactive: 1, //1不是判断,2是判断题 + activeopen: true, + baseurl:baseUrl.globalData.baseimgurl, + paystatus: 1, //1未开始时间开始状态,2开始 + collection: 1, //1不收藏,2已收藏 + singdouble: 1, //1单选,2多选 + paiduanactive:1,//1不是判断,2是判断题 + zstime:1, //1正计,0倒计 + typeid:1, //0练习1正式 + activeopen:true, + coursetypefour_id:1, + itemdatacurrent:[], //当前数据 + itemdataall:[], //全部数据 + itemdata: [], //选项数据 + content:"",//富文本数据 + replylist:[], + showModalStatus: false, + pen: 3, + color: '#FFFFFF', + currentTab: 0, + now: 1, //当前页码 + all: 15, //总页码 + height: 0, + Timer_state: 1, + Answer_card: false, + Draft_paper: false, + false_analysis: false, + stem_height: 150, + jiexi: false, + field: { + analysis_text: "", + }, + img: [], + scroll: "scroll", + index: 0, + drag_line: false, + coursetypefour_id:1, + grouppaper_id:1, + typeid:1, + courseid:1,//试题ID + explainlist:[], //试题类型名称 + duicuo:1 //试题作答对与错1全部,2错的题 + }, + + /** + * 生命周期函数--监听页面加载 + */ + onLoad: function (options) { + wx.setNavigationBarTitle({ + title: this.data.title + }) + baseUrl.islogin(); + console.log(options); + this.setData({ + coursetypefour_id:options.coursetypefour_id, + grouppaper_id:options.grouppaper_id, + typeid:options.id, + duicuo:options.id + }); + }, + + /** + * 生命周期函数--监听页面初次渲染完成 + */ + onReady: function () { + + }, + + /** + * 生命周期函数--监听页面显示 + */ + onShow: function () { + // this.getcoursetypefourexam(this.data.coursetypefour_id,this.data.grouppaper_id,this.data.duicuo); + this.wrodtypelist(); + // this.getexamexplantypelist(this.data.courseid); //试题类型列表 + }, + + /** + * 生命周期函数--监听页面隐藏 + */ + onHide: function () { + + }, + + /** + * 生命周期函数--监听页面卸载 + */ + onUnload: function () { + + }, + + /** + * 页面相关事件处理函数--监听用户下拉动作 + */ + onPullDownRefresh: function () { + + }, + + /** + * 页面上拉触底事件的处理函数 + */ + onReachBottom: function () { + + }, + + /** + * 用户点击右上角分享 + */ + onShareAppMessage: function () { + + }, + //----------------------------- + // 手机触摸开始 + //----------------------------- + touchStart: function (e) { + //得到触摸点的坐标 + this.startX = e.changedTouches[0].x + this.startY = e.changedTouches[0].y + this.context = wx.createContext() + this.context.setStrokeStyle(this.data.color) + this.context.setLineWidth(this.data.pen) + this.context.setLineCap('round') // 让线条圆润 + this.context.beginPath() + + }, + //----------------------------- + // 触摸后移动 + //----------------------------- + touchMove: function (e) { + + var startX1 = e.changedTouches[0].x + var startY1 = e.changedTouches[0].y + this.context.moveTo(this.startX, this.startY) + this.context.lineTo(startX1, startY1) + this.context.stroke() + this.startX = startX1; + this.startY = startY1; + wx.drawCanvas({ + canvasId: 'myCanvas', + reserve: true, + actions: this.context.getActions() + }) + }, + penSelect: function (e) { + this.setData({ + pen: parseInt(e.currentTarget.dataset.param) + }); + this.isClear = false; + }, + colorSelect: function (e) { + this.setData({ + color: e.currentTarget.dataset.param + }); + this.isClear = false; + }, + cleardraw: function (e) { + this.setData({ + showModalStatus: false + }); + this.setData({ + showModalStatus: true + }); + }, + caogaoclick: function () { + + this.setData({ + showModalStatus: true, + }) + }, + //----------------------------- + // 草稿纸 + //----------------------------- + shows: function () { + const that = this; + console.log(that.data.Draft_paper); + that.data.Draft_paper = !that.data.Draft_paper; + if (that.data.Draft_paper == false) { + that.setData({ + Draft_paper: true, + }) + this.util('open'); + } else { + that.setData({ + Draft_paper: false, + showModalStatus: false + }) + } + }, + util: function (currentStatu) { + var animation = wx.createAnimation({ + duration: 200, + timingFunction: "linear", + delay: 0, + }); + this.animation = animation; + animation.opacity(0).rotateX(-100).step(); + this.setData({ + animationData: animation.export() + }) + setTimeout(function () { + animation.opacity(1).rotateX(0).step(); + this.setData({ + animationData: animation + }) + if (currentStatu == "close") { + this.setData({ + showModalStatus: false + }); + } + }.bind(this), 200) + // 显示 + if (currentStatu == "open") { + this.setData({ + showModalStatus: true + }); + } + }, + touchStart1: function (e) { + startX = e.touches[0].pageX; // 获取触摸时的原点 + moveFlag = true; + }, + // 触摸移动事件 + touchMove1: function (e) { + endX = e.touches[0].pageX; // 获取触摸时的原点 + if (moveFlag) { + if (endX - startX > 50) { + console.log("move right"); + this.move2right(); + moveFlag = false; + } + if (startX - endX > 50) { + console.log("move left"); + this.move2left(); + moveFlag = false; + } + } + + }, + // 触摸结束事件 + touchEnd1: function (e) { + moveFlag = true; // 回复滑动事件 + }, + move2left() { + const that = this; + const index = that.data.index + 1; + const all = that.data.all; + if (index < all) { + + console.log(that.data.itemdataall[index].id); + this.setData({ + index: index, + now: index + 1, + itemdata: that.data.itemdataall[index].examitem, + itemdatacurrent:that.data.itemdataall[index], + content:that.data.itemdataall[index].name.replace(/\ { + console.log(res.data); + that.setData({ + itemdataall: res.data.item, + itemdata:res.data.item[0].examitem, + all:res.data.item.length, + itemdatacurrent:res.data.item[0], + content:res.data.item[0].name.replace(/\ { + console.log(errMsg); + }); + }, //解释开始 + collectionclickdata:function(collection_id,user_id) { + const that = this; + let url = baseUrl.globalData.baseUrl + '/course/coursecollection'; + var param = { + id: collection_id, + user_id:user_id + }; + //此处为使用封装的post请求 + util.get(url, param).then((res) => { + console.log(res); + this.getcoursedata(that.data.courseid); + + }).catch((errMsg) => { + console.log(errMsg); + }); + }, + displayview:function() { + console.log(this.data.showview); + this.setData({ + showview:(!this.data.showview) + }) + }, + wrodtypelist:function(params){ + + //获取课程留言 + const that = this; + let url = baseUrl.globalData.baseUrl + '/exam/wordsexamuser'; + var param = { + user_id: wx.getStorageSync('wxuserid')==null?3:wx.getStorageSync('wxuserid') + }; + //此处为使用封装的post请求 + util.get(url, param).then((res) => { + console.log(res); + that.setData({ + replylist: res.data + }); + + }).catch((errMsg) => { + console.log(errMsg); + }); + }, + wordsclick:function(ee){ + + let e1=ee.currentTarget.id; + let e2=baseUrl.globalData.currentuserinfo.id; + const that = this; + let url = baseUrl.globalData.baseUrl + '/wordslist/wordscourseclickcount'; + var param = { + words_id: e1, + user_id: e2, + }; + //此处为使用封装的post请求 + util.get(url, param).then((res) => { + console.log(res); + + }).catch((errMsg) => { + console.log(errMsg); + }); + }, + uploadpic:function(){ + var that = this; + let imagesList = []; + let maxSize = 1024 * 1024; + let maxLength = 6; + let flag = true; + wx.chooseImage({ + count: 9, //最多可以选择的图片总数 + sizeType: ['original', 'compressed'], // 可以指定是原图还是压缩图,默认二者都有 + sourceType: ['album', 'camera'], // 可以指定来源是相册还是相机,默认二者都有 + success: function (res) { + wx.showToast({ + title: '正在上传...', + icon: 'loading', + mask: true, + duration: 500 + }) + for (let i = 0; i < res.tempFiles.length; i++) { + if (res.tempFiles[i].size > maxSize) { + flag = false; + console.log(111) + wx.showModal({ + content: '图片太大,不允许上传', + showCancel: false, + success: function (res) { + if (res.confirm) { + console.log('用户点击确定') + } + } + }); + } + } + if (res.tempFiles.length > maxLength) { + console.log('222'); + wx.showModal({ + content: '最多能上传' + maxLength + '张图片', + showCancel: false, + success: function (res) { + if (res.confirm) { + console.log('确定'); + } + } + }) + } + if (flag == true && res.tempFiles.length <= maxLength) { + that.setData({ + imagesListp: res.tempFilePaths + }) + that.data.imagestr=[]; + var arr=''; + for (let i = 0; i < that.data.imagesListp.length; i++) { + wx.uploadFile({ + url: baseUrl.globalData.baseUrl + '/wordslist/uploadpics', + filePath: that.data.imagesListp[i], + name: 'file', + success:function(res){ + //打印 + console.log("------------响应数据:"); + console.log(res.data); + + var message = JSON.parse(res.data); + that.data.imagestr.push(message); + that.setData({ + imagestr:that.data.imagestr + }); + }, + }) + + } + + + } + console.log(res); + }, + fail: function (res) { + console.log(res); + } + }) + + }, + formSubmit:function(e) { + + if(wx.getStorageSync('wxuserid')==''){ + wx.navigateTo({ + url: '/pages/userlogin/userlogin', + }) + } + + let content = this.data.wordstextname; + console.log(content) + if (content == '') { + wx.showToast({ + title: '留言内容为空,请填写内容', + icon: 'none', + duration: 1500 + }) + return false; + } + // console.log(this.data.imagestr); + this.wordsadd(content,this.data.imagestr); + + }, + bindTextAreaBlur: function(e) { + this.setData({ + wordstextname:e.detail.value + }) + }, + uploadpicsimage:function(e){ + + const that = this; + let url = baseUrl.globalData.baseUrl + '/wordslist/uploadpics'; + var param = { + url: e + }; + //此处为使用封装的post请求 + util.post(url, param).then((res) => { + console.log(res); + + }).catch((errMsg) => { + console.log(errMsg); + }); + }, + wordsadd:function(content,imagestr){ + + const that = this; + let url = baseUrl.globalData.baseUrl + '/exam/examexplainadd'; + var param = { + content: content, + imagestr:imagestr, + userid:wx.getStorageSync('wxuserid')==''?3:wx.getStorageSync('wxuserid'), + exam_id:that.data.courseid + }; + //此处为使用封装的post请求 + util.post(url, param).then((res) => { + console.log(res.data); + if(res.data>0){ + wx.showToast({ + title: '留言内容成功', + icon: 'none', + duration: 1500 + }) + + that.wrodtypelist(that.data.courseid); //试题留言 + that.getexamexplantypelist(that.data.courseid); //试题类型列表 + that.setData({ + wordstextname:'' + }) + + } + + }).catch((errMsg) => { + console.log(errMsg); + }); + },contentclick:function(params) { + + console.log(params); + let id=params.currentTarget.id; + let xid=params.currentTarget.dataset.xid; + console.log(id); + this.setData({ + wordstextname:'回复@'+id, + showview:true + }); + + this.addinccomment(xid); + + wx.showToast({ + title: '@成功,留言请移底部留言', + icon: 'none', + duration: 1500 + }) + + + },rdclick:function(params) { + wx.navigateTo({ + url: '/pages/communityinfo/communityinfo?id='+params.currentTarget.id, + }) + },addinccomment:function(params) { + //增加评论数 + console.log(params); + let userid=wx.getStorageSync('wxuserid'); + const that = this; + let url = baseUrl.globalData.baseUrl + '/exam/addcommentcount'; + var param = { + id:params + }; + //此处为使用封装的post请求 + util.get(url, param).then((res) => { + console.log(res); + // this.wrodtypelist(this.data.courseid) + this.wrodtypelist(that.data.courseid); + this.getexamexplantypelist(that.data.courseid); + }).catch((errMsg) => { + console.log(errMsg); + }); + }, + clickbtn:function(params) { + console.log(params); + let userid=wx.getStorageSync('wxuserid'); + const that = this; + let url = baseUrl.globalData.baseUrl + '/exam/wordscourseclickcount'; + var param = { + words_id:params.currentTarget.id, + user_id: userid + }; + //此处为使用封装的post请求 + util.get(url, param).then((res) => { + console.log(res); + // this.wrodtypelist(this.data.courseid) + this.wrodtypelist(this.data.courseid); + this.getexamexplantypelist(this.data.courseid); + }).catch((errMsg) => { + console.log(errMsg); + }); + }, + preview:function (params) { + let that=this; + console.log(params) + let currentUrl = params.currentTarget.dataset.src; + let arrindex=params.currentTarget.dataset.id; + + let rearr=that.data.replylist[arrindex].pics; + console.log(rearr); + let arr=[]; + rearr.forEach(function (item,index) { + arr[index]=that.data.baseurl+item + }); + console.log(arr); + wx.previewImage({ + current: currentUrl, // 当前显示图片的http链接 + urls: arr // 需要预览的图片http链接列表 + }) + }, + getexamexplantypelist:function(params) { + + console.log(params); + let userid=wx.getStorageSync('wxuserid'); + const that = this; + let url = baseUrl.globalData.baseUrl + '/exam/examexplaintypelist'; + var param = { + exam_id:params + }; + //此处为使用封装的post请求 + util.get(url, param).then((res) => { + console.log(res); + this.setData({ + + explainlist:res.data + + }) + // this.wrodtypelist(this.data.courseid) + // this.wrodtypelist(this.data.courseid); + }).catch((errMsg) => { + console.log(errMsg); + }); + + } + + +}) \ No newline at end of file diff --git a/pages/myexamanalysis/myexamanalysis.json b/pages/myexamanalysis/myexamanalysis.json new file mode 100644 index 0000000..8835af0 --- /dev/null +++ b/pages/myexamanalysis/myexamanalysis.json @@ -0,0 +1,3 @@ +{ + "usingComponents": {} +} \ No newline at end of file diff --git a/pages/myexamanalysis/myexamanalysis.wxml b/pages/myexamanalysis/myexamanalysis.wxml new file mode 100644 index 0000000..c5ce35e --- /dev/null +++ b/pages/myexamanalysis/myexamanalysis.wxml @@ -0,0 +1,70 @@ + + + + + + + + + + + + + {{item.userinfo['nickname']}} + + + {{item.times}} + + + + + + + {{item.name}} + + + + + + + + + + + + + + + + + + + {{item.commentcount}} + + + + {{item.wordsclickcount}} + + + + + + + + + +
+ + + + + + + + + + + +
\ No newline at end of file diff --git a/pages/myexamanalysis/myexamanalysis.wxss b/pages/myexamanalysis/myexamanalysis.wxss new file mode 100644 index 0000000..cacf12e --- /dev/null +++ b/pages/myexamanalysis/myexamanalysis.wxss @@ -0,0 +1,635 @@ +.page { + background-color: #ededed; + } + + .examing { + display: flex; + flex-direction: row; + align-items: center; + width: 100%; + height: 80rpx; + background-color: #49dae0; + position: fixed; + top: 0; + } + + .item1 { + width: 50rpx; + height: 50rpx; + margin: 0 19rpx; + } + + .item1 image { + width: 50rpx; + height: 50rpx; + margin: 0 19rpx; + } + + .item4 { + width: 50rpx; + height: 50rpx; + margin-top: 10rpx; + margin-left: 80rpx; + + } + + .item4 image { + width: 50rpx; + height: 44rpx; + margin: 0 19rpx; + } + + .item5 { + width: 100rpx; + height: 50rpx; + margin-top: 10rpx; + margin-left: 120rpx; + + } + + .item5 image { + width: 38rpx; + height: 47rpx; + margin: 0 22rpx; + } + + .item2 { + width: 150rpx; + height: 50rpx; + margin-top: 16rpx; + margin-left: 19rpx; + } + + .item2 text { + width: 150rpx; + height: 50rpx; + color: white; + } + + .item3 { + width: 100rpx; + height: 50rpx; + margin-top: 10rpx; + margin-left: 79rpx; + } + + .item3 text { + width: 100rpx; + height: 50rpx; + color: white; + } + + .examingfooter { + display: flex; + flex-direction: row; + align-items: center; + justify-content: space-between; + width: 100%; + height: 80rpx; + background-color: #49dae0; + position: fixed; + bottom: 0; + } + + .footerleft image { + margin: 0 25rpx; + width: 160rpx; + height: 53rpx; + } + + .footermiddle image { + margin: 0 25rpx; + width: 160rpx; + height: 53rpx; + } + + .footerright image { + margin: 0 25rpx; + width: 160rpx; + height: 53rpx; + } + + .examingcontent { + width: 700rpx; + margin: 80rpx auto; + max-height: 250rpx; + overflow: hidden; + } + + .examingcontent2 { + width: 700rpx; + margin: 80rpx auto; + } + + + .examingcontent text { + font-size: 30rpx; + font-weight: 400; + + } + + .examintcontentda { + width: 700rpx; + margin: 0 auto; + float: left; + margin-bottom: 80rpx; + } + + .contentleft { + float: left; + width: 50rpx; + height: 50rpx; + line-height: 50rpx; + margin-left: 25rpx; + } + + .contentleft image { + width: 49rpx; + height: 49rpx; + } + + .contentright { + margin-left: 25rpx; + float: left; + width: 600rpx; + } + + .charclass { + display: flex; + justify-items: center; + } + + .charclass text { + width: 37rpx; + height: 33rpx; + position: relative; + left: 4px; + top: -31px; + text-align: center; + } + + .item2 .van-count-down { + color: white; + } + + /*草稿纸*/ + .topic_cgz { + position: fixed; + top: 0; + width: 100%; + height: 100%; + background-color: rgba(0, 0, 0, 0.4); + z-index: 999; + overflow: hidden; + } + + .topic_cgz_tab { + width: 100%; + height: 100%; + padding: 0; + position: fixed; + top: 0rpx; + } + + .topic_cgz_tab .fl { + width: 25%; + text-align: center; + } + + .topic_cgz_tab image { + width: 60rpx; + height: 60rpx; + } + + /*滚动层*/ + scroll-item { + z-index: 9; + } + + .scoll-h { + height: 100%; + } + + .tab-content { + height: 100%; + width: 100%; + background: #fff; + } + + .the_big_box { + height: 100%; + width: 100%; + background: #fff; + overflow-x: hidden; + } + + .tab-content-top { + margin-top: 20rpx; + } + + .toolsclass { + display: flex; + justify-items: center; + justify-content: space-between; + width: 100%; + margin: 0 auto; + height: 200rpx; + position: fixed; + bottom: 200; + } + + .openclass { + + display: flex; + justify-content: center; + width: 700rpx; + margin: 80rpx auto; + + } + + .openclass image { + width: 120rpx; + height: 24rpx; + } + + .examanswer { + display: flex; + flex-direction: row; + justify-content: space-between; + align-items: center; + width: 100%; + height: 180rpx; + background-color: #f0f0f0; + margin: 50rpx auto; + } + + .answerleft { + display: flex; + flex-direction: column; + justify-content: center; + align-items: center; + width: 45%; + height: 180rpx; + align-items: center; + } + .answerleftup{ + + color: #808080; + font-size: 35rpx; + } + + .answerleftdown{ + + color: #1ccfd6; + font-size: 45rpx; + font-weight: 400; + } + + .answerright { + + display: flex; + flex-direction: column; + justify-content: center; + align-items: center; + width: 45%; + height: 180rpx; + align-items: center; + color: #000000; + font-size: 35rpx; + } + + .analysisnote{ + + width: 720rpx; + height: 280rpx; + overflow: hidden; + margin: 0 auto; + display: flex; + flex-direction:row; + } + .analysisnoteleft{ + width: 60%; + display: flex; + flex-wrap: wrap; + justify-content: space-between; + + } + .leftitem{ + margin-right: 20rpx; + line-height: 50rpx; + width: 44%; + height: 50rpx; + border: 1rpx solid #49dae0; + color: #49dae0; + font-size: 26rpx; + text-align: center; + margin-top: 10rpx; + + } + + .leftitem2{ + margin-right: 20rpx; + margin-right: 20rpx; + line-height: 50rpx; + width: 44%; + height: 50rpx; + border: 1rpx solid #909090; + color: #909090; + font-size: 26rpx; + text-align: center; + + } + .analysisnoteright{ + width: 38%; + height: 200rpx; + text-align: right; + } + .analysisnoteright image{ + + width: 180rpx; + height: 50rpx; + margin-right: 20rpx; + + } + .feigexiang{ + + width: 620rpx; + height: 10rpx; + border-bottom: 1rpx solid #dedcdc; + margin: 20rpx auto; + } + .explainline { + width: 705rpx; + height: 30rpx; + margin: 0 auto; + border-left: 8rpx solid #49dae0; + } + .explainline text{ + + + display: flex; + flex-direction: column; + justify-content:baseline; + align-items:left; + height: 30rpx; + line-height: 30rpx; + + font-size: 30rpx; + color:#323232; + margin-left: 30rpx; + } + + /* 笔记解释 */ + .messagearea text { + + display: block; + font-size: 40rpx; + font-weight: 600rpx; + margin-left: 60rpx; + } + + .msseagehead { + display: flex; + flex-direction: row; + } + + .headleft { + margin-left: 60rpx; + margin-top: 50rpx; + width: 140rpx; + height: 140rpx; + border-radius: 50%; + overflow: hidden; + } + + .headleft image { + + width: 130rpx; + height: 133rpx; + } + + .headright { + margin-top: 80rpx; + margin-left: 23rpx; + width: 485rpx; + height: 142rpx; + } + + .headrightup text { + + font-size: 30rpx; + /* font-weight: 400rpx; */ + } + + .headrightdown { + margin-top: 10rpx; + } + + .msseagemiddle { + margin: 0 60rpx; + } + + .mssagemiddledown { + margin: 25rpx auto; + } + + .mssagemiddledown image { + + width: 100%; + height: 265rpx; + } + + .messageend { + + margin: 0 60rpx; + display: flex; + flex-direction: row; + justify-content: space-between; + + } + + .messageendleft { + width: 150rpx; + height: 30rpx; + } + + .messageendleft image { + width: 100rpx; + height: 30rpx; + } + + .messageendmiddle { + width: 150rpx; + height: 30rpx; + } + + .messageendmiddle image { + width: 35rpx; + height: 30rpx; + } + + .messageendmiddle text { + + font-size: 28rpx; + padding-left: 23rpx; + } + + .messageendright { + + width: 150rpx; + height: 30rpx; + } + + .messageendright image { + width: 35rpx; + height: 30rpx; + + } + + .messageendright text { + + font-size: 28rpx; + padding-left: 23rpx; + } + .feigexian{ + + margin: 0 60rpx; + margin-top: 60rpx; + border-bottom: 2rpx solid #ada2a2; + } + .vipimage image{ + width: 37rpx; + height: 33rpx; + position: relative; + left: -25px; + top: 83px; + } + + /* 笔记解释 */ + + + .examingcontent { + width:100%; + margin: 80rpx auto; + /* max-height: 250rpx; + overflow: hidden; */ + } + + .examingcontent2 { + width: 100%; + margin: 80rpx auto; + } + + + .examingcontent text { + font-size: 30rpx; + font-weight: 400; + + } + + .examintcontentda { + width: 700rpx; + margin: 0 auto; + float: left; + margin-bottom: 80rpx; + } + + .contentleft { + float: left; + width: 50rpx; + height: 50rpx; + line-height: 50rpx; + margin-left: 25rpx; + } + + .contentleft image { + width: 49rpx; + height: 49rpx; + } + + .contentright { + margin-left: 25rpx; + float: left; + width: 600rpx; + } + + .charclass { + display: flex; + justify-items: center; + } + + .charclass text { + width: 37rpx; + height: 33rpx; + position: relative; + left: 4px; + top: -31px; + text-align: center; + } + + .item2 .van-count-down { + color: white; + } + /* + 解释开始 + */ + + + .areaclass{ + width: 540rpx; + min-height: 300rpx; + margin: 0 auto; + margin-top: 80rpx; + background-color: #f0f0f1; + border-radius: 5%; + } + .areaclass textarea{ + width: 540rpx; + min-height: 300rpx; + } + + + .areafooter{ + display: flex; + align-items: center; + justify-content: space-between; + width: 540rpx; + height: 60rpx; + margin: 0 auto; + margin-top: 10rpx; + } + .areafooterleft image{ + + width: 52rpx; + height: 52rpx; + + } + .areafooterright text{ + font-size: 28rpx; + font-weight: 600; + color: #217ced; + } + .areafooterright{ + width: 120rpx; + height: 56rpx; + } + .areafooterright button{ + + width: 120rpx; + height: 50rpx; + line-height: 50rpx; + font-size: 28rpx; + font-weight: 600; + color: #217ced; + border:none; + } + button::after { + border: none; + } + + .header_view_hide{ + display: none; + } + .header_view_show{ + display: block; + } \ No newline at end of file diff --git a/pages/myorder/myorder.js b/pages/myorder/myorder.js new file mode 100644 index 0000000..daf3f3c --- /dev/null +++ b/pages/myorder/myorder.js @@ -0,0 +1,75 @@ +const DEFAULT_PAGE = 0; +const baseUrl = getApp(); +const api = require('../../config/api.js'); +const util = require('../../config/util.js'); +Page({ + + /** + * 页面的初始数据 + */ + data: { + active: 0, + }, + onChange(event) { + wx.showToast({ + title: `切换到标签 ${event.detail.name}`, + icon: 'none', + }); + }, + + /** + * 生命周期函数--监听页面加载 + */ + onLoad: function (options) { + baseUrl.islogin(); + }, + + /** + * 生命周期函数--监听页面初次渲染完成 + */ + onReady: function () { + + }, + + /** + * 生命周期函数--监听页面显示 + */ + onShow: function () { + + }, + + /** + * 生命周期函数--监听页面隐藏 + */ + onHide: function () { + + }, + + /** + * 生命周期函数--监听页面卸载 + */ + onUnload: function () { + + }, + + /** + * 页面相关事件处理函数--监听用户下拉动作 + */ + onPullDownRefresh: function () { + + }, + + /** + * 页面上拉触底事件的处理函数 + */ + onReachBottom: function () { + + }, + + /** + * 用户点击右上角分享 + */ + onShareAppMessage: function () { + + } +}) \ No newline at end of file diff --git a/pages/myorder/myorder.json b/pages/myorder/myorder.json new file mode 100644 index 0000000..8835af0 --- /dev/null +++ b/pages/myorder/myorder.json @@ -0,0 +1,3 @@ +{ + "usingComponents": {} +} \ No newline at end of file diff --git a/pages/myorder/myorder.wxml b/pages/myorder/myorder.wxml new file mode 100644 index 0000000..dcde20d --- /dev/null +++ b/pages/myorder/myorder.wxml @@ -0,0 +1,27 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + 内容 2 + \ No newline at end of file diff --git a/pages/myorder/myorder.wxss b/pages/myorder/myorder.wxss new file mode 100644 index 0000000..9f13a60 --- /dev/null +++ b/pages/myorder/myorder.wxss @@ -0,0 +1,69 @@ +.van-tabs__line { + background-color: #49dae0 !important; +} + +.van-ellipsis { + + font-size: 32rpx; + font-weight: 400; +} + +Page { + background-color: #f5f5f5; +} + +.listdata { + + width: 690rpx; + height: 310rpx; + border: 1rpx solid #f5f5f5; + margin: 0 auto; + border-radius: 5%; + background-color: white; + margin-top: 40rpx; + display: flex; + flex-direction: column; + justify-items: center; + align-items: center; +} + +.dataitem1 { + margin-top: 20rpx; + width: 690rpx; + height: 180rpx; + display: flex; + flex-direction: row; + justify-content: flex-start; + align-content: center; +} + +.dataitem2 { + width: 690rpx; + height: 48rpx; + background-color: green; +} + +.dataitem3 { + width: 690rpx; + height: 80rpx; + background-color: yellow; +} + +.headitem1 { + + width: 164rpx; + height: 164rpx; + background: url('https://ndnd.duiduiedu.com/uploads/pics/goodsline.png') no-repeat; + background-size: cover; + margin: 0 auto; +} +.headitem2{ + width: 340rpx; + height: 175rpx; + background-color: red; +} +.headitem3{ + width: 150rpx; + height: 175rpx; + background-color: green; +} \ No newline at end of file diff --git a/pages/mytest/mytest.js b/pages/mytest/mytest.js new file mode 100644 index 0000000..ee918e0 --- /dev/null +++ b/pages/mytest/mytest.js @@ -0,0 +1,42 @@ +//index.js +//获取应用实例 +const app = getApp() + +Page({ + data: { + + }, + onLoad: function () { + + }, + /** + * 点击日期时候触发的事件 + * bind:getdate + */ + getdate(e) { + console.log("----------"); + console.log(e.detail.datestr); + console.log(e.detail); + }, + /** + * 点击全选触发的事件 + * bind:checkall + */ + checkall(e) { + console.log(e.detail.days); + }, + /** + * 点击确定按钮触发的事件 + * bind:select + */ + cmfclick(e){ + console.log(e.detail.selectDays); + }, + /** + * 点击清空事件 + * bind:clear + */ + clear(e) { + console.log("要清空选中日期") + } +}) \ No newline at end of file diff --git a/pages/mytest/mytest.json b/pages/mytest/mytest.json new file mode 100644 index 0000000..2ed8749 --- /dev/null +++ b/pages/mytest/mytest.json @@ -0,0 +1,4 @@ +{ + "usingComponents": {}, + "navigationBarTitleText": "班级日历" + } \ No newline at end of file diff --git a/pages/mytest/mytest.wxml b/pages/mytest/mytest.wxml new file mode 100644 index 0000000..27bb2c0 --- /dev/null +++ b/pages/mytest/mytest.wxml @@ -0,0 +1,9 @@ + + + + + + + +sdfsdfsfds + \ No newline at end of file diff --git a/pages/mytest/mytest.wxss b/pages/mytest/mytest.wxss new file mode 100644 index 0000000..1d0a897 --- /dev/null +++ b/pages/mytest/mytest.wxss @@ -0,0 +1,6 @@ +/**index.wxss**/ +.center{ + display: flex; + justify-content: center; + margin-bottom: 10rpx; + } \ No newline at end of file diff --git a/pages/newmine/newmine.js b/pages/newmine/newmine.js new file mode 100644 index 0000000..bc6757f --- /dev/null +++ b/pages/newmine/newmine.js @@ -0,0 +1,318 @@ +const DEFAULT_PAGE = 0; +const Apps = getApp(); +const api = require('../../config/api.js'); +const util = require('../../config/util.js'); +import Dialog from '@vant/weapp/dialog/dialog'; +Page({ + + data: { + myimg: 'https://ndnd.duiduiedu.com/uploads/pics/minemainhead.png', + userinfo: '', + avatar: '', + id: 0, + show: false, + popmsgdata: null, + username:'', + userdatainfo:'' + }, + getUserInfo(event) { + console.log(event.detail); + }, + onClose() { + this.setData({ show: false }); + }, + /** + * 生命周期函数--监听页面加载 + */ + onLoad: function (options) { + + }, + usernamemdclick:function(params) { + this.setData({ showpopup: true }); + console.log(params); + }, + onClosepopup:function(params) { + this.setData({ showpopup: false }); + }, + onChangeuser:function (params) { + console.log(params.detail); + this.setData({ + username:params.detail + }) + }, + saveusername:function(params) { + //保存用户名称 + console.log(this.data.username); + this.updateusername(wx.getStorageSync('wxuserid'),this.data.username); + + }, + /** + * 生命周期函数--监听页面显示 + */ + onShow: function () { + // Apps.islogin(); + + // if (Apps.globalData.currentuserinfo == null){ + // wx.redirectTo({ + // url: '/pages/userlogin/userlogin', + // }) + // } + + this.loaddata(); + this.popmsg(); + this.userisblack(wx.getStorageSync('userinfo').mobile); //是否黑名单 + + + + // } + + }, + userisblack: function (mobile) { + //用户是否黑名单 + //直播列表 + const that = this; + let url = Apps.globalData.baseUrl + '/user/isblack'; + var param = { + mobile: mobile + }; + //此处为使用封装的post请求 + util.post(url, param).then((res) => { + console.log(res); + wx.setStorageSync('userisblack', res); + }).catch((errMsg) => { + console.log(errMsg); + }); + }, + aboutclick: function () { + //关于我们 + wx.navigateTo({ + url: '/pages/messageencyclopedias/messageencyclopedias?id=1', + }) + }, + onChooseAvatar: function (params) { + console.log(params); + }, + onClickShow: function () { + //加载数据 + let url = Apps.globalData.baseUrl + '/user/signdata'; + var param = { + user_id: wx.getStorageSync('wxuserid') + }; + //此处为使用封装的post请求 + util.post(url, param).then((res) => { + + let titles = "签到成功"; + if (res == 1) { + // titles = "签到成功"; + this.popmsg(); + } else if (res == 2) { + // titles = "连续签到成功"; + this.popmsg(); + } else if (res == 3) { + // titles = "重新签到成功"; + this.popmsg(); + } else { + titles = "今天已签到成功,无须再签到" + wx.showToast({ + title: titles,//提示文字 + duration: 2000,//显示时长 + mask: true,//是否显示透明蒙层,防止触摸穿透,默认:false + icon: 'none', //图标,支持"success"、"loading" + success: function () { },//接口调用成功 + fail: function () { }, //接口调用失败的回调函数 + complete: function () { } //接口调用结束的回调函数 + }) + + } + + }).catch((errMsg) => { + console.log(errMsg); + }); + + }, + onClickHide(e) { + this.setData({ show: false }); + //签到 + }, + noop(e) { + //加载数据 + console.log(e); + let url = Apps.globalData.baseUrl + '/user/mpopmsg'; + var param = { + user_id: wx.getStorageSync('wxuserid'), + id: e.currentTarget.id, + xid: e.currentTarget.dataset.xid + }; + //此处为使用封装的post请求 + util.post(url, param).then((res) => { + console.log(res); + this.setData({ show: false }); + this.loaddata(); + this.popmsg(); + + }).catch((errMsg) => { + console.log(errMsg); + }); + + }, + loaddata: function (params) { + + // if (Apps.globalData.currentuserinfo == null){ + // wx.redirectTo({ + // url: '/pages/userlogin/userlogin', + // }) + // } + Apps.islogin(); + + //加载数据 + let url = Apps.globalData.baseUrl + '/user/getuserinfobyopenid'; + var param = { + // id: Apps.globalData.currentuserinfo.id + id: wx.getStorageSync('wxuserid') + }; + //此处为使用封装的post请求 + util.post(url, param).then((res) => { + console.log(res); + if (res.data == null) { + //如果用户在数据中没有数据则重新注册 + wx.navigateTo({ + url: '/pages/userlogin/userlogin', + }) + } + this.setData({ + userinfo: res.data + }); + Apps.globalData.userinfo=res.data; + // const userdatainfo = wx.getStorageSync('userinfo'); + + this.setData({ + myimg: res.data.avatar, + username: res.data.username, + userdatainfo: res.data + }) + wx.setStorageSync('wxuserid', res.data.id); + wx.setStorageSync('userinfo', res.data); + wx.setStorageSync('wxopenid', res.data.openid); + + }).catch((errMsg) => { + console.log(errMsg); + }); + }, + vipclick: function (params) { + wx.navigateTo({ + url: '/pages/vipquanyi/vipquanyi', + }) + }, + myaddressclick: function (params) { + wx.navigateTo({ + url: '/pages/myaddress/myaddress', + }) + }, + vipchargeclick: function (params) { + wx.navigateTo({ + url: '/pages/viprecharge/viprecharge', + }) + }, + collectioncourseclick: function (params) { + wx.navigateTo({ + url: '/pages/collectionsub/collectionsub', + }) + }, + vipquanyiclick: function (params) { + wx.redirectTo({ + url: '/pages/viprecharge/viprecharge', + }) + }, + chargeshopclick: function (params) { + wx.navigateTo({ + url: '/pages/chargeshop/chargeshop', + }) + }, + mycommunityinfoclick: function (params) { + wx.navigateTo({ + url: '/pages/mycommunityinfo/mycommunityinfo', //我的怒贴 + }) + }, + myexamanalysisclick: function (params) { + wx.navigateTo({ + url: '/pages/myexamanalysis/myexamanalysis', //我的怒贴 + }) + }, + popmsg: function () { + + //加载弹窗 + if (wx.getStorageSync('wxuserid') == null) + return; + + let url = Apps.globalData.baseUrl + '/user/getpopmsg'; + var param = { + id: wx.getStorageSync('wxuserid') + }; + //此处为使用封装的post请求 + util.post(url, param).then((res) => { + console.log(res); + if (res.data != null) { + this.setData({ + show: true, + popmsgdata: res.data + }); + } + }).catch((errMsg) => { + console.log(errMsg); + }); + + }, + myonChooseAvatar: function (e) { + console.log("fan------------") + console.log(e.detail.avatarUrl); + const tempFilePaths =e.detail.avatarUrl; + const that = this; + wx.uploadFile({ + url: Apps.globalData.baseUrl +'/wordslist/uploadpics', //仅为示例,非真实的接口地址 + filePath: tempFilePaths, + name: 'file', + formData: { + 'user': 'test' + }, + success(res) { + const dataurl= Apps.globalData.baseimgurl+JSON.parse(res.data); + that.updateuserimage(wx.getStorageSync('wxuserid'),dataurl); + that.setData({ + myimg:dataurl + }) + } + }) + }, + updateuserimage: function (id,avatar) { + + //更新用户头像 + const that = this; + let url = Apps.globalData.baseUrl + '/user/updateuserimage'; + var param = { + id: id, + avatar:avatar + }; + //此处为使用封装的post请求 + util.post(url, param).then((res) => { + + }).catch((errMsg) => { + console.log(errMsg); + }); + }, + updateusername: function (id,username) { + + //更新用户头像 + const that = this; + let url = Apps.globalData.baseUrl + '/user/updateusername'; + var param = { + id: id, + username:username + }; + //此处为使用封装的post请求 + util.post(url, param).then((res) => { + that.loaddata(); + }).catch((errMsg) => { + console.log(errMsg); + }); + } +}) \ No newline at end of file diff --git a/pages/newmine/newmine.json b/pages/newmine/newmine.json new file mode 100644 index 0000000..3928faa --- /dev/null +++ b/pages/newmine/newmine.json @@ -0,0 +1,3 @@ +{ + "usingComponents": {} +} \ No newline at end of file diff --git a/pages/newmine/newmine.wxml b/pages/newmine/newmine.wxml new file mode 100644 index 0000000..f2862a7 --- /dev/null +++ b/pages/newmine/newmine.wxml @@ -0,0 +1,103 @@ + + + + + + + + + + + + {{userdatainfo.username}} + + + + + + + + + + + + + + + + + + + + + + + + {{userinfo.score}} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + {{popmsgdata.name}}怼币 + 来源:{{popmsgdata.msg}} + + + + + + + + \ No newline at end of file diff --git a/pages/newmine/newmine.wxss b/pages/newmine/newmine.wxss new file mode 100644 index 0000000..82cab8d --- /dev/null +++ b/pages/newmine/newmine.wxss @@ -0,0 +1,353 @@ +/* 我的头部 */ +Image { + height: auto; +} + +.minemain { + width: 690rpx; + height: 250rpx; + margin: 0 auto; + background-image: url('https://ndnd.duiduiedu.com/uploads/pics/minemainback1.png'); + background-repeat: no-repeat; + /*下面的是关键的设置100%显示*/ + background-size: 100% 100%; +} + +.minemainleft { + display: flex; + width: 400rpx; + margin-top: 46rpx; + float: left; +} + +.mineleft1 image { + position: absolute; + left: 0rpx; + width: 153rpx; + height: 156rpx; + align-items: center; + z-index: 0; + border-radius: 50%; +} +.mineleft1 button{ + width: 153rpx; + height: 156rpx; + margin-left: 32rpx; + border-radius: 50%; + flex-direction: column; + justify-content: center; + align-items: center; + z-index: 0; +} + +.mineleft2 { + width: 500rpx; + height: 56rpx; + margin-left: 32rpx; + margin-top: 30rpx; +} +.leftup { + + width: 380rpx; + height: 56rpx; + line-height: 56rpx; + overflow:hidden; +} +.leftup text { + width: 500rpx; + font-size: 40rpx; + color: white; + overflow:hidden; +} +.leftdown{ + width: 300rpx; + height: 56rpx; + line-height: 56rpx; +} +.leftdown label { + width: 300rpx; + font-size: 24rpx; + color: white; +} + +.minemainright { + + float: right; + width: 100rpx; + height: 250rpx; + margin-right: 20rpx; +} + +.item1 { + width: 100rpx; + height: 100rpx; + margin-top: 46rpx; +} + +.item1 image { + width: 60rpx; + height: 60rpx; + margin-top: 46rpx; +} + +/* 我的头部 */ + +/* vip权益 */ +.minevipquanyi { + + display: flex; + flex-direction: row; + justify-content: flex-start; + align-items: center; + width: 690rpx; + height: 100rpx; + margin: 20rpx auto; + background-color: #e2feff; +} + +.minemiddle1 { + + width: 240rpx; + height: 72rpx; + text-align: left; + margin-left: 20rpx; +} + +.minemiddle1 image { + width: 232rpx; + height: 72rpx; +} + +.minemiddle2 { + width: 200rpx; + height: 60rpx; + line-height: 60rpx; + text-align: center; + margin-left: 20rpx; +} + +.minemiddle2 text { + width: 200rpx; + height: 60rpx; + font-weight: 700; + font-size: 40rpx; + color: #1CCFD6; +} + +.minemiddle3 { + width: 220rpx; + height: 60rpx; + text-align: right; + margin-left: 10rpx; + margin-right: 20rpx; +} + +.minemiddle3 image { + width: 208rpx; + height: 64rpx; +} + +/* vip权益 */ + +/* 金币兑换 */ +.minevipduihuan { + + display: flex; + flex-direction: row; + justify-content: center; + align-items: center; + width: 690rpx; + height: 100rpx; + margin: 0 auto; + +} + +.duihuan1 { + width: 340rpx; + text-align: left; +} + +.duihuan1 image { + width: 340rpx; + height: 107rpx; +} + +.duihuan2 { + margin-left: 10rpx; + width: 340rpx; + text-align: left; +} + +.duihuan2 image { + width: 340rpx; + height: 107rpx; +} + +/* 金币兑换 */ + +/* 我的工具列表 */ + +.minetoolslist { + width: 690rpx; + height: 460rpx; + background-color: #e0feff; + margin: 40rpx auto; + border-radius: 3%; +} + +.minetoolslist image { + + margin-left: 110rpx; + margin-top: 40rpx; + margin-bottom: 40rpx; + width: 85rpx; + height: 124rpx; + +} + +/* 我的工具列表 */ + +/* 联系列表 */ +.linklist { + width: 690rpx; + height: 72rpx; + margin: 0 auto; + margin-bottom: 10rpx; +} + +.linklist2 { + width: 690rpx; + margin: 0 auto; + margin-bottom: 20rpx; + +} + +.linklist2 button { + background-image: url('https://ndnd.duiduiedu.com/uploads/pics/minemainmg1.png'); + background-repeat: no-repeat; + height: 72rpx; + border: none; + font-size: 16px; +} + +.linklist3 { + + background-image: url('https://ndnd.duiduiedu.com/uploads/pics/minemainkf.png'); + background-repeat: no-repeat; + background-size: cover; + background-color: #fff1f7; + height: 60rpx; + font-size: 16px; + width: 690rpx; + margin: 0 auto; + margin-bottom: 40rpx; +} + +.linklist3::after { + border: none; +} + +.linklist image { + width: 690rpx; + height: 72rpx; +} + +/* 联系列表 */ +/* vip图标 */ +.vipimage { + display: flex; + flex-direction: row; + justify-content: center; + align-items: center; + position: relative; + padding-right: 0rpx; + top: -2rpx; + left: 170rpx; + width: 250rpx; + height: 33rpx; + +} + +.vipimage text { + line-height: 35rpx; + height: 35rpx; + color: white; + font-size: 28rpx; +} + +.vipimage image { + + margin-left: 0rpx; + width: 37rpx; + height: 33rpx; + z-index: 2; +} + +/* vip图标 */ + +.wrapper { + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; + height: 100%; +} + +.block { + width: 100%; + height: 100%; + background: url('https://ndnd.duiduiedu.com/uploads/pics/userwrapper01.png') center no-repeat; + background-size: contain; +} + +.blockbutton { + width: 200rpx; + height: 40rpx; + position: relative; + left: 100rpx; + top: 400rpx; +} + +.blocktext1 { + + width: 250rpx; + height: 60rpx; + position: relative; + left: 280rpx; + top: 800rpx; +} + +.blocktext1 text { + font-size: 22rpx; +} + +.blocktext2 { + + width: 200rpx; + height: 60rpx; + position: relative; + left: 310rpx; + top: 820rpx; +} + +.blocktext2 text { + font-size: 28rpx; + color: #fbaa4c; +} + +.circleimages { + + position:fixed; + margin-left: 32rpx; + border-radius: 48%; + flex-direction: column; + justify-content: center; + align-items: center; + width: 150rpx; + height: 150rpx; + top: 55rpx; +} +.usernameclass{ + margin: 30 auto; + color: white; +} \ No newline at end of file diff --git a/pages/newtest/newtest.js b/pages/newtest/newtest.js new file mode 100644 index 0000000..11b7aa0 --- /dev/null +++ b/pages/newtest/newtest.js @@ -0,0 +1,128 @@ +// pages/newtest/newtest.js +Page({ + + /** + * 页面的初始数据 + */ + data: { + sliderValue: 0, //控制进度条slider的值, + updateState: false, //防止视频播放过程中导致的拖拽失效 + playStates: false //控制播放 & 暂停按钮的显示 + }, + + /** + * 生命周期函数--监听页面加载 + */ + onLoad: function (options) { + + }, + + /** + * 生命周期函数--监听页面初次渲染完成 + */ + onReady: function () { + this.videoContext = wx.createVideoContext('myVideo'); + this.setData({ + updateState: true + }) + }, + videoUpdate(e) { + if (this.data.updateState) { //判断拖拽完成后才触发更新,避免拖拽失效 + let sliderValue = e.detail.currentTime / e.detail.duration * 100; + let time = e.detail.currentTime.toFixed(0); + // let time = sliderValue.toFixed(0); + console.log('试看=>'+time); + if (time >= 20) { + this.videoContext.pause(); + } + this.setData({ + duration: e.detail.duration, + playStates:false, + sliderValue:time + }) + } + }, + sliderChanging(e) { + const times=this.data.sliderValue; + if(times>=20){ + this.videoContext.pause(); + console.log(times); + }else{ + this.videoContext.play(); + } + this.setData({ + updateState: false //拖拽过程中,不允许更新进度条 + }) + }, + sliderChange(e) { + if (this.data.duration) { + // const times=e.detail.value / 100 * this.data.duration; + const times=this.data.sliderValue; + if(times>=20){ + this.videoContext.pause(); + console.log(times); + }else{ + this.videoContext.play(); + } + this.setData({ + sliderValue: e.detail.value, + updateState: false //完成拖动后允许更新滚动条 + }) + } + }, + videoOpreation() { + + const times= this.data.sliderValue; + console.log(times); + if(times>=20){ + this.videoContext.pause(); + // this.data.playStates ? this.videoContext.pause() : this.videoContext.play(); + this.setData({ + playStates: !this.data.playStates + }) + } + + }, + + /** + * 生命周期函数--监听页面显示 + */ + onShow: function () { + + }, + + /** + * 生命周期函数--监听页面隐藏 + */ + onHide: function () { + + }, + + /** + * 生命周期函数--监听页面卸载 + */ + onUnload: function () { + + }, + + /** + * 页面相关事件处理函数--监听用户下拉动作 + */ + onPullDownRefresh: function () { + + }, + + /** + * 页面上拉触底事件的处理函数 + */ + onReachBottom: function () { + + }, + + /** + * 用户点击右上角分享 + */ + onShareAppMessage: function () { + + } +}) \ No newline at end of file diff --git a/pages/newtest/newtest.json b/pages/newtest/newtest.json new file mode 100644 index 0000000..8835af0 --- /dev/null +++ b/pages/newtest/newtest.json @@ -0,0 +1,3 @@ +{ + "usingComponents": {} +} \ No newline at end of file diff --git a/pages/newtest/newtest.wxml b/pages/newtest/newtest.wxml new file mode 100644 index 0000000..5212e28 --- /dev/null +++ b/pages/newtest/newtest.wxml @@ -0,0 +1,7 @@ + + + + + + + diff --git a/pages/newtest/newtest.wxss b/pages/newtest/newtest.wxss new file mode 100644 index 0000000..ab9477c --- /dev/null +++ b/pages/newtest/newtest.wxss @@ -0,0 +1,23 @@ +.process-container image{ + + position: relative; + z-index: 99; + transform:translate(20%, -170%); + z-index: 999; + width: 60rpx; + height: 60rpx; + +} + +.slider-container { + position: relative; + z-index: 99; + left: 50%; + top: -379%; + transform: translate(-50%, -490%); + z-index: 999; + width: 80%; +} +.slider{ + width: 80%; +} \ No newline at end of file diff --git a/pages/picsdisplay/picsdisplay.js b/pages/picsdisplay/picsdisplay.js new file mode 100644 index 0000000..0f5e9c3 --- /dev/null +++ b/pages/picsdisplay/picsdisplay.js @@ -0,0 +1,66 @@ +// pages/picsdisplay/picsdisplay.js +Page({ + + /** + * 页面的初始数据 + */ + data: { + + }, + + /** + * 生命周期函数--监听页面加载 + */ + onLoad: function (options) { + + }, + + /** + * 生命周期函数--监听页面初次渲染完成 + */ + onReady: function () { + + }, + + /** + * 生命周期函数--监听页面显示 + */ + onShow: function () { + + }, + + /** + * 生命周期函数--监听页面隐藏 + */ + onHide: function () { + + }, + + /** + * 生命周期函数--监听页面卸载 + */ + onUnload: function () { + + }, + + /** + * 页面相关事件处理函数--监听用户下拉动作 + */ + onPullDownRefresh: function () { + + }, + + /** + * 页面上拉触底事件的处理函数 + */ + onReachBottom: function () { + + }, + + /** + * 用户点击右上角分享 + */ + onShareAppMessage: function () { + + } +}) \ No newline at end of file diff --git a/pages/picsdisplay/picsdisplay.json b/pages/picsdisplay/picsdisplay.json new file mode 100644 index 0000000..8835af0 --- /dev/null +++ b/pages/picsdisplay/picsdisplay.json @@ -0,0 +1,3 @@ +{ + "usingComponents": {} +} \ No newline at end of file diff --git a/pages/picsdisplay/picsdisplay.wxml b/pages/picsdisplay/picsdisplay.wxml new file mode 100644 index 0000000..b11fba3 --- /dev/null +++ b/pages/picsdisplay/picsdisplay.wxml @@ -0,0 +1,45 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/pages/picsdisplay/picsdisplay.wxss b/pages/picsdisplay/picsdisplay.wxss new file mode 100644 index 0000000..ea2d947 --- /dev/null +++ b/pages/picsdisplay/picsdisplay.wxss @@ -0,0 +1 @@ +/* pages/picsdisplay/picsdisplay.wxss */ \ No newline at end of file diff --git a/pages/singledouble/singledouble.js b/pages/singledouble/singledouble.js new file mode 100644 index 0000000..ee7f1f5 --- /dev/null +++ b/pages/singledouble/singledouble.js @@ -0,0 +1,72 @@ +Page({ + + /** + * 页面的初始数据 + */ + data: { + list:[{"id":"452113a3","name":"肥肥","active":''}, + {"id":"a1b931a0","name":"滚滚","active":''}, + {"id":"115af7f9","name":"圆圆","active":''}, + {"id":"60fe875c","name":"胖胖","active":''}, + {"id":"8f100654","name":"嘟嘟","active":''}], + type:[ + { id:'sgyl',name:'单选11111',active:false}, + { id:'js',name:'单选22222',active:false}, + { id:'shjjfz',name:'单选33333',active:false}, + { id:'sbhqs',name:'单选4444',active:false}, + { id:'ldmf',name:'单选5555',active:false}, + { id:'xfgw',name:'单选66666',active:false} + ] + }, + + //单选 + bindActive(e){ + let arr = this.data.type.map(item=>{ + if(item.id===e.currentTarget.dataset.id){ + item.active=!item.active + }else{ + item.active=false + } + return item + }) + this.setData({type:arr}); + this.getPeopleInfo(); + }, + +//多选 + bindList(e){ + let index=e.currentTarget.dataset.id; + let arr=this.data.list.map(item=>{ + if(item.id == index && item.active == ""){ + item.active="active"; + }else if(item.id == index){ + item.active=""; + } + return item + }) + this.setData({list:arr}); + this.getPeopleInfo(); + }, + +//获取id + getPeopleInfo(){ + let ids=this.data.list.filter( item=> item.active == 'active').map(item => item.id); + let dx=this.data.type.filter(item => item.active == true).map(item=>item.id); + console.log('多选Id:'+ids) + console.log('单选Id:'+dx); + }, + onLoad: function (options) { + var arrSimple=new Array('A','D','C','B'); + arrSimple.sort(); + console.log(arrSimple); + + + var strList = ['A', 'C', 'D', 'B']; + + strList.sort((a, b) => { + return a.localeCompare(b); + }); + console.log(strList); + + }, +}) diff --git a/pages/singledouble/singledouble.json b/pages/singledouble/singledouble.json new file mode 100644 index 0000000..8835af0 --- /dev/null +++ b/pages/singledouble/singledouble.json @@ -0,0 +1,3 @@ +{ + "usingComponents": {} +} \ No newline at end of file diff --git a/pages/singledouble/singledouble.wxml b/pages/singledouble/singledouble.wxml new file mode 100644 index 0000000..db2c619 --- /dev/null +++ b/pages/singledouble/singledouble.wxml @@ -0,0 +1,14 @@ + + + 多选 + + {{item.name}} + + + + + 单选 + + {{item.name}} + + diff --git a/pages/singledouble/singledouble.wxss b/pages/singledouble/singledouble.wxss new file mode 100644 index 0000000..307e8bf --- /dev/null +++ b/pages/singledouble/singledouble.wxss @@ -0,0 +1,21 @@ +.content{ + margin-bottom: 50rpx; +} +.title{ + font-size: 40rpx; + font-weight: bold; +} +.item > view{ + color: #666666; + font-size: 24.8rpx; + background: #EEEEEE; + padding: 11rpx 27rpx; + border-radius: 24rpx; + margin-top: 16rpx; + margin-right: 16rpx; + cursor: pointer; +} +.item .active{ + color:#ffffff; + background-color: #1D80F5; +} diff --git a/pages/swipecell/swipecell.js b/pages/swipecell/swipecell.js new file mode 100644 index 0000000..1d5df33 --- /dev/null +++ b/pages/swipecell/swipecell.js @@ -0,0 +1,81 @@ +// pages/swipecell/swipecell.js +Page({ + onClose(event) { + const { position, instance } = event.detail; + switch (position) { + case 'left': + case 'cell': + instance.close(); + break; + case 'right': + Dialog.confirm({ + message: '确定删除吗?', + }).then(() => { + instance.close(); + }); + break; + } + }, + /** + * 页面的初始数据 + */ + data: { + + }, + + /** + * 生命周期函数--监听页面加载 + */ + onLoad: function (options) { + + }, + + /** + * 生命周期函数--监听页面初次渲染完成 + */ + onReady: function () { + + }, + + /** + * 生命周期函数--监听页面显示 + */ + onShow: function () { + + }, + + /** + * 生命周期函数--监听页面隐藏 + */ + onHide: function () { + + }, + + /** + * 生命周期函数--监听页面卸载 + */ + onUnload: function () { + + }, + + /** + * 页面相关事件处理函数--监听用户下拉动作 + */ + onPullDownRefresh: function () { + + }, + + /** + * 页面上拉触底事件的处理函数 + */ + onReachBottom: function () { + + }, + + /** + * 用户点击右上角分享 + */ + onShareAppMessage: function () { + + } +}) \ No newline at end of file diff --git a/pages/swipecell/swipecell.json b/pages/swipecell/swipecell.json new file mode 100644 index 0000000..8835af0 --- /dev/null +++ b/pages/swipecell/swipecell.json @@ -0,0 +1,3 @@ +{ + "usingComponents": {} +} \ No newline at end of file diff --git a/pages/swipecell/swipecell.wxml b/pages/swipecell/swipecell.wxml new file mode 100644 index 0000000..b7c052a --- /dev/null +++ b/pages/swipecell/swipecell.wxml @@ -0,0 +1,18 @@ + + + 普通按钮1 + 普通按钮1 + + + 普通按钮2 + 普通按钮4 + 普通按钮5 + 普通按钮6 + + + + 普通按钮3 + 普通按钮3 + + + diff --git a/pages/swipecell/swipecell.wxss b/pages/swipecell/swipecell.wxss new file mode 100644 index 0000000..389195a --- /dev/null +++ b/pages/swipecell/swipecell.wxss @@ -0,0 +1 @@ +/* pages/swipecell/swipecell.wxss */ \ No newline at end of file diff --git a/pages/tarbar/tarbar.js b/pages/tarbar/tarbar.js new file mode 100644 index 0000000..9f030c0 --- /dev/null +++ b/pages/tarbar/tarbar.js @@ -0,0 +1,85 @@ +// pages/tarbar/tarbar.js +Page({ + + /** + * 页面的初始数据 + */ + data: { + active: 0, + active2:0, + icon: { + normal: 'https://img.yzcdn.cn/vant/user-inactive.png', + active: 'https://img.yzcdn.cn/vant/user-active.png', + }, + }, + onChange2(event) { + this.setData({ active2: event.detail }); + }, + onChange(event) { + wx.showToast({ + title: `切换到标签 ${event.detail.name}`, + icon: 'none', + }); + }, + clickconent(e){ + + console.log(e) + + }, + + /** + * 生命周期函数--监听页面加载 + */ + onLoad: function (options) { + + }, + + /** + * 生命周期函数--监听页面初次渲染完成 + */ + onReady: function () { + + }, + + /** + * 生命周期函数--监听页面显示 + */ + onShow: function () { + + }, + + /** + * 生命周期函数--监听页面隐藏 + */ + onHide: function () { + + }, + + /** + * 生命周期函数--监听页面卸载 + */ + onUnload: function () { + + }, + + /** + * 页面相关事件处理函数--监听用户下拉动作 + */ + onPullDownRefresh: function () { + + }, + + /** + * 页面上拉触底事件的处理函数 + */ + onReachBottom: function () { + + }, + + /** + * 用户点击右上角分享 + */ + onShareAppMessage: function () { + + } +}) \ No newline at end of file diff --git a/pages/tarbar/tarbar.json b/pages/tarbar/tarbar.json new file mode 100644 index 0000000..dcc01ac --- /dev/null +++ b/pages/tarbar/tarbar.json @@ -0,0 +1,8 @@ +{ + "usingComponents": {}, + "navigationBarBackgroundColor": "#ff99cc", + "navigationBarTextStyle": "black", + "navigationBarTitleText": "微信接口功能演示", + "backgroundColor": "#ccc", + "backgroundTextStyle": "light" +} \ No newline at end of file diff --git a/pages/tarbar/tarbar.wxml b/pages/tarbar/tarbar.wxml new file mode 100644 index 0000000..606a4f8 --- /dev/null +++ b/pages/tarbar/tarbar.wxml @@ -0,0 +1,49 @@ + + + + + + + + + + + + + + + + + + + + + + 内容 2 + 内容 3 + 内容 4 + 内容 5 + 内容 6 + 内容 7 + 内容 8 + + + + + + + 自定义 + + 标签 + 标签 + diff --git a/pages/tarbar/tarbar.wxss b/pages/tarbar/tarbar.wxss new file mode 100644 index 0000000..5fe0a0c --- /dev/null +++ b/pages/tarbar/tarbar.wxss @@ -0,0 +1,7 @@ +.bordercss{ + + border-style: solid; + border-color: green; + border: 2rpx salmon; + background-color: green; +} \ No newline at end of file diff --git a/pages/userlogin/userlogin.js b/pages/userlogin/userlogin.js new file mode 100644 index 0000000..ea90624 --- /dev/null +++ b/pages/userlogin/userlogin.js @@ -0,0 +1,286 @@ +const Apps = getApp(); +import Toast from '@vant/weapp/toast/toast'; +Page({ + + /** + * 页面的初始数据 + */ + data: { + checked: false, + showpop: false, + isLogging: false, // 添加登录中的标志位,防止重复点击 + redirectUrl: '', // 登录成功后需要跳转的页面路径 + redirectParams: {} // 登录成功后需要传递的参数 + }, + onClose() { + this.setData({ showpop: false }); + }, + bindconfirmdata: function (params) { + this.setData({ checked: true }); + }, + + canclebtn: function (params) { + this.setData({ + checked: false + }) + }, + + + /** + * 生命周期函数--监听页面加载 + */ + onLoad: function (options) { + // 接收跳转参数,用于登录成功后返回 + if (options.redirect_url) { + this.setData({ + redirectUrl: decodeURIComponent(options.redirect_url) + }); + } + // 接收其他参数,如 camp_id + if (options.camp_id) { + // camp_detail 页面使用 id 参数,所以只传递 id + this.setData({ + redirectParams: { + id: options.camp_id // camp_detail 页面使用 id 参数 + } + }); + } + }, + // checkbox 勾选状态变化 + onChange(event) { + console.log(event.detail); + this.setData({ + checked: event.detail + }); + }, + + // 显示协议弹窗 + showAgreement() { + this.setData({ + showpop: true + }); + }, + + /** + * 生命周期函数--监听页面初次渲染完成 + */ + onReady: function () { + + }, + + /** + * 生命周期函数--监听页面显示 + */ + onShow: function () { + // 保留用户登录态及跳转参数,避免清空导致页面无法正常跳转显示 + }, + + /** + * 生命周期函数--监听页面隐藏 + */ + onHide: function () { + + }, + + /** + * 生命周期函数--监听页面卸载 + */ + onUnload: function () { + + }, + + /** + * 页面相关事件处理函数--监听用户下拉动作 + */ + onPullDownRefresh: function () { + + }, + + /** + * 页面上拉触底事件的处理函数 + */ + onReachBottom: function () { + + }, + + /** + * 用户点击右上角分享 + */ + onShareAppMessage: function () { + + }, + /** + * 获取手机号码登录 + */ + getPhoneNumber(e) { + const that = this; + + console.log('getPhoneNumber 事件返回:', e.detail); + + // 检查是否勾选协议 + if (that.data.checked == false) { + Toast.success('请先阅读协议'); + return; + } + + // 防止重复点击 + if (that.data.isLogging) { + console.log('正在登录中,请勿重复点击'); + return; + } + + // 用户拒绝授权 + if (e.detail.errMsg !== 'getPhoneNumber:ok') { + wx.showToast({ + title: '您拒绝了手机号授权', + icon: 'none' + }); + return; + } + + // 设置登录中状态 + that.setData({ + isLogging: true + }); + + // 显示加载提示 + wx.showLoading({ + title: '登录中...', + mask: true + }); + + // 获取手机号的加密数据 + const encryptedData = e.detail.encryptedData; // 加密数据 + const iv = e.detail.iv; // 加密算法的初始向量 + + console.log('手机号 encryptedData:', encryptedData); + console.log('手机号 iv:', iv); + + // 先调用 wx.login 获取登录凭证 code + wx.login({ + success(loginRes) { + if (loginRes.code) { + const loginCode = loginRes.code; // 登录凭证,用于获取 openid + console.log('登录 code:', loginCode); + + // 一次性发起网络请求,传递 code、iv、encryptedData 三个参数 + wx.request({ + // url: 'http://127.0.0.1:8006/addons/unishop/user/authSession', + url: 'https://ndnd.duiduiedu.com/addons/unishop/user/authSession', + data: { + code: loginCode, // 使用 wx.login 返回的 code + iv: iv, + encryptedData: encryptedData, + platform: 'MP-WEIXIN' + }, + header: { + 'content-type': 'application/x-www-form-urlencoded' + }, + method: "POST", + datatype: 'json', + success: function (authRes) { + console.log('authSession 返回:', authRes); + + // 关闭加载提示 + wx.hideLoading(); + + if (!authRes.data || !authRes.data.data) { + // 重置登录状态 + that.setData({ + isLogging: false + }); + + wx.showToast({ + title: '登录失败,请重试', + icon: 'none' + }); + return; + } + + // authSession 接口已经返回完整用户信息,直接使用 + const userData = authRes.data.data; + + // 保存全局数据 + Apps.globalData.wxopenid = userData.openid; + Apps.globalData.session_key = userData.userInfo.session_key; + Apps.globalData.currentuserinfo = userData.userInfo; + + // 保存到本地存储 + wx.setStorageSync('wxopenid', userData.openid); + wx.setStorageSync('wxuserid', userData.userInfo.id); + wx.setStorageSync('userinfo', userData.userInfo); + + // 登录成功,根据是否有跳转参数决定跳转位置 + wx.showToast({ + title: '登录成功', + icon: 'success', + duration: 1500 + }); + + setTimeout(() => { + // 如果有重定向URL,跳转到指定页面 + if (that.data.redirectUrl) { + var redirectUrl = that.data.redirectUrl; + // 如果有参数,构建完整的URL + if (that.data.redirectParams && Object.keys(that.data.redirectParams).length > 0) { + var params = []; + for (var key in that.data.redirectParams) { + params.push(key + '=' + that.data.redirectParams[key]); + } + redirectUrl += '?' + params.join('&'); + } + wx.redirectTo({ + url: redirectUrl + }); + } else { + // 默认跳转到首页 + wx.switchTab({ + url: '/pages/index/index', + }); + } + }, 1500); + }, + fail: function (err) { + // 请求失败,重置状态 + wx.hideLoading(); + that.setData({ + isLogging: false + }); + + console.log('请求失败:', err); + wx.showToast({ + title: '网络请求失败,请重试', + icon: 'none' + }); + } + }) + } else { + // wx.login 失败,重置状态 + wx.hideLoading(); + that.setData({ + isLogging: false + }); + + console.log('wx.login 失败:' + loginRes.errMsg); + wx.showToast({ + title: '登录失败,请重试', + icon: 'none' + }); + } + }, + fail: (loginErr) => { + // wx.login 调用失败,重置状态 + wx.hideLoading(); + that.setData({ + isLogging: false + }); + + console.log('wx.login 调用失败:', loginErr); + wx.showToast({ + title: '登录失败,请重试', + icon: 'none' + }); + } + }) + } +}) \ No newline at end of file diff --git a/pages/userlogin/userlogin.json b/pages/userlogin/userlogin.json new file mode 100644 index 0000000..99fff04 --- /dev/null +++ b/pages/userlogin/userlogin.json @@ -0,0 +1,4 @@ +{ + "usingComponents": {}, + "navigationBarTitleText": "用户授权" +} \ No newline at end of file diff --git a/pages/userlogin/userlogin.wxml b/pages/userlogin/userlogin.wxml new file mode 100644 index 0000000..b1b55ed --- /dev/null +++ b/pages/userlogin/userlogin.wxml @@ -0,0 +1,122 @@ + + + + + + + + + + + + + + + + 一、用户协议 + + 用户协议是小程序开发者与用户之间达成的协议,规定了用户使用小程序的条件、权利和义务等内容。用户在使用小程序之前需要同意用户协议,否则无法使用小程序。 + + + 主要内容包括: + + 1. 用户注册和账号管理规定:包括用户注册、账号安全和管理等规定。 + + + 2. 使用规范和限制:包括用户在小程序上发布内容的规范、禁止发布的内容和行为等规定。 + + + 3. 用户权利和义务:包括用户在使用小程序时享有的权利和应承担的义务等规定。 + + + 4. 免责声明和责任限制:包括小程序开发者对小程序服务的免责声明和责任限制等规定。 + + + 5. 争议解决方式:包括双方在发生争议时解决方式的规定。 + + + 二、隐私政策 + + 隐私政策是小程序开发者为保护用户隐私而制定的政策,规定了小程序开发者在收集、使用、存储、保护用户个人信息时应遵守的原则和措施。 + + + 隐私政策包括: + + 1. 收集和使用用户个人信息的范围和目的:包括小程序开发者收集和使用哪些用户个人信息、为什么收集和使用这些信息等说明。 + + + 2. 个人信息的保护和管理:包括小程序开发者如何保护和管理用户个人信息,以及如何处理用户请求删除、更正、撤回同意等要求的规定。 + + + 3. 信息共享和披露:包括小程序开发者在哪些情况下会共享或披露用户个人信息的规定。 + + + 4. Cookie和类似技术的使用:包括小程序开发者在使用Cookie和类似技术时应遵守的规定。 + + + 5. 隐私政策的更新和变更:包括小程序开发者如何更新和变更隐私政策,以及用户如何获得通知和选择的规定。 + + + 三、用户权利 + + 小程序开发者需要确保用户在使用小程序时的知情权和选择权。在用户协议和隐私政策中,应当详细说明用户的权利和义务,并让用户明确知道自己的个人信息将会被收集和使用。用户有权选择是否同意协议和政策,以及随时撤回同意或删除个人信息的权利。 + + + 四、信息安全 + + 小程序开发者建立健全的个人信息保护机制,确保用户个人信息的安全和保密。开发者采取技术措施和管理措施,防止用户个人信息被泄露、丢失或被滥用。对于个人信息安全事件的处理,开发者及时采取应对措施,并向用户说明情况,依法履行相关报告和告知义务。 + + + 五、协议效力 + + 用户协议和隐私政策是保障用户合法权益和保护用户隐私的重要文件。小程序开发者制定协议和政策时,遵守法律法规和相关规定的要求,确保协议和政策的合法性和有效性。 + + + + + + \ No newline at end of file diff --git a/pages/userlogin/userlogin.wxss b/pages/userlogin/userlogin.wxss new file mode 100644 index 0000000..1900910 --- /dev/null +++ b/pages/userlogin/userlogin.wxss @@ -0,0 +1,209 @@ +/* ========== 页面容器 ========== */ +.userlogin { + width: 100%; + min-height: 100vh; + background: #ffffff url('https://ndnd.duiduiedu.com/uploads/pics/phonenumber.png') no-repeat center 80px; + background-size: 100% auto; + display: flex; + flex-direction: column; + justify-content: space-between; + padding: 100rpx 60rpx 80rpx; + box-sizing: border-box; + position: relative; + overflow: hidden; +} + +/* ========== 顶部 Logo 和标题区域 ========== */ +.login-header { + position: relative; + z-index: 1; + text-align: center; + animation: fadeInDown 0.8s ease-out; +} + +.logo-container { + width: 160rpx; + height: 160rpx; + margin: 0 auto 40rpx; + background: #ffffff; + border-radius: 50%; + display: flex; + align-items: center; + justify-content: center; + box-shadow: 0 10rpx 40rpx rgba(0, 0, 0, 0.08); + animation: scaleIn 0.6s ease-out; +} + +.logo { + width: 100rpx; + height: 100rpx; +} + +.app-title { + font-size: 56rpx; + font-weight: bold; + color: #333333; + margin-bottom: 20rpx; + letter-spacing: 4rpx; + text-shadow: 0 2rpx 8rpx rgba(255, 255, 255, 0.8); +} + +.app-subtitle { + font-size: 28rpx; + color: #666666; + letter-spacing: 2rpx; +} + +/* ========== 底部登录区域 ========== */ +.login-bottom { + position: relative; + z-index: 1; + animation: fadeInUp 0.8s ease-out; +} + +/* 登录按钮包装器 */ +.login-btn-wrapper { + margin-bottom: 40rpx; +} + +.login-button { + width: 100%; + height: 96rpx; + line-height: 96rpx; + background: linear-gradient(to right, #1ccfd6, #17b3b8); + color: #ffffff; + border: none; + border-radius: 48rpx; + box-shadow: 0 10rpx 30rpx rgba(28, 207, 214, 0.3); + font-size: 32rpx; + font-weight: 500; + display: flex; + align-items: center; + justify-content: center; + gap: 10rpx; +} + +.login-button::after { + border: none; +} + +/* 协议勾选区域 */ +.agreement-check { + display: flex; + justify-content: center; + align-items: center; +} + +.agreement-text { + font-size: 24rpx; + color: #666666; +} + +.agreement-link { + font-size: 24rpx; + color: #1ccfd6; + text-decoration: none; + font-weight: 500; + cursor: pointer; +} + +/* 协议弹窗内容 */ +.usercontian { + height: 750rpx; + overflow-y: scroll; + padding: 30rpx 40rpx; + font-size: 28rpx; + line-height: 1.8; + color: #333; + word-break: break-all; +} + +.usercontian text { + display: block; + text-align: justify; +} + +/* 协议段落标题 */ +.agreement-title { + font-size: 32rpx; + font-weight: bold; + color: #1ccfd6; + margin: 30rpx 0 20rpx; + line-height: 1.5; +} + +.agreement-item { + margin: 20rpx 0; + padding-left: 20rpx; + line-height: 1.8; +} + +/* ========== 动画效果 ========== */ +@keyframes fadeInUp { + from { + opacity: 0; + transform: translateY(60rpx); + } + to { + opacity: 1; + transform: translateY(0); + } +} + +@keyframes fadeInDown { + from { + opacity: 0; + transform: translateY(-60rpx); + } + to { + opacity: 1; + transform: translateY(0); + } +} + +@keyframes scaleIn { + from { + opacity: 0; + transform: scale(0.8); + } + to { + opacity: 1; + transform: scale(1); + } +} + +@keyframes fadeIn { + from { + opacity: 0; + } + to { + opacity: 1; + } +} + +/* ========== 响应式设计 ========== */ +@media (max-height: 600px) { + .userlogin { + padding: 60rpx 60rpx 50rpx; + } + + .logo-container { + width: 120rpx; + height: 120rpx; + margin-bottom: 30rpx; + } + + .logo { + width: 80rpx; + height: 80rpx; + } + + .app-title { + font-size: 48rpx; + } + + .login-button { + height: 88rpx; + line-height: 88rpx; + } +} \ No newline at end of file diff --git a/pages/vipmonth/vipmonth.js b/pages/vipmonth/vipmonth.js new file mode 100644 index 0000000..e43a411 --- /dev/null +++ b/pages/vipmonth/vipmonth.js @@ -0,0 +1,139 @@ +const Apps = getApp(); +const api = require('../../config/api.js'); +const util = require('../../config/util.js'); +import Toast from '../../miniprogram_npm/@vant/weapp/toast/toast'; +Page({ + + /** + * 页面的初始数据 + */ + data: { + pareid: 0, + listdata: [], + liveclickopen: 2, + baseurl: Apps.globalData.baseimgurl, + coursename: '', + vipsmonth_id: 1 + }, + + /** + * 生命周期函数--监听页面加载 + */ + onLoad: function (options) { + console.log(options); + this.setData({ + pareid: options.id, + vipsmonth_id: options.vipsmonth_id + }); + + }, + + /** + * 生命周期函数--监听页面初次渲染完成 + */ + onReady: function () { + + }, + + /** + * 生命周期函数--监听页面显示 + */ + onShow: function () { + Apps.islogin(); + this.getvipmonthcourse(); + }, + + /** + * 生命周期函数--监听页面隐藏 + */ + onHide: function () { + + }, + + /** + * 生命周期函数--监听页面卸载 + */ + onUnload: function () { + + }, + + /** + * 页面相关事件处理函数--监听用户下拉动作 + */ + onPullDownRefresh: function () { + + }, + + /** + * 页面上拉触底事件的处理函数 + */ + onReachBottom: function () { + + }, + + /** + * 用户点击右上角分享 + */ + onShareAppMessage: function () { + + }, + + getvipmonthcourse: function () { + const that = this; + let url = Apps.globalData.baseUrl + '/vip/getvipmonthcourselist'; + var param = { + id: that.data.pareid, + }; + //此处为使用封装的post请求 + util.post(url, param).then((res) => { + console.log(res); + that.setData({ + listdata: res.data, + coursename: res.data[0]['parentname'] + }); + + }).catch((errMsg) => { + console.log(errMsg); + }); + }, + payorderclick: function (params) { + + let vipsmonth = params.currentTarget.dataset.vipsmonth; + const that = this; + let url = Apps.globalData.baseUrl + '/wxpay/makerorder'; + var param = { + id: params.currentTarget.id, + openid: wx.getStorageSync('wxopenid'), + paytypeid: 2, //会员卡充值 + user_id: wx.getStorageSync('wxuserid') == null ? 3 : wx.getStorageSync('wxuserid'), + vipsmonth: vipsmonth + }; + //此处为使用封装的post请求 + util.post(url, param).then((res) => { + console.log(res); + var rest = res; + // var orders = res.data.orders; + // 调用支付接口开始 + wx.requestPayment({ + timeStamp: rest.timeStamp, + nonceStr: rest.nonceStr, + package: rest.package, + signType: rest.signType, + paySign: rest.paySign, + success: function (res) { + Toast('VIP充值成功'); + }, + fail: function (res) { + console.log(res) + }, + complete: function (res) { + console.log(res) + }, + }) + + }).catch((errMsg) => { + console.log(errMsg); + }); + }, + +}) \ No newline at end of file diff --git a/pages/vipmonth/vipmonth.json b/pages/vipmonth/vipmonth.json new file mode 100644 index 0000000..e6513cf --- /dev/null +++ b/pages/vipmonth/vipmonth.json @@ -0,0 +1,4 @@ +{ + "usingComponents": {}, + "navigationBarTitleText": "课程会员卡" +} \ No newline at end of file diff --git a/pages/vipmonth/vipmonth.wxml b/pages/vipmonth/vipmonth.wxml new file mode 100644 index 0000000..1e64d0f --- /dev/null +++ b/pages/vipmonth/vipmonth.wxml @@ -0,0 +1,24 @@ + + + {{coursename}} + + + + + + + + + {{itemwlmcchina.name}} + + + {{itemwlmcchina.prices}} + + + + + + + + + \ No newline at end of file diff --git a/pages/vipmonth/vipmonth.wxss b/pages/vipmonth/vipmonth.wxss new file mode 100644 index 0000000..877520a --- /dev/null +++ b/pages/vipmonth/vipmonth.wxss @@ -0,0 +1,126 @@ +.itemlist { + background: url('https://ndnd.duiduiedu.com/uploads/pics/kecheng001.png') no-repeat; + width: 750rpx; + height: 50rpx; + line-height: 50rpx; + background-size: cover; + display: flex; + flex-direction: row-reverse; + margin-top: 50rpx; + } + + .itemlist text { + + margin-right: 180rpx; + color: white; + } + + .collectionitems { + width: 680rpx; + height: 100rpx; + margin: 0 auto; + margin-top: 35rpx; + background: url('https://ndnd.duiduiedu.com/uploads/pics/itemlistred.png') no-repeat; + background-size: cover; + + display: flex; + flex-direction: row; + justify-content: space-between; + align-items: center; + } + + .collectionitems2 { + width: 680rpx; + height: 100rpx; + margin: 0 auto; + margin-top: 35rpx; + background: url('https://ndnd.duiduiedu.com/uploads/pics/itemlistblue.png') no-repeat; + background-size: cover; + + display: flex; + flex-direction: row; + justify-content: space-between; + align-items: center; + } + + .item1 { + width: 60%; + } + + .item1 text { + width: 30%; + margin-left: 65rpx; + color: black; + font-size: 30rpx; + } + + .item2 { + width: 10%; + text-align: right; + } + + .item2 text { + color: black; + font-size: 30rpx; + } + + .item3 { + width: 20%; + text-align: center; + } + + .item3 image { + width: 28rpx; + height: 16rpx; + margin-right: 50rpx; + } + + .itemsup{ + width: 620rpx; + height: 62rpx; + background-color: #dfe2e2; + margin-left: 50rpx; + display: flex; + flex-direction: row; + justify-content: flex-start; + align-items: center; + } + + .itemsup2{ + width: 620rpx; + height: 62rpx; + background-color: #dfe2e2; + margin-left: 50rpx; + display: flex; + flex-direction: row; + justify-content: flex-start; + align-items: center; + display: none; + } + + .upitem1{ + + width: 107rpx; + height: 45rpx; + margin-left: 30rpx; + } + + .upitem1 text{ + + margin-left: 40rpx; + font-size: 28rpx; + } + .upitem2{ + width: 70%; + } + .upitem2 text{ + margin-left: 32rpx; + font-size: 28rpx; + } + .upitem3{ + margin-right: 37rpx; + } + .upitem3 image{ + width: 12rpx; + height: 26rpx; + } \ No newline at end of file diff --git a/pages/vipquanyi/vipquanyi.js b/pages/vipquanyi/vipquanyi.js new file mode 100644 index 0000000..5ac290a --- /dev/null +++ b/pages/vipquanyi/vipquanyi.js @@ -0,0 +1,143 @@ +const Apps = getApp(); +const api = require('../../config/api.js'); +const util = require('../../config/util.js'); +import Toast from '../../miniprogram_npm/@vant/weapp/toast/toast'; +Page({ + + /** + * 页面的初始数据 + */ + data: { + listdata: [], + baseurl: Apps.globalData.baseimgurl + }, + + /** + * 生命周期函数--监听页面加载 + */ + onLoad: function (options) { + + Apps.islogin(); + }, + + /** + * 生命周期函数--监听页面初次渲染完成 + */ + onReady: function () { + + }, + + /** + * 生命周期函数--监听页面显示 + */ + onShow: function () { + this.getviplist(); + }, + + /** + * 生命周期函数--监听页面隐藏 + */ + onHide: function () { + + }, + + /** + * 生命周期函数--监听页面卸载 + */ + onUnload: function () { + + }, + + /** + * 页面相关事件处理函数--监听用户下拉动作 + */ + onPullDownRefresh: function () { + + }, + vipclick: function () { + wx.navigateTo({ + url: '/pages/viprecharge/viprecharge', + }) + }, + + /** + * 页面上拉触底事件的处理函数 + */ + onReachBottom: function () { + + }, + + /** + * 用户点击右上角分享 + */ + onShareAppMessage: function () { + + }, + payorderclick: function (params) { + // console.log(baseUrl.globalData.wxopenid); + // console.log(params.currentTarget.id); + // return; + Apps.islogin(); + const that = this; + let url = Apps.globalData.baseUrl + '/wxpay/makerorder'; + var param = { + id: params.currentTarget.id, + openid: wx.getStorageSync('wxopenid'), + paytypeid: 1, //会员充值 + user_id: wx.getStorageSync('wxuserid') == null ? 3 : wx.getStorageSync('wxuserid') + }; + //此处为使用封装的post请求 + util.post(url, param).then((res) => { + console.log(res); + // that.setData({ + // listdata: res.data + // }); + + console.log(res); + var rest = res; + // var orders = res.data.orders; + // 调用支付接口开始 + wx.requestPayment({ + timeStamp: rest.timeStamp, + nonceStr: rest.nonceStr, + package: rest.package, + signType: rest.signType, + paySign: rest.paySign, + success: function (res) { + console.log(res); + + Toast('怼币充值成功'); + // wx.navigateTo({ + // url: '/pages/goodlist/goodlist?orders=' + orders, + // }) + }, + fail: function (res) { + console.log(res) + }, + complete: function (res) { + console.log(res) + }, + }) + + }).catch((errMsg) => { + console.log(errMsg); + }); + }, + getviplist: function (params) { + const that = this; + let url = Apps.globalData.baseUrl + '/vip/getviplist'; + var param = { + id: '123456789' + }; + //此处为使用封装的post请求 + util.get(url, param).then((res) => { + console.log(res); + that.setData({ + listdata: res.data + }); + + }).catch((errMsg) => { + console.log(errMsg); + }); + } +}) \ No newline at end of file diff --git a/pages/vipquanyi/vipquanyi.json b/pages/vipquanyi/vipquanyi.json new file mode 100644 index 0000000..195f5a3 --- /dev/null +++ b/pages/vipquanyi/vipquanyi.json @@ -0,0 +1,4 @@ +{ + "usingComponents": {}, + "navigationBarTitleText": "怼币充值" +} \ No newline at end of file diff --git a/pages/vipquanyi/vipquanyi.wxml b/pages/vipquanyi/vipquanyi.wxml new file mode 100644 index 0000000..b343056 --- /dev/null +++ b/pages/vipquanyi/vipquanyi.wxml @@ -0,0 +1,12 @@ + + + + + + + + + + \ No newline at end of file diff --git a/pages/vipquanyi/vipquanyi.wxss b/pages/vipquanyi/vipquanyi.wxss new file mode 100644 index 0000000..73a6aac --- /dev/null +++ b/pages/vipquanyi/vipquanyi.wxss @@ -0,0 +1,45 @@ +/* VIP头部 */ +.viphead{ + + width: 100%; + height: 80rpx; + margin: 0 auto; +} +.viphead image{ + width: 100%; + height: 80rpx; +} +/* VIP头部 */ + +/* 中间部分 */ +.vipmiddle{ + + width: 100%; + height: 81rpx; + margin: 0 auto; + margin-top: 25rpx; + margin-bottom: 280rpx; +} +.vipmiddle image{ + + width: 100%; + height: 81rpx; + margin: 0 auto; +} +/* 中间部分 */ + +/* 月卡图片 */ +.vipimages{ + + width:600rpx; + height: 172rpx; + margin: 0 auto; + margin-top: 25rpx; + +} +.vipimages image{ + + width:600rpx; + height: 172rpx; +} +/* 月卡图片 */ \ No newline at end of file diff --git a/pages/viprecharge/viprecharge.js b/pages/viprecharge/viprecharge.js new file mode 100644 index 0000000..1e04881 --- /dev/null +++ b/pages/viprecharge/viprecharge.js @@ -0,0 +1,115 @@ +const Apps = getApp(); +const api = require('../../config/api.js'); +const util = require('../../config/util.js'); +import Toast from '../../miniprogram_npm/@vant/weapp/toast/toast'; +Page({ + + /** + * 页面的初始数据 + */ + data: { + listdata:[], + baseurl:Apps.globalData.baseimgurl, + viplist:[] + }, + + /** + * 生命周期函数--监听页面加载 + */ + onLoad: function (options) { + + }, + + /** + * 生命周期函数--监听页面初次渲染完成 + */ + onReady: function () { + + }, + + /** + * 生命周期函数--监听页面显示 + */ + onShow: function () { + + Apps.islogin(); + this.getvipsmonth(); + this.vipkechengdays(); + }, + + /** + * 生命周期函数--监听页面隐藏 + */ + onHide: function () { + + }, + + /** + * 生命周期函数--监听页面卸载 + */ + onUnload: function () { + + }, + + /** + * 页面相关事件处理函数--监听用户下拉动作 + */ + onPullDownRefresh: function () { + + }, + + /** + * 页面上拉触底事件的处理函数 + */ + onReachBottom: function () { + + }, + + /** + * 用户点击右上角分享 + */ + onShareAppMessage: function () { + + }, + getvipsmonth:function(params) { + const that = this; + let url = Apps.globalData.baseUrl + '/vip/getvipmonthlist'; + var param = { + id: params + }; + //此处为使用封装的post请求 + util.get(url, param).then((res) => { + console.log(res); + that.setData({ + listdata: res.data + }); + + }).catch((errMsg) => { + console.log(errMsg); + }); + }, + vipmonthclick:function(params) { + console.log(params); + wx.navigateTo({ + url: '/pages/vipmonth/vipmonth?id='+params.currentTarget.id, + }) + }, + vipkechengdays:function() { + //得到用户VIP课程天数 + const that = this; + let url = Apps.globalData.baseUrl + '/vip/displayvipdata'; + var param = { + user_id: wx.getStorageSync('wxuserid') + }; + //此处为使用封装的post请求 + util.post(url, param).then((res) => { + console.log(res); + that.setData({ + viplist: res.data + }); + + }).catch((errMsg) => { + console.log(errMsg); + }); + } +}) \ No newline at end of file diff --git a/pages/viprecharge/viprecharge.json b/pages/viprecharge/viprecharge.json new file mode 100644 index 0000000..440a1cb --- /dev/null +++ b/pages/viprecharge/viprecharge.json @@ -0,0 +1,4 @@ +{ + "usingComponents": {}, + "navigationBarTitleText": "VIP充值" +} \ No newline at end of file diff --git a/pages/viprecharge/viprecharge.wxml b/pages/viprecharge/viprecharge.wxml new file mode 100644 index 0000000..623ce64 --- /dev/null +++ b/pages/viprecharge/viprecharge.wxml @@ -0,0 +1,11 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/pages/viprecharge/viprecharge.wxss b/pages/viprecharge/viprecharge.wxss new file mode 100644 index 0000000..2c06a67 --- /dev/null +++ b/pages/viprecharge/viprecharge.wxss @@ -0,0 +1,41 @@ +/* VIP头部 */ +.viphead{ + + width: 680rpx; + height: 310rpx; + margin: 0 auto; + margin-bottom: 40rpx; +} +.viphead image{ + width: 680rpx; + height: 310rpx; +} +/* VIP头部 */ + +.vipmiddle{ + margin-top: 0rpx; +} + +/* 月卡图片 */ +.vipimages{ + + width:600rpx; + height: 172rpx; + margin: 10rpx auto; + margin-bottom: 25rpx; + +} +.vipimages image{ + + width:600rpx; + height: 172rpx; +} +/* 月卡图片 */ + +.vipdays{ + margin: 0 auto; + width:600rpx; + margin-bottom: 45rpx; + padding-bottom: 30rpx; + +} \ No newline at end of file diff --git a/project.config.json b/project.config.json new file mode 100644 index 0000000..56bf628 --- /dev/null +++ b/project.config.json @@ -0,0 +1,79 @@ +{ + "description": "项目配置文件,详见文档:https://developers.weixin.qq.com/miniprogram/dev/devtools/projectconfig.html", + "setting": { + "urlCheck": false, + "es6": true, + "enhance": true, + "postcss": true, + "preloadBackgroundData": false, + "minified": true, + "newFeature": false, + "coverView": true, + "nodeModules": true, + "autoAudits": false, + "showShadowRootInWxmlPanel": true, + "scopeDataCheck": false, + "uglifyFileName": false, + "checkInvalidKey": true, + "checkSiteMap": true, + "uploadWithSourceMap": true, + "compileHotReLoad": true, + "lazyloadPlaceholderEnable": false, + "useMultiFrameRuntime": true, + "babelSetting": { + "ignore": [], + "disablePlugins": [], + "outputPath": "" + }, + "useIsolateContext": false, + "userConfirmedBundleSwitch": false, + "packNpmManually": false, + "packNpmRelationList": [], + "minifyWXSS": true, + "disableUseStrict": false, + "minifyWXML": true, + "showES6CompileOption": false, + "useCompilerPlugins": false, + "ignoreUploadUnusedFiles": true, + "useStaticServer": true, + "localPlugins": false, + "condition": false, + "useApiHook": false, + "useApiHostProcess": false, + "compileWorklet": false, + "swc": false, + "disableSWC": true + }, + "compileType": "miniprogram", + "condition": { + "search": { + "list": [] + }, + "conversation": { + "list": [] + }, + "game": { + "list": [] + }, + "plugin": { + "list": [] + }, + "gamePlugin": { + "list": [] + }, + "miniprogram": { + "list": [] + } + }, + "editorSetting": { + "tabIndent": "insertSpaces", + "tabSize": 4 + }, + "appid": "wx583d78cc00f29dc1", + "packOptions": { + "ignore": [], + "include": [] + }, + "libVersion": "3.10.2", + "simulatorPluginLibVersion": {} +} \ No newline at end of file diff --git a/project.private.config.json b/project.private.config.json new file mode 100644 index 0000000..d13a538 --- /dev/null +++ b/project.private.config.json @@ -0,0 +1,25 @@ +{ + "setting": { + "preloadBackgroundData": false, + "compileHotReLoad": true, + "urlCheck": false, + "coverView": true, + "lazyloadPlaceholderEnable": false, + "skylineRenderEnable": false, + "autoAudits": false, + "useApiHook": false, + "useApiHostProcess": false, + "showShadowRootInWxmlPanel": true, + "useStaticServer": true, + "useLanDebug": false, + "showES6CompileOption": false, + "checkInvalidKey": true, + "ignoreDevUnusedFiles": true, + "bigPackageSizeSupport": false, + "useIsolateContext": false + }, + "condition": {}, + "description": "项目私有配置文件。此文件中的内容将覆盖 project.config.json 中的相同字段。项目的改动优先同步到此文件中。详见文档:https://developers.weixin.qq.com/miniprogram/dev/devtools/projectconfig.html", + "libVersion": "3.10.2", + "projectname": "ndnd" +} \ No newline at end of file diff --git a/sitemap.json b/sitemap.json new file mode 100644 index 0000000..ca02add --- /dev/null +++ b/sitemap.json @@ -0,0 +1,7 @@ +{ + "desc": "关于本文件的更多信息,请参考文档 https://developers.weixin.qq.com/miniprogram/dev/framework/sitemap.html", + "rules": [{ + "action": "allow", + "page": "*" + }] +} \ No newline at end of file diff --git a/utils/oss.js b/utils/oss.js new file mode 100644 index 0000000..066380c --- /dev/null +++ b/utils/oss.js @@ -0,0 +1,102 @@ +// 阿里云直传工具 +import apiConfig from '../config/api_config.js'; +import request from './request.js'; + +function requestOssSignature(dir) { + // 使用 Fiber 后端的接口 + const dirParam = dir || 'camp'; + return request({ + url: `/oss/upload/signature?dir=${encodeURIComponent(dirParam)}`, + method: 'GET' + }).then(function(res) { + // Fiber 后端直接返回凭证数据(JSON格式),兼容可能的包裹格式 + // 如果返回 { success: true, data: {...} },则提取 data;否则直接使用 res + if (res && res.success === true && res.data) { + return res.data; + } + // 直接返回数据(Fiber 后端直接返回 PolicyToken 结构) + return res; + }).catch(function(err) { + console.error('获取OSS上传凭证失败:', err); + return null; + }); +} + +function normalizeSignature(raw) { + if (!raw) return null; + // Fiber 后端直接返回凭证数据,兼容旧格式 { success, data } 或直接返回 + var data = raw.data || raw; + // 常见字段名兼容 + var host = data.host || data.endpoint || ''; + var dir = data.dir || data.prefix || ''; + var policy = data.policy; + var signature = data.signature; + + // v4 字段(表单直传)- Fiber 后端使用这些字段名 + var sigVer = data.x_oss_signature_version || data['x-oss-signature-version'] || data.signature_version || data.SignatureVersion; + var credential = data.x_oss_credential || data['x-oss-credential'] || data.credential || data.Credential; + var date = data.x_oss_date || data['x-oss-date'] || data.date || data.Date; + var securityToken = data.security_token || data['x-oss-security-token'] || data.SecurityToken || data.securityToken; + + // v2 兼容字段(旧接口可能使用) + var accessId = data.accessid || data.accessKeyId || data.OSSAccessKeyId || data.accessId; + + if (!host || !policy || !signature) return null; + + // Fiber 后端使用 v4 签名,返回 v4 所需字段 + if (sigVer) { + return { + host: host, + dir: dir, + policy: policy, + signature: signature, + signatureVersion: sigVer, + credential: credential, + date: date, + securityToken: securityToken + }; + } + + // v2 兼容(旧接口) + if (!accessId) return null; + return { host: host, dir: dir, accessId: accessId, policy: policy, signature: signature }; +} + +function buildOssKey(options) { + var now = new Date(); + function pad(n){ return n < 10 ? ('0'+n) : ''+n; } + var y = now.getFullYear(); + var m = pad(now.getMonth()+1); + var d = pad(now.getDate()); + var h = pad(now.getHours()); + var mm = pad(now.getMinutes()); + var s = pad(now.getSeconds()); + var ts = now.getTime(); + + var userId = String(options.userId || 'anonymous'); + var taskId = String(options.taskId || 'unknown'); + var baseDir = options.baseDir || 'camp'; + var subDir = options.subDir || 'subjective'; + var ext = options.ext || 'jpg'; + + return [ + baseDir, + 'user_'+userId, + subDir, + taskId, + ''+y+m+d, + ts+'_'+Math.floor(Math.random()*100000)+'.'+ext + ].join('/'); +} + +async function getOssConfig(dir) { + var raw = await requestOssSignature(dir || 'camp'); + return normalizeSignature(raw); +} + +module.exports = { + getOssConfig, + buildOssKey +}; + + diff --git a/utils/request.js b/utils/request.js new file mode 100644 index 0000000..497bd7c --- /dev/null +++ b/utils/request.js @@ -0,0 +1,95 @@ +import apiConfig from '../config/api_config.js'; + + const request = (options) => { + return new Promise((resolve, reject) => { + const app = getApp(); + // 使用统一的域名配置 + const baseURL = apiConfig.fiberApiBaseURL; + + // 获取token + const token = wx.getStorageSync('token'); + + // 构建请求头 + const header = { + 'Content-Type': 'application/json', + ...options.header + }; + + // 如果有token,添加到header + if (token) { + header.Authorization = `Bearer ${token}`; + } + + wx.request({ + url: `${baseURL}${options.url}`, + method: options.method || 'GET', + data: options.data, + header: header, + success: (res) => { + // 首先检查是否是401错误 + if (res.statusCode === 401 || res.data.code === 401) { + // 清除登录信息 + wx.removeStorageSync('token'); + wx.removeStorageSync('userInfo'); + // 立即跳转到登录页 + wx.reLaunch({ + url: '/pages/login/index' + }); + reject(res.data); + return; + } + + // 处理其他状态码 + if (res.statusCode === 200) { + // 支持两种响应格式: + // 1. { code: 200, data: {...} } - 旧格式 + // 2. { success: true, ... } - 新格式 + // 3. 直接返回数据对象(如 OSS 凭证接口) + + // 检查是否是直接返回数据的接口(如 OSS 凭证接口) + const isDirectDataResponse = options.url && ( + options.url.includes('/oss/upload/signature') + ); + + // 如果是直接返回数据的接口,直接 resolve + if (isDirectDataResponse) { + resolve(res.data); + return; + } + + if (res.data.code === 200 || res.data.success === true) { + resolve(res.data); + } else { + // 检查是否是获取进度接口,如果是则不显示错误提示(没有进度是正常情况) + const isProgressInfo = options.url && options.url.includes('/camp/progress/info'); + if (!isProgressInfo) { + // 其他业务错误才显示提示 + wx.showToast({ + title: res.data.message || '请求失败', + icon: 'none' + }); + } + // 无论是否显示提示,都 resolve,让调用方自己处理 + resolve(res.data); + } + } else { + // HTTP 状态码错误 + wx.showToast({ + title: '服务器错误', + icon: 'none' + }); + reject(res); + } + }, + fail: (err) => { + wx.showToast({ + title: '网络错误', + icon: 'none' + }); + reject(err); + } + }); + }); +}; + +export default request; \ No newline at end of file diff --git a/utils/util.js b/utils/util.js new file mode 100644 index 0000000..0984e55 --- /dev/null +++ b/utils/util.js @@ -0,0 +1,28 @@ +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, + formatDate +} diff --git a/wxParse/emojis/00.gif b/wxParse/emojis/00.gif new file mode 100644 index 0000000000000000000000000000000000000000..5be27cb0ecf9a21240e151962f59f94a2ce361ad GIT binary patch literal 1810 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 Shl-B7SjC>-k*5?OVgCTyq&`gm literal 0 HcmV?d00001 diff --git a/wxParse/emojis/02.gif b/wxParse/emojis/02.gif new file mode 100644 index 0000000000000000000000000000000000000000..40cfda436f3087c561bbf0dfe60d2591f8f11e71 GIT binary patch literal 1804 zcmZvbcTm%L8pgkn0}}yB0t+GFLJ$#!aUtL$AP8Zpp$eW@DdK?z6~$3cT?oYxFQ)`GXd)(nQ%QF9i_n*Lx_l=G!?DD ze_+|cu>-MY04-H62qwU#6L5BPu(t!sI$@(O{HP1jYB=o**O_ac0FGG0wFq>=z0C~3 zl{xrY^?QLb>@|Z@4t%2qhpiS}0qiiIqJhbb?NE56F_H|I1Es!zdwmzI*J@_dA(xCw z#SnH(KH9ogw-e5K$wuwqsO`{wB?-?AqI_h~ZrL3`Bopbd5ViaaCAa3EX^44y##6MX zv+-~_2u}FJVOL>o4D2vjDmuDRYP9ssa^V@dzpEAc0~iGQyW60wX>xpIdAL!!u`&HV zQ#?O5I?y}P-?Qogp!mjI01#Hw%P*19c=xGihQhjlwHouq8q3wOlJTLws$10WE6aj< zHiZ4$M`1`&0xFrG`}Xx+^xkh{ou6*1wBEqMJ_~7&E!uBY{1?^bB4Sa*&M#$$y3@?3 zi}#8foYorXYgM~v`AId2egmmLEG;gy{!Rb=ZFP~a{Km>RsURO&>O-bpm0mS2IEmvw zw9B#q8?8T0*a0#BxTHC7u;jvc^`&>$)!SpXetZ(qmFh1V$msr9Ep85*n;a2vC{3{% zEiAIM#dI*8!he-E+g4n^`S{|Ik;7o7zjeA$7d|@Lco8QPxU83}jSYSlyiFFw=m;L1 zL|dJP@&Y$1sYtmE+C-Cf-bA{YuWRI8^p*0! z^DFS}52L|gfcu;mxrKKX*Lod0kxGz?S0KU}tGw582m5<%3Y2D}rAkb5P#*%|AE7`c zFDHLLM+YA#>RwZf8~}i_{wD=>0D;Noy*UyR09XhhPRF%`(-4PM+oMi#Kb%j$ZPK=a zcNf_EV95;7Aa`$viJwSvG`*QuLLxqKO>AJ?RXuUXNY8`AI7Yst!oBTlX5c|qQz`UJ ziR#4c_f8-q*qnSXl|1*jT25mj=P7oG{WW8GvVlpURhH+ zI}nM4a9>(s&N~qng5u?V_8>mE%%R1e*2G+Rsb$15dSAU+n@3M1*wb=8UuBT0J1b|lGLPigKH|oOJ6oV38f?{e3LrtqzFI3UBI>k|KcWA7$HjWVEB6rH3 z3UJmIj1H?eB|Z$N3OwK%<>ldVV1(oAp{IfS2iGuy&rnpl>d!s>IEtu_|Bp%xPyj@L z-&9!$V1zks*RjWnt+Ji;(`RCn6#Hau9vGGP53WV|p!6NvX#3g91~PMbM*9Or2U@ZP zYsJ};)#8)$S1uSm7)Cwog7Y_!@ z5aC>iBpV-HLZ-)Gix0E^Z+rqEY~p7Ec$SmKJB~4RlC5n`;r$YKu1AJqzWwGCr|VFG zyzpHPd8kQzt@X)#vMEj#hO)B=iw=qBVTi@~r3s!T2`=pB+{{(Rv!H+I{1V$!iM8Xd zexkg8PMWc4I+C*CO;6foXh4l%a1&qHFL$=bt*AdLuqXTC z=RH=d9pi*58q&}#RsA!OBPaL2yu?l3tp8UxO8?(7-W`SS`4ZR@O}74pw5uz={Y5~z zD4FjVcI2NHW%stzD~krp18xQFEZd`N#Ttkb*)#e~4zXOL41be$1mY@a$Vnrn#;Lcr JtTFPy=3jH@t1|!q literal 0 HcmV?d00001 diff --git a/wxParse/emojis/03.gif b/wxParse/emojis/03.gif new file mode 100644 index 0000000000000000000000000000000000000000..6d6f7629968d979878a2defb2d66ece81bdc2af2 GIT binary patch literal 1852 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 DKt8j- literal 0 HcmV?d00001 diff --git a/wxParse/emojis/05.gif b/wxParse/emojis/05.gif new file mode 100644 index 0000000000000000000000000000000000000000..ab0b81ba4dd535bbfe38ddd6bc5b35ed85d22a0f GIT binary patch literal 1866 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 R>#ZWQrxckyZhN#X{wJwfMcn`Z literal 0 HcmV?d00001 diff --git a/wxParse/emojis/100.gif b/wxParse/emojis/100.gif new file mode 100644 index 0000000000000000000000000000000000000000..92ad35d2bf72018f7b5bec0b607625ccd29f42bd GIT binary patch literal 1780 zcmZwHdsLEV9Ki7x@Ri%Ef+C?=+)TlH%2JOmLGhM`nyy@Bd9PLLxN6Hv?bSM5|*tMqKmb=B#dWi@kY95vI!5>wMuCL?bhJwAUu|9(He=lO+4hWYuYPyhm?-PwZ?cV+Riot%>eBnKWr{ zZ@h?nmyvOfOfvZRv^;JxLeN!L_OldZf&`XK{^eq0VQu^YWvoWL9iK32 z6Ulgd79QVQh%Tc*$4ie+7z}NB0S{j36h%d6E6$zIjbFbd8NxtMG7vQ>Zn`RuU$c1q zl@8C^yZdyyuKw|-Ee%G4p}FaiPOsmcQ|jnI6&?~d|K0icg}$x3`{s>my~!C6%54Qt{{ zk;kQumybFJZ`a&>Kk=V&>d=jNL1;pJ2ro9&+rtZmFfq}`%&<5>1h|>*rXf)P0Ikar z!D2~Xet}dbFH|UtiltGB5SO#TRuvDO^n^IvPm36y0K^n9nE*3N=?*f57Xcv?icvav zGAY8fLJG6OUm@^Zg{)smG#3aqDwa55%`=Ez=2$12t%ZS35H^s|9j$jLkm8j(gqd1?R`b9U&P*SbPhKN#DNKv;F-h%RO)B680#`5Ib?)Zq$)QEzS?0>3!5k}r+Zgk)kehSk!?JYFX0 zfL6*UT!5FG(Gl2nw8i?{7xt@4j^uqLC|jK1(gK3YX@bUS0#o&@!83Qcsd>%-+(eOf zaRhS)f-X@0I6F?AoQuL*G^dxeY|okLPvdH!6q;Zdg_MPcZL5>Sc~|j|vbGhm<(fN1 zCCmhjR|zsSTQPj za933h!G%Y%Fq$jnRKi{$VdK91XvzwUs07)bb0s)NSWzs!mX9MXquYaa!QDAip%iO= zkAfZyn=kX$IBU?Ma!Z`IrVbV52nX5@(=gbm#A`d+?J-mJr1|gN__01OQ(mBuP^rn{ z83S>0N#14z6^@6_PD#L2#O8b<%bQ_gt0(A- zi+xi{Z@I;-kQbM^NGblod4LT&cAuozE*(>XTF-ZU&P|OVT=2=q*adu3r?~ufImthO zRi|KB5f4t%iH?`lXkJ8Jd&AAkFS#F-zy(`jRw-}qw}%S~>@)LCO0zG;q$Kh7XCHJH z#Y2^IPLcrDJSh?TXSUdx>J86YHO9d92&&lL*&d#+#mWZ{eefEZ@}htW(SUEZFZ7cP zxLd2l+Ti|8OUMbcz-JFcN2rovB*uv}c(;522Jsj|ETvCfOI~i69LVatk2J$tJgJp^ zcR#YwgKabnq~*e=PX}cr*Rxq-s+ncZI3ibK`6y_0ha?Vp-Sn4MmtCNxc4KUj(G}cB z#Lh2NbiQRGu_PTOqw`peO%z7O?smFQr}g1jN4=WnBM;0TFW{?w|FBGWx2n1xs+db~ HW3bjH9`VF z0A@izbRrT&p+2kC-1qYbfO;Z%Yqy$YNa;4Avz_^)qoZIQq%_e3 zi_&+rVBAmH{yPlbkss#nvejpsPje_alSBfE#IcqFkV3f*0IRH4(XjePWGYCeptSW! zNF~+xJ;vam-(vt6FS2?rwPhI5Dnr?2 zLY6|I@ZvjHRaCsor6eRJ73AkH%&J>yh7Hx_^CHnu+U}W&S7RVJn!ZP!khsv(AAe5q zrZ+8?N{vdqT3gfDEc1H)a%!~U+M8+hWR%e)2o4O7bc$%5Q4XQUB3k9!o^1fsUDg3B zSDs0d4>cFWQ1LAD6(L6=6fwuU=#eGf11 z5C)@Dy3UMl+S>MLxV3Nwj}HtHjlBD$qEOP8;qLQ*g0v&0rKKKxeo1jDSnlv;>gKqs z8#rwD?q&arnlrA;^==vA_t^lC0gErUm>opI^z`)j#6(klReM{9qn*R+)*I?(8rZ|C zy}0-7SOt5d+rmuA_1xPpp7yrhJ_R=Dl>tCSMp)0ipPs2A;{f2q(SSz?t)|TVB9UnJ zGSQM`SpCb6k1zAU8qC~C^2Edh_+r(R3>Y758|Z7zw#Ck60!kdNSRcD>i*Hw13L1lJ zQk@`Ta8r4V;{fnx;I1=AF!QbgysXi5)j#oU_{V!?%B#xRmX^LSO-DOk+V_I?Q2gYl zPfh8;(?Vg^aaYjH+{MXd=G4!J4g{)-iokD&2I_e5e7w1APu@x^YmLPr259pzI2-^0 z*5Z9}NeBRd00B^&A}CZ=#~}2V?`|y2s6B($4q2O0=;w%cJq-);mJ`=FBVwD96=zc~ z!r_tfc`dDr*S>Goy-W1n7pG(9K5CbSL1~pkS0C(kKs54FtxaoEJvkLB*w%G4BsSjEUV13(s< zuB0OX^A$UlrlU$KAnsG&j})TgXqwz5q&l`zP(`u7`UbZ%jxAGe_`xe19h;kMyqsWY zY&A@Wa~1D@zbVi4Iv_Ma?L+M?im6WEIO>{F=BPuuOdvk8icgZew+l8Q;jpiS+9qEK zApjgO0I-XMN52xzO-R`igg$cJxkIj3^g%zSd+)nC9M#+7h`=e3UX3!m)aNM7=fo~C zhWk3fvpFh#wY#ri{x&rJ=<3Qpl3j`=^$Gpq5hc?T-H-I|1Y#G2%~V(p>}>SBCIsIt z#%D`tVRvr!-1e`P8R@L1etU<;UquN!5$o+GZCH*$=p|2W^%rNmA2!5Ivd!q#1Y3b0 z(Iv+D91^`ANugy^$b4T)5eCYWxQZ*?lP+&l3DFRHmv&DKU7DbeL7`|691Umr#duw@ zf7MRuF-_LGtTCRBB4(G8kbxe=I2c=mhemvekzmYsp%03o^*+(S{InQ2mkoc;GA^h5 z*ptDH-#$B2ZNbfKX@#k+V3Yi`u*xO&;E)ORo@yg3=jDNc9}k?*X--+ar|%q5LjWUzfoaRJ_zQP`Xym*r#6E8JmV{Lt;2-?Udn1-idjxslx z2G@8(&tK&~M7)&)Wmbg4k{%$9FB?}Xqd&gDmGl#FEVGIhNonF@dY3s?{x2mvHO+l$A?SsBs5>;vCR#7@7zA>;qD3idVn0=SEh*V4-C!YI;0r`b>BD^usnSD`^mq_S&q%4jH~rJ5BvJ32mS7BmwXg!v4+UA&eI84`%eJnAN&9S literal 0 HcmV?d00001 diff --git a/wxParse/emojis/102.gif b/wxParse/emojis/102.gif new file mode 100644 index 0000000000000000000000000000000000000000..748ded1ac4351e1ee26715098281d70099355c20 GIT binary patch literal 1446 zcmV;X1zGw>Nk%w1VHf}y0Qdg@784Y{mRB1ZAO9H{F)lQU7Zer}8zdDL2nPub3=<V;{P+IG!Mo^*2l;e# zc!Gp_dwOkibpOc#(<399B_(%xdqGA=8xO7mPKijCsw>b-D5A{ZS> zMpE_g=?@VU|KBsxbRqEn|AQbG(~wS@LKFJ`|5{mUz{SVI!pGs6T=Dn*mYbdC@&BW# ztNbD&ZY3o;HAU5B0BCM>b$x-`nfW}~w076EcHqH|=EaGrr?36_$+nYD%b{ZC)xpc9X3A|E-@=ERo}T}^I7LWF z#-Cm0%&&135bD^O?Ax2pt8Zv4E4v;Zmlzevoo$~S79tfGm>3pBMM(DW=*AlwrWh8Z z8yo-s|NsC0A^!_bMO0HmK~P09E-(WD0000X`2-0l0RI3i000007yuXm00{p8{|OvO zu%N+%2oow?$dKW(VxAHz+u_5200M0ap6a6s;T}wdM6t7W?UJ-|`o1~hL~WEVTLo1} zfklWwEGKo=xH3d5-X>7BW_dG6g~WpgU>=Y#kRVJoc#)zhoRLTpuTZieJxGuM0mEI+ zkX1;Qs=@~iV;p#0SScT=3I|?kdy;0$87OoX-UE>99GN`El!Pb&!bOoQ3L8wZbj;nO z0tM*tn3#$Y2SiVi$U?$qGWrAi7oTD;KEfCLt3;6DKY03rDV1t>3Lg45qtk<{ zSQ8{b&`eoIJSP>^n4ovB%rY|gol?CLAcPcU}vEa3KAkf zE*L+40(c7(7EXxZ#^4tq5v(YT!A4FL9e9%5sllO3l@xGj@j^oc7HHss{{#d8JFMlS A?*IS* literal 0 HcmV?d00001 diff --git a/wxParse/emojis/103.gif b/wxParse/emojis/103.gif new file mode 100644 index 0000000000000000000000000000000000000000..be9eaa05445ef7dbb0c709fbca695bbf06c47ec3 GIT binary patch literal 2166 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 literal 0 HcmV?d00001 diff --git a/wxParse/emojis/105.gif b/wxParse/emojis/105.gif new file mode 100644 index 0000000000000000000000000000000000000000..2f353cadc85e447155e636b50ab392a99b36f664 GIT binary patch literal 1277 zcmc(e`%hB`6vrbhS8{tfMJMok#=|m6!5{*R&2Whm)qWZzoY&W`<|2UIX`~$$vHV% zb!ysY5kv$*Qv`e>77GO7v$w;yvfFr00WOR4W`S4noQm_Rz-hqckz_3vl6YDIkBp}` z^UP+BPKGy)XVSQZEnw2w`K`QX8@zJPBgaApyO05IHatp}$p)*2H;0{HbS=kd!Q}GZ zJTN+*G4LJ(+_AhX7XQX`&UkK4!p&~NoD{P%uS15p6woQGI~DX+xaEvPj#&lc%)-11 zb2*sJ^*FSkb*wuN^9Ia_@J7VhMR3KluM^-%gd-WQE%a3Cf;}CMOt_THj1n$2oEo@v ztW%HKe9Rhow-M9pF(u?Cgs^YqY#Z?^#ycJZyTmgsfjtc~Tj$4Bc$1461Dr^st2BpAfz;4E^gEYcvMM z7?imCHeome!)iRu!HCw;rzcx=%#&T**a3JZK!$R?D_L?S+w&eC3So`MKsu;wP)ZCa zU$=>Ew_;#TL7yDfEc7esk>j-EG1`{mj(~3u;@g59t>L&Q9%%d!q!isU^k(v2H*N>< z_Y~;Po-i+)ZjquZ16>MqD$%8UX=xy9rR~+iTfbL!-)?OAaqlmmMAVw3WUXoNF-6m~ z)9JL?Y$Qqgj_-d}6oU1t!tL3LeATAJB!9ofFi}iEU^hV#@xEZbHz5QdnuFGATFf0) zg7DZC5pj>jhF|4>f2>I=J|Caha!FA&Wo4@^s{}RjT^Ur41*~-rb?BDL8fg z^w5$r%SDO(+~x2rgUX!hAChpsbp?4mx1yn`#!zL_rNQ z>c!omYlk1z-z-@KSy1@bF;QGZk46v{jh{Qcj`dR0p_9u?i=Erw4LkIN=bB$%ZPj0{ zURhCW*)BHqn6-6XJI|Lre8lS;ddLcEf1_dG(x*QS$;ul~ge81lB>tlE%B~C7AJpB@ z-wo{jx>|QT<;dRNkl3o^`fm>II~;oD%>A40^6~=**ONuYou++{ip6XCe@Lp_eTLL* zsr#s)GakQ7ft_rb{x3^#1_qV3B(O literal 0 HcmV?d00001 diff --git a/wxParse/emojis/106.gif b/wxParse/emojis/106.gif new file mode 100644 index 0000000000000000000000000000000000000000..51935349b48efeac0e0d50a2cc809817015d32b8 GIT binary patch literal 1041 zcmeH`&ubG=5XWCMtq)V>HED1w9`Zt4UCm|b!9Ep?k0ec3@W&P{E)rX|C-+qLVC){$ zWE&!^+LVA+7Sup)#s(x3(S=x>A|BRy$+2KB>&X;6Y`hpZ{u}z8VP=@`=`%2sQ;7*O z#{dR6BIx!6+~@+(D}S3ivMj^0m{P*?R1kPk6fDb>Wl2>PUDqm=vSn=wJSwWt&`_-` zC^GF@pjLzx9h!!_XDC5!6WBGdX}Adu)wNJrLy~}Wg%NqADV!>EjtO)HO9E3fcugUS zh%{9ys)TTu#f(lN#YhuKciU?7utmT&g&GUnJgN{Rv&fN2OBJ1((I&ulT>^?MY*A!V zrfZozi*;3%CCPCd+qO;9Gz>%2G(}NF7s&;4@hIgu4r9zPOz#%|^)Foj|MGeO5J98| z-TMgue}Ec1lB_=ekcENck$idX<5K_H{AzO0w{dUi^+;iGPfp|NB7%@%i;Na zVdTPCJ#?Ao)`zb>Nj5wq`v5r9xOpkLCy^a{Hm!hn=f2$^2&N`F1D*`5ve)l)7E5m$ d2Zp27yXjJPDbROiqyFjr+n@GUu-^+#{{e{R)%O4Z literal 0 HcmV?d00001 diff --git a/wxParse/emojis/107.gif b/wxParse/emojis/107.gif new file mode 100644 index 0000000000000000000000000000000000000000..70d38d3bb278969ef82a3c666c5e85192ad65948 GIT binary patch literal 1058 zcmeHGL2DCX5S=8ge2Gm+HA2v~Br&$#SR^YR8mfhEOWLLsLJp-Yf`&zjZVs&rQrUtr zE|S73wth+v-yue#1zCvNKtL8+k+fbG@v!uuu|y$)$R1a{#Kga$?+x>YIn8@8lhe`R zNYV>lFz2D!2DI1&Xt%%88fBUF`@I+ogoqU7r)i4gSe8u)0*|q*C`C=H>KfNR@QCJ%uI8tR=9_76~u#43;^SAS{cT3}q1& zi7Ybiasp`yP*@rZTr~m)13cw6I9e@|W}{|Apw=qJZ6y3$j4^q}lsJ<}G(|;dnu$bs zjx$ZO(P-3aHC@-W)}hs^s;Y{j5JE71_lb_)OT?)nNgc zhoQFh_D=w6!VAX|1tLE*2k*tTSX#iE0#g$#XLVhx)u?4Pm;U9FZzu+N^W>%Kh7h!n# zbZc{=T=u6kdIxy@l|2vUc~4bI2O^{68x`Mtm>XIuXmgv3^}(1YamkyU3LTCQkK|w& z2aZPXjUZ1Irf$ZQ8uZj*mg8cHPyG{buRj)YKXSiADPLdU{PUMrtL6RvgX2-DrPj+q zj^_pz;%~n6#XcXn(EUTdy$+v@9BYZG%Fv;)Lg&o-#JNZQ8<|n>^6FMo-uQW<^Ys1J z$2;iAHE;LwQh)HuS1#M#dn>eWX07n7I>|MYvrp!3555Sl9#7rF*G;fQH_?ckSA>bLY+-J9cdE-o0D5Ze6=}?b4-7=ggTiWy+MEo}QML zmg?&2;^N}$?ChwhsGy)AkP}D2Xb8|C1QdU=FfuThGw6WK2IUC`j{gk#95Nmo794Em z5Y~!WaiNu4j62ZAM1q;2K}g$ZTZN#rTaUPI*aC?_B{xTL28R@f1|?PoVU2(p3I`vx zun95*&0*Pau&HT=YQiD~#^9r@TnqtkSQ0m~bO|Z@%&4%u!otR&&9!gCiBgvEZk0W5 zx{QkxdRE3?uH)5OynttYyt)Ca!9&MzVZAfUVlN0E=-`#xH|vDggtl(s_(DB~1q|z4 zMfCkHwJ>^g4+o{~w8VZ@rIoUZ2$_?t8T6tRxBBsoUJJeYEN+aYF?8Pc^ZSR#r|0(@C@@$90Ddaf2mk;8 literal 0 HcmV?d00001 diff --git a/wxParse/emojis/11.gif b/wxParse/emojis/11.gif new file mode 100644 index 0000000000000000000000000000000000000000..b512dd5da196b15a6fa31115da13cb24730c14ef GIT binary patch literal 8033 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 JL>v}y{2v!$l}-Qv literal 0 HcmV?d00001 diff --git a/wxParse/emojis/110.gif b/wxParse/emojis/110.gif new file mode 100644 index 0000000000000000000000000000000000000000..e253abcff6a046ec78559c5403e2e617a268ecb7 GIT binary patch literal 1082 zcmZ?wbhEHblwgox_&%NCKL{`Y;eQ4O5CNuuOnyGLqf7Z$Pm(ydLG{9B?Mqwr7xw6! zS|xREy~_Hj3KuqMUEHj5WQA6YzsSk823NM5T-{-Mb%)uN?WU*Jn_Syzadn6Jy6O5i z_SnftaNOKue{-+H&ApDd_BkD1WqoU(^X&s}ODCAt^Z=2loF`KT_e zb6ni$x~4aLdPBIMvq7l0MXaZWy^VQoRq6Zp?{D3@b@1T9UAuP8ojZ5Jgb5WD6^V(7 zhK7bpN=iaPLQG6dpeP&#WQBm@PZmZ7hUpACAl;xm!NBpKL7!8`W5a@j%^bp7F()=G zJlxdCWZNRaF=>8B<3EKXCkzFY85l%Z9~D3EbLnVhd%2QXy-&t#vI1j<$ciPN&5ay_ zw>}^DoozHx%X3zxhTuHw3O_y`6^;p>X4!`(6mH>Yn5&=sYf6Zg!Q;7h`P&LCo74Oj zyC+>*v9fYpBWyBoJToj z+fsJlEpTLRw6lnFN#xoFT{lJZs$-grm4O zARvc9sSFTK34k*FU7?gEl`$kG^*j;;v{V|M&+Rz`v_102l_x%h}660hDdZ$3HL+B)=NYPLRdA({W0gLfX#{_$M?ZdF%ZGd*kd zb;aH_9y>GsacSaP^~~eFFIn&AfKmsW8-L}W$M@WCJu>(TrPn&E>Atx(k~ma#xkiEU zzTLISnyJ{x{MN&!iORaB*!I|?e9dg_(9Ws8R63eFadUq%wI12|Qr|JZ6#uaP?AB`g z^{uVl#q%@M@W&^mr!of*K4}?Q=zKa|i_fv%mCe!WtC7wdDRtv@x}~Ww7g_wSr|uo@ RS#9k1S66;+R#bq~e*hcZ8%O{E literal 0 HcmV?d00001 diff --git a/wxParse/emojis/112.gif b/wxParse/emojis/112.gif new file mode 100644 index 0000000000000000000000000000000000000000..c8ddce88a45b7fe4703a663ef2e6a7044c977601 GIT binary patch literal 1111 zcmeH`-%C?r9LC={*WQ%rnTl*8wNq+NMUJD3ExVZ0X{MB$7O{q;laNGd9SfnGnj?+v z!p#Fo?!q6On?leyhY}{Zh!K>dAYTmX5U8B1T6EE|F3z`k)gMt0JlD_XdEn{jY_~fG zOvr>3Kaypc5W@3(I2;y5F%Sr3H)w~$0SZba67aJYG6-Y@cPZFnfX9%=uxtl`NpPIi zY9)jNwN{p!;1vS|ku*yPtH=~ch-5^s*9$^K;(b}3W?5DeUFme1q-OC*yE zhon7u!y{!f>Q<8QT!v?11;e}t_8G-zQWQ*9c(TGt(epBEh0lz-y#>H190e?;3bSg+ zLwr`4w@c9g%-UfCL&!;@BZ`k!lLFzQ5b6XDtJ_J)A{e1KmleJ-5VC`aA<2M`k|aq{ zlx#K&Pz!({=l}XQ7NDW|Ud#iqX1P~Y4*>>8rq z&eeE6^i8nU+B(C`j<8me3YGQTsXKjtb9Yu(Tu~JpwzN(anWJsuQY?ba#omPj&+^kv zlVcn|9K3ANXtV{D!*BLSKdp~`EkAHR>dGrP`Mcm)_m!K@zpy%_MFwQd!H(x(_ns}f zQU-15*gIQK;ma_k8w)b4uC~UjXYNr4%!x_8zoCEcN3gwP+T7b)r30;$27cO56K39^bAfM%|N=FE%vj HM9qHy)!-g@ literal 0 HcmV?d00001 diff --git a/wxParse/emojis/113.gif b/wxParse/emojis/113.gif new file mode 100644 index 0000000000000000000000000000000000000000..272710453f6b8f6fc9b6c34192c52dfe5a538293 GIT binary patch literal 1015 zcmeHG%}W(g6u;&($4Ikh#E>s^3ei_mjXcP~5}kaegGoLJ>z{|M6L!&N6c!Nc*kr>ARidJMy8`_K{CrDEGEwY;$Ds^3wc| Mo!79ZK>|I008m#NO#lD@ literal 0 HcmV?d00001 diff --git a/wxParse/emojis/114.gif b/wxParse/emojis/114.gif new file mode 100644 index 0000000000000000000000000000000000000000..53918e2ae600a026da6e13bd2c26cb49c309f026 GIT binary patch literal 1003 zcmeHGO=}ZT6n(KGi4cgk#UMqK_z|ZRX;jc)l{jf*8dR{<8bTMEtaMyhW}^&9Y@ean zp@cAtF5aRp9;omjiw=k|P!YydVW?n(ZU(W1Yzk9X)zxw0-_Ud6+{@uE&OLCij^{3< z??y?K>`oDMLHq(CUHaSnky3+mQ=>k0D8~eaV(h96k^)&nNk_$i#-SRnVIrlXKz-3u z7^r~8T%B2x>Th;b4o$$Ypy`}wi0hCUCOCo=Q5|W90*7cLZXo6B0;&bqgT#>LC(L4ip>IfzgJ_Z9`aX4;34l1HBFILUEuvV6Jb&=B7ot z=>d#$E(BwYQrf-$KmOGO;=lI>2$>>7-2l2jL4qwJf&=;H^1HcU@8C$Z{9b+*Pt+nm zcVhDkeW!+B=GSLy`wz?azpvh0u7!>bTq~yISH?pJb3@gTI=Z$m94S7op3U|zCWr6* zy2s~c2Pdn!`OM1JYVV=b=fs;mwQw{!l39A)q~W8P@@Pul?72-(PJe06^gPgyq#Kuy ze=ge#=K12zdWt8W_nn#ky76MO)kyZ=T6y?1+lrjHUXMv@k3Q5tWg8jk)sL}y?9x)~ X+xFzxfy9j``I(PzO=U3OUr8Il3G`5#Y1gbvsMo+n>l-EvovdIJ=A7p zv~(`4t*L1jyz(J@its6ZT)bfd;stLZ!UPqt=r8CG=$!4G^KhPiznzSuNA{#-v4IUP zA*}iVf4BIpE`fmjfOSEJlJe5*8w1J_2SVU^)V<5irSyaW+`kU}l4n z4L@06V8I{@`dOf7f|dyyCJ;-y9j(tCb6@SF*?!~j;z>z>BA6R81j*V z^sOgpLrF3UNfAP-Sx2g;1b&T=|DKW2my{qX%gb)J+vRdOolb|tVYl0DHrw3X-0bY^%*@Qx)Rfg~ot&JUn3xzJAGcU6 zqobo{v)N=a8I8t~k&)ryVS~XiG&D3gI5;pc(BI#$*XwmUomQ*WXfy;tsMYG8o}TXR zZXCx|DwR^HR45dkot+&W9T2+eeAQWlHLe?31B(M3!&IXKjSef7ubpA$+=EQl=G>go$mswvyx)f?+=wkUy6R2 zTE|Jr_iV@{cWFf1SJZ zI9fP3syR5W2?(4M5I80vuvb7}tAM~-0fD6g0`Daxo=Zr~5fHd1A#qJY;+%v;4^WMS z#9j%Btr8O76&2qrDy{{pQB=IAsCZ3L@xP|#dri&fnws}CHLn5LhKA1#4gXtOUIQ{L zE$>-c{&#YE@8q-=DCp(&KPc#)m)HBCpld)fD(YHL(DSIM|HZ}stE=A^7e5CwdV2m( zneuN zv0=f%W)5Mkm=hZo9&YDI-|)fE;COetV;_&CV6tbsh^B=J&mm{eN%B%E4J@5W3k4)O zMHm(?Japugh>Dd`%EP1+{nDC#F$V-5rLoOrm5hjBWKM7AmRGXjNNhUNDJ-fZ(KGSt zG3G@Q3OXGd9yT#^i#hmMNGxU+RP`vCQX#;|6v{6y72uGy!JU`IHKRe`pkgbhh)~jp tRO`bWeY4f9bo?Zek9ACy5^;_ZTI|{*JK4Nj&Ue?AmzP)Yv#~H(0|4z%v4#Ku literal 0 HcmV?d00001 diff --git a/wxParse/emojis/117.gif b/wxParse/emojis/117.gif new file mode 100644 index 0000000000000000000000000000000000000000..14611b6ef950a82aaf12e5c183b7c4f0edc7c243 GIT binary patch literal 1041 zcmeHG-)qxg6#XozMy)z2N`$J5n`l(Tf`VZBg605AVFPax6ph8|Y`-wv$ znF6SJ$X9oI? zvl$9dppgR2Hb9F_0NUkmYmLZM8$PxTUQ<|A1hz&YNV^7uHOAKCrpmx9?HH_U^0p!P zSavMg!)oAYF4mep!YV)tFlAt5fhGY(05&8og;Yh-h8>PZnF?iVG={XJGYB%S5w~^L zGkMPveI(h2=pot1N?^Bc>J8UudZwe%P@*toyw>E|_>^{lLqZO(@TW_rcti zSgtJ1Bnsm0;h}Tm`E9ZD&w9gCD+IZfh)$k(tT literal 0 HcmV?d00001 diff --git a/wxParse/emojis/118.gif b/wxParse/emojis/118.gif new file mode 100644 index 0000000000000000000000000000000000000000..8c255004ceea385e7d193d36f9791885db5de933 GIT binary patch literal 1012 zcmZ?wbhEHblwgox`0mQ^9|RbH@IM0shyYVS=KJsei(95_J$CKh`~S(+J=If|w#->O zXX~-O*Pb7{_ddI2N^#Geo~2u-tlhiy+`V(pzh8U*zh}N#tHdgkms*D_@eQ0w#W z|C3v$WcSQzS-Q2lXUdeNYv-)py7kz(d+)zjFWuU*c5iZZOUs<4QN`8SEj`6OQ>v%T znX-24+GFRop1XGL`TOcQOOsoAvU{c!PXU^+wrB0ubMLC&xRL7o`}qai?a2q^w!VPs%%WzYfX0Obh=j*AT495Nmo794Em z5Y`gWa6IJHDqM6V{5OiPc9rvnaF8oqH*EI zfrTeIbu%(1d~9evJ>AxAONQek^$T()ITE50i`ctFyt_^AGMZ-bOKYwYd->py>+xmw zK_4^@9XQf1$z%2H#l+H9W)^t^mk+-#xbw?vMrC{u_};|PqR+&?rSN-e8<)Dl58EGy z+#X0dvIwnv=)}y*Ef6KPMX}`p_b!vFJqZny@*E}DJXa`edc?+|AXzs_B1maf?qWtp G25SJxwBaxS literal 0 HcmV?d00001 diff --git a/wxParse/emojis/119.gif b/wxParse/emojis/119.gif new file mode 100644 index 0000000000000000000000000000000000000000..65bb468b950af19bb195dbfdc7f13c07d1006ae1 GIT binary patch literal 1101 zcmeHG-%C?b96#C?n-;BY<`PSWE8P-9=s}5ME?u*h#fl1_%K1?2A>l>@mtwlx72z1B z7m>J7qptSQ0Shh^b-|_{mE?wdxb{#7LGaW=U5elm6sNoXjOg=)?=L>^<@15>@veAl z+vNZV04ohx3BV2pKq>t#cB?7~3Q(36UXUb&GlC2ijTc}z#c>i6WYm^{Ej=8M^fXj5 z_6A|7>KwFbYFnD;kPa~orZQohqg%X21WYrs3N=I4sbZL%q#$BZi=_lv!UR)GHyI~D zgPNSddL#r1lXQwGOB*a>Fo7_cSPEqV(qwFC)WSBOFy5vSOQwuR8q{>nWW-_;Wr$j; z$#_}O2!-}&GQ(oJWuFizV;x0BO)vQdas2;9_9WRhyW3_$KG_Mf{CZ`MEpJ>1eP$H&9*^no16| z##cPm09;x17M?r?&8Vn@VVH1&v^d{_XK#7819`P9v|Izrluo5sB~8ydEo!N z3Pdq?wma}~W`4<6*O^StfOUsIckuS66dO2J`E-ADsWrB+yf#=m@`?ds_V;oR@d5hHSZA5zbyI=cwL_O52v^M?Zm7j|Lb*6sB5IQeR3Uq z-w^%v*W7XErN`H|@40nh@kPs)Xhq&ppC}vc7#jT$?S0>Ws?%KvH-W^}u~+IyAPy$M z-ftZ%4KZ&bGJ7wy>HfNP!L!^v7W%U7Q1EE>`Nn*;qv1w$_}#NdbK-Aj<9gO{cc%v& F{sWN6MD+jw literal 0 HcmV?d00001 diff --git a/wxParse/emojis/12.gif b/wxParse/emojis/12.gif new file mode 100644 index 0000000000000000000000000000000000000000..547529cab6ec7ccc19719487e644b132b40f9d9c GIT binary patch literal 2247 zcmZ9Lc~sKr9>#ydF9icZL{rBF+_Ky=9V|x?H(Z)rI!&34W=__$XtnE zBme@_0kc((U?pApOdUuriXUtq7Yu`OI#@gn)@}mv;qI(&xM7fNhz5G?K0I^>ADpT+ zU^!P~#tV8JL8xGQtqk4+(k0NKKaocOq91^q51!+|T-ZBr74V8wpGW|MyF}fGz?e4} zb{^7M0VnCxIki>%* zM6eVm9dMP6_;z2?Dhx#fd1qd*Dj1;w(E%_U47#o5LoR@)yH<<=ZDwG|S=4_Aw3{tA z*>+zwd!McN=q{N2e&(STXf*|M;VZvuNZ;&SZMW%QsmWVRMIH3sZ1u$&6CiK{!!BUR zN7Q@vwS$VN)fIGDw*3PIstC(mT~VdUa;0uXoIa2w07+~<76R3p(~k_nr2mVP*uJjz zzV6pk&Dn>IA<$*Dwz?|(I5^n%c6wrLsJ{nvTY;%PVDfND2(<9pwL6`rrSZ)pD-HMXb zdA46Rs!6hz%cQ@b)g2z_U2L+Kir)>~CXbc}O>=`LhC7Ro;iiRyg4!!fZH{HJ7WJ20 zilZ%G=KM6p&*{IZxh8lh9WUXtU8*vIfAfJ?``u@257xvJB~9D=%T9jeo?U7>DB&OK zV4xP}=l5_b9c{#|pjmaNZd?d^Ayzp zCii@LLK@1|7Cf>P@oWTnCZbv!@wHPq>d<_BITs6yeIao{29VyHKH~^zk*a=#XUdpLUL1}ES zW~*K+@T$IGSI+hkQ1|gN9FB{R@=Le*hK`5O{ZyVKPtBJ)LB=qAREa`PbbLCX1nCmv z0ys)MC4yQ}`1`m{+EZkh7HZnKUOCyqH=ex`P2cb4UGqrk0Mu-lYl?;!rc|TSbL?=t z)O$3i8EKC4(F(hKMDd`e_Wj1Y_Tv3&j;ik)(PJf97_DSQyRNr?6!c1`3Qu(K}5n@2WxJTw5Be;psTSkjGPvVH{F{9Xlw0;>V~cC&Qk04(kx- z@p(1+V7pH0R))Gah4-6_zej8{^{PKD6-kEby?rg7H#Qq+X9V(gbd1pO=CdfWw*!MQ zqJqXRcfB_FFi1_=ngciVQEwKWQ`Pp$I&p*>&TR7)P{#rm9elJsc@|&zQ>!zv(SiV zyK$jxSBf9JG>207vjgeyY_7RHi+9sXy&_YCA9fFGdFm6MqE+K8uGW|k_J~2!pB^?r2vUQM8OwEE|B2+ zEPaJ&(R)eR>!Q&k@JvRGSx9LB8Dgd(QCI>!oaTkoF(dQ`us_p1n5hLmUjk861}B{F z>OQNBb;mK$DD!Z4T1O*O_=lRub@nXP*n>z|juM95AR%hx7LqrU?v=`>mmCUzGJ2Ur z!x*5;B!+GE8BW^&o9reCRsgRfUsfbbEIbpQ!9*#LIRPUXHk;u^b+XvEQ9lxI%@E=` z2+Ut7^#eyDukak@K@}_Csy*~&ogRhf`;Il#-nRciZPwkqgLD#cYeDasJLh(iQ8BY2 zZ7eTyeRZ*Y0i?@MkTE7btGG039HMI5Y$uyVO^YnspQ@Cfug5ZZAK?(Rm=?lXB`CxH zFY9{q=^L_&RTRyGaUB$yTyG8-6yn7Z5;IfV{^uUP(UDs6H|_+Mq@;{>zES?| ztPp~-T_in}wNw3Ew+UDDF^8%CsU;!MhW0YaOFp$5C1g+%PW;HykXX0W#Yx3n#)zpw z&EEypMRm3@sVa$!X8vNfV7w7$(0=C&Be|iDvBBo`*O1n;i~TyJ&FgGVEn96pXe@pC ziHr2Puym3NjsKW}_r~lW36)wjbZJ^(RY=h{jwIjo+rK97WuIe3T({RploHIDMwi!z uq?0^>q-i1!UeQ3YIDcF^4%d(H%LZKu{)V)bX6ANJ@{hP;`ltg5+Wj9mJt^G) literal 0 HcmV?d00001 diff --git a/wxParse/emojis/120.gif b/wxParse/emojis/120.gif new file mode 100644 index 0000000000000000000000000000000000000000..5ce77c05f0a63219bbc4623ae223c5b8cd6942c6 GIT binary patch literal 1008 zcmZ?wbhEHblwgox_%6lp9|RbH@IM0shyYVS=J)U4-@kwV{Q2{H_wHT0cJ17`bH|Py z+q-w~)~#FDu3fuy>C!oK=1iF~rKhK-rKP31y1KZyI6FHVWY#Dc4S}H(0*XIb7#SF( z7<52R2IUC`jric2;GNIT{NWxps5tn=l;MsLa5k;HZ`{ z;h+K=o2Wp=9|<8xCRQ=I1dR$KM%I4aShW=w4jlApQfD;jIAE00v{*nvXrTT#wK%Ho4MA;I`y4g@(*OH)fU zROT%0uBZnftCad@eT>*FgOTI4RV;HDrf4vg@Q~Mh$>(;VpGM| z!P1Hv&eV$AAVo=21w-Mf7G?@i8HmgiMKBd$G8htIi8nO?$zdviF76-_uO$T{0v0(+ zDK5H1NZ0jJUjOm0BoN#z^8k#%q0&L6p8&1^AGtt$`tjSVT+P8i|M$TM*L~i*!p7nH z`IKb#f6ewLYHH()7hbi;K1@xWed14b%%!*Q_02@XFB;$94xAXb?yO{E*(SbgbS%4? zt_rjbEJgP;lxLfE@kcY!mARWw+lH5xfBss&&s9e+X4VEfs-86u*Rgef)?2wd(0Hz{ zT-G19K03cP<~h05>yHnzOa6CXs`qWQa$!%ZH_$%5m`P3h(iOFD%-H(3bnpIqeFK+$ zeb;t|j*b6Vm~0rzwA7zooB!0gaI3CowE6dz(5Z^o-7hOQC)FFVmj36_NY84z`arFB aVrF<-{7mSxZ{mu0WY*0uH-%oG&y8EHY_;U%pt60 z@+1G@p?U#Utpba}2hD6kDt}hL*s!pP1DNuEs3$f$v1+hR5|IpYYHs5b445JC>EMYT z1I@H44M9#!z1*33e>x{FXX>$(OiP)t@gVbbmDy^lKh`q__wXy&l)e;JKg8;@JME9; z)NGgLa8;WfCqf%8gfOk?B!X=!Oda^}pLX=!I>&isGo%;U$8&zu1=fdW7opiv-4jDpb+phE~K{$ycf zU@&CR0oeu06AT=G7?L?;JT@#i*vuiUrSfC_!$Zxy|9b-rlpZ-Z{ui2Y<3yoLQ$4@& zKjV!Fjhz#vwe|jNZ*b}8&=K$Xvmzj=gGH{;%w^$3H79}p1_=?0Q(kZia87FSInl^^ zQB+KW=dZfb!G@(A|JVMw&UDzG!EtX~&%uM*fua%t0!L>F9J{b6-*C#0=}8N@`6cH3 zOE$dH%pu6_Uy|`+kyERn=RpSYUC7{l9(b8==ga* z8?Ro4S!2RyF8&;Dw$zX12RSFnH?`fEaPz^XdIhs-5{XF+ZbBOstr9LYx^(fY7^s4q>gB69ozFd~yaAFD^__XycJE4q9{L zp>rF*oK3|Ufkg{BdSr|$R(vQ-a^{tf?DL5%N@Sm*Vfp8G!$bLwHW8P$FB2S<+Gg=6 zb}=X}TFJpCJvoVmae-EYfP~hhiVDNU?X!d=f*3w*&}k8nGV}3}SmeyXt+*y^uR&;H z6OW8W!UX9?=AdmtHVhdb7G!nIkMcB$c+;@)nt-y1#f&=%pE}xLdGaGq~K@=4-w2{e328CI)K&RF;t` literal 0 HcmV?d00001 diff --git a/wxParse/emojis/125.gif b/wxParse/emojis/125.gif new file mode 100644 index 0000000000000000000000000000000000000000..e2c3c11c92c14fa76e5ae842af7e4b51a4cdec70 GIT binary patch literal 1013 zcmZ?wbhEHblwgox_-?@P9|RbH@IM0shyYVS=JG{Ljg8aN(q=Lk&s0`XV=zu*jNXzq z^9*Cd7sc8m3^V_OC1=i@nRe#P%>Vz-oJnIiGc)b~nVCMGZma4-&!idu**xv{p*3fW z8TRhlDayxlvNB~R1A{RG!x^Bd#>W3aTGP(VoC(wl1YjOe*cjxRQ7{?;^a=sRpDc_F z3mEFS`IQE>2Bq8^hi0txX4jJ!e+yd4~Z>D8zrq6 zUR+2#+R7(scPL>)QfsR?kHDUSjSnApbBn3{S-fE(>zRHYyFbnsoEo`Bb<}E7KAu0+ zC8(np6Vd3T=_0BXmG!`Y=|~5+mQIw!$AwQ>g;net{z@dZv~3b+@Y%Ym$c0-})XyM5 zGoa-@566tI2d~Xp8xAw5@%+;`)XL4E*Y@kF_rrKj!T(~b|4cvN*euSg^r7{mzY{a3 ckV40^-HI*U?A-rOKC`ag^7b}6GZTX~02q&@4FCWD literal 0 HcmV?d00001 diff --git a/wxParse/emojis/126.gif b/wxParse/emojis/126.gif new file mode 100644 index 0000000000000000000000000000000000000000..24105c988898cc03bf21c4ef26df1f7fb6f34824 GIT binary patch literal 1030 zcmZ?wbhEHblwgox_-@GX9|RbH@IM0shyYVS=4(BZ{|v@IHlAO;XlYv7%rj^HE32rT z`TyV8m|^D3wEt%q&dg-^x1C{T8pHpY3}@09(u^5=Jl$5+h5k=t@KWQ=4RrmVX1sUT zPEkIdUmaCv7#LA%Ky& zr9)3hX@bT=&DLd%T7Q%q6%^T7nB81*v=o&(g*ieLdS)y-(!k=aTqV(Pz{RauQi+Md zAn8cM?sE4fC6SvKxG-pMT2=9}>0tLxhNwNNKf)V37!?J)@BKWV@U*@-P{F~V^4-Z( z?CxdL{wS<;5|VT~e>6erAuE@tRnN7AhfdkeqB<}31t=bBVincPSy8)t(Z|P(j11NQ D*;J>x literal 0 HcmV?d00001 diff --git a/wxParse/emojis/127.gif b/wxParse/emojis/127.gif new file mode 100644 index 0000000000000000000000000000000000000000..0cead364a05f031b024181e7c778f8b206763312 GIT binary patch literal 956 zcmZ?wbhEHblwgox_^!n89|RbH@IM0shyYVS=1d0TGzQ}{X*16N@yxU{XJ-EYf9C(0 zwEsIpugnjfnPz-uX4?NVGriP!|IbYOvw2!>pzH5LYxeHic?PK07^pEV&DeNmTH2YJ zAONys6pV(z;0po8pDc_F3`z_-Ag6)y1OvxR23HOlj|~eBHggDT$*frL(5aQfOrc`N z1!g9G5y7Y zXcctgg91|vhnSL%z^et0%xt`3IvlemHZcqEnlvmhNOU^RAHLCShrz>?V_Yhc>q=&Z m=|*qWaZdR%!9n$oK#^vhhrnf(dwWFwbFq2uC^*=_U=0BHNPF`D literal 0 HcmV?d00001 diff --git a/wxParse/emojis/128.gif b/wxParse/emojis/128.gif new file mode 100644 index 0000000000000000000000000000000000000000..3185861818bab566315b08e4484ebe313322d779 GIT binary patch literal 1022 zcmZ?wbhEHblwgox_-?`Q9|RbH@IM0shyYVS=JG{L(~Q%M8PaB^onc@AqL~Z~X$%a; zuI^Wijc2B%otZiFe_GniGiUxY7z5E6<1`>S(>U!+;kw_`w%ua@>H=z?`QI35z|1o< z&-`a>_@Y>Qgkk1?u#x|bff~>JPy7Er?aZ09nLzpfGl4dpnfd?!86Qu#+(6g=XU;r+ z{P+w|2q=*TR0wj}C>RX^>V|;gPZmZ71`7rqkg=dV!N75wp^!tyW5a@j%^bp7F()=W zbP_Ym*|R`#gB!23o{Uw+gNDOgeB5Ft1s#tWn*~+9mPiyPrZ}^kF(f!JHXQC0;x#fk zGokTt+XRQ`eP;@im{}Q&6FfQ=OipAIV{kbm@bTf{CTTe-GX}$l&8?Ci=_&;~4Val2 zWbJ%ds~2Y8~0`r&V*oVP;YD0ZwC$41r3PW^Mry6TcIO8hIEt=-x_rbD@=|!%X4W2FFd?-{0p0 HT4N0W2Y{>5 literal 0 HcmV?d00001 diff --git a/wxParse/emojis/129.gif b/wxParse/emojis/129.gif new file mode 100644 index 0000000000000000000000000000000000000000..ffd7c6ba331d56153f3366f181bd8ac78c845e98 GIT binary patch literal 972 zcmZ?wbhEHblwgox_%6lp9|RbH@IM0shyYVSCWG;RolVg}L*t?%3j>3SUB!h1O|6~W!VVua z4lZWpWbkY9;Yd_=n<5re<+8yjiFLACYE(snqLXivkhaT$hKngJQv}uisLXiKcwx4= zvP(fiV$-Eo?s;B!XNfd1xABX4gfJ|8eW^*3&q(05fb*@^e8F9^6^;*X?<(ehbajFl j^Syo5{J%sk$_pOu;$+W0;IQLkQpW^k?|FL+6d0@l-`aWZ literal 0 HcmV?d00001 diff --git a/wxParse/emojis/13.gif b/wxParse/emojis/13.gif new file mode 100644 index 0000000000000000000000000000000000000000..34753001ef80a38a08e8a75f23482f528313fd1b GIT binary patch literal 1736 zcmZ{jYgp3v0)YR-MNm`}RCJbMYG>ZXyfmGGC~8?#Ys0?8*@jT*?#g56@UTePd(20{{O z#Z`W}2Y^BFIt-{;@2m8|PKsvO9mo^Fo6|tk4Hju&=2Oi}zv2kEywhd(Dfa!sz|QJ; zHXWv!^4T3d4947~eP2jlgpN1lfi5eB(BXBZY2H!zbiSVWCp7Ph7t;fZIslCcJ0^yD zf$HbJg0rA=@5FE)SPKQ~$0ZXZg`qI88Vt1BnaR;t(&gO`AM!)@Xw|!5HDqZ{0yxG% znF`j9gXiY&8_cRAA@v6(5ZkIYmz&drz_4>msy*0FSZs{=&}rB8DB%tJn5qdcd%FR& z>Q_q=jq)|;I(D@L*HfLd@cb9)?BMRgAMFf+Li80Fu&;{301keo(r&4OFgHEk%`g?; zw3vB7lybe*&A8?H8EGW}{0BcfH8x*j12l~_v3S+y%B!`NRz_e;n&&Ha!~%;1RJmZ- zX=-$UlY6ou*`=C~``y@qP9^rxeT@472r7OyVO0YwVf zxw7=HeXBKA{aFSZLnmbAdQ%nt9XFhJ1TK%Gabtpix2BS1^;V$8u&wYydn#7`ZtKmn zNHF9iZ9XV%v6~#}2SO{rH3wolphyF=e#+L5z}DG~ZXeKVClydOL_SKkg+_7&%=l>< z^fV1vpzQ`4wRXx|{urwj*=l?2ly6s5Z<*uC~@ zX;?AyBqtK~O!sJvN>B4266^lj8fBMre8f2mQf*?a1D~l>_nb?r;Txr01 z5}r8)N96V!&3N9PF3Rj;@oISI0-2Y)Yeym6;~Y=3YjhKJS;!2MCQ6cL;9y}UNoM39 z$@lur%^5f82B{c#I)c)=4L)t%oa09QEwM9pz7F+S)|yOu8Igss{@+AXZIq?{P8~(HtPAx`6D%({k))w5yqYLlz}|G_KIJA z&kbD2Q1tI9%B2K(kk7jbD5dRXx#koK>`__`l*qK`3x)UWLoi`Mgx`sU>5l$~4rch# z)5C*&9aT=Ffq`@AJm26rI!qsa9m}8@ zV^oVGa!hksmZiC?Yv+MF^ts-EuXA}iq;CT<#f0(sXdO?ICKh8Bg3X|L9qDzepu%AP zO^W=#Nx|PI>l4da{yAtJ@||y%PC0+Uji17ei|K-l3yhffEPgsezdGf@lDu%}H#n)l zwWr%g^fSu7e(ham{jF;FO8jUv-2hgW?BCi`esv|y+-@gIgG zpU3GY@^ECzkNX2e;n|Yx&=M{)nVu6}W)zG|6lK6ZgM5iek?Xh$Sn*!h02A{n+dxA^ zw>3^i5$}D3?#9WX(!MU!b9Yd6XQY`DV>B#I(};r@PDy@(@U5$xeYZ1iP~CvyPkYw(=_<`$KeYvp9N1K_x-T& z?dR84XG=!DqaLN?TLxkiI)Q!ZW>`k)`BGCwO9o4AN3;``vgbN0(e6xnMy_qF7ugg1a6Ln4K`WNFu>9# zgmhwKo{xZU3}!)Nt_9uuy={yNUGg3Abcds&LKxiLcQJ3jFin2j?3|1mY%w%X&i3%0 b%wXQ%bA}&iOq(CqqD1myE4p=^k{ literal 0 HcmV?d00001 diff --git a/wxParse/emojis/130.gif b/wxParse/emojis/130.gif new file mode 100644 index 0000000000000000000000000000000000000000..d828e3da103099151b00c5e700302d8d9c69f6a7 GIT binary patch literal 980 zcmZ?wbhEHblwgox_%6@z9|RbH@IM0shyYU{CWG;RhBP2yoc2F$CXo5RaNTdl=q)qP z{AXsQAA^h@1*0J_ zh(kc}CkrD3gFJ%{$c>;p!N9SR!Jb3LW5a@j%^bp7F()=GJlw=7C*&gVk(sGcR6gy+ zf`!RV-F(6-4>l}(!p18ho24;R(bgC=GMei@e~5)T<0`WYlLN^S_McuW+QbYu9?fAIJ;4e50yD-}{sOym(}2-uKt z&~pyA?z=UWlO0dB^1A%%X>fSv-YF!@;Hq&&#e>~Yc-@v?fmvazVhod}aw)C|T_4x4 e)^cFM+UV`lp-vqJ+x23*Dn7rud)h#O!5RR?AYTyx literal 0 HcmV?d00001 diff --git a/wxParse/emojis/132.gif b/wxParse/emojis/132.gif new file mode 100644 index 0000000000000000000000000000000000000000..1b272a690b6740b94956037d021a9f0aa7136b64 GIT binary patch literal 936 zcmZ?wbhEHblwgox_%6=y9|RbH@IM0shyYVSrm}WOS{j3~F;L9-|NpfA*FFCq2>rh^ zGz};+)7Zz;%}b5<|I9Q|J|1I`K9IIiFd70wE(8>RvM@3*h%@MbTn@?;3>>Wt`W!MI z8x|aF<`CA3Ik92k;dbu-jwV0)n~rocYnx5rSg7p6Eh3{b!Qo+}YdeRNS;m6}2R+-w z6aq31EKqA^<5w`4^78>>Gpl|6tDF@HX$-TSq2ftn+(f` j_xE!N%K0cn1u;6V=hF@_=r&Bgy}jV^skzYx3Jlf&(}Y^Q literal 0 HcmV?d00001 diff --git a/wxParse/emojis/133.gif b/wxParse/emojis/133.gif new file mode 100644 index 0000000000000000000000000000000000000000..0d0e864264353800e362f1e7b160d9be9980a7b3 GIT binary patch literal 1012 zcmZ?wbhEHblwgox_^!SAHXQs{kf9Aik zids^TV45*d)_7)`@&7Y3eLUU%r!jb`@y;}6$PIKoW6U7R$MfHqA&r5-n1Lb97^n;c zjE#*!){KJD5Ex`3p!k!8k%2*(K?me6P@Z7mxX9qnA>*-O!NFz@VXc@G8xjxmO3OJ+ zc@gk{jZ@IX#FI38l=m9jD7vHZlyI$gk|qC&yxAv2r2Rmg$^lha$- zIVEabb|f|ia5301cyJ{&H?s)}ol4oTIsJTxoC=Sr#UiFQywg24xA!aQMV%C zt7AK#*crJqw-gVvua0MpyRhNvgVuT`*N}!CUmIJv_{zV@eq6XPK|n;U;RM5?MIB3R tr!$>+Ai&~scD8Fs-i*d34pt5kod%nQn=>y6YqYHJ*uCv-8zUowH30rSh)Dnd literal 0 HcmV?d00001 diff --git a/wxParse/emojis/134.gif b/wxParse/emojis/134.gif new file mode 100644 index 0000000000000000000000000000000000000000..cf48356e334edfac6890439290f2b5d8f109b594 GIT binary patch literal 968 zcmZ?wbhEHblwgox_%6lp9|RbH@IM0shyYVSrg7Stw3+{vRn&})8IpnoXQnZv88iGp zGt*0rccwAJpUu;916@V=c#IhsW*Qqme*E~%nKQ=5#vrps!Dt8!oe)s`$->CMAjO~q zaxy4SFmNnoFy)Z(*s$PWGl#HN%!v((hdBk5ok~_5WOU&aQt>PBP;6>p=Qr|7`LUkq z#AHchw}cHB4mS0xCtGz~n8bKyhJxmX5R1=@4fPC7Otl~Soldiv7yirs@u`t{Ccl)4 z3zyNMGt2pPELtX*JPGRhZ_s7x75Jcuhf86C?rg?}CU!1{lm#;u=0$TBy*0|IUbz15 dKJh1dIo*mH4J;g7>~o{HZG3#3otcTj8USjkX+Qt~ literal 0 HcmV?d00001 diff --git a/wxParse/emojis/14.gif b/wxParse/emojis/14.gif new file mode 100644 index 0000000000000000000000000000000000000000..6a788f8be067976a32bf37c13482a2d41d367ba6 GIT binary patch literal 4006 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 literal 0 HcmV?d00001 diff --git a/wxParse/emojis/15.gif b/wxParse/emojis/15.gif new file mode 100644 index 0000000000000000000000000000000000000000..debab8ed082d3e38ac6a824193311c20f9584a45 GIT binary patch literal 1562 zcmYL|YgCd47{^}`^hM1O2~ADG3y~M{R%x|F4R2Jk?3}D@YFo9nE?RDDCp+O~d5M~~ z*=1`>o3$)gP@RM>3pMdt0+A-EsNuCFED|p-JhQ&+`Sg7FpWm0?{~sG46BeHCj5s4k zK)`tT<>hGjun!tMs&y_KfnRo8hV*+@nCxXVAS8#x}xG9JKoiGhC)+LD2gd7_-16 z(Vn$|=Rq^|3^3gSbvSf{!gN7#f-Q_Cg46}fjWAmVH6)Obp=Q3a*lD8L0mgTlG|{*A zxJ*CxG0OZVA26^xB+#sxyl|f0Ji4o6XNchkNC- zO@2KU9#8qG=#bygMbemfqq0H#zE?QfREiDWe0Yqdt@gRPo%rwvO4H3VW3RfKO4i)m zMH+m#c3jNuFQ>m3ISpQ6H0Dyx?Muxj?1kvt>D!LVGa-|*Erxd!Q!T0W+4Fn5o@>+{ z#-?pu=jbKt5YVtk1_!XwT{pHO4S(+YP_v}D>iCoDJmZ5ECJd|I=L2SJ^6^q_U(byU z|C%GgFwE764}dmC*Bk*8X~ImpuEtx}d9Jm9E+ce`{zdDj3DUTPKa)C!t&ZY)X_IZ{tdMv^?(gMN*LEK zU0vrclF0g_ToYE)_H8}P#h+rurigj6b)5vt_rY|3DmTA?$@L{w3AHGh=#+dpGmDfX zVm=8L5IYe*f3HTS;xnogw{o+|J>kKT#Su%CJA~+PnL3oo#I5sWjvFS16x9!mk33ZcLSRF3$I_W!+UH0L8z(zzY5c01biQld~I2Jc@sOuPj#3c zl}oS+c1|v#Dc9q?nCW&uJw3<@l%BHhyA~>PoYCxc)z^67LZX4t$?$dD_cb z70F>qc1<=-7sbag^=SPMG!2`Gep%>nc6ogU-> literal 0 HcmV?d00001 diff --git a/wxParse/emojis/16.gif b/wxParse/emojis/16.gif new file mode 100644 index 0000000000000000000000000000000000000000..ed5d29f428799b04d07715ccec87fd504d5325b8 GIT binary patch literal 1413 zcmV;01$z2NNk%w1VHf}y0Qdg@)uKApq*VU24*&f2|J*wG#xVc66aUvW|MhL<#A^TW zUD?#n|J5QMjYNWGVJ>gVL+-`w2S)Bpef z`}+Fb*wl_?LI2`H|H~%-=uH3VP5(JBq9vBgh~AH*2{?+r(h7wiz4pAQhRSB&VUI2`t1z?Wz6?(Fu)SzcC=TGS6;@zAd{oh2%sfO;kHtok#^|>?j zrwj0~AI^jhy?-wM_H<@oCbMrE*s*Km;N9lp-~ayn{NF+U>QRk%9slc5^U*fhq(a=K zM5<#G(v~x~f_8G0;5OaKv7&)tw=$LMI%-PY9U$(r$DePSFBi3LWlqZRmS`v zoTjP3xFlK>WKp0ciI5BobSXP_&`_HTiB2F8@!=hUEJx0{`{5bYT(E$HTDS zG2Da=OeM(h5-DD8aVU|-pOhtr$?S15(9S%|PaOMw0@~jk1HX(69EPp0;|CaQss4cj z%PSxQIpL$G!&whYEdq4_fvOWPAJ$x*5wHfhKy5Mz2sx4kL5OuCo*uRlLI8;b2+5eq z78pq#gA78h<=olxCj%-Pu;h>xWuTlsp-@1;6iQTK#T7~f;Zi9T7;wWOUBp6A81+zb z06r9qphgiz1c3w<6+l1(DVXFU*g&7e@rVSFynsYMMNATe1R59s3?O+J!Nfsm%)$-~ zBy12w5NAMu#RS__0z?xDmGR6nrqp1-43bQ+#TSk&AdN+06w}QqgYdydA(sGw3ndl_ z?aW2REs12d6;^kND-;_ T1`??H&;{Fp8wOrI7!UwEF@MpF literal 0 HcmV?d00001 diff --git a/wxParse/emojis/17.gif b/wxParse/emojis/17.gif new file mode 100644 index 0000000000000000000000000000000000000000..85886fef9d4aab3f4b73d2d24866c444319c69f2 GIT binary patch literal 3366 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 literal 0 HcmV?d00001 diff --git a/wxParse/emojis/18.gif b/wxParse/emojis/18.gif new file mode 100644 index 0000000000000000000000000000000000000000..b6af2189c8c6e5edaee66142a76d2ca56b45e8bc GIT binary patch literal 8137 zcmeI1d03K(zQRB%Pxu&l9k3N=eB%e2fol^|}pV_MociEHL$ zxlP$j3o0(DO=xDet65rB?ujcGtY(@sGo5qpx%WQzxzGKNKY8Bo`}uvB*TvPDV(p_2 zr~{K?K>Xp5c)n5m()C&_qqjbA{+VO3H(Wftt@@~OOQin8v&50d0>R%@2d~l}wBHdA ztQFU4J?-ikyK3;}#gp;-dq+!E$65nlG)2Da9Fo9-y;^cHASlz`(heT z7|v8Fy}I{v-2vpx9n0*Mz{Jm1qJf67nkC{^(wqLimgDl`Hw^Jpn{Iwmui$V;qUuPK z=hIs|#r629k$&-e&qsxhPqT62sW|c6wf6dI@l0-C(W2L$KwsVWHxH>kuR8dkX!ms2 z*3Nvx)-%0;sYT5SgC##WP9O_S7_4Cl;*$?Br!lC+|r9t{PcEZa- zjNc2>r=Ns~=gP%xro;C#J_wdf);Jagn0F;B&P-4Dl{t$Vmd~iL@jK6#EtTRYE4mAx-Hk$vMStrS zc+JmE3*(oz6#DblLf`&?8!RS_ces=vz*R6|qN|$EtF7O)m$zp)KjasRnSfXt}hIlYQS#zW@Hi zfN=U<`{ZEQz>FlIshOfoXFznWxN^=LfHtJ zesVogcG2c7LZV9#f5{>`mc%P^GF3|RUF9WmZRea?3@s*PupM;`5ndS{wRsKf@2orv zc5`bqv6-+5vM;9fc_Fbnxj>_`L08?$f`=i|WjAZ7!k0{qP3Fn5OZRkixS6%aERQ_G zSXIo0H7ahK?|!zLXryB3guZluWm#4e1BWLcn}{{yL(5QGsS56{^;8{GokX*~A^X@C z>x+G(YHLQ2L>)b3l&W=bh9hVNgzoXOi7jBzR;q_{(gF9N!}`tK0C=*c)!W|t0_GJe zRHLJe-+nmoD$ur|Qw?$Ugt~Z_!v=ZioGSK;*}dyIS$gu*hN5G;ehFLFWj?ND zKys~^nLLHiypNj6Uz{hapJF?mC~Vn`Sk%>mn7+tjDJILNv$Wm14#e2e$62j0Hu#>q z2<)TW^^jw-mXS(UBs2R^@2W1}(8Wa*`=~{#JV($jL0Tn(`>PMg(zhqErkF(Mn%{Z33L4kww@hG3xCIM78sLG%Xd1c zibek?qzuUaij?*peAk`8o+2ePlNw?^H2bI8HW>^iwiV2QX^y@Xn7 zKoSafA&o?h1x}XWYAzmu?Sg~%rz+u%)@Gj2-KPJD?U$5w!U0Po*8(4sf|N=ZJm$!V3b(Y2$ENfn$>SCwAEm4s_@?^AlM`okY(`8{V`9A|Dz5f6 z7-y|P83^u6q#US>_63_UW0k_Pdr(R+y->W;d?Gnl8#!zxM7VYE1c_wW13?OM27Ge+W^kCioRmDhx9eN800i9wrWo-RTMG8ZZ5iQ~| zELzhsY_Osu0~V!PAIPBoyE1}RQ5)nK4o2XUwj0n_j4nhuC4nh>%INp?>eNVP3U7P_ zdYQLYy98^yhBA}v$niU=L`JI8MHv%C@6rAtClwj*2gMgA{6EXc`QfqSzH4b4AU&FJ zI#_FOcyKrUH^|_oc`?NWzW5Z?V+Xd}Zp#f(G_F=$e9lMU5XBba{a!y90&CQq+>uGJ z(cirw;|AgWnn*nuebRy<2(yEtEzMY_3|h#weZO*2D%z9@iHHt} zwZ(KBe3Go-KyGeKfqOs?0<_MPC6NrXTF#;X0fIOOnAgS`s4hr0>_EN>Y+z#uPjYMI zGKHQWCF9zzp~7uq)Q3TY@l5+hZnTK${;OopajMZ<{(Z^*@`(1x|Ne+tmwjlKu&AG=f8&lMe V_d|8L= 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 Mr@cCoVQ=Ms0K+&lfC4>M083F{Q zDAWK!kpe|U#i2CJg9u>~MN|S2(Go>*Kt*z+Wp{P=>b`BS?p1y7`E~xC^?uLZ``zbT z;pOS*6iEOGz*{+RJ_;@8v7X$!S?-59$FfX(G9a(V&sS}Wz416>_(D+K&|IejaqRKU znfLE6E|8t)d)GcnUxkxTuRA!|JO6rX(_Z|o)7#|pee=T}b00p)fAv2#^lrA%OaA`Q zMXvW=nM{^#_o^dQK6ftf)akb;l((Jgxp#X&KJtzH?VkRlfp;t1vU&$L)lFC2I3)kr z{_CZsavA-6EaBj2P5OsfdB5FYOYT6m_2WmfS2g$#<0t2(Zo~Ul${P%1<>qfLJIEhx z8tS`w_eX=fmx|kp<6b_U07b6?x-UK*yfX7};6^H8_HOZ1J$>%YPGa+vw#$7o7=qIho*B>{v-<@g>l=oQ4pM^wRzq9&b|A*&-eRl^R zj^2|WN|N^m?-^)+Ta26)fLm{mzP}L_*;+r|RvkBTqrc_C}F5H?fcc<}C# z>swVCGhHsV4$j=Km8WDrYVn%5z!*P_`FK|C)_LyKt)P;j(fysBYkz4;YJ7X6DrKT6 zc5Q!)ywhBsS#)6h@?>*r#Bl9_TQ8F89$aCX%f+YV?eS%jgwd<bm^R?U8UZVC-<{vs>Rizjfe4 z*^1Z0qGx@j^EYc5H+tk3j>>**h7 z()?;R;pc}Oz{6Z zG(V^kx3L7K1w~oDLl9GL#p*^0D?J~#-&!abt~xoewre?$t1avb?H&GmuQunQCRwkODz+FKbKDvR5mjCnv`2L{cm$} zzJKuCr3R)HvpaPdT3*>-N`)fuKCivjw;@WL16>@0aSn`@B_mI}zdf6Dw$36;)2)g? zR7btLzHsZnky;A(AooMKy*NhLZEOKMkM%DGeJKGgX!A+11G9v2b~G`}o`U!x&fS5b zNi8bNalYx;j?me=wE?yyP}Fn~yKo6pLVZ z2TU!z=&YBsQ(B&cY;!vvp^9YD8W&!`u~c#1mOGosMmScx2|PiJ!7X%*$^&(A>S<_@ zuiKgv-Ri^uf5!*|pnxWzp};u#8RPVNI0m6P-(NcZAS21&lpZvzmUcDC&(sm}GPf0) zdY$B1U-bA`DvKKT`VwvWu%?OzSqPfoj@2yO%@3KhV<@F<^0FkEEU0A^#6O(-rPQ7h zo~racf31Ye$z#XL=iXtO1B80X509&7*qjb9uaVz3&})xr&#T_eQjdXbVe_%j0-Rut z^g$^k5Pku~H$A^@iAP`ia3XgMmyFlgENOTaPE9&PLWx2pv`mi5@fbz|C(XiW@m@rl zl*=^pKB2;J>E#hCzEeqHX|$`J2KBZUsmf?gjnD2BE9vngD8%1~hkqVkQ!)J1=izbL z8XT0;FmL+w9oJ8a^(IrGZhOIEn=D*vR5|%V8TUi9^q30)vsfeUi%?MlA+-$+2JgfA z#y79O6u*LiekBmmQi0e$`(hXD-tnGepf~)dmf6Fqr$9AW--`-*UbpKi?oyO{9{+~xuH#7PJEfF+PRXlK zoDa)H%8i=ZX^gl}`r-r+9GPA57(tbU>G_(BV4sT}j#o_=f9!!%L30DOuFZgwG$||r zC)0RWKXV@rgZ_R35XA}T0Qf(-c=mK4oP*NT$P!NE@37z+()jq=K;#4|XVhZT2;B{|4M6z-JdOQy!Bv4&hpx=1LlfiA8~ zn&-pw2Vm0j)i$b#0JBAW%m%fbY3G3_3{yLl8qaB$clgiXN^2Q`pHocmErOEtcuyac z!(P4F-mg8BirT_mcT%fha;>q0{OMA?6r_sr@~)x`T;8LM5~moWsbNHHKYv+wYpE9aV4DhdKpFUB{;x2r5!w&ZmGQ z>@pg)PE<~BB;#?PAfP`-DFlEiAbgTx>}MG=h}jAVmf`KSrA_HLgfoxsU&_yfMUbyf z;6mLkV1+Uq)!(pD6}EKr;H(+EB1upj$wEzXLF|&IhODOPPS-$~4hurzM>jj#*W(wo zvFL~}K2NXO_7 zhxWCt=Ckxl9ML)?uVchw-1{Ae#^`Bg7PemEHKiGbByFZqP=J(oJ^o=1iRxd84oLc* z{0lFbpCKa9p9+3DWa6ph2|ZpolTMPHTc-%}Se^30QgCw)4j1X$uD&6CWTEW_lP2*3 zrREan1*Zzrm8=C=`ihmXvQ8 z7OzPZP~3Jmr1DhbCxm=%jY6N*1D@4;$=wcNsUijEi7wJ~s zjBD0%gwwwy{CbDKNcbBCIYFXFM-x@QNXqsfZ|8-tmMx$utEwil=;|ho_$1|A{Mo_i z5{1(by!PrdU)_pd@zlVpw+o%7yz)Nr3@SFRn_y(0$wq|@z%)rWbj35XWX%RpAFss zO+3d68a=2$*!u|~Lgy30U0_y``_R}u9IvLAV1Ig+9GUjC5uv_U)JTkPL#K}JtMxa#QZEONgC@-A% z=(DNtQ_2c+J-~p1D4+rnpj}kes35Nl&YvV)^oV$4vw@{3HsN%@-$2z-j5gl{&tLEG zB5Ok@6z^TCq(j&&%z^PiT4TCRmd1V8m83kT0fsr+oJpBvHA4BHLcj(KagT@Y(ts1$ ziEs`26ClcaPl;%QSq^j)(-#+3bQY1zw)Z-=M}fEbJ7jR5zgBqP&=JT_q79n}=xhx) z+?vr*L-bF#X<{dke^R1So&btX(s84ZC1BAgj|STWx)T-xz0rgaXjLT@0{NUAz(2wa zo05S|4asV%F#@6+U9w))7(!|Q&k(0uQmq!~tyh~;VoCfuFeOzx6D5;?9 zHWgqHXhI@5td`+UjBNba@2-Em8FIwv+jk-e*4`07JCO!#-G7i%8hBgGCu=o)thZ8+ zB*ld|Ff2cJGILQ;nR8#o;chMmEl5_>F=~@GTUMWH5iE*6s08vt7z_4~iZ^I|8*q57 zGnhv0CEJj;|K7y>_;@tF^{<*(-@`9WOsJd2-*PMV(Ge&D{x9GRp`_;`2sgh~Jit zu*o9j;k@S3HQad7wVjjGaF65h506geyRQVO3#L>h<>sdhAUdWmaSG&Yf=xzONIQj< zaWC-1n@hAY=r$$VNHen$FZM0fhvvOb5FIjFwzb_locGOSVZ_y;{7Utr%_E=f+tKip z6X~==;xc?5(^qKn{rqCP3e^WS#wo}$j0w$Z%frAfMrCI zEG__I#Q(U%T|>25UCGnJ=}aH`I3>hW7e2j#woQa+_{sS*PIgg%$AQPwk5E)yf~LC` zTUIo#ZSByOp=j6YzqRXw!9fjfJCJete*8#=y*Jh?JlX94DJ}{Fd4#g)bB)XzgFw;^ zXl$jcKxAXq`uPHgdSns6Esn(AnK+VgU-!4ws{D8CIoso>YHwgLJIeM%+j4N|iD?r= znvpqWCp{E57U0g=O|z1SJvd&U=<#3DZnP!MyB`v<%N8Qg7OUc7WwvGc>-9*&gg%p1 z>E>kC6Gn8Ek_FFKuVIuX^)gZqnQRccG&o*U^Sh}CLRtf)rb91LOxiQg3{T1XJP81Ay7jTmIB=F(gm^V>z()bK}mMN z()oZ7ni`Wa*nz54MipZ%Q(y$+UNzzT%2v7euHO=H3%m$H@E%kU0VB7oBTx6<1qG%*8vmuYhi=uBf199yRtINd~7?a zfzBfnbLH*G%Oj8#pMRs!|83H`c#p3p%`&a~kC3i^^AAb)e;w&7c(6qYfoIUvv9>61 z(e$0A3}ox=d;p4?%OesZKnW9Jgn|*N^FaXs9L30ELYUQg9y%V=roMzFg9RSi#+CI_ zn>J!?<^ua$A{=IB$mHYev%vamim$}g}f-D5!=i(U6NSsALE*a;` zsK`N-G!QY^Ow&#%Hg@>z48QtQvcS`KDYl*l71j8T5T2R}_HPx>L@=RGoizZURs}O8fb@lWr zq!^^|T{G=#mGjY7mr#~Lcrz8uo&me>VEU+_Rj{;Lw#;yk`#93lY9GW5<3S68V^C}= zlFZI8Ew`+ig_M)=8ejVKAIbfnC;5M!d-vCIKR{uQCSwyKh4#NA_oSPtaQYI;m0{O{ zJ|mZ{TA;O#Cp1R9x8*E&u|Fu&J~pmA%XVEtawg}RfZyW-J>u_ezonX5uCql{DMp5X zgkHT0gFxkMowb$T77?{Tm(`NwNUpv@M;9LVej zFV)f{R{Dv2(V>V|f-;olJF8Z#AIEO7N*m~HG4$T7yRnF2TH6Vp>ndxv5)U+RtUK(B z#maumL%B=*P51pDS=;~Bf;MpOZwuPg*D!}FE;QV*Hg+UOm`&f#NCfa3bHWB6D7xfD zgRum3Yf;)266x`$-JK7RquKsqI7OSt<0%?;tIvEEGnL4xmv)mXt4-+S)kQ2b_j3a? ztG@ktV?((i{Hh|>^z<3wC06bIHeC<$!%^FuE0SDCH z=9>@ba@xuCJjeHTH!LGiG*4)yff)+EtK>|l@)C>$a?jhnc zotDkAj8WrlmbEKOE-}@6i|ud)6H1afYAat^wimew{#$!P{JXIKmH)B-2e9vb9qc4L zfFy84rK2_+0aNu)umd{`dkx%L^$g-eymcZ%q>A>YD$6xB6HvNLEAb34d5gdl#cSlM z`y(%nNYk*DLYfC82tQj2jo|wCSgB_~GqDG!Q6w!_)jKV&;#$BTRyJbNMDnAdD~#>@ z&{+6F2foLlFo!#3hx_=DG1qf(M4Yw?QQT;la9Qe^YkirV4RxnALoq16qO*lsl~pP_ Rn>5}2?ku!H@QL_0{{v#zS@-|| literal 0 HcmV?d00001 diff --git a/wxParse/emojis/20.gif b/wxParse/emojis/20.gif new file mode 100644 index 0000000000000000000000000000000000000000..efd650f5598c031ec3a205351c95d9d83bada14b GIT binary patch literal 1808 zcmb8uSyWSZ0)X)ggph=U1c+&Xa7ZG^QUqj^MKEFCr9el}Dod@@gH^ORwWHWTB4QaW z3`oJT0xAqr2E$Saij@??8X-`WWdKPa?AnNIN$$;m@XVPxorigtx9|OTzTnUx56@&O zM1{5hv^?_p!Y>C_8Z5;eoRV*$>Tr;inmj&-ho_>!OP9^DQpJ6J^+?bV&rl_D9L{H~ zRPI7%V_w{#Xb@N~omL5~Ww-RF?wEtch{d1mL7x>o#$K&qs-D<_3D192`fHjDK&vs> zy0|cqAo`l{FvSR&@>Bh63+6+bvx3yaKFVe*<>X&mF1vJO8iV1z0Nw;^e_HJi1nOc< z7XxgZQTOcw%_M*{s9*SkX&>n=^6HOf&1txXlNfk1u>Yzl{K98^WKdqB504*&XQJTA zPWDrJakbi)lA9TJZY zKL;X<$2pQe6<-{^8tjrq&!oHzU3 zTXSP&4KdqYzOR3d-|9<+<&Uu?)Rci~#_R9L&+wHzYmDq84QQrQ2s_5<)wO?4(rQ2_` zy1aYlfh?vWvyswrM*kIz^x2;^OQ}x^KARqY@oM7bmM{>WIr65}eNir3?eU(kp~GFy zK$*Kb6a^0**cO<*so6DOW(dIOVyml07P-)5z0m5gHhA#eW5(NBL-00ny&B)~N8EZN zwfSr2LKl0!#sX}9xh7%#T5Qvt$y%E#>%B%rCJ$<+e35#6q#ln<$IB{c%d?Z>Z%CSz zPnC_v%0@CW6M;w%4dj^t02n|&DljhApB)|O?BJxM1wjx)iNfL_0NL;K&LmU_!T<E~Nv7hGSrv16dS*k% z8F%PQCFH$1#kmP7A$diPSl5fD7xG2cw$9rMt>~ZtLO_`CX?cNdjPRI9c1r4^4Ouw2 z+*YuQZXS}HwxAitk#JWTZjp}#ySewn^GtIlF2;ADw5|PgP8kaM0iAf-(T3B)eg2(B zc(3E|_~GygR+tyA;KPoq5tK6tccZm->om-fZb5{ADlT7&zBDbpWX!!)m|g&Q?ef$a zUE-NE*Yv_`VR(-}Ff+I<-}e$e$V5kll|NwXcwbzPug~5SX@1%V1?eo^em(V4v$u!}5_GXh6 zaCaw5ggB$PeP|RT!{zS`oNJ#K6qK8>E1Q`wl-_%h&ZUes--z^az}IeF*P}HRN|_fr$1Vde%AvMJI=x8miRO zMZIU&{eRg5rvEqln5*yQx`LzUt;`3`njW~})gvn;`{o8IY(hAk=lfDUk_$Aos9E$yPY9qqk}(4bE_*?@N=-JC?0y4nVoz+*Tkdw#P}Ky zM>V0gwQb*jRNRzR)JA3=&I#xG{C2nPy08!H?N#U>r|n8Az3CVJ%MP+$;=hosm4`5& zTtOdKaPIvZIVaKFW(PUxd`DneR-utiufoz|$5@5TjzLyC$S12fAsNSJ^x_g9L?=+B z!9Nh#27$@5%NT;a+{Wk*tEIY-g?>*=Qi@_C_4H^JLh^n~!w9<0()sI-zb8J&^N8T_ zS^6cgU%vD2iIa)Mh$Qx)UAu?z7>m^uOEl6=r?ZJZ0w**vmM7_jinkddY>m?lOAk%s zd`COqSwW!e$A6SF6O=S)_>bmu&!FWxv1f5 QBu;etXZK4eWD?~4PyES!QUCw| literal 0 HcmV?d00001 diff --git a/wxParse/emojis/21.gif b/wxParse/emojis/21.gif new file mode 100644 index 0000000000000000000000000000000000000000..cb8cf6d2a19857f6f6a13a16ce84b907da7b8500 GIT binary patch literal 1864 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 E0ebcLc>n+a literal 0 HcmV?d00001 diff --git a/wxParse/emojis/23.gif b/wxParse/emojis/23.gif new file mode 100644 index 0000000000000000000000000000000000000000..96516b8d9368ae6562b4da1541b41390d56e4931 GIT binary patch literal 1950 zcmd7Ri#rtP9>DQ27Y1XQF{VkvjB#0p+)`SXxwxlNN_MIZgZ8o6wzhUVQfu5ARwAu% zdUDC7qztyQU0nv#P&0|J>zZq-iAmF7_#N42&-0xB;JoiY@cn&$@9XRDv)MJAj36UE zNe~N9qG7phvLzZ83#KQ>;JNLaGE#Fvj6!G&V)J)*w}Ij~e2j%hHp_K7b0W_20DGur z-(X*NM>-8A{F>s4Fdd|N>8fb-yOZeK^StBQ0nLHSM$mae*1D7E%( z#Ef0is{PUCegp!BLZE-kl4K(+)x*2JFysM?MX)S|2E&dN5=`!Z`$QOUhna&gf3_oe zJNmPi_ToKbhg zP|^CeQhacFv|lw|t?13~{mq~+kFxM|(}H~Rjnk*o6AW-@vGsT@iJu{1^ zZbTBM;Z95`6Y;J=Obspn;h;42B-&h~m6ET&)uQQ$<*u`wQ+4U0sP)mo+vux8bZL&PX17&6mU?e3{6z`eF6u z99NM$vA*X`ygk_0eaG1>r{$@6CuUej{+`VqIZlm1+j#ZSL4!J}S7z5iAEyC-E;DFvfVVO{C_wuF5N z%hM~Q)G|bEG!qGZg~*KQ#p7Ez*i(FlXNZ*%b^)`_(bI9*(X@%c z+fUZ3oYjwD6>d%UVBagvW$fD-8gOn`1HbD==&b+{Si%z#r zycOS;RQc>)=U}>8M*K&LxGL52Un%;P?!TpUPpwMjhJKd99$l59pPayt8E5Klo$gD* zofGF+6+Ts7os{H$fw&`81!JOEuKKvxod`riqHSv2F(FkdbmCUToybcc%QWC^i11i! zIm)c%ZrkiKf*Q{!A8au-lq0#gbr(Zqrc5rMYj@~rDlb8VN?c{)EeuD^<_st{fX(P%s78eAQZ=|m7~pd$sDeyzJlx0My#!2 Ml_pW68Hlg`1F!UCz5oCK literal 0 HcmV?d00001 diff --git a/wxParse/emojis/24.gif b/wxParse/emojis/24.gif new file mode 100644 index 0000000000000000000000000000000000000000..5f925c7bc15698964c943551584ed856aafada3c GIT binary patch literal 2257 zcmd6nk3ZA<9>>3Cvmb`984aV^q=myo;v6|^rA^cos#QD=yN=v@j)tSssdJ9a{7eg- zYMm7Mm42KO(yDb1V}?3SD+eWQepPZ@Rw2gcjN5&j^C#TTAMk$tc)s5scJL-Y|5y@4 zf~Hl_^vV6xZBhF7ujlFr`e!V)m^%7$2s~e>JZw4h^rwY7vyRK6cQW6>a_9GVRsyvL zSWvcSk@|bP#_DNT_8`HlE#SV(R1+tE4b&iH>$^Vde)M2OepavYQ6IB^UQ7m~VQ)oo zPsKQu5D%tO!7X_Bnmd@U9oF{${0V&LE3;^4qnmsZ80G*i3w+3#C^rRjKY=c{<6V6Hb^PR2!kbE)krEh;b9H5(%(ODP#Fnq+ zYr$m9>t_FkRELu7mcZ~{MHhxbzw)5h%Hz$4@N=`XgD?8}x*ykOB!C!b{I>5O(vbPV zEnq?aLdsX1Pn>RbecNAiJ10Uvd|mr%zC17RYT}A(N$wAhI=yf8p1SY5pk?<;oZ7CR zn%CNx?^twE6y z8`g&ft@dCT8yU>&aGy~~b<_WH--6Tj|W@8=RkR)h9lh&2OQ`p9fD2%sXk%o>aQyAIW5Vn0PNrzxJ zN0?Zh?5sRpvB{;6p}klNnV@-xByZ!l3LHIgN$39A!n$I60^<_)q%0?IZPNDQ1fB1= zmt7pI%T}7rL6KeWXm*t%$&#A?vX6TguqqzF6umigz^Puvh~!Xj^?R;vdP8wmu@Z(E=c zDi*VBw|mSs#)=Phw&?}+^)VY(Dhs2woM=G^E0R4|otCLStQdq)Yl2b+7?0mxoFY*5 zPEAY%1(AhMmZTFLl6^>MRBERNi9eT5=w*tIOf4@zR=oUzCX;10ksLeo&ZK5DR%d#U=L&jk2F1RouoK~)AJ$6Ril<}}0?6t% zn9hytK-i8k1!h@sly(zB0hMbM z2sd+KDyP=DC_@o;VfN9WLe32pt~(?bb=ze=Y^cCYHgoeROt=G|W%R_4TLuUlMuJ4}kA(b%}ICM~GO z?CLIp=`52o5OkbG=U&yV>Ile*aMWH=7@>cTQo@6^wU8lXB$pgy1|a@zF(}VmKf^HrH~GZ{o2= zU4e;N*5CVH^kTW>MYQB4f6FbV@dyGBls_yGslI-d+?#U zs~CAUjCIW6Y}4R`%TSJPGgTp*jz;$f;Cm|@nMKAcaaV`q(M|5IRTx=v%|P=S;!XH# zBc7YU}KosG&8j=lUr=mB3i@7OsAHkqN7q|>d?j0DUahhnTg6OIc`Y@ z6_3iJiIR?<#+Xr;M<476*6DRhjAfZfexehE!Z| zJ_l?d>RztbT(#=&)pVqpXcRj@IjQqHRac4XD?sa}2WKA=!B$&Pv*C*(Y`VrC{J)UEVo+KfMDv99uZm`pN=n3=jt(18cOH)7uM|Y_1aTXVvw8KZ{p190c7)?C) z>+eb!>JorGK2K}5Pd7R}tzdLkc@6iR>MHRatn_ND@VK!LGd++E4)GUzIpCKQpiVm| za|0JU#_m~bA2Z&Tt@ur=){3iQrS3>M{}h;J?ttd~x3N z;YsKIA~g8IZCdU+r}iDI#Dj0vgA@D8V{O~2xwFsLY3?}8bn|B4ah_-57P@)bN7N5D zNOMiLy}5>;Ti1>kBdQJ)7T*Of_6IKXeKT0@3hIi6dkbddbe(FAc2cGtuV^nM&ku)w z?mgVE$({eWxxeeQIvb~vGPUFX?klFN&JpX58tdlg2b<3iDlSe{ZX$4UPoQzxEo}glIp6%+y#8)j4W=gS4;N zpKh5iX#7Xzf>HU=Pu=ml4}oJ!FI@+tzmd@|_ZVpQc%F;b6kjU%w6ppk$4q6=d5oT-}yN|G@=cCxn zigD;-<%Cc3R;vVB9fh9(Gjw4T@vmlG4TR%XRtHhw(w9F&;NQfURo-1)qIc@eq3on2 zX^GIj5s?`fz%~9ahLCiVmZ3-R%!XF`;EIAMoHNVTjiMu(L=EQR;07!SDCO0nVn=nM zfg&7If3Zj=3MhdYIG7!Q2eb^UqvF=MXYA}=#a7tp)gBeGj8@5=;b)+>u-tV7zv-W} zkx1+B&{#W`DjMOu8=beee0Kj_dj8-gZPu$F1lw2pjahDZ;3h;Ani#9H?mK13Y$1@1FdyY{Ik?`6HnTe+aA~Sdt5)J`8<0VD<#Um$PvU1}wXCTY*5)t)E zXmWirr<>1$q6v)wgaj_yXn9UZW~vi?irgfQCO?CbEXsReFw~6Fz(i6o0qiy0ru2nK zu2W7C^~y7)u>24kCAAba#)9tI&cBuygTbPI2k810APj&57y!Klu=RI%c@K-*bTn9 zw7t)Jqy^Bjq)fyh`W^|h=`}%IM&UgQZvrO z$=|;aODG*W?m<^U`#B>nHY^%y>#J|r0LP5WLdk4hewlWNSw8EFgxUC!zmMo0Cjx)JwGvmR2QSpyA$qB#)ZaK)59k&6`AqjhIY2^ zLvyP;5D@9uhzP}tpNtC4Sm&ZKO`hw;1^LpbNV@GCy4QiTJtoGlNw=QWWSU20O>R$E zi8jjP8JGkcCbJ>t%Bz==!(nLwS$5tw_I%PAWF9A~AQsK7H?@fJipN))qbzgwc*K?e zWYHb!#*P@+q`vz-ltM`)2^y;!StJ1Zk499c#IuhDKct@{!2iMD@DKi94Z{9a;M0mE zZ)V~YDr_c3o#Gm!R@y~KMFyu(h1o*yTfA(W>hP>_5?P)pWJV{Vy*bO!yMo!ueZF_< zrPkGO$eGE8rgV1}ywgEM_PZ#E4L_}%P8OdPI4J4>3N#ghWSCKlF=?Ap2ptF6B=fXZ zz#AIgL1zt&@EM;u`TbxDaRuf6*ec%^}Zjv zD~DD_wqe$`8l=80b)c}XB*+i8Y$R+{s9#O4LR+pl%~O&x5LP?0;&vnh#X*O7Ra-aC zZ!K*X!m_2bZ*z)OrZHfe0{T9ge6{QL-2>qVd`(k@yJJ|zYA)KJG8crGMAtgc z>8|jsI!MoN8|b`(jF>qVP0P?1+fd+JFK#tUZ4uCS8oj9$85fv7atZ(wG=xFPL?G1z& zmI4-}IQ5(f5nEga19d8Hov?}p9dM~2h#_uO(1J?=Su!D5i>+tQoHO%>XLA3|_ulvU zp5Oa?-wlfh^$$qm0xmGCf!S>SE|s1>8|Y*Nb1Ci%34Y=ozB$F|YJ00W7d%~Hr;DMR z%URzf!Mo;K{*N2mWDieG&uC>^2_fh+?mb$v0(Ru!?|}?@Qjrk+LVhQZc7*}K_Bc0 zXjtX=pa>nm(AatTpMy&1Oc4IsvE4(9?8oxoyP*B(r_&@y#MqmOP)Bu5*8XXe9ELaj7GRNBo4_V}TO-h~|6M&dO8rd;iudU5Q zSRVa?!+Z8hx2uoY&W#dO@?4k7BGT@lJij#;%DF`uGP=s=yUU<$e`~HVWL5D!NZVx3 zB|+&4WbG_3Z%Fa9zw>6j#5Z1z^ATbcJ1DgHlZxfB(FbfQ*Z++2jkbcyw-Y;)O=_dl z5=KorcR;|I&2w-~i}N)`aPj*t18$9GF%Cy_*BZs#MwkfOVra6lWIq!>5*6LyaGN2L-Py#I^V;jUzS7MVToSa{&->|J*D zn+k$rpB+VrZAr5VA9Rvn*BZhcr7PS}0F3pyhdyPQr1{~UX+5(GO-1{Cei z(H;DHW>~YL-Vs?}m>q(H21pDZAC(pRWgNUCh9K~Zqh5G`1Ga!=v9A!M^&aXKim`|k z_%9oh+p_GGH2?@8V8~}LNewAm@7qXLLJFWkj1AO4VOR;xr@A&=12&(o!1*TQ7uE1C zv$3d1AP*GG>u_yTMJnT)koXNcd;=rTgSS_Qzp%$k4NA9WK*_raHjZ8fS3NzUDltu2 zaqio{bsbOb4bns%ue^S0>*M>^bC1iqu*oLL6bp9K80&q(*jsWKG1gIPon1K@k3K{J zY70PrxMZWEc#gy0QC)%$$jigU7#FDeTJ4nrJU0dVP@6A=SH(M&R@E*Bcmh(G90}W( z1@7d~)(R^y0(;(=*duj0DN`3j^P6*fsha$Gg+;Zi>dt5Mj*p5=xg zZfswtqDUODXF=(}8`$@yW%f%pD@??zmN^RYIk|pKj*b7yYA#M;A`_!G0xw~awi!pV z;V4X)?tE7bmnKT}%ZSN>VQy@*I1^82v)@L;fyp{Y-4z2ErlGUuXq$bKG7%iZ!x1Ut z6EkK+tpl5?lyxv=276X%RYQFa^{WpYwX_5{^G0>>!k;0CjB_tkVZ%xK6OX|MQn>~t zOTHF6t7v-cQh65S#aHA<=p=3X1)MLp@S9T&5O-`o z=EUSnd!m4td6w^~QW#W%BgT3HD$}ay$Sr#&dyA_M!+GUtl3=$Z?FepzMwQD7PmqS$ z9F<|gicRNymSn@L2pI*8#M$wprVX3uK~CYo%oN>tJ;V5SdD2Q%Q` zg6Yq1n*y`v{Hgi*J%&u`EUs1Z>rEv?GmT2FmC7EjWK;ZBvA97^c8Fb5s+Yh@lAWWc zMrmyN+yQ$hMeC!iQ*(0P^BUBfaQ9}A-0_@ROhWA-i~l1k3;ruAGjT6b2|T?-S_8qM zL?1d6DHqs!PsO?neG%&eI`Izwq)b|vqac(1XTDbAzNqfWWUOO3#K5hhIPt5nyzv@h zX~|1{B1g@d@rkx3O+w5kO%(odGB00XseUOhPyQw^tytQg$)vgj`S7g=*=wDa|06E7 z^ZQ|~(P`zt@JO9UaltFL>daX_j z+1+bbZSHBmJLC`q@>xFO6*~{-jGSOp#&2#!oNBJTbgEC+xE9sDKt(x!SU1Tdm%i9=bm1nP|GqV zok*B;0=762@QV}K)Ua&T)CH7m_2Sp>hpA%EzaK1Kl-2J-XGZP|uhKPUdU-G1R~Dyb ZAe=XE=`EVhT6UAy5GOqlm1`-s@L$#RTl)Y2 literal 0 HcmV?d00001 diff --git a/wxParse/emojis/27.gif b/wxParse/emojis/27.gif new file mode 100644 index 0000000000000000000000000000000000000000..bb468901e4a9412da4f5fc0c4edeaa73b3acf570 GIT binary patch literal 2893 zcmdtjX;f2Z9tQCDE?EgAgaDDHULs&b#RObHC?^S9Si}^y!&q!1iVL8o7L``!n1n4L z+F$`u(E^I%N}^c6Wlk2L;8+co8F2vvir_jdvM-q+J*Uoe=F@zbp1JqjkMF(jd;Y)Y zxuIbpKECUjfC)?hn5HJOyus9~RTIt2?>FBz4R4=p4>|4!M$2udI>Jp8`^UBOhGby; z&+fx{gy9oZ)7aiAWAJbRdH5#VGKBjHutzJM z#wwjA3`@ICyHDQpF-_eat#lkZfE%oy`?R6TG*v%T%YL^Dyvcyan>ZIG^BXtdO#NSs zd`}zv26P)@rn;i8%0eDyQcXh%gV(%AA0K(y z58R(Fr2Sl9`=~syyPp5D``OE$t{2;ofhxDx$80r4oBO^cpW9&5Up~vI4S6AlYW{#e ztS)~25mPTdxttntJD1g{ z3^={gA}7**}PXs?qSqsuc}Vm#n`Gz%jWvh;E_XdA?YZ* z^8~6k>Jc}tWhcklMGmZRhj!9vP*56`ep-1g*g!ohN`OzvO0YDT7-1RH3(^YN>rhh> zlk+r83jEot8^Kbo6i*G9rz?-gimmWyt4K3P>cp^RFlaPa;2xC|eZYYkr^P`yFA=kY zjLV>SwP&`%e{9((D_BImB#lEm?VuB}F`~q~b3>x>V_P_w)`EDnYpuLjw;e&vyLaJ8 zatIb{l5bdwyU)L?P8a8k^0I4rtSCF_bp;3yiFRDSAMNWXLFv)$d-8k(<75h=cc+xD zJVV}3a`YDoD0>^_T3+hyJ|5Xdg~_4dSWLIiQD_8+Fv+XV8jb%%kJz|!`Liq*7!Iwp zKc{J=GXakVl3Oq>p6H{7NJI?dlPDENohvHYVsQAZRbGtDzo6Mb@mpL1Cv886Pl^e8|AH zD6UioS3>vSU+OO^ioYM79*Xk}WAjVN*+eD%b=g&{@RHaKkG|jg`%SQHR3Bg$?;(*0KjSS%9Od+yMq@loQOruMNxwZCNl|E9BG|iF^NX2!s})-WQv64xz7T93uld+qzZ!#lmftt7O1!{efb9;Z^ASf> zELI#spppz%CQVe14@sHP_OEQjAF_#URF&$pXmi4ggBgObgW+5UfuicE$zr0^xLoOrv+$})3AC&O1T z-xHtt=nNCP-vtwiw1@WZn9!Mvf5XJf2%qiS;7Il;VOrM&OIcqo`O3w35>lXxu%OQq zNji&~oz8V2P#o@RE~pYqaVUg#Y$0jcr7RnW6%~sVa9i+%i^1{{u?{rZ!W-`-U5>$6 zx?CUcf#f*udW6!pw@_^K?&jx^76iqbnV{pAR3Af|?Qfar_EIVgC>99*nTfgIGCajB zoGo>l$ydIho=nN7nVA?Q01#sPm9!n`J@c;wsB~7IRbssD$H0Khr_Iz;hj6Bz{OrCq zCuU12gh!Lk%B-&^H=PVkvI=S-sdcedJT;8C)u{q)j?zkGp@JLMLVFPa8uI(JFaHl|$N!pkzkdL5 C&j>*P literal 0 HcmV?d00001 diff --git a/wxParse/emojis/28.gif b/wxParse/emojis/28.gif new file mode 100644 index 0000000000000000000000000000000000000000..f59dd58257545068f230bb6515c053a38f47d5ae GIT binary patch literal 3262 zcmds(YgiL!8iv1_B$Lw+LI@B!nP7y7fC0ec03H(5HtV5HKwYY+v7(EpbtVZ1 zQEE_YEm94LUe;4_wcx3m5KdC6fS_n81dxJ4Yj9OS(QK%Dt?llw{kz}%|E}wu`+e@` zn;SPr5~=0^960o<-v=1$PbNjuF z5OA-t-mU^~x)#{q%(P$iw2v;Z_bBX_J?yVzUtaWh-5zhR64`G@)M)7K_gi`!rEktV zy=*JA-wY|+;Z^Ur>bJl2-kkeb3ErGzwCr-T-Rodz+a^EAqO}}+f8cg}kI}c*kl1}XxW9l=mcf61oN;3f+J9wcf!x(jXh?pW4P zo?VTwszK*ruijg8N3IHgyOL-h9U88f+j)Rv{hZlcUEbZ%_Po8c<-G3Iy_oxI(0*}E zpJjLBxvasTDtCQ6=UG?7EKBH4Eqg!*=C>KE0KNe4gJ+v@16I}e-l2ux}mQ`(BIuQ&|2TR z*YnMAzwJsw&DL=*ewzQxB&pdWGp*;mxHRd^nnf;ZdiMFujkOs_n!PHZO!x8K0nlUL;1^L?k`;(c3XP4`9w|LD*LO% zhbKj^A7B46hSE}o4SX}cLci?pv7mvrnYM5JhE6$mnAhGuI^S-e{-k+I`Nr8JHM54l z^8)|BM=(OBpr9NG?92tRix)|wCES*BB)V-nP@SA-;zVMY+^i(Bs1_zF_X4X zJTA5CQ=0{XBi(tlP%}<=!?Y5G$y#?9LWQ_41+uQdWvCfUz8 z`WZilyb(zW>9g+Nz9$g5ESQ=1X}B$}Y&c2@5{m`eMmj>K@io>D2z|7ZQtWB2&{GmN_@!n{!0&ylBDEmYi0Tl)4su8dCwT^I66_-P6}kHr+s-n$+b+ql`&9WxrD7TbM(AkMB(;XleTZY{M(&uZ9XsbW zO(E^N1<|PTi|XW(xawtd6EPek@C4Y`SxieR5x}#9=mrfLSxNI>=MK!3VVvvp*bhquLCQFNZBmVkQl^J6}6Pmo`a#JFg zyxH(HTqV$U(p`^mT9;X)#|6zSV<@p!js8mR&}xIYms)t1H=XVGFy-K}#u!QLbW3>! zof^TCi@3(JUw?vpLq&4I9ul^Y4+hn%DBA9ta`~eR1XRHM$h%afF;ek0Va?}i$zNQVs)Z@EFD0MQlE{8q?g82!p1|l&9OiLxLuHSH442lt zycEL}Fqb8&)%4_H)6@BEcDTwkk)+(Uc*!OZb|^WA_O~LFX75F>Qs)q&;)P9reyM3UvC&*;bJ|zBzd1O_;_$r>Tf? zGKPPYBl_^V!!u44;UR0c3U#IwfRv7N zJMb5-lo0&0#tL<&0AX-IZDJSkiW7(kbIwWY_qmssG&dMNB6EkFX@ZLFob*yN)0?kh z!c);Ai1hU(gGnDERA3ZGw`Y@vBg3Vf{ak}Nhr%87ddtM;KbV|p&Br#*gQVz;0V{$| zk(h{a&Tl>NyS#&7@JA%v^p%P+B>bDtIvY&c@M+mfibK%wPT>ci!1*c$ZRgB9HrBK# zkg-t9BXUd&V_~63tuPL+AY{vZKTC(9UtkjA4_5GTpeKFUPAk#%(lcFVJ30P)lt>Xz z6`oga>L-!Vu|PEhYVS`=j$_kG%u5^@;o?46u?1XkK`siyRA;sDs#2R=gFAABL|dKI z7{)s0$*3QJ=1SF&B4D0R#vsta0p86jqcI@P812N4$kh^hF$=hr&co5wUroKKT4IRO zdQgLManZU0;e41X$3?cxy}Hl{2A6?-f8{yIWXRqogMy#g;@KnpeCt1E$r>N&D#DBnEDR9)04)j3cui5`Q|?O09@nSZjM zeW9c(cv6JO2r=GwM4Jdf&0w?dSohP~v?f%VV!{zmk>hc}O#G`B-72wmL`@Zj#zEss yWM7j#tj6EFKi_qW$Xx5;w%o>Gg^hK8QDItw_aYP9!kTdjvM^a16(WToFyo(6p0-;6 literal 0 HcmV?d00001 diff --git a/wxParse/emojis/29.gif b/wxParse/emojis/29.gif new file mode 100644 index 0000000000000000000000000000000000000000..3c5227e8e7796fcbfdfb8aece35232df864f5f00 GIT binary patch literal 5861 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 literal 0 HcmV?d00001 diff --git a/wxParse/emojis/30.gif b/wxParse/emojis/30.gif new file mode 100644 index 0000000000000000000000000000000000000000..e24a1801c48d9d149c96ea5bf449697c1ceac93c GIT binary patch literal 1780 zcmZ|Od05kj9mnzCFBb`riv$SaN*Gs(LoVe|XduCGbwaT%N}V7u?X$A#bdOjZmk3xL zMWvPr&rGWVMHCRqF)bz>$|Xkx1CnqWKm_sF_!G;)K#=!I4 zFue6zksudd$WJ&4+DiNfo!&H!5_6TM|U_Nqw_Sy8fLLq;g?j=t0sa0a-D$+3e7d?LU}@l_MjAYM|GZinu6-H;+Em^0 zlcjox1_n{N*J+wUuxsJc8;VLM&nuGhX;e!1{Vy6gP3VyW5n z-Y3Sl|3s}h##>*R9j^KF{G3Yi{h`(2f9h+DyR%L%wfo*rjF}X3Ri%zgoq{(jue4nU z#zuz5pFVk0X8gS4LSuI5oNB6?iGj_2(42TwdHNBXuB)SO>UFTG+bAs5bRD{3hQG}= z9B=$;q=-8+HLg?alC?Lg8$M_wVt+Zo+^i#y6L6c8f|hRr6gPww35<=$-VIs7ug9vj zqgU1xC7{!QPJQ=65)>7|s2_|6z^el=8=)WC`MR9^>ZXZ0_2kS|dgqR9EA3vO6OWa- zz)aX$Eo1Et6Yep`E>ah82&lqgZ09`R6E=#W-v!2n@FH^TGV=izyDV{&Wi#R3xM1{$ z;62fTz{p?^S2rw*AP9F2M`9v?Y1iT$op`Z2)+zSelBTnX zUs~SC4Dhf~c;$?sEXUGC?xB$A?U@0q?)DuYMfiK+giOZK9LW`5DTRBfwwhBDF55y} z3@mhZ+eSv@^GHWBm}1KSwvVDd1pK ze=MYyq!{mc!VjSz-F+Pi>7F>-Xcxpzl<{fgE5|d35<`$Fq2ly`OKDBCSzI0twV6<{ z+hfJIcN2t&kZ$hAr7+C*ph6tsyyy)1sF!=B%l^+3GH^k(%s>*0Hp$2DSfJspwjCbm zalr**f($WUNHA{lJoX@}6(hO4vg)kxcr5u+hnY(v5@`5(0l^r!aFAS!6AK>Mbc3kY z5Zh1ZYOw~+96oBwi18#+MfSJ|3-9t;gxgZ+DYeT;@sN0sNWw6)VX-WS6MtlqOl=r6 zndP6%`>T+#(>McX8@c(Da}bLD%8dVQW(FZ}_|~OcqF#m2qy8TzQcgg##s4s~{_f2A zf9BuyiTtwKTtjR5b-7X3itfdH96cA4aSZ=+D2CCUZzoLG?Q9j4%6ZXW@*Q}ril`6M z5C2V9ZNTrMS|8S{i|OSQ>8D@xuD4zg-pXkRJtAH_aVDq20qgm^Gt(?L&f0RqZ&&fP z(|5h^5qka5bME^b^rzI(Cf*_kYIZZn!kLF5?DJjkOskPzSV;2?BhB&idJ8gRB)*Ny z8B#wpo>yhUL>7+jO#AWFL|cOR4k2j8A*BW3=hg3S`$SHcaj;p3`zwqp9R(Pg)0BpsDUH1x)r5y+|Imb k{n_ye)X-{yMt$E}oY2c`*&^xt4eO8Jx86gUe`mepKi~&fM*si- literal 0 HcmV?d00001 diff --git a/wxParse/emojis/31.gif b/wxParse/emojis/31.gif new file mode 100644 index 0000000000000000000000000000000000000000..073e743ce5f5611321cb04f9e6266024db0070e2 GIT binary patch literal 5174 zcmeH}YgAKb7KXob$;p*)0x<*#m_X17s1dCVig>~`;w>m@tachKt!TYOYpYdjPeQn; z*ak(#%3y*}X=OB8TxPT#PZH6H+ER-at(U|rVmqbQ0**)~1ZQcTwPt=yXU&?Kp7Z}* z`+N7Z-@P*@WGE7Ig+K_r2q+#2yg$6udr{%-?eVs&AAgnLy{+;(BbFvIzBzZ+dnDM~ zxx(A?p|@?4_h!aJ=OFLngWl7FygzC$fAe*@D!{7+k6dxR&BJSQkS&=kZ}%GOJmx2J zFmJER+uK~3g=`uFKm3$my)M!Fu=rvwXxD(=2JY?a*Dlqjx_3!$e=^Xqc0gl+=*S{Y z*S)KiW5N2DCElMG*XISdx81t1RoHgxdhfN=^E<-5k8NKV*gYK=9$w!0uu*>a?U2)Z z3;&SE_4agj9(|$nh^)CP_U3lh{k{CdYZ5MPVl`GR_I9m$P{;ZFZT?r=MmD|6uo)*@ zIyCLpnL}qR%Ubum*jl&p&V@5AhjxE^FzsHg;Lg?N8`m!Pv?vbgGrW(s?#rclsLU^` zM|PebeX=}m{}Q36aaLEO{D)8Fo@1qVU1jGQZ9TX4|7@Sw*}CKI-gs}1`Fq>M&(;ln zjEie_NMpPW|GToAoi>O|Kj+d(Bxg=%hj5eUS70pERe}hjpHq z-DOYz=|IRIOQyR_$t%-?54;(7W@FSY4ev_jz>5`#GniCX%O^mprw6TCL;tYxg)7^T*_+YH+V6GUH9*aOzwYo7g zhBUIerNRmoakqifdL)7uO+rHjT$yIX9CI~19dUngWQJo3#N$?Irila_=Q#)(6fJI`o{Ci!7ONaL&9k0-3bjfil(azy-64 zW~&L%*F~DIi}5I+0UQMST9)B&nNF)W_*#~eueCUf>5*BLbyldccxr;$dS6apu{j9} zO}-eA5CTwL+kvdDoVXCo=4<|@
    WnIIQGm1g>+S$^r%K51EpgOZ}bv2#_;u(KG+ zev4FS?_z7oPXoGn!?mU6(FOS82U?H_S2GO&9I&3 z*R?{ag^`i0Qdqn5NKy zZ3aCAJzFpW7=G0xaOjDu&tv2HK98BZ^32*=ZJ)Kc6lf^`APh6BYqKyoYAFE3?k`UO zd2S&&0Do4H2KpTs?|0S;{Bt(9L=LBFG?7_(b-8w!$&AT!;cl}53y=YZ*lh-M6c)-= zR&pYn#}y~x({J0!r`{%mUPJ=KA%W|0{puWFKf`nj5#FyzTWFaGvE3)d` zQ2jGiG6CjeitDR#JP3JWB^E%%l2%Dd4mWzt+Rc)Jtp%ZVYKzv?PpM2OPTd+Cni0g& zApnHM(vum)$lKI&nwVd6G}!XD_T;{$a_RI%(h*Wlxk;Y_Gy#k}KoBILL$IQ+*QXdf zZNw^_8}ygQWc5wc(*SJrPt%hC^qW`^o)@3T!#vfIqXbdyl8?pu;qy?wR;Xpr46n*c zR>>S}8pA47lX{>`6~Eq7!GZ58vq&^R({SyNwb1Cs|#h{sz#fQ0g%{3sojI=U*L=yhRCi#;@Osz@|+MlRvU!~ZfEz+iyy?~isq zLpr&NNHNqcXh=Ot6(b(hV@W3)VS%x`3@I~5M2-%_g%>HZF(5&t6oHcTiZV#55-!kY z2Zp^V9(P%ZWd}}Rk78`%xi<-KRlg@$pG4S9~*)WD{2#j!{f zM7Mb|ih22Gz{b#38dEuFFHQ-G|~ZFM+d}5JWt*W^!lod6X%06fZM^S=n4hZ0mL#B_h-ElY-S!xiV%V zcN8U^JxO~D9o*8K?QhxhFmC@l7>n`ftV-1ZkZuSZwva{2jFuSt5PTn6oRkSyu@!$cjP z!ofiU95cH+K6cI2n~!kFLd(Qp{TmSnL(O7iP!w__p){!7{BiMMZu@!FlZg1W@In~` zMfry7HnG}Pz^RVhEXWsz6;L4~U>0A+n;@=Dz!<17MbAdC=o4z(WA??h%u2n4oFGVA z)MsiE=pmYrfirxWcO={UbZeXNNu8ML@VNfb{L)Ig6IfF ziHFf&eOCjIAw0U390 zz3+U$0VdYs1S8EQSHXi<+;m1J)=xV=2@-vkCVES%PR)d8Uv~;^Vk*uOV_Ey{iivHw(v?fi#yWql`?11E+_8bT$tH1>diiTkvMl&=Fr)F0_= z2Xrnv5LXk+JTN&GgbS8;GYN4v5DKpLF!#1i#YN?RS({yr*0YdUlj?|$Dh{bqV*J=0l0la%A3s_nVuYWn=7q-ECq8HOjf-fxKg&+f@6J6#ax q3u#Jh935TLptU&QRR5mz2iW+3=bk*P=--q5Vf)(|_TO@bjr}V#m8a?e literal 0 HcmV?d00001 diff --git a/wxParse/emojis/32.gif b/wxParse/emojis/32.gif new file mode 100644 index 0000000000000000000000000000000000000000..772eff23e345569189e0dd16516733f20d7b4442 GIT binary patch literal 7189 zcmdUzi&qo(x`t;a_Yfe20O6isghbE=1d57wzyJY30;LiaHC#kgXk$f-E!}4lAY23u z2nyEPfS_nmgGGwg+TkJsUK;R*NZp{QXl)CMm2SZ~2^UMN-7fdp=d69^FPOF7-}8OX z`vnC0d(DYv0W1Imfajwl*c}n}%QCFp18cO!23B5cKi`(h000oXIsa0oIrbnz=>}jY zO@HXTTq&`{`a=$c;jxiw?3^Rk>-)UhZ{*56?CD28e9rl99p%BjzAM}9M~5Fg?b_X6 z#;R2WRL7az{(E=dF?XzE*5J*y@BZf6{0VQcw;g->$v+BH9v?8eU7LV4aGoEh|Jbf+ zkbB>6RbNyXJUQuf_e9FmmgU%~_ptjhzYX5So@QYqzwQkrFP{crLrDi?7}!5Pzg6Ob zJuAXS&pv-r)PMWtQ1hId+vhapt!hs5=&zbN@bkll-RqwIc%x;rQT0Y=>^tk8V%ys% z)2|)dG2FJQE!z{r`hLE7VX(Ui8|}DRL~GA+dDyhze7f~l?^``kyWafj)5o{JzpQe4 z(6mFlcg5W==z~>^zAt?qTs#mGAmB0Ghk*srnBR@RG`+l3>D=iWn-{`$=GY0gJvF4s!tw{5Z*y&dxPCvI8= zqy5vF=w|B+0eSxB1|IX@O5|w7+_2)8J7X?8cmy@=wof zF~v};i+Nta|M|!H4NqYLT>u9&SnL<^?m{22pW7?}4%GdKi~eWym;hu9I8Lz9a!y~BMYI_=$x#yOQ4zvLV zcxESG`aQ^cdnbGyLZu`JmS-Y8ntFy{w>$~}P(*GKPng60&5}uFabQQ=5~`Ghv#8VZ ziaDA_@L+~!<{k;~)FxAFiz$DhgoAbkNQEeCd zGjQ}xY~&sgTr&!%ew4>*^zHCYQOCB+K~4TC#tQD^%RJ-UzyUd~fa}k}jQP{ci3Espk{CrplL39A25x|j^??hO3@5x)327MZgh5^%CH9UGv39bLq1Duz#BlO z%%qVO$2lc5&lwlNpD5h)*EF1>_i(vP1Rj4kygP$@1nQN;bc+P4lc%YS<$ zAmsr(P9+U4H6{|MlIk2s*nr4@Ky9&Kv>bt8!oxYh?dF2DR6H+lr{Bxz)`Nw-l7!nx zdSw_-nhumC$2lXmD@iT3GSTu(+_DpH1IK)Q_gcIUx_ov^PB2(;sitV{H%0YEjCU0x zU_(O^!^6^Tt4S6p>oJ{vMB5wJbp9%@Wpm(ij{(vhbbXV^yx?v<&UUMf;a98GoANsj z*q0ad;7HuS-0*TT@x1T@xu09~vBNkMJ9}6brHKv<$_qRF;SVhzANk2x?f+qTce`op zjO~yCBoPzZvU3=HjmeaVSkvhto_MoW(3E7=rKqVe0_lM08etC}@2-YsZc1QlX%4&! zKMsy7Edxx1VnAuQ2UI8kayb$jWGkpAdzG=|faPA3MiMcFr;U`la&RDCgTyIkO4}Q! z6VnI8=1J#^KnvGgAAg)xOufJ9MwS3CT*4C|PaLijXfHvpUI+O@T+w#cUjoDtaIeUW$g1iJ; zY65RSM{!l{r6BqgirEOTjOhkLln615Hz5n;S!)n6=e;f-8wiJNbXf~8O7>-yHVw!@ zCu+IX`rsBAEsXHgLj3trF)$gwS}t6KvuW_7#j2t!s1i+klMRs;rZS`Ex_(Ys*g5E9 zsvJ_ckk+w!5GUHFz5YZ;4GCs&yrjq%9QUh3}ozM@)h9h>gCe>;NpZI z;quwG7{`ES<^mt(8brkgAij1-I4M}rkO!4#h2YlcqqU<(EJ}BJ z6~+nfFfpo0K(sVW5K*l)=c7?NeQ7B|a!HZ?X-WqQyHfS}s?>(#EN@cMU&FH66NsRv z`XUGwNTZWJl(vX1AtRG%i-pJo>cSbsjc9&DKr`EC``ly*l~c_kXs(Rh+h=_MY(9@l;VuJ3blZthfsF6^R*vW2S<`{U_)&T$l z;v#A1&eL1K>`2Xc_~aG3@T-Q0?klpswKY0__#App7ye2cqAISDz=ZHN+9l0`6~uX> zV2T4MENVPwgs-Ht0n;Rw`v(igSM^HWs+OV`J&)Fm%D&x_$GSScs`FipUA%2HWv4{4 zlVNtO$2%sbxz~&(GZs=9&{qAfo;zh%?@J!UTYO0yBC+#Y@*8YF7AhdBH&X)x4K#rI z){H_a3P&fKhzvgymt`9+qX?p3n(Eq}OngA87YG^-h5OoCk=@hCrE9}l018*^1DXig z=r;XS-@1@5jY-fyhnM><-;DSTtnp^1eZ(v&$T0neh8#sSn%1w64V zr!fFbr{hBx$zEvtw;!?eQWnA0uut#)6pO1F5|xqy;#rd_8Y0BDBdmIDDW#!8NrGWN)Ph^zH$NT z1D}MzfTaWt&m=+@*a`qj&}SLP(@kxrT8dkPsFk>6K4O)j&oak)vk1oNv&7M<$>{r_ zU~EI9x3^B&&@^@21lqc_&rd|%bOHwJ1k6s;BmeX0wjUeaFVJ466vzJaHT|!mjsKsZ zeL3UbgLYH)tI$5AHJd~m;EW7dxmHaK_@#D|6fddYmi(UNecq1+j`buXQ30z$7Eu+U zWN`83t?Bn8HwjZxf%*;g%IPs4xgBRrqpIAr_K3Sf0QIAO6AG0#AVwjOJR9JhsuU|g zTt>Se+au98+tD*&Itnqx0u;Zv2F_v_(P|(os<#h5DbPn20Xa|E{7k3MNxaofdxv2PS|LCRpRmMjyN!}_Bw1({wlPkZ51QkNGjcGp7YW0GdPy1f~Y#G`siYe$sj8t|M>(!hK(Y6_}&X><$AFIc=ECxs|o zbaMrc*lpRMG9londfK0i{C^wuNk{*W+v1P@y<2>FNbyU)UNfCgA9h8p8|L2@ipM6u zZ^D?bzil?wx;3{g*)?8;5G0-6g`XD3M+=~bV^0AnhmT!}|BQw&Z}r`6SOW)5v~G6w zrHR(r4!UH24>#(h2iC10nH4Sn?NQeEqot|iC5aqFI3;;$n;T*Ce<(u;ln<4JFu zLVEVATlXtTH$#G0X1Zi&XvcQCV8?h9<5G3W5`tyAdkT+?z|?{C%es4tpaF37XQMf~ zdkT;V*$%u1=$aS+y4Y-qp71koy`M#tOtfy+l-At?8rT&J(rxYCqeaF!scI!?l)}jO zT%|v%a1$0vbn(J#$guyL9#tmeeYK=)4A|L76-w9ij->N7}m&;$2FwgIuSc3XM1K%n2I=2SEJN@*wPP!}MMdQ*PKPKJD zW1=>o7d3iMXjk{@oq%4{w%Yr%f%GxyHlr36$Bc(M(l5kK5w%2JyC3gh!YqPy$V3N& z*S{3%qjvq|_T8{4Lw8C^RH`N&jiA4WzS*7ZHM{x$H?bF9Pwa3FoJyey}R|lVfs_Odw!@07(Rlh!|06RJ235y&4cJrDy|ci>*i4vUt?iNdhDS z+F()9S{qQhh*slSyy^r{snQCb*jfyVh!>3)#cG{RfU4c??!N3x_p>u^lRV7K_jgTv zVw`exh6soNl>n%&>0fKzsMbizc{pZJ$0T!t0d;05)j5f(alhEy_{<(d)%h7mfXZnQ zb#_?x5I~(8ME$zE>rC~teSGSA0`+7~>!tJ5W8e2lDbKJV?hf&X(sP3H3 z>sP6s52({2yJo`Iu3V;`op{)gMm@E(Sq4(S*6i2EKRrL%Hjhp{`LxmC>97VoIv_u? zNO<^Ghdpw?e zJL1@;`R7*&8qDLnzMXcXwdvBX_d04-`~JOeKQFrdML^^?UUM8VcHG%1|V2o@ybS)7KNW@Z7 zZPzL*yisPE*+WxHupkt4J|01GHZtbs;N}csD$f$3)sB%wL&9wKri@GkpNeA2R8rwN zuK=CAAYED|v^9ldT$)*1@y=x+6UlAi8heQ+il$~ak+yPo_gh%5qXXB;-@>^uQlK+q zLz5S`Y^;byVU!jrHhL}StaFp%zCf!#@vmBQLh_KO957>j>Q_>nb`s?dg3ta zA!|Y!e+lJ57CJ~_hZg8m@L=s|eZG+?z{zf}y<3E&|?0lwn9iV5SEf;YlMGyz^ z#g?m(EJh8GfD0Bq?BPXYcn+&cC5sfv_GtdQa$FTNc1sc>`DhuM$ImTpE`W=3@(M*` ztMC(k<2uW01K8;bV=3%rWwHjyn}S%Q^jkY{2m(%`bQjT37{I{OdG_IpnPbre3{vDM zZ%%C@Nh5r*vuw7;217%*p~Kr46?kCq7+i(BN97mswv` zPk$Zv@xy3k3XKZ5`4)J&sX?q*_fA<0Fhg(&Bo5WsHGjo>sYTI+&@>dYPEguL&1VR> zr5bPTY&r}>4s3XuO4WJ<;t5Un>9j%_n&;veHIP5}mLk^?r-etvsnMEkHhrGE|1W7h zIM9Jpk-~ON4Ur7)pujDuMHvXehV8-f&6;lvbbu}+HRbuQpXrCirN1%;1yeMJ0xTc` zP5kH}4ohYT=dEvhpczBh^I#g0T;6cMBkhZHM{OlR+~lCeSxp)m!8}+38MzY6>R6uO zslxzh4ie@>Vq`ijv`8E1h$S5N%n)ixqwTZl01>))(RnUjF>11iYfjMd$5oXBmj7LI zoZEz+C@D6+Wq6$LD@y~-zvDIBSc3HNvXJz^Ej?=7MXT3;FPUx4bF-lyA?Xd)@;V~} zN(jVpiSx<*V>I&YIwJTgmc=O(ynsNrmeZpca z%NC@UaijMpwCO$}y`-olm2@EW+fpCUPzSn=6pV_;w-mBL3u9nNW`3=nF5C$NQ=rEE zw(gMck%|z7Lf3kfKxVn2FYXiukW*D&FLY%o)>X|GjwGzokidMdQdfS>q>I&wW$Bxv z3s=%PwC#(VYor1w{(?J1^Zh{j$K!eFE!xA+QDy z30~X*SwedRIw)VnUXX(kV$#I0*L}Q6;_yxwK!39*(lVKF<1ih5Rt;hqLmxUdY;jvM z4i*6ryiN?A55gJZaDq4~86D#wm%=UfD+p7V0QuWagSWu47v7RqBvV68I#_*Fp9<1-_ zM~0^2&%I?2`^{VAFYN$$N`OFN2F{`daEQTKw8*PHgW3>28V~tAb|X%LX?aN`Bq@-q zAV#u_R;aR{mLgo;PwO{Z0eZi!bpP5`a9nl2t^P|53o_lyy!Yq{reLO3oUj?um-&v* zYqIJ9QN(0hOamQU58wWdqjLj_!^lhR$30WV36y>Z|Df3H}d6D zo9cC1?CQA3FdQqOsZ_n$ZxjwyVYpQ?x3^)doA>~D;Y;z6EZ9;sES3ipa4 zfOQEGr4MJXjZ6i2LkedJOj|s1iS1*QE3a2;Hyc1JEh0;llv_U!TC2-RvgV&Q$PUj+ zUb#@ACnvWH_f9%s&z}fErw3q!t4&~jOiM5l&p=aLc=)f91E!@gCA~Z7FE&ucRmY0x zVoh7VK&bJhkE*he%Mo4FF^;#FrF=fCr^(>MHrtzdbI$=&00(X}_|4i|4hH(O0*~`T znzG~hORF44ctB(GH5|DURZC|}67>W9>9iLchz{t0?>qsT50ZkGxZ7E>6nF+r3n9{K z;K7)L5?Dn{Avyw=gcFF0=gXXpqxitQRRPkCjgktPzszGsZN2Gap@G5kk#2wgtj*Vm z>)r)vlB(v-=$p-dMY8nU z3Q2E^0@pfwF|LdLx$m)o>~j*qc>$^V_{|Lgl_Ucjc@W8HTP(((xF*Z;my)Z$19`TAs<@q^BwAKt~*7HHxAH>v7aI zf=n57rVMz_BRa|@MuH6@G)k#77Pu+h=T=MX3;NYgkW8*u8VwaZy=FKh%#_zOx8*)? zqxm1J7U_}vm8a?M;AVxUsEP@fAwVHR9U@QX7{jAZm2!G_|Gl=iO&==Nh}N`YcP798&jv z0qCR0ZV}+YTe2kIuuIS3@xF123PDI_%Z+xnLY*8NG@voN5>v?9RFkg E4n1?-W&i*H literal 0 HcmV?d00001 diff --git a/wxParse/emojis/34.gif b/wxParse/emojis/34.gif new file mode 100644 index 0000000000000000000000000000000000000000..e9d42131a9bdb8556647e91fa3915425ab730102 GIT binary patch literal 2140 zcmZA1dpy+X9>DS6n86sDW=0pGq9WH-xvY_x8TUaUZFJe4N}aYgx03cmW6b1|S16Ri zBBbP$qWhL{ZPIcO-Q3F*k)5ewE`EOBGydwF^WXE|_x<{Qp6BuL^LD21F+dCuIUo}c z8~}X`b9baA`U7uz;PamMmu#ThR#X%Nm%CDH!qs$!>VOqc49cbXZS535R}1 zNyAQ%9RXQl)jsOn025SvwAbau>E)nI$68Hcwm{MLGvw~Nm+S+Dd{Mj=3~mBZ1_;l5 ztn&s{oO1L&$oInt3vJ)fk*o_-98^95=#282J&Xk^uLr?LU-Yq2W4a3{6XAuqcw|u7 zR{&GNFtQ19j)8O=JX!>=?WZ5wgE;L?cRMBygaK#hbD0}vL-BF=91LG~Lc2ep)ld}& zeY@sr7QnbK^zVhn<=8z6oXLT*DCj!`HxsdUn?Qa9p0Z)kA7)NZKX(LqJj|6t-wC*t z42nB26*zj4Bo#V;{xk|R1)$7>OBsNcd=Z_3ZvUBQJ3!2Y*(|7wh29IZH}#-%9ZYS9 zJRWrX2Cb1GJr4g$hYx!J&69W0LF@}tMesfVDt=eJ^8i%|^w_}@a~KVVZ;{xD546*v zWhI=A8m#i3ezFF}z2NInm}Eo8Ug&lJp&``xfIJ%NmVd3H$a7qv*lj3nCDiBiW>P;E zQ{b5`)NO)mZqT*uMIsRtWi~>LX@1 zqitkgrH@WJimoPf-H3l%lPG(2Vfwyh+wF^3u0QlJTPp>#BNeFlR&A7Fd%Bsp!UC@E zkxWf0THPL>+dqe*uRB^UvNVSKUSHd-1F134#s%34v#|+#8gSpBq4y;(j7;)vBbbq2x^ey^!UH`H9AQneAjMZ|Q6Bc@qo~wvLr8a6a5GUC zp;2ZIc@WyjF67v5KNkO)fVg|FVGosfroJrq&lA^&InRQ*&PcVT;>uqn?tpixM1EjP ziVb$$;r)o+z?G$hEUEO9$7y#m_LTVM!V zNVdschKi#jW7m=hI{AvS(cx<;n;o6>LiZ;vpmR9}4|2BW>-5KOX4pzoqxe=llAi0q zSn>7x#DJb?OYu&_t5j0-o_LDnq{%5!6e0kbjP8;L>4A*iHTlUNs$z08S0!I7!P(L$>m4xPL; z?xHRh@qlse*#!mbR(Y*TuTBocy9Y2^HS2562RSvnzSLNI!J#wBEJ8pF*gy}HwK@JJ z$j)$Dis-W(3B-Np7_S1FNH`BYCWGwNF{P}N;|^IZ)N&Uam4=x34L z>b_EMHM>xe(&WiI>8hBG&DN%HzZe?GBrU~=Kp*W5Go@rPxHv4vVa%@4-x>r8YK{rh z&qL$WuhQJlztFiFU(!h?LcV4>WXlj!$~MEe35VZ}#>R%0uhH!|VwA=nXsJDD^oQ;F zd$x^a8eZeOihvN*CbC-fn_7kX?Bf*kh}tYaQB7%6D*o;MBnwIVid20AmA^B4xRpEZ z8Y`8w{DSbpQ8T)rr8t*+6;l>08yTqx!3}{hw@%z8p#oOC{w+ z=}2YOIYELn!D5R;1Ej9BS4rOicr}2AP}G1@1mo;i z2gwOJ--b$gS3POR%4NlmT+N9j+QG_xp$o0{&_G+9brb*p?-K=Cs3shqC!{e=(s@L< zOOH+SZd~OZh8QR+x6oXOIWp7rM4zQRhvOE@@+2!4tzfXLJVj9zsYW{M6o4kLgs`o~iX4?aowTJ&_1)Az`3)J&Z z&Ceg>lr(UqdMs*KL&iluXvG;kXdGgY@wH*-_K0kT8q_?N}*?t3wv9piOvLKo;BwZu`Em$>Mf Xuxw23Rfpg9B+Sr_#wQz+kd6NVg=R#0 literal 0 HcmV?d00001 diff --git a/wxParse/emojis/35.gif b/wxParse/emojis/35.gif new file mode 100644 index 0000000000000000000000000000000000000000..d6da2c33ab4139ac5ec7becbb7221008e0805034 GIT binary patch literal 13392 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 literal 0 HcmV?d00001 diff --git a/wxParse/emojis/37.gif b/wxParse/emojis/37.gif new file mode 100644 index 0000000000000000000000000000000000000000..92efec6ae180c7e685512017cfd06f75c36afa39 GIT binary patch literal 1195 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 x2->BLyW(_(N6e(g7IB0|H;fd~Kq literal 0 HcmV?d00001 diff --git a/wxParse/emojis/40.gif b/wxParse/emojis/40.gif new file mode 100644 index 0000000000000000000000000000000000000000..24a8eb69149cc1b139e24d3ada04246c42e05c71 GIT binary patch literal 10092 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 literal 0 HcmV?d00001 diff --git a/wxParse/emojis/41.gif b/wxParse/emojis/41.gif new file mode 100644 index 0000000000000000000000000000000000000000..99139e1d1ebbb9123de502b7b8bc0127dc55334f GIT binary patch literal 3368 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 literal 0 HcmV?d00001 diff --git a/wxParse/emojis/43.gif b/wxParse/emojis/43.gif new file mode 100644 index 0000000000000000000000000000000000000000..43504910020ead31098a489ea1e2b6fa51e8314a GIT binary patch literal 4327 zcmchZdsI{Bn#RAKdqN01Az+9Rb|45MXt*d*TTLK9K;?vs3Mv{ba)`~T;Azwde8 z-}{Dy1`8I%vj7X21AzI>q`6^6rY|sedYRj1Uhin{R5Q(YLt0X3=7Htrv$m5r7Qea` zYJRqA^nuabv%vf$$~+X;y3=OseE3ZbY`*Sy`^MEf-*C-c-lr33zic93Ypi+Lf9KJ| zd*ik2ZWYfwmim1H{q>a(d#ZQd+{<}WMSYR?vGH`#_|3yT#q+*gN}ssoe?Emda@Kva zUwR^reD{FW4?7~wFSk_0;@{knjJ5uKq-FJs{{lCwoOFx472tW|}9fCTb#nJL5drw%~9Wak78?ME#aq74H4|*zCuX;m=e@YCdwF2pX#cj~z9n^kzv|Vs?KggmeLZyTRa4C5_~WtR zrxPzq3kL(uOR{`T;;@z(V#X1&8tyL?7keMhf{J+0ui zoIWsiI^~>FINBWB_hWG1G2f$!OUh;NjjmsZD(L3hyUcG|e{24*{cy~1qu==T&<9@& zCWj0s6Iu0HTtl(4ukDx1huofZ?3=t2^7Ag&yM`R|L}t$+=K(GJpu(yD%f$^Tl>Sp6 zYNIGc;k4%b#r>BIXFum=M_d1PyYc2Xi+YOZezVGHu*SPMmjCpa$DM*jcmCb~bzA6o z-IrG{>L+imX#SiyHrRfp(5ZXB-RQuDqp{3i_dE5Mx{p=wF%^0|zZB3_m4CPO#AJ`m zJiLDN{y}ZrtSja5J^P$r-pZM1Rt|KX1OKXzJAuPfKri5$t-^z%qXI?JAfGvWEQFr# zX{o`|CV*rH=gAz2PHRXb**X{V14uI#WUpS<9feJIO2>pO(^o2*mDu#?GxYeo`2pPd zua3(!T30N`HhIU05>{AGBO-oTdfNaD!HN&dl>-QcO-*S9hUj42w>AV;w*4^#SNd9xV~t7cP#|3fc=Io7ttzs&d}S z}+D^~JKY)3`*@Jhs)Cy*+I3Wn$I&wBzkiaJS4ix&6J5E}C4c2?^PDuxuw@FR5g zncPQfm3A|V@r*}Gr~&Kg6}MrhvF>*`Wcqd?JUfKS7vkATLwc-LG+(&OF#$NO$3n6k z9~(-FDGl2GP{{~lB3e-muOl8@-f>)k`AlsRL;2i$PIIAc^r&0H<3N z3eQdO38rsl${-etjMFnX{76LsC%60FejFYL-aF@s2Sfm)KOhB8*`zUPR3uxEwJlPa zA_JZlnI)+#4N_wX+t&(fy01N3ubJ*@?GTW=iPWqr!{AwjKk4EC z4pp^9b;YRelV;hJ{iv?4q#+ZwW>|Eaa%egV z@7I#GB|VBv7n#(E=$%{AY4X9dEVmXt%s3e1j%eH(6jS0%G{>G;fCWrc9+1i`;nchJfEG-NAD^!FIPFh z_M0P5%Hpi+KIq<(=f0t|Ci{6n|9#=Sb#>rMk5@r&zSkSZ`0vU5_-x-q)?!aNfnk$- z{+*H7_odrTm7X(Yq|Q{pQc^s4tcuoIi>zE~NJ?tFIQ_%m+ycU|vw`{@&8y+w9$A(q z^NanQn6NhP%A+e&(oC~2SjBo$77y0!Mbfrn2`XoIWsX|5XlKXxEUC!fuVO8$(68FV z2@40zVu~8@^BBAJ1xZ3xa}#zB+NEc%1@R715ndAa$5XxgabfQQF;yP~@PGlR=+iEJ zTc1`KNw5SB4MaL%WbEwbi$qDG_TiNRxPk9WI+wl=sVc&eh?I)b_+>|@;pVy^l0zB@ zNAlSiK#KJiVG8hA%#?NS?r+hzLiNMn>dUg;23g0g=hLi`MTN4yOeZH6`-=j) zk1MPpy3e54HyXXH_OK{;M>sVY0BET*Enyo*Pj+MDSL5W~2|w*|4b12UvOurBpZJhc zF| zaRo?bN#$YH6^5zQzdaWM7+??V(0f@>{bYW;8eW*ps4mo%6DUitE;Noebm43K1{yQ6 zBQZU15rasn>is_IrO0w(X6G(cX^brdEu=ja4d z;U6gc|M`aFIdP$A#x{UalLXWG0v*6Y>?~esj6o~HIUohCSw_&72K`+tn@&1@nT{pQ zxwpyL6@Sg;Q<@A3RChTm-6aB`pC5FHx%tLA*^mUyz5r~05wG|`f%-P`vy}j{c*}nb z6c=RH7@mA5XMr;AKXT8-N!zX&&|d6cSSvg9v=?*O`ojqs$Wl8o(56h@L`j3EgHI%B zuP|)iRJafh-<^kIpt}wpa>hRLiWa-SiozObk4asKY-pcCHGREwbEz^t9>PwuW+PG? zQNS2ro*d8_^Q1PI`!+JA9$+v>>|j`d2^3U`h!|@IfUwb017!1o$pkPSCK2Jq;ML`J zs}OH&8dfa;c6MLLgmgUOZY1&B6=J}ru!JrYDL;hphi^<=s1kF>V41iBtVm95f+>L% zSEsqi3aX7z;ALu_kzvm?ZG>`DH$g;?VCGwlOtm?Tl8`t>st|DAVK7*S5L}LwGM@zN z(~haERtx(|bUiAL*hk+7`t~TcVv^y6ZKXZr)i^vDAedYvfFGA=;R#z6vW_H)Y7F>O zBrMtlV2!pis!bmV)|eD11tZDwG9&{)=UfFwOlz5Aul+rwfE(g3#hfF{I`W#bx4Ly^ z;f&To2?RD|?5>3L8S8sbCcwtF@F{IF{;zoY^sjiD8tE=!YC!@z(#cLTMA+A_02I$T z;}T_iBL#=qC-WZu4mD~fgM|sordcttEzXgf8yc5m0Li^st}syDKyj8qqcCWJI$Z6s z!nw>E%;)bvzCynu7xxa4Q#HJey#466cO@EDi;jY!_R{4GP zP?=t*P@*#mKAMU28ItiUw7wat3-^5qXkfQoFP31-6{cee5Xda zJ9S4C9xrK^nE+=oOQ^m;f=yyH=#80>aJ&RVX{XoE6F0(pu(1OX7`%U^R!E*&Ez3wq z3_`a6O7aJw8s!+^Cg4UO_Dn6B_9QgzGe{R#NfLs2WwKt})JFI=KK~M0{dd+yBmBnB zf2Nh6{*XI3H^JAh)Z?)6%JDk43eJ&;HXj&p7?=I zkFlfb*19+*3D>Xdjo#KomGA`mOvapY1rZ%ELM0{-U>UwRQ-3nlSgz-A1rdNqU!X~M wbd?%i@WR_54JVS6lJglB|CU+&JCrNRem`L1MbKJ%J?WsmT(Ln6L158;0yb<`;{X5v literal 0 HcmV?d00001 diff --git a/wxParse/emojis/44.gif b/wxParse/emojis/44.gif new file mode 100644 index 0000000000000000000000000000000000000000..650d3dd84026c33b31712f94d1c189db2b3e7295 GIT binary patch literal 1571 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 literal 0 HcmV?d00001 diff --git a/wxParse/emojis/46.gif b/wxParse/emojis/46.gif new file mode 100644 index 0000000000000000000000000000000000000000..f3cb0742d7f2c12475b1fdfca98a46ce3d1dffbc GIT binary patch literal 5162 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 MvAwGZTHVF}1D`W;)c^nh literal 0 HcmV?d00001 diff --git a/wxParse/emojis/47.gif b/wxParse/emojis/47.gif new file mode 100644 index 0000000000000000000000000000000000000000..5b3057ab7eceb885238c9308a9591b118213703a GIT binary patch literal 3685 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 literal 0 HcmV?d00001 diff --git a/wxParse/emojis/50.gif b/wxParse/emojis/50.gif new file mode 100644 index 0000000000000000000000000000000000000000..029cf0feab9660a39b25111936e9b85835bb2a8d GIT binary patch literal 3073 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 Khets$pML`I4Xz0Q literal 0 HcmV?d00001 diff --git a/wxParse/emojis/51.gif b/wxParse/emojis/51.gif new file mode 100644 index 0000000000000000000000000000000000000000..69f183f043a276acaf62658536b0c4561492578a GIT binary patch literal 3731 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 WTLS2#EB0uYB#v;55Kcmo4gUh0RX4N% literal 0 HcmV?d00001 diff --git a/wxParse/emojis/53.gif b/wxParse/emojis/53.gif new file mode 100644 index 0000000000000000000000000000000000000000..56352dde46f7f530c7f4e9cc71a49a8db2e5d525 GIT binary patch literal 2056 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 bLsE#_O3>i{wNn!EA3LMRFhuj(&iDTfDU)yz literal 0 HcmV?d00001 diff --git a/wxParse/emojis/55.gif b/wxParse/emojis/55.gif new file mode 100644 index 0000000000000000000000000000000000000000..e18da84c6e550fea8f3cc25d7d64188816f641fd GIT binary patch literal 1582 zcmciBYfMvT7{KxOwCA*kw$chMw-GLaMJ7xH12_;tEYw9tK^(3_L#J*)aPz*&l(Amu zg#s-FY+FC&!$op-4wsEBe%Tk#_w(faJ^%Mj z+>#KvUgQScz>^TbOU+1rSA+qOo^v!Jj=$}L1Id}W+js4KGW|^WQC?iqJ4rjUPhYfe zNf!+sL85s{F>j?#*>>D}G>Nsfg+<2;GIPH?b55nHEY#NxjXnDQ=7{}$Qun|JcKrD4 zeG-`%`4NN2ok4>~@@5eNnTjP(h#6--?t4FGqR+=B>>>CP;z?90#;E<0C zif(@b+q(NPCR0~$!?Lol&Q2^n9lY|-_c@HvfDrg%^tX9w+v4K{ywEp7$Pj*zAmT7Y zCP1|p2*nbqtWYjtausSR%%sA_Y9^pTeq}lt3oNUox>i*S0YrgJz+6-vO(!E1Is}5v zrxZa>Zz8s)v(1L$Fn83&!N#GRXw;~4va4%Dg08heXK5@ZTkZ5Zin~0_ifJT)3lgQ$fK| z2;JE;Zt0C!?N#rl+Hbjo$QN6`QWAGHb} z#hn|aR0%n<;37>CMO$9M(4;6KnTLj?HC0$nDZFKKKRXb6U$W%*#U)E&MUj-LF4btu z%7Cu&q~1_f&8@D{Gvtt|uD+qMNgE%bi{C797Jj8`k*pE(c_$-yB)+)4aLHT<_qhO9 z{7@srTqZ1$E0jXKT%k%M#M4pzO0{x4T{+cNZy?Iy$xUVzk*>Zm__UVj)1{pL!p;G6vVBe9Jzfg?K;gn-Weeg*Y3aMJ4?t3FDuM7NbtmTBQWVTbB`0Rz1W!3 z2o}vPHlnfQ3XZ;tTx=(v=6vKq1nQed_l();w-(V;t!)cvw=BC)aXJ}w6cjwA3Nlgp tnME>2kh>go3*_FHku9Mo?Cw@_GC%BdZl3SDl!}$BV`gT?rUgDA>M!*I5NrSd literal 0 HcmV?d00001 diff --git a/wxParse/emojis/56.gif b/wxParse/emojis/56.gif new file mode 100644 index 0000000000000000000000000000000000000000..edf96f0a63e79e6eb80e22a0774137dab2852e5d GIT binary patch literal 1170 zcmV;D1a13ANk%w1VHf}y0Qda>@av*qqBrpW$N!g+$mO5Z?W|4B#0*tze)hmpT_|3yUlL_hdNKmV|$sT~>iFE98yH~&{p|GKdMWmf-ZSI*zW zx+Wsc-oyXm-v5(~`#e1VuA#3oB>$9(|EZhrA|wBOXzd^%?ja)oZ(IMUnerkd|Dloa zAR+NNGVvxR|4T{#w5kN(%! z|GTmOcxU)AGx%O!_KSG&G%&r=ec0vD|Fx_C$ie@1VDu|3?y!8zT}$M6XYnT}|4m8% zva0`IRGrFow9R(^j(h!WYUc3a|Dl%uhjaggfA?f%|7=$OP)qM4B=IjT|ErwvNlBm( z4f;1Y_)SCqQsZR1JD*te3@H#p5%%J~cRsV;8|BH9O(tg23 zIPgYC|A1@%TT$=Ul>dQj|AcSDRsVQm z?I|gRvr_v_MsurC|C52sab)>AIng*W|9fWc9v}EzOaE0)h|9ob>JuctfQ1TsG&1rK zqCpSLQcQSM(c(ZpGc?)ALan34YA!TnlU0vfm=7NNEukYyM22$2Fvu8Xu|^d`*2IXz zqYq275XB&>k)Q)sDqXFhB_VPTF_KBEv}xM6g!VG2Ya{O$hX^C! zu;8(SSD9-Ep_yY41O^xib}X1tfk~N{F3zH$F*t?EK6cRD>4UJ<-=5z}LP6?q%$kLcHam$#1F$f60a`VE| zmTgiB$vLvZ8!BL0ED0zO;L1QN037&lDT3nCmqp_Q0g9)<9jEO9IuH!7AVGK^LvWqQ z7tB!$HbB7FL_tCXV2d6A0H6vN@cfZZ9H$T=009Oxa8Ni81dt0l_9dtd4o*y1p+bEi k(1`)}%(B1_rH~QJ0pxge1`>DdG6+5gJg`AbJO%^+JI{4q@c;k- literal 0 HcmV?d00001 diff --git a/wxParse/emojis/57.gif b/wxParse/emojis/57.gif new file mode 100644 index 0000000000000000000000000000000000000000..3f0e2b9af46c46a72bb935137f139294f16ab7eb GIT binary patch literal 5072 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 literal 0 HcmV?d00001 diff --git a/wxParse/emojis/59.gif b/wxParse/emojis/59.gif new file mode 100644 index 0000000000000000000000000000000000000000..918288b007a2b32426fdc06ab03f5567bea96e1f GIT binary patch literal 1533 zcmdUuSy0nw6vb~sfPYBDKmb!Un2-UHfDIZ)T!3us5m^H$Vh}5~wiXAW>VqaM3T}nM zP{(3TE$)K}T|ltXuo@gHn-vf!i9Qe!BTGmK2EIb4&wcNCxR2+Y`Q15T5upLw(rG{g zvj$KapuK?h1KJ1k34l_;91Eu1fZ9I(Q~Pcq5nhapS>iwu3g|U^E*2J&U?>D`u)%Nv zP%@xBV3mL+9>(68=HdXQz(^P@NZ{8m*i#W;ih>Ct^aa6(L}(0xmm+vt5w}N14_1FjfLCE)5Q4T*IUE9ACk1Z>&{`N`T}mGwGxSwkZaG^MphgI9q5$=I z)&)avAdCltDF!CPz;e@hw7vvA_e33@6C!wV|5SB6HWmTD@S%|pZ=<1K1gM44R-Aye z>~0ZQR8*v6KMR6)u~5f@;cueNH{@u+Ln~Lt$XayoWWoeEp1(fO*FfZ5Axn1m<)$HE=+umvnZ)E>9o01c5t4fvtq)}df9o{1iPtQ_xZm^k7!+w};c z`Poc58uYVN$wwQNbGN8NkCeJ5h&_7v`4+`f6k=$@nB{b7%p)Q zWtrOFm8jp#v zcxwZ)DCfE=3(iPWw&!*x`F*!8Msv#JCZ(DENq|$}p}cbc3~(86DszZ($=~-^mW=D# zg2&+>IC5;gR+M_#ZuOU`AfHGkx&f3(s`I4hF#I%6Ex1D{qPF^QWMA&jz@<{kvt_c& zX+M7UoK}0m;dT3ArjV(BO~~I8-)Su6=%3lGz|r2@$}(0q@fzG2DZ)Ha0miAQlI@e# zoOP36({b5qbv}6&rlO?d1P%_WE!fOVq4Xlf-LW#2QzGXdcjDf=t)1jYROIbFk$O)! zb}n0=iczE-yP|KM?TJl7ECg!~&t6H(0)Mfh)JBGVdQ9ZZGHPuwhDM>mPKlh`1?4oI z$bLon0MCB&KzGl1Uk?|`GH~1f1g=prHxV#N0Jlipbbcq5C`t9#NkZk=@Xo6Yrmm*! zYTC8*%?F>{Ub8ja%QtuWO0l>gMtw}naJ;^ah~R#4Iv;G;#aRCZ?k45PnN9eNcJNlQ z4!Kr%+dcYCH|ZfCBoq-a^>&%t6|U&2i?|h<@2(=b4G3&Oy{FcJTwV z1y7DUjaHMid5TIK!f{cN_Hcft&)3ZR*T{v8@2TXMV*kFdX2p&*v|s}Xp19}9vjTa& zX9>lBa4LL{S|18XY{II$+oW3lSrQ?+NToP&qA=xjBjut~bBmm6w}~T>ZOpUFaabGV z-4T}+bStHYIBOX*lpv^kTHa8 cmcA*HM#?!*K&5jT2W;q_(v~o)Edh4?4Hk?_%K!iX literal 0 HcmV?d00001 diff --git a/wxParse/emojis/60.gif b/wxParse/emojis/60.gif new file mode 100644 index 0000000000000000000000000000000000000000..66d21136de8dc3e26949cd6447d1ac9881e1a2b5 GIT binary patch literal 2667 zcmb8weLT~9AII_EZZOOmA*9nt;-Dm*BS%+;B;n}NRh_O=5jie(m2%gKquJcw4s$Oi zHz7B3({gXKW^U#_Oehu_TWmAqbaQs;T-E97bag$hf4+~;|If$k{XKHj*6e_r8lVQO zNr1HYX#UcRW!}OPkCzscw6rjj9+yOKZ79ejE-XBMHvROsH*bn=XOT*aL@UCC&}eF7 zU69Wu&iq_=d)w$>_xvn-MX)r%8vEJXpU36QvY!a~OZgcY0zMyasYWJM4E8bDPp9h2 zOBj^qlvCzYk4INlmPeQju}DN~X=tjcTonl;gRsdF@goDn%iP&gZ~KDu%>1lWjPEZ4 z%-%s}w^%H$E-fj_Arh=Lg#5)vgME4FX%nnr?)+3%i60LzghD~fgF1qZ#vFTwPHCB$U_F}{WRLfc zjt)0eSCFen{hbf{J01=&T9S^gf+=Gf1tS<@8xOdqd zVlS<^IOleKPFz`pZ^>n+xR9va>u2*quanEm?pKu7-76{cvJ3F|iO*YDTU{ZO$;HLR z+1c3zIq6+pT{!;`29+Keaw8p&A7XZ9IqEJv=Y;wNX5-WDSJu_nREk9_p#j(08XsiD z#J4v;5U&boX_&I?G(v2|aDQKbx5w(LC>nE<7~onLa^cE_f99qq2YOv8D=eZk)Rh(F z-SP=)xL@1R)=W%I@9ChG{A62OTRS~D9(5zAG?&;{Qy7m8j|mEo{UtKt7M9xFM6N2o zecXUtSr&5LFE1rK?8eVsbXpIcT2WM3QG9oHYP29HqcAhOzneZa+||#ZJ{}usxnF&o zkj`CLT;y`r#4D_R#`CA6Vv$h1Dq0h*aAzmRhWeQF_GGk1Lqh|tv6j|IZhf%v*7f%= z_}m4NaH+kuvA?IYp}KOgm)YLZguNC#*wZcIb9*1Q@aCrY0)bG#Ute3BWDTzfcrUmM z%iM(|v>KZ|)mUB0nPCZ+7m19NZC=1TQ~^Ncu@wG-UA zJ>%|4FB6ha&AK#!9bfmx?8o*Nv_DW)!UXPoBIi9ARWxU~0(?UguF;~Ri^FJgv4-7fb z)2s$`4clr9BV|msr2ZCP2El^w!Y*~I44iVL$NOwvFF&LDA`+yz`}J^?@4Ogh=N%n4w$zJK)WE(ZZfLFW~BE0W3D(yZD;RfM{Q8t4w{TS@&rh!xYM-{ zA*W|dM|$XyY}Dgz*!D2>vv^qu03gxOI{=X>)9;}_lnar9{%_OH_onMtlPqIZ^u7Ib z@Xrn0Z}jzPR^UCvgy1kFAYan(o%SeA48V5*z)!PJ4U zVH#)lsVSrBt*QFM!cR@dcwN7nQvPg;clna({?C|dK^4QK6#&a_T{XQ>D%@6$+5^EL zDPUcRvddv9S%(z#!K*O7w00B=7X=&w>r-TM;5rf8PCIPwkTdW~w$mQh!8&R?N&6(g zw;NhIOW9>;?ycF@Wj07}w5CKLftkFR_so=;q=S)O85Rb|Qp+ev&!cj*C&< z=^7!#U~7oSATbQv*Ij!(H$pw_OJPw9PQhj66)EQa4`~N$*M@F#RHH^Jts~8iG(G7( z(SHev!lTg81fny?mb5Mtm>;_58+#RfVd>dW-3d>+26bL>=I`>dlqRLCQsnE82YAP= z?W9tURw3xF>nNuTK-aLDBQu{3v+_eY*oViu0fi~p+Qz*`{(31_lnsO8M47Ajbg<#0I@}4 zs(pCVLFSHkp?)4UKlBTz9{9JYC_vj{DJm)v98Br5yub>jnyzf2rKj)bw6@^n+{i3IOO2O9~k=C^T;W^Ta ziwyD_{JbZk?PJd_gU@*OgYIv5*1LS-$!Q@;+vfa-=VcP9pYhfc`6o}#C9y{=?5$_> zN1mZB?>%knKkZd55-zP!9ua_c6h%1-R~whZvOmD9A;dX2QN1_fn!9FbO6BXcd%O41AGC#DHDk n=m_vJ!l0c_Wf*=?D${u5vsAP}$pPKLd}gZF+yQ4x;JbeTmbnUN literal 0 HcmV?d00001 diff --git a/wxParse/emojis/61.gif b/wxParse/emojis/61.gif new file mode 100644 index 0000000000000000000000000000000000000000..034933ec3e3fed2ac2df7b7370289ec2e8feeb13 GIT binary patch literal 1136 zcmZ?wbhEHblwgox_`a6m?c2Ant{vZ5?zVL4(r4%Q-oJnUL>S|~RHcIl557FO_`-z? z*RNkcl<#;%i(%WgZKuK*F0_Ok*JU^t!F+i_=I!a3n>KB_P;R->n&I;0%XjuH{@P)_ zef#!52m4MNG8_+KJgUWTr$qB%GS7o}p4~BOhk_Viym;}s%l2mm!CagKM|zUJ%#FI?!E@4>;YI-0 ziv;0s$qYx29=#XC@aNB;r*+yl*3Z7SVe*$Q^UqBt-=}!Id-rZ@w8W=+t#c*}&-@vl z`ZD~PYIF7K)!R-CuYws~ma9H_^5oH@NAC;7zE5(z>BV#2l;K{X&hFj2za%oe&J}x< z!t*#!?6M`p1_y?>Gypc}*8I?G$PZk^9m zef8?qomkF4O-kG2^gl#1e5}{J>A>(Lne%hE?dwp6quLBttQj_EnS7t+wvLkY5y2ZBzagQT~KQ(AQS>1Hbl;K7s`>%C{=jXNkIoS0eo&U|7 zH~(sdA0~3%ym|AK0mFw6AMVHV+*#NAzT4s3?0{qOa-U)u=9@9ROp{rgp!Wa&e}<6? z6o0ZXGBB)V&;bPiC{HkO{AY;fl=0ZG;9xUzsDi_Z2@e|V*033PZB9&dZW8s{kffUB zFBlfb79%oaA=8T9HR~3N~;_Vt^(mTX?o!k(0; z{)~xX;{1kAZNlBopc-6MoFsO3%pv@W}euX#x|dYP0^%F znB@|eX+qr&&aV$!m5mY=WPB7>`iT3hGZjjfXgW0;mj%pWsx5Gm7OS5nF{yFIVMQsg zRXj5#Yk9-eac_b)o?5Ux9lG#InkulpQy*-gj zUjA)#F<2vXz~dcfK?6hZ8YP9sf1C~u3|xE`lN$LpF+FTz5lV4xkrX?U*sdTXBEVn` E0NRwC_W%F@ literal 0 HcmV?d00001 diff --git a/wxParse/emojis/62.gif b/wxParse/emojis/62.gif new file mode 100644 index 0000000000000000000000000000000000000000..8d5c4fd39a08d0315c14c963336f079fef8fb380 GIT binary patch literal 1269 zcmd6m`!|~h9L8V4P>%DW7u`{#Qr08djGoc;vPk3Bb)9x?$2P~MdTQztdO4-mlM5QD zOY}y>DxtyDjG|Mq_6t~j z35-`@7zTZXaECRX>J6$ocu*ow@rLd^Xg&`OX;5<#E9V*nrTQY#Xm1-d{VGe^3IH`b z5nV~~aPXE4F9aGhpp~t^asxh0$vR-N3M3cdX=_=KEesVI4F+h-hskO~nMguIV6;pe z_PHzsG3fR9-}fTi5Iz3}443F$zcTb)(*IUDU7CFV_~tr#@KQDX?VP4QIS_80$F%o* zS>bb9&HdxsbdN`7^1{aWsaRFPK)e_Jav0MoJ7UQOaUwLZ^cCrkC&yk3j$*e&n*1a9 zvpaLbcpS&!Lx-woE9p|+32A~aCcMxTO@dlxT_SBHnLL#p3ay#9*fF4P#_EdTNrR%c zaDW><*LGb}!dU6fmp0unmR~iB`7rgTu|}Y-WNK=%UX^FxjQtXNO0oGdV_BZQ?BwJA z+lIcDrK;q<6J*7?uX_{y-nKBL2|J8aN(ud|!4yB^^4poKQPYnmpqJNu`80H1TbO@= ztD5yK1=v*YV7%u9d+#KBubT7SOyOZIKXO_72v@bYN0RXQVQA!NxchNc!V9Q6Yit!O zxknzJq0AQi&>l(F@nhbV9z*_TaeZ(0pAqRJKYjwS1SHYYDY#xJVOu&l)4EWT?p^2N z$0!^%E%OK~U3Y*H626AoL^xC|Q@e0o+)1^v*jdGDYX^7BM|LiUL)e}fGY3^6H$MwvFr#;q{U=t=oN+xbj9NmDpxFF;rY6sJ zgMDa#H(Qiz`u#~_hI571#+9O~^*7h;cHuIe5rnZ*uXW4d*&zbuO>uo$x$D)6j_I9UK!l&7Nixjy}tCM{nU)*Y4+(k9>kR4(Y)+Y#+l)Gxt;M$!WR8p{UQO2@15sJFpd~(A=*GhIq4cK}$ zQF?4?on2BiU5f5?u-M=;h+Mxd>9daW>*0EQv*>MOPIt|;MzZ1>hEP*dO4esR2`&Lv dtCVPvgE%yFpQ%%=KXYBi((l#&CML*^e*q`iZGQj& literal 0 HcmV?d00001 diff --git a/wxParse/emojis/63.gif b/wxParse/emojis/63.gif new file mode 100644 index 0000000000000000000000000000000000000000..d58fcf671bdb51457baa9a88c599e5d4ae9be4e9 GIT binary patch literal 971 zcmZ?wbhEHblwgox_#VLEa6nefl~2-BK-N$6m5R!@&Mwmi743MX*D5MfUP4m^1p8Rd3Eyhr|j{yoTKQq((q<+v81Qq z-_!_(Q7{?;NFkv3lZBCiA%H;#BnHY83>+&M7IMgVY*=uxnL}8s<&ty4q(&AoF_%wA z4)(K2>A6g?5I8njU9^M2QK0#;gRuO3nZUrLCeKE@AiKa1j7PmSq*Kx?1Rtd}ipyI& zEI9B`Z3>e@-V%;WM>Isl#cVcMTsX8sKsBI1MdDC$d$5KjTaD}wheHtzCI%g)Tn9QB z1x-2J9-K&NWRwl)>WN@#ILNh}Dd&WO;p5c}8=2=Sh)EE6_t-lN_Pqi-^Is&^Kxt91a=6V0fmiyirBvdUp066&0)HGFJ=@Kf5~`HYsQ(Dzu4-#WsfbGBEU9t6U@}moz0( zFIMf0vT`2-!zT~VV-NPfS5mTEAYVJHQZruR|D?|8e0)v2N~QgT|EESUjDpb+z!3t9 zKUo+V7mEFVoq#Wc$k@a3XjEu2?`Ai%*+}qHJ&6L zWN?*HQ!Ko|&e-arWbpFh17;Rs7S1OT7Ke}VinzH*q-+pqZ0EH}2r*cZ(#XKbE;uJ* z(~`CpPD3s&!3|1`mzu<97|9-d)E=T{ZKPr_!|AnZQcSgF;c!J0ygXbcIFP z`VCk=GH|eRm+@OgEMjctlQH69F_UmnXm9M&4YP@GIGEDR#TBE+k?{G^S!r8i9u5X; E0PG>1$^ZZW literal 0 HcmV?d00001 diff --git a/wxParse/emojis/65.gif b/wxParse/emojis/65.gif new file mode 100644 index 0000000000000000000000000000000000000000..da23bfaac75af2b450692e93890435fde4225efb GIT binary patch literal 5285 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 literal 0 HcmV?d00001 diff --git a/wxParse/emojis/68.gif b/wxParse/emojis/68.gif new file mode 100644 index 0000000000000000000000000000000000000000..345cb439104d5227534ae2188471176cdff04264 GIT binary patch literal 4148 zcmeH}|63D>9mnr3-!379kOUGU$^}D+h!_wpL@JjM0$S=55fByoB$!gfFNKy-+Pe0V zKtMzq>{_W)8_+pLrbulcsuvk zVDS3AW5Ew@T^p^C_8EdlE;bIFMVuXx4=)DXyB0FM`qkT8(Hq&Uhll)s_z1eSpLu6y z)WBcqBdzmCd%hg%itN5HwTU(e6;`SP|ln|mGD9pW!Rt`S)DpmJ7c&d z&v|Br<8?-F>&hRtvxh$2_3*9DL#ICOEnn-L6Ef7f&;AjmYZui~%l^rz`sr2u(BHD| zZdouknV*rq0wfV%lE}ShJCS%sl+A4SSeXvWsT@6^ z=chKQFBwTBB7oy2!8qQLF^XCA1oo_$Y)K_X@bHl*}pO(JhtQ)*_I&JLyES&N>@RKY(no65BYToD)pA)%HHXWSQuJ92A0SHR=tHpk@pp z?1M^|Mbzp+<{m6B2fLL*NIjLguAgMw9!{mvC6+6w4vKuI5w%`F3x#B;yAL_dy#|`k zZsF$;()tuqnZt7n>p8?8g@TMc9(>b*wi$Vggv|7B(pzq@>56Sram`Y_2Un883%^Dv zoTo|=?gTRvNwkp;u3vN9GKPPIaL~$0>rz>D2xeCL%%^jhE|Ao5kWWG?cMoZXEw>8< zAi*L|V`j~n?Ysp!SFkU8#}95UG)(@6W$4^lK1Qi4K18M?V5I{`LO1-P<5Q!G|%0u96&Aw(6^BHu<_#fw4nYAggMrGNue9F{ZMtGZ0*0PZihMw*-l0r(L?y5j^|)MrV-X%;A8dIJ?Px^ zERI-hKC1itXNPh=eJCK(pVM^nQj6?+&qa9lRne%fon8dwnzeD|c4FqLE4fnHEe4~Z z6>+o}iaLp*g;f_Y9egz)G0B1f#U-8mY|8O(G#4u9Y>`%7VJ6Rr7H74~5@(C#L}_Pg zQ8i|MUhe@*v^J-}I&1P!r3@P2ihaB*_OIB`$=C-m^T=>kN}m-4!Re^te@xx1gV`df z$|R5#Gq_Nq5U}WqDV|4}h3Xnb8JGPQC)aeqvV-bHb~g5FCaEG07uC8*P3FrqU)ma& zn0b9E08`UGobyQpNF=SOKjGY|MlmoARIl5XDg)u=mXw9{sYk%0T2D0nas1Jasqs(2 zo`p7d(Gni(7Gmu3NjGFs3lMt!v@Yqr)*$e!R zLRp<@ayn$zjgW67Co$LhnZZk#i2nv_%SKPD2dB6G;d(DsZA0U>dy2R zO~NSzFchHphGaC`H8n;$Zjw^Tii9$nr--JmJTPt&{|zgqH3_RoJB>+}s?}&mZSrYl z@pwREvt0rGi|$kRfZF?}Gf5pT=Sh={%em4IK3u1bqt9T$hqly#gH&>$G|I*@6nS|a zPFM_dV`&=c*-6WU_@($XgGvHeO8Adcjb1n-&t+HEpx358luO}9(#w%&f!c}ge0G+6TOWak?(K(>Sb znyP(CRi!eiXu#EZ`{~7Zy=O;k?evy;aD29DFf3(eac{Mf$A5cRQvQ9*9yk2*^0nIU6NkU^>$yjS_K< zwuhO3g?A0d&ywhigr7^)WN}GU^jM-2wS6+C z=@n+Br>prgSM`Zfy!tMtZxgx9a$cpw;LbD?XBsoH$S~KdNf$>AVuH}qucjwEqR@Ru zaKxCprIJW*>2*H zIHno3p?gUsurSx8R2ibhqIr!R4PWoKn?Y1m*2-eHBK>{)ofRJ}QIJ`JzbBlTxeK0H zA0*cppKcxgc23WeTCkL3!beWWM@M&#dGnOZPO}bOqr)}0r>?`&Lyw)_;~1b`niNpU z<=T1KViN*xqKuCYv&-pgxP_BWXD6r(p5w1aZ+7+Kd>;)Yh~T|j9pl>B`S{L`5A;Kf zDP}alYhU2(!o)URoYKn0Z%XiX%?(D5+uRt(_~fR~yWbSwhGqbCZ9{xzOl(8j@%{KV f3_eP2t87+4lnp|byg{?0C}7R`Jzq-@VDWzdo}+Pu literal 0 HcmV?d00001 diff --git a/wxParse/emojis/69.gif b/wxParse/emojis/69.gif new file mode 100644 index 0000000000000000000000000000000000000000..e0f28a0736509c3e339f72c7f582db36bd52ad70 GIT binary patch literal 1015 zcmeH`>q}Ds9EQ(1+uG$Un@yLcAM64}7pW|ACAEvqOg|*JN~!RY6cV~zNNIvOCAG|3 zXj8+cXBThydwaHad&P#)*|=bmTb7`1BGr!uY6Mn}b_ znGX+gLK(JMb8hIi&Uja7#hbFOe65R{Dq;7QUjnoAM*)L;&VjdlsAt1BnI;Sa(xQvS zz;t4+ibGW~sjdz1PBy4s550026MHp`wsE2j3_hU6!Qcvg{I<-a{kQ14B&Mx|0kte!9iAmYKdSM%WcinLx*>tqS(cC` z!C=%MCUQIC=-DA&`4Ix3enK0!{vvIr8i)B$Kw0gN7)8O@;#e&JApiHz3v6AcqX?ox z_O6-NK7p`|2$St~N^7b}XYn_3c@m8wGwg={ZI8%wH!r?BCMwWKdoz*?%exOw$A}U6 z?#@xM!7M@oIHITmrm9bjw7Tsd2^`2T3obpcP-t>_VxPlCVPbS%8q@o1fTQrbD0`3Z z7QX|(?gVT`!*vez)$QC;&xio6H9t+_B@9XD5gsw8OLpSJj}%H%CcP*$|7JU%5aqe~ zbd$UEcL!1L=nF31%`z18kBN6_q7gZ$pXVW8LUTC-AHZUbXS!*NPXxy!bpis_Tg1wQ JNf#D!><`;@O+)|y literal 0 HcmV?d00001 diff --git a/wxParse/emojis/70.gif b/wxParse/emojis/70.gif new file mode 100644 index 0000000000000000000000000000000000000000..24284cf39d84e7e70e1633199579330ac996e598 GIT binary patch literal 1162 zcmZ?wbhEHblwgox_{^ z1VU|WI5@c2*x0$bxH-9bzkK<^%Er#b%$$`|@L=|gOl+X8HE*I}0<*v8mIu zva&L>@^f;s_4IT#wDjbZv?{r|U%q@592)xS`IG-XJ^}*#tCuf!b9KFY<4Tx-z^z-i z>>b=zty(3(FL3_+`ROxe9Xxoz!rIBo&fV6|F*Gb}DKGDvH*em)eXFByb@uFe3kx$I z9$pPi?f-Rk+S-~|&!4t)^7()8U`a`_h_LX4zTW@dK4D?u(Qzq<4<7jS>zBEuMRRit zBNL;icK{O;V`FnC10&;)@89mCMaGpU2I5B_!SG2Lf)>WWJfmu#>~#-t;TMh&S=UqlotI2%_O zr~LSFiJ^6Z5#Lgu`VEt_z8-L2zJ@_z;+mU=TFLi(40LyfHZd8n&2uSv5+OvO5Y%)wr`N(YG{f9BpS=wa+ S1FMLNz(F?Ns}TVX4AuY|FMf;w literal 0 HcmV?d00001 diff --git a/wxParse/emojis/71.gif b/wxParse/emojis/71.gif new file mode 100644 index 0000000000000000000000000000000000000000..a0ccf2edf5f3c1760323012456f57ddd8e31afd7 GIT binary patch literal 824 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 W!5gs$c6vc*pd+9Tgpv{jVEZ4jVr)SG literal 0 HcmV?d00001 diff --git a/wxParse/emojis/73.gif b/wxParse/emojis/73.gif new file mode 100644 index 0000000000000000000000000000000000000000..c0293c3ab0750b5a1f654fcd1851c5565dfd1199 GIT binary patch literal 2195 zcmeH{YgCg37{}ked*AKdh3#d7F<{6xwgD4yf~Js-ZGfT(jmzZH$Z;vWl@k#mcVxge z6fq%3kctjL1&(0gIa1GA+FMeP2@UQ*oV%s&Z$lxJ3SwskIy;(-}ycN z^&8f$2}ouFOkk=B_zHq%c$lZ>#W5pYOb|x}FznnWrrQC+$d7UOxF1IioIw5H8@L|`*YfF`TnPgJPJF?36VMN5cD+MSHMiIQVKx6RZ{UY|=y?VuT z`0CNMfp=mhkCrXVSiS5d7P}LR?O(#0iB}9b(SPs~v{9-39voYGZcWiHI{6+l$A$!0>huG@mHDi^p3Nq*F5S zTwG9=Twa;GKF^u%g27n#zV#Ij_bGueS6W(`8~TjRasxpNoi-_8FX%GI*)E?`D8u&l zmiLeJInXkExDzbaf??0RZr{8iXI!DURhe(y{bpxS&|G%rn2Gv2B&>5TxbQ<_Uvg(%)YvU_Du}Vp=X=$k|%|&N~m%(x!B}I}XHw_)SlXi;E=0 zpSEqg8xk-a5OBc>{LBsCA`w1HPny&0Z{iX3Yk*3Xe_z)P003+@+v5Ij497-_42_Km zmdZo@d_`EyVk*uIL?8l9fY0-U&))<@*A9qZs2=h8ts z%*_sCcjf1jdQq>2(lfsK6xpijFRn`QcxWl5S3kyEj`P{`B#n)hoAMi#qqL8`Ngl5p zK?fT!p0^4aV(ODKifWL(G)rBDh3*It8sq6f4VS(xsk(vKjhzm^P@BC@d3Zt3}6d!VvrsPXI|#f}S1E}S(&6Eahz!6ki76}>G^gK@xV*hpUa&;yfc`DvfoGRgxAYVbnXz4+A_ccI ztgoSkTA8vD2^{Hue7XZy#X@`aJ4_dqSm%n98;;$)q2%l`IJ^k9>2*fhxAp5_$>tv) zi=^k|gqUhe6PQz?I1zLpWvk4RilBm+SxI8q<@TzW3UTP6iCx-ie=ml9BxC&SAHm{0 zrOGu`n`Yw(5dbW`uCDbPc6TK%e~qC``62u$P|jDCa`8qd8JG4au(bM~j6y@4@j%%SP zOBfL>=G<^ay`oQtPb9P)P6ea9s-kKCgsa2!B3E4lS)A5@=C$O}>505BN#~-u{b)RM zx2a&U{pxn2w=vQrK1>vLNX~YiAVbZ)3iY|#hy>>7Hl5cOc59r)A9W8Foxhp5N(fv{ z!50$z^cyQ&%F^GDDY*W?YNiL%-*XSviazMU_tfh`DV5C=-WzLjv8+nz6|azTU1Szn zbf%f?=&r$aW?u#kt`L%9=_w=KuE{OyhU91(sZh9Q;YyVXjq^?V&0N**=7uzf?0u=2 zO_L(tw7?N#AZUt_DH4C~9#^+^yF@zi909fL-e^I?sZEc226|38T!iec#J) eb)F@9X4Xib1cQ0*E&Nx_@V~cDS61%BMr5D?K&0SQgfkXf_VmJp^EDPCvJHq>mmm7{ez*46^S%M8uT zW~MIk(#$-CW}#g+#N51YR$5lh&{i|6=`xqCI^Sdaqx0-J=Y0P9KA*q7&+~p>pV07C zK}(Za5DR(=pkwbqjS0MOB+!|;QJ}T&K;0_rMV)ATd>l0UfF|L;P6SL(Pd7)R;LJkM z9**!a>d+^R?-hVnJ}?V@JFsy2u+E)snu=w6;{rsny8XnZn6~3oVKEFYm)+`qD;Ol#3bIr@8*CusG2Ss&24QT(&kttA#U zrv;pplZSV+hj+Vy)51QrL*Et$(CK_Pmw)RsHaP7&RmBDm;H#gy41UUb`TW_RzmNZV zhz5SL19#ANCH}?nfYvw++#!zWJ)YNzo>uvRUgpaQ_@WXW%XjWfaqRh!HkQqKT;}`Y z+0*MgSfE7!&U*d4$9-b|g29|1V0C>^ay(Nu{uJBle_1c;jRVX!jV>(tFYw?Vku+W6|l` z-S-OFEiveiA2ZESfWP*E+$fLno4h(N=NkU(-G**y&Kab-Dlrp-!JBx zRwKi?_Cp$adxo&@V`h(vaW08vd7lIT-~viSNNmhXi6TVoFG67mg1FCcBnAW^;oN%; z2@8UV00JaNr_w0NBGAd(jwv|VIRrv*2{Fp1$-=ZO&ErX3FpeJJ5J;_x3@sY)*~Q+e z!?b(QU~5U)lunL@N6+qj7AZjT7kjvRmq@gP0Ni61ZkNf(fBUWIO!e0BecDENC+fqf?Hcz=)5SNe`P=mwR41-F2C&cHg$^~hgytexfRdbI|g=jpV|aUira6!V&&B|B`qBrSFPZApW4OBcg6tHphkiVrR0Cfz|QQLOM9 zD^#PX{K6E{-%*5jlRgUX_mq?`HM(o+s(q}acz@!=)Qr>0TpzOclt%NePy_Rim^1|f zd|4D}!KX4~9_N&sq8sO{QWKmX)a<9ahjCIvd9n>vS3*?llVMyb@K&bc;Zdq;;2!J|5B4&X0g zgi*Bt1_y2mE(PjdQOH`njpjL+1sWU$k6h?nvyGALnLVk#S!Zm+URomVoq z5zlx@_Te_))9iw(3hRkpQ+KS=WqAjfm|N^o4Kh!Z*@3WvACoBGs;osW2Nk?fTt2b* z7F;VgWnuqNH?DEDAJytbJNQzWz$f!)7FKbIs~1{DM`OHtgvTs&py z2=fszY`+{3Bxs|8U**C7*GVIYWxHaQO zM8;u#w!?Xfv+{*zi=9=!*30Z9;ac1FGuL%ag^N<`4;%Oc7mU$5MjnnQ&8%#+VrFMP zD`ONdkY|5Dz}$iq8?|4(vDS4;bj4WO7O($&gSv?uRzq4X+~yLnsojTBDsL4J*&H3B z)D12LO>si%GUZiO!4@2G@Jlkb-fmq#ci?N>+qC8~bOO#>RxeW{zB8;E-J*|^`z21V z0O|e%$nG_u^REG&uYn!i!-&ei0ea{O(b?N+7V+KJfO?jr1@V6YQmmQ-#GC{4*1rJ^ Cul<<- literal 0 HcmV?d00001 diff --git a/wxParse/emojis/75.gif b/wxParse/emojis/75.gif new file mode 100644 index 0000000000000000000000000000000000000000..9cb9aa7961f87230f198c3f85dbd14e5999af3ea GIT binary patch literal 1222 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 literal 0 HcmV?d00001 diff --git a/wxParse/emojis/78.gif b/wxParse/emojis/78.gif new file mode 100644 index 0000000000000000000000000000000000000000..d0d0856045d240cd96871afa4fca7c48d8d152d9 GIT binary patch literal 1565 zcmd7R`&ZIu00!_EfeBu}A|NX*Fcs#|(KL^C*}k9@nJ!Hy)>bFXm9^|tYp1qVBQMiZ z6gpX{HO-kawS{SA!%?=T$@*zioBEUtj^hf+HZUQg6BM+^Q>FH);~Z* z12kZ01JQlXl3^cm3xIPuju`+c2ee!Oe-*A#+avYBp&7uDP&mMg(a_0K0FAjTx^29> zth~F3OWU!C5*VLtnbU?wbSyHob72dUmJMJNoq7)RD7QL21Z{;IcJwnMo-QJl0#X5Z zlDrB|?hH5+0Ox0q>Db+QJa#b!z7$4Q@)(Z+QVHN}rm$~u-*Gn7AA-Zdw0uCi36N5- zkcmzu)I=k90I!4tr}uu^ycuZ#aCifpzYbM?x}pQn)QH>!P|Gv?#DHo)*zN@%`@F0Q zK&k+o+6!l;@R1i(uW&8{zm>BTNpIc}b9$;mkYZrc2u(x5CgV&;E_(6BN_rW#E5n{y zKpHG$&ZvWCdUEEc2OS@P7nQ6bxy$_Q)Y$EfCgW^hwj-SUgjNWsSwJ_`3WwGqS3&DZ z8f;k7ql_JI@F_TIH&(&q+^~LG9i4N)YDZ1@Wz~hA>aU^6I9U2Vy&cPF$F=3JnEQRI z=>$dJvYIRhy+5Xp{i24=%Up`VW*Oe_fYW!;ZRta-PELQ4Mb@j%vr6peCN$HPw9)&S ziSwI5a51wrFTh(Bvy%IJ*XBfY|A@86)TZu=i!DH;2e7c@&2AQ~xWz@)kswtB$1%p7E)C7&!;dH#dnFAp-TmGNIfYu-IBO?O2Vf=T!Iatg>H^vN(NCs_yZSHBl2_Qg_ zM|2h_@@o?<4HwXRVHzT*Xe4O)V4Ns0LBu1L)D$M+gR|&c56Ov%HbQL9y=X?t#%$ST zcGeM0EJ5nzzB66s`>55)13Oi-iITGJT2S%YFK=xcsJHzP-DjNPj)oScoyxc(ZP%W7 z+tc!tKQU>@)niwD)EQ0q0Gdm0+9bg>jtFE+n|E>ur!P5NlI^-CRJRomdFZU3k&5pXp#!Aai@{q?Zk=+&zd+Tow@0nZKVQJ_~H=NA``C2PNe$@;Jz1 zh@3h2zUzwZvQ5b97eUids>TyhY^>$itj}BRIeL?I8f7p!>{~UzPq*{ zg&S29rx^Q;$OmNLMi8K}NXbfHfxYT)=xZ&=s)E{b)3tQ24IkU+nw>SbovON8eW~fRsZhDIHu0s?W7;C9WAdel zR(%PZnvG;_eOv2Gq#6|@4MNc*XtkqRiV#%S)|Zyxwe}C_Z~I|;{rLRhdG~zWy?p(A zT=&pzkPUhzL+~J*AtKgO5IibestJU_bWkNJ&LWs-g2!b+S$3eiwIT@vZIv_%fimtk z4Z*lbL`AO}sGw^~zJv9|BbaI%_z^V(Ay6m6SOaJTpsj$Jt~fCUGo3>$B#%b%Vk}#O z{XFiLJLINHeN)m{HtE}&h?FU4U7ZH%w3QXZ`e06E*~k4%hqjYQQ?M^Zflaouqbr?Y zx&xkEA1xv2OTLB&S-QILi6W2TLekP?KMb*;{|q&Ed*d;bB*)geV(&1V{}vv5DPe%N zdcNlZXe(bXEPygzo#_D6cUJp2hW>oe%iu|sBpm6k`Ny|l%i`nk*Oj|Dl-_iQmov=`ft5$o$68{=NQYjQS$U&>9ZYa=n;g=uBCWC$A3v3OX^&bgZHlxjo?*PQCc4s zU4y0dVyA`Jq$r9tfW4j_9xL}BFFvr=9Rp+aOeF@7iaKM_gG}PAz@H((VEAHpvYoE> zgyGL?Fx5Jo>$q@_H+L%rCR?<8&$Tz9u6b6HtZ#~$yg^-EdbT*xH`m6v&)vSLbA5Fg0MP&W?7=d?n-X}y^N9EE&s|K6-fXd7-eA5N z$N#ttv$xZ?G<@kvoAvPFZ}v&-jmxfA5yiLK7VIHbEhw0av*8!I_sm!173?&j zQ^+VVyC=u3lO$ILm#fq~8ZihLTwUd-Vpp41?pheL?K8i= m&vHrPCKWlCX3;&!AxzpkmC0ZJ7nG0wo62TnN1hEH?fnN<0-_`U literal 0 HcmV?d00001 diff --git a/wxParse/emojis/80.gif b/wxParse/emojis/80.gif new file mode 100644 index 0000000000000000000000000000000000000000..9a779364b3381afe3c1faf86bf94a29825a43db0 GIT binary patch literal 1537 zcmdUu`8(8k0LMSfflxz|tk&_>LDFoqa%CA;2&*wNLJ?|2ZqbHj*n|#8a!frn({Apb z2H9+m<}etNVTq8{poAo>FwAG`57<9o-#@>8dA*+JeZ<+(%sfy7Xn-#q&_@Sws1Od^ zfMexwl+}C&!13zkau3*-3Pp*X7XX~?h<~ylzHcU{YY8I2mueqri@zudB=Qh`*jKm) zj#a?Pr*q|w1>+V^e1KHoU+WE)%iQ2FBc>jStw*5vF`EoBN0G)LaI??iSpa~e5AMA? z@)r#x@R8(BWb&^0Y(IB`VFo|6bfptu$CKHHEOoPlhjJHrk>-Fs#S#m~RZ1 zt#T4!XM~7BU3(s0?FC}kMqwp;h4HxQk8_h#)9~H1iE{Vk7YLkgle9#SmAEWd9-FUm z6<3niyE3~H0epQ+{QS<^(wy+pcc1@$A&63$xNW+&CV^9&;p_XBLrZp2V52p3rY>08 zdQ#eR8BWx}-jt6Ion}}^M{}(@uMni2=YMHK;%fIt)*zo=KZpI-B>br5{(F(N2y74N zO#zZd%IgAxRB%edi(IJiHds%lDyHCTx+M7eJ424^nxAbB)o!tngAaF}b0^ z4IR5>Z+Xs4C02~4*HRU<)=UC1zw4l!4T>st)Eqv=`5HLRh_I2WaMKvs31 z`$%ce?JbWNM4Dxah1%NbegYz=ICjrL=ULhiipr~^XMbOo!ge924k)<12?)Zz%5e^f znACJ4c9okSGIo|7PnX+%xMa$s$QIoqhik&}*fGps{@K+)5ojzvRK9;~GtbgD!(rZ? zzBuI*Y)BSf!DV46rX{p zP<1fB%0|=p>er)aESo@`UZR|J(q0cmy$n%WCJu}K)*JJmy*c@S(jFC9xVr|o*)?!t zOCF(4o$AL7ajZ~NvOQ>H=aEyPXc6vD?PrFdj1J(5D_*h=SSz%(^PuyTn>@-!nVjPp ze5Omu2Kzv4qGOLig&8Rox%Bf~-4Mqp%@zHgo0{$|cg={*Dj(UaDQ*-QgLWIzCb6Ns zg8}VL!-bjkJeIiq0X?fXaUKY+(fAo#zJ$h2@+%KN!A|og+pg+*N8_lkMlxMhEt$)J zfe#z|O|DG4O7%7~K9yuTSVT7oCKdbsi6wc&p1XPDXdb8jEf%$#s?X5n0UIdxSvtlrMJdAqCVI-OK` OtDG`%76yX`mj42tdy*3X literal 0 HcmV?d00001 diff --git a/wxParse/emojis/81.gif b/wxParse/emojis/81.gif new file mode 100644 index 0000000000000000000000000000000000000000..2329101a71efc84d76fcdc0e0acab11fa4b832fd GIT binary patch literal 1591 zcmaiz`CHR<0DwP}L&lIuF*#H&O|Aezlbj_?5G=)s#*<+N0zN*8c|ifW$T?*MMCdV={!Xi5#LG40e4#>0i)q@ALlpK5xW<{lTBaI{*i;3;}$} zo2&VJ?ru0bb{CFO;ar!l`5Sby0ghKma=hOt`_WMkPIQLXrf3z(gKut4Lv*C23L3|6&JQ*MX zbb<*roc1Ijyb9n=;j92^T1=v>f03ktRQuT~ z!a(*`lPFW)U9jAE(!f90bsoTHm9k6#ry32yV)(3TIM+jzr1oB2-*eq*vFSUwC=#Vv_T3;3rn%|c;?#vKVA_qQ5Eo}x7aX1H4K&+_?L8l#2dP@f#e< zg^Oa-XqBpx0B73ZGz%48LHn<-h>P`Ixy!9rjDwWL`_bA5F=$^3R6hm)xItW0__3q= zLW$vlegS5fcS>iDwFeORzU8-*H~?Vv_7m*JNTi0BW3|rvL=Qsi%(o6A;m>9tv*n);d&Gsf8@<-chbWwt5gg<#MUjXc8KAc(0k)( zO)d6)Qr7A$U;h-(9G0lO!Fkt?ix@Vq`U^lbAK^|N78ZYpzh+ezBIwy}gI6PxX_3o1 zms7oc2#-}<>beItmJkx7HsTH~s7(2%JDY<7@4Z22Ns-F-J-wdRN2h>Gwywx+-}LlB zrR=IpTuhzijrF@$ZFLQeCOdmOaW2aWa`}A922Ke{xP{p5d1N0r#|Ho^})r`0x6f!&nrKuefeESr>H6W;o@;$Sugb3eS`&?dI) zkJyjw*<@hHMEK_G5=*&OOJ%H8n>@s{$xtu4ozU4aDlWv@(w9K64zNO^2-XO971o3R zGaJ7cn##wtON!9qc?%A3|fKf8MozIWHuB(tmRpWu-7~ zzZolM?=PPg1PtVD->{Doe0;6i;{E+OWgPkMVUw86fMM_Hx+Nlen8k}Z0B3`65CIb|6Tc~Tad44 zKhCo6S)1Ek?GjzkUzk9{e%k?SPq4ZM^E);YFWF#{r!DLP*Yb}Ab0b_`Q@?3NF72p$ zJn#5kV*lkPq1^{QDds9e;MT)ieVV_wa#^$u4~X7dlJ34OGLGz@`h?+~I9ssfu}r;) z(Dyy35qDqFq&h|Vc6pm`7ysoRkkm)sY3oo{=*H(6$shS;Fr@C_V?t~e5{`3A7l-0b zRf-9rJ|xVIZRSkw;a%9Fc#*RYE%C$*;<$b{C^QfUv~fi literal 0 HcmV?d00001 diff --git a/wxParse/emojis/82.gif b/wxParse/emojis/82.gif new file mode 100644 index 0000000000000000000000000000000000000000..644748a96ca06c8518ed8618b9df99265748558b GIT binary patch literal 1547 zcmV+m2K4zyNk%w1VHf}y0Qdg@^Sy1*hbF{v7S)Oz(t{iAty=oLV&}GV>Zw-$>cr}z zLI3E%|Jjk&ls?LREU{Gp^s!d^%8LHYb?2c<|Jj!E!h6}4GymhV|KO+p)`_ll;@0_ST~O(V5nfGwsi#=d)|?uVUqw zHs6yv_Nr62T>!yq0J&cPy<`BpVgS>C0KaDd#B2c6fdIB!0L*p(v{?Y}(xcLT0RQB* z|L48Uc>vLU0LpX##%}=o(3bJ9Sk{jw|K+#;)Pcxy0J2vA|LDK{$7}!OwEx|o|K+ym z!H)Q{S?R=%+?PWC*o^qmnE&Cd|KhCAdjR;-n*Zm#`Mz)K#g6>KXaCT2_0N+0(wYC^ ztN+e%`M6*9t5o{Oh|Yr^@3?B}rAq(l!snkz>&&CoiYEWxquq)s`_7d9)Q-}NG~=#i z*OW8*$&9^W0{Ogf{L+&D;HdiZ>FmFK|JRV)n@9P#UdwkI(T_~-z8EW&PNq)}CDc(1QKep!Cm`^SENxi5BpnMc;@c-KuEtwO#$ncHgso`@m`7uzu{e zXU&2k>a%Onf++vjjPbg1{m5?kym;uLNYtNb>Y_}^b|B7v82{q0<(D|+m^t>fSJ;pz z{LhQtrd{gFqwAnO|JH}=%%#+cBKN~>{@}0Ws#NpNnCqrf%5DnSj2rE(R`bS$*o!an z%#r@ieCxPy?!R{a)Qs-1UjNsR(~dLOi80iTH2>9#`oM7W!+!k4Y5m1&*?SZ7tx(&e zSlgpq>6|+J&4d5vzWm2<_`Y}l<+%IEec`EI=crl!;jr$|qwK3w^wFF4)t48pl>h($A^!_bMO0HmK~P09E-(WD0000X`2-0R0RI3i000007yuXm00{p8{|OvO zu%N+%0-GdB(xjk5h6o25Nr1yhK_lr{Sd94336=y-3OZT9B_u~Fm$-ClGq6oDDB+}V z{CA~-8D;|pUNL0`&Xt*C27G`MWnh$QxgaAd(3JFso!WIbWQRoJ$ zI6@)|;dtc8882Rr%mWwUNHQpT5*$HD86T5LGr93^^Di--Zk*f{1Asf1-dZ6dRNU zIjBSl1PI(dDZyrFMVT_ZM0_*m;2@J-Oa#aTEwP-Ffe0qN!HOl2lycAv9{d8&2`j8X z!UiS0F-I2${IEqt4`gFa7uVQwLJ9^Lpn@12JTTJ(o&X`^j5E3j*Np)I03rDV1rz}P z04x9i000;O7ytkW{{a6997wRB!Gj3@HA#{LN5X*%lQbb{1Q-`14+R=YzyjkyCsm#} z$@ovojWrg`4U`g63P}r+o+$cMgO#Ds-eZ{KPnTz4B7_j6c#L0%<4iC0!jlUi@dBs;#7#= z9`P*E;|J z&>>HjAP1EwR}m0Ofe$5r9sy9bA&UqJq?8=w7mb7fCQLk};*_O?2@R9bLCFjVZBd6C x`_$qCGH+<0!5m%C!NC>}JphCwZlo}Q0UW9zMja23WFZhFmPlfVW~CSq06TQmCO`lH literal 0 HcmV?d00001 diff --git a/wxParse/emojis/83.gif b/wxParse/emojis/83.gif new file mode 100644 index 0000000000000000000000000000000000000000..fbf275ba500778d06fb2709e0e5556ae8afddc16 GIT binary patch literal 1591 zcmd^;|2xxp0Knh-*fjIyHfFb#*haHtN91rYwM7hmPX@Om0UXL``w9%D z18B&ctrWniD{%14dvz3C{NqjA;a82~u|gYYNQ1-K@XyZW&Twcv`?tOh4kYT&0Qj^H zK2@rs!Lte!8ZykSk#H#O<@5t+YBHAdhcV)E!5?iBC2j;Lj0(`s+*tESMYYCluSj-`=?xz3n}>C|^OrKTz#9Kqmp^W4>tsf%CE zDFsWHM7mTkUF!d&(0lRv;jzon3$0;rBxn9w*mN1|UVe!7doW(^H{Nl6zBO!F74^I` z!I0xHS``9Km)~jg=LhQksuC<|F*tEip9XaD%`2Li;o78yp*o|2yK1b4vv=NhL`>E0 zgin4}M^i?!aIbz1UA`-u?TC9h+6?C(!hxhWJ<$(Sz<2>?>?hyVC(S0M;O+Hr^(pU_ z-k4ibusYTN2UCVJz~dq=9Isk^R1F~n|8H2(dcPo4%nK9=yguVv;QqD2dW*NBf=1x^ z(agt901<+NR!+her8)~=K6V3ZVX4>cj60oRj?YrMtm_xWn!5#!d-AtA<1sarX2s&u z{HLun#LccDjZ|S)2E`^lwyVZVthBK8qCs*eff`tbS`I3|rK^?5dNF}RRZY?gu^;715B zC=@|L@&-apXb7)c1p>&-rdcui08jLy8ImV7xhl@FL&`xfHR8tRdmi%5uKkc z7f?rJpNwrQq9{WFo-4uoI?tS3L$$GULW^tpMFbmrxBhw$x$};V_A@8BvW+s5c~I=e z;IhC?&)BZ%6wZM>jFv`9 zP^h#SxZTb>OvT3T0*8<2UwIFfMzae3Y^baj)LU?R?C zmQ(^LjsoBWZzmJGRwZ~5{V5jY_}ELAQd tKmj-!d5DiM0f7LA>RJS!QnJ}9d#ZshLsM5S_rdBrGb+*a-wgZ52jTY*B+KA}$SrHrUWqC9I+X zqBIRE!3ctaMpOhr3HuhH5D-)v3JCimF0J4M?&!=pJ@(AYoMX?^^nJhg;XB{|{de7Z z$2C?S42S`}e*?X{v9&%BD)fNrPC#Xcp~`O|xi{4KJp}slTTloLm4dM*i46XG=2M9MQmH_su}$D zyWB&dzoP&D|H9cT^5lD$WYf6f9-sREBDF_!P|>;x?$FkA(? zq#qu7fU(A&4A;KP0`MecNG<|Bxl@n)K}%>?+9uGIt|~oPe2m%sCPg==lDe@w-WvRTZARg%YEJ39C7fzxo z{o?v`TN)TDYmDTouz1j)|E?(!DDMr|Nmb3sig0dE>LxJoXzcN+o{TLc3Tg9MZmA#h zS?r3LZW$OZAAWeUJN4`K)5ZY5p{foTyt%vStj$PO!gO0ofAP7Q7wLGsRhM+j%c_{^ z=D4~D8!(RjtupXM40rhc(XqT^<0Z&&Wx}W&nRuEzD*vG`KWL`md(dA9I;9`VLX{6i zp!aTT9CxPcCK!19i&8Nq4*|m!V61+qB4P63@met#^xRfq=Vh+Ye|Zdn)@BFSt@eCp z2eTC%65-=D!zr?cF7yUk_UVaFV**hDG@xPNB$JegsdG%-t7U0rk??|^^*k=WJji{i zw_J3!HY|z`vt(FblsM9aZoo13jHO-Cp~4u z77`qycO*C1BleEsxsF224a4beJW`FNukJ0BM?0RY>$Xd7A8js#jZInDPC`K6g{I5z zMNTxLrfx7xrqn>cf~o91d1$;fku=Ncq_!b3g?SWbFv_c-FsBE}1?D^sZ8qg(QGjGC zifX{&-;j)y6sA}dluezG+93(r#A6WuniJwjXrW~oawA1o7I~g>s^L{&hMJnKNBBHLvvi&GDkwA^S)-(c{a|>M=RnC&|O4NxPufUTe z6!9d&$F*7BlH3@oc6*CAsY=dTOJVW$?XQK{B9B0htT&x>S(ElP!Y0p$4Ob^IbQPWs z$fCK#OJ`tT64l6ocwUR@#hDdtrTbRJXtv)#F^!2nd8P#wdz0SmU;zQ-PAa zyhgQO<>KhJYjj;2tmMZ)Jkqj27!g8RMW^Wo5@AU=fwan(A#+3}gpJF0%B^7nU4Pbg z2Fmy3i*39}8b>7e3H(n=CjF`;XQeCZ0Z-C{`NkB2n&w*A?RA)Z5tVFIe53WS4xf~? zTM#ABaGbw}LV3l72s(>*6b5M1%Eah`l?w)4g+ihr?HNKXNGq2J7yg;3%7pR#VaR+Q zY@#D~=Pec=a#Ey82C9-4{?*Kx8xSS3v)mPDVHwXt!|6-yFhP@#JsVd+~+h0)dyu=vt4wbyzR z&OI~+Ia<^GwJR$zV;y-f9L?vUqS@p`Tf+%;B3gI%$cbbDh8&!yZ6wQTqMSqd!8G@L zS#%)6iF@Y`jDRM3qGslIVq*d zC}>xkoJFzPshPPPPb=5w%)6IWPf0^c<_Y$}&Jvu2F4;o0Ep$MjJbyBc={9O)M_y(5 zT+WrNUm@&&RjJQmM5vQ&_E=+Caygmm*UZQ-2^hOvV!NF@>0&6ap%PXj`(;Zd-${RC zBH_m~|1|MGMKt`aiEk&Gi(Pue3cH}mHzQqyzJ2A$A0GZsJp7VX^G72;Yoywjko?!b K=l^qQlJ>@a;;dZdr&ZaN zGSi1F_Sd7YYjT%ZvZywA76? z@484A^aR9bq1GZfO|LxBI>c+xt0p6ZS?66+{*_{5@n$mq2{?wQE zv0(q}$o#~0{KIqJnl;;_T=%eE;gdbFS_J>>%m3=d|LDH|$Yj$jVIfQBI2Y*xn2PO->d!Bp7zzB^2dYlzIX1wb?&}$ z!g({#eh~JmSFv0K%5MVcnnlu#ILv<;vRwoAsaF5tt<-@4|IdT}&Vc{ovD1J6|Ivr~ zx@!N}nD)ea__uG&cL4wB!O3#~_P}xf->LuLtpDP$z-R!@c>wmmZMtOwuUZ88w`Kp{ zsN|bDykh|WB9EHcImx@`PQ5J)|>g!l>5||`_7Z^uvq`*y7Iqv z@wjQSR{-IYFYc;Y{@tne$Aj3BJ-%oG!)pNl<+}gdp#RK$|K6$p&4Ko;S?{r1^vQ_d zoJHflm*bW-?5a@uzjf1zGyKJQ>9u9ec^vAhQS7W$^2UJq!h_wKMf1ac_QQDRuv*@Z zI@*UG@w{*OxM%Uni0Pz9(1a_#Zx#REr~lfX!FD3tlseFRAmhTL=(1h>&5-}$u+NZ6 z|KF_CgCgw7m;K0l|I2;eqDs(o1<8Rk;+aD9%Zb~pegD;w;G8-6)}Z*eXxWoG#&sCn zmp#&%T==qJ`OuI5(~SAloBGt4`onzt#ee(9i2TQW_tBO3(U$tsl#}fSoW@5^2LDo&yd-ZF!|G%z>%A^!_bMO0HmK~P09E-(WD0000X`2-0R0RI3i000007yuXm00{p8{|OvO zu%N+%2oow?$grWqe_JB%iMXX9f-e|d*kJI51PP896Ix(ELV*n&OepBXaiNqM7fTu( zMBwBO1r98G4OzqI$P*2M?r=b0u#J*B4Gi!rcEx~(9u0gD(BQO98mPoIwEaVZrQeQJoG18L>#D29lW@UK~u>AfVEe1>MdaTf>MTn|y4>h}k_x zgaZg3Y9PY`C)oitYzX4XL=TTB6ez4XFk-}x^?D%mB$0!M;4K=)E^&RMLubGWR-PtJ zLc_k9D^$MDl22naz? z#WFBF^2!5>bm3taDgZ$PItf9c%?vQ`l0pI%wD<@M>=d%lEQLrCM>L0op(8Zm$k<_#wjDpLTDU{h1J=PKbgX(j|f<$IJ~c9t0f7 zHbwJ^MQb_~{DJMq7%`~Fc-SDsUyTJQTJccxqhOG7pQ!Lap~uPy2p(!6n*t{mDO^Dc zb^I zLOSg0cVth8u!9iD2SW-EbfHKW2zD`!3NJvAP$5;!FyI3TRAAvFEW}|71`0uefh2L% fa!42?rXo!ig)me=7Fm$NB8y~%QUF8^1q1*)ck41~ literal 0 HcmV?d00001 diff --git a/wxParse/emojis/86.gif b/wxParse/emojis/86.gif new file mode 100644 index 0000000000000000000000000000000000000000..8f09d336a30070add12af16be11397ac97436234 GIT binary patch literal 1519 zcmZ|OdpOg390%~PWrc;3Sn0@8opid;dgSt`7!HnvbR?0>=91i&lw86_Q_(tEDVJi! z2^HOp7RE3kw+@Sy%_WyOq#c*v=J!21|DXRp&-;1*@qS*<^ZC`@*2L5o5Aa|ff^W~f z<&EKRunbB{p`--;RD^yihM(?B?pVN&x7v~oVDB|vsD`W|W}z||sq&e7;@%z$+G4;| z$Fhkm%FYjW>yKchnc-R#SJEBEb4Und^ zo>YUjR3g%FMpjLcz73t?#z>w9O%=QMJUZVHiW|+f9L+g6nr%LE$E@cju_2!L!X3cj z*R9c@B^uNQfj54DcLr4X066*<;rhX`+Si`Tg;)Hu0FH3#LqJ0q;QE8NWbiHuG@k>F z;mdhNg%{{b05ySNvLdp~4SYxf(_L&h`K~$ubSHwP-h!q`0NbgH9B*lDe0K)1{5YsQ z4Fpusl}_Y%gU`23JLADnCJ~NQ$~tbtp%-wnRa$*P+Lbr=A$P9yIGk)*60&D2LqyDd zlNAx;59~YQz*65MR8kHHpTMD)@Cz4yW>51Iq%|?py2~#;z;yY^MSeIG-Gc)~vmC#< zH$Ku=rzZ+*;rqz<@!O}L9q-R^fZfTkJ!-zpYq-=K?a73qtm(27vu{G@YJz)jTMlMh zBfJPym@DH`Wlagv3g3YYlc{3YcKXigr>?LkeV~*qZ%cs_eEIuyc{}qvCs0~RMg-@P zx+pQr431ULmwUj$r^vfFwD+#8@dErngZ+1r<`{V!18u+5ebrFT4}p?rvsFQG;2|96 z&AjlNc}YfEljJRl9jUt!{-p&@Kvm%S%7BgB;Pq8O8_`y(v?g{u-%(x{D694#DDqlr zrizzm@Pp^x`Y$zw!0}os_q>!FJ(@>C``Pue#-e++P?Q7zN?mw$s*OS9#~F|2TJ_(v zlhucP%Cp&dJ8@ z7|GJvX5Sve6$(G1MMY&z0Ku;1d-+N504PBKl{eXyJ>b!l*6nmNvALRQfLnLcgWcp{ zO?L`gh@gHG=lpWuOVob60-1gjyRD;=U`a^dbe}396OI)o>6mKlbRpR^tL(S1c)6DS zP;K2dB_3Y^vr=Wv<|Ft0c&@2RT6Ei1j?wdx)HV8XVTMMSRqAW?m9Aw9+_(1KHMhB* zyVg~ar^;D%bWB*HulfoTziM>{ArL71v~uyE-zW+vS@wE|-3Z%?kF&J!vu;Kg`7U|q zqJJ+pFZkOI3wkof%)nO$Pgm7v=S{;kUEY*d z307E#FD0~l7U>CTOon^VExluefF(y|YMFXAl{vv<5bAZSEO*#ymaqtTD;?C8F*ak@ zpopC&`wEE7ZbMd9UJLc9T2BR50>UBr%wgm2N-vx>QF2!P_KnCotb;aI@dq&W|ABE% zH@8q6>aM`j(oTP@pViL?;!MgJ5v?p8e-qv7Ge*gFG>tJ4bB4K6Ex^R@Ib%b2t?DM_ zTYu*NLB?*()9qu}yI!%^pr0B95)781Ug%U4XFwXp)olw9?fOV12{aBK$l8@eyCTq_ zlN`o$wj2?p6FljL8&(zLr|L7Jj?}Bsyq#FHgFg3Z z{{b6KsqR(7aq*>*lNtrvh1pDJ=b%%MPdw{MIT1oNRH9Q7egF^Y?hce%GjWH5@pT7L zaf%o$13T@wUS?-%aCRBkc!BLeyt-8{ZLbH}S8bo>niVeEXjy)P`XO?yWW~uSo{J`$ P8RVDdk`v{67?}SHC9xom literal 0 HcmV?d00001 diff --git a/wxParse/emojis/87.gif b/wxParse/emojis/87.gif new file mode 100644 index 0000000000000000000000000000000000000000..df70756f0c74d0aa64c84efe026966e941f40aab GIT binary patch literal 1558 zcmV+x2I=`nNk%w1VHf}y0Qdg@{LPC0&vfLWPTihLp?a$?-P~o0N z@Y=oq+nUvdE$+mL`N4Vdzje=n9P7Go&Uqitdm+PZ3G1Fl*^@fhkvX|v0Mm*nvR45A zB7Wp0K;nlyJ7&kU;w{o0KR4bz-R!$Y5@P` zxc}07|Il{Kb^yyvBGyT?@{o1Ad+NSo_p!v97|LVm5;;{eJg#Xor|K_^?-JkK_%>UPo@ywX?)1dv< zm-f+@?7D6I#A)=^rsuI~`nq8K*rME(I?;?X|JjoN=)eEuwg23j{n(@b*pUC%jOVgz z|KqXuv047oiS*E#*N`^iz@GZLV*0*l|K6kj*p( z(R%;nvg@!{|K+v+=ez&sy#L&u|I>v3)Pw%nq3oke{>^j$&T;(6c>KzJ{?B;Wlt8y# z0RQK{1<|KYFx-mKx7LH^Es@VjyI#eDn9iQ>PW z^U#|8)}H&%mH*Ox+L%M#nnBBa9Ob7>?73_G$8GGlX#d}*{mOLz;H%u2KJTnk__}ZY z)QBG>3 zEB@T1|Ln~F)`#@GWA(mg`MF^DyK(={bN}6-*polgjx+4CTK?Uu|LVrljWh7PbMe1( z|KhRvxn%s#j{oGe@xgc1kTdwQS^ddx&3qiqeICqy9ov;a`o@C#$AtdNZ~3}s)Q>vw z-pux@Qvd(}A^!_bMO0HmK~P09E-(WD0000X`2-0R0RI3i000007yuXm00{p8{|OvO zu%N+%2ooy&S0qZ5A`24^p<`x9M1(L}B!OXY2@DuZ6f$|yf{8&USw@&lD1@XCgF-aE zOn8Lk5rZ{b+)Sth5E~^1m5^xxG+~S~HDV|YqcmEKIWuA?yppHE3OIJI#92@w-5noS z26A}vM9jb^UuF!dfd-ctFf~4i@bP5ejZ+IU+z@y}*EwGATKKtf!O@HxjrI=Y;Ym|A z9{+fZiR25K0|z_`Y{Og(GQl1AEcMy3;{h!bAQZ^ip#i{ZMmr1=QD9{Tf(Idp5J0AZ zh=5hooOK{#&7Qijd=A2?L@yNeHxV0J#)fwrpKM^@fXzgZ)Uf zqqJ+%8bQlc2@@nijhb!~5GFXlV4gT20A6AYfB}HwjWr3e;Ez0YU?IbUh{zDiHF$V% zi$YHL?bSMiA;K*}=6A>BV&xt3VfT9r>wfIj!03rDV1rz}P04x9i000;O7ytkW z{{a6997wRB!Gi>gM2S)ap~Hbg=$IMu@F9#ANnjXU0t3d9hfQ9zXkxHQmJuW!QV~hT zAQg-)9U>8l#Nf;pH5~>4#3qQrAY@wjbm*c?4HrnmAdTl@&I}h1tK@000*;+3aTZi4 zcgIJSfgGSf*)tHzml=ai@XDS zkm-Z2$G;xABH4qGhFy;fuF~{?<(Qz3e3)wJ&|yWL30Aho=+NL!^)MXT`If~}>3UtA7u!Mn8$|7`uH=q&JICun-~a#s literal 0 HcmV?d00001 diff --git a/wxParse/emojis/88.gif b/wxParse/emojis/88.gif new file mode 100644 index 0000000000000000000000000000000000000000..4d8b15e7e625ddb98838f58ca001f3163c5fad45 GIT binary patch literal 2134 zcmeIx*;f;08prWB5RxDfSu%0He1Jb%FN;&Z-_?>-+_ zw_pok0hZ=K-3id}C8!Mq;&AZzBzWH#(wjnQ3I+F%gNGrYB?8DYC>rT^16L{1R7xj{ z(tjCraVYIqD8i$l>KIsjS^-}c4KM+mt{-Fp*mrK`HVrD9;pDxJa{#J4;8Y!)Zh-wP zMXnc=XXxbFaO(bQ54R_g(i;oli=sE}iRw~cD2alyIK{*3us;sUVwc1x;Q)K(@p+Ae z|1y=JF7c9bw~z4Lmc_wK;!_&&Uw)|w)V7~qtfH&SKZWv4@!3sqC~b8x?Oo-u)y_++ zPfn@wUA2;A<-RRes3?OYg4U=_vIL;*h|oQ~ z230L^{D+>)HWLDG*caWMK!PK=P}Qoe30I`s!P!T{-%{qEHR&V?>hk^L0&k@-r0)_K z;eQNY)x2+Is~Y0r&k~*DC-|a7ReurAKGuzv!O8o-$eUD+T=;YESjmw$-C1z@!BD#G z@b$d|9HaN$SKH14Rqbg_4-d|Y`r-|jAH~a(i1X4S8Os<>)%S6U?`lu4_UEk*<#$B` z84Eiq@O)L5FkkuAo0lzfy+zA&W7=nhLp;h`S>78_oc3w{!f?~dlPg;Joz=mc8rgN# zLnc(Vs_HIi$Eug^oq1W4u=F5C-58^l3lu*Djplx=s*BNdXFkoM%>NiV%(qike?40n z2CMuOSE-xg22$;09D?peg;riP zRdE8&G-`)S-rYR{{)Zz%qeI?Dk9gAjy`6WE^$~xcBCa3}abONOtWQl%+TplGjvOm8%mS9{W_!dxdHu+9kJ*J6y1 z1sJpt(TxHW9KtmPAgnzDrU}AD?*jryFTeU_)2RYr^H*fb-m}(R1B+cd8A$hl=~kM1 zW+=$5o=qZb-QrTaaG2Vi&BX=L+AJ?E@VpV2<|=PfoRf>#-NeUX9EmbO{zDY}j;PDO zL=__CnyAAGcI0A#18VE9(Jrp(EPG#)Q7Pzjw58b-4maS-(`a`74L%<&NSU{`)9u2B zRP~^@_@L3o4CiBxN4?O-I3~~2kFR(9r+{trFluKqA~Br74i$-*HF;)t2t1TNN{?iH z%$lJzN&W=+9X=z{&V%&HH>-Gy^UQD4c3o6)U3nc0Hf^IB*?FM#Q?}W@uszIk&CO|O zleTCTWGLEUi@0rH4N>9~ETT$iL64H`(^N zabrv`9%Ju}?h1IOvi$Md`aQ^@uS4)|d?P8HbiW{|o?d*}J6b_SU?R%$w}E7A9w!l% z6K~;Po<#ljyXo05Gf4_q75d zM1-gsA;NkCV{0n2gO}rmiHJ8fFI#77w&Svwn*&I-L?~`z+=CH52eB5ct2wbzJPBzt zwbbbW(JvXb{)2d&^tBB!aeHWE6?#J;j`45KR|<~Fp~!!78vI_EPQT^+f0+Lv%r(i~ Fe*@T%#YO-C literal 0 HcmV?d00001 diff --git a/wxParse/emojis/89.gif b/wxParse/emojis/89.gif new file mode 100644 index 0000000000000000000000000000000000000000..05726dc4abb26afda444aa8b059006bff0af1bec GIT binary patch literal 1219 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 literal 0 HcmV?d00001 diff --git a/wxParse/emojis/91.gif b/wxParse/emojis/91.gif new file mode 100644 index 0000000000000000000000000000000000000000..608d0ad87c31a4e2ac8a28529c7af1a08a0abbbc GIT binary patch literal 654 zcmZ?wbhEHblwgoxc$UT>DJ1%zf#LuE|7&H%|I5nUHZsywQhm|M{`lRmIdkUxmy^A8 z=lzvb#)}s&|3AdY&B^)yLBzg8r@sCEAL1A2Z=n2oqh3UK`hOlCU+-uUK`9|VK}C7Z zoQ#59i8>Z$E+2mVDzz8-e%9^Gk?m*Cp1m}qOiEmF>5^qn=Eg=z$#k~1%SkIedi02! zgZBal`^yb=@0QDK(b4g9cb}@R{y#szt*ND@sYQ^ROGQcN$&;r?Sy@aBZGF9?q9U`N zudA)AX;zfel#)<9%*herAE+oQe)#a=V`r|pItT47a1x50c?DGz zbwd5aM0xlWgvGXR+qJ|*Xj0#Vv+Y*EuwtMdQ2fcl$iR@spaU`z6ekSquN%^unp;}i z+B-VCx_f#U)A~DO;yrW{485BfXV30PVi03kWX7-7G-qy`h19}D47^PIyvtX%nI^7V z#KgdFH>)!scISE~cE01?UQ&k_C9|LJGUf_mzIu&Wmzljg(24bP%N|W<4I=~A zH*dnimAjqH0$0LOp4Kfr?l^5_GZf?6uWBFp7VSD>Pz%Rrcsr<j!>0PZ-p&h<- zX*o@|TUafn=4EL+uT_U{=Sy9w)pgl6!I#vz3%A>}g!rxgf&Bsd{s*7WeZEP`#HeUJ z4sfvA1t5gO+5XE*i)6*&pBW&F1vtVJM$-t*cd42z;&L&R_hzd+EhWWrs$q04ootgH#g(^L02nzP)O zF1;(+a>JX;L}-0<>=lc(Uz^dznfuhJOxtqM`n5VeJew@1Eg3Ch}mhNAL15Eg{&+M|NeIJ0idGeT;#}DszeiZqn z3`B2>NmC?^U*HV(^}*$3Yc%~w1cN^yZWe1W6L@M*j^u*1Cz^64W9-Rvw-V?xvljkZ zow|C;s$;+8^ABd{6n$LuvXL`gQ`2&;^-yuigvAOsY*=1fb2e=C0MO9bG)tyrQQ4{S z3WsUS(?u67E1Q{_fzO_;x!urY`ukz`AAvzLFV>^{p6=#3^V9oGpJ~kqoR(*`ru$N@#0toiKM!T zh9%?;HEgPiI*_R|8VRH**+SJB1s!CBxgV*c9KGvQzEm~Aw%_YiY_-pIWwC=e|8V_R zJj1|Pr5CX{qr0b~ZEpq9jHd`5n~{nsto+tUe1V>Xlm=_<#(ep=6fCT}l5IH*BpBuL TdA22K#cA)aAqVW03PJ3@f(O+M literal 0 HcmV?d00001 diff --git a/wxParse/emojis/93.gif b/wxParse/emojis/93.gif new file mode 100644 index 0000000000000000000000000000000000000000..7f71a8c94cde07ca85f7e7880732cb41f02c053b GIT binary patch literal 1119 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 literal 0 HcmV?d00001 diff --git a/wxParse/emojis/96.gif b/wxParse/emojis/96.gif new file mode 100644 index 0000000000000000000000000000000000000000..2b709e15bade2f707632e1a4bdc2b7e97521b4d8 GIT binary patch literal 1796 zcmeH`{ZrC+0LMQ(2w!=SuRw}~^UG<@kQzF5nyo<4$TW2`Pn&CE+U#o0T4il!pkk(` zSX;B*F0klfs~_-Tsf;=_OdDIGS=losF3K%aNkz%;s&%)!tsi%{U-teB-tX7F-piK9 zMMlY3fCVOZ11{5R+&Me57dJLGcIu17XKbIM!jkDLTW?oL>@9_ZkEdrX!8V(1mKS_{ z4r4kzVy2+rLTA?x4En7?o)3f7*W2faPei}Rq7+J<7jrT%&(Yh|)ZBbk9#L0U_pHl% z;Et`Ty873%l{W@$ED{MdV~%N$4|6ygHsu1r&BR487>r^5eAJpg5FWvxdiGN(H?Q}j zZ5Z_C>XmVE=po!T8jPAS%92u^f8b5!B6}sVO|Pdww6FysdKtg7-O!(lxhsF`;qdUP zq%?{rJz%b%)9KtK|I#@**>a|B#^o9r8F|{Kw_LlwC_HiqMO`zlMs1~pU4kwkfKJ<*{Xd;gQ1n`arL%s_T+a{cg?PAH&7G#wjvC5xu%BtEth&v zgzzRNr_RH$!Pq%*EcVfUTF-XhhC^km(lbBLOn5RnT2)Z+IGEpUww$Renlzgyn#1)i zE$8$tGe0Lz7&BYmT|$8%^ku;R`A-ROQS!>z)c3`r^1UB^w)R%+Jq} zl`~mc(tH)S1jllF&uXtw5dq)}vhpleQAyN7z)aZ>gT0)@)RXx#5e^@nTxIxu23xIW zuw2rE9B?VS6!2gnZfBz!kQ!5gP6eQ_oIs*#i_(~^%vyvz2`#+{=KFtZuS;GhQ+biM z2Ix98@x>wJ)%c77QFqM)OMQ|(zd`?Wc;FNf|2h`q{~n95u(9lAd+G1wWWrgd@)!^n zsj(Nw$Pbdk@tS-qfT)1j1`rue%y#z(&B@ms5t0CCMI7L3Hv)yqUToQb5!S*au`RE- zUQU2MI9IC3#&^{!KXqm8u%6g51SD*_@H1>l?otdhrs*ZrC~Q?z=Evz4ENyA%7i*p}%uDzsKDluD1-j z?StU2k_V=WJ1Un1azb~=@a2B~MRG?*NTdK_>xu<^$>+r+BI3O20;0S@X){2M;L>@_N+$`Y&`YR_sB!dcmK*!#&H{qoLZhw1&@t@0K|2QP3zKhKEM844&N8Oa(yAmREKx56t1Hrs7 z6UM4tK_VO!I8yp@)!tD@1RK|nYik22N!Zb~CYtKN?&=_l?7UVzN18SjvL4qJ0|Ioq z48hv6!_gabAgEC#@ra`1Iq5$VS3v&2>l`w=%+2qOz{RDS@ja4EY-6 pdy_y~NrNP&ELe=khAb%N|AyH1Jm^usxwTxXZ+>{0fWw05KLB@?Q566H literal 0 HcmV?d00001 diff --git a/wxParse/emojis/97.gif b/wxParse/emojis/97.gif new file mode 100644 index 0000000000000000000000000000000000000000..cf29be87c890a6633eda84dacba996a29183c09e GIT binary patch literal 5300 zcmeI0YgE(s8OQ&@5E6nc2?+@yAy<+RLN1VmV1ncVA>2a{0tg`pB8p|v=@D9`34}`p z5kwRyR6&N;gDv31j^d64m{g}GMH$we0wY?SbI01XN@dO1&V0c+o}IpL-u+&G&iC{E zJk5yqKP5QaM_l4I-Z!Ck{=N!2=&S!Kcz#9Jcu0P7s66b8X%nC5dCRBIH|>(^3r>6kZmk zIYOc5=Ir^GotqLtd$n-Ob%znJ-sW1&4)7=W`w=5Ws-G71uO8i7F!R2y;xOr4ytnrf znRJ6rzsg`-B4Q;X)#&Kx+S==}v9VZ{R+qkmLFZDC$j}gx)A^|Ca7|zU^&n5&*WFXa z3r*J=eqfLt_SqFO>He%^?e*H~>M9l);DbcHUR(RpVZY-Au|vI@nwx*yKd}1prK>2z z6(_tpI_8o|Gt;tWXJ@yFB?0@$m^7eTL4sqoC}@)bz!H^K=5` zivY~E@$tOvdyp9H$0+pISWKN*5U0|at1KgzM`vbkR)&T?%Zzmyl1~QUPqv-vYH#oD z>AQvSd5py_E-d^YKf z3Z=EV$zgZwGaa~pe@-cl?#E*DIT7dasP_&XQ7TgAaQ;V0R0ok*keU4~gn67B^6Oo@ zGt#m@>^hs1nw}TKD=?G^_|im8+E!`eFb4hP$R*~S7xac4(QPiL1lIelvC#x#+*@`0CHnfUDK(+VnWWcYWnO0D^D z)vOQP8YV0*+^tb(>e7v4qo1cJ7uycsd3vfR0?feIG4W(1ONbK6%2y_ zE`YQCUY7(10MH)+7mT18Iy+GV^<(GF3>8i)jx6@$(r1pVEbnn!u9GKPTG59H&6VGJ zfGlKX6Am^q&vuVBt|W%}sq7taNh#S|NtOh!-apY{$6)eoUtk-L(Vh)l9<9(nH51rp9?{_Lp@ z<`IA|)xJ_%>io$p2o3BgnepPoB^5c!n#t;*-_V(dmzEUZqO_{gY{U}ibZvt1dg(}C zeG@VK0@;GxN%<8czNAe)d%FDW3JsgowUx?3SXN#~SA^mo0o0O@12=*G3#B z)<0W@RS*oF-^X!IIH4vK zG>dHR1$!T_jqG2vw-(jCBy2Gyd;flTczpG{mD^t6x8eDIBc7q&$$GD{{>k=G&rAD` z1vOWm0)ZefZ>v?_KiCU+@ie$>IlTc4FUF6)`)%JBH&3Dbx0OmPkKcquIk~;*K-`Z` zxZg#cGgp{*1#V`Sj~fJ=w6U|cy?^^}BnBUl!qxA{FF<24P-t=KS;Z3E6Q9esf`;de zeT75ahk?uHn$y8T2?wx!0J>m(SXWVjn3!)P;r(M*kmZ!o3{av;BhQ^~gMh7J$x0t} z8z#CKOqP4Xnpp5ke$-#Pz||P2k!7(JEo}~w9B_6_$m)Fw8Rhcs)N5l0>p-Blk#Kvn zp+?-^xV`yV-nfJEe}m$#l?}Dx{%_vQX>M=a-u(PA*6qz3Z`_5tp-|m5vav?IH*Ukf zTyH!BHj?;-d*jLa4-PN@27CeN`k6$(zWA>FxzN$@zUjq5oCKjiio{aC{M_7FcnvMm zecxDN`Ka;TO{<0DrsK=C{8vBS-u~dyAG?k)@}YlMXPilB=F0!HH=Wsd_e{=8!w}PM PZ8)cCg}lHb0O`L0!%Y2- literal 0 HcmV?d00001 diff --git a/wxParse/emojis/98.gif b/wxParse/emojis/98.gif new file mode 100644 index 0000000000000000000000000000000000000000..c70e7d339fca9d0d12b9e66a1fbb6a68f4c6f4b4 GIT binary patch literal 1629 zcmb``=~Gi@6bA5n69`%1hU^O_VUs1YNKo85LD@k-ML@-o;D$O{A}%mRNgzPbfT)au z0}6-&gS0Fv7O^6mK~ZB_+%Xtzp|n5|p@G0#=yayjPCxWRpFiN7Ilp<1ufLDS3JDWp zLQ?}!gG6XaV|MR`S>`mLjWjnUw>@ZN>^x2)IwKpi-t!8-M<`VRJ}05sRIi0VOO#5eH8u;CUP#ht3%q9cPeP0x|`S zLI*gQeFWfI>2+W*9FpZuPELYF7R6-b$D4_OKxk`uI35r(m}xQ>A3s-KQ9`AzboUr) zNPc_HtIC2gYiIvXA^P0g2m%8OzuH*l>M&<(_qK3Pe|}Wo#i*XH$0w6g-zz=U>W=y2 zXAFk-GUwTcj2Q~0_uW9h!dW*s{7&WDcT(7DEtqw4t4iNGr^*^Bovj&kvZ>jKqp*@MCS!|$$hXVp%_We+uykX;pNWES^<>uzL#1)jo`}Te*Ad~Me;w|R#oEAIA5eSo0 z`iA=YtH%PqYp8!}f&t&4T!bQoNE}p|lrUL_83Sm8iDYvtCTH?w^46H0mJD`RSC@Wj zDl02X^Yr;8F16m)wtzz$=J7xSJWQu2P^pbPUQ%>O3l1xwQqxiu8m!5&qsO~FR!~gI z2@!r@C#@fsNK|yj^vczsnfzwy(y7OfK><4dfFJlH^9cWM1b`6i9kywmXQ=m5Cl@q4 zKV6_V!kIw>kZ@ts!ka+YIj952^{Xy=kcy=^M5(KbTQaa^6E25!tr&M?w}$^g&;|*t zE_fW-P?Rc{^4eKra)tLgpA@mGMPt-*$I4bC>Wo4Arc3?X)0DraAe?jrAGS}^gcSMb zq>IPeLOZSas}A3k6$`L*r*^tS!u7S!h;~%F!SYYLjNLcmC`OUd{*SJ>ZvQ#I{jCvRc<%R5{3wV@EaJif%GTGVfWLEu@@p6Q94dGjdZS;=5-Ah>T*Ydo4ShRxFgp5eh7^;;mpsoo%SUuvcd2MZ zi4&3PUN)VTM4gigVjB6a=>i3+5fM!H+}K8& nf|?2vjZkXVvPb9>MGz{H?Jm^WG#qu_Ej(q+3%Q&mhF1L!e4&X{ literal 0 HcmV?d00001 diff --git a/wxParse/emojis/99.gif b/wxParse/emojis/99.gif new file mode 100644 index 0000000000000000000000000000000000000000..05c18635da1b3258e044e30de4f7a72058bfd6c8 GIT binary patch literal 2261 zcmeIy`&X0q9l-JLlRODYAQwm=PeKAoxCO`{gou$=7jgp>FkDo?C<%(As1z7g>V+j- zBt+CqprWWv0@YY*8>_OmoOa<-q)dBg#e(*@1?(JhdN$BbYfs@BP&VmK_aE%}`TP9v zeSJUgPjae8w#I+}1fbzyZfh< zePbt7dw*N`ZFKbGiJOHI3EBsBO8urE&kHzF(=hHE8297YJ#kPa9aQ3e#I(In| z9i-0R7B?L~Udv;mPoF+zG8YWaDCh;@kp~VQI2{%?HTCFrNC^5F^hXv8MUV(i@JAnh z%x5r4!@`D!{!~LEJ^I_!QHzyLB2^!*eLOqc)%EVy0zClGE$gQ0eN~3ctP(Dl$qnjb zu?jYA(Qe$>6B;pfB{fZ2dg$6@MaPZVkN&ETpuFIEi+!%_Bi;I=6 z630q=n9NhHXWmDU{8({^<6@bF?y$f0JH3zdXgv7;_df*q&tW11H~=5@&QRxME0eTp zNsJf^EgTmu{<4?}AfP}^7CabdaH6~^-??Q@RZU)dxupC%t z6tF4O?`5%GZuI_@2-eApB{jjO6p~PDOfuCHy@I6ts)!mReLt`=u49y@i?{%htc(Zu z(kU$^{vUt=BsRXn4aM2smj60hxAV^1sXUx${eaFit4?Rf@Ba4M_-#|xNkU~erM#k! zfa7Y~t~EZvlh0GQY@+n_@3N0VQYURZP5${V>Sp}S$Q@Rd1;QRGyW3~GPG)WEOJmu} zfW?>0F1~XBug27esODxyKyN7>RH^cEaVb_G*87N;Q9j@oxr$L@F7If-i8-=dCJm}j z^Cgp3rx4tqe0-1?C>VZoBdV8!fAcL^;TNQ+%T|o~2dO3^e)}P0$i?qx5Pb-~JbeQo z08UBh?>#06i_sMu_?{X~!%CU*@kg+F9cGJO=)UT%!Ff^YXjKBtrwj_nq4CNfbKLe_ z-x#rlMs4P)d6yH|qQTlyILqx&-SkHaMmyuK4rbV)(s}Dt)O4MjpK+XKxAha66UzT= z>y6hNg$=6rUZv)gI2+%_$?Yx1Wn#5W z#Ut*nv3Q~1S%yq8N~Mx%;|Y*4x#d2l3lLB8l>rlgX3iD7g|8sTm44>}N3dSrCYzNS z>42W&iO`o_1+j+yzZ+i|K?_FoC8H+`^E5Eq>4vef>j=6bt=j*TL62O4WJee}% zHbPL$H5aXn-ysjhF@$cLySENYJ=3-{H0{enqg?CDG3SHArc=!RM6p=Q(Dc z1rrcf_^$hVNBFVRt6oby1mv6Dw1{N0cEnJZ+Ae!_q>j6F-y+0gKWpO8AkaAnhA3COd8|^gBe+m(2*$cJY zOl+~1FYkV*Lv=RM_|M)V@7g~k?5rg2(4P<{gs`Q^Fw@OSNK`NOkW@equTuGLTJ8b= zQxDRC55DNfAQX-Wu2EbtA0hi;oZD~Z_Z?aB#4lFHre9bYA?wekWKJHnc!}5QvE>?y zHcSNpt%9aP3SK5wx|~XtqVdj-3nG&yx!w{t4%Q1$Pm9j%wW8jmT?BrW;mb zl}n<}IDI7l@Zu`Ey1a_YmsXK@8`t(2O6rkURLJfVMwP1Y-y>LX6t$O55EK%#)kl2`WNaZ!~XyP literal 0 HcmV?d00001 diff --git a/wxParse/html2json.js b/wxParse/html2json.js new file mode 100644 index 0000000..7b165fa --- /dev/null +++ b/wxParse/html2json.js @@ -0,0 +1,303 @@ +/** + * html2Json 改造来自: https://github.com/Jxck/html2json + * + * + * author: Di (微信小程序开发工程师) + * organization: WeAppDev(微信小程序开发论坛)(http://weappdev.com) + * 垂直微信小程序开发交流社区 + * + * github地址: https://github.com/icindy/wxParse + * + * for: 微信小程序富文本解析 + * detail : http://weappdev.com/t/wxparse-alpha0-1-html-markdown/184 + */ + +var __placeImgeUrlHttps = "https"; +var __emojisReg = ''; +var __emojisBaseSrc = ''; +var __emojis = {}; +var wxDiscode = require('./wxDiscode.js'); +var HTMLParser = require('./htmlparser.js'); +// Empty Elements - HTML 5 +var empty = makeMap("area,base,basefont,br,col,frame,hr,img,input,link,meta,param,embed,command,keygen,source,track,wbr"); +// Block Elements - HTML 5 +var block = makeMap("br,a,code,address,article,applet,aside,audio,blockquote,button,canvas,center,dd,del,dir,div,dl,dt,fieldset,figcaption,figure,footer,form,frameset,h1,h2,h3,h4,h5,h6,header,hgroup,hr,iframe,ins,isindex,li,map,menu,noframes,noscript,object,ol,output,p,pre,section,script,table,tbody,td,tfoot,th,thead,tr,ul,video"); + +// Inline Elements - HTML 5 +var inline = makeMap("abbr,acronym,applet,b,basefont,bdo,big,button,cite,del,dfn,em,font,i,iframe,img,input,ins,kbd,label,map,object,q,s,samp,script,select,small,span,strike,strong,sub,sup,textarea,tt,u,var"); + +// Elements that you can, intentionally, leave open +// (and which close themselves) +var closeSelf = makeMap("colgroup,dd,dt,li,options,p,td,tfoot,th,thead,tr"); + +// Attributes that have their values filled in disabled="disabled" +var fillAttrs = makeMap("checked,compact,declare,defer,disabled,ismap,multiple,nohref,noresize,noshade,nowrap,readonly,selected"); + +// Special Elements (can contain anything) +var special = makeMap("wxxxcode-style,script,style,view,scroll-view,block"); +function makeMap(str) { + var obj = {}, items = str.split(","); + for (var i = 0; i < items.length; i++) + obj[items[i]] = true; + return obj; +} + +function q(v) { + return '"' + v + '"'; +} + +function removeDOCTYPE(html) { + return html + .replace(/<\?xml.*\?>\n/, '') + .replace(/<.*!doctype.*\>\n/, '') + .replace(/<.*!DOCTYPE.*\>\n/, ''); +} + +function trimHtml(html) { + return html + .replace(/\r?\n+/g, '') + .replace(//ig, '') + .replace(/\/\*.*?\*\//ig, '') + .replace(/[ ]+ + // add to parents + var parent = bufArray[0] || results; + if (parent.nodes === undefined) { + parent.nodes = []; + } + parent.nodes.push(node); + } else { + bufArray.unshift(node); + } + }, + end: function (tag) { + //debug(tag); + // merge into parent tag + var node = bufArray.shift(); + if (node.tag !== tag) console.error('invalid state: mismatch end tag'); + + //当有缓存source资源时于于video补上src资源 + if(node.tag === 'video' && results.source){ + node.attr.src = results.source; + delete results.source; + } + + if (bufArray.length === 0) { + results.nodes.push(node); + } else { + var parent = bufArray[0]; + if (parent.nodes === undefined) { + parent.nodes = []; + } + parent.nodes.push(node); + } + }, + chars: function (text) { + //debug(text); + var node = { + node: 'text', + text: text, + textArray:transEmojiStr(text) + }; + + if (bufArray.length === 0) { + node.index = index.toString() + index += 1 + results.nodes.push(node); + } else { + var parent = bufArray[0]; + if (parent.nodes === undefined) { + parent.nodes = []; + } + node.index = parent.index + '.' + parent.nodes.length + parent.nodes.push(node); + } + }, + comment: function (text) { + //debug(text); + // var node = { + // node: 'comment', + // text: text, + // }; + // var parent = bufArray[0]; + // if (parent.nodes === undefined) { + // parent.nodes = []; + // } + // parent.nodes.push(node); + }, + }); + return results; +}; + +function transEmojiStr(str){ + // var eReg = new RegExp("["+__reg+' '+"]"); +// str = str.replace(/\[([^\[\]]+)\]/g,':$1:') + + var emojiObjs = []; + //如果正则表达式为空 + if(__emojisReg.length == 0 || !__emojis){ + var emojiObj = {} + emojiObj.node = "text"; + emojiObj.text = str; + array = [emojiObj]; + return array; + } + //这个地方需要调整 + str = str.replace(/\[([^\[\]]+)\]/g,':$1:') + var eReg = new RegExp("[:]"); + var array = str.split(eReg); + for(var i = 0; i < array.length; i++){ + var ele = array[i]; + var emojiObj = {}; + if(__emojis[ele]){ + emojiObj.node = "element"; + emojiObj.tag = "emoji"; + emojiObj.text = __emojis[ele]; + emojiObj.baseSrc= __emojisBaseSrc; + }else{ + emojiObj.node = "text"; + emojiObj.text = ele; + } + emojiObjs.push(emojiObj); + } + + return emojiObjs; +} + +function emojisInit(reg='',baseSrc="/wxParse/emojis/",emojis){ + __emojisReg = reg; + __emojisBaseSrc=baseSrc; + __emojis=emojis; +} + +module.exports = { + html2json: html2json, + emojisInit:emojisInit +}; + diff --git a/wxParse/htmlparser.js b/wxParse/htmlparser.js new file mode 100644 index 0000000..811ddac --- /dev/null +++ b/wxParse/htmlparser.js @@ -0,0 +1,192 @@ +/** + * + * htmlParser改造自: https://github.com/blowsie/Pure-JavaScript-HTML5-Parser + * + * author: Di (微信小程序开发工程师) + * organization: WeAppDev(微信小程序开发论坛)(http://weappdev.com) + * 垂直微信小程序开发交流社区 + * + * github地址: https://github.com/icindy/wxParse + * + * for: 微信小程序富文本解析 + * detail : http://weappdev.com/t/wxparse-alpha0-1-html-markdown/184 + */ +// Regular Expressions for parsing tags and attributes +var startTag = /^<([-A-Za-z0-9_]+)((?:\s+[a-zA-Z_:][-a-zA-Z0-9_:.]*(?:\s*=\s*(?:(?:"[^"]*")|(?:'[^']*')|[^>\s]+))?)*)\s*(\/?)>/, + endTag = /^<\/([-A-Za-z0-9_]+)[^>]*>/, + attr = /([a-zA-Z_:][-a-zA-Z0-9_:.]*)(?:\s*=\s*(?:(?:"((?:\\.|[^"])*)")|(?:'((?:\\.|[^'])*)')|([^>\s]+)))?/g; + +// Empty Elements - HTML 5 +var empty = makeMap("area,base,basefont,br,col,frame,hr,img,input,link,meta,param,embed,command,keygen,source,track,wbr"); + +// Block Elements - HTML 5 +var block = makeMap("a,address,code,article,applet,aside,audio,blockquote,button,canvas,center,dd,del,dir,div,dl,dt,fieldset,figcaption,figure,footer,form,frameset,h1,h2,h3,h4,h5,h6,header,hgroup,hr,iframe,ins,isindex,li,map,menu,noframes,noscript,object,ol,output,p,pre,section,script,table,tbody,td,tfoot,th,thead,tr,ul,video"); + +// Inline Elements - HTML 5 +var inline = makeMap("abbr,acronym,applet,b,basefont,bdo,big,br,button,cite,del,dfn,em,font,i,iframe,img,input,ins,kbd,label,map,object,q,s,samp,script,select,small,span,strike,strong,sub,sup,textarea,tt,u,var"); + +// Elements that you can, intentionally, leave open +// (and which close themselves) +var closeSelf = makeMap("colgroup,dd,dt,li,options,p,td,tfoot,th,thead,tr"); + +// Attributes that have their values filled in disabled="disabled" +var fillAttrs = makeMap("checked,compact,declare,defer,disabled,ismap,multiple,nohref,noresize,noshade,nowrap,readonly,selected"); + +// Special Elements (can contain anything) +var special = makeMap("wxxxcode-style,script,style,view,scroll-view,block"); + +function HTMLParser(html, handler) { + var index, chars, match, stack = [], last = html; + stack.last = function () { + return this[this.length - 1]; + }; + + while (html) { + chars = true; + + // Make sure we're not in a script or style element + if (!stack.last() || !special[stack.last()]) { + + // Comment + if (html.indexOf(""); + + if (index >= 0) { + if (handler.comment) + handler.comment(html.substring(4, index)); + html = html.substring(index + 3); + chars = false; + } + + // end tag + } else if (html.indexOf("]*>"), function (all, text) { + text = text.replace(/|/g, "$1$2"); + if (handler.chars) + handler.chars(text); + + return ""; + }); + + + parseEndTag("", stack.last()); + } + + if (html == last) + throw "Parse Error: " + html; + last = html; + } + + // Clean up any remaining tags + parseEndTag(); + + function parseStartTag(tag, tagName, rest, unary) { + tagName = tagName.toLowerCase(); + + if (block[tagName]) { + while (stack.last() && inline[stack.last()]) { + parseEndTag("", stack.last()); + } + } + + if (closeSelf[tagName] && stack.last() == tagName) { + parseEndTag("", tagName); + } + + unary = empty[tagName] || !!unary; + + if (!unary) + stack.push(tagName); + + if (handler.start) { + var attrs = []; + + rest.replace(attr, function (match, name) { + var value = arguments[2] ? arguments[2] : + arguments[3] ? arguments[3] : + arguments[4] ? arguments[4] : + fillAttrs[name] ? name : ""; + + attrs.push({ + name: name, + value: value, + escaped: value.replace(/(^|[^\\])"/g, '$1\\\"') //" + }); + }); + + if (handler.start) { + handler.start(tagName, attrs, unary); + } + + } + } + + function parseEndTag(tag, tagName) { + // If no tag name is provided, clean shop + if (!tagName) + var pos = 0; + + // Find the closest opened tag of the same type + else { + tagName = tagName.toLowerCase(); + for (var pos = stack.length - 1; pos >= 0; pos--) + if (stack[pos] == tagName) + break; + } + if (pos >= 0) { + // Close all the open elements, up the stack + for (var i = stack.length - 1; i >= pos; i--) + if (handler.end) + handler.end(stack[i]); + + // Remove the open elements from the stack + stack.length = pos; + } + } +}; + + +function makeMap(str) { + var obj = {}, items = str.split(","); + for (var i = 0; i < items.length; i++) + obj[items[i]] = true; + return obj; +} + +module.exports = HTMLParser; diff --git a/wxParse/showdown.js b/wxParse/showdown.js new file mode 100644 index 0000000..d29206d --- /dev/null +++ b/wxParse/showdown.js @@ -0,0 +1,2532 @@ +/** + * + * showdown: https://github.com/showdownjs/showdown + * + * author: Di (微信小程序开发工程师) + * organization: WeAppDev(微信小程序开发论坛)(http://weappdev.com) + * 垂直微信小程序开发交流社区 + * + * github地址: https://github.com/icindy/wxParse + * + * for: 微信小程序富文本解析 + * detail : http://weappdev.com/t/wxparse-alpha0-1-html-markdown/184 + */ + +function getDefaultOpts(simple) { + 'use strict'; + + var defaultOptions = { + omitExtraWLInCodeBlocks: { + defaultValue: false, + describe: 'Omit the default extra whiteline added to code blocks', + type: 'boolean' + }, + noHeaderId: { + defaultValue: false, + describe: 'Turn on/off generated header id', + type: 'boolean' + }, + prefixHeaderId: { + defaultValue: false, + describe: 'Specify a prefix to generated header ids', + type: 'string' + }, + headerLevelStart: { + defaultValue: false, + describe: 'The header blocks level start', + type: 'integer' + }, + parseImgDimensions: { + defaultValue: false, + describe: 'Turn on/off image dimension parsing', + type: 'boolean' + }, + simplifiedAutoLink: { + defaultValue: false, + describe: 'Turn on/off GFM autolink style', + type: 'boolean' + }, + literalMidWordUnderscores: { + defaultValue: false, + describe: 'Parse midword underscores as literal underscores', + type: 'boolean' + }, + strikethrough: { + defaultValue: false, + describe: 'Turn on/off strikethrough support', + type: 'boolean' + }, + tables: { + defaultValue: false, + describe: 'Turn on/off tables support', + type: 'boolean' + }, + tablesHeaderId: { + defaultValue: false, + describe: 'Add an id to table headers', + type: 'boolean' + }, + ghCodeBlocks: { + defaultValue: true, + describe: 'Turn on/off GFM fenced code blocks support', + type: 'boolean' + }, + tasklists: { + defaultValue: false, + describe: 'Turn on/off GFM tasklist support', + type: 'boolean' + }, + smoothLivePreview: { + defaultValue: false, + describe: 'Prevents weird effects in live previews due to incomplete input', + type: 'boolean' + }, + smartIndentationFix: { + defaultValue: false, + description: 'Tries to smartly fix identation in es6 strings', + type: 'boolean' + } + }; + if (simple === false) { + return JSON.parse(JSON.stringify(defaultOptions)); + } + var ret = {}; + for (var opt in defaultOptions) { + if (defaultOptions.hasOwnProperty(opt)) { + ret[opt] = defaultOptions[opt].defaultValue; + } + } + return ret; +} + +/** + * Created by Tivie on 06-01-2015. + */ + +// Private properties +var showdown = {}, + parsers = {}, + extensions = {}, + globalOptions = getDefaultOpts(true), + flavor = { + github: { + omitExtraWLInCodeBlocks: true, + prefixHeaderId: 'user-content-', + simplifiedAutoLink: true, + literalMidWordUnderscores: true, + strikethrough: true, + tables: true, + tablesHeaderId: true, + ghCodeBlocks: true, + tasklists: true + }, + vanilla: getDefaultOpts(true) + }; + +/** + * helper namespace + * @type {{}} + */ +showdown.helper = {}; + +/** + * TODO LEGACY SUPPORT CODE + * @type {{}} + */ +showdown.extensions = {}; + +/** + * Set a global option + * @static + * @param {string} key + * @param {*} value + * @returns {showdown} + */ +showdown.setOption = function (key, value) { + 'use strict'; + globalOptions[key] = value; + return this; +}; + +/** + * Get a global option + * @static + * @param {string} key + * @returns {*} + */ +showdown.getOption = function (key) { + 'use strict'; + return globalOptions[key]; +}; + +/** + * Get the global options + * @static + * @returns {{}} + */ +showdown.getOptions = function () { + 'use strict'; + return globalOptions; +}; + +/** + * Reset global options to the default values + * @static + */ +showdown.resetOptions = function () { + 'use strict'; + globalOptions = getDefaultOpts(true); +}; + +/** + * Set the flavor showdown should use as default + * @param {string} name + */ +showdown.setFlavor = function (name) { + 'use strict'; + if (flavor.hasOwnProperty(name)) { + var preset = flavor[name]; + for (var option in preset) { + if (preset.hasOwnProperty(option)) { + globalOptions[option] = preset[option]; + } + } + } +}; + +/** + * Get the default options + * @static + * @param {boolean} [simple=true] + * @returns {{}} + */ +showdown.getDefaultOptions = function (simple) { + 'use strict'; + return getDefaultOpts(simple); +}; + +/** + * Get or set a subParser + * + * subParser(name) - Get a registered subParser + * subParser(name, func) - Register a subParser + * @static + * @param {string} name + * @param {function} [func] + * @returns {*} + */ +showdown.subParser = function (name, func) { + 'use strict'; + if (showdown.helper.isString(name)) { + if (typeof func !== 'undefined') { + parsers[name] = func; + } else { + if (parsers.hasOwnProperty(name)) { + return parsers[name]; + } else { + throw Error('SubParser named ' + name + ' not registered!'); + } + } + } +}; + +/** + * Gets or registers an extension + * @static + * @param {string} name + * @param {object|function=} ext + * @returns {*} + */ +showdown.extension = function (name, ext) { + 'use strict'; + + if (!showdown.helper.isString(name)) { + throw Error('Extension \'name\' must be a string'); + } + + name = showdown.helper.stdExtName(name); + + // Getter + if (showdown.helper.isUndefined(ext)) { + if (!extensions.hasOwnProperty(name)) { + throw Error('Extension named ' + name + ' is not registered!'); + } + return extensions[name]; + + // Setter + } else { + // Expand extension if it's wrapped in a function + if (typeof ext === 'function') { + ext = ext(); + } + + // Ensure extension is an array + if (!showdown.helper.isArray(ext)) { + ext = [ext]; + } + + var validExtension = validate(ext, name); + + if (validExtension.valid) { + extensions[name] = ext; + } else { + throw Error(validExtension.error); + } + } +}; + +/** + * Gets all extensions registered + * @returns {{}} + */ +showdown.getAllExtensions = function () { + 'use strict'; + return extensions; +}; + +/** + * Remove an extension + * @param {string} name + */ +showdown.removeExtension = function (name) { + 'use strict'; + delete extensions[name]; +}; + +/** + * Removes all extensions + */ +showdown.resetExtensions = function () { + 'use strict'; + extensions = {}; +}; + +/** + * Validate extension + * @param {array} extension + * @param {string} name + * @returns {{valid: boolean, error: string}} + */ +function validate(extension, name) { + 'use strict'; + + var errMsg = (name) ? 'Error in ' + name + ' extension->' : 'Error in unnamed extension', + ret = { + valid: true, + error: '' + }; + + if (!showdown.helper.isArray(extension)) { + extension = [extension]; + } + + for (var i = 0; i < extension.length; ++i) { + var baseMsg = errMsg + ' sub-extension ' + i + ': ', + ext = extension[i]; + if (typeof ext !== 'object') { + ret.valid = false; + ret.error = baseMsg + 'must be an object, but ' + typeof ext + ' given'; + return ret; + } + + if (!showdown.helper.isString(ext.type)) { + ret.valid = false; + ret.error = baseMsg + 'property "type" must be a string, but ' + typeof ext.type + ' given'; + return ret; + } + + var type = ext.type = ext.type.toLowerCase(); + + // normalize extension type + if (type === 'language') { + type = ext.type = 'lang'; + } + + if (type === 'html') { + type = ext.type = 'output'; + } + + if (type !== 'lang' && type !== 'output' && type !== 'listener') { + ret.valid = false; + ret.error = baseMsg + 'type ' + type + ' is not recognized. Valid values: "lang/language", "output/html" or "listener"'; + return ret; + } + + if (type === 'listener') { + if (showdown.helper.isUndefined(ext.listeners)) { + ret.valid = false; + ret.error = baseMsg + '. Extensions of type "listener" must have a property called "listeners"'; + return ret; + } + } else { + if (showdown.helper.isUndefined(ext.filter) && showdown.helper.isUndefined(ext.regex)) { + ret.valid = false; + ret.error = baseMsg + type + ' extensions must define either a "regex" property or a "filter" method'; + return ret; + } + } + + if (ext.listeners) { + if (typeof ext.listeners !== 'object') { + ret.valid = false; + ret.error = baseMsg + '"listeners" property must be an object but ' + typeof ext.listeners + ' given'; + return ret; + } + for (var ln in ext.listeners) { + if (ext.listeners.hasOwnProperty(ln)) { + if (typeof ext.listeners[ln] !== 'function') { + ret.valid = false; + ret.error = baseMsg + '"listeners" property must be an hash of [event name]: [callback]. listeners.' + ln + + ' must be a function but ' + typeof ext.listeners[ln] + ' given'; + return ret; + } + } + } + } + + if (ext.filter) { + if (typeof ext.filter !== 'function') { + ret.valid = false; + ret.error = baseMsg + '"filter" must be a function, but ' + typeof ext.filter + ' given'; + return ret; + } + } else if (ext.regex) { + if (showdown.helper.isString(ext.regex)) { + ext.regex = new RegExp(ext.regex, 'g'); + } + if (!ext.regex instanceof RegExp) { + ret.valid = false; + ret.error = baseMsg + '"regex" property must either be a string or a RegExp object, but ' + typeof ext.regex + ' given'; + return ret; + } + if (showdown.helper.isUndefined(ext.replace)) { + ret.valid = false; + ret.error = baseMsg + '"regex" extensions must implement a replace string or function'; + return ret; + } + } + } + return ret; +} + +/** + * Validate extension + * @param {object} ext + * @returns {boolean} + */ +showdown.validateExtension = function (ext) { + 'use strict'; + + var validateExtension = validate(ext, null); + if (!validateExtension.valid) { + console.warn(validateExtension.error); + return false; + } + return true; +}; + +/** + * showdownjs helper functions + */ + +if (!showdown.hasOwnProperty('helper')) { + showdown.helper = {}; +} + +/** + * Check if var is string + * @static + * @param {string} a + * @returns {boolean} + */ +showdown.helper.isString = function isString(a) { + 'use strict'; + return (typeof a === 'string' || a instanceof String); +}; + +/** + * Check if var is a function + * @static + * @param {string} a + * @returns {boolean} + */ +showdown.helper.isFunction = function isFunction(a) { + 'use strict'; + var getType = {}; + return a && getType.toString.call(a) === '[object Function]'; +}; + +/** + * ForEach helper function + * @static + * @param {*} obj + * @param {function} callback + */ +showdown.helper.forEach = function forEach(obj, callback) { + 'use strict'; + if (typeof obj.forEach === 'function') { + obj.forEach(callback); + } else { + for (var i = 0; i < obj.length; i++) { + callback(obj[i], i, obj); + } + } +}; + +/** + * isArray helper function + * @static + * @param {*} a + * @returns {boolean} + */ +showdown.helper.isArray = function isArray(a) { + 'use strict'; + return a.constructor === Array; +}; + +/** + * Check if value is undefined + * @static + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is `undefined`, else `false`. + */ +showdown.helper.isUndefined = function isUndefined(value) { + 'use strict'; + return typeof value === 'undefined'; +}; + +/** + * Standardidize extension name + * @static + * @param {string} s extension name + * @returns {string} + */ +showdown.helper.stdExtName = function (s) { + 'use strict'; + return s.replace(/[_-]||\s/g, '').toLowerCase(); +}; + +function escapeCharactersCallback(wholeMatch, m1) { + 'use strict'; + var charCodeToEscape = m1.charCodeAt(0); + return '~E' + charCodeToEscape + 'E'; +} + +/** + * Callback used to escape characters when passing through String.replace + * @static + * @param {string} wholeMatch + * @param {string} m1 + * @returns {string} + */ +showdown.helper.escapeCharactersCallback = escapeCharactersCallback; + +/** + * Escape characters in a string + * @static + * @param {string} text + * @param {string} charsToEscape + * @param {boolean} afterBackslash + * @returns {XML|string|void|*} + */ +showdown.helper.escapeCharacters = function escapeCharacters(text, charsToEscape, afterBackslash) { + 'use strict'; + // First we have to escape the escape characters so that + // we can build a character class out of them + var regexString = '([' + charsToEscape.replace(/([\[\]\\])/g, '\\$1') + '])'; + + if (afterBackslash) { + regexString = '\\\\' + regexString; + } + + var regex = new RegExp(regexString, 'g'); + text = text.replace(regex, escapeCharactersCallback); + + return text; +}; + +var rgxFindMatchPos = function (str, left, right, flags) { + 'use strict'; + var f = flags || '', + g = f.indexOf('g') > -1, + x = new RegExp(left + '|' + right, 'g' + f.replace(/g/g, '')), + l = new RegExp(left, f.replace(/g/g, '')), + pos = [], + t, s, m, start, end; + + do { + t = 0; + while ((m = x.exec(str))) { + if (l.test(m[0])) { + if (!(t++)) { + s = x.lastIndex; + start = s - m[0].length; + } + } else if (t) { + if (!--t) { + end = m.index + m[0].length; + var obj = { + left: {start: start, end: s}, + match: {start: s, end: m.index}, + right: {start: m.index, end: end}, + wholeMatch: {start: start, end: end} + }; + pos.push(obj); + if (!g) { + return pos; + } + } + } + } + } while (t && (x.lastIndex = s)); + + return pos; +}; + +/** + * matchRecursiveRegExp + * + * (c) 2007 Steven Levithan + * MIT License + * + * Accepts a string to search, a left and right format delimiter + * as regex patterns, and optional regex flags. Returns an array + * of matches, allowing nested instances of left/right delimiters. + * Use the "g" flag to return all matches, otherwise only the + * first is returned. Be careful to ensure that the left and + * right format delimiters produce mutually exclusive matches. + * Backreferences are not supported within the right delimiter + * due to how it is internally combined with the left delimiter. + * When matching strings whose format delimiters are unbalanced + * to the left or right, the output is intentionally as a + * conventional regex library with recursion support would + * produce, e.g. "<" and ">" both produce ["x"] when using + * "<" and ">" as the delimiters (both strings contain a single, + * balanced instance of ""). + * + * examples: + * matchRecursiveRegExp("test", "\\(", "\\)") + * returns: [] + * matchRecursiveRegExp(">>t<>", "<", ">", "g") + * returns: ["t<>", ""] + * matchRecursiveRegExp("

    test
    ", "]*>", "", "gi") + * returns: ["test"] + */ +showdown.helper.matchRecursiveRegExp = function (str, left, right, flags) { + 'use strict'; + + var matchPos = rgxFindMatchPos (str, left, right, flags), + results = []; + + for (var i = 0; i < matchPos.length; ++i) { + results.push([ + str.slice(matchPos[i].wholeMatch.start, matchPos[i].wholeMatch.end), + str.slice(matchPos[i].match.start, matchPos[i].match.end), + str.slice(matchPos[i].left.start, matchPos[i].left.end), + str.slice(matchPos[i].right.start, matchPos[i].right.end) + ]); + } + return results; +}; + +/** + * + * @param {string} str + * @param {string|function} replacement + * @param {string} left + * @param {string} right + * @param {string} flags + * @returns {string} + */ +showdown.helper.replaceRecursiveRegExp = function (str, replacement, left, right, flags) { + 'use strict'; + + if (!showdown.helper.isFunction(replacement)) { + var repStr = replacement; + replacement = function () { + return repStr; + }; + } + + var matchPos = rgxFindMatchPos(str, left, right, flags), + finalStr = str, + lng = matchPos.length; + + if (lng > 0) { + var bits = []; + if (matchPos[0].wholeMatch.start !== 0) { + bits.push(str.slice(0, matchPos[0].wholeMatch.start)); + } + for (var i = 0; i < lng; ++i) { + bits.push( + replacement( + str.slice(matchPos[i].wholeMatch.start, matchPos[i].wholeMatch.end), + str.slice(matchPos[i].match.start, matchPos[i].match.end), + str.slice(matchPos[i].left.start, matchPos[i].left.end), + str.slice(matchPos[i].right.start, matchPos[i].right.end) + ) + ); + if (i < lng - 1) { + bits.push(str.slice(matchPos[i].wholeMatch.end, matchPos[i + 1].wholeMatch.start)); + } + } + if (matchPos[lng - 1].wholeMatch.end < str.length) { + bits.push(str.slice(matchPos[lng - 1].wholeMatch.end)); + } + finalStr = bits.join(''); + } + return finalStr; +}; + +/** + * POLYFILLS + */ +if (showdown.helper.isUndefined(console)) { + console = { + warn: function (msg) { + 'use strict'; + alert(msg); + }, + log: function (msg) { + 'use strict'; + alert(msg); + }, + error: function (msg) { + 'use strict'; + throw msg; + } + }; +} + +/** + * Created by Estevao on 31-05-2015. + */ + +/** + * Showdown Converter class + * @class + * @param {object} [converterOptions] + * @returns {Converter} + */ +showdown.Converter = function (converterOptions) { + 'use strict'; + + var + /** + * Options used by this converter + * @private + * @type {{}} + */ + options = {}, + + /** + * Language extensions used by this converter + * @private + * @type {Array} + */ + langExtensions = [], + + /** + * Output modifiers extensions used by this converter + * @private + * @type {Array} + */ + outputModifiers = [], + + /** + * Event listeners + * @private + * @type {{}} + */ + listeners = {}; + + _constructor(); + + /** + * Converter constructor + * @private + */ + function _constructor() { + converterOptions = converterOptions || {}; + + for (var gOpt in globalOptions) { + if (globalOptions.hasOwnProperty(gOpt)) { + options[gOpt] = globalOptions[gOpt]; + } + } + + // Merge options + if (typeof converterOptions === 'object') { + for (var opt in converterOptions) { + if (converterOptions.hasOwnProperty(opt)) { + options[opt] = converterOptions[opt]; + } + } + } else { + throw Error('Converter expects the passed parameter to be an object, but ' + typeof converterOptions + + ' was passed instead.'); + } + + if (options.extensions) { + showdown.helper.forEach(options.extensions, _parseExtension); + } + } + + /** + * Parse extension + * @param {*} ext + * @param {string} [name=''] + * @private + */ + function _parseExtension(ext, name) { + + name = name || null; + // If it's a string, the extension was previously loaded + if (showdown.helper.isString(ext)) { + ext = showdown.helper.stdExtName(ext); + name = ext; + + // LEGACY_SUPPORT CODE + if (showdown.extensions[ext]) { + console.warn('DEPRECATION WARNING: ' + ext + ' is an old extension that uses a deprecated loading method.' + + 'Please inform the developer that the extension should be updated!'); + legacyExtensionLoading(showdown.extensions[ext], ext); + return; + // END LEGACY SUPPORT CODE + + } else if (!showdown.helper.isUndefined(extensions[ext])) { + ext = extensions[ext]; + + } else { + throw Error('Extension "' + ext + '" could not be loaded. It was either not found or is not a valid extension.'); + } + } + + if (typeof ext === 'function') { + ext = ext(); + } + + if (!showdown.helper.isArray(ext)) { + ext = [ext]; + } + + var validExt = validate(ext, name); + if (!validExt.valid) { + throw Error(validExt.error); + } + + for (var i = 0; i < ext.length; ++i) { + switch (ext[i].type) { + + case 'lang': + langExtensions.push(ext[i]); + break; + + case 'output': + outputModifiers.push(ext[i]); + break; + } + if (ext[i].hasOwnProperty(listeners)) { + for (var ln in ext[i].listeners) { + if (ext[i].listeners.hasOwnProperty(ln)) { + listen(ln, ext[i].listeners[ln]); + } + } + } + } + + } + + /** + * LEGACY_SUPPORT + * @param {*} ext + * @param {string} name + */ + function legacyExtensionLoading(ext, name) { + if (typeof ext === 'function') { + ext = ext(new showdown.Converter()); + } + if (!showdown.helper.isArray(ext)) { + ext = [ext]; + } + var valid = validate(ext, name); + + if (!valid.valid) { + throw Error(valid.error); + } + + for (var i = 0; i < ext.length; ++i) { + switch (ext[i].type) { + case 'lang': + langExtensions.push(ext[i]); + break; + case 'output': + outputModifiers.push(ext[i]); + break; + default:// should never reach here + throw Error('Extension loader error: Type unrecognized!!!'); + } + } + } + + /** + * Listen to an event + * @param {string} name + * @param {function} callback + */ + function listen(name, callback) { + if (!showdown.helper.isString(name)) { + throw Error('Invalid argument in converter.listen() method: name must be a string, but ' + typeof name + ' given'); + } + + if (typeof callback !== 'function') { + throw Error('Invalid argument in converter.listen() method: callback must be a function, but ' + typeof callback + ' given'); + } + + if (!listeners.hasOwnProperty(name)) { + listeners[name] = []; + } + listeners[name].push(callback); + } + + function rTrimInputText(text) { + var rsp = text.match(/^\s*/)[0].length, + rgx = new RegExp('^\\s{0,' + rsp + '}', 'gm'); + return text.replace(rgx, ''); + } + + /** + * Dispatch an event + * @private + * @param {string} evtName Event name + * @param {string} text Text + * @param {{}} options Converter Options + * @param {{}} globals + * @returns {string} + */ + this._dispatch = function dispatch (evtName, text, options, globals) { + if (listeners.hasOwnProperty(evtName)) { + for (var ei = 0; ei < listeners[evtName].length; ++ei) { + var nText = listeners[evtName][ei](evtName, text, this, options, globals); + if (nText && typeof nText !== 'undefined') { + text = nText; + } + } + } + return text; + }; + + /** + * Listen to an event + * @param {string} name + * @param {function} callback + * @returns {showdown.Converter} + */ + this.listen = function (name, callback) { + listen(name, callback); + return this; + }; + + /** + * Converts a markdown string into HTML + * @param {string} text + * @returns {*} + */ + this.makeHtml = function (text) { + //check if text is not falsy + if (!text) { + return text; + } + + var globals = { + gHtmlBlocks: [], + gHtmlMdBlocks: [], + gHtmlSpans: [], + gUrls: {}, + gTitles: {}, + gDimensions: {}, + gListLevel: 0, + hashLinkCounts: {}, + langExtensions: langExtensions, + outputModifiers: outputModifiers, + converter: this, + ghCodeBlocks: [] + }; + + // attacklab: Replace ~ with ~T + // This lets us use tilde as an escape char to avoid md5 hashes + // The choice of character is arbitrary; anything that isn't + // magic in Markdown will work. + text = text.replace(/~/g, '~T'); + + // attacklab: Replace $ with ~D + // RegExp interprets $ as a special character + // when it's in a replacement string + text = text.replace(/\$/g, '~D'); + + // Standardize line endings + text = text.replace(/\r\n/g, '\n'); // DOS to Unix + text = text.replace(/\r/g, '\n'); // Mac to Unix + + if (options.smartIndentationFix) { + text = rTrimInputText(text); + } + + // Make sure text begins and ends with a couple of newlines: + //text = '\n\n' + text + '\n\n'; + text = text; + // detab + text = showdown.subParser('detab')(text, options, globals); + + // stripBlankLines + text = showdown.subParser('stripBlankLines')(text, options, globals); + + //run languageExtensions + showdown.helper.forEach(langExtensions, function (ext) { + text = showdown.subParser('runExtension')(ext, text, options, globals); + }); + + // run the sub parsers + text = showdown.subParser('hashPreCodeTags')(text, options, globals); + text = showdown.subParser('githubCodeBlocks')(text, options, globals); + text = showdown.subParser('hashHTMLBlocks')(text, options, globals); + text = showdown.subParser('hashHTMLSpans')(text, options, globals); + text = showdown.subParser('stripLinkDefinitions')(text, options, globals); + text = showdown.subParser('blockGamut')(text, options, globals); + text = showdown.subParser('unhashHTMLSpans')(text, options, globals); + text = showdown.subParser('unescapeSpecialChars')(text, options, globals); + + // attacklab: Restore dollar signs + text = text.replace(/~D/g, '$$'); + + // attacklab: Restore tildes + text = text.replace(/~T/g, '~'); + + // Run output modifiers + showdown.helper.forEach(outputModifiers, function (ext) { + text = showdown.subParser('runExtension')(ext, text, options, globals); + }); + return text; + }; + + /** + * Set an option of this Converter instance + * @param {string} key + * @param {*} value + */ + this.setOption = function (key, value) { + options[key] = value; + }; + + /** + * Get the option of this Converter instance + * @param {string} key + * @returns {*} + */ + this.getOption = function (key) { + return options[key]; + }; + + /** + * Get the options of this Converter instance + * @returns {{}} + */ + this.getOptions = function () { + return options; + }; + + /** + * Add extension to THIS converter + * @param {{}} extension + * @param {string} [name=null] + */ + this.addExtension = function (extension, name) { + name = name || null; + _parseExtension(extension, name); + }; + + /** + * Use a global registered extension with THIS converter + * @param {string} extensionName Name of the previously registered extension + */ + this.useExtension = function (extensionName) { + _parseExtension(extensionName); + }; + + /** + * Set the flavor THIS converter should use + * @param {string} name + */ + this.setFlavor = function (name) { + if (flavor.hasOwnProperty(name)) { + var preset = flavor[name]; + for (var option in preset) { + if (preset.hasOwnProperty(option)) { + options[option] = preset[option]; + } + } + } + }; + + /** + * Remove an extension from THIS converter. + * Note: This is a costly operation. It's better to initialize a new converter + * and specify the extensions you wish to use + * @param {Array} extension + */ + this.removeExtension = function (extension) { + if (!showdown.helper.isArray(extension)) { + extension = [extension]; + } + for (var a = 0; a < extension.length; ++a) { + var ext = extension[a]; + for (var i = 0; i < langExtensions.length; ++i) { + if (langExtensions[i] === ext) { + langExtensions[i].splice(i, 1); + } + } + for (var ii = 0; ii < outputModifiers.length; ++i) { + if (outputModifiers[ii] === ext) { + outputModifiers[ii].splice(i, 1); + } + } + } + }; + + /** + * Get all extension of THIS converter + * @returns {{language: Array, output: Array}} + */ + this.getAllExtensions = function () { + return { + language: langExtensions, + output: outputModifiers + }; + }; +}; + +/** + * Turn Markdown link shortcuts into XHTML
    tags. + */ +showdown.subParser('anchors', function (text, options, globals) { + 'use strict'; + + text = globals.converter._dispatch('anchors.before', text, options, globals); + + var writeAnchorTag = function (wholeMatch, m1, m2, m3, m4, m5, m6, m7) { + if (showdown.helper.isUndefined(m7)) { + m7 = ''; + } + wholeMatch = m1; + var linkText = m2, + linkId = m3.toLowerCase(), + url = m4, + title = m7; + + if (!url) { + if (!linkId) { + // lower-case and turn embedded newlines into spaces + linkId = linkText.toLowerCase().replace(/ ?\n/g, ' '); + } + url = '#' + linkId; + + if (!showdown.helper.isUndefined(globals.gUrls[linkId])) { + url = globals.gUrls[linkId]; + if (!showdown.helper.isUndefined(globals.gTitles[linkId])) { + title = globals.gTitles[linkId]; + } + } else { + if (wholeMatch.search(/\(\s*\)$/m) > -1) { + // Special case for explicit empty url + url = ''; + } else { + return wholeMatch; + } + } + } + + url = showdown.helper.escapeCharacters(url, '*_', false); + var result = ''; + + return result; + }; + + // First, handle reference-style links: [link text] [id] + /* + text = text.replace(/ + ( // wrap whole match in $1 + \[ + ( + (?: + \[[^\]]*\] // allow brackets nested one level + | + [^\[] // or anything else + )* + ) + \] + + [ ]? // one optional space + (?:\n[ ]*)? // one optional newline followed by spaces + + \[ + (.*?) // id = $3 + \] + )()()()() // pad remaining backreferences + /g,_DoAnchors_callback); + */ + text = text.replace(/(\[((?:\[[^\]]*]|[^\[\]])*)][ ]?(?:\n[ ]*)?\[(.*?)])()()()()/g, writeAnchorTag); + + // + // Next, inline-style links: [link text](url "optional title") + // + + /* + text = text.replace(/ + ( // wrap whole match in $1 + \[ + ( + (?: + \[[^\]]*\] // allow brackets nested one level + | + [^\[\]] // or anything else + ) + ) + \] + \( // literal paren + [ \t]* + () // no id, so leave $3 empty + ? // href = $4 + [ \t]* + ( // $5 + (['"]) // quote char = $6 + (.*?) // Title = $7 + \6 // matching quote + [ \t]* // ignore any spaces/tabs between closing quote and ) + )? // title is optional + \) + ) + /g,writeAnchorTag); + */ + text = text.replace(/(\[((?:\[[^\]]*]|[^\[\]])*)]\([ \t]*()?[ \t]*((['"])(.*?)\6[ \t]*)?\))/g, + writeAnchorTag); + + // + // Last, handle reference-style shortcuts: [link text] + // These must come last in case you've also got [link test][1] + // or [link test](/foo) + // + + /* + text = text.replace(/ + ( // wrap whole match in $1 + \[ + ([^\[\]]+) // link text = $2; can't contain '[' or ']' + \] + )()()()()() // pad rest of backreferences + /g, writeAnchorTag); + */ + text = text.replace(/(\[([^\[\]]+)])()()()()()/g, writeAnchorTag); + + text = globals.converter._dispatch('anchors.after', text, options, globals); + return text; +}); + +showdown.subParser('autoLinks', function (text, options, globals) { + 'use strict'; + + text = globals.converter._dispatch('autoLinks.before', text, options, globals); + + var simpleURLRegex = /\b(((https?|ftp|dict):\/\/|www\.)[^'">\s]+\.[^'">\s]+)(?=\s|$)(?!["<>])/gi, + delimUrlRegex = /<(((https?|ftp|dict):\/\/|www\.)[^'">\s]+)>/gi, + simpleMailRegex = /(?:^|[ \n\t])([A-Za-z0-9!#$%&'*+-/=?^_`\{|}~\.]+@[-a-z0-9]+(\.[-a-z0-9]+)*\.[a-z]+)(?:$|[ \n\t])/gi, + delimMailRegex = /<(?:mailto:)?([-.\w]+@[-a-z0-9]+(\.[-a-z0-9]+)*\.[a-z]+)>/gi; + + text = text.replace(delimUrlRegex, replaceLink); + text = text.replace(delimMailRegex, replaceMail); + // simpleURLRegex = /\b(((https?|ftp|dict):\/\/|www\.)[-.+~:?#@!$&'()*,;=[\]\w]+)\b/gi, + // Email addresses: + + if (options.simplifiedAutoLink) { + text = text.replace(simpleURLRegex, replaceLink); + text = text.replace(simpleMailRegex, replaceMail); + } + + function replaceLink(wm, link) { + var lnkTxt = link; + if (/^www\./i.test(link)) { + link = link.replace(/^www\./i, 'http://www.'); + } + return '' + lnkTxt + ''; + } + + function replaceMail(wholeMatch, m1) { + var unescapedStr = showdown.subParser('unescapeSpecialChars')(m1); + return showdown.subParser('encodeEmailAddress')(unescapedStr); + } + + text = globals.converter._dispatch('autoLinks.after', text, options, globals); + + return text; +}); + +/** + * These are all the transformations that form block-level + * tags like paragraphs, headers, and list items. + */ +showdown.subParser('blockGamut', function (text, options, globals) { + 'use strict'; + + text = globals.converter._dispatch('blockGamut.before', text, options, globals); + + // we parse blockquotes first so that we can have headings and hrs + // inside blockquotes + text = showdown.subParser('blockQuotes')(text, options, globals); + text = showdown.subParser('headers')(text, options, globals); + + // Do Horizontal Rules: + var key = showdown.subParser('hashBlock')('
    ', options, globals); + text = text.replace(/^[ ]{0,2}([ ]?\*[ ]?){3,}[ \t]*$/gm, key); + text = text.replace(/^[ ]{0,2}([ ]?\-[ ]?){3,}[ \t]*$/gm, key); + text = text.replace(/^[ ]{0,2}([ ]?_[ ]?){3,}[ \t]*$/gm, key); + + text = showdown.subParser('lists')(text, options, globals); + text = showdown.subParser('codeBlocks')(text, options, globals); + text = showdown.subParser('tables')(text, options, globals); + + // We already ran _HashHTMLBlocks() before, in Markdown(), but that + // was to escape raw HTML in the original Markdown source. This time, + // we're escaping the markup we've just created, so that we don't wrap + //

    tags around block-level tags. + text = showdown.subParser('hashHTMLBlocks')(text, options, globals); + text = showdown.subParser('paragraphs')(text, options, globals); + + text = globals.converter._dispatch('blockGamut.after', text, options, globals); + + return text; +}); + +showdown.subParser('blockQuotes', function (text, options, globals) { + 'use strict'; + + text = globals.converter._dispatch('blockQuotes.before', text, options, globals); + /* + text = text.replace(/ + ( // Wrap whole match in $1 + ( + ^[ \t]*>[ \t]? // '>' at the start of a line + .+\n // rest of the first line + (.+\n)* // subsequent consecutive lines + \n* // blanks + )+ + ) + /gm, function(){...}); + */ + + text = text.replace(/((^[ \t]{0,3}>[ \t]?.+\n(.+\n)*\n*)+)/gm, function (wholeMatch, m1) { + var bq = m1; + + // attacklab: hack around Konqueror 3.5.4 bug: + // "----------bug".replace(/^-/g,"") == "bug" + bq = bq.replace(/^[ \t]*>[ \t]?/gm, '~0'); // trim one level of quoting + + // attacklab: clean up hack + bq = bq.replace(/~0/g, ''); + + bq = bq.replace(/^[ \t]+$/gm, ''); // trim whitespace-only lines + bq = showdown.subParser('githubCodeBlocks')(bq, options, globals); + bq = showdown.subParser('blockGamut')(bq, options, globals); // recurse + + bq = bq.replace(/(^|\n)/g, '$1 '); + // These leading spaces screw with

     content, so we need to fix that:
    +    bq = bq.replace(/(\s*
    [^\r]+?<\/pre>)/gm, function (wholeMatch, m1) {
    +      var pre = m1;
    +      // attacklab: hack around Konqueror 3.5.4 bug:
    +      pre = pre.replace(/^  /mg, '~0');
    +      pre = pre.replace(/~0/g, '');
    +      return pre;
    +    });
    +
    +    return showdown.subParser('hashBlock')('
    \n' + bq + '\n
    ', options, globals); + }); + + text = globals.converter._dispatch('blockQuotes.after', text, options, globals); + return text; +}); + +/** + * Process Markdown `
    ` blocks.
    + */
    +showdown.subParser('codeBlocks', function (text, options, globals) {
    +  'use strict';
    +
    +  text = globals.converter._dispatch('codeBlocks.before', text, options, globals);
    +  /*
    +   text = text.replace(text,
    +   /(?:\n\n|^)
    +   (								// $1 = the code block -- one or more lines, starting with a space/tab
    +   (?:
    +   (?:[ ]{4}|\t)			// Lines must start with a tab or a tab-width of spaces - attacklab: g_tab_width
    +   .*\n+
    +   )+
    +   )
    +   (\n*[ ]{0,3}[^ \t\n]|(?=~0))	// attacklab: g_tab_width
    +   /g,function(){...});
    +   */
    +
    +  // attacklab: sentinel workarounds for lack of \A and \Z, safari\khtml bug
    +  text += '~0';
    +
    +  var pattern = /(?:\n\n|^)((?:(?:[ ]{4}|\t).*\n+)+)(\n*[ ]{0,3}[^ \t\n]|(?=~0))/g;
    +  text = text.replace(pattern, function (wholeMatch, m1, m2) {
    +    var codeblock = m1,
    +        nextChar = m2,
    +        end = '\n';
    +
    +    codeblock = showdown.subParser('outdent')(codeblock);
    +    codeblock = showdown.subParser('encodeCode')(codeblock);
    +    codeblock = showdown.subParser('detab')(codeblock);
    +    codeblock = codeblock.replace(/^\n+/g, ''); // trim leading newlines
    +    codeblock = codeblock.replace(/\n+$/g, ''); // trim trailing newlines
    +
    +    if (options.omitExtraWLInCodeBlocks) {
    +      end = '';
    +    }
    +
    +    codeblock = '
    ' + codeblock + end + '
    '; + + return showdown.subParser('hashBlock')(codeblock, options, globals) + nextChar; + }); + + // attacklab: strip sentinel + text = text.replace(/~0/, ''); + + text = globals.converter._dispatch('codeBlocks.after', text, options, globals); + return text; +}); + +/** + * + * * Backtick quotes are used for spans. + * + * * You can use multiple backticks as the delimiters if you want to + * include literal backticks in the code span. So, this input: + * + * Just type ``foo `bar` baz`` at the prompt. + * + * Will translate to: + * + *

    Just type foo `bar` baz at the prompt.

    + * + * There's no arbitrary limit to the number of backticks you + * can use as delimters. If you need three consecutive backticks + * in your code, use four for delimiters, etc. + * + * * You can use spaces to get literal backticks at the edges: + * + * ... type `` `bar` `` ... + * + * Turns to: + * + * ... type `bar` ... + */ +showdown.subParser('codeSpans', function (text, options, globals) { + 'use strict'; + + text = globals.converter._dispatch('codeSpans.before', text, options, globals); + + /* + text = text.replace(/ + (^|[^\\]) // Character before opening ` can't be a backslash + (`+) // $2 = Opening run of ` + ( // $3 = The code block + [^\r]*? + [^`] // attacklab: work around lack of lookbehind + ) + \2 // Matching closer + (?!`) + /gm, function(){...}); + */ + + if (typeof(text) === 'undefined') { + text = ''; + } + text = text.replace(/(^|[^\\])(`+)([^\r]*?[^`])\2(?!`)/gm, + function (wholeMatch, m1, m2, m3) { + var c = m3; + c = c.replace(/^([ \t]*)/g, ''); // leading whitespace + c = c.replace(/[ \t]*$/g, ''); // trailing whitespace + c = showdown.subParser('encodeCode')(c); + return m1 + '' + c + ''; + } + ); + + text = globals.converter._dispatch('codeSpans.after', text, options, globals); + return text; +}); + +/** + * Convert all tabs to spaces + */ +showdown.subParser('detab', function (text) { + 'use strict'; + + // expand first n-1 tabs + text = text.replace(/\t(?=\t)/g, ' '); // g_tab_width + + // replace the nth with two sentinels + text = text.replace(/\t/g, '~A~B'); + + // use the sentinel to anchor our regex so it doesn't explode + text = text.replace(/~B(.+?)~A/g, function (wholeMatch, m1) { + var leadingText = m1, + numSpaces = 4 - leadingText.length % 4; // g_tab_width + + // there *must* be a better way to do this: + for (var i = 0; i < numSpaces; i++) { + leadingText += ' '; + } + + return leadingText; + }); + + // clean up sentinels + text = text.replace(/~A/g, ' '); // g_tab_width + text = text.replace(/~B/g, ''); + + return text; + +}); + +/** + * Smart processing for ampersands and angle brackets that need to be encoded. + */ +showdown.subParser('encodeAmpsAndAngles', function (text) { + 'use strict'; + // Ampersand-encoding based entirely on Nat Irons's Amputator MT plugin: + // http://bumppo.net/projects/amputator/ + text = text.replace(/&(?!#?[xX]?(?:[0-9a-fA-F]+|\w+);)/g, '&'); + + // Encode naked <'s + text = text.replace(/<(?![a-z\/?\$!])/gi, '<'); + + return text; +}); + +/** + * Returns the string, with after processing the following backslash escape sequences. + * + * attacklab: The polite way to do this is with the new escapeCharacters() function: + * + * text = escapeCharacters(text,"\\",true); + * text = escapeCharacters(text,"`*_{}[]()>#+-.!",true); + * + * ...but we're sidestepping its use of the (slow) RegExp constructor + * as an optimization for Firefox. This function gets called a LOT. + */ +showdown.subParser('encodeBackslashEscapes', function (text) { + 'use strict'; + text = text.replace(/\\(\\)/g, showdown.helper.escapeCharactersCallback); + text = text.replace(/\\([`*_{}\[\]()>#+-.!])/g, showdown.helper.escapeCharactersCallback); + return text; +}); + +/** + * Encode/escape certain characters inside Markdown code runs. + * The point is that in code, these characters are literals, + * and lose their special Markdown meanings. + */ +showdown.subParser('encodeCode', function (text) { + 'use strict'; + + // Encode all ampersands; HTML entities are not + // entities within a Markdown code span. + text = text.replace(/&/g, '&'); + + // Do the angle bracket song and dance: + text = text.replace(//g, '>'); + + // Now, escape characters that are magic in Markdown: + text = showdown.helper.escapeCharacters(text, '*_{}[]\\', false); + + // jj the line above breaks this: + //--- + //* Item + // 1. Subitem + // special char: * + // --- + + return text; +}); + +/** + * Input: an email address, e.g. "foo@example.com" + * + * Output: the email address as a mailto link, with each character + * of the address encoded as either a decimal or hex entity, in + * the hopes of foiling most address harvesting spam bots. E.g.: + * + * foo + * @example.com + * + * Based on a filter by Matthew Wickline, posted to the BBEdit-Talk + * mailing list: + * + */ +showdown.subParser('encodeEmailAddress', function (addr) { + 'use strict'; + + var encode = [ + function (ch) { + return '&#' + ch.charCodeAt(0) + ';'; + }, + function (ch) { + return '&#x' + ch.charCodeAt(0).toString(16) + ';'; + }, + function (ch) { + return ch; + } + ]; + + addr = 'mailto:' + addr; + + addr = addr.replace(/./g, function (ch) { + if (ch === '@') { + // this *must* be encoded. I insist. + ch = encode[Math.floor(Math.random() * 2)](ch); + } else if (ch !== ':') { + // leave ':' alone (to spot mailto: later) + var r = Math.random(); + // roughly 10% raw, 45% hex, 45% dec + ch = ( + r > 0.9 ? encode[2](ch) : r > 0.45 ? encode[1](ch) : encode[0](ch) + ); + } + return ch; + }); + + addr = '' + addr + ''; + addr = addr.replace(/">.+:/g, '">'); // strip the mailto: from the visible part + + return addr; +}); + +/** + * Within tags -- meaning between < and > -- encode [\ ` * _] so they + * don't conflict with their use in Markdown for code, italics and strong. + */ +showdown.subParser('escapeSpecialCharsWithinTagAttributes', function (text) { + 'use strict'; + + // Build a regex to find HTML tags and comments. See Friedl's + // "Mastering Regular Expressions", 2nd Ed., pp. 200-201. + var regex = /(<[a-z\/!$]("[^"]*"|'[^']*'|[^'">])*>|)/gi; + + text = text.replace(regex, function (wholeMatch) { + var tag = wholeMatch.replace(/(.)<\/?code>(?=.)/g, '$1`'); + tag = showdown.helper.escapeCharacters(tag, '\\`*_', false); + return tag; + }); + + return text; +}); + +/** + * Handle github codeblocks prior to running HashHTML so that + * HTML contained within the codeblock gets escaped properly + * Example: + * ```ruby + * def hello_world(x) + * puts "Hello, #{x}" + * end + * ``` + */ +showdown.subParser('githubCodeBlocks', function (text, options, globals) { + 'use strict'; + + // early exit if option is not enabled + if (!options.ghCodeBlocks) { + return text; + } + + text = globals.converter._dispatch('githubCodeBlocks.before', text, options, globals); + + text += '~0'; + + text = text.replace(/(?:^|\n)```(.*)\n([\s\S]*?)\n```/g, function (wholeMatch, language, codeblock) { + var end = (options.omitExtraWLInCodeBlocks) ? '' : '\n'; + + // First parse the github code block + codeblock = showdown.subParser('encodeCode')(codeblock); + codeblock = showdown.subParser('detab')(codeblock); + codeblock = codeblock.replace(/^\n+/g, ''); // trim leading newlines + codeblock = codeblock.replace(/\n+$/g, ''); // trim trailing whitespace + + codeblock = '
    ' + codeblock + end + '
    '; + + codeblock = showdown.subParser('hashBlock')(codeblock, options, globals); + + // Since GHCodeblocks can be false positives, we need to + // store the primitive text and the parsed text in a global var, + // and then return a token + return '\n\n~G' + (globals.ghCodeBlocks.push({text: wholeMatch, codeblock: codeblock}) - 1) + 'G\n\n'; + }); + + // attacklab: strip sentinel + text = text.replace(/~0/, ''); + + return globals.converter._dispatch('githubCodeBlocks.after', text, options, globals); +}); + +showdown.subParser('hashBlock', function (text, options, globals) { + 'use strict'; + text = text.replace(/(^\n+|\n+$)/g, ''); + return '\n\n~K' + (globals.gHtmlBlocks.push(text) - 1) + 'K\n\n'; +}); + +showdown.subParser('hashElement', function (text, options, globals) { + 'use strict'; + + return function (wholeMatch, m1) { + var blockText = m1; + + // Undo double lines + blockText = blockText.replace(/\n\n/g, '\n'); + blockText = blockText.replace(/^\n/, ''); + + // strip trailing blank lines + blockText = blockText.replace(/\n+$/g, ''); + + // Replace the element text with a marker ("~KxK" where x is its key) + blockText = '\n\n~K' + (globals.gHtmlBlocks.push(blockText) - 1) + 'K\n\n'; + + return blockText; + }; +}); + +showdown.subParser('hashHTMLBlocks', function (text, options, globals) { + 'use strict'; + + var blockTags = [ + 'pre', + 'div', + 'h1', + 'h2', + 'h3', + 'h4', + 'h5', + 'h6', + 'blockquote', + 'table', + 'dl', + 'ol', + 'ul', + 'script', + 'noscript', + 'form', + 'fieldset', + 'iframe', + 'math', + 'style', + 'section', + 'header', + 'footer', + 'nav', + 'article', + 'aside', + 'address', + 'audio', + 'canvas', + 'figure', + 'hgroup', + 'output', + 'video', + 'p' + ], + repFunc = function (wholeMatch, match, left, right) { + var txt = wholeMatch; + // check if this html element is marked as markdown + // if so, it's contents should be parsed as markdown + if (left.search(/\bmarkdown\b/) !== -1) { + txt = left + globals.converter.makeHtml(match) + right; + } + return '\n\n~K' + (globals.gHtmlBlocks.push(txt) - 1) + 'K\n\n'; + }; + + for (var i = 0; i < blockTags.length; ++i) { + text = showdown.helper.replaceRecursiveRegExp(text, repFunc, '^(?: |\\t){0,3}<' + blockTags[i] + '\\b[^>]*>', '', 'gim'); + } + + // HR SPECIAL CASE + text = text.replace(/(\n[ ]{0,3}(<(hr)\b([^<>])*?\/?>)[ \t]*(?=\n{2,}))/g, + showdown.subParser('hashElement')(text, options, globals)); + + // Special case for standalone HTML comments: + text = text.replace(/()/g, + showdown.subParser('hashElement')(text, options, globals)); + + // PHP and ASP-style processor instructions ( and <%...%>) + text = text.replace(/(?:\n\n)([ ]{0,3}(?:<([?%])[^\r]*?\2>)[ \t]*(?=\n{2,}))/g, + showdown.subParser('hashElement')(text, options, globals)); + return text; +}); + +/** + * Hash span elements that should not be parsed as markdown + */ +showdown.subParser('hashHTMLSpans', function (text, config, globals) { + 'use strict'; + + var matches = showdown.helper.matchRecursiveRegExp(text, ']*>', '', 'gi'); + + for (var i = 0; i < matches.length; ++i) { + text = text.replace(matches[i][0], '~L' + (globals.gHtmlSpans.push(matches[i][0]) - 1) + 'L'); + } + return text; +}); + +/** + * Unhash HTML spans + */ +showdown.subParser('unhashHTMLSpans', function (text, config, globals) { + 'use strict'; + + for (var i = 0; i < globals.gHtmlSpans.length; ++i) { + text = text.replace('~L' + i + 'L', globals.gHtmlSpans[i]); + } + + return text; +}); + +/** + * Hash span elements that should not be parsed as markdown + */ +showdown.subParser('hashPreCodeTags', function (text, config, globals) { + 'use strict'; + + var repFunc = function (wholeMatch, match, left, right) { + // encode html entities + var codeblock = left + showdown.subParser('encodeCode')(match) + right; + return '\n\n~G' + (globals.ghCodeBlocks.push({text: wholeMatch, codeblock: codeblock}) - 1) + 'G\n\n'; + }; + + text = showdown.helper.replaceRecursiveRegExp(text, repFunc, '^(?: |\\t){0,3}]*>\\s*]*>', '^(?: |\\t){0,3}\\s*
    ', 'gim'); + return text; +}); + +showdown.subParser('headers', function (text, options, globals) { + 'use strict'; + + text = globals.converter._dispatch('headers.before', text, options, globals); + + var prefixHeader = options.prefixHeaderId, + headerLevelStart = (isNaN(parseInt(options.headerLevelStart))) ? 1 : parseInt(options.headerLevelStart), + + // Set text-style headers: + // Header 1 + // ======== + // + // Header 2 + // -------- + // + setextRegexH1 = (options.smoothLivePreview) ? /^(.+)[ \t]*\n={2,}[ \t]*\n+/gm : /^(.+)[ \t]*\n=+[ \t]*\n+/gm, + setextRegexH2 = (options.smoothLivePreview) ? /^(.+)[ \t]*\n-{2,}[ \t]*\n+/gm : /^(.+)[ \t]*\n-+[ \t]*\n+/gm; + + text = text.replace(setextRegexH1, function (wholeMatch, m1) { + + var spanGamut = showdown.subParser('spanGamut')(m1, options, globals), + hID = (options.noHeaderId) ? '' : ' id="' + headerId(m1) + '"', + hLevel = headerLevelStart, + hashBlock = '' + spanGamut + ''; + return showdown.subParser('hashBlock')(hashBlock, options, globals); + }); + + text = text.replace(setextRegexH2, function (matchFound, m1) { + var spanGamut = showdown.subParser('spanGamut')(m1, options, globals), + hID = (options.noHeaderId) ? '' : ' id="' + headerId(m1) + '"', + hLevel = headerLevelStart + 1, + hashBlock = '' + spanGamut + ''; + return showdown.subParser('hashBlock')(hashBlock, options, globals); + }); + + // atx-style headers: + // # Header 1 + // ## Header 2 + // ## Header 2 with closing hashes ## + // ... + // ###### Header 6 + // + text = text.replace(/^(#{1,6})[ \t]*(.+?)[ \t]*#*\n+/gm, function (wholeMatch, m1, m2) { + var span = showdown.subParser('spanGamut')(m2, options, globals), + hID = (options.noHeaderId) ? '' : ' id="' + headerId(m2) + '"', + hLevel = headerLevelStart - 1 + m1.length, + header = '' + span + ''; + + return showdown.subParser('hashBlock')(header, options, globals); + }); + + function headerId(m) { + var title, escapedId = m.replace(/[^\w]/g, '').toLowerCase(); + + if (globals.hashLinkCounts[escapedId]) { + title = escapedId + '-' + (globals.hashLinkCounts[escapedId]++); + } else { + title = escapedId; + globals.hashLinkCounts[escapedId] = 1; + } + + // Prefix id to prevent causing inadvertent pre-existing style matches. + if (prefixHeader === true) { + prefixHeader = 'section'; + } + + if (showdown.helper.isString(prefixHeader)) { + return prefixHeader + title; + } + return title; + } + + text = globals.converter._dispatch('headers.after', text, options, globals); + return text; +}); + +/** + * Turn Markdown image shortcuts into tags. + */ +showdown.subParser('images', function (text, options, globals) { + 'use strict'; + + text = globals.converter._dispatch('images.before', text, options, globals); + + var inlineRegExp = /!\[(.*?)]\s?\([ \t]*()?(?: =([*\d]+[A-Za-z%]{0,4})x([*\d]+[A-Za-z%]{0,4}))?[ \t]*(?:(['"])(.*?)\6[ \t]*)?\)/g, + referenceRegExp = /!\[([^\]]*?)] ?(?:\n *)?\[(.*?)]()()()()()/g; + + function writeImageTag (wholeMatch, altText, linkId, url, width, height, m5, title) { + + var gUrls = globals.gUrls, + gTitles = globals.gTitles, + gDims = globals.gDimensions; + + linkId = linkId.toLowerCase(); + + if (!title) { + title = ''; + } + + if (url === '' || url === null) { + if (linkId === '' || linkId === null) { + // lower-case and turn embedded newlines into spaces + linkId = altText.toLowerCase().replace(/ ?\n/g, ' '); + } + url = '#' + linkId; + + if (!showdown.helper.isUndefined(gUrls[linkId])) { + url = gUrls[linkId]; + if (!showdown.helper.isUndefined(gTitles[linkId])) { + title = gTitles[linkId]; + } + if (!showdown.helper.isUndefined(gDims[linkId])) { + width = gDims[linkId].width; + height = gDims[linkId].height; + } + } else { + return wholeMatch; + } + } + + altText = altText.replace(/"/g, '"'); + altText = showdown.helper.escapeCharacters(altText, '*_', false); + url = showdown.helper.escapeCharacters(url, '*_', false); + var result = '' + altText + 'x "optional title") + text = text.replace(inlineRegExp, writeImageTag); + + text = globals.converter._dispatch('images.after', text, options, globals); + return text; +}); + +showdown.subParser('italicsAndBold', function (text, options, globals) { + 'use strict'; + + text = globals.converter._dispatch('italicsAndBold.before', text, options, globals); + + if (options.literalMidWordUnderscores) { + //underscores + // Since we are consuming a \s character, we need to add it + text = text.replace(/(^|\s|>|\b)__(?=\S)([\s\S]+?)__(?=\b|<|\s|$)/gm, '$1$2'); + text = text.replace(/(^|\s|>|\b)_(?=\S)([\s\S]+?)_(?=\b|<|\s|$)/gm, '$1$2'); + //asterisks + text = text.replace(/(\*\*)(?=\S)([^\r]*?\S[*]*)\1/g, '$2'); + text = text.replace(/(\*)(?=\S)([^\r]*?\S)\1/g, '$2'); + + } else { + // must go first: + text = text.replace(/(\*\*|__)(?=\S)([^\r]*?\S[*_]*)\1/g, '$2'); + text = text.replace(/(\*|_)(?=\S)([^\r]*?\S)\1/g, '$2'); + } + + text = globals.converter._dispatch('italicsAndBold.after', text, options, globals); + return text; +}); + +/** + * Form HTML ordered (numbered) and unordered (bulleted) lists. + */ +showdown.subParser('lists', function (text, options, globals) { + 'use strict'; + + text = globals.converter._dispatch('lists.before', text, options, globals); + /** + * Process the contents of a single ordered or unordered list, splitting it + * into individual list items. + * @param {string} listStr + * @param {boolean} trimTrailing + * @returns {string} + */ + function processListItems (listStr, trimTrailing) { + // The $g_list_level global keeps track of when we're inside a list. + // Each time we enter a list, we increment it; when we leave a list, + // we decrement. If it's zero, we're not in a list anymore. + // + // We do this because when we're not inside a list, we want to treat + // something like this: + // + // I recommend upgrading to version + // 8. Oops, now this line is treated + // as a sub-list. + // + // As a single paragraph, despite the fact that the second line starts + // with a digit-period-space sequence. + // + // Whereas when we're inside a list (or sub-list), that line will be + // treated as the start of a sub-list. What a kludge, huh? This is + // an aspect of Markdown's syntax that's hard to parse perfectly + // without resorting to mind-reading. Perhaps the solution is to + // change the syntax rules such that sub-lists must start with a + // starting cardinal number; e.g. "1." or "a.". + globals.gListLevel++; + + // trim trailing blank lines: + listStr = listStr.replace(/\n{2,}$/, '\n'); + + // attacklab: add sentinel to emulate \z + listStr += '~0'; + + var rgx = /(\n)?(^[ \t]*)([*+-]|\d+[.])[ \t]+((\[(x|X| )?])?[ \t]*[^\r]+?(\n{1,2}))(?=\n*(~0|\2([*+-]|\d+[.])[ \t]+))/gm, + isParagraphed = (/\n[ \t]*\n(?!~0)/.test(listStr)); + + listStr = listStr.replace(rgx, function (wholeMatch, m1, m2, m3, m4, taskbtn, checked) { + checked = (checked && checked.trim() !== ''); + var item = showdown.subParser('outdent')(m4, options, globals), + bulletStyle = ''; + + // Support for github tasklists + if (taskbtn && options.tasklists) { + bulletStyle = ' class="task-list-item" style="list-style-type: none;"'; + item = item.replace(/^[ \t]*\[(x|X| )?]/m, function () { + var otp = ' -1)) { + item = showdown.subParser('githubCodeBlocks')(item, options, globals); + item = showdown.subParser('blockGamut')(item, options, globals); + } else { + // Recursion for sub-lists: + item = showdown.subParser('lists')(item, options, globals); + item = item.replace(/\n$/, ''); // chomp(item) + if (isParagraphed) { + item = showdown.subParser('paragraphs')(item, options, globals); + } else { + item = showdown.subParser('spanGamut')(item, options, globals); + } + } + item = '\n' + item + '\n'; + return item; + }); + + // attacklab: strip sentinel + listStr = listStr.replace(/~0/g, ''); + + globals.gListLevel--; + + if (trimTrailing) { + listStr = listStr.replace(/\s+$/, ''); + } + + return listStr; + } + + /** + * Check and parse consecutive lists (better fix for issue #142) + * @param {string} list + * @param {string} listType + * @param {boolean} trimTrailing + * @returns {string} + */ + function parseConsecutiveLists(list, listType, trimTrailing) { + // check if we caught 2 or more consecutive lists by mistake + // we use the counterRgx, meaning if listType is UL we look for UL and vice versa + var counterRxg = (listType === 'ul') ? /^ {0,2}\d+\.[ \t]/gm : /^ {0,2}[*+-][ \t]/gm, + subLists = [], + result = ''; + + if (list.search(counterRxg) !== -1) { + (function parseCL(txt) { + var pos = txt.search(counterRxg); + if (pos !== -1) { + // slice + result += '\n\n<' + listType + '>' + processListItems(txt.slice(0, pos), !!trimTrailing) + '\n\n'; + + // invert counterType and listType + listType = (listType === 'ul') ? 'ol' : 'ul'; + counterRxg = (listType === 'ul') ? /^ {0,2}\d+\.[ \t]/gm : /^ {0,2}[*+-][ \t]/gm; + + //recurse + parseCL(txt.slice(pos)); + } else { + result += '\n\n<' + listType + '>' + processListItems(txt, !!trimTrailing) + '\n\n'; + } + })(list); + for (var i = 0; i < subLists.length; ++i) { + + } + } else { + result = '\n\n<' + listType + '>' + processListItems(list, !!trimTrailing) + '\n\n'; + } + + return result; + } + + // attacklab: add sentinel to hack around khtml/safari bug: + // http://bugs.webkit.org/show_bug.cgi?id=11231 + text += '~0'; + + // Re-usable pattern to match any entire ul or ol list: + var wholeList = /^(([ ]{0,3}([*+-]|\d+[.])[ \t]+)[^\r]+?(~0|\n{2,}(?=\S)(?![ \t]*(?:[*+-]|\d+[.])[ \t]+)))/gm; + + if (globals.gListLevel) { + text = text.replace(wholeList, function (wholeMatch, list, m2) { + var listType = (m2.search(/[*+-]/g) > -1) ? 'ul' : 'ol'; + return parseConsecutiveLists(list, listType, true); + }); + } else { + wholeList = /(\n\n|^\n?)(([ ]{0,3}([*+-]|\d+[.])[ \t]+)[^\r]+?(~0|\n{2,}(?=\S)(?![ \t]*(?:[*+-]|\d+[.])[ \t]+)))/gm; + //wholeList = /(\n\n|^\n?)( {0,3}([*+-]|\d+\.)[ \t]+[\s\S]+?)(?=(~0)|(\n\n(?!\t| {2,}| {0,3}([*+-]|\d+\.)[ \t])))/g; + text = text.replace(wholeList, function (wholeMatch, m1, list, m3) { + + var listType = (m3.search(/[*+-]/g) > -1) ? 'ul' : 'ol'; + return parseConsecutiveLists(list, listType); + }); + } + + // attacklab: strip sentinel + text = text.replace(/~0/, ''); + + text = globals.converter._dispatch('lists.after', text, options, globals); + return text; +}); + +/** + * Remove one level of line-leading tabs or spaces + */ +showdown.subParser('outdent', function (text) { + 'use strict'; + + // attacklab: hack around Konqueror 3.5.4 bug: + // "----------bug".replace(/^-/g,"") == "bug" + text = text.replace(/^(\t|[ ]{1,4})/gm, '~0'); // attacklab: g_tab_width + + // attacklab: clean up hack + text = text.replace(/~0/g, ''); + + return text; +}); + +/** + * + */ +showdown.subParser('paragraphs', function (text, options, globals) { + 'use strict'; + + text = globals.converter._dispatch('paragraphs.before', text, options, globals); + // Strip leading and trailing lines: + text = text.replace(/^\n+/g, ''); + text = text.replace(/\n+$/g, ''); + + var grafs = text.split(/\n{2,}/g), + grafsOut = [], + end = grafs.length; // Wrap

    tags + + for (var i = 0; i < end; i++) { + var str = grafs[i]; + // if this is an HTML marker, copy it + if (str.search(/~(K|G)(\d+)\1/g) >= 0) { + grafsOut.push(str); + } else { + str = showdown.subParser('spanGamut')(str, options, globals); + str = str.replace(/^([ \t]*)/g, '

    '); + str += '

    '; + grafsOut.push(str); + } + } + + /** Unhashify HTML blocks */ + end = grafsOut.length; + for (i = 0; i < end; i++) { + var blockText = '', + grafsOutIt = grafsOut[i], + codeFlag = false; + // if this is a marker for an html block... + while (grafsOutIt.search(/~(K|G)(\d+)\1/) >= 0) { + var delim = RegExp.$1, + num = RegExp.$2; + + if (delim === 'K') { + blockText = globals.gHtmlBlocks[num]; + } else { + // we need to check if ghBlock is a false positive + if (codeFlag) { + // use encoded version of all text + blockText = showdown.subParser('encodeCode')(globals.ghCodeBlocks[num].text); + } else { + blockText = globals.ghCodeBlocks[num].codeblock; + } + } + blockText = blockText.replace(/\$/g, '$$$$'); // Escape any dollar signs + + grafsOutIt = grafsOutIt.replace(/(\n\n)?~(K|G)\d+\2(\n\n)?/, blockText); + // Check if grafsOutIt is a pre->code + if (/^]*>\s*]*>/.test(grafsOutIt)) { + codeFlag = true; + } + } + grafsOut[i] = grafsOutIt; + } + text = grafsOut.join('\n\n'); + // Strip leading and trailing lines: + text = text.replace(/^\n+/g, ''); + text = text.replace(/\n+$/g, ''); + return globals.converter._dispatch('paragraphs.after', text, options, globals); +}); + +/** + * Run extension + */ +showdown.subParser('runExtension', function (ext, text, options, globals) { + 'use strict'; + + if (ext.filter) { + text = ext.filter(text, globals.converter, options); + + } else if (ext.regex) { + // TODO remove this when old extension loading mechanism is deprecated + var re = ext.regex; + if (!re instanceof RegExp) { + re = new RegExp(re, 'g'); + } + text = text.replace(re, ext.replace); + } + + return text; +}); + +/** + * These are all the transformations that occur *within* block-level + * tags like paragraphs, headers, and list items. + */ +showdown.subParser('spanGamut', function (text, options, globals) { + 'use strict'; + + text = globals.converter._dispatch('spanGamut.before', text, options, globals); + text = showdown.subParser('codeSpans')(text, options, globals); + text = showdown.subParser('escapeSpecialCharsWithinTagAttributes')(text, options, globals); + text = showdown.subParser('encodeBackslashEscapes')(text, options, globals); + + // Process anchor and image tags. Images must come first, + // because ![foo][f] looks like an anchor. + text = showdown.subParser('images')(text, options, globals); + text = showdown.subParser('anchors')(text, options, globals); + + // Make links out of things like `` + // Must come after _DoAnchors(), because you can use < and > + // delimiters in inline links like [this](). + text = showdown.subParser('autoLinks')(text, options, globals); + text = showdown.subParser('encodeAmpsAndAngles')(text, options, globals); + text = showdown.subParser('italicsAndBold')(text, options, globals); + text = showdown.subParser('strikethrough')(text, options, globals); + + // Do hard breaks: + text = text.replace(/ +\n/g, '
    \n'); + + text = globals.converter._dispatch('spanGamut.after', text, options, globals); + return text; +}); + +showdown.subParser('strikethrough', function (text, options, globals) { + 'use strict'; + + if (options.strikethrough) { + text = globals.converter._dispatch('strikethrough.before', text, options, globals); + text = text.replace(/(?:~T){2}([\s\S]+?)(?:~T){2}/g, '$1'); + text = globals.converter._dispatch('strikethrough.after', text, options, globals); + } + + return text; +}); + +/** + * Strip any lines consisting only of spaces and tabs. + * This makes subsequent regexs easier to write, because we can + * match consecutive blank lines with /\n+/ instead of something + * contorted like /[ \t]*\n+/ + */ +showdown.subParser('stripBlankLines', function (text) { + 'use strict'; + return text.replace(/^[ \t]+$/mg, ''); +}); + +/** + * Strips link definitions from text, stores the URLs and titles in + * hash references. + * Link defs are in the form: ^[id]: url "optional title" + * + * ^[ ]{0,3}\[(.+)\]: // id = $1 attacklab: g_tab_width - 1 + * [ \t]* + * \n? // maybe *one* newline + * [ \t]* + * ? // url = $2 + * [ \t]* + * \n? // maybe one newline + * [ \t]* + * (?: + * (\n*) // any lines skipped = $3 attacklab: lookbehind removed + * ["(] + * (.+?) // title = $4 + * [")] + * [ \t]* + * )? // title is optional + * (?:\n+|$) + * /gm, + * function(){...}); + * + */ +showdown.subParser('stripLinkDefinitions', function (text, options, globals) { + 'use strict'; + + var regex = /^ {0,3}\[(.+)]:[ \t]*\n?[ \t]*?(?: =([*\d]+[A-Za-z%]{0,4})x([*\d]+[A-Za-z%]{0,4}))?[ \t]*\n?[ \t]*(?:(\n*)["|'(](.+?)["|')][ \t]*)?(?:\n+|(?=~0))/gm; + + // attacklab: sentinel workarounds for lack of \A and \Z, safari\khtml bug + text += '~0'; + + text = text.replace(regex, function (wholeMatch, linkId, url, width, height, blankLines, title) { + linkId = linkId.toLowerCase(); + globals.gUrls[linkId] = showdown.subParser('encodeAmpsAndAngles')(url); // Link IDs are case-insensitive + + if (blankLines) { + // Oops, found blank lines, so it's not a title. + // Put back the parenthetical statement we stole. + return blankLines + title; + + } else { + if (title) { + globals.gTitles[linkId] = title.replace(/"|'/g, '"'); + } + if (options.parseImgDimensions && width && height) { + globals.gDimensions[linkId] = { + width: width, + height: height + }; + } + } + // Completely remove the definition from the text + return ''; + }); + + // attacklab: strip sentinel + text = text.replace(/~0/, ''); + + return text; +}); + +showdown.subParser('tables', function (text, options, globals) { + 'use strict'; + + if (!options.tables) { + return text; + } + + var tableRgx = /^[ \t]{0,3}\|?.+\|.+\n[ \t]{0,3}\|?[ \t]*:?[ \t]*(?:-|=){2,}[ \t]*:?[ \t]*\|[ \t]*:?[ \t]*(?:-|=){2,}[\s\S]+?(?:\n\n|~0)/gm; + + function parseStyles(sLine) { + if (/^:[ \t]*--*$/.test(sLine)) { + return ' style="text-align:left;"'; + } else if (/^--*[ \t]*:[ \t]*$/.test(sLine)) { + return ' style="text-align:right;"'; + } else if (/^:[ \t]*--*[ \t]*:$/.test(sLine)) { + return ' style="text-align:center;"'; + } else { + return ''; + } + } + + function parseHeaders(header, style) { + var id = ''; + header = header.trim(); + if (options.tableHeaderId) { + id = ' id="' + header.replace(/ /g, '_').toLowerCase() + '"'; + } + header = showdown.subParser('spanGamut')(header, options, globals); + + return '' + header + '\n'; + } + + function parseCells(cell, style) { + var subText = showdown.subParser('spanGamut')(cell, options, globals); + return '' + subText + '\n'; + } + + function buildTable(headers, cells) { + var tb = '\n\n\n', + tblLgn = headers.length; + + for (var i = 0; i < tblLgn; ++i) { + tb += headers[i]; + } + tb += '\n\n\n'; + + for (i = 0; i < cells.length; ++i) { + tb += '\n'; + for (var ii = 0; ii < tblLgn; ++ii) { + tb += cells[i][ii]; + } + tb += '\n'; + } + tb += '\n
    \n'; + return tb; + } + + text = globals.converter._dispatch('tables.before', text, options, globals); + + text = text.replace(tableRgx, function (rawTable) { + + var i, tableLines = rawTable.split('\n'); + + // strip wrong first and last column if wrapped tables are used + for (i = 0; i < tableLines.length; ++i) { + if (/^[ \t]{0,3}\|/.test(tableLines[i])) { + tableLines[i] = tableLines[i].replace(/^[ \t]{0,3}\|/, ''); + } + if (/\|[ \t]*$/.test(tableLines[i])) { + tableLines[i] = tableLines[i].replace(/\|[ \t]*$/, ''); + } + } + + var rawHeaders = tableLines[0].split('|').map(function (s) { return s.trim();}), + rawStyles = tableLines[1].split('|').map(function (s) { return s.trim();}), + rawCells = [], + headers = [], + styles = [], + cells = []; + + tableLines.shift(); + tableLines.shift(); + + for (i = 0; i < tableLines.length; ++i) { + if (tableLines[i].trim() === '') { + continue; + } + rawCells.push( + tableLines[i] + .split('|') + .map(function (s) { + return s.trim(); + }) + ); + } + + if (rawHeaders.length < rawStyles.length) { + return rawTable; + } + + for (i = 0; i < rawStyles.length; ++i) { + styles.push(parseStyles(rawStyles[i])); + } + + for (i = 0; i < rawHeaders.length; ++i) { + if (showdown.helper.isUndefined(styles[i])) { + styles[i] = ''; + } + headers.push(parseHeaders(rawHeaders[i], styles[i])); + } + + for (i = 0; i < rawCells.length; ++i) { + var row = []; + for (var ii = 0; ii < headers.length; ++ii) { + if (showdown.helper.isUndefined(rawCells[i][ii])) { + + } + row.push(parseCells(rawCells[i][ii], styles[ii])); + } + cells.push(row); + } + + return buildTable(headers, cells); + }); + + text = globals.converter._dispatch('tables.after', text, options, globals); + + return text; +}); + +/** + * Swap back in all the special characters we've hidden. + */ +showdown.subParser('unescapeSpecialChars', function (text) { + 'use strict'; + + text = text.replace(/~E(\d+)E/g, function (wholeMatch, m1) { + var charCodeToReplace = parseInt(m1); + return String.fromCharCode(charCodeToReplace); + }); + return text; +}); +module.exports = showdown; diff --git a/wxParse/wxDiscode.js b/wxParse/wxDiscode.js new file mode 100644 index 0000000..fca29bb --- /dev/null +++ b/wxParse/wxDiscode.js @@ -0,0 +1,207 @@ +// HTML 支持的数学符号 +function strNumDiscode(str){ + str = str.replace(/∀/g, '∀'); + str = str.replace(/∂/g, '∂'); + str = str.replace(/&exists;/g, '∃'); + str = str.replace(/∅/g, '∅'); + str = str.replace(/∇/g, '∇'); + str = str.replace(/∈/g, '∈'); + str = str.replace(/∉/g, '∉'); + str = str.replace(/∋/g, '∋'); + str = str.replace(/∏/g, '∏'); + str = str.replace(/∑/g, '∑'); + str = str.replace(/−/g, '−'); + str = str.replace(/∗/g, '∗'); + str = str.replace(/√/g, '√'); + str = str.replace(/∝/g, '∝'); + str = str.replace(/∞/g, '∞'); + str = str.replace(/∠/g, '∠'); + str = str.replace(/∧/g, '∧'); + str = str.replace(/∨/g, '∨'); + str = str.replace(/∩/g, '∩'); + str = str.replace(/∩/g, '∪'); + str = str.replace(/∫/g, '∫'); + str = str.replace(/∴/g, '∴'); + str = str.replace(/∼/g, '∼'); + str = str.replace(/≅/g, '≅'); + str = str.replace(/≈/g, '≈'); + str = str.replace(/≠/g, '≠'); + str = str.replace(/≤/g, '≤'); + str = str.replace(/≥/g, '≥'); + str = str.replace(/⊂/g, '⊂'); + str = str.replace(/⊃/g, '⊃'); + str = str.replace(/⊄/g, '⊄'); + str = str.replace(/⊆/g, '⊆'); + str = str.replace(/⊇/g, '⊇'); + str = str.replace(/⊕/g, '⊕'); + str = str.replace(/⊗/g, '⊗'); + str = str.replace(/⊥/g, '⊥'); + str = str.replace(/⋅/g, '⋅'); + return str; +} + +//HTML 支持的希腊字母 +function strGreeceDiscode(str){ + str = str.replace(/Α/g, 'Α'); + str = str.replace(/Β/g, 'Β'); + str = str.replace(/Γ/g, 'Γ'); + str = str.replace(/Δ/g, 'Δ'); + str = str.replace(/Ε/g, 'Ε'); + str = str.replace(/Ζ/g, 'Ζ'); + str = str.replace(/Η/g, 'Η'); + str = str.replace(/Θ/g, 'Θ'); + str = str.replace(/Ι/g, 'Ι'); + str = str.replace(/Κ/g, 'Κ'); + str = str.replace(/Λ/g, 'Λ'); + str = str.replace(/Μ/g, 'Μ'); + str = str.replace(/Ν/g, 'Ν'); + str = str.replace(/Ξ/g, 'Ν'); + str = str.replace(/Ο/g, 'Ο'); + str = str.replace(/Π/g, 'Π'); + str = str.replace(/Ρ/g, 'Ρ'); + str = str.replace(/Σ/g, 'Σ'); + str = str.replace(/Τ/g, 'Τ'); + str = str.replace(/Υ/g, 'Υ'); + str = str.replace(/Φ/g, 'Φ'); + str = str.replace(/Χ/g, 'Χ'); + str = str.replace(/Ψ/g, 'Ψ'); + str = str.replace(/Ω/g, 'Ω'); + + str = str.replace(/α/g, 'α'); + str = str.replace(/β/g, 'β'); + str = str.replace(/γ/g, 'γ'); + str = str.replace(/δ/g, 'δ'); + str = str.replace(/ε/g, 'ε'); + str = str.replace(/ζ/g, 'ζ'); + str = str.replace(/η/g, 'η'); + str = str.replace(/θ/g, 'θ'); + str = str.replace(/ι/g, 'ι'); + str = str.replace(/κ/g, 'κ'); + str = str.replace(/λ/g, 'λ'); + str = str.replace(/μ/g, 'μ'); + str = str.replace(/ν/g, 'ν'); + str = str.replace(/ξ/g, 'ξ'); + str = str.replace(/ο/g, 'ο'); + str = str.replace(/π/g, 'π'); + str = str.replace(/ρ/g, 'ρ'); + str = str.replace(/ς/g, 'ς'); + str = str.replace(/σ/g, 'σ'); + str = str.replace(/τ/g, 'τ'); + str = str.replace(/υ/g, 'υ'); + str = str.replace(/φ/g, 'φ'); + str = str.replace(/χ/g, 'χ'); + str = str.replace(/ψ/g, 'ψ'); + str = str.replace(/ω/g, 'ω'); + str = str.replace(/ϑ/g, 'ϑ'); + str = str.replace(/ϒ/g, 'ϒ'); + str = str.replace(/ϖ/g, 'ϖ'); + str = str.replace(/·/g, '·'); + return str; +} + +// + +function strcharacterDiscode(str){ + // 加入常用解析 + str = str.replace(/ /g, ' '); + str = str.replace(/"/g, "'"); + str = str.replace(/&/g, '&'); + // str = str.replace(/</g, '‹'); + // str = str.replace(/>/g, '›'); + + str = str.replace(/</g, '<'); + str = str.replace(/>/g, '>'); + str = str.replace(/•/g, '•'); + + return str; +} + +// HTML 支持的其他实体 +function strOtherDiscode(str){ + str = str.replace(/Œ/g, 'Œ'); + str = str.replace(/œ/g, 'œ'); + str = str.replace(/Š/g, 'Š'); + str = str.replace(/š/g, 'š'); + str = str.replace(/Ÿ/g, 'Ÿ'); + str = str.replace(/ƒ/g, 'ƒ'); + str = str.replace(/ˆ/g, 'ˆ'); + str = str.replace(/˜/g, '˜'); + str = str.replace(/ /g, ''); + str = str.replace(/ /g, ''); + str = str.replace(/ /g, ''); + str = str.replace(/‌/g, ''); + str = str.replace(/‍/g, ''); + str = str.replace(/‎/g, ''); + str = str.replace(/‏/g, ''); + str = str.replace(/–/g, '–'); + str = str.replace(/—/g, '—'); + str = str.replace(/‘/g, '‘'); + str = str.replace(/’/g, '’'); + str = str.replace(/‚/g, '‚'); + str = str.replace(/“/g, '“'); + str = str.replace(/”/g, '”'); + str = str.replace(/„/g, '„'); + str = str.replace(/†/g, '†'); + str = str.replace(/‡/g, '‡'); + str = str.replace(/•/g, '•'); + str = str.replace(/…/g, '…'); + str = str.replace(/‰/g, '‰'); + str = str.replace(/′/g, '′'); + str = str.replace(/″/g, '″'); + str = str.replace(/‹/g, '‹'); + str = str.replace(/›/g, '›'); + str = str.replace(/‾/g, '‾'); + str = str.replace(/€/g, '€'); + str = str.replace(/™/g, '™'); + + str = str.replace(/←/g, '←'); + str = str.replace(/↑/g, '↑'); + str = str.replace(/→/g, '→'); + str = str.replace(/↓/g, '↓'); + str = str.replace(/↔/g, '↔'); + str = str.replace(/↵/g, '↵'); + str = str.replace(/⌈/g, '⌈'); + str = str.replace(/⌉/g, '⌉'); + + str = str.replace(/⌊/g, '⌊'); + str = str.replace(/⌋/g, '⌋'); + str = str.replace(/◊/g, '◊'); + str = str.replace(/♠/g, '♠'); + str = str.replace(/♣/g, '♣'); + str = str.replace(/♥/g, '♥'); + + str = str.replace(/♦/g, '♦'); + str = str.replace(/'/g, '\''); + return str; +} + +function strMoreDiscode(str){ + str = str.replace(/\r\n/g,""); + str = str.replace(/\n/g,""); + + str = str.replace(/code/g,"wxxxcode-style"); + return str; +} + +function strDiscode(str){ + str = strNumDiscode(str); + str = strGreeceDiscode(str); + str = strcharacterDiscode(str); + str = strOtherDiscode(str); + str = strMoreDiscode(str); + return str; +} +function urlToHttpUrl(url,rep){ + + var patt1 = new RegExp("^//"); + var result = patt1.test(url); + if(result){ + url = rep+":"+url; + } + return url; +} + +module.exports = { + strDiscode:strDiscode, + urlToHttpUrl:urlToHttpUrl +} \ No newline at end of file diff --git a/wxParse/wxParse.js b/wxParse/wxParse.js new file mode 100644 index 0000000..44709cf --- /dev/null +++ b/wxParse/wxParse.js @@ -0,0 +1,240 @@ +/** + * author: Di (微信小程序开发工程师) + * organization: WeAppDev(微信小程序开发论坛)(http://weappdev.com) + * 垂直微信小程序开发交流社区 + * + * github地址: https://github.com/icindy/wxParse + * + * for: 微信小程序富文本解析 + * detail : http://weappdev.com/t/wxparse-alpha0-1-html-markdown/184 + */ + +/** + * utils函数引入 + **/ +import showdown from './showdown.js'; +import HtmlToJson from './html2json.js'; +/** + * 配置及公有属性 + **/ +var realWindowWidth = 0; +var realWindowHeight = 0; +wx.getSystemInfo({ + success: function (res) { + realWindowWidth = res.windowWidth + realWindowHeight = res.windowHeight + } +}) +/** + * 主函数入口区 + **/ +function wxParse(bindName = 'wxParseData', type='html', data='
    数据不能为空
    ', target,imagePadding) { + + var that = target; + var transData = {};//存放转化后的数据 + + if (type == 'html') { + transData = HtmlToJson.html2json(data, bindName); + + } else if (type == 'md' || type == 'markdown') { + var converter = new showdown.Converter(); + var html = converter.makeHtml(data); + transData = HtmlToJson.html2json(html, bindName); + } + transData.view = {}; + transData.view.imagePadding = 0; + if(typeof(imagePadding) != 'undefined'){ + transData.view.imagePadding = imagePadding + } + var bindData = {}; + bindData[bindName] = transData; + + + + that.setData(bindData) + + + that.wxParseImgLoad = wxParseImgLoad; + that.wxParseImgTap = wxParseImgTap; +} + + + +//-------------------------- +// 图片点击事件 +//-------------------------- +function wxParseImgTap(e) { + var nowImgUrl = e.currentTarget.dataset.src; + var urls = []; + urls[0] = e.currentTarget.dataset.src; + wx.previewImage({ + current: e.currentTarget.dataset.src, + urls: urls, + }) +} + + + + +//-------------------------- +// 图片视觉宽高计算函数区 +//-------------------------- +function wxParseImgLoad(e) { + + var that = this; + var tagFrom = e.target.dataset.from; + var idx = e.target.dataset.idx; + + if (typeof (tagFrom) != undefined ) { + calMoreImageInfo(e, idx, that, tagFrom) + } +} + +//-------------------------- +// 假循环获取计算图片视觉最佳宽高 +//-------------------------- + +function calMoreImageInfo(e, idx, that, bindName) { + + var temData = that.data[bindName]; + + if (that.data.ground_text != undefined) { + if (that.data.ground_text.length > 0) { + for (var i = 0; i < that.data.ground_text.length; i++) { + if (that.data.ground_text[i].node == bindName) { + temData = that.data.ground_text[i] + } + } + } + } + + if (that.data.problem_text != undefined){ + if (that.data.problem_text.length > 0) { + for (var i = 0; i < that.data.problem_text.length;i++){ + if (that.data.problem_text[i].node == bindName){ + temData = that.data.problem_text[i] + } + } + } + } + + if (temData!=undefined){ + + + if (temData.images!=undefined){ + + if (!temData || temData.images.length == 0) { + return; + } + var temImages = temData.images; + + //因为无法获取view宽度 需要自定义padding进行计算,稍后处理 + var recal = wxAutoImageCal(e.detail.width, e.detail.height,that,bindName); + temImages[idx].width = recal.imageWidth; + temImages[idx].height = recal.imageheight; + temData.images = temImages; + var bindData = {}; + bindData[bindName] = temData; + that.setData(bindData); + var index = temImages[idx].index + var key = `${bindName}` + for (var i of index.split('.')) key+=`.nodes[${i}]` + var keyW = key + '.width' + var keyH = key + '.height' + that.setData({ + [keyW]: recal.imageWidth, + [keyH]: recal.imageheight, + }) + + } + } +} + + +//-------------------------- +// 计算视觉优先的图片宽高 +//-------------------------- + +function wxAutoImageCal(originalWidth, originalHeight,that,bindName) { + //获取图片的原始长宽 + var windowWidth = 0, windowHeight = 0; + var autoWidth = 0, autoHeight = 0; + var results = {}; + + + + //定义地面课程 + if (that.data.ground_text!=undefined){ + if (that.data.ground_text.length>0){ + for (var i = 0; i < that.data.ground_text.length; i++) { + if (that.data.ground_text[i].node == bindName) { + var padding = that.data.ground_text[i].view.imagePadding; + } + } + } + } + + //定义问题 + if (that.data.problem_text != undefined) { + if (that.data.problem_text.length > 0) { + for (var i = 0; i < that.data.problem_text.length; i++) { + if (that.data.problem_text[i].node == bindName) { + var padding = that.data.problem_text[i].view.imagePadding; + } + } + } + } + + windowWidth = realWindowWidth-2*padding; + windowHeight = realWindowHeight; + //判断按照那种方式进行缩放 + // console.log("windowWidth" + windowWidth); + if (originalWidth > windowWidth) {//在图片width大于手机屏幕width时候 + autoWidth = windowWidth; + // console.log("autoWidth" + autoWidth); + autoHeight = (autoWidth * originalHeight) / originalWidth; + // console.log("autoHeight" + autoHeight); + results.imageWidth = autoWidth; + results.imageheight = autoHeight; + } else {//否则展示原来的数据 + results.imageWidth = originalWidth; + results.imageheight = originalHeight; + } + return results; +} + + +//-------------------------- +// +//-------------------------- +function wxParseTemArray(temArrayName,bindNameReg,total,that){ + var array = []; + var temData = that.data; + var obj = null; + for(var i = 0; i < total; i++){ + var simArr = temData[bindNameReg+i].nodes; + array.push(simArr); + } + + temArrayName = temArrayName || 'wxParseTemArray'; + obj = JSON.parse('{"'+ temArrayName +'":""}'); + obj[temArrayName] = array; + that.setData(obj); +} + +//-------------------------- +// +//-------------------------- + +function emojisInit(reg='',baseSrc="/wxParse/emojis/",emojis){ + HtmlToJson.emojisInit(reg,baseSrc,emojis); +} + + +module.exports = { + wxParse: wxParse, + wxParseTemArray:wxParseTemArray, + emojisInit:emojisInit +} + + diff --git a/wxParse/wxParse.wxml b/wxParse/wxParse.wxml new file mode 100644 index 0000000..beec33a --- /dev/null +++ b/wxParse/wxParse.wxml @@ -0,0 +1,967 @@ + + + + + + + + + + + + +