From 40cd01981886e7f35bc6126d87af58151a987c0e Mon Sep 17 00:00:00 2001 From: wbb <1975655432@qq.com> Date: Fri, 21 Oct 2022 17:03:51 +0800 Subject: [PATCH] =?UTF-8?q?=E5=89=8D=E7=AB=AF=E4=BB=A3=E7=A0=81=E7=AC=AC?= =?UTF-8?q?=E4=BA=8C=E6=AC=A1=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- scr/miniprogram-2/.eslintrc.js | 160 + scr/miniprogram-2/.gitignore | 15 + scr/miniprogram-2/.npmrc | 9 + scr/miniprogram-2/.prettierignore | 3 + scr/miniprogram-2/.prettierrc | 11 + scr/miniprogram-2/.vscode/settings.json | 40 + scr/miniprogram-2/LICENSE | 9 + scr/miniprogram-2/README.md | 133 + scr/miniprogram-2/app.js | 8 + scr/miniprogram-2/app.json | 77 + scr/miniprogram-2/app.wxss | 3 + scr/miniprogram-2/common/updateManager.js | 29 + .../components/filter-popup/index.js | 36 + .../components/filter-popup/index.json | 6 + .../components/filter-popup/index.wxml | 18 + .../components/filter-popup/index.wxss | 39 + scr/miniprogram-2/components/filter/index.js | 84 + .../components/filter/index.json | 6 + .../components/filter/index.wxml | 37 + .../components/filter/index.wxss | 50 + .../components/goods-card/index.js | 141 + .../components/goods-card/index.json | 8 + .../components/goods-card/index.wxml | 63 + .../components/goods-card/index.wxss | 133 + .../components/goods-list/index.js | 62 + .../components/goods-list/index.json | 6 + .../components/goods-list/index.wxml | 16 + .../components/goods-list/index.wxss | 7 + .../components/load-more/index.js | 54 + .../components/load-more/index.json | 7 + .../components/load-more/index.wxml | 30 + .../components/load-more/index.wxss | 24 + .../components/loading-content/index.js | 23 + .../components/loading-content/index.json | 6 + .../components/loading-content/index.wxml | 11 + .../components/loading-content/index.wxss | 23 + scr/miniprogram-2/components/price/index.js | 71 + scr/miniprogram-2/components/price/index.json | 4 + scr/miniprogram-2/components/price/index.wxml | 21 + scr/miniprogram-2/components/price/index.wxss | 66 + .../components/swipeout/index.js | 79 + .../components/swipeout/index.json | 4 + .../components/swipeout/index.wxml | 174 + .../components/swipeout/index.wxss | 18 + .../components/webp-image/index.js | 86 + .../components/webp-image/index.json | 6 + .../components/webp-image/index.wxml | 14 + .../components/webp-image/index.wxss} | 0 .../components/webp-image/utils.wxs | 140 + scr/miniprogram-2/config/eslintCheck.js | 91 + scr/miniprogram-2/config/index.js | 20437 ++++++++++++++++ scr/miniprogram-2/custom-tab-bar/data.js | 21 + scr/miniprogram-2/custom-tab-bar/index.js | 34 + scr/miniprogram-2/custom-tab-bar/index.json | 8 + scr/miniprogram-2/custom-tab-bar/index.wxml | 19 + scr/miniprogram-2/custom-tab-bar/index.wxss | 9 + scr/miniprogram-2/envList.js | 6 + scr/miniprogram-2/ext.json | 6 + scr/miniprogram-2/images/dapei.jpg | Bin 0 -> 3405 bytes scr/miniprogram-2/images/food/hushangayi.jpg | Bin 0 -> 242308 bytes scr/miniprogram-2/images/food/hushangayi2.jpg | Bin 0 -> 242556 bytes scr/miniprogram-2/images/food/hushangayi3.jpg | Bin 0 -> 294572 bytes scr/miniprogram-2/images/forum.png | Bin 0 -> 2035 bytes scr/miniprogram-2/images/logo.jpg | Bin 0 -> 8078 bytes scr/miniprogram-2/images/perfer.jpg | Bin 0 -> 7662 bytes scr/miniprogram-2/images/zhuanpang.jpg | Bin 0 -> 7410 bytes scr/miniprogram-2/jsconfig.json | 5 + scr/miniprogram-2/mock.md | 34 + scr/miniprogram-2/model/activities.js | 7 + scr/miniprogram-2/model/activity.js | 18 + scr/miniprogram-2/model/address.js | 31 + scr/miniprogram-2/model/cart.js | 324 + scr/miniprogram-2/model/category.js | 206 + scr/miniprogram-2/model/comments.js | 338 + .../model/comments/queryDetail.js | 50 + scr/miniprogram-2/model/coupon.js | 39 + scr/miniprogram-2/model/detailsComments.js | 30 + scr/miniprogram-2/model/good.js | 1908 ++ scr/miniprogram-2/model/goods.js | 7 + scr/miniprogram-2/model/order/applyService.js | 295 + scr/miniprogram-2/model/order/orderConfirm.js | 147 + scr/miniprogram-2/model/order/orderDetail.js | 1212 + scr/miniprogram-2/model/order/orderList.js | 1054 + scr/miniprogram-2/model/promotion.js | 21 + scr/miniprogram-2/model/search.js | 60 + scr/miniprogram-2/model/submitComment.js | 58 + scr/miniprogram-2/model/swiper.js | 30 + scr/miniprogram-2/model/usercenter.js | 52 + scr/miniprogram-2/package.json | 36 + .../pages/cart/components/cart-bar/index.js | 59 + .../pages/cart/components/cart-bar/index.json | 7 + .../pages/cart/components/cart-bar/index.wxml | 31 + .../pages/cart/components/cart-bar/index.wxss | 80 + .../pages/cart/components/cart-empty/index.js | 23 + .../cart/components/cart-empty/index.json | 6 + .../cart/components/cart-empty/index.wxml | 6 + .../cart/components/cart-empty/index.wxss | 33 + .../pages/cart/components/cart-group/index.js | 166 + .../cart/components/cart-group/index.json | 11 + .../cart/components/cart-group/index.wxml | 185 + .../cart/components/cart-group/index.wxss | 335 + .../cart/components/cart-group/utils.wxs | 20 + .../pages/cart/components/goods-card/index.js | 243 + .../cart/components/goods-card/index.json | 9 + .../cart/components/goods-card/index.wxml | 75 + .../cart/components/goods-card/index.wxss | 260 + .../cart/components/specs-popup/index.js | 72 + .../cart/components/specs-popup/index.json | 7 + .../cart/components/specs-popup/index.wxml | 26 + .../cart/components/specs-popup/index.wxss | 68 + scr/miniprogram-2/pages/cart/index.js | 315 + scr/miniprogram-2/pages/cart/index.json | 10 + scr/miniprogram-2/pages/cart/index.wxml | 31 + scr/miniprogram-2/pages/cart/index.wxss | 12 + .../coupon/components/coupon-card/index.js | 57 + .../coupon/components/coupon-card/index.json | 7 + .../coupon/components/coupon-card/index.wxml | 17 + .../coupon/components/coupon-card/index.wxss | 12 + .../components/floating-button/index.js | 17 + .../components/floating-button/index.json | 6 + .../components/floating-button/index.wxml | 14 + .../components/floating-button/index.wxss | 30 + .../coupon/components/ui-coupon-card/index.js | 87 + .../components/ui-coupon-card/index.json | 7 + .../components/ui-coupon-card/index.wxml | 54 + .../components/ui-coupon-card/index.wxss | 147 + .../coupon/coupon-activity-goods/index.js | 78 + .../coupon/coupon-activity-goods/index.json | 10 + .../coupon/coupon-activity-goods/index.wxml | 54 + .../coupon/coupon-activity-goods/index.wxss | 74 + .../pages/coupon/coupon-detail/index.js | 32 + .../pages/coupon/coupon-detail/index.json | 10 + .../pages/coupon/coupon-detail/index.wxml | 48 + .../pages/coupon/coupon-detail/index.wxss | 100 + .../pages/coupon/coupon-list/index.js | 77 + .../pages/coupon/coupon-list/index.json | 10 + .../pages/coupon/coupon-list/index.wxml | 42 + .../pages/coupon/coupon-list/index.wxss | 78 + scr/miniprogram-2/pages/forum/forum.js | 66 + scr/miniprogram-2/pages/forum/forum.json | 3 + scr/miniprogram-2/pages/forum/forum.wxml | 2 + scr/miniprogram-2/pages/forum/forum.wxss | 1 + .../components/c-sidebar/README.md | 95 + .../c-sidebar/c-sidebar-item/index.js | 51 + .../c-sidebar/c-sidebar-item/index.json | 4 + .../c-sidebar/c-sidebar-item/index.wxml | 10 + .../c-sidebar/c-sidebar-item/index.wxss | 60 + .../components/c-sidebar/index.js | 106 + .../components/c-sidebar/index.json | 4 + .../components/c-sidebar/index.wxml | 3 + .../components/c-sidebar/index.wxss | 9 + .../c-tabbar/c-tabbar-more/index.js | 37 + .../c-tabbar/c-tabbar-more/index.json | 4 + .../c-tabbar/c-tabbar-more/index.wxml | 25 + .../c-tabbar/c-tabbar-more/index.wxss | 63 + .../components/c-tabbar/index.js | 68 + .../components/c-tabbar/index.json | 6 + .../components/c-tabbar/index.wxml | 29 + .../components/c-tabbar/index.wxss | 53 + .../components/goods-category/index.js | 75 + .../components/goods-category/index.json | 9 + .../components/goods-category/index.wxml | 61 + .../components/goods-category/index.wxss | 102 + .../pages/goods/category/data.js | 135 + .../pages/goods/category/index.js | 28 + .../pages/goods/category/index.json | 6 + .../pages/goods/category/index.wxml | 8 + .../pages/goods/category/index.wxss | 23 + .../components/images-videos/assets/play.png | Bin 0 -> 1326 bytes .../components/images-videos/index.js | 36 + .../components/images-videos/index.json | 7 + .../components/images-videos/index.wxml | 15 + .../components/images-videos/index.wxss | 68 + .../components/my-video/index.js | 55 + .../components/my-video/index.json | 4 + .../components/my-video/index.wxml | 26 + .../components/my-video/index.wxss | 21 + .../components/comments-card/index.js | 51 + .../components/comments-card/index.json | 8 + .../components/comments-card/index.wxml | 34 + .../components/comments-card/index.wxss | 170 + .../pages/goods/comments/create/index.js | 92 + .../pages/goods/comments/create/index.json | 13 + .../pages/goods/comments/create/index.wxml | 85 + .../pages/goods/comments/create/index.wxss | 171 + .../pages/goods/comments/index.js | 227 + .../pages/goods/comments/index.json | 8 + .../pages/goods/comments/index.wxml | 50 + .../pages/goods/comments/index.wxss | 49 + .../goods/details/components/buy-bar/index.js | 66 + .../details/components/buy-bar/index.json | 6 + .../details/components/buy-bar/index.wxml | 38 + .../details/components/buy-bar/index.wxss | 107 + .../components/goods-specs-popup/index.js | 389 + .../components/goods-specs-popup/index.json | 9 + .../components/goods-specs-popup/index.wxml | 100 + .../components/goods-specs-popup/index.wxss | 300 + .../components/promotion-popup/index.js | 35 + .../components/promotion-popup/index.json | 7 + .../components/promotion-popup/index.wxml | 34 + .../components/promotion-popup/index.wxss | 131 + .../pages/goods/details/index.js | 443 + .../pages/goods/details/index.json | 18 + .../pages/goods/details/index.wxml | 176 + .../pages/goods/details/index.wxss | 356 + scr/miniprogram-2/pages/goods/list/index.js | 226 + scr/miniprogram-2/pages/goods/list/index.json | 12 + scr/miniprogram-2/pages/goods/list/index.wxml | 55 + scr/miniprogram-2/pages/goods/list/index.wxss | 108 + scr/miniprogram-2/pages/goods/result/index.js | 262 + .../pages/goods/result/index.json | 15 + .../pages/goods/result/index.wxml | 81 + .../pages/goods/result/index.wxss | 110 + scr/miniprogram-2/pages/goods/search/index.js | 119 + .../pages/goods/search/index.json | 8 + .../pages/goods/search/index.wxml | 75 + .../pages/goods/search/index.wxss | 79 + scr/miniprogram-2/pages/home/home.js | 155 + scr/miniprogram-2/pages/home/home.json | 20 + scr/miniprogram-2/pages/home/home.wxml | 41 + scr/miniprogram-2/pages/home/home.wxss | 127 + scr/miniprogram-2/pages/home/readme | 8 + .../pages/order/after-service-detail/api.js | 34 + .../pages/order/after-service-detail/index.js | 209 + .../order/after-service-detail/index.json | 20 + .../order/after-service-detail/index.wxml | 223 + .../order/after-service-detail/index.wxss | 443 + .../pages/order/after-service-list/api.js | 1278 + .../pages/order/after-service-list/index.js | 220 + .../pages/order/after-service-list/index.json | 15 + .../pages/order/after-service-list/index.wxml | 73 + .../pages/order/after-service-list/index.wxss | 103 + .../pages/order/apply-service/index.js | 454 + .../pages/order/apply-service/index.json | 19 + .../pages/order/apply-service/index.wxml | 220 + .../pages/order/apply-service/index.wxss | 290 + .../after-service-button-bar/index.js | 95 + .../after-service-button-bar/index.json | 6 + .../after-service-button-bar/index.wxml | 31 + .../after-service-button-bar/index.wxss | 46 + .../components/customer-service/index.js | 38 + .../components/customer-service/index.json | 6 + .../components/customer-service/index.wxml | 23 + .../components/customer-service/index.wxss | 48 + .../order/components/goods-card/index.js | 264 + .../order/components/goods-card/index.json | 8 + .../order/components/goods-card/index.wxml | 77 + .../order/components/goods-card/index.wxss | 254 + .../pages/order/components/noGoods/noGoods.js | 57 + .../order/components/noGoods/noGoods.json | 8 + .../order/components/noGoods/noGoods.wxml | 55 + .../order/components/noGoods/noGoods.wxss | 68 + .../components/order-button-bar/index.js | 217 + .../components/order-button-bar/index.json | 8 + .../components/order-button-bar/index.wxml | 35 + .../components/order-button-bar/index.wxss | 57 + .../order/components/order-card/index.js | 90 + .../order/components/order-card/index.json | 7 + .../order/components/order-card/index.wxml | 30 + .../order/components/order-card/index.wxss | 45 + .../components/order-goods-card/index.js | 43 + .../components/order-goods-card/index.json | 7 + .../components/order-goods-card/index.wxml | 31 + .../order/components/reason-sheet/index.js | 114 + .../order/components/reason-sheet/index.json | 10 + .../order/components/reason-sheet/index.wxml | 50 + .../order/components/reason-sheet/index.wxss | 47 + .../components/reason-sheet/reasonSheet.js | 25 + .../order/components/selectCoupons/mock.js | 22 + .../components/selectCoupons/selectCoupon.wxs | 16 + .../components/selectCoupons/selectCoupons.js | 160 + .../selectCoupons/selectCoupons.json | 10 + .../selectCoupons/selectCoupons.wxml | 43 + .../selectCoupons/selectCoupons.wxss | 104 + .../components/specs-goods-card/index.js | 132 + .../components/specs-goods-card/index.json | 6 + .../components/specs-goods-card/index.wxml | 40 + .../components/specs-goods-card/index.wxss | 0 scr/miniprogram-2/pages/order/config.js | 94 + .../pages/order/delivery-detail/index.js | 43 + .../pages/order/delivery-detail/index.json | 11 + .../pages/order/delivery-detail/index.wxml | 91 + .../pages/order/delivery-detail/index.wxss | 99 + .../pages/order/fill-tracking-no/api.js | 71 + .../pages/order/fill-tracking-no/index.js | 190 + .../pages/order/fill-tracking-no/index.json | 14 + .../pages/order/fill-tracking-no/index.wxml | 54 + .../pages/order/fill-tracking-no/index.wxss | 95 + .../pages/order/invoice/index.js | 38 + .../pages/order/invoice/index.json | 8 + .../pages/order/invoice/index.wxml | 40 + .../pages/order/invoice/index.wxss | 31 + .../components/address-card/index.js | 25 + .../components/address-card/index.json | 7 + .../components/address-card/index.wxml | 46 + .../components/address-card/index.wxss | 66 + .../pages/order/order-confirm/getNotes.wxs | 11 + .../order/order-confirm/handleInvoice.wxs | 11 + .../pages/order/order-confirm/index.js | 571 + .../pages/order/order-confirm/index.json | 16 + .../pages/order/order-confirm/index.wxml | 167 + .../pages/order/order-confirm/index.wxss | 229 + .../pages/order/order-confirm/order.wxs | 8 + .../pages/order/order-confirm/pay.js | 115 + .../pages/order/order-detail/index.js | 288 + .../pages/order/order-detail/index.json | 17 + .../pages/order/order-detail/index.wxml | 182 + .../pages/order/order-detail/index.wxss | 240 + .../pages/order/order-list/index.js | 189 + .../pages/order/order-list/index.json | 16 + .../pages/order/order-list/index.wxml | 91 + .../pages/order/order-list/index.wxss | 107 + .../pages/order/pay-result/index.js | 47 + .../pages/order/pay-result/index.json | 9 + .../pages/order/pay-result/index.wxml | 22 + .../pages/order/pay-result/index.wxss | 54 + .../pages/order/receipt/index.js | 190 + .../pages/order/receipt/index.json | 11 + .../pages/order/receipt/index.wxml | 137 + .../pages/order/receipt/index.wxss | 209 + .../pages/preferchoice/preferchoice.js | 66 + .../pages/preferchoice/preferchoice.json | 3 + .../pages/preferchoice/preferchoice.wxml | 2 + .../pages/preferchoice/preferchoice.wxss | 1 + .../pages/promotion-detail/index.js | 57 + .../pages/promotion-detail/index.json | 10 + .../pages/promotion-detail/index.wxml | 76 + .../pages/promotion-detail/index.wxss | 111 + .../pages/turntable/turntable.js | 66 + .../pages/turntable/turntable.json | 3 + .../pages/turntable/turntable.wxml | 2 + .../pages/turntable/turntable.wxss | 1 + .../pages/usercenter/address/edit/index.js | 359 + .../pages/usercenter/address/edit/index.json | 16 + .../pages/usercenter/address/edit/index.wxml | 146 + .../pages/usercenter/address/edit/index.wxss | 113 + .../pages/usercenter/address/edit/util.js | 33 + .../pages/usercenter/address/list/index.js | 202 + .../pages/usercenter/address/list/index.json | 11 + .../pages/usercenter/address/list/index.wxml | 48 + .../pages/usercenter/address/list/index.wxss | 109 + .../pages/usercenter/address/list/util.js | 31 + .../components/area-picker-new/index.js | 192 + .../components/area-picker-new/index.json | 8 + .../components/area-picker-new/index.wxml | 78 + .../components/area-picker-new/index.wxss | 153 + .../components/order-group/index.js | 37 + .../components/order-group/index.json | 9 + .../components/order-group/index.wxml | 38 + .../components/order-group/index.wxss | 56 + .../usercenter/components/t-location/index.js | 126 + .../components/t-location/index.json | 8 + .../components/t-location/index.wxml | 39 + .../components/t-location/index.wxss | 19 + .../components/ui-address-item/index.js | 46 + .../components/ui-address-item/index.json | 8 + .../components/ui-address-item/index.wxml | 52 + .../components/ui-address-item/index.wxss | 103 + .../components/ui-select-picker/index.js | 73 + .../components/ui-select-picker/index.json | 6 + .../components/ui-select-picker/index.wxml | 27 + .../components/ui-select-picker/index.wxss | 102 + .../components/user-center-card/index.js | 35 + .../components/user-center-card/index.json | 7 + .../components/user-center-card/index.wxml | 35 + .../components/user-center-card/index.wxss | 48 + scr/miniprogram-2/pages/usercenter/index.js | 240 + scr/miniprogram-2/pages/usercenter/index.json | 14 + scr/miniprogram-2/pages/usercenter/index.wxml | 53 + scr/miniprogram-2/pages/usercenter/index.wxss | 146 + .../pages/usercenter/name-edit/index.js | 19 + .../pages/usercenter/name-edit/index.json | 8 + .../pages/usercenter/name-edit/index.wxml | 16 + .../pages/usercenter/name-edit/index.wxss | 26 + .../pages/usercenter/person-info/index.js | 122 + .../pages/usercenter/person-info/index.json | 12 + .../pages/usercenter/person-info/index.wxml | 59 + .../pages/usercenter/person-info/index.wxss | 41 + scr/miniprogram-2/project.config.json | 140 + scr/miniprogram-2/services/_utils/delay.js | 3 + scr/miniprogram-2/services/_utils/timeout.js | 3 + .../services/activity/fetchActivity.js | 20 + .../services/activity/fetchActivityList.js | 20 + .../services/address/fetchAddress.js | 48 + scr/miniprogram-2/services/cart/cart.js | 20 + .../services/comments/fetchComments.js | 18 + .../services/comments/fetchCommentsCount.js | 18 + scr/miniprogram-2/services/coupon/index.js | 65 + .../good/comments/fetchCommentDetail.js | 20 + .../services/good/featchSearchResult.js | 38 + .../services/good/fetchCategoryList.js | 18 + scr/miniprogram-2/services/good/fetchGood.js | 18 + scr/miniprogram-2/services/good/fetchGoods.js | 29 + .../good/fetchGoodsDetailsComments.js | 37 + .../services/good/fetchGoodsList.js | 39 + .../services/good/fetchSearchHistory.js | 35 + scr/miniprogram-2/services/home/home.js | 54 + .../services/order/applyService.js | 70 + .../services/order/orderConfirm.js | 69 + .../services/order/orderDetail.js | 39 + scr/miniprogram-2/services/order/orderList.js | 39 + .../services/order/orderSubmitComment.js | 22 + .../services/promotion/detail.js | 18 + .../services/usercenter/fetchPerson.js | 28 + .../services/usercenter/fetchUsercenter.js | 18 + scr/miniprogram-2/sitemap.json | 7 + scr/miniprogram-2/style/cart-group.wxss | 83 + scr/miniprogram-2/style/debug.log | 1 + scr/miniprogram-2/style/global.wxss | 965 + scr/miniprogram-2/style/goodsList.wxss | 169 + scr/miniprogram-2/style/iconfont.wxss | 306 + scr/miniprogram-2/style/theme.wxss | 10 + scr/miniprogram-2/utils/addressParse.js | 25 + scr/miniprogram-2/utils/getPermission.js | 45 + scr/miniprogram-2/utils/mock.js | 51 + scr/miniprogram-2/utils/util.js | 133 + 416 files changed, 54135 insertions(+) create mode 100644 scr/miniprogram-2/.eslintrc.js create mode 100644 scr/miniprogram-2/.gitignore create mode 100644 scr/miniprogram-2/.npmrc create mode 100644 scr/miniprogram-2/.prettierignore create mode 100644 scr/miniprogram-2/.prettierrc create mode 100644 scr/miniprogram-2/.vscode/settings.json create mode 100644 scr/miniprogram-2/LICENSE create mode 100644 scr/miniprogram-2/README.md create mode 100644 scr/miniprogram-2/app.js create mode 100644 scr/miniprogram-2/app.json create mode 100644 scr/miniprogram-2/app.wxss create mode 100644 scr/miniprogram-2/common/updateManager.js create mode 100644 scr/miniprogram-2/components/filter-popup/index.js create mode 100644 scr/miniprogram-2/components/filter-popup/index.json create mode 100644 scr/miniprogram-2/components/filter-popup/index.wxml create mode 100644 scr/miniprogram-2/components/filter-popup/index.wxss create mode 100644 scr/miniprogram-2/components/filter/index.js create mode 100644 scr/miniprogram-2/components/filter/index.json create mode 100644 scr/miniprogram-2/components/filter/index.wxml create mode 100644 scr/miniprogram-2/components/filter/index.wxss create mode 100644 scr/miniprogram-2/components/goods-card/index.js create mode 100644 scr/miniprogram-2/components/goods-card/index.json create mode 100644 scr/miniprogram-2/components/goods-card/index.wxml create mode 100644 scr/miniprogram-2/components/goods-card/index.wxss create mode 100644 scr/miniprogram-2/components/goods-list/index.js create mode 100644 scr/miniprogram-2/components/goods-list/index.json create mode 100644 scr/miniprogram-2/components/goods-list/index.wxml create mode 100644 scr/miniprogram-2/components/goods-list/index.wxss create mode 100644 scr/miniprogram-2/components/load-more/index.js create mode 100644 scr/miniprogram-2/components/load-more/index.json create mode 100644 scr/miniprogram-2/components/load-more/index.wxml create mode 100644 scr/miniprogram-2/components/load-more/index.wxss create mode 100644 scr/miniprogram-2/components/loading-content/index.js create mode 100644 scr/miniprogram-2/components/loading-content/index.json create mode 100644 scr/miniprogram-2/components/loading-content/index.wxml create mode 100644 scr/miniprogram-2/components/loading-content/index.wxss create mode 100644 scr/miniprogram-2/components/price/index.js create mode 100644 scr/miniprogram-2/components/price/index.json create mode 100644 scr/miniprogram-2/components/price/index.wxml create mode 100644 scr/miniprogram-2/components/price/index.wxss create mode 100644 scr/miniprogram-2/components/swipeout/index.js create mode 100644 scr/miniprogram-2/components/swipeout/index.json create mode 100644 scr/miniprogram-2/components/swipeout/index.wxml create mode 100644 scr/miniprogram-2/components/swipeout/index.wxss create mode 100644 scr/miniprogram-2/components/webp-image/index.js create mode 100644 scr/miniprogram-2/components/webp-image/index.json create mode 100644 scr/miniprogram-2/components/webp-image/index.wxml rename scr/{2.txt => miniprogram-2/components/webp-image/index.wxss} (100%) create mode 100644 scr/miniprogram-2/components/webp-image/utils.wxs create mode 100644 scr/miniprogram-2/config/eslintCheck.js create mode 100644 scr/miniprogram-2/config/index.js create mode 100644 scr/miniprogram-2/custom-tab-bar/data.js create mode 100644 scr/miniprogram-2/custom-tab-bar/index.js create mode 100644 scr/miniprogram-2/custom-tab-bar/index.json create mode 100644 scr/miniprogram-2/custom-tab-bar/index.wxml create mode 100644 scr/miniprogram-2/custom-tab-bar/index.wxss create mode 100644 scr/miniprogram-2/envList.js create mode 100644 scr/miniprogram-2/ext.json create mode 100644 scr/miniprogram-2/images/dapei.jpg create mode 100644 scr/miniprogram-2/images/food/hushangayi.jpg create mode 100644 scr/miniprogram-2/images/food/hushangayi2.jpg create mode 100644 scr/miniprogram-2/images/food/hushangayi3.jpg create mode 100644 scr/miniprogram-2/images/forum.png create mode 100644 scr/miniprogram-2/images/logo.jpg create mode 100644 scr/miniprogram-2/images/perfer.jpg create mode 100644 scr/miniprogram-2/images/zhuanpang.jpg create mode 100644 scr/miniprogram-2/jsconfig.json create mode 100644 scr/miniprogram-2/mock.md create mode 100644 scr/miniprogram-2/model/activities.js create mode 100644 scr/miniprogram-2/model/activity.js create mode 100644 scr/miniprogram-2/model/address.js create mode 100644 scr/miniprogram-2/model/cart.js create mode 100644 scr/miniprogram-2/model/category.js create mode 100644 scr/miniprogram-2/model/comments.js create mode 100644 scr/miniprogram-2/model/comments/queryDetail.js create mode 100644 scr/miniprogram-2/model/coupon.js create mode 100644 scr/miniprogram-2/model/detailsComments.js create mode 100644 scr/miniprogram-2/model/good.js create mode 100644 scr/miniprogram-2/model/goods.js create mode 100644 scr/miniprogram-2/model/order/applyService.js create mode 100644 scr/miniprogram-2/model/order/orderConfirm.js create mode 100644 scr/miniprogram-2/model/order/orderDetail.js create mode 100644 scr/miniprogram-2/model/order/orderList.js create mode 100644 scr/miniprogram-2/model/promotion.js create mode 100644 scr/miniprogram-2/model/search.js create mode 100644 scr/miniprogram-2/model/submitComment.js create mode 100644 scr/miniprogram-2/model/swiper.js create mode 100644 scr/miniprogram-2/model/usercenter.js create mode 100644 scr/miniprogram-2/package.json create mode 100644 scr/miniprogram-2/pages/cart/components/cart-bar/index.js create mode 100644 scr/miniprogram-2/pages/cart/components/cart-bar/index.json create mode 100644 scr/miniprogram-2/pages/cart/components/cart-bar/index.wxml create mode 100644 scr/miniprogram-2/pages/cart/components/cart-bar/index.wxss create mode 100644 scr/miniprogram-2/pages/cart/components/cart-empty/index.js create mode 100644 scr/miniprogram-2/pages/cart/components/cart-empty/index.json create mode 100644 scr/miniprogram-2/pages/cart/components/cart-empty/index.wxml create mode 100644 scr/miniprogram-2/pages/cart/components/cart-empty/index.wxss create mode 100644 scr/miniprogram-2/pages/cart/components/cart-group/index.js create mode 100644 scr/miniprogram-2/pages/cart/components/cart-group/index.json create mode 100644 scr/miniprogram-2/pages/cart/components/cart-group/index.wxml create mode 100644 scr/miniprogram-2/pages/cart/components/cart-group/index.wxss create mode 100644 scr/miniprogram-2/pages/cart/components/cart-group/utils.wxs create mode 100644 scr/miniprogram-2/pages/cart/components/goods-card/index.js create mode 100644 scr/miniprogram-2/pages/cart/components/goods-card/index.json create mode 100644 scr/miniprogram-2/pages/cart/components/goods-card/index.wxml create mode 100644 scr/miniprogram-2/pages/cart/components/goods-card/index.wxss create mode 100644 scr/miniprogram-2/pages/cart/components/specs-popup/index.js create mode 100644 scr/miniprogram-2/pages/cart/components/specs-popup/index.json create mode 100644 scr/miniprogram-2/pages/cart/components/specs-popup/index.wxml create mode 100644 scr/miniprogram-2/pages/cart/components/specs-popup/index.wxss create mode 100644 scr/miniprogram-2/pages/cart/index.js create mode 100644 scr/miniprogram-2/pages/cart/index.json create mode 100644 scr/miniprogram-2/pages/cart/index.wxml create mode 100644 scr/miniprogram-2/pages/cart/index.wxss create mode 100644 scr/miniprogram-2/pages/coupon/components/coupon-card/index.js create mode 100644 scr/miniprogram-2/pages/coupon/components/coupon-card/index.json create mode 100644 scr/miniprogram-2/pages/coupon/components/coupon-card/index.wxml create mode 100644 scr/miniprogram-2/pages/coupon/components/coupon-card/index.wxss create mode 100644 scr/miniprogram-2/pages/coupon/components/floating-button/index.js create mode 100644 scr/miniprogram-2/pages/coupon/components/floating-button/index.json create mode 100644 scr/miniprogram-2/pages/coupon/components/floating-button/index.wxml create mode 100644 scr/miniprogram-2/pages/coupon/components/floating-button/index.wxss create mode 100644 scr/miniprogram-2/pages/coupon/components/ui-coupon-card/index.js create mode 100644 scr/miniprogram-2/pages/coupon/components/ui-coupon-card/index.json create mode 100644 scr/miniprogram-2/pages/coupon/components/ui-coupon-card/index.wxml create mode 100644 scr/miniprogram-2/pages/coupon/components/ui-coupon-card/index.wxss create mode 100644 scr/miniprogram-2/pages/coupon/coupon-activity-goods/index.js create mode 100644 scr/miniprogram-2/pages/coupon/coupon-activity-goods/index.json create mode 100644 scr/miniprogram-2/pages/coupon/coupon-activity-goods/index.wxml create mode 100644 scr/miniprogram-2/pages/coupon/coupon-activity-goods/index.wxss create mode 100644 scr/miniprogram-2/pages/coupon/coupon-detail/index.js create mode 100644 scr/miniprogram-2/pages/coupon/coupon-detail/index.json create mode 100644 scr/miniprogram-2/pages/coupon/coupon-detail/index.wxml create mode 100644 scr/miniprogram-2/pages/coupon/coupon-detail/index.wxss create mode 100644 scr/miniprogram-2/pages/coupon/coupon-list/index.js create mode 100644 scr/miniprogram-2/pages/coupon/coupon-list/index.json create mode 100644 scr/miniprogram-2/pages/coupon/coupon-list/index.wxml create mode 100644 scr/miniprogram-2/pages/coupon/coupon-list/index.wxss create mode 100644 scr/miniprogram-2/pages/forum/forum.js create mode 100644 scr/miniprogram-2/pages/forum/forum.json create mode 100644 scr/miniprogram-2/pages/forum/forum.wxml create mode 100644 scr/miniprogram-2/pages/forum/forum.wxss create mode 100644 scr/miniprogram-2/pages/goods/category/components/goods-category/components/c-sidebar/README.md create mode 100644 scr/miniprogram-2/pages/goods/category/components/goods-category/components/c-sidebar/c-sidebar-item/index.js create mode 100644 scr/miniprogram-2/pages/goods/category/components/goods-category/components/c-sidebar/c-sidebar-item/index.json create mode 100644 scr/miniprogram-2/pages/goods/category/components/goods-category/components/c-sidebar/c-sidebar-item/index.wxml create mode 100644 scr/miniprogram-2/pages/goods/category/components/goods-category/components/c-sidebar/c-sidebar-item/index.wxss create mode 100644 scr/miniprogram-2/pages/goods/category/components/goods-category/components/c-sidebar/index.js create mode 100644 scr/miniprogram-2/pages/goods/category/components/goods-category/components/c-sidebar/index.json create mode 100644 scr/miniprogram-2/pages/goods/category/components/goods-category/components/c-sidebar/index.wxml create mode 100644 scr/miniprogram-2/pages/goods/category/components/goods-category/components/c-sidebar/index.wxss create mode 100644 scr/miniprogram-2/pages/goods/category/components/goods-category/components/c-tabbar/c-tabbar-more/index.js create mode 100644 scr/miniprogram-2/pages/goods/category/components/goods-category/components/c-tabbar/c-tabbar-more/index.json create mode 100644 scr/miniprogram-2/pages/goods/category/components/goods-category/components/c-tabbar/c-tabbar-more/index.wxml create mode 100644 scr/miniprogram-2/pages/goods/category/components/goods-category/components/c-tabbar/c-tabbar-more/index.wxss create mode 100644 scr/miniprogram-2/pages/goods/category/components/goods-category/components/c-tabbar/index.js create mode 100644 scr/miniprogram-2/pages/goods/category/components/goods-category/components/c-tabbar/index.json create mode 100644 scr/miniprogram-2/pages/goods/category/components/goods-category/components/c-tabbar/index.wxml create mode 100644 scr/miniprogram-2/pages/goods/category/components/goods-category/components/c-tabbar/index.wxss create mode 100644 scr/miniprogram-2/pages/goods/category/components/goods-category/index.js create mode 100644 scr/miniprogram-2/pages/goods/category/components/goods-category/index.json create mode 100644 scr/miniprogram-2/pages/goods/category/components/goods-category/index.wxml create mode 100644 scr/miniprogram-2/pages/goods/category/components/goods-category/index.wxss create mode 100644 scr/miniprogram-2/pages/goods/category/data.js create mode 100644 scr/miniprogram-2/pages/goods/category/index.js create mode 100644 scr/miniprogram-2/pages/goods/category/index.json create mode 100644 scr/miniprogram-2/pages/goods/category/index.wxml create mode 100644 scr/miniprogram-2/pages/goods/category/index.wxss create mode 100644 scr/miniprogram-2/pages/goods/comments/components/comments-card/components/images-videos/assets/play.png create mode 100644 scr/miniprogram-2/pages/goods/comments/components/comments-card/components/images-videos/index.js create mode 100644 scr/miniprogram-2/pages/goods/comments/components/comments-card/components/images-videos/index.json create mode 100644 scr/miniprogram-2/pages/goods/comments/components/comments-card/components/images-videos/index.wxml create mode 100644 scr/miniprogram-2/pages/goods/comments/components/comments-card/components/images-videos/index.wxss create mode 100644 scr/miniprogram-2/pages/goods/comments/components/comments-card/components/my-video/index.js create mode 100644 scr/miniprogram-2/pages/goods/comments/components/comments-card/components/my-video/index.json create mode 100644 scr/miniprogram-2/pages/goods/comments/components/comments-card/components/my-video/index.wxml create mode 100644 scr/miniprogram-2/pages/goods/comments/components/comments-card/components/my-video/index.wxss create mode 100644 scr/miniprogram-2/pages/goods/comments/components/comments-card/index.js create mode 100644 scr/miniprogram-2/pages/goods/comments/components/comments-card/index.json create mode 100644 scr/miniprogram-2/pages/goods/comments/components/comments-card/index.wxml create mode 100644 scr/miniprogram-2/pages/goods/comments/components/comments-card/index.wxss create mode 100644 scr/miniprogram-2/pages/goods/comments/create/index.js create mode 100644 scr/miniprogram-2/pages/goods/comments/create/index.json create mode 100644 scr/miniprogram-2/pages/goods/comments/create/index.wxml create mode 100644 scr/miniprogram-2/pages/goods/comments/create/index.wxss create mode 100644 scr/miniprogram-2/pages/goods/comments/index.js create mode 100644 scr/miniprogram-2/pages/goods/comments/index.json create mode 100644 scr/miniprogram-2/pages/goods/comments/index.wxml create mode 100644 scr/miniprogram-2/pages/goods/comments/index.wxss create mode 100644 scr/miniprogram-2/pages/goods/details/components/buy-bar/index.js create mode 100644 scr/miniprogram-2/pages/goods/details/components/buy-bar/index.json create mode 100644 scr/miniprogram-2/pages/goods/details/components/buy-bar/index.wxml create mode 100644 scr/miniprogram-2/pages/goods/details/components/buy-bar/index.wxss create mode 100644 scr/miniprogram-2/pages/goods/details/components/goods-specs-popup/index.js create mode 100644 scr/miniprogram-2/pages/goods/details/components/goods-specs-popup/index.json create mode 100644 scr/miniprogram-2/pages/goods/details/components/goods-specs-popup/index.wxml create mode 100644 scr/miniprogram-2/pages/goods/details/components/goods-specs-popup/index.wxss create mode 100644 scr/miniprogram-2/pages/goods/details/components/promotion-popup/index.js create mode 100644 scr/miniprogram-2/pages/goods/details/components/promotion-popup/index.json create mode 100644 scr/miniprogram-2/pages/goods/details/components/promotion-popup/index.wxml create mode 100644 scr/miniprogram-2/pages/goods/details/components/promotion-popup/index.wxss create mode 100644 scr/miniprogram-2/pages/goods/details/index.js create mode 100644 scr/miniprogram-2/pages/goods/details/index.json create mode 100644 scr/miniprogram-2/pages/goods/details/index.wxml create mode 100644 scr/miniprogram-2/pages/goods/details/index.wxss create mode 100644 scr/miniprogram-2/pages/goods/list/index.js create mode 100644 scr/miniprogram-2/pages/goods/list/index.json create mode 100644 scr/miniprogram-2/pages/goods/list/index.wxml create mode 100644 scr/miniprogram-2/pages/goods/list/index.wxss create mode 100644 scr/miniprogram-2/pages/goods/result/index.js create mode 100644 scr/miniprogram-2/pages/goods/result/index.json create mode 100644 scr/miniprogram-2/pages/goods/result/index.wxml create mode 100644 scr/miniprogram-2/pages/goods/result/index.wxss create mode 100644 scr/miniprogram-2/pages/goods/search/index.js create mode 100644 scr/miniprogram-2/pages/goods/search/index.json create mode 100644 scr/miniprogram-2/pages/goods/search/index.wxml create mode 100644 scr/miniprogram-2/pages/goods/search/index.wxss create mode 100644 scr/miniprogram-2/pages/home/home.js create mode 100644 scr/miniprogram-2/pages/home/home.json create mode 100644 scr/miniprogram-2/pages/home/home.wxml create mode 100644 scr/miniprogram-2/pages/home/home.wxss create mode 100644 scr/miniprogram-2/pages/home/readme create mode 100644 scr/miniprogram-2/pages/order/after-service-detail/api.js create mode 100644 scr/miniprogram-2/pages/order/after-service-detail/index.js create mode 100644 scr/miniprogram-2/pages/order/after-service-detail/index.json create mode 100644 scr/miniprogram-2/pages/order/after-service-detail/index.wxml create mode 100644 scr/miniprogram-2/pages/order/after-service-detail/index.wxss create mode 100644 scr/miniprogram-2/pages/order/after-service-list/api.js create mode 100644 scr/miniprogram-2/pages/order/after-service-list/index.js create mode 100644 scr/miniprogram-2/pages/order/after-service-list/index.json create mode 100644 scr/miniprogram-2/pages/order/after-service-list/index.wxml create mode 100644 scr/miniprogram-2/pages/order/after-service-list/index.wxss create mode 100644 scr/miniprogram-2/pages/order/apply-service/index.js create mode 100644 scr/miniprogram-2/pages/order/apply-service/index.json create mode 100644 scr/miniprogram-2/pages/order/apply-service/index.wxml create mode 100644 scr/miniprogram-2/pages/order/apply-service/index.wxss create mode 100644 scr/miniprogram-2/pages/order/components/after-service-button-bar/index.js create mode 100644 scr/miniprogram-2/pages/order/components/after-service-button-bar/index.json create mode 100644 scr/miniprogram-2/pages/order/components/after-service-button-bar/index.wxml create mode 100644 scr/miniprogram-2/pages/order/components/after-service-button-bar/index.wxss create mode 100644 scr/miniprogram-2/pages/order/components/customer-service/index.js create mode 100644 scr/miniprogram-2/pages/order/components/customer-service/index.json create mode 100644 scr/miniprogram-2/pages/order/components/customer-service/index.wxml create mode 100644 scr/miniprogram-2/pages/order/components/customer-service/index.wxss create mode 100644 scr/miniprogram-2/pages/order/components/goods-card/index.js create mode 100644 scr/miniprogram-2/pages/order/components/goods-card/index.json create mode 100644 scr/miniprogram-2/pages/order/components/goods-card/index.wxml create mode 100644 scr/miniprogram-2/pages/order/components/goods-card/index.wxss create mode 100644 scr/miniprogram-2/pages/order/components/noGoods/noGoods.js create mode 100644 scr/miniprogram-2/pages/order/components/noGoods/noGoods.json create mode 100644 scr/miniprogram-2/pages/order/components/noGoods/noGoods.wxml create mode 100644 scr/miniprogram-2/pages/order/components/noGoods/noGoods.wxss create mode 100644 scr/miniprogram-2/pages/order/components/order-button-bar/index.js create mode 100644 scr/miniprogram-2/pages/order/components/order-button-bar/index.json create mode 100644 scr/miniprogram-2/pages/order/components/order-button-bar/index.wxml create mode 100644 scr/miniprogram-2/pages/order/components/order-button-bar/index.wxss create mode 100644 scr/miniprogram-2/pages/order/components/order-card/index.js create mode 100644 scr/miniprogram-2/pages/order/components/order-card/index.json create mode 100644 scr/miniprogram-2/pages/order/components/order-card/index.wxml create mode 100644 scr/miniprogram-2/pages/order/components/order-card/index.wxss create mode 100644 scr/miniprogram-2/pages/order/components/order-goods-card/index.js create mode 100644 scr/miniprogram-2/pages/order/components/order-goods-card/index.json create mode 100644 scr/miniprogram-2/pages/order/components/order-goods-card/index.wxml create mode 100644 scr/miniprogram-2/pages/order/components/reason-sheet/index.js create mode 100644 scr/miniprogram-2/pages/order/components/reason-sheet/index.json create mode 100644 scr/miniprogram-2/pages/order/components/reason-sheet/index.wxml create mode 100644 scr/miniprogram-2/pages/order/components/reason-sheet/index.wxss create mode 100644 scr/miniprogram-2/pages/order/components/reason-sheet/reasonSheet.js create mode 100644 scr/miniprogram-2/pages/order/components/selectCoupons/mock.js create mode 100644 scr/miniprogram-2/pages/order/components/selectCoupons/selectCoupon.wxs create mode 100644 scr/miniprogram-2/pages/order/components/selectCoupons/selectCoupons.js create mode 100644 scr/miniprogram-2/pages/order/components/selectCoupons/selectCoupons.json create mode 100644 scr/miniprogram-2/pages/order/components/selectCoupons/selectCoupons.wxml create mode 100644 scr/miniprogram-2/pages/order/components/selectCoupons/selectCoupons.wxss create mode 100644 scr/miniprogram-2/pages/order/components/specs-goods-card/index.js create mode 100644 scr/miniprogram-2/pages/order/components/specs-goods-card/index.json create mode 100644 scr/miniprogram-2/pages/order/components/specs-goods-card/index.wxml create mode 100644 scr/miniprogram-2/pages/order/components/specs-goods-card/index.wxss create mode 100644 scr/miniprogram-2/pages/order/config.js create mode 100644 scr/miniprogram-2/pages/order/delivery-detail/index.js create mode 100644 scr/miniprogram-2/pages/order/delivery-detail/index.json create mode 100644 scr/miniprogram-2/pages/order/delivery-detail/index.wxml create mode 100644 scr/miniprogram-2/pages/order/delivery-detail/index.wxss create mode 100644 scr/miniprogram-2/pages/order/fill-tracking-no/api.js create mode 100644 scr/miniprogram-2/pages/order/fill-tracking-no/index.js create mode 100644 scr/miniprogram-2/pages/order/fill-tracking-no/index.json create mode 100644 scr/miniprogram-2/pages/order/fill-tracking-no/index.wxml create mode 100644 scr/miniprogram-2/pages/order/fill-tracking-no/index.wxss create mode 100644 scr/miniprogram-2/pages/order/invoice/index.js create mode 100644 scr/miniprogram-2/pages/order/invoice/index.json create mode 100644 scr/miniprogram-2/pages/order/invoice/index.wxml create mode 100644 scr/miniprogram-2/pages/order/invoice/index.wxss create mode 100644 scr/miniprogram-2/pages/order/order-confirm/components/address-card/index.js create mode 100644 scr/miniprogram-2/pages/order/order-confirm/components/address-card/index.json create mode 100644 scr/miniprogram-2/pages/order/order-confirm/components/address-card/index.wxml create mode 100644 scr/miniprogram-2/pages/order/order-confirm/components/address-card/index.wxss create mode 100644 scr/miniprogram-2/pages/order/order-confirm/getNotes.wxs create mode 100644 scr/miniprogram-2/pages/order/order-confirm/handleInvoice.wxs create mode 100644 scr/miniprogram-2/pages/order/order-confirm/index.js create mode 100644 scr/miniprogram-2/pages/order/order-confirm/index.json create mode 100644 scr/miniprogram-2/pages/order/order-confirm/index.wxml create mode 100644 scr/miniprogram-2/pages/order/order-confirm/index.wxss create mode 100644 scr/miniprogram-2/pages/order/order-confirm/order.wxs create mode 100644 scr/miniprogram-2/pages/order/order-confirm/pay.js create mode 100644 scr/miniprogram-2/pages/order/order-detail/index.js create mode 100644 scr/miniprogram-2/pages/order/order-detail/index.json create mode 100644 scr/miniprogram-2/pages/order/order-detail/index.wxml create mode 100644 scr/miniprogram-2/pages/order/order-detail/index.wxss create mode 100644 scr/miniprogram-2/pages/order/order-list/index.js create mode 100644 scr/miniprogram-2/pages/order/order-list/index.json create mode 100644 scr/miniprogram-2/pages/order/order-list/index.wxml create mode 100644 scr/miniprogram-2/pages/order/order-list/index.wxss create mode 100644 scr/miniprogram-2/pages/order/pay-result/index.js create mode 100644 scr/miniprogram-2/pages/order/pay-result/index.json create mode 100644 scr/miniprogram-2/pages/order/pay-result/index.wxml create mode 100644 scr/miniprogram-2/pages/order/pay-result/index.wxss create mode 100644 scr/miniprogram-2/pages/order/receipt/index.js create mode 100644 scr/miniprogram-2/pages/order/receipt/index.json create mode 100644 scr/miniprogram-2/pages/order/receipt/index.wxml create mode 100644 scr/miniprogram-2/pages/order/receipt/index.wxss create mode 100644 scr/miniprogram-2/pages/preferchoice/preferchoice.js create mode 100644 scr/miniprogram-2/pages/preferchoice/preferchoice.json create mode 100644 scr/miniprogram-2/pages/preferchoice/preferchoice.wxml create mode 100644 scr/miniprogram-2/pages/preferchoice/preferchoice.wxss create mode 100644 scr/miniprogram-2/pages/promotion-detail/index.js create mode 100644 scr/miniprogram-2/pages/promotion-detail/index.json create mode 100644 scr/miniprogram-2/pages/promotion-detail/index.wxml create mode 100644 scr/miniprogram-2/pages/promotion-detail/index.wxss create mode 100644 scr/miniprogram-2/pages/turntable/turntable.js create mode 100644 scr/miniprogram-2/pages/turntable/turntable.json create mode 100644 scr/miniprogram-2/pages/turntable/turntable.wxml create mode 100644 scr/miniprogram-2/pages/turntable/turntable.wxss create mode 100644 scr/miniprogram-2/pages/usercenter/address/edit/index.js create mode 100644 scr/miniprogram-2/pages/usercenter/address/edit/index.json create mode 100644 scr/miniprogram-2/pages/usercenter/address/edit/index.wxml create mode 100644 scr/miniprogram-2/pages/usercenter/address/edit/index.wxss create mode 100644 scr/miniprogram-2/pages/usercenter/address/edit/util.js create mode 100644 scr/miniprogram-2/pages/usercenter/address/list/index.js create mode 100644 scr/miniprogram-2/pages/usercenter/address/list/index.json create mode 100644 scr/miniprogram-2/pages/usercenter/address/list/index.wxml create mode 100644 scr/miniprogram-2/pages/usercenter/address/list/index.wxss create mode 100644 scr/miniprogram-2/pages/usercenter/address/list/util.js create mode 100644 scr/miniprogram-2/pages/usercenter/components/area-picker-new/index.js create mode 100644 scr/miniprogram-2/pages/usercenter/components/area-picker-new/index.json create mode 100644 scr/miniprogram-2/pages/usercenter/components/area-picker-new/index.wxml create mode 100644 scr/miniprogram-2/pages/usercenter/components/area-picker-new/index.wxss create mode 100644 scr/miniprogram-2/pages/usercenter/components/order-group/index.js create mode 100644 scr/miniprogram-2/pages/usercenter/components/order-group/index.json create mode 100644 scr/miniprogram-2/pages/usercenter/components/order-group/index.wxml create mode 100644 scr/miniprogram-2/pages/usercenter/components/order-group/index.wxss create mode 100644 scr/miniprogram-2/pages/usercenter/components/t-location/index.js create mode 100644 scr/miniprogram-2/pages/usercenter/components/t-location/index.json create mode 100644 scr/miniprogram-2/pages/usercenter/components/t-location/index.wxml create mode 100644 scr/miniprogram-2/pages/usercenter/components/t-location/index.wxss create mode 100644 scr/miniprogram-2/pages/usercenter/components/ui-address-item/index.js create mode 100644 scr/miniprogram-2/pages/usercenter/components/ui-address-item/index.json create mode 100644 scr/miniprogram-2/pages/usercenter/components/ui-address-item/index.wxml create mode 100644 scr/miniprogram-2/pages/usercenter/components/ui-address-item/index.wxss create mode 100644 scr/miniprogram-2/pages/usercenter/components/ui-select-picker/index.js create mode 100644 scr/miniprogram-2/pages/usercenter/components/ui-select-picker/index.json create mode 100644 scr/miniprogram-2/pages/usercenter/components/ui-select-picker/index.wxml create mode 100644 scr/miniprogram-2/pages/usercenter/components/ui-select-picker/index.wxss create mode 100644 scr/miniprogram-2/pages/usercenter/components/user-center-card/index.js create mode 100644 scr/miniprogram-2/pages/usercenter/components/user-center-card/index.json create mode 100644 scr/miniprogram-2/pages/usercenter/components/user-center-card/index.wxml create mode 100644 scr/miniprogram-2/pages/usercenter/components/user-center-card/index.wxss create mode 100644 scr/miniprogram-2/pages/usercenter/index.js create mode 100644 scr/miniprogram-2/pages/usercenter/index.json create mode 100644 scr/miniprogram-2/pages/usercenter/index.wxml create mode 100644 scr/miniprogram-2/pages/usercenter/index.wxss create mode 100644 scr/miniprogram-2/pages/usercenter/name-edit/index.js create mode 100644 scr/miniprogram-2/pages/usercenter/name-edit/index.json create mode 100644 scr/miniprogram-2/pages/usercenter/name-edit/index.wxml create mode 100644 scr/miniprogram-2/pages/usercenter/name-edit/index.wxss create mode 100644 scr/miniprogram-2/pages/usercenter/person-info/index.js create mode 100644 scr/miniprogram-2/pages/usercenter/person-info/index.json create mode 100644 scr/miniprogram-2/pages/usercenter/person-info/index.wxml create mode 100644 scr/miniprogram-2/pages/usercenter/person-info/index.wxss create mode 100644 scr/miniprogram-2/project.config.json create mode 100644 scr/miniprogram-2/services/_utils/delay.js create mode 100644 scr/miniprogram-2/services/_utils/timeout.js create mode 100644 scr/miniprogram-2/services/activity/fetchActivity.js create mode 100644 scr/miniprogram-2/services/activity/fetchActivityList.js create mode 100644 scr/miniprogram-2/services/address/fetchAddress.js create mode 100644 scr/miniprogram-2/services/cart/cart.js create mode 100644 scr/miniprogram-2/services/comments/fetchComments.js create mode 100644 scr/miniprogram-2/services/comments/fetchCommentsCount.js create mode 100644 scr/miniprogram-2/services/coupon/index.js create mode 100644 scr/miniprogram-2/services/good/comments/fetchCommentDetail.js create mode 100644 scr/miniprogram-2/services/good/featchSearchResult.js create mode 100644 scr/miniprogram-2/services/good/fetchCategoryList.js create mode 100644 scr/miniprogram-2/services/good/fetchGood.js create mode 100644 scr/miniprogram-2/services/good/fetchGoods.js create mode 100644 scr/miniprogram-2/services/good/fetchGoodsDetailsComments.js create mode 100644 scr/miniprogram-2/services/good/fetchGoodsList.js create mode 100644 scr/miniprogram-2/services/good/fetchSearchHistory.js create mode 100644 scr/miniprogram-2/services/home/home.js create mode 100644 scr/miniprogram-2/services/order/applyService.js create mode 100644 scr/miniprogram-2/services/order/orderConfirm.js create mode 100644 scr/miniprogram-2/services/order/orderDetail.js create mode 100644 scr/miniprogram-2/services/order/orderList.js create mode 100644 scr/miniprogram-2/services/order/orderSubmitComment.js create mode 100644 scr/miniprogram-2/services/promotion/detail.js create mode 100644 scr/miniprogram-2/services/usercenter/fetchPerson.js create mode 100644 scr/miniprogram-2/services/usercenter/fetchUsercenter.js create mode 100644 scr/miniprogram-2/sitemap.json create mode 100644 scr/miniprogram-2/style/cart-group.wxss create mode 100644 scr/miniprogram-2/style/debug.log create mode 100644 scr/miniprogram-2/style/global.wxss create mode 100644 scr/miniprogram-2/style/goodsList.wxss create mode 100644 scr/miniprogram-2/style/iconfont.wxss create mode 100644 scr/miniprogram-2/style/theme.wxss create mode 100644 scr/miniprogram-2/utils/addressParse.js create mode 100644 scr/miniprogram-2/utils/getPermission.js create mode 100644 scr/miniprogram-2/utils/mock.js create mode 100644 scr/miniprogram-2/utils/util.js diff --git a/scr/miniprogram-2/.eslintrc.js b/scr/miniprogram-2/.eslintrc.js new file mode 100644 index 0000000..a5a5f75 --- /dev/null +++ b/scr/miniprogram-2/.eslintrc.js @@ -0,0 +1,160 @@ +module.exports = { + env: { + browser: true, + commonjs: true, + es6: true, + }, + parserOptions: { + ecmaVersion: 2020, + // ECMAScript modules 模式 + sourceType: 'module', + }, + extends: ['plugin:prettier/recommended', 'prettier'], + globals: { + wx: true, + App: true, + Page: true, + Component: true, + getApp: true, + getCurrentPages: true, + Behavior: true, + global: true, + __wxConfig: true, + }, + ignorePatterns: ['*.wxs'], + rules: { + 'prettier/prettier': 'warn', + 'no-undef': 'off', + camelcase: ['error', { ignoreDestructuring: true }], + 'class-name-casing': 'off', + 'no-console': ['warn', { allow: ['warn', 'error'] }], + 'no-debugger': 'error', + 'no-unused-expressions': [ + 'error', + { allowShortCircuit: true, allowTernary: true }, + ], + 'no-empty-interface': 'off', + 'no-use-before-define': ['error', { functions: false }], + 'no-useless-constructor': 'error', + 'prefer-const': 'error', + 'prefer-destructuring': [ + 'error', + { + AssignmentExpression: { + array: false, + object: false, + }, + VariableDeclarator: { + array: false, + object: true, + }, + }, + { + enforceForRenamedProperties: false, + }, + ], + 'no-const-assign': 'error', + 'no-new-object': 'error', + 'no-prototype-builtins': 'error', + 'no-array-constructor': 'error', + 'array-callback-return': 'warn', + 'prefer-template': 'error', + 'no-useless-escape': 'error', + 'wrap-iife': ['error', 'outside'], + 'space-before-function-paren': [ + 'warn', + { + anonymous: 'always', + named: 'never', + asyncArrow: 'always', + }, + ], + 'no-param-reassign': [ + 'warn', + { + props: true, + ignorePropertyModificationsFor: [ + 'acc', // for reduce accumulators + 'accumulator', // for reduce accumulators + 'e', // for e.returnvalue + 'ctx', // for Koa routing + 'req', // for Express requests + 'request', // for Express requests + 'res', // for Express responses + 'response', // for Express responses + '$scope', // for Angular 1 scopes + 'staticContext', // for ReactRouter context + 'state', // for Vuex + ], + }, + ], + 'no-confusing-arrow': 'warn', + 'no-dupe-class-members': 'error', + 'no-iterator': 'warn', + 'dot-notation': 'warn', + 'one-var': ['warn', 'never'], + 'no-multi-assign': 'error', + 'no-unused-vars': [ + 'error', + { + args: 'after-used', + ignoreRestSiblings: true, + argsIgnorePattern: '^_.+', + varsIgnorePattern: '^_.+', + }, + ], + eqeqeq: ['warn', 'always'], + 'no-case-declarations': 'error', + 'no-nested-ternary': 'warn', + 'no-unneeded-ternary': 'warn', + 'no-mixed-operators': [ + 'error', + { + groups: [ + ['%', '**'], + ['%', '+'], + ['%', '-'], + ['%', '*'], + ['%', '/'], + ['&', '|', '<<', '>>', '>>>'], + ['==', '!=', '===', '!=='], + ['&&', '||'], + ], + allowSamePrecedence: false, + }, + ], + 'no-else-return': [ + 'warn', + { + allowElseIf: false, + }, + ], + 'no-new-wrappers': 'warn', + indent: [ + 'warn', + 2, + { + SwitchCase: 1, + VariableDeclarator: 1, + outerIIFEBody: 1, + FunctionDeclaration: { + parameters: 1, + body: 1, + }, + FunctionExpression: { + parameters: 1, + body: 1, + }, + CallExpression: { + arguments: 1, + }, + ArrayExpression: 1, + ObjectExpression: 1, + ImportDeclaration: 1, + flatTernaryExpressions: false, + ignoreComments: false, + }, + ], + 'linebreak-style': ['warn', 'unix'], + }, +}; diff --git a/scr/miniprogram-2/.gitignore b/scr/miniprogram-2/.gitignore new file mode 100644 index 0000000..69148d7 --- /dev/null +++ b/scr/miniprogram-2/.gitignore @@ -0,0 +1,15 @@ +node_modules/ +yarn-error.log +miniprogram/ +miniprogram_npm/ +miniprogram_dist/ +.DS_Store +$node_modules/ +.history/ +**/dist +components/**/*.lock +components/**/package-lock.json +package-lock.json +yarn.lock +project.private.config.json +.eslintcache \ No newline at end of file diff --git a/scr/miniprogram-2/.npmrc b/scr/miniprogram-2/.npmrc new file mode 100644 index 0000000..21b91a6 --- /dev/null +++ b/scr/miniprogram-2/.npmrc @@ -0,0 +1,9 @@ +# 去除注释可以使用代理进行安装 +# proxy=http://127.0.0.1:1080 +# https_proxy=http://127.0.0.1:1080 + +# 去除注释可以使用淘宝源 +# registry=https://registry.npm.taobao.org + +# 去除注释可以使用腾讯源 +#registry=http://mirrors.tencent.com/npm/ diff --git a/scr/miniprogram-2/.prettierignore b/scr/miniprogram-2/.prettierignore new file mode 100644 index 0000000..9ff2448 --- /dev/null +++ b/scr/miniprogram-2/.prettierignore @@ -0,0 +1,3 @@ +miniprogram_npm +package.json +project.config.json \ No newline at end of file diff --git a/scr/miniprogram-2/.prettierrc b/scr/miniprogram-2/.prettierrc new file mode 100644 index 0000000..e9a6a97 --- /dev/null +++ b/scr/miniprogram-2/.prettierrc @@ -0,0 +1,11 @@ +{ + "useTabs": false, + "printWidth": 80, + "tabWidth": 2, + "singleQuote": true, + "trailingComma": "all", + "jsxBracketSameLine": false, + "noSemi": true, + "rcVerbose": true, + "endOfLine": "auto" +} \ No newline at end of file diff --git a/scr/miniprogram-2/.vscode/settings.json b/scr/miniprogram-2/.vscode/settings.json new file mode 100644 index 0000000..87287f6 --- /dev/null +++ b/scr/miniprogram-2/.vscode/settings.json @@ -0,0 +1,40 @@ +{ + "editor.defaultFormatter": "esbenp.prettier-vscode", + "eslint.enable": true, + "editor.formatOnSave": true, + "editor.codeActionsOnSave": { + "source.fixAll.tslint": true, + "source.fixAll.eslint": true + }, + "[javascript]": { + "editor.formatOnSave": true, + "editor.defaultFormatter": "HookyQR.beautify" + }, + "[json]": { + "editor.defaultFormatter": "vscode.json-language-features" + }, + "[wxss]": { + "editor.defaultFormatter": "HookyQR.beautify" + }, + "wxmlConfig.onSaveFormat": true, + "wxmlConfig.format": { + "brace_style": "collapse", + "indent_inner_html": true, + "indent_scripts": "keep", + "indent_size": 2, + "indent_char": " ", + "unformatted": "['wxs']", + "disable_automatic_closing_labels": false, + "preserve_newlines": true, + "wrap_attributes": "force-expand-multiline", + "wrap_attributes_count": 4, + "wrap_attributes_indent_size": 2 + }, + "editor.tabSize": 2, + "[wxml]": { + "editor.defaultFormatter": "wechat.miniprogram.wxml-language-features" + }, + "[css]": { + "editor.defaultFormatter": "HookyQR.beautify" + } +} diff --git a/scr/miniprogram-2/LICENSE b/scr/miniprogram-2/LICENSE new file mode 100644 index 0000000..789cbde --- /dev/null +++ b/scr/miniprogram-2/LICENSE @@ -0,0 +1,9 @@ +MIT License + +Copyright (c) 2021-present TDesign + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/scr/miniprogram-2/README.md b/scr/miniprogram-2/README.md new file mode 100644 index 0000000..eff8f18 --- /dev/null +++ b/scr/miniprogram-2/README.md @@ -0,0 +1,133 @@ +

+ + TDesign Logo + +

+ +

+ + License + + + License + + + License + + + Version + + + Downloads + +

+ +# TDesign 零售行业模版示例小程序 + +TDesign 零售模版示例小程序采用 [TDesign 企业级设计体系小程序解决方案](https://tdesign.tencent.com/miniprogram/overview) 进行搭建,依赖 [TDesign 微信小程序组件库](https://github.com/Tencent/tdesign-miniprogram),涵盖完整的基本零售场景需求。 + +## :high_brightness: 预览 + +

请使用微信扫描以下二维码:

+ + 模版小程序二维码 + +## :pushpin: 项目介绍 + +### 1. 业务介绍 + +零售行业模版小程序是个经典的单店版电商小程序,涵盖了电商的黄金链路流程,从商品->购物车->结算->订单等。小程序总共包含 28 个完整的页面,涵盖首页,商品详情页,个人中心,售后流程等基础页面。采用 mock 数据进行展示,提供了完整的零售商品展示、交易与售后流程。页面详情: + +模版小程序页面详情 + + + +主要页面截图如下: + +

+ example-home + example-sort + example-cart + example-user-center + example-goods-detail + example-pay + example-order + example-order-detail +

+ + + +### 2. 项目构成 + +零售行业模版小程序采用基础的 JavaScript + WXSS + ESLint 进行构建,降低了使用门槛。 + +项目目录结构如下: + +``` +|-- tdesign-miniprogram-starter + |-- README.md + |-- app.js + |-- app.json + |-- app.wxss + |-- components // 公共组件库 + |-- config // 基础配置 + |-- custom-tab-bar // 自定义 tabbar + |-- model // mock 数据 + |-- pages + | |-- cart // 购物车相关页面 + | |-- coupon // 优惠券相关页面 + | |-- goods // 商品相关页面 + | |-- home // 首页 + | |-- order // 订单售后相关页面 + | |-- promotion-detail // 营销活动页面 + | |-- usercenter // 个人中心及收货地址相关页面 + |-- services // 请求接口 + |-- style // 公共样式与iconfont + |-- utils // 工具库 +``` + +### 3. 数据模拟 + +零售小程序采用真实的接口数据,模拟后端返回逻辑,在小程序展示完整的购物场景与购物体验逻辑。 + +### 4. 添加新页面 + +1. 在 `pages `目录下创建对应的页面文件夹 +2. 在 `app.json` 文件中的 ` "pages"` 数组中加上页面路径 +3. [可选] 在 `project.config.json` 文件的 `"miniprogram-list"` 下添加页面配置 + +## :hammer: 构建运行 + +1. `npm install` +2. 小程序开发工具中引入工程 +3. 构建 npm + +## :art: 代码风格控制 + +`eslint` `prettier` + +## :iphone: 基础库版本 + +最低基础库版本`^2.6.5` + +## :dart: 反馈&合作 + +本开源项目是由[腾讯云Mall团队](https://ym.qq.com/)核心贡献。项目也在[github](https://github.com/Tencent/tdesign-miniprogram-starter-retail)上做了开源,有任何问题或者建议都欢迎在issue上留言反馈, 或者加入TD小程序开发者群进行反馈:star2::star2::star2: + +模版小程序页面详情 + +[云Mall](https://ym.qq.com/)是基于微信小程序的电商SaaS产品,致力于提供全面、可靠的小程序商城经营服务,助力商家成功。支持标准化和定开类型商家入驻。合作洽谈可微信咨询联系`lixingdecai`。 + +模版小程序页面详情 + + +## :link: TDesign 其他技术栈实现 + +- 移动端 小程序 实现:[mobile-miniprogram](https://github.com/Tencent/tdesign-miniprogram) +- 桌面端 Vue 2 实现:[web-vue](https://github.com/Tencent/tdesign-vue) +- 桌面端 Vue 3 实现:[web-vue-next](https://github.com/Tencent/tdesign-vue-next) +- 桌面端 React 实现:[web-react](https://github.com/Tencent/tdesign-react) + +## :page_with_curl: 开源协议 + +TDesign 遵循 [MIT 协议](https://github.com/Tencent/tdesign-miniprogram-starter-retail/LICENSE)。 diff --git a/scr/miniprogram-2/app.js b/scr/miniprogram-2/app.js new file mode 100644 index 0000000..e4bc139 --- /dev/null +++ b/scr/miniprogram-2/app.js @@ -0,0 +1,8 @@ +import updateManager from './common/updateManager'; + +App({ + onLaunch: function () {}, + onShow: function () { + updateManager(); + }, +}); diff --git a/scr/miniprogram-2/app.json b/scr/miniprogram-2/app.json new file mode 100644 index 0000000..66aa468 --- /dev/null +++ b/scr/miniprogram-2/app.json @@ -0,0 +1,77 @@ +{ + "pages": [ + "pages/home/home", + "pages/usercenter/index", + "pages/usercenter/person-info/index", + "pages/usercenter/address/list/index", + "pages/usercenter/address/edit/index", + "pages/goods/list/index", + "pages/goods/details/index", + "pages/goods/category/index", + "pages/goods/search/index", + "pages/goods/result/index", + "pages/cart/index", + "pages/order/order-confirm/index", + "pages/order/receipt/index", + "pages/order/pay-result/index", + "pages/order/order-list/index", + "pages/order/order-detail/index", + "pages/goods/comments/index", + "pages/order/apply-service/index", + "pages/order/after-service-list/index", + "pages/order/after-service-detail/index", + "pages/goods/comments/create/index", + "pages/coupon/coupon-list/index", + "pages/coupon/coupon-detail/index", + "pages/coupon/coupon-activity-goods/index", + "pages/promotion-detail/index", + "pages/order/fill-tracking-no/index", + "pages/order/delivery-detail/index", + "pages/order/invoice/index", + "pages/usercenter/name-edit/index", + "pages/preferchoice/preferchoice", + "pages/forum/forum", + "pages/turntable/turntable" + ], + "tabBar": { + "custom": true, + "color": "#666666", + "selectedColor": "#FF5F15", + "backgroundColor": "#ffffff", + "borderStyle": "black", + "list": [ + { + "pagePath": "pages/home/home", + "text": "首页" + }, + { + "pagePath": "pages/forum/forum", + "text": "论坛", + "iconPath": "/images/forum.png", + "selectedIconPath": "/images/forum.png" + }, + { + "pagePath": "pages/cart/index", + "text": "购物车" + }, + { + "pagePath": "pages/usercenter/index", + "text": "我的" + } + ] + }, + "lazyCodeLoading": "requiredComponents", + "usingComponents": {}, + "window": { + "backgroundTextStyle": "light", + "navigationBarBackgroundColor": "#2B4B6B", + "navigationBarTitleText": "节时不节食", + "navigationBarTextStyle": "white" + }, + "sitemapLocation": "sitemap.json", + "permission": { + "scope.userLocation": { + "desc": "你的位置信息将用于小程序位置接口的效果展示" + } + } +} \ No newline at end of file diff --git a/scr/miniprogram-2/app.wxss b/scr/miniprogram-2/app.wxss new file mode 100644 index 0000000..9ff2554 --- /dev/null +++ b/scr/miniprogram-2/app.wxss @@ -0,0 +1,3 @@ +@import 'style/iconfont.wxss'; + +@import 'style/theme.wxss'; \ No newline at end of file diff --git a/scr/miniprogram-2/common/updateManager.js b/scr/miniprogram-2/common/updateManager.js new file mode 100644 index 0000000..c45de6d --- /dev/null +++ b/scr/miniprogram-2/common/updateManager.js @@ -0,0 +1,29 @@ +export default () => { + if (!wx.canIUse('getUpdateManager')) { + return; + } + + const updateManager = wx.getUpdateManager(); + + updateManager.onCheckForUpdate(function (res) { + // 请求完新版本信息的回调 + console.log('版本信息', res); + }); + + updateManager.onUpdateReady(function () { + wx.showModal({ + title: '更新提示', + content: '新版本已经准备好,是否重启应用?', + success(res) { + if (res.confirm) { + // 新的版本已经下载好,调用 applyUpdate 应用新版本并重启 + updateManager.applyUpdate(); + } + }, + }); + }); + + updateManager.onUpdateFailed(function () { + // 新版本下载失败 + }); +}; diff --git a/scr/miniprogram-2/components/filter-popup/index.js b/scr/miniprogram-2/components/filter-popup/index.js new file mode 100644 index 0000000..14c69fd --- /dev/null +++ b/scr/miniprogram-2/components/filter-popup/index.js @@ -0,0 +1,36 @@ +Component({ + externalClasses: ['wr-class'], + + options: { + multipleSlots: true, + }, + + properties: { + show: { + type: Boolean, + observer(show) { + this.setData({ visible: show }); + }, + }, + closeBtn: { + type: Boolean, + value: false, + }, + }, + + data: { visible: false }, + + methods: { + reset() { + this.triggerEvent('reset'); + }, + confirm() { + this.triggerEvent('confirm'); + }, + close() { + this.triggerEvent('showFilterPopupClose'); + + this.setData({ visible: false }); + }, + }, +}); diff --git a/scr/miniprogram-2/components/filter-popup/index.json b/scr/miniprogram-2/components/filter-popup/index.json new file mode 100644 index 0000000..f5d3702 --- /dev/null +++ b/scr/miniprogram-2/components/filter-popup/index.json @@ -0,0 +1,6 @@ +{ + "component": true, + "usingComponents": { + "t-popup": "tdesign-miniprogram/popup/popup" + } +} \ No newline at end of file diff --git a/scr/miniprogram-2/components/filter-popup/index.wxml b/scr/miniprogram-2/components/filter-popup/index.wxml new file mode 100644 index 0000000..2932624 --- /dev/null +++ b/scr/miniprogram-2/components/filter-popup/index.wxml @@ -0,0 +1,18 @@ + + + + + 重置 + + 确定 + + + + + diff --git a/scr/miniprogram-2/components/filter-popup/index.wxss b/scr/miniprogram-2/components/filter-popup/index.wxss new file mode 100644 index 0000000..a206a82 --- /dev/null +++ b/scr/miniprogram-2/components/filter-popup/index.wxss @@ -0,0 +1,39 @@ +.content .filter-btns-wrap { + width: 100%; + position: absolute; + bottom: calc(20rpx + env(safe-area-inset-bottom)); + display: flex; + flex-direction: row; + border-radius: 10rpx 0 0 10rpx; + padding: 16rpx 32rpx; + border-top: 1rpx solid #e5e5e5; + box-sizing: border-box; +} + +.filter-btn { + flex: 1; + display: flex; + justify-content: center; + align-items: center; + font-size: 28rpx; + font-weight: 500; + height: 80rpx; +} + +.btn-reset { + color: #fa4126; + background: rgba(255, 255, 255, 1); + position: relative; + border: 1rpx solid #fa4126; + border-radius: 84rpx 0 0 84rpx; +} + +.btn-confirm { + border-radius: 0 84rpx 84rpx 0; + border: 1rpx solid #fa4126; +} + +.btn-confirm { + color: #fff; + background: #fa4126; +} diff --git a/scr/miniprogram-2/components/filter/index.js b/scr/miniprogram-2/components/filter/index.js new file mode 100644 index 0000000..dc99b95 --- /dev/null +++ b/scr/miniprogram-2/components/filter/index.js @@ -0,0 +1,84 @@ +Component({ + externalClasses: ['wr-class'], + + options: { + multipleSlots: true, + }, + + properties: { + overall: { + type: Number, + value: 1, + observer(overall) { + this.setData({ + overall, + }); + }, + }, + layout: { + type: Number, + value: 1, + observer(layout) { + this.setData({ + layout, + }); + }, + }, + sorts: { + type: String, + value: '', + observer(sorts) { + this.setData({ + sorts, + }); + }, + }, + color: { + type: String, + value: '#FA550F', + }, + }, + + data: { + layout: 1, + overall: 1, + sorts: '', + }, + + methods: { + onChangeShowAction() { + const { layout } = this.data; + const nextLayout = layout === 1 ? 0 : 1; + this.triggerEvent('change', { ...this.properties, layout: nextLayout }); + }, + + handlePriseSort() { + const { sorts } = this.data; + this.triggerEvent('change', { + ...this.properties, + overall: 0, + sorts: sorts === 'desc' ? 'asc' : 'desc', + }); + }, + + open() { + this.triggerEvent('showFilterPopup', { + show: true, + }); + }, + + onOverallAction() { + const { overall } = this.data; + const nextOverall = overall === 1 ? 0 : 1; + const nextData = { + sorts: '', + prices: [], + }; + this.triggerEvent('change', { + ...this.properties, + ...nextData, + overall: nextOverall, + }); + }, + }, +}); diff --git a/scr/miniprogram-2/components/filter/index.json b/scr/miniprogram-2/components/filter/index.json new file mode 100644 index 0000000..7464ae6 --- /dev/null +++ b/scr/miniprogram-2/components/filter/index.json @@ -0,0 +1,6 @@ +{ + "component": true, + "usingComponents": { + "t-icon": "tdesign-miniprogram/icon/icon" + } +} \ No newline at end of file diff --git a/scr/miniprogram-2/components/filter/index.wxml b/scr/miniprogram-2/components/filter/index.wxml new file mode 100644 index 0000000..9048bfd --- /dev/null +++ b/scr/miniprogram-2/components/filter/index.wxml @@ -0,0 +1,37 @@ + + + + + 综合 + + + 价格 + + + + + + + 筛选 + + + + + + + diff --git a/scr/miniprogram-2/components/filter/index.wxss b/scr/miniprogram-2/components/filter/index.wxss new file mode 100644 index 0000000..97728f9 --- /dev/null +++ b/scr/miniprogram-2/components/filter/index.wxss @@ -0,0 +1,50 @@ +.filter-wrap { + width: 100%; + height: 88rpx; + display: flex; + justify-content: space-between; + position: relative; + background: #fff; +} + +.filter-right-content { + height: 100%; + flex-basis: 100rpx; + text-align: center; + line-height: 88rpx; +} + +.filter-left-content { + height: 100%; + display: flex; + flex-grow: 2; + flex-flow: row nowrap; + justify-content: space-between; +} + +.filter-left-content .filter-item { + flex: 1; + height: 100%; + display: flex; + align-items: center; + justify-content: center; + font-size: 26rpx; + line-height: 36rpx; + font-weight: 400; + color: rgba(51, 51, 51, 1); +} + +.filter-left-content .filter-item .filter-price { + display: flex; + flex-direction: column; + margin-left: 6rpx; + justify-content: space-between; +} + +.filter-left-content .filter-item .wr-filter { + margin-left: 8rpx; +} + +.filter-left-content .filter-active-item { + color: #fa550f; +} diff --git a/scr/miniprogram-2/components/goods-card/index.js b/scr/miniprogram-2/components/goods-card/index.js new file mode 100644 index 0000000..eb75361 --- /dev/null +++ b/scr/miniprogram-2/components/goods-card/index.js @@ -0,0 +1,141 @@ +Component({ + options: { + addGlobalClass: true, + }, + + properties: { + id: { + type: String, + value: '', + observer(id) { + this.genIndependentID(id); + if (this.properties.thresholds?.length) { + this.createIntersectionObserverHandle(); + } + }, + }, + data: { + type: Object, + observer(data) { + if (!data) { + return; + } + let isValidityLinePrice = true; + if (data.originPrice && data.price && data.originPrice < data.price) { + isValidityLinePrice = false; + } + this.setData({ goods: data, isValidityLinePrice }); + }, + }, + currency: { + type: String, + value: '¥', + }, + + thresholds: { + type: Array, + value: [], + observer(thresholds) { + if (thresholds && thresholds.length) { + this.createIntersectionObserverHandle(); + } else { + this.clearIntersectionObserverHandle(); + } + }, + }, + }, + + data: { + independentID: '', + goods: { id: '' }, + isValidityLinePrice: false, + }, + + lifetimes: { + ready() { + this.init(); + }, + detached() { + this.clear(); + }, + }, + + pageLifeTimes: {}, + + methods: { + clickHandle() { + this.triggerEvent('click', { goods: this.data.goods }); + }, + + clickThumbHandle() { + this.triggerEvent('thumb', { goods: this.data.goods }); + }, + + addCartHandle(e) { + const { id } = e.currentTarget; + const { id: cardID } = e.currentTarget.dataset; + this.triggerEvent('add-cart', { + ...e.detail, + id, + cardID, + goods: this.data.goods, + }); + }, + + genIndependentID(id) { + let independentID; + if (id) { + independentID = id; + } else { + independentID = `goods-card-${~~(Math.random() * 10 ** 8)}`; + } + this.setData({ independentID }); + }, + + init() { + const { thresholds, id } = this.properties; + this.genIndependentID(id); + if (thresholds && thresholds.length) { + this.createIntersectionObserverHandle(); + } + }, + + clear() { + this.clearIntersectionObserverHandle(); + }, + + intersectionObserverContext: null, + + createIntersectionObserverHandle() { + if (this.intersectionObserverContext || !this.data.independentID) { + return; + } + this.intersectionObserverContext = this.createIntersectionObserver({ + thresholds: this.properties.thresholds, + }).relativeToViewport(); + + this.intersectionObserverContext.observe( + `#${this.data.independentID}`, + (res) => { + this.intersectionObserverCB(res); + }, + ); + }, + + intersectionObserverCB() { + this.triggerEvent('ob', { + goods: this.data.goods, + context: this.intersectionObserverContext, + }); + }, + + clearIntersectionObserverHandle() { + if (this.intersectionObserverContext) { + try { + this.intersectionObserverContext.disconnect(); + } catch (e) {} + this.intersectionObserverContext = null; + } + }, + }, +}); diff --git a/scr/miniprogram-2/components/goods-card/index.json b/scr/miniprogram-2/components/goods-card/index.json new file mode 100644 index 0000000..f199647 --- /dev/null +++ b/scr/miniprogram-2/components/goods-card/index.json @@ -0,0 +1,8 @@ +{ + "component": true, + "usingComponents": { + "price": "/components/price/index", + "t-icon": "tdesign-miniprogram/icon/icon", + "t-image": "/components/webp-image/index" + } +} \ No newline at end of file diff --git a/scr/miniprogram-2/components/goods-card/index.wxml b/scr/miniprogram-2/components/goods-card/index.wxml new file mode 100644 index 0000000..1292f65 --- /dev/null +++ b/scr/miniprogram-2/components/goods-card/index.wxml @@ -0,0 +1,63 @@ + + + + + + + + + {{ goods.title }} + + + + {{tag}} + + + + + + + + + + + + diff --git a/scr/miniprogram-2/components/goods-card/index.wxss b/scr/miniprogram-2/components/goods-card/index.wxss new file mode 100644 index 0000000..1326d59 --- /dev/null +++ b/scr/miniprogram-2/components/goods-card/index.wxss @@ -0,0 +1,133 @@ +.goods-card { + box-sizing: border-box; + font-size: 24rpx; + border-radius: 0 0 16rpx 16rpx; + border-bottom: none; +} + +.goods-card__main { + position: relative; + display: flex; + line-height: 1; + padding: 0; + background: transparent; + width: 342rpx; + border-radius: 0 0 16rpx 16rpx; + align-items: center; + justify-content: center; + margin-bottom: 16rpx; + flex-direction: column; +} + +.goods-card__thumb { + flex-shrink: 0; + position: relative; + width: 340rpx; + height: 340rpx; +} + +.goods-card__thumb:empty { + display: none; + margin: 0; +} + +.goods-card__img { + display: block; + width: 100%; + height: 100%; + border-radius: 16rpx 16rpx 0 0; + overflow: hidden; +} + +.goods-card__body { + display: flex; + flex: 1 1 auto; + background: #fff; + border-radius: 0 0 16rpx 16rpx; + padding: 16rpx 24rpx 18rpx; + flex-direction: column; +} + +.goods-card__upper { + display: flex; + flex-direction: column; + overflow: hidden; + flex: 1 1 auto; +} + +.goods-card__title { + flex-shrink: 0; + font-size: 28rpx; + color: #333; + font-weight: 400; + display: -webkit-box; + height: 72rpx; + -webkit-box-orient: vertical; + -webkit-line-clamp: 2; + overflow: hidden; + word-break: break-word; + line-height: 36rpx; +} + +.goods-card__tags { + display: flex; + flex-direction: row; + flex-wrap: wrap; + margin: 8rpx 0 0 0; +} + +.goods-card__tag { + color: #fa4126; + background: transparent; + font-size: 20rpx; + border: 1rpx solid #fa4126; + padding: 0 8rpx; + border-radius: 16rpx; + line-height: 30rpx; + margin: 0 8rpx 8rpx 0; + display: block; + overflow: hidden; + white-space: nowrap; + word-break: keep-all; + text-overflow: ellipsis; +} + +.goods-card__down { + display: flex; + position: relative; + flex-direction: row; + justify-content: flex-start; + align-items: baseline; + line-height: 32rpx; + margin: 8rpx 0 0 0; +} + +.goods-card__origin-price { + white-space: nowrap; + font-weight: 700; + order: 2; + color: #bbbbbb; + font-size: 24rpx; + margin: 0 0 0 8rpx; +} + +.goods-card__add-cart { + order: 3; + margin: auto 0 0 auto; + position: absolute; + bottom: 0; + right: 0; +} + +.spec-for-price { + font-size: 36rpx; + white-space: nowrap; + font-weight: 700; + order: 1; + color: #fa4126; + margin: 0; +} + +.spec-for-symbol { + font-size: 24rpx; +} diff --git a/scr/miniprogram-2/components/goods-list/index.js b/scr/miniprogram-2/components/goods-list/index.js new file mode 100644 index 0000000..5184903 --- /dev/null +++ b/scr/miniprogram-2/components/goods-list/index.js @@ -0,0 +1,62 @@ +Component({ + externalClasses: ['wr-class'], + + properties: { + goodsList: { + type: Array, + value: [], + }, + id: { + type: String, + value: '', + observer: (id) => { + this.genIndependentID(id); + }, + }, + thresholds: { + type: Array, + value: [], + }, + }, + + data: { + independentID: '', + }, + + lifetimes: { + ready() { + this.init(); + }, + }, + + methods: { + onClickGoods(e) { + const { index } = e.currentTarget.dataset; + this.triggerEvent('click', { ...e.detail, index }); + }, + + onAddCart(e) { + const { index } = e.currentTarget.dataset; + this.triggerEvent('addcart', { ...e.detail, index }); + }, + + onClickGoodsThumb(e) { + const { index } = e.currentTarget.dataset; + this.triggerEvent('thumb', { ...e.detail, index }); + }, + + init() { + this.genIndependentID(this.id || ''); + }, + + genIndependentID(id) { + if (id) { + this.setData({ independentID: id }); + } else { + this.setData({ + independentID: `goods-list-${~~(Math.random() * 10 ** 8)}`, + }); + } + }, + }, +}); diff --git a/scr/miniprogram-2/components/goods-list/index.json b/scr/miniprogram-2/components/goods-list/index.json new file mode 100644 index 0000000..bdaa23d --- /dev/null +++ b/scr/miniprogram-2/components/goods-list/index.json @@ -0,0 +1,6 @@ +{ + "component": true, + "usingComponents": { + "goods-card": "/components/goods-card/index" + } +} \ No newline at end of file diff --git a/scr/miniprogram-2/components/goods-list/index.wxml b/scr/miniprogram-2/components/goods-list/index.wxml new file mode 100644 index 0000000..5a9a804 --- /dev/null +++ b/scr/miniprogram-2/components/goods-list/index.wxml @@ -0,0 +1,16 @@ + + + + + + diff --git a/scr/miniprogram-2/components/goods-list/index.wxss b/scr/miniprogram-2/components/goods-list/index.wxss new file mode 100644 index 0000000..7262a4d --- /dev/null +++ b/scr/miniprogram-2/components/goods-list/index.wxss @@ -0,0 +1,7 @@ +.goods-list-wrap { + display: flex; + flex-flow: row wrap; + justify-content: space-between; + padding: 0; + background: #fff; +} diff --git a/scr/miniprogram-2/components/load-more/index.js b/scr/miniprogram-2/components/load-more/index.js new file mode 100644 index 0000000..b71a839 --- /dev/null +++ b/scr/miniprogram-2/components/load-more/index.js @@ -0,0 +1,54 @@ +Component({ + externalClasses: ['wr-class', 'wr-class--no-more'], + + options: { multipleSlots: true }, + + properties: { + status: { + type: Number, + value: 0, + }, + loadingText: { + type: String, + value: '加载中...', + }, + noMoreText: { + type: String, + value: '没有更多了', + }, + failedText: { + type: String, + value: '加载失败,点击重试', + }, + color: { + type: String, + value: '#BBBBBB', + }, + failedColor: { + type: String, + value: '#FA550F', + }, + size: { + type: null, + value: '40rpx', + }, + loadingBackgroundColor: { + type: String, + value: '#F5F5F5', + }, + listIsEmpty: { + type: Boolean, + value: false, + }, + }, + + methods: { + /** 点击处理 */ + tapHandle() { + // 失败重试 + if (this.data.status === 3) { + this.triggerEvent('retry'); + } + }, + }, +}); diff --git a/scr/miniprogram-2/components/load-more/index.json b/scr/miniprogram-2/components/load-more/index.json new file mode 100644 index 0000000..94e107c --- /dev/null +++ b/scr/miniprogram-2/components/load-more/index.json @@ -0,0 +1,7 @@ +{ + "component": true, + "usingComponents": { + "t-loading": "tdesign-miniprogram/loading/loading", + "t-divider": "tdesign-miniprogram/divider/divider" + } +} \ No newline at end of file diff --git a/scr/miniprogram-2/components/load-more/index.wxml b/scr/miniprogram-2/components/load-more/index.wxml new file mode 100644 index 0000000..f698771 --- /dev/null +++ b/scr/miniprogram-2/components/load-more/index.wxml @@ -0,0 +1,30 @@ + + + + + + + + {{noMoreText}} + + + + + + + + + diff --git a/scr/miniprogram-2/components/load-more/index.wxss b/scr/miniprogram-2/components/load-more/index.wxss new file mode 100644 index 0000000..8cbce4e --- /dev/null +++ b/scr/miniprogram-2/components/load-more/index.wxss @@ -0,0 +1,24 @@ +.load-more { + font-size: 24rpx; + height: 100rpx; + display: flex; + flex-direction: column; + justify-content: center; +} + +.load-more .t-class-loading { + display: flex; + justify-content: center; +} + +.load-more .t-class-loading-text { + color: #bbbbbb; +} + +.t-class-divider-content { + margin: 0 10rpx; + color: #bbbbbb; +} +.load-more .t-class-indicator { + color: #b9b9b9 !important; +} diff --git a/scr/miniprogram-2/components/loading-content/index.js b/scr/miniprogram-2/components/loading-content/index.js new file mode 100644 index 0000000..4c6b925 --- /dev/null +++ b/scr/miniprogram-2/components/loading-content/index.js @@ -0,0 +1,23 @@ +Component({ + externalClasses: ['wr-class'], + properties: { + position: { + type: String, + value: 'static', + }, + noMask: Boolean, + type: { + type: String, + value: 'circular', + }, + vertical: Boolean, + size: { + type: String, + value: '50rpx', + }, + backgroundColor: { + type: String, + value: 'rgba(0, 0, 0, .6)', + }, + }, +}); diff --git a/scr/miniprogram-2/components/loading-content/index.json b/scr/miniprogram-2/components/loading-content/index.json new file mode 100644 index 0000000..c08b2ef --- /dev/null +++ b/scr/miniprogram-2/components/loading-content/index.json @@ -0,0 +1,6 @@ +{ + "component": true, + "usingComponents": { + "t-loading": "tdesign-miniprogram/loading/loading" + } +} diff --git a/scr/miniprogram-2/components/loading-content/index.wxml b/scr/miniprogram-2/components/loading-content/index.wxml new file mode 100644 index 0000000..add589c --- /dev/null +++ b/scr/miniprogram-2/components/loading-content/index.wxml @@ -0,0 +1,11 @@ + + + + + + diff --git a/scr/miniprogram-2/components/loading-content/index.wxss b/scr/miniprogram-2/components/loading-content/index.wxss new file mode 100644 index 0000000..d3c112b --- /dev/null +++ b/scr/miniprogram-2/components/loading-content/index.wxss @@ -0,0 +1,23 @@ +.loading-content { + width: 100%; + height: 100%; + background-color: rgba(0, 0, 0, 0.6); + position: relative; +} +.loading-content.absolute { + position: absolute; + z-index: 1; + left: 0; + top: 0; +} +.loading-content.fixed { + position: fixed; + z-index: 1; + left: 0; + top: 0; +} +.loading-content .loading { + width: 100%; + height: 100%; + visibility: visible; +} diff --git a/scr/miniprogram-2/components/price/index.js b/scr/miniprogram-2/components/price/index.js new file mode 100644 index 0000000..c0218f7 --- /dev/null +++ b/scr/miniprogram-2/components/price/index.js @@ -0,0 +1,71 @@ +Component({ + externalClasses: ['wr-class', 'symbol-class', 'decimal-class'], + useStore: [], + properties: { + priceUnit: { + type: String, + value: 'fen', + }, // 价格单位,分 | 元, fen,yuan + price: { + type: null, + value: '', + observer(price) { + this.format(price); + }, + }, // 价格, 以分为单位 + type: { + type: String, + value: '', // + }, // main 粗体, lighter 细体, mini 黑色, del 中划线, delthrough 中划线,包括货币符号 + symbol: { + type: String, + value: '¥', // '¥', + }, // 货币符号,默认是人民币符号¥ + fill: Boolean, // 是否自动补齐两位小数 + decimalSmaller: Boolean, // 小数字号小一点 + lineThroughWidth: { + type: null, + value: '0.12em', + }, // 划线价线条高度 + }, + + data: { + pArr: [], + }, + + methods: { + format(price) { + price = parseFloat(`${price}`); + const pArr = []; + if (!isNaN(price)) { + const isMinus = price < 0; + if (isMinus) { + price = -price; + } + if (this.properties.priceUnit === 'yuan') { + const priceSplit = price.toString().split('.'); + pArr[0] = priceSplit[0]; + pArr[1] = !priceSplit[1] + ? '00' + : priceSplit[1].length === 1 + ? `${priceSplit[1]}0` + : priceSplit[1]; + } else { + price = Math.round(price * 10 ** 8) / 10 ** 8; // 恢复精度丢失 + price = Math.ceil(price); // 向上取整 + pArr[0] = price >= 100 ? `${price}`.slice(0, -2) : '0'; + pArr[1] = `${price + 100}`.slice(-2); + } + if (!this.properties.fill) { + // 如果 fill 为 false, 不显示小数末尾的0 + if (pArr[1] === '00') pArr[1] = ''; + else if (pArr[1][1] === '0') pArr[1] = pArr[1][0]; + } + if (isMinus) { + pArr[0] = `-${pArr[0]}`; + } + } + this.setData({ pArr }); + }, + }, +}); diff --git a/scr/miniprogram-2/components/price/index.json b/scr/miniprogram-2/components/price/index.json new file mode 100644 index 0000000..a89ef4d --- /dev/null +++ b/scr/miniprogram-2/components/price/index.json @@ -0,0 +1,4 @@ +{ + "component": true, + "usingComponents": {} +} diff --git a/scr/miniprogram-2/components/price/index.wxml b/scr/miniprogram-2/components/price/index.wxml new file mode 100644 index 0000000..7f4f9d9 --- /dev/null +++ b/scr/miniprogram-2/components/price/index.wxml @@ -0,0 +1,21 @@ + + var REGEXP = getRegExp('^\d+(\.\d+)?$'); + function addUnit(value) { + if (value == null) { + return ''; + } + return REGEXP.test('' + value) ? value + 'rpx' : value; + } + module.exports = { + addUnit: addUnit + }; + + + + {{symbol}} + + {{pArr[0]}} + .{{pArr[1]}} + + + diff --git a/scr/miniprogram-2/components/price/index.wxss b/scr/miniprogram-2/components/price/index.wxss new file mode 100644 index 0000000..45da266 --- /dev/null +++ b/scr/miniprogram-2/components/price/index.wxss @@ -0,0 +1,66 @@ +:host { + display: inline-block; + display: inline-block; + font-weight: inherit; +} +.inline { + display: inline; + white-space: nowrap; +} +.price { + display: inline; + color: inherit; + font-size: inherit; + text-decoration: inherit; +} + +.lighter { + font-weight: 400; + font-size: 32rpx; +} +.mini { + font-size: 24rpx; + color: #5d5d5d; + font-weight: 400; +} +.del .pprice { + font-size: 32rpx; + color: #9b9b9b; + text-decoration: line-through; + font-weight: 400; +} +.delthrough { + position: relative; +} +.delthrough .line { + position: absolute; + top: 50%; + left: 0; + right: 0; + transform: translateY(-50%); + margin: 0; + background-color: currentColor; +} + +.symbol { + display: inline; + color: inherit; + font-size: inherit; + font-size: 0.8em; +} +.pprice { + display: inline; + margin: 0 0 0 4rpx; +} +.integer { + color: inherit; + font-size: inherit; +} +.decimal { + color: inherit; + font-size: inherit; +} +.decimal.smaller { + font-size: 0.8em; + vertical-align: baseline; +} diff --git a/scr/miniprogram-2/components/swipeout/index.js b/scr/miniprogram-2/components/swipeout/index.js new file mode 100644 index 0000000..3db6b79 --- /dev/null +++ b/scr/miniprogram-2/components/swipeout/index.js @@ -0,0 +1,79 @@ +let ARRAY = []; +Component({ + externalClasses: ['wr-class'], + + options: { + multipleSlots: true, + }, + properties: { + disabled: Boolean, + leftWidth: { + type: Number, + value: 0, + }, + rightWidth: { + type: Number, + value: 0, + }, + asyncClose: Boolean, + }, + attached() { + ARRAY.push(this); + }, + + detached() { + ARRAY = ARRAY.filter((item) => item !== this); + }, + + /** + * Component initial data + */ + data: { + wrapperStyle: '', + asyncClose: false, + closed: true, + }, + + /** + * Component methods + */ + methods: { + open(position) { + this.setData({ closed: false }); + this.triggerEvent('close', { + position, + instance: this, + }); + }, + + close() { + this.setData({ closed: true }); + }, + + closeOther() { + ARRAY.filter((item) => item !== this).forEach((item) => item.close()); + }, + + noop() { + return; + }, + + onClick(event) { + const { key: position = 'outside' } = event.currentTarget.dataset; + this.triggerEvent('click', position); + + if (this.data.closed) { + return; + } + + if (this.data.asyncClose) { + this.triggerEvent('close', { + position, + instance: this, + }); + } else { + this.close(); + } + }, + }, +}); diff --git a/scr/miniprogram-2/components/swipeout/index.json b/scr/miniprogram-2/components/swipeout/index.json new file mode 100644 index 0000000..a89ef4d --- /dev/null +++ b/scr/miniprogram-2/components/swipeout/index.json @@ -0,0 +1,4 @@ +{ + "component": true, + "usingComponents": {} +} diff --git a/scr/miniprogram-2/components/swipeout/index.wxml b/scr/miniprogram-2/components/swipeout/index.wxml new file mode 100644 index 0000000..353bf72 --- /dev/null +++ b/scr/miniprogram-2/components/swipeout/index.wxml @@ -0,0 +1,174 @@ + + var THRESHOLD = 0.3; + var MIN_DISTANCE = 10; + var owner; + var state; + + var getState = function(ownerInstance) { + owner = ownerInstance; + state = owner.getState(); + state.leftWidth = state.leftWidth || 0; + state.rightWidth = state.rightWidth || 0; + state.offset = state.offset || 0; + state.startOffset = state.startOffset || 0; + }; + + var initRightWidth = function(newVal, oldVal, ownerInstance) { + getState(ownerInstance); + state.rightWidth = newVal; + if (state.offset < 0) { + swipeMove(-state.rightWidth); + } + }; + + var initLeftWidth = function(newVal, oldVal, ownerInstance) { + getState(ownerInstance); + state.leftWidth = newVal; + if (state.offset > 0) { + swipeMove(state.leftWidth); + } + } + + var resetTouchStatus = function() { + state.direction = ''; + state.deltaX = 0; + state.deltaY = 0; + state.offsetX = 0; + state.offsetY = 0; + }; + + var touchMove = function(event) { + var touchPoint = event.touches[0]; + state.deltaX = touchPoint.clientX - state.startX; + state.deltaY = touchPoint.clientY - state.startY; + state.offsetX = Math.abs(state.deltaX); + state.offsetY = Math.abs(state.deltaY); + state.direction = state.direction || getDirection(state.offsetX, state.offsetY); + }; + + var getDirection = function(x, y) { + if (x > y && x > MIN_DISTANCE) { + return 'horizontal'; + } + if (y > x && y > MIN_DISTANCE) { + return 'vertical'; + } + return ''; + }; + + var range = function(num, min, max) { + return Math.min(Math.max(num, min), max); + }; + + var swipeMove = function(_offset = 0) { + state.offset = range( + _offset, + -state.rightWidth, + +state.leftWidth, + ); + + var transform = 'translate3d(' + state.offset + 'px, 0, 0)'; + var transition = state.dragging + ? 'none' + : 'transform .6s cubic-bezier(0.18, 0.89, 0.32, 1)'; + owner.selectComponent('#wrapper').setStyle({ + '-webkit-transform': transform, + '-webkit-transition': transition, + 'transform': transform, + 'transition': transition + }); + }; + + var close = function() { + swipeMove(0); + }; + + var onCloseChange = function(newVal, oldVal, ownerInstance) { + getState(ownerInstance); + if (newVal === oldVal) return; + if (newVal) { + close(); + } + }; + + var touchStart = function(event) { + resetTouchStatus(); + state.startOffset = state.offset; + var touchPoint = event.touches[0]; + state.startX = touchPoint.clientX; + state.startY = touchPoint.clientY; + owner.callMethod('closeOther'); + }; + + var startDrag = function(event, ownerInstance) { + getState(ownerInstance); + touchStart(event); + }; + + var onDrag = function(event, ownerInstance) { + getState(ownerInstance); + touchMove(event); + if (state.direction !== 'horizontal') { + return; + } + state.dragging = true; + swipeMove(state.startOffset + state.deltaX); + }; + + var open = function(position) { + var _offset = position === 'left' ? +state.leftWidth : -state.rightWidth; + owner.callMethod('open', { position: position }); + swipeMove(_offset); + }; + + var endDrag = function(event, ownerInstance) { + getState(ownerInstance); + state.dragging = false; + // 左/右侧有可滑动区域,且当前不是已open状态,且滑动幅度超过阈值时open左/右侧(滚动到该侧的最边上) + if (+state.rightWidth > 0 && -state.startOffset < +state.rightWidth && -state.offset > +state.rightWidth * THRESHOLD) { + open('right'); + } else if (+state.leftWidth > 0 && state.startOffset < +state.leftWidth && state.offset > +state.leftWidth * THRESHOLD) { + open('left'); + } else { + // 仅在有发生侧滑的情况下自动关闭(由js控制是否异步关闭) + if (state.startOffset !== state.offset) { + close(); + } + } + }; + + module.exports = { + initLeftWidth: initLeftWidth, + initRightWidth: initRightWidth, + startDrag: startDrag, + onDrag: onDrag, + endDrag: endDrag, + onCloseChange: onCloseChange + }; + + + + + + + + + + + + + diff --git a/scr/miniprogram-2/components/swipeout/index.wxss b/scr/miniprogram-2/components/swipeout/index.wxss new file mode 100644 index 0000000..1aa2943 --- /dev/null +++ b/scr/miniprogram-2/components/swipeout/index.wxss @@ -0,0 +1,18 @@ +.wr-swipeout { + position: relative; + overflow: hidden; +} +.wr-swipeout__left, +.wr-swipeout__right { + position: absolute; + top: 0; + height: 100%; +} +.wr-swipeout__left { + left: 0; + transform: translate3d(-100%, 0, 0); +} +.wr-swipeout__right { + right: 0; + transform: translate3d(100%, 0, 0); +} diff --git a/scr/miniprogram-2/components/webp-image/index.js b/scr/miniprogram-2/components/webp-image/index.js new file mode 100644 index 0000000..1706049 --- /dev/null +++ b/scr/miniprogram-2/components/webp-image/index.js @@ -0,0 +1,86 @@ +/* + * @Author: rileycai + * @Date: 2022-03-14 14:21:26 + * @LastEditTime: 2022-03-14 15:23:04 + * @LastEditors: rileycai + * @Description: webp-image组件对t-image包裹了一层,主要实现图片裁剪、webp压缩功能 + * @FilePath: /tdesign-miniprogram-starter/components/webp-image/index.js + */ +const systemInfo = wx.getSystemInfoSync(); +Component({ + externalClasses: ['t-class', 't-class-load'], + properties: { + loadFailed: { + type: String, + value: 'default', + }, + loading: { + type: String, + value: 'default', + }, + src: { + type: String, + value: '', + }, + mode: { + type: String, + value: 'aspectFill', + }, + webp: { + type: Boolean, + value: true, + }, + lazyLoad: { + type: Boolean, + value: false, + }, + showMenuByLongpress: { + type: Boolean, + value: false, + }, + }, + data: { + thumbHeight: 375, + thumbWidth: 375, + systemInfo, + }, + lifetimes: { + ready() { + const { mode } = this.properties; + // 获取容器的真实宽高,设置图片的裁剪宽度 + this.getRect('.J-image').then((res) => { + if (res) { + const { width, height } = res; + this.setData( + mode === 'heightFix' + ? { + thumbHeight: this.px2rpx(height) || 375, + } + : { + thumbWidth: this.px2rpx(width) || 375, + }, + ); + } + }); + }, + }, + methods: { + px2rpx(px) { + return (750 / (systemInfo.screenWidth || 375)) * px; + }, + getRect(selector) { + return new Promise((resolve) => { + if (!this.selectorQuery) { + this.selectorQuery = this.createSelectorQuery(); + } + this.selectorQuery.select(selector).boundingClientRect(resolve).exec(); + }); + }, + onLoad(e) { + this.triggerEvent('load', e.detail); + }, + onError(e) { + this.triggerEvent('error', e.detail); + }, + }, +}); diff --git a/scr/miniprogram-2/components/webp-image/index.json b/scr/miniprogram-2/components/webp-image/index.json new file mode 100644 index 0000000..6ffda42 --- /dev/null +++ b/scr/miniprogram-2/components/webp-image/index.json @@ -0,0 +1,6 @@ +{ + "component": true, + "usingComponents": { + "t-image": "tdesign-miniprogram/image/image" + } +} \ No newline at end of file diff --git a/scr/miniprogram-2/components/webp-image/index.wxml b/scr/miniprogram-2/components/webp-image/index.wxml new file mode 100644 index 0000000..b32c199 --- /dev/null +++ b/scr/miniprogram-2/components/webp-image/index.wxml @@ -0,0 +1,14 @@ + + diff --git a/scr/2.txt b/scr/miniprogram-2/components/webp-image/index.wxss similarity index 100% rename from scr/2.txt rename to scr/miniprogram-2/components/webp-image/index.wxss diff --git a/scr/miniprogram-2/components/webp-image/utils.wxs b/scr/miniprogram-2/components/webp-image/utils.wxs new file mode 100644 index 0000000..4f6e5d1 --- /dev/null +++ b/scr/miniprogram-2/components/webp-image/utils.wxs @@ -0,0 +1,140 @@ +var isString = function (value) { + return typeof value === 'string'; +}; + +var isNumber = function (value) { + return typeof value === 'number'; +}; + +var getFileExt = function (src) { + var fileUrl = src.split('?')[0]; + var splitUlr = fileUrl.split('/'); + var filepath = splitUlr[splitUlr.length - 1]; + return filepath.split('.')[1] || 'jpg'; +}; + +function isUrl(url) { + // NOCC:ToolNameCheck(非敏感词) + var urlReg = getRegExp( + '/[(http(s)?)://(www.)?a-zA-Z0-9@:%._+~#=]{2,256}.[a-z]{2,6}\b([-a-zA-Z0-9@:%_+.~#?&//=]*)/', + 'ig', + ); + + return urlReg.test(url); +} + +function rpx2px(rpx, screenWidth) { + // px / systemWidth = rpx / 750 + var result = (rpx * (screenWidth || 375)) / 750; + + return Math.round(result); +} + +function imageMogr(url, options) { + if (!isString(url) || !url) return ''; + + if ( + url.indexOf('qlogo.cn') !== -1 || + url.indexOf('wxfile://') === 0 || + url.indexOf('http://tmp/wx') === 0 || + url.indexOf('imageMogr2') !== -1 + ) { + //qlogo.cn域名或者本地图片不做转换 + return url; + } //强制转https + + if (url.indexOf('http://') === 0) { + url = url.replace('http://', 'https://'); + } else if (url.indexOf('//') === 0) { + url = 'https:' + url; + } + + if (!options) return url; + + var width = Math.ceil(options.width), + height = Math.ceil(options.height), + format = options.format, + _optionsQuality = options.quality, + quality = _optionsQuality === undefined ? 70 : _optionsQuality, + _optionsStrip = options.strip, + strip = _optionsStrip === undefined ? true : _optionsStrip, + crop = options.crop; + var isValidWidth = isNumber(width) && width > 0; + var isValidHeight = isNumber(height) && height > 0; + var imageMogrStr = ''; + var size = ''; + + if (isValidWidth && isValidHeight) { + size = ''.concat(width, 'x').concat(height); + } else if (isValidWidth) { + size = ''.concat(width, 'x'); + } else if (isValidHeight) { + size = 'x'.concat(height); + } + + if (size) { + //缩放或者裁剪 + imageMogrStr += '/'.concat(crop ? 'crop' : 'thumbnail', '/').concat(size); + + if (crop) { + //裁剪目前需求只有以图片中心为基准 + imageMogrStr += '/gravity/center'; + } + } + + if (isNumber(quality)) { + //质量变换 + imageMogrStr += '/quality/'.concat(quality); + } + + if (strip) { + //去除元信息 + imageMogrStr += '/strip'; + } + + var ext = getFileExt(url); + + // gif 图片不做格式转换,否则会损坏动图 + if (ext === 'gif') { + imageMogrStr += '/cgif/1'; + } else if (format) { + //格式转换 + imageMogrStr += '/format/'.concat(format); + } + + if (format === 'jpg' || (!format && (ext === 'jpg' || ext === 'jpeg'))) { + //渐进式 jpg 加载 + imageMogrStr += '/interlace/1'; + } + if (!imageMogrStr) return url; + return '' + .concat(url) + .concat(url.indexOf('?') !== -1 ? '&' : '?', 'imageMogr2') + .concat(imageMogrStr); +} +function getSrc(options) { + if (!options.src) return ''; + + if (options.thumbWidth || options.thumbHeight) { + return imageMogr(options.src, { + width: + options.mode !== 'heightFix' + ? rpx2px(options.thumbWidth, options.systemInfo.screenWidth) * + options.systemInfo.pixelRatio + : null, + height: + options.mode !== 'widthFix' + ? rpx2px(options.thumbHeight, options.systemInfo.screenWidth) * + options.systemInfo.pixelRatio + : null, + format: options.webp ? 'webp' : null, + }); + } + + return ''; +} + +module.exports = { + imageMogr: imageMogr, + getSrc: getSrc, +}; diff --git a/scr/miniprogram-2/config/eslintCheck.js b/scr/miniprogram-2/config/eslintCheck.js new file mode 100644 index 0000000..9294baf --- /dev/null +++ b/scr/miniprogram-2/config/eslintCheck.js @@ -0,0 +1,91 @@ +/* eslint-disable prefer-template */ +/** + * 工程代码pre-commit 检查工具 + * @date 2019.9.4 + * @author 310227663@qq.com + */ +const { exec } = require('child_process'); +const chalk = require('chalk'); +const { CLIEngine } = require('eslint'); +const cli = new CLIEngine({}); +const { log } = console; + +function getErrorLevel(number) { + switch (number) { + case 2: + return 'error'; + case 1: + return 'warn'; + default: + } + return 'undefined'; +} +let pass = 0; +exec( + 'git diff --cached --name-only --diff-filter=ACM | grep -Ei "\\.ts$|\\.js$"', + (error, stdout) => { + if (stdout.length) { + const array = stdout.split('\n'); + array.pop(); + const { results } = cli.executeOnFiles(array); + let errorCount = 0; + let warningCount = 0; + results.forEach((result) => { + errorCount += result.errorCount; + warningCount += result.warningCount; + if (result.messages.length > 0) { + log('\n'); + log(result.filePath); + result.messages.forEach((obj) => { + const level = getErrorLevel(obj.severity); + if (level === 'warn') + log( + ' ' + + obj.line + + ':' + + obj.column + + '\t ' + + chalk.yellow(level) + + ' \0 ' + + obj.message + + '\t\t' + + chalk.grey(obj.ruleId) + + '', + ); + if (level === 'error') + log( + ' ' + + obj.line + + ':' + + obj.column + + '\t ' + + chalk.red.bold(level) + + ' \0 ' + + obj.message + + '\t\t ' + + chalk.grey(obj.ruleId) + + '', + ); + if (level === 'error') pass = 1; + }); + } + }); + if (warningCount > 0 || errorCount > 0) { + log( + '\n' + + chalk.bgRed.bold(errorCount + warningCount + ' problems') + + ' (' + + chalk.red.bold(errorCount) + + ' errors, ' + + chalk.yellow(warningCount) + + ' warnings) \0', + ); + } + !pass && log(chalk.green.bold('~~ Done: 代码检验通过,提交成功 ~~')); + process.exit(pass); + } + if (error !== null) { + log(`exec error: ${error}`); + } + }, +); diff --git a/scr/miniprogram-2/config/index.js b/scr/miniprogram-2/config/index.js new file mode 100644 index 0000000..59c6692 --- /dev/null +++ b/scr/miniprogram-2/config/index.js @@ -0,0 +1,20437 @@ +export const config = { + /** 是否使用mock代替api返回 */ + useMock: true, +}; + +export const cdnBase = + 'https://we-retail-static-1300977798.cos.ap-guangzhou.myqcloud.com/retail-mp'; + +export const areaData = [ + { + name: '北京市', + code: '110000', + children: [ + { + name: '北京市', + code: '110100', + children: [ + { + name: '东城区', + code: '110101', + children: null, + }, + { + name: '西城区', + code: '110102', + children: null, + }, + { + name: '朝阳区', + code: '110105', + children: null, + }, + { + name: '丰台区', + code: '110106', + children: null, + }, + { + name: '石景山区', + code: '110107', + children: null, + }, + { + name: '海淀区', + code: '110108', + children: null, + }, + { + name: '门头沟区', + code: '110109', + children: null, + }, + { + name: '房山区', + code: '110111', + children: null, + }, + { + name: '通州区', + code: '110112', + children: null, + }, + { + name: '顺义区', + code: '110113', + children: null, + }, + { + name: '昌平区', + code: '110114', + children: null, + }, + { + name: '大兴区', + code: '110115', + children: null, + }, + { + name: '怀柔区', + code: '110116', + children: null, + }, + { + name: '平谷区', + code: '110117', + children: null, + }, + { + name: '密云区', + code: '110118', + children: null, + }, + { + name: '延庆区', + code: '110119', + children: null, + }, + ], + }, + ], + }, + { + name: '天津市', + code: '120000', + children: [ + { + name: '天津市', + code: '120100', + children: [ + { + name: '和平区', + code: '120101', + children: null, + }, + { + name: '河东区', + code: '120102', + children: null, + }, + { + name: '河西区', + code: '120103', + children: null, + }, + { + name: '南开区', + code: '120104', + children: null, + }, + { + name: '河北区', + code: '120105', + children: null, + }, + { + name: '红桥区', + code: '120106', + children: null, + }, + { + name: '东丽区', + code: '120110', + children: null, + }, + { + name: '西青区', + code: '120111', + children: null, + }, + { + name: '津南区', + code: '120112', + children: null, + }, + { + name: '北辰区', + code: '120113', + children: null, + }, + { + name: '武清区', + code: '120114', + children: null, + }, + { + name: '宝坻区', + code: '120115', + children: null, + }, + { + name: '滨海新区', + code: '120116', + children: null, + }, + { + name: '宁河区', + code: '120117', + children: null, + }, + { + name: '静海区', + code: '120118', + children: null, + }, + { + name: '蓟州区', + code: '120119', + children: null, + }, + ], + }, + ], + }, + { + name: '河北省', + code: '130000', + children: [ + { + name: '石家庄市', + code: '130100', + children: [ + { + name: '长安区', + code: '130102', + children: null, + }, + { + name: '桥西区', + code: '130104', + children: null, + }, + { + name: '新华区', + code: '130105', + children: null, + }, + { + name: '井陉矿区', + code: '130107', + children: null, + }, + { + name: '裕华区', + code: '130108', + children: null, + }, + { + name: '藁城区', + code: '130109', + children: null, + }, + { + name: '鹿泉区', + code: '130110', + children: null, + }, + { + name: '栾城区', + code: '130111', + children: null, + }, + { + name: '井陉县', + code: '130121', + children: null, + }, + { + name: '正定县', + code: '130123', + children: null, + }, + { + name: '行唐县', + code: '130125', + children: null, + }, + { + name: '灵寿县', + code: '130126', + children: null, + }, + { + name: '高邑县', + code: '130127', + children: null, + }, + { + name: '深泽县', + code: '130128', + children: null, + }, + { + name: '赞皇县', + code: '130129', + children: null, + }, + { + name: '无极县', + code: '130130', + children: null, + }, + { + name: '平山县', + code: '130131', + children: null, + }, + { + name: '元氏县', + code: '130132', + children: null, + }, + { + name: '赵县', + code: '130133', + children: null, + }, + { + name: '辛集市', + code: '130181', + children: null, + }, + { + name: '晋州市', + code: '130183', + children: null, + }, + { + name: '新乐市', + code: '130184', + children: null, + }, + ], + }, + { + name: '唐山市', + code: '130200', + children: [ + { + name: '路南区', + code: '130202', + children: null, + }, + { + name: '路北区', + code: '130203', + children: null, + }, + { + name: '古冶区', + code: '130204', + children: null, + }, + { + name: '开平区', + code: '130205', + children: null, + }, + { + name: '丰南区', + code: '130207', + children: null, + }, + { + name: '丰润区', + code: '130208', + children: null, + }, + { + name: '曹妃甸区', + code: '130209', + children: null, + }, + { + name: '滦南县', + code: '130224', + children: null, + }, + { + name: '乐亭县', + code: '130225', + children: null, + }, + { + name: '迁西县', + code: '130227', + children: null, + }, + { + name: '玉田县', + code: '130229', + children: null, + }, + { + name: '芦台区', + code: '130230', + children: null, + }, + { + name: '遵化市', + code: '130281', + children: null, + }, + { + name: '迁安市', + code: '130283', + children: null, + }, + { + name: '滦州市', + code: '130284', + children: null, + }, + ], + }, + { + name: '秦皇岛市', + code: '130300', + children: [ + { + name: '海港区', + code: '130302', + children: null, + }, + { + name: '山海关区', + code: '130303', + children: null, + }, + { + name: '北戴河区', + code: '130304', + children: null, + }, + { + name: '抚宁区', + code: '130306', + children: null, + }, + { + name: '青龙满族自治县', + code: '130321', + children: null, + }, + { + name: '昌黎县', + code: '130322', + children: null, + }, + { + name: '卢龙县', + code: '130324', + children: null, + }, + ], + }, + { + name: '邯郸市', + code: '130400', + children: [ + { + name: '邯山区', + code: '130402', + children: null, + }, + { + name: '丛台区', + code: '130403', + children: null, + }, + { + name: '复兴区', + code: '130404', + children: null, + }, + { + name: '峰峰矿区', + code: '130406', + children: null, + }, + { + name: '肥乡区', + code: '130407', + children: null, + }, + { + name: '永年区', + code: '130408', + children: null, + }, + { + name: '临漳县', + code: '130423', + children: null, + }, + { + name: '成安县', + code: '130424', + children: null, + }, + { + name: '大名县', + code: '130425', + children: null, + }, + { + name: '涉县', + code: '130426', + children: null, + }, + { + name: '磁县', + code: '130427', + children: null, + }, + { + name: '邱县', + code: '130430', + children: null, + }, + { + name: '鸡泽县', + code: '130431', + children: null, + }, + { + name: '广平县', + code: '130432', + children: null, + }, + { + name: '馆陶县', + code: '130433', + children: null, + }, + { + name: '魏县', + code: '130434', + children: null, + }, + { + name: '曲周县', + code: '130435', + children: null, + }, + { + name: '武安市', + code: '130481', + children: null, + }, + ], + }, + { + name: '邢台市', + code: '130500', + children: [ + { + name: '桥东区', + code: '130502', + children: null, + }, + { + name: '桥西区', + code: '130503', + children: null, + }, + { + name: '邢台县', + code: '130521', + children: null, + }, + { + name: '临城县', + code: '130522', + children: null, + }, + { + name: '内丘县', + code: '130523', + children: null, + }, + { + name: '柏乡县', + code: '130524', + children: null, + }, + { + name: '隆尧县', + code: '130525', + children: null, + }, + { + name: '任县', + code: '130526', + children: null, + }, + { + name: '南和县', + code: '130527', + children: null, + }, + { + name: '宁晋县', + code: '130528', + children: null, + }, + { + name: '巨鹿县', + code: '130529', + children: null, + }, + { + name: '新河县', + code: '130530', + children: null, + }, + { + name: '广宗县', + code: '130531', + children: null, + }, + { + name: '平乡县', + code: '130532', + children: null, + }, + { + name: '威县', + code: '130533', + children: null, + }, + { + name: '清河县', + code: '130534', + children: null, + }, + { + name: '临西县', + code: '130535', + children: null, + }, + { + name: '南宫市', + code: '130581', + children: null, + }, + { + name: '沙河市', + code: '130582', + children: null, + }, + ], + }, + { + name: '保定市', + code: '130600', + children: [ + { + name: '竞秀区', + code: '130602', + children: null, + }, + { + name: '莲池区', + code: '130606', + children: null, + }, + { + name: '满城区', + code: '130607', + children: null, + }, + { + name: '清苑区', + code: '130608', + children: null, + }, + { + name: '徐水区', + code: '130609', + children: null, + }, + { + name: '涞水县', + code: '130623', + children: null, + }, + { + name: '阜平县', + code: '130624', + children: null, + }, + { + name: '定兴县', + code: '130626', + children: null, + }, + { + name: '唐县', + code: '130627', + children: null, + }, + { + name: '高阳县', + code: '130628', + children: null, + }, + { + name: '容城县', + code: '130629', + children: null, + }, + { + name: '涞源县', + code: '130630', + children: null, + }, + { + name: '望都县', + code: '130631', + children: null, + }, + { + name: '安新县', + code: '130632', + children: null, + }, + { + name: '易县', + code: '130633', + children: null, + }, + { + name: '曲阳县', + code: '130634', + children: null, + }, + { + name: '蠡县', + code: '130635', + children: null, + }, + { + name: '顺平县', + code: '130636', + children: null, + }, + { + name: '博野县', + code: '130637', + children: null, + }, + { + name: '雄县', + code: '130638', + children: null, + }, + { + name: '涿州市', + code: '130681', + children: null, + }, + { + name: '定州市', + code: '130682', + children: null, + }, + { + name: '安国市', + code: '130683', + children: null, + }, + { + name: '高碑店市', + code: '130684', + children: null, + }, + ], + }, + { + name: '张家口市', + code: '130700', + children: [ + { + name: '桥东区', + code: '130702', + children: null, + }, + { + name: '桥西区', + code: '130703', + children: null, + }, + { + name: '宣化区', + code: '130705', + children: null, + }, + { + name: '下花园区', + code: '130706', + children: null, + }, + { + name: '万全区', + code: '130708', + children: null, + }, + { + name: '崇礼区', + code: '130709', + children: null, + }, + { + name: '张北县', + code: '130722', + children: null, + }, + { + name: '康保县', + code: '130723', + children: null, + }, + { + name: '沽源县', + code: '130724', + children: null, + }, + { + name: '尚义县', + code: '130725', + children: null, + }, + { + name: '蔚县', + code: '130726', + children: null, + }, + { + name: '阳原县', + code: '130727', + children: null, + }, + { + name: '怀安县', + code: '130728', + children: null, + }, + { + name: '怀来县', + code: '130730', + children: null, + }, + { + name: '涿鹿县', + code: '130731', + children: null, + }, + { + name: '赤城县', + code: '130732', + children: null, + }, + ], + }, + { + name: '承德市', + code: '130800', + children: [ + { + name: '双桥区', + code: '130802', + children: null, + }, + { + name: '双滦区', + code: '130803', + children: null, + }, + { + name: '鹰手营子矿区', + code: '130804', + children: null, + }, + { + name: '承德县', + code: '130821', + children: null, + }, + { + name: '兴隆县', + code: '130822', + children: null, + }, + { + name: '滦平县', + code: '130824', + children: null, + }, + { + name: '隆化县', + code: '130825', + children: null, + }, + { + name: '丰宁满族自治县', + code: '130826', + children: null, + }, + { + name: '宽城满族自治县', + code: '130827', + children: null, + }, + { + name: '围场满族蒙古族自治县', + code: '130828', + children: null, + }, + { + name: '平泉市', + code: '130881', + children: null, + }, + ], + }, + { + name: '沧州市', + code: '130900', + children: [ + { + name: '新华区', + code: '130902', + children: null, + }, + { + name: '运河区', + code: '130903', + children: null, + }, + { + name: '沧县', + code: '130921', + children: null, + }, + { + name: '青县', + code: '130922', + children: null, + }, + { + name: '东光县', + code: '130923', + children: null, + }, + { + name: '海兴县', + code: '130924', + children: null, + }, + { + name: '盐山县', + code: '130925', + children: null, + }, + { + name: '肃宁县', + code: '130926', + children: null, + }, + { + name: '南皮县', + code: '130927', + children: null, + }, + { + name: '吴桥县', + code: '130928', + children: null, + }, + { + name: '献县', + code: '130929', + children: null, + }, + { + name: '孟村回族自治县', + code: '130930', + children: null, + }, + { + name: '泊头市', + code: '130981', + children: null, + }, + { + name: '任丘市', + code: '130982', + children: null, + }, + { + name: '黄骅市', + code: '130983', + children: null, + }, + { + name: '河间市', + code: '130984', + children: null, + }, + ], + }, + { + name: '廊坊市', + code: '131000', + children: [ + { + name: '安次区', + code: '131002', + children: null, + }, + { + name: '广阳区', + code: '131003', + children: null, + }, + { + name: '固安县', + code: '131022', + children: null, + }, + { + name: '永清县', + code: '131023', + children: null, + }, + { + name: '香河县', + code: '131024', + children: null, + }, + { + name: '大城县', + code: '131025', + children: null, + }, + { + name: '文安县', + code: '131026', + children: null, + }, + { + name: '大厂回族自治县', + code: '131028', + children: null, + }, + { + name: '霸州市', + code: '131081', + children: null, + }, + { + name: '三河市', + code: '131082', + children: null, + }, + ], + }, + { + name: '衡水市', + code: '131100', + children: [ + { + name: '桃城区', + code: '131102', + children: null, + }, + { + name: '冀州区', + code: '131103', + children: null, + }, + { + name: '枣强县', + code: '131121', + children: null, + }, + { + name: '武邑县', + code: '131122', + children: null, + }, + { + name: '武强县', + code: '131123', + children: null, + }, + { + name: '饶阳县', + code: '131124', + children: null, + }, + { + name: '安平县', + code: '131125', + children: null, + }, + { + name: '故城县', + code: '131126', + children: null, + }, + { + name: '景县', + code: '131127', + children: null, + }, + { + name: '阜城县', + code: '131128', + children: null, + }, + { + name: '深州市', + code: '131182', + children: null, + }, + ], + }, + ], + }, + { + name: '山西省', + code: '140000', + children: [ + { + name: '太原市', + code: '140100', + children: [ + { + name: '小店区', + code: '140105', + children: null, + }, + { + name: '迎泽区', + code: '140106', + children: null, + }, + { + name: '杏花岭区', + code: '140107', + children: null, + }, + { + name: '尖草坪区', + code: '140108', + children: null, + }, + { + name: '万柏林区', + code: '140109', + children: null, + }, + { + name: '晋源区', + code: '140110', + children: null, + }, + { + name: '清徐县', + code: '140121', + children: null, + }, + { + name: '阳曲县', + code: '140122', + children: null, + }, + { + name: '娄烦县', + code: '140123', + children: null, + }, + { + name: '古交市', + code: '140181', + children: null, + }, + ], + }, + { + name: '大同市', + code: '140200', + children: [ + { + name: '新荣区', + code: '140212', + children: null, + }, + { + name: '平城区', + code: '140213', + children: null, + }, + { + name: '云冈区', + code: '140214', + children: null, + }, + { + name: '云州区', + code: '140215', + children: null, + }, + { + name: '阳高县', + code: '140221', + children: null, + }, + { + name: '天镇县', + code: '140222', + children: null, + }, + { + name: '广灵县', + code: '140223', + children: null, + }, + { + name: '灵丘县', + code: '140224', + children: null, + }, + { + name: '浑源县', + code: '140225', + children: null, + }, + { + name: '左云县', + code: '140226', + children: null, + }, + ], + }, + { + name: '阳泉市', + code: '140300', + children: [ + { + name: '城区', + code: '140302', + children: null, + }, + { + name: '矿区', + code: '140303', + children: null, + }, + { + name: '郊区', + code: '140311', + children: null, + }, + { + name: '平定县', + code: '140321', + children: null, + }, + { + name: '盂县', + code: '140322', + children: null, + }, + ], + }, + { + name: '长治市', + code: '140400', + children: [ + { + name: '潞州区', + code: '140403', + children: null, + }, + { + name: '上党区', + code: '140404', + children: null, + }, + { + name: '屯留区', + code: '140405', + children: null, + }, + { + name: '潞城区', + code: '140406', + children: null, + }, + { + name: '襄垣县', + code: '140423', + children: null, + }, + { + name: '平顺县', + code: '140425', + children: null, + }, + { + name: '黎城县', + code: '140426', + children: null, + }, + { + name: '壶关县', + code: '140427', + children: null, + }, + { + name: '长子县', + code: '140428', + children: null, + }, + { + name: '武乡县', + code: '140429', + children: null, + }, + { + name: '沁县', + code: '140430', + children: null, + }, + { + name: '沁源县', + code: '140431', + children: null, + }, + ], + }, + { + name: '晋城市', + code: '140500', + children: [ + { + name: '城区', + code: '140502', + children: null, + }, + { + name: '沁水县', + code: '140521', + children: null, + }, + { + name: '阳城县', + code: '140522', + children: null, + }, + { + name: '陵川县', + code: '140524', + children: null, + }, + { + name: '泽州县', + code: '140525', + children: null, + }, + { + name: '高平市', + code: '140581', + children: null, + }, + ], + }, + { + name: '朔州市', + code: '140600', + children: [ + { + name: '朔城区', + code: '140602', + children: null, + }, + { + name: '平鲁区', + code: '140603', + children: null, + }, + { + name: '山阴县', + code: '140621', + children: null, + }, + { + name: '应县', + code: '140622', + children: null, + }, + { + name: '右玉县', + code: '140623', + children: null, + }, + { + name: '怀仁市', + code: '140681', + children: null, + }, + ], + }, + { + name: '晋中市', + code: '140700', + children: [ + { + name: '榆次区', + code: '140702', + children: null, + }, + { + name: '榆社县', + code: '140721', + children: null, + }, + { + name: '左权县', + code: '140722', + children: null, + }, + { + name: '和顺县', + code: '140723', + children: null, + }, + { + name: '昔阳县', + code: '140724', + children: null, + }, + { + name: '寿阳县', + code: '140725', + children: null, + }, + { + name: '太谷县', + code: '140726', + children: null, + }, + { + name: '祁县', + code: '140727', + children: null, + }, + { + name: '平遥县', + code: '140728', + children: null, + }, + { + name: '灵石县', + code: '140729', + children: null, + }, + { + name: '介休市', + code: '140781', + children: null, + }, + ], + }, + { + name: '运城市', + code: '140800', + children: [ + { + name: '盐湖区', + code: '140802', + children: null, + }, + { + name: '临猗县', + code: '140821', + children: null, + }, + { + name: '万荣县', + code: '140822', + children: null, + }, + { + name: '闻喜县', + code: '140823', + children: null, + }, + { + name: '稷山县', + code: '140824', + children: null, + }, + { + name: '新绛县', + code: '140825', + children: null, + }, + { + name: '绛县', + code: '140826', + children: null, + }, + { + name: '垣曲县', + code: '140827', + children: null, + }, + { + name: '夏县', + code: '140828', + children: null, + }, + { + name: '平陆县', + code: '140829', + children: null, + }, + { + name: '芮城县', + code: '140830', + children: null, + }, + { + name: '永济市', + code: '140881', + children: null, + }, + { + name: '河津市', + code: '140882', + children: null, + }, + ], + }, + { + name: '忻州市', + code: '140900', + children: [ + { + name: '忻府区', + code: '140902', + children: null, + }, + { + name: '定襄县', + code: '140921', + children: null, + }, + { + name: '五台县', + code: '140922', + children: null, + }, + { + name: '代县', + code: '140923', + children: null, + }, + { + name: '繁峙县', + code: '140924', + children: null, + }, + { + name: '宁武县', + code: '140925', + children: null, + }, + { + name: '静乐县', + code: '140926', + children: null, + }, + { + name: '神池县', + code: '140927', + children: null, + }, + { + name: '五寨县', + code: '140928', + children: null, + }, + { + name: '岢岚县', + code: '140929', + children: null, + }, + { + name: '河曲县', + code: '140930', + children: null, + }, + { + name: '保德县', + code: '140931', + children: null, + }, + { + name: '偏关县', + code: '140932', + children: null, + }, + { + name: '原平市', + code: '140981', + children: null, + }, + ], + }, + { + name: '临汾市', + code: '141000', + children: [ + { + name: '尧都区', + code: '141002', + children: null, + }, + { + name: '曲沃县', + code: '141021', + children: null, + }, + { + name: '翼城县', + code: '141022', + children: null, + }, + { + name: '襄汾县', + code: '141023', + children: null, + }, + { + name: '洪洞县', + code: '141024', + children: null, + }, + { + name: '古县', + code: '141025', + children: null, + }, + { + name: '安泽县', + code: '141026', + children: null, + }, + { + name: '浮山县', + code: '141027', + children: null, + }, + { + name: '吉县', + code: '141028', + children: null, + }, + { + name: '乡宁县', + code: '141029', + children: null, + }, + { + name: '大宁县', + code: '141030', + children: null, + }, + { + name: '隰县', + code: '141031', + children: null, + }, + { + name: '永和县', + code: '141032', + children: null, + }, + { + name: '蒲县', + code: '141033', + children: null, + }, + { + name: '汾西县', + code: '141034', + children: null, + }, + { + name: '侯马市', + code: '141081', + children: null, + }, + { + name: '霍州市', + code: '141082', + children: null, + }, + ], + }, + { + name: '吕梁市', + code: '141100', + children: [ + { + name: '离石区', + code: '141102', + children: null, + }, + { + name: '文水县', + code: '141121', + children: null, + }, + { + name: '交城县', + code: '141122', + children: null, + }, + { + name: '兴县', + code: '141123', + children: null, + }, + { + name: '临县', + code: '141124', + children: null, + }, + { + name: '柳林县', + code: '141125', + children: null, + }, + { + name: '石楼县', + code: '141126', + children: null, + }, + { + name: '岚县', + code: '141127', + children: null, + }, + { + name: '方山县', + code: '141128', + children: null, + }, + { + name: '中阳县', + code: '141129', + children: null, + }, + { + name: '交口县', + code: '141130', + children: null, + }, + { + name: '孝义市', + code: '141181', + children: null, + }, + { + name: '汾阳市', + code: '141182', + children: null, + }, + ], + }, + ], + }, + { + name: '内蒙古自治区', + code: '150000', + children: [ + { + name: '呼和浩特市', + code: '150100', + children: [ + { + name: '新城区', + code: '150102', + children: null, + }, + { + name: '回民区', + code: '150103', + children: null, + }, + { + name: '玉泉区', + code: '150104', + children: null, + }, + { + name: '赛罕区', + code: '150105', + children: null, + }, + { + name: '土默特左旗', + code: '150121', + children: null, + }, + { + name: '托克托县', + code: '150122', + children: null, + }, + { + name: '和林格尔县', + code: '150123', + children: null, + }, + { + name: '清水河县', + code: '150124', + children: null, + }, + { + name: '武川县', + code: '150125', + children: null, + }, + ], + }, + { + name: '包头市', + code: '150200', + children: [ + { + name: '东河区', + code: '150202', + children: null, + }, + { + name: '昆都仑区', + code: '150203', + children: null, + }, + { + name: '青山区', + code: '150204', + children: null, + }, + { + name: '石拐区', + code: '150205', + children: null, + }, + { + name: '白云鄂博矿区', + code: '150206', + children: null, + }, + { + name: '九原区', + code: '150207', + children: null, + }, + { + name: '土默特右旗', + code: '150221', + children: null, + }, + { + name: '固阳县', + code: '150222', + children: null, + }, + { + name: '达尔罕茂明安联合旗', + code: '150223', + children: null, + }, + ], + }, + { + name: '乌海市', + code: '150300', + children: [ + { + name: '海勃湾区', + code: '150302', + children: null, + }, + { + name: '海南区', + code: '150303', + children: null, + }, + { + name: '乌达区', + code: '150304', + children: null, + }, + ], + }, + { + name: '赤峰市', + code: '150400', + children: [ + { + name: '红山区', + code: '150402', + children: null, + }, + { + name: '元宝山区', + code: '150403', + children: null, + }, + { + name: '松山区', + code: '150404', + children: null, + }, + { + name: '阿鲁科尔沁旗', + code: '150421', + children: null, + }, + { + name: '巴林左旗', + code: '150422', + children: null, + }, + { + name: '巴林右旗', + code: '150423', + children: null, + }, + { + name: '林西县', + code: '150424', + children: null, + }, + { + name: '克什克腾旗', + code: '150425', + children: null, + }, + { + name: '翁牛特旗', + code: '150426', + children: null, + }, + { + name: '喀喇沁旗', + code: '150428', + children: null, + }, + { + name: '宁城县', + code: '150429', + children: null, + }, + { + name: '敖汉旗', + code: '150430', + children: null, + }, + ], + }, + { + name: '通辽市', + code: '150500', + children: [ + { + name: '科尔沁区', + code: '150502', + children: null, + }, + { + name: '科尔沁左翼中旗', + code: '150521', + children: null, + }, + { + name: '科尔沁左翼后旗', + code: '150522', + children: null, + }, + { + name: '开鲁县', + code: '150523', + children: null, + }, + { + name: '库伦旗', + code: '150524', + children: null, + }, + { + name: '奈曼旗', + code: '150525', + children: null, + }, + { + name: '扎鲁特旗', + code: '150526', + children: null, + }, + { + name: '霍林郭勒市', + code: '150581', + children: null, + }, + ], + }, + { + name: '鄂尔多斯市', + code: '150600', + children: [ + { + name: '东胜区', + code: '150602', + children: null, + }, + { + name: '康巴什区', + code: '150603', + children: null, + }, + { + name: '达拉特旗', + code: '150621', + children: null, + }, + { + name: '准格尔旗', + code: '150622', + children: null, + }, + { + name: '鄂托克前旗', + code: '150623', + children: null, + }, + { + name: '鄂托克旗', + code: '150624', + children: null, + }, + { + name: '杭锦旗', + code: '150625', + children: null, + }, + { + name: '乌审旗', + code: '150626', + children: null, + }, + { + name: '伊金霍洛旗', + code: '150627', + children: null, + }, + ], + }, + { + name: '呼伦贝尔市', + code: '150700', + children: [ + { + name: '海拉尔区', + code: '150702', + children: null, + }, + { + name: '扎赉诺尔区', + code: '150703', + children: null, + }, + { + name: '阿荣旗', + code: '150721', + children: null, + }, + { + name: '莫力达瓦达斡尔族自治旗', + code: '150722', + children: null, + }, + { + name: '鄂伦春自治旗', + code: '150723', + children: null, + }, + { + name: '鄂温克族自治旗', + code: '150724', + children: null, + }, + { + name: '陈巴尔虎旗', + code: '150725', + children: null, + }, + { + name: '新巴尔虎左旗', + code: '150726', + children: null, + }, + { + name: '新巴尔虎右旗', + code: '150727', + children: null, + }, + { + name: '满洲里市', + code: '150781', + children: null, + }, + { + name: '牙克石市', + code: '150782', + children: null, + }, + { + name: '扎兰屯市', + code: '150783', + children: null, + }, + { + name: '额尔古纳市', + code: '150784', + children: null, + }, + { + name: '根河市', + code: '150785', + children: null, + }, + ], + }, + { + name: '巴彦淖尔市', + code: '150800', + children: [ + { + name: '临河区', + code: '150802', + children: null, + }, + { + name: '五原县', + code: '150821', + children: null, + }, + { + name: '磴口县', + code: '150822', + children: null, + }, + { + name: '乌拉特前旗', + code: '150823', + children: null, + }, + { + name: '乌拉特中旗', + code: '150824', + children: null, + }, + { + name: '乌拉特后旗', + code: '150825', + children: null, + }, + { + name: '杭锦后旗', + code: '150826', + children: null, + }, + ], + }, + { + name: '乌兰察布市', + code: '150900', + children: [ + { + name: '集宁区', + code: '150902', + children: null, + }, + { + name: '卓资县', + code: '150921', + children: null, + }, + { + name: '化德县', + code: '150922', + children: null, + }, + { + name: '商都县', + code: '150923', + children: null, + }, + { + name: '兴和县', + code: '150924', + children: null, + }, + { + name: '凉城县', + code: '150925', + children: null, + }, + { + name: '察哈尔右翼前旗', + code: '150926', + children: null, + }, + { + name: '察哈尔右翼中旗', + code: '150927', + children: null, + }, + { + name: '察哈尔右翼后旗', + code: '150928', + children: null, + }, + { + name: '四子王旗', + code: '150929', + children: null, + }, + { + name: '丰镇市', + code: '150981', + children: null, + }, + ], + }, + { + name: '兴安盟', + code: '152200', + children: [ + { + name: '乌兰浩特市', + code: '152201', + children: null, + }, + { + name: '阿尔山市', + code: '152202', + children: null, + }, + { + name: '科尔沁右翼前旗', + code: '152221', + children: null, + }, + { + name: '科尔沁右翼中旗', + code: '152222', + children: null, + }, + { + name: '扎赉特旗', + code: '152223', + children: null, + }, + { + name: '突泉县', + code: '152224', + children: null, + }, + ], + }, + { + name: '锡林郭勒盟', + code: '152500', + children: [ + { + name: '二连浩特市', + code: '152501', + children: null, + }, + { + name: '锡林浩特市', + code: '152502', + children: null, + }, + { + name: '阿巴嘎旗', + code: '152522', + children: null, + }, + { + name: '苏尼特左旗', + code: '152523', + children: null, + }, + { + name: '苏尼特右旗', + code: '152524', + children: null, + }, + { + name: '东乌珠穆沁旗', + code: '152525', + children: null, + }, + { + name: '西乌珠穆沁旗', + code: '152526', + children: null, + }, + { + name: '太仆寺旗', + code: '152527', + children: null, + }, + { + name: '镶黄旗', + code: '152528', + children: null, + }, + { + name: '正镶白旗', + code: '152529', + children: null, + }, + { + name: '正蓝旗', + code: '152530', + children: null, + }, + { + name: '多伦县', + code: '152531', + children: null, + }, + ], + }, + { + name: '阿拉善盟', + code: '152900', + children: [ + { + name: '阿拉善左旗', + code: '152921', + children: null, + }, + { + name: '阿拉善右旗', + code: '152922', + children: null, + }, + { + name: '额济纳旗', + code: '152923', + children: null, + }, + ], + }, + ], + }, + { + name: '辽宁省', + code: '210000', + children: [ + { + name: '沈阳市', + code: '210100', + children: [ + { + name: '和平区', + code: '210102', + children: null, + }, + { + name: '沈河区', + code: '210103', + children: null, + }, + { + name: '大东区', + code: '210104', + children: null, + }, + { + name: '皇姑区', + code: '210105', + children: null, + }, + { + name: '铁西区', + code: '210106', + children: null, + }, + { + name: '苏家屯区', + code: '210111', + children: null, + }, + { + name: '浑南区', + code: '210112', + children: null, + }, + { + name: '沈北新区', + code: '210113', + children: null, + }, + { + name: '于洪区', + code: '210114', + children: null, + }, + { + name: '辽中区', + code: '210115', + children: null, + }, + { + name: '康平县', + code: '210123', + children: null, + }, + { + name: '法库县', + code: '210124', + children: null, + }, + { + name: '新民市', + code: '210181', + children: null, + }, + ], + }, + { + name: '大连市', + code: '210200', + children: [ + { + name: '中山区', + code: '210202', + children: null, + }, + { + name: '西岗区', + code: '210203', + children: null, + }, + { + name: '沙河口区', + code: '210204', + children: null, + }, + { + name: '甘井子区', + code: '210211', + children: null, + }, + { + name: '旅顺口区', + code: '210212', + children: null, + }, + { + name: '金州区', + code: '210213', + children: null, + }, + { + name: '普兰店区', + code: '210214', + children: null, + }, + { + name: '长海县', + code: '210224', + children: null, + }, + { + name: '瓦房店市', + code: '210281', + children: null, + }, + { + name: '庄河市', + code: '210283', + children: null, + }, + ], + }, + { + name: '鞍山市', + code: '210300', + children: [ + { + name: '铁东区', + code: '210302', + children: null, + }, + { + name: '铁西区', + code: '210303', + children: null, + }, + { + name: '立山区', + code: '210304', + children: null, + }, + { + name: '千山区', + code: '210311', + children: null, + }, + { + name: '台安县', + code: '210321', + children: null, + }, + { + name: '岫岩满族自治县', + code: '210323', + children: null, + }, + { + name: '海城市', + code: '210381', + children: null, + }, + ], + }, + { + name: '抚顺市', + code: '210400', + children: [ + { + name: '新抚区', + code: '210402', + children: null, + }, + { + name: '东洲区', + code: '210403', + children: null, + }, + { + name: '望花区', + code: '210404', + children: null, + }, + { + name: '顺城区', + code: '210411', + children: null, + }, + { + name: '抚顺县', + code: '210421', + children: null, + }, + { + name: '新宾满族自治县', + code: '210422', + children: null, + }, + { + name: '清原满族自治县', + code: '210423', + children: null, + }, + ], + }, + { + name: '本溪市', + code: '210500', + children: [ + { + name: '平山区', + code: '210502', + children: null, + }, + { + name: '溪湖区', + code: '210503', + children: null, + }, + { + name: '明山区', + code: '210504', + children: null, + }, + { + name: '南芬区', + code: '210505', + children: null, + }, + { + name: '本溪满族自治县', + code: '210521', + children: null, + }, + { + name: '桓仁满族自治县', + code: '210522', + children: null, + }, + ], + }, + { + name: '丹东市', + code: '210600', + children: [ + { + name: '元宝区', + code: '210602', + children: null, + }, + { + name: '振兴区', + code: '210603', + children: null, + }, + { + name: '振安区', + code: '210604', + children: null, + }, + { + name: '宽甸满族自治县', + code: '210624', + children: null, + }, + { + name: '东港市', + code: '210681', + children: null, + }, + { + name: '凤城市', + code: '210682', + children: null, + }, + ], + }, + { + name: '锦州市', + code: '210700', + children: [ + { + name: '古塔区', + code: '210702', + children: null, + }, + { + name: '凌河区', + code: '210703', + children: null, + }, + { + name: '太和区', + code: '210711', + children: null, + }, + { + name: '黑山县', + code: '210726', + children: null, + }, + { + name: '义县', + code: '210727', + children: null, + }, + { + name: '凌海市', + code: '210781', + children: null, + }, + { + name: '北镇市', + code: '210782', + children: null, + }, + ], + }, + { + name: '营口市', + code: '210800', + children: [ + { + name: '站前区', + code: '210802', + children: null, + }, + { + name: '西市区', + code: '210803', + children: null, + }, + { + name: '鲅鱼圈区', + code: '210804', + children: null, + }, + { + name: '老边区', + code: '210811', + children: null, + }, + { + name: '盖州市', + code: '210881', + children: null, + }, + { + name: '大石桥市', + code: '210882', + children: null, + }, + ], + }, + { + name: '阜新市', + code: '210900', + children: [ + { + name: '海州区', + code: '210902', + children: null, + }, + { + name: '新邱区', + code: '210903', + children: null, + }, + { + name: '太平区', + code: '210904', + children: null, + }, + { + name: '清河门区', + code: '210905', + children: null, + }, + { + name: '细河区', + code: '210911', + children: null, + }, + { + name: '阜新蒙古族自治县', + code: '210921', + children: null, + }, + { + name: '彰武县', + code: '210922', + children: null, + }, + ], + }, + { + name: '辽阳市', + code: '211000', + children: [ + { + name: '白塔区', + code: '211002', + children: null, + }, + { + name: '文圣区', + code: '211003', + children: null, + }, + { + name: '宏伟区', + code: '211004', + children: null, + }, + { + name: '弓长岭区', + code: '211005', + children: null, + }, + { + name: '太子河区', + code: '211011', + children: null, + }, + { + name: '辽阳县', + code: '211021', + children: null, + }, + { + name: '灯塔市', + code: '211081', + children: null, + }, + ], + }, + { + name: '盘锦市', + code: '211100', + children: [ + { + name: '双台子区', + code: '211102', + children: null, + }, + { + name: '兴隆台区', + code: '211103', + children: null, + }, + { + name: '大洼区', + code: '211104', + children: null, + }, + { + name: '盘山县', + code: '211122', + children: null, + }, + ], + }, + { + name: '铁岭市', + code: '211200', + children: [ + { + name: '银州区', + code: '211202', + children: null, + }, + { + name: '清河区', + code: '211204', + children: null, + }, + { + name: '铁岭县', + code: '211221', + children: null, + }, + { + name: '西丰县', + code: '211223', + children: null, + }, + { + name: '昌图县', + code: '211224', + children: null, + }, + { + name: '调兵山市', + code: '211281', + children: null, + }, + { + name: '开原市', + code: '211282', + children: null, + }, + ], + }, + { + name: '朝阳市', + code: '211300', + children: [ + { + name: '双塔区', + code: '211302', + children: null, + }, + { + name: '龙城区', + code: '211303', + children: null, + }, + { + name: '朝阳县', + code: '211321', + children: null, + }, + { + name: '建平县', + code: '211322', + children: null, + }, + { + name: '喀喇沁左翼蒙古族自治县', + code: '211324', + children: null, + }, + { + name: '北票市', + code: '211381', + children: null, + }, + { + name: '凌源市', + code: '211382', + children: null, + }, + ], + }, + { + name: '葫芦岛市', + code: '211400', + children: [ + { + name: '连山区', + code: '211402', + children: null, + }, + { + name: '龙港区', + code: '211403', + children: null, + }, + { + name: '南票区', + code: '211404', + children: null, + }, + { + name: '绥中县', + code: '211421', + children: null, + }, + { + name: '建昌县', + code: '211422', + children: null, + }, + { + name: '兴城市', + code: '211481', + children: null, + }, + ], + }, + ], + }, + { + name: '吉林省', + code: '220000', + children: [ + { + name: '长春市', + code: '220100', + children: [ + { + name: '南关区', + code: '220102', + children: null, + }, + { + name: '宽城区', + code: '220103', + children: null, + }, + { + name: '朝阳区', + code: '220104', + children: null, + }, + { + name: '二道区', + code: '220105', + children: null, + }, + { + name: '绿园区', + code: '220106', + children: null, + }, + { + name: '双阳区', + code: '220112', + children: null, + }, + { + name: '九台区', + code: '220113', + children: null, + }, + { + name: '农安县', + code: '220122', + children: null, + }, + { + name: '榆树市', + code: '220182', + children: null, + }, + { + name: '德惠市', + code: '220183', + children: null, + }, + ], + }, + { + name: '吉林市', + code: '220200', + children: [ + { + name: '昌邑区', + code: '220202', + children: null, + }, + { + name: '龙潭区', + code: '220203', + children: null, + }, + { + name: '船营区', + code: '220204', + children: null, + }, + { + name: '丰满区', + code: '220211', + children: null, + }, + { + name: '永吉县', + code: '220221', + children: null, + }, + { + name: '蛟河市', + code: '220281', + children: null, + }, + { + name: '桦甸市', + code: '220282', + children: null, + }, + { + name: '舒兰市', + code: '220283', + children: null, + }, + { + name: '磐石市', + code: '220284', + children: null, + }, + ], + }, + { + name: '四平市', + code: '220300', + children: [ + { + name: '铁西区', + code: '220302', + children: null, + }, + { + name: '铁东区', + code: '220303', + children: null, + }, + { + name: '梨树县', + code: '220322', + children: null, + }, + { + name: '伊通满族自治县', + code: '220323', + children: null, + }, + { + name: '公主岭市', + code: '220381', + children: null, + }, + { + name: '双辽市', + code: '220382', + children: null, + }, + ], + }, + { + name: '辽源市', + code: '220400', + children: [ + { + name: '龙山区', + code: '220402', + children: null, + }, + { + name: '西安区', + code: '220403', + children: null, + }, + { + name: '东丰县', + code: '220421', + children: null, + }, + { + name: '东辽县', + code: '220422', + children: null, + }, + ], + }, + { + name: '通化市', + code: '220500', + children: [ + { + name: '东昌区', + code: '220502', + children: null, + }, + { + name: '二道江区', + code: '220503', + children: null, + }, + { + name: '通化县', + code: '220521', + children: null, + }, + { + name: '辉南县', + code: '220523', + children: null, + }, + { + name: '柳河县', + code: '220524', + children: null, + }, + { + name: '梅河口市', + code: '220581', + children: null, + }, + { + name: '集安市', + code: '220582', + children: null, + }, + ], + }, + { + name: '白山市', + code: '220600', + children: [ + { + name: '浑江区', + code: '220602', + children: null, + }, + { + name: '江源区', + code: '220605', + children: null, + }, + { + name: '抚松县', + code: '220621', + children: null, + }, + { + name: '靖宇县', + code: '220622', + children: null, + }, + { + name: '长白朝鲜族自治县', + code: '220623', + children: null, + }, + { + name: '临江市', + code: '220681', + children: null, + }, + ], + }, + { + name: '松原市', + code: '220700', + children: [ + { + name: '宁江区', + code: '220702', + children: null, + }, + { + name: '前郭尔罗斯蒙古族自治县', + code: '220721', + children: null, + }, + { + name: '长岭县', + code: '220722', + children: null, + }, + { + name: '乾安县', + code: '220723', + children: null, + }, + { + name: '扶余市', + code: '220781', + children: null, + }, + ], + }, + { + name: '白城市', + code: '220800', + children: [ + { + name: '洮北区', + code: '220802', + children: null, + }, + { + name: '镇赉县', + code: '220821', + children: null, + }, + { + name: '通榆县', + code: '220822', + children: null, + }, + { + name: '洮南市', + code: '220881', + children: null, + }, + { + name: '大安市', + code: '220882', + children: null, + }, + ], + }, + { + name: '延边朝鲜族自治州', + code: '222400', + children: [ + { + name: '延吉市', + code: '222401', + children: null, + }, + { + name: '图们市', + code: '222402', + children: null, + }, + { + name: '敦化市', + code: '222403', + children: null, + }, + { + name: '珲春市', + code: '222404', + children: null, + }, + { + name: '龙井市', + code: '222405', + children: null, + }, + { + name: '和龙市', + code: '222406', + children: null, + }, + { + name: '汪清县', + code: '222424', + children: null, + }, + { + name: '安图县', + code: '222426', + children: null, + }, + ], + }, + ], + }, + { + name: '黑龙江省', + code: '230000', + children: [ + { + name: '哈尔滨市', + code: '230100', + children: [ + { + name: '道里区', + code: '230102', + children: null, + }, + { + name: '南岗区', + code: '230103', + children: null, + }, + { + name: '道外区', + code: '230104', + children: null, + }, + { + name: '平房区', + code: '230108', + children: null, + }, + { + name: '松北区', + code: '230109', + children: null, + }, + { + name: '香坊区', + code: '230110', + children: null, + }, + { + name: '呼兰区', + code: '230111', + children: null, + }, + { + name: '阿城区', + code: '230112', + children: null, + }, + { + name: '双城区', + code: '230113', + children: null, + }, + { + name: '依兰县', + code: '230123', + children: null, + }, + { + name: '方正县', + code: '230124', + children: null, + }, + { + name: '宾县', + code: '230125', + children: null, + }, + { + name: '巴彦县', + code: '230126', + children: null, + }, + { + name: '木兰县', + code: '230127', + children: null, + }, + { + name: '通河县', + code: '230128', + children: null, + }, + { + name: '延寿县', + code: '230129', + children: null, + }, + { + name: '尚志市', + code: '230183', + children: null, + }, + { + name: '五常市', + code: '230184', + children: null, + }, + ], + }, + { + name: '齐齐哈尔市', + code: '230200', + children: [ + { + name: '龙沙区', + code: '230202', + children: null, + }, + { + name: '建华区', + code: '230203', + children: null, + }, + { + name: '铁锋区', + code: '230204', + children: null, + }, + { + name: '昂昂溪区', + code: '230205', + children: null, + }, + { + name: '富拉尔基区', + code: '230206', + children: null, + }, + { + name: '碾子山区', + code: '230207', + children: null, + }, + { + name: '梅里斯达斡尔族区', + code: '230208', + children: null, + }, + { + name: '龙江县', + code: '230221', + children: null, + }, + { + name: '依安县', + code: '230223', + children: null, + }, + { + name: '泰来县', + code: '230224', + children: null, + }, + { + name: '甘南县', + code: '230225', + children: null, + }, + { + name: '富裕县', + code: '230227', + children: null, + }, + { + name: '克山县', + code: '230229', + children: null, + }, + { + name: '克东县', + code: '230230', + children: null, + }, + { + name: '拜泉县', + code: '230231', + children: null, + }, + { + name: '讷河市', + code: '230281', + children: null, + }, + ], + }, + { + name: '鸡西市', + code: '230300', + children: [ + { + name: '鸡冠区', + code: '230302', + children: null, + }, + { + name: '恒山区', + code: '230303', + children: null, + }, + { + name: '滴道区', + code: '230304', + children: null, + }, + { + name: '梨树区', + code: '230305', + children: null, + }, + { + name: '城子河区', + code: '230306', + children: null, + }, + { + name: '麻山区', + code: '230307', + children: null, + }, + { + name: '鸡东县', + code: '230321', + children: null, + }, + { + name: '虎林市', + code: '230381', + children: null, + }, + { + name: '密山市', + code: '230382', + children: null, + }, + ], + }, + { + name: '鹤岗市', + code: '230400', + children: [ + { + name: '向阳区', + code: '230402', + children: null, + }, + { + name: '工农区', + code: '230403', + children: null, + }, + { + name: '南山区', + code: '230404', + children: null, + }, + { + name: '兴安区', + code: '230405', + children: null, + }, + { + name: '东山区', + code: '230406', + children: null, + }, + { + name: '兴山区', + code: '230407', + children: null, + }, + { + name: '萝北县', + code: '230421', + children: null, + }, + { + name: '绥滨县', + code: '230422', + children: null, + }, + ], + }, + { + name: '双鸭山市', + code: '230500', + children: [ + { + name: '尖山区', + code: '230502', + children: null, + }, + { + name: '岭东区', + code: '230503', + children: null, + }, + { + name: '四方台区', + code: '230505', + children: null, + }, + { + name: '宝山区', + code: '230506', + children: null, + }, + { + name: '集贤县', + code: '230521', + children: null, + }, + { + name: '友谊县', + code: '230522', + children: null, + }, + { + name: '宝清县', + code: '230523', + children: null, + }, + { + name: '饶河县', + code: '230524', + children: null, + }, + ], + }, + { + name: '大庆市', + code: '230600', + children: [ + { + name: '萨尔图区', + code: '230602', + children: null, + }, + { + name: '龙凤区', + code: '230603', + children: null, + }, + { + name: '让胡路区', + code: '230604', + children: null, + }, + { + name: '红岗区', + code: '230605', + children: null, + }, + { + name: '大同区', + code: '230606', + children: null, + }, + { + name: '肇州县', + code: '230621', + children: null, + }, + { + name: '肇源县', + code: '230622', + children: null, + }, + { + name: '林甸县', + code: '230623', + children: null, + }, + { + name: '杜尔伯特蒙古族自治县', + code: '230624', + children: null, + }, + ], + }, + { + name: '伊春市', + code: '230700', + children: [ + { + name: '伊春区', + code: '230702', + children: null, + }, + { + name: '南岔区', + code: '230703', + children: null, + }, + { + name: '友好区', + code: '230704', + children: null, + }, + { + name: '西林区', + code: '230705', + children: null, + }, + { + name: '翠峦区', + code: '230706', + children: null, + }, + { + name: '新青区', + code: '230707', + children: null, + }, + { + name: '美溪区', + code: '230708', + children: null, + }, + { + name: '金山屯区', + code: '230709', + children: null, + }, + { + name: '五营区', + code: '230710', + children: null, + }, + { + name: '乌马河区', + code: '230711', + children: null, + }, + { + name: '汤旺河区', + code: '230712', + children: null, + }, + { + name: '带岭区', + code: '230713', + children: null, + }, + { + name: '乌伊岭区', + code: '230714', + children: null, + }, + { + name: '红星区', + code: '230715', + children: null, + }, + { + name: '上甘岭区', + code: '230716', + children: null, + }, + { + name: '嘉荫县', + code: '230722', + children: null, + }, + { + name: '铁力市', + code: '230781', + children: null, + }, + ], + }, + { + name: '佳木斯市', + code: '230800', + children: [ + { + name: '向阳区', + code: '230803', + children: null, + }, + { + name: '前进区', + code: '230804', + children: null, + }, + { + name: '东风区', + code: '230805', + children: null, + }, + { + name: '郊区', + code: '230811', + children: null, + }, + { + name: '桦南县', + code: '230822', + children: null, + }, + { + name: '桦川县', + code: '230826', + children: null, + }, + { + name: '汤原县', + code: '230828', + children: null, + }, + { + name: '同江市', + code: '230881', + children: null, + }, + { + name: '富锦市', + code: '230882', + children: null, + }, + { + name: '抚远市', + code: '230883', + children: null, + }, + ], + }, + { + name: '七台河市', + code: '230900', + children: [ + { + name: '新兴区', + code: '230902', + children: null, + }, + { + name: '桃山区', + code: '230903', + children: null, + }, + { + name: '茄子河区', + code: '230904', + children: null, + }, + { + name: '勃利县', + code: '230921', + children: null, + }, + ], + }, + { + name: '牡丹江市', + code: '231000', + children: [ + { + name: '东安区', + code: '231002', + children: null, + }, + { + name: '阳明区', + code: '231003', + children: null, + }, + { + name: '爱民区', + code: '231004', + children: null, + }, + { + name: '西安区', + code: '231005', + children: null, + }, + { + name: '林口县', + code: '231025', + children: null, + }, + { + name: '绥芬河市', + code: '231081', + children: null, + }, + { + name: '海林市', + code: '231083', + children: null, + }, + { + name: '宁安市', + code: '231084', + children: null, + }, + { + name: '穆棱市', + code: '231085', + children: null, + }, + { + name: '东宁市', + code: '231086', + children: null, + }, + ], + }, + { + name: '黑河市', + code: '231100', + children: [ + { + name: '爱辉区', + code: '231102', + children: null, + }, + { + name: '嫩江县', + code: '231121', + children: null, + }, + { + name: '逊克县', + code: '231123', + children: null, + }, + { + name: '孙吴县', + code: '231124', + children: null, + }, + { + name: '北安市', + code: '231181', + children: null, + }, + { + name: '五大连池市', + code: '231182', + children: null, + }, + ], + }, + { + name: '绥化市', + code: '231200', + children: [ + { + name: '北林区', + code: '231202', + children: null, + }, + { + name: '望奎县', + code: '231221', + children: null, + }, + { + name: '兰西县', + code: '231222', + children: null, + }, + { + name: '青冈县', + code: '231223', + children: null, + }, + { + name: '庆安县', + code: '231224', + children: null, + }, + { + name: '明水县', + code: '231225', + children: null, + }, + { + name: '绥棱县', + code: '231226', + children: null, + }, + { + name: '安达市', + code: '231281', + children: null, + }, + { + name: '肇东市', + code: '231282', + children: null, + }, + { + name: '海伦市', + code: '231283', + children: null, + }, + ], + }, + { + name: '大兴安岭地区', + code: '232700', + children: [ + { + name: '漠河市', + code: '232701', + children: null, + }, + { + name: '呼玛县', + code: '232721', + children: null, + }, + { + name: '塔河县', + code: '232722', + children: null, + }, + ], + }, + ], + }, + { + name: '上海市', + code: '310000', + children: [ + { + name: '上海市', + code: '310100', + children: [ + { + name: '黄浦区', + code: '310101', + children: null, + }, + { + name: '徐汇区', + code: '310104', + children: null, + }, + { + name: '长宁区', + code: '310105', + children: null, + }, + { + name: '静安区', + code: '310106', + children: null, + }, + { + name: '普陀区', + code: '310107', + children: null, + }, + { + name: '虹口区', + code: '310109', + children: null, + }, + { + name: '杨浦区', + code: '310110', + children: null, + }, + { + name: '闵行区', + code: '310112', + children: null, + }, + { + name: '宝山区', + code: '310113', + children: null, + }, + { + name: '嘉定区', + code: '310114', + children: null, + }, + { + name: '浦东新区', + code: '310115', + children: null, + }, + { + name: '金山区', + code: '310116', + children: null, + }, + { + name: '松江区', + code: '310117', + children: null, + }, + { + name: '青浦区', + code: '310118', + children: null, + }, + { + name: '奉贤区', + code: '310120', + children: null, + }, + { + name: '崇明区', + code: '310151', + children: null, + }, + ], + }, + ], + }, + { + name: '江苏省', + code: '320000', + children: [ + { + name: '南京市', + code: '320100', + children: [ + { + name: '玄武区', + code: '320102', + children: null, + }, + { + name: '秦淮区', + code: '320104', + children: null, + }, + { + name: '建邺区', + code: '320105', + children: null, + }, + { + name: '鼓楼区', + code: '320106', + children: null, + }, + { + name: '浦口区', + code: '320111', + children: null, + }, + { + name: '栖霞区', + code: '320113', + children: null, + }, + { + name: '雨花台区', + code: '320114', + children: null, + }, + { + name: '江宁区', + code: '320115', + children: null, + }, + { + name: '六合区', + code: '320116', + children: null, + }, + { + name: '溧水区', + code: '320117', + children: null, + }, + { + name: '高淳区', + code: '320118', + children: null, + }, + ], + }, + { + name: '无锡市', + code: '320200', + children: [ + { + name: '锡山区', + code: '320205', + children: null, + }, + { + name: '惠山区', + code: '320206', + children: null, + }, + { + name: '滨湖区', + code: '320211', + children: null, + }, + { + name: '梁溪区', + code: '320213', + children: null, + }, + { + name: '新吴区', + code: '320214', + children: null, + }, + { + name: '江阴市', + code: '320281', + children: null, + }, + { + name: '宜兴市', + code: '320282', + children: null, + }, + ], + }, + { + name: '徐州市', + code: '320300', + children: [ + { + name: '鼓楼区', + code: '320302', + children: null, + }, + { + name: '云龙区', + code: '320303', + children: null, + }, + { + name: '贾汪区', + code: '320305', + children: null, + }, + { + name: '泉山区', + code: '320311', + children: null, + }, + { + name: '铜山区', + code: '320312', + children: null, + }, + { + name: '丰县', + code: '320321', + children: null, + }, + { + name: '沛县', + code: '320322', + children: null, + }, + { + name: '睢宁县', + code: '320324', + children: null, + }, + { + name: '新沂市', + code: '320381', + children: null, + }, + { + name: '邳州市', + code: '320382', + children: null, + }, + ], + }, + { + name: '常州市', + code: '320400', + children: [ + { + name: '天宁区', + code: '320402', + children: null, + }, + { + name: '钟楼区', + code: '320404', + children: null, + }, + { + name: '新北区', + code: '320411', + children: null, + }, + { + name: '武进区', + code: '320412', + children: null, + }, + { + name: '金坛区', + code: '320413', + children: null, + }, + { + name: '溧阳市', + code: '320481', + children: null, + }, + ], + }, + { + name: '苏州市', + code: '320500', + children: [ + { + name: '虎丘区', + code: '320505', + children: null, + }, + { + name: '吴中区', + code: '320506', + children: null, + }, + { + name: '相城区', + code: '320507', + children: null, + }, + { + name: '姑苏区', + code: '320508', + children: null, + }, + { + name: '吴江区', + code: '320509', + children: null, + }, + { + name: '常熟市', + code: '320581', + children: null, + }, + { + name: '张家港市', + code: '320582', + children: null, + }, + { + name: '昆山市', + code: '320583', + children: null, + }, + { + name: '太仓市', + code: '320585', + children: null, + }, + ], + }, + { + name: '南通市', + code: '320600', + children: [ + { + name: '崇川区', + code: '320602', + children: null, + }, + { + name: '港闸区', + code: '320611', + children: null, + }, + { + name: '通州区', + code: '320612', + children: null, + }, + { + name: '如东县', + code: '320623', + children: null, + }, + { + name: '启东市', + code: '320681', + children: null, + }, + { + name: '如皋市', + code: '320682', + children: null, + }, + { + name: '海门市', + code: '320684', + children: null, + }, + { + name: '海安市', + code: '320685', + children: null, + }, + ], + }, + { + name: '连云港市', + code: '320700', + children: [ + { + name: '连云区', + code: '320703', + children: null, + }, + { + name: '海州区', + code: '320706', + children: null, + }, + { + name: '赣榆区', + code: '320707', + children: null, + }, + { + name: '东海县', + code: '320722', + children: null, + }, + { + name: '灌云县', + code: '320723', + children: null, + }, + { + name: '灌南县', + code: '320724', + children: null, + }, + ], + }, + { + name: '淮安市', + code: '320800', + children: [ + { + name: '淮安区', + code: '320803', + children: null, + }, + { + name: '淮阴区', + code: '320804', + children: null, + }, + { + name: '清江浦区', + code: '320812', + children: null, + }, + { + name: '洪泽区', + code: '320813', + children: null, + }, + { + name: '涟水县', + code: '320826', + children: null, + }, + { + name: '盱眙县', + code: '320830', + children: null, + }, + { + name: '金湖县', + code: '320831', + children: null, + }, + ], + }, + { + name: '盐城市', + code: '320900', + children: [ + { + name: '亭湖区', + code: '320902', + children: null, + }, + { + name: '盐都区', + code: '320903', + children: null, + }, + { + name: '大丰区', + code: '320904', + children: null, + }, + { + name: '响水县', + code: '320921', + children: null, + }, + { + name: '滨海县', + code: '320922', + children: null, + }, + { + name: '阜宁县', + code: '320923', + children: null, + }, + { + name: '射阳县', + code: '320924', + children: null, + }, + { + name: '建湖县', + code: '320925', + children: null, + }, + { + name: '东台市', + code: '320981', + children: null, + }, + ], + }, + { + name: '扬州市', + code: '321000', + children: [ + { + name: '广陵区', + code: '321002', + children: null, + }, + { + name: '邗江区', + code: '321003', + children: null, + }, + { + name: '江都区', + code: '321012', + children: null, + }, + { + name: '宝应县', + code: '321023', + children: null, + }, + { + name: '仪征市', + code: '321081', + children: null, + }, + { + name: '高邮市', + code: '321084', + children: null, + }, + ], + }, + { + name: '镇江市', + code: '321100', + children: [ + { + name: '京口区', + code: '321102', + children: null, + }, + { + name: '润州区', + code: '321111', + children: null, + }, + { + name: '丹徒区', + code: '321112', + children: null, + }, + { + name: '丹阳市', + code: '321181', + children: null, + }, + { + name: '扬中市', + code: '321182', + children: null, + }, + { + name: '句容市', + code: '321183', + children: null, + }, + ], + }, + { + name: '泰州市', + code: '321200', + children: [ + { + name: '海陵区', + code: '321202', + children: null, + }, + { + name: '高港区', + code: '321203', + children: null, + }, + { + name: '姜堰区', + code: '321204', + children: null, + }, + { + name: '兴化市', + code: '321281', + children: null, + }, + { + name: '靖江市', + code: '321282', + children: null, + }, + { + name: '泰兴市', + code: '321283', + children: null, + }, + ], + }, + { + name: '宿迁市', + code: '321300', + children: [ + { + name: '宿城区', + code: '321302', + children: null, + }, + { + name: '宿豫区', + code: '321311', + children: null, + }, + { + name: '沭阳县', + code: '321322', + children: null, + }, + { + name: '泗阳县', + code: '321323', + children: null, + }, + { + name: '泗洪县', + code: '321324', + children: null, + }, + ], + }, + ], + }, + { + name: '浙江省', + code: '330000', + children: [ + { + name: '杭州市', + code: '330100', + children: [ + { + name: '上城区', + code: '330102', + children: null, + }, + { + name: '下城区', + code: '330103', + children: null, + }, + { + name: '江干区', + code: '330104', + children: null, + }, + { + name: '拱墅区', + code: '330105', + children: null, + }, + { + name: '西湖区', + code: '330106', + children: null, + }, + { + name: '滨江区', + code: '330108', + children: null, + }, + { + name: '萧山区', + code: '330109', + children: null, + }, + { + name: '余杭区', + code: '330110', + children: null, + }, + { + name: '富阳区', + code: '330111', + children: null, + }, + { + name: '临安区', + code: '330112', + children: null, + }, + { + name: '桐庐县', + code: '330122', + children: null, + }, + { + name: '淳安县', + code: '330127', + children: null, + }, + { + name: '建德市', + code: '330182', + children: null, + }, + ], + }, + { + name: '宁波市', + code: '330200', + children: [ + { + name: '海曙区', + code: '330203', + children: null, + }, + { + name: '江北区', + code: '330205', + children: null, + }, + { + name: '北仑区', + code: '330206', + children: null, + }, + { + name: '镇海区', + code: '330211', + children: null, + }, + { + name: '鄞州区', + code: '330212', + children: null, + }, + { + name: '奉化区', + code: '330213', + children: null, + }, + { + name: '象山县', + code: '330225', + children: null, + }, + { + name: '宁海县', + code: '330226', + children: null, + }, + { + name: '余姚市', + code: '330281', + children: null, + }, + { + name: '慈溪市', + code: '330282', + children: null, + }, + ], + }, + { + name: '温州市', + code: '330300', + children: [ + { + name: '鹿城区', + code: '330302', + children: null, + }, + { + name: '龙湾区', + code: '330303', + children: null, + }, + { + name: '瓯海区', + code: '330304', + children: null, + }, + { + name: '洞头区', + code: '330305', + children: null, + }, + { + name: '永嘉县', + code: '330324', + children: null, + }, + { + name: '平阳县', + code: '330326', + children: null, + }, + { + name: '苍南县', + code: '330327', + children: null, + }, + { + name: '文成县', + code: '330328', + children: null, + }, + { + name: '泰顺县', + code: '330329', + children: null, + }, + { + name: '瑞安市', + code: '330381', + children: null, + }, + { + name: '乐清市', + code: '330382', + children: null, + }, + ], + }, + { + name: '嘉兴市', + code: '330400', + children: [ + { + name: '南湖区', + code: '330402', + children: null, + }, + { + name: '秀洲区', + code: '330411', + children: null, + }, + { + name: '嘉善县', + code: '330421', + children: null, + }, + { + name: '海盐县', + code: '330424', + children: null, + }, + { + name: '海宁市', + code: '330481', + children: null, + }, + { + name: '平湖市', + code: '330482', + children: null, + }, + { + name: '桐乡市', + code: '330483', + children: null, + }, + ], + }, + { + name: '湖州市', + code: '330500', + children: [ + { + name: '吴兴区', + code: '330502', + children: null, + }, + { + name: '南浔区', + code: '330503', + children: null, + }, + { + name: '德清县', + code: '330521', + children: null, + }, + { + name: '长兴县', + code: '330522', + children: null, + }, + { + name: '安吉县', + code: '330523', + children: null, + }, + ], + }, + { + name: '绍兴市', + code: '330600', + children: [ + { + name: '越城区', + code: '330602', + children: null, + }, + { + name: '柯桥区', + code: '330603', + children: null, + }, + { + name: '上虞区', + code: '330604', + children: null, + }, + { + name: '新昌县', + code: '330624', + children: null, + }, + { + name: '诸暨市', + code: '330681', + children: null, + }, + { + name: '嵊州市', + code: '330683', + children: null, + }, + ], + }, + { + name: '金华市', + code: '330700', + children: [ + { + name: '婺城区', + code: '330702', + children: null, + }, + { + name: '金东区', + code: '330703', + children: null, + }, + { + name: '武义县', + code: '330723', + children: null, + }, + { + name: '浦江县', + code: '330726', + children: null, + }, + { + name: '磐安县', + code: '330727', + children: null, + }, + { + name: '兰溪市', + code: '330781', + children: null, + }, + { + name: '义乌市', + code: '330782', + children: null, + }, + { + name: '东阳市', + code: '330783', + children: null, + }, + { + name: '永康市', + code: '330784', + children: null, + }, + ], + }, + { + name: '衢州市', + code: '330800', + children: [ + { + name: '柯城区', + code: '330802', + children: null, + }, + { + name: '衢江区', + code: '330803', + children: null, + }, + { + name: '常山县', + code: '330822', + children: null, + }, + { + name: '开化县', + code: '330824', + children: null, + }, + { + name: '龙游县', + code: '330825', + children: null, + }, + { + name: '江山市', + code: '330881', + children: null, + }, + ], + }, + { + name: '舟山市', + code: '330900', + children: [ + { + name: '定海区', + code: '330902', + children: null, + }, + { + name: '普陀区', + code: '330903', + children: null, + }, + { + name: '岱山县', + code: '330921', + children: null, + }, + { + name: '嵊泗县', + code: '330922', + children: null, + }, + ], + }, + { + name: '台州市', + code: '331000', + children: [ + { + name: '椒江区', + code: '331002', + children: null, + }, + { + name: '黄岩区', + code: '331003', + children: null, + }, + { + name: '路桥区', + code: '331004', + children: null, + }, + { + name: '三门县', + code: '331022', + children: null, + }, + { + name: '天台县', + code: '331023', + children: null, + }, + { + name: '仙居县', + code: '331024', + children: null, + }, + { + name: '温岭市', + code: '331081', + children: null, + }, + { + name: '临海市', + code: '331082', + children: null, + }, + { + name: '玉环市', + code: '331083', + children: null, + }, + ], + }, + { + name: '丽水市', + code: '331100', + children: [ + { + name: '莲都区', + code: '331102', + children: null, + }, + { + name: '青田县', + code: '331121', + children: null, + }, + { + name: '缙云县', + code: '331122', + children: null, + }, + { + name: '遂昌县', + code: '331123', + children: null, + }, + { + name: '松阳县', + code: '331124', + children: null, + }, + { + name: '云和县', + code: '331125', + children: null, + }, + { + name: '庆元县', + code: '331126', + children: null, + }, + { + name: '景宁畲族自治县', + code: '331127', + children: null, + }, + { + name: '龙泉市', + code: '331181', + children: null, + }, + ], + }, + ], + }, + { + name: '安徽省', + code: '340000', + children: [ + { + name: '合肥市', + code: '340100', + children: [ + { + name: '瑶海区', + code: '340102', + children: null, + }, + { + name: '庐阳区', + code: '340103', + children: null, + }, + { + name: '蜀山区', + code: '340104', + children: null, + }, + { + name: '包河区', + code: '340111', + children: null, + }, + { + name: '长丰县', + code: '340121', + children: null, + }, + { + name: '肥东县', + code: '340122', + children: null, + }, + { + name: '肥西县', + code: '340123', + children: null, + }, + { + name: '庐江县', + code: '340124', + children: null, + }, + { + name: '巢湖市', + code: '340181', + children: null, + }, + ], + }, + { + name: '芜湖市', + code: '340200', + children: [ + { + name: '镜湖区', + code: '340202', + children: null, + }, + { + name: '弋江区', + code: '340203', + children: null, + }, + { + name: '鸠江区', + code: '340207', + children: null, + }, + { + name: '三山区', + code: '340208', + children: null, + }, + { + name: '芜湖县', + code: '340221', + children: null, + }, + { + name: '繁昌县', + code: '340222', + children: null, + }, + { + name: '南陵县', + code: '340223', + children: null, + }, + { + name: '无为县', + code: '340225', + children: null, + }, + ], + }, + { + name: '蚌埠市', + code: '340300', + children: [ + { + name: '龙子湖区', + code: '340302', + children: null, + }, + { + name: '蚌山区', + code: '340303', + children: null, + }, + { + name: '禹会区', + code: '340304', + children: null, + }, + { + name: '淮上区', + code: '340311', + children: null, + }, + { + name: '怀远县', + code: '340321', + children: null, + }, + { + name: '五河县', + code: '340322', + children: null, + }, + { + name: '固镇县', + code: '340323', + children: null, + }, + ], + }, + { + name: '淮南市', + code: '340400', + children: [ + { + name: '大通区', + code: '340402', + children: null, + }, + { + name: '田家庵区', + code: '340403', + children: null, + }, + { + name: '谢家集区', + code: '340404', + children: null, + }, + { + name: '八公山区', + code: '340405', + children: null, + }, + { + name: '潘集区', + code: '340406', + children: null, + }, + { + name: '凤台县', + code: '340421', + children: null, + }, + { + name: '寿县', + code: '340422', + children: null, + }, + ], + }, + { + name: '马鞍山市', + code: '340500', + children: [ + { + name: '花山区', + code: '340503', + children: null, + }, + { + name: '雨山区', + code: '340504', + children: null, + }, + { + name: '博望区', + code: '340506', + children: null, + }, + { + name: '当涂县', + code: '340521', + children: null, + }, + { + name: '含山县', + code: '340522', + children: null, + }, + { + name: '和县', + code: '340523', + children: null, + }, + ], + }, + { + name: '淮北市', + code: '340600', + children: [ + { + name: '杜集区', + code: '340602', + children: null, + }, + { + name: '相山区', + code: '340603', + children: null, + }, + { + name: '烈山区', + code: '340604', + children: null, + }, + { + name: '濉溪县', + code: '340621', + children: null, + }, + ], + }, + { + name: '铜陵市', + code: '340700', + children: [ + { + name: '铜官区', + code: '340705', + children: null, + }, + { + name: '义安区', + code: '340706', + children: null, + }, + { + name: '郊区', + code: '340711', + children: null, + }, + { + name: '枞阳县', + code: '340722', + children: null, + }, + ], + }, + { + name: '安庆市', + code: '340800', + children: [ + { + name: '迎江区', + code: '340802', + children: null, + }, + { + name: '大观区', + code: '340803', + children: null, + }, + { + name: '宜秀区', + code: '340811', + children: null, + }, + { + name: '怀宁县', + code: '340822', + children: null, + }, + { + name: '太湖县', + code: '340825', + children: null, + }, + { + name: '宿松县', + code: '340826', + children: null, + }, + { + name: '望江县', + code: '340827', + children: null, + }, + { + name: '岳西县', + code: '340828', + children: null, + }, + { + name: '桐城市', + code: '340881', + children: null, + }, + { + name: '潜山市', + code: '340882', + children: null, + }, + ], + }, + { + name: '黄山市', + code: '341000', + children: [ + { + name: '屯溪区', + code: '341002', + children: null, + }, + { + name: '黄山区', + code: '341003', + children: null, + }, + { + name: '徽州区', + code: '341004', + children: null, + }, + { + name: '歙县', + code: '341021', + children: null, + }, + { + name: '休宁县', + code: '341022', + children: null, + }, + { + name: '黟县', + code: '341023', + children: null, + }, + { + name: '祁门县', + code: '341024', + children: null, + }, + ], + }, + { + name: '滁州市', + code: '341100', + children: [ + { + name: '琅琊区', + code: '341102', + children: null, + }, + { + name: '南谯区', + code: '341103', + children: null, + }, + { + name: '来安县', + code: '341122', + children: null, + }, + { + name: '全椒县', + code: '341124', + children: null, + }, + { + name: '定远县', + code: '341125', + children: null, + }, + { + name: '凤阳县', + code: '341126', + children: null, + }, + { + name: '天长市', + code: '341181', + children: null, + }, + { + name: '明光市', + code: '341182', + children: null, + }, + ], + }, + { + name: '阜阳市', + code: '341200', + children: [ + { + name: '颍州区', + code: '341202', + children: null, + }, + { + name: '颍东区', + code: '341203', + children: null, + }, + { + name: '颍泉区', + code: '341204', + children: null, + }, + { + name: '临泉县', + code: '341221', + children: null, + }, + { + name: '太和县', + code: '341222', + children: null, + }, + { + name: '阜南县', + code: '341225', + children: null, + }, + { + name: '颍上县', + code: '341226', + children: null, + }, + { + name: '界首市', + code: '341282', + children: null, + }, + ], + }, + { + name: '宿州市', + code: '341300', + children: [ + { + name: '埇桥区', + code: '341302', + children: null, + }, + { + name: '砀山县', + code: '341321', + children: null, + }, + { + name: '萧县', + code: '341322', + children: null, + }, + { + name: '灵璧县', + code: '341323', + children: null, + }, + { + name: '泗县', + code: '341324', + children: null, + }, + ], + }, + { + name: '六安市', + code: '341500', + children: [ + { + name: '金安区', + code: '341502', + children: null, + }, + { + name: '裕安区', + code: '341503', + children: null, + }, + { + name: '叶集区', + code: '341504', + children: null, + }, + { + name: '霍邱县', + code: '341522', + children: null, + }, + { + name: '舒城县', + code: '341523', + children: null, + }, + { + name: '金寨县', + code: '341524', + children: null, + }, + { + name: '霍山县', + code: '341525', + children: null, + }, + ], + }, + { + name: '亳州市', + code: '341600', + children: [ + { + name: '谯城区', + code: '341602', + children: null, + }, + { + name: '涡阳县', + code: '341621', + children: null, + }, + { + name: '蒙城县', + code: '341622', + children: null, + }, + { + name: '利辛县', + code: '341623', + children: null, + }, + ], + }, + { + name: '池州市', + code: '341700', + children: [ + { + name: '贵池区', + code: '341702', + children: null, + }, + { + name: '东至县', + code: '341721', + children: null, + }, + { + name: '石台县', + code: '341722', + children: null, + }, + { + name: '青阳县', + code: '341723', + children: null, + }, + ], + }, + { + name: '宣城市', + code: '341800', + children: [ + { + name: '宣州区', + code: '341802', + children: null, + }, + { + name: '郎溪县', + code: '341821', + children: null, + }, + { + name: '广德县', + code: '341822', + children: null, + }, + { + name: '泾县', + code: '341823', + children: null, + }, + { + name: '绩溪县', + code: '341824', + children: null, + }, + { + name: '旌德县', + code: '341825', + children: null, + }, + { + name: '宁国市', + code: '341881', + children: null, + }, + ], + }, + ], + }, + { + name: '福建省', + code: '350000', + children: [ + { + name: '福州市', + code: '350100', + children: [ + { + name: '鼓楼区', + code: '350102', + children: null, + }, + { + name: '台江区', + code: '350103', + children: null, + }, + { + name: '仓山区', + code: '350104', + children: null, + }, + { + name: '马尾区', + code: '350105', + children: null, + }, + { + name: '晋安区', + code: '350111', + children: null, + }, + { + name: '长乐区', + code: '350112', + children: null, + }, + { + name: '闽侯县', + code: '350121', + children: null, + }, + { + name: '连江县', + code: '350122', + children: null, + }, + { + name: '罗源县', + code: '350123', + children: null, + }, + { + name: '闽清县', + code: '350124', + children: null, + }, + { + name: '永泰县', + code: '350125', + children: null, + }, + { + name: '平潭县', + code: '350128', + children: null, + }, + { + name: '福清市', + code: '350181', + children: null, + }, + ], + }, + { + name: '厦门市', + code: '350200', + children: [ + { + name: '思明区', + code: '350203', + children: null, + }, + { + name: '海沧区', + code: '350205', + children: null, + }, + { + name: '湖里区', + code: '350206', + children: null, + }, + { + name: '集美区', + code: '350211', + children: null, + }, + { + name: '同安区', + code: '350212', + children: null, + }, + { + name: '翔安区', + code: '350213', + children: null, + }, + ], + }, + { + name: '莆田市', + code: '350300', + children: [ + { + name: '城厢区', + code: '350302', + children: null, + }, + { + name: '涵江区', + code: '350303', + children: null, + }, + { + name: '荔城区', + code: '350304', + children: null, + }, + { + name: '秀屿区', + code: '350305', + children: null, + }, + { + name: '仙游县', + code: '350322', + children: null, + }, + ], + }, + { + name: '三明市', + code: '350400', + children: [ + { + name: '梅列区', + code: '350402', + children: null, + }, + { + name: '三元区', + code: '350403', + children: null, + }, + { + name: '明溪县', + code: '350421', + children: null, + }, + { + name: '清流县', + code: '350423', + children: null, + }, + { + name: '宁化县', + code: '350424', + children: null, + }, + { + name: '大田县', + code: '350425', + children: null, + }, + { + name: '尤溪县', + code: '350426', + children: null, + }, + { + name: '沙县', + code: '350427', + children: null, + }, + { + name: '将乐县', + code: '350428', + children: null, + }, + { + name: '泰宁县', + code: '350429', + children: null, + }, + { + name: '建宁县', + code: '350430', + children: null, + }, + { + name: '永安市', + code: '350481', + children: null, + }, + ], + }, + { + name: '泉州市', + code: '350500', + children: [ + { + name: '鲤城区', + code: '350502', + children: null, + }, + { + name: '丰泽区', + code: '350503', + children: null, + }, + { + name: '洛江区', + code: '350504', + children: null, + }, + { + name: '泉港区', + code: '350505', + children: null, + }, + { + name: '惠安县', + code: '350521', + children: null, + }, + { + name: '安溪县', + code: '350524', + children: null, + }, + { + name: '永春县', + code: '350525', + children: null, + }, + { + name: '德化县', + code: '350526', + children: null, + }, + { + name: '金门县', + code: '350527', + children: null, + }, + { + name: '石狮市', + code: '350581', + children: null, + }, + { + name: '晋江市', + code: '350582', + children: null, + }, + { + name: '南安市', + code: '350583', + children: null, + }, + ], + }, + { + name: '漳州市', + code: '350600', + children: [ + { + name: '芗城区', + code: '350602', + children: null, + }, + { + name: '龙文区', + code: '350603', + children: null, + }, + { + name: '云霄县', + code: '350622', + children: null, + }, + { + name: '漳浦县', + code: '350623', + children: null, + }, + { + name: '诏安县', + code: '350624', + children: null, + }, + { + name: '长泰县', + code: '350625', + children: null, + }, + { + name: '东山县', + code: '350626', + children: null, + }, + { + name: '南靖县', + code: '350627', + children: null, + }, + { + name: '平和县', + code: '350628', + children: null, + }, + { + name: '华安县', + code: '350629', + children: null, + }, + { + name: '龙海市', + code: '350681', + children: null, + }, + ], + }, + { + name: '南平市', + code: '350700', + children: [ + { + name: '延平区', + code: '350702', + children: null, + }, + { + name: '建阳区', + code: '350703', + children: null, + }, + { + name: '顺昌县', + code: '350721', + children: null, + }, + { + name: '浦城县', + code: '350722', + children: null, + }, + { + name: '光泽县', + code: '350723', + children: null, + }, + { + name: '松溪县', + code: '350724', + children: null, + }, + { + name: '政和县', + code: '350725', + children: null, + }, + { + name: '邵武市', + code: '350781', + children: null, + }, + { + name: '武夷山市', + code: '350782', + children: null, + }, + { + name: '建瓯市', + code: '350783', + children: null, + }, + ], + }, + { + name: '龙岩市', + code: '350800', + children: [ + { + name: '新罗区', + code: '350802', + children: null, + }, + { + name: '永定区', + code: '350803', + children: null, + }, + { + name: '长汀县', + code: '350821', + children: null, + }, + { + name: '上杭县', + code: '350823', + children: null, + }, + { + name: '武平县', + code: '350824', + children: null, + }, + { + name: '连城县', + code: '350825', + children: null, + }, + { + name: '漳平市', + code: '350881', + children: null, + }, + ], + }, + { + name: '宁德市', + code: '350900', + children: [ + { + name: '蕉城区', + code: '350902', + children: null, + }, + { + name: '霞浦县', + code: '350921', + children: null, + }, + { + name: '古田县', + code: '350922', + children: null, + }, + { + name: '屏南县', + code: '350923', + children: null, + }, + { + name: '寿宁县', + code: '350924', + children: null, + }, + { + name: '周宁县', + code: '350925', + children: null, + }, + { + name: '柘荣县', + code: '350926', + children: null, + }, + { + name: '福安市', + code: '350981', + children: null, + }, + { + name: '福鼎市', + code: '350982', + children: null, + }, + ], + }, + ], + }, + { + name: '江西省', + code: '360000', + children: [ + { + name: '南昌市', + code: '360100', + children: [ + { + name: '东湖区', + code: '360102', + children: null, + }, + { + name: '西湖区', + code: '360103', + children: null, + }, + { + name: '青云谱区', + code: '360104', + children: null, + }, + { + name: '湾里区', + code: '360105', + children: null, + }, + { + name: '青山湖区', + code: '360111', + children: null, + }, + { + name: '新建区', + code: '360112', + children: null, + }, + { + name: '南昌县', + code: '360121', + children: null, + }, + { + name: '安义县', + code: '360123', + children: null, + }, + { + name: '进贤县', + code: '360124', + children: null, + }, + ], + }, + { + name: '景德镇市', + code: '360200', + children: [ + { + name: '昌江区', + code: '360202', + children: null, + }, + { + name: '珠山区', + code: '360203', + children: null, + }, + { + name: '浮梁县', + code: '360222', + children: null, + }, + { + name: '乐平市', + code: '360281', + children: null, + }, + ], + }, + { + name: '萍乡市', + code: '360300', + children: [ + { + name: '安源区', + code: '360302', + children: null, + }, + { + name: '湘东区', + code: '360313', + children: null, + }, + { + name: '莲花县', + code: '360321', + children: null, + }, + { + name: '上栗县', + code: '360322', + children: null, + }, + { + name: '芦溪县', + code: '360323', + children: null, + }, + ], + }, + { + name: '九江市', + code: '360400', + children: [ + { + name: '濂溪区', + code: '360402', + children: null, + }, + { + name: '浔阳区', + code: '360403', + children: null, + }, + { + name: '柴桑区', + code: '360404', + children: null, + }, + { + name: '武宁县', + code: '360423', + children: null, + }, + { + name: '修水县', + code: '360424', + children: null, + }, + { + name: '永修县', + code: '360425', + children: null, + }, + { + name: '德安县', + code: '360426', + children: null, + }, + { + name: '都昌县', + code: '360428', + children: null, + }, + { + name: '湖口县', + code: '360429', + children: null, + }, + { + name: '彭泽县', + code: '360430', + children: null, + }, + { + name: '瑞昌市', + code: '360481', + children: null, + }, + { + name: '共青城市', + code: '360482', + children: null, + }, + { + name: '庐山市', + code: '360483', + children: null, + }, + ], + }, + { + name: '新余市', + code: '360500', + children: [ + { + name: '渝水区', + code: '360502', + children: null, + }, + { + name: '分宜县', + code: '360521', + children: null, + }, + ], + }, + { + name: '鹰潭市', + code: '360600', + children: [ + { + name: '月湖区', + code: '360602', + children: null, + }, + { + name: '余江区', + code: '360603', + children: null, + }, + { + name: '贵溪市', + code: '360681', + children: null, + }, + ], + }, + { + name: '赣州市', + code: '360700', + children: [ + { + name: '章贡区', + code: '360702', + children: null, + }, + { + name: '南康区', + code: '360703', + children: null, + }, + { + name: '赣县区', + code: '360704', + children: null, + }, + { + name: '信丰县', + code: '360722', + children: null, + }, + { + name: '大余县', + code: '360723', + children: null, + }, + { + name: '上犹县', + code: '360724', + children: null, + }, + { + name: '崇义县', + code: '360725', + children: null, + }, + { + name: '安远县', + code: '360726', + children: null, + }, + { + name: '龙南县', + code: '360727', + children: null, + }, + { + name: '定南县', + code: '360728', + children: null, + }, + { + name: '全南县', + code: '360729', + children: null, + }, + { + name: '宁都县', + code: '360730', + children: null, + }, + { + name: '于都县', + code: '360731', + children: null, + }, + { + name: '兴国县', + code: '360732', + children: null, + }, + { + name: '会昌县', + code: '360733', + children: null, + }, + { + name: '寻乌县', + code: '360734', + children: null, + }, + { + name: '石城县', + code: '360735', + children: null, + }, + { + name: '瑞金市', + code: '360781', + children: null, + }, + ], + }, + { + name: '吉安市', + code: '360800', + children: [ + { + name: '吉州区', + code: '360802', + children: null, + }, + { + name: '青原区', + code: '360803', + children: null, + }, + { + name: '吉安县', + code: '360821', + children: null, + }, + { + name: '吉水县', + code: '360822', + children: null, + }, + { + name: '峡江县', + code: '360823', + children: null, + }, + { + name: '新干县', + code: '360824', + children: null, + }, + { + name: '永丰县', + code: '360825', + children: null, + }, + { + name: '泰和县', + code: '360826', + children: null, + }, + { + name: '遂川县', + code: '360827', + children: null, + }, + { + name: '万安县', + code: '360828', + children: null, + }, + { + name: '安福县', + code: '360829', + children: null, + }, + { + name: '永新县', + code: '360830', + children: null, + }, + { + name: '井冈山市', + code: '360881', + children: null, + }, + ], + }, + { + name: '宜春市', + code: '360900', + children: [ + { + name: '袁州区', + code: '360902', + children: null, + }, + { + name: '奉新县', + code: '360921', + children: null, + }, + { + name: '万载县', + code: '360922', + children: null, + }, + { + name: '上高县', + code: '360923', + children: null, + }, + { + name: '宜丰县', + code: '360924', + children: null, + }, + { + name: '靖安县', + code: '360925', + children: null, + }, + { + name: '铜鼓县', + code: '360926', + children: null, + }, + { + name: '丰城市', + code: '360981', + children: null, + }, + { + name: '樟树市', + code: '360982', + children: null, + }, + { + name: '高安市', + code: '360983', + children: null, + }, + ], + }, + { + name: '抚州市', + code: '361000', + children: [ + { + name: '临川区', + code: '361002', + children: null, + }, + { + name: '东乡区', + code: '361003', + children: null, + }, + { + name: '南城县', + code: '361021', + children: null, + }, + { + name: '黎川县', + code: '361022', + children: null, + }, + { + name: '南丰县', + code: '361023', + children: null, + }, + { + name: '崇仁县', + code: '361024', + children: null, + }, + { + name: '乐安县', + code: '361025', + children: null, + }, + { + name: '宜黄县', + code: '361026', + children: null, + }, + { + name: '金溪县', + code: '361027', + children: null, + }, + { + name: '资溪县', + code: '361028', + children: null, + }, + { + name: '广昌县', + code: '361030', + children: null, + }, + ], + }, + { + name: '上饶市', + code: '361100', + children: [ + { + name: '信州区', + code: '361102', + children: null, + }, + { + name: '广丰区', + code: '361103', + children: null, + }, + { + name: '上饶县', + code: '361121', + children: null, + }, + { + name: '玉山县', + code: '361123', + children: null, + }, + { + name: '铅山县', + code: '361124', + children: null, + }, + { + name: '横峰县', + code: '361125', + children: null, + }, + { + name: '弋阳县', + code: '361126', + children: null, + }, + { + name: '余干县', + code: '361127', + children: null, + }, + { + name: '鄱阳县', + code: '361128', + children: null, + }, + { + name: '万年县', + code: '361129', + children: null, + }, + { + name: '婺源县', + code: '361130', + children: null, + }, + { + name: '德兴市', + code: '361181', + children: null, + }, + ], + }, + ], + }, + { + name: '山东省', + code: '370000', + children: [ + { + name: '济南市', + code: '370100', + children: [ + { + name: '历下区', + code: '370102', + children: null, + }, + { + name: '市中区', + code: '370103', + children: null, + }, + { + name: '槐荫区', + code: '370104', + children: null, + }, + { + name: '天桥区', + code: '370105', + children: null, + }, + { + name: '历城区', + code: '370112', + children: null, + }, + { + name: '长清区', + code: '370113', + children: null, + }, + { + name: '章丘区', + code: '370114', + children: null, + }, + { + name: '济阳区', + code: '370115', + children: null, + }, + { + name: '莱芜区', + code: '370116', + children: null, + }, + { + name: '钢城区', + code: '370117', + children: null, + }, + { + name: '平阴县', + code: '370124', + children: null, + }, + { + name: '商河县', + code: '370126', + children: null, + }, + ], + }, + { + name: '青岛市', + code: '370200', + children: [ + { + name: '市南区', + code: '370202', + children: null, + }, + { + name: '市北区', + code: '370203', + children: null, + }, + { + name: '黄岛区', + code: '370211', + children: null, + }, + { + name: '崂山区', + code: '370212', + children: null, + }, + { + name: '李沧区', + code: '370213', + children: null, + }, + { + name: '城阳区', + code: '370214', + children: null, + }, + { + name: '即墨区', + code: '370215', + children: null, + }, + { + name: '胶州市', + code: '370281', + children: null, + }, + { + name: '平度市', + code: '370283', + children: null, + }, + { + name: '莱西市', + code: '370285', + children: null, + }, + ], + }, + { + name: '淄博市', + code: '370300', + children: [ + { + name: '淄川区', + code: '370302', + children: null, + }, + { + name: '张店区', + code: '370303', + children: null, + }, + { + name: '博山区', + code: '370304', + children: null, + }, + { + name: '临淄区', + code: '370305', + children: null, + }, + { + name: '周村区', + code: '370306', + children: null, + }, + { + name: '桓台县', + code: '370321', + children: null, + }, + { + name: '高青县', + code: '370322', + children: null, + }, + { + name: '沂源县', + code: '370323', + children: null, + }, + ], + }, + { + name: '枣庄市', + code: '370400', + children: [ + { + name: '市中区', + code: '370402', + children: null, + }, + { + name: '薛城区', + code: '370403', + children: null, + }, + { + name: '峄城区', + code: '370404', + children: null, + }, + { + name: '台儿庄区', + code: '370405', + children: null, + }, + { + name: '山亭区', + code: '370406', + children: null, + }, + { + name: '滕州市', + code: '370481', + children: null, + }, + ], + }, + { + name: '东营市', + code: '370500', + children: [ + { + name: '东营区', + code: '370502', + children: null, + }, + { + name: '河口区', + code: '370503', + children: null, + }, + { + name: '垦利区', + code: '370505', + children: null, + }, + { + name: '利津县', + code: '370522', + children: null, + }, + { + name: '广饶县', + code: '370523', + children: null, + }, + ], + }, + { + name: '烟台市', + code: '370600', + children: [ + { + name: '芝罘区', + code: '370602', + children: null, + }, + { + name: '福山区', + code: '370611', + children: null, + }, + { + name: '牟平区', + code: '370612', + children: null, + }, + { + name: '莱山区', + code: '370613', + children: null, + }, + { + name: '长岛县', + code: '370634', + children: null, + }, + { + name: '龙口市', + code: '370681', + children: null, + }, + { + name: '莱阳市', + code: '370682', + children: null, + }, + { + name: '莱州市', + code: '370683', + children: null, + }, + { + name: '蓬莱市', + code: '370684', + children: null, + }, + { + name: '招远市', + code: '370685', + children: null, + }, + { + name: '栖霞市', + code: '370686', + children: null, + }, + { + name: '海阳市', + code: '370687', + children: null, + }, + ], + }, + { + name: '潍坊市', + code: '370700', + children: [ + { + name: '潍城区', + code: '370702', + children: null, + }, + { + name: '寒亭区', + code: '370703', + children: null, + }, + { + name: '坊子区', + code: '370704', + children: null, + }, + { + name: '奎文区', + code: '370705', + children: null, + }, + { + name: '临朐县', + code: '370724', + children: null, + }, + { + name: '昌乐县', + code: '370725', + children: null, + }, + { + name: '青州市', + code: '370781', + children: null, + }, + { + name: '诸城市', + code: '370782', + children: null, + }, + { + name: '寿光市', + code: '370783', + children: null, + }, + { + name: '安丘市', + code: '370784', + children: null, + }, + { + name: '高密市', + code: '370785', + children: null, + }, + { + name: '昌邑市', + code: '370786', + children: null, + }, + ], + }, + { + name: '济宁市', + code: '370800', + children: [ + { + name: '任城区', + code: '370811', + children: null, + }, + { + name: '兖州区', + code: '370812', + children: null, + }, + { + name: '微山县', + code: '370826', + children: null, + }, + { + name: '鱼台县', + code: '370827', + children: null, + }, + { + name: '金乡县', + code: '370828', + children: null, + }, + { + name: '嘉祥县', + code: '370829', + children: null, + }, + { + name: '汶上县', + code: '370830', + children: null, + }, + { + name: '泗水县', + code: '370831', + children: null, + }, + { + name: '梁山县', + code: '370832', + children: null, + }, + { + name: '曲阜市', + code: '370881', + children: null, + }, + { + name: '邹城市', + code: '370883', + children: null, + }, + ], + }, + { + name: '泰安市', + code: '370900', + children: [ + { + name: '泰山区', + code: '370902', + children: null, + }, + { + name: '岱岳区', + code: '370911', + children: null, + }, + { + name: '宁阳县', + code: '370921', + children: null, + }, + { + name: '东平县', + code: '370923', + children: null, + }, + { + name: '新泰市', + code: '370982', + children: null, + }, + { + name: '肥城市', + code: '370983', + children: null, + }, + ], + }, + { + name: '威海市', + code: '371000', + children: [ + { + name: '环翠区', + code: '371002', + children: null, + }, + { + name: '文登区', + code: '371003', + children: null, + }, + { + name: '荣成市', + code: '371082', + children: null, + }, + { + name: '乳山市', + code: '371083', + children: null, + }, + ], + }, + { + name: '日照市', + code: '371100', + children: [ + { + name: '东港区', + code: '371102', + children: null, + }, + { + name: '岚山区', + code: '371103', + children: null, + }, + { + name: '五莲县', + code: '371121', + children: null, + }, + { + name: '莒县', + code: '371122', + children: null, + }, + ], + }, + { + name: '临沂市', + code: '371300', + children: [ + { + name: '兰山区', + code: '371302', + children: null, + }, + { + name: '罗庄区', + code: '371311', + children: null, + }, + { + name: '河东区', + code: '371312', + children: null, + }, + { + name: '沂南县', + code: '371321', + children: null, + }, + { + name: '郯城县', + code: '371322', + children: null, + }, + { + name: '沂水县', + code: '371323', + children: null, + }, + { + name: '兰陵县', + code: '371324', + children: null, + }, + { + name: '费县', + code: '371325', + children: null, + }, + { + name: '平邑县', + code: '371326', + children: null, + }, + { + name: '莒南县', + code: '371327', + children: null, + }, + { + name: '蒙阴县', + code: '371328', + children: null, + }, + { + name: '临沭县', + code: '371329', + children: null, + }, + ], + }, + { + name: '德州市', + code: '371400', + children: [ + { + name: '德城区', + code: '371402', + children: null, + }, + { + name: '陵城区', + code: '371403', + children: null, + }, + { + name: '宁津县', + code: '371422', + children: null, + }, + { + name: '庆云县', + code: '371423', + children: null, + }, + { + name: '临邑县', + code: '371424', + children: null, + }, + { + name: '齐河县', + code: '371425', + children: null, + }, + { + name: '平原县', + code: '371426', + children: null, + }, + { + name: '夏津县', + code: '371427', + children: null, + }, + { + name: '武城县', + code: '371428', + children: null, + }, + { + name: '乐陵市', + code: '371481', + children: null, + }, + { + name: '禹城市', + code: '371482', + children: null, + }, + ], + }, + { + name: '聊城市', + code: '371500', + children: [ + { + name: '东昌府区', + code: '371502', + children: null, + }, + { + name: '阳谷县', + code: '371521', + children: null, + }, + { + name: '莘县', + code: '371522', + children: null, + }, + { + name: '茌平县', + code: '371523', + children: null, + }, + { + name: '东阿县', + code: '371524', + children: null, + }, + { + name: '冠县', + code: '371525', + children: null, + }, + { + name: '高唐县', + code: '371526', + children: null, + }, + { + name: '临清市', + code: '371581', + children: null, + }, + ], + }, + { + name: '滨州市', + code: '371600', + children: [ + { + name: '滨城区', + code: '371602', + children: null, + }, + { + name: '沾化区', + code: '371603', + children: null, + }, + { + name: '惠民县', + code: '371621', + children: null, + }, + { + name: '阳信县', + code: '371622', + children: null, + }, + { + name: '无棣县', + code: '371623', + children: null, + }, + { + name: '博兴县', + code: '371625', + children: null, + }, + { + name: '邹平市', + code: '371681', + children: null, + }, + ], + }, + { + name: '菏泽市', + code: '371700', + children: [ + { + name: '牡丹区', + code: '371702', + children: null, + }, + { + name: '定陶区', + code: '371703', + children: null, + }, + { + name: '曹县', + code: '371721', + children: null, + }, + { + name: '单县', + code: '371722', + children: null, + }, + { + name: '成武县', + code: '371723', + children: null, + }, + { + name: '巨野县', + code: '371724', + children: null, + }, + { + name: '郓城县', + code: '371725', + children: null, + }, + { + name: '鄄城县', + code: '371726', + children: null, + }, + { + name: '东明县', + code: '371728', + children: null, + }, + ], + }, + ], + }, + { + name: '河南省', + code: '410000', + children: [ + { + name: '郑州市', + code: '410100', + children: [ + { + name: '中原区', + code: '410102', + children: null, + }, + { + name: '二七区', + code: '410103', + children: null, + }, + { + name: '管城回族区', + code: '410104', + children: null, + }, + { + name: '金水区', + code: '410105', + children: null, + }, + { + name: '上街区', + code: '410106', + children: null, + }, + { + name: '惠济区', + code: '410108', + children: null, + }, + { + name: '中牟县', + code: '410122', + children: null, + }, + { + name: '巩义市', + code: '410181', + children: null, + }, + { + name: '荥阳市', + code: '410182', + children: null, + }, + { + name: '新密市', + code: '410183', + children: null, + }, + { + name: '新郑市', + code: '410184', + children: null, + }, + { + name: '登封市', + code: '410185', + children: null, + }, + ], + }, + { + name: '开封市', + code: '410200', + children: [ + { + name: '龙亭区', + code: '410202', + children: null, + }, + { + name: '顺河回族区', + code: '410203', + children: null, + }, + { + name: '鼓楼区', + code: '410204', + children: null, + }, + { + name: '禹王台区', + code: '410205', + children: null, + }, + { + name: '祥符区', + code: '410212', + children: null, + }, + { + name: '杞县', + code: '410221', + children: null, + }, + { + name: '通许县', + code: '410222', + children: null, + }, + { + name: '尉氏县', + code: '410223', + children: null, + }, + { + name: '兰考县', + code: '410225', + children: null, + }, + ], + }, + { + name: '洛阳市', + code: '410300', + children: [ + { + name: '老城区', + code: '410302', + children: null, + }, + { + name: '西工区', + code: '410303', + children: null, + }, + { + name: '瀍河回族区', + code: '410304', + children: null, + }, + { + name: '涧西区', + code: '410305', + children: null, + }, + { + name: '吉利区', + code: '410306', + children: null, + }, + { + name: '洛龙区', + code: '410311', + children: null, + }, + { + name: '孟津县', + code: '410322', + children: null, + }, + { + name: '新安县', + code: '410323', + children: null, + }, + { + name: '栾川县', + code: '410324', + children: null, + }, + { + name: '嵩县', + code: '410325', + children: null, + }, + { + name: '汝阳县', + code: '410326', + children: null, + }, + { + name: '宜阳县', + code: '410327', + children: null, + }, + { + name: '洛宁县', + code: '410328', + children: null, + }, + { + name: '伊川县', + code: '410329', + children: null, + }, + { + name: '偃师市', + code: '410381', + children: null, + }, + ], + }, + { + name: '平顶山市', + code: '410400', + children: [ + { + name: '新华区', + code: '410402', + children: null, + }, + { + name: '卫东区', + code: '410403', + children: null, + }, + { + name: '石龙区', + code: '410404', + children: null, + }, + { + name: '湛河区', + code: '410411', + children: null, + }, + { + name: '宝丰县', + code: '410421', + children: null, + }, + { + name: '叶县', + code: '410422', + children: null, + }, + { + name: '鲁山县', + code: '410423', + children: null, + }, + { + name: '郏县', + code: '410425', + children: null, + }, + { + name: '舞钢市', + code: '410481', + children: null, + }, + { + name: '汝州市', + code: '410482', + children: null, + }, + ], + }, + { + name: '安阳市', + code: '410500', + children: [ + { + name: '文峰区', + code: '410502', + children: null, + }, + { + name: '北关区', + code: '410503', + children: null, + }, + { + name: '殷都区', + code: '410505', + children: null, + }, + { + name: '龙安区', + code: '410506', + children: null, + }, + { + name: '安阳县', + code: '410522', + children: null, + }, + { + name: '汤阴县', + code: '410523', + children: null, + }, + { + name: '滑县', + code: '410526', + children: null, + }, + { + name: '内黄县', + code: '410527', + children: null, + }, + { + name: '林州市', + code: '410581', + children: null, + }, + ], + }, + { + name: '鹤壁市', + code: '410600', + children: [ + { + name: '鹤山区', + code: '410602', + children: null, + }, + { + name: '山城区', + code: '410603', + children: null, + }, + { + name: '淇滨区', + code: '410611', + children: null, + }, + { + name: '浚县', + code: '410621', + children: null, + }, + { + name: '淇县', + code: '410622', + children: null, + }, + ], + }, + { + name: '新乡市', + code: '410700', + children: [ + { + name: '红旗区', + code: '410702', + children: null, + }, + { + name: '卫滨区', + code: '410703', + children: null, + }, + { + name: '凤泉区', + code: '410704', + children: null, + }, + { + name: '牧野区', + code: '410711', + children: null, + }, + { + name: '新乡县', + code: '410721', + children: null, + }, + { + name: '获嘉县', + code: '410724', + children: null, + }, + { + name: '原阳县', + code: '410725', + children: null, + }, + { + name: '延津县', + code: '410726', + children: null, + }, + { + name: '封丘县', + code: '410727', + children: null, + }, + { + name: '长垣县', + code: '410728', + children: null, + }, + { + name: '卫辉市', + code: '410781', + children: null, + }, + { + name: '辉县市', + code: '410782', + children: null, + }, + ], + }, + { + name: '焦作市', + code: '410800', + children: [ + { + name: '解放区', + code: '410802', + children: null, + }, + { + name: '中站区', + code: '410803', + children: null, + }, + { + name: '马村区', + code: '410804', + children: null, + }, + { + name: '山阳区', + code: '410811', + children: null, + }, + { + name: '修武县', + code: '410821', + children: null, + }, + { + name: '博爱县', + code: '410822', + children: null, + }, + { + name: '武陟县', + code: '410823', + children: null, + }, + { + name: '温县', + code: '410825', + children: null, + }, + { + name: '沁阳市', + code: '410882', + children: null, + }, + { + name: '孟州市', + code: '410883', + children: null, + }, + ], + }, + { + name: '濮阳市', + code: '410900', + children: [ + { + name: '华龙区', + code: '410902', + children: null, + }, + { + name: '清丰县', + code: '410922', + children: null, + }, + { + name: '南乐县', + code: '410923', + children: null, + }, + { + name: '范县', + code: '410926', + children: null, + }, + { + name: '台前县', + code: '410927', + children: null, + }, + { + name: '濮阳县', + code: '410928', + children: null, + }, + ], + }, + { + name: '许昌市', + code: '411000', + children: [ + { + name: '魏都区', + code: '411002', + children: null, + }, + { + name: '建安区', + code: '411003', + children: null, + }, + { + name: '鄢陵县', + code: '411024', + children: null, + }, + { + name: '襄城县', + code: '411025', + children: null, + }, + { + name: '禹州市', + code: '411081', + children: null, + }, + { + name: '长葛市', + code: '411082', + children: null, + }, + ], + }, + { + name: '漯河市', + code: '411100', + children: [ + { + name: '源汇区', + code: '411102', + children: null, + }, + { + name: '郾城区', + code: '411103', + children: null, + }, + { + name: '召陵区', + code: '411104', + children: null, + }, + { + name: '舞阳县', + code: '411121', + children: null, + }, + { + name: '临颍县', + code: '411122', + children: null, + }, + ], + }, + { + name: '三门峡市', + code: '411200', + children: [ + { + name: '湖滨区', + code: '411202', + children: null, + }, + { + name: '陕州区', + code: '411203', + children: null, + }, + { + name: '渑池县', + code: '411221', + children: null, + }, + { + name: '卢氏县', + code: '411224', + children: null, + }, + { + name: '义马市', + code: '411281', + children: null, + }, + { + name: '灵宝市', + code: '411282', + children: null, + }, + ], + }, + { + name: '南阳市', + code: '411300', + children: [ + { + name: '宛城区', + code: '411302', + children: null, + }, + { + name: '卧龙区', + code: '411303', + children: null, + }, + { + name: '南召县', + code: '411321', + children: null, + }, + { + name: '方城县', + code: '411322', + children: null, + }, + { + name: '西峡县', + code: '411323', + children: null, + }, + { + name: '镇平县', + code: '411324', + children: null, + }, + { + name: '内乡县', + code: '411325', + children: null, + }, + { + name: '淅川县', + code: '411326', + children: null, + }, + { + name: '社旗县', + code: '411327', + children: null, + }, + { + name: '唐河县', + code: '411328', + children: null, + }, + { + name: '新野县', + code: '411329', + children: null, + }, + { + name: '桐柏县', + code: '411330', + children: null, + }, + { + name: '邓州市', + code: '411381', + children: null, + }, + ], + }, + { + name: '商丘市', + code: '411400', + children: [ + { + name: '梁园区', + code: '411402', + children: null, + }, + { + name: '睢阳区', + code: '411403', + children: null, + }, + { + name: '民权县', + code: '411421', + children: null, + }, + { + name: '睢县', + code: '411422', + children: null, + }, + { + name: '宁陵县', + code: '411423', + children: null, + }, + { + name: '柘城县', + code: '411424', + children: null, + }, + { + name: '虞城县', + code: '411425', + children: null, + }, + { + name: '夏邑县', + code: '411426', + children: null, + }, + { + name: '永城市', + code: '411481', + children: null, + }, + ], + }, + { + name: '信阳市', + code: '411500', + children: [ + { + name: '浉河区', + code: '411502', + children: null, + }, + { + name: '平桥区', + code: '411503', + children: null, + }, + { + name: '罗山县', + code: '411521', + children: null, + }, + { + name: '光山县', + code: '411522', + children: null, + }, + { + name: '新县', + code: '411523', + children: null, + }, + { + name: '商城县', + code: '411524', + children: null, + }, + { + name: '固始县', + code: '411525', + children: null, + }, + { + name: '潢川县', + code: '411526', + children: null, + }, + { + name: '淮滨县', + code: '411527', + children: null, + }, + { + name: '息县', + code: '411528', + children: null, + }, + ], + }, + { + name: '周口市', + code: '411600', + children: [ + { + name: '川汇区', + code: '411602', + children: null, + }, + { + name: '扶沟县', + code: '411621', + children: null, + }, + { + name: '西华县', + code: '411622', + children: null, + }, + { + name: '商水县', + code: '411623', + children: null, + }, + { + name: '沈丘县', + code: '411624', + children: null, + }, + { + name: '郸城县', + code: '411625', + children: null, + }, + { + name: '淮阳县', + code: '411626', + children: null, + }, + { + name: '太康县', + code: '411627', + children: null, + }, + { + name: '鹿邑县', + code: '411628', + children: null, + }, + { + name: '项城市', + code: '411681', + children: null, + }, + ], + }, + { + name: '驻马店市', + code: '411700', + children: [ + { + name: '驿城区', + code: '411702', + children: null, + }, + { + name: '西平县', + code: '411721', + children: null, + }, + { + name: '上蔡县', + code: '411722', + children: null, + }, + { + name: '平舆县', + code: '411723', + children: null, + }, + { + name: '正阳县', + code: '411724', + children: null, + }, + { + name: '确山县', + code: '411725', + children: null, + }, + { + name: '泌阳县', + code: '411726', + children: null, + }, + { + name: '汝南县', + code: '411727', + children: null, + }, + { + name: '遂平县', + code: '411728', + children: null, + }, + { + name: '新蔡县', + code: '411729', + children: null, + }, + ], + }, + { + name: '济源市', + code: '419001', + children: [ + { + name: '沁园街道', + code: '419001001', + children: null, + }, + { + name: '济水街道', + code: '419001002', + children: null, + }, + { + name: '北海街道', + code: '419001003', + children: null, + }, + { + name: '天坛街道', + code: '419001004', + children: null, + }, + { + name: '玉泉街道', + code: '419001005', + children: null, + }, + { + name: '克井镇', + code: '419001100', + children: null, + }, + { + name: '五龙口镇', + code: '419001101', + children: null, + }, + { + name: '轵城镇', + code: '419001102', + children: null, + }, + { + name: '承留镇', + code: '419001103', + children: null, + }, + { + name: '邵原镇', + code: '419001104', + children: null, + }, + { + name: '坡头镇', + code: '419001105', + children: null, + }, + { + name: '梨林镇', + code: '419001106', + children: null, + }, + { + name: '大峪镇', + code: '419001107', + children: null, + }, + { + name: '思礼镇', + code: '419001108', + children: null, + }, + { + name: '王屋镇', + code: '419001109', + children: null, + }, + { + name: '下冶镇', + code: '419001110', + children: null, + }, + ], + }, + ], + }, + { + name: '湖北省', + code: '420000', + children: [ + { + name: '武汉市', + code: '420100', + children: [ + { + name: '江岸区', + code: '420102', + children: null, + }, + { + name: '江汉区', + code: '420103', + children: null, + }, + { + name: '硚口区', + code: '420104', + children: null, + }, + { + name: '汉阳区', + code: '420105', + children: null, + }, + { + name: '武昌区', + code: '420106', + children: null, + }, + { + name: '青山区', + code: '420107', + children: null, + }, + { + name: '洪山区', + code: '420111', + children: null, + }, + { + name: '东西湖区', + code: '420112', + children: null, + }, + { + name: '汉南区', + code: '420113', + children: null, + }, + { + name: '蔡甸区', + code: '420114', + children: null, + }, + { + name: '江夏区', + code: '420115', + children: null, + }, + { + name: '黄陂区', + code: '420116', + children: null, + }, + { + name: '新洲区', + code: '420117', + children: null, + }, + ], + }, + { + name: '黄石市', + code: '420200', + children: [ + { + name: '黄石港区', + code: '420202', + children: null, + }, + { + name: '西塞山区', + code: '420203', + children: null, + }, + { + name: '下陆区', + code: '420204', + children: null, + }, + { + name: '铁山区', + code: '420205', + children: null, + }, + { + name: '阳新县', + code: '420222', + children: null, + }, + { + name: '大冶市', + code: '420281', + children: null, + }, + ], + }, + { + name: '十堰市', + code: '420300', + children: [ + { + name: '茅箭区', + code: '420302', + children: null, + }, + { + name: '张湾区', + code: '420303', + children: null, + }, + { + name: '郧阳区', + code: '420304', + children: null, + }, + { + name: '郧西县', + code: '420322', + children: null, + }, + { + name: '竹山县', + code: '420323', + children: null, + }, + { + name: '竹溪县', + code: '420324', + children: null, + }, + { + name: '房县', + code: '420325', + children: null, + }, + { + name: '丹江口市', + code: '420381', + children: null, + }, + ], + }, + { + name: '宜昌市', + code: '420500', + children: [ + { + name: '西陵区', + code: '420502', + children: null, + }, + { + name: '伍家岗区', + code: '420503', + children: null, + }, + { + name: '点军区', + code: '420504', + children: null, + }, + { + name: '猇亭区', + code: '420505', + children: null, + }, + { + name: '夷陵区', + code: '420506', + children: null, + }, + { + name: '远安县', + code: '420525', + children: null, + }, + { + name: '兴山县', + code: '420526', + children: null, + }, + { + name: '秭归县', + code: '420527', + children: null, + }, + { + name: '长阳土家族自治县', + code: '420528', + children: null, + }, + { + name: '五峰土家族自治县', + code: '420529', + children: null, + }, + { + name: '宜都市', + code: '420581', + children: null, + }, + { + name: '当阳市', + code: '420582', + children: null, + }, + { + name: '枝江市', + code: '420583', + children: null, + }, + ], + }, + { + name: '襄阳市', + code: '420600', + children: [ + { + name: '襄城区', + code: '420602', + children: null, + }, + { + name: '樊城区', + code: '420606', + children: null, + }, + { + name: '襄州区', + code: '420607', + children: null, + }, + { + name: '南漳县', + code: '420624', + children: null, + }, + { + name: '谷城县', + code: '420625', + children: null, + }, + { + name: '保康县', + code: '420626', + children: null, + }, + { + name: '老河口市', + code: '420682', + children: null, + }, + { + name: '枣阳市', + code: '420683', + children: null, + }, + { + name: '宜城市', + code: '420684', + children: null, + }, + ], + }, + { + name: '鄂州市', + code: '420700', + children: [ + { + name: '梁子湖区', + code: '420702', + children: null, + }, + { + name: '华容区', + code: '420703', + children: null, + }, + { + name: '鄂城区', + code: '420704', + children: null, + }, + ], + }, + { + name: '荆门市', + code: '420800', + children: [ + { + name: '东宝区', + code: '420802', + children: null, + }, + { + name: '掇刀区', + code: '420804', + children: null, + }, + { + name: '沙洋县', + code: '420822', + children: null, + }, + { + name: '钟祥市', + code: '420881', + children: null, + }, + { + name: '京山市', + code: '420882', + children: null, + }, + ], + }, + { + name: '孝感市', + code: '420900', + children: [ + { + name: '孝南区', + code: '420902', + children: null, + }, + { + name: '孝昌县', + code: '420921', + children: null, + }, + { + name: '大悟县', + code: '420922', + children: null, + }, + { + name: '云梦县', + code: '420923', + children: null, + }, + { + name: '应城市', + code: '420981', + children: null, + }, + { + name: '安陆市', + code: '420982', + children: null, + }, + { + name: '汉川市', + code: '420984', + children: null, + }, + ], + }, + { + name: '荆州市', + code: '421000', + children: [ + { + name: '沙市区', + code: '421002', + children: null, + }, + { + name: '荆州区', + code: '421003', + children: null, + }, + { + name: '公安县', + code: '421022', + children: null, + }, + { + name: '监利县', + code: '421023', + children: null, + }, + { + name: '江陵县', + code: '421024', + children: null, + }, + { + name: '石首市', + code: '421081', + children: null, + }, + { + name: '洪湖市', + code: '421083', + children: null, + }, + { + name: '松滋市', + code: '421087', + children: null, + }, + ], + }, + { + name: '黄冈市', + code: '421100', + children: [ + { + name: '黄州区', + code: '421102', + children: null, + }, + { + name: '团风县', + code: '421121', + children: null, + }, + { + name: '红安县', + code: '421122', + children: null, + }, + { + name: '罗田县', + code: '421123', + children: null, + }, + { + name: '英山县', + code: '421124', + children: null, + }, + { + name: '浠水县', + code: '421125', + children: null, + }, + { + name: '蕲春县', + code: '421126', + children: null, + }, + { + name: '黄梅县', + code: '421127', + children: null, + }, + { + name: '麻城市', + code: '421181', + children: null, + }, + { + name: '武穴市', + code: '421182', + children: null, + }, + ], + }, + { + name: '咸宁市', + code: '421200', + children: [ + { + name: '咸安区', + code: '421202', + children: null, + }, + { + name: '嘉鱼县', + code: '421221', + children: null, + }, + { + name: '通城县', + code: '421222', + children: null, + }, + { + name: '崇阳县', + code: '421223', + children: null, + }, + { + name: '通山县', + code: '421224', + children: null, + }, + { + name: '赤壁市', + code: '421281', + children: null, + }, + ], + }, + { + name: '随州市', + code: '421300', + children: [ + { + name: '曾都区', + code: '421303', + children: null, + }, + { + name: '随县', + code: '421321', + children: null, + }, + { + name: '广水市', + code: '421381', + children: null, + }, + ], + }, + { + name: '恩施土家族苗族自治州', + code: '422800', + children: [ + { + name: '恩施市', + code: '422801', + children: null, + }, + { + name: '利川市', + code: '422802', + children: null, + }, + { + name: '建始县', + code: '422822', + children: null, + }, + { + name: '巴东县', + code: '422823', + children: null, + }, + { + name: '宣恩县', + code: '422825', + children: null, + }, + { + name: '咸丰县', + code: '422826', + children: null, + }, + { + name: '来凤县', + code: '422827', + children: null, + }, + { + name: '鹤峰县', + code: '422828', + children: null, + }, + ], + }, + { + name: '仙桃市', + code: '429004', + children: [ + { + name: '沙嘴街道', + code: '429004001', + children: null, + }, + { + name: '干河街道', + code: '429004002', + children: null, + }, + { + name: '龙华山街道', + code: '429004003', + children: null, + }, + { + name: '郑场镇', + code: '429004100', + children: null, + }, + { + name: '毛嘴镇', + code: '429004101', + children: null, + }, + { + name: '豆河镇', + code: '429004102', + children: null, + }, + { + name: '三伏潭镇', + code: '429004103', + children: null, + }, + { + name: '胡场镇', + code: '429004104', + children: null, + }, + { + name: '长倘口镇', + code: '429004105', + children: null, + }, + { + name: '西流河镇', + code: '429004106', + children: null, + }, + { + name: '沙湖镇', + code: '429004107', + children: null, + }, + { + name: '杨林尾镇', + code: '429004108', + children: null, + }, + { + name: '彭场镇', + code: '429004109', + children: null, + }, + { + name: '张沟镇', + code: '429004110', + children: null, + }, + { + name: '郭河镇', + code: '429004111', + children: null, + }, + { + name: '沔城回族镇', + code: '429004112', + children: null, + }, + { + name: '通海口镇', + code: '429004113', + children: null, + }, + { + name: '陈场镇', + code: '429004114', + children: null, + }, + { + name: '工业园区', + code: '429004400', + children: null, + }, + { + name: '九合垸原种场', + code: '429004401', + children: null, + }, + { + name: '五湖渔场', + code: '429004404', + children: null, + }, + { + name: '赵西垸林场', + code: '429004405', + children: null, + }, + { + name: '畜禽良种场', + code: '429004407', + children: null, + }, + ], + }, + { + name: '潜江市', + code: '429005', + children: [ + { + name: '园林街道', + code: '429005001', + children: null, + }, + { + name: '周矶街道', + code: '429005003', + children: null, + }, + { + name: '广华街道', + code: '429005004', + children: null, + }, + { + name: '泰丰街道', + code: '429005005', + children: null, + }, + { + name: '高场街道', + code: '429005006', + children: null, + }, + { + name: '竹根滩镇', + code: '429005100', + children: null, + }, + { + name: '渔洋镇', + code: '429005101', + children: null, + }, + { + name: '王场镇', + code: '429005102', + children: null, + }, + { + name: '高石碑镇', + code: '429005103', + children: null, + }, + { + name: '熊口镇', + code: '429005104', + children: null, + }, + { + name: '老新镇', + code: '429005105', + children: null, + }, + { + name: '浩口镇', + code: '429005106', + children: null, + }, + { + name: '积玉口镇', + code: '429005107', + children: null, + }, + { + name: '张金镇', + code: '429005108', + children: null, + }, + { + name: '龙湾镇', + code: '429005109', + children: null, + }, + { + name: '后湖管理区', + code: '429005451', + children: null, + }, + { + name: '熊口管理区', + code: '429005452', + children: null, + }, + { + name: '总口管理区', + code: '429005453', + children: null, + }, + { + name: '白鹭湖管理区', + code: '429005454', + children: null, + }, + { + name: '运粮湖管理区', + code: '429005455', + children: null, + }, + { + name: '杨市街道', + code: '429005900', + children: null, + }, + { + name: '广华寺农场', + code: '429005950', + children: null, + }, + ], + }, + { + name: '天门市', + code: '429006', + children: [ + { + name: '竟陵街道', + code: '429006001', + children: null, + }, + { + name: '侨乡街道开发区', + code: '429006002', + children: null, + }, + { + name: '杨林街道', + code: '429006003', + children: null, + }, + { + name: '多宝镇', + code: '429006100', + children: null, + }, + { + name: '拖市镇', + code: '429006101', + children: null, + }, + { + name: '张港镇', + code: '429006102', + children: null, + }, + { + name: '蒋场镇', + code: '429006103', + children: null, + }, + { + name: '汪场镇', + code: '429006104', + children: null, + }, + { + name: '渔薪镇', + code: '429006105', + children: null, + }, + { + name: '黄潭镇', + code: '429006106', + children: null, + }, + { + name: '岳口镇', + code: '429006107', + children: null, + }, + { + name: '横林镇', + code: '429006108', + children: null, + }, + { + name: '彭市镇', + code: '429006109', + children: null, + }, + { + name: '麻洋镇', + code: '429006110', + children: null, + }, + { + name: '多祥镇', + code: '429006111', + children: null, + }, + { + name: '干驿镇', + code: '429006112', + children: null, + }, + { + name: '马湾镇', + code: '429006113', + children: null, + }, + { + name: '卢市镇', + code: '429006114', + children: null, + }, + { + name: '小板镇', + code: '429006115', + children: null, + }, + { + name: '九真镇', + code: '429006116', + children: null, + }, + { + name: '皂市镇', + code: '429006118', + children: null, + }, + { + name: '胡市镇', + code: '429006119', + children: null, + }, + { + name: '石河镇', + code: '429006120', + children: null, + }, + { + name: '佛子山镇', + code: '429006121', + children: null, + }, + { + name: '净潭乡', + code: '429006201', + children: null, + }, + { + name: '蒋湖农场', + code: '429006450', + children: null, + }, + { + name: '白茅湖农场', + code: '429006451', + children: null, + }, + { + name: '沉湖管委会', + code: '429006452', + children: null, + }, + ], + }, + { + name: '神农架林区', + code: '429021', + children: [ + { + name: '松柏镇', + code: '429021100', + children: null, + }, + { + name: '阳日镇', + code: '429021101', + children: null, + }, + { + name: '木鱼镇', + code: '429021102', + children: null, + }, + { + name: '红坪镇', + code: '429021103', + children: null, + }, + { + name: '新华镇', + code: '429021104', + children: null, + }, + { + name: '九湖镇', + code: '429021105', + children: null, + }, + { + name: '宋洛乡', + code: '429021200', + children: null, + }, + { + name: '下谷坪土家族乡', + code: '429021202', + children: null, + }, + ], + }, + ], + }, + { + name: '湖南省', + code: '430000', + children: [ + { + name: '长沙市', + code: '430100', + children: [ + { + name: '芙蓉区', + code: '430102', + children: null, + }, + { + name: '天心区', + code: '430103', + children: null, + }, + { + name: '岳麓区', + code: '430104', + children: null, + }, + { + name: '开福区', + code: '430105', + children: null, + }, + { + name: '雨花区', + code: '430111', + children: null, + }, + { + name: '望城区', + code: '430112', + children: null, + }, + { + name: '长沙县', + code: '430121', + children: null, + }, + { + name: '浏阳市', + code: '430181', + children: null, + }, + { + name: '宁乡市', + code: '430182', + children: null, + }, + ], + }, + { + name: '株洲市', + code: '430200', + children: [ + { + name: '荷塘区', + code: '430202', + children: null, + }, + { + name: '芦淞区', + code: '430203', + children: null, + }, + { + name: '石峰区', + code: '430204', + children: null, + }, + { + name: '天元区', + code: '430211', + children: null, + }, + { + name: '渌口区', + code: '430212', + children: null, + }, + { + name: '攸县', + code: '430223', + children: null, + }, + { + name: '茶陵县', + code: '430224', + children: null, + }, + { + name: '炎陵县', + code: '430225', + children: null, + }, + { + name: '醴陵市', + code: '430281', + children: null, + }, + ], + }, + { + name: '湘潭市', + code: '430300', + children: [ + { + name: '雨湖区', + code: '430302', + children: null, + }, + { + name: '岳塘区', + code: '430304', + children: null, + }, + { + name: '湘潭县', + code: '430321', + children: null, + }, + { + name: '湘乡市', + code: '430381', + children: null, + }, + { + name: '韶山市', + code: '430382', + children: null, + }, + ], + }, + { + name: '衡阳市', + code: '430400', + children: [ + { + name: '珠晖区', + code: '430405', + children: null, + }, + { + name: '雁峰区', + code: '430406', + children: null, + }, + { + name: '石鼓区', + code: '430407', + children: null, + }, + { + name: '蒸湘区', + code: '430408', + children: null, + }, + { + name: '南岳区', + code: '430412', + children: null, + }, + { + name: '衡阳县', + code: '430421', + children: null, + }, + { + name: '衡南县', + code: '430422', + children: null, + }, + { + name: '衡山县', + code: '430423', + children: null, + }, + { + name: '衡东县', + code: '430424', + children: null, + }, + { + name: '祁东县', + code: '430426', + children: null, + }, + { + name: '耒阳市', + code: '430481', + children: null, + }, + { + name: '常宁市', + code: '430482', + children: null, + }, + ], + }, + { + name: '邵阳市', + code: '430500', + children: [ + { + name: '双清区', + code: '430502', + children: null, + }, + { + name: '大祥区', + code: '430503', + children: null, + }, + { + name: '北塔区', + code: '430511', + children: null, + }, + { + name: '邵东县', + code: '430521', + children: null, + }, + { + name: '新邵县', + code: '430522', + children: null, + }, + { + name: '邵阳县', + code: '430523', + children: null, + }, + { + name: '隆回县', + code: '430524', + children: null, + }, + { + name: '洞口县', + code: '430525', + children: null, + }, + { + name: '绥宁县', + code: '430527', + children: null, + }, + { + name: '新宁县', + code: '430528', + children: null, + }, + { + name: '城步苗族自治县', + code: '430529', + children: null, + }, + { + name: '武冈市', + code: '430581', + children: null, + }, + ], + }, + { + name: '岳阳市', + code: '430600', + children: [ + { + name: '岳阳楼区', + code: '430602', + children: null, + }, + { + name: '云溪区', + code: '430603', + children: null, + }, + { + name: '君山区', + code: '430611', + children: null, + }, + { + name: '岳阳县', + code: '430621', + children: null, + }, + { + name: '华容县', + code: '430623', + children: null, + }, + { + name: '湘阴县', + code: '430624', + children: null, + }, + { + name: '平江县', + code: '430626', + children: null, + }, + { + name: '汨罗市', + code: '430681', + children: null, + }, + { + name: '临湘市', + code: '430682', + children: null, + }, + ], + }, + { + name: '常德市', + code: '430700', + children: [ + { + name: '武陵区', + code: '430702', + children: null, + }, + { + name: '鼎城区', + code: '430703', + children: null, + }, + { + name: '安乡县', + code: '430721', + children: null, + }, + { + name: '汉寿县', + code: '430722', + children: null, + }, + { + name: '澧县', + code: '430723', + children: null, + }, + { + name: '临澧县', + code: '430724', + children: null, + }, + { + name: '桃源县', + code: '430725', + children: null, + }, + { + name: '石门县', + code: '430726', + children: null, + }, + { + name: '津市市', + code: '430781', + children: null, + }, + ], + }, + { + name: '张家界市', + code: '430800', + children: [ + { + name: '永定区', + code: '430802', + children: null, + }, + { + name: '武陵源区', + code: '430811', + children: null, + }, + { + name: '慈利县', + code: '430821', + children: null, + }, + { + name: '桑植县', + code: '430822', + children: null, + }, + ], + }, + { + name: '益阳市', + code: '430900', + children: [ + { + name: '资阳区', + code: '430902', + children: null, + }, + { + name: '赫山区', + code: '430903', + children: null, + }, + { + name: '南县', + code: '430921', + children: null, + }, + { + name: '桃江县', + code: '430922', + children: null, + }, + { + name: '安化县', + code: '430923', + children: null, + }, + { + name: '沅江市', + code: '430981', + children: null, + }, + ], + }, + { + name: '郴州市', + code: '431000', + children: [ + { + name: '北湖区', + code: '431002', + children: null, + }, + { + name: '苏仙区', + code: '431003', + children: null, + }, + { + name: '桂阳县', + code: '431021', + children: null, + }, + { + name: '宜章县', + code: '431022', + children: null, + }, + { + name: '永兴县', + code: '431023', + children: null, + }, + { + name: '嘉禾县', + code: '431024', + children: null, + }, + { + name: '临武县', + code: '431025', + children: null, + }, + { + name: '汝城县', + code: '431026', + children: null, + }, + { + name: '桂东县', + code: '431027', + children: null, + }, + { + name: '安仁县', + code: '431028', + children: null, + }, + { + name: '资兴市', + code: '431081', + children: null, + }, + ], + }, + { + name: '永州市', + code: '431100', + children: [ + { + name: '零陵区', + code: '431102', + children: null, + }, + { + name: '冷水滩区', + code: '431103', + children: null, + }, + { + name: '祁阳县', + code: '431121', + children: null, + }, + { + name: '东安县', + code: '431122', + children: null, + }, + { + name: '双牌县', + code: '431123', + children: null, + }, + { + name: '道县', + code: '431124', + children: null, + }, + { + name: '江永县', + code: '431125', + children: null, + }, + { + name: '宁远县', + code: '431126', + children: null, + }, + { + name: '蓝山县', + code: '431127', + children: null, + }, + { + name: '新田县', + code: '431128', + children: null, + }, + { + name: '江华瑶族自治县', + code: '431129', + children: null, + }, + ], + }, + { + name: '怀化市', + code: '431200', + children: [ + { + name: '鹤城区', + code: '431202', + children: null, + }, + { + name: '中方县', + code: '431221', + children: null, + }, + { + name: '沅陵县', + code: '431222', + children: null, + }, + { + name: '辰溪县', + code: '431223', + children: null, + }, + { + name: '溆浦县', + code: '431224', + children: null, + }, + { + name: '会同县', + code: '431225', + children: null, + }, + { + name: '麻阳苗族自治县', + code: '431226', + children: null, + }, + { + name: '新晃侗族自治县', + code: '431227', + children: null, + }, + { + name: '芷江侗族自治县', + code: '431228', + children: null, + }, + { + name: '靖州苗族侗族自治县', + code: '431229', + children: null, + }, + { + name: '通道侗族自治县', + code: '431230', + children: null, + }, + { + name: '洪江市', + code: '431281', + children: null, + }, + ], + }, + { + name: '娄底市', + code: '431300', + children: [ + { + name: '娄星区', + code: '431302', + children: null, + }, + { + name: '双峰县', + code: '431321', + children: null, + }, + { + name: '新化县', + code: '431322', + children: null, + }, + { + name: '冷水江市', + code: '431381', + children: null, + }, + { + name: '涟源市', + code: '431382', + children: null, + }, + ], + }, + { + name: '湘西土家族苗族自治州', + code: '433100', + children: [ + { + name: '吉首市', + code: '433101', + children: null, + }, + { + name: '泸溪县', + code: '433122', + children: null, + }, + { + name: '凤凰县', + code: '433123', + children: null, + }, + { + name: '花垣县', + code: '433124', + children: null, + }, + { + name: '保靖县', + code: '433125', + children: null, + }, + { + name: '古丈县', + code: '433126', + children: null, + }, + { + name: '永顺县', + code: '433127', + children: null, + }, + { + name: '龙山县', + code: '433130', + children: null, + }, + ], + }, + ], + }, + { + name: '广东省', + code: '440000', + children: [ + { + name: '广州市', + code: '440100', + children: [ + { + name: '荔湾区', + code: '440103', + children: null, + }, + { + name: '越秀区', + code: '440104', + children: null, + }, + { + name: '海珠区', + code: '440105', + children: null, + }, + { + name: '天河区', + code: '440106', + children: null, + }, + { + name: '白云区', + code: '440111', + children: null, + }, + { + name: '黄埔区', + code: '440112', + children: null, + }, + { + name: '番禺区', + code: '440113', + children: null, + }, + { + name: '花都区', + code: '440114', + children: null, + }, + { + name: '南沙区', + code: '440115', + children: null, + }, + { + name: '从化区', + code: '440117', + children: null, + }, + { + name: '增城区', + code: '440118', + children: null, + }, + ], + }, + { + name: '韶关市', + code: '440200', + children: [ + { + name: '武江区', + code: '440203', + children: null, + }, + { + name: '浈江区', + code: '440204', + children: null, + }, + { + name: '曲江区', + code: '440205', + children: null, + }, + { + name: '始兴县', + code: '440222', + children: null, + }, + { + name: '仁化县', + code: '440224', + children: null, + }, + { + name: '翁源县', + code: '440229', + children: null, + }, + { + name: '乳源瑶族自治县', + code: '440232', + children: null, + }, + { + name: '新丰县', + code: '440233', + children: null, + }, + { + name: '乐昌市', + code: '440281', + children: null, + }, + { + name: '南雄市', + code: '440282', + children: null, + }, + ], + }, + { + name: '深圳市', + code: '440300', + children: [ + { + name: '罗湖区', + code: '440303', + children: null, + }, + { + name: '福田区', + code: '440304', + children: null, + }, + { + name: '南山区', + code: '440305', + children: null, + }, + { + name: '宝安区', + code: '440306', + children: null, + }, + { + name: '龙岗区', + code: '440307', + children: null, + }, + { + name: '盐田区', + code: '440308', + children: null, + }, + { + name: '龙华区', + code: '440309', + children: null, + }, + { + name: '坪山区', + code: '440310', + children: null, + }, + { + name: '光明区', + code: '440311', + children: null, + }, + ], + }, + { + name: '珠海市', + code: '440400', + children: [ + { + name: '香洲区', + code: '440402', + children: null, + }, + { + name: '斗门区', + code: '440403', + children: null, + }, + { + name: '金湾区', + code: '440404', + children: null, + }, + { + name: '香洲区横琴校区(由澳门特别行政区实施管辖)', + code: '440499', + children: null, + }, + ], + }, + { + name: '汕头市', + code: '440500', + children: [ + { + name: '龙湖区', + code: '440507', + children: null, + }, + { + name: '金平区', + code: '440511', + children: null, + }, + { + name: '濠江区', + code: '440512', + children: null, + }, + { + name: '潮阳区', + code: '440513', + children: null, + }, + { + name: '潮南区', + code: '440514', + children: null, + }, + { + name: '澄海区', + code: '440515', + children: null, + }, + { + name: '南澳县', + code: '440523', + children: null, + }, + ], + }, + { + name: '佛山市', + code: '440600', + children: [ + { + name: '禅城区', + code: '440604', + children: null, + }, + { + name: '南海区', + code: '440605', + children: null, + }, + { + name: '顺德区', + code: '440606', + children: null, + }, + { + name: '三水区', + code: '440607', + children: null, + }, + { + name: '高明区', + code: '440608', + children: null, + }, + ], + }, + { + name: '江门市', + code: '440700', + children: [ + { + name: '蓬江区', + code: '440703', + children: null, + }, + { + name: '江海区', + code: '440704', + children: null, + }, + { + name: '新会区', + code: '440705', + children: null, + }, + { + name: '台山市', + code: '440781', + children: null, + }, + { + name: '开平市', + code: '440783', + children: null, + }, + { + name: '鹤山市', + code: '440784', + children: null, + }, + { + name: '恩平市', + code: '440785', + children: null, + }, + ], + }, + { + name: '湛江市', + code: '440800', + children: [ + { + name: '赤坎区', + code: '440802', + children: null, + }, + { + name: '霞山区', + code: '440803', + children: null, + }, + { + name: '坡头区', + code: '440804', + children: null, + }, + { + name: '麻章区', + code: '440811', + children: null, + }, + { + name: '遂溪县', + code: '440823', + children: null, + }, + { + name: '徐闻县', + code: '440825', + children: null, + }, + { + name: '廉江市', + code: '440881', + children: null, + }, + { + name: '雷州市', + code: '440882', + children: null, + }, + { + name: '吴川市', + code: '440883', + children: null, + }, + ], + }, + { + name: '茂名市', + code: '440900', + children: [ + { + name: '茂南区', + code: '440902', + children: null, + }, + { + name: '电白区', + code: '440904', + children: null, + }, + { + name: '高州市', + code: '440981', + children: null, + }, + { + name: '化州市', + code: '440982', + children: null, + }, + { + name: '信宜市', + code: '440983', + children: null, + }, + ], + }, + { + name: '肇庆市', + code: '441200', + children: [ + { + name: '端州区', + code: '441202', + children: null, + }, + { + name: '鼎湖区', + code: '441203', + children: null, + }, + { + name: '高要区', + code: '441204', + children: null, + }, + { + name: '广宁县', + code: '441223', + children: null, + }, + { + name: '怀集县', + code: '441224', + children: null, + }, + { + name: '封开县', + code: '441225', + children: null, + }, + { + name: '德庆县', + code: '441226', + children: null, + }, + { + name: '四会市', + code: '441284', + children: null, + }, + ], + }, + { + name: '惠州市', + code: '441300', + children: [ + { + name: '惠城区', + code: '441302', + children: null, + }, + { + name: '惠阳区', + code: '441303', + children: null, + }, + { + name: '博罗县', + code: '441322', + children: null, + }, + { + name: '惠东县', + code: '441323', + children: null, + }, + { + name: '龙门县', + code: '441324', + children: null, + }, + ], + }, + { + name: '梅州市', + code: '441400', + children: [ + { + name: '梅江区', + code: '441402', + children: null, + }, + { + name: '梅县区', + code: '441403', + children: null, + }, + { + name: '大埔县', + code: '441422', + children: null, + }, + { + name: '丰顺县', + code: '441423', + children: null, + }, + { + name: '五华县', + code: '441424', + children: null, + }, + { + name: '平远县', + code: '441426', + children: null, + }, + { + name: '蕉岭县', + code: '441427', + children: null, + }, + { + name: '兴宁市', + code: '441481', + children: null, + }, + ], + }, + { + name: '汕尾市', + code: '441500', + children: [ + { + name: '城区', + code: '441502', + children: null, + }, + { + name: '海丰县', + code: '441521', + children: null, + }, + { + name: '陆河县', + code: '441523', + children: null, + }, + { + name: '陆丰市', + code: '441581', + children: null, + }, + ], + }, + { + name: '河源市', + code: '441600', + children: [ + { + name: '源城区', + code: '441602', + children: null, + }, + { + name: '紫金县', + code: '441621', + children: null, + }, + { + name: '龙川县', + code: '441622', + children: null, + }, + { + name: '连平县', + code: '441623', + children: null, + }, + { + name: '和平县', + code: '441624', + children: null, + }, + { + name: '东源县', + code: '441625', + children: null, + }, + ], + }, + { + name: '阳江市', + code: '441700', + children: [ + { + name: '江城区', + code: '441702', + children: null, + }, + { + name: '阳东区', + code: '441704', + children: null, + }, + { + name: '阳西县', + code: '441721', + children: null, + }, + { + name: '阳春市', + code: '441781', + children: null, + }, + ], + }, + { + name: '清远市', + code: '441800', + children: [ + { + name: '清城区', + code: '441802', + children: null, + }, + { + name: '清新区', + code: '441803', + children: null, + }, + { + name: '佛冈县', + code: '441821', + children: null, + }, + { + name: '阳山县', + code: '441823', + children: null, + }, + { + name: '连山壮族瑶族自治县', + code: '441825', + children: null, + }, + { + name: '连南瑶族自治县', + code: '441826', + children: null, + }, + { + name: '英德市', + code: '441881', + children: null, + }, + { + name: '连州市', + code: '441882', + children: null, + }, + ], + }, + { + name: '东莞市', + code: '441900', + children: [ + { + name: '东莞市', + code: '441999', + children: null, + }, + ], + }, + { + name: '中山市', + code: '442000', + children: [ + { + name: '中山市', + code: '442099', + children: null, + }, + ], + }, + { + name: '潮州市', + code: '445100', + children: [ + { + name: '湘桥区', + code: '445102', + children: null, + }, + { + name: '潮安区', + code: '445103', + children: null, + }, + { + name: '饶平县', + code: '445122', + children: null, + }, + ], + }, + { + name: '揭阳市', + code: '445200', + children: [ + { + name: '榕城区', + code: '445202', + children: null, + }, + { + name: '揭东区', + code: '445203', + children: null, + }, + { + name: '揭西县', + code: '445222', + children: null, + }, + { + name: '惠来县', + code: '445224', + children: null, + }, + { + name: '普宁市', + code: '445281', + children: null, + }, + ], + }, + { + name: '云浮市', + code: '445300', + children: [ + { + name: '云城区', + code: '445302', + children: null, + }, + { + name: '云安区', + code: '445303', + children: null, + }, + { + name: '新兴县', + code: '445321', + children: null, + }, + { + name: '郁南县', + code: '445322', + children: null, + }, + { + name: '罗定市', + code: '445381', + children: null, + }, + ], + }, + ], + }, + { + name: '广西壮族自治区', + code: '450000', + children: [ + { + name: '南宁市', + code: '450100', + children: [ + { + name: '兴宁区', + code: '450102', + children: null, + }, + { + name: '青秀区', + code: '450103', + children: null, + }, + { + name: '江南区', + code: '450105', + children: null, + }, + { + name: '西乡塘区', + code: '450107', + children: null, + }, + { + name: '良庆区', + code: '450108', + children: null, + }, + { + name: '邕宁区', + code: '450109', + children: null, + }, + { + name: '武鸣区', + code: '450110', + children: null, + }, + { + name: '隆安县', + code: '450123', + children: null, + }, + { + name: '马山县', + code: '450124', + children: null, + }, + { + name: '上林县', + code: '450125', + children: null, + }, + { + name: '宾阳县', + code: '450126', + children: null, + }, + { + name: '横县', + code: '450127', + children: null, + }, + ], + }, + { + name: '柳州市', + code: '450200', + children: [ + { + name: '城中区', + code: '450202', + children: null, + }, + { + name: '鱼峰区', + code: '450203', + children: null, + }, + { + name: '柳南区', + code: '450204', + children: null, + }, + { + name: '柳北区', + code: '450205', + children: null, + }, + { + name: '柳江区', + code: '450206', + children: null, + }, + { + name: '柳城县', + code: '450222', + children: null, + }, + { + name: '鹿寨县', + code: '450223', + children: null, + }, + { + name: '融安县', + code: '450224', + children: null, + }, + { + name: '融水苗族自治县', + code: '450225', + children: null, + }, + { + name: '三江侗族自治县', + code: '450226', + children: null, + }, + ], + }, + { + name: '桂林市', + code: '450300', + children: [ + { + name: '秀峰区', + code: '450302', + children: null, + }, + { + name: '叠彩区', + code: '450303', + children: null, + }, + { + name: '象山区', + code: '450304', + children: null, + }, + { + name: '七星区', + code: '450305', + children: null, + }, + { + name: '雁山区', + code: '450311', + children: null, + }, + { + name: '临桂区', + code: '450312', + children: null, + }, + { + name: '阳朔县', + code: '450321', + children: null, + }, + { + name: '灵川县', + code: '450323', + children: null, + }, + { + name: '全州县', + code: '450324', + children: null, + }, + { + name: '兴安县', + code: '450325', + children: null, + }, + { + name: '永福县', + code: '450326', + children: null, + }, + { + name: '灌阳县', + code: '450327', + children: null, + }, + { + name: '龙胜各族自治县', + code: '450328', + children: null, + }, + { + name: '资源县', + code: '450329', + children: null, + }, + { + name: '平乐县', + code: '450330', + children: null, + }, + { + name: '恭城瑶族自治县', + code: '450332', + children: null, + }, + { + name: '荔浦市', + code: '450381', + children: null, + }, + ], + }, + { + name: '梧州市', + code: '450400', + children: [ + { + name: '万秀区', + code: '450403', + children: null, + }, + { + name: '长洲区', + code: '450405', + children: null, + }, + { + name: '龙圩区', + code: '450406', + children: null, + }, + { + name: '苍梧县', + code: '450421', + children: null, + }, + { + name: '藤县', + code: '450422', + children: null, + }, + { + name: '蒙山县', + code: '450423', + children: null, + }, + { + name: '岑溪市', + code: '450481', + children: null, + }, + ], + }, + { + name: '北海市', + code: '450500', + children: [ + { + name: '海城区', + code: '450502', + children: null, + }, + { + name: '银海区', + code: '450503', + children: null, + }, + { + name: '铁山港区', + code: '450512', + children: null, + }, + { + name: '合浦县', + code: '450521', + children: null, + }, + ], + }, + { + name: '防城港市', + code: '450600', + children: [ + { + name: '港口区', + code: '450602', + children: null, + }, + { + name: '防城区', + code: '450603', + children: null, + }, + { + name: '上思县', + code: '450621', + children: null, + }, + { + name: '东兴市', + code: '450681', + children: null, + }, + ], + }, + { + name: '钦州市', + code: '450700', + children: [ + { + name: '钦南区', + code: '450702', + children: null, + }, + { + name: '钦北区', + code: '450703', + children: null, + }, + { + name: '灵山县', + code: '450721', + children: null, + }, + { + name: '浦北县', + code: '450722', + children: null, + }, + ], + }, + { + name: '贵港市', + code: '450800', + children: [ + { + name: '港北区', + code: '450802', + children: null, + }, + { + name: '港南区', + code: '450803', + children: null, + }, + { + name: '覃塘区', + code: '450804', + children: null, + }, + { + name: '平南县', + code: '450821', + children: null, + }, + { + name: '桂平市', + code: '450881', + children: null, + }, + ], + }, + { + name: '玉林市', + code: '450900', + children: [ + { + name: '玉州区', + code: '450902', + children: null, + }, + { + name: '福绵区', + code: '450903', + children: null, + }, + { + name: '容县', + code: '450921', + children: null, + }, + { + name: '陆川县', + code: '450922', + children: null, + }, + { + name: '博白县', + code: '450923', + children: null, + }, + { + name: '兴业县', + code: '450924', + children: null, + }, + { + name: '北流市', + code: '450981', + children: null, + }, + ], + }, + { + name: '百色市', + code: '451000', + children: [ + { + name: '右江区', + code: '451002', + children: null, + }, + { + name: '田阳县', + code: '451021', + children: null, + }, + { + name: '田东县', + code: '451022', + children: null, + }, + { + name: '平果县', + code: '451023', + children: null, + }, + { + name: '德保县', + code: '451024', + children: null, + }, + { + name: '那坡县', + code: '451026', + children: null, + }, + { + name: '凌云县', + code: '451027', + children: null, + }, + { + name: '乐业县', + code: '451028', + children: null, + }, + { + name: '田林县', + code: '451029', + children: null, + }, + { + name: '西林县', + code: '451030', + children: null, + }, + { + name: '隆林各族自治县', + code: '451031', + children: null, + }, + { + name: '靖西市', + code: '451081', + children: null, + }, + ], + }, + { + name: '贺州市', + code: '451100', + children: [ + { + name: '八步区', + code: '451102', + children: null, + }, + { + name: '平桂区', + code: '451103', + children: null, + }, + { + name: '昭平县', + code: '451121', + children: null, + }, + { + name: '钟山县', + code: '451122', + children: null, + }, + { + name: '富川瑶族自治县', + code: '451123', + children: null, + }, + ], + }, + { + name: '河池市', + code: '451200', + children: [ + { + name: '金城江区', + code: '451202', + children: null, + }, + { + name: '宜州区', + code: '451203', + children: null, + }, + { + name: '南丹县', + code: '451221', + children: null, + }, + { + name: '天峨县', + code: '451222', + children: null, + }, + { + name: '凤山县', + code: '451223', + children: null, + }, + { + name: '东兰县', + code: '451224', + children: null, + }, + { + name: '罗城仫佬族自治县', + code: '451225', + children: null, + }, + { + name: '环江毛南族自治县', + code: '451226', + children: null, + }, + { + name: '巴马瑶族自治县', + code: '451227', + children: null, + }, + { + name: '都安瑶族自治县', + code: '451228', + children: null, + }, + { + name: '大化瑶族自治县', + code: '451229', + children: null, + }, + ], + }, + { + name: '来宾市', + code: '451300', + children: [ + { + name: '兴宾区', + code: '451302', + children: null, + }, + { + name: '忻城县', + code: '451321', + children: null, + }, + { + name: '象州县', + code: '451322', + children: null, + }, + { + name: '武宣县', + code: '451323', + children: null, + }, + { + name: '金秀瑶族自治县', + code: '451324', + children: null, + }, + { + name: '合山市', + code: '451381', + children: null, + }, + ], + }, + { + name: '崇左市', + code: '451400', + children: [ + { + name: '江州区', + code: '451402', + children: null, + }, + { + name: '扶绥县', + code: '451421', + children: null, + }, + { + name: '宁明县', + code: '451422', + children: null, + }, + { + name: '龙州县', + code: '451423', + children: null, + }, + { + name: '大新县', + code: '451424', + children: null, + }, + { + name: '天等县', + code: '451425', + children: null, + }, + { + name: '凭祥市', + code: '451481', + children: null, + }, + ], + }, + ], + }, + { + name: '海南省', + code: '460000', + children: [ + { + name: '海口市', + code: '460100', + children: [ + { + name: '秀英区', + code: '460105', + children: null, + }, + { + name: '龙华区', + code: '460106', + children: null, + }, + { + name: '琼山区', + code: '460107', + children: null, + }, + { + name: '美兰区', + code: '460108', + children: null, + }, + ], + }, + { + name: '三亚市', + code: '460200', + children: [ + { + name: '海棠区', + code: '460202', + children: null, + }, + { + name: '吉阳区', + code: '460203', + children: null, + }, + { + name: '天涯区', + code: '460204', + children: null, + }, + { + name: '崖州区', + code: '460205', + children: null, + }, + ], + }, + { + name: '三沙市', + code: '460300', + children: [ + { + name: '西沙群岛', + code: '460321', + children: null, + }, + { + name: '南沙群岛', + code: '460322', + children: null, + }, + { + name: '中沙群岛的岛礁及其海域', + code: '460323', + children: null, + }, + ], + }, + { + name: '儋州市', + code: '460400', + children: [ + { + name: '儋州市', + code: '460499', + children: null, + }, + ], + }, + { + name: '五指山市', + code: '469001', + children: [ + { + name: '通什镇', + code: '469001100', + children: null, + }, + { + name: '南圣镇', + code: '469001101', + children: null, + }, + { + name: '毛阳镇', + code: '469001102', + children: null, + }, + { + name: '番阳镇', + code: '469001103', + children: null, + }, + { + name: '畅好乡', + code: '469001200', + children: null, + }, + { + name: '毛道乡', + code: '469001201', + children: null, + }, + { + name: '水满乡', + code: '469001202', + children: null, + }, + { + name: '国营畅好农场', + code: '469001400', + children: null, + }, + ], + }, + { + name: '琼海市', + code: '469002', + children: [ + { + name: '嘉积镇', + code: '469002100', + children: null, + }, + { + name: '万泉镇', + code: '469002101', + children: null, + }, + { + name: '石壁镇', + code: '469002102', + children: null, + }, + { + name: '中原镇', + code: '469002103', + children: null, + }, + { + name: '博鳌镇', + code: '469002104', + children: null, + }, + { + name: '阳江镇', + code: '469002105', + children: null, + }, + { + name: '龙江镇', + code: '469002106', + children: null, + }, + { + name: '潭门镇', + code: '469002107', + children: null, + }, + { + name: '塔洋镇', + code: '469002108', + children: null, + }, + { + name: '长坡镇', + code: '469002109', + children: null, + }, + { + name: '大路镇', + code: '469002110', + children: null, + }, + { + name: '会山镇', + code: '469002111', + children: null, + }, + { + name: '东太农场', + code: '469002400', + children: null, + }, + { + name: '南俸农场', + code: '469002401', + children: null, + }, + { + name: '东红农场', + code: '469002402', + children: null, + }, + { + name: '彬村山华侨农场', + code: '469002500', + children: null, + }, + { + name: '东平农场', + code: '469002953', + children: null, + }, + ], + }, + { + name: '文昌市', + code: '469005', + children: [ + { + name: '文城镇', + code: '469005100', + children: null, + }, + { + name: '重兴镇', + code: '469005101', + children: null, + }, + { + name: '蓬莱镇', + code: '469005102', + children: null, + }, + { + name: '会文镇', + code: '469005103', + children: null, + }, + { + name: '东路镇', + code: '469005104', + children: null, + }, + { + name: '潭牛镇', + code: '469005105', + children: null, + }, + { + name: '东阁镇', + code: '469005106', + children: null, + }, + { + name: '文教镇', + code: '469005107', + children: null, + }, + { + name: '东郊镇', + code: '469005108', + children: null, + }, + { + name: '龙楼镇', + code: '469005109', + children: null, + }, + { + name: '昌洒镇', + code: '469005110', + children: null, + }, + { + name: '翁田镇', + code: '469005111', + children: null, + }, + { + name: '抱罗镇', + code: '469005112', + children: null, + }, + { + name: '冯坡镇', + code: '469005113', + children: null, + }, + { + name: '锦山镇', + code: '469005114', + children: null, + }, + { + name: '铺前镇', + code: '469005115', + children: null, + }, + { + name: '公坡镇', + code: '469005116', + children: null, + }, + { + name: '国营南阳农场', + code: '469005401', + children: null, + }, + { + name: '国营罗豆农场', + code: '469005402', + children: null, + }, + ], + }, + { + name: '万宁市', + code: '469006', + children: [ + { + name: '万城镇', + code: '469006100', + children: null, + }, + { + name: '龙滚镇', + code: '469006101', + children: null, + }, + { + name: '和乐镇', + code: '469006102', + children: null, + }, + { + name: '后安镇', + code: '469006103', + children: null, + }, + { + name: '大茂镇', + code: '469006104', + children: null, + }, + { + name: '东澳镇', + code: '469006105', + children: null, + }, + { + name: '礼纪镇', + code: '469006106', + children: null, + }, + { + name: '长丰镇', + code: '469006107', + children: null, + }, + { + name: '山根镇', + code: '469006108', + children: null, + }, + { + name: '北大镇', + code: '469006109', + children: null, + }, + { + name: '南桥镇', + code: '469006110', + children: null, + }, + { + name: '三更罗镇', + code: '469006111', + children: null, + }, + { + name: '国营东兴农场', + code: '469006400', + children: null, + }, + { + name: '兴隆华侨农场', + code: '469006500', + children: null, + }, + { + name: '地方国营六连林场', + code: '469006501', + children: null, + }, + { + name: '东岭农场', + code: '469006951', + children: null, + }, + ], + }, + { + name: '东方市', + code: '469007', + children: [ + { + name: '八所镇', + code: '469007100', + children: null, + }, + { + name: '东河镇', + code: '469007101', + children: null, + }, + { + name: '大田镇', + code: '469007102', + children: null, + }, + { + name: '感城镇', + code: '469007103', + children: null, + }, + { + name: '板桥镇', + code: '469007104', + children: null, + }, + { + name: '三家镇', + code: '469007105', + children: null, + }, + { + name: '四更镇', + code: '469007106', + children: null, + }, + { + name: '新龙镇', + code: '469007107', + children: null, + }, + { + name: '天安乡', + code: '469007200', + children: null, + }, + { + name: '江边乡', + code: '469007201', + children: null, + }, + { + name: '国营广坝农场', + code: '469007400', + children: null, + }, + { + name: '东方华侨农场', + code: '469007500', + children: null, + }, + { + name: '东方农场', + code: '469007950', + children: null, + }, + ], + }, + { + name: '定安县', + code: '469021', + children: [ + { + name: '定城镇', + code: '469021100', + children: null, + }, + { + name: '新竹镇', + code: '469021101', + children: null, + }, + { + name: '龙湖镇', + code: '469021102', + children: null, + }, + { + name: '黄竹镇', + code: '469021103', + children: null, + }, + { + name: '雷鸣镇', + code: '469021104', + children: null, + }, + { + name: '龙门镇', + code: '469021105', + children: null, + }, + { + name: '龙河镇', + code: '469021106', + children: null, + }, + { + name: '岭口镇', + code: '469021107', + children: null, + }, + { + name: '翰林镇', + code: '469021108', + children: null, + }, + { + name: '富文镇', + code: '469021109', + children: null, + }, + { + name: '国营中瑞农场', + code: '469021400', + children: null, + }, + { + name: '国营南海农场', + code: '469021401', + children: null, + }, + { + name: '国营金鸡岭农场', + code: '469021402', + children: null, + }, + { + name: '国营东升农场', + code: '469021403', + children: null, + }, + ], + }, + { + name: '屯昌县', + code: '469022', + children: [ + { + name: '屯城镇', + code: '469022100', + children: null, + }, + { + name: '新兴镇', + code: '469022101', + children: null, + }, + { + name: '枫木镇', + code: '469022102', + children: null, + }, + { + name: '乌坡镇', + code: '469022103', + children: null, + }, + { + name: '南吕镇', + code: '469022104', + children: null, + }, + { + name: '南坤镇', + code: '469022105', + children: null, + }, + { + name: '坡心镇', + code: '469022106', + children: null, + }, + { + name: '西昌镇', + code: '469022107', + children: null, + }, + { + name: '国营中瑞农场', + code: '469022400', + children: null, + }, + { + name: '国营中坤农场', + code: '469022401', + children: null, + }, + { + name: '国营中建农场', + code: '469022950', + children: null, + }, + { + name: '晨星农场', + code: '469022951', + children: null, + }, + { + name: '黄岭农场', + code: '469022952', + children: null, + }, + { + name: '广青农场', + code: '469022954', + children: null, + }, + ], + }, + { + name: '澄迈县', + code: '469023', + children: [ + { + name: '金江镇', + code: '469023100', + children: null, + }, + { + name: '老城镇', + code: '469023101', + children: null, + }, + { + name: '瑞溪镇', + code: '469023102', + children: null, + }, + { + name: '永发镇', + code: '469023103', + children: null, + }, + { + name: '加乐镇', + code: '469023104', + children: null, + }, + { + name: '文儒镇', + code: '469023105', + children: null, + }, + { + name: '中兴镇', + code: '469023106', + children: null, + }, + { + name: '仁兴镇', + code: '469023107', + children: null, + }, + { + name: '福山镇', + code: '469023108', + children: null, + }, + { + name: '桥头镇', + code: '469023109', + children: null, + }, + { + name: '大丰镇', + code: '469023110', + children: null, + }, + { + name: '国营红光农场', + code: '469023400', + children: null, + }, + { + name: '红岗农场', + code: '469023401', + children: null, + }, + { + name: '国营西达农场', + code: '469023402', + children: null, + }, + { + name: '国营金安农场', + code: '469023405', + children: null, + }, + ], + }, + { + name: '临高县', + code: '469024', + children: [ + { + name: '临城镇', + code: '469024100', + children: null, + }, + { + name: '波莲镇', + code: '469024101', + children: null, + }, + { + name: '东英镇', + code: '469024102', + children: null, + }, + { + name: '博厚镇', + code: '469024103', + children: null, + }, + { + name: '皇桐镇', + code: '469024104', + children: null, + }, + { + name: '多文镇', + code: '469024105', + children: null, + }, + { + name: '和舍镇', + code: '469024106', + children: null, + }, + { + name: '南宝镇', + code: '469024107', + children: null, + }, + { + name: '新盈镇', + code: '469024108', + children: null, + }, + { + name: '调楼镇', + code: '469024109', + children: null, + }, + { + name: '国营红华农场', + code: '469024400', + children: null, + }, + { + name: '国营加来农场', + code: '469024401', + children: null, + }, + ], + }, + { + name: '白沙黎族自治县', + code: '469025', + children: [ + { + name: '牙叉镇', + code: '469025100', + children: null, + }, + { + name: '七坊镇', + code: '469025101', + children: null, + }, + { + name: '邦溪镇', + code: '469025102', + children: null, + }, + { + name: '打安镇', + code: '469025103', + children: null, + }, + { + name: '细水乡', + code: '469025200', + children: null, + }, + { + name: '元门乡', + code: '469025201', + children: null, + }, + { + name: '南开乡', + code: '469025202', + children: null, + }, + { + name: '阜龙乡', + code: '469025203', + children: null, + }, + { + name: '青松乡', + code: '469025204', + children: null, + }, + { + name: '金波乡', + code: '469025205', + children: null, + }, + { + name: '荣邦乡', + code: '469025206', + children: null, + }, + { + name: '国营白沙农场', + code: '469025401', + children: null, + }, + { + name: '国营龙江农场', + code: '469025404', + children: null, + }, + { + name: '卫星农场', + code: '469025950', + children: null, + }, + ], + }, + { + name: '昌江黎族自治县', + code: '469026', + children: [ + { + name: '石碌镇', + code: '469026100', + children: null, + }, + { + name: '叉河镇', + code: '469026101', + children: null, + }, + { + name: '十月田镇', + code: '469026102', + children: null, + }, + { + name: '乌烈镇', + code: '469026103', + children: null, + }, + { + name: '昌化镇', + code: '469026104', + children: null, + }, + { + name: '海尾镇', + code: '469026105', + children: null, + }, + { + name: '七叉镇', + code: '469026106', + children: null, + }, + { + name: '王下乡', + code: '469026200', + children: null, + }, + { + name: '国营红林农场', + code: '469026401', + children: null, + }, + { + name: '国营霸王岭林场', + code: '469026500', + children: null, + }, + ], + }, + { + name: '乐东黎族自治县', + code: '469027', + children: [ + { + name: '抱由镇', + code: '469027100', + children: null, + }, + { + name: '万冲镇', + code: '469027101', + children: null, + }, + { + name: '大安镇', + code: '469027102', + children: null, + }, + { + name: '志仲镇', + code: '469027103', + children: null, + }, + { + name: '千家镇', + code: '469027104', + children: null, + }, + { + name: '九所镇', + code: '469027105', + children: null, + }, + { + name: '利国镇', + code: '469027106', + children: null, + }, + { + name: '黄流镇', + code: '469027107', + children: null, + }, + { + name: '佛罗镇', + code: '469027108', + children: null, + }, + { + name: '尖峰镇', + code: '469027109', + children: null, + }, + { + name: '莺歌海镇', + code: '469027110', + children: null, + }, + { + name: '国营山荣农场', + code: '469027401', + children: null, + }, + { + name: '国营乐光农场', + code: '469027402', + children: null, + }, + { + name: '国营保国农场', + code: '469027405', + children: null, + }, + { + name: '福报农场', + code: '469027951', + children: null, + }, + ], + }, + { + name: '陵水黎族自治县', + code: '469028', + children: [ + { + name: '椰林镇', + code: '469028100', + children: null, + }, + { + name: '光坡镇', + code: '469028101', + children: null, + }, + { + name: '三才镇', + code: '469028102', + children: null, + }, + { + name: '英州镇', + code: '469028103', + children: null, + }, + { + name: '隆广镇', + code: '469028104', + children: null, + }, + { + name: '文罗镇', + code: '469028105', + children: null, + }, + { + name: '本号镇', + code: '469028106', + children: null, + }, + { + name: '新村镇', + code: '469028107', + children: null, + }, + { + name: '黎安镇', + code: '469028108', + children: null, + }, + { + name: '提蒙乡', + code: '469028200', + children: null, + }, + { + name: '群英乡', + code: '469028201', + children: null, + }, + { + name: '岭门农场', + code: '469028400', + children: null, + }, + { + name: '国营南平农场', + code: '469028401', + children: null, + }, + ], + }, + { + name: '保亭黎族苗族自治县', + code: '469029', + children: [ + { + name: '保城镇', + code: '469029100', + children: null, + }, + { + name: '什玲镇', + code: '469029101', + children: null, + }, + { + name: '加茂镇', + code: '469029102', + children: null, + }, + { + name: '响水镇', + code: '469029103', + children: null, + }, + { + name: '新政镇', + code: '469029104', + children: null, + }, + { + name: '三道镇', + code: '469029105', + children: null, + }, + { + name: '六弓乡', + code: '469029200', + children: null, + }, + { + name: '南林乡', + code: '469029201', + children: null, + }, + { + name: '毛感乡', + code: '469029202', + children: null, + }, + { + name: '新星农场', + code: '469029401', + children: null, + }, + { + name: '海南保亭热带作物研究所', + code: '469029402', + children: null, + }, + { + name: '国营金江农场', + code: '469029403', + children: null, + }, + { + name: '南茂农场', + code: '469029950', + children: null, + }, + { + name: '通什茶场', + code: '469029952', + children: null, + }, + ], + }, + { + name: '琼中黎族苗族自治县', + code: '469030', + children: [ + { + name: '营根镇', + code: '469030100', + children: null, + }, + { + name: '湾岭镇', + code: '469030101', + children: null, + }, + { + name: '黎母山镇', + code: '469030102', + children: null, + }, + { + name: '和平镇', + code: '469030103', + children: null, + }, + { + name: '长征镇', + code: '469030104', + children: null, + }, + { + name: '红毛镇', + code: '469030105', + children: null, + }, + { + name: '中平镇', + code: '469030106', + children: null, + }, + { + name: '吊罗山乡', + code: '469030200', + children: null, + }, + { + name: '上安乡', + code: '469030201', + children: null, + }, + { + name: '什运乡', + code: '469030202', + children: null, + }, + { + name: '阳江农场', + code: '469030402', + children: null, + }, + { + name: '乌石农场', + code: '469030403', + children: null, + }, + { + name: '岭头茶场', + code: '469030950', + children: null, + }, + { + name: '南方农场', + code: '469030951', + children: null, + }, + ], + }, + ], + }, + { + name: '重庆市', + code: '500000', + children: [ + { + name: '重庆市', + code: '500100', + children: [ + { + name: '万州区', + code: '500101', + children: null, + }, + { + name: '涪陵区', + code: '500102', + children: null, + }, + { + name: '渝中区', + code: '500103', + children: null, + }, + { + name: '大渡口区', + code: '500104', + children: null, + }, + { + name: '江北区', + code: '500105', + children: null, + }, + { + name: '沙坪坝区', + code: '500106', + children: null, + }, + { + name: '九龙坡区', + code: '500107', + children: null, + }, + { + name: '南岸区', + code: '500108', + children: null, + }, + { + name: '北碚区', + code: '500109', + children: null, + }, + { + name: '綦江区', + code: '500110', + children: null, + }, + { + name: '大足区', + code: '500111', + children: null, + }, + { + name: '渝北区', + code: '500112', + children: null, + }, + { + name: '巴南区', + code: '500113', + children: null, + }, + { + name: '黔江区', + code: '500114', + children: null, + }, + { + name: '长寿区', + code: '500115', + children: null, + }, + { + name: '江津区', + code: '500116', + children: null, + }, + { + name: '合川区', + code: '500117', + children: null, + }, + { + name: '永川区', + code: '500118', + children: null, + }, + { + name: '南川区', + code: '500119', + children: null, + }, + { + name: '璧山区', + code: '500120', + children: null, + }, + { + name: '铜梁区', + code: '500151', + children: null, + }, + { + name: '潼南区', + code: '500152', + children: null, + }, + { + name: '荣昌区', + code: '500153', + children: null, + }, + { + name: '开州区', + code: '500154', + children: null, + }, + { + name: '梁平区', + code: '500155', + children: null, + }, + { + name: '武隆区', + code: '500156', + children: null, + }, + { + name: '城口县', + code: '500229', + children: null, + }, + { + name: '丰都县', + code: '500230', + children: null, + }, + { + name: '垫江县', + code: '500231', + children: null, + }, + { + name: '忠县', + code: '500233', + children: null, + }, + { + name: '云阳县', + code: '500235', + children: null, + }, + { + name: '奉节县', + code: '500236', + children: null, + }, + { + name: '巫山县', + code: '500237', + children: null, + }, + { + name: '巫溪县', + code: '500238', + children: null, + }, + { + name: '石柱土家族自治县', + code: '500240', + children: null, + }, + { + name: '秀山土家族苗族自治县', + code: '500241', + children: null, + }, + { + name: '酉阳土家族苗族自治县', + code: '500242', + children: null, + }, + { + name: '彭水苗族土家族自治县', + code: '500243', + children: null, + }, + ], + }, + ], + }, + { + name: '四川省', + code: '510000', + children: [ + { + name: '成都市', + code: '510100', + children: [ + { + name: '锦江区', + code: '510104', + children: null, + }, + { + name: '青羊区', + code: '510105', + children: null, + }, + { + name: '金牛区', + code: '510106', + children: null, + }, + { + name: '武侯区', + code: '510107', + children: null, + }, + { + name: '成华区', + code: '510108', + children: null, + }, + { + name: '龙泉驿区', + code: '510112', + children: null, + }, + { + name: '青白江区', + code: '510113', + children: null, + }, + { + name: '新都区', + code: '510114', + children: null, + }, + { + name: '温江区', + code: '510115', + children: null, + }, + { + name: '双流区', + code: '510116', + children: null, + }, + { + name: '郫都区', + code: '510117', + children: null, + }, + { + name: '金堂县', + code: '510121', + children: null, + }, + { + name: '大邑县', + code: '510129', + children: null, + }, + { + name: '蒲江县', + code: '510131', + children: null, + }, + { + name: '新津县', + code: '510132', + children: null, + }, + { + name: '都江堰市', + code: '510181', + children: null, + }, + { + name: '彭州市', + code: '510182', + children: null, + }, + { + name: '邛崃市', + code: '510183', + children: null, + }, + { + name: '崇州市', + code: '510184', + children: null, + }, + { + name: '简阳市', + code: '510185', + children: null, + }, + ], + }, + { + name: '自贡市', + code: '510300', + children: [ + { + name: '自流井区', + code: '510302', + children: null, + }, + { + name: '贡井区', + code: '510303', + children: null, + }, + { + name: '大安区', + code: '510304', + children: null, + }, + { + name: '沿滩区', + code: '510311', + children: null, + }, + { + name: '荣县', + code: '510321', + children: null, + }, + { + name: '富顺县', + code: '510322', + children: null, + }, + ], + }, + { + name: '攀枝花市', + code: '510400', + children: [ + { + name: '东区', + code: '510402', + children: null, + }, + { + name: '西区', + code: '510403', + children: null, + }, + { + name: '仁和区', + code: '510411', + children: null, + }, + { + name: '米易县', + code: '510421', + children: null, + }, + { + name: '盐边县', + code: '510422', + children: null, + }, + ], + }, + { + name: '泸州市', + code: '510500', + children: [ + { + name: '江阳区', + code: '510502', + children: null, + }, + { + name: '纳溪区', + code: '510503', + children: null, + }, + { + name: '龙马潭区', + code: '510504', + children: null, + }, + { + name: '泸县', + code: '510521', + children: null, + }, + { + name: '合江县', + code: '510522', + children: null, + }, + { + name: '叙永县', + code: '510524', + children: null, + }, + { + name: '古蔺县', + code: '510525', + children: null, + }, + ], + }, + { + name: '德阳市', + code: '510600', + children: [ + { + name: '旌阳区', + code: '510603', + children: null, + }, + { + name: '罗江区', + code: '510604', + children: null, + }, + { + name: '中江县', + code: '510623', + children: null, + }, + { + name: '广汉市', + code: '510681', + children: null, + }, + { + name: '什邡市', + code: '510682', + children: null, + }, + { + name: '绵竹市', + code: '510683', + children: null, + }, + ], + }, + { + name: '绵阳市', + code: '510700', + children: [ + { + name: '涪城区', + code: '510703', + children: null, + }, + { + name: '游仙区', + code: '510704', + children: null, + }, + { + name: '安州区', + code: '510705', + children: null, + }, + { + name: '三台县', + code: '510722', + children: null, + }, + { + name: '盐亭县', + code: '510723', + children: null, + }, + { + name: '梓潼县', + code: '510725', + children: null, + }, + { + name: '北川羌族自治县', + code: '510726', + children: null, + }, + { + name: '平武县', + code: '510727', + children: null, + }, + { + name: '江油市', + code: '510781', + children: null, + }, + ], + }, + { + name: '广元市', + code: '510800', + children: [ + { + name: '利州区', + code: '510802', + children: null, + }, + { + name: '昭化区', + code: '510811', + children: null, + }, + { + name: '朝天区', + code: '510812', + children: null, + }, + { + name: '旺苍县', + code: '510821', + children: null, + }, + { + name: '青川县', + code: '510822', + children: null, + }, + { + name: '剑阁县', + code: '510823', + children: null, + }, + { + name: '苍溪县', + code: '510824', + children: null, + }, + ], + }, + { + name: '遂宁市', + code: '510900', + children: [ + { + name: '船山区', + code: '510903', + children: null, + }, + { + name: '安居区', + code: '510904', + children: null, + }, + { + name: '蓬溪县', + code: '510921', + children: null, + }, + { + name: '射洪县', + code: '510922', + children: null, + }, + { + name: '大英县', + code: '510923', + children: null, + }, + ], + }, + { + name: '内江市', + code: '511000', + children: [ + { + name: '市中区', + code: '511002', + children: null, + }, + { + name: '东兴区', + code: '511011', + children: null, + }, + { + name: '威远县', + code: '511024', + children: null, + }, + { + name: '资中县', + code: '511025', + children: null, + }, + { + name: '隆昌市', + code: '511083', + children: null, + }, + ], + }, + { + name: '乐山市', + code: '511100', + children: [ + { + name: '市中区', + code: '511102', + children: null, + }, + { + name: '沙湾区', + code: '511111', + children: null, + }, + { + name: '五通桥区', + code: '511112', + children: null, + }, + { + name: '金口河区', + code: '511113', + children: null, + }, + { + name: '犍为县', + code: '511123', + children: null, + }, + { + name: '井研县', + code: '511124', + children: null, + }, + { + name: '夹江县', + code: '511126', + children: null, + }, + { + name: '沐川县', + code: '511129', + children: null, + }, + { + name: '峨边彝族自治县', + code: '511132', + children: null, + }, + { + name: '马边彝族自治县', + code: '511133', + children: null, + }, + { + name: '峨眉山市', + code: '511181', + children: null, + }, + ], + }, + { + name: '南充市', + code: '511300', + children: [ + { + name: '顺庆区', + code: '511302', + children: null, + }, + { + name: '高坪区', + code: '511303', + children: null, + }, + { + name: '嘉陵区', + code: '511304', + children: null, + }, + { + name: '南部县', + code: '511321', + children: null, + }, + { + name: '营山县', + code: '511322', + children: null, + }, + { + name: '蓬安县', + code: '511323', + children: null, + }, + { + name: '仪陇县', + code: '511324', + children: null, + }, + { + name: '西充县', + code: '511325', + children: null, + }, + { + name: '阆中市', + code: '511381', + children: null, + }, + ], + }, + { + name: '眉山市', + code: '511400', + children: [ + { + name: '东坡区', + code: '511402', + children: null, + }, + { + name: '彭山区', + code: '511403', + children: null, + }, + { + name: '仁寿县', + code: '511421', + children: null, + }, + { + name: '洪雅县', + code: '511423', + children: null, + }, + { + name: '丹棱县', + code: '511424', + children: null, + }, + { + name: '青神县', + code: '511425', + children: null, + }, + ], + }, + { + name: '宜宾市', + code: '511500', + children: [ + { + name: '翠屏区', + code: '511502', + children: null, + }, + { + name: '南溪区', + code: '511503', + children: null, + }, + { + name: '叙州区', + code: '511504', + children: null, + }, + { + name: '江安县', + code: '511523', + children: null, + }, + { + name: '长宁县', + code: '511524', + children: null, + }, + { + name: '高县', + code: '511525', + children: null, + }, + { + name: '珙县', + code: '511526', + children: null, + }, + { + name: '筠连县', + code: '511527', + children: null, + }, + { + name: '兴文县', + code: '511528', + children: null, + }, + { + name: '屏山县', + code: '511529', + children: null, + }, + ], + }, + { + name: '广安市', + code: '511600', + children: [ + { + name: '广安区', + code: '511602', + children: null, + }, + { + name: '前锋区', + code: '511603', + children: null, + }, + { + name: '岳池县', + code: '511621', + children: null, + }, + { + name: '武胜县', + code: '511622', + children: null, + }, + { + name: '邻水县', + code: '511623', + children: null, + }, + { + name: '华蓥市', + code: '511681', + children: null, + }, + ], + }, + { + name: '达州市', + code: '511700', + children: [ + { + name: '通川区', + code: '511702', + children: null, + }, + { + name: '达川区', + code: '511703', + children: null, + }, + { + name: '宣汉县', + code: '511722', + children: null, + }, + { + name: '开江县', + code: '511723', + children: null, + }, + { + name: '大竹县', + code: '511724', + children: null, + }, + { + name: '渠县', + code: '511725', + children: null, + }, + { + name: '万源市', + code: '511781', + children: null, + }, + ], + }, + { + name: '雅安市', + code: '511800', + children: [ + { + name: '雨城区', + code: '511802', + children: null, + }, + { + name: '名山区', + code: '511803', + children: null, + }, + { + name: '荥经县', + code: '511822', + children: null, + }, + { + name: '汉源县', + code: '511823', + children: null, + }, + { + name: '石棉县', + code: '511824', + children: null, + }, + { + name: '天全县', + code: '511825', + children: null, + }, + { + name: '芦山县', + code: '511826', + children: null, + }, + { + name: '宝兴县', + code: '511827', + children: null, + }, + ], + }, + { + name: '巴中市', + code: '511900', + children: [ + { + name: '巴州区', + code: '511902', + children: null, + }, + { + name: '恩阳区', + code: '511903', + children: null, + }, + { + name: '通江县', + code: '511921', + children: null, + }, + { + name: '南江县', + code: '511922', + children: null, + }, + { + name: '平昌县', + code: '511923', + children: null, + }, + ], + }, + { + name: '资阳市', + code: '512000', + children: [ + { + name: '雁江区', + code: '512002', + children: null, + }, + { + name: '安岳县', + code: '512021', + children: null, + }, + { + name: '乐至县', + code: '512022', + children: null, + }, + ], + }, + { + name: '阿坝藏族羌族自治州', + code: '513200', + children: [ + { + name: '马尔康市', + code: '513201', + children: null, + }, + { + name: '汶川县', + code: '513221', + children: null, + }, + { + name: '理县', + code: '513222', + children: null, + }, + { + name: '茂县', + code: '513223', + children: null, + }, + { + name: '松潘县', + code: '513224', + children: null, + }, + { + name: '九寨沟县', + code: '513225', + children: null, + }, + { + name: '金川县', + code: '513226', + children: null, + }, + { + name: '小金县', + code: '513227', + children: null, + }, + { + name: '黑水县', + code: '513228', + children: null, + }, + { + name: '壤塘县', + code: '513230', + children: null, + }, + { + name: '阿坝县', + code: '513231', + children: null, + }, + { + name: '若尔盖县', + code: '513232', + children: null, + }, + { + name: '红原县', + code: '513233', + children: null, + }, + ], + }, + { + name: '甘孜藏族自治州', + code: '513300', + children: [ + { + name: '康定市', + code: '513301', + children: null, + }, + { + name: '泸定县', + code: '513322', + children: null, + }, + { + name: '丹巴县', + code: '513323', + children: null, + }, + { + name: '九龙县', + code: '513324', + children: null, + }, + { + name: '雅江县', + code: '513325', + children: null, + }, + { + name: '道孚县', + code: '513326', + children: null, + }, + { + name: '炉霍县', + code: '513327', + children: null, + }, + { + name: '甘孜县', + code: '513328', + children: null, + }, + { + name: '新龙县', + code: '513329', + children: null, + }, + { + name: '德格县', + code: '513330', + children: null, + }, + { + name: '白玉县', + code: '513331', + children: null, + }, + { + name: '石渠县', + code: '513332', + children: null, + }, + { + name: '色达县', + code: '513333', + children: null, + }, + { + name: '理塘县', + code: '513334', + children: null, + }, + { + name: '巴塘县', + code: '513335', + children: null, + }, + { + name: '乡城县', + code: '513336', + children: null, + }, + { + name: '稻城县', + code: '513337', + children: null, + }, + { + name: '得荣县', + code: '513338', + children: null, + }, + ], + }, + { + name: '凉山彝族自治州', + code: '513400', + children: [ + { + name: '西昌市', + code: '513401', + children: null, + }, + { + name: '木里藏族自治县', + code: '513422', + children: null, + }, + { + name: '盐源县', + code: '513423', + children: null, + }, + { + name: '德昌县', + code: '513424', + children: null, + }, + { + name: '会理县', + code: '513425', + children: null, + }, + { + name: '会东县', + code: '513426', + children: null, + }, + { + name: '宁南县', + code: '513427', + children: null, + }, + { + name: '普格县', + code: '513428', + children: null, + }, + { + name: '布拖县', + code: '513429', + children: null, + }, + { + name: '金阳县', + code: '513430', + children: null, + }, + { + name: '昭觉县', + code: '513431', + children: null, + }, + { + name: '喜德县', + code: '513432', + children: null, + }, + { + name: '冕宁县', + code: '513433', + children: null, + }, + { + name: '越西县', + code: '513434', + children: null, + }, + { + name: '甘洛县', + code: '513435', + children: null, + }, + { + name: '美姑县', + code: '513436', + children: null, + }, + { + name: '雷波县', + code: '513437', + children: null, + }, + ], + }, + ], + }, + { + name: '贵州省', + code: '520000', + children: [ + { + name: '贵阳市', + code: '520100', + children: [ + { + name: '南明区', + code: '520102', + children: null, + }, + { + name: '云岩区', + code: '520103', + children: null, + }, + { + name: '花溪区', + code: '520111', + children: null, + }, + { + name: '乌当区', + code: '520112', + children: null, + }, + { + name: '白云区', + code: '520113', + children: null, + }, + { + name: '观山湖区', + code: '520115', + children: null, + }, + { + name: '开阳县', + code: '520121', + children: null, + }, + { + name: '息烽县', + code: '520122', + children: null, + }, + { + name: '修文县', + code: '520123', + children: null, + }, + { + name: '清镇市', + code: '520181', + children: null, + }, + ], + }, + { + name: '六盘水市', + code: '520200', + children: [ + { + name: '钟山区', + code: '520201', + children: null, + }, + { + name: '六枝特区', + code: '520203', + children: null, + }, + { + name: '水城县', + code: '520221', + children: null, + }, + { + name: '盘州市', + code: '520281', + children: null, + }, + ], + }, + { + name: '遵义市', + code: '520300', + children: [ + { + name: '红花岗区', + code: '520302', + children: null, + }, + { + name: '汇川区', + code: '520303', + children: null, + }, + { + name: '播州区', + code: '520304', + children: null, + }, + { + name: '桐梓县', + code: '520322', + children: null, + }, + { + name: '绥阳县', + code: '520323', + children: null, + }, + { + name: '正安县', + code: '520324', + children: null, + }, + { + name: '道真仡佬族苗族自治县', + code: '520325', + children: null, + }, + { + name: '务川仡佬族苗族自治县', + code: '520326', + children: null, + }, + { + name: '凤冈县', + code: '520327', + children: null, + }, + { + name: '湄潭县', + code: '520328', + children: null, + }, + { + name: '余庆县', + code: '520329', + children: null, + }, + { + name: '习水县', + code: '520330', + children: null, + }, + { + name: '赤水市', + code: '520381', + children: null, + }, + { + name: '仁怀市', + code: '520382', + children: null, + }, + ], + }, + { + name: '安顺市', + code: '520400', + children: [ + { + name: '西秀区', + code: '520402', + children: null, + }, + { + name: '平坝区', + code: '520403', + children: null, + }, + { + name: '普定县', + code: '520422', + children: null, + }, + { + name: '镇宁布依族苗族自治县', + code: '520423', + children: null, + }, + { + name: '关岭布依族苗族自治县', + code: '520424', + children: null, + }, + { + name: '紫云苗族布依族自治县', + code: '520425', + children: null, + }, + ], + }, + { + name: '毕节市', + code: '520500', + children: [ + { + name: '七星关区', + code: '520502', + children: null, + }, + { + name: '大方县', + code: '520521', + children: null, + }, + { + name: '黔西县', + code: '520522', + children: null, + }, + { + name: '金沙县', + code: '520523', + children: null, + }, + { + name: '织金县', + code: '520524', + children: null, + }, + { + name: '纳雍县', + code: '520525', + children: null, + }, + { + name: '威宁彝族回族苗族自治县', + code: '520526', + children: null, + }, + { + name: '赫章县', + code: '520527', + children: null, + }, + ], + }, + { + name: '铜仁市', + code: '520600', + children: [ + { + name: '碧江区', + code: '520602', + children: null, + }, + { + name: '万山区', + code: '520603', + children: null, + }, + { + name: '江口县', + code: '520621', + children: null, + }, + { + name: '玉屏侗族自治县', + code: '520622', + children: null, + }, + { + name: '石阡县', + code: '520623', + children: null, + }, + { + name: '思南县', + code: '520624', + children: null, + }, + { + name: '印江土家族苗族自治县', + code: '520625', + children: null, + }, + { + name: '德江县', + code: '520626', + children: null, + }, + { + name: '沿河土家族自治县', + code: '520627', + children: null, + }, + { + name: '松桃苗族自治县', + code: '520628', + children: null, + }, + ], + }, + { + name: '黔西南布依族苗族自治州', + code: '522300', + children: [ + { + name: '兴义市', + code: '522301', + children: null, + }, + { + name: '兴仁市', + code: '522302', + children: null, + }, + { + name: '普安县', + code: '522323', + children: null, + }, + { + name: '晴隆县', + code: '522324', + children: null, + }, + { + name: '贞丰县', + code: '522325', + children: null, + }, + { + name: '望谟县', + code: '522326', + children: null, + }, + { + name: '册亨县', + code: '522327', + children: null, + }, + { + name: '安龙县', + code: '522328', + children: null, + }, + ], + }, + { + name: '黔东南苗族侗族自治州', + code: '522600', + children: [ + { + name: '凯里市', + code: '522601', + children: null, + }, + { + name: '黄平县', + code: '522622', + children: null, + }, + { + name: '施秉县', + code: '522623', + children: null, + }, + { + name: '三穗县', + code: '522624', + children: null, + }, + { + name: '镇远县', + code: '522625', + children: null, + }, + { + name: '岑巩县', + code: '522626', + children: null, + }, + { + name: '天柱县', + code: '522627', + children: null, + }, + { + name: '锦屏县', + code: '522628', + children: null, + }, + { + name: '剑河县', + code: '522629', + children: null, + }, + { + name: '台江县', + code: '522630', + children: null, + }, + { + name: '黎平县', + code: '522631', + children: null, + }, + { + name: '榕江县', + code: '522632', + children: null, + }, + { + name: '从江县', + code: '522633', + children: null, + }, + { + name: '雷山县', + code: '522634', + children: null, + }, + { + name: '麻江县', + code: '522635', + children: null, + }, + { + name: '丹寨县', + code: '522636', + children: null, + }, + ], + }, + { + name: '黔南布依族苗族自治州', + code: '522700', + children: [ + { + name: '都匀市', + code: '522701', + children: null, + }, + { + name: '福泉市', + code: '522702', + children: null, + }, + { + name: '荔波县', + code: '522722', + children: null, + }, + { + name: '贵定县', + code: '522723', + children: null, + }, + { + name: '瓮安县', + code: '522725', + children: null, + }, + { + name: '独山县', + code: '522726', + children: null, + }, + { + name: '平塘县', + code: '522727', + children: null, + }, + { + name: '罗甸县', + code: '522728', + children: null, + }, + { + name: '长顺县', + code: '522729', + children: null, + }, + { + name: '龙里县', + code: '522730', + children: null, + }, + { + name: '惠水县', + code: '522731', + children: null, + }, + { + name: '三都水族自治县', + code: '522732', + children: null, + }, + ], + }, + ], + }, + { + name: '云南省', + code: '530000', + children: [ + { + name: '昆明市', + code: '530100', + children: [ + { + name: '五华区', + code: '530102', + children: null, + }, + { + name: '盘龙区', + code: '530103', + children: null, + }, + { + name: '官渡区', + code: '530111', + children: null, + }, + { + name: '西山区', + code: '530112', + children: null, + }, + { + name: '东川区', + code: '530113', + children: null, + }, + { + name: '呈贡区', + code: '530114', + children: null, + }, + { + name: '晋宁区', + code: '530115', + children: null, + }, + { + name: '富民县', + code: '530124', + children: null, + }, + { + name: '宜良县', + code: '530125', + children: null, + }, + { + name: '石林彝族自治县', + code: '530126', + children: null, + }, + { + name: '嵩明县', + code: '530127', + children: null, + }, + { + name: '禄劝彝族苗族自治县', + code: '530128', + children: null, + }, + { + name: '寻甸回族彝族自治县', + code: '530129', + children: null, + }, + { + name: '安宁市', + code: '530181', + children: null, + }, + ], + }, + { + name: '曲靖市', + code: '530300', + children: [ + { + name: '麒麟区', + code: '530302', + children: null, + }, + { + name: '沾益区', + code: '530303', + children: null, + }, + { + name: '马龙区', + code: '530304', + children: null, + }, + { + name: '陆良县', + code: '530322', + children: null, + }, + { + name: '师宗县', + code: '530323', + children: null, + }, + { + name: '罗平县', + code: '530324', + children: null, + }, + { + name: '富源县', + code: '530325', + children: null, + }, + { + name: '会泽县', + code: '530326', + children: null, + }, + { + name: '宣威市', + code: '530381', + children: null, + }, + ], + }, + { + name: '玉溪市', + code: '530400', + children: [ + { + name: '红塔区', + code: '530402', + children: null, + }, + { + name: '江川区', + code: '530403', + children: null, + }, + { + name: '澄江县', + code: '530422', + children: null, + }, + { + name: '通海县', + code: '530423', + children: null, + }, + { + name: '华宁县', + code: '530424', + children: null, + }, + { + name: '易门县', + code: '530425', + children: null, + }, + { + name: '峨山彝族自治县', + code: '530426', + children: null, + }, + { + name: '新平彝族傣族自治县', + code: '530427', + children: null, + }, + { + name: '元江县', + code: '530428', + children: null, + }, + ], + }, + { + name: '保山市', + code: '530500', + children: [ + { + name: '隆阳区', + code: '530502', + children: null, + }, + { + name: '施甸县', + code: '530521', + children: null, + }, + { + name: '龙陵县', + code: '530523', + children: null, + }, + { + name: '昌宁县', + code: '530524', + children: null, + }, + { + name: '腾冲市', + code: '530581', + children: null, + }, + ], + }, + { + name: '昭通市', + code: '530600', + children: [ + { + name: '昭阳区', + code: '530602', + children: null, + }, + { + name: '鲁甸县', + code: '530621', + children: null, + }, + { + name: '巧家县', + code: '530622', + children: null, + }, + { + name: '盐津县', + code: '530623', + children: null, + }, + { + name: '大关县', + code: '530624', + children: null, + }, + { + name: '永善县', + code: '530625', + children: null, + }, + { + name: '绥江县', + code: '530626', + children: null, + }, + { + name: '镇雄县', + code: '530627', + children: null, + }, + { + name: '彝良县', + code: '530628', + children: null, + }, + { + name: '威信县', + code: '530629', + children: null, + }, + { + name: '水富市', + code: '530681', + children: null, + }, + ], + }, + { + name: '丽江市', + code: '530700', + children: [ + { + name: '古城区', + code: '530702', + children: null, + }, + { + name: '玉龙纳西族自治县', + code: '530721', + children: null, + }, + { + name: '永胜县', + code: '530722', + children: null, + }, + { + name: '华坪县', + code: '530723', + children: null, + }, + { + name: '宁蒗彝族自治县', + code: '530724', + children: null, + }, + ], + }, + { + name: '普洱市', + code: '530800', + children: [ + { + name: '思茅区', + code: '530802', + children: null, + }, + { + name: '宁洱哈尼族彝族自治县', + code: '530821', + children: null, + }, + { + name: '墨江哈尼族自治县', + code: '530822', + children: null, + }, + { + name: '景东彝族自治县', + code: '530823', + children: null, + }, + { + name: '景谷傣族彝族自治县', + code: '530824', + children: null, + }, + { + name: '镇沅县', + code: '530825', + children: null, + }, + { + name: '江城哈尼族彝族自治县', + code: '530826', + children: null, + }, + { + name: '孟连县', + code: '530827', + children: null, + }, + { + name: '澜沧拉祜族自治县', + code: '530828', + children: null, + }, + { + name: '西盟佤族自治县', + code: '530829', + children: null, + }, + ], + }, + { + name: '临沧市', + code: '530900', + children: [ + { + name: '临翔区', + code: '530902', + children: null, + }, + { + name: '凤庆县', + code: '530921', + children: null, + }, + { + name: '云县', + code: '530922', + children: null, + }, + { + name: '永德县', + code: '530923', + children: null, + }, + { + name: '镇康县', + code: '530924', + children: null, + }, + { + name: '双江县', + code: '530925', + children: null, + }, + { + name: '耿马傣族佤族自治县', + code: '530926', + children: null, + }, + { + name: '沧源佤族自治县', + code: '530927', + children: null, + }, + ], + }, + { + name: '楚雄彝族自治州', + code: '532300', + children: [ + { + name: '楚雄市', + code: '532301', + children: null, + }, + { + name: '双柏县', + code: '532322', + children: null, + }, + { + name: '牟定县', + code: '532323', + children: null, + }, + { + name: '南华县', + code: '532324', + children: null, + }, + { + name: '姚安县', + code: '532325', + children: null, + }, + { + name: '大姚县', + code: '532326', + children: null, + }, + { + name: '永仁县', + code: '532327', + children: null, + }, + { + name: '元谋县', + code: '532328', + children: null, + }, + { + name: '武定县', + code: '532329', + children: null, + }, + { + name: '禄丰县', + code: '532331', + children: null, + }, + ], + }, + { + name: '红河哈尼族彝族自治州', + code: '532500', + children: [ + { + name: '个旧市', + code: '532501', + children: null, + }, + { + name: '开远市', + code: '532502', + children: null, + }, + { + name: '蒙自市', + code: '532503', + children: null, + }, + { + name: '弥勒市', + code: '532504', + children: null, + }, + { + name: '屏边苗族自治县', + code: '532523', + children: null, + }, + { + name: '建水县', + code: '532524', + children: null, + }, + { + name: '石屏县', + code: '532525', + children: null, + }, + { + name: '泸西县', + code: '532527', + children: null, + }, + { + name: '元阳县', + code: '532528', + children: null, + }, + { + name: '红河县', + code: '532529', + children: null, + }, + { + name: '金平苗族瑶族傣族自治县', + code: '532530', + children: null, + }, + { + name: '绿春县', + code: '532531', + children: null, + }, + { + name: '河口瑶族自治县', + code: '532532', + children: null, + }, + ], + }, + { + name: '文山壮族苗族自治州', + code: '532600', + children: [ + { + name: '文山市', + code: '532601', + children: null, + }, + { + name: '砚山县', + code: '532622', + children: null, + }, + { + name: '西畴县', + code: '532623', + children: null, + }, + { + name: '麻栗坡县', + code: '532624', + children: null, + }, + { + name: '马关县', + code: '532625', + children: null, + }, + { + name: '丘北县', + code: '532626', + children: null, + }, + { + name: '广南县', + code: '532627', + children: null, + }, + { + name: '富宁县', + code: '532628', + children: null, + }, + ], + }, + { + name: '西双版纳傣族自治州', + code: '532800', + children: [ + { + name: '景洪市', + code: '532801', + children: null, + }, + { + name: '勐海县', + code: '532822', + children: null, + }, + { + name: '勐腊县', + code: '532823', + children: null, + }, + ], + }, + { + name: '大理白族自治州', + code: '532900', + children: [ + { + name: '大理市', + code: '532901', + children: null, + }, + { + name: '漾濞彝族自治县', + code: '532922', + children: null, + }, + { + name: '祥云县', + code: '532923', + children: null, + }, + { + name: '宾川县', + code: '532924', + children: null, + }, + { + name: '弥渡县', + code: '532925', + children: null, + }, + { + name: '南涧彝族自治县', + code: '532926', + children: null, + }, + { + name: '巍山彝族回族自治县', + code: '532927', + children: null, + }, + { + name: '永平县', + code: '532928', + children: null, + }, + { + name: '云龙县', + code: '532929', + children: null, + }, + { + name: '洱源县', + code: '532930', + children: null, + }, + { + name: '剑川县', + code: '532931', + children: null, + }, + { + name: '鹤庆县', + code: '532932', + children: null, + }, + ], + }, + { + name: '德宏傣族景颇族自治州', + code: '533100', + children: [ + { + name: '瑞丽市', + code: '533102', + children: null, + }, + { + name: '芒市', + code: '533103', + children: null, + }, + { + name: '梁河县', + code: '533122', + children: null, + }, + { + name: '盈江县', + code: '533123', + children: null, + }, + { + name: '陇川县', + code: '533124', + children: null, + }, + ], + }, + { + name: '怒江傈僳族自治州', + code: '533300', + children: [ + { + name: '泸水市', + code: '533301', + children: null, + }, + { + name: '福贡县', + code: '533323', + children: null, + }, + { + name: '贡山独龙族怒族自治县', + code: '533324', + children: null, + }, + { + name: '兰坪白族普米族自治县', + code: '533325', + children: null, + }, + ], + }, + { + name: '迪庆藏族自治州', + code: '533400', + children: [ + { + name: '香格里拉市', + code: '533401', + children: null, + }, + { + name: '德钦县', + code: '533422', + children: null, + }, + { + name: '维西傈僳族自治县', + code: '533423', + children: null, + }, + ], + }, + ], + }, + { + name: '西藏自治区', + code: '540000', + children: [ + { + name: '拉萨市', + code: '540100', + children: [ + { + name: '城关区', + code: '540102', + children: null, + }, + { + name: '堆龙德庆区', + code: '540103', + children: null, + }, + { + name: '达孜区', + code: '540104', + children: null, + }, + { + name: '林周县', + code: '540121', + children: null, + }, + { + name: '当雄县', + code: '540122', + children: null, + }, + { + name: '尼木县', + code: '540123', + children: null, + }, + { + name: '曲水县', + code: '540124', + children: null, + }, + { + name: '墨竹工卡县', + code: '540127', + children: null, + }, + ], + }, + { + name: '日喀则市', + code: '540200', + children: [ + { + name: '桑珠孜区', + code: '540202', + children: null, + }, + { + name: '南木林县', + code: '540221', + children: null, + }, + { + name: '江孜县', + code: '540222', + children: null, + }, + { + name: '定日县', + code: '540223', + children: null, + }, + { + name: '萨迦县', + code: '540224', + children: null, + }, + { + name: '拉孜县', + code: '540225', + children: null, + }, + { + name: '昂仁县', + code: '540226', + children: null, + }, + { + name: '谢通门县', + code: '540227', + children: null, + }, + { + name: '白朗县', + code: '540228', + children: null, + }, + { + name: '仁布县', + code: '540229', + children: null, + }, + { + name: '康马县', + code: '540230', + children: null, + }, + { + name: '定结县', + code: '540231', + children: null, + }, + { + name: '仲巴县', + code: '540232', + children: null, + }, + { + name: '亚东县', + code: '540233', + children: null, + }, + { + name: '吉隆县', + code: '540234', + children: null, + }, + { + name: '聂拉木县', + code: '540235', + children: null, + }, + { + name: '萨嘎县', + code: '540236', + children: null, + }, + { + name: '岗巴县', + code: '540237', + children: null, + }, + ], + }, + { + name: '昌都市', + code: '540300', + children: [ + { + name: '卡若区', + code: '540302', + children: null, + }, + { + name: '江达县', + code: '540321', + children: null, + }, + { + name: '贡觉县', + code: '540322', + children: null, + }, + { + name: '类乌齐县', + code: '540323', + children: null, + }, + { + name: '丁青县', + code: '540324', + children: null, + }, + { + name: '察雅县', + code: '540325', + children: null, + }, + { + name: '八宿县', + code: '540326', + children: null, + }, + { + name: '左贡县', + code: '540327', + children: null, + }, + { + name: '芒康县', + code: '540328', + children: null, + }, + { + name: '洛隆县', + code: '540329', + children: null, + }, + { + name: '边坝县', + code: '540330', + children: null, + }, + ], + }, + { + name: '林芝市', + code: '540400', + children: [ + { + name: '巴宜区', + code: '540402', + children: null, + }, + { + name: '工布江达县', + code: '540421', + children: null, + }, + { + name: '米林县', + code: '540422', + children: null, + }, + { + name: '墨脱县', + code: '540423', + children: null, + }, + { + name: '波密县', + code: '540424', + children: null, + }, + { + name: '察隅县', + code: '540425', + children: null, + }, + { + name: '朗县', + code: '540426', + children: null, + }, + ], + }, + { + name: '山南市', + code: '540500', + children: [ + { + name: '乃东区', + code: '540502', + children: null, + }, + { + name: '扎囊县', + code: '540521', + children: null, + }, + { + name: '贡嘎县', + code: '540522', + children: null, + }, + { + name: '桑日县', + code: '540523', + children: null, + }, + { + name: '琼结县', + code: '540524', + children: null, + }, + { + name: '曲松县', + code: '540525', + children: null, + }, + { + name: '措美县', + code: '540526', + children: null, + }, + { + name: '洛扎县', + code: '540527', + children: null, + }, + { + name: '加查县', + code: '540528', + children: null, + }, + { + name: '隆子县', + code: '540529', + children: null, + }, + { + name: '错那县', + code: '540530', + children: null, + }, + { + name: '浪卡子县', + code: '540531', + children: null, + }, + ], + }, + { + name: '那曲市', + code: '540600', + children: [ + { + name: '色尼区', + code: '540602', + children: null, + }, + { + name: '嘉黎县', + code: '540621', + children: null, + }, + { + name: '比如县', + code: '540622', + children: null, + }, + { + name: '聂荣县', + code: '540623', + children: null, + }, + { + name: '安多县', + code: '540624', + children: null, + }, + { + name: '申扎县', + code: '540625', + children: null, + }, + { + name: '索县', + code: '540626', + children: null, + }, + { + name: '班戈县', + code: '540627', + children: null, + }, + { + name: '巴青县', + code: '540628', + children: null, + }, + { + name: '尼玛县', + code: '540629', + children: null, + }, + { + name: '双湖县', + code: '540630', + children: null, + }, + ], + }, + { + name: '阿里地区', + code: '542500', + children: [ + { + name: '普兰县', + code: '542521', + children: null, + }, + { + name: '札达县', + code: '542522', + children: null, + }, + { + name: '噶尔县', + code: '542523', + children: null, + }, + { + name: '日土县', + code: '542524', + children: null, + }, + { + name: '革吉县', + code: '542525', + children: null, + }, + { + name: '改则县', + code: '542526', + children: null, + }, + { + name: '措勤县', + code: '542527', + children: null, + }, + ], + }, + ], + }, + { + name: '陕西省', + code: '610000', + children: [ + { + name: '西安市', + code: '610100', + children: [ + { + name: '新城区', + code: '610102', + children: null, + }, + { + name: '碑林区', + code: '610103', + children: null, + }, + { + name: '莲湖区', + code: '610104', + children: null, + }, + { + name: '灞桥区', + code: '610111', + children: null, + }, + { + name: '未央区', + code: '610112', + children: null, + }, + { + name: '雁塔区', + code: '610113', + children: null, + }, + { + name: '阎良区', + code: '610114', + children: null, + }, + { + name: '临潼区', + code: '610115', + children: null, + }, + { + name: '长安区', + code: '610116', + children: null, + }, + { + name: '高陵区', + code: '610117', + children: null, + }, + { + name: '鄠邑区', + code: '610118', + children: null, + }, + { + name: '蓝田县', + code: '610122', + children: null, + }, + { + name: '周至县', + code: '610124', + children: null, + }, + ], + }, + { + name: '铜川市', + code: '610200', + children: [ + { + name: '王益区', + code: '610202', + children: null, + }, + { + name: '印台区', + code: '610203', + children: null, + }, + { + name: '耀州区', + code: '610204', + children: null, + }, + { + name: '宜君县', + code: '610222', + children: null, + }, + ], + }, + { + name: '宝鸡市', + code: '610300', + children: [ + { + name: '渭滨区', + code: '610302', + children: null, + }, + { + name: '金台区', + code: '610303', + children: null, + }, + { + name: '陈仓区', + code: '610304', + children: null, + }, + { + name: '凤翔县', + code: '610322', + children: null, + }, + { + name: '岐山县', + code: '610323', + children: null, + }, + { + name: '扶风县', + code: '610324', + children: null, + }, + { + name: '眉县', + code: '610326', + children: null, + }, + { + name: '陇县', + code: '610327', + children: null, + }, + { + name: '千阳县', + code: '610328', + children: null, + }, + { + name: '麟游县', + code: '610329', + children: null, + }, + { + name: '凤县', + code: '610330', + children: null, + }, + { + name: '太白县', + code: '610331', + children: null, + }, + ], + }, + { + name: '咸阳市', + code: '610400', + children: [ + { + name: '秦都区', + code: '610402', + children: null, + }, + { + name: '杨陵区', + code: '610403', + children: null, + }, + { + name: '渭城区', + code: '610404', + children: null, + }, + { + name: '三原县', + code: '610422', + children: null, + }, + { + name: '泾阳县', + code: '610423', + children: null, + }, + { + name: '乾县', + code: '610424', + children: null, + }, + { + name: '礼泉县', + code: '610425', + children: null, + }, + { + name: '永寿县', + code: '610426', + children: null, + }, + { + name: '长武县', + code: '610428', + children: null, + }, + { + name: '旬邑县', + code: '610429', + children: null, + }, + { + name: '淳化县', + code: '610430', + children: null, + }, + { + name: '武功县', + code: '610431', + children: null, + }, + { + name: '兴平市', + code: '610481', + children: null, + }, + { + name: '彬州市', + code: '610482', + children: null, + }, + ], + }, + { + name: '渭南市', + code: '610500', + children: [ + { + name: '临渭区', + code: '610502', + children: null, + }, + { + name: '华州区', + code: '610503', + children: null, + }, + { + name: '潼关县', + code: '610522', + children: null, + }, + { + name: '大荔县', + code: '610523', + children: null, + }, + { + name: '合阳县', + code: '610524', + children: null, + }, + { + name: '澄城县', + code: '610525', + children: null, + }, + { + name: '蒲城县', + code: '610526', + children: null, + }, + { + name: '白水县', + code: '610527', + children: null, + }, + { + name: '富平县', + code: '610528', + children: null, + }, + { + name: '韩城市', + code: '610581', + children: null, + }, + { + name: '华阴市', + code: '610582', + children: null, + }, + ], + }, + { + name: '延安市', + code: '610600', + children: [ + { + name: '宝塔区', + code: '610602', + children: null, + }, + { + name: '安塞区', + code: '610603', + children: null, + }, + { + name: '延长县', + code: '610621', + children: null, + }, + { + name: '延川县', + code: '610622', + children: null, + }, + { + name: '子长县', + code: '610623', + children: null, + }, + { + name: '志丹县', + code: '610625', + children: null, + }, + { + name: '吴起县', + code: '610626', + children: null, + }, + { + name: '甘泉县', + code: '610627', + children: null, + }, + { + name: '富县', + code: '610628', + children: null, + }, + { + name: '洛川县', + code: '610629', + children: null, + }, + { + name: '宜川县', + code: '610630', + children: null, + }, + { + name: '黄龙县', + code: '610631', + children: null, + }, + { + name: '黄陵县', + code: '610632', + children: null, + }, + ], + }, + { + name: '汉中市', + code: '610700', + children: [ + { + name: '汉台区', + code: '610702', + children: null, + }, + { + name: '南郑区', + code: '610703', + children: null, + }, + { + name: '城固县', + code: '610722', + children: null, + }, + { + name: '洋县', + code: '610723', + children: null, + }, + { + name: '西乡县', + code: '610724', + children: null, + }, + { + name: '勉县', + code: '610725', + children: null, + }, + { + name: '宁强县', + code: '610726', + children: null, + }, + { + name: '略阳县', + code: '610727', + children: null, + }, + { + name: '镇巴县', + code: '610728', + children: null, + }, + { + name: '留坝县', + code: '610729', + children: null, + }, + { + name: '佛坪县', + code: '610730', + children: null, + }, + ], + }, + { + name: '榆林市', + code: '610800', + children: [ + { + name: '榆阳区', + code: '610802', + children: null, + }, + { + name: '横山区', + code: '610803', + children: null, + }, + { + name: '府谷县', + code: '610822', + children: null, + }, + { + name: '靖边县', + code: '610824', + children: null, + }, + { + name: '定边县', + code: '610825', + children: null, + }, + { + name: '绥德县', + code: '610826', + children: null, + }, + { + name: '米脂县', + code: '610827', + children: null, + }, + { + name: '佳县', + code: '610828', + children: null, + }, + { + name: '吴堡县', + code: '610829', + children: null, + }, + { + name: '清涧县', + code: '610830', + children: null, + }, + { + name: '子洲县', + code: '610831', + children: null, + }, + { + name: '神木市', + code: '610881', + children: null, + }, + ], + }, + { + name: '安康市', + code: '610900', + children: [ + { + name: '汉滨区', + code: '610902', + children: null, + }, + { + name: '汉阴县', + code: '610921', + children: null, + }, + { + name: '石泉县', + code: '610922', + children: null, + }, + { + name: '宁陕县', + code: '610923', + children: null, + }, + { + name: '紫阳县', + code: '610924', + children: null, + }, + { + name: '岚皋县', + code: '610925', + children: null, + }, + { + name: '平利县', + code: '610926', + children: null, + }, + { + name: '镇坪县', + code: '610927', + children: null, + }, + { + name: '旬阳县', + code: '610928', + children: null, + }, + { + name: '白河县', + code: '610929', + children: null, + }, + ], + }, + { + name: '商洛市', + code: '611000', + children: [ + { + name: '商州区', + code: '611002', + children: null, + }, + { + name: '洛南县', + code: '611021', + children: null, + }, + { + name: '丹凤县', + code: '611022', + children: null, + }, + { + name: '商南县', + code: '611023', + children: null, + }, + { + name: '山阳县', + code: '611024', + children: null, + }, + { + name: '镇安县', + code: '611025', + children: null, + }, + { + name: '柞水县', + code: '611026', + children: null, + }, + ], + }, + ], + }, + { + name: '甘肃省', + code: '620000', + children: [ + { + name: '兰州市', + code: '620100', + children: [ + { + name: '城关区', + code: '620102', + children: null, + }, + { + name: '七里河区', + code: '620103', + children: null, + }, + { + name: '西固区', + code: '620104', + children: null, + }, + { + name: '安宁区', + code: '620105', + children: null, + }, + { + name: '红古区', + code: '620111', + children: null, + }, + { + name: '永登县', + code: '620121', + children: null, + }, + { + name: '皋兰县', + code: '620122', + children: null, + }, + { + name: '榆中县', + code: '620123', + children: null, + }, + ], + }, + { + name: '嘉峪关市', + code: '620200', + children: [ + { + name: '嘉峪关市', + code: '620299', + children: null, + }, + ], + }, + { + name: '金昌市', + code: '620300', + children: [ + { + name: '金川区', + code: '620302', + children: null, + }, + { + name: '永昌县', + code: '620321', + children: null, + }, + ], + }, + { + name: '白银市', + code: '620400', + children: [ + { + name: '白银区', + code: '620402', + children: null, + }, + { + name: '平川区', + code: '620403', + children: null, + }, + { + name: '靖远县', + code: '620421', + children: null, + }, + { + name: '会宁县', + code: '620422', + children: null, + }, + { + name: '景泰县', + code: '620423', + children: null, + }, + ], + }, + { + name: '天水市', + code: '620500', + children: [ + { + name: '秦州区', + code: '620502', + children: null, + }, + { + name: '麦积区', + code: '620503', + children: null, + }, + { + name: '清水县', + code: '620521', + children: null, + }, + { + name: '秦安县', + code: '620522', + children: null, + }, + { + name: '甘谷县', + code: '620523', + children: null, + }, + { + name: '武山县', + code: '620524', + children: null, + }, + { + name: '张家川回族自治县', + code: '620525', + children: null, + }, + ], + }, + { + name: '武威市', + code: '620600', + children: [ + { + name: '凉州区', + code: '620602', + children: null, + }, + { + name: '民勤县', + code: '620621', + children: null, + }, + { + name: '古浪县', + code: '620622', + children: null, + }, + { + name: '天祝藏族自治县', + code: '620623', + children: null, + }, + ], + }, + { + name: '张掖市', + code: '620700', + children: [ + { + name: '甘州区', + code: '620702', + children: null, + }, + { + name: '肃南裕固族自治县', + code: '620721', + children: null, + }, + { + name: '民乐县', + code: '620722', + children: null, + }, + { + name: '临泽县', + code: '620723', + children: null, + }, + { + name: '高台县', + code: '620724', + children: null, + }, + { + name: '山丹县', + code: '620725', + children: null, + }, + ], + }, + { + name: '平凉市', + code: '620800', + children: [ + { + name: '崆峒区', + code: '620802', + children: null, + }, + { + name: '泾川县', + code: '620821', + children: null, + }, + { + name: '灵台县', + code: '620822', + children: null, + }, + { + name: '崇信县', + code: '620823', + children: null, + }, + { + name: '庄浪县', + code: '620825', + children: null, + }, + { + name: '静宁县', + code: '620826', + children: null, + }, + { + name: '华亭市', + code: '620881', + children: null, + }, + ], + }, + { + name: '酒泉市', + code: '620900', + children: [ + { + name: '肃州区', + code: '620902', + children: null, + }, + { + name: '金塔县', + code: '620921', + children: null, + }, + { + name: '瓜州县', + code: '620922', + children: null, + }, + { + name: '肃北蒙古族自治县', + code: '620923', + children: null, + }, + { + name: '阿克塞哈萨克族自治县', + code: '620924', + children: null, + }, + { + name: '玉门市', + code: '620981', + children: null, + }, + { + name: '敦煌市', + code: '620982', + children: null, + }, + ], + }, + { + name: '庆阳市', + code: '621000', + children: [ + { + name: '西峰区', + code: '621002', + children: null, + }, + { + name: '庆城县', + code: '621021', + children: null, + }, + { + name: '环县', + code: '621022', + children: null, + }, + { + name: '华池县', + code: '621023', + children: null, + }, + { + name: '合水县', + code: '621024', + children: null, + }, + { + name: '正宁县', + code: '621025', + children: null, + }, + { + name: '宁县', + code: '621026', + children: null, + }, + { + name: '镇原县', + code: '621027', + children: null, + }, + ], + }, + { + name: '定西市', + code: '621100', + children: [ + { + name: '安定区', + code: '621102', + children: null, + }, + { + name: '通渭县', + code: '621121', + children: null, + }, + { + name: '陇西县', + code: '621122', + children: null, + }, + { + name: '渭源县', + code: '621123', + children: null, + }, + { + name: '临洮县', + code: '621124', + children: null, + }, + { + name: '漳县', + code: '621125', + children: null, + }, + { + name: '岷县', + code: '621126', + children: null, + }, + ], + }, + { + name: '陇南市', + code: '621200', + children: [ + { + name: '武都区', + code: '621202', + children: null, + }, + { + name: '成县', + code: '621221', + children: null, + }, + { + name: '文县', + code: '621222', + children: null, + }, + { + name: '宕昌县', + code: '621223', + children: null, + }, + { + name: '康县', + code: '621224', + children: null, + }, + { + name: '西和县', + code: '621225', + children: null, + }, + { + name: '礼县', + code: '621226', + children: null, + }, + { + name: '徽县', + code: '621227', + children: null, + }, + { + name: '两当县', + code: '621228', + children: null, + }, + ], + }, + { + name: '临夏回族自治州', + code: '622900', + children: [ + { + name: '临夏市', + code: '622901', + children: null, + }, + { + name: '临夏县', + code: '622921', + children: null, + }, + { + name: '康乐县', + code: '622922', + children: null, + }, + { + name: '永靖县', + code: '622923', + children: null, + }, + { + name: '广河县', + code: '622924', + children: null, + }, + { + name: '和政县', + code: '622925', + children: null, + }, + { + name: '东乡族自治县', + code: '622926', + children: null, + }, + { + name: '积石山县', + code: '622927', + children: null, + }, + ], + }, + { + name: '甘南藏族自治州', + code: '623000', + children: [ + { + name: '合作市', + code: '623001', + children: null, + }, + { + name: '临潭县', + code: '623021', + children: null, + }, + { + name: '卓尼县', + code: '623022', + children: null, + }, + { + name: '舟曲县', + code: '623023', + children: null, + }, + { + name: '迭部县', + code: '623024', + children: null, + }, + { + name: '玛曲县', + code: '623025', + children: null, + }, + { + name: '碌曲县', + code: '623026', + children: null, + }, + { + name: '夏河县', + code: '623027', + children: null, + }, + ], + }, + ], + }, + { + name: '青海省', + code: '630000', + children: [ + { + name: '西宁市', + code: '630100', + children: [ + { + name: '城东区', + code: '630102', + children: null, + }, + { + name: '城中区', + code: '630103', + children: null, + }, + { + name: '城西区', + code: '630104', + children: null, + }, + { + name: '城北区', + code: '630105', + children: null, + }, + { + name: '大通回族土族自治县', + code: '630121', + children: null, + }, + { + name: '湟中县', + code: '630122', + children: null, + }, + { + name: '湟源县', + code: '630123', + children: null, + }, + ], + }, + { + name: '海东市', + code: '630200', + children: [ + { + name: '乐都区', + code: '630202', + children: null, + }, + { + name: '平安区', + code: '630203', + children: null, + }, + { + name: '民和回族土族自治县', + code: '630222', + children: null, + }, + { + name: '互助土族自治县', + code: '630223', + children: null, + }, + { + name: '化隆回族自治县', + code: '630224', + children: null, + }, + { + name: '循化撒拉族自治县', + code: '630225', + children: null, + }, + ], + }, + { + name: '海北藏族自治州', + code: '632200', + children: [ + { + name: '门源回族自治县', + code: '632221', + children: null, + }, + { + name: '祁连县', + code: '632222', + children: null, + }, + { + name: '海晏县', + code: '632223', + children: null, + }, + { + name: '刚察县', + code: '632224', + children: null, + }, + ], + }, + { + name: '黄南藏族自治州', + code: '632300', + children: [ + { + name: '同仁县', + code: '632321', + children: null, + }, + { + name: '尖扎县', + code: '632322', + children: null, + }, + { + name: '泽库县', + code: '632323', + children: null, + }, + { + name: '河南蒙古族自治县', + code: '632324', + children: null, + }, + ], + }, + { + name: '海南藏族自治州', + code: '632500', + children: [ + { + name: '共和县', + code: '632521', + children: null, + }, + { + name: '同德县', + code: '632522', + children: null, + }, + { + name: '贵德县', + code: '632523', + children: null, + }, + { + name: '兴海县', + code: '632524', + children: null, + }, + { + name: '贵南县', + code: '632525', + children: null, + }, + ], + }, + { + name: '果洛藏族自治州', + code: '632600', + children: [ + { + name: '玛沁县', + code: '632621', + children: null, + }, + { + name: '班玛县', + code: '632622', + children: null, + }, + { + name: '甘德县', + code: '632623', + children: null, + }, + { + name: '达日县', + code: '632624', + children: null, + }, + { + name: '久治县', + code: '632625', + children: null, + }, + { + name: '玛多县', + code: '632626', + children: null, + }, + ], + }, + { + name: '玉树藏族自治州', + code: '632700', + children: [ + { + name: '玉树市', + code: '632701', + children: null, + }, + { + name: '杂多县', + code: '632722', + children: null, + }, + { + name: '称多县', + code: '632723', + children: null, + }, + { + name: '治多县', + code: '632724', + children: null, + }, + { + name: '囊谦县', + code: '632725', + children: null, + }, + { + name: '曲麻莱县', + code: '632726', + children: null, + }, + ], + }, + { + name: '海西蒙古族藏族自治州', + code: '632800', + children: [ + { + name: '格尔木市', + code: '632801', + children: null, + }, + { + name: '德令哈市', + code: '632802', + children: null, + }, + { + name: '茫崖市', + code: '632803', + children: null, + }, + { + name: '乌兰县', + code: '632821', + children: null, + }, + { + name: '都兰县', + code: '632822', + children: null, + }, + { + name: '天峻县', + code: '632823', + children: null, + }, + { + name: '大柴旦行政委员会', + code: '632825', + children: null, + }, + ], + }, + ], + }, + { + name: '宁夏回族自治区', + code: '640000', + children: [ + { + name: '银川市', + code: '640100', + children: [ + { + name: '兴庆区', + code: '640104', + children: null, + }, + { + name: '西夏区', + code: '640105', + children: null, + }, + { + name: '金凤区', + code: '640106', + children: null, + }, + { + name: '永宁县', + code: '640121', + children: null, + }, + { + name: '贺兰县', + code: '640122', + children: null, + }, + { + name: '灵武市', + code: '640181', + children: null, + }, + ], + }, + { + name: '石嘴山市', + code: '640200', + children: [ + { + name: '大武口区', + code: '640202', + children: null, + }, + { + name: '惠农区', + code: '640205', + children: null, + }, + { + name: '平罗县', + code: '640221', + children: null, + }, + ], + }, + { + name: '吴忠市', + code: '640300', + children: [ + { + name: '利通区', + code: '640302', + children: null, + }, + { + name: '红寺堡区', + code: '640303', + children: null, + }, + { + name: '盐池县', + code: '640323', + children: null, + }, + { + name: '同心县', + code: '640324', + children: null, + }, + { + name: '青铜峡市', + code: '640381', + children: null, + }, + ], + }, + { + name: '固原市', + code: '640400', + children: [ + { + name: '原州区', + code: '640402', + children: null, + }, + { + name: '西吉县', + code: '640422', + children: null, + }, + { + name: '隆德县', + code: '640423', + children: null, + }, + { + name: '泾源县', + code: '640424', + children: null, + }, + { + name: '彭阳县', + code: '640425', + children: null, + }, + ], + }, + { + name: '中卫市', + code: '640500', + children: [ + { + name: '沙坡头区', + code: '640502', + children: null, + }, + { + name: '中宁县', + code: '640521', + children: null, + }, + { + name: '海原县', + code: '640522', + children: null, + }, + ], + }, + ], + }, + { + name: '新疆维吾尔自治区', + code: '650000', + children: [ + { + name: '乌鲁木齐市', + code: '650100', + children: [ + { + name: '天山区', + code: '650102', + children: null, + }, + { + name: '沙依巴克区', + code: '650103', + children: null, + }, + { + name: '新市区', + code: '650104', + children: null, + }, + { + name: '水磨沟区', + code: '650105', + children: null, + }, + { + name: '头屯河区', + code: '650106', + children: null, + }, + { + name: '达坂城区', + code: '650107', + children: null, + }, + { + name: '米东区', + code: '650109', + children: null, + }, + { + name: '乌鲁木齐县', + code: '650121', + children: null, + }, + ], + }, + { + name: '克拉玛依市', + code: '650200', + children: [ + { + name: '独山子区', + code: '650202', + children: null, + }, + { + name: '克拉玛依区', + code: '650203', + children: null, + }, + { + name: '白碱滩区', + code: '650204', + children: null, + }, + { + name: '乌尔禾区', + code: '650205', + children: null, + }, + ], + }, + { + name: '吐鲁番市', + code: '650400', + children: [ + { + name: '高昌区', + code: '650402', + children: null, + }, + { + name: '鄯善县', + code: '650421', + children: null, + }, + { + name: '托克逊县', + code: '650422', + children: null, + }, + ], + }, + { + name: '哈密市', + code: '650500', + children: [ + { + name: '伊州区', + code: '650502', + children: null, + }, + { + name: '巴里坤哈萨克自治县', + code: '650521', + children: null, + }, + { + name: '伊吾县', + code: '650522', + children: null, + }, + ], + }, + { + name: '昌吉回族自治州', + code: '652300', + children: [ + { + name: '昌吉市', + code: '652301', + children: null, + }, + { + name: '阜康市', + code: '652302', + children: null, + }, + { + name: '呼图壁县', + code: '652323', + children: null, + }, + { + name: '玛纳斯县', + code: '652324', + children: null, + }, + { + name: '奇台县', + code: '652325', + children: null, + }, + { + name: '吉木萨尔县', + code: '652327', + children: null, + }, + { + name: '木垒哈萨克自治县', + code: '652328', + children: null, + }, + ], + }, + { + name: '博尔塔拉蒙古自治州', + code: '652700', + children: [ + { + name: '博乐市', + code: '652701', + children: null, + }, + { + name: '阿拉山口市', + code: '652702', + children: null, + }, + { + name: '精河县', + code: '652722', + children: null, + }, + { + name: '温泉县', + code: '652723', + children: null, + }, + ], + }, + { + name: '巴音郭楞蒙古自治州', + code: '652800', + children: [ + { + name: '库尔勒市', + code: '652801', + children: null, + }, + { + name: '轮台县', + code: '652822', + children: null, + }, + { + name: '尉犁县', + code: '652823', + children: null, + }, + { + name: '若羌县', + code: '652824', + children: null, + }, + { + name: '且末县', + code: '652825', + children: null, + }, + { + name: '焉耆回族自治县', + code: '652826', + children: null, + }, + { + name: '和静县', + code: '652827', + children: null, + }, + { + name: '和硕县', + code: '652828', + children: null, + }, + { + name: '博湖县', + code: '652829', + children: null, + }, + ], + }, + { + name: '阿克苏地区', + code: '652900', + children: [ + { + name: '阿克苏市', + code: '652901', + children: null, + }, + { + name: '温宿县', + code: '652922', + children: null, + }, + { + name: '库车县', + code: '652923', + children: null, + }, + { + name: '沙雅县', + code: '652924', + children: null, + }, + { + name: '新和县', + code: '652925', + children: null, + }, + { + name: '拜城县', + code: '652926', + children: null, + }, + { + name: '乌什县', + code: '652927', + children: null, + }, + { + name: '阿瓦提县', + code: '652928', + children: null, + }, + { + name: '柯坪县', + code: '652929', + children: null, + }, + ], + }, + { + name: '克孜勒苏柯尔克孜自治州', + code: '653000', + children: [ + { + name: '阿图什市', + code: '653001', + children: null, + }, + { + name: '阿克陶县', + code: '653022', + children: null, + }, + { + name: '阿合奇县', + code: '653023', + children: null, + }, + { + name: '乌恰县', + code: '653024', + children: null, + }, + ], + }, + { + name: '喀什地区', + code: '653100', + children: [ + { + name: '喀什市', + code: '653101', + children: null, + }, + { + name: '疏附县', + code: '653121', + children: null, + }, + { + name: '疏勒县', + code: '653122', + children: null, + }, + { + name: '英吉沙县', + code: '653123', + children: null, + }, + { + name: '泽普县', + code: '653124', + children: null, + }, + { + name: '莎车县', + code: '653125', + children: null, + }, + { + name: '叶城县', + code: '653126', + children: null, + }, + { + name: '麦盖提县', + code: '653127', + children: null, + }, + { + name: '岳普湖县', + code: '653128', + children: null, + }, + { + name: '伽师县', + code: '653129', + children: null, + }, + { + name: '巴楚县', + code: '653130', + children: null, + }, + { + name: '塔什库尔干塔吉克自治县', + code: '653131', + children: null, + }, + ], + }, + { + name: '和田地区', + code: '653200', + children: [ + { + name: '和田市', + code: '653201', + children: null, + }, + { + name: '和田县', + code: '653221', + children: null, + }, + { + name: '墨玉县', + code: '653222', + children: null, + }, + { + name: '皮山县', + code: '653223', + children: null, + }, + { + name: '洛浦县', + code: '653224', + children: null, + }, + { + name: '策勒县', + code: '653225', + children: null, + }, + { + name: '于田县', + code: '653226', + children: null, + }, + { + name: '民丰县', + code: '653227', + children: null, + }, + ], + }, + { + name: '伊犁哈萨克自治州', + code: '654000', + children: [ + { + name: '伊宁市', + code: '654002', + children: null, + }, + { + name: '奎屯市', + code: '654003', + children: null, + }, + { + name: '霍尔果斯市', + code: '654004', + children: null, + }, + { + name: '伊宁县', + code: '654021', + children: null, + }, + { + name: '察布查尔锡伯自治县', + code: '654022', + children: null, + }, + { + name: '霍城县', + code: '654023', + children: null, + }, + { + name: '巩留县', + code: '654024', + children: null, + }, + { + name: '新源县', + code: '654025', + children: null, + }, + { + name: '昭苏县', + code: '654026', + children: null, + }, + { + name: '特克斯县', + code: '654027', + children: null, + }, + { + name: '尼勒克县', + code: '654028', + children: null, + }, + ], + }, + { + name: '塔城地区', + code: '654200', + children: [ + { + name: '塔城市', + code: '654201', + children: null, + }, + { + name: '乌苏市', + code: '654202', + children: null, + }, + { + name: '额敏县', + code: '654221', + children: null, + }, + { + name: '沙湾县', + code: '654223', + children: null, + }, + { + name: '托里县', + code: '654224', + children: null, + }, + { + name: '裕民县', + code: '654225', + children: null, + }, + { + name: '和布克赛尔蒙古自治县', + code: '654226', + children: null, + }, + ], + }, + { + name: '阿勒泰地区', + code: '654300', + children: [ + { + name: '阿勒泰市', + code: '654301', + children: null, + }, + { + name: '布尔津县', + code: '654321', + children: null, + }, + { + name: '富蕴县', + code: '654322', + children: null, + }, + { + name: '福海县', + code: '654323', + children: null, + }, + { + name: '哈巴河县', + code: '654324', + children: null, + }, + { + name: '青河县', + code: '654325', + children: null, + }, + { + name: '吉木乃县', + code: '654326', + children: null, + }, + ], + }, + { + name: '石河子市', + code: '659001', + children: [ + { + name: '新城街道', + code: '659001001', + children: null, + }, + { + name: '向阳街道', + code: '659001002', + children: null, + }, + { + name: '红山街道', + code: '659001003', + children: null, + }, + { + name: '老街街道', + code: '659001004', + children: null, + }, + { + name: '东城街道', + code: '659001005', + children: null, + }, + { + name: '北泉镇', + code: '659001100', + children: null, + }, + { + name: '石河子镇', + code: '659001200', + children: null, + }, + { + name: '兵团一五二团', + code: '659001500', + children: null, + }, + ], + }, + { + name: '阿拉尔市', + code: '659002', + children: [ + { + name: '金银川路街道', + code: '659002001', + children: null, + }, + { + name: '幸福路街道', + code: '659002002', + children: null, + }, + { + name: '青松路街道', + code: '659002003', + children: null, + }, + { + name: '南口街道', + code: '659002004', + children: null, + }, + { + name: '托喀依乡', + code: '659002200', + children: null, + }, + { + name: '兵团七团', + code: '659002500', + children: null, + }, + { + name: '兵团八团', + code: '659002501', + children: null, + }, + { + name: '兵团十团', + code: '659002503', + children: null, + }, + { + name: '兵团十二团', + code: '659002505', + children: null, + }, + { + name: '兵团十四团', + code: '659002507', + children: null, + }, + { + name: '兵团五团', + code: '659002508', + children: null, + }, + { + name: '兵团十六团', + code: '659002509', + children: null, + }, + { + name: '兵团第一师水利水电工程处', + code: '659002511', + children: null, + }, + { + name: '阿拉尔农场', + code: '659002513', + children: null, + }, + { + name: '兵团第一师幸福农场', + code: '659002514', + children: null, + }, + { + name: '兵团二团', + code: '659002901', + children: null, + }, + { + name: '兵团农一师沙井子水利管理处', + code: '659002902', + children: null, + }, + { + name: '兵团九团', + code: '659002964', + children: null, + }, + { + name: '兵团十一团', + code: '659002966', + children: null, + }, + { + name: '兵团十三团', + code: '659002967', + children: null, + }, + { + name: '兵团十五团', + code: '659002968', + children: null, + }, + ], + }, + { + name: '图木舒克市', + code: '659003', + children: [ + { + name: '齐干却勒街道', + code: '659003001', + children: null, + }, + { + name: '前海街道', + code: '659003002', + children: null, + }, + { + name: '永安坝街道', + code: '659003003', + children: null, + }, + { + name: '兵团四十四团', + code: '659003504', + children: null, + }, + { + name: '兵团四十九团', + code: '659003509', + children: null, + }, + { + name: '兵团五十三团', + code: '659003513', + children: null, + }, + { + name: '喀拉拜勒镇', + code: '659003960', + children: null, + }, + { + name: '兵团五十一团', + code: '659003964', + children: null, + }, + { + name: '兵团五十二团', + code: '659003965', + children: null, + }, + { + name: '兵团五十团', + code: '659003966', + children: null, + }, + ], + }, + { + name: '五家渠市', + code: '659004', + children: [ + { + name: '军垦路街道', + code: '659004001', + children: null, + }, + { + name: '青湖路街道', + code: '659004002', + children: null, + }, + { + name: '人民路街道', + code: '659004003', + children: null, + }, + { + name: '兵团一零一团', + code: '659004500', + children: null, + }, + { + name: '蔡家湖镇', + code: '659004960', + children: null, + }, + { + name: '梧桐镇', + code: '659004961', + children: null, + }, + ], + }, + { + name: '北屯市', + code: '659005', + children: [ + { + name: '兵团一八七团', + code: '659005502', + children: null, + }, + { + name: '兵团一八八团', + code: '659005503', + children: null, + }, + ], + }, + { + name: '铁门关市', + code: '659006', + children: [ + { + name: '兵团二十九团', + code: '659006501', + children: null, + }, + { + name: '农二师三十团', + code: '659006502', + children: null, + }, + ], + }, + { + name: '双河市', + code: '659007', + children: [ + { + name: '兵团八十一团', + code: '659007501', + children: null, + }, + { + name: '兵团八十四团', + code: '659007502', + children: null, + }, + { + name: '兵团八十六团', + code: '659007504', + children: null, + }, + { + name: '兵团八十九团', + code: '659007505', + children: null, + }, + { + name: '兵团九十团', + code: '659007506', + children: null, + }, + ], + }, + { + name: '可克达拉市', + code: '659008', + children: [ + { + name: '兵团六十七团', + code: '659008502', + children: null, + }, + { + name: '兵团六十八团', + code: '659008503', + children: null, + }, + { + name: '兵团六十三团', + code: '659008507', + children: null, + }, + { + name: '兵团六十四团', + code: '659008508', + children: null, + }, + { + name: '兵团六十六团', + code: '659008509', + children: null, + }, + ], + }, + { + name: '昆玉市', + code: '659009', + children: [ + { + name: '兵团一牧场', + code: '659009400', + children: null, + }, + { + name: '兵团皮山农场', + code: '659009401', + children: null, + }, + { + name: '兵团二二四团', + code: '659009501', + children: null, + }, + ], + }, + ], + }, + { + name: '台湾省', + code: '710000', + children: [ + { + name: '台北市', + code: '710100', + children: [ + { + name: '中正区', + code: '710101', + children: null, + }, + { + name: '大同区', + code: '710102', + children: null, + }, + { + name: '中山区', + code: '710103', + children: null, + }, + { + name: '松山区', + code: '710104', + children: null, + }, + { + name: '大安区', + code: '710105', + children: null, + }, + { + name: '万华区', + code: '710106', + children: null, + }, + { + name: '信义区', + code: '710107', + children: null, + }, + { + name: '士林区', + code: '710108', + children: null, + }, + { + name: '北投区', + code: '710109', + children: null, + }, + { + name: '内湖区', + code: '710110', + children: null, + }, + { + name: '南港区', + code: '710111', + children: null, + }, + { + name: '文山区', + code: '710112', + children: null, + }, + ], + }, + { + name: '高雄市', + code: '710200', + children: [ + { + name: '新兴区', + code: '710201', + children: null, + }, + { + name: '前金区', + code: '710202', + children: null, + }, + { + name: '苓雅区', + code: '710203', + children: null, + }, + { + name: '盐埕区', + code: '710204', + children: null, + }, + { + name: '鼓山区', + code: '710205', + children: null, + }, + { + name: '旗津区', + code: '710206', + children: null, + }, + { + name: '前镇区', + code: '710207', + children: null, + }, + { + name: '三民区', + code: '710208', + children: null, + }, + { + name: '左营区', + code: '710209', + children: null, + }, + { + name: '楠梓区', + code: '710210', + children: null, + }, + { + name: '小港区', + code: '710211', + children: null, + }, + { + name: '仁武区', + code: '710242', + children: null, + }, + { + name: '大社区', + code: '710243', + children: null, + }, + { + name: '冈山区', + code: '710244', + children: null, + }, + { + name: '路竹区', + code: '710245', + children: null, + }, + { + name: '阿莲区', + code: '710246', + children: null, + }, + { + name: '田寮区', + code: '710247', + children: null, + }, + { + name: '燕巢区', + code: '710248', + children: null, + }, + { + name: '桥头区', + code: '710249', + children: null, + }, + { + name: '梓官区', + code: '710250', + children: null, + }, + { + name: '弥陀区', + code: '710251', + children: null, + }, + { + name: '永安区', + code: '710252', + children: null, + }, + { + name: '湖内区', + code: '710253', + children: null, + }, + { + name: '凤山区', + code: '710254', + children: null, + }, + { + name: '大寮区', + code: '710255', + children: null, + }, + { + name: '林园区', + code: '710256', + children: null, + }, + { + name: '鸟松区', + code: '710257', + children: null, + }, + { + name: '大树区', + code: '710258', + children: null, + }, + { + name: '旗山区', + code: '710259', + children: null, + }, + { + name: '美浓区', + code: '710260', + children: null, + }, + { + name: '六龟区', + code: '710261', + children: null, + }, + { + name: '内门区', + code: '710262', + children: null, + }, + { + name: '杉林区', + code: '710263', + children: null, + }, + { + name: '甲仙区', + code: '710264', + children: null, + }, + { + name: '桃源区', + code: '710265', + children: null, + }, + { + name: '那玛夏区', + code: '710266', + children: null, + }, + { + name: '茂林区', + code: '710267', + children: null, + }, + { + name: '茄萣区', + code: '710268', + children: null, + }, + ], + }, + { + name: '台南市', + code: '710300', + children: [ + { + name: '中西区', + code: '710301', + children: null, + }, + { + name: '东区', + code: '710302', + children: null, + }, + { + name: '南区', + code: '710303', + children: null, + }, + { + name: '北区', + code: '710304', + children: null, + }, + { + name: '安平区', + code: '710305', + children: null, + }, + { + name: '安南区', + code: '710306', + children: null, + }, + { + name: '永康区', + code: '710339', + children: null, + }, + { + name: '归仁区', + code: '710340', + children: null, + }, + { + name: '新化区', + code: '710341', + children: null, + }, + { + name: '左镇区', + code: '710342', + children: null, + }, + { + name: '玉井区', + code: '710343', + children: null, + }, + { + name: '楠西区', + code: '710344', + children: null, + }, + { + name: '南化区', + code: '710345', + children: null, + }, + { + name: '仁德区', + code: '710346', + children: null, + }, + { + name: '关庙区', + code: '710347', + children: null, + }, + { + name: '龙崎区', + code: '710348', + children: null, + }, + { + name: '官田区', + code: '710349', + children: null, + }, + { + name: '麻豆区', + code: '710350', + children: null, + }, + { + name: '佳里区', + code: '710351', + children: null, + }, + { + name: '西港区', + code: '710352', + children: null, + }, + { + name: '七股区', + code: '710353', + children: null, + }, + { + name: '将军区', + code: '710354', + children: null, + }, + { + name: '学甲区', + code: '710355', + children: null, + }, + { + name: '北门区', + code: '710356', + children: null, + }, + { + name: '新营区', + code: '710357', + children: null, + }, + { + name: '后壁区', + code: '710358', + children: null, + }, + { + name: '白河区', + code: '710359', + children: null, + }, + { + name: '东山区', + code: '710360', + children: null, + }, + { + name: '六甲区', + code: '710361', + children: null, + }, + { + name: '下营区', + code: '710362', + children: null, + }, + { + name: '柳营区', + code: '710363', + children: null, + }, + { + name: '盐水区', + code: '710364', + children: null, + }, + { + name: '善化区', + code: '710365', + children: null, + }, + { + name: '大内区', + code: '710366', + children: null, + }, + { + name: '山上区', + code: '710367', + children: null, + }, + { + name: '新市区', + code: '710368', + children: null, + }, + { + name: '安定区', + code: '710369', + children: null, + }, + ], + }, + { + name: '台中市', + code: '710400', + children: [ + { + name: '中区', + code: '710401', + children: null, + }, + { + name: '东区', + code: '710402', + children: null, + }, + { + name: '南区', + code: '710403', + children: null, + }, + { + name: '西区', + code: '710404', + children: null, + }, + { + name: '北区', + code: '710405', + children: null, + }, + { + name: '北屯区', + code: '710406', + children: null, + }, + { + name: '西屯区', + code: '710407', + children: null, + }, + { + name: '南屯区', + code: '710408', + children: null, + }, + { + name: '太平区', + code: '710431', + children: null, + }, + { + name: '大里区', + code: '710432', + children: null, + }, + { + name: '雾峰区', + code: '710433', + children: null, + }, + { + name: '乌日区', + code: '710434', + children: null, + }, + { + name: '丰原区', + code: '710435', + children: null, + }, + { + name: '后里区', + code: '710436', + children: null, + }, + { + name: '石冈区', + code: '710437', + children: null, + }, + { + name: '东势区', + code: '710438', + children: null, + }, + { + name: '和平区', + code: '710439', + children: null, + }, + { + name: '新社区', + code: '710440', + children: null, + }, + { + name: '潭子区', + code: '710441', + children: null, + }, + { + name: '大雅区', + code: '710442', + children: null, + }, + { + name: '神冈区', + code: '710443', + children: null, + }, + { + name: '大肚区', + code: '710444', + children: null, + }, + { + name: '沙鹿区', + code: '710445', + children: null, + }, + { + name: '龙井区', + code: '710446', + children: null, + }, + { + name: '梧栖区', + code: '710447', + children: null, + }, + { + name: '清水区', + code: '710448', + children: null, + }, + { + name: '大甲区', + code: '710449', + children: null, + }, + { + name: '外埔区', + code: '710450', + children: null, + }, + { + name: '大安区', + code: '710451', + children: null, + }, + ], + }, + { + name: '南投县', + code: '710600', + children: [ + { + name: '南投市', + code: '710614', + children: null, + }, + { + name: '中寮乡', + code: '710615', + children: null, + }, + { + name: '草屯镇', + code: '710616', + children: null, + }, + { + name: '国姓乡', + code: '710617', + children: null, + }, + { + name: '埔里镇', + code: '710618', + children: null, + }, + { + name: '仁爱乡', + code: '710619', + children: null, + }, + { + name: '名间乡', + code: '710620', + children: null, + }, + { + name: '集集镇', + code: '710621', + children: null, + }, + { + name: '水里乡', + code: '710622', + children: null, + }, + { + name: '鱼池乡', + code: '710623', + children: null, + }, + { + name: '信义乡', + code: '710624', + children: null, + }, + { + name: '竹山镇', + code: '710625', + children: null, + }, + { + name: '鹿谷乡', + code: '710626', + children: null, + }, + ], + }, + { + name: '基隆市', + code: '710700', + children: [ + { + name: '仁爱区', + code: '710701', + children: null, + }, + { + name: '信义区', + code: '710702', + children: null, + }, + { + name: '中正区', + code: '710703', + children: null, + }, + { + name: '中山区', + code: '710704', + children: null, + }, + { + name: '安乐区', + code: '710705', + children: null, + }, + { + name: '暖暖区', + code: '710706', + children: null, + }, + { + name: '七堵区', + code: '710707', + children: null, + }, + ], + }, + { + name: '新竹市', + code: '710800', + children: [ + { + name: '东区', + code: '710801', + children: null, + }, + { + name: '北区', + code: '710802', + children: null, + }, + { + name: '香山区', + code: '710803', + children: null, + }, + ], + }, + { + name: '嘉义市', + code: '710900', + children: [ + { + name: '东区', + code: '710901', + children: null, + }, + { + name: '西区', + code: '710902', + children: null, + }, + ], + }, + { + name: '新北市', + code: '711100', + children: [ + { + name: '万里区', + code: '711130', + children: null, + }, + { + name: '金山区', + code: '711131', + children: null, + }, + { + name: '板桥区', + code: '711132', + children: null, + }, + { + name: '汐止区', + code: '711133', + children: null, + }, + { + name: '深坑区', + code: '711134', + children: null, + }, + { + name: '石碇区', + code: '711135', + children: null, + }, + { + name: '瑞芳区', + code: '711136', + children: null, + }, + { + name: '平溪区', + code: '711137', + children: null, + }, + { + name: '双溪区', + code: '711138', + children: null, + }, + { + name: '贡寮区', + code: '711139', + children: null, + }, + { + name: '新店区', + code: '711140', + children: null, + }, + { + name: '坪林区', + code: '711141', + children: null, + }, + { + name: '乌来区', + code: '711142', + children: null, + }, + { + name: '永和区', + code: '711143', + children: null, + }, + { + name: '中和区', + code: '711144', + children: null, + }, + { + name: '土城区', + code: '711145', + children: null, + }, + { + name: '三峡区', + code: '711146', + children: null, + }, + { + name: '树林区', + code: '711147', + children: null, + }, + { + name: '莺歌区', + code: '711148', + children: null, + }, + { + name: '三重区', + code: '711149', + children: null, + }, + { + name: '新庄区', + code: '711150', + children: null, + }, + { + name: '泰山区', + code: '711151', + children: null, + }, + { + name: '林口区', + code: '711152', + children: null, + }, + { + name: '芦洲区', + code: '711153', + children: null, + }, + { + name: '五股区', + code: '711154', + children: null, + }, + { + name: '八里区', + code: '711155', + children: null, + }, + { + name: '淡水区', + code: '711156', + children: null, + }, + { + name: '三芝区', + code: '711157', + children: null, + }, + { + name: '石门区', + code: '711158', + children: null, + }, + ], + }, + { + name: '宜兰县', + code: '711200', + children: [ + { + name: '宜兰市', + code: '711214', + children: null, + }, + { + name: '头城镇', + code: '711215', + children: null, + }, + { + name: '礁溪乡', + code: '711216', + children: null, + }, + { + name: '壮围乡', + code: '711217', + children: null, + }, + { + name: '员山乡', + code: '711218', + children: null, + }, + { + name: '罗东镇', + code: '711219', + children: null, + }, + { + name: '三星乡', + code: '711220', + children: null, + }, + { + name: '大同乡', + code: '711221', + children: null, + }, + { + name: '五结乡', + code: '711222', + children: null, + }, + { + name: '冬山乡', + code: '711223', + children: null, + }, + { + name: '苏澳镇', + code: '711224', + children: null, + }, + { + name: '南澳乡', + code: '711225', + children: null, + }, + ], + }, + { + name: '新竹县', + code: '711300', + children: [ + { + name: '竹北市', + code: '711314', + children: null, + }, + { + name: '湖口乡', + code: '711315', + children: null, + }, + { + name: '新丰乡', + code: '711316', + children: null, + }, + { + name: '新埔镇', + code: '711317', + children: null, + }, + { + name: '关西镇', + code: '711318', + children: null, + }, + { + name: '芎林乡', + code: '711319', + children: null, + }, + { + name: '宝山乡', + code: '711320', + children: null, + }, + { + name: '竹东镇', + code: '711321', + children: null, + }, + { + name: '五峰乡', + code: '711322', + children: null, + }, + { + name: '横山乡', + code: '711323', + children: null, + }, + { + name: '尖石乡', + code: '711324', + children: null, + }, + { + name: '北埔乡', + code: '711325', + children: null, + }, + { + name: '峨眉乡', + code: '711326', + children: null, + }, + ], + }, + { + name: '桃园市', + code: '711400', + children: [ + { + name: '中坜区', + code: '711414', + children: null, + }, + { + name: '平镇区', + code: '711415', + children: null, + }, + { + name: '龙潭区', + code: '711416', + children: null, + }, + { + name: '杨梅区', + code: '711417', + children: null, + }, + { + name: '新屋区', + code: '711418', + children: null, + }, + { + name: '观音区', + code: '711419', + children: null, + }, + { + name: '桃园区', + code: '711420', + children: null, + }, + { + name: '龟山区', + code: '711421', + children: null, + }, + { + name: '八德区', + code: '711422', + children: null, + }, + { + name: '大溪区', + code: '711423', + children: null, + }, + { + name: '复兴区', + code: '711424', + children: null, + }, + { + name: '大园区', + code: '711425', + children: null, + }, + { + name: '芦竹区', + code: '711426', + children: null, + }, + ], + }, + { + name: '苗栗县', + code: '711500', + children: [ + { + name: '竹南镇', + code: '711519', + children: null, + }, + { + name: '头份市', + code: '711520', + children: null, + }, + { + name: '三湾乡', + code: '711521', + children: null, + }, + { + name: '南庄乡', + code: '711522', + children: null, + }, + { + name: '狮潭乡', + code: '711523', + children: null, + }, + { + name: '后龙镇', + code: '711524', + children: null, + }, + { + name: '通霄镇', + code: '711525', + children: null, + }, + { + name: '苑里镇', + code: '711526', + children: null, + }, + { + name: '苗栗市', + code: '711527', + children: null, + }, + { + name: '造桥乡', + code: '711528', + children: null, + }, + { + name: '头屋乡', + code: '711529', + children: null, + }, + { + name: '公馆乡', + code: '711530', + children: null, + }, + { + name: '大湖乡', + code: '711531', + children: null, + }, + { + name: '泰安乡', + code: '711532', + children: null, + }, + { + name: '铜锣乡', + code: '711533', + children: null, + }, + { + name: '三义乡', + code: '711534', + children: null, + }, + { + name: '西湖乡', + code: '711535', + children: null, + }, + { + name: '卓兰镇', + code: '711536', + children: null, + }, + ], + }, + { + name: '彰化县', + code: '711700', + children: [ + { + name: '彰化市', + code: '711727', + children: null, + }, + { + name: '芬园乡', + code: '711728', + children: null, + }, + { + name: '花坛乡', + code: '711729', + children: null, + }, + { + name: '秀水乡', + code: '711730', + children: null, + }, + { + name: '鹿港镇', + code: '711731', + children: null, + }, + { + name: '福兴乡', + code: '711732', + children: null, + }, + { + name: '线西乡', + code: '711733', + children: null, + }, + { + name: '和美镇', + code: '711734', + children: null, + }, + { + name: '伸港乡', + code: '711735', + children: null, + }, + { + name: '员林市', + code: '711736', + children: null, + }, + { + name: '社头乡', + code: '711737', + children: null, + }, + { + name: '永靖乡', + code: '711738', + children: null, + }, + { + name: '埔心乡', + code: '711739', + children: null, + }, + { + name: '溪湖镇', + code: '711740', + children: null, + }, + { + name: '大村乡', + code: '711741', + children: null, + }, + { + name: '埔盐乡', + code: '711742', + children: null, + }, + { + name: '田中镇', + code: '711743', + children: null, + }, + { + name: '北斗镇', + code: '711744', + children: null, + }, + { + name: '田尾乡', + code: '711745', + children: null, + }, + { + name: '埤头乡', + code: '711746', + children: null, + }, + { + name: '溪州乡', + code: '711747', + children: null, + }, + { + name: '竹塘乡', + code: '711748', + children: null, + }, + { + name: '二林镇', + code: '711749', + children: null, + }, + { + name: '大城乡', + code: '711750', + children: null, + }, + { + name: '芳苑乡', + code: '711751', + children: null, + }, + { + name: '二水乡', + code: '711752', + children: null, + }, + ], + }, + { + name: '嘉义县', + code: '711900', + children: [ + { + name: '番路乡', + code: '711919', + children: null, + }, + { + name: '梅山乡', + code: '711920', + children: null, + }, + { + name: '竹崎乡', + code: '711921', + children: null, + }, + { + name: '阿里山乡', + code: '711922', + children: null, + }, + { + name: '中埔乡', + code: '711923', + children: null, + }, + { + name: '大埔乡', + code: '711924', + children: null, + }, + { + name: '水上乡', + code: '711925', + children: null, + }, + { + name: '鹿草乡', + code: '711926', + children: null, + }, + { + name: '太保市', + code: '711927', + children: null, + }, + { + name: '朴子市', + code: '711928', + children: null, + }, + { + name: '东石乡', + code: '711929', + children: null, + }, + { + name: '六脚乡', + code: '711930', + children: null, + }, + { + name: '新港乡', + code: '711931', + children: null, + }, + { + name: '民雄乡', + code: '711932', + children: null, + }, + { + name: '大林镇', + code: '711933', + children: null, + }, + { + name: '溪口乡', + code: '711934', + children: null, + }, + { + name: '义竹乡', + code: '711935', + children: null, + }, + { + name: '布袋镇', + code: '711936', + children: null, + }, + ], + }, + { + name: '云林县', + code: '712100', + children: [ + { + name: '斗南镇', + code: '712121', + children: null, + }, + { + name: '大埤乡', + code: '712122', + children: null, + }, + { + name: '虎尾镇', + code: '712123', + children: null, + }, + { + name: '土库镇', + code: '712124', + children: null, + }, + { + name: '褒忠乡', + code: '712125', + children: null, + }, + { + name: '东势乡', + code: '712126', + children: null, + }, + { + name: '台西乡', + code: '712127', + children: null, + }, + { + name: '仑背乡', + code: '712128', + children: null, + }, + { + name: '麦寮乡', + code: '712129', + children: null, + }, + { + name: '斗六市', + code: '712130', + children: null, + }, + { + name: '林内乡', + code: '712131', + children: null, + }, + { + name: '古坑乡', + code: '712132', + children: null, + }, + { + name: '莿桐乡', + code: '712133', + children: null, + }, + { + name: '西螺镇', + code: '712134', + children: null, + }, + { + name: '二仑乡', + code: '712135', + children: null, + }, + { + name: '北港镇', + code: '712136', + children: null, + }, + { + name: '水林乡', + code: '712137', + children: null, + }, + { + name: '口湖乡', + code: '712138', + children: null, + }, + { + name: '四湖乡', + code: '712139', + children: null, + }, + { + name: '元长乡', + code: '712140', + children: null, + }, + ], + }, + { + name: '屏东县', + code: '712400', + children: [ + { + name: '屏东市', + code: '712434', + children: null, + }, + { + name: '三地门乡', + code: '712435', + children: null, + }, + { + name: '雾台乡', + code: '712436', + children: null, + }, + { + name: '玛家乡', + code: '712437', + children: null, + }, + { + name: '九如乡', + code: '712438', + children: null, + }, + { + name: '里港乡', + code: '712439', + children: null, + }, + { + name: '高树乡', + code: '712440', + children: null, + }, + { + name: '盐埔乡', + code: '712441', + children: null, + }, + { + name: '长治乡', + code: '712442', + children: null, + }, + { + name: '麟洛乡', + code: '712443', + children: null, + }, + { + name: '竹田乡', + code: '712444', + children: null, + }, + { + name: '内埔乡', + code: '712445', + children: null, + }, + { + name: '万丹乡', + code: '712446', + children: null, + }, + { + name: '潮州镇', + code: '712447', + children: null, + }, + { + name: '泰武乡', + code: '712448', + children: null, + }, + { + name: '来义乡', + code: '712449', + children: null, + }, + { + name: '万峦乡', + code: '712450', + children: null, + }, + { + name: '崁顶乡', + code: '712451', + children: null, + }, + { + name: '新埤乡', + code: '712452', + children: null, + }, + { + name: '南州乡', + code: '712453', + children: null, + }, + { + name: '林边乡', + code: '712454', + children: null, + }, + { + name: '东港镇', + code: '712455', + children: null, + }, + { + name: '琉球乡', + code: '712456', + children: null, + }, + { + name: '佳冬乡', + code: '712457', + children: null, + }, + { + name: '新园乡', + code: '712458', + children: null, + }, + { + name: '枋寮乡', + code: '712459', + children: null, + }, + { + name: '枋山乡', + code: '712460', + children: null, + }, + { + name: '春日乡', + code: '712461', + children: null, + }, + { + name: '狮子乡', + code: '712462', + children: null, + }, + { + name: '车城乡', + code: '712463', + children: null, + }, + { + name: '牡丹乡', + code: '712464', + children: null, + }, + { + name: '恒春镇', + code: '712465', + children: null, + }, + { + name: '满州乡', + code: '712466', + children: null, + }, + ], + }, + { + name: '台东县', + code: '712500', + children: [ + { + name: '台东市', + code: '712517', + children: null, + }, + { + name: '绿岛乡', + code: '712518', + children: null, + }, + { + name: '兰屿乡', + code: '712519', + children: null, + }, + { + name: '延平乡', + code: '712520', + children: null, + }, + { + name: '卑南乡', + code: '712521', + children: null, + }, + { + name: '鹿野乡', + code: '712522', + children: null, + }, + { + name: '关山镇', + code: '712523', + children: null, + }, + { + name: '海端乡', + code: '712524', + children: null, + }, + { + name: '池上乡', + code: '712525', + children: null, + }, + { + name: '东河乡', + code: '712526', + children: null, + }, + { + name: '成功镇', + code: '712527', + children: null, + }, + { + name: '长滨乡', + code: '712528', + children: null, + }, + { + name: '金峰乡', + code: '712529', + children: null, + }, + { + name: '大武乡', + code: '712530', + children: null, + }, + { + name: '达仁乡', + code: '712531', + children: null, + }, + { + name: '太麻里乡', + code: '712532', + children: null, + }, + ], + }, + { + name: '花莲县', + code: '712600', + children: [ + { + name: '花莲市', + code: '712615', + children: null, + }, + { + name: '新城乡', + code: '712616', + children: null, + }, + { + name: '秀林乡', + code: '712618', + children: null, + }, + { + name: '吉安乡', + code: '712619', + children: null, + }, + { + name: '寿丰乡', + code: '712620', + children: null, + }, + { + name: '凤林镇', + code: '712621', + children: null, + }, + { + name: '光复乡', + code: '712622', + children: null, + }, + { + name: '丰滨乡', + code: '712623', + children: null, + }, + { + name: '瑞穗乡', + code: '712624', + children: null, + }, + { + name: '万荣乡', + code: '712625', + children: null, + }, + { + name: '玉里镇', + code: '712626', + children: null, + }, + { + name: '卓溪乡', + code: '712627', + children: null, + }, + { + name: '富里乡', + code: '712628', + children: null, + }, + ], + }, + { + name: '澎湖县', + code: '712700', + children: [ + { + name: '马公市', + code: '712707', + children: null, + }, + { + name: '西屿乡', + code: '712708', + children: null, + }, + { + name: '望安乡', + code: '712709', + children: null, + }, + { + name: '七美乡', + code: '712710', + children: null, + }, + { + name: '白沙乡', + code: '712711', + children: null, + }, + { + name: '湖西乡', + code: '712712', + children: null, + }, + ], + }, + ], + }, + { + name: '香港特别行政区', + code: '810000', + children: [ + { + name: '香港特别行政区', + code: '810100', + children: [ + { + name: '中西区', + code: '810101', + children: null, + }, + { + name: '东区', + code: '810102', + children: null, + }, + { + name: '九龙城区', + code: '810103', + children: null, + }, + { + name: '观塘区', + code: '810104', + children: null, + }, + { + name: '南区', + code: '810105', + children: null, + }, + { + name: '深水埗区', + code: '810106', + children: null, + }, + { + name: '湾仔区', + code: '810107', + children: null, + }, + { + name: '黄大仙区', + code: '810108', + children: null, + }, + { + name: '油尖旺区', + code: '810109', + children: null, + }, + { + name: '离岛区', + code: '810110', + children: null, + }, + { + name: '葵青区', + code: '810111', + children: null, + }, + { + name: '北区', + code: '810112', + children: null, + }, + { + name: '西贡区', + code: '810113', + children: null, + }, + { + name: '沙田区', + code: '810114', + children: null, + }, + { + name: '屯门区', + code: '810115', + children: null, + }, + { + name: '大埔区', + code: '810116', + children: null, + }, + { + name: '荃湾区', + code: '810117', + children: null, + }, + { + name: '元朗区', + code: '810118', + children: null, + }, + ], + }, + ], + }, + { + name: '澳门特别行政区', + code: '820000', + children: [ + { + name: '澳门特别行政区', + code: '820100', + children: [ + { + name: '澳门半岛', + code: '820101', + children: null, + }, + { + name: '凼仔', + code: '820102', + children: null, + }, + { + name: '路凼城', + code: '820103', + children: null, + }, + { + name: '路环', + code: '820104', + children: null, + }, + ], + }, + ], + }, +]; diff --git a/scr/miniprogram-2/custom-tab-bar/data.js b/scr/miniprogram-2/custom-tab-bar/data.js new file mode 100644 index 0000000..cb7a4c6 --- /dev/null +++ b/scr/miniprogram-2/custom-tab-bar/data.js @@ -0,0 +1,21 @@ +export default [{ + icon: 'home', + text: '首页', + url: 'pages/home/home', + }, + { + icon: 'sort', + text: '论坛', + url: 'pages/forum/forum', + }, + { + icon: 'cart', + text: '购物车', + url: 'pages/cart/index', + }, + { + icon: 'person', + text: '个人中心', + url: 'pages/usercenter/index', + }, +]; \ No newline at end of file diff --git a/scr/miniprogram-2/custom-tab-bar/index.js b/scr/miniprogram-2/custom-tab-bar/index.js new file mode 100644 index 0000000..66e0cd9 --- /dev/null +++ b/scr/miniprogram-2/custom-tab-bar/index.js @@ -0,0 +1,34 @@ +import TabMenu from './data'; +Component({ + data: { + active: 0, + list: TabMenu, + theme: { + custom: { + colorPrimary: '#333', + }, + }, + }, + + methods: { + onChange(event) { + this.setData({ active: event.detail.value }); + wx.switchTab({ + url: this.data.list[event.detail.value].url.startsWith('/') + ? this.data.list[event.detail.value].url + : `/${this.data.list[event.detail.value].url}`, + }); + }, + + init() { + const page = getCurrentPages().pop(); + const route = page ? page.route.split('?')[0] : ''; + const active = this.data.list.findIndex( + (item) => + (item.url.startsWith('/') ? item.url.substr(1) : item.url) === + `${route}`, + ); + this.setData({ active }); + }, + }, +}); diff --git a/scr/miniprogram-2/custom-tab-bar/index.json b/scr/miniprogram-2/custom-tab-bar/index.json new file mode 100644 index 0000000..917a4e1 --- /dev/null +++ b/scr/miniprogram-2/custom-tab-bar/index.json @@ -0,0 +1,8 @@ +{ + "component": true, + "usingComponents": { + "t-tab-bar": "tdesign-miniprogram/tab-bar/tab-bar", + "t-tab-bar-item": "tdesign-miniprogram/tab-bar/tab-bar-item", + "t-icon": "tdesign-miniprogram/icon/icon" + } +} \ No newline at end of file diff --git a/scr/miniprogram-2/custom-tab-bar/index.wxml b/scr/miniprogram-2/custom-tab-bar/index.wxml new file mode 100644 index 0000000..6c6704d --- /dev/null +++ b/scr/miniprogram-2/custom-tab-bar/index.wxml @@ -0,0 +1,19 @@ + + + + + {{ item.text }} + + + + diff --git a/scr/miniprogram-2/custom-tab-bar/index.wxss b/scr/miniprogram-2/custom-tab-bar/index.wxss new file mode 100644 index 0000000..3b855f5 --- /dev/null +++ b/scr/miniprogram-2/custom-tab-bar/index.wxss @@ -0,0 +1,9 @@ +.custom-tab-bar-wrapper { + display: flex; + flex-direction: column; + align-items: center; +} + +.custom-tab-bar-wrapper .text { + font-size: 20rpx; +} diff --git a/scr/miniprogram-2/envList.js b/scr/miniprogram-2/envList.js new file mode 100644 index 0000000..ac946fa --- /dev/null +++ b/scr/miniprogram-2/envList.js @@ -0,0 +1,6 @@ +const envList = [{"envId":"cloud1-8g5wmepxce8a3b8a","alias":"cloud1"}] +const isMac = false +module.exports = { + envList, + isMac +} \ No newline at end of file diff --git a/scr/miniprogram-2/ext.json b/scr/miniprogram-2/ext.json new file mode 100644 index 0000000..c225f02 --- /dev/null +++ b/scr/miniprogram-2/ext.json @@ -0,0 +1,6 @@ +{ + "extEnable": true, + "extAppid": "wx5a75208aa13eee03", + "ext": {}, + "window": {} +} \ No newline at end of file diff --git a/scr/miniprogram-2/images/dapei.jpg b/scr/miniprogram-2/images/dapei.jpg new file mode 100644 index 0000000000000000000000000000000000000000..685eefcb65a93207888b4f39e88cfb7d7b6bcc88 GIT binary patch literal 3405 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 literal 0 HcmV?d00001 diff --git a/scr/miniprogram-2/images/food/hushangayi.jpg b/scr/miniprogram-2/images/food/hushangayi.jpg new file mode 100644 index 0000000000000000000000000000000000000000..4438b10ab9aa7ab294829c77040280e2db1f0ddb GIT binary patch literal 242308 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ðlQ|)h`tmA}C5QUo`O($T)Y9(~ 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 qO%}hK{mUo)U;VKDUmf?~7s>y2@&ETl^7j`b66 literal 0 HcmV?d00001 diff --git a/scr/miniprogram-2/images/food/hushangayi3.jpg b/scr/miniprogram-2/images/food/hushangayi3.jpg new file mode 100644 index 0000000000000000000000000000000000000000..dcf53f880c3c9f6b0bc5855859803d2b8f4c6827 GIT binary patch literal 294572 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 L^bo1B8r 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
??? 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

SJBqU}wN5Xvv*hVO(f2 zYKtY1H>!|f7yKYi4_grDRD*CU;A%}3bI`)^9ZtH&!1vH+POTx}1MkL}z8{D+ib!ar zpNIV&@5Q$ndkaG^M@=GuIFX>9^m)&v@9088YNDB}+}yj~)zkj%>^`==j_g;9GCR-8 z-U#xhr6$BanmhCx%cwzWw1Xx`q4WVMH$r)F5~I{{2>vt_lJ0kx!8Wsxo9+&44JG*n!l z{UD+&<29gkv&`WoebEz=Z*ZF{GyITU3Kw&aJXUR}k5``a0k*vOGd|b!L)=`et`|p> z?f65(j!3N*L=5em+IHw{wEfd7k>Re}$w?Ki2)VqQt_ayuQ@QFdFSn)QoWcH&pRXoc zZErg6RAA-jYLfR{^s>mdIx<96ISuPfYgvKv_w*{g9G{ES==t=m(xs(9;zz7YOtoW& z+us5e%Rae;0@lan7$y3>3Ej05ZNu$3Apx=@dFMPm*f8S7T~;_*XA{J zNo86biaUvZ^B)R=rl~E7hNxe$_cWwN7os=g!zkBH+sPXQ-oLtZ*w#Pvcu8iSI3a*IxQz`X>?(_2Q@kQhO|J3Pf^hrNZ z+IkL9ofj3xFAHH_k(~3W01Fzb;2rj`=QDkG6+wyA+Sko7k`NP+XfbfRI} z{YNsRw(&Sv+T5+)dir$FLd7Gusvg#s*#`S@VRu*Y?#j+5@N=Nj6FOEFeBgU0mm6!M zmkn=$KPIP zwXODDGeLDjXW-3MozBb&HhhLwuDxaR1XEE1b%s;2Pfz}L8wGSFR5DdwrtBCkKVgU0 z0mf*lXDMH(?vN=cvis#l_$6NY`q@gMleoY4lpl6CkO;6l`V=5-1L?l8rSz_;ZF6R; z+?&2JsIar(cda31eSMxNPJc5hap$Z3Qw0!da>ptB@xcC}y-x~Nk!wc_dR`B)TGM;6 zQeGF*y%%I&D?Re;rQ7aBZ>wduc#V~6{!FsfkmN5nTB-SsTd5Yr85(EaK!tIEMvy}x zEC>aou(G^k;7;qfd6;C(zR4an@Y?qYN9XQ1%t@6aTKr4x6Q|%q+m12Pw}(is?~671 z)XL52FG)NK)2SX0f+aUE_QIxu=g{mnIewLx)_e<#y4KE(eqe&`{|H(I;J9m1KcQp56XV@N}TvT=RB>{ zZqysc2HZb@`Y90Orw*%L$+gu-?ws8BhD(FP>V{fdy3v{L&Ag^F+mTzuR!FRI<7|tK zj`4z*LrcT_!A?(aXGYtYx2so-Rh&(Kv?{S_KU_*fZ0tr- zXnZff)UwxLckXuu!Tp46jA{&{<|naKr+XUubRQ$D4CxG_uz0uAE#B>v;T}KCcY(Wa zr#x6kgo84D$iH}qzFt;Q(gU@+Ypy34M&$T!mgc!I@E+5LT5WLM252DAS;&2n_KV4>U3xt0&mrc?e_E^+Cv3nL{ML11 zED)+?T|P9xBnf=~q00IguyFD8L@~oaW>veX7JI>)&;MF5>9vQfnuxxyJsFwp8o#k} z9q)25;TuSoOfsXuvO`+0q5zvy%?=k)i&H3(z+MQ|dBCC__slA^ORYKG4f8oIbp_Q| zZ{HT2$$h?5XPOTqgT`G-V`(R)6V2Eh1o`X~t4txR^>S6F(W{pu))^R~Y2Vqse326^ zEuIbPBxrLMfvy78LkBs=#10m&z=qC)&)c|jM{H%V`cYzL2Dm$&l{}MTqicsB-4ha~ zo)O)1Cp!iFxN>0JzJFQ6Ij=uLHwybi=MP)$D2Y>c&3c_>wnJHr!I_`2$Agzi8Q-PF zPgB_vbnY2sWZh!_Bl1@kcvL3B7obc;}>M8%-^`|qPddBldtVv(wbZY$eUmfz+`22{$|-TKtIZk31n4b zVP$=<9@x`|wqH_J(R!06F8HapCtuQ!xsnIHhfcQ?0aMbZVisO(9UK~{~`@Zzh z44Y=mx_GJNKIL@2EXc!$Hj}fu>~5zzs=V4HL)+)=Ir~|t9v^Nv(pOLB`yUTXq%^_# zW|Et6fj3ANq$e#Kw)OG+r(1mF%Os4jSBB-hPxHCf#N^eFC9u8sPo1ap-T`4&fE<*6 zdZ+|PSk)v<_D2)xBc|^bku-L6gegC$nwc22Qs7~~|BrMsr;kl+KJo%yN3ynToI%4ll zyT4!8fHxYEEyssu*o5bJ-OANnPLd|5A}FW^uf2y72L;@SXU>FMc{d|CIEPHN3Ju$n z_XvA8pQEH#N7=^%u(1crSMmg{>*_w?-~HsOY=}`G*uGJ17J#;TG+Ocd(k)Xyc)IMN z(-#Cn@IDrysj~1DeV14G$+h2LA<4-xB_w4|* z7%m(4vTBB9_Og#_Wl*pyHLo*^4?G3Z!AZnG`ZDQaLCW9W;uSIO*S3AH8~%|Pj7*z< zoHK{oS7;bUxlYI~J|C*>{QGq^LHnZLSz;v(odx8+z}k2dEKCb%B{(CC(A76em6m}~ z?^60P^uk-~et9Q(*4Bm2f9Rg+$(?L&Ne<~m#p@r(o>N`NsxlErxhOnBc{cXh+-I2f zO@I7?T)`h(eO>6$t-d>x8%JfSeAl|8z3rQBO>cT9o8xsH_!TtDu90b&f|?vcts8SS zYW722BB3WxrHjMLb^#anWm+C2N7L}?PG&6)4>Md#c8ZAXZv)^lj>u?vI+mh-d;(gA zIEBrOX8)Y<(eX1{tlAnr`>k>J9M>k0ek0~hnlBSI*B`sNz+JH~_`7#oS z)%`WE=&z$ahDzB>G`W(?*d}b3e7q@QGSd%Pbp2MwE+>DFo;r@cdMuhn7CWG+h?#x_ zQ=`_ctZtkrifeYubx)-!qH=X;baP)(=i_ulil{0;2VeXnarsB`9?EzMjS83S>d7_k z8+JpKXNa1;<7Csy`rgJ``i#0YyF9^jV$hSliNeD3NYbGIM2!4>*_RJ<&9sE41>Gqs zcaxj7`H8erNL}AU1W?n@DiP|~itg7+-{nrGgg&yv>P!4Qf!noSz&UizBk>~_!C8_1 zFj{N3Nim=>fL7O&SKi>~NTLxVV_J|d_>;+vBr!D2FdGk4*Y?qMIoKs7Dll$Cf;m(Z zyBsZ>^k`{~>%RhvTbY?h6jtvWhFf2L9U@_3dp;oigs6=AzQdASrqt1)LC^p9?L+`m z%VzX7@WQzV*D7uAHZzR}a?(!-KG@tSh_doGJlpU@=P@%b#wt_W+U*a4&pMnj^L5Fy z0HKXtROTZC^FYIwwY{bGu)8`JEjyE^t>!QqyaNt{;u^hJdWd(z*s#GVi^L+`@0D50 z)Y*4^?!CJ4h2a|$|Io?gKazTC+okV!xw(E^F3-)^)+nVWdNQ}9r>8Hp>rD%fm)9_PM&kY+lL2qrdHb^TJtyjKGS{cp}K3jN4 zRb=n@E1qtw>rQXYsJqx^CZl|@PDae5r>`h#y@tuZYe&BCIkPS_A6E3$XyG%;1ww5n zLY|W@yvHGH7P9ULL_x}BU4jDUu!yCD);+V#%t7jpR}fQsep&%(n+VjhHZ_l zMaBD9T04eiszvK_a>vTq&Mll>)HS!HJIC-BR=tUz zUAnqud|YdPS|<>_t6D4NDL)`|%-Epe3&lli5PDf&tnL8$XIyy=sdJ{82z5#-+1gAo zyfLkm$IjWIa5&CVBkAfW$t_1sN~$Pk(C5cyK}Erh!__({#WsP4bzzIowJk5dYOP&Nm8~@_pdDG?-%va1 zr|RY@(jRwNpW_7pQR-F-T=s9- zbqVkFtWm1Mypqe3F(FR6hl#FttI)X~oGYw|HFlFOs{}jDpI!$3))QOos-kRVa(tWRWwfS&fvtPv9k19V{eCrmx=hNc>AYWDj z`W)f+)2v|^N)vidx-9bg{dGsitDt<2P)R|2wO)UHK-~)2u5hy;|71b+^oEAg z=7*WBzf>7J?FjFgi0ZlvHJWx(&?|roTQK4v@WD=NFkHgNC3^NU#w=sQ?}e!QLX|LN zb#y+#_?Lr5_(V-)s-cmqs+YEBDF!C@>eI^^%mI#}k$zEy`}bs~L}5n%n}R)Yis~lc z?qz*g0r-wygTg}Vq=>!c?U*6VRNKcsGp7M+Np;@j4(9!-V6rHgL*co(Be-&RnDe6b z_e?VyMD9n1NRACjK0I&U)rWXI*U)kU#4w0B zGEuuecPLg)wmK&2OI<<)oCF20mfhsGOx-h7=m-F%3a{O#rL9L5Aas?L_R>{-HKWhg zLZlof?h+=qgnXJr{Y?1Y?CHS;mt!+>e3NS}S@W$v!w#nmcJvpmIb?V^f!#7T*3seo z?z|gvcd#uimYa%%LywAt^u36V22K~A>&F<4UNjfyqH(<(DxXx*G9#~gOu|S}+%eHW zzA4G(^o~nvK1QSk*<(`&U}yqUGwZ6RDm%2@fBWc98$IGsg-< z%l0S96#)M&Cp+pltUi6qKfIhyC{g^X6@H{0CjkG0oz(7e;r2TB+wZ;yRJ7$bAWru$ zh65UJ;be?#&LFj`X`2N+zz!v(4x4 zcIxC${tC^&|nsB zzVjYJjfg~hk05VCx`!Jf7I)Ih`2LZs`cIBd?Dlc@t3UK#`%lj5O2H9x1-`GR#=iVZ zs@O`{YT$*>llul5*)J<4tE=fqNJyA%sg%qH3)`7SzW7T}yRP4BPGxE3P@gwm~rz@NE6rv&f zXbX=Xr2^4b>_wtCEL6V2P2Ru)QfS=V_J03TB{7$`KL;^)q+E%9^C(r(^tp+nKNxa& zr#DTzcR`gEGBdy_xqQl^W|DSGJC zPf!{N$Ji%N-)K+}!1|z0v=NnNvOBh>ZC+toC|oGw*`s_gzkhjXJ(NP}gdKcUG@gad zH*UT=uAf?_D8yU&XF_kfEbV+&tL)7x>b(C$e{;ovL@X;6Q1Z_7WDfNF;vE+G6yvF3 zP`hW@(Fug14T1!odb;>=KV0!Rw1<2|SbrXyqkJezLL$gb0+1-*ll&%OzwghXfbKa# zF%9WchB9KQK5XdU*9zf}EmmVSr`SifHqgA6W=3TM+FvJRaQKY|^CokNzP+c&oMJ!i zcM(E2{Fu~6|1YBpFz^!YS}3!euS&VxQN!ot_1wC zTWcdE?zPA^a~@o%{oZS~3%W&FigEX{w0B7*6PbxqU2JU^$M~HpA~eQ5e-TaFbi@`j zyUZJz_QU0G$mPkrF5x}V(Nq?FXAq-8rT=#$@Hkba=GaEniRq~OPd8ZOO2y-F`AGHM zlJ{~&_>QF5P=^OQ3CYYY2Z4FAv;|DE$cFyv*!gh6xh)o+fwCic7u^ z0<*KDKuB1Ysst{2;&>SpSpQsp-92Y*KPG?nhy@|zqWH~MYMJz0fJ>3^qE7&F^78t;6_Y|g5xTnCT{9l2*B0*A8AH1ve=G6y(sb`9JlU4dpxGfx z^r`g@MK|w_|Eb~77m3EJnrru)k7=8@7#QUyX?xKo_U;Hx8&=618m40$=Ms&BUUym> zo+)H~+;#X3>b}S26kEahTsVNew=|<<#_)%pp_{z+xg}hgXU7hKJdXiVU+&kr;S!;y z%dNgL`P9Smm*FWDMc$8J;;7o~Wv-Q9w5fkj;hQebjN-L#FlWvq83-352;%FC!r@$4 zUFdBBAFeH>Y7g8Jd-${%pA6V@fkGP)ID`jZaDIZesjv13IDWA5^g#%lGWDU_JI^iO zarXEGP|z<`0Ob}@=xSO>LzE^CAe)ZL_XAM+fK!B#8wX49|8WE$e|2Z;?XURqH*@1# zYksXDACK~SuuGD%X(<;rxf~P$#$$4V2fqEvHhgZKqrDY>jiC%N!6Jt}RefGntrEoW z?yvt-3h0l5al22tgWC|#8%EB(IYwI^nU~*cS}x39ggbZk_#WIAoR48Fd!h1fxm8P1 z!bQaLo*!JgC#X<3J}~h4x%6d=?>cjp9gE42_>#lFhu>Gf7Gv~ua;WD047Qi1hpd~S4Ik0jD?u?XUJp+VDuycI?#K$y}b*CybHM+>V z^KBm-lsyFtgfA(bg#Q3Dg);(Tx}53*cP*|+kVFNw^ITkZ~Ld0SsCx0l&jXIAH*@uTJ8Q$QS-_%PHAcPma1dlbu`i;8i6TJ5$j zjAK*j%kZR??s#?H-k(2wC+Srb{NSVU@(9qN7C5kGhtfaT2|@oOVN&B88!b#m#MI#E z;AUoRBerfSbrTXjVqe`ZMqj*hli7XU^@*Z8#KQK%QNIz?a@N?P@BU>T^>bRba%pHb z=9R6Kfnib9woyv6?t}#0#~R_6ZWSO~*3wQV3R$!h1YnG;1T-f)SqzoEFwxqg*>rQO zb7I_=L+Hu4YDl|jmG8mj6La+E#9Z(?*!X=wQqD{%S$h+#T35P`fM`Bz)wx;|xf0Qt z!_@*knYg_hr%MZ>PlL)oH$R*x8ssJPUulM#W0?;2u>}D7==KkEBaSQ1KgmoFD-liW zdQ{Rl=ao;n-iAmzXqU$kfM`^al`aSd`i>j;q0TV!<5~g@OY$Y~<9X!a)G2bacoBH& z?wxy~_saHwWvTarZ%D`4Qw}nN#=(W64hQu2GV!bE7_tuvUYSPETA(e~ z?2`VjdNOO|B5V1UNg8I|@!R?t?+*HwhYM)oKKx$I>^4HClW*s$Kp5 z^nOQpTI@3quO%A4t~=;&HXF2&7~rH%FriT9s|=EEE+eyK5=B;~&0_KTnn&;QFY=41P&D`%7`wRX1D?Eya~n!Jo@3r@w9 zoPUpFUw}wUX8O?SRpf_6Oyrod&xbu-XjbPk&7{=W|6%MsgPMxMwNVfiDT1K%E+D;w zCbXzX7m(gTM0)R`1pxtp5CjAi0;n_tLZo*>O(+7=drK(NLvI0Z&UfaVd*;ra`Oc3$ zv$7|XnVr4%+V6Var@WD2w|QvRtoE?XA{8M|j9A%}T5DRZuCALe&zmxH&&!Abpwr^` z-lQWG)F?z$eY<_T)iwmHQ$71bukK|P2$Bx{)@5Ef;g0O5_k)E5;Jz}9xtJn=HC9YX6DKAE&x@Nzjk1;gkvvN= zC535F>jF4P*zpS2>AN<}Ek>`TX~;d7(o&V;Y_7b+^?u9K6rrDgJ&eT_Gc#{2=IL1w zRbq3Bk--8{;rr1rNsU1o+B$}dI*K*96620?$1=gP`H{8Zy6~fr@|M~Nx-Kwyv{0}h zHC>=)yH&RF)S}5&{o4^N{)cB$Y(x`u!BXUnFrKt|6yj_ut+FNuGfLj4H_ z=_%4hkf!3nWe9_gNH1Pr8}D7S)|sR{!1=sr0x)>^X&Y2EPAk>Y)t11VUGLg=L03W9T*e6cXX4S&UD|LOHN zwIsc%-%JUsL6M3mE1Q=)*W-0 z@U&>N1&5EAwv5VNX=u`oO6;y_+i~o2*e3wfYsnWtAM)sl%dXTv5|4;G1aY|r)ROG-TNA=qDV zmOQb+6+1EX!EKvSto!8cVaZ+YHuu@!j?9g6c%qxDe&?vIX;qNdRAb4&wDqAvO;EVu zdESZsRUSd=Qi?#2XX@ahwCMIIJ~Ms(tFj5450gQ-ew>YI9rslHTEW(I8S9pq2?LC1 znl++hKAVp0u!0s?F4C@LMO_oC$&!(0uLHTR8^a+&pNTGDXgAoPA7xb+?vV0W%Iv4A zxmJL{hcbfz;h`*3mw{fOIl(lvH?Lsji!#^4e#r*4+gZhtZ6n1hceNx}p+X&W$sH}T zP1a4;^9z@#+*SbOcf<_{XyZRjA{bkl!FuT0$yY5+{iQD50XLtQlz7x6Qn=S-3*953 z*H(H?&LRDjB;tu}4U)h%8{zf1497KX+8y1K3KU;G3&svr_R)Un_i%5Hg5HRBsw2$tQ(Zhvl(=?c3)9G%-qjk~LE7sqcM`h_7h*yFY$tZ^rI;VwXa?r>(7+UEZLdgVrv$T z*r3a2qqvM<3ngU_yjtSw3%VOASC~$e&UU8!vem2@u9Y3?=Nhc!YNl6;W^Qf*bOF>r zrd=a&m$9$JY%7t$pGq5k2tYSiA8>Iv?n%!fp^2{J{QaRKk|6;uphu^xk4!Ij)}r@? zt{#7=Ui-dS<-HQ3`g|=LW_d<_d3S^B0r6==va0_$!-~;+-J5$B?oseJ6F)Q8 z&7Q>-XDupf58JZHu>ln2n&sy_YJe>`H}?mVUPDAZS_LB7^@vnrAo5sD#bi{G-%Y7| zu<%ExAZ+wGKKJ9+$_Ae41q^$lv0_HR-t7+_nH#jBdR-AtRP@|3+&3lWHK9&E;up6U z3(m;9S@mK(s-GVF5m`Fm@=Z%kp2RMXaE}MI`cp2sZ-Zp`s`O5@T?86Fet&_m z{n1K$l`U&KWqQJWmN278=ei)%jDK-~fy#X{z8-BI+bv7_QXTb*#=R`hfX6&a@z66v zRRtQ6${w6OiGw`)EubQntDUjDKfVwCJlq+|t}I?-j!>aelgu*w7P+$8IGWX*pP%rF zXj=}t`Rkl^xU_?YWgs8^8k~WQ8^oCPzB1;G)whDdT`qV0o(X^t z5Pdu4W_f>$hrRxGcXG1$sQFpg%H8r_@5@SkerYU-wbw0|ZY;BCeN;E$Bsl7! zSqQisH3$rZ=U*`qS9H2Cd;IKjTqiOiWG|ke^4)nRE}>byuw7w(ldfyu@~??$5;gso z8$#2MkluYI5L?*{GLgJl6dPoUNSecRhKp!Vgt_hewcBuv94E_~ZL-$ZxHviS&i2?f zXza3>^E-PoYVc9yAX&C`7nde5?bm{+J14Ddle^p>Z)`+UFC$4FYi%+8xM&x(KggwYgP|KKHQ&VDTD0n@m zSj=a&cTLi+ftT&219?pc+^0)c+Fb{*GJ;^Qu$yxbwQuD&J*hPT3k_yzC5C8)4F*~@ z*Jdu+0I%rlnV*xOE@`{|{lp0P>&)(O6G#;L&$ zAYX->m>8UKj(*)4lVb~wl3{xjFe@CE=0L5>evgm3}IEJ<=4)MFK{j>N1@u zQ}06x?b6-u60O1(S|H46sqPY!y4+FEZmBQuy#wQxeHUbhA|^x~160W3yBF!?$A1|) z$bbA^V*Z@L70{$A?7QljzUr8oEQ~rqKDgonlV20zKB}c6kq^!*0AT<%>Q)Rk%u4dr zz&^;RONGv&jNc+%Rl+@=HGo&EMO@YJ%V4qe`-u8kt~0^RZOb3F9FO}?qRu?{7f;FK zkLm=Xd}_pVP$Ufk%t)la#J#_*k4DRC!f6ev#;a$iQr)z-C^ABWzo)3=mlof$X0f)+ z7cwz0ii#Ly+?{Y^n@!Z7Di=Furc7*d`_-{I53g5+%a{I)NmccKYohkNEczp;bnlGE zDL%}wB#e3=omjHq%4Ea#r&<3NDkf(0_nW%f)R_azCQBBlEEkIfU|22BTnzt>l#KaH z&~0#HBG!GP$ofOS;PNLyqwS2(j}kS5>ZPS~RKPFP;?-Rq zG#Gfgp~E3>Ka+v7(cMtq0HH=z2xq#RSI3lsU++ET{l>zj@=~X;NqbE2d&2Dp`l=-V ze}~!k1VNJj*^+gZUbPvSzuuag zfUU{oqGXjLxx-VmJ6jIB&u=gWA&tS{_H4g^8{Wr?#FX@Tj^vw2M^^@VblaL13)}Mh z{XGk;{^59LuKpAL7U{w6bs>?7SUJ&p>8!C7nXv_%Zd0n`vhVhP>>~@Mu)0BtQG^Hb z9rg6C>|=D*RI})Fyw%7nZgQevw1*s0(=I02wPd-PB!{s4$zMA?TX4Tv zjNEuP`+fF6Yvy^`@t=sIg~^~bi<(eK$kZXi@esNy@_41pGcY4#QWcWJ(5em{aFPH% zSJRcxJ=-K9+FB;BXRVk2bdtz0?B#`iysgeI1W;;i01SjyZuro*e|qgyOS*Cp8hMPd z&lQnge-ZPcPuzEEV^T2{K+t5*%}Iig<$?wDSSXD0#We+ll+v?uc5vDuX|VEK@B_OCRqju7AUjePsdI{h3VLV!bu&I8*k{k~}vWrQ7^Yp8c)g zJMv{Kr)5vO^x+c3(z?xX)hF&keh0q!k)}O|P$jVdV&mLdECtLwu`eB9R7-ef99!H1 zIUlk0Hy8o;C9Esp`{TWv)jy4wsWZJt4t)4tXh6mGKIz5QpC1{=b~ndlLoA*&Dj!}d z-0dt{Zdvd^N9553OMRk@F-!CLO*sA?y5H9HW;4fCp8q1wO zKv^B(eKieK`;?>Z87wAR@Q;KBTTU?m_JuvH7W!#JAs{U2ZS^N+CKaCjX`P?SPgBL1 zx!1Zujq|*S!%+9n6SumL3$8qBYjH4xZcQ8+n?^66eX&w9ER1s0qozfni|ZbriF{^! z*fT%TgC0$ymrO8k6rh(U<&ih5hH)UF3yu?*ltbV$^%}E)FH#<72Pqmvr@!@(V+B4q z>b!j`+!wIcoPFZpNX$DibX>_PE8jvrQH*H}uUEqBF>lyT0&8eJ&|zHfPSV|$z0Eyk z?mwr|)emUNprN;Madzg={H_iV6O|ANdCern!F0vkyRQbss(68e6KhX&65UbVG!CFnO*d2!eMLm(0xnwqW&%2e6nfY$P@4suC zY&(n73bVy>QF~jIEJt?^7CC($fjY>Uq%*F%TpmqgC{z!Dq2)rwO&2um5!2HG_tr)< z`^toaJt*o+562Kr0PChF!H>t%W@e^QKd!|Iqr;G0Ykj^Gdo!K;dugNBEQn@#pqe!WQ6hX(VaehlxP96 zCEGSUYj3h4(_h=&gfAxSNAD7xJvroelZg}njf2{k>)i|w33t=g_0|K~c5?NVYDiL% z!UNWi%X z=d!{FLr!=4A;io=)PWH7Lx>On^XS)%G$76JJLw9&^QTrZ~A0aNSPOrV6-m;P7 zdrQXUD+!VSEg^81me^#%{ljN00S#wcw~OAehzLv{vk5*)@0}z00DEu$YiV)=R=#~| z%6C7WPnr`jm!mGVs?${cGmAj<7>W8k1x`FEKHI|^o`~X4ekzI; zErQv)^H^$>^y_pOO9S#PFfN5Ny$|$A54OLBPD2e8-}U>fB}GTaTuNR4xi7KZjbF#s zb#oDZ7fkD^Iql&h;yMAaqSeUJ8TJ|pGI`J91<&LfY zG;3p1QlLM-ne3i6C;wVt6v32u=N52wg+oJO5QBP{|p^^N4-JLyre>O<}2gqzF7 zt8+iC4hhxHgmBg2O>dcC2f6wr8N7AVMIUpf#k?3>Wx+}aCv|4ztn%yTT&;|~NuM+D zn!e@^d%d5z6S;o}eAxXQ*U3pXyvt{MdS}J-_GE#{C*s3;a0`(j8s?1sj==RZB8bD2eKh{qvNY zdL>GlmNz%Fk7rsKam~p01OPa%-#AjvJ-+rmOTm0uWOD-l>}N}Y{}@M@>la{mSY7pf z^mX%BV^Xz*<_iZ53=zQIe8JOr8EC@e*JU7y^<|XU$c9>Qm?2-PJQ3LSU?*>qwU4{0p<6&;)?E2laE}k zBzjhKaBt9O%*JS0FwMIJM!L;DsUhBC8w@hy8dd9@;(6yr26rtntJtZI{dl7nC%3iY z?U&9s>M|BuI`4)E=gXb6u#o@TifhDo*NO*8zG23FYZq06xaWrAkRcbQ zosX9#ecl;AJJ&NHMJqjRCnyBr%Wf~)ceX2hrtulg*qB0K1W+r=iTHt9EpaxkxFXGs z9LzhVX8;b&Q4skOy8{(^=Q+L3qcU)}oPUkxlaa}Z&Gi+6wsl{UI)_1mPEk#xMVbGE z$>vdzw!^kE{RgEkUh>VK*I+C`2M_;M>07#IzMKEObzoc45%c z1fLOCvKiu77HsDtc9JoYt$?YiOFfzW{i=AoE}2cw{SKdG{G>M@=iT7FZix@JRM#9E zQmAg)2hI@A;Q*725y9ij4{xFk51V17p8|q zUi_`&G32b#8R=I6;XmL@eX5V7GYe!donTwAFXXu-3`;(b9s^B`;|Cxm6<)WvoPYHm zggOD$#E1)I#_T!Ytc$fLq+%(L8D3u)kpV5 z+SSWjy?Q2oaL3<-<@pm{JIuj5vnobMh0hs|yPCZM$%cfDNej;k7goI=8=18kY4o+H zhTWA^u~t%Mc>+FDL4oJNWyA{vt8^(V?<*%S5n%+EJ%k%^9cXuOhd!u!<|a3rs-buX z>z+$8sJS$GfMW1b<4uwgy(=92vT{xb^z)|}vwm7Yj&127&^Rp_Bv6?cw~Nir_Ux_W zx**5Pw85w@l<?%(!gOS-CG`^}r@jOTC0UJ_IbLflk zzRj@3;dOGvTdy<0xHd1ktwky#8M;McnX}N2zdL&46e2RQebgl47MjQ*eQB7xkJD4$ z#R~COI=3CZ5!PZ5k9*U;-+4_*5a*-wvl;wEzs;EoNdjdg9mvVt9!)8v=oh5Ccz=Q4V<@WX{O3x6s+)2v^1t z*At73OhIQkF>&njci8gR-+2xaqPmL7%CEDv;&^-^-+Y)@@ELl~0njX2Jig1IbG*xb zDMLDp+if=twb?DS{17o|gz=#L^EyLKz;3^5FUC!%MeGi1}f3c|DSNiRv z#{i%FU21mor7y0*DYQ;rvj0om2e-B-Z`KY*ckX+667oo$rdBDQn|QA;?geYunXL=;(WZ{Q2LzSAX8Hbl z5kchVm1d9O1;n(bt>WM{)!nk}TioV@1@pK3Bl)_AkE5=D>vw_2^#$eA zuQD4~!Q*9&a7))dEvBUEp!D<%)Tiq|b72QWyIbjHn5H4pQnJSyY~9}NFfEhsVo>E< zy*BF$*^{uWZT(Bm&1GR>*b6e$|8g$?^o__YxlYsS74Ma(Cz{c_&u{1TThcgEQYhWh z5B)s$QA6Nh9R*NQfQ=iR9DU`MWbQfP0I{Dc!~Ie)48f(+88ZaxQ}(5BX;O?qL^(Mh zvSiq1QpuguR@87m{Dy8la)Z=5L?tm?=bFi&S zZb@#I_vvlN@bck_c1Ls5n~vcHkz-^~dI~g16h<**zsRCi%{MbFyHk+1H`2T3*`(C8 zz$>21;qf-(`XpnrMB8omGDr16*Xo1I2#av{;BUlNiC@hB$6t$)h|7`uZx7`Ed>Q@U z#_ASArvIU;{7(Q*15XwWJG+v)j_7E9f_nj|9^HL6*h~23Gbl4!9L9;`N)Ju6vp&O7 zs;`hA%B|QkFVUa52`f9pC67q(;P!Qx{9$za)&YBH%*7(rns9HUzqL{GQbT&(bm2b| za{JMKVRNrEd&kP-V2;}(esJ0_Kd3z(xi%L~ zrH>X>aesgcQ|P5%lVRi=ao+8ckZ87p!L^AT3}1GWv+%>eo5cU%tH{1_g#V zwOHm3Nu^X%zs8f>_qGj{gHq&ZQlGp(wo2~W!K_DLhwKeT+fhnt3{84d%ZJe1f~2!k zm)g;%vnYYq=f~?TEdG(KWn?P9F&isV3{xp22qKo;N_|t1~HKpV*`!o#d zCFj#ZAJ1t;CnWQb-OgeWaA;Hh^ES-^1~{jo_S*80wRi5c-^=Bb8i$-HAJh z@A3rm5--x5Nj+Sq=3D)JET@bq$nnIgajQ1j&2=wAk18=i-)dr5!S!ctRgg>V#a@Yx z(|x77J{9q2MEx-d`{5+$BY;J2U~Z~wC_`28Xf`bp!+yll!y$jlg4E2KgnHm6>)Vbu ziH>6%DKi!PmA4M-M8?)xK;jDP#D`4DXBk&7FXw%1(5_awl73YHEN@v^s2#VySS^&D z%fjJ@0k*YoVN@o!l)Tg{b6>x-T3OjqOw|P5v>)ZO=Oa5_Lsp00;o)jB&;WK^*yr9E zDhk09uYn+fiBRuZpDq&i`Q*ZH^7AOlv^wXSp$R3?STk|qb)l@rj4(Hary0+Qwi-EwS7@F3vh^M)t+? zt$WI(Sjy0EX`ft4kYqq8DT%kXYR%lTX40oB=*Q=&6awU{Lsqb&dTqS~8)>`;R(@_1 zy=o-}D=xN;{^4#zIYbtg^;@I)R^X_ke#MJfI(x4T2?|I?{UH6o0hH^5J|Y3^YWyn& z^SrnvHc8J;*Rw!)6d^QvH7DRaW;1k}svmZuYzo4AILa!cI?vLzG9LLM*k!(E=T%fe z1}+_Lc{(v>L5snKLYi);pdAdhu5OgTv22v)Qs0_-u`99TbS@9M*w8heP5yer^jA0!=v7+K1 z8;wCH9tn-***`??Y2Q_M=GvE<&y~d`zmgf+4C+XZ=b}3Hq5+3?Hj*d!m%1F~Fm~#O zKRQsY8pGwzJWS0TU6-n-d1@p)$S%>ROM={%pbUGuOiTq8c#Q2MIwOqpXAZIigsDAz z(2%dMZx92}64ohZ>8>v&LNd3LKXmxLiNk zZ;!8~KM@chBE2FRm^$>z_mnnaNf|gzo0F1|3zO&V2@{)={-mG9AN%XLqiCMpjE1j8 zJ>7J>*px908xDdNo>-69X&3cwkBoi?@p}5W35_6KD-iGZiu=y}5nOou-Oe@t+SK!NsxB#X_ zTEw@H&O@xS=bvze^frlEYMa)aEcWz&eAl2Pb1i3~yO?}bu8k${T8y=&I?5h!!wPii z-2sbeSHggNO_KrH8muP7DemS*HgBaTYVYFjoJLACKBVojg)QREz247IwBYNuua?Es zu?tmPUs%D37B2o?WU3{IDI35(!c{)%hKY7Cc2u_K?UV`*EO*eXj)u#0)`Q9%%?E9@ z2%9-_)_no&K&uh0Y<-`#gs{PZUUBG!C)=_W(NDxy**0Uclrl*Ty3swL1GMn8*$xJ} z!wr4co2snJvKH~LJf3&Z&JY#z6m?EmF@t`MKV{7UC0kh;Wu;as_624$DpM%Ex*IH#pXOk3)I+8ixtah8?~feDEK03sF)HvRA-Yuh zUc6b@V{&q}_ufb2bM~|@Kz^nH{hFZico8+BLN@p6ZBH$!JG#=+(t7TfOV_{?xl&4v zMd<@G_{s{&Zvgop()M=pRGE}l8;v0!*<8*mb)`wTsqaZDHLMps+g1>`~LpBh&=YgNVsV$IAr(*&zE2l;avFxJ+hthkm zMP~fp>a#vf)o`yR?cw9{@(S}mLXLo)9=$s8=+?YMIhg;bUdZs={YS#@c%nf#{2(R$ z={pW6IHQ-fBjQ=U=OIThF7s;~5lhbTN?-oKy|dA?bH*87vCx`?WB)7DFC{M98< zx^zkzW2f8~lb$!Qe61^4v3}EAmxhK$K6mbQ07q*i9&Rg-Q?TqO`?Hc~cqDMJWjn&o zn`u+(3LnqcDYdoaFHZ?A^BCiUkNM1bJt*4ovjFC1vYH1y6PtK+5cZ>|g z=Tzl{OnLMeeAyd&Cm%?-I$J{_!vO7})qFUGKG)td(Vrt)lc6om8OdJj5dJPdv{cKv zJy5n5VqJDhOvIxt`kCpjA31CfjliWlG=zndum2<2`mv+-P#@|IAn0f)|0BUhyu=+K zH-+!5r(9|G@Nso?)8?1@3wk~h5aKjP`yb)d%l*DAY#B6FW&xt*({LR?&j@d zB5ZtYG;y}K38E8@b^8*@)u6kZnXJNn86m9=MH{E|8x*{%>xmv}Clf$1Tv~tJZ?kz7 z=Fz~VXwG7vQ`>7Y!UReVwDiN4N>rKex)*it-dWUPXGmV`4klh!VOB>gTo@Q2VlFo9 z;fdr4km{7KQy3rf5c{=L?r!Z6*MY5|kCX4TbHfI+=id@g6Z+xTCk?d_C_acL#2-Ewwns?vTE zTAko{FY$+QM+K!~@-+q5QWB^uuV&~y!T9HplUF_gFs!JDO|r38@i&n)uT2ap>i6*p zT=wwD7~bP;mhj&f;cqIrXVw_@jo7)cJR7*w-r6?{1LC_U3LAI9;xz-$&D{NG0}a=- zWk-8O=3i=y{#=`&`ogLIc;#t>*Fu@ziAwcVG|FxfdQnrQQ%*44KaJrT4hSuia>_js zQ_*jz9A2#+9+_eLB2ZgVS5GA4-%)LgIr!K|Gqf7km}{To^T@t?3NF&_FzxU5=2rzm z!sR$!Rd&N5Ery>(_h_!L-!MbSMp#D;wDTk$I230?3ucPBko8_?dgHesjnn(_R^QmA z9p`;~NFZ{&4#UD)nogKQL}s;O*xJY7`7~feBW9DSdvP}H#QIEXIb6kP3?dBHHn<*m zell}Arp)Ccqb$@n`)1%{6Zx>ZItd>^v6{Q}AR%Ue2MRs3V|u9uPCm&!>&9}$XKhHC z_wkM@D!h4myZ`y<*fUr5lJDnLB|i_-lNi>5`6*i+hu1?uoqCC!0%IOW9BduAvXcP{ zxa$~4MTOE1zWTd-ne_9E*6j~`$Pe$kweBC(KHzG(RJf!eq9D8k`%&9+L`c^p_m22EN_d0TvDg1PerbSpw09-MV00k|B27&Nh=-eXgt& zVAe6;_zqdY4Si`BwYHJ1!Umt_HLe_+H_?)-`2juK&Adxq1bS_39-3%gp)4t0^(Y$0 zMHh(xhd!NrAs?6>UVI*_z`pxgyEuFM?xJV>FAbnrJ&nY&I^n(ycAy{qLPasokYHE#<`Qc(vmyQAa%O_)=1C$?xg7R$-qX@4+7-_O7fF-{Hlr8m=} zJSYX&Dnj;bG2DJwTxo_r1vq{bhMw}m#;+8w z+w$;6sCUZLXHxk7rOB=qL$i@EkMFZ*p>0{=EvPtxYH5xmmfv})p*rye{&=(fek5y8 z=BSFS7@NApUUVTunixf1Rg|;*A35-Ov=9=v8NF_8>*t5YlRssNk>hhzp-C(?Y`rxK zEv!4pdH45$26MrTz7`8sycT?%?t!Dhwfh3w5oC*xOBn-xE0@RkUJCYFe8171jPB`O**!Lgiq-$l`P?&5j}OyoZJ6 zQN<@&H7ORGQpMQx$^8P?8wj}F+Wge%yVOC z_JJ|b-FacWdHVs4)acPtvudfRaJ!`o_v^Gt_OxC_&H`e9%_i#^(w;I1YKdS&g{x<1 zs+}}?l=hiy?H-3lM4r7=Lr9_uvtm;mJ~y1yw1w!%ttBbnAgyJ@7pW0q--?p^V{JKgK9o#z|!mRh@}P- zXKWZ(`sWZ_l!CX^8A+&-zFt?mngh=;Del{C}bQ@-h zc=#4N<_~WLl+^5aNQ`r-x1ZYY9Y}!iT$uBTs3Wdtgi`srRUYMvZ-hT43IFHwW`5<7 zZ3=<7O<5#X3%yjT4-A3!#8V%M(hutYi7!_CUrK@hZgvsBcPr$7X`k_bY&OVma%l~ZVST^Ntyo5BjW+ftNkX> ze5BU-E^4*?8@qsn|P9O@HJ z%z7}l)LAfk%V@t`1sVd(tzq<`^Ze8|j9vru0*WhFyR!+>x(@G^-dHZJ;TH=`tZHn% zG~eA$9hn%rXbxM!eb*5zb-oaj->Mw#H#$+`(xO_8qP3AhgK-@4B;;$fAq(lc?a&bR zb!ICGufwCCN^GAaG2Y6%fHoybrNhnJA*}Onm<8>j(A?s39Na0F=q0mbTly-Ws|4_a zh?F>{w){-hE*#BBK3r^rY&E&5?G-yXEQUTJ>D+Sdna|Lre1YGY$>Ajr3a z#%E~k^)+by;V-0E&>=4G$52Uw0H;Yqri5-|;Gxn>WtkL(x*(^PmY~V+ zm0G9U!AjVsCcNHnjG`ZWwI$BopCQiAneS!=j`|MoH}1oBa;5z)ioej|^bJ=#KhyR{#;P@*m4z<;P20W&ldTTldsmpt|_4MjT= z>qSqX?3XfYoGLL3U>X7nFcmtMYv%~a}Qmji%zG{)qRntIh_M-vg8b0T^zAH{ zpIejvr=RovJ`$E068j<~Mn?Y^PB%m0bQpE@J)>Lj-SNxPqi*GRCdQn5;Ph@^6a)~64rz7e!kd7m&6R!Z_hsqeC4Z&ip%IuSnz`5Zbv3~zC}P|G^HuK8&buPZ zbzLptX*`O!t0XuHDbLX=FE312$!`KBTqAMg%zfAEOx@l5SGSAr%%gu#HlSqkN?q_$_ z_1?|KxwGGc82Cy8kRKtBt`{QkuOyP>L#Jpz%+Pj&?#YZqZ zOg<#CJIp5dsA^wCzStm!+Tmp*Lzd<+lm|Rd5U1Pb8Xn2;78+rgfG|YG=nuK%>l6g8Rbazcu z3(J2Cukk|v-BW#Z=sZ~mC&%#fZkj}g)$$v1)f#5^yxIJazdKoaw_vnD&NzO!0$oAk z0FMT}`k_1b`b|l)uPZRW(Fugcy^my!EX#LG)+(fo^aY zr>LrHRM`LflhvF-n$3ZxO|M+V#Tps!^6xC+4AZnF$+;vneGFyThHI+;xl?&EWOn1Z z5u0Ltr>OmVU9jFVJJ+*l=z6OgjoTx>7!IE(Nm^paH%uO4U+BLqg9dOG7vm-mzCNWQ z!|3l_Q6NRK479U!^^h_i^LwRUkQO4*#^;IisAgT^_teSn!=(|HF7a-~9-Y8VnVuQH zKcsN@@y^kppDAmHz$`47dzZ*j+Q1Z(^W}AF5xw)i`Sq-S1om>jC4-hLwQ)xQ5Ms-I zoVaKh4e8J_ChX!OH@Fn4bd(V<7jy~%WzKom?v8i`X4G!FZamiiK#VbDMlYw{I9c%- zgIK|Cd0Ci6^H9?A!$>!Yyt2s1+1cabf^Y3CEO#d-N$%$=Ngea%S!|T?POVn_kzij> z+4!@cXAhq&WDT1z(dm0UYaDKq69VEZ8_xs9`mZcXBGA=i>5)%p!Xs9Occ>BXBe1gj{){wb>7?B%s^h zeV-^K2ls5iP|0s@yN$Ii3p~n(8l1MQwl;cZ+E{zyO2hRJ041ruKjGPs)9`GY6WHXi zEiybnUgS>She};0NAHki3=3a`)(I`uLv2~t6+(BgKw7&1fcYjacaA-P`A|e7@}L9m zPaSfkRF!8F4#okIX85vlfuzdY8cG^y>Edr2e*r|uYNXzYLfLsi9w;`RlU_3}p%7dY zh7Q&jeNY%M5LCL*tBfqHaoyPQ(BEowNPM~7#>wJ+TbBea{gfF^vJPwZC&qX3+kY-2 zG0=ErhC}GT^P7dK+rUqU5}btx9)30Od*=&$BLj_+4!;7Zs7Kq<2P>z5}6vKCaJ3dq0q1VP?PZ2D2#I*D3HNutO&D3ErmfjW-cgFDwJincI9lGswwn|%(tXWM=$7Y3T(&D5=QY&=T|EgrPC zab!$0|0^c_)0I{7*7)(y;kg%RZ2>ZW>91GBPDxZIWUN*6>a+6gIk$yd_|}$kqM@&W za*_jrn2dXpUkr8y4pa`5xsA?DTVsmMW>tCL*Td2Ld2gQiwUgU7@WZCr`4k;}*)KciUj3-K(m$JoIW?Hs9D^Mmp-`_ODnsNXH;n{TB+t`Y5T z{{tw1E>NF!7l4^MTc3>kCsW#hy`^1hf4OX?>QI{``tc5)cqsE{y*A@5-^urReNSR5 zh;Scu^7z*kQM_nw;aZW1ytYv5e~Dm)ONA`dNolK^W5+G4D{Gf zV{X<--y#?i@5cH=;mZDGO9Qh z89|sRPmiSwY6|v2T?M;!;pblZfU-9&wtoq{*yP)1lSgxHSWso97C|J|F_MTBqgm1fV5G0}qDn*b` z6cD9LFQHke0s_*j(xgK|4;?`T3?&q$By^+(X`w>^sRGiamjIy!LhpF;f6v})y=Skp z*EwJIhsm1Bm&}^XGxI$6eO;ukyX7Ep|vNV*|Cld&q2PEPPkso9!K z5XQs7={+VzBF}s=Y~gip?(LXU;40wCE*N_cH>!8^tNCTO5^>_!!;n@A!NSEPa-KLP z*V!H%a~A=B!ElWIvV{IS(v@%{W4lojn(I`qit=Y7h|3x_xcUGd+|h^A0NrH{m%o`D z2FUyx%g!x+M;tCofP7Ws_2R9`;Yx#l(fH2eI_@9P_0{)xY-BU?;u-HPq2IoaWulRV z179@^v7Jnl!)=llX;m&tOLEz+-a!Lu)5!w=0AiNq!M|KyETRceBI?(%NnZbGeaaV= z$ZEc{&CRCgPHSNOcfpH$6S_0~50R>tdiP%OJrr&>6VwbkB28cH8)bJbO-@)B=h-j7 zyY^qi`f1zm8~Rv08}gLR$3zHz7x@K z@qVYm9pApT2PA51(1VldU-$hb8VWZ3%?G|NUTW>U_B+^2Y*2LTulVc!XC>7y$Ef#b z>;Nb5+;5k?J!@BcfeU$aS3h1Y;Kf4TNVNt_D@F3&2IC~m?>-k5;qeqp?>9C}N#>%JcazXsvM1LV%0 z`>J)Fa-G0LvQoMPBR!H9HWxgG&XRZ&b8)&~r43?0IVM%_iy;m9OUsL#Ct4@^ICINZ zc_|{g<2H>Soe2^BS&RTZhVQUtCSyGMJ)AtLDD@j6>>^)0^_qRuz!$+gKNpL&{1U`^ z(oP(~lJ27m`I?sZyMocyg+C&nv_K|=i^ceN+wWDyl{@(YEHN{R9L|n+_%_)N!9@lxsZ$Q@(8h-pkmyy0X&8k+ZuY4^&WGfp7)J8i) zz=O2=APduPOBMFv>E)h$Lyfiu9!HRmyLVDV&l=O9+Vwii8g}sqmQ|vkq!glSZ;_k| zcWYr%*hNv_cf=E3qZ><{)Ip;BzsqYKX^-!KUlfAGo|sf zw_Z_=BW4+7bBN_|m+BOqYPLLySn?gi8SSts2#$U?Rs(X_Cf>Qh9V*?$nSMvpn@wUj zQ6}KNPFwFDnEyHQIRK)~VG|$Py*Wrp%5aImZLY*~){Kn5mFP#rC*avT4C_D%zO(b! zTJ$@uS=B}p3;J64{m@Lx$7+t~yri+ZWP(7;pwR7Fwi-z~Qj8fGzqLZ8hmWpSVck^U z7}u2Ly9gMmPBg32X7&AJ#ua~Ah+@|HBuxnO1%he(kuou4i{WpaqQ7FlV`M^9d5USF zJzO?;Z(0i}yqD0OS`TOcGmUwlGuU9TH=Z3iU;;`Vl_s~v$@rzBN zh~$W}D$I1>Tmw>#K>JKO-_G#Oo)OAsN zc=wzT5pPM4E-+H=gtfVosNbLh;MTqgojC7+U*Y8HcB0Neg_e^N%_IH=MUGUi^|R=f z-&bv$Oo$HkM1 z9%Y(V8#SE*s?R8_k?FR9XWj=p2c^@`!I`%_%B?w(_esn3(jd1leb%3TaX$#upG6qV zE2n8_$U502Z+DGq_GVYQ88RNuI*(MsiU~I7Q+Uf9&CjG@!ZVxQ&^XxxzyWSUtFn3W z{)imy!C>*?J2%==mHaR16#Iw>>&IJ!^xHZcAvle7^&s~+31dI;)zD6rf zSag^}7}P|+Os#23!qgk=S*RdPWXkkmr6qGUYE3f57_`M%_GMKLmlsd$AUVaQyHZz~ zwqxU|RihPr66C+%3Gq9^@8U~V4X48=FkrgBXC8=&mZ0idE|rs$n@kUOTNj1zhbAa!2LxNRMA*$Ji~MEA$7ZchOot;|O3m$h zxMR6URvLvQ#jUK$^l-SxL?}|BGx3LU4bHX2zQA05Z^}b$cGlaqZv^w=<}1BD89W+< zW5UYGb&Af!K)aU@nG^*Xq}ypA!lHi|223|=?a?~OUcdJ~?)0oV{P$U9@FWM%A_tD- zxlu{-MRg3VPbf(&gvpR~E_n2GGXuHy2mHFk7wx{42(qyamm1UsPFIcUHGh%Jwx}6D zn?!bASBD0Ws=t!-Xxp;bvQ0PHO<0oKBUL?qY3Z#S=YJ{KWW7P~Pb?AclJn0H??Dp2 z3!rk*|lrnh4NT``zwSTI!jmS0^$O@nepg!Wd zrl=s?v%DN*hzDtZ#g1c(s)|Wkm446aRfFk^V{g|pc8Ac0sFkrvv83q{FI&9Re1Ahu z=-6}KmQ=}Y9{EWwe2f*Ma~rVU>GWG@sq*Wb8rRJZA{9^`h2kue@mg&Hz8P~7ivP== zhQM&$(|)5ufh(htUnlhY1?4!q=DXLuq50#_-Y$)&04*F5!h+LJkhkcIs|CHv3ikyh z#vDqA_gY@H%-b@oyi!r)du41g%Q#VK&a#C#G_(Iw7Bpx>aA1+Oi8DkE{z(S~)Ly{B z3VLJJw>~c$Te~ZQt>6Wur#;g`{OB3ZY~YGj7AG$`b{ zA6s*>UP-hIz|148c6pihb$U#g41|hcIhgJgkK3>+(vrgPKWIp%;=>5O-A*;@Kg77E zD5!Vut7y5eBBG$H0fR~Ay|S}APEFg@8?ne8mmR^!4mM^_nK|$r0pEHyq>hf6n9*X5 z5o`+&0V42OUw-N3T_p07*5rVl-hAHSSTN*XZUQAO`7$f?gl=X}Sk%JBmaB4x%1#$T zkIUTXDuYM?_n8Qmzl|;`{%*gztsAr%-Bglvr2T5v&3M|=t%0CJ;gTu#0NK~dOjbDWA!^5XYIZoGAPBgiN&9> zkJl3q%u-jQhxH5`)`Q-b1{y>cXqNbU%1v4(smw+<7?47L*T=8W*5dTJBGfe!7z&1~ zd%F!EL8>G;eZzaZhLP^Y9faMq@u*IVB z3N(S%0Or0g8?GMCAdJmTv%0z`B#hOdE2{}^2|?Z%Q<0Ea1j<5T@ML&@I{YdqaStxd z>rne2pxNx!s6hRg3BhQ8Me_G0!S!kag}9TTr7e$~$EUX3ERU5VW0u|tQDF09&v;9H z*N>bhzSDP*;%M`*Q-!%O0mlgpz4Eu8klvEP708w6B6MdPxF;P>(<>Y#=6y~x*is&k zgipwRQBe9zt0kW!w`&d(`6&&2sM-y%XU5MUA^;J}eh^Po@& zM)cHvmHQhF;53CIbREllDKn9$oFW@5aImuK?PlI2ci+Va9HUcn3P|sRn9eXD`|QI(OSgapLvCv)wvJO_2sxkt zz7YP$>JD`9^%1VV@|DpNc?{eaU*5GpSj!3oZdLq#kQzNwydEeJXld>Vn>+syAi-ON zFR4Sgi0_*3^qzTE1WQ(@$=;R`?o?>!z{4}sJ*B}`I3PLl70lgH5#_6^9|K&U$X2s2kG-8G5$DG?W@w#)?@chL~4WmnvEAufv80?byVn%%!6e1qi+ zQy1q?3qM>r$3*D|$sG^q&oABYlB9ZAft;Z|tfJuw+KyLQi~RKNwGSXsv0{mW$7cOq zDlU3sxv8*?D(@@b0X)B^o6R<&d3{=WJ0o{&YU9$M1f7TEdc#@Bc>$*|V$hLVr(*Yj z$4GOa?4q(wLwyQGk`$09h`mZdrN&-SK6FwKlG*ff%*3M~A;74EQ$B*;! z95j-TlF3UuMBXHn`;$ZuH?S0m7-X2!nZ8WrPW z4YjZDGs;9%`MgnMaqqT{14XVWZqVEg2+j>^wXBqk3=&#zVQG|GxGnm6*EPi{_;!M^ z%CdvI**w3)<9snfS<94a{I|shW1TQVrbrgzO&FgAY>DMDVchzwxG))WZ6 zI4$$9eJ$YEnddCQR&C-^ug|9wp{9p$sC(5Tk>^`1HexVyv^Vg037iZUx{bisBy+CLCl%8x$zD zj$35#x!g=-HSy@OedSO@4l%$(!ithi%Rp?&M=ZQ0w6?tdh8W!;$8WIgd9 zeJY_PjBe2I0?o;1C^F>q`!Vk4LEZ-?sZts7Y)w9squD%rw0XZg<~z*tIc2i8_?~yDd~J{c>tIx7jMUU1yiQs#9U79uZc)d)5Vao&>nyl; z{h^fHXHG8b?D9d*bfRHC^s^%p6Jr727-}$>I&z)ju}dBL;D5p&E!OX`Q6?zW_;#NE zGS7d+17G2&E-uYoOQaR=yy>i?%3rCthkH1w|?#c3Cma^7j56Moz6{|=_ z&VzdfY5P;GTlzq3k$2BEuYeWAx^(c-btFB_MZt7~WQ;p;3#$$PoWo@It%BHSRy*M(?S^#(jbpnq&=)WGgi zTob>WACGSf%{Y&`e+tRO)dEPyM#^V{i=EOgdcQC}+so7WEF4z&-8BW&Ya8Uih)asD zjYyl46v#G_E(Q@g9YYr)0;7?)6zQl>)k9Q|1XQ%>yP%W_bDNrySBS;32eG#nKa3Vr z%viJ3RI8bmRJYiAZ*A2yd{Q6bZfZ*7HGTgu2KVsW0$nH~e3~nKn?_|gnC9ZngvlG9 z=;a4twm+*t)P!w-88ut_MQ-}I{l^OscVmqzPByB;X5lV|G}#5&*vt7N(kG_o07OrN z@o2hNHS~>N%Uc76t*(=4(cE(B!Q#Q8{r=MO3=V|L!}(|DVXN|AF@6lgW?|&b%(7T|2KH z_+OuO&X?@VQrk_2tG?qHn)BAT5GEwmh7t0V-Shk(0Bk?7I-8@b-Cu>W9w}g6@5_h@~6 zkIvPsXsA&)!NJtf<#3~UFF%d$m4q74>YBEe(bbDg`ELy4WjEp9HoJZ}hfjS8SB9?R|HZvK!!|OK6dIMP+qW^KnZG`r=s1VOe5hnZO(&!)HaP#K&y9bOtOv~{T(%20}`FWfvraz>}-&*=2_-qC?A?q7~ zv%S@rFfUZNMG~PN)*s~+$kx{%yJG4aT}#JThA@H+P-Rj$ZWW!spVP8!52PU`p6=7L zNLOXbk*?D<8GG@Smb#y5=~bOA-G6lE~``2=Y$FTjI?+*?!$%zw76ncgz> zZYyJ#ad0UfPPtfZ`IAuGZOPXvBPNsLPp6*LOx5aDF)$4*sBxkSMjo|D?s6uBq+`-L z7lcJThOFf#HKAgo4-9?A_$&v`P)Z4Hxj%Q$GI(_MUP*CnO@GbJE;)di7awi-l_d!z zGM;r7oqe2862M^^BV}zWBYS;CDz#l$t0F9>{8-4^DrlscrFU;bJEkJ~e+}o26}_O2 zpDM9ZI*Oc5QH^}9D^djd*~if5&Nq~*&&IxcduIH8{A*9sXciVXOmiV?m7Y0Q@~(NG zm(zQKJH1Wwa63?%NgNmFlp2I8GM<}Pa)aJEw{gri{?;p4$|#v&6!EnUSmW_g8VB}d zzLMYNk;=G1EHeh}Me2ojSxI~B=SYj8ZE^{Z#}22aYS1>5XA@MzC_x2wL(ZdktQ>2? zs(*l_jv->q&57^v@v5MZILob{Fitua3GXmU6=r}d_nuU%YXR4oi{%m{5+35~e`$8_ z7WWk@JhX@L(J`S*>X`HIU5ki9->${Oxx-+}u3Pc#4upH45O;TiGY&vwAhF?2#br1! zwKAL0Sf8Bd;=JpC+fwrJ{s;IHIa>={nNG*ao$Vq{8HMD2*P4oSSIjhghNPeK|K9Dp zF5~&MC`p+3WATYT!t3#Rv6h2!zrIIG6RrJDP*#%dUkeVB8UH=x!orYW;AYZ#nsspOpTvr#3z-HTR9g>xFU# zj{of8=LX!W`vZW{w1jMqeMT3{gHL32D~aZp)1NsjHInY#82GdGHo+YT4uL3(j!ZAe zU1Mj^yv!1c7+%c1JN@OOW}JcA&G@bgoSbS`CK`v7>h-Aex&O{#Y47kc@$eBYm0SHHQi)e*wy}@ZlkM zAD~ej{Ovbbp!CO@xeUxBGBpVGq1V0VtE>w4WA%~=aR>1!f1-~2lGtDCJ+M+iNMcw3!!0v0TpHnk}Of1c^|1-^i*xJ zs7+J{Qx%a48FCyOAq~^FNy+tR3R7{e=?@J=T{@|h@|U->=LiQ7wYkd&rX)FNsrjVC zo~R4vdcax~hC}$fvWPE>GCgeJ5G`6aD*DW5>UL#{m58=c2NSEp=dc?`oTV_zpLs@( z5+>>GTZ`EOkG5CpKA0As#_~|az#ErAzRoo(sbeYKr>y!Fw9Mn#pOCeuG+L^?Awh%y zJFl=vN`q)!my4&x^Fw^c>zl4EUWq-mkLQN6w`NZR|28yvw%EPkTJHX>ZS>xPMp*wX z8`TlhA^5n&G%cHFK-E&>vDDyeNeXMs3Nmv)qu{fj&9V(RN^$KPnu|sXy8sEwAlkx3 zDIkDMT8qgW_VbnhKG1*niK9NPu<#7}T}J!Cl-OIy*pySi2t)gloM+w`hF;B~0ZZf;q% zUq4Rh^DIub<;o;=3uNU(P)V!8qhT5=TWNvKP z#3vc^;V<(_H(N==jWyskw%|)Em|^>5w#*l$(d&Bf5R>J?PH7+kWJOe|MLY2&^5VwH zo;16XOfe@V!)n1%$NR1m&ihi~Gku9A!A0_Cm4D9G>{m1S;|n zUwpotp$2g|{)aU)#R7XHNvI8hNCA)qXr0h=Hp{j{YppaL$KB}t^afi)!77Z;LA1$3eg$!s7Y^zyNH6zvd6#O@aeNJ2-Efw)bWxZroUemfS)M%pO`JvjndqV|4Sn}15Mp(D;j zR_jz+$F@$9&SZgX1|KG0eZuZ)MO-dX>F1B~>yf%?h}M3tkixL1RV#tLtCLVt*Uc5; zF`o{jw$4OX$={v&*2rxudaacIgXvHOjoN}eFb00QISQL&R5qHE`t|m>G%|~OY^!9- ze`@FDHbygl@XONK&#PbgRZZ&gRY`Ri&CM1|l-}r%?5L|kSi_DFbnn|%)BR=AociJa z%HkmLo)rHd+e2oiyj<%L?bFTYLj`}G3{t$KUbnNPMX&I zR0j*mr!gKqxJvYPj7}Zvefimwo{N@3H2W@1{h#lY7tk1pbhmuE=jIHw2Mk^EP#5;r z3=-0BPCcwisX3oy*GaS)WS8P9E32v=8M8Q(Qy476439P{S<}N!&dg%cfpNHepx$7a z%rRPg3~ZmHB+rFavwwiEg4qu0wazv%$z5{ghAm8;&rmuR zWJ?O4Q?t#a6u*YeBm|*mix>GgYjvnzn2Y>7gD~pSYDx| z$-HdCp_-J({rgVydBJ~4dQPY=8Ia2Ot43|{`92+ zhuC(it%m_UPFxN;!FoC;;YHe0 z2g0LW{jD((mSE4*oZm+do3fiW+h?8|jmd@V)kG3dE3w=FpS_)Q7~^`jHY!j0X+90T zLK35jwhCwpt20V*wuw{a4?4Pm<-qg&kozQ=P4cR04Yt>CQ@=k*4F}K^9o!uvwV~)V^S{_bp>C>fj zn-v|Xw0OysxH#M zb^rqrq510b7s1{*nQo5(RZc-#Md?9SU_hYCqT8obuk72g5beIN12E7vWo?c-&!(C1 z7%e(}-AV-1QOAF7O6;J1M8$4CBh`Kd4u}Jf)QMdy)D+CUA*3totMtm9Lk;Inb=Oy znI9OBipj}^`Y_Dh=LJlhqvQxem-zH_#Fsq%eWq))dNDS4e0N$&?~_iduBnw;w_>hQ zm*0toDlS4zC@1q{@12W?jth;i{hOnRj2)PH6J28IM1QeMedQ6?B>kZ@aQ3&>RyvrrtHeP-GDwfLk15#)1~A9&}#2r1z+m#wA*i3hI?Ejx{bzh4Q;cY#@=4I~PI4l(ilwJF;g|**y zjrxogHN-toSSzS*sctgO!9Y&C;LqLDV1&6{!#%%KrXi-Q_-OKYvaR2&9fN`pGn3a@d9 zL)QeWbjsz$8H*O%bz8Z&;3dtK0D+#84=Tbg z`MTBT3sU0U5v%HZ<2su;V-{DYB$bg2%X=n{0WC@yWLj*CRKNLjD{IA#3l`2prjj&? zW&2Fd(|9#wfvMB@^l4Pl<ilU{>;DfR10OmKVKU!XkrKfuP`0jP-S8Z}hozH`qE(IjDNn#lRtF zk}JMrP3x|Sc;YVBz6V5vB1JM@2ZF$dfDM_2We$ajKL{m3{*fOHUyvlx@*l8Wr{+5I~h~a#ytdmfs zR{=lrZy@cDUW$R+UHiGi=AJtQu-S7R9*9;PEj^5O?t`+6i?6+eMAJdYpRQSc}0?G@O!mgU8*50K$9@h61vHL?c$lc zkCCM#qxOJR6d%uL7~Kzt<4m|m=iD+PW`fp_cwaHGXvXm@qT}<7;&^?42dZg|lwm&- zgHMMy7sPt(PDE>e^gJ~ez}4I8k|Zi>+K{46R3I#6s_6T~*pBFVMoSIaNmmz~ z^80tDRwNHYkDVF~83lPf(%t{T9Oe^}VX>0`QC|BuYH>3G6|S7;iK)e~0KI&?KV+!M zHb))*GqT^eogviduU%5%!l>>iabrH^^;d#UYQK884%H22^YT8O1ZJD6iB%f?)?eA{ z@aPtHCu>Wlt+J0H;G1cj@cl1vKH*^IBF8h&W|jtP2Z;07_{IcxC~N9WobMZLt$Cqf zv>SKo-%p7yHL<@l{&eg7C19tk=umI&k49jnPK)(VtQS!9!5=mRayKj;8e5VbY)zwE zOEm7NU;h{)9He^#MB-y!97i$p(4B+s5qId?Pi`pF82!MFibbgpVJ02iN{7#5p%J1W z0n5@d{?c!6V=^*{0+=Vg^S8A66}$-wnk@2~C+p`ge4!l{w_1n<)F-!h$$P%b2Bv9- z&ex|pwlL;hav~yBT|q&={sEJ)<*2mYzSk5E@;bbb@&%aLViV zSC&tuwX9Sv*pL!|7tSVj549+E(-@G=PYdN4i({gaZ$DnZJ=tXcFmi0hg>YH-TuwSv z*&6jlwQotNfRbbO>uGcw(i8Kzi(Dj<*Trp8qcATaKK}q!_SlAuzoXT+-tU90-9D|n z=&;izo9T7u>6QZwh)|VTj2IIKI|d1))%$jiZ?f=YFSt+XL3|*mGTBU{_10-Cc$<*A zE*NZ$0!01;sP5igDHJ*FYre(Elpy*bbj2(kN~^Tbc(7oox3Cj-M%%VB8u`7?NW%SHWRZwZMhLg_lI-k>FKW0t(=^H8Pcz11{XIo2Gngu_G01qS!vc4t0w$9OnZc-7&F*6XyiY zs`K^P{MZzNGv|Ys$LBVZ0`BjotgX+h0e;`6JmN1Ecg)V$k6pNizkRoMFHdh(Rqfdf z3!(jXDLrU%o;}jmOrK#R?2xmyFNvV{b9TdVE30+`M^R?W1~V>HKe5D-qTf zc^Lc1Lmp1@*aGqPuS9K0H!}Xm@2A_ueWhMWH*7L^BWBljTqJ*%G-{AK9D_H|3=TC@ zmFff9y~lxKCVoMImKMgZ1>dQL)nZ1O^}L@~<*Y6ga5o@xsXe8BxIC;gy}m~XBX_gK zP}460Uw>r(j2~h3I0B={4xW0k6b?&}2^`=3*?qk}#-6RN6CxZ`!@igt!wDaF!t`z7 zrU&RFyAZ(r26zD%PB7LZ7DSOGgryjDQKMpco6I^tmmSCHXjpOXnf$N5j*@H*VDE~L z4>y}#*^!C4nrCCecKj}6eZr;Q*kziTXC;8BT@j+~>b*}$&GG_4>I|aZ80OFU;iMmi zu6MVBgTxPi9fyhi<=O*Rj)n=pxF;+uvk;DDr4gM@XFLhc0d-?XLG0VO2|TYvc=*WP z0sa@!!c7MzGdk+RW-icwKf7LidwK(5Fk9{9{Ra2I=*xba<|_@9`F-Bw()x7_tRPT3 zF-N0R;!u#Vuusl#@5{@C=JwX9aBpAv?_dBagR>pIWE$dG%$JgC#vIUH=JH3fH^)i% zR+ul2yi97T`Nv2z>$>;EE$D;#Q!a1`MyKx%`Dz~}(A7IV22KgZmep*WD~{kaa$t4> zOC4@COEG~He6BjSCF@b6`HCLW%sxP;9ipx+kMdGK7ne5c*GoS%S$d-yUH6^VS zDERKV#e)UX@U~AMM)SW+v{~!{O4X!Q>ISkHxL#=;dGCr^JRPij4II-V+Qp)X-{R-49c*y-|;l~u^oG3B_$Vsx-C=mvN z-TL;bdG!(<SaN!? zUMcZ}iZ`zAVQ4Gs0BPdT9zMZS@WNt&ma>F4`{ z&wX3vyWV|>y`HNR+7@u(E=(y!aqhXH$lTKp@mSy3)p)`#d_B?U=ror36nd~36XR_{ z-K^WbN*DL3OiRYA6DCwZI#cRLLe-uLnZcnI`f1K?OfqyY)OpxsO8G3_U7#(HJc%|oNRTC%LU$6aRU@o+zI zVC+X`=O1{#ZJwk6-e)PrCbD@xHUy`s9h-ww3;vS4Q0%bgyqagl?Buiy;}qZD8U338 zR?1+#RFfy@HJ*myDZ+I3#nJyjQ>*@WCGY>b-1(o!x0F%VabtfN;;e5+E+7HY;5&X& z%Qo)*2WX02m$a5t<;A$UNr84+bdW+jyZYP|aL%1(fvTIrg;aBvUhmoY^S*J~Y>3fn zA^!z=d<3olxYEiDw!){=$PkyF&dLhtZxQyjHN7_HwK)k8YDgAu(0QYo|D-WweZ9FQ zi+F^|nbR6B;txQKwSo{y(u&ZNyMJt!@txu*icLd3)uCv2Dh2|e-_EGMR@Sol+ucjLnR@be)s!+|B?;k1Nh_}8Y= zF&Ezha}$gy>dz$b^WD~wXmwQsh~!p56W z?E>6pGP%oeWo_mKh#DTPrR~nwR+t1+%g4 zXdX?x%{V+gu;e~*T8zx5hRhjv$v@k>mPw85;&AVk=3v)ynkQLZhVu3>A8O(=d4f}m zek=Q7ITHdKj-}9EBaKffl<22xIRUD5TxX;lRlfnnt^j;NaKTzOzl4Q;H`#sJNMBak zk!wu>g8Is!lxReS_RA6i{Z9VHtelMKe)E&v7x%wC{bi8!q}lcZhJLJ`TW+p?Jy6mF z^!U>Pi__bf#&@a!KM%6bxei3=4ynVVwAA#d{UxU6CL>2i`CCy*Qi}8h(}nLZH`Bi| zArhxgfV24ECGFP-owR1-xr{?uZ|EEFJF;{mXEa*U2dhm}em2$&z1d}mDS^qnvEl#% z+9rtZo5y3$yV7~OUUZ3Q-h|}(hL$fo^{}$zQQOiVHyczysICdbASMgg@Yn_o&ZC6Thx=X@bv!`Xbr)Ya1mV;Xs)nX;w z4xNL^rFl%6QJOnvnLj=@XjWL7?fW6~h%MhVTp^{vd9-Ht2_OX8dKv;8$y}3N@Q3>{ zynhMgBVf;P)n5HvWeHlB4E1uq6Ssz4j{{wgW`4&l1ljMA((J~?e}AOwS-=&_Bj?)p zk4g)b{e!E_Q4hG3leTNKKive#Zt+%LDpO#hc;dFWvZ_RmwvfNUb z_n~I-I@)n$p390V_6E%mMhbL*XKT93CAVZgnXn{fyQAKWDhu_8ZJRkPbrHH^jI9Y1 zQ^9}9I9EV6aoQI04G$dWC^edqq&? z(jNR3`AhYU?r7noBLx9??ZkLeARf!^TG28%*Y1g;^1A)}*l-v8T7!%;_Io`vJjRAB z2_)z%*GeJ!hFJ4;iRH7+pX^xeCXCC<_(P`aJT(EXbp#-`SLdIiuI9ejYP>(gQsXobz_8RW ztC$!)?Z7yE$m3M}_YVd9NLruycX!K1;}6_&#<*f=H#)m&C-UsDa6;V0Rp0H-#+l1u zY_c)4wY^c=0PPK<#x1TQ^n=f%peGzr_zOv5)b?O2srnsx@jQ9Y!g3=uGRxlQr_V2& zaephCT$?VTZx#OlIi8JNi18K?)XkHUeQGwp``-e6(!c}bmNA%76W@P;*_D%l;T4Nz z-67*&;?S*i{3Hcr!x#AE$&UqL-C2Qq_(G=-Rdd@%l@3P4K?dKP4*!DKYF6@>^`goT zM}_#U_hUXcD<>mDlNLkw8Ga%mH`cq7oPzjI`iZ;Fgl*@8zbU$mPBsbC_5|JEJ$C?b zsz*8}KI;|}3xknCJVaDSF|1)y$V-5iRfNE-8WntxiB0x*Ee~r39yML}*zdA2 zW%S{W%DG%WpK^bhxrt_e31a+ME}ijRT$e0%k^LxmG$*t%y<|t~m-uf&alO{S)Yevs zUuVJY{iU%_q=l;eujXr2HPs`Y8cn*gJv+_|UsfZXo@D(rGEg&LX@UFYe~EgvB7i8o z$4nNB-&FWAPap8YCUq{FILR5@$#)$=ZGNJ3`#oC{o zNa8*qB?QG}-+KH>rY>r|ccVv|8Ous^+Urx2zwScWM)F=*oTOw~{@p)fr9A7}0xciN z+~v4CAblvlpB@;714V;-_evy!qayD$>qY!Re<(LHewruf^;CsSe~Ejjr#F3(hlr6? zS*tZc>U>{(W^{IHLF1bL?sJ5Um*e=4A4LK6ZJtGor*)?YM~?)pr=9(MX`Ae~%uZT< zB|qC>don~CODv3!_q{?q?MOZzDSkyMo~*&F_2EYU&7;U6)UW$>dBp(}wsgqLqrQIo>VI)~c<5Rg`Qh>#+>l)1P)OMJegy^JkTlzD}h>Seb z)SzCM{f&&I24O!79htGBiDa6vUt^^yI&A~!O1w{)SK&mWV-Ji4D-%$hHuXw6f4iw= zNg_J%hl7ik8@&sanr%g@XhXk2jEKw~Sm-{D%>Ezzk{gw8y9vrl z8f2Aeb4L|KZ9{ESqc%7ZOmU$ZTyz52#Igy8eK`CFxNWB4a?LFAo?JG9zG$VD>(}FF zaca8Sw?e>amM2gz2b{SbzC8-*)!$fQT&I*=@Af^M0T?p5p$vmpAB`2h-%l?VT6+DU z`2Odt`_b8G!qc&+6|~lyisMCH(QwzN=JHXyghj9&Eg#Z8*)B>l&w!-nt8#q1;%03k zGM)6RQ*CY3JWXp0@9Z`BrT!(vqGzE{h(NGK>er>|(p|)3Jv?fENJ(+7;4pfzh`gUC zElamh{wi>qFgGnSL1HKqyjh$Y)WGbZlw>mcB?-jo(daT4LOxvYA#OcntK| zcg>&rbcHmp0_*X7ESqt>$9)JdaOa6v3;dJUnD7YA6L<4~r&(sgr8Gd|)34xlZx6Z1 zl9d%3gVWau1B1z&fOL4S4N`3j`u@aYNmH^-CL#i-JRxeK2H|oRmFaWcW#EAWn3my+ zc=7$(W_q0Cw{D5ui^>?kG@TW7b%7oW7e0$)n4FMHGXe--uYw-q#;Kd^_q1n-J~tDU5W7 z{0>uvh=$!*Ufz#SkTs-TT0ex-stZv?9KoHewuQ;W^=D2A&Eaz$RJQ)7vvIEK8-wNeA`@JRLGsFl?~ zZta6N*RPm%HAgWM_skt7HCDc=>wNRBfzSt2k>}G&Q?RKjC>woFuLYN;xqTE=sz+TKn{Gq zmbMm+q`#Fl6PgdczU}(lkGe&=H%=~UKOFAwvrOY*k(Rep8Nt2R-3D*jJ^<4MHVM1) z9W*v4I*h~$Xq1&b<@P-LfGmc2x_B!{|K4pLPt|fY8+YAp+D2$?^Od2C-MSBpRdbY| z)3Y_FhtPujLqs>RXr*COPmk?xOC?l8ZQufQKncsdMk^(bOQp%3(2KC;q}CF77II?& zH_HCn|LlwqzMxWNUD$flhwkq&5EMS3C?}D6CUaM<0JgS8@F~$9Bh!k!`G8*D!pe7>gj>y5HXc@JA=Jj!EQ zyvIbgv)AMJb2o5>6AsO2gdwGYp!h$gb$(P+DpuNhpWzZ zLK#VJF!;y`af=I6XqYf?yt3-RT{@TSaOBjJaTM+>B;MeRyY>nI@TGu5pgqzH-p5PL z9mAP>B@4jxCtVgdx^Ys3(Yxc#8bp)ej)Bpi1D5>1sdy4HL2y;v8g$EPi%%|l_~A^Z zRM&IpiG3mA%y4V&{^A@9ZA>Y*!+S@y0>L4NoiXv!vXbGk$-Lc0L!AQU1pimcf`g^W zsgkqn`QzN#@yY;pe5pVXy1D5}rL**&dD#CVxxV(lIlhqx2%&8WE)Y+VtM%sk@!mfS z$i&pmQv*b=(y~xcvW+pvSR>M*q;v-KD|8+@C~bb(Gk=`a)3$dCj{kgSCP-tYOZ$E% z=}W&I!(0YIB4oR#!>m0x&KE8n-(S3G zV_3F_gU{U(&c7PS*Pl3!eQin3ovt> zN>$W6UnTQ0xHBeJ=|4IUp&~t48}0bBy{nx=H^s9n&Z}SpQfn9S53oGo%J+Zq_U6HC z|M9YPzw?{9_x_Q|V#XMGC!g2yd_JDy4@gNE*{ye6VY*`lZdUi- zr57J%;P3~~#<}pESx{b=AjF%0GCcii;pl5eDqt)pE?M4^i%ZA3j!Li7-Nj3P&OUhc zFt@`iHYO|bRGd^P9kMu*U@M$kzPB>(`baPGfg5g- zYO(jJpJ&i={zC3zE$xqg)?TK-hx-6b6I`e(*d+AZx0;Z=i!BnbE^0DYt%*h}T@c=5 z5>zdoNmo}M)fe7b;2>=g$!)A2Apx znaj}qK17rVBM%WwvVtU~E@dale5)ZGo3A9u(kcWgoJERM#mb5Wo=5To?e>jvMkPt3 z7J=k`YjP#@yF8jR!+x`Po4rXf_~M}S|7sxK`XwQ4 zj!<35v=hB>?OT=-ZHtgQU&Hbc*r?0U*`D9#!c9dsCGg2^MG7+dob?wqVxSc!@*Q36 zJGv%+BhfBsCw~?-mhBQ#1)3tnf`nRiwAv}A#t$RFg=W@X35z0`f0@yJyv((6kxzvX zUk?LXO{}p6Q3+@|8wo#c?FttbOtDzFSLSy5QfC2BF4&6fx)#1CFX$^-kw(VhB7|0nut1m`Q1WV!gS6;4wz8eJb=Dc zN5usn3~Rf95@}=Kef}bWV_a;1(?mjvDXhK}tGsQuTS(U+W%DSF_oZPCx>U=A?-VR~ z5UGw7f2nXN1%d;=8`A2j&eLi3^?o#MfW~rgp?Cx*3l;LD2W5t2VO%Hzgn{92CwTJ{ zHNMtqY@V*Zw;86a?AX>uno;o`L;DrNR|Tey!N5NjzYYqWdv6{3cCP5^xYN4rXD2?W z7>tQaO#I=x8F}iMpu^^4J5>%0w4H)DR=7CVlcp9))*`FFMMaW+?0ZY4R+m)@UF*If zmVFoLm&xbgVpIyXK{nbUerkIb#9`N;OP{tp z$%}AA(1H@dx0{(k!dT72#Y=NP|HNS`)n!!uAU=`X7H9spsTXX4kI75-wJ^@Soi#zB1?lwHoF))^@|ipE?HTnstorvJGUAbA`!l_!Tk1l67f_LM}3l`U3fb?GserK^?!$LNp0AmUniIlSGjU7h{2KJUS+70cvjrf*d2dOc-7yeb^&MHMb2Qx*ei zU|%wM?tJm)?`TdW=}2s_2)ZJbl)S;ATPCfVaUT#q_+>pol8_KH%lEkBJ78-fBdH_X z1Xf#VMaj}K?7seDyZq$`e+D_ZM9+EiJF@XOTcI!!g=s6Ba_09h`KHx4>mBzB$K*1r z-bcQkrY061FVjg2+Dt%?iYNl9%jTmYOZ|x>9;S<+dlOQgY8R-^*#lfYMpN>hpxFA2ehsod|xlO)=rM z#zoaBTK3aQ+t1ib7|ljZ1N`r%+uAWj4v!+R@CpT}tT4ke>McaSc;W< zd_EOHK*(aoeb$@+V`L3s=WpqIAI=)ps9_^ zk@M-4lQ!@3lF{kgyuOr6NUThd5aSC4HdD87-Vy=~N3ebl(}CYo4YTq`fO05U#N%oE zty}&jX&=%C7Z!J23(_pi%?Cv&%e!>8N+(anqJscAATqLvok-9Y6laR3?vfRr_MgIN zk?cU6Ky_7+L9VymHqBVks2t|L2XTV1$CpupSR|or(t2FP3H#&U)k0F)6Y5V{x{|L|E5gOpYz)}j5s&2m%YE0Jx+)?d>oAh7rX?kPyX}g zCDo_<3&oCOY7b=;WLx8rdIi^v@`)C1=LDTjKe_h0 zNDXqp)5IBdYza_!!>-J0(a)UH+5L|fEEO5xe*hp3LUO=xEySP(Lj$3So z-SZR^&DyW-dohfkHm-jJ*!yR##%7?LISZOCW)C3`Ljm)a4KwG#Bhr0{!kc6f{Rl@v4H9W*yg|9NdeL?shn=9kvvMf3hjgSi>gM?;5 zOTz~l)6X3xwc6$e$C*_m(H!uP{7;_~ZU4FZ_-vag6bPt{X6*!a1wXA-_>ezjl$V`J zU7lr7GigRD{YXU4g#xTa`8$P*-a~d$YJH9>U1z`Ju*3eNk~dsS%oFJ^f%m~99H;Vb>D2d0{b8!*#`dOOLJhig1shun*|7O=hHRQ$Vomm7}W5K7} zw+*(ngf{ODs?h~hbzD6ufWg=l9>f`qiNNY+OB9$5JWtFVJ9d)xWob6-xh%jc0mHgN zZxw$iK7(lPdK``DxxSD(xVc?hJz^`*W=;Dqk5%WyqF*a2R6gk8@mdm#Ri0O_a34AEH3VvOPq3(@b<#zwtP~3O>@z3PeV{L7h z9ff%qg$Vg}*kn~Q)vI9DNgAtR6NMD{c1o{}6Yu2G9oldD=tFqa)Oz)F-NUe{T8Plby#N zzIi)bQUv&aeA>7ORZEy(mBRObeCk_UgPh%V%!bi1qf9)tR(mpDX--eN4Hfh3a^zN6 zG%&6sL7N1+(lWi#Hf%(&gfz)!bJt&ErgrNewCA)`wvd#*dT9CxuAXgOv$oENFc^3n zJCd|vG4Gk7G&(>{=%0L?^zjDlxvrS74#Hc$oy?yD6KZxQ-IC1D=XfpyQxiFm$8+Mh zE;|{t=}E`Uq=u1Wvdbf883K1mi>lGevKoMpDCbN$VfnVw?(1lgyu_AO#&GYBMKC97|(jgbTHC0e;%d3W?DY<*u#g1~Qoj|wA7 z`sWxaWcAeKNLz2{yM~h-tv*QpR-jtIRq__=yYg`x@I7{2-m!0H$>dQT-&W+N=EJpa z#+R$5FDf4|wW(9!;65f%7`aAL{M{QI3MmKXTog_CxJ$Og=ls<;@o1)avJe-6O;f|@ z0A=p6CTRDU^Ypm>q2!#GX>kMPgL!roUFQHqPqTizQW7qp+La~F$iofZk-9#R^OR-o z(Z~_y1Bi?P+z)eglWAdG^>P^UMo4I$qOP(+GKMF`^U8kZO{~1Z%xMI1lJ&&>_c=C8 zc)vX5K(A0B4oo6VqJmR+zCTkpSl zUNCx{cJnS;><`hu5L@c@P?q5J0ixyyhXJC0$jEB* zz4^e9AJYDN!N@gx>8Mzw-RS1~z>ZCW#odafo56MQ-#t#j{z2n&r*H}07lhWEI3wwr zRvW?>MN3GhZB})B@FH>?>y%E=)H2d1LwR}SO^b#D*Z$}6(`^u!3{&+YV>|c1`R2oo zuR#Xv%WDbVFvfQu%5xo6i=pwEIWrpy0AjJF8D_D{U`W>?9?(KKNOb4;7s0 zuaU}AM5U@2`mc@O`20y$Y1pYRix_hWRg1LpK5 z%FT(X3m3jBa=OMf!uIIJvtZ+a`p6Kyg?)|UtIvi6%rJ7+oOq6COdXkDOGbUTTCU^+ zq;4Ro%%Y~e+-k%#Y29ey)0$=Mv_W!8oN8WadUEyp$TdG&2kG82M%Jfb#KwUG^5Cg& z1l^|(?KI&Nh4l7K-F+}Dey^{-XXAw!by#%OD0FGr$iS#D#q{EdA6L!VTUXkqPPZcD zIMf{LP{*IIJ!ujg^nU7C$pKgOZ)Z`3`HpE8JFO4PbnBPmpRdE)5!wB>2O4ZW{3vbm zE;lE0ukW$~!*c40Gc>zS#JXtwn!?--qI=)kum8h}#y#Ayp~?o3r*Hw47U;iodkU0m z{}<%pzq~(E_n)S3|I6)WS(gO-m05n9t`R0WJhSqK(X-)_fwqkXH?o@66&Ch1tKLut zhYfD92|nuzy|XGsqBec7Ca)Vr%R6fqjTX|@jWAz7%}8v$QJm7s5A+jioF`q!1cj@G zFJC)!oXS`Q@>)5=`V|dE_fnJCy#_Oi)WWBn6vI(9HzyUP^XjPXC_RDK})))Ps$w1K_ zPYgZ?kFv9~J%ouN8g=}JnM>X<3M7O^k(hi@C3vZHB@$oWL*{_(jS@)9Insx656&K~ zDN8uz?Nbr;jgve8XnRK+jx`?K3BA}l@DxaK_~@L3g&ST<>5IFu_A1?33b|Kp>s3%! zxs35QF?j4f_cN}lN`yuq0BW7xjJxM$C-lg{8|z!59Vs*RX+jkHFLTD(1wnoG7Zj}H zzG1&Tt9*uMM80`sETpy^uEO#g`zK7a;ctUGM(H_dctqbL^Rwr+aM zE^A+z9|NK;Lr|z~VybxEI}yjCa%X=b2G?7zsb!Ev&iD!jM*OTOZ2b^BuzEDfP~o-> zf}`UIpCF%#ON7*vJ3HuiuCZIBm8^#RY`(Tc9|JZO;$YG9d@b}mZ0(tBpX`NrxyNog znLh)KljUlxz8zX1hu7uMKg;~6Sx+qUe4AQ_dkm+`3fU;+%L7VtN|0U!K3U9DpVH|K z9ckrQibS6#B+YN$50+$bosy4kBXPpiaJWWRldzBd?eg+h_3gzJDIo_QPM;^9(NV^B z(V|wn;ARW9fA()Nc_jhEBM9%ujyTM;FD08X^5I2~k#?72m_(NLFG@nZ`3@#~xFofrRKZ#lV4)=zst?C4C%*ijA2lBy@{^MK3{3m!U zcE%N8&+jZ2Hk_RaJfb!CayYy4(4L&ru9DLv77#pv(Y$gHVk+K75@HICi)8%sFGwRv z>MVCJGmfq=)f`x1@}r%7e!c!3d#oGxd^aq6-}P=}cesjHqc@4LA08uoV-!$B0#kaH zO`OEy{H&*@&*py2w%Ld27~?i1>gES0jE+2AF-l(nNUs^>`9?Lj4!6hdp}XuK?Qt1h z=UZ%u(Lx4_jiFb%X;)k(+dRL^Y{2MfzK@cDXX={3L^YRHpIsymxPwAuFE;#bpW&%cwGr0%Arri$61c#r?%TId>1c6w>q;QjMQf_@$O0 zrJrCrFZ4fyyAf-L0s=g;zwf!y$U}5jzqHU6NA!_waPheBuHPoB+oG-EVl7YJypGOK zS8fh5S5J8|Ty<4GL3f!MCAB~m`8#l_ot-N#h+eP-7g+6^Q zf?xuaAs#Yi@usCp-1i~>Phyu4q9NQV_5FOw5NmX+8s)`a{_bus*=1{R9*cnAtg-c# zzLTAtS2hy=$3v{CUZ%I~np`d2+|H-c;YcPL;wa1y-2k^&lcT+{T=OTx;{x_>{^vhS-W;pzJRYJu#9b#EAi^;Uf6W z@XJ!GYTV!x2?mdI%{PC}VC(u)X`Th1BL%qw1J&X6jwLqsryji?J#+5Pv5_YKpKKSu zjUI&xtKshYlBXJv&LuWII>!f>B~)=SF)*=8#WpvkxemkST7s@<_ueufT~5@`cc+RS zv3H&0X#B+(6Mjbt<)n&>s;q$Df5Tj`ZQ_$bc*6k^cyy!iTMj5p09f_B{1qLiclV@G zNUlvmnUvIzv81xV?Ap;(`QKT|jw5b1dqs`L(sGgLXH%i)p3@;*ol``Pv(*#%jJ1x*8u@?N=*_=SCAxzp;i6 z>oe7@u~4;)djvUeqoAM#o6H!*P>+|9U19*0m_;j$@sshChUr*T|E#F1-yNarel@J? zPlc&lx11?XG^w{qjO>_Feg)De^Ly_5P&iTf@>6eBYeFkqjk}qgoY;okzCB3$_<>$hD`8 zYHv1M^ijnuwhlIn9Z*@bwlB%Gx?WKmP`A|J`opF+0~NvLEr9Wj2qp=NeB?SyvYMC9 z#=oZHDmNSuFbe0AFBNd&w^pL$oLtX&FbNiD{>~`Xm1x#qzC-Hi&;Ij~eJ?`h`Lyw>fcl5;?!$cO!+wR>w7Nc^VeRMsur0{||cL-!r0!n)5 zw96nQ-JMy5HH$g;F-2lHxx9HqJ_(MC^sj%wMVC}h>$`WMlpFLV=BxK==b(BUQ3Jyb zXKWQ}VrRUv3W?PF{cl#THS3)!=9Gj&+tfoiGDsq$_3;xMdx(=QyGMc<#D|#X9X=3f zN6zYgC**W#f_{@o1OS&**WnRTsM_%?Ih@YbkiPv zRB-vA^em5M_&<(ne4jJm%!UW!s9vM9YI@NUGZYwLRV)|MHJJ-8kStfE_UA z?}xO_PJ#TH7X5Ivt%-SDSA2~I+5~gLShMGczA6|BJ{KGZ>F|g0uCWrM^d&fjr8?Jn z7*%04Kh??F&~`EyjA@DD_f)?Fr!wSz2t5aMRpVz_1U+WGu|`zganFw9rwvwP&8@^Y z>C3Ebf`^S`%ZnZ1T zaF4pI>FZx9NP#v zHoj?b&%GPhDz9)}X70d9jCuS}U53qw}6IRW@}5RoQVIrLg#P>Ss_nN&KM zSEFuLM-S8#?KBO_CGYMT+S~P*5A4|uslF_5{=AHkH`L<>iF_!VeHHxW|G_5yzkCz_ z`ChTKPE)BtF}&sf&(iz>&6{diigUHyc_YAo%UEqwq@mlv+;%h1G5fxAeHEtX(Rl>B z22&R!D7e4Y{i15+Y3KFhX?gEkx|^x?ZUqmHZZEmJJ1snZb`ck+a&GRqn?Z+6Gu8i+ zN0!Sq(HDfg5nof<{jRTCQ&hF48j(SYy2i(ULF(=;it(7y<5VXsSAEDQ22|srslTvy z>($q%Np`Y03TMl{$=+Rel}}iDb8@(IWII4c;J^7V$d$YM9KqNoii3ICViMxGj$W>a z{$eLMdie|Hcawoa(I=~9xh%`y$~U@NWgkB$UV?jemDiISEK|Hi&&^;UpHL4^-U%=x z+&-R$7ETTPP&c2qS7dceJ1;-+ zj>V$Fz@R8qJ}~4_z2b_=q>=eVe5gF1iXWpwXkX<;11N8uHF5FmhnLG_4|S{fQt!A8 z4AG95%JTm?FE;;d!u&Zy)HVKBtG-*6^~uC}+r3Z8C^pgLye0yv3FdeHTz z%Sebz_eyV-JvBq3pn&fbQM%zB`i;__=f++s>fYfMjhpkg2BHiP)0OAli8WPQ*S6j% zyjOg_)g4tu=Fk3oTvr%w?1fzGa-1woaj9}h%yMp3awPh!jwfP_vu%8$*Btu1vPJ7% zG)Hff@O!6t7-&a`|2p=@y`tw6@!=^%I~ec^fcy^b3PZJw8OERTog-(QnErskD^P7V zzR!1@c9qILM=dMF{S2%xT$pR#_DG%>SqaL2;Hn$`41BD8XtUPLu5fP1*80g@g{UC$ z+6!xUOThpMpSBGl80E6xf@%WytA^8|+TQnm|Kr;&yDwNV+D<9HS~>gdZ~<5qf}*$a zE9-N{raWEl&F(ijU)?_&W+31MiO*bC^k5YLvR9#Z8dYf;d?3dLIx*Iyl50qHwf z1J<|HpCfL_(p3#e-LKX}`JLG1o(g>fU_7R$==tLgTF?hir1a7OzMS>kx)`i67WZs)-b_DQ-m?*uGlvAJSArNt z5XYP-R=3XG3K%2tV8Ks4=;UsM%Ei`?-|$R{sB`!XcqLd^4jIt;AY8?V_`cRM!^j~! zZAM^Ozg6BWMZuZR-7-g2ft}|XQcd^G1}B@m(UtU@xRmA6h8vtmU1WtwTh&k>REQTV z+=_YmoP+Det2_tHCr)t&fL~=XG^Bi8r2Yvr{cY(({Y)VW3d@hJZJhJ=ScY5j4Lb_m z4dje60Ms^@t?3|=k_*nP8tF4nBiqY zGAlU$E3-x~88DVvsF{mRI$ zPNG`$RIUR{U5T*jy(9A#v6MTh`-R}nW|5XsL0l1OK8T<6zxM$@9w-&|Ii@cCGj7s!ENB}NY2Ps zIsMDLzV?Ivg6?}>Avu(Ej&Yiujc?U?Dp;DW`9@V?5?^6xq+~F3eoHg;d;F`WpdNqcOG?|GvAWV6BV@0PK(xGA2)TFk%4&XL6y|~@tTs@QtFJv=! z?i~-}p}qvIt7{33qsxQ#{{?l2-57IyboXwXAP2v6P;S_}`FJk-mG3;FYn@Kw%(!|eQ z++&wGBc+1#!%t{i{?l=(*6P5OTqB>lf5AV zv(|U<;118nY0B;NwPT^u(q?XR?bi!|4x0Y6Jcc1Uxbfuv0eT5gQHYHw3~h(mdX&g5 zDqb-B$|C^=;~JSD<_|!gyrTAmZoP>`C@Xu_%JBmj=fDG0@Ra|h?QfN%uM^<%Z+@*s zx5LEnhidCxuCrtj(=Z2U6Rc^R&5lDDcY z8W`brPoclCGjCGAr&a4`JLeg>24;?Z&-3l>*9Il-W?0$2XYFRJe7pC->=2oX3M29; z3+{Ez;!26RR`aN(s$d?WrPazzp+n0VK@`cMd@mxR1m?;Ld}Q1LxeJqEVf|`=m^IxpH^+MHxh!`+4W;Z zbK<9%uKOC9qHm=lSHj;+4`}(JK0+c1(U6rfXsap{voZC;_!8t2;Y4zeM|+LkpAcnY zxMtFyrd5M)j;e?%H@d#{Cuw2YgY13TYYp#T6=q3!l6;Q}wy8x&QYF4G)~>oIuN3}# zwf@Ojko>E0{A_|i3>P2A0uRJd4F9-C?e>rpTO3Vp(-yjn)nZ5xz^`zNL05llj~UeV zD^xv?P@1e1T#DkB-aR9|UUJ3aAAe!wqCXTO*vJN42J~v(q({G>6sb3&VP3QcAw9+X6ujBaycCOYG>pd#kYik6DLo) zL9DtxQ0QT10onRnD!AfFu3d6PVs)V`-}iujj5Gt>5!pL@;tNq z@cSR1VRcCTg=Cu@#|use>@!HEU3S(0@&4u)37<(AM(2Rt1)$mrQ7d#8;^&0-l4^ZeHfSF*S9T43hZ42_^HaoiuCJ9Flv$ zd;7CePt@Ob6O0^?YYwglg9T>mFH%R?0yF+CU-X`9L-0{NmmMWI@ero4RLj$j%AC8V zIOOk+URuz+bJ(WA05z9BFaPi>G_>lbX%yZR-W}`N^WN+JQ2!X}*3!=hBPY-Nx<*)= zl0!_zRr2zMt&qZ|kp912wsS8DO)4vy5}eos%!?k#OCPfX^b@<6Et;tV<{RdYh>N_tpa=O8sB4w1pV1# z5N3wm;pdrpKzBo57#r(y-gaNpNW0V6<7)e0RPtZY3HJvhmK6nbqdciPOC$fM`L>R7 zH~l>UfoHuYym9=1KkH>Rc1~%w=qHvNG%_Z5D253JZS1?x6g+vc_qfwp%#|_26er*r zQT#T35?O)aCy9&ZE4{kUKLg<@!JL-^h1x`8Jhh2ll2{YlgWq+jp2l8H8e4|#1Ikj_ z;%tGhafLwMc=`yD~Z8%)Tup`8aJZV|bG_lU!}NKt!QDmrQC*s+D>3 zB58zea1P`MK+oK|S~9WX+j2zzQjE<+6k8%&T%@Xr1Rx^?m@ci4h75X~%C}}K8DNQ- zwymAwF=75o=Dxse?#CxF8)flCn%WixDnSJbJ$NQ9mRw$u;hd?Fzio-y+)kaeiFi%0#30#fH{0#A?dsY#PhPSXrHj6>sWd~M zt@INI^j2c%^>&ybLsVm5wGvB(C*FO1O`j`@TegWw%l=Fei?mA_59TFYd4VrBPgy!m zy#-iC&jcNAy;}CM8|Az}QE~k~!pO6|O{i8_?48Z9J-l;5_Rp20CabNtd(A_0yVf+y z2iMoF#g>3G`58-sf6_iG_6McnFNKNuB22oxX4m4GOut`K-*n}20zSR=wU}sf@V;?Y zFe!4OmJZEy0&yAD$>>U4=4cXY;9BW+Q6Kx~>T0O;53Nk_i_Y8O@A~{eE^00-j6{3l zv;uA>H4cZfKbe$iOx;c1l@g`c+_OH&o10(g%cX}5>RYY$xRsZ%rh4f6H!5VdHR0mI zYlaF;HP2fM+OQ3h+B%5u6Vb#j0y$kwB}&AT=51Uer4K0+wjwge=&xS?3#vWvhV#kk zQE2M(r9<~)x^)305sox{_#iAU!UQ8CymNJ^#|@iQFj9BuGWB;-I)9V#bRf2`^^kDZFO=QTCFpJKH8Eq#4Z z-0|L2d0zs;nxl##kYC#JaA7(s^Mx+zNX!OF>8{823+HT59)Fov2H5)?cI4Uzn~>l4_oV^I=XQ##N- z;^9uOs~xKBB?!sET%Hvc7 zZoj?*K~6KxIEv{Y1@ABOMAN1}O5rrpESOQ{;M<^n^Ng209Bj;$H&+g(2c_V=WW zugLnUp1&#jfWD#Wfc-`#LO_#Mw^YG_R<04iDI*8xhjI z96NH77%qzJ%yWzV>GX=4tp5JZIxOoe{7-(cBRV6&$$vIeq*4PflFo-vF~7fyb~8xY z1=7*HjitIl`kQKeFBo=1$A+_ijN{ri_DRAzKnga}$p6zy8PXf3nFtC`By8*i1d^WO ze+8w=7Cd=IC^xf`a`&)Hp_1F@1IP;+W{NAnSspl~VpjnnEf5);{$%v)aY)Vye1z66 zUpm=X7%Y7BMg2D!INvgC*av;UA>70%f%cn))x^DAPzT#g#Xpj5YusFdQK)? z<|Rakz-8p* zS3SN?IktUf!o@xP@sx6BY>Q)MI~mIOGQTuXce57u?cR?QTaiX|h^!>k!5252SkVC6 zn#mutDTQi1(Gon)f6I3m7(K1S1eh~|v1YC$JM&a_NJ0OShsrfndc5z2mL%DyFQ5H* zKuT5voFQ934TdyQXyxfk7dD;Kze=|JQ=?ChjP7%RZb}G=Os)E?iniV~r?=?M=^SVN z;6(FAH>yJqgA_NMDju{rh!}}r(w~FSf@As*{@ivIKa_Zp-n*U7E@PKt+ViXaq^p!55c>6jp0UON)~~^K zsd)O)+_lD|^-mmpsAEyVhgT6i^Q4N>AY*Inu@v8*g?)d{1d(NselQR^Kwxd$uL9-} z$O-uO@MpjXFw@>{UvePy0BeZ(fLKY0LVA7&PTLS`i2#WY>rH#N5=Uq-JK{ zgaNY6BvrTROnqO8A-bQ&AKBme+(&6oCI6P@%tO=#)X!KTd@!k{y@u8b1Dh_|4EXY3Fg~ ziKW0EdTxpRce`T)XYEQ2-@O>tVu+7>nub99ggKVxq_X-Hx2VGpUXhRyoP4iWBD*)p ze5!<`K8% zI$3YmB?5(nSpAr|sc&JkqTimQzz!N2`V)}mQE=x{Npt7EV&@G;v0y`Pc#-XDlUW%) z`CXx1oLd3v&QFd0<*|1}Paz{lA(Y-ONJjXOk*hE^$!+7@hia*ujv}tpQ81zT*zKj} zQ7KCi^`F9TifhyY+el#XjolEZ15WOu&1yF#=CkQcNQuZGB!DxrNzG@;K69CJu{SRU zmp>8=mvw{Z+O?Y*Dbd8MG9_+&TPW~IU*ETgtu(K{BxGb7Q-sb|e38-6Iq}snnS9r4+ly8AB}8~W9&fB#-(@bOE-#Lj>#GCpTMIDdSv9duif6{+nqkg zOKw!NWV%#HYA|XG7T*7&$RtN1&jh|`XsKAY0cRCh*tKnPHM}nGx#HY@f-t;65ob~> zR;g>|FDtk^0Mgy?8UdW`!?HWIi)YoY1^{Zz1XbK{?1TaUq={PeK)u3 z!ewjOn;z~D)REHu@S)5;o11CWX}r@E)>FDQE6t{1)P1ooLl>oDWOX7~?31(Ih0hK_ zT)Zx{?9c;Q{0^o;EkHy6b%c=Kvy2IP8vv}5<383JGFj%i|IEwJQ*78aC7A>Siej~Q z9qGc$8Xnuk$pQoVLf3OL_y=@8LZ5+mfwn^DSq!G&aCO?|`(#sWFT6Jvr=Jxtg!MG< z8M)5(qm;G%d^J#@>0+YL_qYl*-QzAuXIss8<;@3#F74?By|*YYseXCZqw>s|HoYZ+ z{zMEY;~_8PMZ*n6ih%u?&9Hc<)nzu&mBJ*T;=HRNj)G8OfGSdZxBO6rnqAbFc}zU+ ztr8y1#3ex0!!jdDn!MX%n;v~%8d4bsmlmd7P`St`{jH`A^&mC$@xvg74WG{^hWPU4 zBMToBn~Jy$Y4!-B&UULTO?Tr?46OWwSmRy7^ZKJ5X(odTX$G{VeikY}wE4>k)>4K3 zbgkx%iWDDEVmB`y0zm=sSjTrc4OWg$zlr)aAua~`EFpO$f^R%Xa9wj`9m?`NJf@!V zrgT2fS{Jj}d{X7MHco9k0?dJWM^(+_;+|%aRkqr@n>jM6A>JX|H&e7xK>o&9S{RzKx{j?&?y9>z zFiWeWDjozrEW>ua4(JSXQ9G3%7CIH#s*3iRPYC_Z+P_8>0Aw15MBj=I&=>oT zbO07Yc0p=qNxcKj&m1qXaqr7(y9!Lps#1;i$G*4UiD`WD+amQb8`_~S;c~qUAcmyU zOXf>{F4O7n2#s`ISzU*wR=vwB@%LC%AayI+COywMOIOTD7O~T+52Fw{qY2@O?Z4~b z`p*(xk8EMI+gnvIx}TTG>N|z1W&@KJr#k6+;2d%gd!4jOOldLumS$4YKQz$eE9EgT z&~P6`wtds8c)o9;*8@uTE338{V!Qh-Io_QZn5xZM?hFzVMv=lkQA9iHE;XKazod{K ze0h9TpG$=20O30uOyo}9Upjeqnga|OUjd*8WVzrbk@Sf>=N^<=qu&AEQQrhq6~&$k zB}%G$I&Iwm zq_bq>&g_PJKvC4{t-UxXVxO~(TwzLfv|Q;Z_o?*f;`3eVbMi^uIB{Yibx@r51aMI0 z@q`Gz(GeYft1^WF%7y#4wFmJ|YaOfVy23x9vnNshdOwm(~!FI0IAmK<> zBAQRWn--oqcehu;b{}wJiG11>(dHDKtAn-?k42luiSvqcitiUBQqfx*^Mp?n#lfd; zchrJ~pu$B!T?XM@*;%0}%+fqf-k0=S65s6D`z@5yjd8ODQBU2o&*7h>R5>m5v%_yU zAW9zYl{6xg3J%kGkNsg{c|cM6<2dw`3r05HA&8ixCNUA>Wau6NPVKBk4JV6%iPJQR z9|9{GO_v_0P7ckuc-{DY3FNyKHBpQO+!amG)?>d>CEwjo4N*?(biQnV!{u9nkBs2p z@~QNtCrGhZTbICX<*y0J^gO^jjNJ0d*&aKSbIay{mDOcBR9RphqN!ZA)U$JtIT1WS z(=Q9-%y+Ag3F6|UVu3{DB2Ga;R_z0^hPR7&=E2QpTIwg{aIM_BkJL*j4}-R%HhS`3 zE{yLN+vM_9O7ey9Df@Ph$LAFOv0M=kEOFgEB3%D!B~wK9O_;ZAJCg+qK$$Rk8HTAN!*w$d5fZeB(cg@XU9GR$TB2FlqYq;MF{gsFQpq)}z%wShByw zF!_xlPj!LPhXPOQ)}>Ku_a8*3okwhTbd#BHfhjv6HrCVB%jql5V@G%_R?Xw<_Ok#x zTQNHgSvNFqU6DbAw`|6}bwEgXGN^;rqNkQI5+%nW764O=tFII;3WtPRtIjD~=sq5} z7Q(h&b&C5~>T^W%wZjn*MN0JM zP*Sp%6j9W@({C+}k5hyfihOgHV67dC->Pi#$K(TT>dshemb5IRUR}58`%w#5wBPm| zCcN|2v9dNIjwsNE_L7VxE_ssg4maN%Vdg+t<7t;7FO4!gE;ySUKK z(?cgD=Ue5ASGh}xuMJ+Kk3MbkcjKP|sCX&$`(O!ut)1 z)zxi4ga9jj^aZx)xjRP&vu5avePUr&;#FuswpfZDvztK!t{}Em;_dD>E z?xUxC#@X5wh&OV@Mud9Fa<89WQv1PPUcbJ)x_8LlaEmpf8~IX4WZ#Ky5!&uCL!=Uo z&1P@ZYU#B*i;GV9(gxo#XkYU5CzXT^PeBE7PzI(koKUv*k=Ej*0qIp~0@8bL3JM`K0fi7mdY9h2 z5Q-A1fzSyMLhnuB-TD55eX?i1gLRxtCTrGue$RbhmycY8%WV~5Ns%L4s5iL-vjCm7uoxN7LNP6 zM1{6Kf^g7wV7X66RH2DFvqvq}HD%@aqT2rBtw3AHt}kTG!0ObV479FUlZ#!xSAN2T zsX6RT%5MzkFe8a8!^b$9sOM)es~=Kd!MqbbZFOcP=rUMb{U8)?fGVrumlLQ%~f zvkXpK{7i^E_X2_tz;h*k4!_MX^B^@14(*&=uQ#)6=b}8qQ}na@NAEsvD(9O$ zs*NeDH7>Rv%P<@Kp~6)Ugw@rv;}%X9iwSet$;+B5p!-_x(&0+}ZgD;JG3lh98yxv{ zraysj`1*_3fo};cpPdGh>2bRFxMyb7KmSNM_d(|`Z&x?sE4RykADCYmZOD)gNUxu? zNNsyiQ?tIWJak6$?JIR9T}C}C@F$nQ-Ct`)U7W;FNvz8kb755w`T)Do-lMFIl6Bv7 z(HW#3ctm6mNE#HD+CO24K=Epoyhxnd^TR=XjycYEd&Fj2-kYg0=Yq>rs{-XmH++O+<*xw*OzD!Ec!_+A7_d4nK(sZ}z271ORN zTYj75gpt2zZ_DYG5PeToao}kM&J=gCHI;+ymyRlZ`&0-R7m$*3Gt+u$kN|=5&lyw& z%$dj@4HX*+iu(-NkA3X=CuF3F*75ewS=w}T7*FG$G4taV2eN|Pu!!aQ^NUJXkX*CD z$3SEK6uo$BCw4y=z>;n^POClb?21WH`%M5KwiOGLJHc7CZ{p)1C#8A40^_E3%V1bs z6B30!fNx@G!R52TDDk$cK=uAy?_@PEmh{TRnnNwGp(n|y1{LJJkz@z=m}T#=Qt^%9 z@d2fcbTdi&^UQ)`Za?(qv{({qf?bP?c%C*r;`L~AGhti-Sr3iu@uqn8ayZ((<}DKp z8<#Xw-nWZxJ`NYFwo5>PvM4~3IR6Ev}3nbCREKTBaIX~$?-P{0G}j&&OT`BsypU6$pY zDW1{2JUQaajU0|;)gFQnM_mEbP6m01Wtlz~+6jr0vG)tfUQcUIlkxW|o!M+CG;ciV|9rF7ltm%B>ST~^&wbBoIOrh37S|@Ey8kHW6pG1I@@0I5KV-kIVGT_n_)*-u z@k*~D%#TjH?!66PDoWAARw+BL>8LShF{j`#hxM5Qh0&-sSlpHt+3ci%tG6q~G4Eg079o1Cv2o6}gV>|Yi3Jz` z0R-kv=Xg6_=|p&RTfQm!n8Ew6G_N6VM8mjmPTg!P+2&2 zNTr_rdjH569H%;GTRq!%avWOIgu6GhcF(B>8Gn(^y@|{*PQp=r>IuMT?O`2DX3c${ z2Jl;E+6RRDu=L=i-KB30RV9S2NgI@qIasQ9BI63_<%Z#T?5II2dpER#F1GwU>Gs6Ehy%j6x4gAeEcfC&~2@hZ5U2 z&$X)>Mg(~LQvUQ8t6qcaVCni<3^;k;Tgg&&2ZH{o`wkDU?Aco;U5E==CUUT={a|4w zG<)>1nrCRb?aA1sl{_?~bGCSt`)Gt zVD9?*i3GEpIMM9)^hq2G?VV^OGmWbx3Ay8{xIe;jzZtku%RcDc+J#vz9Yq$R*AE&x}J8*1$=iy0xz_r_m|oS6Xf8_QOnI zpG22mYDt%?2yp+VNhpOi1!l!knpARvC-@Tc83!MC!l}RQ*QdtCKZ5r>J1aU&JwmUs zvQoHOA&Oq|bVj{_k!%TzHv5J_O9+TRY1D0w8qFCU%ze%@b{G&-@A)-R8e!u>9m2=T z3F8UlLM<(MB+~fDc}R7wSZGIlGz$8XHWSEZWU*blMp*MTef-rLTu`rxv=Y)!5iBTf z(XBQ%?Z4a{JMtd=y<_lsc^CK5<-eq z_>Q~xYlKw=;LgArDcXLk$5pG=%}AahkR8+!7rFQDlDpZY>E9&5k=Xt_?9>fsN)^t= zdg?|oV=c;mPV@YKXO>Xchu$TzvA-Sxo+v;Qr8&BGOWrN|{hYA*?6`iL{76&PeZSkN z>zle6OL@zPCjRAtRqANzr|xH0GWk55{ zjcc$3WROak^Lmf_Z`TUu8$la80QeF^Hk7K51cK^|_PojBZ~W>jUHoD+FJpVi%wcwR zeckg=Jh#&?Srx|9$6-xy`%>rTvXNVRW^dy)B){nM**Ui^@sVNji}wI^cTs7#zI7Zo zoFuVxnY9=&@pw6Uxwbm-*1p|VMA+!=C0r;v+68RCZA>Rm$mKsg+j>LXaL#~h0ylk6|IjNi>){yA{o^sbvZ zQ>M3e?<^>a7X9*Cx7oybxYD@X%=7SxvxG8Qr5`~;Cn~c-JrUeMq!$(@v2<3L=$MkI z^V)e83uXltTYYcm2FikrXPj(hpKv85H1ttdAmGqU^Cdbw?IODqEEdCEZS5{9#a@qv z4+da-$&_!Hap118ab)0B-d!Cx#B1p%=%DIQx@9C=Gvqg?gbM%d;#$yA=iDopIRIq8 zP@)3&(zHl-7{eudhvUDW1p_%H^%3jgjPHF;M-+EyBX?!?o+gE%nNH@>?!N0iTZnRs zcvQ2vVqVsFez#ZqxGJog3V-n(UN#N+k*~3@tQPNIos!gA{$oo?`f+;fkF>y+Tk0le z(vQtkT+D`DR>OqD?m?Z3vX^@RJgQt?vKQAj`^cs=ZHpm4vqFTk3kjkB0hrFOQC{Z~ za3sy)L+>%CZ%m(4WGMI~E-U^7RH(=~4TEF%xl5r;Y7}+Rvxl6RYhc#Hj&>Q$`2qBT zM)F=u+Oj=C@FBW%r?se$uwIs`r49|W5%{JqoVc_ScvfstWS}-U?qoEj5p<)mr%9+F z*vFL(8Yw%tbq$272gw|hjhOoXCO?`nw8Lb}TfFDAc&k{#@A%cZ|KT3kDtuy4%d}t% zZ0Xf84@vZfy(`UrwbhIg?P!V^g`9aLjY2#uqy?VmKAfK2*53{~tEJqpo5F^?Z^phr zG2_dXZR-DuE=wJAx4cuTjAc?tLd(%hz@#~D%!gpsP0XC`$(^p}j*s%{d)V6b43rcyqISWWlBJ~ zOCJnM(cPi8#CtQ|B-i-lj-&q6{mIR?-YT!lnC;^ba{O4TUu9bMhk&n5ldhYotE!qY z`SI^=SK8&bA3wgfYFE!Q_>n+=kx58PD`fO>dDOi#M?xf4a9M;u(YK44s$+>%CXLBQ z1#|x0%G9lh^oA3@S0?(;+qJs2AF%?Cac$@FyO0!m$dk~VtVnBc{~m+eNGMxjJ6Dk7 zmgsqpuv_rDD(pw?QIPS_q|cto-2U`_l$E)}!}*3%SdnUe{|LUxzct-#b^9z}-d;f9 zO_FA8f5V&m01PbxCxavbxy$@|rU`#j|5+?5N0n%X_!Rb@%4|(|M}%R78Qsw6u;@Mc zE52pJ>PEw3X~(ZRFDh5-em8&#Gyzm7ED-ax{Mm^_L54a}F!?8^U~*0OuPE4(Woft; z_ck*lypQ8s`IxTeR_v*!#nv-P>K64c zcy6ckJ?1AjoTmq@Q>KCxN+~J(J70@o(E-Ibar^(`qI&zk1Q=Y2Ke&*WdqfQ()*0`) zd~QW>+!}VKPv>{o_+T`(#QfWvLOf3DBg!f}&)T}ATUMGj-Tk)0Vx>+Sk;|8yLuj4d z(AgIBBDZ|QhjqLagXjrx++*-6s_Rd5c|PnkWnJz)bzw}p6gtC|}v<29>^<8(1r*%nb*6O;X8GvM zUeI5DaejpuxrUNnFAawy3#ow5m6uBUP5m*h^FnTDk1(|5^@Dd_taiK*=i8q~iyl+E z!pXQ`c#rJ*$*tJ>IQm5kX8qD{wjNnY%ZJdPVDM-S?^DTF#X2(mlJ@&g8Pk&`5&N&d ztOU1wnHNDY+?ZI%x@Wjn@gLxQw;FH%4Xx=B@5bm#9Un~%bBd|CG@qxejNoC|yS`jD z6`w;#6cGE!=Hr31Lx;ZOfY{r5-g(nmF;NdamI=c|$$~th4+dC&?UyJ)?O)sEayfJ7 zLy)vRHGWITTj4^7F*VnBWIdk$yq`hx_+##T^Clkvr{Q zz#CK@Z>(WbM~d`kd*H}@mJjYnm!|usTeVgcl(*k^P zj4RSOHW#e>dd>V;HCK1T$e5rBj6F%GGQvIXQKr9+86Z5p{bTC&lxtJVCJQh0YM&b~@cGG=I_^@G><4ey&rj{l2D7 zoMp3kOfZ1cjPcgVND3dKy8K6DPK~#*k?c_$ad}tg5`g~4R*!!TSe(c~f-mE=O^?TfP1+;Rr6lx>KGMP?svCZ(Y#8sO|jOGyt z5T=bf3GWZAYo{N5 z?bXo#@CB`dEYM`qc)`1VufpLh=Rhtys@ZU{xtK*j^NqIcgdfkQaLr>yc)mAL`)RRm zmBSh%PCxP7SSqsULsITcJR{v-HL;USG77{|eR4R-)cMEJjcFbOp~^HDmSs@Efd?Ir z)U;@PId+ITf2&gjQNaTYaMmRuz=p`6?{-?Ld`DZPSrHo`VZfyxsP{gfLc z4JovmZ{a<+9DCQKG8;pWbQmReTQ)ORVhiT%?}dv?df)1!E>foEj;}16WqoKW#dI!+ z;|klMRE%yAeSMe&o*-T&J2>+>#H#3NyPH!m_AOgR(2<(4^d^IUv#g7=V4|9rzLv2% zQ`84LU3%lp%Cc-;_q^;!*o=oY%Pr*rIq5;0HAiOd(~*Pj?ppaTDL`+U?><|W$)yEu7_Ko@%5^mds%{JYpQ3J=1 z^BiJRzzFjCG^(L}-85(=KjMo!gEAK}|9wIS7(9Q4hIa6Uc5~}{NX0y{)o)dW`ifsi zdymM;ZXF?oc7VPG_ghQ5hf#)E)?*?%>V>p=ii@*ZbH-NoyYlYsETW~Tz2?BAn!&Px zcB7hU(Ld+%piP^ywTs)0)rl{`RqP**sp%{aD6u{G(Q#Q<``}{i1z;(yPH^mw2%exXEA^<44t!om{v zQ)cWn0Y*(c#r_tKE&sCrF22nFCl5_J3M}(R8f$L$Z4b@N4j5QB$9at&O6n8J!`25W zsVOjg&8?&CElJ-7ZchuV_1hA=1firnOph8$o#L+w_*gPaaR~c%9z%oW#{T>X#zlc- z7(CWMZ<6BnN6No_$`+r}(UAP1AK`b*V zMcAzFl25{mTBL}CzbGP#xCbvCaJeNA$}3&9HNB4=!T4^7{P9IM#$26h%9D;jU0j1$ zow@t#r8~XiVhye*fvBy>Sj7>@<?N%qOKyiS0W>AfmR5x1U66u!ygN~5$=uNUB_fFQlM@?lvX*b zOX<(a&tg3)U`Q|+(ShBylBIvPDEOkhdhc6rhidZxM0BqNxCB%7WE!jwC*}zFi zue7Ez$lI7d-)XpJp@0a$P0 z=$>6WUa8d7@h3Y@ch&47&#wL%#W+T_eK1U+dzGB<8t!d+vow?z#*uS;)-|8m;{rZW z*Vzfm{}hWUUx3M(8W&5%&UB|EfAp5duRdepn~ryDf=|mioK)?|Q?$0i_kYPit=!9yvw52ECTl*ZOPGzl~Yyw>#SYPqB1s~-B$VK&0qr$-wf^DQmi~37;w#3T5xQ+?$dfKK%+v|NH(wfKmjpWk~-bLaM>GRD>XFis$&7T(C z^+inI5N0!^3snShvy#ymZ@ue*S?M>D{(8c={OPVJV*gq)#oalPUt}shhwmH?h>6cx zMzR``Leia}@p8M>%)hyfXnO~@{3JGZ+S0H0QbCbS(>Ime#qhiH9@eQ&#vN}msEm%ZwguuQ}nf- z|6&w|{?MJ!*japO;PI#kWyR8u+989ZE{B8p#+wlf>cyqhYKdJ=+yf8As+@9-7 zOAM5qjyzScfNzA!cH%@4X~~k< z7DQN=WJ9M75~FL=%`a*$f1Qc!i2HtgjgbRi4gW%}`JGrgn4wb2=AW~b=A)(8ST~i% z*^_b0pt7zeU9Z~YQ|N<7)&|}#Ux{0{&^w}9Tvjq9l122{pTYd%KG&aS={9hqZ%REK zkcEnKD2MMBjpNeX2jdde#ew@GZ07Gen8ldep3w5S)lCbt0x2>GKcWT5K5Z`QAT0kW zUf1+FU8Wtt$pA#XrwojzFob(?#CVJi#s-pDL~=F&^Uj_Z+S~BEjx7(h(Xl{V-59hr77gP;%&C7rFC`bYs0g*yb=N-_|3P`3LlKc0D8UC zpPL{^(v4)+b`rG@%h0+%W26jguCm}DcJ!WXm+xs9fpGwRo{x{{5lIN^4)3tq%d2ot zQcE}ANQ)iz)_5%8Xk=8KW|9rT$}XJ$QKufp-H}_{8a@h~+LuM>n5@;3t%Gg`3oG)} zG}ElI5|MYVM*3e-JO$N3i3u3TTe>I7^wT2M2JaG|tK8S}I93H=#HQe&OzoXg>?fhz zQD{@7kD;3Ak8p)~5;to*@gx90mM09b#P}r= z#^zs316XiTxMossrAXk_Z6z(D^l}I2b)Nr4syf_$NjM_2}Fd&pdc~o2G>`T zTL&1&X^zRJ*oyg|EZ*hiVeRKnw}B0-9apw&q-*dL*^4Kf1;1#Y48F&!8$8sfqd#ss zT~~`Ysc8!;wRWHga_{EWjm`*&lQn*zmBkS8H&q89bRr}Q4o9zI*WWSriD8bXdL;OH z9M>iZnFYZx!ZMvT0{24}={flO^wkr&UT*fWDS{#>`9^LzN^gDrkBsgvP`S3&rn2#w zJ8L+2aO5NLCk1I93h28d$~L1`#Bu0`{bqKEygHGiY~GN(&nD3ke;&*xK!5% z-#Gloocv_dW0f_S|7Bg0$*c_vEn#`kUD$U}fs_xE+429-c9Kg$j9Cvz^hae1*17fd z5@j$HM8-(x@(LcXV?`tGsKv&9-EhZYYB{)WeUa|~p~?y=+alvp80=~81gLW{A_ zws%?3o5he%@&x=3xS~o-2vz%15=v}C=$- z?qDA9ajQ05xT~(CnxrUv*Wso%#*;m^YW24Y@k}Z3HC66J=|ttAeD17=4Ozy{`d@Or zx3j&yYd=5Pz%&-W|Hsk#ID&sD!jqi$Ba_cnvyY$0>HV4cy2(_<_MJVAWp1Rk)e7#n zA51oACt!YebHe`ep;XXM{rGSNR%u1>s;H947UNT?#b&qW=MSn**#sI5wypueCm}(7W;=~IT<4-bz`zD{~RyvB2O%CJsDjrTbdtH zSFbJ^E6+`;43f_D3w*qbzUx!N!QRAitrwE{>re2gshLD^QSXf< zJGON0S_R_z#3d)YuR#w16;*0tR`UC%)WvsxCpJ-0Mle?)ENLR%@yAI9k*aKlFh>@n z{_rCvmrg}s0tBSQnc+YXwO6^_I%GmT{kS1x3cs=0G$vh_KkvRgePg2vq@VNp$DDMV zL}|dJOK|azAl=5=0pBPidpDM@o-EW%;szHmEU}V~n2+c<8;@`x)O2E3EHo9c^wN+Z z<*$B};2eLS_|!LNCG`d(;#xr5u^Y~!3so~luJxEvx%E3JCsb3~KWG|w-sDA!A{?b+ zVlF|t>&uDDyBbnV&7LQcj#`+3!tF*7@^b}42Aw@c)^R;DT&l#z`spI;vWCqGMMm!7x79Bvuk$+U5~ zt#OCu_f5a00>Q(pTKl9HDZ|Lb>U2kw^&o=rS(A_PDJOf{@@ts6+U+Cn##p?@QEQ6U z^UWVa4}%a3aZCemtgfh$7_t%X=~!5MW#*5-Jpf=fb;f{B*WoKku2#@N~1v!$wFaI&#RCo^SU%`a;aS1tCdIWalNT);+a zM#35$l z=r6mszc1$F0@~i4Ir=zdwCSzpfVeom<(98SH64b0yY$8`#GM!{Q9z`;?23A8-3FAt z;-mkQ>&E{IjLH$k9-#eFfDy3g7S|qe_Ub}sKj5+Ca?!02N!#JI&BCO@wI>98Rn-%v;iuaJ#%uPSPyVAJ&lU4>__`(t^!`_9`vU_9O1)@dv!#bcl z{(JtU_>hR;L=3MwOPcNiT@n-T8&{9GqtVqt?b!Fv>ICoF?F6K@j^k#UpDYyl z2HxIBTff~k{4#!z1woPh8S~~GC98YDe6rj2=H9BueA8hu2j`~>yq+22glDYvHr{#w5x(Hnb{I8EWf0^Fat<(D zy!Djz@B68#B-D3`MHuR~aWzCnr;ilVsjK~^jc{rsXihNedso_$w0~(u_Mm%=(arQwxXd~51* zQ~C#5aL;TLyENRSQ@>fw@Avg6!9huhh<3=WzXqAB2B|)0$(@7sT}%y?a8|(4CKe1i zS~rVXqb+)_LoLe1?#lSy(uV_mbY{Ks!j79grQ+J0Onfs&Ga!=dn6ksTes zGVRowZ*dRZ%9PJ{dnJpuzhA0u*P(2r%_hKbXLVq5KQC2Gqpqd8Hg!_)o<*jK)Rh{!UNY3mRjlpBvM^4f|=t*6ZU% z1{wVA*!?}Cs|5bA*BeG{=Wqs~t>D}!O3PAf*yN{@z2;hNttcqT}0vUpL_oYa2(~ag;6Ut^ve1HVdaa`92zc0gqgl8 z(>chLiT*;kQ+A%R753Tm=*`T^Y%Tv7VUjf;EyP{;+7fBhF5iFnXLD2idvQnlDr>0S zzkFGgu&k(7xn^5#>y3W$TVaW{@nSW!fn-Irn_&@oR&FeBqXC1{@E#|HnOD!B%8r*e z|0o%@m*y#|Eq;A8vljESME9f6vbWU=d8i5pKE4bdo^vdwyD~VoM?{2Z4ai)A4vCBg ztpQ+ygx>v=r!>M^Bh(@0ay2V;{s-glJ3iS4`#?DJq0Aw4K(u%HVBibl2Iut!H-xuo zvF@K;m&wIlCuy4ly#^NOf&FR=zA3K)b*f*;Xe5>xEPDc$EuPhb{!;nzF=VT zEm_CSqx5O^2O9~V+ezO?3LmK(^-#=Lo}2Q6Z1gr@K$847jDa&1jvH{$3%J6dN)5!z zQbIK0U19_A3P3O)ErqQ4I;rCb3+}cIR6hwRIp=E=o`E-xJal(*8MWry>8-pfSRJZ} z2)=fzN^KyP>!^7}JW1)EVzQ+aMb!geACdd0f>=z7Me7=9bkCVNFDA97P0mP6N>4pI zTl@I3O}>2?yL@>6Q|BTxnorSOTjL>7o97R!vR!~tPUiEA=xxL6=svXFPgC@crqm(C zEtCc^e>zxI?qtjMAK+68i6diAuEpOQmhB<|T)xWyPUw-kH3yz&{F^YbZ?0Ur7Sj4= zg(Or?<@or(yE+68HLPb#tAO)(H>YP1(AuAKcvko`h&cHT+wwGqCpB3dBzEi@*Z-LDUX z;5gj*4-oby>D4ZKe1vR)K3#QK}vFYc`CON1LD*s6{jxm>NkB@QyT2QP4o#WSxQoGaRTUW430p3>q(@*j8&b5>rK&UOh{qJ8UW5(bk|@Nn<#<`O^BnYC4$@o zQ2ZQ@tI?rst5n<=Ecz0R}P@bT>&Lgqh!D+gvC zc}4<~^?xL>xlRj%5wK9Ph!jiNc0lmg*W_I2;?`KYhG02c)1<8Axu7S`*pNDlzr%Rg z$6hvNZl#10zWuwo)sen!#oOM81uzgt&{q4{d(6{ORjwxTZL+68@WCO}`^?Q$@XJZU zPrs>-!GMGIL60d}kxi4Hms3A+yD5l4DU7C;GXmna>bQRLq_}I>Tltf7KWpS2_whdS zS1pZG%DJ<}L0Vt_xT3#0;G;GFDDCPSdrsx0Q_LVljgt97fZy|Xl@#B2Qh|p8MzNuKeqcLH#K{wF$Ct4`Whp1d|j)5 z8kzH*1H2n4ldvXbO&6etW0{inK#_IbnF%gd-WAu_q8G;gzk?Sw)C=l?)55$w|M z#69?>b#o^%_ji$YmTscjM>QYQ;U9#hw6qncnHR;6M;=Gc)mnTK_;pV%RX~`0l+aTM zNg+R6;i+R^?Lt^;@h8MHXsZ5uw&1eqRdUj%uK{}f^Uf1G#`BkYwNYzW`xnz5NVi^` zX3hEOD&|rB&R!LPUpyM{{>eBT7^?gfBrfGN<8Df$E>`nZCx@p52+g?4w(Y z$G;xaueIJBfA0j1Fl?$D*}6d}u4t%lkFDi%(oLbQ@ud#Hw583_$%ugBN?nHkDb$aY z<~G&82w&l4X=j+JduVVY_SgLN-BSJq5;o}8;%klvClN)sg>6Q|E^d`hk0X;Wz~qD* z?|X)+23;8f=q}_v{@I^1pSb0BpAL_|EHVv&r9@_xvoo%}wL!EZ|i+mJ?r zGr-UlXtg41-H!{0_i7%jEbrv^&q*~pXddG?WnE64H9AgHsg~8L7B+TeYy|p7N_Ho8 z3O9a=#f%@C9O=hISFOa3uiFL|7hMjtat{SRq%cmqoR2W~?1P6Sx*ILK?>YU_=7pd3 zUTx@wo&3}Y7&^f&%v}|;mu$?rqdWQhK8oOdopKnXAn)hOYFH?%snR27mDWJyBn-~= z_&<-EPY0KJIqDnfYBatg>D9sok6dqB2Iizd0ZP}F?DnLIltqQio5fOPy-_Eg5$Alx ztH1akwm*1r9r)=8^=qCX>Tj4uItlVD)%D_GrRmesJI9U~AxVuu$!L9dd!rW5Nt5GC z>IFH`T??kD4!0GK6cb4Ko!%M*(jJ)b+9v4H0l4h9z1Y!wrPG{n&ck8P|=oi;A6>3E%e_bbI>pr)(sq+}wiH*L0Aw5;K9SmiPt%spfNw2*ZFGmVKivkuju=(RVS zgHoh0T;7RCcdeYD{KU^c_e>uVdd$Azg7TdiWeWJj&|BoV$nnhsCqCtdg!Aoh27v6O z(E9bdEWp2m?btZ#6O08zuUFHzj0g5U)bYtqIfc|5q4`#s7|_su#51C%z|9xew= z@|%^ql*N@!*^`4yEUqmirDsJhc|p)FHg>RV$LE{B(`wVa$1Y-t0kNP3Qsh=yS+15y zcD%YIhjr}5n5@d>&D^;BvJl}w$6XpTAMK2doOe!X`g_D_g{h|S3CPwqK7SNLTHNlr z5yw(JE-2Pgd1o)ll`G<0qi;|Z3%!sw_+1XwDV9$BsHLC+L$vqyc;Gm5ef5gea#htd z+WaVdv+|jyDaR%+xseYinwUFjz7xEC|7Q1es+`vYrqms0r`8@8`w4cbWPJt?)WfI! zdd*eV5PjTvzA~Bq7vgk!r`E>+XyvBAiws{raHgiVdOU}w6z_q9K>BF zc7~}rQd7R0*qO@>J=6c5jvCW^6{hBh`nwy}*9&20)TOAc9Lt7S zoR%1<79vIB8T>4zj)C!ToUB9Fq~h&w6H_S&=D>TaO3QO0%+gcT&kvs(v1Vv`chba|fAg!f{W^54EWs>7$dR zcYZfGwKFsL_Ch3qK#qCa%NPfs0REXIW8_;uwn&k`41gm@^jvO@dd-2ok4Z>-%|D2f z^W}(!h23$6bF9PPr$Ate9?smgzN3#CLi)baw8?@LY^bOD=e5?r&LHLLCvyNMefa?A zV^Qsel!Y|9i;WV?*n%Thc;@Z zszrM8xxv7Q9vT|IzB42WlMl+%V#2alyoje0qJlse+Bud&<>eaw_=+1xu6CAS@>zit z{hSBJ&vZ9w+u-BIr8Z%?iB!1ZE9>tzy{D{3NIUVK;n_>NU?p`?x8&q31Ut(6JsFvi zZW2EnAFnc&i>jDdGY>3%(D0Ul3g!*RB499Xio&tITw!OWbv)Gy(f$T=ZpZ$w%vHH? zkWuaQKS0-61a}}wmTJk`+Ep$BWKaBSNkKsdzs78874l<25oit(iuNmEifmS$xS}fP zS(|DH%z#aZG-nfg}!`beikJ61f!T@N6fUk-a{ zltAXqbbG#}@8#tDBj##fxvQ&5!tnZrgszYPQ3lFD#ufwuA7i)8nHI8TW+hDAU9(vQ zZ~K|0os>;&1_@M~F)nE3)(ZKW(`S8*+iI;tFBGbJoO_b%^v$AlNzN=QcXeYwq#mgGkMi8RWQ;q?CpQO1V#<9`n` zeY~1h2x`drltBOlnW#ALK_0Koq29v2_rd1+*8OT@X1@boc)4Xc&-IqJhY?_1(I<;5 zU~RWZU;Mp(HGYW|V}&Z*AnSB#rj1Vz7bU7nOH0^p+RpYBR}J-55+-ZyqPqTi7v-G3 z9d>Zg(x3XGqwQ)iR34z8i0>+I=9bG23Gge_knxeM6wlcy>VodImnjkv@6)o}7A}Mk zKLWmCW`11!#oQfq+gtdlT@-`v5{xRI-YiInD&S5E>jCMW zn|(akJ&saJ6WGeBuS-rgRdxNX-l}-to%XFNN&Yj-rKRn;RwsO8fITj6Cs{VvKiTZ1 z&3}L?9s4FVZ8cHt#&NZo@z4JOR4m=)?svZVdBDTk!zUcoQ2fC&ddU7q)$rPx^jbi2 zYSiX8z1BJYLbmvdX+taij<=!#6h)th89N4}u-9Oti@f+dy%SW0$7snN?i+M%-!=D* z=)N*m_M#=Z0>I+5+~)1pep*qtOF|orRjH&0_vK1W&j_EYv&Pko z)JgW$&sfU^0jO{?Q7Nig?e%&;pK8D(Im*kH+PHmfE~{#O)`Hs|Mz$|jyhG*sdUpCz zG^wRPaH&oYtgi&)vVxL0eb5vttn|2fopS<9qJ0G$@z}3p z5G3u92r{LJhnn>YHYA)xxdV#Sq?WRv1z7E*4jF4ZL@)KeR-Ke)ool&FXeE&;DZZ<2 zhPcBXBpW;@ob-FgQ}ms{lUov{@I4O$&jt95INEbuTU}ky-#PI4dVeE2(LK6l8C;vD zGpBy$FDot{h+s3xHdWq#dcHYN(IgG}K`EXRR84^kSM8T+mHw>CC)Rc{Nnx9KaEa_w z>8X$zdma(wdma(g1Q5MB2x4z2dFQ$LDk}YT5^`&=i#}VHfoeT5$A=t!Tx@HEdJ)#K zeByBXvL-xSZ+dy)13KGwDL=@f_@s2G3cj#_Fsrf8DajN-o0XL;x0VeK6wR-7S{>!m)`7?q>Wt^eVY2?5cK5S17G-=cmrxXcV zK(6zN9t6%D0gJ{CeSZ{PCgMwa+=O=}w(VnO8zj!j>5F_MQzxyvU-4c%ikf<>{d+mt zM(%~?L&!N5cx62q-c1iMfaBmMY0q#RH=X%XC)&%3?MBUwf0qwLeVOgqK+ZIF>{}<>jEfptU7$ zb(w!XWT=cKCMr*fK{hTB6(Mo>Mfhf}G17fQs+Gh2?m~#F;6(})3Kb-%rL2=&U^`=$mPMr@8yD{hg_R0IqggH5#eGzG*Z@yfF-Mu@8$EC za*NT^2I$4zgNxL$wLc?WBidDknxd*wsRl{*WS_>l=fNGFlaIH)uTYAk(@FY!V*$ll zf_jJgl6j*U;T!!+3=yn@jK?TOx#qZG=%^5g0@tBWS(BB7pp-#bT#NOSE)(T+cOeUU znuv2P_7F}7o7OBYZqbAuty#`2RuTojv}?hlwa(<~kPH_eYtYN6Hqgq~JI!>iG}ehR zEize6^OvwKx81fK&p5}PTkjm73&;Z;?p&92ymPem9(TWaqSHw_@*0oAhNvodu}x&d z#ibeHO8|X(kSP0`=|_&DJU>; zX#NktmQ;DnG_`89O)W8pZmiS$<&u9&3$Mjl0+N{Y9 zrZQNvHxw!45Y77a=#fYwTd*_Qs+?1| zopRvmNgQs*&^!8E?Zug^vU0|8mzzi75wa|0xnjvwaj?G(Am=VloZQ$4GC}a)P+;i{ zY{-0S#?$4+a&VOZ)N481^v_z2#q~|k<9+ftsnAfXVFGoHJJBOymG*#yWJ;oR2=2dc z??O6RjdJSva$_=Rmv%=UHe)rL`Pg8EoSO{SWGHzGLQ@msm^+@9!@$&vD;^;$jkM9K z74=xN*-POR?l10^gf9wj*5^$H4@-JiIoa>k)auKL$#%MrpkJF;q*ula|BXwdfC)xw z#v`B9aejMeNVgEWIg-o~dU)=ST4^@WqY}!|Dg?K;_ky>3VJKm@6N3ix%Y6-ZIhR@H z`T@o-=%oW5O)5x2yh{0ktb+FW>!zumm^YKU}Qo#7h9lFk+M1~ub*gvH-~{C@sF zz)c|ZaNcLVgPK8JZ8cF8`I_jn%iw>>UCzDBQIlEtpql4~H8GE|04Mh=xGn571zXUps=*mvOa1bA;ZIQ4k~6bD0DW7CyvvXy31^%1>V>w1b+y z9Gw}jzW?{9_ zCpP=}7~`6o0k03f?aYoD=gs7W-SfLO`-Y4twRjHjz;-L^M<6y-$;=3(Nu1-q{BRB~ zpX)HA81eX=fjRAMF}}UT{M522ljjHP*Pt?2X0d7}?~(Q3=PZ>8xheCO18sUOvqIH9 z<2vFu^%JO(k;ur@#1u)r_~36DRfbdYn{Um%6mB2ekMTuVEMJBHk-K1eNDf1^IRbOJ zm~RF>aq;*0HdCOIFRk7=6l?K`t)$7nmEH9pqm&yXE3&_)=tq7d{6u|l$EAQ9?znm@ zK1Y3I>E@Ri&a&ew_jKLM>XYGB@V+3|O_kHW%wU1+9Lt8@l`X&cUJ(gMS$GSvJ2RFI zrPthRa?7#2tkJw%I(OES*}47!>S+=ro1^`>w;Sp6B1TxNR%>#@J!CuRe9yOEsNdXA zEyS~Mw0WqhW+C653a@PQ&3E6Rf{>xCA;ZCF&H7%o!GKGYE7L4ftwm|lA5HH^iZ~@c zOxk-d=*c)!-DP`09pV`|agab!WH`|%sULw13j95>arjbQrQPoud?J^0U3E^ljT);< z)<%IdK1$0)Wvm=q__^6%npc~{jIn_~Z-)~hjv&DwE2lR$dRl7v=c9s)oVQvoe7pP5 zO0#o7?KSgkety;}(`_e^n{u-t7pd(}i{0i;{`VNp?DK*;$mr9o;C7MYjfPZL0{f4O zT7{I42uzgVZy`r$j1$*1$XL;kkX)mpgZtU8`5vY6XecoeJVc+!Yt(2;9KIB#h|MRe z92Pf=KcU9nj)lu!?~wI0Pc4dhAb!c(3mhWZE_E_@?kx$(z8SD`3BNv)}(Ec&?(bd$^XVqgc-Vjw5 z?Rq;OB|%7_NcRJhGkv#}UXkyC#KQdK&jiP6w3Rwu`N3 zKMn1KUR?Edl@mFsguZNLH{VK}pU9u-;c*yQJB9{QQB8M?3nsw;30(K zK@nv11wtuHQoXVwfB1x(xr*WHeSZ7!h$k1ckqKJc>6xC4WT6fy*sqg9U}LBg!q^`> zf)0_>skA7aY1XB}^20|{m0K2W=<=;dFFW=QnZIg=1;O5LPAbc)?9GODuVI@5*AN;& zE<6C3d*tukC&DVS-&2f`#UT$jF^=Q(N!y59ChCr{L%%#F9@X5hJU$U5SZL_GBy)~A zSkZ={>u!^cjHXu1{nWBDXsBA5FeX*aluXi6>lfS2pJHMqbv$D)?t-`fF^~#v@~q8u z-8xkD51=iJsQ%~28-aoTekD!S=P|CK1c)E9?)ss+SB-d%6$qzuY$hMOWLRX7wM zd#F9dQ8&YM1+i4y?ePek&THJ{?P@zL5);T$G*I&;o2hkvNtba;oj4zapBi4$pD)E2 zkGKb>r;kKwlT1ijsidBt!fs0=I;->*2s7)hIt$mgjZQl+rbQzPWdXiitU;ExAyAO~ zLMYy^cdyBG=)UWC$)G%o^*^{&pW4?#osrkkHNuy`+p!4QZESE?yVj%Q;%>y(&6rja zH{pju#a|BXMr#x5m`{*}`~GxO@VUmTS%tMn>u9gQ^!!={qMhqqKjY^Myw{uA1%YtG zE!hPqAB=6d#jp6A7#8ienL}DyFpFfo8!1`!~dnga8_!N)6Vo6Pf_8S*jsRNcu*v~U>$I>!H9eVIqRz%8se5dXlubgO3>`VlHhIR` z4yC$F6qvPZ*-ZYL=u@b)a1AtodtyybJr6yf1kTWzdVK1tm$)NtQbDktWqOzHlVa$t zQtPS{jW^#Tum1W!h&`qMTO9uX_UkQroEh-Hj?i)D8t4nZJ+euQ;0IOD@cgY2lN8Y>`M1jYOmTpFA8Qmp4B90BTAWa* z$IYrB|y?;^$1t* zWeN%;X%;A!N#Fi+>hdd~l>PVk?Wo+!8<*n)>PM2CBL|vPlVl2MHWrVcW-V6cOLNwZ zXX8!k99}cJM#}HJ=5j2$iaV>wC{&y2$zm>PqdB*~Ow73gY2|yv-paJ03lCOsQyJlZ zI6ig(J8n>aVSWKu&X+udycz8J&o@WqOa# zW`6RyUHjZtw?{Rn)@`t(2)aOI`b(bk`u9UKfnd!6f}k)WS<>B9!HCtlgd9b<=D9-=zwv5p)@ZrF0%;H1f3z{ZPWr-~FO0dJ<2 zuep$f^h{n`3b2swbuGFPfl|aG-*UecO)mF<$}`fr2b8rg#ZOk*=xnd`+CS6KUX%@J zWhR|${n(q2yYuYEc3l$5L$IGm%IG9#N2v0e-kE1jiq81l7XIFUJLB| zc|Ox@_9b4`RgK2?FN-{iz)mnRx7lyv@F?kKRM}o|#pC_k_?tt7a_qQhT&KG69Lly0 zTpxy_RR;#4hrAwqOnp-C^qOt1+&(wS{^{MZ3lA^C`hu@2R0@((v}_C$;PNr=s#zl6*oYFE!%=57kQ0%Wn!~a;gDE#udcwNeakAvIIR==7V}I;39M>p&#DA3!Pd_< zi3EXB$8ATVHEEQkky2@OX=J#|1ie-m&EErkcHXGHJ7BcTuUAOWvL07Jf*BvwpY&7CcQi)5N$pWl% znqJv`soFyP?A<-alPjsEXlJx{e%zxFqKNvXmmb_a~@c?^|~?CuKYBUqid( zYUoVB;qZR^O*Z z%oQ5ZWsA8PI)l7wN%b?;MU0hbgffheahsHYSM^!FTV9Wq%VU{L2=jHsGc$1E1EFLx zwzXL-z?X2vzUni_mygu#@N(onGcz+XA%wnZ{_-Wo#qb&t==a8lD&n;q9!+R^o{$kh zqScs0;zVque)Sb9f>Ou=gDAQFF%1ZVqL691z1@e{_TcAXmu>BAdMFg?5e%PkCmSKP-X_Vvr#SNm-K7 z?1SrpKZfev#xEztq9Ciwq2nC;dwelp$ zrosG#4<=sIB_D{|+1Y7n>7i=Dwmsybc{K z+hz45^SeKM^`wfHdn%H+G21?fdC3Xw5K*y@uPk~tl{V@{b46DTcNa-M;KDS)cs3sB zM10-LuaVw=aw+cSImtjjE@l9zXuC+HZj;HDRR9vA^XDItH#A9vXk9~uu3LIff3ox0 z8lkR=RWZ~CPIz_bDx4CL)`Sw=H*b~78LvZ5?NR4BS61}oO5g{p7KG+jR6=yt5WN(5 z@Y5yJTDOt#*POY+@8{CqQDE4kEnVTZb4+8?zYB}*N4m&`+N{Bg$-WTGletDe)&Lcq$ejg3`P=+ZXqxdnEx>?SRU zcQ|<$PnKxz1mbbb(-BpC3B5*-i`j$JyU@-l-r&;(p~vx4G!-*Q{JuWA`}ql9lrRxG z%Q5%Q)dLF4F-i=MFs>I(w0Y2$D<|ePA2{H!gu)%B4R^|Yoa|f+)REiegD#s4wwH3b z#wOsdw3CcMkYf$^qs&>{u)fhd?p+%rhiJX3t=a=pAoPiq$ zDp+ei!?NA3=9IwzJI6FY0DDa2VN`o?X;r%wpg#3Y)$pnT#O}(2_`r<&pM}=sK zsVOZp9fnYN?V6Z*e-bj4mbY87!x8+kKCrbQ@KtGF&YEcgP*x+o?mMi?weLg?+ zL~giVk)p`dy_~;j9$ow~WZ)v0(!7MM0x;Re>go;6W)B9u=l9#1=*D< z$4hnSHp(GaOVmEp?es#1IXM;P@cZ9tro}jaKlfr24)dj&y>T=f*bqy?y+7o+kgjVA)0c~6l zxX9#yYGJt`)4f3Bi@)E}wKJ=sTNpC;bWs55-b>7FM$bhhzBs(!YQ|=7K#-7(YI-Uu z_4Kh}s(-MtqIHi%BovjEP9CeZu;L%C%c9c|7WcNs(^<9tJ^9UkO;QRMij|b2(M{sZ zIK3!c*|%bM>_5Qxu$ctl4_Fs$Ay+&4)qZBfiL#^%OU-&OOe)rWSZJRW8mC;I1{PVvwa%2mjKN8 zcC`1YNc4%}U}b4e!)n$0qPe5Df%CfD0ncmnn@XZnP4wJEj9z;?j@on{_sl#9J2}76 zKcjb$Q~SE3!p}D=0aZy8$n+o}fge77#uR~I<3r?Fllh#pM~nW2W%;HD?piKamD17s;_1^_k^>@r{e6bG? zkxiHVT6i8pOcG9>4F_?!?5`J~oZ(M(NQJMRUJtrGCEmGv_wxly5x`T=!MOCc8#X3s z4*%R&>TB^P_tBOR){Zd=Oq!2zbX8b@9oYi~O zYqtYIX#bPuU0|U^CotaAS}$MI*zCeApkK8E#mxOP$R;Wr=)Zwu$7@Z7J}-Vr+kYQVN{%D-WG59326fJl zEveci^D$Dm9P#8}MY>;NFGP8P77yK9KZ-H$N=4L&wlT$C&<%dsbsEfI7H=J^!-);Y zHYq7X*GbdZq?N&8@i)u#>Yt8WFWOyRQ4>j{rU;tWK@Z#a#)HNL0|&&GB*T2q$(G1t zPtm>-gIgoB>iMoU!5mrhvy^DxAl>)Sh9%i0^R3+gxn>*g0}05 z?ZpS>W)7I@7;$E!I(mv!yvidjAob;g22b=_S{9k*97C5UxF?T}jo(IB#cKfUkG6EB zAtckMI4?N-fa}IC^=KDdBX_EfncJHSfwt^YunnNW%JYU!+SQE~$KCyEuE8t^Ah_oB z`KUSUh)Gzf@4&uJzxB^ve;2nc`?nPSYQ`-F;P^xc2>c1U{=1K>w)C587S)RycQ80I zm;Fjdi4U*br;BU`VF2n7ZZguJUv*4pVtcxZ5h3fyjGHm^o-p;7J=HYHU271TK@rT26hi{9r#LG zZ%{2He%i4&)Bnxt6cux@sIE77a%Oa=8v*0n{12d*{`ApjeN|>zM@+&QH=daKl_T8# zMuv4@wP4fWSgmN?gBor=D>_X7#*Ys+$o`$Zy)`+kU!KE@Rz@s(fzCTJz1FR6<9US5 zY~teb1@6?w<8u07V2@yf=f+kk6WD3hD#@-}$}Nm!bb2eEh(W+Qx$f*-@dD)Aa|Qk- z;e?2MJd>*<)q&ivpI-0k818?*8L#T0W-Z4(3U+CzYL(Yvu{&7c+S>)!p@*N&+9-B? zF{D=oDQEwDr?@{tHn*BR;})TyN*$2=c5|Pnjotyr(^3!58a3siBr?^m5SbC|e;Cu+ zeP@QDvk%0xdhKeUGC6DOBmz9A+3PTGP8RWuMRvt_^0H7aAgU4B|6RJvHhCjzywH%IoU5blZfqo5JPwyqLMgfJQ=L$`d1R zK{`^^(T!&(F+IOJTtu`Cw(dsnOLShH*MdP8ANt}byJQnuM!S%p&4)926o8cwF8_QZ ztnO3BvA}XCFPB%G8o2MFngBgSHCk>ZRw}<=9_|S|pDhu6!rk;3p%YYb=5s2uDgA~5 zl@+%f`l(uGb5#3MBx|3so{pKUmMu9Z$)lvt{J5x{kW`d^knrz?~E4P(O|Av?;LQiNUB8GTt2CNfHdh5wo>cy>dJBLc09YKUD^Sv+f8m`FKHzhxbyWPC{ zOMoAtkgjHZag|t=U}M^z)qeq3+VH#i-ouzV#rrJ~U~`8K%R*f0vYp1GV>TCv=^EsP zY1aoByhC{r)d8iehZlCRCVza4L8+!zWHWe3Ll2aq1@u_t!?+(ZNUUjk-LJni=NHR99#@o zJkCKmcX5in0)I3j619A|RZ5l;wU0}$zjj+Lh699Ey&CZ2UL%imUnZ8Q%EIsjLro|v z)#zCvxQY%;ckvT+u7Kp>?1R7lv>D_I3^`uLUaCwkm^6o5xVut65p^9oACR9{*Cxbr-KH*o>TYrk+FE7k9AJWR*djOV>Bt{r&0hVlGao*+QUsC!SJ z1N1i{Kx`XdzV{#l?0*ivhuY>ErU*M(<i1R9{l6w>%-H7%vTC{s3urO>0A zi9eq; zLu7N!!l?GlzcazA64)9ra#ivAe*g!T2yW3EmZszX0baT=J{Byu5#vbXkx+0LjK9Lo zz!gda&8&li`V=_=c(-(C2;97b_aGsJ-=D*REJJ=buTlVUvB;5n_1A~u!pLaZ`ugbm z(Ecxv$0MV3G+OQP@j<)0K22+f0i#&UpPu5i#3XUAsj2a<&Qfv zSmM6Bx&IE=Iy-sW`0t3kTU=&RT-l^=*jKw`y5H*>1Lqx{_8xS|gskMC1lP&LwCSJwjfFussAlbV5}HkZy)qG$ z+zTjZL{%2zQX5As2Xu}LV#cn@%|iT>;v)JOJ41u^{9x;0fr>}Noy)b6;}MAxhh4BP zXg?o2xKvFLdotU2b0enxx1W+u77qOFkZA26K15|jKq&$Zs{szRefa$7dhFMSeL=J? z?gbETlWq%NAoVy4bs*oHR(Jee@TvMWm0N`tk3qZE9Qp{he)3p*HJh_FkffzU6XVn{ zCmGk0dQ7|>%t+F#PhoG*5g-pcsj&z-ABy}r4fcEW;pU_`Um>@5wvHfNhz8ZWAK-uF zkdKP6d_(a*{)X)0Wp0r441sYh{7`#N>OVSb>=g~QU;K@X2grjb6-7PZ5~QN@5&AxQ z3nO5ztfHR0?Z&Dbu6q&%`({XcQ-c`2^X^~Lo zz3j-~>*b~kWA8xq^KSl$Jasz#+{mRub_cc2!i|SrrB9t$XP0|<>MKLH^a20ap~4r5 zEKMKA-UXh2F4_9h#l$B?)NT#2B}bp6y12+$s0Bm9+ql+ZE^e&d%f3(e?C@xbyz#=C zTC>#h3-$g@4Pu6(;F8s_hXp^cBOmPbpDtCTV5v$vrPnvW;!{&B?wFgNo&9CGLE zmB^d9$%OF_ZK1%+S}2=rgo35>0(i=AN5*1IJd*BGj!VE`FOr#A1gg$!P;T;B@IXFMO5_~GdqGgJPyrWYOOj0yWqC1SS2T!2 zDDv}AUW=#5Q|&|lY#-jhIpQPml1?x!6Q8N$x`_q64cOOrSg>;6=11kWT#xpPLZFN# zLQ)DFUWg>R9WH|4BVTesV;rT*oeMa}xM_MNEpHbF<5p%2564&U(8fVD-0nUlb+tTK zVJ09%y{qp6!(6pu1UrnKUC%Ol$W?&w`q8?hi@@r>mt)ub!G%QX_f-eFQdVrPOl!UB z+p>=@Z;W)7w-F?+ezilA1qklfwXsV}Sh_{>Y$)qCm$4Cl=F5alf2@w7dyYEC5D)!; z((^K71gHXm46RSw!8qjuNNy}8HS4A+mpDKl(zcW2$GQ)9vYeutG>h% z)WC2Qyf>&7?W_G)+Ddl37ypk=KXBRh)BjHK>C*vg(m}34`b23(yZ%tAgYRd9vx-sq zW8=^NQjPwKx?g`sLR8BYa)a*YaUKdkku5O-#B=ODm>6i+Z_{t?MGWrgrN$#n0#2$D z{+jVGd*S1jPd%STdW`Bud}eBWoPZjGzL_xwkFkjie?5(PAR~%<^d6>i4BHlNfN=(G zZj%Dlx+R#{vCt_x@GLZ-x3KrlM1qdW zussvt)oQ#+JRM$TkCo`ReAW1Cq=5C16}ov-LI?{@xm?o0a#4c5QiF&8Z87vGeL_*?L9=7LgZ z_jVXv-Pv~$YGb+Ef!ywoEGH*CK|y$)dnS-_h=TG6bv}T}zuL1@RqV}Ni2c?>RrP-E z)^HrvDnwC^cy)IQ7dIv}E|A({RT( zq4eFYqT>dAtJ^LXX!HHeUWbV+3nf74I2RLw1+F-@uz0~G{EG$Tfv5(V%N{%VL1~Hk zA+rBmgO+Ip^SixqdJm}?7zPzqZ(*0WgCiF{Og8@MMg-aQLxGiW5UlSKkiJ&Bagg`Z ztEz$EO`7@9B<($M_OVOCriPA@UV^(7HcYJ@Hx$gT{9BbBUHD??c=g}?4u6EiGy%f$ zHqP+GXyy|m|1i{Bp1gI@x_+0aH$hnp1pXR1r&UtTD&yh#r-&raV?gAtE_zPdVPAVR zd(Q1H13S1+lA-heAk{e*fFK3mjL8L>8zIf+V|Jp$-~EiT#I?bMIXzbxq_SdsM_Xj^ z%LWdAJ56-@KCDypXTyJhY3>ZFN%}!dYn94pN%0G)yP?gzSO#7$N)ul}pkkgAtCC}+ z_R=l=o?(p_hd^HH^^mNfr;%HGdOxkFew|)hZ6UKlDa)8xiJ=U;R;)H!q&;tYw8%He zVx_8~YTP2DWaBK@*y$Cmo9#`lm&1g+i-xtre#762(qW5Q8!>BBZ5KItr%q0d%d$-8 zSa^Kl9~b`Y6q@anbe=;WsJ4N1R?W9dp6=)N0Z0ehxW(dhpt#kf9OTonPLAZKhQ+w+E zS|=k@m`|7-g@lu-f`YIvoxO+EaUV8xl$UW-1|oa2LIj2-TPLzx=z&=MRI1$g;P2fx zFAs}QbcL+VYw+XgJS&UZ62#fb%>V$Ds7E)0CSXn_#v5I_ck6J6UwG{u36^$0Sma~e zJL=NNOs?f0Iy*p30ZjN&FvFNy014;3d80{?^MhPC5yZ$0TW?v$`|rP8?>*nta$vr` zd1!`D7nO{P{$7Pm)*D$i8D6F{Z^qDPq9iNfgs8zWi|=)%;}sRFfnv3PHa!3AyA4D+<(a7*Hu$>FIsRO7I?cyg zKxq?O=nVkJ%M57|H0e3C4rD-j-@5AOJc5|+Cda61I`rihk zYQSreBkAB0_l853e#SG~(B0n0cRyVeoQLWWK{Yg5DE)gEe7=tAr)T)^EYE||1Ce93 z{i*22)Y95!B}SH)L?A6hZTabI7@PsD*jdoTdmhAt4na{Dc<5)Y?nqAWm4|Yws0CUq z?9BRbxm_f?PHUbo^G`rmCpk6>6N0!z#mbWHV{{g>{oOL^9(E{$;=*7{sI#V1=b3sT zhAZ(|=ZL!ufu~2uCOJ+c-`4noTHSf=k@y-K@nuYbr2_x<$(Lx|)0*Jbh|EP}g%^=8 zW$@zPwf zNiVS%Axu2hmzqxwdV_3EUKHOl-~T8-H%_&FP8V4CxwYj|12S|U^b(19SWH&L^Q zX=B9uvYSDR-O|fBY0j-*&e~Q5h891{=|kOuwI-JhliOXX4(uQWBTTf=vi*2Cwaj;< z+t+#A2HECaM;vmut9H%FyLTuNuc}}h-spP`3QXugPLJF+s2q5N^5%f3jxcGKoI{+D znV4==fuQ|`fg(Kt5~u082Qd!W_X@IWK`(TG&=&~570+-IehHPL2#O+0P1a+W0z%hacZ!_(`zY!UDf z;tzkES5+F!rcbK-{Bgq7s&7y%$9zXc$>0G;hvS!nmZ7wjJ`TV~*q=CbUcM-%Bn z{0DfPmtEV$DcPMJkemn!2Vv{_k%Crij(DY7|K>RjK@6cM8Znpz zsc95*OLd;KIH#o{W?>1(M}+LRTNMA6U)h@8NWB7@{&BJ%JIqQFY+)P|ntli=OpkYH4P)#W)Urg*cAG zQA@JqR5Q0*lF+4Ad?qbkjbISh(n+&^%g-)--x`;cQ9BjwoOCqaw?A|gyh0CoT#;LA z7+GCR+5J|K^QIOQ$@dTyrB+=34s%^z`4jjd!jy~tH0?Oj=&?y!dAgC-(P2TKK}n&| zMz+6ijRsWvR>`Fb1U4wqH+VEUkQv`!)`@<+)CmkF(q(1t{h>teq_Xp4A|eT9lN7WaYW#|NIpn(F`9T`X3J_GKu&9eJHx&3Kry3qxIV~z?`-Ws z-4o}Qg6Iczp~Bw0wap^w5LKdXWS1b?rs7-HF^m@XUXJch-yp z^*l3CZwg%V#VFAjTOo%R&#LrS1ic1u+oZUz%j!Yj-VWq{_HncDF+G{0o>!D0Jt|Jsvj5BRfRjj8KebSF_O}hkCfD|z!tXr~lbrQ> z9>&jUyd3)8K!c=6%|#{F+^P7UR_2~Cv_9}`oW4_cO%>Gi-1CrumVgzXUED$-o144( zB>o|Z#c)`=cS>c3&~wK(Eqhe|Bkl&&ax98kxO!4*0aQre(4d8OEz^iPD8)n_0x@~C|7E-yS&b)K?7{a#xcl__S;1gWL1*QhYt_bK-qe}yx-Uu9 z+xW$WH+^fep`qA%d_9I4XP51DW9f0_wb-rm5SHdp;?ou)z#Hs2QX+a6MPb$07R~_` zlkMn?GAwjY9+x3@5I%dX{YbX+-^F)TaKJeJ370Pi6h`6W@_uq1H$V-aPc(27-cQi% z(Y8RpSvy`tRdZFb;T=RSvDcVukMZ0V8{RROgX}{#A7I;Vm--p3#&}+hSTS@Iyb{_) zr7yW7SW=dQ+3pR#bi9$GrYMhTG4jyphXDIvfgsm`Z!eRDRF5o}Sf2@ukAwT0AKOw-?z7T|J`=Ax zHk3Qmo5?^L79LR;ce_-XGTz$(tg6Q$g)J%s)$N7WpH^#oZbYvey>Bga9p{fTZhSj#>=j`x?|$WQf&KKo?Y~ZybxxTs zdrRE+OnSgDowdX{C&*e-s&-b5vzt6Fn#tlk5x0KE(E>Z5C0@c=$VQc zy;>@2!k5%JhN9XcLrHPtbVNGtLV3 zMbci`zK+u0&DVCETq|=A9<<$m%i4kNF>LEDjk~6Q<$5{2QDNyB7Y28kJr+}SUzI!E ztOc)J4xHHTK*+i(;1=RAH}-vFc0LupEm~ih`CStBOer8M7BorEXzBtp-jaS*by&D8 z=Y6@S2TRQR0R_R}#Q+$W4?BoNE$a>_Ch*^?5#-OZS{YoaMPyIA@ErkvO=uP+lYYU_ z8ow@SrE0omh{V)RuHQUNuP;1u>R8@T_7*Lwc$fBxvos4AugrLaC$M*dHv)d0bu6jH z=}Q$mx+^q>Y%%KweG&Y36qMi3C;t_p#VUD`9YCpuayNzp2P1|m1Z-a!Uhbxo9JyE- zAQaegAB@Z1r0dzA0;MZ?&BZdi+nW&m~%adK_=;B=%sLb7%a!Jh1&w zU&jj|YnIS*-=D8L+*9GOBNFZ@TN`4>!-o<+o-j?~$wu$hxr3X1N2{-0;r2iIy5%P* zABb$}SMY|HLNL!98B|eylBNLN?IW-6hPCaLJGHJ>W8-kqou=KQfxm4;)vV-(I}K?T za?ny~L#9w<2quf2g4!H#@$u-x**+3sF#Ir+%9$ycPSUKo&F%w-%`_)u`UXEPY<*C~(jEqW5>Bw~dw?A@vRyS!i2ymSB6 zA$=C?reS7v#$ugDaIAXT;mzJT1qG{f$OAL<;`%heWtKxO=1X5P`eULIJ8P#2?2ji(5De7GBLZswPf(md&}Oj(7$XX|1dVYw?&}(ZoP9 zi^}Q-4F@#3XxY$1 zkqe-)K3G&3l%)F1O)_8d;$krO)Na1Bi+9CNCcv(B{j1)J7+r2)IOZ+kLvOcw!q&R$#HH-A$-s}3xjE>{r&A1&t@ZnF%<^`z1 ze}IuC782NH_}fS0$oY{mtF6gV5hwTL=!(o?m+j9d{@N-UKT@>`Jy|w|bxuFl_W#Uh zzAK}n@3=pMLlzVlvaL;ZIb(M?I&}5MK^d(C|8!d~A8~fiA(q7b<*E?He$CqCg}G)o zlcw)61or(t7nM)*Bl;K<)%E`XT?(s3(m@fSpY8m-C`24W2L>|aelNeE(#Zj@Sti8?_XF87;dnbnM-08k{l`)9 zDQQvUjd2uxE50FraB6KVuL`|(M(<|TTbbz?>}Rym&w$6N)7khag3-4q@HZc`h#yib z%>KasnVmjZ0ngn;k?oF4L;?rAQ*h_Ze9Sf1UZOOX2f&2=y4$DBwZOsXf4q_omHns= zlYhYHtJg`vhn%|^e}O@Mxc~ZjuQ4ssc2MOah6%-x%+`FhqMBpQg9T#C#H|Ji(}B&F zi;51I81wm{0F)dE)t=#x=OS|1_}ifM-D0&C>h(IDy@xuNC(fRk;jU7h(ZHf{o48=2>rvUxNpcpr;o?X^wCtcmX z1_J9UcR<0xWQbS0liF<#Go(oQdO`YtRueuY`0)mme$9Fmbzl97hYATfvuUy8QKw;q-VH@5aTq_-c9l>5&IQ zp={&9hg9`~OHVxhvch=8bpp{sJRdycMf{O&TTN1bN42z;Rs(%&*Rvag1-~?^^zwI~ z&X4P9HD4Hci|{7$R>y0y1H}z|KIKy{VOn7H}af*4-mLpmtm~Fr;_u8_j71-I?L5T z#$rCPB{YR?|2n&C&Dw>a3aZVmfcx^gGkKr)!o{*&MFSbO*&3~t*%`S#N%SM5BfyV* zB=0iQhfdOb=kn_1yMj-@WZay+b6V4(=u+Q+Tqjq#46_zkTWJua$MbR~fy3mTu;$r1 zU!sAw71DZ%B9vN=*1;vfIV9malZ_M4p`r>OZK?`U(CJNKiiKR{~e_bs=djzrfUcK|Z|AF8A_#NE`j@}NEgFKS!bzQIL zQ>?ouQEU-)P5fX@2tf^5UsHFglmBG2I&A#tmOJasL4@3*C1A%@-9mELnB^TCp_tYo zQBY+nH{bY3H+tss?$*qwg+Uh=jqmVk`LjCPgk-zQ5&z`Te3&>)2|m32+FIT;KQ+bg5iMespbAP)!WSn2R%}i5j)4=z2p1;7@xF?Y5cn zJnefLt5n7mb#rrtr*1MD3d9O&-)=_Hd33s7JEtQ6{c5JF-p>P?=Pu_0zjjGqxOaZ+ zNA<(Oz{D2LMRuhsi4}5i=8J##R)pEilk}T}zt;33U&X0@O+^HiiE*p|XE+UXc@%A~ z;eCxWHbwGY>1-n)Oj=Ga0Vf$Uk; zI4vPlLJypGG6rJKXETC60*i>Avx1uqbr;b*oD}Wm%P^81khe~vGfWbE3(;Dcq(Lka0`c@vGrm*4FK`kK1)Txd7}!d(&|7lbm9 zEtt44`zh_79A^KL^Rw-7c)(O0eN@hmH?lo*@n~V}S?tHtfC1~?;yyp)Libg#KwQB1 zfxkd&f*YM$p}j_um_fYemq+T~j9=Dg654KN&lD%{!hM52L*;V3D|-!D(?LHMFJm*? z2I-6zF-4iegVM(`e9Kjq64A;(;MZ~Xp=m-gwf?1kmr&p8(TBTVy4ziqrRC7_ z;WE4}MPv)zj%Ni?0A6oiq}bMWziR+b1YcWob&b*sow1D32niu$TI+I+g2i({^c2m? z5xu#=FvtpjrFZh*dkM6Ke%dt{-3ml4bY|{~>|Y zozjM@x7vO8ZGtfEhLeAUAj260_J4)Gz8w^gO_%J+W)P5@8-j@^| zzv)IrvOB$Dvf+#jjJ2eUwZ=Q7@;=#qmk=MXcA#tGIqu+;ig#ETklZm}d_&3=6k%`@ zVqgKFT_CHv%TYJ0KXY+^h?#ftyBnJ6!OYC*Nrk!P-@Uvr9$67LOV|iWV*p=?vKK()1fM)Frxb zp3jMdpd*+q{Nn$BEFn0tjFT5VKEDv%9Al>RX? z_qFR=Otpv)3*Zb*JjDIc-s@dkQyrCQQwu7JfL0&`H~XgHTa&}nVq?=+Rwm%xYqkcj zx(#ntgktm=eL%$YLF&2vL*jnU!aqR!uv*JGoR96Il{Hp>le&Hn*|WGm`M4p27}0KB zQeGEg4JcZ~F)OTM&B)`uXAcXE`T}#3wab&~6XI#x{?QC2ZUE)d&!}7%g)JT8m^bb)+^fRhcXi==ZM?-}g z{ECca+6#+SWJ70`?Z&L=($p>kTJX@J+ue^fr+UPLCh?Z^#Iv&S*u3Z;Zgtt@V3oUA zqIiU1+-vT=>8%5+-3Omq*8-o64%s}Qubb#)(XNU`{Wa^7@OPwSUfe2<3o`!)7;n=Z z^|-Sev7itqH271U-nJ}z9`s*4`;S+g&4btI{JVg`Kbs5}t&L0Ce@a+TSSkPj^_DSx z=;`b3yYD=dX!;W8!1iD8(RN)4UElV)lKx9x)JT}#SmNid0iikWdJjhjB3OHQz!4d| zmw|;3bBFVF{c|;=K4_`LJgXt~kHQh!!zQ>?0}KC6vvx}!w-KwwGxBj-1oJO!PXBB> z0^ZWYy|43%7~FP{(N8uh1raMw>#%uJYPk@YAwjQhbn95=KI;AG&*JR9fJUcdW8c%% zh&le)=UKtAl;}*5S+Mjf6noSHa_{Nheh8iZs59|X7C>6@wL0V|c1l>3W~klsu)VTi z`WhC76X=8-6WLA%X>b+ISzA-_dtsfD>`GAfdXHm?;=`LOagkTUJ9ySmSLe02DaxIK z@UFxM7?rK*3FEWPAW|`-UA@e0^R*mnelTnGwu5b9fKU14Pl8kGM9ag0uebWOv5uUJ z^s=lj2nnh=_S6az`HhBWHKOH9JSC*mjXansWsKY7PxXG=daAvUqv>?(rb1Z}IoU%hnRqY2ZB>g1!O%+Z-y`%9;Q0OvcubTS?~X^_)P0nG4mW#n5A#MU*PsTetE{H{Y2p-Jgo;FXE=rWmepBGDua8-5L`^iLwsnO-$18Ry0NzSpK4vLyu zsF~HNQdcXI9z|4fUrhTk`gF1Jqj#SP>yNWUJ*9XX2@{_ECDFVHP_HWV`BwQ#6Z>T8 zmgS8xa>U?OR*_s;JARgcL0*abe3aCGSjY=k$Pqk3?+r<=tTE6X_>fzYrm1uGcTr&EuD3jQV$fM;py(Pr4>#6>|kl z*SyCx_9-}&Eyge!uqsVbMRy`7LF}0UzUb-Su97}X7hdn|Xl{j)Cs|>9F7aR$OK3PD zwVs7XdqlnzDHH#LfCHRhCta_}I{A@P$97k?aTD1t=>|U!vaq@3@B|Le6~j67j6HM_WDteS=TXEf)JXQ`g*ZoUshd zz~9}S-kdt0>YpRQ$)*1(`e^pbu|S|NO&TJ}e1(mTgATQKgFafWPAuG%7seuz0O|`@ z+3sTVN_;`l+syxD0W5E%+}Gm{o5|-p1laAA4Psuv{ic9oo5s9#wL@q<0jmEbi$=;= z>dEw2(%MFi?!?=*#nf3LqZ1W%o*{DxB@|WcL)!VYId&uHj51bd8?%3@Wpd_Yp zoR)xOqc9OoL&-&nrRVSWkn-UIhhco2Al;lu3}jFpdI#mvH7ZH?P?R#B!Wm2+g6&3RiNwD`jqS=D(=fZic44J|A`WWGrSow?b18S%~`(nQX$5!eXhU z;6nQE8xm|vP&%)cuGjHeUGsgVZAJUNq18QulKVIfbiwxo zAkFi#i#BM{9;VSrf1v~}<7n=Pk~ms)7$w#Qi1J#Ujj8tMJ(rn zRqSzz7d!RN)N^w1J0wP?bQ$%3Fr=`vpLPLtLk!fER z$&=^bvyc`}Gq*J78rGHvcfVa9$e#W|yx9fXLH@mjY>Aq15C@nx?rT?|Lht2H#)`;6 zNGB1d#g?5aV%DsJcKpuyWqJnV({`)H$+a)r-i?$X_{6k}7ACYlpClVhAkGStFWjXq z(bMyBSeqpO*l5J6baE;b<_Zh}(g36e_M?zQ-X)DMftRE(lsb3l`d z)uSsmf%he+R$oBDLO{z<-$k?=?$>~xgVwujpk`hJ9Osy6<-yY3%qH3cbBNLppDxZC zz7(%gk1eVzZU8lnqxhKaQf{Fy_td%3r1g*(m61OMnIjcX=c!){?M-oDckz^92~s2C zC4eUHxT>U!mC3k&_A!7S4n?*Q*I<|Ve=eBbSMC;|z9nlGc$4CryEnYS)jh;iU+wSk z?2XX_Us}hfJqJ18T*r1gAhQro#$`b=-fd$6@ zD0FCne5#J;e=Ywwwh*aE(5R(Az=_H&lMW~DV8%Au4j;=@;dpdLEZId8b@tyX$9UBZ zCe66?E&j9K5Oz1kTd&RI^;;5-XZy$eD*(p?gWk2{$uM`>|rR5U+m#cs`sdj+yQBU zhr2H~G^~$;!V~v4y1si3lXkvCeaT)qiS^`jYxJA6{jsJ$4D`PgW2hJRqKET8WC;GFwK32cF=b-Qcucj6M!E-Ohy0G&H1easlJyHP*_y=HE z*VLQh`1Wd^ypRpQ{GX}vN8X`D{vV3}Q+4nE^7-|s{|{GS%w$<`8i5Jn&1h{qbp!3O zHwD@aS&zeFEwiOVi$^5Rdqza!Rwq%u9EgB*It6MA+ren%&No;iYZm?-7JfL49W9WP zF?H8oBiT`fQS-B2t=&OoZK2HE-;1V`&AG9m!%amE8h!4B>`!zX6C^JH*^YoSqFam~ zYy5BY#lYXGY6xKN>2+5{H`EzAKLatlCVb4n=ohg?>;0> zDHchoSw<4vVA%SBV)6@yb@(1G!w&}~-Ak;M}1hGEvPPi^5*P%8u*fTlpbd{ug*l^U4o5_Q?doq+Qa)PcSrj=iQ{qQPD(IF?n8mKxin3oiW>LMycFX6C8Ft zt8=JqVBNZ>X=O#foDxO=vR4AXRpD=@j-yWS~@I@mUP-v0dV+m(l+uNU*L55oB|LfWBImYfWMlDZ@5&+Tq@s^CAL zm^2>fC4HZ@f=bgY2;X}OzJO;g^?5LPuZ6M^PdU}LwOcFb>F^C z7V2yyt4HK~nRu}{D-x>7{Bl9ja{|zMx115^Hp!7~0@%^}c*W}Nij)0QkP)R!)cQ5c z*`AcdEY&9-h^&r}l|5i};or!|hnp%&M8#<$l8=x`NAZP>fu8}Ub%nDXTUqzXiRr+8 z|8v@x#w<;6p<`g9!Q~IzLa_Xnj*C!V$FVZx{JH`dRaO7K55Nw zzw0%!!(9ETwj~zhBE7SwJcS&I`%5f>kYvE7clgQ@;HEQPD35Zj%4w#9jXH2vlW6O3 zf}P~3)tYwxb308pC(T@lv<*1Gs%Vxk;CbLSpU3GZx(+XpReX#_Xh1-O9QLq4uX1Js zK1J;$Jh^N_*4_GYyuK}3PIL|D^dAQ>27MsIk(=;r1CN`8S39>LWVpYP-|<|4+}-<$ z=Whe=S505K!=hYK#_XF83wgB)gh?_KzxLHNXf~0j7gC0uN`Ma5B#+oLy@q($9+&&B z&MKUoHnlmejMQtomYH~}87eidFHavdy{`NGMt+_Q|CwV~qQu+~Z8^izEmRy7OV3il z`95;lM_4nnc@M(;JlEWkOMe&BB3#rpR(v?ps`E=)?_DEn5`dAn!f0GL}(J`*>ew@HEqm|6pBZLzT| zUP`!Lb>J*EP{Ixj8mZ{@wU?N9DW zC(ALOe%Nf`qNV5pm<3aiT{V8+qz$1s)>jP7;0N5xr%oBHZK~tz{3}(2fNyI%Rdm`5 z&lVEMg|Ucyma*ip#V;BBnbU=~S=%OrA>$dP_zRzto**AD-$;+r8S%K3aWp8bHP(Of))BkbOhg zVsd(M>*|4b&Qa1y0m2)a9gjrcL6E$2c59$J|{(R3Zh}?X`Ckgf{hZ`*1zyq8KgLYfI`M6y)fYRyZohYwv)VEn{jx zmhrR%m3xKzD?hFn`SxD$-ln?I!NZP-Y+$g<2;>TmYA4`oU)tE*L zdLOcWQZ^4&pFM!VIpigvS8QL+O1|Wc6dD{7ArO^%pUlblhBbv5WW%;!kAoMu=3*S( z=k_|Ue#Y)YKEi{0Npe`l<=56EmM?o=jK9WT1r8=}vu9?SevmDiH}AH{{78@J_gqBn z`0i?m(%oi|i7E7{d+*wky?|FU_9+~TxrmOYn1HDOA?MBHQbRE}TKG>u!1_wvQ-&0} zV2+u`B;a`)gnR}KSYOBL4f^Wd-+I6$fxI~LvjLL%?Zvs})m{eUeN|FFUtbe}H#2i1 zn|sLTsm$k1D}+C7cX4sM^l$s8OUjYL@U>BWK}RielFeSZ?#R}Zc43viv3mkl88Tr| z_mG15nG7_fc?AgivVYwBadq^EUZT@8)Ky|FXwacLVp)O8W_b;Mc*stINiq2ECO=a$ zcT#6wMWuZ?Kc?In@X{R$T=Y%kKro-3#pI~lU!As^7Ygd8@u}+K9ak#K)(-Ki>y;4; zV*LB6o`>l3eD~><+UJNWzUd5hb(Sx2VK})f1)Clkm-N!+xw%v+j&>XTio=g;lt?b; zqG~rOE`cM0(lhAN!}t+hHv=HGvEC-FNG8Q|5Cut0t~_@d(Q;N7aLh2A#;z5``sL^3 z=uAww4;42rD^y?a1URWIVnn-1;MEb1*7|>djtQRzJUH0KHJmk^rfY}DZAlir{9cVZ zbodl1fdg}Myie`gJs>r>8Zoj{fo z31ku0At`yj-jRGB(00XtTQDnoVwxIw^M%Ts=ylc%&$j>O1iiR;JN3AQfn<1Yge@^k zH;cJ51up)@>Stl$cSP@{arrpcSzQEFB{#Tz&Tjcd&Zkz*C5d) zQ6;@hr$ClXGB0Nnl`R=_I#6|d*vhf7|8>&h8rflVy;Op2KMwz6o4u7rTFcyN z97>*oj;QY70$~pOkuFwQpK>4QP8A92W|9IO54Bbjijq?5uGaNdnZD1BxSTqvhoy&p z;M(|-U&WoQuKI^;x8q;;Gc8{DdcvCD<%BU>Wnlfm(`Z`P0=iAjb>cnfGA-Ppe8p}& zZhb5B+iW=P4`kRTTJ&$4JVo)iaZqcldiLP1zHE*IN1|{G)aHKZ~B2NN~n-F2JK^mTup zTc8f2P{)gowtbUWDjEwRRH8f=Mmg z2eF@sv23NkSZ;O&H2<%ohd{7$hNbd@v#2hyjIP7a6ZlUBUU*fWzsydC%oj5*h2rL8 z`uSz7(&}qAnWzZ=%|t%g7~9Stx}vpDTye~#c__>vq^T|3+TB71oI}_v_DP?g`QxAR z#$%LWvMeUDXEwjMa&n8O>Sq6Xy*6Av7q5EhdZ)e==u-2prCB)q5A*4kp?##ZpWESqc>3?X^fm1BSgsF15Sz&|7udDD(JRv^4?PwuPD21<~phMpA&s*grDOTmWP7R zi4s;dmYsQf8ZLGwJNP7PuVS%sb?cu2ubV<=%Q`wM*cx++CRjPQSRV8>^T$Qc3W}C{ zQ9YG0IDdsWQTlP>%PCO6m8uO=St+P@MF^=cyZF)FO+)S+hd&TE@(55IR;QfaGXh6DT?xcM_A;I_u2-!Th zcuo=4f@31p4kq}7>qLIJQxR-LFDcYbB!E0meF>9yyZe@o6cvH=EL$wL0?jbN4;Q_o;d9xDE=W0DZB&nqK8= zZc=vHC2H$4(hY=X2egx&VHcU&xmIw)e+-0 z%CJREX7?j^;(rqFA9*?&yB-+&9C!v+D*auYax*}SV~NI{f-bf3kjM=_fCDX$MIvqeX?~;|q1P23&lKAvib zR?9v#uO>NXSkb@ox>Qi#Eaq#>cYx&*_na?BHeXKE3+n7L%$py|1BqA1fv$4REU*%+ zi>OJ8Ip~g|!ZWk$U{=p#DDf9%vBq}l!msuF^7CIvi%!2_-oO~6SU($?XrCg3nJq#s zV!J3gD2{y7Z_A@gNH{&OlT!6y+sry|sK1v+SvFZ~JB*8L^(kRRDyc3M0Q#%t#*bt5%t^WrG_(JU z#4wxL6d}uZaiDAJ4Z0`R^F0O63bH3|51>AFv5?XSU8Igz@hs&5 z2goM(siD`<3Z9^pJuq&vy;VH!2Up{oe-|6#`OR@5mIO$dEOn6pl8vL#w49;cSS?uD z75leU6ZM_Me!HvdLxmX}p1quXDE~?QJA(|MJs+H=A{j;iL2+mXogH3wwMp2{o%r#! z6~a<)geQZyxhG4v9WIWPPP^Kx3Frmr_5&}l9-E0*ysPg>U7hbrO5>|Pcd#+)>*_zF zj$$71^ZyUu{{I7@J1@Npl2CQ}qWsMb;HUEPQTNHdmv8!zl-bmS+?0!4ci0T)pLam=HBJhzQEB}#~5WD}-{95LI21I%1$nn{nFIFP0i7SjP^Cv7kF+zvA4d(*3fLFo@jU5(@5 zH#@#};^PkIC^rYC4#bwk37gcENHZZJ_|-PRm(FbvxjMBqd6HoMhMt-|)8mL6or8gp zxV;M26bAkQeBO#x>C6r^cr;lPBImKr?1nEU2&N4)>jSHMQjt0dU10WLOX(@l8Byk= z@?P*gcka2=0HvDER6oM)88BLj#YMCmOnHhTu|P;@?5+XFgoe@MYin&>{eYOSR#p_j zu1e`^elGm!CcE`k6^7FS!(LUzrmtActQ~r!CayM;^@hp|>JGfBG6+BF>d|A>Y$9gW3=U9{aYyO zk5*Kl61t}fL=!n(q)iRBLp7HC^HpJWhUBXLSRwn7o=T$W$9#0LvojC#{OVqgp#Hw` zbS1H{3bDFXY_lQ*47_j4ajRbVR;EVB^H0x-s?iqz0QRSmTo{9Uv1#8Z{GZ|gjLKrG z!+e&u7R|z3@q@l;&i??$W*z=DT)~D#B62G?T$SD*H+TAMBAvbjtKLaf(nONghwEWs zY3s(`C^aKBX8D3I8Q1%m@=A@FCdYbYlG67)Qr;`Ryc^Y_?Xjlo`X)a53unz2bLvJ1 z1%=GQ+R@eYce?W4D{^dS$g3wMThLNUN|d{V6NGbj7QZ_H=NWX>IR%7#91LLKq`2}O z^GCNk;())J4~dmQCZmfZKa=ge@Za2ruN=lE##bkPZ?>#@6ciK;pDfn$+f7z%gv>7S zWu>^#a5E~&$odkwNxvwW)ZMIhl!Cf|C2WAs0H2E&FaKkbYte)cN}+|cpRzovLkD{d z+SAa2}uhOeqD|q*M zAl%dlHFxEon(5wh2t6*oR?W>M0nL?w9uR?mx!3^N^_D^w&pT*pw&wL!RLE)k=wiGydRwyR;$Z`ephRui?sBz*v%_dr5&tcafLl^>9~x zjKm^pw+lGj1WsxT6gxR2D*KDh8@_#b-}BtFzMnqLCRE>s`^IK!4!0|W>94=uuGgn} zpM|BJBh>I(Qf*;p_xz_VGfa)~U+~tRTqi;_SSa%$FKKTDnHLF9T*G zHY!Sl=1@@y&tMYj90qq%?0A2{RqRxbm%a~8_fAOtni1ri&e_=Bv26VZC?kb3M3n2# zJ1TBbFOM7o^4^J-ZhA6=wgY=7b0OU#w?Arm728w1yPl=-vKLNIxdnrBhErA2Y@dwk zdi?G9EBxpcmK_=WgBaH-ieE+ZVUJguf3=X8k4O}IH7+Qfa@92HT}>tUMVEGmPQIoq z7MsD}^J3}Uu;2LGr|Um;O@iV^inUmx+Lv`mn%+~!CcYIs;H_3+l`p&-b3d|pGLCDC zHZ7Z>*;Vp(&E{GT`wur$wv+WEpB=)d z{@S#Nr6BsX{WQ6Hn?Y!vt5O|`U?nazsESoZD?>Bo;S?HyO)ABB8a(&IczPL#JxQ3dI8bn6pWm4I z-fpem5z?*##oaQndzBWbUyBw#PW_zdSn+PPW11spXNg-aGqkV;*d%s%^bW8HDFWN4*$ag5=C((T_ z{r-g0nmtY}=*xw7&+ZAGpy4wGh~mAqvFtpB8pQ&=-(TKk791ju9F!bhy8AB2-`+d7 zB30pYx0|nY{y8Ilw=q=*Sdc#OA39;Or)fo zJ;>kq9*UxjgbYeZP(qK1WS9fT7Z*w2{Xbr-molQpI`@1s{J;U*D?Cy>o>eN-jt+LS z7qbqg-|FQ1GvdQRcc)T=&)nC1;|4`hQq>|w$gp_yOZKo|{{Z9`;BuYRCz188SEtvc zzqT~5$@UymS>YVpZcFstO?yp8aZ$I3O=aMKeSdQlS$*D)F4J%48(9}Hf zc{o0v!=buaRO|I;PqhwyU-uC;Ye_e`j7T~OhXJ!8-OGn#n6c?4h{o(JRl+*DW<^n! z?589g-qgRS|9CxwYF>_WKb3;pLjtC5BB}TFLc_45lYXN2sCF)7MT+u31|1N2fxiWQ=JbRQp_d@$ zFuN({wPfw+F*Z?&BUDFAz7QhI$(KTxOOgKoN$#gwz6Qs`o6a@qu%eU9PcHPbCN8pb zI1m{y#6kBM|4nf7i$%yp<(it)41aX zHBfpAfW*dKps9-;&A#gqGEV&Qb*0{I#C3VEqL2=*gq(eut zz~zTzSoHYAaO{(p4X!_~33*d4bE0k|gyaTg&t4I?yV6R#eCBc2MS5~&OS7)BIr^(2 zsGQK8={MCW5C#2pUq5Q*k+0~5iz1FlN7x4;PF7#bdS0xO9>o1kdS*36B2#w2#juZo zj_nc`0zT&t1$f{H#uUP{te3aA9E=q@rzUvGcBD-5!Nmpr9Lf>YMbZ8(2Wrb#ngA73 zR=KNTP&4S{iA;m~=siITUhS8jw2pJUY5Xc~d_1{NkO15z0Fmq$d;CXrN80#~<5ov7 ze^RKJu2WW^O*4)Xwc80H^V#-~TW9G61h%)G7tzogtXl76$)eWtYG$q`HU_3M*!d&7 zq(9zXI{3Gqg%wlE4}jEEr76{$HG1s5H;{u+|6;nlK{!GZkgTmMG4S9uh$(3w&UJD>t>L+s@iV$6zF}k2F?D?=N#0B0Cd(-t^xWw9J-zZ_r|c%$ z!2;J-%6BmYvH|5nI1eEb7m<`u&>V+8{=nMiZ+9jsoX-ckkGc(!IBo$0S=RBdKAW}D z#geTa1k_zrsvj`~MOcL>F<1&qsoa7q_B<^tbi9uvWuJLm0sBu<%;TMmCYq}H6Aotv z?CMH~z<%$&-%H+jtNfb8l|!}X4fENOnmb&Dd(5wnB1SAIT25Ug$(sp43lL<5)obdQ zH$&wBQ+-${`53Z+;7~U_O2aEl_Lo*40J|7W0g9icWD^l_6_PtR6gGnBMxV~-;g!b^ z2z`Z{e&e?O#DyzAsr;hI@`PGr+oJdY~+1$vC4dv1=s&fGlU zyA|i{QK&rmD!aTkia}7{64=Wq%<073#d$bq2_@6gqn+nWBM%1HpWjopV{1QU{C*GU z+fJeqhZyk!NWc;t^GUV&60dq9y~&<^Pu*I=uu0{fmvQl>M$+z+yN}Y<1ydi@C?*f} zVI&o#{9PRjJ-up|4W!r~%zbqf%Xg^ZuA016<3<~+EzS}{$zDxGtZG#FJRr?Xsdl98 z*gqLz1aP4N{-R`FNA2-9j2s#|N_O6oQQ5&83_Lj7`;~`KrouiweD(@JzAU}&kXCND zRU|&Wy8q0z=-Pbc{^S<+&MMl6vO(cB_b8z(q4I=`5TaDb&KnCrpF!nR>N8N}VKo=r zn-u{0IXV4gcx=E>chdA`?+zg%Yt%!zDD`or#_v;o{~9VR$m*a|8PbWM9+ciVF`Ty= z+j2|~Wve{m5fKl@2yumBFJ}U1xYAVi7y#aqL>+R9`a9$wU|1X@f7?Auj}y_QG`G{h7HRH!)JBeHb#3fuG6&FbXW+4s$s)kdzSJ{TI~ z4*Ac|qAC(@5-d%z68Jv66Zx0+n1RMF)hBru&l94&2jt|X+Q(PQEwZ}}S6_76cq1bONGpyr^2 zz)N|-R8|HxDaCuM@&rHEPD9^5r=Bz%Q)a#e(!)9HwT{jDc0>7|`Yil|t(wu4ZM!C-y(3GC6+I6mm(4?k} zm0N7o@RS=Y*(qe~Jzg7LuxMe^Nr#3~2sX&|tfod!a_-4WELA)WjRTW~-JB3jpC0Ir zAy?v-SKePF^d?Pc<@gW2vnDfErCpMPe_1+N# zCff|F>Gaci(vYkRlxP8lp)caoiV+D;%QTBrcT>KZq`3Gjx+n_yo?CJfAgR&P`Fd~ZHY|_{}+gJ*tnnV`u?f0);$?Nkfz#aUbyCWmF zH|;){|GnS+-ix{CjI?)ld|3D_GssBIggs$ZgpH4^V~6poU#J@!ha1-rC{GXro&G>D$JZ z+nm$um>a%_+c8D3)o5WL0Cnbf#g!K5J4*9>fj7ZSZ+!)U#McnR;*)TE_Om#oCP0k3Ors7713sq4DHSlWcNmRn{wnWTr^==aVGGp^_ED*`xNaaeR#EQo;Am6#aka(0 zP-J{qD8(8B9=}uI5#Jx@wr>?50gGfI*9F>-=B`l}rgIB-zEsYygQC-n_S{0y5F7~m z?%C*6uSuRjlbjpF;sfBE9TV8GE{Os;v!oeqoHm!-%ANux@wgz3q|LW#Z3-iaBURRD?pQi(JAHU3^A zU)e{o@GNJWjm)hjY3G?5F>kxR2Of=^R#yY2WuyzPyFsm;yZ=2V>W@78Pu%mE@8)XM zT{wpR z-;>{ywMc?A@=y;w|Z zI8D21IvEpgeAdOhiH6JcGxSMc41W&wd%oU9NL4z;+3#RJXvRDq?$a**X)KVF-M#-s z6V6=@e_zWwG&p5-&;_ij{s(|;9uA}DLqKRL51FgtY}jvy)DsntmyU?pKVj#Of6JX&G=pBRt2h*IDbg+ufK<)a{sV;UL2OF9Qrj6t zvvcSFnUSDqc0+xN7MZFJO;cap(&M`_d>WG|NVDGQO%5*< z-A+A=!0pNElkPS1R^Wam0HY$rM9A+>b0-ozr#DEdd7U?xC()LS5OoxMx7~O)v$=w) zGg)t}I%j9=&rs!%8_3MiOpTd`tMIMPmXZreh^<+y!9d+<-*d3j2Aw63p#uQU?P$KD z9~L*Fm*dYlW@7j`MP$CLdMlb{i-J7VS^j4K5Q-cO`gCyD!7sq^vB(P%DNZi3CYh2d zly(z9u@~DFt7dibR6J?HP%0$hEsp{x$^{|XWsw<|n)5g6$}fdxZvS1Opg{r`jey>B zF;)A5<;;1QjWFGpAA3JUQ`p zf=SA|&mXS)s)rXejt961Xy0Gcud-0oQHE$?Ezz+3-H3LMNZ*K07kz9LnPnwL;dK)G zB)|=eh!_FpA~~6tIaGQp&!eC;Io`<=4#x5`QlG5e6qG(LVJ)S61P!G}=-rByn@iqV zC3{tHbc)7>OO2I1kN(rVr*PDXj0+*44!W84-d4h~3+9p%N)ifnx=Gww{Kl^N5XFhy zbr#r*neI#euY*9^GH#xCTZDy>@;7ZqDw!GAV%k>?` zVMF!a_`9BWmIO{Z3}pRp^8R!B6OkDi2Kxs|E@|b18%K+w%teYq?M`!MZmHNK;34Y* z!^ZBsfaoiSfqiH`@6138ccUWQEv##x`9cZ26E-W;ZMa`4e%EUH^8O~pa4u2g=GsX8oOS)Wh<^_^Nh5yRPMj*vvBxMTTBBRg3Gb z|K)y?RhbS2v*SqZdh$IqRABn;fW}9D=yy#f%_l>Z!McP!vWyf*z!YZBg;SKeb2;&L zK9ovzVMSfsUHk!2e@rEB?>g-I>2#a#X*a9;re0s>Z{?pZ2?(;bsJz_9EXlFnAj`o< zKQ8aSBJJ|dTGqtS`x7)HDI_n~{X$lwT1^cFi|Tn`rvcTHrXT9$eVH}k5VXi3>TTbT zwAgw~8U<+IaA_R;b~w(PHV9}?tcLXwaw-j>(17)s*fYE#qeME<$EZgtlu?$S8^z6d zNVN8IFUbAbOYy!~UPApBARv<`a8};BcS0Yk>d*{F7QB6f|CC)W3i|f7mC$h-D*Uog zJ32%dkR`8G&5#{zM6KjPWtEczl@5(e^zCD%ahOAfS{RnnL zi#!%S(UE?X==M9Hh!R)2W}GC5`ihTv-no1JpceC^iZWt9C< zKOde7NoYycXXE3+a3DXy0Q!Xq5;fU;JpqnREXI~A8%zNo;CyNrnxe#_;P>*K6P7#g z6z0lYH@O%xLVIg;^GKFG*N19D>~WAoORhhZmbU)8VkmhJHuB>_`gei%YB|q=^)}*c z&s>J8eyqAb{El$23`yZ>ERft#pdvj#P~-HsC#B|mZLFxYBt$|dm{BF8a}5o!bw;KL zavBwK?`RT|ltdUSAI9jdZ$WWkoj-uFE5C0C zRF^gqFvk~y^%72nff!0*3flgjBj^B5P!5QXWixqpY-vdExZQFuxa8CWflE<*DU09z&7m zyakf5iJw&o{UJ5wYN(tn41N-B(&;gIYUpM~ZV|g^uy){*Qr&L-7H`=mhLArT84qwm z65p;xYAWfGV^VDnk<9AUH8=zfoZw3J{)_h*h7V;CejxcUMoOwirwq7M0|=3oj_CYw zYhOgi9jDci6vEqiG>4c!GprSNC-=x}OV`noip=tn*MZ@eBafLVFXLIV$CmMw?~a$x zapd{E{nNGe7xa=o->Mj(qo0wc3{+O&7uBTf{lgX6H^0loAKU@mAPM3qi!-KCylrHA zqty`p=p%|_;OU$d00=^|Cmp-5PJej*_x~4g_^*Hx{~yoUci8+I=)ZV#J3VIEXgMa3 zWU;HPbIN48!^5_sE|{CU4Q`K6Q0x+lJNIVETQbk1-ipi&;kNlcj*?$0FD^Ox{Sxl4)ivf7-Cb|85&Sl|{ zPgfc)Wk|&vwbhm0SCm%b!BDT%SS`1oz14_SLel+%$|i@DpqZ; zTN?CmHv>EPzlK^i#?m}4RiwBVRSe|Q37^K@&4*9OT*5z!G4*atGG#OI!JALn7>MW=n52Q=`^pc#SzGP)i6v+ot7ry;w_I= ztoJz_tDyTkrYW$*X(RIVLx7#n9qs{>I^dq-&PbTDFm3_2zL)yInr8QV^ief$U z5X$i!`MW`}_%rg)jh|1K|!6$pnhb8C<<81gbVUWl=G5A+akg#^|t|BDPr#3VK?!x+(_bdbhh zYDVejrPCt23=LSqn{Klh;tf~4?!TLg;WG22_p^Hd=mL|*Zv5u>6EI`y`t$^4cKwn- z?h?&s$bN8bvxJ5~$zo>k7@7>DfNaOJ{HE;WOsE&dY%Ifg)*06({5~EqQN}Ty7fFg4 zVhfpr6-%bZyS|-Pp%O5p8*Z>!bh{ei&O{bU+tE7+5X@M^PsUk0u+vM{?J1Op;bY!4 zC8!1y7w9f^0|sC!+Pq%yu|^|LhPQ3zP;d0P8^MD(nUoe-9XGn&j!8>t*95Vt$&p3r z4NDStqkryMNLCk9at5n>hPv^3W(uaMfDrLl)ou6Oh4K&cTR|(Egmm|iCtvRhH#GxD zN;7#%R3APIn)+7$673x?z1XTywJl+=0OT8PN$eW44eGXq3lm@+FqlG}^AyK&elq+$ z9v^hOXF0T8QxDH&QDu#6F9wE}oS)>f|6rS^U!KgN8hu+1TcJ3`=cWC_%89yOw{~Tp(eD67YX{4&Go*h-Hg;4z>W`L% z!p$-GSl=(s5$?ou4A;}NjPV#346u3RAkn| zg?_Lb8MgyU06dA)dUikzBL60)5b>T1U#*-aj??VU0s=Zhu5W>AyRjaf$>ns;Bsn^$ zIjDWrKhs>@0dEGY5ULPJ)8$(G8wWIhn3=tyA6kiW>|2-avGo9@4~IbA2oif1dIVL) z@1V@G(jx1J=O97pCI8f1AYRvWL$U9E9|{Wc;Dvc^3@VWGZdQoEWxI_k<`P+nqJBEd zVbnh4-ZJiBr;pe$4uWHxHSQLjOAL!jU*7#>VgiEv`A3z6Fm^!GR8$(^O`T;Q1P2|R z?}S{}P;j7YqC~-9ic(q(sWf~C^l#)*wYu}q?_ulcUpzuWPi+Rc+xCa~P;6HDSwFl^ zwE4B4xb*E~zWMq1`Th3-rfHl>XU;oO!@iJ$+ z5$c=Wa()Y7mi6~f>&0zaUfjyrUiu$B`-riIE||;tiCz_l&C)De4}P9mYVK zv6J0R&!Ew%H!t*O)=)dAVU1>u>rS>_%a@HAHl?3~%z)p;)12gg&zS{hi}| zG4b?Wl1h;V9gMNeO`P@qhp^;z7GDd zb~Yw{fGl5uTV0<=C-#q?EAm!MLeEAPzWjBrvsu|QqN;u2bqs!~XT`qp@AtIElb0&p z+t19{8m`%}hp2ORFm)~udS49gfX;jCQ5q*gR1zYzJPU@%-r>jU>)whLzE7N6i_%1s zU_aMn$%@hu<{PHoBUT+Fc4w;}^}@PLyu>CyI2kmpc5GFF4rOjD*HF5OOMeP=>))?B zg^2}U37r{h&}U@y)oGXhF`hblc2C!-?P@zGmxE0V8I~*=y-Af?^wQG(chWQySG*we z<8-ArBWJ{?3_28EiCOz+A7c(>f|6FTH^@I}fg73WGbuF-Jnx@Zxt`)a%B`sfVzeW` zi^mqsYvbAX;^vN7^G3)kBfl`U^06v1;uA=hFrLLw_1-rZae#|M*;k?2c~1D>{Jn-jU&u zfK_SlbI(X!Nm2QIeiCM@MSo~G@lQ~C#QV=-&UkTg=V%bOs8dW>2)!92fNtT_9IZaz zycphLW8{mC!1M&qs%g&t<=p=s8|;kG zM2`_RX7B;Cp2eBcv<}Fwa2^0e&n|52{aqD}j~0^q+&~HvYX;O~WN=)c`Lh;`;egLf z`|RZrwfW+a8n3mQ`Na(;-qxebie|4f<9)6)vow*a`$6!V_{$I?Wgu^;6RsHHv_d^m zRXcK8{j{?MUffGY-bgqF7uPHjmUu1vI zEze7lI=v6DhF5>C!J*_AD7@S6Gc>ccM@JtFiit%@-U>qxGZi!vG4@y76La){*;Grk zKXy=&Xh5mI`@GBD!r8~nPk$c7z%4Z)9o~G(e`S$#@-(IP#Z8-iE~{Tn&K)Ied3uI! zG@M*tA}&B)*XL_nH*~qAR|aoosYi7;C8`T`{=_MItqTHScA_E=0S7YVYrS_HoXnxr zzQTEiyfOWN_S$qvCug;L_rn`v-6%Lr8Asm%X^oZ5IQ%}Qo8azwvX>Sxy2byl_uwwe zJpcD)cl(k0Qr;(((SeGWgC|ac3S=0_uJ;0>4duzRYr@rb0@)qVM9uotx7+y)fwaFS z3PiporqG5Z_SQ}mrwX#*Mg4(3^P@>o>({^5QoeduWgA!P08gcy;NM=L494JnAnd_Xc9toGpSGDX*au~kta16cD`ft5XJ)=zINE#Y$58yS7gOG$t%bOfGsqk zIyN*w%0_1HfR?0tMJvYUzmQmD`ZXE!uwvO7gEtW7aRi_dOI8XK9q>GX^nITan#`*t zFP6fH1bU-qca3UoU-Z>ol2;^*rnF4&3ddrv>hHUzq_leBJ22N4iRlEU&-w;4*RN%c z+y&age4y?6wd=X6pV2L&@oPjkuDTRpkwX5q^#)L+{P)K|Zq^Gu^1Ku9@JJ+axCuyG z|4$VW4Gh7f|98pj|EuF){tql$c88t*5Qjhg;ngnGZV)KhUoCw}GA;r+@#vWRZL?VK z5&NDmfJj@`nC?8O42Q<05%Qj|0KnkcZohOt*$Ux3Z=H&+wU-{1y+SyFo8SbDTWH!J z`DA|~vtK!9--|YSVS9sAy&dAw1%}0|VQA*c3;U!Og5!d&n!q`KyA7{m&1kWNSTE@A zrp=M3;3qAy2D&WS4QEm#IKp{+6M8H$cKJ$ftl6&lryj|Mi`C}o&E!wez%p92@eGF- zP+YsMXx7Jg&RDxqBgZvD$pUhH_1pD|BCJ+y2}@nBSf0%Qqy#=3Ly^EloU$IRHf z|NcV@tMB#1i!((f56ToisofJawklj$x^#W6fT5<_^7ydx*1&er%WB8E`Kaf6wy#v`)C+;h7LgSO+$~cw` zD>r2??z6TwBRI$=~PmK*7gfsb0^Bp?AaWP zCwm^6EZWKp!^DS|kEU=FWILM#hZ&9^kO`2ZNhP+Yvo~Jn#|8t$#mOQrHA^gw76(9 z;YLimnzp0F=&we#Ir&$m68^Am!$=@~Res6wPRMIIxlM8Z>!X>FuRr7tP8sZJ1%)aL zD+zU~rLa>nm#?$0Z;1{Dy6Z|A-qq|n;6aT3NUTA} zUd^!hSy4m4H;N+NF>6!Lto?8|hBlj{tShB1YOL4hwn*;2E}4)w^a&M=B6DxvEBdE! zq+-6j-*M*t^SFVF$Iq2?!G3Z#M@NaD63~Ui$@)z)N-oUA@PmnQROMM%sTJ#1jpqLM z2`7`Fc%qj=>liX#tM-C5Dz^fEz@%x-d0rBbmTow$BwQl;bE@K5UmOH~o0#IfrEZOw zxSNmqiEjB*kMO=rYJq%hPih0fS|Ri0azV?%p2ar*&~7dMtU;j%f*UiunFI*%@2Hs7 z37`B7j*R1q3fZp9)+Yz&NB>gh<;4 zvw^qkn|Gw7jllEsWYqB5YC+UbnY0?skWOWyPfqXaIh`2cE?vbMQLKbE&)UoWQfl2r z6JP1ZU)s~#ij$3-IB&xTp(bQh)-%4I@A4!2D_2@IZjNo3ZEWo=^$JDSVVlq!7P-kl z>Y);QF6>zOlNXis`>`|3uuaFs$_~3fHY?X`ZAWH2J*m9Ll!D6AT`A((bcJ_2poKD) z#W{X94%!94<5AU{jh%&E9_j!o!(b#*@72Orh>MBp>K5QV!1$gU_cDv?>$YA_qwp$o zNl9O$mMQsXW>}5a%2EnnCvJ$O#q{76e+2{4>6z7saT|;uHYyv>Tv8jiNDDhftM%#by5^HG<9UG^ zRI^w&p{iq4v@n@EmXeQ^TxZ@==wv<>T4&romA8Mb%8 zyx(=bxEjoh=k@8SgPhzEnk|iLzmQO>d~Im%QcN^_b(Pgv5(!?km=`eGZZuvx)(P57 zm^KhmT?Y{iNOlbAi37In%~#K>#NpAMGq@lg^-Bb#LGXL&_v7;|BZi9yOc)}Gp-g71 zwv%ul-Fmh`YzjH(aLTXYWLF0MOV8tXo0j?7o}>NVa@zWdzvf z^KB@84PdshdqblDYA}%4QGQ5E}UQy1`2+c>Fo84}Q;Jk!h-lwa|}ugz?S zZl4+Vt8T}{!Wgph7!H1kXK6i+!2Ty|0RO6(;@deg1f-sJH}4zd&CE6$y^ryGd-mf} zvYDNW#2(>1BZU$6Kc3!$7H=8RVM}SG0tP6l^s4wPTkdCRD*=*KwyDIl>4wNo*4ufxO*(m-p`TaY8_oEqxoK+8_C&QF^L8l5; zD~hxFz3P6zmTToRUY{v-6&yS+WSjCbCvkgajqH45AmX~h69j(B_uR+WE0?MrSXFD} zC}O(Xpjid{1X$-`7bNEU0Zj}wj_8A5M(uAOnG(e*?(()*_?+Wmfmh`Fnl*Qn*vQOZ=LS)*!%cUi zC72Yl*H{kwB!Qinue$}=0crDDFG#8J%~e6r^!6q8-+0JUV)%Lqj32J&chdPulL#vj z&VIgqO6UBwO+}@sgw`ch6FYnHC1TbW<$^Kl-=(1n`Ub98^Pl8Y9Y&cfWS7uF3{Zri zX?%ls#;wWdxKtxqg}C=kbj(8Lw0FaCJ7>8j`e~hS9V7_x)iw;V{Z}#PNCQ$F&1!EV z_+xrvX3>2siGVeVTG&|oQiCP~v;*2#uqx9oL;`j^YK&l|r~8I;PD8g8lol;9ybBHl z#mNG&`~8QEmMc4;k5w}%wb4;_t4hQs1v7?0PbA|gj{YFmM^=NdDa-kjAmZIIgLl@o z?5MNC8Szl#wV+ETAc7G>6oXr3L8)y6qdF?W99ec3;F=)nK=D78VYjTPK3?$ZG}h4 zmL+>fxF6qpBW@$Ck|LZOxsqhSv6s%r-ARsUF~rtWqSY^@u{)G=1NL^#r)?@)lvW=) z_*SS}RO1O(1r+Hof!zB|AzyCYLMz&`Uev5?wd~!w2>XK&a^?IQ7L&FDGDJdnK_y$* z!%dj1C-Wh$!qH(XNj}CT6~e218Hh%$QET&bx6k1KX@~En?LWxuELUb<&-M97e{6@M(O{)Ff-!O;>Zm=JAj<;MY#G zetionIeLg_D2&uM`7k!n;1K0FP>CQC0YeB8+R2zEa2Z?#m;oq|mh+>>Mtn)cSxyJHv3-r7LFAzY-1gK zvZF&Tj5Gz(x$;P*t)+o%9(T@p{O#pVch=B& zrIMABKYGlMgh=wTp2cNMkH?)zHiCjA&3r3V)~?Z<=hX(b*YRU4+_4dwJwQA6jEO)t&p zj%{r7t=|%=J#GrOarDG0u!?dY1GEYQlNTCfHX8a9Y8GAdkAuZ~zDajLQ=&yz62n{~ zH5_}cv0C@Jxjww^de(&WORJBb7>5X1WhV0b7h3M-svPO~@k}npE>IZ|lFP_%tg-Tc zI5#{UM*OT+9jJX#UQ++AtjN=|yg>62Cet|IJ0uh)7(2;+sh-O`5znIg;(YQ}5GYNkG8o~E^!>TT3w zY!Xs;%{MhTbp7&+xMc0FJ?%P)ameUy?17L|n)_y{x5Qb8^b10ocR(4>BxgvNRJC$YrMEjf7F3WsE;HzIVTBxP6-Jaa1q zM*MK*<4}IW4@1-WZcE#nHuJqB4%TSvDkp zbsf2=o6XYy3Rh8{GY!$(REEzam8!kP{%vfM@=y04aomxm>YeXAEqiXTeu zR^{W`%8!)RvjU1UM~8T}jtvhd(q3O)U{;rX4{G$q1P*PjaW*&zizHK>O}Dcn4k}!}xTrEe)y@@xV2{31hsnY?eSu|ERqTVLryq$M`QMjT zzuaCJ++Zi=o)G+Kl*}2*X{`|9WgYA`nGFsTT&c6}-q=zrA=U)w9CQ7e8zU;gfn*^|<+cefx3xCre{4o>`*71Uei%O+ zDl}6Ts&O03GmNa}Sv@v=DtvA%2hT-(Mjq!)<);~)x%WY__Q5?c_tuvo9R;B16i1I1 zBEJ8Lq~Aezn?=3T+9dD;%Y5zy+By!^U#$FQGerKlDyYeMsiRY?=h`q(>8)309mN|f zFgM!df7&BlVs%uw-?t@hvtC8;V_cFSy`qws3xX71{o+^1r89$&uaz zY^HR=0QHN)?_ex-bqADN+MFWl&rYHFktZ{8zw&cVD=q-37i*1@-QO-_zmBD!TGWn3 zN($;7mFF83msRt4wE6}|bWT08u8|8&!jD}&5sjLJ$qPZYf{XLs1jv#~MX^N1?zdBt z*p&^+y2WfGSn%)iKY(_cxQNXyp4(87A(d^y3TzD6X#y-++O7u2TqQdXeb9{Sp+`z! z$-Nb?&eo0@v6*MACnGxZe{ll6&(<9JhGQlp>d&Y|6oIs3;YxvwRrWxkY~Pn#hTyBQ z7%JjRk{MZ-a_kn^BC49SK|TASl;V(7(pZ+>T{TyK5R&={%GpfXGD_5#c@Aih&AMU@ zgwqDH-J`pWW!B-mutSy(dIExTBvpH}y%F%xZq?B(@&Z!weR8IHWaBA4! zR34}s%)+u?&OCb>Qp33-x>MTp#oWLUhA07XZLO2l(4!v zlUMr>QMpj_$qLR9rAjg?J+!PA8fsnk1qI!1+K3m?U~;^R~ryhNA)}``appP(SAfX1ukpmyIkL`dc!=cYpoR$ z2D+GLzy)@L{0YXfvu(Uxfj@-uz4QHg?aHz>t?Xy_$CW_f4-84ARrs696sry&>ClM} z3sStw|CeAwy5Wy*tMvcMjC-tH*0+LRnW5pi5OEAFBHd{?hNOb0hl#Ju+pI_}x6XS>YKqe8t7{_}|KWvk1zPQMUAVL6O~2A?sjtQ+Ryr?Ei)g8e z)}9|STJI#b$FrJ=5~DXSx2RuV5B-PX7SFc)S3J?>rNNO!deX_e-=gn+jlGlfSZY-R zddbG{?2mVE2Vb~ks7yf#CO;zA&0iaV_aLB?$Gk`P>nzvb4jwDCz2~#OF-OwOI0rku zO!4+Fxnx_J?-)cw(B^{C9%e)C*5FCU3mQ$$kTMa85ardPrP;J-$)PESVHW|cQ(;(f zu~h0TKH{Ux+VDv2O1s%)Z~1+w^X}J(%Dg@DCJs5-OczEKgxaeBr_tC)K}oBFP2w6U zG+nL?WKFnw!FGM9zfaflR(NE$t$)oqLjBRWzEafGb(-%7&V z*=)?pKZcrGX*9fqWE9w6XnH8>TY<|Vy>S6IPl!%nyl)cDFA1v99$|G=ebLKKRoAz3 zrhJ0XBl49n4)-3o4Ae1zb?(4}KPnpG>VlCP!_jD&G%!>i{y7M`!DnV&Km6;@6a z6J`_OB# zqWAm`5Sm@j+@$LkM@=(R_pHwQ0rr?WTh>P2WlF6+5tx_7C_hPA280*Jz*(m@E90F` z^Nr^s{dI!Zrz(^}zluEsPj(FJd9gsa0>pM?bhf0;(>5nRXdn|vkFVmbHcgas_*drc zd}R6yLz0b@p*U`PDBHmz&A7@wdj*dtvXffA->*(neJm^@9zbS-?N%37F9^+9@wS_l zkDfK!x=F%Npn)^^Fp0HF-?AHeu4zgU!%h$k?%-+%yN}zh>oYoKF&0q3fI*#05&oFJ z&eRl&tL$Xw?uNGvxJVS7uhRqmMhn5YM6ET8?EjdSG8S!SKmel4FZS4m#Gu9i8(0PX zS+L!5Wauiy8aMch)2W1CZx_{PCx&v;Nqvjj;U;g<1cNy-P=M?#2q82>ihx8*-m9bv zAKW4-yu|3u)cmx zr^z?aYaEI)qE>+c2j|2)lN?t_JD}pI6R{`dW-DiFcR-F*;tdIXy==u_t{HC?Pe1KH zy16%U_mjisb}ZQc1y1mPgc1DD#AOf&_8*F|v_r9F80i0*Fz;HZ`p+ql&uOCCI%k7$ z#82(+x&@?v%{T76vT#TAMinxqUI%l(DvPKT8%GuH*P06|X|8C%}v zb&-H}OkA2h_Ki*)e+SeOduxrv#I{sTK5ZpWyf=0DPUnv0JLILbJvi=Tv*zqwV&NW1 zt-Olc0X=s3wf2?V|AsYIq9r(Z6JdZHoEDNngjsu*Bjk2KirF6&#C*HWmI`=;LxPwB zEWH4mg0=e**k)Pj7&+&sxcI`IB(OWQ?13DYreLQP6`B3Ro40mAfsI;%3!(qx4goC6 zZ5bz)oWT~Z@cBP^jBsjMRAXHRFLYBN`2~<>x2QVrfb=(ZK&q#Kb3(PPQF4%rM*;AB zKB9aT$)#XlD%gZ6Zp}2dzwT2Q3DS3+| zy$7xqfuvF`+sPB8kzp)Af*%0>!e3r_0DQZmnE4Pca|dKPbV1d?=EA3IK{%)SOM(=s zA4aY$gm0AV7Vs{)oa&#W=YABT;4!N`_>CaVjvgq6R$=vTS)1e%PZ#8g#i zQIn#E*P&GViyyr-aAkfdLrE}TG=gZC*zMZ*bk1$!uD^*AVGuqS8CB;7O6jk;vxYhl zx&61E->b~_L;aM7*C4~AGV^`eJ-=!wXU{i#>n&e$leJ8E{eD^#od!^ohpj{!AOrUw z{QFklXbiNp0c=Ge->e`6b@$$A%l!2R68bTJ1NcTaSd|T!J4*FShOhi`%c8p}eyA`f z5GoYTCOg_$DGvTstL&7wUw1QYXGoc9T3x^XeWb<_)ly&5rnFgLD6yv56YQ_u`;W=j4w<9xIXcd= z68k_fcC5PLwb1m>7Z{g2Qti)2WzE%V=SQB4D}`rmyT2^nr`!elN;?LjllM4FIbXq54&;GKjCQ_|yseE&#dsbnH-i%HFggeF@|N ztRm&2c*DWI!;p?_h?DQAS(&n;!#kvQCw-{Cy1!P{7Fa&t)+)`e-ess(yw;68=Kj4T z@^(3&`PSuTHQSB9<<+E(itRnSaVYfqe-Jac%=KZOXRS%b)hEc`G&h~;=TwM+5)~iRa3hosq zjlX=P;0>;}zD;g~lgGC`qCQ!2WG}7TrSxx)pnf>+_I8s`AG>f4%NLuxThOHd+7?p& z%s=xi4KK@9_O*tbXaSs;O zKYr(|-?pOW*6x}3oHAPH7!I4M{FliiATQ*ai1QP}2u(>Vq+A!W)-M08JJA@jGH3-C zfY7$?F^^F1$pOtC#hKFa4Wd!S!(l-%Qg4BS2X;4K{pl8_&Ed$m<>oF&&x-JR|2tn; zIHyEy^z#wFJUvrx?*4KV=b~rH*@1=mO+An5Qi(W|>+fp0R^Mzd%OS=_eDcY$Zf`68 zRY^}0b~(>q409_0ka`bV`6BY!TC^V7^NcE4lOLxTz-kmG&~bPLYI)fZc^$jhKE2v| z@zZVpw#*>nRFO90ahfZd43?MJ0}+}4)ODP3wbw6N6!zERRwfavCr!Z8n?)5vz zm~8gw4GVXx?>!Dt*yj%)hLw1uu(6H%q$Mf~+%;-&X`zAcY8vwKj9E~-e~28WiBDbf z<)|&u+HV5X1aG7FL&nB;FI@3@XbGLPxsmEGp%n{b4>W`f)Lot+9=4OK_qDET%rF{L z9vLPFt0jk?n`%r?OTJ#v!AQIoxnDuP*}`;bD%E||Dx;8A1Rcoa4$X5K;HCsoFQY{9`W+ z%}Pj?O}Vu-CX6CCN(#EL6Wd|yYxlZN;{5A^Zqe~)uE@Cy1tq;XxQr9Z9Kt@W{1pAg zG-&mB5DV75>+?EUcy;PHeIFlZ`%^Pg($TTe;m6r?do?DXzy@stYP>0|k`W%heA4=$ z+nKr-fijd@>+%H^^Pgtdih}=mg$##ToHn0i5vsZCAoTp1W%o8`FE2k#yBSqRnv)Wt z*AQsYF^C9;90W|0(!rp?zd+c_Npbyf^`0j&%YsNZ&rRL&Bx(z2lQFseAD^w+sFJ5 zKT&xlTmT9nm07YNxBze*=Mqwac_oHp7d#mz;a4xIEd26g!1_f%fVAK8wg#vvF1`uQ z07r}I)$duKio5%hhu{IEiA5~Zo_~sLTtnj3y=>iW0L-Z|(b_`8DZ>~-D&<;TliI;1 zVPTqbwun;zl-og)Ubqys`}oriu?}Tew^+9^Saww*I=HE{h1T?YlJyfxKe&v?(}|=C z(9A|AdL*pu*Eg1@{js_9Q+;%G+2*x{SOCv8-=JRe&9P&=c#u=wp%|QJLPGGux2Scr zjWg))GG?Q*mS3m}(U3qUep~HA_OyKC3NQcw5~i%ETUp-Yy^yB6afC8GixOw z5h`cmwkl?N&LfOuVGpz+z)u#F30jhiJQ3l&rIoywyT%jdH**o?Cwf21?0~LKn^|_M z$aiazQ9xiF?fzmj!(X8&)s!*zUPWPy(f!duHX$g(ZiV8mdl0Ayk0&;?3Ac??PHtlV zEOA3XICNaoI)e}iFEPGQ0TuQ!8EF?*X#FAsTS&$pTMt-Vt9tm$%MW}U#B|}xuJS_{ zp7&PvjEg)N$r9H{SD8gh0xg70wj{K?H&-!8s=8U(U3e^UgQVoLCSB{BXDX`u!FcX) zGFTZP!`xk8=v*rZfVF&DzEWX!JWK*BDfrTj`C)eq2zGT=j`?GV8Pio@It9{K^cCEk zb35ebHE}C!Tr4`JlTFsw#yeTNIlEkm`Hl}{$#%lnNp?bg%jiVU>=&lEgUgB}8lj8! zS*9Caa<{l2)WRVNH##(}bKzta>II?n-Pv~XbxX9w`r0K@V;)?(i4?K*HHFiU$8( z5sAT%{~z#P|3~cMe<`LAAm&E@FK=a5XX^iVYRvyxeR=mkb5iqr(N7HE%4-+0j#Ac; z4Ag&)?d>Xb^gkp#wt{3BTf>+FIPw?8vOAQ&jXZ8~KvJ}@mvf%Pn~tBT2&#PDMfuA4 z+>=wopg{q$&iyOe7#`Nf5<|cu%{uP9DmnQzb*qhDLFu<$r7X&oM4yR325>0@DZtu;feNm0$ zwu3>A{=%28-*wqqiZxzHVfVPnthXbIPO)2gK=52@x9px-ag8rZ1j8$$3+yDHHOd^2 zh$DdINkbNe)|xIl0qFY0wO_Ru;10HWN@6S&8=1;S4t_c3E2f|+xBxbv`0 zRL_xn%WIJetEc56x?HccCg%HuGuL#N98o{^D$y~0<6k9=sI<-SzT%_R$Qx+_SOKp@ zE$>zOySa}XZbXUq>j(A495=VzawF2y_8ri72iy;rMYs5i`uo&ON*#;M$F6e%t3 z7`C0$-mX29uA&s0@rN#+EM(3N1!v}A-N#SNsxV1| zv>#{xvbXE=otF=mO@r+ws*8w2uNjLO*DAKN)|ACySCI*a;h?qq3U6izd=1$J$85uH z2vd`u>URJq&Js>WnzbZ-vBjn_hCB)xvX23+uo7sN0I;K`(NB7~3a!p_jtk)LRKTxg6+I8z`YBDL zp9QW@=NZAH3`+gO&PDEe@9_sbCc2r zh|eGagtxTWi*+HfdBny1d^c{{vV3FX?FFFOjmvs^{bnpc;mJhQTjSe>06k&~gFTf;H5_hpoCIc+0; zQ6Gs@sySEVK70r!tq3?r?T?O?ZJw`JH-GBjes7ImiA0nD<{0uPl*Fw*N1N#YT~11( z{AV=fJzTH4#29c0*?&o0|4U3w%HwE-dcP({qNMZRfU^25L!|>>Y}27G&WcGe`KMuJ z+sUE3#NY_OkL#Rd9rNHx?)hakuIF5o;-XpH#P+*6VW|Oq7aZnj&+2|oQg=ChLnyyZ zWBsA|f7^YY0~2pgWnO;$tJ=PMu@XIn+u1ku@L&H`C#rGrhyC7!>O^t*&RhKP$^P?z z!xyaoT#KE5*0a=D)G@xiY5!uAe7#ltN0D~mGT~d7e14zR|8f1!{u}FG+3Wv1*8e75 zX6~LU;3&hJDaEJvKiGew=Jn=3_Gf;~<8PRz%o33&yInG-^!a*8(DKgbaq^8(1;_sC z@i5LyuFv~wyKyEK_)(i zN5BK6U-#|#^2hP*a`D4=P3;>u+205}|A_PJx7PpU{N=B!TQ4Qc zdN5xowePoIVgG>fLE#UvBgtYb?#wHbt31vwBMck?)7mwUXS3fl;4)(_f0?r5U;bp@ zo$k9;;!KVo@SeF7@*kJa=JrWg9v`Os>jHbv?H^Hh3xdw6S~9CzmHhjl^1HA2^1SRM zeO`6u)1CEqyVV!`XGmduXZiBdUWjf%qXNiXd344V5Y9`_V~mHTRy!B9GR{`Y!64%_Tq6_XnjENz%4PCRk&gbu^k zlfW_4i)+}+H46AGE#&80%I#q9U$L%v!Bb(Uz=mj*d5f7ZZ{z>Gvaf5E;hyyM_U50C zFMJIPkEHo#>QR05+1(wtEI{%r~X+k zHqRxPKOd|5opANa<;SsmG?iuB^L_eH+x&jEOE8Sm_^Q%> zVv@bryo#UuU!Q@H$GuHi64Yw>7#?5w_#@@t) z;>s^7Y&Gvx%|B7!3rQ}P*VBL0&zz^T`TGq1?~e9yuYW$c(sWL-XPU*!3p}-!@BFKF z9d>7UERiGMEw`;fi*8N2jfe-z&mEB^Jz1n!E4-#fpnJpXdkLy!%))vu?(__$xy zKa)QXo)rG8{p|MmRlQZr`_sREcF+A;A8!a8e_d*FcWvHL&1G-1%Ye<0O-5MTBDmTp zNa8wV3?jo9r-fE+41K|{s7r%ny!7PD$^AZ;0v$NFq+2|ithI z)fEYVwcwbZ{F;BRXMXU{Sza29MYaCVGERQApSc9mVq;)<0P=ItlfITNptPs@O7+*C s&=q$nU(U+`m*6qz`LBGw-WI6KWD49+nBkPt?Eh~n7>NN7?q*;B0IK59;s5{u literal 0 HcmV?d00001 diff --git a/scr/miniprogram-2/images/forum.png b/scr/miniprogram-2/images/forum.png new file mode 100644 index 0000000000000000000000000000000000000000..4eb424969ed34dff4763919f83d4ff0a6e992147 GIT binary patch literal 2035 zcmeAS@N?(olHy`uVBq!ia0vp^RzPgR!3HF6Z`6(eQj#UE5hcO-X(i=}MX3yqDfvmM z3ZA)%>8U}fi7AzZCsS=07?>+ELn2Bde0{8v^K*7iAWdWaj57fJ{tG z$}cUkRRX#c;)UD-UthSvdBxCx0tT6WMPh-zp`L+$ZZ61QVAaJXL8%C5U{zflQdy9y zACy|0Us{w5jE^*Bm}X$u;kO8+5a=2!|DsG_q$K9J=_k zQ_~DA%u;mC%#F--O$?Gub(1WC0cdP)VQFTNY-*mGmI5;en|@<6OG|SnOEU`#M-xLs zS93=*3v*{zLkmksV@FF1Crg-K&%EN2#JuEGnBAE`yP1T{es1@X5_YEfocYKmJ?ey##Iq^&ZsxPrJ4 zfap&lHw5*8j?xDu7o_9^69T455EGsmfE;*sO3ef2p(0>rQA@w&z`(#F=;`7ZQgQ3e ztjrwVK#}A3SKpc*rFHF=C#(FD%r{D2I=LP{n?eq?FYCH>)Gvu&_v1mKBSJ!2OFXBx znXm{ZX`gEM3ca{$>9o9C85RHB|LLpguYdOS?3vjU&w19(^t@kN{Jj4C&hPVzu_dd|Cosi7ntd*NU(0LTS?BNZZ(|91k+nhS$)%;6c4VHFuG}*R{)i=qYR{Ony8M7an)5CW-t?G1C)&4d5-tnvTwlHF$jwiGr`dh^%3_kp zvb6g`K-~S`0^h}qkKc(qtzg6U^MPE(v!%XV`{P;MR(uJ6^RaGLtJ%Y^?OwYpj-FPp z`dOnRap3pCGoiM*g6oYI7l-^>{i(wKtkYe?9OEd?=>(_hjZZ6ra_h8HP^PeT9`_unKJz3hz@?rCgCF!faTtEN#uL<{5 z@n0tnM4dGXu{*E0HBwTWJL}n#K5gdTp682ACM#Q4Hn^@!oxdqtT{6~d;)6t?!v|CP3Yr;qyq2q)D5E~vvGtwjZdN9BduFz zp5}4A@OIm?C2jXqUWQ8S*KZa(YH?F`h4;p)_0H|`v$k;be(7ixei1h*?(CPKPL4&p z%l{lVR^{DuC__DT;!BG)3SUGb)<}FU+O=u<$@g=gTRv9Wb?f8z_Jox$?y8Hry~&7b z@p900ee=btM*U>sq)b7p+bb@bAKD_L|G)Qy{q3E9{rk5CM6b}j0?d_H@7Hk~FzDaC Vb?nEJumzxM*wfX|Wt~$(698}CHEjR@ literal 0 HcmV?d00001 diff --git a/scr/miniprogram-2/images/logo.jpg b/scr/miniprogram-2/images/logo.jpg new file mode 100644 index 0000000000000000000000000000000000000000..2e3b8c5cb44f3f350bd3c2e838190f5e08f0e200 GIT binary patch literal 8078 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 Ozw&Ya%f^_AWB&$*l%p*G literal 0 HcmV?d00001 diff --git a/scr/miniprogram-2/images/perfer.jpg b/scr/miniprogram-2/images/perfer.jpg new file mode 100644 index 0000000000000000000000000000000000000000..235ed66280857daffc71754d3c51f2e6914dbe90 GIT binary patch literal 7662 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 literal 0 HcmV?d00001 diff --git a/scr/miniprogram-2/images/zhuanpang.jpg b/scr/miniprogram-2/images/zhuanpang.jpg new file mode 100644 index 0000000000000000000000000000000000000000..9e87d6a4cb0e076818efd2d25f3d8770af008670 GIT binary patch literal 7410 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 N_8l;OyvI4>zW`lDKtTWi literal 0 HcmV?d00001 diff --git a/scr/miniprogram-2/jsconfig.json b/scr/miniprogram-2/jsconfig.json new file mode 100644 index 0000000..36aa1a4 --- /dev/null +++ b/scr/miniprogram-2/jsconfig.json @@ -0,0 +1,5 @@ +{ + "compilerOptions": { + "baseUrl": "." + } +} diff --git a/scr/miniprogram-2/mock.md b/scr/miniprogram-2/mock.md new file mode 100644 index 0000000..94e13e0 --- /dev/null +++ b/scr/miniprogram-2/mock.md @@ -0,0 +1,34 @@ +## 模拟与数据 + +model 用于放置模拟后端数据返回的逻辑;假若接入真实后端接口,则本文件夹可改造为数据层适配。 +services 用于请求逻辑,根据 config.useMock 配置可控制返回 mock 数据或是真实接口数据 + +### 1 模拟策略 + +1)只依靠 ID 规律进行关联 +大部分情况下推荐使用本方案,ID 为`1`的商品固定会关联 ID 为`1`的优惠券或者[ID 对 10 的模运算结果为 1](https://www.runoob.com/try/try.php?filename=tryjs_oper_mod)的优惠券(看需要 1 个还是多个了)。 + +> 为保持关系稳定,模运算统一使用`10`为除数,`ID`为被除数;即`1%10`、`2%10`。 + +2)建立额外关联关系查询 +在无法使用简单数学关系维持关系的情况下,可以采用单独提供关系数据的方式进行关联(目前也没想到什么场景是数学关系稳定不了的了,先假定有,定下规范做法)。如数据 A 与数据 B 之间需要一个关联 AB,则需要提供`A数据mock`、`B数据mock`、以及`A查B与B反查A`共 4 个 mock 源。 + +### 2 使用数据 + +使用数据源时应该在 services 文件夹中按照业务新建自己 fetch 函数导出,fetch 函数以 Promise 形式返回组合调用 model 逻辑得到的数据。 + +> 不允许直接在业务中调用、使用 model 数据。 + +## 接入真实 API 后 + +接入真实 API 后 model 文件夹逻辑可以反转层级,作为数据适配层继续为项目服务。举例说明: + +1. 在没有接入 API 时(useMock 为 true) + 1.1 业务调用 services 进行 fetch + 1.2 fetch 逻辑调用 model 文件夹中对应的数据源,构造、返回业务需要的结构 + +2. 在接入 API 后(useMock 为 false) + 2.1 业务调用 services 进行 fetch + 2.2 fetch 逻辑调用接口得到真实后端数据 + 2.3 比对 model 文件夹中数据 mock 数据结构 export 一个数据结构转换函数,输入真实后端数据,输出与 mock 数据结构一致的新数据,返回给 fetch + 2.4 fetch 函数 返回 转换后的 数据结构,业务层无需进行更改 diff --git a/scr/miniprogram-2/model/activities.js b/scr/miniprogram-2/model/activities.js new file mode 100644 index 0000000..31bc3b8 --- /dev/null +++ b/scr/miniprogram-2/model/activities.js @@ -0,0 +1,7 @@ +import { getActivity } from './activity'; + +export function getActivityList(baseID = 0, length = 10) { + return new Array(length).fill(0).map((_, idx) => getActivity(idx + baseID)); +} + +export const activityList = getActivityList(); diff --git a/scr/miniprogram-2/model/activity.js b/scr/miniprogram-2/model/activity.js new file mode 100644 index 0000000..34abb07 --- /dev/null +++ b/scr/miniprogram-2/model/activity.js @@ -0,0 +1,18 @@ +/** + * @param {string|number} key 唯一值 + */ +export function getActivity(key) { + return { + promotionId: `${key}`, + title: `满减满折回归${key}`, + description: null, + promotionCode: 'MERCHANT', + promotionSubCode: key % 2 === 0 ? 'MYJ' : 'MYG', + tag: '满减', + timeType: 1, + startTime: '1588737710000', + endTime: '1601467070000', + teasingStartTime: null, + activityLadder: [{ label: '满100元减99.9元' }], + }; +} diff --git a/scr/miniprogram-2/model/address.js b/scr/miniprogram-2/model/address.js new file mode 100644 index 0000000..c7ae8dc --- /dev/null +++ b/scr/miniprogram-2/model/address.js @@ -0,0 +1,31 @@ +/** 地址 */ +export function genAddress(id) { + return { + saasId: '88888888', + uid: `8888888820550${id}`, + authToken: null, + id: `${id}`, + addressId: `${id}`, + phone: '17612345678', + name: `测试用户${id}`, + countryName: '中国', + countryCode: 'chn', + provinceName: '甘肃省', + provinceCode: '620000', + cityName: '甘南藏族自治州', + cityCode: '623000', + districtName: '碌曲县', + districtCode: '623026', + detailAddress: `松日鼎盛大厦${id}层${id}号`, + isDefault: `${id}` === '0' ? 1 : 0, + addressTag: id === 0 ? '' : '公司', + latitude: '34.59103', + longitude: '102.48699', + storeId: null, + }; +} + +/** 地址列表 */ +export function genAddressList(len = 10) { + return new Array(len).fill(0).map((_, idx) => genAddress(idx)); +} diff --git a/scr/miniprogram-2/model/cart.js b/scr/miniprogram-2/model/cart.js new file mode 100644 index 0000000..d0ad6c5 --- /dev/null +++ b/scr/miniprogram-2/model/cart.js @@ -0,0 +1,324 @@ +import { mockIp, mockReqId } from '../utils/mock'; + +export function genCartGroupData() { + const resp = { + data: { + isNotEmpty: true, + storeGoods: [ + { + storeId: '1000', + storeName: '云Mall深圳旗舰店', + storeStatus: 1, + totalDiscountSalePrice: '9990', + promotionGoodsList: [ + { + title: '满减满折回归', + promotionCode: 'MERCHANT', + promotionSubCode: 'MYJ', + promotionId: '159174555838121985', + tagText: ['满100元减99.9元'], + promotionStatus: 3, + tag: '满减', + description: '满100元减99.9元,已减99.9元', + doorSillRemain: null, + isNeedAddOnShop: 0, + goodsPromotionList: [ + { + uid: '88888888205468', + saasId: '88888888', + storeId: '1000', + spuId: '12', + skuId: '135691622', + isSelected: 1, + thumb: + 'https://cdn-we-retail.ym.tencent.com/tsr/goods/dz-3a.png', + title: + '腾讯极光盒子4智能网络电视机顶盒6K千兆网络机顶盒4K高分辨率', + primaryImage: + 'https://cdn-we-retail.ym.tencent.com/tsr/goods/dz-3a.png', + quantity: 1, + stockStatus: true, + stockQuantity: 3, + price: '9900', + originPrice: '16900', + tagPrice: null, + titlePrefixTags: [{ text: '新品' }, { text: '火爆' }], + roomId: null, + specInfo: [ + { + specTitle: '颜色', + specValue: '经典白', + }, + { + specTitle: '类型', + specValue: '经典套装', + }, + ], + joinCartTime: '2020-06-29T07:55:40.000+0000', + available: 1, + putOnSale: 1, + etitle: null, + }, + { + uid: '88888888205468', + saasId: '88888888', + storeId: '1000', + spuId: '18', + skuId: '135681631', + isSelected: 1, + thumb: + 'https://cdn-we-retail.ym.tencent.com/tsr/goods/nz-09a.png', + title: + '白色短袖连衣裙荷叶边裙摆宽松韩版休闲纯白清爽优雅连衣裙', + primaryImage: + 'https://cdn-we-retail.ym.tencent.com/tsr/goods/nz-09a.png', + quantity: 1, + stockStatus: true, + stockQuantity: 177, + price: '29800', + originPrice: '40000', + tagPrice: null, + titlePrefixTags: null, + roomId: null, + specInfo: [ + { + specTitle: '颜色', + specValue: '米色荷叶边', + }, + { + specTitle: '尺码', + specValue: 'M', + }, + ], + joinCartTime: '2020-06-29T07:55:27.000+0000', + available: 1, + putOnSale: 1, + etitle: null, + }, + { + uid: '88888888205468', + saasId: '88888888', + storeId: '1000', + spuId: '13', + skuId: '135698362', + isSelected: 1, + thumb: + 'https://cdn-we-retail.ym.tencent.com/tsr/goods/muy-3a.png', + title: + '带帽午休毯虎年款多功能加厚加大加绒简约多功能午休毯连帽披肩', + primaryImage: + 'https://cdn-we-retail.ym.tencent.com/tsr/goods/muy-3a.png', + quantity: 13, + stockStatus: true, + stockQuantity: 9, + price: '29900', + originPrice: '0', + tagPrice: null, + titlePrefixTags: [{ text: '火爆' }], + roomId: null, + specInfo: [ + { + specTitle: '颜色', + specValue: '浅灰色', + }, + { + specTitle: '尺码', + specValue: 'M', + }, + ], + joinCartTime: '2020-06-29T07:54:43.000+0000', + available: 1, + putOnSale: 1, + etitle: null, + }, + { + uid: '88888888205468', + saasId: '88888888', + storeId: '1000', + spuId: '7', + skuId: '135681625', + isSelected: 1, + thumb: + 'https://cdn-we-retail.ym.tencent.com/tsr/goods/gh-2b.png', + title: + '不锈钢刀叉勺套装家用西餐餐具ins简约耐用不锈钢金色银色可选', + primaryImage: + 'https://cdn-we-retail.ym.tencent.com/tsr/goods/gh-2b.png', + quantity: 1, + stockStatus: true, + stockQuantity: 0, + price: '29900', + originPrice: '29900', + tagPrice: null, + titlePrefixTags: null, + roomId: null, + specInfo: [ + { + specTitle: '颜色', + specValue: '奶黄色', + }, + { + specTitle: '数量', + specValue: '六件套', + }, + ], + joinCartTime: '2020-06-29T07:55:00.000+0000', + available: 1, + putOnSale: 1, + etitle: null, + }, + ], + lastJoinTime: '2020-06-29T07:55:40.000+0000', + }, + { + title: null, + promotionCode: 'EMPTY_PROMOTION', + promotionSubCode: null, + promotionId: null, + tagText: null, + promotionStatus: null, + tag: null, + description: null, + doorSillRemain: null, + isNeedAddOnShop: 0, + goodsPromotionList: [ + { + uid: '88888888205468', + saasId: '88888888', + storeId: '1000', + spuId: '11', + skuId: '135691629', + isSelected: 0, + thumb: + 'https://cdn-we-retail.ym.tencent.com/tsr/goods/nz-17a.png', + title: '运动连帽拉链卫衣休闲开衫长袖多色运动细绒面料运动上衣', + primaryImage: + 'https://cdn-we-retail.ym.tencent.com/tsr/goods/nz-17a.png', + quantity: 1, + stockStatus: false, + stockQuantity: 0, + price: '25900', + originPrice: '39900', + tagPrice: null, + tagText: null, + roomId: null, + specInfo: [ + { + specTitle: '颜色', + specValue: '军绿色', + }, + { + specTitle: '尺码', + specValue: 'S', + }, + ], + joinCartTime: '2020-04-24T06:26:48.000+0000', + available: 1, + putOnSale: 1, + etitle: null, + }, + { + uid: '88888888205468', + saasId: '88888888', + storeId: '1000', + spuId: '5', + skuId: '135691635', + isSelected: 0, + thumb: + 'https://cdn-we-retail.ym.tencent.com/tsr/goods/dz-2a.png', + title: + '迷你便携高颜值蓝牙无线耳机立体声只能触控式操作简约立体声耳机', + primaryImage: + 'https://cdn-we-retail.ym.tencent.com/tsr/goods/dz-2a.png', + quantity: 1, + stockStatus: true, + stockQuantity: 96, + price: '29000', + originPrice: '29900', + tagPrice: null, + tagText: null, + roomId: null, + specInfo: [ + { + specTitle: '颜色', + specValue: '黑色', + }, + { + specTitle: '类型', + specValue: '简约款', + }, + ], + joinCartTime: '2020-06-29T07:55:17.000+0000', + available: 1, + putOnSale: 1, + etitle: null, + }, + ], + lastJoinTime: null, + }, + ], + lastJoinTime: '2020-06-29T07:55:40.000+0000', + postageFreePromotionVo: { + title: null, + promotionCode: null, + promotionSubCode: null, + promotionId: null, + tagText: null, + promotionStatus: null, + tag: null, + description: null, + doorSillRemain: null, + isNeedAddOnShop: 0, + }, + }, + ], + invalidGoodItems: [ + { + uid: '88888888205468', + saasId: '88888888', + storeId: '1000', + spuId: '1', + skuId: '135691631', + isSelected: 1, + thumb: 'https://cdn-we-retail.ym.tencent.com/tsr/goods/nz-08b.png', + title: '纯色纯棉休闲圆领短袖T恤纯白亲肤厚柔软细腻面料纯白短袖套头T恤', + primaryImage: + 'https://cdn-we-retail.ym.tencent.com/tsr/goods/nz-08b.png', + quantity: 8, + stockStatus: true, + stockQuantity: 177, + price: '26900', + originPrice: '31900', + tagPrice: null, + tagText: null, + roomId: null, + specInfo: [ + { + specTitle: '颜色', + specValue: '白色', + }, + { + specTitle: '尺码', + specValue: 'S', + }, + ], + joinCartTime: '2020-04-28T04:03:59.000+0000', + available: 1, + putOnSale: 1, + etitle: null, + }, + ], + isAllSelected: false, + selectedGoodsCount: 16, + totalAmount: '179997', + totalDiscountAmount: '110000', + }, + code: 'Success', + msg: null, + requestId: mockReqId(), + clientIp: mockIp(), + rt: 269, + success: true, + }; + return resp; +} diff --git a/scr/miniprogram-2/model/category.js b/scr/miniprogram-2/model/category.js new file mode 100644 index 0000000..81b7502 --- /dev/null +++ b/scr/miniprogram-2/model/category.js @@ -0,0 +1,206 @@ +export function getCategoryList() { + return [ + { + groupId: '24948', + name: '女装', + thumbnail: + 'https://cdn-we-retail.ym.tencent.com/miniapp/category/category-default.png', + children: [ + { + groupId: '249481', + name: '女装', + thumbnail: + 'https://cdn-we-retail.ym.tencent.com/miniapp/category/category-default.png', + children: [ + { + groupId: '249480', + name: '卫衣', + thumbnail: + 'https://cdn-we-retail.ym.tencent.com/tsr/classify/img-1.png', + }, + { + groupId: '249480', + name: '毛呢外套', + thumbnail: + 'https://cdn-we-retail.ym.tencent.com/tsr/classify/img-2.png', + }, + { + groupId: '249480', + name: '雪纺衫', + thumbnail: + 'https://cdn-we-retail.ym.tencent.com/tsr/classify/img-3.png', + }, + { + groupId: '249480', + name: '羽绒服', + thumbnail: + 'https://cdn-we-retail.ym.tencent.com/tsr/classify/img-4.png', + }, + { + groupId: '249480', + name: '毛衣', + thumbnail: + 'https://cdn-we-retail.ym.tencent.com/tsr/classify/img-5.png', + }, + { + groupId: '249480', + name: '棉衣', + thumbnail: + 'https://cdn-we-retail.ym.tencent.com/tsr/classify/img-6.png', + }, + { + groupId: '249480', + name: '西装', + thumbnail: + 'https://cdn-we-retail.ym.tencent.com/tsr/classify/img-7.png', + }, + { + groupId: '249480', + name: '马甲', + thumbnail: + 'https://cdn-we-retail.ym.tencent.com/tsr/classify/img-8.png', + }, + { + groupId: '249480', + name: '连衣裙', + thumbnail: + 'https://cdn-we-retail.ym.tencent.com/tsr/classify/img-9.png', + }, + { + groupId: '249480', + name: '半身裙', + thumbnail: + 'https://cdn-we-retail.ym.tencent.com/tsr/classify/img-10.png', + }, + { + groupId: '249480', + name: '裤子', + thumbnail: + 'https://cdn-we-retail.ym.tencent.com/tsr/classify/img-11.png', + }, + ], + }, + ], + }, + { + groupId: '24948', + name: '男装', + thumbnail: + 'https://cdn-we-retail.ym.tencent.com/miniapp/category/category-default.png', + children: [ + { + groupId: '249481', + name: '男装', + thumbnail: + 'https://cdn-we-retail.ym.tencent.com/miniapp/category/category-default.png', + children: [ + { + groupId: '249480', + name: '卫衣', + thumbnail: + 'https://cdn-we-retail.ym.tencent.com/tsr/classify/img-1.png', + }, + { + groupId: '249480', + name: '裤子', + thumbnail: + 'https://cdn-we-retail.ym.tencent.com/tsr/classify/img-11.png', + }, + { + groupId: '249480', + name: '西装', + thumbnail: + 'https://cdn-we-retail.ym.tencent.com/tsr/classify/img-7.png', + }, + { + groupId: '249480', + name: '羽绒服', + thumbnail: + 'https://cdn-we-retail.ym.tencent.com/tsr/classify/img-4.png', + }, + { + groupId: '249480', + name: '马甲', + thumbnail: + 'https://cdn-we-retail.ym.tencent.com/tsr/classify/img-8.png', + }, + ], + }, + ], + }, + { + groupId: '24948', + name: '儿童装', + thumbnail: + 'https://cdn-we-retail.ym.tencent.com/miniapp/category/category-default.png', + children: [ + { + groupId: '249481', + name: '儿童装', + thumbnail: + 'https://cdn-we-retail.ym.tencent.com/miniapp/category/category-default.png', + children: [ + { + groupId: '249480', + name: '马甲', + thumbnail: + 'https://cdn-we-retail.ym.tencent.com/tsr/classify/img-8.png', + }, + { + groupId: '249480', + name: '裤子', + thumbnail: + 'https://cdn-we-retail.ym.tencent.com/tsr/classify/img-11.png', + }, + { + groupId: '249480', + name: '连衣裙', + thumbnail: + 'https://cdn-we-retail.ym.tencent.com/tsr/classify/img-9.png', + }, + { + groupId: '249480', + name: '其他', + thumbnail: + 'https://cdn-we-retail.ym.tencent.com/tsr/goods/muy-3b.png', + }, + ], + }, + ], + }, + { + groupId: '24948', + name: '美妆', + thumbnail: + 'https://cdn-we-retail.ym.tencent.com/miniapp/category/category-default.png', + children: [ + { + groupId: '249481', + name: '美妆', + thumbnail: + 'https://cdn-we-retail.ym.tencent.com/miniapp/category/category-default.png', + children: [ + { + groupId: '249480', + name: '唇釉', + thumbnail: + 'https://cdn-we-retail.ym.tencent.com/tsr/goods/mz-20a1.png', + }, + { + groupId: '249480', + name: '美妆蛋', + thumbnail: + 'https://cdn-we-retail.ym.tencent.com/tsr/goods/mz-11a1.png', + }, + { + groupId: '249480', + name: '眼影', + thumbnail: + 'https://cdn-we-retail.ym.tencent.com/tsr/goods/mz-12b.png', + }, + ], + }, + ], + }, + ]; +} diff --git a/scr/miniprogram-2/model/comments.js b/scr/miniprogram-2/model/comments.js new file mode 100644 index 0000000..78dd61d --- /dev/null +++ b/scr/miniprogram-2/model/comments.js @@ -0,0 +1,338 @@ +/** + * * @param {number} spuId + * @param {number} pageNum + * @param {number} pageSize + * @param {number} commentsLevel + * @param {boolean} hasImage + */ +export function getGoodsAllComments(params) { + const { hasImage } = params.queryParameter; + if (hasImage) { + return { + pageNum: 1, + pageSize: 10, + totalCount: '1', + pageList: [ + { + spuId: '1722045', + skuId: '0', + specInfo: '', + commentContent: + '收到货了,第一时间试了一下,很漂亮特别喜欢,大爱大爱,颜色也很好看。棒棒!', + commentResources: [ + { + src: 'https://cdn-we-retail.ym.tencent.com/tsr/goods/nz-08b.png', + type: 'image', + }, + { + src: 'https://cdn-we-retail.ym.tencent.com/tsr/goods/comment-video.mp4', + type: 'video', + coverSrc: + 'https://cdn-we-retail.ym.tencent.com/tsr/goods/nz-08b.png', + }, + { + src: 'https://cdn-we-retail.ym.tencent.com/tsr/goods/comment-video.mp4', + type: 'video', + coverSrc: + 'https://cdn-we-retail.ym.tencent.com/tsr/goods/nz-08b.png', + }, + { + src: 'https://cdn-we-retail.ym.tencent.com/tsr/goods/comment-video.mp4', + type: 'video', + coverSrc: + 'https://cdn-we-retail.ym.tencent.com/tsr/goods/nz-08b.png', + }, + ], + commentScore: 4, + uid: '88881048075', + userName: 'Dean', + userHeadUrl: + 'https://cdn-we-retail.ym.tencent.com/tsr/avatar/avatar1.png', + isAnonymity: false, + commentTime: '1591953561000', + isAutoComment: false, + sellerReply: + '亲,你好,我们会联系商家和厂商给您一个满意的答复请一定妥善保管好发票', + goodsDetailInfo: '颜色:纯净白 尺码:S码', + }, + { + spuId: '1722045', + skuId: '0', + specInfo: '', + commentContent: + '收到货了,第一时间试了一下,很漂亮特别喜欢,大爱大爱,颜色也很好看。棒棒!', + commentResources: [ + { + src: 'https://cdn-we-retail.ym.tencent.com/tsr/goods/nz-08b.png', + type: 'image', + }, + ], + commentScore: 4, + uid: '88881048075', + userName: 'Dean', + userHeadUrl: + 'https://cdn-we-retail.ym.tencent.com/tsr/avatar/avatar1.png', + isAnonymity: false, + commentTime: '1591953561000', + isAutoComment: false, + sellerReply: + '亲,你好,我们会联系商家和厂商给您一个满意的答复请一定妥善保管好发票', + goodsDetailInfo: '颜色:纯净白 尺码:S码', + }, + { + spuId: '1722045', + skuId: '0', + specInfo: '', + commentContent: + '收到货了,第一时间试了一下,很漂亮特别喜欢,大爱大爱,颜色也很好看。棒棒!', + commentResources: [ + { + src: 'https://cdn-we-retail.ym.tencent.com/tsr/goods/nz-08b.png', + type: 'image', + }, + { + src: 'https://cdn-we-retail.ym.tencent.com/tsr/goods/comment-video.mp4', + type: 'video', + coverSrc: + 'https://cdn-we-retail.ym.tencent.com/tsr/goods/nz-08b.png', + }, + ], + commentScore: 4, + uid: '88881048075', + userName: 'Dean', + userHeadUrl: + 'https://cdn-we-retail.ym.tencent.com/tsr/avatar/avatar1.png', + isAnonymity: false, + commentTime: '1591953561000', + isAutoComment: false, + sellerReply: + '亲,你好,我们会联系商家和厂商给您一个满意的答复请一定妥善保管好发票', + goodsDetailInfo: '颜色:纯净白 尺码:S码', + }, + { + spuId: '1722045', + skuId: '0', + specInfo: '', + commentContent: + '收到货了,第一时间试了一下,很漂亮特别喜欢,大爱大爱,颜色也很好看。棒棒!', + commentResources: [ + { + src: 'https://cdn-we-retail.ym.tencent.com/tsr/goods/nz-08b.png', + type: 'image', + }, + { + src: 'https://cdn-we-retail.ym.tencent.com/tsr/goods/comment-video.mp4', + type: 'video', + coverSrc: + 'https://cdn-we-retail.ym.tencent.com/tsr/goods/nz-08b.png', + }, + { + src: 'https://cdn-we-retail.ym.tencent.com/tsr/goods/comment-video.mp4', + type: 'video', + coverSrc: + 'https://cdn-we-retail.ym.tencent.com/tsr/goods/nz-08b.png', + }, + ], + commentScore: 4, + uid: '88881048075', + userName: 'Dean', + userHeadUrl: + 'https://cdn-we-retail.ym.tencent.com/tsr/avatar/avatar1.png', + isAnonymity: false, + commentTime: '1591953561000', + isAutoComment: false, + sellerReply: + '亲,你好,我们会联系商家和厂商给您一个满意的答复请一定妥善保管好发票', + goodsDetailInfo: '颜色:纯净白 尺码:S码', + }, + ], + }; + } + return { + pageNum: 1, + pageSize: 10, + totalCount: '47', + pageList: [ + { + spuId: '1722045', + skuId: '1697694', + specInfo: '很不错', + commentContent: + '收到货了,第一时间试了一下,很漂亮特别喜欢,大爱大爱,颜色也很好看。棒棒!', + commentImageUrls: null, + commentScore: 1, + uid: '88881048075', + userName: 'Dean', + userHeadUrl: + 'https://cdn-we-retail.ym.tencent.com/tsr/avatar/avatar1.png', + isAnonymity: false, + commentTime: '1592224320000', + isAutoComment: false, + sellerReply: + '亲,你好,我们会联系商家和厂商给您一个满意的答复请一定妥善保管好发票', + goodsDetailInfo: '颜色:纯净白 尺码:S码', + }, + { + spuId: '1722045', + skuId: '1697693', + specInfo: '很适合', + commentContent: + '收到货了,第一时间试了一下,很漂亮特别喜欢,大爱大爱,颜色也很好看。棒棒!', + commentImageUrls: null, + commentScore: 1, + uid: '88881048075', + userName: 'Dean', + userHeadUrl: + 'https://cdn-we-retail.ym.tencent.com/tsr/avatar/avatar1.png', + isAnonymity: false, + commentTime: '1592224320000', + isAutoComment: false, + sellerReply: + '亲,你好,我们会联系商家和厂商给您一个满意的答复请一定妥善保管好发票', + goodsDetailInfo: '颜色:纯净白 尺码:S码', + }, + { + spuId: '1722045', + skuId: '1697694', + specInfo: 'NICE', + commentContent: + '收到货了,第一时间试了一下,很漂亮特别喜欢,大爱大爱,颜色也很好看。棒棒!', + commentImageUrls: null, + commentScore: 5, + uid: '88881048075', + userName: 'Dean', + userHeadUrl: + 'https://cdn-we-retail.ym.tencent.com/tsr/avatar/avatar1.png', + isAnonymity: false, + commentTime: '1592218074000', + isAutoComment: true, + sellerReply: + '亲,你好,我们会联系商家和厂商给您一个满意的答复请一定妥善保管好发票', + }, + { + spuId: '1722045', + skuId: '0', + specInfo: '', + commentContent: + '收到货了,第一时间试了一下,很漂亮特别喜欢,大爱大爱,颜色也很好看。棒棒!', + commentImageUrls: null, + commentScore: 5, + uid: '88881048075', + userName: 'Dean', + userHeadUrl: + 'https://cdn-we-retail.ym.tencent.com/tsr/avatar/avatar1.png', + isAnonymity: false, + commentTime: '1592218074000', + isAutoComment: false, + goodsDetailInfo: '颜色:纯净白 尺码:S码', + }, + { + spuId: '1722045', + skuId: '1697694', + specInfo: '测试dr超长:dr专用超长;bwtgg01:fff', + commentContent: + '收到货了,第一时间试了一下,很漂亮特别喜欢,大爱大爱,颜色也很好看。棒棒!', + commentImageUrls: null, + commentScore: 5, + uid: '88881048075', + userName: 'Dean', + userHeadUrl: + 'https://cdn-we-retail.ym.tencent.com/tsr/avatar/avatar1.png', + isAnonymity: false, + commentTime: '1592217607000', + isAutoComment: false, + }, + { + spuId: '1722045', + skuId: '1697693', + specInfo: '测试dr超长:超长测试超长测试1;bwtgg01:bbb', + commentContent: + '收到货了,第一时间试了一下,很漂亮特别喜欢,大爱大爱,颜色也很好看。棒棒!', + commentImageUrls: null, + commentScore: 4, + uid: '88881048075', + userName: 'Dean', + userHeadUrl: + 'https://cdn-we-retail.ym.tencent.com/tsr/avatar/avatar1.png', + isAnonymity: false, + commentTime: '1592217607000', + isAutoComment: false, + }, + { + spuId: '1722045', + skuId: '1697694', + specInfo: '测试dr超长:dr专用超长;bwtgg01:fff', + commentContent: + '收到货了,第一时间试了一下,很漂亮特别喜欢,大爱大爱,颜色也很好看。棒棒!', + commentImageUrls: null, + commentScore: 5, + uid: '88881048075', + userName: 'Dean', + userHeadUrl: + 'https://cdn-we-retail.ym.tencent.com/tsr/avatar/avatar1.png', + isAnonymity: false, + commentTime: '1592205599000', + isAutoComment: false, + }, + { + spuId: '1722045', + skuId: '1697694', + specInfo: '测试dr超长:dr专用超长;bwtgg01:fff', + commentContent: + '收到货了,第一时间试了一下,很漂亮特别喜欢,大爱大爱,颜色也很好看。棒棒!', + commentImageUrls: null, + commentScore: 5, + uid: '88881048075', + userName: 'Dean', + userHeadUrl: + 'https://cdn-we-retail.ym.tencent.com/tsr/avatar/avatar1.png', + isAnonymity: false, + commentTime: '1592188822000', + isAutoComment: false, + }, + { + spuId: '1722045', + skuId: '1697694', + specInfo: '测试dr超长:dr专用超长;bwtgg01:fff', + commentContent: + '收到货了,第一时间试了一下,很漂亮特别喜欢,大爱大爱,颜色也很好看。棒棒!', + commentImageUrls: null, + commentScore: 5, + uid: '88881055835', + userName: 'Max', + userHeadUrl: + 'https://cdn-we-retail.ym.tencent.com/tsr/avatar/avatar1.png', + isAnonymity: false, + commentTime: '1593792002000', + isAutoComment: true, + }, + { + spuId: '1722045', + skuId: '1697694', + specInfo: '测试dr超长:dr专用超长;bwtgg01:fff', + commentContent: '', + commentImageUrls: null, + commentScore: 5, + uid: '88881055835', + userName: 'Max', + userHeadUrl: + 'https://cdn-we-retail.ym.tencent.com/tsr/avatar/avatar1.png', + isAnonymity: false, + commentTime: '1593792001000', + isAutoComment: true, + }, + ], + }; +} + +export function getGoodsCommentsCount() { + return { + commentCount: '47', + badCount: '0', + middleCount: '2', + goodCount: '45', + hasImageCount: '1', + goodRate: 95.7, + uidCount: '0', + }; +} diff --git a/scr/miniprogram-2/model/comments/queryDetail.js b/scr/miniprogram-2/model/comments/queryDetail.js new file mode 100644 index 0000000..9ce2eb8 --- /dev/null +++ b/scr/miniprogram-2/model/comments/queryDetail.js @@ -0,0 +1,50 @@ +const queryDetail = { + commentInfos: [ + { + id: '647984992708380600', + uid: '', + userName: 'Dean Cheng', + userHeadUrl: + 'https://bizmid-material-qa-1302115263.cos.ap-guangzhou.myqcloud.com/comment/default_head.png', + commentId: '1937712', + commentIdName: '小鹿商品', + commentIdImageUrl: + 'https://bizmid-material-qa-1302115263.file.myqcloud.com/persist/4bf2ded7-1759-4821-919c-cc4960e14120/1078823925183295617/100000114727/material/1/cdbeb389be64427b8c165627895ff0bc-1610425563793-%E5%A4%B4%E5%83%8F.png', + commentStage: 1, + commentCheckStatus: 2, + commentIdType: 1, + content: '', + commentInfo: { + score: null, + content: '', + medias: [], + commentTime: '1617872404000', + }, + isAgainComment: 0, + commentHasAgainComment: 0, + isAnonymous: 0, + replyList: [], + specification: '颜色:白色 ', + specificationJson: '{"颜色":"白色"}', + commentExtendId: '1937713', + commentTime: '1617872404000', + score: 0, + goodsScore: null, + freightScore: null, + serviceScore: null, + medias: [], + againCommentList: null, + }, + ], + logisticsScore: null, + serviceScore: null, +}; + +/** + * @param {string} skuId + * @param {string} spuId + * @param {string} orderNo + */ +export function queryCommentDetail() { + return queryDetail; +} diff --git a/scr/miniprogram-2/model/coupon.js b/scr/miniprogram-2/model/coupon.js new file mode 100644 index 0000000..a41ff8b --- /dev/null +++ b/scr/miniprogram-2/model/coupon.js @@ -0,0 +1,39 @@ +/** + * 优惠券 + * + * @typedef {'default'|'useless'|'disabled'} CouponCardStatus + * @typedef {'discount'|'price'} CouponCardType + * + * @param {number} [id] + * @param {CouponCardStatus} [status] + * @param {CouponCardType} [type] + */ +export function getCoupon(id = 0, status = 'default', type = (id % 2) + 1) { + return { + /** key */ + key: `${id}`, + /** 优惠券状态 */ + status, + /** 优惠券类型 */ + type, + /** 折扣或者满减值 */ + value: type === 2 ? 5.5 : 1800, + /** 标签 */ + tag: '', + /** 描述 */ + desc: parseInt(id) > 0 ? `满${parseInt(id) * 100}元可用` : '无门槛使用', + /** 订单底价,满n元 */ + base: 10000 * (parseInt(id) || 0), + /** 标题 */ + title: type === 2 ? `生鲜折扣券 - ${id}` : `生鲜满减券 - ${id}`, + /** 有效时间限制 */ + timeLimit: '2019.11.18-2023.12.18', + /** 货币符号 */ + currency: '¥', + }; +} + +/** 优惠券列表 */ +export function getCouponList(status = 'default', length = 10) { + return new Array(length).fill(0).map((_, idx) => getCoupon(idx, status)); +} diff --git a/scr/miniprogram-2/model/detailsComments.js b/scr/miniprogram-2/model/detailsComments.js new file mode 100644 index 0000000..82fc887 --- /dev/null +++ b/scr/miniprogram-2/model/detailsComments.js @@ -0,0 +1,30 @@ +export function getGoodsDetailsComments() { + return { + homePageComments: [ + { + spuId: '1722045', + skuId: null, + specInfo: null, + commentContent: + '收到货了,第一时间试了一下,很漂亮特别喜欢,大爱大爱,颜色也很好看。棒棒!', + commentScore: 4, + uid: '88881048075', + userName: 'Dean', + userHeadUrl: + 'https://wx.qlogo.cn/mmopen/vi_32/5mKrvn3ibyDNaDZSZics3aoKlz1cv0icqn4EruVm6gKjsK0xvZZhC2hkUkRWGxlIzOEc4600JkzKn9icOLE6zjgsxw/132', + }, + ], + }; +} + +export function getGoodsDetailsCommentsCount() { + return { + commentCount: '47', + badCount: '0', + middleCount: '2', + goodCount: '45', + hasImageCount: '1', + goodRate: 95.7, + uidCount: '0', + }; +} diff --git a/scr/miniprogram-2/model/good.js b/scr/miniprogram-2/model/good.js new file mode 100644 index 0000000..e9073b5 --- /dev/null +++ b/scr/miniprogram-2/model/good.js @@ -0,0 +1,1908 @@ +import { + cdnBase +} from '../config/index'; +const imgPrefix = cdnBase; + +const defaultDesc = [`${imgPrefix}/goods/details-1.png`]; + +const allGoods = [{ + saasId: '88888888', + storeId: '1000', + spuId: '0', + title: '沪上阿姨鲜果茶(中国民航大学店)', + primaryImage: '/images/food/hushangayi.jpg', + images: [ + '/images/food/hushangayi2.jpg', + '/images/food/hushangayi3.jpg', + ], + video: null, + available: 1, + minSalePrice: 1800, + minLinePrice: 1800, + maxSalePrice: 1800, + maxLinePrice: 40000, + spuStockQuantity: 510, + soldNum: 1020, + isPutOnSale: 1, + categoryIds: [ + '127880527393854975', + '127880527393854976', + '127880537778953984', + ], + specList: [{ + specId: '10011', + title: '颜色', + specValueList: [{ + specValueId: '10012', + specId: null, + saasId: null, + specValue: '米色荷叶边', + image: null, + }, ], + }, + { + specId: '10013', + title: '尺码', + specValueList: [{ + specValueId: '11014', + specId: null, + saasId: null, + specValue: 'S', + image: null, + }, + { + specValueId: '10014', + specId: null, + saasId: null, + specValue: 'M', + image: null, + }, + { + specValueId: '11013', + specId: null, + saasId: null, + specValue: 'L', + image: null, + }, + ], + }, + ], + skuList: [{ + skuId: '135676631', + skuImage: '/images/food/hushangayi3.jpg', + specInfo: [{ + specId: '10011', + specTitle: null, + specValueId: '10012', + specValue: null, + }, + { + specId: '10013', + specTitle: null, + specValueId: '11014', + specValue: null, + }, + ], + priceInfo: [{ + priceType: 1, + price: '29800', + priceTypeName: null + }, + { + priceType: 2, + price: '40000', + priceTypeName: null + }, + ], + stockInfo: { + stockQuantity: 175, + safeStockQuantity: 0, + soldQuantity: 0, + }, + weight: { + value: null, + unit: 'KG' + }, + volume: null, + profitPrice: null, + }, + { + skuId: '135676632', + skuImage: 'https://cdn-we-retail.ym.tencent.com/tsr/goods/nz-09a.png', + specInfo: [{ + specId: '10011', + specTitle: null, + specValueId: '10012', + specValue: null, + }, + { + specId: '10013', + specTitle: null, + specValueId: '11013', + specValue: null, + }, + ], + priceInfo: [{ + priceType: 1, + price: '29800', + priceTypeName: null + }, + { + priceType: 2, + price: '40000', + priceTypeName: null + }, + ], + stockInfo: { + stockQuantity: 158, + safeStockQuantity: 0, + soldQuantity: 0, + }, + weight: { + value: null, + unit: 'KG' + }, + volume: null, + profitPrice: null, + }, + { + skuId: '135681631', + skuImage: 'https://cdn-we-retail.ym.tencent.com/tsr/goods/nz-09a.png', + specInfo: [{ + specId: '10011', + specTitle: null, + specValueId: '10012', + specValue: null, + }, + { + specId: '10013', + specTitle: null, + specValueId: '10014', + specValue: null, + }, + ], + priceInfo: [{ + priceType: 1, + price: '29800', + priceTypeName: null + }, + { + priceType: 2, + price: '40000', + priceTypeName: null + }, + ], + stockInfo: { + stockQuantity: 177, + safeStockQuantity: 0, + soldQuantity: 0, + }, + weight: { + value: null, + unit: 'KG' + }, + volume: null, + profitPrice: null, + }, + ], + spuTagList: [{ + id: '13001', + title: '限时抢购', + image: null + }], + limitInfo: [{ + text: '限购5件', + }, ], + desc: [ + 'https://cdn-we-retail.ym.tencent.com/tsr/goods/nz-09c.png', + 'https://cdn-we-retail.ym.tencent.com/tsr/goods/nz-09d.png', + ], + etitle: '', + }, + { + saasId: '88888888', + storeId: '1000', + spuId: '135686633', + title: '纯色纯棉休闲圆领短袖T恤纯白亲肤厚柔软细腻面料纯白短袖套头T恤', + primaryImage: 'https://cdn-we-retail.ym.tencent.com/tsr/goods/nz-08b.png', + minSalePrice: '25900', + minLinePrice: '31900', + maxSalePrice: '26900', + maxLinePrice: '31900', + isSoldOut: false, + images: [ + 'https://cdn-we-retail.ym.tencent.com/tsr/goods/nz-08a.png', + 'https://cdn-we-retail.ym.tencent.com/tsr/goods/nz-08a1.png', + 'https://cdn-we-retail.ym.tencent.com/tsr/goods/nz-08b.png', + ], + groupIdList: ['15029', '14023'], + spuTagList: [{ + id: null, + title: '2020夏季新款', + image: null, + }, ], + skuList: [{ + skuId: '135686634', + skuImage: null, + specInfo: [{ + specId: '10000', + specTitle: null, + specValueId: '10001', + specValue: '白色', + }, + { + specId: '10002', + specTitle: null, + specValueId: '10003', + specValue: 'M', + }, + ], + priceInfo: [{ + priceType: 1, + price: '25900', + priceTypeName: '销售价格', + }, + { + priceType: 2, + price: '31900', + priceTypeName: '划线价格', + }, + ], + stockInfo: { + stockQuantity: -9, + safeStockQuantity: 0, + soldQuantity: 0, + }, + weight: null, + volume: null, + profitPrice: null, + }, + { + skuId: '135691631', + skuImage: null, + specInfo: [{ + specId: '10000', + specTitle: null, + specValueId: '10001', + specValue: '白色', + }, + { + specId: '10002', + specTitle: null, + specValueId: '11003', + specValue: 'S', + }, + ], + priceInfo: [{ + priceType: 1, + price: '26900', + priceTypeName: '销售价格', + }, + { + priceType: 2, + price: '31900', + priceTypeName: '划线价格', + }, + ], + stockInfo: { + stockQuantity: 177, + safeStockQuantity: 0, + soldQuantity: 0, + }, + weight: null, + volume: null, + profitPrice: null, + }, + { + skuId: '135691632', + skuImage: null, + specInfo: [{ + specId: '10000', + specTitle: null, + specValueId: '10001', + specValue: '白色', + }, + { + specId: '10002', + specTitle: null, + specValueId: '11002', + specValue: 'L', + }, + ], + priceInfo: [{ + priceType: 1, + price: '26900', + priceTypeName: '销售价格', + }, + { + priceType: 2, + price: '31900', + priceTypeName: '划线价格', + }, + ], + stockInfo: { + stockQuantity: 194, + safeStockQuantity: 0, + soldQuantity: 0, + }, + weight: null, + volume: null, + profitPrice: null, + }, + ], + isAvailable: 1, + spuStockQuantity: 371, + soldNum: 1032, + isPutOnSale: 1, + specList: [{ + specId: '10000', + title: '颜色', + specValueList: [{ + specValueId: '10001', + specId: '10000', + saasId: '88888888', + specValue: '白色', + image: '', + }, ], + }, + { + specId: '10002', + title: '尺码', + specValueList: [{ + specValueId: '11003', + specId: '10002', + saasId: '88888888', + specValue: 'S', + image: '', + }, + { + specValueId: '10003', + specId: '10002', + saasId: '88888888', + specValue: 'M', + image: '', + }, + { + specValueId: '11002', + specId: '10002', + saasId: '88888888', + specValue: 'L', + image: '', + }, + ], + }, + ], + promotionList: null, + minProfitPrice: null, + etitle: '', + desc: [ + 'https://cdn-we-retail.ym.tencent.com/tsr/goods/nz-08c.png', + 'https://cdn-we-retail.ym.tencent.com/tsr/goods/nz-08d.png', + ], + }, + { + saasId: '88888888', + storeId: '1000', + spuId: '135691628', + title: '运动连帽拉链卫衣休闲开衫长袖多色运动细绒面料运动上衣', + images: [ + 'https://cdn-we-retail.ym.tencent.com/tsr/goods/nz-17a.png', + 'https://cdn-we-retail.ym.tencent.com/tsr/goods/nz-17a1.png', + 'https://cdn-we-retail.ym.tencent.com/tsr/goods/nz-17b.png', + 'https://cdn-we-retail.ym.tencent.com/tsr/goods/nz-17b1.png', + ], + primaryImage: 'https://cdn-we-retail.ym.tencent.com/tsr/goods/nz-17a.png', + minSalePrice: '25900', + minLinePrice: '39900', + maxSalePrice: '25900', + maxLinePrice: '39900', + isSoldOut: true, + groupIdList: ['15029', '14023'], + spuTagList: [{ + id: null, + title: '2020夏季新款', + image: null, + }, ], + skuList: [{ + skuId: '135686631', + skuImage: null, + specInfo: [{ + specId: '127904180600844800', + specTitle: null, + specValueId: '127904180768617216', + specValue: '军绿色', + }, + { + specId: '127904861604820480', + specTitle: null, + specValueId: '127904862494014208', + specValue: 'XS', + }, + ], + priceInfo: [{ + priceType: 1, + price: '25900', + priceTypeName: '销售价格', + }, + { + priceType: 2, + price: '39900', + priceTypeName: '划线价格', + }, + ], + stockInfo: { + stockQuantity: 0, + safeStockQuantity: 0, + soldQuantity: 0, + }, + weight: null, + volume: null, + profitPrice: null, + }, + { + skuId: '135686632', + skuImage: null, + specInfo: [{ + specId: '127904180600844800', + specTitle: null, + specValueId: '127904180768617216', + specValue: '军绿色', + }, + { + specId: '127904861604820480', + specTitle: null, + specValueId: '127904862007474176', + specValue: 'M', + }, + ], + priceInfo: [{ + priceType: 1, + price: '25900', + priceTypeName: '销售价格', + }, + { + priceType: 2, + price: '39900', + priceTypeName: '划线价格', + }, + ], + stockInfo: { + stockQuantity: 0, + safeStockQuantity: 0, + soldQuantity: 0, + }, + weight: null, + volume: null, + profitPrice: null, + }, + { + skuId: '135691629', + skuImage: null, + specInfo: [{ + specId: '127904180600844800', + specTitle: null, + specValueId: '127904180768617216', + specValue: '军绿色', + }, + { + specId: '127904861604820480', + specTitle: null, + specValueId: '127904862175246592', + specValue: 'S', + }, + ], + priceInfo: [{ + priceType: 1, + price: '25900', + priceTypeName: '销售价格', + }, + { + priceType: 2, + price: '39900', + priceTypeName: '划线价格', + }, + ], + stockInfo: { + stockQuantity: 0, + safeStockQuantity: 0, + soldQuantity: 0, + }, + weight: null, + volume: null, + profitPrice: null, + }, + { + skuId: '135691630', + skuImage: null, + specInfo: [{ + specId: '127904180600844800', + specTitle: null, + specValueId: '127904180768617216', + specValue: '军绿色', + }, + { + specId: '127904861604820480', + specTitle: null, + specValueId: '127904861755815680', + specValue: 'L', + }, + ], + priceInfo: [{ + priceType: 1, + price: '25900', + priceTypeName: '销售价格', + }, + { + priceType: 2, + price: '39900', + priceTypeName: '划线价格', + }, + ], + stockInfo: { + stockQuantity: 0, + safeStockQuantity: 0, + soldQuantity: 0, + }, + weight: null, + volume: null, + profitPrice: null, + }, + ], + isAvailable: 1, + spuStockQuantity: 0, + soldNum: 1022, + isPutOnSale: 1, + specList: [{ + specId: '127904180600844800', + title: '颜色', + specValueList: [{ + specValueId: '127904180768617216', + specId: '127904180600844800', + saasId: '88888888', + specValue: '军绿色', + image: '', + }, ], + }, + { + specId: '127904861604820480', + title: '尺码', + specValueList: [{ + specValueId: '127904862494014208', + specId: '127904861604820480', + saasId: '88888888', + specValue: 'XS', + image: '', + }, + { + specValueId: '127904862175246592', + specId: '127904861604820480', + saasId: '88888888', + specValue: 'S', + image: '', + }, + { + specValueId: '127904862007474176', + specId: '127904861604820480', + saasId: '88888888', + specValue: 'M', + image: '', + }, + { + specValueId: '127904861755815680', + specId: '127904861604820480', + saasId: '88888888', + specValue: 'L', + image: '', + }, + ], + }, + ], + promotionList: null, + minProfitPrice: null, + etitle: '', + desc: [ + 'https://cdn-we-retail.ym.tencent.com/tsr/goods/nz-17c.png', + 'https://cdn-we-retail.ym.tencent.com/tsr/goods/nz-17d.png', + ], + }, + { + saasId: '88888888', + storeId: '1000', + spuId: '135686623', + title: '腾讯极光盒子4智能网络电视机顶盒6K千兆网络机顶盒4K高分辨率', + primaryImage: 'https://cdn-we-retail.ym.tencent.com/tsr/goods/dz-3a.png', + images: [ + 'https://cdn-we-retail.ym.tencent.com/tsr/goods/dz-3a.png', + 'https://cdn-we-retail.ym.tencent.com/tsr/goods/dz-3b.png', + ], + minSalePrice: '9900', + minLinePrice: '16900', + maxSalePrice: '10900', + maxLinePrice: '16900', + isSoldOut: false, + groupIdList: [ + '15029', + '15030', + '14023', + '127886731843219200', + '127886732665303040', + '127886733101511680', + '127886733923595520', + '14025', + '127886726071855616', + '14026', + '127886727481142784', + '127886731440566784', + ], + spuTagList: [{ + id: null, + title: '联名系列', + image: null, + }, ], + skuList: [{ + skuId: '135686624', + skuImage: null, + specInfo: [{ + specId: '10000', + specTitle: null, + specValueId: '10001', + specValue: '经典白', + }, + { + specId: '10002', + specTitle: null, + specValueId: '10003', + specValue: '节能套装', + }, + ], + priceInfo: [{ + priceType: 1, + price: '9900', + priceTypeName: '销售价格', + }, + { + priceType: 2, + price: '16900', + priceTypeName: '划线价格', + }, + ], + stockInfo: { + stockQuantity: 98, + safeStockQuantity: 0, + soldQuantity: 0, + }, + weight: null, + volume: null, + profitPrice: null, + }, + { + skuId: '135686625', + skuImage: null, + specInfo: [{ + specId: '10000', + specTitle: null, + specValueId: '11000', + specValue: '贵族青', + }, + { + specId: '10002', + specTitle: null, + specValueId: '11003', + specValue: '经典套装', + }, + ], + priceInfo: [{ + priceType: 1, + price: '9900', + priceTypeName: '销售价格', + }, + { + priceType: 2, + price: '16900', + priceTypeName: '划线价格', + }, + ], + stockInfo: { + stockQuantity: 100, + safeStockQuantity: 0, + soldQuantity: 0, + }, + weight: null, + volume: null, + profitPrice: null, + }, + { + skuId: '135686626', + skuImage: null, + specInfo: [{ + specId: '10000', + specTitle: null, + specValueId: '11000', + specValue: '经典白', + }, + { + specId: '10002', + specTitle: null, + specValueId: '11002', + specValue: '尊享礼盒装', + }, + ], + priceInfo: [{ + priceType: 1, + price: '9900', + priceTypeName: '销售价格', + }, + { + priceType: 2, + price: '16900', + priceTypeName: '划线价格', + }, + ], + stockInfo: { + stockQuantity: 100, + safeStockQuantity: 0, + soldQuantity: 0, + }, + weight: null, + volume: null, + profitPrice: null, + }, + { + skuId: '135691622', + skuImage: null, + specInfo: [{ + specId: '10000', + specTitle: null, + specValueId: '10001', + specValue: '经典白', + }, + { + specId: '10002', + specTitle: null, + specValueId: '11003', + specValue: 'S', + }, + ], + priceInfo: [{ + priceType: 1, + price: '9900', + priceTypeName: '销售价格', + }, + { + priceType: 2, + price: '16900', + priceTypeName: '划线价格', + }, + ], + stockInfo: { + stockQuantity: 100, + safeStockQuantity: 0, + soldQuantity: 0, + }, + weight: null, + volume: null, + profitPrice: null, + }, + { + skuId: '135691623', + skuImage: null, + specInfo: [{ + specId: '10000', + specTitle: null, + specValueId: '10001', + specValue: '经典白', + }, + { + specId: '10002', + specTitle: null, + specValueId: '11002', + specValue: '尊享礼盒装', + }, + ], + priceInfo: [{ + priceType: 1, + price: '10900', + priceTypeName: '销售价格', + }, + { + priceType: 2, + price: '16900', + priceTypeName: '划线价格', + }, + ], + stockInfo: { + stockQuantity: 100, + safeStockQuantity: 0, + soldQuantity: 0, + }, + weight: null, + volume: null, + profitPrice: null, + }, + { + skuId: '135691624', + skuImage: null, + specInfo: [{ + specId: '10000', + specTitle: null, + specValueId: '11000', + specValue: '贵族青', + }, + { + specId: '10002', + specTitle: null, + specValueId: '10003', + specValue: '节能套装', + }, + ], + priceInfo: [{ + priceType: 1, + price: '9900', + priceTypeName: '销售价格', + }, + { + priceType: 2, + price: '16900', + priceTypeName: '划线价格', + }, + ], + stockInfo: { + stockQuantity: 100, + safeStockQuantity: 0, + soldQuantity: 0, + }, + weight: null, + volume: null, + profitPrice: null, + }, + ], + isAvailable: 1, + spuStockQuantity: 598, + soldNum: 102, + isPutOnSale: 1, + desc: [ + 'https://cdn-we-retail.ym.tencent.com/tsr/goods/dz-3c.png', + 'https://cdn-we-retail.ym.tencent.com/tsr/goods/dz-3d.png', + ], + specList: [{ + specId: '10000', + title: '颜色', + specValueList: [{ + specValueId: '10001', + specId: '10000', + saasId: '88888888', + specValue: '经典白', + image: '', + }, + { + specValueId: '11000', + specId: '10000', + saasId: '88888888', + specValue: '贵族青', + image: '', + }, + ], + }, + { + specId: '10002', + title: '尺码', + specValueList: [{ + specValueId: '11003', + specId: '10002', + saasId: '88888888', + specValue: '经典套装', + image: '', + }, + { + specValueId: '10003', + specId: '10002', + saasId: '88888888', + specValue: '节能套装', + image: '', + }, + { + specValueId: '11002', + specId: '10002', + saasId: '88888888', + specValue: '尊享礼盒装', + image: '', + }, + ], + }, + ], + promotionList: null, + minProfitPrice: null, + etitle: '', + }, + { + saasId: '88888888', + storeId: '1000', + spuId: '135681628', + title: '带帽午休毯虎年款多功能加厚加大加绒简约多功能午休毯连帽披肩', + primaryImage: 'https://cdn-we-retail.ym.tencent.com/tsr/goods/muy-3a.png', + images: [ + 'https://cdn-we-retail.ym.tencent.com/tsr/goods/muy-3a.png', + 'https://cdn-we-retail.ym.tencent.com/tsr/goods/muy-3a1.png', + 'https://cdn-we-retail.ym.tencent.com/tsr/goods/muy-3b.png', + ], + minSalePrice: '29900', + minLinePrice: '39900', + maxSalePrice: '39900', + maxLinePrice: '39900', + isSoldOut: false, + groupIdList: [ + '14023', + '127886732245873408', + '127886733487386880', + '14025', + '127886726071855616', + '14026', + '127886728420666112', + '127886728957538048', + '127886729779621888', + '127886730165497088', + '127886730652037376', + '127886731037912576', + '127886731440566784', + '127886729360190464', + '15029', + '15030', + ], + spuTagList: [{ + id: null, + title: '限时抢购', + image: null, + }, ], + skuList: [{ + skuId: '135676629', + skuImage: null, + specInfo: [{ + specId: '127904180600844800', + specTitle: null, + specValueId: '127904181322265856', + specValue: '浅灰色', + }, + { + specId: '127904861604820480', + specTitle: null, + specValueId: '127904862175246592', + specValue: 'S', + }, + ], + priceInfo: [{ + priceType: 1, + price: '29900', + priceTypeName: '销售价格', + }, + { + priceType: 2, + price: '39900', + priceTypeName: '划线价格', + }, + ], + stockInfo: { + stockQuantity: 80, + safeStockQuantity: 0, + soldQuantity: 0, + }, + weight: null, + volume: null, + profitPrice: null, + }, + { + skuId: '135676630', + skuImage: null, + specInfo: [{ + specId: '127904180600844800', + specTitle: null, + specValueId: '127904181322265856', + specValue: '浅灰色', + }, + { + specId: '127904861604820480', + specTitle: null, + specValueId: '127904861755815680', + specValue: 'L', + }, + ], + priceInfo: [{ + priceType: 1, + price: '39900', + priceTypeName: '销售价格', + }, + { + priceType: 2, + price: '39900', + priceTypeName: '划线价格', + }, + ], + stockInfo: { + stockQuantity: 122, + safeStockQuantity: 0, + soldQuantity: 0, + }, + weight: null, + volume: null, + profitPrice: null, + }, + { + skuId: '135681629', + skuImage: null, + specInfo: [{ + specId: '127904180600844800', + specTitle: null, + specValueId: '127904181322265856', + specValue: '浅灰色', + }, + { + specId: '127904861604820480', + specTitle: null, + specValueId: '127904862007474176', + specValue: 'M', + }, + ], + priceInfo: [{ + priceType: 1, + price: '39900', + priceTypeName: '销售价格', + }, + { + priceType: 2, + price: '39900', + priceTypeName: '划线价格', + }, + ], + stockInfo: { + stockQuantity: 119, + safeStockQuantity: 0, + soldQuantity: 0, + }, + weight: null, + volume: null, + profitPrice: null, + }, + ], + desc: [ + 'https://cdn-we-retail.ym.tencent.com/tsr/goods/muy-3c.png', + 'https://cdn-we-retail.ym.tencent.com/tsr/goods/muy-3d.png', + ], + isAvailable: 1, + spuStockQuantity: 321, + soldNum: 102, + isPutOnSale: 1, + specList: [{ + specId: '127904180600844800', + title: '颜色', + specValueList: [{ + specValueId: '127904181322265856', + specId: '127904180600844800', + saasId: '88888888', + specValue: '浅灰色', + image: '', + }, ], + }, + { + specId: '127904861604820480', + title: '尺码', + specValueList: [{ + specValueId: '127904862175246592', + specId: '127904861604820480', + saasId: '88888888', + specValue: 'S', + image: '', + }, + { + specValueId: '127904862007474176', + specId: '127904861604820480', + saasId: '88888888', + specValue: 'M', + image: '', + }, + { + specValueId: '127904861755815680', + specId: '127904861604820480', + saasId: '88888888', + specValue: 'L', + image: '', + }, + ], + }, + ], + promotionList: null, + minProfitPrice: null, + etitle: '', + }, + { + saasId: '88888888', + storeId: '1000', + spuId: '135681626', + title: '迷你便携高颜值蓝牙无线耳机立体声只能触控式操作简约立体声耳机', + primaryImage: 'https://cdn-we-retail.ym.tencent.com/tsr/goods/dz-2a.png', + images: [ + 'https://cdn-we-retail.ym.tencent.com/tsr/goods/dz-2a.png', + 'https://cdn-we-retail.ym.tencent.com/tsr/goods/dz-2a1.png', + 'https://cdn-we-retail.ym.tencent.com/tsr/goods/dz-2b.png', + ], + minSalePrice: '29000', + minLinePrice: '40000', + maxSalePrice: '39000', + maxLinePrice: '40000', + isSoldOut: false, + groupIdList: [ + '15029', + '15030', + '14023', + '127886732245873408', + '127886733487386880', + '14025', + '127886726071855616', + '14026', + '127886728420666112', + '127886728957538048', + '127886730652037376', + '127886731037912576', + ], + spuTagList: [{ + id: null, + title: '限时抢购', + image: null, + }, ], + skuList: [{ + skuId: '135676627', + skuImage: null, + specInfo: [{ + specId: '10006', + specTitle: null, + specValueId: '10007', + specValue: '黑色', + }, + { + specId: '11007', + specTitle: null, + specValueId: '10009', + specValue: '简约款', + }, + ], + priceInfo: [{ + priceType: 1, + price: '29000', + priceTypeName: '销售价格', + }, + { + priceType: 2, + price: '40000', + priceTypeName: '划线价格', + }, + ], + stockInfo: { + stockQuantity: 123, + safeStockQuantity: 0, + soldQuantity: 0, + }, + weight: null, + volume: null, + profitPrice: null, + }, + { + skuId: '135676628', + skuImage: null, + specInfo: [{ + specId: '10006', + specTitle: null, + specValueId: '10007', + specValue: '黑色', + }, + { + specId: '11007', + specTitle: null, + specValueId: '10008', + specValue: '礼盒装', + }, + ], + priceInfo: [{ + priceType: 1, + price: '39000', + priceTypeName: '销售价格', + }, + { + priceType: 2, + price: '40000', + priceTypeName: '划线价格', + }, + ], + stockInfo: { + stockQuantity: 123, + safeStockQuantity: 0, + soldQuantity: 0, + }, + weight: null, + volume: null, + profitPrice: null, + }, + { + skuId: '135681627', + skuImage: null, + specInfo: [{ + specId: '10006', + specTitle: null, + specValueId: '10007', + specValue: '黑色', + }, + { + specId: '11007', + specTitle: null, + specValueId: '11008', + specValue: '带充电线简约款', + }, + ], + priceInfo: [{ + priceType: 1, + price: '39000', + priceTypeName: '销售价格', + }, + { + priceType: 2, + price: '40000', + priceTypeName: '划线价格', + }, + ], + stockInfo: { + stockQuantity: 120, + safeStockQuantity: 0, + soldQuantity: 0, + }, + weight: null, + volume: null, + profitPrice: null, + }, + ], + desc: [ + 'https://cdn-we-retail.ym.tencent.com/tsr/goods/dz-2c.png', + 'https://cdn-we-retail.ym.tencent.com/tsr/goods/dz-2d.png', + ], + isAvailable: 1, + spuStockQuantity: 366, + soldNum: 102, + isPutOnSale: 1, + specList: [{ + specId: '10006', + title: '颜色', + specValueList: [{ + specValueId: '10007', + specId: '10006', + saasId: '88888888', + specValue: '黑色', + image: '', + }, ], + }, + { + specId: '11007', + title: '类型', + specValueList: [{ + specValueId: '10009', + specId: '11007', + saasId: '88888888', + specValue: '简约款', + image: '', + }, + { + specValueId: '11008', + specId: '11007', + saasId: '88888888', + specValue: '带充电线简约款', + image: '', + }, + { + specValueId: '10008', + specId: '11007', + saasId: '88888888', + specValue: '礼盒款', + image: '', + }, + ], + }, + ], + promotionList: null, + minProfitPrice: null, + etitle: '', + }, + { + saasId: '88888888', + storeId: '1000', + spuId: '135681622', + title: '简约餐盘耐热家用盘子菜盘套装多颜色简约餐盘耐热家用盘子', + primaryImage: 'https://cdn-we-retail.ym.tencent.com/tsr/goods/gh-1a.png', + images: [ + 'https://cdn-we-retail.ym.tencent.com/tsr/goods/gh-1a.png', + 'https://cdn-we-retail.ym.tencent.com/tsr/goods/gh-1a2.png', + 'https://cdn-we-retail.ym.tencent.com/tsr/goods/gh-1b.png', + ], + minSalePrice: '129900', + minLinePrice: '218000', + maxSalePrice: '139900', + maxLinePrice: '218000', + isSoldOut: false, + desc: [ + 'https://cdn-we-retail.ym.tencent.com/tsr/goods/gh-1c.png', + 'https://cdn-we-retail.ym.tencent.com/tsr/goods/gh-1d.png', + ], + groupIdList: [ + '14023', + '127886732665303040', + '127886733101511680', + '127886733923595520', + '14025', + '127886726071855616', + '14026', + '127886728957538048', + '127886727481142784', + '127886729779621888', + '127886730165497088', + '127886730652037376', + '127886731440566784', + '127886729360190464', + '15029', + '15030', + ], + spuTagList: [{ + id: null, + title: '掌柜热卖', + image: null, + }, ], + skuList: [{ + skuId: '135676623', + skuImage: null, + specInfo: [{ + specId: '127904180600844800', + specTitle: null, + specValueId: '127904181506815488', + specValue: '奶黄色', + }, + { + specId: '127904861604820480', + specTitle: null, + specValueId: '127904862175246592', + specValue: '单盘', + }, + ], + priceInfo: [{ + priceType: 1, + price: '129900', + priceTypeName: '销售价格', + }, + { + priceType: 2, + price: '218000', + priceTypeName: '划线价格', + }, + ], + stockInfo: { + stockQuantity: 119, + safeStockQuantity: 0, + soldQuantity: 0, + }, + weight: null, + volume: null, + profitPrice: null, + }, + { + skuId: '135676624', + skuImage: null, + specInfo: [{ + specId: '127904180600844800', + specTitle: null, + specValueId: '127904181506815488', + specValue: '奶黄色', + }, + { + specId: '127904861604820480', + specTitle: null, + specValueId: '127904861755815680', + specValue: '盘+碗', + }, + ], + priceInfo: [{ + priceType: 1, + price: '139900', + priceTypeName: '销售价格', + }, + { + priceType: 2, + price: '218000', + priceTypeName: '划线价格', + }, + ], + stockInfo: { + stockQuantity: 116, + safeStockQuantity: 0, + soldQuantity: 0, + }, + weight: null, + volume: null, + profitPrice: null, + }, + { + skuId: '135681623', + skuImage: null, + specInfo: [{ + specId: '127904180600844800', + specTitle: null, + specValueId: '127904181506815488', + specValue: '奶黄色', + }, + { + specId: '127904861604820480', + specTitle: null, + specValueId: '127904862007474176', + specValue: '单盘', + }, + ], + priceInfo: [{ + priceType: 1, + price: '139900', + priceTypeName: '销售价格', + }, + { + priceType: 2, + price: '218000', + priceTypeName: '划线价格', + }, + ], + stockInfo: { + stockQuantity: 122, + safeStockQuantity: 0, + soldQuantity: 0, + }, + weight: null, + volume: null, + profitPrice: null, + }, + ], + isAvailable: 1, + spuStockQuantity: 357, + soldNum: 23102, + isPutOnSale: 1, + specList: [{ + specId: '127904180600844800', + title: '颜色', + specValueList: [{ + specValueId: '127904181506815488', + specId: '127904180600844800', + saasId: '88888888', + specValue: '奶黄色', + image: '', + }, ], + }, + { + specId: '127904861604820480', + title: '类型', + specValueList: [{ + specValueId: '127904862175246592', + specId: '127904861604820480', + saasId: '88888888', + specValue: '单盘', + image: '', + }, + { + specValueId: '127904862007474176', + specId: '127904861604820480', + saasId: '88888888', + specValue: '单碗', + image: '', + }, + { + specValueId: '127904861755815680', + specId: '127904861604820480', + saasId: '88888888', + specValue: '盘+碗', + image: '', + }, + ], + }, + ], + promotionList: null, + minProfitPrice: null, + etitle: '', + }, + { + saasId: '88888888', + storeId: '1000', + spuId: '135681624', + title: '不锈钢刀叉勺套装家用西餐餐具ins简约耐用不锈钢金色银色可选', + primaryImage: 'https://cdn-we-retail.ym.tencent.com/tsr/goods/gh-2b.png', + images: [ + 'https://cdn-we-retail.ym.tencent.com/tsr/goods/gh-2a.png', + 'https://cdn-we-retail.ym.tencent.com/tsr/goods/gh-2a1.png', + 'https://cdn-we-retail.ym.tencent.com/tsr/goods/gh-2b.png', + ], + video: null, + available: 1, + minSalePrice: '19900', + minLinePrice: '19900', + maxSalePrice: '29900', + maxLinePrice: '29900', + spuStockQuantity: 0, + soldNum: 102, + isPutOnSale: 1, + categoryIds: [ + '127880527393854975', + '127880527393854977', + '127880526789875961', + ], + specList: [{ + specId: '127904180600844800', + title: '颜色', + specValueList: [{ + specValueId: '127904180768617216', + specId: null, + saasId: null, + specValue: '奶黄色', + image: null, + }, ], + }, + { + specId: '127904861604820480', + title: '数量', + specValueList: [{ + specValueId: '127904862175246592', + specId: null, + saasId: null, + specValue: '三件套', + image: null, + }, + { + specValueId: '127904862007474176', + specId: null, + saasId: null, + specValue: '六件套', + image: null, + }, + { + specValueId: '127904861755815680', + specId: null, + saasId: null, + specValue: '八件套', + image: null, + }, + ], + }, + ], + skuList: [{ + skuId: '135676625', + skuImage: null, + specInfo: [{ + specId: '127904180600844800', + specTitle: null, + specValueId: '127904180768617216', + specValue: null, + }, + { + specId: '127904861604820480', + specTitle: null, + specValueId: '127904862175246592', + specValue: null, + }, + ], + priceInfo: [{ + priceType: 1, + price: '19900', + priceTypeName: null + }, + { + priceType: 2, + price: '29900', + priceTypeName: null + }, + ], + stockInfo: { + stockQuantity: 0, + safeStockQuantity: 0, + soldQuantity: 0, + }, + weight: { + value: null, + unit: 'KG' + }, + volume: null, + profitPrice: null, + }, + { + skuId: '135676626', + skuImage: null, + specInfo: [{ + specId: '127904180600844800', + specTitle: null, + specValueId: '127904180768617216', + specValue: null, + }, + { + specId: '127904861604820480', + specTitle: null, + specValueId: '127904861755815680', + specValue: null, + }, + ], + priceInfo: [{ + priceType: 1, + price: '29900', + priceTypeName: null + }, + { + priceType: 2, + price: '29900', + priceTypeName: null + }, + ], + stockInfo: { + stockQuantity: 0, + safeStockQuantity: 0, + soldQuantity: 0, + }, + weight: { + value: null, + unit: 'KG' + }, + volume: null, + profitPrice: null, + }, + { + skuId: '135681625', + skuImage: null, + specInfo: [{ + specId: '127904180600844800', + specTitle: null, + specValueId: '127904180768617216', + specValue: null, + }, + { + specId: '127904861604820480', + specTitle: null, + specValueId: '127904862007474176', + specValue: null, + }, + ], + priceInfo: [{ + priceType: 1, + price: '29900', + priceTypeName: null + }, + { + priceType: 2, + price: '29900', + priceTypeName: null + }, + ], + stockInfo: { + stockQuantity: 0, + safeStockQuantity: 0, + soldQuantity: 0, + }, + weight: { + value: null, + unit: 'KG' + }, + volume: null, + profitPrice: null, + }, + ], + spuTagList: [{ + id: '19011', + title: '2020秋季新款', + image: null + }], + spuLimitList: null, + desc: [ + 'https://cdn-we-retail.ym.tencent.com/tsr/goods/gh-2c.png', + 'https://cdn-we-retail.ym.tencent.com/tsr/goods/gh-2d.png', + ], + etitle: '', + }, + { + saasId: '88888888', + storeId: '1000', + spuId: '135681628', + title: '带帽午休毯虎年款多功能加厚加大加绒简约多功能午休毯连帽披肩', + primaryImage: 'https://cdn-we-retail.ym.tencent.com/tsr/goods/muy-3a.png', + images: ['https://cdn-we-retail.ym.tencent.com/tsr/goods/muy-3a.png'], + video: null, + available: 1, + minSalePrice: '29900', + minLinePrice: '29900', + maxSalePrice: '39900', + maxLinePrice: '39900', + spuStockQuantity: 321, + soldNum: 103, + isPutOnSale: 1, + categoryIds: [ + '127880527393854975', + '127880527393854977', + '127880526789875961', + ], + specList: [{ + specId: '127904180600844800', + title: '颜色', + specValueList: [{ + specValueId: '127904181322265856', + specId: null, + saasId: null, + specValue: '浅灰色', + image: null, + }, ], + }, + { + specId: '127904861604820480', + title: '尺码', + specValueList: [{ + specValueId: '127904862175246592', + specId: null, + saasId: null, + specValue: 'S', + image: null, + }, + { + specValueId: '127904862007474176', + specId: null, + saasId: null, + specValue: 'M', + image: null, + }, + { + specValueId: '127904861755815680', + specId: null, + saasId: null, + specValue: 'L', + image: null, + }, + ], + }, + ], + skuList: [{ + skuId: '135676629', + skuImage: 'https://cdn-we-retail.ym.tencent.com/tsr/goods/muy-3a.png', + specInfo: [{ + specId: '127904180600844800', + specTitle: null, + specValueId: '127904181322265856', + specValue: null, + }, + { + specId: '127904861604820480', + specTitle: null, + specValueId: '127904862175246592', + specValue: null, + }, + ], + priceInfo: [{ + priceType: 1, + price: '29900', + priceTypeName: null + }, + { + priceType: 2, + price: '39900', + priceTypeName: null + }, + ], + stockInfo: { + stockQuantity: 80, + safeStockQuantity: 0, + soldQuantity: 0, + }, + weight: { + value: null, + unit: 'KG' + }, + volume: null, + profitPrice: null, + }, + { + skuId: '135676630', + skuImage: 'https://cdn-we-retail.ym.tencent.com/tsr/goods/muy-3a.png', + specInfo: [{ + specId: '127904180600844800', + specTitle: null, + specValueId: '127904181322265856', + specValue: null, + }, + { + specId: '127904861604820480', + specTitle: null, + specValueId: '127904861755815680', + specValue: null, + }, + ], + priceInfo: [{ + priceType: 1, + price: '39900', + priceTypeName: null + }, + { + priceType: 2, + price: '39900', + priceTypeName: null + }, + ], + stockInfo: { + stockQuantity: 122, + safeStockQuantity: 0, + soldQuantity: 0, + }, + weight: { + value: null, + unit: 'KG' + }, + volume: null, + profitPrice: null, + }, + { + skuId: '135681629', + skuImage: 'https://cdn-we-retail.ym.tencent.com/tsr/goods/muy-3a.png', + specInfo: [{ + specId: '127904180600844800', + specTitle: null, + specValueId: '127904181322265856', + specValue: null, + }, + { + specId: '127904861604820480', + specTitle: null, + specValueId: '127904862007474176', + specValue: null, + }, + ], + priceInfo: [{ + priceType: 1, + price: '39900', + priceTypeName: null + }, + { + priceType: 2, + price: '39900', + priceTypeName: null + }, + ], + stockInfo: { + stockQuantity: 119, + safeStockQuantity: 0, + soldQuantity: 0, + }, + weight: { + value: null, + unit: 'KG' + }, + volume: null, + profitPrice: null, + }, + ], + spuTagList: [{ + id: '13001', + title: '限时抢购', + image: null + }], + spuLimitList: null, + desc: [ + 'https://cdn-we-retail.ym.tencent.com/tsr/goods/muy-3c.png', + 'https://cdn-we-retail.ym.tencent.com/tsr/goods/muy-3d.png', + ], + etitle: '', + }, +]; + +/** + * @param {string} id + * @param {number} [available] 库存, 默认1 + */ +export function genGood(id, available = 1) { + const specID = ['135681624', '135681628']; + if (specID.indexOf(id) > -1) { + return allGoods.filter((good) => good.spuId === id)[0]; + } + const item = allGoods[id % allGoods.length]; + return { + ...item, + spuId: `${id}`, + available: available, + desc: item?.desc || defaultDesc, + images: item?.images || [item?.primaryImage], + }; +} \ No newline at end of file diff --git a/scr/miniprogram-2/model/goods.js b/scr/miniprogram-2/model/goods.js new file mode 100644 index 0000000..850e0ba --- /dev/null +++ b/scr/miniprogram-2/model/goods.js @@ -0,0 +1,7 @@ +import { genGood } from './good'; + +export function getGoodsList(baseID = 0, length = 10) { + return new Array(length).fill(0).map((_, idx) => genGood(idx + baseID)); +} + +export const goodsList = getGoodsList(); diff --git a/scr/miniprogram-2/model/order/applyService.js b/scr/miniprogram-2/model/order/applyService.js new file mode 100644 index 0000000..e3a2fdf --- /dev/null +++ b/scr/miniprogram-2/model/order/applyService.js @@ -0,0 +1,295 @@ +import { mockIp, mockReqId } from '../../utils/mock'; + +const orderResps = [ + { + data: { + saasId: '88888888', + uid: '88888888205468', + storeId: '1000', + skuId: '135691625', + numOfSku: 1, + numOfSkuAvailable: 1, + refundableAmount: '26900', + refundableDiscountAmount: '0', + shippingFeeIncluded: '0', + paidAmountEach: '26900', + boughtQuantity: 1, + orderNo: '132222623132329291', + goodsInfo: { + goodsName: + '迷你便携高颜值蓝牙无线耳机立体声只能触控式操作简约立体声耳机', + skuImage: 'https://cdn-we-retail.ym.tencent.com/tsr/goods/dz-2a.png', + specInfo: [ + { + specId: '50456', + specTitle: '颜色', + specValue: '黑色', + }, + { + specId: '50459', + specTitle: '尺码', + specValue: '简约款', + }, + ], + }, + }, + code: 'Success', + msg: null, + requestId: mockReqId(), + clientIp: mockIp(), + rt: 36, + success: true, + }, + { + data: { + saasId: '88888888', + uid: '88888888205468', + storeId: '1000', + skuId: '135676631', + numOfSku: 1, + numOfSkuAvailable: 1, + refundableAmount: '26900', + refundableDiscountAmount: '0', + shippingFeeIncluded: '0', + paidAmountEach: '26900', + boughtQuantity: 1, + orderNo: '132222623132329291', + goodsInfo: { + goodsName: '白色短袖连衣裙荷叶边裙摆宽松韩版休闲纯白清爽优雅连衣裙', + skuImage: 'https://cdn-we-retail.ym.tencent.com/tsr/goods/nz-09a.png', + specInfo: [ + { + specId: '50456', + specTitle: '颜色', + specValue: '米色荷叶边', + }, + { + specId: '50459', + specTitle: '尺码', + specValue: 'S', + }, + ], + }, + }, + code: 'Success', + msg: null, + requestId: mockReqId(), + clientIp: mockIp(), + rt: 36, + success: true, + }, + { + data: { + saasId: '88888888', + uid: '88888888205468', + storeId: '1000', + skuId: '135691622', + numOfSku: 1, + numOfSkuAvailable: 1, + refundableAmount: '26900', + refundableDiscountAmount: '0', + shippingFeeIncluded: '0', + paidAmountEach: '26900', + boughtQuantity: 1, + orderNo: '132222623132329291', + goodsInfo: { + goodsName: '腾讯极光盒子4智能网络电视机顶盒6K千兆网络机顶盒4K高分辨率', + skuImage: 'https://cdn-we-retail.ym.tencent.com/tsr/goods/dz-3a.png', + specInfo: [ + { + specId: '50456', + specTitle: '颜色', + specValue: '经典白', + }, + { + specId: '50459', + specTitle: '类型', + specValue: '经典套装', + }, + ], + }, + }, + code: 'Success', + msg: null, + requestId: mockReqId(), + clientIp: mockIp(), + rt: 36, + success: true, + }, + { + data: { + saasId: '88888888', + uid: '88888888205468', + storeId: '1000', + skuId: '135676629', + numOfSku: 1, + numOfSkuAvailable: 1, + refundableAmount: '26900', + refundableDiscountAmount: '0', + shippingFeeIncluded: '0', + paidAmountEach: '26900', + boughtQuantity: 1, + orderNo: '132222623132329291', + goodsInfo: { + goodsName: '带帽午休毯虎年款多功能加厚加大加绒简约多功能午休毯连帽披肩', + skuImage: 'https://cdn-we-retail.ym.tencent.com/tsr/goods/muy-3a.png', + specInfo: [ + { + specId: '50456', + specTitle: '颜色', + specValue: '浅灰色', + }, + { + specId: '50459', + specTitle: '尺码', + specValue: 'S', + }, + ], + }, + }, + code: 'Success', + msg: null, + requestId: mockReqId(), + clientIp: mockIp(), + rt: 36, + success: true, + }, + { + data: { + saasId: '88888888', + uid: '88888888205468', + storeId: '1000', + skuId: '135686631', + numOfSku: 1, + numOfSkuAvailable: 1, + refundableAmount: '26900', + refundableDiscountAmount: '0', + shippingFeeIncluded: '0', + paidAmountEach: '26900', + boughtQuantity: 1, + orderNo: '132222623132329291', + goodsInfo: { + goodsName: '运动连帽拉链卫衣休闲开衫长袖多色运动细绒面料运动上衣', + skuImage: 'https://cdn-we-retail.ym.tencent.com/tsr/goods/nz-17a.png', + specInfo: [ + { + specId: '50456', + specTitle: '颜色', + specValue: '军绿色', + }, + { + specId: '50459', + specTitle: '尺码', + specValue: 'XS', + }, + ], + }, + }, + code: 'Success', + msg: null, + requestId: mockReqId(), + clientIp: mockIp(), + rt: 36, + success: true, + }, + { + data: { + saasId: '88888888', + uid: '88888888205468', + storeId: '1000', + skuId: '19384938948343', + numOfSku: 1, + numOfSkuAvailable: 1, + refundableAmount: '26900', + refundableDiscountAmount: '0', + shippingFeeIncluded: '0', + paidAmountEach: '26900', + boughtQuantity: 1, + orderNo: '130169571554503755', + goodsInfo: { + goodsName: + '纯色纯棉休闲圆领短袖T恤纯白亲肤厚柔软细腻面料纯白短袖套头T恤', + skuImage: 'https://cdn-we-retail.ym.tencent.com/tsr/goods/nz-08b.png', + specInfo: [ + { + specId: '50456', + specTitle: '颜色', + specValue: '军绿色', + }, + { + specId: '50459', + specTitle: '尺码', + specValue: 'XS', + }, + ], + }, + }, + code: 'Success', + msg: null, + requestId: mockReqId(), + clientIp: mockIp(), + rt: 36, + success: true, + }, +]; + +export function genRightsPreview(params) { + const { orderNo, skuId } = params; + const resp = orderResps.find( + (r) => r.data.orderNo === orderNo && r.data.skuId === skuId, + ); + return resp; +} + +export function genApplyReasonList(params) { + const resp = { + data: { + saasId: '70000001', + rightsReasonList: [ + { id: '1', desc: '实际商品与描述不符' }, + { id: '2', desc: '质量问题' }, + { id: '3', desc: '少件/漏发' }, + { id: '4', desc: '包装/商品/污迹/裂痕/变形' }, + { id: '5', desc: '发货太慢' }, + { id: '6', desc: '物流配送太慢' }, + { id: '7', desc: '商家发错货' }, + { id: '8', desc: '不喜欢' }, + ], + }, + code: 'Success', + msg: null, + requestId: mockReqId(), + clientIp: mockIp(), + rt: 6, + success: true, + }; + // 未收货对应的原因列表 + if (params.rightsReasonType === 'REFUND_MONEY') { + resp.data.rightsReasonList = [ + { id: '9', desc: '空包裹' }, + { id: '10', desc: '快递/物流一直未送到' }, + { id: '11', desc: '货物破损已拒签' }, + { id: '12', desc: '不喜欢' }, + ]; + } + return resp; +} + +export function applyService() { + const resp = { + data: { + rightsNo: '123123423', + saasId: '70000001', + uid: '700000011070005', + storeId: '542', + result: null, + }, + code: 'Success', + msg: null, + requestId: mockReqId(), + clientIp: mockIp(), + rt: 269, + success: true, + }; + return resp; +} diff --git a/scr/miniprogram-2/model/order/orderConfirm.js b/scr/miniprogram-2/model/order/orderConfirm.js new file mode 100644 index 0000000..7170492 --- /dev/null +++ b/scr/miniprogram-2/model/order/orderConfirm.js @@ -0,0 +1,147 @@ +import { mockIp, mockReqId } from '../../utils/mock'; + +export const transformGoodsDataToConfirmData = (goodsDataList) => { + const list = []; + + goodsDataList.forEach((goodsData) => { + list.push({ + storeId: goodsData.storeId, + spuId: goodsData.spuId, + skuId: goodsData.skuId, + goodsName: goodsData.title, + image: goodsData.primaryImage, + reminderStock: 119, + quantity: goodsData.quantity, + payPrice: goodsData.price, + totalSkuPrice: goodsData.price, + discountSettlePrice: goodsData.price, + realSettlePrice: goodsData.price, + settlePrice: goodsData.price, + oriPrice: goodsData.originPrice, + tagPrice: null, + tagText: null, + skuSpecLst: goodsData.specInfo, + promotionIds: null, + weight: 0.0, + unit: 'KG', + volume: null, + masterGoodsType: 0, + viceGoodsType: 0, + roomId: goodsData.roomId, + egoodsName: null, + }); + }); + + return list; +}; + +/** 生成结算数据 */ +export function genSettleDetail(params) { + const { userAddressReq, couponList, goodsRequestList } = params; + + const resp = { + data: { + settleType: 0, + userAddress: null, + totalGoodsCount: 3, + packageCount: 1, + totalAmount: '289997', + totalPayAmount: '', + totalDiscountAmount: '110000', + totalPromotionAmount: '1100', + totalCouponAmount: '0', + totalSalePrice: '289997', + totalGoodsAmount: '289997', + totalDeliveryFee: '0', + invoiceRequest: null, + skuImages: null, + deliveryFeeList: null, + storeGoodsList: [ + { + storeId: '1000', + storeName: '云Mall深圳旗舰店', + remark: null, + goodsCount: 1, + deliveryFee: '0', + deliveryWords: null, + storeTotalAmount: '0', + storeTotalPayAmount: '179997', + storeTotalDiscountAmount: '110000', + storeTotalCouponAmount: '0', + skuDetailVos: [], + couponList: [ + { + couponId: 11, + storeId: '1000', + }, + ], + }, + ], + inValidGoodsList: null, + outOfStockGoodsList: null, + limitGoodsList: null, + abnormalDeliveryGoodsList: null, + invoiceSupport: 1, + }, + code: 'Success', + msg: null, + requestId: mockReqId(), + clientIp: mockIp(), + rt: 244, + success: true, + }; + + const list = transformGoodsDataToConfirmData(goodsRequestList); + + // 获取购物车传递的商品数据 + resp.data.storeGoodsList[0].skuDetailVos = list; + + // 判断是否携带优惠券数据 + const discountPrice = []; + + if (couponList && couponList.length > 0) { + couponList.forEach((coupon) => { + if (coupon.status === 'default') { + discountPrice.push({ + type: coupon.type, + value: coupon.value, + }); + } + }); + } + + // 模拟计算场景 + + // 计算总价 + const totalPrice = list.reduce((pre, cur) => { + return pre + cur.quantity * Number(cur.settlePrice); + }, 0); + + // 计算折扣 + const totalDiscountPrice = + discountPrice.length > 0 + ? discountPrice.reduce((pre, cur) => { + if (cur.type === 1) { + return pre + cur.value; + } + if (cur.type === 2) { + return pre + (Number(totalPrice) * cur.value) / 10; + } + + return pre + cur; + }, 0) + : 0; + + resp.data.totalSalePrice = totalPrice; + + resp.data.totalCouponAmount = totalDiscountPrice; + + resp.data.totalPayAmount = + totalPrice - totalDiscountPrice - Number(resp.data.totalPromotionAmount); + + if (userAddressReq) { + resp.data.settleType = 1; + resp.data.userAddress = userAddressReq; + } + return resp; +} diff --git a/scr/miniprogram-2/model/order/orderDetail.js b/scr/miniprogram-2/model/order/orderDetail.js new file mode 100644 index 0000000..032a08b --- /dev/null +++ b/scr/miniprogram-2/model/order/orderDetail.js @@ -0,0 +1,1212 @@ +import { mockIp, mockReqId } from '../../utils/mock'; + +const orderResps = [ + { + data: { + saasId: '88888888', + storeId: '1000', + storeName: '云Mall深圳旗舰店', + uid: '88888888205468', + parentOrderNo: '354021731671873099', + orderId: '354021735982432279', + orderNo: '354021731671873099', + orderType: 0, + orderSubType: 0, + orderStatus: 5, + orderSubStatus: null, + totalAmount: '10010', + goodsAmount: '10000', + goodsAmountApp: '10000', + paymentAmount: '20', + freightFee: '10', + packageFee: '0', + discountAmount: '9990', + channelType: 0, + channelSource: '', + channelIdentity: '', + remark: '买电风扇送电池吗', + cancelType: 0, + cancelReasonType: 0, + cancelReason: '', + rightsType: 0, + createTime: '1600350829288', + orderItemVOs: [ + { + id: '354021736133427225', + orderNo: null, + spuId: '3', + skuId: '135696670', + roomId: null, + goodsMainType: 0, + goodsViceType: 0, + goodsName: + '腾讯极光盒子4智能网络电视机顶盒6K千兆网络机顶盒4K高分辨率', + specifications: [ + { specTitle: '颜色', specValue: '贵族青' }, + { specTitle: '类型', specValue: '尊享礼盒装' }, + ], + goodsPictureUrl: + 'https://cdn-we-retail.ym.tencent.com/tsr/goods/dz-3b.png', + originPrice: '0', + actualPrice: '9999', + buyQuantity: 1, + itemTotalAmount: '9999', + itemDiscountAmount: '9990', + itemPaymentAmount: '10', + goodsPaymentPrice: '10', + tagPrice: null, + tagText: null, + outCode: null, + labelVOs: null, + buttonVOs: [{ primary: false }], + }, + ], + logisticsVO: { + logisticsType: 1, + logisticsNo: '', + logisticsStatus: null, + logisticsCompanyCode: '', + logisticsCompanyName: '', + receiverAddressId: '14', + provinceCode: '440000', + cityCode: '440300', + countryCode: '440306', + receiverProvince: '广东省', + receiverCity: '深圳市', + receiverCountry: '宝安区', + receiverArea: '', + receiverAddress: '沙井中心路28号丽沙花都xx栋xx号', + receiverPostCode: '', + receiverLongitude: '113.829127', + receiverLatitude: '22.713649', + receiverIdentity: '88888888205468', + receiverPhone: '17612345678', + receiverName: '测试用户', + expectArrivalTime: null, + senderName: '', + senderPhone: '', + senderAddress: '', + sendTime: null, + arrivalTime: null, + }, + paymentVO: { + payStatus: 1, + amount: '20', + currency: null, + payType: null, + payWay: null, + payWayName: null, + interactId: null, + traceNo: null, + channelTrxNo: null, + period: null, + payTime: null, + paySuccessTime: null, + }, + buttonVOs: [{ primary: true, type: 1, name: '付款' }], + labelVOs: null, + invoiceVO: null, + couponAmount: '0', + autoCancelTime: '1823652629288', + orderStatusName: '待付款', + orderSatusRemark: '需支付¥0.20', + logisticsLogVO: null, + invoiceStatus: 3, + invoiceDesc: '暂不开发票', + invoiceUrl: null, + }, + code: 'Success', + msg: null, + requestId: mockReqId(), + clientIp: mockIp(), + rt: 89, + success: true, + }, + { + data: { + saasId: '88888888', + storeId: '1000', + storeName: '云Mall深圳旗舰店', + uid: '88888888205468', + + parentOrderNo: '132381532610540875', + orderId: '132381537256650240', + orderNo: '132381532610540875', + orderType: 0, + orderSubType: 0, + orderStatus: 10, + orderSubStatus: null, + totalAmount: '76600', + goodsAmount: '76600', + goodsAmountApp: '76600', + paymentAmount: '36800', + freightFee: '0', + packageFee: '0', + discountAmount: '34800', + channelType: 0, + channelSource: '', + channelIdentity: '', + remark: '麻烦给个配饰', + cancelType: 0, + cancelReasonType: 0, + cancelReason: '', + rightsType: 0, + + createTime: '1587140043976', + + orderItemVOs: [ + { + id: '132381537407645696', + orderNo: null, + spuId: '0', + skuId: '135676631', + roomId: null, + goodsMainType: 0, + goodsViceType: 0, + goodsName: '白色短袖连衣裙荷叶边裙摆宽松韩版休闲纯白清爽优雅连衣裙', + goodsPictureUrl: + 'https://cdn-we-retail.ym.tencent.com/tsr/goods/nz-09a.png', + originPrice: '40000', + actualPrice: '29800', + specifications: [ + { + specTitle: '颜色', + specValue: '米色荷叶边', + }, + { + specTitle: '尺码', + specValue: 'S', + }, + ], + buyQuantity: 1, + itemTotalAmount: '29800', + itemDiscountAmount: '19813', + itemPaymentAmount: '9987', + goodsPaymentPrice: '9987', + tagPrice: null, + tagText: null, + outCode: null, + labelVOs: null, + buttonVOs: null, + }, + { + id: '132381537407645952', + orderNo: null, + spuId: '7', + skuId: '135691633', + roomId: null, + goodsMainType: 0, + goodsViceType: 0, + goodsName: + '不锈钢刀叉勺套装家用西餐餐具ins简约耐用不锈钢金色银色可选', + goodsPictureUrl: + 'https://cdn-we-retail.ym.tencent.com/tsr/goods/gh-2b.png', + originPrice: '29900', + actualPrice: '19900', + specifications: [ + { specTitle: '颜色', specValue: '奶黄色' }, + { specTitle: '类型', specValue: '三件套' }, + ], + buyQuantity: 1, + itemTotalAmount: '19900', + itemDiscountAmount: '13230', + itemPaymentAmount: '6670', + goodsPaymentPrice: '6670', + tagPrice: null, + tagText: null, + outCode: null, + labelVOs: null, + buttonVOs: null, + }, + { + id: '132381537407646208', + orderNo: null, + spuId: '1', + skuId: '135691631', + roomId: null, + goodsMainType: 0, + goodsViceType: 0, + goodsName: + '纯色纯棉休闲圆领短袖T恤纯白亲肤厚柔软细腻面料纯白短袖套头T恤', + goodsPictureUrl: + 'https://cdn-we-retail.ym.tencent.com/tsr/goods/nz-08a.png', + originPrice: '31900', + actualPrice: '26900', + specifications: [ + { + specTitle: '颜色', + specValue: '白色', + }, + { + specTitle: '尺码', + specValue: 'S', + }, + ], + buyQuantity: 1, + itemTotalAmount: '26900', + itemDiscountAmount: '6757', + itemPaymentAmount: '20143', + goodsPaymentPrice: '20143', + tagPrice: null, + tagText: null, + outCode: null, + labelVOs: null, + buttonVOs: null, + }, + ], + logisticsVO: { + logisticsType: 1, + logisticsNo: '', + logisticsStatus: null, + logisticsCompanyCode: '', + logisticsCompanyName: '', + + receiverAddressId: '2', + provinceCode: '440000', + cityCode: '440300', + countryCode: '440306', + receiverProvince: '广东省', + receiverCity: '广州市', + receiverCountry: '海珠区', + receiverArea: '', + receiverAddress: '新港中路397号', + receiverPostCode: '', + receiverLongitude: '113.829127', + receiverLatitude: '22.713649', + receiverIdentity: '88888888205468', + receiverPhone: '17612345678', + receiverName: '张三', + expectArrivalTime: null, + senderName: '', + senderPhone: '', + senderAddress: '', + sendTime: null, + arrivalTime: null, + }, + paymentVO: { + payStatus: 1, + amount: '36800', + currency: 'CNY', + payType: 0, + payWay: null, + payWayName: null, + interactId: '4923587', + traceNo: null, + channelTrxNo: null, + period: null, + payTime: '1600162877000', + paySuccessTime: '1600162877538', + }, + buttonVOs: [ + { + primary: false, + type: 2, + name: '取消订单', + }, + { + primary: true, + type: 9, + name: '再次购买', + }, + ], + labelVOs: null, + invoiceVO: { + buyerName: '腾讯计算机有限公司', //个人或公司名称 + buyerTaxNo: '9144 9808 0909 0293 XG', //税号 + buyerPhone: '18600008888', //手机 + email: '73900484@qq.com', //邮箱 + titleType: 2, //发票抬头 1-个人 2-公司 + ontentType: 1, //发票内容 1-明细 2类别 + invoiceType: 5, //是否开票 0-不开 5-电子发票 + money: '1.54', + }, + trajectoryVos: [ + { + title: '已下单', + icon: 'https://cdn-we-retail.ym.tencent.com/web/trajectoryIcons/ordered.svg', + code: '200002', + nodes: [ + { + status: '订单已经支付成功,支付方式为:微信支付', + timestamp: '1600162877506', + remark: null, + }, + ], + isShow: true, + }, + { + title: '', + icon: null, + code: '200001', + nodes: [ + { + status: '订单已提交', + timestamp: '1600162856204', + remark: null, + }, + ], + isShow: true, + }, + ], + + couponAmount: '5000', + autoCancelTime: null, + orderStatusName: '待发货', + orderSatusRemark: null, + logisticsLogVO: null, + invoiceStatus: 3, + invoiceDesc: '暂不开发票', + invoiceUrl: null, + }, + code: 'Success', + msg: null, + requestId: mockReqId(), + clientIp: mockIp(), + rt: 79, + success: true, + }, + { + data: { + saasId: '88888888', + storeId: '1000', + storeName: '云Mall深圳旗舰店', + uid: '88888888205468', + parentOrderNo: '132222623132329291', + orderId: '132222629674264064', + orderNo: '132222623132329291', + orderType: 0, + orderSubType: 0, + orderStatus: 40, + orderSubStatus: null, + totalAmount: '500400', + goodsAmount: '500400', + goodsAmountApp: '500400', + paymentAmount: '458600', + freightFee: '0', + packageFee: '0', + discountAmount: '36800', + channelType: 0, + channelSource: '', + channelIdentity: '', + remark: '我是买一送一的,记得送', + cancelType: 3, + cancelReasonType: 0, + cancelReason: '', + rightsType: 0, + createTime: '1587130572345', + orderItemVOs: [ + { + id: '132222629825259776', + orderNo: null, + spuId: '5', + skuId: '135691625', + roomId: null, + goodsMainType: 0, + goodsViceType: 0, + goodsName: + '迷你便携高颜值蓝牙无线耳机立体声只能触控式操作简约立体声耳机', + goodsPictureUrl: + 'https://cdn-we-retail.ym.tencent.com/tsr/goods/dz-2a.png', + originPrice: '15900', + actualPrice: '8900', + specifications: [ + { + specTitle: '颜色', + specValue: '黑色', + }, + { + specTitle: '尺码', + specValue: '简约款', + }, + ], + buyQuantity: 1, + itemTotalAmount: '8900', + itemDiscountAmount: '2134', + itemPaymentAmount: '6766', + goodsPaymentPrice: '6766', + tagPrice: null, + tagText: null, + outCode: null, + labelVOs: null, + buttonVOs: [{ primary: false, type: 4, name: '申请售后' }], + }, + { + id: '132222629825260032', + orderNo: null, + spuId: '0', + skuId: '135676631', + roomId: null, + goodsMainType: 0, + goodsViceType: 0, + goodsName: '白色短袖连衣裙荷叶边裙摆宽松韩版休闲纯白清爽优雅连衣裙', + goodsPictureUrl: + 'https://cdn-we-retail.ym.tencent.com/tsr/goods/nz-09a.png', + originPrice: '40000', + actualPrice: '29800', + specifications: [ + { + specTitle: '颜色', + specValue: '米色荷叶边', + }, + { + specTitle: '尺码', + specValue: 'S', + }, + ], + buyQuantity: 1, + itemTotalAmount: '29800', + itemDiscountAmount: '4026', + itemPaymentAmount: '25774', + goodsPaymentPrice: '25774', + tagPrice: null, + tagText: null, + outCode: null, + labelVOs: null, + buttonVOs: [{ primary: false, type: 4, name: '申请售后' }], + }, + { + id: '132222629825260288', + orderNo: null, + spuId: '3', + skuId: '135691622', + roomId: null, + goodsMainType: 0, + goodsViceType: 0, + goodsName: + '腾讯极光盒子4智能网络电视机顶盒6K千兆网络机顶盒4K高分辨率', + goodsPictureUrl: + 'https://cdn-we-retail.ym.tencent.com/tsr/goods/dz-3a.png', + originPrice: '16900', + actualPrice: '9900', + specifications: [ + { + specTitle: '颜色', + specValue: '经典白', + }, + { + specTitle: '类型', + specValue: '经典套装', + }, + ], + buyQuantity: 1, + itemTotalAmount: '9900', + itemDiscountAmount: '1337', + itemPaymentAmount: '8563', + goodsPaymentPrice: '8563', + tagPrice: null, + tagText: null, + outCode: null, + labelVOs: null, + buttonVOs: [{ primary: false, type: 4, name: '申请售后' }], + }, + { + id: '132222629825260544', + orderNo: null, + spuId: '135681628', + skuId: '135676629', + roomId: null, + goodsMainType: 0, + goodsViceType: 0, + goodsName: + '带帽午休毯虎年款多功能加厚加大加绒简约多功能午休毯连帽披肩', + goodsPictureUrl: + 'https://cdn-we-retail.ym.tencent.com/tsr/goods/muy-3a.png', + originPrice: '39900', + actualPrice: '29900', + specifications: [ + { + specTitle: '颜色', + specValue: '浅灰色', + }, + { + specTitle: '尺码', + specValue: 'S', + }, + ], + buyQuantity: 4, + itemTotalAmount: '119600', + itemDiscountAmount: '4040', + itemPaymentAmount: '115560', + goodsPaymentPrice: '28890', + tagPrice: null, + tagText: null, + outCode: null, + labelVOs: null, + buttonVOs: [{ primary: false, type: 4, name: '申请售后' }], + }, + { + id: '132222629825260800', + orderNo: null, + spuId: '2', + skuId: '135686631', + roomId: null, + goodsMainType: 0, + goodsViceType: 0, + goodsName: '运动连帽拉链卫衣休闲开衫长袖多色运动细绒面料运动上衣', + goodsPictureUrl: + 'https://cdn-we-retail.ym.tencent.com/tsr/goods/nz-17a.png', + originPrice: '39900', + actualPrice: '25900', + specifications: [ + { + specTitle: '颜色', + specValue: '军绿色', + }, + { + specTitle: '尺码', + specValue: 'XS', + }, + ], + buyQuantity: 1, + itemTotalAmount: '25900', + itemDiscountAmount: '392', + itemPaymentAmount: '25508', + goodsPaymentPrice: '25508', + tagPrice: null, + tagText: null, + outCode: null, + labelVOs: null, + buttonVOs: [{ primary: false, type: 4, name: '申请售后' }], + }, + ], + logisticsVO: { + logisticsType: 1, + logisticsNo: '111112', + logisticsStatus: null, + logisticsCompanyCode: 'yunda', + logisticsCompanyName: '韵达快递', + + receiverAddressId: '8', + provinceCode: '440000', + cityCode: '440300', + countryCode: '440306', + receiverProvince: '广东省', + receiverCity: '深圳市', + receiverCountry: '南山区', + receiverArea: '', + receiverAddress: '前海路333号阳光玫瑰园', + receiverPostCode: '', + receiverLongitude: '113.829127', + receiverLatitude: '22.713649', + receiverIdentity: '700000011070005', + receiverPhone: '17612345678', + receiverName: '平均线', + expectArrivalTime: null, + senderName: '', + senderPhone: '', + senderAddress: '', + sendTime: '1599795293089', + arrivalTime: null, + }, + paymentVO: { + payStatus: 1, + amount: '458600', + currency: 'CNY', + payType: 0, + payWay: null, + payWayName: null, + interactId: '66869', + traceNo: null, + channelTrxNo: null, + period: null, + payTime: '1594869391000', + paySuccessTime: '1594869391287', + }, + buttonVOs: [ + { + primary: true, + type: 3, + name: '确认收货', + }, + ], + labelVOs: null, + trajectoryVos: [ + { + title: '已发货', + icon: 'deliver', + code: '200003', + nodes: [ + { + status: '商家已发货,物流承运商:韵达快递', + timestamp: '1599795293089', + remark: null, + }, + ], + isShow: true, + }, + { + title: '已下单', + icon: 'https://cdn-we-retail.ym.tencent.com/web/trajectoryIcons/ordered.svg', + code: '200002', + nodes: [ + { + status: '订单已经支付成功,支付方式为:微信支付', + timestamp: '1594869391220', + remark: null, + }, + ], + isShow: true, + }, + { + title: '', + icon: null, + code: '200001', + nodes: [ + { + status: '订单已提交', + timestamp: '1594869381185', + remark: null, + }, + ], + isShow: true, + }, + ], + + couponAmount: '5000', + autoCancelTime: null, + orderStatusName: '待收货', + orderSatusRemark: null, + logisticsLogVO: null, + invoiceStatus: 1, + invoiceDesc: '已开发票', + invoiceUrl: null, + invoiceVO: { + buyerName: '公司名称XXXX', //个人或公司名称 + buyerTaxNo: 'R5647U7', //税号 + buyerPhone: '13534343434', //手机 + email: '123@qq.com', //邮箱 + titleType: 2, //发票抬头 1-个人 2-公司 + ontentType: 2, //发票内容 1-明细 2类别 + invoiceType: 5, //是否开票 0-不开 5-电子发票 + isInvoice: '已开票', + money: 10000, + }, + }, + code: 'Success', + msg: null, + requestId: mockReqId(), + clientIp: mockIp(), + rt: 74, + success: true, + }, + { + data: { + saasId: '88888888', + storeId: '1000', + storeName: '云Mall深圳旗舰店', + uid: '88888888205468', + parentOrderNo: '130862219672031307', + orderId: '130862224737571072', + orderNo: '130862219672031307', + orderType: 0, + orderSubType: 0, + orderStatus: 80, + orderSubStatus: null, + totalAmount: '298000', + goodsAmount: '298000', + goodsAmountApp: '298000', + paymentAmount: '263200', + freightFee: '0', + packageFee: '0', + discountAmount: '29800', + channelType: 0, + channelSource: '', + channelIdentity: '', + remark: '', + cancelType: 3, + cancelReasonType: 0, + cancelReason: '超时未支付', + rightsType: 0, + createTime: '1587049485895', + orderItemVOs: [ + { + id: '130862224922120960', + orderNo: null, + spuId: '0', + skuId: '135676631', + roomId: null, + goodsMainType: 0, + goodsViceType: 0, + goodsName: '白色短袖连衣裙荷叶边裙摆宽松韩版休闲纯白清爽优雅连衣裙', + goodsPictureUrl: + 'https://cdn-we-retail.ym.tencent.com/tsr/goods/nz-09a.png', + originPrice: '40000', + actualPrice: '29800', + specifications: [ + { specTitle: '颜色', specValue: '米色荷叶边' }, + { specTitle: '尺码', specValue: 'S' }, + ], + buyQuantity: 10, + itemTotalAmount: '298000', + itemDiscountAmount: '29800', + itemPaymentAmount: '268200', + goodsPaymentPrice: '26820', + tagPrice: null, + tagText: null, + outCode: null, + labelVOs: null, + buttonVOs: null, + }, + ], + logisticsVO: { + logisticsType: 1, + logisticsNo: '', + logisticsStatus: null, + logisticsCompanyCode: '', + logisticsCompanyName: '', + receiverAddressId: '2', + provinceCode: '440000', + cityCode: '440300', + countryCode: '440306', + receiverProvince: '广东省', + receiverCity: '深圳市', + receiverCountry: '宝安区', + receiverArea: '', + receiverAddress: '沙井中心路28号丽沙花都xx栋xx号', + receiverPostCode: '', + receiverLongitude: '113.829127', + receiverLatitude: '22.713649', + receiverIdentity: '88888888205468', + receiverPhone: '17612345678', + receiverName: '测试用户', + expectArrivalTime: null, + senderName: '', + senderPhone: '', + senderAddress: '', + sendTime: null, + arrivalTime: null, + }, + paymentVO: { + payStatus: 1, + amount: '263200', + currency: null, + payType: null, + payWay: null, + payWayName: null, + interactId: null, + traceNo: null, + channelTrxNo: null, + period: null, + payTime: null, + paySuccessTime: null, + }, + buttonVOs: null, + labelVOs: null, + invoiceVO: null, + couponAmount: '5000', + autoCancelTime: null, + orderStatusName: '已取消(未支付)', + orderSatusRemark: '超时未支付', + logisticsLogVO: null, + invoiceStatus: 2, + invoiceDesc: '暂不开发票', + invoiceUrl: null, + }, + code: 'Success', + msg: null, + requestId: mockReqId(), + clientIp: mockIp(), + rt: 70, + success: true, + }, + { + data: { + saasId: '88888888', + storeId: '1000', + storeName: '云Mall深圳旗舰店', + uid: '88888888205468', + parentOrderNo: '130494472895208267', + orderId: '130494482155052032', + orderNo: '130494472895208267', + orderType: 0, + orderSubType: 0, + orderStatus: 80, + orderSubStatus: null, + totalAmount: '59700', + goodsAmount: '59700', + goodsAmountApp: '59700', + paymentAmount: '24900', + freightFee: '0', + packageFee: '0', + discountAmount: '29800', + channelType: 0, + channelSource: '', + channelIdentity: '', + remark: '', + cancelType: 3, + cancelReasonType: 0, + cancelReason: '超时未支付', + rightsType: 0, + createTime: '1587027566726', + orderItemVOs: [ + { + id: '130494482322824704', + orderNo: null, + spuId: '7', + skuId: '135691633', + roomId: null, + goodsMainType: 0, + goodsViceType: 0, + goodsName: + '不锈钢刀叉勺套装家用西餐餐具ins简约耐用不锈钢金色银色可选', + goodsPictureUrl: + 'https://cdn-we-retail.ym.tencent.com/tsr/goods/gh-2b.png', + originPrice: '29900', + actualPrice: '19900', + specifications: [ + { specTitle: '颜色', specValue: '奶黄色' }, + { specTitle: '类型', specValue: '三件套' }, + ], + buyQuantity: 3, + itemTotalAmount: '59700', + itemDiscountAmount: '29800', + itemPaymentAmount: '29900', + goodsPaymentPrice: '9966', + tagPrice: null, + tagText: null, + outCode: null, + labelVOs: null, + buttonVOs: null, + }, + ], + logisticsVO: { + logisticsType: 1, + logisticsNo: '', + logisticsStatus: null, + logisticsCompanyCode: '', + logisticsCompanyName: '', + receiverAddressId: '2', + provinceCode: '440000', + cityCode: '440300', + countryCode: '440306', + receiverProvince: '广东省', + receiverCity: '深圳市', + receiverCountry: '宝安区', + receiverArea: '', + receiverAddress: '沙井中心路28号丽沙花都xx栋xx号', + receiverPostCode: '', + receiverLongitude: '113.829127', + receiverLatitude: '22.713649', + receiverIdentity: '88888888205468', + receiverPhone: '17612345678', + receiverName: '测试用户', + expectArrivalTime: null, + senderName: '', + senderPhone: '', + senderAddress: '', + sendTime: null, + arrivalTime: null, + }, + paymentVO: { + payStatus: 1, + amount: '24900', + currency: null, + payType: null, + payWay: null, + payWayName: null, + interactId: null, + traceNo: null, + channelTrxNo: null, + period: null, + payTime: null, + paySuccessTime: null, + }, + buttonVOs: null, + labelVOs: null, + invoiceVO: null, + couponAmount: '5000', + autoCancelTime: null, + orderStatusName: '已取消(未支付)', + orderSatusRemark: '超时未支付', + logisticsLogVO: null, + invoiceStatus: 3, + invoiceDesc: '暂不开发票', + invoiceUrl: null, + }, + code: 'Success', + msg: null, + requestId: mockReqId(), + clientIp: mockIp(), + rt: 81, + success: true, + }, + { + data: { + saasId: '88888888', + storeId: '1000', + storeName: '云Mall深圳旗舰店', + uid: '88888888205468', + parentOrderNo: '130169571554503755', + orderId: '130169572291521792', + orderNo: '130169571554503755', + orderType: 0, + orderSubType: 0, + orderStatus: 50, + orderSubStatus: null, + totalAmount: '538000', + goodsAmount: '538000', + goodsAmountApp: '538000', + paymentAmount: '508200', + freightFee: '0', + packageFee: '0', + discountAmount: '29800', + channelType: 0, + channelSource: '', + channelIdentity: '', + remark: '', + cancelType: 0, + cancelReasonType: 0, + cancelReason: '', + rightsType: 10, + createTime: '1587008200587', + orderItemVOs: [ + { + id: '130169572425740032', + orderNo: null, + spuId: '1', + skuId: '135691631', + roomId: null, + goodsMainType: 0, + goodsViceType: 0, + goodsName: + '纯色纯棉休闲圆领短袖T恤纯白亲肤厚柔软细腻面料纯白短袖套头T恤', + goodsPictureUrl: + 'https://cdn-we-retail.ym.tencent.com/tsr/goods/nz-08b.png', + originPrice: '31900', + actualPrice: '26900', + specifications: [ + { specTitle: '颜色', specValue: '橙色' }, + { specTitle: '尺码', specValue: 'M' }, + ], + buyQuantity: 20, + itemTotalAmount: '538000', + itemDiscountAmount: '29800', + itemPaymentAmount: '508200', + goodsPaymentPrice: '25410', + tagPrice: null, + tagText: null, + outCode: null, + labelVOs: null, + buttonVOs: null, + }, + ], + logisticsVO: { + logisticsType: 1, + logisticsNo: '123', + logisticsStatus: null, + logisticsCompanyCode: 'zhongtong', + logisticsCompanyName: '中通速递', + receiverAddressId: '2', + provinceCode: '440000', + cityCode: '440300', + countryCode: '440306', + receiverProvince: '广东省', + receiverCity: '深圳市', + receiverCountry: '宝安区', + receiverArea: '', + receiverAddress: '沙井中心路28号丽沙花都xx栋xx号', + receiverPostCode: '', + receiverLongitude: '113.829127', + receiverLatitude: '22.713649', + receiverIdentity: '88888888205468', + receiverPhone: '17612345678', + receiverName: '测试用户', + expectArrivalTime: null, + senderName: '', + senderPhone: '', + senderAddress: '', + sendTime: '1587008529453', + arrivalTime: '1587008623995', + }, + paymentVO: { + payStatus: 2, + amount: '508200', + currency: 'CNY', + payType: 0, + payWay: 0, + payWayName: '微信支付', + interactId: '121212', + traceNo: '121212', + channelTrxNo: '121212', + period: null, + payTime: '2020-03-23 00:00:00', + paySuccessTime: '2020-04-16 11:36:41', + }, + buttonVOs: [ + { primary: false, type: 4, name: '申请售后' }, + { primary: true, type: 6, name: '评价' }, + ], + labelVOs: null, + invoiceVO: { + buyerName: '腾讯计算机有限公司', //个人或公司名称 + buyerTaxNo: '9144 9808 0909 0293 XG', //税号 + buyerPhone: '18600008888', //手机 + email: '73900484@qq.com', //邮箱 + titleType: 2, //发票抬头 1-个人 2-公司 + ontentType: 1, //发票内容 1-明细 2类别 + invoiceType: 5, //是否开票 0-不开 5-电子发票 + money: '1.54', + }, + couponAmount: '0', + autoCancelTime: null, + orderStatusName: '交易完成', + orderSatusRemark: null, + logisticsLogVO: null, + invoiceStatus: 2, + invoiceDesc: '暂不开发票', + invoiceUrl: null, + }, + code: 'Success', + msg: null, + requestId: mockReqId(), + clientIp: mockIp(), + rt: 91, + success: true, + }, + { + data: { + saasId: '88888888', + storeId: '1000', + storeName: '云Mall深圳旗舰店', + uid: '88888888205468', + parentOrderNo: '130150835531421259', + orderId: '130150836385879808', + orderNo: '130150835531421259', + orderType: 0, + orderSubType: 0, + orderStatus: 50, + orderSubStatus: null, + totalAmount: '29800', + goodsAmount: '29800', + goodsAmountApp: '29800', + paymentAmount: '4000', + freightFee: '0', + packageFee: '0', + discountAmount: '25800', + channelType: 0, + channelSource: '', + channelIdentity: '', + remark: '', + cancelType: 0, + cancelReasonType: 0, + cancelReason: '', + rightsType: 0, + createTime: '1587007083839', + orderItemVOs: [ + { + id: '130150836520098048', + orderNo: null, + spuId: '0', + skuId: '135681631', + roomId: null, + goodsMainType: 0, + goodsViceType: 0, + goodsName: '白色短袖连衣裙荷叶边裙摆宽松韩版休闲纯白清爽优雅连衣裙', + goodsPictureUrl: + 'https://cdn-we-retail.ym.tencent.com/tsr/goods/nz-09a.png', + originPrice: '40000', + actualPrice: '29800', + specifications: [ + { specTitle: '颜色', specValue: '米色荷叶边' }, + { specTitle: '尺码', specValue: 'M' }, + ], + buyQuantity: 1, + itemTotalAmount: '29800', + itemDiscountAmount: '25800', + itemPaymentAmount: '4000', + goodsPaymentPrice: '4000', + tagPrice: null, + tagText: null, + outCode: null, + labelVOs: null, + buttonVOs: null, + }, + ], + logisticsVO: { + logisticsType: 1, + logisticsNo: '123', + logisticsStatus: null, + logisticsCompanyCode: 'yuantong', + logisticsCompanyName: '圆通速递', + receiverAddressId: '2', + provinceCode: '440000', + cityCode: '440300', + countryCode: '440306', + receiverProvince: '广东省', + receiverCity: '深圳市', + receiverCountry: '宝安区', + receiverArea: '', + receiverAddress: '沙井中心路28号丽沙花都xx栋xx号', + receiverPostCode: '', + receiverLongitude: '113.829127', + receiverLatitude: '22.713649', + receiverIdentity: '88888888205468', + receiverPhone: '17612345678', + receiverName: '测试用户', + expectArrivalTime: null, + senderName: '', + senderPhone: '', + senderAddress: '', + sendTime: '1587008539953', + arrivalTime: '1588291200508', + }, + paymentVO: { + payStatus: 2, + amount: '4000', + currency: 'RNB', + payType: 0, + payWay: 0, + payWayName: '微信支付', + interactId: '121212', + traceNo: '121212', + channelTrxNo: '121212', + period: null, + payTime: '2020-03-23 00:00:00', + paySuccessTime: '2020-04-16 11:18:09', + }, + buttonVOs: [ + { primary: false, type: 4, name: '申请售后' }, + { primary: true, type: 6, name: '评价' }, + ], + labelVOs: null, + invoiceVO: null, + couponAmount: '0', + autoCancelTime: null, + orderStatusName: '交易完成', + orderSatusRemark: null, + logisticsLogVO: null, + invoiceStatus: 2, + invoiceDesc: '暂不开发票', + invoiceUrl: null, + }, + code: 'Success', + msg: null, + requestId: mockReqId(), + clientIp: mockIp(), + rt: 95, + success: true, + }, +]; + +export function genOrderDetail(params) { + const { parameter } = params; + const resp = orderResps.find((r) => r.data.orderNo === parameter); + return resp; +} + +export function genBusinessTime() { + const resp = { + data: { + businessTime: ['周一,周二,周三,周四,周五:00:20:00-08:00:00'], + telphone: '18565372257', + saasId: '88888888', + }, + code: 'Success', + msg: null, + requestId: mockReqId(), + clientIp: mockIp(), + rt: 3, + success: true, + }; + return resp; +} diff --git a/scr/miniprogram-2/model/order/orderList.js b/scr/miniprogram-2/model/order/orderList.js new file mode 100644 index 0000000..a581fbb --- /dev/null +++ b/scr/miniprogram-2/model/order/orderList.js @@ -0,0 +1,1054 @@ +import { mockIp, mockReqId } from '../../utils/mock'; + +export function genOrders(params) { + const resp = { + data: { + pageNum: 1, + pageSize: 10, + totalCount: 7, + orders: [ + { + saasId: '88888888', + storeId: '1000', + storeName: '云Mall深圳旗舰店', + uid: '88888888205468', + parentOrderNo: '354021731671873099', + orderId: '354021735982432279', + orderNo: '354021731671873099', + orderType: 0, + orderSubType: 0, + orderStatus: 5, + orderSubStatus: null, + totalAmount: '10010', + goodsAmount: '10000', + goodsAmountApp: '10000', + paymentAmount: '20', + freightFee: '10', + packageFee: '0', + discountAmount: '9990', + channelType: 0, + channelSource: '', + channelIdentity: '', + remark: '', + cancelType: null, + cancelReasonType: null, + cancelReason: null, + rightsType: null, + createTime: '1600350829291', + orderItemVOs: [ + { + id: '354021736133427225', + orderNo: null, + spuId: '3', + skuId: '135696670', + roomId: null, + goodsMainType: 0, + goodsViceType: 0, + goodsName: + '腾讯极光盒子4智能网络电视机顶盒6K千兆网络机顶盒4K高分辨率', + specifications: [ + { specTitle: '颜色', specValue: '贵族青' }, + { specTitle: '类型', specValue: '尊享礼盒装' }, + ], + goodsPictureUrl: + 'https://cdn-we-retail.ym.tencent.com/tsr/goods/dz-3b.png', + originPrice: '0', + actualPrice: '9999', + buyQuantity: 1, + itemTotalAmount: '9999', + itemDiscountAmount: '9990', + itemPaymentAmount: '10', + goodsPaymentPrice: '10', + tagPrice: null, + tagText: null, + outCode: null, + labelVOs: null, + buttonVOs: null, + }, + ], + logisticsVO: { + logisticsType: 1, + logisticsNo: '', + logisticsStatus: null, + logisticsCompanyCode: '', + logisticsCompanyName: '', + receiverAddressId: '14', + provinceCode: '440000', + cityCode: '440300', + countryCode: '440306', + receiverProvince: '广东省', + receiverCity: '深圳市', + receiverCountry: '宝安区', + receiverArea: '', + receiverAddress: '沙井中心路28号丽沙花都xx栋xx号', + receiverPostCode: '', + receiverLongitude: '113.829127', + receiverLatitude: '22.713649', + receiverIdentity: '88888888205468', + receiverPhone: '17612345678', + receiverName: '测试用户', + expectArrivalTime: null, + senderName: '', + senderPhone: '', + senderAddress: '', + sendTime: null, + arrivalTime: null, + }, + paymentVO: { + payStatus: 1, + amount: '20', + currency: null, + payType: null, + payWay: null, + payWayName: null, + interactId: null, + traceNo: null, + channelTrxNo: null, + period: null, + payTime: null, + paySuccessTime: null, + }, + buttonVOs: [ + { primary: false, type: 2, name: '取消订单' }, + { primary: true, type: 1, name: '付款' }, + ], + labelVOs: null, + invoiceVO: null, + couponAmount: null, + autoCancelTime: '1600352629291', + orderStatusName: '待付款', + orderSatusRemark: '需支付¥0.20', + logisticsLogVO: null, + invoiceStatus: null, + invoiceDesc: null, + invoiceUrl: null, + }, + { + saasId: '88888888', + storeId: '1000', + storeName: '云Mall深圳旗舰店', + uid: '88888888205468', + parentOrderNo: '132381532610540875', + orderId: '132381537256650240', + orderNo: '132381532610540875', + orderType: 0, + orderSubType: 0, + orderStatus: 10, + orderSubStatus: null, + totalAmount: '76600', + goodsAmount: '76600', + goodsAmountApp: '76600', + paymentAmount: '36800', + freightFee: '0', + packageFee: '0', + discountAmount: '39800', + channelType: 0, + channelSource: '', + channelIdentity: '', + remark: '', + cancelType: null, + cancelReasonType: null, + cancelReason: null, + rightsType: null, + createTime: '1587140043980', + orderItemVOs: [ + { + id: '132381537407645696', + orderNo: null, + spuId: '0', + skuId: '135676631', + roomId: null, + goodsMainType: 0, + goodsViceType: 0, + goodsName: + '白色短袖连衣裙荷叶边裙摆宽松韩版休闲纯白清爽优雅连衣裙', + goodsPictureUrl: + 'https://cdn-we-retail.ym.tencent.com/tsr/goods/nz-09a.png', + originPrice: '40000', + actualPrice: '29800', + specifications: [ + { specTitle: '颜色', specValue: '米色荷叶边' }, + { specTitle: '尺码', specValue: 'S' }, + ], + buyQuantity: 1, + itemTotalAmount: '29800', + itemDiscountAmount: '19813', + itemPaymentAmount: '9987', + goodsPaymentPrice: '9987', + tagPrice: null, + tagText: null, + outCode: null, + labelVOs: null, + buttonVOs: null, + }, + { + id: '132381537407645952', + orderNo: null, + spuId: '7', + skuId: '135691633', + roomId: null, + goodsMainType: 0, + goodsViceType: 0, + goodsName: + '不锈钢刀叉勺套装家用西餐餐具ins简约耐用不锈钢金色银色可选', + goodsPictureUrl: + 'https://cdn-we-retail.ym.tencent.com/tsr/goods/gh-2b.png', + originPrice: '29900', + actualPrice: '19900', + specifications: [ + { specTitle: '颜色', specValue: '奶黄色' }, + { specTitle: '类型', specValue: '三件套' }, + ], + buyQuantity: 1, + itemTotalAmount: '19900', + itemDiscountAmount: '13230', + itemPaymentAmount: '6670', + goodsPaymentPrice: '6670', + tagPrice: null, + tagText: null, + outCode: null, + labelVOs: null, + buttonVOs: null, + }, + { + id: '132381537407646208', + orderNo: null, + spuId: '1', + skuId: '135691631', + roomId: null, + goodsMainType: 0, + goodsViceType: 0, + goodsName: + '纯色纯棉休闲圆领短袖T恤纯白亲肤厚柔软细腻面料纯白短袖套头T恤', + goodsPictureUrl: + 'https://cdn-we-retail.ym.tencent.com/tsr/goods/nz-08a.png', + originPrice: '31900', + actualPrice: '26900', + specifications: [ + { specTitle: '颜色', specValue: '白色' }, + { specTitle: '尺码', specValue: 'S' }, + ], + buyQuantity: 1, + itemTotalAmount: '26900', + itemDiscountAmount: '6757', + itemPaymentAmount: '20143', + goodsPaymentPrice: '20143', + tagPrice: null, + tagText: null, + outCode: null, + labelVOs: null, + buttonVOs: null, + }, + ], + logisticsVO: { + logisticsType: 1, + logisticsNo: '', + logisticsStatus: null, + logisticsCompanyCode: '', + logisticsCompanyName: '', + receiverAddressId: '2', + provinceCode: '440000', + cityCode: '440300', + countryCode: '440306', + receiverProvince: '广东省', + receiverCity: '深圳市', + receiverCountry: '南山区', + receiverArea: '', + receiverAddress: '前海路333号阳光玫瑰园', + receiverPostCode: '', + receiverLongitude: '113.829127', + receiverLatitude: '22.713649', + receiverIdentity: '88888888205468', + receiverPhone: '17612345678', + receiverName: '平均线', + expectArrivalTime: null, + senderName: '', + senderPhone: '', + senderAddress: '', + sendTime: null, + arrivalTime: null, + }, + paymentVO: { + payStatus: 1, + amount: '36800', + currency: null, + payType: null, + payWay: null, + payWayName: null, + interactId: null, + traceNo: null, + channelTrxNo: null, + period: null, + payTime: null, + paySuccessTime: null, + }, + buttonVOs: [ + { + primary: false, + type: 2, + name: '取消订单', + }, + { + primary: true, + type: 9, + name: '再次购买', + }, + ], + labelVOs: null, + invoiceVO: null, + couponAmount: null, + autoCancelTime: null, + orderStatusName: '待发货', + orderSatusRemark: null, + logisticsLogVO: null, + invoiceStatus: null, + invoiceDesc: null, + invoiceUrl: null, + }, + { + saasId: '88888888', + storeId: '1000', + storeName: '云Mall深圳旗舰店', + uid: '88888888205468', + parentOrderNo: '132222623132329291', + orderId: '132222629674264064', + orderNo: '132222623132329291', + orderType: 0, + orderSubType: 0, + orderStatus: 40, + orderSubStatus: null, + totalAmount: '500400', + goodsAmount: '500400', + goodsAmountApp: '500400', + paymentAmount: '458600', + freightFee: '0', + packageFee: '0', + discountAmount: '41800', + channelType: 0, + channelSource: '', + channelIdentity: '', + remark: '', + cancelType: null, + cancelReasonType: null, + cancelReason: null, + rightsType: null, + createTime: '1587130572349', + orderItemVOs: [ + { + id: '132222629825259776', + orderNo: null, + spuId: '5', + skuId: '135691625', + roomId: null, + goodsMainType: 0, + goodsViceType: 0, + goodsName: + '迷你便携高颜值蓝牙无线耳机立体声只能触控式操作简约立体声耳机', + goodsPictureUrl: + 'https://cdn-we-retail.ym.tencent.com/tsr/goods/dz-2a.png', + originPrice: '15900', + actualPrice: '8900', + specifications: [ + { specTitle: '颜色', specValue: '黑色' }, + { specTitle: '尺码', specValue: '简约' }, + ], + buyQuantity: 1, + itemTotalAmount: '8900', + itemDiscountAmount: '2134', + itemPaymentAmount: '6766', + goodsPaymentPrice: '6766', + tagPrice: null, + tagText: null, + outCode: null, + labelVOs: null, + buttonVOs: null, + }, + { + id: '132222629825260032', + orderNo: null, + spuId: '0', + skuId: '135676631', + roomId: null, + goodsMainType: 0, + goodsViceType: 0, + goodsName: + '白色短袖连衣裙荷叶边裙摆宽松韩版休闲纯白清爽优雅连衣裙', + goodsPictureUrl: + 'https://cdn-we-retail.ym.tencent.com/tsr/goods/nz-09a.png', + originPrice: '40000', + actualPrice: '29800', + specifications: [ + { specTitle: '颜色', specValue: '米色荷叶边' }, + { specTitle: '尺码', specValue: 'S' }, + ], + buyQuantity: 1, + itemTotalAmount: '29800', + itemDiscountAmount: '4026', + itemPaymentAmount: '25774', + goodsPaymentPrice: '25774', + tagPrice: null, + tagText: null, + outCode: null, + labelVOs: null, + buttonVOs: null, + }, + { + id: '132222629825260288', + orderNo: null, + spuId: '3', + skuId: '135691622', + roomId: null, + goodsMainType: 0, + goodsViceType: 0, + goodsName: + '腾讯极光盒子4智能网络电视机顶盒6K千兆网络机顶盒4K高分辨率', + goodsPictureUrl: + 'https://cdn-we-retail.ym.tencent.com/tsr/goods/dz-3a.png', + originPrice: '16900', + actualPrice: '9900', + specifications: [ + { specTitle: '颜色', specValue: '经典白' }, + { specTitle: '类型', specValue: '经典套装' }, + ], + buyQuantity: 1, + itemTotalAmount: '9900', + itemDiscountAmount: '1337', + itemPaymentAmount: '8563', + goodsPaymentPrice: '8563', + tagPrice: null, + tagText: null, + outCode: null, + labelVOs: null, + buttonVOs: null, + }, + { + id: '132222629825260544', + orderNo: null, + spuId: '135681628', + skuId: '135676629', + roomId: null, + goodsMainType: 0, + goodsViceType: 0, + goodsName: + '带帽午休毯虎年款多功能加厚加大加绒简约多功能午休毯连帽披肩', + goodsPictureUrl: + 'https://cdn-we-retail.ym.tencent.com/tsr/goods/muy-3a.png', + originPrice: '39900', + actualPrice: '29900', + specifications: [ + { specTitle: '颜色', specValue: '浅灰色' }, + { specTitle: '尺码', specValue: 'S' }, + ], + buyQuantity: 4, + itemTotalAmount: '119600', + itemDiscountAmount: '4040', + itemPaymentAmount: '115560', + goodsPaymentPrice: '28890', + tagPrice: null, + tagText: null, + outCode: null, + labelVOs: null, + buttonVOs: null, + }, + { + id: '132222629825260800', + orderNo: null, + spuId: '2', + skuId: '135686631', + roomId: null, + goodsMainType: 0, + goodsViceType: 0, + goodsName: '运动连帽拉链卫衣休闲开衫长袖多色运动细绒面料运动上衣', + goodsPictureUrl: + 'https://cdn-we-retail.ym.tencent.com/tsr/goods/nz-17a.png', + originPrice: '39900', + actualPrice: '25900', + specifications: [ + { specTitle: '颜色', specValue: '军绿色' }, + { specTitle: '尺码', specValue: 'XS' }, + ], + buyQuantity: 1, + itemTotalAmount: '25900', + itemDiscountAmount: '392', + itemPaymentAmount: '25508', + goodsPaymentPrice: '25508', + tagPrice: null, + tagText: null, + outCode: null, + labelVOs: null, + buttonVOs: null, + }, + ], + logisticsVO: { + logisticsType: 1, + logisticsNo: '', + logisticsStatus: null, + logisticsCompanyCode: '', + logisticsCompanyName: '', + receiverAddressId: '2', + provinceCode: '440000', + cityCode: '440300', + countryCode: '440306', + receiverProvince: '广东省', + receiverCity: '深圳市', + receiverCountry: '南山区', + receiverArea: '', + receiverAddress: '前海路333号阳光玫瑰园', + receiverPostCode: '', + receiverLongitude: '113.829127', + receiverLatitude: '22.713649', + receiverIdentity: '88888888205468', + receiverPhone: '17612345678', + receiverName: '平均线', + expectArrivalTime: null, + senderName: '', + senderPhone: '', + senderAddress: '', + sendTime: null, + arrivalTime: null, + }, + paymentVO: { + payStatus: 1, + amount: '458600', + currency: null, + payType: null, + payWay: null, + payWayName: null, + interactId: null, + traceNo: null, + channelTrxNo: null, + period: null, + payTime: null, + paySuccessTime: null, + }, + buttonVOs: [ + { + primary: true, + type: 3, + name: '确认收货', + }, + ], + labelVOs: null, + invoiceVO: null, + couponAmount: null, + autoCancelTime: null, + orderStatusName: '待收货', + orderSatusRemark: null, + logisticsLogVO: null, + invoiceStatus: null, + invoiceDesc: null, + invoiceUrl: null, + }, + { + saasId: '88888888', + storeId: '1000', + storeName: '云Mall深圳旗舰店', + uid: '88888888205468', + parentOrderNo: '130862219672031307', + orderId: '130862224737571072', + orderNo: '130862219672031307', + orderType: 0, + orderSubType: 0, + orderStatus: 80, + orderSubStatus: null, + totalAmount: '298000', + goodsAmount: '298000', + goodsAmountApp: '298000', + paymentAmount: '263200', + freightFee: '0', + packageFee: '0', + discountAmount: '34800', + channelType: 0, + channelSource: '', + channelIdentity: '', + remark: '', + cancelType: null, + cancelReasonType: null, + cancelReason: null, + rightsType: null, + createTime: '1587049485899', + orderItemVOs: [ + { + id: '130862224922120960', + orderNo: null, + spuId: '0', + skuId: '135676631', + roomId: null, + goodsMainType: 0, + goodsViceType: 0, + goodsName: + '白色短袖连衣裙荷叶边裙摆宽松韩版休闲纯白清爽优雅连衣裙', + goodsPictureUrl: + 'https://cdn-we-retail.ym.tencent.com/tsr/goods/nz-09a.png', + originPrice: '40000', + actualPrice: '29800', + specifications: [ + { specTitle: '颜色', specValue: '米色荷叶边' }, + { specTitle: '尺码', specValue: 'S' }, + ], + buyQuantity: 10, + itemTotalAmount: '298000', + itemDiscountAmount: '29800', + itemPaymentAmount: '268200', + goodsPaymentPrice: '26820', + tagPrice: null, + tagText: null, + outCode: null, + labelVOs: null, + buttonVOs: null, + }, + ], + logisticsVO: { + logisticsType: 1, + logisticsNo: '', + logisticsStatus: null, + logisticsCompanyCode: '', + logisticsCompanyName: '', + receiverAddressId: '2', + provinceCode: '440000', + cityCode: '440300', + countryCode: '440306', + receiverProvince: '广东省', + receiverCity: '深圳市', + receiverCountry: '南山区', + receiverArea: '', + receiverAddress: '前海路333号阳光玫瑰园', + receiverPostCode: '', + receiverLongitude: '113.829127', + receiverLatitude: '22.713649', + receiverIdentity: '88888888205468', + receiverPhone: '17612345678', + receiverName: '平均线', + expectArrivalTime: null, + senderName: '', + senderPhone: '', + senderAddress: '', + sendTime: null, + arrivalTime: null, + }, + paymentVO: { + payStatus: 1, + amount: '263200', + currency: null, + payType: null, + payWay: null, + payWayName: null, + interactId: null, + traceNo: null, + channelTrxNo: null, + period: null, + payTime: null, + paySuccessTime: null, + }, + buttonVOs: null, + labelVOs: null, + invoiceVO: null, + couponAmount: null, + autoCancelTime: null, + orderStatusName: '已取消', + orderSatusRemark: null, + logisticsLogVO: null, + invoiceStatus: null, + invoiceDesc: null, + invoiceUrl: null, + }, + { + saasId: '88888888', + storeId: '1000', + storeName: '云Mall深圳旗舰店', + uid: '88888888205468', + parentOrderNo: '130494472895208267', + orderId: '130494482155052032', + orderNo: '130494472895208267', + orderType: 0, + orderSubType: 0, + orderStatus: 80, + orderSubStatus: null, + totalAmount: '59700', + goodsAmount: '59700', + goodsAmountApp: '59700', + paymentAmount: '24900', + freightFee: '0', + packageFee: '0', + discountAmount: '34800', + channelType: 0, + channelSource: '', + channelIdentity: '', + remark: '', + cancelType: null, + cancelReasonType: null, + cancelReason: null, + rightsType: null, + createTime: '1587027566730', + orderItemVOs: [ + { + id: '130494482322824704', + orderNo: null, + spuId: '7', + skuId: '135691633', + roomId: null, + goodsMainType: 0, + goodsViceType: 0, + goodsName: + '不锈钢刀叉勺套装家用西餐餐具ins简约耐用不锈钢金色银色可选', + goodsPictureUrl: + 'https://cdn-we-retail.ym.tencent.com/tsr/goods/gh-2b.png', + originPrice: '29900', + actualPrice: '19900', + specifications: [ + { specTitle: '颜色', specValue: '奶黄色' }, + { specTitle: '类型', specValue: '三件套' }, + ], + buyQuantity: 3, + itemTotalAmount: '59700', + itemDiscountAmount: '29800', + itemPaymentAmount: '29900', + goodsPaymentPrice: '9966', + tagPrice: null, + tagText: null, + outCode: null, + labelVOs: null, + buttonVOs: null, + }, + ], + logisticsVO: { + logisticsType: 1, + logisticsNo: '', + logisticsStatus: null, + logisticsCompanyCode: '', + logisticsCompanyName: '', + receiverAddressId: '2', + provinceCode: '440000', + cityCode: '440300', + countryCode: '440306', + receiverProvince: '广东省', + receiverCity: '深圳市', + receiverCountry: '南山区', + receiverArea: '', + receiverAddress: '前海路333号阳光玫瑰园', + receiverPostCode: '', + receiverLongitude: '113.829127', + receiverLatitude: '22.713649', + receiverIdentity: '88888888205468', + receiverPhone: '17612345678', + receiverName: '平均线', + expectArrivalTime: null, + senderName: '', + senderPhone: '', + senderAddress: '', + sendTime: null, + arrivalTime: null, + }, + paymentVO: { + payStatus: 1, + amount: '24900', + currency: null, + payType: null, + payWay: null, + payWayName: null, + interactId: null, + traceNo: null, + channelTrxNo: null, + period: null, + payTime: null, + paySuccessTime: null, + }, + buttonVOs: null, + labelVOs: null, + invoiceVO: null, + couponAmount: null, + autoCancelTime: null, + orderStatusName: '已取消', + orderSatusRemark: null, + logisticsLogVO: null, + invoiceStatus: null, + invoiceDesc: null, + invoiceUrl: null, + }, + { + saasId: '88888888', + storeId: '1000', + storeName: '云Mall深圳旗舰店', + uid: '88888888205468', + parentOrderNo: '130169571554503755', + orderId: '130169572291521792', + orderNo: '130169571554503755', + orderType: 0, + orderSubType: 0, + orderStatus: 50, + orderSubStatus: null, + totalAmount: '538000', + goodsAmount: '538000', + goodsAmountApp: '538000', + paymentAmount: '508200', + freightFee: '0', + packageFee: '0', + discountAmount: '29800', + channelType: 0, + channelSource: '', + channelIdentity: '', + remark: '', + cancelType: null, + cancelReasonType: null, + cancelReason: null, + rightsType: null, + createTime: '1587008200590', + orderItemVOs: [ + { + id: '130169572425740032', + orderNo: null, + spuId: '1', + skuId: '135691631', + roomId: null, + goodsMainType: 0, + goodsViceType: 0, + goodsName: + '纯色纯棉休闲圆领短袖T恤纯白亲肤厚柔软细腻面料纯白短袖套头T恤', + goodsPictureUrl: + 'https://cdn-we-retail.ym.tencent.com/tsr/goods/nz-08b.png', + originPrice: '31900', + actualPrice: '26900', + specifications: [ + { specTitle: '颜色', specValue: '橙色' }, + { specTitle: '尺码', specValue: 'M' }, + ], + buyQuantity: 20, + itemTotalAmount: '538000', + itemDiscountAmount: '29800', + itemPaymentAmount: '508200', + goodsPaymentPrice: '25410', + tagPrice: null, + tagText: null, + outCode: null, + labelVOs: null, + buttonVOs: [ + { + primary: true, + type: 4, + name: '', + }, + ], + }, + ], + logisticsVO: { + logisticsType: 1, + logisticsNo: '123', + logisticsStatus: null, + logisticsCompanyCode: 'zhongtong', + logisticsCompanyName: '中通速递', + receiverAddressId: '2', + provinceCode: '440000', + cityCode: '440300', + countryCode: '440306', + receiverProvince: '广东省', + receiverCity: '深圳市', + receiverCountry: '南山区', + receiverArea: '', + receiverAddress: '前海路333号阳光玫瑰园', + receiverPostCode: '', + receiverLongitude: '113.829127', + receiverLatitude: '22.713649', + receiverIdentity: '88888888205468', + receiverPhone: '17612345678', + receiverName: '平均线', + expectArrivalTime: null, + senderName: '', + senderPhone: '', + senderAddress: '', + sendTime: '1587008529453', + arrivalTime: '1587008623995', + }, + paymentVO: { + payStatus: 1, + amount: '508200', + currency: null, + payType: null, + payWay: null, + payWayName: null, + interactId: null, + traceNo: null, + channelTrxNo: null, + period: null, + payTime: null, + paySuccessTime: null, + }, + buttonVOs: [ + { primary: false, type: 4, name: '申请售后' }, + { primary: true, type: 6, name: '评价' }, + ], + labelVOs: null, + invoiceVO: { + buyerName: '腾讯计算机有限公司', //个人或公司名称 + buyerTaxNo: '9144 9808 0909 0293 XG', //税号 + buyerPhone: '18600008888', //手机 + email: '73900484@qq.com', //邮箱 + titleType: 2, //发票抬头 1-个人 2-公司 + ontentType: 1, //发票内容 1-明细 2类别 + invoiceType: 5, //是否开票 0-不开 5-电子发票 + money: '1.54', + }, + couponAmount: null, + autoCancelTime: null, + orderStatusName: '交易完成', + orderSatusRemark: null, + logisticsLogVO: null, + invoiceStatus: null, + invoiceDesc: null, + invoiceUrl: null, + }, + { + saasId: '88888888', + storeId: '1000', + storeName: '云Mall深圳旗舰店', + uid: '88888888205468', + parentOrderNo: '130150835531421259', + orderId: '130150836385879808', + orderNo: '130150835531421259', + orderType: 0, + orderSubType: 0, + orderStatus: 50, + orderSubStatus: null, + totalAmount: '29800', + goodsAmount: '29800', + goodsAmountApp: '29800', + paymentAmount: '4000', + freightFee: '0', + packageFee: '0', + discountAmount: '25800', + channelType: 0, + channelSource: '', + channelIdentity: '', + remark: '', + cancelType: null, + cancelReasonType: null, + cancelReason: null, + rightsType: null, + createTime: '1587007083842', + orderItemVOs: [ + { + id: '130150836520098048', + orderNo: null, + spuId: '0', + skuId: '135681631', + roomId: null, + goodsMainType: 0, + goodsViceType: 0, + goodsName: + '白色短袖连衣裙荷叶边裙摆宽松韩版休闲纯白清爽优雅连衣裙', + goodsPictureUrl: + 'https://cdn-we-retail.ym.tencent.com/tsr/goods/nz-09a.png', + originPrice: '40000', + actualPrice: '29800', + specifications: [ + { specTitle: '颜色', specValue: '米色荷叶边' }, + { specTitle: '尺码', specValue: 'M' }, + ], + buyQuantity: 1, + itemTotalAmount: '29800', + itemDiscountAmount: '25800', + itemPaymentAmount: '4000', + goodsPaymentPrice: '4000', + tagPrice: null, + tagText: null, + outCode: null, + labelVOs: null, + buttonVOs: null, + }, + ], + logisticsVO: { + logisticsType: 1, + logisticsNo: '123', + logisticsStatus: null, + logisticsCompanyCode: 'yuantong', + logisticsCompanyName: '圆通速递', + receiverAddressId: '2', + provinceCode: '440000', + cityCode: '440300', + countryCode: '440306', + receiverProvince: '广东省', + receiverCity: '深圳市', + receiverCountry: '南山区', + receiverArea: '', + receiverAddress: '前海路333号阳光玫瑰园', + receiverPostCode: '', + receiverLongitude: '113.829127', + receiverLatitude: '22.713649', + receiverIdentity: '88888888205468', + receiverPhone: '17612345678', + receiverName: '平均线', + expectArrivalTime: null, + senderName: '', + senderPhone: '', + senderAddress: '', + sendTime: '1587008539953', + arrivalTime: '1588291200508', + }, + paymentVO: { + payStatus: 1, + amount: '4000', + currency: null, + payType: null, + payWay: null, + payWayName: null, + interactId: null, + traceNo: null, + channelTrxNo: null, + period: null, + payTime: null, + paySuccessTime: null, + }, + buttonVOs: [{ primary: true, type: 6, name: '评价' }], + labelVOs: null, + invoiceVO: null, + couponAmount: null, + autoCancelTime: null, + orderStatusName: '交易完成', + orderSatusRemark: null, + logisticsLogVO: null, + invoiceStatus: null, + invoiceDesc: null, + invoiceUrl: null, + }, + ], + }, + code: 'Success', + msg: null, + requestId: mockReqId(), + clientIp: mockIp(), + rt: 113, + success: true, + }; + const { pageNum, pageSize, orderStatus } = params.parameter; + // 实现筛选 + if (orderStatus > -1) { + resp.data.orders = resp.data.orders.filter( + (order) => order.orderStatus === orderStatus, + ); + } + // 实现分页 + resp.data.pageNum = pageNum; + resp.data.pageSize = pageSize; + resp.data.orders = resp.data.orders.slice( + (pageNum - 1) * pageSize, + pageNum * pageSize, + ); + return resp; +} + +export function genOrdersCount() { + const resp = { + data: [ + { tabType: 5, orderNum: 1 }, + { tabType: 10, orderNum: 1 }, + { tabType: 40, orderNum: 1 }, + { tabType: 50, orderNum: 2 }, + ], + code: 'Success', + msg: null, + requestId: mockReqId(), + clientIp: mockIp(), + rt: 41, + success: true, + }; + return resp; +} diff --git a/scr/miniprogram-2/model/promotion.js b/scr/miniprogram-2/model/promotion.js new file mode 100644 index 0000000..0aaee61 --- /dev/null +++ b/scr/miniprogram-2/model/promotion.js @@ -0,0 +1,21 @@ +import { getGoodsList } from './goods'; + +export function getPromotion(baseID = 0, length = 10) { + return { + list: getGoodsList(baseID, length).map((item) => { + return { + spuId: item.spuId, + thumb: item.primaryImage, + title: item.title, + price: item.minSalePrice, + originPrice: item.maxLinePrice, + tags: item.spuTagList.map((tag) => ({ title: tag.title })), + }; + }), + banner: + 'https://cdn-we-retail.ym.tencent.com/tsr/promotion/banner-promotion.png', + time: 1000 * 60 * 60 * 20, + showBannerDesc: true, + statusTag: 'running', + }; +} diff --git a/scr/miniprogram-2/model/search.js b/scr/miniprogram-2/model/search.js new file mode 100644 index 0000000..2d2e68d --- /dev/null +++ b/scr/miniprogram-2/model/search.js @@ -0,0 +1,60 @@ +import { getGoodsList } from './goods'; + +/** + * @param {number} sort + * @param {number} pageNum + * @param {number} pageSize + * @param {number} minPrice + * @param {number} maxPrice + * @param {string} keyword + */ + +export function getSearchHistory() { + return { + historyWords: [ + '鸡', + '电脑', + 'iPhone12', + '车载手机支架', + '自然堂', + '小米10', + '原浆古井贡酒', + '欧米伽', + '华为', + '针织半身裙', + '氢跑鞋', + '三盒处理器', + ], + }; +} + +export function getSearchPopular() { + return { + popularWords: [ + '鸡', + '电脑', + 'iPhone12', + '车载手机支架', + '自然堂', + '小米10', + '原浆古井贡酒', + '欧米伽', + '华为', + '针织半身裙', + '氢跑鞋', + '三盒处理器', + ], + }; +} + +export function getSearchResult() { + return { + saasId: null, + storeId: null, + pageNum: 1, + pageSize: 30, + totalCount: 1, + spuList: getGoodsList(7), + algId: 0, + }; +} diff --git a/scr/miniprogram-2/model/submitComment.js b/scr/miniprogram-2/model/submitComment.js new file mode 100644 index 0000000..e620b4f --- /dev/null +++ b/scr/miniprogram-2/model/submitComment.js @@ -0,0 +1,58 @@ +export function getGoods() { + return { + goods: [ + { + squid: '1', + checkItems: [ + { + name: '匿名评价', + value: 'anonymous', + checked: false, + }, + ], + detail: { + image: + 'https://wx.qlogo.cn/mmopen/vi_32/51VSMNuy1CyHiaAhAjLJ00kMZVqqnCqXeZduCLXHUBr52zFHRGxwL7kGia3fHj8GSNzFcqFDInQmRGM1eWjtQgqA/132', + title: '', + }, + goodComment: { + /** 商品评价 */ + rate: 0, + /** 评价内容 */ + label: '123', + /** 上传图片 */ + images: [], + }, + }, + { + squid: '2', + checkItems: [ + { + name: '匿名评价', + value: 'anonymous', + checked: false, + }, + ], + detail: { + image: + 'https://wx.qlogo.cn/mmopen/vi_32/51VSMNuy1CyHiaAhAjLJ00kMZVqqnCqXeZduCLXHUBr52zFHRGxwL7kGia3fHj8GSNzFcqFDInQmRGM1eWjtQgqA/132', + title: '评价内容 山姆智利进口', + }, + goodComment: { + /** 商品评价 */ + rate: 0, + /** 评价内容 */ + label: '山姆智利进口', + /** 上传图片 */ + images: [], + }, + }, + ], + storeComment: { + /** 物流评价 */ + logisticsRate: 0, + /** 服务评价 */ + servicesRate: 0, + }, + }; +} diff --git a/scr/miniprogram-2/model/swiper.js b/scr/miniprogram-2/model/swiper.js new file mode 100644 index 0000000..53bc50c --- /dev/null +++ b/scr/miniprogram-2/model/swiper.js @@ -0,0 +1,30 @@ +const images = [ + { + img: 'https://cdn-we-retail.ym.tencent.com/tsr/home/v2/banner1.png', + text: '1', + }, + { + img: 'https://cdn-we-retail.ym.tencent.com/tsr/home/v2/banner2.png', + text: '2', + }, + { + img: 'https://cdn-we-retail.ym.tencent.com/tsr/home/v2/banner3.png', + text: '3', + }, + { + img: 'https://cdn-we-retail.ym.tencent.com/tsr/home/v2/banner4.png', + text: '4', + }, + { + img: 'https://cdn-we-retail.ym.tencent.com/tsr/home/v2/banner5.png', + text: '5', + }, + { + img: 'https://cdn-we-retail.ym.tencent.com/tsr/home/v2/banner6.png', + text: '6', + }, +]; + +export function genSwiperImageList() { + return images; +} diff --git a/scr/miniprogram-2/model/usercenter.js b/scr/miniprogram-2/model/usercenter.js new file mode 100644 index 0000000..8822f4f --- /dev/null +++ b/scr/miniprogram-2/model/usercenter.js @@ -0,0 +1,52 @@ +const userInfo = { + avatarUrl: + 'https://we-retail-static-1300977798.cos.ap-guangzhou.myqcloud.com/retail-ui/components-exp/avatar/avatar-1.jpg', + nickName: 'TDesign 🌟', + phoneNumber: '13438358888', + gender: 2, +}; +const countsData = [ + { + num: 2, + name: '积分', + type: 'point', + }, + { + num: 10, + name: '优惠券', + type: 'coupon', + }, +]; + +const orderTagInfos = [ + { + orderNum: 1, + tabType: 5, + }, + { + orderNum: 1, + tabType: 10, + }, + { + orderNum: 1, + tabType: 40, + }, + { + orderNum: 0, + tabType: 0, + }, +]; + +const customerServiceInfo = { + servicePhone: '4006336868', + serviceTimeDuration: '每周三至周五 9:00-12:00 13:00-15:00', +}; + +export const genSimpleUserInfo = () => ({ ...userInfo }); + +export const genUsercenter = () => ({ + userInfo, + countsData, + orderTagInfos, + customerServiceInfo, +}); diff --git a/scr/miniprogram-2/package.json b/scr/miniprogram-2/package.json new file mode 100644 index 0000000..8718792 --- /dev/null +++ b/scr/miniprogram-2/package.json @@ -0,0 +1,36 @@ +{ + "name": "supermarket-pages", + "version": "1.0.0", + "description": "", + "main": "app.js", + "scripts": { + "test": "echo \"Error: no test specified\" && exit 1", + "lint": "eslint --cache --fix --ext .js", + "check": "node config/eslintCheck.js" + }, + "author": "", + "license": "ISC", + "husky": { + "hooks": { + "pre-commit": "lint-staged && npm run check" + } + }, + "lint-staged": { + "*.{js, ts}": "eslint --cache --fix", + "*.{js,ts,css,less}": "prettier --write" + }, + "dependencies": { + "dayjs": "^1.9.3", + "tdesign-miniprogram": "^0.18.0", + "tslib": "^1.11.1" + }, + "devDependencies": { + "eslint": "^6.8.0", + "eslint-config-prettier": "^6.10.0", + "eslint-plugin-import": "^2.20.1", + "eslint-plugin-prettier": "^3.1.2", + "husky": "^4.3.0", + "lint-staged": "^10.0.8", + "prettier": "^2.1.2" + } +} diff --git a/scr/miniprogram-2/pages/cart/components/cart-bar/index.js b/scr/miniprogram-2/pages/cart/components/cart-bar/index.js new file mode 100644 index 0000000..db7736c --- /dev/null +++ b/scr/miniprogram-2/pages/cart/components/cart-bar/index.js @@ -0,0 +1,59 @@ +Component({ + options: { + addGlobalClass: true, + }, + /** + * 组件的属性列表 + */ + properties: { + isAllSelected: { + type: Boolean, + value: false, + }, + totalAmount: { + type: Number, + value: 1, + }, + totalGoodsNum: { + type: Number, + value: 0, + observer(num) { + const isDisabled = num == 0; + setTimeout(() => { + this.setData({ + isDisabled, + }); + }); + }, + }, + totalDiscountAmount: { + type: Number, + value: 0, + }, + bottomHeight: { + type: Number, + value: 100, + }, + fixed: Boolean, + }, + data: { + isDisabled: false, + }, + + methods: { + handleSelectAll() { + const { isAllSelected } = this.data; + this.setData({ + isAllSelected: !isAllSelected, + }); + this.triggerEvent('handleSelectAll', { + isAllSelected: isAllSelected, + }); + }, + + handleToSettle() { + if (this.data.isDisabled) return; + this.triggerEvent('handleToSettle'); + }, + }, +}); diff --git a/scr/miniprogram-2/pages/cart/components/cart-bar/index.json b/scr/miniprogram-2/pages/cart/components/cart-bar/index.json new file mode 100644 index 0000000..c6c4351 --- /dev/null +++ b/scr/miniprogram-2/pages/cart/components/cart-bar/index.json @@ -0,0 +1,7 @@ +{ + "component": true, + "usingComponents": { + "price": "/components/price/index", + "t-icon": "tdesign-miniprogram/icon/icon" + } +} \ No newline at end of file diff --git a/scr/miniprogram-2/pages/cart/components/cart-bar/index.wxml b/scr/miniprogram-2/pages/cart/components/cart-bar/index.wxml new file mode 100644 index 0000000..486a0d5 --- /dev/null +++ b/scr/miniprogram-2/pages/cart/components/cart-bar/index.wxml @@ -0,0 +1,31 @@ + + + + 全选 + + + 总计 + + (不含运费) + + + 已优惠 + + + + + + diff --git a/scr/miniprogram-2/pages/cart/components/cart-bar/index.wxss b/scr/miniprogram-2/pages/cart/components/cart-bar/index.wxss new file mode 100644 index 0000000..0e63f60 --- /dev/null +++ b/scr/miniprogram-2/pages/cart/components/cart-bar/index.wxss @@ -0,0 +1,80 @@ +.cart-bar__placeholder { + height: 100rpx; +} +.flex { + display: flex; +} +.flex-v-center { + align-items: center; +} +.flex1 { + flex: 1; +} +.algin-bottom { + text-align: end; +} +.cart-bar--fixed { + position: fixed; + left: 0; + right: 0; + z-index: 99; + bottom: calc(100rpx + env(safe-area-inset-bottom)); +} + +.cart-bar { + height: 112rpx; + background-color: #fff; + border-top: 1rpx solid #e5e5e5; + padding: 16rpx 32rpx; + box-sizing: border-box; + font-size: 24rpx; + line-height: 36rpx; + color: #333; +} + +.cart-bar .cart-bar__check { + margin-right: 12rpx; +} + +.cart-bar .cart-bar__total { + margin-left: 24rpx; +} + +.cart-bar .account-btn { + width: 192rpx; + height: 80rpx; + border-radius: 40rpx; + background-color: #fa4126; + font-size: 28rpx; + font-weight: bold; + line-height: 80rpx; + color: #ffffff; + text-align: center; +} +.cart-bar .disabled-btn { + background-color: #cccccc !important; +} +.cart-bar .hover-btn { + opacity: 0.5; +} + +.cart-bar__total .cart-bar__total--bold { + font-size: 28rpx; + line-height: 40rpx; + color: #333; + font-weight: bold; +} +.cart-bar__total .cart-bar__total--normal { + font-size: 24rpx; + line-height: 32rpx; + color: #999; +} + +.cart-bar__total .cart-bar__total--price { + color: #fa4126; + font-weight: bold; +} + +.text-padding-right { + padding-right: 4rpx; +} diff --git a/scr/miniprogram-2/pages/cart/components/cart-empty/index.js b/scr/miniprogram-2/pages/cart/components/cart-empty/index.js new file mode 100644 index 0000000..01cf9c3 --- /dev/null +++ b/scr/miniprogram-2/pages/cart/components/cart-empty/index.js @@ -0,0 +1,23 @@ +Component({ + properties: { + imgUrl: { + type: String, + value: + 'https://cdn-we-retail.ym.tencent.com/miniapp/template/empty-cart.png', + }, + tip: { + type: String, + value: '购物车是空的', + }, + btnText: { + type: String, + value: '去首页', + }, + }, + data: {}, + methods: { + handleClick() { + this.triggerEvent('handleClick'); + }, + }, +}); diff --git a/scr/miniprogram-2/pages/cart/components/cart-empty/index.json b/scr/miniprogram-2/pages/cart/components/cart-empty/index.json new file mode 100644 index 0000000..b659310 --- /dev/null +++ b/scr/miniprogram-2/pages/cart/components/cart-empty/index.json @@ -0,0 +1,6 @@ +{ + "component": true, + "usingComponents": { + "t-image": "/components/webp-image/index" + } +} \ No newline at end of file diff --git a/scr/miniprogram-2/pages/cart/components/cart-empty/index.wxml b/scr/miniprogram-2/pages/cart/components/cart-empty/index.wxml new file mode 100644 index 0000000..d0cdd43 --- /dev/null +++ b/scr/miniprogram-2/pages/cart/components/cart-empty/index.wxml @@ -0,0 +1,6 @@ + + + {{tip}} + {{btnText}} + + diff --git a/scr/miniprogram-2/pages/cart/components/cart-empty/index.wxss b/scr/miniprogram-2/pages/cart/components/cart-empty/index.wxss new file mode 100644 index 0000000..d074bc3 --- /dev/null +++ b/scr/miniprogram-2/pages/cart/components/cart-empty/index.wxss @@ -0,0 +1,33 @@ +.cart-empty { + padding: 64rpx 0rpx; + display: flex; + flex-direction: column; + align-items: center; + box-sizing: border-box; + height: calc(100vh - 100rpx); + background-color: #f5f5f5; +} +.cart-empty .cart-img { + width: 160rpx; + height: 160rpx; + margin-bottom: 24rpx; +} + +.cart-empty .tip { + font-size: 28rpx; + line-height: 40rpx; + color: #999; + margin-bottom: 24rpx; +} +.cart-empty .btn { + width: 240rpx; + height: 72rpx; + border-radius: 36rpx; + text-align: center; + line-height: 72rpx; + border: 2rpx solid #fa4126; + color: #fa4126; + background-color: transparent; + font-size: 28rpx; + font-weight: bold; +} diff --git a/scr/miniprogram-2/pages/cart/components/cart-group/index.js b/scr/miniprogram-2/pages/cart/components/cart-group/index.js new file mode 100644 index 0000000..99a908d --- /dev/null +++ b/scr/miniprogram-2/pages/cart/components/cart-group/index.js @@ -0,0 +1,166 @@ +import Toast from 'tdesign-miniprogram/toast/index'; + +const shortageImg = + 'https://cdn-we-retail.ym.tencent.com/miniapp/cart/shortage.png'; + +Component({ + isSpecsTap: false, // 标记本次点击事件是否因为点击specs触发(由于底层goods-card组件没有catch specs点击事件,只能在此处加状态来避免点击specs时触发跳转商品详情) + externalClasses: ['wr-class'], + properties: { + storeGoods: { + type: Array, + observer(storeGoods) { + for (const store of storeGoods) { + for (const activity of store.promotionGoodsList) { + for (const goods of activity.goodsPromotionList) { + goods.specs = goods.specInfo.map((item) => item.specValue); // 目前仅展示商品已选规格的值 + } + } + for (const goods of store.shortageGoodsList) { + goods.specs = goods.specInfo.map((item) => item.specValue); // 目前仅展示商品已选规格的值 + } + } + + this.setData({ _storeGoods: storeGoods }); + }, + }, + invalidGoodItems: { + type: Array, + observer(invalidGoodItems) { + invalidGoodItems.forEach((goods) => { + goods.specs = goods.specInfo.map((item) => item.specValue); // 目前仅展示商品已选规格的值 + }); + this.setData({ _invalidGoodItems: invalidGoodItems }); + }, + }, + thumbWidth: { type: null }, + thumbHeight: { type: null }, + }, + + data: { + shortageImg, + isShowSpecs: false, + currentGoods: {}, + isShowToggle: false, + _storeGoods: [], + _invalidGoodItems: [], + }, + + methods: { + // 删除商品 + deleteGoods(e) { + const { goods } = e.currentTarget.dataset; + this.triggerEvent('delete', { goods }); + }, + + // 清空失效商品 + clearInvalidGoods() { + this.triggerEvent('clearinvalidgoods'); + }, + + // 选中商品 + selectGoods(e) { + const { goods } = e.currentTarget.dataset; + this.triggerEvent('selectgoods', { + goods, + isSelected: !goods.isSelected, + }); + }, + + changeQuantity(num, goods) { + this.triggerEvent('changequantity', { + goods, + quantity: num, + }); + }, + changeStepper(e) { + const { value } = e.detail; + const { goods } = e.currentTarget.dataset; + let num = value; + if (value > goods.stack) { + num = goods.stack; + } + this.changeQuantity(num, goods); + }, + + input(e) { + const { value } = e.detail; + const { goods } = e.currentTarget.dataset; + const num = value; + this.changeQuantity(num, goods); + }, + + overlimit(e) { + const text = + e.detail.type === 'minus' + ? '该商品数量不能减少了哦' + : '同一商品最多购买999件'; + Toast({ + context: this, + selector: '#t-toast', + message: text, + }); + }, + + // 去凑单/再逛逛 + gotoBuyMore(e) { + const { promotion, storeId = '' } = e.currentTarget.dataset; + this.triggerEvent('gocollect', { promotion, storeId }); + }, + + // 选中门店 + selectStore(e) { + const { storeIndex } = e.currentTarget.dataset; + const store = this.data.storeGoods[storeIndex]; + const isSelected = !store.isSelected; + if (store.storeStockShortage && isSelected) { + Toast({ + context: this, + selector: '#t-toast', + message: '部分商品库存不足', + }); + return; + } + this.triggerEvent('selectstore', { + store, + isSelected, + }); + }, + + // 展开/收起切换 + showToggle() { + this.setData({ + isShowToggle: !this.data.isShowToggle, + }); + }, + + // 展示规格popup + specsTap(e) { + this.isSpecsTap = true; + const { goods } = e.currentTarget.dataset; + this.setData({ + isShowSpecs: true, + currentGoods: goods, + }); + }, + + hideSpecsPopup() { + this.setData({ + isShowSpecs: false, + }); + }, + + goGoodsDetail(e) { + if (this.isSpecsTap) { + this.isSpecsTap = false; + return; + } + const { goods } = e.currentTarget.dataset; + this.triggerEvent('goodsclick', { goods }); + }, + + gotoCoupons() { + wx.navigateTo({ url: '/pages/coupon/coupon-list/index' }); + }, + }, +}); diff --git a/scr/miniprogram-2/pages/cart/components/cart-group/index.json b/scr/miniprogram-2/pages/cart/components/cart-group/index.json new file mode 100644 index 0000000..9b8003d --- /dev/null +++ b/scr/miniprogram-2/pages/cart/components/cart-group/index.json @@ -0,0 +1,11 @@ +{ + "component": true, + "usingComponents": { + "t-toast": "tdesign-miniprogram/toast/toast", + "t-icon": "tdesign-miniprogram/icon/icon", + "t-stepper": "tdesign-miniprogram/stepper/stepper", + "swipeout": "/components/swipeout/index", + "goods-card": "../../components/goods-card/index", + "specs-popup": "../../components/specs-popup/index" + } +} \ No newline at end of file diff --git a/scr/miniprogram-2/pages/cart/components/cart-group/index.wxml b/scr/miniprogram-2/pages/cart/components/cart-group/index.wxml new file mode 100644 index 0000000..63fe3dd --- /dev/null +++ b/scr/miniprogram-2/pages/cart/components/cart-group/index.wxml @@ -0,0 +1,185 @@ + + var hasPromotion = function (code) { + return code && code !== 'EMPTY_PROMOTION'; + } + module.exports.hasPromotion = hasPromotion; + + + + + + + + + + + + {{store.storeName}} + + 优惠券 + + + + + + {{promotion.tag}} + {{promotion.description}} + + + + {{promotion.isNeedAddOnShop == 1 ? '去凑单' : '再逛逛'}} + + + + + + + + + + + + + + 仅剩{{goods.stockQuantity}}件 + + + 库存不足 + + + + + + + 删除 + + + + + + + + + + + + + + + + + + 无货 + + + + + + 删除 + + + + + + + + + + + + + diff --git a/scr/miniprogram-2/pages/cart/components/cart-group/index.wxss b/scr/miniprogram-2/pages/cart/components/cart-group/index.wxss new file mode 100644 index 0000000..641101f --- /dev/null +++ b/scr/miniprogram-2/pages/cart/components/cart-group/index.wxss @@ -0,0 +1,335 @@ +.cart-group { + border-radius: 8rpx; +} +.cart-group .goods-wrap { + margin-top: 40rpx; + background-color: #fff; + border-radius: 8rpx; + overflow: hidden; +} +.cart-group .goods-wrap:first-of-type { + margin-top: 0; +} +.cart-group .cart-store { + height: 96rpx; + background-color: #fff; + box-sizing: border-box; + display: flex; + align-items: center; + padding: 0rpx 24rpx 0rpx 36rpx; +} +.cart-group .cart-store .cart-store__check { + padding: 28rpx 32rpx 28rpx 0rpx; +} +.cart-group .cart-store__content { + box-sizing: border-box; + flex: auto; + display: flex; + align-items: center; + justify-content: space-between; +} +.cart-group .cart-store__content .store-title { + flex: auto; + font-size: 28rpx; + line-height: 40rpx; + color: #333333; + display: flex; + align-items: center; + font-weight: bold; + overflow: hidden; +} + +.cart-group .cart-store__content .store-title .wr-store { + font-size: 32rpx; +} +.cart-group .cart-store__content .store-title .store-name { + overflow: hidden; + white-space: nowrap; + text-overflow: ellipsis; + margin-left: 12rpx; +} +.cart-group .cart-store__content .get-coupon { + width: 112rpx; + height: 40rpx; + border-radius: 20rpx; + background-color: #ffecf9; + line-height: 40rpx; + text-align: center; + font-size: 26rpx; + color: #fa4126; +} + +.cart-group .promotion-wrap { + display: flex; + justify-content: space-between; + align-items: center; + padding: 0rpx 24rpx 32rpx 36rpx; + background-color: #ffffff; + font-size: 24rpx; + line-height: 36rpx; + color: #222427; +} +.cart-group .promotion-wrap .promotion-title { + font-weight: bold; + flex: auto; + overflow: hidden; + margin-right: 20rpx; + display: flex; + align-items: center; +} +.cart-group .promotion-wrap .promotion-title .promotion-icon { + flex: none; + font-weight: normal; + display: inline-block; + padding: 0 8rpx; + color: #ffffff; + background: #fa4126; + font-size: 20rpx; + height: 32rpx; + line-height: 32rpx; + margin-right: 16rpx; + border-radius: 16rpx; +} +.cart-group .promotion-wrap .promotion-title .promotion-text { + flex: auto; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; +} +.cart-group .promotion-wrap .promotion-action { + flex: none; + color: #333333; +} +.cart-group .promotion-line-wrap { + background-color: #fff; + height: 2rpx; + display: flex; + justify-content: flex-end; +} +.cart-group .promotion-line-wrap .promotion-line { + width: 684rpx; + height: 2rpx; + background-color: #e6e6e6; +} +.cart-group .goods-item-info { + display: flex; + background-color: #fff; + align-items: flex-start; +} +.cart-group .goods-item-info .check-wrap { + margin-top: 56rpx; + padding: 20rpx 28rpx 20rpx 36rpx; +} + +.cart-group .goods-item-info .check-wrap .unCheck-icon { + box-sizing: border-box; + width: 36rpx; + height: 36rpx; + border-radius: 20rpx; + background: #f5f5f5; + border: 2rpx solid #bbbbbb; +} + +.cart-group .goods-item-info .goods-sku-info { + padding: 0rpx 32rpx 40rpx 0; + flex-grow: 1; +} +.cart-group .goods-item-info .goods-sku-info .stock-mask { + position: absolute; + color: #fff; + font-size: 24rpx; + bottom: 0rpx; + background-color: rgba(0, 0, 0, 0.5); + width: 100%; + height: 40rpx; + line-height: 40rpx; + text-align: center; +} +.cart-group .goods-item-info .goods-sku-info .goods-stepper { + position: absolute; + right: 0; + bottom: 8rpx; +} +.cart-group .goods-item-info .goods-sku-info .goods-stepper .stepper-tip { + position: absolute; + top: -36rpx; + right: 0; + height: 28rpx; + color: #ff2525; + font-size: 20rpx; + line-height: 28rpx; +} + +.cart-group .shortage-line { + width: 662rpx; + height: 2rpx; + background-color: #e6e6e6; + margin: 0 auto; +} +.cart-group .shortage-goods-wrap { + background-color: #fff; +} +.cart-group .shortage-goods-wrap .shortage-tip-title { + height: 72rpx; + line-height: 72rpx; + padding-left: 28rpx; + font-size: 24rpx; + color: #999; +} +.stepper-info { + margin-left: auto; +} +.invalid-goods-wrap { + background-color: #fff; + border-radius: 8rpx; + margin-top: 40rpx; +} +.invalid-goods-wrap .invalid-head { + display: flex; + justify-content: space-between; + padding: 30rpx 20rpx; + font-size: 24rpx; + border-bottom: 2rpx solid #f6f6f6; +} +.invalid-goods-wrap .invalid-head .invalid-title { + color: #333; + font-size: 28rpx; + font-weight: 600; +} +.invalid-goods-wrap .invalid-head .invalid-clear { + color: #fa4126; +} +.invalid-goods-wrap .toggle { + display: flex; + height: 80rpx; + justify-content: center; + align-items: center; + font-size: 24rpx; + color: #fa4126; +} +.invalid-goods-wrap .toggle .m-r-6 { + margin-right: 6rpx; +} +.invalid-goods-wrap .toggle .top-icon { + display: inline-block; + width: 0; + height: 0; + border-left: 10rpx solid transparent; + border-right: 10rpx solid transparent; + border-bottom: 10rpx solid #fa4126; +} +.invalid-goods-wrap .toggle .down-icon { + display: inline-block; + width: 0; + height: 0; + border-left: 10rpx solid transparent; + border-right: 10rpx solid transparent; + border-top: 10rpx solid #fa4126; +} +.action-btn { + display: flex; + align-items: center; +} +.action-btn .action-btn-arrow { + font-size: 20rpx; + margin-left: 8rpx; +} +.action-btn--active { + opacity: 0.5; +} + +.swiper-right-del { + height: calc(100% - 40rpx); + width: 144rpx; + background-color: #fa4126; + font-size: 28rpx; + color: white; + display: flex; + justify-content: center; + align-items: center; +} +.goods-stepper .stepper { + border: none; + border-radius: 0; + height: auto; + width: 168rpx; + overflow: visible; +} +.goods-stepper .stepper .stepper__minus, +.goods-stepper .stepper .stepper__plus { + width: 44rpx; + height: 44rpx; + background-color: #f5f5f5; +} +.goods-stepper .stepper .stepper__minus--hover, +.goods-stepper .stepper .stepper__plus--hover { + background-color: #f5f5f5; +} +.goods-stepper .stepper .stepper__minus .wr-icon, +.goods-stepper .stepper .stepper__plus .wr-icon { + font-size: 24rpx; +} +.goods-stepper .stepper .stepper__minus { + position: relative; +} +.goods-stepper .stepper .stepper__minus::after { + position: absolute; + display: block; + content: ' '; + left: -20rpx; + right: -5rpx; + top: -20rpx; + bottom: -20rpx; + background-color: transparent; +} +.goods-stepper .stepper .stepper__plus { + position: relative; +} +.goods-stepper .stepper .stepper__plus::after { + position: absolute; + display: block; + content: ' '; + left: -5rpx; + right: -20rpx; + top: -20rpx; + bottom: -20rpx; + background-color: transparent; +} +.goods-stepper .stepper .stepper__input { + width: 72rpx; + height: 44rpx; + background-color: #f5f5f5; + font-size: 24rpx; + color: #222427; + font-weight: 600; + border-left: none; + border-right: none; + min-height: 40rpx; + margin: 0 4rpx; + display: flex; + align-items: center; +} + +.goods-sku-info .no-storage-mask { + position: absolute; + color: #fff; + bottom: 0rpx; + left: 0rpx; + background-color: rgba(0, 0, 0, 0.1); + height: 192rpx; + width: 192rpx; + border-radius: 8rpx; + display: flex; + justify-content: center; + align-items: center; +} + +.no-storage-mask .no-storage-content { + width: 128rpx; + height: 128rpx; + border-radius: 64rpx; + background-color: rgba(0, 0, 0, 0.4); + text-align: center; + line-height: 128rpx; + font-size: 28rpx; +} diff --git a/scr/miniprogram-2/pages/cart/components/cart-group/utils.wxs b/scr/miniprogram-2/pages/cart/components/cart-group/utils.wxs new file mode 100644 index 0000000..f887eba --- /dev/null +++ b/scr/miniprogram-2/pages/cart/components/cart-group/utils.wxs @@ -0,0 +1,20 @@ +module.exports.slice = function(arr) { + return arr.slice(0, 2); +}; +module.exports.imgCut = function(url, width, height) { + if (url && (url.slice(0, 5) === 'http:' || url.slice(0, 6) === 'https:' || url.slice(0, 2) === '//')) { + var argsStr = 'imageMogr2/thumbnail/!' + width + 'x' + height + 'r'; + if (url.indexOf('?') > -1) { + url = url + '&' + argsStr; + } else { + url = url + '?' + argsStr; + } + if (url.slice(0, 5) === 'http:') { + url = 'https://' + url.slice(5) + } + if (url.slice(0, 2) === '//') { + url = 'https:' + url + } + } + return url; +}; diff --git a/scr/miniprogram-2/pages/cart/components/goods-card/index.js b/scr/miniprogram-2/pages/cart/components/goods-card/index.js new file mode 100644 index 0000000..c59658c --- /dev/null +++ b/scr/miniprogram-2/pages/cart/components/goods-card/index.js @@ -0,0 +1,243 @@ +Component({ + options: { + multipleSlots: true, // 在组件定义时的选项中启用多slot支持 + addGlobalClass: true, + }, + intersectionObserverContext: null, + + externalClasses: [ + 'card-class', + 'title-class', + 'desc-class', + 'num-class', + 'thumb-class', + 'specs-class', + 'price-class', + 'origin-price-class', + 'price-prefix-class', + ], + + properties: { + hidden: { + // 设置为null代表不做类型转换 + type: null, + value: false, + observer(hidden) { + // null就是代表没有设置,没有设置的话不setData,防止祖先组件触发的setHidden操作被覆盖 + if (hidden !== null) { + this.setHidden(!!hidden); + } + }, + }, + id: { + type: String, + // `goods-card-88888888` + // 不能在这里写生成逻辑,如果在这里写,那么假设有多个goods-list时,他们将共享这个值 + value: '', + observer: (id) => { + this.genIndependentID(id); + if (this.properties.thresholds?.length) { + this.createIntersectionObserverHandle(); + } + }, + }, + data: { + type: Object, + observer(goods) { + // 有ID的商品才渲染 + if (!goods) { + return; + } + + /** 划线价是否有效 */ + let isValidityLinePrice = true; + // 判断一次划线价格是否合理 + if ( + goods.originPrice && + goods.price && + goods.originPrice < goods.price + ) { + isValidityLinePrice = false; + } + + // 敲定换行数量默认值 + if (goods.lineClamp === undefined || goods.lineClamp <= 0) { + // tag数组长度 大于0 且 可见 + // 指定换行为1行 + if ((goods.tags?.length || 0) > 0 && !goods.hideKey?.tags) { + goods.lineClamp = 1; + } else { + goods.lineClamp = 2; + } + } + + this.setData({ goods, isValidityLinePrice }); + }, + }, + layout: { + type: String, + value: 'horizontal', + }, + thumbMode: { + type: String, + value: 'aspectFill', + }, + priceFill: { + type: Boolean, + value: true, + }, + currency: { + type: String, + value: '¥', + }, + lazyLoad: { + type: Boolean, + value: false, + }, + centered: { + type: Boolean, + value: false, + }, + pricePrefix: { + type: String, + value: '', + }, + /** 元素可见监控阈值, 数组长度大于0就创建 */ + thresholds: { + type: Array, + value: [], + observer(current) { + if (current && current.length) { + this.createIntersectionObserverHandle(); + } else { + this.clearIntersectionObserverHandle(); + } + }, + }, + specsIconClassPrefix: { + type: String, + value: 'wr', + }, + specsIcon: { + type: String, + value: 'expand_more', + }, + addCartIconClassPrefix: { + type: String, + value: 'wr', + }, + addCartIcon: { + type: String, + value: 'cart', + }, + }, + + data: { + hiddenInData: false, + independentID: '', + goods: { id: '' }, + /** 保证划线价格不小于原价,否则不渲染划线价 */ + isValidityLinePrice: false, + }, + + lifetimes: { + ready() { + this.init(); + }, + detached() { + this.clear(); + }, + }, + + methods: { + clickHandle() { + this.triggerEvent('click', { goods: this.data.goods }); + }, + clickThumbHandle() { + this.triggerEvent('thumb', { goods: this.data.goods }); + }, + clickSpecsHandle() { + this.triggerEvent('specs', { goods: this.data.goods }); + }, + clickTagHandle(evt) { + const { index } = evt.currentTarget.dataset; + this.triggerEvent('tag', { goods: this.data.goods, index }); + }, + // 加入购物车 + addCartHandle(e) { + const { id } = e.currentTarget; + const { id: cardID } = e.currentTarget.dataset; + this.triggerEvent('add-cart', { + ...e.detail, + id, + cardID, + goods: this.data.goods, + }); + }, + genIndependentID(id, cb) { + let independentID; + if (id) { + independentID = id; + } else { + independentID = `goods-card-${~~(Math.random() * 10 ** 8)}`; + } + this.setData({ independentID }, cb); + }, + + init() { + const { thresholds, id, hidden } = this.properties; + if (hidden !== null) { + this.setHidden(!!hidden); + } + + this.genIndependentID(id || '', () => { + if (thresholds && thresholds.length) { + this.createIntersectionObserverHandle(); + } + }); + }, + + clear() { + this.clearIntersectionObserverHandle(); + }, + + setHidden(hidden) { + this.setData({ hiddenInData: !!hidden }); + }, + + createIntersectionObserverHandle() { + if (this.intersectionObserverContext || !this.data.independentID) { + return; + } + + this.intersectionObserverContext = wx + .createIntersectionObserver(this, { + thresholds: this.properties.thresholds, + }) + .relativeToViewport(); + + this.intersectionObserverContext.observe( + `#${this.data.independentID}`, + (res) => { + this.intersectionObserverCB(res); + }, + ); + }, + intersectionObserverCB(ob) { + this.triggerEvent('ob', { + goods: this.data.goods, + context: this.intersectionObserverContext, + ob, + }); + }, + clearIntersectionObserverHandle() { + if (this.intersectionObserverContext) { + try { + this.intersectionObserverContext.disconnect(); + } catch (e) {} + + this.intersectionObserverContext = null; + } + }, + }, +}); diff --git a/scr/miniprogram-2/pages/cart/components/goods-card/index.json b/scr/miniprogram-2/pages/cart/components/goods-card/index.json new file mode 100644 index 0000000..d76303b --- /dev/null +++ b/scr/miniprogram-2/pages/cart/components/goods-card/index.json @@ -0,0 +1,9 @@ +{ + "component": true, + "usingComponents": { + "price": "/components/price/index", + "t-tag": "tdesign-miniprogram/tag/tag", + "t-image": "/components/webp-image/index", + "t-icon": "tdesign-miniprogram/icon/icon" + } +} \ No newline at end of file diff --git a/scr/miniprogram-2/pages/cart/components/goods-card/index.wxml b/scr/miniprogram-2/pages/cart/components/goods-card/index.wxml new file mode 100644 index 0000000..df4111f --- /dev/null +++ b/scr/miniprogram-2/pages/cart/components/goods-card/index.wxml @@ -0,0 +1,75 @@ + + diff --git a/scr/miniprogram-2/pages/cart/components/goods-card/index.wxss b/scr/miniprogram-2/pages/cart/components/goods-card/index.wxss new file mode 100644 index 0000000..6a7a4da --- /dev/null +++ b/scr/miniprogram-2/pages/cart/components/goods-card/index.wxss @@ -0,0 +1,260 @@ +.wr-goods-card { + box-sizing: border-box; + font-size: 24rpx; +} +/* */ +.wr-goods-card__main { + position: relative; + display: flex; + padding: 0; + background: transparent; +} + +.wr-goods-card.center .wr-goods-card__main { + align-items: flex-start; + justify-content: center; +} + +.wr-goods-card__thumb { + flex-shrink: 0; + position: relative; + width: 140rpx; + height: 140rpx; +} + +.wr-goods-card__thumb-com { + width: 192rpx; + height: 192rpx; + border-radius: 8rpx; + overflow: hidden; +} +.wr-goods-card__thumb:empty { + display: none; + margin: 0; +} + +.wr-goods-card__body { + display: flex; + margin: 0 0 0 20rpx; + flex-direction: row; + flex: 1 1 auto; + min-height: 192rpx; +} + +.wr-goods-card__long_content { + display: flex; + flex-direction: column; + overflow: hidden; + flex: 1 1 auto; +} +.wr-goods-card__long_content .goods_tips { + width: 100%; + margin-top: 16rpx; + text-align: right; + color: #fa4126; + font-size: 24rpx; + line-height: 32rpx; + font-weight: bold; +} +.wr-goods-card__title { + flex-shrink: 0; + font-size: 28rpx; + color: #333; + line-height: 40rpx; + font-weight: 400; + display: -webkit-box; + -webkit-box-orient: vertical; + overflow: hidden; + word-break: break-word; +} +.wr-goods-card__title__prefix-tags { + display: inline-flex; +} +.wr-goods-card__title__prefix-tags .prefix-tag { + margin: 0 8rpx 0 0; +} +.wr-goods-card__desc { + font-size: 24rpx; + color: #f5f5f5; + line-height: 40rpx; + display: -webkit-box; + -webkit-box-orient: vertical; + -webkit-line-clamp: 2; + overflow: hidden; +} +.wr-goods-card__specs__desc, +.wr-goods-card__specs__text { + font-size: 24rpx; + height: 32rpx; + line-height: 32rpx; + color: #999999; + margin: 8rpx 0; +} +.wr-goods-card__specs__desc { + display: flex; + align-self: flex-start; + flex-direction: row; + background: #f5f5f5; + border-radius: 8rpx; + padding: 4rpx 8rpx; +} +.wr-goods-card__specs__desc-text { + height: 100%; + max-width: 380rpx; + word-break: break-all; + overflow: hidden; + display: -webkit-box; + -webkit-box-orient: vertical; + -webkit-line-clamp: 1; +} +.wr-goods-card__specs__desc-icon { + line-height: inherit; + margin-left: 8rpx; + font-size: 24rpx; + color: #bbb; +} +.wr-goods-card__specs__text { + display: -webkit-box; + -webkit-box-orient: vertical; + -webkit-line-clamp: 1; + overflow: hidden; + text-overflow: ellipsis; + word-break: break-all; +} +.wr-goods-card__tags { + display: flex; + flex-direction: row; + flex-wrap: wrap; + margin: 16rpx 0 0 0; +} +.wr-goods-card__tag { + color: #fa550f; + background: transparent; + font-size: 20rpx; + border: 1rpx solid #fa550f; + padding: 0 8rpx; + height: 30rpx; + line-height: 30rpx; + margin: 0 8rpx 8rpx 0; + display: block; + overflow: hidden; + white-space: nowrap; + word-break: keep-all; + text-overflow: ellipsis; +} +.wr-goods-card__short_content { + display: flex; + flex-direction: column; + justify-content: flex-start; + align-items: flex-end; + margin: 0 0 0 46rpx; +} +.wr-goods-card__price__prefix { + order: 0; + color: #666; + margin: 0; +} +.wr-goods-card__price { + white-space: nowrap; + font-weight: bold; + order: 1; + color: #fa4126; + font-size: 36rpx; + margin: 0; + line-height: 48rpx; +} +.wr-goods-card__origin-price { + white-space: nowrap; + font-weight: normal; + order: 2; + color: #aaaaaa; + font-size: 24rpx; + margin: 0; +} +.wr-goods-card__num { + white-space: nowrap; + order: 4; + font-size: 24rpx; + color: #999; + margin: 20rpx 0 0 auto; +} +.wr-goods-card__num__prefix { + color: inherit; +} +.wr-goods-card__add-cart { + order: 3; + margin: auto 0 0 auto; +} +.wr-goods-card.horizontal-wrap .wr-goods-card__thumb { + width: 192rpx; + height: 192rpx; + border-radius: 8rpx; + overflow: hidden; +} +.wr-goods-card.horizontal-wrap .wr-goods-card__body { + flex-direction: column; +} +.wr-goods-card.horizontal-wrap .wr-goods-card__short_content { + flex-direction: row; + align-items: center; + margin: 16rpx 0 0 0; +} + +.wr-goods-card.horizontal-wrap .wr-goods-card__num { + margin: 0 0 0 auto; +} +.wr-goods-card.vertical .wr-goods-card__main { + padding: 0 0 22rpx 0; + flex-direction: column; +} +.wr-goods-card.vertical .wr-goods-card__thumb { + width: 340rpx; + height: 340rpx; +} +.wr-goods-card.vertical .wr-goods-card__body { + margin: 20rpx 20rpx 0 20rpx; + flex-direction: column; +} +.wr-goods-card.vertical .wr-goods-card__long_content { + overflow: hidden; +} +.wr-goods-card.vertical .wr-goods-card__title { + line-height: 36rpx; +} +.wr-goods-card.vertical .wr-goods-card__short_content { + margin: 20rpx 0 0 0; +} +.wr-goods-card.vertical .wr-goods-card__price { + order: 2; + color: #fa4126; + margin: 20rpx 0 0 0; +} +.wr-goods-card.vertical .wr-goods-card__origin-price { + order: 1; +} +.wr-goods-card.vertical .wr-goods-card__add-cart { + position: absolute; + bottom: 20rpx; + right: 20rpx; +} + +.wr-goods-card__short_content .no_storage { + display: flex; + align-items: center; + justify-content: space-between; + height: 40rpx; + color: #333; + font-size: 24rpx; + line-height: 32rpx; + width: 100%; +} + +.no_storage .no_storage__right { + width: 80rpx; + height: 40rpx; + border-radius: 20rpx; + border: 2rpx solid #fa4126; + line-height: 40rpx; + text-align: center; + color: #fa4126; +} diff --git a/scr/miniprogram-2/pages/cart/components/specs-popup/index.js b/scr/miniprogram-2/pages/cart/components/specs-popup/index.js new file mode 100644 index 0000000..650d2aa --- /dev/null +++ b/scr/miniprogram-2/pages/cart/components/specs-popup/index.js @@ -0,0 +1,72 @@ +Component({ + options: { + addGlobalClass: true, + multipleSlots: true, // 在组件定义时的选项中启用多slot支持 + }, + + properties: { + show: { + type: Boolean, + value: false, + }, + value: { + type: String, + value: '', + }, + title: { + type: String, + observer(newVal) { + this.setData({ 'goods.title': newVal }); + }, + }, + price: { + type: String, + value: '', + observer(newVal) { + this.setData({ 'goods.price': newVal }); + }, + }, + thumb: { + type: String, + value: '', + observer(newVal) { + this.setData({ 'goods.thumb': newVal }); + }, + }, + thumbMode: { + type: String, + value: 'aspectFit', + }, + zIndex: { + type: Number, + value: 99, + }, + specs: { + type: Array, + value: [], + }, + }, + + data: { + goods: { + title: '', + thumb: '', + price: '', + hideKey: { + originPrice: true, + tags: true, + specs: true, + num: true, + }, + }, + }, + methods: { + onClose() { + this.triggerEvent('close'); + }, + + onCloseOver() { + this.triggerEvent('closeover'); + }, + }, +}); diff --git a/scr/miniprogram-2/pages/cart/components/specs-popup/index.json b/scr/miniprogram-2/pages/cart/components/specs-popup/index.json new file mode 100644 index 0000000..d59fc6d --- /dev/null +++ b/scr/miniprogram-2/pages/cart/components/specs-popup/index.json @@ -0,0 +1,7 @@ +{ + "component": true, + "usingComponents": { + "t-popup": "tdesign-miniprogram/popup/popup", + "goods-card": "../../components/goods-card/index" + } +} \ No newline at end of file diff --git a/scr/miniprogram-2/pages/cart/components/specs-popup/index.wxml b/scr/miniprogram-2/pages/cart/components/specs-popup/index.wxml new file mode 100644 index 0000000..4ddcb43 --- /dev/null +++ b/scr/miniprogram-2/pages/cart/components/specs-popup/index.wxml @@ -0,0 +1,26 @@ + + + + + + 已选规格 + + {{spec}} + + + + + 我知道了 + + + diff --git a/scr/miniprogram-2/pages/cart/components/specs-popup/index.wxss b/scr/miniprogram-2/pages/cart/components/specs-popup/index.wxss new file mode 100644 index 0000000..359c185 --- /dev/null +++ b/scr/miniprogram-2/pages/cart/components/specs-popup/index.wxss @@ -0,0 +1,68 @@ +.specs-popup { + width: 100vw; + box-sizing: border-box; + padding: 32rpx 32rpx calc(20rpx + env(safe-area-inset-bottom)) 32rpx; + max-height: 80vh; + display: flex; + flex-direction: column; + background-color: white; + border-radius: 20rpx 20rpx 0 0; +} +.specs-popup .section { + margin-top: 44rpx; + flex: auto; + overflow-y: scroll; + overflow-x: hidden; + -webkit-overflow-scrolling: touch; +} +.specs-popup .section .title { + font-size: 26rpx; + color: #4f5356; +} +.specs-popup .section .options { + color: #333333; + font-size: 24rpx; + margin-right: -26rpx; +} +.specs-popup .section .options .option { + display: inline-block; + margin-top: 24rpx; + height: 56rpx; + line-height: 56rpx; + padding: 0 16rpx; + border-radius: 8rpx; + background-color: #f5f5f5; + max-width: 100%; + box-sizing: border-box; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; +} +.specs-popup .section .options .option:not(:last-child) { + margin-right: 26rpx; +} +.specs-popup .bottom-btn { + margin-top: 42rpx; + position: relative; + height: 80rpx; + line-height: 80rpx; + text-align: center; + background-color: white; + color: #fa4126; +} +.specs-popup .bottom-btn--active { + opacity: 0.5; +} +.specs-popup .bottom-btn::after { + display: block; + content: ' '; + position: absolute; + left: 0; + top: 0; + width: 200%; + height: 200%; + border: 1px solid #fa4126; + border-radius: 80rpx; + transform: scale(0.5); + transform-origin: left top; +} diff --git a/scr/miniprogram-2/pages/cart/index.js b/scr/miniprogram-2/pages/cart/index.js new file mode 100644 index 0000000..3fd6d61 --- /dev/null +++ b/scr/miniprogram-2/pages/cart/index.js @@ -0,0 +1,315 @@ +import Dialog from 'tdesign-miniprogram/dialog/index'; +import Toast from 'tdesign-miniprogram/toast/index'; +import { fetchCartGroupData } from '../../services/cart/cart'; + +Page({ + data: { + cartGroupData: null, + }, + + // 调用自定义tabbar的init函数,使页面与tabbar激活状态保持一致 + onShow() { + this.getTabBar().init(); + }, + + onLoad() { + this.refreshData(); + }, + + refreshData() { + this.getCartGroupData().then((res) => { + let isEmpty = true; + const cartGroupData = res.data; + // 一些组件中需要的字段可能接口并没有返回,或者返回的数据结构与预期不一致,需要在此先对数据做一些处理 + // 统计门店下加购的商品是否全选、是否存在缺货/无货 + for (const store of cartGroupData.storeGoods) { + store.isSelected = true; // 该门店已加购商品是否全选 + store.storeStockShortage = false; // 该门店已加购商品是否存在库存不足 + if (!store.shortageGoodsList) { + store.shortageGoodsList = []; // 该门店已加购商品如果库存为0需单独分组 + } + for (const activity of store.promotionGoodsList) { + activity.goodsPromotionList = activity.goodsPromotionList.filter( + (goods) => { + goods.originPrice = undefined; + + // 统计是否有加购数大于库存数的商品 + if (goods.quantity > goods.stockQuantity) { + store.storeStockShortage = true; + } + // 统计是否全选 + if (!goods.isSelected) { + store.isSelected = false; + } + // 库存为0(无货)的商品单独分组 + if (goods.stockQuantity > 0) { + return true; + } + store.shortageGoodsList.push(goods); + return false; + }, + ); + + if (activity.goodsPromotionList.length > 0) { + isEmpty = false; + } + } + if (store.shortageGoodsList.length > 0) { + isEmpty = false; + } + } + cartGroupData.invalidGoodItems = cartGroupData.invalidGoodItems.map( + (goods) => { + goods.originPrice = undefined; + return goods; + }, + ); + cartGroupData.isNotEmpty = !isEmpty; + this.setData({ cartGroupData }); + }); + }, + + findGoods(spuId, skuId) { + let currentStore; + let currentActivity; + let currentGoods; + const { storeGoods } = this.data.cartGroupData; + for (const store of storeGoods) { + for (const activity of store.promotionGoodsList) { + for (const goods of activity.goodsPromotionList) { + if (goods.spuId === spuId && goods.skuId === skuId) { + currentStore = store; + currentActivity = currentActivity; + currentGoods = goods; + return { + currentStore, + currentActivity, + currentGoods, + }; + } + } + } + } + return { + currentStore, + currentActivity, + currentGoods, + }; + }, + + // 注:实际场景时应该调用接口获取购物车数据 + getCartGroupData() { + const { cartGroupData } = this.data; + if (!cartGroupData) { + return fetchCartGroupData(); + } + return Promise.resolve({ data: cartGroupData }); + }, + + // 选择单个商品 + // 注:实际场景时应该调用接口更改选中状态 + selectGoodsService({ spuId, skuId, isSelected }) { + this.findGoods(spuId, skuId).currentGoods.isSelected = isSelected; + return Promise.resolve(); + }, + + // 全选门店 + // 注:实际场景时应该调用接口更改选中状态 + selectStoreService({ storeId, isSelected }) { + const currentStore = this.data.cartGroupData.storeGoods.find( + (s) => s.storeId === storeId, + ); + currentStore.isSelected = isSelected; + currentStore.promotionGoodsList.forEach((activity) => { + activity.goodsPromotionList.forEach((goods) => { + goods.isSelected = isSelected; + }); + }); + return Promise.resolve(); + }, + + // 加购数量变更 + // 注:实际场景时应该调用接口 + changeQuantityService({ spuId, skuId, quantity }) { + this.findGoods(spuId, skuId).currentGoods.quantity = quantity; + return Promise.resolve(); + }, + + // 删除加购商品 + // 注:实际场景时应该调用接口 + deleteGoodsService({ spuId, skuId }) { + function deleteGoods(group) { + for (const gindex in group) { + const goods = group[gindex]; + if (goods.spuId === spuId && goods.skuId === skuId) { + group.splice(gindex, 1); + return gindex; + } + } + return -1; + } + const { storeGoods, invalidGoodItems } = this.data.cartGroupData; + for (const store of storeGoods) { + for (const activity of store.promotionGoodsList) { + if (deleteGoods(activity.goodsPromotionList) > -1) { + return Promise.resolve(); + } + } + if (deleteGoods(store.shortageGoodsList) > -1) { + return Promise.resolve(); + } + } + if (deleteGoods(invalidGoodItems) > -1) { + return Promise.resolve(); + } + return Promise.reject(); + }, + + // 清空失效商品 + // 注:实际场景时应该调用接口 + clearInvalidGoodsService() { + this.data.cartGroupData.invalidGoodItems = []; + return Promise.resolve(); + }, + + onGoodsSelect(e) { + const { + goods: { spuId, skuId }, + isSelected, + } = e.detail; + const { currentGoods } = this.findGoods(spuId, skuId); + Toast({ + context: this, + selector: '#t-toast', + message: `${isSelected ? '选择' : '取消'}"${ + currentGoods.title.length > 5 + ? `${currentGoods.title.slice(0, 5)}...` + : currentGoods.title + }"`, + icon: '', + }); + this.selectGoodsService({ spuId, skuId, isSelected }).then(() => + this.refreshData(), + ); + }, + + onStoreSelect(e) { + const { + store: { storeId }, + isSelected, + } = e.detail; + this.selectStoreService({ storeId, isSelected }).then(() => + this.refreshData(), + ); + }, + + onQuantityChange(e) { + const { + goods: { spuId, skuId }, + quantity, + } = e.detail; + const { currentGoods } = this.findGoods(spuId, skuId); + const stockQuantity = + currentGoods.stockQuantity > 0 ? currentGoods.stockQuantity : 0; // 避免后端返回的是-1 + // 加购数量超过库存数量 + if (quantity > stockQuantity) { + // 加购数量等于库存数量的情况下继续加购 + if ( + currentGoods.quantity === stockQuantity && + quantity - stockQuantity === 1 + ) { + Toast({ + context: this, + selector: '#t-toast', + message: '当前商品库存不足', + }); + return; + } + Dialog.confirm({ + title: '商品库存不足', + content: `当前商品库存不足,最大可购买数量为${stockQuantity}件`, + confirmBtn: '修改为最大可购买数量', + cancelBtn: '取消', + }) + .then(() => { + this.changeQuantityService({ + spuId, + skuId, + quantity: stockQuantity, + }).then(() => this.refreshData()); + }) + .catch(() => {}); + return; + } + this.changeQuantityService({ spuId, skuId, quantity }).then(() => + this.refreshData(), + ); + }, + + goCollect() { + /** 活动肯定有一个活动ID,用来获取活动banner,活动商品列表等 */ + const promotionID = '123'; + wx.navigateTo({ + url: `/pages/promotion-detail/index?promotion_id=${promotionID}`, + }); + }, + + goGoodsDetail(e) { + const { spuId, storeId } = e.detail.goods; + wx.navigateTo({ + url: `/pages/goods/details/index?spuId=${spuId}&storeId=${storeId}`, + }); + }, + + clearInvalidGoods() { + // 实际场景时应该调用接口清空失效商品 + this.clearInvalidGoodsService().then(() => this.refreshData()); + }, + + onGoodsDelete(e) { + const { + goods: { spuId, skuId }, + } = e.detail; + Dialog.confirm({ + content: '确认删除该商品吗?', + confirmBtn: '确定', + cancelBtn: '取消', + }).then(() => { + this.deleteGoodsService({ spuId, skuId }).then(() => { + Toast({ context: this, selector: '#t-toast', message: '商品删除成功' }); + this.refreshData(); + }); + }); + }, + + onSelectAll(event) { + const { isAllSelected } = event?.detail ?? {}; + Toast({ + context: this, + selector: '#t-toast', + message: `${isAllSelected ? '取消' : '点击'}了全选按钮`, + }); + // 调用接口改变全选 + }, + + onToSettle() { + const goodsRequestList = []; + this.data.cartGroupData.storeGoods.forEach((store) => { + store.promotionGoodsList.forEach((promotion) => { + promotion.goodsPromotionList.forEach((m) => { + if (m.isSelected == 1) { + goodsRequestList.push(m); + } + }); + }); + }); + wx.setStorageSync( + 'order.goodsRequestList', + JSON.stringify(goodsRequestList), + ); + wx.navigateTo({ url: '/pages/order/order-confirm/index?type=cart' }); + }, + onGotoHome() { + wx.switchTab({ url: '/pages/home/home' }); + }, +}); diff --git a/scr/miniprogram-2/pages/cart/index.json b/scr/miniprogram-2/pages/cart/index.json new file mode 100644 index 0000000..1d2e717 --- /dev/null +++ b/scr/miniprogram-2/pages/cart/index.json @@ -0,0 +1,10 @@ +{ + "navigationBarTitleText": "购物车", + "usingComponents": { + "cart-group": "./components/cart-group/index", + "cart-empty": "./components/cart-empty/index", + "cart-bar": "./components/cart-bar/index", + "t-toast": "tdesign-miniprogram/toast/toast", + "t-dialog": "tdesign-miniprogram/dialog/dialog" + } +} \ No newline at end of file diff --git a/scr/miniprogram-2/pages/cart/index.wxml b/scr/miniprogram-2/pages/cart/index.wxml new file mode 100644 index 0000000..aa1acec --- /dev/null +++ b/scr/miniprogram-2/pages/cart/index.wxml @@ -0,0 +1,31 @@ + + + + + + + + + + + + diff --git a/scr/miniprogram-2/pages/cart/index.wxss b/scr/miniprogram-2/pages/cart/index.wxss new file mode 100644 index 0000000..4eec899 --- /dev/null +++ b/scr/miniprogram-2/pages/cart/index.wxss @@ -0,0 +1,12 @@ +:host { + padding-bottom: 100rpx; +} + +.gap { + height: 100rpx; + width: 100%; +} + +.add-notes__confirm { + color: #fa4126 !important; +} diff --git a/scr/miniprogram-2/pages/coupon/components/coupon-card/index.js b/scr/miniprogram-2/pages/coupon/components/coupon-card/index.js new file mode 100644 index 0000000..07785fe --- /dev/null +++ b/scr/miniprogram-2/pages/coupon/components/coupon-card/index.js @@ -0,0 +1,57 @@ +const statusMap = { + default: { text: '去使用', theme: 'primary' }, + useless: { text: '已使用', theme: 'default' }, + disabled: { text: '已过期', theme: 'default' }, +}; +Component({ + options: { + addGlobalClass: true, + multipleSlots: true, // 在组件定义时的选项中启用多slot支持 + }, + + externalClasses: ['coupon-class'], + + properties: { + couponDTO: { + type: Object, + value: {}, // 优惠券数据 + }, + }, + + data: { + btnText: '', + btnTheme: '', + }, + + observers: { + couponDTO: function (couponDTO) { + if (!couponDTO) { + return; + } + const statusInfo = statusMap[couponDTO.status]; + + this.setData({ + btnText: statusInfo.text, + btnTheme: statusInfo.theme, + }); + }, + }, + + attached() {}, + + methods: { + // 跳转到详情页 + gotoDetail() { + wx.navigateTo({ + url: `/pages/coupon/coupon-detail/index?id=${this.data.couponDTO.key}`, + }); + }, + + // 跳转到商品列表 + gotoGoodsList() { + wx.navigateTo({ + url: `/pages/coupon/coupon-activity-goods/index?id=${this.data.couponDTO.key}`, + }); + }, + }, +}); diff --git a/scr/miniprogram-2/pages/coupon/components/coupon-card/index.json b/scr/miniprogram-2/pages/coupon/components/coupon-card/index.json new file mode 100644 index 0000000..2d851d1 --- /dev/null +++ b/scr/miniprogram-2/pages/coupon/components/coupon-card/index.json @@ -0,0 +1,7 @@ +{ + "component": true, + "usingComponents": { + "ui-coupon-card": "../ui-coupon-card/index", + "t-button": "tdesign-miniprogram/button/button" + } +} diff --git a/scr/miniprogram-2/pages/coupon/components/coupon-card/index.wxml b/scr/miniprogram-2/pages/coupon/components/coupon-card/index.wxml new file mode 100644 index 0000000..3c8315e --- /dev/null +++ b/scr/miniprogram-2/pages/coupon/components/coupon-card/index.wxml @@ -0,0 +1,17 @@ + + + {{btnText}} + + + + diff --git a/scr/miniprogram-2/pages/coupon/components/coupon-card/index.wxss b/scr/miniprogram-2/pages/coupon/components/coupon-card/index.wxss new file mode 100644 index 0000000..666e4b4 --- /dev/null +++ b/scr/miniprogram-2/pages/coupon/components/coupon-card/index.wxss @@ -0,0 +1,12 @@ +.coupon-btn-slot .coupon-btn-primary { + width: 136rpx; + height: 56rpx; + border-radius: 28rpx; + background-color: transparent; + border-color: #fa4126; + color: #fa4126; +} + +.coupon-btn-default { + display: none; +} diff --git a/scr/miniprogram-2/pages/coupon/components/floating-button/index.js b/scr/miniprogram-2/pages/coupon/components/floating-button/index.js new file mode 100644 index 0000000..f29bcad --- /dev/null +++ b/scr/miniprogram-2/pages/coupon/components/floating-button/index.js @@ -0,0 +1,17 @@ +Component({ + data: { icon: 'cart' }, + + properties: { + count: { + type: Number, + }, + }, + + methods: { + goToCart() { + wx.switchTab({ + url: '/pages/cart/index', + }); + }, + }, +}); diff --git a/scr/miniprogram-2/pages/coupon/components/floating-button/index.json b/scr/miniprogram-2/pages/coupon/components/floating-button/index.json new file mode 100644 index 0000000..fa2d209 --- /dev/null +++ b/scr/miniprogram-2/pages/coupon/components/floating-button/index.json @@ -0,0 +1,6 @@ +{ + "component": true, + "usingComponents": { + "t-icon": "tdesign-miniprogram/icon/icon" + } +} \ No newline at end of file diff --git a/scr/miniprogram-2/pages/coupon/components/floating-button/index.wxml b/scr/miniprogram-2/pages/coupon/components/floating-button/index.wxml new file mode 100644 index 0000000..7f1a9e7 --- /dev/null +++ b/scr/miniprogram-2/pages/coupon/components/floating-button/index.wxml @@ -0,0 +1,14 @@ + + + + + + {{count}} + + + diff --git a/scr/miniprogram-2/pages/coupon/components/floating-button/index.wxss b/scr/miniprogram-2/pages/coupon/components/floating-button/index.wxss new file mode 100644 index 0000000..faad943 --- /dev/null +++ b/scr/miniprogram-2/pages/coupon/components/floating-button/index.wxss @@ -0,0 +1,30 @@ +.floating-button { + position: fixed; + right: 20rpx; + bottom: 108rpx; +} + +.floating-button .floating-inner-container { + display: flex; + align-items: center; + justify-content: center; + height: 96rpx; + width: 96rpx; + background-color: rgba(0, 0, 0, 0.8); + opacity: 0.7; + border-radius: 48rpx; +} + +.floating-button .floating-right-top { + position: absolute; + right: 0rpx; + top: 0rpx; + height: 28rpx; + background: #fa4126; + border-radius: 64rpx; + font-weight: bold; + font-size: 22rpx; + line-height: 28rpx; + color: #fff; + padding: 0 8rpx; +} diff --git a/scr/miniprogram-2/pages/coupon/components/ui-coupon-card/index.js b/scr/miniprogram-2/pages/coupon/components/ui-coupon-card/index.js new file mode 100644 index 0000000..9101be8 --- /dev/null +++ b/scr/miniprogram-2/pages/coupon/components/ui-coupon-card/index.js @@ -0,0 +1,87 @@ +Component({ + options: { + addGlobalClass: true, + multipleSlots: true, + }, + + externalClasses: ['coupon-class'], + + properties: { + mask: { + type: Boolean, + value: false, // 是否添加遮罩 + }, + superposable: { + type: Boolean, + value: false, // 是否可叠加 + }, + type: { + type: String, + value: '', // 优惠券类型:CouponType + }, + value: { + type: String, + value: '', // 优惠金额 + }, + tag: { + type: String, + value: '', // 优惠标签,优惠券名字标签,img + }, + desc: { + type: String, + value: '', // 优惠金额描述,金额下方 + }, + title: { + type: String, // 优惠券名称 + value: '', + }, + timeLimit: { + type: String, // 优惠券时限 + value: '', + }, + ruleDesc: { + type: String, // 优惠券适用规则描述 + value: '', + }, + currency: { + type: String, + value: '¥', // 优惠货币 + }, + status: { + type: String, + value: 'default', + }, + image: { + type: String, + value: '', + }, + }, + + data: { + CouponType: { + MJ_COUPON: 1, + ZK_COUPON: 2, + MJF_COUPON: 3, + GIFT_COUPON: 4, + }, + theme: 'primary', + }, + + observers: { + status: function (value) { + let theme = 'primary'; + // 已过期或已使用的券 颜色置灰 + if (value === 'useless' || value === 'disabled') { + theme = 'weak'; + } + + this.setData({ theme }); + }, + }, + + attached() { + this.setData({ + color: `color${this.properties.colorStyle}`, + }); + }, +}); diff --git a/scr/miniprogram-2/pages/coupon/components/ui-coupon-card/index.json b/scr/miniprogram-2/pages/coupon/components/ui-coupon-card/index.json new file mode 100644 index 0000000..dd874c8 --- /dev/null +++ b/scr/miniprogram-2/pages/coupon/components/ui-coupon-card/index.json @@ -0,0 +1,7 @@ +{ + "component": true, + "usingComponents": { + "t-icon": "tdesign-miniprogram/icon/icon", + "t-image": "/components/webp-image/index" + } +} \ No newline at end of file diff --git a/scr/miniprogram-2/pages/coupon/components/ui-coupon-card/index.wxml b/scr/miniprogram-2/pages/coupon/components/ui-coupon-card/index.wxml new file mode 100644 index 0000000..baf53d9 --- /dev/null +++ b/scr/miniprogram-2/pages/coupon/components/ui-coupon-card/index.wxml @@ -0,0 +1,54 @@ + + function isBigValue(value) { + var values = (value + '').split('.'); + if (values[1] && values[0].length >= 3) return true; + else return false + } + + function getBigValues(value) { + return value.split('.'); + } + + module.exports = { isBigValue: isBigValue, getBigValues: getBigValues }; + + + + + {{value}} + + {{desc}} + + + + {{tools.getBigValues(value)[0]}} + .{{tools.getBigValues(value)[1]}} + + {{value / 100}} + + {{desc}} + + + 免邮 + {{desc}} + + + + + + + + {{title}} + {{timeLimit}} + + {{ruleDesc}} + + + + + + + + + 可叠加 + + diff --git a/scr/miniprogram-2/pages/coupon/components/ui-coupon-card/index.wxss b/scr/miniprogram-2/pages/coupon/components/ui-coupon-card/index.wxss new file mode 100644 index 0000000..0ef9648 --- /dev/null +++ b/scr/miniprogram-2/pages/coupon/components/ui-coupon-card/index.wxss @@ -0,0 +1,147 @@ +.wr-coupon { + display: flex; + background-image: url('https://cdn-we-retail.ym.tencent.com/miniapp/coupon/coupon-bg-nocorners.png'); + background-size: 100% 100%; + background-repeat: no-repeat; + position: relative; + margin-bottom: 24rpx; + overflow: hidden; +} +.theme-weak.wr-coupon { + background-image: url('https://cdn-we-retail.ym.tencent.com/miniapp/coupon/coupon-bg-grey2.png'); +} + +.wr-coupon__left { + width: 200rpx; + height: 180rpx; + display: flex; + flex-direction: column; + justify-content: center; + text-align: center; + color: #fa4126; + overflow: hidden; + position: relative; +} +.theme-weak .wr-coupon__left { + color: #333; +} + +.wr-coupon__left--value { + font-size: 64rpx; + line-height: 88rpx; + font-weight: bold; + font-family: 'DIN Alternate', cursive; +} +.wr-coupon__left--value-int { + font-size: 48rpx; + line-height: 88rpx; +} +.wr-coupon__left--value-decimal { + font-size: 36rpx; + line-height: 48rpx; +} +.wr-coupon__left--image { + width: 128rpx; + height: 128rpx; + border-radius: 8px; + margin-top: 30rpx; +} +.wr-coupon__left--unit { + font-size: 24rpx; + line-height: 32rpx; +} +.wr-coupon__left--desc { + font-size: 24rpx; + line-height: 32rpx; + color: #fa4126; +} + +.theme-weak .wr-coupon__left--desc { + color: #333; +} + +.wr-coupon__right { + flex-grow: 1; + padding: 0 20rpx; + height: 180rpx; + box-sizing: border-box; + overflow: hidden; + display: flex; + align-items: center; +} +.wr-coupon__right--title { + display: flex; + -webkit-display: flex; + flex-direction: column; + align-items: flex-start; + color: #999999; + font-size: 24rpx; + flex: 1; +} +.wr-coupon__right--title .coupon-title { + max-width: 320rpx; + color: #333333; + font-size: 28rpx; + line-height: 40rpx; + font-weight: bold; + display: -webkit-box; + -webkit-line-clamp: 1; + -webkit-box-orient: vertical; + overflow: hidden; + white-space: normal; +} +.wr-coupon__right--title .coupon-time { + margin-top: 16rpx; + /* // letter-spacing: -0.05em; */ +} +.wr-coupon__right--title .coupon-desc { + margin-top: 8rpx; +} +.wr-coupon__right--title .coupon-arrow { + font-size: 22rpx; +} +.wr-coupon__right--oper { + display: flex; + justify-content: center; + align-items: center; +} +.wr-coupon__mask { + width: 702rpx; + height: 182rpx; + position: absolute; + top: 0; + left: 0; + background-color: #ffffff; + opacity: 0.5; +} +.wr-coupon__tag { + position: absolute; + top: 8px; + right: -24rpx; + text-align: center; + width: 106rpx; + height: 28rpx; + opacity: 0.9; + font-size: 20rpx; + line-height: 28rpx; + color: #fa4126; + border: 0.5px solid #fa4126; + box-sizing: border-box; + transform: rotate(45deg); +} +.wr-coupon__seal { + width: 128rpx; + height: 128rpx; + position: absolute; + top: 0; + right: 0; + background-size: 100% 100%; +} + +.wr-coupon__seal.seal-useless { + background-image: url('https://cdn-we-retail.ym.tencent.com/miniapp/coupon/seal-used.png'); +} + +.wr-coupon__seal.seal-disabled { + background-image: url('https://cdn-we-retail.ym.tencent.com/miniapp/coupon/coupon-expired.png'); +} diff --git a/scr/miniprogram-2/pages/coupon/coupon-activity-goods/index.js b/scr/miniprogram-2/pages/coupon/coupon-activity-goods/index.js new file mode 100644 index 0000000..bf08d36 --- /dev/null +++ b/scr/miniprogram-2/pages/coupon/coupon-activity-goods/index.js @@ -0,0 +1,78 @@ +import { fetchCouponDetail } from '../../../services/coupon/index'; +import { fetchGoodsList } from '../../../services/good/fetchGoods'; +import Toast from 'tdesign-miniprogram/toast/index'; + +Page({ + data: { + goods: [], + detail: {}, + couponTypeDesc: '', + showStoreInfoList: false, + cartNum: 2, + }, + + id: '', + + onLoad(query) { + const id = parseInt(query.id); + this.id = id; + + this.getCouponDetail(id); + this.getGoodsList(id); + }, + + getCouponDetail(id) { + fetchCouponDetail(id).then(({ detail }) => { + this.setData({ detail }); + if (detail.type === 2) { + if (detail.base > 0) { + this.setData({ + couponTypeDesc: `满${detail.base / 100}元${detail.value}折`, + }); + } else { + this.setData({ couponTypeDesc: `${detail.value}折` }); + } + } else if (detail.type === 1) { + if (detail.base > 0) { + this.setData({ + couponTypeDesc: `满${detail.base / 100}元减${detail.value / 100}元`, + }); + } else { + this.setData({ couponTypeDesc: `减${detail.value / 100}元` }); + } + } + }); + }, + + getGoodsList(id) { + fetchGoodsList(id).then((goods) => { + this.setData({ goods }); + }); + }, + + openStoreList() { + this.setData({ + showStoreInfoList: true, + }); + }, + + closeStoreList() { + this.setData({ + showStoreInfoList: false, + }); + }, + + goodClickHandle(e) { + const { index } = e.detail; + const { spuId } = this.data.goods[index]; + wx.navigateTo({ url: `/pages/goods/details/index?spuId=${spuId}` }); + }, + + cartClickHandle() { + Toast({ + context: this, + selector: '#t-toast', + message: '点击加入购物车', + }); + }, +}); diff --git a/scr/miniprogram-2/pages/coupon/coupon-activity-goods/index.json b/scr/miniprogram-2/pages/coupon/coupon-activity-goods/index.json new file mode 100644 index 0000000..31cf9c3 --- /dev/null +++ b/scr/miniprogram-2/pages/coupon/coupon-activity-goods/index.json @@ -0,0 +1,10 @@ +{ + "navigationBarTitleText": "活动商品", + "usingComponents": { + "t-icon": "tdesign-miniprogram/icon/icon", + "t-popup": "tdesign-miniprogram/popup/popup", + "t-toast": "tdesign-miniprogram/toast/toast", + "goods-list": "/components/goods-list/index", + "floating-button": "../components/floating-button/index" + } +} \ No newline at end of file diff --git a/scr/miniprogram-2/pages/coupon/coupon-activity-goods/index.wxml b/scr/miniprogram-2/pages/coupon/coupon-activity-goods/index.wxml new file mode 100644 index 0000000..a10ddd0 --- /dev/null +++ b/scr/miniprogram-2/pages/coupon/coupon-activity-goods/index.wxml @@ -0,0 +1,54 @@ + + + + 以下商品可使用 + {{couponTypeDesc}} + 优惠券 + + + + + + + + + + + + 规则详情 + + + + 优惠券有效时间 + {{detail.timeLimit}} + + + 优惠券说明 + {{detail.desc}} + + + 使用须知 + {{detail.useNotes}} + + + + + + + diff --git a/scr/miniprogram-2/pages/coupon/coupon-activity-goods/index.wxss b/scr/miniprogram-2/pages/coupon/coupon-activity-goods/index.wxss new file mode 100644 index 0000000..be5fdaf --- /dev/null +++ b/scr/miniprogram-2/pages/coupon/coupon-activity-goods/index.wxss @@ -0,0 +1,74 @@ +page { + background-color: #f5f5f5; +} + +.coupon-page-container .notice-bar-content { + display: flex; + flex-direction: row; + align-items: center; + padding: 8rpx 0; +} + +.coupon-page-container .notice-bar-text { + font-size: 26rpx; + line-height: 36rpx; + font-weight: 400; + color: #666666; + margin-left: 24rpx; +} + +.coupon-page-container .notice-bar-text .height-light { + color: #fa550f; +} + +.coupon-page-container .notice-bar-icon { + margin-left: 12rpx; + height: 68rpx; + line-height: 68rpx !important; +} + +.coupon-page-container .popup-content-wrap { + background-color: #fff; + border-top-left-radius: 20rpx; + border-top-right-radius: 20rpx; +} + +.coupon-page-container .popup-content-title { + font-size: 32rpx; + color: #333; + text-align: center; + height: 104rpx; + line-height: 104rpx; + position: relative; +} + +.coupon-page-container .desc-group-wrap { + padding-bottom: env(safe-area-inset-bottom); +} + +.coupon-page-container .desc-group-wrap .item-wrap { + margin: 0 30rpx 30rpx; +} + +.coupon-page-container .desc-group-wrap .item-title { + font-size: 26rpx; + color: #333; + font-weight: 500; +} + +.coupon-page-container .desc-group-wrap .item-label { + font-size: 24rpx; + color: #666; + margin-top: 12rpx; + white-space: pre-line; + word-break: break-all; + line-height: 34rpx; +} + +.coupon-page-container .goods-list-container { + margin: 0 24rpx 24rpx; +} + +.coupon-page-container .goods-list-wrap { + background: #f5f5f5 !important; +} diff --git a/scr/miniprogram-2/pages/coupon/coupon-detail/index.js b/scr/miniprogram-2/pages/coupon/coupon-detail/index.js new file mode 100644 index 0000000..71ff5d6 --- /dev/null +++ b/scr/miniprogram-2/pages/coupon/coupon-detail/index.js @@ -0,0 +1,32 @@ +import { fetchCouponDetail } from '../../../services/coupon/index'; + +Page({ + data: { + detail: null, + storeInfoList: [], + storeInfoStr: '', + showStoreInfoList: false, + }, + + id: '', + + onLoad(query) { + const id = parseInt(query.id); + this.id = id; + this.getGoodsList(id); + }, + + getGoodsList(id) { + fetchCouponDetail(id).then(({ detail }) => { + this.setData({ + detail, + }); + }); + }, + + navGoodListHandle() { + wx.navigateTo({ + url: `/pages/coupon/coupon-activity-goods/index?id=${this.id}`, + }); + }, +}); diff --git a/scr/miniprogram-2/pages/coupon/coupon-detail/index.json b/scr/miniprogram-2/pages/coupon/coupon-detail/index.json new file mode 100644 index 0000000..d419a0b --- /dev/null +++ b/scr/miniprogram-2/pages/coupon/coupon-detail/index.json @@ -0,0 +1,10 @@ +{ + "navigationBarTitleText": "优惠券详情", + "usingComponents": { + "coupon-card": "../components/coupon-card/index", + "t-cell": "tdesign-miniprogram/cell/cell", + "t-cell-group": "tdesign-miniprogram/cell-group/cell-group", + "t-button": "tdesign-miniprogram/button/button", + "t-icon": "tdesign-miniprogram/icon/icon" + } +} \ No newline at end of file diff --git a/scr/miniprogram-2/pages/coupon/coupon-detail/index.wxml b/scr/miniprogram-2/pages/coupon/coupon-detail/index.wxml new file mode 100644 index 0000000..5d1b906 --- /dev/null +++ b/scr/miniprogram-2/pages/coupon/coupon-detail/index.wxml @@ -0,0 +1,48 @@ + + + + + + + + + + + + + + + + 查看可用商品 + + + + diff --git a/scr/miniprogram-2/pages/coupon/coupon-detail/index.wxss b/scr/miniprogram-2/pages/coupon/coupon-detail/index.wxss new file mode 100644 index 0000000..eddcf25 --- /dev/null +++ b/scr/miniprogram-2/pages/coupon/coupon-detail/index.wxss @@ -0,0 +1,100 @@ +page { + background-color: #f5f5f5; +} + +.coupon-card-wrap { + background-color: #fff; + padding: 32rpx 32rpx 1rpx; +} +.desc-wrap { + margin-top: 24rpx; +} +.desc-wrap .button-wrap .view-good-list-btn { + width: 686rpx; + height: 88rpx; + margin-top: 50rpx; + background: #fa4126; + border-radius: 44rpx; + color: #fff; + font-size: 32rpx; + display: flex; + align-items: center; + justify-content: center; +} + +.desc-group-wrap .t-class-cell { + align-items: flex-start; +} + +.desc-group-wrap .t-class-title { + font-size: 26rpx; + width: 140rpx; + flex: none; + color: #888; +} + +.desc-group-wrap .t-class-note { + font-size: 26rpx; + word-break: break-all; + white-space: pre-line; + justify-content: flex-start; + color: #333; +} + +.desc-group-wrap { + border-radius: 8rpx; + overflow: hidden; + + --cell-label-font-size: 26rpx; + --cell-label-line-height: 36rpx; + --cell-label-color: #999; +} + +.desc-group-wrap.in-popup { + border-radius: 0; + overflow: auto; + max-height: 828rpx; +} + +.desc-group-wrap .wr-cell__title { + color: #333; + font-size: 28rpx; +} + +/* .desc-group-wrap .max-width-cell { + overflow: hidden; +} */ + +/* .desc-group-wrap .signal-line-label { + word-break: keep-all; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; +} +.desc-group-wrap .multi-line-label { + word-break: break-all; + white-space: pre-line; +} */ + +.popup-content-wrap { + background-color: #fff; + border-top-left-radius: 20rpx; + border-top-right-radius: 20rpx; +} + +.popup-content-title { + font-size: 32rpx; + color: #333; + + text-align: center; + height: 104rpx; + line-height: 104rpx; + + position: relative; +} + +.popup-content-title .close-icon { + position: absolute; + top: 24rpx; + right: 24rpx; +} diff --git a/scr/miniprogram-2/pages/coupon/coupon-list/index.js b/scr/miniprogram-2/pages/coupon/coupon-list/index.js new file mode 100644 index 0000000..f3b8675 --- /dev/null +++ b/scr/miniprogram-2/pages/coupon/coupon-list/index.js @@ -0,0 +1,77 @@ +import { fetchCouponList } from '../../../services/coupon/index'; + +Page({ + data: { + status: 0, + list: [ + { + text: '可使用', + key: 0, + }, + { + text: '已使用', + key: 1, + }, + { + text: '已失效', + key: 2, + }, + ], + + couponList: [], + }, + + onLoad() { + this.init(); + }, + + init() { + this.fetchList(); + }, + + fetchList(status = this.data.status) { + let statusInFetch = ''; + switch (Number(status)) { + case 0: { + statusInFetch = 'default'; + break; + } + case 1: { + statusInFetch = 'useless'; + break; + } + case 2: { + statusInFetch = 'disabled'; + break; + } + default: { + throw new Error(`unknown fetchStatus: ${statusInFetch}`); + } + } + fetchCouponList(statusInFetch).then((couponList) => { + this.setData({ couponList }); + }); + }, + + tabChange(e) { + const { value } = e.detail; + + this.setData({ status: value }); + this.fetchList(value); + }, + + goCouponCenterHandle() { + wx.showToast({ title: '去领券中心', icon: 'none' }); + }, + + onPullDownRefresh_() { + this.setData( + { + couponList: [], + }, + () => { + this.fetchList(); + }, + ); + }, +}); diff --git a/scr/miniprogram-2/pages/coupon/coupon-list/index.json b/scr/miniprogram-2/pages/coupon/coupon-list/index.json new file mode 100644 index 0000000..c09d584 --- /dev/null +++ b/scr/miniprogram-2/pages/coupon/coupon-list/index.json @@ -0,0 +1,10 @@ +{ + "navigationBarTitleText": "优惠券", + "usingComponents": { + "t-pull-down-refresh": "tdesign-miniprogram/pull-down-refresh/pull-down-refresh", + "t-tabs": "tdesign-miniprogram/tabs/tabs", + "t-tab-panel": "tdesign-miniprogram/tabs/tab-panel", + "t-icon": "tdesign-miniprogram/icon/icon", + "coupon-card": "../components/coupon-card/index" + } +} \ No newline at end of file diff --git a/scr/miniprogram-2/pages/coupon/coupon-list/index.wxml b/scr/miniprogram-2/pages/coupon/coupon-list/index.wxml new file mode 100644 index 0000000..391fe7b --- /dev/null +++ b/scr/miniprogram-2/pages/coupon/coupon-list/index.wxml @@ -0,0 +1,42 @@ + + + + + + + + + + + + 领券中心 + + + + + diff --git a/scr/miniprogram-2/pages/coupon/coupon-list/index.wxss b/scr/miniprogram-2/pages/coupon/coupon-list/index.wxss new file mode 100644 index 0000000..9ee2b9d --- /dev/null +++ b/scr/miniprogram-2/pages/coupon/coupon-list/index.wxss @@ -0,0 +1,78 @@ +page { + height: 100%; +} + +.tabs-external__inner { + height: 88rpx; + width: 100%; + line-height: 88rpx; + z-index: 100; +} +.tabs-external__inner { + font-size: 26rpx; + color: #333333; + position: fixed; + width: 100vw; + top: 0; + left: 0; +} + +.tabs-external__inner .tabs-external__track { + background: #fa4126 !important; +} + +.tabs-external__inner .tabs-external__item { + color: #666; +} + +.tabs-external__inner .tabs-external__active { + font-size: 28rpx; + color: #fa4126 !important; +} + +.tabs-external__inner.order-nav .order-nav-item .bottom-line { + bottom: 12rpx; +} + +.coupon-list-wrap { + margin-top: 108rpx; + margin-left: 24rpx; + margin-right: 24rpx; + overflow-y: auto; + padding-bottom: 100rpx; + padding-bottom: calc(constant(safe-area-inset-top) + 100rpx); + padding-bottom: calc(env(safe-area-inset-bottom) + 100rpx); + -webkit-overflow-scrolling: touch; +} + +.center-entry { + box-sizing: content-box; + border-top: 1rpx solid #dce0e4; + background-color: #fff; + position: fixed; + bottom: 0; + left: 0; + right: 0; + height: 100rpx; + padding-bottom: 0; + padding-bottom: constant(safe-area-inset-top); + padding-bottom: env(safe-area-inset-bottom); +} + +.center-entry-btn { + color: #fa4126; + font-size: 32rpx; + text-align: center; + line-height: 100rpx; + display: flex; + align-items: center; + justify-content: center; + height: 100rpx; +} + +.coupon-list-wrap .t-pull-down-refresh__bar { + background: #fff !important; +} +.t-class-indicator { + color: #b9b9b9 !important; +} diff --git a/scr/miniprogram-2/pages/forum/forum.js b/scr/miniprogram-2/pages/forum/forum.js new file mode 100644 index 0000000..434e6f6 --- /dev/null +++ b/scr/miniprogram-2/pages/forum/forum.js @@ -0,0 +1,66 @@ +// pages/forum/forum.js +Page({ + + /** + * 页面的初始数据 + */ + data: { + + }, + + /** + * 生命周期函数--监听页面加载 + */ + onLoad(options) { + + }, + + /** + * 生命周期函数--监听页面初次渲染完成 + */ + onReady() { + + }, + + /** + * 生命周期函数--监听页面显示 + */ + onShow() { + + }, + + /** + * 生命周期函数--监听页面隐藏 + */ + onHide() { + + }, + + /** + * 生命周期函数--监听页面卸载 + */ + onUnload() { + + }, + + /** + * 页面相关事件处理函数--监听用户下拉动作 + */ + onPullDownRefresh() { + + }, + + /** + * 页面上拉触底事件的处理函数 + */ + onReachBottom() { + + }, + + /** + * 用户点击右上角分享 + */ + onShareAppMessage() { + + } +}) \ No newline at end of file diff --git a/scr/miniprogram-2/pages/forum/forum.json b/scr/miniprogram-2/pages/forum/forum.json new file mode 100644 index 0000000..8835af0 --- /dev/null +++ b/scr/miniprogram-2/pages/forum/forum.json @@ -0,0 +1,3 @@ +{ + "usingComponents": {} +} \ No newline at end of file diff --git a/scr/miniprogram-2/pages/forum/forum.wxml b/scr/miniprogram-2/pages/forum/forum.wxml new file mode 100644 index 0000000..422ebef --- /dev/null +++ b/scr/miniprogram-2/pages/forum/forum.wxml @@ -0,0 +1,2 @@ + +pages/forum/forum.wxml diff --git a/scr/miniprogram-2/pages/forum/forum.wxss b/scr/miniprogram-2/pages/forum/forum.wxss new file mode 100644 index 0000000..56e2d28 --- /dev/null +++ b/scr/miniprogram-2/pages/forum/forum.wxss @@ -0,0 +1 @@ +/* pages/forum/forum.wxss */ \ No newline at end of file diff --git a/scr/miniprogram-2/pages/goods/category/components/goods-category/components/c-sidebar/README.md b/scr/miniprogram-2/pages/goods/category/components/goods-category/components/c-sidebar/README.md new file mode 100644 index 0000000..88d7b0b --- /dev/null +++ b/scr/miniprogram-2/pages/goods/category/components/goods-category/components/c-sidebar/README.md @@ -0,0 +1,95 @@ +# Sidebar 侧边导航 + +### 引入 + +全局引入,在miniprogram根目录下的`app.json`中配置,局部引入,在需要引入的页面或组件的`index.json`中配置。 + +```json +// app.json 或 index.json +"usingComponents": { + "wr-sidebar": "path/to/components/goods-category/wr-sidebar/index", + "wr-sidebar-item": "path/to/component/goods-category/wr-sidebar/wr-sidebar-item/index" +} +``` + +## 代码演示 + +### 基础用法 + +通过在`wr-sidebar`上设置`activeKey`属性来控制选中项 + +```html + + + + + +``` + +``` javascript +Page({ + data: { + activeKey: 0 + }, + + onChange(event) { + wx.showToast({ + icon: 'none', + title: `切换至第${event.detail}项` + }); + } +}); +``` + +### 提示气泡(暂未实现) + +设置`dot`属性后,会在右上角展示一个小红点。设置`info`属性后,会在右上角展示相应的徽标 + +```html + + + + + +``` + +## API + +### Sidebar Props + +| 参数 | 说明 | 类型 | 默认值 | 版本 | +|-----------|-----------|-----------|-------------|-------------| +| activeKey | 选中项的索引 | *string \| number* | `0` | - | + +### Sidebar Event + +| 事件名 | 说明 | 参数 | +|------|------|------| +| change | 切换选项时触发 | 当前选中选项的索引 | + +### Sidebar 外部样式类 + +| 类名 | 说明 | +|-----------|-----------| +| custom-class | 根节点样式类 | + +### SidebarItem Props + +| 参数 | 说明 | 类型 | 默认值 | 版本 | +|-----------|-----------|-----------|-------------|-------------| +| title | 内容 | *string* | `''` | - | +| disabled | 是否禁用 | | *boolean* | `false` | - | +| dot | 是否显示右上角小红点 | *boolean* | `false` | - | +| info | 提示消息 | *string \| number* | `''` | - | + +### SidebarItem Event + +| 事件名 | 说明 | 参数 | +|------|------|------| +| click | 点击徽章时触发 | 当前徽章的索引 | + +### SidebarItem 外部样式类 + +| 类名 | 说明 | +|-----------|-----------| +| custom-class | 根节点样式类 | diff --git a/scr/miniprogram-2/pages/goods/category/components/goods-category/components/c-sidebar/c-sidebar-item/index.js b/scr/miniprogram-2/pages/goods/category/components/goods-category/components/c-sidebar/c-sidebar-item/index.js new file mode 100644 index 0000000..810d5e5 --- /dev/null +++ b/scr/miniprogram-2/pages/goods/category/components/goods-category/components/c-sidebar/c-sidebar-item/index.js @@ -0,0 +1,51 @@ +Component({ + relations: { + '../../c-sidebar/index': { + type: 'ancestor', + linked(target) { + this.parent = target; + }, + }, + }, + + externalClasses: ['custom-class'], + properties: { + title: String, + disabled: Boolean, + }, + + data: { + topRightRadius: false, + bottomRightRadius: false, + }, + + methods: { + setActive(selected) { + return this.setData({ selected }); + }, + onClick() { + const { parent } = this; + + if (!parent || this.properties.disabled) { + return; + } + + const index = parent.children.indexOf(this); + + parent.setActive(index).then(() => { + this.triggerEvent('click', index); + parent.triggerEvent('change', { index }); + }); + }, + setTopRightRadius(val) { + return this.setData({ + topRightRadius: val, + }); + }, + setBottomRightRadius(val) { + return this.setData({ + bottomRightRadius: val, + }); + }, + }, +}); diff --git a/scr/miniprogram-2/pages/goods/category/components/goods-category/components/c-sidebar/c-sidebar-item/index.json b/scr/miniprogram-2/pages/goods/category/components/goods-category/components/c-sidebar/c-sidebar-item/index.json new file mode 100644 index 0000000..e8cfaaf --- /dev/null +++ b/scr/miniprogram-2/pages/goods/category/components/goods-category/components/c-sidebar/c-sidebar-item/index.json @@ -0,0 +1,4 @@ +{ + "component": true, + "usingComponents": {} +} \ No newline at end of file diff --git a/scr/miniprogram-2/pages/goods/category/components/goods-category/components/c-sidebar/c-sidebar-item/index.wxml b/scr/miniprogram-2/pages/goods/category/components/goods-category/components/c-sidebar/c-sidebar-item/index.wxml new file mode 100644 index 0000000..435f1e9 --- /dev/null +++ b/scr/miniprogram-2/pages/goods/category/components/goods-category/components/c-sidebar/c-sidebar-item/index.wxml @@ -0,0 +1,10 @@ + + + {{ title }} + + diff --git a/scr/miniprogram-2/pages/goods/category/components/goods-category/components/c-sidebar/c-sidebar-item/index.wxss b/scr/miniprogram-2/pages/goods/category/components/goods-category/components/c-sidebar/c-sidebar-item/index.wxss new file mode 100644 index 0000000..28d50dc --- /dev/null +++ b/scr/miniprogram-2/pages/goods/category/components/goods-category/components/c-sidebar/c-sidebar-item/index.wxss @@ -0,0 +1,60 @@ +.c-sidebar-item { + display: flex; + justify-content: center; + text-align: center; + background-color: #f5f5f5; + color: #222427; + padding: 20rpx 0; + font-size: 26rpx; +} + +.c-sidebar-item.active { + position: relative; + background: white; +} + +.c-sidebar-item.active::before { + content: ''; + position: absolute; + width: 6rpx; + height: 48rpx; + background-color: #fa4126; + left: 0; + top: 50%; + transform: translate(0, -50%); + border-radius: 64rpx; +} + +.c-sidebar-item__text { + width: 136rpx; + height: 36rpx; + padding: 8rpx 0; + line-height: 36rpx; + text-align: center; + font-size: 28rpx; + color: #666666; +} + +.c-sidebar-item.active .c-sidebar-item__text { + background-color: white; + border-radius: 36rpx; + color: #fa4126; +} + +.text-overflow { + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; +} + +.top-right-radius { + border-top-right-radius: 16rpx; +} + +.bottom-right-radius { + border-bottom-right-radius: 16rpx; +} + +.c-sidebar-item-container { + background-color: white; +} diff --git a/scr/miniprogram-2/pages/goods/category/components/goods-category/components/c-sidebar/index.js b/scr/miniprogram-2/pages/goods/category/components/goods-category/components/c-sidebar/index.js new file mode 100644 index 0000000..b057ad1 --- /dev/null +++ b/scr/miniprogram-2/pages/goods/category/components/goods-category/components/c-sidebar/index.js @@ -0,0 +1,106 @@ +Component({ + relations: { + './c-sidebar-item/index': { + type: 'descendant', + linked(target) { + this.children.push(target); + this.setActive(this.properties.activeKey, true); + }, + unlinked(target) { + this.children = this.children.filter((item) => item !== target); + this.setActive(this.properties.activeKey, true); + }, + }, + }, + + externalClasses: ['custom-class'], + + properties: { + activeKey: { + type: Number, + value: 0, + }, + }, + observers: { + activeKey(newVal) { + this.setActive(newVal); + }, + }, + + created() { + this.children = []; + this.currentActive = -1; + this.topRightRadiusItemIndexs = []; + this.bottomRightRadiusItemIndexs = []; + }, + + methods: { + setActive(activeKey, isChildrenChange) { + const { + children, + currentActive, + topRightRadiusItemIndexs: preTopRightRadiusItemIndexs, + bottomRightRadiusItemIndexs: preBottomRightRadiusItemIndexs, + } = this; + + if (!children.length) { + return Promise.resolve(); + } + + if (activeKey === currentActive && !isChildrenChange) { + return Promise.resolve(); + } + + this.currentActive = activeKey; + this.topRightRadiusItemIndexs = this.getTopRightRadiusItemIndexs( + activeKey, + children, + ); + this.bottomRightRadiusItemIndexs = this.getBottomRightRadiusItemIndexs( + activeKey, + children, + ); + + const stack = []; // 任务列表,存放调用子组件的setActive后返回的一堆promise + + // 将旧的选中项改为false + if (currentActive !== activeKey && children[currentActive]) { + stack.push(children[currentActive].setActive(false)); + } + + // 将新的选中项改为true + if (children[activeKey]) { + stack.push(children[activeKey].setActive(true)); + } + + preTopRightRadiusItemIndexs.forEach((item) => { + stack.push(children[item].setTopRightRadius(false)); + }); + + preBottomRightRadiusItemIndexs.forEach((item) => { + stack.push(children[item].setBottomRightRadius(false)); + }); + + this.topRightRadiusItemIndexs.forEach((item) => { + stack.push(children[item].setTopRightRadius(true)); + }); + + this.bottomRightRadiusItemIndexs.forEach((item) => { + stack.push(children[item].setBottomRightRadius(true)); + }); + + return Promise.all(stack); + }, + getTopRightRadiusItemIndexs(activeKey, children) { + const { length } = children; + if (activeKey !== 0 && activeKey < length - 1) return [0, activeKey + 1]; + if (activeKey !== 0) return [0]; + if (activeKey < length - 1) return [activeKey + 1]; + return []; + }, + getBottomRightRadiusItemIndexs(activeKey) { + if (activeKey !== 0) return [activeKey - 1]; + return []; + }, + }, +}); diff --git a/scr/miniprogram-2/pages/goods/category/components/goods-category/components/c-sidebar/index.json b/scr/miniprogram-2/pages/goods/category/components/goods-category/components/c-sidebar/index.json new file mode 100644 index 0000000..84ff738 --- /dev/null +++ b/scr/miniprogram-2/pages/goods/category/components/goods-category/components/c-sidebar/index.json @@ -0,0 +1,4 @@ +{ + "component": true +} + \ No newline at end of file diff --git a/scr/miniprogram-2/pages/goods/category/components/goods-category/components/c-sidebar/index.wxml b/scr/miniprogram-2/pages/goods/category/components/goods-category/components/c-sidebar/index.wxml new file mode 100644 index 0000000..a1fe026 --- /dev/null +++ b/scr/miniprogram-2/pages/goods/category/components/goods-category/components/c-sidebar/index.wxml @@ -0,0 +1,3 @@ + + + diff --git a/scr/miniprogram-2/pages/goods/category/components/goods-category/components/c-sidebar/index.wxss b/scr/miniprogram-2/pages/goods/category/components/goods-category/components/c-sidebar/index.wxss new file mode 100644 index 0000000..95e59ff --- /dev/null +++ b/scr/miniprogram-2/pages/goods/category/components/goods-category/components/c-sidebar/index.wxss @@ -0,0 +1,9 @@ +.c-sidebar { + width: 176rpx; + height: 100vh; +} +.c-sidebar::-webkit-scrollbar { + width: 0; + height: 0; + color: transparent; +} diff --git a/scr/miniprogram-2/pages/goods/category/components/goods-category/components/c-tabbar/c-tabbar-more/index.js b/scr/miniprogram-2/pages/goods/category/components/goods-category/components/c-tabbar/c-tabbar-more/index.js new file mode 100644 index 0000000..2b6f95d --- /dev/null +++ b/scr/miniprogram-2/pages/goods/category/components/goods-category/components/c-tabbar/c-tabbar-more/index.js @@ -0,0 +1,37 @@ +Component({ + externalClasses: ['custom-class'], + + properties: { + tabList: Array, + }, + + data: { + unfolded: false, + boardMaxHeight: null, + }, + attached() { + wx.createSelectorQuery() + .in(this) + .select('.c-tabbar-more') + .boundingClientRect((rect) => { + this.setData({ boardMaxHeight: rect.height }); + }) + .exec(); + }, + + methods: { + changeFold() { + this.setData({ + unfolded: !this.data.unfolded, + }); + const { unfolded } = this.data; + this.triggerEvent('change', { unfolded }); + }, + + onSelect(event) { + const activeKey = event.currentTarget.dataset.index; + this.triggerEvent('select', activeKey); + this.changeFold(); + }, + }, +}); diff --git a/scr/miniprogram-2/pages/goods/category/components/goods-category/components/c-tabbar/c-tabbar-more/index.json b/scr/miniprogram-2/pages/goods/category/components/goods-category/components/c-tabbar/c-tabbar-more/index.json new file mode 100644 index 0000000..a89ef4d --- /dev/null +++ b/scr/miniprogram-2/pages/goods/category/components/goods-category/components/c-tabbar/c-tabbar-more/index.json @@ -0,0 +1,4 @@ +{ + "component": true, + "usingComponents": {} +} diff --git a/scr/miniprogram-2/pages/goods/category/components/goods-category/components/c-tabbar/c-tabbar-more/index.wxml b/scr/miniprogram-2/pages/goods/category/components/goods-category/components/c-tabbar/c-tabbar-more/index.wxml new file mode 100644 index 0000000..0ea9ad4 --- /dev/null +++ b/scr/miniprogram-2/pages/goods/category/components/goods-category/components/c-tabbar/c-tabbar-more/index.wxml @@ -0,0 +1,25 @@ + + + + + + + + + + {{ item.name }} + + + + + diff --git a/scr/miniprogram-2/pages/goods/category/components/goods-category/components/c-tabbar/c-tabbar-more/index.wxss b/scr/miniprogram-2/pages/goods/category/components/goods-category/components/c-tabbar/c-tabbar-more/index.wxss new file mode 100644 index 0000000..d0d08b3 --- /dev/null +++ b/scr/miniprogram-2/pages/goods/category/components/goods-category/components/c-tabbar/c-tabbar-more/index.wxss @@ -0,0 +1,63 @@ +.c-tabbar-more { + width: 100%; + height: calc(100% - var(--tabbar-height, 100rpx)); + position: absolute; + top: var(--tabbar-height, 100rpx); +} +.c-tabbar-more__btn { + position: absolute; + top: calc(0rpx - var(--tabbar-height, 100rpx)); + right: 0; + width: 80rpx; + height: var(--tabbar-height, 100rpx); + line-height: var(--tabbar-height, 100rpx); + background-color: var(--tabbar-background-color, white); + box-shadow: -20rpx 0 20rpx -10rpx var(--tabbar-background-color, white); + text-align: center; +} +.c-tabbar-more__btn .market { + font-size: 20rpx; +} +.t-tabbar-more__boardwrapper { + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; +} +.t-tabbar-more__mask { + width: 100%; + height: 100%; + background-color: rgba(0, 0, 0, 0.5); +} +.c-tabbar-more__board { + position: absolute; + top: 0; + left: 0; + width: 100%; + max-height: 100%; +} +.c-tabbar-more__boardinner { + padding: 20rpx 0 20rpx 20rpx; + background-color: var(--tabbar-background-color, white); + display: flex; + flex-flow: row wrap; +} +.c-tabbar-more__item { + margin: 0 20rpx 20rpx 0; + flex: 0 0 calc((100% - 60rpx) / 3); + box-sizing: border-box; + padding: 0 10rpx; + border-radius: 30rpx; + height: 60rpx; + line-height: 60rpx; + text-align: center; + font-size: 22rpx; + color: #5d5d5d; + background-color: #eee; +} +.text-overflow { + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; +} diff --git a/scr/miniprogram-2/pages/goods/category/components/goods-category/components/c-tabbar/index.js b/scr/miniprogram-2/pages/goods/category/components/goods-category/components/c-tabbar/index.js new file mode 100644 index 0000000..ddf6367 --- /dev/null +++ b/scr/miniprogram-2/pages/goods/category/components/goods-category/components/c-tabbar/index.js @@ -0,0 +1,68 @@ +Component({ + externalClasses: ['custom-class'], + + properties: { + activeKey: { + type: Number, + value: 0, + }, + tabList: { + type: Array, + value: [], + }, + showMore: Boolean, // 是否需要下拉功能 + }, + observers: { + activeKey(newVal) { + if (this.properties.tabList && newVal) { + this.setActive(newVal).catch((e) => { + console.error(e); + }); + } + }, + }, + + data: { + currentActive: -1, + }, + attached() { + this.setActive(this.properties.activeKey).catch((e) => { + console.error(e); + }); + }, + + methods: { + setActive(activeKey) { + if ( + !this.properties.tabList[activeKey] || + this.properties.tabList[activeKey].disabled + ) { + return Promise.reject('数据异常或不可操作'); + } + return new Promise((resolve) => { + this.setData( + { + currentActive: activeKey, + }, + () => resolve(), + ); + }); + }, + onClick(event) { + let activeKey; + if (event.type === 'select') { + activeKey = event.detail; + } else { + activeKey = event.currentTarget.dataset.index; + } + this.setActive(activeKey) + .then(() => { + const { currentActive } = this.data; + this.triggerEvent('change', { index: currentActive }); + }) + .catch((e) => { + console.error(e); + }); + }, + }, +}); diff --git a/scr/miniprogram-2/pages/goods/category/components/goods-category/components/c-tabbar/index.json b/scr/miniprogram-2/pages/goods/category/components/goods-category/components/c-tabbar/index.json new file mode 100644 index 0000000..644e632 --- /dev/null +++ b/scr/miniprogram-2/pages/goods/category/components/goods-category/components/c-tabbar/index.json @@ -0,0 +1,6 @@ +{ + "component": true, + "usingComponents": { + "c-tabbar-more": "./c-tabbar-more/index" + } +} \ No newline at end of file diff --git a/scr/miniprogram-2/pages/goods/category/components/goods-category/components/c-tabbar/index.wxml b/scr/miniprogram-2/pages/goods/category/components/goods-category/components/c-tabbar/index.wxml new file mode 100644 index 0000000..1227f88 --- /dev/null +++ b/scr/miniprogram-2/pages/goods/category/components/goods-category/components/c-tabbar/index.wxml @@ -0,0 +1,29 @@ + + + + + {{ item.name }} + + + + + + diff --git a/scr/miniprogram-2/pages/goods/category/components/goods-category/components/c-tabbar/index.wxss b/scr/miniprogram-2/pages/goods/category/components/goods-category/components/c-tabbar/index.wxss new file mode 100644 index 0000000..d89475f --- /dev/null +++ b/scr/miniprogram-2/pages/goods/category/components/goods-category/components/c-tabbar/index.wxss @@ -0,0 +1,53 @@ +.c-tabbar { + width: 100%; + height: 100%; + position: relative; + --tabbar-height: 100rpx; + --tabbar-fontsize: 28rpx; + --tabbar-background-color: white; +} +.c-tabbar__inner { + display: flex; + flex-flow: row nowrap; +} +.c-tabbar__scroll { + position: relative; +} +.c-tabbar__scroll::after { + content: ''; + display: block; + position: absolute; + width: 100%; + left: 0; + bottom: -1px; + height: 1px; + background-color: #eee; + z-index: 1; +} +.c-tabbar__inner.c-tabbar__inner_more::after { + content: ''; + display: block; + width: 100rpx; + height: 100rpx; + flex: none; +} +.c-tabbar-item { + flex: none; + height: 100rpx; + color: #282828; + font-size: 28rpx; + padding: 0 20rpx; +} +.c-tabbar-item.active:not(.disabled) { + color: #0071ce; + position: relative; +} +.c-tabbar-item.disabled { + color: #ccc; +} +.c-tabbar-item__text { + width: 100%; + text-align: center; + height: 100rpx; + line-height: 100rpx; +} diff --git a/scr/miniprogram-2/pages/goods/category/components/goods-category/index.js b/scr/miniprogram-2/pages/goods/category/components/goods-category/index.js new file mode 100644 index 0000000..f622901 --- /dev/null +++ b/scr/miniprogram-2/pages/goods/category/components/goods-category/index.js @@ -0,0 +1,75 @@ +Component({ + externalClasses: ['custom-class'], + + properties: { + category: { + type: Array, + }, + initActive: { + type: Array, + value: [], + observer(newVal, oldVal) { + if (newVal[0] !== oldVal[0]) { + this.setActiveKey(newVal[0], 0); + } + }, + }, + isSlotRight: { + type: Boolean, + value: false, + }, + level: { + type: Number, + value: 3, + }, + }, + data: { + activeKey: 0, + subActiveKey: 0, + }, + attached() { + if (this.properties.initActive && this.properties.initActive.length > 0) { + this.setData({ + activeKey: this.properties.initActive[0], + subActiveKey: this.properties.initActive[1] || 0, + }); + } + }, + methods: { + onParentChange(event) { + this.setActiveKey(event.detail.index, 0).then(() => { + this.triggerEvent('change', [ + this.data.activeKey, + this.data.subActiveKey, + ]); + }); + }, + onChildChange(event) { + this.setActiveKey(this.data.activeKey, event.detail.index).then(() => { + this.triggerEvent('change', [ + this.data.activeKey, + this.data.subActiveKey, + ]); + }); + }, + changCategory(event) { + const { item } = event.currentTarget.dataset; + this.triggerEvent('changeCategory', { + item, + }); + }, + setActiveKey(key, subKey) { + return new Promise((resolve) => { + this.setData( + { + activeKey: key, + subActiveKey: subKey, + }, + () => { + resolve(); + }, + ); + }); + }, + }, +}); diff --git a/scr/miniprogram-2/pages/goods/category/components/goods-category/index.json b/scr/miniprogram-2/pages/goods/category/components/goods-category/index.json new file mode 100644 index 0000000..8ca3d3c --- /dev/null +++ b/scr/miniprogram-2/pages/goods/category/components/goods-category/index.json @@ -0,0 +1,9 @@ +{ + "component": true, + "usingComponents": { + "c-tabbar": "./components/c-tabbar/index", + "c-sidebar": "./components/c-sidebar/index", + "c-sidebar-item": "./components/c-sidebar/c-sidebar-item/index", + "t-image": "/components/webp-image/index" + } +} \ No newline at end of file diff --git a/scr/miniprogram-2/pages/goods/category/components/goods-category/index.wxml b/scr/miniprogram-2/pages/goods/category/components/goods-category/index.wxml new file mode 100644 index 0000000..1b0b83f --- /dev/null +++ b/scr/miniprogram-2/pages/goods/category/components/goods-category/index.wxml @@ -0,0 +1,61 @@ + + + + + + + + + + + + + {{item.name}} + + + + + + {{subItem.name}} + + + + + + + + + + {{item.name}} + + + + + + + + + diff --git a/scr/miniprogram-2/pages/goods/category/components/goods-category/index.wxss b/scr/miniprogram-2/pages/goods/category/components/goods-category/index.wxss new file mode 100644 index 0000000..fbf4569 --- /dev/null +++ b/scr/miniprogram-2/pages/goods/category/components/goods-category/index.wxss @@ -0,0 +1,102 @@ +.goods-category { + display: flex; +} + +.custom-sidebar { + height: 100%; +} + +.goods-category__right { + height: 100%; + flex: auto; + width: 0; + position: relative; + overflow: scroll; + -webkit-overflow-scrolling: touch; + background-color: white; +} + +.flex { + display: flex; +} + +.goods-category-normal { + margin: 28rpx 34rpx 0rpx 32rpx; +} + +.goods-category-normal-item-title { + font-size: 28rpx; + font-weight: 500; +} + +.goods-category-normal-item-container { + background-color: #fff; + border-radius: 8rpx; + padding-top: 28rpx; + margin-top: -24rpx; + margin-bottom: 30rpx; + display: flex; + flex-wrap: wrap; +} + +.goods-category-normal-item-container-item { + height: 196rpx; + display: flex; + flex-direction: column; + align-items: center; + margin-top: 24rpx; + width: 33.3%; +} + +.goods-category-normal-item-container-item .image { + width: 144rpx; + height: 144rpx; +} + +.goods-category-normal-item-container-item-title { + justify-content: center; + font-size: 24rpx; + color: #666666; + margin-top: 20rpx; +} + +.goods-category .custom-sidebar { + background-color: #f5f5f5; +} + +.custom-sidebar { + width: 180rpx; + height: 100vh; +} + +.custom-sidebar::-webkit-scrollbar { + width: 0; + height: 0; + color: transparent; +} + +.goods-category-normal-item-second-container { + background-color: #fff; + border-radius: 8rpx; + margin-top: 8rpx; + margin-bottom: 30rpx; + display: grid; + grid-template-columns: 33.33% 33.33% 33.33%; +} + +.goods-category-normal-item-second-container-item { + height: 200rpx; + text-align: center; + margin-top: 20rpx; +} + +.goods-category-normal-item-second-container-item .image { + width: 144rpx; + height: 144rpx; +} + +.goods-category-normal-item-second-container-item-title { + justify-content: center; + font-size: 24rpx; + color: #222427; +} diff --git a/scr/miniprogram-2/pages/goods/category/data.js b/scr/miniprogram-2/pages/goods/category/data.js new file mode 100644 index 0000000..e625226 --- /dev/null +++ b/scr/miniprogram-2/pages/goods/category/data.js @@ -0,0 +1,135 @@ +export const fullList = [ + { + groupId: '24948', + name: '数码', + thumbnail: + 'https://cdn-we-retail.ym.tencent.com/miniapp/category/category-default.png', + children: [ + { + groupId: '249481', + name: '手机', + thumbnail: + 'https://cdn-we-retail.ym.tencent.com/miniapp/category/category-default.png', + children: [ + { + groupId: '249480', + name: '华为', + thumbnail: + 'https://bl-material-qa-1300977798.cos.ap-guangzhou.myqcloud.com/persist/10001/8888/88881027711/material/1/5e40f0e5e450477781b0e3f8bd5b2fd8-1586832328290-手机1.jpg', + }, + { + groupId: '249480', + name: '华为', + thumbnail: + 'https://bl-material-qa-1300977798.cos.ap-guangzhou.myqcloud.com/persist/10001/8888/88881027711/material/1/5e40f0e5e450477781b0e3f8bd5b2fd8-1586832328290-手机1.jpg', + }, + { + groupId: '249480', + name: '华为', + thumbnail: + 'https://bl-material-qa-1300977798.cos.ap-guangzhou.myqcloud.com/persist/10001/8888/88881027711/material/1/5e40f0e5e450477781b0e3f8bd5b2fd8-1586832328290-手机1.jpg', + }, + { + groupId: '249480', + name: '华为', + thumbnail: + 'https://bl-material-qa-1300977798.cos.ap-guangzhou.myqcloud.com/persist/10001/8888/88881027711/material/1/5e40f0e5e450477781b0e3f8bd5b2fd8-1586832328290-手机1.jpg', + }, + { + groupId: '249480', + name: '华为', + thumbnail: + 'https://bl-material-qa-1300977798.cos.ap-guangzhou.myqcloud.com/persist/10001/8888/88881027711/material/1/5e40f0e5e450477781b0e3f8bd5b2fd8-1586832328290-手机1.jpg', + }, + ], + }, + { + groupId: '249481', + name: '电视', + thumbnail: + 'https://cdn-we-retail.ym.tencent.com/miniapp/category/category-default.png', + children: [ + { + groupId: '249480', + name: '华为', + thumbnail: + 'https://ss1.bdstatic.com/70cFvXSh_Q1YnxGkpoWK1HF6hhy/it/u=1135099865,3046620350&fm=26&gp=0.jpg', + }, + ], + }, + ], + }, + { + groupId: '24948', + name: '水果', + thumbnail: + 'https://cdn-we-retail.ym.tencent.com/miniapp/category/category-default.png', + children: [ + { + groupId: '249481', + name: '热带水果', + thumbnail: + 'https://cdn-we-retail.ym.tencent.com/miniapp/category/category-default.png', + children: [ + { + groupId: '249480', + name: '菠萝', + thumbnail: + 'https://dss3.baidu.com/-rVXeDTa2gU2pMbgoY3K/it/u=322209122,2354607046&fm=202&mola=new&crop=v1', + }, + ], + }, + ], + }, +]; + +export const goodsList = [ + { + thumb: '/static/images/apple.jpg', + title: + '智利 火龙果超级好吃,又大又甜 欢迎购买,限价五折优惠哦,智利 火龙果超级好吃,又大又甜 欢迎购买,限价五折优惠哦', + price: '99.99', + originPrice: '9.99', + tags: [{ title: '热卖' }], + }, + { + thumb: '/static/images/apple.jpg', + title: + '智利 火龙果超级好吃,又大又甜 欢迎购买,限价五折优惠哦,智利 火龙果超级好吃,又大又甜 欢迎购买,限价五折优惠哦', + price: '99.99', + originPrice: '9.99', + tags: [{ title: '热卖' }], + }, + { + thumb: '/static/images/apple.jpg', + title: + '智利 火龙果超级好吃,又大又甜 欢迎购买,限价五折优惠哦,智利 火龙果超级好吃,又大又甜 欢迎购买,限价五折优惠哦', + price: '99.99', + originPrice: '9.99', + tags: [{ title: '热卖' }], + }, + { + thumb: '/static/images/apple.jpg', + title: + '智利 火龙果超级好吃,又大又甜 欢迎购买,限价五折优惠哦,智利 火龙果超级好吃,又大又甜 欢迎购买,限价五折优惠哦', + price: '99.99', + originPrice: '9.99', + tags: [{ title: '热卖' }], + }, + { + thumb: '/static/images/apple.jpg', + title: + '智利 火龙果超级好吃,又大又甜 欢迎购买,限价五折优惠哦,智利 火龙果超级好吃,又大又甜 欢迎购买,限价五折优惠哦', + price: '99.99', + originPrice: '9.99', + tags: [{ title: '热卖' }], + }, + { + thumb: '/static/images/apple.jpg', + title: + '智利 火龙果超级好吃,又大又甜 欢迎购买,限价五折优惠哦,智利 火龙果超级好吃,又大又甜 欢迎购买,限价五折优惠哦', + price: '99.99', + originPrice: '9.99', + tags: [{ title: '热卖' }], + }, +]; diff --git a/scr/miniprogram-2/pages/goods/category/index.js b/scr/miniprogram-2/pages/goods/category/index.js new file mode 100644 index 0000000..e8c56ac --- /dev/null +++ b/scr/miniprogram-2/pages/goods/category/index.js @@ -0,0 +1,28 @@ +import { getCategoryList } from '../../../services/good/fetchCategoryList'; +Page({ + data: { + list: [], + }, + async init() { + try { + const result = await getCategoryList(); + this.setData({ + list: result, + }); + } catch (error) { + console.error('err:', error); + } + }, + + onShow() { + this.getTabBar().init(); + }, + onChange() { + wx.navigateTo({ + url: '/pages/goods/list/index', + }); + }, + onLoad() { + this.init(true); + }, +}); diff --git a/scr/miniprogram-2/pages/goods/category/index.json b/scr/miniprogram-2/pages/goods/category/index.json new file mode 100644 index 0000000..f989443 --- /dev/null +++ b/scr/miniprogram-2/pages/goods/category/index.json @@ -0,0 +1,6 @@ +{ + "navigationBarTitleText": "分类", + "usingComponents": { + "goods-category": "./components/goods-category/index" + } +} diff --git a/scr/miniprogram-2/pages/goods/category/index.wxml b/scr/miniprogram-2/pages/goods/category/index.wxml new file mode 100644 index 0000000..2d8cab1 --- /dev/null +++ b/scr/miniprogram-2/pages/goods/category/index.wxml @@ -0,0 +1,8 @@ + + + diff --git a/scr/miniprogram-2/pages/goods/category/index.wxss b/scr/miniprogram-2/pages/goods/category/index.wxss new file mode 100644 index 0000000..ac2e0a7 --- /dev/null +++ b/scr/miniprogram-2/pages/goods/category/index.wxss @@ -0,0 +1,23 @@ +.tabbar-position { + position: fixed !important; + bottom: 0; + left: 0; + width: 100%; +} + +.wrap { + height: 100vh; + overflow: hidden; +} +.goods-category-class { + background-color: #f6f6f6 !important; + height: 100%; +} +.goods-category-class .goods-category-normal-item-container-item { + margin-top: 20rpx; +} + +page { + min-height: none; + padding-bottom: 0; +} diff --git a/scr/miniprogram-2/pages/goods/comments/components/comments-card/components/images-videos/assets/play.png b/scr/miniprogram-2/pages/goods/comments/components/comments-card/components/images-videos/assets/play.png new file mode 100644 index 0000000000000000000000000000000000000000..d816ef7fd2ae06456b02f08708b3c9db94fbe48d GIT binary patch literal 1326 zcmV+}1=0G6P)&KvET1}FFj+7Uhd^`KX}~ba?$U1-|xNm{W%XQz{A6X#s@zSFArTD zH8CVoVkE^#cs!mI*@TA*gfKe5!-sKrct~ewXB3ae>E`B!uCK2%_f}L?P-SH$)z;Qh zb#*n>)zwi`Qxm=dkr>$^W0`=-@BkaFMWa#L+1a7n+gnS22Sh-kqoYHTIpz_yO2iTY zHaCct8J-OgSzKJi5nlN5 z7H_;tfQ@h9!{_z&bq&Tlf#Km{8X6i(^XV@p5zlvTUILH|YdbhIGecWjTjV5KT3Tpg zVgi#tucTfiAdSbI79r(lct$`>*wEzUWJ!&e zfDMo^W77;!TXMgu(4nX(3g9bZ0JIRgM*x10lcrqU{ z9uV#^bnjM(Wjr9F0Rv_U1>q`l4C6Ln14R@-kD-hKgMfJY4G0h14q;=)3(^BdG->zg z_w@9<9~c<;Kt)8h7v72M0YsE`FfuaovA@4RgmXToB9TaRc6RoJiU35w9Krfaetu3)LC%lO z&CRcNWQDw&ga>qJ%4yWp)c7zz=I7@>Q2`LDF($F)gj^+>o0|jO-Q7Ma3|bkv0J^Sg zR3JbgO(n#^!9k3r6u0_2)R_S6#A&VqXif)lmzS3b-l_lau9~C*fMOXV1p>*csw(BX zhu-PCGM{N?5LiKVAov*I0{#EhB&5(6fMxu=KOFWeXimZ09zrTMf z&!O|RwY5kn6k1hnJkZ$Kh(i*kMB=i>B}C1yp|y# zy)ZU5Ms5YPPgz}@C&3&lUcA00M@L7=ZNLJ9#z%IQI#)FMv#+l&EnMXapjRLo9zU|b zdqzOG=QpI}M2PVku;Zf9L66;_IRdDs{nDIYAPnHt)mYU`FMA}!uxz+(0%n-Vcu00yH+vj1Bcpa1{>07*qoM6N<$f+S8^r~m)} literal 0 HcmV?d00001 diff --git a/scr/miniprogram-2/pages/goods/comments/components/comments-card/components/images-videos/index.js b/scr/miniprogram-2/pages/goods/comments/components/comments-card/components/images-videos/index.js new file mode 100644 index 0000000..a0a3c48 --- /dev/null +++ b/scr/miniprogram-2/pages/goods/comments/components/comments-card/components/images-videos/index.js @@ -0,0 +1,36 @@ +// pages/goods/comments/components/comments-card/images-videos/index.js +Component({ + /** + * 组件的属性列表 + */ + properties: { + resources: { + type: Array, + value: [], + }, + }, + + /** + * 组件的初始数据 + */ + data: { + classType: 'single', + }, + + observers: { + resources: function (newVal) { + if (newVal.length <= 1) { + this.setData({ classType: 'single' }); + } else if (newVal.length === 2) { + this.setData({ classType: 'double' }); + } else { + this.setData({ classType: 'multiple' }); + } + }, + }, + + /** + * 组件的方法列表 + */ + methods: {}, +}); diff --git a/scr/miniprogram-2/pages/goods/comments/components/comments-card/components/images-videos/index.json b/scr/miniprogram-2/pages/goods/comments/components/comments-card/components/images-videos/index.json new file mode 100644 index 0000000..83597fd --- /dev/null +++ b/scr/miniprogram-2/pages/goods/comments/components/comments-card/components/images-videos/index.json @@ -0,0 +1,7 @@ +{ + "component": true, + "usingComponents": { + "my-video": "../my-video/index", + "t-image": "/components/webp-image/index" + } +} \ No newline at end of file diff --git a/scr/miniprogram-2/pages/goods/comments/components/comments-card/components/images-videos/index.wxml b/scr/miniprogram-2/pages/goods/comments/components/comments-card/components/images-videos/index.wxml new file mode 100644 index 0000000..2515909 --- /dev/null +++ b/scr/miniprogram-2/pages/goods/comments/components/comments-card/components/images-videos/index.wxml @@ -0,0 +1,15 @@ + + + + + + + + + + diff --git a/scr/miniprogram-2/pages/goods/comments/components/comments-card/components/images-videos/index.wxss b/scr/miniprogram-2/pages/goods/comments/components/comments-card/components/images-videos/index.wxss new file mode 100644 index 0000000..e7944be --- /dev/null +++ b/scr/miniprogram-2/pages/goods/comments/components/comments-card/components/images-videos/index.wxss @@ -0,0 +1,68 @@ +.resource-item-single { + width: 360rpx; + height: 360rpx; + border-radius: 8rpx; +} + +.resource-item-double { + width: 334rpx; + height: 334rpx; + border-radius: 8rpx; +} + +.resource-item-multiple { + width: 218rpx; + height: 218rpx; + border-radius: 8rpx; +} + +.resource-container-single { + padding-left: 0; + padding-top: 0; +} + +.resource-container-double { + padding-left: 18rpx; + padding-top: 18rpx; +} + +.resource-container-multiple { + padding-left: 16rpx; + padding-top: 16rpx; +} + +.container-single { + margin-left: 0; +} + +.container-double { + margin-left: -18rpx; + margin-top: -18rpx; +} + +.container-multiple { + margin-left: -16rpx; + margin-top: -16rpx; +} + +.resource-container { + display: flex; +} + +.play-icon { + width: 96rpx; + height: 96rpx; +} + +.images-videos-container { + display: flex; + flex-wrap: wrap; +} + +.image { + border-radius: 8rpx; +} + +.cover-img-container { + background-color: white; +} diff --git a/scr/miniprogram-2/pages/goods/comments/components/comments-card/components/my-video/index.js b/scr/miniprogram-2/pages/goods/comments/components/comments-card/components/my-video/index.js new file mode 100644 index 0000000..987cf18 --- /dev/null +++ b/scr/miniprogram-2/pages/goods/comments/components/comments-card/components/my-video/index.js @@ -0,0 +1,55 @@ +Component({ + externalClasses: ['my-video', 'my-cover-img', 'my-play-icon'], + properties: { + videoSrc: { type: String }, + }, + data: { + isShow: true, + }, + + options: { + multipleSlots: true, // 在组件定义时的选项中启用多slot支持 + }, + + attached() { + this.videoContext = wx.createVideoContext('myVideo', this); + }, + + fullScreen: false, + + methods: { + // 点击封面自定义播放按钮时触发 + bindplay(e) { + this.setData({ + isShow: false, + }); + this.videoContext.play(); + this.triggerEvent('play', e); + }, + + bindplayByVideo(e) { + this.setData({ + isShow: false, + }); + this.triggerEvent('play', e); + }, + + // 监听播放到末尾时触发 + bindended(e) { + if (!this.fullScreen) { + this.setData({ + isShow: true, + }); + } + this.triggerEvent('ended', e); + }, + // 监听暂停播放时触发 + bindpause(e) { + this.triggerEvent('pause', e); + }, + bindfullscreenchange(e) { + const fullScreen = e?.detail?.fullScreen; + this.fullScreen = fullScreen; + }, + }, +}); diff --git a/scr/miniprogram-2/pages/goods/comments/components/comments-card/components/my-video/index.json b/scr/miniprogram-2/pages/goods/comments/components/comments-card/components/my-video/index.json new file mode 100644 index 0000000..e8cfaaf --- /dev/null +++ b/scr/miniprogram-2/pages/goods/comments/components/comments-card/components/my-video/index.json @@ -0,0 +1,4 @@ +{ + "component": true, + "usingComponents": {} +} \ No newline at end of file diff --git a/scr/miniprogram-2/pages/goods/comments/components/comments-card/components/my-video/index.wxml b/scr/miniprogram-2/pages/goods/comments/components/comments-card/components/my-video/index.wxml new file mode 100644 index 0000000..af38919 --- /dev/null +++ b/scr/miniprogram-2/pages/goods/comments/components/comments-card/components/my-video/index.wxml @@ -0,0 +1,26 @@ + diff --git a/scr/miniprogram-2/pages/goods/comments/components/comments-card/components/my-video/index.wxss b/scr/miniprogram-2/pages/goods/comments/components/comments-card/components/my-video/index.wxss new file mode 100644 index 0000000..63b962b --- /dev/null +++ b/scr/miniprogram-2/pages/goods/comments/components/comments-card/components/my-video/index.wxss @@ -0,0 +1,21 @@ +.video .video_cover { + width: 100%; + height: 100%; + position: relative; +} + +.video .video_play_icon { + position: absolute; + left: 50%; + top: 50%; + transform: translate(-50%, -50%); + z-index: 5; +} + +.video .video_txt { + margin: 10rpx auto; +} + +.video { + display: flex; +} diff --git a/scr/miniprogram-2/pages/goods/comments/components/comments-card/index.js b/scr/miniprogram-2/pages/goods/comments/components/comments-card/index.js new file mode 100644 index 0000000..53f6103 --- /dev/null +++ b/scr/miniprogram-2/pages/goods/comments/components/comments-card/index.js @@ -0,0 +1,51 @@ +Component({ + externalClasses: ['wr-class'], + options: { + multipleSlots: true, + }, + properties: { + goodsDetailInfo: { + type: String, + value: '', + }, + sellerReply: { + type: String, + value: '', + }, + userHeadUrl: { + type: String, + value: '', + }, + userName: { + type: String, + default: '', + }, + commentContent: { + type: String, + value: '', + }, + commentScore: { + type: Number, + value: 0, + }, + commentTime: { + type: String, + value: '', + }, + commentResources: { + type: Array, + value: [], + }, + }, + + data: { + showMoreStatus: false, + showContent: false, + hideText: false, + eleHeight: null, + overText: false, + isDisabled: true, + startColors: ['#FFC51C', '#DDDDDD'], + }, + methods: {}, +}); diff --git a/scr/miniprogram-2/pages/goods/comments/components/comments-card/index.json b/scr/miniprogram-2/pages/goods/comments/components/comments-card/index.json new file mode 100644 index 0000000..1130655 --- /dev/null +++ b/scr/miniprogram-2/pages/goods/comments/components/comments-card/index.json @@ -0,0 +1,8 @@ +{ + "component": true, + "usingComponents": { + "t-rate": "tdesign-miniprogram/rate/rate", + "images-videos": "./components/images-videos", + "t-image": "/components/webp-image/index" + } +} \ No newline at end of file diff --git a/scr/miniprogram-2/pages/goods/comments/components/comments-card/index.wxml b/scr/miniprogram-2/pages/goods/comments/components/comments-card/index.wxml new file mode 100644 index 0000000..a376cb2 --- /dev/null +++ b/scr/miniprogram-2/pages/goods/comments/components/comments-card/index.wxml @@ -0,0 +1,34 @@ + + + + + + + {{userName}} + {{commentTime}} + + + + {{goodsDetailInfo}} + + + + + + + + + 店家回复: + {{sellerReply}} + + + + diff --git a/scr/miniprogram-2/pages/goods/comments/components/comments-card/index.wxss b/scr/miniprogram-2/pages/goods/comments/components/comments-card/index.wxss new file mode 100644 index 0000000..30b4186 --- /dev/null +++ b/scr/miniprogram-2/pages/goods/comments/components/comments-card/index.wxss @@ -0,0 +1,170 @@ +@import '../../../../../style/theme.wxss'; + +.comments-card-item { + padding: 32rpx; + display: flex; + background-color: #fff; + position: relative; +} + +.comments-card-item::after { + content: ''; + position: absolute; + bottom: 0rpx; + width: 686rpx; + height: 2rpx; + background-color: #f5f5f5; +} + +.comments-card-item-userImg { + display: flex; +} + +.comments-card-item-userImg .userImg { + width: 64rpx; + height: 64rpx; + border-radius: 50%; +} + +.comments-card-item-container { + width: 100%; +} + +.comments-card-item-container-name { + display: flex; + font-size: 28rpx; + color: #333; + font-weight: 600; + align-items: center; +} + +.comments-card-item-container-name .userName { + margin-right: 12rpx; +} + +.comments-card-item-container-date { + font-size: 22rpx; + color: #999; + margin-top: 4rpx; + display: flex; +} + +.comments-card-item-container-content { + margin-top: 16rpx; + position: relative; +} + +.comments-card-item-container-content .content-text { + font-size: 28rpx; + white-space: normal; + word-break: break-all; + font-weight: normal; +} + +.comments-card-item-container-content .hide-text { + overflow: hidden; + text-overflow: ellipsis; + -webkit-line-clamp: 5; + text-align: justify; + display: -webkit-box; + -webkit-box-orient: vertical; +} + +.comments-card-item-container-content .showMore { + position: absolute; + width: 112rpx; + height: 36rpx; + bottom: 0; + right: 0; + background: linear-gradient( + to right, + rgba(255, 255, 255, 0.2) 0, + rgba(255, 255, 255, 0.45) 20%, + rgba(255, 255, 255, 0.7) 25%, + rgba(255, 255, 255, 0.9) 30%, + rgba(255, 255, 255, 0.95) 35%, + #ffffff 50%, + #fff 100% + ); + font-size: 26rpx; + color: #fa550f; + line-height: 36rpx; + text-align: right; +} + +.comments-card-item-container-image { + margin-top: 24rpx; + display: flex; + justify-content: space-between; + flex-wrap: wrap; +} + +.comments-card-item-container-image .commentImg { + border-radius: 8rpx; + margin-top: 12rpx; +} + +.comments-card-item-container-image .commentImg3 { + width: 196rpx; + height: 196rpx; +} + +.comments-card-item-container-image .commentImg2 { + width: 300rpx; + height: 300rpx; +} + +.comments-card-item-container-image .commentImg1 { + width: 404rpx; + height: 404rpx; +} + +.comments-card-item-container .comments-title { + display: flex; + align-items: center; + position: relative; +} + +.comments-title .userName { + font-size: 26rpx; + color: #333333; + margin-left: 24rpx; +} + +.comments-title .commentTime { + font-size: 24rpx; + color: #999999; + position: absolute; + right: 0; +} + +.comments-info { + display: flex; + margin-top: 18rpx; +} + +.comments-info .rate { + margin-right: 24rpx; +} + +.comments-info .goods-info-text { + font-size: 24rpx; + color: #999999; +} + +.comments-card-item-container .comments-card-reply { + background-color: #f5f5f5; + padding: 24rpx 16rpx; + margin-top: 24rpx; +} + +.comments-card-item-container .comments-card-reply .prefix { + font-size: 26rpx; + font-weight: bold; + color: #666666; +} + +.comments-card-item-container .comments-card-reply .content { + font-size: 26rpx; + color: #666666; +} diff --git a/scr/miniprogram-2/pages/goods/comments/create/index.js b/scr/miniprogram-2/pages/goods/comments/create/index.js new file mode 100644 index 0000000..be6d788 --- /dev/null +++ b/scr/miniprogram-2/pages/goods/comments/create/index.js @@ -0,0 +1,92 @@ +// import { getCommentDetail } from '../../../../services/good/comments/fetchCommentDetail'; +import Toast from 'tdesign-miniprogram/toast/index'; +Page({ + data: { + serviceRateValue: 1, + goodRateValue: 1, + conveyRateValue: 1, + isAnonymous: false, + uploadFiles: [], + gridConfig: { + width: 218, + height: 218, + column: 3, + }, + isAllowedSubmit: false, + imgUrl: '', + title: '', + goodsDetail: '', + imageProps: { + mode: 'aspectFit', + }, + }, + + onLoad(options) { + this.setData({ + imgUrl: options.imgUrl, + title: options.title, + goodsDetail: options.specs, + }); + }, + + onRateChange(e) { + const { value } = e?.detail; + const item = e?.currentTarget?.dataset?.item; + this.setData({ [item]: value }, () => { + this.updateButtonStatus(); + }); + }, + + onAnonymousChange(e) { + const status = !!e?.detail?.checked; + this.setData({ isAnonymous: status }); + }, + + handleSuccess(e) { + const { files } = e.detail; + + this.setData({ + uploadFiles: files, + }); + }, + + handleRemove(e) { + const { index } = e.detail; + const { uploadFiles } = this.data; + uploadFiles.splice(index, 1); + this.setData({ + uploadFiles, + }); + }, + + onTextAreaChange(e) { + const value = e?.detail?.value; + this.textAreaValue = value; + this.updateButtonStatus(); + }, + + updateButtonStatus() { + const { + serviceRateValue, + goodRateValue, + conveyRateValue, + isAllowedSubmit, + } = this.data; + const { textAreaValue } = this; + const temp = + serviceRateValue && goodRateValue && conveyRateValue && textAreaValue; + if (temp !== isAllowedSubmit) this.setData({ isAllowedSubmit: temp }); + }, + + onSubmitBtnClick() { + const { isAllowedSubmit } = this.data; + if (!isAllowedSubmit) return; + Toast({ + context: this, + selector: '#t-toast', + message: '评价提交成功', + icon: 'check-circle', + }); + wx.navigateBack(); + }, +}); diff --git a/scr/miniprogram-2/pages/goods/comments/create/index.json b/scr/miniprogram-2/pages/goods/comments/create/index.json new file mode 100644 index 0000000..7c6d3eb --- /dev/null +++ b/scr/miniprogram-2/pages/goods/comments/create/index.json @@ -0,0 +1,13 @@ +{ + "navigationBarTitleText": "评价商品", + "usingComponents": { + "t-image": "/components/webp-image/index", + "t-rate": "tdesign-miniprogram/rate/rate", + "t-textarea": "tdesign-miniprogram/textarea/textarea", + "t-checkbox": "tdesign-miniprogram/checkbox/checkbox", + "t-button": "tdesign-miniprogram/button/button", + "t-upload": "tdesign-miniprogram/upload/upload", + "t-icon": "tdesign-miniprogram/icon/icon", + "t-toast": "tdesign-miniprogram/toast/toast" + } +} \ No newline at end of file diff --git a/scr/miniprogram-2/pages/goods/comments/create/index.wxml b/scr/miniprogram-2/pages/goods/comments/create/index.wxml new file mode 100644 index 0000000..254812d --- /dev/null +++ b/scr/miniprogram-2/pages/goods/comments/create/index.wxml @@ -0,0 +1,85 @@ + + + + + + + + {{title}} + {{goodsDetail}} + + + + 商品评价 + + + + + + + + + + 添加图片/视频 + + + + + + + 匿名评价 + + + + + 物流服务评价 + + 物流评价 + + + + 服务评价 + + + + + + + + diff --git a/scr/miniprogram-2/pages/goods/comments/create/index.wxss b/scr/miniprogram-2/pages/goods/comments/create/index.wxss new file mode 100644 index 0000000..a63ef2e --- /dev/null +++ b/scr/miniprogram-2/pages/goods/comments/create/index.wxss @@ -0,0 +1,171 @@ +page { + background-color: #f5f5f5; +} + +.page-container .comment-card { + padding: 24rpx 32rpx 28rpx; + background-color: #ffffff; +} + +.comment-card .goods-info-container .goods-image { + width: 112rpx; + height: 112rpx; + border-radius: 8rpx; +} + +.comment-card .goods-info-container { + display: flex; +} + +.comment-card .goods-info-container .goods-title-container { + padding-left: 24rpx; +} + +.comment-card .goods-info-container .goods-title { + font-size: 28rpx; + font-weight: normal; + margin-top: 12rpx; +} + +.comment-card .goods-info-container .goods-detail { + font-size: 24rpx; + font-weight: normal; + color: #999999; + margin-top: 16rpx; +} + +.comment-card .rate-container { + display: flex; + align-items: center; + margin-top: 22rpx; +} + +.comment-card .rate-container .rate-title { + font-size: 28rpx; + font-weight: bold; +} + +.comment-card .rate-container .rate { + margin-left: 22rpx; +} + +.comment-card .textarea-container { + margin-top: 22rpx; +} + +.comment-card .textarea-container .textarea { + background-color: #f5f5f5; + border-radius: 16rpx; + font-size: 28rpx; + font-weight: normal; +} + +.page-container .t-checkbox__bordered { + display: none; +} + +.page-container .anonymous-box { + display: flex; + align-items: center; + padding-top: 52rpx; +} + +.page-container .anonymous-box .name { + font-size: 28rpx; + font-weight: normal; + color: #999999; + padding-left: 28rpx; +} + +.page-container .t-checkbox { + padding: 0rpx !important; +} + +.page-container .t-checkbox__content { + display: none; +} + +.comment-card .convey-comment-title { + font-size: 28rpx; + font-weight: bold; +} + +.convey-card { + background-color: #ffffff; + margin-top: 24rpx; + padding: 32rpx; + padding-bottom: calc(env(safe-area-inset-bottom) + 140rpx); +} + +.convey-card .rate-container .rate-title { + font-weight: normal; +} + +.page-container .t-checkbox__icon-left { + margin-right: 0rpx !important; +} + +.submit-button-container { + padding: 12rpx 0rpx; + display: flex; + width: 100vw; + justify-content: center; + position: fixed; + bottom: 0; + padding-bottom: calc(env(safe-area-inset-bottom) + 20rpx); + background-color: #ffffff; + z-index: 99; +} + +.submit-button-container .submit-button { + background-color: #fa4126; + border: 0; + border-radius: 48rpx; + width: 686rpx; + height: 88rpx; +} + +.submit-button-container .submit-button-disabled { + background-color: rgba(0, 0, 0, 0.4); + border: 0; + border-radius: 48rpx; + width: 686rpx; + height: 88rpx; +} + +.page-container .upload-container { + margin-top: 24rpx; +} + +.page-container .t-upload__wrapper { + border-radius: 8rpx; + overflow: hidden; +} + +.page-container .submmit-bar { + position: fixed; + left: 0; + right: 0; + bottom: 0; + z-index: 12; + padding: 12rpx 32rpx; + padding-bottom: env(safe-area-inset-bottom); + background-color: #fff; + height: 112rpx; +} + +.page-container .submmit-bar-button { + border-radius: 48rpx !important; + padding: 0 !important; +} + +.page-container .t-upload__close-btn { + background-color: rgba(0, 0, 0, 0.4); + border-bottom-left-radius: 8rpx; + width: 36rpx; + height: 36rpx; +} + +.upload-container .upload-addcontent-slot { + font-size: 26rpx; +} diff --git a/scr/miniprogram-2/pages/goods/comments/index.js b/scr/miniprogram-2/pages/goods/comments/index.js new file mode 100644 index 0000000..ef3b361 --- /dev/null +++ b/scr/miniprogram-2/pages/goods/comments/index.js @@ -0,0 +1,227 @@ +import { fetchComments } from '../../../services/comments/fetchComments'; +import { fetchCommentsCount } from '../../../services/comments/fetchCommentsCount'; +import dayjs from 'dayjs'; +const layoutMap = { + 0: 'vertical', +}; +Page({ + data: { + pageLoading: false, + commentList: [], + pageNum: 1, + myPageNum: 1, + pageSize: 10, + total: 0, + myTotal: 0, + hasLoaded: false, + layoutText: layoutMap[0], + loadMoreStatus: 0, + myLoadStatus: 0, + spuId: '1060004', + commentLevel: '', + hasImage: '', + commentType: '', + totalCount: 0, + countObj: { + badCount: '0', + commentCount: '0', + goodCount: '0', + middleCount: '0', + hasImageCount: '0', + uidCount: '0', + }, + }, + onLoad(options) { + this.getCount(options); + this.getComments(options); + }, + async getCount(options) { + try { + const result = await fetchCommentsCount( + { + spuId: options.spuId, + }, + { + method: 'POST', + }, + ); + this.setData({ + countObj: result, + }); + // const { data, code = '' } = result; + // if (code.toUpperCase() === 'SUCCESS') { + // wx.setNavigationBarTitle({ + // title: `全部评价(${data.commentCount})`, + // }); + // this.setData({ + // countObj: data, + // }); + // } else { + // wx.showToast({ + // title: '查询失败,请稍候重试', + // }); + // } + } catch (error) {} + }, + generalQueryData(reset) { + const { hasImage, pageNum, pageSize, spuId, commentLevel } = this.data; + const params = { + pageNum: 1, + pageSize: 30, + queryParameter: { + spuId, + }, + }; + if ( + Number(commentLevel) === 3 || + Number(commentLevel) === 2 || + Number(commentLevel) === 1 + ) { + params.queryParameter.commentLevel = Number(commentLevel); + } + if (hasImage && hasImage === '1') { + params.queryParameter.hasImage = true; + } else { + delete params.queryParameter.hasImage; + } + // 重置请求 + if (reset) return params; + + return { + ...params, + pageNum: pageNum + 1, + pageSize, + }; + }, + async init(reset = true) { + const { loadMoreStatus, commentList = [] } = this.data; + const params = this.generalQueryData(reset); + + // 在加载中或者无更多数据,直接返回 + if (loadMoreStatus !== 0) return; + + this.setData({ + loadMoreStatus: 1, + }); + + try { + const data = await fetchComments(params, { + method: 'POST', + }); + const code = 'SUCCESS'; + if (code.toUpperCase() === 'SUCCESS') { + const { pageList, totalCount = 0 } = data; + pageList.forEach((item) => { + // eslint-disable-next-line no-param-reassign + item.commentTime = dayjs(Number(item.commentTime)).format( + 'YYYY/MM/DD HH:mm', + ); + }); + + if (Number(totalCount) === 0 && reset) { + this.setData({ + commentList: [], + hasLoaded: true, + total: totalCount, + loadMoreStatus: 2, + }); + return; + } + const _commentList = reset ? pageList : commentList.concat(pageList); + const _loadMoreStatus = + _commentList.length === Number(totalCount) ? 2 : 0; + this.setData({ + commentList: _commentList, + pageNum: params.pageNum || 1, + totalCount: Number(totalCount), + loadMoreStatus: _loadMoreStatus, + }); + } else { + wx.showToast({ + title: '查询失败,请稍候重试', + }); + } + } catch (error) {} + this.setData({ + hasLoaded: true, + }); + }, + getScoreArray(score) { + var array = []; + for (let i = 0; i < 5; i++) { + if (i < score) { + array.push(2); + } else { + array.push(0); + } + } + return array; + }, + getComments(options) { + const { commentLevel = -1, spuId, hasImage = '' } = options; + if (commentLevel !== -1) { + this.setData({ + commentLevel: commentLevel, + }); + } + this.setData({ + hasImage: hasImage, + commentType: hasImage ? '4' : '', + spuId: spuId, + }); + this.init(true); + }, + changeTag(e) { + var { commenttype } = e.currentTarget.dataset; + var { commentType } = this.data; + if (commentType === commenttype) return; + this.setData({ + loadMoreStatus: 0, + commentList: [], + total: 0, + myTotal: 0, + myPageNum: 1, + pageNum: 1, + }); + if (commenttype === '' || commenttype === '5') { + this.setData({ + hasImage: '', + commentLevel: '', + }); + } else if (commenttype === '4') { + this.setData({ + hasImage: '1', + commentLevel: '', + }); + } else { + this.setData({ + hasImage: '', + commentLevel: commenttype, + }); + } + if (commenttype === '5') { + this.setData({ + myLoadStatus: 1, + commentType: commenttype, + }); + this.getMyCommentsList(); + } else { + this.setData({ + myLoadStatus: 0, + commentType: commenttype, + }); + this.init(true); + } + }, + onReachBottom() { + const { total = 0, commentList } = this.data; + if (commentList.length === total) { + this.setData({ + loadMoreStatus: 2, + }); + return; + } + + this.init(false); + }, +}); diff --git a/scr/miniprogram-2/pages/goods/comments/index.json b/scr/miniprogram-2/pages/goods/comments/index.json new file mode 100644 index 0000000..a6418c9 --- /dev/null +++ b/scr/miniprogram-2/pages/goods/comments/index.json @@ -0,0 +1,8 @@ +{ + "navigationBarTitleText": "全部评价", + "usingComponents": { + "t-tag": "tdesign-miniprogram/tag/tag", + "comments-card": "./components/comments-card/index", + "t-load-more": "/components/load-more/index" + } +} diff --git a/scr/miniprogram-2/pages/goods/comments/index.wxml b/scr/miniprogram-2/pages/goods/comments/index.wxml new file mode 100644 index 0000000..89d2b0f --- /dev/null +++ b/scr/miniprogram-2/pages/goods/comments/index.wxml @@ -0,0 +1,50 @@ + + + 全部({{countObj.commentCount}}) + + + 自己({{countObj.uidCount}}) + + + 带图({{countObj.hasImageCount}}) + + + 好评({{countObj.goodCount}}) + + + 中评({{countObj.middleCount}}) + + + 差评({{countObj.badCount}}) + + + + + + + + + diff --git a/scr/miniprogram-2/pages/goods/comments/index.wxss b/scr/miniprogram-2/pages/goods/comments/index.wxss new file mode 100644 index 0000000..b98f36b --- /dev/null +++ b/scr/miniprogram-2/pages/goods/comments/index.wxss @@ -0,0 +1,49 @@ +/* 层级定义 +@z-index-0: 1; +@z-index-1: 100; +@z-index-2: 200; +@z-index-5: 500; +@z-index-component: 1000; // 通用组件级别 +@z-index-dropdown: @z-index-component; +@z-index-sticky: @z-index-component + 20; +@z-index-fixed: @z-index-component + 30; +@z-index-modal-backdrop:@z-index-component + 40; +@z-index-modal:@z-index-component + 50; +@z-index-popover:@z-index-component + 60; +@z-index-tooltip:@z-index-component + 70; +*/ +/* var() css变量适配*/ +page { + background-color: #FFFFFF; +} + +.comments-header { + display: flex; + flex-wrap: wrap; + padding: 32rpx 32rpx 0rpx; + background-color: #fff; + margin-top: -24rpx; + margin-left: -24rpx; +} + +.comments-header-tag { + margin-top: 24rpx; + margin-left: 24rpx; + height: 56rpx !important; + font-size: 24rpx !important; + justify-content: center; + background-color: #F5F5F5 !important; + border-radius: 8rpx !important; + border: 1px solid #F5F5F5 !important; +} + +.comments-header-active { + background-color: #FFECE9 !important; + color: #FA4126 !important; + border: 1px solid #FA4126 !important; +} + +.no-more { + padding-left: 20rpx; + padding-right: 20rpx; +} \ No newline at end of file diff --git a/scr/miniprogram-2/pages/goods/details/components/buy-bar/index.js b/scr/miniprogram-2/pages/goods/details/components/buy-bar/index.js new file mode 100644 index 0000000..ae274e2 --- /dev/null +++ b/scr/miniprogram-2/pages/goods/details/components/buy-bar/index.js @@ -0,0 +1,66 @@ +Component({ + externalClasses: ['wr-sold-out', 'wr-class'], + + options: { multipleSlots: true }, + + properties: { + soldout: { + // 商品是否下架 + type: Boolean, + value: false, + }, + jumpArray: { + type: Array, + value: [], + }, + isStock: { + type: Boolean, + value: true, + }, // 是否有库存 + isSlotButton: { + type: Boolean, + value: false, + }, // 是否开启按钮插槽 + shopCartNum: { + type: Number, // 购物车气泡数量 + }, + buttonType: { + type: Number, + value: 0, + }, + minDiscountPrice: { + type: String, + value: '', + }, + minSalePrice: { + type: String, + value: '', + }, + }, + + data: { + fillPrice: false, + }, + + methods: { + toAddCart() { + const { isStock } = this.properties; + if (!isStock) return; + this.triggerEvent('toAddCart'); + }, + + toBuyNow(e) { + const { isStock } = this.properties; + if (!isStock) return; + this.triggerEvent('toBuyNow', e); + }, + + toNav(e) { + const { url } = e.currentTarget.dataset; + return this.triggerEvent('toNav', { + e, + url, + }); + }, + }, +}); diff --git a/scr/miniprogram-2/pages/goods/details/components/buy-bar/index.json b/scr/miniprogram-2/pages/goods/details/components/buy-bar/index.json new file mode 100644 index 0000000..7464ae6 --- /dev/null +++ b/scr/miniprogram-2/pages/goods/details/components/buy-bar/index.json @@ -0,0 +1,6 @@ +{ + "component": true, + "usingComponents": { + "t-icon": "tdesign-miniprogram/icon/icon" + } +} \ No newline at end of file diff --git a/scr/miniprogram-2/pages/goods/details/components/buy-bar/index.wxml b/scr/miniprogram-2/pages/goods/details/components/buy-bar/index.wxml new file mode 100644 index 0000000..604afb4 --- /dev/null +++ b/scr/miniprogram-2/pages/goods/details/components/buy-bar/index.wxml @@ -0,0 +1,38 @@ + + {{soldout ? '商品已下架' : '商品已售馨'}} + + + + + + + {{shopCartNum > 99 ? '99+' : shopCartNum}} + + + {{item.title}} + + + + + + + 加入购物车 + + + 立即购买 + + + + + + + + diff --git a/scr/miniprogram-2/pages/goods/details/components/buy-bar/index.wxss b/scr/miniprogram-2/pages/goods/details/components/buy-bar/index.wxss new file mode 100644 index 0000000..44e8ad0 --- /dev/null +++ b/scr/miniprogram-2/pages/goods/details/components/buy-bar/index.wxss @@ -0,0 +1,107 @@ +.footer-cont { + background-color: #fff; + padding: 16rpx; +} + +.icon-warp { + width: 110rpx; + display: flex; + justify-content: center; + align-items: center; + text-align: center; +} + +.operate-wrap { + position: relative; +} + +.bottom-operate-left { + width: 100%; +} + +.bottom-operate-left .icon-warp { + width: 50%; +} + +.tag-cart-num { + display: inline-block; + position: absolute; + left: 50rpx; + right: auto; + top: 6rpx; + color: #fff; + line-height: 24rpx; + text-align: center; + z-index: 99; + white-space: nowrap; + min-width: 28rpx; + border-radius: 14rpx; + background-color: #fa550f !important; + font-size: 20rpx; + font-weight: 400; + padding: 2rpx 6rpx; +} + +.operate-text { + color: #666; + font-size: 20rpx; +} + +.soldout { + height: 80rpx; + background: rgba(170, 170, 170, 1); + width: 100%; + color: #fff; +} + +.addCart-disabled, +.bar-addCart-disabled { + background: rgba(221, 221, 221, 1) !important; + color: #fff !important; + font-size: 28rpx; +} + +.buyNow-disabled, +.bar-buyNow-disabled { + background: rgba(198, 198, 198, 1) !important; + color: #fff !important; + font-size: 28rpx; +} + +.bar-separately, +.bar-buy { + width: 254rpx; + height: 80rpx; + color: #fff; + display: flex; + align-items: center; + justify-content: center; +} + +.bar-separately { + background: #ffece9; + color: #fa4126; + border-radius: 40rpx 0 0 40rpx; +} + +.bar-buy { + background-color: #fa4126; + border-radius: 0rpx 40rpx 40rpx 0rpx; +} + +.flex { + display: flex; + display: -webkit-flex; +} + +.flex-center { + justify-content: center; + -webkit-justify-content: center; + align-items: center; + -webkit-align-items: center; +} + +.flex-between { + justify-content: space-between; + -webkit-justify-content: space-between; +} diff --git a/scr/miniprogram-2/pages/goods/details/components/goods-specs-popup/index.js b/scr/miniprogram-2/pages/goods/details/components/goods-specs-popup/index.js new file mode 100644 index 0000000..d6a4f74 --- /dev/null +++ b/scr/miniprogram-2/pages/goods/details/components/goods-specs-popup/index.js @@ -0,0 +1,389 @@ +/* eslint-disable no-param-reassign */ +/* eslint-disable no-nested-ternary */ +import Toast from 'tdesign-miniprogram/toast/index'; + +Component({ + options: { + multipleSlots: true, + addGlobalClass: true, + }, + + properties: { + src: { + type: String, + }, + title: String, + show: { + type: Boolean, + value: false, + }, + limitBuyInfo: { + type: String, + value: '', + }, + isStock: { + type: Boolean, + value: true, + }, + limitMaxCount: { + type: Number, + value: 999, + }, + limitMinCount: { + type: Number, + value: 1, + }, + skuList: { + type: Array, + value: [], + observer(skuList) { + if (skuList && skuList.length > 0) { + if (this.initStatus) { + this.initData(); + } + } + }, + }, + specList: { + type: Array, + value: [], + observer(specList) { + if (specList && specList.length > 0) { + this.initData(); + } + }, + }, + outOperateStatus: { + type: Boolean, + value: false, + }, + hasAuth: { + type: Boolean, + value: false, + }, + count: { + type: Number, + value: 1, + observer(count) { + this.setData({ + buyNum: count, + }); + }, + }, + }, + + initStatus: false, + selectedSku: {}, + selectSpecObj: {}, + + data: { + buyNum: 1, + isAllSelectedSku: false, + }, + + methods: { + initData() { + const { skuList } = this.properties; + const { specList } = this.properties; + specList.forEach((item) => { + if (item.specValueList.length > 0) { + item.specValueList.forEach((subItem) => { + const obj = this.checkSkuStockQuantity( + subItem.specValueId, + skuList, + ); + subItem.hasStockObj = obj; + }); + } + }); + const selectedSku = {}; + specList.forEach((item) => { + selectedSku[item.specId] = ''; + }); + this.setData({ + specList, + }); + this.selectSpecObj = {}; + this.selectedSku = {}; + this.initStatus = true; + }, + + checkSkuStockQuantity(specValueId, skuList) { + let hasStock = false; + const array = []; + skuList.forEach((item) => { + (item.specInfo || []).forEach((subItem) => { + if (subItem.specValueId === specValueId && item.quantity > 0) { + const subArray = []; + (item.specInfo || []).forEach((specItem) => { + subArray.push(specItem.specValueId); + }); + array.push(subArray); + hasStock = true; + } + }); + }); + return { + hasStock, + specsArray: array, + }; + }, + + chooseSpecValueId(specValueId, specId) { + const { selectSpecObj } = this; + const { skuList, specList } = this.properties; + if (selectSpecObj[specId]) { + selectSpecObj[specId] = []; + this.selectSpecObj = selectSpecObj; + } else { + selectSpecObj[specId] = []; + } + + const itemAllSpecArray = []; + const itemUnSelectArray = []; + const itemSelectArray = []; + specList.forEach((item) => { + if (item.specId === specId) { + const subSpecValueItem = item.specValueList.find( + (subItem) => subItem.specValueId === specValueId, + ); + let specSelectStatus = false; + item.specValueList.forEach((n) => { + itemAllSpecArray.push(n.hasStockObj.specsArray); + if (n.isChoosed) { + specSelectStatus = true; + } + if (n.hasStockObj.hasStock) { + itemSelectArray.push(n.specValueId); + } else { + itemUnSelectArray.push(n.specValueId); + } + }); + if (specSelectStatus) { + selectSpecObj[specId] = this.flatten( + subSpecValueItem?.hasStockObj.specsArray.concat(itemSelectArray), + ); + } else { + const subSet = function (arr1, arr2) { + const set2 = new Set(arr2); + const subset = []; + arr1.forEach((val) => { + if (!set2.has(val)) { + subset.push(val); + } + }); + return subset; + }; + selectSpecObj[specId] = subSet( + this.flatten(itemAllSpecArray), + this.flatten(itemUnSelectArray), + ); + } + } else { + // 未点击规格的逻辑 + const itemSelectArray = []; + let specSelectStatus = false; + item.specValueList.map( + // 找到有库存的规格数组 + (n) => { + itemSelectArray.push(n.hasStockObj.specsArray); + if (n.isChoosed) { + specSelectStatus = true; + } + n.hasStockObj.hasStock = true; + return n; + }, + ); + if (specSelectStatus) { + selectSpecObj[item.specId] = this.flatten(itemSelectArray); + } else { + delete selectSpecObj[item.specId]; + } + } + this.selectSpecObj = selectSpecObj; + }); + const combatArray = Object.values(selectSpecObj); + if (combatArray.length > 0) { + const showArray = combatArray.reduce((x, y) => + this.getIntersection(x, y), + ); + const lastResult = Array.from(new Set(showArray)); + specList.forEach((item) => { + item.specValueList.forEach((subItem) => { + if (lastResult.includes(subItem.specValueId)) { + subItem.hasStockObj.hasStock = true; + } else { + subItem.hasStockObj.hasStock = false; + } + }); + }); + } else { + specList.forEach((item) => { + if (item.specValueList.length > 0) { + item.specValueList.forEach((subItem) => { + const obj = this.checkSkuStockQuantity( + subItem.specValueId, + skuList, + ); + subItem.hasStockObj = obj; + }); + } + }); + } + this.setData({ + specList, + }); + }, + + flatten(input) { + const stack = [...input]; + const res = []; + while (stack.length) { + const next = stack.pop(); + if (Array.isArray(next)) { + stack.push(...next); + } else { + res.push(next); + } + } + return res.reverse(); + }, + + getIntersection(array, nextArray) { + return array.filter((item) => nextArray.includes(item)); + }, + + toChooseItem(e) { + const { isStock } = this.properties; + if (!isStock) return; + const { id } = e.currentTarget.dataset; + const specId = e.currentTarget.dataset.specid; + const hasStock = e.currentTarget.dataset.hasstock; + if (!hasStock) { + Toast({ + context: this, + selector: '#t-toast', + message: '该规格已售罄', + icon: '', + duration: 1000, + }); + return; + } + + let { selectedSku } = this; + const { specList } = this.properties; + selectedSku = + selectedSku[specId] === id + ? { ...this.selectedSku, [specId]: '' } + : { ...this.selectedSku, [specId]: id }; + specList.forEach((item) => { + item.specValueList.forEach((valuesItem) => { + if (item.specId === specId) { + valuesItem.isChoosed = + valuesItem.specValueId === selectedSku[specId]; + } + }); + }); + this.chooseSpecValueId(id, specId); + const isAllSelectedSku = this.isAllSelected(specList, selectedSku); + if (!isAllSelectedSku) { + this.setData({ + selectSkuSellsPrice: 0, + selectSkuImg: '', + }); + } + this.setData({ + specList, + isAllSelectedSku, + }); + this.selectedSku = selectedSku; + this.triggerEvent('change', { + specList, + selectedSku, + isAllSelectedSku, + }); + }, + + // 判断是否所有的sku都已经选中 + isAllSelected(skuTree, selectedSku) { + const selected = Object.keys(selectedSku).filter( + (skuKeyStr) => selectedSku[skuKeyStr] !== '', + ); + return skuTree.length === selected.length; + }, + + handlePopupHide() { + this.triggerEvent('closeSpecsPopup', { + show: false, + }); + }, + + specsConfirm() { + const { isStock } = this.properties; + if (!isStock) return; + this.triggerEvent('specsConfirm'); + }, + + addCart() { + const { isStock } = this.properties; + if (!isStock) return; + this.triggerEvent('addCart'); + }, + + buyNow() { + const { isAllSelectedSku } = this.data; + const { isStock } = this.properties; + if (!isStock) return; + this.triggerEvent('buyNow', { + isAllSelectedSku, + }); + }, + + // 加 + handleBuyNumPlus() { + const { buyNum } = this.data; + const { isStock } = this.properties; + if (!isStock) return; + const nextBuyNum = Number(buyNum) + 1; + this.setBuyNum(nextBuyNum > 999 ? buyNum : nextBuyNum); + }, + + // 减 + handleBuyNumMinus() { + const { buyNum } = this.data; + const { limitMinCount } = this.properties; + const { isStock } = this.properties; + if (!isStock || buyNum < limitMinCount + 1) return; + const nextBuyNum = Number(buyNum) - 1; + this.setBuyNum(nextBuyNum < 1 ? buyNum : nextBuyNum); + }, + + // 总处理 + setBuyNum(buyNum) { + this.setData({ + buyNum, + }); + this.triggerEvent('changeNum', { + buyNum, + }); + }, + + // 输入框 + handleBuyNumChange(e) { + const { + detail: { value }, + } = e; + const valInNum = Number(value); + const { limitMaxCount, limitMinCount } = this.properties; + const nextData = { + buyNum: + valInNum < limitMinCount + ? limitMinCount + : valInNum > limitMaxCount + ? limitMaxCount + : valInNum, + }; + this.setData(nextData); + }, + }, +}); diff --git a/scr/miniprogram-2/pages/goods/details/components/goods-specs-popup/index.json b/scr/miniprogram-2/pages/goods/details/components/goods-specs-popup/index.json new file mode 100644 index 0000000..e699a1c --- /dev/null +++ b/scr/miniprogram-2/pages/goods/details/components/goods-specs-popup/index.json @@ -0,0 +1,9 @@ +{ + "component": true, + "usingComponents": { + "t-popup": "tdesign-miniprogram/popup/popup", + "t-icon": "tdesign-miniprogram/icon/icon", + "t-image": "/components/webp-image/index", + "t-toast": "tdesign-miniprogram/toast/toast" + } +} \ No newline at end of file diff --git a/scr/miniprogram-2/pages/goods/details/components/goods-specs-popup/index.wxml b/scr/miniprogram-2/pages/goods/details/components/goods-specs-popup/index.wxml new file mode 100644 index 0000000..bb5fd25 --- /dev/null +++ b/scr/miniprogram-2/pages/goods/details/components/goods-specs-popup/index.wxml @@ -0,0 +1,100 @@ + + + + + + + + + {{title}} + + + + + + 选择: + + + {{selectedItem.specValue}} + + + + + + + + + {{item.title}} + + + {{valuesItem.specValue}} + + + + + + + + 购买数量 + + ({{limitBuyInfo}}) + + + + + + + + + + + + + + + + + + 确定 + + + + + 加入购物车 + + + + + 立即购买 + + + + + + + + diff --git a/scr/miniprogram-2/pages/goods/details/components/goods-specs-popup/index.wxss b/scr/miniprogram-2/pages/goods/details/components/goods-specs-popup/index.wxss new file mode 100644 index 0000000..de0c749 --- /dev/null +++ b/scr/miniprogram-2/pages/goods/details/components/goods-specs-popup/index.wxss @@ -0,0 +1,300 @@ +.popup-container { + background-color: #ffffff; + position: relative; + z-index: 100; + border-radius: 16rpx 16rpx 0 0; + padding-bottom: calc(env(safe-area-inset-bottom) + 20rpx); +} + +.popup-container .popup-close { + position: absolute; + right: 30rpx; + top: 30rpx; + z-index: 9; + color: #999999; +} + +.popup-sku-header { + display: flex; + padding: 30rpx 28rpx 0 30rpx; +} + +.popup-sku-header .popup-sku-header__img { + width: 176rpx; + height: 176rpx; + border-radius: 8rpx; + background: #d8d8d8; + margin-right: 24rpx; +} + +.popup-sku-header .popup-sku-header__goods-info { + position: relative; + width: 500rpx; +} + +.popup-sku-header .popup-sku-header__goods-info .popup-sku__goods-name { + font-size: 28rpx; + line-height: 40rpx; + display: -webkit-box; + -webkit-line-clamp: 2; + -webkit-box-orient: vertical; + white-space: normal; + overflow: hidden; + width: 430rpx; + text-overflow: ellipsis; +} + +.popup-sku-header .popup-sku-header__goods-info .popup-sku__selected-spec { + display: flex; + color: #333333; + font-size: 26rpx; + line-height: 36rpx; +} + +.popup-sku-header + .popup-sku-header__goods-info + .popup-sku__selected-spec + .popup-sku__selected-item { + margin-right: 10rpx; +} + +.popup-sku-body { + margin: 0 30rpx 40rpx; + max-height: 600rpx; + overflow-y: scroll; + -webkit-overflow-scrolling: touch; +} + +.popup-sku-body .popup-sku-group-container .popup-sku-row { + padding: 32rpx 0; + border-bottom: 1rpx solid #f5f5f5; +} + +.popup-sku-body + .popup-sku-group-container + .popup-sku-row + .popup-sku-row__title { + font-size: 26rpx; + color: #333; +} + +.popup-sku-body .popup-sku-group-container .popup-sku-row .popup-sku-row__item { + font-size: 24rpx; + color: #333; + min-width: 128rpx; + height: 56rpx; + background-color: #f5f5f5; + border-radius: 8rpx; + border: 2rpx solid #f5f5f5; + margin: 19rpx 26rpx 0 0; + padding: 0 16rpx; + display: inline-flex; + align-items: center; + justify-content: center; +} + +.popup-sku-body + .popup-sku-group-container + .popup-sku-row + .popup-sku-row__item.popup-sku-row__item--active { + border: 2rpx solid #fa4126; + color: #fa4126; + background: rgba(255, 95, 21, 0.04); +} + +.popup-sku-body + .popup-sku-group-container + .popup-sku-row + .disabled-sku-selected { + background: #f5f5f5 !important; + color: #cccccc; +} + +.popup-sku-body .popup-sku-stepper-stock .popup-sku-stepper-container { + display: flex; + align-items: center; + justify-content: space-between; + margin: 40rpx 0; +} + +.popup-sku-body + .popup-sku-stepper-stock + .popup-sku-stepper-container + .popup-sku__stepper-title { + display: flex; + font-size: 26rpx; + color: #333; +} + +.popup-sku-body + .popup-sku-stepper-stock + .popup-sku-stepper-container + .popup-sku__stepper-title + .limit-text { + margin-left: 10rpx; + color: #999999; +} + +.popup-sku-body + .popup-sku-stepper-stock + .popup-sku-stepper-container + .popup-stepper { + display: flex; + flex-flow: row nowrap; + align-items: center; + font-size: 28px; + height: 48rpx; + line-height: 62rpx; +} + +.popup-sku-body + .popup-sku-stepper-stock + .popup-sku-stepper-container + .popup-stepper + .input-btn, +.popup-sku-body + .popup-sku-stepper-stock + .popup-sku-stepper-container + .popup-stepper + .input-num-wrap { + position: relative; + height: 100%; + text-align: center; + background-color: #f5f5f5; + border-radius: 4rpx; +} + +.popup-sku-body + .popup-sku-stepper-stock + .popup-sku-stepper-container + .popup-stepper + .input-num-wrap { + color: #282828; + display: flex; + max-width: 76rpx; + align-items: center; + justify-content: space-between; +} + +.popup-sku-body + .popup-sku-stepper-stock + .popup-sku-stepper-container + .popup-stepper + .input-num-wrap + .input-num { + height: 100%; + width: auto; + font-weight: 600; + font-size: 30rpx; +} + +.popup-sku-body + .popup-sku-stepper-stock + .popup-sku-stepper-container + .popup-stepper + .input-btn { + width: 48rpx; +} + +.popup-sku-body + .popup-sku-stepper-stock + .popup-sku-stepper-container + .popup-stepper + .popup-stepper__minus { + margin-right: 4rpx; + border-radius: 4rpx; + color: #9a979b; + display: flex; + align-items: center; + justify-content: center; +} + +.popup-sku-body + .popup-sku-stepper-stock + .popup-sku-stepper-container + .popup-stepper + .popup-stepper__plus { + margin-left: 4rpx; + border-radius: 4rpx; + color: #9a979b; + display: flex; + align-items: center; + justify-content: center; +} + +.popup-sku-body + .popup-sku-stepper-stock + .popup-sku-stepper-container + .popup-stepper + .popup-stepper__plus::after { + width: 24rpx; + height: 3rpx; + background-color: #999999; +} + +.popup-sku-body + .popup-sku-stepper-stock + .popup-sku-stepper-container + .popup-stepper + .popup-stepper__plus::before { + width: 3rpx; + height: 24rpx; + background-color: #999999; +} + +.popup-sku-actions { + font-size: 32rpx; + height: 80rpx; + text-align: center; + line-height: 80rpx; + padding: 0 20rpx; +} + +.popup-sku-actions .sku-operate { + height: 80rpx; + width: 50%; + color: #fff; + border-radius: 48rpx; +} + +.popup-sku-actions .sku-operate .sku-operate-addCart { + background-color: #ffece9; + color: #fa4126; + border-radius: 48rpx 0 0 48rpx; +} + +.popup-sku-actions .sku-operate .sku-operate-addCart.disabled { + background: rgb(221, 221, 221); + color: #fff; +} + +.popup-sku-actions .sku-operate .sku-operate-buyNow { + background-color: #fa4126; + border-radius: 0 48rpx 48rpx 0; +} + +.popup-sku-actions .sku-operate .sku-operate-buyNow.disabled { + color: #fff; + background: rgb(198, 198, 198); +} + +.popup-sku-actions .sku-operate .selected-sku-btn { + width: 100%; +} + +.popup-container .single-confirm-btn { + border-radius: 48rpx; + color: #ffffff; + margin: 0 32rpx; + font-size: 32rpx; + height: 80rpx; + text-align: center; + line-height: 88rpx; + background-color: #fa4126; +} + +.popup-container .single-confirm-btn.disabled { + font-size: 32rpx; + color: #fff; + background-color: #dddddd; +} diff --git a/scr/miniprogram-2/pages/goods/details/components/promotion-popup/index.js b/scr/miniprogram-2/pages/goods/details/components/promotion-popup/index.js new file mode 100644 index 0000000..9743cc1 --- /dev/null +++ b/scr/miniprogram-2/pages/goods/details/components/promotion-popup/index.js @@ -0,0 +1,35 @@ +Component({ + options: { + multipleSlots: true, + }, + + properties: { + list: Array, + title: { + type: String, + value: '促销说明', + }, + show: { + type: Boolean, + }, + }, + + // data: { + // list: [], + // }, + + methods: { + change(e) { + const { index } = e.currentTarget.dataset; + this.triggerEvent('promotionChange', { + index, + }); + }, + + closePromotionPopup() { + this.triggerEvent('closePromotionPopup', { + show: false, + }); + }, + }, +}); diff --git a/scr/miniprogram-2/pages/goods/details/components/promotion-popup/index.json b/scr/miniprogram-2/pages/goods/details/components/promotion-popup/index.json new file mode 100644 index 0000000..a9de77d --- /dev/null +++ b/scr/miniprogram-2/pages/goods/details/components/promotion-popup/index.json @@ -0,0 +1,7 @@ +{ + "component": true, + "usingComponents": { + "t-popup": "tdesign-miniprogram/popup/popup", + "t-icon": "tdesign-miniprogram/icon/icon" + } +} \ No newline at end of file diff --git a/scr/miniprogram-2/pages/goods/details/components/promotion-popup/index.wxml b/scr/miniprogram-2/pages/goods/details/components/promotion-popup/index.wxml new file mode 100644 index 0000000..c1cea9d --- /dev/null +++ b/scr/miniprogram-2/pages/goods/details/components/promotion-popup/index.wxml @@ -0,0 +1,34 @@ + + + + + + + {{title}} + + + + + {{item.tag}} + + {{item.label ? item.label : ''}} + + + + + + + + + diff --git a/scr/miniprogram-2/pages/goods/details/components/promotion-popup/index.wxss b/scr/miniprogram-2/pages/goods/details/components/promotion-popup/index.wxss new file mode 100644 index 0000000..6e0e167 --- /dev/null +++ b/scr/miniprogram-2/pages/goods/details/components/promotion-popup/index.wxss @@ -0,0 +1,131 @@ +.promotion-popup-container { + background-color: #ffffff; + position: relative; + z-index: 100; + border-radius: 16rpx 16rpx 0 0; +} + +.promotion-popup-container .promotion-popup-close { + position: absolute; + right: 30rpx; + top: 30rpx; + z-index: 9; + color: rgba(153, 153, 153, 1); +} + +.promotion-popup-container .promotion-popup-close .market { + font-size: 25rpx; + color: #999; +} + +.promotion-popup-container .promotion-popup-title { + height: 100rpx; + position: relative; + display: flex; + align-items: center; + justify-content: center; +} + +.promotion-popup-container .promotion-popup-title { + font-size: 32rpx; + color: #222427; + font-weight: 600; +} + +.promotion-popup-container .promotion-popup-content { + min-height: 400rpx; + max-height: 600rpx; + padding-bottom: calc(env(safe-area-inset-bottom) + 20rpx); + overflow-y: scroll; + -webkit-overflow-scrolling: touch; +} + +.promotion-popup-container .promotion-popup-content .promotion-detail-list { + margin: 0 30rpx; +} + +.promotion-popup-container + .promotion-popup-content + .promotion-detail-list + .list-item:last-child { + margin-bottom: env(safe-area-inset-bottom); + border-bottom: 0; + padding-bottom: calc(28rpx + env(safe-area-inset-bottom)); +} + +.promotion-popup-container + .promotion-popup-content + .promotion-detail-list + .list-item { + display: flex; + justify-content: space-between; + padding: 10rpx 0 28rpx; + position: relative; + font-size: 24rpx; + color: #222427; +} + +.promotion-popup-container + .promotion-popup-content + .promotion-detail-list + .list-item + .tag { + box-sizing: border-box; + font-size: 20rpx; + line-height: 32rpx; + padding: 2rpx 12rpx; + background-color: #ffece9; + margin-right: 16rpx; + display: inline-flex; + color: #fa4126; + border-radius: 54rpx; + flex-shrink: 0; + position: relative; + top: 2rpx; +} + +.promotion-popup-container + .promotion-popup-content + .promotion-detail-list + .list-item + .content { + font-size: 28rpx; + color: #222427; + flex: 1; + line-height: 40rpx; + display: flex; +} + +.promotion-popup-container + .promotion-popup-content + .promotion-detail-list + .list-item + .content + .list-content { + width: 440rpx; + white-space: nowrap; + text-overflow: ellipsis; + overflow: hidden; + display: inline-block; +} + +.promotion-popup-container + .promotion-popup-content + .promotion-detail-list + .list-item + .collect-btn { + font-size: 24rpx; + flex-shrink: 0; + margin-left: 20rpx; + display: flex; + align-items: center; +} + +.promotion-popup-container + .promotion-popup-content + .promotion-detail-list + .list-item + .collect-btn + .linkText { + margin-right: 8rpx; +} diff --git a/scr/miniprogram-2/pages/goods/details/index.js b/scr/miniprogram-2/pages/goods/details/index.js new file mode 100644 index 0000000..b41f007 --- /dev/null +++ b/scr/miniprogram-2/pages/goods/details/index.js @@ -0,0 +1,443 @@ +import Toast from 'tdesign-miniprogram/toast/index'; +import { fetchGood } from '../../../services/good/fetchGood'; +import { fetchActivityList } from '../../../services/activity/fetchActivityList'; +import { + getGoodsDetailsCommentList, + getGoodsDetailsCommentsCount, +} from '../../../services/good/fetchGoodsDetailsComments'; + +import { cdnBase } from '../../../config/index'; + +const imgPrefix = `${cdnBase}/`; + +const recLeftImg = `${imgPrefix}common/rec-left.png`; +const recRightImg = `${imgPrefix}common/rec-right.png`; +const obj2Params = (obj = {}, encode = false) => { + const result = []; + Object.keys(obj).forEach((key) => + result.push(`${key}=${encode ? encodeURIComponent(obj[key]) : obj[key]}`), + ); + + return result.join('&'); +}; + +Page({ + data: { + commentsList: [], + commentsStatistics: { + badCount: 0, + commentCount: 0, + goodCount: 0, + goodRate: 0, + hasImageCount: 0, + middleCount: 0, + }, + isShowPromotionPop: false, + activityList: [], + recLeftImg, + recRightImg, + details: {}, + goodsTabArray: [ + { + name: '商品', + value: '', // 空字符串代表置顶 + }, + { + name: '详情', + value: 'goods-page', + }, + ], + storeLogo: `${imgPrefix}common/store-logo.png`, + storeName: '云mall标准版旗舰店', + jumpArray: [ + { + title: '首页', + url: '/pages/home/home', + iconName: 'home', + }, + { + title: '购物车', + url: '/pages/cart/index', + iconName: 'cart', + showCartNum: true, + }, + ], + isStock: true, + cartNum: 0, + soldout: false, + buttonType: 1, + buyNum: 1, + selectedAttrStr: '', + skuArray: [], + primaryImage: '', + specImg: '', + isSpuSelectPopupShow: false, + isAllSelectedSku: false, + buyType: 0, + outOperateStatus: false, // 是否外层加入购物车 + operateType: 0, + selectSkuSellsPrice: 0, + maxLinePrice: 0, + minSalePrice: 0, + maxSalePrice: 0, + list: [], + spuId: '', + navigation: { type: 'fraction' }, + current: 0, + autoplay: true, + duration: 500, + interval: 5000, + soldNum: 0, // 已售数量 + }, + + handlePopupHide() { + this.setData({ + isSpuSelectPopupShow: false, + }); + }, + + showSkuSelectPopup(type) { + this.setData({ + buyType: type || 0, + outOperateStatus: type >= 1, + isSpuSelectPopupShow: true, + }); + }, + + buyItNow() { + this.showSkuSelectPopup(1); + }, + + toAddCart() { + this.showSkuSelectPopup(2); + }, + + toNav(e) { + const { url } = e.detail; + wx.switchTab({ + url: url, + }); + }, + + showCurImg(e) { + const { index } = e.detail; + const { images } = this.data.details; + wx.previewImage({ + current: images[index], + urls: images, // 需要预览的图片http链接列表 + }); + }, + + onPageScroll({ scrollTop }) { + const goodsTab = this.selectComponent('#goodsTab'); + goodsTab && goodsTab.onScroll(scrollTop); + }, + + chooseSpecItem(e) { + const { specList } = this.data.details; + const { selectedSku, isAllSelectedSku } = e.detail; + if (!isAllSelectedSku) { + this.setData({ + selectSkuSellsPrice: 0, + }); + } + this.setData({ + isAllSelectedSku, + }); + this.getSkuItem(specList, selectedSku); + }, + + getSkuItem(specList, selectedSku) { + const { skuArray, primaryImage } = this.data; + const selectedSkuValues = this.getSelectedSkuValues(specList, selectedSku); + let selectedAttrStr = ` 件 `; + selectedSkuValues.forEach((item) => { + selectedAttrStr += `,${item.specValue} `; + }); + // eslint-disable-next-line array-callback-return + const skuItem = skuArray.filter((item) => { + let status = true; + (item.specInfo || []).forEach((subItem) => { + if ( + !selectedSku[subItem.specId] || + selectedSku[subItem.specId] !== subItem.specValueId + ) { + status = false; + } + }); + if (status) return item; + }); + this.selectSpecsName(selectedSkuValues.length > 0 ? selectedAttrStr : ''); + if (skuItem) { + this.setData({ + selectItem: skuItem, + selectSkuSellsPrice: skuItem.price || 0, + }); + } else { + this.setData({ + selectItem: null, + selectSkuSellsPrice: 0, + }); + } + this.setData({ + specImg: skuItem && skuItem.skuImage ? skuItem.skuImage : primaryImage, + }); + }, + + // 获取已选择的sku名称 + getSelectedSkuValues(skuTree, selectedSku) { + const normalizedTree = this.normalizeSkuTree(skuTree); + return Object.keys(selectedSku).reduce((selectedValues, skuKeyStr) => { + const skuValues = normalizedTree[skuKeyStr]; + const skuValueId = selectedSku[skuKeyStr]; + if (skuValueId !== '') { + const skuValue = skuValues.filter((value) => { + return value.specValueId === skuValueId; + })[0]; + skuValue && selectedValues.push(skuValue); + } + return selectedValues; + }, []); + }, + + normalizeSkuTree(skuTree) { + const normalizedTree = {}; + skuTree.forEach((treeItem) => { + normalizedTree[treeItem.specId] = treeItem.specValueList; + }); + return normalizedTree; + }, + + selectSpecsName(selectSpecsName) { + if (selectSpecsName) { + this.setData({ + selectedAttrStr: selectSpecsName, + }); + } else { + this.setData({ + selectedAttrStr: '', + }); + } + }, + + addCart() { + const { isAllSelectedSku } = this.data; + Toast({ + context: this, + selector: '#t-toast', + message: isAllSelectedSku ? '点击加入购物车' : '请选择规格', + icon: '', + duration: 1000, + }); + }, + + gotoBuy(type) { + const { isAllSelectedSku, buyNum } = this.data; + if (!isAllSelectedSku) { + Toast({ + context: this, + selector: '#t-toast', + message: '请选择规格', + icon: '', + duration: 1000, + }); + return; + } + this.handlePopupHide(); + const query = { + quantity: buyNum, + storeId: '1', + spuId: this.data.spuId, + goodsName: this.data.details.title, + skuId: + type === 1 ? this.data.skuList[0].skuId : this.data.selectItem.skuId, + available: this.data.details.available, + price: this.data.details.minSalePrice, + specInfo: this.data.details.specList?.map((item) => ({ + specTitle: item.title, + specValue: item.specValueList[0].specValue, + })), + primaryImage: this.data.details.primaryImage, + spuId: this.data.details.spuId, + thumb: this.data.details.primaryImage, + title: this.data.details.title, + }; + let urlQueryStr = obj2Params({ + goodsRequestList: JSON.stringify([query]), + }); + urlQueryStr = urlQueryStr ? `?${urlQueryStr}` : ''; + const path = `/pages/order/order-confirm/index${urlQueryStr}`; + wx.navigateTo({ + url: path, + }); + }, + + specsConfirm() { + const { buyType } = this.data; + if (buyType === 1) { + this.gotoBuy(); + } else { + this.addCart(); + } + // this.handlePopupHide(); + }, + + changeNum(e) { + this.setData({ + buyNum: e.detail.buyNum, + }); + }, + + closePromotionPopup() { + this.setData({ + isShowPromotionPop: false, + }); + }, + + promotionChange(e) { + const { index } = e.detail; + wx.navigateTo({ + url: `/pages/promotion-detail/index?promotion_id=${index}`, + }); + }, + + showPromotionPopup() { + this.setData({ + isShowPromotionPop: true, + }); + }, + + getDetail(spuId) { + Promise.all([fetchGood(spuId), fetchActivityList()]).then((res) => { + const [details, activityList] = res; + const skuArray = []; + const { + skuList, + primaryImage, + isPutOnSale, + minSalePrice, + maxSalePrice, + maxLinePrice, + soldNum, + } = details; + skuList.forEach((item) => { + skuArray.push({ + skuId: item.skuId, + quantity: item.stockInfo ? item.stockInfo.stockQuantity : 0, + specInfo: item.specInfo, + }); + }); + const promotionArray = []; + activityList.forEach((item) => { + promotionArray.push({ + tag: item.promotionSubCode === 'MYJ' ? '满减' : '满折', + label: '满100元减99.9元', + }); + }); + this.setData({ + details, + activityList, + isStock: details.spuStockQuantity > 0, + maxSalePrice: maxSalePrice ? parseInt(maxSalePrice) : 0, + maxLinePrice: maxLinePrice ? parseInt(maxLinePrice) : 0, + minSalePrice: minSalePrice ? parseInt(minSalePrice) : 0, + list: promotionArray, + skuArray: skuArray, + primaryImage, + soldout: isPutOnSale === 0, + soldNum, + }); + }); + }, + + async getCommentsList() { + try { + const code = 'Success'; + const data = await getGoodsDetailsCommentList(); + const { homePageComments } = data; + if (code.toUpperCase() === 'SUCCESS') { + const nextState = { + commentsList: homePageComments.map((item) => { + return { + goodsSpu: item.spuId, + userName: item.userName || '', + commentScore: item.commentScore, + commentContent: item.commentContent || '用户未填写评价', + userHeadUrl: item.isAnonymity + ? this.anonymityAvatar + : item.userHeadUrl || this.anonymityAvatar, + }; + }), + }; + this.setData(nextState); + } + } catch (error) { + console.error('comments error:', error); + } + }, + + onShareAppMessage() { + // 自定义的返回信息 + const { selectedAttrStr } = this.data; + let shareSubTitle = ''; + if (selectedAttrStr.indexOf('件') > -1) { + const count = selectedAttrStr.indexOf('件'); + shareSubTitle = selectedAttrStr.slice(count + 1, selectedAttrStr.length); + } + const customInfo = { + imageUrl: this.data.details.primaryImage, + title: this.data.details.title + shareSubTitle, + path: `/pages/goods/details/index?spuId=${this.data.spuId}`, + }; + return customInfo; + }, + + /** 获取评价统计 */ + async getCommentsStatistics() { + try { + const code = 'Success'; + const data = await getGoodsDetailsCommentsCount(); + if (code.toUpperCase() === 'SUCCESS') { + const { + badCount, + commentCount, + goodCount, + goodRate, + hasImageCount, + middleCount, + } = data; + const nextState = { + commentsStatistics: { + badCount: parseInt(`${badCount}`), + commentCount: parseInt(`${commentCount}`), + goodCount: parseInt(`${goodCount}`), + /** 后端返回百分比后数据但没有限制位数 */ + goodRate: Math.floor(goodRate * 10) / 10, + hasImageCount: parseInt(`${hasImageCount}`), + middleCount: parseInt(`${middleCount}`), + }, + }; + this.setData(nextState); + } + } catch (error) { + console.error('comments statiistics error:', error); + } + }, + + /** 跳转到评价列表 */ + navToCommentsListPage() { + wx.navigateTo({ + url: `/pages/goods/comments/index?spuId=${this.data.spuId}`, + }); + }, + + onLoad(query) { + const { spuId } = query; + this.setData({ + spuId: spuId, + }); + this.getDetail(spuId); + this.getCommentsList(spuId); + this.getCommentsStatistics(spuId); + }, +}); diff --git a/scr/miniprogram-2/pages/goods/details/index.json b/scr/miniprogram-2/pages/goods/details/index.json new file mode 100644 index 0000000..a5d8558 --- /dev/null +++ b/scr/miniprogram-2/pages/goods/details/index.json @@ -0,0 +1,18 @@ +{ + "navigationBarTitleText": "商品详情", + "usingComponents": { + "t-image": "/components/webp-image/index", + "t-tag": "tdesign-miniprogram/tag/tag", + "t-toast": "tdesign-miniprogram/toast/toast", + "t-rate": "tdesign-miniprogram/rate/rate", + "t-swiper": "tdesign-miniprogram/swiper/swiper", + "t-swiper-item": "tdesign-miniprogram/swiper/swiper-item", + "t-button": "tdesign-miniprogram/button/button", + "t-icon": "tdesign-miniprogram/icon/icon", + "t-popup": "tdesign-miniprogram/popup/popup", + "price": "/components/price/index", + "buy-bar": "./components/buy-bar/index", + "promotion-popup": "./components/promotion-popup/index", + "goods-specs-popup": "./components/goods-specs-popup/index" + } +} \ No newline at end of file diff --git a/scr/miniprogram-2/pages/goods/details/index.wxml b/scr/miniprogram-2/pages/goods/details/index.wxml new file mode 100644 index 0000000..1a616f4 --- /dev/null +++ b/scr/miniprogram-2/pages/goods/details/index.wxml @@ -0,0 +1,176 @@ + + + + + + + + + + + + + + + 已售{{soldNum}} + + + + + {{item.tag}} + + + + 领劵 + + + + + {{details.title}} + + + + + + + + + + {{intro}} + + + 已选 + + + {{selectedAttrStr ? buyNum : ''}}{{selectedAttrStr || '请选择'}} + + + + + + + + 商品评价 + + ({{ commentsStatistics.commentCount }}) + + + + {{commentsStatistics.goodRate}}% 好评 + + + + + + + + {{commentItem.userName}} + + + + + {{commentItem.commentContent}} + + + + + + + + 详情介绍 + + + + + + + + + + + + + + + + + + + + + diff --git a/scr/miniprogram-2/pages/goods/details/index.wxss b/scr/miniprogram-2/pages/goods/details/index.wxss new file mode 100644 index 0000000..eb74549 --- /dev/null +++ b/scr/miniprogram-2/pages/goods/details/index.wxss @@ -0,0 +1,356 @@ +@import '../../../style/global.wxss'; +page { + width: 100vw; +} + +.goods-detail-page .goods-info { + margin: 0 auto; + padding: 26rpx 0 28rpx 30rpx; + background-color: #fff; +} + +.goods-detail-page .swipe-img { + width: 100%; + height: 750rpx; +} + +.goods-detail-page .goods-info .goods-price { + display: flex; + align-items: baseline; +} + +.goods-detail-page .goods-info .goods-price-up { + color: #fa4126; + font-size: 28rpx; + position: relative; + bottom: 4rpx; + left: 8rpx; +} + +.goods-detail-page .goods-info .goods-price .class-goods-price { + font-size: 64rpx; + color: #fa4126; + font-weight: bold; + font-family: DIN Alternate; +} + +.goods-detail-page .goods-info .goods-price .class-goods-symbol { + font-size: 36rpx; + color: #fa4126; +} + +.goods-detail-page .goods-info .goods-price .class-goods-del { + position: relative; + font-weight: normal; + left: 16rpx; + bottom: 2rpx; + color: #999999; + font-size: 32rpx; +} + +.goods-detail-page .goods-info .goods-number { + display: flex; + align-items: center; + justify-content: space-between; +} + +.goods-detail-page .goods-info .goods-number .sold-num { + font-size: 24rpx; + color: #999999; + display: flex; + align-items: flex-end; + margin-right: 32rpx; +} + +.goods-detail-page .goods-info .goods-activity { + display: flex; + margin-top: 16rpx; + justify-content: space-between; +} + +.goods-detail-page .goods-info .goods-activity .tags-container { + display: flex; +} + +.goods-detail-page + .goods-info + .goods-activity + .tags-container + .goods-activity-tag { + background: #ffece9; + color: #fa4126; + font-size: 24rpx; + margin-right: 16rpx; + padding: 4rpx 8rpx; + border-radius: 4rpx; +} + +.goods-detail-page .goods-info .goods-activity .activity-show { + display: flex; + justify-content: center; + align-items: center; + color: #fa4126; + font-size: 24rpx; + padding-right: 32rpx; +} + +.goods-detail-page .goods-info .goods-activity .activity-show-text { + line-height: 42rpx; +} + +.goods-detail-page .goods-info .goods-title { + display: flex; + justify-content: space-between; + align-items: center; + margin-top: 20rpx; +} + +.goods-detail-page .goods-info .goods-title .goods-name { + width: 600rpx; + font-weight: 500; + display: -webkit-box; + -webkit-box-orient: vertical; + -webkit-line-clamp: 2; + overflow: hidden; + font-size: 32rpx; + word-break: break-all; + color: #333333; +} + +.goods-detail-page .goods-info .goods-title .goods-tag { + width: 104rpx; + margin-left: 26rpx; +} + +.goods-detail-page .goods-info .goods-title .goods-tag .shareBtn { + border-radius: 200rpx 0px 0px 200rpx; + width: 100rpx; + height: 96rpx; + border: none; + padding-right: 36rpx !important; +} + +.goods-detail-page .goods-info .goods-title .goods-tag .shareBtn::after { + border: none; +} + +.goods-detail-page .goods-info .goods-title .goods-tag .btn-icon { + font-size: 20rpx; + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; + height: 96rpx; + color: #999; +} + +.goods-detail-page .goods-info .goods-title .goods-tag .btn-icon .share-text { + line-height: 32rpx; +} + +.goods-detail-page .goods-info .goods-intro { + font-size: 26rpx; + color: #888; + line-height: 36rpx; + word-break: break-all; + padding-right: 30rpx; + display: -webkit-box; + -webkit-line-clamp: 2; + -webkit-box-orient: vertical; + white-space: normal; + overflow: hidden; +} + +.spu-select { + height: 80rpx; + background-color: #fff; + margin-top: 20rpx; + display: flex; + align-items: center; + padding: 30rpx; + font-size: 28rpx; +} + +.spu-select .label { + margin-right: 30rpx; + text-align: center; + flex-shrink: 0; + color: #999999; + font-weight: normal; +} + +.spu-select .content { + display: flex; + flex: 1; + justify-content: space-between; + align-items: center; +} + +.spu-select .content .tintColor { + color: #aaa; +} + +.goods-detail-page .desc-content { + margin-top: 20rpx; + background-color: #fff; + padding-bottom: 120rpx; +} + +.goods-detail-page .desc-content__title { + font-size: 28rpx; + line-height: 36rpx; + text-align: center; + display: flex; + justify-content: center; + align-items: center; + padding: 30rpx 20rpx; +} + +.goods-detail-page .desc-content__title .img { + width: 206rpx; + height: 10rpx; +} + +.goods-detail-page .desc-content__title--text { + font-size: 26rpx; + margin: 0 32rpx; + font-weight: 600; +} + +.goods-detail-page .desc-content__img { + width: 100%; + height: auto; +} + +.goods-bottom-operation { + position: fixed; + left: 0; + bottom: 0; + width: 100%; + background-color: #fff; + padding-bottom: env(safe-area-inset-bottom); +} + +.popup-sku-header .popup-sku-header__goods-info .popup-sku__price { + display: flex; + align-items: baseline; + color: #fa4126; + margin-top: 48rpx; +} + +.popup-sku-header + .popup-sku-header__goods-info + .popup-sku__price + .popup-sku__price-num { + font-size: 64rpx; + color: #fa4126; + font-weight: bold; + font-family: DIN Alternate; +} + +.popup-sku-header + .popup-sku-header__goods-info + .popup-sku__price + .popup-sku__price-del { + position: relative; + font-weight: normal; + left: 12rpx; + bottom: 2rpx; + color: #999999; + font-size: 32rpx; +} + +.popup-sku-header + .popup-sku-header__goods-info + .popup-sku__price + .popup-sku__price-symbol { + font-size: 36rpx; + color: #fa4126; +} + +.popup-sku-header + .popup-sku-header__goods-info + .popup-sku__price + .popup-sku__price-max-num { + font-size: 48rpx; +} + +.goods-detail-page .goods-head .t-swiper { + height: 750rpx !important; +} + +.t-toast__content { + z-index: 12000 !important; +} + +.comments-wrap { + margin-top: 20rpx; + padding: 32rpx; + background-color: #fff; +} + +.comments-wrap .comments-head { + display: flex; + flex-direction: row; + align-items: center; + justify-content: space-between; +} + +.comments-wrap .comments-head .comments-title-wrap { + display: flex; +} + +.comments-title-label, +.comments-title-count { + color: #333333; + font-size: 32rpx; + font-weight: 500; + line-height: 48rpx; +} + +.comments-rate-wrap { + display: flex; + justify-content: center; + align-items: center; + font-size: 24rpx; +} + +.comments-rate-wrap .comments-good-rate { + color: #999999; + font-size: 26rpx; + font-weight: 400; + font-style: normal; + line-height: 36rpx; +} + +.comment-item-wrap .comment-item-head { + display: flex; + flex-direction: row; + align-items: center; + margin-top: 32rpx; +} + +.comment-item-wrap .comment-item-head .comment-item-avatar { + width: 64rpx; + height: 64rpx; + border-radius: 64rpx; +} + +.comment-item-wrap .comment-item-head .comment-head-right { + margin-left: 24rpx; +} + +.comment-head-right .comment-username { + font-size: 26rpx; + color: #333333; + line-height: 36rpx; + font-weight: 400; +} + +.comment-item-wrap .comment-item-content { + margin-top: 20rpx; + color: #333333; + line-height: 40rpx; + font-size: 28rpx; + font-weight: 400; +} diff --git a/scr/miniprogram-2/pages/goods/list/index.js b/scr/miniprogram-2/pages/goods/list/index.js new file mode 100644 index 0000000..c16cd66 --- /dev/null +++ b/scr/miniprogram-2/pages/goods/list/index.js @@ -0,0 +1,226 @@ +import { fetchGoodsList } from '../../../services/good/fetchGoodsList'; +import Toast from 'tdesign-miniprogram/toast/index'; + +const initFilters = { + overall: 1, + sorts: '', + layout: 0, +}; + +Page({ + data: { + goodsList: [], + layout: 0, + sorts: '', + overall: 1, + show: false, + minVal: '', + maxVal: '', + filter: initFilters, + hasLoaded: false, + loadMoreStatus: 0, + loading: true, + }, + + pageNum: 1, + pageSize: 30, + total: 0, + + handleFilterChange(e) { + const { layout, overall, sorts } = e.detail; + this.pageNum = 1; + this.setData({ + layout, + sorts, + overall, + loadMoreStatus: 0, + }); + this.init(true); + }, + + generalQueryData(reset = false) { + const { filter, keywords, minVal, maxVal } = this.data; + const { pageNum, pageSize } = this; + const { sorts, overall } = filter; + const params = { + sort: 0, // 0 综合,1 价格 + pageNum: 1, + pageSize: 30, + keyword: keywords, + }; + + if (sorts) { + params.sort = 1; + params.sortType = sorts === 'desc' ? 1 : 0; + } + + if (overall) { + params.sort = 0; + } else { + params.sort = 1; + } + params.minPrice = minVal ? minVal * 100 : 0; + params.maxPrice = maxVal ? maxVal * 100 : undefined; + if (reset) return params; + return { + ...params, + pageNum: pageNum + 1, + pageSize, + }; + }, + + async init(reset = true) { + const { loadMoreStatus, goodsList = [] } = this.data; + const params = this.generalQueryData(reset); + if (loadMoreStatus !== 0) return; + this.setData({ + loadMoreStatus: 1, + loading: true, + }); + try { + const result = await fetchGoodsList(params); + const code = 'Success'; + const data = result; + if (code.toUpperCase() === 'SUCCESS') { + const { spuList, totalCount = 0 } = data; + if (totalCount === 0 && reset) { + this.total = totalCount; + this.setData({ + emptyInfo: { + tip: '抱歉,未找到相关商品', + }, + hasLoaded: true, + loadMoreStatus: 0, + loading: false, + goodsList: [], + }); + return; + } + + const _goodsList = reset ? spuList : goodsList.concat(spuList); + const _loadMoreStatus = _goodsList.length === totalCount ? 2 : 0; + this.pageNum = params.pageNum || 1; + this.total = totalCount; + this.setData({ + goodsList: _goodsList, + loadMoreStatus: _loadMoreStatus, + }); + } else { + this.setData({ + loading: false, + }); + wx.showToast({ + title: '查询失败,请稍候重试', + }); + } + } catch (error) { + this.setData({ + loading: false, + }); + } + this.setData({ + hasLoaded: true, + loading: false, + }); + }, + + onLoad() { + this.init(true); + }, + + onReachBottom() { + const { goodsList } = this.data; + const { total = 0 } = this; + if (goodsList.length === total) { + this.setData({ + loadMoreStatus: 2, + }); + return; + } + this.init(false); + }, + + handleAddCart() { + Toast({ + context: this, + selector: '#t-toast', + message: '点击加购', + }); + }, + + tagClickHandle() { + Toast({ + context: this, + selector: '#t-toast', + message: '点击标签', + }); + }, + + gotoGoodsDetail(e) { + const { index } = e.detail; + const { spuId } = this.data.goodsList[index]; + wx.navigateTo({ + url: `/pages/goods/details/index?spuId=${spuId}`, + }); + }, + + showFilterPopup() { + this.setData({ + show: true, + }); + }, + + showFilterPopupClose() { + this.setData({ + show: false, + }); + }, + + onMinValAction(e) { + const { value } = e.detail; + this.setData({ minVal: value }); + }, + + onMaxValAction(e) { + const { value } = e.detail; + this.setData({ maxVal: value }); + }, + + reset() { + this.setData({ minVal: '', maxVal: '' }); + }, + + confirm() { + const { minVal, maxVal } = this.data; + let message = ''; + if (minVal && !maxVal) { + message = `价格最小是${minVal}`; + } else if (!minVal && maxVal) { + message = `价格范围是0-${minVal}`; + } else if (minVal && maxVal && minVal <= maxVal) { + message = `价格范围${minVal}-${this.data.maxVal}`; + } else { + message = '请输入正确范围'; + } + if (message) { + Toast({ + context: this, + selector: '#t-toast', + message, + }); + } + this.pageNum = 1; + this.setData( + { + show: false, + minVal: '', + goodsList: [], + loadMoreStatus: 0, + maxVal: '', + }, + () => { + this.init(); + }, + ); + }, +}); diff --git a/scr/miniprogram-2/pages/goods/list/index.json b/scr/miniprogram-2/pages/goods/list/index.json new file mode 100644 index 0000000..0811511 --- /dev/null +++ b/scr/miniprogram-2/pages/goods/list/index.json @@ -0,0 +1,12 @@ +{ + "navigationBarTitleText": "商品列表", + "usingComponents": { + "t-input": "tdesign-miniprogram/input/input", + "t-empty": "tdesign-miniprogram/empty/empty", + "t-toast": "tdesign-miniprogram/toast/toast", + "goods-list": "/components/goods-list/index", + "filter": "/components/filter/index", + "filter-popup": "/components/filter-popup/index", + "load-more": "/components/load-more/index" + } +} \ No newline at end of file diff --git a/scr/miniprogram-2/pages/goods/list/index.wxml b/scr/miniprogram-2/pages/goods/list/index.wxml new file mode 100644 index 0000000..82d7bee --- /dev/null +++ b/scr/miniprogram-2/pages/goods/list/index.wxml @@ -0,0 +1,55 @@ + + + + + 价格区间 + + + - + + + + + + + + + + + + + + + diff --git a/scr/miniprogram-2/pages/goods/list/index.wxss b/scr/miniprogram-2/pages/goods/list/index.wxss new file mode 100644 index 0000000..4895167 --- /dev/null +++ b/scr/miniprogram-2/pages/goods/list/index.wxss @@ -0,0 +1,108 @@ +page { + background-color: #fff; +} + +.goods-list-container { + display: block; +} + +.goods-list-container .t-search { + padding: 0 30rpx; + background-color: #fff; +} + +.goods-list-container .t-class__input-container { + height: 64rpx !important; + border-radius: 32rpx !important; +} + +.goods-list-container .t-search__left-icon { + display: flex; + align-items: center; +} + +.goods-list-container .t-search__input { + font-size: 28rpx !important; + color: rgb(116, 116, 116) !important; +} + +.goods-list-container .category-goods-list { + background-color: #f2f2f2; + overflow-y: scroll; + -webkit-overflow-scrolling: touch; + padding: 20rpx 24rpx; + -webkit-overflow-scrolling: touch; +} + +.goods-list-container .wr-goods-list { + background: #f2f2f2 !important; +} + +.goods-list-container .t-image__mask { + display: flex !important; +} + +.goods-list-container .empty-wrap { + margin-top: 184rpx; + margin-bottom: 120rpx; + height: 300rpx; +} + +.goods-list-container .empty-wrap .empty-tips .empty-content .content-text { + margin-top: 40rpx; +} + +.goods-list-container .price-container { + padding: 32rpx; + height: 100vh; + max-width: 632rpx; + background-color: #fff; + border-radius: 30rpx 0 0 30rpx; + box-sizing: border-box; +} + +.goods-list-container .price-between { + font-size: 26rpx; + font-weight: 500; + color: rgba(51, 51, 51, 1); +} + +.goods-list-container .price-ipts-wrap { + width: 100%; + display: flex; + flex-direction: row; + justify-content: space-around; + margin-top: 24rpx; +} + +.goods-list-container .price-ipts-wrap .price-divided { + position: relative; + width: 22rpx; + margin: 0 20rpx; + color: #222427; +} + +.goods-list-container .price-ipts-wrap .price-ipt { + box-sizing: border-box; + width: 246rpx; + font-size: 24rpx; + height: 56rpx; + padding: 0 24rpx; + text-align: center; + border-radius: 8rpx; + color: #333; + background: rgba(245, 245, 245, 1); +} + +.t-class-input { + font-size: 24rpx !important; +} + +.goods-list-container .price-ipts-wrap .price-ipt::after { + border: none !important; +} + +.goods-list-container .t-input__control { + font-size: 24rpx !important; + text-align: center; +} diff --git a/scr/miniprogram-2/pages/goods/result/index.js b/scr/miniprogram-2/pages/goods/result/index.js new file mode 100644 index 0000000..47ce19d --- /dev/null +++ b/scr/miniprogram-2/pages/goods/result/index.js @@ -0,0 +1,262 @@ +/* eslint-disable no-param-reassign */ +import { getSearchResult } from '../../../services/good/featchSearchResult'; +import Toast from 'tdesign-miniprogram/toast/index'; + +const initFilters = { + overall: 1, + sorts: '', +}; + +Page({ + data: { + goodsList: [], + sorts: '', + overall: 1, + show: false, + minVal: '', + maxVal: '', + minSalePriceFocus: false, + maxSalePriceFocus: false, + filter: initFilters, + hasLoaded: false, + keywords: '', + loadMoreStatus: 0, + loading: true, + }, + + total: 0, + pageNum: 1, + pageSize: 30, + + onLoad(options) { + const { searchValue = '' } = options || {}; + this.setData( + { + keywords: searchValue, + }, + () => { + this.init(true); + }, + ); + }, + + generalQueryData(reset = false) { + const { filter, keywords, minVal, maxVal } = this.data; + const { pageNum, pageSize } = this; + const { sorts, overall } = filter; + const params = { + sort: 0, // 0 综合,1 价格 + pageNum: 1, + pageSize: 30, + keyword: keywords, + }; + + if (sorts) { + params.sort = 1; + params.sortType = sorts === 'desc' ? 1 : 0; + } + if (overall) { + params.sort = 0; + } else { + params.sort = 1; + } + params.minPrice = minVal ? minVal * 100 : 0; + params.maxPrice = maxVal ? maxVal * 100 : undefined; + if (reset) return params; + return { + ...params, + pageNum: pageNum + 1, + pageSize, + }; + }, + + async init(reset = true) { + const { loadMoreStatus, goodsList = [] } = this.data; + const params = this.generalQueryData(reset); + if (loadMoreStatus !== 0) return; + this.setData({ + loadMoreStatus: 1, + loading: true, + }); + try { + const result = await getSearchResult(params); + const code = 'Success'; + const data = result; + if (code.toUpperCase() === 'SUCCESS') { + const { spuList, totalCount = 0 } = data; + if (totalCount === 0 && reset) { + this.total = totalCount; + this.setData({ + emptyInfo: { + tip: '抱歉,未找到相关商品', + }, + hasLoaded: true, + loadMoreStatus: 0, + loading: false, + goodsList: [], + }); + return; + } + + const _goodsList = reset ? spuList : goodsList.concat(spuList); + _goodsList.forEach((v) => { + v.tags = v.spuTagList.map((u) => u.title); + v.hideKey = { desc: true }; + }); + const _loadMoreStatus = _goodsList.length === totalCount ? 2 : 0; + this.pageNum = params.pageNum || 1; + this.total = totalCount; + this.setData({ + goodsList: _goodsList, + loadMoreStatus: _loadMoreStatus, + }); + } else { + this.setData({ + loading: false, + }); + wx.showToast({ + title: '查询失败,请稍候重试', + }); + } + } catch (error) { + this.setData({ + loading: false, + }); + } + this.setData({ + hasLoaded: true, + loading: false, + }); + }, + + handleCartTap() { + wx.switchTab({ + url: '/pages/cart/index', + }); + }, + + handleSubmit() { + this.setData( + { + goodsList: [], + loadMoreStatus: 0, + }, + () => { + this.init(true); + }, + ); + }, + + onReachBottom() { + const { goodsList } = this.data; + const { total = 0 } = this; + if (goodsList.length === total) { + this.setData({ + loadMoreStatus: 2, + }); + return; + } + this.init(false); + }, + + handleAddCart() { + Toast({ + context: this, + selector: '#t-toast', + message: '点击加购', + }); + }, + + gotoGoodsDetail(e) { + const { index } = e.detail; + const { spuId } = this.data.goodsList[index]; + wx.navigateTo({ + url: `/pages/goods/details/index?spuId=${spuId}`, + }); + }, + + handleFilterChange(e) { + const { overall, sorts } = e.detail; + const { total } = this; + const _filter = { + sorts, + overall, + }; + this.setData({ + filter: _filter, + sorts, + overall, + }); + + this.pageNum = 1; + this.setData( + { + goodsList: [], + loadMoreStatus: 0, + }, + () => { + total && this.init(true); + }, + ); + }, + + showFilterPopup() { + this.setData({ + show: true, + }); + }, + + showFilterPopupClose() { + this.setData({ + show: false, + }); + }, + + onMinValAction(e) { + const { value } = e.detail; + this.setData({ minVal: value }); + }, + + onMaxValAction(e) { + const { value } = e.detail; + this.setData({ maxVal: value }); + }, + + reset() { + this.setData({ minVal: '', maxVal: '' }); + }, + + confirm() { + const { minVal, maxVal } = this.data; + let message = ''; + if (minVal && !maxVal) { + message = `价格最小是${minVal}`; + } else if (!minVal && maxVal) { + message = `价格范围是0-${minVal}`; + } else if (minVal && maxVal && minVal <= maxVal) { + message = `价格范围${minVal}-${this.data.maxVal}`; + } else { + message = '请输入正确范围'; + } + if (message) { + Toast({ + context: this, + selector: '#t-toast', + message, + }); + } + this.pageNum = 1; + this.setData( + { + show: false, + minVal: '', + goodsList: [], + loadMoreStatus: 0, + maxVal: '', + }, + () => { + this.init(); + }, + ); + }, +}); diff --git a/scr/miniprogram-2/pages/goods/result/index.json b/scr/miniprogram-2/pages/goods/result/index.json new file mode 100644 index 0000000..130b48d --- /dev/null +++ b/scr/miniprogram-2/pages/goods/result/index.json @@ -0,0 +1,15 @@ +{ + "navigationBarTitleText": "搜索", + "usingComponents": { + "t-search": "tdesign-miniprogram/search/search", + "t-input": "tdesign-miniprogram/input/input", + "t-empty": "tdesign-miniprogram/empty/empty", + "t-toast": "tdesign-miniprogram/toast/toast", + "goods-list": "/components/goods-list/index", + "filter": "/components/filter/index", + "filter-popup": "/components/filter-popup/index", + "load-more": "/components/load-more/index", + "t-icon": "tdesign-miniprogram/icon/icon" + }, + "onReachBottomDistance": 50 +} \ No newline at end of file diff --git a/scr/miniprogram-2/pages/goods/result/index.wxml b/scr/miniprogram-2/pages/goods/result/index.wxml new file mode 100644 index 0000000..30591d7 --- /dev/null +++ b/scr/miniprogram-2/pages/goods/result/index.wxml @@ -0,0 +1,81 @@ + + + + + + + + + 价格区间 + + + - + + + + + + + + + + + + + + + diff --git a/scr/miniprogram-2/pages/goods/result/index.wxss b/scr/miniprogram-2/pages/goods/result/index.wxss new file mode 100644 index 0000000..804ec53 --- /dev/null +++ b/scr/miniprogram-2/pages/goods/result/index.wxss @@ -0,0 +1,110 @@ +page { + background-color: #fff; +} + +page view { + box-sizing: border-box; +} + +.result-container { + display: block; +} + +.result-container .t-search { + padding: 0 30rpx; + background-color: #fff; +} + +.result-container .t-class__input-container { + height: 64rpx !important; + border-radius: 32rpx !important; +} + +.result-container .t-search__left-icon { + display: flex; + align-items: center; +} + +.result-container .t-search__input { + font-size: 28rpx !important; + color: #333 !important; +} + +.result-container .category-goods-list { + background-color: #f2f2f2; + overflow-y: scroll; + padding: 20rpx 24rpx; + -webkit-overflow-scrolling: touch; +} + +.result-container .wr-goods-list { + background: #f2f2f2 !important; +} + +.result-container .t-image__mask { + display: flex !important; +} + +.result-container .empty-wrap { + margin-top: 184rpx; + margin-bottom: 120rpx; + height: 300rpx; +} + +.result-container .empty-wrap .empty-tips .empty-content .content-text { + margin-top: 40rpx; +} + +.result-container .price-container { + padding: 32rpx; + height: 100vh; + max-width: 632rpx; + background-color: #fff; + border-radius: 30rpx 0 0 30rpx; +} + +.result-container .price-between { + font-size: 26rpx; + font-weight: 500; + color: rgba(51, 51, 51, 1); +} + +.result-container .price-ipts-wrap { + width: 100%; + display: flex; + flex-direction: row; + justify-content: space-around; + margin-top: 24rpx; +} + +.result-container .price-ipts-wrap .price-divided { + position: relative; + width: 22rpx; + margin: 0 20rpx; + color: #222427; +} + +.result-container .price-ipts-wrap .price-ipt { + box-sizing: border-box; + width: 246rpx; + font-size: 24rpx; + height: 56rpx; + padding: 0 24rpx; + text-align: center; + border-radius: 8rpx; + color: #333; + background: rgba(245, 245, 245, 1); +} + +.t-class-input { + font-size: 24rpx !important; +} + +.result-container .price-ipts-wrap .price-ipt::after { + border: none !important; +} + +.result-container .t-input__control { + font-size: 24rpx !important; + text-align: center; +} diff --git a/scr/miniprogram-2/pages/goods/search/index.js b/scr/miniprogram-2/pages/goods/search/index.js new file mode 100644 index 0000000..c726041 --- /dev/null +++ b/scr/miniprogram-2/pages/goods/search/index.js @@ -0,0 +1,119 @@ +import { + getSearchHistory, + getSearchPopular, +} from '../../../services/good/fetchSearchHistory'; + +Page({ + data: { + historyWords: [], + popularWords: [], + searchValue: '', + dialog: { + title: '确认删除当前历史记录', + showCancelButton: true, + message: '', + }, + dialogShow: false, + }, + + deleteType: 0, + deleteIndex: '', + + onShow() { + this.queryHistory(); + this.queryPopular(); + }, + + async queryHistory() { + try { + const data = await getSearchHistory(); + const code = 'Success'; + if (String(code).toUpperCase() === 'SUCCESS') { + const { historyWords = [] } = data; + this.setData({ + historyWords, + }); + } + } catch (error) { + console.error(error); + } + }, + + async queryPopular() { + try { + const data = await getSearchPopular(); + const code = 'Success'; + if (String(code).toUpperCase() === 'SUCCESS') { + const { popularWords = [] } = data; + this.setData({ + popularWords, + }); + } + } catch (error) { + console.error(error); + } + }, + + confirm() { + const { historyWords } = this.data; + const { deleteType, deleteIndex } = this; + historyWords.splice(deleteIndex, 1); + if (deleteType === 0) { + this.setData({ + historyWords, + dialogShow: false, + }); + } else { + this.setData({ historyWords: [], dialogShow: false }); + } + }, + + close() { + this.setData({ dialogShow: false }); + }, + + handleClearHistory() { + const { dialog } = this.data; + this.deleteType = 1; + this.setData({ + dialog: { + ...dialog, + message: '确认删除所有历史记录', + }, + dialogShow: true, + }); + }, + + deleteCurr(e) { + const { index } = e.currentTarget.dataset; + const { dialog } = this.data; + this.deleteIndex = index; + this.setData({ + dialog: { + ...dialog, + message: '确认删除当前历史记录', + deleteType: 0, + }, + dialogShow: true, + }); + }, + + handleHistoryTap(e) { + const { historyWords } = this.data; + const { dataset } = e.currentTarget; + const _searchValue = historyWords[dataset.index || 0] || ''; + if (_searchValue) { + wx.navigateTo({ + url: `/pages/goods/result/index?searchValue=${_searchValue}`, + }); + } + }, + + handleSubmit(e) { + const { value } = e.detail.value; + if (value.length === 0) return; + wx.navigateTo({ + url: `/pages/goods/result/index?searchValue=${value}`, + }); + }, +}); diff --git a/scr/miniprogram-2/pages/goods/search/index.json b/scr/miniprogram-2/pages/goods/search/index.json new file mode 100644 index 0000000..74abdf7 --- /dev/null +++ b/scr/miniprogram-2/pages/goods/search/index.json @@ -0,0 +1,8 @@ +{ + "navigationBarTitleText": "搜索", + "usingComponents": { + "t-search": "tdesign-miniprogram/search/search", + "t-icon": "tdesign-miniprogram/icon/icon", + "t-dialog": "tdesign-miniprogram/dialog/dialog" + } +} diff --git a/scr/miniprogram-2/pages/goods/search/index.wxml b/scr/miniprogram-2/pages/goods/search/index.wxml new file mode 100644 index 0000000..743f83c --- /dev/null +++ b/scr/miniprogram-2/pages/goods/search/index.wxml @@ -0,0 +1,75 @@ + + + + + + + + + 历史搜索 + 清除 + + + + {{item}} + + + + + + 热门搜索 + + + + {{item}} + + + + + + + diff --git a/scr/miniprogram-2/pages/goods/search/index.wxss b/scr/miniprogram-2/pages/goods/search/index.wxss new file mode 100644 index 0000000..676603e --- /dev/null +++ b/scr/miniprogram-2/pages/goods/search/index.wxss @@ -0,0 +1,79 @@ +.search-page { + box-sizing: border-box; + width: 100vw; + height: 100vh; + padding: 0 30rpx; +} + +.search-page .t-class__input-container { + height: 64rpx !important; + border-radius: 32rpx !important; +} + +.search-page .t-search__input { + font-size: 28rpx !important; + color: #333 !important; +} + +.search-page .search-wrap { + margin-top: 44rpx; +} + +.search-page .history-wrap { + margin-bottom: 20px; +} + +.search-page .search-header { + display: flex; + flex-flow: row nowrap; + justify-content: space-between; + align-items: center; +} + +.search-page .search-title { + font-size: 30rpx; + font-family: PingFangSC-Semibold, PingFang SC; + font-weight: 600; + color: rgba(51, 51, 51, 1); + line-height: 42rpx; +} + +.search-page .search-clear { + font-size: 24rpx; + font-family: PingFang SC; + line-height: 32rpx; + color: #999999; + font-weight: normal; +} + +.search-page .search-content { + overflow: hidden; + display: flex; + flex-flow: row wrap; + justify-content: flex-start; + align-items: flex-start; + margin-top: 24rpx; +} + +.search-page .search-item { + color: #333333; + font-size: 24rpx; + line-height: 32rpx; + font-weight: normal; + margin-right: 24rpx; + margin-bottom: 24rpx; + background: #f5f5f5; + border-radius: 38rpx; + padding: 12rpx 24rpx; +} + +.search-page .hover-history-item { + position: relative; + top: 3rpx; + left: 3rpx; + box-shadow: 0px 0px 8px rgba(0, 0, 0, 0.1) inset; +} + +.add-notes__confirm { + color: #fa4126 !important; +} diff --git a/scr/miniprogram-2/pages/home/home.js b/scr/miniprogram-2/pages/home/home.js new file mode 100644 index 0000000..9538e47 --- /dev/null +++ b/scr/miniprogram-2/pages/home/home.js @@ -0,0 +1,155 @@ +import { + fetchHome +} from '../../services/home/home'; +import { + fetchGoodsList +} from '../../services/good/fetchGoods'; +import Toast from 'tdesign-miniprogram/toast/index'; + +Page({ + data: { + imgSrcs: [], + tabList: [], + goodsList: [], + goodsListLoadStatus: 0, + pageLoading: false, + current: 1, + autoplay: true, + duration: 500, + interval: 5000, + navigation: { + type: 'dots' + }, + + }, + + goodListPagination: { + index: 0, + num: 20, + }, + + privateData: { + tabIndex: 0, + }, + + onShow() { + this.getTabBar().init(); + }, + + onLoad() { + this.init(); + }, + + onReachBottom() { + if (this.data.goodsListLoadStatus === 0) { + this.loadGoodsList(); + } + }, + + onPullDownRefresh() { + this.init(); + }, + + init() { + this.loadHomePage(); + }, + + loadHomePage() { + wx.stopPullDownRefresh(); + + this.setData({ + pageLoading: true, + }); + fetchHome().then(({ + swiper, + tabList + }) => { + this.setData({ + tabList, + imgSrcs: swiper, + pageLoading: false, + }); + this.loadGoodsList(true); + }); + }, + + tabChangeHandle(e) { + this.privateData.tabIndex = e.detail; + this.loadGoodsList(true); + }, + + onReTry() { + this.loadGoodsList(); + }, + + async loadGoodsList(fresh = false) { + if (fresh) { + wx.pageScrollTo({ + scrollTop: 0, + }); + } + + this.setData({ + goodsListLoadStatus: 1 + }); + + const pageSize = this.goodListPagination.num; + let pageIndex = + this.privateData.tabIndex * pageSize + this.goodListPagination.index + 1; + if (fresh) { + pageIndex = 0; + } + + try { + const nextList = await fetchGoodsList(pageIndex, pageSize); + this.setData({ + goodsList: fresh ? nextList : this.data.goodsList.concat(nextList), + goodsListLoadStatus: 0, + }); + + this.goodListPagination.index = pageIndex; + this.goodListPagination.num = pageSize; + } catch (err) { + this.setData({ + goodsListLoadStatus: 3 + }); + } + }, + + goodListClickHandle(e) { + const { + index + } = e.detail; + const { + spuId + } = this.data.goodsList[index]; + wx.navigateTo({ + url: `/pages/goods/details/index?spuId=${spuId}`, + }); + }, + + goodListAddCartHandle() { + Toast({ + context: this, + selector: '#t-toast', + message: '点击加入购物车', + }); + }, + + navToSearchPage() { + wx.navigateTo({ + url: '/pages/goods/search/index' + }); + }, + + navToActivityDetail({ + detail + }) { + const { + index: promotionID = 0 + } = detail || {}; + wx.navigateTo({ + url: `/pages/promotion-detail/index?promotion_id=${promotionID}`, + }); + }, +}); \ No newline at end of file diff --git a/scr/miniprogram-2/pages/home/home.json b/scr/miniprogram-2/pages/home/home.json new file mode 100644 index 0000000..048bbba --- /dev/null +++ b/scr/miniprogram-2/pages/home/home.json @@ -0,0 +1,20 @@ +{ + "navigationBarTitleText": "首页", + "onReachBottomDistance": 10, + "backgroundTextStyle": "light", + "enablePullDownRefresh": true, + "usingComponents": { + "t-search": "tdesign-miniprogram/search/search", + "t-loading": "tdesign-miniprogram/loading/loading", + "t-swiper": "tdesign-miniprogram/swiper/swiper", + "t-swiper-item": "tdesign-miniprogram/swiper/swiper-item", + "t-swiper-nav": "tdesign-miniprogram/swiper/swiper-nav", + "t-image": "/components/webp-image/index", + "t-icon": "tdesign-miniprogram/icon/icon", + "t-toast": "tdesign-miniprogram/toast/toast", + "t-tabs": "tdesign-miniprogram/tabs/tabs", + "t-tab-panel": "tdesign-miniprogram/tabs/tab-panel", + "goods-list": "/components/goods-list/index", + "load-more": "/components/load-more/index" + } +} \ No newline at end of file diff --git a/scr/miniprogram-2/pages/home/home.wxml b/scr/miniprogram-2/pages/home/home.wxml new file mode 100644 index 0000000..c7ce74b --- /dev/null +++ b/scr/miniprogram-2/pages/home/home.wxml @@ -0,0 +1,41 @@ + + + 加载中... + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/scr/miniprogram-2/pages/home/home.wxss b/scr/miniprogram-2/pages/home/home.wxss new file mode 100644 index 0000000..3d512ec --- /dev/null +++ b/scr/miniprogram-2/pages/home/home.wxss @@ -0,0 +1,127 @@ +page { + box-sizing: border-box; + padding-bottom: calc(env(safe-area-inset-bottom) + 96rpx); +} + +.t-tabs.t-tabs--top .t-tabs__scroll { + border-bottom: none !important; +} + +.home-page-header { + background: linear-gradient(#fff, #f5f5f5); +} + +.home-page-container { + background: #f5f5f5; +} + +.home-page-container, +.home-page-header { + display: block; + padding: 0 24rpx; +} + +.home-page-header .t-search__input-container { + border-radius: 32rpx !important; + height: 64rpx !important; +} + +.home-page-header .t-search__input { + font-size: 28rpx !important; + color: rgb(116, 116, 116) !important; +} + +.home-page-header .swiper-wrap { + margin-top: 20rpx; +} + +.home-page-header .t-image__swiper { + width: 100%; + height: 300rpx; + border-radius: 10rpx; +} + +.home-page-container .t-tabs { + background: #f5f5f5; +} + +.home-page-container .t-tabs .t-tabs-nav { + background-color: transparent; + line-height: 80rpx; + font-size: 28rpx; + color: #333; +} + +.home-page-container .t-tabs .t-tabs-scroll { + border: none !important; +} + +/* 半个字 */ +.home-page-container .tab.order-nav .order-nav-item.scroll-width { + min-width: 165rpx; +} + +.home-page-container .tab .order-nav-item.active { + color: #fa550f !important; +} + +.home-page-container .tab .bottom-line { + border-radius: 4rpx; +} + +.home-page-container .tab .order-nav-item.active .bottom-line { + background-color: #fa550f !important; +} + +.home-page-container .tabs-external__item { + color: #666 !important; + font-size: 28rpx; +} + +.home-page-container .tabs-external__active { + color: #333333 !important; + font-size: 32rpx; +} + +.home-page-container .tabs-external__track { + background-color: #fa4126 !important; + height: 6rpx !important; + border-radius: 4rpx !important; + width: 48rpx !important; +} + +.t-tabs.t-tabs--top .t-tabs__item, +.t-tabs.t-tabs--bottom .t-tabs__item { + height: 86rpx !important; +} + +.home-page-container .goods-list-container { + background: #f5f5f5 !important; + margin-top: 24rpx; +} + +.t-class-indicator, +.loading-text { + color: #b9b9b9 !important; +} + +.imagesize { + display: flex; + justify-content: center; + align-items: center; + width: 650rpx; + margin-left: 50rpx; + margin-right: 50rpx; + +} + +.imagesize select { + + height: 50rpx; + width: 350rpx; +} + +.imagesize select2 { + height: 180rpx; + width: 350rpx; +} \ No newline at end of file diff --git a/scr/miniprogram-2/pages/home/readme b/scr/miniprogram-2/pages/home/readme new file mode 100644 index 0000000..fcf75d5 --- /dev/null +++ b/scr/miniprogram-2/pages/home/readme @@ -0,0 +1,8 @@ +首页功能设定 +1. loading入场 +2. 下拉刷新 +3. 搜索栏 +4. 分类切换 +5. 商品列表 +6. 规格弹层 +7. 加载更多 \ No newline at end of file diff --git a/scr/miniprogram-2/pages/order/after-service-detail/api.js b/scr/miniprogram-2/pages/order/after-service-detail/api.js new file mode 100644 index 0000000..22d62fe --- /dev/null +++ b/scr/miniprogram-2/pages/order/after-service-detail/api.js @@ -0,0 +1,34 @@ +import { resp } from '../after-service-list/api'; +import dayjs from 'dayjs'; +import { mockIp, mockReqId } from '../../../utils/mock'; + +export const formatTime = (date, template) => dayjs(date).format(template); + +export function getRightsDetail({ rightsNo }) { + const _resq = { + data: {}, + code: 'Success', + msg: null, + requestId: mockReqId(), + clientIp: mockIp(), + rt: 79, + success: true, + }; + _resq.data = + resp.data.dataList.filter((item) => item.rights.rightsNo === rightsNo) || + {}; + return Promise.resolve(_resq); +} + +export function cancelRights() { + const _resq = { + data: {}, + code: 'Success', + msg: null, + requestId: mockReqId(), + clientIp: mockIp(), + rt: 79, + success: true, + }; + return Promise.resolve(_resq); +} diff --git a/scr/miniprogram-2/pages/order/after-service-detail/index.js b/scr/miniprogram-2/pages/order/after-service-detail/index.js new file mode 100644 index 0000000..0093961 --- /dev/null +++ b/scr/miniprogram-2/pages/order/after-service-detail/index.js @@ -0,0 +1,209 @@ +import Toast from 'tdesign-miniprogram/toast/index'; +import { ServiceType, ServiceTypeDesc, ServiceStatus } from '../config'; +import { formatTime, getRightsDetail } from './api'; + +const TitleConfig = { + [ServiceType.ORDER_CANCEL]: '退款详情', + [ServiceType.ONLY_REFUND]: '退款详情', + [ServiceType.RETURN_GOODS]: '退货退款详情', +}; + +Page({ + data: { + pageLoading: true, + serviceRaw: {}, + service: {}, + deliveryButton: {}, + gallery: { + current: 0, + show: false, + proofs: [], + }, + showProofs: false, + backRefresh: false, + }, + + onLoad(query) { + this.rightsNo = query.rightsNo; + this.inputDialog = this.selectComponent('#input-dialog'); + this.init(); + }, + + onShow() { + // 当从其他页面返回,并且 backRefresh 被置为 true 时,刷新数据 + if (!this.data.backRefresh) return; + this.init(); + this.setData({ backRefresh: false }); + }, + + // 页面刷新,展示下拉刷新 + onPullDownRefresh_(e) { + const { callback } = e.detail; + return this.getService().then(() => callback && callback()); + }, + + init() { + this.setData({ pageLoading: true }); + this.getService().then(() => { + this.setData({ pageLoading: false }); + }); + }, + + getService() { + const params = { rightsNo: this.rightsNo }; + return getRightsDetail(params).then((res) => { + const serviceRaw = res.data[0]; + // 滤掉填写运单号、修改运单号按钮,这两个按钮特殊处理,不在底部按钮栏展示 + if (!serviceRaw.buttonVOs) serviceRaw.buttonVOs = []; + const deliveryButton = {}; + const service = { + id: serviceRaw.rights.rightsNo, + serviceNo: serviceRaw.rights.rightsNo, + storeName: serviceRaw.rights.storeName, + type: serviceRaw.rights.rightsType, + typeDesc: ServiceTypeDesc[serviceRaw.rights.rightsType], + status: serviceRaw.rights.rightsStatus, + statusIcon: this.genStatusIcon(serviceRaw.rights), + statusName: serviceRaw.rights.userRightsStatusName, + statusDesc: serviceRaw.rights.userRightsStatusDesc, + amount: serviceRaw.rights.refundRequestAmount, + goodsList: (serviceRaw.rightsItem || []).map((item, i) => ({ + id: i, + thumb: item.goodsPictureUrl, + title: item.goodsName, + specs: (item.specInfo || []).map((s) => s.specValues || ''), + itemRefundAmount: item.itemRefundAmount, + rightsQuantity: item.rightsQuantity, + })), + orderNo: serviceRaw.rights.orderNo, // 订单编号 + rightsNo: serviceRaw.rights.rightsNo, // 售后服务单号 + rightsReasonDesc: serviceRaw.rights.rightsReasonDesc, // 申请售后原因 + isRefunded: + serviceRaw.rights.userRightsStatus === ServiceStatus.REFUNDED, // 是否已退款 + refundMethodList: (serviceRaw.refundMethodList || []).map((m) => ({ + name: m.refundMethodName, + amount: m.refundMethodAmount, + })), // 退款明细 + refundRequestAmount: serviceRaw.rights.refundRequestAmount, // 申请退款金额 + payTraceNo: serviceRaw.rightsRefund.traceNo, // 交易流水号 + createTime: formatTime( + parseFloat(`${serviceRaw.rights.createTime}`), + 'YYYY-MM-DD HH:mm', + ), // 申请时间 + logisticsNo: serviceRaw.logisticsVO.logisticsNo, // 退货物流单号 + logisticsCompanyName: serviceRaw.logisticsVO.logisticsCompanyName, // 退货物流公司 + logisticsCompanyCode: serviceRaw.logisticsVO.logisticsCompanyCode, // 退货物流公司 + remark: serviceRaw.logisticsVO.remark, // 退货备注 + receiverName: serviceRaw.logisticsVO.receiverName, // 收货人 + receiverPhone: serviceRaw.logisticsVO.receiverPhone, // 收货人电话 + receiverAddress: this.composeAddress(serviceRaw), // 收货人地址 + applyRemark: serviceRaw.rightsRefund.refundDesc, // 申请退款时的填写的说明 + buttons: serviceRaw.buttonVOs || [], + logistics: serviceRaw.logisticsVO, + }; + const proofs = serviceRaw.rights.rightsImageUrls || []; + this.setData({ + serviceRaw, + service, + deliveryButton, + 'gallery.proofs': proofs, + showProofs: + serviceRaw.rights.userRightsStatus === ServiceStatus.PENDING_VERIFY && + (service.applyRemark || proofs.length > 0), + }); + wx.setNavigationBarTitle({ + title: TitleConfig[service.type], + }); + }); + }, + + composeAddress(service) { + return [ + service.logisticsVO.receiverProvince, + service.logisticsVO.receiverCity, + service.logisticsVO.receiverCountry, + service.logisticsVO.receiverArea, + service.logisticsVO.receiverAddress, + ] + .filter((item) => !!item) + .join(' '); + }, + + onRefresh() { + this.init(); + }, + + editLogistices() { + this.setData({ + inputDialogVisible: true, + }); + this.inputDialog.setData({ + cancelBtn: '取消', + confirmBtn: '确定', + }); + this.inputDialog._onComfirm = () => { + Toast({ + message: '确定填写物流单号', + }); + }; + }, + + onProofTap(e) { + if (this.data.gallery.show) { + this.setData({ + 'gallery.show': false, + }); + return; + } + const { index } = e.currentTarget.dataset; + this.setData({ + 'gallery.show': true, + 'gallery.current': index, + }); + }, + + onGoodsCardTap(e) { + const { index } = e.currentTarget.dataset; + const goods = this.data.serviceRaw.rightsItem[index]; + wx.navigateTo({ url: `/pages/goods/details/index?skuId=${goods.skuId}` }); + }, + + onServiceNoCopy() { + wx.setClipboardData({ + data: this.data.service.serviceNo, + }); + }, + + onAddressCopy() { + wx.setClipboardData({ + data: `${this.data.service.receiverName} ${this.data.service.receiverPhone}\n${this.data.service.receiverAddress}`, + }); + }, + + /** 获取状态ICON */ + genStatusIcon(item) { + const { userRightsStatus, afterSaleRequireType } = item; + switch (userRightsStatus) { + // 退款成功 + case ServiceStatus.REFUNDED: { + return 'succeed'; + } + // 已取消、已关闭 + case ServiceStatus.CLOSED: { + return 'indent_close'; + } + default: { + switch (afterSaleRequireType) { + case 'REFUND_MONEY': { + return 'goods_refund'; + } + case 'REFUND_GOODS_MONEY': + return 'goods_return'; + default: { + return 'goods_return'; + } + } + } + } + }, +}); diff --git a/scr/miniprogram-2/pages/order/after-service-detail/index.json b/scr/miniprogram-2/pages/order/after-service-detail/index.json new file mode 100644 index 0000000..dc4df43 --- /dev/null +++ b/scr/miniprogram-2/pages/order/after-service-detail/index.json @@ -0,0 +1,20 @@ +{ + "navigationBarTitleText": "", + "usingComponents": { + "wr-loading-content": "/components/loading-content/index", + "wr-price": "/components/price/index", + "wr-service-goods-card": "../components/order-goods-card/index", + "t-cell": "tdesign-miniprogram/cell/cell", + "t-icon": "tdesign-miniprogram/icon/icon", + "t-cell-group": "tdesign-miniprogram/cell-group/cell-group", + "t-pull-down-refresh": "tdesign-miniprogram/pull-down-refresh/pull-down-refresh", + "t-grid": "tdesign-miniprogram/grid/grid", + "t-grid-item": "tdesign-miniprogram/grid/grid-item", + "t-toast": "tdesign-miniprogram/toast/toast", + "t-dialog": "tdesign-miniprogram/dialog/dialog", + "t-input": "tdesign-miniprogram/input/input", + "t-swiper": "tdesign-miniprogram/swiper/swiper", + "wr-after-service-button-bar": "../components/after-service-button-bar/index", + "t-image": "/components/webp-image/index" + } +} \ No newline at end of file diff --git a/scr/miniprogram-2/pages/order/after-service-detail/index.wxml b/scr/miniprogram-2/pages/order/after-service-detail/index.wxml new file mode 100644 index 0000000..dff24db --- /dev/null +++ b/scr/miniprogram-2/pages/order/after-service-detail/index.wxml @@ -0,0 +1,223 @@ + + + + + + + + + + {{service.statusName}} + + + {{service.statusDesc}} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 复制 + + + + {{service.receiverAddress}} + + 收货人:{{service.receiverName}} + 收货人手机:{{service.receiverName}} + + + + + + + + + + + x {{goods.rightsQuantity}} + + + + + + + + + 复制 + + + + + + + + + + + + + + + + + + + + + + + + 物流单号 + + {{amountTip}} + + + + diff --git a/scr/miniprogram-2/pages/order/after-service-detail/index.wxss b/scr/miniprogram-2/pages/order/after-service-detail/index.wxss new file mode 100644 index 0000000..e604dd6 --- /dev/null +++ b/scr/miniprogram-2/pages/order/after-service-detail/index.wxss @@ -0,0 +1,443 @@ +:host { + background-color: #f5f5f5; +} + +.service-detail { + position: relative; +} + +.service-detail wr-service-goods-card .wr-goods-card__body { + margin-left: 50rpx; +} + +.order-goods-card-footer { + display: flex; + width: calc(100% - 190rpx); + justify-content: space-between; + position: absolute; + bottom: 20rpx; + left: 190rpx; +} + +.order-goods-card-footer-num { + color: #999; + line-height: 40rpx; +} + +.service-detail .order-goods-card-footer .order-goods-card-footer-price-class { + font-size: 36rpx; + color: #333; + font-family: DIN Alternate; +} + +.service-detail + .order-goods-card-footer + .order-goods-card-footer-price-decimal { + font-size: 28rpx; + color: #333; + font-family: DIN Alternate; +} + +.service-detail .order-goods-card-footer .order-goods-card-footer-price-symbol { + color: #333; + font-size: 24rpx; + font-family: DIN Alternate; +} + +.service-detail .service-detail__header { + padding: 60rpx 0 48rpx 40rpx; + box-sizing: border-box; + height: 220rpx; + background-color: #fff; +} +.service-detail .service-detail__header .title, +.service-detail .service-detail__header .desc { + overflow: hidden; + display: -webkit-box; + -webkit-box-orient: vertical; +} + +.service-detail .service-detail__header .title { + -webkit-line-clamp: 1; + font-size: 48rpx; + font-weight: bold; + color: #333; + display: flex; +} + +.service-detail .service-detail__header .desc { + -webkit-line-clamp: 2; + margin-top: 10rpx; + font-size: 28rpx; + color: #999; +} + +.service-detail .service-detail__header .desc .count-down { + color: #fff185; + display: inline; +} + +.service-detail .service-section { + margin: 20rpx 0 20rpx 0; + padding: 30rpx 32rpx; + width: auto; + border-radius: 8rpx; + background-color: white; + overflow: hidden; +} +.service-section__pay { + margin: 0 0 20rpx 0; + width: auto; + border-radius: 8rpx; + background-color: white; + overflow: hidden; +} +.service-detail .service-section__title { + color: #333333; + margin-bottom: 10rpx; + height: 200rpx; + position: relative; +} +.service-detail .service-section__title .icon { + margin-right: 16rpx; + font-size: 40rpx !important; +} +.service-detail .service-section__title .right { + flex: none; + font-weight: normal; + font-size: 26rpx; +} +.service-detail .section-content { + margin: 16rpx 0 0 52rpx; +} + +.service-detail .main { + font-size: 28rpx; + color: #222427; + font-weight: bold; +} + +.service-detail .main .phone-num { + margin-left: 16rpx; + display: inline; +} +.service-detail .label { + color: #999999; + font-size: 26rpx; +} + +.service-detail .custom-remark { + font-size: 26rpx; + line-height: 36rpx; + color: #333333; + word-wrap: break-word; +} +.service-detail .proofs { + margin-top: 20rpx; +} + +.service-detail .proofs .proof { + width: 100%; + height: 100%; + background-color: #f9f9f9; +} + +.service-detail .pay-result .t-cell-title, +.service-detail .pay-result .t-cell-value { + color: #666666; + font-size: 28rpx; +} + +.t-class-wrapper { + padding: 10rpx 24rpx !important; +} + +.t-class-wrapper-first-child { + padding: 24rpx !important; +} + +.service-detail .pay-result .wr-cell__value { + font-weight: bold; +} +.service-detail .right { + font-size: 36rpx; + color: #fa550f; + font-weight: bold; +} + +.service-detail .title { + font-weight: bold; +} + +.service-detail .pay-result .service-section__title .right.integer { + font-size: 48rpx; +} +.service-detail .pay-result .split-line { + position: relative; +} + +.service-detail .pay-result .split-line::after { + position: absolute; + display: block; + content: ' '; + height: 1px; + left: -50%; + right: -50%; + transform: scale(0.5); + background-color: #e6e6e6; +} + +.service-detail .pay-result .section-content { + margin-left: 0; +} + +.service-detail .pay-result .section-content .label { + color: #999999; + font-size: 24rpx; +} + +.service-detail .pay-result .wr-cell::after { + left: 0; +} + +.service-detail .footer-bar-wrapper { + height: 100rpx; +} + +.service-detail .footer-bar-wrapper .footer-bar { + position: fixed; + left: 0; + bottom: 0; + height: 100rpx; + width: 100vw; + box-sizing: border-box; + padding: 0 20rpx; + background-color: white; + display: flex; + justify-content: space-between; + align-items: center; +} + +.service-detail .text-btn { + display: inline; + color: #333; + border: 2rpx solid #efefef; + border-radius: 25rpx; + margin-left: 10rpx; + padding: 0 30rpx; + font-weight: normal; + font-size: 24rpx; +} +.service-detail .text-btn--active { + opacity: 0.5; +} + +.service-detail .specs-popup .bottom-btn { + color: #fa550f; +} +.service-detail .specs-popup .bottom-btn::after { + color: #fa550f; +} + +.dialog .dialog__button-confirm { + color: #fa550f; +} + +.page-container + .order-goods-card + > wr-goods-card + .wr-goods-card__bottom + .price { + top: 100rpx; + left: 10rpx; + position: absolute; + color: #333; +} + +.page-container .order-goods-card > wr-goods-card .wr-goods-card__num { + top: 100rpx; + right: 0; + position: absolute; +} + +.page-container + .order-goods-card + > wr-goods-card + .wr-goods-card__bottom + .price::before { + display: inline; + content: '退款金额:'; + margin-right: 1em; + font-size: 24rpx; + color: #333333; + font-weight: normal; +} + +.page-container .wr-goods-card__specs { + margin: 14rpx 20rpx 0 0; +} + +.page-container .order-goods-card > wr-goods-card .wr-goods-card__title { + margin-right: 0; + -webkit-line-clamp: 1; + display: -webkit-box; + -webkit-box-orient: vertical; + overflow: hidden; + width: 80%; +} + +.page-container .order-card .header .store-name { + -webkit-line-clamp: 1; + display: -webkit-box; + -webkit-box-orient: vertical; + overflow: hidden; + width: 80%; +} + +.page-container .status-desc { + box-sizing: border-box; + padding: 22rpx 20rpx; + font-size: 26rpx; + line-height: 1.3; + text-align: left; + color: #333333; + background-color: #f5f5f5; + border-radius: 8rpx; + word-wrap: break-word; + margin-top: 40rpx; + margin-bottom: 20rpx; +} + +.page-container .header__right { + font-size: 24rpx; + color: #333333; + display: flex; + align-items: center; +} + +.page-container .header__right__icon { + color: #d05b27; + font-size: 16px !important; + margin-right: 10rpx; +} + +.page-container .wr-goods-card__thumb { + width: 140rpx; +} +.page-container .page-background { + position: absolute; + z-index: -1; + top: 0; + left: 0; + width: 100vw; + color: #fff; + overflow: hidden; +} +.page-container .page-background-img { + width: 100%; + height: 320rpx !important; +} +.page-container .navbar-bg .nav-back, +.page-container .navbar-bg .page-background { + background: linear-gradient( + to right, + rgba(250, 85, 15, 1) 0%, + rgba(250, 85, 15, 0.6) 100% + ) !important; +} + +.page-container .navigation-bar__btn { + font-size: 40rpx !important; + font-weight: bold !important; + color: #333; +} + +.t-class-title { + color: #000; +} + +.refresh-bar { + background: linear-gradient(90deg, #ff6b44 0%, #ed3427 100%) !important; +} + +.page-container .navigation-bar__inner .navigation-bar__left { + padding-left: 16rpx; +} + +.t-refund-info { + font-size: 26rpx; + color: #666; +} + +.t-refund-grid-image { + width: 212rpx !important; + height: 212rpx !important; +} + +.t-refund-info-img { + width: 100%; + height: 100%; +} + +.t-refund-wrapper { + padding: 10rpx 24rpx 10rpx 20rpx !important; +} + +.t-refund-title { + font-size: 28rpx; + color: #333; + font-weight: bold; +} + +.t-refund-note { + font-size: 26rpx; + color: #333 !important; +} + +.service-detail .logistics { + padding-top: 0; + padding-bottom: 0; + padding-right: 0; +} + +.service-section__title__header { + display: flex; + align-items: center; + color: #333; + font-weight: normal; + font-size: 32rpx; +} + +.safe-bottom { + padding-bottom: env(safe-area-inset-bottom); +} + +.service-section-logistics { + display: flex; + justify-content: center; + color: #fa4126; + align-items: center; + margin-top: 24rpx; +} +.add-notes__confirm { + color: #fa4126 !important; +} +.t-class-indicator { + color: #b9b9b9 !important; +} + +.service-detail .goods-refund-address { + padding-top: 0; + padding-bottom: 0; +} + +.service-detail .goods-refund-address .goods-refund-address-copy-btn { + position: absolute; + top: 22rpx; + right: 0; +} + +.service-detail .service-goods-card-wrap { + padding-top: 0; + padding-bottom: 0; +} diff --git a/scr/miniprogram-2/pages/order/after-service-list/api.js b/scr/miniprogram-2/pages/order/after-service-list/api.js new file mode 100644 index 0000000..68bbf56 --- /dev/null +++ b/scr/miniprogram-2/pages/order/after-service-list/api.js @@ -0,0 +1,1278 @@ +/* eslint-disable */ +import { mockIp, mockReqId } from '../../../utils/mock'; + +export const resp = { + data: { + pageNum: 1, + pageSize: 10, + totalCount: 51, + states: { + audit: 1, + approved: 6, + complete: 2, + closed: 1, + }, + dataList: [ + { + buttonVOs: [ + { + name: '修改运单号', + primary: false, + type: 4, + }, + { + name: '查看物流', + primary: false, + type: 5, + }, + ], + saasId: '8888', + storeId: '2591', + uid: '88881046205', + refundMethodList: [ + { + refundMethodAmount: 99999, + refundMethodName: '微信支付', + }, + { + refundMethodAmount: 100000, + refundMethodName: '银行卡支付', + }, + ], + createTime: '1596524705613', + rights: { + bizRightsStatus: 1, + bizRightsStatusName: '退款退货', + createTime: '1596524705613', + orderNo: '12313123123', + refundAmount: 99999, + refundRequestAmount: 999999, + rightsMethod: 1, + rightsNo: '123123423', + rightsParentNo: '78970', + rightsReasonDesc: '太贵了,不想要了', + rightsReasonType: 10, + rightsStatus: 50, + rightsStatusName: '已完成', + rightsType: 20, + saasId: 123, + shippingFee: 99, + shippingFeeBear: 1, + storeId: 123, + storeName: '大猫集团旗舰店', + uid: '123', + updateTime: '1596524705613', + userRightsStatus: 120, + userRightsStatusDesc: + '商家已退款,退回资金将原路三个工作日返回您的账户', + userRightsStatusName: '已退款', + afterSaleRequireType: 'REFUND_MONEY', + rightsImageUrls: [ + 'https://cdn-we-retail.ym.tencent.com/tsr/goods/nz-09a.png', + 'https://cdn-we-retail.ym.tencent.com/tsr/goods/nz-09a.png', + 'https://cdn-we-retail.ym.tencent.com/tsr/goods/nz-09a.png', + 'https://cdn-we-retail.ym.tencent.com/tsr/goods/nz-09a.png', + ], + }, + rightsItem: [ + { + actualPrice: 888, + createTime: '1596524705613', + disconutInfo: '现在下单,立刻优惠100元', + goodsName: '小米手机', + goodsPictureUrl: + 'https://cdn-we-retail.ym.tencent.com/tsr/goods/nz-09a.png', + goodsViceType: 1, + itemDiscountAmount: 123123, + itemRefundAmount: 888, + itemStatus: 2, + itemTotalAmount: 9913, + orderNo: '12312333', + parentOrderNo: '1231234', + rightsId: 423423, + rightsNo: '112333', + rightsParentNo: '345345', + rightsQuantity: 12, + saasId: 123, + skuId: 812312, + specInfo: [ + { + specTitle: '测试dr超长', + specValues: '超长测试超长测试1', + }, + { + specTitle: 'bwtgg01', + specValues: 'eee', + }, + ], + updateTime: '1596524705613', + }, + { + actualPrice: 9999, + createTime: '1596524705613', + disconutInfo: '现在下单,立刻优惠100元', + goodsName: '华为手机', + goodsPictureUrl: + 'https://cdn-we-retail.ym.tencent.com/tsr/goods/nz-09a.png', + goodsViceType: 1, + itemDiscountAmount: 123123, + itemRefundAmount: 9999, + itemStatus: 2, + itemTotalAmount: 9913, + orderNo: '12312333', + parentOrderNo: '1231234', + rightsId: 423423, + rightsNo: '112333', + rightsParentNo: '345345', + rightsQuantity: 12, + saasId: 123, + skuId: 8123129, + specInfo: [ + { + specTitle: '测试dr超长', + specValues: '超长测试超长测试1', + }, + { + specTitle: 'bwtgg01', + specValues: 'eee', + }, + ], + updateTime: '1596524705613', + }, + ], + rightsRefund: { + callbackTime: '1596524705613', + channel: '微信支付', + channelTrxNo: '123123', + createTime: '1596524705613', + refundDesc: '由于您信誉良好,商家同意退款', + memo: '无摘要', + refundAmount: 9999, + refundStatus: 1, + requestTime: '1596524705613', + successTime: '1596524705613', + traceNo: '123123', + updateTime: '1596524705613', + }, + logisticsVO: { + logisticsType: 1, + logisticsNo: 'SF2380380982034', + logisticsStatus: null, + logisticsCompanyCode: '', + logisticsCompanyName: '顺丰', + receiverAddressId: '20', + provinceCode: '440000', + cityCode: '440300', + countryCode: '440306', + receiverProvince: '广东省', + receiverCity: '深圳市', + receiverCountry: '南山区', + receiverArea: '', + receiverAddress: '清风路御龙湾', + receiverPostCode: '', + receiverLongitude: '113.880562', + receiverLatitude: '22.56271', + receiverIdentity: '88881046205', + receiverPhone: '18371736717', + receiverName: '周杰伦', + expectArrivalTime: null, + senderName: '刘德华', + senderPhone: '1273109238123', + senderAddress: '北京市昌平区大丰家园三号楼四单元108号', + sendTime: null, + arrivalTime: null, + nodes: [ + { + title: '已签收', + icon: 'https://cdn-we-retail.ym.tencent.com/tsr/icon/order.png', + code: '200003', + desc: '商家已签收,感谢使用顺丰,期待再次为您服务', + date: '2020-09-11 11:34:53', + }, + { + title: '运输中', + icon: 'https://cdn-we-retail.ym.tencent.com/tsr/icon/deliver.png', + desc: '快件已到达成都中转站', + code: '200002', + date: '2020-07-16 11:16:31', + }, + { + title: '已寄出', + icon: 'https://cdn-we-retail.ym.tencent.com/tsr/icon/deliver.png', + desc: '买家已寄出,物流承运商:顺丰速运', + date: '2020-07-16 11:16:21', + }, + ], + }, + }, + { + buttonVOs: [ + { + name: '填写运单号', + primary: false, + type: 3, + }, + ], + saasId: '8888', + storeId: '2591', + uid: '88881046205', + createTime: '1596524705613', + rights: { + rightsImageUrls: [ + 'https://cdn-we-retail.ym.tencent.com/tsr/goods/nz-09a.png', + 'https://cdn-we-retail.ym.tencent.com/tsr/goods/nz-09a.png', + 'https://cdn-we-retail.ym.tencent.com/tsr/goods/nz-09a.png', + 'https://cdn-we-retail.ym.tencent.com/tsr/goods/nz-09a.png', + ], + bizRightsStatus: 1, + bizRightsStatusName: '退款退货', + createTime: '1596524705613', + orderNo: '12313123123', + refundAmount: 99999, + refundRequestAmount: 999999, + rightsMethod: 1, + rightsNo: '1231234231', + rightsParentNo: '78970', + rightsReasonDesc: '太贵了,不想要了', + rightsReasonType: 10, + rightsStatus: 20, + rightsStatusName: '已审核', + rightsType: 10, + saasId: 123, + shippingFee: 99, + shippingFeeBear: 1, + storeId: 123, + storeName: '大猫集团旗舰店', + uid: '123', + updateTime: '1596524705613', + userRightsStatus: 100, + userRightsStatusDesc: '商家已审核确认,预计1小时内发起退款', + userRightsStatusName: '商家已审核', + }, + rightsItem: [ + { + actualPrice: 888, + createTime: '1596524705613', + disconutInfo: '现在下单,立刻优惠100元', + goodsName: '小米手机', + goodsPictureUrl: + 'https://cdn-we-retail.ym.tencent.com/tsr/goods/nz-09a.png', + goodsViceType: 1, + itemDiscountAmount: 123123, + itemRefundAmount: 888, + itemStatus: 2, + itemTotalAmount: 9913, + orderNo: '12312333', + parentOrderNo: '1231234', + rightsId: 423423, + rightsNo: '112333', + rightsParentNo: '345345', + rightsQuantity: 12, + saasId: 123, + skuId: 812312, + specInfo: [ + { + specTitle: '测试dr超长', + specValues: '超长测试超长测试1', + }, + { + specTitle: 'bwtgg01', + specValues: 'eee', + }, + ], + updateTime: '1596524705613', + }, + ], + rightsRefund: { + callbackTime: '1596524705613', + channel: '微信支付', + channelTrxNo: '123123', + createTime: '1596524705613', + refundDesc: '由于您信誉良好,商家同意退款', + memo: '无摘要', + refundAmount: 9999, + refundStatus: 1, + requestTime: '1596524705613', + successTime: '1596524705613', + traceNo: '123123', + updateTime: '1596524705613', + }, + logisticsVO: { + logisticsType: 1, + logisticsNo: 'SA9208097023203', + logisticsStatus: null, + logisticsCompanyCode: '', + logisticsCompanyName: '申通快递', + receiverAddressId: '20', + provinceCode: '440000', + cityCode: '440300', + countryCode: '440306', + receiverProvince: '广东省', + receiverCity: '深圳市', + receiverCountry: '南山区', + receiverArea: '', + receiverAddress: '清风路御龙湾', + receiverPostCode: '', + receiverLongitude: '113.880562', + receiverLatitude: '22.56271', + receiverIdentity: '88881046205', + receiverPhone: '18371736717', + receiverName: '周杰伦', + expectArrivalTime: null, + senderName: '刘德华', + senderPhone: '1273109238123', + senderAddress: '北京市昌平区大丰家园三号楼四单元108号', + sendTime: null, + arrivalTime: null, + }, + }, + { + buttonVOs: [ + { + name: '撤销申请', + primary: false, + type: 2, + }, + ], + saasId: '8888', + storeId: '2591', + uid: '88881046205', + createTime: '1596524705613', + rights: { + rightsImageUrls: [ + 'https://cdn-we-retail.ym.tencent.com/tsr/goods/nz-09a.png', + 'https://cdn-we-retail.ym.tencent.com/tsr/goods/nz-09a.png', + 'https://cdn-we-retail.ym.tencent.com/tsr/goods/nz-09a.png', + 'https://cdn-we-retail.ym.tencent.com/tsr/goods/nz-09a.png', + ], + bizRightsStatus: 1, + bizRightsStatusName: '退款退货', + createTime: '1596524705613', + orderNo: '12313123123', + refundAmount: 99999, + refundRequestAmount: 999999, + rightsMethod: 1, + rightsNo: '1231234232', + rightsParentNo: '78970', + rightsReasonDesc: '太贵了,不想要了', + rightsReasonType: 10, + rightsStatus: 60, + rightsStatusName: '已关闭', + rightsType: 10, + saasId: 123, + shippingFee: 99, + shippingFeeBear: 1, + storeId: 123, + storeName: '大猫集团旗舰店', + uid: '123', + updateTime: '1596524705613', + userRightsStatus: 100, + userRightsStatusDesc: '商家将尽快确认您的退款申请', + userRightsStatusName: '等待商家审核', + }, + rightsItem: [ + { + actualPrice: 888, + createTime: '1596524705613', + disconutInfo: '现在下单,立刻优惠100元', + goodsName: '小米手机', + goodsPictureUrl: + 'https://cdn-we-retail.ym.tencent.com/tsr/goods/nz-09a.png', + goodsViceType: 1, + itemDiscountAmount: 123123, + itemRefundAmount: 888, + itemStatus: 2, + itemTotalAmount: 9913, + orderNo: '12312333', + parentOrderNo: '1231234', + rightsId: 423423, + rightsNo: '112333', + rightsParentNo: '345345', + rightsQuantity: 12, + saasId: 123, + skuId: 812312, + specInfo: [ + { + specTitle: '测试dr超长', + specValues: '超长测试超长测试1', + }, + { + specTitle: 'bwtgg01', + specValues: 'eee', + }, + ], + updateTime: '1596524705613', + }, + ], + rightsRefund: { + callbackTime: '1596524705613', + channel: '微信支付', + channelTrxNo: '123123', + createTime: '1596524705613', + memo: '无摘要', + refundAmount: 9999, + refundStatus: 1, + requestTime: '1596524705613', + successTime: '1596524705613', + traceNo: '123123', + updateTime: '1596524705613', + refundDesc: '实际商品与描述不符', + }, + logisticsVO: { + logisticsType: 1, + logisticsNo: 'SF9343043084', + logisticsStatus: null, + logisticsCompanyCode: '', + logisticsCompanyName: '顺丰', + receiverAddressId: '20', + provinceCode: '440000', + cityCode: '440300', + countryCode: '440306', + receiverProvince: '广东省', + receiverCity: '深圳市', + receiverCountry: '南山区', + receiverArea: '', + receiverAddress: '清风路御龙湾', + receiverPostCode: '', + receiverLongitude: '113.880562', + receiverLatitude: '22.56271', + receiverIdentity: '88881046205', + receiverPhone: '18371736717', + receiverName: '周杰伦', + expectArrivalTime: null, + senderName: '刘德华', + senderPhone: '1273109238123', + senderAddress: '北京市昌平区大丰家园三号楼四单元108号', + sendTime: null, + arrivalTime: null, + }, + }, + { + buttonVOs: [], + saasId: '8888', + storeId: '2591', + uid: '88881046205', + createTime: '1596524705613', + refundMethodList: [ + { + refundMethodAmount: 99999, + refundMethodName: '微信支付', + }, + { + refundMethodAmount: 100000, + refundMethodName: '银行卡支付', + }, + ], + rights: { + bizRightsStatus: 1, + bizRightsStatusName: '退款退货', + createTime: '1596524705613', + orderNo: '12313123123', + refundAmount: 99999, + refundRequestAmount: 999999, + rightsMethod: 1, + rightsNo: '1231234233', + rightsParentNo: '78970', + rightsReasonDesc: '太贵了,不想要了', + rightsReasonType: 10, + rightsStatus: 50, + rightsStatusName: '已完成', + rightsType: 10, + saasId: 123, + shippingFee: 99, + shippingFeeBear: 1, + storeId: 123, + storeName: + '大猫集团旗舰店-大猫集团旗舰店-大猫集团旗舰店-大猫集团旗舰店-大猫集团旗舰店-大猫集团旗舰店', + uid: '123', + updateTime: '1596524705613', + userRightsStatus: 160, + userRightsStatusDesc: '退款/售后已完成', + userRightsStatusName: '已完成', + }, + rightsItem: [ + { + actualPrice: 888, + createTime: '1596524705613', + disconutInfo: '现在下单,立刻优惠100元', + goodsName: '小米手机', + goodsPictureUrl: + 'https://cdn-we-retail.ym.tencent.com/tsr/goods/nz-09a.png', + goodsViceType: 1, + itemDiscountAmount: 123123, + itemRefundAmount: 888, + itemStatus: 2, + itemTotalAmount: 9913, + orderNo: '12312333', + parentOrderNo: '1231234', + rightsId: 423423, + rightsNo: '112333', + rightsParentNo: '345345', + rightsQuantity: 12, + saasId: 123, + skuId: 812312, + specInfo: [ + { + specTitle: '测试dr超长', + specValues: '超长测试超长测试1', + }, + { + specTitle: 'bwtgg01', + specValues: 'eee', + }, + ], + updateTime: '1596524705613', + }, + ], + rightsRefund: { + callbackTime: '1596524705613', + channel: '微信支付', + channelTrxNo: '123123', + createTime: '1596524705613', + memo: '无摘要', + refundAmount: 9999, + refundStatus: 1, + requestTime: '1596524705613', + successTime: '1596524705613', + traceNo: '123123', + updateTime: '1596524705613', + }, + logisticsVO: { + logisticsType: 1, + logisticsNo: '', + logisticsStatus: null, + logisticsCompanyCode: '', + logisticsCompanyName: '', + receiverAddressId: '20', + provinceCode: '440000', + cityCode: '440300', + countryCode: '440306', + receiverProvince: '广东省', + receiverCity: '深圳市', + receiverCountry: '南山区', + receiverArea: '', + receiverAddress: '清风路御龙湾', + receiverPostCode: '', + receiverLongitude: '113.880562', + receiverLatitude: '22.56271', + receiverIdentity: '88881046205', + receiverPhone: '18371736717', + receiverName: '周杰伦', + expectArrivalTime: null, + senderName: '刘德华', + senderPhone: '1273109238123', + senderAddress: '北京市昌平区大丰家园三号楼四单元108号', + sendTime: null, + arrivalTime: null, + }, + }, + { + buttonVOs: [ + { + name: '修改运单号', + primary: false, + type: 4, + }, + ], + saasId: '8888', + storeId: '2591', + uid: '88881046205', + createTime: '1596524705613', + rights: { + bizRightsStatus: 1, + bizRightsStatusName: '退款退货', + createTime: '1596524705613', + orderNo: '12313123123', + refundAmount: 99999, + refundRequestAmount: 999999, + rightsMethod: 1, + rightsNo: '1231234234', + rightsParentNo: '78970', + rightsReasonDesc: '太贵了,不想要了', + rightsReasonType: 10, + rightsStatus: 20, + rightsStatusName: '已审核', + rightsType: 10, + saasId: 123, + shippingFee: 99, + shippingFeeBear: 1, + storeId: 123, + storeName: '大猫集团旗舰店', + uid: '123', + updateTime: '1596524705613', + userRightsStatus: 1, + userRightsStatusDesc: '商家已审核确认,预计1小时内发起退款', + userRightsStatusName: '商家已审核', + }, + rightsItem: [ + { + actualPrice: 888, + createTime: '1596524705613', + disconutInfo: '现在下单,立刻优惠100元', + goodsName: '小米手机', + goodsPictureUrl: + 'https://cdn-we-retail.ym.tencent.com/tsr/goods/nz-09a.png', + goodsViceType: 1, + itemDiscountAmount: 123123, + itemRefundAmount: 888, + itemStatus: 2, + itemTotalAmount: 9913, + orderNo: '12312333', + parentOrderNo: '1231234', + rightsId: 423423, + rightsNo: '112333', + rightsParentNo: '345345', + rightsQuantity: 12, + saasId: 123, + skuId: 812312, + specInfo: [ + { + specTitle: '测试dr超长', + specValues: '超长测试超长测试1', + }, + { + specTitle: 'bwtgg01', + specValues: 'eee', + }, + ], + updateTime: '1596524705613', + }, + ], + rightsRefund: { + callbackTime: '1596524705613', + channel: '微信支付', + channelTrxNo: '123123', + createTime: '1596524705613', + memo: '无摘要', + refundAmount: 9999, + refundStatus: 1, + requestTime: '1596524705613', + successTime: '1596524705613', + traceNo: '123123', + updateTime: '1596524705613', + }, + logisticsVO: { + logisticsType: 1, + logisticsNo: '80900909', + logisticsStatus: null, + logisticsCompanyCode: '0004', + logisticsCompanyName: '顺丰快递', + remark: '质量问题,申请退货退款', + receiverAddressId: '20', + provinceCode: '440000', + cityCode: '440300', + countryCode: '440306', + receiverProvince: '广东省', + receiverCity: '深圳市', + receiverCountry: '南山区', + receiverArea: '', + receiverAddress: '清风路御龙湾', + receiverPostCode: '', + receiverLongitude: '113.880562', + receiverLatitude: '22.56271', + receiverIdentity: '88881046205', + receiverPhone: '18371736717', + receiverName: '周杰伦', + expectArrivalTime: null, + senderName: '刘德华', + senderPhone: '1273109238123', + senderAddress: '北京市昌平区大丰家园三号楼四单元108号', + sendTime: null, + arrivalTime: null, + }, + }, + { + buttonVOs: [ + { + name: '撤销申请', + primary: false, + type: 2, + }, + ], + saasId: '8888', + storeId: '2591', + uid: '88881046205', + createTime: '1596524705613', + rights: { + bizRightsStatus: 1, + bizRightsStatusName: '退款退货', + createTime: '1596524705613', + orderNo: '12313123123', + refundAmount: 99999, + refundRequestAmount: 999999, + rightsMethod: 1, + rightsNo: '1231234235', + rightsParentNo: '78970', + rightsReasonDesc: '太贵了,不想要了', + rightsReasonType: 10, + rightsStatus: 10, + rightsStatusName: '待审核', + rightsType: 10, + saasId: 123, + shippingFee: 99, + shippingFeeBear: 1, + storeId: 123, + storeName: + '大猫集团旗舰店-大猫集团旗舰店-大猫集团旗舰店-大猫集团旗舰店-大猫集团旗舰店-大猫集团旗舰店-大猫集团旗舰店', + uid: '123', + updateTime: '1596524705613', + userRightsStatus: 1, + userRightsStatusDesc: + '商家将在24小时内审核,如24小时后商家仍未审核,系统将自动审核通过', + userRightsStatusName: '待商家审核', + }, + rightsItem: [ + { + actualPrice: 888, + createTime: '1596524705613', + disconutInfo: '现在下单,立刻优惠100元', + goodsName: + '小米手机-小米手机-小米手机-小米手机-小米手机-小米手机-小米手机-小米手机-小米手机-小米手机-小米手机-小米手机-小米手机-小米手机-小米手机-小米手机-小米手机', + goodsPictureUrl: + 'https://cdn-we-retail.ym.tencent.com/tsr/goods/nz-09a.png', + goodsViceType: 1, + itemDiscountAmount: 123123, + itemRefundAmount: 888, + itemStatus: 2, + itemTotalAmount: 9913, + orderNo: '12312333', + parentOrderNo: '1231234', + rightsId: 423423, + rightsNo: '112333', + rightsParentNo: '345345', + rightsQuantity: 12, + saasId: 123, + skuId: 812312, + specInfo: [ + { + specTitle: '测试dr超长', + specValues: '超长测试超长测试1', + }, + { + specTitle: 'bwtgg01', + specValues: 'eee', + }, + ], + updateTime: '1596524705613', + }, + ], + rightsRefund: { + callbackTime: '1596524705613', + channel: '微信支付', + channelTrxNo: '123123', + createTime: '1596524705613', + memo: '无摘要', + refundAmount: 9999, + refundStatus: 1, + requestTime: '1596524705613', + successTime: '1596524705613', + traceNo: '123123', + updateTime: '1596524705613', + }, + logisticsVO: { + logisticsType: 1, + logisticsNo: '', + logisticsStatus: null, + logisticsCompanyCode: '', + logisticsCompanyName: '', + receiverAddressId: '20', + provinceCode: '440000', + cityCode: '440300', + countryCode: '440306', + receiverProvince: '广东省', + receiverCity: '深圳市', + receiverCountry: '南山区', + receiverArea: '', + receiverAddress: '清风路御龙湾', + receiverPostCode: '', + receiverLongitude: '113.880562', + receiverLatitude: '22.56271', + receiverIdentity: '88881046205', + receiverPhone: '18371736717', + receiverName: '周杰伦', + expectArrivalTime: null, + senderName: '刘德华', + senderPhone: '1273109238123', + senderAddress: '北京市昌平区大丰家园三号楼四单元108号', + sendTime: null, + arrivalTime: null, + }, + }, + { + buttonVOs: [ + { + name: '修改运单号', + primary: false, + type: 4, + }, + ], + saasId: '8888', + storeId: '2591', + uid: '88881046205', + createTime: '1596524705613', + rights: { + bizRightsStatus: 1, + bizRightsStatusName: '退款退货', + createTime: '1596524705613', + orderNo: '12313123123', + refundAmount: 99999, + refundRequestAmount: 999999, + rightsMethod: 1, + rightsNo: '1231234236', + rightsParentNo: '78970', + rightsReasonDesc: '太贵了,不想要了', + rightsReasonType: 10, + rightsStatus: 20, + rightsStatusName: '已审核', + rightsType: 10, + saasId: 123, + shippingFee: 99, + shippingFeeBear: 1, + storeId: 123, + storeName: '大猫集团旗舰店', + uid: '123', + updateTime: '1596524705613', + userRightsStatus: 1, + userRightsStatusDesc: '商家已审核确认,预计1小时内发起退款', + userRightsStatusName: '商家已审核', + }, + rightsItem: [ + { + actualPrice: 888, + createTime: '1596524705613', + disconutInfo: '现在下单,立刻优惠100元', + goodsName: '小米手机', + goodsPictureUrl: + 'https://cdn-we-retail.ym.tencent.com/tsr/goods/nz-09a.png', + goodsViceType: 1, + itemDiscountAmount: 123123, + itemRefundAmount: 888, + itemStatus: 2, + itemTotalAmount: 9913, + orderNo: '12312333', + parentOrderNo: '1231234', + rightsId: 423423, + rightsNo: '112333', + rightsParentNo: '345345', + rightsQuantity: 12, + saasId: 123, + skuId: 812312, + specInfo: [ + { + specTitle: '测试dr超长', + specValues: '超长测试超长测试1', + }, + { + specTitle: 'bwtgg01', + specValues: 'eee', + }, + ], + updateTime: '1596524705613', + }, + ], + rightsRefund: { + callbackTime: '1596524705613', + channel: '微信支付', + channelTrxNo: '123123', + createTime: '1596524705613', + memo: '无摘要', + refundAmount: 9999, + refundStatus: 1, + requestTime: '1596524705613', + successTime: '1596524705613', + traceNo: '123123', + updateTime: '1596524705613', + }, + logisticsVO: { + logisticsType: 1, + logisticsNo: '90900808', + logisticsStatus: null, + logisticsCompanyCode: '0002', + logisticsCompanyName: '申通快递', + remark: '质量问题,申请退货退款', + receiverAddressId: '20', + provinceCode: '440000', + cityCode: '440300', + countryCode: '440306', + receiverProvince: '广东省', + receiverCity: '深圳市', + receiverCountry: '南山区', + receiverArea: '', + receiverAddress: '清风路御龙湾', + receiverPostCode: '', + receiverLongitude: '113.880562', + receiverLatitude: '22.56271', + receiverIdentity: '88881046205', + receiverPhone: '18371736717', + receiverName: '周杰伦', + expectArrivalTime: null, + senderName: '刘德华', + senderPhone: '1273109238123', + senderAddress: '北京市昌平区大丰家园三号楼四单元108号', + sendTime: null, + arrivalTime: null, + }, + }, + { + buttonVOs: [ + { + name: '填写运单号', + primary: false, + type: 3, + }, + ], + saasId: '8888', + storeId: '2591', + uid: '88881046205', + createTime: '1596524705613', + rights: { + bizRightsStatus: 1, + bizRightsStatusName: '退款退货', + createTime: '1596524705613', + orderNo: '12313123123', + refundAmount: 99999, + refundRequestAmount: 999999, + rightsMethod: 1, + rightsNo: '1231234237', + rightsParentNo: '78970', + rightsReasonDesc: '太贵了,不想要了', + rightsReasonType: 10, + rightsStatus: 20, + rightsStatusName: '已审核', + rightsType: 10, + saasId: 123, + shippingFee: 99, + shippingFeeBear: 1, + storeId: 123, + storeName: '大猫集团旗舰店', + uid: '123', + updateTime: '1596524705613', + userRightsStatus: 1, + userRightsStatusDesc: '商家已审核确认,预计1小时内发起退款', + userRightsStatusName: '商家已审核', + }, + rightsItem: [ + { + actualPrice: 888, + createTime: '1596524705613', + disconutInfo: '现在下单,立刻优惠100元', + goodsName: '小米手机', + goodsPictureUrl: + 'https://cdn-we-retail.ym.tencent.com/tsr/goods/nz-09a.png', + goodsViceType: 1, + itemDiscountAmount: 123123, + itemRefundAmount: 888, + itemStatus: 2, + itemTotalAmount: 9913, + orderNo: '12312333', + parentOrderNo: '1231234', + rightsId: 423423, + rightsNo: '112333', + rightsParentNo: '345345', + rightsQuantity: 12, + saasId: 123, + skuId: 812312, + specInfo: [ + { + specTitle: '测试dr超长', + specValues: '超长测试超长测试1', + }, + { + specTitle: 'bwtgg01', + specValues: 'eee', + }, + ], + updateTime: '1596524705613', + }, + ], + rightsRefund: { + callbackTime: '1596524705613', + channel: '微信支付', + channelTrxNo: '123123', + createTime: '1596524705613', + memo: '无摘要', + refundAmount: 9999, + refundStatus: 1, + requestTime: '1596524705613', + successTime: '1596524705613', + traceNo: '123123', + updateTime: '1596524705613', + }, + logisticsVO: { + logisticsType: 1, + logisticsNo: '', + logisticsStatus: null, + logisticsCompanyCode: '', + logisticsCompanyName: '', + receiverAddressId: '20', + provinceCode: '440000', + cityCode: '440300', + countryCode: '440306', + receiverProvince: '广东省', + receiverCity: '深圳市', + receiverCountry: '南山区', + receiverArea: '', + receiverAddress: '清风路御龙湾', + receiverPostCode: '', + receiverLongitude: '113.880562', + receiverLatitude: '22.56271', + receiverIdentity: '88881046205', + receiverPhone: '18371736717', + receiverName: '周杰伦', + expectArrivalTime: null, + senderName: '刘德华', + senderPhone: '1273109238123', + senderAddress: '北京市昌平区大丰家园三号楼四单元108号', + sendTime: null, + arrivalTime: null, + }, + }, + { + buttonVOs: [ + { + name: '撤销申请', + primary: false, + type: 2, + }, + ], + saasId: '8888', + storeId: '2591', + uid: '88881046205', + createTime: '1596524705613', + rights: { + bizRightsStatus: 1, + bizRightsStatusName: '退款退货', + createTime: '1596524705613', + orderNo: '123131231238', + refundAmount: 99999, + refundRequestAmount: 999999, + rightsMethod: 1, + rightsNo: '1231234238', + rightsParentNo: '78970', + rightsReasonDesc: '太贵了,不想要了', + rightsReasonType: 10, + rightsStatus: 20, + rightsStatusName: '已审核', + rightsType: 10, + saasId: 123, + shippingFee: 99, + shippingFeeBear: 1, + storeId: 123, + storeName: '大猫集团旗舰店', + uid: '123', + updateTime: '1596524705613', + userRightsStatus: 1, + userRightsStatusDesc: '商家已审核确认,预计1小时内发起退款', + userRightsStatusName: '商家已审核', + }, + rightsItem: [ + { + actualPrice: 888, + createTime: '1596524705613', + disconutInfo: '现在下单,立刻优惠100元', + goodsName: '小米手机', + goodsPictureUrl: + 'https://cdn-we-retail.ym.tencent.com/tsr/goods/nz-09a.png', + goodsViceType: 1, + itemDiscountAmount: 123123, + itemRefundAmount: 888, + itemStatus: 2, + itemTotalAmount: 9913, + orderNo: '12312333', + parentOrderNo: '1231234', + rightsId: 423423, + rightsNo: '112333', + rightsParentNo: '345345', + rightsQuantity: 12, + saasId: 123, + skuId: 812312, + specInfo: [ + { + specTitle: '测试dr超长', + specValues: '超长测试超长测试1', + }, + { + specTitle: 'bwtgg01', + specValues: 'eee', + }, + ], + updateTime: '1596524705613', + }, + ], + rightsRefund: { + callbackTime: '1596524705613', + channel: '微信支付', + channelTrxNo: '123123', + createTime: '1596524705613', + memo: '无摘要', + refundAmount: 9999, + refundStatus: 1, + requestTime: '1596524705613', + successTime: '1596524705613', + traceNo: '123123', + updateTime: '1596524705613', + }, + logisticsVO: { + logisticsType: 1, + logisticsNo: '', + logisticsStatus: null, + logisticsCompanyCode: '', + logisticsCompanyName: '', + receiverAddressId: '20', + provinceCode: '440000', + cityCode: '440300', + countryCode: '440306', + receiverProvince: '广东省', + receiverCity: '深圳市', + receiverCountry: '南山区', + receiverArea: '', + receiverAddress: '清风路御龙湾', + receiverPostCode: '', + receiverLongitude: '113.880562', + receiverLatitude: '22.56271', + receiverIdentity: '88881046205', + receiverPhone: '18371736717', + receiverName: '周杰伦', + expectArrivalTime: null, + senderName: '刘德华', + senderPhone: '1273109238123', + senderAddress: '北京市昌平区大丰家园三号楼四单元108号', + sendTime: null, + arrivalTime: null, + }, + }, + { + buttonVOs: [ + { + name: '填写运单号', + primary: false, + type: 3, + }, + ], + saasId: '8888', + storeId: '2591', + uid: '88881046205', + createTime: '1596524705613', + rights: { + bizRightsStatus: 1, + bizRightsStatusName: '退款退货', + createTime: '1596524705613', + orderNo: '12313123123', + refundAmount: 99999, + refundRequestAmount: 999999, + rightsMethod: 1, + rightsNo: '1231234239', + rightsParentNo: '78970', + rightsReasonDesc: '太贵了,不想要了', + rightsReasonType: 10, + rightsStatus: 20, + rightsStatusName: '已审核', + rightsType: 10, + saasId: 123, + shippingFee: 99, + shippingFeeBear: 1, + storeId: 123, + storeName: '大猫集团旗舰店', + uid: '123', + updateTime: '1596524705613', + userRightsStatus: 1, + userRightsStatusDesc: '商家已审核确认,预计1小时内发起退款', + userRightsStatusName: '商家已审核', + }, + rightsItem: [ + { + actualPrice: 888, + createTime: '1596524705613', + disconutInfo: '现在下单,立刻优惠100元', + goodsName: + '小米手机-小米手机-小米手机-小米手机-小米手机-小米手机-小米手机-小米手机-小米手机-小米手机-小米手机-小米手机', + goodsPictureUrl: + 'https://cdn-we-retail.ym.tencent.com/tsr/goods/nz-09a.png', + goodsViceType: 1, + itemDiscountAmount: 123123, + itemRefundAmount: 888, + itemStatus: 2, + itemTotalAmount: 9913, + orderNo: '12312333', + parentOrderNo: '1231234', + rightsId: 423423, + rightsNo: '112333', + rightsParentNo: '345345', + rightsQuantity: 12, + saasId: 123, + skuId: 812312, + specInfo: [ + { + specTitle: '测试dr超长', + specValues: '超长测试超长测试1', + }, + { + specTitle: 'bwtgg01', + specValues: 'eee', + }, + ], + updateTime: '1596524705613', + }, + ], + rightsRefund: { + callbackTime: '1596524705613', + channel: '微信支付', + channelTrxNo: '123123', + createTime: '1596524705613', + memo: '无摘要', + refundAmount: 9999, + refundStatus: 1, + requestTime: '1596524705613', + successTime: '1596524705613', + traceNo: '123123', + updateTime: '1596524705613', + }, + logisticsVO: { + logisticsType: 1, + logisticsNo: '', + logisticsStatus: null, + logisticsCompanyCode: '', + logisticsCompanyName: '', + receiverAddressId: '20', + provinceCode: '440000', + cityCode: '440300', + countryCode: '440306', + receiverProvince: '广东省', + receiverCity: '深圳市', + receiverCountry: '南山区', + receiverArea: '', + receiverAddress: '清风路御龙湾', + receiverPostCode: '', + receiverLongitude: '113.880562', + receiverLatitude: '22.56271', + receiverIdentity: '88881046205', + receiverPhone: '18371736717', + receiverName: '周杰伦', + expectArrivalTime: null, + senderName: '刘德华', + senderPhone: '1273109238123', + senderAddress: '北京市昌平区大丰家园三号楼四单元108号', + sendTime: null, + arrivalTime: null, + }, + }, + ], + }, + code: 'Success', + msg: null, + requestId: mockReqId(), + clientIp: mockIp(), + rt: 79, + success: true, +}; + +export function getRightsList({ parameter: { afterServiceStatus, pageNum } }) { + const _resq = JSON.parse(JSON.stringify(resp)); + if (pageNum > 3) _resq.data.dataList = []; + if (afterServiceStatus > -1) { + _resq.data.dataList = _resq.data.dataList.filter( + (item) => item.rights.rightsStatus === afterServiceStatus, + ); + } + return Promise.resolve(_resq); +} diff --git a/scr/miniprogram-2/pages/order/after-service-list/index.js b/scr/miniprogram-2/pages/order/after-service-list/index.js new file mode 100644 index 0000000..7cd0cd5 --- /dev/null +++ b/scr/miniprogram-2/pages/order/after-service-list/index.js @@ -0,0 +1,220 @@ +import { getRightsList } from './api'; +import { AfterServiceStatus, ServiceType, ServiceTypeDesc } from '../config'; + +Page({ + page: { + size: 10, + num: 1, + }, + + data: { + tabs: [ + { + key: -1, + text: '全部', + }, + { + key: AfterServiceStatus.TO_AUDIT, + text: '待审核', + }, + { + key: AfterServiceStatus.THE_APPROVED, + text: '已审核', + }, + { + key: AfterServiceStatus.COMPLETE, + text: '已完成', + }, + { + key: AfterServiceStatus.CLOSED, + text: '已关闭', + }, + ], + curTab: -1, + dataList: [], + listLoading: 0, // 0-未加载,1-加载中,2-已全部加载 + pullDownRefreshing: false, // 下拉刷新时不显示load-more + emptyImg: + 'https://cdn-we-retail.ym.tencent.com/miniapp/order/empty-order-list.png', + backRefresh: false, + }, + + onLoad(query) { + let status = parseInt(query.status); + status = this.data.tabs.map((t) => t.key).includes(status) ? status : -1; + this.init(status); + this.pullDownRefresh = this.selectComponent('#wr-pull-down-refresh'); + }, + + onShow() { + // 当从其他页面返回,并且 backRefresh 被置为 true 时,刷新数据 + if (!this.data.backRefresh) return; + this.onRefresh(); + this.setData({ + backRefresh: false, + }); + }, + + onReachBottom() { + if (this.data.listLoading === 0) { + this.getAfterServiceList(this.data.curTab); + } + }, + + onPageScroll(e) { + this.pullDownRefresh && this.pullDownRefresh.onPageScroll(e); + }, + + onPullDownRefresh_(e) { + const { callback } = e.detail; + this.setData({ + pullDownRefreshing: true, + }); // 下拉刷新时不显示load-more + this.refreshList(this.data.curTab) + .then(() => { + this.setData({ + pullDownRefreshing: false, + }); + callback && callback(); + }) + .catch((err) => { + this.setData({ + pullDownRefreshing: false, + }); + Promise.reject(err); + }); + }, + + init(status) { + status = status !== undefined ? status : this.data.curTab; + this.refreshList(status); + }, + + getAfterServiceList(statusCode = -1, reset = false) { + const params = { + parameter: { + pageSize: this.page.size, + pageNum: this.page.num, + }, + }; + if (statusCode !== -1) params.parameter.afterServiceStatus = statusCode; + this.setData({ + listLoading: 1, + }); + return getRightsList(params) + .then((res) => { + this.page.num++; + let dataList = []; + let { tabs } = this.data; + if (res && res.data && res.data.states) { + tabs = this.data.tabs.map((item) => { + switch (item.key) { + case AfterServiceStatus.TO_AUDIT: + item.info = res.data.states.audit; + break; + case AfterServiceStatus.THE_APPROVED: + item.info = res.data.states.approved; + break; + case AfterServiceStatus.COMPLETE: + item.info = res.data.states.complete; + break; + case AfterServiceStatus.CLOSED: + item.info = res.data.states.closed; + break; + } + return item; + }); + } + if (res && res.data && res.data.dataList) { + dataList = (res.data.dataList || []).map((_data) => { + return { + id: _data.rights.rightsNo, + serviceNo: _data.rights.rightsNo, + storeName: _data.rights.storeName, + type: _data.rights.rightsType, + typeDesc: ServiceTypeDesc[_data.rights.rightsType], + typeDescIcon: + _data.rightsType === ServiceType.ONLY_REFUND + ? 'money-circle' + : 'return-goods-1', + status: _data.rights.rightsStatus, + statusName: _data.rights.userRightsStatusName, + statusDesc: _data.rights.userRightsStatusDesc, + amount: _data.rights.refundAmount, + goodsList: _data.rightsItem.map((item, i) => ({ + id: i, + thumb: item.goodsPictureUrl, + title: item.goodsName, + specs: (item.specInfo || []).map((s) => s.specValues || ''), + itemRefundAmount: item.itemRefundAmount, + rightsQuantity: item.itemRefundAmount, + })), + storeId: _data.storeId, + buttons: _data.buttonVOs || [], + logisticsNo: _data.logisticsVO.logisticsNo, // 退货物流单号 + logisticsCompanyName: _data.logisticsVO.logisticsCompanyName, // 退货物流公司 + logisticsCompanyCode: _data.logisticsVO.logisticsCompanyCode, // 退货物流公司 + remark: _data.logisticsVO.remark, // 退货备注 + logisticsVO: _data.logisticsVO, + }; + }); + } + return new Promise((resolve) => { + if (reset) { + this.setData( + { + dataList: [], + }, + () => resolve(), + ); + } else resolve(); + }).then(() => { + this.setData({ + tabs, + dataList: this.data.dataList.concat(dataList), + listLoading: dataList.length > 0 ? 0 : 2, + }); + }); + }) + .catch((err) => { + this.setData({ + listLoading: 3, + }); + return Promise.reject(err); + }); + }, + + onReTryLoad() { + this.getAfterServiceList(this.data.curTab); + }, + + onTabChange(e) { + const { value } = e.detail; + const tab = this.data.tabs.find((v) => v.key === value); + if (!tab) return; + this.refreshList(value); + }, + + refreshList(status = -1) { + this.page = { + size: 10, + num: 1, + }; + this.setData({ + curTab: status, + dataList: [], + }); + return this.getAfterServiceList(status, true); + }, + + onRefresh() { + this.refreshList(this.data.curTab); + }, + + // 点击订单卡片 + onAfterServiceCardTap(e) { + wx.navigateTo({ + url: `/pages/order/after-service-detail/index?rightsNo=${e.currentTarget.dataset.order.id}`, + }); + }, +}); diff --git a/scr/miniprogram-2/pages/order/after-service-list/index.json b/scr/miniprogram-2/pages/order/after-service-list/index.json new file mode 100644 index 0000000..46b5d09 --- /dev/null +++ b/scr/miniprogram-2/pages/order/after-service-list/index.json @@ -0,0 +1,15 @@ +{ + "navigationBarTitleText": "退款/售后", + "usingComponents": { + "wr-load-more": "/components/load-more/index", + "wr-after-service-button-bar": "../components/after-service-button-bar/index", + "wr-price": "/components/price/index", + "wr-order-card": "../components/order-card/index", + "wr-goods-card": "../components/goods-card/index", + "t-icon": "tdesign-miniprogram/icon/icon", + "t-toast": "tdesign-miniprogram/toast/toast", + "t-dialog": "tdesign-miniprogram/dialog/dialog", + "t-empty": "tdesign-miniprogram/empty/empty", + "t-pull-down-refresh": "tdesign-miniprogram/pull-down-refresh/pull-down-refresh" + } +} \ No newline at end of file diff --git a/scr/miniprogram-2/pages/order/after-service-list/index.wxml b/scr/miniprogram-2/pages/order/after-service-list/index.wxml new file mode 100644 index 0000000..41ddd74 --- /dev/null +++ b/scr/miniprogram-2/pages/order/after-service-list/index.wxml @@ -0,0 +1,73 @@ + + + + + + + {{order.typeDesc}} + + + + + + x {{goods.rightsQuantity}} + + + + {{order.statusDesc}} + + + + + + + + + 暂无退款或售后申请记录 + + + + + + + + diff --git a/scr/miniprogram-2/pages/order/after-service-list/index.wxss b/scr/miniprogram-2/pages/order/after-service-list/index.wxss new file mode 100644 index 0000000..d518cbc --- /dev/null +++ b/scr/miniprogram-2/pages/order/after-service-list/index.wxss @@ -0,0 +1,103 @@ +:host { + background-color: #f5f5f5; +} + +.list-loading { + height: 100rpx; +} + +.empty-wrapper { + height: calc(100vh - 88rpx); +} + +.page-container .order-goods-card-footer { + display: flex; + width: calc(100% - 190rpx); + justify-content: space-between; + position: absolute; + bottom: 20rpx; + left: 190rpx; +} + +.page-container .order-goods-card-footer .order-goods-card-footer-num { + color: #999; + line-height: 40rpx; +} + +.page-container .order-goods-card-footer .order-goods-card-footer-price-class { + font-size: 36rpx; + color: #333; + font-family: DIN Alternate; +} + +.page-container .order-goods-card-footer .order-goods-card-footer-price-decimal { + font-size: 28rpx; + color: #333; + font-family: DIN Alternate; +} + +.page-container .order-goods-card-footer .order-goods-card-footer-price-symbol { + color: #333; + font-size: 24rpx; + font-family: DIN Alternate; +} + +.page-container .wr-goods-card__specs { + margin: 14rpx 20rpx 0 0; +} + +.page-container .order-goods-card > wr-goods-card .wr-goods-card__title { + margin-right: 0; + -webkit-line-clamp: 1; +} + +.page-container .order-card .header .store-name { + width: 80%; + -webkit-line-clamp: 1; +} + +.page-container .order-card .header .store-name > view { + overflow: hidden; + width: 100%; + white-space: nowrap; + text-overflow: ellipsis; +} + +.page-container .status-desc { + box-sizing: border-box; + padding: 22rpx 20rpx; + font-size: 26rpx; + line-height: 1.3; + text-align: left; + color: #333333; + background-color: #f5f5f5; + border-radius: 8rpx; + word-wrap: break-word; + margin-top: 24rpx; + margin-bottom: 20rpx; +} + +.page-container .header__right { + font-size: 24rpx; + color: #fa4126; + display: flex; + align-items: center; +} + +.page-container .header__right__icon { + color: #d05b27; + font-size: 16px !important; + margin-right: 10rpx; +} + +.t-class-indicator { + color: #b9b9b9 !important; +} + +.add-notes__confirm { + color: #fa4126 !important; +} + +.page-container .header-class { + margin-bottom: 5rpx!important; +} \ No newline at end of file diff --git a/scr/miniprogram-2/pages/order/apply-service/index.js b/scr/miniprogram-2/pages/order/apply-service/index.js new file mode 100644 index 0000000..6b6dc2d --- /dev/null +++ b/scr/miniprogram-2/pages/order/apply-service/index.js @@ -0,0 +1,454 @@ +import Dialog from 'tdesign-miniprogram/dialog/index'; +import Toast from 'tdesign-miniprogram/toast/index'; +import { priceFormat } from '../../../utils/util'; +import { OrderStatus, ServiceType, ServiceReceiptStatus } from '../config'; +import reasonSheet from '../components/reason-sheet/reasonSheet'; +import { + fetchRightsPreview, + dispatchConfirmReceived, + fetchApplyReasonList, + dispatchApplyService, +} from '../../../services/order/applyService'; + +Page({ + query: {}, + data: { + uploading: false, // 凭证上传状态 + canApplyReturn: true, // 是否可退货 + goodsInfo: {}, + receiptStatusList: [ + { desc: '未收到货', status: ServiceReceiptStatus.NOT_RECEIPTED }, + { desc: '已收到货', status: ServiceReceiptStatus.RECEIPTED }, + ], + applyReasons: [], + serviceType: null, // 20-仅退款,10-退货退款 + serviceFrom: { + returnNum: 1, + receiptStatus: { desc: '请选择', status: null }, + applyReason: { desc: '请选择', type: null }, + // max-填写上限(单位分),current-当前值(单位分),temp输入框中的值(单位元) + amount: { max: 0, current: 0, temp: 0, focus: false }, + remark: '', + rightsImageUrls: [], + }, + maxApplyNum: 2, // 最大可申请售后的商品数 + amountTip: '', + showReceiptStatusDialog: false, + validateRes: { + valid: false, + msg: '', + }, + submitting: false, + inputDialogVisible: false, + uploadGridConfig: { + column: 3, + width: 212, + height: 212, + }, + serviceRequireType: '', + }, + + setWatcher(key, callback) { + let lastData = this.data; + const keys = key.split('.'); + keys.slice(0, -1).forEach((k) => { + lastData = lastData[k]; + }); + const lastKey = keys[keys.length - 1]; + this.observe(lastData, lastKey, callback); + }, + + observe(data, k, callback) { + let val = data[k]; + Object.defineProperty(data, k, { + configurable: true, + enumerable: true, + set: (value) => { + val = value; + callback(); + }, + get: () => { + return val; + }, + }); + }, + + validate() { + let valid = true; + let msg = ''; + // 检查必填项 + if (!this.data.serviceFrom.applyReason.type) { + valid = false; + msg = '请填写退款原因'; + } else if (!this.data.serviceFrom.amount.current) { + valid = false; + msg = '请填写退款金额'; + } + if (this.data.serviceFrom.amount.current <= 0) { + valid = false; + msg = '退款金额必须大于0'; + } + this.setData({ validateRes: { valid, msg } }); + }, + + onLoad(query) { + this.query = query; + if (!this.checkQuery()) return; + this.setData({ + canApplyReturn: query.canApplyReturn === 'true', + }); + this.init(); + this.inputDialog = this.selectComponent('#input-dialog'); + this.setWatcher('serviceFrom.returnNum', this.validate.bind(this)); + this.setWatcher('serviceFrom.applyReason', this.validate.bind(this)); + this.setWatcher('serviceFrom.amount', this.validate.bind(this)); + this.setWatcher('serviceFrom.rightsImageUrls', this.validate.bind(this)); + }, + + async init() { + try { + await this.refresh(); + } catch (e) {} + }, + + checkQuery() { + const { orderNo, skuId } = this.query; + if (!orderNo) { + Dialog.alert({ + content: '请先选择订单', + }).then(() => { + wx.redirectTo({ url: 'pages/order/order-list/index' }); + }); + return false; + } + if (!skuId) { + Dialog.alert({ + content: '请先选择商品', + }).then(() => { + wx.redirectTo(`pages/order/order-detail/index?orderNo=${orderNo}`); + }); + return false; + } + return true; + }, + + async refresh() { + wx.showLoading({ title: 'loading' }); + try { + const res = await this.getRightsPreview(); + wx.hideLoading(); + const goodsInfo = { + id: res.data.skuId, + thumb: res.data.goodsInfo && res.data.goodsInfo.skuImage, + title: res.data.goodsInfo && res.data.goodsInfo.goodsName, + spuId: res.data.spuId, + skuId: res.data.skuId, + specs: ((res.data.goodsInfo && res.data.goodsInfo.specInfo) || []).map( + (s) => s.specValue, + ), + paidAmountEach: res.data.paidAmountEach, + boughtQuantity: res.data.boughtQuantity, + }; + this.setData({ + goodsInfo, + 'serviceFrom.amount': { + max: res.data.refundableAmount, + current: res.data.refundableAmount, + }, + 'serviceFrom.returnNum': res.data.numOfSku, + amountTip: `最多可申请退款¥ ${priceFormat( + res.data.refundableAmount, + 2, + )},含发货运费¥ ${priceFormat(res.data.shippingFeeIncluded, 2)}`, + maxApplyNum: res.data.numOfSkuAvailable, + }); + } catch (err) { + wx.hideLoading(); + throw err; + } + }, + + async getRightsPreview() { + const { orderNo, skuId, spuId } = this.query; + const params = { + orderNo, + skuId, + spuId, + numOfSku: this.data.serviceFrom.returnNum, + }; + const res = await fetchRightsPreview(params); + return res; + }, + + onApplyOnlyRefund() { + wx.setNavigationBarTitle({ title: '申请退款' }); + this.setData({ serviceRequireType: 'REFUND_MONEY' }); + this.switchReceiptStatus(0); + }, + + onApplyReturnGoods() { + wx.setNavigationBarTitle({ title: '申请退货退款' }); + this.setData({ serviceRequireType: 'REFUND_GOODS' }); + const orderStatus = parseInt(this.query.orderStatus); + Promise.resolve() + .then(() => { + if (orderStatus === OrderStatus.PENDING_RECEIPT) { + return Dialog.confirm({ + title: '订单商品是否已经收到货', + content: '', + confirmBtn: '确认收货,并申请退货', + cancelBtn: '未收到货', + }).then(() => { + return dispatchConfirmReceived({ + parameter: { + logisticsNo: this.query.logisticsNo, + orderNo: this.query.orderNo, + }, + }); + }); + } + return; + }) + .then(() => { + this.setData({ serviceType: ServiceType.RETURN_GOODS }); + this.switchReceiptStatus(1); + }); + }, + + onApplyReturnGoodsStatus() { + reasonSheet({ + show: true, + title: '选择退款原因', + options: this.data.applyReasons.map((r) => ({ + title: r.desc, + })), + showConfirmButton: true, + showCancelButton: true, + emptyTip: '请选择退款原因', + }).then((indexes) => { + this.setData({ + 'serviceFrom.applyReason': this.data.applyReasons[indexes[0]], + }); + }); + }, + + onChangeReturnNum(e) { + const { value } = e.detail; + this.setData( + { + 'serviceFrom.returnNum': value, + }, + () => { + this.refresh(); + }, + ); + }, + + onApplyGoodsStatus() { + reasonSheet({ + show: true, + title: '请选择收货状态', + options: this.data.receiptStatusList.map((r) => ({ + title: r.desc, + })), + showConfirmButton: true, + emptyTip: '请选择收货状态', + }).then((indexes) => { + this.setData({ + 'serviceFrom.receiptStatus': this.data.receiptStatusList[indexes[0]], + }); + }); + }, + + switchReceiptStatus(index) { + const statusItem = this.data.receiptStatusList[index]; + // 没有找到对应的状态,则清空/初始化 + if (!statusItem) { + this.setData({ + showReceiptStatusDialog: false, + 'serviceFrom.receiptStatus': { desc: '请选择', status: null }, + 'serviceFrom.applyReason': { desc: '请选择', type: null }, // 收货状态改变时,初始化申请原因 + applyReasons: [], + }); + return; + } + // 仅选中项与当前项不一致时,才切换申请原因列表applyReasons + if ( + !statusItem || + statusItem.status === this.data.serviceFrom.receiptStatus.status + ) { + this.setData({ showReceiptStatusDialog: false }); + return; + } + this.getApplyReasons(statusItem.status).then((reasons) => { + this.setData({ + showReceiptStatusDialog: false, + 'serviceFrom.receiptStatus': statusItem, + 'serviceFrom.applyReason': { desc: '请选择', type: null }, // 收货状态改变时,重置申请原因 + applyReasons: reasons, + }); + }); + }, + + getApplyReasons(receiptStatus) { + const params = { rightsReasonType: receiptStatus }; + return fetchApplyReasonList(params) + .then((res) => { + return res.data.rightsReasonList.map((reason) => ({ + type: reason.id, + desc: reason.desc, + })); + }) + .catch(() => { + return []; + }); + }, + + onReceiptStatusDialogConfirm(e) { + const { index } = e.currentTarget.dataset; + this.switchReceiptStatus(index); + }, + + onAmountTap() { + this.setData({ + 'serviceFrom.amount.temp': priceFormat( + this.data.serviceFrom.amount.current, + ), + 'serviceFrom.amount.focus': true, + inputDialogVisible: true, + }); + this.inputDialog.setData({ + cancelBtn: '取消', + confirmBtn: '确定', + }); + this.inputDialog._onComfirm = () => { + this.setData({ + 'serviceFrom.amount.current': this.data.serviceFrom.amount.temp * 100, + }); + }; + this.inputDialog._onCancel = () => {}; + }, + + // 对输入的值进行过滤 + onAmountInput(e) { + let { value } = e.detail; + const regRes = value.match(/\d+(\.?\d*)?/); // 输入中,允许末尾为小数点 + value = regRes ? regRes[0] : ''; + this.setData({ 'serviceFrom.amount.temp': value }); + }, + + // 失去焦点时,更严格的过滤并转化为float + onAmountBlur(e) { + let { value } = e.detail; + const regRes = value.match(/\d+(\.?\d+)?/); // 失去焦点时,不允许末尾为小数点 + value = regRes ? regRes[0] : '0'; + value = parseFloat(value) * 100; + if (value > this.data.serviceFrom.amount.max) { + value = this.data.serviceFrom.amount.max; + } + this.setData({ + 'serviceFrom.amount.temp': priceFormat(value), + 'serviceFrom.amount.focus': false, + }); + }, + + onAmountFocus() { + this.setData({ 'serviceFrom.amount.focus': true }); + }, + + onRemarkChange(e) { + const { value } = e.detail; + this.setData({ + 'serviceFrom.remark': value, + }); + }, + + // 发起申请售后请求 + onSubmit() { + this.submitCheck().then(() => { + const params = { + rights: { + orderNo: this.query.orderNo, + refundRequestAmount: this.data.serviceFrom.amount.current, + rightsImageUrls: this.data.serviceFrom.rightsImageUrls, + rightsReasonDesc: this.data.serviceFrom.applyReason.desc, + rightsReasonType: this.data.serviceFrom.receiptStatus.status, + rightsType: this.data.serviceType, + }, + rightsItem: [ + { + itemTotalAmount: + this.data.goodsInfo.price * this.data.serviceFrom.returnNum, + rightsQuantity: this.data.serviceFrom.returnNum, + skuId: this.query.skuId, + spuId: this.query.spuId, + }, + ], + refundMemo: this.data.serviceFrom.remark.current, + }; + this.setData({ submitting: true }); + // 发起申请售后请求 + dispatchApplyService(params) + .then((res) => { + Toast({ + context: this, + selector: '#t-toast', + message: '申请成功', + icon: '', + }); + + wx.redirectTo({ + url: `/pages/order/after-service-detail/index?rightsNo=${res.data.rightsNo}`, + }); + }) + .then(() => this.setData({ submitting: false })) + .catch(() => this.setData({ submitting: false })); + }); + }, + + submitCheck() { + return new Promise((resolve) => { + const { msg, valid } = this.data.validateRes; + if (!valid) { + Toast({ + context: this, + selector: '#t-toast', + message: msg, + icon: '', + }); + return; + } + resolve(); + }); + }, + + handleSuccess(e) { + const { files } = e.detail; + this.setData({ + 'sessionFrom.rightsImageUrls': files, + }); + }, + + handleRemove(e) { + const { index } = e.detail; + const { + sessionFrom: { rightsImageUrls }, + } = this.data; + rightsImageUrls.splice(index, 1); + this.setData({ + 'sessionFrom.rightsImageUrls': rightsImageUrls, + }); + }, + + handleComplete() { + this.setData({ + uploading: false, + }); + }, + + handleSelectChange() { + this.setData({ + uploading: true, + }); + }, +}); diff --git a/scr/miniprogram-2/pages/order/apply-service/index.json b/scr/miniprogram-2/pages/order/apply-service/index.json new file mode 100644 index 0000000..cfeaf7d --- /dev/null +++ b/scr/miniprogram-2/pages/order/apply-service/index.json @@ -0,0 +1,19 @@ +{ + "navigationBarTitleText": "选择售后类型", + "usingComponents": { + "wr-price": "/components/price/index", + "wr-order-goods-card": "../components/order-goods-card/index", + "wr-reason-sheet": "../components/reason-sheet/index", + "t-cell": "tdesign-miniprogram/cell/cell", + "t-icon": "tdesign-miniprogram/icon/icon", + "t-toast": "tdesign-miniprogram/toast/toast", + "t-dialog": "tdesign-miniprogram/dialog/dialog", + "t-button": "tdesign-miniprogram/button/button", + "t-cell-group": "tdesign-miniprogram/cell-group/cell-group", + "t-stepper": "tdesign-miniprogram/stepper/stepper", + "t-popup": "tdesign-miniprogram/popup/popup", + "t-textarea": "tdesign-miniprogram/textarea/textarea", + "t-input": "tdesign-miniprogram/input/input", + "t-uploader": "tdesign-miniprogram/upload/upload" + } +} \ No newline at end of file diff --git a/scr/miniprogram-2/pages/order/apply-service/index.wxml b/scr/miniprogram-2/pages/order/apply-service/index.wxml new file mode 100644 index 0000000..8c451d6 --- /dev/null +++ b/scr/miniprogram-2/pages/order/apply-service/index.wxml @@ -0,0 +1,220 @@ + + + + + + x {{goodsInfo.boughtQuantity}} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 修改 + + + + + + + + + + + + + + + + + + + 上传凭证 + (最多3张) + + + + + + + 提交 + + + + + + + + + + {{item.desc}} + + + 取消 + + + + + + + 退款金额 + + + ¥ + + {{amountTip}} + + + + + diff --git a/scr/miniprogram-2/pages/order/apply-service/index.wxss b/scr/miniprogram-2/pages/order/apply-service/index.wxss new file mode 100644 index 0000000..c4ed87f --- /dev/null +++ b/scr/miniprogram-2/pages/order/apply-service/index.wxss @@ -0,0 +1,290 @@ +:host { + background-color: #f5f5f5; +} +.select-service .service-form .service-from-group { + margin-top: 20rpx; +} +.select-service .service-form { + padding-bottom: calc(env(safe-area-inset-bottom) + 80rpx); +} + +.order-goods-card-footer { + display: flex; + width: calc(100% - 190rpx); + justify-content: space-between; + position: absolute; + bottom: 0; + left: 190rpx; +} + +.order-goods-card-footer-num { + color: #999; +} + +.select-service .order-goods-card-footer .order-goods-card-footer-price-class { + font-size: 36rpx; + color: #333; + font-family: DIN Alternate; +} +.select-service + .order-goods-card-footer + .order-goods-card-footer-price-decimal { + font-size: 28rpx; + color: #333; + font-family: DIN Alternate; +} +.select-service .order-goods-card-footer .order-goods-card-footer-price-symbol { + color: #333; + font-size: 24rpx; + font-family: DIN Alternate; +} + +.select-service .remark { + min-height: 110rpx; + border-radius: 10rpx; + margin-top: 20rpx; + background-color: #f5f5f5; +} +.select-service .remark::after { + border: none; +} + +.select-service .special-cell .special-cell-note { + display: flex; + flex-direction: column; +} + +.select-service .special-cell .wr-cell__title { + margin-right: 100rpx; +} + +.select-service .special-cell .special-cell-note-price-class { + font-size: 36rpx; + color: #fa4126; + font-family: DIN Alternate; +} +.select-service .special-cell .special-cell-note-price-decimal { + font-size: 28rpx; + color: #fa4126; + font-family: DIN Alternate; +} +.select-service .special-cell .special-cell-note-price-symbol { + color: #fa4126; + font-size: 24rpx; + font-family: DIN Alternate; +} + +.select-service .bottom-bar__btn { + width: 686rpx; + background-color: #fa4126; + color: white; + font-size: 32rpx; + border-radius: 48rpx; + position: absolute; + left: 50%; + top: 20rpx; + transform: translateX(-50%); +} +.select-service .bottom-bar__btn::after { + border: none; +} +.select-service .bottom-bar__btn.disabled { + background-color: #c6c6c6; +} +.select-service .bottom-bar__btn.disabled::after { + border: none; +} +.select-service .order-goods-card .wr-goods-card { + padding: 0 30rpx; +} + +.order-goods-card-footer { + display: flex; + width: calc(100% - 190rpx); + justify-content: space-between; + position: absolute; + bottom: 20rpx; + left: 190rpx; +} + +.order-goods-card-footer-num { + color: #999; + line-height: 40rpx; +} + +.order-goods-card-title-class { + width: 10rpx !important; +} + +.input-dialog__content .input-dialog__input { + font-size: 72rpx !important; + height: 64rpx; +} + +.input-dialog__content { + text-align: left; +} + +.input-dialog__content .input { + font-size: 48rpx; + padding-left: 0; + padding-right: 0; +} + +.input-dialog__content .tips { + margin-top: 24rpx; + font-size: 24rpx; + color: #999999; +} + +.t-input__name { + width: 10rpx !important; +} + +.input-dialog__title { + color: #333; + font-size: 32rpx; + font-weight: normal; +} + +.dialog--service-status { + background-color: #f3f4f5; + overflow: hidden; +} +.dialog--service-status .options .option { + color: #333333; + font-size: 30rpx; + text-align: center; + height: 100rpx; + line-height: 100rpx; + background-color: white; +} +.dialog--service-status .options .option:not(:last-child) { + border-bottom: 1rpx solid #e6e6e6; +} +.dialog--service-status .options .option--active { + opacity: 0.5; +} +.dialog--service-status .options .option.main { + color: #fa4126; +} +.dialog--service-status .cancel { + color: #333333; + font-size: 30rpx; + text-align: center; + height: 100rpx; + line-height: 100rpx; + background-color: white; + margin-top: 20rpx; +} +.dialog--service-status .cancel--active { + opacity: 0.5; +} +.amount-dialog--focus .popup__content--center, +.remark-dialog--focus .popup__content--center { + top: 100rpx; + transform: translate(-50%, 0); +} +.dialog .dialog__button-confirm { + color: #fa4126; + color: var(--color-primary, #fa4126); +} +.select-service .bottom-bar { + background-color: #fff; + position: fixed; + bottom: 0; + left: 0; + width: 100%; + height: 158rpx; + z-index: 3; +} +.order-goods-card { + background: #fff; + margin-bottom: 24rpx; +} +.add-notes__confirm { + color: #fa4126 !important; +} +.service-from-group__wrapper { + display: flex; + flex-direction: column; + font-family: DIN Alternate; + font-weight: bold; + font-size: 36rpx; + text-align: right; + color: #fa4126; +} +.service-from-group__price { + display: flex; + align-items: center; + color: #bbb; + font-size: 24rpx; + position: relative; + left: 30rpx; +} +.service-from-group__textarea { + margin-top: 32rpx; + background: #f5f5f5 !important; + border-radius: 16rpx; +} +.service-from-group__textarea + .t-textarea__wrapper + .t-textarea__wrapper-textarea { + height: 136rpx; + box-sizing: border-box; +} +.service-from-group__grid { + padding: 0 32rpx 48rpx; + background: #fff; + margin-bottom: 148rpx; +} +.select-service .t-cell__left { + margin-right: 0 !important; +} + +.refund-money__description { + font-size: 24rpx !important; +} + +.upload-desc { + text-align: center; + display: flex; + flex-direction: column; + font-size: 24rpx; + color: #999; +} + +.t-cell__left__icon { + position: relative; + top: -24rpx; + margin-right: 18rpx; +} + +.service-choice .t-cell__title-text { + color: #333; + font-weight: bold; +} + +.service-form + .service-from-group + .service-from-group__wrapper + .refund-money-price-class { + font-size: 36rpx; + font-family: DIN Alternate; +} + +.service-form + .service-from-group + .service-from-group__wrapper + .refund-money-price-decimal { + font-size: 28rpx; + font-family: DIN Alternate; +} + +.service-form + .service-from-group + .service-from-group__wrapper + .refund-money-price-symbol { + font-size: 24rpx; + font-family: DIN Alternate; +} diff --git a/scr/miniprogram-2/pages/order/components/after-service-button-bar/index.js b/scr/miniprogram-2/pages/order/components/after-service-button-bar/index.js new file mode 100644 index 0000000..c1f813d --- /dev/null +++ b/scr/miniprogram-2/pages/order/components/after-service-button-bar/index.js @@ -0,0 +1,95 @@ +import Dialog from 'tdesign-miniprogram/dialog/index'; +import Toast from 'tdesign-miniprogram/toast/index'; + +import { cancelRights } from '../../after-service-detail/api'; +import { ServiceButtonTypes } from '../../config'; + +Component({ + properties: { + service: { + type: Object, + observer(service) { + const buttonsRight = service.buttons || service.buttonVOs || []; + this.setData({ + buttons: { + left: [], + right: buttonsRight, + }, + }); + }, + }, + }, + + data: { + service: {}, + buttons: { + left: [], + right: [], + }, + }, + + methods: { + // 点击【订单操作】按钮,根据按钮类型分发 + onServiceBtnTap(e) { + const { type } = e.currentTarget.dataset; + switch (type) { + case ServiceButtonTypes.REVOKE: + this.onConfirm(this.data.service); + break; + case ServiceButtonTypes.FILL_TRACKING_NO: + this.onFillTrackingNo(this.data.service); + break; + case ServiceButtonTypes.CHANGE_TRACKING_NO: + this.onChangeTrackingNo(this.data.service); + break; + case ServiceButtonTypes.VIEW_DELIVERY: + this.viewDelivery(this.data.service); + break; + } + }, + + onFillTrackingNo(service) { + wx.navigateTo({ + url: `/pages/order/fill-tracking-no/index?rightsNo=${service.id}`, + }); + }, + + viewDelivery(service) { + wx.navigateTo({ + url: `/pages/order/delivery-detail/index?data=${JSON.stringify( + service.logistics || service.logisticsVO, + )}&source=2`, + }); + }, + + onChangeTrackingNo(service) { + wx.navigateTo({ + url: `/pages/order/fill-tracking-no/index?rightsNo=${ + service.id + }&logisticsNo=${service.logisticsNo}&logisticsCompanyName=${ + service.logisticsCompanyName + }&logisticsCompanyCode=${service.logisticsCompanyCode}&remark=${ + service.remark || '' + }`, + }); + }, + + onConfirm() { + Dialog.confirm({ + title: '是否撤销退货申请?', + content: '', + confirmBtn: '撤销申请', + cancelBtn: '不撤销', + }).then(() => { + const params = { rightsNo: this.data.service.id }; + return cancelRights(params).then(() => { + Toast({ + context: this, + selector: '#t-toast', + message: '你确认撤销申请', + }); + }); + }); + }, + }, +}); diff --git a/scr/miniprogram-2/pages/order/components/after-service-button-bar/index.json b/scr/miniprogram-2/pages/order/components/after-service-button-bar/index.json new file mode 100644 index 0000000..75d1e24 --- /dev/null +++ b/scr/miniprogram-2/pages/order/components/after-service-button-bar/index.json @@ -0,0 +1,6 @@ +{ + "component": true, + "usingComponents": { + "t-button": "tdesign-miniprogram/button/button" + } +} diff --git a/scr/miniprogram-2/pages/order/components/after-service-button-bar/index.wxml b/scr/miniprogram-2/pages/order/components/after-service-button-bar/index.wxml new file mode 100644 index 0000000..8f48e2a --- /dev/null +++ b/scr/miniprogram-2/pages/order/components/after-service-button-bar/index.wxml @@ -0,0 +1,31 @@ + + + + {{leftBtn.name}} + + + + + {{rightBtn.name}} + + + + diff --git a/scr/miniprogram-2/pages/order/components/after-service-button-bar/index.wxss b/scr/miniprogram-2/pages/order/components/after-service-button-bar/index.wxss new file mode 100644 index 0000000..2c31839 --- /dev/null +++ b/scr/miniprogram-2/pages/order/components/after-service-button-bar/index.wxss @@ -0,0 +1,46 @@ +:host { + width: 100%; +} +.btn-bar { + display: flex; + justify-content: space-between; + align-items: center; + line-height: 1; +} +.btn-bar .order-btn { + background-color: inherit; + font-size: 26rpx; + padding: 16rpx 28rpx; + line-height: 1; + border-radius: unset; + min-width: 160rpx; + border-radius: 32rpx; + height: 60rpx; + margin-right: 10rpx; +} + +.btn-bar .left .order-btn:not(:first-child), +.btn-bar .right .order-btn:not(:first-child) { + margin-left: 20rpx; +} +.btn-bar .left .delete-btn { + font-size: 22rpx; +} +.btn-bar .left .delete-btn::after { + display: none; +} +.btn-bar .right .normal { + color: #333; + font-size: 28rpx; +} +.btn-bar .right .normal:after { + border-color: #bbbbbb; +} +.btn-bar .right .primary { + color: #fa550f; + color: var(--color-primary, #fa550f); +} +.btn-bar .right .primary:after { + border-color: #fa550f; + border-color: var(--color-primary, #fa550f); +} diff --git a/scr/miniprogram-2/pages/order/components/customer-service/index.js b/scr/miniprogram-2/pages/order/components/customer-service/index.js new file mode 100644 index 0000000..419b97f --- /dev/null +++ b/scr/miniprogram-2/pages/order/components/customer-service/index.js @@ -0,0 +1,38 @@ +Component({ + externalClasses: ['wr-class'], + + properties: { + phoneNumber: String, + desc: String, + }, + + data: { + show: false, + }, + + methods: { + onBtnTap() { + this.setData({ + show: true, + }); + }, + + onDialogClose() { + this.setData({ + show: false, + }); + }, + + onCall() { + const { phoneNumber } = this.properties; + wx.makePhoneCall({ + phoneNumber, + }); + }, + onCallOnlineService() { + wx.showToast({ + title: '你点击了在线客服', + }); + }, + }, +}); diff --git a/scr/miniprogram-2/pages/order/components/customer-service/index.json b/scr/miniprogram-2/pages/order/components/customer-service/index.json new file mode 100644 index 0000000..6e4c04e --- /dev/null +++ b/scr/miniprogram-2/pages/order/components/customer-service/index.json @@ -0,0 +1,6 @@ +{ + "component": true, + "usingComponents": { + "t-popup": "tdesign-miniprogram/popup/popup" + } +} diff --git a/scr/miniprogram-2/pages/order/components/customer-service/index.wxml b/scr/miniprogram-2/pages/order/components/customer-service/index.wxml new file mode 100644 index 0000000..f5413a4 --- /dev/null +++ b/scr/miniprogram-2/pages/order/components/customer-service/index.wxml @@ -0,0 +1,23 @@ + +联系客服 + + + + + 服务时间: + {{desc}} + + + 呼叫 {{phoneNumber}} + + 在线客服 + 取消 + + + + diff --git a/scr/miniprogram-2/pages/order/components/customer-service/index.wxss b/scr/miniprogram-2/pages/order/components/customer-service/index.wxss new file mode 100644 index 0000000..75f0363 --- /dev/null +++ b/scr/miniprogram-2/pages/order/components/customer-service/index.wxss @@ -0,0 +1,48 @@ +.text-btn { + display: inline; + color: #333; + font-size: 24rpx; +} +.text-btn--active { + opacity: 0.5; +} +.dialog--customer-service { + background-color: #f3f4f5; + overflow: hidden; +} +.dialog--customer-service .content { + font-size: 26rpx; + margin: 32rpx 30rpx; + text-align: center; +} +.dialog--customer-service .content .title { + display: inline; + color: #999999; + font-weight: bold; +} +.dialog--customer-service .content .subtitle { + display: inline; + color: #999999; +} +.dialog--customer-service .options .option { + color: #333333; + font-size: 30rpx; + text-align: center; + height: 100rpx; + line-height: 100rpx; + background-color: white; +} +.dialog--customer-service .options .option:not(:last-child) { + margin-bottom: 20rpx; +} +.dialog--customer-service .options .option--active { + opacity: 0.5; +} +.dialog--customer-service .options .option.main { + color: #333; +} +.dialog--customer-service .options .option.online { + position: relative; + top: -17rpx; + margin-bottom: 2rpx; +} diff --git a/scr/miniprogram-2/pages/order/components/goods-card/index.js b/scr/miniprogram-2/pages/order/components/goods-card/index.js new file mode 100644 index 0000000..a4409e3 --- /dev/null +++ b/scr/miniprogram-2/pages/order/components/goods-card/index.js @@ -0,0 +1,264 @@ +Component({ + options: { + multipleSlots: true, // 在组件定义时的选项中启用多slot支持 + addGlobalClass: true, + }, + intersectionObserverContext: null, + + externalClasses: [ + 'card-class', + 'title-class', + 'desc-class', + 'num-class', + 'thumb-class', + 'specs-class', + 'price-class', + 'origin-price-class', + 'price-prefix-class', + ], + + relations: { + '../order-card/index': { + type: 'ancestor', + linked(target) { + this.parent = target; + }, + }, + }, + + properties: { + hidden: { + // 设置为null代表不做类型转换 + type: null, + value: false, + observer(hidden) { + // null就是代表没有设置,没有设置的话不setData,防止祖先组件触发的setHidden操作被覆盖 + if (hidden !== null) { + this.setHidden(!!hidden); + } + }, + }, + id: { + type: String, + // `goods-card-88888888` + // 不能在这里写生成逻辑,如果在这里写,那么假设有多个goods-list时,他们将共享这个值 + value: '', + observer: (id) => { + this.genIndependentID(id); + if (this.properties.thresholds?.length) { + this.createIntersectionObserverHandle(); + } + }, + }, + data: { + type: Object, + observer(goods) { + // 有ID的商品才渲染 + if (!goods) { + return; + } + + /** 划线价是否有效 */ + let isValidityLinePrice = true; + // 判断一次划线价格是否合理 + if ( + goods.originPrice && + goods.price && + goods.originPrice < goods.price + ) { + isValidityLinePrice = false; + } + + // 敲定换行数量默认值 + if (goods.lineClamp === undefined || goods.lineClamp <= 0) { + // tag数组长度 大于0 且 可见 + // 指定换行为1行 + if ((goods.tags?.length || 0) > 0 && !goods.hideKey?.tags) { + goods.lineClamp = 1; + } else { + goods.lineClamp = 2; + } + } + + this.setData({ goods, isValidityLinePrice }); + }, + }, + layout: { + type: String, + value: 'horizontal', + }, + thumbMode: { + type: String, + value: 'aspectFill', + }, + thumbWidth: Number, + thumbHeight: Number, + priceFill: { + type: Boolean, + value: true, + }, + currency: { + type: String, + value: '¥', + }, + lazyLoad: { + type: Boolean, + value: false, + }, + centered: { + type: Boolean, + value: false, + }, + showCart: { + type: Boolean, + value: false, + }, + pricePrefix: { + type: String, + value: '', + }, + cartSize: { + type: Number, + value: 48, + }, + cartColor: { + type: String, + value: '#FA550F', + }, + /** 元素可见监控阈值, 数组长度大于0就创建 */ + thresholds: { + type: Array, + value: [], + observer(current) { + if (current && current.length) { + this.createIntersectionObserverHandle(); + } else { + this.clearIntersectionObserverHandle(); + } + }, + }, + specsIconClassPrefix: { + type: String, + value: 'wr', + }, + specsIcon: { + type: String, + value: 'expand_more', + }, + addCartIconClassPrefix: { + type: String, + value: 'wr', + }, + addCartIcon: { + type: String, + value: 'cart', + }, + }, + + data: { + hiddenInData: false, + independentID: '', + goods: { id: '' }, + /** 保证划线价格不小于原价,否则不渲染划线价 */ + isValidityLinePrice: false, + }, + + lifetimes: { + ready() { + this.init(); + }, + detached() { + this.clear(); + }, + }, + + methods: { + clickHandle() { + this.triggerEvent('click', { goods: this.data.goods }); + }, + clickThumbHandle() { + this.triggerEvent('thumb', { goods: this.data.goods }); + }, + clickTagHandle(evt) { + const { index } = evt.currentTarget.dataset; + this.triggerEvent('tag', { goods: this.data.goods, index }); + }, + // 加入购物车 + addCartHandle(e) { + const { id } = e.currentTarget; + const { id: cardID } = e.currentTarget.dataset; + this.triggerEvent('add-cart', { + ...e.detail, + id, + cardID, + goods: this.data.goods, + }); + }, + genIndependentID(id, cb) { + let independentID; + if (id) { + independentID = id; + } else { + // `goods-card-88888888` + independentID = `goods-card-${~~(Math.random() * 10 ** 8)}`; + } + this.setData({ independentID }, cb); + }, + + init() { + const { thresholds, id, hidden } = this.properties; + if (hidden !== null) { + this.setHidden(!!hidden); + } + + this.genIndependentID(id || '', () => { + if (thresholds && thresholds.length) { + this.createIntersectionObserverHandle(); + } + }); + }, + + clear() { + this.clearIntersectionObserverHandle(); + }, + + setHidden(hidden) { + this.setData({ hiddenInData: !!hidden }); + }, + + createIntersectionObserverHandle() { + if (this.intersectionObserverContext || !this.data.independentID) { + return; + } + + this.intersectionObserverContext = wx + .createIntersectionObserver(this, { + thresholds: this.properties.thresholds, + }) + .relativeToViewport(); + + this.intersectionObserverContext.observe( + `#${this.data.independentID}`, + (res) => { + this.intersectionObserverCB(res); + }, + ); + }, + intersectionObserverCB(ob) { + this.triggerEvent('ob', { + goods: this.data.goods, + context: this.intersectionObserverContext, + ob, + }); + }, + clearIntersectionObserverHandle() { + if (this.intersectionObserverContext) { + try { + this.intersectionObserverContext.disconnect(); + } catch (e) {} + + this.intersectionObserverContext = null; + } + }, + }, +}); diff --git a/scr/miniprogram-2/pages/order/components/goods-card/index.json b/scr/miniprogram-2/pages/order/components/goods-card/index.json new file mode 100644 index 0000000..0dbb3d8 --- /dev/null +++ b/scr/miniprogram-2/pages/order/components/goods-card/index.json @@ -0,0 +1,8 @@ +{ + "component": true, + "usingComponents": { + "price": "/components/price/index", + "t-image": "/components/webp-image/index", + "t-icon": "tdesign-miniprogram/icon/icon" + } +} \ No newline at end of file diff --git a/scr/miniprogram-2/pages/order/components/goods-card/index.wxml b/scr/miniprogram-2/pages/order/components/goods-card/index.wxml new file mode 100644 index 0000000..b14aed5 --- /dev/null +++ b/scr/miniprogram-2/pages/order/components/goods-card/index.wxml @@ -0,0 +1,77 @@ + + diff --git a/scr/miniprogram-2/pages/order/components/goods-card/index.wxss b/scr/miniprogram-2/pages/order/components/goods-card/index.wxss new file mode 100644 index 0000000..7bcb096 --- /dev/null +++ b/scr/miniprogram-2/pages/order/components/goods-card/index.wxss @@ -0,0 +1,254 @@ +.wr-goods-card { + box-sizing: border-box; + font-size: 24rpx; +} +.wr-goods-card__main { + position: relative; + display: flex; + line-height: 1; + flex-direction: row; + background: transparent; + padding: 16rpx 0rpx; +} +.wr-goods-card.center .wr-goods-card__main { + align-items: center; + justify-content: center; +} +.wr-goods-card__thumb { + flex-shrink: 0; + position: relative; + width: 176rpx; + height: 176rpx; +} +.wr-goods-card__thumb-com { + width: 176rpx; + height: 176rpx; + border-radius: 8rpx; + overflow: hidden; +} +.wr-goods-card__thumb:empty { + display: none; + margin: 0; +} + +.wr-goods-card__body { + display: flex; + margin: 0 0 0 16rpx; + flex-direction: row; + flex: 1 1 auto; + min-height: 176rpx; +} +.wr-goods-card__long_content { + display: flex; + flex-direction: column; + overflow: hidden; + flex: 1 1 auto; +} +.wr-goods-card__long_content .goods_tips { + width: 100%; + margin-top: 16rpx; + text-align: right; + color: #fa4126; + font-size: 24rpx; + line-height: 32rpx; + font-weight: bold; +} +.wr-goods-card__title { + flex-shrink: 0; + font-size: 28rpx; + color: #333; + line-height: 40rpx; + font-weight: 400; + display: -webkit-box; + -webkit-box-orient: vertical; + overflow: hidden; + word-break: break-word; +} +.wr-goods-card__title__prefix-tags { + display: inline-flex; +} +.wr-goods-card__title__prefix-tags .prefix-tag { + margin: 0 8rpx 0 0; +} +.wr-goods-card__desc { + font-size: 24rpx; + color: #f5f5f5; + line-height: 40rpx; + display: -webkit-box; + -webkit-box-orient: vertical; + -webkit-line-clamp: 2; + overflow: hidden; +} +.wr-goods-card__specs__desc, +.wr-goods-card__specs__text { + font-size: 24rpx; + height: 32rpx; + line-height: 32rpx; + color: #999999; + margin: 8rpx 0; +} +.wr-goods-card__specs__desc { + display: flex; + align-self: flex-start; + flex-direction: row; +} +.wr-goods-card__specs__desc-text { + height: 100%; + max-width: 380rpx; + word-break: break-all; + overflow: hidden; + display: -webkit-box; + -webkit-box-orient: vertical; + -webkit-line-clamp: 1; +} +.wr-goods-card__specs__desc-icon { + line-height: inherit; + margin-left: 8rpx; + font-size: 24rpx; + color: #bbb; +} +.wr-goods-card__specs__text { + display: -webkit-box; + -webkit-box-orient: vertical; + -webkit-line-clamp: 1; + overflow: hidden; + text-overflow: ellipsis; + word-break: break-all; +} +.wr-goods-card__tags { + display: flex; + flex-direction: row; + flex-wrap: wrap; + margin: 16rpx 0 0 0; +} +.wr-goods-card__tag { + color: #fa550f; + background: transparent; + font-size: 20rpx; + border: 1rpx solid #fa550f; + padding: 0 8rpx; + height: 30rpx; + line-height: 30rpx; + margin: 0 8rpx 8rpx 0; + display: block; + overflow: hidden; + white-space: nowrap; + word-break: keep-all; + text-overflow: ellipsis; +} +.wr-goods-card__short_content { + display: flex; + flex-direction: column; + justify-content: flex-start; + align-items: flex-end; + margin: 0 0 0 46rpx; +} +.wr-goods-card__price__prefix { + order: 0; + color: #666; + margin: 0; +} +.wr-goods-card__price { + white-space: nowrap; + font-weight: bold; + order: 1; + color: #fa4126; + font-size: 36rpx; + margin: 0; + line-height: 48rpx; +} +.wr-goods-card__origin-price { + white-space: nowrap; + font-weight: normal; + order: 2; + color: #aaaaaa; + font-size: 24rpx; + margin: 0; +} +.wr-goods-card__num { + white-space: nowrap; + order: 4; + font-size: 24rpx; + color: #999; + margin: 20rpx 0 0 auto; +} +.wr-goods-card__num__prefix { + color: inherit; +} +.wr-goods-card__add-cart { + order: 3; + margin: auto 0 0 auto; +} +.wr-goods-card.horizontal-wrap .wr-goods-card__thumb { + width: 192rpx; + height: 192rpx; + border-radius: 8rpx; + overflow: hidden; +} +.wr-goods-card.horizontal-wrap .wr-goods-card__body { + flex-direction: column; +} +.wr-goods-card.horizontal-wrap .wr-goods-card__short_content { + flex-direction: row; + align-items: center; + margin: 16rpx 0 0 0; +} + +.wr-goods-card.horizontal-wrap .wr-goods-card__num { + margin: 0 0 0 auto; +} +.wr-goods-card.vertical .wr-goods-card__main { + padding: 0 0 22rpx 0; + flex-direction: column; +} +.wr-goods-card.vertical .wr-goods-card__thumb { + width: 340rpx; + height: 340rpx; +} +.wr-goods-card.vertical .wr-goods-card__body { + margin: 20rpx 20rpx 0 20rpx; + flex-direction: column; +} +.wr-goods-card.vertical .wr-goods-card__long_content { + overflow: hidden; +} +.wr-goods-card.vertical .wr-goods-card__title { + line-height: 36rpx; +} +.wr-goods-card.vertical .wr-goods-card__short_content { + margin: 20rpx 0 0 0; +} +.wr-goods-card.vertical .wr-goods-card__price { + order: 2; + color: #fa4126; + margin: 20rpx 0 0 0; +} +.wr-goods-card.vertical .wr-goods-card__origin-price { + order: 1; +} +.wr-goods-card.vertical .wr-goods-card__add-cart { + position: absolute; + bottom: 20rpx; + right: 20rpx; +} + +.wr-goods-card__short_content .no_storage { + display: flex; + align-items: center; + justify-content: space-between; + height: 40rpx; + color: #333; + font-size: 24rpx; + line-height: 32rpx; + width: 100%; +} + +.no_storage .no_storage__right { + width: 80rpx; + height: 40rpx; + border-radius: 20rpx; + border: 2rpx solid #fa4126; + line-height: 40rpx; + text-align: center; + color: #fa4126; +} diff --git a/scr/miniprogram-2/pages/order/components/noGoods/noGoods.js b/scr/miniprogram-2/pages/order/components/noGoods/noGoods.js new file mode 100644 index 0000000..53b6f86 --- /dev/null +++ b/scr/miniprogram-2/pages/order/components/noGoods/noGoods.js @@ -0,0 +1,57 @@ +Component({ + properties: { + settleDetailData: { + type: Object, + value: {}, + observer(settleDetailData) { + const { + outOfStockGoodsList, + abnormalDeliveryGoodsList, + inValidGoodsList, + limitGoodsList, + } = settleDetailData; + // 弹窗逻辑 限购 超出配送范围 失效 库存不足; + const tempList = + limitGoodsList || + abnormalDeliveryGoodsList || + inValidGoodsList || + outOfStockGoodsList || + []; + + tempList.forEach((goods, index) => { + goods.id = index; + goods.unSettlementGoods && + goods.unSettlementGoods.forEach((ele) => { + ele.name = ele.goodsName; + ele.price = ele.payPrice; + ele.imgUrl = ele.image; + }); + }); + this.setData({ + // settleDetailData, + goodsList: tempList, + }); + }, + }, + }, + + data: { + goodList: [], + }, + methods: { + onCard(e) { + const { item } = e.currentTarget.dataset; + if (item === 'cart') { + // 购物车 + Navigator.gotoPage('/cart'); + } else if (item === 'orderSure') { + // 结算页 + this.triggerEvent('change', undefined); + } + }, + onDelive() { + // 修改配送地址 + Navigator.gotoPage('/address', { type: 'orderSure' }); + }, + }, +}); diff --git a/scr/miniprogram-2/pages/order/components/noGoods/noGoods.json b/scr/miniprogram-2/pages/order/components/noGoods/noGoods.json new file mode 100644 index 0000000..31f62da --- /dev/null +++ b/scr/miniprogram-2/pages/order/components/noGoods/noGoods.json @@ -0,0 +1,8 @@ +{ + "component": true, + "usingComponents": { + "wr-order-card": "/pages/order/components/order-card/index", + "wr-goods-card": "/components/goods-card/index", + "wr-order-goods-card": "/pages/order/components/order-goods-card/index" + } +} \ No newline at end of file diff --git a/scr/miniprogram-2/pages/order/components/noGoods/noGoods.wxml b/scr/miniprogram-2/pages/order/components/noGoods/noGoods.wxml new file mode 100644 index 0000000..1153a36 --- /dev/null +++ b/scr/miniprogram-2/pages/order/components/noGoods/noGoods.wxml @@ -0,0 +1,55 @@ + + var isOnlyBack = function(data) { + return data.limitGoodsList || (data.inValidGoodsList && !data.storeGoodsList); + } + + var isShowChangeAdress = function(data) { + return data.abnormalDeliveryGoodsList + } + + var isShowKeepPay = function(data) { + return data.outOfStockGoodsList || (data.storeGoodsList && data.inValidGoodsList); + } + + module.exports = { + isOnlyBack:isOnlyBack, + isShowChangeAdress: isShowChangeAdress, + isShowKeepPay: isShowKeepPay, + } + + + + 限购商品信息 + 以下商品限购数量,建议您修改商品数量 + + + 不支持配送 + 以下店铺的商品不支持配送,请更改地址或去掉对应店铺商品再进行结算 + + + 部分商品库存不足或失效 + 请返回购物车重新选择商品,如果继续结算将自动忽略库存不足或失效的商品。 + + + 全部商品库存不足或失效 + 请返回购物车重新选择商品 + + + + + + + + + + + 返回购物车 + + + 修改配送地址 + + + 继续结算 + + + diff --git a/scr/miniprogram-2/pages/order/components/noGoods/noGoods.wxss b/scr/miniprogram-2/pages/order/components/noGoods/noGoods.wxss new file mode 100644 index 0000000..0331d40 --- /dev/null +++ b/scr/miniprogram-2/pages/order/components/noGoods/noGoods.wxss @@ -0,0 +1,68 @@ +/* 层级定义 +@z-index-0: 1; +@z-index-1: 100; +@z-index-2: 200; +@z-index-5: 500; +@z-index-component: 1000; // 通用组件级别 +@z-index-dropdown: @z-index-component; +@z-index-sticky: @z-index-component + 20; +@z-index-fixed: @z-index-component + 30; +@z-index-modal-backdrop:@z-index-component + 40; +@z-index-modal:@z-index-component + 50; +@z-index-popover:@z-index-component + 60; +@z-index-tooltip:@z-index-component + 70; +*/ +/* var() css变量适配*/ +.goods-fail { + display: block; + background: #fff; + font-size: 30rpx; + border-radius: 20rpx 20rpx 0 0; +} +.goods-fail .title { + display: inline-block; + width: 100%; + text-align: center; + margin-top: 30rpx; + line-height: 42rpx; + font-weight: bold; + font-size: 32rpx; +} +.goods-fail .info { + display: block; + font-size: 26rpx; + font-weight: 400; + line-height: 36rpx; + margin: 20rpx auto 10rpx; + text-align: center; + width: 560rpx; + color: #999; +} +.goods-fail .goods-fail-btn { + display: flex; + padding: 30rpx; + justify-content: space-between; + align-items: center; + font-size: 30rpx; +} +.goods-fail .goods-fail-btn .btn { + width: 330rpx; + height: 80rpx; + line-height: 80rpx; + border-radius: 8rpx; + text-align: center; + border: 1rpx solid #999; + background: #fff; + font-size: 32rpx; + color: #666; +} +.goods-fail .goods-fail-btn .btn.origin, +.goods-fail .goods-fail-btn .btn.limit { + color: #fa550f; + color: var(--color-primary, #fa550f); + border: 1rpx solid #fa550f; + border: 1rpx solid var(--color-primary, #fa550f); +} +.goods-fail .goods-fail-btn .btn.limit { + flex-grow: 1; +} diff --git a/scr/miniprogram-2/pages/order/components/order-button-bar/index.js b/scr/miniprogram-2/pages/order/components/order-button-bar/index.js new file mode 100644 index 0000000..1c8b4a8 --- /dev/null +++ b/scr/miniprogram-2/pages/order/components/order-button-bar/index.js @@ -0,0 +1,217 @@ +import Toast from 'tdesign-miniprogram/toast/index'; +import Dialog from 'tdesign-miniprogram/dialog/index'; +import { OrderButtonTypes } from '../../config'; + +Component({ + options: { + addGlobalClass: true, + }, + properties: { + order: { + type: Object, + observer(order) { + // 判定有传goodsIndex ,则认为是商品button bar, 仅显示申请售后按钮 + if (this.properties?.goodsIndex !== null) { + const goods = order.goodsList[Number(this.properties.goodsIndex)]; + this.setData({ + buttons: { + left: [], + right: (goods.buttons || []).filter( + (b) => b.type == OrderButtonTypes.APPLY_REFUND, + ), + }, + }); + return; + } + // 订单的button bar 不显示申请售后按钮 + const buttonsRight = (order.buttons || []) + // .filter((b) => b.type !== OrderButtonTypes.APPLY_REFUND) + .map((button) => { + //邀请好友拼团按钮 + if ( + button.type === OrderButtonTypes.INVITE_GROUPON && + order.groupInfoVo + ) { + const { + groupInfoVo: { groupId, promotionId, remainMember, groupPrice }, + goodsList, + } = order; + const goodsImg = goodsList[0] && goodsList[0].imgUrl; + const goodsName = goodsList[0] && goodsList[0].name; + return { + ...button, + openType: 'share', + dataShare: { + goodsImg, + goodsName, + groupId, + promotionId, + remainMember, + groupPrice, + storeId: order.storeId, + }, + }; + } + return button; + }); + // 删除订单按钮单独挪到左侧 + const deleteBtnIndex = buttonsRight.findIndex( + (b) => b.type === OrderButtonTypes.DELETE, + ); + let buttonsLeft = []; + if (deleteBtnIndex > -1) { + buttonsLeft = buttonsRight.splice(deleteBtnIndex, 1); + } + this.setData({ + buttons: { + left: buttonsLeft, + right: buttonsRight, + }, + }); + }, + }, + goodsIndex: { + type: Number, + value: null, + }, + isBtnMax: { + type: Boolean, + value: false, + }, + }, + + data: { + order: {}, + buttons: { + left: [], + right: [], + }, + }, + + methods: { + // 点击【订单操作】按钮,根据按钮类型分发 + onOrderBtnTap(e) { + const { type } = e.currentTarget.dataset; + switch (type) { + case OrderButtonTypes.DELETE: + this.onDelete(this.data.order); + break; + case OrderButtonTypes.CANCEL: + this.onCancel(this.data.order); + break; + case OrderButtonTypes.CONFIRM: + this.onConfirm(this.data.order); + break; + case OrderButtonTypes.PAY: + this.onPay(this.data.order); + break; + case OrderButtonTypes.APPLY_REFUND: + this.onApplyRefund(this.data.order); + break; + case OrderButtonTypes.VIEW_REFUND: + this.onViewRefund(this.data.order); + break; + case OrderButtonTypes.COMMENT: + this.onAddComent(this.data.order); + break; + case OrderButtonTypes.INVITE_GROUPON: + //分享邀请好友拼团 + break; + case OrderButtonTypes.REBUY: + this.onBuyAgain(this.data.order); + } + }, + + onCancel() { + Toast({ + context: this, + selector: '#t-toast', + message: '你点击了取消订单', + icon: 'check-circle', + }); + }, + + onConfirm() { + Dialog.confirm({ + title: '确认是否已经收到货?', + content: '', + confirmBtn: '确认收货', + cancelBtn: '取消', + }) + .then(() => { + Toast({ + context: this, + selector: '#t-toast', + message: '你确认了确认收货', + icon: 'check-circle', + }); + }) + .catch(() => { + Toast({ + context: this, + selector: '#t-toast', + message: '你取消了确认收货', + icon: 'check-circle', + }); + }); + }, + + onPay() { + Toast({ + context: this, + selector: '#t-toast', + message: '你点击了去支付', + icon: 'check-circle', + }); + }, + + onBuyAgain() { + Toast({ + context: this, + selector: '#t-toast', + message: '你点击了再次购买', + icon: 'check-circle', + }); + }, + + onApplyRefund(order) { + const goods = order.goodsList[this.properties.goodsIndex]; + const params = { + orderNo: order.orderNo, + skuId: goods?.skuId ?? '19384938948343', + spuId: goods?.spuId ?? '28373847384343', + orderStatus: order.status, + logisticsNo: order.logisticsNo, + price: goods?.price ?? 89, + num: goods?.num ?? 89, + createTime: order.createTime, + orderAmt: order.totalAmount, + payAmt: order.amount, + canApplyReturn: true, + }; + const paramsStr = Object.keys(params) + .map((k) => `${k}=${params[k]}`) + .join('&'); + wx.navigateTo({ url: `/pages/order/apply-service/index?${paramsStr}` }); + }, + + onViewRefund() { + Toast({ + context: this, + selector: '#t-toast', + message: '你点击了查看退款', + icon: '', + }); + }, + + /** 添加订单评论 */ + onAddComent(order) { + const imgUrl = order?.goodsList?.[0]?.thumb; + const title = order?.goodsList?.[0]?.title; + const specs = order?.goodsList?.[0]?.specs; + wx.navigateTo({ + url: `/pages/goods/comments/create/index?specs=${specs}&title=${title}&orderNo=${order?.orderNo}&imgUrl=${imgUrl}`, + }); + }, + }, +}); diff --git a/scr/miniprogram-2/pages/order/components/order-button-bar/index.json b/scr/miniprogram-2/pages/order/components/order-button-bar/index.json new file mode 100644 index 0000000..3084bb3 --- /dev/null +++ b/scr/miniprogram-2/pages/order/components/order-button-bar/index.json @@ -0,0 +1,8 @@ +{ + "component": true, + "usingComponents": { + "t-button": "tdesign-miniprogram/button/button", + "t-toast": "tdesign-miniprogram/toast/toast", + "t-dialog": "tdesign-miniprogram/dialog/dialog" + } +} \ No newline at end of file diff --git a/scr/miniprogram-2/pages/order/components/order-button-bar/index.wxml b/scr/miniprogram-2/pages/order/components/order-button-bar/index.wxml new file mode 100644 index 0000000..030c4c4 --- /dev/null +++ b/scr/miniprogram-2/pages/order/components/order-button-bar/index.wxml @@ -0,0 +1,35 @@ + + + + {{leftBtn.name}} + + + + + {{rightBtn.name}} + + + + + + diff --git a/scr/miniprogram-2/pages/order/components/order-button-bar/index.wxss b/scr/miniprogram-2/pages/order/components/order-button-bar/index.wxss new file mode 100644 index 0000000..850282d --- /dev/null +++ b/scr/miniprogram-2/pages/order/components/order-button-bar/index.wxss @@ -0,0 +1,57 @@ +:host { + width: 100%; +} +.btn-bar { + display: flex; + justify-content: space-between; + align-items: center; + line-height: 1; +} +.btn-bar .order-btn { + background-color: inherit; + line-height: 1; + border-radius: unset; + min-width: 160rpx; + font-size: 28rpx; +} +.btn-bar .order-btn::after { + border-radius: 16rpx; +} +.btn-bar .order-btn--active { + opacity: 0.5; +} + +.btn-bar .right { + display: flex; + align-items: center; +} +.btn-bar .t-button { + width: 160rpx; + height: 56rpx; + border-radius: 28rpx; + margin-left: 24rpx; +} +.btn-bar .t-button--max { + width: 176rpx; + height: 72rpx; + border-radius: 36rpx; + margin-left: 24rpx; +} + +.btn-bar .left .delete-btn { + font-size: 22rpx; +} +.btn-bar .left .delete-btn::after { + display: none; +} +.btn-bar .right .normal { + color: #333333; +} +.btn-bar .right .normal:after { + border-color: #dddddd; +} +.btn-bar .right .primary { + color: #ffffff; + background-color: #fa4126; + border-color: #fa4126; +} diff --git a/scr/miniprogram-2/pages/order/components/order-card/index.js b/scr/miniprogram-2/pages/order/components/order-card/index.js new file mode 100644 index 0000000..636e66d --- /dev/null +++ b/scr/miniprogram-2/pages/order/components/order-card/index.js @@ -0,0 +1,90 @@ +Component({ + externalClasses: ['wr-class', 'header-class', 'title-class'], + + options: { + multipleSlots: true, + }, + + relations: { + '../order-goods-card/index': { + type: 'descendant', + linked(target) { + this.children.push(target); + this.setHidden(); + }, + unlinked(target) { + this.children = this.children.filter((item) => item !== target); + }, + }, + '../goods-card/index': { + type: 'descendant', + linked(target) { + this.children.push(target); + this.setHidden(); + }, + unlinked(target) { + this.children = this.children.filter((item) => item !== target); + }, + }, + '../specs-goods-card/index': { + type: 'descendant', + linked(target) { + this.children.push(target); + this.setHidden(); + }, + unlinked(target) { + this.children = this.children.filter((item) => item !== target); + }, + }, + }, + + created() { + this.children = []; + }, + + properties: { + order: { + type: Object, + observer(order) { + if (!order?.goodsList) return; + const goodsCount = order.goodsList.length; + this.setData({ + goodsCount, + }); + }, + }, + useTopRightSlot: Boolean, + // 初始显示的商品数量,超出部分会隐藏。 + defaultShowNum: { + type: null, + value: 10, + }, + useLogoSlot: { + type: Boolean, + value: false, + }, + }, + + data: { + showAll: true, // 是否展示所有商品,设置为false,可以使用展开更多功能 + goodsCount: 0, + }, + + methods: { + setHidden() { + const isHidden = !this.data.showAll; + this.children.forEach( + (c, i) => i >= this.properties.defaultShowNum && c.setHidden(isHidden), + ); + }, + + onOrderCardTap() { + this.triggerEvent('cardtap'); + }, + + onShowMoreTap() { + this.setData({ showAll: true }, () => this.setHidden()); + this.triggerEvent('showall'); + }, + }, +}); diff --git a/scr/miniprogram-2/pages/order/components/order-card/index.json b/scr/miniprogram-2/pages/order/components/order-card/index.json new file mode 100644 index 0000000..8c3cde6 --- /dev/null +++ b/scr/miniprogram-2/pages/order/components/order-card/index.json @@ -0,0 +1,7 @@ +{ + "component": true, + "usingComponents": { + "t-image": "/components/webp-image/index", + "t-icon": "tdesign-miniprogram/icon/icon" + } +} \ No newline at end of file diff --git a/scr/miniprogram-2/pages/order/components/order-card/index.wxml b/scr/miniprogram-2/pages/order/components/order-card/index.wxml new file mode 100644 index 0000000..21f32d0 --- /dev/null +++ b/scr/miniprogram-2/pages/order/components/order-card/index.wxml @@ -0,0 +1,30 @@ + + + + + + + + + {{order.statusDesc}} + + + + + + + 展开商品信息(共 {{goodsCount}} 个) + + + + + diff --git a/scr/miniprogram-2/pages/order/components/order-card/index.wxss b/scr/miniprogram-2/pages/order/components/order-card/index.wxss new file mode 100644 index 0000000..d241796 --- /dev/null +++ b/scr/miniprogram-2/pages/order/components/order-card/index.wxss @@ -0,0 +1,45 @@ +.order-card { + margin: 24rpx 0; + padding: 24rpx 32rpx 24rpx; + background-color: white; + border-radius: 8rpx; +} +.order-card .header { + display: flex; + justify-content: space-between; + align-items: center; + margin-bottom: 24rpx; +} +.order-card .header .store-name { + font-size: 28rpx; + font-weight: normal; + color: #333333; + display: flex; + align-items: center; + line-height: 40rpx; +} +.order-card .header .store-name__logo { + margin-right: 16rpx; + font-size: 40rpx; + width: 48rpx; + height: 48rpx; +} +.order-card .header .store-name__label { + max-width: 500rpx; + overflow: hidden; + text-overflow: ellipsis; + word-break: break-all; + white-space: nowrap; +} +.order-card .header .order-status { + font-size: 26rpx; + line-height: 40rpx; + color: #fa4126; +} +.order-card .more-mask { + padding: 20rpx 0; + text-align: center; + background-color: white; + color: #fa4126; + font-size: 24rpx; +} diff --git a/scr/miniprogram-2/pages/order/components/order-goods-card/index.js b/scr/miniprogram-2/pages/order/components/order-goods-card/index.js new file mode 100644 index 0000000..edaf299 --- /dev/null +++ b/scr/miniprogram-2/pages/order/components/order-goods-card/index.js @@ -0,0 +1,43 @@ +Component({ + options: { + addGlobalClass: true, + multipleSlots: true, // 在组件定义时的选项中启用多slot支持 + }, + + relations: { + '../order-card/index': { + type: 'ancestor', + linked(target) { + this.parent = target; + }, + }, + }, + + properties: { + goods: Object, + thumbWidth: Number, + thumbHeight: Number, + thumbWidthInPopup: Number, + thumbHeightInPopup: Number, + noTopLine: Boolean, + step: Boolean, + stepDisabled: Boolean, + }, + + data: { + goods: {}, + hidden: false, + }, + + methods: { + setHidden(hidden) { + if (this.data.hidden === hidden) return; + this.setData({ hidden }); + }, + + onNumChange(e) { + const { value } = e.detail; + this.triggerEvent('num-change', { value }); + }, + }, +}); diff --git a/scr/miniprogram-2/pages/order/components/order-goods-card/index.json b/scr/miniprogram-2/pages/order/components/order-goods-card/index.json new file mode 100644 index 0000000..7743bba --- /dev/null +++ b/scr/miniprogram-2/pages/order/components/order-goods-card/index.json @@ -0,0 +1,7 @@ +{ + "component": true, + "usingComponents": { + "t-stepper": "tdesign-miniprogram/stepper/stepper", + "goods-card": "../specs-goods-card/index" + } +} \ No newline at end of file diff --git a/scr/miniprogram-2/pages/order/components/order-goods-card/index.wxml b/scr/miniprogram-2/pages/order/components/order-goods-card/index.wxml new file mode 100644 index 0000000..1cedf01 --- /dev/null +++ b/scr/miniprogram-2/pages/order/components/order-goods-card/index.wxml @@ -0,0 +1,31 @@ + + + + + + + + + + + + diff --git a/scr/miniprogram-2/pages/order/components/reason-sheet/index.js b/scr/miniprogram-2/pages/order/components/reason-sheet/index.js new file mode 100644 index 0000000..e5741e6 --- /dev/null +++ b/scr/miniprogram-2/pages/order/components/reason-sheet/index.js @@ -0,0 +1,114 @@ +Component({ + properties: { + show: Boolean, + title: String, + options: { + type: Object, + observer() { + this.init(); + }, + }, + multiple: { + type: Boolean, + observer() { + this.init(); + }, + }, + showConfirmButton: Boolean, + showCloseButton: Boolean, + confirmButtonText: { + type: String, + value: '确定', + }, + cancelButtonText: { + type: String, + value: '取消', + }, + emptyTip: { + type: String, + value: '请选择', + }, + }, + + data: { + _options: [], + checkedIndexes: [], + }, + + methods: { + attached() { + this.toast = this.selectComponent('#t-toast'); + }, + + init() { + const checkedIndexes = []; + const _options = this.properties.options.map((opt, i) => { + const checked = !!opt.checked; + if (checked) { + if (this.properties.multiple) checkedIndexes[0] = i; + else checkedIndexes.push(i); + } + return { + title: opt.title, + checked, + }; + }); + this.setData({ checkedIndexes, _options }); + }, + + onOptionTap(e) { + const { index } = e.currentTarget.dataset; + const { checkedIndexes } = this.data; + let data = {}; + if (this.properties.multiple) { + if (checkedIndexes.includes(index)) { + checkedIndexes.splice(index, 1); + data = { checkedIndexes, [`_options[${index}].checked`]: false }; + } else { + checkedIndexes.push(index); + data = { checkedIndexes, [`_options[${index}].checked`]: true }; + } + } else { + if (checkedIndexes[0] === index) { + // 单选不可取消选择 + return; + } + data = { + [`_options[${index}].checked`]: true, + checkedIndexes: [index], + }; + if (checkedIndexes[0] !== undefined) { + data[`_options[${checkedIndexes[0]}].checked`] = false; + } + } + this.setData(data); + this.triggerEvent('select', { index }); + this._onOptionTap && this._onOptionTap(index); + if (!this.properties.showConfirmButton && !this.properties.multiple) { + // 没有确认按钮且是单选的情况下,选择选项则自动确定 + this._onConfirm && this._onConfirm([index]); + this.setData({ show: false }); + } + }, + + onCancel() { + this.triggerEvent('cancel'); + this._onCancel && this._onCancel(); + this.setData({ show: false }); + }, + + onConfirm() { + if (this.data.checkedIndexes.length === 0) { + this.toast.show({ + icon: '', + text: this.properties.emptyTip, + }); + return; + } + const indexed = this.data.checkedIndexes; + this.triggerEvent('confirm', { indexed }); + this._onConfirm && this._onConfirm(indexed); + this.setData({ show: false }); + }, + }, +}); diff --git a/scr/miniprogram-2/pages/order/components/reason-sheet/index.json b/scr/miniprogram-2/pages/order/components/reason-sheet/index.json new file mode 100644 index 0000000..a22be6b --- /dev/null +++ b/scr/miniprogram-2/pages/order/components/reason-sheet/index.json @@ -0,0 +1,10 @@ +{ + "component": true, + "usingComponents": { + "t-icon": "tdesign-miniprogram/icon/icon", + "t-popup": "tdesign-miniprogram/popup/popup", + "t-cell": "tdesign-miniprogram/cell/cell", + "t-toast": "tdesign-miniprogram/toast/toast", + "t-button": "tdesign-miniprogram/button/button" + } +} \ No newline at end of file diff --git a/scr/miniprogram-2/pages/order/components/reason-sheet/index.wxml b/scr/miniprogram-2/pages/order/components/reason-sheet/index.wxml new file mode 100644 index 0000000..35a5df2 --- /dev/null +++ b/scr/miniprogram-2/pages/order/components/reason-sheet/index.wxml @@ -0,0 +1,50 @@ + + + + {{title}} + + + + + + + + + + + + {{confirmButtonText}} + + + + + + diff --git a/scr/miniprogram-2/pages/order/components/reason-sheet/index.wxss b/scr/miniprogram-2/pages/order/components/reason-sheet/index.wxss new file mode 100644 index 0000000..ed92d44 --- /dev/null +++ b/scr/miniprogram-2/pages/order/components/reason-sheet/index.wxss @@ -0,0 +1,47 @@ +page view { + box-sizing: border-box; +} +.popup-content { + background-color: white; + color: #222427; + border-radius: 20rpx 20rpx 0 0; + overflow: hidden; +} +.popup-content .header { + height: 100rpx; + line-height: 100rpx; + text-align: center; + vertical-align: middle; + font-size: 32rpx; + font-weight: bold; + position: relative; +} +.popup-content .options { + max-height: 60vh; + overflow-y: scroll; + -webkit-overflow-scrolling: touch; +} +.popup-content .options .cell { + height: 100rpx; + align-items: center; + font-size: 30rpx; + color: #333333; +} +.popup-content .button-bar { + width: 100%; + padding: 20rpx 30rpx; + display: flex; + flex-wrap: nowrap; + align-items: center; + justify-content: space-between; + padding-bottom: calc(20rpx + env(safe-area-inset-bottom)); +} +.popup-content .button-bar .btn { + width: 100%; + background: #fa4126; + color: #fff; + border-radius: 48rpx; +} +.button-bar .btnWrapper { + width: 100%; +} diff --git a/scr/miniprogram-2/pages/order/components/reason-sheet/reasonSheet.js b/scr/miniprogram-2/pages/order/components/reason-sheet/reasonSheet.js new file mode 100644 index 0000000..384f68f --- /dev/null +++ b/scr/miniprogram-2/pages/order/components/reason-sheet/reasonSheet.js @@ -0,0 +1,25 @@ +function getInstance(context, selector = '#wr-reason-sheet') { + if (!context) { + const pages = getCurrentPages(); + const page = pages[pages.length - 1]; + context = page; + } + const instance = context && context.selectComponent(selector); + if (!instance) { + console.warn(`未找到reason-sheet组件,请检查selector是否正确`); + return null; + } + return instance; +} + +export default function (options) { + const { context, selector, ..._options } = options; + return new Promise((resolve, reject) => { + const instance = getInstance(context, selector); + if (instance) { + instance.setData(Object.assign({}, _options)); + instance._onCancel = () => reject(); + instance._onConfirm = (indexes) => resolve(indexes); + } + }); +} diff --git a/scr/miniprogram-2/pages/order/components/selectCoupons/mock.js b/scr/miniprogram-2/pages/order/components/selectCoupons/mock.js new file mode 100644 index 0000000..6e67895 --- /dev/null +++ b/scr/miniprogram-2/pages/order/components/selectCoupons/mock.js @@ -0,0 +1,22 @@ +export const couponsData = { + couponResultList: [ + { + couponVO: { + condition: '满200元可用', + couponId: 11, + endTime: 1584530282686, + name: '折扣券', + profit: '5.5折', + promotionCode: 90, + promotionSubCode: 1, + scopeText: '部分商品可用', + startTime: 1584530282686, + storeId: 90, + value: 550, + type: 2, + }, + status: 0, // 0:未勾选。1:勾选。-1:置灰 + }, + ], + reduce: 1000, +}; diff --git a/scr/miniprogram-2/pages/order/components/selectCoupons/selectCoupon.wxs b/scr/miniprogram-2/pages/order/components/selectCoupons/selectCoupon.wxs new file mode 100644 index 0000000..8c4ce2e --- /dev/null +++ b/scr/miniprogram-2/pages/order/components/selectCoupons/selectCoupon.wxs @@ -0,0 +1,16 @@ +function formatDays(value) { + if (value < 10) { + return '0' + value; + } + return value; +} +var dateFormat = function (d) { + var date = getDate(+d); + return ( + date.getFullYear() + + '-' + + formatDays(date.getMonth() + 1) + + formatDays(date.getDate()) + ); +}; +module.exports.dateFormat = dateFormat; diff --git a/scr/miniprogram-2/pages/order/components/selectCoupons/selectCoupons.js b/scr/miniprogram-2/pages/order/components/selectCoupons/selectCoupons.js new file mode 100644 index 0000000..235ffba --- /dev/null +++ b/scr/miniprogram-2/pages/order/components/selectCoupons/selectCoupons.js @@ -0,0 +1,160 @@ +import dayjs from 'dayjs'; +import { couponsData } from './mock'; + +const emptyCouponImg = `https://cdn-we-retail.ym.tencent.com/miniapp/coupon/ordersure-coupon-newempty.png`; + +Component({ + properties: { + storeId: String, + promotionGoodsList: { + type: Array, + value: [], + }, + orderSureCouponList: { + type: Array, + value: [], + }, + couponsShow: { + type: Boolean, + value: false, + observer(couponsShow) { + if (couponsShow) { + const { promotionGoodsList, orderSureCouponList, storeId } = + this.data; + const products = + promotionGoodsList && + promotionGoodsList.map((goods) => { + this.storeId = goods.storeId; + return { + skuId: goods.skuId, + spuId: goods.spuId, + storeId: goods.storeId, + selected: true, + quantity: goods.num, + prices: { + sale: goods.settlePrice, + }, + }; + }); + const selectedCoupons = + orderSureCouponList && + orderSureCouponList.map((ele) => { + return { + promotionId: ele.promotionId, + storeId: ele.storeId, + couponId: ele.couponId, + }; + }); + this.setData({ + products, + }); + this.coupons({ + products, + selectedCoupons, + storeId, + }).then((res) => { + this.initData(res); + }); + } + }, + }, + }, + data: { + emptyCouponImg, + goodsList: [], + selectedList: [], + couponsList: [], + orderSureCouponList: [], + promotionGoodsList: [], + }, + methods: { + initData(data = {}) { + const { couponResultList = [], reduce = 0 } = data; + const selectedList = []; + let selectedNum = 0; + const couponsList = + couponResultList && + couponResultList.map((coupon) => { + const { status, couponVO } = coupon; + const { + couponId, + condition = '', + endTime = 0, + name = '', + startTime = 0, + value, + type, + } = couponVO; + if (status === 1) { + selectedNum++; + selectedList.push({ + couponId, + promotionId: ruleId, + storeId: this.storeId, + }); + } + const val = type === 2 ? value / 100 : value / 10; + return { + key: couponId, + title: name, + isSelected: false, + timeLimit: `${dayjs(+startTime).format('YYYY-MM-DD')}-${dayjs( + +endTime, + ).format('YYYY-MM-DD')}`, + value: val, + status: status === -1 ? 'useless' : 'default', + desc: condition, + type, + tag: '', + }; + }); + this.setData({ + selectedList, + couponsList, + reduce, + selectedNum, + }); + }, + selectCoupon(e) { + const { key } = e.currentTarget.dataset; + const { couponsList, selectedList } = this.data; + couponsList.forEach((coupon) => { + if (coupon.key === key) { + coupon.isSelected = !coupon.isSelected; + } + }); + + const couponSelected = couponsList.filter( + (coupon) => coupon.isSelected === true, + ); + + this.setData({ + selectedList: [...selectedList, ...couponSelected], + couponsList: [...couponsList], + }); + + this.triggerEvent('sure', { + selectedList: [...selectedList, ...couponSelected], + }); + }, + hide() { + this.setData({ + couponsShow: false, + }); + }, + coupons(coupon = {}) { + return new Promise((resolve, reject) => { + if (coupon?.selectedCoupons) { + resolve({ + couponResultList: couponsData.couponResultList, + reduce: couponsData.reduce, + }); + } + return reject({ + couponResultList: [], + reduce: undefined, + }); + }); + }, + }, +}); diff --git a/scr/miniprogram-2/pages/order/components/selectCoupons/selectCoupons.json b/scr/miniprogram-2/pages/order/components/selectCoupons/selectCoupons.json new file mode 100644 index 0000000..c46dc55 --- /dev/null +++ b/scr/miniprogram-2/pages/order/components/selectCoupons/selectCoupons.json @@ -0,0 +1,10 @@ +{ + "component": true, + "usingComponents": { + "t-popup": "tdesign-miniprogram/popup/popup", + "t-icon": "tdesign-miniprogram/icon/icon", + "t-image": "/components/webp-image/index", + "wr-price": "/components/price/index", + "coupon-card": "/pages/coupon/components/ui-coupon-card/index" + } +} \ No newline at end of file diff --git a/scr/miniprogram-2/pages/order/components/selectCoupons/selectCoupons.wxml b/scr/miniprogram-2/pages/order/components/selectCoupons/selectCoupons.wxml new file mode 100644 index 0000000..10b8898 --- /dev/null +++ b/scr/miniprogram-2/pages/order/components/selectCoupons/selectCoupons.wxml @@ -0,0 +1,43 @@ + + + + + + 选择优惠券 + + + 你有{{couponsList.length}}张可用优惠券 + + 已选中{{selectedNum}}张推荐优惠券, 共抵扣 + + + + + + + + + + + + 此优惠券不能和已勾选的优惠券叠加使用 + + + + + + + 暂无优惠券 + + + + + diff --git a/scr/miniprogram-2/pages/order/components/selectCoupons/selectCoupons.wxss b/scr/miniprogram-2/pages/order/components/selectCoupons/selectCoupons.wxss new file mode 100644 index 0000000..a8c795f --- /dev/null +++ b/scr/miniprogram-2/pages/order/components/selectCoupons/selectCoupons.wxss @@ -0,0 +1,104 @@ +.select-coupons { + background: #fff; + width: 100%; + position: relative; + border-radius: 20rpx 20rpx 0 0; + padding-top: 28rpx; + padding-bottom: env(safe-area-inset-bottom); +} +.select-coupons .title { + width: 100%; + text-align: center; + font-size: 32rpx; + color: #333; + font-weight: 600; + line-height: 44rpx; +} +.select-coupons .info { + width: 100%; + height: 34rpx; + font-size: 24rpx; + color: #999; + line-height: 34rpx; + margin: 20rpx 0; + padding: 0 20rpx; +} +.select-coupons .info .price { + color: #fa4126; +} +.select-coupons .coupons-list { + max-height: 500rpx; +} +.select-coupons .coupons-list .coupons-wrap { + padding: 0rpx 20rpx; +} +.select-coupons .coupons-list .disable { + font-size: 24rpx; + color: #ff2525; + padding-top: 20rpx; +} +.select-coupons .coupons-list .slot-radio { + position: absolute; + right: 22rpx; + top: 50%; + transform: translateY(-50%); + display: inline-block; +} +.select-coupons .coupons-list .slot-radio .wr-check-filled { + font-size: 36rpx; +} +.select-coupons .coupons-list .slot-radio .check { + width: 36rpx; +} +.select-coupons .coupons-list .slot-radio .text-primary { + color: #fa4126; +} +.select-coupons .coupons-list .slot-radio .wr-check { + font-size: 36rpx; +} +.select-coupons .coupons-list .slot-radio .wr-uncheck { + font-size: 36rpx; + color: #999; +} +.select-coupons .couponp-empty-wrap { + padding: 40rpx; +} +.select-coupons .couponp-empty-wrap .couponp-empty-img { + display: block; + width: 240rpx; + height: 240rpx; + margin: 0 auto; +} +.select-coupons .couponp-empty-wrap .couponp-empty-title { + font-size: 28rpx; + color: #999; + text-align: center; + line-height: 40rpx; + margin-top: 40rpx; +} +.select-coupons .coupons-cover { + height: 112rpx; + width: 100%; + box-sizing: border-box; + margin-top: 30rpx; + padding: 12rpx 32rpx; + display: flex; + justify-content: space-between; + align-items: center; +} +.select-coupons .coupons-cover .btn { + width: 332rpx; + height: 88rpx; + text-align: center; + line-height: 88rpx; + font-size: 32rpx; + border-radius: 44rpx; + box-sizing: border-box; + border: 2rpx solid #dddddd; + color: #333333; +} +.select-coupons .coupons-cover .red { + border-color: #fa4126; + background-color: #fa4126; + color: #ffffff; +} diff --git a/scr/miniprogram-2/pages/order/components/specs-goods-card/index.js b/scr/miniprogram-2/pages/order/components/specs-goods-card/index.js new file mode 100644 index 0000000..d5cd284 --- /dev/null +++ b/scr/miniprogram-2/pages/order/components/specs-goods-card/index.js @@ -0,0 +1,132 @@ +Component({ + options: { + addGlobalClass: true, + multipleSlots: true, // 在组件定义时的选项中启用多slot支持 + }, + + externalClasses: [ + 'title-class', + 'desc-class', + 'num-class', + 'thumb-class', + 'specs-class', + 'price-class', + 'origin-price-class', + 'price-prefix-class', + ], + + relations: { + '../order-card/index': { + type: 'ancestor', + linked(target) { + this.parent = target; + }, + }, + }, + + properties: { + id: String, + hidden: { + // 设置为null代表不做类型转换 + type: null, + observer(hidden) { + // null就是代表没有设置,没有设置的话不setData,防止祖先组件触发的setHidden操作被覆盖 + if (hidden !== null) { + this.setHidden(!!hidden); + } + }, + }, + data: Object, + layout: { + type: String, + value: 'horizontal', + }, + thumbMode: { + type: String, + value: 'aspectFill', + }, + thumbWidth: Number, + thumbHeight: Number, + thumbWidthInPopup: Number, + thumbHeightInPopup: Number, + priceFill: { + type: Boolean, + value: true, + }, + currency: { + type: String, + value: '¥', + }, + lazyLoad: Boolean, + centered: Boolean, + showCart: Boolean, + pricePrefix: String, + cartSize: { + type: Number, + value: 48, + }, + cartColor: { + type: String, + value: '#FA550F', + }, + disablePopup: Boolean, + }, + + data: { + hiddenInData: false, + specsPopup: { + insert: false, + show: false, + }, + }, + + currentInTapSpecs: false, + + lifetimes: { + ready() { + const { hidden } = this.properties; + if (hidden !== null) { + this.setHidden(!!hidden); + } + }, + }, + + methods: { + closeSpecsPopup() { + this.setData({ + 'specsPopup.show': false, + }); + this.triggerEvent('specsclose', { good: this.properties.data }); + }, + + removeSpecsPopup() { + this.setData({ + 'specsPopup.insert': false, + }); + }, + + onClick(e) { + if (this.currentInTapSpecs) { + this.currentInTapSpecs = false; + return; + } + this.triggerEvent('click', e.detail); + }, + + onClickThumb(e) { + this.triggerEvent('thumb', e.detail); + }, + + onClickTag(e) { + this.triggerEvent('tag', e.detail); + }, + + onClickCart(e) { + this.triggerEvent('add-cart', e.detail); + }, + + setHidden(hidden) { + this.setData({ hiddenInData: !!hidden }); + }, + }, +}); diff --git a/scr/miniprogram-2/pages/order/components/specs-goods-card/index.json b/scr/miniprogram-2/pages/order/components/specs-goods-card/index.json new file mode 100644 index 0000000..ccbce72 --- /dev/null +++ b/scr/miniprogram-2/pages/order/components/specs-goods-card/index.json @@ -0,0 +1,6 @@ +{ + "component": true, + "usingComponents": { + "goods-card": "../goods-card/index" + } +} \ No newline at end of file diff --git a/scr/miniprogram-2/pages/order/components/specs-goods-card/index.wxml b/scr/miniprogram-2/pages/order/components/specs-goods-card/index.wxml new file mode 100644 index 0000000..f6f2a38 --- /dev/null +++ b/scr/miniprogram-2/pages/order/components/specs-goods-card/index.wxml @@ -0,0 +1,40 @@ + + diff --git a/scr/miniprogram-2/pages/order/components/specs-goods-card/index.wxss b/scr/miniprogram-2/pages/order/components/specs-goods-card/index.wxss new file mode 100644 index 0000000..e69de29 diff --git a/scr/miniprogram-2/pages/order/config.js b/scr/miniprogram-2/pages/order/config.js new file mode 100644 index 0000000..20a3317 --- /dev/null +++ b/scr/miniprogram-2/pages/order/config.js @@ -0,0 +1,94 @@ +export const OrderStatus = { + PENDING_PAYMENT: 5, // 待支付 + PENDING_DELIVERY: 10, // 待发货 + PENDING_RECEIPT: 40, // 待收货 + COMPLETE: 50, // 已完成/待评价 + PAYMENT_TIMEOUT: 80, // 已取消,支付超时 + CANCELED_NOT_PAYMENT: 80, // 已取消,未支付主动取消 + CANCELED_PAYMENT: 80, // 已取消,已支付主动取消 + CANCELED_REJECTION: 80, // 已取消,拒收 +}; + +// 售后状态 10:待审核,20:已审核,30:已收货,40:收货异常,50:已完成,60:已关闭; +export const AfterServiceStatus = { + TO_AUDIT: 10, // 待审核 + THE_APPROVED: 20, // 已审核 + HAVE_THE_GOODS: 30, // 已收货 + ABNORMAL_RECEIVING: 40, // 收货异常 + COMPLETE: 50, // 已完成 + CLOSED: 60, // 已关闭 +}; + +// 售后类型 +export const ServiceType = { + RETURN_GOODS: 10, // 退货退款 + ONLY_REFUND: 20, // 仅退款 + ORDER_CANCEL: 30, // 支付后取消 +}; + +export const ServiceTypeDesc = { + [ServiceType.RETURN_GOODS]: '退货', + [ServiceType.ONLY_REFUND]: '退款', + [ServiceType.ORDER_CANCEL]: '支付后取消', +}; + +// 订单按钮类型 +export const OrderButtonTypes = { + PAY: 1, // 付款 + CANCEL: 2, // 取消订单 + CONFIRM: 3, // 确认收货 + APPLY_REFUND: 4, // 申请售后 + VIEW_REFUND: 5, // 查看退款 + COMMENT: 6, // 评价 + DELETE: 7, // 删除订单 + DELIVERY: 8, // 查看物流 + REBUY: 9, // 再次购买 + INVITE_GROUPON: 11, //邀请好友拼团 +}; + +// 售后服务按钮类型 +export const ServiceButtonTypes = { + REVOKE: 2, // 撤销 + FILL_TRACKING_NO: 3, // 填写运单号 + CHANGE_TRACKING_NO: 4, // 修改运单号 + VIEW_DELIVERY: 5, // 查看物流 +}; + +// 售后状态 +export const ServiceStatus = { + PENDING_VERIFY: 100, //待审核 + VERIFIED: 110, // 已审核待寄回商品 + PENDING_DELIVERY: 120, // 等待买家寄回商品 + PENDING_RECEIPT: 130, // 已寄回商品,待收货 + RECEIVED: 140, // 已收货 + EXCEPTION: 150, // 收货异常 + REFUNDED: 160, // 已退款 + CLOSED: 170, // 已关闭 +}; + +// 售后收货状态 +export const ServiceReceiptStatus = { + RECEIPTED: 1, // 已收到货 + NOT_RECEIPTED: 2, // 未收到货 +}; + +// 物流节点 +export const LogisticsNodeTypes = { + SUBMITTED: 200001, // 已提交订单 + PAYMENTED: 200002, // 已付款/已下单 + SHIPPED: 200003, // 已发货 + CANCELED: 200004, // 已取消 + RECEIVED: 200005, // 已签收 + ADDRESS_CHANGED: 200006, // 已修改地址 + IN_TRANSIT: 200007, // 运输中 +}; + +export const LogisticsIconMap = { + [LogisticsNodeTypes.SUBMITTED]: '', + [LogisticsNodeTypes.PAYMENTED]: 'credit_card', + [LogisticsNodeTypes.SHIPPED]: 'deliver', + [LogisticsNodeTypes.CANCELED]: '', + [LogisticsNodeTypes.RECEIVED]: 'check', + [LogisticsNodeTypes.ADDRESS_CHANGED]: '', + [LogisticsNodeTypes.IN_TRANSIT]: 'yunshuzhong', +}; diff --git a/scr/miniprogram-2/pages/order/delivery-detail/index.js b/scr/miniprogram-2/pages/order/delivery-detail/index.js new file mode 100644 index 0000000..f10ff02 --- /dev/null +++ b/scr/miniprogram-2/pages/order/delivery-detail/index.js @@ -0,0 +1,43 @@ +Page({ + data: { + logisticsData: { + logisticsNo: '', + nodes: [], + company: '', + phoneNumber: '', + }, + active: 0, + }, + + onLoad(query) { + let data; + try { + data = JSON.parse(decodeURIComponent(query.data || '{}')); + } catch (e) { + console.warn('物流节点数据解析失败', e); + } + if (Number(query.source) === 2) { + const service = { + company: data.logisticsCompanyName, + logisticsNo: data.logisticsNo, + nodes: data.nodes, + }; + this.setData({ + logisticsData: service, + }); + } else if (data) { + this.setData({ logisticsData: data }); + } + }, + + onLogisticsNoCopy() { + wx.setClipboardData({ data: this.data.logisticsData.logisticsNo }); + }, + + onCall() { + const { phoneNumber } = this.data.logisticsData; + wx.makePhoneCall({ + phoneNumber, + }); + }, +}); diff --git a/scr/miniprogram-2/pages/order/delivery-detail/index.json b/scr/miniprogram-2/pages/order/delivery-detail/index.json new file mode 100644 index 0000000..ba23e4c --- /dev/null +++ b/scr/miniprogram-2/pages/order/delivery-detail/index.json @@ -0,0 +1,11 @@ +{ + "navigationBarTitleText": "物流信息", + "usingComponents": { + "t-cell": "tdesign-miniprogram/cell/cell", + "t-cell-group": "tdesign-miniprogram/cell-group/cell-group", + "t-steps": "tdesign-miniprogram/steps/steps", + "t-image": "/components/webp-image/index", + "t-icon": "tdesign-miniprogram/icon/icon", + "t-step": "tdesign-miniprogram/steps/step-item" + } +} \ No newline at end of file diff --git a/scr/miniprogram-2/pages/order/delivery-detail/index.wxml b/scr/miniprogram-2/pages/order/delivery-detail/index.wxml new file mode 100644 index 0000000..b5a8bf5 --- /dev/null +++ b/scr/miniprogram-2/pages/order/delivery-detail/index.wxml @@ -0,0 +1,91 @@ + + var isUrl = function(item) { + return item.indexOf('http') > -1; + } + module.exports = { + isUrl: isUrl, + } + + + + + + {{logisticsData.logisticsNo}} + 复制 + + + + + 拨打 + + + + + + + + + + + + + + + {{item.desc}} + {{item.date}} + + + + + diff --git a/scr/miniprogram-2/pages/order/delivery-detail/index.wxss b/scr/miniprogram-2/pages/order/delivery-detail/index.wxss new file mode 100644 index 0000000..6a2524c --- /dev/null +++ b/scr/miniprogram-2/pages/order/delivery-detail/index.wxss @@ -0,0 +1,99 @@ +page { + background-color: #f5f5f5; +} +.page-section { + margin-top: 24rpx; + background-color: white; +} +.page-section .order-group__left { + margin-right: 0 !important; +} +.cell-steps { + padding: 8rpx; +} +.wr-cell__title { + flex: none; + font-size: 28rpx; + color: #666; +} +.wr-cell__value { + flex: auto; + margin-left: 30rpx; + font-size: 28rpx; + color: #333 !important; +} +.logistics-no { + display: inline-block; + text-align: left; + word-break: break-all; + color: #333; +} +.text-btn { + margin-left: 20rpx; + display: inline; + font-size: 24rpx; + padding: 0 15rpx; + border: 1rpx solid #ddd; + border-radius: 28rpx; + color: #333; +} +.text-btn--active { + opacity: 0.5; +} +.steps .step-title { + font-weight: bold; + color: #333 !important; + font-size: 30rpx; +} +.steps .step-desc { + color: #333333; + font-size: 28rpx; +} +.steps .step-date { + color: #999999; + font-size: 24rpx; +} + +.cell-steps__img, +.cell-steps__imgWrapper { + width: 48rpx; + height: 48rpx; +} + +.steps + .t-step--vertical.t-step--default-anchor + .t-steps-item--process + .t-steps-item__icon-number { + background: #ffece9 !important; + color: white !important; + border: none; +} + +.steps + .t-step--vertical.t-step--default-anchor + .t-steps-item--default + .t-steps-item__icon-number { + color: white !important; + background: #f5f5f5 !important; + border: none; +} + +.steps + .t-step--vertical.t-step--default-anchor.t-step--not-last-child + .t-steps-item__inner::after { + top: 48rpx; + height: calc(100% - 44rpx - 4rpx); +} + +.steps + .t-step--vertical.t-step--default-anchor.t-step--not-last-child + .t-steps-item__inner::after, +.steps + .t-step--vertical.t-step--default-anchor.t-step--not-last-child + .t-steps-item--default + .t-steps-item__inner:after { + background: #f5f5f5 !important; +} +.page-section__steps { + padding: 24rpx; +} diff --git a/scr/miniprogram-2/pages/order/fill-tracking-no/api.js b/scr/miniprogram-2/pages/order/fill-tracking-no/api.js new file mode 100644 index 0000000..33f41de --- /dev/null +++ b/scr/miniprogram-2/pages/order/fill-tracking-no/api.js @@ -0,0 +1,71 @@ +import { mockIp, mockReqId } from '../../../utils/mock'; + +export function create() { + const _resq = { + data: null, + code: 'Success', + msg: null, + requestId: mockReqId(), + clientIp: mockIp(), + rt: 79, + success: true, + }; + return Promise.resolve(_resq); +} + +export function update() { + const _resq = { + data: null, + code: 'Success', + msg: null, + requestId: mockReqId(), + clientIp: mockIp(), + rt: 79, + success: true, + }; + return Promise.resolve(_resq); +} + +export function getDeliverCompanyList() { + const _resq = { + data: [ + { + name: '中通快递', + code: '0001', + }, + { + name: '申通快递', + code: '0002', + }, + { + name: '圆通快递', + code: '0003', + }, + { + name: '顺丰快递', + code: '0004', + }, + { + name: '百世快递', + code: '0005', + }, + { + name: '韵达快递', + code: '0006', + }, + { + name: '邮政快递', + code: '0007', + }, + { + name: '丰网快递', + code: '0008', + }, + { + name: '顺丰直邮', + code: '0009', + }, + ], + }; + return Promise.resolve(_resq); +} diff --git a/scr/miniprogram-2/pages/order/fill-tracking-no/index.js b/scr/miniprogram-2/pages/order/fill-tracking-no/index.js new file mode 100644 index 0000000..dd6ff3b --- /dev/null +++ b/scr/miniprogram-2/pages/order/fill-tracking-no/index.js @@ -0,0 +1,190 @@ +import Dialog from 'tdesign-miniprogram/dialog/index'; +import Toast from 'tdesign-miniprogram/toast/index'; +import reasonSheet from '../components/reason-sheet/reasonSheet'; +import { getDeliverCompanyList, create, update } from './api'; + +Page({ + deliveryCompanyList: [], + + data: { + trackingNo: '', + remark: '', + deliveryCompany: null, + submitActived: false, + submitting: false, + }, + onLoad(query) { + const { + rightsNo = '', + logisticsNo = '', + logisticsCompanyName = '', + logisticsCompanyCode = '', + remark = '', + } = query; + + if (!rightsNo) { + Dialog.confirm({ + title: '请选择售后单?', + content: '', + confirmBtn: '确认', + }).then(() => { + wx.navigateBack({ backRefresh: true }); + }); + } + this.rightsNo = rightsNo; + if (logisticsNo) { + wx.setNavigationBarTitle({ + title: '修改运单号', + fail() {}, + }); + this.isChange = true; + this.setData({ + deliveryCompany: { + name: logisticsCompanyName, + code: logisticsCompanyCode, + }, + trackingNo: logisticsNo, + remark, + submitActived: true, + }); + } + this.setWatcher('trackingNo', this.checkParams.bind(this)); + this.setWatcher('deliveryCompany', this.checkParams.bind(this)); + }, + + setWatcher(key, callback) { + let lastData = this.data; + const keys = key.split('.'); + keys.slice(0, -1).forEach((k) => { + lastData = lastData[k]; + }); + const lastKey = keys[keys.length - 1]; + this.observe(lastData, lastKey, callback); + }, + + observe(data, k, callback) { + let val = data[k]; + Object.defineProperty(data, k, { + configurable: true, + enumerable: true, + set: (value) => { + val = value; + callback(); + }, + get: () => { + return val; + }, + }); + }, + + getDeliveryCompanyList() { + if (this.deliveryCompanyList.length > 0) { + return Promise.resolve(this.deliveryCompanyList); + } + return getDeliverCompanyList().then((res) => { + this.deliveryCompanyList = res.data || []; + return this.deliveryCompanyList; + }); + }, + + onInput(e) { + const { key } = e.currentTarget.dataset; + const { value } = e.detail; + this.setData({ [key]: value }); + }, + + onCompanyTap() { + this.getDeliveryCompanyList().then((deliveryCompanyList) => { + reasonSheet({ + show: true, + title: '选择物流公司', + options: deliveryCompanyList.map((company) => ({ + title: company.name, + checked: this.data.deliveryCompany + ? company.code === this.data.deliveryCompany.code + : false, + })), + showConfirmButton: true, + showCancelButton: true, + emptyTip: '请选择物流公司', + }).then((indexes) => { + this.setData({ + deliveryCompany: deliveryCompanyList[indexes[0]], + }); + }); + }); + }, + + checkParams() { + const res = { errMsg: '', require: false }; + + if (!this.data.trackingNo) { + res.errMsg = '请填写运单号'; + res.require = true; + } else if (!this.data.deliveryCompany) { + res.errMsg = '请选择物流公司'; + res.require = true; + } + this.setData({ submitActived: !res.require }); + return res; + }, + + onSubmit() { + const checkRes = this.checkParams(); + if (checkRes.errMsg) { + Toast({ + context: this, + selector: '#t-toast', + message: checkRes.errMsg, + icon: '', + }); + return; + } + + const { + trackingNo, + remark, + deliveryCompany: { code, name }, + } = this.data; + + const params = { + rightsNo: this.rightsNo, + logisticsCompanyCode: code, + logisticsCompanyName: name, + logisticsNo: trackingNo, + remark, + }; + const api = this.isChange ? create : update; + this.setData({ submitting: true }); + api(params) + .then(() => { + this.setData({ submitting: false }); + Toast({ + context: this, + selector: '#t-toast', + message: '保存成功', + icon: '', + }); + setTimeout(() => wx.navigateBack({ backRefresh: true }), 1000); + }) + .catch(() => { + this.setData({ submitting: false }); + }); + }, + + onScanTap() { + wx.scanCode({ + scanType: ['barCode'], + success: (res) => { + Toast({ + context: this, + selector: '#t-toast', + message: '扫码成功', + icon: '', + }); + this.setData({ trackingNo: res.result }); + }, + fail: () => {}, + }); + }, +}); diff --git a/scr/miniprogram-2/pages/order/fill-tracking-no/index.json b/scr/miniprogram-2/pages/order/fill-tracking-no/index.json new file mode 100644 index 0000000..bd1bb20 --- /dev/null +++ b/scr/miniprogram-2/pages/order/fill-tracking-no/index.json @@ -0,0 +1,14 @@ +{ + "navigationBarTitleText": "填写运单号", + "usingComponents": { + "t-icon": "tdesign-miniprogram/icon/icon", + "t-cell": "tdesign-miniprogram/cell/cell", + "t-cell-group": "tdesign-miniprogram/cell-group/cell-group", + "t-textarea": "tdesign-miniprogram/textarea/textarea", + "t-input": "tdesign-miniprogram/input/input", + "t-toast": "tdesign-miniprogram/toast/toast", + "t-dialog": "tdesign-miniprogram/dialog/dialog", + "t-button": "tdesign-miniprogram/button/button", + "ui-reason-sheet": "../components/reason-sheet/index" + } +} \ No newline at end of file diff --git a/scr/miniprogram-2/pages/order/fill-tracking-no/index.wxml b/scr/miniprogram-2/pages/order/fill-tracking-no/index.wxml new file mode 100644 index 0000000..18592b5 --- /dev/null +++ b/scr/miniprogram-2/pages/order/fill-tracking-no/index.wxml @@ -0,0 +1,54 @@ + + 请填写正确的退货包裹运单信息,以免影响退款进度 + + + + + + + + + + 备注信息 + + + + + + 保存 + + + + + + + diff --git a/scr/miniprogram-2/pages/order/fill-tracking-no/index.wxss b/scr/miniprogram-2/pages/order/fill-tracking-no/index.wxss new file mode 100644 index 0000000..c64e653 --- /dev/null +++ b/scr/miniprogram-2/pages/order/fill-tracking-no/index.wxss @@ -0,0 +1,95 @@ +@import '../../../style/theme.wxss'; + +:host { + background-color: #f5f5f5; +} + +.notice-bar { + padding: 24rpx 30rpx; + text-align: center; + font-size: 26rpx; + color: #e17349; + background: #fefcef; +} + +.fill-tracking-no__form { + margin-top: 20rpx; +} + +.fill-tracking-no__form .t-cell__note { + justify-content: flex-start; +} + +.fill-tracking-no__form .t-cell__value { + color: #333 !important; + font-size: 30rpx; + text-align: left; + padding: 0; +} + + +.fill-tracking-no__form .t-cell__value::after { + border: none !important; +} + +.fill-tracking-no__form .t-cell__value .t-textarea__wrapper { + padding: 0; +} + +.fill-tracking-no__form .t-input__control, +.fill-tracking-no__form .t-textarea__placeholder, +.fill-tracking-no__form .t-cell__placeholder { + font-size: 30rpx !important; +} + +.fill-tracking-no__form .t-textarea__placeholder, +.fill-tracking-no__form .t-cell__placeholder { + color: #bbbbbb !important; +} + +.t-textarea__note { + width: 100%; +} + +.fill-tracking-no__button-bar { + margin: 38rpx 30rpx 0; +} + +.fill-tracking-no__button-bar .btn { + background-color: transparent; + font-size: 32rpx; + width: 100%; + border-radius: 48rpx; +} + +.fill-tracking-no__button-bar .btn:first-child { + margin-bottom: 20rpx; +} + +.fill-tracking-no__button-bar .btn.confirmBtn { + background: #fa4126; + color: #fff; +} + +.fill-tracking-no__button-bar .btn.disabled { + background-color: #c6c6c6; + color: #fff; +} + +.fill-tracking-no__button-bar .t-class-confirm { + color: #fa4126; +} + +.t-cell-title-width { + width: 160rpx; + flex: none !important; +} +.textarea-wrapper { + background: #fff; + display: flex; + align-items: flex-start; + padding: 24rpx 32rpx 0 32rpx; +} +.t-textarea-wrapper { + box-sizing: border-box; +} diff --git a/scr/miniprogram-2/pages/order/invoice/index.js b/scr/miniprogram-2/pages/order/invoice/index.js new file mode 100644 index 0000000..5333802 --- /dev/null +++ b/scr/miniprogram-2/pages/order/invoice/index.js @@ -0,0 +1,38 @@ +import { fetchOrderDetail } from '../../../services/order/orderDetail'; + +Page({ + data: { + invoice: {}, + }, + onLoad({ orderNo }) { + this.orderNo = orderNo; + this.init(); + }, + init() { + this.getDetail(); + }, + getDetail() { + const params = { + parameter: this.orderNo, + }; + return fetchOrderDetail(params).then((res) => { + const order = res.data; + + const invoice = { + buyerName: order?.invoiceVO?.buyerName, //个人或公司名称 + buyerTaxNo: order?.invoiceVO?.buyerTaxNo, //税号 + buyerPhone: order?.invoiceVO?.buyerPhone, //手机 + email: order?.invoiceVO?.email, //邮箱 + titleType: order?.invoiceVO?.titleType === 1 ? '个人' : '公司', //发票抬头 1-个人 2-公司 + ontentType: order?.invoiceVO?.ontentType === 1 ? '商品明细' : '2类别', //发票内容 1-明细 2类别 + invoiceType: + order?.invoiceVO?.invoiceType === 5 ? '电子普通发票' : '不开发票', //是否开票 0-不开 5-电子发票 + isInvoice: order?.invoiceVO?.buyerName ? '已开票' : '未开票', + money: order?.invoiceVO?.money, + }; + this.setData({ + invoice, + }); + }); + }, +}); diff --git a/scr/miniprogram-2/pages/order/invoice/index.json b/scr/miniprogram-2/pages/order/invoice/index.json new file mode 100644 index 0000000..ea83b65 --- /dev/null +++ b/scr/miniprogram-2/pages/order/invoice/index.json @@ -0,0 +1,8 @@ +{ + "navigationBarTitleText": "发票详情", + "usingComponents": { + "t-cell": "tdesign-miniprogram/cell/cell", + "t-button": "tdesign-miniprogram/button/button", + "t-cell-group": "tdesign-miniprogram/cell-group/cell-group" + } +} diff --git a/scr/miniprogram-2/pages/order/invoice/index.wxml b/scr/miniprogram-2/pages/order/invoice/index.wxml new file mode 100644 index 0000000..b3bc794 --- /dev/null +++ b/scr/miniprogram-2/pages/order/invoice/index.wxml @@ -0,0 +1,40 @@ + + + 发票详情 + + 发票类型 + {{invoice.invoiceType}} + + + 发票抬头 + {{invoice.buyerName}} + + + 纳税人识别号 + {{invoice.buyerTaxNo}} + + + 发票内容 + {{invoice.ontentType}} + + + 发票金额 + {{invoice.money}} + + + + 收票人信息 + + 邮箱 + {{invoice.email}} + + + 手机号 + {{invoice.buyerPhone}} + + + 开票状态 + {{invoice.isInvoice}} + + + diff --git a/scr/miniprogram-2/pages/order/invoice/index.wxss b/scr/miniprogram-2/pages/order/invoice/index.wxss new file mode 100644 index 0000000..0a0379b --- /dev/null +++ b/scr/miniprogram-2/pages/order/invoice/index.wxss @@ -0,0 +1,31 @@ +:host { + background-color: #f5f5f5; +} + +.invoice-detail .invoice-detail-box { + background-color: #fff; + padding: 24rpx 32rpx; + margin-top: 24rpx; +} + +.invoice-detail-title { + font-size: 14px; + font-weight: 600; +} + +.invoice-detail-box-row { + display: flex; + margin-top: 44rpx; +} + +.invoice-detail-box-title { + font-size: 13px; + color: #666666; + width: 156rpx; + margin-right: 32rpx; +} + +.invoice-detail-box-value { + font-size: 13px; + color: #333333; +} diff --git a/scr/miniprogram-2/pages/order/order-confirm/components/address-card/index.js b/scr/miniprogram-2/pages/order/order-confirm/components/address-card/index.js new file mode 100644 index 0000000..96cf8ef --- /dev/null +++ b/scr/miniprogram-2/pages/order/order-confirm/components/address-card/index.js @@ -0,0 +1,25 @@ +/* + * @Author: rileycai + * @Date: 2022-03-05 16:47:16 + * @LastEditTime: 2022-03-05 16:48:32 + * @LastEditors: rileycai + * @Description: + * @FilePath: /tdesign-miniprogram-starter/pages/order/order-confirm/components/address-card/index.js + */ +Component({ + externalClasses: ['wr-class'], + properties: { + addressData: { + type: Object, + value: {}, + }, + }, + methods: { + onAddressTap() { + this.triggerEvent('addressclick'); + }, + onAddTap() { + this.triggerEvent('addclick'); + }, + }, +}); diff --git a/scr/miniprogram-2/pages/order/order-confirm/components/address-card/index.json b/scr/miniprogram-2/pages/order/order-confirm/components/address-card/index.json new file mode 100644 index 0000000..08ecc96 --- /dev/null +++ b/scr/miniprogram-2/pages/order/order-confirm/components/address-card/index.json @@ -0,0 +1,7 @@ +{ + "component": true, + "usingComponents": { + "t-cell": "tdesign-miniprogram/cell/cell", + "t-icon": "tdesign-miniprogram/icon/icon" + } +} diff --git a/scr/miniprogram-2/pages/order/order-confirm/components/address-card/index.wxml b/scr/miniprogram-2/pages/order/order-confirm/components/address-card/index.wxml new file mode 100644 index 0000000..9cf86f4 --- /dev/null +++ b/scr/miniprogram-2/pages/order/order-confirm/components/address-card/index.wxml @@ -0,0 +1,46 @@ + + var hidePhoneNum = function(array) { + if (!array) return; + var mphone = array.substring(0, 3) + '****' + array.substring(7); + return mphone; + } + module.exports = { + hidePhoneNum:hidePhoneNum + } + + + + + + + + + + {{addressData.addressTag}} + + {{addressData.provinceName}} {{addressData.cityName}} {{addressData.districtName}} + + {{addressData.detailAddress}} + + {{addressData.name}} {{utils.hidePhoneNum(addressData.phone)}} + + + + + + + + + + + diff --git a/scr/miniprogram-2/pages/order/order-confirm/components/address-card/index.wxss b/scr/miniprogram-2/pages/order/order-confirm/components/address-card/index.wxss new file mode 100644 index 0000000..aaff4bd --- /dev/null +++ b/scr/miniprogram-2/pages/order/order-confirm/components/address-card/index.wxss @@ -0,0 +1,66 @@ +.address-card { + background: #fff; + margin: 0rpx 0rpx 24rpx; +} +.address-card .wr-cell__title { + color: #999; + margin-left: 6rpx; +} +.address-card .order-address { + display: flex; + width: 100%; +} +.address-card .order-address .address-content { + flex: 1; +} +.order-address .address__right { + align-self: center; +} +.address-card .order-address .title { + display: flex; + align-items: center; + height: 40rpx; + font-size: 28rpx; + font-weight: normal; + color: #999999; + line-height: 40rpx; +} +.address-card .order-address .title .address-tag { + width: 52rpx; + height: 29rpx; + border: 1rpx solid #0091ff; + background-color: rgba(122, 167, 251, 0.1); + text-align: center; + line-height: 29rpx; + border-radius: 8rpx; + color: #0091ff; + font-size: 20rpx; + margin-right: 12rpx; +} +.address-card .order-address .detail { + overflow: hidden; + text-overflow: ellipsis; + display: -webkit-box; + -webkit-box-orient: vertical; + -webkit-line-clamp: 2; + font-size: 36rpx; + font-weight: bold; + color: #333333; + line-height: 48rpx; + margin: 8rpx 0; +} +.address-card .order-address .info { + height: 40rpx; + font-size: 28rpx; + font-weight: normal; + color: #333333; + line-height: 40rpx; +} +.address-card .top-line { + width: 100%; + height: 6rpx; + background-color: #fff; + background-image: url(https://cdn-we-retail.ym.tencent.com/miniapp/order/stripe.png); + background-repeat: repeat-x; + display: block; +} diff --git a/scr/miniprogram-2/pages/order/order-confirm/getNotes.wxs b/scr/miniprogram-2/pages/order/order-confirm/getNotes.wxs new file mode 100644 index 0000000..935962c --- /dev/null +++ b/scr/miniprogram-2/pages/order/order-confirm/getNotes.wxs @@ -0,0 +1,11 @@ +var getNotes = function (storeInfoList, storeIndex) { + if (!storeInfoList) { + return ''; + } + var storeInfo = storeInfoList[storeIndex]; + if (!storeInfo) { + return ''; + } + return storeInfoList[storeIndex].remark; +}; +module.exports = getNotes; diff --git a/scr/miniprogram-2/pages/order/order-confirm/handleInvoice.wxs b/scr/miniprogram-2/pages/order/order-confirm/handleInvoice.wxs new file mode 100644 index 0000000..30e50f9 --- /dev/null +++ b/scr/miniprogram-2/pages/order/order-confirm/handleInvoice.wxs @@ -0,0 +1,11 @@ +var handleInvoice = function (invoiceData) { + if (!invoiceData || invoiceData.invoiceType == 0) { + return '暂不开发票'; + } + var title = invoiceData.titleType == 2 ? '公司' : '个人'; + var content = invoiceData.contentType == 2 ? '商品类别' : '商品明细'; + return invoiceData.email + ? '电子普通发票 (' + content + ' - ' + title + ')' + : '暂不开发票'; +}; +module.exports = handleInvoice; diff --git a/scr/miniprogram-2/pages/order/order-confirm/index.js b/scr/miniprogram-2/pages/order/order-confirm/index.js new file mode 100644 index 0000000..8ac2566 --- /dev/null +++ b/scr/miniprogram-2/pages/order/order-confirm/index.js @@ -0,0 +1,571 @@ +import Toast from 'tdesign-miniprogram/toast/index'; +import { fetchSettleDetail } from '../../../services/order/orderConfirm'; +import { commitPay, wechatPayOrder } from './pay'; +import { getAddressPromise } from '../../usercenter/address/list/util'; + +const stripeImg = `https://cdn-we-retail.ym.tencent.com/miniapp/order/stripe.png`; + +Page({ + data: { + placeholder: '备注信息', + stripeImg, + loading: false, + settleDetailData: { + storeGoodsList: [], //正常下单商品列表 + outOfStockGoodsList: [], //库存不足商品 + abnormalDeliveryGoodsList: [], // 不能正常配送商品 + inValidGoodsList: [], // 失效或者库存不足 + limitGoodsList: [], //限购商品 + couponList: [], //门店优惠券信息 + }, // 获取结算页详情 data + orderCardList: [], // 仅用于商品卡片展示 + couponsShow: false, // 显示优惠券的弹框 + invoiceData: { + email: '', // 发票发送邮箱 + buyerTaxNo: '', // 税号 + invoiceType: null, // 开票类型 1:增值税专用发票; 2:增值税普通发票; 3:增值税电子发票;4:增值税卷式发票;5:区块链电子发票。 + buyerPhone: '', //手机号 + buyerName: '', //个人或公司名称 + titleType: '', // 发票抬头 1-公司 2-个人 + contentType: '', //发票内容 1-明细 2-类别 + }, + goodsRequestList: [], + userAddressReq: null, + popupShow: false, // 不在配送范围 失效 库存不足 商品展示弹框 + notesPosition: 'center', + storeInfoList: [], + storeNoteIndex: 0, //当前填写备注门店index + promotionGoodsList: [], //当前门店商品列表(优惠券) + couponList: [], //当前门店所选优惠券 + submitCouponList: [], //所有门店所选优惠券 + currentStoreId: null, //当前优惠券storeId + userAddress: null, + }, + + payLock: false, + noteInfo: [], + tempNoteInfo: [], + onLoad(options) { + this.setData({ + loading: true, + }); + this.handleOptionsParams(options); + }, + onShow() { + const invoiceData = wx.getStorageSync('invoiceData'); + if (invoiceData) { + //处理发票 + this.invoiceData = invoiceData; + this.setData({ + invoiceData, + }); + wx.removeStorageSync('invoiceData'); + } + }, + + init() { + this.setData({ + loading: true, + }); + const { goodsRequestList } = this; + this.handleOptionsParams({ goodsRequestList }); + }, + // 处理不同情况下跳转到结算页时需要的参数 + handleOptionsParams(options, couponList) { + let { goodsRequestList } = this; // 商品列表 + let { userAddressReq } = this; // 收货地址 + + const storeInfoList = []; // 门店列表 + // 如果是从地址选择页面返回,则使用地址显选择页面新选择的地址去获取结算数据 + if (options.userAddressReq) { + userAddressReq = options.userAddressReq; + } + if (options.type === 'cart') { + // 从购物车跳转过来时,获取传入的商品列表数据 + const goodsRequestListJson = wx.getStorageSync('order.goodsRequestList'); + goodsRequestList = JSON.parse(goodsRequestListJson); + } else if (typeof options.goodsRequestList === 'string') { + goodsRequestList = JSON.parse(options.goodsRequestList); + } + //获取结算页请求数据列表 + const storeMap = {}; + goodsRequestList.forEach((goods) => { + if (!storeMap[goods.storeId]) { + storeInfoList.push({ + storeId: goods.storeId, + storeName: goods.storeName, + }); + storeMap[goods.storeId] = true; + } + }); + this.goodsRequestList = goodsRequestList; + this.storeInfoList = storeInfoList; + const params = { + goodsRequestList, + storeInfoList, + userAddressReq, + couponList, + }; + fetchSettleDetail(params).then( + (res) => { + this.setData({ + loading: false, + }); + this.initData(res.data); + }, + () => { + //接口异常处理 + this.handleError(); + }, + ); + }, + initData(resData) { + // 转换商品卡片显示数据 + const data = this.handleResToGoodsCard(resData); + this.userAddressReq = resData.userAddress; + + if (resData.userAddress) { + this.setData({ userAddress: resData.userAddress }); + } + this.setData({ settleDetailData: data }); + this.isInvalidOrder(data); + }, + + isInvalidOrder(data) { + // 失效 不在配送范围 限购的商品 提示弹窗 + if ( + (data.limitGoodsList && data.limitGoodsList.length > 0) || + (data.abnormalDeliveryGoodsList && + data.abnormalDeliveryGoodsList.length > 0) || + (data.inValidGoodsList && data.inValidGoodsList.length > 0) + ) { + this.setData({ popupShow: true }); + return true; + } + this.setData({ popupShow: false }); + if (data.settleType === 0) { + return true; + } + return false; + }, + + handleError() { + Toast({ + context: this, + selector: '#t-toast', + message: '结算异常, 请稍后重试', + duration: 2000, + icon: '', + }); + + setTimeout(() => { + wx.navigateBack(); + }, 1500); + this.setData({ + loading: false, + }); + }, + getRequestGoodsList(storeGoodsList) { + const filterStoreGoodsList = []; + storeGoodsList && + storeGoodsList.forEach((store) => { + const { storeName } = store; + store.skuDetailVos && + store.skuDetailVos.forEach((goods) => { + const data = goods; + data.storeName = storeName; + filterStoreGoodsList.push(data); + }); + }); + return filterStoreGoodsList; + }, + handleGoodsRequest(goods, isOutStock = false) { + const { + reminderStock, + quantity, + storeId, + uid, + saasId, + spuId, + goodsName, + skuId, + storeName, + roomId, + } = goods; + const resQuantity = isOutStock ? reminderStock : quantity; + return { + quantity: resQuantity, + storeId, + uid, + saasId, + spuId, + goodsName, + skuId, + storeName, + roomId, + }; + }, + handleResToGoodsCard(data) { + // 转换数据 符合 goods-card展示 + const orderCardList = []; // 订单卡片列表 + const storeInfoList = []; + const submitCouponList = []; //使用优惠券列表; + + data.storeGoodsList && + data.storeGoodsList.forEach((ele) => { + const orderCard = { + id: ele.storeId, + storeName: ele.storeName, + status: 0, + statusDesc: '', + amount: ele.storeTotalPayAmount, + goodsList: [], + }; // 订单卡片 + ele.skuDetailVos.forEach((item, index) => { + orderCard.goodsList.push({ + id: index, + thumb: item.image, + title: item.goodsName, + specs: item.skuSpecLst.map((s) => s.specValue), // 规格列表 string[] + price: item.tagPrice || item.settlePrice || '0', // 优先取限时活动价 + settlePrice: item.settlePrice, + titlePrefixTags: item.tagText ? [{ text: item.tagText }] : [], + num: item.quantity, + skuId: item.skuId, + spuId: item.spuId, + storeId: item.storeId, + }); + }); + + storeInfoList.push({ + storeId: ele.storeId, + storeName: ele.storeName, + remark: '', + }); + submitCouponList.push({ + storeId: ele.storeId, + couponList: ele.couponList || [], + }); + this.noteInfo.push(''); + this.tempNoteInfo.push(''); + orderCardList.push(orderCard); + }); + + this.setData({ orderCardList, storeInfoList, submitCouponList }); + return data; + }, + onGotoAddress() { + /** 获取一个Promise */ + getAddressPromise() + .then((address) => { + this.handleOptionsParams({ + userAddressReq: { ...address, checked: true }, + }); + }) + .catch(() => {}); + + const { userAddressReq } = this; // 收货地址 + + let id = ''; + + if (userAddressReq?.id) { + id = `&id=${userAddressReq.id}`; + } + + wx.navigateTo({ + url: `/pages/usercenter/address/list/index?selectMode=1&isOrderSure=1${id}`, + }); + }, + onNotes(e) { + const { storenoteindex: storeNoteIndex } = e.currentTarget.dataset; + // 添加备注信息 + this.setData({ + dialogShow: true, + storeNoteIndex, + }); + }, + onInput(e) { + const { storeNoteIndex } = this.data; + this.noteInfo[storeNoteIndex] = e.detail.value; + }, + onBlur() { + this.setData({ + notesPosition: 'center', + }); + }, + onFocus() { + this.setData({ + notesPosition: 'self', + }); + }, + onTap() { + this.setData({ + placeholder: '', + }); + }, + onNoteConfirm() { + // 备注信息 确认按钮 + const { storeInfoList, storeNoteIndex } = this.data; + this.tempNoteInfo[storeNoteIndex] = this.noteInfo[storeNoteIndex]; + storeInfoList[storeNoteIndex].remark = this.noteInfo[storeNoteIndex]; + + this.setData({ + dialogShow: false, + storeInfoList, + }); + }, + onNoteCancel() { + // 备注信息 取消按钮 + const { storeNoteIndex } = this.data; + this.noteInfo[storeNoteIndex] = this.tempNoteInfo[storeNoteIndex]; + this.setData({ + dialogShow: false, + }); + }, + + onSureCommit() { + // 商品库存不足继续结算 + const { settleDetailData } = this.data; + const { outOfStockGoodsList, storeGoodsList, inValidGoodsList } = + settleDetailData; + if ( + (outOfStockGoodsList && outOfStockGoodsList.length > 0) || + (inValidGoodsList && storeGoodsList) + ) { + // 合并正常商品 和 库存 不足商品继续支付 + // 过滤不必要的参数 + const filterOutGoodsList = []; + outOfStockGoodsList && + outOfStockGoodsList.forEach((outOfStockGoods) => { + const { storeName } = outOfStockGoods; + outOfStockGoods.unSettlementGoods.forEach((ele) => { + const data = ele; + data.quantity = ele.reminderStock; + data.storeName = storeName; + filterOutGoodsList.push(data); + }); + }); + const filterStoreGoodsList = this.getRequestGoodsList(storeGoodsList); + const goodsRequestList = filterOutGoodsList.concat(filterStoreGoodsList); + this.handleOptionsParams({ goodsRequestList }); + } + }, + // 提交订单 + submitOrder() { + const { + settleDetailData, + userAddressReq, + invoiceData, + storeInfoList, + submitCouponList, + } = this.data; + const { goodsRequestList } = this; + + if (!userAddressReq && !settleDetailData.userAddress) { + Toast({ + context: this, + selector: '#t-toast', + message: '请添加收货地址', + duration: 2000, + icon: 'help-circle', + }); + + return; + } + if ( + this.payLock || + !settleDetailData.settleType || + !settleDetailData.totalAmount + ) { + return; + } + this.payLock = true; + const resSubmitCouponList = this.handleCouponList(submitCouponList); + const params = { + userAddressReq: settleDetailData.userAddress || userAddressReq, + goodsRequestList: goodsRequestList, + userName: settleDetailData.userAddress.name || userAddressReq.name, + totalAmount: settleDetailData.totalPayAmount, //取优惠后的结算金额 + invoiceRequest: null, + storeInfoList, + couponList: resSubmitCouponList, + }; + if (invoiceData && invoiceData.email) { + params.invoiceRequest = invoiceData; + } + commitPay(params).then( + (res) => { + this.payLock = false; + const { data } = res; + // 提交出现 失效 不在配送范围 限购的商品 提示弹窗 + if (this.isInvalidOrder(data)) { + return; + } + if (res.code === 'Success') { + this.handlePay(data, settleDetailData); + } else { + Toast({ + context: this, + selector: '#t-toast', + message: res.msg || '提交订单超时,请稍后重试', + duration: 2000, + icon: '', + }); + setTimeout(() => { + // 提交支付失败 返回购物车 + wx.navigateBack(); + }, 2000); + } + }, + (err) => { + this.payLock = false; + if ( + err.code === 'CONTAINS_INSUFFICIENT_GOODS' || + err.code === 'TOTAL_AMOUNT_DIFFERENT' + ) { + Toast({ + context: this, + selector: '#t-toast', + message: err.msg || '支付异常', + duration: 2000, + icon: '', + }); + this.init(); + } else if (err.code === 'ORDER_PAY_FAIL') { + Toast({ + context: this, + selector: '#t-toast', + message: '支付失败', + duration: 2000, + icon: 'close-circle', + }); + setTimeout(() => { + wx.redirectTo({ url: '/order/list' }); + }); + } else if (err.code === 'ILLEGAL_CONFIG_PARAM') { + Toast({ + context: this, + selector: '#t-toast', + message: + '支付失败,微信支付商户号设置有误,请商家重新检查支付设置。', + duration: 2000, + icon: 'close-circle', + }); + setTimeout(() => { + wx.redirectTo({ url: '/order/list' }); + }); + } else { + Toast({ + context: this, + selector: '#t-toast', + message: err.msg || '提交支付超时,请稍后重试', + duration: 2000, + icon: '', + }); + setTimeout(() => { + // 提交支付失败 返回购物车 + wx.navigateBack(); + }, 2000); + } + }, + ); + }, + + // 处理支付 + handlePay(data, settleDetailData) { + const { channel, payInfo, tradeNo, interactId, transactionId } = data; + const { totalAmount, totalPayAmount } = settleDetailData; + const payOrderInfo = { + payInfo: payInfo, + orderId: tradeNo, + orderAmt: totalAmount, + payAmt: totalPayAmount, + interactId: interactId, + tradeNo: tradeNo, + transactionId: transactionId, + }; + + if (channel === 'wechat') { + wechatPayOrder(payOrderInfo); + } + }, + + hide() { + // 隐藏 popup + this.setData({ + 'settleDetailData.abnormalDeliveryGoodsList': [], + }); + }, + onReceipt() { + // 跳转 开发票 + const invoiceData = this.invoiceData || {}; + wx.navigateTo({ + url: `/pages/order/receipt/index?invoiceData=${JSON.stringify( + invoiceData, + )}`, + }); + }, + + onCoupons(e) { + const { submitCouponList, currentStoreId } = this.data; + const { goodsRequestList } = this; + const { selectedList } = e.detail; + const tempSubmitCouponList = submitCouponList.map((storeCoupon) => { + return { + couponList: + storeCoupon.storeId === currentStoreId + ? selectedList + : storeCoupon.couponList, + }; + }); + const resSubmitCouponList = this.handleCouponList(tempSubmitCouponList); + //确定选择优惠券 + this.handleOptionsParams({ goodsRequestList }, resSubmitCouponList); + this.setData({ couponsShow: false }); + }, + onOpenCoupons(e) { + const { storeid } = e.currentTarget.dataset; + this.setData({ + couponsShow: true, + currentStoreId: storeid, + }); + }, + + handleCouponList(storeCouponList) { + //处理门店优惠券 转换成接口需要 + if (!storeCouponList) return []; + const resSubmitCouponList = []; + storeCouponList.forEach((ele) => { + resSubmitCouponList.push(...ele.couponList); + }); + return resSubmitCouponList; + }, + + onGoodsNumChange(e) { + const { + detail: { value }, + currentTarget: { + dataset: { goods }, + }, + } = e; + const index = this.goodsRequestList.findIndex( + ({ storeId, spuId, skuId }) => + goods.storeId === storeId && + goods.spuId === spuId && + goods.skuId === skuId, + ); + if (index >= 0) { + // eslint-disable-next-line no-confusing-arrow + const goodsRequestList = this.goodsRequestList.map((item, i) => + i === index ? { ...item, quantity: value } : item, + ); + this.handleOptionsParams({ goodsRequestList }); + } + }, + + onPopupChange() { + this.setData({ + popupShow: !this.data.popupShow, + }); + }, +}); diff --git a/scr/miniprogram-2/pages/order/order-confirm/index.json b/scr/miniprogram-2/pages/order/order-confirm/index.json new file mode 100644 index 0000000..11f25ac --- /dev/null +++ b/scr/miniprogram-2/pages/order/order-confirm/index.json @@ -0,0 +1,16 @@ +{ + "navigationBarTitleText": "订单确认", + "usingComponents": { + "t-popup": "tdesign-miniprogram/popup/popup", + "t-toast": "tdesign-miniprogram/toast/toast", + "t-icon": "tdesign-miniprogram/icon/icon", + "t-cell": "tdesign-miniprogram/cell/cell", + "t-dialog": "tdesign-miniprogram/dialog/dialog", + "t-textarea": "tdesign-miniprogram/textarea/textarea", + "price": "/components/price/index", + "select-coupons": "../components/selectCoupons/selectCoupons", + "no-goods": "../components/noGoods/noGoods", + "t-image": "/components/webp-image/index", + "address-card": "./components/address-card/index" + } +} \ No newline at end of file diff --git a/scr/miniprogram-2/pages/order/order-confirm/index.wxml b/scr/miniprogram-2/pages/order/order-confirm/index.wxml new file mode 100644 index 0000000..c410ed3 --- /dev/null +++ b/scr/miniprogram-2/pages/order/order-confirm/index.wxml @@ -0,0 +1,167 @@ + + + + + + + + + + + + + {{goods.title}} + {{goods.specs}} + + + + x{{goods.num}} + + + + + + 商品总额 + + + + 运费 + + + + + + + 免运费 + + + + 活动优惠 + + - + + + + + 优惠券 + + + + - + + 选择优惠券 + + 无可用 + + + + + 发票 + + {{handleInvoice(invoiceData)}} + + + + + 订单备注 + + {{getNotes(storeInfoList, 0) ? getNotes(storeInfoList, 0) :'选填,建议先和商家沟通确认'}} + + + + + + + 共{{settleDetailData.totalGoodsCount}}件 + 小计 + + + + + + + + 提交订单 + + + + + + + + + + + + + + diff --git a/scr/miniprogram-2/pages/order/order-confirm/index.wxss b/scr/miniprogram-2/pages/order/order-confirm/index.wxss new file mode 100644 index 0000000..73e0188 --- /dev/null +++ b/scr/miniprogram-2/pages/order/order-confirm/index.wxss @@ -0,0 +1,229 @@ +.order-sure { + box-sizing: border-box; + background: #f6f6f6; + padding: 24rpx 0 calc(env(safe-area-inset-bottom) + 136rpx); + min-height: 100vh; +} + +.order-sure .wx-pay-cover { + position: fixed; + left: 0; + bottom: 0; + right: 0; + z-index: 10; + background: #fff; + height: 112rpx; + padding-bottom: env(safe-area-inset-bottom); +} +.order-sure .wx-pay-cover .wx-pay { + width: 100%; + height: 100rpx; + box-sizing: border-box; + padding: 0rpx 32rpx; + display: flex; + justify-content: space-between; + align-items: center; +} +.order-sure .wx-pay-cover .wx-pay .price { + color: #fa4126; + font-weight: bold; + font-size: 63rpx; + line-height: 88rpx; +} + +.order-sure .wx-pay-cover .wx-pay .submit-btn { + height: 80rpx; + width: 240rpx; + border-radius: 40rpx; + background-color: #fa4126; + color: #ffffff; + line-height: 80rpx; + font-weight: bold; + font-size: 28rpx; + text-align: center; +} +.order-sure .wx-pay-cover .wx-pay .btn-gray { + background: #cccccc; +} + +.order-wrapper .store-wrapper { + width: 100%; + height: 96rpx; + box-sizing: border-box; + padding: 0 32rpx; + display: flex; + align-items: center; + font-size: 28rpx; + line-height: 40rpx; + color: #333333; + background-color: #ffffff; +} +.order-wrapper .store-wrapper .store-logo { + margin-right: 16rpx; +} +.order-wrapper .goods-wrapper { + width: 100%; + box-sizing: border-box; + padding: 16rpx 32rpx; + display: flex; + align-items: flex-start; + justify-content: space-between; + font-size: 24rpx; + line-height: 32rpx; + color: #999999; + background-color: #ffffff; +} +.goods-wrapper .goods-image { + width: 176rpx; + height: 176rpx; + border-radius: 8rpx; + overflow: hidden; + margin-right: 16rpx; +} +.goods-wrapper .goods-content { + flex: 1; +} + +.goods-wrapper .goods-content .goods-title { + display: -webkit-box; + -webkit-box-orient: vertical; + -webkit-line-clamp: 2; + overflow: hidden; + text-overflow: ellipsis; + font-size: 28rpx; + line-height: 40rpx; + margin-bottom: 12rpx; + color: #333333; + margin-right: 16rpx; +} + +.goods-wrapper .goods-right { + min-width: 128rpx; + display: flex; + flex-direction: column; + align-items: flex-end; +} + +.goods-right .goods-price { + color: #333333; + font-size: 32rpx; + line-height: 48rpx; + font-weight: bold; + margin-bottom: 16rpx; +} + +.goods-right .goods-num { + text-align: right; +} + +.order-sure .pay-detail { + background-color: #ffffff; + padding: 16rpx 32rpx; + width: 100%; + box-sizing: border-box; +} + +.order-sure .pay-detail .pay-item { + width: 100%; + height: 72rpx; + display: flex; + align-items: center; + justify-content: space-between; + font-size: 26rpx; + line-height: 36rpx; + color: #666666; +} +.order-sure .pay-detail .pay-item .pay-item__right { + color: #333333; + font-size: 24rpx; + display: flex; + align-items: center; + justify-content: flex-end; + max-width: 400rpx; +} +.order-sure .pay-detail .pay-item .pay-item__right .pay-remark { + display: -webkit-box; + -webkit-box-orient: vertical; + -webkit-line-clamp: 2; + max-width: 400rpx; + text-overflow: ellipsis; + overflow: hidden; +} +.order-sure .pay-detail .pay-item .font-bold { + font-weight: bold; +} +.order-sure .pay-detail .pay-item .primary { + color: #fa4126; +} + +.add-notes .add-notes__content { + padding: 32rpx 8rpx 0 !important; +} +.add-notes .add-notes__confirm { + color: #fa4126; +} + +.add-notes .t-textarea__placeholder, +.add-notes .add-notes__placeholder { + color: #aeb3b7; +} +.add-notes .add-notes__textarea__font { + font-size: 26rpx; +} +.add-notes .add-notes__textarea { + font-size: 24rpx; + border-radius: 10rpx; + color: #f5f5f5; + margin-top: 30rpx; +} +.order-sure .add-notes .dialog__message { + border-radius: 8rpx; +} + +.order-sure .add-notes .dialog__button-cancel::after { + border-right: 0; +} + +.order-sure .amount-wrapper { + width: 100%; + box-sizing: border-box; + background-color: #ffffff; + padding: 0rpx 32rpx; + height: 96rpx; +} + +.order-sure .pay-amount { + width: 100%; + height: 96rpx; + display: flex; + align-items: center; + justify-content: flex-end; + font-size: 28rpx; + color: #333333; + position: relative; +} +.order-sure .pay-amount::after { + position: absolute; + content: ' '; + top: 0; + left: 0; + width: 200%; + height: 200%; + transform: scale(0.5); + transform-origin: 0 0; + border-top: 2rpx solid #f5f5f5; +} +.order-sure .pay-amount .order-num { + color: #999999; + padding-right: 8rpx; +} + +.order-sure .pay-amount .total-price { + font-size: 36rpx; + color: #fa4126; + font-weight: bold; + padding-left: 8rpx; +} +.add-notes__confirm { + color: #fa4126 !important; +} diff --git a/scr/miniprogram-2/pages/order/order-confirm/order.wxs b/scr/miniprogram-2/pages/order/order-confirm/order.wxs new file mode 100644 index 0000000..42f3de1 --- /dev/null +++ b/scr/miniprogram-2/pages/order/order-confirm/order.wxs @@ -0,0 +1,8 @@ +var toHide = function (array) { + if (!array) return; + var mphone = array.substring(0, 3) + '****' + array.substring(7); + return mphone; +}; +module.exports = { + toHide: toHide, +}; diff --git a/scr/miniprogram-2/pages/order/order-confirm/pay.js b/scr/miniprogram-2/pages/order/order-confirm/pay.js new file mode 100644 index 0000000..0c27c3c --- /dev/null +++ b/scr/miniprogram-2/pages/order/order-confirm/pay.js @@ -0,0 +1,115 @@ +import Dialog from 'tdesign-miniprogram/dialog/index'; +import Toast from 'tdesign-miniprogram/toast/index'; + +import { dispatchCommitPay } from '../../../services/order/orderConfirm'; + +// 真实的提交支付 +export const commitPay = (params) => { + return dispatchCommitPay({ + goodsRequestList: params.goodsRequestList, // 待结算的商品集合 + invoiceRequest: params.invoiceRequest, // 发票信息 + // isIgnore: params.isIgnore || false, // 删掉 是否忽视库存不足和商品失效,继续结算,true=继续结算 购物车请赋值false + userAddressReq: params.userAddressReq, // 地址信息(用户在购物选择更换地址) + currency: params.currency || 'CNY', // 支付货币: 人民币=CNY,美元=USD + logisticsType: params.logisticsType || 1, // 配送方式 0=无需配送 1=快递 2=商家 3=同城 4=自提 + // orderMark: params.orderMark, // 下单备注 + orderType: params.orderType || 0, // 订单类型 0=普通订单 1=虚拟订单 + payType: params.payType || 1, // 支付类型(0=线上、1=线下) + totalAmount: params.totalAmount, // 新增字段"totalAmount"总的支付金额 + userName: params.userName, // 用户名 + payWay: 1, + authorizationCode: '', //loginCode, // 登录凭证 + storeInfoList: params.storeInfoList, //备注信息列表 + couponList: params.couponList, + groupInfo: params.groupInfo, + }); +}; + +export const paySuccess = (payOrderInfo) => { + const { payAmt, tradeNo, groupId, promotionId } = payOrderInfo; + // 支付成功 + Toast({ + context: this, + selector: '#t-toast', + message: '支付成功', + duration: 2000, + icon: 'check-circle', + }); + + const params = { + totalPaid: payAmt, + orderNo: tradeNo, + }; + if (groupId) { + params.groupId = groupId; + } + if (promotionId) { + params.promotionId = promotionId; + } + const paramsStr = Object.keys(params) + .map((k) => `${k}=${params[k]}`) + .join('&'); + // 跳转支付结果页面 + wx.redirectTo({ url: `/pages/order/pay-result/index?${paramsStr}` }); +}; + +export const payFail = (payOrderInfo, resultMsg) => { + if (resultMsg === 'requestPayment:fail cancel') { + if (payOrderInfo.dialogOnCancel) { + //结算页,取消付款,dialog提示 + Dialog.confirm({ + title: '是否放弃付款', + content: '商品可能很快就会被抢空哦,是否放弃付款?', + confirmBtn: '放弃', + cancelBtn: '继续付款', + }).then(() => { + wx.redirectTo({ url: '/pages/order/order-list/index' }); + }); + } else { + //订单列表页,订单详情页,取消付款,toast提示 + Toast({ + context: this, + selector: '#t-toast', + message: '支付取消', + duration: 2000, + icon: 'close-circle', + }); + } + } else { + Toast({ + context: this, + selector: '#t-toast', + message: `支付失败:${resultMsg}`, + duration: 2000, + icon: 'close-circle', + }); + setTimeout(() => { + wx.redirectTo({ url: '/pages/order/order-list/index' }); + }, 2000); + } +}; + +// 微信支付方式 +export const wechatPayOrder = (payOrderInfo) => { + // const payInfo = JSON.parse(payOrderInfo.payInfo); + // const { timeStamp, nonceStr, signType, paySign } = payInfo; + return new Promise((resolve) => { + // demo 中直接走支付成功 + paySuccess(payOrderInfo); + resolve(); + /* wx.requestPayment({ + timeStamp, + nonceStr, + package: payInfo.package, + signType, + paySign, + success: function () { + paySuccess(payOrderInfo); + resolve(); + }, + fail: function (err) { + payFail(payOrderInfo, err.errMsg); + }, + }); */ + }); +}; diff --git a/scr/miniprogram-2/pages/order/order-detail/index.js b/scr/miniprogram-2/pages/order/order-detail/index.js new file mode 100644 index 0000000..8c09aee --- /dev/null +++ b/scr/miniprogram-2/pages/order/order-detail/index.js @@ -0,0 +1,288 @@ +import { formatTime } from '../../../utils/util'; +import { OrderStatus, LogisticsIconMap } from '../config'; +import { + fetchBusinessTime, + fetchOrderDetail, +} from '../../../services/order/orderDetail'; +import Toast from 'tdesign-miniprogram/toast/index'; +import { getAddressPromise } from '../../usercenter/address/list/util'; + +Page({ + data: { + pageLoading: true, + order: {}, // 后台返回的原始数据 + _order: {}, // 内部使用和提供给 order-card 的数据 + storeDetail: {}, + countDownTime: null, + addressEditable: false, + backRefresh: false, // 用于接收其他页面back时的状态 + formatCreateTime: '', //格式化订单创建时间 + logisticsNodes: [], + /** 订单评论状态 */ + orderHasCommented: true, + }, + + onLoad(query) { + this.orderNo = query.orderNo; + this.init(); + this.navbar = this.selectComponent('#navbar'); + this.pullDownRefresh = this.selectComponent('#wr-pull-down-refresh'); + }, + + onShow() { + // 当从其他页面返回,并且 backRefresh 被置为 true 时,刷新数据 + if (!this.data.backRefresh) return; + this.onRefresh(); + this.setData({ backRefresh: false }); + }, + + onPageScroll(e) { + this.pullDownRefresh && this.pullDownRefresh.onPageScroll(e); + }, + + onImgError(e) { + if (e.detail) { + console.error('img 加载失败'); + } + }, + + // 页面初始化,会展示pageLoading + init() { + this.setData({ pageLoading: true }); + this.getStoreDetail(); + this.getDetail() + .then(() => { + this.setData({ pageLoading: false }); + }) + .catch((e) => { + console.error(e); + }); + }, + + // 页面刷新,展示下拉刷新 + onRefresh() { + this.init(); + // 如果上一页为订单列表,通知其刷新数据 + const pages = getCurrentPages(); + const lastPage = pages[pages.length - 2]; + if (lastPage) { + lastPage.data.backRefresh = true; + } + }, + + // 页面刷新,展示下拉刷新 + onPullDownRefresh_(e) { + const { callback } = e.detail; + return this.getDetail().then(() => callback && callback()); + }, + + getDetail() { + const params = { + parameter: this.orderNo, + }; + return fetchOrderDetail(params).then((res) => { + const order = res.data; + const _order = { + id: order.orderId, + orderNo: order.orderNo, + parentOrderNo: order.parentOrderNo, + storeId: order.storeId, + storeName: order.storeName, + status: order.orderStatus, + statusDesc: order.orderStatusName, + amount: order.paymentAmount, + totalAmount: order.goodsAmountApp, + logisticsNo: order.logisticsVO.logisticsNo, + goodsList: (order.orderItemVOs || []).map((goods) => + Object.assign({}, goods, { + id: goods.id, + thumb: goods.goodsPictureUrl, + title: goods.goodsName, + skuId: goods.skuId, + spuId: goods.spuId, + specs: (goods.specifications || []).map((s) => s.specValue), + price: goods.tagPrice ? goods.tagPrice : goods.actualPrice, // 商品销售单价, 优先取限时活动价 + num: goods.buyQuantity, + titlePrefixTags: goods.tagText ? [{ text: goods.tagText }] : [], + buttons: goods.buttonVOs || [], + }), + ), + buttons: order.buttonVOs || [], + createTime: order.createTime, + receiverAddress: this.composeAddress(order), + groupInfoVo: order.groupInfoVo, + }; + this.setData({ + order, + _order, + formatCreateTime: formatTime( + parseFloat(`${order.createTime}`), + 'YYYY-MM-DD HH:mm', + ), // 格式化订单创建时间 + countDownTime: this.computeCountDownTime(order), + addressEditable: + [OrderStatus.PENDING_PAYMENT, OrderStatus.PENDING_DELIVERY].includes( + order.orderStatus, + ) && order.orderSubStatus !== -1, // 订单正在取消审核时不允许修改地址(但是返回的状态码与待发货一致) + isPaid: !!order.paymentVO.paySuccessTime, + invoiceStatus: this.datermineInvoiceStatus(order), + invoiceDesc: order.invoiceDesc, + invoiceType: + order.invoiceVO?.invoiceType === 5 ? '电子普通发票' : '不开发票', //是否开票 0-不开 5-电子发票 + logisticsNodes: this.flattenNodes(order.trajectoryVos || []), + }); + }); + }, + + // 展开物流节点 + flattenNodes(nodes) { + return (nodes || []).reduce((res, node) => { + return (node.nodes || []).reduce((res1, subNode, index) => { + res1.push({ + title: index === 0 ? node.title : '', // 子节点中仅第一个显示title + desc: subNode.status, + date: formatTime(+subNode.timestamp, 'YYYY-MM-DD HH:mm:ss'), + icon: index === 0 ? LogisticsIconMap[node.code] || '' : '', // 子节点中仅第一个显示icon + }); + return res1; + }, res); + }, []); + }, + + datermineInvoiceStatus(order) { + // 1-已开票 + // 2-未开票(可补开) + // 3-未开票 + // 4-门店不支持开票 + return order.invoiceStatus; + }, + + // 拼接省市区 + composeAddress(order) { + return [ + //order.logisticsVO.receiverProvince, + order.logisticsVO.receiverCity, + order.logisticsVO.receiverCountry, + order.logisticsVO.receiverArea, + order.logisticsVO.receiverAddress, + ] + .filter((s) => !!s) + .join(' '); + }, + + getStoreDetail() { + fetchBusinessTime().then((res) => { + const storeDetail = { + storeTel: res.data.telphone, + storeBusiness: res.data.businessTime.join('\n'), + }; + this.setData({ storeDetail }); + }); + }, + + // 仅对待支付状态计算付款倒计时 + // 返回时间若是大于2020.01.01,说明返回的是关闭时间,否则说明返回的直接就是剩余时间 + computeCountDownTime(order) { + if (order.orderStatus !== OrderStatus.PENDING_PAYMENT) return null; + return order.autoCancelTime > 1577808000000 + ? order.autoCancelTime - Date.now() + : order.autoCancelTime; + }, + + onCountDownFinish() { + //this.setData({ countDownTime: -1 }); + const { countDownTime, order } = this.data; + if ( + countDownTime > 0 || + (order && order.groupInfoVo && order.groupInfoVo.residueTime > 0) + ) { + this.onRefresh(); + } + }, + + onGoodsCardTap(e) { + const { index } = e.currentTarget.dataset; + const goods = this.data.order.orderItemVOs[index]; + wx.navigateTo({ url: `/pages/goods/details/index?spuId=${goods.spuId}` }); + }, + + onEditAddressTap() { + getAddressPromise() + .then((address) => { + this.setData({ + 'order.logisticsVO.receiverName': address.name, + 'order.logisticsVO.receiverPhone': address.phone, + '_order.receiverAddress': address.address, + }); + }) + .catch(() => {}); + + wx.navigateTo({ + url: `/pages/usercenter/address/list/index?selectMode=1`, + }); + }, + + onOrderNumCopy() { + wx.setClipboardData({ + data: this.data.order.orderNo, + }); + }, + + onDeliveryNumCopy() { + wx.setClipboardData({ + data: this.data.order.logisticsVO.logisticsNo, + }); + }, + + onToInvoice() { + wx.navigateTo({ + url: `/pages/order/invoice/index?orderNo=${this.data._order.orderNo}`, + }); + }, + + onSuppleMentInvoice() { + wx.navigateTo({ + url: `/pages/order/receipt/index?orderNo=${this.data._order.orderNo}`, + }); + }, + + onDeliveryClick() { + const logisticsData = { + nodes: this.data.logisticsNodes, + company: this.data.order.logisticsVO.logisticsCompanyName, + logisticsNo: this.data.order.logisticsVO.logisticsNo, + phoneNumber: this.data.order.logisticsVO.logisticsCompanyTel, + }; + wx.navigateTo({ + url: `/pages/order/delivery-detail/index?data=${encodeURIComponent( + JSON.stringify(logisticsData), + )}`, + }); + }, + + /** 跳转订单评价 */ + navToCommentCreate() { + wx.navigateTo({ + url: `/pages/order/createComment/index?orderNo=${this.orderNo}`, + }); + }, + + /** 跳转拼团详情/分享页*/ + toGrouponDetail() { + wx.showToast({ title: '点击了拼团' }); + }, + + clickService() { + Toast({ + context: this, + selector: '#t-toast', + message: '您点击了联系客服', + }); + }, + + onOrderInvoiceView() { + wx.navigateTo({ + url: `/pages/order/invoice/index?orderNo=${this.orderNo}`, + }); + }, +}); diff --git a/scr/miniprogram-2/pages/order/order-detail/index.json b/scr/miniprogram-2/pages/order/order-detail/index.json new file mode 100644 index 0000000..b8bbaec --- /dev/null +++ b/scr/miniprogram-2/pages/order/order-detail/index.json @@ -0,0 +1,17 @@ +{ + "navigationBarTitleText": "订单详情", + "usingComponents": { + "t-pull-down-refresh": "tdesign-miniprogram/pull-down-refresh/pull-down-refresh", + "t-button": "tdesign-miniprogram/button/button", + "t-cell": "tdesign-miniprogram/cell/cell", + "t-icon": "tdesign-miniprogram/icon/icon", + "t-image": "/components/webp-image/index", + "t-count-down": "tdesign-miniprogram/count-down/count-down", + "t-toast": "tdesign-miniprogram/toast/toast", + "t-dialog": "tdesign-miniprogram/dialog/dialog", + "price": "/components/price/index", + "order-card": "../components/order-card/index", + "order-goods-card": "../components/order-goods-card/index", + "order-button-bar": "../components/order-button-bar/index" + } +} \ No newline at end of file diff --git a/scr/miniprogram-2/pages/order/order-detail/index.wxml b/scr/miniprogram-2/pages/order/order-detail/index.wxml new file mode 100644 index 0000000..c273890 --- /dev/null +++ b/scr/miniprogram-2/pages/order/order-detail/index.wxml @@ -0,0 +1,182 @@ + + + + + + {{_order.statusDesc}} + + + + 拼团剩余 + + 过时自动取消 + + + {{order.orderSatusRemark || ''}} + + 剩 + + 支付,过时订单将会取消 + + 超时未支付 + + + + + + + + {{logisticsNodes[0].desc}} + {{logisticsNodes[0].date}} + + + + + + + + + {{order.logisticsVO.receiverName + ' '}}{{order.logisticsVO.receiverPhone}} + {{_order.receiverAddress}} + + + 修改 + + + + + + + + + + + 商品总额 + + + + 运费 + + + + + + + 免运费 + + + + 活动优惠 + + - + + + + + 优惠券 + + + - + + + 无可用 + + + + + {{isPaid ? '实付' : '应付'}} + + + + + + + 订单编号 + + {{order.orderNo}} + 复制 + + + + 下单时间 + + {{formatCreateTime}} + + + + + 发票 + + {{invoiceType}} + 查看 + + + + 备注 + + {{order.remark || '-'}} + + + + + +  联系客服 + + + + + + + + + + diff --git a/scr/miniprogram-2/pages/order/order-detail/index.wxss b/scr/miniprogram-2/pages/order/order-detail/index.wxss new file mode 100644 index 0000000..e83a21c --- /dev/null +++ b/scr/miniprogram-2/pages/order/order-detail/index.wxss @@ -0,0 +1,240 @@ +:host { + background-color: #f8f8f8; +} + +.order-detail { + width: 100%; + box-sizing: border-box; + padding: 0rpx 0rpx calc(env(safe-area-inset-bottom) + 144rpx); +} + +.order-detail .count-down { + color: #ffffff; +} +.order-detail .header { + width: 100%; + background-color: #ffffff; +} +.order-detail .order-detail__header { + width: 700rpx; + height: 200rpx; + border-radius: 24rpx; + margin: 0 auto; + overflow: hidden; + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; + background-image: url('https://cdn-we-retail.ym.tencent.com/miniapp/template/order-bg.png'); + background-repeat: no-repeat; + background-size: contain; +} +.order-detail .order-detail__header .title, +.order-detail .order-detail__header .desc { + color: #ffffff; + overflow: hidden; + display: -webkit-box; + -webkit-box-orient: vertical; +} +.order-detail .order-detail__header .title { + -webkit-line-clamp: 1; + font-size: 44rpx; + line-height: 64rpx; + margin-bottom: 8rpx; + font-weight: bold; +} +.order-detail .order-detail__header .desc { + -webkit-line-clamp: 2; + font-size: 24rpx; + line-height: 32rpx; +} +.order-detail .order-detail__header .desc .count-down { + display: inline; +} +.order-detail .order-logistics { + box-sizing: border-box; + padding: 32rpx; + width: 100%; + background-color: #ffffff; + overflow: hidden; + color: #333333; + font-size: 32rpx; + line-height: 48rpx; + display: flex; + position: relative; +} + +.order-logistics .logistics-icon { + width: 40rpx; + height: 40rpx; + margin-right: 16rpx; + margin-top: 4rpx; +} + +.order-logistics .logistics-content { + flex: 1; +} + +.order-logistics .logistics-content .logistics-time { + font-size: 28rpx; + line-height: 40rpx; + color: #999999; + margin-top: 12rpx; +} + +.order-logistics .logistics-back { + color: #999999; + align-self: center; +} + +.order-logistics .edit-text { + color: #fa4126; + font-size: 26rpx; + line-height: 36rpx; +} + +.order-detail .border-bottom { + margin: 0 auto; + width: 686rpx; + scale: 1 0.5; + height: 2rpx; + background-color: #e5e5e5; +} + +.order-detail .border-bottom-margin { + margin: 16rpx auto; +} + +.order-detail .pay-detail { + background-color: #ffffff; + width: 100%; + box-sizing: border-box; +} + +.order-detail .padding-inline { + padding: 16rpx 32rpx; +} + +.order-detail .pay-detail .pay-item { + width: 100%; + height: 72rpx; + display: flex; + align-items: center; + justify-content: space-between; + font-size: 26rpx; + line-height: 36rpx; + color: #666666; + background-color: #ffffff; +} +.order-detail .pay-detail .pay-item .pay-item__right { + color: #333333; + font-size: 24rpx; + display: flex; + align-items: center; + justify-content: flex-end; + max-width: 400rpx; +} +.order-detail .pay-detail .pay-item .pay-item__right .pay-remark { + display: -webkit-box; + -webkit-box-orient: vertical; + -webkit-line-clamp: 2; + max-width: 400rpx; + text-overflow: ellipsis; + overflow: hidden; +} +.order-detail .pay-detail .pay-item .font-bold { + font-weight: bold; +} +.order-detail .pay-detail .pay-item .primary { + color: #fa4126; +} +.order-detail .pay-detail .pay-item .max-size { + font-size: 36rpx; + line-height: 48rpx; +} + +.pay-item .pay-item__right .pay-item__right__copy { + width: 80rpx; + height: 40rpx; + text-align: center; + font-size: 24rpx; + line-height: 40rpx; + color: #333333; + position: relative; +} + +.pay-item .pay-item__right .pay-item__right__copy::before { + position: absolute; + content: ''; + width: 200%; + height: 200%; + border-radius: 40rpx; + border: 2rpx solid #dddddd; + transform: scale(0.5); + left: 0; + top: 0; + transform-origin: left top; +} + +.pay-item .pay-item__right .order-no { + color: #333333; + font-size: 26rpx; + line-height: 40rpx; + padding-right: 16rpx; +} + +.pay-item .pay-item__right .normal-color { + color: #333333; +} + +.order-detail .pay-detail .pay-service { + width: 100%; + height: 72rpx; + display: flex; + align-items: center; + justify-content: center; + font-size: 32rpx; + line-height: 36rpx; + color: #333333; + background-color: #ffffff; +} + +.bottom-bar { + position: fixed; + left: 0; + bottom: 0; + right: 0; + z-index: 10; + background: #fff; + height: 112rpx; + width: 686rpx; + padding: 0rpx 32rpx env(safe-area-inset-bottom); + display: flex; + align-items: center; +} + +.bottom-bar::before { + position: absolute; + content: ''; + width: 200%; + height: 200%; + border-top: 2rpx solid #dddddd; + transform: scale(0.5); + left: 0; + top: 0; + transform-origin: left top; +} + +.goods-button-bar { + height: 112rpx; + width: 686rpx; + margin-bottom: 16rpx; +} + +.t-class-indicator { + color: #b9b9b9 !important; +} + +.add-notes__confirm { + color: #fa4126 !important; +} diff --git a/scr/miniprogram-2/pages/order/order-list/index.js b/scr/miniprogram-2/pages/order/order-list/index.js new file mode 100644 index 0000000..c62315b --- /dev/null +++ b/scr/miniprogram-2/pages/order/order-list/index.js @@ -0,0 +1,189 @@ +import { OrderStatus } from '../config'; +import { + fetchOrders, + fetchOrdersCount, +} from '../../../services/order/orderList'; +import { cosThumb } from '../../../utils/util'; + +Page({ + page: { + size: 5, + num: 1, + }, + + data: { + tabs: [ + { key: -1, text: '全部' }, + { key: OrderStatus.PENDING_PAYMENT, text: '待付款', info: '' }, + { key: OrderStatus.PENDING_DELIVERY, text: '待发货', info: '' }, + { key: OrderStatus.PENDING_RECEIPT, text: '待收货', info: '' }, + { key: OrderStatus.COMPLETE, text: '已完成', info: '' }, + ], + curTab: -1, + orderList: [], + listLoading: 0, + pullDownRefreshing: false, + emptyImg: + 'https://cdn-we-retail.ym.tencent.com/miniapp/order/empty-order-list.png', + backRefresh: false, + status: -1, + }, + + onLoad(query) { + let status = parseInt(query.status); + status = this.data.tabs.map((t) => t.key).includes(status) ? status : -1; + this.init(status); + this.pullDownRefresh = this.selectComponent('#wr-pull-down-refresh'); + }, + + onShow() { + if (!this.data.backRefresh) return; + this.onRefresh(); + this.setData({ backRefresh: false }); + }, + + onReachBottom() { + if (this.data.listLoading === 0) { + this.getOrderList(this.data.curTab); + } + }, + + onPageScroll(e) { + this.pullDownRefresh && this.pullDownRefresh.onPageScroll(e); + }, + + onPullDownRefresh_(e) { + const { callback } = e.detail; + this.setData({ pullDownRefreshing: true }); + this.refreshList(this.data.curTab) + .then(() => { + this.setData({ pullDownRefreshing: false }); + callback && callback(); + }) + .catch((err) => { + this.setData({ pullDownRefreshing: false }); + Promise.reject(err); + }); + }, + + init(status) { + status = status !== undefined ? status : this.data.curTab; + this.setData({ + status, + }); + this.refreshList(status); + }, + + getOrderList(statusCode = -1, reset = false) { + const params = { + parameter: { + pageSize: this.page.size, + pageNum: this.page.num, + }, + }; + if (statusCode !== -1) params.parameter.orderStatus = statusCode; + this.setData({ listLoading: 1 }); + return fetchOrders(params) + .then((res) => { + this.page.num++; + let orderList = []; + if (res && res.data && res.data.orders) { + orderList = (res.data.orders || []).map((order) => { + return { + id: order.orderId, + orderNo: order.orderNo, + parentOrderNo: order.parentOrderNo, + storeId: order.storeId, + storeName: order.storeName, + status: order.orderStatus, + statusDesc: order.orderStatusName, + amount: order.paymentAmount, + totalAmount: order.totalAmount, + logisticsNo: order.logisticsVO.logisticsNo, + createTime: order.createTime, + goodsList: (order.orderItemVOs || []).map((goods) => ({ + id: goods.id, + thumb: cosThumb(goods.goodsPictureUrl, 70), + title: goods.goodsName, + skuId: goods.skuId, + spuId: goods.spuId, + specs: (goods.specifications || []).map( + (spec) => spec.specValue, + ), + price: goods.tagPrice ? goods.tagPrice : goods.actualPrice, + num: goods.buyQuantity, + titlePrefixTags: goods.tagText ? [{ text: goods.tagText }] : [], + })), + buttons: order.buttonVOs || [], + groupInfoVo: order.groupInfoVo, + freightFee: order.freightFee, + }; + }); + } + return new Promise((resolve) => { + if (reset) { + this.setData({ orderList: [] }, () => resolve()); + } else resolve(); + }).then(() => { + this.setData({ + orderList: this.data.orderList.concat(orderList), + listLoading: orderList.length > 0 ? 0 : 2, + }); + }); + }) + .catch((err) => { + this.setData({ listLoading: 3 }); + return Promise.reject(err); + }); + }, + + onReTryLoad() { + this.getOrderList(this.data.curTab); + }, + + onTabChange(e) { + const { value } = e.detail; + this.setData({ + status: value, + }); + this.refreshList(value); + }, + + getOrdersCount() { + return fetchOrdersCount().then((res) => { + const tabsCount = res.data || []; + const { tabs } = this.data; + tabs.forEach((tab) => { + const tabCount = tabsCount.find((c) => c.tabType === tab.key); + if (tabCount) { + tab.info = tabCount.orderNum; + } + }); + this.setData({ tabs }); + }); + }, + + refreshList(status = -1) { + this.page = { + size: this.page.size, + num: 1, + }; + this.setData({ curTab: status, orderList: [] }); + + return Promise.all([ + this.getOrderList(status, true), + this.getOrdersCount(), + ]); + }, + + onRefresh() { + this.refreshList(this.data.curTab); + }, + + onOrderCardTap(e) { + const { order } = e.currentTarget.dataset; + wx.navigateTo({ + url: `/pages/order/order-detail/index?orderNo=${order.orderNo}`, + }); + }, +}); diff --git a/scr/miniprogram-2/pages/order/order-list/index.json b/scr/miniprogram-2/pages/order/order-list/index.json new file mode 100644 index 0000000..ff0340e --- /dev/null +++ b/scr/miniprogram-2/pages/order/order-list/index.json @@ -0,0 +1,16 @@ +{ + "navigationBarTitleText": "我的订单", + "usingComponents": { + "t-tabs": "tdesign-miniprogram/tabs/tabs", + "t-tab-panel": "tdesign-miniprogram/tabs/tab-panel", + "t-empty": "tdesign-miniprogram/empty/empty", + "t-toast": "tdesign-miniprogram/toast/toast", + "t-dialog": "tdesign-miniprogram/dialog/dialog", + "t-pull-down-refresh": "tdesign-miniprogram/pull-down-refresh/pull-down-refresh", + "load-more": "/components/load-more/index", + "order-button-bar": "../components/order-button-bar/index", + "price": "/components/price/index", + "order-card": "../components/order-card/index", + "specs-goods-card": "../components/specs-goods-card/index" + } +} \ No newline at end of file diff --git a/scr/miniprogram-2/pages/order/order-list/index.wxml b/scr/miniprogram-2/pages/order/order-list/index.wxml new file mode 100644 index 0000000..4475bba --- /dev/null +++ b/scr/miniprogram-2/pages/order/order-list/index.wxml @@ -0,0 +1,91 @@ + + + + + + + + + + + 订单号  + {{order.orderNo}} + + + + + 总价 + + ,运费 + +   + 实付  + + + + + + + + + + + 暂无相关订单 + + + + + + + diff --git a/scr/miniprogram-2/pages/order/order-list/index.wxss b/scr/miniprogram-2/pages/order/order-list/index.wxss new file mode 100644 index 0000000..55cec71 --- /dev/null +++ b/scr/miniprogram-2/pages/order/order-list/index.wxss @@ -0,0 +1,107 @@ +:host { + background-color: #f5f5f5; +} +.page-container .tab-bar__placeholder, +.page-container .tab-bar__inner { + height: 88rpx; + line-height: 88rpx; + background: #fff; +} +.page-container .tab-bar__inner { + font-size: 26rpx; + color: #333333; + position: fixed; + width: 100vw; + top: 0; + left: 0; +} +.page-container .tab-bar__inner.order-nav .order-nav-item .bottom-line { + bottom: 12rpx; +} +.tab-bar__inner .t-tabs-is-active { + color: #fa4126 !important; +} + +.tab-bar__inner .t-tabs-track { + background: #fa4126 !important; +} + +.page-container .tab-bar__active { + font-size: 28rpx; +} +.page-container .specs-popup .bottom-btn { + color: #fa4126; + color: var(--color-primary, #fa4126); +} +.page-container .specs-popup .bottom-btn::after { + border-color: #fa4126; + border-color: var(--color-primary, #fa4126); +} +.dialog .dialog__button-confirm { + color: #fa4126; + color: var(--color-primary, #fa4126); +} +.list-loading { + height: 100rpx; +} +.empty-wrapper { + height: calc(100vh - 88rpx); +} +.btn-bar { + margin-top: 20rpx; +} +.load-more { + margin: 0 24rpx; +} +wr-order-goods-card:not(:first-child) .wr-goods-card { + margin-top: 40rpx; +} + +.price-total { + font-size: 24rpx; + line-height: 32rpx; + color: #999999; + padding-top: 10rpx; + width: 100%; + display: flex; + align-items: baseline; + justify-content: flex-end; +} +.price-total .bold-price { + color: #333333; + font-size: 28rpx; + line-height: 40rpx; + color: #333333; +} +.price-total .real-pay { + font-size: 36rpx; + line-height: 48rpx; + color: #fa4126; + font-weight: bold; +} + +.t-tabs.t-tabs--top .t-tabs-scroll { + border: none !important; +} +.t-empty-text { + font-size: 28rpx; + color: #999; +} + +.page-container .order-number { + color: #666666; + font-size: 28rpx; +} +.t-class-indicator { + color: #b9b9b9 !important; +} +.tab-bar .tab-bar__active { + color: #333333 !important; +} + +.tab-bar .t-tabs-track { + background: #333333 !important; +} +.add-notes__confirm { + color: #fa4126 !important; +} diff --git a/scr/miniprogram-2/pages/order/pay-result/index.js b/scr/miniprogram-2/pages/order/pay-result/index.js new file mode 100644 index 0000000..bd6dad6 --- /dev/null +++ b/scr/miniprogram-2/pages/order/pay-result/index.js @@ -0,0 +1,47 @@ +/* + * @Author: rileycai + * @Date: 2022-03-14 21:18:07 + * @LastEditTime: 2022-03-22 21:17:16 + * @LastEditors: rileycai + * @Description: + * @FilePath: /tdesign-miniprogram-starter/pages/order/pay-result/index.js + */ +Page({ + data: { + totalPaid: 0, + orderNo: '', + groupId: '', + groupon: null, + spu: null, + adUrl: '', + }, + + onLoad(options) { + const { totalPaid = 0, orderNo = '', groupId = '' } = options; + this.setData({ + totalPaid, + orderNo, + groupId, + }); + }, + + onTapReturn(e) { + const target = e.currentTarget.dataset.type; + const { orderNo } = this.data; + if (target === 'home') { + wx.switchTab({ url: '/pages/home/home' }); + } else if (target === 'orderList') { + wx.navigateTo({ + url: `/pages/order/order-list/index?orderNo=${orderNo}`, + }); + } else if (target === 'order') { + wx.navigateTo({ + url: `/pages/order/order-detail/index?orderNo=${orderNo}`, + }); + } + }, + + navBackHandle() { + wx.navigateBack(); + }, +}); diff --git a/scr/miniprogram-2/pages/order/pay-result/index.json b/scr/miniprogram-2/pages/order/pay-result/index.json new file mode 100644 index 0000000..f572818 --- /dev/null +++ b/scr/miniprogram-2/pages/order/pay-result/index.json @@ -0,0 +1,9 @@ +{ + "navigationBarTitleText": "支付结果", + "navigationStyle": "custom", + "usingComponents": { + "t-navbar": "tdesign-miniprogram/navbar/navbar", + "t-icon": "tdesign-miniprogram/icon/icon", + "price": "/components/price/index" + } +} \ No newline at end of file diff --git a/scr/miniprogram-2/pages/order/pay-result/index.wxml b/scr/miniprogram-2/pages/order/pay-result/index.wxml new file mode 100644 index 0000000..3153fe6 --- /dev/null +++ b/scr/miniprogram-2/pages/order/pay-result/index.wxml @@ -0,0 +1,22 @@ + + + + + 支付成功 + + + 微信支付: + + + + 查看订单 + 返回首页 + + + diff --git a/scr/miniprogram-2/pages/order/pay-result/index.wxss b/scr/miniprogram-2/pages/order/pay-result/index.wxss new file mode 100644 index 0000000..abe1b25 --- /dev/null +++ b/scr/miniprogram-2/pages/order/pay-result/index.wxss @@ -0,0 +1,54 @@ +.pay-result { + display: flex; + flex-direction: column; + align-items: center; + width: 100%; +} + +.pay-result .pay-status { + margin-top: 100rpx; + font-size: 48rpx; + line-height: 72rpx; + font-weight: bold; + color: #333333; + display: flex; + align-items: center; +} +.pay-result .pay-status text { + padding-left: 12rpx; +} +.pay-result .pay-money { + color: #666666; + font-size: 28rpx; + line-height: 48rpx; + margin-top: 28rpx; + display: flex; + align-items: baseline; +} + +.pay-result .pay-money .pay-money__price { + font-size: 36rpx; + line-height: 48rpx; + color: #fa4126; +} +.pay-result .btn-wrapper { + margin-top: 48rpx; + padding: 12rpx 32rpx; + display: flex; + align-items: center; + justify-content: space-between; + width: 100%; + box-sizing: border-box; +} + +.pay-result .btn-wrapper .status-btn { + height: 88rpx; + width: 334rpx; + border-radius: 44rpx; + border: 2rpx solid #fa4126; + color: #fa4126; + font-size: 28rpx; + font-weight: bold; + line-height: 88rpx; + text-align: center; +} diff --git a/scr/miniprogram-2/pages/order/receipt/index.js b/scr/miniprogram-2/pages/order/receipt/index.js new file mode 100644 index 0000000..ad85d40 --- /dev/null +++ b/scr/miniprogram-2/pages/order/receipt/index.js @@ -0,0 +1,190 @@ +/* eslint-disable no-nested-ternary */ +import Dialog from 'tdesign-miniprogram/dialog/index'; +import Toast from 'tdesign-miniprogram/toast/index'; +import { dispatchSupplementInvoice } from '../../../services/order/orderConfirm'; + +const invoiceJson = { + info: [ + '1.根据当地税务局的要求,开具有效的企业发票需填写税务局登记证号。开具个人发票不需要填写纳税人识别码。 ', + '2.电子普通发票: 电子普通发票是税局认可的有效首付款凭证,其法律效力、基本用途及使用规定同纸质发票,如需纸质发票可自行下载打印。 ', + '3.增值税专用发票: 增值税发票暂时不可开,可查看《开局增值税发票》或致电400-633-6868。', + ], + codeTitle: [ + '1.什么是纳税人识别号/统一社会信用代码? 纳税人识别号,一律由15位、17位、18或者20位码(字符型)组成,其中:企业、事业单位等组织机构纳税人,以国家质量监督检验检疫总局编制的9位码(其中区分主码位与校检位之间的“—”符省略不打印)并在其“纳税人识别号”。国家税务总局下达的纳税人代码为15位,其中:1—2位为省、市代码,3—6位为地区代码,7—8位为经济性质代码,9—10位行业代码,11—15位为各地区自设的顺序码。', + '2.入户获取/知晓纳税人识别号/统一社会信用代码? 纳税人识别号是税务登记证上的号码,通常简称为“税号”,每个企业的纳税人识别号都是唯一的。这个属于每个人自己且终身不变的数字代码很可能成为我们的第二张“身份证”。 ', + ], +}; + +Page({ + orderNo: '', + data: { + receiptIndex: 0, + addressTagsIndex: 0, + goodsClassesIndex: 0, + dialogShow: false, + codeShow: false, + receipts: [ + { title: '不开发票', id: 0, name: 'receipt' }, + { title: '电子发票', id: 1, name: 'receipt' }, + ], + addressTags: [ + { title: '个人', id: 0, name: 'addressTags', type: 1 }, + { title: '公司', id: 1, name: 'addressTags', type: 2 }, + ], + goodsClasses: [ + { title: '商品明细', id: 0, name: 'goodsClasses' }, + { title: '商品类别', id: 1, name: 'goodsClasses' }, + ], + name: '', + componentName: '', + code: '', + phone: '', + email: '', + invoiceInfo: invoiceJson, + }, + onLoad(query) { + const { orderNo, invoiceData } = query; + const tempData = JSON.parse(invoiceData || '{}'); + const invoice = { + receiptIndex: tempData.invoiceType === 5 ? 1 : 0, + name: tempData.buyerName || '', + email: tempData.email || '', + phone: tempData.buyerPhone || '', + addressTagsIndex: tempData.titleType === 2 ? 1 : 0, + goodsClassesIndex: tempData.contentType === 2 ? 1 : 0, + code: tempData.buyerTaxNo || '', + componentName: tempData.titleType === 2 ? tempData.buyerName : '', + }; + this.orderNo = orderNo; + this.setData({ ...invoice }); + }, + onLabels(e) { + const { item } = e.currentTarget.dataset; + const nameIndex = `${item.name}Index`; + this.setData({ [nameIndex]: item.id }); + }, + onInput(e) { + const { addressTagsIndex } = this.data; + const { item } = e.currentTarget.dataset; + const { value } = e.detail; + const key = + item === 'name' + ? addressTagsIndex === 0 + ? 'name' + : 'componentName' + : item === 'code' + ? addressTagsIndex === 0 + ? 'phone' + : 'code' + : 'email'; + this.setData({ [key]: value }); + }, + onSure() { + const result = this.checkSure(); + if (!result) { + Dialog.alert({ + title: '请填写发票信息', + content: '', + confirmBtn: '确认', + }); + return; + } + const { + receiptIndex, + addressTagsIndex, + receipts, + addressTags, + name, + componentName, + code, + phone, + email, + goodsClassesIndex, + } = this.data; + + const data = { + buyerName: addressTagsIndex === 0 ? name : componentName, + buyerTaxNo: code, + buyerPhone: phone, + email, + titleType: addressTags[addressTagsIndex].type, + contentType: goodsClassesIndex === 0 ? 1 : 2, + invoiceType: receiptIndex === 1 ? 5 : 0, + }; + if (this.orderNo) { + if (this.submitting) return; + const params = { + parameter: { + orderNo: this.orderNo, + invoiceVO: data, + }, + }; + this.submitting = true; + dispatchSupplementInvoice(params) + .then(() => { + Toast({ + context: this, + selector: '#t-toast', + message: '保存成功', + duration: 2000, + icon: '', + }); + setTimeout(() => { + this.submitting = false; + wx.navigateBack({ delta: 1 }); + }, 1000); + }) + .catch((err) => { + this.submitting = false; + console.error(err); + }); + } else { + Object.assign(data, { + receipts: receipts[receiptIndex], + addressTags: addressTags[addressTagsIndex], + }); + wx.setStorageSync('invoiceData', data); + wx.navigateBack({ delta: 1 }); + } + }, + checkSure() { + const { + name, + componentName, + code, + phone, + email, + addressTagsIndex, + receiptIndex, + } = this.data; + if (receiptIndex === 0) { + return true; + } + if (addressTagsIndex === 0) { + if (!name.length || !phone.length) { + return false; + } + } else if (addressTagsIndex === 1) { + if (!componentName.length || !code.length) { + return false; + } + } + if (!email.length) { + return false; + } + return true; + }, + onDialogTap() { + const { dialogShow } = this.data; + this.setData({ + dialogShow: !dialogShow, + codeShow: false, + }); + }, + onKnoeCode() { + this.setData({ + dialogShow: !this.data.dialogShow, + codeShow: true, + }); + }, +}); diff --git a/scr/miniprogram-2/pages/order/receipt/index.json b/scr/miniprogram-2/pages/order/receipt/index.json new file mode 100644 index 0000000..5996047 --- /dev/null +++ b/scr/miniprogram-2/pages/order/receipt/index.json @@ -0,0 +1,11 @@ +{ + "navigationBarTitleText": "发票", + "usingComponents": { + "t-cell": "tdesign-miniprogram/cell/cell", + "t-dialog": "tdesign-miniprogram/dialog/dialog", + "t-toast": "tdesign-miniprogram/toast/toast", + "t-icon": "tdesign-miniprogram/icon/icon", + "t-input": "tdesign-miniprogram/input/input", + "t-button": "tdesign-miniprogram/button/button" + } +} diff --git a/scr/miniprogram-2/pages/order/receipt/index.wxml b/scr/miniprogram-2/pages/order/receipt/index.wxml new file mode 100644 index 0000000..df2d006 --- /dev/null +++ b/scr/miniprogram-2/pages/order/receipt/index.wxml @@ -0,0 +1,137 @@ + + + + + + {{item.title}} + + + + + + + + + {{tag.title}} + + + + + + + + + + + + + + + + + + + + {{good.title}} + + + + 发票内容将显示详细商品名称与价格信息,发票金额为实际支付金额,不包含优惠等扣减金额 + + + 发票须知 + + + + + + + + + {{item}} + + + + + {{item}} + + + + + + + + + + 确定 + + + + + diff --git a/scr/miniprogram-2/pages/order/receipt/index.wxss b/scr/miniprogram-2/pages/order/receipt/index.wxss new file mode 100644 index 0000000..a6c1934 --- /dev/null +++ b/scr/miniprogram-2/pages/order/receipt/index.wxss @@ -0,0 +1,209 @@ +@import '../../../style/theme.wxss'; + +.receipt { + height: 100vh; + background: #f5f5f5; + position: relative; + padding-top: 20rpx; +} +.srcoll-view-wrap { + margin-top: 20rpx; +} +.receipt .flex { + display: flex; + align-items: center; + justify-content: space-between; +} +.receipt .head-title { + color: #333; + font-size: 30rpx; + font-weight: bold; +} +.receipt .btn-wrap { + display: flex; +} +.receipt .btn-wrap .btn { + width: 128rpx; + background: #f5f5f5; + font-size: 24rpx; + color: #333; + margin-left: 22rpx; + text-align: center; + border-radius: 8rpx; + position: relative; + border: 2rpx solid #f5f5f5; +} +.receipt .btn-wrap .active-btn { + background-color: transparent; + border-color: #fa4126; + color: #fa4126; +} +.receipt .title { + width: 100%; + background-color: #fff; + margin-bottom: 20rpx; +} + +.receipt .receipt-label { + display: flex; +} +.receipt .receipt-label .btn { + width: 128rpx; + background: #f5f5f5; + font-size: 24rpx; + color: #333; + margin-left: 22rpx; + text-align: center; + border-radius: 8rpx; + border: 2rpx solid #f5f5f5; +} +.receipt .receipt-label .active-btn { + background-color: transparent; + border-color: #fa4126; + color: #fa4126; +} +.receipt .receipt-label .wr-cell__title { + font-size: 30rpx; + color: #333; + font-weight: bold; +} +.receipt .receipt-content { + background: #fff; + margin-top: 20rpx; +} +.receipt .receipt-content .addressTags { + padding: 0 30rpx; + height: 100rpx; +} +.receipt .receipt-content .addressTags .btn-wrap { + display: flex; +} +.receipt .receipt-content .line { + width: 720rpx; + margin-left: 30rpx; + background-color: #e6e6e6; + height: 1rpx; +} +.receipt .receipt-content .receipt-input { + display: flex; + padding: 0 30rpx; + align-items: center; + height: 100rpx; + color: #666; +} +.receipt .receipt-content .receipt-input .title { + color: #333; + display: inline-block; + width: 140rpx; + margin-right: 30rpx; + font-size: 30rpx; + font-weight: bold; +} +.input-com { + display: inline-block; + flex: 1; + font-size: 30rpx; + font-weight: 400; + line-height: 30rpx; + padding: 0 !important; + color: #666; +} +.input-com::after { + border: none !important; +} + +.receipt .receipt-content .receipt-input .wr-icon { + font-size: 28rpx !important; + margin-left: 20rpx; +} +.receipt .receipt-info { + background: #fff; + margin-top: 20rpx; +} +.receipt .receipt-info .info-con { + padding: 0 30rpx; + height: 100rpx; +} +.receipt .receipt-info .title { + font-size: 24rpx; + color: #999999; + line-height: 36rpx; + padding: 0 30rpx 20rpx; + box-sizing: border-box; +} +.receipt .receipt-know { + display: flex; + align-items: center; + font-size: 26rpx; + font-weight: 400; + color: #999999; + padding: 20rpx 30rpx; + line-height: 26rpx; +} +.receipt .receipt-know .icon { + margin-left: 16rpx; + font-size: 26rpx; +} +.receipt .dialog-receipt .dialog__message { + padding: 0; +} +.receipt .dialog-receipt .dialog-info { + max-height: 622rpx; +} +.receipt .dialog-receipt .info-wrap { + padding: 0 18rpx; +} +.receipt .dialog-receipt .info .title { + display: inline-block; + font-size: 28rpx; + font-weight: 400; + color: #999; + line-height: 40rpx; + margin-bottom: 40rpx; + text-align: left; +} +.receipt .receipt-btn { + position: fixed; + bottom: 0; + left: 0; + right: 0; + z-index: 100; + background: #fff; + width: 100%; + padding: 0 20rpx; + box-sizing: border-box; + padding-bottom: calc(20rpx + env(safe-area-inset-bottom)); +} +.receipt .receipt-btn .receipt-btn-con { + margin-top: 20rpx; + display: inline-block; + width: 100%; + line-height: 80rpx; + background: #fa4126; + text-align: center; + color: #fff; + border-radius: 48rpx; +} +.dialog__button-confirm { + color: #fa4126; +} + +.cell-left { + margin-right: 0 !important; +} + +.cell-right { + display: flex; + justify-content: flex-start; + width: 480rpx; +} + +.addressTagsIndex-cell { + display: flex; + align-items: center; + justify-content: space-between; + width: 100%; +} +.dialog__button-confirm { + color: #fa4126 !important; +} diff --git a/scr/miniprogram-2/pages/preferchoice/preferchoice.js b/scr/miniprogram-2/pages/preferchoice/preferchoice.js new file mode 100644 index 0000000..167e571 --- /dev/null +++ b/scr/miniprogram-2/pages/preferchoice/preferchoice.js @@ -0,0 +1,66 @@ +// pages/preferchoice/preferchoice.js +Page({ + + /** + * 页面的初始数据 + */ + data: { + + }, + + /** + * 生命周期函数--监听页面加载 + */ + onLoad(options) { + + }, + + /** + * 生命周期函数--监听页面初次渲染完成 + */ + onReady() { + + }, + + /** + * 生命周期函数--监听页面显示 + */ + onShow() { + + }, + + /** + * 生命周期函数--监听页面隐藏 + */ + onHide() { + + }, + + /** + * 生命周期函数--监听页面卸载 + */ + onUnload() { + + }, + + /** + * 页面相关事件处理函数--监听用户下拉动作 + */ + onPullDownRefresh() { + + }, + + /** + * 页面上拉触底事件的处理函数 + */ + onReachBottom() { + + }, + + /** + * 用户点击右上角分享 + */ + onShareAppMessage() { + + } +}) \ No newline at end of file diff --git a/scr/miniprogram-2/pages/preferchoice/preferchoice.json b/scr/miniprogram-2/pages/preferchoice/preferchoice.json new file mode 100644 index 0000000..8835af0 --- /dev/null +++ b/scr/miniprogram-2/pages/preferchoice/preferchoice.json @@ -0,0 +1,3 @@ +{ + "usingComponents": {} +} \ No newline at end of file diff --git a/scr/miniprogram-2/pages/preferchoice/preferchoice.wxml b/scr/miniprogram-2/pages/preferchoice/preferchoice.wxml new file mode 100644 index 0000000..3cca484 --- /dev/null +++ b/scr/miniprogram-2/pages/preferchoice/preferchoice.wxml @@ -0,0 +1,2 @@ + +pages/preferchoice/preferchoice.wxml diff --git a/scr/miniprogram-2/pages/preferchoice/preferchoice.wxss b/scr/miniprogram-2/pages/preferchoice/preferchoice.wxss new file mode 100644 index 0000000..5e75c3b --- /dev/null +++ b/scr/miniprogram-2/pages/preferchoice/preferchoice.wxss @@ -0,0 +1 @@ +/* pages/preferchoice/preferchoice.wxss */ \ No newline at end of file diff --git a/scr/miniprogram-2/pages/promotion-detail/index.js b/scr/miniprogram-2/pages/promotion-detail/index.js new file mode 100644 index 0000000..dd6614e --- /dev/null +++ b/scr/miniprogram-2/pages/promotion-detail/index.js @@ -0,0 +1,57 @@ +import Toast from 'tdesign-miniprogram/toast/index'; +import { fetchPromotion } from '../../services/promotion/detail'; + +Page({ + data: { + list: [], + banner: '', + time: 0, + showBannerDesc: false, + statusTag: '', + }, + + onLoad(query) { + const promotionID = parseInt(query.promotion_id); + this.getGoodsList(promotionID); + }, + + getGoodsList(promotionID) { + fetchPromotion(promotionID).then( + ({ list, banner, time, showBannerDesc, statusTag }) => { + const goods = list.map((item) => ({ + ...item, + tags: item.tags.map((v) => v.title), + })); + this.setData({ + list: goods, + banner, + time, + showBannerDesc, + statusTag, + }); + }, + ); + }, + + goodClickHandle(e) { + const { index } = e.detail; + const { spuId } = this.data.list[index]; + wx.navigateTo({ url: `/pages/goods/details/index?spuId=${spuId}` }); + }, + + cardClickHandle() { + Toast({ + context: this, + selector: '#t-toast', + message: '点击加购', + }); + }, + + bannerClickHandle() { + Toast({ + context: this, + selector: '#t-toast', + message: '点击规则详情', + }); + }, +}); diff --git a/scr/miniprogram-2/pages/promotion-detail/index.json b/scr/miniprogram-2/pages/promotion-detail/index.json new file mode 100644 index 0000000..2eb4145 --- /dev/null +++ b/scr/miniprogram-2/pages/promotion-detail/index.json @@ -0,0 +1,10 @@ +{ + "navigationBarTitleText": "营销详情", + "usingComponents": { + "t-toast": "tdesign-miniprogram/toast/toast", + "t-image": "/components/webp-image/index", + "t-icon": "tdesign-miniprogram/icon/icon", + "count-down": "tdesign-miniprogram/count-down/count-down", + "goods-list": "/components/goods-list/index" + } +} \ No newline at end of file diff --git a/scr/miniprogram-2/pages/promotion-detail/index.wxml b/scr/miniprogram-2/pages/promotion-detail/index.wxml new file mode 100644 index 0000000..be5b5c8 --- /dev/null +++ b/scr/miniprogram-2/pages/promotion-detail/index.wxml @@ -0,0 +1,76 @@ + + + + + + + + + + diff --git a/scr/miniprogram-2/pages/promotion-detail/index.wxss b/scr/miniprogram-2/pages/promotion-detail/index.wxss new file mode 100644 index 0000000..42c670e --- /dev/null +++ b/scr/miniprogram-2/pages/promotion-detail/index.wxss @@ -0,0 +1,111 @@ +.promotion-detail-container .wrap { + display: block; + padding: 0 24rpx; + background: linear-gradient(#fff, #f5f5f5); +} + +.promotion-detail-container .t-class-promotion-head { + width: 702rpx; + height: 160rpx; + border-radius: 8rpx; +} + +.promotion-detail-container .wrap .count-down-wrap { + display: flex; + flex-direction: row; + justify-content: flex-start; + align-items: baseline; + line-height: 34rpx; +} + +.promotion-detail-container .wrap .count-down-wrap.in-banner-count-down-wrap { + position: absolute; + bottom: 32rpx; + left: 32rpx; + right: 32rpx; +} + +.promotion-detail-container .wrap .count-down-wrap .status-tag { + height: 32rpx; + line-height: 32rpx; + font-size: 20rpx; + margin-right: 12rpx; + border-radius: 16rpx; + padding: 0 12rpx; +} + +.promotion-detail-container .wrap .count-down-wrap .status-tag.before { + color: #fff; + background-color: #ff9853; +} + +.promotion-detail-container .wrap .count-down-wrap .status-tag.finish { + color: #fff; + background-color: #ccc; +} + +.promotion-detail-container .wrap .count-down-wrap .count-down-label { + color: #666; + font-size: 24rpx; + margin-right: 0.5em; +} + +.promotion-detail-container .wrap .count-down-wrap .detail-entry { + margin-left: auto; + height: 40rpx; +} + +.promotion-detail-container .wrap .count-down-wrap .detail-entry-label { + color: #fff; + font-size: 24rpx; + margin-right: 12rpx; +} + +.promotion-detail-container + .wrap + .count-down-wrap.after-banner-count-down-wrap { + padding: 0 10rpx 10rpx; +} + +.promotion-detail-container + .wrap + .count-down-wrap.after-banner-count-down-wrap + .detail-entry { + display: flex; + align-items: center; +} + +.promotion-detail-container + .wrap + .count-down-wrap.after-banner-count-down-wrap + .detail-entry-label { + color: #999; + margin-right: 0; +} + +.promotion-detail-container .wrap .gl-empty-wrap { + margin-top: 180rpx; +} + +.promotion-detail-container .wrap .gl-empty-img { + width: 240rpx; + height: 240rpx; + display: block; + margin: 0 auto; +} + +.promotion-detail-container .wrap .gl-empty-label { + font-size: 28rpx; + color: #999; + margin-top: 40rpx; + text-align: center; +} + +.promotion-detail-container .goods-list-container { + background: #f5f5f5 !important; +} + +.promotion-detail-container .promotion-goods-list { + padding: 20rpx 24rpx; + background-color: #f5f5f5; +} diff --git a/scr/miniprogram-2/pages/turntable/turntable.js b/scr/miniprogram-2/pages/turntable/turntable.js new file mode 100644 index 0000000..ddff8fb --- /dev/null +++ b/scr/miniprogram-2/pages/turntable/turntable.js @@ -0,0 +1,66 @@ +// pages/turntable/turntable.js +Page({ + + /** + * 页面的初始数据 + */ + data: { + + }, + + /** + * 生命周期函数--监听页面加载 + */ + onLoad(options) { + + }, + + /** + * 生命周期函数--监听页面初次渲染完成 + */ + onReady() { + + }, + + /** + * 生命周期函数--监听页面显示 + */ + onShow() { + + }, + + /** + * 生命周期函数--监听页面隐藏 + */ + onHide() { + + }, + + /** + * 生命周期函数--监听页面卸载 + */ + onUnload() { + + }, + + /** + * 页面相关事件处理函数--监听用户下拉动作 + */ + onPullDownRefresh() { + + }, + + /** + * 页面上拉触底事件的处理函数 + */ + onReachBottom() { + + }, + + /** + * 用户点击右上角分享 + */ + onShareAppMessage() { + + } +}) \ No newline at end of file diff --git a/scr/miniprogram-2/pages/turntable/turntable.json b/scr/miniprogram-2/pages/turntable/turntable.json new file mode 100644 index 0000000..8835af0 --- /dev/null +++ b/scr/miniprogram-2/pages/turntable/turntable.json @@ -0,0 +1,3 @@ +{ + "usingComponents": {} +} \ No newline at end of file diff --git a/scr/miniprogram-2/pages/turntable/turntable.wxml b/scr/miniprogram-2/pages/turntable/turntable.wxml new file mode 100644 index 0000000..3bc758c --- /dev/null +++ b/scr/miniprogram-2/pages/turntable/turntable.wxml @@ -0,0 +1,2 @@ + +pages/turntable/turntable.wxml diff --git a/scr/miniprogram-2/pages/turntable/turntable.wxss b/scr/miniprogram-2/pages/turntable/turntable.wxss new file mode 100644 index 0000000..8ee8345 --- /dev/null +++ b/scr/miniprogram-2/pages/turntable/turntable.wxss @@ -0,0 +1 @@ +/* pages/turntable/turntable.wxss */ \ No newline at end of file diff --git a/scr/miniprogram-2/pages/usercenter/address/edit/index.js b/scr/miniprogram-2/pages/usercenter/address/edit/index.js new file mode 100644 index 0000000..24b3ed3 --- /dev/null +++ b/scr/miniprogram-2/pages/usercenter/address/edit/index.js @@ -0,0 +1,359 @@ +import Toast from 'tdesign-miniprogram/toast/index'; +import { fetchDeliveryAddress } from '../../../../services/address/fetchAddress'; +import { areaData } from '../../../../config/index'; +import { resolveAddress, rejectAddress } from './util'; + +const innerPhoneReg = + '^1(?:3\\d|4[4-9]|5[0-35-9]|6[67]|7[0-8]|8\\d|9\\d)\\d{8}$'; +const innerNameReg = '^[a-zA-Z\\d\\u4e00-\\u9fa5]+$'; +const labelsOptions = [ + { id: 0, name: '家' }, + { id: 1, name: '公司' }, +]; + +Page({ + options: { + multipleSlots: true, + }, + externalClasses: ['theme-wrapper-class'], + data: { + locationState: { + labelIndex: null, + addressId: '', + addressTag: '', + cityCode: '', + cityName: '', + countryCode: '', + countryName: '', + detailAddress: '', + districtCode: '', + districtName: '', + isDefault: false, + name: '', + phone: '', + provinceCode: '', + provinceName: '', + isEdit: false, + isOrderDetail: false, + isOrderSure: false, + }, + areaData: areaData, + labels: labelsOptions, + areaPickerVisible: false, + submitActive: false, + visible: false, + labelValue: '', + columns: 3, + }, + privateData: { + verifyTips: '', + }, + onLoad(options) { + const { id } = options; + this.init(id); + }, + onUnload() { + if (!this.hasSava) { + rejectAddress(); + } + }, + hasSava: false, + init(id) { + if (id) { + this.getAddressDetail(Number(id)); + } + }, + getAddressDetail(id) { + fetchDeliveryAddress(id).then((detail) => { + this.setData({ locationState: detail }, () => { + const { isLegal, tips } = this.onVerifyInputLegal(); + this.setData({ + submitActive: isLegal, + }); + this.privateData.verifyTips = tips; + }); + }); + }, + onInputValue(e) { + const { item } = e.currentTarget.dataset; + const { value = '', areas = [] } = e.detail; + if (item === 'address') { + this.setData( + { + 'locationState.provinceCode': areas[0].code, + 'locationState.provinceName': areas[0].name, + 'locationState.cityName': areas[1].name, + 'locationState.cityCode': areas[1].code, + 'locationState.districtCode': areas[2].code, + 'locationState.districtName': areas[2].name, + areaPickerVisible: false, + }, + () => { + const { isLegal, tips } = this.onVerifyInputLegal(); + this.setData({ + submitActive: isLegal, + }); + this.privateData.verifyTips = tips; + }, + ); + } else { + this.setData( + { + [`locationState.${item}`]: value, + }, + () => { + const { isLegal, tips } = this.onVerifyInputLegal(); + this.setData({ + submitActive: isLegal, + }); + this.privateData.verifyTips = tips; + }, + ); + } + }, + onPickArea() { + this.setData({ areaPickerVisible: true }); + }, + onPickLabels(e) { + const { item } = e.currentTarget.dataset; + const { + locationState: { labelIndex = undefined }, + labels = [], + } = this.data; + let payload = { + labelIndex: item, + addressTag: labels[item].name, + }; + if (item === labelIndex) { + payload = { labelIndex: null, addressTag: '' }; + } + this.setData({ + 'locationState.labelIndex': payload.labelIndex, + }); + this.triggerEvent('triggerUpdateValue', payload); + }, + addLabels() { + this.setData({ + visible: true, + }); + }, + confirmHandle() { + const { labels, labelValue } = this.data; + this.setData({ + visible: false, + labels: [ + ...labels, + { id: labels[labels.length - 1].id + 1, name: labelValue }, + ], + labelValue: '', + }); + }, + cancelHandle() { + this.setData({ + visible: false, + labelValue: '', + }); + }, + onCheckDefaultAddress({ detail }) { + const { value } = detail; + this.setData({ + 'locationState.isDefault': value, + }); + }, + + onVerifyInputLegal() { + const { name, phone, detailAddress, districtName } = + this.data.locationState; + const prefixPhoneReg = String(this.properties.phoneReg || innerPhoneReg); + const prefixNameReg = String(this.properties.nameReg || innerNameReg); + const nameRegExp = new RegExp(prefixNameReg); + const phoneRegExp = new RegExp(prefixPhoneReg); + + if (!name || !name.trim()) { + return { + isLegal: false, + tips: '请填写收货人', + }; + } + if (!nameRegExp.test(name)) { + return { + isLegal: false, + tips: '收货人仅支持输入中文、英文(区分大小写)、数字', + }; + } + if (!phone || !phone.trim()) { + return { + isLegal: false, + tips: '请填写手机号', + }; + } + if (!phoneRegExp.test(phone)) { + return { + isLegal: false, + tips: '请填写正确的手机号', + }; + } + if (!districtName || !districtName.trim()) { + return { + isLegal: false, + tips: '请选择省市区信息', + }; + } + if (!detailAddress || !detailAddress.trim()) { + return { + isLegal: false, + tips: '请完善详细地址', + }; + } + if (detailAddress && detailAddress.trim().length > 50) { + return { + isLegal: false, + tips: '详细地址不能超过50个字符', + }; + } + return { + isLegal: true, + tips: '添加成功', + }; + }, + + builtInSearch({ code, name }) { + return new Promise((resolve, reject) => { + wx.getSetting({ + success: (res) => { + if (res.authSetting[code] === false) { + wx.showModal({ + title: `获取${name}失败`, + content: `获取${name}失败,请在【右上角】-小程序【设置】项中,将【${name}】开启。`, + confirmText: '去设置', + confirmColor: '#FA550F', + cancelColor: '取消', + success(res) { + if (res.confirm) { + wx.openSetting({ + success(settinRes) { + if (settinRes.authSetting[code] === true) { + resolve(); + } else { + console.warn('用户未打开权限', name, code); + reject(); + } + }, + }); + } else { + reject(); + } + }, + fail() { + reject(); + }, + }); + } else { + resolve(); + } + }, + fail() { + reject(); + }, + }); + }); + }, + + onSearchAddress() { + this.builtInSearch({ code: 'scope.userLocation', name: '地址位置' }).then( + () => { + wx.chooseLocation({ + success: (res) => { + if (res.name) { + this.triggerEvent('addressParse', { + address: res.address, + name: res.name, + latitude: res.latitude, + longitude: res.longitude, + }); + } else { + Toast({ + context: this, + selector: '#t-toast', + message: '地点为空,请重新选择', + icon: '', + duration: 1000, + }); + } + }, + fail: function (res) { + console.warn(`wx.chooseLocation fail: ${JSON.stringify(res)}`); + if (res.errMsg !== 'chooseLocation:fail cancel') { + Toast({ + context: this, + selector: '#t-toast', + message: '地点错误,请重新选择', + icon: '', + duration: 1000, + }); + } + }, + }); + }, + ); + }, + formSubmit() { + const { submitActive } = this.data; + if (!submitActive) { + Toast({ + context: this, + selector: '#t-toast', + message: this.privateData.verifyTips, + icon: '', + duration: 1000, + }); + return; + } + const { locationState } = this.data; + + this.hasSava = true; + + resolveAddress({ + saasId: '88888888', + uid: `88888888205500`, + authToken: null, + id: locationState.addressId, + addressId: locationState.addressId, + phone: locationState.phone, + name: locationState.name, + countryName: locationState.countryName, + countryCode: locationState.countryCode, + provinceName: locationState.provinceName, + provinceCode: locationState.provinceCode, + cityName: locationState.cityName, + cityCode: locationState.cityCode, + districtName: locationState.districtName, + districtCode: locationState.districtCode, + detailAddress: locationState.detailAddress, + isDefault: locationState.isDefault === 1 ? 1 : 0, + addressTag: locationState.addressTag, + latitude: locationState.latitude, + longitude: locationState.longitude, + storeId: null, + }); + + wx.navigateBack({ delta: 1 }); + }, + + getWeixinAddress(e) { + const { locationState } = this.data; + const weixinAddress = e.detail; + this.setData( + { + locationState: { ...locationState, ...weixinAddress }, + }, + () => { + const { isLegal, tips } = this.onVerifyInputLegal(); + this.setData({ + submitActive: isLegal, + }); + this.privateData.verifyTips = tips; + }, + ); + }, +}); diff --git a/scr/miniprogram-2/pages/usercenter/address/edit/index.json b/scr/miniprogram-2/pages/usercenter/address/edit/index.json new file mode 100644 index 0000000..b977887 --- /dev/null +++ b/scr/miniprogram-2/pages/usercenter/address/edit/index.json @@ -0,0 +1,16 @@ +{ + "navigationBarTitleText": "添加新地址", + "usingComponents": { + "t-textarea": "tdesign-miniprogram/textarea/textarea", + "t-icon": "tdesign-miniprogram/icon/icon", + "t-input": "tdesign-miniprogram/input/input", + "t-button": "tdesign-miniprogram/button/button", + "t-cell-group": "tdesign-miniprogram/cell-group/cell-group", + "t-cell": "tdesign-miniprogram/cell/cell", + "t-toast": "tdesign-miniprogram/toast/toast", + "t-dialog": "tdesign-miniprogram/dialog/dialog", + "t-switch": "tdesign-miniprogram/switch/switch", + "t-location": "/pages/usercenter/components/t-location/index", + "t-area-picker": "../../components/area-picker-new/index" + } +} \ No newline at end of file diff --git a/scr/miniprogram-2/pages/usercenter/address/edit/index.wxml b/scr/miniprogram-2/pages/usercenter/address/edit/index.wxml new file mode 100644 index 0000000..1d39db4 --- /dev/null +++ b/scr/miniprogram-2/pages/usercenter/address/edit/index.wxml @@ -0,0 +1,146 @@ + + + + + + + +

+ + + + + + + + + + + + + + + + + + + {{label.name}} + + + + + + + + + + + + + + 保存 + + + +
+ + + + + + + diff --git a/scr/miniprogram-2/pages/usercenter/address/edit/index.wxss b/scr/miniprogram-2/pages/usercenter/address/edit/index.wxss new file mode 100644 index 0000000..9189183 --- /dev/null +++ b/scr/miniprogram-2/pages/usercenter/address/edit/index.wxss @@ -0,0 +1,113 @@ +page { + background-color: #f5f5f5; +} +page .divider-line { + width: 100%; + height: 20rpx; + background-color: #f5f5f5; +} +.address-flex-box { + display: flex; + flex-wrap: wrap; +} +.address-detail { + font-size: 30rpx; +} +.address-detail-wx-location { + background: #fff; + padding: 24rpx 32rpx; + display: flex; + align-items: center; + justify-content: space-between; +} +.address-detail-wx-arrow { + align-items: flex-end; +} +.form-address .t-cell-left { + margin-right: 0; +} +.form-address .t-cell-title { + width: 196rpx; + flex: none; +} +.form-address .t-cell-note { + margin-bottom: -20rpx; +} +.form-address .t-input { + width: 100%; +} +.form-address .t-textarea-cell-note { + margin: 0 -32rpx; +} + +.form-address .t-textarea__placeholder { + color: #bbb !important; +} +page .form-address .t-dialog-confirm { + color: #ff5f15; +} +.form-address .form-content { + box-sizing: border-box; + width: 100%; + display: block; +} +.form-address .field-text { + flex: 1; + color: #666666; + font-size: 30rpx; + padding: 0; +} +.form-address .field-text::after { + border: none !important; +} +.form-address .map { + font-size: 48rpx !important; + margin-left: 20rpx; + color: #9d9d9f; +} +.form-address .field.text-area { + height: 200rpx; + align-items: flex-start; +} +.form-address .label-list { + line-height: 50rpx; + background: #f5f5f5; + color: #333; + min-width: 100rpx; + padding: 0 20rpx; + height: 56rpx; + margin: 0 32rpx 20rpx 0; + font-size: 26rpx; + border: 2rpx solid transparent; + width: auto; +} +.form-address .label-list::after { + content: none; +} +.form-address .active-btn { + color: #fa4126; + border: 2rpx solid #fa4126; + background: rgba(255, 95, 21, 0.04); +} +.form-address .active-btn::after { + border: 4rpx solid #ff5f15; +} +.submit { + box-sizing: border-box; + padding: 64rpx 30rpx 88rpx 30rpx; +} +.submit .btn-submit-address { + width: 100%; + background: #fa4126; + color: #fff; + border-radius: 48rpx; +} +.submit .btn-submit-address.disabled { + background-color: #c6c6c6; +} +.submit .btn-submit-address.disabled::after { + display: none; +} +.dialog__button-confirm { + color: #fa4126 !important; +} diff --git a/scr/miniprogram-2/pages/usercenter/address/edit/util.js b/scr/miniprogram-2/pages/usercenter/address/edit/util.js new file mode 100644 index 0000000..17d619a --- /dev/null +++ b/scr/miniprogram-2/pages/usercenter/address/edit/util.js @@ -0,0 +1,33 @@ +let addressPromise = []; + +/** 地址编辑Promise */ +export const getAddressPromise = () => { + let resolver; + let rejecter; + const nextPromise = new Promise((resolve, reject) => { + resolver = resolve; + rejecter = reject; + }); + + addressPromise.push({ resolver, rejecter }); + + return nextPromise; +}; + +/** 用户保存了一个地址 */ +export const resolveAddress = (address) => { + const allAddress = [...addressPromise]; + addressPromise = []; + + console.info('用户保存了一个地址', address); + + allAddress.forEach(({ resolver }) => resolver(address)); +}; + +/** 取消编辑 */ +export const rejectAddress = () => { + const allAddress = [...addressPromise]; + addressPromise = []; + + allAddress.forEach(({ rejecter }) => rejecter(new Error('cancel'))); +}; diff --git a/scr/miniprogram-2/pages/usercenter/address/list/index.js b/scr/miniprogram-2/pages/usercenter/address/list/index.js new file mode 100644 index 0000000..9008572 --- /dev/null +++ b/scr/miniprogram-2/pages/usercenter/address/list/index.js @@ -0,0 +1,202 @@ +/* eslint-disable no-param-reassign */ +import { fetchDeliveryAddressList } from '../../../../services/address/fetchAddress'; +import Toast from 'tdesign-miniprogram/toast/index'; +import { resolveAddress, rejectAddress } from './util'; +import { getAddressPromise } from '../edit/util'; + +Page({ + data: { + addressList: [], + deleteID: '', + showDeleteConfirm: false, + isOrderSure: false, + }, + + /** 选择模式 */ + selectMode: false, + /** 是否已经选择地址,不置为true的话页面离开时会触发取消选择行为 */ + hasSelect: false, + + onLoad(query) { + const { selectMode = '', isOrderSure = '', id = '' } = query; + this.setData({ + isOrderSure: !!isOrderSure, + extraSpace: !!isOrderSure, + id, + }); + this.selectMode = !!selectMode; + this.init(); + }, + + init() { + this.getAddressList(); + }, + onUnload() { + if (this.selectMode && !this.hasSelect) { + rejectAddress(); + } + }, + addAddress() { + wx.navigateTo({ + url: '/pages/usercenter/address/edit/index', + }); + }, + onEdit(e) { + wx.navigateTo({ + url: `/pages/usercenter/address/edit/index?id=${e.detail.id}`, + }); + }, + getAddressList() { + const { id } = this.data; + fetchDeliveryAddressList().then((addressList) => { + addressList.forEach((address) => { + if (address.id === id) { + address.checked = true; + } + }); + this.setData({ addressList }); + }); + }, + getWXAddressHandle() { + wx.chooseAddress({ + success: (res) => { + if (res.errMsg.indexOf('ok') === -1) { + Toast({ + context: this, + selector: '#t-toast', + message: res.errMsg, + icon: '', + duration: 1000, + }); + return; + } + Toast({ + context: this, + selector: '#t-toast', + message: '添加成功', + icon: '', + duration: 1000, + }); + const { length: len } = this.data.addressList; + this.setData({ + [`addressList[${len}]`]: { + name: res.userName, + phoneNumber: res.telNumber, + address: `${res.provinceName}${res.cityName}${res.countryName}${res.detailInfo}`, + isDefault: 0, + tag: '微信地址', + id: len, + }, + }); + }, + }); + }, + confirmDelteHandle({ detail }) { + const { id } = detail || {}; + if (id !== undefined) { + this.setData({ deleteID: id, showDeleteConfirm: true }); + Toast({ + context: this, + selector: '#t-toast', + message: '地址删除成功', + theme: 'success', + duration: 1000, + }); + } else { + Toast({ + context: this, + selector: '#t-toast', + message: '需要组件库发新版才能拿到地址ID', + icon: '', + duration: 1000, + }); + } + }, + deleteAddressHandle(e) { + const { id } = e.currentTarget.dataset; + this.setData({ + addressList: this.data.addressList.filter((address) => address.id !== id), + deleteID: '', + showDeleteConfirm: false, + }); + }, + editAddressHandle({ detail }) { + this.waitForNewAddress(); + + const { id } = detail || {}; + wx.navigateTo({ url: `/pages/usercenter/address/edit/index?id=${id}` }); + }, + selectHandle({ detail }) { + if (this.selectMode) { + this.hasSelect = true; + resolveAddress(detail); + wx.navigateBack({ delta: 1 }); + } else { + this.editAddressHandle({ detail }); + } + }, + createHandle() { + this.waitForNewAddress(); + wx.navigateTo({ url: '/pages/usercenter/address/edit/index' }); + }, + + waitForNewAddress() { + getAddressPromise() + .then((newAddress) => { + let addressList = [...this.data.addressList]; + + newAddress.phoneNumber = newAddress.phone; + newAddress.address = `${newAddress.provinceName}${newAddress.cityName}${newAddress.districtName}${newAddress.detailAddress}`; + newAddress.tag = newAddress.addressTag; + + if (!newAddress.addressId) { + newAddress.id = `${addressList.length}`; + newAddress.addressId = `${addressList.length}`; + + if (newAddress.isDefault === 1) { + addressList = addressList.map((address) => { + address.isDefault = 0; + + return address; + }); + } else { + newAddress.isDefault = 0; + } + + addressList.push(newAddress); + } else { + addressList = addressList.map((address) => { + if (address.addressId === newAddress.addressId) { + return newAddress; + } + return address; + }); + } + + addressList.sort((prevAddress, nextAddress) => { + if (prevAddress.isDefault && !nextAddress.isDefault) { + return -1; + } + if (!prevAddress.isDefault && nextAddress.isDefault) { + return 1; + } + return 0; + }); + + this.setData({ + addressList: addressList, + }); + }) + .catch((e) => { + if (e.message !== 'cancel') { + Toast({ + context: this, + selector: '#t-toast', + message: '地址编辑发生错误', + icon: '', + duration: 1000, + }); + } + }); + }, +}); diff --git a/scr/miniprogram-2/pages/usercenter/address/list/index.json b/scr/miniprogram-2/pages/usercenter/address/list/index.json new file mode 100644 index 0000000..1e59a76 --- /dev/null +++ b/scr/miniprogram-2/pages/usercenter/address/list/index.json @@ -0,0 +1,11 @@ +{ + "navigationBarTitleText": "收货地址", + "usingComponents": { + "t-icon": "tdesign-miniprogram/icon/icon", + "t-image": "/components/webp-image/index", + "t-toast": "tdesign-miniprogram/toast/toast", + "t-address-item": "../../components/ui-address-item/index", + "t-location": "../../components/t-location/index", + "t-empty": "tdesign-miniprogram/empty/empty" + } +} \ No newline at end of file diff --git a/scr/miniprogram-2/pages/usercenter/address/list/index.wxml b/scr/miniprogram-2/pages/usercenter/address/list/index.wxml new file mode 100644 index 0000000..b7267f7 --- /dev/null +++ b/scr/miniprogram-2/pages/usercenter/address/list/index.wxml @@ -0,0 +1,48 @@ + + + + + + + + + + + + + + + 新建收货地址 + + + 最多支持添加20个收货地址 + + + + diff --git a/scr/miniprogram-2/pages/usercenter/address/list/index.wxss b/scr/miniprogram-2/pages/usercenter/address/list/index.wxss new file mode 100644 index 0000000..05b2554 --- /dev/null +++ b/scr/miniprogram-2/pages/usercenter/address/list/index.wxss @@ -0,0 +1,109 @@ +page { + background: #f5f5f5; + height: 100%; +} +.address-container { + display: flex; + flex-direction: column; + align-items: stretch; + padding-bottom: calc(env(safe-area-inset-bottom) + 172rpx); +} +.address-container .address-list { + font-size: 24rpx; + background-color: #ffffff; + -webkit-overflow-scrolling: touch; +} +.address-list .no-address { + width: 750rpx; + padding-top: 30vh; + display: flex; + flex-direction: column; + justify-content: flex-start; + align-items: center; +} +.address-list .no-address__icon { + width: 224rpx; + height: 224rpx; +} +.address-list .no-address__text { + font-size: 28rpx; + line-height: 40rpx; + color: #999999; + margin-top: 24rpx; +} +.address-container .bottom-fixed { + border-top: 1rpx solid #e5e5e5; + position: fixed; + bottom: 0; + left: 0; + right: 0; + z-index: 1000; + background: #fff; + display: flex; + justify-content: center; + flex-direction: column; + align-items: center; + padding: 12rpx 32rpx calc(env(safe-area-inset-bottom) + 12rpx) 32rpx; +} +.address-container .btn-wrap { + width: 100%; + display: flex; + justify-content: space-between; + align-items: center; + font-size: 32rpx; + font-weight: bold; +} +.address-container .btn-wrap .location-btn { + width: 332rpx; + height: 88rpx; + display: flex; + justify-content: center; + align-items: center; + background-color: #ffffff; + color: #333; + position: relative; +} +.address-container .btn-wrap .location-btn::after { + content: ''; + position: absolute; /* 把父视图设置为relative,方便定位*/ + top: 0; + left: 0; + width: 200%; + height: 200%; + transform: scale(0.5); + transform-origin: 0 0; + box-sizing: border-box; + border-radius: 88rpx; + border: #dddddd 2rpx solid; +} +.address-container .btn-wrap .address-btn { + width: 332rpx; + height: 88rpx; + display: flex; + justify-content: center; + align-items: center; + background-color: #fa4126; + border-radius: 44rpx; + color: #fff; +} +.address-container .btn-wrap .btn-default { + background: #c6c6c6; +} +.address-container .bottom-fixed .footer { + margin-top: 10rpx; + display: inline-block; + width: 100%; + text-align: center; + font-size: 24rpx; + font-weight: 400; + color: #ff2525; + line-height: 60rpx; + height: 60rpx; +} +.address-container .message { + margin-top: 48rpx; +} +.address-container .custom-class { + margin-right: 12rpx; + font-weight: normal; +} diff --git a/scr/miniprogram-2/pages/usercenter/address/list/util.js b/scr/miniprogram-2/pages/usercenter/address/list/util.js new file mode 100644 index 0000000..953f8d0 --- /dev/null +++ b/scr/miniprogram-2/pages/usercenter/address/list/util.js @@ -0,0 +1,31 @@ +let addressPromise = []; + +/** 获取一个地址选择Promise */ +export const getAddressPromise = () => { + let resolver; + let rejecter; + const nextPromise = new Promise((resolve, reject) => { + resolver = resolve; + rejecter = reject; + }); + + addressPromise.push({ resolver, rejecter }); + + return nextPromise; +}; + +/** 用户选择了一个地址 */ +export const resolveAddress = (address) => { + const allAddress = [...addressPromise]; + addressPromise = []; + + allAddress.forEach(({ resolver }) => resolver(address)); +}; + +/** 用户没有选择任何地址只是返回上一页了 */ +export const rejectAddress = () => { + const allAddress = [...addressPromise]; + addressPromise = []; + + allAddress.forEach(({ rejecter }) => rejecter(new Error('cancel'))); +}; diff --git a/scr/miniprogram-2/pages/usercenter/components/area-picker-new/index.js b/scr/miniprogram-2/pages/usercenter/components/area-picker-new/index.js new file mode 100644 index 0000000..d102f41 --- /dev/null +++ b/scr/miniprogram-2/pages/usercenter/components/area-picker-new/index.js @@ -0,0 +1,192 @@ +Component({ + codeList: [], + options: { + multipleSlots: true, + }, + properties: { + show: { + type: Boolean, + observer(show) { + if (!show) return; + this.setData({ pickerValue: [] }, () => { + this.codeList = this.splitCode(this.data.value); + this.updateDivisions(); + }); + }, + }, + title: { + type: String, + value: '选择地区', + }, + value: { + type: String, + value: '', + }, + areaData: { + type: Array, + value: [], + observer() { + if (!this.data.show) return; + this.updateDivisions(); + }, + }, + columns: { + type: Number, + value: 3, + }, + columnsName: { + type: Array, + value: ['省市/地区', '城市', '区'], + }, + useLoadingSlot: Boolean, + }, + data: { + pickerValue: [], + pickerColumnData: [], + hightLightIndex: [], + loading: false, + scrollTop: 0, + }, + methods: { + splitCode(value) { + const codeList = []; + for (let i = 1; i <= this.data.columns; i++) { + let code = value.slice(0, i * 2); + if (code.length < i * 2) { + code = `${value.slice(0, (i - 1) * 2)}00`; + } + while (code.length < this.data.value.length) { + code += '0'; + } + codeList.push(code); + } + return codeList; + }, + updateDivisions() { + const { pickerValue } = this.data; + const area = pickerValue[pickerValue.length - 1]; + let currentAreaData = []; + if (pickerValue.length === 0) { + currentAreaData = this.data.areaData; + } else { + if (area && area.children && area.children.length > 0) { + currentAreaData = [...area.children]; + } else if (area && !area.children) { + const newArea = this.getNewAreaByPickerValue(pickerValue).area; + if (newArea && newArea.children) { + area.children = newArea.children; + currentAreaData = [...area.children]; + } + } + } + if (currentAreaData.length > 0) { + const pickerColumnData = currentAreaData[0].code + ? [{ name: '', children: currentAreaData }] + : currentAreaData; + let oldPickedIndexes = [-1, -1]; + if (this.codeList.length > pickerValue.length) { + for (const gi in pickerColumnData) { + for (const ai in pickerColumnData[gi].children) { + if ( + pickerColumnData[gi].children[ai].code === + this.codeList[pickerValue.length] + ) { + oldPickedIndexes = [+gi, +ai]; + break; + } + } + if (oldPickedIndexes[0] > -1) break; + } + } + this.setData({ loading: false, pickerColumnData }, () => { + return new Promise((resolve) => { + if (oldPickedIndexes[0] > -1) { + this.createSelectorQuery() + .select('#area-item-0-0') + .boundingClientRect() + .select(`#area-item-${oldPickedIndexes.join('-')}`) + .boundingClientRect() + .exec((res) => { + if (res[0] && res[1]) { + const offsetTop = res[1].top - res[0].top; + const diff = res[1].height; + resolve(offsetTop > diff ? offsetTop - diff : 0); + } else { + resolve(0); + } + }); + } else resolve(0); + }).then((scrollTop) => { + this.setData({ + hightLightIndex: oldPickedIndexes, + scrollTop, + }); + }); + }); + } else { + this.setData({ loading: true, pickerColumnData: [] }, () => { + if (area && area.code) { + this.triggerEvent('pullchildren', { parentCode: area.code }); + } else { + this.triggerEvent('pullchildren', {}); + } + }); + } + }, + getNewAreaByPickerValue(pickerValue) { + let { areaData } = this.data; + const areas = []; + for (const pickedArea of pickerValue) { + const _areaData = + areaData.length > 0 && areaData[0].code + ? [{ name: '', children: areaData }] + : areaData; + let newArea; + for (const gi in _areaData) { + for (const ai in _areaData[gi].children) { + if (_areaData[gi].children[ai].code === pickedArea.code) { + newArea = _areaData[gi].children[ai]; + break; + } + } + if (newArea) break; + } + if (!newArea) break; + areaData = newArea.children || []; + areas.push(newArea); + } + return { area: areas[areas.length - 1], areas }; + }, + onChange(e) { + const { gi, ai } = e.currentTarget.dataset; + const area = this.data.pickerColumnData[gi].children[ai]; + const pickerValue = this.data.pickerValue.concat(area); + if (pickerValue.length < this.data.columns) { + this.setData({ pickerValue }, () => { + this.updateDivisions(); + }); + this.triggerEvent('change', { value: area.code, areas: pickerValue }); + } else { + this.setData({ show: false }); + this.triggerEvent('confirm', { value: area.code, areas: pickerValue }); + } + }, + onPickerClick(e) { + const { index } = e.currentTarget.dataset; + if (index > this.data.pickerValue.length - 1) return; + const pickerValue = this.data.pickerValue.slice(0, index); + this.setData({ pickerValue }, () => { + this.updateDivisions(); + }); + this.triggerEvent('change', { + value: pickerValue[pickerValue.length - 1]?.code, + areas: pickerValue, + }); + }, + + onClose() { + this.setData({ show: false }); + this.triggerEvent('close'); + }, + }, +}); diff --git a/scr/miniprogram-2/pages/usercenter/components/area-picker-new/index.json b/scr/miniprogram-2/pages/usercenter/components/area-picker-new/index.json new file mode 100644 index 0000000..f27cef8 --- /dev/null +++ b/scr/miniprogram-2/pages/usercenter/components/area-picker-new/index.json @@ -0,0 +1,8 @@ +{ + "component": true, + "usingComponents": { + "t-popup": "tdesign-miniprogram/popup/popup", + "t-icon": "tdesign-miniprogram/icon/icon", + "t-loading-content": "/components/loading-content/index" + } +} diff --git a/scr/miniprogram-2/pages/usercenter/components/area-picker-new/index.wxml b/scr/miniprogram-2/pages/usercenter/components/area-picker-new/index.wxml new file mode 100644 index 0000000..b0f68e0 --- /dev/null +++ b/scr/miniprogram-2/pages/usercenter/components/area-picker-new/index.wxml @@ -0,0 +1,78 @@ + + + + + {{title}} + + + + {{pickedArea.name}} + + + + + 请选择{{columsName[pickerValue.length]}} + + + + + + + + + + + 正在加载 + + + + 选择{{columsName[pickerValue.length]}} + + + + {{group.name}} + + {{item.name}} + + + + + + + + + + diff --git a/scr/miniprogram-2/pages/usercenter/components/area-picker-new/index.wxss b/scr/miniprogram-2/pages/usercenter/components/area-picker-new/index.wxss new file mode 100644 index 0000000..792bce2 --- /dev/null +++ b/scr/miniprogram-2/pages/usercenter/components/area-picker-new/index.wxss @@ -0,0 +1,153 @@ +.area-picker { + background-color: white; + border-radius: 20rpx 20rpx 0 0; + overflow: hidden; + height: 80vh; + display: flex; + flex-direction: column; + position: relative; +} +.area-picker__close { + position: absolute; + top: 0; + right: 0; + height: 100rpx; + line-height: 100rpx; + padding: 0 24rpx; + font-size: 36rpx; + color: #999; + color: var(--color-text-caption, #999); +} +.area-picker__header { + height: 100rpx; + line-height: 100rpx; + text-align: center; + font-size: 32rpx; + color: #333; + color: var(--color-text, #333); + font-weight: bold; + flex: none; +} +.area-picker__selected-result { + padding: 20rpx 24rpx 32rpx; + flex: none; +} +.area-picker__selected-result__item { + padding-left: 40rpx; + position: relative; +} +.area-picker__selected-result__item.active + .area-picker__selected-result__item__name { + color: #fa550f; + color: var(--color-primary, #fa550f); +} +.area-picker__selected-result__item.active + .area-picker__selected-result__item__circle { + background-color: transparent; +} +.area-picker__selected-result__item.active + .area-picker__selected-result__item__circle::after { + content: ' '; + position: absolute; + left: -50%; + right: -50%; + top: -50%; + bottom: -50%; + border-radius: 50%; + box-sizing: border-box; + border: 1px solid #fa550f; + border: 1px solid var(--color-primary, #fa550f); + transform: scale(0.5); +} +.area-picker__selected-result__item:not(:last-child) { + padding-bottom: 48rpx; +} +.area-picker__selected-result__item__name { + color: #616161; + color: var(--area-picker-name-color, #616161); + font-size: 28rpx; + line-height: 40rpx; +} +.area-picker__selected-result__item__circle, +.area-picker__selected-result__item__line { + position: absolute; + top: 20rpx; + left: 8rpx; + background: #fa550f; + background: var(--color-primary, #fa550f); +} +.area-picker__selected-result__item__line { + height: calc(100% - 8rpx); + width: 1rpx; +} +.area-picker__selected-result__item__circle { + width: 16rpx; + height: 16rpx; + border-radius: 50%; + transform: translate(-50%, -50%); +} +.area-picker__split-line { + width: 200%; + height: 1px; + background-color: #e5e5e5; + background-color: var(--color-bg-line, #e5e5e5); + transform-origin: left top; + transform: scale(0.5); + flex: none; +} +.area-picker__area-list { + padding: 20rpx 24rpx calc(20rpx + env(safe-area-inset-bottom)) 24rpx; + flex: auto; + display: flex; + flex-direction: column; +} +.area-picker__area-list__loading { + height: 100%; + width: 100%; +} +.area-picker__area-list__title { + font-size: 24rpx; + color: #999; + color: var(--color-text-caption, #999); + flex: none; +} +.area-picker__area-list__content { + padding: 24rpx 0; + flex: auto; + height: 0; + position: relative; +} +.area-picker__area-list__content__inner { + position: absolute; + height: 100%; + overflow: hidden; +} +.area-picker__area-list__content__group { + display: flex; +} +.area-picker__area-list__content__group__title { + flex: none; + width: 40rpx; + font-size: 24rpx; + line-height: 40rpx; + color: #999; + color: var(--color-text-caption, #999); +} +.area-picker__area-list__content__group__content { + flex: auto; +} +.area-picker__area-list__content__group__content__item { + font-size: 28rpx; + line-height: 40rpx; + color: #333; + color: var(--color-text, #333); + padding-bottom: 48rpx; +} +.area-picker__area-list__content__group__content__item__active { + color: #fa550f; + color: var(--color-primary, #fa550f); +} +.area-picker__area-list__content__group__content__item.active { + color: #fa550f; + color: var(--color-primary, #fa550f); +} diff --git a/scr/miniprogram-2/pages/usercenter/components/order-group/index.js b/scr/miniprogram-2/pages/usercenter/components/order-group/index.js new file mode 100644 index 0000000..5bfe0f6 --- /dev/null +++ b/scr/miniprogram-2/pages/usercenter/components/order-group/index.js @@ -0,0 +1,37 @@ +Component({ + externalClasses: ['title-class', 'icon-class', 'number-class'], + options: { + multipleSlots: true, + }, + properties: { + orderTagInfos: { + type: Array, + value: [], + }, + title: { + type: String, + value: '我的订单', + }, + desc: { + type: String, + value: '全部订单', + }, + isTop: { + type: Boolean, + value: true, + }, + classPrefix: { + type: String, + value: 'wr', + }, + }, + methods: { + onClickItem(e) { + this.triggerEvent('onClickItem', e.currentTarget.dataset.item); + }, + + onClickTop() { + this.triggerEvent('onClickTop', {}); + }, + }, +}); diff --git a/scr/miniprogram-2/pages/usercenter/components/order-group/index.json b/scr/miniprogram-2/pages/usercenter/components/order-group/index.json new file mode 100644 index 0000000..c22feda --- /dev/null +++ b/scr/miniprogram-2/pages/usercenter/components/order-group/index.json @@ -0,0 +1,9 @@ +{ + "component": true, + "usingComponents": { + "t-cell": "tdesign-miniprogram/cell/cell", + "t-cell-group": "tdesign-miniprogram/cell-group/cell-group", + "t-badge": "tdesign-miniprogram/badge/badge", + "t-icon": "tdesign-miniprogram/icon/icon" + } +} \ No newline at end of file diff --git a/scr/miniprogram-2/pages/usercenter/components/order-group/index.wxml b/scr/miniprogram-2/pages/usercenter/components/order-group/index.wxml new file mode 100644 index 0000000..366345d --- /dev/null +++ b/scr/miniprogram-2/pages/usercenter/components/order-group/index.wxml @@ -0,0 +1,38 @@ + + + + + + + + + + + + {{item.title}} + + + + diff --git a/scr/miniprogram-2/pages/usercenter/components/order-group/index.wxss b/scr/miniprogram-2/pages/usercenter/components/order-group/index.wxss new file mode 100644 index 0000000..59b9aa1 --- /dev/null +++ b/scr/miniprogram-2/pages/usercenter/components/order-group/index.wxss @@ -0,0 +1,56 @@ +.order-group { + margin-bottom: 24rpx; + background-color: #ffffff; + border-radius: 16rpx 16rpx 0 0; +} +.order-group .order-group__top { + padding: 24rpx 18rpx 24rpx 32rpx; + border-radius: 16rpx 16rpx 0 0; +} +.order-group__top___title { + font-size: 32rpx; + line-height: 48rpx; + font-weight: bold; +} +.order-group__top__note { + font-size: 28rpx; +} +.order-group__content { + overflow: hidden; + width: 100%; + height: 164rpx; + display: flex; + background-color: #fff; + border-radius: 0 0 16rpx 16rpx; +} +.order-group__item { + overflow: hidden; + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; + flex: 1; +} +.order-group__item:first-child { + border-radius: 0 0 0 16rpx; +} +.order-group__item:last-child { + border-radius: 0 0 16rpx 0; +} +.order-group__item__title { + font-size: 24rpx; + color: #666; + line-height: 32rpx; +} +.order-group__item__icon { + margin-bottom: 20rpx; + width: 56rpx; + height: 56rpx; + position: relative; +} +.order-group__top__title { + font-weight: bold; +} +.order-group .order-group__left { + margin-right: 0; +} diff --git a/scr/miniprogram-2/pages/usercenter/components/t-location/index.js b/scr/miniprogram-2/pages/usercenter/components/t-location/index.js new file mode 100644 index 0000000..c09ca92 --- /dev/null +++ b/scr/miniprogram-2/pages/usercenter/components/t-location/index.js @@ -0,0 +1,126 @@ +import { getPermission } from '../../../../utils/getPermission'; +import { phoneRegCheck } from '../../../../utils/util'; +import Toast from 'tdesign-miniprogram/toast/index'; +import { addressParse } from '../../../../utils/addressParse'; +import { resolveAddress, rejectAddress } from '../../address/list/util'; + +Component({ + externalClasses: ['t-class'], + properties: { + title: { + type: String, + }, + navigator: { + type: Boolean, + }, + isCustomStyle: { + type: Boolean, + value: false, + }, + isDisabledBtn: { + type: Boolean, + value: false, + }, + isOrderSure: { + type: Boolean, + value: false, + }, + }, + methods: { + getWxLocation() { + if (this.properties.isDisabledBtn) return; + getPermission({ code: 'scope.address', name: '通讯地址' }).then(() => { + wx.chooseAddress({ + success: async (options) => { + const { + provinceName, + cityName, + countryName, + detailInfo, + userName, + telNumber, + } = options; + + if (!phoneRegCheck(telNumber)) { + Toast({ + context: this, + selector: '#t-toast', + message: '请填写正确的手机号', + }); + return; + } + + const target = { + name: userName, + phone: telNumber, + countryName: '中国', + countryCode: 'chn', + detailAddress: detailInfo, + provinceName: provinceName, + cityName: cityName, + districtName: countryName, + isDefault: false, + isOrderSure: this.properties.isOrderSure, + }; + + addressParse(provinceName, cityName, countryName); + + try { + const { provinceCode, cityCode, districtCode } = + await addressParse(provinceName, cityName, countryName); + + const params = Object.assign(target, { + provinceCode, + cityCode, + districtCode, + }); + if (this.properties.isOrderSure) { + this.onHandleSubmit(params); + } else if (this.properties.navigator) { + Navigator.gotoPage('/address-detail', params); + } else { + this.triggerEvent('change', params); + } + } catch (error) { + wx.showToast({ title: '地址解析出错,请稍后再试', icon: 'none' }); + } + }, + fail(err) { + console.warn('未选择微信收货地址', err); + }, + }); + }); + }, + + async queryAddress(addressId) { + try { + const { data } = await apis.userInfo.queryAddress({ addressId }); + return data.userAddressVO; + } catch (err) { + console.error('查询地址错误', err); + throw err; + } + }, + + findPage(pageRouteUrl) { + const currentRoutes = getCurrentPages().map((v) => v.route); + return currentRoutes.indexOf(pageRouteUrl); + }, + + async onHandleSubmit(params) { + try { + const orderPageDeltaNum = this.findPage( + 'pages/order/order-confirm/index', + ); + if (orderPageDeltaNum > -1) { + wx.navigateBack({ delta: 1 }); + resolveAddress(params); + return; + } + } catch (err) { + rejectAddress(params); + console.error(err); + } + }, + }, +}); diff --git a/scr/miniprogram-2/pages/usercenter/components/t-location/index.json b/scr/miniprogram-2/pages/usercenter/components/t-location/index.json new file mode 100644 index 0000000..4e3dc86 --- /dev/null +++ b/scr/miniprogram-2/pages/usercenter/components/t-location/index.json @@ -0,0 +1,8 @@ +{ + "component": true, + "usingComponents": { + "t-cell": "tdesign-miniprogram/cell/cell", + "t-icon": "tdesign-miniprogram/icon/icon", + "t-toast": "tdesign-miniprogram/toast/toast" + } +} \ No newline at end of file diff --git a/scr/miniprogram-2/pages/usercenter/components/t-location/index.wxml b/scr/miniprogram-2/pages/usercenter/components/t-location/index.wxml new file mode 100644 index 0000000..5793dc0 --- /dev/null +++ b/scr/miniprogram-2/pages/usercenter/components/t-location/index.wxml @@ -0,0 +1,39 @@ + + + + + {{title}} + + + + + + + + + + + + diff --git a/scr/miniprogram-2/pages/usercenter/components/t-location/index.wxss b/scr/miniprogram-2/pages/usercenter/components/t-location/index.wxss new file mode 100644 index 0000000..4ba6cbc --- /dev/null +++ b/scr/miniprogram-2/pages/usercenter/components/t-location/index.wxss @@ -0,0 +1,19 @@ +.wx-address .weixin { + display: inline-block; + font-size: 48rpx !important; + margin-right: 20rpx; + font-weight: normal; +} +.wx-address .cell { + padding: 32rpx 30rpx; + border-radius: 8rpx; +} +.wx-address .cell__title { + font-size: 30rpx; + color: #333333; +} +.wx-address-custom { + display: flex; + align-items: center; + font-size: 32rpx; +} diff --git a/scr/miniprogram-2/pages/usercenter/components/ui-address-item/index.js b/scr/miniprogram-2/pages/usercenter/components/ui-address-item/index.js new file mode 100644 index 0000000..467bbf7 --- /dev/null +++ b/scr/miniprogram-2/pages/usercenter/components/ui-address-item/index.js @@ -0,0 +1,46 @@ +Component({ + options: { + addGlobalClass: true, + multipleSlots: true, + }, + properties: { + address: { + type: Object, + value: {}, + }, + customIcon: { + type: String, + value: 'edit-1', + }, + extraSpace: { + type: Boolean, + value: true, + }, + isDrawLine: { + type: Boolean, + value: true, + }, + }, + externalClasses: [ + 'item-wrapper-class', + 'title-class', + 'default-tag-class', + 'normal-tag-class', + 'address-info-class', + 'delete-class', + ], + methods: { + onDelete(e) { + const { item } = e.currentTarget.dataset; + this.triggerEvent('onDelete', item); + }, + onSelect(e) { + const { item } = e.currentTarget.dataset; + this.triggerEvent('onSelect', item); + }, + onEdit(e) { + const { item } = e.currentTarget.dataset; + this.triggerEvent('onEdit', item); + }, + }, +}); diff --git a/scr/miniprogram-2/pages/usercenter/components/ui-address-item/index.json b/scr/miniprogram-2/pages/usercenter/components/ui-address-item/index.json new file mode 100644 index 0000000..0f9fe0f --- /dev/null +++ b/scr/miniprogram-2/pages/usercenter/components/ui-address-item/index.json @@ -0,0 +1,8 @@ +{ + "component": true, + "usingComponents": { + "t-icon": "tdesign-miniprogram/icon/icon", + "t-tag": "tdesign-miniprogram/tag/tag", + "t-swipe-cell": "tdesign-miniprogram/swipe-cell/swipe-cell" + } +} diff --git a/scr/miniprogram-2/pages/usercenter/components/ui-address-item/index.wxml b/scr/miniprogram-2/pages/usercenter/components/ui-address-item/index.wxml new file mode 100644 index 0000000..9b3319f --- /dev/null +++ b/scr/miniprogram-2/pages/usercenter/components/ui-address-item/index.wxml @@ -0,0 +1,52 @@ + + var toHide = function(array) { + var mphone = array.substring(0, 3) + '****' + array.substring(7); + return mphone; + } + module.exports.toHide = toHide; + + + + + + + + + + {{address.name}} + {{phoneReg.toHide(address.phoneNumber || '')}} + + + + 默认 + {{address.tag}} + {{address.address}} + + + + + + + + + 删除 + + + + diff --git a/scr/miniprogram-2/pages/usercenter/components/ui-address-item/index.wxss b/scr/miniprogram-2/pages/usercenter/components/ui-address-item/index.wxss new file mode 100644 index 0000000..6b74669 --- /dev/null +++ b/scr/miniprogram-2/pages/usercenter/components/ui-address-item/index.wxss @@ -0,0 +1,103 @@ +.address-item-wrapper { + overflow: hidden; +} +.address-item-wrapper .swipe-out .wr-swiper-cell { + margin-top: 20rpx; +} +.address-item-wrapper .swipe-out .swipe-right-del { + display: flex; + justify-content: center; + align-items: center; + width: 144rpx; + height: 100%; + background-color: #fa4126; + color: #fff; + font-size: 28rpx; + line-height: 40rpx; +} +.address-item-wrapper .draw-line { + position: relative; +} +.address-item-wrapper .draw-line::after { + content: ''; + position: absolute; + top: 0; + left: 32rpx; + width: 200%; + height: 2rpx; + transform: scale(0.5); + transform-origin: 0 0; + box-sizing: border-box; + border-bottom: #e5e5e5 2rpx solid; +} +.address-item-wrapper .address { + display: flex; + justify-content: space-between; + align-items: center; + padding: 32rpx; + background-color: #fff; +} +.address-item-wrapper .address .address-edit { + padding: 20rpx 0 20rpx 46rpx; +} +.address-item-wrapper .address .address-left { + width: 80rpx; + display: flex; + justify-content: center; +} +.address-item-wrapper .address .address-content { + display: flex; + flex-direction: column; + flex: 1; +} +.address-item-wrapper .address .address-content .title { + font-size: 32rpx; + line-height: 48rpx; + margin-bottom: 16rpx; + color: #333333; + font-weight: bold; + display: flex; +} +.address-item-wrapper .address .address-content .title .text-style { + margin-right: 8rpx; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; + max-width: 280rpx; +} +.address-item-wrapper .address .address-content .label-adds { + display: flex; +} +.address-item-wrapper .address .address-content .label-adds .adds { + display: -webkit-box; + overflow: hidden; + text-overflow: ellipsis; + -webkit-box-orient: vertical; + -webkit-line-clamp: 2; + color: #999999; +} +.address-item-wrapper .address .address-content .label-adds .tag { + display: inline-block; + padding: 0rpx 8rpx; + min-width: 40rpx; + height: 32rpx; + border-radius: 18rpx; + font-size: 20rpx; + line-height: 32rpx; + text-align: center; + margin-right: 8rpx; + vertical-align: text-top; +} +.address-item-wrapper .address .address-content .label-adds .tag-default { + background: #ffece9; + color: #fa4126; +} +.address-item-wrapper .address .address-content .label-adds .tag-primary { + background: #f0f1ff; + color: #5a66ff; +} +.address-item-wrapper .address .address-content .label-adds .address-text { + font-size: 28rpx; + line-height: 40rpx; + color: #999999; +} diff --git a/scr/miniprogram-2/pages/usercenter/components/ui-select-picker/index.js b/scr/miniprogram-2/pages/usercenter/components/ui-select-picker/index.js new file mode 100644 index 0000000..fff68cc --- /dev/null +++ b/scr/miniprogram-2/pages/usercenter/components/ui-select-picker/index.js @@ -0,0 +1,73 @@ +Component({ + properties: { + show: { + type: Boolean, + observer(show) { + if (!show) return; + this.updateDivisions(); + }, + }, + title: { + type: String, + value: '', + }, + value: { + type: String, + value: '', + observer() { + if (!this.data.show) return; + this.updateDivisions(); + }, + }, + pickerOptions: { + type: Array, + value: [], + observer() { + if (!this.data.show) return; + this.updateDivisions(); + }, + }, + headerVisible: { + type: Boolean, + value: true, + }, + }, + data: { + pickerValue: [], + }, + methods: { + updateDivisions() { + const { pickerOptions, value } = this.data; + const index = (pickerOptions || []).findIndex( + (item) => item.code === value, + ); + + setTimeout(() => { + this.setData({ pickerValue: index >= 0 ? [index] : [0] }); + }, 0); + }, + + getAreaByIndex(indexes) { + const { pickerOptions } = this.data; + return pickerOptions[indexes.toString()]; + }, + + onChange(e) { + const currentValue = e.detail.value; + const target = this.getAreaByIndex(currentValue); + if (target === null) return; + + this.setData({ pickerValue: currentValue }); + this.triggerEvent('change', { value: target.code, target: target }); + }, + + onConfirm() { + const target = this.getAreaByIndex(this.data.pickerValue); + this.triggerEvent('confirm', { value: target?.code, target }); + }, + + onClose() { + this.triggerEvent('close'); + }, + }, +}); diff --git a/scr/miniprogram-2/pages/usercenter/components/ui-select-picker/index.json b/scr/miniprogram-2/pages/usercenter/components/ui-select-picker/index.json new file mode 100644 index 0000000..6e4c04e --- /dev/null +++ b/scr/miniprogram-2/pages/usercenter/components/ui-select-picker/index.json @@ -0,0 +1,6 @@ +{ + "component": true, + "usingComponents": { + "t-popup": "tdesign-miniprogram/popup/popup" + } +} diff --git a/scr/miniprogram-2/pages/usercenter/components/ui-select-picker/index.wxml b/scr/miniprogram-2/pages/usercenter/components/ui-select-picker/index.wxml new file mode 100644 index 0000000..7df73f8 --- /dev/null +++ b/scr/miniprogram-2/pages/usercenter/components/ui-select-picker/index.wxml @@ -0,0 +1,27 @@ + + + + 取消 + {{title}} + 确定 + + + {{title}} + + + + {{ item.name }} + + + + 取消 + 确定 + + + + diff --git a/scr/miniprogram-2/pages/usercenter/components/ui-select-picker/index.wxss b/scr/miniprogram-2/pages/usercenter/components/ui-select-picker/index.wxss new file mode 100644 index 0000000..3e977be --- /dev/null +++ b/scr/miniprogram-2/pages/usercenter/components/ui-select-picker/index.wxss @@ -0,0 +1,102 @@ +.city-picker-container { + opacity: 0; + position: fixed; + top: 100vh; + left: 0; + right: 0; + height: 100vh; + z-index: 100; +} +.city-picker-container.show { + top: 0; + opacity: 1; +} +.city-picker-container.show .city-picker-box { + bottom: 0; +} +.city-picker-shadow { + position: absolute; + top: 0; + left: 0; + right: 0; + bottom: 0; + background-color: rgba(0, 0, 0, 0.65); +} +.city-picker-header { + height: 100rpx; + line-height: 100rpx; + text-align: center; + font-size: 32rpx; + color: #333333; +} +.city-picker-more { + display: flex; + justify-content: space-between; + align-items: center; +} +.city-picker-footer { + height: 100rpx; + display: flex; + justify-content: space-between; + align-items: center; +} +.city-picker-footer .btn { + width: 330rpx; + height: 80rpx; + line-height: 80rpx; + text-align: center; + color: #666666; + font-size: 32rpx; + position: relative; +} +.city-picker-footer .btn__active { + opacity: 0.5; +} +.city-picker-footer .btn::after { + display: block; + content: ' '; + position: absolute; + left: -50%; + right: -50%; + top: -50%; + bottom: -50%; + transform: scale(0.5); + border: 1rpx solid #999999; + border-radius: 16rpx; +} +.city-picker-footer .btn.primary { + color: #fa550f; +} +.city-picker-footer .btn.primary::after { + border-color: #fa550f; +} +.picker-column:not(:first-child) { + margin-left: 40rpx; +} +.city-picker-box { + position: absolute; + bottom: -100%; + transition: 0.3s bottom ease-in-out; + left: 0; + right: 0; + z-index: 100; + background-color: #fff; + padding: 0 30rpx; + color: #333333; + font-size: 34rpx; + border-radius: 20rpx 20rpx 0 0; + padding-bottom: env(safe-area-inset-bottom); +} +.show .city-picker-shadow { + display: block; +} +.picker { + height: 300rpx; + margin: 50rpx 0; + line-height: 88rpx; + text-align: center; +} +/* 似乎小程序picker-view的bug,indicator-class仅height生效,其他诸如line-height、text-align等放到父class中设置 */ +.picker-center-row { + height: 88rpx; +} diff --git a/scr/miniprogram-2/pages/usercenter/components/user-center-card/index.js b/scr/miniprogram-2/pages/usercenter/components/user-center-card/index.js new file mode 100644 index 0000000..47593c4 --- /dev/null +++ b/scr/miniprogram-2/pages/usercenter/components/user-center-card/index.js @@ -0,0 +1,35 @@ +const AuthStepType = { + ONE: 1, + TWO: 2, + THREE: 3, +}; + +Component({ + options: { + multipleSlots: true, + }, + properties: { + currAuthStep: { + type: Number, + value: AuthStepType.ONE, + }, + userInfo: { + type: Object, + value: {}, + }, + isNeedGetUserInfo: { + type: Boolean, + value: false, + }, + }, + data: { + defaultAvatarUrl: + 'https://cdn-we-retail.ym.tencent.com/miniapp/usercenter/icon-user-center-avatar@2x.png', + AuthStepType, + }, + methods: { + gotoUserEditPage() { + this.triggerEvent('gotoUserEditPage'); + }, + }, +}); diff --git a/scr/miniprogram-2/pages/usercenter/components/user-center-card/index.json b/scr/miniprogram-2/pages/usercenter/components/user-center-card/index.json new file mode 100644 index 0000000..e169f6f --- /dev/null +++ b/scr/miniprogram-2/pages/usercenter/components/user-center-card/index.json @@ -0,0 +1,7 @@ +{ + "component": true, + "usingComponents": { + "t-icon": "tdesign-miniprogram/icon/icon", + "t-avatar": "tdesign-miniprogram/avatar/avatar" + } +} \ No newline at end of file diff --git a/scr/miniprogram-2/pages/usercenter/components/user-center-card/index.wxml b/scr/miniprogram-2/pages/usercenter/components/user-center-card/index.wxml new file mode 100644 index 0000000..17ebac5 --- /dev/null +++ b/scr/miniprogram-2/pages/usercenter/components/user-center-card/index.wxml @@ -0,0 +1,35 @@ + + + + + + {{'请登录'}} + + + + + + + {{userInfo.nickName || '微信用户'}} + + + + + + + + + + + + + {{userInfo.nickName || '微信用户'}} + + + + diff --git a/scr/miniprogram-2/pages/usercenter/components/user-center-card/index.wxss b/scr/miniprogram-2/pages/usercenter/components/user-center-card/index.wxss new file mode 100644 index 0000000..2b488c1 --- /dev/null +++ b/scr/miniprogram-2/pages/usercenter/components/user-center-card/index.wxss @@ -0,0 +1,48 @@ +.user-center-card { + position: fixed; + top: 0; + left: 0; + width: 100%; + height: 480rpx; + background-image: url('https://cdn-we-retail.ym.tencent.com/miniapp/template/user-center-bg-v1.png'); + background-size: cover; + background-repeat: no-repeat; + padding: 0 24rpx; +} +.user-center-card__header { + margin-top: 192rpx; + margin-bottom: 48rpx; + height: 96rpx; + line-height: 48rpx; + display: flex; + justify-content: flex-start; + align-items: center; + color: #333; + position: relative; +} +.user-center-card__header__avatar { + width: 96rpx; + height: 96rpx; + border-radius: 48rpx; + overflow: hidden; +} + +.user-center-card__header__name { + font-size: 36rpx; + line-height: 48rpx; + color: #333; + font-weight: bold; + margin-left: 24rpx; + margin-right: 16rpx; +} +.user-center-card__header__transparent { + position: absolute; + left: 0; + top: 0; + background-color: transparent; + height: 100%; + width: 100%; +} +.user-center-card__icon { + line-height: 96rpx; +} diff --git a/scr/miniprogram-2/pages/usercenter/index.js b/scr/miniprogram-2/pages/usercenter/index.js new file mode 100644 index 0000000..33a7d94 --- /dev/null +++ b/scr/miniprogram-2/pages/usercenter/index.js @@ -0,0 +1,240 @@ +import { fetchUserCenter } from '../../services/usercenter/fetchUsercenter'; +import Toast from 'tdesign-miniprogram/toast/index'; + +const menuData = [ + [ + { + title: '收货地址', + tit: '', + url: '', + type: 'address', + }, + { + title: '优惠券', + tit: '', + url: '', + type: 'coupon', + }, + { + title: '积分', + tit: '', + url: '', + type: 'point', + }, + ], + [ + { + title: '帮助中心', + tit: '', + url: '', + type: 'help-center', + }, + { + title: '客服热线', + tit: '', + url: '', + type: 'service', + icon: 'service', + }, + ], +]; + +const orderTagInfos = [ + { + title: '待付款', + iconName: 'wallet', + orderNum: 0, + tabType: 5, + status: 1, + }, + { + title: '待发货', + iconName: 'deliver', + orderNum: 0, + tabType: 10, + status: 1, + }, + { + title: '待收货', + iconName: 'package', + orderNum: 0, + tabType: 40, + status: 1, + }, + { + title: '待评价', + iconName: 'comment', + orderNum: 0, + tabType: 60, + status: 1, + }, + { + title: '退款/售后', + iconName: 'exchang', + orderNum: 0, + tabType: 0, + status: 1, + }, +]; + +const getDefaultData = () => ({ + showMakePhone: false, + userInfo: { + avatarUrl: '', + nickName: '正在登录...', + phoneNumber: '', + }, + menuData, + orderTagInfos, + customerServiceInfo: {}, + currAuthStep: 1, + showKefu: true, + versionNo: '', +}); + +Page({ + data: getDefaultData(), + + onLoad() { + this.getVersionInfo(); + }, + + onShow() { + this.getTabBar().init(); + this.init(); + }, + onPullDownRefresh() { + this.init(); + }, + + init() { + this.fetUseriInfoHandle(); + }, + + fetUseriInfoHandle() { + fetchUserCenter().then( + ({ + userInfo, + countsData, + orderTagInfos: orderInfo, + customerServiceInfo, + }) => { + // eslint-disable-next-line no-unused-expressions + menuData?.[0].forEach((v) => { + countsData.forEach((counts) => { + if (counts.type === v.type) { + // eslint-disable-next-line no-param-reassign + v.tit = counts.num; + } + }); + }); + const info = orderTagInfos.map((v, index) => ({ + ...v, + ...orderInfo[index], + })); + this.setData({ + userInfo, + menuData, + orderTagInfos: info, + customerServiceInfo, + currAuthStep: 2, + }); + wx.stopPullDownRefresh(); + }, + ); + }, + + onClickCell({ currentTarget }) { + const { type } = currentTarget.dataset; + + switch (type) { + case 'address': { + wx.navigateTo({ url: '/pages/usercenter/address/list/index' }); + break; + } + case 'service': { + this.openMakePhone(); + break; + } + case 'help-center': { + Toast({ + context: this, + selector: '#t-toast', + message: '你点击了帮助中心', + icon: '', + duration: 1000, + }); + break; + } + case 'point': { + Toast({ + context: this, + selector: '#t-toast', + message: '你点击了积分菜单', + icon: '', + duration: 1000, + }); + break; + } + case 'coupon': { + wx.navigateTo({ url: '/pages/coupon/coupon-list/index' }); + break; + } + default: { + Toast({ + context: this, + selector: '#t-toast', + message: '未知跳转', + icon: '', + duration: 1000, + }); + break; + } + } + }, + + jumpNav(e) { + const status = e.detail.tabType; + + if (status === 0) { + wx.navigateTo({ url: '/pages/order/after-service-list/index' }); + } else { + wx.navigateTo({ url: `/pages/order/order-list/index?status=${status}` }); + } + }, + + jumpAllOrder() { + wx.navigateTo({ url: '/pages/order/order-list/index' }); + }, + + openMakePhone() { + this.setData({ showMakePhone: true }); + }, + + closeMakePhone() { + this.setData({ showMakePhone: false }); + }, + + call() { + wx.makePhoneCall({ + phoneNumber: this.data.customerServiceInfo.servicePhone, + }); + }, + + gotoUserEditPage() { + const { currAuthStep } = this.data; + if (currAuthStep === 2) { + wx.navigateTo({ url: '/pages/usercenter/person-info/index' }); + } else { + this.fetUseriInfoHandle(); + } + }, + + getVersionInfo() { + const versionInfo = wx.getAccountInfoSync(); + const { version, envVersion = __wxConfig } = versionInfo.miniProgram; + this.setData({ + versionNo: envVersion === 'release' ? version : envVersion, + }); + }, +}); diff --git a/scr/miniprogram-2/pages/usercenter/index.json b/scr/miniprogram-2/pages/usercenter/index.json new file mode 100644 index 0000000..398a70b --- /dev/null +++ b/scr/miniprogram-2/pages/usercenter/index.json @@ -0,0 +1,14 @@ +{ + "navigationBarTitleText": "个人中心", + "navigationStyle": "custom", + "usingComponents": { + "t-popup": "tdesign-miniprogram/popup/popup", + "t-icon": "tdesign-miniprogram/icon/icon", + "t-cell-group": "tdesign-miniprogram/cell-group/cell-group", + "t-cell": "tdesign-miniprogram/cell/cell", + "t-user-center-card": "./components/user-center-card/index", + "t-order-group": "./components/order-group/index", + "t-toast": "tdesign-miniprogram/toast/toast" + }, + "enablePullDownRefresh": true +} \ No newline at end of file diff --git a/scr/miniprogram-2/pages/usercenter/index.wxml b/scr/miniprogram-2/pages/usercenter/index.wxml new file mode 100644 index 0000000..d71686d --- /dev/null +++ b/scr/miniprogram-2/pages/usercenter/index.wxml @@ -0,0 +1,53 @@ + + + + + + + + + + + + + +当前版本 {{versionNo}} + + + + 服务时间: {{customerServiceInfo.serviceTimeDuration}} + + 电话客服 + + 取消 + + + + diff --git a/scr/miniprogram-2/pages/usercenter/index.wxss b/scr/miniprogram-2/pages/usercenter/index.wxss new file mode 100644 index 0000000..483e6f2 --- /dev/null +++ b/scr/miniprogram-2/pages/usercenter/index.wxss @@ -0,0 +1,146 @@ +page { + background-color: #f5f5f5; +} + +.content-wrapper { + margin-top: 340rpx; + position: relative; + padding: 0 30rpx; +} + +.main-content { + height: 500rpx; +} + +.order-group-wrapper { + margin-bottom: 16rpx; +} + +.order-group-note { + font-size: 28rpx; +} + +.cell-box { + border-radius: 10rpx; + overflow: hidden; + margin-bottom: 20rpx; +} +.icon-color { + color: #aaa; +} +.cell-class { + height: 100rpx; + display: flex; + align-items: center; +} + +.order-content { + overflow: hidden; + width: 100%; + display: flex; + background-color: #fff; + border-radius: 16rpx; +} + +.order-item { + flex: 1; + height: 180rpx; + overflow: hidden; + position: relative; + text-align: center; +} + +.order-content-box { + margin: auto; + position: absolute; + width: 100%; + top: 50%; + left: 50%; + -webkit-transform: translate(-50%, -50%); + -ms-transform: translate(-50%, -50%); + transform: translate(-50%, -50%); +} +.order-content-t { + margin-top: 10rpx; + font-size: 24rpx; + color: #333; + letter-spacing: 0; + text-align: center; +} + +.popup-content { + background: #f5f5f5; + margin-bottom: env(safe-area-inset-bottom); + border-radius: 16rpx 16rpx 0 0; +} +.popup-content .popup-title { + background: #fff; + text-align: center; + font-size: 24rpx; + color: #999; + height: 112rpx; + text-align: center; + line-height: 112rpx; + border-radius: 16rpx 16rpx 0 0; +} + +.border-bottom-1px { + position: relative; +} + +.border-bottom-1px::after { + position: absolute; + display: block; + content: ''; + box-sizing: border-box; + top: 0; + left: 0; + width: 200%; + height: 200%; + transform: scale(0.5); + transform-origin: left top; + border-bottom: 2rpx solid #e5e5e5; +} +.popup-content .popup-phone, +.popup-content .popup-close { + background: #fff; + height: 100rpx; + display: flex; + justify-content: center; + align-items: center; + text-align: center; + font-size: 30rpx; + font-family: PingFangSC-Regular, PingFang SC; + font-weight: 400; + color: #333; +} +.popup-content .popup-phone.online { + margin-bottom: 20rpx; +} +.popup-content .popup-phone.online::after { + content: none; +} +.popup-content .popup-close { + color: #333; + border: 0; + margin-top: 16rpx; +} + +.my-order { + border-radius: 10rpx; +} + +.footer__version { + text-align: center; + margin-top: 50rpx; + color: #999; + margin-bottom: 4rpx; + font-size: 24rpx; + line-height: 32rpx; +} +.cell-box .order-group__left { + margin-right: 0; +} +.cell-box .t-cell-padding { + padding: 24rpx 18rpx 24rpx 32rpx; +} diff --git a/scr/miniprogram-2/pages/usercenter/name-edit/index.js b/scr/miniprogram-2/pages/usercenter/name-edit/index.js new file mode 100644 index 0000000..57e4e3d --- /dev/null +++ b/scr/miniprogram-2/pages/usercenter/name-edit/index.js @@ -0,0 +1,19 @@ +Page({ + data: { + nameValue: '', + }, + onLoad(options) { + const { name } = options; + this.setData({ + nameValue: name, + }); + }, + onSubmit() { + wx.navigateBack({ backRefresh: true }); + }, + clearContent() { + this.setData({ + nameValue: '', + }); + }, +}); diff --git a/scr/miniprogram-2/pages/usercenter/name-edit/index.json b/scr/miniprogram-2/pages/usercenter/name-edit/index.json new file mode 100644 index 0000000..efc7e5f --- /dev/null +++ b/scr/miniprogram-2/pages/usercenter/name-edit/index.json @@ -0,0 +1,8 @@ +{ + "navigationBarTitleText": "昵称", + "usingComponents": { + "t-input": "tdesign-miniprogram/input/input", + "t-icon": "tdesign-miniprogram/icon/icon", + "t-button": "tdesign-miniprogram/button/button" + } +} diff --git a/scr/miniprogram-2/pages/usercenter/name-edit/index.wxml b/scr/miniprogram-2/pages/usercenter/name-edit/index.wxml new file mode 100644 index 0000000..0366a88 --- /dev/null +++ b/scr/miniprogram-2/pages/usercenter/name-edit/index.wxml @@ -0,0 +1,16 @@ + + + + 最多可输入15个字 + + + 保存 + + + diff --git a/scr/miniprogram-2/pages/usercenter/name-edit/index.wxss b/scr/miniprogram-2/pages/usercenter/name-edit/index.wxss new file mode 100644 index 0000000..ef4b048 --- /dev/null +++ b/scr/miniprogram-2/pages/usercenter/name-edit/index.wxss @@ -0,0 +1,26 @@ +page { + background-color: #f5f5f5; +} +page view { + box-sizing: border-box; +} +.name-edit { + padding-top: 20rpx; +} +.name-edit .name-edit__input--desc { + font-size: 26rpx; + padding: 16rpx 32rpx; + color: #999; + margin-bottom: 200rpx; +} +.name-edit .name-edit__wrapper { + width: 100%; + padding: 0 32rpx; +} +.name-edit .name-edit__btn { + height: 88rpx; + width: 100%; + background: #fa4126; + color: #fff; + border-radius: 48rpx; +} diff --git a/scr/miniprogram-2/pages/usercenter/person-info/index.js b/scr/miniprogram-2/pages/usercenter/person-info/index.js new file mode 100644 index 0000000..48fed27 --- /dev/null +++ b/scr/miniprogram-2/pages/usercenter/person-info/index.js @@ -0,0 +1,122 @@ +import { fetchPerson } from '../../../services/usercenter/fetchPerson'; +import { phoneEncryption } from '../../../utils/util'; +import Toast from 'tdesign-miniprogram/toast/index'; + +Page({ + data: { + personInfo: { + avatarUrl: '', + nickName: '', + gender: 0, + phoneNumber: '', + }, + showUnbindConfirm: false, + pickerOptions: [ + { + name: '男', + code: '1', + }, + { + name: '女', + code: '2', + }, + ], + typeVisible: false, + genderMap: ['', '男', '女'], + }, + onLoad() { + this.init(); + }, + init() { + this.fetchData(); + }, + fetchData() { + fetchPerson().then((personInfo) => { + this.setData({ + personInfo, + 'personInfo.phoneNumber': phoneEncryption(personInfo.phoneNumber), + }); + }); + }, + onClickCell({ currentTarget }) { + const { dataset } = currentTarget; + const { nickName } = this.data.personInfo; + + switch (dataset.type) { + case 'gender': + this.setData({ + typeVisible: true, + }); + break; + case 'name': + wx.navigateTo({ + url: `/pages/usercenter/name-edit/index?name=${nickName}`, + }); + break; + case 'avatarUrl': + this.toModifyAvatar(); + break; + default: { + break; + } + } + }, + onClose() { + this.setData({ + typeVisible: false, + }); + }, + onConfirm(e) { + const { value } = e.detail; + this.setData( + { + typeVisible: false, + 'personInfo.gender': value, + }, + () => { + Toast({ + context: this, + selector: '#t-toast', + message: '设置成功', + theme: 'success', + }); + }, + ); + }, + async toModifyAvatar() { + try { + const tempFilePath = await new Promise((resolve, reject) => { + wx.chooseImage({ + count: 1, + sizeType: ['compressed'], + sourceType: ['album', 'camera'], + success: (res) => { + const { path, size } = res.tempFiles[0]; + if (size <= 10485760) { + resolve(path); + } else { + reject({ errMsg: '图片大小超出限制,请重新上传' }); + } + }, + fail: (err) => reject(err), + }); + }); + const tempUrlArr = tempFilePath.split('/'); + const tempFileName = tempUrlArr[tempUrlArr.length - 1]; + Toast({ + context: this, + selector: '#t-toast', + message: `已选择图片-${tempFileName}`, + theme: 'success', + }); + } catch (error) { + if (error.errMsg === 'chooseImage:fail cancel') return; + Toast({ + context: this, + selector: '#t-toast', + message: error.errMsg || error.msg || '修改头像出错了', + theme: 'fail', + }); + } + }, +}); diff --git a/scr/miniprogram-2/pages/usercenter/person-info/index.json b/scr/miniprogram-2/pages/usercenter/person-info/index.json new file mode 100644 index 0000000..e63dcc5 --- /dev/null +++ b/scr/miniprogram-2/pages/usercenter/person-info/index.json @@ -0,0 +1,12 @@ +{ + "navigationBarTitleText": "个人资料", + "usingComponents": { + "t-cell-group": "tdesign-miniprogram/cell-group/cell-group", + "t-cell": "tdesign-miniprogram/cell/cell", + "t-button": "tdesign-miniprogram/button/button", + "t-image": "/components/webp-image/index", + "t-dialog": "tdesign-miniprogram/dialog/dialog", + "t-toast": "tdesign-miniprogram/toast/toast", + "t-select-picker": "../components/ui-select-picker/index" + } +} \ No newline at end of file diff --git a/scr/miniprogram-2/pages/usercenter/person-info/index.wxml b/scr/miniprogram-2/pages/usercenter/person-info/index.wxml new file mode 100644 index 0000000..2e460b1 --- /dev/null +++ b/scr/miniprogram-2/pages/usercenter/person-info/index.wxml @@ -0,0 +1,59 @@ + + + + + + + + + + + 切换账号登录 + + + + + diff --git a/scr/miniprogram-2/pages/usercenter/person-info/index.wxss b/scr/miniprogram-2/pages/usercenter/person-info/index.wxss new file mode 100644 index 0000000..e1b5ea1 --- /dev/null +++ b/scr/miniprogram-2/pages/usercenter/person-info/index.wxss @@ -0,0 +1,41 @@ +:host { + background-color: #f5f5f5; +} +page view { + box-sizing: border-box; +} +.person-info__btn { + width: 100%; + border: 2rpx solid #ddd; + border-radius: 48rpx; + padding: 18rpx 0; + display: flex; + align-self: center; + justify-content: center; +} +.person-info__wrapper { + width: 100%; + padding: 0 32rpx; + padding-bottom: calc(env(safe-area-inset-bottom) + 20rpx); + position: absolute; + bottom: 0; + left: 0; +} + +.avatarUrl { + width: 80rpx; + height: 80rpx; + border-radius: 50%; + overflow: hidden; +} + +.t-class-confirm { + color: #fa550f !important; +} + +.person-info .order-group__left { + margin-right: 0; +} +.person-info .t-cell-class { + height: 112rpx; +} diff --git a/scr/miniprogram-2/project.config.json b/scr/miniprogram-2/project.config.json new file mode 100644 index 0000000..215bb1d --- /dev/null +++ b/scr/miniprogram-2/project.config.json @@ -0,0 +1,140 @@ +{ + "description": "项目配置文件,详见文档:https://developers.weixin.qq.com/miniprogram/dev/devtools/projectconfig.html", + "packOptions": { + "ignore": [], + "include": [] + }, + "setting": { + "urlCheck": true, + "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, + "useApiHook": true, + "useApiHostProcess": true, + "babelSetting": { + "ignore": [], + "disablePlugins": [], + "outputPath": "" + }, + "useIsolateContext": false, + "userConfirmedBundleSwitch": false, + "packNpmManually": false, + "packNpmRelationList": [], + "minifyWXSS": true, + "disableUseStrict": false, + "minifyWXML": true, + "showES6CompileOption": false, + "useCompilerPlugins": false, + "ignoreUploadUnusedFiles": true, + "ignoreDevUnusedFiles": false + }, + "compileType": "miniprogram", + "libVersion": "2.23.1", + "projectname": "外卖", + "simulatorType": "wechat", + "simulatorPluginLibVersion": {}, + "editorSetting": { + "tabIndent": "insertSpaces", + "tabSize": 2 + }, + "appid": "wxcc745ea897810e52", + "condition": { + "miniprogram": { + "list": [ + { + "name": "首页入口", + "pathName": "pages/home/home", + "query": "", + "scene": null + }, + { + "name": "示例页-商品分类", + "pathName": "pages/goods/category/index", + "query": "", + "scene": null + }, + { + "name": "示例页-个人中心", + "pathName": "pages/usercenter/index", + "query": "", + "scene": null + }, + { + "name": "示例页-商品列表", + "pathName": "pages/goods/list/index", + "query": "", + "scene": null + }, + { + "name": "示例页-商品详情", + "pathName": "pages/goods/details/index", + "query": "", + "scene": null + }, + { + "name": "示例页-商品评论", + "pathName": "pages/goods/comments/index", + "query": "", + "scene": null + }, + { + "name": "示例页-售后列表", + "pathName": "pages/order/after-service-list/index", + "query": "", + "scene": null + }, + { + "name": "示例页-售后详情", + "pathName": "pages/order/after-service-detail/index", + "query": "rightsNo=123123423", + "scene": null + }, + { + "name": "示例页-搜索页", + "pathName": "pages/goods/search/index", + "query": "", + "scene": null + }, + { + "name": "示例页-搜索结果", + "pathName": "pages/goods/result/index", + "query": "", + "scene": null + }, + { + "name": "示例页-商品评价", + "pathName": "pages/goods/comments/create/index", + "query": "", + "scene": null + }, + { + "name": "示例页-申请售后", + "pathName": "pages/order/apply-service/index", + "query": "orderNo=132222623132329291&skuId=135691625", + "scene": null + }, + { + "name": "示例页-发票详情", + "pathName": "pages/order/invoice/index", + "query": "orderNo=132381532610540875", + "scene": null + } + ] + } + } +} \ No newline at end of file diff --git a/scr/miniprogram-2/services/_utils/delay.js b/scr/miniprogram-2/services/_utils/delay.js new file mode 100644 index 0000000..da4ad62 --- /dev/null +++ b/scr/miniprogram-2/services/_utils/delay.js @@ -0,0 +1,3 @@ +export function delay(ms = 200) { + return new Promise((resolve) => setTimeout(resolve, ms)); +} diff --git a/scr/miniprogram-2/services/_utils/timeout.js b/scr/miniprogram-2/services/_utils/timeout.js new file mode 100644 index 0000000..870c2bf --- /dev/null +++ b/scr/miniprogram-2/services/_utils/timeout.js @@ -0,0 +1,3 @@ +export function timeout(ms = 1000) { + return new Promise((_, reject) => setTimeout(reject, ms)); +} diff --git a/scr/miniprogram-2/services/activity/fetchActivity.js b/scr/miniprogram-2/services/activity/fetchActivity.js new file mode 100644 index 0000000..e9aefa6 --- /dev/null +++ b/scr/miniprogram-2/services/activity/fetchActivity.js @@ -0,0 +1,20 @@ +import { config } from '../../config/index'; + +/** 获取活动列表 */ +function mockFetchActivity(ID = 0) { + const { delay } = require('../_utils/delay'); + const { getActivity } = require('../../model/activity'); + + return delay().then(() => getActivity(ID)); +} + +/** 获取活动列表 */ +export function fetchActivity(ID = 0) { + if (config.useMock) { + return mockFetchActivity(ID); + } + + return new Promise((resolve) => { + resolve('real api'); + }); +} diff --git a/scr/miniprogram-2/services/activity/fetchActivityList.js b/scr/miniprogram-2/services/activity/fetchActivityList.js new file mode 100644 index 0000000..2522aff --- /dev/null +++ b/scr/miniprogram-2/services/activity/fetchActivityList.js @@ -0,0 +1,20 @@ +import { config } from '../../config/index'; + +/** 获取活动列表 */ +function mockFetchActivityList(pageIndex = 1, pageSize = 20) { + const { delay } = require('../_utils/delay'); + const { getActivityList } = require('../../model/activities'); + + return delay().then(() => getActivityList(pageIndex, pageSize)); +} + +/** 获取活动列表 */ +export function fetchActivityList(pageIndex = 1, pageSize = 20) { + if (config.useMock) { + return mockFetchActivityList(pageIndex, pageSize); + } + + return new Promise((resolve) => { + resolve('real api'); + }); +} diff --git a/scr/miniprogram-2/services/address/fetchAddress.js b/scr/miniprogram-2/services/address/fetchAddress.js new file mode 100644 index 0000000..9525ab0 --- /dev/null +++ b/scr/miniprogram-2/services/address/fetchAddress.js @@ -0,0 +1,48 @@ +import { config } from '../../config/index'; + +/** 获取收货地址 */ +function mockFetchDeliveryAddress(id) { + const { delay } = require('../_utils/delay'); + const { genAddress } = require('../../model/address'); + + return delay().then(() => genAddress(id)); +} + +/** 获取收货地址 */ +export function fetchDeliveryAddress(id = 0) { + if (config.useMock) { + return mockFetchDeliveryAddress(id); + } + + return new Promise((resolve) => { + resolve('real api'); + }); +} + +/** 获取收货地址列表 */ +function mockFetchDeliveryAddressList(len = 0) { + const { delay } = require('../_utils/delay'); + const { genAddressList } = require('../../model/address'); + + return delay().then(() => + genAddressList(len).map((address) => { + return { + ...address, + phoneNumber: address.phone, + address: `${address.provinceName}${address.cityName}${address.districtName}${address.detailAddress}`, + tag: address.addressTag, + }; + }), + ); +} + +/** 获取收货地址列表 */ +export function fetchDeliveryAddressList(len = 10) { + if (config.useMock) { + return mockFetchDeliveryAddressList(len); + } + + return new Promise((resolve) => { + resolve('real api'); + }); +} diff --git a/scr/miniprogram-2/services/cart/cart.js b/scr/miniprogram-2/services/cart/cart.js new file mode 100644 index 0000000..d42f959 --- /dev/null +++ b/scr/miniprogram-2/services/cart/cart.js @@ -0,0 +1,20 @@ +import { config } from '../../config/index'; + +/** 获取购物车mock数据 */ +function mockFetchCartGroupData(params) { + const { delay } = require('../_utils/delay'); + const { genCartGroupData } = require('../../model/cart'); + + return delay().then(() => genCartGroupData(params)); +} + +/** 获取购物车数据 */ +export function fetchCartGroupData(params) { + if (config.useMock) { + return mockFetchCartGroupData(params); + } + + return new Promise((resolve) => { + resolve('real api'); + }); +} diff --git a/scr/miniprogram-2/services/comments/fetchComments.js b/scr/miniprogram-2/services/comments/fetchComments.js new file mode 100644 index 0000000..9bd1155 --- /dev/null +++ b/scr/miniprogram-2/services/comments/fetchComments.js @@ -0,0 +1,18 @@ +import { config } from '../../config/index'; + +/** 获取商品评论 */ +function mockFetchComments(parmas) { + const { delay } = require('../_utils/delay'); + const { getGoodsAllComments } = require('../../model/comments'); + return delay().then(() => getGoodsAllComments(parmas)); +} + +/** 获取商品评论 */ +export function fetchComments(parmas) { + if (config.useMock) { + return mockFetchComments(parmas); + } + return new Promise((resolve) => { + resolve('real api'); + }); +} diff --git a/scr/miniprogram-2/services/comments/fetchCommentsCount.js b/scr/miniprogram-2/services/comments/fetchCommentsCount.js new file mode 100644 index 0000000..cbb09d0 --- /dev/null +++ b/scr/miniprogram-2/services/comments/fetchCommentsCount.js @@ -0,0 +1,18 @@ +import { config } from '../../config/index'; + +/** 获取商品评论数 */ +function mockFetchCommentsCount(ID = 0) { + const { delay } = require('../_utils/delay'); + const { getGoodsCommentsCount } = require('../../model/comments'); + return delay().then(() => getGoodsCommentsCount(ID)); +} + +/** 获取商品评论数 */ +export function fetchCommentsCount(ID = 0) { + if (config.useMock) { + return mockFetchCommentsCount(ID); + } + return new Promise((resolve) => { + resolve('real api'); + }); +} diff --git a/scr/miniprogram-2/services/coupon/index.js b/scr/miniprogram-2/services/coupon/index.js new file mode 100644 index 0000000..a0010e0 --- /dev/null +++ b/scr/miniprogram-2/services/coupon/index.js @@ -0,0 +1,65 @@ +import { config } from '../../config/index'; + +/** 获取优惠券列表 */ +function mockFetchCoupon(status) { + const { delay } = require('../_utils/delay'); + const { getCouponList } = require('../../model/coupon'); + return delay().then(() => getCouponList(status)); +} + +/** 获取优惠券列表 */ +export function fetchCouponList(status = 'default') { + if (config.useMock) { + return mockFetchCoupon(status); + } + return new Promise((resolve) => { + resolve('real api'); + }); +} + +/** 获取优惠券 详情 */ +function mockFetchCouponDetail(id, status) { + const { delay } = require('../_utils/delay'); + const { getCoupon } = require('../../model/coupon'); + const { genAddressList } = require('../../model/address'); + + return delay().then(() => { + const result = { + detail: getCoupon(id, status), + storeInfoList: genAddressList(), + }; + + result.detail.useNotes = `1个订单限用1张,除运费券外,不能与其它类型的优惠券叠加使用(运费券除外)\n2.仅适用于各区域正常售卖商品,不支持团购、抢购、预售类商品`; + result.detail.storeAdapt = `商城通用`; + + if (result.detail.type === 'price') { + result.detail.desc = `减免 ${result.detail.value / 100} 元`; + + if (result.detail.base) { + result.detail.desc += `,满${result.detail.base / 100}元可用`; + } + + result.detail.desc += '。'; + } else if (result.detail.type === 'discount') { + result.detail.desc = `${result.detail.value}折`; + + if (result.detail.base) { + result.detail.desc += `,满${result.detail.base / 100}元可用`; + } + + result.detail.desc += '。'; + } + + return result; + }); +} + +/** 获取优惠券 详情 */ +export function fetchCouponDetail(id, status = 'default') { + if (config.useMock) { + return mockFetchCouponDetail(id, status); + } + return new Promise((resolve) => { + resolve('real api'); + }); +} diff --git a/scr/miniprogram-2/services/good/comments/fetchCommentDetail.js b/scr/miniprogram-2/services/good/comments/fetchCommentDetail.js new file mode 100644 index 0000000..fce338d --- /dev/null +++ b/scr/miniprogram-2/services/good/comments/fetchCommentDetail.js @@ -0,0 +1,20 @@ +import { config } from '../../../config/index'; +import { queryCommentDetail } from '../../../model/comments/queryDetail'; +/** 获取商品评价数据 */ +function mockQueryCommentDetail(params) { + const { delay } = require('../../_utils/delay'); + const data = queryCommentDetail(params); + return delay().then(() => { + return data; + }); +} + +/** 获取评价详情 */ +export function getCommentDetail(params) { + if (config.useMock) { + return mockQueryCommentDetail(params); + } + return new Promise((resolve) => { + resolve('real api'); + }); +} diff --git a/scr/miniprogram-2/services/good/featchSearchResult.js b/scr/miniprogram-2/services/good/featchSearchResult.js new file mode 100644 index 0000000..5b42851 --- /dev/null +++ b/scr/miniprogram-2/services/good/featchSearchResult.js @@ -0,0 +1,38 @@ +/* eslint-disable no-param-reassign */ +import { config } from '../../config/index'; + +/** 获取搜索历史 */ +function mockSearchResult(params) { + const { delay } = require('../_utils/delay'); + const { getSearchResult } = require('../../model/search'); + + const data = getSearchResult(params); + + if (data.spuList.length) { + data.spuList.forEach((item) => { + item.spuId = item.spuId; + item.thumb = item.primaryImage; + item.title = item.title; + item.price = item.minSalePrice; + item.originPrice = item.maxLinePrice; + if (item.spuTagList) { + item.tags = item.spuTagList.map((tag) => ({ title: tag.title })); + } else { + item.tags = []; + } + }); + } + return delay().then(() => { + return data; + }); +} + +/** 获取搜索历史 */ +export function getSearchResult(params) { + if (config.useMock) { + return mockSearchResult(params); + } + return new Promise((resolve) => { + resolve('real api'); + }); +} diff --git a/scr/miniprogram-2/services/good/fetchCategoryList.js b/scr/miniprogram-2/services/good/fetchCategoryList.js new file mode 100644 index 0000000..adf6ba4 --- /dev/null +++ b/scr/miniprogram-2/services/good/fetchCategoryList.js @@ -0,0 +1,18 @@ +import { config } from '../../config/index'; + +/** 获取商品列表 */ +function mockFetchGoodCategory() { + const { delay } = require('../_utils/delay'); + const { getCategoryList } = require('../../model/category'); + return delay().then(() => getCategoryList()); +} + +/** 获取商品列表 */ +export function getCategoryList() { + if (config.useMock) { + return mockFetchGoodCategory(); + } + return new Promise((resolve) => { + resolve('real api'); + }); +} diff --git a/scr/miniprogram-2/services/good/fetchGood.js b/scr/miniprogram-2/services/good/fetchGood.js new file mode 100644 index 0000000..7a196d4 --- /dev/null +++ b/scr/miniprogram-2/services/good/fetchGood.js @@ -0,0 +1,18 @@ +import { config } from '../../config/index'; + +/** 获取商品列表 */ +function mockFetchGood(ID = 0) { + const { delay } = require('../_utils/delay'); + const { genGood } = require('../../model/good'); + return delay().then(() => genGood(ID)); +} + +/** 获取商品列表 */ +export function fetchGood(ID = 0) { + if (config.useMock) { + return mockFetchGood(ID); + } + return new Promise((resolve) => { + resolve('real api'); + }); +} diff --git a/scr/miniprogram-2/services/good/fetchGoods.js b/scr/miniprogram-2/services/good/fetchGoods.js new file mode 100644 index 0000000..16618c8 --- /dev/null +++ b/scr/miniprogram-2/services/good/fetchGoods.js @@ -0,0 +1,29 @@ +import { config } from '../../config/index'; + +/** 获取商品列表 */ +function mockFetchGoodsList(pageIndex = 1, pageSize = 20) { + const { delay } = require('../_utils/delay'); + const { getGoodsList } = require('../../model/goods'); + return delay().then(() => + getGoodsList(pageIndex, pageSize).map((item) => { + return { + spuId: item.spuId, + thumb: item.primaryImage, + title: item.title, + price: item.minSalePrice, + originPrice: item.maxLinePrice, + tags: item.spuTagList.map((tag) => tag.title), + }; + }), + ); +} + +/** 获取商品列表 */ +export function fetchGoodsList(pageIndex = 1, pageSize = 20) { + if (config.useMock) { + return mockFetchGoodsList(pageIndex, pageSize); + } + return new Promise((resolve) => { + resolve('real api'); + }); +} diff --git a/scr/miniprogram-2/services/good/fetchGoodsDetailsComments.js b/scr/miniprogram-2/services/good/fetchGoodsDetailsComments.js new file mode 100644 index 0000000..95a11c4 --- /dev/null +++ b/scr/miniprogram-2/services/good/fetchGoodsDetailsComments.js @@ -0,0 +1,37 @@ +import { config } from '../../config/index'; + +/** 获取商品详情页评论数 */ +function mockFetchGoodDetailsCommentsCount(spuId = 0) { + const { delay } = require('../_utils/delay'); + const { + getGoodsDetailsCommentsCount, + } = require('../../model/detailsComments'); + return delay().then(() => getGoodsDetailsCommentsCount(spuId)); +} + +/** 获取商品详情页评论数 */ +export function getGoodsDetailsCommentsCount(spuId = 0) { + if (config.useMock) { + return mockFetchGoodDetailsCommentsCount(spuId); + } + return new Promise((resolve) => { + resolve('real api'); + }); +} + +/** 获取商品详情页评论 */ +function mockFetchGoodDetailsCommentList(spuId = 0) { + const { delay } = require('../_utils/delay'); + const { getGoodsDetailsComments } = require('../../model/detailsComments'); + return delay().then(() => getGoodsDetailsComments(spuId)); +} + +/** 获取商品详情页评论 */ +export function getGoodsDetailsCommentList(spuId = 0) { + if (config.useMock) { + return mockFetchGoodDetailsCommentList(spuId); + } + return new Promise((resolve) => { + resolve('real api'); + }); +} diff --git a/scr/miniprogram-2/services/good/fetchGoodsList.js b/scr/miniprogram-2/services/good/fetchGoodsList.js new file mode 100644 index 0000000..1650b9b --- /dev/null +++ b/scr/miniprogram-2/services/good/fetchGoodsList.js @@ -0,0 +1,39 @@ +/* eslint-disable no-param-reassign */ +import { config } from '../../config/index'; + +/** 获取商品列表 */ +function mockFetchGoodsList(params) { + const { delay } = require('../_utils/delay'); + const { getSearchResult } = require('../../model/search'); + + const data = getSearchResult(params); + + if (data.spuList.length) { + data.spuList.forEach((item) => { + item.spuId = item.spuId; + item.thumb = item.primaryImage; + item.title = item.title; + item.price = item.minSalePrice; + item.originPrice = item.maxLinePrice; + item.desc = ''; + if (item.spuTagList) { + item.tags = item.spuTagList.map((tag) => tag.title); + } else { + item.tags = []; + } + }); + } + return delay().then(() => { + return data; + }); +} + +/** 获取商品列表 */ +export function fetchGoodsList(params) { + if (config.useMock) { + return mockFetchGoodsList(params); + } + return new Promise((resolve) => { + resolve('real api'); + }); +} diff --git a/scr/miniprogram-2/services/good/fetchSearchHistory.js b/scr/miniprogram-2/services/good/fetchSearchHistory.js new file mode 100644 index 0000000..3a73963 --- /dev/null +++ b/scr/miniprogram-2/services/good/fetchSearchHistory.js @@ -0,0 +1,35 @@ +import { config } from '../../config/index'; + +/** 获取搜索历史 */ +function mockSearchHistory() { + const { delay } = require('../_utils/delay'); + const { getSearchHistory } = require('../../model/search'); + return delay().then(() => getSearchHistory()); +} + +/** 获取搜索历史 */ +export function getSearchHistory() { + if (config.useMock) { + return mockSearchHistory(); + } + return new Promise((resolve) => { + resolve('real api'); + }); +} + +/** 获取搜索历史 */ +function mockSearchPopular() { + const { delay } = require('../_utils/delay'); + const { getSearchPopular } = require('../../model/search'); + return delay().then(() => getSearchPopular()); +} + +/** 获取搜索历史 */ +export function getSearchPopular() { + if (config.useMock) { + return mockSearchPopular(); + } + return new Promise((resolve) => { + resolve('real api'); + }); +} diff --git a/scr/miniprogram-2/services/home/home.js b/scr/miniprogram-2/services/home/home.js new file mode 100644 index 0000000..17096b5 --- /dev/null +++ b/scr/miniprogram-2/services/home/home.js @@ -0,0 +1,54 @@ +import { + config, + cdnBase +} from '../../config/index'; + +/** 获取首页数据 */ +function mockFetchHome() { + const { + delay + } = require('../_utils/delay'); + const { + genSwiperImageList + } = require('../../model/swiper'); + return delay().then(() => { + return { + swiper: genSwiperImageList(), + tabList: [{ + text: '精选推荐', + key: 0, + }, + { + text: '家常炒菜', + key: 1, + }, + { + text: '火锅烧烤', + key: 2, + }, + { + text: '汉堡西餐', + key: 3, + }, + { + text: '甜品饮品', + key: 4, + }, + + + + ], + activityImg: `${cdnBase}/activity/banner.png`, + }; + }); +} + +/** 获取首页数据 */ +export function fetchHome() { + if (config.useMock) { + return mockFetchHome(); + } + return new Promise((resolve) => { + resolve('real api'); + }); +} \ No newline at end of file diff --git a/scr/miniprogram-2/services/order/applyService.js b/scr/miniprogram-2/services/order/applyService.js new file mode 100644 index 0000000..c66930a --- /dev/null +++ b/scr/miniprogram-2/services/order/applyService.js @@ -0,0 +1,70 @@ +import { config } from '../../config/index'; + +/** 获取售后单mock数据 */ +function mockFetchRightsPreview(params) { + const { delay } = require('../_utils/delay'); + const { genRightsPreview } = require('../../model/order/applyService'); + + return delay().then(() => genRightsPreview(params)); +} + +/** 获取售后单数据 */ +export function fetchRightsPreview(params) { + if (config.useMock) { + return mockFetchRightsPreview(params); + } + + return new Promise((resolve) => { + resolve('real api'); + }); +} + +/** 确认收货 */ +export function dispatchConfirmReceived() { + if (config.useMock) { + const { delay } = require('../_utils/delay'); + return delay(); + } + + return new Promise((resolve) => { + resolve('real api'); + }); +} + +/** 获取可选的mock售后原因列表 */ +function mockFetchApplyReasonList(params) { + const { delay } = require('../_utils/delay'); + const { genApplyReasonList } = require('../../model/order/applyService'); + + return delay().then(() => genApplyReasonList(params)); +} + +/** 获取可选的售后原因列表 */ +export function fetchApplyReasonList(params) { + if (config.useMock) { + return mockFetchApplyReasonList(params); + } + + return new Promise((resolve) => { + resolve('real api'); + }); +} + +/** 发起mock售后申请 */ +function mockDispatchApplyService(params) { + const { delay } = require('../_utils/delay'); + const { applyService } = require('../../model/order/applyService'); + + return delay().then(() => applyService(params)); +} + +/** 发起售后申请 */ +export function dispatchApplyService(params) { + if (config.useMock) { + return mockDispatchApplyService(params); + } + + return new Promise((resolve) => { + resolve('real api'); + }); +} diff --git a/scr/miniprogram-2/services/order/orderConfirm.js b/scr/miniprogram-2/services/order/orderConfirm.js new file mode 100644 index 0000000..4d34744 --- /dev/null +++ b/scr/miniprogram-2/services/order/orderConfirm.js @@ -0,0 +1,69 @@ +import { config } from '../../config/index'; +import { mockIp, mockReqId } from '../../utils/mock'; + +/** 获取结算mock数据 */ +function mockFetchSettleDetail(params) { + const { delay } = require('../_utils/delay'); + const { genSettleDetail } = require('../../model/order/orderConfirm'); + + return delay().then(() => genSettleDetail(params)); +} + +/** 提交mock订单 */ +function mockDispatchCommitPay() { + const { delay } = require('../_utils/delay'); + + return delay().then(() => ({ + data: { + isSuccess: true, + tradeNo: '350930961469409099', + payInfo: '{}', + code: null, + transactionId: 'E-200915180100299000', + msg: null, + interactId: '15145', + channel: 'wechat', + limitGoodsList: null, + }, + code: 'Success', + msg: null, + requestId: mockReqId(), + clientIp: mockIp(), + rt: 891, + success: true, + })); +} + +/** 获取结算数据 */ +export function fetchSettleDetail(params) { + if (config.useMock) { + return mockFetchSettleDetail(params); + } + + return new Promise((resolve) => { + resolve('real api'); + }); +} + +/* 提交订单 */ +export function dispatchCommitPay(params) { + if (config.useMock) { + return mockDispatchCommitPay(params); + } + + return new Promise((resolve) => { + resolve('real api'); + }); +} + +/** 开发票 */ +export function dispatchSupplementInvoice() { + if (config.useMock) { + const { delay } = require('../_utils/delay'); + return delay(); + } + + return new Promise((resolve) => { + resolve('real api'); + }); +} diff --git a/scr/miniprogram-2/services/order/orderDetail.js b/scr/miniprogram-2/services/order/orderDetail.js new file mode 100644 index 0000000..3e7d797 --- /dev/null +++ b/scr/miniprogram-2/services/order/orderDetail.js @@ -0,0 +1,39 @@ +import { config } from '../../config/index'; + +/** 获取订单详情mock数据 */ +function mockFetchOrderDetail(params) { + const { delay } = require('../_utils/delay'); + const { genOrderDetail } = require('../../model/order/orderDetail'); + + return delay().then(() => genOrderDetail(params)); +} + +/** 获取订单详情数据 */ +export function fetchOrderDetail(params) { + if (config.useMock) { + return mockFetchOrderDetail(params); + } + + return new Promise((resolve) => { + resolve('real api'); + }); +} + +/** 获取客服mock数据 */ +function mockFetchBusinessTime(params) { + const { delay } = require('../_utils/delay'); + const { genBusinessTime } = require('../../model/order/orderDetail'); + + return delay().then(() => genBusinessTime(params)); +} + +/** 获取客服数据 */ +export function fetchBusinessTime(params) { + if (config.useMock) { + return mockFetchBusinessTime(params); + } + + return new Promise((resolve) => { + resolve('real api'); + }); +} diff --git a/scr/miniprogram-2/services/order/orderList.js b/scr/miniprogram-2/services/order/orderList.js new file mode 100644 index 0000000..f4a9e7a --- /dev/null +++ b/scr/miniprogram-2/services/order/orderList.js @@ -0,0 +1,39 @@ +import { config } from '../../config/index'; + +/** 获取订单列表mock数据 */ +function mockFetchOrders(params) { + const { delay } = require('../_utils/delay'); + const { genOrders } = require('../../model/order/orderList'); + + return delay(200).then(() => genOrders(params)); +} + +/** 获取订单列表数据 */ +export function fetchOrders(params) { + if (config.useMock) { + return mockFetchOrders(params); + } + + return new Promise((resolve) => { + resolve('real api'); + }); +} + +/** 获取订单列表mock数据 */ +function mockFetchOrdersCount(params) { + const { delay } = require('../_utils/delay'); + const { genOrdersCount } = require('../../model/order/orderList'); + + return delay().then(() => genOrdersCount(params)); +} + +/** 获取订单列表统计 */ +export function fetchOrdersCount(params) { + if (config.useMock) { + return mockFetchOrdersCount(params); + } + + return new Promise((resolve) => { + resolve('real api'); + }); +} diff --git a/scr/miniprogram-2/services/order/orderSubmitComment.js b/scr/miniprogram-2/services/order/orderSubmitComment.js new file mode 100644 index 0000000..5e3ea36 --- /dev/null +++ b/scr/miniprogram-2/services/order/orderSubmitComment.js @@ -0,0 +1,22 @@ +import { config } from '../../config/index'; + +/** 获取评价商品 */ +function mockGetGoods(parameter) { + const { delay } = require('../_utils/delay'); + const { getGoods } = require('../../model/submitComment'); + const data = getGoods(parameter); + + return delay().then(() => { + return data; + }); +} + +/** 获取评价商品 */ +export function getGoods(parameter) { + if (config.useMock) { + return mockGetGoods(parameter); + } + return new Promise((resolve) => { + resolve('real api'); + }); +} diff --git a/scr/miniprogram-2/services/promotion/detail.js b/scr/miniprogram-2/services/promotion/detail.js new file mode 100644 index 0000000..841f723 --- /dev/null +++ b/scr/miniprogram-2/services/promotion/detail.js @@ -0,0 +1,18 @@ +import { config } from '../../config/index'; + +/** 获取商品列表 */ +function mockFetchPromotion(ID = 0) { + const { delay } = require('../_utils/delay'); + const { getPromotion } = require('../../model/promotion'); + return delay().then(() => getPromotion(ID)); +} + +/** 获取商品列表 */ +export function fetchPromotion(ID = 0) { + if (config.useMock) { + return mockFetchPromotion(ID); + } + return new Promise((resolve) => { + resolve('real api'); + }); +} diff --git a/scr/miniprogram-2/services/usercenter/fetchPerson.js b/scr/miniprogram-2/services/usercenter/fetchPerson.js new file mode 100644 index 0000000..bd31178 --- /dev/null +++ b/scr/miniprogram-2/services/usercenter/fetchPerson.js @@ -0,0 +1,28 @@ +import { config } from '../../config/index'; + +/** 获取个人中心信息 */ +function mockFetchPerson() { + const { delay } = require('../_utils/delay'); + const { genSimpleUserInfo } = require('../../model/usercenter'); + const { genAddress } = require('../../model/address'); + const address = genAddress(); + return delay().then(() => ({ + ...genSimpleUserInfo(), + address: { + provinceName: address.provinceName, + provinceCode: address.provinceCode, + cityName: address.cityName, + cityCode: address.cityCode, + }, + })); +} + +/** 获取个人中心信息 */ +export function fetchPerson() { + if (config.useMock) { + return mockFetchPerson(); + } + return new Promise((resolve) => { + resolve('real api'); + }); +} diff --git a/scr/miniprogram-2/services/usercenter/fetchUsercenter.js b/scr/miniprogram-2/services/usercenter/fetchUsercenter.js new file mode 100644 index 0000000..b187644 --- /dev/null +++ b/scr/miniprogram-2/services/usercenter/fetchUsercenter.js @@ -0,0 +1,18 @@ +import { config } from '../../config/index'; + +/** 获取个人中心信息 */ +function mockFetchUserCenter() { + const { delay } = require('../_utils/delay'); + const { genUsercenter } = require('../../model/usercenter'); + return delay(200).then(() => genUsercenter()); +} + +/** 获取个人中心信息 */ +export function fetchUserCenter() { + if (config.useMock) { + return mockFetchUserCenter(); + } + return new Promise((resolve) => { + resolve('real api'); + }); +} diff --git a/scr/miniprogram-2/sitemap.json b/scr/miniprogram-2/sitemap.json new file mode 100644 index 0000000..ca02add --- /dev/null +++ b/scr/miniprogram-2/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/scr/miniprogram-2/style/cart-group.wxss b/scr/miniprogram-2/style/cart-group.wxss new file mode 100644 index 0000000..ad585a5 --- /dev/null +++ b/scr/miniprogram-2/style/cart-group.wxss @@ -0,0 +1,83 @@ +/* var() css变量适配*/ +.wr-swiper-cell__right { + margin: 20rpx 0; +} +.wr-swiper-cell__right .swiper-right-del { + height: calc(100% - 40rpx); + width: 60px; + background-color: #ff2525; + font-size: 28rpx; + color: white; + display: flex; + justify-content: center; + align-items: center; +} +.goods-stepper .stepper { + border: none; + border-radius: 0; + height: auto; + width: 168rpx; + overflow: visible; +} +.goods-stepper .stepper .stepper__minus, +.goods-stepper .stepper .stepper__plus { + width: 44rpx; + height: 44rpx; + background-color: #f5f5f5; +} +.goods-stepper .stepper .stepper__minus--hover, +.goods-stepper .stepper .stepper__plus--hover { + background-color: #f5f5f5; +} +.goods-stepper .stepper .stepper__minus .wr-icon, +.goods-stepper .stepper .stepper__plus .wr-icon { + font-size: 24rpx; +} +.goods-stepper .stepper .stepper__minus { + position: relative; +} +.goods-stepper .stepper .stepper__minus::after { + position: absolute; + display: block; + content: ' '; + left: -20rpx; + right: -5rpx; + top: -20rpx; + bottom: -20rpx; + background-color: transparent; +} +.goods-stepper .stepper .stepper__plus { + position: relative; +} +.goods-stepper .stepper .stepper__plus::after { + position: absolute; + display: block; + content: ' '; + left: -5rpx; + right: -20rpx; + top: -20rpx; + bottom: -20rpx; + background-color: transparent; +} +.goods-stepper .stepper .stepper__input { + width: 72rpx; + height: 44rpx; + background-color: #f5f5f5; + font-size: 24rpx; + color: #222427; + font-weight: 600; + border-left: none; + border-right: none; + min-height: 40rpx; + margin: 0 4rpx; + display: flex; + align-items: center; +} +.invalid-card .invalid-private-mask .wr-goods-card { + background-color: #fff; + padding: 18rpx 32rpx 24rpx 80rpx; +} +.text-primary .wr-icon { + color: #fa550f; + color: var(--color-primary, #fa550f); +} diff --git a/scr/miniprogram-2/style/debug.log b/scr/miniprogram-2/style/debug.log new file mode 100644 index 0000000..95d2b33 --- /dev/null +++ b/scr/miniprogram-2/style/debug.log @@ -0,0 +1 @@ +[1016/184314.796:ERROR:registration_protocol_win.cc(103)] CreateFile: ϵͳҲָļ (0x2) diff --git a/scr/miniprogram-2/style/global.wxss b/scr/miniprogram-2/style/global.wxss new file mode 100644 index 0000000..44f1ca4 --- /dev/null +++ b/scr/miniprogram-2/style/global.wxss @@ -0,0 +1,965 @@ +/* + * @Author: oliverppeng + * @LastEditors: Please set LastEditors + * @Date: 2021-12-01 17:33:43 + * @LastEditTime: 2021-12-03 15:31:17 + * @Description: + * @FilePath: /retail-mp/style/global.wxss + */ +.text-primary { + color: #fa550f; +} +.text-success { + color: #5fb446; +} +.text-warn { + color: #ec8131; +} +.text-danger { + color: #de1c24; +} +.text-title { + color: #282828; +} +.text-normal { + color: #5d5d5d; +} +.text-small { + color: #9b9b9b; +} +.text-minor { + color: #ececec; +} +.text-border { + color: #eeeeee; +} +.text-white { + color: #fff; +} +.bg-primary { + background-color: #fa550f; + color: #fff; +} +.bg-success { + background-color: #5fb446; + color: #fff; +} +.bg-warn { + background-color: #ec8131; + color: #fff; +} +.bg-danger { + background-color: #de1c24; + color: #fff; +} +.bg-title { + background-color: #282828; + color: #fff; +} +.bg-normal { + background-color: #5d5d5d; + color: #282828; +} +.bg-small { + background-color: #9b9b9b; + color: #5d5d5d; +} +.bg-minor { + background-color: #ececec; + color: #5d5d5d; +} +.bg-border { + background-color: #eeeeee; + color: #5d5d5d; +} +.bd-primary { + color: #fa550f; +} +.bd-success { + color: #5fb446; +} +.bd-warn { + color: #ec8131; +} +.bd-danger { + color: #de1c24; +} +.bd-title { + color: #282828; +} +.bd-normal { + color: #5d5d5d; +} +.bd-small { + color: #9b9b9b; +} +.bd-minor { + color: #ececec; +} +.bd-border { + color: #eeeeee; +} +.ft-super { + font-size: 40rpx; +} +.ft-main { + font-size: 36rpx; +} +.ft-normal { + font-size: 32rpx; +} +.ft-assist { + font-size: 28rpx; +} +.ft-minor { + font-size: 24rpx; +} +.ft-mini { + font-size: 20rpx; +} +.fw-super { + font-weight: 800; +} +.fw-main { + font-weight: 600; +} +.fw-normal { + font-weight: 400; +} +.fw-minor { + font-weight: 300; +} +.mo-border-1rpx { + position: relative; + z-index: 0; +} +.mo-border-1rpx::before { + content: ''; + position: absolute; + left: 0; + top: 0; + width: 200%; + height: 200%; + border-width: 2rpx; + border-style: solid; + transform: scale(0.5); + transform-origin: 0 0; + z-index: -1; + box-sizing: border-box; +} +/* 层级定义 + @z-index-0: 1; + @z-index-1: 100; + @z-index-2: 200; + @z-index-5: 500; + @z-index-component: 1000; // 通用组件级别 + @z-index-dropdown: @z-index-component; + @z-index-sticky: @z-index-component + 20; + @z-index-fixed: @z-index-component + 30; + @z-index-modal-backdrop:@z-index-component + 40; + @z-index-modal:@z-index-component + 50; + @z-index-popover:@z-index-component + 60; + @z-index-tooltip:@z-index-component + 70; + */ +page { + height: 100%; + font-family: 'Microsoft YaHei', '微软雅黑', 'MicrosoftJhengHei', '华文细黑', + Helvetica, Arial, 'sans-serif'; + font-size: 26rpx; + background-color: #f8f8f8; + font-weight: 400; +} +view, +image, +icon, +scroll-view, +text, +button, +checkbox, +form, +input, +label, +navigator, +audio, +video, +canvas { + box-sizing: border-box; + margin: 0; + padding: 0; + border: 0; + outline: 0; +} +scroll-view { + height: 100%; +} +form, +image { + display: block; +} +button { + padding: 0; + margin: 0; + border-radius: 0; + height: 100%; + display: block; + line-height: inherit; + font-size: inherit; + color: inherit; + background: none; + -webkit-appearance: none; + border: none; +} +button::after { + content: none; +} +input, +textarea { + font-family: 'Microsoft YaHei', '微软雅黑', 'MicrosoftJhengHei', '华文细黑', + Helvetica, Arial, 'sans-serif'; + font-size: 26rpx; + z-index: 0; +} +.price { + color: #ec8131; + font-size: 32rpx; + font-weight: 600; +} +.price-del { + color: #9b9b9b; + font-size: 24rpx; + font-weight: 400; +} +.page { + background: #fff; +} +.color-price { + color: #ec8131; +} +.bg-cart { + background-color: #ffc220; + color: #fff; +} +.market-addcart { + color: #ec8131; + font-size: 42rpx; +} +.ovh { + overflow: hidden; +} +.hidden { + display: none; +} +.show { + display: block; +} +.text { + display: inline-block; +} +.inline { + display: inline; +} +.minHeight { + min-height: 101%; +} +.imgCover { + width: 100%; + padding-bottom: 100%; + background-size: cover; + background-position: center; + background-repeat: no-repeat; + display: block; + position: relative; +} +.imgCover-list { + width: 195rpx; + height: 260rpx; + padding-bottom: 0; + background-size: cover; + background-position: center; + background-repeat: no-repeat; + display: block; + position: relative; +} +.circular { + border-radius: 50%; +} +.text-line1 { + overflow: hidden; + white-space: nowrap; + text-overflow: ellipsis; + word-break: break-all; +} +.text-line-1 { + overflow: hidden; + text-overflow: ellipsis; + display: -webkit-box; + -webkit-line-clamp: 1; + -webkit-box-orient: vertical; + word-break: break-all; +} +.text-line2 { + overflow: hidden; + text-overflow: ellipsis; + display: -webkit-box; + -webkit-line-clamp: 2; + -webkit-box-orient: vertical; + word-break: break-all; +} +.text-line3 { + overflow: hidden; + text-overflow: ellipsis; + display: -webkit-box; + -webkit-line-clamp: 3; + -webkit-box-orient: vertical; + word-break: break-all; +} +.flex, +.box { + display: flex; + display: -webkit-flex; +} +.flex-v-center { + align-items: center; + -webkit-align-items: center; +} +.flex-center { + justify-content: center; + -webkit-justify-content: center; + align-items: center; + -webkit-align-items: center; +} +.flex-between { + justify-content: space-between; + -webkit-justify-content: space-between; +} +.flex-v-between { + align-content: space-between; + -webkit-align-content: space-between; +} +.flex-end { + justify-content: flex-end; + -webkit-justify-content: flex-end; +} +.flex-col { + flex-direction: column; + -webkit-flex-direction: column; +} +.flex1 { + flex: 1; + -webkit-flex: 1; +} +.flex0 { + flex: none; + -webkit-flex: none; +} +.flex-start { + justify-content: flex-start; + -webkit-justify-content: flex-start; +} +.border-around, +.border-bottom-1px, +.border-left-1px, +.border-right-1px, +.border-top-1px { + position: relative; + border: 1rpx solid #e9e9e9; +} +.border-top-1px { + border-width: 1rpx 0 0 0; +} +.border-right-1px { + border-width: 0 1rpx 0 0; +} +.border-bottom-1px { + border-width: 0 0 1rpx 0; +} +.border-left-1px { + border-width: 0 0 0 1rpx; +} +.border-t-1px, +.border-r-1px, +.border-b-1px, +.border-l-1px { + position: relative; +} +.border-t-1px::after, +.border-r-1px::after, +.border-b-1px::after, +.border-l-1px::after { + content: ''; + position: absolute; + border-width: 2rpx; + border-color: #efefef; + border-style: solid; +} +.border-t-1px::after { + left: 0; + top: 0; + width: 100%; + transform: scaleY(0.5); +} +.border-b-1px::after { + left: 0; + bottom: 0; + width: 100%; + transform: scaleY(0.5); +} +.border-l-1px::after { + left: 0; + top: 0; + height: 100%; + transform: scaleX(0.5); +} +.border-r-1px::after { + right: 0; + top: 0; + height: 100%; + transform: scaleX(0.5); +} +.arrows { + position: relative; +} +.arrows::after { + content: ''; + display: inline-block; + width: 6px; + height: 6px; + border: 2px solid #c3c3c3; + border-width: 2px 2px 0 0; + position: absolute; + top: 50%; + right: 26rpx; + margin-top: -3px; + -webkit-transform: rotate(45deg); + transform: rotate(45deg); +} +.arrows-inline::after { + position: relative; + left: auto; + top: auto; + right: auto; + bottom: auto; + margin-top: -4px; + margin-left: 5px; +} +.pt-16, +.pt-8 { + padding-top: 16rpx; +} +.pb-16, +.pb-8 { + padding-bottom: 16rpx; +} +.pl-16, +.pl-8 { + padding-left: 16rpx; +} +.pr-16, +.pr-8 { + padding-right: 16rpx; +} +.pl-20, +.pl-10 { + padding-left: 20rpx; +} +.pr-20, +.pr-10 { + padding-right: 20rpx; +} +.pl-30 { + padding-left: 30rpx; +} +.pr-30 { + padding-right: 30rpx; +} +.pl-32, +.pl-15 { + padding-left: 32rpx; +} +.pr-32, +.pr-15 { + padding-right: 32rpx; +} +.pb360 { + padding-bottom: 360rpx; +} +.PriceSwitch { + line-height: 21px; + font-size: 24rpx; + padding: 0 8rpx; +} +.PriceSwitch .i { + font-size: 30rpx; +} +.Original { + font-style: normal; + font-size: 24rpx; + color: #9a9a9a; + text-decoration: line-through; + margin-left: 16rpx; + display: inline-block; +} +.color1, +h1, +h2, +h3, +h4, +h5, +h6 { + font-weight: normal; + color: #1a1a1a; + margin: 0; + padding: 0; +} +.color-3 { + color: #333; +} +.color-6 { + color: #666; +} +.color-9 { + color: #999; +} +.color-e9 { + color: #e9e9e9; +} +.color-64 { + color: #646464; +} +.color-b4 { + color: #b4b4b4; +} +.color-97 { + color: #979797; +} +.color-9b { + color: #9b9b9b; +} +.color-white { + color: #fff; +} +.color-black { + color: #000; +} +.color-c { + color: #ccc; +} +.bkg-white { + background-color: #fff; +} +.font10 { + font-size: 20rpx; +} +.font11 { + font-size: 22rpx; +} +.font12 { + font-size: 24rpx; +} +.font13 { + font-size: 26rpx; +} +.font14 { + font-size: 28rpx; +} +.font15 { + font-size: 30rpx; +} +.font16 { + font-size: 32rpx; +} +.font17 { + font-size: 34rpx; +} +.font18 { + font-size: 36rpx; +} +.font19 { + font-size: 38rpx; +} +.font20 { + font-size: 20rpx; +} +.font22 { + font-size: 22rpx; +} +.font24 { + font-size: 24rpx; +} +.font26 { + font-size: 26rpx; +} +.font28 { + font-size: 28rpx; +} +.font30 { + font-size: 30rpx; +} +.font32 { + font-size: 32rpx; +} +.font34 { + font-size: 34rpx; +} +.font36 { + font-size: 36rpx; +} +.font38 { + font-size: 38rpx; +} +.font40 { + font-size: 40rpx; +} +.font46 { + font-size: 46rpx; +} +.font50 { + font-size: 50rpx; +} +.font56 { + font-size: 56rpx; +} +.font82 { + font-size: 82rpx; +} +.bkg-white { + background-color: #fff; +} +.fontWeight-l { + font-weight: 500; +} +.fontWeight-n { + font-weight: 300; +} +.fontWeight-nor { + font-weight: normal; +} +.line-height1 { + line-height: 1; +} +.btn-active { + width: 40rpx; + display: inline-block; + text-align: center; + height: 40rpx; + background: #ff2e45; + border-radius: 8rpx; + color: #fff; + line-height: 40rpx; + font-size: 24rpx; + font-weight: normal; + font-style: normal; + overflow: hidden; +} +.btn-auto { + display: inline-block; + font-size: 20rpx; + border: 1px solid #ff2e45; + border-radius: 8rpx; + height: 36rpx; + line-height: 36rpx; + color: #ff2e45; + padding: 0 12rpx; + margin-right: 16rpx; +} +.btn-lg, +.btn-md, +.btn-sm, +.btn-xs { + text-align: center; + width: 100%; + border-radius: 8rpx; + color: #fff; + line-height: 88rpx; + font-size: 30rpx; +} +.btn-lg, +.btn-md { + background-color: #ff2e45; +} +.btn-sm { + border: 1px solid #999; + color: #666; + height: 60rpx; + line-height: 60rpx; +} +.btn-xs { + width: 100%; + height: 68rpx; + line-height: 68rpx; + border: 1px solid #e2e2e2; + color: #666; +} +.btn-dashed, +.btn-md-dashed { + width: 100%; + height: 80rpx; + line-height: 80rpx; + text-align: center; + color: #ff2e45; + border-radius: 8rpx; + border: 1px solid #ff2e45; + font-size: 26rpx; +} +.btn-md-dashed { + height: 50rpx; + line-height: 50rpx; + border-radius: 8rpx; +} +.btn-bj1 { + background-color: #ff2e45; +} +.btn-bj2 { + background-color: #ff8522; +} +.btn-dis { + background-color: #999; + color: #bbb; +} +.btn-dashed-dis { + border: 1px solid #c8c8c8; + color: #bbbbbb; + border-radius: 8rpx; +} +.titleTag { + line-height: 28rpx; + height: 28rpx; + margin-right: 8rpx; + color: #fff; + padding: 0 8rpx; + font-size: 18rpx; + border-radius: 4rpx; + font-weight: bold; + display: inline-block; +} +.titleTag.memberTag { + margin-top: 2rpx; +} +.amounts { + font-style: normal; + display: inline-block; + height: 24rpx; + min-width: 24rpx; + padding: 0 6rpx; + border-radius: 24rpx; + background-color: #fd1d45 !important; + color: #fff; + text-align: center; + font-size: 20rpx; + font-weight: 600; + position: absolute; + top: 6rpx; + line-height: 24rpx; + box-sizing: border-box; +} +.amounts:empty, +.titleTag:empty { + display: none; +} +.loadMore { + font-size: 26rpx; + color: #c1c1c1; + text-align: center; + height: 80rpx; + line-height: 58rpx; + margin-top: 20rpx; + display: flex; + align-items: center; + justify-content: center; +} +.loadings { + margin-right: 10rpx; + width: 40rpx; + height: 40rpx; + display: inline-block; + vertical-align: sub; + background: url(https://cdn.ghsmpwalmart.com/saas/market/image/loadings.png) + no-repeat; + background-size: 240rpx 40rpx; + background-position: 0 0; + animation: cirle-loadings 1s steps(6) infinite; +} +@keyframes cirle-loadings { + from { + background-position: 0 0; + } + to { + background-position: -240rpx 0; + } +} +.page-loading { + display: inline-block; + width: 72rpx; + height: 75rpx; + background: url('https://cdn.ghsmpwalmart.com/saas/market/image/page-loading-bc.png') + no-repeat; + background-position: 0 0; + background-size: 72rpx 75rpx; +} +.page-loading::before { + content: ' '; + display: inline-block; + width: 72rpx; + height: 75rpx; + background: url('https://cdn.ghsmpwalmart.com/saas/market/image/page-loading-spin.png') + no-repeat; + background-position: 0 0; + background-size: 720rpx 75rpx; + animation: animate-page-loading 0.4s steps(10) infinite; +} +@keyframes animate-page-loading { + from { + background-position-x: 0rpx; + } + to { + background-position-x: -720rpx; + } +} +.page-loading-wrap { + width: 100%; + height: 1026rpx; + display: flex; + display: -webkit-flex; + justify-content: center; + -webkit-justify-content: center; + padding-top: 46vh; +} +.grooms { + margin: 0 16rpx; + overflow: hidden; + text-align: center; + height: 52rpx; +} +.grooms label { + display: inline-block; + padding: 0 20rpx; + height: 52rpx; + line-height: 52rpx; + position: relative; + color: #3e3e3e; + font-size: 26rpx; +} +.grooms label > p { + overflow: hidden; + max-width: 400rpx; + min-width: 120rpx; + white-space: nowrap; + text-overflow: ellipsis; +} +.grooms label > p::before { + content: ''; + display: inline-block; + position: absolute; + width: 1000rpx; + margin-left: -1000rpx; + height: 0; + left: 0; + top: 50%; + border: 1px solid #e9e9e9; + border-width: 1px 0 0 0; +} +.grooms label > p::after { + content: ''; + display: inline-block; + position: absolute; + width: 1000rpx; + margin-left: -1000rpx; + height: 0; + left: 0; + left: inherit; + top: 50%; + border: 1px solid #e9e9e9; + border-width: 0 0 1px 0; + right: 0; + margin-right: -1000rpx; +} +.navHeight { + height: 100rpx; +} +.widget-mask, +.widget_mask { + position: fixed; + left: 0; + top: 0px; + width: 100%; + height: 100%; + background: rgba(0, 0, 0, 0.5); + z-index: 200; +} +.theme-color { + color: #f12d22; +} +.theme-bgc { + background-color: #f12d22; +} +.theme-bdc { + border-color: #f12d22; +} +.theme-bgcart { + background-color: #ffb56c; +} +.IphoneX { + padding-bottom: 68rpx !important; +} +.fixIphonex { + bottom: 68rpx !important; +} +.fixIphonex::after { + content: ' '; + position: fixed; + bottom: 0 !important; + height: 68rpx !important; + width: 100%; + background: #ffffff; + left: 0; +} +.iphonexMenus { + bottom: 166rpx !important; +} +.imgCover-oblong-sm .imgCover { + width: 195rpx; + height: 260rpx; +} +.imgCover-oblong-lg .imgCover { + padding-bottom: 133%; +} +.fw-Light { + font-weight: 300; +} +.fw-Regular { + font-weight: 400; +} +.fw-Medium { + font-weight: 600; +} +.fw-Semibold { + font-weight: 800; +} +.icon-xingouwuche { + font-size: 42rpx; +} +.color777 { + color: #777777; +} +.popup-header { + color: #000; + font-size: 28rpx; + text-align: center; + height: 100rpx; + line-height: 100rpx; + position: relative; + border-bottom: 1rpx solid #dbdbdb; + font-weight: 400; +} +.popup-header .wr-close { + position: absolute; + left: 0; + font-size: 26rpx; + color: #5d5d5d; + width: 60rpx; + height: 60rpx; + text-align: center; + line-height: 60rpx; + top: 20rpx; + left: 10rpx; +} diff --git a/scr/miniprogram-2/style/goodsList.wxss b/scr/miniprogram-2/style/goodsList.wxss new file mode 100644 index 0000000..be0fcac --- /dev/null +++ b/scr/miniprogram-2/style/goodsList.wxss @@ -0,0 +1,169 @@ +/* 层级定义 +@z-index-0: 1; +@z-index-1: 100; +@z-index-2: 200; +@z-index-5: 500; +@z-index-component: 1000; // 通用组件级别 +@z-index-dropdown: @z-index-component; +@z-index-sticky: @z-index-component + 20; +@z-index-fixed: @z-index-component + 30; +@z-index-modal-backdrop:@z-index-component + 40; +@z-index-modal:@z-index-component + 50; +@z-index-popover:@z-index-component + 60; +@z-index-tooltip:@z-index-component + 70; +*/ +/* var() css变量适配*/ +.goods-list-wrap { + padding-left: 24rpx; + background-color: #fff; +} +.goods-list-wrap .wr-goods-card { + padding: 24rpx 24rpx 24rpx 0; + border-bottom: 1rpx solid #e6e6e6; + background-color: #fff; +} +.goods-list-wrap .wr-goods-card.no-border { + border-bottom: none; +} +.goods-list-wrap .wr-goods-card .wr-goods-card__thumb { + width: 200rpx; + height: 200rpx; + margin-right: 24rpx; + border-radius: 8rpx; + overflow: hidden; +} +.goods-list-wrap .wr-goods-card .wr-goods-card__content { + position: relative; + display: flex; + flex-flow: column nowrap; + justify-content: space-between; + width: 478rpx; + height: 200rpx; +} +.goods-list-wrap .wr-goods-card .wr-goods-card__content .wr-goods-card__title { + overflow: hidden; + margin-bottom: 24rpx; + text-overflow: ellipsis; + -webkit-box-orient: vertical; + -webkit-line-clamp: 2; + line-clamp: 2; + display: -webkit-box; + font-size: 26rpx; + line-height: 36rpx; + font-weight: 400; +} +.goods-list-wrap .wr-goods-card .wr-goods-card__content .card-index--wr-goods-card__price { + font-size: 32rpx; +} +.goods-list-wrap .wr-goods-card .wr-goods-card__content .card-index--wr-goods-card__price .symbol { + font-size: 24rpx; +} +.goods-list-wrap .wr-goods-card .wr-goods-card__tags { + flex-grow: 2; +} +.goods-list-wrap .wr-goods-card .goods-card-tags-wrap { + color: #fa550f; + color: var(--color-primary, #fa550f); + display: flex; + height: 30rpx; + flex-flow: row wrap; + text-align: center; + width: 100%; + flex-shrink: 0; +} +.goods-list-wrap .wr-goods-card .goods-card-tags-wrap .tag { + box-sizing: border-box; + font-size: 20rpx; + border-radius: 4rpx; + flex-shrink: 0; + vertical-align: middle; + margin-right: 8rpx; + background-color: #fff; +} +.goods-list-wrap .wr-goods-card .goods-card-tags-wrap .tag::after { + border-radius: 4rpx; + border: 2rpx solid #fa550f; + border: 2rpx solid var(--color-primary, #fa550f); +} +.goods-list-wrap .wr-goods-card .goods-add-cart { + display: flex; + justify-content: center; + align-items: center; + position: absolute; + right: 0; + bottom: 0; + width: 48rpx; +} +.goods-list-wrap .wr-goods-card .goods-add-cart .goods-add-cart { + line-height: 48rpx; + height: 48rpx; +} +.goods-list-wrap.vertical { + padding: 20rpx 24rpx; + display: flex; + flex-flow: row wrap; + justify-content: space-between; + background-color: transparent; +} +.goods-list-wrap.vertical .wr-goods-card { + width: 340rpx; + height: 574rpx; + overflow: hidden; + padding: 0; + border-bottom: none; + display: flex; + flex-flow: column nowrap; + border-radius: 8px; + margin-bottom: 24rpx; +} +.goods-list-wrap.vertical .wr-goods-card .wr-goods-card__thumb { + width: 100%; + height: 340rpx; +} +.goods-list-wrap.vertical .wr-goods-card .wr-goods-card__content { + width: 100%; + padding: 20rpx; + overflow: hidden; + height: 234rpx; + box-sizing: border-box; +} +.goods-list-wrap.vertical .wr-goods-card .wr-goods-card__content .wr-goods-card__title { + -webkit-box-orient: horizontal; + -webkit-line-clamp: 1; + line-clamp: 1; + height: 36rpx; + color: #333; + white-space: nowrap; + display: block; +} +.goods-list-wrap.vertical .wr-goods-card .wr-goods-card__content .card-index--wr-goods-card__origin-price { + position: absolute; + left: 20rpx; + bottom: 72rpx; + margin-left: 0; + font-size: 24rpx; + color: #aaaaaa; +} +.goods-list-wrap.vertical .wr-goods-card .wr-goods-card__content .wr-goods-card__groupon-price { + position: absolute; + left: 20rpx; + bottom: 72rpx; + margin-left: 0; + font-size: 24rpx; + color: #aaaaaa; +} +.goods-list-wrap.vertical .wr-goods-card .goods-add-cart { + right: 20rpx; + bottom: 20rpx; +} +.goods-list-wrap.vertical .grouponPrice { + margin-bottom: 50rpx; +} +.goods-list-wrap .wr-goods-card__twoLine .wr-goods-card__title { + -webkit-line-clamp: 2 !important; + line-clamp: 2 !important; + display: -webkit-box !important; + white-space: normal !important; + height: auto !important; + -webkit-box-orient: vertical !important; +} diff --git a/scr/miniprogram-2/style/iconfont.wxss b/scr/miniprogram-2/style/iconfont.wxss new file mode 100644 index 0000000..23df272 --- /dev/null +++ b/scr/miniprogram-2/style/iconfont.wxss @@ -0,0 +1,306 @@ +@font-face { + font-family: 'wr'; + src: url('https://cdn3.codesign.qq.com/icons/gqxWyZ1yMJZmVXk/Yyg5Zp2LG8292lK/iconfont.woff?t=cfc62dd36011e60805f5c3ad1a20b642') + format('woff2'); +} + +.wr { + font-family: 'wr' !important; + font-size: 32rpx; + font-style: normal; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} +.wr-deliver:before { + content: '\e033'; +} +.wr-indent_close:before { + content: '\e041'; +} +.wr-edit:before { + content: '\e002'; +} +.wr-succeed:before { + content: '\e00d'; +} +.wr-goods_return:before { + content: '\e03c'; +} +.wr-wallet:before { + content: '\e051'; +} +.wr-package:before { + content: '\e047'; +} +.wr-comment:before { + content: '\e037'; +} +.wr-exchang:before { + content: '\e03e'; +} +.wr-credit_card:before { + content: '\e035'; +} +.wr-service:before { + content: '\e04a'; +} +.wr-shop_bag:before { + content: '\e02a'; +} +.wr-goods_refund:before { + content: '\e03d'; +} +.wr-check:before { + content: '\e053'; +} +.wr-wechat:before { + content: '\e065'; +} +.wr-cartAdd:before { + content: '\e05d'; +} +.wr-home:before { + content: '\e020'; +} +.wr-person:before { + content: '\e02c'; +} +.wr-cart:before { + content: '\e023'; +} +.wr-location:before { + content: '\e016'; +} +.wr-arrow_forward:before { + content: '\e012'; +} +.wr-close:before { + content: '\e021'; +} +.wr-search:before { + content: '\e011'; +} +.wr-clear_filled:before { + content: '\e027'; +} +.wr-arrow_drop_up:before { + content: '\e071'; +} +.wr-arrow_drop_down:before { + content: '\e070'; +} +.wr-filter:before { + content: '\e038'; +} +.wr-copy:before { + content: '\e001'; +} +.wr-arrow_back:before { + content: '\e003'; +} +.wr-add_circle:before { + content: '\e004'; +} +.wr-Download:before { + content: '\e006'; +} +.wr-map:before { + content: '\e007'; +} +.wr-store:before { + content: '\e008'; +} +.wr-movie:before { + content: '\e00a'; +} +.wr-done:before { + content: '\e00b'; +} +.wr-minus:before { + content: '\e00c'; +} +.wr-list:before { + content: '\e00e'; +} +.wr-expand_less:before { + content: '\e00f'; +} +.wr-person_add:before { + content: '\e010'; +} +.wr-Photo:before { + content: '\e013'; +} +.wr-preview:before { + content: '\e014'; +} +.wr-remind:before { + content: '\e015'; +} + +.wr-info:before { + content: '\e017'; +} +.wr-expand_less_s:before { + content: '\e018'; +} +.wr-arrow_forward_s:before { + content: '\e019'; +} +.wr-expand_more_s:before { + content: '\e01a'; +} +.wr-share:before { + content: '\e01d'; +} +.wr-notify:before { + content: '\e01e'; +} +.wr-add:before { + content: '\e01f'; +} +.wr-Home:before { + content: '\e020'; +} +.wr-delete:before { + content: '\e022'; +} +.wr-error:before { + content: '\e025'; +} +.wr-sort:before { + content: '\e028'; +} +.wr-sort_filled:before { + content: '\e029'; +} +.wr-shop_bag_filled:before { + content: '\e02b'; +} + +.wr-person_filled:before { + content: '\e02d'; +} +.wr-cart_filled:before { + content: '\e02e'; +} +.wr-home_filled:before { + content: '\e02f'; +} +.wr-add_outline:before { + content: '\e030'; +} + +.wr-compass:before { + content: '\e034'; +} +.wr-goods_exchange:before { + content: '\e03a'; +} +.wr-group_buy:before { + content: '\e03b'; +} +.wr-group:before { + content: '\e03f'; +} +.wr-indent_goods:before { + content: '\e040'; +} +.wr-help:before { + content: '\e042'; +} +.wr-group_takeout:before { + content: '\e043'; +} +.wr-label:before { + content: '\e044'; +} +.wr-indent_wating:before { + content: '\e045'; +} +.wr-member:before { + content: '\e046'; +} + +.wr-scanning:before { + content: '\e04b'; +} +.wr-tv:before { + content: '\e04d'; +} +.wr-to_top:before { + content: '\e04f'; +} +.wr-visibility_off:before { + content: '\e050'; +} +.wr-error-1:before { + content: '\e052'; +} + +.wr-arrow_right:before { + content: '\e054'; +} +.wr-arrow_left:before { + content: '\e056'; +} +.wr-picture_filled:before { + content: '\e057'; +} +.wr-navigation:before { + content: '\e058'; +} +.wr-telephone:before { + content: '\e059'; +} +.wr-indent_time:before { + content: '\e05c'; +} +.wr-cart_add:before { + content: '\e05d'; +} +.wr-classify:before { + content: '\e060'; +} +.wr-place:before { + content: '\e063'; +} +.wr-wechat_pay:before { + content: '\e064'; +} +.wr-security:before { + content: '\e066'; +} +.wr-alarm:before { + content: '\e067'; +} +.wr-person-1:before { + content: '\e068'; +} +.wr-open_in_new:before { + content: '\e069'; +} +.wr-uncheck:before { + content: '\e06b'; +} +.wr-thumb_up:before { + content: '\e06c'; +} +.wr-thumb_up_filled:before { + content: '\e06d'; +} +.wr-star:before { + content: '\e06e'; +} +.wr-star_filled:before { + content: '\e06f'; +} +.wr-cards:before { + content: '\e072'; +} +.wr-picture_error_filled:before { + content: '\e076'; +} +.wr-discount:before { + content: '\e077'; +} diff --git a/scr/miniprogram-2/style/theme.wxss b/scr/miniprogram-2/style/theme.wxss new file mode 100644 index 0000000..ed44107 --- /dev/null +++ b/scr/miniprogram-2/style/theme.wxss @@ -0,0 +1,10 @@ +/* 自定义rate颜色主题 */ +.t-rate { + --td-rate-selected-color: #ffc51c; + --td-rate-unselected-color: #ddd; +} + +.t-input { + --td-input-placeholder-text-color: #bbbbbb; + --td-input-text-color: #333333; +} \ No newline at end of file diff --git a/scr/miniprogram-2/utils/addressParse.js b/scr/miniprogram-2/utils/addressParse.js new file mode 100644 index 0000000..23b6cd0 --- /dev/null +++ b/scr/miniprogram-2/utils/addressParse.js @@ -0,0 +1,25 @@ +import { areaData } from '../config/index'; + +const addressParse = (provinceName, cityName, countryName) => { + return new Promise((resolve, reject) => { + try { + const province = areaData.find((v) => v.name === provinceName); + const { code: provinceCode } = province; + const city = province.children.find((v) => v.name === cityName); + const { code: cityCode } = city; + const country = city.children.find((v) => v.name === countryName); + const { code: districtCode } = country; + resolve({ + provinceCode, + cityCode, + districtCode, + }); + } catch (error) { + reject('地址解析失败'); + } + }); +}; + +module.exports = { + addressParse, +}; diff --git a/scr/miniprogram-2/utils/getPermission.js b/scr/miniprogram-2/utils/getPermission.js new file mode 100644 index 0000000..e6a64cb --- /dev/null +++ b/scr/miniprogram-2/utils/getPermission.js @@ -0,0 +1,45 @@ +const getPermission = ({ code, name }) => { + return new Promise((resolve, reject) => { + wx.getSetting({ + success: (res) => { + if (res.authSetting[code] === false) { + wx.showModal({ + title: `获取${name}失败`, + content: `获取${name}失败,请在【右上角】-小程序【设置】项中,将【${name}】开启。`, + confirmText: '去设置', + confirmColor: '#FA550F', + cancelColor: '取消', + success(res) { + if (res.confirm) { + wx.openSetting({ + success(settinRes) { + if (settinRes.authSetting[code] === true) { + resolve(); + } else { + console.warn('用户未打开权限', name, code); + reject(); + } + }, + }); + } else { + reject(); + } + }, + fail() { + reject(); + }, + }); + } else { + resolve(); + } + }, + fail() { + reject(); + }, + }); + }); +}; + +module.exports = { + getPermission, +}; diff --git a/scr/miniprogram-2/utils/mock.js b/scr/miniprogram-2/utils/mock.js new file mode 100644 index 0000000..27f13e8 --- /dev/null +++ b/scr/miniprogram-2/utils/mock.js @@ -0,0 +1,51 @@ +/** + * 随机打散字符串 + * @param {number} n 长度 + * @param {string} str 字符串 + * @returns + */ +function generateMixed(n, str) { + var res = ''; + for (var i = 0; i < n; i++) { + var id = Math.ceil(Math.random() * 35); + res += str[id]; + } + return res; +} + +/** + * 生成随机数 + * @param {number} min 最小值 + * @param {number} max 最大值 + * @returns + */ +function getRandomNum(min, max) { + var range = max - min; + var rand = Math.random(); + return min + Math.round(rand * range); +} + +/** + * 生成随机IP + * @returns + */ +function mockIp() { + return `10.${getRandomNum(1, 254)}.${getRandomNum(1, 254)}.${getRandomNum( + 1, + 254, + )}`; +} + +function mockReqId() { + return `${getRandomNum(100000, 999999)}.${new Date().valueOf()}${getRandomNum( + 1000, + 9999, + )}.${getRandomNum(10000000, 99999999)}`; +} + +module.exports = { + generateMixed, + mockIp, + mockReqId, + getRandomNum, +}; diff --git a/scr/miniprogram-2/utils/util.js b/scr/miniprogram-2/utils/util.js new file mode 100644 index 0000000..4f0ec66 --- /dev/null +++ b/scr/miniprogram-2/utils/util.js @@ -0,0 +1,133 @@ +import dayjs from 'dayjs'; + +const formatTime = (date, template) => dayjs(date).format(template); + +/** + * 格式化价格数额为字符串 + * 可对小数部分进行填充,默认不填充 + * @param price 价格数额,以分为单位! + * @param fill 是否填充小数部分 0-不填充 1-填充第一位小数 2-填充两位小数 + */ +function priceFormat(price, fill = 0) { + if (isNaN(price) || price === null || price === Infinity) { + return price; + } + + let priceFormatValue = Math.round(parseFloat(`${price}`) * 10 ** 8) / 10 ** 8; // 恢复精度丢失 + priceFormatValue = `${Math.ceil(priceFormatValue) / 100}`; // 向上取整,单位转换为元,转换为字符串 + if (fill > 0) { + // 补充小数位数 + if (priceFormatValue.indexOf('.') === -1) { + priceFormatValue = `${priceFormatValue}.`; + } + const n = fill - priceFormatValue.split('.')[1]?.length; + for (let i = 0; i < n; i++) { + priceFormatValue = `${priceFormatValue}0`; + } + } + return priceFormatValue; +} + +/** + * 获取cdn裁剪后链接 + * + * @param {string} url 基础链接 + * @param {number} width 宽度,单位px + * @param {number} [height] 可选,高度,不填时与width同值 + */ +const cosThumb = (url, width, height = width) => { + if (url.indexOf('?') > -1) { + return url; + } + + if (url.indexOf('http://') === 0) { + url = url.replace('http://', 'https://'); + } + + return `${url}?imageMogr2/thumbnail/${~~width}x${~~height}`; +}; + +const get = (source, paths, defaultValue) => { + if (typeof paths === 'string') { + paths = paths + .replace(/\[/g, '.') + .replace(/\]/g, '') + .split('.') + .filter(Boolean); + } + const { length } = paths; + let index = 0; + while (source != null && index < length) { + source = source[paths[index++]]; + } + return source === undefined || index === 0 ? defaultValue : source; +}; +let systemWidth = 0; +/** 获取系统宽度,为了减少启动消耗所以在函数里边做初始化 */ +export const loadSystemWidth = () => { + if (systemWidth) { + return systemWidth; + } + + try { + ({ screenWidth: systemWidth, pixelRatio } = wx.getSystemInfoSync()); + } catch (e) { + systemWidth = 0; + } + return systemWidth; +}; + +/** + * 转换rpx为px + * + * @description + * 什么时候用? + * - 布局(width: 172rpx)已经写好, 某些组件只接受px作为style或者prop指定 + * + */ +const rpx2px = (rpx, round = false) => { + loadSystemWidth(); + + // px / systemWidth = rpx / 750 + const result = (rpx * systemWidth) / 750; + + if (round) { + return Math.floor(result); + } + + return result; +}; + +/** + * 手机号码*加密函数 + * @param {string} phone 电话号 + * @returns + */ +const phoneEncryption = (phone) => { + return phone.replace(/(\d{3})\d{4}(\d{4})/, '$1****$2'); +}; + +// 内置手机号正则字符串 +const innerPhoneReg = + '^1(?:3\\d|4[4-9]|5[0-35-9]|6[67]|7[0-8]|8\\d|9\\d)\\d{8}$'; + +/** + * 手机号正则校验 + * @param phone 手机号 + * @param phoneReg 正则字符串 + * @returns true - 校验通过 false - 校验失败 + */ +const phoneRegCheck = (phone) => { + const phoneRegExp = new RegExp(innerPhoneReg); + return phoneRegExp.test(phone); +}; + +module.exports = { + formatTime, + priceFormat, + cosThumb, + get, + rpx2px, + phoneEncryption, + phoneRegCheck, +};