From fabc1861d2392c9d5ff664f63043d77802562af4 Mon Sep 17 00:00:00 2001 From: ivo Date: Tue, 21 Feb 2023 22:40:56 +0800 Subject: [PATCH] =?UTF-8?q?=E5=8F=91=E5=B8=83=E6=AD=A3=E5=BC=8F=E7=89=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app.json | 31 +- 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/loading-content/index.wxml | 16 +- components/price/index.js | 71 - components/price/index.json | 4 - components/price/index.wxml | 21 - components/price/index.wxss | 66 - components/swipeout/index.wxml | 48 +- components/tox-icon/index.js | 31 + .../tox-icon}/index.json | 0 components/tox-icon/index.wxml | 2 + components/tox-icon/index.wxss | 1 + components/tox-tag/index.js | 85 + .../tox-tag}/index.json | 2 +- components/tox-tag/index.wxml | 2 + components/tox-tag/index.wxss | 1 + 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 -- custom-tab-bar/index.js | 19 +- custom-tab-bar/index.json | 2 +- images/additive.jpg | Bin 17063 -> 0 bytes images/check.png | Bin 42656 -> 0 bytes images/chemical.png | Bin 24649 -> 0 bytes images/history.png | Bin 2732 -> 0 bytes images/no_additives.png | Bin 83685 -> 0 bytes images/no_data.jpg | Bin 23350 -> 0 bytes images/question.png | Bin 5304 -> 0 bytes images/search.jpg | Bin 44130 -> 0 bytes images/standard.jpg | Bin 39555 -> 0 bytes images/use_bi.jpg | Bin 12025 -> 0 bytes images/use_btn.jpg | Bin 20394 -> 0 bytes images/weixin.png | Bin 5387 -> 0 bytes model/activities.js | 7 - model/activity.js | 18 - model/address.js | 31 - model/cart.js | 324 --- model/category.js | 206 -- model/comments.js | 338 --- model/comments/queryDetail.js | 50 - model/coupon.js | 39 - model/detailsComments.js | 30 - model/good.js | 1916 ----------------- model/goods.js | 7 - model/order/applyService.js | 295 --- model/order/orderConfirm.js | 147 -- model/order/orderDetail.js | 1212 ----------- model/order/orderList.js | 1054 --------- model/promotion.js | 21 - model/search.js | 60 - model/submitComment.js | 58 - model/swiper.js | 2 +- model/usercenter.js | 52 - 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 - pages/cart/components/cart-empty/index.json | 6 - pages/cart/components/cart-empty/index.wxml | 6 - pages/cart/components/cart-empty/index.wxss | 33 - pages/cart/components/cart-group/index.js | 166 -- pages/cart/components/cart-group/index.json | 11 - pages/cart/components/cart-group/index.wxml | 185 -- pages/cart/components/cart-group/index.wxss | 335 --- pages/cart/components/cart-group/utils.wxs | 20 - pages/cart/components/goods-card/index.js | 243 --- pages/cart/components/goods-card/index.json | 9 - pages/cart/components/goods-card/index.wxml | 75 - pages/cart/components/goods-card/index.wxss | 260 --- pages/cart/components/specs-popup/index.js | 72 - pages/cart/components/specs-popup/index.json | 7 - pages/cart/components/specs-popup/index.wxml | 26 - pages/cart/components/specs-popup/index.wxss | 68 - pages/cart/index.js | 315 --- pages/cart/index.json | 10 - pages/cart/index.wxml | 31 - pages/cart/index.wxss | 12 - pages/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.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 -- pages/coupon/coupon-activity-goods/index.js | 78 - pages/coupon/coupon-activity-goods/index.json | 10 - pages/coupon/coupon-activity-goods/index.wxml | 54 - pages/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 - .../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 1326 -> 0 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 --- pages/goods/list/index.js | 226 -- pages/goods/list/index.json | 12 - pages/goods/list/index.wxml | 55 - pages/goods/list/index.wxss | 108 - pages/goods/result/index.js | 262 --- pages/goods/result/index.json | 15 - pages/goods/result/index.wxml | 81 - pages/goods/result/index.wxss | 110 - pages/goods/search/index.js | 119 - pages/goods/search/index.json | 8 - pages/goods/search/index.wxml | 75 - pages/goods/search/index.wxss | 79 - pages/home/additive/additive.json | 1 + pages/home/additive/additive.wxml | 7 +- pages/home/additive/additive.wxss | 1 + pages/home/chemical/chemical.js | 17 +- pages/home/chemical/chemical.json | 6 +- pages/home/chemical/chemical.wxml | 34 +- pages/home/chemical/chemical.wxss | 23 +- pages/home/components/no-data/no-data.wxml | 2 +- pages/home/home.js | 158 +- pages/home/home.json | 10 +- pages/home/home.wxml | 7 +- pages/home/session/session.js | 62 +- pages/home/session/session.json | 7 +- pages/home/session/session.wxml | 81 +- pages/home/session/session.wxss | 68 +- pages/info/content-page/index.js | 96 + pages/info/content-page/index.json | 8 + pages/info/content-page/index.wxml | 16 + pages/info/content-page/index.wxss | 36 + pages/order/after-service-detail/api.js | 34 - pages/order/after-service-detail/index.js | 209 -- pages/order/after-service-detail/index.json | 20 - pages/order/after-service-detail/index.wxml | 223 -- pages/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 - pages/order/components/goods-card/index.js | 264 --- pages/order/components/goods-card/index.json | 8 - pages/order/components/goods-card/index.wxml | 77 - pages/order/components/goods-card/index.wxss | 254 --- pages/order/components/noGoods/noGoods.js | 57 - pages/order/components/noGoods/noGoods.json | 8 - pages/order/components/noGoods/noGoods.wxml | 55 - pages/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 - pages/order/components/order-card/index.js | 90 - pages/order/components/order-card/index.json | 7 - pages/order/components/order-card/index.wxml | 30 - pages/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 - pages/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 - pages/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.wxml | 40 - .../components/specs-goods-card/index.wxss | 0 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 - pages/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/promotion-detail/index.js | 57 - pages/promotion-detail/index.json | 10 - pages/promotion-detail/index.wxml | 76 - pages/promotion-detail/index.wxss | 111 - pages/standard/list/index.json | 1 - pages/standard/list/index.wxml | 2 +- pages/user/index.json | 3 +- pages/user/index.wxml | 4 +- pages/user/session-list/index.wxml | 2 +- pages/user/session-list/index.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 - pages/usercenter/index.js | 240 --- pages/usercenter/index.json | 14 - pages/usercenter/index.wxml | 25 - 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 - services/_utils/pdf.js | 32 + services/activity/fetchActivity.js | 20 - services/activity/fetchActivityList.js | 20 - services/address/fetchAddress.js | 48 - services/api/article.js | 19 + services/api/request.js | 18 +- services/api/session.js | 8 + services/cart/cart.js | 20 - services/comments/fetchComments.js | 18 - services/comments/fetchCommentsCount.js | 18 - services/coupon/index.js | 65 - services/good/comments/fetchCommentDetail.js | 20 - services/good/featchSearchResult.js | 38 - services/good/fetchCategoryList.js | 18 - services/good/fetchGood.js | 18 - services/good/fetchGoods.js | 29 - services/good/fetchGoodsDetailsComments.js | 37 - services/good/fetchGoodsList.js | 39 - services/good/fetchSearchHistory.js | 35 - services/home/home.js | 45 +- services/order/applyService.js | 70 - services/order/orderConfirm.js | 69 - services/order/orderDetail.js | 39 - 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 - utils/addressParse.js | 25 - utils/getPermission.js | 45 - utils/mock.js | 51 - utils/util.js | 133 -- 389 files changed, 705 insertions(+), 30145 deletions(-) delete mode 100644 components/goods-card/index.js delete mode 100644 components/goods-card/index.json delete mode 100644 components/goods-card/index.wxml delete mode 100644 components/goods-card/index.wxss delete mode 100644 components/goods-list/index.js delete mode 100644 components/goods-list/index.json delete mode 100644 components/goods-list/index.wxml delete mode 100644 components/goods-list/index.wxss delete mode 100644 components/price/index.js delete mode 100644 components/price/index.json delete mode 100644 components/price/index.wxml delete mode 100644 components/price/index.wxss create mode 100644 components/tox-icon/index.js rename {pages/coupon/components/floating-button => components/tox-icon}/index.json (100%) create mode 100644 components/tox-icon/index.wxml create mode 100644 components/tox-icon/index.wxss create mode 100644 components/tox-tag/index.js rename {pages/order/components/specs-goods-card => components/tox-tag}/index.json (54%) create mode 100644 components/tox-tag/index.wxml create mode 100644 components/tox-tag/index.wxss delete mode 100644 components/webp-image/index.js delete mode 100644 components/webp-image/index.json delete mode 100644 components/webp-image/index.wxml delete mode 100644 components/webp-image/index.wxss delete mode 100644 components/webp-image/utils.wxs delete mode 100644 images/additive.jpg delete mode 100644 images/check.png delete mode 100644 images/chemical.png delete mode 100644 images/history.png delete mode 100644 images/no_additives.png delete mode 100644 images/no_data.jpg delete mode 100644 images/question.png delete mode 100644 images/search.jpg delete mode 100644 images/standard.jpg delete mode 100644 images/use_bi.jpg delete mode 100644 images/use_btn.jpg delete mode 100644 images/weixin.png delete mode 100644 model/activities.js delete mode 100644 model/activity.js delete mode 100644 model/address.js delete mode 100644 model/cart.js delete mode 100644 model/category.js delete mode 100644 model/comments.js delete mode 100644 model/comments/queryDetail.js delete mode 100644 model/coupon.js delete mode 100644 model/detailsComments.js delete mode 100644 model/good.js delete mode 100644 model/goods.js delete mode 100644 model/order/applyService.js delete mode 100644 model/order/orderConfirm.js delete mode 100644 model/order/orderDetail.js delete mode 100644 model/order/orderList.js delete mode 100644 model/promotion.js delete mode 100644 model/search.js delete mode 100644 model/submitComment.js delete mode 100644 model/usercenter.js delete mode 100644 pages/cart/components/cart-bar/index.js delete mode 100644 pages/cart/components/cart-bar/index.json delete mode 100644 pages/cart/components/cart-bar/index.wxml delete mode 100644 pages/cart/components/cart-bar/index.wxss delete mode 100644 pages/cart/components/cart-empty/index.js delete mode 100644 pages/cart/components/cart-empty/index.json delete mode 100644 pages/cart/components/cart-empty/index.wxml delete mode 100644 pages/cart/components/cart-empty/index.wxss delete mode 100644 pages/cart/components/cart-group/index.js delete mode 100644 pages/cart/components/cart-group/index.json delete mode 100644 pages/cart/components/cart-group/index.wxml delete mode 100644 pages/cart/components/cart-group/index.wxss delete mode 100644 pages/cart/components/cart-group/utils.wxs delete mode 100644 pages/cart/components/goods-card/index.js delete mode 100644 pages/cart/components/goods-card/index.json delete mode 100644 pages/cart/components/goods-card/index.wxml delete mode 100644 pages/cart/components/goods-card/index.wxss delete mode 100644 pages/cart/components/specs-popup/index.js delete mode 100644 pages/cart/components/specs-popup/index.json delete mode 100644 pages/cart/components/specs-popup/index.wxml delete mode 100644 pages/cart/components/specs-popup/index.wxss delete mode 100644 pages/cart/index.js delete mode 100644 pages/cart/index.json delete mode 100644 pages/cart/index.wxml delete mode 100644 pages/cart/index.wxss delete mode 100644 pages/coupon/components/coupon-card/index.js delete mode 100644 pages/coupon/components/coupon-card/index.json delete mode 100644 pages/coupon/components/coupon-card/index.wxml delete mode 100644 pages/coupon/components/coupon-card/index.wxss delete mode 100644 pages/coupon/components/floating-button/index.js delete mode 100644 pages/coupon/components/floating-button/index.wxml delete mode 100644 pages/coupon/components/floating-button/index.wxss delete mode 100644 pages/coupon/components/ui-coupon-card/index.js delete mode 100644 pages/coupon/components/ui-coupon-card/index.json delete mode 100644 pages/coupon/components/ui-coupon-card/index.wxml delete mode 100644 pages/coupon/components/ui-coupon-card/index.wxss delete mode 100644 pages/coupon/coupon-activity-goods/index.js delete mode 100644 pages/coupon/coupon-activity-goods/index.json delete mode 100644 pages/coupon/coupon-activity-goods/index.wxml delete mode 100644 pages/coupon/coupon-activity-goods/index.wxss delete mode 100644 pages/coupon/coupon-detail/index.js delete mode 100644 pages/coupon/coupon-detail/index.json delete mode 100644 pages/coupon/coupon-detail/index.wxml delete mode 100644 pages/coupon/coupon-detail/index.wxss delete mode 100644 pages/coupon/coupon-list/index.js delete mode 100644 pages/coupon/coupon-list/index.json delete mode 100644 pages/coupon/coupon-list/index.wxml delete mode 100644 pages/coupon/coupon-list/index.wxss delete mode 100644 pages/goods/category/components/goods-category/components/c-sidebar/README.md delete mode 100644 pages/goods/category/components/goods-category/components/c-sidebar/c-sidebar-item/index.js delete mode 100644 pages/goods/category/components/goods-category/components/c-sidebar/c-sidebar-item/index.json delete mode 100644 pages/goods/category/components/goods-category/components/c-sidebar/c-sidebar-item/index.wxml delete mode 100644 pages/goods/category/components/goods-category/components/c-sidebar/c-sidebar-item/index.wxss delete mode 100644 pages/goods/category/components/goods-category/components/c-sidebar/index.js delete mode 100644 pages/goods/category/components/goods-category/components/c-sidebar/index.json delete mode 100644 pages/goods/category/components/goods-category/components/c-sidebar/index.wxml delete mode 100644 pages/goods/category/components/goods-category/components/c-sidebar/index.wxss delete mode 100644 pages/goods/category/components/goods-category/components/c-tabbar/c-tabbar-more/index.js delete mode 100644 pages/goods/category/components/goods-category/components/c-tabbar/c-tabbar-more/index.json delete mode 100644 pages/goods/category/components/goods-category/components/c-tabbar/c-tabbar-more/index.wxml delete mode 100644 pages/goods/category/components/goods-category/components/c-tabbar/c-tabbar-more/index.wxss delete mode 100644 pages/goods/category/components/goods-category/components/c-tabbar/index.js delete mode 100644 pages/goods/category/components/goods-category/components/c-tabbar/index.json delete mode 100644 pages/goods/category/components/goods-category/components/c-tabbar/index.wxml delete mode 100644 pages/goods/category/components/goods-category/components/c-tabbar/index.wxss delete mode 100644 pages/goods/category/components/goods-category/index.js delete mode 100644 pages/goods/category/components/goods-category/index.json delete mode 100644 pages/goods/category/components/goods-category/index.wxml delete mode 100644 pages/goods/category/components/goods-category/index.wxss delete mode 100644 pages/goods/category/data.js delete mode 100644 pages/goods/category/index.js delete mode 100644 pages/goods/category/index.json delete mode 100644 pages/goods/category/index.wxml delete mode 100644 pages/goods/category/index.wxss delete mode 100644 pages/goods/comments/components/comments-card/components/images-videos/assets/play.png delete mode 100644 pages/goods/comments/components/comments-card/components/images-videos/index.js delete mode 100644 pages/goods/comments/components/comments-card/components/images-videos/index.json delete mode 100644 pages/goods/comments/components/comments-card/components/images-videos/index.wxml delete mode 100644 pages/goods/comments/components/comments-card/components/images-videos/index.wxss delete mode 100644 pages/goods/comments/components/comments-card/components/my-video/index.js delete mode 100644 pages/goods/comments/components/comments-card/components/my-video/index.json delete mode 100644 pages/goods/comments/components/comments-card/components/my-video/index.wxml delete mode 100644 pages/goods/comments/components/comments-card/components/my-video/index.wxss delete mode 100644 pages/goods/comments/components/comments-card/index.js delete mode 100644 pages/goods/comments/components/comments-card/index.json delete mode 100644 pages/goods/comments/components/comments-card/index.wxml delete mode 100644 pages/goods/comments/components/comments-card/index.wxss delete mode 100644 pages/goods/comments/create/index.js delete mode 100644 pages/goods/comments/create/index.json delete mode 100644 pages/goods/comments/create/index.wxml delete mode 100644 pages/goods/comments/create/index.wxss delete mode 100644 pages/goods/comments/index.js delete mode 100644 pages/goods/comments/index.json delete mode 100644 pages/goods/comments/index.wxml delete mode 100644 pages/goods/comments/index.wxss delete mode 100644 pages/goods/details/components/buy-bar/index.js delete mode 100644 pages/goods/details/components/buy-bar/index.json delete mode 100644 pages/goods/details/components/buy-bar/index.wxml delete mode 100644 pages/goods/details/components/buy-bar/index.wxss delete mode 100644 pages/goods/details/components/goods-specs-popup/index.js delete mode 100644 pages/goods/details/components/goods-specs-popup/index.json delete mode 100644 pages/goods/details/components/goods-specs-popup/index.wxml delete mode 100644 pages/goods/details/components/goods-specs-popup/index.wxss delete mode 100644 pages/goods/details/components/promotion-popup/index.js delete mode 100644 pages/goods/details/components/promotion-popup/index.json delete mode 100644 pages/goods/details/components/promotion-popup/index.wxml delete mode 100644 pages/goods/details/components/promotion-popup/index.wxss delete mode 100644 pages/goods/details/index.js delete mode 100644 pages/goods/details/index.json delete mode 100644 pages/goods/details/index.wxml delete mode 100644 pages/goods/details/index.wxss delete mode 100644 pages/goods/list/index.js delete mode 100644 pages/goods/list/index.json delete mode 100644 pages/goods/list/index.wxml delete mode 100644 pages/goods/list/index.wxss delete mode 100644 pages/goods/result/index.js delete mode 100644 pages/goods/result/index.json delete mode 100644 pages/goods/result/index.wxml delete mode 100644 pages/goods/result/index.wxss delete mode 100644 pages/goods/search/index.js delete mode 100644 pages/goods/search/index.json delete mode 100644 pages/goods/search/index.wxml delete mode 100644 pages/goods/search/index.wxss create mode 100644 pages/info/content-page/index.js create mode 100644 pages/info/content-page/index.json create mode 100644 pages/info/content-page/index.wxml create mode 100644 pages/info/content-page/index.wxss delete mode 100644 pages/order/after-service-detail/api.js delete mode 100644 pages/order/after-service-detail/index.js delete mode 100644 pages/order/after-service-detail/index.json delete mode 100644 pages/order/after-service-detail/index.wxml delete mode 100644 pages/order/after-service-detail/index.wxss delete mode 100644 pages/order/after-service-list/api.js delete mode 100644 pages/order/after-service-list/index.js delete mode 100644 pages/order/after-service-list/index.json delete mode 100644 pages/order/after-service-list/index.wxml delete mode 100644 pages/order/after-service-list/index.wxss delete mode 100644 pages/order/apply-service/index.js delete mode 100644 pages/order/apply-service/index.json delete mode 100644 pages/order/apply-service/index.wxml delete mode 100644 pages/order/apply-service/index.wxss delete mode 100644 pages/order/components/after-service-button-bar/index.js delete mode 100644 pages/order/components/after-service-button-bar/index.json delete mode 100644 pages/order/components/after-service-button-bar/index.wxml delete mode 100644 pages/order/components/after-service-button-bar/index.wxss delete mode 100644 pages/order/components/customer-service/index.js delete mode 100644 pages/order/components/customer-service/index.json delete mode 100644 pages/order/components/customer-service/index.wxml delete mode 100644 pages/order/components/customer-service/index.wxss delete mode 100644 pages/order/components/goods-card/index.js delete mode 100644 pages/order/components/goods-card/index.json delete mode 100644 pages/order/components/goods-card/index.wxml delete mode 100644 pages/order/components/goods-card/index.wxss delete mode 100644 pages/order/components/noGoods/noGoods.js delete mode 100644 pages/order/components/noGoods/noGoods.json delete mode 100644 pages/order/components/noGoods/noGoods.wxml delete mode 100644 pages/order/components/noGoods/noGoods.wxss delete mode 100644 pages/order/components/order-button-bar/index.js delete mode 100644 pages/order/components/order-button-bar/index.json delete mode 100644 pages/order/components/order-button-bar/index.wxml delete mode 100644 pages/order/components/order-button-bar/index.wxss delete mode 100644 pages/order/components/order-card/index.js delete mode 100644 pages/order/components/order-card/index.json delete mode 100644 pages/order/components/order-card/index.wxml delete mode 100644 pages/order/components/order-card/index.wxss delete mode 100644 pages/order/components/order-goods-card/index.js delete mode 100644 pages/order/components/order-goods-card/index.json delete mode 100644 pages/order/components/order-goods-card/index.wxml delete mode 100644 pages/order/components/reason-sheet/index.js delete mode 100644 pages/order/components/reason-sheet/index.json delete mode 100644 pages/order/components/reason-sheet/index.wxml delete mode 100644 pages/order/components/reason-sheet/index.wxss delete mode 100644 pages/order/components/reason-sheet/reasonSheet.js delete mode 100644 pages/order/components/selectCoupons/mock.js delete mode 100644 pages/order/components/selectCoupons/selectCoupon.wxs delete mode 100644 pages/order/components/selectCoupons/selectCoupons.js delete mode 100644 pages/order/components/selectCoupons/selectCoupons.json delete mode 100644 pages/order/components/selectCoupons/selectCoupons.wxml delete mode 100644 pages/order/components/selectCoupons/selectCoupons.wxss delete mode 100644 pages/order/components/specs-goods-card/index.js delete mode 100644 pages/order/components/specs-goods-card/index.wxml delete mode 100644 pages/order/components/specs-goods-card/index.wxss delete mode 100644 pages/order/config.js delete mode 100644 pages/order/delivery-detail/index.js delete mode 100644 pages/order/delivery-detail/index.json delete mode 100644 pages/order/delivery-detail/index.wxml delete mode 100644 pages/order/delivery-detail/index.wxss delete mode 100644 pages/order/fill-tracking-no/api.js delete mode 100644 pages/order/fill-tracking-no/index.js delete mode 100644 pages/order/fill-tracking-no/index.json delete mode 100644 pages/order/fill-tracking-no/index.wxml delete mode 100644 pages/order/fill-tracking-no/index.wxss delete mode 100644 pages/order/invoice/index.js delete mode 100644 pages/order/invoice/index.json delete mode 100644 pages/order/invoice/index.wxml delete mode 100644 pages/order/invoice/index.wxss delete mode 100644 pages/order/order-confirm/components/address-card/index.js delete mode 100644 pages/order/order-confirm/components/address-card/index.json delete mode 100644 pages/order/order-confirm/components/address-card/index.wxml delete mode 100644 pages/order/order-confirm/components/address-card/index.wxss delete mode 100644 pages/order/order-confirm/getNotes.wxs delete mode 100644 pages/order/order-confirm/handleInvoice.wxs delete mode 100644 pages/order/order-confirm/index.js delete mode 100644 pages/order/order-confirm/index.json delete mode 100644 pages/order/order-confirm/index.wxml delete mode 100644 pages/order/order-confirm/index.wxss delete mode 100644 pages/order/order-confirm/order.wxs delete mode 100644 pages/order/order-confirm/pay.js delete mode 100644 pages/order/order-detail/index.js delete mode 100644 pages/order/order-detail/index.json delete mode 100644 pages/order/order-detail/index.wxml delete mode 100644 pages/order/order-detail/index.wxss delete mode 100644 pages/order/order-list/index.js delete mode 100644 pages/order/order-list/index.json delete mode 100644 pages/order/order-list/index.wxml delete mode 100644 pages/order/order-list/index.wxss delete mode 100644 pages/order/pay-result/index.js delete mode 100644 pages/order/pay-result/index.json delete mode 100644 pages/order/pay-result/index.wxml delete mode 100644 pages/order/pay-result/index.wxss delete mode 100644 pages/order/receipt/index.js delete mode 100644 pages/order/receipt/index.json delete mode 100644 pages/order/receipt/index.wxml delete mode 100644 pages/order/receipt/index.wxss delete mode 100644 pages/promotion-detail/index.js delete mode 100644 pages/promotion-detail/index.json delete mode 100644 pages/promotion-detail/index.wxml delete mode 100644 pages/promotion-detail/index.wxss delete mode 100644 pages/usercenter/address/edit/index.js delete mode 100644 pages/usercenter/address/edit/index.json delete mode 100644 pages/usercenter/address/edit/index.wxml delete mode 100644 pages/usercenter/address/edit/index.wxss delete mode 100644 pages/usercenter/address/edit/util.js delete mode 100644 pages/usercenter/address/list/index.js delete mode 100644 pages/usercenter/address/list/index.json delete mode 100644 pages/usercenter/address/list/index.wxml delete mode 100644 pages/usercenter/address/list/index.wxss delete mode 100644 pages/usercenter/address/list/util.js delete mode 100644 pages/usercenter/components/area-picker-new/index.js delete mode 100644 pages/usercenter/components/area-picker-new/index.json delete mode 100644 pages/usercenter/components/area-picker-new/index.wxml delete mode 100644 pages/usercenter/components/area-picker-new/index.wxss delete mode 100644 pages/usercenter/components/order-group/index.js delete mode 100644 pages/usercenter/components/order-group/index.json delete mode 100644 pages/usercenter/components/order-group/index.wxml delete mode 100644 pages/usercenter/components/order-group/index.wxss delete mode 100644 pages/usercenter/components/t-location/index.js delete mode 100644 pages/usercenter/components/t-location/index.json delete mode 100644 pages/usercenter/components/t-location/index.wxml delete mode 100644 pages/usercenter/components/t-location/index.wxss delete mode 100644 pages/usercenter/components/ui-address-item/index.js delete mode 100644 pages/usercenter/components/ui-address-item/index.json delete mode 100644 pages/usercenter/components/ui-address-item/index.wxml delete mode 100644 pages/usercenter/components/ui-address-item/index.wxss delete mode 100644 pages/usercenter/components/ui-select-picker/index.js delete mode 100644 pages/usercenter/components/ui-select-picker/index.json delete mode 100644 pages/usercenter/components/ui-select-picker/index.wxml delete mode 100644 pages/usercenter/components/ui-select-picker/index.wxss delete mode 100644 pages/usercenter/components/user-center-card/index.js delete mode 100644 pages/usercenter/components/user-center-card/index.json delete mode 100644 pages/usercenter/components/user-center-card/index.wxml delete mode 100644 pages/usercenter/components/user-center-card/index.wxss delete mode 100644 pages/usercenter/index.js delete mode 100644 pages/usercenter/index.json delete mode 100644 pages/usercenter/index.wxml delete mode 100644 pages/usercenter/index.wxss delete mode 100644 pages/usercenter/name-edit/index.js delete mode 100644 pages/usercenter/name-edit/index.json delete mode 100644 pages/usercenter/name-edit/index.wxml delete mode 100644 pages/usercenter/name-edit/index.wxss delete mode 100644 pages/usercenter/person-info/index.js delete mode 100644 pages/usercenter/person-info/index.json delete mode 100644 pages/usercenter/person-info/index.wxml delete mode 100644 pages/usercenter/person-info/index.wxss create mode 100644 services/_utils/pdf.js delete mode 100644 services/activity/fetchActivity.js delete mode 100644 services/activity/fetchActivityList.js delete mode 100644 services/address/fetchAddress.js create mode 100644 services/api/article.js delete mode 100644 services/cart/cart.js delete mode 100644 services/comments/fetchComments.js delete mode 100644 services/comments/fetchCommentsCount.js delete mode 100644 services/coupon/index.js delete mode 100644 services/good/comments/fetchCommentDetail.js delete mode 100644 services/good/featchSearchResult.js delete mode 100644 services/good/fetchCategoryList.js delete mode 100644 services/good/fetchGood.js delete mode 100644 services/good/fetchGoods.js delete mode 100644 services/good/fetchGoodsDetailsComments.js delete mode 100644 services/good/fetchGoodsList.js delete mode 100644 services/good/fetchSearchHistory.js delete mode 100644 services/order/applyService.js delete mode 100644 services/order/orderConfirm.js delete mode 100644 services/order/orderDetail.js delete mode 100644 services/order/orderList.js delete mode 100644 services/order/orderSubmitComment.js delete mode 100644 services/promotion/detail.js delete mode 100644 services/usercenter/fetchPerson.js delete mode 100644 services/usercenter/fetchUsercenter.js delete mode 100644 utils/addressParse.js delete mode 100644 utils/getPermission.js delete mode 100644 utils/mock.js delete mode 100644 utils/util.js diff --git a/app.json b/app.json index 148fc4b..9ad5d2d 100644 --- a/app.json +++ b/app.json @@ -1,34 +1,6 @@ { "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/home/session/session", "pages/home/additive/additive", "pages/home/chemical/chemical", @@ -36,7 +8,8 @@ "pages/standard/list/index", "pages/user/index", "pages/user/session-list/index", - "pages/user/edit/index" + "pages/user/edit/index", + "pages/info/content-page/index" ], "tabBar": { "custom": true, diff --git a/components/goods-card/index.js b/components/goods-card/index.js deleted file mode 100644 index eb75361..0000000 --- a/components/goods-card/index.js +++ /dev/null @@ -1,141 +0,0 @@ -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/components/goods-card/index.json b/components/goods-card/index.json deleted file mode 100644 index f199647..0000000 --- a/components/goods-card/index.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "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/components/goods-card/index.wxml b/components/goods-card/index.wxml deleted file mode 100644 index 1292f65..0000000 --- a/components/goods-card/index.wxml +++ /dev/null @@ -1,63 +0,0 @@ - - - - - - - - - {{ goods.title }} - - - - {{tag}} - - - - - - - - - - - - diff --git a/components/goods-card/index.wxss b/components/goods-card/index.wxss deleted file mode 100644 index 1326d59..0000000 --- a/components/goods-card/index.wxss +++ /dev/null @@ -1,133 +0,0 @@ -.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/components/goods-list/index.js b/components/goods-list/index.js deleted file mode 100644 index 5184903..0000000 --- a/components/goods-list/index.js +++ /dev/null @@ -1,62 +0,0 @@ -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/components/goods-list/index.json b/components/goods-list/index.json deleted file mode 100644 index bdaa23d..0000000 --- a/components/goods-list/index.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "component": true, - "usingComponents": { - "goods-card": "/components/goods-card/index" - } -} \ No newline at end of file diff --git a/components/goods-list/index.wxml b/components/goods-list/index.wxml deleted file mode 100644 index 5a9a804..0000000 --- a/components/goods-list/index.wxml +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - diff --git a/components/goods-list/index.wxss b/components/goods-list/index.wxss deleted file mode 100644 index 7262a4d..0000000 --- a/components/goods-list/index.wxss +++ /dev/null @@ -1,7 +0,0 @@ -.goods-list-wrap { - display: flex; - flex-flow: row wrap; - justify-content: space-between; - padding: 0; - background: #fff; -} diff --git a/components/loading-content/index.wxml b/components/loading-content/index.wxml index add589c..1f39412 100644 --- a/components/loading-content/index.wxml +++ b/components/loading-content/index.wxml @@ -1,11 +1,5 @@ - - - - - - + + + + + \ No newline at end of file diff --git a/components/price/index.js b/components/price/index.js deleted file mode 100644 index c0218f7..0000000 --- a/components/price/index.js +++ /dev/null @@ -1,71 +0,0 @@ -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/components/price/index.json b/components/price/index.json deleted file mode 100644 index a89ef4d..0000000 --- a/components/price/index.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "component": true, - "usingComponents": {} -} diff --git a/components/price/index.wxml b/components/price/index.wxml deleted file mode 100644 index 7f4f9d9..0000000 --- a/components/price/index.wxml +++ /dev/null @@ -1,21 +0,0 @@ - - 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/components/price/index.wxss b/components/price/index.wxss deleted file mode 100644 index 45da266..0000000 --- a/components/price/index.wxss +++ /dev/null @@ -1,66 +0,0 @@ -: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/components/swipeout/index.wxml b/components/swipeout/index.wxml index 353bf72..dc343d8 100644 --- a/components/swipeout/index.wxml +++ b/components/swipeout/index.wxml @@ -4,7 +4,7 @@ var owner; var state; - var getState = function(ownerInstance) { + var getState = function (ownerInstance) { owner = ownerInstance; state = owner.getState(); state.leftWidth = state.leftWidth || 0; @@ -13,7 +13,7 @@ state.startOffset = state.startOffset || 0; }; - var initRightWidth = function(newVal, oldVal, ownerInstance) { + var initRightWidth = function (newVal, oldVal, ownerInstance) { getState(ownerInstance); state.rightWidth = newVal; if (state.offset < 0) { @@ -21,7 +21,7 @@ } }; - var initLeftWidth = function(newVal, oldVal, ownerInstance) { + var initLeftWidth = function (newVal, oldVal, ownerInstance) { getState(ownerInstance); state.leftWidth = newVal; if (state.offset > 0) { @@ -29,7 +29,7 @@ } } - var resetTouchStatus = function() { + var resetTouchStatus = function () { state.direction = ''; state.deltaX = 0; state.deltaY = 0; @@ -37,7 +37,7 @@ state.offsetY = 0; }; - var touchMove = function(event) { + var touchMove = function (event) { var touchPoint = event.touches[0]; state.deltaX = touchPoint.clientX - state.startX; state.deltaY = touchPoint.clientY - state.startY; @@ -46,7 +46,7 @@ state.direction = state.direction || getDirection(state.offsetX, state.offsetY); }; - var getDirection = function(x, y) { + var getDirection = function (x, y) { if (x > y && x > MIN_DISTANCE) { return 'horizontal'; } @@ -56,11 +56,11 @@ return ''; }; - var range = function(num, min, max) { + var range = function (num, min, max) { return Math.min(Math.max(num, min), max); }; - var swipeMove = function(_offset = 0) { + var swipeMove = function (_offset = 0) { state.offset = range( _offset, -state.rightWidth, @@ -79,11 +79,11 @@ }); }; - var close = function() { + var close = function () { swipeMove(0); }; - var onCloseChange = function(newVal, oldVal, ownerInstance) { + var onCloseChange = function (newVal, oldVal, ownerInstance) { getState(ownerInstance); if (newVal === oldVal) return; if (newVal) { @@ -91,7 +91,7 @@ } }; - var touchStart = function(event) { + var touchStart = function (event) { resetTouchStatus(); state.startOffset = state.offset; var touchPoint = event.touches[0]; @@ -100,12 +100,12 @@ owner.callMethod('closeOther'); }; - var startDrag = function(event, ownerInstance) { + var startDrag = function (event, ownerInstance) { getState(ownerInstance); touchStart(event); }; - var onDrag = function(event, ownerInstance) { + var onDrag = function (event, ownerInstance) { getState(ownerInstance); touchMove(event); if (state.direction !== 'horizontal') { @@ -115,13 +115,13 @@ swipeMove(state.startOffset + state.deltaX); }; - var open = function(position) { + var open = function (position) { var _offset = position === 'left' ? +state.leftWidth : -state.rightWidth; owner.callMethod('open', { position: position }); swipeMove(_offset); }; - var endDrag = function(event, ownerInstance) { + var endDrag = function (event, ownerInstance) { getState(ownerInstance); state.dragging = false; // 左/右侧有可滑动区域,且当前不是已open状态,且滑动幅度超过阈值时open左/右侧(滚动到该侧的最边上) @@ -147,21 +147,7 @@ }; - + @@ -171,4 +157,4 @@ - + \ No newline at end of file diff --git a/components/tox-icon/index.js b/components/tox-icon/index.js new file mode 100644 index 0000000..803a347 --- /dev/null +++ b/components/tox-icon/index.js @@ -0,0 +1,31 @@ +// components/tox-icon/index.js +Component({ + /** + * 组件的属性列表 + */ + properties: { + ghsLevel: { + type: Number, + value: 99, + observer(ghsLevel) { + this.setData({ + ghsLevel, + }); + }, + }, + }, + + /** + * 组件的初始数据 + */ + data: { + iconUrl: 'https://webplus-cn-hangzhou-s-603871eef968dd14ced82ed5.oss-cn-hangzhou.aliyuncs.com/hextech/static/tox.svg', + }, + + /** + * 组件的方法列表 + */ + methods: { + + } +}) \ No newline at end of file diff --git a/pages/coupon/components/floating-button/index.json b/components/tox-icon/index.json similarity index 100% rename from pages/coupon/components/floating-button/index.json rename to components/tox-icon/index.json diff --git a/components/tox-icon/index.wxml b/components/tox-icon/index.wxml new file mode 100644 index 0000000..c0de1ea --- /dev/null +++ b/components/tox-icon/index.wxml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/components/tox-icon/index.wxss b/components/tox-icon/index.wxss new file mode 100644 index 0000000..5768bcd --- /dev/null +++ b/components/tox-icon/index.wxss @@ -0,0 +1 @@ +/* components/tox-icon/index.wxss */ \ No newline at end of file diff --git a/components/tox-tag/index.js b/components/tox-tag/index.js new file mode 100644 index 0000000..c27c4d9 --- /dev/null +++ b/components/tox-tag/index.js @@ -0,0 +1,85 @@ +// components/tox-tag/index.js +Component({ + /** + * 组件的属性列表 + */ + properties: { + ghsLevel: { + type: Number, + value: 99, + observer(ghsLevel) { + this.setData({ + ghsLevel, + levelName: this.data.ghsMap[ghsLevel].text, + levelTheme: this.data.ghsMap[ghsLevel].theme, + }); + }, + }, + size: { + type: String, + value: 'medium', + observer(size) { + this.setData({ + size, + }); + }, + }, + variant: { + type: String, + value: 'dark', + observer(variant) { + this.setData({ + variant, + }); + }, + }, + }, + + /** + * 组件的初始数据 + */ + data: { + size: '', + variant: '', + levelName: '', + ghsLevel: 99, + levelTheme: 'success', + ghsMap: { + 0: { + theme: 'success', + text: '无毒', + }, + 5: { + theme: 'warning', + text: '可能有害', + }, + 4: { + theme: 'danger', + text: '有害', + }, + 3: { + theme: 'danger', + text: '有毒', + }, + 2: { + theme: 'danger', + text: '致命', + }, + 1: { + theme: 'danger', + text: '致命', + }, + 99: { + theme: 'success', + text: '', + }, + }, + }, + + /** + * 组件的方法列表 + */ + methods: { + + } +}) \ No newline at end of file diff --git a/pages/order/components/specs-goods-card/index.json b/components/tox-tag/index.json similarity index 54% rename from pages/order/components/specs-goods-card/index.json rename to components/tox-tag/index.json index ccbce72..eb6654d 100644 --- a/pages/order/components/specs-goods-card/index.json +++ b/components/tox-tag/index.json @@ -1,6 +1,6 @@ { "component": true, "usingComponents": { - "goods-card": "../goods-card/index" + "t-tag": "tdesign-miniprogram/tag/tag" } } \ No newline at end of file diff --git a/components/tox-tag/index.wxml b/components/tox-tag/index.wxml new file mode 100644 index 0000000..b846ac8 --- /dev/null +++ b/components/tox-tag/index.wxml @@ -0,0 +1,2 @@ + +{{levelName}} \ No newline at end of file diff --git a/components/tox-tag/index.wxss b/components/tox-tag/index.wxss new file mode 100644 index 0000000..37488a5 --- /dev/null +++ b/components/tox-tag/index.wxss @@ -0,0 +1 @@ +/* components/tox-tag/index.wxss */ \ No newline at end of file diff --git a/components/webp-image/index.js b/components/webp-image/index.js deleted file mode 100644 index 1706049..0000000 --- a/components/webp-image/index.js +++ /dev/null @@ -1,86 +0,0 @@ -/* - * @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/components/webp-image/index.json b/components/webp-image/index.json deleted file mode 100644 index 6ffda42..0000000 --- a/components/webp-image/index.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "component": true, - "usingComponents": { - "t-image": "tdesign-miniprogram/image/image" - } -} \ No newline at end of file diff --git a/components/webp-image/index.wxml b/components/webp-image/index.wxml deleted file mode 100644 index b32c199..0000000 --- a/components/webp-image/index.wxml +++ /dev/null @@ -1,14 +0,0 @@ - - diff --git a/components/webp-image/index.wxss b/components/webp-image/index.wxss deleted file mode 100644 index e69de29..0000000 diff --git a/components/webp-image/utils.wxs b/components/webp-image/utils.wxs deleted file mode 100644 index 4f6e5d1..0000000 --- a/components/webp-image/utils.wxs +++ /dev/null @@ -1,140 +0,0 @@ -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/custom-tab-bar/index.js b/custom-tab-bar/index.js index 90c58df..47634b4 100644 --- a/custom-tab-bar/index.js +++ b/custom-tab-bar/index.js @@ -7,11 +7,12 @@ Component({ methods: { onChange(event) { - this.setData({ active: event.detail.value }); + 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}`, + url: this.data.list[event.detail.value].url.startsWith('/') ? + this.data.list[event.detail.value].url : `/${this.data.list[event.detail.value].url}`, }); }, @@ -20,10 +21,12 @@ Component({ const route = page ? page.route.split('?')[0] : ''; const active = this.data.list.findIndex( (item) => - (item.url.startsWith('/') ? item.url.substr(1) : item.url) === - `${route}`, + (item.url.startsWith('/') ? item.url.substr(1) : item.url) === + `${route}`, ); - this.setData({ active }); + this.setData({ + active + }); }, }, -}); +}); \ No newline at end of file diff --git a/custom-tab-bar/index.json b/custom-tab-bar/index.json index 917a4e1..c8ba0bd 100644 --- a/custom-tab-bar/index.json +++ b/custom-tab-bar/index.json @@ -2,7 +2,7 @@ "component": true, "usingComponents": { "t-tab-bar": "tdesign-miniprogram/tab-bar/tab-bar", - "t-tab-bar-item": "tdesign-miniprogram/tab-bar/tab-bar-item", + "t-tab-bar-item": "tdesign-miniprogram/tab-bar-item/tab-bar-item", "t-icon": "tdesign-miniprogram/icon/icon" } } \ No newline at end of file diff --git a/images/additive.jpg b/images/additive.jpg deleted file mode 100644 index d95a5a9a051a92c29c16a5c1e0258227a029af94..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 17063 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 DR}Jk$ diff --git a/images/check.png b/images/check.png deleted file mode 100644 index db44445c04c8b05f4bab1e4427fb3dd49a48cb2a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 42656 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 TcSF!ed%U8H)%mRL@Z^60{q23f diff --git a/images/chemical.png b/images/chemical.png deleted file mode 100644 index e33388532ad084570bfbde62f2385fea6d28eb1e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 24649 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 diff --git a/images/history.png b/images/history.png deleted file mode 100644 index b92d88363a842048cc3a8f800846674f6046d94a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2732 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 diff --git a/images/question.png b/images/question.png deleted file mode 100644 index 4cad787abb6e7c6b536ec54b42ad75e68d23b59c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5304 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 diff --git a/images/search.jpg b/images/search.jpg deleted file mode 100644 index 2b495ecf874810725f6a8d3d517283666a961d77..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 44130 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 V{~7v^1pXs||486p68L-O{{g&9Bu)ST diff --git a/images/standard.jpg b/images/standard.jpg deleted file mode 100644 index 35f977c3f3e4a9d76363a3c5c14ba27db4ff54fe..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 39555 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 T?bmp5<01ytP$Y3Np6CA$I|#z= diff --git a/images/use_btn.jpg b/images/use_btn.jpg deleted file mode 100644 index 6179d6a09a5cec4982ae9b66e962a7bf37b671a2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 20394 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 XA|fm+Y9b;Kh=_zDA|VKfh(iC_6mY7k diff --git a/images/weixin.png b/images/weixin.png deleted file mode 100644 index 1d953c2383efe55aec4bb6a3ef02e6acb77fbb3e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5387 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 diff --git a/model/activities.js b/model/activities.js deleted file mode 100644 index 31bc3b8..0000000 --- a/model/activities.js +++ /dev/null @@ -1,7 +0,0 @@ -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/model/activity.js b/model/activity.js deleted file mode 100644 index 34abb07..0000000 --- a/model/activity.js +++ /dev/null @@ -1,18 +0,0 @@ -/** - * @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/model/address.js b/model/address.js deleted file mode 100644 index c7ae8dc..0000000 --- a/model/address.js +++ /dev/null @@ -1,31 +0,0 @@ -/** 地址 */ -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/model/cart.js b/model/cart.js deleted file mode 100644 index d0ad6c5..0000000 --- a/model/cart.js +++ /dev/null @@ -1,324 +0,0 @@ -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/model/category.js b/model/category.js deleted file mode 100644 index 81b7502..0000000 --- a/model/category.js +++ /dev/null @@ -1,206 +0,0 @@ -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/model/comments.js b/model/comments.js deleted file mode 100644 index 78dd61d..0000000 --- a/model/comments.js +++ /dev/null @@ -1,338 +0,0 @@ -/** - * * @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/model/comments/queryDetail.js b/model/comments/queryDetail.js deleted file mode 100644 index 9ce2eb8..0000000 --- a/model/comments/queryDetail.js +++ /dev/null @@ -1,50 +0,0 @@ -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/model/coupon.js b/model/coupon.js deleted file mode 100644 index a41ff8b..0000000 --- a/model/coupon.js +++ /dev/null @@ -1,39 +0,0 @@ -/** - * 优惠券 - * - * @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/model/detailsComments.js b/model/detailsComments.js deleted file mode 100644 index 82fc887..0000000 --- a/model/detailsComments.js +++ /dev/null @@ -1,30 +0,0 @@ -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/model/good.js b/model/good.js deleted file mode 100644 index 9410d37..0000000 --- a/model/good.js +++ /dev/null @@ -1,1916 +0,0 @@ -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: 'https://cdn-we-retail.ym.tencent.com/tsr/goods/nz-09a.png', - images: [ - 'https://cdn-we-retail.ym.tencent.com/tsr/goods/nz-09a.png', - 'https://cdn-we-retail.ym.tencent.com/tsr/goods/nz-09b.png', - ], - video: null, - available: 1, - minSalePrice: 29800, - minLinePrice: 29800, - maxSalePrice: 29800, - 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: '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: '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], - }; -} diff --git a/model/goods.js b/model/goods.js deleted file mode 100644 index 850e0ba..0000000 --- a/model/goods.js +++ /dev/null @@ -1,7 +0,0 @@ -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/model/order/applyService.js b/model/order/applyService.js deleted file mode 100644 index e3a2fdf..0000000 --- a/model/order/applyService.js +++ /dev/null @@ -1,295 +0,0 @@ -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/model/order/orderConfirm.js b/model/order/orderConfirm.js deleted file mode 100644 index 7170492..0000000 --- a/model/order/orderConfirm.js +++ /dev/null @@ -1,147 +0,0 @@ -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/model/order/orderDetail.js b/model/order/orderDetail.js deleted file mode 100644 index 032a08b..0000000 --- a/model/order/orderDetail.js +++ /dev/null @@ -1,1212 +0,0 @@ -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/model/order/orderList.js b/model/order/orderList.js deleted file mode 100644 index a581fbb..0000000 --- a/model/order/orderList.js +++ /dev/null @@ -1,1054 +0,0 @@ -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/model/promotion.js b/model/promotion.js deleted file mode 100644 index 0aaee61..0000000 --- a/model/promotion.js +++ /dev/null @@ -1,21 +0,0 @@ -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/model/search.js b/model/search.js deleted file mode 100644 index 2d2e68d..0000000 --- a/model/search.js +++ /dev/null @@ -1,60 +0,0 @@ -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/model/submitComment.js b/model/submitComment.js deleted file mode 100644 index e620b4f..0000000 --- a/model/submitComment.js +++ /dev/null @@ -1,58 +0,0 @@ -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/model/swiper.js b/model/swiper.js index 3df27bb..1284c50 100644 --- a/model/swiper.js +++ b/model/swiper.js @@ -1,5 +1,5 @@ const images = [{ - img: '/images/use_btn.jpg', + img: 'https://webplus-cn-hangzhou-s-603871eef968dd14ced82ed5.oss-cn-hangzhou.aliyuncs.com/hextech/static/use_btn.jpg', text: '1', }, { diff --git a/model/usercenter.js b/model/usercenter.js deleted file mode 100644 index 8822f4f..0000000 --- a/model/usercenter.js +++ /dev/null @@ -1,52 +0,0 @@ -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/pages/cart/components/cart-bar/index.js b/pages/cart/components/cart-bar/index.js deleted file mode 100644 index db7736c..0000000 --- a/pages/cart/components/cart-bar/index.js +++ /dev/null @@ -1,59 +0,0 @@ -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/pages/cart/components/cart-bar/index.json b/pages/cart/components/cart-bar/index.json deleted file mode 100644 index c6c4351..0000000 --- a/pages/cart/components/cart-bar/index.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "component": true, - "usingComponents": { - "price": "/components/price/index", - "t-icon": "tdesign-miniprogram/icon/icon" - } -} \ No newline at end of file diff --git a/pages/cart/components/cart-bar/index.wxml b/pages/cart/components/cart-bar/index.wxml deleted file mode 100644 index 486a0d5..0000000 --- a/pages/cart/components/cart-bar/index.wxml +++ /dev/null @@ -1,31 +0,0 @@ - - - - 全选 - - - 总计 - - (不含运费) - - - 已优惠 - - - - - - diff --git a/pages/cart/components/cart-bar/index.wxss b/pages/cart/components/cart-bar/index.wxss deleted file mode 100644 index 0e63f60..0000000 --- a/pages/cart/components/cart-bar/index.wxss +++ /dev/null @@ -1,80 +0,0 @@ -.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/pages/cart/components/cart-empty/index.js b/pages/cart/components/cart-empty/index.js deleted file mode 100644 index 01cf9c3..0000000 --- a/pages/cart/components/cart-empty/index.js +++ /dev/null @@ -1,23 +0,0 @@ -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/pages/cart/components/cart-empty/index.json b/pages/cart/components/cart-empty/index.json deleted file mode 100644 index b659310..0000000 --- a/pages/cart/components/cart-empty/index.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "component": true, - "usingComponents": { - "t-image": "/components/webp-image/index" - } -} \ No newline at end of file diff --git a/pages/cart/components/cart-empty/index.wxml b/pages/cart/components/cart-empty/index.wxml deleted file mode 100644 index d0cdd43..0000000 --- a/pages/cart/components/cart-empty/index.wxml +++ /dev/null @@ -1,6 +0,0 @@ - - - {{tip}} - {{btnText}} - - diff --git a/pages/cart/components/cart-empty/index.wxss b/pages/cart/components/cart-empty/index.wxss deleted file mode 100644 index d074bc3..0000000 --- a/pages/cart/components/cart-empty/index.wxss +++ /dev/null @@ -1,33 +0,0 @@ -.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/pages/cart/components/cart-group/index.js b/pages/cart/components/cart-group/index.js deleted file mode 100644 index 99a908d..0000000 --- a/pages/cart/components/cart-group/index.js +++ /dev/null @@ -1,166 +0,0 @@ -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/pages/cart/components/cart-group/index.json b/pages/cart/components/cart-group/index.json deleted file mode 100644 index 9b8003d..0000000 --- a/pages/cart/components/cart-group/index.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "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/pages/cart/components/cart-group/index.wxml b/pages/cart/components/cart-group/index.wxml deleted file mode 100644 index 63fe3dd..0000000 --- a/pages/cart/components/cart-group/index.wxml +++ /dev/null @@ -1,185 +0,0 @@ - - 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/pages/cart/components/cart-group/index.wxss b/pages/cart/components/cart-group/index.wxss deleted file mode 100644 index 641101f..0000000 --- a/pages/cart/components/cart-group/index.wxss +++ /dev/null @@ -1,335 +0,0 @@ -.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/pages/cart/components/cart-group/utils.wxs b/pages/cart/components/cart-group/utils.wxs deleted file mode 100644 index f887eba..0000000 --- a/pages/cart/components/cart-group/utils.wxs +++ /dev/null @@ -1,20 +0,0 @@ -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/pages/cart/components/goods-card/index.js b/pages/cart/components/goods-card/index.js deleted file mode 100644 index c59658c..0000000 --- a/pages/cart/components/goods-card/index.js +++ /dev/null @@ -1,243 +0,0 @@ -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/pages/cart/components/goods-card/index.json b/pages/cart/components/goods-card/index.json deleted file mode 100644 index d76303b..0000000 --- a/pages/cart/components/goods-card/index.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "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/pages/cart/components/goods-card/index.wxml b/pages/cart/components/goods-card/index.wxml deleted file mode 100644 index df4111f..0000000 --- a/pages/cart/components/goods-card/index.wxml +++ /dev/null @@ -1,75 +0,0 @@ - - diff --git a/pages/cart/components/goods-card/index.wxss b/pages/cart/components/goods-card/index.wxss deleted file mode 100644 index 6a7a4da..0000000 --- a/pages/cart/components/goods-card/index.wxss +++ /dev/null @@ -1,260 +0,0 @@ -.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/pages/cart/components/specs-popup/index.js b/pages/cart/components/specs-popup/index.js deleted file mode 100644 index 650d2aa..0000000 --- a/pages/cart/components/specs-popup/index.js +++ /dev/null @@ -1,72 +0,0 @@ -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/pages/cart/components/specs-popup/index.json b/pages/cart/components/specs-popup/index.json deleted file mode 100644 index d59fc6d..0000000 --- a/pages/cart/components/specs-popup/index.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "component": true, - "usingComponents": { - "t-popup": "tdesign-miniprogram/popup/popup", - "goods-card": "../../components/goods-card/index" - } -} \ No newline at end of file diff --git a/pages/cart/components/specs-popup/index.wxml b/pages/cart/components/specs-popup/index.wxml deleted file mode 100644 index 4ddcb43..0000000 --- a/pages/cart/components/specs-popup/index.wxml +++ /dev/null @@ -1,26 +0,0 @@ - - - - - - 已选规格 - - {{spec}} - - - - - 我知道了 - - - diff --git a/pages/cart/components/specs-popup/index.wxss b/pages/cart/components/specs-popup/index.wxss deleted file mode 100644 index 359c185..0000000 --- a/pages/cart/components/specs-popup/index.wxss +++ /dev/null @@ -1,68 +0,0 @@ -.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/pages/cart/index.js b/pages/cart/index.js deleted file mode 100644 index 3fd6d61..0000000 --- a/pages/cart/index.js +++ /dev/null @@ -1,315 +0,0 @@ -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/pages/cart/index.json b/pages/cart/index.json deleted file mode 100644 index 1d2e717..0000000 --- a/pages/cart/index.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "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/pages/cart/index.wxml b/pages/cart/index.wxml deleted file mode 100644 index aa1acec..0000000 --- a/pages/cart/index.wxml +++ /dev/null @@ -1,31 +0,0 @@ - - - - - - - - - - - - diff --git a/pages/cart/index.wxss b/pages/cart/index.wxss deleted file mode 100644 index 4eec899..0000000 --- a/pages/cart/index.wxss +++ /dev/null @@ -1,12 +0,0 @@ -:host { - padding-bottom: 100rpx; -} - -.gap { - height: 100rpx; - width: 100%; -} - -.add-notes__confirm { - color: #fa4126 !important; -} diff --git a/pages/coupon/components/coupon-card/index.js b/pages/coupon/components/coupon-card/index.js deleted file mode 100644 index 07785fe..0000000 --- a/pages/coupon/components/coupon-card/index.js +++ /dev/null @@ -1,57 +0,0 @@ -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/pages/coupon/components/coupon-card/index.json b/pages/coupon/components/coupon-card/index.json deleted file mode 100644 index 2d851d1..0000000 --- a/pages/coupon/components/coupon-card/index.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "component": true, - "usingComponents": { - "ui-coupon-card": "../ui-coupon-card/index", - "t-button": "tdesign-miniprogram/button/button" - } -} diff --git a/pages/coupon/components/coupon-card/index.wxml b/pages/coupon/components/coupon-card/index.wxml deleted file mode 100644 index 3c8315e..0000000 --- a/pages/coupon/components/coupon-card/index.wxml +++ /dev/null @@ -1,17 +0,0 @@ - - - {{btnText}} - - - - diff --git a/pages/coupon/components/coupon-card/index.wxss b/pages/coupon/components/coupon-card/index.wxss deleted file mode 100644 index 666e4b4..0000000 --- a/pages/coupon/components/coupon-card/index.wxss +++ /dev/null @@ -1,12 +0,0 @@ -.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/pages/coupon/components/floating-button/index.js b/pages/coupon/components/floating-button/index.js deleted file mode 100644 index f29bcad..0000000 --- a/pages/coupon/components/floating-button/index.js +++ /dev/null @@ -1,17 +0,0 @@ -Component({ - data: { icon: 'cart' }, - - properties: { - count: { - type: Number, - }, - }, - - methods: { - goToCart() { - wx.switchTab({ - url: '/pages/cart/index', - }); - }, - }, -}); diff --git a/pages/coupon/components/floating-button/index.wxml b/pages/coupon/components/floating-button/index.wxml deleted file mode 100644 index 7f1a9e7..0000000 --- a/pages/coupon/components/floating-button/index.wxml +++ /dev/null @@ -1,14 +0,0 @@ - - - - - - {{count}} - - - diff --git a/pages/coupon/components/floating-button/index.wxss b/pages/coupon/components/floating-button/index.wxss deleted file mode 100644 index faad943..0000000 --- a/pages/coupon/components/floating-button/index.wxss +++ /dev/null @@ -1,30 +0,0 @@ -.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/pages/coupon/components/ui-coupon-card/index.js b/pages/coupon/components/ui-coupon-card/index.js deleted file mode 100644 index 9101be8..0000000 --- a/pages/coupon/components/ui-coupon-card/index.js +++ /dev/null @@ -1,87 +0,0 @@ -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/pages/coupon/components/ui-coupon-card/index.json b/pages/coupon/components/ui-coupon-card/index.json deleted file mode 100644 index dd874c8..0000000 --- a/pages/coupon/components/ui-coupon-card/index.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "component": true, - "usingComponents": { - "t-icon": "tdesign-miniprogram/icon/icon", - "t-image": "/components/webp-image/index" - } -} \ No newline at end of file diff --git a/pages/coupon/components/ui-coupon-card/index.wxml b/pages/coupon/components/ui-coupon-card/index.wxml deleted file mode 100644 index baf53d9..0000000 --- a/pages/coupon/components/ui-coupon-card/index.wxml +++ /dev/null @@ -1,54 +0,0 @@ - - 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/pages/coupon/components/ui-coupon-card/index.wxss b/pages/coupon/components/ui-coupon-card/index.wxss deleted file mode 100644 index 0ef9648..0000000 --- a/pages/coupon/components/ui-coupon-card/index.wxss +++ /dev/null @@ -1,147 +0,0 @@ -.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/pages/coupon/coupon-activity-goods/index.js b/pages/coupon/coupon-activity-goods/index.js deleted file mode 100644 index bf08d36..0000000 --- a/pages/coupon/coupon-activity-goods/index.js +++ /dev/null @@ -1,78 +0,0 @@ -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/pages/coupon/coupon-activity-goods/index.json b/pages/coupon/coupon-activity-goods/index.json deleted file mode 100644 index 31cf9c3..0000000 --- a/pages/coupon/coupon-activity-goods/index.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "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/pages/coupon/coupon-activity-goods/index.wxml b/pages/coupon/coupon-activity-goods/index.wxml deleted file mode 100644 index a10ddd0..0000000 --- a/pages/coupon/coupon-activity-goods/index.wxml +++ /dev/null @@ -1,54 +0,0 @@ - - - - 以下商品可使用 - {{couponTypeDesc}} - 优惠券 - - - - - - - - - - - - 规则详情 - - - - 优惠券有效时间 - {{detail.timeLimit}} - - - 优惠券说明 - {{detail.desc}} - - - 使用须知 - {{detail.useNotes}} - - - - - - - diff --git a/pages/coupon/coupon-activity-goods/index.wxss b/pages/coupon/coupon-activity-goods/index.wxss deleted file mode 100644 index be5fdaf..0000000 --- a/pages/coupon/coupon-activity-goods/index.wxss +++ /dev/null @@ -1,74 +0,0 @@ -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/pages/coupon/coupon-detail/index.js b/pages/coupon/coupon-detail/index.js deleted file mode 100644 index 71ff5d6..0000000 --- a/pages/coupon/coupon-detail/index.js +++ /dev/null @@ -1,32 +0,0 @@ -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/pages/coupon/coupon-detail/index.json b/pages/coupon/coupon-detail/index.json deleted file mode 100644 index d419a0b..0000000 --- a/pages/coupon/coupon-detail/index.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "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/pages/coupon/coupon-detail/index.wxml b/pages/coupon/coupon-detail/index.wxml deleted file mode 100644 index 5d1b906..0000000 --- a/pages/coupon/coupon-detail/index.wxml +++ /dev/null @@ -1,48 +0,0 @@ - - - - - - - - - - - - - - - - 查看可用商品 - - - - diff --git a/pages/coupon/coupon-detail/index.wxss b/pages/coupon/coupon-detail/index.wxss deleted file mode 100644 index eddcf25..0000000 --- a/pages/coupon/coupon-detail/index.wxss +++ /dev/null @@ -1,100 +0,0 @@ -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/pages/coupon/coupon-list/index.js b/pages/coupon/coupon-list/index.js deleted file mode 100644 index f3b8675..0000000 --- a/pages/coupon/coupon-list/index.js +++ /dev/null @@ -1,77 +0,0 @@ -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/pages/coupon/coupon-list/index.json b/pages/coupon/coupon-list/index.json deleted file mode 100644 index c09d584..0000000 --- a/pages/coupon/coupon-list/index.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "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/pages/coupon/coupon-list/index.wxml b/pages/coupon/coupon-list/index.wxml deleted file mode 100644 index 391fe7b..0000000 --- a/pages/coupon/coupon-list/index.wxml +++ /dev/null @@ -1,42 +0,0 @@ - - - - - - - - - - - - 领券中心 - - - - - diff --git a/pages/coupon/coupon-list/index.wxss b/pages/coupon/coupon-list/index.wxss deleted file mode 100644 index 9ee2b9d..0000000 --- a/pages/coupon/coupon-list/index.wxss +++ /dev/null @@ -1,78 +0,0 @@ -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/pages/goods/category/components/goods-category/components/c-sidebar/README.md b/pages/goods/category/components/goods-category/components/c-sidebar/README.md deleted file mode 100644 index 88d7b0b..0000000 --- a/pages/goods/category/components/goods-category/components/c-sidebar/README.md +++ /dev/null @@ -1,95 +0,0 @@ -# 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/pages/goods/category/components/goods-category/components/c-sidebar/c-sidebar-item/index.js b/pages/goods/category/components/goods-category/components/c-sidebar/c-sidebar-item/index.js deleted file mode 100644 index 810d5e5..0000000 --- a/pages/goods/category/components/goods-category/components/c-sidebar/c-sidebar-item/index.js +++ /dev/null @@ -1,51 +0,0 @@ -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/pages/goods/category/components/goods-category/components/c-sidebar/c-sidebar-item/index.json b/pages/goods/category/components/goods-category/components/c-sidebar/c-sidebar-item/index.json deleted file mode 100644 index e8cfaaf..0000000 --- a/pages/goods/category/components/goods-category/components/c-sidebar/c-sidebar-item/index.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "component": true, - "usingComponents": {} -} \ No newline at end of file diff --git a/pages/goods/category/components/goods-category/components/c-sidebar/c-sidebar-item/index.wxml b/pages/goods/category/components/goods-category/components/c-sidebar/c-sidebar-item/index.wxml deleted file mode 100644 index 435f1e9..0000000 --- a/pages/goods/category/components/goods-category/components/c-sidebar/c-sidebar-item/index.wxml +++ /dev/null @@ -1,10 +0,0 @@ - - - {{ title }} - - diff --git a/pages/goods/category/components/goods-category/components/c-sidebar/c-sidebar-item/index.wxss b/pages/goods/category/components/goods-category/components/c-sidebar/c-sidebar-item/index.wxss deleted file mode 100644 index 28d50dc..0000000 --- a/pages/goods/category/components/goods-category/components/c-sidebar/c-sidebar-item/index.wxss +++ /dev/null @@ -1,60 +0,0 @@ -.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/pages/goods/category/components/goods-category/components/c-sidebar/index.js b/pages/goods/category/components/goods-category/components/c-sidebar/index.js deleted file mode 100644 index b057ad1..0000000 --- a/pages/goods/category/components/goods-category/components/c-sidebar/index.js +++ /dev/null @@ -1,106 +0,0 @@ -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/pages/goods/category/components/goods-category/components/c-sidebar/index.json b/pages/goods/category/components/goods-category/components/c-sidebar/index.json deleted file mode 100644 index 84ff738..0000000 --- a/pages/goods/category/components/goods-category/components/c-sidebar/index.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "component": true -} - \ No newline at end of file diff --git a/pages/goods/category/components/goods-category/components/c-sidebar/index.wxml b/pages/goods/category/components/goods-category/components/c-sidebar/index.wxml deleted file mode 100644 index a1fe026..0000000 --- a/pages/goods/category/components/goods-category/components/c-sidebar/index.wxml +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/pages/goods/category/components/goods-category/components/c-sidebar/index.wxss b/pages/goods/category/components/goods-category/components/c-sidebar/index.wxss deleted file mode 100644 index 95e59ff..0000000 --- a/pages/goods/category/components/goods-category/components/c-sidebar/index.wxss +++ /dev/null @@ -1,9 +0,0 @@ -.c-sidebar { - width: 176rpx; - height: 100vh; -} -.c-sidebar::-webkit-scrollbar { - width: 0; - height: 0; - color: transparent; -} diff --git a/pages/goods/category/components/goods-category/components/c-tabbar/c-tabbar-more/index.js b/pages/goods/category/components/goods-category/components/c-tabbar/c-tabbar-more/index.js deleted file mode 100644 index 2b6f95d..0000000 --- a/pages/goods/category/components/goods-category/components/c-tabbar/c-tabbar-more/index.js +++ /dev/null @@ -1,37 +0,0 @@ -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/pages/goods/category/components/goods-category/components/c-tabbar/c-tabbar-more/index.json b/pages/goods/category/components/goods-category/components/c-tabbar/c-tabbar-more/index.json deleted file mode 100644 index a89ef4d..0000000 --- a/pages/goods/category/components/goods-category/components/c-tabbar/c-tabbar-more/index.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "component": true, - "usingComponents": {} -} diff --git a/pages/goods/category/components/goods-category/components/c-tabbar/c-tabbar-more/index.wxml b/pages/goods/category/components/goods-category/components/c-tabbar/c-tabbar-more/index.wxml deleted file mode 100644 index 0ea9ad4..0000000 --- a/pages/goods/category/components/goods-category/components/c-tabbar/c-tabbar-more/index.wxml +++ /dev/null @@ -1,25 +0,0 @@ - - - - - - - - - - {{ item.name }} - - - - - diff --git a/pages/goods/category/components/goods-category/components/c-tabbar/c-tabbar-more/index.wxss b/pages/goods/category/components/goods-category/components/c-tabbar/c-tabbar-more/index.wxss deleted file mode 100644 index d0d08b3..0000000 --- a/pages/goods/category/components/goods-category/components/c-tabbar/c-tabbar-more/index.wxss +++ /dev/null @@ -1,63 +0,0 @@ -.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/pages/goods/category/components/goods-category/components/c-tabbar/index.js b/pages/goods/category/components/goods-category/components/c-tabbar/index.js deleted file mode 100644 index ddf6367..0000000 --- a/pages/goods/category/components/goods-category/components/c-tabbar/index.js +++ /dev/null @@ -1,68 +0,0 @@ -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/pages/goods/category/components/goods-category/components/c-tabbar/index.json b/pages/goods/category/components/goods-category/components/c-tabbar/index.json deleted file mode 100644 index 644e632..0000000 --- a/pages/goods/category/components/goods-category/components/c-tabbar/index.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "component": true, - "usingComponents": { - "c-tabbar-more": "./c-tabbar-more/index" - } -} \ No newline at end of file diff --git a/pages/goods/category/components/goods-category/components/c-tabbar/index.wxml b/pages/goods/category/components/goods-category/components/c-tabbar/index.wxml deleted file mode 100644 index 1227f88..0000000 --- a/pages/goods/category/components/goods-category/components/c-tabbar/index.wxml +++ /dev/null @@ -1,29 +0,0 @@ - - - - - {{ item.name }} - - - - - - diff --git a/pages/goods/category/components/goods-category/components/c-tabbar/index.wxss b/pages/goods/category/components/goods-category/components/c-tabbar/index.wxss deleted file mode 100644 index d89475f..0000000 --- a/pages/goods/category/components/goods-category/components/c-tabbar/index.wxss +++ /dev/null @@ -1,53 +0,0 @@ -.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/pages/goods/category/components/goods-category/index.js b/pages/goods/category/components/goods-category/index.js deleted file mode 100644 index f622901..0000000 --- a/pages/goods/category/components/goods-category/index.js +++ /dev/null @@ -1,75 +0,0 @@ -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/pages/goods/category/components/goods-category/index.json b/pages/goods/category/components/goods-category/index.json deleted file mode 100644 index 8ca3d3c..0000000 --- a/pages/goods/category/components/goods-category/index.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "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/pages/goods/category/components/goods-category/index.wxml b/pages/goods/category/components/goods-category/index.wxml deleted file mode 100644 index 1b0b83f..0000000 --- a/pages/goods/category/components/goods-category/index.wxml +++ /dev/null @@ -1,61 +0,0 @@ - - - - - - - - - - - - - {{item.name}} - - - - - - {{subItem.name}} - - - - - - - - - - {{item.name}} - - - - - - - - - diff --git a/pages/goods/category/components/goods-category/index.wxss b/pages/goods/category/components/goods-category/index.wxss deleted file mode 100644 index fbf4569..0000000 --- a/pages/goods/category/components/goods-category/index.wxss +++ /dev/null @@ -1,102 +0,0 @@ -.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/pages/goods/category/data.js b/pages/goods/category/data.js deleted file mode 100644 index e625226..0000000 --- a/pages/goods/category/data.js +++ /dev/null @@ -1,135 +0,0 @@ -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/pages/goods/category/index.js b/pages/goods/category/index.js deleted file mode 100644 index e8c56ac..0000000 --- a/pages/goods/category/index.js +++ /dev/null @@ -1,28 +0,0 @@ -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/pages/goods/category/index.json b/pages/goods/category/index.json deleted file mode 100644 index f989443..0000000 --- a/pages/goods/category/index.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "navigationBarTitleText": "分类", - "usingComponents": { - "goods-category": "./components/goods-category/index" - } -} diff --git a/pages/goods/category/index.wxml b/pages/goods/category/index.wxml deleted file mode 100644 index 2d8cab1..0000000 --- a/pages/goods/category/index.wxml +++ /dev/null @@ -1,8 +0,0 @@ - - - diff --git a/pages/goods/category/index.wxss b/pages/goods/category/index.wxss deleted file mode 100644 index ac2e0a7..0000000 --- a/pages/goods/category/index.wxss +++ /dev/null @@ -1,23 +0,0 @@ -.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/pages/goods/comments/components/comments-card/components/images-videos/assets/play.png b/pages/goods/comments/components/comments-card/components/images-videos/assets/play.png deleted file mode 100644 index d816ef7fd2ae06456b02f08708b3c9db94fbe48d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 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)} diff --git a/pages/goods/comments/components/comments-card/components/images-videos/index.js b/pages/goods/comments/components/comments-card/components/images-videos/index.js deleted file mode 100644 index a0a3c48..0000000 --- a/pages/goods/comments/components/comments-card/components/images-videos/index.js +++ /dev/null @@ -1,36 +0,0 @@ -// 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/pages/goods/comments/components/comments-card/components/images-videos/index.json b/pages/goods/comments/components/comments-card/components/images-videos/index.json deleted file mode 100644 index 83597fd..0000000 --- a/pages/goods/comments/components/comments-card/components/images-videos/index.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "component": true, - "usingComponents": { - "my-video": "../my-video/index", - "t-image": "/components/webp-image/index" - } -} \ No newline at end of file diff --git a/pages/goods/comments/components/comments-card/components/images-videos/index.wxml b/pages/goods/comments/components/comments-card/components/images-videos/index.wxml deleted file mode 100644 index 2515909..0000000 --- a/pages/goods/comments/components/comments-card/components/images-videos/index.wxml +++ /dev/null @@ -1,15 +0,0 @@ - - - - - - - - - - diff --git a/pages/goods/comments/components/comments-card/components/images-videos/index.wxss b/pages/goods/comments/components/comments-card/components/images-videos/index.wxss deleted file mode 100644 index e7944be..0000000 --- a/pages/goods/comments/components/comments-card/components/images-videos/index.wxss +++ /dev/null @@ -1,68 +0,0 @@ -.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/pages/goods/comments/components/comments-card/components/my-video/index.js b/pages/goods/comments/components/comments-card/components/my-video/index.js deleted file mode 100644 index 987cf18..0000000 --- a/pages/goods/comments/components/comments-card/components/my-video/index.js +++ /dev/null @@ -1,55 +0,0 @@ -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/pages/goods/comments/components/comments-card/components/my-video/index.json b/pages/goods/comments/components/comments-card/components/my-video/index.json deleted file mode 100644 index e8cfaaf..0000000 --- a/pages/goods/comments/components/comments-card/components/my-video/index.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "component": true, - "usingComponents": {} -} \ No newline at end of file diff --git a/pages/goods/comments/components/comments-card/components/my-video/index.wxml b/pages/goods/comments/components/comments-card/components/my-video/index.wxml deleted file mode 100644 index af38919..0000000 --- a/pages/goods/comments/components/comments-card/components/my-video/index.wxml +++ /dev/null @@ -1,26 +0,0 @@ - diff --git a/pages/goods/comments/components/comments-card/components/my-video/index.wxss b/pages/goods/comments/components/comments-card/components/my-video/index.wxss deleted file mode 100644 index 63b962b..0000000 --- a/pages/goods/comments/components/comments-card/components/my-video/index.wxss +++ /dev/null @@ -1,21 +0,0 @@ -.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/pages/goods/comments/components/comments-card/index.js b/pages/goods/comments/components/comments-card/index.js deleted file mode 100644 index 53f6103..0000000 --- a/pages/goods/comments/components/comments-card/index.js +++ /dev/null @@ -1,51 +0,0 @@ -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/pages/goods/comments/components/comments-card/index.json b/pages/goods/comments/components/comments-card/index.json deleted file mode 100644 index 1130655..0000000 --- a/pages/goods/comments/components/comments-card/index.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "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/pages/goods/comments/components/comments-card/index.wxml b/pages/goods/comments/components/comments-card/index.wxml deleted file mode 100644 index a376cb2..0000000 --- a/pages/goods/comments/components/comments-card/index.wxml +++ /dev/null @@ -1,34 +0,0 @@ - - - - - - - {{userName}} - {{commentTime}} - - - - {{goodsDetailInfo}} - - - - - - - - - 店家回复: - {{sellerReply}} - - - - diff --git a/pages/goods/comments/components/comments-card/index.wxss b/pages/goods/comments/components/comments-card/index.wxss deleted file mode 100644 index 30b4186..0000000 --- a/pages/goods/comments/components/comments-card/index.wxss +++ /dev/null @@ -1,170 +0,0 @@ -@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/pages/goods/comments/create/index.js b/pages/goods/comments/create/index.js deleted file mode 100644 index be6d788..0000000 --- a/pages/goods/comments/create/index.js +++ /dev/null @@ -1,92 +0,0 @@ -// 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/pages/goods/comments/create/index.json b/pages/goods/comments/create/index.json deleted file mode 100644 index 7c6d3eb..0000000 --- a/pages/goods/comments/create/index.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "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/pages/goods/comments/create/index.wxml b/pages/goods/comments/create/index.wxml deleted file mode 100644 index 254812d..0000000 --- a/pages/goods/comments/create/index.wxml +++ /dev/null @@ -1,85 +0,0 @@ - - - - - - - - {{title}} - {{goodsDetail}} - - - - 商品评价 - - - - - - - - - - 添加图片/视频 - - - - - - - 匿名评价 - - - - - 物流服务评价 - - 物流评价 - - - - 服务评价 - - - - - - - - diff --git a/pages/goods/comments/create/index.wxss b/pages/goods/comments/create/index.wxss deleted file mode 100644 index a63ef2e..0000000 --- a/pages/goods/comments/create/index.wxss +++ /dev/null @@ -1,171 +0,0 @@ -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/pages/goods/comments/index.js b/pages/goods/comments/index.js deleted file mode 100644 index ef3b361..0000000 --- a/pages/goods/comments/index.js +++ /dev/null @@ -1,227 +0,0 @@ -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/pages/goods/comments/index.json b/pages/goods/comments/index.json deleted file mode 100644 index a6418c9..0000000 --- a/pages/goods/comments/index.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "navigationBarTitleText": "全部评价", - "usingComponents": { - "t-tag": "tdesign-miniprogram/tag/tag", - "comments-card": "./components/comments-card/index", - "t-load-more": "/components/load-more/index" - } -} diff --git a/pages/goods/comments/index.wxml b/pages/goods/comments/index.wxml deleted file mode 100644 index 89d2b0f..0000000 --- a/pages/goods/comments/index.wxml +++ /dev/null @@ -1,50 +0,0 @@ - - - 全部({{countObj.commentCount}}) - - - 自己({{countObj.uidCount}}) - - - 带图({{countObj.hasImageCount}}) - - - 好评({{countObj.goodCount}}) - - - 中评({{countObj.middleCount}}) - - - 差评({{countObj.badCount}}) - - - - - - - - - diff --git a/pages/goods/comments/index.wxss b/pages/goods/comments/index.wxss deleted file mode 100644 index b98f36b..0000000 --- a/pages/goods/comments/index.wxss +++ /dev/null @@ -1,49 +0,0 @@ -/* 层级定义 -@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/pages/goods/details/components/buy-bar/index.js b/pages/goods/details/components/buy-bar/index.js deleted file mode 100644 index ae274e2..0000000 --- a/pages/goods/details/components/buy-bar/index.js +++ /dev/null @@ -1,66 +0,0 @@ -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/pages/goods/details/components/buy-bar/index.json b/pages/goods/details/components/buy-bar/index.json deleted file mode 100644 index 7464ae6..0000000 --- a/pages/goods/details/components/buy-bar/index.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "component": true, - "usingComponents": { - "t-icon": "tdesign-miniprogram/icon/icon" - } -} \ No newline at end of file diff --git a/pages/goods/details/components/buy-bar/index.wxml b/pages/goods/details/components/buy-bar/index.wxml deleted file mode 100644 index 604afb4..0000000 --- a/pages/goods/details/components/buy-bar/index.wxml +++ /dev/null @@ -1,38 +0,0 @@ - - {{soldout ? '商品已下架' : '商品已售馨'}} - - - - - - - {{shopCartNum > 99 ? '99+' : shopCartNum}} - - - {{item.title}} - - - - - - - 加入购物车 - - - 立即购买 - - - - - - - - diff --git a/pages/goods/details/components/buy-bar/index.wxss b/pages/goods/details/components/buy-bar/index.wxss deleted file mode 100644 index 44e8ad0..0000000 --- a/pages/goods/details/components/buy-bar/index.wxss +++ /dev/null @@ -1,107 +0,0 @@ -.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/pages/goods/details/components/goods-specs-popup/index.js b/pages/goods/details/components/goods-specs-popup/index.js deleted file mode 100644 index d6a4f74..0000000 --- a/pages/goods/details/components/goods-specs-popup/index.js +++ /dev/null @@ -1,389 +0,0 @@ -/* 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/pages/goods/details/components/goods-specs-popup/index.json b/pages/goods/details/components/goods-specs-popup/index.json deleted file mode 100644 index e699a1c..0000000 --- a/pages/goods/details/components/goods-specs-popup/index.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "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/pages/goods/details/components/goods-specs-popup/index.wxml b/pages/goods/details/components/goods-specs-popup/index.wxml deleted file mode 100644 index bb5fd25..0000000 --- a/pages/goods/details/components/goods-specs-popup/index.wxml +++ /dev/null @@ -1,100 +0,0 @@ - - - - - - - - - {{title}} - - - - - - 选择: - - - {{selectedItem.specValue}} - - - - - - - - - {{item.title}} - - - {{valuesItem.specValue}} - - - - - - - - 购买数量 - - ({{limitBuyInfo}}) - - - - - - - - - - - - - - - - - - 确定 - - - - - 加入购物车 - - - - - 立即购买 - - - - - - - - diff --git a/pages/goods/details/components/goods-specs-popup/index.wxss b/pages/goods/details/components/goods-specs-popup/index.wxss deleted file mode 100644 index de0c749..0000000 --- a/pages/goods/details/components/goods-specs-popup/index.wxss +++ /dev/null @@ -1,300 +0,0 @@ -.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/pages/goods/details/components/promotion-popup/index.js b/pages/goods/details/components/promotion-popup/index.js deleted file mode 100644 index 9743cc1..0000000 --- a/pages/goods/details/components/promotion-popup/index.js +++ /dev/null @@ -1,35 +0,0 @@ -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/pages/goods/details/components/promotion-popup/index.json b/pages/goods/details/components/promotion-popup/index.json deleted file mode 100644 index a9de77d..0000000 --- a/pages/goods/details/components/promotion-popup/index.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "component": true, - "usingComponents": { - "t-popup": "tdesign-miniprogram/popup/popup", - "t-icon": "tdesign-miniprogram/icon/icon" - } -} \ No newline at end of file diff --git a/pages/goods/details/components/promotion-popup/index.wxml b/pages/goods/details/components/promotion-popup/index.wxml deleted file mode 100644 index c1cea9d..0000000 --- a/pages/goods/details/components/promotion-popup/index.wxml +++ /dev/null @@ -1,34 +0,0 @@ - - - - - - - {{title}} - - - - - {{item.tag}} - - {{item.label ? item.label : ''}} - - - - - - - - - diff --git a/pages/goods/details/components/promotion-popup/index.wxss b/pages/goods/details/components/promotion-popup/index.wxss deleted file mode 100644 index 6e0e167..0000000 --- a/pages/goods/details/components/promotion-popup/index.wxss +++ /dev/null @@ -1,131 +0,0 @@ -.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/pages/goods/details/index.js b/pages/goods/details/index.js deleted file mode 100644 index b41f007..0000000 --- a/pages/goods/details/index.js +++ /dev/null @@ -1,443 +0,0 @@ -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/pages/goods/details/index.json b/pages/goods/details/index.json deleted file mode 100644 index a5d8558..0000000 --- a/pages/goods/details/index.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "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/pages/goods/details/index.wxml b/pages/goods/details/index.wxml deleted file mode 100644 index 1a616f4..0000000 --- a/pages/goods/details/index.wxml +++ /dev/null @@ -1,176 +0,0 @@ - - - - - - - - - - - - - - - 已售{{soldNum}} - - - - - {{item.tag}} - - - - 领劵 - - - - - {{details.title}} - - - - - - - - - - {{intro}} - - - 已选 - - - {{selectedAttrStr ? buyNum : ''}}{{selectedAttrStr || '请选择'}} - - - - - - - - 商品评价 - - ({{ commentsStatistics.commentCount }}) - - - - {{commentsStatistics.goodRate}}% 好评 - - - - - - - - {{commentItem.userName}} - - - - - {{commentItem.commentContent}} - - - - - - - - 详情介绍 - - - - - - - - - - - - - - - - - - - - - diff --git a/pages/goods/details/index.wxss b/pages/goods/details/index.wxss deleted file mode 100644 index eb74549..0000000 --- a/pages/goods/details/index.wxss +++ /dev/null @@ -1,356 +0,0 @@ -@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/pages/goods/list/index.js b/pages/goods/list/index.js deleted file mode 100644 index c16cd66..0000000 --- a/pages/goods/list/index.js +++ /dev/null @@ -1,226 +0,0 @@ -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/pages/goods/list/index.json b/pages/goods/list/index.json deleted file mode 100644 index 0811511..0000000 --- a/pages/goods/list/index.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "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/pages/goods/list/index.wxml b/pages/goods/list/index.wxml deleted file mode 100644 index 82d7bee..0000000 --- a/pages/goods/list/index.wxml +++ /dev/null @@ -1,55 +0,0 @@ - - - - - 价格区间 - - - - - - - - - - - - - - - - - - - diff --git a/pages/goods/list/index.wxss b/pages/goods/list/index.wxss deleted file mode 100644 index 4895167..0000000 --- a/pages/goods/list/index.wxss +++ /dev/null @@ -1,108 +0,0 @@ -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/pages/goods/result/index.js b/pages/goods/result/index.js deleted file mode 100644 index 47ce19d..0000000 --- a/pages/goods/result/index.js +++ /dev/null @@ -1,262 +0,0 @@ -/* 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/pages/goods/result/index.json b/pages/goods/result/index.json deleted file mode 100644 index 130b48d..0000000 --- a/pages/goods/result/index.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "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/pages/goods/result/index.wxml b/pages/goods/result/index.wxml deleted file mode 100644 index 30591d7..0000000 --- a/pages/goods/result/index.wxml +++ /dev/null @@ -1,81 +0,0 @@ - - - - - - - - - 价格区间 - - - - - - - - - - - - - - - - - - - diff --git a/pages/goods/result/index.wxss b/pages/goods/result/index.wxss deleted file mode 100644 index 804ec53..0000000 --- a/pages/goods/result/index.wxss +++ /dev/null @@ -1,110 +0,0 @@ -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/pages/goods/search/index.js b/pages/goods/search/index.js deleted file mode 100644 index c726041..0000000 --- a/pages/goods/search/index.js +++ /dev/null @@ -1,119 +0,0 @@ -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/pages/goods/search/index.json b/pages/goods/search/index.json deleted file mode 100644 index 74abdf7..0000000 --- a/pages/goods/search/index.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "navigationBarTitleText": "搜索", - "usingComponents": { - "t-search": "tdesign-miniprogram/search/search", - "t-icon": "tdesign-miniprogram/icon/icon", - "t-dialog": "tdesign-miniprogram/dialog/dialog" - } -} diff --git a/pages/goods/search/index.wxml b/pages/goods/search/index.wxml deleted file mode 100644 index 743f83c..0000000 --- a/pages/goods/search/index.wxml +++ /dev/null @@ -1,75 +0,0 @@ - - - - - - - - - 历史搜索 - 清除 - - - - {{item}} - - - - - - 热门搜索 - - - - {{item}} - - - - - - - diff --git a/pages/goods/search/index.wxss b/pages/goods/search/index.wxss deleted file mode 100644 index 676603e..0000000 --- a/pages/goods/search/index.wxss +++ /dev/null @@ -1,79 +0,0 @@ -.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/pages/home/additive/additive.json b/pages/home/additive/additive.json index da66c1a..6055f4d 100644 --- a/pages/home/additive/additive.json +++ b/pages/home/additive/additive.json @@ -3,6 +3,7 @@ "onReachBottomDistance": 10, "backgroundTextStyle": "light", "usingComponents": { + "tox-tag": "../../../components/tox-tag", "t-icon": "tdesign-miniprogram/icon/icon", "t-tag": "tdesign-miniprogram/tag/tag", "t-tabs": "tdesign-miniprogram/tabs/tabs" diff --git a/pages/home/additive/additive.wxml b/pages/home/additive/additive.wxml index f3a20ff..dc6b3a6 100644 --- a/pages/home/additive/additive.wxml +++ b/pages/home/additive/additive.wxml @@ -2,7 +2,7 @@ - + {{additiveData.name ? additiveData.name : 'XXX'}} {{additiveData.enName ? additiveData.enName : 'xxx'}} @@ -24,7 +24,10 @@ 包含物质 - {{item.name}} + + {{item.name}} + + {{item.cas}} diff --git a/pages/home/additive/additive.wxss b/pages/home/additive/additive.wxss index f0abc85..95e2bd5 100644 --- a/pages/home/additive/additive.wxss +++ b/pages/home/additive/additive.wxss @@ -2,6 +2,7 @@ .main { width: 100%; + padding-bottom: 30px; } .main-item { diff --git a/pages/home/chemical/chemical.js b/pages/home/chemical/chemical.js index ef8efd4..b5eb98d 100644 --- a/pages/home/chemical/chemical.js +++ b/pages/home/chemical/chemical.js @@ -25,7 +25,8 @@ Page({ "name": "", "otherName": "", "toxicity": [] - } + }, + showToxInfo: false, }, /** @@ -41,13 +42,25 @@ Page({ if (respose.code == 10000) { // console.log(respose.content); this.setData({ - chemicalData: respose.content + chemicalData: respose.content, }) console.log(this.data.chemicalData); } }) }, + onOpenToxInfo() { + this.setData({ + showToxInfo: true, + }) + }, + + onCloseToxInfo() { + this.setData({ + showToxInfo: false + }) + }, + /** * 生命周期函数--监听页面初次渲染完成 */ diff --git a/pages/home/chemical/chemical.json b/pages/home/chemical/chemical.json index 78ed037..200306e 100644 --- a/pages/home/chemical/chemical.json +++ b/pages/home/chemical/chemical.json @@ -4,12 +4,14 @@ "backgroundTextStyle": "light", "usingComponents": { "no-data": "../components/no-data/no-data", + "tox-tag": "../../../components/tox-tag", "t-search": "tdesign-miniprogram/search/search", "t-icon": "tdesign-miniprogram/icon/icon", "t-grid": "tdesign-miniprogram/grid/grid", - "t-grid-item": "tdesign-miniprogram/grid/grid-item", + "t-grid-item": "tdesign-miniprogram/grid-item/grid-item", "t-tag": "tdesign-miniprogram/tag/tag", "t-tabs": "tdesign-miniprogram/tabs/tabs", - "t-tab-panel": "tdesign-miniprogram/tabs/tab-panel" + "t-tab-panel": "tdesign-miniprogram/tab-panel/tab-panel", + "t-dialog": "tdesign-miniprogram/dialog/dialog" } } \ No newline at end of file diff --git a/pages/home/chemical/chemical.wxml b/pages/home/chemical/chemical.wxml index 19b594b..b5324ee 100644 --- a/pages/home/chemical/chemical.wxml +++ b/pages/home/chemical/chemical.wxml @@ -2,9 +2,13 @@ - + - {{chemicalData.name ? chemicalData.name : 'XXX'}} + + {{chemicalData.name ? chemicalData.name : 'XXX'}} + + + {{chemicalData.enName ? chemicalData.enName : 'xxx'}} @@ -19,12 +23,12 @@ - + - + - {{item}} + {{chemicalData.description}} @@ -37,10 +41,10 @@ {{item}} - + - + @@ -55,7 +59,7 @@ - + @@ -63,7 +67,7 @@ {{item.diseasename}} - {{item.directevidence == 'therapeutic' ? '治疗' : '相关'}} + {{item.directevidence == 'therapeutic' ? '有疗效' : '标记/机制'}} 相关论文: @@ -75,4 +79,14 @@ - \ No newline at end of file + + + + + + LD50值指的是一次全部给予造成试验动物50%(一半)死亡的化学品数量; + LC50值(50%致死浓度)指的是化学品在空气中或水中造成一组试验动物50%(一半)死亡的浓度; + LDLo值指的是产生毒性效应的最低剂量; + + + \ No newline at end of file diff --git a/pages/home/chemical/chemical.wxss b/pages/home/chemical/chemical.wxss index 842fe25..9be7eea 100644 --- a/pages/home/chemical/chemical.wxss +++ b/pages/home/chemical/chemical.wxss @@ -17,8 +17,10 @@ } .logo-image { - width: 50px; - height: 50px; + min-width: 50px; + min-height: 50px; + max-width: 50px; + max-height: 50px; border-radius: 9999px; border-style: solid; border-width: 2px; @@ -46,6 +48,7 @@ .title-enname { color: rgb(150, 150, 150); + word-break: break-all; } .total { @@ -74,6 +77,8 @@ font-size: 0.75rem; line-height: 1.25rem; font-weight: 600; + margin-left: 10px; + margin-right: 10px; } .toxicity-item { @@ -132,4 +137,18 @@ padding: 5px; padding-left: 10px; padding-right: 10px; +} + +.long-content .content-container { + white-space: pre-line; +} + +.toxinfo-text { + margin-top: 10px; +} + +.main-tabs { + font-size: 1.125rem; + line-height: 1.75rem; + font-weight: 600; } \ No newline at end of file diff --git a/pages/home/components/no-data/no-data.wxml b/pages/home/components/no-data/no-data.wxml index 1341cfe..829e511 100644 --- a/pages/home/components/no-data/no-data.wxml +++ b/pages/home/components/no-data/no-data.wxml @@ -1,4 +1,4 @@ - + \ No newline at end of file diff --git a/pages/home/home.js b/pages/home/home.js index f9d38d2..81ad425 100644 --- a/pages/home/home.js +++ b/pages/home/home.js @@ -1,9 +1,6 @@ import { fetchHome } from '../../services/home/home'; -import { - fetchGoodsList -} from '../../services/good/fetchGoods'; import Toast from 'tdesign-miniprogram/toast/index'; import { isLogin @@ -11,6 +8,9 @@ import { import { sessionUpload } from '../../services/api/session' +import { + articleList +} from '../../services/api/article' Page({ data: { @@ -19,7 +19,7 @@ Page({ goodsList: [], goodsListLoadStatus: 0, pageLoading: false, - current: 1, + current: 0, autoplay: true, duration: 500, interval: 5000, @@ -27,6 +27,7 @@ Page({ type: 'dots' }, loadingDialog: false, + swiperList: [], }, @@ -47,127 +48,50 @@ Page({ this.init(); }, - onReachBottom() { - if (this.data.goodsListLoadStatus === 0) { - this.loadGoodsList(); - } - }, + onReachBottom() {}, onPullDownRefresh() { this.init(); }, init() { - this.loadHomePage(); isLogin() + this.loadHomePage() }, loadHomePage() { - wx.stopPullDownRefresh(); - - this.setData({ - pageLoading: true, - }); - fetchHome().then(({ - swiper, - tabList - }) => { - this.setData({ - tabList, - imgSrcs: swiper, - pageLoading: false, - }); - this.loadGoodsList(true); - }); + articleList({ + type: 2, + isPublic: 2, + pageNumber: 1, + pageSize: 10 + }).then(response => { + if (response.code == 10000) { + console.log(response.content); + if (response.content.contentList.length == 0) { + return + } + let tmp = [] + for (let index = 0; index < response.content.contentList.length; index++) { + const element = response.content.contentList[index]; + tmp.push(element.headerUrl) + } + this.setData({ + swiperList: response.content.contentList, + imgSrcs: tmp + }) + console.log(this.data.imgSrcs); + } + }) + // this.setData({ + // imgSrcs: [ + // 'https://webplus-cn-hangzhou-s-603871eef968dd14ced82ed5.oss-cn-hangzhou.aliyuncs.com/hextech/static/use_btn.jpg', + // 'https://cdn-we-retail.ym.tencent.com/tsr/home/v2/banner2.png' + // ], + // }); }, - 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) { - console.log(detail); - const { - index: promotionID = 0 - } = detail || {}; - console.log(promotionID); - wx.navigateTo({ - url: `/pages/promotion-detail/index?promotion_id=${promotionID}`, - }); - }, - - showLoadingDialog() { - this.data.loadingDialog = true - }, - - closeLoadingDialog() { - this.data.loadingDialog = false - }, + onReTry() {}, // 上传图片 uploadPicture() { @@ -201,6 +125,14 @@ Page({ }) }, + onSwiperClick(e) { + const id = this.data.swiperList[e.detail.index].id + console.log(id); + wx.navigateTo({ + url: `/pages/info/content-page/index?id=${id}`, + }); + }, + textButton(e) { // this.goSession(76) this.setData({ diff --git a/pages/home/home.json b/pages/home/home.json index 2eccc26..97f2ce8 100644 --- a/pages/home/home.json +++ b/pages/home/home.json @@ -6,16 +6,12 @@ "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-swiper-nav": "tdesign-miniprogram/swiper-nav/swiper-nav", + "t-image": "tdesign-miniprogram/image/image", "t-icon": "tdesign-miniprogram/icon/icon", - "t-toast": "tdesign-miniprogram/toast/toast", "t-button": "tdesign-miniprogram/button/button", "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", + "t-tab-panel": "tdesign-miniprogram/tab-panel/tab-panel", "t-dialog": "tdesign-miniprogram/dialog/dialog" } } \ No newline at end of file diff --git a/pages/home/home.wxml b/pages/home/home.wxml index 059b173..1e01788 100644 --- a/pages/home/home.wxml +++ b/pages/home/home.wxml @@ -1,16 +1,13 @@ - - - - + - + - 取消 - - - \ No newline at end of file diff --git a/pages/usercenter/index.wxss b/pages/usercenter/index.wxss deleted file mode 100644 index 483e6f2..0000000 --- a/pages/usercenter/index.wxss +++ /dev/null @@ -1,146 +0,0 @@ -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/pages/usercenter/name-edit/index.js b/pages/usercenter/name-edit/index.js deleted file mode 100644 index 57e4e3d..0000000 --- a/pages/usercenter/name-edit/index.js +++ /dev/null @@ -1,19 +0,0 @@ -Page({ - data: { - nameValue: '', - }, - onLoad(options) { - const { name } = options; - this.setData({ - nameValue: name, - }); - }, - onSubmit() { - wx.navigateBack({ backRefresh: true }); - }, - clearContent() { - this.setData({ - nameValue: '', - }); - }, -}); diff --git a/pages/usercenter/name-edit/index.json b/pages/usercenter/name-edit/index.json deleted file mode 100644 index efc7e5f..0000000 --- a/pages/usercenter/name-edit/index.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "navigationBarTitleText": "昵称", - "usingComponents": { - "t-input": "tdesign-miniprogram/input/input", - "t-icon": "tdesign-miniprogram/icon/icon", - "t-button": "tdesign-miniprogram/button/button" - } -} diff --git a/pages/usercenter/name-edit/index.wxml b/pages/usercenter/name-edit/index.wxml deleted file mode 100644 index 0366a88..0000000 --- a/pages/usercenter/name-edit/index.wxml +++ /dev/null @@ -1,16 +0,0 @@ - - - - 最多可输入15个字 - - - 保存 - - - diff --git a/pages/usercenter/name-edit/index.wxss b/pages/usercenter/name-edit/index.wxss deleted file mode 100644 index ef4b048..0000000 --- a/pages/usercenter/name-edit/index.wxss +++ /dev/null @@ -1,26 +0,0 @@ -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/pages/usercenter/person-info/index.js b/pages/usercenter/person-info/index.js deleted file mode 100644 index 48fed27..0000000 --- a/pages/usercenter/person-info/index.js +++ /dev/null @@ -1,122 +0,0 @@ -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/pages/usercenter/person-info/index.json b/pages/usercenter/person-info/index.json deleted file mode 100644 index e63dcc5..0000000 --- a/pages/usercenter/person-info/index.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "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/pages/usercenter/person-info/index.wxml b/pages/usercenter/person-info/index.wxml deleted file mode 100644 index 2e460b1..0000000 --- a/pages/usercenter/person-info/index.wxml +++ /dev/null @@ -1,59 +0,0 @@ - - - - - - - - - - - 切换账号登录 - - - - - diff --git a/pages/usercenter/person-info/index.wxss b/pages/usercenter/person-info/index.wxss deleted file mode 100644 index e1b5ea1..0000000 --- a/pages/usercenter/person-info/index.wxss +++ /dev/null @@ -1,41 +0,0 @@ -: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/services/_utils/pdf.js b/services/_utils/pdf.js new file mode 100644 index 0000000..13173fc --- /dev/null +++ b/services/_utils/pdf.js @@ -0,0 +1,32 @@ +export function openPDF(path) { + wx.downloadFile({ + url: path, //示例的url地址 + success: function (resinfo) { + console.log("pdf协议文件已下载") + let path = resinfo.tempFilePath; + console.log(path, resinfo) + wx.openDocument({ + filePath: path, + fileType: 'pdf', + success: function (rest) { + console.log('打开文件成功') + console.log(rest); + }, + fail: function (error) { + wx.showToast({ + icon: 'none', + title: '打开文件失败' + }); + }, + }) + }, + fail: function (err) { + console.log('fail') + console.log(err) + wx.showToast({ + icon: 'none', + title: '下载文件失败' + }); + } + }) +} \ No newline at end of file diff --git a/services/activity/fetchActivity.js b/services/activity/fetchActivity.js deleted file mode 100644 index e9aefa6..0000000 --- a/services/activity/fetchActivity.js +++ /dev/null @@ -1,20 +0,0 @@ -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/services/activity/fetchActivityList.js b/services/activity/fetchActivityList.js deleted file mode 100644 index 2522aff..0000000 --- a/services/activity/fetchActivityList.js +++ /dev/null @@ -1,20 +0,0 @@ -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/services/address/fetchAddress.js b/services/address/fetchAddress.js deleted file mode 100644 index 9525ab0..0000000 --- a/services/address/fetchAddress.js +++ /dev/null @@ -1,48 +0,0 @@ -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/services/api/article.js b/services/api/article.js new file mode 100644 index 0000000..fd8d43b --- /dev/null +++ b/services/api/article.js @@ -0,0 +1,19 @@ +import { + request +} from './request' + +export function articleList(params) { + return request({ + path: '/system/article/list', + params: params, + method: 'GET' + }); +} + +export function articleQuery(params) { + return request({ + path: '/system/article', + params: params, + method: 'GET' + }); +} \ No newline at end of file diff --git a/services/api/request.js b/services/api/request.js index a5b0277..cd87a63 100644 --- a/services/api/request.js +++ b/services/api/request.js @@ -5,13 +5,29 @@ import { getToken, isLogin } from '../permission/login' + +const unsaveInterface = [ + '/wx/login', + '/system/article/list' +] + +function unsaveCheck(path) { + for (let index = 0; index < unsaveInterface.length; index++) { + const element = unsaveInterface[index]; + if (element == path) { + return false + } + } + return true +} + export function request({ path, params, method }) { return new Promise((resolve, reject) => { - if (getToken() == '' && path != '/wx/login') { + if (getToken() == '' && unsaveCheck(path)) { wx.showToast({ title: '请登录后再次尝试。', icon: 'error', diff --git a/services/api/session.js b/services/api/session.js index 8e88014..1777508 100644 --- a/services/api/session.js +++ b/services/api/session.js @@ -82,4 +82,12 @@ export function sessionChangeStandard(params) { params: params, method: 'GET' }); +} + +export function sessionAdditiveAdd(params) { + return request({ + path: '/session/additive/add', + params: params, + method: 'POST' + }); } \ No newline at end of file diff --git a/services/cart/cart.js b/services/cart/cart.js deleted file mode 100644 index d42f959..0000000 --- a/services/cart/cart.js +++ /dev/null @@ -1,20 +0,0 @@ -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/services/comments/fetchComments.js b/services/comments/fetchComments.js deleted file mode 100644 index 9bd1155..0000000 --- a/services/comments/fetchComments.js +++ /dev/null @@ -1,18 +0,0 @@ -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/services/comments/fetchCommentsCount.js b/services/comments/fetchCommentsCount.js deleted file mode 100644 index cbb09d0..0000000 --- a/services/comments/fetchCommentsCount.js +++ /dev/null @@ -1,18 +0,0 @@ -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/services/coupon/index.js b/services/coupon/index.js deleted file mode 100644 index a0010e0..0000000 --- a/services/coupon/index.js +++ /dev/null @@ -1,65 +0,0 @@ -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/services/good/comments/fetchCommentDetail.js b/services/good/comments/fetchCommentDetail.js deleted file mode 100644 index fce338d..0000000 --- a/services/good/comments/fetchCommentDetail.js +++ /dev/null @@ -1,20 +0,0 @@ -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/services/good/featchSearchResult.js b/services/good/featchSearchResult.js deleted file mode 100644 index 5b42851..0000000 --- a/services/good/featchSearchResult.js +++ /dev/null @@ -1,38 +0,0 @@ -/* 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/services/good/fetchCategoryList.js b/services/good/fetchCategoryList.js deleted file mode 100644 index adf6ba4..0000000 --- a/services/good/fetchCategoryList.js +++ /dev/null @@ -1,18 +0,0 @@ -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/services/good/fetchGood.js b/services/good/fetchGood.js deleted file mode 100644 index 7a196d4..0000000 --- a/services/good/fetchGood.js +++ /dev/null @@ -1,18 +0,0 @@ -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/services/good/fetchGoods.js b/services/good/fetchGoods.js deleted file mode 100644 index 16618c8..0000000 --- a/services/good/fetchGoods.js +++ /dev/null @@ -1,29 +0,0 @@ -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/services/good/fetchGoodsDetailsComments.js b/services/good/fetchGoodsDetailsComments.js deleted file mode 100644 index 95a11c4..0000000 --- a/services/good/fetchGoodsDetailsComments.js +++ /dev/null @@ -1,37 +0,0 @@ -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/services/good/fetchGoodsList.js b/services/good/fetchGoodsList.js deleted file mode 100644 index 1650b9b..0000000 --- a/services/good/fetchGoodsList.js +++ /dev/null @@ -1,39 +0,0 @@ -/* 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/services/good/fetchSearchHistory.js b/services/good/fetchSearchHistory.js deleted file mode 100644 index 3a73963..0000000 --- a/services/good/fetchSearchHistory.js +++ /dev/null @@ -1,35 +0,0 @@ -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/services/home/home.js b/services/home/home.js index 7d4469d..6e541c4 100644 --- a/services/home/home.js +++ b/services/home/home.js @@ -1,42 +1,19 @@ -import { config, cdnBase } from '../../config/index'; +import { + config, + cdnBase +} from '../../config/index'; /** 获取首页数据 */ function mockFetchHome() { - const { delay } = require('../_utils/delay'); - const { genSwiperImageList } = require('../../model/swiper'); + 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, - }, - { - text: 'RTX 30', - key: 5, - }, - { - text: '手机也疯狂', - key: 6, - }, - ], activityImg: `${cdnBase}/activity/banner.png`, }; }); @@ -50,4 +27,4 @@ export function fetchHome() { return new Promise((resolve) => { resolve('real api'); }); -} +} \ No newline at end of file diff --git a/services/order/applyService.js b/services/order/applyService.js deleted file mode 100644 index c66930a..0000000 --- a/services/order/applyService.js +++ /dev/null @@ -1,70 +0,0 @@ -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/services/order/orderConfirm.js b/services/order/orderConfirm.js deleted file mode 100644 index 4d34744..0000000 --- a/services/order/orderConfirm.js +++ /dev/null @@ -1,69 +0,0 @@ -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/services/order/orderDetail.js b/services/order/orderDetail.js deleted file mode 100644 index 3e7d797..0000000 --- a/services/order/orderDetail.js +++ /dev/null @@ -1,39 +0,0 @@ -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/services/order/orderList.js b/services/order/orderList.js deleted file mode 100644 index f4a9e7a..0000000 --- a/services/order/orderList.js +++ /dev/null @@ -1,39 +0,0 @@ -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/services/order/orderSubmitComment.js b/services/order/orderSubmitComment.js deleted file mode 100644 index 5e3ea36..0000000 --- a/services/order/orderSubmitComment.js +++ /dev/null @@ -1,22 +0,0 @@ -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/services/promotion/detail.js b/services/promotion/detail.js deleted file mode 100644 index 841f723..0000000 --- a/services/promotion/detail.js +++ /dev/null @@ -1,18 +0,0 @@ -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/services/usercenter/fetchPerson.js b/services/usercenter/fetchPerson.js deleted file mode 100644 index bd31178..0000000 --- a/services/usercenter/fetchPerson.js +++ /dev/null @@ -1,28 +0,0 @@ -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/services/usercenter/fetchUsercenter.js b/services/usercenter/fetchUsercenter.js deleted file mode 100644 index b187644..0000000 --- a/services/usercenter/fetchUsercenter.js +++ /dev/null @@ -1,18 +0,0 @@ -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/utils/addressParse.js b/utils/addressParse.js deleted file mode 100644 index 23b6cd0..0000000 --- a/utils/addressParse.js +++ /dev/null @@ -1,25 +0,0 @@ -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/utils/getPermission.js b/utils/getPermission.js deleted file mode 100644 index e6a64cb..0000000 --- a/utils/getPermission.js +++ /dev/null @@ -1,45 +0,0 @@ -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/utils/mock.js b/utils/mock.js deleted file mode 100644 index 27f13e8..0000000 --- a/utils/mock.js +++ /dev/null @@ -1,51 +0,0 @@ -/** - * 随机打散字符串 - * @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/utils/util.js b/utils/util.js deleted file mode 100644 index 4f0ec66..0000000 --- a/utils/util.js +++ /dev/null @@ -1,133 +0,0 @@ -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, -};