From db948825b2e62edcedf1c97edfe399e4d160068d Mon Sep 17 00:00:00 2001 From: luyisha Date: Fri, 9 Jun 2023 09:41:02 +0800 Subject: [PATCH] =?UTF-8?q?=E5=88=9D=E5=A7=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 1 + .hbuilderx/launch.json | 16 + App.vue | 85 + common/css/common.css | 965 ++++++ common/css/diyPages.css | 696 ++++ common/css/iconfont.css | 3082 +++++++++++++++++ common/css/iconfont.ttf | Bin 0 -> 211584 bytes common/css/new_iconfont.css | 17 + common/css/old_diyPages.css | 1642 +++++++++ common/js/app.js | 1392 ++++++++ common/js/ms-openMap/openMap.js | 96 + common/js/ms-openMap/transformCoordinate.js | 126 + common/js/pageListMixin.js | 22 + common/js/qqmap-wx-jssdk.min.js | 1 + common/js/recorder.js | 12 + common/js/setData.js | 26 + common/js/util.js | 338 ++ common/js/wxApi.js | 234 ++ components/.DS_Store | Bin 0 -> 6148 bytes components/drag-button/drag-button.vue | 599 ++++ components/hx-jump-ball/hx-jump-ball.vue | 233 ++ components/invinbg-image-cropper/.DS_Store | Bin 0 -> 6148 bytes .../invinbg-image-cropper.vue | 759 ++++ components/jin-edit/jin-edit.vue | 404 +++ components/jin-edit/jin-icons.vue | 48 + components/junyi-h5-copy/junyi-h5-copy.js | 18 + components/jyf-parser/jyf-parser.vue | 698 ++++ components/jyf-parser/libs/CssHandler.js | 97 + components/jyf-parser/libs/MpHtmlParser.js | 546 +++ components/jyf-parser/libs/config.js | 98 + components/jyf-parser/libs/handler.sjs | 20 + components/jyf-parser/libs/handler.wxs | 20 + components/jyf-parser/libs/trees.vue | 526 +++ components/lb-picker/index.vue | 392 +++ components/lb-picker/mixins/index.js | 93 + .../pickers/multi-selector-picker.vue | 135 + .../lb-picker/pickers/selector-picker.vue | 113 + .../pickers/unlinked-selector-picker.vue | 116 + components/lb-picker/style/picker-item.scss | 40 + components/lb-picker/style/picker.scss | 176 + components/lb-picker/utils.js | 129 + .../page/pageComponents/Recommend_goods.vue | 67 + components/page/pageComponents/Video.vue | 171 + .../page/pageComponents/businessCard.vue | 394 +++ components/page/pageComponents/citywide.vue | 126 + .../page/pageComponents/discountCard.vue | 268 ++ components/page/pageComponents/giftbag.vue | 189 + components/page/pageComponents/goods.vue | 123 + components/page/pageComponents/goodsStyle.vue | 832 +++++ components/page/pageComponents/integral.vue | 104 + components/page/pageComponents/region.vue | 88 + components/page/pageComponents/shopEnter.vue | 137 + components/page/pageComponents/shopInfo.vue | 290 ++ components/page/pageComponents/tabContro.vue | 875 +++++ components/page/pageComponents/tabMenu.vue | 217 ++ components/raffle-wheel/raffle-wheel.vue | 456 +++ components/rattenking-dtpicker/GetDate.js | 167 + .../rattenking-dtpicker.vue | 239 ++ components/template/Abnor.vue | 137 + components/template/GoTopBtn.vue | 114 + components/template/GoodsBuyMenu.vue | 776 +++++ components/template/PartLoading.vue | 75 + components/template/PhoneMask.vue | 482 +++ components/template/PopManager.vue | 161 + components/template/Skip.vue | 43 + components/template/Swiper.vue | 161 + components/template/activityData.vue | 81 + components/template/advert.vue | 257 ++ components/template/barrage.vue | 146 + components/template/checkCity.vue | 196 ++ components/template/citydeliveryGoods.vue | 329 ++ components/template/commentlist.vue | 552 +++ components/template/custom-digitKeyboard.vue | 388 +++ components/template/demandItem.vue | 442 +++ components/template/diypages.vue | 2137 ++++++++++++ components/template/drawCommodity.vue | 204 ++ components/template/evaluateItem.vue | 229 ++ components/template/farbottom.vue | 351 ++ components/template/filtertab.vue | 969 ++++++ components/template/follow.vue | 313 ++ components/template/footer.vue | 89 + components/template/formItem.vue | 1019 ++++++ components/template/getVXphone.vue | 146 + components/template/goodsHeaderTitle.vue | 78 + components/template/goodslist.vue | 181 + components/template/haodiantoutiao.vue | 193 ++ components/template/homemakingItem.vue | 160 + components/template/homemakingOrder.vue | 302 ++ components/template/imgswipertwo.vue | 172 + components/template/inputPop.vue | 121 + components/template/integralGood.vue | 204 ++ components/template/journey.vue | 233 ++ components/template/lee-select.vue | 500 +++ components/template/live.vue | 515 +++ components/template/loading.vue | 51 + components/template/loadlogo.vue | 53 + components/template/loadmore.vue | 79 + components/template/myserItem.vue | 239 ++ components/template/navBar.vue | 127 + components/template/nonemores.vue | 102 + components/template/numberbox.vue | 210 ++ components/template/partTimeJob.vue | 255 ++ components/template/phoneBinding.vue | 24 + components/template/phoneNavBar.vue | 209 ++ components/template/pic_text/pic_text.vue | 508 +++ .../template/pic_text/pic_text_list.vue | 111 + components/template/popAgreement.vue | 131 + components/template/positionList.vue | 8 + components/template/postList.vue | 1415 ++++++++ components/template/postListTwo.vue | 293 ++ components/template/postManage.vue | 1059 ++++++ components/template/posterlate.vue | 309 ++ components/template/publicgoodstwo.vue | 146 + components/template/rate.vue | 164 + components/template/redPagDown.vue | 381 ++ components/template/redpacket.vue | 300 ++ components/template/screening.vue | 279 ++ components/template/searchView.vue | 209 ++ components/template/serveItem.vue | 62 + components/template/shareBottom.vue | 310 ++ components/template/storeComment.vue | 230 ++ components/template/storeDynamic.vue | 171 + components/template/storeGoods.vue | 436 +++ components/template/storelist.vue | 342 ++ components/template/tabBar.vue | 341 ++ components/template/tabs/tabs.vue | 260 ++ components/template/toplist.vue | 114 + components/template/user.vue | 389 +++ components/template/workList.vue | 242 ++ components/threeComponents/graceChecker.js | 119 + components/v-tabs/.DS_Store | Bin 0 -> 6148 bytes components/v-tabs/v-tabs.vue | 339 ++ components/w-picker/date-picker.vue | 742 ++++ components/w-picker/half-picker.vue | 345 ++ components/w-picker/linkage-picker.vue | 274 ++ components/w-picker/range-picker.vue | 344 ++ components/w-picker/region-picker.vue | 200 ++ components/w-picker/selector-picker.vue | 129 + components/w-picker/shortterm-picker.vue | 240 ++ components/w-picker/time-picker.vue | 218 ++ components/w-picker/w-picker.css | 26 + components/w-picker/w-picker.vue | 348 ++ detailStyle.css | 315 ++ index.html | 45 + main.js | 565 +++ manifest.json | 186 + package-lock.json | 29 + package.json | 35 + pages.json | 2023 +++++++++++ pages/mainPages/Settled/Settled.vue | 2520 ++++++++++++++ pages/mainPages/agreement/agreement.vue | 71 + .../businessDetails/businessDetails.vue | 25 + .../cashApplication/cashApplication.vue | 392 +++ pages/mainPages/comment/comment.vue | 576 +++ .../econdaryClassification.vue | 869 +++++ pages/mainPages/express/express.vue | 217 ++ pages/mainPages/headline/headlineDetail.vue | 1393 ++++++++ pages/mainPages/headline/index.vue | 343 ++ pages/mainPages/headline/message.vue | 131 + pages/mainPages/index/diypage.vue | 932 +++++ pages/mainPages/index/index.vue | 1170 +++++++ pages/mainPages/login/login.vue | 618 ++++ pages/mainPages/login/minLogin.vue | 455 +++ .../getMembership/getMembership.vue | 865 +++++ pages/mainPages/memberCard/interests.vue | 46 + pages/mainPages/memberCard/memberCard.less | 1224 +++++++ pages/mainPages/memberCard/memberCard.vue | 1868 ++++++++++ pages/mainPages/notOpen/notOpen.vue | 251 ++ pages/mainPages/noticeDetail/noticeDetail.vue | 61 + pages/mainPages/orderWrite/orderWrite.vue | 379 ++ pages/mainPages/pay/pay.vue | 29 + pages/mainPages/payment/pay.vue | 116 + pages/mainPages/payment/payment.vue | 895 +++++ .../pocketIInformant/pocketIInformant.vue | 1254 +++++++ pages/mainPages/poster/poster.vue | 307 ++ pages/mainPages/realCard/realCard.vue | 171 + .../mainPages/registerSuses/registerSuses.vue | 79 + .../sendInformation/sendInformation.vue | 457 +++ pages/mainPages/store/index.css | 289 ++ pages/mainPages/store/index.less | 468 +++ pages/mainPages/store/index.vue | 1415 ++++++++ pages/mainPages/store/index/diypage.vue | 769 ++++ pages/mainPages/store/index/index.vue | 453 +++ pages/mainPages/store/list.vue | 357 ++ .../successRelease/successRelease.vue | 250 ++ pages/mainPages/userCenter/userCenter.vue | 1410 ++++++++ pages/mainPages/userset/userset.vue | 315 ++ .../IntegralRecord/IntegralRecord.vue | 233 ++ .../afterSale/afterDatli/afterDatli.vue | 525 +++ pages/subPages/afterSale/index.vue | 373 ++ .../subPages/attestationCenter/bond/bond.vue | 374 ++ .../enterpriseAttestation.vue | 723 ++++ pages/subPages/attestationCenter/index.vue | 257 ++ .../personAttestation/personAttestation.vue | 508 +++ .../balance/activityEntry/activityEntry.vue | 88 + pages/subPages/balance/balance.vue | 325 ++ .../balance/balanceRecord/balanceRecord.vue | 192 + pages/subPages/balance/cash/cash.vue | 540 +++ .../balance/collectMoney/collectMoney.vue | 106 + .../balance/getTheDetails/getTheDetails.vue | 132 + pages/subPages/balance/newPage/newPage.vue | 11 + .../balance/presentMoney/presentMoney.vue | 133 + pages/subPages/balance/previous/previous.vue | 124 + .../bargin/barginDetail/barginDetail.vue | 1164 +++++++ .../subPages/bargin/barginlist/barginlist.vue | 221 ++ .../businesscard/carddetail/carddetail.vue | 654 ++++ .../businesscard/carddetail/detailStyle.css | 318 ++ .../carddetail/renewcarddetail.vue | 408 +++ .../businesscard/formcard/editformcard.vue | 778 +++++ .../businesscard/formcard/formcard.vue | 872 +++++ pages/subPages/businesscard/mycard/mycard.vue | 115 + pages/subPages/buyOrder/index.vue | 311 ++ pages/subPages/callpge/index.vue | 443 +++ pages/subPages/city/city.vue | 249 ++ pages/subPages/city/selectAddress.vue | 338 ++ pages/subPages/commentList/commentList.vue | 145 + .../consumptionRecords/consumptionRecords.vue | 165 + pages/subPages/consumptionRecords/details.vue | 181 + pages/subPages/coupon/coupon.vue | 928 +++++ .../coupon/couponDetails/couponDetails.vue | 413 +++ pages/subPages/createCommodity/index.less | 350 ++ pages/subPages/createCommodity/index.vue | 2161 ++++++++++++ pages/subPages/customer/customer.vue | 166 + pages/subPages/dealer/apply/apply.vue | 567 +++ pages/subPages/dealer/client/client.vue | 371 ++ .../subPages/dealer/contactway/contactway.vue | 642 ++++ pages/subPages/dealer/earnings/earnings.vue | 278 ++ pages/subPages/dealer/gener/gener.vue | 383 ++ pages/subPages/dealer/index/index.vue | 981 ++++++ pages/subPages/dealer/level/level.vue | 404 +++ pages/subPages/dealer/myStore/myStore.vue | 346 ++ .../dealer/myStoreDetails/myStoreDetails.vue | 492 +++ pages/subPages/dealer/rank/rank.vue | 257 ++ pages/subPages/dealer/richtext/setrich.vue | 65 + pages/subPages/dealer/setshop/setshop.vue | 326 ++ pages/subPages/dealer/template/template.vue | 33 + pages/subPages/dealer/withdraw/withdraw.vue | 543 +++ .../dealer/withdraw/withdrawrecord.vue | 218 ++ .../forgetPassword/forgetPassword.vue | 378 ++ pages/subPages/goods/index.css | 1219 +++++++ pages/subPages/goods/index.vue | 2493 +++++++++++++ pages/subPages/goods/methods.js | 9 + pages/subPages/group/assemble/assemble.vue | 804 +++++ pages/subPages/helpCenter/helpCenter.vue | 264 ++ .../helpCenter/helpDetails/helpDetails.vue | 113 + .../helpCenter/problemList/problemList.vue | 123 + pages/subPages/homepage/chat/chat.vue | 329 ++ pages/subPages/homepage/homepage/homepage.vue | 1119 ++++++ pages/subPages/homepage/private/private.vue | 188 + .../integral/integralShop/integralShop.vue | 396 +++ pages/subPages/live/index.vue | 113 + pages/subPages/live/newLive.vue | 420 +++ pages/subPages/liveBack/liveBack.vue | 97 + pages/subPages/livePlayer/livePlayer.vue | 31 + .../merchant/bindingClerk/bindingClerk.vue | 158 + .../merchant/dynamicList/dynamicList.vue | 365 ++ .../merchant/merchantCash/merchantCash.vue | 575 +++ .../merchantChangeShop/merchantChangeShop.vue | 373 ++ .../merchant/merchantChat/merchantChat.vue | 610 ++++ .../merchantClerkEdit/merchantClerkEdit.vue | 348 ++ .../merchantClerkList/merchantClerkList.vue | 444 +++ .../merchantComment/merchantComment.vue | 530 +++ .../js_sdk/u-charts/u-charts/component.vue | 165 + .../js_sdk/u-charts/u-charts/u-charts.min.js | 1 + .../merchant/merchantHome/merchantHome.vue | 899 +++++ .../merchant/merchantMsg/merchantMsg.vue | 513 +++ .../merchantNotice/merchantNotice.vue | 324 ++ .../merchant/merchantOrder/merchantOrder.vue | 935 +++++ .../merchantOrderList/merchantOrderList.vue | 1479 ++++++++ .../merchantPayDetails/merchantPayDetails.vue | 372 ++ .../merchantRecord/merchantRecord.vue | 928 +++++ .../merchant/merchantReply/merchantReply.vue | 415 +++ .../merchantSuccess/merchantSuccess.vue | 145 + .../merchant/merchantTips/merchantTips.vue | 332 ++ .../merchantUerCenter/merchantUerCenter.vue | 656 ++++ .../merchantVerification.vue | 446 +++ .../merchant/sendDynamic/sendDynamic.vue | 295 ++ pages/subPages/merchant/set/set.vue | 1860 ++++++++++ .../merchant/storePcLogin/storePcLogin.vue | 93 + .../mineCollection/mineCollection.vue | 549 +++ pages/subPages/myPost/myPost.vue | 305 ++ .../orderList/afterSale/afterSale.vue | 943 +++++ .../orderList/orderDetails/orderDetails.vue | 1611 +++++++++ pages/subPages/orderList/orderList.vue | 890 +++++ .../orderList/orderTakeout/orderTakeout.vue | 381 ++ pages/subPages/paySuccess/paySuccess.vue | 822 +++++ pages/subPages/postDetails/postDetails.less | 1246 +++++++ pages/subPages/postDetails/postDetails.vue | 1790 ++++++++++ pages/subPages/postRelease/postRelease.vue | 1542 +++++++++ .../addReceivingAddress.vue | 690 ++++ .../receivingAddress/receivingAddress.vue | 309 ++ pages/subPages/redpacket/myredpacket.vue | 866 +++++ pages/subPages/redpacket/redsquare.vue | 224 ++ pages/subPages/register/register.vue | 517 +++ pages/subPages/search/search.vue | 460 +++ pages/subPages/shareMaterials/index.vue | 416 +++ pages/subPages/signdesk/index/index.vue | 500 +++ pages/subPages/signdesk/rank/rank.vue | 322 ++ pages/subPages/signdesk/record/record.vue | 171 + .../subPages/special/rushspeci/rushspeci.vue | 157 + pages/subPages/submitOrder/submitOrder.vue | 2139 ++++++++++++ pages/subPages/webview/webview.vue | 21 + pages/subPages/writeRecord/index.vue | 840 +++++ pages/subPages2/blindDate/dynamics/detail.vue | 504 +++ pages/subPages2/blindDate/dynamics/edit.vue | 565 +++ pages/subPages2/blindDate/dynamics/index.vue | 152 + pages/subPages2/blindDate/dynamics/myself.vue | 181 + pages/subPages2/blindDate/extension.vue | 353 ++ .../blindDate/form/matchmakerApply.vue | 460 +++ pages/subPages2/blindDate/form/userInfo.vue | 1459 ++++++++ pages/subPages2/blindDate/index.vue | 433 +++ .../subPages2/blindDate/matchmakerService.vue | 231 ++ pages/subPages2/blindDate/member/all.vue | 315 ++ pages/subPages2/blindDate/member/detail.vue | 901 +++++ pages/subPages2/blindDate/member/open.vue | 268 ++ .../subPages2/blindDate/member/recommend.vue | 168 + pages/subPages2/blindDate/personal.vue | 432 +++ pages/subPages2/blindDate/recommend.vue | 368 ++ pages/subPages2/blindDate/record.vue | 123 + pages/subPages2/blindDate/template/navbar.vue | 95 + .../blindDate/template/personalItem.vue | 490 +++ pages/subPages2/blindDate/template/user.vue | 298 ++ pages/subPages2/blindDate/withdraw.vue | 542 +++ .../bookedInformation/bookedInformation.vue | 391 +++ .../booked/bookedTime/bookedTime.vue | 437 +++ .../reservationList/reservationList.vue | 442 +++ .../businessCenter/businessCenter.vue | 527 +++ .../foodIntroduced/foodIntroduced.vue | 602 ++++ .../businessCenter/foodList/foodList.vue | 457 +++ .../businessCenter/foodOrder/foodOrder.vue | 1431 ++++++++ .../foodShopping/foodShopping.vue | 524 +++ .../businessCenter/redReceive/redReceive.vue | 422 +++ pages/subPages2/cleanCustom/bindingPhone.vue | 200 ++ pages/subPages2/cleanCustom/cleanCustom.vue | 213 ++ pages/subPages2/coursegoods/coursegoods.vue | 998 ++++++ .../establishDoods/establishDoods.vue | 1651 +++++++++ .../coursegoods/localindex/localindex.vue | 388 +++ pages/subPages2/drawGame/drawGame.vue | 1456 ++++++++ pages/subPages2/drawGame/gameIntegral.vue | 251 ++ pages/subPages2/drawGame/myPrize.vue | 251 ++ pages/subPages2/grace/animate.css | 2052 +++++++++++ .../hirePlatform/addResume/addResume.vue | 1757 ++++++++++ .../companiesList/companiesList.vue | 328 ++ .../companyDetails/companyDetails.vue | 472 +++ .../curriculumVitae/curriculumVitae.vue | 757 ++++ .../hirePlatform/deliverList/deliverList.vue | 158 + .../hiringResume/hiringResume.vue | 234 ++ .../postRecruitment/postRecruitment.vue | 2354 +++++++++++++ .../recruitmentDetails/recruitmentDetails.vue | 757 ++++ .../recruitmentEnter/recruitmentEnter.vue | 516 +++ .../recruitmentList/recruitmentList.vue | 313 ++ .../subPages2/hirePlatform/resume/resume.vue | 618 ++++ .../hirePlatform/serchWork/serchWork.vue | 167 + .../workClassList/workClassList.vue | 201 ++ .../hitchRide/hitchList/hitchList.vue | 208 ++ .../hitchRideDetails/hitchRideDetails.vue | 395 +++ .../hitchRide/hitchSchedule/hitchSchedule.vue | 953 +++++ pages/subPages2/hitchRide/index/index.vue | 595 ++++ .../personalCenter/personalCenter.vue | 143 + .../customerDemand/customerDemand.vue | 173 + .../homemaking/homeUser/homeUser.vue | 311 ++ .../homemaking/homemaSearch/homemaSearch.vue | 235 ++ .../homemakingDetails/homemakingDetails.vue | 700 ++++ .../homemakingMerchant/homemakingMerchant.vue | 165 + .../homemakingUser/homemakingUser.vue | 9 + .../homepersonalCenter/homepersonalCenter.vue | 327 ++ .../homemaking/myDemand/myDemand.vue | 112 + .../myServiceList/myServiceList.vue | 220 ++ .../homemaking/myorderForm/myorderForm.vue | 142 + .../homemaking/postDemand/postDemand.vue | 618 ++++ .../homemaking/pubService/pubService.vue | 734 ++++ .../homemaking/serviceIn/serviceIn.vue | 988 ++++++ .../lottery/lotteryCode/lotteryCode.vue | 332 ++ .../lottery/lotteryIndex/lotteryIndex.vue | 1231 +++++++ .../lottery/lotteryList/lotteryList.vue | 148 + pages/subPages2/lottery/previous/previous.vue | 200 ++ .../management/addGoods/addGoods.vue | 712 ++++ .../management/foodclassify/foodclassify.vue | 193 ++ pages/subPages2/management/management.vue | 852 +++++ pages/subPages2/map/address-search.vue | 142 + pages/subPages2/map/index.vue | 409 +++ pages/subPages2/newBuyOrder/buyOrder.vue | 1269 +++++++ pages/subPages2/newBuyOrder/newBuyOrder.vue | 795 +++++ pages/subPages2/orderLink/orderLink.vue | 51 + pages/subPages2/panorama/panorama.vue | 25 + .../phoneBook/enterForm/enterForm.vue | 1134 ++++++ .../phoneBook/goodsClass/goodsClass.vue | 186 + .../phoneBook/logistics/logistics.vue | 975 ++++++ pages/subPages2/phoneBook/myGoods/myGoods.vue | 288 ++ pages/subPages2/phoneBook/phoneBook.vue | 653 ++++ .../phoneBook/phoneClass/phoneClass.vue | 213 ++ .../phoneBook/yellowGoods/yellowGoods.vue | 126 + pages/subPages2/practice/partTimeJob.vue | 268 ++ pages/subPages2/practice/practice.vue | 22 + pages/subPages2/redClothes/redClothes.vue | 224 ++ pages/subPages2/storeClass/storeClass.vue | 189 + pages/subPages2/subscription/subscription.vue | 281 ++ pages/subPages2/tamplate/FGame.vue | 203 ++ pages/subPages2/tamplate/FGamesix.vue | 201 ++ .../tamplate/choose-Cade/choose-Cade.vue | 142 + .../tamplate/evan-radio/evan-radio-group.vue | 52 + .../tamplate/evan-radio/evan-radio.vue | 229 ++ pages/subPages2/tamplate/foodCategory.vue | 659 ++++ pages/subPages2/tamplate/foodComment.vue | 107 + pages/subPages2/tamplate/shopPing.vue | 61 + pages/subPages2/tamplate/shoppingFixation.vue | 220 ++ pages/subPages2/tamplate/uni-icons/icons.js | 96 + .../tamplate/uni-icons/uni-icons.vue | 35 + pages/subPages2/userInfo/userInfo.vue | 214 ++ pages/subPages2/voucherCenter/phoneOrders.vue | 209 ++ .../subPages2/voucherCenter/voucherCenter.vue | 435 +++ pagesA/articleDetails/articleDetails.vue | 230 ++ pagesA/businessCooperation/index.vue | 400 +++ pagesA/campusActivities/campusActivities.vue | 270 ++ pagesA/campusActivities/index.vue | 101 + pagesA/campusActivities/myActivities.vue | 105 + pagesA/commentSubject/commentSubject.vue | 139 + pagesA/follow_fans/fans.vue | 88 + pagesA/follow_fans/follow.vue | 87 + pagesA/identityList/bloggerCertification.vue | 401 +++ pagesA/identityList/identityList.vue | 112 + pagesA/identityList/teacherCertification.vue | 376 ++ pagesA/informationHot/informationHot.vue | 115 + pagesA/instantMessenger/instantMessenger.vue | 1739 ++++++++++ .../pictureTextDetails/pictureTextDetails.vue | 617 ++++ pagesA/rule_center/rule_center.vue | 101 + .../studentIdentification.vue | 512 +++ pagesA/topSearch/topSearch.vue | 163 + project.config.json | 29 + project.private.config.json | 21 + siteinfo.json | 8 + static/Influencer-rafiki.png | Bin 0 -> 12261 bytes static/Learning-cuate.png | Bin 0 -> 14471 bytes static/Learning-pana.png | Bin 0 -> 9281 bytes static/chooseCade/BG.png | Bin 0 -> 1576 bytes static/chooseCade/biaoqing.png | Bin 0 -> 1267 bytes static/chooseCade/chooseCadecc.png | Bin 0 -> 262 bytes static/chooseCade/chooseCades.png | Bin 0 -> 269 bytes static/chooseCade/chooseCadex.png | Bin 0 -> 262 bytes static/chooseCade/qian.png | Bin 0 -> 720 bytes static/chooseCade/reddogbg.png | Bin 0 -> 6393 bytes static/home_123.png | Bin 0 -> 609 bytes static/hot_list_logo.png | Bin 0 -> 13232 bytes static/icon_certificate.png | Bin 0 -> 916 bytes static/icon_position.png | Bin 0 -> 1528 bytes static/logo.png | Bin 0 -> 6985 bytes static/mb-plus.png | Bin 0 -> 157 bytes static/partner-rafiki.png | Bin 0 -> 8448 bytes static/rule.png | Bin 0 -> 290 bytes store/actions.js | 34 + store/index.js | 43 + store/mutation-types.js | 24 + store/mutations.js | 102 + uni.scss | 76 + uni_modules/uni-datetime-picker/changelog.md | 130 + .../uni-datetime-picker/calendar-item.vue | 186 + .../uni-datetime-picker/calendar.vue | 944 +++++ .../uni-datetime-picker/i18n/en.json | 22 + .../uni-datetime-picker/i18n/index.js | 8 + .../uni-datetime-picker/i18n/zh-Hans.json | 22 + .../uni-datetime-picker/i18n/zh-Hant.json | 22 + .../uni-datetime-picker/time-picker.vue | 933 +++++ .../uni-datetime-picker.vue | 1026 ++++++ .../components/uni-datetime-picker/util.js | 464 +++ uni_modules/uni-datetime-picker/package.json | 87 + uni_modules/uni-datetime-picker/readme.md | 21 + uni_modules/uni-icons/changelog.md | 22 + .../uni-icons/components/uni-icons/icons.js | 1169 +++++++ .../components/uni-icons/uni-icons.vue | 96 + .../components/uni-icons/uniicons.css | 663 ++++ .../components/uni-icons/uniicons.ttf | Bin 0 -> 35760 bytes uni_modules/uni-icons/package.json | 86 + uni_modules/uni-icons/readme.md | 8 + uni_modules/uni-scss/changelog.md | 8 + uni_modules/uni-scss/index.scss | 1 + uni_modules/uni-scss/package.json | 82 + uni_modules/uni-scss/readme.md | 4 + uni_modules/uni-scss/styles/index.scss | 7 + .../uni-scss/styles/setting/_border.scss | 3 + .../uni-scss/styles/setting/_color.scss | 66 + .../uni-scss/styles/setting/_radius.scss | 55 + .../uni-scss/styles/setting/_space.scss | 56 + .../uni-scss/styles/setting/_styles.scss | 167 + .../uni-scss/styles/setting/_text.scss | 24 + .../uni-scss/styles/setting/_variables.scss | 146 + .../uni-scss/styles/tools/functions.scss | 19 + uni_modules/uni-scss/theme.scss | 31 + uni_modules/uni-scss/variables.scss | 62 + version.json | 6 + vuex/LICENSE | 21 + vuex/README.md | 29 + vuex/dist/logger.d.ts | 15 + vuex/dist/logger.js | 122 + vuex/dist/vuex.common.js | 932 +++++ vuex/dist/vuex.esm.js | 931 +++++ vuex/dist/vuex.js | 938 +++++ vuex/dist/vuex.min.js | 6 + vuex/package.json | 105 + vuex/types/README.md | 7 + vuex/types/helpers.d.ts | 68 + vuex/types/index.d.ts | 128 + vuex/types/vue.d.ts | 18 + 502 files changed, 197060 insertions(+) create mode 100644 .gitignore create mode 100644 .hbuilderx/launch.json create mode 100644 App.vue create mode 100644 common/css/common.css create mode 100644 common/css/diyPages.css create mode 100644 common/css/iconfont.css create mode 100644 common/css/iconfont.ttf create mode 100644 common/css/new_iconfont.css create mode 100644 common/css/old_diyPages.css create mode 100644 common/js/app.js create mode 100644 common/js/ms-openMap/openMap.js create mode 100644 common/js/ms-openMap/transformCoordinate.js create mode 100644 common/js/pageListMixin.js create mode 100644 common/js/qqmap-wx-jssdk.min.js create mode 100644 common/js/recorder.js create mode 100644 common/js/setData.js create mode 100644 common/js/util.js create mode 100644 common/js/wxApi.js create mode 100644 components/.DS_Store create mode 100644 components/drag-button/drag-button.vue create mode 100644 components/hx-jump-ball/hx-jump-ball.vue create mode 100644 components/invinbg-image-cropper/.DS_Store create mode 100644 components/invinbg-image-cropper/invinbg-image-cropper.vue create mode 100644 components/jin-edit/jin-edit.vue create mode 100644 components/jin-edit/jin-icons.vue create mode 100644 components/junyi-h5-copy/junyi-h5-copy.js create mode 100644 components/jyf-parser/jyf-parser.vue create mode 100644 components/jyf-parser/libs/CssHandler.js create mode 100644 components/jyf-parser/libs/MpHtmlParser.js create mode 100644 components/jyf-parser/libs/config.js create mode 100644 components/jyf-parser/libs/handler.sjs create mode 100644 components/jyf-parser/libs/handler.wxs create mode 100644 components/jyf-parser/libs/trees.vue create mode 100644 components/lb-picker/index.vue create mode 100644 components/lb-picker/mixins/index.js create mode 100644 components/lb-picker/pickers/multi-selector-picker.vue create mode 100644 components/lb-picker/pickers/selector-picker.vue create mode 100644 components/lb-picker/pickers/unlinked-selector-picker.vue create mode 100644 components/lb-picker/style/picker-item.scss create mode 100644 components/lb-picker/style/picker.scss create mode 100644 components/lb-picker/utils.js create mode 100644 components/page/pageComponents/Recommend_goods.vue create mode 100644 components/page/pageComponents/Video.vue create mode 100644 components/page/pageComponents/businessCard.vue create mode 100644 components/page/pageComponents/citywide.vue create mode 100644 components/page/pageComponents/discountCard.vue create mode 100644 components/page/pageComponents/giftbag.vue create mode 100644 components/page/pageComponents/goods.vue create mode 100644 components/page/pageComponents/goodsStyle.vue create mode 100644 components/page/pageComponents/integral.vue create mode 100644 components/page/pageComponents/region.vue create mode 100644 components/page/pageComponents/shopEnter.vue create mode 100644 components/page/pageComponents/shopInfo.vue create mode 100644 components/page/pageComponents/tabContro.vue create mode 100644 components/page/pageComponents/tabMenu.vue create mode 100644 components/raffle-wheel/raffle-wheel.vue create mode 100644 components/rattenking-dtpicker/GetDate.js create mode 100644 components/rattenking-dtpicker/rattenking-dtpicker.vue create mode 100644 components/template/Abnor.vue create mode 100644 components/template/GoTopBtn.vue create mode 100644 components/template/GoodsBuyMenu.vue create mode 100644 components/template/PartLoading.vue create mode 100644 components/template/PhoneMask.vue create mode 100644 components/template/PopManager.vue create mode 100644 components/template/Skip.vue create mode 100644 components/template/Swiper.vue create mode 100644 components/template/activityData.vue create mode 100644 components/template/advert.vue create mode 100644 components/template/barrage.vue create mode 100644 components/template/checkCity.vue create mode 100644 components/template/citydeliveryGoods.vue create mode 100644 components/template/commentlist.vue create mode 100644 components/template/custom-digitKeyboard.vue create mode 100644 components/template/demandItem.vue create mode 100644 components/template/diypages.vue create mode 100644 components/template/drawCommodity.vue create mode 100644 components/template/evaluateItem.vue create mode 100644 components/template/farbottom.vue create mode 100644 components/template/filtertab.vue create mode 100644 components/template/follow.vue create mode 100644 components/template/footer.vue create mode 100644 components/template/formItem.vue create mode 100644 components/template/getVXphone.vue create mode 100644 components/template/goodsHeaderTitle.vue create mode 100644 components/template/goodslist.vue create mode 100644 components/template/haodiantoutiao.vue create mode 100644 components/template/homemakingItem.vue create mode 100644 components/template/homemakingOrder.vue create mode 100644 components/template/imgswipertwo.vue create mode 100644 components/template/inputPop.vue create mode 100644 components/template/integralGood.vue create mode 100644 components/template/journey.vue create mode 100644 components/template/lee-select.vue create mode 100644 components/template/live.vue create mode 100644 components/template/loading.vue create mode 100644 components/template/loadlogo.vue create mode 100644 components/template/loadmore.vue create mode 100644 components/template/myserItem.vue create mode 100644 components/template/navBar.vue create mode 100644 components/template/nonemores.vue create mode 100644 components/template/numberbox.vue create mode 100644 components/template/partTimeJob.vue create mode 100644 components/template/phoneBinding.vue create mode 100644 components/template/phoneNavBar.vue create mode 100644 components/template/pic_text/pic_text.vue create mode 100644 components/template/pic_text/pic_text_list.vue create mode 100644 components/template/popAgreement.vue create mode 100644 components/template/positionList.vue create mode 100644 components/template/postList.vue create mode 100644 components/template/postListTwo.vue create mode 100644 components/template/postManage.vue create mode 100644 components/template/posterlate.vue create mode 100644 components/template/publicgoodstwo.vue create mode 100644 components/template/rate.vue create mode 100644 components/template/redPagDown.vue create mode 100644 components/template/redpacket.vue create mode 100644 components/template/screening.vue create mode 100644 components/template/searchView.vue create mode 100644 components/template/serveItem.vue create mode 100644 components/template/shareBottom.vue create mode 100644 components/template/storeComment.vue create mode 100644 components/template/storeDynamic.vue create mode 100644 components/template/storeGoods.vue create mode 100644 components/template/storelist.vue create mode 100644 components/template/tabBar.vue create mode 100644 components/template/tabs/tabs.vue create mode 100644 components/template/toplist.vue create mode 100644 components/template/user.vue create mode 100644 components/template/workList.vue create mode 100644 components/threeComponents/graceChecker.js create mode 100644 components/v-tabs/.DS_Store create mode 100644 components/v-tabs/v-tabs.vue create mode 100644 components/w-picker/date-picker.vue create mode 100644 components/w-picker/half-picker.vue create mode 100644 components/w-picker/linkage-picker.vue create mode 100644 components/w-picker/range-picker.vue create mode 100644 components/w-picker/region-picker.vue create mode 100644 components/w-picker/selector-picker.vue create mode 100644 components/w-picker/shortterm-picker.vue create mode 100644 components/w-picker/time-picker.vue create mode 100644 components/w-picker/w-picker.css create mode 100644 components/w-picker/w-picker.vue create mode 100644 detailStyle.css create mode 100644 index.html create mode 100644 main.js create mode 100644 manifest.json create mode 100644 package-lock.json create mode 100644 package.json create mode 100644 pages.json create mode 100644 pages/mainPages/Settled/Settled.vue create mode 100644 pages/mainPages/agreement/agreement.vue create mode 100644 pages/mainPages/businessDetails/businessDetails.vue create mode 100644 pages/mainPages/cashApplication/cashApplication.vue create mode 100644 pages/mainPages/comment/comment.vue create mode 100644 pages/mainPages/econdaryClassification/econdaryClassification.vue create mode 100644 pages/mainPages/express/express.vue create mode 100644 pages/mainPages/headline/headlineDetail.vue create mode 100644 pages/mainPages/headline/index.vue create mode 100644 pages/mainPages/headline/message.vue create mode 100644 pages/mainPages/index/diypage.vue create mode 100644 pages/mainPages/index/index.vue create mode 100644 pages/mainPages/login/login.vue create mode 100644 pages/mainPages/login/minLogin.vue create mode 100644 pages/mainPages/memberCard/getMembership/getMembership.vue create mode 100644 pages/mainPages/memberCard/interests.vue create mode 100644 pages/mainPages/memberCard/memberCard.less create mode 100644 pages/mainPages/memberCard/memberCard.vue create mode 100644 pages/mainPages/notOpen/notOpen.vue create mode 100644 pages/mainPages/noticeDetail/noticeDetail.vue create mode 100644 pages/mainPages/orderWrite/orderWrite.vue create mode 100644 pages/mainPages/pay/pay.vue create mode 100644 pages/mainPages/payment/pay.vue create mode 100644 pages/mainPages/payment/payment.vue create mode 100644 pages/mainPages/pocketIInformant/pocketIInformant.vue create mode 100644 pages/mainPages/poster/poster.vue create mode 100644 pages/mainPages/realCard/realCard.vue create mode 100644 pages/mainPages/registerSuses/registerSuses.vue create mode 100644 pages/mainPages/sendInformation/sendInformation.vue create mode 100644 pages/mainPages/store/index.css create mode 100644 pages/mainPages/store/index.less create mode 100644 pages/mainPages/store/index.vue create mode 100644 pages/mainPages/store/index/diypage.vue create mode 100644 pages/mainPages/store/index/index.vue create mode 100644 pages/mainPages/store/list.vue create mode 100644 pages/mainPages/successRelease/successRelease.vue create mode 100644 pages/mainPages/userCenter/userCenter.vue create mode 100644 pages/mainPages/userset/userset.vue create mode 100644 pages/subPages/IntegralRecord/IntegralRecord.vue create mode 100644 pages/subPages/afterSale/afterDatli/afterDatli.vue create mode 100644 pages/subPages/afterSale/index.vue create mode 100644 pages/subPages/attestationCenter/bond/bond.vue create mode 100644 pages/subPages/attestationCenter/enterpriseAttestation/enterpriseAttestation.vue create mode 100644 pages/subPages/attestationCenter/index.vue create mode 100644 pages/subPages/attestationCenter/personAttestation/personAttestation.vue create mode 100644 pages/subPages/balance/activityEntry/activityEntry.vue create mode 100644 pages/subPages/balance/balance.vue create mode 100644 pages/subPages/balance/balanceRecord/balanceRecord.vue create mode 100644 pages/subPages/balance/cash/cash.vue create mode 100644 pages/subPages/balance/collectMoney/collectMoney.vue create mode 100644 pages/subPages/balance/getTheDetails/getTheDetails.vue create mode 100644 pages/subPages/balance/newPage/newPage.vue create mode 100644 pages/subPages/balance/presentMoney/presentMoney.vue create mode 100644 pages/subPages/balance/previous/previous.vue create mode 100644 pages/subPages/bargin/barginDetail/barginDetail.vue create mode 100644 pages/subPages/bargin/barginlist/barginlist.vue create mode 100644 pages/subPages/businesscard/carddetail/carddetail.vue create mode 100644 pages/subPages/businesscard/carddetail/detailStyle.css create mode 100644 pages/subPages/businesscard/carddetail/renewcarddetail.vue create mode 100644 pages/subPages/businesscard/formcard/editformcard.vue create mode 100644 pages/subPages/businesscard/formcard/formcard.vue create mode 100644 pages/subPages/businesscard/mycard/mycard.vue create mode 100644 pages/subPages/buyOrder/index.vue create mode 100644 pages/subPages/callpge/index.vue create mode 100644 pages/subPages/city/city.vue create mode 100644 pages/subPages/city/selectAddress.vue create mode 100644 pages/subPages/commentList/commentList.vue create mode 100644 pages/subPages/consumptionRecords/consumptionRecords.vue create mode 100644 pages/subPages/consumptionRecords/details.vue create mode 100644 pages/subPages/coupon/coupon.vue create mode 100644 pages/subPages/coupon/couponDetails/couponDetails.vue create mode 100644 pages/subPages/createCommodity/index.less create mode 100644 pages/subPages/createCommodity/index.vue create mode 100644 pages/subPages/customer/customer.vue create mode 100644 pages/subPages/dealer/apply/apply.vue create mode 100644 pages/subPages/dealer/client/client.vue create mode 100644 pages/subPages/dealer/contactway/contactway.vue create mode 100644 pages/subPages/dealer/earnings/earnings.vue create mode 100644 pages/subPages/dealer/gener/gener.vue create mode 100644 pages/subPages/dealer/index/index.vue create mode 100644 pages/subPages/dealer/level/level.vue create mode 100644 pages/subPages/dealer/myStore/myStore.vue create mode 100644 pages/subPages/dealer/myStoreDetails/myStoreDetails.vue create mode 100644 pages/subPages/dealer/rank/rank.vue create mode 100644 pages/subPages/dealer/richtext/setrich.vue create mode 100644 pages/subPages/dealer/setshop/setshop.vue create mode 100644 pages/subPages/dealer/template/template.vue create mode 100644 pages/subPages/dealer/withdraw/withdraw.vue create mode 100644 pages/subPages/dealer/withdraw/withdrawrecord.vue create mode 100644 pages/subPages/forgetPassword/forgetPassword.vue create mode 100644 pages/subPages/goods/index.css create mode 100644 pages/subPages/goods/index.vue create mode 100644 pages/subPages/goods/methods.js create mode 100644 pages/subPages/group/assemble/assemble.vue create mode 100644 pages/subPages/helpCenter/helpCenter.vue create mode 100644 pages/subPages/helpCenter/helpDetails/helpDetails.vue create mode 100644 pages/subPages/helpCenter/problemList/problemList.vue create mode 100644 pages/subPages/homepage/chat/chat.vue create mode 100644 pages/subPages/homepage/homepage/homepage.vue create mode 100644 pages/subPages/homepage/private/private.vue create mode 100644 pages/subPages/integral/integralShop/integralShop.vue create mode 100644 pages/subPages/live/index.vue create mode 100644 pages/subPages/live/newLive.vue create mode 100644 pages/subPages/liveBack/liveBack.vue create mode 100644 pages/subPages/livePlayer/livePlayer.vue create mode 100644 pages/subPages/merchant/bindingClerk/bindingClerk.vue create mode 100644 pages/subPages/merchant/dynamicList/dynamicList.vue create mode 100644 pages/subPages/merchant/merchantCash/merchantCash.vue create mode 100644 pages/subPages/merchant/merchantChangeShop/merchantChangeShop.vue create mode 100644 pages/subPages/merchant/merchantChat/merchantChat.vue create mode 100644 pages/subPages/merchant/merchantClerkEdit/merchantClerkEdit.vue create mode 100644 pages/subPages/merchant/merchantClerkList/merchantClerkList.vue create mode 100644 pages/subPages/merchant/merchantComment/merchantComment.vue create mode 100644 pages/subPages/merchant/merchantHome/js_sdk/u-charts/u-charts/component.vue create mode 100644 pages/subPages/merchant/merchantHome/js_sdk/u-charts/u-charts/u-charts.min.js create mode 100644 pages/subPages/merchant/merchantHome/merchantHome.vue create mode 100644 pages/subPages/merchant/merchantMsg/merchantMsg.vue create mode 100644 pages/subPages/merchant/merchantNotice/merchantNotice.vue create mode 100644 pages/subPages/merchant/merchantOrder/merchantOrder.vue create mode 100644 pages/subPages/merchant/merchantOrderList/merchantOrderList.vue create mode 100644 pages/subPages/merchant/merchantPayDetails/merchantPayDetails.vue create mode 100644 pages/subPages/merchant/merchantRecord/merchantRecord.vue create mode 100644 pages/subPages/merchant/merchantReply/merchantReply.vue create mode 100644 pages/subPages/merchant/merchantSuccess/merchantSuccess.vue create mode 100644 pages/subPages/merchant/merchantTips/merchantTips.vue create mode 100644 pages/subPages/merchant/merchantUerCenter/merchantUerCenter.vue create mode 100644 pages/subPages/merchant/merchantVerification/merchantVerification.vue create mode 100644 pages/subPages/merchant/sendDynamic/sendDynamic.vue create mode 100644 pages/subPages/merchant/set/set.vue create mode 100644 pages/subPages/merchant/storePcLogin/storePcLogin.vue create mode 100644 pages/subPages/mineCollection/mineCollection.vue create mode 100644 pages/subPages/myPost/myPost.vue create mode 100644 pages/subPages/orderList/afterSale/afterSale.vue create mode 100644 pages/subPages/orderList/orderDetails/orderDetails.vue create mode 100644 pages/subPages/orderList/orderList.vue create mode 100644 pages/subPages/orderList/orderTakeout/orderTakeout.vue create mode 100644 pages/subPages/paySuccess/paySuccess.vue create mode 100644 pages/subPages/postDetails/postDetails.less create mode 100644 pages/subPages/postDetails/postDetails.vue create mode 100644 pages/subPages/postRelease/postRelease.vue create mode 100644 pages/subPages/receivingAddress/addReceivingAddress/addReceivingAddress.vue create mode 100644 pages/subPages/receivingAddress/receivingAddress.vue create mode 100644 pages/subPages/redpacket/myredpacket.vue create mode 100644 pages/subPages/redpacket/redsquare.vue create mode 100644 pages/subPages/register/register.vue create mode 100644 pages/subPages/search/search.vue create mode 100644 pages/subPages/shareMaterials/index.vue create mode 100644 pages/subPages/signdesk/index/index.vue create mode 100644 pages/subPages/signdesk/rank/rank.vue create mode 100644 pages/subPages/signdesk/record/record.vue create mode 100644 pages/subPages/special/rushspeci/rushspeci.vue create mode 100644 pages/subPages/submitOrder/submitOrder.vue create mode 100644 pages/subPages/webview/webview.vue create mode 100644 pages/subPages/writeRecord/index.vue create mode 100644 pages/subPages2/blindDate/dynamics/detail.vue create mode 100644 pages/subPages2/blindDate/dynamics/edit.vue create mode 100644 pages/subPages2/blindDate/dynamics/index.vue create mode 100644 pages/subPages2/blindDate/dynamics/myself.vue create mode 100644 pages/subPages2/blindDate/extension.vue create mode 100644 pages/subPages2/blindDate/form/matchmakerApply.vue create mode 100644 pages/subPages2/blindDate/form/userInfo.vue create mode 100644 pages/subPages2/blindDate/index.vue create mode 100644 pages/subPages2/blindDate/matchmakerService.vue create mode 100644 pages/subPages2/blindDate/member/all.vue create mode 100644 pages/subPages2/blindDate/member/detail.vue create mode 100644 pages/subPages2/blindDate/member/open.vue create mode 100644 pages/subPages2/blindDate/member/recommend.vue create mode 100644 pages/subPages2/blindDate/personal.vue create mode 100644 pages/subPages2/blindDate/recommend.vue create mode 100644 pages/subPages2/blindDate/record.vue create mode 100644 pages/subPages2/blindDate/template/navbar.vue create mode 100644 pages/subPages2/blindDate/template/personalItem.vue create mode 100644 pages/subPages2/blindDate/template/user.vue create mode 100644 pages/subPages2/blindDate/withdraw.vue create mode 100644 pages/subPages2/booked/bookedInformation/bookedInformation.vue create mode 100644 pages/subPages2/booked/bookedTime/bookedTime.vue create mode 100644 pages/subPages2/booked/reservationList/reservationList.vue create mode 100644 pages/subPages2/businessCenter/businessCenter.vue create mode 100644 pages/subPages2/businessCenter/foodIntroduced/foodIntroduced.vue create mode 100644 pages/subPages2/businessCenter/foodList/foodList.vue create mode 100644 pages/subPages2/businessCenter/foodOrder/foodOrder.vue create mode 100644 pages/subPages2/businessCenter/foodShopping/foodShopping.vue create mode 100644 pages/subPages2/businessCenter/redReceive/redReceive.vue create mode 100644 pages/subPages2/cleanCustom/bindingPhone.vue create mode 100644 pages/subPages2/cleanCustom/cleanCustom.vue create mode 100644 pages/subPages2/coursegoods/coursegoods.vue create mode 100644 pages/subPages2/coursegoods/establishDoods/establishDoods.vue create mode 100644 pages/subPages2/coursegoods/localindex/localindex.vue create mode 100644 pages/subPages2/drawGame/drawGame.vue create mode 100644 pages/subPages2/drawGame/gameIntegral.vue create mode 100644 pages/subPages2/drawGame/myPrize.vue create mode 100644 pages/subPages2/grace/animate.css create mode 100644 pages/subPages2/hirePlatform/addResume/addResume.vue create mode 100644 pages/subPages2/hirePlatform/companiesList/companiesList.vue create mode 100644 pages/subPages2/hirePlatform/companyDetails/companyDetails.vue create mode 100644 pages/subPages2/hirePlatform/curriculumVitae/curriculumVitae.vue create mode 100644 pages/subPages2/hirePlatform/deliverList/deliverList.vue create mode 100644 pages/subPages2/hirePlatform/hiringResume/hiringResume.vue create mode 100644 pages/subPages2/hirePlatform/postRecruitment/postRecruitment.vue create mode 100644 pages/subPages2/hirePlatform/recruitmentDetails/recruitmentDetails.vue create mode 100644 pages/subPages2/hirePlatform/recruitmentEnter/recruitmentEnter.vue create mode 100644 pages/subPages2/hirePlatform/recruitmentList/recruitmentList.vue create mode 100644 pages/subPages2/hirePlatform/resume/resume.vue create mode 100644 pages/subPages2/hirePlatform/serchWork/serchWork.vue create mode 100644 pages/subPages2/hirePlatform/workClassList/workClassList.vue create mode 100644 pages/subPages2/hitchRide/hitchList/hitchList.vue create mode 100644 pages/subPages2/hitchRide/hitchRideDetails/hitchRideDetails.vue create mode 100644 pages/subPages2/hitchRide/hitchSchedule/hitchSchedule.vue create mode 100644 pages/subPages2/hitchRide/index/index.vue create mode 100644 pages/subPages2/hitchRide/personalCenter/personalCenter.vue create mode 100644 pages/subPages2/homemaking/customerDemand/customerDemand.vue create mode 100644 pages/subPages2/homemaking/homeUser/homeUser.vue create mode 100644 pages/subPages2/homemaking/homemaSearch/homemaSearch.vue create mode 100644 pages/subPages2/homemaking/homemakingDetails/homemakingDetails.vue create mode 100644 pages/subPages2/homemaking/homemakingMerchant/homemakingMerchant.vue create mode 100644 pages/subPages2/homemaking/homemakingUser/homemakingUser.vue create mode 100644 pages/subPages2/homemaking/homepersonalCenter/homepersonalCenter.vue create mode 100644 pages/subPages2/homemaking/myDemand/myDemand.vue create mode 100644 pages/subPages2/homemaking/myServiceList/myServiceList.vue create mode 100644 pages/subPages2/homemaking/myorderForm/myorderForm.vue create mode 100644 pages/subPages2/homemaking/postDemand/postDemand.vue create mode 100644 pages/subPages2/homemaking/pubService/pubService.vue create mode 100644 pages/subPages2/homemaking/serviceIn/serviceIn.vue create mode 100644 pages/subPages2/lottery/lotteryCode/lotteryCode.vue create mode 100644 pages/subPages2/lottery/lotteryIndex/lotteryIndex.vue create mode 100644 pages/subPages2/lottery/lotteryList/lotteryList.vue create mode 100644 pages/subPages2/lottery/previous/previous.vue create mode 100644 pages/subPages2/management/addGoods/addGoods.vue create mode 100644 pages/subPages2/management/foodclassify/foodclassify.vue create mode 100644 pages/subPages2/management/management.vue create mode 100644 pages/subPages2/map/address-search.vue create mode 100644 pages/subPages2/map/index.vue create mode 100644 pages/subPages2/newBuyOrder/buyOrder.vue create mode 100644 pages/subPages2/newBuyOrder/newBuyOrder.vue create mode 100644 pages/subPages2/orderLink/orderLink.vue create mode 100644 pages/subPages2/panorama/panorama.vue create mode 100644 pages/subPages2/phoneBook/enterForm/enterForm.vue create mode 100644 pages/subPages2/phoneBook/goodsClass/goodsClass.vue create mode 100644 pages/subPages2/phoneBook/logistics/logistics.vue create mode 100644 pages/subPages2/phoneBook/myGoods/myGoods.vue create mode 100644 pages/subPages2/phoneBook/phoneBook.vue create mode 100644 pages/subPages2/phoneBook/phoneClass/phoneClass.vue create mode 100644 pages/subPages2/phoneBook/yellowGoods/yellowGoods.vue create mode 100644 pages/subPages2/practice/partTimeJob.vue create mode 100644 pages/subPages2/practice/practice.vue create mode 100644 pages/subPages2/redClothes/redClothes.vue create mode 100644 pages/subPages2/storeClass/storeClass.vue create mode 100644 pages/subPages2/subscription/subscription.vue create mode 100644 pages/subPages2/tamplate/FGame.vue create mode 100644 pages/subPages2/tamplate/FGamesix.vue create mode 100644 pages/subPages2/tamplate/choose-Cade/choose-Cade.vue create mode 100644 pages/subPages2/tamplate/evan-radio/evan-radio-group.vue create mode 100644 pages/subPages2/tamplate/evan-radio/evan-radio.vue create mode 100644 pages/subPages2/tamplate/foodCategory.vue create mode 100644 pages/subPages2/tamplate/foodComment.vue create mode 100644 pages/subPages2/tamplate/shopPing.vue create mode 100644 pages/subPages2/tamplate/shoppingFixation.vue create mode 100644 pages/subPages2/tamplate/uni-icons/icons.js create mode 100644 pages/subPages2/tamplate/uni-icons/uni-icons.vue create mode 100644 pages/subPages2/userInfo/userInfo.vue create mode 100644 pages/subPages2/voucherCenter/phoneOrders.vue create mode 100644 pages/subPages2/voucherCenter/voucherCenter.vue create mode 100644 pagesA/articleDetails/articleDetails.vue create mode 100644 pagesA/businessCooperation/index.vue create mode 100644 pagesA/campusActivities/campusActivities.vue create mode 100644 pagesA/campusActivities/index.vue create mode 100644 pagesA/campusActivities/myActivities.vue create mode 100644 pagesA/commentSubject/commentSubject.vue create mode 100644 pagesA/follow_fans/fans.vue create mode 100644 pagesA/follow_fans/follow.vue create mode 100644 pagesA/identityList/bloggerCertification.vue create mode 100644 pagesA/identityList/identityList.vue create mode 100644 pagesA/identityList/teacherCertification.vue create mode 100644 pagesA/informationHot/informationHot.vue create mode 100644 pagesA/instantMessenger/instantMessenger.vue create mode 100644 pagesA/pictureTextDetails/pictureTextDetails.vue create mode 100644 pagesA/rule_center/rule_center.vue create mode 100644 pagesA/studentIdentification/studentIdentification.vue create mode 100644 pagesA/topSearch/topSearch.vue create mode 100644 project.config.json create mode 100644 project.private.config.json create mode 100644 siteinfo.json create mode 100644 static/Influencer-rafiki.png create mode 100644 static/Learning-cuate.png create mode 100644 static/Learning-pana.png create mode 100644 static/chooseCade/BG.png create mode 100644 static/chooseCade/biaoqing.png create mode 100644 static/chooseCade/chooseCadecc.png create mode 100644 static/chooseCade/chooseCades.png create mode 100644 static/chooseCade/chooseCadex.png create mode 100644 static/chooseCade/qian.png create mode 100644 static/chooseCade/reddogbg.png create mode 100644 static/home_123.png create mode 100644 static/hot_list_logo.png create mode 100644 static/icon_certificate.png create mode 100644 static/icon_position.png create mode 100644 static/logo.png create mode 100644 static/mb-plus.png create mode 100644 static/partner-rafiki.png create mode 100644 static/rule.png create mode 100644 store/actions.js create mode 100644 store/index.js create mode 100644 store/mutation-types.js create mode 100644 store/mutations.js create mode 100644 uni.scss create mode 100644 uni_modules/uni-datetime-picker/changelog.md create mode 100644 uni_modules/uni-datetime-picker/components/uni-datetime-picker/calendar-item.vue create mode 100644 uni_modules/uni-datetime-picker/components/uni-datetime-picker/calendar.vue create mode 100644 uni_modules/uni-datetime-picker/components/uni-datetime-picker/i18n/en.json create mode 100644 uni_modules/uni-datetime-picker/components/uni-datetime-picker/i18n/index.js create mode 100644 uni_modules/uni-datetime-picker/components/uni-datetime-picker/i18n/zh-Hans.json create mode 100644 uni_modules/uni-datetime-picker/components/uni-datetime-picker/i18n/zh-Hant.json create mode 100644 uni_modules/uni-datetime-picker/components/uni-datetime-picker/time-picker.vue create mode 100644 uni_modules/uni-datetime-picker/components/uni-datetime-picker/uni-datetime-picker.vue create mode 100644 uni_modules/uni-datetime-picker/components/uni-datetime-picker/util.js create mode 100644 uni_modules/uni-datetime-picker/package.json create mode 100644 uni_modules/uni-datetime-picker/readme.md create mode 100644 uni_modules/uni-icons/changelog.md create mode 100644 uni_modules/uni-icons/components/uni-icons/icons.js create mode 100644 uni_modules/uni-icons/components/uni-icons/uni-icons.vue create mode 100644 uni_modules/uni-icons/components/uni-icons/uniicons.css create mode 100644 uni_modules/uni-icons/components/uni-icons/uniicons.ttf create mode 100644 uni_modules/uni-icons/package.json create mode 100644 uni_modules/uni-icons/readme.md create mode 100644 uni_modules/uni-scss/changelog.md create mode 100644 uni_modules/uni-scss/index.scss create mode 100644 uni_modules/uni-scss/package.json create mode 100644 uni_modules/uni-scss/readme.md create mode 100644 uni_modules/uni-scss/styles/index.scss create mode 100644 uni_modules/uni-scss/styles/setting/_border.scss create mode 100644 uni_modules/uni-scss/styles/setting/_color.scss create mode 100644 uni_modules/uni-scss/styles/setting/_radius.scss create mode 100644 uni_modules/uni-scss/styles/setting/_space.scss create mode 100644 uni_modules/uni-scss/styles/setting/_styles.scss create mode 100644 uni_modules/uni-scss/styles/setting/_text.scss create mode 100644 uni_modules/uni-scss/styles/setting/_variables.scss create mode 100644 uni_modules/uni-scss/styles/tools/functions.scss create mode 100644 uni_modules/uni-scss/theme.scss create mode 100644 uni_modules/uni-scss/variables.scss create mode 100644 version.json create mode 100644 vuex/LICENSE create mode 100644 vuex/README.md create mode 100644 vuex/dist/logger.d.ts create mode 100644 vuex/dist/logger.js create mode 100644 vuex/dist/vuex.common.js create mode 100644 vuex/dist/vuex.esm.js create mode 100644 vuex/dist/vuex.js create mode 100644 vuex/dist/vuex.min.js create mode 100644 vuex/package.json create mode 100644 vuex/types/README.md create mode 100644 vuex/types/helpers.d.ts create mode 100644 vuex/types/index.d.ts create mode 100644 vuex/types/vue.d.ts diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..b163ca8 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +/unpackage diff --git a/.hbuilderx/launch.json b/.hbuilderx/launch.json new file mode 100644 index 0000000..81f13f4 --- /dev/null +++ b/.hbuilderx/launch.json @@ -0,0 +1,16 @@ +{ // launch.json 配置了启动调试时相关设置,configurations下节点名称可为 app-plus/h5/mp-weixin/mp-baidu/mp-alipay/mp-qq/mp-toutiao/mp-360/ + // launchtype项可配置值为local或remote, local代表前端连本地云函数,remote代表前端连云端云函数 + "version": "0.0", + "configurations": [{ + "default" : + { + "launchtype" : "local" + }, + "mp-weixin" : + { + "launchtype" : "local" + }, + "type" : "uniCloud" + } + ] +} diff --git a/App.vue b/App.vue new file mode 100644 index 0000000..21a949f --- /dev/null +++ b/App.vue @@ -0,0 +1,85 @@ + + + diff --git a/common/css/common.css b/common/css/common.css new file mode 100644 index 0000000..85f3c50 --- /dev/null +++ b/common/css/common.css @@ -0,0 +1,965 @@ +/* iconfont */ + +.container, +input { + font-family: PingFang-Medium, + PingFangSC-Regular, + Heiti, + Heiti SC, + DroidSans, + DroidSansFallback, + sans-serif !important; + -webkit-font-smoothing: antialiased; +} + +/* image { + will-change: transform +} */ + +button::after { + content: none !important; +} + +.price-font-family { + font-family: Number-Font !important; +} + +.tab-container { + padding-bottom: 96upx; +} + +.tab-padding-container { + padding-bottom: calc(96upx + 20px); +} + +.b-f { + background: #fff; +} + +.b-0 { + background: #000000; +} + +.b-e6 { + background-color: #f6f6f6; +} + +.tf-180 { + -moz-transform: rotate(-180deg); + -ms-transform: rotate(-180deg); + -o-transform: rotate(-180deg); + transform: rotate(-180deg); +} + +.tf-90 { + -moz-transform: rotate(90deg); + -ms-transform: rotate(90deg); + -o-transform: rotate(90deg); + transform: rotate(90deg); +} + +.dis-block { + display: block; +} + +.dis-il-block { + display: inline-block; +} + +.dis-flex { + display: flex !important; + /* flex-wrap: wrap; */ +} + +.flex-box { + flex: 1; + width: 0; +} + +.flex-shrink { + flex-shrink: 0; +} + +.flex-warp { + flex-wrap: wrap; +} + +.flex-dir-row { + flex-direction: row; +} + +.flex-dir-column { + flex-direction: column; +} + +.flex-x-center { + /* display: flex; */ + justify-content: center; +} + +.flex-x-between { + justify-content: space-between; +} + +.flex-x-around { + justify-content: space-around; +} + +.flex-x-end { + justify-content: flex-end; +} + +.flex-x-start { + justify-content: flex-start; +} + +.flex-y-center { + align-items: center; +} + +.flex-y-end { + align-items: flex-end; +} + +.flex-y-line { + align-items: baseline; +} + +.flex-five { + box-sizing: border-box; + flex: 0 0 50%; +} + +.flex-three { + float: left; + width: 33.3%; +} + +.flex-four { + box-sizing: border-box; + flex: 0 0 25%; +} + +.t-l { + text-align: left; +} + +.t-c { + text-align: center; +} + +.t-r { + text-align: right; +} + +.p-a { + position: absolute; +} + +.p-r { + position: relative; +} + +.fl { + float: left; +} + +.fr { + float: right; +} + +.clear::after { + clear: both; + content: " "; + display: table; +} + +.oh { + overflow: hidden; +} + +.tb-lr-center { + display: -webkit-box; + display: -ms-flexbox; + display: flex !important; + -webkit-box-pack: center; + -ms-flex-pack: center; + justify-content: center; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; +} + +.f-58 { + font-size: 58upx; +} + +.f-50 { + font-size: 50upx; +} + +.f-48 { + font-size: 48upx; +} + +.f-44 { + font-size: 44upx; +} + +.f-42 { + font-size: 42upx; +} + +.f-40 { + font-size: 40upx; +} + +.f-38 { + font-size: 38upx; +} + +.f-36 { + font-size: 36upx; +} + +.f-34 { + font-size: 34upx; +} + +.f-32 { + font-size: 32upx; +} + +.f-31 { + font-size: 31upx; +} + +.f-30 { + font-size: 30upx; +} + +.f-29 { + font-size: 29upx; +} + +.f-28 { + font-size: 28upx; +} + +.f-26 { + font-size: 26upx; +} + +.f-25 { + font-size: 25upx; +} + +.f-24 { + font-size: 24upx; +} + +.f-22 { + font-size: 22upx; +} + +.f-20 { + font-size: 20upx; +} + +.f-w { + font-weight: 700; +} + +.f-n { + font-weight: 400; +} + +.col-f { + color: #fff; +} + +.col-c { + color: #CCCCCC; +} + +.col-a { + color: #AAAAAA; +} + +.col-0 { + color: #000; +} + +.col-3 { + color: #333; +} + +.col-6 { + color: #666; +} + +.col-7 { + color: #777; +} + +.col-8 { + color: #888; +} + +.col-9 { + color: #999; +} + +.col-98 { + color: #989898 +} + +.col-f4 { + color: #FF4444; +} + +.color-f02 { + color: #F02E24; +} + +.col-gr { + color: rgb(146, 208, 80); +} + +.col-917952 { + color: #917952; +} + +.col-m { + color: #FE504F !important; +} + +.col-s { + color: #FFD940 !important; +} + +.col-green { + color: #0ed339 !important; +} + +.cont-box { + padding: 30upx; +} + +.cont-bot { + margin-bottom: 120upx; +} + +.padding-box { + padding: 0 30upx; + box-sizing: border-box; +} + +.padding-box-all { + padding: 30upx; + box-sizing: border-box; +} + +.padding-box36 { + padding: 0 36upx; + box-sizing: border-box; +} + +.padding-all-box36 { + padding: 36upx; + box-sizing: border-box; +} + +.p-top-10 { + padding-top: 10upx; +} + +.p-top-20 { + padding-top: 20upx; +} + +.p-top-50 { + padding-top: 50upx; +} + +.p-btm-50 { + padding-bottom: 50upx; +} + +.p-top-bom-10 { + padding: 10upx 0; +} + +.p-top-bom-20 { + padding: 20upx 0; +} + +.p-top-bom-30 { + padding: 30upx 0; +} + +.p-top-bom-40 { + padding: 40upx 0; +} + +.p-top-bom-50 { + padding: 50upx 0; +} + +.pl-12 { + padding-left: 12px; +} + +.pr-12 { + padding-right: 12px; +} + +.p-b-20 { + padding-bottom: 20upx; +} + +.pr-6 { + padding-right: 6px; +} + +.m-top4 { + margin-top: 4upx; +} + +.m-top10 { + margin-top: 10upx; +} + +.m-top16 { + margin-top: 16upx; +} + +.m-top20 { + margin-top: 20upx; +} + +.m-top30 { + margin-top: 30upx; +} + +.m-top40 { + margin-top: 40upx; +} + +.m-btm36 { + margin-bottom: 36upx; +} + +.m-btm10 { + margin-bottom: 10upx; +} + +.m-btm20 { + margin-bottom: 20upx; +} + +.m-btm15 { + margin-bottom: 15upx; +} + +.m-btm20 { + margin-bottom: 20upx; +} + +.m-btm30 { + margin-bottom: 30upx; +} + +.m-btm40 { + margin-bottom: 40upx; +} + +.m-btm50 { + margin-bottom: 50upx; +} + +.m-btm60 { + margin-bottom: 60upx; +} + +.m-btm80 { + margin-bottom: 80upx; +} + +.m-btm90 { + margin-bottom: 90upx; +} + +.m-btm100 { + margin-bottom: 100upx; +} + +.m-left10 { + margin-left: 10upx; +} + +.m-left12 { + margin-left: 12upx; +} + +.m-left30 { + margin-left: 30upx; +} + +.m-right10 { + margin-right: 10upx; +} + +.m-right12 { + margin-right: 12upx; +} + +.m-right20 { + margin-right: 20upx; +} + +.m-right30 { + margin-right: 30upx; +} + +.m-right40 { + margin-right: 40upx; +} + +.m-right50 { + margin-right: 50upx; +} + +.m-right70 { + margin-right: 70upx; +} + +.m-top-btm50 { + margin: 50upx 0; +} + +.m-top-btm40 { + margin: 40upx 0; +} + +.m-top-btm30 { + margin: 30upx 0; +} + +.m-top-btm20 { + margin: 20upx 0; +} + +.m-top-btm10 { + margin: 10upx 0; +} + +.m-top-btm6 { + margin: 6upx 0; +} + +.p-top-40 { + padding-top: 40upx; +} + +.p-bottom { + padding-bottom: 112upx; +} + +.p-right-30 { + padding-right: 30upx; +} + +.p-left-right-20 { + padding: 0 20upx; +} + +.p-left-right-28 { + padding: 0 28upx; +} + +.p-left-right-30 { + padding: 0 30upx; +} + +.p-left-right-40 { + padding: 0 40upx; +} + +.m-left-right-6 { + margin: 0 6upx; +} + +.m-left-right-10 { + margin: 0 10upx; +} + +.m-left-right-20 { + margin: 0 20upx; +} + +.m-left-right-30 { + margin: 0 30upx; +} + +.m-left-right-40 { + margin: 0 40upx; +} + +.onelist-hidden { + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; +} + +.twolist-hidden { + display: -webkit-box; + word-break: break-all; + text-overflow: ellipsis; + overflow: hidden; + -webkit-box-orient: vertical; + -webkit-line-clamp: 2; +} + +.b-r { + border-right: 1upx solid #eee; + +} + +.b-b { + border-bottom: 1upx solid #eee; +} + +.b-t { + border-top: 1upx solid #eee; +} + +.ts-1 { + -moz-transition: all 0.1s; + -o-transition: all 0.1s; + transition: all 0.1s; +} + +.ts-2 { + -moz-transition: all 0.2s; + -o-transition: all 0.2s; + transition: all 0.2s; +} + +.ts-3 { + -moz-transition: all 0.3s; + -o-transition: all 0.3s; + transition: all 0.3s; +} + +.ts-5 { + -moz-transition: all 0.5s; + -o-transition: all 0.5s; + transition: all 0.5s; +} + +/* 字体颜色 */ + +.c-ff4444 { + color: #FF4444; +} + +/* 无样式button (用于伪submit) */ + +.btn-normal { + display: block; + margin: 0; + padding: 0; + line-height: normal; + background: none; + border-radius: 0; + box-shadow: none; + border: none; + font-size: unset; + text-align: unset; + overflow: visible; +} + +.btn-normal:after { + border: none; +} + +.btn-normal.button-hover { + color: inherit; +} + +/* 模板消息按钮 */ +.report-btn { + position: absolute !important; + top: 0; + left: 0; + right: 0; + bottom: 0; + opacity: 0; +} + + +/* 内容标题直 */ +.module-title { + color: #333333; + font-size: 30upx; + text-align: center; + height: 86upx; + line-height: 86upx; + font-weight: bold; + position: relative; + background: #FFFFFF; +} + +.module-title::after { + content: " "; + position: absolute; + left: 50%; + bottom: 0; + transform: translateX(-50%); + width: 40upx; + height: 8upx; + background: #FFD940; + border-radius: 20upx; +} + +/* 内容标题直弯 */ +.module-title-w { + color: #333333; + font-size: 30upx; + text-align: center; + height: 86upx; + line-height: 86upx; + font-weight: bold; + position: relative; + background: #FFFFFF; +} + +.module-content { + padding: 30upx; + background: #FFFFFF; +} + +.bor-radius-10 { + border-radius: 6upx; +} + +.bor-radius-10upx { + border-radius: 10upx; +} + +/* loading动画 */ +.ball-clip-rotate-pulse { + position: absolute; + top: 36%; + left: 50%; + transform: scale(1) translateY(-15px); +} + +.ball-clip-rotate-pulse::after { + content: "努力加载中..."; + position: absolute; + top: 50%; + bottom: 0; + transform: translate(-50%, 3em); + font-size: 26upx; + line-height: 2em; + text-align: center; + width: 10em; + letter-spacing: 2upx; + color: #666666; +} + +.ball-clip-rotate-pulse>view { + -webkit-animation-fill-mode: both; + animation-fill-mode: both; + position: absolute; + top: 0px; + left: 0px; + border-radius: 100%; +} + +.ball-clip-rotate-pulse>view:first-child { + background: #FFD940; + height: 16px; + width: 16px; + top: 7px; + left: -7px; + -webkit-animation: scale 1s 0s cubic-bezier(0.09, 0.57, 0.49, 0.9) infinite; + animation: scale 1s 0s cubic-bezier(0.09, 0.57, 0.49, 0.9) infinite; +} + +.ball-clip-rotate-pulse>view:last-child { + position: absolute; + border: 2px solid #FFF; + width: 30px; + height: 30px; + left: -16px; + top: -2px; + background: transparent; + border: 2px solid; + border-color: #ffe26e transparent #ffe26e transparent; + -webkit-animation: rotate 1s 0s cubic-bezier(0.09, 0.57, 0.49, 0.9) infinite; + animation: rotate 1s 0s cubic-bezier(0.09, 0.57, 0.49, 0.9) infinite; + -webkit-animation-duration: 1s; + animation-duration: 1s; +} + +@keyframes rotate { + 0% { + -webkit-transform: rotate(0deg) scale(1); + transform: rotate(0deg) scale(1); + } + + 50% { + -webkit-transform: rotate(180deg) scale(0.6); + transform: rotate(180deg) scale(0.6); + } + + 100% { + -webkit-transform: rotate(360deg) scale(1); + transform: rotate(360deg) scale(1); + } +} + +@keyframes scale { + 30% { + -webkit-transform: scale(0.3); + transform: scale(0.3); + } + + 100% { + -webkit-transform: scale(1); + transform: scale(1); + } +} + +.diy-loading { + position: absolute; + top: 50%; + left: 50%; + transform: translate(-50%, -50%); +} + +.loading-image { + width: 60upx; + height: 60upx; + display: block; + margin: 0 auto; +} + +.loading-text { + font-size: 26upx; + line-height: 2em; + text-align: center; + width: 10em; + letter-spacing: 2upx; + color: #666666; +} + +/* 0.5px边框 */ +.border-line, +.border-vertical { + position: relative; +} + +.border-line::after { + content: " "; + position: absolute; + border-top: 1px solid #EEEEEE; + transform-origin: 0 0; + transform: scaleY(0.5); + z-index: 2; +} + +.border-vertical::after { + content: " "; + position: absolute; + border-left: 1px solid #F7F7F7; + transform-origin: 0 0; + transform: scaleX(0.5); + z-index: 2; +} + +.border-vertical.border-left::after { + top: 0; + left: 0; + bottom: 0; +} + +.border-line.border-top::after { + left: 0; + top: 0; + right: 0; +} + +.border-line.border-bottom::after { + left: 0; + bottom: 0; + right: 0; +} + +.diy-nav-list .border-bottom::after { + left: 30upx; +} + +.diy-nav-list .border-bottom.item-icon::after { + left: 100upx; +} + +.diy-nav-list .border-bottom:last-child::after { + content: none; +} + +.uni-picker-container { + z-index: 1003; +} + +.uni-picker-container .uni-picker { + z-index: 1003; +} + +.audio-main { + position: fixed; + right: 50upx; + top: 10%; + z-index: 10; +} + +.audio-bg { + position: relative; +} + +.audio-bg .audio-gif { + width: 100upx; + height: 100upx; + background-size: 100upx 100upx; + background-repeat: no-repeat; +} + +.audio-bg .audio-gif .audio-png { + position: absolute; + background-size: 80upx 80upx; + animation: rotate2d 1.2s linear infinite; + z-index: -1; + width: 80upx; + height: 80upx; +} + +.audio-bg.stop-audio .audio-gif { + background: none !important; +} + +.audio-bg.stop-audio .audio-png { + animation: none; +} + +@keyframes rotate2d { + from { + transform: rotate(0) + } + + to { + transform: rotate(360deg) + } +} diff --git a/common/css/diyPages.css b/common/css/diyPages.css new file mode 100644 index 0000000..0f64a15 --- /dev/null +++ b/common/css/diyPages.css @@ -0,0 +1,696 @@ +/* 团购样式5 */ +.groupon_goods5-pading{ + padding: 20upx 30upx 0; +} +.groupon_goods5-list { + flex-wrap: nowrap; +} + +.groupon_goods5-list-item .groupon_goods5-image { + width: 250upx; + height: 250upx; + background-repeat: no-repeat; + background-position: center; + background-size: 250upx 250upx; +} +.groupon_goods5-title{ + height: 2.6em; + line-height: 1.3em; +} +.groupon_goods5-price .now-price { + color: #f64031; +} + +.groupon_goods5-price .old-price { + color: #CCCCCC; + text-decoration: line-through; +} + + +/* 通用商品 */ +.public_goods_goods-price .now-price { + color: #f64031; +} + +.public_goods_goods-price .old-price { + color: #CCCCCC; + text-decoration: line-through; + margin-left: 30upx; +} + + +/* 商家信息2 */ +.store-two-main .store-two-left { + width: 170upx; + height: 170upx; + background-position: center; + background-size: 170upx 170upx; + background-repeat: no-repeat; + flex-shrink: 0; +} + +.store-two-main .store-two-right { + width: 100%; +} + +.store-two-right .store-two-title { + height: 2.6em; + line-height: 1.3em; + width: 400upx; +} + +.store-two-score .icon-shoucangxiao { + font-size: 28upx; + color: rgb(255, 153, 0); +} + +.store-two-score .icon-shoucangxiao>text { + margin-left: 10upx; + color: red; +} + +.store-time-tag{ + padding: 3upx 10upx; + background-color: rgba(0,0,0,0.3); + color: #FFFFFF; + position: absolute; + left: 20upx; + bottom: 20upx; + font-size: 24upx; + border-radius: 6upx; +} + + + + +/* 抢购6 */ +.diy-goods3-item .goods3-item-image { + width: 100%; + height: 400upx; + background-repeat: no-repeat; + background-position: center; + background-size: 100% 400upx; + border-radius: 10upx 10upx 0 0; +} + +.goods3-item-image .goods-image-gift { + position: absolute; + left: 0; + top: 40upx; + background-color: #27ce00; + border-radius: 0 8upx 8upx 0; + padding: 6upx 10upx; +} + +.goods3-price .goods3-nowPrice { + color: red; +} + +.goods3-price .goods3-oldPrice { + text-decoration: line-through; + color: #8c8b8b; +} + +.goods-all-vip .goods-all-vip-label { + color: #DDCDA0; + padding: 0 2upx 0 2upx; + background-color: #363636; + border-radius: 6upx; +} + +.goods-all-vip .goods-all-vip-price { + color: #363636; +} + +/* 招聘统计 */ + +.invite-statistics{ + padding: 10upx 30upx; +} + +.invite-statistics-item{ + /* padding: 30upx; */ + border-radius: 20upx; + /* border: 1upx; */ + width: 25%; + border: 1upx solid #EEEEEE; + margin-right: 20upx; +} + +.statistics-item-num{ + font-size: 36upx; + padding: 30upx 30upx 0; + font-family: DINPro; + font-weight: bold; + color: #333333; +} + +.statistics-item-class{ + padding: 0 0upx; + font-size: 24upx; + height: 40upx; + font-family: PingFang SC; + font-weight: 500; + color: #BBBBBB; + text-align: center; +} + +.statistics-item-img{ + height: 90upx; + position: relative; + border-radius: 0 0 20upx 0upx; +} + +.statistics-item-image{ + width: 60upx; + height: 60upx; + position: absolute; + right: 0upx; + bottom: 1upx; + border-radius: 0 0 20upx 0upx; +} + +.enterprise-img{ + width: 120upx; + height: 120upx; + border-radius: 10upx; +} + +.enterprise-name{ + font-size: 32upx; + font-family: PingFang SC; + font-weight: bold; + color: #333333; +} + +.enterprise-nature{ + font-size: 24upx; + font-family: PingFang SC; + color: #999999; + padding: 6upx 0; +} +.enterprise-content{ + padding-left: 20upx; +} + +.enterprise-item{ + padding: 30upx 0; + border-bottom: 1upx solid #EEEEEE; +} +.enterprise-item:last-child{ + border: none; +} + +.enterprise2-title{ + font-size: 32upx; + font-family: PingFang SC; + font-weight: bold; + color: #333333; + flex: 0.5; +} +.enterprise2-more{ + text-align: right; + font-size: 32upx; + font-family: PingFang SC; + font-weight: bold; + color: #999999; + flex: 0.5; +} + +.enterprise2-item{ + width: 240upx; + height: 340upx; + background-color: #B4B5C7; + border-radius: 15upx; + margin-right: 30upx; +} + +.enterprise2-item-img{ + width: 240upx; + height: 200upx; + border-radius: 15upx 15upx 0 0upx; +} +.enterprise2-item-name{ + font-size: 32upx; + font-family: PingFang SC; + font-weight: 500; + color: #FFFFFF; + padding: 20upx 20upx; + white-space:nowrap; + overflow:hidden; + text-overflow:ellipsis; +} + +.enterprise2-item-invite{ + font-size: 26upx; + font-family: PingFang SC; + font-weight: 500; + color: #FFFFFF; + /* padding-bottom: 20upx; */ + padding: 0 20upx 20upx; +} +.enterprise2-box{ + overflow-y: scroll; + padding: 30upx 0 10upx; + display: flex; + +} +.recruit_enterprise2-box{ + /* overflow: auto; */ + overflow: hidden; +} +.recruit_recruit-name{ + font-size: 32upx; + font-family: PingFang SC; + font-weight: bold; + color: #333333; + white-space:nowrap; + overflow:hidden; + text-overflow:ellipsis; + flex: 0.5; +} + +.recruit_recruit-top{ + padding: 1upx 6upx; + background-color: #FF4444; + color: #FFFFFF; + font-size: 24upx; + font-weight: 500; + border-radius: 4upx; + margin-left: 20upx; +} + +.recruit_recruit-salary{ + font-size: 32upx; + font-family: DINPro; + font-weight: 500; + color: #FF4444; + flex: 0.5; + text-align: right; +} +.recruit_recruit-tags{ + flex: 0.75; + height: 50upx; + overflow: hidden; +} +.recruit_recruit-tags-item{ + padding: 5upx 20upx; + border-radius: 4upx; + font-size: 24upx; + font-family: PingFang SC; + font-weight: 400; + color: #666666; + margin-right: 20upx; +} +.recruit_recruit-region{ + font-size: 28upx; + font-family: DINPro; + font-weight: 500; + line-height: 50upx; + text-align: right; + color: #999999; + flex: 0.25; + overflow:hidden; + text-overflow:ellipsis; + white-space:nowrap; +} +.recruit_recruit-imgbox{ + flex: 0.2; +} +.recruit_recruit-img{ + width: 120upx; + height: 120upx; + border-radius: 10upx; + border: 1upx solid #FFFFFF; +} +.recruit_recruit-left{ + flex: 0.8; + padding-left: 20upx; +} +.recruit-left-nature{ + font-size: 26upx; + color: #999999; + vertical-align: bottom; + padding-top: 20upx; +} +.recruit_recruit-right{ + /* flex: 0.3; */ +} +.recruit-left-name{ + font-size: 28upx; + vertical-align: bottom; + margin-bottom: 30upx; + /* line-height: 60upx; */ +} +.recruit-left-region{ + font-size: 28upx; + font-family: DINPro; + font-weight: 500; + line-height: 50upx; + text-align: right; + color: #999999; + flex: 0.3; + width: 200upx; + overflow: hidden;/*超出部分隐藏*/ + white-space: nowrap;/*不换行*/ + text-overflow:ellipsis;/*超出部分文字以...显示*/ +} +.recruit_recruit{ + border-bottom: 1upx solid #EEEEEE; +} +.recruit_recruit:last-child{ + border: none; +} +.recruit_resume-imgbox{ + flex: 0.3; +} +.recruit_resume-content{ + flex: 0.7; +} +.recruit_resume-img{ + width: 150upx; + height: 150upx; + border-radius: 50%; +} +.recruit_resume-title{ + font-size: 32upx; + font-family: PingFang SC; + font-weight: bold; + color: #333333; + flex: 0.5; +} +.recruit_resume-salary{ + flex: 0.5; + font-size: 32upx; + font-family: PingFang SC; + font-weight: bold; + color: #ff4444; + text-align: right; +} +.recruit_resume-data{ + font-size: 26upx; + font-family: PingFang SC; + font-weight: 500; + color: #999999; + padding: 15upx 0; +} +.recruit_resume-tags{ + flex: 0.8; + height: 50upx; + overflow: hidden; +} +.recruit_resume-site{ + flex: 0.2; + font-size: 26upx; + color: #999999; + text-align: right; + line-height: 52upx; +} +.recruit_resume-tagitem{ + padding: 5upx 10upx; + font-size: 26upx; + background-color: #007AFF; + border-radius: 4upx; + margin-right: 10upx; +} +.recruit_resume-item{ + margin-bottom: 50upx; +} + +/* 相亲 */ +.blind{ + /* padding: 30upx; */ + margin: 30upx; +} +.blind-item{ + padding: 30upx; + width: 335upx; + box-sizing: border-box; + height: 171upx; + background: #F8F8F8; + opacity: 1; + border-radius: 20upx; +} +.nav-content { + width: 690rpx; + margin: 0 auto 0; + display: flex; + flex-wrap: wrap; + justify-content:space-between; + +} +.nav-item { + width: 335rpx; + height: auto; + border-radius: 20rpx; + overflow: hidden; + background-color: #F8F8F8; + margin-bottom: 20rpx; +} + +/* 家政 */ +.housekeeping{ + padding: 30upx; + margin: 0 auto 0; + display: flex; + flex-wrap: wrap; + justify-content:space-between; +} + +.housekeeping:after { content: ""; + flex:0 0 45%; } + +.housekeeping-issue{ + height: 90upx; + line-height: 90upx; + color: #FFFFFF; + font-size: 28upx; + text-align: center; + /* margin-right: 20upx; */ + border-radius: 20upx; + margin-top: 50upx; +} + +.housekeeping-lose{ + width: 45%; +} + +.housekeeping3{ + padding: 30upx; + margin: 0 auto 0; + display: flex; + flex-wrap: wrap; + justify-content:space-between; +} + +.housekeeping3:after { content: ""; + flex:0 0 30%; } + +.housekeeping-issue3{ + flex:0 0 30%; + height: 90upx; + line-height: 90upx; + background-color: #A59AFF; + color: #FFFFFF; + font-size: 28upx; + text-align: center; + /* margin-right: 20upx; */ + border-radius: 20upx; + margin-bottom: 20upx; +} + +.housekeeping-lose3{ + width: 30%; +} + +.housekeeping-enter{ + width: 335upx; + height: 90upx; + line-height: 90upx; + background-color: #FDAD28; + color: #FFFFFF; + font-size: 28upx; + text-align: center; + /* margin-right: 20upx; */ + border-radius: 20upx; + margin-bottom: 20upx; +} + +.housekeeping-image{ + height: 30upx; + width: 30upx; + margin-right: 20upx; + margin-top: 30upx; + vertical-align: top; +} + +.referralWaiter{ + padding: 30upx; +} + +.referralWaiter-content{ + padding: 30upx 0; + overflow: auto; +} + +.referralWaiter-item{ + background-color: #F8F8F8; + margin-right: 20upx; + padding-bottom: 15upx; + border-radius: 20upx; + display: inline-block; + max-width: 330upx; + position: relative; +} + +.referral-tag{ + background-color: rgba(239,155,155,0.6); + color: #FFFFFF; + height: 36upx; + padding: 0 10upx; + font-size: 20upx; + display: inline-block; + line-height: 36upx; + border-radius: 10upx; + position: absolute; + left: 20upx; + top: 20upx; + z-index: 99; +} + +.refText{ + font-size: 20upx; + color: #ff4444; + font-weight:700; + padding-right: 20upx; + display: inline-block; + width: 200upx; + overflow: hidden; + white-space: nowrap; + text-overflow: ellipsis; +} + +.referralWaiter-item-img{ + width: 330upx; + height: 186upx; + border-radius: 20upx 20upx 0 0; +} + +.homemaking-tags{ + padding: 22upx 20upx; + height: 36upx; + line-height: 38upx; + overflow: hidden; + +} + +.homemaking-btn{ + height: 40upx; + font-size: 20upx; + padding: 0 20upx; + line-height: 40upx; + background: linear-gradient(180deg, #72AAFD 0%, #6094FD 100%); + display: inline-block; + color: #FFFFFF; + border-radius: 10upx; + margin-right: 20upx; +} + +.homemaking-tags-item{ + /* width: 100upx; */ + height: 32upx; + line-height: 32upx; + font-size: 20upx; + text-align: center; + background-color: #EEEEEE; + color: #999999; + padding: 0 10upx; + border-radius: 6upx; + display: inline-block; + margin-right: 10upx; + margin-bottom: 10upx; +} + +.homemaking-name{ + width: 300upx; + margin-left: 20upx; + overflow: hidden; + white-space: nowrap; + text-overflow: ellipsis; +} + +.homemakingList-boex{ + padding: 20upx 30upx; + background-color: #F8F8F8; +} + +.enter-box{ + position: relative; + width: 690upx; + padding: 30upx; + padding-bottom: 170upx; + background-color: #FFFFFF; + border-radius: 30upx 30upx 0 0; +} + +.enter-img{ + width: 50upx; + height: 50upx; + position: absolute; + right: 30upx; + top: 30upx; +} + +.IndividualsIn{ + margin-top: 60upx; + padding: 35upx 40upx; + border-radius: 20upx; + background: #72AAFD; + display: flex; +} + +.IndividualsInImg{ + width: 110upx; + height: 110upx; +} + +.IndividualsInright{ + height: 28upx; + width: 56upx; + line-height: 110upx; +} + +.vcssopen{ + /* width:580upx; + overflow:hidden; + text-overflow:ellipsis; + white-space:nowrap; */ +} + +.linkRed{ + width: 600upx; + height: 752upx; + position: relative; + border-radius: 30upx; +} +.redmt{ + margin-top: 100upx; +} +.redmtf{ + margin-top: 40upx; +} +.bnnerBox{ + position: absolute; + left: 50%; + bottom: 10upx; + /* width: 100upx; */ + transform: translateX(-50%); +} +.bnnerItem{ + width: 15upx; + height: 15upx; + border-radius: 60upx; + background-color: #ffffff; + display: inline-block; + margin-right: 10upx; +} \ No newline at end of file diff --git a/common/css/iconfont.css b/common/css/iconfont.css new file mode 100644 index 0000000..98bb4de --- /dev/null +++ b/common/css/iconfont.css @@ -0,0 +1,3082 @@ +@font-face { + font-family: "iconfont"; + src: url('https://at.alicdn.com/t/font_453360_ifl5gbn650g.ttf?t=1575942588038') format('truetype'); /* chrome, firefox, opera, Safari, Android, iOS 4.2+ */ + +} + +.iconfont { + font-family: "iconfont" !important; + font-size: 16px; + font-style: normal; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} + +.icon-appreciate:before { + content: "\e644"; +} + +.icon-check:before { + content: "\e645"; +} + +.icon-close:before { + content: "\e646"; +} + +.icon-edit:before { + content: "\e649"; +} + +.icon-emoji:before { + content: "\e64a"; +} + +.icon-favorfill:before { + content: "\e64b"; +} + +.icon-favor:before { + content: "\e64c"; +} + +.icon-loading:before { + content: "\e64f"; +} + +.icon-locationfill:before { + content: "\e650"; +} + +.icon-location:before { + content: "\e651"; +} + +.icon-phone:before { + content: "\e652"; +} + +.icon-roundcheckfill:before { + content: "\e656"; +} + +.icon-roundcheck:before { + content: "\e657"; +} + +.icon-roundclosefill:before { + content: "\e658"; +} + +.icon-roundclose:before { + content: "\e659"; +} + +.icon-roundrightfill:before { + content: "\e65a"; +} + +.icon-roundright:before { + content: "\e65b"; +} + +.icon-search:before { + content: "\e65c"; +} + +.icon-taxi:before { + content: "\e65d"; +} + +.icon-timefill:before { + content: "\e65e"; +} + +.icon-time:before { + content: "\e65f"; +} + +.icon-unfold:before { + content: "\e661"; +} + +.icon-warnfill:before { + content: "\e662"; +} + +.icon-warn:before { + content: "\e663"; +} + +.icon-camerafill:before { + content: "\e664"; +} + +.icon-camera:before { + content: "\e665"; +} + +.icon-commentfill:before { + content: "\e666"; +} + +.icon-comment:before { + content: "\e667"; +} + +.icon-likefill:before { + content: "\e668"; +} + +.icon-like:before { + content: "\e669"; +} + +.icon-notificationfill:before { + content: "\e66a"; +} + +.icon-notification:before { + content: "\e66b"; +} + +.icon-order:before { + content: "\e66c"; +} + +.icon-samefill:before { + content: "\e66d"; +} + +.icon-same:before { + content: "\e66e"; +} + +.icon-deliver:before { + content: "\e671"; +} + +.icon-evaluate:before { + content: "\e672"; +} + +.icon-pay:before { + content: "\e673"; +} + +.icon-send:before { + content: "\e675"; +} + +.icon-shop:before { + content: "\e676"; +} + +.icon-ticket:before { + content: "\e677"; +} + +.icon-wang:before { + content: "\e678"; +} + +.icon-back:before { + content: "\e679"; +} + +.icon-cascades:before { + content: "\e67c"; +} + +.icon-discover:before { + content: "\e67e"; +} + +.icon-list:before { + content: "\e682"; +} + +.icon-more:before { + content: "\e684"; +} + +.icon-scan:before { + content: "\e689"; +} + +.icon-settings:before { + content: "\e68a"; +} + +.icon-questionfill:before { + content: "\e690"; +} + +.icon-question:before { + content: "\e691"; +} + +.icon-shopfill:before { + content: "\e697"; +} + +.icon-form:before { + content: "\e699"; +} + +.icon-wangfill:before { + content: "\e69a"; +} + +.icon-pic:before { + content: "\e69b"; +} + +.icon-filter:before { + content: "\e69c"; +} + +.icon-footprint:before { + content: "\e69d"; +} + +.icon-top:before { + content: "\e69e"; +} + +.icon-pulldown:before { + content: "\e69f"; +} + +.icon-pullup:before { + content: "\e6a0"; +} + +.icon-right:before { + content: "\e6a3"; +} + +.icon-refresh:before { + content: "\e6a4"; +} + +.icon-moreandroid:before { + content: "\e6a5"; +} + +.icon-deletefill:before { + content: "\e6a6"; +} + +.icon-refund:before { + content: "\e6ac"; +} + +.icon-cart:before { + content: "\e6af"; +} + +.icon-qrcode:before { + content: "\e6b0"; +} + +.icon-remind:before { + content: "\e6b2"; +} + +.icon-delete:before { + content: "\e6b4"; +} + +.icon-profile:before { + content: "\e6b7"; +} + +.icon-home:before { + content: "\e6b8"; +} + +.icon-cartfill:before { + content: "\e6b9"; +} + +.icon-discoverfill:before { + content: "\e6ba"; +} + +.icon-homefill:before { + content: "\e6bb"; +} + +.icon-message:before { + content: "\e6bc"; +} + +.icon-addressbook:before { + content: "\e6bd"; +} + +.icon-link:before { + content: "\e6bf"; +} + +.icon-lock:before { + content: "\e6c0"; +} + +.icon-unlock:before { + content: "\e6c2"; +} + +.icon-vip:before { + content: "\e6c3"; +} + +.icon-weibo:before { + content: "\e6c4"; +} + +.icon-activity:before { + content: "\e6c5"; +} + +.icon-big:before { + content: "\e6c7"; +} + +.icon-friendaddfill:before { + content: "\e6c9"; +} + +.icon-friendadd:before { + content: "\e6ca"; +} + +.icon-friendfamous:before { + content: "\e6cb"; +} + +.icon-friend:before { + content: "\e6cc"; +} + +.icon-goods:before { + content: "\e6cd"; +} + +.icon-selection:before { + content: "\e6ce"; +} + +.icon-tmall:before { + content: "\e6cf"; +} + +.icon-explore:before { + content: "\e6d2"; +} + +.icon-present:before { + content: "\e6d3"; +} + +.icon-squarecheckfill:before { + content: "\e6d4"; +} + +.icon-square:before { + content: "\e6d5"; +} + +.icon-squarecheck:before { + content: "\e6d6"; +} + +.icon-round:before { + content: "\e6d7"; +} + +.icon-roundaddfill:before { + content: "\e6d8"; +} + +.icon-roundadd:before { + content: "\e6d9"; +} + +.icon-add:before { + content: "\e6da"; +} + +.icon-notificationforbidfill:before { + content: "\e6db"; +} + +.icon-explorefill:before { + content: "\e6dd"; +} + +.icon-fold:before { + content: "\e6de"; +} + +.icon-game:before { + content: "\e6df"; +} + +.icon-redpacket:before { + content: "\e6e0"; +} + +.icon-selectionfill:before { + content: "\e6e1"; +} + +.icon-similar:before { + content: "\e6e2"; +} + +.icon-appreciatefill:before { + content: "\e6e3"; +} + +.icon-infofill:before { + content: "\e6e4"; +} + +.icon-info:before { + content: "\e6e5"; +} + +.icon-tao:before { + content: "\e6e8"; +} + +.icon-mobiletao:before { + content: "\e6e9"; +} + +.icon-forwardfill:before { + content: "\e6ea"; +} + +.icon-forward:before { + content: "\e6eb"; +} + +.icon-rechargefill:before { + content: "\e6ec"; +} + +.icon-recharge:before { + content: "\e6ed"; +} + +.icon-vipcard:before { + content: "\e6ee"; +} + +.icon-voice:before { + content: "\e6ef"; +} + +.icon-voicefill:before { + content: "\e6f0"; +} + +.icon-friendfavor:before { + content: "\e6f1"; +} + +.icon-wifi:before { + content: "\e6f2"; +} + +.icon-share:before { + content: "\e6f3"; +} + +.icon-wefill:before { + content: "\e6f4"; +} + +.icon-we:before { + content: "\e6f5"; +} + +.icon-lightauto:before { + content: "\e6f6"; +} + +.icon-lightforbid:before { + content: "\e6f7"; +} + +.icon-lightfill:before { + content: "\e6f8"; +} + +.icon-camerarotate:before { + content: "\e6f9"; +} + +.icon-light:before { + content: "\e6fa"; +} + +.icon-barcode:before { + content: "\e6fb"; +} + +.icon-flashlightclose:before { + content: "\e6fc"; +} + +.icon-flashlightopen:before { + content: "\e6fd"; +} + +.icon-searchlist:before { + content: "\e6fe"; +} + +.icon-service:before { + content: "\e6ff"; +} + +.icon-sort:before { + content: "\e700"; +} + +.icon-1212:before { + content: "\e702"; +} + +.icon-down:before { + content: "\e703"; +} + +.icon-mobile:before { + content: "\e704"; +} + +.icon-mobilefill:before { + content: "\e705"; +} + +.icon-copy:before { + content: "\e706"; +} + +.icon-countdownfill:before { + content: "\e707"; +} + +.icon-countdown:before { + content: "\e708"; +} + +.icon-noticefill:before { + content: "\e709"; +} + +.icon-notice:before { + content: "\e70a"; +} + +.icon-qiang:before { + content: "\e70b"; +} + +.icon-upstagefill:before { + content: "\e70e"; +} + +.icon-upstage:before { + content: "\e70f"; +} + +.icon-babyfill:before { + content: "\e710"; +} + +.icon-baby:before { + content: "\e711"; +} + +.icon-brandfill:before { + content: "\e712"; +} + +.icon-brand:before { + content: "\e713"; +} + +.icon-choicenessfill:before { + content: "\e714"; +} + +.icon-choiceness:before { + content: "\e715"; +} + +.icon-clothesfill:before { + content: "\e716"; +} + +.icon-clothes:before { + content: "\e717"; +} + +.icon-creativefill:before { + content: "\e718"; +} + +.icon-creative:before { + content: "\e719"; +} + +.icon-female:before { + content: "\e71a"; +} + +.icon-keyboard:before { + content: "\e71b"; +} + +.icon-male:before { + content: "\e71c"; +} + +.icon-newfill:before { + content: "\e71d"; +} + +.icon-new:before { + content: "\e71e"; +} + +.icon-pullleft:before { + content: "\e71f"; +} + +.icon-pullright:before { + content: "\e720"; +} + +.icon-rankfill:before { + content: "\e721"; +} + +.icon-rank:before { + content: "\e722"; +} + +.icon-bad:before { + content: "\e723"; +} + +.icon-cameraadd:before { + content: "\e724"; +} + +.icon-focus:before { + content: "\e725"; +} + +.icon-friendfill:before { + content: "\e726"; +} + +.icon-cameraaddfill:before { + content: "\e727"; +} + +.icon-rectangle390:before { + content: "\e600"; +} + +.icon-icon:before { + content: "\e602"; +} + +.icon-zhuanzhang:before { + content: "\e603"; +} + +.icon-xinyongqiahuankuan:before { + content: "\e604"; +} + +.icon-dangmianfu:before { + content: "\e605"; +} + +.icon-shuidianmei:before { + content: "\e606"; +} + +.icon-shoujichongzhi:before { + content: "\e607"; +} + +.icon-qinmifu:before { + content: "\e608"; +} + +.icon-gupiao:before { + content: "\e609"; +} + +.icon-youxichongzhi:before { + content: "\e60a"; +} + +.icon-shoukuan:before { + content: "\e60b"; +} + +.icon-jipiao:before { + content: "\e60c"; +} + +.icon-huilvhuansuan:before { + content: "\e60d"; +} + +.icon-taobao:before { + content: "\e60e"; +} + +.icon-jizhang:before { + content: "\e60f"; +} + +.icon-lvyoutehui:before { + content: "\e610"; +} + +.icon-caipiao:before { + content: "\e611"; +} + +.icon-aa:before { + content: "\e612"; +} + +.icon-kuaidi:before { + content: "\e613"; +} + +.icon-guojihuikuan:before { + content: "\e614"; +} + +.icon-aixinjuanzeng:before { + content: "\e615"; +} + +.icon-diandian:before { + content: "\e616"; +} + +.icon-huafeiqiazhuanrang:before { + content: "\e617"; +} + +.icon-aliyouxi:before { + content: "\e618"; +} + +.icon-shoujibaoling:before { + content: "\e619"; +} + +.icon-tianmaobao:before { + content: "\e61a"; +} + +.icon-qianbaopengyou:before { + content: "\e61b"; +} + +.icon-dache:before { + content: "\e61c"; +} + +.icon-kuaiqiang:before { + content: "\e61d"; +} + +.icon-suishendai:before { + content: "\e61f"; +} + +.icon-xiaoyuanyiqiatong:before { + content: "\e620"; +} + +.icon-zhaocaibao:before { + content: "\e621"; +} + +.icon-yulebao:before { + content: "\e622"; +} + +.icon-wodebaozhang:before { + content: "\e623"; +} + +.icon-huiyuantequan:before { + content: "\e624"; +} + +.icon-chenggong:before { + content: "\e625"; +} + +.icon-shibai:before { + content: "\e626"; +} + +.icon-jingshi:before { + content: "\e627"; +} + +.icon-tishi:before { + content: "\e628"; +} + +.icon-bangzhu:before { + content: "\e629"; +} + +.icon-dengdai:before { + content: "\e62a"; +} + +.icon-xiangji:before { + content: "\e62b"; +} + +.icon-shoujitongxunlu:before { + content: "\e62c"; +} + +.icon-shezhi:before { + content: "\e62d"; +} + +.icon-wode:before { + content: "\e62e"; +} + +.icon-sousuo:before { + content: "\e62f"; +} + +.icon-liebiao:before { + content: "\e630"; +} + +.icon-bianji:before { + content: "\e631"; +} + +.icon-shanchu:before { + content: "\e632"; +} + +.icon-fenxiang:before { + content: "\e633"; +} + +.icon-ditu:before { + content: "\e634"; +} + +.icon-tianjia:before { + content: "\e635"; +} + +.icon-bangzhuxiantiao:before { + content: "\e636"; +} + +.icon-gengduo:before { + content: "\e637"; +} + +.icon-saoyisao:before { + content: "\e638"; +} + +.icon-fukuanma:before { + content: "\e639"; +} + +.icon-chengshifuwu:before { + content: "\e63a"; +} + +.icon-jiaoyujiaofei:before { + content: "\e63b"; +} + +.icon-yangchengtongchongzhi:before { + content: "\e63c"; +} + +.icon-chengshiyiqiatong:before { + content: "\e63d"; +} + +.icon-yiban:before { + content: "\e63e"; +} + +.icon-canyin:before { + content: "\e63f"; +} + +.icon-gouwu:before { + content: "\e640"; +} + +.icon-fushi:before { + content: "\e641"; +} + +.icon-jiaotong:before { + content: "\e642"; +} + +.icon-yule:before { + content: "\e643"; +} + +.icon-shejiao:before { + content: "\e647"; +} + +.icon-jujia:before { + content: "\e648"; +} + +.icon-tongxun:before { + content: "\e64d"; +} + +.icon-lingshi:before { + content: "\e64e"; +} + +.icon-meirong:before { + content: "\e653"; +} + +.icon-yundong:before { + content: "\e654"; +} + +.icon-lvxing:before { + content: "\e655"; +} + +.icon-shuma:before { + content: "\e660"; +} + +.icon-xuexi:before { + content: "\e66f"; +} + +.icon-yiliao:before { + content: "\e670"; +} + +.icon-shuji:before { + content: "\e674"; +} + +.icon-chongwu:before { + content: "\e67a"; +} + +.icon-caipiao1:before { + content: "\e67b"; +} + +.icon-qiche:before { + content: "\e67d"; +} + +.icon-bangong:before { + content: "\e67f"; +} + +.icon-zhufang:before { + content: "\e680"; +} + +.icon-weixiu:before { + content: "\e681"; +} + +.icon-haizi:before { + content: "\e683"; +} + +.icon-changbei:before { + content: "\e685"; +} + +.icon-liwu:before { + content: "\e686"; +} + +.icon-lijin:before { + content: "\e687"; +} + +.icon-huankuan:before { + content: "\e688"; +} + +.icon-juanzeng:before { + content: "\e68b"; +} + +.icon-licai:before { + content: "\e68c"; +} + +.icon-gongzi:before { + content: "\e68d"; +} + +.icon-jianzhi:before { + content: "\e68e"; +} + +.icon-licaishouyi:before { + content: "\e68f"; +} + +.icon-qitashouru:before { + content: "\e692"; +} + +.icon-zidingyileimu:before { + content: "\e693"; +} + +.icon-tianjialeimu:before { + content: "\e694"; +} + +.icon-zhifubaoa:before { + content: "\e695"; +} + +.icon-zhifubaob:before { + content: "\e696"; +} + +.icon-fuwuchuanga:before { + content: "\e698"; +} + +.icon-fuwuchuangb:before { + content: "\e6a1"; +} + +.icon-tansuoa:before { + content: "\e6a2"; +} + +.icon-tansuob:before { + content: "\e6a7"; +} + +.icon-caifua:before { + content: "\e6a8"; +} + +.icon-caifub:before { + content: "\e6a9"; +} + +.icon-apps:before { + content: "\e729"; +} + +.icon-paintfill:before { + content: "\e72a"; +} + +.icon-paint:before { + content: "\e72b"; +} + +.icon-picfill:before { + content: "\e72c"; +} + +.icon-refresharrow:before { + content: "\e72d"; +} + +.icon-markfill:before { + content: "\e730"; +} + +.icon-mark:before { + content: "\e731"; +} + +.icon-presentfill:before { + content: "\e732"; +} + +.icon-repeal:before { + content: "\e733"; +} + +.icon-album:before { + content: "\e734"; +} + +.icon-peoplefill:before { + content: "\e735"; +} + +.icon-people:before { + content: "\e736"; +} + +.icon-servicefill:before { + content: "\e737"; +} + +.icon-repair:before { + content: "\e738"; +} + +.icon-file:before { + content: "\e739"; +} + +.icon-repairfill:before { + content: "\e73a"; +} + +.icon-taoxiaopu:before { + content: "\e73b"; +} + +.icon-attentionfill:before { + content: "\e73c"; +} + +.icon-attention:before { + content: "\e73d"; +} + +.icon-commandfill:before { + content: "\e73e"; +} + +.icon-command:before { + content: "\e73f"; +} + +.icon-communityfill:before { + content: "\e740"; +} + +.icon-community:before { + content: "\e741"; +} + +.icon-read:before { + content: "\e742"; +} + +.icon-suan:before { + content: "\e743"; +} + +.icon-hua:before { + content: "\e744"; +} + +.icon-ju:before { + content: "\e745"; +} + +.icon-tian:before { + content: "\e748"; +} + +.icon-calendar:before { + content: "\e74a"; +} + +.icon-cut:before { + content: "\e74b"; +} + +.icon-magic:before { + content: "\e74c"; +} + +.icon-backwardfill:before { + content: "\e74d"; +} + +.icon-playfill:before { + content: "\e74f"; +} + +.icon-stop:before { + content: "\e750"; +} + +.icon-tagfill:before { + content: "\e751"; +} + +.icon-tag:before { + content: "\e752"; +} + +.icon-group:before { + content: "\e753"; +} + +.icon-all:before { + content: "\e755"; +} + +.icon-backdelete:before { + content: "\e756"; +} + +.icon-hotfill:before { + content: "\e757"; +} + +.icon-hot:before { + content: "\e758"; +} + +.icon-post:before { + content: "\e759"; +} + +.icon-radiobox:before { + content: "\e75b"; +} + +.icon-rounddown:before { + content: "\e75c"; +} + +.icon-upload:before { + content: "\e75d"; +} + +.icon-writefill:before { + content: "\e760"; +} + +.icon-write:before { + content: "\e761"; +} + +.icon-radioboxfill:before { + content: "\e763"; +} + +.icon-punch:before { + content: "\e764"; +} + +.icon-shake:before { + content: "\e765"; +} + +.icon-add1:before { + content: "\e767"; +} + +.icon-move:before { + content: "\e768"; +} + +.icon-safe:before { + content: "\e769"; +} + +.icon-haodian:before { + content: "\e76d"; +} + +.icon-mao:before { + content: "\e76e"; +} + +.icon-qi:before { + content: "\e76f"; +} + +.icon-ye:before { + content: "\e770"; +} + +.icon-juhuasuan:before { + content: "\e771"; +} + +.icon-taoqianggou:before { + content: "\e772"; +} + +.icon-tianmao:before { + content: "\e773"; +} + +.icon-activityfill:before { + content: "\e775"; +} + +.icon-crownfill:before { + content: "\e776"; +} + +.icon-crown:before { + content: "\e777"; +} + +.icon-goodsfill:before { + content: "\e778"; +} + +.icon-messagefill:before { + content: "\e779"; +} + +.icon-profilefill:before { + content: "\e77a"; +} + +.icon-sound:before { + content: "\e77b"; +} + +.icon-sponsorfill:before { + content: "\e77c"; +} + +.icon-sponsor:before { + content: "\e77d"; +} + +.icon-upblock:before { + content: "\e77e"; +} + +.icon-weblock:before { + content: "\e77f"; +} + +.icon-weunblock:before { + content: "\e780"; +} + +.icon-1111:before { + content: "\e782"; +} + +.icon-my:before { + content: "\e78b"; +} + +.icon-myfill:before { + content: "\e78c"; +} + +.icon-emojifill:before { + content: "\e78d"; +} + +.icon-emojiflashfill:before { + content: "\e78e"; +} + +.icon-flashbuyfill-copy:before { + content: "\e78f"; +} + +.icon-text:before { + content: "\e791"; +} + +.icon-goodsfavor:before { + content: "\e794"; +} + +.icon-musicfill:before { + content: "\e795"; +} + +.icon-musicforbidfill:before { + content: "\e796"; +} + +.icon-xiamiforbid:before { + content: "\e797"; +} + +.icon-xiami:before { + content: "\e798"; +} + +.icon-roundleftfill:before { + content: "\e799"; +} + +.icon-triangledownfill:before { + content: "\e79b"; +} + +.icon-triangleupfill:before { + content: "\e79c"; +} + +.icon-roundleftfill-copy:before { + content: "\e79e"; +} + +.icon-weixin:before { + content: "\e6ab"; +} + +.icon-pulldown1:before { + content: "\e79f"; +} + +.icon-emojilight:before { + content: "\e7a1"; +} + +.icon-keyboardlight:before { + content: "\e7a3"; +} + +.icon-recordfill:before { + content: "\e7a4"; +} + +.icon-recordlight:before { + content: "\e7a5"; +} + +.icon-record:before { + content: "\e7a6"; +} + +.icon-roundaddlight:before { + content: "\e7a7"; +} + +.icon-soundlight:before { + content: "\e7a8"; +} + +.icon-cardboardfill:before { + content: "\e7a9"; +} + +.icon-cardboard:before { + content: "\e7aa"; +} + +.icon-formfill:before { + content: "\e7ab"; +} + +.icon-coin:before { + content: "\e7ac"; +} + +.icon-sortlight:before { + content: "\e7ad"; +} + +.icon-cardboardforbid:before { + content: "\e7af"; +} + +.icon-circlefill:before { + content: "\e7b0"; +} + +.icon-circle:before { + content: "\e7b1"; +} + +.icon-attentionforbid:before { + content: "\e7b2"; +} + +.icon-attentionforbidfill:before { + content: "\e7b3"; +} + +.icon-attentionfavorfill:before { + content: "\e7b4"; +} + +.icon-attentionfavor:before { + content: "\e7b5"; +} + +.icon-piclight:before { + content: "\e7b7"; +} + +.icon-shoplight:before { + content: "\e7b8"; +} + +.icon-voicelight:before { + content: "\e7b9"; +} + +.icon-attentionfavorfill-copy:before { + content: "\e7ba"; +} + +.icon-full:before { + content: "\e7bc"; +} + +.icon-mail:before { + content: "\e7bd"; +} + +.icon-peoplelist:before { + content: "\e7be"; +} + +.icon-logo:before { + content: "\e6aa"; +} + +.icon-daohang1:before { + content: "\e6ad"; +} + +.icon-goodsnewfill:before { + content: "\e7bf"; +} + +.icon-goodsnew:before { + content: "\e7c0"; +} + +.icon-medalfill:before { + content: "\e7c1"; +} + +.icon-medal:before { + content: "\e7c2"; +} + +.icon-newsfill:before { + content: "\e7c3"; +} + +.icon-newshotfill:before { + content: "\e7c4"; +} + +.icon-newshot:before { + content: "\e7c5"; +} + +.icon-news:before { + content: "\e7c6"; +} + +.icon-videofill:before { + content: "\e7c7"; +} + +.icon-video:before { + content: "\e7c8"; +} + +.icon-askfill:before { + content: "\e7c9"; +} + +.icon-ask:before { + content: "\e7ca"; +} + +.icon-exit:before { + content: "\e7cb"; +} + +.icon-skinfill:before { + content: "\e7cc"; +} + +.icon-skin:before { + content: "\e7cd"; +} + +.icon-moneybagfill:before { + content: "\e7ce"; +} + +.icon-usefullfill:before { + content: "\e7cf"; +} + +.icon-usefull:before { + content: "\e7d0"; +} + +.icon-moneybag:before { + content: "\e7d1"; +} + +.icon-redpacket_fill:before { + content: "\e7d3"; +} + +.icon-subscription:before { + content: "\e7d4"; +} + +.icon-home_light:before { + content: "\e7d5"; +} + +.icon-my_light:before { + content: "\e7d6"; +} + +.icon-community_light:before { + content: "\e7d7"; +} + +.icon-cart_light:before { + content: "\e7d8"; +} + +.icon-we_light:before { + content: "\e7d9"; +} + +.icon-home_fill_light:before { + content: "\e7da"; +} + +.icon-cart_fill_light:before { + content: "\e7db"; +} + +.icon-community_fill_light:before { + content: "\e7dc"; +} + +.icon-my_fill_light:before { + content: "\e7dd"; +} + +.icon-we_fill_light:before { + content: "\e7de"; +} + +.icon-skin_light:before { + content: "\e7df"; +} + +.icon-search_light:before { + content: "\e7e0"; +} + +.icon-scan_light:before { + content: "\e7e1"; +} + +.icon-people_list_light:before { + content: "\e7e2"; +} + +.icon-message_light:before { + content: "\e7e3"; +} + +.icon-close_light:before { + content: "\e7e4"; +} + +.icon-add_light:before { + content: "\e7e5"; +} + +.icon-profile_light:before { + content: "\e7e6"; +} + +.icon-service_light:before { + content: "\e7e7"; +} + +.icon-friend_add_light:before { + content: "\e7e8"; +} + +.icon-edit_light:before { + content: "\e7e9"; +} + +.icon-camera_light:before { + content: "\e7ea"; +} + +.icon-hot_light:before { + content: "\e7eb"; +} + +.icon-refresh_light:before { + content: "\e7ec"; +} + +.icon-back_light:before { + content: "\e7ed"; +} + +.icon-share_light:before { + content: "\e7ee"; +} + +.icon-comment_light:before { + content: "\e7ef"; +} + +.icon-appreciate_light:before { + content: "\e7f0"; +} + +.icon-favor_light:before { + content: "\e7f1"; +} + +.icon-appreciate_fill_light:before { + content: "\e7f2"; +} + +.icon-comment_fill_light:before { + content: "\e7f3"; +} + +.icon-wang_light:before { + content: "\e7f4"; +} + +.icon-more_android_light:before { + content: "\e7f5"; +} + +.icon-friend_light:before { + content: "\e7f6"; +} + +.icon-more_light:before { + content: "\e7f7"; +} + +.icon-goods_favor_light:before { + content: "\e7f8"; +} + +.icon-goods_new_fill_light:before { + content: "\e7f9"; +} + +.icon-goods_new_light:before { + content: "\e7fa"; +} + +.icon-goods_light:before { + content: "\e7fb"; +} + +.icon-medal_fill_light:before { + content: "\e7fc"; +} + +.icon-medal_light:before { + content: "\e7fd"; +} + +.icon-news_fill_light:before { + content: "\e7fe"; +} + +.icon-news_hot_fill_light:before { + content: "\e7ff"; +} + +.icon-news_hot_light:before { + content: "\e800"; +} + +.icon-news_light:before { + content: "\e801"; +} + +.icon-video_fill_light:before { + content: "\e802"; +} + +.icon-message_fill_light:before { + content: "\e803"; +} + +.icon-form_light:before { + content: "\e804"; +} + +.icon-video_light:before { + content: "\e805"; +} + +.icon-search_list_light:before { + content: "\e806"; +} + +.icon-form_fill_light:before { + content: "\e807"; +} + +.icon-global_light:before { + content: "\e808"; +} + +.icon-global:before { + content: "\e809"; +} + +.icon-favor_fill_light:before { + content: "\e80a"; +} + +.icon-delete_light:before { + content: "\e80b"; +} + +.icon-back_android:before { + content: "\e80c"; +} + +.icon-back_android_light:before { + content: "\e80d"; +} + +.icon-down_light:before { + content: "\e80e"; +} + +.icon-round_close_light:before { + content: "\e80f"; +} + +.icon-round_close_fill_light:before { + content: "\e810"; +} + +.icon-expressman:before { + content: "\e811"; +} + +.icon-punch_light:before { + content: "\e812"; +} + +.icon-evaluate_fill:before { + content: "\e813"; +} + +.icon-furniture:before { + content: "\e814"; +} + +.icon-dress:before { + content: "\e815"; +} + +.icon-coffee:before { + content: "\e816"; +} + +.icon-sports:before { + content: "\e817"; +} + +.icon-group_light:before { + content: "\e818"; +} + +.icon-location_light:before { + content: "\e819"; +} + +.icon-attention_light:before { + content: "\e81a"; +} + +.icon-group_fill_light:before { + content: "\e81b"; +} + +.icon-group_fill:before { + content: "\e81c"; +} + +.icon-play_forward_fill:before { + content: "\e81d"; +} + +.icon-shoucang:before { + content: "\e86d"; +} + +.icon-guanbijiantou:before { + content: "\e86e"; +} + +.icon-shoucang1:before { + content: "\e86f"; +} + +.icon-sousuo1:before { + content: "\e870"; +} + +.icon-fenxiang1:before { + content: "\e871"; +} + +.icon-xiaoxi:before { + content: "\e872"; +} + +.icon-xihuan:before { + content: "\e873"; +} + +.icon-xihuan1:before { + content: "\e874"; +} + +.icon-zan:before { + content: "\e875"; +} + +.icon-zan1:before { + content: "\e876"; +} + +.icon-huafu:before { + content: "\e877"; +} + +.icon-lvjing:before { + content: "\e878"; +} + +.icon-huafu1:before { + content: "\e879"; +} + +.icon-fanzhuanjingtou:before { + content: "\e87a"; +} + +.icon-paizhao:before { + content: "\e87b"; +} + +.icon-shanguangdengdakai:before { + content: "\e87c"; +} + +.icon-shanguangdengzidong:before { + content: "\e87d"; +} + +.icon-huafu2:before { + content: "\e87e"; +} + +.icon-huafu3:before { + content: "\e87f"; +} + +.icon-shanguangdengguanbi:before { + content: "\e880"; +} + +.icon-paizhao1:before { + content: "\e881"; +} + +.icon-kuaitui:before { + content: "\e882"; +} + +.icon-bianda:before { + content: "\e883"; +} + +.icon-kuaijin:before { + content: "\e884"; +} + +.icon-xuanzhuanshouji:before { + content: "\e885"; +} + +.icon-liangdu:before { + content: "\e886"; +} + +.icon-yanjingmoshi:before { + content: "\e887"; +} + +.icon-zanting:before { + content: "\e888"; +} + +.icon-yinliang:before { + content: "\e889"; +} + +.icon-vrbofangqi:before { + content: "\e88a"; +} + +.icon-suoxiao:before { + content: "\e88b"; +} + +.icon-bofang:before { + content: "\e88c"; +} + +.icon-yueduxiao:before { + content: "\e88d"; +} + +.icon-xialajiantouxiao:before { + content: "\e88e"; +} + +.icon-dingweixiao:before { + content: "\e88f"; +} + +.icon-vrbofangqi1:before { + content: "\e890"; +} + +.icon-jingxuan:before { + content: "\e891"; +} + +.icon-zhekou:before { + content: "\e892"; +} + +.icon-tishi1:before { + content: "\e893"; +} + +.icon-shuiguo:before { + content: "\e894"; +} + +.icon-huiyi:before { + content: "\e895"; +} + +.icon-youhuiquan:before { + content: "\e896"; +} + +.icon-jianshen:before { + content: "\e897"; +} + +.icon-chufang:before { + content: "\e898"; +} + +.icon-ditu1:before { + content: "\e899"; +} + +.icon-zanxiao:before { + content: "\e89a"; +} + +.icon-huiyuanqia:before { + content: "\e89b"; +} + +.icon-jiesonghuoche:before { + content: "\e89c"; +} + +.icon-changyongxinxi:before { + content: "\e89d"; +} + +.icon-fanchengjipiao:before { + content: "\e89e"; +} + +.icon-chujingchaoshi:before { + content: "\e89f"; +} + +.icon-jiudian:before { + content: "\e8a0"; +} + +.icon-shoujian:before { + content: "\e8a1"; +} + +.icon-shaixuan:before { + content: "\e8a2"; +} + +.icon-jiesongji:before { + content: "\e8a3"; +} + +.icon-tupian:before { + content: "\e8a4"; +} + +.icon-zengjia:before { + content: "\e8a5"; +} + +.icon-neirong2:before { + content: "\e8a6"; +} + +.icon-daohang:before { + content: "\e8a7"; +} + +.icon-wenda:before { + content: "\e8a8"; +} + +.icon-fujian:before { + content: "\e8a9"; +} + +.icon-ganxie:before { + content: "\e8aa"; +} + +.icon-gengduo1:before { + content: "\e8ab"; +} + +.icon-gouwu1:before { + content: "\e8ac"; +} + +.icon-ganxie1:before { + content: "\e8ad"; +} + +.icon-huodongxiangqu:before { + content: "\e8ae"; +} + +.icon-huidaodingbu:before { + content: "\e8af"; +} + +.icon-dianhua:before { + content: "\e8b0"; +} + +.icon-huodongxiangqu1:before { + content: "\e8b1"; +} + +.icon-jinrujiantou:before { + content: "\e8b2"; +} + +.icon-jieban:before { + content: "\e8b3"; +} + +.icon-kefu:before { + content: "\e8b4"; +} + +.icon-liebiao1:before { + content: "\e8b5"; +} + +.icon-jingdian:before { + content: "\e8b6"; +} + +.icon-jingdian1:before { + content: "\e8b7"; +} + +.icon-mulu:before { + content: "\e8b8"; +} + +.icon-neirong:before { + content: "\e8b9"; +} + +.icon-naozhong:before { + content: "\e8ba"; +} + +.icon-pinglun:before { + content: "\e8bb"; +} + +.icon-saoyisao1:before { + content: "\e8bc"; +} + +.icon-qianzheng:before { + content: "\e8bd"; +} + +.icon-shouqijiantouxiao:before { + content: "\e8be"; +} + +.icon-toutiao:before { + content: "\e8bf"; +} + +.icon-shezhi1:before { + content: "\e8c0"; +} + +.icon-tuichu:before { + content: "\e8c1"; +} + +.icon-jinnang:before { + content: "\e8c2"; +} + +.icon-wenda1:before { + content: "\e8c3"; +} + +.icon-wifi1:before { + content: "\e8c4"; +} + +.icon-wifidianhuaqia:before { + content: "\e8c5"; +} + +.icon-changge:before { + content: "\e8c6"; +} + +.icon-dianpu:before { + content: "\e8c7"; +} + +.icon-baoxiandingdan:before { + content: "\e8c8"; +} + +.icon-anquanzhongxin:before { + content: "\e8c9"; +} + +.icon-dingdanchulizhong:before { + content: "\e8ca"; +} + +.icon-dingdandaifukuan:before { + content: "\e8cb"; +} + +.icon-dingdan:before { + content: "\e8cc"; +} + +.icon-dingdanjihe:before { + content: "\e8cd"; +} + +.icon-faxian:before { + content: "\e8ce"; +} + +.icon-chujingyou:before { + content: "\e8cf"; +} + +.icon-dingdanyichenggong:before { + content: "\e8d0"; +} + +.icon-gouwu2:before { + content: "\e8d1"; +} + +.icon-gouwuche:before { + content: "\e8d2"; +} + +.icon-dujia:before { + content: "\e8d3"; +} + +.icon-hongbao:before { + content: "\e8d4"; +} + +.icon-huochepiao:before { + content: "\e8d5"; +} + +.icon-jihuozhongzhuan:before { + content: "\e8d6"; +} + +.icon-jiudian1:before { + content: "\e8d7"; +} + +.icon-licheng:before { + content: "\e8d8"; +} + +.icon-guojijipiao:before { + content: "\e8d9"; +} + +.icon-lichengdixian:before { + content: "\e8da"; +} + +.icon-jipiao1:before { + content: "\e8db"; +} + +.icon-lichengfanbei:before { + content: "\e8dc"; +} + +.icon-mudedi:before { + content: "\e8dd"; +} + +.icon-qichepiao:before { + content: "\e8de"; +} + +.icon-lubiao:before { + content: "\e8df"; +} + +.icon-qitadingdan:before { + content: "\e8e0"; +} + +.icon-rili:before { + content: "\e8e1"; +} + +.icon-shikebiao:before { + content: "\e8e2"; +} + +.icon-shoudiantongguan:before { + content: "\e8e3"; +} + +.icon-shoudiantongkai:before { + content: "\e8e4"; +} + +.icon-taideng:before { + content: "\e8e5"; +} + +.icon-shouye:before { + content: "\e8e6"; +} + +.icon-weilaijiudian:before { + content: "\e8e7"; +} + +.icon-xiangqing:before { + content: "\e8e8"; +} + +.icon-wangwang:before { + content: "\e8e9"; +} + +.icon-wode1:before { + content: "\e8ea"; +} + +.icon-hangcheng:before { + content: "\e8eb"; +} + +.icon-yuyuedingdan:before { + content: "\e8ec"; +} + +.icon-zuche:before { + content: "\e8ed"; +} + +.icon-zhoubianyou:before { + content: "\e8ee"; +} + +.icon-yijianfankui:before { + content: "\e8ef"; +} + +.icon-bangzhu1:before { + content: "\e8f0"; +} + +.icon-bofang1:before { + content: "\e8f1"; +} + +.icon-bangdan:before { + content: "\e8f2"; +} + +.icon-bangdan1:before { + content: "\e8f3"; +} + +.icon-feiyongbaohan:before { + content: "\e8f4"; +} + +.icon-ditudingwei:before { + content: "\e8f5"; +} + +.icon-canyin1:before { + content: "\e8f6"; +} + +.icon-fanhui:before { + content: "\e8f7"; +} + +.icon-gantanhao:before { + content: "\e8f8"; +} + +.icon-feiyongbuhan:before { + content: "\e8f9"; +} + +.icon-gengduo2:before { + content: "\e8fa"; +} + +.icon-huiyuan:before { + content: "\e8fb"; +} + +.icon-jia:before { + content: "\e8fc"; +} + +.icon-jian:before { + content: "\e8fd"; +} + +.icon-jingdianwanfa:before { + content: "\e8fe"; +} + +.icon-jingdianwanfa1:before { + content: "\e8ff"; +} + +.icon-jiaoxing:before { + content: "\e900"; +} + +.icon-kuandai:before { + content: "\e901"; +} + +.icon-qianzheng1:before { + content: "\e902"; +} + +.icon-shibai1:before { + content: "\e903"; +} + +.icon-qiehuan:before { + content: "\e904"; +} + +.icon-shijian:before { + content: "\e905"; +} + +.icon-shuaxin:before { + content: "\e906"; +} + +.icon-tingche:before { + content: "\e907"; +} + +.icon-reshui:before { + content: "\e908"; +} + +.icon-xiaolian:before { + content: "\e909"; +} + +.icon-weizhixiangqing:before { + content: "\e90a"; +} + +.icon-tuikuan:before { + content: "\e90b"; +} + +.icon-youji:before { + content: "\e90c"; +} + +.icon-xuanzuo:before { + content: "\e90d"; +} + +.icon-youji1:before { + content: "\e90e"; +} + +.icon-zhengque:before { + content: "\e90f"; +} + +.icon-youyongchi:before { + content: "\e910"; +} + +.icon-huabeizhangdan:before { + content: "\e911"; +} + +.icon-guojihuochepiao:before { + content: "\e912"; +} + +.icon-menpiao:before { + content: "\e913"; +} + +.icon-shangwu:before { + content: "\e914"; +} + +.icon-zaocan:before { + content: "\e915"; +} + +.icon-shaixuan1:before { + content: "\e916"; +} + +.icon-shaixuan2:before { + content: "\e917"; +} + +.icon-fanhuijiantou:before { + content: "\e918"; +} + +.icon-guoneiyou:before { + content: "\e919"; +} + +.icon-youlun:before { + content: "\e91a"; +} + +.icon-menpiao1:before { + content: "\e91b"; +} + +.icon-dangdiwanle:before { + content: "\e91c"; +} + +.icon-dangdiwanle1:before { + content: "\e91d"; +} + +.icon-pinglunxiao:before { + content: "\e91e"; +} + +.icon-jinrujiantouxiao:before { + content: "\e91f"; +} + +.icon-dingweixiao1:before { + content: "\e920"; +} + +.icon-guanbixiao:before { + content: "\e921"; +} + +.icon-shoucangxiao:before { + content: "\e922"; +} + +.icon-shoucangxiao1:before { + content: "\e923"; +} + +.icon-gaoxiao:before { + content: "\e924"; +} + +.icon-lishixiao:before { + content: "\e925"; +} + +.icon-jiazaixiao:before { + content: "\e926"; +} + +.icon-lishixiao1:before { + content: "\e927"; +} + +.icon-duigouxiao:before { + content: "\e928"; +} + +.icon-dixiao:before { + content: "\e929"; +} + +.icon-wenxiao:before { + content: "\e92a"; +} + +.icon-duigouzhong:before { + content: "\e92b"; +} + +.icon-feijizhong:before { + content: "\e92c"; +} + +.icon-huanzhong:before { + content: "\e92d"; +} + +.icon-quzhong:before { + content: "\e92e"; +} + +.icon-quzhong1:before { + content: "\e92f"; +} + +.icon-fanzhong:before { + content: "\e930"; +} + +.icon-biaodankongjianshanchu:before { + content: "\e931"; +} + +.icon-biaodankongjianlianxiren:before { + content: "\e932"; +} + +.icon-shanchu1:before { + content: "\e933"; +} + +.icon-banxiao:before { + content: "\e934"; +} + +.icon-xiuxiao:before { + content: "\e935"; +} + +.icon-remendibiaoxiao:before { + content: "\e936"; +} + +.icon-ditiexiao:before { + content: "\e937"; +} + +.icon-cuicuxiao:before { + content: "\e938"; +} + +.icon-duquanjing:before { + content: "\e939"; +} + +.icon-shangquanxiao:before { + content: "\e93a"; +} + +.icon-biaodankongjiandanxuan:before { + content: "\e93b"; +} + +.icon-zantianchongxiao:before { + content: "\e93c"; +} + +.icon-biaodankongjianfuxuan:before { + content: "\e93d"; +} + +.icon-biaodankongjianfuxuankong:before { + content: "\e93e"; +} + +.icon-chaxunfancheng:before { + content: "\e93f"; +} + +.icon-chaxunchufadaoda:before { + content: "\e940"; +} + +.icon-wenhaoxiao:before { + content: "\e941"; +} + +.icon-icon-test:before { + content: "\e942"; +} + +.icon-xiangxiajiantoucuxiao:before { + content: "\e943"; +} + +.icon-chufadaodaxiao:before { + content: "\e944"; +} + +.icon-daxiao:before { + content: "\e945"; +} + +.icon-bujifapiao:before { + content: "\e946"; +} + +.icon-gongxianghangbanxiao:before { + content: "\e947"; +} + +.icon-dijiaqushi:before { + content: "\e948"; +} + +.icon-tejiajipiaobiaoqian:before { + content: "\e949"; +} + +.icon-hangbanyanwu:before { + content: "\e94a"; +} + +.icon-tuijianjipiao:before { + content: "\e94b"; +} + +.icon-fangxinfei:before { + content: "\e94c"; +} + +.icon-qiehuanchengshi:before { + content: "\e94d"; +} + +.icon-tuijianqiche:before { + content: "\e94e"; +} + +.icon-taocan-suoxiao:before { + content: "\e94f"; +} + +.icon-wenda2:before { + content: "\e950"; +} + +.icon-weizhidifang:before { + content: "\e951"; +} + +.icon-hangliexiao:before { + content: "\e952"; +} + +.icon-wopu:before { + content: "\e953"; +} + +.icon-xiugai:before { + content: "\e954"; +} + +.icon-zhinan:before { + content: "\e955"; +} + +.icon-zengzhifuwu:before { + content: "\e956"; +} + +.icon-yingerpiaobuzhichi:before { + content: "\e957"; +} + +.icon-yingerpiaozhichi:before { + content: "\e958"; +} + +.icon-jipiaoxiaoxiala:before { + content: "\e959"; +} + +.icon-jinrujiantouxiao1:before { + content: "\e95a"; +} + +.icon-lishihangcheng:before { + content: "\e95b"; +} + +.icon-sousuoxiao:before { + content: "\e95c"; +} + +.icon-xiangjixiao:before { + content: "\e95d"; +} + +.icon-xiangshangjiantoucuxiao:before { + content: "\e95e"; +} + +.icon-huochepiaomianxing:before { + content: "\e95f"; +} + +.icon-xuzhixiao:before { + content: "\e960"; +} + +.icon-fenxiangxiao:before { + content: "\e961"; +} + +.icon-wangfandijia:before { + content: "\e962"; +} + +.icon-hangbandongtai:before { + content: "\e963"; +} + +.icon-guanbishixin:before { + content: "\e964"; +} + +.icon-fanhuijiantouxiangqingye:before { + content: "\e965"; +} + +.icon-duigou-weigouxuan:before { + content: "\e966"; +} + +.icon-kouling:before { + content: "\e967"; +} + +.icon-lianjie:before { + content: "\e968"; +} + +.icon-subscription_light:before { + content: "\e81e"; +} + +.icon-deliver_fill:before { + content: "\e81f"; +} + +.icon-notice_forbid_fill:before { + content: "\e820"; +} + +.icon-qr_code_light:before { + content: "\e821"; +} + +.icon-qichebanci:before { + content: "\e969"; +} + +.icon-chengnianrennan:before { + content: "\e96a"; +} + +.icon-chengnianrennv:before { + content: "\e96b"; +} + +.icon-youleyuan:before { + content: "\e96c"; +} + +.icon-zhifubao:before { + content: "\e96d"; +} + +.icon-gantanhaozhong:before { + content: "\e96e"; +} + +.icon-pailie:before { + content: "\e96f"; +} + +.icon-dibiao:before { + content: "\e970"; +} + +.icon-woshuohao:before { + content: "\e971"; +} + +.icon-woshuohao1:before { + content: "\e972"; +} + +.icon-paihang:before { + content: "\e973"; +} + +.icon-settings_light:before { + content: "\e822"; +} + +.icon-lingquanzhongxin:before { + content: "\e974"; +} + +.icon-xingqiu:before { + content: "\e975"; +} + +.icon-pdf:before { + content: "\e976"; +} + +.icon-guojijiudian:before { + content: "\e977"; +} + +.icon-kezhangongyu:before { + content: "\e978"; +} + +.icon-youxian:before { + content: "\e979"; +} + +.icon-dangritui:before { + content: "\e97a"; +} + +.icon-pick:before { + content: "\e823"; +} + +.icon-dianhua1:before { + content: "\e72e"; +} + +.icon-ARsaoyisao:before { + content: "\e97b"; +} + +.icon-jinrujiantou1:before { + content: "\e97c"; +} + +.icon-triangledownfill-after::after { + content: "\e79b"; + position: absolute; + font-size: 20rpx; + top: -14rpx; + right: -50%; + color: #818181; +} diff --git a/common/css/iconfont.ttf b/common/css/iconfont.ttf new file mode 100644 index 0000000000000000000000000000000000000000..2127d20094565abb6eee80f192aeb3440054616f GIT binary patch literal 211584 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 b0X2>XtK<`1Lh<)M9n?`yxrRdiU*!J)$g!y; literal 0 HcmV?d00001 diff --git a/common/css/new_iconfont.css b/common/css/new_iconfont.css new file mode 100644 index 0000000..21e6e91 --- /dev/null +++ b/common/css/new_iconfont.css @@ -0,0 +1,17 @@ +@font-face { + font-family: "new_iconfont"; + src: url(data:application/font-woff2;charset=utf-8;base64,d09GMgABAAAAAAMgAA0AAAAABywAAALMAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP0ZGVE0cGh4GVgCCQhEICoIcgXwLCgABNgIkAxAEIAWFCAcxGxgGEZWbbcl+JGSnhZeMumdLbKWaRok38fC8Tv1zJbl5ZQK7gLg1mfqBYQJeiWn16XLXh21UhZqSePDTd43fxyfwvO3ebf8GEihlGaWSQBM309pEk3NaWyAKu2hNisOAohedNrY9bn19e7DXZ33iH5w3HmpLt5K1FgLeu6tvgo8uWtpFO3WgEdogE3K5UCBDRBwlsp29ClwKXh+PikSm1LTAsl2zd5j2fSfqyWurtTYwwHkIQI4cnQSYJBfopNANhULwfadqFezS/gcEiCEAUeBwPw8BP0v8qgwUICGhjMOAAgBpleo3al40y7df0KZyTeR11zZsfGHr8tVXtdpxVaW8u9Jo7eNv171z4Vu1b1YuuO+66++/+94Ho+6BjQGdura7r+XQWnOHA3Ca4x7/xFUNKpN3r/kzrbrt9llpfs0NaX6a9fDD5aar1o5defXTl146tctttw59seeWHkt6Lhm5aHbvy5vf/vrh0///2qF52+pDZ2tmf/n57Cazxqyb3WzVn3/Najpr3rzZr/393PNDh77//pNfpVkzZzq6N69Z1eSGAF94zc3lmv7lM3suBwLB/oYdb97cdNJ/qWGhYS92d/Wl/PEckgwEjTFXgPzy/xqgCKBAwd0ChbIEMjTQAFUALXyOAFobJEBIVgmQqXFQgFxyToBCcocAJQ09g4B6kq8Q0MDAmCFAQy3jGrlIfQxAJ0IzM4hMExuJXDMnwQK9jChp40GinmbeIBqo+Hl8Q33ikAZmEhaehozpUMafnVmjQRiBrlx32vkej/+RvV0oG9znAzx50U+jLeA/tabBm0vsL2+xymlKYgRYifWXTEQFH8MDb6nnMatNpCAUUMFi1KPuSXzCa5oRNVmMCs9CDBzi+9ctKsSwduNvrPILKPlv3/cBJAhNbjgupJxmrFEPFtZ8mfk5GD82KYNgF7hy7h4gIaLRHaseStY=) format('woff2'), + url(data:application/font-woff;charset=utf-8;base64,d09GRgABAAAAAAT8AA0AAAAABywAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABGRlRNAAAE4AAAABoAAAAciLzFRUdERUYAAATAAAAAHgAAAB4AKQAKT1MvMgAAAaAAAABCAAAAVjyKSA5jbWFwAAAB9AAAAD4AAAFCAA/px2dhc3AAAAS4AAAACAAAAAj//wADZ2x5ZgAAAkAAAAEMAAABHLwdyl5oZWFkAAABMAAAAC4AAAA2FpLiAmhoZWEAAAFgAAAAHQAAACQHlAOFaG10eAAAAeQAAAAPAAAAEAwAAKVsb2NhAAACNAAAAAoAAAAKAI4AAG1heHAAAAGAAAAAHwAAACABFgBhbmFtZQAAA0wAAAFJAAACiCnmEVVwb3N0AAAEmAAAAB8AAAAxw4Fw13jaY2BkYGAA4mpu8dx4fpuvDNwsDCBws8dfDk4v/X+SeRsziMvBwASiAP3ZCZIAAHjaY2BkYGBu+N/AEMPCAALM2xgYGVABCwBUeAMiAAAAeNpjYGRgYGBhCGXgYAABJiDmAkIGhv9gPgMAEbsBeAB42mNgZGFgnMDAysDA1Ml0hoGBoR9CM75mMGLkAIoysDIzYAUBaa4pDA7PZJ7JMDf8b2CIYW5gaAAKM4LkAN8dDBMAAHjaY2GAABYIXgoAASUAsgB42mNgYGBmgGAZBkYGELAB8hjBfBYGBSDNAoRA/jOZ//8hpORzqEoGRjYGGJOBkQlIMDGgAkaGYQ8AWxUHvAAAAAAAAAAAAAAAjgAAeNo9zLFKw1AUxvFzUs+5oaWxSUtTKDRpxcSKqDQ36aQoFEQQQRChuLn5Fj5C6eAotqDuCjq4q10EJxdBfITqnKs3Iq4f/+8HJlx8T3K3OQAHXPBhCdZgE/ZgH2C+tYJBbMskanY8rLJADl0Mm+VllEmnWuGwZWHDWMdYBuWslV1MsrLyV+L/+DvN6Q37Jo8ob+K2STeMrC75dIAbI/UyCaNoV8aBXS+Kmu85/rWgDyLsUomnROqOnh9w9VVtmdQjNs7YylN6xWJxAY+nNCZNioI2S6SeZu4H6J2rN9Si3EmGjufXRLFuu356wu9sER4yfdKsVvnrMVMb1NNPo08Fi9IjPmjjEH4AfSs82HjafZA9TgMxEIWf8wckEkIgqF1RANr8lCkTKfQIpaNINt6QaNdeeZ1IOQEtFQeg5RgcgBsg0XIKXpZJkyJr7ejzm5nnsQGc4xsK/98l7oQVjvEoXMERMuEq9RfhGvlduI4WPoUb1H+Em7hVA+EWLtQbHVTthLub0m3LCmcYCFdwiifhKvWVcI38KlzHFT6EG9S/hJsY41e4hWtlqQzhYTBBYJxBY4oN4wIxHCySMgbWoTn0ZhLMTE83ehE7mzgbKO9XYpcDHmg554Ap7T23Zr5KJ/5gy4HUmG4eBUu2KY0uInQoG18snNXdqHOw/Z7ttrTYv2uBNcfsUQ1s1Pw92zPSSGwMr5CSNfIyt6QSU49oa6zxu2cp1vNeCIlOvMv0iMeaNHU6925p4sDi5/KMHH20uZI996gcPmNZCHm/3U7EIIpdhj+T2HEZAAAAeNpjYGKAAC4wyciADljAokyMTGzZiXlZmYkAC3YCjAAAAAAB//8AAgABAAAADAAAABYAAAACAAEAAwADAAEABAAAAAIAAAAAeNpjYGBgZACCq0vUOUD0zR5/ORgNADpjBU4AAA==) format('woff'); +} + +.new_iconfont { + font-family: "new_iconfont" !important; + font-size: 16px; + font-style: normal; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} + +.icon-kanjia:before { + content: "\e61c"; +} diff --git a/common/css/old_diyPages.css b/common/css/old_diyPages.css new file mode 100644 index 0000000..7b3ad3b --- /dev/null +++ b/common/css/old_diyPages.css @@ -0,0 +1,1642 @@ +.notice { + background-color: #fff; + display: -webkit-flex; + display: flex; + -webkit-justify-content: space-between; + justify-content: space-between; + overflow: hidden; +} + +.diy-notice-icon { + width: 118upx; + height: 30upx; + background-size: 118upx 30upx; + background-repeat: no-repeat; +} + +.notice-l { + -webkit-flex-shrink: 0; + flex-shrink: 0; + position: relative; +} + +.notice-l.style1 { + width: 40upx; + height: 40upx; + padding: 20upx; +} + +.notice-l.style1:after { + content: ""; + width: 2upx; + height: 36%; + background-color: #e2e2e2; + position: absolute; + top: 32%; + right: 0; +} + +.notice-l.style2 { + color: #ff4f4f; + padding: 20upx; + padding-right: 0; +} + +.notice-l.style2 .span { + height: 40upx; + line-height: 40upx; + padding: 0 20upx; + background-color: #ffe1e1; + border-radius: 100upx; + font-size: 28upx; +} + +.notice-l.style3 .span { + height: 40upx; + line-height: 40upx; + color: #FE433F; + font-weight: 700; + font-size: 32upx; + padding: 20upx 0 20upx 20upx; + display: inline-block; + position: relative; +} + +.notice-l .i { + color: #ff9900; + font-size: 36upx; + margin-top: -2upx; +} + +.notice-r { + height: 80upx; + line-height: 80upx; + font-size: 24upx; + padding: 0 0 0 40upx; + -webkit-flex: 1; + flex: 1; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; +} + +.notice-r swiper { + height: 80upx !important; +} + +.notice-r swiper swiper-item .a { + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; + /* position: relative; */ +} + +.movbox{ + position: relative; + height: 80upx; + font-size: 24upx; +} + +.move{ + position: absolute; + height: 80upx; + line-height: 80upx; + /* left: 0; */ + +} + + +.notice-r-i { + height: 40upx; + line-height: 40upx; + padding-top: 20upx; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; +} + +/* magic_cube 图片魔方 */ +.magic_cube { + width: 100vw; + height: 100vw; + max-height: 100vw; + overflow: hidden; + position: relative; +} + +.magic_cube-d-f { + width: 100%; + height: 100%; + position: relative; +} + +.magic_cube-d { + width: 100%; + height: 100%; + margin-top: 0 !important; + position: relative; +} + +.magic_cube-i { + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + position: absolute; +} + +.magic_cube-i-d { + width: 100%; + height: 100%; +} + +.magic_cube-i .image { + width: 100%; + height: 100%; + object-fit: initial; + display: block; +} + +/* picturew 图片橱窗1 */ +.imgwindow { + background-color: #fff; +} + +.imgwindow:after { + content: ""; + display: block; + clear: both; +} + +.imgwindow-i { + width: 25%; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + float: left; +} + +.imgwindow-i-d .image { + width: 100%; + display: block; +} + +/* picturew2 图片橱窗2 */ +.picturew2-i { + width: 100%; +} + +.picturew2-i-d { + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; +} + +.picturew2-i .image { + width: 100%; + display: block; +} + +/* picturew3 图片橱窗3 */ +.picturew3 { + display: -webkit-flex; + display: flex; + -webkit-flex-wrap: wrap; + flex-wrap: wrap; + -webkit-justify-content: flex-start; + justify-content: flex-start; +} + +.picturew3-i { + width: 50%; +} + +.picturew3-i-d { + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; +} + +.picturew3-i .image { + width: 100%; + display: block; +} + +/* picturew4 图片橱窗4 */ +.picturew4:after { + content: ""; + clear: both; + display: block; +} + +.picturew4-i { + width: 50vw; + height: 25vw; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + float: left; +} + +.picturew4-i:nth-child(1) { + height: 50vw; +} + +.picturew4-i-d { + height: 100%; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; +} + +.picturew4-i .image { + width: 100%; + height: 100%; + display: block; +} + +/* picturew5 图片橱窗5 */ +.picturew5:after { + content: ""; + clear: both; + display: block; +} + +.picturew5-i { + width: 50vw; + height: 25vw; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + float: left; +} + +.picturew5-i:nth-child(1) { + height: 50vw; +} + +.picturew5-i:nth-child(3), +.picturew5-i:nth-child(4) { + width: 25vw; +} + +.picturew5-i-d { + height: 100%; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; +} + +.picturew5-i .image { + width: 100%; + height: 100%; + object-fit: cover; + display: block; +} + +/* picturew6 图片橱窗6 */ +.picturew6 { + display: -webkit-flex; + display: flex; + -webkit-flex-wrap: wrap; + flex-wrap: wrap; + -webkit-justify-content: flex-start; + justify-content: flex-start; +} + +.picturew6-i { + width: calc(100% / 3); +} + +.picturew6-i-d { + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; +} + +.picturew6-i .image { + width: 100%; + display: block; +} + +/* pictures 图片展播 */ +.pictures { + width: 100%; + overflow: auto; +} + +.pictures-d:after { + content: ""; + clear: both; + display: block; +} + +.picturesd { + width: 100% !important; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; +} + +.pictures-i { + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + float: left; +} + +.pictures-i .image { + position: relative; +} + +.pictures-i .image .image { + width: 100%; + /* height: 200upx; */ + background-repeat: no-repeat; +} + + +.pictures-i .image .title { + position: absolute; + height: 50upx; + line-height: 50upx; + width: 100%; + background: rgba(0, 0, 0, .3); + color: #fff; + margin: 0; + padding: 0 10upx; + bottom: 0; + left: 0; + right: 0; + font-size: 28upx; + display: block; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; +} + +.pictures-i .text { + font-size: 28upx; + height: 50upx; + line-height: 50upx; + display: block; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; + padding: 0 .25rem; + position: relative; +} + +.pictures-i.row-2 { + width: 50%; +} + +.pictures-i.row-3 { + width: 33.33%; +} + +.pictures-i.row-4 { + width: 25%; +} + +.pictures-i.row-5 { + width: 20%; +} + +/* banner 图片轮播 */ +.imgswiper { + background-color: #fff; +} + +.imgmarginlr { + margin: 0 30upx; +} + +.banner-swiper-Item { + border-radius: 10upx; +} + +/* .imgswiper .swiper { + width: 100%; + height: auto +} + */ + +.imgswiper swiper-item .image { + width: 100%; + height: 100%; + display: block; +} + +/* richtext 富文本 */ +.richtext { + background-color: #fff; +} + +/* title 标题1 */ +.titlebar { + line-height: 42upx; + font-size: 32upx; + padding: 0 30upx; + background-color: #ffffff; + position: relative; +} + +.titlebar-d { + line-height: 42upx; + display: inline-block; +} + +.titlebar .i { + font-size: 34upx; + margin-right: 10upx; + display: inline; +} + +.titlebar .text { + display: inline; +} + +.titlebar .more { + height: 42upx; + line-height: 42upx; + color: #FE433F; + font-size: 30upx; + position: absolute; + top: 0; + right: 30upx; + display: inline-block; +} + +.titlebar .more .a { + color: #999; +} + +.titlebar .more .a .span { + display: inline; +} + +.titlebar .more .a .i { + font-size: 32upx; + vertical-align: -2upx; + display: inline; +} + +/* title2 标题2 */ +.titlebar2 { + padding: 0 30upx; + position: relative; +} + +.titlebar2 .h1 { + font-weight: normal; + font-size: 36upx; +} + +.titlebar2 .p { + line-height: 42upx; + color: #999; + font-size: 24upx; +} + +.titlebar2 .more { + height: 102upx; + line-height: 102upx; + color: #FE433F; + font-size: 30upx; + position: absolute; + top: 0; + right: 30upx; + display: inline-block; +} + +.titlebar2 .more .a { + color: #999; +} + +.titlebar2 .more .a .span { + display: inline; +} + +.titlebar2 .more .a .i { + font-size: 32upx; + vertical-align: -2upx; + display: inline; +} + +/* search 搜索框 */ +.searchbox { + padding: 20upx 30upx; + background-color: #f1f1f2; +} + +.searchbox-d { + width: calc(100% - 40upx); + height: 56upx; + padding: 8upx 20upx; + background-color: #ffffff; + box-shadow: 0 0 2upx rgba(0, 0, 0, .1); + text-overflow: ellipsis; + white-space: nowrap; + display: inline-block; +} + +.searchbox-d-inl { + height: 48upx; + line-height: 48upx; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; + display: inline-block; +} + +.searchbox .i { + font-size: 28upx; + margin-right: 10upx; + display: inline; +} + +.searchbox .text { + font-size: 24upx; + display: inline; + width: 400rpx; + line-height: 50upx; + height: 50upx; +} + +.searchbox .radius { + border-radius: 10upx; +} + +.searchbox .round { + border-radius: 100upx; +} + +.searchbox2 { + display: -webkit-flex; + display: flex; + -webkit-justify-content: space-between; + justify-content: space-between; +} + +.searchbox2-l { + margin-right: 20upx; + max-width: 360upx; +} + +.searchbox2-l>image { + width: 40upx; + height: 40upx; + margin-right: 4upx; + flex-shrink: 0; +} + +.searchbox2-l .i { + font-size: 32upx; + font-weight: 600; + padding-left: 20upx; + display: inline; +} + +.searchbox2-r { + -webkit-flex: 1; + flex: 1; + display: -webkit-flex; + display: flex; + -webkit-justify-content: space-between; + justify-content: space-between; + overflow: hidden; +} + +/* search3 搜索框3 */ +.searchbox3 { + background-color: #f1f1f1; + overflow: hidden; + position: relative; +} + +.searchbox3-d { + height: 80upx; + line-height: 68upx; + padding: 10upx 30upx; + display: flex; + justify-content: space-between; + position: relative; + box-sizing: initial; +} + +.searchbox3-l { + color: #000; + font-size: 36upx; + font-style: italic; + font-family: SimHei; +} + +.searchbox3-r-d { + width: 180upx; + height: 56upx; + line-height: 56upx; + color: #808080; + font-size: 28upx; + text-align: center; + margin-top: 12upx; + background-color: #d9d9d9; + border-radius: 40upx; +} + +.searchbox3-r-d .i { + font-size: 32upx; + margin-right: 10upx; + vertical-align: -2upx; +} + +@keyframes move_wave { + 0% { + transform: translateX(0) translateZ(0) scaleY(1); + } + + 100% { + transform: translateX(-66.66666%) translateZ(0) scaleY(1); + } +} + +.search-wave { + width: 100%; + height: 28upx; + position: absolute; + left: 0; + bottom: 0; + overflow: hidden; +} + +.search-wave-d { + width: 300%; + height: 100%; + animation: move_wave 4s linear infinite; + animation-delay: 0s; + display: -webkit-flex; + display: flex; + justify-content: flex-start; +} + +.search-wave-i { + width: 100%; + height: 100%; + position: relative; +} + +.search-wave-i .image { + width: 100%; + height: 100%; + vertical-align: middle; +} + +/* line 辅助线 */ +.subline { + height: 2upx; +} + +.subline-d { + height: 0; +} + +/* menu 按钮组 */ +.btngroup-d { + padding: 0 0 10upx; + display: -webkit-flex; + display: flex; + -webkit-justify-content: flex-start; + justify-content: flex-start; + -webkit-flex-wrap: wrap; + flex-wrap: wrap; +} + +.btngroup-i { + padding-top: 20upx; +} + +.btngroup-i-t { + padding: 0 15upx; +} + +.btngroup-i-t-icon { + width: 84upx; + height: 84upx; + margin: 0 auto 8upx; + background-position: center; + background-size: cover; +} + +.btngroup-i-t-icon .image { + width: 84upx; + height: 84upx; + background-repeat: no-repeat; + background-size: 100% 100% !important; + -webkit-background-size: cover; + -o-background-size: cover; + background-position: center center; +} + +.btngroup-i-c { + height: 42upx; + line-height: 42upx; + font-size: 28upx; + color: #333; + text-align: center; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; +} + +.btngroupImage.radius { + border-radius: 20upx; + background-size: cover; + background-position: center 0; +} + +.btngroupImage.circle { + border-radius: 200upx; + background-size: cover; + background-position: center 0; +} + +/* blank 辅助空白 */ +.sublank { + background-color: #fff; +} + +/* picture 单图组 */ +.oneimgroup { + background-color: #fff; +} + +.oneimgroup-i { + width: 100%; +} + +.oneimgroup-i .image { + width: 100%; + display: block; +} + +/* rush_goods3 rush_goods3 rush_goods3 抢购3、团购3与优惠券3 */ +.goodslist { + padding: 30upx; + background-color: #fff; +} + +.goodslist-i .rush_goods_mask_img { + width: calc(((100vw - 60upx) / 1.8) * 0.7); + height: calc(((100vw - 60upx) / 1.8) * 0.7); +} + +.goodslist-i { + margin-top: 50upx; +} + +.goodslist-i:first-child { + margin-top: 0; +} + +.goodslist-i-t { + height: calc((100vw - 60upx) / 1.8); + position: relative; + overflow: hidden; +} + +.goodslist-i-t .image { + width: 100%; + height: 100%; + border-radius: 4upx; +} + +.goodslist-i-c-t { + color: #999; + font-size: 24upx; + margin-top: 20upx; + display: -webkit-flex; + display: flex; + justify-content: space-between; +} + +.goodslist-i-c-t-l { + padding-right: 20upx; + -webkit-flex-shrink: 1; + flex-shrink: 1; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; +} + +.goodslist-i-c-t-l { + -webkit-flex: 1; + flex: 1; +} + +.goodslist-i-c-c { + line-height: 48upx; + font-size: 32upx; + margin-top: 20upx; +} + +.goodslist-i-c-c .i { + height: 48upx; + line-height: 48upx; + font-size: 28upx; + font-style: normal; + margin-right: 10upx; + padding: 0 18upx; + background-color: #FFD93F; + border-radius: 4upx; + display: inline-block; +} + +.goodslist-i-c-c2 { + margin-top: 20upx; + display: -webkit-flex; + display: flex; + -webkit-justify-content: space-between; + justify-content: space-between; +} + +.goodslist-i-c-c2 .h1 { + color: #f64031; + font-size: 40upx; + -webkit-flex-shrink: 1; + flex-shrink: 1; + overflow: hidden; + text-overflow: ellipsis; + white-space: normal; + display: -webkit-box; + -webkit-box-orient: vertical; + -webkit-line-clamp: 1; +} + +.goodslist-i-c-c2 .h1 text { + position: relative; + top: -2upx; + margin-left: 4upx; +} + +.goodslist-i-c-c2 .h1 .i { + font-size: 24upx; + font-weight: normal; + vertical-align: 2upx; + margin-left: -2upx; +} + +.goodslist-i-c-c2 .h1 .span { + color: #363636; + font-size: 22upx; + font-style: normal; + font-weight: normal; + vertical-align: 2upx; + margin-left: 20upx; + display: inline; +} + +.goodslist-i-c-c2 .h1 .span .i { + height: 28upx; + line-height: 30upx; + color: #DDCDA0; + font-size: 22upx; + vertical-align: 0; + margin-left: 0; + margin-right: 4upx; + padding: 0 4upx; + background-color: #363636; + border-radius: 6upx; + display: inline-block; +} + +.goodslist-i-c-c2 .h2 { + width: 144upx; + height: 56upx; + line-height: 56upx; + color: #fff; + font-size: 28upx; + text-align: center; + font-weight: normal; + background-color: #FF4040; + border-radius: 8upx; + -webkit-flex-shrink: 0; + flex-shrink: 0; +} + +.goodslist-i-c-c2 .sell-out { + color: #808080; + background-color: #D2D2D2; +} + +.goodslist-i-c-b { + margin-top: 20upx; +} + +.goodslist-i-c-b .p { + color: #999; + font-size: 24upx; + margin-top: 6upx; + display: -webkit-flex; + display: flex; + justify-content: space-between; +} + +.goodslist-i-c-b .span { + text-decoration: line-through; +} + +.goodslist-i-c-b .em { + font-style: normal; +} + + + +/* public_goods 通用商品 */ +.transverse .transverse_list::-webkit-scrollbar { + width: 0; + height: 0; + color: transparent; +} + +.transverse { + font-size: 30upx; + /* background-color: #fff; */ +} + +.transverse .transverse_list { + width: auto; +} + +.goods_father { + padding: 30upx 0 10upx 0; + display: flex; + justify-content: flex-start; +} + +.transverse .transverse_list .goods_item { + width: calc(100vw / 2.4); + padding: 0 10upx; + flex: 0 0 auto; +} + +.transverse .transverse_list .goods_item:first-child { + padding-left: 30upx; +} + +.transverse .transverse_list .goods_item:last-child { + padding-right: 30upx; +} + +.transverse .transverse_list .goods_item .goods_img { + width: calc(100vw / 2.4); + height: calc(100vw / 2.4); + position: relative; +} + +.transverse .transverse_list .goods_item .goods_img .image { + display: block; + width: 100%; + height: 100%; +} + +.transverse .transverse_list .goods_item .goods_tit { + line-height: 42upx; + color: #333; + font-size: 26upx; + margin: 20upx 0 5upx 0; + overflow: hidden; + text-overflow: ellipsis; + white-space: normal; + display: -webkit-box; + -webkit-box-orient: vertical; + -webkit-line-clamp: 2; +} + +.transverse .transverse_list .goods_item .goods_price { + display: flex; + align-items: baseline; +} + +.transverse .transverse_list .goods_item .goods_price .present_price { + color: #f64031; + display: flex; + align-items: baseline; + font-size: 26upx; +} + +.transverse .transverse_list .goods_item .goods_price .present_price view { + font-size: 40upx; + padding-right: 8upx; +} + +.transverse .transverse_list .goods_item .goods_price .original_price { + color: #cccccc; + text-decoration: line-through; + padding-left: 20upx; + font-size: 26upx; +} + +/* shop 商家信息 */ +.b-color-f8 { + padding: 20upx 30upx; + background-color: #F8F8F8; +} + +.shangjia-i { + overflow: hidden; + margin-top: 6upx; + position: relative; + background-color: #fff; + margin-bottom: 20upx; + border-radius: 10upx; +} + +.shangjia-i:first-child { + margin-top: 0; +} + +.shangjiaISty { + padding-bottom: 0; +} + +.shangjiaISty .shangjia-i-t { + padding: 30upx 30upx 16upx 30upx; +} + +.shangjia-i-t { + padding: 30upx 30upx 0 30upx; + display: -webkit-flex; + display: flex; + -webkit-justify-content: space-between; + justify-content: space-between; +} + +.shangjia-i-t:active { + background-color: #f3f3f3; +} + +.shangjia-i-l { + width: 180upx; + height: 180upx; + border-radius: 6upx; + -webkit-flex-shrink: 0; + flex-shrink: 0; +} + +.shangjia-i-l .image { + width: 100%; + height: 100%; + border-radius: 6upx; +} + +.shangjia-i-r { + /* height: 194upx; */ + -webkit-flex: 1; + flex: 1; + padding-left: 20upx; +} + +.shangjia-i-r-d { + /* height: 180upx; */ + padding-bottom: 10upx; +} + +.shangjiaISty .shangjia-i-r-d { + padding-bottom: 0; + border-bottom: none; +} + +.shangjia-i-r-t1 { + height: 42upx; + line-height: 42upx; + font-size: 30upx; +} + +.shangjia-i-r-t2 { + position: relative; + height: 42upx; + line-height: 42upx; + padding: 4upx 0; +} + +.shangjia-i-r-t2 .icon-shoucangxiao { + font-size: 26upx; + display: inline; + margin-right: 10upx; + float: left; +} + +.shangjia-i-r-t2 .star { + display: inline-block; + position: absolute; + height: 42upx; +} + +.shangjia-i-r-t2 .star:after { + content: ""; + clear: both; + display: block; +} + +.shangjia-i-r-t2-icon { + height: 46upx; +} + +.star-grade { + margin-left: 180upx; +} + +.shangjia-i-r-t2 .star-dark .icon-shoucangxiao { + z-index: 1; +} + +.star-dark .icon-shoucangxiao { + color: #eee; +} + +.star-light .icon-shoucangxiao { + color: #FF4444; +} + +.shangjia-i-r-t2 .star-light { + z-index: 1; +} + +.shangjia-i-r-t2 .star-width { + height: 42upx; + overflow: hidden; + word-break: keep-all; + white-space: nowrap; +} +.tags_view{ + display: inline-block; + padding: 2upx 10upx; + margin-right: 10upx; + border-radius: 20upx 20upx 20upx 0upx; + border:1upx solid rgba(153,153,153,0.4); + font-size: 20upx; + } +.shangjia-i-r-t3 { + position: relative; + height: 42upx; + line-height: 42upx; + color: #666666; + font-size: 26upx; + overflow: hidden; + word-break: keep-all; + white-space: nowrap; +} + +.shangjia-i-r-t4 { + width: 420upx; + position: relative; + color: #666666; + font-size: 26upx; + overflow: hidden; + white-space: nowrap; + text-overflow: ellipsis; + margin-top: 8upx; +} + +.shangjia-i-b { + line-height: 40upx; + color: #666666; + font-size: 26upx; + padding: 2upx 30upx 12upx 30upx; + position: relative; + padding-left: 230upx; +} + +.shangjia-i-b-i { + height: 42upx; + margin-top: 6upx; + padding-right: 42upx; + overflow: hidden; + white-space: nowrap; + text-overflow: ellipsis; +} + +.shangjia-i-b-i:first-child { + margin-top: 0; +} + +.shangjia-i-b .i { + width: 42upx; + height: 42upx; + line-height: 42upx; + font-size: 28upx; + text-align: right; + position: absolute; + top: 10upx; + right: 30upx; + display: inline-block; + color: #999999; +} + +.shangjia-i-b .em { + width: 34upx; + height: 34upx; + line-height: 34upx; + text-align: center; + color: #fff; + font-style: normal; + border-radius: 4upx; + display: inline-block; + font-size: 24upx; +} + +.shangjia-i-b .qiang { + background-color: #FF7FCA; +} + +.shangjia-i-b .li { + background-color: #FF7FCA; +} +.shangjia-i-b .kan { + background-color: #FF4444; +} +.shangjia-i-b .ka { + background-color: #FFA530; +} + +.shangjia-i-b .hui { + background-color: #ff8400; +} + +.shangjia-i-b .pin { + background-color: #14DCD5; +} + +.shangjia-i-b .tuan { + background-color: #FF834C; +} + +.shangjia-i-b-i { + height: 42upx; + line-height: 42upx; +} + +.shangjia-i-b-i .span { + margin-left: 8upx; + display: inline; + font-size: 24upx; + color: #666666; +} + +.shangjia-i-b-t2 { + height: 42upx; + line-height: 42upx; + margin-top: 6upx; +} + +.shangjia-i-b-t2 .em { + margin-right: 14upx; + display: inline-block; +} + +.shangjia-i-b-t2 .em:last-child { + margin-right: 0; +} + +/* headline 头条1 */ +.goodstop-i { + width: calc(100vw - 60upx); + margin-bottom: 20upx; + padding: 40upx 30upx; + background-color: #fff; +} + +.goodstop-i:last-child { + margin-bottom: 0; +} + +.goodstop-i .h1 { + line-height: 52upx; + font-size: 36upx; + letter-spacing: 4upx; + font-weight: normal; +} + +.goodstop-i-t { + width: calc(100vw - 60upx); + height: calc((100vw - 30upx) / 1.8); + margin-top: 30upx; + position: relative; +} + +.goodstop-i-t-tag { + position: absolute; + top: 20upx; + left: 20upx; +} + +.goodstop-i-t-tag .i { + height: 52upx; + line-height: 52upx; + font-size: 24upx; + font-style: normal; + margin-left: 10upx; + padding: 0 14upx; + background-color: #FFD93F; + border-radius: 4upx; + display: inline; +} + +.goodstop-i-t-tag .i:first-child { + margin-left: 0; +} + +.goodstop-i-t .image { + width: 100%; + height: 100%; +} + +.goodstop-i-c .h2 { + height: 84upx; + line-height: 42upx; + font-size: 24upx; + color: #888; + font-weight: normal; + margin-top: 20upx; + overflow: hidden; + text-overflow: ellipsis; + display: -webkit-box; + -webkit-line-clamp: 2; + -webkit-box-orient: vertical; +} + +.goodstop-i-c .p { + height: 60upx; + line-height: 60upx; + font-size: 28upx; + color: #888; + margin-top: 20upx; + display: -webkit-flex; + display: flex; + justify-content: space-between; +} + +.goodstop-i-c .p .span { + line-height: 60upx; + -webkit-flex-shrink: 1; + flex-shrink: 1; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; + display: -webkit-flex; + display: flex; + justify-content: flex-start; +} + +.goodstop-i-c .p .span .i { + width: 60upx; + height: 60upx; + margin-right: 20upx; + border-radius: 50%; + display: block; +} + +.goodstop-i-c .p .span .b { + font-weight: normal; + display: block; +} + +.goodstop-i-c .p .span .i .image { + width: 100%; + height: 100%; + border-radius: 50%; +} + +.goodstop-i-c .p .em { + font-style: normal; + -webkit-flex-shrink: 0; + flex-shrink: 0; +} + +/* community 社群 */ +.diyPages-community{ + padding: 20upx 30upx; +} + +/* goods_detail-2 样式 */ +.goods2-coupon-style .i { + color: rgb(221, 205, 136); + font-size: 24upx; + margin-top: -2upx; + background-color: #000000; + border-radius: 10upx; + padding: 0 8upx; +} + +/* 乐豆 */ +.LeBeans{ + background: linear-gradient(to right,#F22D25,#FB6331); + position: relative; +} + +.goods3-margin-16 { + margin-right: 32upx; +} + +.goods3-margin-16 text { + position: relative; + top: -2upx; + font-size: 28upx; + margin-left: 6upx; +} + +.shop3-title-width { + width: 300upx; +} + +.store-containerIcon image { + width: 30upx; + height: 30upx; +} + +.coupon-progress { + width: 216upx; + height: 24upx; + background: rgba(255, 120, 120, .2); + border-radius: 12upx; +} + +.coupon-progress-already { + position: absolute; + left: 0; + right: 0; + top: 0; + background-color: #FF4444; + height: 100%; + border-radius: 12upx; + z-index: 2; + max-width: 100%; +} + +.rush-price-box { + margin-bottom: 14upx; +} + +.coupon-stk { + position: absolute; + width: 216upx; + height: 24upx; + left: 0; + top: 50%; + transform: translateY(-50%); + z-index: 3; +} + +.coupon-stk .shrink { + transform: scale(0.85); +} + +.coupon-btn { + position: absolute; + right: 20upx; + bottom: 24upx; + width: 130upx; + height: 50upx; + line-height: 50upx; + border-radius: 26upx; +} + +.qglist-i-t-bar { + height: 64upx; + line-height: 64upx; + padding-top: 66upx; + background: -webkit-linear-gradient(90deg, #FF7E42, #FB2F52); + background: linear-gradient(90deg, #FF7E42, #FB2F52); + border-radius: 140upx 0 0 140upx; + position: absolute; + top: -72upx; + right: 0upx; +} + +.qglist-i-t-bar-d { + display: -webkit-flex; + display: flex; + justify-content: flex-start; +} + +.qglist-i-t-bar-l { + color: #fff; + font-size: 28upx; + padding: 0 40upx 0 30upx; +} + +.qglist-i-t-bar-l .i { + font-size: 32upx; + vertical-align: -2upx; + margin-right: 8upx; + display: inline; +} + +.qglist-i-t-bar-l .em { + font-style: normal; + font-weight: 600; + display: inline; +} + +.qglist-i-t-bar-r { + padding: 10.8upx 20upx 10.8upx 0; +} + +.qglist-i-t-bar-r:after { + content: ""; + display: block; + clear: both; +} + +.qglist-i-t-bar-r .i { + width: 40upx; + height: 40upx; + margin-left: -16upx; + border-radius: 50%; + float: left; +} + +.qglist-i-t-bar-r .i .image { + width: 100%; + height: 100%; + border-radius: 50%; +} + +.Rank-logo { + position: absolute; + left: 0; + top: 0; + width: 120upx; + height: 50upx; + line-height: 50upx; + border-radius: 0 40upx 40upx 0; + background: #FF4040; + color: #FFFFFF; +} + +/* #ifdef H5 */ +.swiperBanner-marbtm /deep/ .uni-swiper-dots.uni-swiper-dots-horizontal { + /** + * 距离底部高度 + */ + margin-bottom: 0; +} + +.swiperBanner_dotsquare /deep/ .uni-swiper-dot { + border-radius: 0 !important; +} + +.swiperBanner_rectangle /deep/ .uni-swiper-dot { + width: 40upx; + border-radius: 0 !important; +} + +.swiperBanner_left /deep/ .uni-swiper-dots.uni-swiper-dots-horizontal { + left: 15% !important; +} + +.swiperBanner_right /deep/ .uni-swiper-dots.uni-swiper-dots-horizontal { + left: 85% !important; +} + +.swiperBanner-marbtm /deep/ .uni-swiper-dots.uni-swiper-dots-horizontal { + /** + * 距离底部高度 + */ + margin-bottom: 0; +} + +.swiperBanner_dotsquare { + border-radius: 0 !important; +} + +.swiperBanner_rectangle { + width: 40upx; + height: 20upx; + border-radius: 0 !important; +} + +.swiperBanner_left { + left: 8% !important; +} + +.swiperBanner_right { + right: 8% !important; + left: auto!important; +} + +/* #endif */ +.goods_img .rush_goods_mask{ + position: absolute; + left: 0; + right: 0; + top: 0; + background-color: rgba(0, 0, 0, .5); +} +.goods_img .rush_goods_mask .img{ + width: calc(100vw / 2.4); + height: calc(100vw / 2.47); + +} \ No newline at end of file diff --git a/common/js/app.js b/common/js/app.js new file mode 100644 index 0000000..6bc302f --- /dev/null +++ b/common/js/app.js @@ -0,0 +1,1392 @@ +/** + * tabBar页面路径列表 (用于链接跳转时判断) + * tabBarLinks为常量, 无需修改 + */ +import Store from "@/store" +import util from "@/common/js/util.js" +// #ifdef H5 +import wxApi from "@/common/js/wxApi.js" +// import manifest from "@/manifest.json" +// #endif +const tabBarLinks = [ + 'pages/mainPages/index/index', + 'pages/mainPages/headline/index', + 'pages/mainPages/userCenter/userCenter', + 'pages/mainPages/index/diypage?type=1', + 'pages/mainPages/index/diypage?type=2', + 'pages/mainPages/index/diypage?type=3', + 'pages/mainPages/index/diypage?type=4', + 'pages/mainPages/index/diypage?type=5', + 'pages/mainPages/index/diypage?type=6', + 'pages/mainPages/index/diypage?type=7' +]; +const Base64 = util.Base64; + +// 工具类 + +let App = { + /** + * 全局变量 + */ + globalData: { + user_id: null, + }, + // api地址 + api_root: '', + scanCode: false, + aid: '', + // 图片地址 + img_root: '', + imgfix: '', + + siteInfo: {}, + postData: {}, + loginstate:false, + base:null, + routers:null, + languageStatus:0, + /** + * 设置项目基础信息 + */ + setSiteInfo() { + // uni.setStorageSync('head_id', '24') + let version = require("@/siteinfo.json"); + this.base = version.base; + this.routers = version.routers; + // #ifdef H5 + let url = location.href, + uniacid; + if (process.env.NODE_ENV === 'development') { + uni.setStorageSync("uniacid", 1); + this.siteInfo = { + "siteroot": "https://citydev.weliam.com.cn", + "uniacid": "1", + "name": "weliam_smartcity", + "weliamv": "1.0.0" + }; + } else { + if (location.href.indexOf("/h5/?#/pages/") === -1) { + let reg = new RegExp("\/h5/.*?\#/"); + url = url.replace(reg, "/h5/#/"); + } + //获取当前请求域名 + + uniacid = util.getParams("i", url.split("#")[1], true); + let siteroot = location.protocol + "//" + location.hostname, + sitetoken = App.getClientType(), + name = location.href.split('/addons/')[1].split('/h5/')[0], + token = (sitetoken == 1) ? App.getCookie("weliam_user_token") : uni.getStorageSync('weliam_user_token'), + head_id = (location.href.indexOf("&token") === -1 ? location.href.split("head_id=")[1] : location.href.split("&")[ + 1].split("head_id=")[1]) || ""; + let head_ids = head_id.split("&")[0]; + if (head_id && !!head_id) { + // debugger + uni.setStorageSync('head_id', head_ids); + uni.setStorageSync('dating_head_id', head_ids); + }; + + this.siteInfo = { + siteroot, + name, + uniacid, + weliamv: version.weliamv, + token + } + url = url.split("&token=")[0]; + history.replaceState(null, null, `${this.base}#` + url.split("#")[1]); + } + if(url.indexOf('pages/mainPages/postDetails/postDetails') != -1){ + // + let urls = url.split('/#/')[1]; + urls = urls.replace('mainPages', "subPages"); + this.navigationTo({ + url:urls + }); + return + } + // #endif + // #ifndef H5 + this.siteInfo = version; + // #endif + this.imgfix = uni.getStorageSync('imgPrefix'); + }, + + /** + * 设置api地址 + */ + setAppRoot(aids) { + this.aid = aids + ','; + let App = this, + siteroot = null, + postData = { + source: "1", + mode: "2", + }, + weliam_user_token = this.getCookie("weliam_user_token"); + siteroot = this.siteInfo.siteroot + `${this.routers}`; + + this.aid = this.aid.replace(/,/g, ''); + this.api_root = siteroot + 'uniapp.php?i=' + this.siteInfo.uniacid + (!!this.siteInfo.token ? '&token=' + + this.siteInfo.token : ''); + if (this.api_root.indexOf('aid') === -1) { + this.api_root + '&aid=' + this.aid; + } + this.img_root = this.siteInfo.siteroot + `${this.base}/resource/image/`; + this.img_root_new = this.siteInfo.siteroot + `addons/weliam_smartcity/data/img/`; + let apiObj = this.urlToObj(this.api_root); + if (!!apiObj.token && apiObj.token !== "undefined") { + uni.setStorageSync('weliam_user_token', apiObj.token) + } else { + // this._post_form('&p=member&do=login&source=1&mode=2', {}, (res) => { + // console.log(res); + // }); + } + }, + /** + * 小程序启动场景 + */ + onStartupScene(query) { + if (query && !!query.head_id) { + // debugger + uni.setStorageSync('head_id', query.head_id); + uni.setStorageSync('dating_head_id', query.head_id); + } + }, + /** + * 获取小程序信息 + */ + updateAppInfo() { + let App = this; + App._post_form('&do=GetPlatformInfor', {}, function(result) { + Store.commit("APPINFO", result.data); + App.languageStatus = result.data.languageStatus; + uni.setStorage({ + key: 'phone', + data: result.data.phone, + success: function() {} + }); + uni.removeStorageSync('platformInfor'); + uni.setStorage({ + key: 'platformInfor', + data: result.data, + success: function() {} + }); + }); + }, + + //更新提示 + up(){ + const updateManager = uni.getUpdateManager(); + + updateManager.onCheckForUpdate(function (res) { + // 请求完新版本信息的回调 + console.log(res.hasUpdate); + }); + + updateManager.onUpdateReady(function (res) { + uni.showModal({ + title: '更新提示', + content: '新版本已经准备好,是否重启应用?', + success(res) { + if (res.confirm) { + // 新的版本已经下载好,调用 applyUpdate 应用新版本并重启 + updateManager.applyUpdate(); + } + } + }); + + }); + + updateManager.onUpdateFailed(function (res) { + // 新的版本下载失败; + uni.showModal({ + title: '升级失败', + content: '新版本下载失败,请检查网络!', + showCancel: false + }); + }); + + }, + + //获取用户设置 + userSettings(){ + let App = this; + App._post_form('&do=CustomerService', {}, function(result) { + uni.removeStorageSync('CustomerService'); + uni.removeStorageSync('btnleftAndbottom'); + let ratio; + uni.getSystemInfo({ + success: function(wh) { + ratio = wh.windowWidth / result.data.imgstyle.width; + } + }); + let imgstyle = { //imgstyle为根据接口获取用户设置的宽高,根据设备进行比例转换,以达到无论多少宽高都要占满宽度。 + width:ratio * result.data.imgstyle.width, + height:ratio * result.data.imgstyle.height + }; + uni.setStorageSync('imgstyle',imgstyle); + + + let ratios; + uni.getSystemInfo({ + success: function(wh) { + ratios = wh.windowWidth / result.data.listimgstyle.width; + } + }); + //listimgstyle应用场景为内部页面的轮播图 + let listimgstyle = { + width:ratios * result.data.listimgstyle.width, + height:ratios * result.data.listimgstyle.height + }; + uni.setStorageSync('listimgstyle',listimgstyle); + uni.setStorageSync('CustomerService',result.data); + }); + }, + //SDK经纬度获取 + wxApiCallback(path) { + let _this = this; + uni.removeStorageSync('memberCityAreaid'); + // #ifdef H5 + wxApi.wxRegister(() => { + jWeixin.getLocation({ + type: 'gcj02', + success: function(res) { + uni.setStorageSync('curLoction', res); + let data = { + aid: this.aid, + lat: res.latitude, + lng: res.longitude + } + let curtimestamp = new Date().getTime(); //当前时间 + let lastredpackeTime = uni.getStorageSync('locationGetTime'); // 最后次时间; + let now_packetTime = !!lastredpackeTime ? ((curtimestamp - lastredpackeTime) / 1000 / 60 % 60) : ""; + if(!!now_packetTime && now_packetTime < 2) return + if(path == 'pages/mainPages/index/index'){ + _this._post_form('&do=Aidtip', data, (reource) => { + if(reource.data.status == 1){ + _this.showError( + `定位到您在${reource.data.memberCityName},是否切换到该地区?`, + data => { + if (data.confirm) { + uni.setStorageSync('memberCityAreaid',reource.data.memberCityAreaid); + _this.setAppRoot(reource.data.memberCityAid); + App.navigationToH5(false,`${this.base}#/?i=${_this.siteInfo.uniacid}&aid=${reource.data.memberCityAid}`); + window.location.reload(); + }else{ + let timestamp = (new Date()).getTime(); + uni.setStorageSync('locationGetTime', timestamp) + } + }, + true + ); + } + return + }) + } + } + }); + }) + // #endif + // #ifndef H5 + App.getLocation().then(res => { + let data = { + aid: this.aid, + lat: res.latitude, + lng: res.longitude + } + let curtimestamp = new Date().getTime(); //当前时间 + let lastredpackeTime = uni.getStorageSync('locationGetTime'); // 最后时间; + let now_packetTime = !!lastredpackeTime ? ((curtimestamp - lastredpackeTime) / 1000 / 60 % 60) : ""; + if(!!now_packetTime && now_packetTime < 2) return + if(path == 'pages/mainPages/index/index'){ + _this._post_form('&do=Aidtip', data, (reource) => { + uni.setStorageSync('curLoction', res); + if(reource.data.status == 1){ + _this.showError( + `定位到您在${reource.data.memberCityName},是否切换到该地区?`, + data => { + if (data.confirm) { + uni.setStorageSync('memberCityAreaid',reource.data.memberCityAreaid); + _this.setAppRoot(reource.data.memberCityAid); + App.navigationTo({ + url: 'pages/mainPages/index/index' + }); + }else{ + let timestamp = (new Date()).getTime(); + uni.setStorageSync('locationGetTime', timestamp) + } + }, + true + ); + } + + }) + } + }) + // #endif + }, + + /** + * 跳转链接转换 + */ + navgatetoLink() { + let App = this; + App._post_form('&do=TransformationLink', {}, (res) => { + uni.setStorageSync('pagelinkList', res.data); + }) + }, + getCookie(cookieName) { + // #ifdef H5 + let cookies = document.cookie, + cookiesArr = cookies.split(";"); + for (let i = 0; i < cookiesArr.length; i++) { + let arr = cookiesArr[i].split("="); + arr[0] = arr[0].replace(/ /g, '') + if (arr[0] === cookieName) { + return arr[1]; + } + } + return ""; + // #endif + return ""; + }, + getuserToken() { + return uni.getStorageSync('weliam_user_token') + }, + /** + * 获取tabBar页面路径列表 + */ + getTabBarLinks() { + return tabBarLinks; + }, + /** + * 执行用户登录 + */ + doLogin() { + // 保存当前页面 + let App = this, + clientType = App.getClientType(), + pages = getCurrentPages(), + + url = ""; + // if(App.loginstate){ + + // // return + // } + if (pages.length > 0) { + let currentPage = pages[pages.length - 1], + pageOptions = (clientType === "1" || clientType === "2" ? currentPage : currentPage.$vm).$mp.query; + ("pages/mainPages/login/login" != currentPage.route) && uni.setStorageSync("currentPage", { + route: currentPage.route, + options: pageOptions + }); + } + // // 跳转授权页面 + // if (clientType === "2") { + // url = "pages/mainPages/login/login" + // } else if(clientType === "3") { + // url = "pages/mainPages/login/minLogin" + // } + App.navigationTo({ + url + }); + }, + + /** + * 微信公众号登陆 + */ + openWxLogin(Navurl) { + let App = this; + // #ifdef H5 + location.href = Navurl; + // #endif + }, + /** + * 判断当前客户端类型 + */ + getClientType() { + // 1 公众号 2h5 3微信 + // #ifdef MP-WEIXIN + return "3"; + // #endif + + // #ifdef H5 + let ua = navigator.userAgent.toLowerCase(); //获取判断用的对象 + if (ua.match(/MicroMessenger/i) == "micromessenger") { + return "1"; + } + return "2"; + // #endif + + //#ifdef APP-PLUS + return "3"; + //#endif + }, + + // 获取浏览器内核版本号 + + getBrowser(n) { + // #ifdef H5 + let ua = navigator.userAgent.toLowerCase(), + s, + name = '', + ver = 0; + //探测浏览器 + (s = ua.match(/msie ([\d.]+)/)) ? _set("ie", _toFixedVersion(s[1])): + (s = ua.match(/firefox\/([\d.]+)/)) ? _set("firefox", _toFixedVersion(s[1])) : + (s = ua.match(/chrome\/([\d.]+)/)) ? _set("chrome", _toFixedVersion(s[1])) : + (s = ua.match(/opera.([\d.]+)/)) ? _set("opera", _toFixedVersion(s[1])) : + (s = ua.match(/version\/([\d.]+).*safari/)) ? _set("safari", _toFixedVersion(s[1])) : 0; + + function _toFixedVersion(ver, floatLength) { + ver = ('' + ver).replace(/_/g, '.'); + floatLength = floatLength || 1; + ver = String(ver).split('.'); + ver = ver[0] + '.' + (ver[1] || '0'); + ver = Number(ver).toFixed(floatLength); + return ver; + } + + function _set(bname, bver) { + name = bname; + ver = bver; + } + return (n == 'n' ? name : (n == 'v' ? ver : name + ver)); + //getBrowser("n"); // 所获得的就是浏览器所用内核。 + //getBrowser("v");// 所获得的就是浏览器的版本号。 + //getBrowser();// 所获得的就是浏览器内核加版本号。 + // #endif + }, + + /** + * 验证是否存在user_info + */ + validateUserInfo() { + let user_info = uni.getStorageSync('userInfo'); + return !!uni.getStorageSync('userInfo'); + }, + + /** + * 显示成功提示框 + */ + showSuccess(msg, callback) { + uni.showToast({ + title: msg, + icon: 'success', + mask: true, + duration: 1500, + success() { + callback && (setTimeout(function() { + callback(); + }, 1500)); + } + }); + }, + + /** + * 显示失败提示框 + */ + showError(msg, callback, showCancel = false) { + uni.showModal({ + title: '友情提示', + content: msg, + showCancel: showCancel, + success(res) { + callback && callback(res); + } + }); + }, + + /** + * @param {Object} url 请求地址转换 + */ + transformUrl(url) { + return this.api_root + url; + }, + + /** + * get请求 + */ + _get(url, data, success, fail, complete) { + this.weRequest("GET", url, data, success, fail, complete); + }, + + /** + * post提交 + */ + _post_form(url, data, success, fail, complete) { + this.weRequest("POST", url, data, success, fail, complete); + }, + + weRequest(method, url, data, success, fail, complete) { + let App = this, + // uniacid = App.getUniacid(), + requestUrl = App.transformUrl(url), + pages = getCurrentPages(), + currentRegion = uni.getStorageSync('currentRegion'), + agencyData = uni.getStorageSync('agencyData'), + token = uni.getStorageSync('weliam_user_token'), + source = App.getClientType(), //1公众号 2H5 3微信小程序 + loginTimer = null; + // console.log(url.indexOf('&p=dating') == -1?requestUrl:requestUrl + '&dating_head_id=' + uni.getStorageSync('dating_head_id'),'当前请求'); + // 构造请求参数 + data = data || {}; + data.wxapp_id = App.siteInfo.uniacid; + data.aid = this.aid || agencyData.aid || ""; + data.token = uni.getStorageSync('weliam_user_token'); + data.source = source; + + // //#ifdef APP-PLUS + // data.source = "3"; + // //#endif + // //#ifdef H5 + // data.source = "4"; + // //#endif + uni.request({ + url:url.indexOf('&p=dating') == -1?requestUrl:requestUrl + '&dating_head_id=' + uni.getStorageSync('dating_head_id'), + header: { + 'content-type': method === "POST" ? "application/x-www-form-urlencoded" : "application/json", + }, + method: method, + data: data, + success(res) { + //#ifdef H5 + let post = requestUrl.split('&do=')[1]; + let local; + let onoption; + if(post == 'GetPlatformInfor'){ + if(location.href.indexOf(".cn/") != -1){ + local = location.href.split('.cn/')[0] + '.cn/'; + onoption = location.href.split('.cn/')[1]; + }else{ + local = location.href.split('.com/')[0] + '.com/'; + onoption = location.href.split('.com/')[1]; + } + if(res.data.data.targetDmain.length > 0){ + res.data.data.targetDmain.map(item=>{ + if(item == local){ + location.href = res.data.data.endDmain + onoption; + } + }) + } + // location.href = 'https://yys.163.com/' + // App.openWxLogin('www.baidu.com'); + }; + //#endif + + if (res.statusCode !== 200 || typeof res.data !== 'object') { + if(url == '&do=getItemParams') return + App.showError(`网络请求出错:${url}`, () => { + fail && fail(res); + }); + return false; + } + // + if (res.data.errno === 5 || res.data.message == "请先登录"){ + uni.showToast({ + title: '请先登录', + icon:'none' + }) + setTimeout(()=>{ + uni.navigateTo({ + url: '/pages/mainPages/login/minLogin' + }) + }, 2000) + } + if (res.data.errno === 2 || res.data.data.relogin == 1) { + uni.removeStorage('weliam_user_token'); + + if (pages.length > 0) { + // #ifdef H5 + + + if (source === "2") { + App.doLogin() + } else { + let currentPage = pages[pages.length - 1], + currentPageRoute = pages[pages.length - 1].route, + currentPageUrl, + pageQuery = currentPage.$mp.query, + referrer_id = pageQuery.head_id || App.siteInfo.head_id, + vueurl = currentPageRoute + '?' + App.urlEncode(pageQuery) + (!!referrer_id ? '&head_id=' + referrer_id : ""); + currentPageUrl = res.data.data.weChat_login + '&vueurl=' + encodeURIComponent(vueurl); + App.openWxLogin(currentPageUrl); + } + return false + // #endif + }else{ + App.doLogin() + } + } else if (res.data.errno === 0) { + success && success(res.data); + } else if (res.data.errno === 1) { + // debugger + let post = requestUrl.split('&do=')[1]; + if(post == 'phoneDecrypt'){ + fail && fail(res); + return false; + } + let type = uni.getStorageSync('TextSubstitution').flag074; + + //#ifdef MP-WEIXIN + let pages = getCurrentPages(), + + currentPageObj = pages[pages.length - 1], + currentPage = currentPageObj.route; + //#endif + //#ifdef H5 + let currentPage = location.href.split('?')[0].split('#/')[1]; + //#endif + + if(res.data.message == '请先绑定手机号' && type == 1 && currentPage != 'pages/subPages2/cleanCustom/bindingPhone'){ + // debugger + uni.showModal({ + showCancel:false, + content:res.data.message, + success() { + // debugger + App.navigationTo({ + url: 'pages/subPages2/cleanCustom/bindingPhone' + }); + } + }) + + return + } + // debugger + //判断是否为会员特供,从而转入会员开卡页面,因error皆为1无法判断,只能用文字判断 + if(res.data.message == '该商品会员特供,请先成为会员' || res.data.message == '当前商品为会员限定,请先成为会员!'|| res.data.message == '此商品会员特供,请先开通会员'){ + // debugger + uni.showModal({ + title:'温馨提示', + content:res.data.message, + success() { + if (res.confirm) { + App.navigationTo({ + url: 'pages/mainPages/memberCard/getMembership/getMembership?card=nhave' + }); + } else if (res.cancel) { + return + } + // debugger + + } + }) + + return + } + if (!!res.data.data.mergeflag) { + //错误回调函数 + fail && fail(res); + return false; + } else { + // + + // let postis = requestUrl.split('&do=')[1]; + // if(postis == 'useDiscountCard'){ + // App.navigationTo({}) + // } + // console.log(url); + // + if(url.indexOf('&p=distribution') != -1 && url.indexOf('&do=cashWithdrawalApply') == -1){ + if(url.indexOf('&do=applyCondition') != -1){ + return + }else if(url.indexOf('&do=disApply') != -1){ + + }else{ + if(res.data.data.mustmobile != 1){ + App.navigationTo({ + url: res.data.data.url, + navType: 'reLaunch' + }) + } + return false + } + + } + + // 相亲模块判断是否填写个人资料 + if(url.indexOf('&p=dating') != -1 && res.data.data.is_perfect == 1) { + App.showError(res.data.message, () => { + uni.reLaunch({ + url: '/pages/subPages2/blindDate/form/userInfo' + }) + }) + return + } + if(url.indexOf('&p=dating') != -1 && res.data.data.dating_is_matchmaker == 1) { + App.showError(res.data.message, () => { + uni.reLaunch({ + url: '/pages/subPages2/blindDate/form/matchmakerApply' + }) + }) + return + } + // 相亲模块动态列表会员专区时,非会员跳转到开通会员 或者详情页面查看资料会员失效时跳转至开通页面 + if( + (url.indexOf('&p=dating&do=dynamicList') != -1 && res.data.data.dating_is_vip == 1) || + (url.indexOf('p=dating&do=seeMemberInfo') != -1 && res.data.errno == 1) + ) { + App.showError(res.data.message,() => { + uni.reLaunch({ + url: '/pages/subPages2/blindDate/member/open' + }) + }) + return + } + + // 看不懂。。。 + App.showError(res.data.message, function() { + fail && fail(res); + if(res.data.message == '该商品会员特供,请先成为会员' || res.data.message == '当前商品为会员限定,请先成为会员!'){ + App.navigationTo({ + url: 'pages/mainPages/memberCard/getMembership/getMembership?card=nhave' + }); + return + } + uni.reLaunch({ + url: '/' + res.data.data.url + }) + }) + return false; + } + } else if (res.data.errno === 5 && !App.loginstate) { + // #ifdef MP-WEIXIN || APP-PLUS + App.doLogin(); + App.loginstate = true; + setTimeout(()=>{ + App.loginstate = false; + },1000) + // #endif + } + }, + fail(res) {}, + complete(res) { + complete && complete(res); + } + }); + }, + // 推荐人id + saveRefereeId() { + if (!!Store.state.recomid) { + return Store.state.recomid + } + }, + getImgUrl() { + let App = this; + let a = this.siteInfo.uniacid; + App._post_form('&do=GetimgPrefix', {}, res => { + App.imgfix = res.data.imgPrefix; + uni.setStorageSync('imgPrefix', res.data.imgPrefix); + return App.imgfix + }); + + }, + + + clipboard(data){ + const textarea = document.createElement('textarea'); + textarea.value = data; + textarea.readOnly = 'readOnly'; + document.body.appendChild(textarea); + textarea.select(); + textarea.setSelectionRange(0, data.length); + document.execCommand('copy'); + textarea.remove(); + textarea.style.display="none"; + uni.showToast({ + icon:'none', + title:'复制成功' + }) + }, + getSetInfo() { + let data = { + type:0 + } + uni.setStorageSync('getSetInfo',data); + let App = this; + App._post_form('&p=Im&do=getSetInfo', {}, res => { + console.log(res) + uni.setStorageSync('getSetInfo', res.data); + }); + + }, + getAreaId(location = "", cityname = "", areaid = "", callback, isSwitchCity = false) { + let memberCityAreaid = uni.getStorageSync('memberCityAreaid'); + let App = this, + pages = getCurrentPages(), + navType = pages.length > 1 ? 'reLaunch' : 'navigate', + + // requestData = { + // lat: !!location.lat ? (location.lat || location.latitude) : "", + // lng: !!location.lng ? (location.lng || location.longitude) : "", + // cityname, + // areaid, + // }; + + requestData = { + lat: location.lat || location.latitude || "", + lng: location.lng || location.longitude || "", + cityname, + areaid: areaid || memberCityAreaid + }; + App._post_form('&do=GetAid', requestData, res => { + this.aid = res.data.aid; + if (res.data.status === 1 || res.data.status === 2) { + let agencyData = { + areaname: res.data.areaname, + aid: "", + lat: res.data.lat, + lng: res.data.lng + }; + if (location) { + uni.setStorageSync('agencyData', res.data); + } else { + uni.setStorageSync('agencyData', agencyData); + } + + App.setAppRoot(agencyData.aid); + App.getImgUrl(); + App.navigationTo({ + url: `pages/mainPages/notOpen/notOpen?city_agent_status=${res.data.status}&city_agent_name=${res.data.name}&joinPhone=${res.data.phone}`, + navType + }) + return false; + } else if (res.data.status === 3) { + App.navigationTo({ + url: `pages/subPages/city/city`, + navType + }) + } else { + if (!isSwitchCity) { + uni.setStorageSync('agencyData', res.data); + App.setAppRoot(res.data.aid); + } + callback && callback(res) + } + }) + }, + wxShareInfo() { + let App = this; + App._post_form('&do=Shareinfo', {}, res => { + Store.commit('MPSHAREINFO', res.data) + }) + }, + dealershareInfo(callback, type = "11") { + let App = this; + App._post_form('&do=Shareinfo', { + type + }, res => { + callback && callback(res) + }) + }, + /** + * 清除登录缓存 + */ + removeCurrentPage() { + uni.removeStorageSync("currentPage"); + }, + /** + * 对象转URL + */ + urlEncode(data) { + var _result = []; + for (var key in data) { + var value = data[key]; + if (value.constructor == Array) { + value.forEach(function(_value) { + _result.push(key + "=" + _value); + }); + } else { + _result.push(key + '=' + value); + } + } + return _result.join('&'); + }, + /** + * url转对象 + */ + urlToObj(str) { + var obj = {}; + var arr1 = str.split("?"); + var arr2 = arr1[1].split("&"); + for (var i = 0; i < arr2.length; i++) { + var res = arr2[i].split("="); + obj[res[0]] = res[1]; + } + return obj; + }, + + /** + * 获取url参数 + */ + getQueryString(name,url) { + let reg = new RegExp('(^|&)' + name + '=([^&]*)(&|$)', 'i'); + let r = url.substr(1).match(reg); + if (r != null) { + return unescape(r[2]); + } + return null; + 8 }, + /** + * 通用指定跳转链接方法 + * url:跳转链接 navType:{navigate,rediRect,reLaunch,wxParse富文本}跳转方法, pageUrl 是否使用接口路径 success跳转成功回调 + */ + navigationTo({ + url, + navType = 'navigate', + success + }) { + let App = this, + tabBarLinks = App.getTabBarLinks(), + isTabBar = tabBarLinks.includes(url), + pageUrl = url.indexOf('http') !== -1 || url.indexOf('./index') !== -1, + isprogram = url.indexOf('appid') !== -1 || url.indexOf('appurl') !== -1, + istel = url.indexOf('tel') !== -1, + indet = url.indexOf('indet') !== -1; + // #ifdef H5 + let pagetitle = uni.getStorageSync('TextSubstitution'); + document.title = pagetitle.sysname || '⁣​'; + // #endif + + // #ifndef H5 + // debugger + if (isprogram) { + let parmsArr = url.split(','), + appId = parmsArr[0].split('appid:')[1], + path = parmsArr[1].split('appurl:')[1]; + if (!!appId && !!path) { + uni.navigateToMiniProgram({ + appId, + path, + success(res) { + console.log('success', res) + // 打开成功 + }, + fail(err) { + console.log('err', err) + } + }) + } + }; + // #endif + if (istel) { + let tel = url.split("tel:")[1]; + uni.makePhoneCall({ + phoneNumber: tel + }) + }; + if (navType === 'wxParse') { + location.href = url + }; + if (pageUrl) { + // #ifndef H5 + url = encodeURIComponent(url) + uni.redirectTo({ + url: `/pages/subPages/webview/webview?urlsrc=${url}` + }); + // #endif + // #ifdef H5 + let pagelink_list = uni.getStorageSync('pagelinkList'), + isPageIndex = url.indexOf('./index') !== -1, + isParms = url.indexOf('?') !== -1; + + if (isParms) { + let params = App.urlToObj(url), + pageLine_name = `${params.p}/${params.ac}/${params.do}`; + if (!!params['p'] && !!params['ac'] && !!params['do']) { + for (let key in pagelink_list) { + let isPage_link = pageLine_name.indexOf(key) !== -1; + if (isPage_link) { + let navUrl = pagelink_list[pageLine_name], + newParams = params; + delete newParams['p']; + delete newParams['ac']; + delete newParams['do']; + delete newParams['c']; + delete newParams['m']; + navUrl += (navUrl.indexOf("?") !== -1 ? "&" : "?") + App.urlEncode(newParams); + // tabBar页面 + + if (isTabBar) { + + uni.redirectTo({ + url: '/' + navUrl + }) + } else { + // 普通页面 + uni.navigateTo({ + url: '/' + navUrl + }); + } + } + } + } else { + location.href = url + } + } else { + App.navigationToH5(isPageIndex, url) + } + // #endif + } else { + // #ifdef H5 + if (url.indexOf("i=") === -1) { + url += (url.indexOf("?") !== -1 ? "&i=" : "?i=") + App.siteInfo.uniacid; + } + // #endif + if (navType === 'navigate') { + if (isTabBar) { + uni.redirectTo({ + url: '/' + url + }) + } else { + // 普通页面 + uni.navigateTo({ + url: '/' + url + }); + } + } else if (navType === 'rediRect') { + uni.redirectTo({ + url: '/' + url, + success + }) + } else if (navType === 'reLaunch') { + uni.reLaunch({ + url: '/' + url, + success + }) + } + } + }, + // h5跳转 + navigationToH5(isPageIndex, url) { + let App = this; + // debugger + if (isPageIndex) { + // #ifdef H5 + let pageIndexUrl = `${App.api_root}${url.split("./")[1]}`; + location.href = pageIndexUrl + // #endif + } else { + // #ifdef H5 + location.href = url + // #endif + } + }, + /** + * 记录formId + */ + saveFormId(temp_type) { + let App = this; + App._post_form('&do=TempId', { + temp_type + }, res => { + let formList = res.data, + idsArray = []; + if (formList.length > 0) { + formList.map((val => { + idsArray.push(val.temp_id) + })) + let encodeFormList = JSON.stringify(formList), + base = new Base64, + encodeStr = base.encode(encodeFormList); + uni.requestSubscribeMessage({ + tmplIds: idsArray, + success(idsres) { + let tmpIdsArray = []; + for (let [key, val] of Object.entries(idsres)) { + if (val === 'accept') { + tmpIdsArray.push(key) + } + } + App._post_form('&do=SetFromId', { + form_id: tmpIdsArray, + info: encodeStr + }, res => { + console.log(res) + }); + }, + fail(err) { + console.log(err) + } + }) + } + }) + }, + //浏览器上传图片 + browser_upload(number = 1){ + return new Promise((resolve, reject) => { + let imageData; + uni.chooseImage({ + count: number, //默认9 + sizeType: ['original', 'compressed'], //可以指定是原图还是压缩图,默认二者都有 + sourceType: ['album','camera'], //从相册选择 + success: function (res) { + // let imageData = await App._upLoad(filePaths); + // return + resolve(res) + } + }); + }) + + }, + //上传图片 + _upLoad(url) { + let App = this; + return new Promise((resolve, reject) => { + uni.uploadFile({ + url: App.api_root + '&do=uploadFiles', + filePath: url, + fileType: "image", + name: 'file', + success(res) { + console.log(res, 'success') + if (res.statusCode !== 200 || typeof res.data !== 'string') { + App.showError('网络请求出错'); + return false; + } else { + if (res.code === 0) { + App.showError(res.data.msg); + return false; + } else { + resolve(JSON.parse(res.data)); + } + } + }, + fail(res) { + console.log(res, 'fail') + uni.hideLoading(); + uni.showModal({ + title: "上传失败", + content: JSON.stringify(res), + showCancel: false + }); + reject(); + }, + complete() { + uni.hideToast(); //隐藏Toast + } + }) + }); + }, + _MYupLoad(url) { + let App = this; + return new Promise((resolve, reject) => { + uni.uploadFile({ + url: App.api_root + '&do=StudentUploadFiles', + filePath: url, + fileType: "image", + name: 'file', + success(res) { + if (res.statusCode !== 200 || typeof res.data !== 'string') { + App.showError('网络请求出错'); + return false; + } else { + if (res.code === 0) { + App.showError(res.data.msg); + return false; + } else { + resolve(JSON.parse(res.data)); + } + } + }, + fail(res) { + uni.hideLoading(); + uni.showModal({ + title: "上传失败", + content: JSON.stringify(res), + showCancel: false + }); + reject(); + }, + complete() { + uni.hideToast(); //隐藏Toast + } + }) + }); + }, + /** + * 获取当前页面栈 + */ + getCurrentPage() { + //1-导入 2-微信小程序 3-H5 4-公众号 5-安卓 6-苹果 7-渠道1小程序 8-百度小程序 9-头条小程序 + let App = this, + pages = getCurrentPages(), + clientType = App.getClientType(), + currentPage = pages[pages.length - 1], + pageInstance = null; + if (clientType === "2" || clientType === "7" || clientType === "9") { + pageInstance = currentPage.$vm; + } else if (clientType === "3" || clientType === "4") { + pageInstance = currentPage; + } else { + pageInstance = currentPage.rootVM; + } + return pageInstance; + }, + + /** + * 全屏加载 + */ + // showLoading() { + // let App = this, + // page = App.getCurrentPage(); + // !!page.$refs.loading && page.$refs.loading.showLoading(); + // }, + // hideLoading(time = 500) { + // let App = this, + // page = App.getCurrentPage(); + // setTimeout(() => { + // !!page.$refs.loading && page.$refs.loading.hideLoading(); + // }, time); + // }, + + /** + * 获取当前经纬度 + */ + getLocation() { + let App = this, + clientType = App.getClientType(); + return new Promise((resolve, reject) => { + let LocationType = clientType === "3" ? uni : wxApi; + LocationType.getLocation({ + type: "gcj02", // 默认为wgs84的gps坐标,如果要返回直接给openLocation用的火星坐标,可传入'gcj02' + success(res) { + resolve(res); + }, + fail(res) { + resolve({ + latitude: "", + longitude: "" + }); + }, + complete(res) { + console.log(res); + } + }); + }) + }, + /** + * 查看位置 + */ + openLocation(options) { + let App = this; + if (!!options.location) { + // let gps = util.baidu_To_qq(options.latitude, options.longitude); + uni.openLocation({ + name: options.storename, + address: options.address, + latitude: Number(options.location.lat), + longitude: Number(options.location.lng), + success() { + options.success && options.success(); + } + }); + } else { + App.showError("经纬度信息不完整,请确认后重试"); + } + }, + + /** + * 商品富文本数据切割,避免一次性加载数据量超大 + * @param {type} + */ + // wxParseLazyLoad(padding = 0, content, dataKey) { + // //商品富文本数据切割,避免一次性加载数据量超大 + // let sliceLen = 20, //懒加载数据切割长度 + // currentPage = this.getCurrentPage(), + // transData = {}, //存放转化后的数据 + // bindData = {}, //存放当前绑定的数据 + // nodePage = 0, + // nodesList = [], + // imageProp = { + // mode: 'aspectFit', + // padding, + // lazyLoad: false, + // domain: '', + // }; + // transData = HtmlToJson(content, {}, imageProp); + // if (transData.nodes.length > sliceLen) { + // let nodes = transData.nodes; + // for (let i = 0, len = nodes.length; i < len; i += sliceLen) { + // nodesList.push(nodes.slice(i, i + sliceLen)); + // } + // bindData.imageUrls = transData.imageUrls; + // bindData.nodes = nodesList[0]; + // } else { + // bindData = transData; + // } + // currentPage[dataKey] = bindData; + // if (nodesList.length > 0) { + // for (let i = 1; i < nodesList.length; i++) { + // setTimeout(() => { + // currentPage[dataKey].nodes.push(...nodesList[i]); + // }, 800); + // } + // } + // }, + + // 获取地址和个人信息 + getInt() { + let _this = this, + user_token = uni.getStorageSync('weliam_user_token'); + if (user_token && !!user_token) { + _this._post_form('&p=member&do=memberInfo', {}, res => { + uni.setStorageSync('userinfo', res.data); + }); + }; + + if (uni.getStorageSync('cityList') == undefined || uni.getStorageSync('cityList') == '') { + let data = {} + _this._post_form('&do=CityInfo', data, res => { + uni.setStorageSync('cityList', res.data); + }) + } + // #ifdef H5 + let pagetitle = uni.getStorageSync('TextSubstitution'); + document.title = pagetitle.sysname || '⁣​'; + // #endif + _this._post_form('&do=TextSubstitution', {}, res => { + uni.setStorageSync('TextSubstitution', res.data); + // #ifndef H5 + let pages = getCurrentPages(), + curPage = pages[pages.length - 1], + filterList = [ + 'pages/mainPages/Settled/Settled', + 'pages/subPages/merchant/sendDynamic/sendDynamic', + 'pages/subPages/postRelease/postRelease', + 'pages/mainPages/comment/comment' + ]; + if (res.data.examineing === "1") { + Store.commit("ISWXAUDIT", false); + if (!!curPage && filterList.includes(curPage.route)) { + _this.navigationTo({ + url: 'pages/mainPages/index/index', + navType: 'reLaunch' + }) + } + } + if(res.data.sysname && curPage.route.indexOf('pages/subPages2/redClothes/redClothes') == -1){ + // 不需要吧 + // uni.setNavigationBarTitle({ + // title: res.data.sysname + // }); + } + // #endif + + // #ifdef H5 + let locations = location.href; + if(res.data.sysname && locations.indexOf('pages/subPages2/redClothes/redClothes') == -1){ + console.log('app.js执行',res.data.sysname) + // uni.setNavigationBarTitle({ + // title: + // }); + document.title = res.data.sysname + } + // #endif + }) + } +} +export default { + ...App +} diff --git a/common/js/ms-openMap/openMap.js b/common/js/ms-openMap/openMap.js new file mode 100644 index 0000000..ff3abcf --- /dev/null +++ b/common/js/ms-openMap/openMap.js @@ -0,0 +1,96 @@ +import TransformCoordinate from './transformCoordinate.js' +function openMapByDefault(latitude, longitude, name) { + uni.openLocation({ + latitude: latitude, + longitude: longitude, + name: name, + fail: () => { + uni.showModal({ + content: '打开地图失败,请重试' + }) + }, + }) +} +function openMapByAndroid(latitude, longitude, name) { + let url = ''; // 回调地址 + let identity = ''; // 程序名称 + if(plus.runtime.isApplicationExist({pname: 'com.baidu.BaiduMap'})) { // baidumap + url = `baidumap://map/marker?location=${latitude},${longitude}&title=${name}&coord_type=gcj02&src=andr.baidu.openAPIdemo` + identity = 'com.baidu.BaiduMap' + openURL(url, identity) + } + else if(plus.runtime.isApplicationExist({pname: 'com.autonavi.minimap'})) { // 高德 + url = `androidamap://viewMap?sourceApplication=appname&poiname=${name}&lat=${latitude}&lon=${longitude}&dev=0` + identity = 'com.autonavi.minimap' + openURL(url, identity) + } + else { + openMapByDefault(latitude, longitude, name) + } +} +function openMapByIos(latitude, longitude, name) { + let url = ''; // 回调地址 + let errorCB = ''; // url失败的回调地址 + let identity = ''; // 程序名称 + + if(plus.runtime.isApplicationExist({action: 'baidumap://'})) { // baidumap + url = `baidumap://map/marker?location=${latitude},${longitude}&title=${name}&content=${name}&src=ios.baidu.openAPIdemo&coord_type=gcj02`; + openURL(url, identity) + } + else if(plus.runtime.isApplicationExist({action: 'iosamap://'})) { // 高德 + url = `iosamap://viewMap?sourceApplication=applicationName&poiname=${name}&lat=${latitude}&lon=${longitude}&dev=0` + openURL(url, identity) + } + else { + openMapByDefault(latitude, longitude, name) + } +} +function openURL(url, identity ) { + let newurl = encodeURI(url); + plus.runtime.openURL( newurl, function(res){ + uni.showModal({ + content: res.message + }) + }, identity); +} +function getCoordByType(longitude, latitude, coord_type) { + switch (coord_type){ + case 'gcj02': + return [longitude, latitude] + break; + case 'bd09': + return TransformCoordinate.bd09togcj02(longitude, latitude) + break; + case 'wgs84': + return TransformCoordinate.wgs84togcj02(longitude, latitude) + break; + default: + return [longitude, latitude] + break; + } +} +export default { + /* 打开地图 */ + openMap(latitude, longitude, name, coord_type='gcj02') { + let arr = getCoordByType(longitude, latitude, coord_type) + // #ifdef APP-PLUS + switch(uni.getSystemInfoSync().platform){ + case 'android': + console.log('运行Android上') + openMapByAndroid(arr[1], arr[0], name) + break; + case 'ios': + console.log('运行iOS上') + openMapByIos(arr[1], arr[0], name) + break; + default: + openMapByDefault(arr[1], arr[0], name) + console.log('运行在开发者工具上') + break; + } + // #endif + // #ifndef APP-PLUS + openMapByDefault(arr[1], arr[0], name) + // #endif + } +} \ No newline at end of file diff --git a/common/js/ms-openMap/transformCoordinate.js b/common/js/ms-openMap/transformCoordinate.js new file mode 100644 index 0000000..425c296 --- /dev/null +++ b/common/js/ms-openMap/transformCoordinate.js @@ -0,0 +1,126 @@ +/** + * Created by Wandergis on 2015/7/8. + * 提供了百度坐标(BD09)、国测局坐标(火星坐标,GCJ02)、和WGS84坐标系之间的转换 + */ + +//定义一些常量 +var x_PI = 3.14159265358979324 * 3000.0 / 180.0; +var PI = 3.1415926535897932384626; +var a = 6378245.0; +var ee = 0.00669342162296594323; + +/** + * 百度坐标系 (BD-09) 与 火星坐标系 (GCJ-02)的转换 + * 即 百度 转 谷歌、高德 + * @param bd_lon + * @param bd_lat + * @returns {*[]} + */ +function bd09togcj02(bd_lon, bd_lat) { + var x_pi = 3.14159265358979324 * 3000.0 / 180.0; + var x = bd_lon - 0.0065; + var y = bd_lat - 0.006; + var z = Math.sqrt(x * x + y * y) - 0.00002 * Math.sin(y * x_pi); + var theta = Math.atan2(y, x) - 0.000003 * Math.cos(x * x_pi); + var gg_lng = z * Math.cos(theta); + var gg_lat = z * Math.sin(theta); + return [gg_lng, gg_lat] +} + +/** + * 火星坐标系 (GCJ-02) 与百度坐标系 (BD-09) 的转换 + * 即谷歌、高德 转 百度 + * @param lng + * @param lat + * @returns {*[]} + */ +function gcj02tobd09(lng, lat) { + var z = Math.sqrt(lng * lng + lat * lat) + 0.00002 * Math.sin(lat * x_PI); + var theta = Math.atan2(lat, lng) + 0.000003 * Math.cos(lng * x_PI); + var bd_lng = z * Math.cos(theta) + 0.0065; + var bd_lat = z * Math.sin(theta) + 0.006; + return [bd_lng, bd_lat] +} + +/** + * WGS84转GCj02 + * @param lng + * @param lat + * @returns {*[]} + */ +function wgs84togcj02(lng, lat) { + if (out_of_china(lng, lat)) { + return [lng, lat] + } + else { + var dlat = transformlat(lng - 105.0, lat - 35.0); + var dlng = transformlng(lng - 105.0, lat - 35.0); + var radlat = lat / 180.0 * PI; + var magic = Math.sin(radlat); + magic = 1 - ee * magic * magic; + var sqrtmagic = Math.sqrt(magic); + dlat = (dlat * 180.0) / ((a * (1 - ee)) / (magic * sqrtmagic) * PI); + dlng = (dlng * 180.0) / (a / sqrtmagic * Math.cos(radlat) * PI); + var mglat = lat + dlat; + var mglng = lng + dlng; + return [mglng, mglat] + } +} + +/** + * GCJ02 转换为 WGS84 + * @param lng + * @param lat + * @returns {*[]} + */ +function gcj02towgs84(lng, lat) { + if (out_of_china(lng, lat)) { + return [lng, lat] + } + else { + var dlat = transformlat(lng - 105.0, lat - 35.0); + var dlng = transformlng(lng - 105.0, lat - 35.0); + var radlat = lat / 180.0 * PI; + var magic = Math.sin(radlat); + magic = 1 - ee * magic * magic; + var sqrtmagic = Math.sqrt(magic); + dlat = (dlat * 180.0) / ((a * (1 - ee)) / (magic * sqrtmagic) * PI); + dlng = (dlng * 180.0) / (a / sqrtmagic * Math.cos(radlat) * PI); + mglat = lat + dlat; + mglng = lng + dlng; + return [lng * 2 - mglng, lat * 2 - mglat] + } +} + +function transformlat(lng, lat) { + var ret = -100.0 + 2.0 * lng + 3.0 * lat + 0.2 * lat * lat + 0.1 * lng * lat + 0.2 * Math.sqrt(Math.abs(lng)); + ret += (20.0 * Math.sin(6.0 * lng * PI) + 20.0 * Math.sin(2.0 * lng * PI)) * 2.0 / 3.0; + ret += (20.0 * Math.sin(lat * PI) + 40.0 * Math.sin(lat / 3.0 * PI)) * 2.0 / 3.0; + ret += (160.0 * Math.sin(lat / 12.0 * PI) + 320 * Math.sin(lat * PI / 30.0)) * 2.0 / 3.0; + return ret +} + +function transformlng(lng, lat) { + var ret = 300.0 + lng + 2.0 * lat + 0.1 * lng * lng + 0.1 * lng * lat + 0.1 * Math.sqrt(Math.abs(lng)); + ret += (20.0 * Math.sin(6.0 * lng * PI) + 20.0 * Math.sin(2.0 * lng * PI)) * 2.0 / 3.0; + ret += (20.0 * Math.sin(lng * PI) + 40.0 * Math.sin(lng / 3.0 * PI)) * 2.0 / 3.0; + ret += (150.0 * Math.sin(lng / 12.0 * PI) + 300.0 * Math.sin(lng / 30.0 * PI)) * 2.0 / 3.0; + return ret +} + +/** + * 判断是否在国内,不在国内则不做偏移 + * @param lng + * @param lat + * @returns {boolean} + */ +function out_of_china(lng, lat) { + return (lng < 72.004 || lng > 137.8347) || ((lat < 0.8293 || lat > 55.8271) || false); +} + +export default { + bd09togcj02: bd09togcj02, // 百度坐标系 (BD-09) 与 火星坐标系 (GCJ-02)的转换 + gcj02tobd09: gcj02tobd09, // 火星坐标系 (GCJ-02) 与百度坐标系 (BD-09) 的转换 + wgs84togcj02: wgs84togcj02, // + gcj02towgs84: gcj02towgs84, +} \ No newline at end of file diff --git a/common/js/pageListMixin.js b/common/js/pageListMixin.js new file mode 100644 index 0000000..690e032 --- /dev/null +++ b/common/js/pageListMixin.js @@ -0,0 +1,22 @@ +let mixin = { + data() { + return { + showTopBtn: false, + pageScroll: 0, + } + }, + methods: { + + }, + /** + * 显示/隐藏 返回顶部按钮 + */ + onPageScroll({scrollTop}) { + let _this = this; + _this.$util.debounce(200,()=>{ + _this.pageScroll = scrollTop; + }) + }, +} + +export default mixin diff --git a/common/js/qqmap-wx-jssdk.min.js b/common/js/qqmap-wx-jssdk.min.js new file mode 100644 index 0000000..8fa1477 --- /dev/null +++ b/common/js/qqmap-wx-jssdk.min.js @@ -0,0 +1 @@ +var ERROR_CONF = { KEY_ERR: 311, KEY_ERR_MSG: 'key格式错误', PARAM_ERR: 310, PARAM_ERR_MSG: '请求参数信息有误', SYSTEM_ERR: 600, SYSTEM_ERR_MSG: '系统错误', WX_ERR_CODE: 1000, WX_OK_CODE: 200 }; var BASE_URL = 'https://apis.map.qq.com/ws/'; var URL_SEARCH = BASE_URL + 'place/v1/search'; var URL_SUGGESTION = BASE_URL + 'place/v1/suggestion'; var URL_GET_GEOCODER = BASE_URL + 'geocoder/v1/'; var URL_CITY_LIST = BASE_URL + 'district/v1/list'; var URL_AREA_LIST = BASE_URL + 'district/v1/getchildren'; var URL_DISTANCE = BASE_URL + 'distance/v1/'; var URL_DIRECTION = BASE_URL + 'direction/v1/'; var MODE = { driving: 'driving', transit: 'transit' }; var EARTH_RADIUS = 6378136.49; var Utils = { safeAdd(x, y) { var lsw = (x & 0xffff) + (y & 0xffff); var msw = (x >> 16) + (y >> 16) + (lsw >> 16); return (msw << 16) | (lsw & 0xffff) }, bitRotateLeft(num, cnt) { return (num << cnt) | (num >>> (32 - cnt)) }, md5cmn(q, a, b, x, s, t) { return this.safeAdd(this.bitRotateLeft(this.safeAdd(this.safeAdd(a, q), this.safeAdd(x, t)), s), b) }, md5ff(a, b, c, d, x, s, t) { return this.md5cmn((b & c) | (~b & d), a, b, x, s, t) }, md5gg(a, b, c, d, x, s, t) { return this.md5cmn((b & d) | (c & ~d), a, b, x, s, t) }, md5hh(a, b, c, d, x, s, t) { return this.md5cmn(b ^ c ^ d, a, b, x, s, t) }, md5ii(a, b, c, d, x, s, t) { return this.md5cmn(c ^ (b | ~d), a, b, x, s, t) }, binlMD5(x, len) { x[len >> 5] |= 0x80 << (len % 32); x[((len + 64) >>> 9 << 4) + 14] = len; var i; var olda; var oldb; var oldc; var oldd; var a = 1732584193; var b = -271733879; var c = -1732584194; var d = 271733878; for (i = 0; i < x.length; i += 16) { olda = a; oldb = b; oldc = c; oldd = d; a = this.md5ff(a, b, c, d, x[i], 7, -680876936); d = this.md5ff(d, a, b, c, x[i + 1], 12, -389564586); c = this.md5ff(c, d, a, b, x[i + 2], 17, 606105819); b = this.md5ff(b, c, d, a, x[i + 3], 22, -1044525330); a = this.md5ff(a, b, c, d, x[i + 4], 7, -176418897); d = this.md5ff(d, a, b, c, x[i + 5], 12, 1200080426); c = this.md5ff(c, d, a, b, x[i + 6], 17, -1473231341); b = this.md5ff(b, c, d, a, x[i + 7], 22, -45705983); a = this.md5ff(a, b, c, d, x[i + 8], 7, 1770035416); d = this.md5ff(d, a, b, c, x[i + 9], 12, -1958414417); c = this.md5ff(c, d, a, b, x[i + 10], 17, -42063); b = this.md5ff(b, c, d, a, x[i + 11], 22, -1990404162); a = this.md5ff(a, b, c, d, x[i + 12], 7, 1804603682); d = this.md5ff(d, a, b, c, x[i + 13], 12, -40341101); c = this.md5ff(c, d, a, b, x[i + 14], 17, -1502002290); b = this.md5ff(b, c, d, a, x[i + 15], 22, 1236535329); a = this.md5gg(a, b, c, d, x[i + 1], 5, -165796510); d = this.md5gg(d, a, b, c, x[i + 6], 9, -1069501632); c = this.md5gg(c, d, a, b, x[i + 11], 14, 643717713); b = this.md5gg(b, c, d, a, x[i], 20, -373897302); a = this.md5gg(a, b, c, d, x[i + 5], 5, -701558691); d = this.md5gg(d, a, b, c, x[i + 10], 9, 38016083); c = this.md5gg(c, d, a, b, x[i + 15], 14, -660478335); b = this.md5gg(b, c, d, a, x[i + 4], 20, -405537848); a = this.md5gg(a, b, c, d, x[i + 9], 5, 568446438); d = this.md5gg(d, a, b, c, x[i + 14], 9, -1019803690); c = this.md5gg(c, d, a, b, x[i + 3], 14, -187363961); b = this.md5gg(b, c, d, a, x[i + 8], 20, 1163531501); a = this.md5gg(a, b, c, d, x[i + 13], 5, -1444681467); d = this.md5gg(d, a, b, c, x[i + 2], 9, -51403784); c = this.md5gg(c, d, a, b, x[i + 7], 14, 1735328473); b = this.md5gg(b, c, d, a, x[i + 12], 20, -1926607734); a = this.md5hh(a, b, c, d, x[i + 5], 4, -378558); d = this.md5hh(d, a, b, c, x[i + 8], 11, -2022574463); c = this.md5hh(c, d, a, b, x[i + 11], 16, 1839030562); b = this.md5hh(b, c, d, a, x[i + 14], 23, -35309556); a = this.md5hh(a, b, c, d, x[i + 1], 4, -1530992060); d = this.md5hh(d, a, b, c, x[i + 4], 11, 1272893353); c = this.md5hh(c, d, a, b, x[i + 7], 16, -155497632); b = this.md5hh(b, c, d, a, x[i + 10], 23, -1094730640); a = this.md5hh(a, b, c, d, x[i + 13], 4, 681279174); d = this.md5hh(d, a, b, c, x[i], 11, -358537222); c = this.md5hh(c, d, a, b, x[i + 3], 16, -722521979); b = this.md5hh(b, c, d, a, x[i + 6], 23, 76029189); a = this.md5hh(a, b, c, d, x[i + 9], 4, -640364487); d = this.md5hh(d, a, b, c, x[i + 12], 11, -421815835); c = this.md5hh(c, d, a, b, x[i + 15], 16, 530742520); b = this.md5hh(b, c, d, a, x[i + 2], 23, -995338651); a = this.md5ii(a, b, c, d, x[i], 6, -198630844); d = this.md5ii(d, a, b, c, x[i + 7], 10, 1126891415); c = this.md5ii(c, d, a, b, x[i + 14], 15, -1416354905); b = this.md5ii(b, c, d, a, x[i + 5], 21, -57434055); a = this.md5ii(a, b, c, d, x[i + 12], 6, 1700485571); d = this.md5ii(d, a, b, c, x[i + 3], 10, -1894986606); c = this.md5ii(c, d, a, b, x[i + 10], 15, -1051523); b = this.md5ii(b, c, d, a, x[i + 1], 21, -2054922799); a = this.md5ii(a, b, c, d, x[i + 8], 6, 1873313359); d = this.md5ii(d, a, b, c, x[i + 15], 10, -30611744); c = this.md5ii(c, d, a, b, x[i + 6], 15, -1560198380); b = this.md5ii(b, c, d, a, x[i + 13], 21, 1309151649); a = this.md5ii(a, b, c, d, x[i + 4], 6, -145523070); d = this.md5ii(d, a, b, c, x[i + 11], 10, -1120210379); c = this.md5ii(c, d, a, b, x[i + 2], 15, 718787259); b = this.md5ii(b, c, d, a, x[i + 9], 21, -343485551); a = this.safeAdd(a, olda); b = this.safeAdd(b, oldb); c = this.safeAdd(c, oldc); d = this.safeAdd(d, oldd) } return [a, b, c, d] }, binl2rstr(input) { var i; var output = ''; var length32 = input.length * 32; for (i = 0; i < length32; i += 8) { output += String.fromCharCode((input[i >> 5] >>> (i % 32)) & 0xff) } return output }, rstr2binl(input) { var i; var output = []; output[(input.length >> 2) - 1] = undefined; for (i = 0; i < output.length; i += 1) { output[i] = 0 } var length8 = input.length * 8; for (i = 0; i < length8; i += 8) { output[i >> 5] |= (input.charCodeAt(i / 8) & 0xff) << (i % 32) } return output }, rstrMD5(s) { return this.binl2rstr(this.binlMD5(this.rstr2binl(s), s.length * 8)) }, rstrHMACMD5(key, data) { var i; var bkey = this.rstr2binl(key); var ipad = []; var opad = []; var hash; ipad[15] = opad[15] = undefined; if (bkey.length > 16) { bkey = this.binlMD5(bkey, key.length * 8) } for (i = 0; i < 16; i += 1) { ipad[i] = bkey[i] ^ 0x36363636; opad[i] = bkey[i] ^ 0x5c5c5c5c } hash = this.binlMD5(ipad.concat(this.rstr2binl(data)), 512 + data.length * 8); return this.binl2rstr(this.binlMD5(opad.concat(hash), 512 + 128)) }, rstr2hex(input) { var hexTab = '0123456789abcdef'; var output = ''; var x; var i; for (i = 0; i < input.length; i += 1) { x = input.charCodeAt(i); output += hexTab.charAt((x >>> 4) & 0x0f) + hexTab.charAt(x & 0x0f) } return output }, str2rstrUTF8(input) { return unescape(encodeURIComponent(input)) }, rawMD5(s) { return this.rstrMD5(this.str2rstrUTF8(s)) }, hexMD5(s) { return this.rstr2hex(this.rawMD5(s)) }, rawHMACMD5(k, d) { return this.rstrHMACMD5(this.str2rstrUTF8(k), str2rstrUTF8(d)) }, hexHMACMD5(k, d) { return this.rstr2hex(this.rawHMACMD5(k, d)) }, md5(string, key, raw) { if (!key) { if (!raw) { return this.hexMD5(string) } return this.rawMD5(string) } if (!raw) { return this.hexHMACMD5(key, string) } return this.rawHMACMD5(key, string) }, getSig(requestParam, sk, feature, mode) { var sig = null; var requestArr = []; Object.keys(requestParam).sort().forEach(function (key) { requestArr.push(key + '=' + requestParam[key]) }); if (feature == 'search') { sig = '/ws/place/v1/search?' + requestArr.join('&') + sk } if (feature == 'suggest') { sig = '/ws/place/v1/suggestion?' + requestArr.join('&') + sk } if (feature == 'reverseGeocoder') { sig = '/ws/geocoder/v1/?' + requestArr.join('&') + sk } if (feature == 'geocoder') { sig = '/ws/geocoder/v1/?' + requestArr.join('&') + sk } if (feature == 'getCityList') { sig = '/ws/district/v1/list?' + requestArr.join('&') + sk } if (feature == 'getDistrictByCityId') { sig = '/ws/district/v1/getchildren?' + requestArr.join('&') + sk } if (feature == 'calculateDistance') { sig = '/ws/distance/v1/?' + requestArr.join('&') + sk } if (feature == 'direction') { sig = '/ws/direction/v1/' + mode + '?' + requestArr.join('&') + sk } sig = this.md5(sig); return sig }, location2query(data) { if (typeof data == 'string') { return data } var query = ''; for (var i = 0; i < data.length; i++) { var d = data[i]; if (!!query) { query += ';' } if (d.location) { query = query + d.location.lat + ',' + d.location.lng } if (d.latitude && d.longitude) { query = query + d.latitude + ',' + d.longitude } } return query }, rad(d) { return d * Math.PI / 180.0 }, getEndLocation(location) { var to = location.split(';'); var endLocation = []; for (var i = 0; i < to.length; i++) { endLocation.push({ lat: parseFloat(to[i].split(',')[0]), lng: parseFloat(to[i].split(',')[1]) }) } return endLocation }, getDistance(latFrom, lngFrom, latTo, lngTo) { var radLatFrom = this.rad(latFrom); var radLatTo = this.rad(latTo); var a = radLatFrom - radLatTo; var b = this.rad(lngFrom) - this.rad(lngTo); var distance = 2 * Math.asin(Math.sqrt(Math.pow(Math.sin(a / 2), 2) + Math.cos(radLatFrom) * Math.cos(radLatTo) * Math.pow(Math.sin(b / 2), 2))); distance = distance * EARTH_RADIUS; distance = Math.round(distance * 10000) / 10000; return parseFloat(distance.toFixed(0)) }, getWXLocation(success, fail, complete) { wx.getLocation({ type: 'gcj02', success: success, fail: fail, complete: complete }) }, getLocationParam(location) { if (typeof location == 'string') { var locationArr = location.split(','); if (locationArr.length === 2) { location = { latitude: location.split(',')[0], longitude: location.split(',')[1] } } else { location = {} } } return location }, polyfillParam(param) { param.success = param.success || function () { }; param.fail = param.fail || function () { }; param.complete = param.complete || function () { } }, checkParamKeyEmpty(param, key) { if (!param[key]) { var errconf = this.buildErrorConfig(ERROR_CONF.PARAM_ERR, ERROR_CONF.PARAM_ERR_MSG + key + '参数格式有误'); param.fail(errconf); param.complete(errconf); return true } return false }, checkKeyword(param) { return !this.checkParamKeyEmpty(param, 'keyword') }, checkLocation(param) { var location = this.getLocationParam(param.location); if (!location || !location.latitude || !location.longitude) { var errconf = this.buildErrorConfig(ERROR_CONF.PARAM_ERR, ERROR_CONF.PARAM_ERR_MSG + ' location参数格式有误'); param.fail(errconf); param.complete(errconf); return false } return true }, buildErrorConfig(errCode, errMsg) { return { status: errCode, message: errMsg } }, handleData(param, data, feature) { if (feature == 'search') { var searchResult = data.data; var searchSimplify = []; for (var i = 0; i < searchResult.length; i++) { searchSimplify.push({ id: searchResult[i].id || null, title: searchResult[i].title || null, latitude: searchResult[i].location && searchResult[i].location.lat || null, longitude: searchResult[i].location && searchResult[i].location.lng || null, address: searchResult[i].address || null, category: searchResult[i].category || null, tel: searchResult[i].tel || null, adcode: searchResult[i].ad_info && searchResult[i].ad_info.adcode || null, city: searchResult[i].ad_info && searchResult[i].ad_info.city || null, district: searchResult[i].ad_info && searchResult[i].ad_info.district || null, province: searchResult[i].ad_info && searchResult[i].ad_info.province || null }) } param.success(data, { searchResult: searchResult, searchSimplify: searchSimplify }) } else if (feature == 'suggest') { var suggestResult = data.data; var suggestSimplify = []; for (var i = 0; i < suggestResult.length; i++) { suggestSimplify.push({ adcode: suggestResult[i].adcode || null, address: suggestResult[i].address || null, category: suggestResult[i].category || null, city: suggestResult[i].city || null, district: suggestResult[i].district || null, id: suggestResult[i].id || null, latitude: suggestResult[i].location && suggestResult[i].location.lat || null, longitude: suggestResult[i].location && suggestResult[i].location.lng || null, province: suggestResult[i].province || null, title: suggestResult[i].title || null, type: suggestResult[i].type || null }) } param.success(data, { suggestResult: suggestResult, suggestSimplify: suggestSimplify }) } else if (feature == 'reverseGeocoder') { var reverseGeocoderResult = data.result; var reverseGeocoderSimplify = { address: reverseGeocoderResult.address || null, latitude: reverseGeocoderResult.location && reverseGeocoderResult.location.lat || null, longitude: reverseGeocoderResult.location && reverseGeocoderResult.location.lng || null, adcode: reverseGeocoderResult.ad_info && reverseGeocoderResult.ad_info.adcode || null, city: reverseGeocoderResult.address_component && reverseGeocoderResult.address_component.city || null, district: reverseGeocoderResult.address_component && reverseGeocoderResult.address_component.district || null, nation: reverseGeocoderResult.address_component && reverseGeocoderResult.address_component.nation || null, province: reverseGeocoderResult.address_component && reverseGeocoderResult.address_component.province || null, street: reverseGeocoderResult.address_component && reverseGeocoderResult.address_component.street || null, street_number: reverseGeocoderResult.address_component && reverseGeocoderResult.address_component.street_number || null, recommend: reverseGeocoderResult.formatted_addresses && reverseGeocoderResult.formatted_addresses.recommend || null, rough: reverseGeocoderResult.formatted_addresses && reverseGeocoderResult.formatted_addresses.rough || null }; if (reverseGeocoderResult.pois) { var pois = reverseGeocoderResult.pois; var poisSimplify = []; for (var i = 0; i < pois.length; i++) { poisSimplify.push({ id: pois[i].id || null, title: pois[i].title || null, latitude: pois[i].location && pois[i].location.lat || null, longitude: pois[i].location && pois[i].location.lng || null, address: pois[i].address || null, category: pois[i].category || null, adcode: pois[i].ad_info && pois[i].ad_info.adcode || null, city: pois[i].ad_info && pois[i].ad_info.city || null, district: pois[i].ad_info && pois[i].ad_info.district || null, province: pois[i].ad_info && pois[i].ad_info.province || null }) } param.success(data, { reverseGeocoderResult: reverseGeocoderResult, reverseGeocoderSimplify: reverseGeocoderSimplify, pois: pois, poisSimplify: poisSimplify }) } else { param.success(data, { reverseGeocoderResult: reverseGeocoderResult, reverseGeocoderSimplify: reverseGeocoderSimplify }) } } else if (feature == 'geocoder') { var geocoderResult = data.result; var geocoderSimplify = { title: geocoderResult.title || null, latitude: geocoderResult.location && geocoderResult.location.lat || null, longitude: geocoderResult.location && geocoderResult.location.lng || null, adcode: geocoderResult.ad_info && geocoderResult.ad_info.adcode || null, province: geocoderResult.address_components && geocoderResult.address_components.province || null, city: geocoderResult.address_components && geocoderResult.address_components.city || null, district: geocoderResult.address_components && geocoderResult.address_components.district || null, street: geocoderResult.address_components && geocoderResult.address_components.street || null, street_number: geocoderResult.address_components && geocoderResult.address_components.street_number || null, level: geocoderResult.level || null }; param.success(data, { geocoderResult: geocoderResult, geocoderSimplify: geocoderSimplify }) } else if (feature == 'getCityList') { var provinceResult = data.result[0]; var cityResult = data.result[1]; var districtResult = data.result[2]; param.success(data, { provinceResult: provinceResult, cityResult: cityResult, districtResult: districtResult }) } else if (feature == 'getDistrictByCityId') { var districtByCity = data.result[0]; param.success(data, districtByCity) } else if (feature == 'calculateDistance') { var calculateDistanceResult = data.result.elements; var distance = []; for (var i = 0; i < calculateDistanceResult.length; i++) { distance.push(calculateDistanceResult[i].distance) } param.success(data, { calculateDistanceResult: calculateDistanceResult, distance: distance }) } else if (feature == 'direction') { var direction = data.result.routes; param.success(data, direction) } else { param.success(data) } }, buildWxRequestConfig(param, options, feature) { var that = this; options.header = { "content-type": "application/json" }; options.method = 'GET'; options.success = function (res) { var data = res.data; if (data.status === 0) { that.handleData(param, data, feature) } else { param.fail(data) } }; options.fail = function (res) { res.statusCode = ERROR_CONF.WX_ERR_CODE; param.fail(that.buildErrorConfig(ERROR_CONF.WX_ERR_CODE, res.errMsg)) }; options.complete = function (res) { var statusCode = +res.statusCode; switch (statusCode) { case ERROR_CONF.WX_ERR_CODE: { param.complete(that.buildErrorConfig(ERROR_CONF.WX_ERR_CODE, res.errMsg)); break } case ERROR_CONF.WX_OK_CODE: { var data = res.data; if (data.status === 0) { param.complete(data) } else { param.complete(that.buildErrorConfig(data.status, data.message)) } break } default: { param.complete(that.buildErrorConfig(ERROR_CONF.SYSTEM_ERR, ERROR_CONF.SYSTEM_ERR_MSG)) } } }; return options }, locationProcess(param, locationsuccess, locationfail, locationcomplete) { var that = this; locationfail = locationfail || function (res) { res.statusCode = ERROR_CONF.WX_ERR_CODE; param.fail(that.buildErrorConfig(ERROR_CONF.WX_ERR_CODE, res.errMsg)) }; locationcomplete = locationcomplete || function (res) { if (res.statusCode == ERROR_CONF.WX_ERR_CODE) { param.complete(that.buildErrorConfig(ERROR_CONF.WX_ERR_CODE, res.errMsg)) } }; if (!param.location) { that.getWXLocation(locationsuccess, locationfail, locationcomplete) } else if (that.checkLocation(param)) { var location = Utils.getLocationParam(param.location); locationsuccess(location) } } }; class QQMapWX { constructor(options) { if (!options.key) { throw Error('key值不能为空') } this.key = options.key }; search(options) { var that = this; options = options || {}; Utils.polyfillParam(options); if (!Utils.checkKeyword(options)) { return } var requestParam = { keyword: options.keyword, orderby: options.orderby || '_distance', page_size: options.page_size || 10, page_index: options.page_index || 1, output: 'json', key: that.key }; if (options.address_format) { requestParam.address_format = options.address_format } if (options.filter) { requestParam.filter = options.filter } var distance = options.distance || "1000"; var auto_extend = options.auto_extend || 1; var region = null; var rectangle = null; if (options.region) { region = options.region } if (options.rectangle) { rectangle = options.rectangle } var locationsuccess = function (result) { if (region && !rectangle) { requestParam.boundary = "region(" + region + "," + auto_extend + "," + result.latitude + "," + result.longitude + ")"; if (options.sig) { requestParam.sig = Utils.getSig(requestParam, options.sig, 'search') } } else if (rectangle && !region) { requestParam.boundary = "rectangle(" + rectangle + ")"; if (options.sig) { requestParam.sig = Utils.getSig(requestParam, options.sig, 'search') } } else { requestParam.boundary = "nearby(" + result.latitude + "," + result.longitude + "," + distance + "," + auto_extend + ")"; if (options.sig) { requestParam.sig = Utils.getSig(requestParam, options.sig, 'search') } } wx.request(Utils.buildWxRequestConfig(options, { url: URL_SEARCH, data: requestParam }, 'search')) }; Utils.locationProcess(options, locationsuccess) }; getSuggestion(options) { var that = this; options = options || {}; Utils.polyfillParam(options); if (!Utils.checkKeyword(options)) { return } var requestParam = { keyword: options.keyword, region: options.region || '全国', region_fix: options.region_fix || 0, policy: options.policy || 0, page_size: options.page_size || 10, page_index: options.page_index || 1, get_subpois: options.get_subpois || 0, output: 'json', key: that.key }; if (options.address_format) { requestParam.address_format = options.address_format } if (options.filter) { requestParam.filter = options.filter } if (options.location) { var locationsuccess = function (result) { requestParam.location = result.latitude + ',' + result.longitude; if (options.sig) { requestParam.sig = Utils.getSig(requestParam, options.sig, 'suggest') } wx.request(Utils.buildWxRequestConfig(options, { url: URL_SUGGESTION, data: requestParam }, "suggest")) }; Utils.locationProcess(options, locationsuccess) } else { if (options.sig) { requestParam.sig = Utils.getSig(requestParam, options.sig, 'suggest') } wx.request(Utils.buildWxRequestConfig(options, { url: URL_SUGGESTION, data: requestParam }, "suggest")) } }; reverseGeocoder(options) { var that = this; options = options || {}; Utils.polyfillParam(options); var requestParam = { coord_type: options.coord_type || 5, get_poi: options.get_poi || 0, output: 'json', key: that.key }; if (options.poi_options) { requestParam.poi_options = options.poi_options } var locationsuccess = function (result) { requestParam.location = result.latitude + ',' + result.longitude; if (options.sig) { requestParam.sig = Utils.getSig(requestParam, options.sig, 'reverseGeocoder') } wx.request(Utils.buildWxRequestConfig(options, { url: URL_GET_GEOCODER, data: requestParam }, 'reverseGeocoder')) }; Utils.locationProcess(options, locationsuccess) }; geocoder(options) { var that = this; options = options || {}; Utils.polyfillParam(options); if (Utils.checkParamKeyEmpty(options, 'address')) { return } var requestParam = { address: options.address, output: 'json', key: that.key }; if (options.region) { requestParam.region = options.region } if (options.sig) { requestParam.sig = Utils.getSig(requestParam, options.sig, 'geocoder') } wx.request(Utils.buildWxRequestConfig(options, { url: URL_GET_GEOCODER, data: requestParam }, 'geocoder')) }; getCityList(options) { var that = this; options = options || {}; Utils.polyfillParam(options); var requestParam = { output: 'json', key: that.key }; if (options.sig) { requestParam.sig = Utils.getSig(requestParam, options.sig, 'getCityList') } wx.request(Utils.buildWxRequestConfig(options, { url: URL_CITY_LIST, data: requestParam }, 'getCityList')) }; getDistrictByCityId(options) { var that = this; options = options || {}; Utils.polyfillParam(options); if (Utils.checkParamKeyEmpty(options, 'id')) { return } var requestParam = { id: options.id || '', output: 'json', key: that.key }; if (options.sig) { requestParam.sig = Utils.getSig(requestParam, options.sig, 'getDistrictByCityId') } wx.request(Utils.buildWxRequestConfig(options, { url: URL_AREA_LIST, data: requestParam }, 'getDistrictByCityId')) }; calculateDistance(options) { var that = this; options = options || {}; Utils.polyfillParam(options); if (Utils.checkParamKeyEmpty(options, 'to')) { return } var requestParam = { mode: options.mode || 'walking', to: Utils.location2query(options.to), output: 'json', key: that.key }; if (options.from) { options.location = options.from } if (requestParam.mode == 'straight') { var locationsuccess = function (result) { var locationTo = Utils.getEndLocation(requestParam.to); var data = { message: "query ok", result: { elements: [] }, status: 0 }; for (var i = 0; i < locationTo.length; i++) { data.result.elements.push({ distance: Utils.getDistance(result.latitude, result.longitude, locationTo[i].lat, locationTo[i].lng), duration: 0, from: { lat: result.latitude, lng: result.longitude }, to: { lat: locationTo[i].lat, lng: locationTo[i].lng } }) } var calculateResult = data.result.elements; var distanceResult = []; for (var i = 0; i < calculateResult.length; i++) { distanceResult.push(calculateResult[i].distance) } return options.success(data, { calculateResult: calculateResult, distanceResult: distanceResult }) }; Utils.locationProcess(options, locationsuccess) } else { var locationsuccess = function (result) { requestParam.from = result.latitude + ',' + result.longitude; if (options.sig) { requestParam.sig = Utils.getSig(requestParam, options.sig, 'calculateDistance') } wx.request(Utils.buildWxRequestConfig(options, { url: URL_DISTANCE, data: requestParam }, 'calculateDistance')) }; Utils.locationProcess(options, locationsuccess) } }; direction(options) { var that = this; options = options || {}; Utils.polyfillParam(options); if (Utils.checkParamKeyEmpty(options, 'to')) { return } var requestParam = { output: 'json', key: that.key }; if (typeof options.to == 'string') { requestParam.to = options.to } else { requestParam.to = options.to.latitude + ',' + options.to.longitude } var SET_URL_DIRECTION = null; options.mode = options.mode || MODE.driving; SET_URL_DIRECTION = URL_DIRECTION + options.mode; if (options.from) { options.location = options.from } if (options.mode == MODE.driving) { if (options.from_poi) { requestParam.from_poi = options.from_poi } if (options.heading) { requestParam.heading = options.heading } if (options.speed) { requestParam.speed = options.speed } if (options.accuracy) { requestParam.accuracy = options.accuracy } if (options.road_type) { requestParam.road_type = options.road_type } if (options.to_poi) { requestParam.to_poi = options.to_poi } if (options.from_track) { requestParam.from_track = options.from_track } if (options.waypoints) { requestParam.waypoints = options.waypoints } if (options.policy) { requestParam.policy = options.policy } if (options.plate_number) { requestParam.plate_number = options.plate_number } } if (options.mode == MODE.transit) { if (options.departure_time) { requestParam.departure_time = options.departure_time } if (options.policy) { requestParam.policy = options.policy } } var locationsuccess = function (result) { requestParam.from = result.latitude + ',' + result.longitude; if (options.sig) { requestParam.sig = Utils.getSig(requestParam, options.sig, 'direction', options.mode) } wx.request(Utils.buildWxRequestConfig(options, { url: SET_URL_DIRECTION, data: requestParam }, 'direction')) }; Utils.locationProcess(options, locationsuccess) } }; module.exports = QQMapWX; \ No newline at end of file diff --git a/common/js/recorder.js b/common/js/recorder.js new file mode 100644 index 0000000..5aa67c7 --- /dev/null +++ b/common/js/recorder.js @@ -0,0 +1,12 @@ +/*! + * + * js-audio-recorder - js audio recorder plugin + * + * @version v1.0.7 + * @homepage https://github.com/2fps/recorder + * @author 2fps (https://www.zhuyuntao.cn) + * @license MIT + * + */ +!function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e():"function"==typeof define&&define.amd?define([],e):"object"==typeof exports?exports.Recorder=e():t.Recorder=e()}(this,function(){return function(t){var e={};function n(i){if(e[i])return e[i].exports;var o=e[i]={i:i,l:!1,exports:{}};return t[i].call(o.exports,o,o.exports,n),o.l=!0,o.exports}return n.m=t,n.c=e,n.d=function(t,e,i){n.o(t,e)||Object.defineProperty(t,e,{enumerable:!0,get:i})},n.r=function(t){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})},n.t=function(t,e){if(1&e&&(t=n(t)),8&e)return t;if(4&e&&"object"==typeof t&&t&&t.__esModule)return t;var i=Object.create(null);if(n.r(i),Object.defineProperty(i,"default",{enumerable:!0,value:t}),2&e&&"string"!=typeof t)for(var o in t)n.d(i,o,function(e){return t[e]}.bind(null,o));return i},n.n=function(t){var e=t&&t.__esModule?function(){return t.default}:function(){return t};return n.d(e,"a",e),e},n.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},n.p="",n(n.s=1)}([function(t,e,n){"use strict";function i(t,e,n){for(var i=0;ie?e:n,u=r,c=new ArrayBuffer(44+t.byteLength),l=new DataView(c),f=o,p=0;i(l,p,"RIFF"),p+=4,l.setUint32(p,36+t.byteLength,a),i(l,p+=4,"WAVE"),i(l,p+=4,"fmt "),p+=4,l.setUint32(p,16,a),p+=4,l.setUint16(p,1,a),p+=2,l.setUint16(p,f,a),p+=2,l.setUint32(p,s,a),p+=4,l.setUint32(p,f*s*(u/8),a),p+=4,l.setUint16(p,f*(u/8),a),p+=2,l.setUint16(p,u,a),i(l,p+=2,"data"),p+=4,l.setUint32(p,t.byteLength,a),p+=4;for(var d=0;d44&&s.default.play(t.buffer)},e.prototype.getPlayTime=function(){return s.default.getPlayTime()},e.prototype.pausePlay=function(){!this.isrecording&&this.isplaying&&(this.isplaying=!1,this.onpauseplay&&this.onpauseplay(),s.default.pausePlay())},e.prototype.resumePlay=function(){this.isrecording||this.isplaying||(this.isplaying=!0,this.onresumeplay&&this.onresumeplay(),s.default.resumePlay())},e.prototype.stopPlay=function(){this.isrecording||(this.isplaying=!1,this.onstopplay&&this.onstopplay(),s.default.stopPlay())},e.prototype.destroy=function(){return s.default.destroyPlay(),this.destroyRecord()},e.prototype.getRecordAnalyseData=function(){return this.getAnalyseData()},e.prototype.getPlayAnalyseData=function(){return s.default.getAnalyseData()},e.prototype.getPCM=function(){this.stop();var t=this.getData();return t=a.compress(t,this.inputSampleRate,this.outputSampleRate),a.encodePCM(t,this.oututSampleBits,this.littleEdian)},e.prototype.getPCMBlob=function(){return new Blob([this.getPCM()])},e.prototype.downloadPCM=function(t){void 0===t&&(t="recorder");var e=this.getPCMBlob();r.downloadPCM(e,t)},e.prototype.getWAV=function(){var t=this.getPCM();return a.encodeWAV(t,this.inputSampleRate,this.outputSampleRate,this.config.numChannels,this.oututSampleBits,this.littleEdian)},e.prototype.getWAVBlob=function(){return new Blob([this.getWAV()],{type:"audio/wav"})},e.prototype.downloadWAV=function(t){void 0===t&&(t="recorder");var e=this.getWAVBlob();r.downloadWAV(e,t)},e.prototype.download=function(t,e,n){r.download(t,e,n)},e.prototype.getChannelData=function(){var t=this.getPCM(),e=t.byteLength,n=this.littleEdian,i={left:null,right:null};if(2===this.config.numChannels){var o=new DataView(new ArrayBuffer(e/2)),r=new DataView(new ArrayBuffer(e/2));if(16===this.config.sampleBits)for(var a=0;a { + let ojbItem = setObj; + setObj = !!setObj ? setObj[itemKey] : that[itemKey]; + }); + that.$set(setObj, keys[keys.length - 1], val); + } + }); +} +export default setData diff --git a/common/js/util.js b/common/js/util.js new file mode 100644 index 0000000..8453e7b --- /dev/null +++ b/common/js/util.js @@ -0,0 +1,338 @@ +/** + * 工具类 + */ +/* + * @description: 公用方法文件 + * @author: 杨智源,吴潇 + * @update: 2018-12-26 + * 使用方式: this.$util.方法名 + */ +const util = { + /** + * 时间戳格式化 + * @param {Number} datetime 时间戳(秒) + * @param {String} formateType 时间戳所需处理的方式 normal(月日时分),info(年月日时分秒),rule(年月日时分秒,date(年月日) + * @param {String} joinType 日期间隔符号 + * @return {String} 日期字符串 + */ + formatTime(datetime, formateType, joinType) { + const date = new Date(Number(datetime) * 1000), + year = date.getFullYear(), + month = date.getMonth() + 1, + day = date.getDate(), + hour = date.getHours(), + minute = date.getMinutes(), + second = date.getSeconds(), + formatNumber = function formatNumber(n) { + n = n.toString(); + return n[1] ? n : '0' + n; + }, + timeType = { + 'normal': [ + [month, day], + [hour, minute] + ], + 'info': [ + [year, month, day], + [hour, minute, second] + ], + 'rule': [ + [year, month, day], + [hour, minute] + ], + }; + if (formateType == 'date') { + return [year, month, day].map(formatNumber).join(joinType); + } else { + return timeType[formateType][0].map(formatNumber).join(joinType) + ' ' + timeType[formateType][1].map(formatNumber) + .join(':'); + } + }, + + /** + * 计算距离时间 + * @param {String} dateStr 时间格式字符串 yyyy-mm-dd HH:MM:ss + * @return {String} 日期字符串 + */ + dateDistance(dateStr) { + let UNITS = { + '年': 31557600000, + '月': 2629800000, + '天': 86400000, + '小时': 3600000, + '分钟': 60000, + '秒': 1000 + }, + humanize = function(milliseconds) { + var humanize = ''; + for (var key in UNITS) { + if (milliseconds >= UNITS[key]) { + humanize = Math.floor(milliseconds / UNITS[key]) + key + '前'; + break; + } + } + return humanize || '刚刚'; + }, + format = function(dateStr) { + var date = parse(dateStr) + var diff = Date.now() - date.getTime(); + if (diff < UNITS['天']) { + return humanize(diff); + } + var _format = function(number) { + return (number < 10 ? ('0' + number) : number); + }; + return date.getFullYear() + '/' + _format(date.getMonth() + 1) + '/' + _format(date.getDay()) + '-' + + _format(date.getHours()) + ':' + _format(date.getMinutes()); + }, + parse = function(str) { //将"yyyy-mm-dd HH:MM:ss"格式的字符串,转化为一个Date对象 + var a = str.split(/[^0-9]/); + return new Date(a[0], a[1] - 1, a[2], a[3], a[4], a[5]); + }; + return format(dateStr); + }, + + /** + * Base64编码解码 + * @return {String} Base64字符串 + * 使用方法:new Base64().encode(String) , new Base64().decode(String) + */ + Base64() { + var _keyStr = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="; + + // 编码 + this.encode = function(input) { + var output = ""; + var chr1, chr2, chr3, enc1, enc2, enc3, enc4; + var i = 0; + input = _utf8_encode(input); + while (i < input.length) { + chr1 = input.charCodeAt(i++); + chr2 = input.charCodeAt(i++); + chr3 = input.charCodeAt(i++); + enc1 = chr1 >> 2; + enc2 = ((chr1 & 3) << 4) | (chr2 >> 4); + enc3 = ((chr2 & 15) << 2) | (chr3 >> 6); + enc4 = chr3 & 63; + if (isNaN(chr2)) { + enc3 = enc4 = 64; + } else if (isNaN(chr3)) { + enc4 = 64; + } + output = output + + _keyStr.charAt(enc1) + _keyStr.charAt(enc2) + + _keyStr.charAt(enc3) + _keyStr.charAt(enc4); + } + return output; + } + + // 解码 + this.decode = function(input) { + var output = ""; + var chr1, chr2, chr3; + var enc1, enc2, enc3, enc4; + var i = 0; + input = input.replace(/[^A-Za-z0-9\+\/\=]/g, ""); + while (i < input.length) { + enc1 = _keyStr.indexOf(input.charAt(i++)); + enc2 = _keyStr.indexOf(input.charAt(i++)); + enc3 = _keyStr.indexOf(input.charAt(i++)); + enc4 = _keyStr.indexOf(input.charAt(i++)); + chr1 = (enc1 << 2) | (enc2 >> 4); + chr2 = ((enc2 & 15) << 4) | (enc3 >> 2); + chr3 = ((enc3 & 3) << 6) | enc4; + output = output + String.fromCharCode(chr1); + if (enc3 != 64) { + output = output + String.fromCharCode(chr2); + } + if (enc4 != 64) { + output = output + String.fromCharCode(chr3); + } + } + output = _utf8_decode(output); + return output; + } + + let _utf8_encode = function(string) { + string = string.replace(/\r\n/g, "\n"); + var utftext = ""; + for (var n = 0; n < string.length; n++) { + var c = string.charCodeAt(n); + if (c < 128) { + utftext += String.fromCharCode(c); + } else if ((c > 127) && (c < 2048)) { + utftext += String.fromCharCode((c >> 6) | 192); + utftext += String.fromCharCode((c & 63) | 128); + } else { + utftext += String.fromCharCode((c >> 12) | 224); + utftext += String.fromCharCode(((c >> 6) & 63) | 128); + utftext += String.fromCharCode((c & 63) | 128); + } + + } + return utftext; + } + + let _utf8_decode = function(utftext) { + var string = ""; + var i = 0; + var c2 = 0, + c1 = c2, + c = c1; + while (i < utftext.length) { + c = utftext.charCodeAt(i); + if (c < 128) { + string += String.fromCharCode(c); + i++; + } else if ((c > 191) && (c < 224)) { + c2 = utftext.charCodeAt(i + 1); + string += String.fromCharCode(((c & 31) << 6) | (c2 & 63)); + i += 2; + } else { + c2 = utftext.charCodeAt(i + 1); + var c3 = utftext.charCodeAt(i + 2); + string += String.fromCharCode(((c & 15) << 12) | ((c2 & 63) << 6) | (c3 & 63)); + i += 3; + } + } + return string; + } + }, + + /** + * 获取对象里每一项的值(代替Object.values()) + * @param {Object} obj 一个对象 + * @return {String} 一个给定对象自身的所有属性值的数组 + */ + objectValues(obj) { + let valuesArray = [] + if (obj) { + for (let key in obj) { + valuesArray.push(obj[key]); + } + } + return valuesArray + }, + + /** + * 请求转换成Promise对象 + * @param {Object} options 请求参数 + * @param {Object} pageObj 当前页面实例 + * @param {Boolean} isToken 请求是否需要携带用户token + * @returns {Promise} Promise对象 + */ + requestPromise(options, pageObj, isToken = false) { + return new Promise((resolve, reject) => { + pageObj.$request({ ...options + }, res => resolve(res), pageObj, isToken); + }); + }, + + /** + * scene解码 + */ + scene_decode(e) { + if (e === undefined) + return {}; + let scene = decodeURIComponent(e), + params = scene.split(','), + data = {}; + for (let i in params) { + var val = params[i].split(':'); + val.length > 0 && val[0] && (data[val[0]] = val[1] || null) + } + return data; + }, + + /** + * 防止滚动触发多次函数 + * @param {Number} wait 重复间隔 + * @param {Function} handler 处理操作 + */ + scorllTimert: null, + debounce(wait, handler) { + let that = this; + return (() => { + // 每次触发 scroll 时先清除定时器 + clearTimeout(that.scorllTimert); + that.scorllTimert = setTimeout(() => { + handler(); + }, wait); + })(); + }, + + /** + * 获取url链接参数 + * @param {String} name 需要获取的参数名 + * @param {String} params url链接 + * @param {Boolean} ishref 是否使用完整的href路径作为正则匹配的参数 默认为否 + */ + getParams(name, params, ishref = !1) { + var reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)"); + var r = !!params ? (ishref ? params.includes('?') && params.split('?')[1].match(reg) : params.match(reg)) : null; + if (Object.prototype.toString.call(r) == "[object Array]") { + return r[2]; + } + if (r != null) { + return unescape(r[2]); + } + return r || null; + }, + + /** + * 坐标系转换 + */ + // bd09转gcj02 + baidu_To_qq(lat, lon) { + let x_pi = 3.14159265358979324 * 3000.0 / 180.0, + x = lon - 0.0065, + y = lat - 0.006, + z = Math.sqrt(x * x + y * y) - 0.00002 * Math.sin(y * x_pi), + theta = Math.atan2(y, x) - 0.000003 * Math.cos(x * x_pi), + latitude = z * Math.cos(theta), + longitude = z * Math.sin(theta), + gps = { + latitude, + longitude + }; + return gps; + }, + //gcj02转bd09 + qq_To_baidu(lat, lng) { + let x_PI = 3.14159265358979324 * 3000.0 / 180.0, + z = Math.sqrt(lng * lng + lat * lat) + 0.00002 * Math.sin(lat * x_PI), + theta = Math.atan2(lat, lng) + 0.000003 * Math.cos(lng * x_PI), + latitude = z * Math.cos(theta) + 0.0065, + longitude = z * Math.sin(theta) + 0.006, + gps = { + latitude, + longitude + }; + return gps; + }, + + // 浮点数计算 + // @digit {Number} 浮点数乘以的次方 + // 加法 + additionFloat(one,two,digit){ + let num=((one*digit)+(two*digit))/digit + return num; + }, + // 减法 + subtractionFloat(one,two,digit){ + let num=((one*digit)-(two*digit))/digit + return num; + }, + // 乘法 + multiplicationFloat(one,two,digit){ + let num=((one*digit)*(two*digit))/(digit*digit) + return num; + }, + // 除法 + divisionFloat(one,two,digit){ + let num=((one*digit)/(two*digit))/(digit*digit) + return num; + }, + +}; +export default util diff --git a/common/js/wxApi.js b/common/js/wxApi.js new file mode 100644 index 0000000..2102982 --- /dev/null +++ b/common/js/wxApi.js @@ -0,0 +1,234 @@ +import App from "@/common/js/app.js" +const wxApi = { + configData: null, + /** + * [wxRegister 微信Api初始化] + */ + wxRegister(callback) { + let _this = this, + signUrl = encodeURIComponent(location.href.split("#")[0]), + jsApiList = ["hideAllNonBaseMenuItem", "onMenuShareTimeline", "onMenuShareAppMessage", "openBusinessView", + "scanQRCode", + "getLocation", "chooseImage", "uploadImage", "openAddress", "openLocation", "translateVoice", 'stopRecord', + 'startRecord', "WeixinJSBridgeReady",'playVoice',"uploadVoice","downloadVoice","updateAppMessageShareData","updateTimelineShareData" + ]; + App._post_form("&do=getJssdk", { + sign_url: signUrl + }, (res) => { + let data = res.data; + jWeixin.config({ + debug: false, // 开启调试模式 + appId: data.appId, // 必填,公众号的唯一标识 + timestamp: data.timestamp, // 必填,生成签名的时间戳 + nonceStr: data.nonceStr, // 必填,生成签名的随机串 + signature: data.signature, // 必填,签名 + jsApiList: jsApiList ,// 必填,需要使用的JS接口列表 + openTagList:['wx-open-launch-weapp','wx-open-subscribe'] + }); + jWeixin.ready(() => { + // jWeixin.hideMenuItems({ + // menuList: ["menuItem:copyUrl"] // 要隐藏的菜单项,只能隐藏“传播类”和“保护类”按钮 + // }); + callback && callback(); + }); + _this.configData = { + ...data, + url: signUrl + } + jWeixin.error((optinos) => { + // config信息验证失败会执行error函数, + //如签名过期导致验证失败,具体错误信息可以打开config的debug模式查看, + //也可以在返回的res参数中查看,对于SPA可以在这里更新签名。 + console.log(optinos, 'optinos',_this.configData.url) + // App.showError(optinos.errMsg) + }); + // jWeixin.success((options) => { + // console.log(optinos, 'optinos') + // }) + // wx.ready(function() { + // wx.hideMenuItems({ + // menuList: ["menuItem:copyUrl"] // 要隐藏的菜单项,只能隐藏“传播类”和“保护类”按钮 + // }); + // }); + // jWeixin.ready(function() { + // jWeixin.hideMenuItems({ + // menuList: ["menuItem:copyUrl","menuItem:editTag","menuItem:delete","menuItem:originPage","menuItem:readMode", "menuItem:openWithQQBrowser", "menuItem:openWithSafari","menuItem:share:email","menuItem:share:brand","menuItem:share:qq","menuItem:share:QZone"] // 要隐藏的菜单项,只能隐藏“传播类”和“保护类”按钮 + // }); + // }); + }); + }, + wxShare(options){ + jWeixin.onMenuShareAppMessage(options); + jWeixin.onMenuShareTimeline(options); + // jWeixin.updateAppMessageShareData(options); + // jWeixin.updateTimelineShareData(options); + }, + oldWxShare(options) { + jWeixin.onMenuShareAppMessage(options); + jWeixin.onMenuShareTimeline(options); + jWeixin.updateAppMessageShareData(options); + jWeixin.updateTimelineShareData(options); + // jWeixin.onMenuShareTimeline({ + // title: options.title, // 分享标题 + // desc: options.desc, // 分享描述 + // link: options.link, // 分享链接 + // imgUrl: options.imgUrl, // 分享图标 + // success: function() { + // // 用户点击了分享后执行的回调函数 + // }, + // }) + }, + WxopenLocation(lat, lng, storename, address) { + jWeixin.openLocation({ + latitude: Number(lat), // 纬度,浮点数,范围为90 ~ -90 + longitude: Number(lng), // 经度,浮点数,范围为180 ~ -180。 + name: storename, // 位置名 + address: address, // 地址详情说明 + scale: 14, // 地图缩放级别,整形值,范围从1~28。默认为最大 + infoUrl: '' // 在查看位置界面底部显示的超链接,可点击跳转 + }); + }, + wxPay(options) { + jWeixin.chooseWXPay({ + timestamp: options.timeStamp, // 支付签名时间戳,注意微信jssdk中的所有使用timestamp字段均为小写。但最新版的支付后台生成签名使用的timeStamp字段名需大写其中的S字符 + nonceStr: options.nonceStr, // 支付签名随机串,不长于 32 位 + package: options.package, // 统一支付接口返回的prepay_id参数值,提交格式如:prepay_id=\*\*\*) + signType: options.signType, // 签名方式,默认为'SHA1',使用新版支付需传入'MD5' + paySign: options.paySign, // 支付签名 + success(res) { + // 支付成功后的回调函数 + options.success && options.success(res) + }, + cancel(res) { + options.cancel && options.cancel(res) + }, + fail(res) { + options.fail && options.fail(res) + } + }); + }, + scanQRCode(callback) { + jWeixin.scanQRCode({ + needResult: 0, // 默认为0,扫描结果由微信处理,1则直接返回扫描结果, + scanType: ["qrCode", "barCode"], // 可以指定扫二维码还是一维码,默认二者都有 + complete(res) { + callback && callback(res); + } + }); + }, + hideMenuItem() { + jWeixin.hideAllNonBaseMenuItem(); + }, + getLocation(optinos) { + jWeixin.getLocation(optinos); + }, + getLocation1() { + jWeixin.getLocation({ + type: 'gcj02', // 默认为wgs84的gps坐标,如果要返回直接给openLocation用的火星坐标,可传入'gcj02' + success: function(res) { + jWeixin.openLocation({ + latitude: res.latitude, // 纬度,浮点数,范围为90 ~ -90 + longitude: res.longitude, // 经度,浮点数,范围为180 ~ -180。 + name: '', // 位置名 + address: '', // 地址详情说明 + scale: 14, // 地图缩放级别,整形值,范围从1~28。默认为最大 + infoUrl: '' // 在查看位置界面底部显示的超链接,可点击跳转 + }); + } + }); + }, + // 选取图片 + choseImage(callback,num=1) { + + jWeixin.chooseImage({ + count: num, // 默认9 + sizeType: ['original', 'compressed'], // 可以指定是原图还是压缩图,默认二者都有 + sourceType: ['album', 'camera'], // 可以指定来源是相册还是相机,默认二者都有 + complete: function(res) { + callback && callback(res); + } + }); + + }, + //上传图片 + uoloadIg(localId, callback) { + debugger + // App._upLoad() + jWeixin.uploadImage({ + localId: localId, // 需要上传的图片的本地ID,由chooseImage接口获得 + isShowProgressTips: 1, // 默认为1,显示进度提示 + complete: function(res) { + callback && callback(res) + } + }); + }, + /** + * 微信好物圈 + */ + wxGoodsCircle(queryString, success, fail) { + jWeixin.openBusinessView({ + businessType: 'friendGoodsRecommend', + queryString: queryString, + success(res) { + success && success(res); + }, + fail(res) { + fail && fail(res); + } + }) + }, + wxOpenAddress(callback) { + console.info(jWeixin) + jWeixin.openAddress({ + success(res) { + callback && callback(res) + }, + fail(errMsg) { + callback && callback(errMsg) + console.info('我失败了') + } + }) + }, + // 监听录音自动停止接口 + wxStartRecord() { + console.info('startRecord') + jWeixin.startRecord({}) + }, + // 停止录音接口 + wxStopRecord(callback) { + console.info('wxStopRecord') + jWeixin.stopRecord({ + success: function(res) { + console.info('localId', res.localId) + callback && callback(res.localId) + + } + }) + }, + //监听播放录音 + wxPlayVoice(id){ + jWeixin.playVoice({ + localId:id + }) + }, + //录音上传 + wxUploadVoice(localId,callback){ + jWeixin.uploadVoice({ + localId:localId, + success: function (res) { + callback && callback(res.serverId); + } + }) + }, + // 识别音频并返回识别结果接口 + wxTranslateVoice(localId, callback) { + jWeixin.translateVoice({ + localId: localId, // 需要识别的音频的本地Id,由录音相关接口获得 + isShowProgressTips: 1, // 默认为1,显示进度提示 + success: function(res) { + callback && callback(res.translateResult) // 语音识别的结果 + } + }) + } +} +export default wxApi diff --git a/components/.DS_Store b/components/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..37fdde6c826f018d02d0e60c4948494783627fb8 GIT binary patch literal 6148 zcmeHK!AiqG5Z!HSO%SmM!5;VGtwKv%OAkVb_25m2=s~4TNU?#KlqPM_TFGzdANd9T zjx)R4La83Sh}apJeY3MOyX;HY*=3Azd+gU3D>23lP{f=G%@=~>sB4nb9z-tZ@L1wa zlc5*J-dZ#{{vreT?TT!|j#$cEw)*|vyW^e{;P)Zq_Bx3CcxuPv$WP=vjv9~) zbxY;htkJGlM5EcBSH!H{Y*oZ@t3IEb#=&9jPNY|NdW1q8>3o4E!qwc%kETY}k^nt!taZS}Q<%pePuZDO{$2 iAxkmDVks_zN&&w>1JKf#DFhD)T?8Zz)DQ!|%D^YkE>aW# literal 0 HcmV?d00001 diff --git a/components/drag-button/drag-button.vue b/components/drag-button/drag-button.vue new file mode 100644 index 0000000..f8151ff --- /dev/null +++ b/components/drag-button/drag-button.vue @@ -0,0 +1,599 @@ + + + + + diff --git a/components/hx-jump-ball/hx-jump-ball.vue b/components/hx-jump-ball/hx-jump-ball.vue new file mode 100644 index 0000000..8c93bf5 --- /dev/null +++ b/components/hx-jump-ball/hx-jump-ball.vue @@ -0,0 +1,233 @@ + + + + + diff --git a/components/invinbg-image-cropper/.DS_Store b/components/invinbg-image-cropper/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..5008ddfcf53c02e82d7eee2e57c38e5672ef89f6 GIT binary patch literal 6148 zcmeH~Jr2S!425mzP>H1@V-^m;4Wg<&0T*E43hX&L&p$$qDprKhvt+--jT7}7np#A3 zem<@ulZcFPQ@L2!n>{z**++&mCkOWA81W14cNZlEfg7;MkzE(HCqgga^y>{tEnwC%0;vJ&^%eQ zLs35+`xjp>T0 + + + + cropper-img + + + + + + cropper-img + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 取消 + 确定 + + + + + + + \ No newline at end of file diff --git a/components/jin-edit/jin-edit.vue b/components/jin-edit/jin-edit.vue new file mode 100644 index 0000000..c468658 --- /dev/null +++ b/components/jin-edit/jin-edit.vue @@ -0,0 +1,404 @@ + + + + + diff --git a/components/jin-edit/jin-icons.vue b/components/jin-edit/jin-icons.vue new file mode 100644 index 0000000..b85d216 --- /dev/null +++ b/components/jin-edit/jin-icons.vue @@ -0,0 +1,48 @@ + + + + + diff --git a/components/junyi-h5-copy/junyi-h5-copy.js b/components/junyi-h5-copy/junyi-h5-copy.js new file mode 100644 index 0000000..91fff37 --- /dev/null +++ b/components/junyi-h5-copy/junyi-h5-copy.js @@ -0,0 +1,18 @@ +export default function h5Copy(content) { + + if (!document.queryCommandSupported('copy')) { + // 不支持 + return false + } + + let textarea = document.createElement("textarea") + textarea.value = content + textarea.readOnly = "readOnly" + document.body.appendChild(textarea) + textarea.select() // 选择对象 + textarea.setSelectionRange(0, content.length) //核心 + let result = document.execCommand("copy") // 执行浏览器复制命令 + textarea.remove() + return result + +} \ No newline at end of file diff --git a/components/jyf-parser/jyf-parser.vue b/components/jyf-parser/jyf-parser.vue new file mode 100644 index 0000000..8e95787 --- /dev/null +++ b/components/jyf-parser/jyf-parser.vue @@ -0,0 +1,698 @@ + + + + + diff --git a/components/jyf-parser/libs/CssHandler.js b/components/jyf-parser/libs/CssHandler.js new file mode 100644 index 0000000..8000377 --- /dev/null +++ b/components/jyf-parser/libs/CssHandler.js @@ -0,0 +1,97 @@ +const cfg = require('./config.js'), + isLetter = c => (c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z'); + +function CssHandler(tagStyle) { + var styles = Object.assign(Object.create(null), cfg.userAgentStyles); + for (var item in tagStyle) + styles[item] = (styles[item] ? styles[item] + ';' : '') + tagStyle[item]; + this.styles = styles; +} +CssHandler.prototype.getStyle = function(data) { + this.styles = new parser(data, this.styles).parse(); +} +CssHandler.prototype.match = function(name, attrs) { + var tmp, matched = (tmp = this.styles[name]) ? tmp + ';' : ''; + if (attrs.class) { + var items = attrs.class.split(' '); + for (var i = 0, item; item = items[i]; i++) + if (tmp = this.styles['.' + item]) + matched += tmp + ';'; + } + if (tmp = this.styles['#' + attrs.id]) + matched += tmp + ';'; + return matched; +} +module.exports = CssHandler; + +function parser(data, init) { + this.data = data; + this.floor = 0; + this.i = 0; + this.list = []; + this.res = init; + this.state = this.Space; +} +parser.prototype.parse = function() { + for (var c; c = this.data[this.i]; this.i++) + this.state(c); + return this.res; +} +parser.prototype.section = function() { + return this.data.substring(this.start, this.i); +} +// 状态机 +parser.prototype.Space = function(c) { + if (c == '.' || c == '#' || isLetter(c)) { + this.start = this.i; + this.state = this.Name; + } else if (c == '/' && this.data[this.i + 1] == '*') + this.Comment(); + else if (!cfg.blankChar[c] && c != ';') + this.state = this.Ignore; +} +parser.prototype.Comment = function() { + this.i = this.data.indexOf('*/', this.i) + 1; + if (!this.i) this.i = this.data.length; + this.state = this.Space; +} +parser.prototype.Ignore = function(c) { + if (c == '{') this.floor++; + else if (c == '}' && !--this.floor) this.state = this.Space; +} +parser.prototype.Name = function(c) { + if (cfg.blankChar[c]) { + this.list.push(this.section()); + this.state = this.NameSpace; + } else if (c == '{') { + this.list.push(this.section()); + this.Content(); + } else if (c == ',') { + this.list.push(this.section()); + this.Comma(); + } else if (!isLetter(c) && (c < '0' || c > '9') && c != '-' && c != '_') + this.state = this.Ignore; +} +parser.prototype.NameSpace = function(c) { + if (c == '{') this.Content(); + else if (c == ',') this.Comma(); + else if (!cfg.blankChar[c]) this.state = this.Ignore; +} +parser.prototype.Comma = function() { + while (cfg.blankChar[this.data[++this.i]]); + if (this.data[this.i] == '{') this.Content(); + else { + this.start = this.i--; + this.state = this.Name; + } +} +parser.prototype.Content = function() { + this.start = ++this.i; + if ((this.i = this.data.indexOf('}', this.i)) == -1) this.i = this.data.length; + var content = this.section(); + for (var i = 0, item; item = this.list[i++];) + if (this.res[item]) this.res[item] += ';' + content; + else this.res[item] = content; + this.list = []; + this.state = this.Space; +} diff --git a/components/jyf-parser/libs/MpHtmlParser.js b/components/jyf-parser/libs/MpHtmlParser.js new file mode 100644 index 0000000..ccd15a5 --- /dev/null +++ b/components/jyf-parser/libs/MpHtmlParser.js @@ -0,0 +1,546 @@ +/** + * html 解析器 + * @tutorial https://github.com/jin-yufeng/Parser + * @version 20200524 + * @author JinYufeng + * @listens MIT + */ +const cfg = require('./config.js'), + blankChar = cfg.blankChar, + CssHandler = require('./CssHandler.js'), + windowWidth = uni.getSystemInfoSync().windowWidth; +var emoji; + +function MpHtmlParser(data, options = {}) { + this.attrs = {}; + this.CssHandler = new CssHandler(options.tagStyle, windowWidth); + this.data = data; + this.domain = options.domain; + this.DOM = []; + this.i = this.start = this.audioNum = this.imgNum = this.videoNum = 0; + options.prot = (this.domain || '').includes('://') ? this.domain.split('://')[0] : 'http'; + this.options = options; + this.state = this.Text; + this.STACK = []; + // 工具函数 + this.bubble = () => { + for (var i = this.STACK.length, item; item = this.STACK[--i];) { + if (cfg.richOnlyTags[item.name]) { + if (item.name == 'table' && !Object.hasOwnProperty.call(item, 'c')) item.c = 1; + return false; + } + item.c = 1; + } + return true; + } + this.decode = (val, amp) => { + var i = -1, + j, en; + while (1) { + if ((i = val.indexOf('&', i + 1)) == -1) break; + if ((j = val.indexOf(';', i + 2)) == -1) break; + if (val[i + 1] == '#') { + en = parseInt((val[i + 2] == 'x' ? '0' : '') + val.substring(i + 2, j)); + if (!isNaN(en)) val = val.substr(0, i) + String.fromCharCode(en) + val.substr(j + 1); + } else { + en = val.substring(i + 1, j); + if (cfg.entities[en] || en == amp) + val = val.substr(0, i) + (cfg.entities[en] || '&') + val.substr(j + 1); + } + } + return val; + } + this.getUrl = url => { + if (url[0] == '/') { + if (url[1] == '/') url = this.options.prot + ':' + url; + else if (this.domain) url = this.domain + url; + } else if (this.domain && url.indexOf('data:') != 0 && !url.includes('://')) + url = this.domain + '/' + url; + return url; + } + this.isClose = () => this.data[this.i] == '>' || (this.data[this.i] == '/' && this.data[this.i + 1] == '>'); + this.section = () => this.data.substring(this.start, this.i); + this.parent = () => this.STACK[this.STACK.length - 1]; + this.siblings = () => this.STACK.length ? this.parent().children : this.DOM; +} +MpHtmlParser.prototype.parse = function() { + if (emoji) this.data = emoji.parseEmoji(this.data); + for (var c; c = this.data[this.i]; this.i++) + this.state(c); + if (this.state == this.Text) this.setText(); + while (this.STACK.length) this.popNode(this.STACK.pop()); + if (this.DOM.length) { + this.DOM[0].PoweredBy = 'Parser'; + if (this.title) this.DOM[0].title = this.title; + } + return this.DOM; +} +// 设置属性 +MpHtmlParser.prototype.setAttr = function() { + var name = this.attrName.toLowerCase(); + if (cfg.trustAttrs[name]) { + var val = this.attrVal; + if (val) { + if (name == 'src') this.attrs[name] = this.getUrl(this.decode(val, 'amp')); + else if (name == 'href' || name == 'style') this.attrs[name] = this.decode(val, 'amp'); + else this.attrs[name] = val; + } else if (cfg.boolAttrs[name]) this.attrs[name] = 'T'; + } + this.attrVal = ''; + while (blankChar[this.data[this.i]]) this.i++; + if (this.isClose()) this.setNode(); + else { + this.start = this.i; + this.state = this.AttrName; + } +} +// 设置文本节点 +MpHtmlParser.prototype.setText = function() { + var back, text = this.section(); + if (!text) return; + text = (cfg.onText && cfg.onText(text, () => back = true)) || text; + if (back) { + this.data = this.data.substr(0, this.start) + text + this.data.substr(this.i); + let j = this.start + text.length; + for (this.i = this.start; this.i < j; this.i++) this.state(this.data[this.i]); + return; + } + if (!this.pre) { + // 合并空白符 + var tmp = []; + for (let i = text.length, c; c = text[--i];) + if (!blankChar[c] || (!blankChar[tmp[0]] && (c = ' '))) tmp.unshift(c); + text = tmp.join(''); + } + this.siblings().push({ + type: 'text', + text: this.decode(text) + }); +} +// 设置元素节点 +MpHtmlParser.prototype.setNode = function() { + var node = { + name: this.tagName.toLowerCase(), + attrs: this.attrs + }, + close = cfg.selfClosingTags[node.name]; + this.attrs = {}; + if (!cfg.ignoreTags[node.name]) { + // 处理属性 + var attrs = node.attrs, + style = this.CssHandler.match(node.name, attrs, node) + (attrs.style || ''), + styleObj = {}; + if (attrs.id) { + if (this.options.compress & 1) attrs.id = void 0; + else if (this.options.useAnchor) this.bubble(); + } + if ((this.options.compress & 2) && attrs.class) attrs.class = void 0; + switch (node.name) { + case 'a': + case 'ad': // #ifdef APP-PLUS + case 'iframe': + // #endif + this.bubble(); + break; + case 'font': + if (attrs.color) { + styleObj['color'] = attrs.color; + attrs.color = void 0; + } + if (attrs.face) { + styleObj['font-family'] = attrs.face; + attrs.face = void 0; + } + if (attrs.size) { + var size = parseInt(attrs.size); + if (size < 1) size = 1; + else if (size > 7) size = 7; + var map = ['xx-small', 'x-small', 'small', 'medium', 'large', 'x-large', 'xx-large']; + styleObj['font-size'] = map[size - 1]; + attrs.size = void 0; + } + break; + case 'embed': + // #ifndef APP-PLUS + var src = node.attrs.src || '', + type = node.attrs.type || ''; + if (type.includes('video') || src.includes('.mp4') || src.includes('.3gp') || src.includes('.m3u8')) + node.name = 'video'; + else if (type.includes('audio') || src.includes('.m4a') || src.includes('.wav') || src.includes('.mp3') || src.includes( + '.aac')) + node.name = 'audio'; + else break; + if (node.attrs.autostart) + node.attrs.autoplay = 'T'; + node.attrs.controls = 'T'; + // #endif + // #ifdef APP-PLUS + this.bubble(); + break; + // #endif + case 'video': + case 'audio': + if (!attrs.id) attrs.id = node.name + (++this[`${node.name}Num`]); + else this[`${node.name}Num`]++; + if (node.name == 'video') { + if (this.videoNum > 3) + node.lazyLoad = 1; + if (attrs.width) { + styleObj.width = parseFloat(attrs.width) + (attrs.width.includes('%') ? '%' : 'px'); + attrs.width = void 0; + } + if (attrs.height) { + styleObj.height = parseFloat(attrs.height) + (attrs.height.includes('%') ? '%' : 'px'); + attrs.height = void 0; + } + } + attrs.source = []; + if (attrs.src) { + attrs.source.push(attrs.src); + attrs.src = void 0; + } + if (!attrs.controls && !attrs.autoplay) attrs.controls = 'T'; + this.bubble(); + break; + case 'td': + case 'th': + if (attrs.colspan || attrs.rowspan) + for (var k = this.STACK.length, item; item = this.STACK[--k];) + if (item.name == 'table') { + item.c = void 0; + break; + } + } + if (attrs.align) { + styleObj['text-align'] = attrs.align; + attrs.align = void 0; + } + // 压缩 style + var styles = style.split(';'); + style = ''; + for (var i = 0, len = styles.length; i < len; i++) { + var info = styles[i].split(':'); + if (info.length < 2) continue; + let key = info[0].trim().toLowerCase(), + value = info.slice(1).join(':').trim(); + if (value.includes('-webkit') || value.includes('-moz') || value.includes('-ms') || value.includes('-o') || value.includes( + 'safe')) + style += `;${key}:${value}`; + else if (!styleObj[key] || value.includes('import') || !styleObj[key].includes('import')) + styleObj[key] = value; + } + if (node.name == 'img') { + if (attrs['data-src']) { + attrs.src = attrs.src || attrs['data-src']; + attrs['data-src'] = void 0; + } + if (attrs.src && !attrs.ignore) { + if (this.bubble()) + attrs.i = (this.imgNum++).toString(); + else attrs.ignore = 'T'; + } + if (attrs.ignore) styleObj['max-width'] = '100%'; + var width; + if (styleObj.width) width = styleObj.width; + else if (attrs.width) width = attrs.width.includes('%') ? attrs.width : attrs.width + 'px'; + if (width) { + styleObj.width = width; + attrs.width = '100%'; + if (parseInt(width) > windowWidth) { + styleObj.height = ''; + if (attrs.height) attrs.height = void 0; + } + } + if (styleObj.height) { + attrs.height = styleObj.height; + styleObj.height = ''; + } else if (attrs.height && !attrs.height.includes('%')) + attrs.height += 'px'; + } + for (var key in styleObj) { + var value = styleObj[key]; + if (!value) continue; + if (key.includes('flex') || key == 'order' || key == 'self-align') node.c = 1; + // 填充链接 + if (value.includes('url')) { + var j = value.indexOf('('); + if (j++ != -1) { + while (value[j] == '"' || value[j] == "'" || blankChar[value[j]]) j++; + value = value.substr(0, j) + this.getUrl(value.substr(j)); + } + } + // 转换 rpx + else if (value.includes('rpx')) + value = value.replace(/[0-9.]+\s*rpx/g, $ => parseFloat($) * windowWidth / 750 + 'px'); + else if (key == 'white-space' && value.includes('pre')) + this.pre = node.pre = true; + style += `;${key}:${value}`; + } + style = style.substr(1); + if (style) attrs.style = style; + if (!close) { + node.children = []; + if (node.name == 'pre' && cfg.highlight) { + this.remove(node); + this.pre = node.pre = true; + } + this.siblings().push(node); + this.STACK.push(node); + } else if (!cfg.filter || cfg.filter(node, this) != false) + this.siblings().push(node); + } else { + if (!close) this.remove(node); + else if (node.name == 'source') { + var parent = this.parent(); + if (parent && (parent.name == 'video' || parent.name == 'audio') && node.attrs.src) + parent.attrs.source.push(node.attrs.src); + } else if (node.name == 'base' && !this.domain) this.domain = node.attrs.href; + } + if (this.data[this.i] == '/') this.i++; + this.start = this.i + 1; + this.state = this.Text; +} +// 移除标签 +MpHtmlParser.prototype.remove = function(node) { + var name = node.name, + j = this.i; + // 处理 svg + var handleSvg = () => { + var src = this.data.substring(j, this.i + 1); + if (!node.attrs.xmlns) src = ' xmlns="http://www.w3.org/2000/svg"' + src; + var i = j; + while (this.data[j] != '<') j--; + src = this.data.substring(j, i) + src; + var parent = this.parent(); + if (node.attrs.width == '100%' && parent && (parent.attrs.style || '').includes('inline')) + parent.attrs.style = 'width:300px;max-width:100%;' + parent.attrs.style; + this.siblings().push({ + name: 'img', + attrs: { + src: 'data:image/svg+xml;utf8,' + src.replace(/#/g, '%23'), + style: (/vertical[^;]+/.exec(node.attrs.style) || []).shift(), + ignore: 'T' + } + }) + } + if (node.name == 'svg' && this.data[j] == '/') return handleSvg(this.i++); + while (1) { + if ((this.i = this.data.indexOf('', this.i)) == -1) this.i = this.data.length; + if (name == 'svg') handleSvg(); + return; + } + } +} +// 节点出栈处理 +MpHtmlParser.prototype.popNode = function(node) { + // 空白符处理 + if (node.pre) { + node.pre = this.pre = void 0; + for (let i = this.STACK.length; i--;) + if (this.STACK[i].pre) + this.pre = true; + } + var siblings = this.siblings(), + len = siblings.length, + childs = node.children; + if (node.name == 'head' || (cfg.filter && cfg.filter(node, this) == false)) + return siblings.pop(); + var attrs = node.attrs; + // 替换一些标签名 + if (cfg.blockTags[node.name]) node.name = 'div'; + else if (!cfg.trustTags[node.name]) node.name = 'span'; + // 去除块标签前后空串 + if (node.name == 'div' || node.name == 'p' || node.name[0] == 't') { + if (len > 1 && siblings[len - 2].text == ' ') + siblings.splice(--len - 1, 1); + if (childs.length && childs[childs.length - 1].text == ' ') + childs.pop(); + } + // 处理列表 + if (node.c && (node.name == 'ul' || node.name == 'ol')) { + if ((node.attrs.style || '').includes('list-style:none')) { + for (let i = 0, child; child = childs[i++];) + if (child.name == 'li') + child.name = 'div'; + } else if (node.name == 'ul') { + var floor = 1; + for (let i = this.STACK.length; i--;) + if (this.STACK[i].name == 'ul') floor++; + if (floor != 1) + for (let i = childs.length; i--;) + childs[i].floor = floor; + } else { + for (let i = 0, num = 1, child; child = childs[i++];) + if (child.name == 'li') { + child.type = 'ol'; + child.num = ((num, type) => { + if (type == 'a') return String.fromCharCode(97 + (num - 1) % 26); + if (type == 'A') return String.fromCharCode(65 + (num - 1) % 26); + if (type == 'i' || type == 'I') { + num = (num - 1) % 99 + 1; + var one = ['I', 'II', 'III', 'IV', 'V', 'VI', 'VII', 'VIII', 'IX'], + ten = ['X', 'XX', 'XXX', 'XL', 'L', 'LX', 'LXX', 'LXXX', 'XC'], + res = (ten[Math.floor(num / 10) - 1] || '') + (one[num % 10 - 1] || ''); + if (type == 'i') return res.toLowerCase(); + return res; + } + return num; + })(num++, attrs.type) + '.'; + } + } + } + // 处理表格的边框 + if (node.name == 'table') { + var padding = attrs.cellpadding, + spacing = attrs.cellspacing, + border = attrs.border; + if (node.c) { + this.bubble(); + attrs.style = (attrs.style || '') + ';display:table'; + if (!padding) padding = 2; + if (!spacing) spacing = 2; + } + if (border) attrs.style = `border:${border}px solid gray;${attrs.style || ''}`; + if (spacing) attrs.style = `border-spacing:${spacing}px;${attrs.style || ''}`; + if (border || padding || node.c) + (function f(ns) { + for (var i = 0, n; n = ns[i]; i++) { + if (n.type == 'text') continue; + var style = n.attrs.style || ''; + if (node.c && n.name[0] == 't') { + n.c = 1; + style += ';display:table-' + (n.name == 'th' || n.name == 'td' ? 'cell' : (n.name == 'tr' ? 'row' : 'row-group')); + } + if (n.name == 'th' || n.name == 'td') { + if (border) style = `border:${border}px solid gray;${style}`; + if (padding) style = `padding:${padding}px;${style}`; + } else f(n.children || []); + if (style) n.attrs.style = style; + } + })(childs) + if (this.options.autoscroll) { + var table = Object.assign({}, node); + node.name = 'div'; + node.attrs = { + style: 'overflow:scroll' + } + node.children = [table]; + } + } + this.CssHandler.pop && this.CssHandler.pop(node); + // 自动压缩 + if (node.name == 'div' && !Object.keys(attrs).length && childs.length == 1 && childs[0].name == 'div') + siblings[len - 1] = childs[0]; +} +// 状态机 +MpHtmlParser.prototype.Text = function(c) { + if (c == '<') { + var next = this.data[this.i + 1], + isLetter = c => (c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z'); + if (isLetter(next)) { + this.setText(); + this.start = this.i + 1; + this.state = this.TagName; + } else if (next == '/') { + this.setText(); + if (isLetter(this.data[++this.i + 1])) { + this.start = this.i + 1; + this.state = this.EndTag; + } else this.Comment(); + } else if (next == '!') { + this.setText(); + this.Comment(); + } + } +} +MpHtmlParser.prototype.Comment = function() { + var key; + if (this.data.substring(this.i + 2, this.i + 4) == '--') key = '-->'; + else if (this.data.substring(this.i + 2, this.i + 9) == '[CDATA[') key = ']]>'; + else key = '>'; + if ((this.i = this.data.indexOf(key, this.i + 2)) == -1) this.i = this.data.length; + else this.i += key.length - 1; + this.start = this.i + 1; + this.state = this.Text; +} +MpHtmlParser.prototype.TagName = function(c) { + if (blankChar[c]) { + this.tagName = this.section(); + while (blankChar[this.data[this.i]]) this.i++; + if (this.isClose()) this.setNode(); + else { + this.start = this.i; + this.state = this.AttrName; + } + } else if (this.isClose()) { + this.tagName = this.section(); + this.setNode(); + } +} +MpHtmlParser.prototype.AttrName = function(c) { + var blank = blankChar[c]; + if (blank) { + this.attrName = this.section(); + c = this.data[this.i]; + } + if (c == '=') { + if (!blank) this.attrName = this.section(); + while (blankChar[this.data[++this.i]]); + this.start = this.i--; + this.state = this.AttrValue; + } else if (blank) this.setAttr(); + else if (this.isClose()) { + this.attrName = this.section(); + this.setAttr(); + } +} +MpHtmlParser.prototype.AttrValue = function(c) { + if (c == '"' || c == "'") { + this.start++; + if ((this.i = this.data.indexOf(c, this.i + 1)) == -1) return this.i = this.data.length; + this.attrVal = this.section(); + this.i++; + } else { + for (; !blankChar[this.data[this.i]] && !this.isClose(); this.i++); + this.attrVal = this.section(); + } + this.setAttr(); +} +MpHtmlParser.prototype.EndTag = function(c) { + if (blankChar[c] || c == '>' || c == '/') { + var name = this.section().toLowerCase(); + for (var i = this.STACK.length; i--;) + if (this.STACK[i].name == name) break; + if (i != -1) { + var node; + while ((node = this.STACK.pop()).name != name) this.popNode(node); + this.popNode(node); + } else if (name == 'p' || name == 'br') + this.siblings().push({ + name, + attrs: {} + }); + this.i = this.data.indexOf('>', this.i); + this.start = this.i + 1; + if (this.i == -1) this.i = this.data.length; + else this.state = this.Text; + } +} +module.exports = MpHtmlParser; diff --git a/components/jyf-parser/libs/config.js b/components/jyf-parser/libs/config.js new file mode 100644 index 0000000..c3339d8 --- /dev/null +++ b/components/jyf-parser/libs/config.js @@ -0,0 +1,98 @@ +/* 配置文件 */ +// #ifndef H5 +const canIUse = wx.canIUse('editor'); // 高基础库标识,用于兼容 +// #endif +module.exports = { + // 出错占位图 + errorImg: null, + // 过滤器函数 + filter: null, + // 代码高亮函数 + highlight: null, + // 文本处理函数 + onText: null, + // 实体编码列表 + entities: { + quot: '"', + apos: "'", + semi: ';', + nbsp: '\xA0', + ensp: '\u2002', + emsp: '\u2003', + ndash: '–', + mdash: '—', + middot: '·', + lsquo: '‘', + rsquo: '’', + ldquo: '“', + rdquo: '”', + bull: '•', + hellip: '…' + }, + blankChar: makeMap(' ,\xA0,\t,\r,\n,\f'), + // 块级标签,将被转为 div + blockTags: makeMap('address,article,aside,body,caption,center,cite,footer,header,html,nav,section' + ( + // #ifndef H5 + canIUse ? '' : + // #endif + ',pre')), + // 将被移除的标签 + ignoreTags: makeMap( + 'area,base,canvas,frame,input,link,map,meta,param,script,source,style,svg,textarea,title,track,wbr' + // #ifndef H5 + + (canIUse ? ',rp' : '') + // #endif + // #ifndef APP-PLUS + + ',iframe' + // #endif + ), + // 只能被 rich-text 显示的标签 + richOnlyTags: makeMap('a,colgroup,fieldset,legend,picture,table,navigator' + // #ifndef H5 + + (canIUse ? ',bdi,bdo,caption,rt,ruby' : '') + // #endif + ), + // 自闭合的标签 + selfClosingTags: makeMap( + 'area,base,br,col,circle,ellipse,embed,frame,hr,img,input,line,link,meta,param,path,polygon,rect,source,track,use,wbr' + ), + // 信任的属性 + trustAttrs: makeMap( + 'align,allowfullscreen,alt,app-id,author,autoplay,autostart,border,cellpadding,cellspacing,class,color,colspan,controls,data-src,dir,face,height,href,id,ignore,loop,media,muted,name,path,poster,rowspan,size,span,src,start,style,type,unit-id,width,xmlns' + ), + // bool 型的属性 + boolAttrs: makeMap('allowfullscreen,autoplay,autostart,controls,ignore,loop,muted'), + // 信任的标签 + trustTags: makeMap( + 'a,abbr,ad,audio,b,blockquote,br,code,col,colgroup,dd,del,dl,dt,div,em,fieldset,h1,h2,h3,h4,h5,h6,hr,i,img,ins,label,legend,li,ol,p,q,source,span,strong,sub,sup,table,tbody,td,tfoot,th,thead,tr,title,ul,video' + // #ifndef H5 + + (canIUse ? ',bdi,bdo,caption,pre,rt,ruby' : '') + // #endif + // #ifdef APP-PLUS + + ',embed,iframe' + // #endif + ), + // 默认的标签样式 + userAgentStyles: { + address: 'font-style:italic', + big: 'display:inline;font-size:1.2em', + blockquote: 'background-color:#f6f6f6;border-left:3px solid #dbdbdb;color:#6c6c6c;padding:5px 0 5px 10px', + caption: 'display:table-caption;text-align:center', + center: 'text-align:center', + cite: 'font-style:italic', + dd: 'margin-left:40px', + mark: 'background-color:yellow', + pre: 'font-family:monospace;white-space:pre;overflow:scroll', + s: 'text-decoration:line-through', + small: 'display:inline;font-size:0.8em', + u: 'text-decoration:underline' + } +} + +function makeMap(str) { + var map = Object.create(null), + list = str.split(','); + for (var i = list.length; i--;) + map[list[i]] = true; + return map; +} diff --git a/components/jyf-parser/libs/handler.sjs b/components/jyf-parser/libs/handler.sjs new file mode 100644 index 0000000..79c7739 --- /dev/null +++ b/components/jyf-parser/libs/handler.sjs @@ -0,0 +1,20 @@ +var inline = { + abbr: 1, + b: 1, + big: 1, + code: 1, + del: 1, + em: 1, + i: 1, + ins: 1, + label: 1, + q: 1, + small: 1, + span: 1, + strong: 1 +} +export default { + use: function(item) { + return !item.c && !inline[item.name] && (item.attrs.style || '').indexOf('display:inline') == -1 + } +} diff --git a/components/jyf-parser/libs/handler.wxs b/components/jyf-parser/libs/handler.wxs new file mode 100644 index 0000000..ad9b15b --- /dev/null +++ b/components/jyf-parser/libs/handler.wxs @@ -0,0 +1,20 @@ +var inline = { + abbr: 1, + b: 1, + big: 1, + code: 1, + del: 1, + em: 1, + i: 1, + ins: 1, + label: 1, + q: 1, + small: 1, + span: 1, + strong: 1 +} +module.exports = { + use: function(item) { + return !item.c && !inline[item.name] && (item.attrs.style || '').indexOf('display:inline') == -1 + } +} diff --git a/components/jyf-parser/libs/trees.vue b/components/jyf-parser/libs/trees.vue new file mode 100644 index 0000000..9bdb6fe --- /dev/null +++ b/components/jyf-parser/libs/trees.vue @@ -0,0 +1,526 @@ + + + + + diff --git a/pages/mainPages/agreement/agreement.vue b/pages/mainPages/agreement/agreement.vue new file mode 100644 index 0000000..558fba0 --- /dev/null +++ b/pages/mainPages/agreement/agreement.vue @@ -0,0 +1,71 @@ + + + + + diff --git a/pages/mainPages/businessDetails/businessDetails.vue b/pages/mainPages/businessDetails/businessDetails.vue new file mode 100644 index 0000000..7b6646e --- /dev/null +++ b/pages/mainPages/businessDetails/businessDetails.vue @@ -0,0 +1,25 @@ + + + + + diff --git a/pages/mainPages/cashApplication/cashApplication.vue b/pages/mainPages/cashApplication/cashApplication.vue new file mode 100644 index 0000000..bfe4393 --- /dev/null +++ b/pages/mainPages/cashApplication/cashApplication.vue @@ -0,0 +1,392 @@ + + + + + diff --git a/pages/mainPages/comment/comment.vue b/pages/mainPages/comment/comment.vue new file mode 100644 index 0000000..14f3b35 --- /dev/null +++ b/pages/mainPages/comment/comment.vue @@ -0,0 +1,576 @@ + + + + + diff --git a/pages/mainPages/econdaryClassification/econdaryClassification.vue b/pages/mainPages/econdaryClassification/econdaryClassification.vue new file mode 100644 index 0000000..6b6ab0b --- /dev/null +++ b/pages/mainPages/econdaryClassification/econdaryClassification.vue @@ -0,0 +1,869 @@ + + + + + diff --git a/pages/mainPages/express/express.vue b/pages/mainPages/express/express.vue new file mode 100644 index 0000000..c13539b --- /dev/null +++ b/pages/mainPages/express/express.vue @@ -0,0 +1,217 @@ + + + + + diff --git a/pages/mainPages/headline/headlineDetail.vue b/pages/mainPages/headline/headlineDetail.vue new file mode 100644 index 0000000..0507df4 --- /dev/null +++ b/pages/mainPages/headline/headlineDetail.vue @@ -0,0 +1,1393 @@ + + + + + diff --git a/pages/mainPages/headline/index.vue b/pages/mainPages/headline/index.vue new file mode 100644 index 0000000..308df26 --- /dev/null +++ b/pages/mainPages/headline/index.vue @@ -0,0 +1,343 @@ + + + + + diff --git a/pages/mainPages/headline/message.vue b/pages/mainPages/headline/message.vue new file mode 100644 index 0000000..9c05452 --- /dev/null +++ b/pages/mainPages/headline/message.vue @@ -0,0 +1,131 @@ + + + + diff --git a/pages/subPages/businesscard/formcard/formcard.vue b/pages/subPages/businesscard/formcard/formcard.vue new file mode 100644 index 0000000..15c04fe --- /dev/null +++ b/pages/subPages/businesscard/formcard/formcard.vue @@ -0,0 +1,872 @@ + + + + diff --git a/pages/subPages/businesscard/mycard/mycard.vue b/pages/subPages/businesscard/mycard/mycard.vue new file mode 100644 index 0000000..30b37cf --- /dev/null +++ b/pages/subPages/businesscard/mycard/mycard.vue @@ -0,0 +1,115 @@ + + + + + diff --git a/pages/subPages/buyOrder/index.vue b/pages/subPages/buyOrder/index.vue new file mode 100644 index 0000000..51480cd --- /dev/null +++ b/pages/subPages/buyOrder/index.vue @@ -0,0 +1,311 @@ + + + + + diff --git a/pages/subPages/callpge/index.vue b/pages/subPages/callpge/index.vue new file mode 100644 index 0000000..2f8c107 --- /dev/null +++ b/pages/subPages/callpge/index.vue @@ -0,0 +1,443 @@ + + + + diff --git a/pages/subPages/city/city.vue b/pages/subPages/city/city.vue new file mode 100644 index 0000000..3516c27 --- /dev/null +++ b/pages/subPages/city/city.vue @@ -0,0 +1,249 @@ + + + + + diff --git a/pages/subPages/city/selectAddress.vue b/pages/subPages/city/selectAddress.vue new file mode 100644 index 0000000..a6c4b4c --- /dev/null +++ b/pages/subPages/city/selectAddress.vue @@ -0,0 +1,338 @@ + + + + + diff --git a/pages/subPages/commentList/commentList.vue b/pages/subPages/commentList/commentList.vue new file mode 100644 index 0000000..4366099 --- /dev/null +++ b/pages/subPages/commentList/commentList.vue @@ -0,0 +1,145 @@ + + + + + + diff --git a/pages/subPages/consumptionRecords/consumptionRecords.vue b/pages/subPages/consumptionRecords/consumptionRecords.vue new file mode 100644 index 0000000..1aa443f --- /dev/null +++ b/pages/subPages/consumptionRecords/consumptionRecords.vue @@ -0,0 +1,165 @@ + + + + + diff --git a/pages/subPages/consumptionRecords/details.vue b/pages/subPages/consumptionRecords/details.vue new file mode 100644 index 0000000..50b628e --- /dev/null +++ b/pages/subPages/consumptionRecords/details.vue @@ -0,0 +1,181 @@ + + + + + diff --git a/pages/subPages/coupon/coupon.vue b/pages/subPages/coupon/coupon.vue new file mode 100644 index 0000000..fb39c37 --- /dev/null +++ b/pages/subPages/coupon/coupon.vue @@ -0,0 +1,928 @@ + + + + + diff --git a/pages/subPages/coupon/couponDetails/couponDetails.vue b/pages/subPages/coupon/couponDetails/couponDetails.vue new file mode 100644 index 0000000..99ecc37 --- /dev/null +++ b/pages/subPages/coupon/couponDetails/couponDetails.vue @@ -0,0 +1,413 @@ + + + + + diff --git a/pages/subPages/createCommodity/index.less b/pages/subPages/createCommodity/index.less new file mode 100644 index 0000000..ff3fd66 --- /dev/null +++ b/pages/subPages/createCommodity/index.less @@ -0,0 +1,350 @@ + +.optionsMbPackage { + padding: 20upx; +} +.optionsMb { + margin: 0 auto 20upx auto; + width: 730upx; + border-radius: 10upx; + background: #ffffff; +} +.specScoll { + max-height: 800upx; +} +.addBranchMbPackage { + padding: 0 0 0 20upx; + height: 80upx; +} +.addBranchPackage { + padding: 0 20upx; + height: 80upx; + > text { + line-height: 80upx; + font-size: 26upx; + color: #ff4444; + } +} +.addBranchButton { +} +.specsMb { + margin: 0 0 20upx 0; +} +.textRight { + text-align: right; +} +.specsMbTitle { + height: 80upx; +} +.specImg { + width: 30upx; + height: 30upx; +} +.specsMbPackage { + padding: 0 20upx; + background: #ffffff; +} +.specsAddButton { + width: 750upx; + height: 80upx; + background: rgba(255, 255, 255, 1); + text-align: center; + > text { + line-height: 80upx; + font-size: 30upx; + color: #ff4444; + } +} +.mbView { + height: 600upx; +} +.addRuleButton { + width: 200upx; + height: 70upx; + text-align: center; + margin-top: 20upx; + background: rgba(255, 68, 68, 1); + border-radius: 10upx; + > text { + font-size: 24upx; + color: rgba(255, 255, 255, 1); + line-height: 70upx; + } +} +.ruleTitle { + width: 200upx; +} +.ruleMbPackage { + padding: 20upx; +} +.verMid { + vertical-align: middle; +} +.ruleInput { + font-size: 28upx; + color: rgba(51, 51, 51, 1); + width: 400upx; +} +.ruleMb { + margin-bottom: 10upx; + background: #f8f8f8; + border-radius: 10upx; +} +.disInline { + display: inline-block; +} +.colorRed { + color: #ff4444; +} +.rulePackage { + padding: 30upx; +} +.tipsPackage { + padding: 30upx; +} +.full { + height: 20upx; +} +.marT20Auto { + margin: 20upx auto 0 auto; +} +.submitButton { + width: 690upx; + height: 80upx; + background: rgba(255, 68, 68, 1); + border-radius: 40upx; + text-align: center; + > text { + line-height: 80upx; + font-size: 28upx; + color: rgba(255, 255, 255, 1); + } +} +.presettagsMb { + margin: 0 20upx 20upx 0; + display: inline-block; + height: 40upx; + padding: 0 10upx; + text-align: center; + border-radius: 25upx; + border: 1upx solid #666666; + > text { + line-height: 40upx; + font-size: 24upx; + color: #666666; + } +} +.presettagsCMb { + margin: 0 20upx 20upx 0; + display: inline-block; + height: 40upx; + padding: 0 10upx; + text-align: center; + border-radius: 25upx; + background: #ff4444; + border: 1upx solid rgba(0, 0, 0, 0); + > text { + line-height: 40upx; + font-size: 24upx; + color: #ffffff; + } +} +.presettagsView_body { + padding: 30upx; +} +.presettagsView_title { + padding: 30upx; +} +.closePresettags { + width: 40upx; + height: 40upx; + overflow: hidden; + > image { + width: 40upx; + height: 40upx; + } +} +.dis-flex { + display: flex; + justify-content: space-between; +} +.ruleView { + width: 750upx; + background: #ffffff; +} +.submitSpecs { + position: absolute; + bottom: 20upx; + left: 30upx; + width: 690upx; + height: 80upx; + text-align: center; + background: #ff4444; + border-radius: 40upx; + > text { + font-size: 26upx; + line-height: 80upx; + color: #ffffff; + } +} +.submitSpec{ + background-color: #FFFFFF; + height: 80upx; + line-height: 80upx; + color: #FF4444; + text-align: center; + position: fixed; + bottom: 15%; + width: 100%; +} +.specsView { + position: absolute; + left: 0; + right: 0; + top: 0; + z-index: 9999; + width: 750upx; + background-color: #f8f8f8; +} + +.presettagsView { + width: 750upx; + background: #ffffff; +} +.imgPreview { + overflow: hidden; + width: 157upx; + height: 157upx; + background: gray; + margin-right: 37upx; + margin-bottom: 10upx; + border-radius: 10upx; + > image { + width: 157upx; + height: 157upx; + } +} +.pickerPackage { + display: inline-block; +} +.userImgUpdata { + width: 157upx; + height: 157upx; + background: rgba(246, 246, 246, 1); + border: 1upx solid rgba(204, 204, 204, 1); + border-radius: 10upx; + text-align: center; + > image { + margin-top: 53upx; + width: 53upx; + height: 53upx; + } +} +.dataPicker1 { + width: 70upx; + height: 82upx; + display: inline-block; +} +.timePickerView { + vertical-align: middle; + display: inline-block; + margin-left: 49upx; + width: 350upx; + height: 80upx; + > span { + line-height: 80upx; + vertical-align: top; + margin: 0 10upx; + font-size: 24upx; + + color: rgba(51, 51, 51, 1); + } +} +.createCommodity { + font-size: 0; + background: #f6f6f6; + overflow-x: hidden !important; +} +.main { + background: #ffffff; +} +.mianPackage { + padding: 0; + margin: 0 30upx; +} +.inputView { + height: 80upx; +} +.uploadView { + > view { + display: inline-block; + } +} +.dis-flex { + display: flex; + justify-content: space-between; +} +.specInput { + height: 80upx; + font-size: 28upx; + color: rgba(51, 51, 51, 1); +} +.marL10 { + margin-left: 10upx; +} +.titleTetx { + font-size: 28upx; + line-height: 80upx; + color: rgba(153, 153, 153, 1); +} +.uploadTetx { + display: inline-block; + width: 220upx; + font-size: 28upx; + line-height: 80upx; + color: rgba(153, 153, 153, 1); +} +.verMid { + vertical-align: middle; +} +.rightImg { + width: 20upx; + height: 20upx; +} +.contentTetx { + text-align: right; + max-width: 500upx; + display: inline-block; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; + margin-right: 10upx; + font-size: 28upx; + line-height: 80upx; + color: #333333; +} +.timeTetx { + text-align: right; + max-width: 230upx; + display: inline-block; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; + margin-right: 10upx; + font-size: 28upx; + line-height: 80upx; + color: #333333; +} +.uploadButton { + margin: 20upx 0upx 20upx 20upx; +} +.marT20 { + margin-top: 20upx; +} +.inputMain { + text-align: right; + width: 400upx; + height: 80upx; + font-size: 28upx; + line-height: 80upx; + color: #333333; +} \ No newline at end of file diff --git a/pages/subPages/createCommodity/index.vue b/pages/subPages/createCommodity/index.vue new file mode 100644 index 0000000..5ff08d4 --- /dev/null +++ b/pages/subPages/createCommodity/index.vue @@ -0,0 +1,2161 @@ + + + + + diff --git a/pages/subPages/customer/customer.vue b/pages/subPages/customer/customer.vue new file mode 100644 index 0000000..b59260b --- /dev/null +++ b/pages/subPages/customer/customer.vue @@ -0,0 +1,166 @@ + + + + + diff --git a/pages/subPages/dealer/apply/apply.vue b/pages/subPages/dealer/apply/apply.vue new file mode 100644 index 0000000..1f2aaf4 --- /dev/null +++ b/pages/subPages/dealer/apply/apply.vue @@ -0,0 +1,567 @@ + + + + diff --git a/pages/subPages/dealer/client/client.vue b/pages/subPages/dealer/client/client.vue new file mode 100644 index 0000000..9f4fe90 --- /dev/null +++ b/pages/subPages/dealer/client/client.vue @@ -0,0 +1,371 @@ + + + + diff --git a/pages/subPages/dealer/contactway/contactway.vue b/pages/subPages/dealer/contactway/contactway.vue new file mode 100644 index 0000000..d3901c5 --- /dev/null +++ b/pages/subPages/dealer/contactway/contactway.vue @@ -0,0 +1,642 @@ + + + + diff --git a/pages/subPages/dealer/earnings/earnings.vue b/pages/subPages/dealer/earnings/earnings.vue new file mode 100644 index 0000000..c61f8d2 --- /dev/null +++ b/pages/subPages/dealer/earnings/earnings.vue @@ -0,0 +1,278 @@ + + + + diff --git a/pages/subPages/dealer/gener/gener.vue b/pages/subPages/dealer/gener/gener.vue new file mode 100644 index 0000000..4cdea19 --- /dev/null +++ b/pages/subPages/dealer/gener/gener.vue @@ -0,0 +1,383 @@ + + + + diff --git a/pages/subPages/dealer/index/index.vue b/pages/subPages/dealer/index/index.vue new file mode 100644 index 0000000..8b53be4 --- /dev/null +++ b/pages/subPages/dealer/index/index.vue @@ -0,0 +1,981 @@ + + + + diff --git a/pages/subPages/dealer/level/level.vue b/pages/subPages/dealer/level/level.vue new file mode 100644 index 0000000..6747eef --- /dev/null +++ b/pages/subPages/dealer/level/level.vue @@ -0,0 +1,404 @@ + + + + + diff --git a/pages/subPages/dealer/myStore/myStore.vue b/pages/subPages/dealer/myStore/myStore.vue new file mode 100644 index 0000000..5c5f78c --- /dev/null +++ b/pages/subPages/dealer/myStore/myStore.vue @@ -0,0 +1,346 @@ + + + + + diff --git a/pages/subPages/dealer/myStoreDetails/myStoreDetails.vue b/pages/subPages/dealer/myStoreDetails/myStoreDetails.vue new file mode 100644 index 0000000..80f6be0 --- /dev/null +++ b/pages/subPages/dealer/myStoreDetails/myStoreDetails.vue @@ -0,0 +1,492 @@ + + + + + diff --git a/pages/subPages/dealer/rank/rank.vue b/pages/subPages/dealer/rank/rank.vue new file mode 100644 index 0000000..49e1db2 --- /dev/null +++ b/pages/subPages/dealer/rank/rank.vue @@ -0,0 +1,257 @@ + + + + diff --git a/pages/subPages/dealer/richtext/setrich.vue b/pages/subPages/dealer/richtext/setrich.vue new file mode 100644 index 0000000..caf7470 --- /dev/null +++ b/pages/subPages/dealer/richtext/setrich.vue @@ -0,0 +1,65 @@ + + + + + diff --git a/pages/subPages/dealer/setshop/setshop.vue b/pages/subPages/dealer/setshop/setshop.vue new file mode 100644 index 0000000..50e0748 --- /dev/null +++ b/pages/subPages/dealer/setshop/setshop.vue @@ -0,0 +1,326 @@ + + + + diff --git a/pages/subPages/dealer/template/template.vue b/pages/subPages/dealer/template/template.vue new file mode 100644 index 0000000..c01189e --- /dev/null +++ b/pages/subPages/dealer/template/template.vue @@ -0,0 +1,33 @@ + + + + diff --git a/pages/subPages/dealer/withdraw/withdraw.vue b/pages/subPages/dealer/withdraw/withdraw.vue new file mode 100644 index 0000000..6a30e87 --- /dev/null +++ b/pages/subPages/dealer/withdraw/withdraw.vue @@ -0,0 +1,543 @@ + + + + + diff --git a/pages/subPages/dealer/withdraw/withdrawrecord.vue b/pages/subPages/dealer/withdraw/withdrawrecord.vue new file mode 100644 index 0000000..9a0665c --- /dev/null +++ b/pages/subPages/dealer/withdraw/withdrawrecord.vue @@ -0,0 +1,218 @@ + + + + diff --git a/pages/subPages/forgetPassword/forgetPassword.vue b/pages/subPages/forgetPassword/forgetPassword.vue new file mode 100644 index 0000000..395b66c --- /dev/null +++ b/pages/subPages/forgetPassword/forgetPassword.vue @@ -0,0 +1,378 @@ + + + + + diff --git a/pages/subPages/goods/index.css b/pages/subPages/goods/index.css new file mode 100644 index 0000000..87b0087 --- /dev/null +++ b/pages/subPages/goods/index.css @@ -0,0 +1,1219 @@ +.container { + background-color: #F7F7F7; +} + +.wfView {} + +.getTip { + width: 750upx; + height: 623upx; + background: rgba(255, 255, 255, 1); + border-radius: 20upx 20upx 0upx 0upx; +} + +.LeBeans{ + background: linear-gradient(to right,#F22C24,#FA6331); + padding: 20upx; + margin-bottom: 50upx; + border-radius: 15upx; + position: relative; +} + +.conversion{ + padding:8upx 15upx 20upx; + background-color: rgba(255,255,255,0.3); + position: absolute; + right: 0; + width: 105upx; + height: 25upx; + vertical-align: top; + top: 50%; + transform: translateY(-50%); + border-radius: 60upx 0upx 0upx 60upx; +} + +.popFull { + height: 100upx; + width: 750upx; +} + +.getTip_package { + padding: 30upx; +} + +.getTip_main { + margin-top: 55upx; + height: 443upx; +} + +.getTip_text { + font-size: 24upx; +} + +.getTip_title { + text-align: center; + font-size: 30upx; + color: rgba(51, 51, 51, 1); +} + +.wfViewMain { + width: 630upx; + background: rgba(255, 255, 255, 1); + border-radius: 10upx; +} + +.wfTitle { + width: 630upx; + height: 200upx; + +} + +.wfTitleImage { + width: 630upx; + height: 200upx; +} + +.wfBodyPackage { + padding: 20upx 30upx; +} + +.textarea{ + font-size: 28upx; +} + +.wfBodyText { + font-size: 26upx; + color: rgba(51, 51, 51, 1); +} + +.wfViewClose { + margin: 80upx auto 0 auto; + width: 48upx; + height: 48upx; +} + +.closeImg { + width: 48upx; + height: 48upx; +} + +/* 商品头部 */ +.goods-header { + position: relative; + z-index: 1; +} + +.goods-viewed { + position: absolute; + bottom: 5%; + right: 0; + font-size: 24upx; + padding: 6upx 12upx; + border-radius: 50upx 0 0 50upx; + background: rgba(0, 0, 0, .4); + color: #FFFFFF; + z-index: 5; +} + +.lxPack { + display: flex; + justify-content: space-between; + line-height: 44upx; +} + +.lx { + text-align: center; + width: 44upx; + height: 44upx; + background: rgba(255, 68, 68, 1); + border-radius: 50%; + overflow: hidden; +} + +.advfei{ + background: -webkit-linear-gradient(90deg, #ff4444 ,#FF8032 ); /* Safari 5.1 - 6.0 */ + background: -o-linear-gradient(90deg, #ff4444, #FF8032); /* Opera 11.1 - 12.0 */ + background: -moz-linear-gradient(90deg, #ff4444 , #FF8032); /* Firefox 3.6 - 15 */ + background: linear-gradient(90deg, #ff4444 , #FF8032); /* 标准的语法(必须放在最后) */ + position: absolute; + font-size: 28upx; + bottom: 150upx; + left: 20upx; + width: 90vw; + padding: 20upx 20upx; + /* background-color: #FFF0B2; */ + display: flex; + border-radius: 10upx; +} + +.lxImg { + width: 30upx; + height: 30upx; + margin-top: 8upx; +} + +.goods-swiper { + width: 100vw; + /* height: 50vh; */ + position: relative; + z-index: 1; +} + +.swiper-item { + height: 100vw; +} + +.goods-header .coupon-Image { + width: 100vw; + height: 100vw; + display: block; +} + +.goods-swiper .swiper-item image { + width: 100%; + height: 100%; + display: block; +} + +/* 弹幕购买提示 */ +.success-tips { + position: fixed; + bottom: 83%; + left: 30upx; + height: 54upx; + line-height: 54upx; + background: rgba(0, 0, 0, .5); + border-radius: 50px; + z-index: 50; + padding: 0 12upx 0 6upx; + opacity: 0; + transition: opacity .4s; +} + +.success-tips.show { + opacity: 1; +} + +/* */ +.success-tips .success-avatar { + width: 40upx; + height: 40upx; + display: block; + border-radius: 50%; +} + +.success-tips .success-goods { + max-width: 450upx; +} + +/* 商品详情 */ +.goods-content { + box-sizing: border-box; +} + +.goods-price-box { + padding-bottom: 12upx; +} + +.goods-content .goods-price .goods-price-now { + color: rgba(254, 80, 79, 1); +} + +.goods-content .goods-price .goods-price-now image { + width: 56upx; + height: 56upx; +} + +.goods-content .goods-price .goods-price-now .credit { + color: rgba(254, 80, 79, 1); +} + +.money-label { + display: inline-block; + margin-right: 6upx; +} + +.goods-content .goods-price .goods-price-old { + font-size: 24upx; + color: rgba(153, 153, 153, 1); + line-height: 52upx; + margin-left: 16upx; + text-decoration: line-through; +} + +.goods-content .goods-browse { + font-size: 24upx; + color: rgba(153, 153, 153, 1); + line-height: 60upx; +} + +.goods-title-mian { + letter-spacing: 2upx; + line-height: 1.3em; +} + +.activity-item image { + width: 26upx; + height: 26upx; + display: block; + margin-right: 12upx; +} + +/* 会员卡 */ +.member-box { + background: linear-gradient(0deg, rgba(235, 194, 135, 1) 0%, rgba(237, 214, 170, 1) 100%); + border-radius: 10upx; +} + +.member-title { + width: 360upx; +} + +.member-left image { + width: 60upx; + height: 60upx; + display: block; +} + +.member-fontColor { + color: #8C5200; +} + +.member-fontColor-cut { + width: 2upx; + height: 26upx; + background: #8C5200; + opacity: .5; + margin: 0 20upx; +} + +.member-right { + flex: 1; + background: linear-gradient(105deg, transparent 10.5%, #333333 12.5%, #333333 50.5%, #333333 50.5%); + color: #EED196; + height: 60upx; + line-height: 60upx; + padding-left: 20upx; + border-radius: 10upx 10upx 10upx 0; +} + +.member-right text { + font-size: 24upx; + margin-left: 10upx; +} + +/* 邀请 */ +.already-box-padding { + padding: 30upx 30upx 0; +} + +.goods-already-box { + box-shadow: 0 2upx 12upx 0 rgba(221, 221, 221, 0.34); + border-radius: 10upx; +} + +.goods-already-box .goods-already { + padding: 0 0 30upx 0; +} + +.goods-already-box .goods-already .goods-already-num { + color: #333333; + line-height: 1.2em; +} + +.goods-already-box .goods-already .goods-already-user { + margin-top: 15upx; + height: 68upx; +} + +.goods-already-box .goods-already .goods-already-user .user-avatar { + width: 55upx; + height: 55upx; + border-radius: 55upx; + display: inline-block; + margin-right: -12upx; + position: relative; + vertical-align: top; +} + +.goods-already-box .goods-already .goods-already-user .user-avatar.user-more { + background: #F2F2F2; + color: #BBBBBB; + text-align: center; + line-height: 50upx; + z-index: 1; +} + +.goods-already-box .goods-already .goods-invite { + color: #333333; + width: 230upx; + height: 60upx; + line-height: 60upx; + font-size: 22upx; + text-align: center; + border-radius: 50upx; + position: relative; + margin-bottom: 1%; + z-index: 1; + background: linear-gradient(0deg, rgba(245, 182, 32, 1) 0%, rgba(246, 210, 70, 1) 100%); +} + +.goods-already-box .goods-already .goods-invite button { + position: absolute; + width: 100%; + height: 100%; + opacity: 0; +} + +.goods-already-box .goods-already .goods-invite-reward { + position: absolute; + right: 3%; + top: -15%; + z-index: 2; + height: 50upx; + color: #FFFFFF; + line-height: 50upx; + background: linear-gradient(90deg, rgba(254, 80, 79, 1), rgba(254, 133, 79, 1)); + box-shadow: 0 2upx 10upx 0 rgba(254, 80, 79, 0.54); + border-radius: 8upx; + text-align: center; + font-size: 20upx; + padding: 0 20upx; +} + +.goods-already-box .goods-already .goods-invite-reward::after { + content: " "; + position: absolute; + left: 50%; + bottom: -28upx; + transform: translateX(-50%); + border-width: 15upx; + border-style: solid; + border-color: #FE6C4F transparent transparent transparent; +} + +/* 标题花边样式 */ +.lace-style .lace-1 { + position: absolute; + /* left: 35%; */ + top: 14upx; + width: 14upx; + height: 14upx; + background: rgba(255, 68, 68, 1); + border-radius: 50%; +} + +.lace-style .lace-2 { + position: absolute; + /* left: 34%; */ + top: 18upx; + width: 14upx; + height: 14upx; + background: rgba(255, 68, 68, 1); + opacity: 0.2; + border-radius: 50%; +} + +.containar-title-left .lace-1 { + left: 35%; +} + +.containar-title-right .lace-1 { + right: 35%; +} + +.containar-title-left .lace-2 { + left: -8upx; +} + +.containar-title-right .lace-2 { + right: -8upx; +} + +/* 搭配商品样式 */ +.match-goods { + background: rgba(255, 255, 255, 1); + box-shadow: 0 4upx 12upx 0 rgba(221, 221, 221, 0.34); + border-radius: 10upx; +} + +.match-goods-info .goods-info-left { + width: 160upx; + height: 160upx; + background-size: 160upx 160upx; + background-repeat: no-repeat; + background-image: url('https://ss1.bdstatic.com/70cFvXSh_Q1YnxGkpoWK1HF6hhy/it/u=1726110657,2456852062&fm=26&gp=0.jpg'); + flex-shrink: 0; +} + +.match-goods-info .goods-info-right .goods-info-right-title { + height: 2, 6em; + line-height: 1, 3em; +} + +.match-goods-price .match-buy-btn { + background-color: #ff4444; + width: 146upx; + height: 54upx; + line-height: 54upx; + background: rgba(255, 68, 68, 1); + border-radius: 30upx; +} + +/* 使用流程 */ +.use-flow-item { + width: 24%; +} + +.use-flow-item .use-order { + width: 34upx; + height: 34upx; + line-height: 34upx; + background: rgba(255, 68, 68, 1); + box-shadow: 0 2upx 6upx 0 rgba(205, 2, 2, 0.35); + border-radius: 50%; + margin: 0 auto 30upx; +} + +.use-cut { + position: absolute; + top: 11%; + width: 194upx; + border-top: 1px solid #EEEEEE; + transform-origin: 0 0; + transform: scaleY(0.5); + z-index: 2; +} + +.use-cut-left { + left: 19%; +} + +.use-cut-right { + right: 19%; +} + +.store-addressInfo-icon { + width: 44upx; + height: 44upx; + line-height: 44upx; + background: rgba(255, 68, 68, 1); + border-radius: 50%; + font-size: 24upx; + flex-shrink: 0; +} + +/* 详情tabBar */ +/* 商品详情 */ +.goods-detail-nav {} + +.goods-detail-nav .goods-detail-nav-item { + color: #999999; + font-size: 30upx; + text-align: center; + height: 86upx; + line-height: 86upx; + position: relative; +} + +.goods-detail-nav .goods-detail-nav-item.active { + color: #333333; + font-weight: bold; +} + +.select-nav-items { + position: absolute; + left: 50%; + top: 30upx; + width: 56upx; + height: 10upx; + transform: translateX(-50%); +} +/* #ifndef H5 */ + /* 仅在app平台显示 */ + .select-nav-items { + position: absolute; + left: 50%; + top: 75upx; + width: 56upx; + height: 10upx; + transform: translateX(-50%); + } +/* #endif */ + +/* #ifdef H5 */ + /* 仅在app平台显示 */ + .select-nav-items { + position: absolute; + left: 50%; + top: 30upx; + width: 56upx; + height: 10upx; + transform: translateX(-50%); + } +/* #endif */ +.select-nav-items image { + width: 100%; + height: 100%; +} + +/* 商品评价 */ +.evaluation-item { + padding: 30upx 0; +} + +.evaluation-item:first-child { + border-top: 0; +} + +.evaluation-all { + width: 270upx; + height: 70upx; + border: 1px solid rgba(238, 238, 238, 1); + border-radius: 38upx; + margin: 30upx auto 0; + padding-left: 20upx; +} + +.evaluation-all-iconfont { + color: #333333; + font-size: 36upx; +} + +.evaluation-user image { + width: 60upx; + height: 60upx; + display: block; + border-radius: 50%; + margin-right: 10upx; +} + +.evaluation-grade .iconfont { + width: 36upx; + height: 36upx; + line-height: 36upx; + font-size: 28upx; + display: block; + color: #CCCCCC; +} + +.evaluation-grade .iconfont.select { + color: #FF4444 +} + +.evaluation-bd { + margin-top: 20upx; +} + +.evaluation-imgs { + margin-top: 12upx; +} + +.evaluation-imgs image { + width: 220upx; + margin: 0 10upx 20upx 0; + height: 220upx; + border-radius: 6upx; +} + +.reply-content-item .reply-content-itemfont { + vertical-align: middle; + margin-right: 14upx; +} + +/* 底部菜单 */ +.goods-footer { + + background: #FFFFFF; + text-align: center; + height: 100upx; + position: fixed; + left: 0; + right: 0; + bottom: 0; +} + +.goods-footer-crted { + text-align: center; + height: 100upx; + line-height: 80upx; + position: fixed; + left: 0%; + right: 0; + bottom: 0; + z-index: 30; +} + +.goods-footer-item { + flex: 1; + box-sizing: border-box; + height: 100upx; + align-items: center; + position: relative; +} + +.goods-footer-item>button { + position: absolute; + top: 0; + right: 0; + left: 0; + bottom: 0; + opacity: 0; + z-index: 8; +} + +.goods-footer-item image { + width: 30upx; + height: 30upx; + display: inline-block; + margin: 0 20upx; +} + +.goods-footer-item .goods-footer-item-text { + font-size: 24upx; + line-height: 1.5em; + color: #333333; + text-align: center; +} + +.goods-footer .goods-footer-btn { + width: 352upx; + height: 72upx; + line-height: 72upx; + text-align: center; + border-radius: 50upx; + color: #FFFFFF; + background: #FE504F; + font-size: 28upx; + font-weight: bold; + margin: 17upx 30upx 0 0; + overflow: hidden; +} + +.goods-footer.footer-padding { + padding-bottom: 20px +} + +.goods-footer .footer-btn { + width: 100%; + text-align: center; +} + +.goods-footer .goods-spread-btn { + background: #FFD940; +} + +.go-buy { + margin-right: 30upx; + height: 80upx; + border-radius: 40upx; +} + +.alrea-remind-go-buy { + background-color: rgb(172, 177, 172); +} + +.remind-go-buy { + background-color: #2AC418; +} + +.star-go-buy { + background-color: #FF4444; +} + +.end-go-buy { + background-color: #C0C0C0; +} + +.go-buy-crted { + background-color: #FF4444; + margin: 0 30upx; + height: 80upx; + border-radius: 40upx; +} + +.unqualified-gobuy { + background-color: #C0C0C0; + margin-right: 30upx; + height: 80upx; + border-radius: 40upx; + color: #FFFFFF; +} + +.out_buy-left { + width: 100%; + height: 100%; + background-color: #FF4444; + border-radius: 40upx 0 0 40upx; +} + +.out_buy-leftTop { + margin-top: 6upx; +} + +.out_buy-right { + width: 100%; + height: 100%; + /* border-radius: 0 40upx 40upx 0; */ +} + +/* 活动未开始或者已结束状态 */ +.havebtn { + background-color: #EEEEEE; + line-height: 80upx; +} + +/* 活动开始状态 */ +.starbtn { + background-color: #FFD200; +} + +/* 拼团按钮 */ +.group-go-buy { + width: 50%; + margin-right: 30upx; + height: 80upx; + border-radius: 40upx; +} + +/* 砍价 */ + +.bargainbtn { + line-height: 70upx; +} + +.bargain-buy-box { + background: rgba(255, 248, 245, 1); + border-radius: 10upx; +} + +.bargain-buy-top-title { + color: #FF4444; +} + +.icon-right-buybarainIcon { + font-size: 24upx; +} + +.bargain-countdown { + height: 110upx; + background-size: 100% 110upx; + background-repeat: no-repeat; + padding: 0 30upx 0; +} + +.bargain-label-box { + border-radius: 4upx; + padding: 4upx 8upx; +} + +.bargain-label-box>image { + width: 34upx; + height: 34upx; + display: block; +} + +.bargain-label-box>view { + color: #F02E24; +} + +.bargain-label-icon-rush { + color: #333333 !important; + left: -6%; + top: 20%; +} + +.bargain-label-icon-bargin { + color: #FFFFFF !important; + left: -12%; + top: 20%; +} + +.bargain-label-icon { + position: absolute; + /* transform: translateY(-50%); */ + font-size: 24upx; + transform: rotate(90deg); +} + +.bargain-countdown-oldPrice { + transform: scale(.95, .95); + text-decoration: line-through; +} + +.bargain-countdown-oldPrice text { + margin-left: 10upx; +} + +.countdownTime-style text { + height: 38upx; + line-height: 38upx; + border-radius: 4upx; + padding: 4upx 6upx; +} + +.countdownTime-style-color1 text { + background: #F02E24; + color: #FFFFFF; +} + +.countdownTime-style-color2 text { + background: rgba(255, 255, 255, 1); + color: #F02E24; +} + +/* 抢购倒计时 */ +.rush_logo { + width: 70upx; + height: 70upx; + display: block; +} + +.rush-label-box { + background-color: #333333; + color: #EED196; + border-radius: 4upx; + padding: 4upx 8upx; +} + +/* 拼团倒计时 */ +.group-countdown { + height: 110upx; + background-size: 100% 110upx; + background-repeat: no-repeat; + padding: 0 30upx 0; +} + +.group-countdown-oldPrice { + transform: scale(.95, .95); +} + +.group-countdown-num { + height: 34upx; + border: 1px solid rgba(255, 255, 255, 1); + border-radius: 4upx; +} + +.group-countdown-numGroup { + padding: 0 0 0 10upx; +} + +.group-countdown-num-logo { + padding: 0 8upx; + width: 28upx; + height: 100%; + line-height: 34upx; +} + +.group-countdown-num-logo>image { + width: 30upx; + height: 26upx; +} + +.group-countdown-title { + transform: scale(.9, .9); +} + +.groupcountdownTime-style text { + height: 38upx; + line-height: 38upx; + background: rgba(255, 255, 255, 1); + border-radius: 4upx; + color: #F02E24; + padding: 2upx 6upx; +} + +.group-countdown-nowPrice>text { + vertical-align: bottom; +} + +/* 拼团列表 */ +.group-list-content .group-list-title>text { + color: #FF4444; +} + +.group-list-moreicon { + font-size: 24upx; + color: #999999; +} + +.group-detail .group-item-logo { + width: 60upx; + height: 60upx; + background-repeat: no-repeat; + background-size: 60upx 60upx; + border-radius: 50%; +} + +.clustering-num { + color: #FF4444; +} + +.group-list-item-btn { + width: 126upx; + height: 52upx; + line-height: 52upx; + border-radius: 26upx; +} + +.group-list-item-btn-isEndTimefalse { + background: rgba(255, 68, 68, 1); +} + +.group-list-item-btn-isEndTimeTrue { + background: #CCCCCC +} + +/* 社群 */ +.goods-community { + padding-top: 20upx; +} + +.community-user .community-user-img { + width: 68upx; + height: 68upx; + display: block; + margin-right: 20upx; + border-radius: 50%; +} + +.community-add { + /* width: 110upx; */ + padding: 0 20upx; + height: 54upx; + line-height: 54upx; + border-radius: 10upx; + font-size: 24upx; +} + +.community-add-bgcolor { + background-color: #2AC418; +} + +.community-detail { + border-radius: 20upx; + overflow: hidden; +} + +.community-detail .community-header { + width: 70vw; + height: 120upx; + line-height: 120upx; + overflow: hidden !important; +} + +.community-detail .community-header .community-header-text { + z-index: 2; +} + +.community-detail .community-header::after { + content: " "; + position: absolute; + top: -160upx; + left: -25%; + width: 150%; + height: 280upx; + border-radius: 60%; + background: linear-gradient(0deg, rgba(228, 63, 53, 1), rgba(253, 92, 79, 1)); + z-index: 1; +} + +.community-detail .community-body { + padding: 50upx; +} + +.community-detail .community-phone { + height: 80upx; + line-height: 80upx; + margin: 0 30upx 30upx; + padding: 0 20upx 0 8upx; + border-radius: 10upx; + background: #F6F6F6; +} + +.community-detail .community-number .community-number-icon { + width: 60upx; + height: 60upx; + display: block; + /* margin-right: 15upx; */ +} + +.community-detail .community-bdial { + width: 96upx; + height: 52upx; + line-height: 52upx; + background-color: #FF4444; + border-radius: 10upx; + color: #FFFFFF; +} + +.community-detail .community-reply { + width: 200upx; + height: 70upx; + line-height: 70upx; + background: linear-gradient(0deg, rgba(255, 115, 115, 1) 0%, rgba(255, 68, 68, 1) 100%); + border-radius: 35upx; + margin: 0 auto 30upx; +} + +.community-detail .community-qrcodeimg { + width: 366upx; + height: 366upx; + display: block; + margin: 0 auto 30upx; +} + +.bargain-countdown-right-loading { + width: 100upx; + height: 80upx; +} + +.partLoaing { + position: absolute; + right: 20%; + top: 0; +} + +.store-addressInfo-onelist { + width: 87%; +} + +.masking { + position: fixed; + /* width: 100%; + height: 100%; */ + top: 0; + left: 0; + right: 0; + bottom: 0; + z-index: 100; + background: rgba(0, 0, 0, .5); + /* display: none */ +} + +.to-share { + position: fixed !important; + z-index: 1009; + right: 10upx; + top: 0; + overflow: auto; + width: 500upx; + height: 380upx; +} + +.limit-rushBox { + box-shadow: 0 2rpx 12rpx 0 rgba(221, 221, 221, 0.34); + border-radius: 10rpx; +} + +.progress-box { + width: 280upx; + height: 24upx; + border-radius: 12upx; + background-color: #FEB2B2; +} + +.progress-bar { + background-image: linear-gradient(60deg, #FF4444 0, #FF4444 9%, #ff6c6c 0, #ff6c6c 12%, #FF4444 0, #FF4444 18%, #ff6c6c 0, #ff6c6c 21%, #FF4444 0, #FF4444 27%, #ff6c6c 0, #ff6c6c 30%, #FF4444 0, #FF4444 37%, #ff6c6c 0, #ff6c6c 40%, #FF4444 0, #FF4444 47%, #ff6c6c 0, #ff6c6c 50%, #FF4444 0, #FF4444 57%, #ff6c6c 0, #ff6c6c 60%, #FF4444 0, #FF4444 67%, #ff6c6c 0, #ff6c6c 70%, #FF4444 0, #FF4444 77%, #ff6c6c 0, #ff6c6c 80%, #FF4444 0, #FF4444 87%, #ff6c6c 0, #ff6c6c 90%, #FF4444 0, #FF4444 100%); + position: absolute; + left: 0; + right: 0; + top: 0; + height: 100%; + border-radius: 12upx; + z-index: 2; + max-width: 100%; +} + +.switchShow{ + position: absolute; + bottom: 80upx; + width: 220upx; + left: 50%; + z-index: 99; + transform: translateX(-50%); +} +.switchImg{ + width: 80upx; + height: 40upx; + color: #333333; + border: 1upx solid #FFFFFF; + border-radius: 60upx; + line-height: 40upx; + font-size: 24upx; + background-color: rgba(255,255,255,0.3); + text-align: center; +} +.switchVideo{ + width: 80upx; + height: 40upx; + color: #FFFFFF; + border: 1upx solid #FF4444; + border-radius: 60upx; + line-height: 40upx; + font-size: 24upx; + background-color: #FF4444; + text-align: center; +} +.switchImg-icon{ + font-size: 24upx; +} + +.default-progress-bar { + position: absolute; + width: 280upx; + height: 24upx; + left: 0; + top: 50%; + transform: translateY(-50%); + z-index: 3; +} + +.default-progress-bar .shrink { + transform: scale(0.85); +} + +.audio-main { + position: fixed; + right: 50upx; + top: 10%; + z-index: 10; +} + +.audio-bg { + position: relative; +} + +.audio-bg .audio-gif { + width: 100upx; + height: 100upx; + background-size: 100upx 100upx; + background-repeat: no-repeat; +} + +.audio-bg .audio-gif .audio-png { + position: absolute; + background-size: 80upx 80upx; + animation: rotate2d 1.2s linear infinite; + z-index: -1; + width: 80upx; + height: 80upx; +} + +.audio-bg.stop-audio .audio-gif { + background: none !important; +} + +.audio-bg.stop-audio .audio-png { + animation: none; +} + +@keyframes rotate2d { + from { + transform: rotate(0) + } + + to { + transform: rotate(360deg) + } +} diff --git a/pages/subPages/goods/index.vue b/pages/subPages/goods/index.vue new file mode 100644 index 0000000..0163c6e --- /dev/null +++ b/pages/subPages/goods/index.vue @@ -0,0 +1,2493 @@ + + + + diff --git a/pages/subPages/merchant/set/set.vue b/pages/subPages/merchant/set/set.vue new file mode 100644 index 0000000..a9ee288 --- /dev/null +++ b/pages/subPages/merchant/set/set.vue @@ -0,0 +1,1860 @@ + + + + + diff --git a/pages/subPages/merchant/storePcLogin/storePcLogin.vue b/pages/subPages/merchant/storePcLogin/storePcLogin.vue new file mode 100644 index 0000000..6b199f3 --- /dev/null +++ b/pages/subPages/merchant/storePcLogin/storePcLogin.vue @@ -0,0 +1,93 @@ + + + + + diff --git a/pages/subPages/mineCollection/mineCollection.vue b/pages/subPages/mineCollection/mineCollection.vue new file mode 100644 index 0000000..6a44d1b --- /dev/null +++ b/pages/subPages/mineCollection/mineCollection.vue @@ -0,0 +1,549 @@ + + + + + diff --git a/pages/subPages/myPost/myPost.vue b/pages/subPages/myPost/myPost.vue new file mode 100644 index 0000000..5db449c --- /dev/null +++ b/pages/subPages/myPost/myPost.vue @@ -0,0 +1,305 @@ + + + + + diff --git a/pages/subPages/orderList/afterSale/afterSale.vue b/pages/subPages/orderList/afterSale/afterSale.vue new file mode 100644 index 0000000..fa11160 --- /dev/null +++ b/pages/subPages/orderList/afterSale/afterSale.vue @@ -0,0 +1,943 @@ + + + + + diff --git a/pages/subPages/orderList/orderDetails/orderDetails.vue b/pages/subPages/orderList/orderDetails/orderDetails.vue new file mode 100644 index 0000000..e35b4f0 --- /dev/null +++ b/pages/subPages/orderList/orderDetails/orderDetails.vue @@ -0,0 +1,1611 @@ + + + + + diff --git a/pages/subPages/orderList/orderList.vue b/pages/subPages/orderList/orderList.vue new file mode 100644 index 0000000..aa8f65d --- /dev/null +++ b/pages/subPages/orderList/orderList.vue @@ -0,0 +1,890 @@ + + + + + diff --git a/pages/subPages/orderList/orderTakeout/orderTakeout.vue b/pages/subPages/orderList/orderTakeout/orderTakeout.vue new file mode 100644 index 0000000..a5a3f32 --- /dev/null +++ b/pages/subPages/orderList/orderTakeout/orderTakeout.vue @@ -0,0 +1,381 @@ + + + + + + diff --git a/pages/subPages/paySuccess/paySuccess.vue b/pages/subPages/paySuccess/paySuccess.vue new file mode 100644 index 0000000..77fa83b --- /dev/null +++ b/pages/subPages/paySuccess/paySuccess.vue @@ -0,0 +1,822 @@ + + + + + diff --git a/pages/subPages/postDetails/postDetails.less b/pages/subPages/postDetails/postDetails.less new file mode 100644 index 0000000..3e62558 --- /dev/null +++ b/pages/subPages/postDetails/postDetails.less @@ -0,0 +1,1246 @@ +/* css */ +.replyViewPackage { + padding: 30upx; +} +.full { + width: 750upx; + height: 98upx; +} +.marT10{ + margin-top: 10upx; +} +.marT18{ + margin-top: 18upx; +} +.qbBottomNavLeft { + display: flex !important; + justify-content: space-around !important; + vertical-align: top; + height: 98upx; + width: 100%; + > view { + vertical-align: middle; + display: inline-block; + text-align: center; + > view { + width: 50upx; + margin: auto; + > image { + width: 40upx; + height: 40upx; + } + } + > span { + font-size: 20upx; + + font-weight: bold; + color: rgba(51, 51, 51, 1); + } + } +} +.qbBottomNavCenter { + display: inline-block; + vertical-align: top; + width: 180upx; + height: 60upx; + background: rgba(23, 209, 23, 1); + border-radius: 30upx; + text-align: center; + > view { + vertical-align: middle; + display: inline-block; + margin: 10upx auto 0 auto; + width: 40upx; + > image { + width: 40upx; + height: 40upx; + } + } + > span { + line-height: 60upx; + vertical-align: middle; + font-size:24upx !important; + color:rgba(255,255,255,1) !important; + } +} +.qbBottomNavRight { + vertical-align: top; + width: 180upx; + height: 60upx; + background: rgba(255, 68, 68, 1); + border-radius: 30upx; + text-align: center; + > view { + vertical-align: middle; + display: inline-block; + margin: 10upx auto 0 auto; + width: 40upx; + > image { + width: 40upx; + height: 40upx; + } + } + > span { + line-height: 60upx; + vertical-align: middle; + font-size:24upx !important; + color:rgba(255,255,255,1) !important; + } +} +.qbBottomNav { + left: 0; + width: 750upx; + height: 98upx; + background: #ffffff; + position: fixed; + z-index: 99; + bottom: 0; + > view { + display: inline-block; + } +} + +.audit{ + width: 92%; + padding: 20upx 30upx; + background-color: #ffffff; + position: fixed; + bottom: 0; + left: 0; + z-index: 99; +} + +.auditNotPass{ + width: 335upx; + height: 60upx; + background-color: #ff4444; + border-radius: 60upx; + line-height: 60upx; + text-align: center; + color: #ffffff; + font-size: 24upx; + font-weight: 500; + float: left; +} + +.auditPass{ + width: 335upx; + height: 60upx; + background-color: #17D117; + border-radius: 60upx; + line-height: 60upx; + text-align: center; + color: #ffffff; + font-size: 24upx; + font-weight: 500; + float: right; +} + +.refuseCause{ + width: 608upx; + height: 588upx; + background-color: #ffffff; + border-radius: 20upx; + padding: 30upx 40upx 50upx 40upx; + box-sizing: border-box; +} + +.refuseTitle{ + padding-top: 20upx; + padding-bottom: 50upx; + text-align: center; + font-size: 30upx; + font-weight: 500; + position: relative; +} + +.iconstyle{ + position: absolute; + right: 0; + top: 0; + font-size: 40upx; + color: #959595; +} + +.refuseText{ + width: 528upx; + height: 280upx; + padding: 30upx; + box-sizing: border-box; + background-color: #f8f8f8; + font-size: 28upx; +} + +.confirmRefuse{ + width: 528upx; + height: 80upx; + line-height: 80upx; + background-color: #ff4444; + text-align: center; + font-size: 28upx; + border-radius: 60upx; + margin-top: 40upx; + color: #ffffff; +} + +.pdShopMbDiscountLeft { + > view { + margin-top: 20upx; + > view { + vertical-align: middle; + width: 24upx; + height: 24upx; + border-radius: 2upx; + display: inline-block; + text-align: center; + > span { + line-height: 24upx; + font-size: 20upx; + color: rgba(255, 255, 255, 1); + } + } + > span { + vertical-align: middle; + margin-left: 10upx; + text-overflow: ellipsis; + overflow: hidden; + white-space: nowrap; + width: 305upx; + font-size: 24upx; + + color: rgba(102, 102, 102, 1); + } + } +} +.pdShopMbDiscount { + display: flex; + justify-content: space-between; + > view { + display: inline-block; + vertical-align: top; + } +} +.pdShopMbType { + > view { + margin-top: 10upx; + > span { + font-size: 24upx; + + color: rgba(153, 153, 153, 1); + } + } +} +.pdShopMbPf { + margin-top: 10upx; + display: flex; + justify-content: space-between; + > view { + vertical-align: middle; + display: inline-block; + > image { + vertical-align: middle; + margin-right: 10upx; + width: 25upx; + height: 25upx; + } + > span { + vertical-align: middle; + font-size: 24upx; + color: rgba(153, 153, 153, 1); + } + } + > span { + vertical-align: middle; + font-size: 24upx; + color: rgba(153, 153, 153, 1); + } +} +.pdShopMbRight { + width: 510upx; + padding-left: 10upx; +} +.pdShopMbName { + display: flex; + justify-content: space-between; + > span { + font-size: 30upx; + + font-weight: bold; + color: rgba(0, 0, 0, 1); + } + > view { + display: inline-block; + > image { + height: 0; + width: 28upx; + height: 28upx; + } + } +} +.pdShopMbLeft { + width: 159upx; + height: 159upx; + border-radius: 10upx; + overflow: hidden; + > image { + width: 159upx; + height: 159upx; + } +} +.pdShopMb { + border-bottom: 1upx solid rgba(238, 238, 238, 1); + padding-bottom: 30upx; + margin: 40upx 0 0 0; + > view { + display: inline-block; + vertical-align: top; + } +} +.pdShopTitle { + display: flex; + justify-content: space-between; + > span:nth-child(1) { + vertical-align: middle; + font-size: 32upx; + + font-weight: bold; + color: rgba(51, 51, 51, 1); + } + > span:nth-child(2) { + line-height: 40upx; + vertical-align: middle; + font-size: 24upx; + + color: rgba(153, 153, 153, 1); + } +} +.pdShopPackage { + padding: 30upx; +} +.pdShop { + margin: 20upx 0 0 0; + width: 750upx; + background: rgba(255, 255, 255, 1); +} +.moreComment { + margin: 20upx 0 0 0; + text-align: center; + > span { + font-size: 28upx; + + color: rgba(153, 153, 153, 1); + vertical-align: middle; + } + > image { + height: 30upx; + margin-left: 10upx; + vertical-align: middle; + width: 30upx; + } +} +.qbReplyMb { + margin-top: 20upx; + > view { + margin-top: 20upx; + } +} +.replyName { + font-size: 24upx; + + color: rgba(66, 128, 197, 1); +} +.mh { + font-size: 24upx; + + color: rgba(66, 128, 197, 1); +} +.name { + margin-left: 10upx; + font-size: 24upx; + + color: rgba(66, 128, 197, 1); +} +.hf { + font-size: 24upx; + + color: #333333; +} +.text { + margin-left: 20upx; + font-size: 24upx; + + color: #999999; +} +.pdCommentMbReplyPackage { + padding: 30upx; + > view { + margin: 20upx 0 0 0; + } + > view:nth-child(1) { + margin: 0; + } +} +.pdCommentMbReply { + margin: 20upx 0; + width: 626upx; + background: rgba(248, 248, 248, 1); + border-radius: 4upx; +} +.pdCommentMbMain { + margin: 15upx 0 0 0; + > view:nth-child(1) { + > span { + font-size: 28upx; + color: rgba(51, 51, 51, 1); + } + } + > view:nth-child(2) { + margin-top: 20upx; + > span { + font-size: 24upx; + color: rgba(51, 51, 51, 1); + } + } + > view:nth-child(1) { + > text { + font-size: 28upx; + color: rgba(51, 51, 51, 1); + } + } + > view:nth-child(2) { + margin-top: 20upx; + > text { + font-size: 24upx; + color: rgba(51, 51, 51, 1); + } + } +} +.pdCommentMbRightPackage { + padding-left: 15upx; +} +.pdCommentMbRight { + width: 626upx; +} +.pdCommentMbRightTitle { + display: flex; + justify-content: space-between; + > span { + line-height: 48upx; + vertical-align: middle; + font-size: 28upx; + + font-weight: bold; + color: rgba(51, 51, 51, 1); + } + > view { + display: inline-block; + vertical-align: middle; + width: 112upx; + height: 50upx; + background: rgba(248, 248, 248, 1); + border-radius: 4upx; + text-align: center; + line-height: 50upx; + > image { + vertical-align: middle; + width: 30upx; + height: 30upx; + } + > span { + margin-left: 10upx; + line-height: 50upx; + vertical-align: middle; + font-size: 24upx; + + color: rgba(51, 51, 51, 1); + } + } +} +.pdCommentMbLeft { + width: 48upx; + height: 48upx; + overflow: hidden; + border-radius: 50%; + > image { + width: 48upx; + height: 48upx; + } +} +.pdCommentMb { + margin: 40upx 0 0 0; + > view { + display: inline-block; + vertical-align: top; + } +} +.pdCommentTitle { + display: flex; + justify-content: space-between; + > span:nth-child(1) { + vertical-align: middle; + font-size: 32upx; + font-weight: bold; + color: rgba(51, 51, 51, 1); + } + > span:nth-child(2) { + vertical-align: middle; + font-size: 28upx; + color: rgba(66, 128, 197, 1); + } +} +.pdComment { + margin: 20upx 0 0 0; + width: 750upx; + background: rgba(255, 255, 255, 1); +} +.pdCommentPackage { + padding: 30upx; +} +.pdHbFoot { + margin: 30upx 0 0 0; + text-align: center; + > span { + font-size: 24upx; + + color: rgba(255, 255, 255, 1); + } +} +.pdHbMbRight { + > span { + line-height: 73upx; + font-size: 28upx; + + color: rgba(209, 56, 59, 1); + } +} +.pdHbMbLeftInfo { + margin-left: 15upx; + > view:nth-child(1) { + > span { + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; + display: inline-block; + width: 209upx; + font-size: 28upx; + + color: rgba(51, 51, 51, 1); + vertical-align: middle; + } + > view { + margin-left: 10upx; + display: inline-block; + vertical-align: middle; + width: 110upx; + height: 34upx; + background: rgba(255, 196, 31, 1); + border-radius: 4upx; + text-align: center; + > span { + line-height: 34upx; + font-size: 20upx; + + color: rgba(255, 255, 255, 1); + } + } + } + > view:nth-child(2) { + > span { + font-size: 28upx; + + color: rgba(51, 51, 51, 1); + } + } +} +.pdHbMbLeftImg { + width: 74upx; + height: 74upx; + border-radius: 50%; + background-size: 74upx 74upx; + background-repeat: no-repeat; +} +.pdHbMbLeft { + > view { + display: inline-block; + vertical-align: middle; + } +} +.pdHbMb { + margin-top: 40upx; + display: flex; + justify-content: space-between; + > view { + display: inline-block; + vertical-align: middle; + } +} +.pdHbMb1 { + margin-bottom: 15upx; + display: flex; + justify-content: space-between; + > view { + display: inline-block; + vertical-align: middle; + } +} +.pdHbBodyPackage { + padding: 40upx 30upx; + > view:nth-child(1) { + margin-top: 0; + } +} +.pdHbBody { + margin: 20upx 0 0 0; + width: 630upx; + background: rgba(255, 255, 255, 0.9); + border-radius: 20upx; +} +.pdHbTitle { + text-align: center; + > span { + font-size: 24upx; + + color: rgba(255, 255, 255, 1); + } +} +.pdHbPackage { + padding: 30upx; +} +.pdHb { + margin: 20upx auto 0 auto; + width: 690upx; + background: rgba(209, 56, 59, 1); + border-radius: 20upx; +} +.pdAuthorFootPackage { + padding: 30upx; + > view { + margin-right: 50upx; + display: inline-block; + vertical-align: middle; + > span { + margin-left: 10upx; + vertical-align: middle; + font-size: 24upx; + } + > image { + vertical-align: middle; + width: 40upx; + height: 40upx; + } + } +} +.pdAuthorRight { + vertical-align: middle; + > image { + margin: 25upx 0 0 0; + width: 18upx; + height: 25upx; + } +} +.pdAuthorLeft { + vertical-align: middle; + > view { + vertical-align: middle; + display: inline-block; + } + > view:nth-child(1) { + width: 80upx; + height: 80upx; + border-radius: 50%; + overflow: hidden; + > image { + width: 80upx; + height: 80upx; + } + } + > view:nth-child(2) { + margin-left: 20upx; + > view:nth-child(1) { + > span { + font-size: 28upx; + + color: rgba(51, 51, 51, 1); + } + } + > view:nth-child(2) { + > span { + font-size: 24upx; + + color: rgba(153, 153, 153, 1); + } + } + } +} +.pdAuthorTitlePackage { + padding: 30upx; + border-bottom: 1upx solid rgba(248, 248, 248, 1); + display: flex; + justify-content: space-between; + > view { + vertical-align: middle; + display: inline-block; + } +} +.pdAuthor { + margin: 20upx 0 0 0; + width: 750upx; + background: rgba(255, 255, 255, 1); +} +.postDetails { + font-size: 0; + background: #f8f8f8; +} +page { + background: #f8f8f8; + overflow-x: hidden; +} +.postDetailsInfo { + width: 750upx; + background: rgba(255, 255, 255, 1); +} +.postDetailsInfoPackage { + padding: 30upx; +} +.postDetailsInfoTitle { + display: flex; + justify-content: space-between; + > view { + display: inline-block; + vertical-align: middle; + } +} +.pdHead { + width: 54upx; + height: 54upx; + overflow: hidden; + border-radius: 50%; + > image { + width: 54upx; + height: 54upx; + } +} +.postTitleLeft { + > view { + display: inline-block; + vertical-align: middle; + } +} +.pdRZ { + margin-left: 20upx; + > view:nth-child(1) { + > span { + vertical-align: middle; + font-size: 28upx; + + color: rgba(51, 51, 51, 1); + } + > image { + margin-left: 10upx; + vertical-align: middle; + width: 40upx; + height: 40upx; + } + } +} +.publishInfo { + margin-top: 15upx; + > view { + display: inline-block; + vertical-align: middle; + width: 102upx; + height: 34upx; + line-height: 30upx; + background: rgba(255, 68, 68, 1); + border-radius: 4upx; + text-align: center; + > span { + font-size: 20upx; + color: rgba(255, 255, 255, 1); + } + } + > span { + margin-left: 15upx; + vertical-align: middle; + font-size: 24upx; + + color: rgba(153, 153, 153, 1); + } +} +.postTitleRight { + > image { + vertical-align: middle; + width: 69upx; + height: 70upx; + } + > span { + vertical-align: middle; + font-size: 26upx; + + color: rgba(255, 68, 68, 1); + } +} +.topTips { + > image { + position: relative; + width: 58upx; + height: 58upx; + bottom: 118upx; + right: 35upx; + } +} +.pdTips { + margin-top: 14upx; + > view { + margin-right: 10upx; + display: inline-block; + vertical-align: middle; + border: 1upx solid rgba(33, 150, 243, 1); + border-radius: 4upx; + text-align: center; + > span { + padding: 5upx 10upx; + font-size: 20upx; + } + } +} +.pdMain { + margin-top: 20upx; + > text { + font-size: 28upx; + color: rgba(51, 51, 51, 1); + } +} +.pdImg { + margin: 10upx 0 0 0; + > view { + margin: 20upx auto 0 auto; + width: 690upx; + > img { + width: 690upx; + } + } +} +.pdVideo { + margin: 10upx 0 0 0; + > view { + margin: 20upx auto 0 auto; + width: 690upx; + > video { + width: 690upx; + } + } +} +.videoClo{ + position: absolute; + left: 0upx; + top: 0; + height: 100%; + width: 690upx; + z-index: 999; + filter: blur(0rpx); +} +.videoCloBtn{ + width: 150upx; + height: 50upx; + line-height: 50upx; + text-align: center; + background-color: #ff4444; + color: #ffffff; + font-size: 28upx; + position: absolute; + border-radius: 10upx; + left: 50%; + top: 40%; + transform: translate(-50%); + +} +.pdWhere { + margin: 30upx 0 0 0; + display: flex; + justify-content: space-between; + > view:nth-child(1) { + > image { + vertical-align: middle; + width: 25upx; + height: 25upx; + } + > span { + white-space: nowrap; + text-overflow: ellipsis; + overflow: hidden; + width: 400upx; + display: inline-block; + vertical-align: middle; + font-size: 24upx; + + color: rgba(33, 150, 243, 1); + } + } + > view:nth-child(2) { + > span { + font-size: 24upx; + + color: rgba(33, 150, 243, 1); + } + } + > view { + display: inline-block; + } +} +.pdFlow { + margin: 30upx 0 0 0; + display: flex; + justify-content: space-between; + > view { + vertical-align: middle; + display: inline-block; + } + > view:nth-child(1) { + > span { + vertical-align: middle; + font-size: 24upx; + + color: rgba(153, 153, 153, 1); + } + > span:nth-child(2) { + margin-left: 30upx; + } + } + > view:nth-child(2) { + > image { + vertical-align: middle; + width: 35upx; + height: 35upx; + } + > span { + vertical-align: middle; + margin-left: 10upx; + font-size: 24upx; + + font-weight: bold; + color: rgba(51, 51, 51, 1); + } + } +} +.pdFabulous { + position: relative; + z-index: 5; + margin: 35upx auto 0 auto; + width: 690upx; + height: 87upx; + background: rgba(248, 248, 248, 1); + border-radius: 4upx; + > image { + margin-left: 30upx; + vertical-align: middle; + width: 34upx; + height: 35upx; + } + > span { + margin-left: 15upx; + line-height: 87upx; + vertical-align: middle; + font-size: 24upx; + + color: rgba(153, 153, 153, 1); + } + > view { + margin-left: 10upx; + vertical-align: middle; + display: inline-block; + width: 38upx; + height: 39upx; + border-radius: 50%; + border: 1upx solid rgba(255, 255, 255, 1); + overflow: hidden; + > image { + width: 38upx; + height: 39upx; + } + } +} + +.floatView { + display: inline-block !important; + z-index: 1; + position: absolute; + width: 45upx !important; + height: 45upx !important; + border-radius: 0 !important; + background: rgba(248, 248, 248, 1) !important; + transform: rotate(45deg) !important; + bottom: 60upx !important; + left: 20upx !important; + border: none !important; +} +.replyInput { + background: rgba(248, 248, 248, 1); + width: 500upx; + height: 200upx; + vertical-align: middle; + margin: 20upx auto 0 auto; + background: white; + font-size: 24upx; + + color: rgba(51, 51, 51, 1); + > textarea { + background: rgba(248, 248, 248, 1); + width: 500upx !important; + height: 200upx !important; + } +} +.sendButton { + text-align: center; + margin: 20upx auto 0 auto; + width: 292upx; + height: 74upx; + background: #3388ff; + border-radius: 37upx; + + > span { + line-height: 74upx; + font-size: 24upx; + + color: #ffffff; + } +} +.replyView { + border: 1upx solid rgba(0, 0, 0, 0); + width: 600upx; + background: rgba(255, 255, 255, 1); + border-radius: 20upx; + background: #f8f8f8; +} +.getRed { + position: fixed; + bottom: 0; + left: 0; + width: 750upx; + height: 98upx; + background: rgba(255, 68, 68, 1); + text-align: center; + z-index: 99; + > span { + line-height: 98upx; + font-size: 28upx; + + color: rgba(255, 255, 255, 1); + } +} +.getRedView { + width: 641upx; + height: 916upx; + border-radius: 50upx; + background-size: 100%; + position: relative; +} +.getRedViewTips { + position: relative; + bottom: 70upx; + margin: 0 auto 0 auto; + width: 460upx; + > image { + width: 460upx; + height: 130upx; + } +} +.redViewMoney { + text-align: center; + > span { + font-size: 36upx; + + font-weight: bold; + color: rgba(205, 59, 60, 1); + } +} +.getRedButton { + margin: 50upx auto 0 auto; + width: 188upx; + height: 188upx; + background: rgba(236, 202, 154, 1); + border: 4upx solid rgba(222, 70, 57, 1); + box-shadow: 0px 4upx 24upx 0px rgba(209, 56, 59, 0.4); + border-radius: 50%; + text-align: center; + > span { + line-height: 188upx; + font-size: 95upx; + + font-weight: bold; + color: rgba(51, 51, 51, 1); + } +} +.sendRedUser { + width: 176upx; + margin: 70upx auto 0 auto; + text-align: center; + border-bottom: 1upx solid rgba(255, 255, 255, 1); + padding-bottom: 20upx; + > view { + margin: 15upx 0 0 0; + > span { + font-size: 28upx; + + font-weight: bold; + color: rgba(255, 255, 255, 1); + } + } +} +.getRedBottom { + text-align: center; + width: 330upx; + margin: 183upx auto 0 auto; + > span { + font-size: 24upx; + + color: rgba(248, 199, 124, 1); + } +} +.getRedList { + width: 641upx; + height: 916upx; + background: rgba(209, 56, 59, 1); + border-radius: 50upx; + background-size: 100%; +} +.getRedListFull { + height: 75upx; +} +.sendRedImg { + margin: 0 auto 0 auto; + width: 146upx; + height: 146upx; + border-radius: 50%; + overflow: hidden; + > image { + width: 146upx; + height: 146upx; + } +} +.sendRedUesr { + text-align: center; + margin-top: 20upx; + > image { + width: 90upx; + height: 90upx; + } + > view { + display: inline-block; + > view { + > span { + font-size: 28upx; + + font-weight: bold; + color: rgba(255, 255, 255, 1); + } + } + } +} +.redNumber1 { + margin-top: 45upx; + text-align: center; + > span { + font-size: 24upx; + color: rgba(255, 255, 255, 1); + } +} +.scrollRed { + overflow: hidden; + margin: 40upx auto 0 auto; + width: 590upx; + height: 388upx; + background: rgba(255, 255, 255, 0.9); + border-radius: 40upx; +} +.scrollRedPackage { + padding: 30upx; +} +.pdHbMbLeftImg { + width: 73upx; + height: 73upx; + border-radius: 50%; + overflow: hidden; + > image { + width: 73upx; + height: 73upx; + } +} +.getRedNumber { + margin: auto; + width: 590upx; + background: rgba(255, 242, 197, 1); + border-radius: 40upx; +} +.getRedNumberPackage { + padding: 40upx 50upx; +} +.getRedNumberTitle { + text-align: center; + > span { + margin-left: 15upx; + vertical-align: middle; + font-size: 24upx; + lor: rgba(209, 56, 59, 1); + } + > image { + vertical-align: middle; + width: 40upx; + height: 40upx; + } +} +.getRedNumberBody { + white-space: nowrap; + > view { + margin: 30upx 0 0 100upx; + > image { + position: relative; + right: 140upx; + vertical-align: middle; + width: 175upx; + height: 180upx; + } + background: #ffffff; + display: inline-block; + vertical-align: middle; + width: 354upx; + height: 186upx; + box-shadow: 0px 2upx 24upx 0px rgba(255, 138, 229, 0.35); + text-align: center; + > span { + position: relative; + right: 70upx; + vertical-align: middle; + line-height: 186upx; + font-size: 24upx; + color: rgba(199, 63, 75, 1); + > span { + font-size: 36upx; + } + } + } +} +.getRedNumberFoot { + margin: 20upx 0 0 0; + text-align: center; + > image { + vertical-align: middle; + width: 40upx; + height: 40upx; + } + > span { + vertical-align: middle; + margin-left: 15upx; + font-size: 24upx; + color: rgba(231, 194, 64, 1); + } +} +.shareBtn { + position: absolute; + left: 0; + right: 0; + top: 0; + bottom: 0; + z-index: 2; + opacity: 0; +} diff --git a/pages/subPages/postDetails/postDetails.vue b/pages/subPages/postDetails/postDetails.vue new file mode 100644 index 0000000..4079689 --- /dev/null +++ b/pages/subPages/postDetails/postDetails.vue @@ -0,0 +1,1790 @@ + + + + + diff --git a/pages/subPages/postRelease/postRelease.vue b/pages/subPages/postRelease/postRelease.vue new file mode 100644 index 0000000..baf644a --- /dev/null +++ b/pages/subPages/postRelease/postRelease.vue @@ -0,0 +1,1542 @@ + + + + + diff --git a/pages/subPages/receivingAddress/addReceivingAddress/addReceivingAddress.vue b/pages/subPages/receivingAddress/addReceivingAddress/addReceivingAddress.vue new file mode 100644 index 0000000..ccad2cf --- /dev/null +++ b/pages/subPages/receivingAddress/addReceivingAddress/addReceivingAddress.vue @@ -0,0 +1,690 @@ + + + + + diff --git a/pages/subPages/receivingAddress/receivingAddress.vue b/pages/subPages/receivingAddress/receivingAddress.vue new file mode 100644 index 0000000..8426b25 --- /dev/null +++ b/pages/subPages/receivingAddress/receivingAddress.vue @@ -0,0 +1,309 @@ + + + + + diff --git a/pages/subPages/redpacket/myredpacket.vue b/pages/subPages/redpacket/myredpacket.vue new file mode 100644 index 0000000..4cde41a --- /dev/null +++ b/pages/subPages/redpacket/myredpacket.vue @@ -0,0 +1,866 @@ + + + + + diff --git a/pages/subPages/redpacket/redsquare.vue b/pages/subPages/redpacket/redsquare.vue new file mode 100644 index 0000000..7d43f54 --- /dev/null +++ b/pages/subPages/redpacket/redsquare.vue @@ -0,0 +1,224 @@ + + + + + diff --git a/pages/subPages/register/register.vue b/pages/subPages/register/register.vue new file mode 100644 index 0000000..a8b3dfe --- /dev/null +++ b/pages/subPages/register/register.vue @@ -0,0 +1,517 @@ + + + + + diff --git a/pages/subPages/search/search.vue b/pages/subPages/search/search.vue new file mode 100644 index 0000000..84f98d1 --- /dev/null +++ b/pages/subPages/search/search.vue @@ -0,0 +1,460 @@ + + + + + diff --git a/pages/subPages/shareMaterials/index.vue b/pages/subPages/shareMaterials/index.vue new file mode 100644 index 0000000..2ce0246 --- /dev/null +++ b/pages/subPages/shareMaterials/index.vue @@ -0,0 +1,416 @@ + + + + + diff --git a/pages/subPages/signdesk/index/index.vue b/pages/subPages/signdesk/index/index.vue new file mode 100644 index 0000000..327f0e2 --- /dev/null +++ b/pages/subPages/signdesk/index/index.vue @@ -0,0 +1,500 @@ + + + + + diff --git a/pages/subPages/signdesk/rank/rank.vue b/pages/subPages/signdesk/rank/rank.vue new file mode 100644 index 0000000..fca81e6 --- /dev/null +++ b/pages/subPages/signdesk/rank/rank.vue @@ -0,0 +1,322 @@ + + + + + diff --git a/pages/subPages/signdesk/record/record.vue b/pages/subPages/signdesk/record/record.vue new file mode 100644 index 0000000..79d7600 --- /dev/null +++ b/pages/subPages/signdesk/record/record.vue @@ -0,0 +1,171 @@ + + + + + diff --git a/pages/subPages/special/rushspeci/rushspeci.vue b/pages/subPages/special/rushspeci/rushspeci.vue new file mode 100644 index 0000000..f8e4f63 --- /dev/null +++ b/pages/subPages/special/rushspeci/rushspeci.vue @@ -0,0 +1,157 @@ + + + + + diff --git a/pages/subPages/submitOrder/submitOrder.vue b/pages/subPages/submitOrder/submitOrder.vue new file mode 100644 index 0000000..b03f3e5 --- /dev/null +++ b/pages/subPages/submitOrder/submitOrder.vue @@ -0,0 +1,2139 @@ + + + + + + + \ No newline at end of file diff --git a/pages/subPages/webview/webview.vue b/pages/subPages/webview/webview.vue new file mode 100644 index 0000000..bf9b8cf --- /dev/null +++ b/pages/subPages/webview/webview.vue @@ -0,0 +1,21 @@ + + + + + diff --git a/pages/subPages/writeRecord/index.vue b/pages/subPages/writeRecord/index.vue new file mode 100644 index 0000000..7f8efaf --- /dev/null +++ b/pages/subPages/writeRecord/index.vue @@ -0,0 +1,840 @@ + + + + + diff --git a/pages/subPages2/blindDate/dynamics/detail.vue b/pages/subPages2/blindDate/dynamics/detail.vue new file mode 100644 index 0000000..299c1eb --- /dev/null +++ b/pages/subPages2/blindDate/dynamics/detail.vue @@ -0,0 +1,504 @@ + + + + + diff --git a/pages/subPages2/blindDate/dynamics/edit.vue b/pages/subPages2/blindDate/dynamics/edit.vue new file mode 100644 index 0000000..ecee8f4 --- /dev/null +++ b/pages/subPages2/blindDate/dynamics/edit.vue @@ -0,0 +1,565 @@ + + + + + diff --git a/pages/subPages2/homemaking/pubService/pubService.vue b/pages/subPages2/homemaking/pubService/pubService.vue new file mode 100644 index 0000000..48b6ba7 --- /dev/null +++ b/pages/subPages2/homemaking/pubService/pubService.vue @@ -0,0 +1,734 @@ + + + + + diff --git a/pagesA/campusActivities/index.vue b/pagesA/campusActivities/index.vue new file mode 100644 index 0000000..1b64599 --- /dev/null +++ b/pagesA/campusActivities/index.vue @@ -0,0 +1,101 @@ + + + + + diff --git a/pagesA/campusActivities/myActivities.vue b/pagesA/campusActivities/myActivities.vue new file mode 100644 index 0000000..5ab0f8b --- /dev/null +++ b/pagesA/campusActivities/myActivities.vue @@ -0,0 +1,105 @@ + + + + + diff --git a/pagesA/commentSubject/commentSubject.vue b/pagesA/commentSubject/commentSubject.vue new file mode 100644 index 0000000..3071639 --- /dev/null +++ b/pagesA/commentSubject/commentSubject.vue @@ -0,0 +1,139 @@ + + + + + diff --git a/pagesA/follow_fans/fans.vue b/pagesA/follow_fans/fans.vue new file mode 100644 index 0000000..89a8e27 --- /dev/null +++ b/pagesA/follow_fans/fans.vue @@ -0,0 +1,88 @@ + + + + + diff --git a/pagesA/follow_fans/follow.vue b/pagesA/follow_fans/follow.vue new file mode 100644 index 0000000..59cbbe7 --- /dev/null +++ b/pagesA/follow_fans/follow.vue @@ -0,0 +1,87 @@ + + + + + diff --git a/pagesA/identityList/bloggerCertification.vue b/pagesA/identityList/bloggerCertification.vue new file mode 100644 index 0000000..3423639 --- /dev/null +++ b/pagesA/identityList/bloggerCertification.vue @@ -0,0 +1,401 @@ + + + + + diff --git a/pagesA/identityList/identityList.vue b/pagesA/identityList/identityList.vue new file mode 100644 index 0000000..6f9aba9 --- /dev/null +++ b/pagesA/identityList/identityList.vue @@ -0,0 +1,112 @@ + + + + + diff --git a/pagesA/identityList/teacherCertification.vue b/pagesA/identityList/teacherCertification.vue new file mode 100644 index 0000000..68a7624 --- /dev/null +++ b/pagesA/identityList/teacherCertification.vue @@ -0,0 +1,376 @@ + + + + + diff --git a/pagesA/informationHot/informationHot.vue b/pagesA/informationHot/informationHot.vue new file mode 100644 index 0000000..80d715b --- /dev/null +++ b/pagesA/informationHot/informationHot.vue @@ -0,0 +1,115 @@ + + + + + diff --git a/pagesA/instantMessenger/instantMessenger.vue b/pagesA/instantMessenger/instantMessenger.vue new file mode 100644 index 0000000..39e9523 --- /dev/null +++ b/pagesA/instantMessenger/instantMessenger.vue @@ -0,0 +1,1739 @@ + + + + + diff --git a/pagesA/rule_center/rule_center.vue b/pagesA/rule_center/rule_center.vue new file mode 100644 index 0000000..63cf257 --- /dev/null +++ b/pagesA/rule_center/rule_center.vue @@ -0,0 +1,101 @@ + + + + + diff --git a/pagesA/studentIdentification/studentIdentification.vue b/pagesA/studentIdentification/studentIdentification.vue new file mode 100644 index 0000000..40ddaab --- /dev/null +++ b/pagesA/studentIdentification/studentIdentification.vue @@ -0,0 +1,512 @@ + + + + + diff --git a/pagesA/topSearch/topSearch.vue b/pagesA/topSearch/topSearch.vue new file mode 100644 index 0000000..c6917f8 --- /dev/null +++ b/pagesA/topSearch/topSearch.vue @@ -0,0 +1,163 @@ + + + + + diff --git a/project.config.json b/project.config.json new file mode 100644 index 0000000..f89aae2 --- /dev/null +++ b/project.config.json @@ -0,0 +1,29 @@ +{ + "appid": "wx0c70dd5cbbd75583", + "compileType": "miniprogram", + "libVersion": "2.30.0", + "packOptions": { + "ignore": [], + "include": [] + }, + "setting": { + "coverView": true, + "es6": true, + "postcss": true, + "minified": true, + "enhance": true, + "showShadowRootInWxmlPanel": true, + "packNpmRelationList": [], + "babelSetting": { + "ignore": [], + "disablePlugins": [], + "outputPath": "" + }, + "condition": false + }, + "condition": {}, + "editorSetting": { + "tabIndent": "insertSpaces", + "tabSize": 2 + } +} \ No newline at end of file diff --git a/project.private.config.json b/project.private.config.json new file mode 100644 index 0000000..7cfc084 --- /dev/null +++ b/project.private.config.json @@ -0,0 +1,21 @@ +{ + "description": "项目私有配置文件。此文件中的内容将覆盖 project.config.json 中的相同字段。项目的改动优先同步到此文件中。详见文档:https://developers.weixin.qq.com/miniprogram/dev/devtools/projectconfig.html", + "projectname": "weliam-smartcity-smartcity-app-master", + "setting": { + "compileHotReLoad": true, + "urlCheck": false + }, + "condition": { + "miniprogram": { + "list": [ + { + "name": "", + "pathName": "pages/mainPages/index/index", + "query": "", + "launchMode": "default", + "scene": null + } + ] + } + } +} \ No newline at end of file diff --git a/siteinfo.json b/siteinfo.json new file mode 100644 index 0000000..1c41d6e --- /dev/null +++ b/siteinfo.json @@ -0,0 +1,8 @@ +{ + "siteroot": "https://qingyuan.xingtongworld.com/", + "uniacid": "1", + "base":"/addons/weliam_smartcity/h5/", + "routers":"/addons/weliam_smartcity/core/common/", + "name": "weliam_smartcity", + "weliamv": "1.0.0" +} diff --git a/static/Influencer-rafiki.png b/static/Influencer-rafiki.png new file mode 100644 index 0000000000000000000000000000000000000000..64edf2f7e5f4ea16be2b8029d7121f65d43e377f GIT binary patch literal 12261 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 literal 0 HcmV?d00001 diff --git a/static/Learning-cuate.png b/static/Learning-cuate.png new file mode 100644 index 0000000000000000000000000000000000000000..8c173e3d9e8ff1573325f5fd172bd16d956c9b57 GIT binary patch literal 14471 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 literal 0 HcmV?d00001 diff --git a/static/chooseCade/BG.png b/static/chooseCade/BG.png new file mode 100644 index 0000000000000000000000000000000000000000..4b9c4c03f2cc4d63d3968112be52cd3bef79f42e GIT binary patch literal 1576 zcmV+@2G{wCP)00{{R3mft8?0000dP)t-s00030 z|NsC0|NsC0|NsC0|NsC0|NsC0|NsC0|NsC0|NsC0|NsB4JxVzM000eiQchC9Wk?WO?WJ#*&S<9qLZ_>D@<+jD_np?+3&p{%`fi!1$jnvT|9 zV3 zNi>yd^(P;E-M($@+USSna|~TYr5)B-;Ce zh1K~;o%XZ+d7pYdu(|yfrxACJ#V!``&K03+?Y8YnpF4}SGAHxB2z{dwR_~3De;5Px zt)a4?z*hx#rdlwzD)_OB;H?q)@Bcs=TFMw7c|P+xShXVuh8;zfP61- z@D6wg`AwMd%G)#xKg{sIHJmI4{&c6x!Ya%2dzsWP5nN0bI=YwLKZOj8A*0*!OAt|K z$<}jP1CS2@wF}#KIzXB~hTC^P0FnIdioSXsNu?{1Jdt=ML1AkBJpkdJRPOgpVsn6M ze}A@RJtX?_L{ZH!`yN?_HtK5Tr57M9_TsdZ{*?5*MjmXaa{pXmsydO)0aXC@!BcoV z>}p|P@%x)^S&yJN5^E{~u#XBK7Vj)>ai+rkmYJ-{ zMyCs@&AGp0S?_~;sKYN5-9L+W|19Bc(fvc-{X?QS*Z_3-6mANgen50LG>1r6+|K zMeIBbu1xihXz9V{Fb`rQydO#7ML)Lf?mthoM$9`&#NIQ1#n-TTNFsI~PDO@qDwjTx z=n#OI5C)7tHYb!Rd^C`n<36(aW2DfP)5X!Wum74CVgSa(yUhsGlN2#b^$%k6>SB75 zB8FpRAZA~n>TXDbUnJfs@;xukdt(e!mKJ|s(kabR8G#Fy1>UM>8o@T3Eu9cS8ZeEG`h*TMJj2J6n( ze}8c2N6;Xu<%dwf4t%!3&8~&NPjgG~wr4GIYA3g{nr;xSYV`{*Y<{JDeD!^$d@Qg> zmGZH`=G4LuK>@1e$4Rc$!k+*MR4u;=_t^k_3NN!f%+N`DePj1C$ zFXX;c|CB$P4lCtjhnwTXmq&?)0000-Gl1G5CO}BII3@$A04@k;1C50XLKw!z#-^sG78VxP*4B1*c8-pYE-o(a?(SY* zUOqlP!NI{{VPSD`aq;o-iHV6RDJkjc=~-D>xw*Od`T3QVm94FmvV!9#}*ojrT@!i5W$ zFJHcP?b^+oH-T~Y=+UF6PoDzg0_dt) zzj4dfUAy-lIC%KT(c>phojQH?+=WY*uiSt9_TBrBpTB(n{`2Rr-+%u8%bl@h4FdyH zvZsq~g*f8H%w_RBKUUsX#k-TrP7bDGSmH_IFUooc?} z_f0r&m7a9;NsZ^zP8n}l`6n-Lv9*qP@ z-k)LmdT#NIZK8)gZ_mkCn!7e*dG6a63v+Ej7{msNtyp;Oe(I|qHCI+Ta)ugzvU51P zDEf0yXcKqHPFFiNiPSoel$KRaPl8O-YcK`D*@g zUB~?CD=X%4*erVWeF4kfSu_6qe0_X+`K*?jh-IsU92iT*j;Y+5FujVE;Zn>M&Kmh? zyoc}qxl%o`Z2^}Q$C-LLdBKbKeEj}%UN~Xfl5%O9&zgcuZ0cdDycae#>a5XRnz}S% z`aQ>Pt4o4qJz}zMEz(<_Xek{Hx!ANy!o@RhQKs+70E=0fmoAsQPzk?0<&}y=$6hz# zb;l1y#EEaeIJMn3bxN`KQ^^}%WwPd>^LyXEsrPW^=R3f2d?%Zh)VX&JnJeAbPchwA mx+`XGZg1-J{v`)4)KBrMT990@cMdR>GkCiCxvXds|7WrNZ(#U8lO4pE z$@YIbn4Aq10V1~lvpD|G0E^6G{XYZFX8S*z<3CVjCfizLi&~&*q9s9o!3=Fo$`^kH zUKJOqaA})2%Q^h_R>fB-pL%u!6~uYEIEGl9PEL^c)-btWe!oq(hCX9uS)ZcP`6E6K z_R}@^>pt&{bd~&g`+VCnrpvV}v^MONk7Ok4v5z&i2gV%zQT#6 o{>Ns{N7K_21O$ZSR?TE*kle+ZZP$071!xn4r>mdKI;Vst06VE@6951J literal 0 HcmV?d00001 diff --git a/static/chooseCade/chooseCades.png b/static/chooseCade/chooseCades.png new file mode 100644 index 0000000000000000000000000000000000000000..6ae4d68f5f542caf365d21596d1ca9202d9247e2 GIT binary patch literal 269 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE3?yBabR7dyP60k4uI>ds|5q{mpUL*WpW*); z*8dDZHamzrllA{>j{h@Q{?B0lKcC_MRIuO-R*=*z_Wv{3{!i!lKbsTC-J$5Q6lj`g zNswPK1M><2Gsc-;KR8)>2&nwg|2ut|g3LDCmr6hdsh%#5Ar`0KUO36upuppLvAt{a zqa*+Sui`q!u_bn=(Z0~h#o?@WJ4z?-UHQtXEPLsr4@SaWm$yFRe$Egbb53l#@zKL4 zl?oPh*k}s%a~*0v6!5P5VC-F!>{o_alF{{F@4PSmQ(b7?xP@g_KI5%gpoI*cu6{1- HoD!M<-QIC6 literal 0 HcmV?d00001 diff --git a/static/chooseCade/chooseCadex.png b/static/chooseCade/chooseCadex.png new file mode 100644 index 0000000000000000000000000000000000000000..fbc533c0d5d281077bd34aecb90369e9548928ea GIT binary patch literal 262 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE3?yBabR7dy_5nU2uI>dsXVZp8qg?_k|4iehL%<~3+AQ2fo}c?vZs@VH#GP(F9!@A*|n7K+Sz5x3dv)!)>Pf0foZnN4!} zcN#oC;2nNbq%t#m?^-U=bDtkabh{JgTe~DWM4f6enf< literal 0 HcmV?d00001 diff --git a/static/chooseCade/qian.png b/static/chooseCade/qian.png new file mode 100644 index 0000000000000000000000000000000000000000..67901eb8434613edeae33e5d961d42298336abb6 GIT binary patch literal 720 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 S`*Q*Sus`Q~w)TwQU;hAnth-hK literal 0 HcmV?d00001 diff --git a/static/home_123.png b/static/home_123.png new file mode 100644 index 0000000000000000000000000000000000000000..8d7c70ed14d2c50c5dd0ea845ef93d430cc03b65 GIT binary patch literal 609 zcmeAS@N?(olHy`uVBq!ia0vp^1|ZDA3?vioaBc-s69RlfT!D1J+`lmNClJV<^EY7r ze<1Q)^51XH|Ik(c17`mYnENMi-hZgFd4C`bf1t{FFun8tGyMM_Fy|joDs<}qz&U^X z=0em175@VnJMS;hsG#}(0~h`GpZ7a(?jMl$IsbrG_ye`9`VUkCWY`Dw_k$c-666=m z@W0_>!o2ea0(>gW4hQVt-`@Y{ch-a(KNJ`@yyOX$dU|Si(E>J8F_-9;t%gfDGp3)d zVa#V>U<~kdaSW-L^LFy_Sxo^vZo*5olGv-?r#}08KTl|f!xW`FH?cIvnumW1&g*{I zxaCZ`bt^Xm@TxMtPeo$CdE*oPWEPOs^6)*>%;lx2-v9#lAghAB&^b{%a_iY0l{5r%_rz@6hq| zXHKyuI(d;fi>`dMse6(xzHm2hg;!4NuT-_4g83~T+oyfWcDgIAT07lxsrRBqA?gA7 zy9=j>dA~X}>DAsB(Lv#V!h6G39dGm~UsRGBIoZXQ%Vn44@A>E5SFDqoxohSt&u-H> zHgX39nF=3dR>_?{!y)o9bHOFXd-;nN&HeGvp+@1zXY+uY4ppV|!~V`^4qat`I*R|- USr_Jcz<6QsboFyt=akR{0I@YG&;S4c literal 0 HcmV?d00001 diff --git a/static/hot_list_logo.png b/static/hot_list_logo.png new file mode 100644 index 0000000000000000000000000000000000000000..aae502913b81d3c591c16920d13306054871849b GIT binary patch literal 13232 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 literal 0 HcmV?d00001 diff --git a/static/icon_certificate.png b/static/icon_certificate.png new file mode 100644 index 0000000000000000000000000000000000000000..2c4c5a054ea266f81b9d12d26edc8c38572bb9a6 GIT binary patch literal 916 zcmeAS@N?(olHy`uVBq!ia0vp^1|ZDA3?vioaBgK_U}OsL32_B-1Lpn>nD;MW-d_-7 z?jH~WvSo01W}@`WrO=f6$!oKnBR=Aolx#|zlB|vvdzq`2~7z$w}L4Lsu|M%y9-g&gG zq38Dei!WE5uB^JMv+#P{fr-f__XRAQ_8GqOOf^(>*P3z2Opx1#)xbx=X+yBO>||@D z+N4ek`Dy2WHuU9g;FI7{;bPYM>YeHO*!zTwO|zV`9WcCKd%8G=RLprA_B@KoP+(7i zMw5oCtE1z_3)SystM%Xi*LtTmDf{HXzh!kFo~ETI6wf}ph$G;$oZx|p+ts>e1%CMv zc=o|}k+)ZOMmhu=v!q$h+$D4C*{0mktF|qt!b+{m)~E{QC|>2tIw^bnQq|X)yN){V za|!1z5w?@N5p>>S|8Ax4&wM}on?J8!{X$PY_RGz?b^`hD7Q9`?H2vU&ofG!*9C1CC zv|+OHzy60;zdp4uPuOAKdSEH@VZ{%e?3%70SuAfHX5Qc#_n(*N`GI{O)jJc}3l2}S zJ^XWulZCI--63v7oZcRSq4IIlCrC*d>L3?VPuJ(UnZsCF>K?qq!v0zw$bezvA=J{upm+pY%p?g@YQJXpT*Xo4N@*El8T(7LiU;mrimY!1OOL{R_+h=|y$vOmzWeh^Hd8 zX&_B1k&TF?u~a3Yq7`(}1_W>zq#U(fx1U2wgn9C3wQ zC9oF2B6nEue(lU-X_Dn6A6$3!Uo7t`!QMdFS?ANBI7IyuTpm2~ zyz^Q6C2f}(06n+73qciv^`wg$X-{-OR1047Ak{cAovj1#m%CZK66`14@oB>OYQo%( zZPl;}K+k>ZQsj+@tWFciU}I1QrQDz252YeZ&^N_H}!A9Ky>o#KQVQdi~;Cvl&b(V$aepOcJu18IDTyTAUMlyVv?tg zV#EkK%dY{Ms2Ve=+kB0ng=0|1`h-DbhvJ&=dv_mUvdH9e9yfm+Ny6i1=#o zAZ~@}LgdB_7;Iv1BZX6xk_l;ae=v1w0CZUV+JQHJRp3QV!M*pexJL3%x4f+!yh*vC ziMl%qJ70LsMxss=8mDGJL=`^X)Yt%ofC;Q;rw+VulMsXc*rXV>!)k zPGLK(&W{goO$EjW4vt8vre^~$2v$ww{?lwkW&r4k17~Ta0#MtBgh5Ys0jcLzzh>&> zOcP%JpD6&*1?XG?ovUr31d&_8w}31KZFmLZH~&l65Vh1WiSf@O@Z3~j+G0jR>xOsv zX>-i-|J)cbzL*67(XiTr0cJ^!StvfO%|ZpHA(Yks3mdSo0g=%9!U%puM$j*+6rlh= zQ{-#kDI|X<@T2}Nw2n@)vOAN;&GZ!T?*draf`S$(cFl(g5%cFnz zzq<)}eB*vbY~uWk7iQ zdk!Fs(X&giwxq-xzsFBI2K^FThps>>k(*>SulhgPWP~*U!oo>iGh77Nb(B=@irh>C zAgZrnq^YKX&?Rx7^0H(L1Zw~c1sbdWi3$?zs_Y7}4RC$L20%I#G?o+(CPjUsbwmUj zYsbwU8^+QK0K;j$EO4uO6sbT0!ND}7ZFko0ad`Ibe@U{Tjl26Gd$H)FhO7snDgEL{kh#m0X`Kf1d?|H%w>xqevsC zcsOfTClFe;NN(S}FUEVJs@QlbX8jbHL@l4{!pg0xa;+j@@Gx5Rw}1Hw3mj$rR=FH` z;!tWf^MP{#U@(a`Tz#y#*V?ZqinlL1(dF<0M4N(kPKmdIzGutjjq@6<_yMLasRl>) e&05I2*7qOYvM6q>OWQR70000mslDlq+tP( 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 Y`?vS}BD4W}{e|;NMMt?t(I)DD0TKDCL;wH) literal 0 HcmV?d00001 diff --git a/static/mb-plus.png b/static/mb-plus.png new file mode 100644 index 0000000000000000000000000000000000000000..b82cb2c8e508f0e01e9474591bb588e036d9a8eb GIT binary patch literal 157 zcmeAS@N?(olHy`uVBq!ia0vp^1|ZDB3?!H8JlO)IL<4+6T!Hk=nKP$PpFV5WEI8xZ zlI7=s66_^Ge!&d?9qj8B^26-gbbvwzo-U3d6?2jo@D>yvRaDe4(J~ZKoza`<5WsVe shr!E$D~XXW#goTxe!o{hXp<8I!!v)rjJp2!ygzopr0Hx(Fu>b%7 literal 0 HcmV?d00001 diff --git a/static/partner-rafiki.png b/static/partner-rafiki.png new file mode 100644 index 0000000000000000000000000000000000000000..90b389695dc90d153cbadc38a3780e6f87ce8df7 GIT binary patch literal 8448 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 UP3vi2fsSPGboFyt=akR{01KsH00000 literal 0 HcmV?d00001 diff --git a/store/actions.js b/store/actions.js new file mode 100644 index 0000000..0c55d4c --- /dev/null +++ b/store/actions.js @@ -0,0 +1,34 @@ +import App from "@/common/js/app.js" +const action = { + getTabBarData({ + commit + }) { + let _this = this; + App._post_form("&p=headline&do=headlineMenu", {}, res => { + commit("HIDDENTABBAR", true); + commit("SETTABBAR", res.data); + // let tabBarData = res.data[0], + // sotrList = res.data.name_list, + // checkList = tabBarData.checkList, + // data = tabBarData.menu.data, + // style = tabBarData.menu.style, + // list = []; + // for (let key in data) { + // let tabItem = data[key], + // item = { + // name: tabItem.name, + // pagePath: tabItem.linkurl, + // text: tabItem.text, + // iconPath: tabItem.iconPath.file_path, + // selectedIconPath: tabItem.iconactivePath.file_path, + // }; + // list.push(item); + // } + // //不同平台底部菜单顺序调整 + // list.sort((a, b) => { + // return sotrList.indexOf(a.name) - sotrList.indexOf(b.name); + // }); + }) + } +} +export default action diff --git a/store/index.js b/store/index.js new file mode 100644 index 0000000..f583083 --- /dev/null +++ b/store/index.js @@ -0,0 +1,43 @@ +import Vue from 'vue' +import Vuex from 'vuex' + +import mutations from './mutations' +import actions from './actions.js' + +Vue.use(Vuex) + +const store = new Vuex.Store({ + state: { + appInfo: {}, + aidCity: { + aid: '0', + cityname: '' + }, + userInfo: '', + ruzhushow: false, + kefushow: false, + phoneshow: false, + advertShow: false, + advertFlag: false, + codetime: '', + orderList: '', + cmtShareAppMsg: '', + tabBar: null, //底部菜单数据 + hiddenTabBar: false, //隐藏底部菜单 + dealerInfo:{} ,//分销设置信息 + recomid:null ,//推荐人id + istabcontro:0 ,//选项卡1 + selectCity:0 ,// 第一次进来选择地址 + wxlogin:0 ,// 微信判断第一次登陆 + mpshareInfo : {} ,//微信公共分享, + isCardshare:0, + couplePacket:0, //新人红包 + festivalPacket:0, // 节日红包 + isWxAudit:true, //小程序审核判断 + storePrice:{}//同城配送购物车数据 + }, + // actions, + mutations +}) + +export default store diff --git a/store/mutation-types.js b/store/mutation-types.js new file mode 100644 index 0000000..330c4fb --- /dev/null +++ b/store/mutation-types.js @@ -0,0 +1,24 @@ +export const APPINFO = 'APPINFO' +export const AIDCITY = 'AIDCITY' +export const USERINFO = 'USERINFO' +export const RUZHU = 'RUZHU' +export const KEFU = 'KEFU' +export const PHONE = 'PHONE' +export const ADVERT = 'ADVERT' +export const ADVERTFLAG = 'ADVERTFLAG' +export const CODETIME = 'CODETIME' +export const ORDERLIST = 'ORDERLIST' +export const CMTSHAREAPPMSG = 'CMTSHAREAPPMSG' +export const SETTABBAR = 'SETTABBAR' +export const HIDDENTABBAR = 'HIDDENTABBAR' +export const DEALERINFO = 'DEALERINFO' +export const RECOMID = 'RECOMID' +export const ISTABCONTRO = 'ISTABCONTRO' +export const SELECTCITY = 'SELECTCITY' +export const WXLOGIN = 'WXLOGIN' +export const MPSHAREINFO = 'MPSHAREINFO' +export const ISCARDSHARE = 'ISCARDSHARE' +export const COUPLEPACKET = 'COUPLEPACKET' +export const FESTIVALPACKET = 'FESTIVALPACKET' +export const ISWXAUDIT = 'ISWXAUDIT' +export const STOREPRICES = 'STOREPRICES' diff --git a/store/mutations.js b/store/mutations.js new file mode 100644 index 0000000..fab05a9 --- /dev/null +++ b/store/mutations.js @@ -0,0 +1,102 @@ +import { + APPINFO, + AIDCITY, + USERINFO, + RUZHU, + KEFU, + PHONE, + ADVERT, + ADVERTFLAG, + CODETIME, + ORDERLIST, + CMTSHAREAPPMSG, + SETTABBAR, + HIDDENTABBAR, + DEALERINFO, + RECOMID, + ISTABCONTRO, + SELECTCITY, + WXLOGIN, + MPSHAREINFO, + DEALERSHAREINFO, + ISCARDSHARE, + COUPLEPACKET, + FESTIVALPACKET, + ISWXAUDIT, + STOREPRICES +} from './mutation-types' + +export default { + [APPINFO](state, val) { + state.appInfo = val + }, + [AIDCITY](state, val) { + state.aidCity = val + }, + [USERINFO](state, val) { + state.userInfo = val + }, + [RUZHU](state, val) { + state.ruzhushow = val + }, + [KEFU](state, val) { + state.kefushow = val + }, + [PHONE](state, val) { + state.phoneshow = val + }, + [ADVERT](state, val) { + state.advertShow = val + }, + [ADVERTFLAG](state, val) { + state.advertFlag = val + }, + [CODETIME](state, val) { + state.codetime = val + }, + [ORDERLIST](state, val) { + state.orderList = val + }, + [CMTSHAREAPPMSG](state, val) { + state.cmtShareAppMsg = val + }, + [SETTABBAR](state, val) { + state.tabBar = val; + }, + [HIDDENTABBAR](state, val) { + state.hiddenTabBar = val; + }, + [DEALERINFO](state, val) { + state.dealerInfo = val; + }, + [RECOMID](state, val) { + state.recomid = val; + }, + [ISTABCONTRO](state, val) { + state.istabcontro = val + }, + [SELECTCITY](state, val) { + state.selectCity = val; + }, + [WXLOGIN](state, val) { + state.wxlogin = val; + }, + [MPSHAREINFO](state, val) { + state.mpshareInfo = val; + }, + [ISCARDSHARE](state,val){ + state.isCardshare = val; + }, + [COUPLEPACKET](state,val){ + state.couplePacket = val; + }, + [FESTIVALPACKET](state,val){ + state.festivalPacket = val; + }, + [ISWXAUDIT](state,val){ + state.isWxAudit = val; + }, + [STOREPRICES](state,val){ + state.storePrice = val; + } +} diff --git a/uni.scss b/uni.scss new file mode 100644 index 0000000..f0f426c --- /dev/null +++ b/uni.scss @@ -0,0 +1,76 @@ +/** + * 这里是uni-app内置的常用样式变量 + * + * uni-app 官方扩展插件及插件市场(https://ext.dcloud.net.cn)上很多三方插件均使用了这些样式变量 + * 如果你是插件开发者,建议你使用scss预处理,并在插件代码中直接使用这些变量(无需 import 这个文件),方便用户通过搭积木的方式开发整体风格一致的App + * + */ + +/** + * 如果你是App开发者(插件使用者),你可以通过修改这些变量来定制自己的插件主题,实现自定义主题功能 + * + * 如果你的项目同样使用了scss预处理,你也可以直接在你的 scss 代码中使用如下变量,同时无需 import 这个文件 + */ + +/* 颜色变量 */ + +/* 行为相关颜色 */ +$uni-color-primary: #007aff; +$uni-color-success: #4cd964; +$uni-color-warning: #f0ad4e; +$uni-color-error: #dd524d; + +/* 文字基本颜色 */ +$uni-text-color:#333;//基本色 +$uni-text-color-inverse:#fff;//反色 +$uni-text-color-grey:#999;//辅助灰色,如加载更多的提示信息 +$uni-text-color-placeholder: #808080; +$uni-text-color-disable:#c0c0c0; + +/* 背景颜色 */ +$uni-bg-color:#ffffff; +$uni-bg-color-grey:#f8f8f8; +$uni-bg-color-hover:#f1f1f1;//点击状态颜色 +$uni-bg-color-mask:rgba(0, 0, 0, 0.4);//遮罩颜色 + +/* 边框颜色 */ +$uni-border-color:#c8c7cc; + +/* 尺寸变量 */ + +/* 文字尺寸 */ +$uni-font-size-sm:24upx; +$uni-font-size-base:28upx; +$uni-font-size-lg:32upx; + +/* 图片尺寸 */ +$uni-img-size-sm:40upx; +$uni-img-size-base:52upx; +$uni-img-size-lg:80upx; + +/* Border Radius */ +$uni-border-radius-sm: 4upx; +$uni-border-radius-base: 6upx; +$uni-border-radius-lg: 12upx; +$uni-border-radius-circle: 50%; + +/* 水平间距 */ +$uni-spacing-row-sm: 10px; +$uni-spacing-row-base: 20upx; +$uni-spacing-row-lg: 30upx; + +/* 垂直间距 */ +$uni-spacing-col-sm: 8upx; +$uni-spacing-col-base: 16upx; +$uni-spacing-col-lg: 24upx; + +/* 透明度 */ +$uni-opacity-disabled: 0.3; // 组件禁用态的透明度 + +/* 文章场景相关 */ +$uni-color-title: #2C405A; // 文章标题颜色 +$uni-font-size-title:40upx; +$uni-color-subtitle: #555555; // 二级标题颜色 +$uni-font-size-subtitle:36upx; +$uni-color-paragraph: #3F536E; // 文章段落颜色 +$uni-font-size-paragraph:30upx; \ No newline at end of file diff --git a/uni_modules/uni-datetime-picker/changelog.md b/uni_modules/uni-datetime-picker/changelog.md new file mode 100644 index 0000000..d737c8f --- /dev/null +++ b/uni_modules/uni-datetime-picker/changelog.md @@ -0,0 +1,130 @@ +## 2.2.21(2023-02-20) +- 修复 firefox 浏览器显示区域点击无法拉起日历弹框的Bug [详情](https://ask.dcloud.net.cn/question/163362) +## 2.2.20(2023-02-17) +- 优化 值为空依然选中当天问题 +- 优化 提供 default-value 属性支持配置选择器打开时默认显示的时间 +- 优化 非范围选择未选择日期时间,点击确认按钮选中当前日期时间 +- 优化 字节小程序日期时间范围选择,底部日期换行问题 +## 2.2.19(2023-02-09) +- 修复 2.2.18 引起范围选择配置 end 选择无效的Bug [详情](https://github.com/dcloudio/uni-ui/issues/686) +## 2.2.18(2023-02-08) +- 修复 移动端范围选择change事件触发异常的Bug [详情](https://github.com/dcloudio/uni-ui/issues/684) +- 优化 PC端输入日期格式错误时返回当前日期时间 +- 优化 PC端输入日期时间超出 start、end 限制的Bug +- 优化 移动端日期时间范围用法时间展示不完整问题 +## 2.2.17(2023-02-04) +- 修复 小程序端绑定 Date 类型报错的Bug [详情](https://github.com/dcloudio/uni-ui/issues/679) +- 修复 vue3 time-picker 无法显示绑定时分秒的Bug +## 2.2.16(2023-02-02) +- 修复 字节小程序报错的Bug +## 2.2.15(2023-02-02) +- 修复 某些情况切换月份错误的Bug +## 2.2.14(2023-01-30) +- 修复 某些情况切换月份错误的Bug [详情](https://ask.dcloud.net.cn/question/162033) +## 2.2.13(2023-01-10) +- 修复 多次加载组件造成内存占用的Bug +## 2.2.12(2022-12-01) +- 修复 vue3 下 i18n 国际化初始值不正确的Bug +## 2.2.11(2022-09-19) +- 修复 支付宝小程序样式错乱的Bug [详情](https://github.com/dcloudio/uni-app/issues/3861) +## 2.2.10(2022-09-19) +- 修复 反向选择日期范围,日期显示异常的Bug [详情](https://ask.dcloud.net.cn/question/153401?item_id=212892&rf=false) +## 2.2.9(2022-09-16) +- 可以使用 uni-scss 控制主题色 +## 2.2.8(2022-09-08) +- 修复 close事件无效的Bug +## 2.2.7(2022-09-05) +- 修复 移动端 maskClick 无效的Bug [详情](https://ask.dcloud.net.cn/question/140824) +## 2.2.6(2022-06-30) +- 优化 组件样式,调整了组件图标大小、高度、颜色等,与uni-ui风格保持一致 +## 2.2.5(2022-06-24) +- 修复 日历顶部年月及底部确认未国际化的Bug +## 2.2.4(2022-03-31) +- 修复 Vue3 下动态赋值,单选类型未响应的Bug +## 2.2.3(2022-03-28) +- 修复 Vue3 下动态赋值未响应的Bug +## 2.2.2(2021-12-10) +- 修复 clear-icon 属性在小程序平台不生效的Bug +## 2.2.1(2021-12-10) +- 修复 日期范围选在小程序平台,必须多点击一次才能取消选中状态的Bug +## 2.2.0(2021-11-19) +- 优化 组件UI,并提供设计资源 [详情](https://uniapp.dcloud.io/component/uniui/resource) +- 文档迁移 [https://uniapp.dcloud.io/component/uniui/uni-datetime-picker](https://uniapp.dcloud.io/component/uniui/uni-datetime-picker) +## 2.1.5(2021-11-09) +- 新增 提供组件设计资源,组件样式调整 +## 2.1.4(2021-09-10) +- 修复 hide-second 在移动端的Bug +- 修复 单选赋默认值时,赋值日期未高亮的Bug +- 修复 赋默认值时,移动端未正确显示时间的Bug +## 2.1.3(2021-09-09) +- 新增 hide-second 属性,支持只使用时分,隐藏秒 +## 2.1.2(2021-09-03) +- 优化 取消选中时(范围选)直接开始下一次选择, 避免多点一次 +- 优化 移动端支持清除按钮,同时支持通过 ref 调用组件的 clear 方法 +- 优化 调整字号大小,美化日历界面 +- 修复 因国际化导致的 placeholder 失效的Bug +## 2.1.1(2021-08-24) +- 新增 支持国际化 +- 优化 范围选择器在 pc 端过宽的问题 +## 2.1.0(2021-08-09) +- 新增 适配 vue3 +## 2.0.19(2021-08-09) +- 新增 支持作为 uni-forms 子组件相关功能 +- 修复 在 uni-forms 中使用时,选择时间报 NAN 错误的Bug +## 2.0.18(2021-08-05) +- 修复 type 属性动态赋值无效的Bug +- 修复 ‘确认’按钮被 tabbar 遮盖 bug +- 修复 组件未赋值时范围选左、右日历相同的Bug +## 2.0.17(2021-08-04) +- 修复 范围选未正确显示当前值的Bug +- 修复 h5 平台(移动端)报错 'cale' of undefined 的Bug +## 2.0.16(2021-07-21) +- 新增 return-type 属性支持返回 date 日期对象 +## 2.0.15(2021-07-14) +- 修复 单选日期类型,初始赋值后不在当前日历的Bug +- 新增 clearIcon 属性,显示框的清空按钮可配置显示隐藏(仅 pc 有效) +- 优化 移动端移除显示框的清空按钮,无实际用途 +## 2.0.14(2021-07-14) +- 修复 组件赋值为空,界面未更新的Bug +- 修复 start 和 end 不能动态赋值的Bug +- 修复 范围选类型,用户选择后再次选择右侧日历(结束日期)显示不正确的Bug +## 2.0.13(2021-07-08) +- 修复 范围选择不能动态赋值的Bug +## 2.0.12(2021-07-08) +- 修复 范围选择的初始时间在一个月内时,造成无法选择的bug +## 2.0.11(2021-07-08) +- 优化 弹出层在超出视窗边缘定位不准确的问题 +## 2.0.10(2021-07-08) +- 修复 范围起始点样式的背景色与今日样式的字体前景色融合,导致日期字体看不清的Bug +- 优化 弹出层在超出视窗边缘被遮盖的问题 +## 2.0.9(2021-07-07) +- 新增 maskClick 事件 +- 修复 特殊情况日历 rpx 布局错误的Bug,rpx -> px +- 修复 范围选择时清空返回值不合理的bug,['', ''] -> [] +## 2.0.8(2021-07-07) +- 新增 日期时间显示框支持插槽 +## 2.0.7(2021-07-01) +- 优化 添加 uni-icons 依赖 +## 2.0.6(2021-05-22) +- 修复 图标在小程序上不显示的Bug +- 优化 重命名引用组件,避免潜在组件命名冲突 +## 2.0.5(2021-05-20) +- 优化 代码目录扁平化 +## 2.0.4(2021-05-12) +- 新增 组件示例地址 +## 2.0.3(2021-05-10) +- 修复 ios 下不识别 '-' 日期格式的Bug +- 优化 pc 下弹出层添加边框和阴影 +## 2.0.2(2021-05-08) +- 修复 在 admin 中获取弹出层定位错误的bug +## 2.0.1(2021-05-08) +- 修复 type 属性向下兼容,默认值从 date 变更为 datetime +## 2.0.0(2021-04-30) +- 支持日历形式的日期+时间的范围选择 + > 注意:此版本不向后兼容,不再支持单独时间选择(type=time)及相关的 hide-second 属性(时间选可使用内置组件 picker) +## 1.0.6(2021-03-18) +- 新增 hide-second 属性,时间支持仅选择时、分 +- 修复 选择跟显示的日期不一样的Bug +- 修复 chang事件触发2次的Bug +- 修复 分、秒 end 范围错误的Bug +- 优化 更好的 nvue 适配 diff --git a/uni_modules/uni-datetime-picker/components/uni-datetime-picker/calendar-item.vue b/uni_modules/uni-datetime-picker/components/uni-datetime-picker/calendar-item.vue new file mode 100644 index 0000000..1b1a2eb --- /dev/null +++ b/uni_modules/uni-datetime-picker/components/uni-datetime-picker/calendar-item.vue @@ -0,0 +1,186 @@ + + + + + diff --git a/uni_modules/uni-datetime-picker/components/uni-datetime-picker/calendar.vue b/uni_modules/uni-datetime-picker/components/uni-datetime-picker/calendar.vue new file mode 100644 index 0000000..560acc1 --- /dev/null +++ b/uni_modules/uni-datetime-picker/components/uni-datetime-picker/calendar.vue @@ -0,0 +1,944 @@ + + + + + diff --git a/uni_modules/uni-datetime-picker/components/uni-datetime-picker/i18n/en.json b/uni_modules/uni-datetime-picker/components/uni-datetime-picker/i18n/en.json new file mode 100644 index 0000000..9acf1ab --- /dev/null +++ b/uni_modules/uni-datetime-picker/components/uni-datetime-picker/i18n/en.json @@ -0,0 +1,22 @@ +{ + "uni-datetime-picker.selectDate": "select date", + "uni-datetime-picker.selectTime": "select time", + "uni-datetime-picker.selectDateTime": "select datetime", + "uni-datetime-picker.startDate": "start date", + "uni-datetime-picker.endDate": "end date", + "uni-datetime-picker.startTime": "start time", + "uni-datetime-picker.endTime": "end time", + "uni-datetime-picker.ok": "ok", + "uni-datetime-picker.clear": "clear", + "uni-datetime-picker.cancel": "cancel", + "uni-datetime-picker.year": "-", + "uni-datetime-picker.month": "", + "uni-calender.MON": "MON", + "uni-calender.TUE": "TUE", + "uni-calender.WED": "WED", + "uni-calender.THU": "THU", + "uni-calender.FRI": "FRI", + "uni-calender.SAT": "SAT", + "uni-calender.SUN": "SUN", + "uni-calender.confirm": "confirm" +} diff --git a/uni_modules/uni-datetime-picker/components/uni-datetime-picker/i18n/index.js b/uni_modules/uni-datetime-picker/components/uni-datetime-picker/i18n/index.js new file mode 100644 index 0000000..de7509c --- /dev/null +++ b/uni_modules/uni-datetime-picker/components/uni-datetime-picker/i18n/index.js @@ -0,0 +1,8 @@ +import en from './en.json' +import zhHans from './zh-Hans.json' +import zhHant from './zh-Hant.json' +export default { + en, + 'zh-Hans': zhHans, + 'zh-Hant': zhHant +} diff --git a/uni_modules/uni-datetime-picker/components/uni-datetime-picker/i18n/zh-Hans.json b/uni_modules/uni-datetime-picker/components/uni-datetime-picker/i18n/zh-Hans.json new file mode 100644 index 0000000..d2df5e7 --- /dev/null +++ b/uni_modules/uni-datetime-picker/components/uni-datetime-picker/i18n/zh-Hans.json @@ -0,0 +1,22 @@ +{ + "uni-datetime-picker.selectDate": "选择日期", + "uni-datetime-picker.selectTime": "选择时间", + "uni-datetime-picker.selectDateTime": "选择日期时间", + "uni-datetime-picker.startDate": "开始日期", + "uni-datetime-picker.endDate": "结束日期", + "uni-datetime-picker.startTime": "开始时间", + "uni-datetime-picker.endTime": "结束时间", + "uni-datetime-picker.ok": "确定", + "uni-datetime-picker.clear": "清除", + "uni-datetime-picker.cancel": "取消", + "uni-datetime-picker.year": "年", + "uni-datetime-picker.month": "月", + "uni-calender.SUN": "日", + "uni-calender.MON": "一", + "uni-calender.TUE": "二", + "uni-calender.WED": "三", + "uni-calender.THU": "四", + "uni-calender.FRI": "五", + "uni-calender.SAT": "六", + "uni-calender.confirm": "确认" +} \ No newline at end of file diff --git a/uni_modules/uni-datetime-picker/components/uni-datetime-picker/i18n/zh-Hant.json b/uni_modules/uni-datetime-picker/components/uni-datetime-picker/i18n/zh-Hant.json new file mode 100644 index 0000000..d23fa3c --- /dev/null +++ b/uni_modules/uni-datetime-picker/components/uni-datetime-picker/i18n/zh-Hant.json @@ -0,0 +1,22 @@ +{ + "uni-datetime-picker.selectDate": "選擇日期", + "uni-datetime-picker.selectTime": "選擇時間", + "uni-datetime-picker.selectDateTime": "選擇日期時間", + "uni-datetime-picker.startDate": "開始日期", + "uni-datetime-picker.endDate": "結束日期", + "uni-datetime-picker.startTime": "開始时间", + "uni-datetime-picker.endTime": "結束时间", + "uni-datetime-picker.ok": "確定", + "uni-datetime-picker.clear": "清除", + "uni-datetime-picker.cancel": "取消", + "uni-datetime-picker.year": "年", + "uni-datetime-picker.month": "月", + "uni-calender.SUN": "日", + "uni-calender.MON": "一", + "uni-calender.TUE": "二", + "uni-calender.WED": "三", + "uni-calender.THU": "四", + "uni-calender.FRI": "五", + "uni-calender.SAT": "六", + "uni-calender.confirm": "確認" +} \ No newline at end of file diff --git a/uni_modules/uni-datetime-picker/components/uni-datetime-picker/time-picker.vue b/uni_modules/uni-datetime-picker/components/uni-datetime-picker/time-picker.vue new file mode 100644 index 0000000..04113ac --- /dev/null +++ b/uni_modules/uni-datetime-picker/components/uni-datetime-picker/time-picker.vue @@ -0,0 +1,933 @@ + + + + + diff --git a/uni_modules/uni-datetime-picker/components/uni-datetime-picker/uni-datetime-picker.vue b/uni_modules/uni-datetime-picker/components/uni-datetime-picker/uni-datetime-picker.vue new file mode 100644 index 0000000..c6d93f2 --- /dev/null +++ b/uni_modules/uni-datetime-picker/components/uni-datetime-picker/uni-datetime-picker.vue @@ -0,0 +1,1026 @@ + + + + diff --git a/uni_modules/uni-datetime-picker/components/uni-datetime-picker/util.js b/uni_modules/uni-datetime-picker/components/uni-datetime-picker/util.js new file mode 100644 index 0000000..98e6b79 --- /dev/null +++ b/uni_modules/uni-datetime-picker/components/uni-datetime-picker/util.js @@ -0,0 +1,464 @@ +class Calendar { + constructor({ + date, + selected, + startDate, + endDate, + range, + // multipleStatus + } = {}) { + // 当前日期 + this.date = this.getDate(new Date()) // 当前初入日期 + // 打点信息 + this.selected = selected || []; + // 范围开始 + this.startDate = startDate + // 范围结束 + this.endDate = endDate + this.range = range + // 多选状态 + this.cleanMultipleStatus() + // 每周日期 + this.weeks = {} + // this._getWeek(this.date.fullDate) + // this.multipleStatus = multipleStatus + this.lastHover = false + } + /** + * 设置日期 + * @param {Object} date + */ + setDate(date) { + this.selectDate = this.getDate(date) + this._getWeek(this.selectDate.fullDate) + } + + /** + * 清理多选状态 + */ + cleanMultipleStatus() { + this.multipleStatus = { + before: '', + after: '', + data: [] + } + } + + /** + * 重置开始日期 + */ + resetSatrtDate(startDate) { + // 范围开始 + this.startDate = startDate + + } + + /** + * 重置结束日期 + */ + resetEndDate(endDate) { + // 范围结束 + this.endDate = endDate + } + + /** + * 获取任意时间 + */ + getDate(date, AddDayCount = 0, str = 'day') { + if (!date) { + date = new Date() + } + if (typeof date !== 'object') { + date = date.replace(/-/g, '/') + } + const dd = new Date(date) + switch (str) { + case 'day': + dd.setDate(dd.getDate() + AddDayCount) // 获取AddDayCount天后的日期 + break + case 'month': + if (dd.getDate() === 31 && AddDayCount>0) { + dd.setDate(dd.getDate() + AddDayCount) + } else { + const preMonth = dd.getMonth() + dd.setMonth(preMonth + AddDayCount) // 获取AddDayCount天后的日期 + const nextMonth = dd.getMonth() + // 处理 pre 切换月份目标月份为2月没有当前日(30 31) 切换错误问题 + if(AddDayCount<0 && preMonth!==0 && nextMonth-preMonth>AddDayCount){ + dd.setMonth(nextMonth+(nextMonth-preMonth+AddDayCount)) + } + // 处理 next 切换月份目标月份为2月没有当前日(30 31) 切换错误问题 + if(AddDayCount>0 && nextMonth-preMonth>AddDayCount){ + dd.setMonth(nextMonth-(nextMonth-preMonth-AddDayCount)) + } + } + break + case 'year': + dd.setFullYear(dd.getFullYear() + AddDayCount) // 获取AddDayCount天后的日期 + break + } + const y = dd.getFullYear() + const m = dd.getMonth() + 1 < 10 ? '0' + (dd.getMonth() + 1) : dd.getMonth() + 1 // 获取当前月份的日期,不足10补0 + const d = dd.getDate() < 10 ? '0' + dd.getDate() : dd.getDate() // 获取当前几号,不足10补0 + return { + fullDate: y + '-' + m + '-' + d, + year: y, + month: m, + date: d, + day: dd.getDay() + } + } + + + /** + * 获取上月剩余天数 + */ + _getLastMonthDays(firstDay, full) { + let dateArr = [] + for (let i = firstDay; i > 0; i--) { + const beforeDate = new Date(full.year, full.month - 1, -i + 1).getDate() + dateArr.push({ + date: beforeDate, + month: full.month - 1, + disable: true + }) + } + return dateArr + } + /** + * 获取本月天数 + */ + _currentMonthDys(dateData, full) { + let dateArr = [] + let fullDate = this.date.fullDate + for (let i = 1; i <= dateData; i++) { + let isinfo = false + let nowDate = full.year + '-' + (full.month < 10 ? + full.month : full.month) + '-' + (i < 10 ? + '0' + i : i) + // 是否今天 + let isDay = fullDate === nowDate + // 获取打点信息 + let info = this.selected && this.selected.find((item) => { + if (this.dateEqual(nowDate, item.date)) { + return item + } + }) + + // 日期禁用 + let disableBefore = true + let disableAfter = true + if (this.startDate) { + // let dateCompBefore = this.dateCompare(this.startDate, fullDate) + // disableBefore = this.dateCompare(dateCompBefore ? this.startDate : fullDate, nowDate) + disableBefore = this.dateCompare(this.startDate, nowDate) + } + + if (this.endDate) { + // let dateCompAfter = this.dateCompare(fullDate, this.endDate) + // disableAfter = this.dateCompare(nowDate, dateCompAfter ? this.endDate : fullDate) + disableAfter = this.dateCompare(nowDate, this.endDate) + } + let multiples = this.multipleStatus.data + let checked = false + let multiplesStatus = -1 + if (this.range) { + if (multiples) { + multiplesStatus = multiples.findIndex((item) => { + return this.dateEqual(item, nowDate) + }) + } + if (multiplesStatus !== -1) { + checked = true + } + } + let data = { + fullDate: nowDate, + year: full.year, + date: i, + multiple: this.range ? checked : false, + beforeMultiple: this.isLogicBefore(nowDate, this.multipleStatus.before, this.multipleStatus.after), + afterMultiple: this.isLogicAfter(nowDate, this.multipleStatus.before, this.multipleStatus.after), + month: full.month, + disable: !(disableBefore && disableAfter), + isDay, + userChecked: false + } + if (info) { + data.extraInfo = info + } + + dateArr.push(data) + } + return dateArr + } + /** + * 获取下月天数 + */ + _getNextMonthDays(surplus, full) { + let dateArr = [] + for (let i = 1; i < surplus + 1; i++) { + dateArr.push({ + date: i, + month: Number(full.month) + 1, + disable: true + }) + } + return dateArr + } + + /** + * 获取当前日期详情 + * @param {Object} date + */ + getInfo(date) { + if (!date) { + date = new Date() + } + const dateInfo = this.canlender.find(item => item.fullDate === this.getDate(date).fullDate) + return dateInfo + } + + /** + * 比较时间大小 + */ + dateCompare(startDate, endDate) { + // 计算截止时间 + startDate = new Date(startDate.replace('-', '/').replace('-', '/')) + // 计算详细项的截止时间 + endDate = new Date(endDate.replace('-', '/').replace('-', '/')) + if (startDate <= endDate) { + return true + } else { + return false + } + } + + /** + * 比较时间是否相等 + */ + dateEqual(before, after) { + // 计算截止时间 + before = new Date(before.replace('-', '/').replace('-', '/')) + // 计算详细项的截止时间 + after = new Date(after.replace('-', '/').replace('-', '/')) + if (before.getTime() - after.getTime() === 0) { + return true + } else { + return false + } + } + + /** + * 比较真实起始日期 + */ + + isLogicBefore(currentDay, before, after) { + let logicBefore = before + if (before && after) { + logicBefore = this.dateCompare(before, after) ? before : after + } + return this.dateEqual(logicBefore, currentDay) + } + + isLogicAfter(currentDay, before, after) { + let logicAfter = after + if (before && after) { + logicAfter = this.dateCompare(before, after) ? after : before + } + return this.dateEqual(logicAfter, currentDay) + } + + /** + * 获取日期范围内所有日期 + * @param {Object} begin + * @param {Object} end + */ + geDateAll(begin, end) { + var arr = [] + var ab = begin.split('-') + var ae = end.split('-') + var db = new Date() + db.setFullYear(ab[0], ab[1] - 1, ab[2]) + var de = new Date() + de.setFullYear(ae[0], ae[1] - 1, ae[2]) + var unixDb = db.getTime() - 24 * 60 * 60 * 1000 + var unixDe = de.getTime() - 24 * 60 * 60 * 1000 + for (var k = unixDb; k <= unixDe;) { + k = k + 24 * 60 * 60 * 1000 + arr.push(this.getDate(new Date(parseInt(k))).fullDate) + } + return arr + } + + /** + * 获取多选状态 + */ + setMultiple(fullDate) { + let { + before, + after + } = this.multipleStatus + if (!this.range) return + if (before && after) { + if (!this.lastHover) { + this.lastHover = true + return + } + this.multipleStatus.before = fullDate + this.multipleStatus.after = '' + this.multipleStatus.data = [] + this.multipleStatus.fulldate = '' + this.lastHover = false + } else { + if (!before) { + this.multipleStatus.before = fullDate + this.lastHover = false + } else { + this.multipleStatus.after = fullDate + if (this.dateCompare(this.multipleStatus.before, this.multipleStatus.after)) { + this.multipleStatus.data = this.geDateAll(this.multipleStatus.before, this.multipleStatus + .after); + } else { + this.multipleStatus.data = this.geDateAll(this.multipleStatus.after, this.multipleStatus + .before); + } + this.lastHover = true + } + } + this._getWeek(fullDate) + } + + /** + * 鼠标 hover 更新多选状态 + */ + setHoverMultiple(fullDate) { + let { + before, + after + } = this.multipleStatus + + if (!this.range) return + if (this.lastHover) return + + if (!before) { + this.multipleStatus.before = fullDate + } else { + this.multipleStatus.after = fullDate + if (this.dateCompare(this.multipleStatus.before, this.multipleStatus.after)) { + this.multipleStatus.data = this.geDateAll(this.multipleStatus.before, this.multipleStatus.after); + } else { + this.multipleStatus.data = this.geDateAll(this.multipleStatus.after, this.multipleStatus.before); + } + } + this._getWeek(fullDate) + } + + /** + * 更新默认值多选状态 + */ + setDefaultMultiple(before, after) { + this.multipleStatus.before = before + this.multipleStatus.after = after + if (before && after) { + if (this.dateCompare(before, after)) { + this.multipleStatus.data = this.geDateAll(before, after); + this._getWeek(after) + } else { + this.multipleStatus.data = this.geDateAll(after, before); + this._getWeek(before) + } + } + } + + /** + * 获取每周数据 + * @param {Object} dateData + */ + _getWeek(dateData) { + const { + fullDate, + year, + month, + date, + day + } = this.getDate(dateData) + let firstDay = new Date(year, month - 1, 1).getDay() + let currentDay = new Date(year, month, 0).getDate() + let dates = { + lastMonthDays: this._getLastMonthDays(firstDay, this.getDate(dateData)), // 上个月末尾几天 + currentMonthDys: this._currentMonthDys(currentDay, this.getDate(dateData)), // 本月天数 + nextMonthDays: [], // 下个月开始几天 + weeks: [] + } + let canlender = [] + const surplus = 42 - (dates.lastMonthDays.length + dates.currentMonthDys.length) + dates.nextMonthDays = this._getNextMonthDays(surplus, this.getDate(dateData)) + canlender = canlender.concat(dates.lastMonthDays, dates.currentMonthDys, dates.nextMonthDays) + let weeks = {} + // 拼接数组 上个月开始几天 + 本月天数+ 下个月开始几天 + for (let i = 0; i < canlender.length; i++) { + if (i % 7 === 0) { + weeks[parseInt(i / 7)] = new Array(7) + } + weeks[parseInt(i / 7)][i % 7] = canlender[i] + } + this.canlender = canlender + this.weeks = weeks + } +} + +function getDateTime(date, hideSecond){ + return `${getDate(date)} ${getTime(date, hideSecond)}` +} + +function getDate(date) { + date = fixIosDateFormat(date) + date = new Date(date) + const year = date.getFullYear() + const month = date.getMonth()+1 + const day = date.getDate() + return `${year}-${addZero(month)}-${addZero(day)}` +} + +function getTime(date, hideSecond){ + date = fixIosDateFormat(date) + date = new Date(date) + const hour = date.getHours() + const minute = date.getMinutes() + const second = date.getSeconds() + return hideSecond ? `${addZero(hour)}:${addZero(minute)}` : `${addZero(hour)}:${addZero(minute)}:${addZero(second)}` +} + +function addZero(num) { + if(num < 10){ + num = `0${num}` + } + return num +} + +function getDefaultSecond(hideSecond) { + return hideSecond ? '00:00' : '00:00:00' +} + +function dateCompare(startDate, endDate) { + startDate = new Date(startDate.replace(/-/g, '/')) + endDate = new Date(endDate.replace(/-/g, '/')) + return startDate <= endDate +} + +function checkDate(date){ + const dateReg = /((19|20)\d{2})(-|\/)\d{1,2}(-|\/)\d{1,2}/g + return date.match(dateReg) +} + +function fixIosDateFormat(value) { + // #ifndef MP + if (typeof value === 'string') { + value = value.replace(/-/g, '/') + } + // #endif + return value +} + +export {Calendar, getDateTime, getDate, getTime, addZero, getDefaultSecond, dateCompare, checkDate, fixIosDateFormat} \ No newline at end of file diff --git a/uni_modules/uni-datetime-picker/package.json b/uni_modules/uni-datetime-picker/package.json new file mode 100644 index 0000000..25fbb6c --- /dev/null +++ b/uni_modules/uni-datetime-picker/package.json @@ -0,0 +1,87 @@ +{ + "id": "uni-datetime-picker", + "displayName": "uni-datetime-picker 日期选择器", + "version": "2.2.21", + "description": "uni-datetime-picker 日期时间选择器,支持日历,支持范围选择", + "keywords": [ + "uni-datetime-picker", + "uni-ui", + "uniui", + "日期时间选择器", + "日期时间" +], + "repository": "https://github.com/dcloudio/uni-ui", + "engines": { + "HBuilderX": "" + }, + "directories": { + "example": "../../temps/example_temps" + }, +"dcloudext": { + "sale": { + "regular": { + "price": "0.00" + }, + "sourcecode": { + "price": "0.00" + } + }, + "contact": { + "qq": "" + }, + "declaration": { + "ads": "无", + "data": "无", + "permissions": "无" + }, + "npmurl": "https://www.npmjs.com/package/@dcloudio/uni-ui", + "type": "component-vue" + }, + "uni_modules": { + "dependencies": [ + "uni-scss", + "uni-icons" + ], + "encrypt": [], + "platforms": { + "cloud": { + "tcb": "y", + "aliyun": "y" + }, + "client": { + "App": { + "app-vue": "y", + "app-nvue": "n" + }, + "H5-mobile": { + "Safari": "y", + "Android Browser": "y", + "微信浏览器(Android)": "y", + "QQ浏览器(Android)": "y" + }, + "H5-pc": { + "Chrome": "y", + "IE": "y", + "Edge": "y", + "Firefox": "y", + "Safari": "y" + }, + "小程序": { + "微信": "y", + "阿里": "y", + "百度": "y", + "字节跳动": "y", + "QQ": "y" + }, + "快应用": { + "华为": "u", + "联盟": "u" + }, + "Vue": { + "vue2": "y", + "vue3": "y" + } + } + } + } +} diff --git a/uni_modules/uni-datetime-picker/readme.md b/uni_modules/uni-datetime-picker/readme.md new file mode 100644 index 0000000..162fbef --- /dev/null +++ b/uni_modules/uni-datetime-picker/readme.md @@ -0,0 +1,21 @@ + + +> `重要通知:组件升级更新 2.0.0 后,支持日期+时间范围选择,组件 ui 将使用日历选择日期,ui 变化较大,同时支持 PC 和 移动端。此版本不向后兼容,不再支持单独的时间选择(type=time)及相关的 hide-second 属性(时间选可使用内置组件 picker)。若仍需使用旧版本,可在插件市场下载*非uni_modules版本*,旧版本将不再维护` + +## DatetimePicker 时间选择器 + +> **组件名:uni-datetime-picker** +> 代码块: `uDatetimePicker` + + +该组件的优势是,支持**时间戳**输入和输出(起始时间、终止时间也支持时间戳),可**同时选择**日期和时间。 + +若只是需要单独选择日期和时间,不需要时间戳输入和输出,可使用原生的 picker 组件。 + +**_点击 picker 默认值规则:_** + +- 若设置初始值 value, 会显示在 picker 显示框中 +- 若无初始值 value,则初始值 value 为当前本地时间 Date.now(), 但不会显示在 picker 显示框中 + +### [查看文档](https://uniapp.dcloud.io/component/uniui/uni-datetime-picker) +#### 如使用过程中有任何问题,或者您对uni-ui有一些好的建议,欢迎加入 uni-ui 交流群:871950839 \ No newline at end of file diff --git a/uni_modules/uni-icons/changelog.md b/uni_modules/uni-icons/changelog.md new file mode 100644 index 0000000..6449885 --- /dev/null +++ b/uni_modules/uni-icons/changelog.md @@ -0,0 +1,22 @@ +## 1.3.5(2022-01-24) +- 优化 size 属性可以传入不带单位的字符串数值 +## 1.3.4(2022-01-24) +- 优化 size 支持其他单位 +## 1.3.3(2022-01-17) +- 修复 nvue 有些图标不显示的bug,兼容老版本图标 +## 1.3.2(2021-12-01) +- 优化 示例可复制图标名称 +## 1.3.1(2021-11-23) +- 优化 兼容旧组件 type 值 +## 1.3.0(2021-11-19) +- 新增 更多图标 +- 优化 自定义图标使用方式 +- 优化 组件UI,并提供设计资源,详见:[https://uniapp.dcloud.io/component/uniui/resource](https://uniapp.dcloud.io/component/uniui/resource) +- 文档迁移,详见:[https://uniapp.dcloud.io/component/uniui/uni-icons](https://uniapp.dcloud.io/component/uniui/uni-icons) +## 1.1.7(2021-11-08) +## 1.2.0(2021-07-30) +- 组件兼容 vue3,如何创建vue3项目,详见 [uni-app 项目支持 vue3 介绍](https://ask.dcloud.net.cn/article/37834) +## 1.1.5(2021-05-12) +- 新增 组件示例地址 +## 1.1.4(2021-02-05) +- 调整为uni_modules目录规范 diff --git a/uni_modules/uni-icons/components/uni-icons/icons.js b/uni_modules/uni-icons/components/uni-icons/icons.js new file mode 100644 index 0000000..7889936 --- /dev/null +++ b/uni_modules/uni-icons/components/uni-icons/icons.js @@ -0,0 +1,1169 @@ +export default { + "id": "2852637", + "name": "uniui图标库", + "font_family": "uniicons", + "css_prefix_text": "uniui-", + "description": "", + "glyphs": [ + { + "icon_id": "25027049", + "name": "yanse", + "font_class": "color", + "unicode": "e6cf", + "unicode_decimal": 59087 + }, + { + "icon_id": "25027048", + "name": "wallet", + "font_class": "wallet", + "unicode": "e6b1", + "unicode_decimal": 59057 + }, + { + "icon_id": "25015720", + "name": "settings-filled", + "font_class": "settings-filled", + "unicode": "e6ce", + "unicode_decimal": 59086 + }, + { + "icon_id": "25015434", + "name": "shimingrenzheng-filled", + "font_class": "auth-filled", + "unicode": "e6cc", + "unicode_decimal": 59084 + }, + { + "icon_id": "24934246", + "name": "shop-filled", + "font_class": "shop-filled", + "unicode": "e6cd", + "unicode_decimal": 59085 + }, + { + "icon_id": "24934159", + "name": "staff-filled-01", + "font_class": "staff-filled", + "unicode": "e6cb", + "unicode_decimal": 59083 + }, + { + "icon_id": "24932461", + "name": "VIP-filled", + "font_class": "vip-filled", + "unicode": "e6c6", + "unicode_decimal": 59078 + }, + { + "icon_id": "24932462", + "name": "plus_circle_fill", + "font_class": "plus-filled", + "unicode": "e6c7", + "unicode_decimal": 59079 + }, + { + "icon_id": "24932463", + "name": "folder_add-filled", + "font_class": "folder-add-filled", + "unicode": "e6c8", + "unicode_decimal": 59080 + }, + { + "icon_id": "24932464", + "name": "yanse-filled", + "font_class": "color-filled", + "unicode": "e6c9", + "unicode_decimal": 59081 + }, + { + "icon_id": "24932465", + "name": "tune-filled", + "font_class": "tune-filled", + "unicode": "e6ca", + "unicode_decimal": 59082 + }, + { + "icon_id": "24932455", + "name": "a-rilidaka-filled", + "font_class": "calendar-filled", + "unicode": "e6c0", + "unicode_decimal": 59072 + }, + { + "icon_id": "24932456", + "name": "notification-filled", + "font_class": "notification-filled", + "unicode": "e6c1", + "unicode_decimal": 59073 + }, + { + "icon_id": "24932457", + "name": "wallet-filled", + "font_class": "wallet-filled", + "unicode": "e6c2", + "unicode_decimal": 59074 + }, + { + "icon_id": "24932458", + "name": "paihangbang-filled", + "font_class": "medal-filled", + "unicode": "e6c3", + "unicode_decimal": 59075 + }, + { + "icon_id": "24932459", + "name": "gift-filled", + "font_class": "gift-filled", + "unicode": "e6c4", + "unicode_decimal": 59076 + }, + { + "icon_id": "24932460", + "name": "fire-filled", + "font_class": "fire-filled", + "unicode": "e6c5", + "unicode_decimal": 59077 + }, + { + "icon_id": "24928001", + "name": "refreshempty", + "font_class": "refreshempty", + "unicode": "e6bf", + "unicode_decimal": 59071 + }, + { + "icon_id": "24926853", + "name": "location-ellipse", + "font_class": "location-filled", + "unicode": "e6af", + "unicode_decimal": 59055 + }, + { + "icon_id": "24926735", + "name": "person-filled", + "font_class": "person-filled", + "unicode": "e69d", + "unicode_decimal": 59037 + }, + { + "icon_id": "24926703", + "name": "personadd-filled", + "font_class": "personadd-filled", + "unicode": "e698", + "unicode_decimal": 59032 + }, + { + "icon_id": "24923351", + "name": "back", + "font_class": "back", + "unicode": "e6b9", + "unicode_decimal": 59065 + }, + { + "icon_id": "24923352", + "name": "forward", + "font_class": "forward", + "unicode": "e6ba", + "unicode_decimal": 59066 + }, + { + "icon_id": "24923353", + "name": "arrowthinright", + "font_class": "arrow-right", + "unicode": "e6bb", + "unicode_decimal": 59067 + }, + { + "icon_id": "24923353", + "name": "arrowthinright", + "font_class": "arrowthinright", + "unicode": "e6bb", + "unicode_decimal": 59067 + }, + { + "icon_id": "24923354", + "name": "arrowthinleft", + "font_class": "arrow-left", + "unicode": "e6bc", + "unicode_decimal": 59068 + }, + { + "icon_id": "24923354", + "name": "arrowthinleft", + "font_class": "arrowthinleft", + "unicode": "e6bc", + "unicode_decimal": 59068 + }, + { + "icon_id": "24923355", + "name": "arrowthinup", + "font_class": "arrow-up", + "unicode": "e6bd", + "unicode_decimal": 59069 + }, + { + "icon_id": "24923355", + "name": "arrowthinup", + "font_class": "arrowthinup", + "unicode": "e6bd", + "unicode_decimal": 59069 + }, + { + "icon_id": "24923356", + "name": "arrowthindown", + "font_class": "arrow-down", + "unicode": "e6be", + "unicode_decimal": 59070 + },{ + "icon_id": "24923356", + "name": "arrowthindown", + "font_class": "arrowthindown", + "unicode": "e6be", + "unicode_decimal": 59070 + }, + { + "icon_id": "24923349", + "name": "arrowdown", + "font_class": "bottom", + "unicode": "e6b8", + "unicode_decimal": 59064 + },{ + "icon_id": "24923349", + "name": "arrowdown", + "font_class": "arrowdown", + "unicode": "e6b8", + "unicode_decimal": 59064 + }, + { + "icon_id": "24923346", + "name": "arrowright", + "font_class": "right", + "unicode": "e6b5", + "unicode_decimal": 59061 + }, + { + "icon_id": "24923346", + "name": "arrowright", + "font_class": "arrowright", + "unicode": "e6b5", + "unicode_decimal": 59061 + }, + { + "icon_id": "24923347", + "name": "arrowup", + "font_class": "top", + "unicode": "e6b6", + "unicode_decimal": 59062 + }, + { + "icon_id": "24923347", + "name": "arrowup", + "font_class": "arrowup", + "unicode": "e6b6", + "unicode_decimal": 59062 + }, + { + "icon_id": "24923348", + "name": "arrowleft", + "font_class": "left", + "unicode": "e6b7", + "unicode_decimal": 59063 + }, + { + "icon_id": "24923348", + "name": "arrowleft", + "font_class": "arrowleft", + "unicode": "e6b7", + "unicode_decimal": 59063 + }, + { + "icon_id": "24923334", + "name": "eye", + "font_class": "eye", + "unicode": "e651", + "unicode_decimal": 58961 + }, + { + "icon_id": "24923335", + "name": "eye-filled", + "font_class": "eye-filled", + "unicode": "e66a", + "unicode_decimal": 58986 + }, + { + "icon_id": "24923336", + "name": "eye-slash", + "font_class": "eye-slash", + "unicode": "e6b3", + "unicode_decimal": 59059 + }, + { + "icon_id": "24923337", + "name": "eye-slash-filled", + "font_class": "eye-slash-filled", + "unicode": "e6b4", + "unicode_decimal": 59060 + }, + { + "icon_id": "24923305", + "name": "info-filled", + "font_class": "info-filled", + "unicode": "e649", + "unicode_decimal": 58953 + }, + { + "icon_id": "24923299", + "name": "reload-01", + "font_class": "reload", + "unicode": "e6b2", + "unicode_decimal": 59058 + }, + { + "icon_id": "24923195", + "name": "mic_slash_fill", + "font_class": "micoff-filled", + "unicode": "e6b0", + "unicode_decimal": 59056 + }, + { + "icon_id": "24923165", + "name": "map-pin-ellipse", + "font_class": "map-pin-ellipse", + "unicode": "e6ac", + "unicode_decimal": 59052 + }, + { + "icon_id": "24923166", + "name": "map-pin", + "font_class": "map-pin", + "unicode": "e6ad", + "unicode_decimal": 59053 + }, + { + "icon_id": "24923167", + "name": "location", + "font_class": "location", + "unicode": "e6ae", + "unicode_decimal": 59054 + }, + { + "icon_id": "24923064", + "name": "starhalf", + "font_class": "starhalf", + "unicode": "e683", + "unicode_decimal": 59011 + }, + { + "icon_id": "24923065", + "name": "star", + "font_class": "star", + "unicode": "e688", + "unicode_decimal": 59016 + }, + { + "icon_id": "24923066", + "name": "star-filled", + "font_class": "star-filled", + "unicode": "e68f", + "unicode_decimal": 59023 + }, + { + "icon_id": "24899646", + "name": "a-rilidaka", + "font_class": "calendar", + "unicode": "e6a0", + "unicode_decimal": 59040 + }, + { + "icon_id": "24899647", + "name": "fire", + "font_class": "fire", + "unicode": "e6a1", + "unicode_decimal": 59041 + }, + { + "icon_id": "24899648", + "name": "paihangbang", + "font_class": "medal", + "unicode": "e6a2", + "unicode_decimal": 59042 + }, + { + "icon_id": "24899649", + "name": "font", + "font_class": "font", + "unicode": "e6a3", + "unicode_decimal": 59043 + }, + { + "icon_id": "24899650", + "name": "gift", + "font_class": "gift", + "unicode": "e6a4", + "unicode_decimal": 59044 + }, + { + "icon_id": "24899651", + "name": "link", + "font_class": "link", + "unicode": "e6a5", + "unicode_decimal": 59045 + }, + { + "icon_id": "24899652", + "name": "notification", + "font_class": "notification", + "unicode": "e6a6", + "unicode_decimal": 59046 + }, + { + "icon_id": "24899653", + "name": "staff", + "font_class": "staff", + "unicode": "e6a7", + "unicode_decimal": 59047 + }, + { + "icon_id": "24899654", + "name": "VIP", + "font_class": "vip", + "unicode": "e6a8", + "unicode_decimal": 59048 + }, + { + "icon_id": "24899655", + "name": "folder_add", + "font_class": "folder-add", + "unicode": "e6a9", + "unicode_decimal": 59049 + }, + { + "icon_id": "24899656", + "name": "tune", + "font_class": "tune", + "unicode": "e6aa", + "unicode_decimal": 59050 + }, + { + "icon_id": "24899657", + "name": "shimingrenzheng", + "font_class": "auth", + "unicode": "e6ab", + "unicode_decimal": 59051 + }, + { + "icon_id": "24899565", + "name": "person", + "font_class": "person", + "unicode": "e699", + "unicode_decimal": 59033 + }, + { + "icon_id": "24899566", + "name": "email-filled", + "font_class": "email-filled", + "unicode": "e69a", + "unicode_decimal": 59034 + }, + { + "icon_id": "24899567", + "name": "phone-filled", + "font_class": "phone-filled", + "unicode": "e69b", + "unicode_decimal": 59035 + }, + { + "icon_id": "24899568", + "name": "phone", + "font_class": "phone", + "unicode": "e69c", + "unicode_decimal": 59036 + }, + { + "icon_id": "24899570", + "name": "email", + "font_class": "email", + "unicode": "e69e", + "unicode_decimal": 59038 + }, + { + "icon_id": "24899571", + "name": "personadd", + "font_class": "personadd", + "unicode": "e69f", + "unicode_decimal": 59039 + }, + { + "icon_id": "24899558", + "name": "chatboxes-filled", + "font_class": "chatboxes-filled", + "unicode": "e692", + "unicode_decimal": 59026 + }, + { + "icon_id": "24899559", + "name": "contact", + "font_class": "contact", + "unicode": "e693", + "unicode_decimal": 59027 + }, + { + "icon_id": "24899560", + "name": "chatbubble-filled", + "font_class": "chatbubble-filled", + "unicode": "e694", + "unicode_decimal": 59028 + }, + { + "icon_id": "24899561", + "name": "contact-filled", + "font_class": "contact-filled", + "unicode": "e695", + "unicode_decimal": 59029 + }, + { + "icon_id": "24899562", + "name": "chatboxes", + "font_class": "chatboxes", + "unicode": "e696", + "unicode_decimal": 59030 + }, + { + "icon_id": "24899563", + "name": "chatbubble", + "font_class": "chatbubble", + "unicode": "e697", + "unicode_decimal": 59031 + }, + { + "icon_id": "24881290", + "name": "upload-filled", + "font_class": "upload-filled", + "unicode": "e68e", + "unicode_decimal": 59022 + }, + { + "icon_id": "24881292", + "name": "upload", + "font_class": "upload", + "unicode": "e690", + "unicode_decimal": 59024 + }, + { + "icon_id": "24881293", + "name": "weixin", + "font_class": "weixin", + "unicode": "e691", + "unicode_decimal": 59025 + }, + { + "icon_id": "24881274", + "name": "compose", + "font_class": "compose", + "unicode": "e67f", + "unicode_decimal": 59007 + }, + { + "icon_id": "24881275", + "name": "qq", + "font_class": "qq", + "unicode": "e680", + "unicode_decimal": 59008 + }, + { + "icon_id": "24881276", + "name": "download-filled", + "font_class": "download-filled", + "unicode": "e681", + "unicode_decimal": 59009 + }, + { + "icon_id": "24881277", + "name": "pengyouquan", + "font_class": "pyq", + "unicode": "e682", + "unicode_decimal": 59010 + }, + { + "icon_id": "24881279", + "name": "sound", + "font_class": "sound", + "unicode": "e684", + "unicode_decimal": 59012 + }, + { + "icon_id": "24881280", + "name": "trash-filled", + "font_class": "trash-filled", + "unicode": "e685", + "unicode_decimal": 59013 + }, + { + "icon_id": "24881281", + "name": "sound-filled", + "font_class": "sound-filled", + "unicode": "e686", + "unicode_decimal": 59014 + }, + { + "icon_id": "24881282", + "name": "trash", + "font_class": "trash", + "unicode": "e687", + "unicode_decimal": 59015 + }, + { + "icon_id": "24881284", + "name": "videocam-filled", + "font_class": "videocam-filled", + "unicode": "e689", + "unicode_decimal": 59017 + }, + { + "icon_id": "24881285", + "name": "spinner-cycle", + "font_class": "spinner-cycle", + "unicode": "e68a", + "unicode_decimal": 59018 + }, + { + "icon_id": "24881286", + "name": "weibo", + "font_class": "weibo", + "unicode": "e68b", + "unicode_decimal": 59019 + }, + { + "icon_id": "24881288", + "name": "videocam", + "font_class": "videocam", + "unicode": "e68c", + "unicode_decimal": 59020 + }, + { + "icon_id": "24881289", + "name": "download", + "font_class": "download", + "unicode": "e68d", + "unicode_decimal": 59021 + }, + { + "icon_id": "24879601", + "name": "help", + "font_class": "help", + "unicode": "e679", + "unicode_decimal": 59001 + }, + { + "icon_id": "24879602", + "name": "navigate-filled", + "font_class": "navigate-filled", + "unicode": "e67a", + "unicode_decimal": 59002 + }, + { + "icon_id": "24879603", + "name": "plusempty", + "font_class": "plusempty", + "unicode": "e67b", + "unicode_decimal": 59003 + }, + { + "icon_id": "24879604", + "name": "smallcircle", + "font_class": "smallcircle", + "unicode": "e67c", + "unicode_decimal": 59004 + }, + { + "icon_id": "24879605", + "name": "minus-filled", + "font_class": "minus-filled", + "unicode": "e67d", + "unicode_decimal": 59005 + }, + { + "icon_id": "24879606", + "name": "micoff", + "font_class": "micoff", + "unicode": "e67e", + "unicode_decimal": 59006 + }, + { + "icon_id": "24879588", + "name": "closeempty", + "font_class": "closeempty", + "unicode": "e66c", + "unicode_decimal": 58988 + }, + { + "icon_id": "24879589", + "name": "clear", + "font_class": "clear", + "unicode": "e66d", + "unicode_decimal": 58989 + }, + { + "icon_id": "24879590", + "name": "navigate", + "font_class": "navigate", + "unicode": "e66e", + "unicode_decimal": 58990 + }, + { + "icon_id": "24879591", + "name": "minus", + "font_class": "minus", + "unicode": "e66f", + "unicode_decimal": 58991 + }, + { + "icon_id": "24879592", + "name": "image", + "font_class": "image", + "unicode": "e670", + "unicode_decimal": 58992 + }, + { + "icon_id": "24879593", + "name": "mic", + "font_class": "mic", + "unicode": "e671", + "unicode_decimal": 58993 + }, + { + "icon_id": "24879594", + "name": "paperplane", + "font_class": "paperplane", + "unicode": "e672", + "unicode_decimal": 58994 + }, + { + "icon_id": "24879595", + "name": "close", + "font_class": "close", + "unicode": "e673", + "unicode_decimal": 58995 + }, + { + "icon_id": "24879596", + "name": "help-filled", + "font_class": "help-filled", + "unicode": "e674", + "unicode_decimal": 58996 + }, + { + "icon_id": "24879597", + "name": "plus-filled", + "font_class": "paperplane-filled", + "unicode": "e675", + "unicode_decimal": 58997 + }, + { + "icon_id": "24879598", + "name": "plus", + "font_class": "plus", + "unicode": "e676", + "unicode_decimal": 58998 + }, + { + "icon_id": "24879599", + "name": "mic-filled", + "font_class": "mic-filled", + "unicode": "e677", + "unicode_decimal": 58999 + }, + { + "icon_id": "24879600", + "name": "image-filled", + "font_class": "image-filled", + "unicode": "e678", + "unicode_decimal": 59000 + }, + { + "icon_id": "24855900", + "name": "locked-filled", + "font_class": "locked-filled", + "unicode": "e668", + "unicode_decimal": 58984 + }, + { + "icon_id": "24855901", + "name": "info", + "font_class": "info", + "unicode": "e669", + "unicode_decimal": 58985 + }, + { + "icon_id": "24855903", + "name": "locked", + "font_class": "locked", + "unicode": "e66b", + "unicode_decimal": 58987 + }, + { + "icon_id": "24855884", + "name": "camera-filled", + "font_class": "camera-filled", + "unicode": "e658", + "unicode_decimal": 58968 + }, + { + "icon_id": "24855885", + "name": "chat-filled", + "font_class": "chat-filled", + "unicode": "e659", + "unicode_decimal": 58969 + }, + { + "icon_id": "24855886", + "name": "camera", + "font_class": "camera", + "unicode": "e65a", + "unicode_decimal": 58970 + }, + { + "icon_id": "24855887", + "name": "circle", + "font_class": "circle", + "unicode": "e65b", + "unicode_decimal": 58971 + }, + { + "icon_id": "24855888", + "name": "checkmarkempty", + "font_class": "checkmarkempty", + "unicode": "e65c", + "unicode_decimal": 58972 + }, + { + "icon_id": "24855889", + "name": "chat", + "font_class": "chat", + "unicode": "e65d", + "unicode_decimal": 58973 + }, + { + "icon_id": "24855890", + "name": "circle-filled", + "font_class": "circle-filled", + "unicode": "e65e", + "unicode_decimal": 58974 + }, + { + "icon_id": "24855891", + "name": "flag", + "font_class": "flag", + "unicode": "e65f", + "unicode_decimal": 58975 + }, + { + "icon_id": "24855892", + "name": "flag-filled", + "font_class": "flag-filled", + "unicode": "e660", + "unicode_decimal": 58976 + }, + { + "icon_id": "24855893", + "name": "gear-filled", + "font_class": "gear-filled", + "unicode": "e661", + "unicode_decimal": 58977 + }, + { + "icon_id": "24855894", + "name": "home", + "font_class": "home", + "unicode": "e662", + "unicode_decimal": 58978 + }, + { + "icon_id": "24855895", + "name": "home-filled", + "font_class": "home-filled", + "unicode": "e663", + "unicode_decimal": 58979 + }, + { + "icon_id": "24855896", + "name": "gear", + "font_class": "gear", + "unicode": "e664", + "unicode_decimal": 58980 + }, + { + "icon_id": "24855897", + "name": "smallcircle-filled", + "font_class": "smallcircle-filled", + "unicode": "e665", + "unicode_decimal": 58981 + }, + { + "icon_id": "24855898", + "name": "map-filled", + "font_class": "map-filled", + "unicode": "e666", + "unicode_decimal": 58982 + }, + { + "icon_id": "24855899", + "name": "map", + "font_class": "map", + "unicode": "e667", + "unicode_decimal": 58983 + }, + { + "icon_id": "24855825", + "name": "refresh-filled", + "font_class": "refresh-filled", + "unicode": "e656", + "unicode_decimal": 58966 + }, + { + "icon_id": "24855826", + "name": "refresh", + "font_class": "refresh", + "unicode": "e657", + "unicode_decimal": 58967 + }, + { + "icon_id": "24855808", + "name": "cloud-upload", + "font_class": "cloud-upload", + "unicode": "e645", + "unicode_decimal": 58949 + }, + { + "icon_id": "24855809", + "name": "cloud-download-filled", + "font_class": "cloud-download-filled", + "unicode": "e646", + "unicode_decimal": 58950 + }, + { + "icon_id": "24855810", + "name": "cloud-download", + "font_class": "cloud-download", + "unicode": "e647", + "unicode_decimal": 58951 + }, + { + "icon_id": "24855811", + "name": "cloud-upload-filled", + "font_class": "cloud-upload-filled", + "unicode": "e648", + "unicode_decimal": 58952 + }, + { + "icon_id": "24855813", + "name": "redo", + "font_class": "redo", + "unicode": "e64a", + "unicode_decimal": 58954 + }, + { + "icon_id": "24855814", + "name": "images-filled", + "font_class": "images-filled", + "unicode": "e64b", + "unicode_decimal": 58955 + }, + { + "icon_id": "24855815", + "name": "undo-filled", + "font_class": "undo-filled", + "unicode": "e64c", + "unicode_decimal": 58956 + }, + { + "icon_id": "24855816", + "name": "more", + "font_class": "more", + "unicode": "e64d", + "unicode_decimal": 58957 + }, + { + "icon_id": "24855817", + "name": "more-filled", + "font_class": "more-filled", + "unicode": "e64e", + "unicode_decimal": 58958 + }, + { + "icon_id": "24855818", + "name": "undo", + "font_class": "undo", + "unicode": "e64f", + "unicode_decimal": 58959 + }, + { + "icon_id": "24855819", + "name": "images", + "font_class": "images", + "unicode": "e650", + "unicode_decimal": 58960 + }, + { + "icon_id": "24855821", + "name": "paperclip", + "font_class": "paperclip", + "unicode": "e652", + "unicode_decimal": 58962 + }, + { + "icon_id": "24855822", + "name": "settings", + "font_class": "settings", + "unicode": "e653", + "unicode_decimal": 58963 + }, + { + "icon_id": "24855823", + "name": "search", + "font_class": "search", + "unicode": "e654", + "unicode_decimal": 58964 + }, + { + "icon_id": "24855824", + "name": "redo-filled", + "font_class": "redo-filled", + "unicode": "e655", + "unicode_decimal": 58965 + }, + { + "icon_id": "24841702", + "name": "list", + "font_class": "list", + "unicode": "e644", + "unicode_decimal": 58948 + }, + { + "icon_id": "24841489", + "name": "mail-open-filled", + "font_class": "mail-open-filled", + "unicode": "e63a", + "unicode_decimal": 58938 + }, + { + "icon_id": "24841491", + "name": "hand-thumbsdown-filled", + "font_class": "hand-down-filled", + "unicode": "e63c", + "unicode_decimal": 58940 + }, + { + "icon_id": "24841492", + "name": "hand-thumbsdown", + "font_class": "hand-down", + "unicode": "e63d", + "unicode_decimal": 58941 + }, + { + "icon_id": "24841493", + "name": "hand-thumbsup-filled", + "font_class": "hand-up-filled", + "unicode": "e63e", + "unicode_decimal": 58942 + }, + { + "icon_id": "24841494", + "name": "hand-thumbsup", + "font_class": "hand-up", + "unicode": "e63f", + "unicode_decimal": 58943 + }, + { + "icon_id": "24841496", + "name": "heart-filled", + "font_class": "heart-filled", + "unicode": "e641", + "unicode_decimal": 58945 + }, + { + "icon_id": "24841498", + "name": "mail-open", + "font_class": "mail-open", + "unicode": "e643", + "unicode_decimal": 58947 + }, + { + "icon_id": "24841488", + "name": "heart", + "font_class": "heart", + "unicode": "e639", + "unicode_decimal": 58937 + }, + { + "icon_id": "24839963", + "name": "loop", + "font_class": "loop", + "unicode": "e633", + "unicode_decimal": 58931 + }, + { + "icon_id": "24839866", + "name": "pulldown", + "font_class": "pulldown", + "unicode": "e632", + "unicode_decimal": 58930 + }, + { + "icon_id": "24813798", + "name": "scan", + "font_class": "scan", + "unicode": "e62a", + "unicode_decimal": 58922 + }, + { + "icon_id": "24813786", + "name": "bars", + "font_class": "bars", + "unicode": "e627", + "unicode_decimal": 58919 + }, + { + "icon_id": "24813788", + "name": "cart-filled", + "font_class": "cart-filled", + "unicode": "e629", + "unicode_decimal": 58921 + }, + { + "icon_id": "24813790", + "name": "checkbox", + "font_class": "checkbox", + "unicode": "e62b", + "unicode_decimal": 58923 + }, + { + "icon_id": "24813791", + "name": "checkbox-filled", + "font_class": "checkbox-filled", + "unicode": "e62c", + "unicode_decimal": 58924 + }, + { + "icon_id": "24813794", + "name": "shop", + "font_class": "shop", + "unicode": "e62f", + "unicode_decimal": 58927 + }, + { + "icon_id": "24813795", + "name": "headphones", + "font_class": "headphones", + "unicode": "e630", + "unicode_decimal": 58928 + }, + { + "icon_id": "24813796", + "name": "cart", + "font_class": "cart", + "unicode": "e631", + "unicode_decimal": 58929 + } + ] +} diff --git a/uni_modules/uni-icons/components/uni-icons/uni-icons.vue b/uni_modules/uni-icons/components/uni-icons/uni-icons.vue new file mode 100644 index 0000000..86e7444 --- /dev/null +++ b/uni_modules/uni-icons/components/uni-icons/uni-icons.vue @@ -0,0 +1,96 @@ + + + + + diff --git a/uni_modules/uni-icons/components/uni-icons/uniicons.css b/uni_modules/uni-icons/components/uni-icons/uniicons.css new file mode 100644 index 0000000..2f56eab --- /dev/null +++ b/uni_modules/uni-icons/components/uni-icons/uniicons.css @@ -0,0 +1,663 @@ +.uniui-color:before { + content: "\e6cf"; +} + +.uniui-wallet:before { + content: "\e6b1"; +} + +.uniui-settings-filled:before { + content: "\e6ce"; +} + +.uniui-auth-filled:before { + content: "\e6cc"; +} + +.uniui-shop-filled:before { + content: "\e6cd"; +} + +.uniui-staff-filled:before { + content: "\e6cb"; +} + +.uniui-vip-filled:before { + content: "\e6c6"; +} + +.uniui-plus-filled:before { + content: "\e6c7"; +} + +.uniui-folder-add-filled:before { + content: "\e6c8"; +} + +.uniui-color-filled:before { + content: "\e6c9"; +} + +.uniui-tune-filled:before { + content: "\e6ca"; +} + +.uniui-calendar-filled:before { + content: "\e6c0"; +} + +.uniui-notification-filled:before { + content: "\e6c1"; +} + +.uniui-wallet-filled:before { + content: "\e6c2"; +} + +.uniui-medal-filled:before { + content: "\e6c3"; +} + +.uniui-gift-filled:before { + content: "\e6c4"; +} + +.uniui-fire-filled:before { + content: "\e6c5"; +} + +.uniui-refreshempty:before { + content: "\e6bf"; +} + +.uniui-location-filled:before { + content: "\e6af"; +} + +.uniui-person-filled:before { + content: "\e69d"; +} + +.uniui-personadd-filled:before { + content: "\e698"; +} + +.uniui-back:before { + content: "\e6b9"; +} + +.uniui-forward:before { + content: "\e6ba"; +} + +.uniui-arrow-right:before { + content: "\e6bb"; +} + +.uniui-arrowthinright:before { + content: "\e6bb"; +} + +.uniui-arrow-left:before { + content: "\e6bc"; +} + +.uniui-arrowthinleft:before { + content: "\e6bc"; +} + +.uniui-arrow-up:before { + content: "\e6bd"; +} + +.uniui-arrowthinup:before { + content: "\e6bd"; +} + +.uniui-arrow-down:before { + content: "\e6be"; +} + +.uniui-arrowthindown:before { + content: "\e6be"; +} + +.uniui-bottom:before { + content: "\e6b8"; +} + +.uniui-arrowdown:before { + content: "\e6b8"; +} + +.uniui-right:before { + content: "\e6b5"; +} + +.uniui-arrowright:before { + content: "\e6b5"; +} + +.uniui-top:before { + content: "\e6b6"; +} + +.uniui-arrowup:before { + content: "\e6b6"; +} + +.uniui-left:before { + content: "\e6b7"; +} + +.uniui-arrowleft:before { + content: "\e6b7"; +} + +.uniui-eye:before { + content: "\e651"; +} + +.uniui-eye-filled:before { + content: "\e66a"; +} + +.uniui-eye-slash:before { + content: "\e6b3"; +} + +.uniui-eye-slash-filled:before { + content: "\e6b4"; +} + +.uniui-info-filled:before { + content: "\e649"; +} + +.uniui-reload:before { + content: "\e6b2"; +} + +.uniui-micoff-filled:before { + content: "\e6b0"; +} + +.uniui-map-pin-ellipse:before { + content: "\e6ac"; +} + +.uniui-map-pin:before { + content: "\e6ad"; +} + +.uniui-location:before { + content: "\e6ae"; +} + +.uniui-starhalf:before { + content: "\e683"; +} + +.uniui-star:before { + content: "\e688"; +} + +.uniui-star-filled:before { + content: "\e68f"; +} + +.uniui-calendar:before { + content: "\e6a0"; +} + +.uniui-fire:before { + content: "\e6a1"; +} + +.uniui-medal:before { + content: "\e6a2"; +} + +.uniui-font:before { + content: "\e6a3"; +} + +.uniui-gift:before { + content: "\e6a4"; +} + +.uniui-link:before { + content: "\e6a5"; +} + +.uniui-notification:before { + content: "\e6a6"; +} + +.uniui-staff:before { + content: "\e6a7"; +} + +.uniui-vip:before { + content: "\e6a8"; +} + +.uniui-folder-add:before { + content: "\e6a9"; +} + +.uniui-tune:before { + content: "\e6aa"; +} + +.uniui-auth:before { + content: "\e6ab"; +} + +.uniui-person:before { + content: "\e699"; +} + +.uniui-email-filled:before { + content: "\e69a"; +} + +.uniui-phone-filled:before { + content: "\e69b"; +} + +.uniui-phone:before { + content: "\e69c"; +} + +.uniui-email:before { + content: "\e69e"; +} + +.uniui-personadd:before { + content: "\e69f"; +} + +.uniui-chatboxes-filled:before { + content: "\e692"; +} + +.uniui-contact:before { + content: "\e693"; +} + +.uniui-chatbubble-filled:before { + content: "\e694"; +} + +.uniui-contact-filled:before { + content: "\e695"; +} + +.uniui-chatboxes:before { + content: "\e696"; +} + +.uniui-chatbubble:before { + content: "\e697"; +} + +.uniui-upload-filled:before { + content: "\e68e"; +} + +.uniui-upload:before { + content: "\e690"; +} + +.uniui-weixin:before { + content: "\e691"; +} + +.uniui-compose:before { + content: "\e67f"; +} + +.uniui-qq:before { + content: "\e680"; +} + +.uniui-download-filled:before { + content: "\e681"; +} + +.uniui-pyq:before { + content: "\e682"; +} + +.uniui-sound:before { + content: "\e684"; +} + +.uniui-trash-filled:before { + content: "\e685"; +} + +.uniui-sound-filled:before { + content: "\e686"; +} + +.uniui-trash:before { + content: "\e687"; +} + +.uniui-videocam-filled:before { + content: "\e689"; +} + +.uniui-spinner-cycle:before { + content: "\e68a"; +} + +.uniui-weibo:before { + content: "\e68b"; +} + +.uniui-videocam:before { + content: "\e68c"; +} + +.uniui-download:before { + content: "\e68d"; +} + +.uniui-help:before { + content: "\e679"; +} + +.uniui-navigate-filled:before { + content: "\e67a"; +} + +.uniui-plusempty:before { + content: "\e67b"; +} + +.uniui-smallcircle:before { + content: "\e67c"; +} + +.uniui-minus-filled:before { + content: "\e67d"; +} + +.uniui-micoff:before { + content: "\e67e"; +} + +.uniui-closeempty:before { + content: "\e66c"; +} + +.uniui-clear:before { + content: "\e66d"; +} + +.uniui-navigate:before { + content: "\e66e"; +} + +.uniui-minus:before { + content: "\e66f"; +} + +.uniui-image:before { + content: "\e670"; +} + +.uniui-mic:before { + content: "\e671"; +} + +.uniui-paperplane:before { + content: "\e672"; +} + +.uniui-close:before { + content: "\e673"; +} + +.uniui-help-filled:before { + content: "\e674"; +} + +.uniui-paperplane-filled:before { + content: "\e675"; +} + +.uniui-plus:before { + content: "\e676"; +} + +.uniui-mic-filled:before { + content: "\e677"; +} + +.uniui-image-filled:before { + content: "\e678"; +} + +.uniui-locked-filled:before { + content: "\e668"; +} + +.uniui-info:before { + content: "\e669"; +} + +.uniui-locked:before { + content: "\e66b"; +} + +.uniui-camera-filled:before { + content: "\e658"; +} + +.uniui-chat-filled:before { + content: "\e659"; +} + +.uniui-camera:before { + content: "\e65a"; +} + +.uniui-circle:before { + content: "\e65b"; +} + +.uniui-checkmarkempty:before { + content: "\e65c"; +} + +.uniui-chat:before { + content: "\e65d"; +} + +.uniui-circle-filled:before { + content: "\e65e"; +} + +.uniui-flag:before { + content: "\e65f"; +} + +.uniui-flag-filled:before { + content: "\e660"; +} + +.uniui-gear-filled:before { + content: "\e661"; +} + +.uniui-home:before { + content: "\e662"; +} + +.uniui-home-filled:before { + content: "\e663"; +} + +.uniui-gear:before { + content: "\e664"; +} + +.uniui-smallcircle-filled:before { + content: "\e665"; +} + +.uniui-map-filled:before { + content: "\e666"; +} + +.uniui-map:before { + content: "\e667"; +} + +.uniui-refresh-filled:before { + content: "\e656"; +} + +.uniui-refresh:before { + content: "\e657"; +} + +.uniui-cloud-upload:before { + content: "\e645"; +} + +.uniui-cloud-download-filled:before { + content: "\e646"; +} + +.uniui-cloud-download:before { + content: "\e647"; +} + +.uniui-cloud-upload-filled:before { + content: "\e648"; +} + +.uniui-redo:before { + content: "\e64a"; +} + +.uniui-images-filled:before { + content: "\e64b"; +} + +.uniui-undo-filled:before { + content: "\e64c"; +} + +.uniui-more:before { + content: "\e64d"; +} + +.uniui-more-filled:before { + content: "\e64e"; +} + +.uniui-undo:before { + content: "\e64f"; +} + +.uniui-images:before { + content: "\e650"; +} + +.uniui-paperclip:before { + content: "\e652"; +} + +.uniui-settings:before { + content: "\e653"; +} + +.uniui-search:before { + content: "\e654"; +} + +.uniui-redo-filled:before { + content: "\e655"; +} + +.uniui-list:before { + content: "\e644"; +} + +.uniui-mail-open-filled:before { + content: "\e63a"; +} + +.uniui-hand-down-filled:before { + content: "\e63c"; +} + +.uniui-hand-down:before { + content: "\e63d"; +} + +.uniui-hand-up-filled:before { + content: "\e63e"; +} + +.uniui-hand-up:before { + content: "\e63f"; +} + +.uniui-heart-filled:before { + content: "\e641"; +} + +.uniui-mail-open:before { + content: "\e643"; +} + +.uniui-heart:before { + content: "\e639"; +} + +.uniui-loop:before { + content: "\e633"; +} + +.uniui-pulldown:before { + content: "\e632"; +} + +.uniui-scan:before { + content: "\e62a"; +} + +.uniui-bars:before { + content: "\e627"; +} + +.uniui-cart-filled:before { + content: "\e629"; +} + +.uniui-checkbox:before { + content: "\e62b"; +} + +.uniui-checkbox-filled:before { + content: "\e62c"; +} + +.uniui-shop:before { + content: "\e62f"; +} + +.uniui-headphones:before { + content: "\e630"; +} + +.uniui-cart:before { + content: "\e631"; +} diff --git a/uni_modules/uni-icons/components/uni-icons/uniicons.ttf b/uni_modules/uni-icons/components/uni-icons/uniicons.ttf new file mode 100644 index 0000000000000000000000000000000000000000..835f33bc9411461b8b9046b3fec742e921d6ce3a GIT binary patch literal 35760 zcmeFacbp?vl{Q?rN>WLsSXIigCAC7gI!S6tox^m`be^1}CwPJ>yxZ{uSzi{WC_=LI+*Wx!<-H!v})21fuKMZQ#fB2Fs zuEGwU_ZyDmuR3&e_s&PS@Be}0T=(JF$l;w=9Als0-iQ4lE^0cm^YDeWhnK#G<4!$@ z>-QZydhsP6Kl0Pv9Cw|EbP-?YO$@C;`+ zuKnR1zxV)MXnddfv56Dn_-W<%#_jZ^d%1f!hyI(6O8C!lXY}93nl=3f9^gzbYS03Jm0vJ;T)Z1IKntfUtypB#zx`e6wG3 zC5AhB&Me^QdH${3yL1otSUp#NN^cKN_yKnkm%XqxczWUgrT^Oo|6lL`SPy&+DZ_DX z1{?B^82rf|!cpSXHhg1*;kZecHy+MI*MqCu>g9T0eYieaf9edzAC9!tJL|pm0UQ~l zBQN;JaG!_sb8)VT%i=%By_I_#_ZIFh?(N(=xVtf?-^|^~y@`7RcMEqbcN=#*_eSmx z?)BVjxU0EqFm9T;Q`~9pTJAdTdhWH{>+qBtxEr~fxSP3Gb60T(xkKDx?g)33JH{R7 zPH-1465x0fg%5CGeb33>TxSiZCZa24wyO7(&Q z>$wfwMs5?gnVaOMxM^;NYvpFSIc_<(f-7(s&u0CxL#u8VbF$klItIryQ@x|5W z48lm`>dOtnnB(dz48rK+>MISxIOOW948n-y>Z=XH*yQSK48kbo>T3axcUVKK~8Y>od!W-aP?gVL3VKU-3CF5aP>U~L7s5+3k`x~;p%%0f{fwn z`wW7#;p+Phg52Ti2MmG);_4R}1X;w@scs-hC9Y0&13^AJNK#+l4o$3aH zH00`3HxT3^SEssxAR)Or)eQt$$+z7tkWDxWPSHIIBXb!IaW`m$ZxcXZRf;QpmZ#4*d zg{!~KAZQq_ewRVeHC+Ae20`m^^>-Kq{lnGoHVB%CtKVY~bP`v;*C1#ou700E&{JIf zeuJQ~xcWN{g6`t#?=lEljH|!fAm}r${tpI0vvKtY41$j1>hCcK+K#I~Xb|)sSAVZT z(12Y1eFi}na`pEc1g*%`|Ir}mN3Q+>gPp}tAE%avLosrF^GJG z`bQ0dZsqD9GYDFitAE@e=v%J-34@?{x%wv!f)3{DpE3yAn5#cz5cD!v|Fl8S&|Lj9 z20>SI_0JjvtVjlpxwFpV+N5QQ~$g{(D+>a3kE^= zbM-G81S^26f5{-&16=*f2Ej7m>R&MkHUd}wszKz<)E_qpb^}-cnn7g6)t@j3wggxI zxp1QBm2=klxXa|a&TVx+;Qp=WwVt{>D}O~9QXW)O>O0h5db_-@^8Ud$^pPT-1=NS-v_4k2r|_kM*0!vaW9xyNll~`AaKH zuPQxR4wv6t{%QC2?wh**v$DGKU?rS_5?F|crGafkiL7dNk-%Y_E4VmkSn6>Hb;SUukEx3l0# zej=BS$yT%Av8Uc*J`xpdRw>aQ5n{34Scli{%@0hjo|#!%t;CXMOO1~vM@By$$wu(0 z7+*JsbCF0c%-{dHFL+pQI~s3&zjaOf89{d%!`6o3fsCO(`6

PqiNa$~E4XJ#a8s%?nsx`&SiQ7Wz{CE9c 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 literal 0 HcmV?d00001 diff --git a/uni_modules/uni-icons/package.json b/uni_modules/uni-icons/package.json new file mode 100644 index 0000000..d1c4e77 --- /dev/null +++ b/uni_modules/uni-icons/package.json @@ -0,0 +1,86 @@ +{ + "id": "uni-icons", + "displayName": "uni-icons 图标", + "version": "1.3.5", + "description": "图标组件,用于展示移动端常见的图标,可自定义颜色、大小。", + "keywords": [ + "uni-ui", + "uniui", + "icon", + "图标" +], + "repository": "https://github.com/dcloudio/uni-ui", + "engines": { + "HBuilderX": "^3.2.14" + }, + "directories": { + "example": "../../temps/example_temps" + }, + "dcloudext": { + "category": [ + "前端组件", + "通用组件" + ], + "sale": { + "regular": { + "price": "0.00" + }, + "sourcecode": { + "price": "0.00" + } + }, + "contact": { + "qq": "" + }, + "declaration": { + "ads": "无", + "data": "无", + "permissions": "无" + }, + "npmurl": "https://www.npmjs.com/package/@dcloudio/uni-ui" + }, + "uni_modules": { + "dependencies": ["uni-scss"], + "encrypt": [], + "platforms": { + "cloud": { + "tcb": "y", + "aliyun": "y" + }, + "client": { + "App": { + "app-vue": "y", + "app-nvue": "y" + }, + "H5-mobile": { + "Safari": "y", + "Android Browser": "y", + "微信浏览器(Android)": "y", + "QQ浏览器(Android)": "y" + }, + "H5-pc": { + "Chrome": "y", + "IE": "y", + "Edge": "y", + "Firefox": "y", + "Safari": "y" + }, + "小程序": { + "微信": "y", + "阿里": "y", + "百度": "y", + "字节跳动": "y", + "QQ": "y" + }, + "快应用": { + "华为": "u", + "联盟": "u" + }, + "Vue": { + "vue2": "y", + "vue3": "y" + } + } + } + } +} \ No newline at end of file diff --git a/uni_modules/uni-icons/readme.md b/uni_modules/uni-icons/readme.md new file mode 100644 index 0000000..86234ba --- /dev/null +++ b/uni_modules/uni-icons/readme.md @@ -0,0 +1,8 @@ +## Icons 图标 +> **组件名:uni-icons** +> 代码块: `uIcons` + +用于展示 icons 图标 。 + +### [查看文档](https://uniapp.dcloud.io/component/uniui/uni-icons) +#### 如使用过程中有任何问题,或者您对uni-ui有一些好的建议,欢迎加入 uni-ui 交流群:871950839 diff --git a/uni_modules/uni-scss/changelog.md b/uni_modules/uni-scss/changelog.md new file mode 100644 index 0000000..b863bb0 --- /dev/null +++ b/uni_modules/uni-scss/changelog.md @@ -0,0 +1,8 @@ +## 1.0.3(2022-01-21) +- 优化 组件示例 +## 1.0.2(2021-11-22) +- 修复 / 符号在 vue 不同版本兼容问题引起的报错问题 +## 1.0.1(2021-11-22) +- 修复 vue3中scss语法兼容问题 +## 1.0.0(2021-11-18) +- init diff --git a/uni_modules/uni-scss/index.scss b/uni_modules/uni-scss/index.scss new file mode 100644 index 0000000..1744a5f --- /dev/null +++ b/uni_modules/uni-scss/index.scss @@ -0,0 +1 @@ +@import './styles/index.scss'; diff --git a/uni_modules/uni-scss/package.json b/uni_modules/uni-scss/package.json new file mode 100644 index 0000000..7cc0ccb --- /dev/null +++ b/uni_modules/uni-scss/package.json @@ -0,0 +1,82 @@ +{ + "id": "uni-scss", + "displayName": "uni-scss 辅助样式", + "version": "1.0.3", + "description": "uni-sass是uni-ui提供的一套全局样式 ,通过一些简单的类名和sass变量,实现简单的页面布局操作,比如颜色、边距、圆角等。", + "keywords": [ + "uni-scss", + "uni-ui", + "辅助样式" +], + "repository": "https://github.com/dcloudio/uni-ui", + "engines": { + "HBuilderX": "^3.1.0" + }, + "dcloudext": { + "category": [ + "JS SDK", + "通用 SDK" + ], + "sale": { + "regular": { + "price": "0.00" + }, + "sourcecode": { + "price": "0.00" + } + }, + "contact": { + "qq": "" + }, + "declaration": { + "ads": "无", + "data": "无", + "permissions": "无" + }, + "npmurl": "https://www.npmjs.com/package/@dcloudio/uni-ui" + }, + "uni_modules": { + "dependencies": [], + "encrypt": [], + "platforms": { + "cloud": { + "tcb": "y", + "aliyun": "y" + }, + "client": { + "App": { + "app-vue": "y", + "app-nvue": "u" + }, + "H5-mobile": { + "Safari": "y", + "Android Browser": "y", + "微信浏览器(Android)": "y", + "QQ浏览器(Android)": "y" + }, + "H5-pc": { + "Chrome": "y", + "IE": "y", + "Edge": "y", + "Firefox": "y", + "Safari": "y" + }, + "小程序": { + "微信": "y", + "阿里": "y", + "百度": "y", + "字节跳动": "y", + "QQ": "y" + }, + "快应用": { + "华为": "n", + "联盟": "n" + }, + "Vue": { + "vue2": "y", + "vue3": "y" + } + } + } + } +} diff --git a/uni_modules/uni-scss/readme.md b/uni_modules/uni-scss/readme.md new file mode 100644 index 0000000..b7d1c25 --- /dev/null +++ b/uni_modules/uni-scss/readme.md @@ -0,0 +1,4 @@ +`uni-sass` 是 `uni-ui`提供的一套全局样式 ,通过一些简单的类名和`sass`变量,实现简单的页面布局操作,比如颜色、边距、圆角等。 + +### [查看文档](https://uniapp.dcloud.io/component/uniui/uni-sass) +#### 如使用过程中有任何问题,或者您对uni-ui有一些好的建议,欢迎加入 uni-ui 交流群:871950839 \ No newline at end of file diff --git a/uni_modules/uni-scss/styles/index.scss b/uni_modules/uni-scss/styles/index.scss new file mode 100644 index 0000000..ffac4fe --- /dev/null +++ b/uni_modules/uni-scss/styles/index.scss @@ -0,0 +1,7 @@ +@import './setting/_variables.scss'; +@import './setting/_border.scss'; +@import './setting/_color.scss'; +@import './setting/_space.scss'; +@import './setting/_radius.scss'; +@import './setting/_text.scss'; +@import './setting/_styles.scss'; diff --git a/uni_modules/uni-scss/styles/setting/_border.scss b/uni_modules/uni-scss/styles/setting/_border.scss new file mode 100644 index 0000000..12a11c3 --- /dev/null +++ b/uni_modules/uni-scss/styles/setting/_border.scss @@ -0,0 +1,3 @@ +.uni-border { + border: 1px $uni-border-1 solid; +} \ No newline at end of file diff --git a/uni_modules/uni-scss/styles/setting/_color.scss b/uni_modules/uni-scss/styles/setting/_color.scss new file mode 100644 index 0000000..1ededd9 --- /dev/null +++ b/uni_modules/uni-scss/styles/setting/_color.scss @@ -0,0 +1,66 @@ + +// TODO 暂时不需要 class ,需要用户使用变量实现 ,如果使用类名其实并不推荐 +// @mixin get-styles($k,$c) { +// @if $k == size or $k == weight{ +// font-#{$k}:#{$c} +// }@else{ +// #{$k}:#{$c} +// } +// } +$uni-ui-color:( + // 主色 + primary: $uni-primary, + primary-disable: $uni-primary-disable, + primary-light: $uni-primary-light, + // 辅助色 + success: $uni-success, + success-disable: $uni-success-disable, + success-light: $uni-success-light, + warning: $uni-warning, + warning-disable: $uni-warning-disable, + warning-light: $uni-warning-light, + error: $uni-error, + error-disable: $uni-error-disable, + error-light: $uni-error-light, + info: $uni-info, + info-disable: $uni-info-disable, + info-light: $uni-info-light, + // 中性色 + main-color: $uni-main-color, + base-color: $uni-base-color, + secondary-color: $uni-secondary-color, + extra-color: $uni-extra-color, + // 背景色 + bg-color: $uni-bg-color, + // 边框颜色 + border-1: $uni-border-1, + border-2: $uni-border-2, + border-3: $uni-border-3, + border-4: $uni-border-4, + // 黑色 + black:$uni-black, + // 白色 + white:$uni-white, + // 透明 + transparent:$uni-transparent +) !default; +@each $key, $child in $uni-ui-color { + .uni-#{"" + $key} { + color: $child; + } + .uni-#{"" + $key}-bg { + background-color: $child; + } +} +.uni-shadow-sm { + box-shadow: $uni-shadow-sm; +} +.uni-shadow-base { + box-shadow: $uni-shadow-base; +} +.uni-shadow-lg { + box-shadow: $uni-shadow-lg; +} +.uni-mask { + background-color:$uni-mask; +} diff --git a/uni_modules/uni-scss/styles/setting/_radius.scss b/uni_modules/uni-scss/styles/setting/_radius.scss new file mode 100644 index 0000000..9a0428b --- /dev/null +++ b/uni_modules/uni-scss/styles/setting/_radius.scss @@ -0,0 +1,55 @@ +@mixin radius($r,$d:null ,$important: false){ + $radius-value:map-get($uni-radius, $r) if($important, !important, null); + // Key exists within the $uni-radius variable + @if (map-has-key($uni-radius, $r) and $d){ + @if $d == t { + border-top-left-radius:$radius-value; + border-top-right-radius:$radius-value; + }@else if $d == r { + border-top-right-radius:$radius-value; + border-bottom-right-radius:$radius-value; + }@else if $d == b { + border-bottom-left-radius:$radius-value; + border-bottom-right-radius:$radius-value; + }@else if $d == l { + border-top-left-radius:$radius-value; + border-bottom-left-radius:$radius-value; + }@else if $d == tl { + border-top-left-radius:$radius-value; + }@else if $d == tr { + border-top-right-radius:$radius-value; + }@else if $d == br { + border-bottom-right-radius:$radius-value; + }@else if $d == bl { + border-bottom-left-radius:$radius-value; + } + }@else{ + border-radius:$radius-value; + } +} + +@each $key, $child in $uni-radius { + @if($key){ + .uni-radius-#{"" + $key} { + @include radius($key) + } + }@else{ + .uni-radius { + @include radius($key) + } + } +} + +@each $direction in t, r, b, l,tl, tr, br, bl { + @each $key, $child in $uni-radius { + @if($key){ + .uni-radius-#{"" + $direction}-#{"" + $key} { + @include radius($key,$direction,false) + } + }@else{ + .uni-radius-#{$direction} { + @include radius($key,$direction,false) + } + } + } +} diff --git a/uni_modules/uni-scss/styles/setting/_space.scss b/uni_modules/uni-scss/styles/setting/_space.scss new file mode 100644 index 0000000..3c89528 --- /dev/null +++ b/uni_modules/uni-scss/styles/setting/_space.scss @@ -0,0 +1,56 @@ + +@mixin fn($space,$direction,$size,$n) { + @if $n { + #{$space}-#{$direction}: #{$size*$uni-space-root}px + } @else { + #{$space}-#{$direction}: #{-$size*$uni-space-root}px + } +} +@mixin get-styles($direction,$i,$space,$n){ + @if $direction == t { + @include fn($space, top,$i,$n); + } + @if $direction == r { + @include fn($space, right,$i,$n); + } + @if $direction == b { + @include fn($space, bottom,$i,$n); + } + @if $direction == l { + @include fn($space, left,$i,$n); + } + @if $direction == x { + @include fn($space, left,$i,$n); + @include fn($space, right,$i,$n); + } + @if $direction == y { + @include fn($space, top,$i,$n); + @include fn($space, bottom,$i,$n); + } + @if $direction == a { + @if $n { + #{$space}:#{$i*$uni-space-root}px; + } @else { + #{$space}:#{-$i*$uni-space-root}px; + } + } +} + +@each $orientation in m,p { + $space: margin; + @if $orientation == m { + $space: margin; + } @else { + $space: padding; + } + @for $i from 0 through 16 { + @each $direction in t, r, b, l, x, y, a { + .uni-#{$orientation}#{$direction}-#{$i} { + @include get-styles($direction,$i,$space,true); + } + .uni-#{$orientation}#{$direction}-n#{$i} { + @include get-styles($direction,$i,$space,false); + } + } + } +} \ No newline at end of file diff --git a/uni_modules/uni-scss/styles/setting/_styles.scss b/uni_modules/uni-scss/styles/setting/_styles.scss new file mode 100644 index 0000000..689afec --- /dev/null +++ b/uni_modules/uni-scss/styles/setting/_styles.scss @@ -0,0 +1,167 @@ +/* #ifndef APP-NVUE */ + +$-color-white:#fff; +$-color-black:#000; +@mixin base-style($color) { + color: #fff; + background-color: $color; + border-color: mix($-color-black, $color, 8%); + &:not([hover-class]):active { + background: mix($-color-black, $color, 10%); + border-color: mix($-color-black, $color, 20%); + color: $-color-white; + outline: none; + } +} +@mixin is-color($color) { + @include base-style($color); + &[loading] { + @include base-style($color); + &::before { + margin-right:5px; + } + } + &[disabled] { + &, + &[loading], + &:not([hover-class]):active { + color: $-color-white; + border-color: mix(darken($color,10%), $-color-white); + background-color: mix($color, $-color-white); + } + } + +} +@mixin base-plain-style($color) { + color:$color; + background-color: mix($-color-white, $color, 90%); + border-color: mix($-color-white, $color, 70%); + &:not([hover-class]):active { + background: mix($-color-white, $color, 80%); + color: $color; + outline: none; + border-color: mix($-color-white, $color, 50%); + } +} +@mixin is-plain($color){ + &[plain] { + @include base-plain-style($color); + &[loading] { + @include base-plain-style($color); + &::before { + margin-right:5px; + } + } + &[disabled] { + &, + &:active { + color: mix($-color-white, $color, 40%); + background-color: mix($-color-white, $color, 90%); + border-color: mix($-color-white, $color, 80%); + } + } + } +} + + +.uni-btn { + margin: 5px; + color: #393939; + border:1px solid #ccc; + font-size: 16px; + font-weight: 200; + background-color: #F9F9F9; + // TODO 暂时处理边框隐藏一边的问题 + overflow: visible; + &::after{ + border: none; + } + + &:not([type]),&[type=default] { + color: #999; + &[loading] { + background: none; + &::before { + margin-right:5px; + } + } + + + + &[disabled]{ + color: mix($-color-white, #999, 60%); + &, + &[loading], + &:active { + color: mix($-color-white, #999, 60%); + background-color: mix($-color-white,$-color-black , 98%); + border-color: mix($-color-white, #999, 85%); + } + } + + &[plain] { + color: #999; + background: none; + border-color: $uni-border-1; + &:not([hover-class]):active { + background: none; + color: mix($-color-white, $-color-black, 80%); + border-color: mix($-color-white, $-color-black, 90%); + outline: none; + } + &[disabled]{ + &, + &[loading], + &:active { + background: none; + color: mix($-color-white, #999, 60%); + border-color: mix($-color-white, #999, 85%); + } + } + } + } + + &:not([hover-class]):active { + color: mix($-color-white, $-color-black, 50%); + } + + &[size=mini] { + font-size: 16px; + font-weight: 200; + border-radius: 8px; + } + + + + &.uni-btn-small { + font-size: 14px; + } + &.uni-btn-mini { + font-size: 12px; + } + + &.uni-btn-radius { + border-radius: 999px; + } + &[type=primary] { + @include is-color($uni-primary); + @include is-plain($uni-primary) + } + &[type=success] { + @include is-color($uni-success); + @include is-plain($uni-success) + } + &[type=error] { + @include is-color($uni-error); + @include is-plain($uni-error) + } + &[type=warning] { + @include is-color($uni-warning); + @include is-plain($uni-warning) + } + &[type=info] { + @include is-color($uni-info); + @include is-plain($uni-info) + } +} +/* #endif */ diff --git a/uni_modules/uni-scss/styles/setting/_text.scss b/uni_modules/uni-scss/styles/setting/_text.scss new file mode 100644 index 0000000..a34d08f --- /dev/null +++ b/uni_modules/uni-scss/styles/setting/_text.scss @@ -0,0 +1,24 @@ +@mixin get-styles($k,$c) { + @if $k == size or $k == weight{ + font-#{$k}:#{$c} + }@else{ + #{$k}:#{$c} + } +} + +@each $key, $child in $uni-headings { + /* #ifndef APP-NVUE */ + .uni-#{$key} { + @each $k, $c in $child { + @include get-styles($k,$c) + } + } + /* #endif */ + /* #ifdef APP-NVUE */ + .container .uni-#{$key} { + @each $k, $c in $child { + @include get-styles($k,$c) + } + } + /* #endif */ +} diff --git a/uni_modules/uni-scss/styles/setting/_variables.scss b/uni_modules/uni-scss/styles/setting/_variables.scss new file mode 100644 index 0000000..557d3d7 --- /dev/null +++ b/uni_modules/uni-scss/styles/setting/_variables.scss @@ -0,0 +1,146 @@ +// @use "sass:math"; +@import '../tools/functions.scss'; +// 间距基础倍数 +$uni-space-root: 2 !default; +// 边框半径默认值 +$uni-radius-root:5px !default; +$uni-radius: () !default; +// 边框半径断点 +$uni-radius: map-deep-merge( + ( + 0: 0, + // TODO 当前版本暂时不支持 sm 属性 + // 'sm': math.div($uni-radius-root, 2), + null: $uni-radius-root, + 'lg': $uni-radius-root * 2, + 'xl': $uni-radius-root * 6, + 'pill': 9999px, + 'circle': 50% + ), + $uni-radius +); +// 字体家族 +$body-font-family: 'Roboto', sans-serif !default; +// 文本 +$heading-font-family: $body-font-family !default; +$uni-headings: () !default; +$letterSpacing: -0.01562em; +$uni-headings: map-deep-merge( + ( + 'h1': ( + size: 32px, + weight: 300, + line-height: 50px, + // letter-spacing:-0.01562em + ), + 'h2': ( + size: 28px, + weight: 300, + line-height: 40px, + // letter-spacing: -0.00833em + ), + 'h3': ( + size: 24px, + weight: 400, + line-height: 32px, + // letter-spacing: normal + ), + 'h4': ( + size: 20px, + weight: 400, + line-height: 30px, + // letter-spacing: 0.00735em + ), + 'h5': ( + size: 16px, + weight: 400, + line-height: 24px, + // letter-spacing: normal + ), + 'h6': ( + size: 14px, + weight: 500, + line-height: 18px, + // letter-spacing: 0.0125em + ), + 'subtitle': ( + size: 12px, + weight: 400, + line-height: 20px, + // letter-spacing: 0.00937em + ), + 'body': ( + font-size: 14px, + font-weight: 400, + line-height: 22px, + // letter-spacing: 0.03125em + ), + 'caption': ( + 'size': 12px, + 'weight': 400, + 'line-height': 20px, + // 'letter-spacing': 0.03333em, + // 'text-transform': false + ) + ), + $uni-headings +); + + + +// 主色 +$uni-primary: #2979ff !default; +$uni-primary-disable:lighten($uni-primary,20%) !default; +$uni-primary-light: lighten($uni-primary,25%) !default; + +// 辅助色 +// 除了主色外的场景色,需要在不同的场景中使用(例如危险色表示危险的操作)。 +$uni-success: #18bc37 !default; +$uni-success-disable:lighten($uni-success,20%) !default; +$uni-success-light: lighten($uni-success,25%) !default; + +$uni-warning: #f3a73f !default; +$uni-warning-disable:lighten($uni-warning,20%) !default; +$uni-warning-light: lighten($uni-warning,25%) !default; + +$uni-error: #e43d33 !default; +$uni-error-disable:lighten($uni-error,20%) !default; +$uni-error-light: lighten($uni-error,25%) !default; + +$uni-info: #8f939c !default; +$uni-info-disable:lighten($uni-info,20%) !default; +$uni-info-light: lighten($uni-info,25%) !default; + +// 中性色 +// 中性色用于文本、背景和边框颜色。通过运用不同的中性色,来表现层次结构。 +$uni-main-color: #3a3a3a !default; // 主要文字 +$uni-base-color: #6a6a6a !default; // 常规文字 +$uni-secondary-color: #909399 !default; // 次要文字 +$uni-extra-color: #c7c7c7 !default; // 辅助说明 + +// 边框颜色 +$uni-border-1: #F0F0F0 !default; +$uni-border-2: #EDEDED !default; +$uni-border-3: #DCDCDC !default; +$uni-border-4: #B9B9B9 !default; + +// 常规色 +$uni-black: #000000 !default; +$uni-white: #ffffff !default; +$uni-transparent: rgba($color: #000000, $alpha: 0) !default; + +// 背景色 +$uni-bg-color: #f7f7f7 !default; + +/* 水平间距 */ +$uni-spacing-sm: 8px !default; +$uni-spacing-base: 15px !default; +$uni-spacing-lg: 30px !default; + +// 阴影 +$uni-shadow-sm:0 0 5px rgba($color: #d8d8d8, $alpha: 0.5) !default; +$uni-shadow-base:0 1px 8px 1px rgba($color: #a5a5a5, $alpha: 0.2) !default; +$uni-shadow-lg:0px 1px 10px 2px rgba($color: #a5a4a4, $alpha: 0.5) !default; + +// 蒙版 +$uni-mask: rgba($color: #000000, $alpha: 0.4) !default; diff --git a/uni_modules/uni-scss/styles/tools/functions.scss b/uni_modules/uni-scss/styles/tools/functions.scss new file mode 100644 index 0000000..ac6f63e --- /dev/null +++ b/uni_modules/uni-scss/styles/tools/functions.scss @@ -0,0 +1,19 @@ +// 合并 map +@function map-deep-merge($parent-map, $child-map){ + $result: $parent-map; + @each $key, $child in $child-map { + $parent-has-key: map-has-key($result, $key); + $parent-value: map-get($result, $key); + $parent-type: type-of($parent-value); + $child-type: type-of($child); + $parent-is-map: $parent-type == map; + $child-is-map: $child-type == map; + + @if (not $parent-has-key) or ($parent-type != $child-type) or (not ($parent-is-map and $child-is-map)){ + $result: map-merge($result, ( $key: $child )); + }@else { + $result: map-merge($result, ( $key: map-deep-merge($parent-value, $child) )); + } + } + @return $result; +}; diff --git a/uni_modules/uni-scss/theme.scss b/uni_modules/uni-scss/theme.scss new file mode 100644 index 0000000..80ee62f --- /dev/null +++ b/uni_modules/uni-scss/theme.scss @@ -0,0 +1,31 @@ +// 间距基础倍数 +$uni-space-root: 2; +// 边框半径默认值 +$uni-radius-root:5px; +// 主色 +$uni-primary: #2979ff; +// 辅助色 +$uni-success: #4cd964; +// 警告色 +$uni-warning: #f0ad4e; +// 错误色 +$uni-error: #dd524d; +// 描述色 +$uni-info: #909399; +// 中性色 +$uni-main-color: #303133; +$uni-base-color: #606266; +$uni-secondary-color: #909399; +$uni-extra-color: #C0C4CC; +// 背景色 +$uni-bg-color: #f5f5f5; +// 边框颜色 +$uni-border-1: #DCDFE6; +$uni-border-2: #E4E7ED; +$uni-border-3: #EBEEF5; +$uni-border-4: #F2F6FC; + +// 常规色 +$uni-black: #000000; +$uni-white: #ffffff; +$uni-transparent: rgba($color: #000000, $alpha: 0); diff --git a/uni_modules/uni-scss/variables.scss b/uni_modules/uni-scss/variables.scss new file mode 100644 index 0000000..1c062d4 --- /dev/null +++ b/uni_modules/uni-scss/variables.scss @@ -0,0 +1,62 @@ +@import './styles/setting/_variables.scss'; +// 间距基础倍数 +$uni-space-root: 2; +// 边框半径默认值 +$uni-radius-root:5px; + +// 主色 +$uni-primary: #2979ff; +$uni-primary-disable:mix(#fff,$uni-primary,50%); +$uni-primary-light: mix(#fff,$uni-primary,80%); + +// 辅助色 +// 除了主色外的场景色,需要在不同的场景中使用(例如危险色表示危险的操作)。 +$uni-success: #18bc37; +$uni-success-disable:mix(#fff,$uni-success,50%); +$uni-success-light: mix(#fff,$uni-success,80%); + +$uni-warning: #f3a73f; +$uni-warning-disable:mix(#fff,$uni-warning,50%); +$uni-warning-light: mix(#fff,$uni-warning,80%); + +$uni-error: #e43d33; +$uni-error-disable:mix(#fff,$uni-error,50%); +$uni-error-light: mix(#fff,$uni-error,80%); + +$uni-info: #8f939c; +$uni-info-disable:mix(#fff,$uni-info,50%); +$uni-info-light: mix(#fff,$uni-info,80%); + +// 中性色 +// 中性色用于文本、背景和边框颜色。通过运用不同的中性色,来表现层次结构。 +$uni-main-color: #3a3a3a; // 主要文字 +$uni-base-color: #6a6a6a; // 常规文字 +$uni-secondary-color: #909399; // 次要文字 +$uni-extra-color: #c7c7c7; // 辅助说明 + +// 边框颜色 +$uni-border-1: #F0F0F0; +$uni-border-2: #EDEDED; +$uni-border-3: #DCDCDC; +$uni-border-4: #B9B9B9; + +// 常规色 +$uni-black: #000000; +$uni-white: #ffffff; +$uni-transparent: rgba($color: #000000, $alpha: 0); + +// 背景色 +$uni-bg-color: #f7f7f7; + +/* 水平间距 */ +$uni-spacing-sm: 8px; +$uni-spacing-base: 15px; +$uni-spacing-lg: 30px; + +// 阴影 +$uni-shadow-sm:0 0 5px rgba($color: #d8d8d8, $alpha: 0.5); +$uni-shadow-base:0 1px 8px 1px rgba($color: #a5a5a5, $alpha: 0.2); +$uni-shadow-lg:0px 1px 10px 2px rgba($color: #a5a4a4, $alpha: 0.5); + +// 蒙版 +$uni-mask: rgba($color: #000000, $alpha: 0.4); diff --git a/version.json b/version.json new file mode 100644 index 0000000..8a673a6 --- /dev/null +++ b/version.json @@ -0,0 +1,6 @@ +{ + "siteroot": "https://citydev.weliam.com.cn", + "uniacid": "1", + "name": "weliam_smartcity", + "weliamv": "1.0.0" +} diff --git a/vuex/LICENSE b/vuex/LICENSE new file mode 100644 index 0000000..478332a --- /dev/null +++ b/vuex/LICENSE @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) 2015-2016 Evan You + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/vuex/README.md b/vuex/README.md new file mode 100644 index 0000000..37e6c5e --- /dev/null +++ b/vuex/README.md @@ -0,0 +1,29 @@ +# Vuex [![Build Status](https://circleci.com/gh/vuejs/vuex/tree/dev.png?style=shield)](https://circleci.com/gh/vuejs/vuex) + +> Centralized State Management for Vue.js. + +

+ +

+ +- [What is Vuex?](http://vuex.vuejs.org/en/intro.html) +- [Full Documentation](http://vuex.vuejs.org/) + +## Examples + +- [Counter](https://github.com/vuejs/vuex/tree/dev/examples/counter) +- [Counter with Hot Reload](https://github.com/vuejs/vuex/tree/dev/examples/counter-hot) +- [TodoMVC](https://github.com/vuejs/vuex/tree/dev/examples/todomvc) +- [Flux Chat](https://github.com/vuejs/vuex/tree/dev/examples/chat) +- [Shopping Cart](https://github.com/vuejs/vuex/tree/dev/examples/shopping-cart) + +Running the examples: + +``` bash +$ npm install +$ npm run dev # serve examples at localhost:8080 +``` + +## License + +[MIT](http://opensource.org/licenses/MIT) diff --git a/vuex/dist/logger.d.ts b/vuex/dist/logger.d.ts new file mode 100644 index 0000000..9863e85 --- /dev/null +++ b/vuex/dist/logger.d.ts @@ -0,0 +1,15 @@ +/** + * Types for the logger plugin. + * This file must be put alongside the JavaScript file of the logger. + */ + +import { Payload, Plugin } from "../types/index"; + +export interface LoggerOption { + collapsed?: boolean; + filter?:

(mutation: P, stateBefore: S, stateAfter: S) => boolean; + transformer?: (state: S) => any; + mutationTransformer?:

(mutation: P) => any; +} + +export default function createLogger(option: LoggerOption): Plugin; diff --git a/vuex/dist/logger.js b/vuex/dist/logger.js new file mode 100644 index 0000000..1a551e0 --- /dev/null +++ b/vuex/dist/logger.js @@ -0,0 +1,122 @@ +(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() : + typeof define === 'function' && define.amd ? define(factory) : + (global.createVuexLogger = factory()); +}(this, (function () { 'use strict'; + +/** + * Get the first item that pass the test + * by second argument function + * + * @param {Array} list + * @param {Function} f + * @return {*} + */ +function find (list, f) { + return list.filter(f)[0] +} + +/** + * Deep copy the given object considering circular structure. + * This function caches all nested objects and its copies. + * If it detects circular structure, use cached copy to avoid infinite loop. + * + * @param {*} obj + * @param {Array} cache + * @return {*} + */ +function deepCopy (obj, cache) { + if ( cache === void 0 ) cache = []; + + // just return if obj is immutable value + if (obj === null || typeof obj !== 'object') { + return obj + } + + // if obj is hit, it is in circular structure + var hit = find(cache, function (c) { return c.original === obj; }); + if (hit) { + return hit.copy + } + + var copy = Array.isArray(obj) ? [] : {}; + // put the copy into cache at first + // because we want to refer it in recursive deepCopy + cache.push({ + original: obj, + copy: copy + }); + + Object.keys(obj).forEach(function (key) { + copy[key] = deepCopy(obj[key], cache); + }); + + return copy +} + +/** + * forEach for object + */ + +// Credits: borrowed code from fcomb/redux-logger + +function createLogger (ref) { + if ( ref === void 0 ) ref = {}; + var collapsed = ref.collapsed; if ( collapsed === void 0 ) collapsed = true; + var filter = ref.filter; if ( filter === void 0 ) filter = function (mutation, stateBefore, stateAfter) { return true; }; + var transformer = ref.transformer; if ( transformer === void 0 ) transformer = function (state) { return state; }; + var mutationTransformer = ref.mutationTransformer; if ( mutationTransformer === void 0 ) mutationTransformer = function (mut) { return mut; }; + var logger = ref.logger; if ( logger === void 0 ) logger = console; + + return function (store) { + var prevState = deepCopy(store.state); + + store.subscribe(function (mutation, state) { + if (typeof logger === 'undefined') { + return + } + var nextState = deepCopy(state); + + if (filter(mutation, prevState, nextState)) { + var time = new Date(); + var formattedTime = " @ " + (pad(time.getHours(), 2)) + ":" + (pad(time.getMinutes(), 2)) + ":" + (pad(time.getSeconds(), 2)) + "." + (pad(time.getMilliseconds(), 3)); + var formattedMutation = mutationTransformer(mutation); + var message = "mutation " + (mutation.type) + formattedTime; + var startMessage = collapsed + ? logger.groupCollapsed + : logger.group; + + // render + try { + startMessage.call(logger, message); + } catch (e) { + console.log(message); + } + + logger.log('%c prev state', 'color: #9E9E9E; font-weight: bold', transformer(prevState)); + logger.log('%c mutation', 'color: #03A9F4; font-weight: bold', formattedMutation); + logger.log('%c next state', 'color: #4CAF50; font-weight: bold', transformer(nextState)); + + try { + logger.groupEnd(); + } catch (e) { + logger.log('—— log end ——'); + } + } + + prevState = nextState; + }); + } +} + +function repeat (str, times) { + return (new Array(times + 1)).join(str) +} + +function pad (num, maxLength) { + return repeat('0', maxLength - num.toString().length) + num +} + +return createLogger; + +}))); diff --git a/vuex/dist/vuex.common.js b/vuex/dist/vuex.common.js new file mode 100644 index 0000000..8a0b2ab --- /dev/null +++ b/vuex/dist/vuex.common.js @@ -0,0 +1,932 @@ +/** + * vuex v3.0.1 + * (c) 2017 Evan You + * @license MIT + */ +'use strict'; + +var applyMixin = function (Vue) { + var version = Number(Vue.version.split('.')[0]); + + if (version >= 2) { + Vue.mixin({ beforeCreate: vuexInit }); + } else { + // override init and inject vuex init procedure + // for 1.x backwards compatibility. + var _init = Vue.prototype._init; + Vue.prototype._init = function (options) { + if ( options === void 0 ) options = {}; + + options.init = options.init + ? [vuexInit].concat(options.init) + : vuexInit; + _init.call(this, options); + }; + } + + /** + * Vuex init hook, injected into each instances init hooks list. + */ + + function vuexInit () { + var options = this.$options; + // store injection + if (options.store) { + this.$store = typeof options.store === 'function' + ? options.store() + : options.store; + } else if (options.parent && options.parent.$store) { + this.$store = options.parent.$store; + } + } +}; + +var devtoolHook = + typeof window !== 'undefined' && + window.__VUE_DEVTOOLS_GLOBAL_HOOK__; + +function devtoolPlugin (store) { + if (!devtoolHook) { return } + + store._devtoolHook = devtoolHook; + + devtoolHook.emit('vuex:init', store); + + devtoolHook.on('vuex:travel-to-state', function (targetState) { + store.replaceState(targetState); + }); + + store.subscribe(function (mutation, state) { + devtoolHook.emit('vuex:mutation', mutation, state); + }); +} + +/** + * Get the first item that pass the test + * by second argument function + * + * @param {Array} list + * @param {Function} f + * @return {*} + */ +/** + * Deep copy the given object considering circular structure. + * This function caches all nested objects and its copies. + * If it detects circular structure, use cached copy to avoid infinite loop. + * + * @param {*} obj + * @param {Array} cache + * @return {*} + */ + + +/** + * forEach for object + */ +function forEachValue (obj, fn) { + Object.keys(obj).forEach(function (key) { return fn(obj[key], key); }); +} + +function isObject (obj) { + return obj !== null && typeof obj === 'object' +} + +function isPromise (val) { + return val && typeof val.then === 'function' +} + +function assert (condition, msg) { + if (!condition) { throw new Error(("[vuex] " + msg)) } +} + +var Module = function Module (rawModule, runtime) { + this.runtime = runtime; + this._children = Object.create(null); + this._rawModule = rawModule; + var rawState = rawModule.state; + this.state = (typeof rawState === 'function' ? rawState() : rawState) || {}; +}; + +var prototypeAccessors$1 = { namespaced: { configurable: true } }; + +prototypeAccessors$1.namespaced.get = function () { + return !!this._rawModule.namespaced +}; + +Module.prototype.addChild = function addChild (key, module) { + this._children[key] = module; +}; + +Module.prototype.removeChild = function removeChild (key) { + delete this._children[key]; +}; + +Module.prototype.getChild = function getChild (key) { + return this._children[key] +}; + +Module.prototype.update = function update (rawModule) { + this._rawModule.namespaced = rawModule.namespaced; + if (rawModule.actions) { + this._rawModule.actions = rawModule.actions; + } + if (rawModule.mutations) { + this._rawModule.mutations = rawModule.mutations; + } + if (rawModule.getters) { + this._rawModule.getters = rawModule.getters; + } +}; + +Module.prototype.forEachChild = function forEachChild (fn) { + forEachValue(this._children, fn); +}; + +Module.prototype.forEachGetter = function forEachGetter (fn) { + if (this._rawModule.getters) { + forEachValue(this._rawModule.getters, fn); + } +}; + +Module.prototype.forEachAction = function forEachAction (fn) { + if (this._rawModule.actions) { + forEachValue(this._rawModule.actions, fn); + } +}; + +Module.prototype.forEachMutation = function forEachMutation (fn) { + if (this._rawModule.mutations) { + forEachValue(this._rawModule.mutations, fn); + } +}; + +Object.defineProperties( Module.prototype, prototypeAccessors$1 ); + +var ModuleCollection = function ModuleCollection (rawRootModule) { + // register root module (Vuex.Store options) + this.register([], rawRootModule, false); +}; + +ModuleCollection.prototype.get = function get (path) { + return path.reduce(function (module, key) { + return module.getChild(key) + }, this.root) +}; + +ModuleCollection.prototype.getNamespace = function getNamespace (path) { + var module = this.root; + return path.reduce(function (namespace, key) { + module = module.getChild(key); + return namespace + (module.namespaced ? key + '/' : '') + }, '') +}; + +ModuleCollection.prototype.update = function update$1 (rawRootModule) { + update([], this.root, rawRootModule); +}; + +ModuleCollection.prototype.register = function register (path, rawModule, runtime) { + var this$1 = this; + if ( runtime === void 0 ) runtime = true; + + if (process.env.NODE_ENV !== 'production') { + assertRawModule(path, rawModule); + } + + var newModule = new Module(rawModule, runtime); + if (path.length === 0) { + this.root = newModule; + } else { + var parent = this.get(path.slice(0, -1)); + parent.addChild(path[path.length - 1], newModule); + } + + // register nested modules + if (rawModule.modules) { + forEachValue(rawModule.modules, function (rawChildModule, key) { + this$1.register(path.concat(key), rawChildModule, runtime); + }); + } +}; + +ModuleCollection.prototype.unregister = function unregister (path) { + var parent = this.get(path.slice(0, -1)); + var key = path[path.length - 1]; + if (!parent.getChild(key).runtime) { return } + + parent.removeChild(key); +}; + +function update (path, targetModule, newModule) { + if (process.env.NODE_ENV !== 'production') { + assertRawModule(path, newModule); + } + + // update target module + targetModule.update(newModule); + + // update nested modules + if (newModule.modules) { + for (var key in newModule.modules) { + if (!targetModule.getChild(key)) { + if (process.env.NODE_ENV !== 'production') { + console.warn( + "[vuex] trying to add a new module '" + key + "' on hot reloading, " + + 'manual reload is needed' + ); + } + return + } + update( + path.concat(key), + targetModule.getChild(key), + newModule.modules[key] + ); + } + } +} + +var functionAssert = { + assert: function (value) { return typeof value === 'function'; }, + expected: 'function' +}; + +var objectAssert = { + assert: function (value) { return typeof value === 'function' || + (typeof value === 'object' && typeof value.handler === 'function'); }, + expected: 'function or object with "handler" function' +}; + +var assertTypes = { + getters: functionAssert, + mutations: functionAssert, + actions: objectAssert +}; + +function assertRawModule (path, rawModule) { + Object.keys(assertTypes).forEach(function (key) { + if (!rawModule[key]) { return } + + var assertOptions = assertTypes[key]; + + forEachValue(rawModule[key], function (value, type) { + assert( + assertOptions.assert(value), + makeAssertionMessage(path, key, type, value, assertOptions.expected) + ); + }); + }); +} + +function makeAssertionMessage (path, key, type, value, expected) { + var buf = key + " should be " + expected + " but \"" + key + "." + type + "\""; + if (path.length > 0) { + buf += " in module \"" + (path.join('.')) + "\""; + } + buf += " is " + (JSON.stringify(value)) + "."; + return buf +} + +var Vue; // bind on install + +var Store = function Store (options) { + var this$1 = this; + if ( options === void 0 ) options = {}; + + // Auto install if it is not done yet and `window` has `Vue`. + // To allow users to avoid auto-installation in some cases, + // this code should be placed here. See #731 + if (!Vue && typeof window !== 'undefined' && window.Vue) { + install(window.Vue); + } + + if (process.env.NODE_ENV !== 'production') { + assert(Vue, "must call Vue.use(Vuex) before creating a store instance."); + assert(typeof Promise !== 'undefined', "vuex requires a Promise polyfill in this browser."); + assert(this instanceof Store, "Store must be called with the new operator."); + } + + var plugins = options.plugins; if ( plugins === void 0 ) plugins = []; + var strict = options.strict; if ( strict === void 0 ) strict = false; + + var state = options.state; if ( state === void 0 ) state = {}; + if (typeof state === 'function') { + state = state() || {}; + } + + // store internal state + this._committing = false; + this._actions = Object.create(null); + this._actionSubscribers = []; + this._mutations = Object.create(null); + this._wrappedGetters = Object.create(null); + this._modules = new ModuleCollection(options); + this._modulesNamespaceMap = Object.create(null); + this._subscribers = []; + this._watcherVM = new Vue(); + + // bind commit and dispatch to self + var store = this; + var ref = this; + var dispatch = ref.dispatch; + var commit = ref.commit; + this.dispatch = function boundDispatch (type, payload) { + return dispatch.call(store, type, payload) + }; + this.commit = function boundCommit (type, payload, options) { + return commit.call(store, type, payload, options) + }; + + // strict mode + this.strict = strict; + + // init root module. + // this also recursively registers all sub-modules + // and collects all module getters inside this._wrappedGetters + installModule(this, state, [], this._modules.root); + + // initialize the store vm, which is responsible for the reactivity + // (also registers _wrappedGetters as computed properties) + resetStoreVM(this, state); + + // apply plugins + plugins.forEach(function (plugin) { return plugin(this$1); }); + + if (Vue.config.devtools) { + devtoolPlugin(this); + } +}; + +var prototypeAccessors = { state: { configurable: true } }; + +prototypeAccessors.state.get = function () { + return this._vm._data.$$state +}; + +prototypeAccessors.state.set = function (v) { + if (process.env.NODE_ENV !== 'production') { + assert(false, "Use store.replaceState() to explicit replace store state."); + } +}; + +Store.prototype.commit = function commit (_type, _payload, _options) { + var this$1 = this; + + // check object-style commit + var ref = unifyObjectStyle(_type, _payload, _options); + var type = ref.type; + var payload = ref.payload; + var options = ref.options; + + var mutation = { type: type, payload: payload }; + var entry = this._mutations[type]; + if (!entry) { + if (process.env.NODE_ENV !== 'production') { + console.error(("[vuex] unknown mutation type: " + type)); + } + return + } + this._withCommit(function () { + entry.forEach(function commitIterator (handler) { + handler(payload); + }); + }); + this._subscribers.forEach(function (sub) { return sub(mutation, this$1.state); }); + + if ( + process.env.NODE_ENV !== 'production' && + options && options.silent + ) { + console.warn( + "[vuex] mutation type: " + type + ". Silent option has been removed. " + + 'Use the filter functionality in the vue-devtools' + ); + } +}; + +Store.prototype.dispatch = function dispatch (_type, _payload) { + var this$1 = this; + + // check object-style dispatch + var ref = unifyObjectStyle(_type, _payload); + var type = ref.type; + var payload = ref.payload; + + var action = { type: type, payload: payload }; + var entry = this._actions[type]; + if (!entry) { + if (process.env.NODE_ENV !== 'production') { + console.error(("[vuex] unknown action type: " + type)); + } + return + } + + this._actionSubscribers.forEach(function (sub) { return sub(action, this$1.state); }); + + return entry.length > 1 + ? Promise.all(entry.map(function (handler) { return handler(payload); })) + : entry[0](payload) +}; + +Store.prototype.subscribe = function subscribe (fn) { + return genericSubscribe(fn, this._subscribers) +}; + +Store.prototype.subscribeAction = function subscribeAction (fn) { + return genericSubscribe(fn, this._actionSubscribers) +}; + +Store.prototype.watch = function watch (getter, cb, options) { + var this$1 = this; + + if (process.env.NODE_ENV !== 'production') { + assert(typeof getter === 'function', "store.watch only accepts a function."); + } + return this._watcherVM.$watch(function () { return getter(this$1.state, this$1.getters); }, cb, options) +}; + +Store.prototype.replaceState = function replaceState (state) { + var this$1 = this; + + this._withCommit(function () { + this$1._vm._data.$$state = state; + }); +}; + +Store.prototype.registerModule = function registerModule (path, rawModule, options) { + if ( options === void 0 ) options = {}; + + if (typeof path === 'string') { path = [path]; } + + if (process.env.NODE_ENV !== 'production') { + assert(Array.isArray(path), "module path must be a string or an Array."); + assert(path.length > 0, 'cannot register the root module by using registerModule.'); + } + + this._modules.register(path, rawModule); + installModule(this, this.state, path, this._modules.get(path), options.preserveState); + // reset store to update getters... + resetStoreVM(this, this.state); +}; + +Store.prototype.unregisterModule = function unregisterModule (path) { + var this$1 = this; + + if (typeof path === 'string') { path = [path]; } + + if (process.env.NODE_ENV !== 'production') { + assert(Array.isArray(path), "module path must be a string or an Array."); + } + + this._modules.unregister(path); + this._withCommit(function () { + var parentState = getNestedState(this$1.state, path.slice(0, -1)); + Vue.delete(parentState, path[path.length - 1]); + }); + resetStore(this); +}; + +Store.prototype.hotUpdate = function hotUpdate (newOptions) { + this._modules.update(newOptions); + resetStore(this, true); +}; + +Store.prototype._withCommit = function _withCommit (fn) { + var committing = this._committing; + this._committing = true; + fn(); + this._committing = committing; +}; + +Object.defineProperties( Store.prototype, prototypeAccessors ); + +function genericSubscribe (fn, subs) { + if (subs.indexOf(fn) < 0) { + subs.push(fn); + } + return function () { + var i = subs.indexOf(fn); + if (i > -1) { + subs.splice(i, 1); + } + } +} + +function resetStore (store, hot) { + store._actions = Object.create(null); + store._mutations = Object.create(null); + store._wrappedGetters = Object.create(null); + store._modulesNamespaceMap = Object.create(null); + var state = store.state; + // init all modules + installModule(store, state, [], store._modules.root, true); + // reset vm + resetStoreVM(store, state, hot); +} + +function resetStoreVM (store, state, hot) { + var oldVm = store._vm; + + // bind store public getters + store.getters = {}; + var wrappedGetters = store._wrappedGetters; + var computed = {}; + forEachValue(wrappedGetters, function (fn, key) { + // use computed to leverage its lazy-caching mechanism + computed[key] = function () { return fn(store); }; + Object.defineProperty(store.getters, key, { + get: function () { return store._vm[key]; }, + enumerable: true // for local getters + }); + }); + + // use a Vue instance to store the state tree + // suppress warnings just in case the user has added + // some funky global mixins + var silent = Vue.config.silent; + Vue.config.silent = true; + store._vm = new Vue({ + data: { + $$state: state + }, + computed: computed + }); + Vue.config.silent = silent; + + // enable strict mode for new vm + if (store.strict) { + enableStrictMode(store); + } + + if (oldVm) { + if (hot) { + // dispatch changes in all subscribed watchers + // to force getter re-evaluation for hot reloading. + store._withCommit(function () { + oldVm._data.$$state = null; + }); + } + Vue.nextTick(function () { return oldVm.$destroy(); }); + } +} + +function installModule (store, rootState, path, module, hot) { + var isRoot = !path.length; + var namespace = store._modules.getNamespace(path); + + // register in namespace map + if (module.namespaced) { + store._modulesNamespaceMap[namespace] = module; + } + + // set state + if (!isRoot && !hot) { + var parentState = getNestedState(rootState, path.slice(0, -1)); + var moduleName = path[path.length - 1]; + store._withCommit(function () { + Vue.set(parentState, moduleName, module.state); + }); + } + + var local = module.context = makeLocalContext(store, namespace, path); + + module.forEachMutation(function (mutation, key) { + var namespacedType = namespace + key; + registerMutation(store, namespacedType, mutation, local); + }); + + module.forEachAction(function (action, key) { + var type = action.root ? key : namespace + key; + var handler = action.handler || action; + registerAction(store, type, handler, local); + }); + + module.forEachGetter(function (getter, key) { + var namespacedType = namespace + key; + registerGetter(store, namespacedType, getter, local); + }); + + module.forEachChild(function (child, key) { + installModule(store, rootState, path.concat(key), child, hot); + }); +} + +/** + * make localized dispatch, commit, getters and state + * if there is no namespace, just use root ones + */ +function makeLocalContext (store, namespace, path) { + var noNamespace = namespace === ''; + + var local = { + dispatch: noNamespace ? store.dispatch : function (_type, _payload, _options) { + var args = unifyObjectStyle(_type, _payload, _options); + var payload = args.payload; + var options = args.options; + var type = args.type; + + if (!options || !options.root) { + type = namespace + type; + if (process.env.NODE_ENV !== 'production' && !store._actions[type]) { + console.error(("[vuex] unknown local action type: " + (args.type) + ", global type: " + type)); + return + } + } + + return store.dispatch(type, payload) + }, + + commit: noNamespace ? store.commit : function (_type, _payload, _options) { + var args = unifyObjectStyle(_type, _payload, _options); + var payload = args.payload; + var options = args.options; + var type = args.type; + + if (!options || !options.root) { + type = namespace + type; + if (process.env.NODE_ENV !== 'production' && !store._mutations[type]) { + console.error(("[vuex] unknown local mutation type: " + (args.type) + ", global type: " + type)); + return + } + } + + store.commit(type, payload, options); + } + }; + + // getters and state object must be gotten lazily + // because they will be changed by vm update + Object.defineProperties(local, { + getters: { + get: noNamespace + ? function () { return store.getters; } + : function () { return makeLocalGetters(store, namespace); } + }, + state: { + get: function () { return getNestedState(store.state, path); } + } + }); + + return local +} + +function makeLocalGetters (store, namespace) { + var gettersProxy = {}; + + var splitPos = namespace.length; + Object.keys(store.getters).forEach(function (type) { + // skip if the target getter is not match this namespace + if (type.slice(0, splitPos) !== namespace) { return } + + // extract local getter type + var localType = type.slice(splitPos); + + // Add a port to the getters proxy. + // Define as getter property because + // we do not want to evaluate the getters in this time. + Object.defineProperty(gettersProxy, localType, { + get: function () { return store.getters[type]; }, + enumerable: true + }); + }); + + return gettersProxy +} + +function registerMutation (store, type, handler, local) { + var entry = store._mutations[type] || (store._mutations[type] = []); + entry.push(function wrappedMutationHandler (payload) { + handler.call(store, local.state, payload); + }); +} + +function registerAction (store, type, handler, local) { + var entry = store._actions[type] || (store._actions[type] = []); + entry.push(function wrappedActionHandler (payload, cb) { + var res = handler.call(store, { + dispatch: local.dispatch, + commit: local.commit, + getters: local.getters, + state: local.state, + rootGetters: store.getters, + rootState: store.state + }, payload, cb); + if (!isPromise(res)) { + res = Promise.resolve(res); + } + if (store._devtoolHook) { + return res.catch(function (err) { + store._devtoolHook.emit('vuex:error', err); + throw err + }) + } else { + return res + } + }); +} + +function registerGetter (store, type, rawGetter, local) { + if (store._wrappedGetters[type]) { + if (process.env.NODE_ENV !== 'production') { + console.error(("[vuex] duplicate getter key: " + type)); + } + return + } + store._wrappedGetters[type] = function wrappedGetter (store) { + return rawGetter( + local.state, // local state + local.getters, // local getters + store.state, // root state + store.getters // root getters + ) + }; +} + +function enableStrictMode (store) { + store._vm.$watch(function () { return this._data.$$state }, function () { + if (process.env.NODE_ENV !== 'production') { + assert(store._committing, "Do not mutate vuex store state outside mutation handlers."); + } + }, { deep: true, sync: true }); +} + +function getNestedState (state, path) { + return path.length + ? path.reduce(function (state, key) { return state[key]; }, state) + : state +} + +function unifyObjectStyle (type, payload, options) { + if (isObject(type) && type.type) { + options = payload; + payload = type; + type = type.type; + } + + if (process.env.NODE_ENV !== 'production') { + assert(typeof type === 'string', ("Expects string as the type, but found " + (typeof type) + ".")); + } + + return { type: type, payload: payload, options: options } +} + +function install (_Vue) { + if (Vue && _Vue === Vue) { + if (process.env.NODE_ENV !== 'production') { + console.error( + '[vuex] already installed. Vue.use(Vuex) should be called only once.' + ); + } + return + } + Vue = _Vue; + applyMixin(Vue); +} + +var mapState = normalizeNamespace(function (namespace, states) { + var res = {}; + normalizeMap(states).forEach(function (ref) { + var key = ref.key; + var val = ref.val; + + res[key] = function mappedState () { + var state = this.$store.state; + var getters = this.$store.getters; + if (namespace) { + var module = getModuleByNamespace(this.$store, 'mapState', namespace); + if (!module) { + return + } + state = module.context.state; + getters = module.context.getters; + } + return typeof val === 'function' + ? val.call(this, state, getters) + : state[val] + }; + // mark vuex getter for devtools + res[key].vuex = true; + }); + return res +}); + +var mapMutations = normalizeNamespace(function (namespace, mutations) { + var res = {}; + normalizeMap(mutations).forEach(function (ref) { + var key = ref.key; + var val = ref.val; + + res[key] = function mappedMutation () { + var args = [], len = arguments.length; + while ( len-- ) args[ len ] = arguments[ len ]; + + var commit = this.$store.commit; + if (namespace) { + var module = getModuleByNamespace(this.$store, 'mapMutations', namespace); + if (!module) { + return + } + commit = module.context.commit; + } + return typeof val === 'function' + ? val.apply(this, [commit].concat(args)) + : commit.apply(this.$store, [val].concat(args)) + }; + }); + return res +}); + +var mapGetters = normalizeNamespace(function (namespace, getters) { + var res = {}; + normalizeMap(getters).forEach(function (ref) { + var key = ref.key; + var val = ref.val; + + val = namespace + val; + res[key] = function mappedGetter () { + if (namespace && !getModuleByNamespace(this.$store, 'mapGetters', namespace)) { + return + } + if (process.env.NODE_ENV !== 'production' && !(val in this.$store.getters)) { + console.error(("[vuex] unknown getter: " + val)); + return + } + return this.$store.getters[val] + }; + // mark vuex getter for devtools + res[key].vuex = true; + }); + return res +}); + +var mapActions = normalizeNamespace(function (namespace, actions) { + var res = {}; + normalizeMap(actions).forEach(function (ref) { + var key = ref.key; + var val = ref.val; + + res[key] = function mappedAction () { + var args = [], len = arguments.length; + while ( len-- ) args[ len ] = arguments[ len ]; + + var dispatch = this.$store.dispatch; + if (namespace) { + var module = getModuleByNamespace(this.$store, 'mapActions', namespace); + if (!module) { + return + } + dispatch = module.context.dispatch; + } + return typeof val === 'function' + ? val.apply(this, [dispatch].concat(args)) + : dispatch.apply(this.$store, [val].concat(args)) + }; + }); + return res +}); + +var createNamespacedHelpers = function (namespace) { return ({ + mapState: mapState.bind(null, namespace), + mapGetters: mapGetters.bind(null, namespace), + mapMutations: mapMutations.bind(null, namespace), + mapActions: mapActions.bind(null, namespace) +}); }; + +function normalizeMap (map) { + return Array.isArray(map) + ? map.map(function (key) { return ({ key: key, val: key }); }) + : Object.keys(map).map(function (key) { return ({ key: key, val: map[key] }); }) +} + +function normalizeNamespace (fn) { + return function (namespace, map) { + if (typeof namespace !== 'string') { + map = namespace; + namespace = ''; + } else if (namespace.charAt(namespace.length - 1) !== '/') { + namespace += '/'; + } + return fn(namespace, map) + } +} + +function getModuleByNamespace (store, helper, namespace) { + var module = store._modulesNamespaceMap[namespace]; + if (process.env.NODE_ENV !== 'production' && !module) { + console.error(("[vuex] module namespace not found in " + helper + "(): " + namespace)); + } + return module +} + +var index = { + Store: Store, + install: install, + version: '3.0.1', + mapState: mapState, + mapMutations: mapMutations, + mapGetters: mapGetters, + mapActions: mapActions, + createNamespacedHelpers: createNamespacedHelpers +}; + +module.exports = index; diff --git a/vuex/dist/vuex.esm.js b/vuex/dist/vuex.esm.js new file mode 100644 index 0000000..bb1c596 --- /dev/null +++ b/vuex/dist/vuex.esm.js @@ -0,0 +1,931 @@ +/** + * vuex v3.0.1 + * (c) 2017 Evan You + * @license MIT + */ +var applyMixin = function (Vue) { + var version = Number(Vue.version.split('.')[0]); + + if (version >= 2) { + Vue.mixin({ beforeCreate: vuexInit }); + } else { + // override init and inject vuex init procedure + // for 1.x backwards compatibility. + var _init = Vue.prototype._init; + Vue.prototype._init = function (options) { + if ( options === void 0 ) options = {}; + + options.init = options.init + ? [vuexInit].concat(options.init) + : vuexInit; + _init.call(this, options); + }; + } + + /** + * Vuex init hook, injected into each instances init hooks list. + */ + + function vuexInit () { + var options = this.$options; + // store injection + if (options.store) { + this.$store = typeof options.store === 'function' + ? options.store() + : options.store; + } else if (options.parent && options.parent.$store) { + this.$store = options.parent.$store; + } + } +}; + +var devtoolHook = + typeof window !== 'undefined' && + window.__VUE_DEVTOOLS_GLOBAL_HOOK__; + +function devtoolPlugin (store) { + if (!devtoolHook) { return } + + store._devtoolHook = devtoolHook; + + devtoolHook.emit('vuex:init', store); + + devtoolHook.on('vuex:travel-to-state', function (targetState) { + store.replaceState(targetState); + }); + + store.subscribe(function (mutation, state) { + devtoolHook.emit('vuex:mutation', mutation, state); + }); +} + +/** + * Get the first item that pass the test + * by second argument function + * + * @param {Array} list + * @param {Function} f + * @return {*} + */ +/** + * Deep copy the given object considering circular structure. + * This function caches all nested objects and its copies. + * If it detects circular structure, use cached copy to avoid infinite loop. + * + * @param {*} obj + * @param {Array} cache + * @return {*} + */ + + +/** + * forEach for object + */ +function forEachValue (obj, fn) { + Object.keys(obj).forEach(function (key) { return fn(obj[key], key); }); +} + +function isObject (obj) { + return obj !== null && typeof obj === 'object' +} + +function isPromise (val) { + return val && typeof val.then === 'function' +} + +function assert (condition, msg) { + if (!condition) { throw new Error(("[vuex] " + msg)) } +} + +var Module = function Module (rawModule, runtime) { + this.runtime = runtime; + this._children = Object.create(null); + this._rawModule = rawModule; + var rawState = rawModule.state; + this.state = (typeof rawState === 'function' ? rawState() : rawState) || {}; +}; + +var prototypeAccessors$1 = { namespaced: { configurable: true } }; + +prototypeAccessors$1.namespaced.get = function () { + return !!this._rawModule.namespaced +}; + +Module.prototype.addChild = function addChild (key, module) { + this._children[key] = module; +}; + +Module.prototype.removeChild = function removeChild (key) { + delete this._children[key]; +}; + +Module.prototype.getChild = function getChild (key) { + return this._children[key] +}; + +Module.prototype.update = function update (rawModule) { + this._rawModule.namespaced = rawModule.namespaced; + if (rawModule.actions) { + this._rawModule.actions = rawModule.actions; + } + if (rawModule.mutations) { + this._rawModule.mutations = rawModule.mutations; + } + if (rawModule.getters) { + this._rawModule.getters = rawModule.getters; + } +}; + +Module.prototype.forEachChild = function forEachChild (fn) { + forEachValue(this._children, fn); +}; + +Module.prototype.forEachGetter = function forEachGetter (fn) { + if (this._rawModule.getters) { + forEachValue(this._rawModule.getters, fn); + } +}; + +Module.prototype.forEachAction = function forEachAction (fn) { + if (this._rawModule.actions) { + forEachValue(this._rawModule.actions, fn); + } +}; + +Module.prototype.forEachMutation = function forEachMutation (fn) { + if (this._rawModule.mutations) { + forEachValue(this._rawModule.mutations, fn); + } +}; + +Object.defineProperties( Module.prototype, prototypeAccessors$1 ); + +var ModuleCollection = function ModuleCollection (rawRootModule) { + // register root module (Vuex.Store options) + this.register([], rawRootModule, false); +}; + +ModuleCollection.prototype.get = function get (path) { + return path.reduce(function (module, key) { + return module.getChild(key) + }, this.root) +}; + +ModuleCollection.prototype.getNamespace = function getNamespace (path) { + var module = this.root; + return path.reduce(function (namespace, key) { + module = module.getChild(key); + return namespace + (module.namespaced ? key + '/' : '') + }, '') +}; + +ModuleCollection.prototype.update = function update$1 (rawRootModule) { + update([], this.root, rawRootModule); +}; + +ModuleCollection.prototype.register = function register (path, rawModule, runtime) { + var this$1 = this; + if ( runtime === void 0 ) runtime = true; + + if (process.env.NODE_ENV !== 'production') { + assertRawModule(path, rawModule); + } + + var newModule = new Module(rawModule, runtime); + if (path.length === 0) { + this.root = newModule; + } else { + var parent = this.get(path.slice(0, -1)); + parent.addChild(path[path.length - 1], newModule); + } + + // register nested modules + if (rawModule.modules) { + forEachValue(rawModule.modules, function (rawChildModule, key) { + this$1.register(path.concat(key), rawChildModule, runtime); + }); + } +}; + +ModuleCollection.prototype.unregister = function unregister (path) { + var parent = this.get(path.slice(0, -1)); + var key = path[path.length - 1]; + if (!parent.getChild(key).runtime) { return } + + parent.removeChild(key); +}; + +function update (path, targetModule, newModule) { + if (process.env.NODE_ENV !== 'production') { + assertRawModule(path, newModule); + } + + // update target module + targetModule.update(newModule); + + // update nested modules + if (newModule.modules) { + for (var key in newModule.modules) { + if (!targetModule.getChild(key)) { + if (process.env.NODE_ENV !== 'production') { + console.warn( + "[vuex] trying to add a new module '" + key + "' on hot reloading, " + + 'manual reload is needed' + ); + } + return + } + update( + path.concat(key), + targetModule.getChild(key), + newModule.modules[key] + ); + } + } +} + +var functionAssert = { + assert: function (value) { return typeof value === 'function'; }, + expected: 'function' +}; + +var objectAssert = { + assert: function (value) { return typeof value === 'function' || + (typeof value === 'object' && typeof value.handler === 'function'); }, + expected: 'function or object with "handler" function' +}; + +var assertTypes = { + getters: functionAssert, + mutations: functionAssert, + actions: objectAssert +}; + +function assertRawModule (path, rawModule) { + Object.keys(assertTypes).forEach(function (key) { + if (!rawModule[key]) { return } + + var assertOptions = assertTypes[key]; + + forEachValue(rawModule[key], function (value, type) { + assert( + assertOptions.assert(value), + makeAssertionMessage(path, key, type, value, assertOptions.expected) + ); + }); + }); +} + +function makeAssertionMessage (path, key, type, value, expected) { + var buf = key + " should be " + expected + " but \"" + key + "." + type + "\""; + if (path.length > 0) { + buf += " in module \"" + (path.join('.')) + "\""; + } + buf += " is " + (JSON.stringify(value)) + "."; + return buf +} + +var Vue; // bind on install + +var Store = function Store (options) { + var this$1 = this; + if ( options === void 0 ) options = {}; + + // Auto install if it is not done yet and `window` has `Vue`. + // To allow users to avoid auto-installation in some cases, + // this code should be placed here. See #731 + if (!Vue && typeof window !== 'undefined' && window.Vue) { + install(window.Vue); + } + + if (process.env.NODE_ENV !== 'production') { + assert(Vue, "must call Vue.use(Vuex) before creating a store instance."); + assert(typeof Promise !== 'undefined', "vuex requires a Promise polyfill in this browser."); + assert(this instanceof Store, "Store must be called with the new operator."); + } + + var plugins = options.plugins; if ( plugins === void 0 ) plugins = []; + var strict = options.strict; if ( strict === void 0 ) strict = false; + + var state = options.state; if ( state === void 0 ) state = {}; + if (typeof state === 'function') { + state = state() || {}; + } + + // store internal state + this._committing = false; + this._actions = Object.create(null); + this._actionSubscribers = []; + this._mutations = Object.create(null); + this._wrappedGetters = Object.create(null); + this._modules = new ModuleCollection(options); + this._modulesNamespaceMap = Object.create(null); + this._subscribers = []; + this._watcherVM = new Vue(); + + // bind commit and dispatch to self + var store = this; + var ref = this; + var dispatch = ref.dispatch; + var commit = ref.commit; + this.dispatch = function boundDispatch (type, payload) { + return dispatch.call(store, type, payload) + }; + this.commit = function boundCommit (type, payload, options) { + return commit.call(store, type, payload, options) + }; + + // strict mode + this.strict = strict; + + // init root module. + // this also recursively registers all sub-modules + // and collects all module getters inside this._wrappedGetters + installModule(this, state, [], this._modules.root); + + // initialize the store vm, which is responsible for the reactivity + // (also registers _wrappedGetters as computed properties) + resetStoreVM(this, state); + + // apply plugins + plugins.forEach(function (plugin) { return plugin(this$1); }); + + if (Vue.config.devtools) { + devtoolPlugin(this); + } +}; + +var prototypeAccessors = { state: { configurable: true } }; + +prototypeAccessors.state.get = function () { + return this._vm._data.$$state +}; + +prototypeAccessors.state.set = function (v) { + if (process.env.NODE_ENV !== 'production') { + assert(false, "Use store.replaceState() to explicit replace store state."); + } +}; + +Store.prototype.commit = function commit (_type, _payload, _options) { + var this$1 = this; + + // check object-style commit + var ref = unifyObjectStyle(_type, _payload, _options); + var type = ref.type; + var payload = ref.payload; + var options = ref.options; + + var mutation = { type: type, payload: payload }; + var entry = this._mutations[type]; + if (!entry) { + if (process.env.NODE_ENV !== 'production') { + console.error(("[vuex] unknown mutation type: " + type)); + } + return + } + this._withCommit(function () { + entry.forEach(function commitIterator (handler) { + handler(payload); + }); + }); + this._subscribers.forEach(function (sub) { return sub(mutation, this$1.state); }); + + if ( + process.env.NODE_ENV !== 'production' && + options && options.silent + ) { + console.warn( + "[vuex] mutation type: " + type + ". Silent option has been removed. " + + 'Use the filter functionality in the vue-devtools' + ); + } +}; + +Store.prototype.dispatch = function dispatch (_type, _payload) { + var this$1 = this; + + // check object-style dispatch + var ref = unifyObjectStyle(_type, _payload); + var type = ref.type; + var payload = ref.payload; + + var action = { type: type, payload: payload }; + var entry = this._actions[type]; + if (!entry) { + if (process.env.NODE_ENV !== 'production') { + console.error(("[vuex] unknown action type: " + type)); + } + return + } + + this._actionSubscribers.forEach(function (sub) { return sub(action, this$1.state); }); + + return entry.length > 1 + ? Promise.all(entry.map(function (handler) { return handler(payload); })) + : entry[0](payload) +}; + +Store.prototype.subscribe = function subscribe (fn) { + return genericSubscribe(fn, this._subscribers) +}; + +Store.prototype.subscribeAction = function subscribeAction (fn) { + return genericSubscribe(fn, this._actionSubscribers) +}; + +Store.prototype.watch = function watch (getter, cb, options) { + var this$1 = this; + + if (process.env.NODE_ENV !== 'production') { + assert(typeof getter === 'function', "store.watch only accepts a function."); + } + return this._watcherVM.$watch(function () { return getter(this$1.state, this$1.getters); }, cb, options) +}; + +Store.prototype.replaceState = function replaceState (state) { + var this$1 = this; + + this._withCommit(function () { + this$1._vm._data.$$state = state; + }); +}; + +Store.prototype.registerModule = function registerModule (path, rawModule, options) { + if ( options === void 0 ) options = {}; + + if (typeof path === 'string') { path = [path]; } + + if (process.env.NODE_ENV !== 'production') { + assert(Array.isArray(path), "module path must be a string or an Array."); + assert(path.length > 0, 'cannot register the root module by using registerModule.'); + } + + this._modules.register(path, rawModule); + installModule(this, this.state, path, this._modules.get(path), options.preserveState); + // reset store to update getters... + resetStoreVM(this, this.state); +}; + +Store.prototype.unregisterModule = function unregisterModule (path) { + var this$1 = this; + + if (typeof path === 'string') { path = [path]; } + + if (process.env.NODE_ENV !== 'production') { + assert(Array.isArray(path), "module path must be a string or an Array."); + } + + this._modules.unregister(path); + this._withCommit(function () { + var parentState = getNestedState(this$1.state, path.slice(0, -1)); + Vue.delete(parentState, path[path.length - 1]); + }); + resetStore(this); +}; + +Store.prototype.hotUpdate = function hotUpdate (newOptions) { + this._modules.update(newOptions); + resetStore(this, true); +}; + +Store.prototype._withCommit = function _withCommit (fn) { + var committing = this._committing; + this._committing = true; + fn(); + this._committing = committing; +}; + +Object.defineProperties( Store.prototype, prototypeAccessors ); + +function genericSubscribe (fn, subs) { + if (subs.indexOf(fn) < 0) { + subs.push(fn); + } + return function () { + var i = subs.indexOf(fn); + if (i > -1) { + subs.splice(i, 1); + } + } +} + +function resetStore (store, hot) { + store._actions = Object.create(null); + store._mutations = Object.create(null); + store._wrappedGetters = Object.create(null); + store._modulesNamespaceMap = Object.create(null); + var state = store.state; + // init all modules + installModule(store, state, [], store._modules.root, true); + // reset vm + resetStoreVM(store, state, hot); +} + +function resetStoreVM (store, state, hot) { + var oldVm = store._vm; + + // bind store public getters + store.getters = {}; + var wrappedGetters = store._wrappedGetters; + var computed = {}; + forEachValue(wrappedGetters, function (fn, key) { + // use computed to leverage its lazy-caching mechanism + computed[key] = function () { return fn(store); }; + Object.defineProperty(store.getters, key, { + get: function () { return store._vm[key]; }, + enumerable: true // for local getters + }); + }); + + // use a Vue instance to store the state tree + // suppress warnings just in case the user has added + // some funky global mixins + var silent = Vue.config.silent; + Vue.config.silent = true; + store._vm = new Vue({ + data: { + $$state: state + }, + computed: computed + }); + Vue.config.silent = silent; + + // enable strict mode for new vm + if (store.strict) { + enableStrictMode(store); + } + + if (oldVm) { + if (hot) { + // dispatch changes in all subscribed watchers + // to force getter re-evaluation for hot reloading. + store._withCommit(function () { + oldVm._data.$$state = null; + }); + } + Vue.nextTick(function () { return oldVm.$destroy(); }); + } +} + +function installModule (store, rootState, path, module, hot) { + var isRoot = !path.length; + var namespace = store._modules.getNamespace(path); + + // register in namespace map + if (module.namespaced) { + store._modulesNamespaceMap[namespace] = module; + } + + // set state + if (!isRoot && !hot) { + var parentState = getNestedState(rootState, path.slice(0, -1)); + var moduleName = path[path.length - 1]; + store._withCommit(function () { + Vue.set(parentState, moduleName, module.state); + }); + } + + var local = module.context = makeLocalContext(store, namespace, path); + + module.forEachMutation(function (mutation, key) { + var namespacedType = namespace + key; + registerMutation(store, namespacedType, mutation, local); + }); + + module.forEachAction(function (action, key) { + var type = action.root ? key : namespace + key; + var handler = action.handler || action; + registerAction(store, type, handler, local); + }); + + module.forEachGetter(function (getter, key) { + var namespacedType = namespace + key; + registerGetter(store, namespacedType, getter, local); + }); + + module.forEachChild(function (child, key) { + installModule(store, rootState, path.concat(key), child, hot); + }); +} + +/** + * make localized dispatch, commit, getters and state + * if there is no namespace, just use root ones + */ +function makeLocalContext (store, namespace, path) { + var noNamespace = namespace === ''; + + var local = { + dispatch: noNamespace ? store.dispatch : function (_type, _payload, _options) { + var args = unifyObjectStyle(_type, _payload, _options); + var payload = args.payload; + var options = args.options; + var type = args.type; + + if (!options || !options.root) { + type = namespace + type; + if (process.env.NODE_ENV !== 'production' && !store._actions[type]) { + console.error(("[vuex] unknown local action type: " + (args.type) + ", global type: " + type)); + return + } + } + + return store.dispatch(type, payload) + }, + + commit: noNamespace ? store.commit : function (_type, _payload, _options) { + var args = unifyObjectStyle(_type, _payload, _options); + var payload = args.payload; + var options = args.options; + var type = args.type; + + if (!options || !options.root) { + type = namespace + type; + if (process.env.NODE_ENV !== 'production' && !store._mutations[type]) { + console.error(("[vuex] unknown local mutation type: " + (args.type) + ", global type: " + type)); + return + } + } + + store.commit(type, payload, options); + } + }; + + // getters and state object must be gotten lazily + // because they will be changed by vm update + Object.defineProperties(local, { + getters: { + get: noNamespace + ? function () { return store.getters; } + : function () { return makeLocalGetters(store, namespace); } + }, + state: { + get: function () { return getNestedState(store.state, path); } + } + }); + + return local +} + +function makeLocalGetters (store, namespace) { + var gettersProxy = {}; + + var splitPos = namespace.length; + Object.keys(store.getters).forEach(function (type) { + // skip if the target getter is not match this namespace + if (type.slice(0, splitPos) !== namespace) { return } + + // extract local getter type + var localType = type.slice(splitPos); + + // Add a port to the getters proxy. + // Define as getter property because + // we do not want to evaluate the getters in this time. + Object.defineProperty(gettersProxy, localType, { + get: function () { return store.getters[type]; }, + enumerable: true + }); + }); + + return gettersProxy +} + +function registerMutation (store, type, handler, local) { + var entry = store._mutations[type] || (store._mutations[type] = []); + entry.push(function wrappedMutationHandler (payload) { + handler.call(store, local.state, payload); + }); +} + +function registerAction (store, type, handler, local) { + var entry = store._actions[type] || (store._actions[type] = []); + entry.push(function wrappedActionHandler (payload, cb) { + var res = handler.call(store, { + dispatch: local.dispatch, + commit: local.commit, + getters: local.getters, + state: local.state, + rootGetters: store.getters, + rootState: store.state + }, payload, cb); + if (!isPromise(res)) { + res = Promise.resolve(res); + } + if (store._devtoolHook) { + return res.catch(function (err) { + store._devtoolHook.emit('vuex:error', err); + throw err + }) + } else { + return res + } + }); +} + +function registerGetter (store, type, rawGetter, local) { + if (store._wrappedGetters[type]) { + if (process.env.NODE_ENV !== 'production') { + console.error(("[vuex] duplicate getter key: " + type)); + } + return + } + store._wrappedGetters[type] = function wrappedGetter (store) { + return rawGetter( + local.state, // local state + local.getters, // local getters + store.state, // root state + store.getters // root getters + ) + }; +} + +function enableStrictMode (store) { + store._vm.$watch(function () { return this._data.$$state }, function () { + if (process.env.NODE_ENV !== 'production') { + assert(store._committing, "Do not mutate vuex store state outside mutation handlers."); + } + }, { deep: true, sync: true }); +} + +function getNestedState (state, path) { + return path.length + ? path.reduce(function (state, key) { return state[key]; }, state) + : state +} + +function unifyObjectStyle (type, payload, options) { + if (isObject(type) && type.type) { + options = payload; + payload = type; + type = type.type; + } + + if (process.env.NODE_ENV !== 'production') { + assert(typeof type === 'string', ("Expects string as the type, but found " + (typeof type) + ".")); + } + + return { type: type, payload: payload, options: options } +} + +function install (_Vue) { + if (Vue && _Vue === Vue) { + if (process.env.NODE_ENV !== 'production') { + console.error( + '[vuex] already installed. Vue.use(Vuex) should be called only once.' + ); + } + return + } + Vue = _Vue; + applyMixin(Vue); +} + +var mapState = normalizeNamespace(function (namespace, states) { + var res = {}; + normalizeMap(states).forEach(function (ref) { + var key = ref.key; + var val = ref.val; + + res[key] = function mappedState () { + var state = this.$store.state; + var getters = this.$store.getters; + if (namespace) { + var module = getModuleByNamespace(this.$store, 'mapState', namespace); + if (!module) { + return + } + state = module.context.state; + getters = module.context.getters; + } + return typeof val === 'function' + ? val.call(this, state, getters) + : state[val] + }; + // mark vuex getter for devtools + res[key].vuex = true; + }); + return res +}); + +var mapMutations = normalizeNamespace(function (namespace, mutations) { + var res = {}; + normalizeMap(mutations).forEach(function (ref) { + var key = ref.key; + var val = ref.val; + + res[key] = function mappedMutation () { + var args = [], len = arguments.length; + while ( len-- ) args[ len ] = arguments[ len ]; + + var commit = this.$store.commit; + if (namespace) { + var module = getModuleByNamespace(this.$store, 'mapMutations', namespace); + if (!module) { + return + } + commit = module.context.commit; + } + return typeof val === 'function' + ? val.apply(this, [commit].concat(args)) + : commit.apply(this.$store, [val].concat(args)) + }; + }); + return res +}); + +var mapGetters = normalizeNamespace(function (namespace, getters) { + var res = {}; + normalizeMap(getters).forEach(function (ref) { + var key = ref.key; + var val = ref.val; + + val = namespace + val; + res[key] = function mappedGetter () { + if (namespace && !getModuleByNamespace(this.$store, 'mapGetters', namespace)) { + return + } + if (process.env.NODE_ENV !== 'production' && !(val in this.$store.getters)) { + console.error(("[vuex] unknown getter: " + val)); + return + } + return this.$store.getters[val] + }; + // mark vuex getter for devtools + res[key].vuex = true; + }); + return res +}); + +var mapActions = normalizeNamespace(function (namespace, actions) { + var res = {}; + normalizeMap(actions).forEach(function (ref) { + var key = ref.key; + var val = ref.val; + + res[key] = function mappedAction () { + var args = [], len = arguments.length; + while ( len-- ) args[ len ] = arguments[ len ]; + + var dispatch = this.$store.dispatch; + if (namespace) { + var module = getModuleByNamespace(this.$store, 'mapActions', namespace); + if (!module) { + return + } + dispatch = module.context.dispatch; + } + return typeof val === 'function' + ? val.apply(this, [dispatch].concat(args)) + : dispatch.apply(this.$store, [val].concat(args)) + }; + }); + return res +}); + +var createNamespacedHelpers = function (namespace) { return ({ + mapState: mapState.bind(null, namespace), + mapGetters: mapGetters.bind(null, namespace), + mapMutations: mapMutations.bind(null, namespace), + mapActions: mapActions.bind(null, namespace) +}); }; + +function normalizeMap (map) { + return Array.isArray(map) + ? map.map(function (key) { return ({ key: key, val: key }); }) + : Object.keys(map).map(function (key) { return ({ key: key, val: map[key] }); }) +} + +function normalizeNamespace (fn) { + return function (namespace, map) { + if (typeof namespace !== 'string') { + map = namespace; + namespace = ''; + } else if (namespace.charAt(namespace.length - 1) !== '/') { + namespace += '/'; + } + return fn(namespace, map) + } +} + +function getModuleByNamespace (store, helper, namespace) { + var module = store._modulesNamespaceMap[namespace]; + if (process.env.NODE_ENV !== 'production' && !module) { + console.error(("[vuex] module namespace not found in " + helper + "(): " + namespace)); + } + return module +} + +var index_esm = { + Store: Store, + install: install, + version: '3.0.1', + mapState: mapState, + mapMutations: mapMutations, + mapGetters: mapGetters, + mapActions: mapActions, + createNamespacedHelpers: createNamespacedHelpers +}; + +export { Store, install, mapState, mapMutations, mapGetters, mapActions, createNamespacedHelpers }; +export default index_esm; diff --git a/vuex/dist/vuex.js b/vuex/dist/vuex.js new file mode 100644 index 0000000..26340c5 --- /dev/null +++ b/vuex/dist/vuex.js @@ -0,0 +1,938 @@ +/** + * vuex v3.0.1 + * (c) 2017 Evan You + * @license MIT + */ +(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() : + typeof define === 'function' && define.amd ? define(factory) : + (global.Vuex = factory()); +}(this, (function () { 'use strict'; + +var applyMixin = function (Vue) { + var version = Number(Vue.version.split('.')[0]); + + if (version >= 2) { + Vue.mixin({ beforeCreate: vuexInit }); + } else { + // override init and inject vuex init procedure + // for 1.x backwards compatibility. + var _init = Vue.prototype._init; + Vue.prototype._init = function (options) { + if ( options === void 0 ) options = {}; + + options.init = options.init + ? [vuexInit].concat(options.init) + : vuexInit; + _init.call(this, options); + }; + } + + /** + * Vuex init hook, injected into each instances init hooks list. + */ + + function vuexInit () { + var options = this.$options; + // store injection + if (options.store) { + this.$store = typeof options.store === 'function' + ? options.store() + : options.store; + } else if (options.parent && options.parent.$store) { + this.$store = options.parent.$store; + } + } +}; + +var devtoolHook = + typeof window !== 'undefined' && + window.__VUE_DEVTOOLS_GLOBAL_HOOK__; + +function devtoolPlugin (store) { + if (!devtoolHook) { return } + + store._devtoolHook = devtoolHook; + + devtoolHook.emit('vuex:init', store); + + devtoolHook.on('vuex:travel-to-state', function (targetState) { + store.replaceState(targetState); + }); + + store.subscribe(function (mutation, state) { + devtoolHook.emit('vuex:mutation', mutation, state); + }); +} + +/** + * Get the first item that pass the test + * by second argument function + * + * @param {Array} list + * @param {Function} f + * @return {*} + */ +/** + * Deep copy the given object considering circular structure. + * This function caches all nested objects and its copies. + * If it detects circular structure, use cached copy to avoid infinite loop. + * + * @param {*} obj + * @param {Array} cache + * @return {*} + */ + + +/** + * forEach for object + */ +function forEachValue (obj, fn) { + Object.keys(obj).forEach(function (key) { return fn(obj[key], key); }); +} + +function isObject (obj) { + return obj !== null && typeof obj === 'object' +} + +function isPromise (val) { + return val && typeof val.then === 'function' +} + +function assert (condition, msg) { + if (!condition) { throw new Error(("[vuex] " + msg)) } +} + +var Module = function Module (rawModule, runtime) { + this.runtime = runtime; + this._children = Object.create(null); + this._rawModule = rawModule; + var rawState = rawModule.state; + this.state = (typeof rawState === 'function' ? rawState() : rawState) || {}; +}; + +var prototypeAccessors$1 = { namespaced: { configurable: true } }; + +prototypeAccessors$1.namespaced.get = function () { + return !!this._rawModule.namespaced +}; + +Module.prototype.addChild = function addChild (key, module) { + this._children[key] = module; +}; + +Module.prototype.removeChild = function removeChild (key) { + delete this._children[key]; +}; + +Module.prototype.getChild = function getChild (key) { + return this._children[key] +}; + +Module.prototype.update = function update (rawModule) { + this._rawModule.namespaced = rawModule.namespaced; + if (rawModule.actions) { + this._rawModule.actions = rawModule.actions; + } + if (rawModule.mutations) { + this._rawModule.mutations = rawModule.mutations; + } + if (rawModule.getters) { + this._rawModule.getters = rawModule.getters; + } +}; + +Module.prototype.forEachChild = function forEachChild (fn) { + forEachValue(this._children, fn); +}; + +Module.prototype.forEachGetter = function forEachGetter (fn) { + if (this._rawModule.getters) { + forEachValue(this._rawModule.getters, fn); + } +}; + +Module.prototype.forEachAction = function forEachAction (fn) { + if (this._rawModule.actions) { + forEachValue(this._rawModule.actions, fn); + } +}; + +Module.prototype.forEachMutation = function forEachMutation (fn) { + if (this._rawModule.mutations) { + forEachValue(this._rawModule.mutations, fn); + } +}; + +Object.defineProperties( Module.prototype, prototypeAccessors$1 ); + +var ModuleCollection = function ModuleCollection (rawRootModule) { + // register root module (Vuex.Store options) + this.register([], rawRootModule, false); +}; + +ModuleCollection.prototype.get = function get (path) { + return path.reduce(function (module, key) { + return module.getChild(key) + }, this.root) +}; + +ModuleCollection.prototype.getNamespace = function getNamespace (path) { + var module = this.root; + return path.reduce(function (namespace, key) { + module = module.getChild(key); + return namespace + (module.namespaced ? key + '/' : '') + }, '') +}; + +ModuleCollection.prototype.update = function update$1 (rawRootModule) { + update([], this.root, rawRootModule); +}; + +ModuleCollection.prototype.register = function register (path, rawModule, runtime) { + var this$1 = this; + if ( runtime === void 0 ) runtime = true; + + { + assertRawModule(path, rawModule); + } + + var newModule = new Module(rawModule, runtime); + if (path.length === 0) { + this.root = newModule; + } else { + var parent = this.get(path.slice(0, -1)); + parent.addChild(path[path.length - 1], newModule); + } + + // register nested modules + if (rawModule.modules) { + forEachValue(rawModule.modules, function (rawChildModule, key) { + this$1.register(path.concat(key), rawChildModule, runtime); + }); + } +}; + +ModuleCollection.prototype.unregister = function unregister (path) { + var parent = this.get(path.slice(0, -1)); + var key = path[path.length - 1]; + if (!parent.getChild(key).runtime) { return } + + parent.removeChild(key); +}; + +function update (path, targetModule, newModule) { + { + assertRawModule(path, newModule); + } + + // update target module + targetModule.update(newModule); + + // update nested modules + if (newModule.modules) { + for (var key in newModule.modules) { + if (!targetModule.getChild(key)) { + { + console.warn( + "[vuex] trying to add a new module '" + key + "' on hot reloading, " + + 'manual reload is needed' + ); + } + return + } + update( + path.concat(key), + targetModule.getChild(key), + newModule.modules[key] + ); + } + } +} + +var functionAssert = { + assert: function (value) { return typeof value === 'function'; }, + expected: 'function' +}; + +var objectAssert = { + assert: function (value) { return typeof value === 'function' || + (typeof value === 'object' && typeof value.handler === 'function'); }, + expected: 'function or object with "handler" function' +}; + +var assertTypes = { + getters: functionAssert, + mutations: functionAssert, + actions: objectAssert +}; + +function assertRawModule (path, rawModule) { + Object.keys(assertTypes).forEach(function (key) { + if (!rawModule[key]) { return } + + var assertOptions = assertTypes[key]; + + forEachValue(rawModule[key], function (value, type) { + assert( + assertOptions.assert(value), + makeAssertionMessage(path, key, type, value, assertOptions.expected) + ); + }); + }); +} + +function makeAssertionMessage (path, key, type, value, expected) { + var buf = key + " should be " + expected + " but \"" + key + "." + type + "\""; + if (path.length > 0) { + buf += " in module \"" + (path.join('.')) + "\""; + } + buf += " is " + (JSON.stringify(value)) + "."; + return buf +} + +var Vue; // bind on install + +var Store = function Store (options) { + var this$1 = this; + if ( options === void 0 ) options = {}; + + // Auto install if it is not done yet and `window` has `Vue`. + // To allow users to avoid auto-installation in some cases, + // this code should be placed here. See #731 + if (!Vue && typeof window !== 'undefined' && window.Vue) { + install(window.Vue); + } + + { + assert(Vue, "must call Vue.use(Vuex) before creating a store instance."); + assert(typeof Promise !== 'undefined', "vuex requires a Promise polyfill in this browser."); + assert(this instanceof Store, "Store must be called with the new operator."); + } + + var plugins = options.plugins; if ( plugins === void 0 ) plugins = []; + var strict = options.strict; if ( strict === void 0 ) strict = false; + + var state = options.state; if ( state === void 0 ) state = {}; + if (typeof state === 'function') { + state = state() || {}; + } + + // store internal state + this._committing = false; + this._actions = Object.create(null); + this._actionSubscribers = []; + this._mutations = Object.create(null); + this._wrappedGetters = Object.create(null); + this._modules = new ModuleCollection(options); + this._modulesNamespaceMap = Object.create(null); + this._subscribers = []; + this._watcherVM = new Vue(); + + // bind commit and dispatch to self + var store = this; + var ref = this; + var dispatch = ref.dispatch; + var commit = ref.commit; + this.dispatch = function boundDispatch (type, payload) { + return dispatch.call(store, type, payload) + }; + this.commit = function boundCommit (type, payload, options) { + return commit.call(store, type, payload, options) + }; + + // strict mode + this.strict = strict; + + // init root module. + // this also recursively registers all sub-modules + // and collects all module getters inside this._wrappedGetters + installModule(this, state, [], this._modules.root); + + // initialize the store vm, which is responsible for the reactivity + // (also registers _wrappedGetters as computed properties) + resetStoreVM(this, state); + + // apply plugins + plugins.forEach(function (plugin) { return plugin(this$1); }); + + if (Vue.config.devtools) { + devtoolPlugin(this); + } +}; + +var prototypeAccessors = { state: { configurable: true } }; + +prototypeAccessors.state.get = function () { + return this._vm._data.$$state +}; + +prototypeAccessors.state.set = function (v) { + { + assert(false, "Use store.replaceState() to explicit replace store state."); + } +}; + +Store.prototype.commit = function commit (_type, _payload, _options) { + var this$1 = this; + + // check object-style commit + var ref = unifyObjectStyle(_type, _payload, _options); + var type = ref.type; + var payload = ref.payload; + var options = ref.options; + + var mutation = { type: type, payload: payload }; + var entry = this._mutations[type]; + if (!entry) { + { + console.error(("[vuex] unknown mutation type: " + type)); + } + return + } + this._withCommit(function () { + entry.forEach(function commitIterator (handler) { + handler(payload); + }); + }); + this._subscribers.forEach(function (sub) { return sub(mutation, this$1.state); }); + + if ( + "development" !== 'production' && + options && options.silent + ) { + console.warn( + "[vuex] mutation type: " + type + ". Silent option has been removed. " + + 'Use the filter functionality in the vue-devtools' + ); + } +}; + +Store.prototype.dispatch = function dispatch (_type, _payload) { + var this$1 = this; + + // check object-style dispatch + var ref = unifyObjectStyle(_type, _payload); + var type = ref.type; + var payload = ref.payload; + + var action = { type: type, payload: payload }; + var entry = this._actions[type]; + if (!entry) { + { + console.error(("[vuex] unknown action type: " + type)); + } + return + } + + this._actionSubscribers.forEach(function (sub) { return sub(action, this$1.state); }); + + return entry.length > 1 + ? Promise.all(entry.map(function (handler) { return handler(payload); })) + : entry[0](payload) +}; + +Store.prototype.subscribe = function subscribe (fn) { + return genericSubscribe(fn, this._subscribers) +}; + +Store.prototype.subscribeAction = function subscribeAction (fn) { + return genericSubscribe(fn, this._actionSubscribers) +}; + +Store.prototype.watch = function watch (getter, cb, options) { + var this$1 = this; + + { + assert(typeof getter === 'function', "store.watch only accepts a function."); + } + return this._watcherVM.$watch(function () { return getter(this$1.state, this$1.getters); }, cb, options) +}; + +Store.prototype.replaceState = function replaceState (state) { + var this$1 = this; + + this._withCommit(function () { + this$1._vm._data.$$state = state; + }); +}; + +Store.prototype.registerModule = function registerModule (path, rawModule, options) { + if ( options === void 0 ) options = {}; + + if (typeof path === 'string') { path = [path]; } + + { + assert(Array.isArray(path), "module path must be a string or an Array."); + assert(path.length > 0, 'cannot register the root module by using registerModule.'); + } + + this._modules.register(path, rawModule); + installModule(this, this.state, path, this._modules.get(path), options.preserveState); + // reset store to update getters... + resetStoreVM(this, this.state); +}; + +Store.prototype.unregisterModule = function unregisterModule (path) { + var this$1 = this; + + if (typeof path === 'string') { path = [path]; } + + { + assert(Array.isArray(path), "module path must be a string or an Array."); + } + + this._modules.unregister(path); + this._withCommit(function () { + var parentState = getNestedState(this$1.state, path.slice(0, -1)); + Vue.delete(parentState, path[path.length - 1]); + }); + resetStore(this); +}; + +Store.prototype.hotUpdate = function hotUpdate (newOptions) { + this._modules.update(newOptions); + resetStore(this, true); +}; + +Store.prototype._withCommit = function _withCommit (fn) { + var committing = this._committing; + this._committing = true; + fn(); + this._committing = committing; +}; + +Object.defineProperties( Store.prototype, prototypeAccessors ); + +function genericSubscribe (fn, subs) { + if (subs.indexOf(fn) < 0) { + subs.push(fn); + } + return function () { + var i = subs.indexOf(fn); + if (i > -1) { + subs.splice(i, 1); + } + } +} + +function resetStore (store, hot) { + store._actions = Object.create(null); + store._mutations = Object.create(null); + store._wrappedGetters = Object.create(null); + store._modulesNamespaceMap = Object.create(null); + var state = store.state; + // init all modules + installModule(store, state, [], store._modules.root, true); + // reset vm + resetStoreVM(store, state, hot); +} + +function resetStoreVM (store, state, hot) { + var oldVm = store._vm; + + // bind store public getters + store.getters = {}; + var wrappedGetters = store._wrappedGetters; + var computed = {}; + forEachValue(wrappedGetters, function (fn, key) { + // use computed to leverage its lazy-caching mechanism + computed[key] = function () { return fn(store); }; + Object.defineProperty(store.getters, key, { + get: function () { return store._vm[key]; }, + enumerable: true // for local getters + }); + }); + + // use a Vue instance to store the state tree + // suppress warnings just in case the user has added + // some funky global mixins + var silent = Vue.config.silent; + Vue.config.silent = true; + store._vm = new Vue({ + data: { + $$state: state + }, + computed: computed + }); + Vue.config.silent = silent; + + // enable strict mode for new vm + if (store.strict) { + enableStrictMode(store); + } + + if (oldVm) { + if (hot) { + // dispatch changes in all subscribed watchers + // to force getter re-evaluation for hot reloading. + store._withCommit(function () { + oldVm._data.$$state = null; + }); + } + Vue.nextTick(function () { return oldVm.$destroy(); }); + } +} + +function installModule (store, rootState, path, module, hot) { + var isRoot = !path.length; + var namespace = store._modules.getNamespace(path); + + // register in namespace map + if (module.namespaced) { + store._modulesNamespaceMap[namespace] = module; + } + + // set state + if (!isRoot && !hot) { + var parentState = getNestedState(rootState, path.slice(0, -1)); + var moduleName = path[path.length - 1]; + store._withCommit(function () { + Vue.set(parentState, moduleName, module.state); + }); + } + + var local = module.context = makeLocalContext(store, namespace, path); + + module.forEachMutation(function (mutation, key) { + var namespacedType = namespace + key; + registerMutation(store, namespacedType, mutation, local); + }); + + module.forEachAction(function (action, key) { + var type = action.root ? key : namespace + key; + var handler = action.handler || action; + registerAction(store, type, handler, local); + }); + + module.forEachGetter(function (getter, key) { + var namespacedType = namespace + key; + registerGetter(store, namespacedType, getter, local); + }); + + module.forEachChild(function (child, key) { + installModule(store, rootState, path.concat(key), child, hot); + }); +} + +/** + * make localized dispatch, commit, getters and state + * if there is no namespace, just use root ones + */ +function makeLocalContext (store, namespace, path) { + var noNamespace = namespace === ''; + + var local = { + dispatch: noNamespace ? store.dispatch : function (_type, _payload, _options) { + var args = unifyObjectStyle(_type, _payload, _options); + var payload = args.payload; + var options = args.options; + var type = args.type; + + if (!options || !options.root) { + type = namespace + type; + if ("development" !== 'production' && !store._actions[type]) { + console.error(("[vuex] unknown local action type: " + (args.type) + ", global type: " + type)); + return + } + } + + return store.dispatch(type, payload) + }, + + commit: noNamespace ? store.commit : function (_type, _payload, _options) { + var args = unifyObjectStyle(_type, _payload, _options); + var payload = args.payload; + var options = args.options; + var type = args.type; + + if (!options || !options.root) { + type = namespace + type; + if ("development" !== 'production' && !store._mutations[type]) { + console.error(("[vuex] unknown local mutation type: " + (args.type) + ", global type: " + type)); + return + } + } + + store.commit(type, payload, options); + } + }; + + // getters and state object must be gotten lazily + // because they will be changed by vm update + Object.defineProperties(local, { + getters: { + get: noNamespace + ? function () { return store.getters; } + : function () { return makeLocalGetters(store, namespace); } + }, + state: { + get: function () { return getNestedState(store.state, path); } + } + }); + + return local +} + +function makeLocalGetters (store, namespace) { + var gettersProxy = {}; + + var splitPos = namespace.length; + Object.keys(store.getters).forEach(function (type) { + // skip if the target getter is not match this namespace + if (type.slice(0, splitPos) !== namespace) { return } + + // extract local getter type + var localType = type.slice(splitPos); + + // Add a port to the getters proxy. + // Define as getter property because + // we do not want to evaluate the getters in this time. + Object.defineProperty(gettersProxy, localType, { + get: function () { return store.getters[type]; }, + enumerable: true + }); + }); + + return gettersProxy +} + +function registerMutation (store, type, handler, local) { + var entry = store._mutations[type] || (store._mutations[type] = []); + entry.push(function wrappedMutationHandler (payload) { + handler.call(store, local.state, payload); + }); +} + +function registerAction (store, type, handler, local) { + var entry = store._actions[type] || (store._actions[type] = []); + entry.push(function wrappedActionHandler (payload, cb) { + var res = handler.call(store, { + dispatch: local.dispatch, + commit: local.commit, + getters: local.getters, + state: local.state, + rootGetters: store.getters, + rootState: store.state + }, payload, cb); + if (!isPromise(res)) { + res = Promise.resolve(res); + } + if (store._devtoolHook) { + return res.catch(function (err) { + store._devtoolHook.emit('vuex:error', err); + throw err + }) + } else { + return res + } + }); +} + +function registerGetter (store, type, rawGetter, local) { + if (store._wrappedGetters[type]) { + { + console.error(("[vuex] duplicate getter key: " + type)); + } + return + } + store._wrappedGetters[type] = function wrappedGetter (store) { + return rawGetter( + local.state, // local state + local.getters, // local getters + store.state, // root state + store.getters // root getters + ) + }; +} + +function enableStrictMode (store) { + store._vm.$watch(function () { return this._data.$$state }, function () { + { + assert(store._committing, "Do not mutate vuex store state outside mutation handlers."); + } + }, { deep: true, sync: true }); +} + +function getNestedState (state, path) { + return path.length + ? path.reduce(function (state, key) { return state[key]; }, state) + : state +} + +function unifyObjectStyle (type, payload, options) { + if (isObject(type) && type.type) { + options = payload; + payload = type; + type = type.type; + } + + { + assert(typeof type === 'string', ("Expects string as the type, but found " + (typeof type) + ".")); + } + + return { type: type, payload: payload, options: options } +} + +function install (_Vue) { + if (Vue && _Vue === Vue) { + { + console.error( + '[vuex] already installed. Vue.use(Vuex) should be called only once.' + ); + } + return + } + Vue = _Vue; + applyMixin(Vue); +} + +var mapState = normalizeNamespace(function (namespace, states) { + var res = {}; + normalizeMap(states).forEach(function (ref) { + var key = ref.key; + var val = ref.val; + + res[key] = function mappedState () { + var state = this.$store.state; + var getters = this.$store.getters; + if (namespace) { + var module = getModuleByNamespace(this.$store, 'mapState', namespace); + if (!module) { + return + } + state = module.context.state; + getters = module.context.getters; + } + return typeof val === 'function' + ? val.call(this, state, getters) + : state[val] + }; + // mark vuex getter for devtools + res[key].vuex = true; + }); + return res +}); + +var mapMutations = normalizeNamespace(function (namespace, mutations) { + var res = {}; + normalizeMap(mutations).forEach(function (ref) { + var key = ref.key; + var val = ref.val; + + res[key] = function mappedMutation () { + var args = [], len = arguments.length; + while ( len-- ) args[ len ] = arguments[ len ]; + + var commit = this.$store.commit; + if (namespace) { + var module = getModuleByNamespace(this.$store, 'mapMutations', namespace); + if (!module) { + return + } + commit = module.context.commit; + } + return typeof val === 'function' + ? val.apply(this, [commit].concat(args)) + : commit.apply(this.$store, [val].concat(args)) + }; + }); + return res +}); + +var mapGetters = normalizeNamespace(function (namespace, getters) { + var res = {}; + normalizeMap(getters).forEach(function (ref) { + var key = ref.key; + var val = ref.val; + + val = namespace + val; + res[key] = function mappedGetter () { + if (namespace && !getModuleByNamespace(this.$store, 'mapGetters', namespace)) { + return + } + if ("development" !== 'production' && !(val in this.$store.getters)) { + console.error(("[vuex] unknown getter: " + val)); + return + } + return this.$store.getters[val] + }; + // mark vuex getter for devtools + res[key].vuex = true; + }); + return res +}); + +var mapActions = normalizeNamespace(function (namespace, actions) { + var res = {}; + normalizeMap(actions).forEach(function (ref) { + var key = ref.key; + var val = ref.val; + + res[key] = function mappedAction () { + var args = [], len = arguments.length; + while ( len-- ) args[ len ] = arguments[ len ]; + + var dispatch = this.$store.dispatch; + if (namespace) { + var module = getModuleByNamespace(this.$store, 'mapActions', namespace); + if (!module) { + return + } + dispatch = module.context.dispatch; + } + return typeof val === 'function' + ? val.apply(this, [dispatch].concat(args)) + : dispatch.apply(this.$store, [val].concat(args)) + }; + }); + return res +}); + +var createNamespacedHelpers = function (namespace) { return ({ + mapState: mapState.bind(null, namespace), + mapGetters: mapGetters.bind(null, namespace), + mapMutations: mapMutations.bind(null, namespace), + mapActions: mapActions.bind(null, namespace) +}); }; + +function normalizeMap (map) { + return Array.isArray(map) + ? map.map(function (key) { return ({ key: key, val: key }); }) + : Object.keys(map).map(function (key) { return ({ key: key, val: map[key] }); }) +} + +function normalizeNamespace (fn) { + return function (namespace, map) { + if (typeof namespace !== 'string') { + map = namespace; + namespace = ''; + } else if (namespace.charAt(namespace.length - 1) !== '/') { + namespace += '/'; + } + return fn(namespace, map) + } +} + +function getModuleByNamespace (store, helper, namespace) { + var module = store._modulesNamespaceMap[namespace]; + if ("development" !== 'production' && !module) { + console.error(("[vuex] module namespace not found in " + helper + "(): " + namespace)); + } + return module +} + +var index = { + Store: Store, + install: install, + version: '3.0.1', + mapState: mapState, + mapMutations: mapMutations, + mapGetters: mapGetters, + mapActions: mapActions, + createNamespacedHelpers: createNamespacedHelpers +}; + +return index; + +}))); diff --git a/vuex/dist/vuex.min.js b/vuex/dist/vuex.min.js new file mode 100644 index 0000000..5d05b52 --- /dev/null +++ b/vuex/dist/vuex.min.js @@ -0,0 +1,6 @@ +/** + * vuex v3.0.1 + * (c) 2017 Evan You + * @license MIT + */ +!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?module.exports=e():"function"==typeof define&&define.amd?define(e):t.Vuex=e()}(this,function(){"use strict";function t(t){$&&(t._devtoolHook=$,$.emit("vuex:init",t),$.on("vuex:travel-to-state",function(e){t.replaceState(e)}),t.subscribe(function(t,e){$.emit("vuex:mutation",t,e)}))}function e(t,e){Object.keys(t).forEach(function(n){return e(t[n],n)})}function n(t){return null!==t&&"object"==typeof t}function o(t){return t&&"function"==typeof t.then}function i(t,e,n){if(e.update(n),n.modules)for(var o in n.modules){if(!e.getChild(o))return;i(t.concat(o),e.getChild(o),n.modules[o])}}function r(t,e){return e.indexOf(t)<0&&e.push(t),function(){var n=e.indexOf(t);n>-1&&e.splice(n,1)}}function s(t,e){t._actions=Object.create(null),t._mutations=Object.create(null),t._wrappedGetters=Object.create(null),t._modulesNamespaceMap=Object.create(null);var n=t.state;a(t,n,[],t._modules.root,!0),c(t,n,e)}function c(t,n,o){var i=t._vm;t.getters={};var r={};e(t._wrappedGetters,function(e,n){r[n]=function(){return e(t)},Object.defineProperty(t.getters,n,{get:function(){return t._vm[n]},enumerable:!0})});var s=j.config.silent;j.config.silent=!0,t._vm=new j({data:{$$state:n},computed:r}),j.config.silent=s,t.strict&&d(t),i&&(o&&t._withCommit(function(){i._data.$$state=null}),j.nextTick(function(){return i.$destroy()}))}function a(t,e,n,o,i){var r=!n.length,s=t._modules.getNamespace(n);if(o.namespaced&&(t._modulesNamespaceMap[s]=o),!r&&!i){var c=m(e,n.slice(0,-1)),f=n[n.length-1];t._withCommit(function(){j.set(c,f,o.state)})}var d=o.context=u(t,s,n);o.forEachMutation(function(e,n){p(t,s+n,e,d)}),o.forEachAction(function(e,n){var o=e.root?n:s+n,i=e.handler||e;h(t,o,i,d)}),o.forEachGetter(function(e,n){l(t,s+n,e,d)}),o.forEachChild(function(o,r){a(t,e,n.concat(r),o,i)})}function u(t,e,n){var o=""===e,i={dispatch:o?t.dispatch:function(n,o,i){var r=v(n,o,i),s=r.payload,c=r.options,a=r.type;return c&&c.root||(a=e+a),t.dispatch(a,s)},commit:o?t.commit:function(n,o,i){var r=v(n,o,i),s=r.payload,c=r.options,a=r.type;c&&c.root||(a=e+a),t.commit(a,s,c)}};return Object.defineProperties(i,{getters:{get:o?function(){return t.getters}:function(){return f(t,e)}},state:{get:function(){return m(t.state,n)}}}),i}function f(t,e){var n={},o=e.length;return Object.keys(t.getters).forEach(function(i){if(i.slice(0,o)===e){var r=i.slice(o);Object.defineProperty(n,r,{get:function(){return t.getters[i]},enumerable:!0})}}),n}function p(t,e,n,o){(t._mutations[e]||(t._mutations[e]=[])).push(function(e){n.call(t,o.state,e)})}function h(t,e,n,i){(t._actions[e]||(t._actions[e]=[])).push(function(e,r){var s=n.call(t,{dispatch:i.dispatch,commit:i.commit,getters:i.getters,state:i.state,rootGetters:t.getters,rootState:t.state},e,r);return o(s)||(s=Promise.resolve(s)),t._devtoolHook?s.catch(function(e){throw t._devtoolHook.emit("vuex:error",e),e}):s})}function l(t,e,n,o){t._wrappedGetters[e]||(t._wrappedGetters[e]=function(t){return n(o.state,o.getters,t.state,t.getters)})}function d(t){t._vm.$watch(function(){return this._data.$$state},function(){},{deep:!0,sync:!0})}function m(t,e){return e.length?e.reduce(function(t,e){return t[e]},t):t}function v(t,e,o){return n(t)&&t.type&&(o=e,e=t,t=t.type),{type:t,payload:e,options:o}}function _(t){j&&t===j||w(j=t)}function y(t){return Array.isArray(t)?t.map(function(t){return{key:t,val:t}}):Object.keys(t).map(function(e){return{key:e,val:t[e]}})}function g(t){return function(e,n){return"string"!=typeof e?(n=e,e=""):"/"!==e.charAt(e.length-1)&&(e+="/"),t(e,n)}}function b(t,e,n){var o=t._modulesNamespaceMap[n];return o}var w=function(t){function e(){var t=this.$options;t.store?this.$store="function"==typeof t.store?t.store():t.store:t.parent&&t.parent.$store&&(this.$store=t.parent.$store)}if(Number(t.version.split(".")[0])>=2)t.mixin({beforeCreate:e});else{var n=t.prototype._init;t.prototype._init=function(t){void 0===t&&(t={}),t.init=t.init?[e].concat(t.init):e,n.call(this,t)}}},$="undefined"!=typeof window&&window.__VUE_DEVTOOLS_GLOBAL_HOOK__,M=function(t,e){this.runtime=e,this._children=Object.create(null),this._rawModule=t;var n=t.state;this.state=("function"==typeof n?n():n)||{}},O={namespaced:{configurable:!0}};O.namespaced.get=function(){return!!this._rawModule.namespaced},M.prototype.addChild=function(t,e){this._children[t]=e},M.prototype.removeChild=function(t){delete this._children[t]},M.prototype.getChild=function(t){return this._children[t]},M.prototype.update=function(t){this._rawModule.namespaced=t.namespaced,t.actions&&(this._rawModule.actions=t.actions),t.mutations&&(this._rawModule.mutations=t.mutations),t.getters&&(this._rawModule.getters=t.getters)},M.prototype.forEachChild=function(t){e(this._children,t)},M.prototype.forEachGetter=function(t){this._rawModule.getters&&e(this._rawModule.getters,t)},M.prototype.forEachAction=function(t){this._rawModule.actions&&e(this._rawModule.actions,t)},M.prototype.forEachMutation=function(t){this._rawModule.mutations&&e(this._rawModule.mutations,t)},Object.defineProperties(M.prototype,O);var E=function(t){this.register([],t,!1)};E.prototype.get=function(t){return t.reduce(function(t,e){return t.getChild(e)},this.root)},E.prototype.getNamespace=function(t){var e=this.root;return t.reduce(function(t,n){return e=e.getChild(n),t+(e.namespaced?n+"/":"")},"")},E.prototype.update=function(t){i([],this.root,t)},E.prototype.register=function(t,n,o){var i=this;void 0===o&&(o=!0);var r=new M(n,o);0===t.length?this.root=r:this.get(t.slice(0,-1)).addChild(t[t.length-1],r),n.modules&&e(n.modules,function(e,n){i.register(t.concat(n),e,o)})},E.prototype.unregister=function(t){var e=this.get(t.slice(0,-1)),n=t[t.length-1];e.getChild(n).runtime&&e.removeChild(n)};var j,C=function(e){var n=this;void 0===e&&(e={}),!j&&"undefined"!=typeof window&&window.Vue&&_(window.Vue);var o=e.plugins;void 0===o&&(o=[]);var i=e.strict;void 0===i&&(i=!1);var r=e.state;void 0===r&&(r={}),"function"==typeof r&&(r=r()||{}),this._committing=!1,this._actions=Object.create(null),this._actionSubscribers=[],this._mutations=Object.create(null),this._wrappedGetters=Object.create(null),this._modules=new E(e),this._modulesNamespaceMap=Object.create(null),this._subscribers=[],this._watcherVM=new j;var s=this,u=this,f=u.dispatch,p=u.commit;this.dispatch=function(t,e){return f.call(s,t,e)},this.commit=function(t,e,n){return p.call(s,t,e,n)},this.strict=i,a(this,r,[],this._modules.root),c(this,r),o.forEach(function(t){return t(n)}),j.config.devtools&&t(this)},x={state:{configurable:!0}};x.state.get=function(){return this._vm._data.$$state},x.state.set=function(t){},C.prototype.commit=function(t,e,n){var o=this,i=v(t,e,n),r=i.type,s=i.payload,c=(i.options,{type:r,payload:s}),a=this._mutations[r];a&&(this._withCommit(function(){a.forEach(function(t){t(s)})}),this._subscribers.forEach(function(t){return t(c,o.state)}))},C.prototype.dispatch=function(t,e){var n=this,o=v(t,e),i=o.type,r=o.payload,s={type:i,payload:r},c=this._actions[i];if(c)return this._actionSubscribers.forEach(function(t){return t(s,n.state)}),c.length>1?Promise.all(c.map(function(t){return t(r)})):c[0](r)},C.prototype.subscribe=function(t){return r(t,this._subscribers)},C.prototype.subscribeAction=function(t){return r(t,this._actionSubscribers)},C.prototype.watch=function(t,e,n){var o=this;return this._watcherVM.$watch(function(){return t(o.state,o.getters)},e,n)},C.prototype.replaceState=function(t){var e=this;this._withCommit(function(){e._vm._data.$$state=t})},C.prototype.registerModule=function(t,e,n){void 0===n&&(n={}),"string"==typeof t&&(t=[t]),this._modules.register(t,e),a(this,this.state,t,this._modules.get(t),n.preserveState),c(this,this.state)},C.prototype.unregisterModule=function(t){var e=this;"string"==typeof t&&(t=[t]),this._modules.unregister(t),this._withCommit(function(){var n=m(e.state,t.slice(0,-1));j.delete(n,t[t.length-1])}),s(this)},C.prototype.hotUpdate=function(t){this._modules.update(t),s(this,!0)},C.prototype._withCommit=function(t){var e=this._committing;this._committing=!0,t(),this._committing=e},Object.defineProperties(C.prototype,x);var k=g(function(t,e){var n={};return y(e).forEach(function(e){var o=e.key,i=e.val;n[o]=function(){var e=this.$store.state,n=this.$store.getters;if(t){var o=b(this.$store,0,t);if(!o)return;e=o.context.state,n=o.context.getters}return"function"==typeof i?i.call(this,e,n):e[i]},n[o].vuex=!0}),n}),G=g(function(t,e){var n={};return y(e).forEach(function(e){var o=e.key,i=e.val;n[o]=function(){for(var e=[],n=arguments.length;n--;)e[n]=arguments[n];var o=this.$store.commit;if(t){var r=b(this.$store,0,t);if(!r)return;o=r.context.commit}return"function"==typeof i?i.apply(this,[o].concat(e)):o.apply(this.$store,[i].concat(e))}}),n}),S=g(function(t,e){var n={};return y(e).forEach(function(e){var o=e.key,i=e.val;i=t+i,n[o]=function(){if(!t||b(this.$store,0,t))return this.$store.getters[i]},n[o].vuex=!0}),n}),A=g(function(t,e){var n={};return y(e).forEach(function(e){var o=e.key,i=e.val;n[o]=function(){for(var e=[],n=arguments.length;n--;)e[n]=arguments[n];var o=this.$store.dispatch;if(t){var r=b(this.$store,0,t);if(!r)return;o=r.context.dispatch}return"function"==typeof i?i.apply(this,[o].concat(e)):o.apply(this.$store,[i].concat(e))}}),n});return{Store:C,install:_,version:"3.0.1",mapState:k,mapMutations:G,mapGetters:S,mapActions:A,createNamespacedHelpers:function(t){return{mapState:k.bind(null,t),mapGetters:S.bind(null,t),mapMutations:G.bind(null,t),mapActions:A.bind(null,t)}}}}); \ No newline at end of file diff --git a/vuex/package.json b/vuex/package.json new file mode 100644 index 0000000..c8d64c9 --- /dev/null +++ b/vuex/package.json @@ -0,0 +1,105 @@ +{ + "_from": "vuex@^3.0.1", + "_id": "vuex@3.0.1", + "_inBundle": false, + "_integrity": "sha1-52E1Lr4K9TfUu3Vam53Evj3379I=", + "_location": "/vuex", + "_phantomChildren": {}, + "_requested": { + "type": "range", + "registry": true, + "raw": "vuex@^3.0.1", + "name": "vuex", + "escapedName": "vuex", + "rawSpec": "^3.0.1", + "saveSpec": null, + "fetchSpec": "^3.0.1" + }, + "_requiredBy": [ + "#USER", + "/" + ], + "_resolved": "http://registry.npm.taobao.org/vuex/download/vuex-3.0.1.tgz", + "_shasum": "e761352ebe0af537d4bb755a9b9dc4be3df7efd2", + "_spec": "vuex@^3.0.1", + "_where": "C:\\Users\\Administrator\\Desktop\\mv-project", + "author": { + "name": "Evan You" + }, + "bugs": { + "url": "https://github.com/vuejs/vuex/issues" + }, + "bundleDependencies": false, + "deprecated": false, + "description": "state management for Vue.js", + "devDependencies": { + "babel-core": "^6.22.1", + "babel-loader": "^7.1.2", + "babel-plugin-transform-object-rest-spread": "^6.23.0", + "babel-polyfill": "^6.22.0", + "babel-preset-env": "^1.5.1", + "chromedriver": "^2.32.3", + "cross-spawn": "^5.0.1", + "css-loader": "^0.28.7", + "eslint": "^3.19.0", + "eslint-plugin-vue-libs": "^1.2.0", + "express": "^4.14.1", + "gitbook-plugin-edit-link": "^2.0.2", + "gitbook-plugin-github": "^3.0.0", + "gitbook-plugin-prism": "^2.3.0", + "gitbook-plugin-theme-vuejs": "^1.1.0", + "jasmine": "2.8.0", + "jasmine-core": "2.8.0", + "nightwatch": "^0.9.12", + "nightwatch-helpers": "^1.2.0", + "phantomjs-prebuilt": "^2.1.14", + "rollup": "^0.50.0", + "rollup-plugin-buble": "^0.16.0", + "rollup-plugin-replace": "^2.0.0", + "rollup-watch": "^4.3.1", + "selenium-server": "^2.53.1", + "todomvc-app-css": "^2.1.0", + "typescript": "^2.5.3", + "uglify-js": "^3.1.2", + "vue": "^2.5.0", + "vue-loader": "^13.3.0", + "vue-template-compiler": "^2.5.0", + "webpack": "^3.7.1", + "webpack-dev-middleware": "^1.10.0", + "webpack-hot-middleware": "^2.19.1" + }, + "files": [ + "dist", + "types/index.d.ts", + "types/helpers.d.ts", + "types/vue.d.ts" + ], + "homepage": "https://github.com/vuejs/vuex#readme", + "license": "MIT", + "main": "dist/vuex.common.js", + "module": "dist/vuex.esm.js", + "name": "vuex", + "repository": { + "type": "git", + "url": "git+https://github.com/vuejs/vuex.git" + }, + "scripts": { + "build": "npm run build:main && npm run build:logger", + "build:logger": "rollup -c build/rollup.logger.config.js", + "build:main": "node build/build.main.js", + "dev": "node examples/server.js", + "dev:dist": "rollup -wm -c build/rollup.dev.config.js", + "docs": "cd docs && gitbook install && gitbook serve", + "docs:deploy": "cd docs && ./deploy.sh", + "lint": "eslint src test", + "release": "bash build/release.sh", + "test": "npm run lint && npm run test:types && npm run test:unit && npm run test:ssr && npm run test:e2e", + "test:e2e": "node test/e2e/runner.js", + "test:ssr": "rollup -c build/rollup.dev.config.js && VUE_ENV=server jasmine JASMINE_CONFIG_PATH=test/unit/jasmine.json", + "test:types": "tsc -p types/test", + "test:unit": "rollup -c build/rollup.dev.config.js && jasmine JASMINE_CONFIG_PATH=test/unit/jasmine.json" + }, + "typings": "types/index.d.ts", + "unpkg": "dist/vuex.js", + "version": "3.0.1" +} diff --git a/vuex/types/README.md b/vuex/types/README.md new file mode 100644 index 0000000..2e0d5d6 --- /dev/null +++ b/vuex/types/README.md @@ -0,0 +1,7 @@ +This is the TypeScript declaration of Vuex. + +## Testing + +```sh +$ tsc -p test/tsconfig.json +``` diff --git a/vuex/types/helpers.d.ts b/vuex/types/helpers.d.ts new file mode 100644 index 0000000..e866504 --- /dev/null +++ b/vuex/types/helpers.d.ts @@ -0,0 +1,68 @@ +import Vue from 'vue'; +import { Dispatch, Commit } from './index'; + +type Dictionary = { [key: string]: T }; +type Computed = () => any; +type MutationMethod = (...args: any[]) => void; +type ActionMethod = (...args: any[]) => Promise; + +interface Mapper { + (map: string[]): Dictionary; + (map: Dictionary): Dictionary; +} + +interface MapperWithNamespace { + (namespace: string, map: string[]): Dictionary; + (namespace: string, map: Dictionary): Dictionary; +} + +interface FunctionMapper { + (map: Dictionary<(this: typeof Vue, fn: F, ...args: any[]) => any>): Dictionary; +} + +interface FunctionMapperWithNamespace { + ( + namespace: string, + map: Dictionary<(this: typeof Vue, fn: F, ...args: any[]) => any> + ): Dictionary; +} + +interface MapperForState { + ( + map: Dictionary<(this: typeof Vue, state: S, getters: any) => any> + ): Dictionary; +} + +interface MapperForStateWithNamespace { + ( + namespace: string, + map: Dictionary<(this: typeof Vue, state: S, getters: any) => any> + ): Dictionary; +} + +interface NamespacedMappers { + mapState: Mapper & MapperForState; + mapMutations: Mapper & FunctionMapper; + mapGetters: Mapper; + mapActions: Mapper & FunctionMapper; +} + +export declare const mapState: Mapper + & MapperWithNamespace + & MapperForState + & MapperForStateWithNamespace; + +export declare const mapMutations: Mapper + & MapperWithNamespace + & FunctionMapper + & FunctionMapperWithNamespace; + +export declare const mapGetters: Mapper + & MapperWithNamespace; + +export declare const mapActions: Mapper + & MapperWithNamespace + & FunctionMapper + & FunctionMapperWithNamespace; + +export declare function createNamespacedHelpers(namespace: string): NamespacedMappers; diff --git a/vuex/types/index.d.ts b/vuex/types/index.d.ts new file mode 100644 index 0000000..a504790 --- /dev/null +++ b/vuex/types/index.d.ts @@ -0,0 +1,128 @@ +import _Vue, { WatchOptions } from "vue"; + +// augment typings of Vue.js +import "./vue"; + +export * from "./helpers"; + +export declare class Store { + constructor(options: StoreOptions); + + readonly state: S; + readonly getters: any; + + replaceState(state: S): void; + + dispatch: Dispatch; + commit: Commit; + + subscribe

(fn: (mutation: P, state: S) => any): () => void; + watch(getter: (state: S) => T, cb: (value: T, oldValue: T) => void, options?: WatchOptions): () => void; + + registerModule(path: string, module: Module, options?: ModuleOptions): void; + registerModule(path: string[], module: Module, options?: ModuleOptions): void; + + unregisterModule(path: string): void; + unregisterModule(path: string[]): void; + + hotUpdate(options: { + actions?: ActionTree; + mutations?: MutationTree; + getters?: GetterTree; + modules?: ModuleTree; + }): void; +} + +export declare function install(Vue: typeof _Vue): void; + +export interface Dispatch { + (type: string, payload?: any, options?: DispatchOptions): Promise; +

(payloadWithType: P, options?: DispatchOptions): Promise; +} + +export interface Commit { + (type: string, payload?: any, options?: CommitOptions): void; +

(payloadWithType: P, options?: CommitOptions): void; +} + +export interface ActionContext { + dispatch: Dispatch; + commit: Commit; + state: S; + getters: any; + rootState: R; + rootGetters: any; +} + +export interface Payload { + type: string; +} + +export interface MutationPayload extends Payload { + payload: any; +} + +export interface DispatchOptions { + root?: boolean; +} + +export interface CommitOptions { + silent?: boolean; + root?: boolean; +} + +export interface StoreOptions { + state?: S; + getters?: GetterTree; + actions?: ActionTree; + mutations?: MutationTree; + modules?: ModuleTree; + plugins?: Plugin[]; + strict?: boolean; +} + +type ActionHandler = (injectee: ActionContext, payload: any) => any; +interface ActionObject { + root?: boolean; + handler: ActionHandler; +} + +export type Getter = (state: S, getters: any, rootState: R, rootGetters: any) => any; +export type Action = ActionHandler | ActionObject; +export type Mutation = (state: S, payload: any) => any; +export type Plugin = (store: Store) => any; + +export interface Module { + namespaced?: boolean; + state?: S | (() => S); + getters?: GetterTree; + actions?: ActionTree; + mutations?: MutationTree; + modules?: ModuleTree; +} + +export interface ModuleOptions{ + preserveState?: boolean +} + +export interface GetterTree { + [key: string]: Getter; +} + +export interface ActionTree { + [key: string]: Action; +} + +export interface MutationTree { + [key: string]: Mutation; +} + +export interface ModuleTree { + [key: string]: Module; +} + +declare const _default: { + Store: typeof Store; + install: typeof install; +} +export default _default; diff --git a/vuex/types/vue.d.ts b/vuex/types/vue.d.ts new file mode 100644 index 0000000..302fc4e --- /dev/null +++ b/vuex/types/vue.d.ts @@ -0,0 +1,18 @@ +/** + * Extends interfaces in Vue.js + */ + +import Vue, { ComponentOptions } from "vue"; +import { Store } from "./index"; + +declare module "vue/types/options" { + interface ComponentOptions { + store?: Store; + } +} + +declare module "vue/types/vue" { + interface Vue { + $store: Store; + } +}