From adae27c21db1c7e01e51bdfd3ba5d0ae29093de7 Mon Sep 17 00:00:00 2001 From: yjwfn Date: Sun, 12 Dec 2021 17:15:24 +0800 Subject: [PATCH] jd coupon --- .gitignore | 21 + README.md | 0 app.js | 84 + app.json | 118 + app.wxss | 15 + components/custom/index.js | 54 + components/custom/index.json | 4 + components/custom/index.wxml | 16 + components/custom/index.wxss | 1 + components/home-page/home-page.js | 86 + components/home-page/home-page.json | 6 + components/home-page/home-page.wxml | 67 + components/home-page/home-page.wxss | 2 + components/new-item/new-item.js | 151 + components/new-item/new-item.json | 4 + components/new-item/new-item.wxml | 72 + components/new-item/new-item.wxss | 37 + components/order-item/order-item.js | 61 + components/order-item/order-item.json | 4 + components/order-item/order-item.wxml | 37 + components/order-item/order-item.wxss | 36 + components/poster/poster.js | 383 ++ components/poster/poster.json | 4 + components/poster/poster.wxml | 74 + components/poster/poster.wxss | 62 + components/product-item/product-item.js | 40 + components/product-item/product-item.json | 4 + components/product-item/product-item.wxml | 68 + components/product-item/product-item.wxss | 135 + components/prompt-dialig/index.js | 45 + components/prompt-dialig/index.json | 4 + components/prompt-dialig/index.wxml | 20 + components/prompt-dialig/index.wxss | 5 + components/question/question.js | 86 + components/question/question.json | 4 + components/question/question.wxml | 32 + components/question/question.wxss | 46 + components/refresh/refresh.js | 227 ++ components/refresh/refresh.json | 4 + components/refresh/refresh.wxml | 43 + components/refresh/refresh.wxss | 292 ++ components/study/study.js | 29 + components/study/study.json | 4 + components/study/study.wxml | 28 + components/study/study.wxss | 11 + components/video-swiper/video-swiper.js | 385 ++ components/video-swiper/video-swiper.json | 4 + components/video-swiper/video-swiper.wxml | 59 + components/video-swiper/video-swiper.wxss | 67 + custom-tab-bar/index.js | 50 + custom-tab-bar/index.json | 4 + custom-tab-bar/index.wxml | 35 + custom-tab-bar/index.wxss | 4 + images/ic_camera.png | Bin 0 -> 882 bytes images/ic_delivery.png | Bin 0 -> 815 bytes images/ic_diamond.png | Bin 0 -> 1691 bytes images/ic_fresh.png | Bin 0 -> 1132 bytes images/ic_hot.png | Bin 0 -> 1022 bytes images/ic_like.png | Bin 0 -> 783 bytes images/ic_link.png | Bin 0 -> 885 bytes images/ic_makeups.png | Bin 0 -> 1028 bytes images/ic_search_bottom.png | Bin 0 -> 238 bytes images/ic_search_bottom_cur.png | Bin 0 -> 246 bytes images/ic_search_right.png | Bin 0 -> 331 bytes images/ic_search_top.png | Bin 0 -> 235 bytes images/ic_search_top_cur.png | Bin 0 -> 249 bytes images/ic_share_btn.jpg | Bin 0 -> 44073 bytes images/ic_skirt.png | Bin 0 -> 1016 bytes images/ic_tab_daren.png | Bin 0 -> 847 bytes images/ic_tab_daren_cur.png | Bin 0 -> 899 bytes images/ic_tab_home.png | Bin 0 -> 659 bytes images/ic_tab_home_cur.png | Bin 0 -> 709 bytes images/ic_tab_mine.png | Bin 0 -> 570 bytes images/ic_tab_mine_cur.png | Bin 0 -> 586 bytes images/ic_tab_strategy.png | Bin 0 -> 659 bytes images/ic_tab_strategy_cur.png | Bin 0 -> 705 bytes images/ic_tab_vip.png | Bin 0 -> 1283 bytes images/ic_tab_vip_cur.png | Bin 0 -> 1370 bytes images/ic_toothpaste.png | Bin 0 -> 1178 bytes page_package/about/about.js | 21 + page_package/about/about.json | 8 + page_package/about/about.wxml | 10 + page_package/about/about.wxss | 0 page_package/activity/activity.js | 211 + page_package/activity/activity.json | 6 + page_package/activity/activity.wxml | 28 + page_package/activity/activity.wxss | 11 + page_package/apply-vip/apply-vip.js | 210 + page_package/apply-vip/apply-vip.json | 6 + page_package/apply-vip/apply-vip.wxml | 81 + page_package/apply-vip/apply-vip.wxss | 16 + page_package/apply-vip/example/example.js | 67 + page_package/apply-vip/example/example.json | 6 + page_package/apply-vip/example/example.wxml | 5 + page_package/apply-vip/example/example.wxss | 1 + page_package/contacts/contacts.js | 144 + page_package/contacts/contacts.json | 7 + page_package/contacts/contacts.wxml | 91 + page_package/contacts/contacts.wxss | 25 + page_package/details/index.js | 588 +++ page_package/details/index.json | 6 + page_package/details/index.wxml | 169 + page_package/details/index.wxss | 130 + page_package/equity/equity.js | 87 + page_package/equity/equity.json | 4 + page_package/equity/equity.wxml | 33 + page_package/equity/equity.wxss | 49 + page_package/fans/fans.js | 155 + page_package/fans/fans.json | 11 + page_package/fans/fans.wxml | 105 + page_package/fans/fans.wxss | 4 + page_package/feedback/feedback.js | 107 + page_package/feedback/feedback.json | 6 + page_package/feedback/feedback.wxml | 14 + page_package/feedback/feedback.wxss | 5 + page_package/menu-product/menu-product.js | 289 ++ page_package/menu-product/menu-product.json | 8 + page_package/menu-product/menu-product.wxml | 47 + page_package/menu-product/menu-product.wxss | 6 + page_package/money/bill/bill.js | 116 + page_package/money/bill/bill.json | 8 + page_package/money/bill/bill.wxml | 16 + page_package/money/bill/bill.wxss | 4 + page_package/money/cash/cash.js | 147 + page_package/money/cash/cash.json | 8 + page_package/money/cash/cash.wxml | 69 + page_package/money/cash/cash.wxss | 20 + page_package/money/explain/explain.js | 76 + page_package/money/explain/explain.json | 6 + page_package/money/explain/explain.wxml | 19 + page_package/money/explain/explain.wxss | 4 + page_package/money/history/history.js | 180 + page_package/money/history/history.json | 8 + page_package/money/history/history.wxml | 59 + page_package/money/history/history.wxss | 54 + page_package/money/quota/quota.js | 218 + page_package/money/quota/quota.json | 6 + page_package/money/quota/quota.wxml | 93 + page_package/money/quota/quota.wxss | 35 + page_package/new-welfare/new-welfare.js | 70 + page_package/new-welfare/new-welfare.json | 6 + page_package/new-welfare/new-welfare.wxml | 31 + page_package/new-welfare/new-welfare.wxss | 14 + page_package/news-details/news-details.js | 96 + page_package/news-details/news-details.json | 6 + page_package/news-details/news-details.wxml | 17 + page_package/news-details/news-details.wxss | 5 + page_package/order/order.js | 218 + page_package/order/order.json | 8 + page_package/order/order.wxml | 62 + page_package/order/order.wxss | 12 + page_package/poster/poster.js | 96 + page_package/poster/poster.json | 9 + page_package/poster/poster.wxml | 5 + page_package/poster/poster.wxss | 1 + page_package/product-type/product-type.js | 235 ++ page_package/product-type/product-type.json | 9 + page_package/product-type/product-type.wxml | 47 + page_package/product-type/product-type.wxss | 77 + page_package/profit/profit.js | 156 + page_package/profit/profit.json | 8 + page_package/profit/profit.wxml | 122 + page_package/profit/profit.wxss | 4 + page_package/question/question.js | 70 + page_package/question/question.json | 6 + page_package/question/question.wxml | 13 + page_package/question/question.wxss | 4 + page_package/search/search.js | 281 ++ page_package/search/search.json | 8 + page_package/search/search.wxml | 129 + page_package/search/search.wxss | 25 + page_package/study/study.js | 114 + page_package/study/study.json | 6 + page_package/study/study.wxml | 26 + page_package/study/study.wxss | 1 + page_package/time-reward/time-reward.js | 66 + page_package/time-reward/time-reward.json | 6 + page_package/time-reward/time-reward.wxml | 5 + page_package/time-reward/time-reward.wxss | 1 + page_package/transfer/chain/chain.js | 111 + page_package/transfer/chain/chain.json | 6 + page_package/transfer/chain/chain.wxml | 24 + page_package/transfer/chain/chain.wxss | 1 + page_package/transfer/transfer/transfer.js | 88 + page_package/transfer/transfer/transfer.json | 6 + page_package/transfer/transfer/transfer.wxml | 30 + page_package/transfer/transfer/transfer.wxss | 5 + page_package/video-course/video-course.js | 87 + page_package/video-course/video-course.json | 6 + page_package/video-course/video-course.wxml | 24 + page_package/video-course/video-course.wxss | 5 + page_package/video-play/video-play.js | 70 + page_package/video-play/video-play.json | 6 + page_package/video-play/video-play.wxml | 10 + page_package/video-play/video-play.wxss | 17 + pages/daren/daren.js | 115 + pages/daren/daren.json | 6 + pages/daren/daren.wxml | 62 + pages/daren/daren.wxss | 103 + pages/daren/test-data.js | 1101 +++++ pages/index/index.js | 340 ++ pages/index/index.json | 13 + pages/index/index.wxml | 68 + pages/index/index.wxss | 23 + pages/launch/launch.js | 128 + pages/launch/launch.json | 3 + pages/launch/launch.wxml | 21 + pages/launch/launch.wxss | 18 + pages/login/login.js | 280 ++ pages/login/login.json | 4 + pages/login/login.wxml | 85 + pages/login/login.wxss | 75 + pages/login/phone-login/phone-login.js | 180 + pages/login/phone-login/phone-login.json | 4 + pages/login/phone-login/phone-login.wxml | 57 + pages/login/phone-login/phone-login.wxss | 6 + pages/main-two/home/home.js | 377 ++ pages/main-two/home/home.json | 6 + pages/main-two/home/home.wxml | 114 + pages/main-two/home/home.wxss | 130 + pages/main-two/main-two.js | 355 ++ pages/main-two/main-two.json | 8 + pages/main-two/main-two.wxml | 87 + pages/main-two/main-two.wxss | 72 + pages/main-two/type/type.js | 196 + pages/main-two/type/type.json | 6 + pages/main-two/type/type.wxml | 14 + pages/main-two/type/type.wxss | 5 + pages/mine/mine.js | 151 + pages/mine/mine.json | 6 + pages/mine/mine.wxml | 49 + pages/mine/mine.wxss | 29 + pages/product/product.js | 635 +++ pages/product/product.json | 6 + pages/product/product.wxml | 166 + pages/product/product.wxss | 130 + pages/sort/sort.js | 179 + pages/sort/sort.json | 7 + pages/sort/sort.wxml | 95 + pages/sort/sort.wxss | 155 + pages/strategy/strategy.js | 184 + pages/strategy/strategy.json | 11 + pages/strategy/strategy.wxml | 34 + pages/strategy/strategy.wxss | 49 + pages/vip/vip.js | 246 ++ pages/vip/vip.json | 7 + pages/vip/vip.wxml | 218 + pages/vip/vip.wxss | 73 + project.config.json | 53 + sitemap.json | 7 + utils/constants.js | 72 + utils/data.js | 158 + utils/event.js | 0 utils/language/en.js | 7 + utils/language/i18n.js | 69 + utils/language/zhCN.js | 7 + utils/network/apis.js | 287 ++ utils/network/http.js | 149 + utils/network/services/productImpl.js | 334 ++ utils/network/services/service.js | 166 + utils/network/services/user.js | 372 ++ utils/styles/animation.wxss | 178 + utils/styles/base.wxss | 155 + utils/styles/icon.wxss | 1226 ++++++ utils/styles/main.wxss | 3847 ++++++++++++++++++ utils/util.js | 201 + 266 files changed, 23408 insertions(+) create mode 100644 .gitignore create mode 100644 README.md create mode 100644 app.js create mode 100644 app.json create mode 100644 app.wxss create mode 100644 components/custom/index.js create mode 100644 components/custom/index.json create mode 100644 components/custom/index.wxml create mode 100644 components/custom/index.wxss create mode 100644 components/home-page/home-page.js create mode 100644 components/home-page/home-page.json create mode 100644 components/home-page/home-page.wxml create mode 100644 components/home-page/home-page.wxss create mode 100644 components/new-item/new-item.js create mode 100644 components/new-item/new-item.json create mode 100644 components/new-item/new-item.wxml create mode 100644 components/new-item/new-item.wxss create mode 100644 components/order-item/order-item.js create mode 100644 components/order-item/order-item.json create mode 100644 components/order-item/order-item.wxml create mode 100644 components/order-item/order-item.wxss create mode 100644 components/poster/poster.js create mode 100644 components/poster/poster.json create mode 100644 components/poster/poster.wxml create mode 100644 components/poster/poster.wxss create mode 100644 components/product-item/product-item.js create mode 100644 components/product-item/product-item.json create mode 100644 components/product-item/product-item.wxml create mode 100644 components/product-item/product-item.wxss create mode 100644 components/prompt-dialig/index.js create mode 100644 components/prompt-dialig/index.json create mode 100644 components/prompt-dialig/index.wxml create mode 100644 components/prompt-dialig/index.wxss create mode 100644 components/question/question.js create mode 100644 components/question/question.json create mode 100644 components/question/question.wxml create mode 100644 components/question/question.wxss create mode 100644 components/refresh/refresh.js create mode 100644 components/refresh/refresh.json create mode 100644 components/refresh/refresh.wxml create mode 100644 components/refresh/refresh.wxss create mode 100644 components/study/study.js create mode 100644 components/study/study.json create mode 100644 components/study/study.wxml create mode 100644 components/study/study.wxss create mode 100644 components/video-swiper/video-swiper.js create mode 100644 components/video-swiper/video-swiper.json create mode 100644 components/video-swiper/video-swiper.wxml create mode 100644 components/video-swiper/video-swiper.wxss create mode 100644 custom-tab-bar/index.js create mode 100644 custom-tab-bar/index.json create mode 100644 custom-tab-bar/index.wxml create mode 100644 custom-tab-bar/index.wxss create mode 100644 images/ic_camera.png create mode 100644 images/ic_delivery.png create mode 100644 images/ic_diamond.png create mode 100644 images/ic_fresh.png create mode 100644 images/ic_hot.png create mode 100644 images/ic_like.png create mode 100644 images/ic_link.png create mode 100644 images/ic_makeups.png create mode 100644 images/ic_search_bottom.png create mode 100644 images/ic_search_bottom_cur.png create mode 100644 images/ic_search_right.png create mode 100644 images/ic_search_top.png create mode 100644 images/ic_search_top_cur.png create mode 100644 images/ic_share_btn.jpg create mode 100644 images/ic_skirt.png create mode 100644 images/ic_tab_daren.png create mode 100644 images/ic_tab_daren_cur.png create mode 100644 images/ic_tab_home.png create mode 100644 images/ic_tab_home_cur.png create mode 100644 images/ic_tab_mine.png create mode 100644 images/ic_tab_mine_cur.png create mode 100644 images/ic_tab_strategy.png create mode 100644 images/ic_tab_strategy_cur.png create mode 100644 images/ic_tab_vip.png create mode 100644 images/ic_tab_vip_cur.png create mode 100644 images/ic_toothpaste.png create mode 100644 page_package/about/about.js create mode 100644 page_package/about/about.json create mode 100644 page_package/about/about.wxml create mode 100644 page_package/about/about.wxss create mode 100644 page_package/activity/activity.js create mode 100644 page_package/activity/activity.json create mode 100644 page_package/activity/activity.wxml create mode 100644 page_package/activity/activity.wxss create mode 100644 page_package/apply-vip/apply-vip.js create mode 100644 page_package/apply-vip/apply-vip.json create mode 100644 page_package/apply-vip/apply-vip.wxml create mode 100644 page_package/apply-vip/apply-vip.wxss create mode 100644 page_package/apply-vip/example/example.js create mode 100644 page_package/apply-vip/example/example.json create mode 100644 page_package/apply-vip/example/example.wxml create mode 100644 page_package/apply-vip/example/example.wxss create mode 100644 page_package/contacts/contacts.js create mode 100644 page_package/contacts/contacts.json create mode 100644 page_package/contacts/contacts.wxml create mode 100644 page_package/contacts/contacts.wxss create mode 100644 page_package/details/index.js create mode 100644 page_package/details/index.json create mode 100644 page_package/details/index.wxml create mode 100644 page_package/details/index.wxss create mode 100644 page_package/equity/equity.js create mode 100644 page_package/equity/equity.json create mode 100644 page_package/equity/equity.wxml create mode 100644 page_package/equity/equity.wxss create mode 100644 page_package/fans/fans.js create mode 100644 page_package/fans/fans.json create mode 100644 page_package/fans/fans.wxml create mode 100644 page_package/fans/fans.wxss create mode 100644 page_package/feedback/feedback.js create mode 100644 page_package/feedback/feedback.json create mode 100644 page_package/feedback/feedback.wxml create mode 100644 page_package/feedback/feedback.wxss create mode 100644 page_package/menu-product/menu-product.js create mode 100644 page_package/menu-product/menu-product.json create mode 100644 page_package/menu-product/menu-product.wxml create mode 100644 page_package/menu-product/menu-product.wxss create mode 100644 page_package/money/bill/bill.js create mode 100644 page_package/money/bill/bill.json create mode 100644 page_package/money/bill/bill.wxml create mode 100644 page_package/money/bill/bill.wxss create mode 100644 page_package/money/cash/cash.js create mode 100644 page_package/money/cash/cash.json create mode 100644 page_package/money/cash/cash.wxml create mode 100644 page_package/money/cash/cash.wxss create mode 100644 page_package/money/explain/explain.js create mode 100644 page_package/money/explain/explain.json create mode 100644 page_package/money/explain/explain.wxml create mode 100644 page_package/money/explain/explain.wxss create mode 100644 page_package/money/history/history.js create mode 100644 page_package/money/history/history.json create mode 100644 page_package/money/history/history.wxml create mode 100644 page_package/money/history/history.wxss create mode 100644 page_package/money/quota/quota.js create mode 100644 page_package/money/quota/quota.json create mode 100644 page_package/money/quota/quota.wxml create mode 100644 page_package/money/quota/quota.wxss create mode 100644 page_package/new-welfare/new-welfare.js create mode 100644 page_package/new-welfare/new-welfare.json create mode 100644 page_package/new-welfare/new-welfare.wxml create mode 100644 page_package/new-welfare/new-welfare.wxss create mode 100644 page_package/news-details/news-details.js create mode 100644 page_package/news-details/news-details.json create mode 100644 page_package/news-details/news-details.wxml create mode 100644 page_package/news-details/news-details.wxss create mode 100644 page_package/order/order.js create mode 100644 page_package/order/order.json create mode 100644 page_package/order/order.wxml create mode 100644 page_package/order/order.wxss create mode 100644 page_package/poster/poster.js create mode 100644 page_package/poster/poster.json create mode 100644 page_package/poster/poster.wxml create mode 100644 page_package/poster/poster.wxss create mode 100644 page_package/product-type/product-type.js create mode 100644 page_package/product-type/product-type.json create mode 100644 page_package/product-type/product-type.wxml create mode 100644 page_package/product-type/product-type.wxss create mode 100644 page_package/profit/profit.js create mode 100644 page_package/profit/profit.json create mode 100644 page_package/profit/profit.wxml create mode 100644 page_package/profit/profit.wxss create mode 100644 page_package/question/question.js create mode 100644 page_package/question/question.json create mode 100644 page_package/question/question.wxml create mode 100644 page_package/question/question.wxss create mode 100644 page_package/search/search.js create mode 100644 page_package/search/search.json create mode 100644 page_package/search/search.wxml create mode 100644 page_package/search/search.wxss create mode 100644 page_package/study/study.js create mode 100644 page_package/study/study.json create mode 100644 page_package/study/study.wxml create mode 100644 page_package/study/study.wxss create mode 100644 page_package/time-reward/time-reward.js create mode 100644 page_package/time-reward/time-reward.json create mode 100644 page_package/time-reward/time-reward.wxml create mode 100644 page_package/time-reward/time-reward.wxss create mode 100644 page_package/transfer/chain/chain.js create mode 100644 page_package/transfer/chain/chain.json create mode 100644 page_package/transfer/chain/chain.wxml create mode 100644 page_package/transfer/chain/chain.wxss create mode 100644 page_package/transfer/transfer/transfer.js create mode 100644 page_package/transfer/transfer/transfer.json create mode 100644 page_package/transfer/transfer/transfer.wxml create mode 100644 page_package/transfer/transfer/transfer.wxss create mode 100644 page_package/video-course/video-course.js create mode 100644 page_package/video-course/video-course.json create mode 100644 page_package/video-course/video-course.wxml create mode 100644 page_package/video-course/video-course.wxss create mode 100644 page_package/video-play/video-play.js create mode 100644 page_package/video-play/video-play.json create mode 100644 page_package/video-play/video-play.wxml create mode 100644 page_package/video-play/video-play.wxss create mode 100644 pages/daren/daren.js create mode 100644 pages/daren/daren.json create mode 100644 pages/daren/daren.wxml create mode 100644 pages/daren/daren.wxss create mode 100644 pages/daren/test-data.js create mode 100644 pages/index/index.js create mode 100644 pages/index/index.json create mode 100644 pages/index/index.wxml create mode 100644 pages/index/index.wxss create mode 100644 pages/launch/launch.js create mode 100644 pages/launch/launch.json create mode 100644 pages/launch/launch.wxml create mode 100644 pages/launch/launch.wxss create mode 100644 pages/login/login.js create mode 100644 pages/login/login.json create mode 100644 pages/login/login.wxml create mode 100644 pages/login/login.wxss create mode 100644 pages/login/phone-login/phone-login.js create mode 100644 pages/login/phone-login/phone-login.json create mode 100644 pages/login/phone-login/phone-login.wxml create mode 100644 pages/login/phone-login/phone-login.wxss create mode 100644 pages/main-two/home/home.js create mode 100644 pages/main-two/home/home.json create mode 100644 pages/main-two/home/home.wxml create mode 100644 pages/main-two/home/home.wxss create mode 100644 pages/main-two/main-two.js create mode 100644 pages/main-two/main-two.json create mode 100644 pages/main-two/main-two.wxml create mode 100644 pages/main-two/main-two.wxss create mode 100644 pages/main-two/type/type.js create mode 100644 pages/main-two/type/type.json create mode 100644 pages/main-two/type/type.wxml create mode 100644 pages/main-two/type/type.wxss create mode 100644 pages/mine/mine.js create mode 100644 pages/mine/mine.json create mode 100644 pages/mine/mine.wxml create mode 100644 pages/mine/mine.wxss create mode 100644 pages/product/product.js create mode 100644 pages/product/product.json create mode 100644 pages/product/product.wxml create mode 100644 pages/product/product.wxss create mode 100644 pages/sort/sort.js create mode 100644 pages/sort/sort.json create mode 100644 pages/sort/sort.wxml create mode 100644 pages/sort/sort.wxss create mode 100644 pages/strategy/strategy.js create mode 100644 pages/strategy/strategy.json create mode 100644 pages/strategy/strategy.wxml create mode 100644 pages/strategy/strategy.wxss create mode 100644 pages/vip/vip.js create mode 100644 pages/vip/vip.json create mode 100644 pages/vip/vip.wxml create mode 100644 pages/vip/vip.wxss create mode 100644 project.config.json create mode 100644 sitemap.json create mode 100644 utils/constants.js create mode 100644 utils/data.js create mode 100644 utils/event.js create mode 100644 utils/language/en.js create mode 100644 utils/language/i18n.js create mode 100644 utils/language/zhCN.js create mode 100644 utils/network/apis.js create mode 100644 utils/network/http.js create mode 100644 utils/network/services/productImpl.js create mode 100644 utils/network/services/service.js create mode 100644 utils/network/services/user.js create mode 100644 utils/styles/animation.wxss create mode 100644 utils/styles/base.wxss create mode 100644 utils/styles/icon.wxss create mode 100644 utils/styles/main.wxss create mode 100644 utils/util.js diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..a0dddc6 --- /dev/null +++ b/.gitignore @@ -0,0 +1,21 @@ +.DS_Store +node_modules +/dist + +# local env files +.env.local +.env.*.local + +# Log files +npm-debug.log* +yarn-debug.log* +yarn-error.log* + +# Editor directories and files +.idea +.vscode +*.suo +*.ntvs* +*.njsproj +*.sln +*.sw? diff --git a/README.md b/README.md new file mode 100644 index 0000000..e69de29 diff --git a/app.js b/app.js new file mode 100644 index 0000000..7f205bc --- /dev/null +++ b/app.js @@ -0,0 +1,84 @@ +//app.js +const i18n = require('./utils/language/i18n'); +const en = require('./utils/language/en'); +const zh_cn = require('./utils/language/zhCN'); +const {options} = require('./utils/network/services/service.js') +const constants = require('./utils/constants') +const util = require('./utils/util') + +App({ + onLaunch: function () { + + //国际化 + i18n.registerLocale({en, zh_cn}); + + //获取系统信息 + var sysinfo = wx.getSystemInfoSync(); + var language = sysinfo.language; + if (language.toLowerCase() == "zh_cn" || language.toLowerCase() == "zh") language = "zh_cn"; + this.globalData.sys_info = sysinfo; + this.globalData.sys_platform = sysinfo.platform; + this.globalData.sys_language = language; + this.i18n.setLocale(language); + + // 获取用户信息 + wx.getSetting({ + success: res => { + if (res.authSetting['scope.userInfo']) { + // 已经授权,可以直接调用 getUserInfo 获取头像昵称,不会弹框 + wx.getUserInfo({ + success: res => { + // 可以将 res 发送给后台解码出 unionId + this.globalData.userInfo = res.userInfo + // 由于 getUserInfo 是网络请求,可能会在 Page.onLoad 之后才返回 + // 所以此处加入 callback 以防止这种情况 + if (this.userInfoReadyCallback) { + this.userInfoReadyCallback(res) + } + } + }) + } + } + }) + + + wx.getSystemInfo({ + success: e => { + this.globalData.StatusBar = e.statusBarHeight; + let custom = wx.getMenuButtonBoundingClientRect(); + this.globalData.Custom = custom; + this.globalData.CustomBar = custom.bottom + custom.top - e.statusBarHeight; + this.globalData.windowWidth = e.windowWidth + this.globalData.windowHeight = e.windowHeight + } + }) + this.globalData.loginMode = util.getStorage(constants.NEW_USER_PLOY) + //获取系统配置信息 + options().then(res => { + let loginModel = false + res.data.data.forEach(it => { + if (it.key == 'app_force_login') loginModel = it.value + }) + util.setStorage(constants.NEW_USER_PLOY, loginModel) + util.setStorage(constants.DICTIONARY, res.data.data) + this.globalData.loginMode = util.getStorage(constants.NEW_USER_PLOY) + }) + + }, + + i18n, + globalData: { + userInfo: null, + StatusBar: null, + Custom: null, + CustomBar: null, + sys_language: "zh_cn", + sys_platform: "ios", + sys_info: null, + windowHeight: 0,//窗口高度 + windowWidth: 0,//窗口宽度 + loginStatus: false,//是否已经登录 + loginMode: false,//新用户是否强制注册 + shareUrl:'' + } +}) \ No newline at end of file diff --git a/app.json b/app.json new file mode 100644 index 0000000..98e61ff --- /dev/null +++ b/app.json @@ -0,0 +1,118 @@ +{ + "pages": [ + "pages/main-two/main-two", + "pages/daren/daren", + "pages/vip/vip", + "pages/strategy/strategy", + "pages/mine/mine", + "pages/launch/launch", + "pages/sort/sort", + "pages/product/product", + "pages/login/login", + "pages/login/phone-login/phone-login" + ], + "subpackages": [ + { + "root": "page_package", + "name": "features", + "pages": [ + "details/index", + "search/search", + "product-type/product-type", + "video-play/video-play", + "about/about", + "menu-product/menu-product", + "time-reward/time-reward", + "new-welfare/new-welfare", + "activity/activity", + "money/cash/cash", + "money/quota/quota", + "money/history/history", + "money/bill/bill", + "money/explain/explain", + "fans/fans", + "equity/equity", + "apply-vip/apply-vip", + "profit/profit", + "order/order", + "video-course/video-course", + "study/study", + "question/question", + "contacts/contacts", + "feedback/feedback", + "apply-vip/example/example", + "poster/poster", + "news-details/news-details", + "transfer/transfer/transfer", + "transfer/chain/chain" + ] + } + ], + "preloadRule": { + "pages/launch/launch": { + "network": "all", + "packages": [ + "page_package" + ] + } + }, + "window": { + "navigationBarBackgroundColor": "#F1444C", + "navigationBarTitleText": "尚橙优选", + "navigationBarTextStyle": "white" + }, + "tabBar": { + "custom": true, + "color": "#7A7E83", + "selectedColor": "#f43f3b", + "borderStyle": "black", + "backgroundColor": "#ffffff", + "list": [ + { + "pagePath": "pages/main-two/main-two", + "iconPath": "images/ic_tab_home.png", + "selectedIconPath": "images/ic_tab_home_cur.png", + "text": "首页" + }, + { + "pagePath": "pages/sort/sort", + "iconPath": "images/ic_tab_daren.png", + "selectedIconPath": "images/ic_tab_daren_cur.png", + "text": "分类" + }, + { + "pagePath": "pages/vip/vip", + "iconPath": "images/ic_tab_vip.png", + "selectedIconPath": "images/ic_tab_vip_cur.png", + "text": "会员" + }, + { + "pagePath": "pages/strategy/strategy", + "iconPath": "images/ic_tab_strategy.png", + "selectedIconPath": "images/ic_tab_strategy_cur.png", + "text": "攻略" + }, + { + "pagePath": "pages/mine/mine", + "iconPath": "images/ic_tab_mine.png", + "selectedIconPath": "images/ic_tab_mine_cur.png", + "text": "我的" + } + ], + "usingComponents": {} + }, + "usingComponents": { + "custom": "/components/custom/index", + "prompt": "/components/prompt-dialig/index" + }, + "networkTimeout": { + "request": 30000, + "connectSocket": 20000, + "uploadFile": 60000, + "downloadFile": 60000 + }, + "navigateToMiniProgramAppIdList": [ + "wx91d27dbf599dff74" + ], + "sitemapLocation": "sitemap.json" +} \ No newline at end of file diff --git a/app.wxss b/app.wxss new file mode 100644 index 0000000..5d71c41 --- /dev/null +++ b/app.wxss @@ -0,0 +1,15 @@ +@import "utils/styles/main.wxss"; +@import "utils/styles/icon.wxss"; +@import "utils/styles/animation.wxss"; +@import "utils/styles/base.wxss"; + +/**app.wxss**/ +.container { + height: 100%; + display: flex; + flex-direction: column; + align-items: center; + justify-content: space-between; + padding: 200rpx 0; + box-sizing: border-box; +} diff --git a/components/custom/index.js b/components/custom/index.js new file mode 100644 index 0000000..50a5cf9 --- /dev/null +++ b/components/custom/index.js @@ -0,0 +1,54 @@ +const app = getApp(); +Component({ + /** + * 组件的一些选项 + */ + options: { + addGlobalClass: true, + multipleSlots: true + }, + /** + * 组件的对外属性 + */ + properties: { + bgColor: { + type: String, + default: '' + }, + isCustom: { + type: [Boolean, String], + default: false + }, + isBack: { + type: [Boolean, String], + default: false + }, + bgImage: { + type: String, + default: '' + }, + }, + /** + * 组件的初始数据 + */ + data: { + StatusBar: app.globalData.StatusBar, + CustomBar: app.globalData.CustomBar, + Custom: app.globalData.Custom + }, + /** + * 组件的方法列表 + */ + methods: { + BackPage() { + wx.navigateBack({ + delta: 1 + }); + }, + toHome(){ + wx.reLaunch({ + url: '/pages/main-two/main-two', + }) + } + } +}) \ No newline at end of file diff --git a/components/custom/index.json b/components/custom/index.json new file mode 100644 index 0000000..e8cfaaf --- /dev/null +++ b/components/custom/index.json @@ -0,0 +1,4 @@ +{ + "component": true, + "usingComponents": {} +} \ No newline at end of file diff --git a/components/custom/index.wxml b/components/custom/index.wxml new file mode 100644 index 0000000..3be8267 --- /dev/null +++ b/components/custom/index.wxml @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/components/custom/index.wxss b/components/custom/index.wxss new file mode 100644 index 0000000..bcbaa1c --- /dev/null +++ b/components/custom/index.wxss @@ -0,0 +1 @@ +/* components/custom/index.wxss */ \ No newline at end of file diff --git a/components/home-page/home-page.js b/components/home-page/home-page.js new file mode 100644 index 0000000..feb3bd3 --- /dev/null +++ b/components/home-page/home-page.js @@ -0,0 +1,86 @@ +const app = getApp() +const constants = require("../../utils/constants") +const util = require("../../utils/util") +const {onLogin} = require("../../utils/network/services/user.js") +const {queryProductType, goodsTop} = require("../../utils/network/services/productImpl.js") +const {newsList, homeBanner} = require("../../utils/network/services/service.js") +let pageStart = 1; + +Component({ + /** + * 组件的属性列表 + */ + properties: {}, + + /** + * 组件的初始数据 + */ + data: { + windowHeight: app.globalData.windowHeight, + TabCur: 0, + scrollLeft: 0, + userInfo: '', + requesting: false, + end: false, + emptyShow: false, + page: pageStart, + listData: [], + hasTop: false, + scrollTop: 1, + enableBackToTop: false, + refreshSize: 90, + bottomSize: 100, + color: "#3F82FD", + empty: false, + selectTab: -110, + pages: 1, + isShowBack: false, + isSuperVip: false, + invitationDialog: false, + searchContent: '' + }, + + /** + * 组件的方法列表 + */ + methods: { + login() { + let that = this + this.selectComponent("#main").refresh(); + if (!app.globalData.loginStatus) { + // 登录 + wx.login({ + success: res => { + onLogin(res.code) + .then(res => { + app.globalData.userInfo = res.data.data + app.globalData.loginStatus = true + util.setStorage(constants.AUTH_INFO, res.data.data) + that.setData({userInfo: res.data.data}) + }).catch((err) => { + if (err.data.code = 'USER_NOT_REGISTERED' && app.globalData.loginMode == 'true') { + that.data.requesting = false + that.setData({token: err.data.data.token}) + wx.navigateTo({url: '/pages/login/login?token=' + err.data.data.token}) + } + }) + } + }) + } + }, + onScroll(event) { + this.setData({isShowBack: event.detail.detail.scrollTop > this.data.windowHeight * 0.4}) + }, + // 刷新数据 + refresh() { + this.login() + this.setData({empty: false, requesting: true}) + }, + // 加载更多 + more() { + this.selectComponent("#main").onMore() + this.setData({requesting: true}) + setTimeout(() => {this.setData({requesting: false})}, 1000); + }, + } +}) diff --git a/components/home-page/home-page.json b/components/home-page/home-page.json new file mode 100644 index 0000000..ae0af8d --- /dev/null +++ b/components/home-page/home-page.json @@ -0,0 +1,6 @@ +{ + "component": true, + "usingComponents": { + "bc-scroll": "/components/refresh/refresh" + } +} \ No newline at end of file diff --git a/components/home-page/home-page.wxml b/components/home-page/home-page.wxml new file mode 100644 index 0000000..c5d907e --- /dev/null +++ b/components/home-page/home-page.wxml @@ -0,0 +1,67 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 顶部 + + diff --git a/components/home-page/home-page.wxss b/components/home-page/home-page.wxss new file mode 100644 index 0000000..667fb09 --- /dev/null +++ b/components/home-page/home-page.wxss @@ -0,0 +1,2 @@ +/* components/home-page/home-page.wxss */ +@import "../../pages/index/index.wxss"; \ No newline at end of file diff --git a/components/new-item/new-item.js b/components/new-item/new-item.js new file mode 100644 index 0000000..6b556c5 --- /dev/null +++ b/components/new-item/new-item.js @@ -0,0 +1,151 @@ +// components/new-item/new-item.js +const app = getApp() +Component({ + /** + * 组件的属性列表 + */ + properties: { + listData: { + type: Array, + value: [ + { + title: '成长任务1:升级超级会员省更的多赚的多', + content: '建立一个大于50人的微信群完成升级,即可开启省得更多同时分享赚钱等9项特权。', + subTitle: '', + subContent: '', + actionBtn: '去升级', + video: '查看教学视频', + color: '' + }, + { + title: '成长任务2:掌握选爆款和会卖货的技巧', + content: '了解小程序内重要的选品频道,并掌握多种发品方式和技巧,为请朋好友带来优惠,自己也能轻松赚取推广费。', + subTitle: '想学习更多一定添加专属导师微信!', + subContent: 'df33v', + actionBtn: '复制微信号', + video: '查看教学视频', + color: 'color-main' + }, + { + title: '成长任务3:近培训群实现收益技能双增长', + content: '官方培训群有全方位阶段课程,更有大咖讲师的独家秘诀分享,帮助您的收益和技能实现快速增长。还可以添加导师微信进群学习。', + subTitle: '', + subContent: '', + actionBtn: '', + video: '查看教学视频', + color: '' + }, + { + title: '成长任务4:近爆款群选取更多爆弹素材', + content: '官方爆款群是重要选品渠道之一,这里都是全网每天的爆款商品,已图片+视频+软文形式展示增强出单!', + subTitle: '从爆款群选品要先转链在发出哦~', + subContent: '', + actionBtn: '获取进群二维码', + video: '查看教学视频', + color: 'color6' + }, + { + title: '成长任务5:邀请伙伴加入TA赚您更赚', + content: '学会邀请伙伴加入的三种方式,帮助伙伴省钱赚钱的同时您还能获得平台的额外奖励,邀请越多赚得就越多哦~', + subTitle: '', + subContent: '', + actionBtn: '去邀请', + video: '查看教学视频', + color: '' + }, + // {title:'成长任务6:gu',content:'学会邀请伙伴加入的三种方式,帮助伙伴省钱赚钱的同时您还能获得平台的额外奖励,邀请越多赚得就越多哦~',subTitle:'',subContent:'',actionBtn:'复制',video:'',color:''}, + ] + } + }, + + lifetimes: { + attached: function () { + + } + }, + + /** + * 组件的初始数据 + */ + data: { + invitationDialog: '', + item:null, + mDialog:false + }, + + /** + * 组件的方法列表 + */ + methods: { + onClick(event) { + const item = event.currentTarget.dataset.item + //type=1:跳转页面 2.复制数据 3.显示一张图 4.分享APP + switch (item.type) { + case 1: + wx.navigateTo({ + url: item.data + }) + break + case 2: + this.setData({ + invitationDialog: true, + item:item}) + break + case 3: + this.setData({mDialog: true, + item:item}) + break + case 4: + // this.setData({invitationDialog: true}) + break + } + }, + onVideoClick(event) { + const item = event.currentTarget.dataset.item + console.log(item.videoUrl) + const url = encodeURIComponent(item.videoUrl) + console.log(url) + wx.navigateTo({ + url: '/page_package/video-course/video-course?url=' + url + }) + // switch (Number(event.currentTarget.dataset.index)) { + // case 0: + // wx.navigateTo({ + // url: '/page_package/video-course/video-course' + // }) + // break + // } + }, + hideModal(event) { + switch (Number(event.currentTarget.dataset.iscode)) { + case 0: + wx.setClipboardData({ + data: this.data.item.data, + success: function (res) { + wx.getClipboardData({ + success: function (res) { + wx.showToast({ + title: '复制成功' + }) + } + }) + } + }) + break + } + this.setData({ + invitationDialog: false + }) + }, + onClose() { + this.setData({ + mDialog:false + }) + }, + previewImg(event) { + wx.previewImage({ + urls: [this.data.item.data], + }) + }, + } +}) diff --git a/components/new-item/new-item.json b/components/new-item/new-item.json new file mode 100644 index 0000000..e8cfaaf --- /dev/null +++ b/components/new-item/new-item.json @@ -0,0 +1,4 @@ +{ + "component": true, + "usingComponents": {} +} \ No newline at end of file diff --git a/components/new-item/new-item.wxml b/components/new-item/new-item.wxml new file mode 100644 index 0000000..7f7f4c7 --- /dev/null +++ b/components/new-item/new-item.wxml @@ -0,0 +1,72 @@ + + + {{item.title}} + + + + + + + + + + + + + {{item.action}} + + + + + + + 查看教学视频 + + + + + + + + + 提示 + + + + + + 您的专属导师微信号:{{item.data}} + 关于省钱赚钱的问题,请复制微\n信号去微信添加好友咨询吧~ + 添加时请备注:尚橙成员 + + + 取消 + 复制微信 + + + + + + + + + + + + 预览长按分享 + + + + \ No newline at end of file diff --git a/components/new-item/new-item.wxss b/components/new-item/new-item.wxss new file mode 100644 index 0000000..84b0ea3 --- /dev/null +++ b/components/new-item/new-item.wxss @@ -0,0 +1,37 @@ +/* components/new-item/new-item.wxss */ +@import "../../utils/styles/main.wxss"; +@import "../../utils/styles/icon.wxss"; +@import "../../utils/styles/animation.wxss"; +@import "../../utils/styles/base.wxss"; + +.teach-video{ + width: 100%; + text-align: right; + justify-content: right; +} + +.action-btn{ + padding: 14rpx 30rpx; + font-size: 26rpx; + border-radius: 8rpx; +} + +.share-btn{ + width: 164rpx; + height: 56rpx; + font-size: 26rpx; + border-radius: 8rpx; +} + +.cu-dialog1 { + position: fixed; + display: inline-block; + vertical-align: middle; + margin-left: auto; + margin-right: auto; + width: 680rpx; + max-width: 100%; + background-color: transparent; + border-radius: 10rpx; + overflow: hidden; +} \ No newline at end of file diff --git a/components/order-item/order-item.js b/components/order-item/order-item.js new file mode 100644 index 0000000..d7f0a7d --- /dev/null +++ b/components/order-item/order-item.js @@ -0,0 +1,61 @@ +// components/order-item/order-item.js +const app = getApp() +const {searchProduct} = require('../../utils/network/services/productImpl.js') +const util = require('../../utils/util.js') +const constants = require('../../utils/constants.js') +Component({ + /** + * 组件的属性列表 + */ + properties: { + orderItem: { + type: Object, + value: {}, + }, + type: { + type: Number, + value: 1 + } + }, + + /** + * 组件的初始数据 + */ + data: { + windowWidth: app.globalData.windowWidth, + isShowDialog: false, + msg: "", + }, + + /** + * 组件的方法列表 + */ + methods: { + onItem(event) { + const item = event.currentTarget.dataset.item + const data = {skuIds: [item.skuId]} + wx.showLoading({title: '加载中...'}) + searchProduct(data) + .then(res => { + wx.hideLoading() + if (res.data.data.records.length > 0) { + util.setStorage(constants.PRPDUCT_ITEM, res.data.data.records[0]) + wx.navigateTo({ + url: '/page_package/details/index' + }) + } else { + this.setData({ + isShowDialog: true, + msg: "商品已经失效" + }) + } + }).catch(err => { + wx.hideLoading() + this.setData({ + isShowDialog: true, + msg: "商品已经失效" + }) + }) + } + } +}) diff --git a/components/order-item/order-item.json b/components/order-item/order-item.json new file mode 100644 index 0000000..e8cfaaf --- /dev/null +++ b/components/order-item/order-item.json @@ -0,0 +1,4 @@ +{ + "component": true, + "usingComponents": {} +} \ No newline at end of file diff --git a/components/order-item/order-item.wxml b/components/order-item/order-item.wxml new file mode 100644 index 0000000..1d5edb1 --- /dev/null +++ b/components/order-item/order-item.wxml @@ -0,0 +1,37 @@ + + + + 订单编号:{{orderItem.orderId}} + PLUS会员:{{orderItem.plus ? '是':'否'}} + + 下单时间:{{orderItem.orderTime}} + + 状态:{{orderItem.validCodeDesc}} + 预估返利收益:{{orderItem.estimateRebateFee}} + 预估推广收益:{{orderItem.estimateCommissionFee}} + + + + + + 同店 + + {{item.skuName}} + + + + 状态:{{item.validCodeDesc}} + 编号:{{item.orderId}} + + 数量:{{item.skuNum}} + + 计佣金额:{{item.estimateCosPrice}} + 预估返利收益:{{item.estimateRebateFee}} + 预估推广收益:{{item.estimateCommissionFee}} + + + + + + diff --git a/components/order-item/order-item.wxss b/components/order-item/order-item.wxss new file mode 100644 index 0000000..ac4780f --- /dev/null +++ b/components/order-item/order-item.wxss @@ -0,0 +1,36 @@ +/* components/order-item/order-item.wxss */ +@import "../../utils/styles/main.wxss"; +@import "../../utils/styles/icon.wxss"; +@import "../../utils/styles/animation.wxss"; +@import "../../utils/styles/base.wxss"; + + +.absolute-right{ + position: absolute; + right: 20rpx; +} + +.tag-product { + background-color: #f43f3b; + color: white; + position: absolute; + padding: 2rpx 12rpx; + font-size: 18rpx; + border-radius: 10rpx; + margin-left: 20rpx; +} + +.title-style { + text-indent: 40px; + margin-left: 20rpx; + letter-spacing: 1rpx; + line-height: 36rpx; +} + +.ellipsis { + overflow: hidden; + text-overflow: ellipsis; + display: -webkit-box; + -webkit-line-clamp: 2; + -webkit-box-orient: vertical; +} \ No newline at end of file diff --git a/components/poster/poster.js b/components/poster/poster.js new file mode 100644 index 0000000..f61ac5d --- /dev/null +++ b/components/poster/poster.js @@ -0,0 +1,383 @@ +// components/poster/poster.js +const app = getApp() +const {appCode} = require("../../utils/network/services/productImpl") + +Component({ + /** + * 组件的属性列表 + */ + properties: { + listData: { + type: Array, + value: [ + {content: '微信功能升级的利好\n中国巨大的人口市场\n惠享社交电商的模式与北京加持\n2020必将是喷井爆发的一年!这是天时!地利!人和!\n加入惠享让您站在时代的风口上!'}, + {content: '微信功能升级的利好\n中国巨大的人口市场\n惠享社交电商的模式与北京加持\n2020必将是喷井爆发的一年!这是天时!地利!人和!\n加入惠享让您站在时代的风口上!'}, + ] + } + }, + + /** + * 组件的初始数据 + */ + data: { + userInfo: app.globalData.userInfo, + imgWidth: 0, + imgHeight: 0, + invitationDialog: false, + mDialog: false, + synthesisImg: '', + isShow: false, + appCodes:'', + codeWidth:0, + codeHeight:0, + selectIndex:-1 + }, + + lifetimes: { + attached: function () { + this.setData({ + userInfo: app.globalData.userInfo, + imgWidth: app.globalData.windowWidth * 0.7, + imgHeight: app.globalData.windowHeight * 0.7, + codeWidth: app.globalData.windowWidth * 0.5, + codeHeight: app.globalData.windowWidth * 0.5, + }) + }, + }, + + /** + * 组件的方法列表 + */ + methods: { + onClose() { + this.setData({ + invitationDialog: false, + mDialog:false + }) + }, + onPoster(event) { + this.imgLoader(event.currentTarget.dataset.item,event.currentTarget.dataset.index) + }, + saveImg() { + wx.saveImageToPhotosAlbum({ + filePath: this.data.synthesisImg, + success: (res) => { + this.setData({invitationDialog: false}) + wx.hideLoading() + wx.showModal({ + title: '提示', + showCancel: false, + content: '图片保存成功,进入系统相册分享吧~', + success(res) { + if (res.confirm) { + + } + } + }) + }, + fail: (err) => { + this.setData({invitationDialog: false}) + wx.hideLoading() + wx.showModal({ + title: '提示', + showCancel: false, + content: '请到小程序设置中打开相册权限', + success(res) { + if (res.confirm) { + } + } + }) + } + }) + }, + saveImg1(){ + wx.saveImageToPhotosAlbum({ + filePath: this.data.appCodes, + success: (res) => { + this.setData({mDialog: false}) + wx.hideLoading() + wx.showModal({ + title: '提示', + showCancel: false, + content: '图片保存成功,进入系统相册分享吧~', + success(res) { + if (res.confirm) { + + } + } + }) + }, + fail: (err) => { + this.setData({mDialog: false}) + wx.hideLoading() + wx.showModal({ + title: '提示', + showCancel: false, + content: '请到小程序设置中打开相册权限', + success(res) { + if (res.confirm) { + } + } + }) + } + }) + }, + imgLoader(item,index) { + if (this.data.synthesisImg && this.data.selectIndex == index) { + this.setData({invitationDialog: true}) + } else { + let that = this + this.setData({ + // invitationDialog: true, + selectIndex:index + }) + wx.showLoading({title: '合成中...',}) + Promise.all([ + new Promise((resolve, reject) => { + wx.getImageInfo({ + src: item.imageUrl, + success(res) { + resolve(res) + }, + fail(err) { + err.prompt = '合成分享图失败' + reject(err) + } + }) + }), + new Promise((resolve, reject) => { + wx.getImageInfo({ + src: that.data.userInfo.avatarUrl, + success(res) { + resolve(res) + }, + fail(err) { + err.prompt = '合成头像失败' + reject(err) + } + }) + }), + new Promise((resolve, reject) => { + let data = { + page: "pages/index/index", + scene: {id:that.data.userInfo.userId }, + size: 72 + } + appCode(data) + .then(res => { + wx.showLoading({title: '合成中...',}) + let filePath = `${wx.env.USER_DATA_PATH}/${that.data.userInfo.userId}`; + wx.getFileSystemManager().writeFile({ + filePath: filePath, + data: wx.base64ToArrayBuffer(res.data.data.content), + encoding: 'binary', + success: () => { + resolve(filePath); + }, + fail: err => { + err.prompt = '合成推广码失败' + reject(err); + }, + }); + }).catch((err) => { + err.prompt = '获取推广码失败' + reject(err); + }) + }) + ]).then(res => { + const ctx = wx.createCanvasContext('myCanvas', that); + ctx.fillStyle = "#FFFFFF"; + ctx.fillRect(0, 0, that.data.imgWidth, that.data.imgHeight); + that.setData({ctx: ctx}) + const productImg = res[0].path //f分享图图 + + const avatarUrl = res[1].path //用户头像 + const userName = that.data.userInfo.nickName //用户昵称 + + //绘制商品图 + ctx.drawImage(productImg, 0, 0, that.data.imgWidth, that.data.imgHeight * 0.75); + ctx.save(); + + let imgH = that.data.imgHeight * 0.75 + + //商品标题第一行 + ctx.setTextAlign('left') + ctx.setFillStyle('#000000') + ctx.setFontSize(16) + ctx.fillText("尚橙优选·分享好物", 10, imgH + 24) + ctx.stroke() + + //用户昵称 + ctx.setTextAlign('left') + ctx.setFillStyle('#333333') + ctx.setFontSize(12) + ctx.fillText(userName, 68, imgH + 54) + ctx.stroke() + + //推广语 + ctx.setTextAlign('left') + ctx.setFillStyle('#444444') + ctx.setFontSize(11) + ctx.fillText('邀您一起加入尚橙', 68, imgH + 74) + ctx.stroke() + //推广语 + ctx.setTextAlign('left') + ctx.setFillStyle('#666666') + ctx.setFontSize(9) + ctx.fillText('分享京东优惠好货', 68, imgH + 89) + ctx.stroke() + // + // // + ctx.setTextAlign('right') + ctx.setFillStyle('#444444') + ctx.setFontSize(9) + ctx.fillText('长按识别', that.data.imgWidth - 24, that.data.imgHeight - 10) + ctx.stroke() + // + //用户头像 + ctx.arc(34, imgH + 64, 24, 0, Math.PI * 2, false); + ctx.clip(); + ctx.drawImage(avatarUrl, 10, imgH + 40, 48, 48); + ctx.restore(); + + // 推广二维码 + ctx.drawImage(res[2], that.data.imgWidth - 74, that.data.imgHeight - 88, 64, 64); + ctx.restore(); + + ctx.draw() + setTimeout(() => { + that.heIMg(that,1) + }, 50) + }).catch(err => { + console.log(">>>", err) + wx.hideLoading() + wx.showModal({ + title: '提示', + showCancel: false, + content: "合成图片失败", + success(res) { + } + }) + }) + } + + }, + heIMg(that,type) { + if(type == 1){ + wx.canvasToTempFilePath({ + x: 0, + y: 0, + width: that.data.imgWidth, + height: that.data.imgHeight, + canvasId: 'myCanvas', + success: function (res) { + wx.hideLoading() + that.setData({ + synthesisImg: res.tempFilePath, + isShow:false, + invitationDialog: true + }) + }, + fail: function (err) { + wx.hideLoading() + } + }, that) + }else { + wx.canvasToTempFilePath({ + x: 0, + y: 0, + width: that.data.codeWidth, + height: that.data.codeWidth, + canvasId: 'myCanvas1', + success: function (res) { + wx.hideLoading() + that.setData({ + appCodes: res.tempFilePath, + mDialog: true + }) + }, + fail: function (err) { + wx.hideLoading() + } + }, that) + } + + }, + onCopy(event){ + const item = event.currentTarget.dataset.item + wx.setClipboardData({ + data: item.content, + success: function (res) { + wx.getClipboardData({ + success: function (res) { + wx.showToast({ + title: '复制成功' + }) + } + }) + } + }) + }, + appsCode(){ + if (this.data.appCodes) { + this.setData({mDialog: true}) + } else { + let that = this + wx.showLoading({title: '合成中...',}) + Promise.all([ + new Promise((resolve, reject) => { + let data = { + page: "pages/index/index", + scene: {id:that.data.userInfo.userId }, + size: that.data.codeWidth + } + appCode(data) + .then(res => { + let filePath = `${wx.env.USER_DATA_PATH}/${that.data.userInfo.userId}` + 1; + wx.getFileSystemManager().writeFile({ + filePath: filePath, + data: wx.base64ToArrayBuffer(res.data.data.content), + encoding: 'binary', + success: () => { + resolve(filePath); + }, + fail: err => { + err.prompt = '合成推广码失败' + reject(err); + }, + }); + }).catch((err) => { + err.prompt = '获取推广码失败' + reject(err); + }) + }) + ]).then(res => { + const ctx = wx.createCanvasContext('myCanvas1', that); + ctx.fillStyle = "#FFFFFF"; + ctx.fillRect(0, 0, that.data.codeWidth, that.data.codeHeight); + const productImg = res[0] //f分享图图 + + console.log("推广码",res,productImg) + //绘制商品图 + ctx.drawImage(productImg, 0, 0, that.data.codeWidth, that.data.codeHeight); + ctx.save(); + + ctx.draw() + setTimeout(() => { + that.heIMg(that,2) + }, 50) + }).catch(err => { + console.log(">>>", err) + wx.hideLoading() + wx.showModal({ + title: '提示', + showCancel: false, + content: "合成图片失败", + success(res) { + } + }) + }) + } + } + } +}) diff --git a/components/poster/poster.json b/components/poster/poster.json new file mode 100644 index 0000000..e8cfaaf --- /dev/null +++ b/components/poster/poster.json @@ -0,0 +1,4 @@ +{ + "component": true, + "usingComponents": {} +} \ No newline at end of file diff --git a/components/poster/poster.wxml b/components/poster/poster.wxml new file mode 100644 index 0000000..804ee89 --- /dev/null +++ b/components/poster/poster.wxml @@ -0,0 +1,74 @@ + + + + + + + + + + + 获取我的高清小程序码 + + + + + + + {{item.title}} + + + + {{item.content}} + #点击图片获取您的专属海报# + + + + 复制文字 + + + + + + + + + + + + + 保存到手机相册 + + + + + + + + + + + + 保存到手机相册 + + + + diff --git a/components/poster/poster.wxss b/components/poster/poster.wxss new file mode 100644 index 0000000..3a28343 --- /dev/null +++ b/components/poster/poster.wxss @@ -0,0 +1,62 @@ +/* components/poster/poster.wxss */ +@import "../../utils/styles/main.wxss"; +@import "../../utils/styles/icon.wxss"; +@import "../../utils/styles/animation.wxss"; +@import "../../utils/styles/base.wxss"; + + +.colorff9700{ + color: #ff9700; +} + +.copy-btn{ + height: 48rpx; + width: 164rpx; + border-radius: 32rpx; + font-size: 24rpx; + margin-left: 20rpx; + border: 1px solid #f43f3b; + background-color: transparent; +} + +.bc-modal { + display: flex; + position: fixed; + width: 100%; + height: 100%; + top: 0px; + left: 0px; + z-index: 999; + text-align: center; + justify-content: center; + align-items: center; + background-color: rgba(0, 0, 0, 0.5); + flex-direction: column; +} + +.modal-content{ + background: white; + display: flex; + text-align: center; + justify-content: center; + align-items: center; + flex-direction: column; +} + +.cu-dialog1 { + position: fixed; + display: inline-block; + vertical-align: middle; + margin-left: auto; + margin-right: auto; + width: 680rpx; + max-width: 100%; + background-color: transparent; + border-radius: 10rpx; + overflow: hidden; +} + +.code-bg{ + background-image: linear-gradient(45deg, #FEF3E0, #FFEEEF); + color: var(--white); +} \ No newline at end of file diff --git a/components/product-item/product-item.js b/components/product-item/product-item.js new file mode 100644 index 0000000..86d9080 --- /dev/null +++ b/components/product-item/product-item.js @@ -0,0 +1,40 @@ +// components/product-item/product-item.js +const app = getApp() + +Component({ + options: { + multipleSlots: true // 在组件定义时的选项中启用多slot支持 + }, + /** + * 组件的属性列表 + */ + properties: { + productItem: { + type: Object, + value: {}, + }, + }, + + /** + * 组件的初始数据 + */ + data: { + windowWidth: app.globalData.windowWidth, + + }, + + lifetimes: { + attached: function () { + // let productItem = this.data.productItem + // (productItem.priceInfo.lowestCouponPrice ? + // productItem.priceInfo.lowestCouponPrice:productItem.priceInfo.price) - productItem.commissionInfo.commission + }, + }, + + /** + * 组件的方法列表 + */ + methods: { + + } +}) diff --git a/components/product-item/product-item.json b/components/product-item/product-item.json new file mode 100644 index 0000000..e8cfaaf --- /dev/null +++ b/components/product-item/product-item.json @@ -0,0 +1,4 @@ +{ + "component": true, + "usingComponents": {} +} \ No newline at end of file diff --git a/components/product-item/product-item.wxml b/components/product-item/product-item.wxml new file mode 100644 index 0000000..0098696 --- /dev/null +++ b/components/product-item/product-item.wxml @@ -0,0 +1,68 @@ + + + + + + + 京东 + + {{productItem.skuName}} + + + + + 京东价 + {{productItem.priceInfo.price}} + + {{productItem.comments}}条评论 + {{productItem.goodCommentsShare}}%好评率 + + + + + + + 优惠券 + {{productItem.coupons[0].discount ? + productItem.coupons[0].discount : 0}} + + + + {{productItem.commissionInfo.rebateHint}} + + + + + + + + + 券后价 + {{productItem.priceInfo.lowestCouponPrice ? + productItem.priceInfo.lowestCouponPrice:productItem.priceInfo.price}} + + + 返利价 + {{productItem.priceInfo.lowestRebatePrice}} + + + + 马上抢 + + + + + + + + + {{productItem.commissionInfo.commissionHint}} + + + + + \ No newline at end of file diff --git a/components/product-item/product-item.wxss b/components/product-item/product-item.wxss new file mode 100644 index 0000000..d37c53e --- /dev/null +++ b/components/product-item/product-item.wxss @@ -0,0 +1,135 @@ +/* components/product-item/product-item.wxss */ +@import "../../utils/styles/main.wxss"; +@import "../../utils/styles/icon.wxss"; +@import "../../utils/styles/animation.wxss"; +@import "../../utils/styles/base.wxss"; + +.bg-item{ + background-color: white; + width: 200rpx; + color: #f43f3b; + border-radius: 5rpx; + border: 1px solid #f43f3b; + padding: 6rpx 10rpx; + margin-left: 20rpx; + margin-top: 20rpx; +} + +.tag-product { + background-color: #f43f3b; + color: white; + position: absolute; + padding: 4rpx 12rpx; + font-size: 20rpx; + margin-top: 6rpx; + border-radius: 10rpx; + margin-left: 20rpx; +} + +.title-style { + text-indent: 40px; + margin-left: 20rpx; + letter-spacing: 1rpx; + line-height: 48rpx; +} + +.ellipsis { + overflow: hidden; + text-overflow: ellipsis; + display: -webkit-box; + -webkit-line-clamp: 2; + -webkit-box-orient: vertical; +} + +.comment{ + display: flex; + text-align: end; + justify-content: end; + right: 20rpx; +} + +.semicircle-left{ + width: 20rpx; + height: 20rpx; + background-color: white; + border-bottom-left-radius: 50%; + border-top-left-radius: 50% +} + +.line-division{ + width: 96%; + height: 2rpx; + margin-left: 2%; + margin-top: 20rpx; + background-color: #f2f2f2 +} + +.comment{ + position: absolute; + right: 20rpx; +} + + + +.style-three { + width:100%; + height:1.2rem; + position:relative; + display:-webkit-box; + display:-webkit-flex; + display:flex; + align-items:center; + justify-content:center; + background-color:#f43f3b; + border:none; + color:#fff; +} + +.style-three:before { + content:""; + position:absolute; + left:-.25rem; + width:.9rem; + height:.55rem; + top:50%; + -webkit-transform:translate(-30%,-50%); + transform:translate(-30%,-50%); + -webkit-box-shadow:3px 0 0 #e76960; + box-shadow:3px 0 0 #e76960; + -webkit-border-radius:80%; + border-radius:80%; + background-color:white; +} + +.style-three .get-btn:after { + content:""; + width:.6rem; + position:absolute; + top:0; + bottom:0; + right:23.9%; + left:0; + display:block; + z-index:9; + background-color:white; + background-position:100% 35%; + background-size:1rem .5rem; + background-image:linear-gradient(-45deg,#ffffff 25%,#e76960 25%,#e76960) +} + +.style-three .get-btn { + display:-webkit-box; + display:-webkit-flex; + display:flex; + position: absolute; + right: 0; + align-items:center; + justify-content:center; + width:5%; + height:1.2rem; + text-align:center; + color:#fff; + font-size:1.5rem; + line-height:1.35; + background-color:#fff; +} \ No newline at end of file diff --git a/components/prompt-dialig/index.js b/components/prompt-dialig/index.js new file mode 100644 index 0000000..465c280 --- /dev/null +++ b/components/prompt-dialig/index.js @@ -0,0 +1,45 @@ +// components/prompt-dialig/index.js +Component({ + /** + * 组件的属性列表 + */ + properties: { + cancelText: { + type: String, + default: "取消" + }, + confirmText: { + type: String, + default: "确定" + }, + promptMsg: { + type: String, + default: "提示消息", + }, + invitationDialog: { + type: Boolean, + default: false + }, + isShowCancel: { + type: Boolean, + default: false + } + + }, + + /** + * 组件的初始数据 + */ + data: {}, + + /** + * 组件的方法列表 + */ + methods: { + hideModal(event) { + this.setData({invitationDialog:false}) + if(event.currentTarget.dataset.iscode == 0) + this.triggerEvent("onConfirm") + } + } +}) diff --git a/components/prompt-dialig/index.json b/components/prompt-dialig/index.json new file mode 100644 index 0000000..e8cfaaf --- /dev/null +++ b/components/prompt-dialig/index.json @@ -0,0 +1,4 @@ +{ + "component": true, + "usingComponents": {} +} \ No newline at end of file diff --git a/components/prompt-dialig/index.wxml b/components/prompt-dialig/index.wxml new file mode 100644 index 0000000..0a96771 --- /dev/null +++ b/components/prompt-dialig/index.wxml @@ -0,0 +1,20 @@ + + + + + 提示 + + + {{promptMsg}} + + + {{cancelText}} + {{confirmText}} + + + diff --git a/components/prompt-dialig/index.wxss b/components/prompt-dialig/index.wxss new file mode 100644 index 0000000..f91efd1 --- /dev/null +++ b/components/prompt-dialig/index.wxss @@ -0,0 +1,5 @@ +/* components/prompt-dialig/index.wxss */ +@import "../../utils/styles/main.wxss"; +@import "../../utils/styles/icon.wxss"; +@import "../../utils/styles/animation.wxss"; +@import "../../utils/styles/base.wxss"; \ No newline at end of file diff --git a/components/question/question.js b/components/question/question.js new file mode 100644 index 0000000..e95c1d4 --- /dev/null +++ b/components/question/question.js @@ -0,0 +1,86 @@ +// components/question/question.js +const app = getApp() +const constants = require("../../utils/constants") +const util = require("../../utils/util") +const {faq} = require("../../utils/network/services/service") +const startPage = 1 +Component({ + /** + * 组件的属性列表 + */ + properties: { + listData: { + type: Array, + value: [ + { + open: false, + questionList: [ + { + title: '哪些情况会造成订单无效?', + content: '1.涉嫌利用本平台实施欺诈或其他违法行为(运营方有权单方对此作出独立认定);\n' + + '\n' + + '2.被任何第三方投诉或被相关司法、行政机关处理的;\n' + + '\n' + + '3.恶意使用本平台功能,使用任何装置、软件或例行程序干预或试图干预京东台或本平台的;\n' + + '\n' + + '4.利用计算机病毒/程序等手段,非法窃取、删除、修改或增加其他会员的任何信 息,或以其他任何方式危害京东平台/本平台其他功能的正常运行;\n' + + '\n' + + '5.利用京东CPS系统漏洞,谋取利益;\n' + + '\n' + + '6.未经运营方书面同意,擅自许可他人使用本平台或擅自将本平台功能全部或部 分转让他人(包括但不限于擅自许可他人使用其帐号利用京本平台进行推广,或擅自将其帐号转让或泄露给他人的);\n' + + '\n' + + '7.以不良方法或技术等规避本协议约定和规则要求等;\n' + + '\n' + + '8.通过程序、脚本模拟或其他形式进行或产生非正常的浏览、点击、交易行为等。通过奖励、诱导点击、弹窗、自动模拟用户点击等行为,产生非正常的浏览、点击、成交的行为;\n' + + '\n' + + '9.流量劫持。如通过病毒、木马、恶意插件和未经授权软件捆绑安装、强设首页、劫持地址栏或浏览器、劫持京东页面、搜索引擎作弊、篡改用户信息等非常规手段劫持正常流量。或通过链路劫持、DNS劫持、或者ARP攻击等手段劫持正常流量。或者在用户正常浏览过程中,通过修改URL参数或弹窗(浮窗)等的方式劫持京东商城或京东合作伙伴的正常流量(包括京东页面、合作伙伴和其他网站等);\n' + + '\n' + + '10.其他京东联盟有合理理由证明的数据异常(如流量来源、分布等)情况。会员承诺并保证:按本协议约定使用本平台并进行推广,遵守平台规则,按约定收取服务费并支付平台费。' + }, + { + title: '什么是“上月预估结算佣金”、“本月预估结算佣金”?', + content: '上月预估结算佣金:上个自然月产生的已完成订单的预估佣金总额,最终结算金额以账单中的结算数据为准。\n' + + '\n' + + '本月预估结算佣金:本个自然月(不包含当日)产生的已完成订单的预估佣金总额,最终结算金额以账单中的结算数据为准。 ' + } + ] + } + ] + } + }, + + /** + * 组件的初始数据 + */ + data: { + windowWidth: app.globalData.windowWidth, + questionList:[], + page:startPage + }, + + /** + * 组件的方法列表 + */ + methods: { + onShrink(event) { + let index = event.currentTarget.dataset.index + let item = event.currentTarget.dataset.item + item.open = !item.open + let listData = this.data.listData + listData.splice(index, 1, item) + this.setData({listData: listData}) + }, + itemClick(event) { + let item = event.currentTarget.dataset.items + util.setStorage(constants.QUESTION,item) + wx.navigateTo({ + url: '/page_package/question/question' + }) + }, + getData(type){ + faq().then(res => { + this.setData({questionList:res.data.data}) + }) + }, + }, +}) diff --git a/components/question/question.json b/components/question/question.json new file mode 100644 index 0000000..e8cfaaf --- /dev/null +++ b/components/question/question.json @@ -0,0 +1,4 @@ +{ + "component": true, + "usingComponents": {} +} \ No newline at end of file diff --git a/components/question/question.wxml b/components/question/question.wxml new file mode 100644 index 0000000..49f98cb --- /dev/null +++ b/components/question/question.wxml @@ -0,0 +1,32 @@ + + + + + + + + + {{item.category}} + + + + {{items.title}} + + + + + + + + + {{item.open?'折叠收回':'展开更多'}} + + + + + diff --git a/components/question/question.wxss b/components/question/question.wxss new file mode 100644 index 0000000..c3cce98 --- /dev/null +++ b/components/question/question.wxss @@ -0,0 +1,46 @@ +/* components/question/question.wxss */ +@import "../../utils/styles/main.wxss"; +@import "../../utils/styles/icon.wxss"; +@import "../../utils/styles/animation.wxss"; +@import "../../utils/styles/base.wxss"; + +.question-icon{ + width: 218rpx; + align-items: start; + text-align: center; + justify-content: center; +} + +.question-list{ + border-left: 1px solid #f2f2f2; +} + +.question-item{ + height: 84rpx; + border-top: 1px solid #f2f2f2; + align-items: center; + width: calc(100vw - 250rpx); + padding-left: 20rpx; +} + +.ellipsis{ + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; +} + +.shrink-btn{ + background-color: white; + padding: 8rpx 16rpx; + border-radius: 24rpx; + margin-top: -32rpx; + +} + +.type-icon{ + width: 56rpx; + height: 56rpx; + background-image: linear-gradient(90deg, #f43f3b, #da7068); + border-radius: 50%; + color: white; +} \ No newline at end of file diff --git a/components/refresh/refresh.js b/components/refresh/refresh.js new file mode 100644 index 0000000..784903b --- /dev/null +++ b/components/refresh/refresh.js @@ -0,0 +1,227 @@ +// components/refresh/refresh.js + +const app = getApp() + +Component({ + properties: { + // 加载中 + requesting: { + type: Boolean, + value: false, + observer: 'requestingEnd', + }, + scrollTop: { + type: Number, + value: 0, + }, + // 加载完毕 + end: { + type: Boolean, + value: false, + }, + // 控制空状态的显示 + emptyShow: { + type: Boolean, + value: false, + }, + // 当前列表长度 + listCount: { + type: Number, + value: 0, + }, + // 空状态的图片 + emptyUrl: { + type: String, + value: "/assets/image/empty/empty.png" + }, + // 空状态的文字提示 + emptyText: { + type: String, + value: "未找到数据" + }, + // 是否有header + hasTop: { + type: Boolean, + value: false + }, + // 下拉刷新的高度 + refreshSize: { + type: Number, + value: 90, + observer: 'refreshChange' + }, + // 底部高度 + bottomSize: { + type: Number, + value: 0, + }, + // 颜色 + color: { + type: String, + value: "" + }, + // iOS点击顶部状态栏、安卓双击标题栏时,滚动条返回顶部,只支持竖向 + enableBackToTop: { + type: Boolean, + value: false + } + }, + data: { + StatusBar: app.globalData.StatusBar, + CustomBar: app.globalData.CustomBar, + Custom: app.globalData.Custom, + /* 未渲染数据 */ + mode: 'refresh', // refresh 和 more 两种模式 + successShow: false, // 显示success + successTran: false, // 过度success + refreshStatus: 1, // 1: 下拉刷新, 2: 松开更新, 3: 加载中, 4: 加载完成 + move: -45, // movable-view 偏移量 + scrollHeight1: 0, // refresh view 高度负值 + scrollHeight2: 0, // refresh view - success view 高度负值 + timer: null, + + /* 渲染数据 */ + // scrollTop: 0, + overOnePage: false + }, + methods: { + /** + * 处理 bindscrolltolower 失效情况 + */ + scroll(e) { + // 可以触发滚动表示超过一屏 + this.setData({ + overOnePage: true + }); + clearTimeout(this.data.timer); + this.setData({ + timer: setTimeout(() => { + this.setData({ + scrollTop: e.detail.scrollTop + }) + }, 100) + }); + this.triggerEvent('scroll',e); + }, + /** + * movable-view 滚动监听 + */ + change(e) { + let refreshStatus = this.data.refreshStatus, + diff = e.detail.y; + + if (refreshStatus >= 3) return; + + if (diff > -10) { + this.setData({ + refreshStatus: 2 + }); + } else { + this.setData({ + refreshStatus: 1 + }); + } + }, + /** + * movable-view 触摸结束事件 + */ + touchend() { + let refreshStatus = this.data.refreshStatus; + + if (refreshStatus >= 3) return; + + if (refreshStatus === 2) { + wx.vibrateShort(); + this.setData({ + refreshStatus: 3, + move: 0, + mode: 'refresh' + }); + this.triggerEvent('refresh'); + } else if (refreshStatus === 1) { + this.setData({ + move: this.data.scrollHeight1 + }); + } + }, + /** + * 加载更多 + */ + more() { + if (!this.properties.end) { + this.setData({ + mode: 'more' + }); + this.triggerEvent('more'); + } + }, + /** + * 监听 requesting 字段变化, 来处理下拉刷新对应的状态变化 + */ + requestingEnd(newVal, oldVal) { + if (this.data.mode === 'more') return; + + if (oldVal === true && newVal === false) { + setTimeout(() => { + this.setData({ + successShow: true, + refreshStatus: 4, + move: this.data.scrollHeight2 + }); + setTimeout(() => { + this.setData({ + successTran: true, + move: this.data.scrollHeight1 + }); + setTimeout(() => { + this.setData({ + refreshStatus: 1, + successShow: false, + successTran: false, + move: this.data.scrollHeight1 + }); + }, 10) + }, 10) + }, 600) + } else { + if (this.data.refreshStatus !== 3) { + this.setData({ + refreshStatus: 3, + move: 0 + }); + } + } + }, + /** + * 监听下拉刷新高度变化, 如果改变重新初始化参数, 最小高度80rpx + */ + refreshChange(newVal, oldVal) { + if (newVal <= 80) { + this.setData({ + refreshSize: 80 + }); + } + // 异步加载数据时候, 延迟执行 init 方法, 防止基础库 2.7.1 版本及以下无法正确获取 dom 信息 + setTimeout(() => this.init(), 10); + }, + /** + * 初始化scroll组件参数, 动态获取 下拉刷新区域 和 success 的高度 + */ + init() { + let { + windowWidth + } = wx.getSystemInfoSync(); + let successHeight = (windowWidth || 375) / 750 * 70; + + this.createSelectorQuery().select("#refresh").boundingClientRect((res) => { + this.setData({ + scrollHeight1: -res.height, + scrollHeight2: successHeight - res.height + }); + }).exec(); + }, + }, + ready() { + this.init(); + } +}); \ No newline at end of file diff --git a/components/refresh/refresh.json b/components/refresh/refresh.json new file mode 100644 index 0000000..e8cfaaf --- /dev/null +++ b/components/refresh/refresh.json @@ -0,0 +1,4 @@ +{ + "component": true, + "usingComponents": {} +} \ No newline at end of file diff --git a/components/refresh/refresh.wxml b/components/refresh/refresh.wxml new file mode 100644 index 0000000..2a7b21f --- /dev/null +++ b/components/refresh/refresh.wxml @@ -0,0 +1,43 @@ + + + + + + + + + + + + + + + + + + + + + + 下拉刷新 + 松开更新 + 加载中... + + + + + + + \ No newline at end of file diff --git a/components/refresh/refresh.wxss b/components/refresh/refresh.wxss new file mode 100644 index 0000000..0ad8aa8 --- /dev/null +++ b/components/refresh/refresh.wxss @@ -0,0 +1,292 @@ +.movable-area { + width: 100%; + height: 100vh; +} + +.scroll { + width: 100%; + height: calc(100vh + 90rpx); +} + +.scroll__view { + height: 100%; + position: relative; + box-sizing: border-box; +} + +.scroll__refresh { + height: 90rpx; + position: relative; +} + +.scroll__refresh--hidden { + visibility: hidden; +} + +.scroll__bottom { + position: relative; + height: 40rpx; + padding: 40rpx 0; +} + +.scroll__loading { + position: absolute; + top: 50%; + left: 0; + right: 0; + transform: translateY(-50%); + text-align: center; + color: #999; +} + +.scroll__loading .text { + display: inline-block; + vertical-align: middle; + margin-left: 40rpx; +} + +.success { + position: absolute; + z-index: 9; + top: 20rpx; + left: 0; + width: 100%; + height: 70rpx; + line-height: 70rpx; + font-size: 24rpx; + text-align: center; + opacity: 0; + transform: scale(0); + color: #3f82fd; +} + +.success:after { + content: " "; + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; + background-color: currentColor; + opacity: 0.7; + transform: scaleX(0); + transition: transform 0.3s ease-in-out; + z-index: 0; +} + +.success > .info { + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; + z-index: 1; + color: #fff; +} + +.success--show { + opacity: 1; + transform: scale(1); +} + +.success--show:after { + transform: scaleX(1); +} + +.success--tran { + opacity: 0; + transform: translateY(-100%); + transition: opacity 0.35s linear, transform 0.35s linear; +} + +.empty { + padding: 30rpx; + text-align: center; +} + +.empty__image { + width: 200rpx; + height: 200rpx; + margin: 160rpx auto 60rpx; +} + +.empty__text { + color: #999; +} + +.arrow { + position: relative; + border-radius: 4rpx; + width: 4rpx; + height: 30rpx; + background: #a5a5a5; + transition: transform 0.15s ease-in-out; + display: inline-block; + vertical-align: middle; +} + +.arrow:before { + position: absolute; + content: ""; + bottom: -4rpx; + right: 50%; + width: 4rpx; + height: 16rpx; + transform: rotate(45deg); + transform-origin: 100% 100%; + background: #a5a5a5; + border-radius: 4rpx; +} + +.arrow:after { + position: absolute; + content: ""; + bottom: -4rpx; + left: 50%; + width: 4rpx; + height: 16rpx; + transform: rotate(-45deg); + transform-origin: 0% 100%; + background: #a5a5a5; + border-radius: 4rpx; +} + +.arrow.rotate { + transform: rotate(-180deg); +} + +.loading { + position: relative; + display: inline-block; + vertical-align: middle; + width: 36rpx; + height: 36rpx; + margin-right: -14rpx; +} + +.loading__item { + position: absolute; + top: 0; + left: 0; + width: 36rpx; + height: 36rpx; +} + +.loading__item:before { + content: ""; + display: block; + margin: 0 auto; + width: 4rpx; + height: 8rpx; + background-color: #a5a5a5; + border-radius: 4rpx; + animation: fadeDelay 1.2s infinite ease-in-out both; +} + +.loading__item:nth-child(2) { + transform: rotate(30deg); +} + +.loading__item:nth-child(2):before { + animation-delay: -1.1s; +} + +.loading__item:nth-child(3) { + transform: rotate(60deg); +} + +.loading__item:nth-child(3):before { + animation-delay: -1s; +} + +.loading__item:nth-child(4) { + transform: rotate(90deg); +} + +.loading__item:nth-child(4):before { + animation-delay: -0.9s; +} + +.loading__item:nth-child(5) { + transform: rotate(120deg); +} + +.loading__item:nth-child(5):before { + animation-delay: -0.8s; +} + +.loading__item:nth-child(6) { + transform: rotate(150deg); +} + +.loading__item:nth-child(6):before { + animation-delay: -0.7s; +} + +.loading__item:nth-child(7) { + transform: rotate(180deg); +} + +.loading__item:nth-child(7):before { + animation-delay: -0.6s; +} + +.loading__item:nth-child(8) { + transform: rotate(210deg); +} + +.loading__item:nth-child(8):before { + animation-delay: -0.5s; +} + +.loading__item:nth-child(9) { + transform: rotate(240deg); +} + +.loading__item:nth-child(9):before { + animation-delay: -0.4s; +} + +.loading__item:nth-child(10) { + transform: rotate(270deg); +} + +.loading__item:nth-child(10):before { + animation-delay: -0.3s; +} + +.loading__item:nth-child(11) { + transform: rotate(300deg); +} + +.loading__item:nth-child(11):before { + animation-delay: -0.2s; +} + +.loading__item:nth-child(12) { + transform: rotate(330deg); +} + +.loading__item:nth-child(12):before { + animation-delay: -0.1s; +} + +@keyframes fadeDelay { + 0%, 39%, 100% { + opacity: 0.2; + } + + 40% { + opacity: 1; + } +} + +@-webkit-keyframes fadeDelay { + 0%, 39%, 100% { + opacity: 0.2; + } + + 40% { + opacity: 1; + } +} diff --git a/components/study/study.js b/components/study/study.js new file mode 100644 index 0000000..2ef7bff --- /dev/null +++ b/components/study/study.js @@ -0,0 +1,29 @@ +// components/study/study.js +const app = getApp() + +Component({ + /** + * 组件的属性列表 + */ + properties: { + + }, + + /** + * 组件的初始数据 + */ + data: { + windowWidth: app.globalData.windowWidth, + }, + + /** + * 组件的方法列表 + */ + methods: { + onClick(event){ + wx.navigateTo({ + url: '/page_package/study/study' + }) + } + } +}) diff --git a/components/study/study.json b/components/study/study.json new file mode 100644 index 0000000..e8cfaaf --- /dev/null +++ b/components/study/study.json @@ -0,0 +1,4 @@ +{ + "component": true, + "usingComponents": {} +} \ No newline at end of file diff --git a/components/study/study.wxml b/components/study/study.wxml new file mode 100644 index 0000000..8af3d53 --- /dev/null +++ b/components/study/study.wxml @@ -0,0 +1,28 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + 小编正在整理中 + diff --git a/components/study/study.wxss b/components/study/study.wxss new file mode 100644 index 0000000..6061407 --- /dev/null +++ b/components/study/study.wxss @@ -0,0 +1,11 @@ +/* components/study/study.wxss */ +@import "../../utils/styles/main.wxss"; +@import "../../utils/styles/icon.wxss"; +@import "../../utils/styles/animation.wxss"; +@import "../../utils/styles/base.wxss"; + +.skill{ + border-left: 8rpx solid #f43f3b; + padding: 4rpx 8rpx; + +} \ No newline at end of file diff --git a/components/video-swiper/video-swiper.js b/components/video-swiper/video-swiper.js new file mode 100644 index 0000000..ff97d9d --- /dev/null +++ b/components/video-swiper/video-swiper.js @@ -0,0 +1,385 @@ +// components/video-swiper/video-swiper.js +const app = getApp() +module.exports = + /******/ + (function(modules) { // webpackBootstrap + /******/ // The module cache + /******/ + var installedModules = {}; + /******/ + /******/ // The require function + /******/ + function __webpack_require__(moduleId) { + /******/ + /******/ // Check if module is in cache + /******/ + if (installedModules[moduleId]) { + /******/ + return installedModules[moduleId].exports; + /******/ + } + /******/ // Create a new module (and put it into the cache) + /******/ + var module = installedModules[moduleId] = { + /******/ + i: moduleId, + /******/ + l: false, + /******/ + exports: {} + /******/ + }; + /******/ + /******/ // Execute the module function + /******/ + modules[moduleId].call(module.exports, module, module.exports, __webpack_require__); + /******/ + /******/ // Flag the module as loaded + /******/ + module.l = true; + /******/ + /******/ // Return the exports of the module + /******/ + return module.exports; + /******/ + } + /******/ + /******/ + /******/ // expose the modules object (__webpack_modules__) + /******/ + __webpack_require__.m = modules; + /******/ + /******/ // expose the module cache + /******/ + __webpack_require__.c = installedModules; + /******/ + /******/ // define getter function for harmony exports + /******/ + __webpack_require__.d = function(exports, name, getter) { + /******/ + if (!__webpack_require__.o(exports, name)) { + /******/ + Object.defineProperty(exports, name, { + enumerable: true, + get: getter + }); + /******/ + } + /******/ + }; + /******/ + /******/ // define __esModule on exports + /******/ + __webpack_require__.r = function(exports) { + /******/ + if (typeof Symbol !== 'undefined' && Symbol.toStringTag) { + /******/ + Object.defineProperty(exports, Symbol.toStringTag, { + value: 'Module' + }); + /******/ + } + /******/ + Object.defineProperty(exports, '__esModule', { + value: true + }); + /******/ + }; + /******/ + /******/ // create a fake namespace object + /******/ // mode & 1: value is a module id, require it + /******/ // mode & 2: merge all properties of value into the ns + /******/ // mode & 4: return value when already ns object + /******/ // mode & 8|1: behave like require + /******/ + __webpack_require__.t = function(value, mode) { + /******/ + if (mode & 1) value = __webpack_require__(value); + /******/ + if (mode & 8) return value; + /******/ + if ((mode & 4) && typeof value === 'object' && value && value.__esModule) return value; + /******/ + var ns = Object.create(null); + /******/ + __webpack_require__.r(ns); + /******/ + Object.defineProperty(ns, 'default', { + enumerable: true, + value: value + }); + /******/ + if (mode & 2 && typeof value != 'string') + for (var key in value) __webpack_require__.d(ns, key, function(key) { + return value[key]; + }.bind(null, key)); + /******/ + return ns; + /******/ + }; + /******/ + /******/ // getDefaultExport function for compatibility with non-harmony modules + /******/ + __webpack_require__.n = function(module) { + /******/ + var getter = module && module.__esModule ? + /******/ + function getDefault() { + return module['default']; + } : + /******/ + function getModuleExports() { + return module; + }; + /******/ + __webpack_require__.d(getter, 'a', getter); + /******/ + return getter; + /******/ + }; + /******/ + /******/ // Object.prototype.hasOwnProperty.call + /******/ + __webpack_require__.o = function(object, property) { + return Object.prototype.hasOwnProperty.call(object, property); + }; + /******/ + /******/ // __webpack_public_path__ + /******/ + __webpack_require__.p = ""; + /******/ + /******/ + /******/ // Load entry module and return exports + /******/ + return __webpack_require__(__webpack_require__.s = 0); + /******/ + }) +/************************************************************************/ +/******/ +([ + /* 0 */ + /***/ + (function(module, exports, __webpack_require__) { + + "use strict"; + + + Component({ + options: { + addGlobalClass: true, + pureDataPattern: /^_/ + }, + properties: { + duration: { + type: Number, + value: 500 + }, + easingFunction: { + type: String, + value: 'default' + }, + current: { + type: Number, + value: 0 + }, + loop: { + type: Boolean, + value: true + }, + videoList: { + type: Object, + value: {}, + observer: function observer() { + var newVal = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : []; + this._videoListChanged(newVal.videos, newVal.current); + } + } + }, + data: { + nextQueue: [], + prevQueue: [], + curQueue: [], + circular: false, + _last: 1, + _change: -1, + _invalidUp: 0, + _invalidDown: 0, + _videoContexts: [], + percent: 0, + isPaly: false, + currentIndex: 0, + windowWidth: app.globalData.windowWidth, + windowHeight: app.globalData.windowHeight, + selectVideo: { + id: 0, + index: 0 + } + }, + lifetimes: { + attached: function attached() { + this.data._videoContexts = [wx.createVideoContext('video_0', this), wx.createVideoContext('video_1', this), wx.createVideoContext('video_2', this)]; + this.setData({ + currentIndex: 0 + }) + } + }, + methods: { + _videoListChanged: function _videoListChanged(newVal, current) { + if (newVal == undefined) return + var _this = this; + + var data = this.data; + newVal.forEach(function(item) { + data.nextQueue.push(item); + }); + if (data.curQueue.length === 0) { + let postion = newVal.length - current + if (postion >= 3) + this.setData({ + curQueue: data.nextQueue.splice(current, 3) + }, function() { + _this.playCurrent(0); + }); + else + this.setData({ + curQueue: data.nextQueue.splice(current, postion) + }, function() { + _this.playCurrent(0); + }); + } + }, + animationfinish: function animationfinish(e) { + var _data = this.data, + _last = _data._last, + _change = _data._change, + curQueue = _data.curQueue, + prevQueue = _data.prevQueue, + nextQueue = _data.nextQueue; + + var current = e.detail.current; + var diff = current - _last; + if (diff === 0) return; + this.data._last = current; + this.playCurrent(current); + this.triggerEvent('change', { + activeId: curQueue[current].id + }); + var direction = diff === 1 || diff === -2 ? 'up' : 'down'; + if (direction === 'up') { + if (this.data._invalidDown === 0) { + var change = (_change + 1) % 3; + var add = nextQueue.shift(); + var remove = curQueue[change]; + if (add) { + prevQueue.push(remove); + curQueue[change] = add; + this.data._change = change; + } else { + this.data._invalidUp += 1; + } + } else { + this.data._invalidDown -= 1; + } + } + if (direction === 'down') { + if (this.data._invalidUp === 0) { + var _change2 = _change; + var _remove = curQueue[_change2]; + var _add = prevQueue.pop(); + if (_add) { + curQueue[_change2] = _add; + nextQueue.unshift(_remove); + this.data._change = (_change2 - 1 + 3) % 3; + } else { + this.data._invalidDown += 1; + } + } else { + this.data._invalidUp -= 1; + } + } + var circular = true; + if (nextQueue.length === 0 && current !== 0) { + circular = false; + } + if (prevQueue.length === 0 && current !== 2) { + circular = false; + } + this.setData({ + curQueue: curQueue, + circular: circular + }); + }, + playCurrent: function playCurrent(current) { + this.data._videoContexts.forEach(function(ctx, index) { + index !== current ? ctx.pause() : ctx.play(); + }); + }, + onPlay: function onPlay(e) { + this.trigger(e, 'play'); + this.setData({ + isPaly: true, + selectVideo: { + id: e.currentTarget.dataset.id, + index: e.currentTarget.dataset.index + } + }) + }, + onPause: function onPause(e) { + this.trigger(e, 'pause'); + this.setData({ + isPaly: false + }) + }, + clickPause(e) { + if (!this.data.isPaly) + this.data._videoContexts[e.currentTarget.dataset.index].play() + else + this.data._videoContexts[e.currentTarget.dataset.index].pause() + }, + onEnded: function onEnded(e) { + this.trigger(e, 'ended'); + }, + onError: function onError(e) { + this.trigger(e, 'error'); + }, + onTimeUpdate: function onTimeUpdate(e) { + this.trigger(e, 'timeupdate'); + let percent = (e.detail.currentTime / e.detail.duration) * 100 + this.setData({ + percent: percent.toFixed(2) + }) + }, + onWaiting: function onWaiting(e) { + this.trigger(e, 'wait'); + }, + goUserHome: function goUserHome(e) { + this.trigger(e, 'user'); + }, + likeVideoOrNot: function likeVideoOrNot(e) { + this.trigger(e, 'like'); + }, + showComments: function showComments(e) { + this.trigger(e, 'comments'); + }, + shareMe: function shareMe(e) { + this.triggerEvent('share', this.data.selectVideo, {}) + }, + onProgress: function onProgress(e) { + this.trigger(e, 'progress'); + }, + onLoadedMetaData: function onLoadedMetaData(e) { + this.trigger(e, 'loadedmetadata'); + }, + trigger: function trigger(e, type) { + var ext = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {}; + + var detail = e.detail; + var activeId = e.target.dataset.id; + this.triggerEvent(type, Object.assign(Object.assign(Object.assign({}, detail), { + activeId: activeId + }), ext)); + } + } + }); + }) +]); \ No newline at end of file diff --git a/components/video-swiper/video-swiper.json b/components/video-swiper/video-swiper.json new file mode 100644 index 0000000..e8cfaaf --- /dev/null +++ b/components/video-swiper/video-swiper.json @@ -0,0 +1,4 @@ +{ + "component": true, + "usingComponents": {} +} \ No newline at end of file diff --git a/components/video-swiper/video-swiper.wxml b/components/video-swiper/video-swiper.wxml new file mode 100644 index 0000000..371875d --- /dev/null +++ b/components/video-swiper/video-swiper.wxml @@ -0,0 +1,59 @@ + + + + + + + + + + + + + + + + + + + {{item.visitCount}} + + + + + {{item.seconds}} + + + + + + + + + + + + @佰创科技 + 我是视频标题 我是视频标题 + + + + + + + 商品名字 + + + ¥29.99 + ¥36.99 + + + + + + + + \ No newline at end of file diff --git a/components/video-swiper/video-swiper.wxss b/components/video-swiper/video-swiper.wxss new file mode 100644 index 0000000..3fd64b0 --- /dev/null +++ b/components/video-swiper/video-swiper.wxss @@ -0,0 +1,67 @@ +/* components/video-swiper/video-swiper.wxss */ + +.container { + height: 100vh; + width: 100vw; +} + +.video-swiper { + height: 100vh; + width: 100vw; + margin-top: -400rpx +} + +.video_item { + height: 100vh; + width: 100vw; +} + +.progress { + position: absolute; + left: 0; + bottom: 30px; + height: 4px; + width: 100vw; +} + + +/* 右侧区域 */ +.tools { + position: absolute; + right: 20rpx; + top: 50%; +} + +/* 头像 */ +.userinfo-avatar { + width: 100rpx; + height: 100rpx; + margin: 20rpx; + border-radius: 50%; +} + +.container-words { + position: absolute; + bottom: 50px; + left: 20rpx; + color: white; +} + +.video-ad{ + height: 128rpx; + background-color: rgba(252, 252, 252, 0.9); + border-radius: 8rpx; +} + +.ad-img{ + width: 128rpx; + height: 128rpx; + +} + +.play-btn { + position: absolute; + top: 50%; + left: 50%; + transform: translate(-50%,-50%); +} \ No newline at end of file diff --git a/custom-tab-bar/index.js b/custom-tab-bar/index.js new file mode 100644 index 0000000..3a901b4 --- /dev/null +++ b/custom-tab-bar/index.js @@ -0,0 +1,50 @@ +Component({ + data: { + selected: 0, + color: "#7A7E83", + selectedColor: "#f43f3b", + list: [ + { + pagePath: "/pages/index/index", + iconPath: "/images/ic_tab_home.png", + selectedIconPath: "/images/ic_tab_home_cur.png", + text: "首页" + }, + { + pagePath: "/pages/sort/sort", + iconPath: "/images/ic_tab_daren.png", + selectedIconPath: "/images/ic_tab_daren_cur.png", + text: "分类" + }, + { + pagePath: "/pages/vip/vip", + iconPath: "/images/ic_tab_vip.png", + selectedIconPath: "/images/ic_tab_vip_cur.png", + text: "会员" + }, + { + pagePath: "/pages/strategy/strategy", + iconPath: "/images/ic_tab_strategy.png", + selectedIconPath: "/images/ic_tab_strategy_cur.png", + text: "攻略" + }, + { + pagePath: "/pages/mine/mine", + iconPath: "/images/ic_tab_mine.png", + selectedIconPath: "/images/ic_tab_mine_cur.png", + text: "我的" + } + ], + + }, + methods: { + switchTab(e) { + const data = e.currentTarget.dataset + const url = data.path + wx.switchTab({url}) + this.setData({ + selected: data.index + }) + } + } +}) \ No newline at end of file diff --git a/custom-tab-bar/index.json b/custom-tab-bar/index.json new file mode 100644 index 0000000..e8cfaaf --- /dev/null +++ b/custom-tab-bar/index.json @@ -0,0 +1,4 @@ +{ + "component": true, + "usingComponents": {} +} \ No newline at end of file diff --git a/custom-tab-bar/index.wxml b/custom-tab-bar/index.wxml new file mode 100644 index 0000000..20d9932 --- /dev/null +++ b/custom-tab-bar/index.wxml @@ -0,0 +1,35 @@ + + + + + + + + 首页 + + + + + + + 分类 + + + + + + 会员 + + + + + + 攻略 + + + + + + 我的 + + \ No newline at end of file diff --git a/custom-tab-bar/index.wxss b/custom-tab-bar/index.wxss new file mode 100644 index 0000000..23a6264 --- /dev/null +++ b/custom-tab-bar/index.wxss @@ -0,0 +1,4 @@ +@import "/utils/styles/main.wxss"; +@import "/utils/styles/icon.wxss"; +@import "/utils/styles/animation.wxss"; +@import "/utils/styles/base.wxss"; \ No newline at end of file diff --git a/images/ic_camera.png b/images/ic_camera.png new file mode 100644 index 0000000000000000000000000000000000000000..421bee6cdce554bdec41a6683794d5eafd41c365 GIT binary patch literal 882 zcmV-&1C9KNP)n>C%M3_J<`k4$xiPD>*AMlrMlp#okM2ry9hU_l8n;2q(V$3K6#fz~E zMX?`J^rrM83k8d=G$>L;g#-mf-&pdU;WW*e+220j$DDz)?uJ=w?e|@4e`~*cA2H2M z(;Pot0#n_=ZU?#@XtM&9Z6VuF0?z{vCSW=ZoRaiUg71Vbl@PG~KCrVSnDf9oNxzni z`;U9u1Z=+z3}u2i3%n@lYG!B>dJ<6INLo>lxCYEBL82A{!;;>z9a1`UQHu3R8nL|@*qstk_|!t6Hzcv`03Re$ z>=y8>q;s}ICOnZ66oVvpjJC>uQPMoyuK?dAf@rvHmGr6YJ;27q*vbivNb0ja2=pg{ zXt;eTX_M`c(!+_dl@s_#Qh%nbzAp=G$J9D9RRr!=B=c4_DCymj;<54$#C)F(JOzZ@ zEo18??MocJjl7i;h{Q`JowB{FIKWa!d=IRWbldh{z}%FeI;K#p`>mwqwjThZBPrG+ z=}+4Oz>buFI?sW~y-m``wjT!$0gtr+b*ZTQ8QTv7f0O_puC;8T28KD3F2^6mhZ$-$ z6zB}#4DcH;AnAJH6WVA&ClLrN?*N}jy3-1n?RCINN#M19#AC7i9M6V8TzEoS-vyQx zm!G%~#HpQYwQiwYP-Wt}1jgfa|;*oihIX?ruURxfi0fVCaSV2Pv{$)h&W z+h`DoA1yk?j!F7qESR=lr#pdJm%vnaq1%CO2imN_wBJJi0-k+bKwu05%>V!Z07*qo IM6N<$g6r&xj{pDw literal 0 HcmV?d00001 diff --git a/images/ic_delivery.png b/images/ic_delivery.png new file mode 100644 index 0000000000000000000000000000000000000000..bb1a3839fecc9e68fcd827b0d0ef0cd6f5f38a68 GIT binary patch literal 815 zcmV+~1JL}5P)+V@hB}x zx!yQRfUFTKBj9RS_+6ps!3rveJHnJX? znnE!E-N5OXobQy>AHG&N0B4+;T>&;kKs*PQNcvW}R#bomz#X71DU}Kd5JX`sa3KQV zrld86jzGmYGusCo^dZ8v)6@t6*MYC0-;b!2DKbD(s}p&>ND(Ljnq32B1pd1SxZB(t z;7iaoPN^#gsuw*CUNha1-m4C#~96>Q|95FVc-O)|4x!0`+K?UEkHbe)y`&H>vZGzTQDi0g%x1LwWBBIos& zfb-he2*G|yoo41*-0>+OT;%4N*)d>u%>3=ap3b5EsCu!9`a7<(iQrq#>@5I~FpW=L{(rd)=Zxu@`N tNguKbW(LT*L8IrF0FCx=l77oa;13HAMnJi(Lb3n=002ovPDHLkV1fw4eo6oU literal 0 HcmV?d00001 diff --git a/images/ic_diamond.png b/images/ic_diamond.png new file mode 100644 index 0000000000000000000000000000000000000000..1eba0557b7caf4f3c7bc919412cda24d258104f3 GIT binary patch literal 1691 zcmV;M24wk(P)Lo`8>P5^KL zfODIeUT@0%0H%}ttlq%vcNU!>=>Pzi0T={e%cAqzFz!_V50HGSD37{eByAQT48(vs zn!X1x%MZy_wS?CNlT4P>EkIoZVCxP*^fiD71H?~75yV#smOo#Jf2phvdoI2#h3y$XoSC08Gt-Dgi_;3rXI}R|Jskm=^#HA^Ai4 zLkpPLR<8l@_NqmRGq$o+nV=+H0^m9T``6(69)PPzzLSipfXQsDqI#7MN>bNwdizHa zS_$9=l23RrYiz4}%svl?Tr25W04D?ZyV-~2F|n{?0o+Y%n_kI0e9| z0FG~f$;2eGNKymystp}La%ot{TWFU8JZ+iVNIHb0RRECW2$cZyxl)UII~Yhh8o=uX z1lJp~l;nVd*7*j&6p}Mq1prB%NdA+4DQR~Ar-ikS%+X>INn6tXb|--A>uFl>dk>PI z*09bO0A`S!n$dR;03*E3t^%-MApI&URFW-~0838(fl1CJ$#eEBsBFDqPFaTKSmzS} zK40$5fY=7WEdY9w?3YBdyCM|69H3sw0p&1hP=5N@nv%RNJf}?RLUK)5#|QRYlGAha z83$k_00#hDbY=RSSs2^O^F9o7&dy=dndBd_ddC9j6wjuq|H-?&-%aX_+k~VQ%_T|K z0=N;tjxpd=l8gL54Q4L@&tx)VJK8(|(@3r@bNL(PCF#Nl+4hfw9LXHYE0m39-ZoF? z)GKQO)I2+Aql&a;yrdHW+z#NN44=g$PfEYb%gyY7Gpi`zLvbicTg#Em=}+0TfMi9! zqz9tx$jbQ6JBVbf(x6(_JQ={KDq5}}S;^ld*#Yk;5zTr4T}iH&)F-m&Jof!bZWN?y z)iVnK46LH4GuAnhwg6yXvh$ZgGf57Qh4QI>X%5p-By$(A7MPs@Jm)Z+!|+>@yN1yF z09;uHlF0RzOF9%lOE#S1?JamtHCZ*wW=Ti5SOU-`hruwCvn2VzEh8u_C)qa^$d%^c zjLa_q97yudroaT_iz1R`d8{H?Nd_g^f~_J;6P6lo$Cq>%faN*!4=4F{Exv^s8j^g7 zjmcp&!pWW_XWL7f0FX?v-*peie>mD%X?9nVbU&>o6#^5h@3PqkSDIFnbO~YWIBUqB z1@+`7-z$z^#VSr`@&ds|yc+@I#-CT;ev~GcuG1u4?i8q~_L*_+y4dmON2fIT`~k^> zi}EZCCRX1ozt}CPlz=rPD*-~1GllJn3XgH~Ne;@fip!E-B;9%{L=Axnh0g?#ZJAz2 z@*YVOBMB@dJO(9>{}_PtQWFO!nMP4&4TA|l&JLUUswMbe`H&M&A%113ZP#| z{WW^fKKR}&sENnA8IoA#X8;G2bf39lY8p&fXYZ&q-7_%VL~@d(Hvk+}N1F*GZ+UcuB5O6N}~P=X1+Bn60veq>HdNQ7K?z%iRsY^|=#4pEbVrm{di((*d~YZC`Pr zPHz(4b&Z#%}FL_%YPG00P+FEcAFpxR;{V>Fm}~ zw((sSqV@)}Rb1lsj_~X2y>_E^1ryfk1t7Uy_$_;VQYNx?2NQtYK;J;Jj2pJ9_&Wql lnX6xm*Z*KTYNZ>M^DnOCOW4QZG`s)+002ovPDHLkV1g2}4_yEN literal 0 HcmV?d00001 diff --git a/images/ic_fresh.png b/images/ic_fresh.png new file mode 100644 index 0000000000000000000000000000000000000000..6ce2d1e16ce84ba8ddb9b4575996c5a42b514e8f GIT binary patch literal 1132 zcmV-y1e5!TP)!fish%X-Uh$?rKEMmJ=;^jL%?O}w~fGUlD_E*k_&Jh@YF!( z|AVl7Bk*{QfX^hIRsz@rEFNgPR??m00=NlytfKS(AZ*9|Xjf&sB^?wuY~K&u)znuP zh};M)0yfule37J0w%-IUY;b-eumE_Ysh=+5qfHh-dUMNxXDb|Rl(fY5t3a$kb#?}D zZMp{AtdO+6tN5V+62u+AD&UBcvz?NrY(ELy&>-SqUa;`BaklRPR@VqA+I$Bb3xx3LScxQkn=5{g019We4+kyBx}nq9GW-pM$U%$Ya(TnEp93$(CFzGQL#h)%8rN;YyZGzcW>*4PB`G3Q zYpnpbBlCv%J}jcST+;V-&Km)G7GG%oL{j9AN~;C1eLC=IAFsW_=VD2b;b&PBK%YZr zQ0RI|k#Dj9ieytf6ytGb{qDhL5@2Tl+s6RqWo)&iHMSoHZs`FaTuw>aIq17`2-!Xh z_^{Nt0C*I*xhH^ylD2dOh%Ikq$HEGLmw+pJ0$3pF>#hKY0l!xO#Bs8(c`#4XADsZA zk?r5oekcBYN7AB}o#r?L^QWXkI#1#R@Ji{h9qByw{*h233X`@ik{0Fy431LW#*c3A%i|_t_SXplT(YDsE6JssqQ04 z7R<;1()n*ZGV24+SDA4Exk z4T3-_NFsE@40t3b_B=`d^%lVPGT@1!@D+KX zk~*KT&K%ml0(c47P&UK81+aZH@G@}ixb4wP0NY!DSAp}Z_IB?8Z0`e}sS=*`_X@!F zM&SLr;$vLj06qZLHvs^aOFGxY#`cAh{wzHhnmEhG+TH^^*TVKvNk7%Kvwc5sr=-oD z0ocA8_!zjju8?Hh^>tE-n04R?@W9Zv^a5;r57<5oJlaBhn5>ud(KuV%G22fAS0>{& zOFB_x*9PD#U`TX5uXjeK+@j} z(vv1)Y6PircT&<_`9U@PZjtonSOD8AB>gpJi9ZBxtx{RhzfRKU$%$6BZSrmkx6#NJ zvb{~xYZC@ICTT~+upN^TlTx>>l=OQ#I1gZ8WQNkgw!2t?aJf~|Tnm3O!LJtr3|~Ud z0y`ufD|yhm0tol93Xy&{X$!W|{0i9K2|OS9jilR30Nw)bZ4z+;V@GcD6d)D%prlt? zo)#0(JmPX>hok_10C9z9ZNcqlJ7zyXr`bl1;sJo|8-Y&>RE^NuUJZOVP4&art0nyq z|1*GbXYpZ4yED~#*O(=(q-uiya#Mrtk)&BUnA*EwgR&VFgWVlY@sEd=+bZpCGE=qsvhFL zh)#73lEOO2XdlIgrol;+0o(zc?5oleU8f{%$N;VZzMV0E~+;0=M@FqPnnE01>5+qdkC_ zleD!+M`dx>cGNQCmGg!vf$W!bpe%MJKo~~NbO`ZKd?s2Vkne##l42{DwpswmF}n(g z4-ofFa79i5Z^uv4Z&j1k2q1N4`lkqtN;K207*qoM6N<$f(<9&LI3~& literal 0 HcmV?d00001 diff --git a/images/ic_like.png b/images/ic_like.png new file mode 100644 index 0000000000000000000000000000000000000000..4e6509680a58fa08e4cadf119aeeb7b33fd5c8c4 GIT binary patch literal 783 zcmV+q1MvKbP)(jo|p7CjB5tK z9^i6{s6I)dSqo-+da(jsz~YjaLEu!VfTUlgxtalR5IC0t@LJN+N}ugT!0jSL5WjVJ z#w*7*1KuUFDFDlWm%tK9Z(0Iidk1hM zqbWa1nw#dg-7jfvMtozN*!DwUeTIM+l9p!xtdTU(5`Zzxe$aJS(&j9I)qD+WV%yJv z6;%XuN(%dbZYu+@JsH@WBim0&VYexm?XU%g+h;XPTi>C9OKm{XtE6O=0DVB-lAe`x zs0Q)X;41xJf#Z_O4#i4<_r*JVt;xgqe&7eNDNk?>F=flHo&avf)dVOzJL(Bg!z7Mt zs3lDr&M*NmuDQ$?9Q_j7CFxqMOX#1Za8`|2j6G2HeH_)R;6JXeAV5Cge@OrU N002ovPDHLkV1jb2WitQ( literal 0 HcmV?d00001 diff --git a/images/ic_link.png b/images/ic_link.png new file mode 100644 index 0000000000000000000000000000000000000000..130f3b99ef4cd5283ba6f763c2f7df79de6b27dd GIT binary patch literal 885 zcmV-*1B(2KP)G>$J&BlrM=K?g;_2lzxyCK(-2 z2XzK?Aqt8v)I|`4fk@)Yjo>12p^{agqz-+?zJ1S`bMM@1!`*aM*Z=pas=w=s&#=tw z05Bu`CIK&iKY{y_uEdaPC%&1@0uBKShKbuH$q8nwZ3N708PE-kYvfXrGVHbx2;kQf z;6dOI;2&Tzup+VFmb9p40wv%Bz;;Qmb5Jvz2RuwjtZ#`x3HVh>tBcZLW>bK_B3t)} z36y|elC*BP8Zfh)z>?tebVLM7z<-gnsj2|Y>?p81_~Gw6GZh*CH`_4$PJGU$~iryAb^kd?V@Kn1Pv{1b&S6-UYvB z%@Ft-_%a0PmDG`dPY<>WlD0$wbP(8=e3IpoZe(AqEPr0@xl;go4~z-^$0Y3u`{RKN zfWHO#>X6hM?B{{ak!=XPlt9#Kvn4$Xft~r-`SKiY zmh?6N)he7cHX>J(&M3yG8Yoe?Ly~@u0>%0C3CC}hwOyUUNuHL_v`+!&BfteGHQMp^o;Mo_5ZfRAOAMD<0o$*uM;JHG#nt7l= zl+r`@e7MM;=vIL9vvmWBnfbq(ZvmfheAIdaxIhiY|7zO-?lC?B+4ySEb^YUL00000 LNkvXXu0mjfQb3t4 literal 0 HcmV?d00001 diff --git a/images/ic_makeups.png b/images/ic_makeups.png new file mode 100644 index 0000000000000000000000000000000000000000..59e6fcbb5344de628839890f3f9c063e55b76fb9 GIT binary patch literal 1028 zcmV+f1pE7mP)I6 z0~Y4m9+k9cYyjJr1CIfZ0E=tH{R?~o9F+8K6A;_WfX_J!csEhrqa$A7=fUoMj zGG_S!NozU*2w}Fj1J8^pa#-`VlJ<25kRUz+9_#>Ov!rcljM$zlx6hG6C~MTwTG%aV zeQu2I0FsC9inIW@v@jFlwa8E6p>X5SiIIuTY zH#{DmA4nx;4WMFCXM$s)KPzc*O89e2vQtcIGWi`KDE9tL%oz?&& z3_8%H;Dk0^E|qj>YyjKg?J~Op_y_n?QiNNnl>qz<+}wa<#sDIIW3R8W?UG`PZ33_^ zT}8i}O@LQp=NU5Kv=g^v5$D&@lvf*u)r`$RWUEzS6na0FRGCK=#P$LZIm}QiyFO+O zdIzWzUsv8MfbGkGPwPYiFH8EetX|&$HvzHj)!D<6-k(H(`++a&)B_tOMQSl%ea}Gb z+j|-Sl)eK+yS@Ql0$ykUuv5~;Nt}Ure2w?fI{Q#k@m4m~rtcZ}CcRA80emg#-btK+ z6Acru6OtB8BEU%?{)DKrQ<6&S^%g?5F9FWiDbJP9m2{?9zW@+_ikylEfd>7Km(1C| z3i!LhKv|VVl8)8@wCIkp0pboDuMkabous!X383x6?TSOXJk?3dT*cm|EpXuv2o&G z6H^A``yCm^1>%B&zpvHYIS@5_<*Q1D0s+D6Tq`D>sZm-K%l<@9>2}rI*WBlJMtW(6 zUv*^;Vu+}GFTb~8RYp%F(}~wkp=X^qraw!WYnSlMR#0{|8^gis^SRkyrA|r|vl{51 mE|N{I`N#X?=riFBpSb)!r+UYO&kN`|AlxB`2W9=_t3Eh ztOkGtKigSPVPs^;#%2g31H)$SgGc?4tIxBq{R{%81ahGxhI)_+Xa?1v9u z!)pLY@|&Hd)jvk2qo@Wj#_=3HvKZZEIMcxw2kQcc{|x;g4gVP!XY(FBl7_=uxP$Do wz11?N|BOmpOso!!2M+uo*#Kga`7lVz0MUju5jR*3%K!iX07*qoM6N<$f*BNRqyPW_ literal 0 HcmV?d00001 diff --git a/images/ic_search_right.png b/images/ic_search_right.png new file mode 100644 index 0000000000000000000000000000000000000000..84761f091fd7b02b13c0b1832e9b596c1377a58a GIT binary patch literal 331 zcmV-R0kr;!P)`MM!&+F)Y(i$r*W8=)?z=-M`BBOGum&svOJM&ABvQ-(Tmk&RmCsB6sJBtOM>~N; z3RVQ?&Vh4r*g9S1GwlY_g}7!$oC`AZ8{=!(IPS`9rrkg$QZxZz&ESC_oXzR|Rh+vn zPE7m>yCm>IbgDwIE%<6r<22q{=~@5{dN=#a;ja67Vn)A*=SV00000NkvXXu0mjfEN*Qx literal 0 HcmV?d00001 diff --git a/images/ic_share_btn.jpg b/images/ic_share_btn.jpg new file mode 100644 index 0000000000000000000000000000000000000000..984a37c98b19e385fd1a6cae49215d54ab7d8c49 GIT binary patch literal 44073 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%0D~#$LD`L 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 Z;1?U;LNNVj*Zcqg002ovPDHLkV1n9ueHH)! literal 0 HcmV?d00001 diff --git a/images/ic_tab_daren_cur.png b/images/ic_tab_daren_cur.png new file mode 100644 index 0000000000000000000000000000000000000000..0120e988d655a4a71314f23458e00f4758030b28 GIT binary patch literal 899 zcmV-}1AP36P)6#u+g`=L849a2y)L3g1xP-L*nixm^&|KbC%t8c4mJBQs3Kr-+Q0;dB48%2%CIpll|l0 zC6JWm22^olI)iI8=Z!?>%gJU*8AybJr-}G514rzf5%7wcUW=2_r^S*fia=5c_As~y zfWJuK83K)ZwdkmuzAJ%*8n_LnOKw1Ra%R5ao1D7tWa~&Ep-5bg<2;*pqNeXJgj0|} zLXqAAIPez;m=J@arVkY8n~m4&HGfd1^Dr|;e3Sai>`IxpDNGQ^m5*p6J zoF&4DH>^K0FOsTso*DPE98QRue$bUbLJ6J(_*n_j#{eGouJQ;?Pp?>Z2}N22urn8j zPKjFddG_6g3?vlkF@Q5g5Lf|dMDV1BYu-=Cvh|apz%?ea>;5OArk`~q;M(~F9%sXI zQ;bAr^NB8~s#tCOiV>mKE(lT6bArzKFrQZzj5(L+S6~ROrt=?a>#l9szE%?sf6q$& zEdZAbj-4SiWO_zrO)7dK5Z(eL>n>? z4@q4_7|SCN7B#&+1Ju@5o!m;j0QCWAa)~-4X2uEMr2fJ&1MA(L^At1VnEAGwvZN|? zGsBFyxmd^Rdc{4(X(xXckj&4>9J6>xI!cswtd{6FtzOd4D4m6nGzLOfInHcs21HFC zw8L^-NaBk0hJZtrkZ{|ITvxJXRq7TP56dCJpyNI*I__laO29N;RwP*fu9UDLO&GwS z-2$>P)_f=qxQ2o_AvQ-6h$+Ri~$zC8bn4#-EUx09xw>BI?xvh~s#{^SsBEDxkIYh^Su& z001*{PzhkP3*G_Po(NE82tP6NmaJu#`$ZIn;n6sbk0&64(Jff9rlTm@pS%S`^uq21 t*L9!N0>~0i<1DuV(@3&bfq%LJzX6r>0x%|!{`UX?002ovPDHLkV1mlNC29Zw literal 0 HcmV?d00001 diff --git a/images/ic_tab_home_cur.png b/images/ic_tab_home_cur.png new file mode 100644 index 0000000000000000000000000000000000000000..0be6f5e29ccf15ee8fa33e0c4acce49fabdddf53 GIT binary patch literal 709 zcmV;$0y_PPP)3Ukh0EXsW zv^y;U0LB%|&L;v`&S@7V<6bKO7<@^!oVr?p4wUuw z6D1xeE``uLXJ+k0uV7x+yVEJ2i_;(~XQfJewib);69IVZR{5#AQQ~pp-zu_wSE=+p z5rCKM8rl~CUG)kXm?PlBYHSC9g8_N-s%39Wya)aO=&u1jR9no9MPhko{ai2RGA9I! zNdUY3&G?OCIR_d9(7fd_=qqNLRtm+Ta<=!XAar{%$@r)ioNKP3-3M@CU9;zkWe+q4 zkkcN3alW>gn6I}NoLftVR;_(rt;jC1CDlXBGk#!9DFypnV*rMJ8{qLK0Vb4!?QPY% zC-iH$Y-pDyaJMM{@D;^!d>THzurYG8`Ur@pngfs{idA~lkOOXCW&lDwYX*Rc`c<=N zHU!`ml@0A30eja35?;d3ie>K%b2;*lXep~5mxPmR5X5Y*PJwStS1a;J?GzADlAuY| rDn4!sAgs6*u}BA6(PYzsf7*dxC)FD;y3JJO00000NkvXXu0mjfO@cSk literal 0 HcmV?d00001 diff --git a/images/ic_tab_mine.png b/images/ic_tab_mine.png new file mode 100644 index 0000000000000000000000000000000000000000..5ea117feb200e04d240af6ed483dfc07f5b44d09 GIT binary patch literal 570 zcmV-A0>%A_P)x^hPi7_|^gO6%e;fiFD1pgjat45# z3rCu!AL{Cj0mkF;=_E;>F!NOa$Lqw4qPX5EfVK8EGrtJkxSax6Ygd^0b*Q=P>lDBk zvkBm0F961vD*!$=G4C`1t@S-3TJH_OTKk@vuk{AdGJzjb%A-E$pnIU@9qV)`{q@5aOAyKPUkwqP0$m=%r84)rsh>5aLEqZ%9+wW37G8%y;V6F!ML1 z)TvP2-~>uRW6Uam#{kamH(};=rPTdU^FL`dX)b$5qtTHhNzO-6bOFGzD2l%1dHyv` z)19VztpKttTb|8k%S7bn5`gVI&$kDI!IqTrR}+XJfGo>S%;)o4%)A1?&ARcKncumM zD5ZSkgYg1rt=HU<0&vnNR#D#|qNhTLSBuux0vKZq0MWwupCv>jg%Gw%XCc7elRrGD z`QG~7IF2t3hr{pt^(q0}J1>gDegE6UUdhbNkCaktK>!^;ed)Oi;GC55=id;O3AFwE z`d(MnFIpwQbUM8m$MFN7V8i;R5aPdE(t8XWnlx@d1n511-%x_bA^D+t-T(jq07*qo IM6N<$f}KPV8vp5Lp7=_OXqnl)kE>v`(bvA;68wE83J3FJ$$;_nhaRdvg<_~lwZd?J7Y;8dEpkT(kj2tDT>h$Y>FTPQ%sccukc)isa% z3Izy#rw!mrDFEMn`-TCwvX~c|K$P1NVzfQifg2tpyuQtG62P)Qu&;A&Qf>47&A{qGkpT? z1GvM?i+;^oy9dAp0OwX~MdXpzdU6oNKmcRR7b4n~Lcc5`lSz{NiR0J-*qWmK$;?~& zt@j0R&b<+l!#S?#cK`{1?O9q8scEe%t93m9#+X?mx|$UjvMwUmwAQmLy*&WdS_?ph z6y)$cXXcYx080RN<_HUsd}HPvSpZ-2{H7u80Dds@wk&{W08RuJq}qt+g;MHRDu8ot zPDHBz2;jC->SERo_@VMD<6ejGEdv@!XTp3$3;OzCIlhz$s?-hr8!X{WEgT-4&6kwLlQjf>LUFP(~_1ywUr&-`x?CiG0dydW{y7F< zY-NdvEJaZ?rIdP{w>$`-1F=^`{Cn|ur|f0B-JY44nD{VEc`$%CHX4mh&1Ul^fEYlP tnST#kz9xW>vVNYS&%mgPyEz*Ge*s=*#UXjj-=6>g002ovPDHLkV1nf5Dy#qi literal 0 HcmV?d00001 diff --git a/images/ic_tab_strategy_cur.png b/images/ic_tab_strategy_cur.png new file mode 100644 index 0000000000000000000000000000000000000000..e82f3942f7534d6c591e7db4da520e239a0c39f8 GIT binary patch literal 705 zcmV;y0zUnTP)q>AYV$ec-K)^x}e1L^Gv)P@s5d@7DBAVpeO_l?yj1wdyh$s8n8c<)+_w-80V) z6qCj%2t&07489RpXsjbEX578+X=7_y@+ktHs0(A<)@;$=45BGOF=f03u-Sut4pR1W zEVe+*_W-PGs%3oAY_Yb{enWs#(wJt#o&Znu0|AnO4gOlXqgl?;T3sDLA*l}&(RqKv z@Cs(W&}mN%|5;fFP)g}{8FVDPy?+G(k5xel1a1InxdIq48XgSTQ_>5*vUGbd*RY56fI7~3w0YMC*+9DBn61u`t(&%Nv zqc#B?Qf)C23cwW?lg2d=23mq(jBB8@OEJ`#Xi z^u^qJSYhQs6aY!GZ*?yJ(5p7kA5p9}e;H-m)#Vhy>zrV@P;JO-eoIHa{;S4!~v1{BA+tAh%KhOifK4Gdeo@ z8-Qbj)T}ZRk)zAY%j?F+$B!2A5Ao>;AW4!vBCEwhl2*PP=&>r+{=D! zFA87>5j|7B#_}={(WKUTZy^BAxeEatC{JGbksFQ1<|vB%J4@=wS_Ay6*sm`(BqCyKkF$H>jGx}v?lLS3#}`pBK%XPbygn;` z<{Hof@D_kAS;6XborvDoT3?!_DF{H4B#(&5uB>2ny59Ok_q#$}M-TvOEfbN=3Rb7< zM0AtZ`lT#QK>*@7K1(TeC@Waau5V!G#Vk!h09xxn*DbQFL=|8EiJ4Cc$r%hFNs@UH zN!?ZoNmQ}T>&$$0NX}pY&bbEw><$S!Xd4lE*cfwvh>kn}wgOlP2|8#SB8s%u{vcPX z9%N?Uow-Kt4rq_w`VZi8B04=+);<|Go6SX~l>hGcC)tHYPXG#KteMjgK+SGQ<#L7{ tP&x9NB^-7@&2C8La)upHIr5q%{0pK-dr&p`jcfn_002ovPDHLkV1h48PsjiO literal 0 HcmV?d00001 diff --git a/images/ic_tab_vip_cur.png b/images/ic_tab_vip_cur.png new file mode 100644 index 0000000000000000000000000000000000000000..ae4e83e46400c13d4e63e7f28ccc6fefcc8f084b GIT binary patch literal 1370 zcmV-g1*Q6lP)X~otOlwfvtcSfZKd|BF93dzpe)+BpmCBYbXckayY%q(W-W9~Ws z^FO~ib9d)%2uu8;CEh<;09q5U#0j(>fh9fwtxd4?2(%u72njgp#PeYKRWq%9QQ3&> z5pay;3jp6!Zk)g`siwU<3J8$^D5S()M0jOU!}n>XH54|4&;guDi{vaLSE*3~^{Zz7 zSeOt(1u)suvnJlAe9pkdRhm3aC1su!vHhB9-6|PdS6C<$;21qS0Of!er_8)p&)ScB$?+2#H~^=&cO#V27k)HH^u1XaG ziiXHBko1!~pTpp9bkpwiqftmDcPqqOnRr6W*bi0y=&kVAvwdRyObOpESo%{T8YcVmzde*@qX#O!bNN%D<;awnz84l5(Y%%YC^pu+W#-j#(Ncf~Y1y zz)z}aRqUlIfTEE+#NZp`N2#!dQXAHlo2 zY26^b2b2RHL);JGxq8etQSKhiw4U(506M)~kyH_o5k57hXGQdLW zvK1XPI$E)pnqPz*Lwp6`iU7R@F3rG6-Lx*Ru|Zb%;24S50lFh_m%$b|pqbWAUjT|} zv5Ofm2kS3jb;6*Qv4(vCnC$J@6jPK>1GX5byrL+{m18-}7Xa?;Y%89(`VRoHKwSnW zK6`5ADs|n+$T?pC%1H%7*aU=jLeoeV1bn8NR#z=e*Vkbuofrnwy^S;$mKFoA>85pO zeE?F)+d%wASf(3UhX}jWjP+`L0O~l=X=F2gv}R`M>W+MVyezvS9xw;s0{~mx#F}h9qnTEpnNdcHjCNEQBe9}#r800~L>zWD12F!|!XReZ5RgX#fR7JVwA?8PTX?nE5F^Yd72@gWW1j1X&Q<0$U~O@GBWcIk?2_Inwl(g5Z*!mk1N`k6|` zOe134j=&bz@Cx890Jk*4XmA?zj%Ma7|2kBms3!nZM&bbl^lWhE8==e(YNjpydxj?f zPAahlMCJE_=DnD=YFYb3S%aPcltqh%ILd(3XRNG=M#T|uOf{{3FM6H<{C!YL$_NN+ zyc7x{_B1JUojO+g{lBhFa6Wm;NN!WW4+FR=gvMk_j1%JtHESJ}30@fEc>)$D&;1|3 zH2^O0TDTGM44wd#jBe%+`PHinfZw9cl-B~#Om`y+FRclPf_gL6Y)wEj-Hj-`v?d@5 c>djR1FMfu6P){(>ApigX07*qoM6N<$f_}?$0{{R3 literal 0 HcmV?d00001 diff --git a/images/ic_toothpaste.png b/images/ic_toothpaste.png new file mode 100644 index 0000000000000000000000000000000000000000..08f9a24e5ee8a829ae64f0b5eb1d4234ea4fdedc GIT binary patch literal 1178 zcmV;L1ZDe)P)}6crZ`_k)5OJSarm zP>2hPQ50M*aX)Ah0~!^hMq|uUQqnKXn{Q^iYrgm5*OzzbnyUJ}>aMP?7XQ;Qvp<17 zfg>dS(AN$1{V@8SnH>tu0?q>V0SpH%Z!O zssj859FTF&B<(U)0lox|FL3S@Ngox+O%NID9x$^zftw2)yI;}`1#&wb;7s7H0>?g( zG_yc%=K{F3!i~IMlBe15nA8$7v&(^llht2=)hVldIPk>GwgWjkTP5ut_P#)It4=e! z1-PR@U=1)^(&s4xYyGs%IVULx*{Gt|M+Hm6BQQ_W7iRVXa6t~hWhA{+AU7n^3&70o z0Ty-``vjOHX`PuZ03IoDY?-7h3*<%ua4qmqhp{D+mZnG@0{mFu*k_Vv6v*`lFtcNU z$AJTZlUj^z1=ay8fi1vOz}3LTY0vpa_Xs@?tN_+0J-92CSR5`XQ~1GEotvArz+*fYDq_r6QIu?=mbc2M%sRXxYY9!^QtWN!OM9Q4xSMfY(y#TcUf1Om0b-*~VIAS4ldd#7G3- zJm5v3wX$q6=&5(Qq|F_f=v$y#18tO4lq@0u7Xr@$(e{Vm&Sps3&;jrUaCT)ryX*$C z5r9j9r-9bXNsEL2cyV&qBZisX3*6Wz6GZ^#rTcL7KJW|RS;d!0+hOJx8o$_7M^T$4 z0&orRaLLB1$#{!>ruT?C0Hy<9*XEZ?nwzs10k{dcJEyQ={x9G(NuPFo+i+c7Bk8D| zy$FE!c^2msHq3jQWtOD(GXV8e+F3*O*~AkzS^(x8NuFt1hnac5Xy~mhcYe6CNCX}Q z<_Daviq4g^JOkhn8hRrbHGp^6!oADnv^RR6%mDcO;OTWBx=_-6UEf6_@EmYa&j?&E z>46MDQa|TW&^K|z+&&0$S&Le0)f({K)9O;ApigX07*qoM6N<$f*VE_@c;k- literal 0 HcmV?d00001 diff --git a/page_package/about/about.js b/page_package/about/about.js new file mode 100644 index 0000000..cb54569 --- /dev/null +++ b/page_package/about/about.js @@ -0,0 +1,21 @@ +// page_package/about/about.js +const app = getApp() + +Page({ + + /** + * 页面的初始数据 + */ + data: { + StatusBar: app.globalData.StatusBar, + CustomBar: app.globalData.CustomBar, + Custom: app.globalData.Custom, + windowWidth: app.globalData.windowWidth, + windowHeight: app.globalData.windowHeight, + + }, + onLoad: function() { + + } + +}) \ No newline at end of file diff --git a/page_package/about/about.json b/page_package/about/about.json new file mode 100644 index 0000000..14b0c5b --- /dev/null +++ b/page_package/about/about.json @@ -0,0 +1,8 @@ +{ + "navigationBarBackgroundColor": "#ffffff", + "navigationBarTextStyle": "black", + "navigationBarTitleText": "关于我们", + "usingComponents": { + "video-swiper":"/components/video-swiper/video-swiper" + } +} \ No newline at end of file diff --git a/page_package/about/about.wxml b/page_package/about/about.wxml new file mode 100644 index 0000000..496b3aa --- /dev/null +++ b/page_package/about/about.wxml @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/page_package/about/about.wxss b/page_package/about/about.wxss new file mode 100644 index 0000000..e69de29 diff --git a/page_package/activity/activity.js b/page_package/activity/activity.js new file mode 100644 index 0000000..6a90c08 --- /dev/null +++ b/page_package/activity/activity.js @@ -0,0 +1,211 @@ +// page_package/activity/activity.js +const app = getApp() +const {activityByID, goodsConvert} = require('../../utils/network/services/service.js') +const {productsCode} = require('../../utils/network/services/productImpl.js') +const constants = require('../../utils/constants') +const util = require('../../utils/util') +const {onLogin} = require("../../utils/network/services/user.js") +let that = null +Page({ + + /** + * 页面的初始数据 + */ + data: { + windowWidth: app.globalData.windowWidth, + activityContent: null, + copyContent: '', + copywriting: "1.复制以下文案并微信发送给自己\n2.通过微信访问活动地址购买", + imgWidth: 0, + imgHeight: 0, + userInfo:null, + ctx:null + }, + + /** + * 生命周期函数--监听页面加载 + */ + onLoad: function (options) { + wx.setNavigationBarTitle({title: options.title}) + that = this + let width = this.data.windowWidth - 30 + this.setData({imgWidth: width, imgHeight: width + 128}) + + if (!app.globalData.loginStatus) { + wx.showLoading({title: '加载中...'}) + // 登录 + wx.login({ + success: res => { + onLogin(res.code) + .then(res => { + app.globalData.userInfo = res.data.data + app.globalData.loginStatus = true + util.setStorage(constants.AUTH_INFO, res.data.data) + that.setData({userInfo: res.data.data}) + wx.showLoading({title: '加载中...'}) + that.getActivity(options) + }).catch((err) => { + if (err.data.code = 'USER_NOT_REGISTERED' && app.globalData.loginMode == 'true') { + that.data.requesting = false + that.setData({token: err.data.data.token}) + wx.navigateTo({url: '/pages/login/login?token=' + err.data.data.token}) + } + }) + } + }) + } else + that.getActivity(options) + + }, + + /** + * 生命周期函数--监听页面初次渲染完成 + */ + onReady: function () { + + }, + + /** + * 生命周期函数--监听页面显示 + */ + onShow: function () { + + }, + + /** + * 生命周期函数--监听页面隐藏 + */ + onHide: function () { + + }, + + /** + * 生命周期函数--监听页面卸载 + */ + onUnload: function () { + + }, + + /** + * 页面相关事件处理函数--监听用户下拉动作 + */ + onPullDownRefresh: function () { + + }, + + /** + * 页面上拉触底事件的处理函数 + */ + onReachBottom: function () { + + }, + + /** + * 用户点击右上角分享 + */ + onShareAppMessage: function () { + + }, + onCopy() { + if (this.data.copyContent) + this.shareContent(this.data.copyContent) + else + goodsConvert(this.data.activityContent.content) + .then(res => { + this.setData({copyContent: res.data.data.content}) + this.shareContent(this.data.copyContent) + }).catch(err => { + wx.showToast({title: "获取推广链接失败", icon: "none"}) + }) + }, + shareContent(content) { + wx.setClipboardData({ + data: content, + success: function (res) { + wx.getClipboardData({ + success: function (res) { + wx.showToast({ + title: '复制成功' + }) + } + }) + } + }) + }, + goToIcon() { + wx.previewImage({ + urls: [this.data.activityContent.shareImage], + }) + }, + getActivity(options){ + activityByID(options.id) + .then(res => { + this.setData({ + activityContent: res.data.data + }) + // this.imgLoad() + }).catch(err => { + // wx.hideLoading() + wx.showToast({ + title: "活动加载失败", + icon: "none", + duration: 3000 + }) + }) + }, + imgLoad(){ + wx.showLoading({title: '加载中...'}) + Promise.all([ + new Promise((resolve, reject) => { + wx.getImageInfo({ + src: that.data.userInfo.avatarUrl, + success(res) { + resolve(res) + }, + fail(err) { + reject(err) + } + }) + }), + new Promise((resolve, reject) => { + wx.getImageInfo({ + src: that.data.activityContent.shareImage, + success(res) { + resolve(res) + }, + fail(err) { + reject(err) + } + }) + }), + // productsCode(data) + // .then(res => { + // let filePath = `${wx.env.USER_DATA_PATH}/${that.data.productDetails.skuId}${that.data.productDetails.inOrderCount30Days}`; + // wx.getFileSystemManager().writeFile({ + // filePath: filePath, + // data: wx.base64ToArrayBuffer(res.data.data.content), + // encoding: 'binary', + // success: () => { + // resolve(filePath); + // }, + // fail: err => { + // reject(err); + // }, + // }); + // }).catch((err) => { + // reject(err); + // }) + ]).then(res => { + const ctx = wx.createCanvasContext('myCanvas', that); + ctx.fillStyle = "#FFFFFF"; + ctx.fillRect(0, 0, that.data.imgWidth, that.data.imgHeight); + that.setData({ctx: ctx}) + }).catch(err => { + wx.showToast({ + title: "分享图加载失败", + icon: "none", + duration: 3000 + }) + }) + } +}) \ No newline at end of file diff --git a/page_package/activity/activity.json b/page_package/activity/activity.json new file mode 100644 index 0000000..c8d38bf --- /dev/null +++ b/page_package/activity/activity.json @@ -0,0 +1,6 @@ +{ + "navigationBarTitleText": "活动详情", + "navigationBarTextStyle": "black", + "navigationBarBackgroundColor": "#eeeeee", + "usingComponents": {} +} \ No newline at end of file diff --git a/page_package/activity/activity.wxml b/page_package/activity/activity.wxml new file mode 100644 index 0000000..f2f8144 --- /dev/null +++ b/page_package/activity/activity.wxml @@ -0,0 +1,28 @@ + + + + + 如何参与活动? + {{copywriting}} + + + 活动文案 + {{activityContent.content}} + + + + + + + + + + + + 复制文字 + 分享图片 + + + diff --git a/page_package/activity/activity.wxss b/page_package/activity/activity.wxss new file mode 100644 index 0000000..5713c04 --- /dev/null +++ b/page_package/activity/activity.wxss @@ -0,0 +1,11 @@ +/* page_package/activity/activity.wxss */ +page{ + background-color: #eeeeee; +} + +.bottom-bar{ + position: fixed; + bottom: 0px; + display: flex; + width: 100%; +} \ No newline at end of file diff --git a/page_package/apply-vip/apply-vip.js b/page_package/apply-vip/apply-vip.js new file mode 100644 index 0000000..8ff1fe0 --- /dev/null +++ b/page_package/apply-vip/apply-vip.js @@ -0,0 +1,210 @@ +// page_package/apply-vip/apply-vip.js +const app = getApp() +const {superMembers, superMembersUp} = require('../../utils/network/services/user.js') +const {uploadFile} = require('../../utils/network/services/service.js') +const constants = require('../../utils/constants') +const util = require('../../utils/util') + +Page({ + + /** + * 页面的初始数据 + */ + data: { + members: null, + imgList: [], + invitationDialog:false + }, + + /** + * 生命周期函数--监听页面加载 + */ + onLoad: function (options) { + superMembers().then(res => { + this.setData({members: res.data.data}) + }) + }, + + /** + * 生命周期函数--监听页面初次渲染完成 + */ + onReady: function () { + + }, + + /** + * 生命周期函数--监听页面显示 + */ + onShow: function () { + + }, + + /** + * 生命周期函数--监听页面隐藏 + */ + onHide: function () { + + }, + + /** + * 生命周期函数--监听页面卸载 + */ + onUnload: function () { + + }, + + /** + * 页面相关事件处理函数--监听用户下拉动作 + */ + onPullDownRefresh: function () { + + }, + + /** + * 页面上拉触底事件的处理函数 + */ + onReachBottom: function () { + + }, + + /** + * 用户点击右上角分享 + */ + onShareAppMessage: function () { + + }, + DelImg(e) { + this.data.imgList.splice(e.currentTarget.dataset.index, 1); + this.setData({ + imgList: this.data.imgList + }) + }, + ChooseImage() { + wx.chooseImage({ + count: 2, //默认9 + sizeType: ['original', 'compressed'], //可以指定是原图还是压缩图,默认二者都有 + sourceType: ['album'], //从相册选择 + success: (res) => { + if (this.data.imgList.length != 0) { + this.setData({ + imgList: this.data.imgList.concat(res.tempFilePaths) + }) + } else { + this.setData({ + imgList: res.tempFilePaths + }) + } + } + }); + }, + onCopy(event) { + console.log(event) + wx.setClipboardData({ + data: event.currentTarget.dataset.code, + success: function (res) { + wx.getClipboardData({ + success: function (res) { + wx.showToast({ + title: '复制成功' + }) + } + }) + } + }) + }, + onExample() { + wx.navigateTo({ + url: '/page_package/apply-vip/example/example?example=' + JSON.stringify(this.data.members.examples) + }) + }, + previewImg(event) { + const index = event.currentTarget.dataset.index + wx.previewImage({ + current: this.data.imgList[index], + urls: this.data.imgList, + }) + }, + onSubmit() { + let that = this + if (this.data.imgList.length != 2) { + wx.showModal({ + title: '提示', + showCancel: false, + content: '最少需要提交两张图片', + success(res) { + } + }) + return + } + Promise.all([ + new Promise((resolve, reject) => { + uploadFile({ + path: that.data.imgList[0], + type: 1 + }).then(res1 => { + resolve(res1) + }).catch(err1 => { + reject(err1) + }) + }), + new Promise((resolve, reject) => { + uploadFile({ + path: that.data.imgList[1], + type: 1 + }).then(res1 => { + resolve(res1) + }).catch(err1 => { + reject(err1) + }) + }) + + // that.data.imgList.forEach(item => { + // + // }) + ]).then(res2 => { + let imgArr = [] + for (let i = 0; i < that.data.imgList.length; i++) imgArr.push(res2[i]) + superMembersUp({imageUrls: imgArr}) + .then((res) => { + this.setData({invitationDialog:true}) + }).catch(err => { + wx.showModal({ + title: '提示', + showCancel: false, + content: err.data.message ? err.data.message : '提交失败', + success(res) { + } + }) + }) + }).catch(err2 => { + wx.showModal({ + title: '提示', + showCancel: false, + content: err2.data.message ? err2.data.message : '提交失败', + success(res) { + } + }) + }) + }, + hideModal(event){ + this.setData({invitationDialog:false}) + if( event.currentTarget.dataset.iscode == 'x'){ + wx.requestSubscribeMessage({ + tmplIds: ['Ag7cMQ1Sl4dx8jdh_VavgZ1XWXoOPhVO5f66M6sJxq0'], + success (res) { + wx.showModal({ + title: '提示', + showCancel: false, + content: '订阅成功,审核结果第一时间发送给你', + success(res) { + wx.navigateBack({//返回 + delta: 2 + }) + } + }) + } + }) + } + } + +}) \ No newline at end of file diff --git a/page_package/apply-vip/apply-vip.json b/page_package/apply-vip/apply-vip.json new file mode 100644 index 0000000..7714023 --- /dev/null +++ b/page_package/apply-vip/apply-vip.json @@ -0,0 +1,6 @@ +{ + "navigationBarBackgroundColor": "#ffffff", + "navigationBarTextStyle": "black", + "navigationBarTitleText": "建群升级", + "usingComponents": {} +} \ No newline at end of file diff --git a/page_package/apply-vip/apply-vip.wxml b/page_package/apply-vip/apply-vip.wxml new file mode 100644 index 0000000..4291566 --- /dev/null +++ b/page_package/apply-vip/apply-vip.wxml @@ -0,0 +1,81 @@ + + + + + + + + + 升级进展:{{members.statusDesc}} + + 为您分配微信群编号:{{members.groupId}} + + 您需要做如下操作完成升级 + + 1.新拉或已有一个超过{{members.memberCount}}人的微信推广群,群名称修改为“{{members.groupName}}” + 复制群名称 + + + 也可添加导师微信咨询,导师微信号:{{members.wechatId}} + 复制微信号 + + + 2.上传两张截图(截图一:显示出群主和群人数 截图二:显示出群名称) + 查看示例 + + + 3.上传提交后,工作时间30分钟内会有审核结果,审核通过会有短信通知或订阅消息。 + + + + + 图片上传 + + + {{imgList.length}}/2 + + + + + + + + + + + + + + + + +提交审核 + + + + + + + 提示 + + + + + + 提交成功啦!,请等待1~3个工作日 + 你可以订阅消息,第一时间获取审核进度 + + + 取消 + 订阅消息 + + + + diff --git a/page_package/apply-vip/apply-vip.wxss b/page_package/apply-vip/apply-vip.wxss new file mode 100644 index 0000000..ccf3190 --- /dev/null +++ b/page_package/apply-vip/apply-vip.wxss @@ -0,0 +1,16 @@ +/* page_package/apply-vip/apply-vip.wxss */ +page { + background-color: #f2f2f2; +} + +.apply-body { + width: 94%; + margin-left: 3%; +} + +.apply-title { + margin-top: 48 rpx; + font-size: 32 rpx; + font-weight: 600; + color: #000; +} \ No newline at end of file diff --git a/page_package/apply-vip/example/example.js b/page_package/apply-vip/example/example.js new file mode 100644 index 0000000..c8203ad --- /dev/null +++ b/page_package/apply-vip/example/example.js @@ -0,0 +1,67 @@ +// page_package/apply-vip/example/example.js +Page({ + + /** + * 页面的初始数据 + */ + data: { + example:[] + }, + + /** + * 生命周期函数--监听页面加载 + */ + onLoad: function (options) { + let example = JSON.parse(options.example) + this.setData({example:example}) + }, + + /** + * 生命周期函数--监听页面初次渲染完成 + */ + onReady: function () { + + }, + + /** + * 生命周期函数--监听页面显示 + */ + onShow: function () { + + }, + + /** + * 生命周期函数--监听页面隐藏 + */ + onHide: function () { + + }, + + /** + * 生命周期函数--监听页面卸载 + */ + onUnload: function () { + + }, + + /** + * 页面相关事件处理函数--监听用户下拉动作 + */ + onPullDownRefresh: function () { + + }, + + /** + * 页面上拉触底事件的处理函数 + */ + onReachBottom: function () { + + }, + + /** + * 用户点击右上角分享 + */ + onShareAppMessage: function () { + + } +}) \ No newline at end of file diff --git a/page_package/apply-vip/example/example.json b/page_package/apply-vip/example/example.json new file mode 100644 index 0000000..6ade6ce --- /dev/null +++ b/page_package/apply-vip/example/example.json @@ -0,0 +1,6 @@ +{ + "navigationBarBackgroundColor": "#ffffff", + "navigationBarTextStyle": "black", + "navigationBarTitleText": "截图示例", + "usingComponents": {} +} \ No newline at end of file diff --git a/page_package/apply-vip/example/example.wxml b/page_package/apply-vip/example/example.wxml new file mode 100644 index 0000000..7f39c0d --- /dev/null +++ b/page_package/apply-vip/example/example.wxml @@ -0,0 +1,5 @@ + + + {{item.step}} + + diff --git a/page_package/apply-vip/example/example.wxss b/page_package/apply-vip/example/example.wxss new file mode 100644 index 0000000..3886eb7 --- /dev/null +++ b/page_package/apply-vip/example/example.wxss @@ -0,0 +1 @@ +/* page_package/apply-vip/example/example.wxss */ \ No newline at end of file diff --git a/page_package/contacts/contacts.js b/page_package/contacts/contacts.js new file mode 100644 index 0000000..c736156 --- /dev/null +++ b/page_package/contacts/contacts.js @@ -0,0 +1,144 @@ +const app = getApp() +const {userContacts, updateUserInfo} = require('../../utils/network/services/user.js') +const constants = require('../../utils/constants') +const util = require('../../utils/util') + +Page({ + + /** + * 页面的初始数据 + */ + data: { + isEditWeChat: false, + weChatCode: '', + windowWidth: app.globalData.windowWidth, + windowHeight: app.globalData.windowHeight, + queryData: { + pageIndex: 1, + pageSize: 20 + }, + requesting: false, + infoData: null + }, + + /** + * 生命周期函数--监听页面加载 + */ + onLoad: function (options) { + this.refresh() + }, + + /** + * 生命周期函数--监听页面初次渲染完成 + */ + onReady: function () { + + }, + + /** + * 生命周期函数--监听页面显示 + */ + onShow: function () { + + }, + + /** + * 生命周期函数--监听页面隐藏 + */ + onHide: function () { + + }, + + /** + * 生命周期函数--监听页面卸载 + */ + onUnload: function () { + + }, + + /** + * 页面相关事件处理函数--监听用户下拉动作 + */ + onPullDownRefresh: function () { + wx.vibrateShort(); + this.refresh() + }, + + /** + * 页面上拉触底事件的处理函数 + */ + onReachBottom: function () { + + }, + + /** + * 用户点击右上角分享 + */ + onShareAppMessage: function () { + + }, + onEdit() { + this.setData({isEditWeChat: true}) + }, + onSave() { + this.setData({isEditWeChat: false}) + updateUserInfo({wechatId: this.data.weChatCode}) + .then(res => { + + }) + }, + onCopy(event) { + if (event.currentTarget.dataset.code) { + wx.setClipboardData({ + data: event.currentTarget.dataset.code, + success: function (res) { + wx.getClipboardData({ + success: function (res) { + wx.showToast({ + title: '复制成功' + }) + } + }) + } + }) + } else wx.showToast({ + title: '暂无微信号' + }) + }, + bindInput(event) { + this.setData({weChatCode: event.detail.value}) + }, + getData(type) { + userContacts(this.data.queryData) + .then(res => { + wx.stopPullDownRefresh() + let arr = this.data.infoData + if (arr && type == 'more') { + res.data.data.fans.forEach(item => { + arr.fans.push(item) + }) + } + this.setData({ + infoData: arr ? arr : res.data.data, + requesting: false, + weChatCode: res.data.data.mine.wechatId ? res.data.data.mine.wechatId : '' + }) + }).catch(err => { + wx.stopPullDownRefresh() + this.setData({requesting: false}) + }) + }, + refresh() { + this.data.queryData.pageIndex = 1 + this.setData({queryData: this.data.queryData, requesting: true}) + this.getData('refresh') + }, + more() { + this.data.queryData.pageIndex = ++this.data.queryData.pageIndex + this.setData({queryData: this.data.queryData}) + this.getData('more') + }, + onReachBottom(){ + this.more() + } +}) \ No newline at end of file diff --git a/page_package/contacts/contacts.json b/page_package/contacts/contacts.json new file mode 100644 index 0000000..fa3dea0 --- /dev/null +++ b/page_package/contacts/contacts.json @@ -0,0 +1,7 @@ +{ + "navigationBarBackgroundColor": "#ffffff", + "navigationBarTextStyle": "black", + "navigationBarTitleText": "我的团队", + "enablePullDownRefresh": true, + "usingComponents": {} +} \ No newline at end of file diff --git a/page_package/contacts/contacts.wxml b/page_package/contacts/contacts.wxml new file mode 100644 index 0000000..04be2c0 --- /dev/null +++ b/page_package/contacts/contacts.wxml @@ -0,0 +1,91 @@ + + + + + + + + + 我的赶快填写微信号吧~方便导师添加你进行指导 + + + + + + {{infoData.mine.nickName}} + {{infoData.mine.identifyDesc}} + + + {{weChatCode?weChatCode:'点此填写微信号'}} + + 保 存 + + + + + 邀请人 + + + + + {{infoData.inviter.nickName}} + + + 微信号:{{infoData.inviter.wechatId}} + + 复制微信 + + + + 导师 + + + + + {{infoData.teacher.nickName}} + + + 微信号:{{infoData.teacher.wechatId}} + + 复制微信 + + + + + + 我的粉丝仅显示已填写微信号的粉丝 + + + + + {{item.nickName}} + + + 微信号:{{item.wechatId}} + + 复制微信 + + + + ———— 已经到底啦 ———— + + + diff --git a/page_package/contacts/contacts.wxss b/page_package/contacts/contacts.wxss new file mode 100644 index 0000000..aa051aa --- /dev/null +++ b/page_package/contacts/contacts.wxss @@ -0,0 +1,25 @@ +/* page_package/contacts/contacts.wxss */ + +page{ + background-color: #f2f2f2; +} + +.absolute-right{ + position: absolute; + right: 40rpx; +} + +.action-btn1{ + padding: 4rpx 16rpx; + border-radius: 6rpx; + background-color: white; + border: 1rpx solid #f43f3b; +} + +.rank{ + padding: 4rpx 16rpx; + border-radius: 32rpx; + color:#888; + background-color: white; + border: 1rpx solid #666666; +} \ No newline at end of file diff --git a/page_package/details/index.js b/page_package/details/index.js new file mode 100644 index 0000000..3e1f258 --- /dev/null +++ b/page_package/details/index.js @@ -0,0 +1,588 @@ +// page_package/details/index.js +const app = getApp() +const {goodsUrl, productsCode, appCode, purchaseUrl} = require("../../utils/network/services/productImpl.js") +const constants = require("../../utils/constants") +const util = require("../../utils/util") +const {onLogin} = require("../../utils/network/services/user.js") +Page({ + + /** + * 页面的初始数据 + */ + data: { + StatusBar: app.globalData.StatusBar, + CustomBar: app.globalData.CustomBar, + Custom: app.globalData.Custom, + windowWidth: app.globalData.windowWidth, + windowHeight: app.globalData.windowHeight, + userInfo: app.globalData.userInfo, + productDetails: null, + invitationDialog: false, + imgWidth: 0, + imgHeight: 0, + ctx: null, + modalName: "", + shareURl: "", + shareImgPath: "", + synthesisImg: '', + appImg: '', + userInfo: app.globalData.userInfo, + shareType: 1 + }, + + /** + * 生命周期函数--监听页面加载 + */ + onLoad: function (options) { + this.setData({ + productDetails: util.getStorage(constants.PRPDUCT_ITEM), + imgWidth: 255,//app.globalData.windowWidth * 0.68 + imgHeight: 407, //app.globalData.windowHeight * 0.61 + }) + let coupons = this.data.productDetails.coupons + let data = { + invitationCode: '', + couponUrl: coupons.length > 0 ? coupons[coupons.length - 1].link : '', + materialId: this.data.productDetails.materialUrl + } + if (!app.globalData.loginStatus) { + let that = this + wx.login({ + success: res => { + onLogin(res.code) + .then(res => { + app.globalData.userInfo = res.data.data + util.setStorage(constants.AUTH_INFO, res.data.data) + that.setData({userInfo: res.data.data}) + purchaseUrl(data).then(res => { + that.setData({shareURl: res.data.data.shortURL}) + }) + }).catch((err) => { + if (err.data.code = 'USER_NOT_REGISTERED') { + // that.setData({token: err.data.data.token}) + wx.navigateTo({url: '/pages/login/login?token=' + err.data.data.token}) + } + }) + } + }) + } else { + purchaseUrl(data).then(res => { + this.setData({shareURl: res.data.data.shortURL}) + }) + } + }, + + /** + * 生命周期函数--监听页面初次渲染完成 + */ + onReady: function () { + + }, + + /** + * 生命周期函数--监听页面显示 + */ + onShow: function () { + + }, + + /** + * 生命周期函数--监听页面隐藏 + */ + onHide: function () { + + }, + + /** + * 生命周期函数--监听页面卸载 + */ + onUnload: function () { + + }, + + /** + * 页面相关事件处理函数--监听用户下拉动作 + */ + onPullDownRefresh: function () { + + }, + + /** + * 页面上拉触底事件的处理函数 + */ + onReachBottom: function () { + + }, + + /** + * 用户点击右上角 + */ + onShareAppMessage: function (res) { + this.setData({modalName: ''}) + return { + title: this.data.productDetails.skuName, + path: '/pages/product/product?id=' + this.data.productDetails.skuId + '&invitationCode=' + this.data.userInfo.invitationCode, + imageUrl: this.data.productDetails.images[0], + success: function (res) { + // 转发成功 + console.log('转发成功') + }, + fail: function (res) { + // 转发失败 + console.log('转发失败') + } + } + }, + + goHome(event) { + wx.reLaunch({ + url: '/pages/index/index', + }) + }, + onShowModel() { + this.setData({ + modalName: 'bottomModal' + }) + }, + onShare(event) { + let that = this + let index = event.currentTarget.dataset.index + that.imgLoader(index) + that.setData({ + modalName: '', + shareType: Number(index) + }) + }, + onClose() { + let that = this + this.setData({ + invitationDialog: false, + }) + this.data.ctx.draw() + + if (this.data.shareImgPath) { + wx.getFileSystemManager().unlink({ + filePath: this.data.shareImgPath, + success: res => { + that.setData({shareImgPath: ''}) + } + }) + } + }, + + + imgLoader(index) { + if ((this.data.synthesisImg && index == 1) || (this.data.appImg && index == 0)) { + this.setData({invitationDialog: true}) + } else { + let that = this + wx.showLoading({title: '合成中...',}) + Promise.all([ + new Promise((resolve, reject) => { + wx.getImageInfo({ + src: that.data.productDetails.images[0], + success(res) { + resolve(res) + }, + fail(err) { + err.prompt = '合成商品图失败' + reject(err) + } + }) + }), + new Promise((resolve, reject) => { + wx.getImageInfo({ + src: that.data.userInfo.avatarUrl, + success(res) { + resolve(res) + }, + fail(err) { + err.prompt = '合成头像失败' + reject(err) + } + }) + }), + + new Promise((resolve, reject) => { + if (index == 1) {//商品推廣 + let data = { + materialUrl: this.data.productDetails.materialUrl, + size: 72 + } + if (this.data.productDetails.coupons.length > 0) { + data = { + couponUrl: this.data.productDetails.coupons[this.data.productDetails.coupons.length - 1].link, + materialUrl: this.data.productDetails.materialUrl, + size: 72 + } + } + productsCode(data) + .then(res => { + let filePath = `${wx.env.USER_DATA_PATH}/${that.data.productDetails.skuId}`; + wx.getFileSystemManager().writeFile({ + filePath: filePath, + data: wx.base64ToArrayBuffer(res.data.data.content), + encoding: 'binary', + success: () => { + resolve(filePath); + }, + fail: err => { + err.prompt = '合成商品码失败' + reject(err); + }, + }); + }).catch((err) => { + err.prompt = '获取商品码失败' + reject(err); + }) + } else { + let data = { + page: "pages/product/product", + scene: {id: that.data.productDetails.skuId,}, + size: 72 + } + appCode(data) + .then(res => { + let filePath = `${wx.env.USER_DATA_PATH}/${that.data.productDetails.skuId}${that.data.productDetails.inOrderCount30Days}`; + wx.getFileSystemManager().writeFile({ + filePath: filePath, + data: wx.base64ToArrayBuffer(res.data.data.content), + encoding: 'binary', + success: () => { + resolve(filePath); + }, + fail: err => { + err.prompt = '合成推广码失败' + reject(err); + }, + }); + }).catch((err) => { + err.prompt = '获取推广码失败' + reject(err); + }) + } + }) + + ]).then(res => { + let id = index == 1 ? 'myCanvas' : 'myCanvas1' + const ctx = wx.createCanvasContext(id, that); + ctx.fillStyle = "#FFFFFF"; + ctx.fillRect(0, 0, that.data.imgWidth, that.data.imgHeight); + that.setData({ctx: ctx}) + const productImg = res[0].path //商品图 + const title = that.data.productDetails.skuName //商品名称 + const titleLines = that.skuNameFormat(ctx, title) + //券后价 + const couponPrice = that.data.productDetails.priceInfo.lowestCouponPrice ? that.data.productDetails.priceInfo.lowestCouponPrice : that.data.productDetails.priceInfo.price + const comment = util.formatNUmber(that.data.productDetails.comments) //评论条数 + const praise = that.data.productDetails.goodCommentsShare //好评率 + const price = util.formatNUmber(that.data.productDetails.priceInfo.price) //京东价 + //优惠券 + let coupon = 0 + if (that.data.productDetails.coupons.length > 0) + coupon = that.data.productDetails.coupons[0].discount ? that.data.productDetails.coupons[0].discount : 0 + + const avatarUrl = res[1].path //用户头像 + const userName = that.data.userInfo.nickName //用户昵称 + const code = "DHWKLD" + const promotionCode = res[2].path //推广码 + + //绘制商品图 + ctx.drawImage(productImg, 0, 0, that.data.imgWidth, that.data.imgWidth); + ctx.save(); + + //京东标识矩形 + ctx.rect(10, that.data.imgWidth + 10, 23, 11) + ctx.setFillStyle('#f43f3b') + ctx.setStrokeStyle('#f43f3b') + // ctx.setBorderRadius(5) + ctx.fill() + + //京东标识文字 + ctx.setTextAlign('left') + ctx.setFillStyle('#ffffff') + ctx.setFontSize(9) + ctx.fillText('京东', 12, that.data.imgWidth + 18) + ctx.stroke() + + //商品标题第一行 + ctx.setTextAlign('left') + ctx.setFillStyle('#333333') + ctx.setFontSize(11) + ctx.fillText(titleLines[0], 43, that.data.imgWidth + 20) + ctx.stroke() + + //商品标题第二行 + ctx.setTextAlign('left') + ctx.setFillStyle('#333333') + ctx.setFontSize(11) + ctx.fillText(titleLines.length > 1 ? titleLines[1] : ' ', 10, that.data.imgWidth + 40) + ctx.stroke() + + //券后价文本 + ctx.setTextAlign('left') + ctx.setFillStyle('#f43f3b') + ctx.setFontSize(9) + ctx.fillText("券后价¥", 10, that.data.imgWidth + 64) + ctx.stroke() + + //券后价 + ctx.setTextAlign('left') + ctx.setFillStyle('#f43f3b') + ctx.setFontSize(15) + ctx.fillText(util.isNumber(couponPrice) ? Number(couponPrice).toFixed(2) : couponPrice, 45, that.data.imgWidth + 64) + ctx.stroke() + + //评论 好评 + ctx.setTextAlign('right') + ctx.setFillStyle('#666666') + ctx.setFontSize(9) + ctx.fillText(comment + "条评论 好评率" + praise + "%", that.data.imgWidth - 10, that.data.imgWidth + 64) + ctx.stroke() + + //京东价 + ctx.setTextAlign('left') + ctx.setFillStyle('#666666') + ctx.setFontSize(9) + ctx.fillText(util.isNumber(price) ? "京东价¥" + Number(price).toFixed(2) : "京东价¥" + price, 10, that.data.imgWidth + 86) + ctx.stroke() + + //优惠券 + ctx.setTextAlign('left') + ctx.setFillStyle('#f43f3b') + ctx.setFontSize(12) + ctx.fillText("优惠券¥" + coupon, 90, that.data.imgWidth + 86) + ctx.stroke() + + //用户昵称 + ctx.setTextAlign('left') + ctx.setFillStyle('#333333') + ctx.setFontSize(11) + ctx.fillText('好友' + userName, 64, that.data.imgWidth + 116) + ctx.stroke() + + //用户昵称 + ctx.setTextAlign('left') + ctx.setFillStyle('#666666') + ctx.setFontSize(8) + ctx.fillText('推荐您享受京东购物优惠', 64, that.data.imgWidth + 134) + ctx.stroke() + + // + ctx.setTextAlign('right') + ctx.setFillStyle('#444444') + ctx.setFontSize(9) + ctx.fillText('长按识别', that.data.imgWidth - 28, that.data.imgHeight - 5) + ctx.stroke() + + //用户头像 + ctx.arc(34, that.data.imgWidth + 120, 24, 0, Math.PI * 2, false); + ctx.clip(); + ctx.drawImage(avatarUrl, 10, that.data.imgWidth + 96, 48, 48); + ctx.restore(); + + //推广二维码 + ctx.drawImage(res[2], that.data.imgWidth - 74, that.data.imgHeight - 79, 64, 64); + ctx.restore(); + + ctx.draw() + + setTimeout(() => { + that.heIMg(that, index, id) + that.setData({ + shareImgPath: res[2] + }) + }, 150) + }).catch(err => { + console.log(JSON.stringify(err)) + wx.hideLoading() + wx.showModal({ + title: '提示', + showCancel: false, + content: err.prompt?err.prompt:"合成图片失败", + success(res) { + } + }) + }) + } + }, + + heIMg(that, index, id) { + wx.canvasToTempFilePath({ + x: 0, + y: 0, + width: that.data.imgWidth, + height: that.data.imgHeight, + canvasId: id, + success: function (res) { + wx.hideLoading() + console.log("图片ID=", id) + if (index == 1) + that.setData({ + synthesisImg: res.tempFilePath, + invitationDialog: true + }) + else that.setData({ + appImg: res.tempFilePath, + invitationDialog: true + }) + }, + fail: function (err) { + wx.hideLoading() + } + }, that) + }, + + skuNameFormat(context, title) { + let ostrtxt = '' + let olinenum = 0 + let oarrtxt = [] + context.setFontSize(11) + for (let i = 0; i < title.length; i++) { + ostrtxt = ostrtxt + title[i] + let ometricsw = context.measureText(ostrtxt) //计算字符宽度 + if (oarrtxt.length == 0) { + if (ometricsw.width > this.data.imgWidth - 60) {//设置每行的宽度 + olinenum++ + oarrtxt = oarrtxt.concat([ostrtxt]) + ostrtxt = ''; + } + } else { + if (ometricsw.width > this.data.imgWidth - 25) {//设置每行的宽度 + olinenum++ + oarrtxt = oarrtxt.concat([ostrtxt]) + ostrtxt = ''; + } + } + } + oarrtxt = oarrtxt.concat([ostrtxt]) + return oarrtxt + }, + imgPreview(event) { + const index = event.currentTarget.dataset.index + wx.previewImage({ + current: this.data.productDetails.images[index], + urls: this.data.productDetails.images + }) + }, + previewImg(event) { + wx.previewImage({ + urls: [this.data.shareType == 1 ? this.data.synthesisImg : this.data.appImg], + }) + }, + saveImg: function (event) { + wx.showLoading({title: '保存中...',}) + wx.saveImageToPhotosAlbum({ + filePath: this.data.shareType == 1 ? this.data.synthesisImg : this.data.appImg,//canvasToTempFilePath返回的tempFilePath + success: (res) => { + wx.hideLoading() + wx.showModal({ + title: '提示', + showCancel: false, + content: '图片保存成功,进入系统相册分享吧~', + success(res) { + if (res.confirm) { + + } + } + }) + }, + fail: (err) => { + wx.hideLoading() + wx.showModal({ + title: '提示', + showCancel: false, + content: '请到小程序设置中打开相册权限', + success(res) { + if (res.confirm) { + } + } + }) + } + }) + }, + goToJD() { + if (this.data.shareURl) { + let materialUrl = encodeURIComponent(this.data.shareURl); + //pages/item/detail/detail?sku=xxx + wx.navigateToMiniProgram({ + appId: 'wx91d27dbf599dff74', + path: 'pages/union/proxy/proxy?spreadUrl=' + materialUrl, + envVersion: 'release', + success(res) { + // 打开成功 + } + }); + } else { + let coupons = this.data.productDetails.coupons + let data = { + chainType: 2, + couponUrl: coupons[coupons.length - 1].link, + materialId: this.data.productDetails.materialUrl + } + if (coupons.length > 0) { + data = { + chainType: 2, + couponUrl: coupons[coupons.length - 1].link, + materialId: this.data.productDetails.materialUrl + } + } + goodsUrl(data).then(res => { + this.setData({shareURl: res.data.data.shortURL}) + let materialUrl = encodeURIComponent(this.data.shareURl); + wx.navigateToMiniProgram({ + appId: 'wx91d27dbf599dff74', + path: 'pages/union/proxy/proxy?spreadUrl=' + materialUrl, + envVersion: 'release', + success(res) { + // 打开成功 + } + }); + }) + } + }, + + onCloseModel() { + this.setData({ + modalName: '' + }) + }, + copySkuID() { + wx.setClipboardData({ + data: (this.data.productDetails.skuId).toString(), + success: function (res) { + wx.getClipboardData({ + success: function (res) { + wx.showToast({ + title: '复制成功' + }) + } + }) + } + }) + }, + copySkuName() { + wx.setClipboardData({ + data: this.data.productDetails.skuName, + success: function (res) { + wx.getClipboardData({ + success: function (res) { + wx.showToast({ + title: '复制成功' + }) + } + }) + } + }) + }, + onDetails() { + wx.navigateToMiniProgram({ + appId: 'wx91d27dbf599dff74', + path: 'pages/item/detail/detail?sku=' + this.data.productDetails.skuId, + envVersion: 'release', + success(res) { + // 打开成功 + } + }); + }, +}) \ No newline at end of file diff --git a/page_package/details/index.json b/page_package/details/index.json new file mode 100644 index 0000000..40ad737 --- /dev/null +++ b/page_package/details/index.json @@ -0,0 +1,6 @@ +{ + "navigationBarBackgroundColor": "#ffffff", + "navigationBarTextStyle": "black", + "navigationBarTitleText": "商品详情", + "usingComponents": {} +} \ No newline at end of file diff --git a/page_package/details/index.wxml b/page_package/details/index.wxml new file mode 100644 index 0000000..5ff2c7b --- /dev/null +++ b/page_package/details/index.wxml @@ -0,0 +1,169 @@ + + + + + + + + + + + + + + + + + + + + + + + + 京东 + + {{productDetails.skuName}} + + + + + 京东价 + ¥ {{productDetails.priceInfo.price}} + + 评论数 {{productDetails.comments}} + 好评率 {{productDetails.goodCommentsShare}}% + 查看详情 > + + + + + + + + 优惠券 + {{productDetails.coupons[0].discount}} + + + {{productDetails.commissionInfo.rebateHint}} + + + + + + 注:返现给下单购买用户 + + 券后价¥ + {{productDetails.priceInfo.lowestCouponPrice ? + productDetails.priceInfo.lowestCouponPrice:productDetails.priceInfo.price}} + + + 返利价¥ + {{productDetails.priceInfo.lowestRebatePrice}} + + + + + + + + + 商品编号:{{productDetails.skuId}} + + + + + + + + 京东商品 + + + 品质保证 + + + 无忧售后 + + + + + + + + + + + + + + + + 首页 + + + + + 小程序 + + 分享海报 + 京东购买 + + + + + + + + + + + + + + + + + + + + + + 保存到手机相册 + + + 预览海报长按分享 + + + + + + + + + + + + \ No newline at end of file diff --git a/page_package/details/index.wxss b/page_package/details/index.wxss new file mode 100644 index 0000000..5c99d2c --- /dev/null +++ b/page_package/details/index.wxss @@ -0,0 +1,130 @@ +/* page_package/details/index.wxss */ +.bottom-bar{ + position: fixed; + bottom: 0px; + display: flex; + width: 100%; +} + +.tag-product { + background-color: #f43f3b; + color: white; + position: absolute; + padding: 6rpx 12rpx; + font-size: 24rpx; + border-radius: 10rpx; + margin-left: 20rpx; +} + +.title-style { + text-indent: 48px; + margin-left: 20rpx; + letter-spacing: 4rpx; + line-height: 48rpx; + font-size: 32rpx +} + +.comment{ + position: absolute; + right: 20rpx; +} + +.style-three { + width:100%; + height:1.5rem; + position:relative; + display:-webkit-box; + display:-webkit-flex; + display:flex; + align-items:center; + justify-content:center; + background-color:#f43f3b; + border:none; + color:#fff; +} + +.style-three:before { + content:""; + position:absolute; + left:-.33rem; + width:0.8rem; + height:1.0rem; + top:50%; + -webkit-transform:translate(-30%,-50%); + transform:translate(-30%,-50%); + -webkit-box-shadow:3px 0 0 #e76960; + box-shadow:3px 0 0 #e76960; + -webkit-border-radius:80%; + border-radius:80%; + background-color:white; +} + +.style-three .get-btn:after { + content:""; + width:.6rem; + position:absolute; + top:0; + bottom:0; + right:28.9%; + left:0; + display:block; + z-index:9; + background-color:#fff; + background-position:100% 35%; + background-size:1rem .5rem; + background-image:linear-gradient(-45deg,#ffffff 25%,#e76960 25%,#e76960) +} + +.style-three .get-btn { + display:-webkit-box; + display:-webkit-flex; + display:flex; + position: absolute; + right: 0; + align-items:center; + justify-content:center; + width:5%; + height:1.5rem; + text-align:center; + color:#fff; + font-size:1.5rem; + line-height:1.15; + background-color:#fff; +} + +.line1{ + width: 100%; + height: 10rpx; + background-color: #f2f2f2; + margin: 20rpx 0px; +} + +.cu-dialog1 { + position: fixed; + display: inline-block; + vertical-align: middle; + margin-left: auto; + margin-right: auto; + width: 680rpx; + max-width: 100%; + background-color: transparent; + border-radius: 10rpx; + overflow: hidden; +} + +.share-img{ + width: 500rpx; + height: 750rpx; + position: relative; + display: flex; +} + +.share-btn{ + width: 100%; + background-color: white; + border-top: 1px solid #f2f2f2; +} + +.fixed{ + position: fixed; +} \ No newline at end of file diff --git a/page_package/equity/equity.js b/page_package/equity/equity.js new file mode 100644 index 0000000..b3ab953 --- /dev/null +++ b/page_package/equity/equity.js @@ -0,0 +1,87 @@ +// page_package/equity/equity.js +const app = getApp() +Page({ + + /** + * 页面的初始数据 + */ + data: { + windowHeight: app.globalData.windowHeight, + CustomBar: app.globalData.CustomBar, + + vipList: [ + {icon: 'moneybagfill', title: '省的更多', sub: '自购有佣金'}, + {icon: 'pay', title: '推广赚钱', sub: '推广赚佣金'}, + {icon: 'baby', title: '平台奖励', sub: '平台额外奖励'}, + {icon: 'friendfill', title: '京东拉新', sub: '高额拉新奖励'}, + {icon: 'friendfill', title: '智能助手', sub: '帮您轻松赚钱'}, + {icon: 'myfill', title: '导师指导', sub: '帮您更快上手'}, + {icon: 'choicenessfill', title: '大咖课程', sub: '免费畅听'}, + {icon: 'goodsfill', title: '精品爆款', sub: '高佣品质商品'}, + {icon: 'servicefill', title: '专属客服', sub: '1V1解决问题'} + ] + }, + + /** + * 生命周期函数--监听页面加载 + */ + onLoad: function (options) { + + }, + + /** + * 生命周期函数--监听页面初次渲染完成 + */ + onReady: function () { + + }, + + /** + * 生命周期函数--监听页面显示 + */ + onShow: function () { + + }, + + /** + * 生命周期函数--监听页面隐藏 + */ + onHide: function () { + + }, + + /** + * 生命周期函数--监听页面卸载 + */ + onUnload: function () { + + }, + + /** + * 页面相关事件处理函数--监听用户下拉动作 + */ + onPullDownRefresh: function () { + + }, + + /** + * 页面上拉触底事件的处理函数 + */ + onReachBottom: function () { + + }, + + /** + * 用户点击右上角分享 + */ + onShareAppMessage: function () { + + }, + + onClick() { + wx.navigateTo({ + url: '/page_package/apply-vip/apply-vip' + }) + } + } +) \ No newline at end of file diff --git a/page_package/equity/equity.json b/page_package/equity/equity.json new file mode 100644 index 0000000..000ce10 --- /dev/null +++ b/page_package/equity/equity.json @@ -0,0 +1,4 @@ +{ + "navigationBarTitleText": "会员升级", + "usingComponents": {} +} \ No newline at end of file diff --git a/page_package/equity/equity.wxml b/page_package/equity/equity.wxml new file mode 100644 index 0000000..3d29acc --- /dev/null +++ b/page_package/equity/equity.wxml @@ -0,0 +1,33 @@ + + + + + + + + + + 黄金会员九大权益 + + + + + + + + + + {{item.title}} + {{item.sub}} + + + + + + 直接建群升级 + + + + + + diff --git a/page_package/equity/equity.wxss b/page_package/equity/equity.wxss new file mode 100644 index 0000000..5ee624b --- /dev/null +++ b/page_package/equity/equity.wxss @@ -0,0 +1,49 @@ +/* page_package/equity/equity.wxss */ +page{ + background-image: linear-gradient(45deg, #f43f3b, #e76960); +} + +.vip-title{ + background: linear-gradient(to bottom,#FFFFEF, #FFCEA2); + -webkit-background-clip: text; + color: transparent; + letter-spacing:2px +} + +.vip-body{ + width: 100%; + margin-top: 60rpx; +} + +.vip-body1{ + width: 94%; + margin-left: 3%; + background-color: white; + border-radius: 8rpx; + padding: 20rpx; + border-radius: 100% 100% 100% 100% / 12rpx 12rpx 30% 30% +} + +.vip-body2{ + border: 1px solid #FFCEA2; + background-color: #FFFFEF; + border-radius: 100% 100% 100% 100% / 12rpx 12rpx 30% 30% +} + +.vip-btn{ + width: 70%; + height: 68rpx; + font-size: 30rpx; + color: #72462E; + margin-top: 70rpx; + background: linear-gradient(to right,#FFFFEF, #FFCEA2); + border-radius: 34rpx; +} + +.list-item-img { + width: 80rpx; + height: 80rpx; + background-image: linear-gradient(90deg, #FDD98C, #FFBA5E); + border-radius: 50%; + font-size: 30rpx; +} \ No newline at end of file diff --git a/page_package/fans/fans.js b/page_package/fans/fans.js new file mode 100644 index 0000000..44543f7 --- /dev/null +++ b/page_package/fans/fans.js @@ -0,0 +1,155 @@ +// page_package/fans/fans.js +const app = getApp() +const {getMembers} = require("../../utils/network/services/user.js") +const constants = require("../../utils/constants") +const util = require("../../utils/util") + +Page({ + + /** + * 页面的初始数据 + */ + data: { + windowWidth: app.globalData.windowWidth, + windowHeight: app.globalData.windowHeight, + CustomBar: app.globalData.CustomBar, + userInfo: app.globalData.userInfo, + requesting: false, + end: false, + emptyShow: false, + hasTop: false, + enableBackToTop: false, + refreshSize: 90, + bottomSize: 0, + color: "#3F82FD", + empty: false, + isLoad:false, + scrollLeft: 0, + scrollTop: -1, + TabCur: 0, + tabs: [ + // {name: "我的注册用户"}, + {name: "我的超级会员"} + ], + queryData: { + identify: 1, + pageIndex: 1, + pageSize: 20 + }, + fansList: [] + }, + + /** + * 生命周期函数--监听页面加载 + */ + onLoad: function (options) { + this.setData({queryData: this.data.queryData}) + this.getData('refresh') + if(this.data.userInfo.identify>2){ + this.setData({ + tabs:[ + // {name: "我的注册用户"}, + {name: "我的超级会员"}, + {name: "我的下级导师"}, + ] + }) + } + }, + + getData(type) { + this.setData({ + requesting: true + }) + if (type == 'refresh') + this.data.queryData.pageIndex = 1 + else + this.data.queryData.pageIndex = this.data.queryData.pageIndex + 1 + + this.data.queryData.identify = Number(this.data.TabCur) + 2 + this.setData({queryData: this.data.queryData}) + getMembers(this.data.queryData).then((res) => { + res.data.data.records.forEach( item => { + item.phone = util.phoneFor(item.phone) + item.createTime = util.isNumber(item.createTime) ? util.formatTime(new Date(item.createTime)) : item.createTime + }) + let lastList = this.data.fansList + if(type != 'refresh') res.data.data.records.forEach( item => {lastList.push(item)}) + this.setData({fansList: type == 'refresh' ? res.data.data.records : lastList}) + wx.stopPullDownRefresh() + setTimeout(() => {this.setData({requesting:false,isLoad:false})},500) + }).catch(err => { + wx.stopPullDownRefresh() + this.setData({ + requesting: false, + isLoad:false + }) + }) + }, + + /** + * 生命周期函数--监听页面初次渲染完成 + */ + onReady: function () { + + }, + + /** + * 生命周期函数--监听页面显示 + */ + onShow: function () { + + }, + + /** + * 生命周期函数--监听页面隐藏 + */ + onHide: function () { + + }, + + /** + * 生命周期函数--监听页面卸载 + */ + onUnload: function () { + + }, + + /** + * 页面相关事件处理函数--监听用户下拉动作 + */ + onPullDownRefresh: function () { + this.refresh() + }, + + /** + * 页面上拉触底事件的处理函数 + */ + onReachBottom: function () { + this.more() + }, + + /** + * 用户点击右上角分享 + */ + onShareAppMessage: function () { + + }, + more() { + if(this.data.isLoad) return + this.setData({isLoad:true}) + this.getData('more') + }, + refresh() { + if(this.data.requesting) return + this.getData('refresh') + }, + tabSelect(e) { + this.setData({ + TabCur: e.currentTarget.dataset.id, + scrollLeft: (e.currentTarget.dataset.id - 1) * 60, + scrollTop: 0 + }) + this.getData('refresh') + // let item = e.currentTarget.dataset.item + }, +}) \ No newline at end of file diff --git a/page_package/fans/fans.json b/page_package/fans/fans.json new file mode 100644 index 0000000..9d20d87 --- /dev/null +++ b/page_package/fans/fans.json @@ -0,0 +1,11 @@ +{ + "navigationBarBackgroundColor": "#ffffff", + "navigationBarTextStyle": "black", + "navigationBarTitleText": "我的粉丝", + "backgroundColor": "#f2f2f2", + "onReachBottomDistance": 100, + "enablePullDownRefresh": true, + "usingComponents": { + "bc-scroll": "/components/refresh/refresh" + } +} \ No newline at end of file diff --git a/page_package/fans/fans.wxml b/page_package/fans/fans.wxml new file mode 100644 index 0000000..2f6062f --- /dev/null +++ b/page_package/fans/fans.wxml @@ -0,0 +1,105 @@ + + + + + + + + + + + + {{item.name}} + + + + + + + + + + + + + + + + + + + + + + {{item.nickName}} + + + {{item.phone}} + + + 注册时间:{{item.createTime}} + + + + + + + + + + + + 暂无粉丝 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/page_package/fans/fans.wxss b/page_package/fans/fans.wxss new file mode 100644 index 0000000..d21d9d8 --- /dev/null +++ b/page_package/fans/fans.wxss @@ -0,0 +1,4 @@ +/* page_package/fans/fans.wxss */ +page{ + background-color: #f2f2f2; +} \ No newline at end of file diff --git a/page_package/feedback/feedback.js b/page_package/feedback/feedback.js new file mode 100644 index 0000000..f06fa4b --- /dev/null +++ b/page_package/feedback/feedback.js @@ -0,0 +1,107 @@ +// page_package/feedback/feedback.js +const app = getApp() +const {feedback} = require('../../utils/network/services/user.js') +const constants = require('../../utils/constants') +const util = require('../../utils/util') +Page({ + + /** + * 页面的初始数据 + */ + data: { + feedbackContent: "" + }, + + /** + * 生命周期函数--监听页面加载 + */ + onLoad: function (options) { + + }, + + /** + * 生命周期函数--监听页面初次渲染完成 + */ + onReady: function () { + + }, + + /** + * 生命周期函数--监听页面显示 + */ + onShow: function () { + + }, + + /** + * 生命周期函数--监听页面隐藏 + */ + onHide: function () { + + }, + + /** + * 生命周期函数--监听页面卸载 + */ + onUnload: function () { + + }, + + /** + * 页面相关事件处理函数--监听用户下拉动作 + */ + onPullDownRefresh: function () { + + }, + + /** + * 页面上拉触底事件的处理函数 + */ + onReachBottom: function () { + + }, + + /** + * 用户点击右上角分享 + */ + onShareAppMessage: function () { + + }, + textareaBInput(event) { + this.setData({feedbackContent: event.detail.value}) + }, + onSubmit() { + if (this.data.feedbackContent.length < 15) { + wx.showModal({ + title: '提示', + showCancel: false, + content: "请最少输入15个字符反馈信息", + success(res) { + } + }) + return + } + feedback({content:this.data.feedbackContent}).then(res => { + wx.showModal({ + title: '提示', + showCancel: false, + content: "我们收到你的反馈啦~如有必要客服将会联系你", + success(res) { + if (res.confirm) { + wx.navigateBack({//返回 + delta: 1 + }) + } + } + }) + }).catch(err => { + wx.showModal({ + title: '提示', + showCancel: false, + content: "提交失败~可以去联系客服", + success(res) { + } + }) + }) + } +}) \ No newline at end of file diff --git a/page_package/feedback/feedback.json b/page_package/feedback/feedback.json new file mode 100644 index 0000000..cf40c06 --- /dev/null +++ b/page_package/feedback/feedback.json @@ -0,0 +1,6 @@ +{ + "navigationBarBackgroundColor": "#ffffff", + "navigationBarTextStyle": "black", + "navigationBarTitleText": "意见反馈", + "usingComponents": {} +} \ No newline at end of file diff --git a/page_package/feedback/feedback.wxml b/page_package/feedback/feedback.wxml new file mode 100644 index 0000000..ac23015 --- /dev/null +++ b/page_package/feedback/feedback.wxml @@ -0,0 +1,14 @@ + + + 问题或建议 + + + + 提 交 + diff --git a/page_package/feedback/feedback.wxss b/page_package/feedback/feedback.wxss new file mode 100644 index 0000000..e4faaf8 --- /dev/null +++ b/page_package/feedback/feedback.wxss @@ -0,0 +1,5 @@ +/* page_package/feedback/feedback.wxss */ +.page{ + height:calc(100vh); + background-color: #f2f2f2; +} \ No newline at end of file diff --git a/page_package/menu-product/menu-product.js b/page_package/menu-product/menu-product.js new file mode 100644 index 0000000..da47271 --- /dev/null +++ b/page_package/menu-product/menu-product.js @@ -0,0 +1,289 @@ +// page_package/menu-product/menu-product.js +const app = getApp() +const {global, highCommission, deliverById, brand, queryProductType,couponList,ringPush} = require("../../utils/network/services/productImpl.js") +let pageStart = 1; +const constants = require("../../utils/constants") +const util = require("../../utils/util") + + +Page({ + + /** + * 页面的初始数据 + */ + data: { + windowWidth: app.globalData.windowWidth, + windowHeight: app.globalData.windowHeight, + CustomBar: app.globalData.CustomBar, + + requesting: false, + end: false, + emptyShow: false, + page: pageStart, + listData: [], + hasTop: false, + enableBackToTop: false, + refreshSize: 90, + bottomSize: 150, + color: "#3F82FD", + empty: false, + + TabCur: 0, + scrollLeft: 0, + + productList: [], + type: "", + title: "",//页面标题 + tabs: [], + item: null, + cid1: null, + scrollTop:-1 + }, + + /** + * 生命周期函数--监听页面加载 + */ + onLoad: function (options) { + let item = JSON.parse(options.item) + this.setData({ + type: options.type, + tabs: item.tabs, + item: item, + cid1: item.tabs.length > 0 ? item.tabs[0].type : null + }) + if (!util.isNumber(options.type)) + this.setData({title: options.type}) + else + switch (Number(options.type)) { + case constants.JD_DELIVERY: + this.setData({title: "京东配送"}) + break + case constants.BRAND_ZONE: + this.setData({title: "品牌专区"}) + break + case constants.COUPON: + this.setData({title: "优惠券"}) + break + case constants.HAIR_RING_PUSH: + this.setData({title: "发圈必推"}) + break + case constants.FASHION_LIFE: + this.setData({title: "时尚生活"}) + break + case constants.DIGITAL_HOME: + this.setData({title: "家电数码"}) + break + case constants.FRESH_FOOD: + this.setData({title: "食品生鲜"}) + break + case constants.FURNITYRE: + this.setData({title: "家居日用"}) + break + case constants.BEAUTY_CARE: + this.setData({title: "美妆个护"}) + break + } + + this.getList('refresh', pageStart); + + + wx.setNavigationBarTitle({ + title:this.data.title + }) + }, + + /** + * 生命周期函数--监听页面初次渲染完成 + */ + onReady: function () { + + }, + + /** + * 生命周期函数--监听页面显示 + */ + onShow: function () { + + }, + + /** + * 生命周期函数--监听页面隐藏 + */ + onHide: function () { + + }, + + /** + * 生命周期函数--监听页面卸载 + */ + onUnload: function () { + + }, + + /** + * 页面相关事件处理函数--监听用户下拉动作 + */ + onPullDownRefresh: function () { + + }, + + /** + * 页面上拉触底事件的处理函数 + */ + onReachBottom: function () { + + }, + + /** + * 用户点击右上角分享 + */ + onShareAppMessage: function () { + + }, + // 刷新数据 + refresh() { + this.getList('refresh', pageStart); + this.setData({ + empty: false + }) + }, + // 加载更多 + more() { + this.getList('more', this.data.page); + }, + /** + * 根据类型请求数据 + * @param type 刷新类型 + * @param currentPage 分页 + * @param productType 商品类型 + * @param reqType 请求类型 + */ + getList(type, currentPage) { + let that = this + + this.setData({ + requesting: true + }) + let data = { + pageIndex: currentPage, + pageSize: 20 + } + that.setData({isLoad: type == "refresh"}) + + if (this.data.type == '搜罗好货') { + global(data).then((res) => { + that.forMaterData(that, res, currentPage, type) + }).catch((err) => { + that.errFormat(that, err) + }) + } else if (this.data.type == '高佣商品') { + highCommission(data).then((res) => { + that.forMaterData(that, res, currentPage, type) + }).catch((err) => { + that.errFormat(that, err) + }) + } else if (this.data.type == constants.JD_DELIVERY) { + deliverById(data).then((res) => { + that.forMaterData(that, res, currentPage, type) + }).catch((err) => { + that.errFormat(that, err) + }) + } else if (this.data.type == constants.BRAND_ZONE) { + brand(data).then((res) => { + that.forMaterData(that, res, currentPage, type) + }).catch((err) => { + that.errFormat(that, err) + }) + } else if (this.data.type == constants.COUPON) { + couponList(data).then((res) => { + that.forMaterData(that, res, currentPage, type) + }).catch((err) => { + that.errFormat(that, err) + }) + } else if(this.data.type == constants.HAIR_RING_PUSH){ + ringPush(data).then((res) => { + that.forMaterData(that, res, currentPage, type) + }).catch((err) => { + that.errFormat(that, err) + }) + }else if (this.data.tabs.length > 0) { + let data1 = { + cid1: this.data.cid1, + pageIndex: currentPage, + pageSize: 20 + } + queryProductType(data1).then((res) => { + that.forMaterData(that, res, currentPage, type) + }).catch((err) => { + that.errFormat(that, err) + }) + } + }, + + forMaterData(that, res, currentPage, type) { + let lastData = that.data.productList + let reqData = res.data.data.records + if (type == 'refresh') { + lastData = reqData + } else { + reqData.forEach(item => { + lastData.push(item) + }) + } + + lastData.forEach((item) => { + + let couponPrice = item.priceInfo.lowestCouponPrice + if (item.coupons.length > 0 && couponPrice != 'undefined' && couponPrice != 'NaN') { + try { + item.priceInfo.lowestCouponPrice = item.priceInfo.lowestCouponPrice.toFixed(2) + } catch (e) { + // console.log(">>>", e) + } + } + + if (item.comments) + item.comments = util.formatNUmber(item.comments) + try { + item.priceInfo.price = item.priceInfo.price.toFixed(2) + } catch (e) { + } + + }) + + that.setData({ + page: currentPage + 1, + productList: lastData, + requesting: false + }) + }, + errFormat(that, err) { + that.setData({ + requesting: false + }) + wx.showModal({ + title: '提示', + showCancel: false, + content: err.data.message ? err.data.message : '获取信息失败', + success(res) { + } + }) + }, + itemCLick(event) { + let item = event.currentTarget.dataset.item + util.setStorage(constants.PRPDUCT_ITEM, item) + wx.navigateTo({ + url: '/page_package/details/index' + }) + }, + tabSelect(e) { + this.setData({ + TabCur: e.currentTarget.dataset.id, + scrollLeft: (e.currentTarget.dataset.id - 1) * 60, + scrollTop:0 + }) + let item = e.currentTarget.dataset.item + this.setData({cid1:item.type}) + this.getList('refresh', pageStart) + }, +}) \ No newline at end of file diff --git a/page_package/menu-product/menu-product.json b/page_package/menu-product/menu-product.json new file mode 100644 index 0000000..ec9c0de --- /dev/null +++ b/page_package/menu-product/menu-product.json @@ -0,0 +1,8 @@ +{ + "navigationBarBackgroundColor": "#ffffff", + "navigationBarTextStyle": "black", + "usingComponents": { + "bc-scroll": "/components/refresh/refresh", + "product-item": "/components/product-item/product-item" + } +} \ No newline at end of file diff --git a/page_package/menu-product/menu-product.wxml b/page_package/menu-product/menu-product.wxml new file mode 100644 index 0000000..b43469e --- /dev/null +++ b/page_package/menu-product/menu-product.wxml @@ -0,0 +1,47 @@ + + + + + + + + + + + + {{item.name}} + + + + + + + + + + + + + + + + + + + + diff --git a/page_package/menu-product/menu-product.wxss b/page_package/menu-product/menu-product.wxss new file mode 100644 index 0000000..c551584 --- /dev/null +++ b/page_package/menu-product/menu-product.wxss @@ -0,0 +1,6 @@ +/* page_package/menu-product/menu-product.wxss */ + +.bg-gradual-white1{ + background-color: white; + color: #333; +} \ No newline at end of file diff --git a/page_package/money/bill/bill.js b/page_package/money/bill/bill.js new file mode 100644 index 0000000..56111fa --- /dev/null +++ b/page_package/money/bill/bill.js @@ -0,0 +1,116 @@ +const app = getApp() +const {getHistoryRecords} = require("../../../utils/network/services/user.js") +const constants = require("../../../utils/constants") +const util = require("../../../utils/util") +Page({ + + /** + * 页面的初始数据 + */ + data: { + windowHeight: app.globalData.windowHeight, + windowWidth: app.globalData.windowWidth, + CustomBar: app.globalData.CustomBar, + + requesting: false, + end: false, + emptyShow: false, + hasTop: false, + enableBackToTop: false, + refreshSize: 90, + bottomSize: 0, + color: "#3F82FD", + empty: false, + + queryData: { + pageIndex: 1, + pageSize: 20 + }, + settlementList: [] + }, + + /** + * 生命周期函数--监听页面加载 + */ + onLoad: function (options) { + this.getData('refresh') + }, + + /** + * 生命周期函数--监听页面初次渲染完成 + */ + onReady: function () { + + }, + + /** + * 生命周期函数--监听页面显示 + */ + onShow: function () { + + }, + + /** + * 生命周期函数--监听页面隐藏 + */ + onHide: function () { + + }, + + /** + * 生命周期函数--监听页面卸载 + */ + onUnload: function () { + + }, + + /** + * 页面相关事件处理函数--监听用户下拉动作 + */ + onPullDownRefresh: function () { + + }, + + /** + * 页面上拉触底事件的处理函数 + */ + onReachBottom: function () { + + }, + + /** + * 用户点击右上角分享 + */ + onShareAppMessage: function () { + + }, + + getData(type) { + this.setData({ + requesting: true + }) + if (type == 'refresh') + this.data.queryData.pageIndex = 1 + else + this.data.queryData.pageIndex = this.data.queryData.pageIndex + 1 + + this.setData({queryData: this.data.queryData}) + getHistoryRecords(this.data.queryData).then((res) => { + this.setData({ + settlementList: res.data.data.records, + requesting: false + }) + }).catch(err => { + this.setData({ + requesting: false + }) + }) + }, + + refresh() { + this.getData('refresh') + }, + more() { + this.getData('more') + } +}) \ No newline at end of file diff --git a/page_package/money/bill/bill.json b/page_package/money/bill/bill.json new file mode 100644 index 0000000..925f723 --- /dev/null +++ b/page_package/money/bill/bill.json @@ -0,0 +1,8 @@ +{ + "navigationBarBackgroundColor": "#ffffff", + "navigationBarTextStyle": "black", + "navigationBarTitleText": "结算账单", + "usingComponents": { + "bc-scroll": "/components/refresh/refresh" + } +} \ No newline at end of file diff --git a/page_package/money/bill/bill.wxml b/page_package/money/bill/bill.wxml new file mode 100644 index 0000000..2dd1961 --- /dev/null +++ b/page_package/money/bill/bill.wxml @@ -0,0 +1,16 @@ + + + + + + + + + + + 暂无结算账单 + + + + diff --git a/page_package/money/bill/bill.wxss b/page_package/money/bill/bill.wxss new file mode 100644 index 0000000..27523b3 --- /dev/null +++ b/page_package/money/bill/bill.wxss @@ -0,0 +1,4 @@ +/* page_package/money/bill/bill.wxss */ +page{ + background-color: #f2f2f2; +} \ No newline at end of file diff --git a/page_package/money/cash/cash.js b/page_package/money/cash/cash.js new file mode 100644 index 0000000..3e20480 --- /dev/null +++ b/page_package/money/cash/cash.js @@ -0,0 +1,147 @@ +// page_package/money/cash/cash.js +const app = getApp() +const {getWalleta,userInfo} = require("../../../utils/network/services/user.js") +const constants = require("../../../utils/constants") +const util = require("../../../utils/util") +let that = null +Page({ + + /** + * 页面的初始数据 + */ + data: { + requesting: false, + end: false, + emptyShow: false, + hasTop: false, + enableBackToTop: false, + refreshSize: 90, + bottomSize: 0, + color: "#3F82FD", + empty: false, + invitationDialog:false, + + rule: "①本月预估推广收益:【下单时间】在本月内的推广商品订单佣金总和。\n" + + "②本月可提现收益额:【完成时间】在上月内的推广商品订单佣金总和。\n" + + "注:退货订单会扣除佣金。换货订单会重新计算可提现时间。", + process: "操作流程\n" + + "一、小程序-会员-收益提现。\n" + + "二、填写个人身份信息,确保填写的实名信息和您的微信实名认证信息一致,否则无法正常到账。\n" + + "三、收益只可在每月27~30全天申请提现,错过需要等下个月申请,单笔提现金额需大于1元。\n" + + "四、未提现的收益不会清0,会累积到账户余额,可下次合并提现。\n" + + "五、提现到账后,您会收到微信服务通知提醒,注意查收", + + cashData: null, + userInfo:null, + }, + + /** + * 生命周期函数--监听页面加载 + */ + onLoad: function (options) { + that = this + let userInfo = util.getStorage(constants.VIP_INFO_AUTO) + that.setData({userInfo:userInfo}) + that.refresh() + }, + + /** + * 生命周期函数--监听页面初次渲染完成 + */ + onReady: function () { + + }, + + /** + * 生命周期函数--监听页面显示 + */ + onShow: function () { + userInfo().then(res => {that.setData({userInfo:res.data.data})}) + }, + + /** + * 生命周期函数--监听页面隐藏 + */ + onHide: function () { + + }, + + /** + * 生命周期函数--监听页面卸载 + */ + onUnload: function () { + + }, + + /** + * 页面相关事件处理函数--监听用户下拉动作 + */ + onPullDownRefresh: function () { + + }, + + /** + * 页面上拉触底事件的处理函数 + */ + onReachBottom: function () { + + }, + + /** + * 用户点击右上角分享 + */ + onShareAppMessage: function () { + + }, + // 刷新数据 + refresh() { + that.setData({ + requesting: true + }) + getWalleta().then((res) => { + that.setData({ + cashData: res.data.data, + requesting: false + }) + }).catch(err => { + that.setData({ + requesting: false + }) + }) + }, + + itemClick(event) { + switch (Number(event.currentTarget.dataset.index)) { + case 0: + if (that.data.userInfo.wechatId) { + wx.navigateTo({ + url: '/page_package/money/quota/quota?balance=' + that.data.cashData.balance + }) + } else this.setData({invitationDialog:true}) + break + case 1: + wx.navigateTo({ + url: '/page_package/money/history/history' + }) + break + case 2: + wx.navigateTo({ + url: '/page_package/money/bill/bill' + }) + break + case 3: + wx.navigateTo({ + url: '/page_package/money/explain/explain' + }) + break + } + }, + hideModal(event){ + this.setData({invitationDialog:false}) + if(event.currentTarget.dataset.iscode == 0) + wx.navigateTo({url: '/page_package/contacts/contacts'}) + }, + more() { + + } +}) \ No newline at end of file diff --git a/page_package/money/cash/cash.json b/page_package/money/cash/cash.json new file mode 100644 index 0000000..4c2a6d2 --- /dev/null +++ b/page_package/money/cash/cash.json @@ -0,0 +1,8 @@ +{ + "navigationBarBackgroundColor": "#ffffff", + "navigationBarTextStyle": "black", + "navigationBarTitleText": "提现", + "usingComponents": { + "bc-scroll": "/components/refresh/refresh" + } +} \ No newline at end of file diff --git a/page_package/money/cash/cash.wxml b/page_package/money/cash/cash.wxml new file mode 100644 index 0000000..9023f2e --- /dev/null +++ b/page_package/money/cash/cash.wxml @@ -0,0 +1,69 @@ + + + + + + + + + + + + 可提现金额:¥{{cashData.balance}} + {{cashData.withdrawLimit}} + + 提现 + + + 提现历史 + 详情 + + + 结算账单 + 详情 + + + + + 我的本月可提现收益与上月预估收益不一致? + 根据京东推广规则: + {{rule}} + 更多提现说明> + + + + {{process}} + + + + + + + + + 提示 + + + + + + 提现金额会自动转到微信零钱 + 需要提供微信号才能发起提现 + + + 取消 + 去完善 + + + + diff --git a/page_package/money/cash/cash.wxss b/page_package/money/cash/cash.wxss new file mode 100644 index 0000000..601a808 --- /dev/null +++ b/page_package/money/cash/cash.wxss @@ -0,0 +1,20 @@ +/* page_package/money/cash/cash.wxss */ +page{ + background-color: #f2f2f2 +} + +.rule-card{ + width: 94%; + margin-left: 3%; + border-radius: 8rpx; + background-color: white; +} + +.process-card{ + width: 92%; + margin-left: 4%; +} + +.rule-text{ + line-height:48rpx +} \ No newline at end of file diff --git a/page_package/money/explain/explain.js b/page_package/money/explain/explain.js new file mode 100644 index 0000000..2440a03 --- /dev/null +++ b/page_package/money/explain/explain.js @@ -0,0 +1,76 @@ +// page_package/money/explain/explain.js +Page({ + + /** + * 页面的初始数据 + */ + data: { + prompt:"1.每月27日(节假日顺延)系统会自动结算上一个自然月产生的可结算佣金至“可提现金额”中,您可随时点击“提现”。\n\n" + + "注:仅每月27号~30号3天可以提现,错过需要等下个月再提。\n\n" + + "2.为保证您能正常结算和提现,请您一点要正确填写资料申请提现,申请后耐心等待,一般1~3个工作日给你完成打款", + noun:"预估佣金:已完成订单在当月产生的佣金变化之和,为当月新增完成订单佣金减去已完成订单的退货等逆向佣金。\n\n" + + "订单状态:待付款、已付款、已完成、已结算、无效。\n\n" + + "待付款:指买家还未付款的订单。\n\n" + + "已付款:指买家已经付款的订单。\n\n" + + "已完成:指买家已确认收货的订单,自营商品订单在快递投递完成后自动确认收货," + + "第三方卖家的订单需要买家主动点击确认收货,若买家不点击确认收货,该订单将在20后自动变为已完成。\n\n" + + "已结算:订单完成26后将变为已结算的订单,且订单的计佣佣金将变为可提现金额。\n\n" + + "无效:无效订单包括已取消订单、违规订单等,无效订单的计佣金额和计佣佣金均0。" + }, + + /** + * 生命周期函数--监听页面加载 + */ + onLoad: function (options) { + + }, + + /** + * 生命周期函数--监听页面初次渲染完成 + */ + onReady: function () { + + }, + + /** + * 生命周期函数--监听页面显示 + */ + onShow: function () { + + }, + + /** + * 生命周期函数--监听页面隐藏 + */ + onHide: function () { + + }, + + /** + * 生命周期函数--监听页面卸载 + */ + onUnload: function () { + + }, + + /** + * 页面相关事件处理函数--监听用户下拉动作 + */ + onPullDownRefresh: function () { + + }, + + /** + * 页面上拉触底事件的处理函数 + */ + onReachBottom: function () { + + }, + + /** + * 用户点击右上角分享 + */ + onShareAppMessage: function () { + + } +}) \ No newline at end of file diff --git a/page_package/money/explain/explain.json b/page_package/money/explain/explain.json new file mode 100644 index 0000000..ea841f8 --- /dev/null +++ b/page_package/money/explain/explain.json @@ -0,0 +1,6 @@ +{ + "navigationBarBackgroundColor": "#ffffff", + "navigationBarTextStyle": "black", + "navigationBarTitleText": "提现说明", + "usingComponents": {} +} \ No newline at end of file diff --git a/page_package/money/explain/explain.wxml b/page_package/money/explain/explain.wxml new file mode 100644 index 0000000..3ae3684 --- /dev/null +++ b/page_package/money/explain/explain.wxml @@ -0,0 +1,19 @@ + + + + + + + + + 一、结算提示 + {{prompt}} + + + + 二、名词解释 + {{noun}} + + + + diff --git a/page_package/money/explain/explain.wxss b/page_package/money/explain/explain.wxss new file mode 100644 index 0000000..af22801 --- /dev/null +++ b/page_package/money/explain/explain.wxss @@ -0,0 +1,4 @@ +/* page_package/money/explain/explain.wxss */ +.line-height40{ + line-height: 40rpx; +} \ No newline at end of file diff --git a/page_package/money/history/history.js b/page_package/money/history/history.js new file mode 100644 index 0000000..e09368f --- /dev/null +++ b/page_package/money/history/history.js @@ -0,0 +1,180 @@ +// page_package/money/history/history.js +const app = getApp() +const {getHistoryRecords} = require("../../../utils/network/services/user.js") +const constants = require("../../../utils/constants") +const util = require("../../../utils/util") + +Page({ + + /** + * 页面的初始数据 + */ + data: { + windowHeight: app.globalData.windowHeight, + windowWidth: app.globalData.windowWidth, + CustomBar: app.globalData.CustomBar, + + requesting: false, + end: false, + emptyShow: false, + hasTop: false, + enableBackToTop: false, + refreshSize: 90, + bottomSize: 0, + color: "#3F82FD", + empty: false, + + queryData: { + pageIndex: 1, + pageSize: 20 + }, + historyList: [ + { + "id":1241218946633691138, + "wechatId":"wuxing07240011", + "amount":9.99, + "payeeName":"伍星", + "status":0, + "statusDesc":"已提交", + "submitTime":[ + 2020, + 3, + 21, + 12, + 23, + 52 + ], + "operations":[ + { + "operatorName":"伍星", + "operateTime":[ + 2020, + 3, + 21, + 12, + 23, + 52 + ], + "remark":"伍星 发起了提现申请" + } + ] + } + ] + }, + + /** + * 生命周期函数--监听页面加载 + */ + onLoad: function (options) { + this.getData('refresh') + }, + + /** + * 生命周期函数--监听页面初次渲染完成 + */ + onReady: function () { + + }, + + /** + * 生命周期函数--监听页面显示 + */ + onShow: function () { + + }, + + /** + * 生命周期函数--监听页面隐藏 + */ + onHide: function () { + + }, + + /** + * 生命周期函数--监听页面卸载 + */ + onUnload: function () { + + }, + + /** + * 页面相关事件处理函数--监听用户下拉动作 + */ + onPullDownRefresh: function () { + + }, + + /** + * 页面上拉触底事件的处理函数 + */ + onReachBottom: function () { + + }, + + /** + * 用户点击右上角分享 + */ + onShareAppMessage: function () { + + }, + getData(type) { + this.setData({ + requesting: true + }) + if (type == 'refresh') + this.data.queryData.pageIndex = 1 + else + this.data.queryData.pageIndex = this.data.queryData.pageIndex + 1 + + this.setData({queryData: this.data.queryData}) + getHistoryRecords(this.data.queryData).then((res) => { + let list = res.data.data.records + list.forEach(item => { + item.isOpen = false + item.submitTime = util.formatTime(new Date(item.submitTime)) + item.operations.forEach(im => { im.operateTime = util.formatTime(new Date(im.operateTime))}) + }) + + if (type != 'refresh') list.forEach(im => {this.data.historyList.push(im)}) + + this.setData({ + historyList: type == 'refresh' ? list:this.data.historyList, + requesting: false + }) + }).catch(err => { + this.setData({ + requesting: false + }) + }) + }, + openDetails(event){ + let item = event.currentTarget.dataset.item + let index = event.currentTarget.dataset.index + this.data.historyList.forEach(im => { + im.isOpen = false + if(item.id == im.id) im.isOpen = !item.isOpen + }) + this.setData({historyList:this.data.historyList}) + }, + refresh() { + this.getData('refresh') + }, + more() { + this.getData('more') + }, + copy(event){ + let item = event.currentTarget.dataset.item + wx.setClipboardData({ + data: item.id.toString(), + success: function (res) { + wx.getClipboardData({ + success: function (res) { + wx.showToast({ + title: '复制成功' + }) + } + }) + } + }) + } +}) \ No newline at end of file diff --git a/page_package/money/history/history.json b/page_package/money/history/history.json new file mode 100644 index 0000000..2400f4f --- /dev/null +++ b/page_package/money/history/history.json @@ -0,0 +1,8 @@ +{ + "navigationBarBackgroundColor": "#ffffff", + "navigationBarTextStyle": "black", + "navigationBarTitleText": "提现历史", + "usingComponents": { + "bc-scroll": "/components/refresh/refresh" + } +} \ No newline at end of file diff --git a/page_package/money/history/history.wxml b/page_package/money/history/history.wxml new file mode 100644 index 0000000..0690924 --- /dev/null +++ b/page_package/money/history/history.wxml @@ -0,0 +1,59 @@ + + + + + + + + + + + 暂无提现历史 + + + + + 单号:{{item.id}} + 复制 + + + 提现者:{{item.payeeName}} + 提现金额: + {{item.amount}} + + 提现状态:{{item.statusDesc}} + 提现时间:{{item.submitTime}} + + 详情 + + + + + + + {{im.remark}} + {{im.operateTime}} + + + + + + + + + + + + diff --git a/page_package/money/history/history.wxss b/page_package/money/history/history.wxss new file mode 100644 index 0000000..2964667 --- /dev/null +++ b/page_package/money/history/history.wxss @@ -0,0 +1,54 @@ +/* page_package/money/history/history.wxss */ +page{ + background-color: #f2f2f2; +} + +.l_box{ + border-left: 1px solid #EEF0F2; + padding: 20rpx 0 20rpx 50rpx; + margin-left: 30rpx; + position: relative; +} +.l_box::after{ + content: ''; + display: inline-block; + position: absolute; + left: -15rpx; + top: 60rpx; + width: 20rpx; + height: 20rpx; + border-radius: 20rpx; + background: #BDBDBD; + border: 2px solid #EEE; +} +.l_content{ + position: relative; + background: #eef0f2; + padding: 10rpx 20rpx; + border-radius: 10rpx; + font-size: 26rpx; +} +.l_content::after{ + content: ''; + display: inline-block; + position: absolute; + left: -20rpx; + top: 36rpx; + border-left: 20rpx solid #fff; + border-bottom: 20rpx solid #eef0f2; +} +.l_first{ + border-left: 1px solid #f43f3b; +} +.l_first::after{ + background: #f43f3b; + border: 2px solid #EEE; +} +.l_first_content{ + background: #ffffff; + color: #f43f3b; + border: 1px solid #f43f3b; +} +.l_first_content::after{ + border-bottom-color: #f43f3b; +} \ No newline at end of file diff --git a/page_package/money/quota/quota.js b/page_package/money/quota/quota.js new file mode 100644 index 0000000..4feea64 --- /dev/null +++ b/page_package/money/quota/quota.js @@ -0,0 +1,218 @@ +// page_package/money/quota/quota.js +const app = getApp() +const util = require("../../../utils/util") +const {applyWithdraw, sendCode} = require("../../../utils/network/services/user.js") +const constants = require("../../../utils/constants") +let interval = null +let that = null +Page({ + + /** + * 页面的初始数据 + */ + data: { + userInfo: app.globalData.userInfo, + money: 0, + cashMoney: '', + inputRemind: "", + sumInfo: { + amount: 0, + code: "", + payeeCardId: "", + payeeName: "", + wechatId: "" + }, + isDisabled: false, + currentTime: 61, + promptMsg: "验证码", + phone: '' + }, + + /** + * 生命周期函数--监听页面加载 + */ + onLoad: function (options) { + that = this + let userInfo = util.getStorage(constants.VIP_INFO_AUTO) + if (userInfo.phone) + this.setData({ + money: Number(options.balance), + userInfo: userInfo, + phone: util.phoneFor(userInfo.phone) + }) + }, + + /** + * 生命周期函数--监听页面初次渲染完成 + */ + onReady: function () { + + }, + + /** + * 生命周期函数--监听页面显示 + */ + onShow: function () { + + }, + + /** + * 生命周期函数--监听页面隐藏 + */ + onHide: function () { + + }, + + /** + * 生命周期函数--监听页面卸载 + */ + onUnload: function () { + + }, + + /** + * 页面相关事件处理函数--监听用户下拉动作 + */ + onPullDownRefresh: function () { + + }, + + /** + * 页面上拉触底事件的处理函数 + */ + onReachBottom: function () { + + }, + + /** + * 用户点击右上角分享 + */ + onShareAppMessage: function () { + + }, + + onInput(event) { + let inputValue = event.detail.value + switch (Number(event.currentTarget.dataset.index)) { + case 0: + let remind = '' + if (Number(inputValue) <= 0) remind = '最少提现金额为1元' + else if (Number(inputValue) > this.data.money) remind = '输入的金额超过可转出的进度' + this.data.sumInfo.amount = inputValue + this.setData({ + cashMoney: inputValue, + inputRemind: remind, + sumInfo: this.data.sumInfo + }) + break + } + }, + onBlur(event) { + let inputValue = event.detail.value + switch (Number(event.currentTarget.dataset.index)) { + case 0: + this.setData({cashMoney: inputValue}) + break + } + }, + onInput1(event) { + let inputValue = event.detail.value + let subInfo = this.data.sumInfo + switch (Number(event.currentTarget.dataset.type)) { + case 1: + subInfo.payeeName = inputValue + break + case 2: + subInfo.payeeCardId = inputValue + break + case 3: + subInfo.code = inputValue + break + } + this.setData({sumInfo: subInfo}) + }, + onQuota() { + this.setData({cashMoney: this.data.money}) + }, + sendCode() { + sendCode({phone: this.data.userInfo.phone}) + .then(res => { + that.setData({isDisabled: true}) + util.onToast('发送成功', 'success') + that.setInt() + }).catch(err => { + this.setData({isDisabled: false}) + wx.showModal({ + title: '提示', + showCancel: false, + content: err.data?err.data.message:'发送失败', + success(res) { + + } + }) + }) + }, + onSubmit() { + let subInfo = this.data.sumInfo + subInfo.amount = this.data.cashMoney ? this.data.cashMoney : 0 + if (Number(subInfo.amount) < 1) { + util.onToast('提现金额必须大于1元') + return + } else if (!subInfo.payeeName) { + util.onToast('请输入姓名') + return; + } else if (subInfo.payeeCardId.length < 14) { + util.onToast('请输入合法证件号码') + return; + } else if (!subInfo.code) { + util.onToast('请输入验证码') + return; + } + subInfo.wechatId = this.data.userInfo.wechatId + + this.setData({sumInfo: subInfo, invitationDialog: true}) + }, + hideModal(event) { + this.setData({invitationDialog: false}) + if (Number(event.currentTarget.dataset.iscode) == 0) { + applyWithdraw(this.data.sumInfo) + .then((res) => { + wx.showModal({ + title: '提示', + showCancel: false, + content: "提现成功,1-3个工作日到账", + success(res) { + wx.navigateBack({//返回 + delta: 1 + }) + } + }) + }).catch(err => { + console.log(err) + wx.showModal({ + title: '失败提示', + showCancel: false, + content: err.data?err.data.message:'提现失败', + success(res) { + + } + }) + }) + } + }, + setInt() { + let currentTime = this.data.currentTime + interval = setInterval(function () { + currentTime--; + that.setData({promptMsg: currentTime + '秒',isDisabled: true}) + if (currentTime <= 0) { + clearInterval(interval) + that.setData({ + promptMsg: '重新发送', + currentTime: 61, + isDisabled: false + }) + } + }, 1000) + } +}) \ No newline at end of file diff --git a/page_package/money/quota/quota.json b/page_package/money/quota/quota.json new file mode 100644 index 0000000..3411921 --- /dev/null +++ b/page_package/money/quota/quota.json @@ -0,0 +1,6 @@ +{ + "navigationBarBackgroundColor": "#ffffff", + "navigationBarTextStyle": "black", + "navigationBarTitleText": "提现到微信", + "usingComponents": {} +} \ No newline at end of file diff --git a/page_package/money/quota/quota.wxml b/page_package/money/quota/quota.wxml new file mode 100644 index 0000000..7ffca94 --- /dev/null +++ b/page_package/money/quota/quota.wxml @@ -0,0 +1,93 @@ + + + + + + + + + 可提现金额:¥{{money}} + 每次最少提现1元 + + + + + + + 全部提现 + + + + {{inputRemind}} + + 请确保已注册尚橙账号的微信号(昵称:{{userInfo.nickName}})已绑定过银行卡 + + + +
+ + 完善提现信息 + + + + + + + + + + {{phone}}(不可修改) + + + + + +
+ +注:申请提现后1~3个工作日到账 + + + + + + + 提示 + + + + + + + 提现金额:¥{{sumInfo.amount}} + 姓名:{{sumInfo.payeeName}} + 身份证:{{sumInfo.payeeCardId}} + 微信号:{{sumInfo.wechatId}} + + + + 取消 + 确认提现 + + + + \ No newline at end of file diff --git a/page_package/money/quota/quota.wxss b/page_package/money/quota/quota.wxss new file mode 100644 index 0000000..21c6833 --- /dev/null +++ b/page_package/money/quota/quota.wxss @@ -0,0 +1,35 @@ +/* page_package/money/quota/quota.wxss */ +page{ + background-color: #f2f2f2; +} + +.cash-item{ + height: 118rpx; + background-color: white; + align-items: center; +} + +.cash-item-icon{ + width: 88rpx; + height: 88rpx; + margin: 10rpx; + border-right: 1rpx solid #f2f2f2; +} +.cash-item-money{ + height: 64rpx; +} + +.cash-btn{ + width: 80%; + margin-left: 10%; + height: 84rpx; +} + +.send-btn-def{ + background-color: #3595f5; + color: white; +} +.send-btn{ + background-color: #666666; + color: #ededed; +} \ No newline at end of file diff --git a/page_package/new-welfare/new-welfare.js b/page_package/new-welfare/new-welfare.js new file mode 100644 index 0000000..ad8f513 --- /dev/null +++ b/page_package/new-welfare/new-welfare.js @@ -0,0 +1,70 @@ +// page_package/new-welfare/new-welfare.js +const app = getApp() +Page({ + + /** + * 页面的初始数据 + */ + data: { + windowHeight: app.globalData.windowHeight, + CustomBar: app.globalData.CustomBar, + activityContent:"1、活动时间:2020年3月10日-2020年4月30日(共计51天)\n 2、活动期间:解冻新用户下单享受0.9元够好物活动\n 3、" + + "超级会员:推广成功一单补贴8元,邀请人补贴1.6元" + }, + + /** + * 生命周期函数--监听页面加载 + */ + onLoad: function (options) { + + }, + + /** + * 生命周期函数--监听页面初次渲染完成 + */ + onReady: function () { + + }, + + /** + * 生命周期函数--监听页面显示 + */ + onShow: function () { + + }, + + /** + * 生命周期函数--监听页面隐藏 + */ + onHide: function () { + + }, + + /** + * 生命周期函数--监听页面卸载 + */ + onUnload: function () { + + }, + + /** + * 页面相关事件处理函数--监听用户下拉动作 + */ + onPullDownRefresh: function () { + + }, + + /** + * 页面上拉触底事件的处理函数 + */ + onReachBottom: function () { + + }, + + /** + * 用户点击右上角分享 + */ + onShareAppMessage: function () { + + } +}) \ No newline at end of file diff --git a/page_package/new-welfare/new-welfare.json b/page_package/new-welfare/new-welfare.json new file mode 100644 index 0000000..a0b8429 --- /dev/null +++ b/page_package/new-welfare/new-welfare.json @@ -0,0 +1,6 @@ +{ + "navigationBarBackgroundColor": "#ffffff", + "navigationBarTextStyle": "black", + "navigationBarTitleText": "新人福利", + "usingComponents": {} +} \ No newline at end of file diff --git a/page_package/new-welfare/new-welfare.wxml b/page_package/new-welfare/new-welfare.wxml new file mode 100644 index 0000000..3a853f7 --- /dev/null +++ b/page_package/new-welfare/new-welfare.wxml @@ -0,0 +1,31 @@ + + + + + + + + + + 活动介绍 + {{activityContent}} + + + + 活动介绍 + {{activityContent}} + + + + 活动介绍 + {{activityContent}} + + + + + + + 微信推广 + 面对面推广 + 朋友圈推广 + \ No newline at end of file diff --git a/page_package/new-welfare/new-welfare.wxss b/page_package/new-welfare/new-welfare.wxss new file mode 100644 index 0000000..92d9cf4 --- /dev/null +++ b/page_package/new-welfare/new-welfare.wxss @@ -0,0 +1,14 @@ +/* page_package/new-welfare/new-welfare.wxss */ +page{ + background-color: #f2f2f2; +} + +.content-body{ + width: 92%; + margin-left: 4%; + background-color: white; + padding: 12rpx; + border-radius: 5rpx; + margin-top: 30rpx; + line-height: 56rpx; +} \ No newline at end of file diff --git a/page_package/news-details/news-details.js b/page_package/news-details/news-details.js new file mode 100644 index 0000000..3ac2d05 --- /dev/null +++ b/page_package/news-details/news-details.js @@ -0,0 +1,96 @@ +// page_package/news-details/news-details.js +const app = getApp() +const {messagesDetails} = require('../../utils/network/services/service.js') +const constants = require('../../utils/constants') +const util = require('../../utils/util') +let that = null + +Page({ + + /** + * 页面的初始数据 + */ + data: { + title:'', + time:'', + msgContent:null + }, + + /** + * 生命周期函数--监听页面加载 + */ + onLoad: function (options) { + this.setData({title:options.title}) + messagesDetails(options.id) + .then(res => { + console.log(">>>>",res.data) + this.setData({msgContent:res.data.data, + time:util.formatData(new Date(res.data.data.createTime))}) + }).catch( err => { + + }) + }, + + /** + * 生命周期函数--监听页面初次渲染完成 + */ + onReady: function () { + + }, + + /** + * 生命周期函数--监听页面显示 + */ + onShow: function () { + + }, + + /** + * 生命周期函数--监听页面隐藏 + */ + onHide: function () { + + }, + + /** + * 生命周期函数--监听页面卸载 + */ + onUnload: function () { + + }, + + /** + * 页面相关事件处理函数--监听用户下拉动作 + */ + onPullDownRefresh: function () { + + }, + + /** + * 页面上拉触底事件的处理函数 + */ + onReachBottom: function () { + + }, + + /** + * 用户点击右上角分享 + */ + onShareAppMessage: function () { + + }, + onCopy(){ + wx.setClipboardData({ + data: this.data.msgContent.content, + success: function (res) { + wx.getClipboardData({ + success: function (res) { + wx.showToast({ + title: '复制成功' + }) + } + }) + } + }) + } +}) \ No newline at end of file diff --git a/page_package/news-details/news-details.json b/page_package/news-details/news-details.json new file mode 100644 index 0000000..7ae2781 --- /dev/null +++ b/page_package/news-details/news-details.json @@ -0,0 +1,6 @@ +{ + "navigationBarBackgroundColor": "#ffffff", + "navigationBarTextStyle": "black", + "navigationBarTitleText": "消息详情", + "usingComponents": {} +} \ No newline at end of file diff --git a/page_package/news-details/news-details.wxml b/page_package/news-details/news-details.wxml new file mode 100644 index 0000000..9db68e0 --- /dev/null +++ b/page_package/news-details/news-details.wxml @@ -0,0 +1,17 @@ + + + + + {{title}} + {{time}} + + + {{msgContent.content}} + + + + 复制文字 + + diff --git a/page_package/news-details/news-details.wxss b/page_package/news-details/news-details.wxss new file mode 100644 index 0000000..2a71119 --- /dev/null +++ b/page_package/news-details/news-details.wxss @@ -0,0 +1,5 @@ +/* page_package/news-details/news-details.wxss */ + +page{ + background-color: #f2f2f2; +} \ No newline at end of file diff --git a/page_package/order/order.js b/page_package/order/order.js new file mode 100644 index 0000000..82d721d --- /dev/null +++ b/page_package/order/order.js @@ -0,0 +1,218 @@ +// page_package/order/order.js +const { orderList } = require('../../utils/network/services/user.js') +const constants = require('../../utils/constants') +const util = require('../../utils/util') +const app = getApp() + +Page({ + + /** + * 页面的初始数据 + */ + data: { + windowHeight: app.globalData.windowHeight, + windowWidth: app.globalData.windowWidth, + CustomBar: app.globalData.CustomBar, + StatusBar: app.globalData.StatusBar, + tabs: ['全部', '待付款', '已付款', '已完成', '无效'], + titles: ['我购买的','我推广的'], + TabCur: 0, + TabCur1: 0, + scrollLeft: 0, + scrollLeft1: 0, + searchHeight: 90, + typeHeight: 0, + selectData: { + startTime: '', + endTime: '' + }, + isLoad: false, + + queryData: { + begin: '', + end: '', + pageIndex: 1, + pageSize: 10, + type:1, + status:1 + }, + isShowDialog:false, + orderList:[], + identify:1, + }, + + /** + * 生命周期函数--监听页面加载 + */ + onLoad: function (options) { + let TimeNow = new Date(); + let startDay = new Date(TimeNow.getFullYear(), TimeNow.getMonth(), 1); + this.data.selectData.startTime = util.formatData(startDay) + this.data.selectData.endTime = util.formatData(TimeNow) + this.setData({ + identify:util.identityApp(Number(options.identify)), + selectData:this.data.selectData + }) + const that = this + const query = wx.createSelectorQuery() + query.select('#search').boundingClientRect() + query.exec(function (res) {that.setData({ searchHeight: res[0].height })}) + if(this.data.identify){ + const query1 = wx.createSelectorQuery() + query1.select('#type').boundingClientRect() + query1.exec(function (res) {that.setData({ typeHeight: res[0].height })}) + } + + this.getList('refresh') + }, + + /** + * 生命周期函数--监听页面初次渲染完成 + */ + onReady: function () { + + }, + + onLoads(){ + this.getList('refresh') + }, + + /** + * 生命周期函数--监听页面显示 + */ + onShow: function () { + + }, + + /** + * 生命周期函数--监听页面隐藏 + */ + onHide: function () { + + }, + + /** + * 生命周期函数--监听页面卸载 + */ + onUnload: function () { + + }, + + /** + * 页面相关事件处理函数--监听用户下拉动作 + */ + onPullDownRefresh: function () { + + }, + + /** + * 页面上拉触底事件的处理函数 + */ + onReachBottom: function () { + + }, + + /** + * 用户点击右上角分享 + */ + onShareAppMessage: function () { + + }, + tabSelect (event) { + console.log(Number(event.currentTarget.dataset.id),">>>>",Number(event.currentTarget.dataset.id) + 1) + this.data.queryData.status = Number(event.currentTarget.dataset.id) + 1 + this.setData({ + TabCur: Number(event.currentTarget.dataset.id), + scrollLeft: (event.currentTarget.dataset.id - 1) * 60, + queryData:this.data.queryData + }) + this.getList('refresh') + }, + + titleSelect (event) { + this.data.queryData.type = Number(event.currentTarget.dataset.id) + 1 + this.setData({ + TabCur1: event.currentTarget.dataset.id, + scrollLeft1: (event.currentTarget.dataset.id - 1) * 60, + TabCur:0, + queryData:this.data.queryData + }) + this.getList('refresh') + }, + DateChange (event) { + let selectTime = event.detail.value + console.log(selectTime) + switch (Number(event.currentTarget.dataset.index)) { + case 0: + if (!this.data.selectData.endTime || + (this.data.selectData.endTime && + util.compareTime(this.data.selectData.endTime, selectTime))) { + this.data.selectData.startTime = selectTime + this.setData({ selectData: this.data.selectData }) + } else { + this.data.selectData.startTime = selectTime + this.data.selectData.endTime = selectTime + this.setData({ selectData: this.data.selectData }) + } + break + case 1: + if (!this.data.selectData.startTime || + (this.data.selectData.startTime && + util.compareTime(selectTime, this.data.selectData.startTime))) { + this.data.selectData.endTime = selectTime + this.setData({ selectData: this.data.selectData }) + } else { + this.data.selectData.startTime = selectTime + this.data.selectData.endTime = selectTime + this.setData({ selectData: this.data.selectData }) + } + break + } + }, + getList (type) { + this.setData({ + isLoad: true + }) + if (type == 'refresh') + this.data.queryData.pageIndex = 1 + else + this.data.queryData.pageIndex = this.data.queryData.pageIndex + 1 + + this.data.queryData.begin = this.data.selectData.startTime + this.data.queryData.end = this.data.selectData.endTime + if (this.data.selectData.startTime && !this.data.selectData.endTime) + this.data.queryData.end = this.data.selectData.startTime + + if (!this.data.selectData.startTime && this.data.selectData.endTime) + this.data.queryData.begin = this.data.selectData.endTime + + if(this.data.selectData.startTime){ + this.data.queryData.begin = this.data.queryData.begin.split("-").join("") + this.data.queryData.end = this.data.queryData.end.split("-").join("") + } + if(this.data.TabCur != 0) + this.data.queryData.status = Number(this.data.TabCur) + 1 + this.setData({ queryData: this.data.queryData }) + + orderList(this.data.queryData) + .then(res => { + + res.data.data.records.forEach( item => { + if(util.isNumber(item.orderTime)){ + item.orderTime = util.formatTime(new Date(item.orderTime)) + } + }) + + let lastList = this.data.orderList + if(type != 'refresh') res.data.data.records.forEach( item => {lastList.push(item)}) + + + this.setData({ + orderList: type == 'refresh' ? res.data.data.records : lastList, + isLoad: false + }) + }).catch(err => { + this.setData({isLoad:false}) + }) + } +}) \ No newline at end of file diff --git a/page_package/order/order.json b/page_package/order/order.json new file mode 100644 index 0000000..d451dd3 --- /dev/null +++ b/page_package/order/order.json @@ -0,0 +1,8 @@ +{ + "navigationBarBackgroundColor": "#ffffff", + "navigationBarTextStyle": "black", + "navigationBarTitleText": "我的订单", + "usingComponents": { + "order-item": "/components/order-item/order-item" + } +} \ No newline at end of file diff --git a/page_package/order/order.wxml b/page_package/order/order.wxml new file mode 100644 index 0000000..9ad3c43 --- /dev/null +++ b/page_package/order/order.wxml @@ -0,0 +1,62 @@ + + + + + + + + + + + {{item}} + + + + + + + + + 下单时间: + + {{selectData.startTime ? selectData.startTime:'开始时间'}} + + + + + + {{selectData.endTime ? selectData.endTime:'结束时间'}} + + + + 搜索 + + + + + {{item}} + + + + + + + + + + + + + + + + + 暂无订单 + + diff --git a/page_package/order/order.wxss b/page_package/order/order.wxss new file mode 100644 index 0000000..91d3712 --- /dev/null +++ b/page_package/order/order.wxss @@ -0,0 +1,12 @@ +/* page_package/order/order.wxss */ + +.time-select{ + background-color: #f2f2f2; + padding: 4rpx; +} + +.scroll-vi{ + background-color: #f2f2f2; + min-height: 500rpx; + width: 100%; +} \ No newline at end of file diff --git a/page_package/poster/poster.js b/page_package/poster/poster.js new file mode 100644 index 0000000..076de54 --- /dev/null +++ b/page_package/poster/poster.js @@ -0,0 +1,96 @@ +const app = getApp() +const {posters} = require("../../utils/network/services/user.js") +const constants = require("../../utils/constants") +const util = require("../../utils/util") + + +Page({ + + /** + * 页面的初始数据 + */ + data: { + requesting: false, + posterList:[], + query:{ + pageIndex:1, + pageSize:10 + } + }, + + /** + * 生命周期函数--监听页面加载 + */ + onLoad: function (options) { + this.getData('refresh') + }, + + /** + * 生命周期函数--监听页面初次渲染完成 + */ + onReady: function () { + + }, + + /** + * 生命周期函数--监听页面显示 + */ + onShow: function () { + + }, + + /** + * 生命周期函数--监听页面隐藏 + */ + onHide: function () { + + }, + + /** + * 生命周期函数--监听页面卸载 + */ + onUnload: function () { + + }, + + /** + * 页面相关事件处理函数--监听用户下拉动作 + */ + onPullDownRefresh: function () { + wx.vibrateShort(); + this.refresh() + }, + + /** + * 页面上拉触底事件的处理函数 + */ + onReachBottom: function () { + + }, + + /** + * 用户点击右上角分享 + */ + onShareAppMessage: function () { + + }, + getData(type){ + if(type == 'refresh'){ + + } + posters(this.data.query) + .then(res => { + wx.stopPullDownRefresh() + console.log(">>>>>",res.data.data) + this.setData({posterList:res.data.data.records}) + }).catch(err => { + wx.stopPullDownRefresh() + }) + }, + more() { + + }, + refresh() { + this.getData('refresh') + }, +}) \ No newline at end of file diff --git a/page_package/poster/poster.json b/page_package/poster/poster.json new file mode 100644 index 0000000..fc6e0f4 --- /dev/null +++ b/page_package/poster/poster.json @@ -0,0 +1,9 @@ +{ + "navigationBarBackgroundColor": "#ffffff", + "navigationBarTextStyle": "black", + "navigationBarTitleText": "邀请海报", + "enablePullDownRefresh": true, + "usingComponents": { + "poster-item": "/components/poster/poster" + } +} \ No newline at end of file diff --git a/page_package/poster/poster.wxml b/page_package/poster/poster.wxml new file mode 100644 index 0000000..d9c3467 --- /dev/null +++ b/page_package/poster/poster.wxml @@ -0,0 +1,5 @@ + + + + + diff --git a/page_package/poster/poster.wxss b/page_package/poster/poster.wxss new file mode 100644 index 0000000..8d12e5c --- /dev/null +++ b/page_package/poster/poster.wxss @@ -0,0 +1 @@ +/* page_package/poster/poster.wxss */ \ No newline at end of file diff --git a/page_package/product-type/product-type.js b/page_package/product-type/product-type.js new file mode 100644 index 0000000..b03565e --- /dev/null +++ b/page_package/product-type/product-type.js @@ -0,0 +1,235 @@ +// page_package/product-type/product-type.js +const app = getApp() +const {queryProductType} = require("../../utils/network/services/productImpl.js") +let pageStart = 1; +const constants = require("../../utils/constants") +const util = require("../../utils/util") +const data = require("../../utils/data") + +Page({ + data: { + TabCur: 0, + MainCur: 0, + VerticalNavTop: 0, + list: [], + load: true, + scrollTop:0, + CustomBar: app.globalData.CustomBar, + windowWidth: app.globalData.windowWidth, + windowHeight: app.globalData.windowHeight, + requesting: false, + end: false, + emptyShow: false, + page: pageStart, + listData: [], + hasTop: false, + enableBackToTop: false, + refreshSize: 90, + bottomSize: 0, + color: "#3F82FD", + empty: false, + + requestData: { + cid1: 12218, + pageIndex: pageStart, + pageSize: 20 + }, + productList: [], + productType: data.PRODUCT + }, + onLoad() { + + this.getList('refresh', pageStart, 12218); + + wx.showLoading({ + title: '加载中...', + mask: true + }); + let list = [{}]; + for (let i = 0; i < 26; i++) { + list[i] = {}; + list[i].name = String.fromCharCode(65 + i); + list[i].id = i; + } + this.setData({ + list: list, + listCur: list[0] + }) + }, + onReady() { + wx.hideLoading() + }, + tabSelect(e) { + let data = this.data.requestData + let item = e.currentTarget.dataset.item + data.cid1 = item.id + this.setData({ + requestData: data, + scrollTop:1 + }) + this.getList('refresh', pageStart, item.id); + + // if (wx.pageScrollTo) { + // wx.pageScrollTo({ + // scrollTop: 0, + // selector:'#type-scroll', + // duration: 300, + // success:function () { + // console.log("成功") + // }, + // fail:function () { + // console.log("失败") + // } + // }) + // } + + this.setData({ + TabCur: e.currentTarget.dataset.id, + MainCur: e.currentTarget.dataset.id, + VerticalNavTop: (e.currentTarget.dataset.id - 1) * 50 + }) + }, + VerticalMain(e) { + let that = this; + let list = this.data.list; + let tabHeight = 0; + if (this.data.load) { + for (let i = 0; i < list.length; i++) { + let view = wx.createSelectorQuery().select("#main-" + list[i].id); + view.fields({ + size: true + }, data => { + list[i].top = tabHeight; + tabHeight = tabHeight + data.height; + list[i].bottom = tabHeight; + }).exec(); + } + that.setData({ + load: false, + list: list + }) + } + let scrollTop = e.detail.scrollTop + 20; + for (let i = 0; i < list.length; i++) { + if (scrollTop > list[i].top && scrollTop < list[i].bottom) { + that.setData({ + VerticalNavTop: (list[i].id - 1) * 50, + TabCur: list[i].id + }) + return false + } + } + }, + + + // ----------刷新----------- + itemClick(e) { + console.log(e); + }, + hasTopChange(e) { + this.setData({ + hasTop: e.detail.value + }) + }, + enableBackToTopChange(e) { + this.setData({ + enableBackToTop: e.detail.value + }) + }, + refreshChange(e) { + this.setData({ + refreshSize: e.detail.value + }) + }, + bottomChange(e) { + this.setData({ + bottomSize: e.detail.value + }) + }, + radioChange: function (e) { + this.setData({ + color: e.detail.value + }) + }, + emptyChange(e) { + if (e.detail.value) { + this.setData({ + listData: [], + emptyShow: true, + end: true + }) + } else { + this.setData({ + emptyShow: false, + end: false + }) + } + }, + getList(type, currentPage, productType) { + let that = this + this.setData({ + requesting: true + }) + + wx.showNavigationBarLoading() + + let data = { + cid1: productType, + pageIndex: currentPage, + pageSize: 20 + } + + queryProductType(data).then((res) => { + wx.hideNavigationBarLoading() + + let lastData = that.data.productList + let reqData = res.data.data.records + if (type == 'refresh') { + lastData = reqData + } else { + reqData.forEach(item =>{lastData.push(item)}) + } + lastData.forEach((item) => { + if(item.coupons.length > 0 && item.priceInfo.lowestCouponPrice) + item.priceInfo.lowestCouponPrice = item.priceInfo.lowestCouponPrice.toFixed(2) + + item.comments = util.formatNUmber(item.comments) + item.priceInfo.price = item.priceInfo.price.toFixed(2) + }) + + that.setData({ + page: currentPage + 1, + requesting: false, + productList: lastData + }) + }).catch((err) => { + wx.hideNavigationBarLoading() + that.setData({ + requesting: false + }) + wx.showModal({ + title: '提示', + showCancel: false, + content: err.data.message ? err.data.message : '获取信息失败', + success(res) { + } + }) + }) + }, + // 刷新数据 + refresh() { + this.getList('refresh', 1, this.data.requestData.cid1); + }, + // 加载更多 + more() { + this.getList('more', this.data.page, this.data.requestData.cid1); + }, + + onClick(event){ + util.setStorage(constants.PRPDUCT_ITEM,event.currentTarget.dataset.item) + wx.navigateTo({ + url: '/page_package/details/index' + }) + } + +}) \ No newline at end of file diff --git a/page_package/product-type/product-type.json b/page_package/product-type/product-type.json new file mode 100644 index 0000000..98a8f51 --- /dev/null +++ b/page_package/product-type/product-type.json @@ -0,0 +1,9 @@ +{ + "navigationBarBackgroundColor": "#ffffff", + "navigationBarTextStyle": "black", + "navigationBarTitleText": "商品分类", + "usingComponents": { + "bc-scroll": "/components/refresh/refresh", + "type": "/pages/main-two/type/type" + } +} \ No newline at end of file diff --git a/page_package/product-type/product-type.wxml b/page_package/product-type/product-type.wxml new file mode 100644 index 0000000..c47f0a8 --- /dev/null +++ b/page_package/product-type/product-type.wxml @@ -0,0 +1,47 @@ + + + + + + + + + + {{item.name}} + + + + + + + + + + + + + {{item.skuName}} + + 优惠券 ¥{{item.coupons[0].discount}} + + + {{item.comments}}条评论 + {{item.goodCommentsShare}}%好评率 + + + 券后价¥ + {{item.priceInfo.lowestCouponPrice ? item.priceInfo.lowestCouponPrice:item.priceInfo.price}} + + {{item.commissionInfo.commissionHint}} + + + + + + + + + + \ No newline at end of file diff --git a/page_package/product-type/product-type.wxss b/page_package/product-type/product-type.wxss new file mode 100644 index 0000000..cb25f6a --- /dev/null +++ b/page_package/product-type/product-type.wxss @@ -0,0 +1,77 @@ +/* page_package/product-type/product-type.wxss */ + +.VerticalNav.nav { + width: 96px; + white-space: initial; +} + +.VerticalNav.nav .cu-item { + width: 100%; + text-align: center; + background-color: #f2f2f2; + margin: 0; + border: none; + height: 50px; + position: relative; +} + +.VerticalNav.nav .cu-item.cur { + background-color: #fff; +} + +.VerticalNav.nav .cu-item.cur::after { + content: ""; + width: 8rpx; + height: 30rpx; + border-radius: 10rpx 0 0 10rpx; + position: absolute; + background-color: currentColor; + top: 0; + right: 0rpx; + bottom: 0; + margin: auto; +} + +.VerticalBox { + display: flex; +} + +.VerticalMain { + background-color: #fff; +} + +.ellipsis{ + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; +} + +.rounded{ + border-bottom-right-radius: 8rpx; + border-bottom-left-radius: 8rpx; +} + +.bg-item{ + background-color: #f2f2f2; + color: #f43f3b; + border-radius: 5rpx; + border: 1px solid #f43f3b; + padding: 3rpx 10rpx; +} + +.comment{ + position: absolute; + right: 10rpx; +} + +.type-item{ + background-color: #f2f2f2; + padding-bottom: 10rpx; + border-bottom-right-radius: 8rpx; + border-bottom-left-radius: 8rpx; +} + +.img-item{ + border-top-right-radius: 8rpx; + border-top-left-radius: 8rpx; +} \ No newline at end of file diff --git a/page_package/profit/profit.js b/page_package/profit/profit.js new file mode 100644 index 0000000..0a5b8c1 --- /dev/null +++ b/page_package/profit/profit.js @@ -0,0 +1,156 @@ +// page_package/profit/profit.js +const app = getApp() +const {getFeeData} = require("../../utils/network/services/user.js") +const constants = require("../../utils/constants") +const util = require("../../utils/util") + + +Page({ + + /** + * 页面的初始数据 + */ + data: { + tabs: ["本月预估", "上月预估", "近30天预估"], + TabCur: 0, + scrollLeft: 0, + + requesting: false, + end: false, + emptyShow: false, + hasTop: false, + enableBackToTop: false, + refreshSize: 90, + bottomSize: 0, + color: "#3F82FD", + empty: false, + scrollTop: 0, + + thisMonth: util.getEstimateDate(), + lastMonth: util.getLastMonth(), + lastDays: util.getLastDays(), + + modelTitle: "", + modelContent: "", + modalName: '', + + feeList: null + }, + + /** + * 生命周期函数--监听页面加载 + */ + onLoad: function (options) { + this.getData() + }, + + getData() { + this.setData({requesting: true}) + getFeeData().then((res) => { + this.setData({ + feeList: res.data.data, + requesting: false + }) + }).catch(err => { + this.setData({ + requesting: false + }) + }) + }, + + /** + * 生命周期函数--监听页面初次渲染完成 + */ + onReady: function () { + + }, + + /** + * 生命周期函数--监听页面显示 + */ + onShow: function () { + + }, + + /** + * 生命周期函数--监听页面隐藏 + */ + onHide: function () { + + }, + + /** + * 生命周期函数--监听页面卸载 + */ + onUnload: function () { + + }, + + /** + * 页面相关事件处理函数--监听用户下拉动作 + */ + onPullDownRefresh: function () { + + }, + + /** + * 页面上拉触底事件的处理函数 + */ + onReachBottom: function () { + + }, + + /** + * 用户点击右上角分享 + */ + onShareAppMessage: function () { + + }, + hideModal() { + this.setData({modalName: ''}) + }, + more() { + + }, + refresh() { + this.getData() + }, + tabSelect(event) { + this.setData({ + TabCur: event.currentTarget.dataset.id, + scrollLeft: (event.currentTarget.dataset.id - 1) * 60 + }) + }, + onShowModel(event) { + switch (Number(event.currentTarget.dataset.index)) { + case 0: + if (Number(event.currentTarget.dataset.type) == 0) { + this.setData({ + modelTitle: this.data.feeList.thisMonth[0].description.popTitle, + modelContent: this.data.feeList.thisMonth[0].description.popText, + modalName: 'bottomModal' + }) + } else if (Number(event.currentTarget.dataset.type) == 1) { + this.setData({ + modelTitle: this.data.feeList.lastMonth[0].description.popTitle, + modelContent: this.data.feeList.lastMonth[0].description.popText, + modalName: 'bottomModal' + }) + } else { + this.setData({ + modelTitle: this.data.feeList.nearly30Days[0].description.popTitle, + modelContent: this.data.feeList.nearly30Days[0].description.popText, + modalName: 'bottomModal' + }) + } + break + case 1: + this.setData({ + modelTitle: this.data.feeList.billingInfo.description.popTitle, + modelContent: this.data.feeList.billingInfo.description.popText, + modalName: 'bottomModal' + }) + break + } + } +}) \ No newline at end of file diff --git a/page_package/profit/profit.json b/page_package/profit/profit.json new file mode 100644 index 0000000..3a6ebcc --- /dev/null +++ b/page_package/profit/profit.json @@ -0,0 +1,8 @@ +{ + "navigationBarBackgroundColor": "#ffffff", + "navigationBarTextStyle": "black", + "navigationBarTitleText": "我的收益", + "usingComponents": { + "bc-scroll": "/components/refresh/refresh" + } +} \ No newline at end of file diff --git a/page_package/profit/profit.wxml b/page_package/profit/profit.wxml new file mode 100644 index 0000000..3b1cf5a --- /dev/null +++ b/page_package/profit/profit.wxml @@ -0,0 +1,122 @@ + + + + + + + + + + + + {{item}} + + + + + + + + + + + + + + {{item.title}} + + + {{item.value}} + + + + + + {{feeList.billingInfo.description.text}} + + + + + + + + + + {{modelTitle}} + 确定 + + + {{modelContent}} + + + \ No newline at end of file diff --git a/page_package/profit/profit.wxss b/page_package/profit/profit.wxss new file mode 100644 index 0000000..187ad11 --- /dev/null +++ b/page_package/profit/profit.wxss @@ -0,0 +1,4 @@ +/* page_package/profit/profit.wxss */ +page{ + background-color: #f2f2f2; +} \ No newline at end of file diff --git a/page_package/question/question.js b/page_package/question/question.js new file mode 100644 index 0000000..1941da3 --- /dev/null +++ b/page_package/question/question.js @@ -0,0 +1,70 @@ +// page_package/question/question.js +const constants = require("../../utils/constants") +const util = require("../../utils/util") +Page({ + + /** + * 页面的初始数据 + */ + data: { + question:null + }, + + /** + * 生命周期函数--监听页面加载 + */ + onLoad: function (options) { + this.setData({ + question:util.getStorage(constants.QUESTION) + }) + }, + + /** + * 生命周期函数--监听页面初次渲染完成 + */ + onReady: function () { + + }, + + /** + * 生命周期函数--监听页面显示 + */ + onShow: function () { + + }, + + /** + * 生命周期函数--监听页面隐藏 + */ + onHide: function () { + + }, + + /** + * 生命周期函数--监听页面卸载 + */ + onUnload: function () { + + }, + + /** + * 页面相关事件处理函数--监听用户下拉动作 + */ + onPullDownRefresh: function () { + + }, + + /** + * 页面上拉触底事件的处理函数 + */ + onReachBottom: function () { + + }, + + /** + * 用户点击右上角分享 + */ + onShareAppMessage: function () { + + } +}) \ No newline at end of file diff --git a/page_package/question/question.json b/page_package/question/question.json new file mode 100644 index 0000000..5a05e9c --- /dev/null +++ b/page_package/question/question.json @@ -0,0 +1,6 @@ +{ + "navigationBarBackgroundColor": "#ffffff", + "navigationBarTextStyle": "black", + "navigationBarTitleText": "问题解答", + "usingComponents": {} +} \ No newline at end of file diff --git a/page_package/question/question.wxml b/page_package/question/question.wxml new file mode 100644 index 0000000..4ea3ffd --- /dev/null +++ b/page_package/question/question.wxml @@ -0,0 +1,13 @@ + + + + + + + + + + {{question.title}} + + {{question.answer}} + \ No newline at end of file diff --git a/page_package/question/question.wxss b/page_package/question/question.wxss new file mode 100644 index 0000000..c521542 --- /dev/null +++ b/page_package/question/question.wxss @@ -0,0 +1,4 @@ +/* page_package/question/question.wxss */ +page{ + background-color: #f2f2f2; +} \ No newline at end of file diff --git a/page_package/search/search.js b/page_package/search/search.js new file mode 100644 index 0000000..e85a39c --- /dev/null +++ b/page_package/search/search.js @@ -0,0 +1,281 @@ +// page_package/search/search.js +const app = getApp() +const constants = require("../../utils/constants.js") +const util = require("../../utils/util.js") + +Page({ + + /** + * + */ + data: { + StatusBar: app.globalData.StatusBar, + CustomBar: app.globalData.CustomBar, + Custom: app.globalData.Custom, + windowHeight: app.globalData.windowHeight, + windowWidth: app.globalData.windowWidth, + searchHistory: [], + searchContent: "", + scrolltop: '', + conditionList: [ + {name: '综合排序'}, + {name: '高返利比'}, + {name: '销量'}, + {name: '价格'}, + ], + numList: [{ + name: '打开京东APP' + }, { + name: '长按复制商品标题' + }, { + name: '打开惠享小程序' + }, { + name: '点击搜索' + },], + + isCoupon: false, + isFilter: false, + isCheck: false, + curID: 0, + priceSort: false, + salesSort: false, + page:1, + sortName:'' + }, + + /** + * 生命周期函数--监听页面加载 + */ + onLoad: function (options) { + if(options.content){ + this.setData({searchContent:options.content}) + let historyList = util.getStorage(constants.SEARCH_HISTORY) + historyList = historyList ? historyList : [] + let isExis = historyList.filter((elem) => elem == this.data.searchContent) + + if (isExis.length == 0) { + historyList.push(this.data.searchContent) + util.setStorage(constants.SEARCH_HISTORY, historyList) + } + this.setData({ + isCoupon: true, + isCheck: false, + isFilter: true, + priceSort: false, + salesSort: false, + curID: 0, + page:1, + sortName:'' + }) + this.selectComponent("#search-product-list").getSearchList('refresh', 1, this.data.searchContent, '', '', ''); + } + let historyList = util.getStorage(constants.SEARCH_HISTORY) + // 获取本地搜索历史 + this.setData({ + searchHistory: historyList + }) + }, + + /** + * 生命周期函数--监听页面初次渲染完成 + */ + onReady: function () { + + }, + + /** + * 生命周期函数--监听页面显示 + */ + onShow: function () { + + }, + + /** + * 生命周期函数--监听页面隐藏 + */ + onHide: function () { + + }, + + /** + * 生命周期函数--监听页面卸载 + */ + onUnload: function () { + + }, + + /** + * 页面相关事件处理函数--监听用户下拉动作 + */ + onPullDownRefresh: function () { + + }, + + /** + * 页面上拉触底事件的处理函数 + */ + onReachBottom: function () { + + }, + + /** + * 用户点击右上角分享 + */ + onShareAppMessage: function () { + + }, + + /**清除记录 */ + onClear() { + util.removeStorage(constants.SEARCH_HISTORY) + this.setData({ + searchHistory: util.getStorage(constants.SEARCH_HISTORY) + }) + }, + historyItem(event) { + this.setData({ + searchContent: event.currentTarget.dataset.item + }) + // this.selectComponent("#search-product-list").getList('refresh', 1, + // event.currentTarget.dataset.item, 'search'); + }, + /** + * 搜索框输入监听 + */ + bindinput(event) { + this.setData({ + searchContent: event.detail.value + }) + }, + more(){ + this.selectComponent("#search-product-list").getSearchList('more', ++this.data.page, this.data.searchContent, '', this.data.priceSort ? 'desc' : 'asc', this.data.sortName); + }, + //筛选规则 + onSort(event) { + this.setData({scrolltop: 0}) + switch (Number(event.currentTarget.dataset.index)) { + case 0: + this.setData({ + isCoupon: true, + isCheck: false, + isFilter: true, + curID: 0, + salesSort: false, + priceSort: false, + page:1, + sortName:'' + }) + this.selectComponent("#search-product-list").getSearchList('refresh', 1, this.data.searchContent, '', '', ''); + break + case 1: + this.setData({ + isCoupon: true, + isCheck: false, + isFilter: true, + curID: 1, + salesSort: false, + priceSort: false, + page:1, + sortName:'commission' + }) + this.selectComponent("#search-product-list").getSearchList('refresh', 1, this.data.searchContent, '', 'desc', 'commission'); + break + case 2: + this.setData({ + isCoupon: true, + isCheck: false, + isFilter: true, + curID: 2, + salesSort: !this.data.salesSort, + priceSort: false, + page:1, + sortName:'inOrderCount30Days' + }) + this.selectComponent("#search-product-list").getSearchList('refresh', 1, this.data.searchContent, '', this.data.salesSort ? 'desc' : 'asc', 'inOrderCount30Days'); + break + case 3: + this.setData({ + isCoupon: true, + isCheck: false, + isFilter: true, + curID: 3, + salesSort: false, + priceSort: !this.data.priceSort, + page:1, + sortName:'price' + }) + this.selectComponent("#search-product-list").getSearchList('refresh', 1, this.data.searchContent, '', this.data.priceSort ? 'desc' : 'asc', 'price'); + break + } + }, + onCheck(event) { + this.setData({scrolltop: 0}) + if (event.detail.value) { + this.setData({ + isCoupon: true, + isCheck: true, + isFilter: false, + priceSort: false, + salesSort: false, + curID: 0, + page:1, + sortName:'' + }) + this.selectComponent("#search-product-list").getSearchList('refresh', 1, this.data.searchContent, 1, '', ''); + } else { + this.setData({ + isCoupon: true, + isCheck: false, + isFilter: true, + priceSort: false, + salesSort: false, + curID: 0, + page:1, + sortName:'' + }) + this.selectComponent("#search-product-list").getSearchList('refresh', 1, this.data.searchContent, '', '', ''); + } + }, + onSerach(event) { + let that = this + if (this.data.searchContent) { + let historyList = util.getStorage(constants.SEARCH_HISTORY) + historyList = historyList ? historyList : [] + let isExis = historyList.filter((elem) => elem == that.data.searchContent) + + if (isExis.length == 0) { + historyList.push(this.data.searchContent) + util.setStorage(constants.SEARCH_HISTORY, historyList) + } + this.setData({scrolltop: 0}) + switch (Number(event.currentTarget.dataset.index)) { + case 0: + this.setData({ + isCoupon: true, + isCheck: true, + isFilter: false, + priceSort: false, + salesSort: false, + curID: 0, + page:1, + sortName:'' + }) + this.selectComponent("#search-product-list").getSearchList('refresh', 1, this.data.searchContent, 1, '', ''); + break + case 1: + this.setData({ + isCoupon: true, + isCheck: false, + isFilter: true, + priceSort: false, + salesSort: false, + curID: 0, + page:1, + sortName:'' + }) + this.selectComponent("#search-product-list").getSearchList('refresh', 1, this.data.searchContent, '', '', ''); + break + } + } + } +}) \ No newline at end of file diff --git a/page_package/search/search.json b/page_package/search/search.json new file mode 100644 index 0000000..5915c46 --- /dev/null +++ b/page_package/search/search.json @@ -0,0 +1,8 @@ +{ + "navigationBarBackgroundColor": "#ffffff", + "navigationBarTextStyle": "black", + "navigationBarTitleText": "搜索商品", + "usingComponents": { + "type": "/pages/main-two/type/type" + } +} \ No newline at end of file diff --git a/page_package/search/search.wxml b/page_package/search/search.wxml new file mode 100644 index 0000000..75aae8a --- /dev/null +++ b/page_package/search/search.wxml @@ -0,0 +1,129 @@ + + + + + + + + + + + + + + 搜优惠券 + + 搜京东全站 + + + + + + + + 综合排序 + + 高返佣比 + + + 销量 + + + + + + + + 价格 + + + + + + + + + + + + + 仅显示优惠券商品 + + + + + + + + + + + + + + 省钱技巧:京东领券后再来惠享购买享受用券和返利双重优惠 + + + + + + {{index + 1}} + + + + {{item.name}} + + {{item.name}} + + + + + + + 搜索记录 + + + + {{item}} + + + + + + + + \ No newline at end of file diff --git a/page_package/search/search.wxss b/page_package/search/search.wxss new file mode 100644 index 0000000..c9fb199 --- /dev/null +++ b/page_package/search/search.wxss @@ -0,0 +1,25 @@ +/* page_package/search/search.wxss */ +.skill{ + color: #83653F; +} + +.ellipsis{ + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; +} +.ellipsis-title{ + margin-top: 10rpx; + font-size: 30rpx; +} + +.condition-item{ + width: 25%; + height: 56rpx; +} + +.line1{ + width: 100%; + height: 1rpx; + background-color: #f2f2f2; +} \ No newline at end of file diff --git a/page_package/study/study.js b/page_package/study/study.js new file mode 100644 index 0000000..66d36fe --- /dev/null +++ b/page_package/study/study.js @@ -0,0 +1,114 @@ +// page_package/study/study.js +const app = getApp() +Page({ + + /** + * 页面的初始数据 + */ + data: { + windowHeight: app.globalData.windowHeight, + CustomBar: app.globalData.CustomBar, + }, + + /** + * 生命周期函数--监听页面加载 + */ + onLoad: function (options) { + + }, + + /** + * 生命周期函数--监听页面初次渲染完成 + */ + onReady: function () { + + }, + + /** + * 生命周期函数--监听页面显示 + */ + onShow: function () { + + }, + + /** + * 生命周期函数--监听页面隐藏 + */ + onHide: function () { + + }, + + /** + * 生命周期函数--监听页面卸载 + */ + onUnload: function () { + + }, + + /** + * 页面相关事件处理函数--监听用户下拉动作 + */ + onPullDownRefresh: function () { + + }, + + /** + * 页面上拉触底事件的处理函数 + */ + onReachBottom: function () { + + }, + + /** + * 用户点击右上角分享 + */ + onShareAppMessage: function () { + + }, + onSave(event) { + wx.getSetting({ + success(res) { + wx.showLoading({title: '保存中...',}) + wx.downloadFile({ + url: "http://mss.sankuai.com/v1/mss_51a7233366a4427fa6132a6ce72dbe54/newsPicture/05558951-de60-49fb-b674-dd906c8897a6", + success: function(res) { + wx.saveImageToPhotosAlbum({ + filePath: res.tempFilePath, + success: function(data) { + wx.hideLoading() + wx.showModal({ + title: '提示', + showCancel: false, + content: '图片保存成功,进入系统相册分享吧~', + success(res) { + if (res.confirm) { + + } + } + }) + }, + fail: function(err) { + wx.hideLoading() + console.log(err); + } + }); + } + }); + }, + fail: (err) => { + wx.showModal({ + title: '提示', + showCancel: false, + content: '请到小程序设置中打开相册权限', + success(res) {} + }) + } + }); + }, + onPreview(event) { + wx.previewImage({ + urls: ['https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1583131085102&di=3454eccc0e5443f08f24157034dd9220&imgtype=0&src=http%3A%2F%2Fhbimg.huabanimg.com%2F437304a7ca4cf0c9386df81fcfc761299c6a11271ffc5-OwRrXi_fw658'], + }) + } + +}) \ No newline at end of file diff --git a/page_package/study/study.json b/page_package/study/study.json new file mode 100644 index 0000000..e3bed80 --- /dev/null +++ b/page_package/study/study.json @@ -0,0 +1,6 @@ +{ + "navigationBarBackgroundColor": "#ffffff", + "navigationBarTextStyle": "black", + "navigationBarTitleText": "进阶学习", + "usingComponents": {} +} \ No newline at end of file diff --git a/page_package/study/study.wxml b/page_package/study/study.wxml new file mode 100644 index 0000000..5f0cb7b --- /dev/null +++ b/page_package/study/study.wxml @@ -0,0 +1,26 @@ + + + 返回 + 进阶学习 + + + + 招商+入门+冲刺官方系统培训课程 + 惠享主力就业计划特别课,集招商、入门、提升的综合进阶培训,主力更多人创收! + + + + + + 保存到手机相册 + 分享图片 + + + + \ No newline at end of file diff --git a/page_package/study/study.wxss b/page_package/study/study.wxss new file mode 100644 index 0000000..156e44f --- /dev/null +++ b/page_package/study/study.wxss @@ -0,0 +1 @@ +/* page_package/study/study.wxss */ \ No newline at end of file diff --git a/page_package/time-reward/time-reward.js b/page_package/time-reward/time-reward.js new file mode 100644 index 0000000..6b01f92 --- /dev/null +++ b/page_package/time-reward/time-reward.js @@ -0,0 +1,66 @@ +// page_package/time-reward/time-reward.js +Page({ + + /** + * 页面的初始数据 + */ + data: { + + }, + + /** + * 生命周期函数--监听页面加载 + */ + onLoad: function (options) { + + }, + + /** + * 生命周期函数--监听页面初次渲染完成 + */ + onReady: function () { + + }, + + /** + * 生命周期函数--监听页面显示 + */ + onShow: function () { + + }, + + /** + * 生命周期函数--监听页面隐藏 + */ + onHide: function () { + + }, + + /** + * 生命周期函数--监听页面卸载 + */ + onUnload: function () { + + }, + + /** + * 页面相关事件处理函数--监听用户下拉动作 + */ + onPullDownRefresh: function () { + + }, + + /** + * 页面上拉触底事件的处理函数 + */ + onReachBottom: function () { + + }, + + /** + * 用户点击右上角分享 + */ + onShareAppMessage: function () { + + } +}) \ No newline at end of file diff --git a/page_package/time-reward/time-reward.json b/page_package/time-reward/time-reward.json new file mode 100644 index 0000000..a264894 --- /dev/null +++ b/page_package/time-reward/time-reward.json @@ -0,0 +1,6 @@ +{ + "navigationBarBackgroundColor": "#ffffff", + "navigationBarTextStyle": "black", + "navigationBarTitleText": "限时奖励", + "usingComponents": {} +} \ No newline at end of file diff --git a/page_package/time-reward/time-reward.wxml b/page_package/time-reward/time-reward.wxml new file mode 100644 index 0000000..b70b9e7 --- /dev/null +++ b/page_package/time-reward/time-reward.wxml @@ -0,0 +1,5 @@ + + + + + diff --git a/page_package/time-reward/time-reward.wxss b/page_package/time-reward/time-reward.wxss new file mode 100644 index 0000000..c8b54eb --- /dev/null +++ b/page_package/time-reward/time-reward.wxss @@ -0,0 +1 @@ +/* page_package/time-reward/time-reward.wxss */ \ No newline at end of file diff --git a/page_package/transfer/chain/chain.js b/page_package/transfer/chain/chain.js new file mode 100644 index 0000000..47adf6e --- /dev/null +++ b/page_package/transfer/chain/chain.js @@ -0,0 +1,111 @@ +// page_package/transfer/chain/chain.js +const {goodsConvert} = require('../../../utils/network/services/service.js') +Page({ + + /** + * 页面的初始数据 + */ + data: { + content:"", + chainContent:'', + isShowDialog:false, + msg:"" + }, + + /** + * 生命周期函数--监听页面加载 + */ + onLoad: function (options) { + this.setData({ + content:decodeURIComponent(options.content) + }) + this.onChain() + }, + + /** + * 生命周期函数--监听页面初次渲染完成 + */ + onReady: function () { + + }, + + /** + * 生命周期函数--监听页面显示 + */ + onShow: function () { + + }, + + /** + * 生命周期函数--监听页面隐藏 + */ + onHide: function () { + + }, + + /** + * 生命周期函数--监听页面卸载 + */ + onUnload: function () { + + }, + + /** + * 页面相关事件处理函数--监听用户下拉动作 + */ + onPullDownRefresh: function () { + + }, + + /** + * 页面上拉触底事件的处理函数 + */ + onReachBottom: function () { + + }, + + /** + * 用户点击右上角分享 + */ + onShareAppMessage: function () { + + }, + onChain(){ + if(this.data.content){ + goodsConvert(this.data.content) + .then(res => { + this.setData({chainContent: res.data.data.content}) + }).catch(err => { + console.log(err) + this.setData({ + isShowDialog:true, + msg:"获取推广链接失败" + }) + }) + }else { + this.setData({ + isShowDialog:true, + msg:"获取推广链接失败" + }) + } + }, + textareaBInput(event) { + this.setData({chainContent: event.detail.value}) + }, + onCopy(){ + if(this.data.chainContent){ + wx.setClipboardData({ + data: this.data.chainContent, + success: function (res) { + wx.getClipboardData({ + success: function (res) { + wx.showToast({ + title: '复制成功' + }) + } + }) + } + }) + } + } +}) \ No newline at end of file diff --git a/page_package/transfer/chain/chain.json b/page_package/transfer/chain/chain.json new file mode 100644 index 0000000..5f0f511 --- /dev/null +++ b/page_package/transfer/chain/chain.json @@ -0,0 +1,6 @@ +{ + "navigationBarTitleText": "分享", + "navigationBarBackgroundColor": "#ffffff", + "navigationBarTextStyle": "black", + "usingComponents": {} +} \ No newline at end of file diff --git a/page_package/transfer/chain/chain.wxml b/page_package/transfer/chain/chain.wxml new file mode 100644 index 0000000..1daaf78 --- /dev/null +++ b/page_package/transfer/chain/chain.wxml @@ -0,0 +1,24 @@ + + + + +请勿更改链接,尚橙仅提供技术支持,请确保分享内容真实合法,勿使用京东内部优惠券、好评返现虚假描述 + + + + 如何分享?1 + 保存文字 + =>2 + 关闭小程序 + =>3 + 粘贴到群或个人 + + + 保存文字 + + + \ No newline at end of file diff --git a/page_package/transfer/chain/chain.wxss b/page_package/transfer/chain/chain.wxss new file mode 100644 index 0000000..9c360fb --- /dev/null +++ b/page_package/transfer/chain/chain.wxss @@ -0,0 +1 @@ +/* page_package/transfer/chain/chain.wxss */ diff --git a/page_package/transfer/transfer/transfer.js b/page_package/transfer/transfer/transfer.js new file mode 100644 index 0000000..bc66641 --- /dev/null +++ b/page_package/transfer/transfer/transfer.js @@ -0,0 +1,88 @@ +// page_package/transfer/transfer/transfer.js + +Page({ + + /** + * 页面的初始数据 + */ + data: { + isShow: true, + searchContent: "", + isShowDialog:false, + msg:"" + }, + + /** + * 生命周期函数--监听页面加载 + */ + onLoad: function (options) { + + }, + + /** + * 生命周期函数--监听页面初次渲染完成 + */ + onReady: function () { + + }, + + /** + * 生命周期函数--监听页面显示 + */ + onShow: function () { + + }, + + /** + * 生命周期函数--监听页面隐藏 + */ + onHide: function () { + + }, + + /** + * 生命周期函数--监听页面卸载 + */ + onUnload: function () { + + }, + + /** + * 页面相关事件处理函数--监听用户下拉动作 + */ + onPullDownRefresh: function () { + + }, + + /** + * 页面上拉触底事件的处理函数 + */ + onReachBottom: function () { + + }, + + /** + * 用户点击右上角分享 + */ + onShareAppMessage: function () { + + }, + textareaBInput(event) { + this.setData({searchContent: event.detail.value}) + }, + onClose() { + this.setData({isShow: false}) + }, + onClear() { + this.setData({searchContent: ''}) + }, + onTransfer() { + const content = this.data.searchContent + if(content.length < 10) return + const url = encodeURIComponent(content) + wx.navigateTo({ + url: '/page_package/transfer/chain/chain?content=' + url + }) + } + +}) \ No newline at end of file diff --git a/page_package/transfer/transfer/transfer.json b/page_package/transfer/transfer/transfer.json new file mode 100644 index 0000000..3ffedce --- /dev/null +++ b/page_package/transfer/transfer/transfer.json @@ -0,0 +1,6 @@ +{ + "navigationBarTitleText": "转链", + "navigationBarBackgroundColor": "#ffffff", + "navigationBarTextStyle": "black", + "usingComponents": {} +} \ No newline at end of file diff --git a/page_package/transfer/transfer/transfer.wxml b/page_package/transfer/transfer/transfer.wxml new file mode 100644 index 0000000..78445f1 --- /dev/null +++ b/page_package/transfer/transfer/transfer.wxml @@ -0,0 +1,30 @@ + + + + + + 通过转链后链接生成的订单才能计算到您的佣金中 + + + + + + + 清空 + + + 转换成我的链接 + + + + + diff --git a/page_package/transfer/transfer/transfer.wxss b/page_package/transfer/transfer/transfer.wxss new file mode 100644 index 0000000..076d2dc --- /dev/null +++ b/page_package/transfer/transfer/transfer.wxss @@ -0,0 +1,5 @@ +/* page_package/transfer/transfer/transfer.wxss */ +.page{ + height: calc(100vh); + background-color: #f2f2f2; +} \ No newline at end of file diff --git a/page_package/video-course/video-course.js b/page_package/video-course/video-course.js new file mode 100644 index 0000000..0228069 --- /dev/null +++ b/page_package/video-course/video-course.js @@ -0,0 +1,87 @@ +// page_package/video-course/video-course.js +const app = getApp() + +Page({ + + /** + * 页面的初始数据 + */ + data: { + CustomBar: app.globalData.CustomBar, + windowHeight: app.globalData.windowHeight, + url:"" + }, + + /** + * 生命周期函数--监听页面加载 + */ + onLoad: function (options) { + this.setData({ + url:decodeURIComponent(options.url) + }) + }, + + /** + * 生命周期函数--监听页面初次渲染完成 + */ + onReady: function () { + + }, + + /** + * 生命周期函数--监听页面显示 + */ + onShow: function () { + + }, + + /** + * 生命周期函数--监听页面隐藏 + */ + onHide: function () { + + }, + + /** + * 生命周期函数--监听页面卸载 + */ + onUnload: function () { + + }, + + /** + * 页面相关事件处理函数--监听用户下拉动作 + */ + onPullDownRefresh: function () { + + }, + + /** + * 页面上拉触底事件的处理函数 + */ + onReachBottom: function () { + + }, + + /** + * 用户点击右上角分享 + */ + onShareAppMessage: function () { + + }, + onPlay(e) {}, + + onPause(e) { + // console.log('pause', e.detail.activeId) + }, + + onEnded(e) {}, + + onError(e) {}, + + onWaiting(e) {}, + + onTimeUpdate(e) {}, + + onProgress(e) {}, +}) \ No newline at end of file diff --git a/page_package/video-course/video-course.json b/page_package/video-course/video-course.json new file mode 100644 index 0000000..55b9dde --- /dev/null +++ b/page_package/video-course/video-course.json @@ -0,0 +1,6 @@ +{ + "navigationBarBackgroundColor": "#ffffff", + "navigationBarTextStyle": "black", + "navigationBarTitleText": "视频教程", + "usingComponents": {} +} \ No newline at end of file diff --git a/page_package/video-course/video-course.wxml b/page_package/video-course/video-course.wxml new file mode 100644 index 0000000..3794845 --- /dev/null +++ b/page_package/video-course/video-course.wxml @@ -0,0 +1,24 @@ + + + + + + diff --git a/page_package/video-course/video-course.wxss b/page_package/video-course/video-course.wxss new file mode 100644 index 0000000..945efdb --- /dev/null +++ b/page_package/video-course/video-course.wxss @@ -0,0 +1,5 @@ +/* page_package/video-course/video-course.wxss */ +.video_item { + height: 100vh; + width: 100vw; +} \ No newline at end of file diff --git a/page_package/video-play/video-play.js b/page_package/video-play/video-play.js new file mode 100644 index 0000000..60a68ac --- /dev/null +++ b/page_package/video-play/video-play.js @@ -0,0 +1,70 @@ +// page_package/video-play/video-play.js + +const app = getApp() + +const data = require("../../pages/daren/test-data.js") + +const videoList = data.videos + + + +Page({ + + /** + * 页面的初始数据 + */ + data: { + StatusBar: app.globalData.StatusBar, + CustomBar: app.globalData.CustomBar, + Custom: app.globalData.Custom, + windowWidth: app.globalData.windowWidth, + windowHeight: app.globalData.windowHeight, + current:0, + videoList, + videos:{} + }, + + /** + * 生命周期函数--监听页面加载 + */ + onLoad: function(options) { + let lists = { + current: Number(options.index), + videos: videoList + } + + this.setData({ + current: Number(options.index), + videos: lists + }) + }, + + onPlay(e) {}, + + onPause(e) { + // console.log('pause', e.detail.activeId) + }, + + onEnded(e) {}, + + onError(e) {}, + + onWaiting(e) {}, + + onTimeUpdate(e) {}, + + onProgress(e) {}, + + onLoadedMetaData(e) { + console.log('LoadedMetaData', e) + }, + + onShare(e){ + wx.showToast({ + title: '分享视频' + e.detail.index, + icon: "none", + duration: 3000 + }) + } + +}) \ No newline at end of file diff --git a/page_package/video-play/video-play.json b/page_package/video-play/video-play.json new file mode 100644 index 0000000..6ecc5fc --- /dev/null +++ b/page_package/video-play/video-play.json @@ -0,0 +1,6 @@ +{ + "navigationStyle": "custom", + "usingComponents": { + "video-swiper": "/components/video-swiper/video-swiper" + } +} \ No newline at end of file diff --git a/page_package/video-play/video-play.wxml b/page_package/video-play/video-play.wxml new file mode 100644 index 0000000..379331f --- /dev/null +++ b/page_package/video-play/video-play.wxml @@ -0,0 +1,10 @@ + + + + + 返回 + + + + + \ No newline at end of file diff --git a/page_package/video-play/video-play.wxss b/page_package/video-play/video-play.wxss new file mode 100644 index 0000000..fd73799 --- /dev/null +++ b/page_package/video-play/video-play.wxss @@ -0,0 +1,17 @@ +/* page_package/video-play/video-play.wxss */ + +page { + height: 100vh; + width: 100vw; + position: fixed; +} + +.container { + width: 100%; + height: 100%; +} + +.swiper { + width: 100%; + height: 100%; +} diff --git a/pages/daren/daren.js b/pages/daren/daren.js new file mode 100644 index 0000000..fe943c4 --- /dev/null +++ b/pages/daren/daren.js @@ -0,0 +1,115 @@ +// pages/daren/daren.js +const app = getApp() +const data = require("./test-data.js") +let pageStart = 0 + +Component({ + /** + * 组件的属性列表 + */ + properties: { + + }, + + /** + * 组件的初始数据 + */ + data: { + StatusBar: app.globalData.StatusBar, + CustomBar: app.globalData.CustomBar, + Custom: app.globalData.Custom, + TabCur: 0, + scrollLeft: 0, + windowWidth: app.globalData.windowWidth, + windowHeight: app.globalData.windowHeight, + + tabs: ["推荐", "关注"], + videoList: data.videos, + + requesting: false, + end: false, + emptyShow: false, + page: pageStart, + listData: [], + hasTop: false, + enableBackToTop: false, + refreshSize: 90, + bottomSize: 100, + color: "#3F82FD", + empty: false + }, + + lifetimes: { + attached: function () { + // 在组件实例进入页面节点树时执行 + this.getList('refresh', pageStart); + }, + }, + + /** + * 组件的方法列表 + */ + methods: { + tabSelect(e) { + this.setData({ + TabCur: e.currentTarget.dataset.id, + scrollLeft: (e.currentTarget.dataset.id - 1) * 60 + }) + }, + togo(e) { + let index = e.currentTarget.dataset.index + wx.navigateTo({ + url: '/page_package/video-play/video-play?index=' + index + // url:'/page_package/about/about' + }) + }, + // 刷新数据 + refresh() { + this.getList('refresh', pageStart); + this.setData({ + empty: false + }) + }, + // 加载更多 + more() { + this.getList('more', this.data.page); + }, + getList(type, currentPage) { + this.setData({ + requesting: true + }) + + wx.showNavigationBarLoading() + + // 模拟异步获取数据场景 + setTimeout(() => { + this.setData({ + requesting: false + }) + + wx.hideNavigationBarLoading() + + if (type === 'refresh') { + this.setData({ + page: currentPage + 1 + }) + } else { + this.setData({ + page: currentPage + 1, + end: false + }) + } + }, 1000); + } + }, + pageLifetimes: { + show() { + if (typeof this.getTabBar === 'function' && + this.getTabBar()) { + this.getTabBar().setData({ + selected: 1 + }) + } + } + } +}) \ No newline at end of file diff --git a/pages/daren/daren.json b/pages/daren/daren.json new file mode 100644 index 0000000..136f361 --- /dev/null +++ b/pages/daren/daren.json @@ -0,0 +1,6 @@ +{ + + "usingComponents": { + "bc-scroll": "/components/refresh/refresh" + } +} \ No newline at end of file diff --git a/pages/daren/daren.wxml b/pages/daren/daren.wxml new file mode 100644 index 0000000..65faaec --- /dev/null +++ b/pages/daren/daren.wxml @@ -0,0 +1,62 @@ + + + + + + + + {{item}} + + + + + + + + + + 暂无数据 + + + + + + + + + + + + +