From 72029b28db4599eed661bd0626c947473fe162eb Mon Sep 17 00:00:00 2001 From: itgaojian Date: Thu, 22 Feb 2024 11:01:15 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E5=B8=82=E7=BA=A7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- xz_mini/.gitignore | 1 + xz_mini/app.js | 73 + xz_mini/app.json | 121 + xz_mini/app.wxss | 188 + xz_mini/components/empty/empty.js | 23 + xz_mini/components/empty/empty.json | 4 + xz_mini/components/empty/empty.wxml | 5 + xz_mini/components/empty/empty.wxss | 24 + .../expandabletext/expandabletext.js | 80 + .../expandabletext/expandabletext.json | 4 + .../expandabletext/expandabletext.wxml | 7 + .../expandabletext/expandabletext.wxss | 34 + xz_mini/components/loading/pageloading.js | 23 + xz_mini/components/loading/pageloading.json | 4 + xz_mini/components/loading/pageloading.wxml | 5 + xz_mini/components/loading/pageloading.wxss | 24 + xz_mini/components/loadmore/loading-more.js | 30 + xz_mini/components/loadmore/loading-more.json | 4 + xz_mini/components/loadmore/loading-more.wxml | 5 + xz_mini/components/loadmore/loading-more.wxss | 20 + xz_mini/images/activity-on.png | Bin 0 -> 600 bytes xz_mini/images/activity.png | Bin 0 -> 539 bytes xz_mini/images/address.png | Bin 0 -> 400 bytes xz_mini/images/app_logo.png | Bin 0 -> 7466 bytes xz_mini/images/avatar.png | Bin 0 -> 530 bytes xz_mini/images/big-news.png | Bin 0 -> 2142 bytes xz_mini/images/center-bg.png | Bin 0 -> 26323 bytes xz_mini/images/center-on.png | Bin 0 -> 537 bytes xz_mini/images/center.png | Bin 0 -> 507 bytes xz_mini/images/collect.png | Bin 0 -> 541 bytes xz_mini/images/collected.png | Bin 0 -> 445 bytes xz_mini/images/culture-on.png | Bin 0 -> 756 bytes xz_mini/images/culture.png | Bin 0 -> 632 bytes xz_mini/images/delete-photo.png | Bin 0 -> 289 bytes xz_mini/images/delete.png | Bin 0 -> 284 bytes xz_mini/images/friend.png | Bin 0 -> 459 bytes xz_mini/images/good.png | Bin 0 -> 349 bytes xz_mini/images/ic_audio_bg.png | Bin 0 -> 13977 bytes xz_mini/images/ic_empty_data.png | Bin 0 -> 444 bytes xz_mini/images/ic_goods_type_default.png | Bin 0 -> 455 bytes xz_mini/images/ic_music_icon.png | Bin 0 -> 921 bytes xz_mini/images/ic_search_black.png | Bin 0 -> 1954 bytes xz_mini/images/ic_search_gray.png | Bin 0 -> 1092 bytes xz_mini/images/ic_shop_car_icon.png | Bin 0 -> 341 bytes xz_mini/images/index-on.png | Bin 0 -> 461 bytes xz_mini/images/index.png | Bin 0 -> 399 bytes xz_mini/images/loading-small.gif | Bin 0 -> 9840 bytes xz_mini/images/loading.gif | Bin 0 -> 6788 bytes xz_mini/images/login-bg.png | Bin 0 -> 34137 bytes xz_mini/images/logo.png | Bin 0 -> 4443 bytes xz_mini/images/marker_red.png | Bin 0 -> 671 bytes xz_mini/images/marker_yellow.png | Bin 0 -> 713 bytes xz_mini/images/my-collect.png | Bin 0 -> 537 bytes xz_mini/images/my-comment.png | Bin 0 -> 573 bytes xz_mini/images/my-sign.png | Bin 0 -> 450 bytes xz_mini/images/new.png | Bin 0 -> 174 bytes xz_mini/images/next.png | Bin 0 -> 597 bytes xz_mini/images/order.png | Bin 0 -> 513 bytes xz_mini/images/people.png | Bin 0 -> 1083 bytes xz_mini/images/person.png | Bin 0 -> 620 bytes xz_mini/images/play.png | Bin 0 -> 507 bytes xz_mini/images/play_next.png | Bin 0 -> 578 bytes xz_mini/images/play_pause.png | Bin 0 -> 737 bytes xz_mini/images/play_prev.png | Bin 0 -> 573 bytes xz_mini/images/play_resume.png | Bin 0 -> 805 bytes xz_mini/images/prev.png | Bin 0 -> 270 bytes xz_mini/images/select-tab.png | Bin 0 -> 5670 bytes xz_mini/images/selected-l.png | Bin 0 -> 121 bytes xz_mini/images/selected-r.png | Bin 0 -> 122 bytes xz_mini/images/setting.png | Bin 0 -> 636 bytes xz_mini/images/share.png | Bin 0 -> 687 bytes xz_mini/images/tab1.png | Bin 0 -> 1572 bytes xz_mini/images/tab2.png | Bin 0 -> 1725 bytes xz_mini/images/tab3.png | Bin 0 -> 1647 bytes xz_mini/images/tab4.png | Bin 0 -> 1234 bytes xz_mini/images/tab5.png | Bin 0 -> 1406 bytes xz_mini/images/tab6.png | Bin 0 -> 3287 bytes xz_mini/images/tab7.png | Bin 0 -> 2917 bytes xz_mini/images/team.png | Bin 0 -> 2301 bytes xz_mini/images/time.png | Bin 0 -> 886 bytes xz_mini/images/venue-on.png | Bin 0 -> 1074 bytes xz_mini/images/venue.png | Bin 0 -> 1042 bytes xz_mini/images/venue1.png | Bin 0 -> 1481 bytes xz_mini/images/venue2.png | Bin 0 -> 1345 bytes xz_mini/images/venue3.png | Bin 0 -> 1068 bytes xz_mini/images/venueall.png | Bin 0 -> 4810 bytes xz_mini/images/view.png | Bin 0 -> 594 bytes xz_mini/libs/bmap-wx.js | 452 + xz_mini/pages/activity/activity.js | 174 + xz_mini/pages/activity/activity.json | 5 + xz_mini/pages/activity/activity.wxml | 23 + xz_mini/pages/activity/activity.wxss | 105 + .../pages/activityDetail/activityDetail.js | 144 + .../pages/activityDetail/activityDetail.json | 3 + .../pages/activityDetail/activityDetail.wxml | 53 + .../pages/activityDetail/activityDetail.wxss | 91 + .../pages/activityDialog/activityDialog.js | 156 + .../pages/activityDialog/activityDialog.json | 5 + .../pages/activityDialog/activityDialog.wxml | 24 + .../pages/activityDialog/activityDialog.wxss | 42 + xz_mini/pages/activitySign/activitySign.js | 196 + xz_mini/pages/activitySign/activitySign.json | 4 + xz_mini/pages/activitySign/activitySign.wxml | 59 + xz_mini/pages/activitySign/activitySign.wxss | 104 + xz_mini/pages/book/book.js | 410 + xz_mini/pages/book/book.json | 3 + xz_mini/pages/book/book.wxml | 77 + xz_mini/pages/book/book.wxss | 237 + xz_mini/pages/broadcast/broadcast.js | 105 + xz_mini/pages/broadcast/broadcast.json | 5 + xz_mini/pages/broadcast/broadcast.wxml | 15 + xz_mini/pages/broadcast/broadcast.wxss | 41 + .../pages/broadcastDetail/broadcastDetail.js | 111 + .../broadcastDetail/broadcastDetail.json | 3 + .../broadcastDetail/broadcastDetail.wxml | 24 + .../broadcastDetail/broadcastDetail.wxss | 71 + xz_mini/pages/broadcastList/broadcastList.js | 112 + .../pages/broadcastList/broadcastList.json | 5 + .../pages/broadcastList/broadcastList.wxml | 7 + .../pages/broadcastList/broadcastList.wxss | 25 + xz_mini/pages/center/center.js | 356 + xz_mini/pages/center/center.json | 3 + xz_mini/pages/center/center.wxml | 82 + xz_mini/pages/center/center.wxss | 167 + xz_mini/pages/commonQrCode/commonQrCode.js | 98 + xz_mini/pages/commonQrCode/commonQrCode.json | 3 + xz_mini/pages/commonQrCode/commonQrCode.wxml | 15 + xz_mini/pages/commonQrCode/commonQrCode.wxss | 80 + xz_mini/pages/cultureDetail/cultureDetail.js | 137 + .../pages/cultureDetail/cultureDetail.json | 3 + .../pages/cultureDetail/cultureDetail.wxml | 97 + .../pages/cultureDetail/cultureDetail.wxss | 116 + xz_mini/pages/cultureMap/cultureMap.js | 59 + xz_mini/pages/cultureMap/cultureMap.json | 3 + xz_mini/pages/cultureMap/cultureMap.wxml | 3 + xz_mini/pages/cultureMap/cultureMap.wxss | 12 + xz_mini/pages/friendCircle/friendCircle.js | 121 + xz_mini/pages/friendCircle/friendCircle.json | 6 + xz_mini/pages/friendCircle/friendCircle.wxml | 55 + xz_mini/pages/friendCircle/friendCircle.wxss | 71 + xz_mini/pages/heritage/heritage.js | 121 + xz_mini/pages/heritage/heritage.json | 6 + xz_mini/pages/heritage/heritage.wxml | 33 + xz_mini/pages/heritage/heritage.wxss | 87 + xz_mini/pages/index/index.js | 410 + xz_mini/pages/index/index.json | 3 + xz_mini/pages/index/index.wxml | 170 + xz_mini/pages/index/index.wxss | 393 + xz_mini/pages/login/login.js | 66 + xz_mini/pages/login/login.json | 3 + xz_mini/pages/login/login.wxml | 25 + xz_mini/pages/login/login.wxss | 84 + xz_mini/pages/myActivity/myActivity.js | 147 + xz_mini/pages/myActivity/myActivity.json | 4 + xz_mini/pages/myActivity/myActivity.wxml | 15 + xz_mini/pages/myActivity/myActivity.wxss | 105 + .../pages/myFriendCircle/myFriendCircle.js | 116 + .../pages/myFriendCircle/myFriendCircle.json | 3 + .../pages/myFriendCircle/myFriendCircle.wxml | 54 + .../pages/myFriendCircle/myFriendCircle.wxss | 68 + xz_mini/pages/myVenueOrder/myVenueOrder.js | 66 + xz_mini/pages/myVenueOrder/myVenueOrder.json | 3 + xz_mini/pages/myVenueOrder/myVenueOrder.wxml | 44 + xz_mini/pages/myVenueOrder/myVenueOrder.wxss | 51 + .../myVolunteerActivity.js | 138 + .../myVolunteerActivity.json | 4 + .../myVolunteerActivity.wxml | 30 + .../myVolunteerActivity.wxss | 137 + .../pages/myVolunteerTeam/myVolunteerTeam.js | 158 + .../myVolunteerTeam/myVolunteerTeam.json | 4 + .../myVolunteerTeam/myVolunteerTeam.wxml | 15 + .../myVolunteerTeam/myVolunteerTeam.wxss | 92 + xz_mini/pages/newTeam/newTeam.js | 375 + xz_mini/pages/newTeam/newTeam.json | 4 + xz_mini/pages/newTeam/newTeam.wxml | 77 + xz_mini/pages/newTeam/newTeam.wxss | 88 + .../newVolunteerActivity.js | 254 + .../newVolunteerActivity.json | 4 + .../newVolunteerActivity.wxml | 102 + .../newVolunteerActivity.wxss | 75 + xz_mini/pages/newsDetail/newsDetail.js | 287 + xz_mini/pages/newsDetail/newsDetail.json | 6 + xz_mini/pages/newsDetail/newsDetail.wxml | 89 + xz_mini/pages/newsDetail/newsDetail.wxss | 238 + xz_mini/pages/newsList/newsList.js | 146 + xz_mini/pages/newsList/newsList.json | 6 + xz_mini/pages/newsList/newsList.wxml | 101 + xz_mini/pages/newsList/newsList.wxss | 232 + xz_mini/pages/order/order.js | 114 + xz_mini/pages/order/order.json | 3 + xz_mini/pages/order/order.wxml | 25 + xz_mini/pages/order/order.wxss | 58 + xz_mini/pages/orderDetail/orderDetail.js | 171 + xz_mini/pages/orderDetail/orderDetail.json | 3 + xz_mini/pages/orderDetail/orderDetail.wxml | 40 + xz_mini/pages/orderDetail/orderDetail.wxss | 92 + xz_mini/pages/register/register.js | 66 + xz_mini/pages/register/register.json | 3 + xz_mini/pages/register/register.wxml | 56 + xz_mini/pages/register/register.wxss | 83 + xz_mini/pages/resource/resource.js | 143 + xz_mini/pages/resource/resource.json | 3 + xz_mini/pages/resource/resource.wxml | 25 + xz_mini/pages/resource/resource.wxss | 141 + .../serviceActivityDetail.js | 313 + .../serviceActivityDetail.json | 4 + .../serviceActivityDetail.wxml | 44 + .../serviceActivityDetail.wxss | 97 + xz_mini/pages/shop/shopcategory.js | 62 + xz_mini/pages/shop/shopcategory.json | 3 + xz_mini/pages/shop/shopcategory.wxml | 31 + xz_mini/pages/shop/shopcategory.wxss | 148 + xz_mini/pages/teamDetail/teamDetail.js | 168 + xz_mini/pages/teamDetail/teamDetail.json | 3 + xz_mini/pages/teamDetail/teamDetail.wxml | 57 + xz_mini/pages/teamDetail/teamDetail.wxss | 83 + xz_mini/pages/template/template.js | 99 + xz_mini/pages/template/template.json | 3 + xz_mini/pages/template/template.wxml | 1 + xz_mini/pages/template/template.wxss | 1 + xz_mini/pages/train/train.js | 144 + xz_mini/pages/train/train.json | 3 + xz_mini/pages/train/train.wxml | 25 + xz_mini/pages/train/train.wxss | 141 + xz_mini/pages/travel/travel.js | 118 + xz_mini/pages/travel/travel.json | 3 + xz_mini/pages/travel/travel.wxml | 8 + xz_mini/pages/travel/travel.wxss | 52 + xz_mini/pages/userAgree/userAgree.js | 104 + xz_mini/pages/userAgree/userAgree.json | 3 + xz_mini/pages/userAgree/userAgree.wxml | 4 + xz_mini/pages/userAgree/userAgree.wxss | 1 + xz_mini/pages/venue/venue.js | 230 + xz_mini/pages/venue/venue.json | 5 + xz_mini/pages/venue/venue.wxml | 49 + xz_mini/pages/venue/venue.wxss | 125 + xz_mini/pages/venueDetail/venueDetail.js | 137 + xz_mini/pages/venueDetail/venueDetail.json | 3 + xz_mini/pages/venueDetail/venueDetail.wxml | 49 + xz_mini/pages/venueDetail/venueDetail.wxss | 117 + xz_mini/pages/volunteer/volunteer.js | 140 + xz_mini/pages/volunteer/volunteer.json | 5 + xz_mini/pages/volunteer/volunteer.wxml | 63 + xz_mini/pages/volunteer/volunteer.wxss | 136 + .../volunteerRegister/volunteerRegister.js | 468 + .../volunteerRegister/volunteerRegister.json | 4 + .../volunteerRegister/volunteerRegister.wxml | 135 + .../volunteerRegister/volunteerRegister.wxss | 110 + xz_mini/pages/volunteerTeam/volunteerTeam.js | 206 + .../pages/volunteerTeam/volunteerTeam.json | 4 + .../pages/volunteerTeam/volunteerTeam.wxml | 30 + .../pages/volunteerTeam/volunteerTeam.wxss | 93 + xz_mini/project.private.config.json | 7 + xz_mini/sitemap.json | 7 + .../subpages/addresschoose/addresschoose.js | 147 + .../subpages/addresschoose/addresschoose.json | 3 + .../subpages/addresschoose/addresschoose.wxml | 20 + .../subpages/addresschoose/addresschoose.wxss | 106 + .../subpages/addshopaddress/addshopaddress.js | 244 + .../addshopaddress/addshopaddress.json | 4 + .../addshopaddress/addshopaddress.wxml | 72 + .../addshopaddress/addshopaddress.wxss | 58 + .../editshopaddress/editshopaddress.js | 285 + .../editshopaddress/editshopaddress.json | 4 + .../editshopaddress/editshopaddress.wxml | 74 + .../editshopaddress/editshopaddress.wxss | 64 + xz_mini/subpages/goodsaddress/goodsaddress.js | 140 + .../subpages/goodsaddress/goodsaddress.json | 4 + .../subpages/goodsaddress/goodsaddress.wxml | 23 + .../subpages/goodsaddress/goodsaddress.wxss | 108 + xz_mini/subpages/goodscar/goodscar.js | 137 + xz_mini/subpages/goodscar/goodscar.json | 4 + xz_mini/subpages/goodscar/goodscar.wxml | 44 + xz_mini/subpages/goodscar/goodscar.wxss | 240 + xz_mini/subpages/goodsdetail/goodsdetail.js | 181 + xz_mini/subpages/goodsdetail/goodsdetail.json | 3 + xz_mini/subpages/goodsdetail/goodsdetail.wxml | 83 + xz_mini/subpages/goodsdetail/goodsdetail.wxss | 296 + xz_mini/subpages/goodslist/goodslist.js | 89 + xz_mini/subpages/goodslist/goodslist.json | 8 + xz_mini/subpages/goodslist/goodslist.wxml | 26 + xz_mini/subpages/goodslist/goodslist.wxss | 96 + xz_mini/subpages/goodsorder/goodsorder.js | 294 + xz_mini/subpages/goodsorder/goodsorder.json | 5 + xz_mini/subpages/goodsorder/goodsorder.wxml | 62 + xz_mini/subpages/goodsorder/goodsorder.wxss | 358 + .../subpages/images/ic_add_circle_icon.png | Bin 0 -> 809 bytes xz_mini/subpages/images/ic_arrow_cir.png | Bin 0 -> 416 bytes xz_mini/subpages/images/ic_cb_checked.png | Bin 0 -> 869 bytes xz_mini/subpages/images/ic_cb_unchecked.png | Bin 0 -> 900 bytes .../subpages/images/ic_del_circle_icon.png | Bin 0 -> 696 bytes .../subpages/images/ic_divid_line_bottom.png | Bin 0 -> 198 bytes xz_mini/subpages/images/ic_edit_icon.png | Bin 0 -> 425 bytes .../subpages/images/ic_goods_type_default.png | Bin 0 -> 1049 bytes xz_mini/subpages/images/ic_shop_car_icon.png | Bin 0 -> 685 bytes xz_mini/subpages/liverecord/liverecord.js | 85 + xz_mini/subpages/liverecord/liverecord.json | 4 + xz_mini/subpages/liverecord/liverecord.wxml | 7 + xz_mini/subpages/liverecord/liverecord.wxss | 30 + xz_mini/subpages/orderconfirm/orderconfirm.js | 154 + .../subpages/orderconfirm/orderconfirm.json | 4 + .../subpages/orderconfirm/orderconfirm.wxml | 51 + .../subpages/orderconfirm/orderconfirm.wxss | 310 + xz_mini/subpages/search/commonSearch.js | 470 + xz_mini/subpages/search/commonSearch.json | 3 + xz_mini/subpages/search/commonSearch.wxml | 222 + xz_mini/subpages/search/commonSearch.wxss | 404 + xz_mini/subpages/webcontentview/webcontent.js | 19 + .../subpages/webcontentview/webcontent.json | 3 + .../subpages/webcontentview/webcontent.wxml | 2 + .../subpages/webcontentview/webcontent.wxss | 1 + xz_mini/utils/dialog.js | 15 + xz_mini/utils/restAjax.js | 235 + xz_mini/utils/util.js | 43 + xz_mini/utils/utils.wxs | 42 + xz_mini/webview/flv/css/reset.css | 1 + xz_mini/webview/flv/css/style.css | 27 + xz_mini/webview/flv/index.html | 135 + xz_mini/webview/flv/js/flv.min.js | 7 + xz_mini/webview/flv/js/jquery-2.1.4.min.js | 3 + xz_mini/webview/flv/js/layer_mobile/layer.js | 2 + .../flv/js/layer_mobile/need/layer.css | 1 + xz_mini/webview/flv/js/rem.js | 12 + xz_mini/webview/flv/js/vue.js | 10947 ++++++++++++++++ xz_mini/webview/flv/readme.txt | 1 + 325 files changed, 31190 insertions(+) create mode 100644 xz_mini/.gitignore create mode 100644 xz_mini/app.js create mode 100644 xz_mini/app.json create mode 100644 xz_mini/app.wxss create mode 100644 xz_mini/components/empty/empty.js create mode 100644 xz_mini/components/empty/empty.json create mode 100644 xz_mini/components/empty/empty.wxml create mode 100644 xz_mini/components/empty/empty.wxss create mode 100644 xz_mini/components/expandabletext/expandabletext.js create mode 100644 xz_mini/components/expandabletext/expandabletext.json create mode 100644 xz_mini/components/expandabletext/expandabletext.wxml create mode 100644 xz_mini/components/expandabletext/expandabletext.wxss create mode 100644 xz_mini/components/loading/pageloading.js create mode 100644 xz_mini/components/loading/pageloading.json create mode 100644 xz_mini/components/loading/pageloading.wxml create mode 100644 xz_mini/components/loading/pageloading.wxss create mode 100644 xz_mini/components/loadmore/loading-more.js create mode 100644 xz_mini/components/loadmore/loading-more.json create mode 100644 xz_mini/components/loadmore/loading-more.wxml create mode 100644 xz_mini/components/loadmore/loading-more.wxss create mode 100755 xz_mini/images/activity-on.png create mode 100755 xz_mini/images/activity.png create mode 100755 xz_mini/images/address.png create mode 100644 xz_mini/images/app_logo.png create mode 100755 xz_mini/images/avatar.png create mode 100755 xz_mini/images/big-news.png create mode 100755 xz_mini/images/center-bg.png create mode 100755 xz_mini/images/center-on.png create mode 100755 xz_mini/images/center.png create mode 100755 xz_mini/images/collect.png create mode 100755 xz_mini/images/collected.png create mode 100755 xz_mini/images/culture-on.png create mode 100755 xz_mini/images/culture.png create mode 100755 xz_mini/images/delete-photo.png create mode 100755 xz_mini/images/delete.png create mode 100755 xz_mini/images/friend.png create mode 100755 xz_mini/images/good.png create mode 100755 xz_mini/images/ic_audio_bg.png create mode 100755 xz_mini/images/ic_empty_data.png create mode 100755 xz_mini/images/ic_goods_type_default.png create mode 100644 xz_mini/images/ic_music_icon.png create mode 100644 xz_mini/images/ic_search_black.png create mode 100644 xz_mini/images/ic_search_gray.png create mode 100755 xz_mini/images/ic_shop_car_icon.png create mode 100755 xz_mini/images/index-on.png create mode 100755 xz_mini/images/index.png create mode 100644 xz_mini/images/loading-small.gif create mode 100644 xz_mini/images/loading.gif create mode 100755 xz_mini/images/login-bg.png create mode 100755 xz_mini/images/logo.png create mode 100755 xz_mini/images/marker_red.png create mode 100755 xz_mini/images/marker_yellow.png create mode 100755 xz_mini/images/my-collect.png create mode 100755 xz_mini/images/my-comment.png create mode 100755 xz_mini/images/my-sign.png create mode 100644 xz_mini/images/new.png create mode 100644 xz_mini/images/next.png create mode 100644 xz_mini/images/order.png create mode 100644 xz_mini/images/people.png create mode 100644 xz_mini/images/person.png create mode 100755 xz_mini/images/play.png create mode 100755 xz_mini/images/play_next.png create mode 100755 xz_mini/images/play_pause.png create mode 100755 xz_mini/images/play_prev.png create mode 100755 xz_mini/images/play_resume.png create mode 100755 xz_mini/images/prev.png create mode 100755 xz_mini/images/select-tab.png create mode 100755 xz_mini/images/selected-l.png create mode 100755 xz_mini/images/selected-r.png create mode 100755 xz_mini/images/setting.png create mode 100755 xz_mini/images/share.png create mode 100644 xz_mini/images/tab1.png create mode 100644 xz_mini/images/tab2.png create mode 100644 xz_mini/images/tab3.png create mode 100644 xz_mini/images/tab4.png create mode 100644 xz_mini/images/tab5.png create mode 100644 xz_mini/images/tab6.png create mode 100644 xz_mini/images/tab7.png create mode 100644 xz_mini/images/team.png create mode 100644 xz_mini/images/time.png create mode 100644 xz_mini/images/venue-on.png create mode 100644 xz_mini/images/venue.png create mode 100644 xz_mini/images/venue1.png create mode 100644 xz_mini/images/venue2.png create mode 100644 xz_mini/images/venue3.png create mode 100644 xz_mini/images/venueall.png create mode 100644 xz_mini/images/view.png create mode 100644 xz_mini/libs/bmap-wx.js create mode 100644 xz_mini/pages/activity/activity.js create mode 100644 xz_mini/pages/activity/activity.json create mode 100644 xz_mini/pages/activity/activity.wxml create mode 100644 xz_mini/pages/activity/activity.wxss create mode 100644 xz_mini/pages/activityDetail/activityDetail.js create mode 100644 xz_mini/pages/activityDetail/activityDetail.json create mode 100644 xz_mini/pages/activityDetail/activityDetail.wxml create mode 100644 xz_mini/pages/activityDetail/activityDetail.wxss create mode 100644 xz_mini/pages/activityDialog/activityDialog.js create mode 100644 xz_mini/pages/activityDialog/activityDialog.json create mode 100644 xz_mini/pages/activityDialog/activityDialog.wxml create mode 100644 xz_mini/pages/activityDialog/activityDialog.wxss create mode 100644 xz_mini/pages/activitySign/activitySign.js create mode 100644 xz_mini/pages/activitySign/activitySign.json create mode 100644 xz_mini/pages/activitySign/activitySign.wxml create mode 100644 xz_mini/pages/activitySign/activitySign.wxss create mode 100644 xz_mini/pages/book/book.js create mode 100644 xz_mini/pages/book/book.json create mode 100644 xz_mini/pages/book/book.wxml create mode 100644 xz_mini/pages/book/book.wxss create mode 100644 xz_mini/pages/broadcast/broadcast.js create mode 100644 xz_mini/pages/broadcast/broadcast.json create mode 100644 xz_mini/pages/broadcast/broadcast.wxml create mode 100644 xz_mini/pages/broadcast/broadcast.wxss create mode 100644 xz_mini/pages/broadcastDetail/broadcastDetail.js create mode 100644 xz_mini/pages/broadcastDetail/broadcastDetail.json create mode 100644 xz_mini/pages/broadcastDetail/broadcastDetail.wxml create mode 100644 xz_mini/pages/broadcastDetail/broadcastDetail.wxss create mode 100644 xz_mini/pages/broadcastList/broadcastList.js create mode 100644 xz_mini/pages/broadcastList/broadcastList.json create mode 100644 xz_mini/pages/broadcastList/broadcastList.wxml create mode 100644 xz_mini/pages/broadcastList/broadcastList.wxss create mode 100644 xz_mini/pages/center/center.js create mode 100644 xz_mini/pages/center/center.json create mode 100644 xz_mini/pages/center/center.wxml create mode 100644 xz_mini/pages/center/center.wxss create mode 100644 xz_mini/pages/commonQrCode/commonQrCode.js create mode 100644 xz_mini/pages/commonQrCode/commonQrCode.json create mode 100644 xz_mini/pages/commonQrCode/commonQrCode.wxml create mode 100644 xz_mini/pages/commonQrCode/commonQrCode.wxss create mode 100644 xz_mini/pages/cultureDetail/cultureDetail.js create mode 100644 xz_mini/pages/cultureDetail/cultureDetail.json create mode 100644 xz_mini/pages/cultureDetail/cultureDetail.wxml create mode 100644 xz_mini/pages/cultureDetail/cultureDetail.wxss create mode 100644 xz_mini/pages/cultureMap/cultureMap.js create mode 100644 xz_mini/pages/cultureMap/cultureMap.json create mode 100644 xz_mini/pages/cultureMap/cultureMap.wxml create mode 100644 xz_mini/pages/cultureMap/cultureMap.wxss create mode 100644 xz_mini/pages/friendCircle/friendCircle.js create mode 100644 xz_mini/pages/friendCircle/friendCircle.json create mode 100644 xz_mini/pages/friendCircle/friendCircle.wxml create mode 100644 xz_mini/pages/friendCircle/friendCircle.wxss create mode 100644 xz_mini/pages/heritage/heritage.js create mode 100644 xz_mini/pages/heritage/heritage.json create mode 100644 xz_mini/pages/heritage/heritage.wxml create mode 100644 xz_mini/pages/heritage/heritage.wxss create mode 100644 xz_mini/pages/index/index.js create mode 100644 xz_mini/pages/index/index.json create mode 100644 xz_mini/pages/index/index.wxml create mode 100644 xz_mini/pages/index/index.wxss create mode 100644 xz_mini/pages/login/login.js create mode 100644 xz_mini/pages/login/login.json create mode 100644 xz_mini/pages/login/login.wxml create mode 100644 xz_mini/pages/login/login.wxss create mode 100644 xz_mini/pages/myActivity/myActivity.js create mode 100644 xz_mini/pages/myActivity/myActivity.json create mode 100644 xz_mini/pages/myActivity/myActivity.wxml create mode 100644 xz_mini/pages/myActivity/myActivity.wxss create mode 100644 xz_mini/pages/myFriendCircle/myFriendCircle.js create mode 100644 xz_mini/pages/myFriendCircle/myFriendCircle.json create mode 100644 xz_mini/pages/myFriendCircle/myFriendCircle.wxml create mode 100644 xz_mini/pages/myFriendCircle/myFriendCircle.wxss create mode 100644 xz_mini/pages/myVenueOrder/myVenueOrder.js create mode 100644 xz_mini/pages/myVenueOrder/myVenueOrder.json create mode 100644 xz_mini/pages/myVenueOrder/myVenueOrder.wxml create mode 100644 xz_mini/pages/myVenueOrder/myVenueOrder.wxss create mode 100644 xz_mini/pages/myVolunteerActivity/myVolunteerActivity.js create mode 100644 xz_mini/pages/myVolunteerActivity/myVolunteerActivity.json create mode 100644 xz_mini/pages/myVolunteerActivity/myVolunteerActivity.wxml create mode 100644 xz_mini/pages/myVolunteerActivity/myVolunteerActivity.wxss create mode 100644 xz_mini/pages/myVolunteerTeam/myVolunteerTeam.js create mode 100644 xz_mini/pages/myVolunteerTeam/myVolunteerTeam.json create mode 100644 xz_mini/pages/myVolunteerTeam/myVolunteerTeam.wxml create mode 100644 xz_mini/pages/myVolunteerTeam/myVolunteerTeam.wxss create mode 100644 xz_mini/pages/newTeam/newTeam.js create mode 100644 xz_mini/pages/newTeam/newTeam.json create mode 100644 xz_mini/pages/newTeam/newTeam.wxml create mode 100644 xz_mini/pages/newTeam/newTeam.wxss create mode 100644 xz_mini/pages/newVolunteerActivity/newVolunteerActivity.js create mode 100644 xz_mini/pages/newVolunteerActivity/newVolunteerActivity.json create mode 100644 xz_mini/pages/newVolunteerActivity/newVolunteerActivity.wxml create mode 100644 xz_mini/pages/newVolunteerActivity/newVolunteerActivity.wxss create mode 100644 xz_mini/pages/newsDetail/newsDetail.js create mode 100644 xz_mini/pages/newsDetail/newsDetail.json create mode 100644 xz_mini/pages/newsDetail/newsDetail.wxml create mode 100644 xz_mini/pages/newsDetail/newsDetail.wxss create mode 100644 xz_mini/pages/newsList/newsList.js create mode 100644 xz_mini/pages/newsList/newsList.json create mode 100644 xz_mini/pages/newsList/newsList.wxml create mode 100644 xz_mini/pages/newsList/newsList.wxss create mode 100644 xz_mini/pages/order/order.js create mode 100644 xz_mini/pages/order/order.json create mode 100644 xz_mini/pages/order/order.wxml create mode 100644 xz_mini/pages/order/order.wxss create mode 100644 xz_mini/pages/orderDetail/orderDetail.js create mode 100644 xz_mini/pages/orderDetail/orderDetail.json create mode 100644 xz_mini/pages/orderDetail/orderDetail.wxml create mode 100644 xz_mini/pages/orderDetail/orderDetail.wxss create mode 100644 xz_mini/pages/register/register.js create mode 100644 xz_mini/pages/register/register.json create mode 100644 xz_mini/pages/register/register.wxml create mode 100644 xz_mini/pages/register/register.wxss create mode 100644 xz_mini/pages/resource/resource.js create mode 100644 xz_mini/pages/resource/resource.json create mode 100644 xz_mini/pages/resource/resource.wxml create mode 100644 xz_mini/pages/resource/resource.wxss create mode 100644 xz_mini/pages/serviceActivityDetail/serviceActivityDetail.js create mode 100644 xz_mini/pages/serviceActivityDetail/serviceActivityDetail.json create mode 100644 xz_mini/pages/serviceActivityDetail/serviceActivityDetail.wxml create mode 100644 xz_mini/pages/serviceActivityDetail/serviceActivityDetail.wxss create mode 100644 xz_mini/pages/shop/shopcategory.js create mode 100644 xz_mini/pages/shop/shopcategory.json create mode 100644 xz_mini/pages/shop/shopcategory.wxml create mode 100644 xz_mini/pages/shop/shopcategory.wxss create mode 100644 xz_mini/pages/teamDetail/teamDetail.js create mode 100644 xz_mini/pages/teamDetail/teamDetail.json create mode 100644 xz_mini/pages/teamDetail/teamDetail.wxml create mode 100644 xz_mini/pages/teamDetail/teamDetail.wxss create mode 100644 xz_mini/pages/template/template.js create mode 100644 xz_mini/pages/template/template.json create mode 100644 xz_mini/pages/template/template.wxml create mode 100644 xz_mini/pages/template/template.wxss create mode 100644 xz_mini/pages/train/train.js create mode 100644 xz_mini/pages/train/train.json create mode 100644 xz_mini/pages/train/train.wxml create mode 100644 xz_mini/pages/train/train.wxss create mode 100644 xz_mini/pages/travel/travel.js create mode 100644 xz_mini/pages/travel/travel.json create mode 100644 xz_mini/pages/travel/travel.wxml create mode 100644 xz_mini/pages/travel/travel.wxss create mode 100644 xz_mini/pages/userAgree/userAgree.js create mode 100644 xz_mini/pages/userAgree/userAgree.json create mode 100644 xz_mini/pages/userAgree/userAgree.wxml create mode 100644 xz_mini/pages/userAgree/userAgree.wxss create mode 100644 xz_mini/pages/venue/venue.js create mode 100644 xz_mini/pages/venue/venue.json create mode 100644 xz_mini/pages/venue/venue.wxml create mode 100644 xz_mini/pages/venue/venue.wxss create mode 100644 xz_mini/pages/venueDetail/venueDetail.js create mode 100644 xz_mini/pages/venueDetail/venueDetail.json create mode 100644 xz_mini/pages/venueDetail/venueDetail.wxml create mode 100644 xz_mini/pages/venueDetail/venueDetail.wxss create mode 100644 xz_mini/pages/volunteer/volunteer.js create mode 100644 xz_mini/pages/volunteer/volunteer.json create mode 100644 xz_mini/pages/volunteer/volunteer.wxml create mode 100644 xz_mini/pages/volunteer/volunteer.wxss create mode 100644 xz_mini/pages/volunteerRegister/volunteerRegister.js create mode 100644 xz_mini/pages/volunteerRegister/volunteerRegister.json create mode 100644 xz_mini/pages/volunteerRegister/volunteerRegister.wxml create mode 100644 xz_mini/pages/volunteerRegister/volunteerRegister.wxss create mode 100644 xz_mini/pages/volunteerTeam/volunteerTeam.js create mode 100644 xz_mini/pages/volunteerTeam/volunteerTeam.json create mode 100644 xz_mini/pages/volunteerTeam/volunteerTeam.wxml create mode 100644 xz_mini/pages/volunteerTeam/volunteerTeam.wxss create mode 100644 xz_mini/project.private.config.json create mode 100644 xz_mini/sitemap.json create mode 100644 xz_mini/subpages/addresschoose/addresschoose.js create mode 100644 xz_mini/subpages/addresschoose/addresschoose.json create mode 100644 xz_mini/subpages/addresschoose/addresschoose.wxml create mode 100644 xz_mini/subpages/addresschoose/addresschoose.wxss create mode 100644 xz_mini/subpages/addshopaddress/addshopaddress.js create mode 100644 xz_mini/subpages/addshopaddress/addshopaddress.json create mode 100644 xz_mini/subpages/addshopaddress/addshopaddress.wxml create mode 100644 xz_mini/subpages/addshopaddress/addshopaddress.wxss create mode 100644 xz_mini/subpages/editshopaddress/editshopaddress.js create mode 100644 xz_mini/subpages/editshopaddress/editshopaddress.json create mode 100644 xz_mini/subpages/editshopaddress/editshopaddress.wxml create mode 100644 xz_mini/subpages/editshopaddress/editshopaddress.wxss create mode 100644 xz_mini/subpages/goodsaddress/goodsaddress.js create mode 100644 xz_mini/subpages/goodsaddress/goodsaddress.json create mode 100644 xz_mini/subpages/goodsaddress/goodsaddress.wxml create mode 100644 xz_mini/subpages/goodsaddress/goodsaddress.wxss create mode 100644 xz_mini/subpages/goodscar/goodscar.js create mode 100644 xz_mini/subpages/goodscar/goodscar.json create mode 100644 xz_mini/subpages/goodscar/goodscar.wxml create mode 100644 xz_mini/subpages/goodscar/goodscar.wxss create mode 100644 xz_mini/subpages/goodsdetail/goodsdetail.js create mode 100644 xz_mini/subpages/goodsdetail/goodsdetail.json create mode 100644 xz_mini/subpages/goodsdetail/goodsdetail.wxml create mode 100644 xz_mini/subpages/goodsdetail/goodsdetail.wxss create mode 100644 xz_mini/subpages/goodslist/goodslist.js create mode 100644 xz_mini/subpages/goodslist/goodslist.json create mode 100644 xz_mini/subpages/goodslist/goodslist.wxml create mode 100644 xz_mini/subpages/goodslist/goodslist.wxss create mode 100644 xz_mini/subpages/goodsorder/goodsorder.js create mode 100644 xz_mini/subpages/goodsorder/goodsorder.json create mode 100644 xz_mini/subpages/goodsorder/goodsorder.wxml create mode 100644 xz_mini/subpages/goodsorder/goodsorder.wxss create mode 100644 xz_mini/subpages/images/ic_add_circle_icon.png create mode 100755 xz_mini/subpages/images/ic_arrow_cir.png create mode 100644 xz_mini/subpages/images/ic_cb_checked.png create mode 100644 xz_mini/subpages/images/ic_cb_unchecked.png create mode 100644 xz_mini/subpages/images/ic_del_circle_icon.png create mode 100644 xz_mini/subpages/images/ic_divid_line_bottom.png create mode 100644 xz_mini/subpages/images/ic_edit_icon.png create mode 100644 xz_mini/subpages/images/ic_goods_type_default.png create mode 100644 xz_mini/subpages/images/ic_shop_car_icon.png create mode 100644 xz_mini/subpages/liverecord/liverecord.js create mode 100644 xz_mini/subpages/liverecord/liverecord.json create mode 100644 xz_mini/subpages/liverecord/liverecord.wxml create mode 100644 xz_mini/subpages/liverecord/liverecord.wxss create mode 100644 xz_mini/subpages/orderconfirm/orderconfirm.js create mode 100644 xz_mini/subpages/orderconfirm/orderconfirm.json create mode 100644 xz_mini/subpages/orderconfirm/orderconfirm.wxml create mode 100644 xz_mini/subpages/orderconfirm/orderconfirm.wxss create mode 100644 xz_mini/subpages/search/commonSearch.js create mode 100644 xz_mini/subpages/search/commonSearch.json create mode 100644 xz_mini/subpages/search/commonSearch.wxml create mode 100644 xz_mini/subpages/search/commonSearch.wxss create mode 100644 xz_mini/subpages/webcontentview/webcontent.js create mode 100644 xz_mini/subpages/webcontentview/webcontent.json create mode 100644 xz_mini/subpages/webcontentview/webcontent.wxml create mode 100644 xz_mini/subpages/webcontentview/webcontent.wxss create mode 100644 xz_mini/utils/dialog.js create mode 100644 xz_mini/utils/restAjax.js create mode 100644 xz_mini/utils/util.js create mode 100644 xz_mini/utils/utils.wxs create mode 100644 xz_mini/webview/flv/css/reset.css create mode 100644 xz_mini/webview/flv/css/style.css create mode 100644 xz_mini/webview/flv/index.html create mode 100644 xz_mini/webview/flv/js/flv.min.js create mode 100644 xz_mini/webview/flv/js/jquery-2.1.4.min.js create mode 100644 xz_mini/webview/flv/js/layer_mobile/layer.js create mode 100644 xz_mini/webview/flv/js/layer_mobile/need/layer.css create mode 100644 xz_mini/webview/flv/js/rem.js create mode 100644 xz_mini/webview/flv/js/vue.js create mode 100644 xz_mini/webview/flv/readme.txt diff --git a/xz_mini/.gitignore b/xz_mini/.gitignore new file mode 100644 index 0000000..a60a8c6 --- /dev/null +++ b/xz_mini/.gitignore @@ -0,0 +1 @@ +/project.config.json diff --git a/xz_mini/app.js b/xz_mini/app.js new file mode 100644 index 0000000..2b053e6 --- /dev/null +++ b/xz_mini/app.js @@ -0,0 +1,73 @@ +//app.js +var restAjax = require('utils/restAjax.js'); +var dialog = require('utils/dialog.js'); +var utils = require('utils/util.js'); +// + 'https://www.xzszwhy.cn/usercenter' +App({ + loginUrl: restAjax.baseUrl, + usercenterUrl: restAjax.baseUrl, + newsUrl: restAjax.baseUrl, + newsContentUrl: restAjax.url, + libraryUrl: restAjax.baseUrl, + venueUrl: restAjax.baseUrl, + activityUrl: restAjax.baseUrl, + volunteerUrl: restAjax.baseUrl, + activityUrl: restAjax.baseUrl, + volunteerUrl: restAjax.baseUrl, + liveUrl: restAjax.url + 'live', + liveRecordUrl: restAjax.baseUrl, + socialUrl: restAjax.baseUrl, + areaCode: '540200000000', + areaName: '日喀则市', + areaId: '640675', + appId: 'wxa5c5246b283713de', + shopUrl: restAjax.url + "xzshop", + bigDataUrl: restAjax.url + "module", + restAjax: restAjax, + shopImgUrl: restAjax.url + "xzshop/route/file/download/true/", + imgUrl: restAjax.baseUrl + "/route/file/download/true/", + liveImgUrl: restAjax.url + "live/route/file/download/true/", + dialog: dialog, + utils: utils, + wssUrl: restAjax.wssUrl, + onLaunch: function () { + // 展示本地存储能力 + var logs = wx.getStorageSync('logs') || [] + logs.unshift(Date.now()) + wx.setStorageSync('logs', logs) + + // 登录 + wx.login({ + success: res => { + // 发送 res.code 到后台换取 openId, sessionKey, unionId + } + }) + // 获取用户信息 + wx.getSetting({ + success: res => { + if (res.authSetting['scope.userInfo']) { + // 已经授权,可以直接调用 getUserInfo 获取头像昵称,不会弹框 + wx.getUserInfo({ + success: res => { + // 可以将 res 发送给后台解码出 unionId + this.globalData.userInfo = res.userInfo + + // 由于 getUserInfo 是网络请求,可能会在 Page.onLoad 之后才返回 + // 所以此处加入 callback 以防止这种情况 + if (this.userInfoReadyCallback) { + this.userInfoReadyCallback(res) + } + } + }) + } + } + }) + }, + globalData: { + userInfo: null, + curLat: -1, + curLng: -1, + carList: [], + isPublic: false,//是否关注了公众号 + } +}) \ No newline at end of file diff --git a/xz_mini/app.json b/xz_mini/app.json new file mode 100644 index 0000000..102b679 --- /dev/null +++ b/xz_mini/app.json @@ -0,0 +1,121 @@ +{ + "pages": [ + "pages/index/index", + "pages/travel/travel", + "pages/resource/resource", + "pages/template/template", + "pages/train/train", + "pages/cultureMap/cultureMap", + "pages/order/order", + "pages/venue/venue", + "pages/center/center", + "pages/myFriendCircle/myFriendCircle", + "pages/friendCircle/friendCircle", + "pages/orderDetail/orderDetail", + "pages/broadcastList/broadcastList", + "pages/myVenueOrder/myVenueOrder", + "pages/broadcast/broadcast", + "pages/activityDialog/activityDialog", + "pages/teamDetail/teamDetail", + "pages/volunteerRegister/volunteerRegister", + "pages/volunteer/volunteer", + "pages/heritage/heritage", + "pages/broadcastDetail/broadcastDetail", + "pages/venueDetail/venueDetail", + "pages/book/book", + "pages/register/register", + "pages/login/login", + "pages/newVolunteerActivity/newVolunteerActivity", + "pages/newTeam/newTeam", + "pages/volunteerTeam/volunteerTeam", + "pages/cultureDetail/cultureDetail", + "pages/activitySign/activitySign", + "pages/activityDetail/activityDetail", + "pages/activity/activity", + "pages/newsDetail/newsDetail", + "pages/newsList/newsList", + "pages/myActivity/myActivity", + "pages/myVolunteerTeam/myVolunteerTeam", + "pages/myVolunteerActivity/myVolunteerActivity", + "pages/serviceActivityDetail/serviceActivityDetail", + "pages/shop/shopcategory", + "pages/commonQrCode/commonQrCode" + ], + "subPackages": [ + { + "root": "subpages/", + "pages": [ + "goodslist/goodslist", + "goodsdetail/goodsdetail", + "goodscar/goodscar", + "goodsaddress/goodsaddress", + "goodsorder/goodsorder", + "addshopaddress/addshopaddress", + "editshopaddress/editshopaddress", + "orderconfirm/orderconfirm", + "addresschoose/addresschoose", + "webcontentview/webcontent", + "search/commonSearch", + "liverecord/liverecord" + ] + } + ], + "window": { + "backgroundTextStyle": "light", + "navigationBarBackgroundColor": "#9F1512", + "navigationBarTitleText": "日喀则市数字文化云", + "navigationBarTextStyle": "white" + }, + "tabBar": { + "color": "#BBBBBB", + "borderStyle": "black", + "selectedColor": "#000000", + "list": [ + { + "pagePath": "pages/index/index", + "iconPath": "images/index.png", + "text": "首页", + "selectedIconPath": "images/index-on.png" + }, + { + "pagePath": "pages/activity/activity", + "iconPath": "images/activity.png", + "text": "活动", + "selectedIconPath": "images/activity-on.png" + }, + { + "pagePath": "pages/venue/venue", + "iconPath": "images/venue.png", + "text": "场馆", + "selectedIconPath": "images/venue-on.png" + }, + { + "pagePath": "pages/shop/shopcategory", + "iconPath": "images/culture.png", + "text": "商城", + "selectedIconPath": "images/culture-on.png" + }, + { + "pagePath": "pages/center/center", + "iconPath": "images/center.png", + "text": "我的", + "selectedIconPath": "images/center-on.png" + } + ] + }, + "usingComponents": { + "page-loading": "/components/loading/pageloading", + "page-empty": "/components/empty/empty", + "loading-more": "/components/loadmore/loading-more" + }, + "permission": { + "scope.userLocation": { + "desc": "你的位置信息将用于您当前所在位置" + } + }, + "requiredPrivateInfos": [ + "getLocation" + ], + "style": "v2", + "sitemapLocation": "sitemap.json" +} \ No newline at end of file diff --git a/xz_mini/app.wxss b/xz_mini/app.wxss new file mode 100644 index 0000000..e02b9d2 --- /dev/null +++ b/xz_mini/app.wxss @@ -0,0 +1,188 @@ +/**app.wxss**/ +.container { + height: 100%; + display: flex; + flex-direction: column; + align-items: center; + justify-content: space-between; + padding: 200rpx 0; + box-sizing: border-box; +} + +radio-group text { + font-size: 25rpx; +} + +radio .wx-radio-input { + border-radius: 50%; + width: 24rpx; + border: 2rpx solid #5e5e5f; + height: 24rpx; +} + +radio .wx-radio-input.wx-radio-input-checked { + border: none; + background: #07c160; +} + +radio .wx-radio-input.wx-radio-input-checked::before { + border-radius: 50%; + /* 圆角 */ + width: 28rpx; + /* 选中后对勾大小,不要超过背景的尺寸 */ + height: 28rpx; + /* 选中后对勾大小,不要超过背景的尺寸 */ + line-height: 28rpx; + text-align: center; + font-size: 20rpx; + /* 对勾大小 30rpx */ + color: #fff; + /* 对勾颜色 白色 */ + background: #07c160; + transform: translate(-50%, -50%) scale(1); +} + + + +checkbox-group text { + font-size: 25rpx; + +} + +checkbox .wx-checkbox-input { + width: 24rpx; + border: 2rpx solid #5e5e5f; + height: 24rpx; + margin-left: 5rpx; +} + +checkbox .wx-checkbox-input.wx-checkbox-input-checked { + border: none; + background: #07c160; +} + +checkbox .wx-checkbox-input.wx-checkbox-input-checked::before { + /* 圆角 */ + width: 28rpx; + /* 选中后对勾大小,不要超过背景的尺寸 */ + height: 28rpx; + /* 选中后对勾大小,不要超过背景的尺寸 */ + line-height: 28rpx; + text-align: center; + font-size: 20rpx; + margin-left: 5rpx; + /* 对勾大小 30rpx */ + color: #fff; + /* 对勾颜色 白色 */ + background: #07c160; + transform: translate(-50%, -50%) scale(1); +} + + + +.text-clamp1 { + overflow: hidden; + display: -webkit-box; + -webkit-box-orient: vertical; + -webkit-line-clamp: 1; + } + + .text-clamp2 { + overflow: hidden; + display: -webkit-box; + -webkit-box-orient: vertical; + -webkit-line-clamp: 2; + } + + .text-clamp3 { + overflow: hidden; + display: -webkit-box; + -webkit-box-orient: vertical; + -webkit-line-clamp: 3; + } + + .text-clamp4 { + overflow: hidden; + display: -webkit-box; + -webkit-box-orient: vertical; + -webkit-line-clamp: 4; + } + + .text-clamp5 { + overflow: hidden; + display: -webkit-box; + -webkit-box-orient: vertical; + -webkit-line-clamp: 5; + } + +.flex { + display: -webkit-box; + display: -webkit-flex; + display: flex; + } + + .flex-center { + display: -webkit-box; + display: -webkit-flex; + display: flex; + align-items: center; + justify-content: center; + -webkit-align-items: center; + -webkit-justify-content: center; + } + + .flex-alignStart { + display: -webkit-box; + display: -webkit-flex; + display: flex; + align-items: flex-start; + -webkit-align-items: flex-start; + } + + .flex-alignCenter { + display: -webkit-box; + display: -webkit-flex; + display: flex; + align-items: center; + -webkit-align-items: center; + } + + .flex-alignEnd { + display: -webkit-box; + display: -webkit-flex; + display: flex; + align-items: flex-end; + -webkit-align-items: flex-end; + } + + .flex-between { + display: -webkit-box; + display: -webkit-flex; + display: flex; + justify-content: space-between; + -webkit-justify-content: space-between; + } + + .flex-around { + display: -webkit-box; + display: -webkit-flex; + display: flex; + justify-content: space-around; + -webkit-justify-content: space-around; + } + + .flex-middle { + display: -webkit-box; + display: -webkit-flex; + display: flex; + justify-content: center; + -webkit-justify-content: center; + } + + .flex-end { + display: -webkit-box; + display: -webkit-flex; + display: flex; + justify-content: flex-end; + -webkit-justify-content: flex-end; + } \ No newline at end of file diff --git a/xz_mini/components/empty/empty.js b/xz_mini/components/empty/empty.js new file mode 100644 index 0000000..9fe184b --- /dev/null +++ b/xz_mini/components/empty/empty.js @@ -0,0 +1,23 @@ +// components/empty/empty.js +Component({ + /** + * 组件的属性列表 + */ + properties: { + + }, + + /** + * 组件的初始数据 + */ + data: { + + }, + + /** + * 组件的方法列表 + */ + methods: { + + } +}) diff --git a/xz_mini/components/empty/empty.json b/xz_mini/components/empty/empty.json new file mode 100644 index 0000000..7e37c03 --- /dev/null +++ b/xz_mini/components/empty/empty.json @@ -0,0 +1,4 @@ +{ + "component": true, + "usingComponents": {} +} \ No newline at end of file diff --git a/xz_mini/components/empty/empty.wxml b/xz_mini/components/empty/empty.wxml new file mode 100644 index 0000000..5c056ae --- /dev/null +++ b/xz_mini/components/empty/empty.wxml @@ -0,0 +1,5 @@ + + + + 暂无数据 + \ No newline at end of file diff --git a/xz_mini/components/empty/empty.wxss b/xz_mini/components/empty/empty.wxss new file mode 100644 index 0000000..d7792cf --- /dev/null +++ b/xz_mini/components/empty/empty.wxss @@ -0,0 +1,24 @@ +/* components/empty/empty.wxss */ +.data-empty { + display: flex; + flex-direction: column; + justify-content: center; + align-items: center; + text-align: center; + align-self: center; + + position: fixed; + top: 50%; + left: 50%; + transform: translateX(-50%)translateY(-50%); +} + +.data-empty image { + width: 180rpx; + height: 120rpx; +} + +.data-empty .hint { + margin-top: 30rpx; + font-size: 32rpx; +} \ No newline at end of file diff --git a/xz_mini/components/expandabletext/expandabletext.js b/xz_mini/components/expandabletext/expandabletext.js new file mode 100644 index 0000000..92fd564 --- /dev/null +++ b/xz_mini/components/expandabletext/expandabletext.js @@ -0,0 +1,80 @@ +// components/expandabletext/expandabletext.js +/** + * 长文本内容展开与收起 + * @param {String} content 长文本内容 + * @param {Number} maxline 最多展示行数[只允许 1-5 的正整数] + * @param {String} position 展开收起按钮位置[可选值为 left right] + * @param {Boolean} foldable 点击长文本是否展开收起 + */ + +Component({ + options: { + addGlobalClass: true + }, + /** + * 组件的属性列表 + */ + properties: { + content: { + type: String, + observer(val) { + console.log(val) + if (this.data.onReady) { + setTimeout(() => this.checkFold(), 10) + } + } + }, + maxline: { + type: Number, + value: 1, + observer(value) { + if (!(/^[1-5]$/).test(value)) { + throw new Error(`Maxline field value can only be digits (1-5), Error value: ${value}`) + } else if (this.data.onReady) { + setTimeout(() => this.checkFold(), 10) + } + } + }, + position: { + type: String, + value: "left" + }, + foldable: { + type: Boolean, + value: true + } + }, + + /** + * 组件的初始数据 + */ + data: { + onFold: false, + showFold: false, + onReady: false + }, + lifetimes: { + ready() { + this.checkFold() + this.data.onReady = true + } + }, + /** + * 组件的方法列表 + */ + methods: { + checkFold() { + const query = wx.createSelectorQuery().in(this); + query.selectAll(".showArea, .hideArea").boundingClientRect(res => { + this.setData({ + showFold: res[0].height < res[1].height + }) + }).exec() + }, + handleFold() { + this.setData({ + onFold: !this.data.onFold + }) + } + } +}) diff --git a/xz_mini/components/expandabletext/expandabletext.json b/xz_mini/components/expandabletext/expandabletext.json new file mode 100644 index 0000000..7e37c03 --- /dev/null +++ b/xz_mini/components/expandabletext/expandabletext.json @@ -0,0 +1,4 @@ +{ + "component": true, + "usingComponents": {} +} \ No newline at end of file diff --git a/xz_mini/components/expandabletext/expandabletext.wxml b/xz_mini/components/expandabletext/expandabletext.wxml new file mode 100644 index 0000000..177cac9 --- /dev/null +++ b/xz_mini/components/expandabletext/expandabletext.wxml @@ -0,0 +1,7 @@ + + {{content || "示例文本"}} + {{content || "示例文本"}} + + {{onFold ? "收起" : "展开"}} + + \ No newline at end of file diff --git a/xz_mini/components/expandabletext/expandabletext.wxss b/xz_mini/components/expandabletext/expandabletext.wxss new file mode 100644 index 0000000..30bd345 --- /dev/null +++ b/xz_mini/components/expandabletext/expandabletext.wxss @@ -0,0 +1,34 @@ +.content { + width: 690rpx; + padding: 0 30rpx; + border-top: 20rpx solid transparent; + border-bottom: 20rpx solid transparent; + margin-bottom: 20rpx; + } + + .contentInner { + width: 690rpx; + color: #ffffff; + font-size: 30rpx; + line-height: 1.35; + text-align: justify; + } + + .hideArea { + display: -webkit-box; + overflow: hidden; + position: fixed; + top: 100vh; + left: -100vw; + } + + .foldInner { + width: 690rpx; + padding-top: 10rpx; + } + + .foldInner .fold { + color: #eb0000; + font-size: 32rpx; + cursor: pointer; + } \ No newline at end of file diff --git a/xz_mini/components/loading/pageloading.js b/xz_mini/components/loading/pageloading.js new file mode 100644 index 0000000..7c20516 --- /dev/null +++ b/xz_mini/components/loading/pageloading.js @@ -0,0 +1,23 @@ +// components/loading/pageloading.js +Component({ + /** + * 组件的属性列表 + */ + properties: { + + }, + + /** + * 组件的初始数据 + */ + data: { + + }, + + /** + * 组件的方法列表 + */ + methods: { + + } +}) diff --git a/xz_mini/components/loading/pageloading.json b/xz_mini/components/loading/pageloading.json new file mode 100644 index 0000000..e8cfaaf --- /dev/null +++ b/xz_mini/components/loading/pageloading.json @@ -0,0 +1,4 @@ +{ + "component": true, + "usingComponents": {} +} \ No newline at end of file diff --git a/xz_mini/components/loading/pageloading.wxml b/xz_mini/components/loading/pageloading.wxml new file mode 100644 index 0000000..2115a2b --- /dev/null +++ b/xz_mini/components/loading/pageloading.wxml @@ -0,0 +1,5 @@ + + + + 加载中... + \ No newline at end of file diff --git a/xz_mini/components/loading/pageloading.wxss b/xz_mini/components/loading/pageloading.wxss new file mode 100644 index 0000000..f36fd23 --- /dev/null +++ b/xz_mini/components/loading/pageloading.wxss @@ -0,0 +1,24 @@ +/* components/loading/pageloading.wxss */ +.page-loading-box { + position: fixed; + top: 0; + left: 0; + right: 0; + bottom: 0; + /* background: rgba(255, 255, 255, 1); */ + display: flex; + flex-direction: column; + justify-content: center; + align-items: center; + z-index: 99; +} + +.page-loading-box image { + width: 128rpx; + height: 128rpx; +} + +.page-loading-box .text { + margin-top: 20rpx; + font-size: 28rpx; +} \ No newline at end of file diff --git a/xz_mini/components/loadmore/loading-more.js b/xz_mini/components/loadmore/loading-more.js new file mode 100644 index 0000000..b2eec0f --- /dev/null +++ b/xz_mini/components/loadmore/loading-more.js @@ -0,0 +1,30 @@ +// components/loadmore/loading-more.js +Component({ + /** + * 组件的属性列表 + */ + properties: { + isShowloading: true, + loadingTxt: "加载中..." + }, + + /** + * 组件的初始数据 + */ + data: { + + }, + + /** + * 组件的方法列表 + */ + methods: { + + }, + observers: { + 'isShowloading,loadingTxt': function (ss, sss) { + console.log(ss) + console.log(sss) + } + } +}) \ No newline at end of file diff --git a/xz_mini/components/loadmore/loading-more.json b/xz_mini/components/loadmore/loading-more.json new file mode 100644 index 0000000..7e37c03 --- /dev/null +++ b/xz_mini/components/loadmore/loading-more.json @@ -0,0 +1,4 @@ +{ + "component": true, + "usingComponents": {} +} \ No newline at end of file diff --git a/xz_mini/components/loadmore/loading-more.wxml b/xz_mini/components/loadmore/loading-more.wxml new file mode 100644 index 0000000..f67005c --- /dev/null +++ b/xz_mini/components/loadmore/loading-more.wxml @@ -0,0 +1,5 @@ + + + + {{loadingTxt}} + \ No newline at end of file diff --git a/xz_mini/components/loadmore/loading-more.wxss b/xz_mini/components/loadmore/loading-more.wxss new file mode 100644 index 0000000..b29e480 --- /dev/null +++ b/xz_mini/components/loadmore/loading-more.wxss @@ -0,0 +1,20 @@ +/* components/loadmore/loading-more.wxss */ + +.loading-box { + width: 100%; + height: 80rpx; + display: flex; + flex-direction: row; + justify-content: center; + align-items: center; + font-size: 35rpx; +} + +.loading-box image { + width: 40rpx; + height: 40rpx; +} + +.loading-content { + margin-left: 20rpx; +} \ No newline at end of file diff --git a/xz_mini/images/activity-on.png b/xz_mini/images/activity-on.png new file mode 100755 index 0000000000000000000000000000000000000000..21b4a86f2d3e12897dfc805297991da2d76b9e32 GIT binary patch literal 600 zcmeAS@N?(olHy`uVBq!ia0vp^CLqkg3?x4-dwml~)dl#3xB_Vv6%}PLm?0(vWUI)_ z19>%)qCiqnQ4vVCi;F?jz)6rY6_x2?!VpG-gh-{NSf{vXn>a`p5J1F%B%BRow1|lU zMO0N)3nV3hjQOHMEgTkhKo@9~1o;Is>}me{dWbO-B|Q zwP=WnXn^IaKh#C25&Kq&$V(+jkmReucybe z1p6z?r<`f~vSh-iC)++dPEI(qbNS7{p6RwGo9&99-uQn?r%txmL;1Rkfst|d*^+hk zHKuK+Z-la**=Ja4n=iTP_~RL+Jq|nf>ZUma9J`@h_HuzttmiGSnfx=@I{A{acvf!< zdUjdr`}>J4yH3rLmoVlC@2pNeyX|Oob|Q~ zsuvlhK5EX554<$TT>feP0*hnslh5#Rema-&iM{))vBJmGb$P%DV(@hJb6Mw<&;$Uf CN$z3* literal 0 HcmV?d00001 diff --git a/xz_mini/images/activity.png b/xz_mini/images/activity.png new file mode 100755 index 0000000000000000000000000000000000000000..67b70761ab51f865480b44b4bd4e199037fc04be GIT binary patch literal 539 zcmeAS@N?(olHy`uVBq!ia0vp^CLqkg3?x4-dwml~#Rm909qhd666=m@V0r6g_hXU zf-qLzg@!jSc9$!8-#>MD&Gee3$(~Xc{EtsEFfjUix;Tb-9DjTD^rj{Q0hS9YO^S|= z4k9&Q{?|V{yW+6xGM3HBiR-tl_EVi@up&N8xW2e@&CP8MeoDTa6S_<{YH2cAq{pvH z+0LoycuYG;!@2O>bDp-CJwZz}s@A7%N={mT{!nJ3i`jvb62YePX5R^I^LhGg!bDxk z14kFlGn;vQVcoa(tq%Ip#@Rw2uC;pF&)mCg?(vzon09=6`uN)cHQU^!JLMTe4lhc} zGT~ZS!~MYE){4aB;C~^0-|w|-daR%6u;j)E(PH5zPSaPGA5C*O%knf#%joNgDRDBB zrezt-^C_G!5O#L9)h8=i$$y_)Hq|X*o6O_(>|0bzopr05@p<5&!@I literal 0 HcmV?d00001 diff --git a/xz_mini/images/address.png b/xz_mini/images/address.png new file mode 100755 index 0000000000000000000000000000000000000000..4cddf4df6a8e2986ed6e8afa9649a550be8fa2cd GIT binary patch literal 400 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 literal 0 HcmV?d00001 diff --git a/xz_mini/images/avatar.png b/xz_mini/images/avatar.png new file mode 100755 index 0000000000000000000000000000000000000000..3a27a6ecea61c427bab33c5f11b427ec151b4146 GIT binary patch literal 530 zcmeAS@N?(olHy`uVBq!ia0vp^Mj*_=3?wxlRx|@CzW|>QS0H^44DR2*|LoZ_AQQ+y z13_Outo*aqCqk9zVn%;VSQB&-=$?^I2tPw=P3Q<=-{Y?JuwH}&m=c% zWJ;(lso10!)Gs=3OPAi#6H^5y6dhmPFD^E1<+AmM@(wliT610sGl<;q%XHm-oiE{& z{yn-Jzy6nZ%>R%J_8wo(%Sqn9cs%quujBug-^>B~x&tDO&wc_%1%s!npUXO@geCx2 Cv;(*R literal 0 HcmV?d00001 diff --git a/xz_mini/images/big-news.png b/xz_mini/images/big-news.png new file mode 100755 index 0000000000000000000000000000000000000000..104eddac2b772b2be6d14c87c6ad1baa144bdf45 GIT binary patch literal 2142 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 literal 0 HcmV?d00001 diff --git a/xz_mini/images/center.png b/xz_mini/images/center.png new file mode 100755 index 0000000000000000000000000000000000000000..82bc34f42ae8f95cf646b2d0fa8f16765c1e5932 GIT binary patch literal 507 zcmeAS@N?(olHy`uVBq!ia0vp^CLqkg3?x4-dwml~c?bA}xB}@VV6YSnmMvQbu%?$ghACXq-ezkY6xE*5@np4WxKH&at#S-o0s3 zeE41KSBqzrTu90|&cMLv?&;zf;&J@#l)FVO3OuciLX6k#OX|=4w$E%`DIMG17FTks z`|rC0b5!Q^1m^$a?wzl8|BuVXR}DTFa@VHK{FoB=%0$>Gw*5@V;*Sw8Yj>ButX}hj zi=8LoQCZhZmEVQ;i;C~=j^H?uT3^U`;e?*V_WcEJ-yX5?9G}g&gLBcm-H-oOIf^jU z?z!mjqu1+uu!nxN+|9&!jv_AS_RJ_fZ7i_kK|<@f!_x|ixw1o-`D&&ucR8`-0K27o z|C9p(SM4i~_Pq|;DbIF|=WBJ+#_KUh^{!?geO~0UvtxaSJp01NedDim_m<36i<1J=e2n!Z&(DuMvQlMp zq>8lvpA@l;wjmjL#?xJMY8E=~?y{RVAW(+Vr%rAh(`#wDSWT1*SHCI^Ku z1OnE z*pr-sPSw|i=j5M6>`=_UX=RzqrV#b&PtFsLY5OLXuqj=AxoJwpjZKq3hMW*Qal5VP zXYZp&XYT%co+wiF?v2&G{mTO?vM*OUK1GWKq{Ot+}0T*L<$< ztz52@$6*>gZC>Qji;A|+>*b@Ce{rtyk_+MO8ZP?o;3J=78LyV+My$ zE8n~_#W!x(^NV}G{F{3Jh+|#wXVc0n9?O=BZ)M{89e;m48{^;DUq{#abMJofsC@pp z?QegUEnEBQ!;!+Q`u|T_+SBcnCvKE0tIX~wVDt37&atLqZrYD;_v#p?%6m=y6;=ic OF9uInKbLh*2~7ZXOwPps literal 0 HcmV?d00001 diff --git a/xz_mini/images/culture-on.png b/xz_mini/images/culture-on.png new file mode 100755 index 0000000000000000000000000000000000000000..cd31b80839487ec999975051b94846d8231f14b3 GIT binary patch literal 756 zcmeAS@N?(olHy`uVBq!ia0vp^CLqkg3?x4-dwml~%?$7faRt)q>gq~LO3Gj$Dk{2I zP*4R7=8FgcX`t`|Fash8A&2_lT59d<+bXH$7b(Lp+YZ4LLcf z$$^J=6Nj>v(h7|x?nnDB{QqA#IqtxwE;-}S;u+2F8D5sioy@jsBgobz-&jrOshCi$CCDajjDxrB|GH=GdNIj73Hu2ta>tXI<|!8k zdYqf7IY-v$W!J;SZ_8TNYfs%G-nvrhyUV4%jmpQAexJC}=dsJMY~nobWOJpJ4z8D) zS8*wwOy8pwss340W$J?v3%|lgnk$#EXMa$b{2;FQor8Mg`_AYmhodL;`Wnnw+4}f* zpHVt3$-@1C&5KGAdU9*?!$ zacGY9r+}2W2g+9`PTLWw#d}rB(;y}ZGTb#e-uep_XaLc@3cV&*vNRjL=G!Kk3=2^gdvcT9tTdu!f zlff%``Jz)Ab8jve<63+pc*pIFzxjl0p8D={`nz!RY_Kb)m0-DTKk()z4*}Q$iB}!Rajj literal 0 HcmV?d00001 diff --git a/xz_mini/images/culture.png b/xz_mini/images/culture.png new file mode 100755 index 0000000000000000000000000000000000000000..5b755244255d2a21a18aea3401745a2af1c6afd5 GIT binary patch literal 632 zcmeAS@N?(olHy`uVBq!ia0vp^CLqkg3?x4-dwml~MFseTxB}_r%a<=*x^&5sC5sm? zhA@C^2!L>bBoHiIxDX}`q9KBCWkBw-Wy^phL<&e=e|N8om(J@y;gi-)&zM+y{CW;ETU)Q@NwqC9 zQSx8r7`3@v@mL|75U#i8sI_n4qSTx}(Z-9G>Ih8^o_x-A(wRc*^|$9vUZf>e@9Q)5 zOyl1jZ9A@dy)@gi=3Da*$0VaA zS%OOon1u?{x~h&G?bqqB4GvM@t4ndvnX%}aoq4#DS;o$r(rZ^bbsUP4x~ZA}VM$_l zLhmfmA4&$3S4T1DyE;5y)~hWc{CsQ4Dutu6y5E6L`@Gn5VnM3beAziA{*ruoT{E_3 z*=6tKTB~!H!TtBu^?M|y_q8Vdbg=T}~bmF8sm(mpbgWD0+Dqq&?6*A0YHG;v|p6h5L*D)GhsbiGjQIc-_BOXZ9B6 nTe*cE+<(ipr|idv>ott8u9`po;9Va8jARB+S3j3^P6P`*_j&d$wDuzw0$7-rHRsCVzkL`da+4i^u4C|Y^>bP0l+XkK0bY00 literal 0 HcmV?d00001 diff --git a/xz_mini/images/delete.png b/xz_mini/images/delete.png new file mode 100755 index 0000000000000000000000000000000000000000..768ea389b42315571d04e8027a91950fd4c32f7b GIT binary patch literal 284 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE3?yBabR7dyW&u7Su0VS79-S4a~)COah?3*n%%R1|IeS(2nw0w>iA+=da{onhvF8YdrKeLZ{F3ro;f8GlCVNc_DWC$04QaEL$wU(xnG zhl&qXtoi+1OlI!`!QK1W%C0_OaF*p{c49v0>CCmIM_){b@8L%FJdm#$JYD@<);T3K F0RSW0bWQ*O literal 0 HcmV?d00001 diff --git a/xz_mini/images/friend.png b/xz_mini/images/friend.png new file mode 100755 index 0000000000000000000000000000000000000000..ea7d2ab95bc4dbdb73ae8c4c07fb762aec1a2caf GIT binary patch literal 459 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE3?yBabR7dyegQrqu0VReh~Rt?f%&3B^F;;c zf!H7hkh=iLfUrTN&^#d_kSs)*u<$}LevquNFi1p1Xpy)$ka4r?_++4ok|jZY!3+l+ zR!wZ|+%j+a<##8SYGvFhGgm4wewxDl<;?C&3=E9Io-U3d7N>J3M^0-t;9-eQU~W^% zx%um#xGcNCq{%DquVSAjZXvgMg7f`l;jQsvS8P@u`t|mB`jM+lGv6)cSCK9en-DZ} zAE!M_iCBu<^7lI@PpEO=ZSiV<(46+Y{F1od1MZoniyn6!V?EF6Fri7RmsRlpr3`^U zaqSgbJE}k2+{Jpbdg-LY#*0kfPw0Q;5qDws_k#~Td0w5?clm36Wjm9*%Z;N9Uv-$i zzEPYlKF#rPv)Jc{np3}f9a8?yy&Dn36%B-%PwdWE4uuGJY_3;#D?G%ZRN2PQUdd=%r iKD+Xbxw4bH$6o1<-s|>{Pg{Ut$l&Sf=d#Wzp$P!dXt#R+ literal 0 HcmV?d00001 diff --git a/xz_mini/images/good.png b/xz_mini/images/good.png new file mode 100755 index 0000000000000000000000000000000000000000..e52c992d2e3ed3489ca45102d2ff93bf318f195f GIT binary patch literal 349 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 vdfuyrg(3N%->nO500000NkvXXu0mjf`iZpz literal 0 HcmV?d00001 diff --git a/xz_mini/images/ic_search_black.png b/xz_mini/images/ic_search_black.png new file mode 100644 index 0000000000000000000000000000000000000000..db4f79250600d8c6a78c4c631f2fbae048c93d60 GIT binary patch literal 1954 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 KMNUMnLSTZHK=)7p literal 0 HcmV?d00001 diff --git a/xz_mini/images/ic_shop_car_icon.png b/xz_mini/images/ic_shop_car_icon.png new file mode 100755 index 0000000000000000000000000000000000000000..69b6a8de4daa2f2d8c909959b0fd1d870e23086f GIT binary patch literal 341 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE3?yBabR7dyfdM`tu0VResNj52AuuU8Ur1=4 zh~PY7;rSv$^F;&~hzZP-2C@YgKotmsRf42|j0He7KyeYFg(5=pM1`jD^8>kVZ#%aD z4V5Yh@(X4-c>mU9%_h^!-tz2kH#+`!x?*8@L9}5?h@kB$sUtvDGd*1#Lo80Oy>ycA zumX>3pmCdJ@Z@d({`0?GM*$yh)w0TwuqI1MD5r8=8(B64ws864)%8`AfQD zPk_83mxAKS(qPY>Y_s@sc;!k84kR3lWNw~fc}*d%CqqPZ&4rXYmc7Al40+4HUHE9B z{?g^%mb>%U7qyxHG16!d6*vFbdeok&%2nM?!r008%gVo!p7VY*?0+OD?;)tMqfGi& QGtiL?p00i_>zopr0I0Ecwg3PC literal 0 HcmV?d00001 diff --git a/xz_mini/images/index-on.png b/xz_mini/images/index-on.png new file mode 100755 index 0000000000000000000000000000000000000000..e4a185dbdc32aa293480a4f31cc8daa9bd89a508 GIT binary patch literal 461 zcmeAS@N?(olHy`uVBq!ia0vp^CLqkg3?x4-dwml~l?M2PxB_WqWn~o@fUxI_3eFc1 znlCD}KvW1KqX-5-Ss;K50;M1#KoVwviYge)7Z!xb0!g5Hpiw}^JW&B431o-JR~!Ob ztXdM}7tBz6`c+oQmHqXhFF*g36P&eal?}(uhA8!8dy;%ytPRDM%jt}Iyex_{c6&B){v|>&nzhliNGjF@^o2-8nU7CAv zLi4JtizJ%Z#9aWsT;Ab%oQU%d`7=j;x;BW}@~jZatH&$>jOQbDh>q7n_=Q zc4|uPT3b=po@K@=W^|Y2IKj zMl-{Q%rmtL<;`Z)eOzkRUD?OCd>!Yhxf9=iWO?dmZV}!0HxKAr22WQ%mvv4FO#o_i BqE!F@ literal 0 HcmV?d00001 diff --git a/xz_mini/images/index.png b/xz_mini/images/index.png new file mode 100755 index 0000000000000000000000000000000000000000..a9bdc1f9c00d2e52de576244c2c3d0d2d59ec705 GIT binary patch literal 399 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 Q9B~Ogru}hX1Or_AFT+oqvj6}9 literal 0 HcmV?d00001 diff --git a/xz_mini/images/loading.gif b/xz_mini/images/loading.gif new file mode 100644 index 0000000000000000000000000000000000000000..8524d0f2cdd4ebc41ccfb987514d1d03c0d78d6e GIT binary patch literal 6788 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 Fe*sCTX9)lR literal 0 HcmV?d00001 diff --git a/xz_mini/images/login-bg.png b/xz_mini/images/login-bg.png new file mode 100755 index 0000000000000000000000000000000000000000..b2a244177434366a4e52776a069e1309b61cedbf GIT binary patch literal 34137 zcmV(tKY9l^sElO%8LuxTjYAHr)Gf%WxSGQbQY851EJX2~oQnFZ8YBx}?Ra3iO zT#+v(i7F(09vHA!R*Wnpc^VX}Qc;5>9&iy4rAtbOCLezy9j;SQYz_>VH7k`fE2vRV za}yAiFeIr=OO7ictxrsbA{v!7IgS<;hA1L<5)gVF9HK))nms?AMMaxCIeruqo<2N` zF*Bh)Hk~ymt4c+47Z#^PJ$Dxqg(Vh)9vPrID~luqBDhWucsost zCM$n7MW;6$cqA#YNF${>Ij=@AxmGHHKTV)3A8sr@uR%g|9wL|~AC^W>uQfHfS~)gb zvTy(Zg9=GRK~#9!fyO)59ooYWVn3-S+OBF)r@=Vb)#;xBiMNdQ_mRwa#<}aX;Thz7=TF{9%Z>VETT_mzG#5LYO(k zpOBo-)UYVK2y6}fZ65Sjo^$Y~exHhj(IuD1v5-}g-$Rmh2B5-Cz@89kzba05;ojWe zA5gT1`KjNZc(`zZbsMP?->K%;vuESyVwJ@?dBm>;jdT=lm9Y$qS?-S+QS&@BfhiYL ze>&(KL;+2~D&i50C)7z-7a-mLL0J!_?DwOIax-$bv*2<{&42xpQlV?>dKYhIF34)e z^g6(*FRKzbP7fV7^8zXSyk>r9rn5%X5$!N|;An@XjO@?;eCm?zTPu0;GBqemtxtp2 zHrS>CTlWBe3B<#w&Ff`N*z@hQ{fPa>`17M@$hY0z-#Ubq1INJKrihLOX90|^`3_Fm zS6SQj9Jens^@GNAj2<+VK&{L8SF(k2zsdEM_iV1*1zq+&9iI?CnCtM5SbL^CO)*WK z@>#Y=p=G?4!&~U6Y^^XjUkDv$26J($Y|0ndmkm#wn)U`ofK7YsM9!T||5kV7>DaL2 zX%jzlwY9-eY+&91{k+#hdz^EcwP4n;#{EYL7)0aD=U_CgB+h*S_2=^LCLG&?U4T&PNtX`b2OXD7jKsd?L5zD;FbM23D+^xYH(V*q|4< zyypm-C@}FT19E#L;o<73IT6T|vDSL(75+@J&6I3rEwI}(=m%M(L$wD{$GTR??e`}> z@<4b)tAfLmb~W*FVsFEEu0}v1xdXpYZP^L6)p?ykgwKA#(4)#Kk1uMbSeh<>YC7Pm_f8T6O4Tz3-=BH z$BXT@U+D<4Oa(3*`-3BbwsF%fsCl{R&afPJ_y*=uVtUQ>PmO9*inauA$^oK|UO<$5 z6c649F#DPEgre2YC>mX*MV|+Ii-K4j_nD3@s zaQTd)t�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 literal 0 HcmV?d00001 diff --git a/xz_mini/images/logo.png b/xz_mini/images/logo.png new file mode 100755 index 0000000000000000000000000000000000000000..d3b8222366fb503e1def4cb8a208178b485c2ab7 GIT binary patch literal 4443 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 literal 0 HcmV?d00001 diff --git a/xz_mini/images/my-collect.png b/xz_mini/images/my-collect.png new file mode 100755 index 0000000000000000000000000000000000000000..b3677815d27c21bf43d45652671aeb2030685359 GIT binary patch literal 537 zcmeAS@N?(olHy`uVBq!ia0vp^HXzKw3=&b&bO2I00X`wFKzbSj!+a6Jnd1EOMTO>z z3W7)x5V=595QIcTK!PGbDWUlS0`o=q7l4!jkuaD9DP9Ov50nywDqA21l3ge!2x5o> zjS^f4HuhGUp*PSz<&q%3Uq*G_G%3^!KbfA_dCA;wkL z%kzS`LKg!Aqot>dV~EG`w^wiGH5&*x1nLXi)=^93y?OiR|9Ty+B4w__7VnaG^at`O zM>i!#NB>_v{a{Fzq6z;IP9D|7Z5@dkdQAna=T`~LKBnAv`GPR}Jgd8wd#dY8SoXWV zzxCH(hJ-JVn)~JE_KUwC9Q?Pqzg&8y&w=?a%Y>@!7x~;%ntFUg)ST5X)WrQ}HmCpm z!>0G(Zfe_B`)kHIe>cuetoyK)eP6+Cc7N@gPBA|tT5GOUc;235tm7O1#VhTu)Ul?m z3-`~=5LMQ`xI3vtYQN4dncCSIr&-%r)ju*{kWHisEEgS2`U#6MrSPWOhB>+Owe&%a@RVbM4(bMm5QV3;#_y85}Sb4q9e0Gb2V AiU0rr literal 0 HcmV?d00001 diff --git a/xz_mini/images/my-comment.png b/xz_mini/images/my-comment.png new file mode 100755 index 0000000000000000000000000000000000000000..e537d31771126d92a6f84a5f8cd31575de06380d GIT binary patch literal 573 zcmeAS@N?(olHy`uVBq!ia0vp^HXzKw3=&b&bO2Iy0X`wFKzhE2$b3ZJ zh|Ch^pD!xBKtvEC2qYJX3WL}J0zd`xLEamTas2I-lX=Ys0u2vWGP7)M zujP*1edhQ61nGra*m6w1Eu8*AexhBkj&a-CwR-2Rm0z^z9iBf!+G>|s&&TZ+SEQ>C zdz$w?oY=m3Pe)H}%#+~UhDl7b-p=INJgFl#>9T(dO z=1yvkd->DzyylB=mTB*!9U1@6sO9Kg`&dzJx8IL|!t9=KzPHcqcGdiNAnEY_VSL>F ztowmE><0pSg5{e9=LfvmlC-~|Q9e7d-?pr6gGlh6_Kkm~wk4Y!>uY~@!_{<~bG7L7 z6^E{$ad)xbz3O9NW9t+PCnmGmGM_7&UZ$soF*EcYy&_>ZQzU-Xi^@%}79A0In!nkq hLF`D>jjE0N7#FVZPMuQ9Fkeg< zXvjQa{`sP!KtZ5htH6Fgpnb|EL4LsuP2D#nbKdG_eQ|gk!1n7zNzC)Rmk(^3SCMDQ z`+3*WnNF%wJLJS_fyy6wx;Tb-9DjT1X5JwO0hfzvDrP4u4!&t=S^Mw5ydcNU3n$V- z{y@2_}QD9^r@?J~=3?eq?l+^F*cucbU*8R;);Pi08@Yx(ZV{$pkr3q5W7 z%a*>}bChw@v%3weHg7tb9BF>-n!}a&Zx`AZWSaV}&W>td_BA7_A4J3!hs)*W*&4Pl zyK1_2U1ljz_Fd%lExVRYHC=n-#K-V8GarV9%~*UlWoyKmZPwCKRVVeTd%C*)s@U>? PzGd)q^>bP0l+XkKtxdQa literal 0 HcmV?d00001 diff --git a/xz_mini/images/new.png b/xz_mini/images/new.png new file mode 100644 index 0000000000000000000000000000000000000000..540f1d7ae5e3d93f4fde77d84a7dcad8510cda3d GIT binary patch literal 174 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=ffJQcoAhkO=qW6p4fb76-l=Pk7s~ zZr!@S3dg5UooX5Mh|^2vgZwLoO=lTisz(=xhhJa8?B<+c!U7~_v@&eTDPOQ8M&0Q> zbsMTUNK~~GB9kvl%*KRyVD5h O00vK2KbLh*2~7ZU);#L~ literal 0 HcmV?d00001 diff --git a/xz_mini/images/next.png b/xz_mini/images/next.png new file mode 100644 index 0000000000000000000000000000000000000000..99dc1947fa07e6e59d5876fbb83ecfca092b02b3 GIT binary patch literal 597 zcmV-b0;>IqP)+Z+HE4`~U7ai`(f45s#{F0QLbBz-8c=h`fq;MeTI1I`1RJ0jPJ$h&3%s`|h9IT6{}CqB#+-$G9O#jq+OqD=yv_;6Gi;{W!I zFS-Iw{1uD;6BAzy;KX0G_}{VdMF39xHH-f>BtAR9iN9{~KZnL=1vv3HEq-}Sd^Ug+ zf6L;(kB!d)aN=)U{I?YG$pKFM9gF{(Dn2Q|iN9y@UsA>=132;bE&g-r_#^-){(;4R z$`L;r;KV<)_>Z~bM**DpM;8AfXZ&D*6aU!a-{+1W1aRV?0-Ho+sYHAljfF1&jjfed8Wjo>UqXBg3dBS!t!!=MtFEFXFwZDW8_&exF1;+Vq#00F)gsCzxkKrJQ9aa$#sTM^=E_&reIyii!~ zLhmIrxWSD~6w5YOPCXO&6fN-2d0IA@FfgIIt*aNlzp%O@7C5CX^S2z?W zS%Hv2SeY@fqHy6m-((6J0I)=ad6NjWsw-|t3bYFRGWcU55&*!}VMpwc0Q%2xkvCAORZ4z^_*`*C zjr2#nZ0MjO9sMh!0_s1*<5`ftlnk^tC0G+Hh=l=k9 z3V_Po=WL{p+KyJX;m&Bc8PPLGJ(KnV`WkLa6`h)2h{_s2*|pR600000NkvXXu0mjf DnJYHQtQ&3tYW5IBA-5 zsp151z;V52#_UPU3|hR{SEF@pCiCO1aV0BEHkotrhm(EixZW$}=Fw?Ieiw|e<7VUI zz*uAzB70CaIvMYSih!MQbFnB#K(;z=_MLLTq-7pQb&iwCg~r<*4KEaXg0}69Q*=A?FH!I%K8ygp054sDe0{$7khwumx z4xW8AmIa%bip7?z_`89IpwN2PYhO7c1h<_@#XD&=&JvZ4zQ_WgQIvBc^0i#gzrSW+ zARA=tZn`&K^lMHE(t;YR?M!CRl$9oF)!&DNdQmxa*3E8BfIpUGw`n#H8Tzq`3^l3YtJ6>^xpWaVh?T~qFL?d;xxaDCgaf;QSCFet&2OE2zibv+FN)O6)s{Pr{#lADc zLT;JC-{o0UK5;VHmr4RtF|$X7MWVc?hWs@dY}~H8JP>RHHWZ5-lxkTfzD`qNn}FD^ zS633)8INodm3J!!-RyWB{CT1>T}2L$14O^F)43HTfx*kqI+HuGAIMl>af+04#{l!daPkp)H3WaXDNoafvt+GJ`Im;d0Fl(#(@SOUxd zUP*eHnxMASwmX0xU}gdK6gVPjsH%V@u_iDnLyARk_B_*&=(%qK9wr2s?3Z31T)MNV; z5YkuKaY<+EfR_QM3xPQ}k}a*G0{xQu>wu%H=q|UmfgeiRZTqixyb!oh=y*g@!}dvF zRf5#VB%P}xbxiyvU~U%t71#*u1iBKy-I5;H0nY>W02>Oy2Z2}&1HjZ0_>iO>EiDk+ z%d@Strf`);fm<=0}caInk0V$!6?@DoX0wpRluQnDuc1bnlkPvKt#F90qAHzf7h zj5cKm(BmYS51xXdLcdLTdFO7I`TO2a2g#+GYr8~6u`D%2kgS*>jV00003->||H#SW42iWV5QGO7kZaliM!;x{w>jSb`LfE0y9<`(_k${Sx@NlO zAcH&&6|)M{oJNSefO`Tja^s%Q7QSc4Cp=(c#(f^aryj+lC=z0Ms4BLJ#h?66f!%^F zu1+H{&_FXQ&z6nIO7K=Jfo0*Q2<`&?`3Ba1M#qRUHU+%c0N9;+MMjAw(A2Ao6&4Z- z9f9UB1Lk5SBsCQ9c@JPJ&0U2i6iJKfwmKg=nUZ{$v^3!VMvV6@sE)^V$g?<;#){kUu3;=OUkZKRk>gAF`;rBCgn x#g-zkuC*eAmJfr{s002ovPDHLkV1l|s{73)* literal 0 HcmV?d00001 diff --git a/xz_mini/images/play_next.png b/xz_mini/images/play_next.png new file mode 100755 index 0000000000000000000000000000000000000000..b7fcecdb576df2e876c190767d01b533955b97f7 GIT binary patch literal 578 zcmeAS@N?(olHy`uVBq!ia0vp^9w5xY3?!3`olAk#v;dzFS0MeLHsBu^;5Qqn1gipO z`x{q*E;B3%@(X5ox$e*RkBXeE_inD3-)kW&A@KIeWY1SeqhtAjHEDs zjf>|`pKLFPaL@#@RDHr%jW1S;pS~@x z3DbA!YLi{G_yG6BH?5LNv%}*$Sgv-7E8P<|cCpJ!>zJae?;=;GsqgY>qNI}E6DPfr z*$e+2_tN;|b-?X~K=jY6&lXReU%$n>QF0OEA^zHHXD0eOPZM3V@jUlM*A~%5s|B@P zgrhdOC)T@WWF$B?IxUo~nx7CT-1+%tM%y0Y6-Vl>ue>(z>!GFhPdG+7^YmUyO36AM sbJfG~wDRRGoQ9v&Hz+b5-+9a4^+o-HH}Xboz#wPvboFyt=akR{0B6@sApigX literal 0 HcmV?d00001 diff --git a/xz_mini/images/play_pause.png b/xz_mini/images/play_pause.png new file mode 100755 index 0000000000000000000000000000000000000000..c55699460f8259191659f70f7bebe3d570633948 GIT binary patch literal 737 zcmeAS@N?(olHy`uVBq!ia0vp^DImjIl`>q4wUB5O2ZL~~gdw#adCY8%L z@aCa4xu!N3ZnJhRZc+dA;`Iryir}=kuE|G~o}66#)kJL3=bNJU6AgFI{CYn@baT}+ zcI}^vT|Ou$qa%6R%>K;@FZ0(h{n35Y9`=_Llz`_B;`$g=H-q1D#|H7Bh9++t)3 z2xn#rs63;C!(n|c3+D?vc9sRpwH+9|q#YPmy-V_N`0_T%$)SNsWWj&V z-cErfr}}%?FJ5?)su1<@hd}L)nF6w^J{^4KdM?LxP_lnKg-!=n-x<_?q@HqnS1Zgg#DGT>o++R{+p1ob;m}A6{frq_PNqW rPwi=r6N#JLH}S2yYT!yI#aGfE)#+y)#5OttgPpih!T1k*! zFvF@pdTbx>%#^yhB&It*#Y^MLsrAL-0bgD{sCBjD;m$c|c5z-^VtL)-as~z_OHUWa zkc@k8rg`TzI|#5Q8Z=AVwcV&;vM3aJdG~+E%^QLqCLb1T_FlWu>rBY@kNG>L7W*gHu6T6b zvP$Ff`9Ih7rhN72T2yzTb?%Jl{kH61|9-f8`>T|F5Hp+in>B%I2X8Nw4Ljxjy7y;_ zmHzTRMy2b_@rKRjYD!h=OdV=}+ge&U6lB6<8YdVqh8%JeRIOpSEWf>_g=>NAURw@M zafb(cPjGNbIy~FEW0R02L**$QMMdTf`-78!f(@0vUW`tM*aB?kuj1sCbY2i{ zdseu+2g^BCmR-+Zh2_2#i0Y|IeJ7B9F!K%+p%TBYw<{x z2~#^F-c2wSjodNu#er4@+2>Z(b1om;a-(@=-;KS_N3MO&E^1(vs(!*5Ugo}c$-yzluLabx?jKT}?= zUr?E|zWl`9b!-J&SGelxhy?0QimJ#s%H-ktL(ZoAqogL+`uvSR+Za4u{an^LB{Ts5 D!wr!K literal 0 HcmV?d00001 diff --git a/xz_mini/images/select-tab.png b/xz_mini/images/select-tab.png new file mode 100755 index 0000000000000000000000000000000000000000..923566a5988963ab8cdf863b566c85bcf81137db GIT binary patch literal 5670 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 literal 0 HcmV?d00001 diff --git a/xz_mini/images/selected-l.png b/xz_mini/images/selected-l.png new file mode 100755 index 0000000000000000000000000000000000000000..f1b1f135ba167ad1ddcd06e7385f1b01e09ecb1e GIT binary patch literal 121 zcmeAS@N?(olHy`uVBq!ia0vp^B0#Lb#0(_!c{Zp5DV_kI5LX~QUqoo3sNj52p^nR4 zbAf#3k|4iehDV+=?bfsaxsskPjv*Y^lYjhgoZr~U_Qb>>vfIUPaceAt;A_X{5_Mvm Qfr=PBUHx3vIVCg!06eZBYybcN literal 0 HcmV?d00001 diff --git a/xz_mini/images/selected-r.png b/xz_mini/images/selected-r.png new file mode 100755 index 0000000000000000000000000000000000000000..7e4f45203cc9f72b71d9cb9a049f1ba71702dcb8 GIT binary patch literal 122 zcmeAS@N?(olHy`uVBq!ia0vp^B0#Lb#0(_!c{Zp5DV_kI5LX~QUqoo3sNj52p^nR4 zbAf#3k|4iehDV+=?bfsaxl*1kjv*Y^lM@nt9QZ%~)DshfNNz- z1VG9_Mga{6vO(sj-Z>QZXYgQ0(bv$5sE>PO^^WXpRYs|bk6_nlv zUq4mnea5Y=xaY;;_WQ+_eOF3rw}o?yr}6Pe|74Mgy0KGoPw>r?E)(|dKM}jdyQnGW zPoj$kM}W{`jq@Lt-DY+WZn4vl(c(JLboS(|6JIwbxZUh8-Nc^Oag6tCm!(1chW3)H zyb1DOXRVp%Uv%1NlE!@{Q63@n=cNx7_1RY!@hHXZi79k^&=eA682It_jze8FTb!nx z2-Lc??B&LgfMuMK7dQ?-X6~u+?alhx0heEs9()ALzW&)g~7 zvT9D=adpE3XJWNKOYgXB_Hpgw>YrCuJm(XWn0IWJc!Q+8==$BgpAM|ytXwcryPzf~ z&)E9aE~_;s*M{6FC|o(?r|C}yp}+pdbK-KRda-ilPXF*T=a@>?L5BREQ^nKgWdD~u zyTikoH|?BHW~n_%mAMdS0FuKR0x4Y1Q&=1&KDCz zh#<=%u|dj2U>bpJBq@YAk|6uUn^S?7DU}5I1vC77_w=YF7i;&IDOPuvYM$RayG=g9 z&rM)cZfazx@r_kQwX(+XMhpy$mpxq^Ln02popG{gwSj=^Zc_z^Gih569{csbzee9e zsBG06R^L;euIWeHf@8ydl{szX`j0>UxJSt%&SI9XL7;5hEdMh(Y>yAWOMC8TT;X<@ zw^w3bp`nX}O|!Jt2cAE6TR*;eC42*z%E5G!K+JK*rn2sO}KdFxs+VQ^$D-1%=l`#yFYnbVn<0pE#%bT%UcQ zXSVga)SwX7z}z1}+qmSXD;S-)5w^8DP=mq3&6@A(p7mok{ literal 0 HcmV?d00001 diff --git a/xz_mini/images/tab1.png b/xz_mini/images/tab1.png new file mode 100644 index 0000000000000000000000000000000000000000..ca72309791d2cd6b7074662e05732f89eb6ec75d GIT binary patch literal 1572 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 T3;N@*00000NkvXXu0mjfvIZIB literal 0 HcmV?d00001 diff --git a/xz_mini/images/tab3.png b/xz_mini/images/tab3.png new file mode 100644 index 0000000000000000000000000000000000000000..38ea9ba7b3fbb7c360bdc45ce059651232842f0a GIT binary patch literal 1647 zcmV-#29WuQP)000IyNkl}M8&8TH97Q?8Tt0Ve;uFiE&bO7UX zwF&f!;KzVyU1MXbVVY(o2O54efOdg=5`u*!YDF+c;$1)=LY}|u&Su}4%Lb;wvahMB zRg2Vy8EJSiMYV~-RS+?zc0592go2m=v4S1xLu7AN&i{62HtSw&0|oG&SS+Ect1k~z z6mq^6J`TYGf)2FwiSR{%apuE#`^^emNl~2u<^epZ>D}Dp48KtcUI6#nb{mwcE=vH? zqT)UR%^;uGK7M2vM#Wf?RHC?%Ko5x1CMG_$&Kdi6=z)T=k$Ai6?4#=ipvq{IjEfoAjeSK3b8eLQ_^jj&iAK*LGs#A%0KD>5QtMgRqm6`ga zcLPKOeGSR3VB(XBl!10F<9 zPpqGS;uV0oECBD0qh7%pg5XFp?Ot65u5{IeevX0$MYW=69+ zN&o0Khld9XNt>|JqK`!8W zXth^FbdX%rJ-jzzj}iDFna*5Q2CiIAx|85l0^^}lBWi6^@sA=Bl+{ZDtRPtnA72)c zQ(c+Nz_flUVfRAw&E%k4RuQu{5KWpvMwh}h^(s-=44?+UxM)5KF@CEjCf@5F8A%7a z{eaN{_!n&;LB58!OnocC2L#*-m@i*&a(MNiu?XUy6qv(`99us)cs$6#Uc2FoG>n59 z*wmBG><+Et>7SvGgx1TbxD&yNwcaRV9t(5gd!9EsG<5u1z+~TiYuV(4ybNKiW##0i z&utqEYJM0l&dCiQzF@OHi-gw>sP7SU1?Vd6(S;H#c@_`fRkh^JLv=6eynHm?>i^`n zpJxvgH%br@yf0Ux5Q;es0u;X+kh_ECuV{1=I6rd`IQD%szrNG@Q+{09>YM#v-*F)O z)3VzM;2z$UWe5%tzIHV-pTM zd@0(XUs~Nav?Wpxec}Z(K5Zm?SZH;eVPH$IggRZFkEZ*h=Y5x_1#rmS zhYp5iz^q0tK*R=_Z(NjLyK4W)$uQl&Y^_^y>ec8Yks1zk9CW)PH6UhQb*iax z9hBM!;?GGZ^Z81N7yM5ptj~h7L#Tgzr!%x4$FUSZ=yclG-uPs0L|yxlPvjoD<*||9 zUyxiu{Aysop~!jSWBHw~d*ou^nKB-M1rsfh@)CW0SIy!h`>TJYOc}iHp3F5L`z}rw zW853JH&gI1z$cSw_n!X;I<3pMkU$;_!r;%WZurjVe~ddwZ0U9~4;R6yChLb#vK7P` z2qz?%Hz+FjPB|_sKenZV_rvw zQIhQxQ7Zb6)>nIGW-O4RpA>*0x4VX!t23PzkH^>8Y_`9X?ON;Wou>K6pvP0$6%5`e zlw=toS8@&A0!S}uYSqkFk`poF6#$)w;DB!`bf^%B1pw>X%kB1!i9ijtl?YEmuvvsg znD~f5o&!m1*0PAa*BK1;411h?AbvrBaZ;+!XU<&66lVd@u*=nusJVh}V#py7F$7lu z_zC>kGJxPu5F*J3ilB@L>tqSQU+ruY;a33ELqvn9#TPI~(?M9>?zWYbY_ND5Mz-5smO(?^PDCdl_?p1aCp#;ESZfzCo9X_EXzeDYe(#u>`7PP*_qa|7Q44F@ z);=}${VIUtE?0xiFiIBnV0H2Z5`HliK)nj0ouu%1hiRTJ2q3u$v-W^ew`haj65tC1d@gki)%_sa z1ts0SQ0V7^0FuY>KR01CdZl}IHf2iup2a52*aN9TlzR%as9hjxCdhtL&|AA=pGsD};ZXP$KS&R*j^>zkr`n+C!c7yROgU>*~+6|qzRkFyEH-;m%FfZxof zgqdDQL_oNNO;&O%J}p23q5+rF0swME&8q{&ypqYU@FI@d1bjvS%fW`pOaSlr0-Tex;}%Y4XQ34Lm}vo8|hN9%Xab=|c;^5b&6r3EX;upcO?^SZ79RIWwc z(-oW<%at&lU6zDs{8-tYKbF2(JUQzPRK|QG!X3?(+qv{h7{L^=+8!I8;&L wHSG4XVj!p_HrMu7IFRcDHY-3ei3^SS7iztxAgfgN1poj507*qoM6N<$f>DS)Z2$lO literal 0 HcmV?d00001 diff --git a/xz_mini/images/tab5.png b/xz_mini/images/tab5.png new file mode 100644 index 0000000000000000000000000000000000000000..3d8f906159a36167bb7c086a59a9c70f20c7f0ad GIT binary patch literal 1406 zcmV-^1%djBP)X|F7Xlwhz!;4o zL4`!zT8IQ9kwgrH5fqppO2A0u#VOz>FJkCj%Uab15Ofx2=j7a9IuMZ4_0dOXY?u5O*qQX-wL@g;wQ7$`d zSb1_tcsXgX5LE51l*%WOVwWz2rXLFI|2WTqC;XeemW+2z^mEb|J7=QR^Fa=*~VaBWaPF z=Fx)Sn>DRArrndp`NcxFr0vJDozsCtQWWa2cRN8g%P3#8uTc&swMbT0gU~>XZ3~RhE4De}ZZv>V8t#E>$9&KC zsuR6)_l952+DL>UYQ*okn#`|j-2|?O5iV`LIT`W800l}*b>GlX(s|-jXo5iey0m3Z z<%Z}rF->nU*G%z6b~znLyArX0{CaW8iEMBwr6_T#J`jD#%=>*txFz2tq`{AV;%Yp- z-MxV&-1!u9ydMPQjMm`Q2?GJIW?#8>Gx(4%7=CKZ@c1a$%jPU}SkSsw zl+NtwDq1HT{L{Ry@C%viH4_l+AcrPzSR9W7(){izIj*6P{TZ3?Is8 zY@@ew2AIAB$+iW-{*HX|X=%?U+@Ygvp@G3d4UJVk-tC1N|3BpZ1wW&rT#NXtcmMzZ M07*qoM6N<$g5M32c>n+a literal 0 HcmV?d00001 diff --git a/xz_mini/images/tab6.png b/xz_mini/images/tab6.png new file mode 100644 index 0000000000000000000000000000000000000000..22c387000012880f866599fd66b342a587173c78 GIT binary patch literal 3287 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 X6O;3mY2*^m00000NkvXXu0mjfOW}_* literal 0 HcmV?d00001 diff --git a/xz_mini/images/time.png b/xz_mini/images/time.png new file mode 100644 index 0000000000000000000000000000000000000000..e56443a7ce012a614baaf9bc2865ea3a5eb43d18 GIT binary patch literal 886 zcmV-+1Bv{JP)f~+f1 zXJ@F4lFF1MO@uBa=tdC1-4%2d73Z8eXT@k^cF+5l85>yE`8WfMc;S0_-sk!M&hvkt z=Mg;SBafMfCl^>W&F8dm$3jO$IG1(&17V#CU12G0z8q-&)kOHeoZ~HBbYOA$a+6D< z8x{%^2y(9f{h|X2NXaz&wbFy2T1iEvC^xk5e7@{mSXAKAv^gl6p95IiLimy>*`2*x zIoAo?@eK=haxWkUgwOjC;K6)H&d>B(+u7g zSg?!{2o4E&jff8A9Oq&)kt3OeC!Zydb8VdMrPfxNMk9Y$7oOQgRg-P?EGZ4IyD|=@fF=Mvz6M;?fYGAx|@17qD zSPL4njhg`C*Bx)gD4-vKTE>2f$c6dCJ_@K_+qeUunsvODq2KT!F!>cBJ4tTMyZ*6G z8>HSqR&tAod?(=7S;ybi6|k60KCh!P4#3k?{mq7WzTgqddRB@48-StaxH{weH@X7W z|JXL)5%5a@lXHBkHoz-mI?%{!HYUC&`7;r|BN2XYol3KTgWpJg3f zjma7zhoPB+NDP9Ha%Jy>cJ_B%-nHbCWxcLNe@5WN7B)>Ns`uV@-P!_ZdqM#lTV}?x z)@$J)s2_HqsGExN$5Pk*v$2g94cJL2?0x78!wPnadkXC2P}lbl0Bd?gEG{`g00000 M07*qoM6N<$f);wBHvj+t literal 0 HcmV?d00001 diff --git a/xz_mini/images/venue-on.png b/xz_mini/images/venue-on.png new file mode 100644 index 0000000000000000000000000000000000000000..b03315d5b4c90834e33cab68d1bd248c37b6f415 GIT binary patch literal 1074 zcmV-21kL-2P)mbr>3nEUs{S_6$DFLP>h(0QY-y`X|~REbG8P17{pxVcAeyIZE|>}I>!OeQk-aX#)n zzwP>>_AcNn`CyarSbT|ie7r;x- zJ(Nf!-jGs$3qYmz%S7~5G#dS;r>E!f|Ang<(D^#7n#w%47vK*7B$J{ z*Tz(WQE--JeXshzQs62Ebh@Uhg_(Z%&!UWR7C5!%QTkH?*liCPhM_u&?_9EGe!33J zvQ)vIcPu8*eG)jH38l~Ne}F$6b;vbs$K&y};c)m}X5IndWtDFn)-y9V*tV^TbkR{! zAV|6iLN~KKzGw8;o8{Ia!!S$$twi*Behy}Cwr#t|GoVvzBQeaZ(Av`JqFyXDZ8tSF zMKYPp885kYE)(*&J3)EE`sgW}L9)tD)h&!^}Z2+&%*ZTNIp);|n zjgrLsVEGn6EAz?~t3z(;E;&$FZS;j%8R`b`qMLyZppu%?B?l@{hg5%eo+X`V8yowp z`(8GC$O%MX3rt_G*0P=N4E>gNDz5FyALvFr; z=japyAmt3tJB2`@zdca!7%SLAxe%#Xw;hCB5ON-W4=uZpi^XD*Xf*m-&hXFjp8!O3 zT}pYjR3IYy0zjjBo`}vc^F?M>C$QR_IW!{bbX-$MWww;^VP9XLIyrJ3B`1Z(#>REb z{8OohFV=JFU^A6UsoymL(7!y8`)yKC>cvvTW!@{6W$j$BLLM5tpruOQLkn8P!w&Hw-a07*qoM6N<$f=x~SDgXcg literal 0 HcmV?d00001 diff --git a/xz_mini/images/venue.png b/xz_mini/images/venue.png new file mode 100644 index 0000000000000000000000000000000000000000..125f968807380980d90782e19564bd97fdbfc6f0 GIT binary patch literal 1042 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 D&p&nE literal 0 HcmV?d00001 diff --git a/xz_mini/images/venue3.png b/xz_mini/images/venue3.png new file mode 100644 index 0000000000000000000000000000000000000000..3a3d9b8f81b3feb349c6a4e60c28db455dd0fd88 GIT binary patch literal 1068 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 literal 0 HcmV?d00001 diff --git a/xz_mini/libs/bmap-wx.js b/xz_mini/libs/bmap-wx.js new file mode 100644 index 0000000..c6ca337 --- /dev/null +++ b/xz_mini/libs/bmap-wx.js @@ -0,0 +1,452 @@ +/** + * @file 微信小程序JSAPI + * @author 崔健 cuijian03@baidu.com 2017.01.10 + * @update 邓淑芳 623996689@qq.com 2019.07.03 + */ + +/** + * 百度地图微信小程序API类 + * + * @class + */ +class BMapWX { + + /** + * 百度地图微信小程序API类 + * + * @constructor + */ + constructor(param) { + this.ak = param["ak"]; + } + + /** + * 使用微信接口进行定位 + * + * @param {string} type 坐标类型 + * @param {Function} success 成功执行 + * @param {Function} fail 失败执行 + * @param {Function} complete 完成后执行 + */ + getWXLocation(type, success, fail, complete) { + type = type || 'gcj02', + success = success || function () { }; + fail = fail || function () { }; + complete = complete || function () { }; + wx.getLocation({ + type: type, + success: success, + fail: fail, + complete: complete + }); + } + + /** + * POI周边检索 + * + * @param {Object} param 检索配置 + * 参数对象结构可以参考 + * http://lbsyun.baidu.com/index.php?title=webapi/guide/webservice-placeapi + */ + search(param) { + var that = this; + param = param || {}; + let searchparam = { + query: param["query"] || '生活服务$美食&酒店', + scope: param["scope"] || 1, + filter: param["filter"] || '', + coord_type: param["coord_type"] || 2, + page_size: param["page_size"] || 10, + page_num: param["page_num"] || 0, + output: param["output"] || 'json', + ak: that.ak, + sn: param["sn"] || '', + timestamp: param["timestamp"] || '', + radius: param["radius"] || 2000, + ret_coordtype: 'gcj02ll' + }; + let otherparam = { + iconPath: param["iconPath"], + iconTapPath: param["iconTapPath"], + width: param["width"], + height: param["height"], + alpha: param["alpha"] || 1, + success: param["success"] || function () { }, + fail: param["fail"] || function () { } + }; + let type = 'gcj02'; + let locationsuccess = function (result) { + searchparam["location"] = result["latitude"] + ',' + result["longitude"]; + wx.request({ + url: 'https://api.map.baidu.com/place/v2/search', + data: searchparam, + header: { + "content-type": "application/json" + }, + method: 'GET', + success(data) { + let res = data["data"]; + if (res["status"] === 0) { + let poiArr = res["results"]; + // outputRes 包含两个对象, + // originalData为百度接口返回的原始数据 + // wxMarkerData为小程序规范的marker格式 + let outputRes = {}; + outputRes["originalData"] = res; + outputRes["wxMarkerData"] = []; + for (let i = 0; i < poiArr.length; i++) { + outputRes["wxMarkerData"][i] = { + id: i, + latitude: poiArr[i]["location"]["lat"], + longitude: poiArr[i]["location"]["lng"], + title: poiArr[i]["name"], + iconPath: otherparam["iconPath"], + iconTapPath: otherparam["iconTapPath"], + address: poiArr[i]["address"], + telephone: poiArr[i]["telephone"], + alpha: otherparam["alpha"], + width: otherparam["width"], + height: otherparam["height"] + } + } + otherparam.success(outputRes); + } else { + otherparam.fail({ + errMsg: res["message"], + statusCode: res["status"] + }); + } + }, + fail(data) { + otherparam.fail(data); + } + }); + } + let locationfail = function (result) { + otherparam.fail(result); + }; + let locationcomplete = function (result) { + }; + if (!param["location"]) { + that.getWXLocation(type, locationsuccess, locationfail, locationcomplete); + } else { + let longitude = param.location.split(',')[1]; + let latitude = param.location.split(',')[0]; + let errMsg = 'input location'; + let res = { + errMsg: errMsg, + latitude: latitude, + longitude: longitude + }; + locationsuccess(res); + } + } + + /** + * sug模糊检索 + * + * @param {Object} param 检索配置 + * 参数对象结构可以参考 + * http://lbsyun.baidu.com/index.php?title=webapi/place-suggestion-api + */ + suggestion(param) { + var that = this; + param = param || {}; + let suggestionparam = { + query: param["query"] || '', + region: param["region"] || '全国', + city_limit: param["city_limit"] || false, + output: param["output"] || 'json', + ak: that.ak, + sn: param["sn"] || '', + timestamp: param["timestamp"] || '', + ret_coordtype: 'gcj02ll' + }; + let otherparam = { + success: param["success"] || function () { }, + fail: param["fail"] || function () { } + }; + wx.request({ + url: 'https://api.map.baidu.com/place/v2/suggestion', + data: suggestionparam, + header: { + "content-type": "application/json" + }, + method: 'GET', + success(data) { + let res = data["data"]; + if (res["status"] === 0) { + otherparam.success(res); + } else { + otherparam.fail({ + errMsg: res["message"], + statusCode: res["status"] + }); + } + }, + fail(data) { + otherparam.fail(data); + } + }); + } + + /** + * rgc检索(逆地理编码:经纬度->地点描述) + * + * @param {Object} param 检索配置 + * 参数对象结构可以参考 + * https://lbs.baidu.com/index.php?title=webapi/guide/webservice-geocoding-abroad + * + */ + regeocoding (param) { + var that = this; + param = param || {}; + let regeocodingparam = { + coordtype: param["coordtype"] || 'gcj02ll', + ret_coordtype: 'gcj02ll', + radius: param["radius"] || 1000, + ak: that.ak, + sn: param["sn"] || '', + output: param["output"] || 'json', + callback: param["callback"] || function () { }, + extensions_poi: param["extensions_poi"] || 1, + extensions_road: param["extensions_road"] || false, + extensions_town: param["extensions_town"] || false, + language: param["language"] || 'zh-CN', + language_auto: param["language_auto"] || 0 + }; + let otherparam = { + iconPath: param["iconPath"], + iconTapPath: param["iconTapPath"], + width: param["width"], + height: param["height"], + alpha: param["alpha"] || 1, + success: param["success"] || function () { }, + fail: param["fail"] || function () { } + }; + let type = 'gcj02'; + let locationsuccess = function (result) { + regeocodingparam["location"] = result["latitude"] + ',' + result["longitude"]; + wx.request({ + url: 'https://api.map.baidu.com/reverse_geocoding/v3', + data: regeocodingparam, + header: { + "content-type": "application/json" + }, + method: 'GET', + success(data) { + let res = data["data"]; + if (res["status"] === 0) { + let poiObj = res["result"]; + // outputRes 包含两个对象: + // originalData为百度接口返回的原始数据 + // wxMarkerData为小程序规范的marker格式 + let outputRes = {}; + outputRes["originalData"] = res; + outputRes["wxMarkerData"] = []; + outputRes["wxMarkerData"][0] = { + id: 0, + latitude: result["latitude"], + longitude: result["longitude"], + address: poiObj["formatted_address"], + iconPath: otherparam["iconPath"], + iconTapPath: otherparam["iconTapPath"], + desc: poiObj["sematic_description"], + business: poiObj["business"], + alpha: otherparam["alpha"], + width: otherparam["width"], + height: otherparam["height"] + } + otherparam.success(outputRes); + } else { + otherparam.fail({ + errMsg: res["message"], + statusCode: res["status"] + }); + } + }, + fail(data) { + otherparam.fail(data); + } + }); + }; + let locationfail = function (result) { + otherparam.fail(result); + } + let locationcomplete = function (result) { + }; + if (!param["location"]) { + that.getWXLocation(type, locationsuccess, locationfail, locationcomplete); + } else { + let longitude = param.location.split(',')[1]; + let latitude = param.location.split(',')[0]; + let errMsg = 'input location'; + let res = { + errMsg: errMsg, + latitude: latitude, + longitude: longitude + }; + locationsuccess(res); + } + } + + /** + * gc检索(地理编码:地点->经纬度) + * + * @param {Object} param 检索配置 + * 参数对象结构可以参考 + * https://lbs.baidu.com/index.php?title=webapi/guide/webservice-geocoding + * + */ + geocoding(param) { + var that = this; + param = param || {}; + let geocodingparam = { + address: param["address"] || '', + city: param["city"] || '', + ret_coordtype: param["coordtype"] || 'gcj02ll', + ak: that.ak, + sn: param["sn"] || '', + output: param["output"] || 'json', + callback: param["callback"] || function () { } + }; + let otherparam = { + iconPath: param["iconPath"], + iconTapPath: param["iconTapPath"], + width: param["width"], + height: param["height"], + alpha: param["alpha"] || 1, + success: param["success"] || function () { }, + fail: param["fail"] || function () { } + }; + if (param["address"]) { + wx.request({ + url: 'https://api.map.baidu.com/geocoding/v3', + data: geocodingparam, + header: { + "content-type": "application/json" + }, + method: 'GET', + success(data) { + let res = data["data"]; + if (res["status"] === 0){ + let poiObj = res["result"]; + // outputRes 包含两个对象: + // originalData为百度接口返回的原始数据 + // wxMarkerData为小程序规范的marker格式 + let outputRes = res; + outputRes["originalData"] = res; + outputRes["wxMarkerData"] = []; + outputRes["wxMarkerData"][0] = { + id: 0, + latitude: poiObj["location"]["lat"], + longitude: poiObj["location"]["lng"], + iconPath: otherparam["iconPath"], + iconTapPath: otherparam["iconTapPath"], + alpha: otherparam["alpha"], + width: otherparam["width"], + height: otherparam["height"] + } + otherparam.success(outputRes); + } else { + otherparam.fail({ + errMsg: res["message"], + statusCode: res["status"] + }); + } + }, + fail(data) { + otherparam.fail(data); + } + }); + } else { + let errMsg = 'input address!'; + let res = { + errMsg: errMsg + }; + otherparam.fail(res); + } + } + + /** + * 天气检索 + * + * @param {Object} param 检索配置 + */ + weather(param) { + var that = this; + param = param || {}; + let weatherparam = { + coord_type: param["coord_type"] || 'gcj02', + output: param["output"] || 'json', + ak: that.ak, + sn: param["sn"] || '', + timestamp: param["timestamp"] || '' + }; + let otherparam = { + success: param["success"] || function () { }, + fail: param["fail"] || function () { } + }; + let type = 'gcj02'; + let locationsuccess = function (result) { + weatherparam["location"] = result["longitude"] + ',' + result["latitude"]; + wx.request({ + url: 'https://api.map.baidu.com/telematics/v3/weather', + data: weatherparam, + header: { + "content-type": "application/json" + }, + method: 'GET', + success(data) { + let res = data["data"]; + if (res["error"] === 0 && res["status"] === 'success') { + let weatherArr = res["results"]; + // outputRes 包含两个对象, + // originalData为百度接口返回的原始数据 + // wxMarkerData为小程序规范的marker格式 + let outputRes = {}; + outputRes["originalData"] = res; + outputRes["currentWeather"] = []; + outputRes["currentWeather"][0] = { + currentCity: weatherArr[0]["currentCity"], + pm25: weatherArr[0]["pm25"], + date: weatherArr[0]["weather_data"][0]["date"], + temperature: weatherArr[0]["weather_data"][0]["temperature"], + weatherDesc: weatherArr[0]["weather_data"][0]["weather"], + wind: weatherArr[0]["weather_data"][0]["wind"] + }; + otherparam.success(outputRes); + } else { + otherparam.fail({ + errMsg: res["message"], + statusCode: res["status"] + }); + } + }, + fail(data) { + otherparam.fail(data); + } + }); + } + let locationfail = function (result) { + otherparam.fail(result); + } + let locationcomplete = function (result) { + } + if (!param["location"]) { + that.getWXLocation(type, locationsuccess, locationfail, locationcomplete); + } else { + let longitude = param.location.split(',')[0]; + let latitude = param.location.split(',')[1]; + let errMsg = 'input location'; + let res = { + errMsg: errMsg, + latitude: latitude, + longitude: longitude + }; + locationsuccess(res); + } + } + } + + module.exports.BMapWX = BMapWX; \ No newline at end of file diff --git a/xz_mini/pages/activity/activity.js b/xz_mini/pages/activity/activity.js new file mode 100644 index 0000000..a5cf2fe --- /dev/null +++ b/xz_mini/pages/activity/activity.js @@ -0,0 +1,174 @@ +// pages/activity/activity.js +var app = getApp(); +Page({ + + /** + * 页面的初始数据 + */ + data: { + dataList: [], + areaList: [], + typeList: [], + pages: { + page: 1, + rows: 5, + activityType: '' + } + }, + //获取活动分类 + getActivityTypeList() { + var _self = this; + app.restAjax.get(app.restAjax.path(app.usercenterUrl + '/app/dictionaryself/listdictionarybyparentidrelease/e36ad682-c6b4-44fe-a05c-889a5ff7c284', []), + null, null, + function (code, data) { + _self.setData({ + typeList: data, + 'pages.activityType': data[0].dataId + }) + _self.getActivityList() + }, + function (err) { + + } + ); + }, + getAreaList: function () { + var self = this; + app.restAjax.get(app.restAjax.path(app.usercenterUrl + '/app/dictionaryself/listdictionarybyparentidrelease/e36ad682-c6b4-44fe-a05c-889a5ff7c284', []), + self.data.pages, null, + function (code, data) { + if (code == '200') { + self.setData({ + areaList: data, + + }) + } + } + ) + }, + changeArea: function (e) { + app.dialog.loading('正在加载'); + console.log(e) + this.setData({ + 'pages.activityType': e.currentTarget.dataset.dataid + }) + this.getActivityList() + }, + loadAll: function () { + this.setData({ + 'pages.county': '' + }) + this.getActivityList() + }, + goDetail: function (e) { + var id = e.currentTarget.dataset.id; + wx.navigateTo({ + url: '../activityDetail/activityDetail?id=' + id + }) + }, + getActivityList: function () { + var self = this; + app.restAjax.get(app.restAjax.path(app.activityUrl + '/app/activitylibrary/listpageactivitylibraryfornetrelease/{areaCode}', [app.areaCode]), + self.data.pages, null, + function (code, data) { + console.log(code + "===" + data) + if ('200' == code) { + for (var item of data.rows) { + if ('' != item.activityImage) { + item.activityImage = app.activityUrl + '/route/file/download/true/' + item.activityImage; + } + } + if (1 === self.data.pages.page) { + self.setData({ + dataList: data.rows, + }) + } else { + if (data.rows.length == 0) { + self.setData({ + [`pages.page`]: self.data.pages.page - 1 + }) + app.dialog.msg('暂无更多') + return false; + } + self.setData({ + dataList: data.rows.concat(self.data.dataList), + }) + } + } + }, + function () { + + }, + function () { + wx.hideNavigationBarLoading(); //完成停止加载图标 + wx.stopPullDownRefresh(); + wx.hideLoading(); + }) + }, + /** + * 生命周期函数--监听页面加载 + */ + onLoad: function (options) { + this.getActivityTypeList() + // this.getActivityList(); + // this.getAreaList() + + }, + + /** + * 生命周期函数--监听页面初次渲染完成 + */ + onReady: function () { + + }, + + /** + * 生命周期函数--监听页面显示 + */ + onShow: function () { + + }, + + /** + * 生命周期函数--监听页面隐藏 + */ + onHide: function () { + + }, + + /** + * 生命周期函数--监听页面卸载 + */ + onUnload: function () { + + }, + + /** + * 页面相关事件处理函数--监听用户下拉动作 + */ + onPullDownRefresh: function () { + // 在标题栏中显示加载图标 + wx.showNavigationBarLoading(); + var self = this; + self.setData({ + [`pages.page`]: 1, + dataList: [] + + }) + this.getActivityList(); + }, + + /** + * 页面上拉触底事件的处理函数 + */ + onReachBottom: function () { + + }, + + /** + * 用户点击右上角分享 + */ + onShareAppMessage: function () { + + } +}) \ No newline at end of file diff --git a/xz_mini/pages/activity/activity.json b/xz_mini/pages/activity/activity.json new file mode 100644 index 0000000..09e623a --- /dev/null +++ b/xz_mini/pages/activity/activity.json @@ -0,0 +1,5 @@ +{ + "usingComponents": {}, + "enablePullDownRefresh": true, + "backgroundTextStyle": "dark" +} \ No newline at end of file diff --git a/xz_mini/pages/activity/activity.wxml b/xz_mini/pages/activity/activity.wxml new file mode 100644 index 0000000..2dfc13d --- /dev/null +++ b/xz_mini/pages/activity/activity.wxml @@ -0,0 +1,23 @@ + + + {{item.dataName}} + + + + + + + + + {{item.activityTitle}} + 报名中 + 报名人数已满 + 停止报名 + 进行中 + 直接进入 + 已结束 + + {{item.activityStartTime}}至{{item.activityEndTime}} + + + \ No newline at end of file diff --git a/xz_mini/pages/activity/activity.wxss b/xz_mini/pages/activity/activity.wxss new file mode 100644 index 0000000..57ac14b --- /dev/null +++ b/xz_mini/pages/activity/activity.wxss @@ -0,0 +1,105 @@ +.activity { + padding: 20rpx 30rpx 0; + margin-top: 80rpx; +} + +.activity-box { + margin-bottom: 20rpx; + box-shadow: 0px 0px 17rpx 0px rgba(0, 0, 0, 0.1); + border-radius: 10rpx; + overflow: hidden; +} + +.activity-img { + height: 320rpx; + position: relative; +} + +.activity-img image { + width: 100%; + height: 100%; +} + +.corner { + position: absolute; + top: 20rpx; + right: 20rpx; + display: flex; + color: #fff; +} + +.corner view { + padding: 0 10rpx; + background: rgba(0, 0, 0, 0.6); + line-height: 40rpx; + vertical-align: middle; + display: flex; + align-items: center; + border-radius: 5rpx; +} + +.view-count { + margin-right: 20rpx; +} + +.view-count image { + width: 40rpx; + height: 40rpx; +} + +.activity-info { + padding: 15rpx 20rpx; +} + +.title { + display: flex; + justify-content: space-between; +} + +.activity-title { + width: 70%; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; + font-size: 32rpx; + color: #242424; + line-height: 40rpx; +} + +.sign { + background: rgba(159, 21, 18, .1); + color: #9F1512; + border-radius: 10rpx; + padding: 0 20rpx; + line-height: 40rpx; + font-size: 28rpx; +} + +.date { + margin-top: 10rpx; + font-size: 24rpx; + color: #242424; +} + +.area { + position: fixed; + top: 0; + left: 0; + right: 0; + height: 80rpx; + white-space: nowrap; + overflow-x: auto; + box-shadow: 10rpx 10rpx 5rpx #f2f2f2; +} + +.area-box { + display: inline-block; + width: 25%; + line-height: 80rpx; + text-align: center; + font-size: 30rpx; +} + +.area-box.active { + color: #9F1512; +} \ No newline at end of file diff --git a/xz_mini/pages/activityDetail/activityDetail.js b/xz_mini/pages/activityDetail/activityDetail.js new file mode 100644 index 0000000..59d2493 --- /dev/null +++ b/xz_mini/pages/activityDetail/activityDetail.js @@ -0,0 +1,144 @@ +// pages/activityDetail/activityDetail.js +var app = getApp(); +Page({ + + /** + * 页面的初始数据 + */ + data: { + activityUrl: app.activityUrl, + dataMap: {}, + token: '' + }, + getToken: function () { + var self = this; + return new Promise(resolve => { + wx.getStorage({ + key: 'token', + success(res) { + self.setData({ + token: res.data + }) + return resolve(); + } + }) + }) + }, + goSign: function (e) { + var activityId = e.currentTarget.dataset.id; + wx.navigateTo({ + url: '../activitySign/activitySign?id=' + activityId + }) + }, + cancel: function (e) { + var activityId = e.currentTarget.dataset.id; + app.restAjax.get(app.restAjax.path(app.activityUrl + '/app/activityuserapply/cancelapply/' + activityId, []), + {}, { + headers: { + token: self.data.token + } + }, function (code, data) { + if ('200' == code) { + wx.navigateTo({ + url: '../activityDetail/activityDetail?id=' + activityId + }) + } + }, function () { + + }, function () { + + }) + }, + /** + * 生命周期函数--监听页面加载 + */ + onLoad: function (options) { + var self = this; + this.getToken().then(result => { + var url; + var id = options.id; + if (!self.data.token) { + url = '/app/activitylibrary/getactivitylibrarybyidrelease/' + id; + self.setData({ + token: null + }) + } else { + url = '/app/activitylibrary/getactivitylibrarybyid/' + id + self.getToken() + } + app.restAjax.get(app.restAjax.path(app.activityUrl + url, []), {}, { + headers: { + token: self.data.token + } + }, function (code, data) { + data.activityImageArray = data.activityImage.split(','); + self.setData({ + dataMap: data + }) + }, function (code, data) { + app.dialog.msg(data.msg); + }); + }) + this.saveBigdata(options.id); + }, + saveBigdata(id) { + var params = "小程序" + id + "活动"; + var info = { + requestUrl: params + } + app.restAjax.get(app.restAjax.path(app.bigDataUrl + '/app/contentcensusrelease/log', []), info, null, + function (code, data) { + + }, function (code, err) { + + }) + }, + /** + * 生命周期函数--监听页面初次渲染完成 + */ + onReady: function () { + + }, + + /** + * 生命周期函数--监听页面显示 + */ + onShow: function () { + + }, + + /** + * 生命周期函数--监听页面隐藏 + */ + onHide: function () { + + }, + + /** + * 生命周期函数--监听页面卸载 + */ + onUnload: function () { + + }, + + /** + * 页面相关事件处理函数--监听用户下拉动作 + */ + onPullDownRefresh: function () { + + }, + + /** + * 页面上拉触底事件的处理函数 + */ + onReachBottom: function () { + + }, + + /** + * 用户点击右上角分享 + */ + onShareAppMessage: function () { + + } +}) \ No newline at end of file diff --git a/xz_mini/pages/activityDetail/activityDetail.json b/xz_mini/pages/activityDetail/activityDetail.json new file mode 100644 index 0000000..8835af0 --- /dev/null +++ b/xz_mini/pages/activityDetail/activityDetail.json @@ -0,0 +1,3 @@ +{ + "usingComponents": {} +} \ No newline at end of file diff --git a/xz_mini/pages/activityDetail/activityDetail.wxml b/xz_mini/pages/activityDetail/activityDetail.wxml new file mode 100644 index 0000000..0cd2c82 --- /dev/null +++ b/xz_mini/pages/activityDetail/activityDetail.wxml @@ -0,0 +1,53 @@ + + + + + + + + + {{dataMap.activityTitle}} + + + + 活动人数: + {{dataMap.activityUserNum }} + + + + 活动时间: + {{dataMap.activityStartTime}}至{{dataMap.activityEndTime}} + + + + 活动地址: + {{dataMap.activityAddress }} + + + + + 活动详情 + + + + 活动单位 + + + 主办单位:{{dataMap.activitySponsor}} + + + 承办单位:{{dataMap.activityOrganizer}} + + + 协办单位:{{dataMap.activityCoOrganizer}} + + + + + + + 报名 + + diff --git a/xz_mini/pages/activityDetail/activityDetail.wxss b/xz_mini/pages/activityDetail/activityDetail.wxss new file mode 100644 index 0000000..8808df0 --- /dev/null +++ b/xz_mini/pages/activityDetail/activityDetail.wxss @@ -0,0 +1,91 @@ +.activity-img, .activity-img image{ + width: 100%; + height: 480rpx; +} +swiper { + height: 100%; +} +.activity-detail{ + position: absolute; + left: 0; + right: 0; + top: 430rpx; + background: #fff; + border-radius:30rpx 30rpx 0px 0px; + overflow: hidden; + padding-bottom: 120rpx; +} +.activity-title, .activity-info{ + padding: 30rpx; + font-size: 32rpx; + color: #242424; + border-bottom: 5px solid #FBFBFB; +} +.activity-text{ + line-height: 35rpx; + font-size: 28rpx; + margin-bottom: 15rpx; +} +.activity-text:last-child{ + margin-bottom: 0; +} +.activity-info image{ + width: 35rpx; + height: 35rpx; + margin-right: 10rpx; + vertical-align: middle; + margin-top: -5rpx; +} +.activity-text text{ + color: #BBBBBB; +} +.activity-container{ + padding: 30rpx; +} +.part{ + margin-bottom: 30rpx; +} +.part:last-child{ + margin-bottom: 0; +} +.part-title{ + border-left: 3px solid #9F1512; + color: #242424; + padding-left: 10rpx; + font-size: 30rpx; + margin-bottom: 10rpx; +} +.part-content{ + font-size: 28rpx; + line-height: 40rpx; +} +.part-info{ + line-height: 50rpx; + color: #242424; + font-size: 28rpx; +} +.part-info text{ + color: #BBBBBB; +} +.sign-box{ + position: fixed; + bottom: 0; + left: 0; + right: 0; + box-shadow:0px 0px 17px 0px rgba(0,0,0,0.1); + height: 120rpx; + padding: 20rpx 30rpx; + box-sizing: border-box; + background: #fff; +} +.sign-btn{ + width: 100%; + height: 100%; + background: #9F1512; + border-radius: 10rpx; + display: flex; + justify-content: center; + align-items: center; + font-size: 30rpx; + color: #fff; +} \ No newline at end of file diff --git a/xz_mini/pages/activityDialog/activityDialog.js b/xz_mini/pages/activityDialog/activityDialog.js new file mode 100644 index 0000000..7ed2669 --- /dev/null +++ b/xz_mini/pages/activityDialog/activityDialog.js @@ -0,0 +1,156 @@ +// pages/activityDialog/activityDialog.js +var app = getApp(); +Page({ + + /** + * 页面的初始数据 + */ + data: { + token: '', + serviceId: '', + pages: { + page: 1, + rows: 5 + }, + dataList: {}, + status: '' + }, + getToken: function() { + var self = this; + return new Promise(resolve =>{ + wx.getStorage({ + key: 'token', + success(res) { + self.setData({ + token: res.data + }) + return resolve(); + } + }) + }) + }, + getActivityHis: function() { + var self = this; + app.restAjax.get(app.restAjax.path(app.volunteerUrl + '/app/teamactivityhis/listpageteamactivityhis?serviceId=' + self.data.serviceId, []), + self.data.pages, { + headers: { + token: self.data.token + } + }, function(code, data) { + if('200' == code) { + var photos = []; + for(var item of data.rows) { + if('' != item.photo) { + item.photo = app.volunteerUrl + '/route/file/download/true/' + item.photo; + } + if('' != item.photos) { + var photoArr = item.photos.split(","); + for(var i=0; i { + this.getActivityHis() + }) + }, + + /** + * 生命周期函数--监听页面初次渲染完成 + */ + onReady: function () { + + }, + + /** + * 生命周期函数--监听页面显示 + */ + onShow: function () { + + }, + + /** + * 生命周期函数--监听页面隐藏 + */ + onHide: function () { + + }, + + /** + * 生命周期函数--监听页面卸载 + */ + onUnload: function () { + + }, + + /** + * 页面相关事件处理函数--监听用户下拉动作 + */ + onPullDownRefresh: function () { + // 在标题栏中显示加载图标 + wx.showNavigationBarLoading(); + var self = this; + self.setData({ + [`pages.page`] : self.data.pages.page + 1 + }) + console.log(self.data.pages) + this.getActivityHis(); + }, + + /** + * 页面上拉触底事件的处理函数 + */ + onReachBottom: function () { + + }, + + /** + * 用户点击右上角分享 + */ + onShareAppMessage: function () { + + } +}) \ No newline at end of file diff --git a/xz_mini/pages/activityDialog/activityDialog.json b/xz_mini/pages/activityDialog/activityDialog.json new file mode 100644 index 0000000..09e623a --- /dev/null +++ b/xz_mini/pages/activityDialog/activityDialog.json @@ -0,0 +1,5 @@ +{ + "usingComponents": {}, + "enablePullDownRefresh": true, + "backgroundTextStyle": "dark" +} \ No newline at end of file diff --git a/xz_mini/pages/activityDialog/activityDialog.wxml b/xz_mini/pages/activityDialog/activityDialog.wxml new file mode 100644 index 0000000..48a8c04 --- /dev/null +++ b/xz_mini/pages/activityDialog/activityDialog.wxml @@ -0,0 +1,24 @@ + + + 暂无评论 + + + + + + + + + \ No newline at end of file diff --git a/xz_mini/pages/activityDialog/activityDialog.wxss b/xz_mini/pages/activityDialog/activityDialog.wxss new file mode 100644 index 0000000..b01a43d --- /dev/null +++ b/xz_mini/pages/activityDialog/activityDialog.wxss @@ -0,0 +1,42 @@ +.dialog{ + padding: 30rpx; +} +.dialog-box{ + margin-bottom: 15rpx; + display: flex; + justify-content: space-between; +} +.avatar{ + width: 15%; +} +.avatar image{ + width: 100%; + height: 90rpx; +} +.user-info{ + width: 83%; + border-bottom: 1px solid #DEDEDE; + padding-bottom: 10rpx; +} +.name{ + font-size: 34rpx; + color: #949494; + margin: 15rpx 0; +} +.content{ + font-size: 30rpx; + color: #000; + margin-bottom: 15rpx; +} +.public-time{ + display: flex; + justify-content: space-between; +} +.time{ + font-size: 28rpx; + color: #949494; +} +.delete, .delete image{ + width: 40rpx; + height: 40rpx; +} \ No newline at end of file diff --git a/xz_mini/pages/activitySign/activitySign.js b/xz_mini/pages/activitySign/activitySign.js new file mode 100644 index 0000000..44bb418 --- /dev/null +++ b/xz_mini/pages/activitySign/activitySign.js @@ -0,0 +1,196 @@ +// pages/activitySign/activitySign.js +var app = getApp(); +Page({ + + /** + * 页面的初始数据 + */ + data: { + activityUrl: app.activityUrl, + token: '', + dataMap: {}, + phone: '', + code: '', + name: '', + idCard: '', + trueCode: '', + activityId: '', + restTime: 120, + timer: '', + gotCode: false + }, + getToken: function () { + var self = this; + return new Promise(resolve => { + wx.getStorage({ + key: 'token', + success(res) { + self.setData({ + token: res.data + }) + return resolve(); + } + }) + }) + }, + getCode: function () { + var self = this; + if (!self.data.phone) { + app.dialog.msg('请输入手机号'); + return false; + } + app.restAjax.get(app.restAjax.path(app.activityUrl + '/app/sms/verify-code/' + self.data.phone, []), {}, null, function (code, data) { + console.log(data) + if ('200' == code) { + self.setData({ + gotCode: true + }) + self.data.timer = setInterval(function () { + var cur = self.data.restTime - 1 + if (cur == 0) { + clearInterval(self.data.timer) + self.setData({ + restTime: 120, + gotCode: false + }) + } else { + self.setData({ + restTime: cur + }) + } + }, 1000) + } + }, function (code, data) { + app.dialog.msg(data.msg) + }, function () { + + }) + }, + commit: function () { + var self = this; + if (!self.data.phone) { + app.dialog.msg('请输入手机号'); + return false; + } + if (!self.data.name) { + app.dialog.msg('请输入姓名'); + return false; + } + if (!self.data.idCard) { + app.dialog.msg('请输入身份证号码'); + return false; + } + var activityUserApplyVO = { + activityId: self.data.activityId, + code: self.data.code, + userIdCard: self.data.idCard, + userName: self.data.name, + userPhone: self.data.phone + } + app.restAjax.post(app.restAjax.path(app.activityUrl + '/app/activityuserapply/saveactivityuserapply', []), + activityUserApplyVO, { + headers: { + token: self.data.token + } + }, + function (code, data) { + console.log(data) + if ('200' == code) { + app.dialog.msg('报名成功'); + setTimeout(function () { + wx.navigateBack({}) + }, 1000) + } + }, + function (code, data) { + app.dialog.msg(data.msg); + }, + function () { + + }) + }, + /** + * 生命周期函数--监听页面加载 + */ + onLoad: function (options) { + var self = this; + this.getToken().then(result => { + var url; + var id = options.id; + if (!self.data.token) { + url = '/app/activitylibrary/getactivitylibrarybyidrelease/' + id; + } else { + url = '/app/activitylibrary/getactivitylibrarybyid/' + id + } + self.setData({ + activityId: options.id + }) + app.restAjax.get(app.restAjax.path(app.activityUrl + url, []), {}, { + headers: { + token: self.data.token + } + }, function (code, data) { + if ('200' == code) { + data.activityImageArray = data.activityImage.split(','); + self.setData({ + dataMap: data + }) + console.log(self.data.dataMap) + } + }, function () { + + }, function () { + + }) + }) + }, + + /** + * 生命周期函数--监听页面初次渲染完成 + */ + onReady: function () { + + }, + + /** + * 生命周期函数--监听页面显示 + */ + onShow: function () { + + }, + + /** + * 生命周期函数--监听页面隐藏 + */ + onHide: function () { + + }, + + /** + * 生命周期函数--监听页面卸载 + */ + onUnload: function () { + + }, + + /** + * 页面相关事件处理函数--监听用户下拉动作 + */ + onPullDownRefresh: function () { + + }, + + /** + * 页面上拉触底事件的处理函数 + */ + onReachBottom: function () { + + }, + + /** + * 用户点击右上角分享 + */ + onShareAppMessage: function () { + + } +}) \ No newline at end of file diff --git a/xz_mini/pages/activitySign/activitySign.json b/xz_mini/pages/activitySign/activitySign.json new file mode 100644 index 0000000..7360326 --- /dev/null +++ b/xz_mini/pages/activitySign/activitySign.json @@ -0,0 +1,4 @@ +{ + "usingComponents": {}, + "enablePullDownRefresh": true +} \ No newline at end of file diff --git a/xz_mini/pages/activitySign/activitySign.wxml b/xz_mini/pages/activitySign/activitySign.wxml new file mode 100644 index 0000000..9c4c4e8 --- /dev/null +++ b/xz_mini/pages/activitySign/activitySign.wxml @@ -0,0 +1,59 @@ + + + + + + + + + + {{dataMap.activityTitle}} + + + + 活动人数: + + {{dataMap.activityUserNum }} + + + + + 活动时间: + + {{dataMap.activityStartTime}}至{{dataMap.activityEndTime}} + + + + + 活动地址: + + {{dataMap.activityAddress }} + + + + + 填写信息 + + + 手机号: + + + + 验证码: + + 获取验证码 + {{restTime}} + + + 姓 名: + + + + 身份证: + + + + + + 立即报名 + \ No newline at end of file diff --git a/xz_mini/pages/activitySign/activitySign.wxss b/xz_mini/pages/activitySign/activitySign.wxss new file mode 100644 index 0000000..a237f80 --- /dev/null +++ b/xz_mini/pages/activitySign/activitySign.wxss @@ -0,0 +1,104 @@ +.activity{ + padding: 30rpx; + border-bottom: 5px solid #EFEFEF; + display: flex; +} +.activity-img, .activity-img image{ + width: 290rpx; + height: 200rpx; + border-radius: 10rpx; +} +.activity-info{ + width: 370rpx; + margin-left: 20rpx; +} +.activity-title{ + text-overflow: ellipsis; + white-space: nowrap; + overflow: hidden; + font-size: 30rpx; + color: #242424; +} +.activity-text{ + display: flex; + font-size: 26rpx; +} +.activity-text view{ + flex-shrink: 0; + width: 50%; + word-break: break-all; +} +.activity-text image{ + width: 35rpx; + height: 35rpx; + margin-right: 10rpx; + vertical-align: middle; + margin-top: -5rpx; +} +.activity-text text{ + color: #BBB; +} +.personal{ + padding: 30rpx 30rpx 0; + margin-bottom: 120rpx; +} +.title{ + padding-left: 10rpx; + border-left: 3px solid #9F1512; + font-size: 32rpx; + color: #242424; +} +.info-box{ + padding: 20rpx 0; + border-bottom: 1px solid #EBEBEB; + font-size: 28rpx; + color: #242424; + line-height: 40rpx; + position: relative; +} +.info-box input{ + display: inline-block; + vertical-align: middle; + width: 300rpx; + height: 40rpx; + margin-top: -5rpx; +} +.get-code, .got-code{ + position: absolute; + top: 15rpx; + right: 0; + height: 40rpx; + background: rgba(159,21,18,.1); + padding: 5rpx 10rpx; + color: #9F1512; + font-size: 26rpx; +} +.got-code{ + width: 120rpx; + background: #eee; + color: #4a4d52; + border: 1px solid #eaeaea; + text-align: center; +} +.sign-box{ + position: fixed; + bottom: 0; + left: 0; + right: 0; + box-shadow:0px 0px 17px 0px rgba(0,0,0,0.1); + height: 120rpx; + padding: 20rpx 30rpx; + box-sizing: border-box; + background: #fff; +} +.sign-btn{ + width: 100%; + height: 100%; + background: #9F1512; + border-radius: 10rpx; + display: flex; + justify-content: center; + align-items: center; + font-size: 30rpx; + color: #fff; +} \ No newline at end of file diff --git a/xz_mini/pages/book/book.js b/xz_mini/pages/book/book.js new file mode 100644 index 0000000..06707a0 --- /dev/null +++ b/xz_mini/pages/book/book.js @@ -0,0 +1,410 @@ +var app = getApp(); +//util.js 工具类 +var util = require('../../utils/util.js'); +// pages/book/book.js +Page({ + + /** + * 页面的初始数据 + */ + data: { + token: '', + timer: '', + gotCode: false, + checkOrder: false, + restTime:120, + venuesInfoId: '', + selectVenuesProject:'', + venuesProjectList: [], + projectDetail:{}, + bookingOrderDateList:[], + bookingOrderDate: '', + selectGround:'', + groundList:[], + itemTimeList:[], + mySelectItem:[], + totalPrice:'0', + phoneNumber:'', + smsCode:'' + }, + + //保存 + saveBookingInfo: function(){ + var self = this; + if(self.data.mySelectItem.length == 0){ + wx.showToast({ + title: '请先选择您的预订信息', + icon: 'none', + }) + return false; + } + if(!self.checkPhoneNumber()){ + return false; + } + if(self.data.smsCode == ''){ + wx.showToast({ + title: '请填写验证码', + icon: 'none', + }) + return false; + } + var param = { + smsCode : self.data.smsCode, + phoneNumber : self.data.phoneNumber, + venuesProjectId : self.data.selectVenuesProject, + bookingItemList : self.data.mySelectItem + } + wx.showLoading({ + title: '请稍等...', + mask: true + }) + app.restAjax.post(app.restAjax.path('{venueUrl}/app/booking/savebookinginfo',[app.venueUrl]), param, {headers : {token:self.data.token}}, function(code,data){ + if(code == 200){ + wx.showToast({ + title: '预订成功', + }); + setTimeout( () =>{ + wx.navigateBack({ + delta: 1, + }) + },1500); + } + },function(code,data){ + app.dialog.msg(data.msg); + },function(){ + wx.hideLoading(); + }); + }, + + /** + * 获取项目列 + */ + listVenuesProject: function(){ + var self = this; + app.restAjax.get(app.restAjax.path('{venueUrl}/app/venuesproject/listprojectinforelease/{venuesInfoId}', + [app.venueUrl,self.data.venuesInfoId]), {}, null, + function(code,data){ + self.setData({ + venuesProjectList: data + }); + if(self.data.venuesProjectList.length > 0){ + self.setData({ + selectVenuesProject: self.data.venuesProjectList[0].venuesProjectId + }); + self.getVenuesProjectDetail(); + self.getItemTimeList(); + }; + },function(code,data){ + app.dialog.msg(data.msg); + } + ); + }, + + //获取项目详情信息 + getVenuesProjectDetail: function(){ + var self = this; + app.restAjax.get(app.restAjax.path('{venueUrl}/app/venuesproject/getvenuesprojectdetailrelease/{venuesProjectId}', + [app.venueUrl,self.data.selectVenuesProject]), {}, null, + function(code,data){ + self.setData({ + projectDetail:data.data + }); + // console.log(self.data.projectDetail); + },function(code,data){ + app.dialog.msg(data.msg); + } + ); + }, + + //获取预订时刻表 + getItemTimeList: function(){ + var self = this; + if(self.data.selectVenuesProject == ''){ + return false; + } + app.restAjax.get(app.restAjax.path('{venueUrl}/app/booking/listgrouninfoanditemrelease/{venuesProjectId}', + [app.venueUrl,self.data.selectVenuesProject]), null, {headers : {token:self.data.token}}, + function(code,data){ + if(data.data.length > 0 ){ + self.setData({ + groundList: data.data, + selectGround:data.data[0].groundInfoId, + itemTimeList:data.data[0].groundItemList + }); + } else { + self.setData({ + groundList: [], + selectGround:'', + itemTimeList:[] + }); + } + self.checkSelectType(); + // console.log(data.data); + },function(code,data){ + app.dialog.msg(data.msg); + } + ); + }, + + //用户点选时刻 + selectItemTime: function(options){ + var obj = options.currentTarget.dataset; + if(obj.data.checked == '0'){ + var item = { + bookingOrderDate: this.data.bookingOrderDate, + timeStr: obj.data.timeStr, + timeEnd: obj.data.timeEnd, + groundName: obj.data.groundName, + groundItemId: obj.data.groundItemId, + price: obj.data.price + } + var mySelectItem = this.data.mySelectItem; + mySelectItem.push(item) + this.setData({ + mySelectItem :mySelectItem + }) + } + if(obj.data.checked == '1'){ + var self = this; + var mySelectItem = self.data.mySelectItem; + for(var i = 0; i < mySelectItem.length; i++){ + if(mySelectItem[i]['groundItemId'] == obj.data.groundItemId && mySelectItem[i]['bookingOrderDate'] == self.data.bookingOrderDate){ + mySelectItem.splice(i,1); + self.setData({ + mySelectItem: mySelectItem + }) + break; + } + } + } + this.checkSelectType(); + this.checkPrice(); + }, + + //切换当前选择项目 + changeProject: function(options){ + var venuesProjectId = options.currentTarget.dataset.id; + if(this.data.selectVenuesProject == venuesProjectId){ + return false; + }; + this.setData({ + selectVenuesProject: venuesProjectId, + mySelectItem: [] + }); + this.getVenuesProjectDetail(); + this.getItemTimeList(); + this.getBookingDate() + this.setData({ + mySelectItem:[], + totalPrice : 0 + }); + }, + + //切换场地 + changeGround: function(options){ + var groundInfoId = options.currentTarget.dataset.id; + var index = options.currentTarget.dataset.index; + var groundList = this.data.groundList; + this.setData({ + selectGround: groundInfoId, + itemTimeList: groundList[index].groundItemList + }) + this.checkSelectType(); + }, + + //判断已选择的状态 + checkSelectType: function(){ + var self = this; + self.data.itemTimeList.forEach(element =>{ + element['checked'] = '0'; + self.data.mySelectItem.forEach(my =>{ + if(element['groundItemId'] == my['groundItemId'] && self.data.bookingOrderDate == my['bookingOrderDate']){ + element['checked'] = '1'; + } + }) + }); + // console.log(self.data.itemTimeList); + self.setData({ + itemTimeList: self.data.itemTimeList + }) + }, + + //预订日期 + getBookingDate: function(){ + var dateList = []; + var day = new Date(); + day.setTime(day.getTime() + 24*60*60*1000) + dateList.push(util.formatDate(day)); + day.setTime(day.getTime() + 24*60*60*1000) + dateList.push(util.formatDate(day)); + day.setTime(day.getTime() + 24*60*60*1000) + dateList.push(util.formatDate(day)); + this.setData({ + bookingOrderDate: dateList[0], + bookingOrderDateList: dateList + }) + }, + + //切换日期 + changeDate: function(options){ + this.setData({ + bookingOrderDate: options.currentTarget.dataset.date + }) + this.checkSelectType(); + }, + + //计算金额 + checkPrice: function(){ + var total = 0; + this.data.mySelectItem.forEach(element=>{ + total = total + Number(element['price']); + }) + this.setData({ + totalPrice: total + }) + }, + + checkPhoneNumber: function(){ + if(this.data.phoneNumber == ''){ + wx.showToast({ + title: '请填写手机号', + icon: 'none', + }) + return false; + } + if (!/^1(3|4|5|6|7|8|9)\d{9}$/.test(this.data.phoneNumber)) { + wx.showToast({ + title: '请输入正确的手机号', + icon: 'none', + duration: 1500 + }) + return false; + } + return true; + }, + + //获取验证码 + getSmsCoce: function (){ + var self = this; + if(!self.checkPhoneNumber()){ + return false; + } + wx.showLoading({ + title: '请稍等...', + mask: true + }) + app.restAjax.get(app.restAjax.path('{venueUrl}/app/sms/verify-code/' + self.data.phoneNumber, [app.venueUrl]), {}, null, + function (code, data) { + if (code == 200) { + self.setData({ + gotCode: true + }) + self.data.timer = setInterval(function () { + var cur = self.data.restTime - 1 + if (cur == 0) { + clearInterval(self.data.timer) + self.setData({ + restTime: 120, + gotCode: false + }) + } else { + self.setData({ + restTime: cur + }) + } + }, 1000) + wx.hideLoading(); + } + }, + function (code, data) { + wx.showToast({ + title: data.msg, + icon: 'none', + duration: 1500 + }) + }) + }, + + doCheckOrder: function () { + if(this.data.mySelectItem.length == 0){ + return false; + } + this.setData({ + checkOrder: true + }) + }, + + closeCheckOrder: function () { + this.setData({ + checkOrder: false + }) + }, + + /** + * 生命周期函数--监听页面加载 + */ + onLoad: function (options) { + wx.getStorage({ + key: 'token', + success: (result) => { + this.setData({ + token : result.data + }) + } + }) + this.setData({ + venuesInfoId: options.venuesInfoId + }); + this.listVenuesProject(); + this.getBookingDate(); + }, + + /** + * 生命周期函数--监听页面初次渲染完成 + */ + onReady: function () { + + }, + + /** + * 生命周期函数--监听页面显示 + */ + onShow: function () { + + }, + + /** + * 生命周期函数--监听页面隐藏 + */ + onHide: function () { + + }, + + /** + * 生命周期函数--监听页面卸载 + */ + onUnload: function () { + + }, + + /** + * 页面相关事件处理函数--监听用户下拉动作 + */ + onPullDownRefresh: function () { + + }, + + /** + * 页面上拉触底事件的处理函数 + */ + onReachBottom: function () { + + }, + + /** + * 用户点击右上角分享 + */ + onShareAppMessage: function () { + + } +}) \ No newline at end of file diff --git a/xz_mini/pages/book/book.json b/xz_mini/pages/book/book.json new file mode 100644 index 0000000..8835af0 --- /dev/null +++ b/xz_mini/pages/book/book.json @@ -0,0 +1,3 @@ +{ + "usingComponents": {} +} \ No newline at end of file diff --git a/xz_mini/pages/book/book.wxml b/xz_mini/pages/book/book.wxml new file mode 100644 index 0000000..38ac246 --- /dev/null +++ b/xz_mini/pages/book/book.wxml @@ -0,0 +1,77 @@ + + + + {{item.projectName}} + + + + + 简介: + {{projectDetail.projectDescription}} + + + + {{item}} + + + + + + + {{item.groundName}} + + + + + + + {{item.timeStr}}-{{item.timeEnd}} + {{item.price == '0' ? '免费' : item.price + '元'}} + + + + + + 手机号: + + + + + + 验证码: + + + 获取验证码 + {{restTime}} + + + + + + 订单金额:{{totalPrice == '0'? '-' : totalPrice + '元'}} + + + 预定 + + + + + + 订单信息 + + + + {{item.bookingOrderDate}} + {{item.timeStr}}-{{item.timeEnd}} + + + {{item.groundName}} + 免费 + {{item.price}}元 + + + + + \ No newline at end of file diff --git a/xz_mini/pages/book/book.wxss b/xz_mini/pages/book/book.wxss new file mode 100644 index 0000000..aa0b16d --- /dev/null +++ b/xz_mini/pages/book/book.wxss @@ -0,0 +1,237 @@ +.top-select{ + height:90rpx; + background:rgba(255,255,255,1); + box-shadow:0px 0px 16rpx 0px rgba(0,0,0,0.1); + border-radius:0px 0px 31rpx 31rpx; + padding: 0 30rpx; + display: flex; + margin-bottom: 10rpx; +} +.select-box{ + padding: 0 30rpx; + position: relative; + font-size: 32rpx; + display: flex; + align-items: center; + justify-content: center; +} +.select-box image{ + position: absolute; + top: 50%; + width: 20rpx; + height: 30rpx; + display: none; + transform: translate(0, -50%); +} +.select-box.active image{ + display: block; +} +.select-l{ + left: 0; +} +.select-r{ + right: 0; +} +.venue-info{ + padding: 0 30rpx; +} +.title{ + font-size: 30rpx; + color: #000; + margin-bottom: 10rpx; +} +.content{ + font-size: 28rpx; + color: #949494; + margin-bottom: 10rpx; +} +.date{ + border-top: 3px solid #DEDEDE; + border-bottom: 3px solid #DEDEDE; + padding: 0 30rpx; +} +.date-container, .ground-container{ + display: flex; + flex-wrap: nowrap; + overflow-x: auto; +} +.date-box, .ground-box{ + flex-shrink: 0; + padding: 15rpx 0; + margin-right: 15rpx; + font-size: 30rpx; + color: #949494; +} +.date-box.active{ + color: #9F1512; +} +.ground{ + margin: 20rpx 0; + padding: 0 30rpx 20rpx; + border-bottom: 3px solid #DEDEDE; +} +.ground-box{ + margin: 0; + padding: 0 25rpx; + position: relative; +} +.ground-box image{ + width: 20rpx; + height: 30rpx; + position: absolute; + top: 50%; + transform: translate(0, -50%); + display: none; +} +.left{ + left: 0 +} +.right{ + right: 0 +} +.ground-box.active{ + color: #9F1512; +} +.ground-box.active image{ + display: block; +} +.time{ + padding: 0 30rpx; + margin-bottom: 260rpx; +} +.time-box{ + display: inline-block; + width: 32%; + margin-right: 2%; + background: rgba(159,21,18,.5); + color: #fff; + font-size: 28rpx; + border-radius: 15rpx; + margin-bottom: 15rpx; + text-align: center; + padding: 15rpx; + box-sizing: border-box; +} +.time-box:nth-child(3n){ + margin-right: 0 +} +.time-box.selected{ + background: #9F1512; +} +.bottom{ + position: fixed; + bottom: 0; + left: 0; + right: 0; + padding: 15rpx 30rpx; + background: #fff; +} +.phone-code{ + margin-bottom: 20rpx; +} +.row{ + display: flex; + justify-content: space-between; +} +.row-title{ + width: 20%; + font-size: 28rpx; + color: #000; + line-height: 55rpx; + padding: 10rpx 0; +} +.row-input{ + width: 78%; + border-bottom: 1px solid #DEDEDE; + display: flex; + justify-content: space-between; + padding: 10rpx 0; +} +.row-input input{ + width: 100%; + height: 55rpx; +} +.row-input input.code-input{ + width: 70%; +} +.get-code{ + width: 28%; + font-size: 28rpx; + background: #9F1512; + color: #fff; + display: flex; + justify-content: center; + align-items: center; +} +.pay-book{ + display: flex; + justify-content: space-between; +} +.pay, .book{ + width: 70%; + height: 60rpx; + background: #9F1512; + color: #fff; + font-size: 28rpx; + display: flex; + justify-content: center; + align-items: center; +} +.book{ + width: 29%; +} +.order-info{ + position: fixed; + top: 0; + left: 0; + right: 0; + bottom: 0; + z-index: 1000; + background: rgba(0,0,0,0.6); +} +.order-container{ + position: absolute; + bottom: 90rpx; + left: 30rpx; + right: 30rpx; + background: #fff; + border-radius: 10rpx; + padding: 20rpx; +} +.order-title{ + font-size: 30rpx; + text-align: center; + color: #9F1512; +} +.order{ + margin-top: 20rpx; + overflow-x: auto; + white-space: nowrap; +} +.order-box{ + border: 1px solid #9F1512; + border-radius: 10rpx; + text-align: center; + display: inline-block; + margin-right: 20rpx; + font-size: 28rpx; + width: 32%; +} +.top{ + background: #9F1512; + color: #fff; +} +.get-code, .got-code{ + font-size: 28rpx; + background: rgba(159,21,18,.1); + color: #9F1512; + width: 28%; + line-height: 55rpx; + text-align: center; + border-radius: 10rpx; +} +.got-code{ + background: #fff; + color: #4a4d52; + border: 1px solid #eaeaea; +} \ No newline at end of file diff --git a/xz_mini/pages/broadcast/broadcast.js b/xz_mini/pages/broadcast/broadcast.js new file mode 100644 index 0000000..903814a --- /dev/null +++ b/xz_mini/pages/broadcast/broadcast.js @@ -0,0 +1,105 @@ +// pages/broadcast/broadcast.js +var app = getApp(); +Page({ + /** + * 页面的初始数据 + */ + data: { + live: { + liveUrl: app.liveUrl, + liveList: [] + }, + currentPage: 1, + rows: 10 + }, + doGetLiveList: function(page) { + var self = this; + app.dialog.loading('正在加载'); + app.restAjax.get(app.restAjax.path('{liveUrl}/app/liveplan/listpageliveplanrelease', [self.data.live.liveUrl]), { + page: page, + rows: self.data.rows + }, null, function(code, data) { + if(data.rows.length == 0) { + app.dialog.msg('暂无数据'); + return; + } + var liveArray; + if(page <= 1) { + liveArray = data.rows; + } else { + liveArray = self.data.live.liveList; + liveArray = liveArray.concat(data.rows); + } + self.setData({ + currentPage: page, + 'live.liveList': liveArray + }) + }, function(code, data) { + app.dialog.msg(data.msg); + }, function() { + wx.stopPullDownRefresh(); + wx.hideLoading(); + }); + }, + goDetail: function (event) { + wx.navigateTo({ + url: '../broadcastDetail/broadcastDetail?livePlanId='+ event.currentTarget.dataset.livePlanId, + }) + }, + /** + * 生命周期函数--监听页面加载 + */ + onLoad: function (options) { + var self = this; + self.doGetLiveList(1); + }, + + /** + * 生命周期函数--监听页面初次渲染完成 + */ + onReady: function () { + + }, + + /** + * 生命周期函数--监听页面显示 + */ + onShow: function () { + + }, + + /** + * 生命周期函数--监听页面隐藏 + */ + onHide: function () { + + }, + + /** + * 生命周期函数--监听页面卸载 + */ + onUnload: function () { + + }, + + /** + * 页面相关事件处理函数--监听用户下拉动作 + */ + onPullDownRefresh: function () { + this.doGetLiveList(1); + }, + + /** + * 页面上拉触底事件的处理函数 + */ + onReachBottom: function () { + this.doGetLiveList(this.data.currentPage + 1); + }, + + /** + * 用户点击右上角分享 + */ + onShareAppMessage: function () { + + } +}) \ No newline at end of file diff --git a/xz_mini/pages/broadcast/broadcast.json b/xz_mini/pages/broadcast/broadcast.json new file mode 100644 index 0000000..09e623a --- /dev/null +++ b/xz_mini/pages/broadcast/broadcast.json @@ -0,0 +1,5 @@ +{ + "usingComponents": {}, + "enablePullDownRefresh": true, + "backgroundTextStyle": "dark" +} \ No newline at end of file diff --git a/xz_mini/pages/broadcast/broadcast.wxml b/xz_mini/pages/broadcast/broadcast.wxml new file mode 100644 index 0000000..681ac73 --- /dev/null +++ b/xz_mini/pages/broadcast/broadcast.wxml @@ -0,0 +1,15 @@ + + + + + 已结束 + 未开始 + 直播中 + 错误 + + + {{item.livePlanName}} + {{item.livePlanStart}}至{{item.livePlanEnd}} + + + \ No newline at end of file diff --git a/xz_mini/pages/broadcast/broadcast.wxss b/xz_mini/pages/broadcast/broadcast.wxss new file mode 100644 index 0000000..09db68d --- /dev/null +++ b/xz_mini/pages/broadcast/broadcast.wxss @@ -0,0 +1,41 @@ +.broadcast{ + padding: 30rpx; +} +.broadcast-box{ + box-shadow:0 0 17rpx 0 rgba(0,0,0,0.1); + border-radius:10rpx; + overflow: hidden; + margin-bottom: 20rpx; +} +.broadcast-img, .broadcast-img image{ + width: 100%; + height: 310rpx; +} +.broadcast-img{ + position: relative; +} +.broadcast-info{ + padding: 20rpx; +} +.name{ + font-size: 32rpx; + color: #242424; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; +} +.time{ + color: #242424; + font-size: 28rpx; + margin-top: 10rpx; +} +.broadcast-status{ + position: absolute; + top: 15rpx; + right: 15rpx; + padding: 5rpx 10rpx; + background: #9F1512; + color: #fff; + font-size: 28rpx; + border-radius: 10rpx; +} \ No newline at end of file diff --git a/xz_mini/pages/broadcastDetail/broadcastDetail.js b/xz_mini/pages/broadcastDetail/broadcastDetail.js new file mode 100644 index 0000000..7333b17 --- /dev/null +++ b/xz_mini/pages/broadcastDetail/broadcastDetail.js @@ -0,0 +1,111 @@ +var app = getApp(); +function getRandomColor() { + const rgb = [] + for (let i = 0; i < 3; ++i) { + let color = Math.floor(Math.random() * 256).toString(16) + color = color.length === 1 ? '0' + color : color + rgb.push(color) + } + return '#' + rgb.join('') +} + +Page({ + data: { + liveUrl: app.liveUrl, + liveDetail: {}, + videoContext: null, + }, + + onShareAppMessage() { + return { + title: 'video', + path: 'page/component/pages/video/video' + } + }, + + onReady() { + // this.videoContext = wx.createVideoContext('myVideo') + + }, + getLivePlan(livePlanId) { + var self = this; + app.restAjax.get(app.restAjax.path('{liveUrl}/app/liveplan/getliveplanbyidrelease/{livePlanId}', [self.data.liveUrl, livePlanId]), {}, null, function (code, data) { + self.setData({ + liveDetail: data + }); + self.videoContext = wx.createLivePlayerContext('liveVideo'); + self.videoContext.play(); + }, function (code, data) { + app.dialog.msg(data.msg); + }); + }, + goLiveRecord(event) { + wx.navigateTo({ + url: '../broadcastList/broadcastList?livePlanId=' + event.currentTarget.dataset.livePlanId, + }) + }, + onLoad(option) { + this.getLivePlan(option.livePlanId); + this.saveBigdata(option.livePlanId) + }, + saveBigdata(id) { + var params = "小程序" + id + "直播"; + var info = { + requestUrl: params + } + app.restAjax.get(app.restAjax.path(app.bigDataUrl + '/app/contentcensusrelease/log', []), info, null, + function (code, data) { + + }, function (code, err) { + + }) + }, + onHide() { + + }, + + inputValue: '', + + + bindInputBlur(e) { + this.inputValue = e.detail.value + }, + + bindButtonTap() { + const that = this + wx.chooseVideo({ + sourceType: ['album', 'camera'], + maxDuration: 60, + camera: ['front', 'back'], + success(res) { + that.setData({ + src: res.tempFilePath + }) + } + }) + }, + + bindVideoEnterPictureInPicture() { + console.log('进入小窗模式') + }, + + bindVideoLeavePictureInPicture() { + console.log('退出小窗模式') + }, + + bindPlayVideo() { + console.log('1') + this.videoContext.play() + }, + bindSendDanmu() { + this.videoContext.sendDanmu({ + text: this.inputValue, + color: getRandomColor() + }) + }, + + videoErrorCallback(e) { + console.log('视频错误信息:') + console.log(e.detail.errMsg) + } +}) \ No newline at end of file diff --git a/xz_mini/pages/broadcastDetail/broadcastDetail.json b/xz_mini/pages/broadcastDetail/broadcastDetail.json new file mode 100644 index 0000000..8835af0 --- /dev/null +++ b/xz_mini/pages/broadcastDetail/broadcastDetail.json @@ -0,0 +1,3 @@ +{ + "usingComponents": {} +} \ No newline at end of file diff --git a/xz_mini/pages/broadcastDetail/broadcastDetail.wxml b/xz_mini/pages/broadcastDetail/broadcastDetail.wxml new file mode 100644 index 0000000..2542eb8 --- /dev/null +++ b/xz_mini/pages/broadcastDetail/broadcastDetail.wxml @@ -0,0 +1,24 @@ + + + + + + + +{{liveDetail.livePlanName}} + + + + 开始时间: + {{liveDetail.livePlanStart}} + + + + 结束时间: + {{liveDetail.livePlanEnd}} + + + + 介绍 + {{liveDetail.livePlanRecord}} + \ No newline at end of file diff --git a/xz_mini/pages/broadcastDetail/broadcastDetail.wxss b/xz_mini/pages/broadcastDetail/broadcastDetail.wxss new file mode 100644 index 0000000..ae4cf40 --- /dev/null +++ b/xz_mini/pages/broadcastDetail/broadcastDetail.wxss @@ -0,0 +1,71 @@ +.broadcast{ + width: 100%; + height: 400rpx; + background: #D8D8D8; +} +video{ + width: 100%; + height: 400rpx; +} +.broadcast-title{ + padding: 30rpx; + font-size: 34rpx; + color: #242424; + border-bottom: 5px solid #FBFBFB; +} +.time{ + margin-bottom: 10rpx; +} +.broadcast-time{ + padding: 30rpx 30rpx 20rpx; + border-bottom: 5px solid #FBFBFB; + font-size: 30rpx; + color: #242424; +} +.broadcast-time image{ + width: 40rpx; + height: 40rpx; + vertical-align: middle; +} +.broadcast-intro{ + padding: 30rpx; +} +.broadcast-intro-title{ + padding-left: 15rpx; + border-left: 5px solid #9F1512; + font-size: 32rpx; + color: #242424; +} +.intro-text{ + font-size: 30rpx; + color: #5F5F5F; + line-height: 40rpx; + margin-top: 15rpx; +} +.play-button-box { + width: 200rpx; + height: 200rpx; + position: fixed; + z-index: 100; + top: 100rpx; + left: 50%; + margin-left: -100rpx; + background-color: rgba(0, 0, 0, 0.5); + border: 1rpx dotted rgba(255, 255, 255, 0.8); + border-radius: 100rpx; +} +.play-button-box .play-button { + border-top-width: 60rpx; + border-bottom-width: 60rpx; + border-left-width: 100rpx; + border-style: solid; + border-top-color: transparent; + border-left-color: red; + border-bottom-color: transparent; + border-right-color: transparent; + width: 0; + height: 0; + position: absolute; + top: 40rpx; + left: 60rpx; +} diff --git a/xz_mini/pages/broadcastList/broadcastList.js b/xz_mini/pages/broadcastList/broadcastList.js new file mode 100644 index 0000000..75190f2 --- /dev/null +++ b/xz_mini/pages/broadcastList/broadcastList.js @@ -0,0 +1,112 @@ +// pages/broadcastList/broadcastList.js +var app = getApp(); +Page({ + + /** + * 页面的初始数据 + */ + data: { + liveRecordContentUrl: app.newsContentUrl, + liveUrl: app.liveUrl, + liveRecordUrl: app.liveRecordUrl, + livePlanId: null, + page: 1, + rows: 20, + liveRecordList: [], + videoPath: '' + }, + getLivePlanRecordList: function () { + var self = this + app.restAjax.get(app.restAjax.path('{liveUrl}/app/liverecord/listpageliverecordrelease/' + self.data.livePlanId, [app.liveUrl]), { + page: self.data.page, + rows: self.data.rows + }, null, + function (code, data) { + if (data.rows.length > 0) { + self.setData({ + liveRecordList: data.rows + }) + } else { + wx.showToast({ + title: '暂无更多', + icon: "none", + duration: 1500 + }) + } + if (self.data.page == 1) { + self.setData({ + videoPath: data.rows[0].recordFilePath + }) + } + } + ) + }, + playVideo: function (e) { + this.setData({ + videoPath: e.currentTarget.dataset.url + }) + }, + /** + * 生命周期函数--监听页面加载 + */ + onLoad: function (options) { + this.setData({ + livePlanId: options.livePlanId + }) + this.getLivePlanRecordList(); + }, + /** + * 生命周期函数--监听页面初次渲染完成 + */ + onReady: function () { + + }, + + /** + * 生命周期函数--监听页面显示 + */ + onShow: function () { + + }, + + /** + * 生命周期函数--监听页面隐藏 + */ + onHide: function () { + + }, + + /** + * 生命周期函数--监听页面卸载 + */ + onUnload: function () { + + }, + + /** + * 页面相关事件处理函数--监听用户下拉动作 + */ + onPullDownRefresh: function () { + this.setData({ + page: this.data.page + 1 + }) + this.getLivePlanRecordList() + }, + + /** + * 页面上拉触底事件的处理函数 + */ + onReachBottom: function () { + this.setData({ + page: this.data.page + 1 + }) + this.getLivePlanRecordList() + }, + + /** + * 用户点击右上角分享 + */ + onShareAppMessage: function () { + + } +}) \ No newline at end of file diff --git a/xz_mini/pages/broadcastList/broadcastList.json b/xz_mini/pages/broadcastList/broadcastList.json new file mode 100644 index 0000000..09e623a --- /dev/null +++ b/xz_mini/pages/broadcastList/broadcastList.json @@ -0,0 +1,5 @@ +{ + "usingComponents": {}, + "enablePullDownRefresh": true, + "backgroundTextStyle": "dark" +} \ No newline at end of file diff --git a/xz_mini/pages/broadcastList/broadcastList.wxml b/xz_mini/pages/broadcastList/broadcastList.wxml new file mode 100644 index 0000000..6cc484a --- /dev/null +++ b/xz_mini/pages/broadcastList/broadcastList.wxml @@ -0,0 +1,7 @@ + + \ No newline at end of file diff --git a/xz_mini/pages/broadcastList/broadcastList.wxss b/xz_mini/pages/broadcastList/broadcastList.wxss new file mode 100644 index 0000000..eceebcd --- /dev/null +++ b/xz_mini/pages/broadcastList/broadcastList.wxss @@ -0,0 +1,25 @@ +.video{ + position: fixed; + top: 0; + left: 0; + right: 0; + width: 100%; + height: 475rpx; +} +.video video{ + width: 100%; + height: 100%; +} +.select-list{ + margin-top: 475rpx; + padding: 0 15rpx; +} +.select-video{ + border-bottom: 1px solid #DEDEDE; + line-height: 80rpx; + font-size: 32rpx; + color: #000; +} +.select-video.active{ + color: #9F1512; +} \ No newline at end of file diff --git a/xz_mini/pages/center/center.js b/xz_mini/pages/center/center.js new file mode 100644 index 0000000..a7b4005 --- /dev/null +++ b/xz_mini/pages/center/center.js @@ -0,0 +1,356 @@ +// pages/center/center.js +var app = getApp() +Page({ + + /** + * 页面的初始数据 + */ + data: { + randomName: true, + showPhone: true, + gotCode: false, + restTime: 120, + timer: '', + userAvatar: '', + token: '', + userInfo: {}, + usercenterUrl: app.usercenterUrl, + sourcePath: '/route/file/download/true/', + phone: '', + code: '', + isLoading: false + }, + // 选择头像来源 + changeAvatar: function () { + var self = this + wx.showActionSheet({ + itemList: ['从相册中选择', '拍照'], + success: function (res) { + if (!res.cancel) { + if (res.tapIndex == 0) { + self.chooseAvatar('album') + } else { + self.chooseAvatar('camera') + } + } + } + }) + }, + // 选择图片 + chooseAvatar: function (type) { + var self = this + wx.chooseImage({ + count: 1, + sizeType: ['original', 'compressed'], + sourceType: [type], + success: function (res) { + var avatar = res.tempFilePaths[0]; + app.restAjax.file(app.restAjax.path('{usercenterUrl}/app/file/uploadimage', [app.usercenterUrl]), avatar, 'image', { + headers: { + token: self.data.token + } + }, function (code, data) { + var id = JSON.parse(data).data + self.uploadAvatar(id) + }, function (code, data) { + console.log(data) + }) + self.setData({ + userAvatar: avatar + }) + } + }) + }, + // 上传 + uploadAvatar: function (avatarId) { + var self = this + app.restAjax.put(app.restAjax.path('{usercenterUrl}/app/user/update-avatar', [app.usercenterUrl]), { + avatar: avatarId + }, { + headers: { + token: self.data.token + } + }, function (code, data) { + wx.setStorageSync('token', data.data); + self.getUserInfo() + }, function (code, data) { + console.log(data) + }) + }, + // 获取token + getToken: function () { + var self = this + wx.getStorage({ + key: 'token', + success: function (res) { + self.setData({ + token: res.data + }) + self.getUserInfo() + }, + }) + }, + //收货地址 + toAddressManage() { + wx.navigateTo({ + url: '/subpages/goodsaddress/goodsaddress', + }) + }, + //我的订单 + toShopOrder() { + wx.navigateTo({ + url: '/subpages/goodsorder/goodsorder', + }) + }, + //购物车 + toShopCar() { + wx.navigateTo({ + url: '/subpages/goodscar/goodscar', + }) + }, + /** + * 跳转到我的活动 + */ + toMyJoinActivity() { + wx.navigateTo({ + url: '/pages/myActivity/myActivity', + }) + }, + /** + * 跳转到我的预订列表 + */ + toMyOrder: function () { + wx.navigateTo({ + url: '../order/order', + }) + }, + /** + * 跳转到我的志愿团队页面 + */ + toMyTeam: function () { + wx.navigateTo({ + url: '../myVolunteerTeam/myVolunteerTeam', + }) + }, + /** + * 跳转到我的志愿活动页面 + */ + toMyVolunteerActivity: function () { + wx.navigateTo({ + url: '../myVolunteerActivity/myVolunteerActivity', + }) + }, + /** + * 跳转到我发布的朋友圈页面 + */ + toMyFirend: function () { + wx.navigateTo({ + url: '../myFriendCircle/myFriendCircle', + }) + }, + /** + * 跳转到我预定的场馆页面 + */ + toMyOrder: function () { + wx.navigateTo({ + url: '../order/order', + }) + }, + // 获取输入的手机号 + phoneNum: function (res) { + this.setData({ + phone: res.detail.value + }) + }, + // 校验手机号 + testPhone: function () { + var self = this + if (self.data.phone) { + if (!/^1(3|4|5|6|7|8|9)\d{9}$/.test(self.data.phone)) { + wx.showToast({ + title: '请输入正确的手机号', + icon: 'none', + duration: 1500 + }) + } else { + self.getCode() + } + } else { + wx.showToast({ + title: '手机号不能为空', + icon: 'none', + duration: 1500 + }) + } + }, + // 提交绑定手机 + submitPhone: function () { + var self = this; + self.setData({ + isConfirm: true + }) + app.restAjax.put(app.restAjax.path('{usercenterUrl}/app/user/updateminiappdefaultusername', [app.usercenterUrl]), { + phone: self.data.phone + }, { + headers: { + token: self.data.token + } + }, function (code, data) { + wx.setStorageSync('token', data.data); + wx.setStorageSync('isRandomUsername', 0) + clearInterval(self.data.timer) + self.setData({ + showPhone: false + }) + wx.showTabBar(); + self.getUserInfo() + }, function (code, data) { + app.dialog.msg(data.msg); + self.setData({ + isConfirm: false + }) + }) + }, + // // 验证码 + // inputCode: function (e) { + // this.setData({ + // code: e.detail.value + // }) + // }, + getPhoneNumber: function (e) { + var self = this + self.setData({ + isLoading: true + }) + console.log(e) + if (e.detail.errMsg == 'getPhoneNumber:ok') { + var info = { + encryptedData: e.detail.encryptedData, + iv: e.detail.iv + } + // app.dialog.loading('正在加载'); + app.restAjax.put(app.restAjax.path('{usercenterUrl}/app/miniapp/update-phone', [app.usercenterUrl]), info, { + headers: { + token: self.data.token + } + }, function (code, data) { + // wx.hideLoading(); + self.setData({ + isLoading: false + }) + wx.setStorageSync('token', data.data); + wx.setStorageSync('isRandomUsername', '0'); + self.setData({ + randomName: false, + token: data.data + }) + self.getUserInfo() + app.dialog.msg('绑定成功'); + },function(code,error){ + self.setData({ + isLoading: false + }) + app.dialog.msg(error.msg) + }) + } else { + self.setData({ + isLoading: false + }) + } + }, + // 判断用户是否为随机名称 + isRandomName: function () { + var self = this + wx.getStorage({ + key: 'isRandomUsername', + success: function (res) { + if (res.data == 1) { + self.setData({ + randomName: true + }) + } else { + self.setData({ + randomName: false + }) + } + } + }) + }, + // 获取用户信息 + getUserInfo: function () { + var self = this + app.restAjax.get(app.restAjax.path('{usercenterUrl}/app/user/get-app-user', [app.usercenterUrl]), {}, { + headers: { + token: self.data.token + } + }, function (code, data) { + self.setData({ + userInfo: data + }) + }, function (code, data) { + app.dialog.msg(data.msg); + }) + }, + cancelPhone: function () { + this.setData({ + showPhone: false + }) + wx.showTabBar() + }, + /** + * 生命周期函数--监听页面加载 + */ + onLoad: function (options) { + this.isRandomName(); + this.getToken(); + }, + + /** + * 生命周期函数--监听页面初次渲染完成 + */ + onReady: function () { + + }, + + /** + * 生命周期函数--监听页面显示 + */ + onShow: function () { + + }, + + /** + * 生命周期函数--监听页面隐藏 + */ + onHide: function () { + + }, + + /** + * 生命周期函数--监听页面卸载 + */ + onUnload: function () { + + }, + + /** + * 页面相关事件处理函数--监听用户下拉动作 + */ + onPullDownRefresh: function () { + + }, + + /** + * 页面上拉触底事件的处理函数 + */ + onReachBottom: function () { + + }, + + /** + * 用户点击右上角分享 + */ + onShareAppMessage: function () { + + } +}) \ No newline at end of file diff --git a/xz_mini/pages/center/center.json b/xz_mini/pages/center/center.json new file mode 100644 index 0000000..8835af0 --- /dev/null +++ b/xz_mini/pages/center/center.json @@ -0,0 +1,3 @@ +{ + "usingComponents": {} +} \ No newline at end of file diff --git a/xz_mini/pages/center/center.wxml b/xz_mini/pages/center/center.wxml new file mode 100644 index 0000000..3dc4711 --- /dev/null +++ b/xz_mini/pages/center/center.wxml @@ -0,0 +1,82 @@ + + + + + + + + + {{userInfo.name}} + + 绑定手机号后,账号信息即可与APP共享 + + + 常用功能 + + + + 我的预订 + + + + + 我的活动 + + + + + 我的志愿团队 + + + + 我的志愿活动 + + + + 购物车 + + + + 收货地址 + + + + 我的订单 + + + + + + + + + \ No newline at end of file diff --git a/xz_mini/pages/center/center.wxss b/xz_mini/pages/center/center.wxss new file mode 100644 index 0000000..87f9007 --- /dev/null +++ b/xz_mini/pages/center/center.wxss @@ -0,0 +1,167 @@ +.top-img, .top-img image{ + width: 100%; + height: 450rpx +} +.page-container{ + position: absolute; + top: 420rpx; + left: 0; + right: 0; + border-radius:31rpx 31rpx 0px 0px; + background: #fff; +} +.person{ + padding: 50rpx 30rpx 30rpx; + position: relative; + border-bottom: 3px solid #FBFBFB; +} +.user-avatar{ + width: 180rpx; + height: 180rpx; + border-radius: 50%; + overflow: hidden; + border: 2px solid #fff; + position: absolute; + left: 50%; + margin-left: -90rpx; + top: -150rpx; +} +.user-avatar image{ + width: 100%; + height: 100%; +} +.user-name{ + font-size: 32rpx; + text-align: center; + color: #242424; +} +.main{ + padding: 30rpx; +} +.main-title{ + border-left: 3px solid #9F1512; + padding-left: 10rpx; + font-size: 32rpx; + color: #242424; + margin-bottom: 20rpx; +} +.main-container{ + display: flex; + flex-wrap: wrap; +} +.main-box{ + width: 25%; + flex-shrink: 0; + text-align: center; + padding: 0 15rpx; + box-sizing: border-box; + margin-bottom: 15rpx; +} +.main-box image{ + width: 65rpx; + height: 65rpx; +} +.title{ + font-size: 30rpx; + color: #242424; +} +.set-phone{ + position: fixed; + top: 0; + left: 0; + right: 0; + bottom: 0; + background: rgba(0, 0, 0, .6); + z-index: 100; +} +.set-phone-box{ + width: 96%; + position: absolute; + top: 50%; + left: 50%; + transform: translate(-50%, -50%); + background: #fff; + border-radius: 10rpx; + padding: 30rpx; + box-sizing: border-box; +} +.tips{ + font-size: 28rpx; + color: #000; +} +.phone-input{ + margin: 25rpx 0; +} +.code-input{ + display: flex; + justify-content: space-between; + margin-bottom: 25rpx; +} +.code-input input{ + width: 70%; + height: 55rpx; + border: 1px solid #dedede; + border-radius: 10rpx; + padding: 0 10rpx; + box-sizing: border-box; + font-size: 28rpx; +} +.phone-input input{ + width: 100%; + height: 55rpx; + border: 1px solid #dedede; + border-radius: 10rpx; + padding: 0 10rpx; + box-sizing: border-box; + font-size: 28rpx; +} +.get-code, .got-code{ + font-size: 28rpx; + background: rgba(159,21,18,.1); + color: #9F1512; + width: 28%; + line-height: 55rpx; + text-align: center; + border-radius: 10rpx; +} +.got-code{ + background: #fff; + color: #4a4d52; + border: 1px solid #eaeaea; +} +.set-phone-btn-box{ + display: flex; + justify-content: space-between; +} +.set-phone-btn{ + width: 49%; + height: 65rpx; + display: flex; + align-items: center; + justify-content: center; + font-size: 28rpx; + color: #fff; + background: #9F1512; + border-radius: 10rpx; +} +.tips{ + font-size: 30rpx; + text-align: center; + margin-top: 15rpx; +} +.loading{ + position: fixed; + top: 0; + right: 0; + left: 0; + bottom: 0; + background: rgba(0, 0, 0, .2); +} +.loading image{ + position: absolute; + top: 50%; + left: 50%; + transform: translate(-50%,-50%); + width: 150rpx; + height: 150rpx; +} \ No newline at end of file diff --git a/xz_mini/pages/commonQrCode/commonQrCode.js b/xz_mini/pages/commonQrCode/commonQrCode.js new file mode 100644 index 0000000..bebae40 --- /dev/null +++ b/xz_mini/pages/commonQrCode/commonQrCode.js @@ -0,0 +1,98 @@ +// subpages/commonQrCode.js +const app = getApp(); +var socket = null; +Page({ + + /** + * 页面的初始数据 + */ + data: { + title: '日喀则市公共数字文化云', + desc: '开展新闻资讯、场馆导航、场馆预定、活动预约、艺术普及、在线培训、电子图书、文化点单、直播活动等。', + hint: '扫描或长按识别上面二维码进行关注公众号', + imgSrc: '', + userId: '', + urls: app.wssUrl, + userName: '码', + hideloading: false, + }, + onLoad(options) { + console.log(options) + wx.setNavigationBarTitle({ + title: '公众号关注', + }); + wx.setNavigationBarColor({ + backgroundColor: '#ededed', + frontColor: '#000000', + }) + var userId = ""; + if (options && JSON.stringify(options) !== '{}') { + var keys = Object.keys(options) + var values = keys[0].split("="); + userId = values[1]; + this.setData({ + userId: userId + }) + } else { + userId = app.globalData.userInfo.userId; + this.setData({ + userId: userId + }) + this.startWebSocket(); + } + this.getCodeImg(userId); + }, + startWebSocket() { + var _self = this; + socket = wx.connectSocket({ + url: _self.data.urls + '/app/wxeventrelease/' + _self.data.userId, + success(res) { + console.log(res) + } + }); + socket.onMessage(function (e) { + console.log(e) + if (e.data) { + var data = JSON.parse(e.data); + _self.prePage(data.attention) + } + }); + }, + prePage(e) { + console.log(e) + app.globalData.isPublic = e + var pages = getCurrentPages(); + var prePage = pages[pages.length - 2] + prePage.setData({ + isPublic: e + }); + wx.navigateBack() + }, + onUnload() { + if (socket != null) { + socket.close({ + code: 1000 + }); + } + }, + getCodeImg(id) { + var _self = this; + app.restAjax.get(app.restAjax.path('{usercenterUrl}/app/wxopen/qrcoderelease/{userId}', [app.usercenterUrl, id]), {}, { + + }, function (code, data) { + _self.setData({ + imgSrc: data, + hideloading: true + }) + + }, function (code, data) { + _self.setData({ + hideloading: true + }) + app.dialog.msg(data.msg); + }) + }, + onShow() { + + }, +}) \ No newline at end of file diff --git a/xz_mini/pages/commonQrCode/commonQrCode.json b/xz_mini/pages/commonQrCode/commonQrCode.json new file mode 100644 index 0000000..3928faa --- /dev/null +++ b/xz_mini/pages/commonQrCode/commonQrCode.json @@ -0,0 +1,3 @@ +{ + "usingComponents": {} +} \ No newline at end of file diff --git a/xz_mini/pages/commonQrCode/commonQrCode.wxml b/xz_mini/pages/commonQrCode/commonQrCode.wxml new file mode 100644 index 0000000..00f171b --- /dev/null +++ b/xz_mini/pages/commonQrCode/commonQrCode.wxml @@ -0,0 +1,15 @@ + + + + + + {{title}} + {{desc}} + + + + {{hint}} + + + + \ No newline at end of file diff --git a/xz_mini/pages/commonQrCode/commonQrCode.wxss b/xz_mini/pages/commonQrCode/commonQrCode.wxss new file mode 100644 index 0000000..eae47db --- /dev/null +++ b/xz_mini/pages/commonQrCode/commonQrCode.wxss @@ -0,0 +1,80 @@ +/* subpages/commonQrCode.wxss */ +page { + width: 100%; + height: 100%; + background-color: #ededed; +} + +.page { + width: 100%; + height: 100%; + display: flex; + flex-direction: column; + align-items: center; + /* justify-content: center; */ +} + +.box { + display: flex; + flex-direction: column; + justify-content: center; + align-items: center; + margin-top: 200rpx; + width: 80%; + background-color: white; + border-radius: 20rpx; + height: auto; + padding: 20rpx; + box-shadow: 3rpx 3rpx 30rpx #e7e7e7; +} + +.title-box { + width: 100%; + display: flex; + flex-direction: row; + justify-content: flex-start; + align-items: center; +} + +.title-icon { + width: 120rpx; + height: 120rpx; +} + +.title-content { + display: flex; + flex-direction: column; + justify-content: center; + align-items: flex-start; + width: 75%; + margin-left: 20rpx; +} + +.title-txt { + font-size: 35rpx; + color: black; + font-weight: bold; +} + +.title-des { + font-size: 20rpx; + color: #6b6b6b; + display: -webkit-box; + -webkit-box-orient: vertical; + -webkit-line-clamp: 2; + overflow: hidden; + margin-top: 10rpx; +} + +.img { + margin-top: 20rpx; + width: 500rpx; + height: 500rpx; +} + +.hint { + margin-top: 20rpx; + font-size: 24rpx; + color: #858585; + margin-bottom: 20rpx; +} \ No newline at end of file diff --git a/xz_mini/pages/cultureDetail/cultureDetail.js b/xz_mini/pages/cultureDetail/cultureDetail.js new file mode 100644 index 0000000..93b3fca --- /dev/null +++ b/xz_mini/pages/cultureDetail/cultureDetail.js @@ -0,0 +1,137 @@ +// pages/cultureDetail/cultureDetail.js +var app = getApp(); +Page({ + + /** + * 页面的初始数据 + */ + data: { + libraryUrl: app.libraryUrl, + swiper: { + imgUrl: [], + indicatorDots: false, + autoplay: true, + current: 0 + }, + library: null, + libraryPersonList: [] + }, + prevImg: function () { + var swiper = this.data.swiper; + var current = swiper.current; + swiper.current = current > 0 ? current - 1 : swiper.imgUrl.length - 1; + this.setData({ + swiper: swiper, + }) + }, + nextImg: function () { + var swiper = this.data.swiper; + var current = swiper.current; + swiper.current = current < (swiper.imgUrl.length - 1) ? current + 1 : 0; + this.setData({ + swiper: swiper, + }) + }, + doGetLibrary: function (libraryId) { + var self = this; + app.dialog.loading('正在加载'); + app.restAjax.get(app.restAjax.path('{libraryUrl}/app/intangiblelibrary/getintangiblelibrarybyidrelease/{libraryId}', [self.data.libraryUrl, libraryId]), {}, null, function (code, data) { + var covers = data.libraryCover.split(','); + var imageArray = []; + for (var i = 0, item; item = covers[i++];) { + imageArray.push(app.restAjax.path('{libraryUrl}/route/file/download/true/{cover}', [self.data.libraryUrl, item])); + } + self.setData({ + library: data, + 'swiper.imgUrl': imageArray + }); + }, function (code, data) { + app.dialog.msg(data.msg); + }, function () { + wx.stopPullDownRefresh(); + wx.hideLoading(); + }) + }, + doGetLibraryPerson: function (libraryId) { + var self = this; + app.restAjax.get(app.restAjax.path('{libraryUrl}/app/intangiblelibraryperson/listintangiblelibrarypersonrelease', [self.data.libraryUrl]), { + intangibleLibraryId: libraryId + }, null, function (code, data) { + self.setData({ + libraryPersonList: data + }) + }, function (code, data) { + app.dialog.msg(data.msg); + }); + }, + /** + * 生命周期函数--监听页面加载 + */ + onLoad: function (options) { + var libraryId = options.libraryId + this.doGetLibrary(libraryId); + this.doGetLibraryPerson(libraryId) + this.saveBigdata(libraryId); + }, + saveBigdata(id) { + var params = "小程序" + id + "非遗"; + var info = { + requestUrl: params + } + app.restAjax.get(app.restAjax.path(app.bigDataUrl + '/app/contentcensusrelease/log', []), info, null, + function (code, data) { + + }, function (code, err) { + + }) + }, + + /** + * 生命周期函数--监听页面初次渲染完成 + */ + onReady: function () { + + }, + + /** + * 生命周期函数--监听页面显示 + */ + onShow: function () { + + }, + + /** + * 生命周期函数--监听页面隐藏 + */ + onHide: function () { + + }, + + /** + * 生命周期函数--监听页面卸载 + */ + onUnload: function () { + + }, + + /** + * 页面相关事件处理函数--监听用户下拉动作 + */ + onPullDownRefresh: function () { + + }, + + /** + * 页面上拉触底事件的处理函数 + */ + onReachBottom: function () { + + }, + + /** + * 用户点击右上角分享 + */ + onShareAppMessage: function () { + + } +}) \ No newline at end of file diff --git a/xz_mini/pages/cultureDetail/cultureDetail.json b/xz_mini/pages/cultureDetail/cultureDetail.json new file mode 100644 index 0000000..8835af0 --- /dev/null +++ b/xz_mini/pages/cultureDetail/cultureDetail.json @@ -0,0 +1,3 @@ +{ + "usingComponents": {} +} \ No newline at end of file diff --git a/xz_mini/pages/cultureDetail/cultureDetail.wxml b/xz_mini/pages/cultureDetail/cultureDetail.wxml new file mode 100644 index 0000000..7d78b71 --- /dev/null +++ b/xz_mini/pages/cultureDetail/cultureDetail.wxml @@ -0,0 +1,97 @@ + + + + + + + + + + + + + + + {{library.libraryTitle}} + + + + 项目编号: + {{library.libraryNumber}} + + + 数据来源: + {{library.librarySource}} + + + + + 公布时间: + {{library.libraryOpenDateValue}} + + + 非遗级别: + {{library.libraryLevel}}级 + + + + + 所属地区: + {{library.libraryArea}} + + + 类  型: + {{library.libraryTypeValue}} + + + + + 申报地区或单位: + {{library.libraryAddress}} + + + + + 保护单位: + {{library.libraryAuthor}} + + + + + 相关描述 + + + + + + 相关传承人 + + + + 编  号: + {{item.libraryPersonNumber}} + + + 姓  名: + {{item.libraryPersonName}} + + + + + 性  别: + {{item.libraryPersonSex == 1 ? '男' : '女'}} + + + 出生日期: + {{item.libraryPersonBirthday }} + + + + + 民  族: + {{item.libraryPersonNationDictionaryName}} + + + + + diff --git a/xz_mini/pages/cultureDetail/cultureDetail.wxss b/xz_mini/pages/cultureDetail/cultureDetail.wxss new file mode 100644 index 0000000..2a00192 --- /dev/null +++ b/xz_mini/pages/cultureDetail/cultureDetail.wxss @@ -0,0 +1,116 @@ +.culture-swiper, swiper, .swiper-img{ + width: 100%; + height: 500rpx; +} +.culture-swiper{ + position: fixed; +} +.prev{ + width: 60rpx; + height: 100rpx; + position: absolute; + top: 50%; + left: 0rpx; + transform: translate(0, -50%); + background-color: rgba(0, 0, 0, 0.5); + border-top-right-radius: 100rpx; + border-bottom-right-radius: 100rpx; + display: flex; + justify-content: center; + align-items: center; +} +.next image, .prev image{ + width: 30rpx; + height: 30rpx; +} +.next{ + width: 60rpx; + height: 100rpx; + position: absolute; + top: 50%; + right: 0rpx; + transform: translate(0, -50%); + background-color: rgba(0, 0, 0, 0.5); + border-top-left-radius: 100rpx; + border-bottom-left-radius: 100rpx; + display: flex; + justify-content: center; + align-items: center; +} +.culture{ + position: absolute; + top: 450rpx; + left: 0; + right: 0; + border-radius:31rpx 31rpx 0px 0px; + background: #fff; +} +.culture-title{ + padding: 30rpx; + border-bottom: 3px solid #FBFBFB; + font-size: 34rpx; + color: #242424; +} +.culture-info{ + padding: 20rpx 30rpx; + border-bottom: 3px solid #FBFBFB; +} +.row{ + display: flex; +} +.info{ + flex: 1; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; + font-size: 26rpx; + color: #242424; + padding-right: 10rpx; + line-height: 50rpx; +} +.info text{ + color: #BBBBBB; +} +.part{ + padding: 30rpx; + border-bottom: 3px solid #FBFBFB; +} +.part-title{ + font-size: 32rpx; + border-left: 3px solid #9F1512; + padding-left: 10rpx; + margin-bottom: 20rpx; +} +.part-content{ + font-size: 26rpx; + line-height: 40rpx; + color: #5F5F5F; +} +.sign-box{ + position: fixed; + bottom: 0; + left: 0; + right: 0; + box-shadow:0px 0px 17px 0px rgba(0,0,0,0.1); + height: 120rpx; + padding: 20rpx 30rpx; + box-sizing: border-box; + background: #fff; +} +.sign-btn{ + width: 100%; + height: 100%; + background: #9F1512; + border-radius: 10rpx; + display: flex; + justify-content: center; + align-items: center; + font-size: 30rpx; + color: #fff; +} +.library-person { + border-bottom: 1px solid #FBFBFB; +} +.library-person:last-child { + border-bottom: none; +} \ No newline at end of file diff --git a/xz_mini/pages/cultureMap/cultureMap.js b/xz_mini/pages/cultureMap/cultureMap.js new file mode 100644 index 0000000..7fc1d2a --- /dev/null +++ b/xz_mini/pages/cultureMap/cultureMap.js @@ -0,0 +1,59 @@ +// 引用百度地图微信小程序JSAPI模块 +var bmap = require('../../libs/bmap-wx.js'); +var app = getApp(); +Page({ + data: { + markers: [], + latitude: '', + longitude: '', + placeData: {}, + venueUrl: app.venueUrl, + }, + makertap: function(e) { + var that = this; + var id = e.markerId; + }, + onLoad: function() { + var self = this; + // 新建百度地图对象 + var BMap = new bmap.BMapWX({ + ak: 'qLbLh9KupfB8Ir72bkKogyvYi246rkKS' + }); + var fail = function(data) { + app.dialog.msg(data.msg); + }; + var success = function(code,data) { + wx.getLocation({ + altitude: 'false', + type: 'wgs84', + success: function (res) { + self.setData({ + longitude: res.longitude, + latitude: res.latitude + }) + } + }) + var arr = [] + for (var i = 0; i < data.data.length; i++) { + var obj = { + latitude: data.data[i].latitude, + longitude: data.data[i].longitude, + iconPath: '../../images/marker_red.png', + callout:{ + content:data.data[i].venueName + "\r\n地址:" + data.data[i].venuePosition + "\r\n电话:" + data.data[i].venueTelephone, + bgColor:"#fff", + padding:"5px", + borderRadius:"2px", + borderWidth:"1px", + borderColor:"#07c160", + } + } + arr.push(obj) + } + self.setData({ + markers: arr + }); + } + app.restAjax.get(app.restAjax.path('{venueUrl}/app/venuesmap/listrangevenuesinforelease', [self.data.venueUrl]),{},null,success,fail) + } +}) \ No newline at end of file diff --git a/xz_mini/pages/cultureMap/cultureMap.json b/xz_mini/pages/cultureMap/cultureMap.json new file mode 100644 index 0000000..8835af0 --- /dev/null +++ b/xz_mini/pages/cultureMap/cultureMap.json @@ -0,0 +1,3 @@ +{ + "usingComponents": {} +} \ No newline at end of file diff --git a/xz_mini/pages/cultureMap/cultureMap.wxml b/xz_mini/pages/cultureMap/cultureMap.wxml new file mode 100644 index 0000000..df31520 --- /dev/null +++ b/xz_mini/pages/cultureMap/cultureMap.wxml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/xz_mini/pages/cultureMap/cultureMap.wxss b/xz_mini/pages/cultureMap/cultureMap.wxss new file mode 100644 index 0000000..f52424a --- /dev/null +++ b/xz_mini/pages/cultureMap/cultureMap.wxss @@ -0,0 +1,12 @@ +.map_container{ + position: absolute; + top: 0; + left: 0; + right: 0; + bottom: 0; +} + +.map { + height: 100%; + width: 100%; +} \ No newline at end of file diff --git a/xz_mini/pages/friendCircle/friendCircle.js b/xz_mini/pages/friendCircle/friendCircle.js new file mode 100644 index 0000000..77a66c3 --- /dev/null +++ b/xz_mini/pages/friendCircle/friendCircle.js @@ -0,0 +1,121 @@ +// pages/friendCircle/friendCircle.js +var app = getApp(); +Page({ + + /** + * 页面的初始数据 + */ + data: { + usercenterUrl: app.usercenterUrl, + socialUrl: app.socialUrl, + momentsList: [], + currentPage: 1, + rows: 20 + }, + doGetMomentsList: function(page) { + var self = this; + app.dialog.loading('正在加载'); + app.restAjax.get(app.restAjax.path('{socialUrl}/app/moments/listpagemomentsofpublicrelease', [self.data.socialUrl]), { + page: page, + rows: self.data.rows + }, null, function(code, data) { + if(data.rows.length == 0) { + app.dialog.msg('暂无数据'); + return; + } + for(var i = 0, item; item = data.rows[i++];) { + if(item.type === 'photo') { + var photos = item.photos.split(','); + var photoArray = []; + for(var j = 0, jItem; jItem = photos[j++];) { + if(jItem.length != 0) { + photoArray.push(jItem); + } + } + item.photoArray = photoArray; + } + } + var momentsArray; + if(page <= 1) { + momentsArray = data.rows; + } else { + momentsArray = self.data.news.newsList; + momentsArray = momentsArray.concat(data.rows); + } + self.setData({ + currentPage: page, + momentsList: momentsArray + }) + }, function(code, data) { + app.dialog.msg(data.msg); + }, function() { + wx.stopPullDownRefresh(); + wx.hideLoading(); + }); + }, + // newFriendCircle: function () { + // wx.navigateTo({ + // url: '../newFriendCircle/newFriendCircle', + // }) + // }, + toMyFriendCircle: function () { + wx.navigateTo({ + url: '../myFriendCircle/myFriendCircle', + }) + }, + /** + * 生命周期函数--监听页面加载 + */ + onLoad: function (options) { + this.doGetMomentsList(1); + }, + + /** + * 生命周期函数--监听页面初次渲染完成 + */ + onReady: function () { + + }, + + /** + * 生命周期函数--监听页面显示 + */ + onShow: function () { + + }, + + /** + * 生命周期函数--监听页面隐藏 + */ + onHide: function () { + + }, + + /** + * 生命周期函数--监听页面卸载 + */ + onUnload: function () { + + }, + + /** + * 页面相关事件处理函数--监听用户下拉动作 + */ + onPullDownRefresh: function () { + this.doGetMomentsList(1); + }, + + /** + * 页面上拉触底事件的处理函数 + */ + onReachBottom: function () { + this.doGetMomentsList(this.data.currentPage + 1); + }, + + /** + * 用户点击右上角分享 + */ + onShareAppMessage: function () { + + } +}) \ No newline at end of file diff --git a/xz_mini/pages/friendCircle/friendCircle.json b/xz_mini/pages/friendCircle/friendCircle.json new file mode 100644 index 0000000..8275159 --- /dev/null +++ b/xz_mini/pages/friendCircle/friendCircle.json @@ -0,0 +1,6 @@ +{ + "usingComponents": {}, + "enablePullDownRefresh": true, + "backgroundTextStyle": "dark", + "onReachBottomDistance": 50 +} \ No newline at end of file diff --git a/xz_mini/pages/friendCircle/friendCircle.wxml b/xz_mini/pages/friendCircle/friendCircle.wxml new file mode 100644 index 0000000..cafaf5d --- /dev/null +++ b/xz_mini/pages/friendCircle/friendCircle.wxml @@ -0,0 +1,55 @@ + + + + + + + {{item.creatorName}} + {{item.content}} + {{item.gmtCreate}} + + + + + + + + {{item.creatorName}} + {{item.content}} + + + + {{item.gmtCreate}} + + + + + + + + {{item.creatorName}} + {{item.content}} + + + + {{item.gmtCreate}} + + + + + + + + {{item.creatorName}} + {{item.content}} + + + + {{item.gmtCreate}} + + + + \ No newline at end of file diff --git a/xz_mini/pages/friendCircle/friendCircle.wxss b/xz_mini/pages/friendCircle/friendCircle.wxss new file mode 100644 index 0000000..d41c2c7 --- /dev/null +++ b/xz_mini/pages/friendCircle/friendCircle.wxss @@ -0,0 +1,71 @@ +.friend-circle{ + padding: 15rpx 30rpx; + border-bottom: 1px solid #DEDEDE; +} +.friend-circle:last-child { + border-bottom: none; +} +.friend-circle-box{ + display: flex; + justify-content: space-between; + padding-bottom: 10rpx; +} + +.avatar{ + width: 8%; +} +.avatar image{ + width: 100%; + height: 50rpx; + border-radius: 50rpx; +} +.content{ + width: 90%; +} +.name{ + font-size: 30rpx; + color: #949494; +} +.text{ + font-size: 32rpx; + color: #000; + margin: 10rpx 0; +} +.date{ + font-size: 28rpx; + color: #949494; +} +.photo-one image{ + width: 100%; +} +.photo-more image{ + width: 32%; + height: 150rpx; + margin-right: 2%; + margin-bottom: 10rpx; +} +.photo-more image:nth-child(3n){ + margin-right: 0; +} +.video video{ + width: 100%; +} +.new-friend-circle{ + position: fixed; + right: 30rpx; + bottom: 30rpx; +} +.box{ + width: 100rpx; + height: 100rpx; + display: flex; + justify-content: center; + align-items: center; + background: #9F1512; + color: #fff; + font-size: 32rpx; + border-radius: 50%; +} +.new{ + margin-bottom: 10rpx; +} \ No newline at end of file diff --git a/xz_mini/pages/heritage/heritage.js b/xz_mini/pages/heritage/heritage.js new file mode 100644 index 0000000..79f2111 --- /dev/null +++ b/xz_mini/pages/heritage/heritage.js @@ -0,0 +1,121 @@ +// pages/heritage/heritage.js +var app = getApp(); +Page({ + /** + * 页面的初始数据 + */ + data: { + libraryUrl: app.libraryUrl, + libraryList: [], + currentPage: 1, + rows: 20 + }, + goDetail: function (event) { + wx.navigateTo({ + url: '../cultureDetail/cultureDetail?libraryId='+ event.currentTarget.dataset.libraryId, + }) + }, + goLive: function() { + wx.navigateTo({ + url: '../broadcast/broadcast', + }) + }, + goFriendCircle: function() { + wx.navigateTo({ + url: '../friendCircle/friendCircle', + }) + }, + goCultureMap: function () { + wx.navigateTo({ + url: '../cultureMap/cultureMap', + }) + }, + doGetLibraryList: function(page) { + var self = this; + app.dialog.loading('正在加载'); + app.restAjax.get(app.restAjax.path('{libraryUrl}/app/intangiblelibrary/listpageintangiblelibraryrelease/{areaCode}', [self.data.libraryUrl,app.areaCode]), { + page: page, + rows: self.data.rows + }, null, function(code, data) { + for(var i = 0, item; item = data.rows[i++];) { + item.libraryApplyTime = item.libraryApplyTime.substring(0, item.libraryApplyTime.length - 10); + item.libraryCoverArray = item.libraryCover.split(','); + } + var libraryArray; + if(page <= 1) { + libraryArray = data.rows; + } else { + libraryArray = self.data.libraryList; + libraryArray = libraryArray.concat(data.rows); + } + self.setData({ + currentPage: page, + libraryList: libraryArray + }) + if(data.rows.length == 0) { + app.dialog.msg('暂无数据'); + return; + } + }, function(code, data) { + app.dialog.msg(data.msg); + }, function() { + wx.stopPullDownRefresh(); + wx.hideLoading(); + }); + }, + /** + * 生命周期函数--监听页面加载 + */ + onLoad: function (options) { + this.doGetLibraryList(1); + }, + + /** + * 生命周期函数--监听页面初次渲染完成 + */ + onReady: function () { + + }, + + /** + * 生命周期函数--监听页面显示 + */ + onShow: function () { + + }, + + /** + * 生命周期函数--监听页面隐藏 + */ + onHide: function () { + + }, + + /** + * 生命周期函数--监听页面卸载 + */ + onUnload: function () { + + }, + + /** + * 页面相关事件处理函数--监听用户下拉动作 + */ + onPullDownRefresh: function () { + this.doGetLibraryList(1); + }, + + /** + * 页面上拉触底事件的处理函数 + */ + onReachBottom: function () { + this.doGetLibraryList(this.data.currentPage + 1); + }, + + /** + * 用户点击右上角分享 + */ + onShareAppMessage: function () { + + } +}) \ No newline at end of file diff --git a/xz_mini/pages/heritage/heritage.json b/xz_mini/pages/heritage/heritage.json new file mode 100644 index 0000000..8275159 --- /dev/null +++ b/xz_mini/pages/heritage/heritage.json @@ -0,0 +1,6 @@ +{ + "usingComponents": {}, + "enablePullDownRefresh": true, + "backgroundTextStyle": "dark", + "onReachBottomDistance": 50 +} \ No newline at end of file diff --git a/xz_mini/pages/heritage/heritage.wxml b/xz_mini/pages/heritage/heritage.wxml new file mode 100644 index 0000000..78eb64b --- /dev/null +++ b/xz_mini/pages/heritage/heritage.wxml @@ -0,0 +1,33 @@ + + + + 非物质文化遗产数据库 + + + + + + 文化地图 + + + + + + + + + + {{item.libraryTitle}} + + {{item.libraryApplyTime}} + + + \ No newline at end of file diff --git a/xz_mini/pages/heritage/heritage.wxss b/xz_mini/pages/heritage/heritage.wxss new file mode 100644 index 0000000..260d4f1 --- /dev/null +++ b/xz_mini/pages/heritage/heritage.wxss @@ -0,0 +1,87 @@ +.top-select{ + position: fixed; + top: 0; + left: 0; + right: 0; + display: flex; + padding: 30rpx 30rpx 10rpx; + flex-wrap: nowrap; + overflow-x: auto; + background: #fff; + z-index: 100; +} +.select-box{ + flex-shrink: 0; + width: 25%; + padding: 0 10rpx; + box-sizing: border-box; + text-align: center; +} +.select-box image{ + width: 100rpx; + height: 100rpx; +} +.select-title{ + color: #242424; + font-size: 30rpx; + overflow: hidden; + display: -webkit-box; + -webkit-line-clamp: 2; + -webkit-box-orient: vertical; +} +.select-box.active .select-title{ + color: #9F1512; +} +.activity{ + padding: 20rpx 30rpx 0; + margin-top: 200rpx; +} +.activity-box{ + margin-bottom: 20rpx; + box-shadow:0px 0px 17rpx 0px rgba(0,0,0,0.1); + border-radius: 10rpx; + overflow: hidden; +} +.activity-img{ + height: 320rpx; + position: relative; +} +.activity-img image{ + width: 100%; + height: 100%; +} +.corner{ + position: absolute; + top: 20rpx; + right: 20rpx; + display: flex; + color: #fff; +} +.activity-info{ + padding: 10rpx; +} +.title{ + display: flex; + justify-content: space-between; +} +.activity-title{ + width: 100%; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; + font-size: 32rpx; + color: #242424; + line-height: 40rpx; +} +.sign{ + background: rgba(159,21,18,.1); + color: #9F1512; + border-radius: 10rpx; + padding: 0 20rpx; + line-height: 40rpx; +} +.date{ + margin-top: 10rpx; + font-size: 28rpx; + color: #242424; +} \ No newline at end of file diff --git a/xz_mini/pages/index/index.js b/xz_mini/pages/index/index.js new file mode 100644 index 0000000..9005b72 --- /dev/null +++ b/xz_mini/pages/index/index.js @@ -0,0 +1,410 @@ +var app = getApp(); +Page({ + /** + * 页面的初始数据 + */ + data: { + randomName: true, + showPhone: true, + gotCode: false, + restTime: 120, + timer: '', + indicatorDots: true, + autoplay: true, + token: '', + news: { + newsUrl: app.newsUrl, + bannerList: [], + newsList: [] + }, + venue: { + venueUrl: app.venueUrl, + venueList: [] + }, + activity: { + activityUrl: app.activityUrl, + activityList: [] + }, + live: { + liveUrl: app.liveUrl, + liveList: [] + }, + usercenterUrl: app.usercenterUrl, + bigDataUrl: app.bigDataUrl, + isConfirm: false, + mainFuncList: [], + mainNewTab: [], + isHide: true + }, + doLogin: function () { + var self = this; + wx.login({ + success(res) { + if (res.code) { + app.restAjax.post(app.restAjax.path('{url}/wechat-miniapp/sign/default-multi', [app.loginUrl]), { + jsCode: res.code, + appKey: app.appId + }, null, function (code, data) { + console.log(data) + var tokenArray = data.data.split('_'); + var token = tokenArray[0]; + var isRandomUsername = tokenArray[1]; + self.setData({ + token: token + }) + wx.setStorageSync('token', token); + wx.setStorageSync('isRandomUsername', isRandomUsername) + //获取UserID + self.getUserInfo(); + }, function (code, data) { + app.dialog.msg(data.msg); + }); + } else { + console.log(res) + app.dialog.msg('登录失败!' + res.errMsg); + } + } + }) + }, + // getUserInfo(){ + // var _self= this; + // // app/wxopen/qrcoderelease/{userId} + // app.restAjax.get(app.restAjax.path('{newsUrl}/app/user/get-app-user'),[_self.data.news.newsUrl]), + // null, + // null, + // function(code,data){ + // console.log(data) + // }, + // function(code,error){ + // app.dialog.msg(error.msg); + // } + // }, + //获取首页功能 + getMainFunc() { + var _self = this; + app.restAjax.get(app.restAjax.path('{newsUrl}/app/newsdirectories/list/areamenu/release/{areaCode}', [_self.data.news.newsUrl, app.areaCode]), + null, + null, + function (code, data) { + console.log(data) + _self.setData({ + mainFuncList: data + }) + }, + function (code, data) { + app.dialog.msg(data.msg); + }); + }, + //获取首页新闻动态 + getMainNewsTab() { + var _self = this; + app.restAjax.get(app.restAjax.path('{newsUrl}/app/newsdirectories/listsub/areaauth/release/{newsDirectoriesId}/{areaCode}', [_self.data.news.newsUrl, '0', app.areaCode]), + null, + null, + function (code, data) { + if (data && data.length > 0) { + _self.setData({ + mainNewTab: data + }) + data.forEach(el => { + _self.doGetNewsList(el.newsDirectoriesId); + }); + } + }, + function (code, data) { + app.dialog.msg(data.msg); + }); + }, + //获取新闻 + doGetNewsList(id) { + var _self = this; + app.restAjax.get(app.restAjax.path('{newsUrl}/app/newscontent/listpagenewscontentrelease/{areaCode}', [_self.data.news.newsUrl, app.areaCode]), { + newsDirectoriesId: "", + newsDirectoriesParentId: id, + page: 1, + rows: 5 + }, null, function (code, data) { + _self.data.mainNewTab.forEach(el => { + if (el.newsDirectoriesId == id) { + el.newsList = data.rows + } + }); + _self.setData({ + mainNewTab: _self.data.mainNewTab + }) + }, function (code, data) { + console.log(data) + app.dialog.msg(data.msg); + }); + }, + doGetBanner: function () { + var self = this; + app.restAjax.get(app.restAjax.path('{newsUrl}/app/newscontent/listpagenewscontentrelease/{areaCode}', [self.data.news.newsUrl, app.areaCode]), { + newsDirectoriesId: 'eab0ca3c-d35d-4c02-9397-ace2bdd10fc1', + page: 1, + rows: 5 + }, null, function (code, data) { + self.setData({ + 'news.bannerList': data.rows + }) + }, function (code, data) { + app.dialog.msg(data.msg); + }); + }, + doGetVenueList: function () { + var self = this; + app.restAjax.get(app.restAjax.path('{venueUrl}/app/venuesinfo/listpagevenuesinforelease/{areaCode}', [self.data.venue.venueUrl, app.areaCode]), { + page: 1, + rows: 3, + latitude: app.globalData.curLat, + longitude: app.globalData.curLng, + orderKey: "", + }, null, function (code, data) { + for (var i = 0, item; item = data.rows[i++];) { + item.venuePanoramaArray = item.venuePanorama.split(','); + } + self.setData({ + 'venue.venueList': data.rows + }); + }, function (code, data) { + app.dialog.msg(data.msg); + }); + }, + //加载活动图片错误 + loadImgErr(e) { + console.log(e) + var index = e.currentTarget.dataset.index + this.data.activity.activityList[index].activityImageArray.unshift("03c2ea0d-87ad-43db-bba0-ae6b4f827dba") + this.setData({ + activity: this.data.activity + }) + }, + //加载轮播图错误 + loadBannerErr(e) { + var index = e.currentTarget.dataset.index + this.data.news.bannerList[index].newsContentCoverList.unshift('03c2ea0d-87ad-43db-bba0-ae6b4f827dba') + this.setData({ + news: this.data.news + }) + }, + doGetActivityList: function () { + var self = this; + app.restAjax.get(app.restAjax.path('{activityUrl}/app/activitylibrary/listpageactivitylibraryfornetrelease/{areaCode}', [self.data.activity.activityUrl, app.areaCode]), { + page: 1, + rows: 3 + }, null, function (code, data) { + console.log(data); + for (var i = 0, item; item = data.rows[i++];) { + item.activityImageArray = item.activityImage.split(','); + } + self.setData({ + 'activity.activityList': data.rows + }); + }, function (code, data) { + app.dialog.msg(data.msg); + }); + }, + // doGetNewsList: function () { + // var self = this; + // app.restAjax.get(app.restAjax.path('{newsUrl}/app/newscontent/listpagenewscontentrelease', [self.data.news.newsUrl]), { + // newsDirectoriesParentId: 'f497904b-7727-4832-891c-604c36ae4167', + // page: 1, + // rows: 5 + // }, null, function (code, data) { + // self.setData({ + // 'news.newsList': data.rows + // }) + // }, function (code, data) { + // app.dialog.msg(data.msg); + // }); + // }, + doGetLiveList: function () { + var self = this; + app.restAjax.get(app.restAjax.path('{liveUrl}/app/liveplan/listpageliveplanrelease', [self.data.live.liveUrl]), { + page: 1, + rows: 4 + }, null, function (code, data) { + self.setData({ + 'live.liveList': data.rows + }) + }, function (code, data) { + app.dialog.msg(data.msg); + }); + }, + + goNewsDetail: function (event) { + wx.navigateTo({ + url: '../newsDetail/newsDetail?id=' + event.currentTarget.dataset.item.newsContentId + }) + }, + openNewsDetail(e) { + console.log(e.currentTarget.dataset.item) + //判断是跳转到列表 详情 webview + var item = e.currentTarget.dataset.item; + if (item.directoriesView == '0') { + //跳转webview + wx.navigateTo({ + url: '/subpages/webcontentview/webcontent?url=' + item.directoriesTarget2, + }) + } else if (item.directoriesView == '1') { + //跳转列表 + wx.navigateTo({ + url: '/pages/newsList/newsList?id=' + item.newsDirectoriesId, + }) + } else { + //跳转无二级页面 + wx.navigateTo({ + url: '/pages/newsList/newsList?id=' + item.newsDirectoriesId, + }) + } + }, + goNewsList: function (event) { + wx.navigateTo({ + url: '../newsList/newsList?type=' + event.currentTarget.dataset.type, + }) + }, + goVolunteer: function () { + wx.navigateTo({ + url: '../volunteer/volunteer', + }) + }, + goBroadcast: function () { + wx.navigateTo({ + url: '../broadcast/broadcast', + }) + }, + goVenue: function () { + wx.switchTab({ + url: '../venue/venue', + }) + }, + goVenueDetail: function (event) { + wx.navigateTo({ + url: '../venueDetail/venueDetail?venuesInfoId=' + event.currentTarget.dataset.venuesInfoId, + }) + }, + goBroadcastDetail: function (event) { + wx.navigateTo({ + url: '../broadcastDetail/broadcastDetail?livePlanId=' + event.currentTarget.dataset.livePlanId, + }) + }, + goActivity: function () { + wx.switchTab({ + url: '../activity/activity', + }) + }, + goActivityDetail: function (event) { + wx.navigateTo({ + url: '../activityDetail/activityDetail?id=' + event.currentTarget.dataset.activityLibraryId + }) + }, + goHeritage: function () { + wx.navigateTo({ + url: '/pages/heritage/heritage', + }) + }, + goCultureDetail: function (event) { + wx.navigateTo({ + url: '../cultureDetail/cultureDetail?libraryId=' + event.currentTarget.dataset.libraryId, + }) + }, + // 获取用户信息 + getUserInfo: function () { + var self = this + app.restAjax.get(app.restAjax.path('{usercenterUrl}/app/user/get-app-user', [app.usercenterUrl]), {}, { + headers: { + token: self.data.token + } + }, function (code, data) { + console.log(data); + app.globalData.userInfo = data; + self.setData({ + userInfo: data + }); + self.doSaveLoginInfo(data.userId); + self.getIsPublic(); + }, function (code, data) { + app.dialog.msg(data.msg); + }) + }, + //是否关注公众号 + getIsPublic() { + var _self = this; + app.restAjax.get(app.restAjax.path('{usercenterUrl}/app/wxopen/attentionrelease/{userId}', [app.usercenterUrl, _self.data.userInfo.userId]), {}, { + }, function (code, data) { + app.globalData.isPublic = data + }, function (code, data) { + app.dialog.msg(data.msg) + }) + }, + doSaveLoginInfo(id) { + var params = "小程序USER" + id; + var info = { + requestUrl: params + } + app.restAjax.get(app.restAjax.path('{usercenterUrl}/app/contentcensusrelease/log', [app.bigDataUrl]), info, { + + }, function (code, data) { + + }, function (code, data) { + }) + }, + goTrain: function () { + wx.navigateTo({ + url: '../train/train', + }) + }, + goTravel: function () { + wx.navigateTo({ + url: '../travel/travel', + }) + }, + goResource: function () { + wx.navigateTo({ + url: '../resource/resource', + }) + }, + /** + * 生命周期函数--监听页面加载 + */ + onLoad: function (options) { + var self = this; + wx.getLocation({ + type: 'gcj02', + success(res) { + // const latitude = res.latitude + // const longitude = res.longitude + // const speed = res.speed + // const accuracy = res.accuracy + app.globalData.curLng = res.longitude + app.globalData.curLat = res.latitude + } + }) + self.doLogin(); + self.doGetBanner(); + self.doGetLiveList(); + self.doGetVenueList(); + self.doGetActivityList(); + self.getMainFunc(); + self.getMainNewsTab(); + }, + onPageScroll(e) { + var _self = this; + if (e.scrollTop <= 96) { + //显示 + _self.setData({ + isHide: true + }) + } else { + //隐藏 + _self.setData({ + isHide: false + }) + } + }, + openSearch() { + wx.navigateTo({ + url: '/subpages/search/commonSearch', + }) + } +}) \ No newline at end of file diff --git a/xz_mini/pages/index/index.json b/xz_mini/pages/index/index.json new file mode 100644 index 0000000..8835af0 --- /dev/null +++ b/xz_mini/pages/index/index.json @@ -0,0 +1,3 @@ +{ + "usingComponents": {} +} \ No newline at end of file diff --git a/xz_mini/pages/index/index.wxml b/xz_mini/pages/index/index.wxml new file mode 100644 index 0000000..c393f82 --- /dev/null +++ b/xz_mini/pages/index/index.wxml @@ -0,0 +1,170 @@ + + + + + + + + + + + + + {{item.directoriesName}} + + + + + 志愿者服务 + + + + 精彩活动 + + + + 场馆导航 + + + + 非遗文化 + + + + 直播点播 + + + + + + + + + 精彩推荐 + + + + + + + 场馆导航 + {{item.venueName}} + + + + 精彩活动 + {{item.activityTitle}} + + + + + + + + + + + + {{it.directoriesName}} + + + + + + + {{item.newsContentTitle}} + + + + + 来源:{{item.newsContentResource}} + {{item.newsContentPublishTime}} + + + + + + + + {{item.newsContentTitle}} + + 来源:{{item.newsContentResource}} + {{item.newsContentPublishTime}} + + + + + + {{item.newsContentTitle}} + + 来源:{{item.newsContentResource}} + {{item.newsContentPublishTime}} + + + + + + + + {{item.newsContentTitle}} + + + + + 来源:{{item.newsContentResource}} + {{item.newsContentPublishTime}} + + + + {{item.newsContentTitle}} + + 来源:{{item.newsContentResource}} + {{item.newsContentPublishTime}} + + + + {{item.newsContentTitle}} + + + + + + 来源:{{item.newsContentResource}} + {{item.newsContentPublishTime}} + + + + {{item.newsContentTitle}} + + 来源:{{item.newsContentResource}} + {{item.newsContentPublishTime}} + + + + + + + + + + + + 直播专区 + + + + + + + {{item.livePlanName}} + 直播中 + 已结束 + 未开始 + 直播中 + 错误 + + + + + + \ No newline at end of file diff --git a/xz_mini/pages/index/index.wxss b/xz_mini/pages/index/index.wxss new file mode 100644 index 0000000..768c5e8 --- /dev/null +++ b/xz_mini/pages/index/index.wxss @@ -0,0 +1,393 @@ +.swiper-box, +.swiper-img, +swiper { + width: 100%; + height: 330rpx; +} + +.search-box { + display: flex; + flex-direction: column; + justify-content: center; + align-items: center; + position: fixed; + bottom: 30rpx; + right: 50rpx; + width: 70rpx; + height: 70rpx; + background: linear-gradient(to right bottom, #9f15129e, #9f1512 70px); + border-radius: 50%; + padding: 10rpx; + +} + +.search-box image { + width: 48rpx; + height: 48rpx; +} + +.search-box text { + font-size: 25rpx; + color: #9f1512; +} + +.tab { + padding: 30rpx; + display: flex; + flex-wrap: nowrap; +} + +.tab-arrow { + font-size: 28rpx; + background: #242424; + text-align: center; + justify-content: center; + align-items: center; + position: absolute; + right: 0rpx; + padding: 20rpx; +} + +.tab-box { + flex-shrink: 0; + text-align: center; + width: 25%; +} + +.tab-box image { + width: 65rpx; + height: 65rpx; +} + +.tab-title { + font-size: 28rpx; +} + +.recommend { + padding: 0rpx 30rpx 30rpx 30rpx; +} + +.recommend-container { + width: 100%; + display: flex; +} + +.line { + width: 100%; + height: 1rpx; + background: #f2f2f2; +} + +.line-thick { + width: 100%; + height: 10rpx; + background: #f2f2f2; +} + +.recommend-box { + flex-shrink: 0; + width: 220rpx; + height: 130rpx; + border-radius: 10rpx; + overflow: hidden; + position: relative; + margin-right: 30rpx; +} + +.recommend-name { + position: absolute; + bottom: 0; + left: 0; + font-size: 20rpx; + background: #00000088; + color: white; + width: 100%; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; +} + +.recommend-box image { + width: 100%; + height: 100%; +} + +.recommend-status { + position: absolute; + right: 0; + top: 0; + background: #9F1512; + border-radius: 10rpx; + color: white; + font-size: 20rpx; + padding: 0rpx 10rpx; + width: fit-content; +} + +.public-title { + text-align: center; + padding: 10rpx 0rpx; +} + +.title-text { + display: inline-block; + font-size: 32rpx; + color: #9F1512; + padding: 0 20rpx 0; + position: relative; + margin-bottom: 15rpx; +} + +.title-text image { + position: absolute; + top: 0; + width: 15rpx; + height: 100%; +} + +.selected-l { + left: 0; +} + +.selected-r { + right: 0; +} + +.news { + padding: 30rpx; + border-bottom: 5px solid #FBFBFB; +} + +.news-box { + padding: 30rpx 0; + border-bottom: 1px solid #EBEBEB; + display: flex; + flex-direction: column; +} + +.news-title { + color: #242424; + font-size: 30rpx; + font-weight: bold; +} + +.news-info { + color: #949494; + margin-top: 15rpx; + font-size: 24rpx; +} + +.news-info text { + margin-right: 20rpx; +} + +.news-big-pic, +.news-small-pic { + margin-top: 10rpx; +} + +.news-big-pic image { + width: 100%; + height: 380rpx; +} + +.news-small-pic image { + width: 30%; + height: 150rpx; + margin-right: 20rpx; +} + +.transverse-news { + flex-direction: row; + justify-content: space-between; +} + +.news-row-img { + width: 30%; + height: 150rpx; +} + +.news-row-img image { + width: 100%; + height: 100%; +} + +.news-row-info { + width: 68%; +} + +.broadcast { + margin-top: 15rpx; + padding: 0 30rpx; +} + +.broadcast-container { + display: flex; + justify-content: space-between; + flex-wrap: wrap; +} + +.broadcast-box { + flex-shrink: 0; + width: 49%; + border-radius: 10rpx; + overflow: hidden; + height: 185rpx; + margin-bottom: 15rpx; + position: relative; +} + +.broadcast-box image { + width: 100%; + height: 100%; +} + +.broadcast-text { + position: absolute; + left: 0; + right: 0; + bottom: 0; + padding: 5rpx 10rpx; + font-size: 26rpx; + background: rgba(0, 0, 0, 0.6); + color: #fff; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; +} + +.broadcast-status { + position: absolute; + top: 10rpx; + right: 10rpx; + padding: 5rpx; + background: #9F1512; + color: #fff; + font-size: 26rpx; + border-radius: 10rpx; +} + +.set-phone { + position: fixed; + top: 0; + left: 0; + right: 0; + bottom: 0; + background: rgba(0, 0, 0, .6); + z-index: 100; +} + +.set-phone-box { + width: 96%; + position: absolute; + top: 50%; + left: 50%; + transform: translate(-50%, -50%); + background: #fff; + border-radius: 10rpx; + padding: 30rpx; + box-sizing: border-box; +} + +.tips { + font-size: 28rpx; + color: #000; +} + +.phone-input { + margin: 25rpx 0; +} + +.code-input { + display: flex; + justify-content: space-between; + margin-bottom: 25rpx; +} + +.code-input input { + width: 70%; + height: 55rpx; + border: 1px solid #dedede; + border-radius: 10rpx; + padding: 0 10rpx; + box-sizing: border-box; + font-size: 28rpx; +} + +.phone-input input { + width: 100%; + height: 55rpx; + border: 1px solid #dedede; + border-radius: 10rpx; + padding: 0 10rpx; + box-sizing: border-box; + font-size: 28rpx; +} + +.get-code, +.got-code { + font-size: 28rpx; + background: rgba(159, 21, 18, .1); + color: #9F1512; + width: 28%; + line-height: 55rpx; + text-align: center; + border-radius: 10rpx; +} + +.got-code { + background: #fff; + color: #4a4d52; + border: 1px solid #eaeaea; +} + +.set-phone-btn-box { + display: flex; + justify-content: space-between; +} + +.set-phone-btn { + width: 100%; + height: 65rpx; + display: flex; + align-items: center; + justify-content: center; + font-size: 28rpx; + color: #fff; + background: #9F1512; + border-radius: 10rpx; +} + +.voice-box { + padding-right: 30px; + position: relative; +} + +.voice-box iamge { + position: absolute; + top: 0; + right: 0; + width: 25rpx; + height: 25rpx; +} + +.news-big-pic { + position: relative; +} + +.news-big-pic image.play-btn { + position: absolute; + top: 50%; + left: 50%; + transform: translate(-50%, -50%); + width: 80rpx; + height: 80rpx; +} + + +.voice-img { + position: absolute; + right: 0; + width: 48rpx; + height: 48rpx; +} \ No newline at end of file diff --git a/xz_mini/pages/login/login.js b/xz_mini/pages/login/login.js new file mode 100644 index 0000000..6d0e5fe --- /dev/null +++ b/xz_mini/pages/login/login.js @@ -0,0 +1,66 @@ +// pages/login/login.js +Page({ + + /** + * 页面的初始数据 + */ + data: { + + }, + + /** + * 生命周期函数--监听页面加载 + */ + onLoad: function (options) { + + }, + + /** + * 生命周期函数--监听页面初次渲染完成 + */ + onReady: function () { + + }, + + /** + * 生命周期函数--监听页面显示 + */ + onShow: function () { + + }, + + /** + * 生命周期函数--监听页面隐藏 + */ + onHide: function () { + + }, + + /** + * 生命周期函数--监听页面卸载 + */ + onUnload: function () { + + }, + + /** + * 页面相关事件处理函数--监听用户下拉动作 + */ + onPullDownRefresh: function () { + + }, + + /** + * 页面上拉触底事件的处理函数 + */ + onReachBottom: function () { + + }, + + /** + * 用户点击右上角分享 + */ + onShareAppMessage: function () { + + } +}) \ No newline at end of file diff --git a/xz_mini/pages/login/login.json b/xz_mini/pages/login/login.json new file mode 100644 index 0000000..8835af0 --- /dev/null +++ b/xz_mini/pages/login/login.json @@ -0,0 +1,3 @@ +{ + "usingComponents": {} +} \ No newline at end of file diff --git a/xz_mini/pages/login/login.wxml b/xz_mini/pages/login/login.wxml new file mode 100644 index 0000000..37ce7e4 --- /dev/null +++ b/xz_mini/pages/login/login.wxml @@ -0,0 +1,25 @@ + + +版权所有 \ No newline at end of file diff --git a/xz_mini/pages/login/login.wxss b/xz_mini/pages/login/login.wxss new file mode 100644 index 0000000..2ed4a3e --- /dev/null +++ b/xz_mini/pages/login/login.wxss @@ -0,0 +1,84 @@ +.login-top{ + width: 100%; + height: 610rpx; + position: relative; + text-align: center; +} +.login-bg{ + width: 100%; + height: 100%; + position: absolute; + top: 0; + left: 0; + z-index: -1; +} +.logo{ + width: 295rpx; + height: 265rpx; + margin-top: 75rpx; +} +.login{ + position: absolute; + top: 410rpx; + left: 0; + right: 0; + padding: 0 30rpx; +} +.login-info{ + padding: 45rpx 30rpx; + background: #fff; + box-shadow:0 0 17rpx 0 rgba(0,0,0,0.1); + border-radius:10rpx; +} +.row{ + display: flex; + justify-content: space-between; + border-radius:6rpx; + border:2rpx solid rgba(237,237,237,1); + align-items: center; + height: 100rpx; +} +.row-title{ + width: 30%; + text-align: center; + color: #9F1512; + font-size: 28rpx; +} +.row-text{ + width: 69%; +} +.row-text input{ + width: 100%; + height: 100%; +} +.password{ + margin-top: 25rpx; +} +.login-btn-box{ + margin-top: 45rpx; +} +.login-btn, .register-btn{ + display: flex; + justify-content: center; + align-items: center; + height: 90rpx; + background:#9F1512; + border-radius: 10rpx; + font-size: 32rpx; + color: #fff; +} +.register-btn{ + margin-top: 20rpx; + background: #fff; + color: #9F1512; +} +.copyright{ + position: fixed; + bottom: 0; + left: 0; + right: 0; + padding: 20rpx 0; + font-size: 28rpx; + color: #949494; + text-align: center; +} \ No newline at end of file diff --git a/xz_mini/pages/myActivity/myActivity.js b/xz_mini/pages/myActivity/myActivity.js new file mode 100644 index 0000000..f337319 --- /dev/null +++ b/xz_mini/pages/myActivity/myActivity.js @@ -0,0 +1,147 @@ +// pages/volunteer/volunteer.js +var app = getApp(); +Page({ + + /** + * 页面的初始数据 + */ + data: { + token: '', + dataMap: [], + type: '1' + }, + getToken: function() { + var self = this; + return new Promise(resolve =>{ + wx.getStorage({ + key: 'token', + success(res) { + self.setData({ + token: res.data + }) + return resolve(); + } + }) + }) + }, + myjoinActivity: function() { + var self = this; + app.restAjax.get(app.restAjax.path(app.activityUrl + '/app/activityuserapply/myjoinactivity', []), + {}, { + headers: { + token: self.data.token + } + }, function(code, data) { + if('200' == code) { + console.log(data) + self.setData({ + dataMap: data.rows + }) + } + }, function() { + + }, function() { + + }) + }, + /** + * + * @param {查看活动详情} e + */ + activityDetail: function(e) { + var id = e.currentTarget.dataset.activityid; + wx.navigateTo({ + url: '../activityDetail/activityDetail?id=' + id + }) + }, + /** + * + * @param {取消报名} e + */ + cancelApply: function(e) { + var applyId = e.currentTarget.dataset.applyid; + var activityId = e.currentTarget.dataset.activityid; + wx.showModal({ + title: '提示', + content: '确定要退出吗?', + success: function (sm) { + if (sm.confirm) { + app.restAjax.get(app.restAjax.path(app.activityUrl + '/app/activityuserapply/cancelapply/' + activityId + '/' + applyId, []), + {}, { + headers: { + token: self.data.token + } + }, function(code, data) { + if('200' == code) { + self.onLoad() + } + }, function() { + + }, function() { + + }) + } else if (sm.cancel) { + + } + } + }) + var self = this; + }, + /** + * 生命周期函数--监听页面加载 + */ + onLoad: function (options) { + this.getToken().then(result => { + this.myjoinActivity(); + }) + }, + + /** + * 生命周期函数--监听页面初次渲染完成 + */ + onReady: function () { + + }, + + /** + * 生命周期函数--监听页面显示 + */ + onShow: function () { + + }, + + /** + * 生命周期函数--监听页面隐藏 + */ + onHide: function () { + + }, + + /** + * 生命周期函数--监听页面卸载 + */ + onUnload: function () { + + }, + + /** + * 页面相关事件处理函数--监听用户下拉动作 + */ + onPullDownRefresh: function () { + + }, + + /** + * 页面上拉触底事件的处理函数 + */ + onReachBottom: function () { + + }, + + /** + * 用户点击右上角分享 + */ + onShareAppMessage: function () { + + } +}) \ No newline at end of file diff --git a/xz_mini/pages/myActivity/myActivity.json b/xz_mini/pages/myActivity/myActivity.json new file mode 100644 index 0000000..7360326 --- /dev/null +++ b/xz_mini/pages/myActivity/myActivity.json @@ -0,0 +1,4 @@ +{ + "usingComponents": {}, + "enablePullDownRefresh": true +} \ No newline at end of file diff --git a/xz_mini/pages/myActivity/myActivity.wxml b/xz_mini/pages/myActivity/myActivity.wxml new file mode 100644 index 0000000..c72d8b7 --- /dev/null +++ b/xz_mini/pages/myActivity/myActivity.wxml @@ -0,0 +1,15 @@ + + + + {{item.activityTitle}} + + 活动地址:{{item.activityAddress}} + 时间:{{item.startTime}}-{{item.endTime}} + 报名人:{{item.userName}} + 身份证号:{{item.userIdCard}} + 活动详情 + 取消报名 + + \ No newline at end of file diff --git a/xz_mini/pages/myActivity/myActivity.wxss b/xz_mini/pages/myActivity/myActivity.wxss new file mode 100644 index 0000000..33621f7 --- /dev/null +++ b/xz_mini/pages/myActivity/myActivity.wxss @@ -0,0 +1,105 @@ +.top-tab{ + position: fixed; + top: 0; + left: 0; + right: 0; + display: flex; + box-shadow:0 0 17rpx 0 rgba(0,0,0,0.1); + border-radius:0 0 31rpx 31rpx; + background: #fff; +} +.tab-box{ + display: flex; + justify-content: center; + align-items: center; + flex: 1; + position: relative; + height: 90rpx; + font-size: 30rpx; + color: #242424; +} +.tab-box.active{ + color: #9F1512; +} +.tab-box image{ + position: absolute; + width: 15rpx; + height: 40rpx; + top: 50%; + margin-top: -20rpx; + display: none; +} +.tab-box.active image{ + display: block; +} +.tab-box image.selected-l{ + left: 100rpx; +} +.tab-box image.selected-r{ + right: 100rpx; +} +.team{ + padding: 0 30rpx; +} +.team-box{ + padding: 20rpx 0; + border-bottom: 1px solid #EBEBEB; +} +.name-join{ + display: flex; + justify-content: space-between; + height: 40rpx; + line-height: 40rpx; + font-size: 32rpx; + color: #242424; +} +.name{ + width: 70%; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; +} +.join{ + padding: 0 10rpx; + background: rgba(159,21,18,.1); + color: #9F1512; + font-size: 28rpx; + border-radius: 10rpx; +} +.slogan, .area{ + color: #949494; + font-size: 26rpx; + margin-top: 10rpx; +} +.new-team{ + position: fixed; + background: #fff; + bottom: 0; + left: 0; + right: 0; + padding: 15rpx 30rpx; + border-top: 1px solid #EBEBEB; +} +.new-team-btn{ + height: 80rpx; + display: flex; + justify-content: center; + align-items: center; + font-size: 30rpx; + color: #fff; + background: #9F1512; + border-radius: 10rpx; +} +.cancel-btn{ + width: 150rpx; + height: 55rpx; + text-align: center; + font-size: 28rpx; + background: #9F1512; + border-radius: 10rpx; + line-height: 55rpx; + color: #fff; + margin-top: 10rpx; + display: inline-block; + margin-right: 10rpx; +} \ No newline at end of file diff --git a/xz_mini/pages/myFriendCircle/myFriendCircle.js b/xz_mini/pages/myFriendCircle/myFriendCircle.js new file mode 100644 index 0000000..bba010c --- /dev/null +++ b/xz_mini/pages/myFriendCircle/myFriendCircle.js @@ -0,0 +1,116 @@ +// pages/friendCircle/friendCircle.js +var app = getApp(); +Page({ + + /** + * 页面的初始数据 + */ + data: { + usercenterUrl: app.usercenterUrl, + socialUrl: app.socialUrl, + momentsList: [], + currentPage: 1, + rows: 20 + }, + doGetMomentsList: function(page) { + var self = this; + app.dialog.loading('正在加载'); + app.restAjax.get(app.restAjax.path('{socialUrl}/app/moments/listpagemomentsofpublicrelease', [self.data.socialUrl]), { + page: page, + rows: self.data.rows + }, null, function(code, data) { + if(data.rows.length == 0) { + app.dialog.msg('暂无数据'); + return; + } + for(var i = 0, item; item = data.rows[i++];) { + if(item.type === 'photo') { + var photos = item.photos.split(','); + var photoArray = []; + for(var j = 0, jItem; jItem = photos[j++];) { + if(jItem.length != 0) { + photoArray.push(jItem); + } + } + item.photoArray = photoArray; + } + } + var momentsArray; + if(page <= 1) { + momentsArray = data.rows; + } else { + momentsArray = self.data.news.newsList; + momentsArray = momentsArray.concat(data.rows); + } + self.setData({ + currentPage: page, + momentsList: momentsArray + }) + }, function(code, data) { + app.dialog.msg(data.msg); + }, function() { + wx.stopPullDownRefresh(); + wx.hideLoading(); + }); + }, + newFriendCircle: function () { + wx.navigateTo({ + url: '../newFriendCircle/newFriendCircle', + }) + }, + /** + * 生命周期函数--监听页面加载 + */ + onLoad: function (options) { + this.doGetMomentsList(1); + }, + + /** + * 生命周期函数--监听页面初次渲染完成 + */ + onReady: function () { + + }, + + /** + * 生命周期函数--监听页面显示 + */ + onShow: function () { + + }, + + /** + * 生命周期函数--监听页面隐藏 + */ + onHide: function () { + + }, + + /** + * 生命周期函数--监听页面卸载 + */ + onUnload: function () { + + }, + + /** + * 页面相关事件处理函数--监听用户下拉动作 + */ + onPullDownRefresh: function () { + this.doGetMomentsList(1); + }, + + /** + * 页面上拉触底事件的处理函数 + */ + onReachBottom: function () { + this.doGetMomentsList(this.data.currentPage + 1); + }, + + /** + * 用户点击右上角分享 + */ + onShareAppMessage: function () { + + } +}) \ No newline at end of file diff --git a/xz_mini/pages/myFriendCircle/myFriendCircle.json b/xz_mini/pages/myFriendCircle/myFriendCircle.json new file mode 100644 index 0000000..8835af0 --- /dev/null +++ b/xz_mini/pages/myFriendCircle/myFriendCircle.json @@ -0,0 +1,3 @@ +{ + "usingComponents": {} +} \ No newline at end of file diff --git a/xz_mini/pages/myFriendCircle/myFriendCircle.wxml b/xz_mini/pages/myFriendCircle/myFriendCircle.wxml new file mode 100644 index 0000000..59e2b16 --- /dev/null +++ b/xz_mini/pages/myFriendCircle/myFriendCircle.wxml @@ -0,0 +1,54 @@ + + + + + + + {{item.creatorName}} + {{item.content}} + {{item.gmtCreate}} + + + + + + + + {{item.creatorName}} + {{item.content}} + + + + {{item.gmtCreate}} + + + + + + + + {{item.creatorName}} + {{item.content}} + + + + {{item.gmtCreate}} + + + + + + + + {{item.creatorName}} + {{item.content}} + + + + {{item.gmtCreate}} + + + + + 发布 + \ No newline at end of file diff --git a/xz_mini/pages/myFriendCircle/myFriendCircle.wxss b/xz_mini/pages/myFriendCircle/myFriendCircle.wxss new file mode 100644 index 0000000..5b9cd19 --- /dev/null +++ b/xz_mini/pages/myFriendCircle/myFriendCircle.wxss @@ -0,0 +1,68 @@ +.friend-circle{ + padding: 15rpx 30rpx; + border-bottom: 1px solid #DEDEDE; +} +.friend-circle:last-child { + border-bottom: none; +} +.friend-circle-box{ + display: flex; + justify-content: space-between; + padding-bottom: 10rpx; +} + +.avatar{ + width: 8%; +} +.avatar image{ + width: 100%; + height: 50rpx; + border-radius: 50rpx; +} +.content{ + width: 90%; +} +.name{ + font-size: 30rpx; + color: #949494; +} +.text{ + font-size: 32rpx; + color: #000; + margin: 10rpx 0; +} +.date{ + font-size: 28rpx; + color: #949494; +} +.photo-one image{ + width: 100%; +} +.photo-more image{ + width: 32%; + height: 150rpx; + margin-right: 2%; + margin-bottom: 10rpx; +} +.photo-more image:nth-child(3n){ + margin-right: 0; +} +.video video{ + width: 100%; +} +.new-friend-circle{ + position: fixed; + right: 30rpx; + bottom: 30rpx; +} +.box{ + width: 100rpx; + height: 100rpx; + display: flex; + justify-content: center; + align-items: center; + background: #9F1512; + color: #fff; + font-size: 32rpx; + border-radius: 50%; +} \ No newline at end of file diff --git a/xz_mini/pages/myVenueOrder/myVenueOrder.js b/xz_mini/pages/myVenueOrder/myVenueOrder.js new file mode 100644 index 0000000..c263f75 --- /dev/null +++ b/xz_mini/pages/myVenueOrder/myVenueOrder.js @@ -0,0 +1,66 @@ +// pages/myVenueOrder/myVenueOrder.js +Page({ + + /** + * 页面的初始数据 + */ + data: { + + }, + + /** + * 生命周期函数--监听页面加载 + */ + onLoad: function (options) { + + }, + + /** + * 生命周期函数--监听页面初次渲染完成 + */ + onReady: function () { + + }, + + /** + * 生命周期函数--监听页面显示 + */ + onShow: function () { + + }, + + /** + * 生命周期函数--监听页面隐藏 + */ + onHide: function () { + + }, + + /** + * 生命周期函数--监听页面卸载 + */ + onUnload: function () { + + }, + + /** + * 页面相关事件处理函数--监听用户下拉动作 + */ + onPullDownRefresh: function () { + + }, + + /** + * 页面上拉触底事件的处理函数 + */ + onReachBottom: function () { + + }, + + /** + * 用户点击右上角分享 + */ + onShareAppMessage: function () { + + } +}) \ No newline at end of file diff --git a/xz_mini/pages/myVenueOrder/myVenueOrder.json b/xz_mini/pages/myVenueOrder/myVenueOrder.json new file mode 100644 index 0000000..8835af0 --- /dev/null +++ b/xz_mini/pages/myVenueOrder/myVenueOrder.json @@ -0,0 +1,3 @@ +{ + "usingComponents": {} +} \ No newline at end of file diff --git a/xz_mini/pages/myVenueOrder/myVenueOrder.wxml b/xz_mini/pages/myVenueOrder/myVenueOrder.wxml new file mode 100644 index 0000000..542582a --- /dev/null +++ b/xz_mini/pages/myVenueOrder/myVenueOrder.wxml @@ -0,0 +1,44 @@ + + + + + + + + 场馆 + 篮球 + + 订单编号:12456789 + 下单时间:2020-01-01 10:00:00 + ¥15元 + + + + + + + + + 场馆 + 篮球 + + 订单编号:12456789 + 下单时间:2020-01-01 10:00:00 + ¥15元 + + + + + + + + + 场馆 + 篮球 + + 订单编号:12456789 + 下单时间:2020-01-01 10:00:00 + ¥15元 + + + \ No newline at end of file diff --git a/xz_mini/pages/myVenueOrder/myVenueOrder.wxss b/xz_mini/pages/myVenueOrder/myVenueOrder.wxss new file mode 100644 index 0000000..214e7f4 --- /dev/null +++ b/xz_mini/pages/myVenueOrder/myVenueOrder.wxss @@ -0,0 +1,51 @@ +.venue{ + padding: 10rpx 30rpx; +} +.order-box{ + border-radius: 10rpx; + padding: 10rpx; + box-shadow:0px 0px 17rpx 0px rgba(0,0,0,0.1); + display: flex; + justify-content: space-between; + margin-bottom: 20rpx; +} +.venue-img{ + width: 35%; + height: 180rpx; +} +.venue-img image{ + width: 100%; + height: 100%; + border-radius: 10rpx; +} +.order-info{ + width: 62%; +} +.venue-title{ + font-size: 32rpx; + display: flex; + justify-content: space-between; +} +.title{ + width: 70%; + overflow: hidden; + white-space: nowrap; + text-overflow: ellipsis; +} +.project{ + font-size: 28rpx; + background: rgba(159,21,18,.1); + color: #9F1512; + padding: 0 5rpx; + border-radius: 10rpx; +} +.number-time{ + font-size: 26rpx; + color: #949494; + margin-top: 10rpx; +} +.price{ + font-size: 30rpx; + color: #9F1512; + margin-top: 10rpx; +} \ No newline at end of file diff --git a/xz_mini/pages/myVolunteerActivity/myVolunteerActivity.js b/xz_mini/pages/myVolunteerActivity/myVolunteerActivity.js new file mode 100644 index 0000000..81cde1c --- /dev/null +++ b/xz_mini/pages/myVolunteerActivity/myVolunteerActivity.js @@ -0,0 +1,138 @@ +// pages/volunteer/volunteer.js +var app = getApp(); +Page({ + + /** + * 页面的初始数据 + */ + data: { + token: '', + dataMap: {}, + type: '1', + teamId: '' + }, + getToken: function() { + var self = this; + return new Promise(resolve =>{ + wx.getStorage({ + key: 'token', + success(res) { + self.setData({ + token: res.data + }) + return resolve(); + } + }) + }) + }, + newTeam: function () { + wx.navigateTo({ + url: '../newTeam/newTeam', + }) + }, + goDetail: function (e) { + var id = e.currentTarget.dataset.id; + wx.navigateTo({ + url: '../serviceActivityDetail/serviceActivityDetail?id=' + id + }) + }, + newActivity: function () { + wx.navigateTo({ + url: '../newVolunteerActivity/newVolunteerActivity', + }) + }, + changeTab: function(e) { + var self = this; + self.setData({ + type: e.currentTarget.dataset.type + }) + if(self.data.type === '1') { + // 我发起的活动 + self.myActivity(app.volunteerUrl + '/app/volunteerservice/listpagevolunteerservice'); + }else { + // 我参加的活动 + self.myActivity(app.volunteerUrl + '/app/volunteerservice/listpagemyjoinservice'); + } + }, + myActivity: function(url) { + var self = this; + app.restAjax.get(app.restAjax.path(url, []), + self.data.pages, { + headers: { + token: self.data.token + } + }, function(code, data) { + if('200' == code) { + for(var item of data.rows) { + if('' != item.photo) { + var photoArr = item.photo.split(","); + item.photo = app.volunteerUrl + '/route/file/download/true/' + photoArr[0]; + } + } + self.setData({ + dataMap: data.rows + }) + } + }, function(code, data) { + app.dialog.msg(data.msg); + }, function() { + }) + }, + /** + * 生命周期函数--监听页面加载 + */ + onLoad: function (options) { + this.getToken().then(result => { + this.myActivity(app.volunteerUrl + '/app/volunteerservice/listpagevolunteerservice'); + }) + }, + + /** + * 生命周期函数--监听页面初次渲染完成 + */ + onReady: function () { + + }, + + /** + * 生命周期函数--监听页面显示 + */ + onShow: function () { + + }, + + /** + * 生命周期函数--监听页面隐藏 + */ + onHide: function () { + + }, + + /** + * 生命周期函数--监听页面卸载 + */ + onUnload: function () { + + }, + + /** + * 页面相关事件处理函数--监听用户下拉动作 + */ + onPullDownRefresh: function () { + + }, + + /** + * 页面上拉触底事件的处理函数 + */ + onReachBottom: function () { + + }, + + /** + * 用户点击右上角分享 + */ + onShareAppMessage: function () { + + } +}) \ No newline at end of file diff --git a/xz_mini/pages/myVolunteerActivity/myVolunteerActivity.json b/xz_mini/pages/myVolunteerActivity/myVolunteerActivity.json new file mode 100644 index 0000000..7360326 --- /dev/null +++ b/xz_mini/pages/myVolunteerActivity/myVolunteerActivity.json @@ -0,0 +1,4 @@ +{ + "usingComponents": {}, + "enablePullDownRefresh": true +} \ No newline at end of file diff --git a/xz_mini/pages/myVolunteerActivity/myVolunteerActivity.wxml b/xz_mini/pages/myVolunteerActivity/myVolunteerActivity.wxml new file mode 100644 index 0000000..e2c9f54 --- /dev/null +++ b/xz_mini/pages/myVolunteerActivity/myVolunteerActivity.wxml @@ -0,0 +1,30 @@ + + + + 我发起 + + + + + 我参加 + + + + + + + + + + + + {{item.serviceName}} + + {{item.startTime}}至{{item.endTime}} + + + + + + 发起新活动 + \ No newline at end of file diff --git a/xz_mini/pages/myVolunteerActivity/myVolunteerActivity.wxss b/xz_mini/pages/myVolunteerActivity/myVolunteerActivity.wxss new file mode 100644 index 0000000..b777244 --- /dev/null +++ b/xz_mini/pages/myVolunteerActivity/myVolunteerActivity.wxss @@ -0,0 +1,137 @@ +.top-tab{ + position: fixed; + top: 0; + left: 0; + right: 0; + display: flex; + box-shadow:0 0 17rpx 0 rgba(0,0,0,0.1); + border-radius:0 0 31rpx 31rpx; + background: #fff; +} +.tab-box{ + display: flex; + justify-content: center; + align-items: center; + flex: 1; + position: relative; + height: 90rpx; + font-size: 30rpx; + color: #242424; +} +.tab-box.active{ + color: #9F1512; +} +.tab-box image{ + position: absolute; + width: 15rpx; + height: 40rpx; + top: 50%; + margin-top: -20rpx; + display: none; +} +.tab-box.active image{ + display: block; +} +.tab-box image.selected-l{ + left: 100rpx; +} +.tab-box image.selected-r{ + right: 100rpx; +} +.team{ + margin-top: 90rpx; + padding: 0 30rpx; + margin-bottom: 110rpx; +} +.team-box{ + padding: 20rpx 0; + border-bottom: 1px solid #EBEBEB; +} +.name-join{ + display: flex; + justify-content: space-between; + height: 40rpx; + line-height: 40rpx; + font-size: 32rpx; + color: #242424; +} +.name{ + width: 70%; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; +} +.join{ + padding: 0 10rpx; + background: rgba(159,21,18,.1); + color: #9F1512; + font-size: 28rpx; + border-radius: 10rpx; +} +.slogan, .area{ + color: #949494; + font-size: 26rpx; + margin-top: 10rpx; +} +.new-team{ + position: fixed; + background: #fff; + bottom: 0; + left: 0; + right: 0; + padding: 15rpx 30rpx; + border-top: 1px solid #EBEBEB; +} +.new-team-btn{ + height: 80rpx; + display: flex; + justify-content: center; + align-items: center; + font-size: 30rpx; + color: #fff; + background: #9F1512; + border-radius: 10rpx; +} +.volunteer-activity{ + margin-top: 90rpx; + padding: 0 30rpx; + margin-bottom: 105rpx; +} +.activity{ + padding: 20rpx 30rpx 0; +} +.activity-box{ + margin-bottom: 20rpx; + box-shadow:0px 0px 17rpx 0px rgba(0,0,0,0.1); + border-radius: 10rpx; + overflow: hidden; +} +.activity-img{ + height: 320rpx; + position: relative; +} +.activity-img image{ + width: 100%; + height: 100%; +} +.activity-info{ + padding: 15rpx 20rpx; +} +.title{ + display: flex; + justify-content: space-between; +} +.activity-title{ + width: 100%; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; + font-size: 30rpx; + color: #242424; + line-height: 40rpx; +} +.date{ + margin-top: 10rpx; + font-size: 22rpx; + color: #242424; +} \ No newline at end of file diff --git a/xz_mini/pages/myVolunteerTeam/myVolunteerTeam.js b/xz_mini/pages/myVolunteerTeam/myVolunteerTeam.js new file mode 100644 index 0000000..6b77acc --- /dev/null +++ b/xz_mini/pages/myVolunteerTeam/myVolunteerTeam.js @@ -0,0 +1,158 @@ +// pages/volunteer/volunteer.js +var app = getApp(); +Page({ + + /** + * 页面的初始数据 + */ + data: { + token: '', + otherTeamMap: {}, + type: '1', + teamId: '', + }, + getToken: function() { + var self = this; + return new Promise(resolve =>{ + wx.getStorage({ + key: 'token', + success(res) { + self.setData({ + token: res.data + }) + return resolve(); + } + }) + }) + }, + toTeamDetail: function(e) { + var teamId = e.currentTarget.dataset.teamid; + wx.navigateTo({ + url: '../teamDetail/teamDetail?teamId=' + teamId, + }) + }, + newTeam: function () { + wx.navigateTo({ + url: '../newTeam/newTeam', + }) + }, + otherTeam: function(url) { + var self = this; + app.restAjax.get(app.restAjax.path(url, []), + {}, { + headers: { + token: self.data.token + } + }, function(code, data) { + if('200' == code) { + self.setData({ + otherTeamMap: data.rows + }) + } + }, function(code, data) { + app.dialog.msg(data.msg); + }, function() { + + }) + }, + /** + * 申请/退出加入团队 + */ + joinOrOutTeam: function(e) { + var self = this; + self.setData({ + teamId: e.currentTarget.dataset.teamid + }) + var teamMemberVO; + var url; + var methodType; + var title; + if('1' == self.data.type) { + url = app.volunteerUrl + '/app/teammember/saveteammember' + teamMemberVO = { + teamId: e.currentTarget.dataset.teamid + } + methodType = app.restAjax.post + title = '申请成功!' + }else { + url = app.volunteerUrl + '/app/teammember/quitTeam/' + self.data.teamId + methodType = app.restAjax.get + title = '退出成功!' + } + + methodType(app.restAjax.path(url, []), + teamMemberVO, { + headers: { + token: self.data.token + } + }, function(code, data) { + if('200' == code) { + app.dialog.msg(title); + wx.navigateTo({ + url: '../volunteer/volunteer', + }) + } + }, function(code, data) { + app.dialog.msg(data.msg); + }, function() { + + }) + }, + /** + * 生命周期函数--监听页面加载 + */ + onLoad: function (options) { + this.getToken().then(result => { + this.otherTeam(app.volunteerUrl + '/app/team/myteamm'); + }) + }, + + /** + * 生命周期函数--监听页面初次渲染完成 + */ + onReady: function () { + + }, + + /** + * 生命周期函数--监听页面显示 + */ + onShow: function () { + + }, + + /** + * 生命周期函数--监听页面隐藏 + */ + onHide: function () { + + }, + + /** + * 生命周期函数--监听页面卸载 + */ + onUnload: function () { + + }, + + /** + * 页面相关事件处理函数--监听用户下拉动作 + */ + onPullDownRefresh: function () { + + }, + + /** + * 页面上拉触底事件的处理函数 + */ + onReachBottom: function () { + + }, + + /** + * 用户点击右上角分享 + */ + onShareAppMessage: function () { + + } +}) \ No newline at end of file diff --git a/xz_mini/pages/myVolunteerTeam/myVolunteerTeam.json b/xz_mini/pages/myVolunteerTeam/myVolunteerTeam.json new file mode 100644 index 0000000..7360326 --- /dev/null +++ b/xz_mini/pages/myVolunteerTeam/myVolunteerTeam.json @@ -0,0 +1,4 @@ +{ + "usingComponents": {}, + "enablePullDownRefresh": true +} \ No newline at end of file diff --git a/xz_mini/pages/myVolunteerTeam/myVolunteerTeam.wxml b/xz_mini/pages/myVolunteerTeam/myVolunteerTeam.wxml new file mode 100644 index 0000000..536dfcc --- /dev/null +++ b/xz_mini/pages/myVolunteerTeam/myVolunteerTeam.wxml @@ -0,0 +1,15 @@ + + + + {{item.teamName}} + 申请加入 + 退出 + 待审核 + 退出 + 审核驳回 + 已退出 + + 团队口号:{{item.teamWatchword}} + 所属区域:{{item.teamCityDictionaryName}} {{item.teamCountyDictionaryName}} {{item.teamAreaDictionaryName}} + + \ No newline at end of file diff --git a/xz_mini/pages/myVolunteerTeam/myVolunteerTeam.wxss b/xz_mini/pages/myVolunteerTeam/myVolunteerTeam.wxss new file mode 100644 index 0000000..29df066 --- /dev/null +++ b/xz_mini/pages/myVolunteerTeam/myVolunteerTeam.wxss @@ -0,0 +1,92 @@ +.top-tab{ + position: fixed; + top: 0; + left: 0; + right: 0; + display: flex; + box-shadow:0 0 17rpx 0 rgba(0,0,0,0.1); + border-radius:0 0 31rpx 31rpx; + background: #fff; +} +.tab-box{ + display: flex; + justify-content: center; + align-items: center; + flex: 1; + position: relative; + height: 90rpx; + font-size: 30rpx; + color: #242424; +} +.tab-box.active{ + color: #9F1512; +} +.tab-box image{ + position: absolute; + width: 15rpx; + height: 40rpx; + top: 50%; + margin-top: -20rpx; + display: none; +} +.tab-box.active image{ + display: block; +} +.tab-box image.selected-l{ + left: 100rpx; +} +.tab-box image.selected-r{ + right: 100rpx; +} +.team{ + padding: 0 30rpx; +} +.team-box{ + padding: 20rpx 0; + border-bottom: 1px solid #EBEBEB; +} +.name-join{ + display: flex; + justify-content: space-between; + height: 40rpx; + line-height: 40rpx; + font-size: 32rpx; + color: #242424; +} +.name{ + width: 70%; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; +} +.join{ + padding: 0 10rpx; + background: rgba(159,21,18,.1); + color: #9F1512; + font-size: 28rpx; + border-radius: 10rpx; +} +.slogan, .area{ + color: #949494; + font-size: 26rpx; + margin-top: 10rpx; +} +.new-team{ + position: fixed; + background: #fff; + bottom: 0; + left: 0; + right: 0; + padding: 15rpx 30rpx; + border-top: 1px solid #EBEBEB; +} +.new-team-btn{ + height: 80rpx; + display: flex; + justify-content: center; + align-items: center; + font-size: 30rpx; + color: #fff; + background: #9F1512; + border-radius: 10rpx; +} \ No newline at end of file diff --git a/xz_mini/pages/newTeam/newTeam.js b/xz_mini/pages/newTeam/newTeam.js new file mode 100644 index 0000000..4b12457 --- /dev/null +++ b/xz_mini/pages/newTeam/newTeam.js @@ -0,0 +1,375 @@ +// pages/newTeam/newTeam.js +var app = getApp(); +Page({ + + /** + * 页面的初始数据 + */ + data: { + isAgree: false, // 是否同意志愿者注册协议 + index: 0, + array: ['区域1','区域2','区域3','区域4'], + photo: '', // 用于页面显示的photo链接 + uploadPhoto: '', // 用于传到后台的photoId + teamName: '', + count:'', + teamWatchword: '', + content: '', + + tempObj: {}, // 用于临时存储字典表返回的数据 + tempArray: [], // 用于临时存储字典表返回的数据 + + teamCityIndex: 0, + teamCityResult: '请选择服务区域', + teamCity: {}, // 服务区域-市 + teamCityArray: [], // 服务区域-市 + + teamCountyIndex: 0, + teamCountyResult: '请选择旗县区', + teamCounty: {}, // 服务区域-旗县区 + teamCountyArray: [], // 服务区域-旗县区 + + teamAreaIndex: 0, + teamAreaResult: '请选择乡镇村', + teamArea: {}, // 服务区域-乡镇村 + teamAreaArray: [], // 服务区域-乡镇村 + + countyShowStatus: true, + areaShowStatus: true + }, + getToken: function() { + var self = this; + return new Promise(resolve =>{ + wx.getStorage({ + key: 'token', + success(res) { + self.setData({ + token: res.data + }) + return resolve(); + } + }) + }) + }, + bindPickerChange: function (e) { + this.setData({ + index: e.detail.value + }) + }, + /** + * 上传活动照片 + */ + uploadPhoto: function () { + var self = this + wx.chooseImage({ + success (res) { + const tempFilePaths = res.tempFilePaths + console.log(tempFilePaths) + app.restAjax.file(app.restAjax.path(app.volunteerUrl + '/app/file/uploadimage', []), tempFilePaths[0], + 'image', { + headers: { + token: self.data.token + } + }, function(code, data) { + if('200' == code) { + var data = data.substr(9, data.length); + data = data.substr(0, data.length - 2); + self.setData({ + photo: app.volunteerUrl + '/route/file/download/true/' + data, + uploadPhoto: data + }) + } + }, function(code, data) { + app.dialog.msg(data.msg) + }, function() { + + }) + } + }) + }, + cityChange: function(e) { + var self = this; + self.setData({ + teamCityIndex: e.detail.value, + areaShowStatus: true, + teamArea: {}, + teamAreaArray: [] + }) + + this.getDataFromArea(self.data.teamCity[self.data.teamCityIndex].areaId, 2).then(result => { + if(self.data.tempObj.length > 0) { + self.setData({ + teamCounty: self.data.tempObj, + teamCountyArray: self.data.tempArray, + countyShowStatus: false, + tempObj: {}, + tempArray: [] + }) + }else { + self.setData({ + teamCounty: {}, + teamCountyArray: [], + countyShowStatus: true, + tempObj: {}, + tempArray: [] + }) + } + }); + }, + countyChange: function(e) { + var self = this; + self.setData({ + teamCountyIndex: e.detail.value + }) + + this.getDataFromArea(self.data.teamCounty[self.data.teamCountyIndex].areaId, 2).then(result => { + if(self.data.tempObj.length > 0) { + self.setData({ + teamArea: self.data.tempObj, + teamAreaArray: self.data.tempArray, + areaShowStatus: false, + tempObj: {}, + tempArray: [] + }) + }else { + self.setData({ + teamArea: {}, + teamAreaArray: [], + areaShowStatus: true, + tempObj: {}, + tempArray: [] + }) + } + }) + }, + areaChange: function(e) { + var self = this; + self.setData({ + teamAreaIndex: e.detail.value + }) + }, + userAgree: function(e) { + var type = e.currentTarget.dataset.type; + wx.navigateTo({ + url: '../userAgree/userAgree?type=' + type, + }) + }, + changeAgree: function (e) { + if(e.detail.value == ''){ + this.setData({ + isAgree: false + }) + }else{ + this.setData({ + isAgree: true + }) + } + }, + submitRegister: function () { + var self = this; + if(!self.data.isAgree) { + wx.showToast({ + title: '请阅读并同意《团队注册服务协议》', + icon: 'none', + duration: 1500 + }) + return false; + } + var teamVO = { + photo: self.data.uploadPhoto, + teamName: self.data.teamName, + count:self.data.count, + teamWatchword: self.data.teamWatchword, + content: self.data.content, + agree: self.data.isAgree, + teamCity: self.data.teamCity[self.data.teamCityIndex] != '' + && self.data.teamCity[self.data.teamCityIndex] != null + && self.data.teamCity[self.data.teamCityIndex] != 'undefined' ? + self.data.teamCity[self.data.teamCityIndex].dictionaryId : + '', + teamCounty: self.data.teamCounty[self.data.teamCountyIndex] != '' + && self.data.teamCounty[self.data.teamCountyIndex] != null + && self.data.teamCounty[self.data.teamCountyIndex] != 'undefined' ? + self.data.teamCounty[self.data.teamCountyIndex].dictionaryId : + '', + teamArea: self.data.teamArea[self.data.teamAreaIndex] != '' + && self.data.teamArea[self.data.teamAreaIndex] != null + && self.data.teamArea[self.data.teamAreaIndex] != 'undefined' ? + self.data.teamArea[self.data.teamAreaIndex].dictionaryId : + '', + }; + app.restAjax.post(app.restAjax.path(app.volunteerUrl + '/app/team/saveteam', []), + teamVO, { + headers: { + 'token': self.data.token + } + }, function(code, data) { + if('200' == code) { + app.dialog.msg('注册成功') + wx.navigateTo({ + url: '../volunteer/volunteer', + }) + } + }, function(code, data) { + app.dialog.msg(data.msg) + }, function() { + + }) + }, + /** + *从字典表拉取数据 + */ + getDataFromDict: function(dictId, type) { + var self = this; + return new Promise(resolve => { + app.restAjax.get(app.restAjax.path(app.volunteerUrl + '/app/datadictionary/listdictionarybyparentid/' + dictId, []), + {}, { + headers: { + token: self.data.token + } + }, function(code, data) { + if('200' == code) { + var array = []; + for(var item of data) { + delete item.dictionaryParentId; + delete item.dictionaryParentName; + delete item.dictionarySummary; + delete item.dictionaryCode; + delete item.dictionarySort; + delete item.subDictionary; + delete item.parent; + + array.push(item.dictionaryName); + } + self.setData({ + tempArray: array + }) + } + self.setData({ + tempObj: data + }) + return resolve(); + }, function() { + + }, function() { + + }) + }) + }, + /** + *从区域表拉取数据 + */ + getDataFromArea: function(dictId, type) { + var self = this; + return new Promise(resolve => { + app.restAjax.get(app.restAjax.path(app.volunteerUrl + '/app/area/listbyparentidrelease/' + dictId, []), + {}, { + headers: { + 'token': self.data.token + } + }, function(code, data) { + console.log(data) + if('200' == code) { + if(data || type === 2) { + var array = []; + for(var item of data) { + delete item.areaParentId; + delete item.areaParentName; + delete item.areaCode; + delete item.areaCityCode; + delete item.areaMergerName; + delete item.areaShortName; + delete item.areaZipCode; + delete item.areaLevel; + delete item.areaLng; + delete item.areaLat; + delete item.areaPinyin; + delete item.areaFirst; + delete item.subArea; + delete item.parent; + + array.push(item.areaName); + } + self.setData({ + tempArray: array + }) + } + self.setData({ + tempObj: data + }) + } + return resolve(); + }, function() { + + }, function() { + + }) + }) + }, + /** + * 生命周期函数--监听页面加载 + */ + onLoad: function (options) { + var self = this; + this.getToken().then(result => { + console.log(self.data.token) + this.getDataFromArea('640675', 2).then(result => { + self.setData({ + teamCity: self.data.tempObj, + teamCityArray: self.data.tempArray, + tempObj: {}, + tempArray: [] + }) + }) + }) + }, + + /** + * 生命周期函数--监听页面初次渲染完成 + */ + onReady: function () { + + }, + + /** + * 生命周期函数--监听页面显示 + */ + onShow: function () { + + }, + + /** + * 生命周期函数--监听页面隐藏 + */ + onHide: function () { + + }, + + /** + * 生命周期函数--监听页面卸载 + */ + onUnload: function () { + + }, + + /** + * 页面相关事件处理函数--监听用户下拉动作 + */ + onPullDownRefresh: function () { + + }, + + /** + * 页面上拉触底事件的处理函数 + */ + onReachBottom: function () { + + }, + + /** + * 用户点击右上角分享 + */ + onShareAppMessage: function () { + + } +}) \ No newline at end of file diff --git a/xz_mini/pages/newTeam/newTeam.json b/xz_mini/pages/newTeam/newTeam.json new file mode 100644 index 0000000..7360326 --- /dev/null +++ b/xz_mini/pages/newTeam/newTeam.json @@ -0,0 +1,4 @@ +{ + "usingComponents": {}, + "enablePullDownRefresh": true +} \ No newline at end of file diff --git a/xz_mini/pages/newTeam/newTeam.wxml b/xz_mini/pages/newTeam/newTeam.wxml new file mode 100644 index 0000000..9c0f06d --- /dev/null +++ b/xz_mini/pages/newTeam/newTeam.wxml @@ -0,0 +1,77 @@ + + + 团队头像: + + + + + 点击上传 + + + + 团队名称: + + + + + + 人数限制: + + + + + + 团队口号: + + + + + + 市: + + + + {{teamCityArray[teamCityIndex]}} + + + + + + + + 团队介绍: + + + + + + + + + + + + + 立即注册 + + \ No newline at end of file diff --git a/xz_mini/pages/newTeam/newTeam.wxss b/xz_mini/pages/newTeam/newTeam.wxss new file mode 100644 index 0000000..ceb514f --- /dev/null +++ b/xz_mini/pages/newTeam/newTeam.wxss @@ -0,0 +1,88 @@ +.new-team{ + padding: 0 30rpx; +} +.row{ + display: flex; + justify-content: space-between; + height: 90rpx; +} +.row-title{ + line-height: 90rpx; + color: #242424; + font-size: 32rpx; + width: 24%; + display: flex; + align-items: center; +} +.row-text{ + width: 75%; + display: flex; + align-items: center; + border-bottom: 1px solid #EBEBEB; +} +.row-text input{ + width: 100%; + height: 100%; +} +picker{ + width: 100%; + height: 100%; + line-height: 90rpx; +} +laebl{ + margin-right: 30rpx; +} +.intro, .intro textarea{ + height: 230rpx; +} +.intro textarea{ + padding: 26rpx 0; + box-sizing: border-box; + font-size: 32rpx; +} +.create{ + position: fixed; + bottom: 0; + left: 0; + right: 0; + padding: 0 30rpx 30rpx; + background: #fff; +} +.agree{ + display: flex; + align-items: center; + font-size: 30rpx; + padding-top: 5rpx; +} +.agree-checkbox{ + transform: scale(0.8,0.8); +} +.create-btn{ + background: #9F1512; + height: 80rpx; + border-radius: 10rpx; + color: #fff; + font-size: 32rpx; + display: flex; + justify-content: center; + align-items: center; + margin-top: 15rpx; +} +label{ + margin-right: 30rpx; +} +.info-text{ + width: 77%; + font-size: 26rpx; + height: 55rpx; +} +.avatar{ + height: 150rpx; +} +.avatar image{ + width: 150rpx; + height: 150rpx; +} +.avatar-row{ + height: 150rpx; +} \ No newline at end of file diff --git a/xz_mini/pages/newVolunteerActivity/newVolunteerActivity.js b/xz_mini/pages/newVolunteerActivity/newVolunteerActivity.js new file mode 100644 index 0000000..6d9b129 --- /dev/null +++ b/xz_mini/pages/newVolunteerActivity/newVolunteerActivity.js @@ -0,0 +1,254 @@ +// pages/newVolunteerActivity/newVolunteerActivity.js +var app = getApp(); +var util = require('../../utils/util.js'); +Page({ + + /** + * 页面的初始数据 + */ + data: { + token: '', + startDate: '', + endDate: '', + serviceName: '', // 名称 + serviceContent: '', // 活动内容 + address: '', // 活动地址 + serviceReward: '', // 服务奖补 + linkMan: '', // 联系人 + linkTel: '', // 联系人联系方式 + count: '', // 志愿者数量 + introduce: '', // 活动介绍 + voluntaryType: 1, // 类型 + tempFilePaths: '', // 宣传图片 + photo: '', // 用于页面显示的宣传图片链接 + uploadPhoto: '', // 用于传到后台的宣传图片Id + serviceRequirement: '', // 服务要求 + }, + getToken: function() { + var self = this; + return new Promise(resolve =>{ + wx.getStorage({ + key: 'token', + success(res) { + self.setData({ + token: res.data + }) + return resolve(); + } + }) + }) + }, + startDateChange: function(e) { + console.log('picker发送选择改变,携带值为', e.detail.value) + this.setData({ + startDate: e.detail.value + }) + }, + endDateChange: function(e) { + var self = this; + console.log('picker发送选择改变,携带值为', e.detail.value) + if(self.data.startDate > e.detail.value) { + wx.showToast({ + title: '结束时间不能早于开始时间', + icon: 'none', + duration: 1500 + }) + return false; + } + this.setData({ + endDate: e.detail.value + }) + }, + dateDafault: function() { + // 设置日期选择框为当前日期 + var self = this; + var TIME = util.formatDate(new Date()); + self.setData({ + startDate: TIME, + endDate: TIME + }) + }, + /** + * 选择志愿者或者团队类型 + */ + changeType: function(e) { + if(e.detail.value == 1){ + this.setData({ + voluntaryType : 1 + }) + }else{ + this.setData({ + voluntaryType : 2 + }) + } + }, + /** + * 上传活动照片 + */ + uploadPhoto: function () { + var self = this + wx.chooseImage({ + success (res) { + const tempFilePaths = res.tempFilePaths + app.restAjax.file(app.restAjax.path(app.volunteerUrl + '/app/file/uploadimage', []), tempFilePaths[0], + 'image', { + headers: { + token: self.data.token + } + }, function(code, data) { + if('200' == code) { + var data = data.substr(9, data.length); + data = data.substr(0, data.length - 2); + self.setData({ + photo: app.volunteerUrl + '/route/file/download/true/' + data, + uploadPhoto: data + }) + } + }, function(code, data) { + app.dialog.msg(data.msg) + }, function() { + + }) + } + }) + }, + submitRegister: function () { + var self = this; + if(!self.data.serviceName) { + wx.showToast({ + title: '活动名称不能为空', + icon: 'none', + duration: 1500 + }) + return false; + } + if(!self.data.serviceContent) { + wx.showToast({ + title: '活动内容不能为空', + icon: 'none', + duration: 1500 + }) + return false; + } + if(!self.data.address) { + wx.showToast({ + title: '活动地址不能为空', + icon: 'none', + duration: 1500 + }) + return false; + } + if(!self.data.linkMan) { + wx.showToast({ + title: '活动联系人不能为空', + icon: 'none', + duration: 1500 + }) + return false; + } + if(!self.data.address) { + wx.showToast({ + title: '联系方式不能为空', + icon: 'none', + duration: 1500 + }) + return false; + } + if(!self.data.count) { + wx.showToast({ + title: '数量不能为空', + icon: 'none', + duration: 1500 + }) + return false; + } + var volunteerServiceVO = { + serviceName: self.data.serviceName, + serviceContent: self.data.serviceContent, + address: self.data.address, + serviceReward: self.data.serviceReward, + linkMan: self.data.linkMan, + linkTel: self.data.linkTel, + voluntaryType: self.data.voluntaryType, + count: self.data.count, + introduce: self.data.introduce, + startTime: self.data.startDate, + endTime: self.data.endDate, + photo: self.data.uploadPhoto, + serviceRequirement: self.data.serviceRequirement + }; + app.restAjax.post(app.restAjax.path(app.volunteerUrl + '/app/volunteerservice/savevolunteerservice', []), + volunteerServiceVO, { + headers: { + 'token': self.data.token + } + }, function(code, data) { + if('200' == code) { + app.dialog.msg('活动发布成功!'); + wx.navigateTo({ + url: '../volunteer/volunteer', + }) + } + }, function(code, data) { + app.dialog.msg(data.msg); + }, function() { + + }) + }, + /** + * 生命周期函数--监听页面加载 + */ + onLoad: function (options) { + this.dateDafault(); + this.getToken(); + }, + + /** + * 生命周期函数--监听页面初次渲染完成 + */ + onReady: function () { + + }, + + /** + * 生命周期函数--监听页面显示 + */ + onShow: function () { + + }, + + /** + * 生命周期函数--监听页面隐藏 + */ + onHide: function () { + + }, + + /** + * 生命周期函数--监听页面卸载 + */ + onUnload: function () { + + }, + + /** + * 页面相关事件处理函数--监听用户下拉动作 + */ + onPullDownRefresh: function () { + + }, + + /** + * 页面上拉触底事件的处理函数 + */ + onReachBottom: function () { + + }, + + /** + * 用户点击右上角分享 + */ + onShareAppMessage: function () { + + } +}) \ No newline at end of file diff --git a/xz_mini/pages/newVolunteerActivity/newVolunteerActivity.json b/xz_mini/pages/newVolunteerActivity/newVolunteerActivity.json new file mode 100644 index 0000000..7360326 --- /dev/null +++ b/xz_mini/pages/newVolunteerActivity/newVolunteerActivity.json @@ -0,0 +1,4 @@ +{ + "usingComponents": {}, + "enablePullDownRefresh": true +} \ No newline at end of file diff --git a/xz_mini/pages/newVolunteerActivity/newVolunteerActivity.wxml b/xz_mini/pages/newVolunteerActivity/newVolunteerActivity.wxml new file mode 100644 index 0000000..1ee51e8 --- /dev/null +++ b/xz_mini/pages/newVolunteerActivity/newVolunteerActivity.wxml @@ -0,0 +1,102 @@ + + + 活动名称: + + + + + + 活动内容: + + + + + + 活动地址: + + + + + + 服务奖补: + + + + + + 服务要求: + + + + + + 联系人: + + + + + + 联系方式: + + + + + + 类型: + + + + + + + + 数量: + + + + + + 活动简介: + + + + + + 开始时间: + + + + {{startDate}} + + + + + + 结束时间: + + + + {{endDate}} + + + + + + 宣传图片: + + + + + 点击上传 + + + + + + + 立即发起 + + \ No newline at end of file diff --git a/xz_mini/pages/newVolunteerActivity/newVolunteerActivity.wxss b/xz_mini/pages/newVolunteerActivity/newVolunteerActivity.wxss new file mode 100644 index 0000000..33eab65 --- /dev/null +++ b/xz_mini/pages/newVolunteerActivity/newVolunteerActivity.wxss @@ -0,0 +1,75 @@ +.new-team{ + padding: 0 30rpx; + margin-bottom: 140rpx; +} +.row{ + display: flex; + justify-content: space-between; + height: 90rpx; +} +.row-title{ + line-height: 90rpx; + color: #242424; + font-size: 32rpx; + width: 24%; +} +.row-text{ + width: 75%; + display: flex; + align-items: center; + border-bottom: 1px solid #EBEBEB; +} +.row-text input{ + width: 100%; + height: 100%; +} +picker{ + width: 100%; + height: 100%; + line-height: 90rpx; +} +.intro, .intro textarea{ + height: 230rpx; +} +.intro textarea{ + padding: 26rpx 0; + box-sizing: border-box; + font-size: 32rpx; +} +.create{ + position: fixed; + bottom: 0; + left: 0; + right: 0; + padding: 15rpx 30rpx; + background: #fff; + box-shadow:0 0 17rpx 0 rgba(0,0,0,0.1); +} +.create-btn{ + background: #9F1512; + height: 80rpx; + border-radius: 10rpx; + color: #fff; + font-size: 32rpx; + display: flex; + justify-content: center; + align-items: center; +} +.img-row{ + height: auto; +} +.img-row .row-text{ + padding-top: 20rpx; + display: flex; + flex-wrap: wrap; + justify-content: space-between; +} +.row-img{ + width: 240rpx; + height: 130rpx; + margin-right: 20rpx; + margin-bottom: 20rpx; +} +.row-img:nth-child(even){ + margin-right: 0; +} \ No newline at end of file diff --git a/xz_mini/pages/newsDetail/newsDetail.js b/xz_mini/pages/newsDetail/newsDetail.js new file mode 100644 index 0000000..042ec44 --- /dev/null +++ b/xz_mini/pages/newsDetail/newsDetail.js @@ -0,0 +1,287 @@ +// pages/newsDetail/newsDetail.js +var app = getApp(); +var audioContentx = null; +Page({ + + /** + * 页面的初始数据 + */ + data: { + newsId: '', + newsBean: null, + imgUrl: app.imgUrl, + pageHeight: 500, + currentVideoUrl: '', + currentDesc: '', + currentVideoIndex: 0, + sliderValue: 0, + currentTime: 0, + duration: 0, + currentAudioIndex: 0, + currentAudioDesc: '', + canPlay: false, + isPlaying: false, + totalValue: 0, + isPublicCode: false, + isPublic: false + }, + + /** + * 生命周期函数--监听页面加载 + */ + onLoad: function (options) { + this.setData({ + newsId: options.id, + pageHeight: wx.getSystemInfoSync().windowHeight, + isPublic: app.globalData.isPublic + }) + + this.saveBigdata(options.id); + }, + onShow() { + if (this.data.isPublic) { + this.setData({ + isPublicCode: false + }) + } + this.setData({ + newsBean: null + }) + this.getNewsDetail(); + }, + saveBigdata(id) { + var params = "小程序" + id + "新闻"; + var info = { + requestUrl: params + } + app.restAjax.get(app.restAjax.path(app.bigDataUrl + '/app/contentcensusrelease/log', []), info, null, + function (code, data) { + + }, function (code, err) { + + }) + }, + getNewsDetail() { + var _self = this; + // app.dialog.loading('正在加载'); + app.restAjax.get(app.restAjax.path('{newsUrl}/app/newscontent/getnewscontentbyidrelease/{id}', [app.newsUrl, _self.data.newsId]), null, null, + function (code, data) { + _self.setData({ + newsBean: data + }) + //视频 + if (_self.data.newsBean.newsContentType == '4') { + _self.setData({ + currentVideoUrl: _self.data.imgUrl + _self.data.newsBean.fileList[0].contentFileFileId, + currentDesc: _self.data.newsBean.fileList[0].contentFileText + }) + } + //音频 + if (_self.data.newsBean.newsContentType == '3') { + _self.setData({ + currentAudioUrl: _self.data.imgUrl + _self.data.newsBean.fileList[0].contentFileFileId, + currentAudioDesc: _self.data.newsBean.fileList[0].contentFileText, + }) + _self.initAudio() + } + + //判断是否需要关注公众号 + if (data.newsViewAuth && data.newsViewAuth.indexOf('2') !==-1) { + //需要关注 + //判断是否已经关注 + console.log('需要关注') + if (!_self.data.isPublic) { + _self.setData({ + isPublicCode: true + }) + } + } else { + console.log('无需关注') + //无需关注 + _self.setData({ + isPublicCode: false + }) + } + }, + function (code, data) { + app.dialog.msg(data.msg); + }, + function () { + wx.stopPullDownRefresh(); + // wx.hideLoading(); + }); + }, + + setVideoUrl(e) { + var _self = this; + var item = e.currentTarget.dataset.item + var index = e.currentTarget.dataset.index + this.setData({ + currentVideoUrl: _self.data.imgUrl + item.contentFileFileId, + currentDesc: item.contentFileText, + currentVideoIndex: index + }) + }, + //初始化音频播放器 + initAudio() { + var _self = this; + audioContentx = wx.createInnerAudioContext(); + + audioContentx.src = _self.data.currentAudioUrl; + // 准备好歌曲流,可以播放 + audioContentx.onCanplay(() => { + _self.setData({ + canPlay: true, + duration: audioContentx.duration * 1000 + }) + console.log(audioContentx.duration) + + }) + audioContentx.onTimeUpdate(function () { + const currentTime = audioContentx.currentTime * 1000 + _self.setData({ + duration: audioContentx.duration * 1000, + currentTime: currentTime, + sliderValue: audioContentx.currentTime, + totalValue: audioContentx.duration + }) + + }); + audioContentx.onStop(() => { + _self.setData({ + isPlaying: false, + sliderValue: 0, + }) + }); + audioContentx.onEnded(() => { + _self.setData({ + isPlaying: false, + sliderValue: 0, + }) + }); + audioContentx.onPlay(() => { + _self.setData({ + isPlaying: true, + }) + }); + audioContentx.onError((res) => { + console.log(res.errMsg) + console.log(res.errCode) + }) + + }, + move() { + + }, + + goAttention() { + wx.navigateTo({ + url: '/pages/commonQrCode/commonQrCode', + }) + }, + playAudio() { + if (audioContentx && audioContentx.paused) { + audioContentx.stop(); + audioContentx.play(); + this.setData({ + isPlaying: true + }) + } else { + audioContentx.pause(); + this.setData({ + isPlaying: false + }) + } + }, + //下一个音频 + nextAudio() { + var _self = this; + var index = _self.data.currentAudioIndex + 1 + if (index >= _self.data.newsBean.fileList.length) { + index = _self.data.newsBean.fileList.length - 1 + var item = _self.data.newsBean.fileList[index] + _self.setData({ + currentAudioIndex: index, + sliderValue: 0, + currentAudioDesc: item.contentFileText + }) + if (audioContentx) { + audioContentx.stop() + audioContentx.src = _self.data.imgUrl + item.contentFileFileId + audioContentx.play() + } + } else { + var item = _self.data.newsBean.fileList[index] + _self.setData({ + currentAudioIndex: index, + sliderValue: 0, + currentAudioDesc: item.contentFileText + }) + if (audioContentx) { + audioContentx.stop() + audioContentx.src = _self.data.imgUrl + item.contentFileFileId + audioContentx.play() + } + } + }, + setAudioUrl(e) { + var _self = this; + var item = e.currentTarget.dataset.item + var index = e.currentTarget.dataset.index + if (audioContentx) { + audioContentx.stop() + audioContentx.src = _self.data.imgUrl + item.contentFileFileId; + audioContentx.play() + this.setData({ + currentAudioIndex: index, + sliderValue: 0 + }) + } + }, + //上一个音频 + preAudio() { + var _self = this; + var index = _self.data.currentAudioIndex - 1 + if (index <= 0) { + index = 0 + var item = _self.data.newsBean.fileList[index] + _self.setData({ + currentAudioIndex: index, + sliderValue: 0, + currentAudioDesc: item.contentFileText + }) + if (audioContentx) { + audioContentx.stop() + audioContentx.src = _self.data.imgUrl + item.contentFileFileId + audioContentx.play() + } + } else { + var item = _self.data.newsBean.fileList[index] + _self.setData({ + currentAudioIndex: index, + sliderValue: 0, + currentAudioDesc: item.contentFileText + }) + if (audioContentx) { + audioContentx.stop() + audioContentx.src = _self.data.imgUrl + item.contentFileFileId + audioContentx.play() + } + } + }, + //slider进度调整 + handleSliderChange(event) { + this.setData({ + currentTime: event.detail.value * 1000 + }) + audioContentx.pause() + audioContentx.seek(event.detail.value) + audioContentx.play() + }, + onUnload() { + if (audioContentx) { + audioContentx.stop(); + audioContentx.destroy(); + } + } +}) \ No newline at end of file diff --git a/xz_mini/pages/newsDetail/newsDetail.json b/xz_mini/pages/newsDetail/newsDetail.json new file mode 100644 index 0000000..0cbeeb7 --- /dev/null +++ b/xz_mini/pages/newsDetail/newsDetail.json @@ -0,0 +1,6 @@ +{ + "usingComponents": { + "custom-content": "/components/expandabletext/expandabletext" + }, + "pageOrientation": "auto" +} \ No newline at end of file diff --git a/xz_mini/pages/newsDetail/newsDetail.wxml b/xz_mini/pages/newsDetail/newsDetail.wxml new file mode 100644 index 0000000..5cc0780 --- /dev/null +++ b/xz_mini/pages/newsDetail/newsDetail.wxml @@ -0,0 +1,89 @@ + + + + 关注公众号即可阅读 + 去关注 + + + + + + {{newsBean.newsContentTitle}} + + 新闻来源:{{newsBean.newsContentResource}} + 发布时间:{{newsBean.newsContentPublishTime}} + + + + + + + + + + + + + + + + + + + + + + + + + + + {{format.formatDuration(currentTime)}} + + {{format.formatDuration(duration)}} + + + + + + + 目录 + + + {{index+1}} + + + + + | + 详情 + + {{currentAudioDesc}} + + + + + + 目录 + + + {{index+1}} + + + + + | + 详情 + + {{currentDesc}} + + + + + + + + + + + \ No newline at end of file diff --git a/xz_mini/pages/newsDetail/newsDetail.wxss b/xz_mini/pages/newsDetail/newsDetail.wxss new file mode 100644 index 0000000..6138bac --- /dev/null +++ b/xz_mini/pages/newsDetail/newsDetail.wxss @@ -0,0 +1,238 @@ +page { + width: 100%; + height: 100%; +} + +.news-title { + padding: 20rpx 30rpx; + font-size: 34rpx; + font-weight: bold; + color: #242424; + text-align: center; +} + +.news-attr-box { + display: flex; + flex-direction: row; + justify-content: center; + align-items: center; +} + +.news-attr { + font-size: 24rpx; + color: #949494; +} + +.news-attr:nth-of-type(n+2) { + margin-left: 20rpx; +} + +.news-content { + padding: 20rpx 20rpx; + font-size: 34rpx; + color: #242424; +} + +.img-box { + display: flex; + flex-direction: row; + justify-content: center; + align-items: center; + background: black; +} + +.swiper-item { + width: 100%; + height: 100%; + position: absolute; + transform: translate(0%, 0px) translateZ(0px); + display: flex; + flex-direction: column; + justify-content: center; + align-items: center; +} + +.item-txt { + position: absolute; + color: white; + font-size: 24rpx; + bottom: 0rpx; +} + +.video-box { + display: flex; + flex-direction: column; + justify-content: flex-start; + align-items: flex-start; + background: #242424; +} + +.video-box video { + width: 100%; +} + +.video-category { + display: flex; + flex-direction: row; + justify-content: flex-start; + align-items: flex-start; + padding-bottom: 30rpx; + margin: 20rpx; + flex-wrap: wrap; +} + +.category-title { + font-size: 34rpx; + color: white; + align-self: center; + margin-top: 20rpx; +} + +.category-item { + font-size: 30rpx; + color: white; + border: 1rpx solid #949494; + padding: 20rpx; + margin: 5rpx; +} + +.category-item-sel { + border: 1rpx solid #f30000; + color: #f30000; + background: #97979741; +} + +.desc-box { + color: #f30000; + margin-top: 40rpx; + padding-left: 20rpx; +} + + +.desc { + font-size: 28rpx; + color: #242424; + padding: 30rpx 40rpx; +} + +.audio-box { + display: flex; + flex-direction: column; + justify-content: center; + align-items: flex-start; + background: black; + color: white; +} + +.audio-img { + display: flex; + flex-direction: column; + justify-content: center; + align-items: center; + width: 100%; + height: 400rpx; +} + +.img-bg { + width: 100%; + height: 400rpx; +} + +.img-loading { + width: 200rpx; + height: 200rpx; + position: absolute; + top: calc(50%-50rpx); + left: calc(50%-50rpx); +} + +.progress { + display: flex; + flex-direction: row; + justify-content: center; + align-items: center; + width: 100%; +} + +.slider { + margin: 10rpx; + width: 50%; +} + +.option { + display: flex; + flex: 1; + justify-content: space-between; + align-items: center; + padding-bottom: 20rpx; + width: 70%; + align-self: center; + margin-top: 20rpx; +} + +.btn-mode, +.btn-music { + width: 70rpx; + height: 70rpx; +} + +.btn-prev, +.btn-next { + width: 70rpx; + height: 70rpx; +} + +.btn-pause { + width: 140rpx; + height: 140rpx; +} + +.current { + font-size: 28rpx; + margin-right: 30rpx; +} + +.duration { + font-size: 28rpx; + margin-left: 30rpx; +} + +.btn { + width: 64rpx; + height: 64rpx; +} + +.page-mask { + width: 100%; + height: 100%; + background: rgba(0, 0, 0, 0.6); + position: fixed; + top: 0; + left: 0; + z-index: 99999999; + display: flex; + flex-direction: column; + justify-content: center; + align-items: center; + backdrop-filter: blur(10rpx); +} + +.mask-btn { + background-color: #4CAF50; + border: none; + color: white; + padding: 10rpx 80rpx; + text-align: center; + text-decoration: none; + display: inline-block; + font-size: 26rpx; + margin-top: 30rpx; + border-radius: 10rpx; +} + +.mask-hint { + font-size: 40rpx; + color: #ffffff; + font-weight: bold; + text-align: center; +} \ No newline at end of file diff --git a/xz_mini/pages/newsList/newsList.js b/xz_mini/pages/newsList/newsList.js new file mode 100644 index 0000000..74f1e29 --- /dev/null +++ b/xz_mini/pages/newsList/newsList.js @@ -0,0 +1,146 @@ +// pages/newsList/newsList.js +var app = getApp(); +Page({ + /** + * 页面的初始数据 + */ + data: { + news: { + newsUrl: app.newsUrl, + newsDictionaries: [], + newsList: [], + }, + dirId: '', //tab Id + currentNewsDictionariesId: '', + currentPage: 1, + rows: 10, + areaId: app.areaCode, + defaultAreaId: app.areaCode + }, + //获取下级子目录 + doGetNewsDictionariesList: function () { + var self = this; + app.dialog.loading('正在加载'); + app.restAjax.get(app.restAjax.path('{newsUrl}/app/newsdirectories/listsub/areaauth/release/{newsDirectoriesId}/{areaCode}', [self.data.news.newsUrl, self.data.dirId, app.areaCode]), + null, + null, + function (code, data) { + self.setData({ + 'news.newsDictionaries': data, + currentNewsDictionariesId: self.data.dirId + }) + self.doGetNewsList(1); + }, + function (code, data) { + app.dialog.msg(data.msg); + }, + function () { }); + }, + doClickDictionaries: function (event) { + var self = this; + console.log(event.currentTarget.dataset.newsDirectoriesId) + self.setData({ + currentNewsDictionariesId: event.currentTarget.dataset.newsDirectoriesId + }); + self.doGetNewsList(1); + }, + //获取新闻 + doGetNewsList: function (page, lv) { + var self = this; + app.dialog.loading('正在加载'); + var info = { + page: page, + rows: self.data.rows + } + if (self.data.currentNewsDictionariesId == self.data.dirId) { + info.newsDirectoriesParentId = self.data.dirId; + } else { + info.newsDirectoriesId = self.data.currentNewsDictionariesId; + } + var tempAreaCode = app.areaCode; + if (lv) { + tempAreaCode = self.data.areaId; + } + app.restAjax.get(app.restAjax.path('{newsUrl}/app/newscontent/listpagenewscontentrelease/{areaCode}', [self.data.news.newsUrl, tempAreaCode]), info, null, function (code, data) { + var newsArray; + if (page <= 1) { + newsArray = data.rows; + } else { + newsArray = self.data.news.newsList; + newsArray = newsArray.concat(data.rows); + } + self.setData({ + currentPage: page, + 'news.newsList': newsArray + }) + if (data.rows.length == 0) { + app.dialog.msg('暂无数据'); + return; + } + }, function (code, data) { + app.dialog.msg(data.msg); + }, function () { + wx.stopPullDownRefresh(); + wx.hideLoading(); + }); + }, + goNewsDetail: function (event) { + wx.navigateTo({ + url: '../newsDetail/newsDetail?id=' + event.currentTarget.dataset.item.newsContentId + }) + }, + getAreaList: function () { + var self = this; + app.restAjax.get(app.restAjax.path(app.usercenterUrl + '/app/area/listbyparentidrelease/' + app.areaId, []), + self.data.pages, null, + function (code, data) { + if (code == '200') { + self.setData({ + areaList: data + }) + } + } + ) + }, + changeArea: function (e) { + app.dialog.loading('正在加载'); + var lv = parseInt(e.currentTarget.dataset.level) + 1 + this.setData({ + areaId: e.currentTarget.dataset.area + }) + this.doGetNewsList(1, lv) + }, + //加载全部类型 + doClearCurrentNewsDictionariesId: function () { + var self = this; + self.setData({ + currentNewsDictionariesId: self.data.dirId + }); + self.doGetNewsList(1); + }, + //加载全部地区 + loadAll: function () { + this.setData({ + areaId: app.areaCode + }) + this.doGetNewsList(1) + }, + /** + * 生命周期函数--监听页面加载 + */ + onLoad: function (options) { + var self = this; + self.setData({ + dirId: options.id + }) + self.doGetNewsDictionariesList(); + self.getAreaList(); + }, + onReachBottom() { + this.setData({ + currentPage: this.data.currentPage + 1 + }) + this.doGetNewsList(this.data.currentPage) + } + +}) \ No newline at end of file diff --git a/xz_mini/pages/newsList/newsList.json b/xz_mini/pages/newsList/newsList.json new file mode 100644 index 0000000..8275159 --- /dev/null +++ b/xz_mini/pages/newsList/newsList.json @@ -0,0 +1,6 @@ +{ + "usingComponents": {}, + "enablePullDownRefresh": true, + "backgroundTextStyle": "dark", + "onReachBottomDistance": 50 +} \ No newline at end of file diff --git a/xz_mini/pages/newsList/newsList.wxml b/xz_mini/pages/newsList/newsList.wxml new file mode 100644 index 0000000..827f68c --- /dev/null +++ b/xz_mini/pages/newsList/newsList.wxml @@ -0,0 +1,101 @@ + + + + + 全部 + + + + + {{item.directoriesName}} + + + + + + + 全部 + + + + + {{item.areaName}} + + + + + + + + + {{item.newsContentTitle}} + + + + + 来源:{{item.newsContentResource}} + {{item.newsContentPublishTime}} + + + + + + + + {{item.newsContentTitle}} + + 来源:{{item.newsContentResource}} + {{item.newsContentPublishTime}} + + + + + + {{item.newsContentTitle}} + + 来源:{{item.newsContentResource}} + {{item.newsContentPublishTime}} + + + + + + + + {{item.newsContentTitle}} + + + + + 来源:{{item.newsContentResource}} + {{item.newsContentPublishTime}} + + + + {{item.newsContentTitle}} + + 来源:{{item.newsContentResource}} + {{item.newsContentPublishTime}} + + + + {{item.newsContentTitle}} + + + + + + 来源:{{item.newsContentResource}} + {{item.newsContentPublishTime}} + + + + {{item.newsContentTitle}} + + 来源:{{item.newsContentResource}} + {{item.newsContentPublishTime}} + + + + + \ No newline at end of file diff --git a/xz_mini/pages/newsList/newsList.wxss b/xz_mini/pages/newsList/newsList.wxss new file mode 100644 index 0000000..2658c29 --- /dev/null +++ b/xz_mini/pages/newsList/newsList.wxss @@ -0,0 +1,232 @@ +.top-tab { + position: fixed; + top: 0; + left: 0; + right: 0; + background: #fff; + overflow-x: hidden; + z-index: 100; + box-shadow: 10rpx 10rpx 15rpx #f0f0f0; +} + +.type { + display: flex; + overflow-x: auto; + /* 隐藏滚动条 */ + scrollbar-width: none; + /* firefox */ + -ms-overflow-style: none; + /* IE 10+ */ + margin-left: 20rpx; +} + +.tab-box { + display: flex; + flex-direction: row; + justify-content: space-between; + align-items: center; + width: 25%; + min-width: fit-content; + position: relative; + height: 90rpx; + font-size: 30rpx; + color: #242424; + flex-shrink: 0; +} + +.tab-box.active { + color: #9F1512; +} + +.tab-box image { + width: 20rpx; + height: 40rpx; + /* position: absolute; + width: 15rpx; + height: 40rpx; + top: 50%; + margin-top: -20rpx; + display: none; */ +} + +.tab-box .txt { + padding: 0rpx 10rpx; + width: 100%; + text-align: center; +} + +.tab-box.active image { + display: block; +} + +.tab-box image.selected-l { + left: 20rpx; +} + +.tab-box image.selected-r { + right: 20rpx; +} + +.area { + display: flex; + /* z-index: 100; + overflow-x: auto; + white-space: nowrap; + position: fixed; + top: 90rpx; + left: 0; + right: 0; + border-bottom: 1px solid #DDD; + background: #fff; */ +} + +.area-box { + /* display: flex; + width: fit-content; + flex-direction: row; + height: 90rpx; */ + /* line-height: 90rpx; + text-align: center; */ + /* align-items: center; + justify-content: center; + padding: 0 20px; + box-sizing: border-box; + position: relative; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; + font-size: 30rpx; */ + display: flex; + flex-direction: row; + justify-content: center; + align-items: center; + width: 30%; + position: relative; + height: 90rpx; + font-size: 30rpx; + color: #242424; + flex-shrink: 0; +} + +.area-box.active { + color: #9F1512; +} + +.area-box image { + position: absolute; + width: 15rpx; + height: 40rpx; + top: 50%; + margin-top: -20rpx; + display: none; +} + +.area-box.active image { + display: block; +} + +.area-box image.selected-l { + left: 20rpx; +} + +.area-box image.selected-r { + right: 20rpx; +} + +.news { + padding: 30rpx; + border-bottom: 5px solid #FBFBFB; + margin-top: 180rpx; +} + +.news-box { + padding: 30rpx 0; + border-bottom: 1px solid #EBEBEB; + display: flex; + flex-direction: column; +} + +.news-title { + color: #242424; + font-size: 30rpx; + font-weight: bold; +} + +.news-info { + color: #949494; + margin-top: 15rpx; + font-size: 24rpx; +} + +.news-info text { + margin-right: 20rpx; +} + +.voice-box { + padding-right: 30px; + position: relative; +} + +.voice-box iamge { + position: absolute; + top: 0; + right: 0; + width: 25rpx; + height: 25rpx; +} + +.news-big-pic, +.news-small-pic { + margin-top: 10rpx; +} + +.news-big-pic { + position: relative; +} + +.news-big-pic image { + width: 100%; + height: 380rpx; +} + +.news-big-pic image.play-btn { + position: absolute; + top: 50%; + left: 50%; + transform: translate(-50%, -50%); + width: 80rpx; + height: 80rpx; +} + +.news-small-pic image { + width: 30%; + height: 150rpx; + margin-right: 20rpx; +} + +.transverse-news { + flex-direction: row; + justify-content: space-between; +} + +.news-row-img { + width: 30%; + height: 150rpx; +} + +.news-row-img image { + width: 100%; + height: 100%; +} + +.news-row-info { + width: 68%; +} + + +.voice-img { + position: absolute; + right: 0; + width: 48rpx; + height: 48rpx; +} \ No newline at end of file diff --git a/xz_mini/pages/order/order.js b/xz_mini/pages/order/order.js new file mode 100644 index 0000000..86ba5be --- /dev/null +++ b/xz_mini/pages/order/order.js @@ -0,0 +1,114 @@ +var app = getApp(); +// pages/order/order.js +Page({ + + /** + * 页面的初始数据 + */ + data: { + venueUrl : app.venueUrl, + imgRoute : '/route/file/download/true/', + token: '', + orderList:[], + page: 1, + rows: 10, + total: 0 + }, + + //查询订单列表 + listOrderList: function() { + var self = this; + app.dialog.loading('请稍等'); + app.restAjax.get(app.restAjax.path('{venueUrl}/app/booking/listpagemyticket', [app.venueUrl]), + {page: self.data.page,rows: self.data.rows}, {headers:{token : self.data.token}}, + function (code, data) { + console.log(data); + data.rows.forEach(element => { + element.venuePanorama = element.venuePanorama.split(',')[0] + }); + self.setData({ + orderList: data.rows, + page: data.page, + total: data.total + }); + }, + function (code, data) { + app.dialog.msg(data.msg); + },function(){ + wx.hideLoading(); + }) + }, + + //订单详情页 + toOrderDetail: function(options){ + var groundBookingId = options.currentTarget.dataset.id; + if(!groundBookingId){ + return false; + } + wx.navigateTo({ + url: '../orderDetail/orderDetail?groundBookingId=' + groundBookingId, + }) + }, + + /** + * 生命周期函数--监听页面加载 + */ + onLoad: function (options) { + wx.getStorage({ + key: 'token', + success: (result) => { + this.setData({ + token : result.data + }) + this.listOrderList(); + } + }) + }, + + /** + * 生命周期函数--监听页面初次渲染完成 + */ + onReady: function () { + + }, + + /** + * 生命周期函数--监听页面显示 + */ + onShow: function () { + + }, + + /** + * 生命周期函数--监听页面隐藏 + */ + onHide: function () { + + }, + + /** + * 生命周期函数--监听页面卸载 + */ + onUnload: function () { + + }, + + /** + * 页面相关事件处理函数--监听用户下拉动作 + */ + onPullDownRefresh: function () { + }, + + /** + * 页面上拉触底事件的处理函数 + */ + onReachBottom: function () { + }, + + /** + * 用户点击右上角分享 + */ + onShareAppMessage: function () { + + } +}) \ No newline at end of file diff --git a/xz_mini/pages/order/order.json b/xz_mini/pages/order/order.json new file mode 100644 index 0000000..8835af0 --- /dev/null +++ b/xz_mini/pages/order/order.json @@ -0,0 +1,3 @@ +{ + "usingComponents": {} +} \ No newline at end of file diff --git a/xz_mini/pages/order/order.wxml b/xz_mini/pages/order/order.wxml new file mode 100644 index 0000000..242b03b --- /dev/null +++ b/xz_mini/pages/order/order.wxml @@ -0,0 +1,25 @@ + + + + + + + + {{item.venuesName}} + {{item.projectName}} + + 订单编号:{{item.serial}} + 下单时间:{{item.gmtCreate}} + + 免费 + ¥{{item.price}}元 + + + 已取消 + + + 已过期 + + + + \ No newline at end of file diff --git a/xz_mini/pages/order/order.wxss b/xz_mini/pages/order/order.wxss new file mode 100644 index 0000000..2b9f1f5 --- /dev/null +++ b/xz_mini/pages/order/order.wxss @@ -0,0 +1,58 @@ +.order{ + padding: 30rpx; +} +.order-box{ + border: 1px solid #DEDEDE; + border-radius: 10rpx; + overflow: hidden; + display: flex; + justify-content: space-between; + height: 200rpx; + margin-bottom: 20rpx; +} +.order-img{ + width: 35%; +} +.order-img image{ + width: 100%; + height: 200rpx; +} +.order-info{ + width: 63%; +} +.venue-project{ + font-size: 32rpx; + display: flex; + justify-content: space-between; + padding: 10rpx; +} +.venue{ + width: 65%; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; +} +.project{ + background:rgba(159,21,18,.1); + color: #9F1512; + padding: 0 10rpx; + display: flex; + align-items: center; + font-size: 20rpx; +} +.order-text{ + font-size: 30rpx; + color: #BBBBBB; + margin-bottom: 10rpx; +} +.price{ + font-size: 32rpx; + color:#9F1512; +} +.status{ + display: inline-block; + padding: 0 10rpx; + background: #DEDEDE; + color: #FFF; + font-size: 30rpx; +} \ No newline at end of file diff --git a/xz_mini/pages/orderDetail/orderDetail.js b/xz_mini/pages/orderDetail/orderDetail.js new file mode 100644 index 0000000..ed18594 --- /dev/null +++ b/xz_mini/pages/orderDetail/orderDetail.js @@ -0,0 +1,171 @@ +var app = getApp(); +// pages/orderDetail/orderDetail.js +Page({ + + /** + * 页面的初始数据 + */ + data: { + venueUrl : app.venueUrl, + imgRoute : '/route/file/download/true/', + token:'', + groundBookingId: '', + serial: '', + venuesName: '', + projectName: '', + venuePanorama: '', + gmtCreate: '', + price: '', + itemList:[], + cancelType: false, + }, + + //查询订单详情 + getDetail: function(){ + var self = this; + app.dialog.loading('请稍等'); + app.restAjax.get(app.restAjax.path('{venueUrl}/app/booking/getmyticketdetail/{groundBookingId}', [app.venueUrl,self.data.groundBookingId]), + {}, {headers:{token : self.data.token}}, + function (code, data) { + self.setData({ + serial: data.data.serial, + venuesName: data.data.venuesName, + projectName: data.data.projectName, + venuePanorama: data.data.venuePanorama.split(',')[0], + gmtCreate: data.data.gmtCreate.substring(0,19), + itemList: data.data.itemDTOList, + cancelType: false + }) + var totalPrice = 0; + self.data.itemList.forEach(element => { + if(element.orderType != '1'){ + totalPrice += Number(element.price); + } + if(element.orderType == '0'){ + self.setData({ + cancelType: true + }) + } + }); + self.setData({ + price: totalPrice + }) + }, + function (code, data) { + app.dialog.msg(data.msg); + },function(){ + wx.hideLoading(); + }) + }, + + //取消预订场次 + cancelItem: function(options){ + var self = this; + var bookingItemId = options.currentTarget.dataset.id; + var unCancelNum = 0; + self.data.itemList.forEach(element => { + if(element.orderType == '0'){ + unCancelNum++; + } + }); + //取消一个 + if(unCancelNum > 1){ + app.dialog.loading('请稍等'); + app.restAjax.delete(app.restAjax.path('{venueUrl}/app/booking/removemyticketitem/{groundBookingId}/{bookingItemId}', + [app.venueUrl,self.data.groundBookingId,bookingItemId]), {}, {headers:{token : self.data.token}}, + function (code, data) { + self.getDetail(); + }, + function (code, data) { + app.dialog.msg(data.msg); + },function(){ + wx.hideLoading(); + }) + } + //取消全部 + if(unCancelNum <= 1){ + self.cancelAll(); + } + }, + + //全部取消 + cancelAll: function(){ + var self = this; + app.dialog.loading('请稍等'); + app.restAjax.delete(app.restAjax.path('{venueUrl}/app/booking/removemyticket/{groundBookingId}', + [app.venueUrl,self.data.groundBookingId]), {}, {headers:{token : self.data.token}}, + function (code, data) { + wx.navigateBack() + }, + function (code, data) { + app.dialog.msg(data.msg); + },function(){ + wx.hideLoading(); + }) + }, + + /** + * 生命周期函数--监听页面加载 + */ + onLoad: function (options) { + wx.getStorage({ + key: 'token', + success: (result) => { + this.setData({ + token : result.data, + groundBookingId: options.groundBookingId + }) + this.getDetail(); + } + }) + }, + + /** + * 生命周期函数--监听页面初次渲染完成 + */ + onReady: function () { + + }, + + /** + * 生命周期函数--监听页面显示 + */ + onShow: function () { + + }, + + /** + * 生命周期函数--监听页面隐藏 + */ + onHide: function () { + + }, + + /** + * 生命周期函数--监听页面卸载 + */ + onUnload: function () { + + }, + + /** + * 页面相关事件处理函数--监听用户下拉动作 + */ + onPullDownRefresh: function () { + + }, + + /** + * 页面上拉触底事件的处理函数 + */ + onReachBottom: function () { + + }, + + /** + * 用户点击右上角分享 + */ + onShareAppMessage: function () { + + } +}) \ No newline at end of file diff --git a/xz_mini/pages/orderDetail/orderDetail.json b/xz_mini/pages/orderDetail/orderDetail.json new file mode 100644 index 0000000..8835af0 --- /dev/null +++ b/xz_mini/pages/orderDetail/orderDetail.json @@ -0,0 +1,3 @@ +{ + "usingComponents": {} +} \ No newline at end of file diff --git a/xz_mini/pages/orderDetail/orderDetail.wxml b/xz_mini/pages/orderDetail/orderDetail.wxml new file mode 100644 index 0000000..0839f96 --- /dev/null +++ b/xz_mini/pages/orderDetail/orderDetail.wxml @@ -0,0 +1,40 @@ + + + + + + {{venuesName}} + + 订单编号:{{serial}} + + + 下单时间:{{gmtCreate}} + + + 价  格: - + + + 价  格: {{price}}元 + + + + + {{projectName}}-预定详情 + + + + {{item.bookingOrderDate}} + {{item.timeStr}}-{{item.timeEnd}} + + + {{item.groundName}} + 免费 + {{item.price}}元 + 取消预定 + 已取消 + 已过期 + + + + +全部取消 \ No newline at end of file diff --git a/xz_mini/pages/orderDetail/orderDetail.wxss b/xz_mini/pages/orderDetail/orderDetail.wxss new file mode 100644 index 0000000..0b908da --- /dev/null +++ b/xz_mini/pages/orderDetail/orderDetail.wxss @@ -0,0 +1,92 @@ +.venue{ + padding: 15rpx 30rpx; + display: flex; + justify-content: space-between; + border-bottom: 3px solid #DEDEDE; +} +.venue-img{ + width: 35%; + height: 180rpx; +} +.venue-img image{ + width: 100%; + height: 100%; +} +.venue-info{ + width: 63%; +} +.venue-title{ + font-size: 32rpx; + color: #000; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; +} +.time-number{ + font-size: 26rpx; + margin-top: 10rpx; +} +.time-number text{ + color: #949494; +} +.book{ + margin-top: 20rpx; + padding: 0 30rpx; + margin-bottom: 85rpx; +} +.book-title{ + font-size: 32rpx; + padding-left: 25rpx; + border-left: 5px solid #9F1512; +} +.order{ + margin-top: 20rpx; +} +.order-box{ + display: inline-block; + width: 32%; + margin-right: 1%; + border: 1px solid #9F1512; + border-radius: 10rpx; + text-align: center; + margin-bottom: 10rpx; +} +.order-box:nth-child(3n){ + margin-right: 0; +} +.top{ + background: #9F1512; + color: #fff; + font-size: 28rpx; +} +.bottom{ + font-size: 28rpx; +} +.cancel{ + width: 70%; + margin: 0 auto 10rpx; + background: #9F1512; + color: #fff; + padding: 5rpx 0; + border-radius: 10rpx; +} +.cancel-all{ + position: fixed; + bottom: 0; + left: 0; + right: 0; + height: 80rpx; + display: flex; + justify-content: center; + align-items: center; + background: #9F1512; + color: #fff; + font-size: 32rpx; +} +.time-out{ + width: 70%; + margin: 0 auto 10rpx; + background: rgba(159,21,18,.1); + color: #BBBBBB; + border-radius: 10rpx; +} \ No newline at end of file diff --git a/xz_mini/pages/register/register.js b/xz_mini/pages/register/register.js new file mode 100644 index 0000000..1513315 --- /dev/null +++ b/xz_mini/pages/register/register.js @@ -0,0 +1,66 @@ +// pages/register/register.js +Page({ + + /** + * 页面的初始数据 + */ + data: { + + }, + + /** + * 生命周期函数--监听页面加载 + */ + onLoad: function (options) { + + }, + + /** + * 生命周期函数--监听页面初次渲染完成 + */ + onReady: function () { + + }, + + /** + * 生命周期函数--监听页面显示 + */ + onShow: function () { + + }, + + /** + * 生命周期函数--监听页面隐藏 + */ + onHide: function () { + + }, + + /** + * 生命周期函数--监听页面卸载 + */ + onUnload: function () { + + }, + + /** + * 页面相关事件处理函数--监听用户下拉动作 + */ + onPullDownRefresh: function () { + + }, + + /** + * 页面上拉触底事件的处理函数 + */ + onReachBottom: function () { + + }, + + /** + * 用户点击右上角分享 + */ + onShareAppMessage: function () { + + } +}) \ No newline at end of file diff --git a/xz_mini/pages/register/register.json b/xz_mini/pages/register/register.json new file mode 100644 index 0000000..8835af0 --- /dev/null +++ b/xz_mini/pages/register/register.json @@ -0,0 +1,3 @@ +{ + "usingComponents": {} +} \ No newline at end of file diff --git a/xz_mini/pages/register/register.wxml b/xz_mini/pages/register/register.wxml new file mode 100644 index 0000000..b8a1e9b --- /dev/null +++ b/xz_mini/pages/register/register.wxml @@ -0,0 +1,56 @@ + + + 登录账号: + + + + + + 是否公开: + + + + + + + + + 手机号: + + + + + + 验证码: + + + 获取验证码 + + + + 姓 名: + + + + + + 身份证: + + + + + + + + + + + 立即注册 + + \ No newline at end of file diff --git a/xz_mini/pages/register/register.wxss b/xz_mini/pages/register/register.wxss new file mode 100644 index 0000000..eb0d118 --- /dev/null +++ b/xz_mini/pages/register/register.wxss @@ -0,0 +1,83 @@ +.new-team{ + padding: 0 30rpx; +} +.row{ + display: flex; + justify-content: space-between; + height: 90rpx; +} +.row-title{ + line-height: 90rpx; + color: #242424; + font-size: 32rpx; + width: 24%; +} +.row-text{ + width: 75%; + display: flex; + align-items: center; + border-bottom: 1px solid #EBEBEB; +} +label{ + margin-right: 30rpx; +} +.row-text input{ + width: 100%; + height: 100%; +} +.row-text input.yzm{ + width: 70%; + padding-right: 10rpx; + box-sizing: border-box; +} +.get-yzm{ + display: inline-block; + width: 30%; + height: 40rpx; + background: rgba(159,21,18,.1); + color: #9F1512; + font-size: 26rpx; + text-align: center; + line-height: 40rpx; +} +picker{ + width: 100%; + height: 100%; + line-height: 90rpx; +} +.intro, .intro textarea{ + height: 230rpx; +} +.intro textarea{ + padding: 26rpx 0; + box-sizing: border-box; + font-size: 32rpx; +} +.create{ + position: fixed; + bottom: 0; + left: 0; + right: 0; + padding: 0 30rpx 30rpx; + background: #fff; +} +.agree{ + display: flex; + align-items: center; + font-size: 30rpx; + padding-top: 5rpx; +} +.agree-checkbox{ + transform: scale(0.8,0.8); +} +.create-btn{ + background: #9F1512; + height: 80rpx; + border-radius: 10rpx; + color: #fff; + font-size: 32rpx; + display: flex; + justify-content: center; + align-items: center; + margin-top: 15rpx; +} \ No newline at end of file diff --git a/xz_mini/pages/resource/resource.js b/xz_mini/pages/resource/resource.js new file mode 100644 index 0000000..558a866 --- /dev/null +++ b/xz_mini/pages/resource/resource.js @@ -0,0 +1,143 @@ +// pages/resource/resource.js +const app = getApp() +Page({ + + /** + * 页面的初始数据 + */ + data: { + newsUrl: app.newsUrl, + directoriesParentId: '98c74389-2088-499b-a046-8611bdc57ea4', + typeList: [], + currentPage: 1, + rows: 10, + currentNewsDictionariesId: '', + trainList: [] + }, + getType: function () { + var self = this + app.restAjax.get(app.restAjax.path('{newsUrl}/app/newsdirectories/listnewsdirectoriesrelease', [app.newsUrl]), { + directoriesParentId: self.data.directoriesParentId + }, null, function (code, data) { + self.setData({ + typeList: data + }) + self.getList(1) + }) + }, + changeType: function (e) { + this.setData({ + currentNewsDictionariesId: e.currentTarget.dataset.newsDirectoriesId + }) + this.getList(1) + }, + getList: function (page) { + var self = this + app.dialog.loading('正在加载'); + var info = { + newsDirectoriesParentId: self.data.directoriesParentId, + newsDirectoriesId: self.data.currentNewsDictionariesId ? self.data.currentNewsDictionariesId : '', + page: page, + rows: self.data.rows + } + app.restAjax.get(app.restAjax.path('{newsUrl}/app/newscontent/listpagenewscontentrelease/{areaCode}', [app.newsUrl,app.areaCode]), info, null, function (code, data) { + var newsArray; + for (var i = 0; i < data.rows.length; i++) { + data.rows[i].newsContentCoverList = data.rows[i].newsContentCoverList[0].contentCoverId + } + if(page <= 1) { + newsArray = data.rows; + } else { + newsArray = self.data.trainList; + newsArray = newsArray.concat(data.rows); + } + self.setData({ + currentPage: page, + trainList: newsArray + }) + if(data.rows.length == 0) { + app.dialog.msg('暂无数据'); + return; + } + }, function(code, data) { + app.dialog.msg(data.msg); + }, function() { + wx.stopPullDownRefresh(); + wx.hideLoading(); + }) + }, + goNewsDetail: function (e) { + var url = e.currentTarget.dataset.templateRecordUrl + var link = e.currentTarget.dataset.contentLink + if (link) { + wx.navigateTo({ + url: '../template/template?link=' + encodeURIComponent(link), + }) + } else { + wx.navigateTo({ + url: '../template/template?url=' + encodeURIComponent(url), + }) + } + }, + doClearCurrentNewsDictionariesId: function () { + this.setData({ + currentNewsDictionariesId: '' + }) + this.getList(1) + }, + /** + * 生命周期函数--监听页面加载 + */ + onLoad: function (options) { + this.getType() + }, + + /** + * 生命周期函数--监听页面初次渲染完成 + */ + onReady: function () { + + }, + + /** + * 生命周期函数--监听页面显示 + */ + onShow: function () { + + }, + + /** + * 生命周期函数--监听页面隐藏 + */ + onHide: function () { + + }, + + /** + * 生命周期函数--监听页面卸载 + */ + onUnload: function () { + + }, + + /** + * 页面相关事件处理函数--监听用户下拉动作 + */ + onPullDownRefresh: function () { + this.getList(1); + }, + + /** + * 页面上拉触底事件的处理函数 + */ + onReachBottom: function () { + this.getList(this.data.currentPage + 1); + }, + + /** + * 用户点击右上角分享 + */ + onShareAppMessage: function () { + + } +}) \ No newline at end of file diff --git a/xz_mini/pages/resource/resource.json b/xz_mini/pages/resource/resource.json new file mode 100644 index 0000000..8835af0 --- /dev/null +++ b/xz_mini/pages/resource/resource.json @@ -0,0 +1,3 @@ +{ + "usingComponents": {} +} \ No newline at end of file diff --git a/xz_mini/pages/resource/resource.wxml b/xz_mini/pages/resource/resource.wxml new file mode 100644 index 0000000..dee09d3 --- /dev/null +++ b/xz_mini/pages/resource/resource.wxml @@ -0,0 +1,25 @@ + + + + + 全部 + + + + + {{item.directoriesName}} + + + + + + + {{item.newsContentTitle}} + + + + + {{item.newsContentPublishTime}} + + + \ No newline at end of file diff --git a/xz_mini/pages/resource/resource.wxss b/xz_mini/pages/resource/resource.wxss new file mode 100644 index 0000000..7912152 --- /dev/null +++ b/xz_mini/pages/resource/resource.wxss @@ -0,0 +1,141 @@ +.top-tab{ + position: fixed; + top: 0; + left: 0; + right: 0; + background: #fff; + overflow-x: auto; +} +.type{ + display: flex; +} +.tab-box{ + display: inline-flex; + justify-content: center; + align-items: center; + width: 30%; + position: relative; + height: 90rpx; + font-size: 30rpx; + color: #242424; + flex-shrink: 0; + padding: 0 10rpx; +} +.tab-box.active{ + color: #9F1512; +} +.tab-box image{ + position: absolute; + width: 15rpx; + height: 40rpx; + top: 50%; + margin-top: -20rpx; + display: none; +} +.tab-box.active image{ + display: block; +} +.tab-box image.selected-l{ + left: 10rpx; +} +.tab-box image.selected-r{ + right: 10rpx; +} +.area{ + overflow-x: auto; + white-space: nowrap; + position: fixed; + top: 90rpx; + left: 0; + right: 0; + border-bottom: 1px solid #DDD; + background: #fff; +} +.area-box{ + display: inline-flex; + width: 30%; + height: 90rpx; + /* line-height: 90rpx; + text-align: center; */ + align-items: center; + justify-content: center; + padding: 0 20px; + box-sizing: border-box; + position: relative; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; + font-size: 30rpx; +} +.area-box.active{ + color: #9F1512; +} +.area-box image{ + position: absolute; + width: 15rpx; + height: 40rpx; + top: 50%; + margin-top: -20rpx; + display: none; +} +.area-box.active image{ + display: block; +} +.area-box image.selected-l{ + left: 20rpx; +} +.area-box image.selected-r{ + right: 20rpx; +} +.news{ + padding: 0 30rpx; + border-bottom: 5px solid #FBFBFB; + margin-top: 90rpx; +} +.news-box{ + padding: 30rpx 0; + border-bottom: 1px solid #EBEBEB; + display: flex; + flex-direction: column; +} +.news-box:first-child{ + padding-top: 0; +} +.news-title{ + color: #242424; + font-size: 30rpx; + font-weight: bold; +} +.news-info{ + color: #949494; + margin-top: 15rpx; + font-size: 24rpx; +} +.news-info text{ + margin-right: 20rpx; +} +.news-big-pic, .news-small-pic{ + margin-top: 10rpx; +} +.news-big-pic image{ + width: 100%; +} +.news-small-pic image{ + width: 100%; + height: 400rpx; +} +.transverse-news{ + flex-direction: row; + justify-content: space-between; +} +.news-row-img{ + width: 30%; + height: 150rpx; +} +.news-row-img image{ + width: 100%; + height: 100%; +} +.news-row-info{ + width: 68%; +} \ No newline at end of file diff --git a/xz_mini/pages/serviceActivityDetail/serviceActivityDetail.js b/xz_mini/pages/serviceActivityDetail/serviceActivityDetail.js new file mode 100644 index 0000000..d1b0c79 --- /dev/null +++ b/xz_mini/pages/serviceActivityDetail/serviceActivityDetail.js @@ -0,0 +1,313 @@ +// pages/activityDetail/activityDetail.js +var app = getApp(); +Page({ + + /** + * 页面的初始数据 + */ + data: { + dataMap: {}, + token: '', + serviceId: '', + type: '', + + teamIndex: 0, + teamResult: '请选择服务区域', + team: {}, // 服务区域-市 + teamArray: [], // 服务区域-市 + }, + getToken: function () { + var self = this; + return new Promise(resolve => { + wx.getStorage({ + key: 'token', + success(res) { + self.setData({ + token: res.data + }) + return resolve(); + } + }) + }) + }, + getDetail: function (id) { + var self = this; + app.restAjax.get(app.restAjax.path(app.volunteerUrl + '/app/volunteerservice/getvolunteerservicebyid/' + id, []), + {}, { + headers: { + 'token': self.data.token + } + }, function (code, data) { + if ('200' == code) { + var ph = data.photo + if (data.photo.endsWith(",")) { + ph = data.photo.substr(0, data.photo.length - 1); + } + data.photo = app.volunteerUrl + '/route/file/download/true/' + ph; + self.setData({ + dataMap: data + }) + } + }, function () { + + }, function () { + + }) + }, + /** + * 志愿者团队报名 + */ + enroll: function (e) { + var self = this; + self.setData({ + serviceId: e.target.dataset.serviceid, + type: e.target.dataset.type + }) + }, + /** + * + * @param {志愿者报名} e + */ + volunteerEnroll: function (e) { + var self = this; + self.setData({ + serviceId: e.target.dataset.serviceid, + type: e.target.dataset.type + }) + + // 提交报名请求 + var serviceMemberVO = { + serviceId: self.data.serviceId, + voluntaryType: self.data.type + } + self.sendEnrollRequest(serviceMemberVO); + + }, + /** + * + * @param {团队报名} e + */ + teamChange: function (e) { + var self = this; + + self.setData({ + teamIndex: e.detail.value + }) + + // 提交报名请求 + var serviceMemberVO = { + serviceId: self.data.serviceId, + teamId: self.data.team[self.data.teamIndex].teamId, + voluntaryType: self.data.type + } + self.sendEnrollRequest(serviceMemberVO); + }, + /** + * + * @param {团队取消报名} e + */ + teamCancelChange: function (e) { + var self = this; + + self.setData({ + teamIndex: e.detail.value + }) + + self.sendCancelEnrollRequest(); + }, + /** + * + * @param {志愿者取消报名} e + */ + volunteerCancelEnroll: function (e) { + var self = this; + self.setData({ + serviceId: e.target.dataset.serviceid, + type: e.target.dataset.type, + teamArray: [] + }) + self.sendCancelEnrollRequest(); + }, + /** + * + * @param {发送报名请求} serviceMemberVO + */ + sendEnrollRequest: function (serviceMemberVO) { + var self = this; + app.restAjax.post(app.restAjax.path(app.volunteerUrl + '/app/servicemember/saveservicemember', []), + serviceMemberVO, { + headers: { + token: self.data.token + } + }, function (code, data) { + if ('200' == code) { + app.dialog.msg('注册成功!'); + wx.redirectTo({ + url: '../volunteer/volunteer', + }) + } + }, function () { + + }, function () { + + }) + }, + /** + * 发送取消报名请求 + */ + sendCancelEnrollRequest() { + var self = this; + var url; + if (self.data.teamArray.length > 0) { + url = app.volunteerUrl + '/app/servicemember/cancelapply/' + self.data.type + '/' + self.data.serviceId + '/' + self.data.team[self.data.teamIndex].teamId; + } else { + url = app.volunteerUrl + '/app/servicemember/cancelapply/' + self.data.type + '/' + self.data.serviceId + '/null'; + } + + app.restAjax.get(app.restAjax.path(url, []), {}, { + headers: { + token: self.data.token + } + }, function (code, data) { + if ('200' == code) { + app.dialog.msg('取消报名成功!'); + wx.redirectTo({ + url: '../volunteer/volunteer', + }) + } + }, function () { + + }, function () { + + }) + }, + /** + * 获取我的团队 + */ + getMyTeam: function () { + var self = this; + console.log(self.data.token) + app.restAjax.get(app.restAjax.path(app.volunteerUrl + '/app/team/myteamm', []), + {}, { + headers: { + token: self.data.token + } + }, function (code, data) { + if ('200' == code) { + var array = []; + for (var item of data.rows) { + delete item.teamArea; + delete item.teamAreaDictionaryName; + delete item.teamWatchword; + delete item.teamOwner; + delete item.memberId; + delete item.memberName; + delete item.gmtCreate; + delete item.photo; + delete item.count; + delete item.status; + delete item.content; + delete item.isTeamOwner; + delete item.checkStatus; + delete item.teamCounty; + delete item.teamCity; + delete item.teamCityDictionaryName; + delete item.teamCountyDictionaryName; + delete item.teamCity; + + array.push(item.teamName); + } + self.setData({ + teamArray: array, + team: data.rows + }) + } + }, function (code, data) { + app.dialog.msg(data.msg); + }, function () { + + }) + }, + toActivityHis: function (e) { + var self = this; + const status = e.currentTarget.dataset.status; + wx.navigateTo({ + url: '../activityDialog/activityDialog?serviceId=' + self.data.serviceId + '&status=' + status, + }) + }, + /** + * 生命周期函数--监听页面加载 + */ + onLoad: function (options) { + var id = options.id; + var self = this; + self.setData({ + serviceId: id + }) + this.getToken().then(result => { + this.getDetail(id); + this.getMyTeam(); + }) + this.saveBigdata(id); + }, + saveBigdata(id) { + var params = "小程序" + id + "志愿"; + var info = { + requestUrl: params + } + app.restAjax.get(app.restAjax.path(app.bigDataUrl + '/app/contentcensusrelease/log', []), info, null, + function (code, data) { + + }, function (code, err) { + + }) + }, + /** + * 生命周期函数--监听页面初次渲染完成 + */ + onReady: function () { + + }, + + /** + * 生命周期函数--监听页面显示 + */ + onShow: function () { + + }, + + /** + * 生命周期函数--监听页面隐藏 + */ + onHide: function () { + + }, + + /** + * 生命周期函数--监听页面卸载 + */ + onUnload: function () { + + }, + + /** + * 页面相关事件处理函数--监听用户下拉动作 + */ + onPullDownRefresh: function () { + + }, + + /** + * 页面上拉触底事件的处理函数 + */ + onReachBottom: function () { + + }, + + /** + * 用户点击右上角分享 + */ + onShareAppMessage: function () { + + } +}) \ No newline at end of file diff --git a/xz_mini/pages/serviceActivityDetail/serviceActivityDetail.json b/xz_mini/pages/serviceActivityDetail/serviceActivityDetail.json new file mode 100644 index 0000000..7360326 --- /dev/null +++ b/xz_mini/pages/serviceActivityDetail/serviceActivityDetail.json @@ -0,0 +1,4 @@ +{ + "usingComponents": {}, + "enablePullDownRefresh": true +} \ No newline at end of file diff --git a/xz_mini/pages/serviceActivityDetail/serviceActivityDetail.wxml b/xz_mini/pages/serviceActivityDetail/serviceActivityDetail.wxml new file mode 100644 index 0000000..5b40e73 --- /dev/null +++ b/xz_mini/pages/serviceActivityDetail/serviceActivityDetail.wxml @@ -0,0 +1,44 @@ + + + + + {{dataMap.serviceName}} + + + + 活动人数: + {{dataMap.count }} + + + + 活动时间: + {{dataMap.startTime}}至{{dataMap.endTime}} + + + + 活动地址: + {{dataMap.address }} + + + + + + 活动详情 + 评论列表 + + + + + + + + 报名 + + 报名 + + + + 取消报名 + + 取消报名 + \ No newline at end of file diff --git a/xz_mini/pages/serviceActivityDetail/serviceActivityDetail.wxss b/xz_mini/pages/serviceActivityDetail/serviceActivityDetail.wxss new file mode 100644 index 0000000..cb9f554 --- /dev/null +++ b/xz_mini/pages/serviceActivityDetail/serviceActivityDetail.wxss @@ -0,0 +1,97 @@ +.activity-img, .activity-img image{ + width: 100%; + height: 480rpx; +} +.activity-detail{ + position: absolute; + left: 0; + right: 0; + top: 430rpx; + background: #fff; + border-radius:30rpx 30rpx 0px 0px; + overflow: hidden; + padding-bottom: 120rpx; +} +.activity-title, .activity-info{ + padding: 30rpx; + font-size: 32rpx; + color: #242424; + border-bottom: 5px solid #FBFBFB; +} +.activity-text{ + line-height: 35rpx; + font-size: 28rpx; + margin-bottom: 15rpx; +} +.activity-text:last-child{ + margin-bottom: 0; +} +.activity-info image{ + width: 35rpx; + height: 35rpx; + margin-right: 10rpx; + vertical-align: middle; + margin-top: -5rpx; +} +.activity-text text{ + color: #BBBBBB; +} +.activity-container{ + padding: 30rpx; +} +.part{ + margin-bottom: 30rpx; +} +.part:last-child{ + margin-bottom: 0; +} +.part-title{ + border-left: 3px solid #9F1512; + color: #242424; + padding-left: 10rpx; + font-size: 30rpx; + margin-bottom: 10rpx; + display: flex; + justify-content: space-between; +} +.comment-btn{ + padding: 0 10rpx; + background: #9F1512; + color: #fff; + font-size: 28rpx; + border-radius: 10rpx; +} +.part-content{ + font-size: 28rpx; + line-height: 40rpx; +} +.part-info{ + line-height: 50rpx; + color: #242424; + font-size: 28rpx; +} +.part-info text{ + color: #BBBBBB; +} +.sign-box{ + position: fixed; + bottom: 0; + left: 0; + right: 0; + box-shadow:0px 0px 17px 0px rgba(0,0,0,0.1); + height: 120rpx; + padding: 20rpx 30rpx; + box-sizing: border-box; + background: #fff; +} +.sign-btn{ + width: 100%; + height: 80rpx; + background: #9F1512; + border-radius: 10rpx; + display: flex; + justify-content: center; + align-items: center; + font-size: 30rpx; + color: #fff; +} \ No newline at end of file diff --git a/xz_mini/pages/shop/shopcategory.js b/xz_mini/pages/shop/shopcategory.js new file mode 100644 index 0000000..215ff2f --- /dev/null +++ b/xz_mini/pages/shop/shopcategory.js @@ -0,0 +1,62 @@ +// pages/shop/shopcat.js +var app = getApp(); +Page({ + + /** + * 页面的初始数据 + */ + data: { + categoryOneList: [], + categorySeconList: [], + currentIndex: 0, + isHidePageLoading: false + }, + + /** + * 生命周期函数--监听页面加载 + */ + onLoad(options) { + this.getCategroyList(); + }, + getCategroyList() { + var _self = this + app.restAjax.get(app.restAjax.path('{shopUrl}/app/category/listztreerelease', [app.shopUrl]), null, null, function (code, data) { + if (data.length == 0) { + app.dialog.msg('暂无数据'); + return; + } + console.log(data) + _self.setData({ + categoryOneList: data, + categorySeconList: data[0].subList, + isHidePageLoading: true + }) + }, function (code, data) { + app.dialog.msg(data.msg); + _self.setData({ + isHidePageLoading: true + }) + }, function () { + wx.hideLoading(); + }) + }, + chooseOne(event) { + var index = event.currentTarget.dataset.index + var _self = this; + this.setData({ + currentIndex: index, + categorySeconList: _self.data.categoryOneList[index].subList + }) + }, + goList(e) { + var id = e.currentTarget.dataset.id + wx.navigateTo({ + url: '/subpages/goodslist/goodslist?id=' + id, + }) + }, + showCar() { + wx.navigateTo({ + url: '/subpages/goodscar/goodscar', + }) + } +}) \ No newline at end of file diff --git a/xz_mini/pages/shop/shopcategory.json b/xz_mini/pages/shop/shopcategory.json new file mode 100644 index 0000000..8835af0 --- /dev/null +++ b/xz_mini/pages/shop/shopcategory.json @@ -0,0 +1,3 @@ +{ + "usingComponents": {} +} \ No newline at end of file diff --git a/xz_mini/pages/shop/shopcategory.wxml b/xz_mini/pages/shop/shopcategory.wxml new file mode 100644 index 0000000..d3749f8 --- /dev/null +++ b/xz_mini/pages/shop/shopcategory.wxml @@ -0,0 +1,31 @@ + + + + + {{item.name}} + + + + + + {{item.name}} + > + + + + + {{it.name}} + + + + + 暂无数据 + + + + + + 购物车 + + + \ No newline at end of file diff --git a/xz_mini/pages/shop/shopcategory.wxss b/xz_mini/pages/shop/shopcategory.wxss new file mode 100644 index 0000000..8979b5c --- /dev/null +++ b/xz_mini/pages/shop/shopcategory.wxss @@ -0,0 +1,148 @@ +/* pages/shop/shopcat.wxss */ +page { + height: 100%; + background: #f6f6f6; +} + +.container-box { + display: flex; + flex-direction: row; + width: 100%; + height: 100%; +} + +.container-box .left { + display: flex; + flex-direction: column; + width: 35%; + height: 100%; + margin-top: 10rpx; + position: fixed; + top: 0; + left: 0; +} + +.category-item-default { + display: flex; + flex-direction: row; + padding: 20rpx 0rpx 20rpx 2rpx; + width: 100%; +} + + + +.category-item-active { + display: flex; + flex-direction: row; + padding: 20rpx 0rpx 20rpx 2rpx; + background: white; + width: 100%; +} + +.category-one-name { + margin-left: 20rpx; + padding: 10rpx 0rpx; + flex: 1; +} + + + + +.line { + background: #e70101; + width: 10rpx; + height: 60rpx; + align-self: center; +} + +.container-box .right { + display: flex; + flex-direction: column; + width: 65%; + position: absolute; + left: 35%; +} + +.category-card { + margin: 10rpx 10rpx 10rpx 0rpx; + border-radius: 20rpx; + min-height: 300rpx; + background-color: white; + box-shadow: 5rpx 5rpx 5rpx 5rpx rgba(0, 0, 0, 0, 1); + padding: 10rpx; +} + +.category-two-name { + display: flex; + flex-direction: row; + justify-content: space-between; + align-items: center; + padding: 20rpx 5rpx; +} + +.category-thrid-box { + display: flex; + flex-direction: row; + margin-top: 20rpx; + justify-content: flex-start; + align-items: center; + flex-wrap: wrap; +} + +.category-thrid-item { + width: 30%; + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; + font-size: 30rpx; + margin: 10rpx 0rpx; + text-align: center; +} + +.category-thrid-item image { + width: 82rpx; + height: 82rpx; + margin-bottom: 15rpx; +} + +.category-empty { + display: flex; + flex-direction: column; + justify-content: center; + align-items: center; + text-align: center; + align-self: center; + font-size: 30rpx; +} + +.category-empty image { + width: 96rpx; + height: 66rpx; +} + +.car-box { + display: flex; + flex-direction: column; + justify-content: center; + align-items: center; + position: fixed; + bottom: 30rpx; + right: 50rpx; + width: 100rpx; + height: 100rpx; + background: linear-gradient(to right bottom, rgb(243, 209, 55), rgb(245, 170, 9) 70px); + border-radius: 50%; + padding: 10rpx; + +} + +.car-box image { + width: 48rpx; + height: 48rpx; +} + +.car-box text { + font-size: 25rpx; + color: #9f1512; +} \ No newline at end of file diff --git a/xz_mini/pages/teamDetail/teamDetail.js b/xz_mini/pages/teamDetail/teamDetail.js new file mode 100644 index 0000000..eaaf2ce --- /dev/null +++ b/xz_mini/pages/teamDetail/teamDetail.js @@ -0,0 +1,168 @@ +// pages/teamDetail/teamDetail.js +var app = getApp(); +Page({ + + /** + * 页面的初始数据 + */ + data: { + token: '', + teamId: '', + dataMap: [], + memberData: {}, + checkData: {} + }, + getToken: function() { + var self = this; + return new Promise(resolve =>{ + wx.getStorage({ + key: 'token', + success(res) { + self.setData({ + token: res.data + }) + return resolve(); + } + }) + }) + }, + getDetail(teamId) { + var self = this; + app.restAjax.get(app.restAjax.path(app.volunteerUrl + '/app/team/getteambyid/' + teamId, []), + {}, { + headers: { + token: self.data.token + } + }, function(code, data) { + console.log(data) + if('200' == code) { + self.setData({ + dataMap: data + }) + } + }, function() { + + }, function() { + + }) + }, + getMember(teamId) { + var self = this; + app.restAjax.get(app.restAjax.path(app.volunteerUrl + '/app/teammember/listteammember?teamId=' + teamId, []), + {}, { + headers: { + token: self.data.token + } + }, function(code, data) { + if('200' == code) { + var teamMember = []; + var checkMember = []; + for(var item of data) { + if('1' == item.status) { + teamMember.push(item); + }else { + checkMember.push(item); + } + } + self.setData({ + memberData: teamMember, + checkData: checkMember + }) + } + }, function() { + + }, function() { + + }) + }, + agree(e) { + var self = this; + console.log(e) + var id = e.currentTarget.dataset.teammemberid; + var type = e.currentTarget.dataset.type; + app.restAjax.get(app.restAjax.path(app.volunteerUrl + '/app/teammember/checkmember/'+id+'/' + type + '?teamId=' + self.data.teamId, []), + {}, { + headers: { + token: self.data.token + } + }, function(code, data) { + if('200' == code) { + if('1' == type) { + app.dialog.msg('审核通过!'); + }else { + app.dialog.msg('审核驳回!'); + } + wx.navigateTo({ + url: '../myVolunteerTeam/myVolunteerTeam', + }) + } + }, function() { + + }, function() { + + }) + + }, + /** + * 生命周期函数--监听页面加载 + */ + onLoad: function (options) { + var self = this; + self.setData({ + teamId: options.teamId + }) + this.getToken().then(result => { + this.getDetail(options.teamId); + this.getMember(options.teamId); + }) + }, + + /** + * 生命周期函数--监听页面初次渲染完成 + */ + onReady: function () { + + }, + + /** + * 生命周期函数--监听页面显示 + */ + onShow: function () { + + }, + + /** + * 生命周期函数--监听页面隐藏 + */ + onHide: function () { + + }, + + /** + * 生命周期函数--监听页面卸载 + */ + onUnload: function () { + + }, + + /** + * 页面相关事件处理函数--监听用户下拉动作 + */ + onPullDownRefresh: function () { + + }, + + /** + * 页面上拉触底事件的处理函数 + */ + onReachBottom: function () { + + }, + + /** + * 用户点击右上角分享 + */ + onShareAppMessage: function () { + + } +}) \ No newline at end of file diff --git a/xz_mini/pages/teamDetail/teamDetail.json b/xz_mini/pages/teamDetail/teamDetail.json new file mode 100644 index 0000000..8835af0 --- /dev/null +++ b/xz_mini/pages/teamDetail/teamDetail.json @@ -0,0 +1,3 @@ +{ + "usingComponents": {} +} \ No newline at end of file diff --git a/xz_mini/pages/teamDetail/teamDetail.wxml b/xz_mini/pages/teamDetail/teamDetail.wxml new file mode 100644 index 0000000..5b09e1a --- /dev/null +++ b/xz_mini/pages/teamDetail/teamDetail.wxml @@ -0,0 +1,57 @@ + + + + 团队名称: + {{dataMap.teamName}} + + + 团队人数: + {{dataMap.count}} + + + 所属区域: + {{dataMap.teamCityDictionaryName}} {{dataMap.teamCountyDictionaryName}} {{dataMap.teamAreaDictionaryName}} + + + 团队口号: + {{dataMap.teamWatchword}} + + + 团队介绍: + {{dataMap.content}} + + + + 团队成员 + + + + + + {{item.memberName}} + 队长 + 成员 + + 加入时间:{{item.inputTime}} + + + + + 申请人员 + + + + + + + {{item.memberName}} + + 通过 + 拒绝 + + + 加入时间:{{item.inputTime}} + + + + \ No newline at end of file diff --git a/xz_mini/pages/teamDetail/teamDetail.wxss b/xz_mini/pages/teamDetail/teamDetail.wxss new file mode 100644 index 0000000..0443cd1 --- /dev/null +++ b/xz_mini/pages/teamDetail/teamDetail.wxss @@ -0,0 +1,83 @@ +.team{ + padding: 30rpx; +} +.team-info{ + margin-bottom: 20rpx; +} +.row{ + display: flex; + justify-content: space-between; +} +.title{ + width: 23%; + font-size: 28rpx; + line-height: 65rpx; +} +.content{ + width: 75%; + line-height: 65rpx; + font-size: 28rpx; + border-bottom: 1px solid #DEDEDE; +} +.intro{ + min-height: 200rpx; +} +.team-member{ + margin-top: 20rpx; +} +.member-title{ + font-size: 30rpx; + color: #000; + padding-left: 25rpx; + border-left: 10rpx solid #9F1512; + margin-bottom: 20rpx; +} +.member-box{ + display: flex; + justify-content: space-between; + padding: 10rpx 0; + border-bottom: 1px solid #DEDEDE; +} +.member-avatar{ + width: 15%; +} +.member-avatar image{ + width: 100%; + height: 90rpx; +} +.member-info{ + width: 83%; +} +.name{ + font-size: 30rpx; + margin: 20rpx 0; +} +.post{ + display: inline-block; + background: rgba(159,21,18,.1); + color: #9F1512; + padding: 0 10rpx; + margin-left: 15rpx; +} +.join-time{ + font-size: 28rpx; + color: #949494; +} +.apply-member, .btn{ + display: flex; + justify-content: space-between; +} +.agree, .refuse{ + padding: 0 10rpx; + background: rgba(159,21,18,.1); + color: #9F1512; +} +.refuse{ + margin-left: 15rpx; +} +.name-box{ + width: 60%; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; +} \ No newline at end of file diff --git a/xz_mini/pages/template/template.js b/xz_mini/pages/template/template.js new file mode 100644 index 0000000..3dfda78 --- /dev/null +++ b/xz_mini/pages/template/template.js @@ -0,0 +1,99 @@ +// pages/template/template.js +const app = getApp(); +Page({ + + /** + * 页面的初始数据 + */ + data: { + url: '' + }, + + /** + * 生命周期函数--监听页面加载 + */ + onLoad: function (options) { + if (options.link) { + options.link = decodeURIComponent(options.link) + app.dialog.loading('正在加载'); + var type = options.link.split('.') + if (type[type.length-1] == 'pdf') { + wx.download({ + url: options.link, + success: function (res) { + const filePath = res.tempFilePath + wx.openDocument({ + filePath: filePath, + fileType: 'pdf', + success: function (res) { + wx.stopPullDownRefresh(); + wx.hideLoading(); + } + }) + }, + fail: function (error) { + console.log(error) + } + }) + } else { + this.setData({ + url: options.link + }) + } + } else { + options.url = decodeURIComponent(options.url) + this.setData({ + url: 'https://www.wgink.ink/' + options.url + }) + } + }, + + /** + * 生命周期函数--监听页面初次渲染完成 + */ + onReady: function () { + + }, + + /** + * 生命周期函数--监听页面显示 + */ + onShow: function () { + + }, + + /** + * 生命周期函数--监听页面隐藏 + */ + onHide: function () { + + }, + + /** + * 生命周期函数--监听页面卸载 + */ + onUnload: function () { + + }, + + /** + * 页面相关事件处理函数--监听用户下拉动作 + */ + onPullDownRefresh: function () { + + }, + + /** + * 页面上拉触底事件的处理函数 + */ + onReachBottom: function () { + + }, + + /** + * 用户点击右上角分享 + */ + onShareAppMessage: function () { + + } +}) \ No newline at end of file diff --git a/xz_mini/pages/template/template.json b/xz_mini/pages/template/template.json new file mode 100644 index 0000000..8835af0 --- /dev/null +++ b/xz_mini/pages/template/template.json @@ -0,0 +1,3 @@ +{ + "usingComponents": {} +} \ No newline at end of file diff --git a/xz_mini/pages/template/template.wxml b/xz_mini/pages/template/template.wxml new file mode 100644 index 0000000..4839609 --- /dev/null +++ b/xz_mini/pages/template/template.wxml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/xz_mini/pages/template/template.wxss b/xz_mini/pages/template/template.wxss new file mode 100644 index 0000000..71de55a --- /dev/null +++ b/xz_mini/pages/template/template.wxss @@ -0,0 +1 @@ +/* pages/template/template.wxss */ \ No newline at end of file diff --git a/xz_mini/pages/train/train.js b/xz_mini/pages/train/train.js new file mode 100644 index 0000000..35469a2 --- /dev/null +++ b/xz_mini/pages/train/train.js @@ -0,0 +1,144 @@ +// pages/train/train.js +const app = getApp(); +Page({ + + /** + * 页面的初始数据 + */ + data: { + newsUrl: app.newsUrl, + typeList: [], + currentNewsDictionariesId: '', + currentPage: 1, + rows: 10, + directoriesParentId: 'd9d8c7ea-32e0-43ed-ad17-7c99a3c389b9', + trainList: [] + }, + getType: function () { + var self = this + app.restAjax.get(app.restAjax.path('{newsUrl}/app/newsdirectories/listnewsdirectoriesrelease', [app.newsUrl]), { + directoriesParentId: self.data.directoriesParentId + }, null, function (code, data) { + self.setData({ + typeList: data + }) + self.getList(1) + }) + }, + changeType: function (e) { + this.setData({ + currentNewsDictionariesId: e.currentTarget.dataset.newsDirectoriesId + }) + this.getList(1) + }, + doClearCurrentNewsDictionariesId: function() { + var self = this; + self.setData({ + currentNewsDictionariesId: '' + }); + this.getList(1) + }, + getList: function (page) { + var self = this + app.dialog.loading('正在加载'); + var info = { + newsDirectoriesParentId: self.data.directoriesParentId, + newsDirectoriesId: self.data.currentNewsDictionariesId ? self.data.currentNewsDictionariesId : '', + page: page, + rows: self.data.rows + } + app.restAjax.get(app.restAjax.path('{newsUrl}/app/newscontent/listpagenewscontentrelease/{areaCode}', [app.newsUrl,app.areaCode]), info, null, function (code, data) { + var newsArray; + for (var i = 0; i < data.rows.length; i++) { + data.rows[i].newsContentCoverList = data.rows[i].newsContentCoverList[0].contentCoverId + } + if(page <= 1) { + newsArray = data.rows; + } else { + newsArray = self.data.news.newsList; + newsArray = newsArray.concat(data.rows); + } + self.setData({ + currentPage: page, + trainList: newsArray + }) + if(data.rows.length == 0) { + app.dialog.msg('暂无数据'); + return; + } + }, function(code, data) { + app.dialog.msg(data.msg); + }, function() { + wx.stopPullDownRefresh(); + wx.hideLoading(); + }) + }, + goNewsDetail: function (e) { + var url = e.currentTarget.dataset.templateRecordUrl + var link = e.currentTarget.dataset.contentLink + if (link) { + wx.navigateTo({ + url: '../template/template?link=' + encodeURIComponent(link), + }) + } else { + wx.navigateTo({ + url: '../template/template?url=' + encodeURIComponent(url), + }) + } + }, + /** + * 生命周期函数--监听页面加载 + */ + onLoad: function (options) { + this.getType() + }, + + /** + * 生命周期函数--监听页面初次渲染完成 + */ + onReady: function () { + + }, + + /** + * 生命周期函数--监听页面显示 + */ + onShow: function () { + + }, + + /** + * 生命周期函数--监听页面隐藏 + */ + onHide: function () { + + }, + + /** + * 生命周期函数--监听页面卸载 + */ + onUnload: function () { + + }, + + /** + * 页面相关事件处理函数--监听用户下拉动作 + */ + onPullDownRefresh: function () { + + }, + + /** + * 页面上拉触底事件的处理函数 + */ + onReachBottom: function () { + + }, + + /** + * 用户点击右上角分享 + */ + onShareAppMessage: function () { + + } +}) \ No newline at end of file diff --git a/xz_mini/pages/train/train.json b/xz_mini/pages/train/train.json new file mode 100644 index 0000000..8835af0 --- /dev/null +++ b/xz_mini/pages/train/train.json @@ -0,0 +1,3 @@ +{ + "usingComponents": {} +} \ No newline at end of file diff --git a/xz_mini/pages/train/train.wxml b/xz_mini/pages/train/train.wxml new file mode 100644 index 0000000..dee09d3 --- /dev/null +++ b/xz_mini/pages/train/train.wxml @@ -0,0 +1,25 @@ + + + + + 全部 + + + + + {{item.directoriesName}} + + + + + + + {{item.newsContentTitle}} + + + + + {{item.newsContentPublishTime}} + + + \ No newline at end of file diff --git a/xz_mini/pages/train/train.wxss b/xz_mini/pages/train/train.wxss new file mode 100644 index 0000000..7912152 --- /dev/null +++ b/xz_mini/pages/train/train.wxss @@ -0,0 +1,141 @@ +.top-tab{ + position: fixed; + top: 0; + left: 0; + right: 0; + background: #fff; + overflow-x: auto; +} +.type{ + display: flex; +} +.tab-box{ + display: inline-flex; + justify-content: center; + align-items: center; + width: 30%; + position: relative; + height: 90rpx; + font-size: 30rpx; + color: #242424; + flex-shrink: 0; + padding: 0 10rpx; +} +.tab-box.active{ + color: #9F1512; +} +.tab-box image{ + position: absolute; + width: 15rpx; + height: 40rpx; + top: 50%; + margin-top: -20rpx; + display: none; +} +.tab-box.active image{ + display: block; +} +.tab-box image.selected-l{ + left: 10rpx; +} +.tab-box image.selected-r{ + right: 10rpx; +} +.area{ + overflow-x: auto; + white-space: nowrap; + position: fixed; + top: 90rpx; + left: 0; + right: 0; + border-bottom: 1px solid #DDD; + background: #fff; +} +.area-box{ + display: inline-flex; + width: 30%; + height: 90rpx; + /* line-height: 90rpx; + text-align: center; */ + align-items: center; + justify-content: center; + padding: 0 20px; + box-sizing: border-box; + position: relative; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; + font-size: 30rpx; +} +.area-box.active{ + color: #9F1512; +} +.area-box image{ + position: absolute; + width: 15rpx; + height: 40rpx; + top: 50%; + margin-top: -20rpx; + display: none; +} +.area-box.active image{ + display: block; +} +.area-box image.selected-l{ + left: 20rpx; +} +.area-box image.selected-r{ + right: 20rpx; +} +.news{ + padding: 0 30rpx; + border-bottom: 5px solid #FBFBFB; + margin-top: 90rpx; +} +.news-box{ + padding: 30rpx 0; + border-bottom: 1px solid #EBEBEB; + display: flex; + flex-direction: column; +} +.news-box:first-child{ + padding-top: 0; +} +.news-title{ + color: #242424; + font-size: 30rpx; + font-weight: bold; +} +.news-info{ + color: #949494; + margin-top: 15rpx; + font-size: 24rpx; +} +.news-info text{ + margin-right: 20rpx; +} +.news-big-pic, .news-small-pic{ + margin-top: 10rpx; +} +.news-big-pic image{ + width: 100%; +} +.news-small-pic image{ + width: 100%; + height: 400rpx; +} +.transverse-news{ + flex-direction: row; + justify-content: space-between; +} +.news-row-img{ + width: 30%; + height: 150rpx; +} +.news-row-img image{ + width: 100%; + height: 100%; +} +.news-row-info{ + width: 68%; +} \ No newline at end of file diff --git a/xz_mini/pages/travel/travel.js b/xz_mini/pages/travel/travel.js new file mode 100644 index 0000000..8fd44e7 --- /dev/null +++ b/xz_mini/pages/travel/travel.js @@ -0,0 +1,118 @@ +// pages/travel/travel.js +const app = getApp(); +Page({ + + /** + * 页面的初始数据 + */ + data: { + newsUrl: app.newsUrl, + newsDirectoriesId: '51ae7beb-f277-47a4-937a-088e6d47656d', + currentPage: 1, + rows: 10, + travelList: [] + }, + getTravel: function (page) { + var self = this + app.dialog.loading('正在加载'); + var info = { + page: page, + rows: self.data.rows, + newsDirectoriesId: self.data.newsDirectoriesId + } + app.restAjax.get(app.restAjax.path('{newsUrl}/app/newscontent/listpagenewscontentrelease/{areaCode}', [app.newsUrl,app.areaCode]), info, null, function (code, data) { + var newsArray; + for (var i = 0; i < data.rows.length; i++) { + data.rows[i].newsContentCoverList = data.rows[i].newsContentCoverList[0].contentCoverId + } + if(page <= 1) { + newsArray = data.rows; + } else { + newsArray = self.data.travelList; + newsArray = newsArray.concat(data.rows); + } + console.log(newsArray) + self.setData({ + currentPage: page, + travelList: newsArray + }) + if(data.rows.length == 0) { + app.dialog.msg('暂无数据'); + return; + } + }, function(code, data) { + app.dialog.msg(data.msg); + }, function() { + wx.stopPullDownRefresh(); + wx.hideLoading(); + }) + }, + goNewsDetail: function (e) { + var url = e.currentTarget.dataset.templateRecordUrl + var link = e.currentTarget.dataset.contentLink + if (link) { + wx.navigateTo({ + url: '../template/template?link=' + encodeURIComponent(link), + }) + } else { + wx.navigateTo({ + url: '../template/template?url=' + encodeURIComponent(url), + }) + } + }, + /** + * 生命周期函数--监听页面加载 + */ + onLoad: function (options) { + this.getTravel(1) + }, + + /** + * 生命周期函数--监听页面初次渲染完成 + */ + onReady: function () { + + }, + + /** + * 生命周期函数--监听页面显示 + */ + onShow: function () { + + }, + + /** + * 生命周期函数--监听页面隐藏 + */ + onHide: function () { + + }, + + /** + * 生命周期函数--监听页面卸载 + */ + onUnload: function () { + + }, + + /** + * 页面相关事件处理函数--监听用户下拉动作 + */ + onPullDownRefresh: function () { + + }, + + /** + * 页面上拉触底事件的处理函数 + */ + onReachBottom: function () { + + }, + + /** + * 用户点击右上角分享 + */ + onShareAppMessage: function () { + + } +}) \ No newline at end of file diff --git a/xz_mini/pages/travel/travel.json b/xz_mini/pages/travel/travel.json new file mode 100644 index 0000000..8835af0 --- /dev/null +++ b/xz_mini/pages/travel/travel.json @@ -0,0 +1,3 @@ +{ + "usingComponents": {} +} \ No newline at end of file diff --git a/xz_mini/pages/travel/travel.wxml b/xz_mini/pages/travel/travel.wxml new file mode 100644 index 0000000..4d8a873 --- /dev/null +++ b/xz_mini/pages/travel/travel.wxml @@ -0,0 +1,8 @@ + + + {{item.newsContentTitle}} + + + + + \ No newline at end of file diff --git a/xz_mini/pages/travel/travel.wxss b/xz_mini/pages/travel/travel.wxss new file mode 100644 index 0000000..2670b7d --- /dev/null +++ b/xz_mini/pages/travel/travel.wxss @@ -0,0 +1,52 @@ +.news{ + padding: 0 30rpx; + border-bottom: 5px solid #FBFBFB; + margin-top: 10rpx; +} +.news-box{ + padding: 30rpx 0; + border-bottom: 1px solid #EBEBEB; + display: flex; + flex-direction: column; +} +.news-box:first-child{ + padding-top: 0; +} +.news-title{ + color: #242424; + font-size: 30rpx; + font-weight: bold; +} +.news-info{ + color: #949494; + margin-top: 15rpx; + font-size: 24rpx; +} +.news-info text{ + margin-right: 20rpx; +} +.news-big-pic, .news-small-pic{ + margin-top: 10rpx; +} +.news-big-pic image{ + width: 100%; +} +.news-small-pic image{ + width: 100%; + height: 400rpx; +} +.transverse-news{ + flex-direction: row; + justify-content: space-between; +} +.news-row-img{ + width: 30%; + height: 150rpx; +} +.news-row-img image{ + width: 100%; + height: 100%; +} +.news-row-info{ + width: 68%; +} \ No newline at end of file diff --git a/xz_mini/pages/userAgree/userAgree.js b/xz_mini/pages/userAgree/userAgree.js new file mode 100644 index 0000000..c8b2d4b --- /dev/null +++ b/xz_mini/pages/userAgree/userAgree.js @@ -0,0 +1,104 @@ +// pages/userAgree/userAgree.js +var app = getApp(); +Page({ + + /** + * 页面的初始数据 + */ + data: { + agreeContent: '', + token: '' + }, + getToken: function() { + var self = this; + return new Promise(resolve =>{ + wx.getStorage({ + key: 'token', + success(res) { + self.setData({ + token: res.data + }) + return resolve(); + } + }) + }) + }, + getUserAgree: function(type) { + var self = this; + app.restAjax.get(app.restAjax.path(app.volunteerUrl + '/app/agreecontent/getagreecontentbyid/' + type, []), + {}, { + headers: { + token: self.data.token + } + }, function(code, data) { + if('200' == code) { + self.setData({ + agreeContent: data.content + }) + } + }, function(code, data) { + app.dialog.msg(data.msg) + }, function() { + + }) + }, + /** + * 生命周期函数--监听页面加载 + */ + onLoad: function (options) { + var type = options.type; + var self = this; + this.getToken().then(result => { + this.getUserAgree(type); + }) + }, + + /** + * 生命周期函数--监听页面初次渲染完成 + */ + onReady: function () { + + }, + + /** + * 生命周期函数--监听页面显示 + */ + onShow: function () { + + }, + + /** + * 生命周期函数--监听页面隐藏 + */ + onHide: function () { + + }, + + /** + * 生命周期函数--监听页面卸载 + */ + onUnload: function () { + + }, + + /** + * 页面相关事件处理函数--监听用户下拉动作 + */ + onPullDownRefresh: function () { + + }, + + /** + * 页面上拉触底事件的处理函数 + */ + onReachBottom: function () { + + }, + + /** + * 用户点击右上角分享 + */ + onShareAppMessage: function () { + + } +}) \ No newline at end of file diff --git a/xz_mini/pages/userAgree/userAgree.json b/xz_mini/pages/userAgree/userAgree.json new file mode 100644 index 0000000..8835af0 --- /dev/null +++ b/xz_mini/pages/userAgree/userAgree.json @@ -0,0 +1,3 @@ +{ + "usingComponents": {} +} \ No newline at end of file diff --git a/xz_mini/pages/userAgree/userAgree.wxml b/xz_mini/pages/userAgree/userAgree.wxml new file mode 100644 index 0000000..f32a380 --- /dev/null +++ b/xz_mini/pages/userAgree/userAgree.wxml @@ -0,0 +1,4 @@ + + + + diff --git a/xz_mini/pages/userAgree/userAgree.wxss b/xz_mini/pages/userAgree/userAgree.wxss new file mode 100644 index 0000000..b534855 --- /dev/null +++ b/xz_mini/pages/userAgree/userAgree.wxss @@ -0,0 +1 @@ +/* pages/userAgree/userAgree.wxss */ \ No newline at end of file diff --git a/xz_mini/pages/venue/venue.js b/xz_mini/pages/venue/venue.js new file mode 100644 index 0000000..6e08a30 --- /dev/null +++ b/xz_mini/pages/venue/venue.js @@ -0,0 +1,230 @@ +var app = getApp(); +// pages/venue/venue.js +Page({ + + /** + * 页面的初始数据 + */ + data: { + venueUrl: app.venueUrl, + imgRoute: '/route/file/download/true/', + venueTypeParentId: 'df8b758c-f6d8-465a-9aa8-c451fde47076', + page: '1', + rows: '10', + venueTypeList: [], + venuesList: [], + orderKey: '', + venueType: '', + latitude: '', + longitude: '', + selectingArea: false, // 显示隐藏选择区域 + areaList: [], + venueArea: '', + areaName: '' + }, + + //获取定位 + getLocation: function () { + var self = this; + wx.getLocation({ + type: 'gcj02', + success: function (res) { + self.setData({ + latitude: res.latitude, + longitude: res.longitude + }) + }, + complete: function () { + self.listPageVenuesInfo(); + } + }) + }, + + //获取场馆分类 + listVenueType: function () { + var self = this; + app.restAjax.get(app.restAjax.path('{venueUrl}/app/venuedictionary/listvenuedictionarybyparentidrelease/{venueTypeParentId}', + [app.venueUrl, self.data.venueTypeParentId]), {}, null, + function (code, data) { + self.setData({ + venueTypeList: data.data + }); + }, + function (code, data) { + app.dialog.msg(data.msg); + } + ); + }, + + //获取场馆列表 + listPageVenuesInfo: function () { + var self = this; + app.restAjax.get(app.restAjax.path('{venueUrl}/app/venuesinfo/listpagevenuesinforelease/{areaCode}', [app.venueUrl, app.areaCode]), { + page: self.data.page, + rows: self.data.rows, + orderKey: self.data.orderKey, + venueType: self.data.venueType, + latitude: self.data.latitude, + longitude: self.data.longitude, + selfLocation: 'TX', + venueArea: self.data.venueArea + }, null, + function (code, data) { + data.rows.forEach(element => { + element.venuePanorama = element.venuePanorama.split(',')[0]; + if (element.apart >= 1000) { + element.apart = (element.apart / 1000).toFixed(2) + 'km'; + } else { + element.apart += 'm'; + } + }); + self.setData({ + venuesList: data.rows, + page: data.page + }); + if (data.rows.length == 0) { + app.dialog.msg('暂无数据'); + } + }, + function (code, data) { + app.dialog.msg(data.msg); + }, + function () { + wx.hideNavigationBarLoading(); + wx.stopPullDownRefresh(); + wx.hideLoading(); + } + ); + }, + + //切换场馆类型 + changeVenueType: function (options) { + var id = options.currentTarget.dataset.id; + if (id == this.data.venueType) { + id = '' + } + this.setData({ + venueType: id + }) + this.listPageVenuesInfo(); + }, + + //切换场馆排序 + changeVenuesOrderBy: function (options) { + var beCheck = options.currentTarget.dataset.becheck; + this.setData({ + orderKey: beCheck + }) + this.listPageVenuesInfo(); + }, + + //去详情页 + goDetail: function (options) { + var venuesInfoId = options.currentTarget.dataset.id; + wx.navigateTo({ + url: '../venueDetail/venueDetail?venuesInfoId=' + venuesInfoId, + }) + }, + + //选择区域 + selectArea: function () { + this.setData({ + selectingArea: true + }) + }, + + // 获取地区列表 + getAreaList: function () { + var self = this; + app.restAjax.get(app.restAjax.path(app.usercenterUrl + '/app/area/listbyparentidrelease/640675', []), + self.data.pages, null, + function (code, data) { + if (code == '200') { + self.setData({ + areaList: data + }) + } + }) + }, + // 切换地区 + changeArea: function (e) { + app.dialog.loading('正在加载'); + this.setData({ + venueArea: e.currentTarget.dataset.area, + selectingArea: false, + areaName: e.currentTarget.dataset.areaname + }) + this.listPageVenuesInfo() + }, + + // 全部地区 + loadAll: function () { + this.setData({ + venueArea: '', + selectingArea: false + }) + this.listPageVenuesInfo() + }, + /** + * 生命周期函数--监听页面加载 + */ + onLoad: function (options) { + this.listVenueType(); + this.getLocation(); + this.getAreaList(); + }, + + /** + * 生命周期函数--监听页面初次渲染完成 + */ + onReady: function () { + + }, + + /** + * 生命周期函数--监听页面显示 + */ + onShow: function () { + + }, + + /** + * 生命周期函数--监听页面隐藏 + */ + onHide: function () { + + }, + + /** + * 生命周期函数--监听页面卸载 + */ + onUnload: function () { + + }, + + /** + * 页面相关事件处理函数--监听用户下拉动作 + */ + onPullDownRefresh: function () { + wx.showNavigationBarLoading(); + this.setData({ + venueType: '', + orderKey: '', + }) + this.onLoad(); + }, + + /** + * 页面上拉触底事件的处理函数 + */ + onReachBottom: function () { + + }, + + /** + * 用户点击右上角分享 + */ + onShareAppMessage: function () { + + } +}) \ No newline at end of file diff --git a/xz_mini/pages/venue/venue.json b/xz_mini/pages/venue/venue.json new file mode 100644 index 0000000..09e623a --- /dev/null +++ b/xz_mini/pages/venue/venue.json @@ -0,0 +1,5 @@ +{ + "usingComponents": {}, + "enablePullDownRefresh": true, + "backgroundTextStyle": "dark" +} \ No newline at end of file diff --git a/xz_mini/pages/venue/venue.wxml b/xz_mini/pages/venue/venue.wxml new file mode 100644 index 0000000..57dd59d --- /dev/null +++ b/xz_mini/pages/venue/venue.wxml @@ -0,0 +1,49 @@ + + + + + 全部 + + + + {{item.dictionaryName}} + + + + + 默认排序 + + + 离我最近 + + + 最新发布 + + + 选择区域 + + + {{areaName}} + + + + + + + + + + + {{item.venueName}} + 距离:{{item.apart == '0' ? '未知' : item.apart}} + + 营业时间:{{item.businessHours}} + + + + + + 全部 + {{item.areaName}} + + \ No newline at end of file diff --git a/xz_mini/pages/venue/venue.wxss b/xz_mini/pages/venue/venue.wxss new file mode 100644 index 0000000..09ff6b5 --- /dev/null +++ b/xz_mini/pages/venue/venue.wxss @@ -0,0 +1,125 @@ +.fixed-top{ + position: fixed; + top: 0; + left: 0; + right: 0; + padding: 0 30rpx 10rpx; + background: #fff; +} +.fixed-tab{ + padding: 30rpx 0; + display: flex; + overflow-x: auto; +} +.tab-box{ + flex-shrink: 0; + width: 120rpx; + text-align: center; + margin-right: 40rpx; +} +.tab-box image{ + width: 80rpx; + height: 80rpx; +} +.tab-title{ + font-size: 30rpx; + color: #242424; +} +.tab-box.active .tab-title{ + color: #9F1512; +} +.select-tab{ + display: flex; + margin-bottom: 10rpx; +} +.select-box{ + flex: 1; + text-align: center; + font-size: 32rpx; + color: #242424; +} +.select-box.active{ + color: #9F1512; + font-weight: bold; +} +.venue{ + height: 400rpx; + margin-top: 250rpx; + padding: 0 30rpx; + +} +.venue-box{ + box-shadow:0 0 17rpx 0 rgba(0,0,0,0.1); + border-radius:10rpx; + overflow: hidden; + margin-bottom: 15rpx; +} +.venue-img, .venue-img image{ + width: 100%; + height: 315rpx; +} +.venue-info{ + padding: 15rpx 20rpx; +} +.name-distance{ + display: flex; + justify-content: space-between; + height: 35rpx; + line-height: 35rpx; +} +.name{ + font-size: 32rpx; + width: 60%; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; +} +.distance{ + padding: 0 10rpx; + background: rgba(159,21,18,.1); + color: #9F1512; + border-radius: 10rpx; + font-size: 28rpx; +} +.time{ + font-size: 28rpx; + color: #242424; + margin-top: 10rpx; +} +.select-area{ + position: fixed; + top: 0; + bottom: 0; + right: 0; + left: 0; + background: rgba(0,0,0,0.6); +} +.area-container{ + background: #fff; + padding: 15rpx 15rpx 0; + font-size: 0; +} +.area-box{ + display: inline-block; + width: 32%; + height: 60rpx; + line-height: 60rpx; + margin-bottom: 15rpx; + margin-right: 2%; + text-align: center; + font-size: 30rpx; + border: 1px solid #DDD; + border-radius: 10rpx; + box-sizing: border-box; + padding: 0 10rpx; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; +} +.area-box.active{ + border: #9F1512 1px solid; + color: #9F1512; +} +.area-box:nth-child(3n){ + margin-right: 0; +} \ No newline at end of file diff --git a/xz_mini/pages/venueDetail/venueDetail.js b/xz_mini/pages/venueDetail/venueDetail.js new file mode 100644 index 0000000..513d6f4 --- /dev/null +++ b/xz_mini/pages/venueDetail/venueDetail.js @@ -0,0 +1,137 @@ +var app = getApp(); +// pages/venueDetail/venueDetail.js +Page({ + /** + * 页面的初始数据 + */ + data: { + venueUrl: app.venueUrl, + imgRoute: '/route/file/download/true/', + indicatorDots: true, + autoplay: true, + venuesInfoId: '', + venuesDetail: {}, + venuesProjectList: [], + swiperImg: [], + venueCharge: '', + hasProject: '' + }, + + //场馆详情接口 + getVenuesDetail: function () { + var self = this; + app.restAjax.get(app.restAjax.path('{venueUrl}/app/venuesinfo/getvenuesinfobyidrelease/{venuesInfoId}', [app.venueUrl, self.data.venuesInfoId]), + { + resultLocation: 'TX' + }, null, function (code, data) { + var src = 'img src="' + app.venueUrl + '/' + if (data.venueDescription.indexOf('src="') != -1) { + data.venueDescription = data.venueDescription.replace(/src="/g, src) + } + var swiperImg = data.venuePanorama.split(','); + if (swiperImg.length <= 1) { + self.setData({ + indicatorDots: false, + autoplay: false + }) + }; + self.setData({ + venuesDetail: data, + swiperImg: swiperImg, + venueCharge: data.venueCharge, + hasProject: data.hasProject + }); + }, function (code, data) { + app.dialog.msg(data.msg); + } + ); + }, + + //场馆地图导航 + showMap: function (options) { + var dataObj = options.currentTarget.dataset + wx.openLocation({//​使用微信内置地图查看位置。 + latitude: Number(dataObj.latitude),//要去的纬度-地址 + longitude: Number(dataObj.longitude),//要去的经度-地址 + name: dataObj.venuename, + address: dataObj.venueposition + }); + }, + + goBooking: function () { + wx.navigateTo({ + url: '../book/book?venuesInfoId=' + this.data.venuesInfoId, + }) + }, + + /** + * 生命周期函数--监听页面加载 + */ + onLoad: function (options) { + this.setData({ + venuesInfoId: options.venuesInfoId + }); + this.getVenuesDetail(); + this.saveBigdata(options.venuesInfoId); + }, + saveBigdata(id) { + var params = "小程序" + id + "场馆"; + var info = { + requestUrl: params + } + app.restAjax.get(app.restAjax.path(app.bigDataUrl + '/app/contentcensusrelease/log', []), info, null, + function (code, data) { + + }, function (code, err) { + + }) + }, + /** + * 生命周期函数--监听页面初次渲染完成 + */ + onReady: function () { + + }, + + /** + * 生命周期函数--监听页面显示 + */ + onShow: function () { + + }, + + /** + * 生命周期函数--监听页面隐藏 + */ + onHide: function () { + + }, + + /** + * 生命周期函数--监听页面卸载 + */ + onUnload: function () { + + }, + + /** + * 页面相关事件处理函数--监听用户下拉动作 + */ + onPullDownRefresh: function () { + + }, + + /** + * 页面上拉触底事件的处理函数 + */ + onReachBottom: function () { + + }, + + /** + * 用户点击右上角分享 + */ + onShareAppMessage: function () { + + } +}) \ No newline at end of file diff --git a/xz_mini/pages/venueDetail/venueDetail.json b/xz_mini/pages/venueDetail/venueDetail.json new file mode 100644 index 0000000..8835af0 --- /dev/null +++ b/xz_mini/pages/venueDetail/venueDetail.json @@ -0,0 +1,3 @@ +{ + "usingComponents": {} +} \ No newline at end of file diff --git a/xz_mini/pages/venueDetail/venueDetail.wxml b/xz_mini/pages/venueDetail/venueDetail.wxml new file mode 100644 index 0000000..104dfa8 --- /dev/null +++ b/xz_mini/pages/venueDetail/venueDetail.wxml @@ -0,0 +1,49 @@ + + + + + + + + + {{venuesDetail.venueName}} + + 地址:{{venuesDetail.venuePosition}} + + + 联系方式:{{venuesDetail.venueTelephone}} + + + 交通方式:{{venuesDetail.venueRoute}} + + + 营业时间:{{venuesDetail.businessHours}} + + + 温馨提示:{{venuesDetail.bookingTips}} + + + + + 场馆服务: + {{venuesDetail.venueService}} + + {{venuesDetail.venueOtherService}} + + + + 场馆简介: + + + + + 直接到场 + + + 场次预订 + + + 门票预订 + \ No newline at end of file diff --git a/xz_mini/pages/venueDetail/venueDetail.wxss b/xz_mini/pages/venueDetail/venueDetail.wxss new file mode 100644 index 0000000..a2d97e4 --- /dev/null +++ b/xz_mini/pages/venueDetail/venueDetail.wxss @@ -0,0 +1,117 @@ +.swiper-box, swiper, .swiper-item image{ + width: 100%; + height: 350rpx; +} +.venue{ + margin-top: 10rpx; + padding: 0 20rpx; +} +.venue-name{ + font-size: 34rpx; + color: #000; + margin-bottom: 10rpx; + font-weight: bold; +} +.venue-info{ + font-size: 28rpx; + color: #242424; + border-bottom: 1px solid #ddd; + padding: 15rpx 0; +} +.venue-info image{ + width: 28rpx; + height: 28rpx; + vertical-align: middle; +} +.selecet-tab{ + display: flex; + overflow-x: auto; + flex-wrap: nowrap; + padding: 0 20rpx; +} +.tab-btn{ + flex-shrink: 0; + display: inline-flex; + justify-content: center; + align-items: center; + height: 60rpx; + color: #BBBBBB; + font-size: 30rpx; + margin-left: 60rpx; +} +.tab-btn.active{ + color: #9F1512; + border-bottom: 1px solid #9F1512; +} +.tab-btn:first-child{ + margin-left: 20rpx; +} +.tab-info{ + padding: 0 20rpx; + margin-top: 10rpx; +} +.tab-content{ + border-bottom: 1px solid #ddd; + padding-bottom: 10rpx; +} +.info-title{ + font-size: 30rpx; + color: #000; + font-weight: bold; +} +.info-content{ + font-size: 28rpx; + color: #BBBBBB; + padding-left: 20rpx; + margin: 10rpx 0; +} +.venue-other{ + margin: 10rpx 0 20rpx; + padding: 0 20rpx; +} +.other-title{ + font-size: 32rpx; + color: #000; + font-weight: bold; +} +.other-content{ + font-size: 28rpx; + color: #BBBBBB; + padding-left: 20rpx; + margin: 10rpx 0; +} +.other-container{ + padding-bottom: 10rpx; + border-bottom: 1px solid #ddd; +} +.venue-intro{ + padding: 0 20rpx 20rpx; + margin-bottom: 110rpx; +} +.intro-title{ + font-size: 30rpx; + color: #000; + font-weight: bold; +} +.intro-content{ + font-size: 28rpx; + color: #000; +} +.book-btn{ + position: fixed; + bottom: 0; + left: 0; + right: 0; + padding: 15rpx 30rpx; + background: #fff; +} +.btn{ + height: 80rpx; + background: #9F1512; + color: #fff; + display: flex; + align-items: center; + justify-content: center; + font-size: 30rpx; + border-radius: 10rpx; +} \ No newline at end of file diff --git a/xz_mini/pages/volunteer/volunteer.js b/xz_mini/pages/volunteer/volunteer.js new file mode 100644 index 0000000..5c18b7c --- /dev/null +++ b/xz_mini/pages/volunteer/volunteer.js @@ -0,0 +1,140 @@ +// pages/volunteer/volunteer.js +var app = getApp(); +Page({ + + /** + * 页面的初始数据 + */ + data: { + indicatorDots: true, + autoplay: true, + serviceMap: [], + pages: { + page: 1, + rows: 5 + } + }, + goDetail: function (e) { + var id = e.currentTarget.dataset.id; + wx.navigateTo({ + url: '../serviceActivityDetail/serviceActivityDetail?id=' + id + }) + }, + goTeam: function () { + wx.navigateTo({ + url: '../volunteerTeam/volunteerTeam', + }) + }, + goRegister: function () { + wx.navigateTo({ + url: '../volunteerRegister/volunteerRegister', + }) + }, + newActivity: function () { + wx.navigateTo({ + url: '../newVolunteerActivity/newVolunteerActivity', + }) + }, + /** + * 获取志愿者活动列表 + */ + activityList: function() { + var self = this; + app.restAjax.get(app.restAjax.path(app.volunteerUrl + '/app/volunteerservice/listpagevolunteerservicerelease/{areaCode}', [app.areaCode]), + self.data.pages, null, function(code, data) { + if('200' == code) { + // 将活动照片,拼接为可访问地址 + for(var item of data.rows) { + if('' != item.photo) { + var photoArr = item.photo.split(","); + item.photo = app.volunteerUrl + '/route/file/download/true/' + photoArr[0]; + } + } + if(1 === self.data.pages.page) { + self.setData({ + serviceMap: data.rows + }) + }else { + if(data.rows.length == 0) { + self.setData({ + [`pages.page`] : self.data.pages.page - 1 + }) + app.dialog.msg('暂无更多') + return false; + } + + self.setData({ + serviceMap: data.rows.concat(self.data.serviceMap), + }) + } + + } + }, function() { + + }, function() { + wx.hideNavigationBarLoading(); //完成停止加载图标 + wx.stopPullDownRefresh(); + }) + }, + /** + * 生命周期函数--监听页面加载 + */ + onLoad: function (options) { + this.activityList(); + }, + + /** + * 生命周期函数--监听页面初次渲染完成 + */ + onReady: function () { + + }, + + /** + * 生命周期函数--监听页面显示 + */ + onShow: function () { + + }, + + /** + * 生命周期函数--监听页面隐藏 + */ + onHide: function () { + + }, + + /** + * 生命周期函数--监听页面卸载 + */ + onUnload: function () { + + }, + + /** + * 页面相关事件处理函数--监听用户下拉动作 + */ + onPullDownRefresh: function () { + // 在标题栏中显示加载图标 + wx.showNavigationBarLoading(); + var self = this; + self.setData({ + [`pages.page`] : 1 + }) + this.activityList(); + }, + + /** + * 页面上拉触底事件的处理函数 + */ + onReachBottom: function () { + + }, + + /** + * 用户点击右上角分享 + */ + onShareAppMessage: function () { + + } +}) \ No newline at end of file diff --git a/xz_mini/pages/volunteer/volunteer.json b/xz_mini/pages/volunteer/volunteer.json new file mode 100644 index 0000000..09e623a --- /dev/null +++ b/xz_mini/pages/volunteer/volunteer.json @@ -0,0 +1,5 @@ +{ + "usingComponents": {}, + "enablePullDownRefresh": true, + "backgroundTextStyle": "dark" +} \ No newline at end of file diff --git a/xz_mini/pages/volunteer/volunteer.wxml b/xz_mini/pages/volunteer/volunteer.wxml new file mode 100644 index 0000000..170dc9c --- /dev/null +++ b/xz_mini/pages/volunteer/volunteer.wxml @@ -0,0 +1,63 @@ + + + + + + + + + + + + + + + + + 志愿者注册 + 实名注册 + + + + + + + + 志愿者服务组织 + 志愿者团队 + + + + + + + + + + + 志愿活动 + + + + + + + + 报名中 + 已报名 + 停止报名 + 进行中 + 已结束 + + + + {{item.serviceName}} + + {{item.startTime}}至{{item.endTime}} + + + + + + 发起新活动 + \ No newline at end of file diff --git a/xz_mini/pages/volunteer/volunteer.wxss b/xz_mini/pages/volunteer/volunteer.wxss new file mode 100644 index 0000000..3dcb433 --- /dev/null +++ b/xz_mini/pages/volunteer/volunteer.wxss @@ -0,0 +1,136 @@ +.swiper-box, .swiper-img, swiper{ + width: 100%; + height: 330rpx; +} +.link{ + padding: 15rpx 30rpx; + display: flex; + justify-content: space-between; +} +.link-box{ + width: 49%; + background:linear-gradient(315deg,rgba(205,47,41,1) 0%,rgba(159,21,18,1) 100%); + border-radius: 10rpx; + height: 145rpx; + padding: 30rpx 15rpx 0 30rpx; + box-sizing: border-box; + color: #fff; + justify-content: space-between; + display: flex; +} +.big{ + font-size: 28rpx; +} +.small{ + font-size: 24rpx; +} +.img image{ + width: 60rpx; + height: 60rpx; +} +.public-title{ + text-align: center; +} +.title-text{ + display: inline-block; + font-size: 28rpx; + color: #9F1512; + padding: 0 15rpx 0; + position: relative; + margin-bottom: 15rpx; +} +.title-text image{ + position: absolute; + top: 0; + width: 10rpx; + height: 100%; +} +.selected-l{ + left: 0; +} +.selected-r{ + right: 0; +} +.activity{ + padding: 20rpx 30rpx 90rpx; +} +.activity-box{ + margin-bottom: 20rpx; + box-shadow:0px 0px 17rpx 0px rgba(0,0,0,0.1); + border-radius: 10rpx; + overflow: hidden; +} +.activity-img{ + height: 320rpx; + position: relative; +} +.activity-img image{ + width: 100%; + height: 100%; +} +.corner{ + position: absolute; + top: 20rpx; + right: 20rpx; + display: flex; + color: #fff; + width: 115rpx; + height: 45rpx; + display: flex; + justify-content: center; + align-items: center; + background:rgba(159,21,18,.6); + border-radius: 10rpx; + font-size: 26rpx; +} +.activity-info{ + padding: 15rpx 20rpx; +} +.title{ + display: flex; + justify-content: space-between; +} +.activity-title{ + width: 100%; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; + font-size: 30rpx; + color: #242424; + line-height: 40rpx; +} +.sign{ + background: rgba(159,21,18,.1); + color: #9F1512; + border-radius: 10rpx; + padding: 0 20rpx; + line-height: 40rpx; +} +.date{ + margin-top: 10rpx; + font-size: 22rpx; + color: #242424; +} +.new-activity{ + position: fixed; + bottom: 0; + left: 0; + right: 0; + padding: 15rpx 30rpx; + background: #fff; + box-shadow:0 0 17rpx 0 rgba(0,0,0,0.1); +} +.new-activity-btn{ + background: #9F1512; + display: flex; + width: 100%; + height: 70rpx; + justify-content: center; + align-items: center; + border-radius: 10rpx; + font-size: 28rpx; + color: #fff; +} +.volunteer-activity{ + margin-bottom: 105rpx; +} \ No newline at end of file diff --git a/xz_mini/pages/volunteerRegister/volunteerRegister.js b/xz_mini/pages/volunteerRegister/volunteerRegister.js new file mode 100644 index 0000000..3a761eb --- /dev/null +++ b/xz_mini/pages/volunteerRegister/volunteerRegister.js @@ -0,0 +1,468 @@ +// pages/volunteerRegister/volunteerRegister.js +var app = getApp(); +Page({ + /** + * 页面的初始数据 + */ + data: { + token: '', + volunteerMsg: [], + isAgree: false, // 是否同意志愿者注册协议 + openExperience: 0, + tempObj: {}, // 用于临时存储字典表返回的数据 + tempArray: [], // 用于临时存储字典表返回的数据 + serviceType: {}, // 服务意向 + serviceTypeValue: '', // 用户选择的服务意向ID + serviceIndustry: {}, // 服务领域或行业 + serviceIndustryValue: '', // 用户选择的服务领域或行业ID + + teamCityIndex: 0, + teamCityResult: '请选择服务区域', + teamCity: {}, // 服务区域-市 + teamCityArray: [], // 服务区域-市 + + teamCountyIndex: 0, + teamCountyResult: '请选择旗县区', + teamCounty: {}, // 服务区域-旗县区 + teamCountyArray: [], // 服务区域-旗县区 + + teamAreaIndex: 0, + teamAreaResult: '请选择乡镇村', + teamArea: {}, // 服务区域-乡镇村 + teamAreaArray: [], // 服务区域-乡镇村 + + countyShowStatus: true, + areaShowStatus: true, + + occupationIndex: 0, + occupationResult: '请选择职业', + occupation: {}, // 职业 + occupationArray: [], // 职业 + + work: '', // 工作单位及职务 + hobby: '', // 特长爱好 + cv: '', // 个人简历 + remark: '' // 备注 + }, + getToken: function() { + var self = this; + return new Promise(resolve =>{ + wx.getStorage({ + key: 'token', + success(res) { + self.setData({ + token: res.data + }) + return resolve(); + } + }) + }) + }, + cityChange: function(e) { + var self = this; + self.setData({ + teamCityIndex: e.detail.value, + areaShowStatus: true, + teamArea: {}, + teamAreaArray: [] + }) + + this.getDataFromArea(self.data.teamCity[self.data.teamCityIndex].areaId, 2).then(result => { + if(self.data.tempObj.length > 0) { + self.setData({ + teamCounty: self.data.tempObj, + teamCountyArray: self.data.tempArray, + countyShowStatus: false, + tempObj: {}, + tempArray: [] + }) + }else { + self.setData({ + teamCounty: {}, + teamCountyArray: [], + countyShowStatus: true, + tempObj: {}, + tempArray: [] + }) + } + }); + }, + countyChange: function(e) { + var self = this; + self.setData({ + teamCountyIndex: e.detail.value + }) + + this.getDataFromArea(self.data.teamCounty[self.data.teamCountyIndex].areaId, 2).then(result => { + if(self.data.tempObj.length > 0) { + self.setData({ + teamArea: self.data.tempObj, + teamAreaArray: self.data.tempArray, + areaShowStatus: false, + tempObj: {}, + tempArray: [] + }) + }else { + self.setData({ + teamArea: {}, + teamAreaArray: [], + areaShowStatus: true, + tempObj: {}, + tempArray: [] + }) + } + }) + }, + areaChange: function(e) { + var self = this; + self.setData({ + teamAreaIndex: e.detail.value + }) + }, + changeOpen: function(e) { + if(e.detail.value == ''){ + this.setData({ + openExperience: 0 + }) + }else{ + this.setData({ + openExperience: 1 + }) + } + }, + changeAgree: function (e) { + console.log(e) + if(e.detail.value == ''){ + this.setData({ + isAgree: false + }) + }else{ + this.setData({ + isAgree: true + }) + } + }, + userAgree: function(e) { + var type = e.currentTarget.dataset.type; + wx.navigateTo({ + url: '../userAgree/userAgree?type=' + type, + }) + }, + /** + * 服务类别选择 + * @param {}} e + */ + serviceTypeChange: function(e) { + console.log(e) + var self = this; + var selData = e.detail.value; + if(selData) { + var dataValueStr = ''; + for(var item of selData) { + dataValueStr +=item + ","; + } + if (dataValueStr.length > 0) { + dataValueStr = dataValueStr.substr(0,dataValueStr.length - 1); + } + self.setData({ + serviceTypeValue: dataValueStr + }) + } + }, + /** + * 服务领域或行业选择 + * @param {}} e + */ + serviceIndustryChange: function(e) { + var self = this; + var selData = e.detail.value; + if(selData) { + var dataValueStr = ''; + for(var item of selData) { + dataValueStr +=item + ","; + } + if (dataValueStr.length > 0) { + dataValueStr = dataValueStr.substr(0,dataValueStr.length - 1); + } + self.setData({ + serviceIndustryValue: dataValueStr + }) + } + }, + submitRegister: function () { + var self = this; + if(!self.data.isAgree) { + wx.showToast({ + title: '请阅读并同意《志愿者注册服务协议》', + icon: 'none', + duration: 1500 + }) + return false; + } + var volunteerVO = { + serviceCity: self.data.teamCity[self.data.teamCityIndex] != '' + && self.data.teamCity[self.data.teamCityIndex] != null + && self.data.teamCity[self.data.teamCityIndex] != 'undefined' ? + self.data.teamCity[self.data.teamCityIndex].dictionaryId : + '', + serviceCounty: self.data.teamCounty[self.data.teamCountyIndex] != '' + && self.data.teamCounty[self.data.teamCountyIndex] != null + && self.data.teamCounty[self.data.teamCountyIndex] != 'undefined' ? + self.data.teamCounty[self.data.teamCountyIndex].dictionaryId : + '', + serviceArea: self.data.teamArea[self.data.teamAreaIndex] != '' + && self.data.teamArea[self.data.teamAreaIndex] != null + && self.data.teamArea[self.data.teamAreaIndex] != 'undefined' ? + self.data.teamArea[self.data.teamAreaIndex].dictionaryId : + '', + occupation: self.data.occupation[self.data.occupationIndex] != '' + && self.data.occupation[self.data.occupationIndex] != null + && self.data.occupation[self.data.occupationIndex] != 'undefined' ? + self.data.occupation[self.data.occupationIndex].dictionaryId : + '', + serviceType: self.data.serviceTypeValue, + serviceIndustry: self.data.serviceIndustryValue, + agree: self.data.isAgree, + openExperience : self.data.openExperience, + work: self.data.work, + hobby: self.data.hobby, + cv: self.data.cv, + remark: self.data.remark + }; + var url; + var requ; + if(!self.data.volunteerMsg) { + url = '/app/volunteer/savevolunteer'; + requ = app.restAjax.post; + }else { + url = '/app/volunteer/updatevolunteer/' + self.data.volunteerMsg.volunteerId; + requ = app.restAjax.put; + } + requ(app.restAjax.path(app.volunteerUrl + url, []), + volunteerVO, { + headers: { + 'token': self.data.token + } + }, function(code, data) { + if('200' == code) { + app.dialog.msg('注册成功!'); + wx.navigateTo({ + url: '../volunteer/volunteer', + }) + } + }, function(code, data) { + app.dialog.msg(data.msg); + }, function() { + + }) + }, + /** + *从字典表拉取数据 + */ + getDataFromDict: function(dictId, type) { + var self = this; + return new Promise(resolve => { + app.restAjax.get(app.restAjax.path(app.volunteerUrl + '/app/data/listbyparentid/' + dictId, []), + {}, { + headers: { + 'token': self.data.token + } + }, function(code, data) { + if('200' == code) { + if(data || type === 2) { + var array = []; + for(var item of data) { + delete item.dataParentId; + delete item.dataParentName; + delete item.dataSummary; + delete item.dataCode; + delete item.dataSort; + delete item.subDictionary; + delete item.parent; + + array.push(item.dataName); + } + self.setData({ + tempArray: array + }) + } + self.setData({ + tempObj: data + }) + } + return resolve(); + }, function() { + + }, function() { + + }) + }) + }, + /** + *从区域表拉取数据 + */ + getDataFromArea: function(dictId, type) { + var self = this; + return new Promise(resolve => { + // listbyparentidrelease + app.restAjax.get(app.restAjax.path(app.volunteerUrl + '/app/area/listbyparentidrelease/' + dictId, []), + {}, { + headers: { + 'token': self.data.token + } + }, function(code, data) { + if('200' == code) { + if(data || type === 2) { + var array = []; + for(var item of data) { + delete item.areaParentId; + delete item.areaParentName; + delete item.areaCode; + delete item.areaCityCode; + delete item.areaMergerName; + delete item.areaShortName; + delete item.areaZipCode; + delete item.areaLevel; + delete item.areaLng; + delete item.areaLat; + delete item.areaPinyin; + delete item.areaFirst; + delete item.subArea; + delete item.parent; + + array.push(item.areaName); + } + self.setData({ + tempArray: array + }) + } + self.setData({ + tempObj: data + }) + } + return resolve(); + }, function() { + + }, function() { + + }) + }) + }, + getVolunteerMsg() { + var self = this; + return new Promise(resolve => { + app.restAjax.get(app.restAjax.path(app.volunteerUrl + '/app/volunteer/getvolunteerbyuserid', []), + {}, { + headers: { + 'token': self.data.token + } + }, function(code, data) { + if('200' == code) { + console.log(data) + self.setData({ + volunteerMsg: data, + work: data.work, + hobby: data.hobby, + cv: data.cv, + remark: data.remark, + }) + } + return resolve(); + }, function() { + + }, function() { + + }) + }) + }, + /** + * 生命周期函数--监听页面加载 + */ + onLoad: function (options) { + var self = this; + this.getToken().then(result => { + this.getVolunteerMsg().then(result => { + this.getDataFromDict('a223b308-014a-4e89-93fa-035a564e7fda', 1).then(result => { + self.setData({ + serviceType: self.data.tempObj, + tempObj: {} + }) + }).then(result => { + this.getDataFromDict('7b213c37-8575-4db3-bda1-86c4e38589f7', 1).then(result => { + self.setData({ + serviceIndustry: self.data.tempObj, + tempObj: {} + }) + }) + }).then(result => { + this.getDataFromArea('640675', 2).then(result => { + self.setData({ + teamCity: self.data.tempObj, + teamCityArray: self.data.tempArray, + tempObj: {}, + tempArray: [] + }) + }) + }).then(result => { + this.getDataFromDict('3a2a6615-a4fe-465b-b56d-a2b7ae409b9d', 2).then(result => { + self.setData({ + occupation: self.data.tempObj, + occupationArray: self.data.tempArray, + tempObj: {}, + tempArray: [] + }) + }) + }) + }) + }) + }, + + /** + * 生命周期函数--监听页面初次渲染完成 + */ + onReady: function () { + + }, + + /** + * 生命周期函数--监听页面显示 + */ + onShow: function () { + + }, + + /** + * 生命周期函数--监听页面隐藏 + */ + onHide: function () { + + }, + + /** + * 生命周期函数--监听页面卸载 + */ + onUnload: function () { + + }, + + /** + * 页面相关事件处理函数--监听用户下拉动作 + */ + onPullDownRefresh: function () { + + }, + + /** + * 页面上拉触底事件的处理函数 + */ + onReachBottom: function () { + + }, + + /** + * 用户点击右上角分享 + */ + onShareAppMessage: function () { + + } +}) \ No newline at end of file diff --git a/xz_mini/pages/volunteerRegister/volunteerRegister.json b/xz_mini/pages/volunteerRegister/volunteerRegister.json new file mode 100644 index 0000000..64da9ee --- /dev/null +++ b/xz_mini/pages/volunteerRegister/volunteerRegister.json @@ -0,0 +1,4 @@ +{ + "usingComponents": {}, + "enablePullDownRefresh": false +} \ No newline at end of file diff --git a/xz_mini/pages/volunteerRegister/volunteerRegister.wxml b/xz_mini/pages/volunteerRegister/volunteerRegister.wxml new file mode 100644 index 0000000..13f876c --- /dev/null +++ b/xz_mini/pages/volunteerRegister/volunteerRegister.wxml @@ -0,0 +1,135 @@ + + + 您已经是志愿者,可修改以下信息! + + + 公开经历: + + + + + + + + + + + 旗县区: + + + + + {{teamCityArray[teamCityIndex]}} + + + + + + + + + + + + 服务意向: + + + + + {{item.dataName}} + + + + + + + + 服务领域或行业: + + + + + {{item.dataName}} + + + + + + + + 职业: + + + + + {{occupationArray[occupationIndex]}} + + + + + + + + 工作单位及职务: + + + + + + + 特长爱好: + + + + + + + 个人简历: + + + + + + 备注: + + + + + + + + + + + + + 立即注册 + 立即修改 + \ No newline at end of file diff --git a/xz_mini/pages/volunteerRegister/volunteerRegister.wxss b/xz_mini/pages/volunteerRegister/volunteerRegister.wxss new file mode 100644 index 0000000..1c4c9d6 --- /dev/null +++ b/xz_mini/pages/volunteerRegister/volunteerRegister.wxss @@ -0,0 +1,110 @@ +page { + background: #ffffff; +} + +.register { + padding: 0rpx 0rpx 250rpx 0rpx; +} + +.hint { + background: white; + color: red; + padding: 20rpx; +} + +.thick-line { + align-self: center; + background: #f2f2f2; + height: 5rpx; +} + +.thin-line { + margin: 0rpx 30rpx; + align-self: center; + background: #f2f2f2; + height: 1rpx; +} + +.row { + display: flex; + flex-direction: row; + justify-content: space-between; + align-items: center; + padding: 20rpx; +} + +.column { + display: flex; + flex-direction: column; + justify-content: center; + align-items: flex-start; + padding: 20rpx; +} + +.info-name { + font-size: 26rpx; + color: #000; + line-height: 55rpx; + width: 30%; +} + +.info-text { + font-size: 26rpx; + height: 55rpx; +} + +.info-text input { + width: 100%; + height: 55rpx; + padding: 0 10rpx; + box-sizing: border-box; + text-align: right; +} + +.info-text textarea { + height: 150rpx; + padding: 10rpx; + box-sizing: border-box; + border: 1px solid #DDD; +} + +picker, +.picker { + height: 55rpx; + line-height: 55rpx; +} + +text { + color: red; +} + +.section { + padding: 0 10rpx; + height: 55rpx; +} + +.submit { + width: 100%; + margin: 20rpx auto 0; + display: flex; + justify-content: center; + align-items: center; + height: 80rpx; + color: #fff; + border-radius: 10rpx; + background: #9F1512; +} + +checkbox:nth-of-type(n+2) { + margin-left: 10rpx; +} + +.bottom { + position: fixed; + bottom: 0; + left: 0; + right: 0; + padding: 0 30rpx 20rpx; + background: #fff; + z-index: 10; +} \ No newline at end of file diff --git a/xz_mini/pages/volunteerTeam/volunteerTeam.js b/xz_mini/pages/volunteerTeam/volunteerTeam.js new file mode 100644 index 0000000..2526ea3 --- /dev/null +++ b/xz_mini/pages/volunteerTeam/volunteerTeam.js @@ -0,0 +1,206 @@ +// pages/volunteer/volunteer.js +var app = getApp(); +Page({ + + /** + * 页面的初始数据 + */ + data: { + token: '', + otherTeamMap: [], + type: '1', + teamId: '', + page: { + page: 1, + rows: 10 + }, + totalSize: 0, + + }, + getToken: function () { + var self = this; + return new Promise(resolve => { + wx.getStorage({ + key: 'token', + success(res) { + self.setData({ + token: res.data + }) + return resolve(); + } + }) + }) + }, + newTeam: function () { + wx.navigateTo({ + url: '../newTeam/newTeam', + }) + }, + changeTab: function (e) { + var self = this; + self.data.page.page = 1; + self.setData({ + page: self.data.page, + otherTeamMap: [], + totalSize: 0, + type: e.currentTarget.dataset.type + }) + if (self.data.type === '1') { + self.otherTeam(app.volunteerUrl + '/app/team/otherteamm?otherTeam=true'); + } else { + self.otherTeam(app.volunteerUrl + '/app/team/myjointeam?myTeam=true'); + } + }, + otherTeam: function (url) { + var self = this; + app.restAjax.get(app.restAjax.path(url, []), self.data.page, { + headers: { + token: self.data.token + } + }, function (code, data) { + if ('200' == code) { + self.setData({ + totalSize: data.total + }) + if (data.rows && data.rows.length > 0) { + self.setData({ + otherTeamMap: self.data.otherTeamMap.concat(data.rows) + }) + } else { + app.dialog.msg('暂无更多数据了') + } + } + }, function (code, data) { + app.dialog.msg(data.msg); + }, function () { + wx.stopPullDownRefresh() + }) + }, + /** + * 申请/退出加入团队 + */ + joinOrOutTeam: function (e) { + var self = this; + self.setData({ + teamId: e.currentTarget.dataset.teamid + }) + var teamMemberVO; + var url; + var methodType; + var title; + if ('1' == self.data.type) { + url = app.volunteerUrl + '/app/teammember/saveteammember' + teamMemberVO = { + teamId: e.currentTarget.dataset.teamid + } + methodType = app.restAjax.post + title = '申请成功!' + } else { + url = app.volunteerUrl + '/app/teammember/quitTeam/' + self.data.teamId + methodType = app.restAjax.get + title = '退出成功!' + } + + methodType(app.restAjax.path(url, []), + teamMemberVO, { + headers: { + token: self.data.token + } + }, + function (code, data) { + if ('200' == code) { + app.dialog.msg(title); + wx.navigateTo({ + url: '../volunteer/volunteer', + }) + } + }, + function (code, data) { + app.dialog.msg(data.msg); + }, + function () { + + }) + }, + /** + * 生命周期函数--监听页面加载 + */ + onLoad: function (options) { + this.getToken().then(result => { + this.otherTeam(app.volunteerUrl + '/app/team/otherteamm?otherTeam=true'); + }) + }, + + /** + * 生命周期函数--监听页面初次渲染完成 + */ + onReady: function () { + + }, + + /** + * 生命周期函数--监听页面显示 + */ + onShow: function () { + + }, + + /** + * 生命周期函数--监听页面隐藏 + */ + onHide: function () { + + }, + + /** + * 生命周期函数--监听页面卸载 + */ + onUnload: function () { + + }, + + /** + * 页面相关事件处理函数--监听用户下拉动作 + */ + onPullDownRefresh: function () { + var self = this; + self.data.page.page = 1; + self.setData({ + page: self.data.page, + otherTeamMap: [], + totalSize: 0, + }) + if (self.data.type === '1') { + self.otherTeam(app.volunteerUrl + '/app/team/otherteamm?otherTeam=true'); + } else { + self.otherTeam(app.volunteerUrl + '/app/team/myjointeam?myTeam=true'); + } + }, + + /** + * 页面上拉触底事件的处理函数 + */ + onReachBottom: function () { + var self = this; + if (self.data.otherTeamMap.length < self.data.totalSize) { + self.data.page.page = self.data.page.page + 1 + self.setData({ + page: self.data.page + }) + if (self.data.type === '1') { + self.otherTeam(app.volunteerUrl + '/app/team/otherteamm?otherTeam=true'); + } else { + self.otherTeam(app.volunteerUrl + '/app/team/myjointeam?myTeam=true'); + } + } else { + app.dialog.msg('暂无更多数据了') + } + }, + + /** + * 用户点击右上角分享 + */ + onShareAppMessage: function () { + + } +}) \ No newline at end of file diff --git a/xz_mini/pages/volunteerTeam/volunteerTeam.json b/xz_mini/pages/volunteerTeam/volunteerTeam.json new file mode 100644 index 0000000..7360326 --- /dev/null +++ b/xz_mini/pages/volunteerTeam/volunteerTeam.json @@ -0,0 +1,4 @@ +{ + "usingComponents": {}, + "enablePullDownRefresh": true +} \ No newline at end of file diff --git a/xz_mini/pages/volunteerTeam/volunteerTeam.wxml b/xz_mini/pages/volunteerTeam/volunteerTeam.wxml new file mode 100644 index 0000000..f840dc5 --- /dev/null +++ b/xz_mini/pages/volunteerTeam/volunteerTeam.wxml @@ -0,0 +1,30 @@ + + + + 未参加 + + + + + 已参加 + + + + + + + {{item.teamName}} + 申请加入 + 退出 + 待审核 + 退出 + 审核驳回 + 已退出 + + 团队口号:{{item.teamWatchword}} + 所属区域:{{item.teamCityDictionaryName}} {{item.teamCountyDictionaryName}} {{item.teamAreaDictionaryName}} + + + + 创建新团队 + \ No newline at end of file diff --git a/xz_mini/pages/volunteerTeam/volunteerTeam.wxss b/xz_mini/pages/volunteerTeam/volunteerTeam.wxss new file mode 100644 index 0000000..2674c63 --- /dev/null +++ b/xz_mini/pages/volunteerTeam/volunteerTeam.wxss @@ -0,0 +1,93 @@ +.top-tab{ + position: fixed; + top: 0; + left: 0; + right: 0; + display: flex; + box-shadow:0 0 17rpx 0 rgba(0,0,0,0.1); + border-radius:0 0 31rpx 31rpx; + background: #fff; +} +.tab-box{ + display: flex; + justify-content: center; + align-items: center; + flex: 1; + position: relative; + height: 90rpx; + font-size: 30rpx; + color: #242424; +} +.tab-box.active{ + color: #9F1512; +} +.tab-box image{ + position: absolute; + width: 15rpx; + height: 40rpx; + top: 50%; + margin-top: -20rpx; + display: none; +} +.tab-box.active image{ + display: block; +} +.tab-box image.selected-l{ + left: 100rpx; +} +.tab-box image.selected-r{ + right: 100rpx; +} +.team{ + margin-top: 90rpx; + padding: 0rpx 30rpx 110rpx 30rpx; +} +.team-box{ + padding: 20rpx 0; + border-bottom: 1px solid #EBEBEB; +} +.name-join{ + display: flex; + justify-content: space-between; + height: 40rpx; + line-height: 40rpx; + font-size: 32rpx; + color: #242424; +} +.name{ + width: 70%; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; +} +.join{ + padding: 0 10rpx; + background: rgba(159,21,18,.1); + color: #9F1512; + font-size: 28rpx; + border-radius: 10rpx; +} +.slogan, .area{ + color: #949494; + font-size: 26rpx; + margin-top: 10rpx; +} +.new-team{ + position: fixed; + background: #fff; + bottom: 0; + left: 0; + right: 0; + padding: 15rpx 30rpx; + border-top: 1px solid #EBEBEB; +} +.new-team-btn{ + height: 80rpx; + display: flex; + justify-content: center; + align-items: center; + font-size: 30rpx; + color: #fff; + background: #9F1512; + border-radius: 10rpx; +} \ No newline at end of file diff --git a/xz_mini/project.private.config.json b/xz_mini/project.private.config.json new file mode 100644 index 0000000..6b3482f --- /dev/null +++ b/xz_mini/project.private.config.json @@ -0,0 +1,7 @@ +{ + "description": "项目私有配置文件。此文件中的内容将覆盖 project.config.json 中的相同字段。项目的改动优先同步到此文件中。详见文档:https://developers.weixin.qq.com/miniprogram/dev/devtools/projectconfig.html", + "libVersion": "2.30.0", + "setting": { + "urlCheck": false + } +} \ No newline at end of file diff --git a/xz_mini/sitemap.json b/xz_mini/sitemap.json new file mode 100644 index 0000000..ca02add --- /dev/null +++ b/xz_mini/sitemap.json @@ -0,0 +1,7 @@ +{ + "desc": "关于本文件的更多信息,请参考文档 https://developers.weixin.qq.com/miniprogram/dev/framework/sitemap.html", + "rules": [{ + "action": "allow", + "page": "*" + }] +} \ No newline at end of file diff --git a/xz_mini/subpages/addresschoose/addresschoose.js b/xz_mini/subpages/addresschoose/addresschoose.js new file mode 100644 index 0000000..ec4a666 --- /dev/null +++ b/xz_mini/subpages/addresschoose/addresschoose.js @@ -0,0 +1,147 @@ +// subpages/goodsaddress/goodsaddress.js +var app = getApp(); +Page({ + + /** + * 页面的初始数据 + */ + data: { + token: '', + list: [], + hidePageLoading: false, + defaultAddress: {} + }, + + /** + * 生命周期函数--监听页面加载 + */ + onLoad(options) { + var _self = this; + _self.getToken().then(result => { + _self.getList(); + }) + }, + getToken() { + var self = this; + return new Promise(resolve => { + wx.getStorage({ + key: 'token', + success(res) { + self.setData({ + token: res.data + }) + return resolve(); + } + }) + }) + }, + //获取列表 + getList() { + var _self = this + var header = { + headers: { + token: _self.data.token + } + }; + + app.restAjax.get(app.restAjax.path('{shopUrl}/app/shopaddress/list', [app.shopUrl]), null, header, function (code, data) { + console.log(data); + _self.setData({ + list: data, + hidePageLoading: true + }) + }, function (code, data) { + app.dialog.msg(data.msg); + _self.setData({ + hidePageLoading: true + }) + }, function () { + wx.hideLoading(); + _self.setData({ + hideLoading: true + }) + }) + }, + doRefresh() { + this.setData({ + list: [] + }) + this.getList(); + }, + doEdit(e) { + var id = e.currentTarget.dataset.id; + wx.navigateTo({ + url: '/subpages/editshopaddress/editshopaddress?id=' + id, + }) + }, + doDel(e) { + var id = e.currentTarget.dataset.id; + var item = e.currentTarget.dataset.item; + var _self = this; + if (1 == item.shopAddressDefault) { + wx.showToast({ + icon: 'none', + title: '请先设置默认地址', + }) + return; + } + wx.showModal({ + title: '警告', + content: '确定要删除该收货地址吗?', + complete: (res) => { + if (res.confirm) { + app.dialog.loading("删除中...") + app.restAjax.delete(app.restAjax.path('{shopUrl}/app/shopaddress/remove/{ids}', [app.shopUrl, id]), null, { + headers: { + token: _self.data.token + } + }, function (code, data) { + wx.hideLoading() + if (code == 200) { + app.dialog.msg("删除成功") + _self.getList() + } + }, function (code, data) { + app.dialog.msg(data.msg) + }); + } + } + }) + }, + doSetDefault(e) { + var _self = this; + app.dialog.loading('设置中') + var id = e.currentTarget.dataset.id + var index = e.currentTarget.dataset.index + var item = e.currentTarget.dataset.item + app.restAjax.put(app.restAjax.path('{shopUrl}/app/shopaddress/updatedefault/{shopAddressId}', [app.shopUrl, id]), null, { + headers: { + token: _self.data.token + } + }, function (code, data) { + wx.hideLoading(); + if (code == 200) { + app.dialog.msg('设置成功') + } + _self.setData({ + list: [], + defaultAddress: item + }) + _self.getList(); + }, function (code, data) { + console.log(data) + wx.hideLoading(); + app.dialog.msg(data.msg) + }) + + }, + addAddress() { + var _self= this; + var pages = getCurrentPages(); + var prePage = pages[pages.length - 2] + prePage.setData({ + addressBean: _self.data.defaultAddress + }) + wx.navigateBack() + }, +}) \ No newline at end of file diff --git a/xz_mini/subpages/addresschoose/addresschoose.json b/xz_mini/subpages/addresschoose/addresschoose.json new file mode 100644 index 0000000..3928faa --- /dev/null +++ b/xz_mini/subpages/addresschoose/addresschoose.json @@ -0,0 +1,3 @@ +{ + "usingComponents": {} +} \ No newline at end of file diff --git a/xz_mini/subpages/addresschoose/addresschoose.wxml b/xz_mini/subpages/addresschoose/addresschoose.wxml new file mode 100644 index 0000000..d7a9499 --- /dev/null +++ b/xz_mini/subpages/addresschoose/addresschoose.wxml @@ -0,0 +1,20 @@ + + + + + + + {{item.areaName}} + {{item.shopAddressContent}} + {{item.shopAddressName}} {{item.shopAddressPhone}} + + + + + + 确认 + + \ No newline at end of file diff --git a/xz_mini/subpages/addresschoose/addresschoose.wxss b/xz_mini/subpages/addresschoose/addresschoose.wxss new file mode 100644 index 0000000..b024cc7 --- /dev/null +++ b/xz_mini/subpages/addresschoose/addresschoose.wxss @@ -0,0 +1,106 @@ +/* subpages/goodsaddress/goodsaddress.wxss */ +.empty-box { + display: flex; + flex-direction: column; + justify-content: center; + align-items: center; + position: absolute; + top: 50%; + left: 50%; + transform: translateX(-50%)translateY(-50%); +} + +.empty-box image { + width: 140rpx; + height: 100rpx; +} + +.empty-box text { + margin-top: 20rpx; + font-size: 32rpx; +} + +.content-box { + display: flex; + flex-direction: column; + justify-content: center; + align-items: center; + width: 95%; + padding: 20rpx; + border-radius: 10rpx; + box-shadow: 5rpx 5rpx 20rpx #f2f2f2; + margin: 20rpx 20rpx 100rpx 0rpx; +} + +.address-item { + display: flex; + flex-direction: row; + justify-content: flex-start; + align-items: center; + padding: 10rpx; + border-bottom: 1rpx solid #f2f2f2; + width: 100%; +} + + +.address-item .check { + width: 48rpx; + height: 48rpx; + +} + +.address-content { + display: flex; + flex-direction: column; + justify-content: center; + align-items: flex-start; + width: 100%; + max-width: 100%; + margin-left: 20rpx; +} + +.address-area { + font-size: 32rpx; +} + +.address-name { + font-size: 40rpx; + margin: 10rpx 0rpx; +} + +.address-phone { + font-size: 32rpx; +} + +.address-control-box { + display: flex; + width: 80rpx; + flex-direction: column; + justify-content: space-around; + align-items: center; +} + +.edit-icon { + width: 48rpx; + height: 48rpx; +} + +.del-icon { + width: 48rpx; + height: 48rpx; + margin-top: 20rpx; +} + +.bottom-btn { + height: 80rpx; + background: #9f1512; + border-radius: 10rpx; + text-align: center; + color: white; + position: fixed; + bottom: 0rpx; + left: 0rpx; + line-height: 80rpx; + margin: 0rpx 20rpx 10rpx 20rpx; + width: 95%; +} \ No newline at end of file diff --git a/xz_mini/subpages/addshopaddress/addshopaddress.js b/xz_mini/subpages/addshopaddress/addshopaddress.js new file mode 100644 index 0000000..64101f2 --- /dev/null +++ b/xz_mini/subpages/addshopaddress/addshopaddress.js @@ -0,0 +1,244 @@ +// subpages/addshopaddress/addshopaddress.js +var app = getApp(); +Page({ + + /** + * 页面的初始数据 + */ + data: { + token: '', + area1: '', + area2: '', + area3: '', + area4: '', + detailContent: '', + name: '', + phone: '', + zipCode: '', + + tempProvIndex: -1, + tempProvArray: [], + + cityIndex: -1, + cityArray: [], + + countyIndex: -1, + countyArray: [], + + villageIndex: -1, + villageArray: [] + + }, + + /** + * 生命周期函数--监听页面加载 + */ + /** + * 生命周期函数--监听页面加载 + */ + onLoad(options) { + var _self = this; + _self.getToken().then(result => { + + }) + _self.getAreaList(0, 1); + }, + getToken() { + var self = this; + return new Promise(resolve => { + wx.getStorage({ + key: 'token', + success(res) { + self.setData({ + token: res.data + }) + return resolve(); + } + }) + }) + }, + inputZip(e) { + this.setData({ + zipCode: e.detail.value + }) + }, + inputName(e) { + this.setData({ + name: e.detail.value + }) + }, + inputPhone(e) { + this.setData({ + phone: e.detail.value + }) + }, + inputDetail(e) { + this.setData({ + detailContent: e.detail.value + }) + }, + //获取 + getAreaList(areaId, type) { + var _self = this; + app.dialog.loading("加载中..."); + app.restAjax.get(app.restAjax.path('{shopUrl}/app/area/listbyparentidrelease/{areaParentId}', + [app.loginUrl, areaId]), + null, null, + function (code, data) { + switch (type) { + case 1: //省份 + _self.setData({ + tempProvIndex: -1, + tempProvArray: data + }) + break; + case 2: + _self.setData({ + cityArray: data + }) + break; + case 3: + _self.setData({ + countyArray: data + }) + break; + case 4: + _self.setData({ + villageArray: data + }) + break; + default: + break; + } + }, + function (code, data) { + app.dialog.msg(data.msg); + }, + function () { + wx.hideLoading(); + }) + }, + //省份选择 + provChange(e) { + var index = e.detail.value + this.setData({ + tempProvIndex: index, + cityIndex: -1, + cityArray: [], + countyIndex: -1, + countyArray: [], + villageIndex: -1, + villageArray: [] + }) + this.getAreaList(this.data.tempProvArray[this.data.tempProvIndex].areaId, 2); + }, + //市选择 + cityChange(e) { + var index = e.detail.value + this.setData({ + cityIndex: index, + countyIndex: -1, + countyArray: [], + villageIndex: -1, + villageArray: [] + }) + this.getAreaList(this.data.cityArray[this.data.cityIndex].areaId, 3); + }, + //区县选择 + countyChange(e) { + var index = e.detail.value + this.setData({ + countyIndex: index, + villageIndex: -1, + villageArray: [] + }) + this.getAreaList(this.data.countyArray[this.data.countyIndex].areaId, 4); + }, + //乡镇选择 + villageChange(e) { + var index = e.detail.value + this.setData({ + villageIndex: index + }) + }, + doSave() { + if (this.checkParams()) { + app.dialog.loading("保存中...") + var _self = this; + var areaName = _self.data.tempProvArray[_self.data.tempProvIndex].areaName + ' ' + _self.data.cityArray[_self.data.cityIndex].areaName + ' ' + _self.data.countyArray[_self.data.countyIndex].areaName + ' ' + _self.data.villageArray[_self.data.villageIndex].areaName + var info = { + areaCode: _self.data.villageArray[_self.data.villageIndex].areaCode, + areaId: _self.data.villageArray[_self.data.villageIndex].areaId, + areaName: areaName, + shopAddressContent: _self.data.detailContent, + shopAddressName: _self.data.name, + shopAddressPhone: _self.data.phone, + shopAddressZipcode: _self.data.zipCode + }; + app.restAjax.post(app.restAjax.path('{url}/app/shopaddress/save', [app.shopUrl]), info, { + headers: { + token: _self.data.token + } + }, function (code, data) { + wx.hideLoading() + console.log(code) + if (code == 200) { + app.dialog.msg("添加成功") + var pages = getCurrentPages(); + let prevPage = pages[pages.length - 2]; + prevPage.doRefresh() + wx.navigateBack() + } + }, function (code, data) { + wx.hideLoading() + app.dialog.msg(data.msg); + }); + } + }, + checkParams() { + if (this.data.tempProvIndex == -1) { + wx.showToast({ + title: '请选择省份', + }) + return false; + } + if (this.data.cityIndex == -1) { + wx.showToast({ + title: '请选择市', + }) + return false; + } + if (this.data.countyIndex == -1) { + wx.showToast({ + title: '请选择区县', + }) + return false; + } + if (this.data.villageIndex == -1) { + wx.showToast({ + title: '请选择乡镇街道', + }) + return false; + } + if (this.data.detailContent == '') { + wx.showToast({ + title: '请输入详细地址', + }) + return false; + } + if (this.data.name == '') { + wx.showToast({ + title: '请输入姓名', + }) + return false; + } + if (this.data.phone == '') { + wx.showToast({ + title: '请输入联系方式', + }) + return false; + } + return true; + + } +}) \ No newline at end of file diff --git a/xz_mini/subpages/addshopaddress/addshopaddress.json b/xz_mini/subpages/addshopaddress/addshopaddress.json new file mode 100644 index 0000000..7f6ca08 --- /dev/null +++ b/xz_mini/subpages/addshopaddress/addshopaddress.json @@ -0,0 +1,4 @@ +{ + "usingComponents": {}, + "navigationBarTitleText": "新增收货地址" +} \ No newline at end of file diff --git a/xz_mini/subpages/addshopaddress/addshopaddress.wxml b/xz_mini/subpages/addshopaddress/addshopaddress.wxml new file mode 100644 index 0000000..7c2ed92 --- /dev/null +++ b/xz_mini/subpages/addshopaddress/addshopaddress.wxml @@ -0,0 +1,72 @@ + + + + + 省份 + + + + {{tempProvIndex==-1 ? '请选择省份':tempProvArray[tempProvIndex].areaName}} + + + + + + + + + + + {{cityIndex==-1? '请选择市':cityArray[cityIndex].areaName}} + + + + + + + 区、县 + + + + {{countyIndex==-1? '请选择区县':countyArray[countyIndex].areaName}} + + + + + + + 乡镇街道 + + + + {{villageIndex==-1?'请选择乡镇街道':villageArray[villageIndex].areaName}} + + + + + + + 详细地址 + + + + + + 姓名 + + + + + + 联系方式 + + + + + + 邮政编码 + + + + +保存 \ No newline at end of file diff --git a/xz_mini/subpages/addshopaddress/addshopaddress.wxss b/xz_mini/subpages/addshopaddress/addshopaddress.wxss new file mode 100644 index 0000000..27e72fb --- /dev/null +++ b/xz_mini/subpages/addshopaddress/addshopaddress.wxss @@ -0,0 +1,58 @@ +/* subpages/addshopaddress/addshopaddress.wxss */ +.address-content { + display: flex; + flex-direction: column; + justify-content: center; + align-items: flex-start; + padding: 20rpx; +} + +.address-item { + display: flex; + flex-direction: row; + justify-content: flex-start; + align-items: center; + width: 100%; + font-size: 32rpx; +} + +.address-item:nth-of-type(n+2) { + margin-top: 20rpx; +} + + + +.area-title { + width: 25%; +} + +.line { + background: #9f1512; + width: 5rpx; + height: 35rpx; +} + +.area-content { + flex: 2; + margin-left: 20rpx; +} + +.arrow-icon { + width: 32rpx; + height: 32rpx; +} + + +.bottom-btn { + height: 80rpx; + background: #9f1512; + border-radius: 10rpx; + text-align: center; + color: white; + position: fixed; + bottom: 0rpx; + left: 0rpx; + line-height: 80rpx; + margin: 0rpx 20rpx 10rpx 20rpx; + width: 95%; +} \ No newline at end of file diff --git a/xz_mini/subpages/editshopaddress/editshopaddress.js b/xz_mini/subpages/editshopaddress/editshopaddress.js new file mode 100644 index 0000000..a4198b7 --- /dev/null +++ b/xz_mini/subpages/editshopaddress/editshopaddress.js @@ -0,0 +1,285 @@ +// subpages/addshopaddress/addshopaddress.js +var app = getApp(); +Page({ + + /** + * 页面的初始数据 + */ + data: { + id: '', + token: '', + area1: '', + area2: '', + area3: '', + area4: '', + detailContent: '', + name: '', + phone: '', + zipCode: '', + + tempProvIndex: -1, + tempProvArray: [], + + cityIndex: -1, + cityArray: [], + + countyIndex: -1, + countyArray: [], + + villageIndex: -1, + villageArray: [], + detailBean: {} + + }, + + /** + * 生命周期函数--监听页面加载 + */ + /** + * 生命周期函数--监听页面加载 + */ + onLoad(options) { + var _self = this; + var id = options.id + _self.setData({ + id: id + }) + _self.getToken().then(result => { + _self.getAddressDetail(); + }) + _self.getAreaList(0, 1); + }, + getToken() { + var self = this; + return new Promise(resolve => { + wx.getStorage({ + key: 'token', + success(res) { + self.setData({ + token: res.data + }) + return resolve(); + } + }) + }) + }, + getAddressDetail() { + var _self = this; + app.dialog.loading("加载中..."); + app.restAjax.get(app.restAjax.path('{baseUrl}/app/shopaddress/get/{shopAddressId}', [app.shopUrl, _self.data.id]), null, { + headers: { + token: _self.data.token + } + }, function (code, data) { + wx.hideLoading() + if (data) { + _self.setData({ + detailBean: data, + detailContent: data.shopAddressContent, + name: data.shopAddressName, + phone: data.shopAddressPhone, + zipCode: data.shopAddressZipcode + }) + } + }, function (code, data) { + wx.hideLoading() + }) + }, + inputZip(e) { + this.setData({ + zipCode: e.detail.value + }) + }, + inputName(e) { + this.setData({ + name: e.detail.value + }) + }, + inputPhone(e) { + this.setData({ + phone: e.detail.value + }) + }, + inputDetail(e) { + this.setData({ + detailContent: e.detail.value + }) + }, + //获取 + getAreaList(areaId, type) { + var _self = this; + app.dialog.loading("加载中..."); + app.restAjax.get(app.restAjax.path('{shopUrl}/app/area/listbyparentidrelease/{areaParentId}', + [app.loginUrl, areaId]), + null, null, + function (code, data) { + switch (type) { + case 1: //省份 + _self.setData({ + tempProvIndex: -1, + tempProvArray: data + }) + break; + case 2: + _self.setData({ + cityArray: data + }) + break; + case 3: + _self.setData({ + countyArray: data + }) + break; + case 4: + _self.setData({ + villageArray: data + }) + break; + default: + break; + } + }, + function (code, data) { + app.dialog.msg(data.msg); + }, + function () { + wx.hideLoading(); + }) + }, + //省份选择 + provChange(e) { + var index = e.detail.value + this.setData({ + tempProvIndex: index, + cityIndex: -1, + cityArray: [], + countyIndex: -1, + countyArray: [], + villageIndex: -1, + villageArray: [] + }) + this.getAreaList(this.data.tempProvArray[this.data.tempProvIndex].areaId, 2); + }, + //市选择 + cityChange(e) { + var index = e.detail.value + this.setData({ + cityIndex: index, + countyIndex: -1, + countyArray: [], + villageIndex: -1, + villageArray: [] + }) + this.getAreaList(this.data.cityArray[this.data.cityIndex].areaId, 3); + }, + //区县选择 + countyChange(e) { + var index = e.detail.value + this.setData({ + countyIndex: index, + villageIndex: -1, + villageArray: [] + }) + this.getAreaList(this.data.countyArray[this.data.countyIndex].areaId, 4); + }, + //乡镇选择 + villageChange(e) { + var index = e.detail.value + this.setData({ + villageIndex: index + }) + }, + doSave() { + if (this.checkParams()) { + app.dialog.loading("修改中...") + var _self = this; + var areaName = ''; + var areaId = ''; + var areaCode = ''; + if (_self.data.tempProvIndex == -1) { + areaName = _self.data.detailBean.areaName; + areaId = _self.data.detailBean.areaId; + areaCode = _self.data.detailBean.areaCode; + } else { + areaName = _self.data.tempProvArray[_self.data.tempProvIndex].areaName + ' ' + _self.data.cityArray[_self.data.cityIndex].areaName + ' ' + _self.data.countyArray[_self.data.countyIndex].areaName + ' ' + _self.data.villageArray[_self.data.villageIndex].areaName; + areaCode = _self.data.villageArray[_self.data.villageIndex].areaCode; + areaId = _self.data.villageArray[_self.data.villageIndex].areaId; + } + var info = { + areaCode: areaCode, + areaId: areaId, + areaName: areaName, + shopAddressContent: _self.data.detailContent, + shopAddressName: _self.data.name, + shopAddressPhone: _self.data.phone, + shopAddressZipcode: _self.data.zipCode + }; + app.restAjax.put(app.restAjax.path('{url}/app/shopaddress/update/{shopAddressId}', [app.shopUrl, _self.data.id]), info, { + headers: { + token: _self.data.token + } + }, function (code, data) { + wx.hideLoading() + console.log(code) + if (code == 200) { + app.dialog.msg("修改成功") + var pages = getCurrentPages(); + let prevPage = pages[pages.length - 2]; + prevPage.doRefresh() + wx.navigateBack() + } + }, function (code, data) { + wx.hideLoading() + app.dialog.msg(data.msg); + }); + } + }, + checkParams() { + if (this.data.tempProvIndex != -1) { + if (this.data.tempProvIndex == -1) { + wx.showToast({ + title: '请选择省份', + }) + return false; + } + if (this.data.cityIndex == -1) { + wx.showToast({ + title: '请选择市', + }) + return false; + } + if (this.data.countyIndex == -1) { + wx.showToast({ + title: '请选择区县', + }) + return false; + } + if (this.data.villageIndex == -1) { + wx.showToast({ + title: '请选择乡镇街道', + }) + return false; + } + } + if (this.data.detailContent == '') { + wx.showToast({ + title: '请输入详细地址', + }) + return false; + } + if (this.data.name == '') { + wx.showToast({ + title: '请输入姓名', + }) + return false; + } + if (this.data.phone == '') { + wx.showToast({ + title: '请输入联系方式', + }) + return false; + } + return true; + + } +}) \ No newline at end of file diff --git a/xz_mini/subpages/editshopaddress/editshopaddress.json b/xz_mini/subpages/editshopaddress/editshopaddress.json new file mode 100644 index 0000000..8340eab --- /dev/null +++ b/xz_mini/subpages/editshopaddress/editshopaddress.json @@ -0,0 +1,4 @@ +{ + "usingComponents": {}, + "navigationBarTitleText": "收货地址修改" +} \ No newline at end of file diff --git a/xz_mini/subpages/editshopaddress/editshopaddress.wxml b/xz_mini/subpages/editshopaddress/editshopaddress.wxml new file mode 100644 index 0000000..ac1a5cb --- /dev/null +++ b/xz_mini/subpages/editshopaddress/editshopaddress.wxml @@ -0,0 +1,74 @@ + + + + {{detailBean.areaName}} + + + 省份 + + + + {{tempProvIndex==-1 ? '请选择省份':tempProvArray[tempProvIndex].areaName}} + + + + + + + + + + + {{cityIndex==-1? '请选择市':cityArray[cityIndex].areaName}} + + + + + + + 区、县 + + + + {{countyIndex==-1? '请选择区县':countyArray[countyIndex].areaName}} + + + + + + + 乡镇街道 + + + + {{villageIndex==-1?'请选择乡镇街道':villageArray[villageIndex].areaName}} + + + + + + + 详细地址 + + + + + + 姓名 + + + + + + 联系方式 + + + + + + 邮政编码 + + + + +保存 \ No newline at end of file diff --git a/xz_mini/subpages/editshopaddress/editshopaddress.wxss b/xz_mini/subpages/editshopaddress/editshopaddress.wxss new file mode 100644 index 0000000..20832cc --- /dev/null +++ b/xz_mini/subpages/editshopaddress/editshopaddress.wxss @@ -0,0 +1,64 @@ +/* subpages/addshopaddress/addshopaddress.wxss */ +.address-content { + display: flex; + flex-direction: column; + justify-content: center; + align-items: flex-start; + padding: 20rpx; +} + +.address-item { + display: flex; + flex-direction: row; + justify-content: flex-start; + align-items: center; + width: 100%; + font-size: 32rpx; +} + +.address-item:nth-of-type(n+2) { + margin-top: 20rpx; +} + + + +.area-title { + width: 25%; +} + +.line { + background: #9f1512; + width: 5rpx; + height: 35rpx; +} + +.area-content { + flex: 2; + margin-left: 20rpx; +} + +.arrow-icon { + width: 32rpx; + height: 32rpx; +} + + +.bottom-btn { + height: 80rpx; + background: #9f1512; + border-radius: 10rpx; + text-align: center; + color: white; + position: fixed; + bottom: 0rpx; + left: 0rpx; + line-height: 80rpx; + margin: 0rpx 20rpx 10rpx 20rpx; + width: 95%; +} + +.current-address { + font-size: 36rpx; + padding: 20rpx 0rpx; + font-weight: bold; +} \ No newline at end of file diff --git a/xz_mini/subpages/goodsaddress/goodsaddress.js b/xz_mini/subpages/goodsaddress/goodsaddress.js new file mode 100644 index 0000000..ed39b83 --- /dev/null +++ b/xz_mini/subpages/goodsaddress/goodsaddress.js @@ -0,0 +1,140 @@ +// subpages/goodsaddress/goodsaddress.js +var app = getApp(); +Page({ + + /** + * 页面的初始数据 + */ + data: { + token: '', + list: [], + hidePageLoading: false + }, + + /** + * 生命周期函数--监听页面加载 + */ + onLoad(options) { + var _self = this; + _self.getToken().then(result => { + _self.getList(); + }) + }, + getToken() { + var self = this; + return new Promise(resolve => { + wx.getStorage({ + key: 'token', + success(res) { + self.setData({ + token: res.data + }) + return resolve(); + } + }) + }) + }, + //获取列表 + getList() { + var _self = this + var header = { + headers: { + token: _self.data.token + } + }; + + app.restAjax.get(app.restAjax.path('{shopUrl}/app/shopaddress/list', [app.shopUrl]), null, header, function (code, data) { + console.log(data); + _self.setData({ + list: data, + hidePageLoading: true + }) + }, function (code, data) { + app.dialog.msg(data.msg); + _self.setData({ + hidePageLoading: true + }) + }, function () { + wx.hideLoading(); + _self.setData({ + hideLoading: true + }) + }) + }, + doRefresh() { + this.setData({ + list: [] + }) + this.getList(); + }, + doEdit(e) { + var id = e.currentTarget.dataset.id; + wx.navigateTo({ + url: '/subpages/editshopaddress/editshopaddress?id=' + id, + }) + }, + doDel(e) { + var id = e.currentTarget.dataset.id; + var item = e.currentTarget.dataset.item; + var _self = this; + if (1 == item.shopAddressDefault) { + wx.showToast({ + icon: 'none', + title: '请先设置默认地址', + }) + return; + } + wx.showModal({ + title: '警告', + content: '确定要删除该收货地址吗?', + complete: (res) => { + if (res.confirm) { + app.dialog.loading("删除中...") + app.restAjax.delete(app.restAjax.path('{shopUrl}/app/shopaddress/remove/{ids}', [app.shopUrl, id]), null, { + headers: { + token: _self.data.token + } + }, function (code, data) { + wx.hideLoading() + if (code == 200) { + app.dialog.msg("删除成功") + _self.getList() + } + }, function (code, data) { + app.dialog.msg(data.msg) + }); + } + } + }) + }, + doSetDefault(e) { + var _self = this; + app.dialog.loading('设置中') + var id = e.currentTarget.dataset.id + var index = e.currentTarget.dataset.index + app.restAjax.put(app.restAjax.path('{shopUrl}/app/shopaddress/updatedefault/{shopAddressId}', [app.shopUrl, id]), null, { + headers: { + token: _self.data.token + } + }, function (code, data) { + wx.hideLoading(); + if (code == 200) { + app.dialog.msg('设置成功') + } + _self.setData({ + list: [] + }) + _self.getList(); + }, function (code, data) { + console.log(data) + wx.hideLoading(); + app.dialog.msg(data.msg) + }) + + }, + addAddress() { + wx.navigateTo({ + url: '/subpages/addshopaddress/addshopaddress' + }) + }, +}) \ No newline at end of file diff --git a/xz_mini/subpages/goodsaddress/goodsaddress.json b/xz_mini/subpages/goodsaddress/goodsaddress.json new file mode 100644 index 0000000..99a8774 --- /dev/null +++ b/xz_mini/subpages/goodsaddress/goodsaddress.json @@ -0,0 +1,4 @@ +{ + "usingComponents": {}, + "navigationBarTitleText": "收货地址" +} \ No newline at end of file diff --git a/xz_mini/subpages/goodsaddress/goodsaddress.wxml b/xz_mini/subpages/goodsaddress/goodsaddress.wxml new file mode 100644 index 0000000..c93948c --- /dev/null +++ b/xz_mini/subpages/goodsaddress/goodsaddress.wxml @@ -0,0 +1,23 @@ + + + + + + + {{item.areaName}} + {{item.shopAddressContent}} + {{item.shopAddressName}} {{item.shopAddressPhone}} + + + + + + + + + + 暂无数据 + + 新增收货地址 + + \ No newline at end of file diff --git a/xz_mini/subpages/goodsaddress/goodsaddress.wxss b/xz_mini/subpages/goodsaddress/goodsaddress.wxss new file mode 100644 index 0000000..e35a71b --- /dev/null +++ b/xz_mini/subpages/goodsaddress/goodsaddress.wxss @@ -0,0 +1,108 @@ +/* subpages/goodsaddress/goodsaddress.wxss */ +.empty-box { + position: fixed; + top: 0; + left: 0; + right: 0; + bottom: 0; + display: flex; + flex-direction: column; + justify-content: center; + align-items: center; + background: white; +} + +.empty-box image { + width: 140rpx; + height: 100rpx; +} + +.empty-box text { + margin-top: 20rpx; + font-size: 32rpx; +} + +.content-box { + display: flex; + flex-direction: column; + justify-content: center; + align-items: center; + width: 95%; + padding: 20rpx; + border-radius: 10rpx; + box-shadow: 5rpx 5rpx 20rpx #f2f2f2; + margin: 20rpx 20rpx 100rpx 0rpx; +} + +.address-item { + display: flex; + flex-direction: row; + justify-content: flex-start; + align-items: center; + padding: 10rpx; + border-bottom: 1rpx solid #f2f2f2; + width: 100%; +} + + +.address-item .check { + width: 48rpx; + height: 48rpx; + +} + +.address-content { + display: flex; + flex-direction: column; + justify-content: center; + align-items: flex-start; + width: 100%; + max-width: 100%; + margin-left: 20rpx; +} + +.address-area { + font-size: 32rpx; +} + +.address-name { + font-size: 40rpx; + margin: 10rpx 0rpx; +} + +.address-phone { + font-size: 32rpx; +} + +.address-control-box { + display: flex; + width: 80rpx; + flex-direction: column; + justify-content: space-around; + align-items: center; +} + +.edit-icon { + width: 48rpx; + height: 48rpx; +} + +.del-icon { + width: 48rpx; + height: 48rpx; + margin-top: 20rpx; +} + +.bottom-btn { + height: 80rpx; + background: #9f1512; + border-radius: 10rpx; + text-align: center; + color: white; + position: fixed; + bottom: 0rpx; + left: 0rpx; + line-height: 80rpx; + margin: 0rpx 20rpx 10rpx 20rpx; + width: 95%; +} \ No newline at end of file diff --git a/xz_mini/subpages/goodscar/goodscar.js b/xz_mini/subpages/goodscar/goodscar.js new file mode 100644 index 0000000..30ff57b --- /dev/null +++ b/xz_mini/subpages/goodscar/goodscar.js @@ -0,0 +1,137 @@ +// subpages/goodscar/goodscar.js +var app = getApp(); +Page({ + + /** + * 页面的初始数据 + */ + data: { + carList: [], + isHidePageloading: false, + imgUrl: app.shopImgUrl, + totalPrice: 0.0 + }, + + /** + * 生命周期函数--监听页面加载 + */ + onLoad(options) { + var _self = this; + try { + var value = wx.getStorageSync('carlist'); + console.log(value) + if (value) { + _self.setData({ + carList: value, + isHidePageloading: true + }) + _self.countPrice() + } else { + _self.setData({ + isHidePageloading: true + }) + } + } catch (e) { + + } + }, + onShow() { + var _self = this; + try { + var value = wx.getStorageSync('carlist'); + console.log(value) + if (value) { + _self.setData({ + carList: value, + isHidePageloading: true + }) + _self.countPrice() + } else { + _self.setData({ + isHidePageloading: true + }) + } + } catch (e) { + + } + }, + delGoods(e) { + var _self = this; + wx.showModal({ + title: '提示', + content: '确定要删除该商品吗?', + complete: (res) => { + if (res.confirm) { + var index = e.currentTarget.dataset.index + console.log(index) + _self.data.carList.splice(index, 1) + _self.setData({ + carList: _self.data.carList + }) + wx.setStorageSync('carlist', _self.data.carList); + _self.countPrice(); + } + } + }) + }, + delCount(e) { + var _self = this; + var index = e.currentTarget.dataset.index + if (this.data.carList[index].carAmount == 1) { + return; + } + this.data.carList[index].carAmount -= 1; + this.setData({ + carList: this.data.carList + }) + wx.setStorageSync('carlist', _self.data.carList); + _self.countPrice(); + }, + addCount(e) { + var _self = this; + var index = e.currentTarget.dataset.index + this.data.carList[index].carAmount += 1; + this.setData({ + carList: this.data.carList + }) + wx.setStorageSync('carlist', _self.data.carList); + _self.countPrice(); + }, + selSelect(e) { + var _self = this; + var index = e.currentTarget.dataset.index; + _self.data.carList[index].isCheck = !_self.data.carList[index].isCheck; + _self.setData({ + carList: _self.data.carList + }) + wx.setStorageSync('carlist', _self.data.carList); + _self.countPrice(); + }, + countPrice() { + var _self = this; + var tempCount = 0; + for (let i = 0; i < _self.data.carList.length; i++) { + const item = _self.data.carList[i]; + if (item.isCheck) { + tempCount = item.goodsPrice * item.carAmount + tempCount; + } + } + _self.setData({ + totalPrice: tempCount + }) + }, + toConfirmOrder() { + var _self = this; + if (_self.data.totalPrice > 0) { + wx.navigateTo({ + url: '/subpages/orderconfirm/orderconfirm', + }) + } else { + wx.showToast({ + icon: 'none', + title: '请选择要购买的商品', + }) + } + + } +}) \ No newline at end of file diff --git a/xz_mini/subpages/goodscar/goodscar.json b/xz_mini/subpages/goodscar/goodscar.json new file mode 100644 index 0000000..b67c440 --- /dev/null +++ b/xz_mini/subpages/goodscar/goodscar.json @@ -0,0 +1,4 @@ +{ + "usingComponents": {}, + "navigationBarTitleText": "购物车" +} \ No newline at end of file diff --git a/xz_mini/subpages/goodscar/goodscar.wxml b/xz_mini/subpages/goodscar/goodscar.wxml new file mode 100644 index 0000000..47c80e0 --- /dev/null +++ b/xz_mini/subpages/goodscar/goodscar.wxml @@ -0,0 +1,44 @@ + + + + + + + + + + + ¥{{item.goodsPrice}} + {{item.goodsStandarName}} + + + 销量{{item.goodsSalesVolume}} + {{item.goodsNotFreight ==1 ? '不包邮':'包邮'}} + + + + + {{item.carAmount}} + + + + + + + + + + + + + ¥ + {{totalPrice}} + + 去结算 + + + + + + + \ No newline at end of file diff --git a/xz_mini/subpages/goodscar/goodscar.wxss b/xz_mini/subpages/goodscar/goodscar.wxss new file mode 100644 index 0000000..00e751d --- /dev/null +++ b/xz_mini/subpages/goodscar/goodscar.wxss @@ -0,0 +1,240 @@ +/* subpages/goodscar/goodscar.wxss */ + +.category-empty { + display: flex; + flex-direction: column; + justify-content: center; + align-items: center; + text-align: center; + align-self: center; + + position: fixed; + top: 50%; + left: 50%; + transform: translateX(-50%)translateY(-50%); +} + +.category-empty image { + width: 180rpx; + height: 120rpx; +} + +.category-empty .hint { + margin-top: 30rpx; + font-size: 32rpx; +} + +.goods-item { + display: flex; + flex-direction: row; + padding: 10rpx; + margin-top: 10rpx; +} + +.check { + width: 48rpx; + height: 48rpx; + min-width: 48rpx; + min-height: 48rpx; + max-height: 48rpx; + max-width: 48rpx; +} + +.goods { + display: flex; + flex-direction: row; + justify-content: flex-start; + margin-left: 20rpx; +} + +.goods-img { + width: 180rpx; + height: 160rpx; +} + + +.goods-content { + margin: 0rpx 10rpx; + flex: 1; +} + +.goods-name { + font-size: 32rpx; + overflow: hidden; + text-overflow: ellipsis; + display: -webkit-box; + -webkit-box-orient: vertical; + -webkit-line-clamp: 2; +} + +.goods-unit-price { + font-size: 40rpx; + color: #9f1512; + margin-top: 10rpx; +} + +.goods-standard { + margin-top: 10rpx; + font-size: 32rpx; + border: 1rpx solid #9f1512; + border-radius: 3rpx; + color: #9f1512; + width: fit-content; + max-width: fit-content; + padding: 0rpx 10rpx; +} + +.goods-type-box { + display: flex; + flex-direction: row; + justify-content: space-around; + align-items: center; + margin-top: 20rpx; +} + +.goods-type-box image { + width: 48rpx; + height: 48rpx; +} + +.goods-type { + color: #9f1512; + font-size: 25rpx; + border: 1rpx solid #9f1512; + padding: 0rpx 10rpx; + text-align: center; +} + +.goods-type:last-child { + margin-left: 20rpx; +} + +.type-box { + display: flex; + flex-direction: row; + width: 50%; + justify-content: flex-start; + align-items: center; +} + +.add-del-box { + display: flex; + flex-direction: row; + align-items: center; + justify-content: center; +} + +.add-del-box .txt { + font-size: 35rpx; + padding: 0rpx 15rpx; +} + +.control-box { + width: 50%; + display: flex; + flex-direction: row; + justify-content: space-around; +} + + + +.bottom-box { + display: flex; + flex-direction: column; + background: white; + position: fixed; + bottom: 0; + left: 0; + width: 100%; + +} + +.goods-price { + color: #9f1512; + font-size: 40rpx; +} + +.bottom-content { + display: flex; + flex-direction: row; + justify-content: space-between; + align-items: center; + margin: 25rpx; +} + +.bottom-price { + display: flex; + flex-direction: row; + justify-content: flex-start; + align-items: baseline; + color: #e70606; + text-align: center; + font-weight: bold; +} + +.price-icon { + font-size: 30rpx; +} + +.price-content { + font-size: 55rpx; +} + + +.icon-btn { + display: flex; + flex-direction: row; + justify-content: center; + align-items: center; +} + +.car-icon { + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; + font-size: 30rpx; +} + +.car-icon image { + width: 48rpx; + height: 48rpx; + align-items: center; + align-self: center; + margin-left: 25rpx; + margin-top: 10rpx; +} + +.car { + display: flex; + flex-direction: row; + align-items: center; + justify-content: center; +} + +.car-num { + position: relative; + right: 10rpx; + top: -10rpx; + background: #e70606; + color: white; + width: 48rpx; + height: 48rpx; + border-radius: 50%; + text-align: center; + display: flex; + flex-direction: column; + justify-content: center; + align-items: center; + font-size: 25rpx; +} + +.car-add { + background: linear-gradient(to right bottom, rgb(245, 74, 74), rgb(221, 5, 5) 70px); + color: white; + padding: 15rpx; + border-radius: 10rpx; + margin-left: 20rpx; + font-size: 32rpx; +} + diff --git a/xz_mini/subpages/goodsdetail/goodsdetail.js b/xz_mini/subpages/goodsdetail/goodsdetail.js new file mode 100644 index 0000000..ca58ec6 --- /dev/null +++ b/xz_mini/subpages/goodsdetail/goodsdetail.js @@ -0,0 +1,181 @@ +// subpages/goodsdetail/goodsdetail.js +var app = getApp(); +Page({ + + /** + * 页面的初始数据 + */ + data: { + goodsId: "", + isHidePageloading: false, + detailBean: {}, + currentStandard: {}, + standardList: [], + curStandardIndex: 0, + imgUrl: app.shopImgUrl, + carList: [], + carNum: 0, + }, + + /** + * 生命周期函数--监听页面加载 + */ + onLoad(options) { + this.setData({ + goodsId: options.id + }) + this.getGoodsDetail(); + + }, + onShow() { + try { + var value = wx.getStorageSync('carlist'); + if (value) { + this.setData({ + carList: value + }) + this.parseCarList(); + } + } catch (error) { + + } + }, + parseCarList() { + var _self = this; + var count = 0; + for (let i = 0; i < _self.data.carList.length; i++) { + const item = _self.data.carList[i]; + count = item.carAmount + count; + } + console.log(count) + if (count > 0) { + _self.setData({ + carNum: count + }) + } + }, + //获取商品详情 + getGoodsDetail() { + var _self = this + app.restAjax.get(app.restAjax.path('{shopUrl}/app/shopgoods/getrelease/{goodsId}', + [app.shopUrl, _self.data.goodsId]), + null, + null, + function (code, data) { + if (data) { + if (data.goodsPhotos.length > 0) { + var photos = data.goodsPhotos.split(','); + data.photoList = photos; + } else { + data.photoList = [] + } + data.goodsPrice = 0; + data.goodsStandarName = ""; + data.goodsStandarId = ""; + data.isCheck = false; + data.carAmount = 0; + _self.setData({ + detailBean: data, + }) + } + }, + function (code, data) { + app.dialog.msg(data.msg); + }, + function () { + _self.getGoodsStandardList(); + }) + }, + // carAmount; + // goodsPrice; + // goodsStandarId; + // goodsStandarName; + // isCheck; + //获取商品附加信息 + getGoodsStandardList() { + var _self = this + _self.data.detailBean.goodsPrice = 0; + _self.data.detailBean.goodsStandarName = ""; + _self.data.detailBean.goodsStandarId = ""; + _self.data.detailBean.isCheck = false; + _self.data.detailBean.carAmount = 0; + + app.restAjax.get(app.restAjax.path('{shopUrl}/app/shopgoodsitem/listrelease/{goodsId}', + [app.shopUrl, _self.data.goodsId]), + null, + null, + function (code, data) { + if (data && data.length > 0) { + _self.data.detailBean.goodsPrice = data[0].goodsItemUnitPrice; + _self.data.detailBean.goodsStandarName = data[0].goodsItemName; + _self.data.detailBean.goodsStandarId = data[0].goodsItemId; + _self.setData({ + standardList: data, + currentStandard: data[0], + isHidePageloading: true, + detailBean: _self.data.detailBean + }) + } else { + _self.setData({ + isHidePageloading: true + }) + } + }, + function (code, data) { + app.dialog.msg(data.msg); + _self.setData({ + isHidePageloading: true + }) + }, + function () { + _self.setData({ + isHidePageloading: true + }) + }) + }, + doSelStandard(e) { + var item = e.currentTarget.dataset.item; + var index = e.currentTarget.dataset.index; + this.data.detailBean.goodsPrice = item.goodsItemUnitPrice; + this.data.detailBean.goodsStandarName = item.goodsItemName; + this.data.detailBean.goodsStandarId = item.goodsItemId; + this.setData({ + currentStandard: item, + curStandardIndex: index, + detailBean: this.data.detailBean + }) + }, + // 添加购物车 + addToCar() { + //判断购物车中是否存在该商品 + var _self = this; + var pos = -1; + for (let i = 0; i < _self.data.carList.length; i++) { + var item = _self.data.carList[i]; + if (_self.data.detailBean.goodsId == item.goodsId && _self.data.detailBean.goodsStandarId == item.goodsStandarId) { + pos = i; + break; + } + } + if (pos != -1) { + _self.data.carList[pos].carAmount = _self.data.carList[pos].carAmount + 1; + } else { + _self.data.detailBean.carAmount = 1; + _self.data.carList.push(_self.data.detailBean); + } + _self.setData({ + carList: _self.data.carList + }) + _self.parseCarList(); + wx.setStorageSync('carlist', _self.data.carList) + }, + openCar() { + if (this.data.carNum > 0) { + wx.navigateTo({ + url: '/subpages/goodscar/goodscar', + }) + } else { + app.dialog.msg('购物车无数据') + } + } +}) \ No newline at end of file diff --git a/xz_mini/subpages/goodsdetail/goodsdetail.json b/xz_mini/subpages/goodsdetail/goodsdetail.json new file mode 100644 index 0000000..3928faa --- /dev/null +++ b/xz_mini/subpages/goodsdetail/goodsdetail.json @@ -0,0 +1,3 @@ +{ + "usingComponents": {} +} \ No newline at end of file diff --git a/xz_mini/subpages/goodsdetail/goodsdetail.wxml b/xz_mini/subpages/goodsdetail/goodsdetail.wxml new file mode 100644 index 0000000..b41c699 --- /dev/null +++ b/xz_mini/subpages/goodsdetail/goodsdetail.wxml @@ -0,0 +1,83 @@ + + + + + + + + + 库存:{{currentStandard.goodsItemTotal}} + 销量:{{detailBean.goodsSalesVolume}} + 评分:{{detailBean.userEvaluate}} + {{detailBean.goodsNotFreight==1? '包邮':'不包邮'}} + + + {{detailBean.goodsName}} + + + {{detailBean.shopName}} + + + + + + + 规格 + + + + + + {{item.goodsItemName}} + + + + + + + + + 详情 + + + + + + {{it.parameterName}} + {{it.shopGoodsParameterContent}} + + + + + + + + + + + + + + + + ¥ + {{currentStandard.goodsItemUnitPrice}} + + + + + + {{carNum>99? '99+':carNum}} + + 购物车 + + 加入购物车 + + + \ No newline at end of file diff --git a/xz_mini/subpages/goodsdetail/goodsdetail.wxss b/xz_mini/subpages/goodsdetail/goodsdetail.wxss new file mode 100644 index 0000000..7771aa2 --- /dev/null +++ b/xz_mini/subpages/goodsdetail/goodsdetail.wxss @@ -0,0 +1,296 @@ +/* subpages/goodsdetail/goodsdetail.wxss */ +page { + background: #f2f2f2; +} + +.container-box { + width: 100%; + height: auto; + display: flex; + flex-direction: column; + margin-bottom: 150rpx; +} + +.banner { + height: 500rpx; +} + +.banner image { + width: 100%; + height: 500rpx; +} + + +.goods-type { + display: flex; + flex-direction: row; + margin-top: 10rpx; + +} + +.name-box { + padding: 30rpx; + display: flex; + flex-direction: column; + box-shadow: 10rpx 5rpx 10rpx #dfdfdf; + background: white; + margin: 20rpx; + border-radius: 10rpx; +} + +.type-box { + display: flex; + flex-direction: row; + justify-content: flex-start; + align-content: center; +} + +.type-item { + background: #f2f2f2; + color: #e70606; + padding: 10rpx; + font-size: 28rpx; +} + +.type-item:nth-of-type(n+2) { + margin-left: 20rpx; +} + +.goods-name { + font-size: 32rpx; + color: black; + margin-top: 20rpx; +} + +.shop-name { + margin-top: 20rpx; + font-size: 28rpx; + color: gray; +} + +.standard-box { + padding: 30rpx; + display: flex; + flex-direction: column; + box-shadow: 10rpx 5rpx 10rpx #dfdfdf; + background: white; + margin: 20rpx; + border-radius: 10rpx; +} + +.title-item { + display: flex; + flex-direction: row; + align-items: center; +} + +.line { + height: 30rpx; + width: 10rpx; + background: #e70606; +} + +.title-name { + margin-left: 30rpx; +} + +.standard-content { + display: flex; + flex-direction: row; +} + +.standard-item { + display: flex; + flex-direction: row; + border: 1rpx solid #dfdfdf; + border-radius: 3rpx; + margin: 10rpx; + text-align: center; + justify-content: center; + align-items: center; + padding: 0rpx 0rpx 0rpx 5rpx; +} + +.name { + text-align: center; + margin: 0rpx 20rpx; + font-size: 28rpx; +} + +.standard-item image { + width: 48rpx; + height: 48rpx; +} + +.standard-item-sel { + display: flex; + flex-direction: row; + border: 1rpx solid #e70606; + border-radius: 3rpx; + margin: 10rpx; + text-align: center; + justify-content: center; + align-items: center; + padding: 0rpx 0rpx 0rpx 5rpx; +} + +.standard-item-sel image { + width: 48rpx; + height: 48rpx; +} + +.desc-box { + display: flex; + flex-direction: column; + margin: 20rpx; + box-shadow: 10rpx 5rpx 10rpx #dfdfdf; + background: white; + padding: 30rpx; +} + +.desc-video { + margin-top: 20rpx; + width: 100%; +} + +.desc-img { + margin-top: 20rpx; +} + +.desc-txt { + margin-top: 20rpx; +} + +.bottom-box { + display: flex; + flex-direction: column; + background: white; + position: fixed; + bottom: 0; + left: 0; + width: 100%; + +} + +.bottom-content { + display: flex; + flex-direction: row; + justify-content: space-between; + align-items: center; + margin: 25rpx; +} + +.bottom-price { + display: flex; + flex-direction: row; + justify-content: flex-start; + align-items: baseline; + color: #e70606; + text-align: center; + font-weight: bold; +} + +.price-icon { + font-size: 30rpx; +} + +.price-content { + font-size: 55rpx; +} + + +.icon-btn { + display: flex; + flex-direction: row; + justify-content: center; + align-items: center; +} + +.car-icon { + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; + font-size: 30rpx; +} + +.car-icon image { + width: 48rpx; + height: 48rpx; + align-items: center; + align-self: center; + margin-left: 25rpx; + margin-top: 10rpx; +} + +.car { + display: flex; + flex-direction: row; + align-items: center; + justify-content: center; +} + +.car-num { + position: relative; + right: 10rpx; + top: -10rpx; + background: #e70606; + color: white; + width: 48rpx; + height: 48rpx; + border-radius: 50%; + text-align: center; + display: flex; + flex-direction: column; + justify-content: center; + align-items: center; + font-size: 25rpx; +} + +.car-add { + background: linear-gradient(to right bottom, rgb(245, 74, 74), rgb(221, 5, 5) 70px); + color: white; + padding: 15rpx; + border-radius: 10rpx; + margin-left: 20rpx; + font-size: 32rpx; +} + +.params-box { + display: flex; + flex-direction: column; + justify-content: center; + align-items: center; + margin-top: 20rpx; +} + +.params-item { + display: flex; + flex-direction: row; + width: 100%; +} + +.params-item:first-child { + border: 1rpx solid #6e6e6e; +} + +.params-item:nth-of-type(n+2) { + border-bottom: 1rpx solid #6e6e6e; + border-left: 1rpx solid #6e6e6e; + border-right: 1rpx solid #6e6e6e; +} + +.params-title { + width: 40%; + border-right: 1rpx solid #6e6e6e; + padding: 5rpx; + text-align: center; + font-size: 32rpx; +} + +.params-content { + width: 60%; + text-align: center; + font-size: 32rpx; + padding: 5rpx; +} \ No newline at end of file diff --git a/xz_mini/subpages/goodslist/goodslist.js b/xz_mini/subpages/goodslist/goodslist.js new file mode 100644 index 0000000..7cbd5a4 --- /dev/null +++ b/xz_mini/subpages/goodslist/goodslist.js @@ -0,0 +1,89 @@ +// pages/goodslist/goodslist.js +var app = getApp(); +Page({ + + /** + * 页面的初始数据 + */ + data: { + id: "" + }, + + /** + * 生命周期函数--监听页面加载 + */ + onLoad(options) { + this.setData({ + id: options.id, + page: 1, + rows: 10, + keywords: "", + goodsList: [], + imgUrl: app.shopImgUrl, + hidePageLoading: false + }) + this.getGoodsList(); + }, + inputKeywords(event) { + this.setData({ + keywords: event.detail.value + }) + }, + doSearch() { + wx.startPullDownRefresh() + }, + getGoodsList() { + var _self = this + var info = { + 'page': _self.data.page, + 'rows': _self.data.rows, + 'categoryId': _self.data.id, + 'keywords': _self.data.keywords + }; + app.restAjax.get(app.restAjax.path('{shopUrl}/app/shopgoods/solrrelease', [app.shopUrl]), info, null, function (code, data) { + _self.setData({ + hidePageLoading: true + }) + if (data.rows.length == 0) { + app.dialog.msg('暂无数据'); + return; + } + _self.setData({ + goodsList: _self.data.goodsList.concat(data.rows), + hidePageLoading: true + }) + console.log(_self.data.goodsList) + wx.stopPullDownRefresh() + }, function (code, data) { + app.dialog.msg(data.msg); + wx.stopPullDownRefresh() + _self.setData({ + hidePageLoading: true + }) + }, function () { + wx.hideLoading(); + wx.stopPullDownRefresh() + }) + }, + //下拉刷新 + onPullDownRefresh() { + this.setData({ + page: 1, + goodsList: [] + }) + this.getGoodsList() + }, + //加载更多 + onReachBottom() { + var _self = this; + _self.setData({ + page: _self.data.page += 1 + }) + _self.getGoodsList() + }, + goDetail(e) { + wx.navigateTo({ + url: '/subpages/goodsdetail/goodsdetail?id=' + e.currentTarget.dataset.id, + }) + } +}) \ No newline at end of file diff --git a/xz_mini/subpages/goodslist/goodslist.json b/xz_mini/subpages/goodslist/goodslist.json new file mode 100644 index 0000000..2f12723 --- /dev/null +++ b/xz_mini/subpages/goodslist/goodslist.json @@ -0,0 +1,8 @@ +{ + "usingComponents": {}, + "navigationBarTitleText": "商品", + "enablePullDownRefresh": true, + "backgroundColor": "#efefef", + "backgroundTextStyle": "dark", + "onReachBottomDistance": 150 +} \ No newline at end of file diff --git a/xz_mini/subpages/goodslist/goodslist.wxml b/xz_mini/subpages/goodslist/goodslist.wxml new file mode 100644 index 0000000..0a2c56f --- /dev/null +++ b/xz_mini/subpages/goodslist/goodslist.wxml @@ -0,0 +1,26 @@ + + + + + 搜索 + + + + + + + ¥ {{item.goodsPrice}} + + 销量:{{item.goodsSalesVolume}} + 评分:{{item.goodStar}} + {{item.goodsNotFreight ==1 ? '不包邮':'包邮'}} + + + {{item.shopName}} + + + + + + + \ No newline at end of file diff --git a/xz_mini/subpages/goodslist/goodslist.wxss b/xz_mini/subpages/goodslist/goodslist.wxss new file mode 100644 index 0000000..4323fd5 --- /dev/null +++ b/xz_mini/subpages/goodslist/goodslist.wxss @@ -0,0 +1,96 @@ +/* pages/goodslist/goodslist.wxss */ +.search-box { + position: fixed; + top: 0; + left: 0; + width: 100%; + padding: 20rpx 15rpx; + display: flex; + flex-direction: row; + background: #ffffff; +} + +.search-box input { + padding: 10rpx; + background: #f2f2f2; + border-radius: 20rpx; + width: 80%; + font-size: 28rpx; +} + +.search-box .btn { + padding: 10rpx; + color: black; +} + +.container-box { + margin-top: 110rpx; +} + +.goods-item { + display: flex; + flex-direction: row; + margin: 20rpx; +} + +.goods-content { + display: flex; + flex-direction: column; + justify-content: center; + align-items: flex-start; + padding: 0rpx 10rpx; +} + +.goods-name { + font-size: 28rpx; + color: #000000; + overflow: hidden; + text-overflow: ellipsis; + display: -webkit-box; + -webkit-box-orient: vertical; + -webkit-line-clamp: 2; +} + +.goods-price { + font-size: 40rpx; + color: #e70606; + margin-top: 20rpx; +} + +.goods-type { + display: flex; + flex-direction: row; + margin-top: 10rpx; + +} + +.type-item { + background: #f2f2f2; + color: #e70606; + padding: 10rpx; + font-size: 20rpx; +} + +.type-item:nth-of-type(n+2) { + margin-left: 20rpx; +} + +.shop-name { + display: flex; + flex-direction: row; + justify-content: flex-start; + align-items: center; + font-size: 28rpx; + color: #5a5a5a; + margin-top: 20rpx; +} + +.shop-name .shop-icon { + width: 30rpx; + height: 30rpx; +} + +.goods-item image { + width: 240rpx; + height: 200rpx; +} \ No newline at end of file diff --git a/xz_mini/subpages/goodsorder/goodsorder.js b/xz_mini/subpages/goodsorder/goodsorder.js new file mode 100644 index 0000000..56b0588 --- /dev/null +++ b/xz_mini/subpages/goodsorder/goodsorder.js @@ -0,0 +1,294 @@ +// subpages/goodsorder/goodsorder.js +var app = getApp(); +Page({ + + /** + * 页面的初始数据 + */ + data: { + tabList: [{ + name: "全部", + type: "all" + }, { + name: "代付款", + type: "0" + }, { + name: "待收货", + type: "2" + }, { + name: "已完成", + type: "4" + }, { + name: "已取消", + type: "" + }, ], + dataList: [], + currentIndex: 0, + pages: { + page: 1, + rows: 3, + isCancel: '', + orderStatus: '' + }, + token: '', + isHideLoading: false, + imgUrl: app.shopImgUrl, + cancelList: [], + currentCancel: {}, + isShowCancel: false, + cancelRemark: "", + totalSize: 0, + isShowLoading: true, + loading: "加载中" + }, + + /** + * 生命周期函数--监听页面加载 + */ + onLoad(options) { + var _self = this; + _self.getToken().then(res => { + _self.getGoodsList(); + }); + }, + changeTab(e) { + var _self = this; + var type = e.currentTarget.dataset.type + var isCancel = type == '' ? '1' : '0'; + if (isCancel == '1') { + type = ''; + } + if ('all' == type) { + type = ''; + isCancel = ''; + } + var tempPage = { + page: 1, + isCancel: isCancel, + orderStatus: type + } + _self.setData({ + currentIndex: e.currentTarget.dataset.index, + pages: tempPage, + dataList: [] + }) + _self.getGoodsList(); + }, + getGoodsList() { + var _self = this; + _self.setData({ + isHideLoading: !(1 == _self.data.pages.page) + }) + app.restAjax.get(app.restAjax.path(app.shopUrl + '/app/order/listpage', []), + _self.data.pages, { + headers: { + token: _self.data.token + } + }, + function (code, data) { + _self.setData({ + isHideLoading: true + }) + if ('200' == code) { + if (1 === _self.data.pages.page) { + _self.setData({ + dataList: data.rows, + totalSize: data.total + }) + } else { + _self.setData({ + dataList: _self.data.dataList.concat(data.rows) + }) + console.log(_self.data.dataList.length) + if (_self.data.dataList.length >= _self.data.totalSize) { + _self.setData({ + isShowLoading: false, + loading: "没有更多数据了" + }) + } + + } + } + }, + function () { + _self.setData({ + isHideLoading: true + }) + }, + function () { + _self.setData({ + isHideLoading: true + }) + wx.hideNavigationBarLoading(); //完成停止加载图标 + wx.stopPullDownRefresh(); + wx.hideLoading(); + }) + }, + getToken: function () { + var self = this; + return new Promise(resolve => { + wx.getStorage({ + key: 'token', + success(res) { + self.setData({ + token: res.data + }) + return resolve(); + } + }) + }) + }, + // 支付 + toPayOrder(e) { + var item = e.currentTarget.dataset.item; + wx.showToast({ + icon: "none", + title: '暂时无法支付', + }) + }, + //取消订单 + toCancelOrder(e) { + var _self = this; + var item = e.currentTarget.dataset.item; //当前订单 + app.dialog.loading("加载中..."); + app.restAjax.get(app.restAjax.path('{shopUrl}/app/data/listbyparentid/{id}', + [app.shopUrl, "bf2d6bb5-4562-4ace-827e-378e41571576"]), {}, { + headers: { + token: _self.data.token + } + }, + function (code, data) { + wx.hideLoading() + if (data && data.length > 0) { + for (let i = 0; i < data.length; i++) { + if (i == 0) { + data[i].check = true; + } else { + data[i].check = false; + } + } + _self.setData({ + cancelList: data, + currentCancel: data[0], + isShowCancel: true, + curOrder: item + }) + } else { + app.dialog.msg("暂时无法取消订单") + } + }, + function (code, data) { + app.dialog.msg(data.msg); + }, + function () { + wx.hideLoading(); + }) + }, + //删除订单 + toDelOrder(e) { + var _self = this; + var item = e.currentTarget.dataset.item; + wx.showModal({ + title: '提示', + content: '确定要删除该订单吗?删除后将无法找回.', + complete: (res) => { + if (res.confirm) { + app.restAjax.delete(app.restAjax.path('{shopUrl}/app/order/delete/{orderId}', + [app.shopUrl, item.orderId]), {}, { + headers: { + token: _self.data.token + } + }, + function (code, data) { + if (code == '200') { + app.dialog.msg('删除成功') + } + wx.startPullDownRefresh() + }, + function (code, data) { + app.dialog.msg(data.msg); + }, + function () { + wx.hideLoading(); + }) + } + } + }) + }, + inputRemark(e) { + console.log(e) + this.setData({ + cancelRemark: e.detail.value + }) + }, + //选择取消 + chooseCancel(e) { + var item = e.currentTarget.dataset.item; + var index = e.currentTarget.dataset.index; + item.check = true; + var _self = this; + _self.data.cancelList.forEach((item, i) => { + if (i == index) { + item.check = true; + } else { + item.check = false; + } + }); + _self.setData({ + currentCancel: item, + cancelList: _self.data.cancelList + }) + }, + cancelDialog() { + this.setData({ + isShowCancel: false + }) + }, + confirmCancel() { + var _self = this; + _self.setData({ + isShowCancel: false + }) + var cancelBean = { + cancelData: _self.data.currentCancel.dataId, + cancelRemark: _self.data.cancelRemark, + }; + app.dialog.loading("取消中..."); + app.restAjax.put(app.restAjax.path('{shopUrl}/app/order/updatebuyersclose/{orderId}', + [app.shopUrl, _self.data.curOrder.orderId]), cancelBean, { + headers: { + token: _self.data.token + } + }, + function (code, data) { + if (code == '200') { + wx.startPullDownRefresh() + app.dialog.msg('取消成功') + } + }, + function (code, data) { + app.dialog.msg(data.msg); + }, + function () { + wx.hideLoading(); + }) + }, + onPullDownRefresh: function () { + // 在标题栏中显示加载图标 + var _self = this; + _self.setData({ + [`pages.page`]: 1, + dataList: [] + }) + _self.getGoodsList() + }, + onReachBottom() { + var _self = this; + if (_self.data.totalSize > _self.data.dataList.length) { + _self.setData({ + [`pages.page`]: _self.data.pages.page + 1, + }) + _self.getGoodsList(); + } + } +}) \ No newline at end of file diff --git a/xz_mini/subpages/goodsorder/goodsorder.json b/xz_mini/subpages/goodsorder/goodsorder.json new file mode 100644 index 0000000..7ef5329 --- /dev/null +++ b/xz_mini/subpages/goodsorder/goodsorder.json @@ -0,0 +1,5 @@ +{ + "usingComponents": {}, + "enablePullDownRefresh": true, + "backgroundTextStyle": "dark" +} \ No newline at end of file diff --git a/xz_mini/subpages/goodsorder/goodsorder.wxml b/xz_mini/subpages/goodsorder/goodsorder.wxml new file mode 100644 index 0000000..1c48677 --- /dev/null +++ b/xz_mini/subpages/goodsorder/goodsorder.wxml @@ -0,0 +1,62 @@ + + + {{item.name}} + + + + + + + + {{item.shopName}} + {{item.orderStatusMsg}} + + + + + + ¥{{it.goodsItemPrice}} + {{it.goodsItemName}} + + 数量:{{it.goodsItemCount}} + + + + + 下单时间:{{item.orderFinalTime}} + 总计:¥{{item.amountFinalMoney}} + + + 去付款 + 取消订单 + 删除订单 + + + + + + + + + + + + + + + + 取消 + 确定 + + + 备注 + + + + + + {{item.dataName}} + + + + \ No newline at end of file diff --git a/xz_mini/subpages/goodsorder/goodsorder.wxss b/xz_mini/subpages/goodsorder/goodsorder.wxss new file mode 100644 index 0000000..25fd38a --- /dev/null +++ b/xz_mini/subpages/goodsorder/goodsorder.wxss @@ -0,0 +1,358 @@ +.activity { + padding: 20rpx 30rpx 0; + margin-top: 80rpx; +} + +.activity-box { + margin-bottom: 20rpx; + box-shadow: 0px 0px 17rpx 0px rgba(0, 0, 0, 0.1); + border-radius: 10rpx; + overflow: hidden; + padding: 10rpx; +} + +.activity-img { + height: 320rpx; + position: relative; +} + +.activity-img image { + width: 100%; + height: 100%; +} + +.corner { + position: absolute; + top: 20rpx; + right: 20rpx; + display: flex; + color: #fff; +} + +.corner view { + padding: 0 10rpx; + background: rgba(0, 0, 0, 0.6); + line-height: 40rpx; + vertical-align: middle; + display: flex; + align-items: center; + border-radius: 5rpx; +} + +.view-count { + margin-right: 20rpx; +} + +.view-count image { + width: 40rpx; + height: 40rpx; +} + +.activity-info { + padding: 15rpx 20rpx; +} + +.title { + display: flex; + justify-content: space-between; +} + +.activity-title { + width: 70%; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; + font-size: 32rpx; + color: #242424; + line-height: 40rpx; +} + +.sign { + background: rgba(159, 21, 18, .1); + color: #9F1512; + border-radius: 10rpx; + padding: 0 20rpx; + line-height: 40rpx; + font-size: 28rpx; +} + +.date { + margin-top: 10rpx; + font-size: 24rpx; + color: #242424; +} + +.area { + position: fixed; + top: 0; + left: 0; + right: 0; + height: 80rpx; + white-space: nowrap; + overflow-x: auto; + background: white; + box-shadow: 5rpx 5rpx 10rpx #f2f2f2; + z-index: 5; + +} + +.area-box { + display: inline-block; + width: 25%; + line-height: 80rpx; + text-align: center; + font-size: 32rpx; +} + +.area-box.active { + color: #9F1512; + font-weight: bold; +} + +.shop-status { + display: flex; + flex-direction: row; + justify-content: space-between; + align-items: center; + padding: 5rpx; +} + +.shop-name { + font-size: 32rpx; + font-weight: bold; + color: black; +} + +.order-status { + background: #f3f3f3; + border-radius: 5rpx; + padding: 0rpx 10rpx; + font-size: 28rpx; + color: #9f1512; +} + +.order-time-box { + display: flex; + flex-direction: row; + justify-content: space-between; + align-items: center; + margin-top: 10rpx; +} + +.order-time { + font-size: 30rpx; + color: black; +} + +.order-price { + font-size: 32rpx; + color: #9f1512; +} + +.order-control-box { + display: flex; + flex-direction: row; + justify-content: flex-end; + align-items: center; + margin-top: 10rpx; +} + +.order-btn { + font-size: 28rpx; + color: white; + padding: 5rpx 10rpx; + border-radius: 5rpx; + background: linear-gradient(to right bottom, rgb(240, 78, 78), #9f1512 70rpx); +} + +.order-btn:nth-of-type(n+2) { + margin-left: 10rpx; +} + + +.goods { + display: flex; + flex-direction: row; + justify-content: flex-start; + margin-left: 20rpx; + margin-top: 10rpx; +} + +.goods-img { + width: 180rpx; + height: 160rpx; +} + + +.goods-content { + margin: 0rpx 10rpx; + flex: 1; +} + +.goods-name { + font-size: 32rpx; + overflow: hidden; + text-overflow: ellipsis; + display: -webkit-box; + -webkit-box-orient: vertical; + -webkit-line-clamp: 2; +} + +.goods-unit-price { + font-size: 40rpx; + color: #9f1512; + margin-top: 10rpx; +} + +.goods-standard { + margin-top: 10rpx; + font-size: 25rpx; + border: 1rpx solid #9f1512; + border-radius: 3rpx; + color: #9f1512; + width: fit-content; + max-width: fit-content; + padding: 0rpx 10rpx; +} + +.goods-type-box { + display: flex; + flex-direction: row; + justify-content: flex-start; + align-items: center; + margin-top: 20rpx; +} + +.goods-type-box image { + width: 48rpx; + height: 48rpx; +} + +.goods-type { + color: #9f1512; + font-size: 25rpx; + background: #ecebeb; + padding: 0rpx 10rpx; + text-align: center; +} + + + +.type-box { + display: flex; + flex-direction: row; + width: 50%; + justify-content: flex-start; + align-items: center; +} + +.add-del-box { + display: flex; + flex-direction: row; + align-items: center; + justify-content: center; +} + +.add-del-box .txt { + font-size: 35rpx; + padding: 0rpx 15rpx; +} + +.control-box { + width: 50%; + display: flex; + flex-direction: row; + justify-content: space-around; +} + +.cancel-box { + height: 50%; + display: flex; + flex-direction: column; + justify-content: flex-start; + align-items: center; + background: white; + width: 100%; + border-top-left-radius: 20rpx; + border-top-right-radius: 20rpx; + position: absolute; + bottom: 0; +} + +.cancel-control { + display: flex; + flex-direction: row; + justify-content: space-between; + align-items: center; + width: 90%; + margin-top: 15rpx; +} + +.cancel-btn { + font-size: 35rpx; + color: black; + padding: 15rpx; +} + +.cancel-btn:last-child { + color: #9F1512; +} + +.cancel-remark { + display: flex; + flex-direction: column; + justify-content: center; + align-items: flex-start; + margin-top: 15rpx; + width: 87%; +} + +.cancel-title { + font-size: 32rpx; + color: black; +} + +.cancel-content { + font-size: 28rpx; + border-radius: 10rpx; + background: #f3f3f3; + height: 100rpx; + margin-top: 20rpx; + padding: 10rpx; + width: 95%; +} + +.cancel-item { + display: flex; + flex-direction: row; + justify-content: flex-start; + align-items: center; + padding: 10rpx; + margin-left: 20rpx; +} + +.cancel-item:first-child { + margin-top: 20rpx; +} + +.cancel-item image { + width: 30rpx; + height: 30rpx; +} + +.cancel-item .content { + font-size: 32rpx; + margin-left: 15rpx; + color: black; +} + +.shade-box { + background: #25252587; + width: 100%; + height: 100%; + z-index: 999999; + position: fixed; + top: 0; + left: 0; + +} \ No newline at end of file diff --git a/xz_mini/subpages/images/ic_add_circle_icon.png b/xz_mini/subpages/images/ic_add_circle_icon.png new file mode 100644 index 0000000000000000000000000000000000000000..09f0577a04a5d25c459c0e4d0da22ee1bf929241 GIT binary patch literal 809 zcmV+^1J?YBP)Px%<4Ht8R9HvNm(NQSVHn51&+HEgrFLe2RYWNL0l|_+UD8vRf-df<)G@*+s1AAP zq!M%~=u{S!t5g>|1QpaRAwo#$5Y#D1C^p@hoiWtQ=FStN%{sHLJF{c#Hn4|bzt8i0 z-sgRv=Y59I;D;I%C zhJbKeLb?RTWd`<+&`nLKdaeP1(=9NI}E`X1t{e)aJeiC;_GrwzqghB zmH-nm@q|J2(q~|YnZX!2t7^lQd{qR<#H1@A+^!y+r@%bIhLB?cX@M|QO)oH?>{azw z<(f?ZnMCvyn4i0@oQ*D7U7Rv?nOLL~B)oOA5ez!qo6mo+>l^^)foqM6(_Z#mRy2og zCN8lX0KgyT6#d8uP_VQPC*uj}Dl=}nI|BRx07Mw<%W1bZ0X&hUovQ(S_F8Jb0e~My zppfdHUp9NkMk5+aNXLos#>?tWjbDH@|HK#NoPO5{5EpL{=vrL>z*DlKcR2tuap^sP zqxAs*niZ`n4HQa;FcXh{1^B=Qz@cbX9qA_ zWV_dNZ>tOe1cXpa&%(lr4M4mD(1khye3BLIprZ_Hy?(co0VWLg|82*m3`~mRu9YBt z0kGFg7PbM9U8P{^TrRiZ$bk9sC?*ZN-Rl;dUx4!A#Bm#%O=FdeSua`e36Kr4aL7I< zRv1Xc^I#fv-3A{634pY$XwSABNUT4+ZAEP(88M&kQ}w6i3;REZQj4;oW4Q&<&<_*) zevR#JiIWlP2BRCG&Ps=rfN2IE7DB&Y3}ly7*Mn>y$-Iay%_IeK@{oCO|{#S9GG z!XV7ZFl&wkP%tgPC&U#<-?(w(@#Du&o;-Q_^eKb{GM>S}^XJcjf-oL}28v(3dKJhA zDt__e1%v@4f#MJVF$Bm4GWc5*-UDq?DhcunX5e)wUgmx5=l>?#Um<^1N9|vAbP>;w z+vc;ZK2FMt%UN9Fx{=$^8K`=xr;B4q#hks9@A5Sn@U)&z2>2)H=oCy>>Ii2{!dHpr;V{w-mKKA+5gC4D*F}10Pp>r zwalSzPS}iVyA&UHzqCG2jAfIzcg0)Ix;gPLS+BJS``>#O{s8D;22WQ% Jmvv4FO#m-k(!Brx literal 0 HcmV?d00001 diff --git a/xz_mini/subpages/images/ic_cb_checked.png b/xz_mini/subpages/images/ic_cb_checked.png new file mode 100644 index 0000000000000000000000000000000000000000..fec766eba66d15efeee1573464dd2f3ea32f8613 GIT binary patch literal 869 zcmV-r1DgDaP)Px&A4x<(R9HvFmrH09Q51&%lcbfRw#`f?vrxopK}1y0h4{c)6&GDtQS3?~sg>?( zQFJHTtq5Ylg|>D|bz>ij-MA9%LS0qCg{%4irO-}u5nqd%nIn@l({wVE+}4!NDvxvj z|2ya2bMGC(3O}^M{*VTEs3_I55$pwX1A!U<(h00P2{331;3)==foQBUjW=h6_#u;A zNq}oWWnEn90OJA!>m^0MfpGitwCL^vW{Zs}3Sh+56JYx)K)Ym&3uE{#m@g$~zP}6_ z9|&N?lui(CEzQ_7itWZA2w#9cRXt20eqI*yIT5z7p;d^lUd;l4K_L8FQ_|%$&ua1b zY(>?<_Q}aV`Pu~lMohT@!sYSdq!#t;H*>tomm2#)ot$Eu!zwAu_Ihj}akD-rAGgZF;pkGsdGO%XBToLZI zPK);JTq>sl3~wM8fD`=HoITPOGIYbmw2amQ(@npa+^(Z?VPx&K1oDDR9HvNS50h9K@|SZw5dc>jUYC(SP)A>RD=-SkRS*ZiCS5Zl#M(0HOT7= z(l>K$kg%}Qg|z+>By1`~BPyhp!oqJiqSBN+iKd++)68q`Ywzv*@uHpNF7BQ0ob%n8 zbLM4(R(85GRAcKzW=Kb*OU*Wlv+tdEdUMx zn41sp<_7_EGV^8M_uo!sGbI6~)HxwU3p3A|;A9xUH}}}7h3=^e^9ROB`Fg;SrO;I+H1hm%Q0oXmZqaVP< zOeS+Fl}gz^&pVRIWL0%_^>F|v04#C_15(Nb6OAVk&{}^4u*3m-nE8nB`|t8bjQ}X6 zRuIv(&`N%iQZCKertpi_`X+#V_8T*&eBW;?CGbR>APADoob`1}O1VFa8D9aLa71*< zO>{^p50@i&)`!;mI)G;PbLX>(IYz*inh>JbWqZFdW2$hI2=UzJgsYAQ zTcTqGwANPu9CZObDdmN71`n;mNdSR+zbd6XM(K3ARtWJKKrMj2OeV9w&}=W3q^ph> zu0)57G4-UBIz&Vr))^56p6AJ89T$TSfbjubbEh)4T$CscE8-4g%$ZWv zkyAluvr-JeBxM{Y%frgJT(W$UA|5OKxIGOkWQVbB`|-%g$iq0zV0(RKW#x8e-a6r8 zlB0yfF=y`8EXy)}&p$BpJ!Zb2NF*$Y ayyGujleY1|WJGcR0000Px%a!Eu%R9HvNmpf<_Q51&%GqY-uh|KKXO(zD@E4~^VA4G_#oq|QyosA}l*tw0B zDFlhy1e7RbM@?s$RY4mqgcMrYiG_l&X6Lm*RAh~FWM7lr?0emv@pc3E{Qq~)nS1WN zgn$S2;(u3&;UUV8xR6JP-Jg;xo4;(^m;ruwtJg6=Dx#c|h>kLF48Uk3BL-HO@scF0 zBn;<8CopXR9!8XDCQJjguM@$IIh2;zeQ@5&J#7`&5OU*Qz z0;GiUkw9brWbOs?Yt76ZX{6N`sZ#{n*EznVe71y{~5Csx0ky<}%eh_Q9J69CWG#mnxfwz~GY1Q1n{V4AC* z)U0vz0-_7$6+nk;VqH3@+4kEaKq{(UCB`j30c4gA#4PJwIRoKIFhBOQ1pEg(6OQwx z2(TDck4ub>&hK7I&?siebhe!Z@>PvU{RUurzYJRIY@CkOop2tYE4}~_U)GG=y_!zA zD3l2a^xOx449odFm972%97cte2Ywuvx?+GAl1lvpy^>Wyya8~iKR+d3;#Jbp|kblrPEv00008pHZXX)`njxgN@xNA*(p5> literal 0 HcmV?d00001 diff --git a/xz_mini/subpages/images/ic_edit_icon.png b/xz_mini/subpages/images/ic_edit_icon.png new file mode 100644 index 0000000000000000000000000000000000000000..d691718c4aa9a5c660398e5972995d7703bece56 GIT binary patch literal 425 zcmV;a0apHrP)Px$V@X6oR5(wiQ$0%qK@fezUFScr5^N+tK*TC`+E`cwv@?R0;b!BN;ui=OckC>R z22^acv9w4b2!dLe&O&=Z5PyJWGIEj&7tAGryl!{jynQpgA&dwbu^s~jf*?30qGbS2 zs=DT!`_6vaSAdygRV_H@7MOV#KuJUjLkTc*8NdaAJrPNY!OWKcKGJh?*VBP9W?EJ6 zRkch+hXA%k ztc%D>N@C_E09Qm*wAMC;nn6mcR4S96=QW5ZwALmw=t8H3AP6>y=txAm+G6HM01Xk@ z?3I}gnVDZz^~^bUoUvX5Fd-uId4bCcD1dPh`AW#fm{nEX_kDjVJG9&un7K|wx7ONP zwOXBRwOY@rI^&#s=@<8`gB<{WfdTN@4$yf!fyrAIZ=UCs;y8XExC?`pZDfI87io?W T(3u2N00000NkvXXu0mjfg)gu| literal 0 HcmV?d00001 diff --git a/xz_mini/subpages/images/ic_goods_type_default.png b/xz_mini/subpages/images/ic_goods_type_default.png new file mode 100644 index 0000000000000000000000000000000000000000..306f9e9de3b4d5be02e4c6390a2e46ea2437ac29 GIT binary patch literal 1049 zcmV+!1m^pRP)Px&(@8`@R9HvtmtSZcRTRd*b9eVnv?5X}XvxlQHOb7TPoiKE3$=(^M5u^;(b|U; z5%EP@3Zl?dEGSBgFIKS?QSm`TMG>qh`XY!A#$ubytm&W3-HKr8lc8pBk~uQFJCoVX z?#_)w`r>_B?tbSxzx(Ihdxvn18+GQtSjJ6%FUf5XydnNC&mtI6^>0jBXKXpT2z~~j z9Z`$`eHSuLR%-RHJ3SJB>PBn`^VVSkKiw-40f!u=$NPbJwj3wmc>p)A&@r8GYxTY9 z{sh3YL6x>oXo86KayO7Ds_4FKPk2LQZgki01gX@`5Mek!duOdf|M z5G?@fGO)bnSs(;_;3&N()&{TQdExB;v597$D@OM|~!8oRB%d>2@f7;Tp5S!Knz_aBH0m+P* z4kpJmv?c&m+j@ully46p-&ML2SHWKZZZIVW@VTq>&SVc1tp|y?ttzs-2zbF!`qc)2 zS1i0iMEkOWmTQ-va@4|yX}w>xj)Qp2&|@+u^*zJqP;UTCm#)86@Zt=Bbp{4MyGq~H zP3PP4698QgsbzRf31HW-($i7j@<}+D-$p{50B~C`2xfeiBe8!(&0pxH$$*&50lVYm zZ2+;MUmDnsFuV^$H^+Sp4)VmOhJ%G)3}z@gS)U}rbIiEAr9VT!$3p6((X^*MR@{ar z2~0I!d7vC=E3@;ny<+}T029!j05e0dVuQ|UGcjg>&J96kd9(p|Me6|~j_&K|A(1{8 zt^hQFkl%7I>0kQ+R7-`uA=3c@Zg0FrT8)4j6W(3As*i5IjJZ^Q^QUiH$Iy7i^l!wp z&#BdqbgHICA@g(Aw+!Ce-+}*R;+>UXF}gjQW$4+~BLw~;D|u2CLTu{XSgSeA2=E-G zM^gauO9CD?1pwi&8|ar}eKh*qoNOzvOfM4K-C+KEVn9@Fxs(}@5)g3OQTmR!%lj91 zK|F{xxeYzLu!lhJuVxS+yypgb?0?nP( z0Z=W;lgxP36oP^AiqeOYvIMAV%g{8w2@q~|)Z!1V2T9`uT=Ch|%P^$;#?jzv+e6kb z$ydO5(GVh;!Q?3Ri}H04_GcO}KkL>Oj&;-dMfnv74`p~<5P}~YnO!)Y97J)zbh)ra zgklWf=q^~FGKxk!0TOS!!TiO334B{dpIuJ?xEH{6DeZZHj=QSPx%XGugsR9HvF*1u~LVHgMS?{n!OIJ9?{x3~yV5Njv>2eh55n^mC>eH(Cah=W@} zP_dhX(n%}5s31DHsL-)-6diOBK`I785Z~N;NmaCJ-bcWG%Q8e+csS5fDAd1ORhDs`~R-z@p=fQVuWE2hiH5 zL4UBcg0=Vw6bjq$W%X}K9RY=|Bb@Y66>iO>MT zCpE(N#+c4`gt}!YXojyA1*S>CK<-EI`5Wq|8;v09Ps9Q`mm*iB3dYl!#NS^XpD(+U1}lDz@>p)n9m0+<9yYz?vrz}5nLSNEJi*ka>k zTmT?oXiED2)84ItTdupWX>nLL995SH;0fn3fP)*MRjKr@Bmhsi6@U-L)g=UU8WHez zTIt=%0G(Y`R9!NF>yEI+3j_$m*2!Y6_AC*=bw^ + + + + {{item.recordFileRecord}} + + \ No newline at end of file diff --git a/xz_mini/subpages/liverecord/liverecord.wxss b/xz_mini/subpages/liverecord/liverecord.wxss new file mode 100644 index 0000000..56a8c2b --- /dev/null +++ b/xz_mini/subpages/liverecord/liverecord.wxss @@ -0,0 +1,30 @@ +/* subpages/liverecord/liverecord.wxss */ +.video-box { + display: flex; + flex-direction: column; + justify-content: center; + align-items: flex-start; + width: 95%; + padding: 20rpx 0rpx; +} + +.video-box video { + width: 100%; + height: 400rpx; + border-radius: 10rpx; + +} + +.txt { + color: #242424; + font-size: 28rpx; + margin-top: 10rpx; +} + +.page { + display: flex; + flex-direction: column; + justify-content: flex-start; + align-items: center; + margin-top: 20rpx; +} \ No newline at end of file diff --git a/xz_mini/subpages/orderconfirm/orderconfirm.js b/xz_mini/subpages/orderconfirm/orderconfirm.js new file mode 100644 index 0000000..1b5d34c --- /dev/null +++ b/xz_mini/subpages/orderconfirm/orderconfirm.js @@ -0,0 +1,154 @@ +// subpages/orderconfirm/orderconfirm.js +var app = getApp(); +Page({ + + /** + * 页面的初始数据 + */ + data: { + token: '', + imgUrl: app.shopImgUrl, + addressBean: {}, + hidePageLoading: false, + goodsList: [], + imgUrl: app.shopImgUrl, + remark: '', + totalPrice: 0, + carList: [] + }, + + /** + * 生命周期函数--监听页面加载 + */ + onLoad(options) { + var _self = this; + _self.getToken().then(result => { + _self.getDefaultAddress(); + _self.getGoodsCar(); + }) + }, + getToken() { + var self = this; + return new Promise(resolve => { + wx.getStorage({ + key: 'token', + success(res) { + self.setData({ + token: res.data + }) + return resolve(); + } + }) + }) + }, + //获取默认地址 + getDefaultAddress() { + var _self = this; + app.restAjax.get(app.restAjax.path('{shopUrl}/app/shopaddress/getdefault', [app.shopUrl]), null, { + headers: { + token: _self.data.token + } + }, function (code, data) { + wx.hideLoading() + if (code == 200) { + _self.setData({ + addressBean: data, + hidePageLoading: true + }) + } + }, function (code, data) { + app.dialog.msg(data.msg) + _self.setData({ + hidePageLoading: true + }) + }); + }, + getGoodsCar() { + var _self = this; + var tempPrice = 0; + try { + var carList = wx.getStorageSync('carlist'); + console.log(carList) + if (carList) { + for (let i = 0; i < carList.length; i++) { + const item = carList[i]; + if (item.isCheck) { + _self.data.goodsList.push(item); + tempPrice = item.carAmount * item.goodsPrice + tempPrice; + } + } + _self.setData({ + carList: carList, + goodsList: _self.data.goodsList, + totalPrice: tempPrice + }) + } + } catch (error) { + + } + }, + inputRemark(e) { + var value = e.detail.value + this.setData({ + remark: value + }) + }, + doSelAddress() { + //选择地址 + wx.navigateTo({ + url: '/subpages/addresschoose/addresschoose', + }) + }, + checkParams() { + + }, + doConfirmOrder() { + var _self = this; + var tempList = []; + for (let i = 0; i < _self.data.goodsList.length; i++) { + const item = _self.data.goodsList[i]; + var tempItem = { + count: item.carAmount, + goodsId: item.goodsId, + goodsItemId: item.goodsStandarId, + }; + tempList.push(tempItem); + } + var saveBean = { + goodsItemList: tempList, + shopAddressId: _self.data.addressBean.shopAddressId, + words: _self.data.remark + }; + app.dialog.loading("下单中...") + app.restAjax.post(app.restAjax.path('{shopUrl}/app/order/savebycart', [app.shopUrl]), saveBean, { + headers: { + token: _self.data.token + } + }, function (code, data) { + wx.hideLoading() + if (code == 200) { + wx.showToast({ + title: '下单成功', + success() { + //删除购物车中的数据 + for (let i = _self.data.carList.length - 1; i >= 0; i--) { + const element = _self.data.carList[i]; + if (element.isCheck) { + _self.data.carList.splice(i, 1); + } + } + _self.setData({ + carList: _self.data.carList + }) + wx.setStorageSync('carlist', _self.data.carList) + setTimeout(function () { + wx.navigateBack() + }, 1000); + } + }) + } + }, function (code, data) { + app.dialog.msg(data.msg) + }); + } +}) \ No newline at end of file diff --git a/xz_mini/subpages/orderconfirm/orderconfirm.json b/xz_mini/subpages/orderconfirm/orderconfirm.json new file mode 100644 index 0000000..b41059d --- /dev/null +++ b/xz_mini/subpages/orderconfirm/orderconfirm.json @@ -0,0 +1,4 @@ +{ + "usingComponents": {}, + "navigationBarTitleText": "订单确认" +} \ No newline at end of file diff --git a/xz_mini/subpages/orderconfirm/orderconfirm.wxml b/xz_mini/subpages/orderconfirm/orderconfirm.wxml new file mode 100644 index 0000000..b7800ff --- /dev/null +++ b/xz_mini/subpages/orderconfirm/orderconfirm.wxml @@ -0,0 +1,51 @@ + + + + + 收货地址 + {{addressBean.areaName}} + + {{addressBean.shopAddressContent}} + + + + {{addressBean.shopAddressName}} {{addressBean.shopAddressPhone}} + + + + + + 确认商品 + + + + + + ¥{{item.goodsPrice}} + {{item.goodsStandarName}} + + + 销量{{item.goodsSalesVolume}} + {{item.goodsNotFreight ==1 ? '不包邮':'包邮'}} + + 数量:{{item.carAmount}} + + + + + + 留言 + + + + + + + ¥ + {{totalPrice}} + + 提交订单 + + + + \ No newline at end of file diff --git a/xz_mini/subpages/orderconfirm/orderconfirm.wxss b/xz_mini/subpages/orderconfirm/orderconfirm.wxss new file mode 100644 index 0000000..166a1c0 --- /dev/null +++ b/xz_mini/subpages/orderconfirm/orderconfirm.wxss @@ -0,0 +1,310 @@ +/* subpages/orderconfirm/orderconfirm.wxss */ +page { + background: #f2f2f2; +} + +.container-box { + display: flex; + flex-direction: column; + justify-content: center; + align-items: center; + width: 100%; + padding-bottom: 120rpx; +} + +.address-box { + display: flex; + flex-direction: column; + justify-content: center; + align-items: flex-start; + box-shadow: 10rpx 10rpx 20rpx #f2f2f2; + border-radius: 15rpx; + padding: 20rpx; + margin: 10rpx; + background: white; +} + +.address-area-name { + font-size: 32rpx; + margin-top: 20rpx; +} + +.address-area-content { + display: flex; + margin-top: 20rpx; + flex-direction: row; + justify-content: space-between; + align-items: center; + font-size: 40rpx; + width: 100%; +} + +.address-area-content .icon { + width: 48rpx; + height: 48rpx; +} + +.address-phone { + font-size: 32rpx; + margin-top: 20rpx; +} + +.line-img { + width: 100%; + height: 5rpx; + margin-top: 10rpx; +} + +.address-title { + font-size: 38rpx; + font-weight: bold; +} + +.goods-box { + display: flex; + flex-direction: column; + justify-content: center; + align-items: flex-start; + box-shadow: 10rpx 10rpx 20rpx #f2f2f2; + border-radius: 15rpx; + padding: 20rpx; + margin: 10rpx; + background: white; +} + +.goods-title { + font-size: 38rpx; + font-weight: bold; +} + + + +.goods { + display: flex; + flex-direction: row; + justify-content: flex-start; + margin-left: 20rpx; +} + +.goods-img { + width: 180rpx; + height: 160rpx; +} + +.goods-item { + display: flex; + flex-direction: row; + justify-content: flex-start; + margin-top: 15rpx; +} + +.goods-content { + margin: 0rpx 10rpx; + flex: 1; +} + +.goods-price { + color: #9f1512; + font-size: 40rpx; +} + +.goods-count { + color: #9f1512; + font-size: 40rpx; +} + +.goods-name { + font-size: 32rpx; + overflow: hidden; + text-overflow: ellipsis; + display: -webkit-box; + -webkit-box-orient: vertical; + -webkit-line-clamp: 2; +} + +.goods-unit-price { + font-size: 40rpx; + color: #9f1512; + margin-top: 10rpx; +} + +.goods-standard { + margin-top: 10rpx; + font-size: 32rpx; + border: 1rpx solid #9f1512; + border-radius: 3rpx; + color: #9f1512; + width: fit-content; + max-width: fit-content; + padding: 0rpx 10rpx; +} + +.goods-type-box { + display: flex; + flex-direction: row; + justify-content: space-between; + align-items: center; + margin-top: 20rpx; +} + +.goods-type-box image { + width: 48rpx; + height: 48rpx; +} + +.goods-type { + color: #9f1512; + font-size: 25rpx; + border: 1rpx solid #9f1512; + padding: 0rpx 10rpx; + text-align: center; +} + +.goods-type:last-child { + margin-left: 20rpx; +} + +.type-box { + display: flex; + flex-direction: row; + width: 50%; + justify-content: flex-start; + align-items: center; +} + +.add-del-box { + display: flex; + flex-direction: row; + align-items: center; + justify-content: center; +} + +.add-del-box .txt { + font-size: 35rpx; + padding: 0rpx 15rpx; +} + +.control-box { + width: 50%; + display: flex; + flex-direction: row; + justify-content: space-around; +} + + +.remark-box { + display: flex; + flex-direction: column; + width: 100%; + font-size: 32rpx; +} + +.remark-input { + height: 180rpx; + background: #f2f2f2; + border-radius: 20rpx; + margin-top: 20rpx; + padding-top: 10rpx; +} + + + +.bottom-box { + display: flex; + flex-direction: column; + background: white; + position: fixed; + bottom: 0; + left: 0; + width: 100%; + +} + +.goods-price { + color: #9f1512; + font-size: 40rpx; +} + +.bottom-content { + display: flex; + flex-direction: row; + justify-content: space-between; + align-items: center; + margin: 15rpx 25rpx 15rpx 25rpx; +} + +.bottom-price { + display: flex; + flex-direction: row; + justify-content: flex-start; + align-items: baseline; + color: #e70606; + text-align: center; + font-weight: bold; +} + +.price-icon { + font-size: 30rpx; +} + +.price-content { + font-size: 55rpx; +} + + +.icon-btn { + display: flex; + flex-direction: row; + justify-content: center; + align-items: center; +} + +.car-icon { + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; + font-size: 30rpx; +} + +.car-icon image { + width: 48rpx; + height: 48rpx; + align-items: center; + align-self: center; + margin-left: 25rpx; + margin-top: 10rpx; +} + +.car { + display: flex; + flex-direction: row; + align-items: center; + justify-content: center; +} + +.car-num { + position: relative; + right: 10rpx; + top: -10rpx; + background: #e70606; + color: white; + width: 48rpx; + height: 48rpx; + border-radius: 50%; + text-align: center; + display: flex; + flex-direction: column; + justify-content: center; + align-items: center; + font-size: 25rpx; +} + +.car-add { + background: linear-gradient(to right bottom, rgb(245, 74, 74), rgb(221, 5, 5) 70px); + color: white; + padding: 15rpx; + border-radius: 10rpx; + margin-left: 20rpx; + font-size: 32rpx; +} \ No newline at end of file diff --git a/xz_mini/subpages/search/commonSearch.js b/xz_mini/subpages/search/commonSearch.js new file mode 100644 index 0000000..cf1e7df --- /dev/null +++ b/xz_mini/subpages/search/commonSearch.js @@ -0,0 +1,470 @@ +// subpages/search/commonSearch.js +const app = getApp(); +Page({ + + /** + * 页面的初始数据 + */ + data: { + // (网页|安卓|小程序)[a-zA-Z0-9-]{36}(新闻|活动|非遗|场馆|直播|志愿) 我后台正则是这样的 + tabList: ['新闻', '活动', '非遗数据', '场馆', '直播', '志愿者活动'], + currentIndex: 0, + keywords: '', + newsList: [],//新闻 + activityList: [],//活动 + legacyList: [],//非遗 + placeList: [],//场馆 + liveList: [],//直播 + volumerList: [],//志愿者活动 + isLoading: false,//是否正在加载 + isInit: true,//初始化搜索 + imgUrl: app.imgUrl, + url: app.newsUrl, + liveUrl: app.liveUrl, + liveImgUrl: app.liveImgUrl, + page: 1, + rows: 10, + hasMore: true, + latitude: '', + longitude: '' + }, + + /** + * 生命周期函数--监听页面加载 + */ + onLoad(options) { + this.getLocation(); + }, + changeTab(e) { + var _self = this; + var index = e.currentTarget.dataset.index; + this.setData({ + currentIndex: index, + hasMore: true + }) + //刷新 + if (_self.data.keywords != '') { + _self.setData({ + isLoading: true, + page: 1, + isInit: false + }) + //tabList: ['新闻', '活动', '非遗数据', '场馆', '直播', '志愿者活动'], + switch (_self.data.currentIndex) { + case 0: + _self.setData({ + newsList: [], + }) + _self.getNewsList() + _self.doSaveKeyword('新闻') + break; + case 1: + _self.setData({ + activityList: [], + }) + _self.getActivityList() + _self.doSaveKeyword('活动') + break; + case 2: + _self.setData({ + legacyList: [] + }) + _self.getLegacyList() + _self.doSaveKeyword('非遗') + break; + case 3: + _self.setData({ + placeList: [] + }) + _self.getPlaceList() + _self.doSaveKeyword('场馆') + break; + case 4: + _self.setData({ + liveList: [] + }) + _self.getLiveList() + _self.doSaveKeyword('直播') + break; + case 5: + _self.setData({ + volumerList: [] + }) + _self.getVolumerList() + _self.doSaveKeyword('志愿') + break; + } + } + }, + //新闻详情 + goNewsDetail: function (event) { + wx.navigateTo({ + url: '/pages/newsDetail/newsDetail?id=' + event.currentTarget.dataset.item.newsContentId + }) + }, + //活动详情 + goDetail: function (e) { + var id = e.currentTarget.dataset.id; + wx.navigateTo({ + url: '/pages/activityDetail/activityDetail?id=' + id + }) + }, + //非遗详情 + legacyDetail(e) { + wx.navigateTo({ + url: '/pages/cultureDetail/cultureDetail?libraryId=' + e.currentTarget.dataset.libraryId, + }) + }, + //场馆详情 + placeDetail: function (options) { + var venuesInfoId = options.currentTarget.dataset.id; + wx.navigateTo({ + url: '/pages/venueDetail/venueDetail?venuesInfoId=' + venuesInfoId, + }) + }, + volumerDetail(e) { + var id = e.currentTarget.dataset.id; + wx.navigateTo({ + url: '/pages/serviceActivityDetail/serviceActivityDetail?id=' + id + }) + }, + //直播点播详情 + detailLive(event) { + //判断是直播还是录播 + var item = event.currentTarget.dataset.id; + if ('0' == item.liveStatus) { + //直播回放 + wx.navigateTo({ + url: '/subpages/liverecord/liverecord?id=' + item.livePlanId, + }) + } else if ('2' == item.liveStatus) { + //直播中 + wx.navigateTo({ + url: '/pages/broadcastDetail/broadcastDetail?livePlanId=' + event.currentTarget.dataset.id.livePlanId, + }) + } else { + //未开始 + } + }, + //输入监听 + inputKeywords(e) { + this.setData({ + keywords: e.detail.value + }) + if (e.detail.value == '') { + this.setData({ + isInit: true + }) + } + }, + //搜索 + doSearch() { + //tabList: ['新闻', '活动', '非遗数据', '场馆', '直播', '志愿者活动'], + var _self = this; + if (_self.data.keywords == '') { + wx.showToast({ + icon: 'error', + title: '请输入关键词', + }) + } else { + _self.setData({ + isLoading: true, + page: 1, + isInit: false, + hasMore: true + }) + switch (_self.data.currentIndex) { + case 0: + _self.setData({ + newsList: [], + }) + _self.getNewsList() + _self.doSaveKeyword('新闻') + break; + case 1: + _self.setData({ + activityList: [], + }) + _self.getActivityList() + _self.doSaveKeyword('活动') + break; + case 2: + _self.setData({ + legacyList: [] + }) + _self.getLegacyList() + _self.doSaveKeyword('非遗') + break; + case 3: + _self.setData({ + placeList: [] + }) + _self.getPlaceList() + _self.doSaveKeyword('场馆') + break; + case 4: + _self.setData({ + liveList: [] + }) + _self.getLiveList() + _self.doSaveKeyword('直播') + break; + case 5: + _self.setData({ + volumerList: [] + }) + _self.getVolumerList() + _self.doSaveKeyword('志愿') + break; + } + } + }, + //获取新闻 + getNewsList() { + var _self = this; + app.restAjax.get(app.restAjax.path(_self.data.url + '/app/newscontent/listpagenewscontentrelease/' + app.areaCode, []), + { + page: _self.data.page, + rows: _self.data.rows, + keywords: _self.data.keywords + }, null, + function (code, data) { + _self.data.newsList = _self.data.newsList.concat(data.rows) + _self.setData({ + newsList: _self.data.newsList, + isLoading: false, + hasMore: _self.data.newsList.length < data.total + }) + }, + function (code, err) { + //加载失败 + app.dialog.msg('网络错误') + _self.setData({ + isLoading: false + }) + }, + ) + }, + //获取活动 + getActivityList() { + var _self = this; + app.restAjax.get(app.restAjax.path(_self.data.url + '/app/activitylibrary/listpageactivitylibraryfornetrelease/' + app.areaCode, []), + { + page: _self.data.page, + rows: _self.data.rows, + keywords: _self.data.keywords + }, null, + function (code, data) { + for (var item of data.rows) { + if ('' != item.activityImage) { + item.activityImage = _self.data.imgUrl + item.activityImage; + } + } + _self.data.activityList = _self.data.activityList.concat(data.rows) + _self.setData({ + activityList: _self.data.activityList, + isLoading: false, + hasMore: _self.data.activityList.length < data.total + }) + }, + function (code, err) { + app.dialog.msg('网络错误') + _self.setData({ + isLoading: false + }) + }, + ) + }, + //获取非遗 + getLegacyList() { + var _self = this; + app.restAjax.get(app.restAjax.path(_self.data.url + '/app/intangiblelibrary/listpageintangiblelibraryrelease/' + app.areaCode, []), + { + page: _self.data.page, + rows: _self.data.rows, + keywords: _self.data.keywords + }, null, + function (code, data) { + for (var i = 0, item; item = data.rows[i++];) { + item.libraryApplyTime = item.libraryApplyTime.substring(0, item.libraryApplyTime.length - 10); + item.libraryCoverArray = item.libraryCover.split(','); + } + _self.data.legacyList = _self.data.legacyList.concat(data.rows) + _self.setData({ + legacyList: _self.data.legacyList, + isLoading: false, + hasMore: _self.data.legacyList.length < data.total + }) + }, + function (code, err) { + app.dialog.msg('网络错误') + _self.setData({ + isLoading: false + }) + }, + ) + }, + //获取场馆 + getPlaceList() { + var _self = this; + + app.restAjax.get(app.restAjax.path(_self.data.url + '/app/venuesinfo/listpagevenuesinforelease/' + app.areaCode, []), + { + page: _self.data.page, + rows: _self.data.rows, + keywords: _self.data.keywords, + latitude: _self.data.latitude, + longitude: _self.data.longitude + }, null, + function (code, data) { + data.rows.forEach(element => { + element.venuePanorama = element.venuePanorama.split(',')[0]; + if (element.apart >= 1000) { + element.apart = (element.apart / 1000).toFixed(2) + 'km'; + } else { + element.apart += 'm'; + } + }); + _self.data.placeList = _self.data.placeList.concat(data.rows) + _self.setData({ + placeList: _self.data.placeList, + isLoading: false, + hasMore: _self.data.placeList.length < data.total + }) + }, + function (code, err) { + app.dialog.msg('网络错误') + _self.setData({ + isLoading: false + }) + }, + ) + }, + //获取直播 + getLiveList() { + var _self = this; + app.restAjax.get(app.restAjax.path(_self.data.liveUrl + '/app/liveplan/listpageliveplanrelease/', []), + { + page: _self.data.page, + rows: _self.data.rows, + keywords: _self.data.keywords + }, null, + function (code, data) { + _self.data.liveList = _self.data.liveList.concat(data.rows) + _self.setData({ + liveList: _self.data.liveList, + isLoading: false, + hasMore: _self.data.liveList.length < data.total + }) + }, + function (code, err) { + app.dialog.msg('网络错误') + _self.setData({ + isLoading: false + }) + }, + ) + }, + //获取志愿者活动 + getVolumerList() { + var _self = this; + app.restAjax.get(app.restAjax.path(_self.data.url + '/app/volunteerservice/listpagevolunteerservicerelease/' + app.areaCode, []), + { + page: _self.data.page, + rows: _self.data.rows, + keywords: _self.data.keywords + }, null, + function (code, data) { + _self.setData({ + isLoading: false, + hasMore: false + }) + for (var item of data.rows) { + if ('' != item.photo) { + var photoArr = item.photo.split(","); + item.photo = app.imgUrl + photoArr[0]; + } + } + _self.data.volumerList = _self.data.volumerList.concat(data.rows) + _self.setData({ + volumerList: _self.data.volumerList, + isLoading: false, + hasMore: _self.data.volumerList.length < data.total + }) + }, + function (code, err) { + app.dialog.msg('网络错误') + _self.setData({ + isLoading: false + }) + }, + ) + }, + //获取定位 + getLocation: function () { + var self = this; + wx.getLocation({ + type: 'gcj02', + success: function (res) { + self.setData({ + latitude: res.latitude, + longitude: res.longitude + }) + }, + complete: function () { + } + }) + }, + /** + * 页面上拉触底事件的处理函数 + */ + onReachBottom() { + var _self = this; + if (_self.data.hasMore) { + if (!_self.data.isInit) { + _self.setData({ + page: _self.data.page + 1, + isInit: false + }) + //tabList: ['新闻', '活动', '非遗数据', '场馆', '直播', '志愿者活动'], + switch (_self.data.currentIndex) { + case 0: + _self.getNewsList() + break; + case 1: + _self.getActivityList() + break; + case 2: + _self.getLegacyList() + break; + case 3: + _self.getPlaceList() + break; + case 4: + _self.getLiveList() + break; + case 5: + _self.getVolumerList() + break; + } + } + } else { + app.dialog.msg('暂无更多数据了') + } + }, + doSaveKeyword(type) { + var _self = this; + var params = "小程序" + _self.data.keywords + type + app.restAjax.get(app.restAjax.path(app.bigDataUrl + '/app/contentcensusrelease/log', []), + { + requestUrl: params + }, null, + function (code, data) { + + }, + function (code, err) { + }, + ) + } + +}) \ No newline at end of file diff --git a/xz_mini/subpages/search/commonSearch.json b/xz_mini/subpages/search/commonSearch.json new file mode 100644 index 0000000..3928faa --- /dev/null +++ b/xz_mini/subpages/search/commonSearch.json @@ -0,0 +1,3 @@ +{ + "usingComponents": {} +} \ No newline at end of file diff --git a/xz_mini/subpages/search/commonSearch.wxml b/xz_mini/subpages/search/commonSearch.wxml new file mode 100644 index 0000000..a4f7cbe --- /dev/null +++ b/xz_mini/subpages/search/commonSearch.wxml @@ -0,0 +1,222 @@ + + + + + + + + + {{item}} + + + + + + + + + + + + + {{item.newsContentTitle}} + + + + + 来源:{{item.newsContentResource}} + {{item.newsContentPublishTime}} + + + + + + + + {{item.newsContentTitle}} + + 来源:{{item.newsContentResource}} + {{item.newsContentPublishTime}} + + + + + + {{item.newsContentTitle}} + + 来源:{{item.newsContentResource}} + {{item.newsContentPublishTime}} + + + + + + + + {{item.newsContentTitle}} + + + + + 来源:{{item.newsContentResource}} + {{item.newsContentPublishTime}} + + + + {{item.newsContentTitle}} + + 来源:{{item.newsContentResource}} + {{item.newsContentPublishTime}} + + + + {{item.newsContentTitle}} + + + + + + 来源:{{item.newsContentResource}} + {{item.newsContentPublishTime}} + + + + {{item.newsContentTitle}} + + 来源:{{item.newsContentResource}} + {{item.newsContentPublishTime}} + + + + + + + + + 暂无数据 + + + + + + + + + + + + {{item.activityTitle}} + 报名中 + 报名人数已满 + 停止报名 + 进行中 + 直接进入 + 已结束 + + {{item.activityStartTime}}至{{item.activityEndTime}} + + + + + + 暂无数据 + + + + + + + + + + + + {{item.libraryTitle}} + + {{item.libraryApplyTime}} + + + + + + 暂无数据 + + + + + + + + + + + + {{item.venueName}} + 距离:{{item.apart == '0' ? '未知' : item.apart}} + + 营业时间:{{item.businessHours}} + + + + + + 暂无数据 + + + + + + + + + + + + {{item.livePlanName}} + 未开始 + 直播回放 + 直播中 + + {{item.livePlanStart}}至{{item.livePlanEnd}} + + + + + + 暂无数据 + + + + + + + + + 报名中 + 已报名 + 停止报名 + 进行中 + 已结束 + + + + {{item.serviceName}} + + {{item.startTime}}至{{item.endTime}} + + + + + + 暂无数据 + + + + + + 加载中... + + + + 请输入关键词 + \ No newline at end of file diff --git a/xz_mini/subpages/search/commonSearch.wxss b/xz_mini/subpages/search/commonSearch.wxss new file mode 100644 index 0000000..90d8fa5 --- /dev/null +++ b/xz_mini/subpages/search/commonSearch.wxss @@ -0,0 +1,404 @@ +.top-tab { + position: fixed; + top: 0; + left: 0; + right: 0; + background: #fff; + overflow-x: hidden; + z-index: 100; +} + +.search-box { + background: #f2f2f2; + border-radius: 30rpx; + padding: 5rpx; + display: flex; + flex-direction: row; + justify-content: flex-start; + align-items: center; + margin: 20rpx 30rpx; +} + +.search-box image { + width: 32rpx; + height: 32rpx; + margin-left: 20rpx; +} + +.search-box input { + font-size: 28rpx; + color: #242424; + margin-left: 20rpx; + width: 100%; +} + +.type { + display: flex; + /* overflow-x: auto; */ + /* 隐藏滚动条 */ + /* scrollbar-width: none; */ + /* firefox */ + /* -ms-overflow-style: none; */ + /* IE 10+ */ + margin-left: 20rpx; +} + +.tab-box { + display: flex; + flex-direction: column; + justify-content: space-between; + align-items: center; + width: 13%; + min-width: fit-content; + position: relative; + height: 60rpx; + font-size: 30rpx; + color: #242424; + flex-shrink: 0; +} + +.sel-line { + background-color: #9F1512; + width: 50%; + height: 5rpx; + border-radius: 3rpx; +} + +.tab-box.active { + color: #9F1512; +} + +.tab-box image { + width: 20rpx; + height: 40rpx; +} + +.tab-box .txt { + padding: 0rpx 10rpx; + width: 100%; + text-align: center; +} + +.tab-box .txt-active { + color: #9F1512; +} + +.tab-box.active image { + display: block; +} + +.tab-box image.selected-l { + left: 20rpx; +} + +.tab-box image.selected-r { + right: 20rpx; +} + +.search-init { + position: fixed; + top: 0; + left: 0; + right: 0; + bottom: 0; + display: flex; + flex-direction: column; + justify-content: center; + align-items: center; + z-index: 99; + background: #ffffff; +} + +.loading-page { + position: fixed; + top: 0; + left: 0; + right: 0; + bottom: 0; + display: flex; + flex-direction: column; + justify-content: center; + align-items: center; + z-index: 99; + background: white; +} + +.loading-page image { + width: 80rpx; + height: 80rpx; +} + +.search-init image { + width: 80rpx; + height: 80rpx; +} + +.loading-page text { + font-size: 28rpx; + margin-top: 20rpx; + color: #949494; +} + +.search-init text { + font-size: 28rpx; + margin-top: 20rpx; + color: #949494; +} + +/* =================================新闻======================================= */ + +.news { + padding: 30rpx; + border-bottom: 5px solid #FBFBFB; +} + +.news-box { + padding: 30rpx 0; + border-bottom: 1px solid #EBEBEB; + display: flex; + flex-direction: column; +} + +.news-title { + color: #242424; + font-size: 30rpx; + font-weight: bold; +} + +.news-info { + color: #949494; + margin-top: 15rpx; + font-size: 24rpx; +} + +.news-info text { + margin-right: 20rpx; +} + +.voice-box { + padding-right: 30px; + position: relative; +} + +.voice-img { + position: absolute; + right: 0; + width: 48rpx; + height: 48rpx; +} + +.news-big-pic, +.news-small-pic { + margin-top: 10rpx; +} + +.news-big-pic { + position: relative; +} + +.news-big-pic image { + width: 100%; + height: 380rpx; +} + +.news-big-pic image.play-btn { + position: absolute; + top: 50%; + left: 50%; + transform: translate(-50%, -50%); + width: 80rpx; + height: 80rpx; +} + +.news-small-pic image { + width: 30%; + height: 150rpx; + margin-right: 20rpx; +} + +.transverse-news { + flex-direction: row; + justify-content: space-between; +} + +.news-row-img { + width: 30%; + height: 150rpx; +} + +.news-row-img image { + width: 100%; + height: 100%; +} + +.news-row-info { + width: 68%; +} + +/* end */ + +/* 活动 */ +.activity { + padding: 20rpx 30rpx 0; +} + +.activity-box { + margin-bottom: 20rpx; + box-shadow: 0px 0px 17rpx 0px rgba(0, 0, 0, 0.1); + border-radius: 10rpx; + overflow: hidden; +} + +.activity-img { + height: 320rpx; + position: relative; +} + +.activity-img image { + width: 100%; + height: 100%; +} + +.corner { + position: absolute; + top: 20rpx; + right: 20rpx; + display: flex; + color: #fff; +} + +.corner view { + padding: 0 10rpx; + background: rgba(0, 0, 0, 0.6); + line-height: 40rpx; + vertical-align: middle; + display: flex; + align-items: center; + border-radius: 5rpx; +} + +.view-count { + margin-right: 20rpx; +} + +.view-count image { + width: 40rpx; + height: 40rpx; +} + +.activity-info { + padding: 15rpx 20rpx; +} + +.title { + display: flex; + justify-content: space-between; +} + +.activity-title { + width: 70%; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; + font-size: 32rpx; + color: #242424; + line-height: 40rpx; +} + +.sign { + background: rgba(159, 21, 18, .1); + color: #9F1512; + border-radius: 10rpx; + padding: 0 20rpx; + line-height: 40rpx; + font-size: 28rpx; +} + +.date { + margin-top: 10rpx; + font-size: 24rpx; + color: #242424; +} + + +/* end */ + +/* ====================场馆==================== */ + +.venue { + height: 400rpx; + padding: 0 30rpx; +} + +.venue-box { + box-shadow: 0 0 17rpx 0 rgba(0, 0, 0, 0.1); + border-radius: 10rpx; + overflow: hidden; + margin-bottom: 15rpx; +} + +.venue-img, +.venue-img image { + width: 100%; + height: 315rpx; +} + +.venue-info { + padding: 15rpx 20rpx; +} + +.name-distance { + display: flex; + justify-content: space-between; + height: 35rpx; + line-height: 35rpx; +} + +.name { + font-size: 32rpx; + width: 60%; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; +} + +.distance { + padding: 0 10rpx; + background: rgba(159, 21, 18, .1); + color: #9F1512; + border-radius: 10rpx; + font-size: 28rpx; +} + +.time { + font-size: 28rpx; + color: #242424; + margin-top: 10rpx; +} + +/* =end= */ + +.empty-box { + position: fixed; + top: 0; + left: 0; + right: 0; + bottom: 0; + display: flex; + flex-direction: column; + justify-content: center; + align-items: center; + z-index: 99; + background: white; +} + +.empty-box image { + width: 128rpx; + height: 96rpx; +} + +.empty-box text { + font-size: 28rpx; + margin-top: 20rpx; + color: gray; +} \ No newline at end of file diff --git a/xz_mini/subpages/webcontentview/webcontent.js b/xz_mini/subpages/webcontentview/webcontent.js new file mode 100644 index 0000000..c0704dc --- /dev/null +++ b/xz_mini/subpages/webcontentview/webcontent.js @@ -0,0 +1,19 @@ +// subpages/webcontentview/webcontent.js +Page({ + + /** + * 页面的初始数据 + */ + data: { + webUrl: "" + }, + + /** + * 生命周期函数--监听页面加载 + */ + onLoad(options) { + this.setData({ + webUrl: options.url + }) + }, +}) \ No newline at end of file diff --git a/xz_mini/subpages/webcontentview/webcontent.json b/xz_mini/subpages/webcontentview/webcontent.json new file mode 100644 index 0000000..3928faa --- /dev/null +++ b/xz_mini/subpages/webcontentview/webcontent.json @@ -0,0 +1,3 @@ +{ + "usingComponents": {} +} \ No newline at end of file diff --git a/xz_mini/subpages/webcontentview/webcontent.wxml b/xz_mini/subpages/webcontentview/webcontent.wxml new file mode 100644 index 0000000..7bb428d --- /dev/null +++ b/xz_mini/subpages/webcontentview/webcontent.wxml @@ -0,0 +1,2 @@ + + diff --git a/xz_mini/subpages/webcontentview/webcontent.wxss b/xz_mini/subpages/webcontentview/webcontent.wxss new file mode 100644 index 0000000..9c1fc6e --- /dev/null +++ b/xz_mini/subpages/webcontentview/webcontent.wxss @@ -0,0 +1 @@ +/* subpages/webcontentview/webcontent.wxss */ \ No newline at end of file diff --git a/xz_mini/utils/dialog.js b/xz_mini/utils/dialog.js new file mode 100644 index 0000000..ef95156 --- /dev/null +++ b/xz_mini/utils/dialog.js @@ -0,0 +1,15 @@ +function msg(text) { + wx.showToast({ + title: text, + icon: 'none', + duration: 1000 + }) +} +function loading(msg) { + wx.showLoading({ + title: msg, + mask: true + }) +} +module.exports.msg = msg; +module.exports.loading = loading; \ No newline at end of file diff --git a/xz_mini/utils/restAjax.js b/xz_mini/utils/restAjax.js new file mode 100644 index 0000000..b882982 --- /dev/null +++ b/xz_mini/utils/restAjax.js @@ -0,0 +1,235 @@ +var methods = { + POST_METHOD: 'POST', + DELETE_METHOD: 'DELETE', + PUT_METHOD: 'PUT', + GET_METHOD: 'GET' +}; + +/** + * 新增 + * @param url + * @param dataObj + * @param args + * @param successCallback + * @param errorCallback + * @param completeCallback + */ +function postJson(url, dataObj, args, successCallback, errorCallback, completeCallback) { + doAjax(url, methods.POST_METHOD, dataObj, args, successCallback, errorCallback, completeCallback); +} + +/** + * 删除 + * @param url + * @param dataObj + * @param args + * @param successCallback + * @param errorCallback + * @param completeCallback + */ +function deleteForm(url, dataObj, args, successCallback, errorCallback, completeCallback) { + doAjax(url, methods.DELETE_METHOD, dataObj, args, successCallback, errorCallback, completeCallback); +} + +/** + * 修改 + * @param url + * @param dataObj + * @param args + * @param successCallback + * @param errorCallback + * @param completeCallback + */ +function putJson(url, dataObj, args, successCallback, errorCallback, completeCallback) { + doAjax(url, methods.PUT_METHOD, dataObj, args, successCallback, errorCallback, completeCallback); +} + +/** + * 查询 + * @param url + * @param dataObj + * @param args + * @param successCallback + * @param errorCallback + * @param completeCallback + */ +function getForm(url, dataObj, args, successCallback, errorCallback, completeCallback) { + doAjax(url, methods.GET_METHOD, dataObj, args, successCallback, errorCallback, completeCallback); +} + +/** + * 执行上传 + * @param url + * @param method + * @param dataObj + * @param args + * @param successCallback + * @param errorCallback + * @param completeCallback + */ +function doAjax(url, method, dataObj, args, successCallback, errorCallback, completeCallback) { + var headers = {}; + if (args != null && typeof (args.headers) != 'undefined' && args.headers != null) { + headers = args.headers; + } + wx.request({ + url: url, + method: method, + data: dataObj, + header: headers, + dataType: 'json', + success: function (response) { + if (response.statusCode == 200) { + successCallback(response.statusCode, response.data, args); + } else { + if (errorCallback && typeof (errorCallback) == 'function') { + errorCallback(response.statusCode, response.data); + } + } + }, + fail: function (response) { + console.log(response); + }, + complete: function () { + if (completeCallback && typeof (completeCallback) == 'function') { + completeCallback(); + } + } + }) +} + +/** + * 检测是路径参数有重复值 + * @param pathArgArray + * @returns {boolean} + */ +function pathArgsHasSameValue(pathArgArray) { + var tempArgIndex = 0; + var tempArgs = pathArgArray[tempArgIndex]; + for (var i = (tempArgIndex + 1), item; item = pathArgArray[i]; i++) { + if (tempArgs == item) { + throw new Error('参数' + item + '有重复值!!!'); + } + if (i == pathArgArray.length - 1) { + tempArgs = pathArgArray[++tempArgIndex]; + i = tempArgIndex; + continue; + } + } +} + +/** + * 获取页面间传递的参数 + * @param url + */ +function getParamsArg(url) { + var params = url.split('?')[1]; + var paramsObj = {}; + if (typeof (params) == 'undefined' || params == null) { + return paramsObj; + } + var paramsKVs = params.split('&'); + for (var i = 0, item = null; item = paramsKVs[i++];) { + var kvs = item.split('='); + if (kvs.length == 1) { + paramsObj[kvs[0]] = null; + } + if (kvs.length == 2) { + paramsObj[kvs[0]] = decodeURI(kvs[1]); + } + } + return paramsObj; +} + +/** + * 构建路径 + * @param basePath 请求路径,{参数}, + * @param pathArgs 替换的路径参数,不能重复 + * @returns {*} + */ +function buildPath(basePath, pathArgs) { + var path = basePath; + if (!basePath || !(typeof (basePath) == 'string')) { + throw new Error('basePath必须为字符串!!!'); + } + if (!pathArgs || !Array.isArray(pathArgs)) { + throw new Error('pathArgs必须为数组!!!'); + } + var pathArgArray = basePath.match(/\{\w+\}/g); + if (!pathArgArray) { + return path; + } + pathArgsHasSameValue(pathArgArray); + for (var i = 0, item; item = pathArgArray[i]; i++) { + path = path.replace(item, pathArgs[i]); + } + return path; +} + +/** + * 通过form对象上传文件 + * @param url + * @param formData + * @param args + * @param successCallback + * @param errorCallback + * @param beforeCallback + * @param completeCallback + */ +function postFile(url, path, name, args, successCallback, errorCallback, completeCallback) { + var headers = {}; + if (args != null && typeof (args.headers) != 'undefined' && args.headers != null) { + headers = args.headers; + } + wx.uploadFile({ + filePath: path, + name: name, + url: url, + header: headers, + success: function (response) { + if (response.statusCode == 200) { + successCallback(response.statusCode, response.data, args); + } else { + if (errorCallback && typeof (errorCallback) == 'function') { + errorCallback(response.statusCode, response.data); + } + } + }, + fail: function (response) { + console.log(response); + }, + complete: function () { + if (completeCallback && typeof (completeCallback) == 'function') { + completeCallback(); + } + } + }) +}; + +/** + * xss 转义 + * @param html + * @returns {string} + */ +function escape(html) { + return String(html || '').replace(/&(?!#?[a-zA-Z0-9]+;)/g, '&') + .replace(//g, '>') + .replace(/'/g, ''').replace(/"/g, '"'); +} + +module.exports.post = postJson; +module.exports.delete = deleteForm; +module.exports.put = putJson; +module.exports.get = getForm; +module.exports.params = getParamsArg; +module.exports.path = buildPath; +module.exports.escape = escape; +module.exports.file = postFile; +// module.exports.baseUrl='http://v3.xzszwhy.cn/xzszwhy'; +// module.exports.url="http://v3.xzszwhy.cn/"; +module.exports.baseUrl = 'https://www.xzszwhy.cn/xzszwhy'; +module.exports.url = "https://www.xzszwhy.cn/"; +module.exports.wssUrl="wss://www.xzszwhy.cn/xzszwhy"; + +// module.exports.baseUrl = 'http://192.168.0.120:8081/xzszwhy'; +// module.exports.url = "http://192.168.0.120:8081/"; \ No newline at end of file diff --git a/xz_mini/utils/util.js b/xz_mini/utils/util.js new file mode 100644 index 0000000..9ff37b1 --- /dev/null +++ b/xz_mini/utils/util.js @@ -0,0 +1,43 @@ +const formatTime = date => { + const year = date.getFullYear() + const month = date.getMonth() + 1 + const day = date.getDate() + const hour = date.getHours() + const minute = date.getMinutes() + const second = date.getSeconds() + + return [year, month, day].map(formatNumber).join('/') + ' ' + [hour, minute, second].map(formatNumber).join(':') +} + +/** + * + * @param {*} date + */ +const formatDate = date => { + const year = date.getFullYear() + const month = date.getMonth() + 1 + const day = date.getDate() + + return [year, month, day].map(formatNumber).join('-') +} + +const formatNumber = n => { + n = n.toString() + return n[1] ? n : '0' + n +} + +function indexOf(str, val) { + if (str.indexOf(val) != -1) { + return true; + } else { + return false; + } +} +function formatDuration(){ + +} +module.exports = { + formatTime: formatTime, + formatDate: formatDate, + indexOf: indexOf +} \ No newline at end of file diff --git a/xz_mini/utils/utils.wxs b/xz_mini/utils/utils.wxs new file mode 100644 index 0000000..197cf9b --- /dev/null +++ b/xz_mini/utils/utils.wxs @@ -0,0 +1,42 @@ +function indexOf(str, val) { + if (str.indexOf(val) != -1) { + return true; + } else { + return false; + } +} + +function formatCount(count){ + var counter = parseInt(count) + if(counter > 100000000){ + return (counter / 100000000).toFixed(1) + '亿' + }else if(counter > 10000){ + return (counter / 10000).toFixed(1) + '万' + }else{ + return counter + } + } + + // 12->12 5->05 + function padLeftZero(str){ + str = str + '' + return ("00" + str).slice(str.length) + } + + function formatDuration(duration, isMilliseconds) { + isMilliseconds = isMilliseconds === undefined + if (isMilliseconds) { + duration = duration / 1000 + } + + var minute = Math.floor(duration / 60) + var second = Math.floor(duration) % 60 + + return padLeftZero(minute) + ":" + padLeftZero(second) + } + +module.exports = { + indexOf: indexOf, + formatCount:formatCount, + formatDuration:formatDuration +} \ No newline at end of file diff --git a/xz_mini/webview/flv/css/reset.css b/xz_mini/webview/flv/css/reset.css new file mode 100644 index 0000000..210501e --- /dev/null +++ b/xz_mini/webview/flv/css/reset.css @@ -0,0 +1 @@ +@charset "utf-8";a,body,dd,div,dl,dt,em,form,h1,h2,h3,h4,h5,h6,img,input,li,ol,option,p,select,span,strong,table,td,textarea,th,ul,var{margin:0;padding:0}body,html{font:400 100% "微软雅黑",Arail,Tabhoma;text-align:left;color:#535353;-webkit-font-smoothing:antialiased;line-height:normal}ol,ul{list-style:none}img{border:0;vertical-align:top}input,select,textarea{outline:0}textarea{resize:none}table{border-collapse:collapse;border-spacing:0}em,strong,th,var{font-weight:400;font-style:normal}a{text-decoration:none;color:#555}a,input{-webkit-tap-highlight-color:transparent}[v-cloak]{display: none} \ No newline at end of file diff --git a/xz_mini/webview/flv/css/style.css b/xz_mini/webview/flv/css/style.css new file mode 100644 index 0000000..91c4715 --- /dev/null +++ b/xz_mini/webview/flv/css/style.css @@ -0,0 +1,27 @@ +.video{ + width: 100%; + height: 4.75rem; + position: fixed; + top: 0; + left: 0; + right: 0; +} +.video video{ + width: 100%; + height: 100%; + background: #000; +} +.video-list{ + margin-top: 4.75rem; +} +.video-list ul li{ + padding: 0 .2rem; + line-height: 1rem; + border-bottom: 1px solid #DEDEDE; + font-size: .32rem; + color: #000; + cursor: pointer; +} +[v-cloak] { + display: none; +} \ No newline at end of file diff --git a/xz_mini/webview/flv/index.html b/xz_mini/webview/flv/index.html new file mode 100644 index 0000000..4f4fedf --- /dev/null +++ b/xz_mini/webview/flv/index.html @@ -0,0 +1,135 @@ + + + + + + 直播历史 + + + + + +
+
+ +
+
+
    +
  • {{index+1}}.{{liveRecord.recordFileName}}
  • +
+
+
+ + + + + + + diff --git a/xz_mini/webview/flv/js/flv.min.js b/xz_mini/webview/flv/js/flv.min.js new file mode 100644 index 0000000..cc07cf1 --- /dev/null +++ b/xz_mini/webview/flv/js/flv.min.js @@ -0,0 +1,7 @@ +!function(e){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=e();else if("function"==typeof define&&define.amd)define([],e);else{var t;t="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:this,t.flvjs=e()}}(function(){var e;return function e(t,n,i){function r(a,o){if(!n[a]){if(!t[a]){var u="function"==typeof require&&require;if(!o&&u)return u(a,!0);if(s)return s(a,!0);var l=new Error("Cannot find module '"+a+"'");throw l.code="MODULE_NOT_FOUND",l}var d=n[a]={exports:{}};t[a][0].call(d.exports,function(e){var n=t[a][1][e];return r(n||e)},d,d.exports,e,t,n,i)}return n[a].exports}for(var s="function"==typeof require&&require,a=0;a0&&this._events[e].length>n&&(this._events[e].warned=!0,console.error("(node) warning: possible EventEmitter memory leak detected. %d listeners added. Use emitter.setMaxListeners() to increase limit.",this._events[e].length),"function"==typeof console.trace&&console.trace()),this},i.prototype.on=i.prototype.addListener,i.prototype.once=function(e,t){function n(){this.removeListener(e,n),i||(i=!0,t.apply(this,arguments))}if(!r(t))throw TypeError("listener must be a function");var i=!1;return n.listener=t,this.on(e,n),this},i.prototype.removeListener=function(e,t){var n,i,s,o;if(!r(t))throw TypeError("listener must be a function");if(!this._events||!this._events[e])return this;if(n=this._events[e],s=n.length,i=-1,n===t||r(n.listener)&&n.listener===t)delete this._events[e],this._events.removeListener&&this.emit("removeListener",e,t);else if(a(n)){for(o=s;o-- >0;)if(n[o]===t||n[o].listener&&n[o].listener===t){i=o;break}if(i<0)return this;1===n.length?(n.length=0,delete this._events[e]):n.splice(i,1),this._events.removeListener&&this.emit("removeListener",e,t)}return this},i.prototype.removeAllListeners=function(e){var t,n;if(!this._events)return this;if(!this._events.removeListener)return 0===arguments.length?this._events={}:this._events[e]&&delete this._events[e],this;if(0===arguments.length){for(t in this._events)"removeListener"!==t&&this.removeAllListeners(t);return this.removeAllListeners("removeListener"),this._events={},this}if(n=this._events[e],r(n))this.removeListener(e,n);else if(n)for(;n.length;)this.removeListener(e,n[n.length-1]);return delete this._events[e],this},i.prototype.listeners=function(e){return this._events&&this._events[e]?r(this._events[e])?[this._events[e]]:this._events[e].slice():[]},i.prototype.listenerCount=function(e){if(this._events){var t=this._events[e];if(r(t))return 1;if(t)return t.length}return 0},i.listenerCount=function(e,t){return e.listenerCount(t)}},{}],3:[function(e,t,n){function i(){throw new Error("setTimeout has not been defined")}function r(){throw new Error("clearTimeout has not been defined")}function s(e){if(h===setTimeout)return setTimeout(e,0);if((h===i||!h)&&setTimeout)return h=setTimeout,setTimeout(e,0);try{return h(e,0)}catch(t){try{return h.call(null,e,0)}catch(t){return h.call(this,e,0)}}}function a(e){if(f===clearTimeout)return clearTimeout(e);if((f===r||!f)&&clearTimeout)return f=clearTimeout,clearTimeout(e);try{return f(e)}catch(t){try{return f.call(null,e)}catch(t){return f.call(this,e)}}}function o(){p&&_&&(p=!1,_.length?m=_.concat(m):v=-1,m.length&&u())}function u(){if(!p){var e=s(o);p=!0;for(var t=m.length;t;){for(_=m,m=[];++v1)for(var n=1;n=e[r]&&t0&&e[0].originalDts=t[r].dts&&et[i].lastSample.originalDts&&e=t[i].lastSample.originalDts&&(i===t.length-1||i0&&(r=this._searchNearestSegmentBefore(n.originalBeginDts)+1),this._lastAppendLocation=r,this._list.splice(r,0,n)}},{key:"getLastSegmentBefore",value:function(e){var t=this._searchNearestSegmentBefore(e);return t>=0?this._list[t]:null}},{key:"getLastSampleBefore",value:function(e){var t=this.getLastSegmentBefore(e);return null!=t?t.lastSample:null}},{key:"getLastSyncPointBefore",value:function(e){for(var t=this._searchNearestSegmentBefore(e),n=this._list[t].syncPoints;0===n.length&&t>0;)t--,n=this._list[t].syncPoints;return n.length>0?n[n.length-1]:null}},{key:"type",get:function(){return this._type}},{key:"length",get:function(){return this._list.length}}]),e}()},{}],9:[function(e,t,n){"use strict";function i(e){return e&&e.__esModule?e:{default:e}}function r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(n,"__esModule",{value:!0});var s=function(){function e(e,t){for(var n=0;n0&&(i+=";codecs="+n.codec);var r=!1;if(l.default.v(this.TAG,"Received Initialization Segment, mimeType: "+i),this._lastInitSegments[n.type]=n,i!==this._mimeTypes[n.type]){if(this._mimeTypes[n.type])l.default.v(this.TAG,"Notice: "+n.type+" mimeType changed, origin: "+this._mimeTypes[n.type]+", target: "+i);else{r=!0;try{var s=this._sourceBuffers[n.type]=this._mediaSource.addSourceBuffer(i);s.addEventListener("error",this.e.onSourceBufferError),s.addEventListener("updateend",this.e.onSourceBufferUpdateEnd)}catch(e){return l.default.e(this.TAG,e.message),void this._emitter.emit(c.default.ERROR,{code:e.code,msg:e.message})}}this._mimeTypes[n.type]=i}t||this._pendingSegments[n.type].push(n),r||this._sourceBuffers[n.type]&&!this._sourceBuffers[n.type].updating&&this._doAppendSegments(),h.default.safari&&"audio/mpeg"===n.container&&n.mediaDuration>0&&(this._requireSetMediaDuration=!0,this._pendingMediaDuration=n.mediaDuration/1e3,this._updateMediaSourceDuration())}},{key:"appendMediaSegment",value:function(e){var t=e;this._pendingSegments[t.type].push(t),this._config.autoCleanupSourceBuffer&&this._needCleanupSourceBuffer()&&this._doCleanupSourceBuffer();var n=this._sourceBuffers[t.type];!n||n.updating||this._hasPendingRemoveRanges()||this._doAppendSegments()}},{key:"seek",value:function(e){for(var t in this._sourceBuffers)if(this._sourceBuffers[t]){var n=this._sourceBuffers[t];if("open"===this._mediaSource.readyState)try{n.abort()}catch(e){l.default.e(this.TAG,e.message)}this._idrList.clear();var i=this._pendingSegments[t];if(i.splice(0,i.length),"closed"!==this._mediaSource.readyState){for(var r=0;r=1&&e-i.start(0)>=this._config.autoCleanupMaxBackwardDuration)return!0}}return!1}},{key:"_doCleanupSourceBuffer",value:function(){var e=this._mediaElement.currentTime;for(var t in this._sourceBuffers){var n=this._sourceBuffers[t];if(n){for(var i=n.buffered,r=!1,s=0;s=this._config.autoCleanupMaxBackwardDuration){r=!0;var u=e-this._config.autoCleanupMinBackwardDuration;this._pendingRemoveRanges[t].push({start:a,end:u})}}else o0&&(isNaN(t)||n>t)&&(l.default.v(this.TAG,"Update MediaSource duration from "+t+" to "+n),this._mediaSource.duration=n),this._requireSetMediaDuration=!1,this._pendingMediaDuration=0}}},{key:"_doRemoveRanges",value:function(){for(var e in this._pendingRemoveRanges)if(this._sourceBuffers[e]&&!this._sourceBuffers[e].updating)for(var t=this._sourceBuffers[e],n=this._pendingRemoveRanges[e];n.length&&!t.updating;){var i=n.shift();t.remove(i.start,i.end)}}},{key:"_doAppendSegments",value:function(){var e=this._pendingSegments;for(var t in e)if(this._sourceBuffers[t]&&!this._sourceBuffers[t].updating&&e[t].length>0){var n=e[t].shift();if(n.timestampOffset){var i=this._sourceBuffers[t].timestampOffset,r=n.timestampOffset/1e3,s=Math.abs(i-r);s>.1&&(l.default.v(this.TAG,"Update MPEG audio timestampOffset from "+i+" to "+r),this._sourceBuffers[t].timestampOffset=r),delete n.timestampOffset}if(!n.data||0===n.data.byteLength)continue;try{this._sourceBuffers[t].appendBuffer(n.data),this._isBufferFull=!1,"video"===t&&n.hasOwnProperty("info")&&this._idrList.appendArray(n.info.syncPoints)}catch(e){this._pendingSegments[t].unshift(n),22===e.code?(this._isBufferFull||this._emitter.emit(c.default.BUFFER_FULL),this._isBufferFull=!0):(l.default.e(this.TAG,e.message),this._emitter.emit(c.default.ERROR,{code:e.code,msg:e.message}))}}}},{key:"_onSourceOpen",value:function(){if(l.default.v(this.TAG,"MediaSource onSourceOpen"),this._mediaSource.removeEventListener("sourceopen",this.e.onSourceOpen),this._pendingSourceBufferInit.length>0)for(var e=this._pendingSourceBufferInit;e.length;){var t=e.shift();this.appendInitSegment(t,!0)}this._hasPendingSegments()&&this._doAppendSegments(),this._emitter.emit(c.default.SOURCE_OPEN)}},{key:"_onSourceEnded",value:function(){l.default.v(this.TAG,"MediaSource onSourceEnded")}},{key:"_onSourceClose",value:function(){l.default.v(this.TAG,"MediaSource onSourceClose"),this._mediaSource&&null!=this.e&&(this._mediaSource.removeEventListener("sourceopen",this.e.onSourceOpen),this._mediaSource.removeEventListener("sourceended",this.e.onSourceEnded),this._mediaSource.removeEventListener("sourceclose",this.e.onSourceClose))}},{key:"_hasPendingSegments",value:function(){var e=this._pendingSegments;return e.video.length>0||e.audio.length>0}},{key:"_hasPendingRemoveRanges",value:function(){var e=this._pendingRemoveRanges;return e.video.length>0||e.audio.length>0}},{key:"_onSourceBufferUpdateEnd",value:function(){this._requireSetMediaDuration?this._updateMediaSourceDuration():this._hasPendingRemoveRanges()?this._doRemoveRanges():this._hasPendingSegments()?this._doAppendSegments():this._hasPendingEos&&this.endOfStream(),this._emitter.emit(c.default.UPDATE_END)}},{key:"_onSourceBufferError",value:function(e){l.default.e(this.TAG,"SourceBuffer Error: "+e)}}]),e}();n.default=p},{"../utils/browser.js":39,"../utils/exception.js":40,"../utils/logger.js":41,"./media-segment-info.js":8,"./mse-events.js":10,events:2}],10:[function(e,t,n){"use strict";Object.defineProperty(n,"__esModule",{value:!0});var i={ERROR:"error",SOURCE_OPEN:"source_open",UPDATE_END:"update_end",BUFFER_FULL:"buffer_full"};n.default=i},{}],11:[function(e,t,n){"use strict";function i(e){return e&&e.__esModule?e:{default:e}}function r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(n,"__esModule",{value:!0});var s=function(){function e(e,t){for(var n=0;n0)this._demuxer.bindDataSource(this._ioctl),this._demuxer.timestampBase=this._mediaDataSource.segments[this._currentSegmentIndex].timestampBase,r=this._demuxer.parseChunks(e,t);else if((i=m.default.probe(e)).match){this._demuxer=new m.default(i,this._config),this._remuxer||(this._remuxer=new v.default(this._config));var s=this._mediaDataSource;void 0==s.duration||isNaN(s.duration)||(this._demuxer.overridedDuration=s.duration),"boolean"==typeof s.hasAudio&&(this._demuxer.overridedHasAudio=s.hasAudio),"boolean"==typeof s.hasVideo&&(this._demuxer.overridedHasVideo=s.hasVideo),this._demuxer.timestampBase=s.segments[this._currentSegmentIndex].timestampBase,this._demuxer.onError=this._onDemuxException.bind(this),this._demuxer.onMediaInfo=this._onMediaInfo.bind(this),this._remuxer.bindDataSource(this._demuxer.bindDataSource(this._ioctl)),this._remuxer.onInitSegment=this._onRemuxerInitSegmentArrival.bind(this),this._remuxer.onMediaSegment=this._onRemuxerMediaSegmentArrival.bind(this),r=this._demuxer.parseChunks(e,t)}else i=null,l.default.e(this.TAG,"Non-FLV, Unsupported media type!"),Promise.resolve().then(function(){n._internalAbort()}),this._emitter.emit(k.default.DEMUX_ERROR,y.default.FORMAT_UNSUPPORTED,"Non-FLV, Unsupported media type"),r=0;return r}},{key:"_onMediaInfo",value:function(e){var t=this;null==this._mediaInfo&&(this._mediaInfo=Object.assign({},e),this._mediaInfo.keyframesIndex=null,this._mediaInfo.segments=[],this._mediaInfo.segmentCount=this._mediaDataSource.segments.length,Object.setPrototypeOf(this._mediaInfo,c.default.prototype));var n=Object.assign({},e);Object.setPrototypeOf(n,c.default.prototype),this._mediaInfo.segments[this._currentSegmentIndex]=n,this._reportSegmentMediaInfo(this._currentSegmentIndex),null!=this._pendingSeekTime&&Promise.resolve().then(function(){var e=t._pendingSeekTime;t._pendingSeekTime=null,t.seek(e)})}},{key:"_onIOSeeked",value:function(){this._remuxer.insertDiscontinuity()}},{key:"_onIOComplete",value:function(e){var t=e,n=t+1;n0&&n[0].originalDts===i&&(i=n[0].pts),this._emitter.emit(k.default.RECOMMEND_SEEKPOINT,i)}}},{key:"_enableStatisticsReporter",value:function(){null==this._statisticsReporter&&(this._statisticsReporter=self.setInterval(this._reportStatisticsInfo.bind(this),this._config.statisticsInfoReportInterval))}},{key:"_disableStatisticsReporter",value:function(){this._statisticsReporter&&(self.clearInterval(this._statisticsReporter),this._statisticsReporter=null)}},{key:"_reportSegmentMediaInfo",value:function(e){var t=this._mediaInfo.segments[e],n=Object.assign({},t);n.duration=this._mediaInfo.duration,n.segmentCount=this._mediaInfo.segmentCount,delete n.segments,delete n.keyframesIndex,this._emitter.emit(k.default.MEDIA_INFO,n)}},{key:"_reportStatisticsInfo",value:function(){var e={};e.url=this._ioctl.currentURL,e.hasRedirect=this._ioctl.hasRedirect,e.hasRedirect&&(e.redirectedURL=this._ioctl.currentRedirectedURL),e.speed=this._ioctl.currentSpeed,e.loaderType=this._ioctl.loaderType,e.currentSegmentIndex=this._currentSegmentIndex,e.totalSegmentCount=this._mediaDataSource.segments.length,this._emitter.emit(k.default.STATISTICS_INFO,e)}}]),e}());n.default=L},{"../demux/demux-errors.js":16,"../demux/flv-demuxer.js":18,"../io/io-controller.js":23,"../io/loader.js":24,"../remux/mp4-remuxer.js":38,"../utils/browser.js":39,"../utils/logger.js":41,"./media-info.js":7,"./transmuxing-events.js":13,events:2}],13:[function(e,t,n){"use strict";Object.defineProperty(n,"__esModule",{value:!0});var i={IO_ERROR:"io_error",DEMUX_ERROR:"demux_error",INIT_SEGMENT:"init_segment",MEDIA_SEGMENT:"media_segment",LOADING_COMPLETE:"loading_complete",RECOVERED_EARLY_EOF:"recovered_early_eof",MEDIA_INFO:"media_info",STATISTICS_INFO:"statistics_info",RECOMMEND_SEEKPOINT:"recommend_seekpoint"};n.default=i},{}],14:[function(e,t,n){"use strict";function i(e){return e&&e.__esModule?e:{default:e}}Object.defineProperty(n,"__esModule",{value:!0});var r=e("../utils/logger.js"),s=(i(r),e("../utils/logging-control.js")),a=i(s),o=e("../utils/polyfill.js"),u=i(o),l=e("./transmuxing-controller.js"),d=i(l),h=e("./transmuxing-events.js"),f=i(h),c=function(e){function t(t,n){var i={msg:f.default.INIT_SEGMENT,data:{type:t,data:n}};e.postMessage(i,[n.data])}function n(t,n){var i={msg:f.default.MEDIA_SEGMENT,data:{type:t,data:n}};e.postMessage(i,[n.data])}function i(){var t={msg:f.default.LOADING_COMPLETE};e.postMessage(t)}function r(){var t={msg:f.default.RECOVERED_EARLY_EOF};e.postMessage(t)}function s(t){var n={msg:f.default.MEDIA_INFO,data:t};e.postMessage(n)}function o(t){var n={msg:f.default.STATISTICS_INFO,data:t};e.postMessage(n)}function l(t,n){e.postMessage({msg:f.default.IO_ERROR,data:{type:t,info:n}})}function h(t,n){e.postMessage({msg:f.default.DEMUX_ERROR,data:{type:t,info:n}})}function c(t){e.postMessage({msg:f.default.RECOMMEND_SEEKPOINT,data:t})}function _(t,n){e.postMessage({msg:"logcat_callback",data:{type:t,logcat:n}})}var m=null,p=_.bind(this);u.default.install(),e.addEventListener("message",function(u){switch(u.data.cmd){case"init":m=new d.default(u.data.param[0],u.data.param[1]),m.on(f.default.IO_ERROR,l.bind(this)),m.on(f.default.DEMUX_ERROR,h.bind(this)),m.on(f.default.INIT_SEGMENT,t.bind(this)),m.on(f.default.MEDIA_SEGMENT,n.bind(this)),m.on(f.default.LOADING_COMPLETE,i.bind(this)),m.on(f.default.RECOVERED_EARLY_EOF,r.bind(this)),m.on(f.default.MEDIA_INFO,s.bind(this)),m.on(f.default.STATISTICS_INFO,o.bind(this)),m.on(f.default.RECOMMEND_SEEKPOINT,c.bind(this));break;case"destroy":m&&(m.destroy(),m=null),e.postMessage({msg:"destroyed"});break;case"start":m.start();break;case"stop":m.stop();break;case"seek":m.seek(u.data.param);break;case"pause":m.pause();break;case"resume":m.resume();break;case"logging_config":var _=u.data.param;a.default.applyConfig(_),!0===_.enableCallback?a.default.addLogListener(p):a.default.removeLogListener(p)}})};n.default=c},{"../utils/logger.js":41,"../utils/logging-control.js":42,"../utils/polyfill.js":43,"./transmuxing-controller.js":12,"./transmuxing-events.js":13}],15:[function(e,t,n){"use strict";function i(e){return e&&e.__esModule?e:{default:e}}function r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(n,"__esModule",{value:!0});var s=function(){function e(e,t){for(var n=0;n0?(0,l.default)(new Uint8Array(e,t+2,r)):"",{data:s,size:2+r}}},{key:"parseLongString",value:function(e,t,n){if(n<4)throw new d.IllegalStateException("Data not enough when parse LongString");var i=new DataView(e,t,n),r=i.getUint32(0,!h),s=void 0;return s=r>0?(0,l.default)(new Uint8Array(e,t+4,r)):"",{data:s,size:4+r}}},{key:"parseDate",value:function(e,t,n){if(n<10)throw new d.IllegalStateException("Data size invalid when parse Date");var i=new DataView(e,t,n),r=i.getFloat64(0,!h);return r+=60*i.getInt16(8,!h)*1e3,{data:new Date(r),size:10}}},{key:"parseValue",value:function(t,n,i){if(i<1)throw new d.IllegalStateException("Data not enough when parse Value");var r=new DataView(t,n,i),s=1,a=r.getUint8(0),u=void 0,l=!1;try{switch(a){case 0:u=r.getFloat64(1,!h),s+=8;break;case 1:u=!!r.getUint8(1),s+=1;break;case 2:var f=e.parseString(t,n+1,i-1);u=f.data,s+=f.size;break;case 3:u={};var c=0;for(9==(16777215&r.getUint32(i-4,!h))&&(c=3);s32)throw new s.InvalidArgumentException("ExpGolomb: readBits() bits exceeded max 32bits!");if(e<=this._current_word_bits_left){var t=this._current_word>>>32-e;return this._current_word<<=e,this._current_word_bits_left-=e,t}var n=this._current_word_bits_left?this._current_word:0;n>>>=32-this._current_word_bits_left;var i=e-this._current_word_bits_left;this._fillCurrentWord();var r=Math.min(i,this._current_word_bits_left),a=this._current_word>>>32-r;return this._current_word<<=r,this._current_word_bits_left-=r,n=n<>>e))return this._current_word<<=e,this._current_word_bits_left-=e,e;return this._fillCurrentWord(),e+this._skipLeadingZero()}},{key:"readUEG",value:function(){var e=this._skipLeadingZero();return this.readBits(e+1)-1}},{key:"readSEG",value:function(){var e=this.readUEG();return 1&e?e+1>>>1:-1*(e>>>1)}}]),e}();n.default=a},{"../utils/exception.js":40}],18:[function(e,t,n){"use strict";function i(e){return e&&e.__esModule?e:{default:e}}function r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function s(e,t){return e[t]<<24|e[t+1]<<16|e[t+2]<<8|e[t+3]}Object.defineProperty(n,"__esModule",{value:!0});var a="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},o=function(){function e(e,t){for(var n=0;n13))return 0;i=e.probe(t).dataOffset}if(this._firstParse){this._firstParse=!1,n+i!==this._dataOffset&&l.default.w(this.TAG,"First time parsing but chunk byteStart invalid!");0!==new DataView(t,i).getUint32(0,!r)&&l.default.w(this.TAG,"PrevTagSize0 !== 0 !!!"),i+=4}for(;it.byteLength)break;var a=s.getUint8(0),o=16777215&s.getUint32(0,!r);if(i+11+o+4>t.byteLength)break;if(8===a||9===a||18===a){var u=s.getUint8(4),d=s.getUint8(5),h=s.getUint8(6),f=s.getUint8(7),c=h|d<<8|u<<16|f<<24;0!==(16777215&s.getUint32(7,!r))&&l.default.w(this.TAG,"Meet tag which has StreamID != 0!");var _=i+11;switch(a){case 8:this._parseAudioData(t,_,o,c);break;case 9:this._parseVideoData(t,_,o,c,n+i);break;case 18:this._parseScriptData(t,_,o)}var m=s.getUint32(11+o,!r);m!==11+o&&l.default.w(this.TAG,"Invalid PrevTagSize "+m),i+=11+o+4}else l.default.w(this.TAG,"Unsupported tag type "+a+", skipped"),i+=11+o+4}return this._isInitialMetadataDispatched()&&this._dispatch&&(this._audioTrack.length||this._videoTrack.length)&&this._onDataAvailable(this._audioTrack,this._videoTrack),i}},{key:"_parseScriptData",value:function(e,t,n){var i=h.default.parseScriptData(e,t,n);if(i.hasOwnProperty("onMetaData")){if(null==i.onMetaData||"object"!==a(i.onMetaData))return void l.default.w(this.TAG,"Invalid onMetaData structure!");this._metadata&&l.default.w(this.TAG,"Found another onMetaData tag!"),this._metadata=i;var r=this._metadata.onMetaData;if("boolean"==typeof r.hasAudio&&!1===this._hasAudioFlagOverrided&&(this._hasAudio=r.hasAudio,this._mediaInfo.hasAudio=this._hasAudio),"boolean"==typeof r.hasVideo&&!1===this._hasVideoFlagOverrided&&(this._hasVideo=r.hasVideo,this._mediaInfo.hasVideo=this._hasVideo),"number"==typeof r.audiodatarate&&(this._mediaInfo.audioDataRate=r.audiodatarate),"number"==typeof r.videodatarate&&(this._mediaInfo.videoDataRate=r.videodatarate),"number"==typeof r.width&&(this._mediaInfo.width=r.width),"number"==typeof r.height&&(this._mediaInfo.height=r.height),"number"==typeof r.duration){if(!this._durationOverrided){var s=Math.floor(r.duration*this._timescale);this._duration=s,this._mediaInfo.duration=s}}else this._mediaInfo.duration=0;if("number"==typeof r.framerate){var o=Math.floor(1e3*r.framerate);if(o>0){var u=o/1e3;this._referenceFrameRate.fixed=!0,this._referenceFrameRate.fps=u,this._referenceFrameRate.fps_num=o,this._referenceFrameRate.fps_den=1e3,this._mediaInfo.fps=u}}if("object"===a(r.keyframes)){this._mediaInfo.hasKeyframesIndex=!0;var d=r.keyframes;this._mediaInfo.keyframesIndex=this._parseKeyframesIndex(d),r.keyframes=null}else this._mediaInfo.hasKeyframesIndex=!1;this._dispatch=!1,this._mediaInfo.metadata=r,l.default.v(this.TAG,"Parsed onMetaData"),this._mediaInfo.isComplete()&&this._onMediaInfo(this._mediaInfo)}}},{key:"_parseKeyframesIndex",value:function(e){for(var t=[],n=[],i=1;i>>4;if(2!==a&&10!==a)return void this._onError(m.default.CODEC_UNSUPPORTED,"Flv: Unsupported audio codec idx: "+a);var o=0,u=(12&s)>>>2;if(!(u>=0&&u<=4))return void this._onError(m.default.FORMAT_ERROR,"Flv: Invalid audio sample rate idx: "+u);o=this._flvSoundRateTable[u];var d=1&s,h=this._audioMetadata,f=this._audioTrack;if(h||(!1===this._hasAudio&&!1===this._hasAudioFlagOverrided&&(this._hasAudio=!0,this._mediaInfo.hasAudio=!0),h=this._audioMetadata={},h.type="audio",h.id=f.id,h.timescale=this._timescale,h.duration=this._duration,h.audioSampleRate=o,h.channelCount=0===d?1:2),10===a){var c=this._parseAACAudioData(e,t+1,n-1);if(void 0==c)return;if(0===c.packetType){h.config&&l.default.w(this.TAG,"Found another AudioSpecificConfig!");var _=c.data;h.audioSampleRate=_.samplingRate,h.channelCount=_.channelCount,h.codec=_.codec,h.originalCodec=_.originalCodec,h.config=_.config,h.refSampleDuration=1024/h.audioSampleRate*h.timescale,l.default.v(this.TAG,"Parsed AudioSpecificConfig"),this._isInitialMetadataDispatched()?this._dispatch&&(this._audioTrack.length||this._videoTrack.length)&&this._onDataAvailable(this._audioTrack,this._videoTrack):this._audioInitialMetadataDispatched=!0,this._dispatch=!1,this._onTrackMetadata("audio",h);var p=this._mediaInfo;p.audioCodec=h.originalCodec,p.audioSampleRate=h.audioSampleRate,p.audioChannelCount=h.channelCount,p.hasVideo?null!=p.videoCodec&&(p.mimeType='video/x-flv; codecs="'+p.videoCodec+","+p.audioCodec+'"'):p.mimeType='video/x-flv; codecs="'+p.audioCodec+'"',p.isComplete()&&this._onMediaInfo(p)}else if(1===c.packetType){var v=this._timestampBase+i,g={unit:c.data,dts:v,pts:v};f.samples.push(g),f.length+=c.data.length}else l.default.e(this.TAG,"Flv: Unsupported AAC data type "+c.packetType)}else if(2===a){if(!h.codec){var y=this._parseMP3AudioData(e,t+1,n-1,!0);if(void 0==y)return;h.audioSampleRate=y.samplingRate,h.channelCount=y.channelCount,h.codec=y.codec,h.originalCodec=y.originalCodec,h.refSampleDuration=1152/h.audioSampleRate*h.timescale,l.default.v(this.TAG,"Parsed MPEG Audio Frame Header"),this._audioInitialMetadataDispatched=!0,this._onTrackMetadata("audio",h);var E=this._mediaInfo;E.audioCodec=h.codec,E.audioSampleRate=h.audioSampleRate,E.audioChannelCount=h.channelCount,E.audioDataRate=y.bitRate,E.hasVideo?null!=E.videoCodec&&(E.mimeType='video/x-flv; codecs="'+E.videoCodec+","+E.audioCodec+'"'):E.mimeType='video/x-flv; codecs="'+E.audioCodec+'"',E.isComplete()&&this._onMediaInfo(E)}var b=this._parseMP3AudioData(e,t+1,n-1,!1);if(void 0==b)return;var S=this._timestampBase+i,k={unit:b,dts:S,pts:S};f.samples.push(k),f.length+=b.length}}}},{ +key:"_parseAACAudioData",value:function(e,t,n){if(n<=1)return void l.default.w(this.TAG,"Flv: Invalid AAC packet, missing AACPacketType or/and Data!");var i={},r=new Uint8Array(e,t,n);return i.packetType=r[0],0===r[0]?i.data=this._parseAACAudioSpecificConfig(e,t+1,n-1):i.data=r.subarray(1),i}},{key:"_parseAACAudioSpecificConfig",value:function(e,t,n){var i=new Uint8Array(e,t,n),r=null,s=0,a=0,o=0,u=null;if(s=a=i[0]>>>3,(o=(7&i[0])<<1|i[1]>>>7)<0||o>=this._mpegSamplingRates.length)return void this._onError(m.default.FORMAT_ERROR,"Flv: AAC invalid sampling frequency index!");var l=this._mpegSamplingRates[o],d=(120&i[1])>>>3;if(d<0||d>=8)return void this._onError(m.default.FORMAT_ERROR,"Flv: AAC invalid channel configuration");5===s&&(u=(7&i[1])<<1|i[2]>>>7,i[2]);var h=self.navigator.userAgent.toLowerCase();return-1!==h.indexOf("firefox")?o>=6?(s=5,r=new Array(4),u=o-3):(s=2,r=new Array(2),u=o):-1!==h.indexOf("android")?(s=2,r=new Array(2),u=o):(s=5,u=o,r=new Array(4),o>=6?u=o-3:1===d&&(s=2,r=new Array(2),u=o)),r[0]=s<<3,r[0]|=(15&o)>>>1,r[1]=(15&o)<<7,r[1]|=(15&d)<<3,5===s&&(r[1]|=(15&u)>>>1,r[2]=(1&u)<<7,r[2]|=8,r[3]=0),{config:r,samplingRate:l,channelCount:d,codec:"mp4a.40."+s,originalCodec:"mp4a.40."+a}}},{key:"_parseMP3AudioData",value:function(e,t,n,i){if(n<4)return void l.default.w(this.TAG,"Flv: Invalid MP3 packet, header missing!");var r=(this._littleEndian,new Uint8Array(e,t,n)),s=null;if(i){if(255!==r[0])return;var a=r[1]>>>3&3,o=(6&r[1])>>1,u=(240&r[2])>>>4,d=(12&r[2])>>>2,h=r[3]>>>6&3,f=3!==h?2:1,c=0,_=0;switch(a){case 0:c=this._mpegAudioV25SampleRateTable[d];break;case 2:c=this._mpegAudioV20SampleRateTable[d];break;case 3:c=this._mpegAudioV10SampleRateTable[d]}switch(o){case 1:34,u>>4,o=15&s;if(7!==o)return void this._onError(m.default.CODEC_UNSUPPORTED,"Flv: Unsupported codec in video frame: "+o);this._parseAVCVideoPacket(e,t+1,n-1,i,r,a)}}},{key:"_parseAVCVideoPacket",value:function(e,t,n,i,r,s){if(n<4)return void l.default.w(this.TAG,"Flv: Invalid AVC packet, missing AVCPacketType or/and CompositionTime");var a=this._littleEndian,o=new DataView(e,t,n),u=o.getUint8(0),d=16777215&o.getUint32(0,!a);if(0===u)this._parseAVCDecoderConfigurationRecord(e,t+4,n-4);else if(1===u)this._parseAVCVideoData(e,t+4,n-4,i,r,s,d);else if(2!==u)return void this._onError(m.default.FORMAT_ERROR,"Flv: Invalid video packet type "+u)}},{key:"_parseAVCDecoderConfigurationRecord",value:function(e,t,n){if(n<7)return void l.default.w(this.TAG,"Flv: Invalid AVCDecoderConfigurationRecord, lack of data!");var i=this._videoMetadata,r=this._videoTrack,s=this._littleEndian,a=new DataView(e,t,n);i?void 0!==i.avcc&&l.default.w(this.TAG,"Found another AVCDecoderConfigurationRecord!"):(!1===this._hasVideo&&!1===this._hasVideoFlagOverrided&&(this._hasVideo=!0,this._mediaInfo.hasVideo=!0),i=this._videoMetadata={},i.type="video",i.id=r.id,i.timescale=this._timescale,i.duration=this._duration);var o=a.getUint8(0),u=a.getUint8(1);a.getUint8(2),a.getUint8(3);if(1!==o||0===u)return void this._onError(m.default.FORMAT_ERROR,"Flv: Invalid AVCDecoderConfigurationRecord");if(this._naluLengthSize=1+(3&a.getUint8(4)),3!==this._naluLengthSize&&4!==this._naluLengthSize)return void this._onError(m.default.FORMAT_ERROR,"Flv: Strange NaluLengthSizeMinusOne: "+(this._naluLengthSize-1));var d=31&a.getUint8(5);if(0===d)return void this._onError(m.default.FORMAT_ERROR,"Flv: Invalid AVCDecoderConfigurationRecord: No SPS");d>1&&l.default.w(this.TAG,"Flv: Strange AVCDecoderConfigurationRecord: SPS Count = "+d);for(var h=6,f=0;f1&&l.default.w(this.TAG,"Flv: Strange AVCDecoderConfigurationRecord: PPS Count = "+w),h++;for(var R=0;R=n){l.default.w(this.TAG,"Malformed Nalu near timestamp "+_+", offset = "+f+", dataSize = "+n);break}var p=u.getUint32(f,!o);if(3===c&&(p>>>=8),p>n-c)return void l.default.w(this.TAG,"Malformed Nalus near timestamp "+_+", NaluSize > DataSize!");var v=31&u.getUint8(f+c);5===v&&(m=!0);var g=new Uint8Array(e,t+f,c+p),y={type:v,data:g};d.push(y),h+=g.byteLength,f+=c+p}if(d.length){var E=this._videoTrack,b={units:d,length:h,isKeyframe:m,dts:_,cts:a,pts:_+a};m&&(b.fileposition=r),E.samples.push(b),E.length+=h}}},{key:"onTrackMetadata",get:function(){return this._onTrackMetadata},set:function(e){this._onTrackMetadata=e}},{key:"onMediaInfo",get:function(){return this._onMediaInfo},set:function(e){this._onMediaInfo=e}},{key:"onError",get:function(){return this._onError},set:function(e){this._onError=e}},{key:"onDataAvailable",get:function(){return this._onDataAvailable},set:function(e){this._onDataAvailable=e}},{key:"timestampBase",get:function(){return this._timestampBase},set:function(e){this._timestampBase=e}},{key:"overridedDuration",get:function(){return this._duration},set:function(e){this._durationOverrided=!0,this._duration=e,this._mediaInfo.duration=e}},{key:"overridedHasAudio",set:function(e){this._hasAudioFlagOverrided=!0,this._hasAudio=e,this._mediaInfo.hasAudio=e}},{key:"overridedHasVideo",set:function(e){this._hasVideoFlagOverrided=!0,this._hasVideo=e,this._mediaInfo.hasVideo=e}}],[{key:"probe",value:function(e){var t=new Uint8Array(e),n={match:!1};if(70!==t[0]||76!==t[1]||86!==t[2]||1!==t[3])return n;var i=(4&t[4])>>>2!=0,r=0!=(1&t[4]),a=s(t,5);return a<9?n:{match:!0,consumed:a,dataOffset:a,hasAudioTrack:i,hasVideoTrack:r}}}]),e}();n.default=y},{"../core/media-info.js":7,"../utils/exception.js":40,"../utils/logger.js":41,"./amf-parser.js":15,"./demux-errors.js":16,"./sps-parser.js":19}],19:[function(e,t,n){"use strict";function i(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(n,"__esModule",{value:!0});var r=function(){function e(e,t){for(var n=0;n=2&&3===t[s]&&0===t[s-1]&&0===t[s-2]||(i[r]=t[s],r++);return new Uint8Array(i.buffer,0,r)}},{key:"parseSPS",value:function(t){var n=e._ebsp2rbsp(t),i=new a.default(n);i.readByte();var r=i.readByte();i.readByte();var s=i.readByte();i.readUEG();var o=e.getProfileString(r),u=e.getLevelString(s),l=1,d=420,h=[0,420,422,444],f=8;if((100===r||110===r||122===r||244===r||44===r||83===r||86===r||118===r||128===r||138===r||144===r)&&(l=i.readUEG(),3===l&&i.readBits(1),l<=3&&(d=h[l]),f=i.readUEG()+8,i.readUEG(),i.readBits(1),i.readBool()))for(var c=3!==l?8:12,_=0;_0&&I<16?(w=x[I-1],R=M[I-1]):255===I&&(w=i.readByte()<<8|i.readByte(),R=i.readByte()<<8|i.readByte())}if(i.readBool()&&i.readBool(),i.readBool()&&(i.readBits(4),i.readBool()&&i.readBits(24)),i.readBool()&&(i.readUEG(),i.readUEG()),i.readBool()){var D=i.readBits(32),B=i.readBits(32);O=i.readBool(),T=B,C=2*D,A=T/C}}var j=1;1===w&&1===R||(j=w/R);var P=0,U=0;if(0===l)P=1,U=2-E;else{var N=3===l?1:2,F=1===l?2:1;P=N,U=F*(2-E)}var G=16*(g+1),V=16*(y+1)*(2-E);G-=(b+S)*P,V-=(k+L)*U;var z=Math.ceil(G*j);return i.destroy(),i=null,{profile_string:o,level_string:u,bit_depth:f,chroma_format:d,chroma_format_string:e.getChromaFormatString(d),frame_rate:{fixed:O,fps:A,fps_den:C,fps_num:T},sar_ratio:{width:w,height:R},codec_size:{width:G,height:V},present_size:{width:z,height:V}}}},{key:"_skipScalingList",value:function(e,t){for(var n=8,i=8,r=0,s=0;s=15048,t=!f.default.msedge||e;return self.fetch&&self.ReadableStream&&t}catch(e){return!1}}}]),l(t,[{key:"destroy",value:function(){this.isWorking()&&this.abort(),u(t.prototype.__proto__||Object.getPrototypeOf(t.prototype),"destroy",this).call(this)}},{key:"open",value:function(e,t){var n=this;this._dataSource=e,this._range=t;var i=e.url;this._config.reuseRedirectedURL&&void 0!=e.redirectedURL&&(i=e.redirectedURL);var r=this._seekHandler.getConfig(i,t),s=new self.Headers;if("object"===o(r.headers)){var a=r.headers;for(var u in a)a.hasOwnProperty(u)&&s.append(u,a[u])}var l={method:"GET",headers:s,mode:"cors",cache:"default",referrerPolicy:"no-referrer-when-downgrade"};!1===e.cors&&(l.mode="same-origin"),e.withCredentials&&(l.credentials="include"),e.referrerPolicy&&(l.referrerPolicy=e.referrerPolicy),this._status=c.LoaderStatus.kConnecting,self.fetch(r.url,l).then(function(e){if(n._requestAbort)return n._requestAbort=!1,void(n._status=c.LoaderStatus.kIdle);if(e.ok&&e.status>=200&&e.status<=299){if(e.url!==r.url&&n._onURLRedirect){var t=n._seekHandler.removeURLParameters(e.url);n._onURLRedirect(t)}var i=e.headers.get("Content-Length");return null!=i&&(n._contentLength=parseInt(i),0!==n._contentLength&&n._onContentLengthKnown&&n._onContentLengthKnown(n._contentLength)),n._pump.call(n,e.body.getReader())}if(n._status=c.LoaderStatus.kError,!n._onError)throw new _.RuntimeException("FetchStreamLoader: Http code invalid, "+e.status+" "+e.statusText);n._onError(c.LoaderErrors.HTTP_STATUS_CODE_INVALID,{code:e.status,msg:e.statusText})}).catch(function(e){if(n._status=c.LoaderStatus.kError,!n._onError)throw e;n._onError(c.LoaderErrors.EXCEPTION,{code:-1,msg:e.message})})}},{key:"abort",value:function(){this._requestAbort=!0}},{key:"_pump",value:function(e){var t=this;return e.read().then(function(n){if(n.done)t._status=c.LoaderStatus.kComplete,t._onComplete&&t._onComplete(t._range.from,t._range.from+t._receivedLength-1);else{if(!0===t._requestAbort)return t._requestAbort=!1,t._status=c.LoaderStatus.kComplete,e.cancel();t._status=c.LoaderStatus.kBuffering;var i=n.value.buffer,r=t._range.from+t._receivedLength;t._receivedLength+=i.byteLength,t._onDataArrival&&t._onDataArrival(i,r,t._receivedLength),t._pump(e)}}).catch(function(e){if(11!==e.code||!f.default.msedge){t._status=c.LoaderStatus.kError;var n=0,i=null;if(19!==e.code&&"network error"!==e.message||!(null===t._contentLength||null!==t._contentLength&&t._receivedLength0&&(this._stashInitialSize=n.stashInitialSize),this._stashUsed=0,this._stashSize=this._stashInitialSize,this._bufferSize=3145728,this._stashBuffer=new ArrayBuffer(this._bufferSize),this._stashByteStart=0,this._enableStash=!0,!1===n.enableStashBuffer&&(this._enableStash=!1),this._loader=null,this._loaderClass=null,this._seekHandler=null,this._dataSource=t,this._isWebSocketURL=/wss?:\/\/(.+?)/.test(t.url),this._refTotalLength=t.filesize?t.filesize:null,this._totalLength=this._refTotalLength,this._fullRequestFlag=!1,this._currentRange=null,this._redirectedURL=null,this._speedNormalized=0,this._speedSampler=new l.default,this._speedNormalizeList=[64,128,256,384,512,768,1024,1536,2048,3072,4096],this._isEarlyEofReconnecting=!1,this._paused=!1,this._resumeFrom=0,this._onDataArrival=null,this._onSeeked=null,this._onError=null,this._onComplete=null,this._onRedirect=null,this._onRecoveredEarlyEof=null,this._selectSeekHandler(),this._selectLoader(),this._createLoader()}return s(e,[{key:"destroy",value:function(){this._loader.isWorking()&&this._loader.abort(),this._loader.destroy(),this._loader=null,this._loaderClass=null,this._dataSource=null,this._stashBuffer=null,this._stashUsed=this._stashSize=this._bufferSize=this._stashByteStart=0,this._currentRange=null,this._speedSampler=null,this._isEarlyEofReconnecting=!1,this._onDataArrival=null,this._onSeeked=null,this._onError=null,this._onComplete=null,this._onRedirect=null,this._onRecoveredEarlyEof=null,this._extraData=null}},{key:"isWorking",value:function(){return this._loader&&this._loader.isWorking()&&!this._paused}},{key:"isPaused",value:function(){return this._paused}},{key:"_selectSeekHandler",value:function(){var e=this._config;if("range"===e.seekType)this._seekHandler=new b.default(this._config.rangeLoadZeroStart);else if("param"===e.seekType){var t=e.seekParamStart||"bstart",n=e.seekParamEnd||"bend";this._seekHandler=new k.default(t,n)}else{if("custom"!==e.seekType)throw new L.InvalidArgumentException("Invalid seekType in config: "+e.seekType);if("function"!=typeof e.customSeekHandler)throw new L.InvalidArgumentException("Custom seekType specified in config but invalid customSeekHandler!");this._seekHandler=new e.customSeekHandler}}},{key:"_selectLoader",value:function(){if(this._isWebSocketURL)this._loaderClass=y.default;else if(f.default.isSupported())this._loaderClass=f.default;else if(_.default.isSupported())this._loaderClass=_.default;else{if(!v.default.isSupported())throw new L.RuntimeException("Your browser doesn't support xhr with arraybuffer responseType!");this._loaderClass=v.default}}},{key:"_createLoader",value:function(){this._loader=new this._loaderClass(this._seekHandler,this._config),!1===this._loader.needStashBuffer&&(this._enableStash=!1),this._loader.onContentLengthKnown=this._onContentLengthKnown.bind(this),this._loader.onURLRedirect=this._onURLRedirect.bind(this),this._loader.onDataArrival=this._onLoaderChunkArrival.bind(this),this._loader.onComplete=this._onLoaderComplete.bind(this),this._loader.onError=this._onLoaderError.bind(this)}},{key:"open",value:function(e){this._currentRange={from:0,to:-1},e&&(this._currentRange.from=e),this._speedSampler.reset(),e||(this._fullRequestFlag=!0),this._loader.open(this._dataSource,Object.assign({},this._currentRange))}},{key:"abort",value:function(){this._loader.abort(),this._paused&&(this._paused=!1,this._resumeFrom=0)}},{key:"pause",value:function(){this.isWorking()&&(this._loader.abort(),0!==this._stashUsed?(this._resumeFrom=this._stashByteStart,this._currentRange.to=this._stashByteStart-1):this._resumeFrom=this._currentRange.to+1,this._stashUsed=0,this._stashByteStart=0,this._paused=!0)}},{key:"resume",value:function(){if(this._paused){this._paused=!1;var e=this._resumeFrom;this._resumeFrom=0,this._internalSeek(e,!0)}}},{key:"seek",value:function(e){this._paused=!1,this._stashUsed=0,this._stashByteStart=0,this._internalSeek(e,!0)}},{key:"_internalSeek",value:function(e,t){this._loader.isWorking()&&this._loader.abort(),this._flushStashBuffer(t),this._loader.destroy(),this._loader=null;var n={from:e,to:-1};this._currentRange={from:n.from,to:-1},this._speedSampler.reset(),this._stashSize=this._stashInitialSize,this._createLoader(),this._loader.open(this._dataSource,n),this._onSeeked&&this._onSeeked()}},{key:"updateUrl",value:function(e){if(!e||"string"!=typeof e||0===e.length)throw new L.InvalidArgumentException("Url must be a non-empty string!");this._dataSource.url=e}},{key:"_expandBuffer",value:function(e){for(var t=this._stashSize;t+10485760){var i=new Uint8Array(this._stashBuffer,0,this._stashUsed);new Uint8Array(n,0,t).set(i,0)}this._stashBuffer=n,this._bufferSize=t}}},{key:"_normalizeSpeed",value:function(e){var t=this._speedNormalizeList,n=t.length-1,i=0,r=0,s=n;if(e=t[i]&&e=512&&e<=1024?Math.floor(1.5*e):2*e)>8192&&(t=8192);var n=1024*t+1048576;this._bufferSize0){var o=this._stashBuffer.slice(0,this._stashUsed),u=this._dispatchChunks(o,this._stashByteStart);if(u0){var l=new Uint8Array(o,u);a.set(l,0),this._stashUsed=l.byteLength,this._stashByteStart+=u}}else this._stashUsed=0,this._stashByteStart+=u;this._stashUsed+e.byteLength>this._bufferSize&&(this._expandBuffer(this._stashUsed+e.byteLength),a=new Uint8Array(this._stashBuffer,0,this._bufferSize)),a.set(new Uint8Array(e),this._stashUsed),this._stashUsed+=e.byteLength}else{var d=this._dispatchChunks(e,t);if(dthis._bufferSize&&(this._expandBuffer(h),a=new Uint8Array(this._stashBuffer,0,this._bufferSize)),a.set(new Uint8Array(e,d),0),this._stashUsed+=h,this._stashByteStart=t+d}}}else if(0===this._stashUsed){var f=this._dispatchChunks(e,t);if(fthis._bufferSize&&this._expandBuffer(c);var _=new Uint8Array(this._stashBuffer,0,this._bufferSize);_.set(new Uint8Array(e,f),0),this._stashUsed+=c,this._stashByteStart=t+f}}else{this._stashUsed+e.byteLength>this._bufferSize&&this._expandBuffer(this._stashUsed+e.byteLength);var m=new Uint8Array(this._stashBuffer,0,this._bufferSize);m.set(new Uint8Array(e),this._stashUsed),this._stashUsed+=e.byteLength;var p=this._dispatchChunks(this._stashBuffer.slice(0,this._stashUsed),this._stashByteStart);if(p0){var v=new Uint8Array(this._stashBuffer,p);m.set(v,0)}this._stashUsed-=p,this._stashByteStart+=p}}}},{key:"_flushStashBuffer",value:function(e){if(this._stashUsed>0){var t=this._stashBuffer.slice(0,this._stashUsed),n=this._dispatchChunks(t,this._stashByteStart),i=t.byteLength-n;if(n0){var r=new Uint8Array(this._stashBuffer,0,this._bufferSize),s=new Uint8Array(t,n);r.set(s,0),this._stashUsed=s.byteLength,this._stashByteStart+=n}return 0}o.default.w(this.TAG,i+" bytes unconsumed data remain when flush buffer, dropped")}return this._stashUsed=0,this._stashByteStart=0,i}return 0}},{key:"_onLoaderComplete",value:function(e,t){this._flushStashBuffer(!0),this._onComplete&&this._onComplete(this._extraData)}},{key:"_onLoaderError",value:function(e,t){switch(o.default.e(this.TAG,"Loader error, code = "+t.code+", msg = "+t.msg),this._flushStashBuffer(!1),this._isEarlyEofReconnecting&&(this._isEarlyEofReconnecting=!1,e=d.LoaderErrors.UNRECOVERABLE_EARLY_EOF),e){case d.LoaderErrors.EARLY_EOF:if(!this._config.isLive&&this._totalLength){var n=this._currentRange.to+1;return void(n0)for(var s=n.split("&"),a=0;a0;o[0]!==this._startName&&o[0]!==this._endName&&(u&&(r+="&"),r+=s[a])}return 0===r.length?t:t+"?"+r}}]),e}();n.default=s},{}],26:[function(e,t,n){"use strict";function i(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(n,"__esModule",{value:!0});var r=function(){function e(e,t){for(var n=0;n=500?this.currentKBps:0}},{key:"averageKBps",get:function(){var e=(this._now()-this._firstCheckpoint)/1e3;return this._totalBytes/e/1024}}]),e}();n.default=s},{}],28:[function(e,t,n){"use strict";function i(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function r(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function s(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}Object.defineProperty(n,"__esModule",{value:!0});var a=function e(t,n,i){null===t&&(t=Function.prototype);var r=Object.getOwnPropertyDescriptor(t,n);if(void 0===r){var s=Object.getPrototypeOf(t);return null===s?void 0:e(s,n,i)}if("value"in r)return r.value;var a=r.get;if(void 0!==a)return a.call(i)},o=function(){function e(e,t){for(var n=0;n299)){if(this._status=h.LoaderStatus.kError,!this._onError)throw new f.RuntimeException("MozChunkedLoader: Http code invalid, "+t.status+" "+t.statusText);this._onError(h.LoaderErrors.HTTP_STATUS_CODE_INVALID,{code:t.status,msg:t.statusText})}else this._status=h.LoaderStatus.kBuffering}}},{key:"_onProgress",value:function(e){if(this._status!==h.LoaderStatus.kError){null===this._contentLength&&null!==e.total&&0!==e.total&&(this._contentLength=e.total,this._onContentLengthKnown&&this._onContentLengthKnown(this._contentLength));var t=e.target.response,n=this._range.from+this._receivedLength;this._receivedLength+=t.byteLength,this._onDataArrival&&this._onDataArrival(t,n,this._receivedLength)}}},{key:"_onLoadEnd",value:function(e){if(!0===this._requestAbort)return void(this._requestAbort=!1);this._status!==h.LoaderStatus.kError&&(this._status=h.LoaderStatus.kComplete,this._onComplete&&this._onComplete(this._range.from,this._range.from+this._receivedLength-1))}},{key:"_onXhrError",value:function(e){this._status=h.LoaderStatus.kError;var t=0,n=null;if(this._contentLength&&e.loaded=200&&t.status<=299){if(this._status=h.LoaderStatus.kBuffering,void 0!=t.responseURL){var n=this._seekHandler.removeURLParameters(t.responseURL);t.responseURL!==this._currentRequestURL&&n!==this._currentRedirectedURL&&(this._currentRedirectedURL=n,this._onURLRedirect&&this._onURLRedirect(n))}var i=t.getResponseHeader("Content-Length");if(null!=i&&null==this._contentLength){var r=parseInt(i);r>0&&(this._contentLength=r,this._onContentLengthKnown&&this._onContentLengthKnown(this._contentLength))}}else{if(this._status=h.LoaderStatus.kError,!this._onError)throw new f.RuntimeException("MSStreamLoader: Http code invalid, "+t.status+" "+t.statusText);this._onError(h.LoaderErrors.HTTP_STATUS_CODE_INVALID,{code:t.status,msg:t.statusText})}else if(3===t.readyState&&t.status>=200&&t.status<=299){this._status=h.LoaderStatus.kBuffering;var s=t.response;this._reader.readAsArrayBuffer(s)}}},{key:"_xhrOnError",value:function(e){this._status=h.LoaderStatus.kError;var t=h.LoaderErrors.EXCEPTION,n={code:-1,msg:e.constructor.name+" "+e.type};if(!this._onError)throw new f.RuntimeException(n.msg);this._onError(t,n)}},{key:"_msrOnProgress",value:function(e){var t=e.target,n=t.result;if(null==n)return void this._doReconnectIfNeeded();var i=n.slice(this._lastTimeBufferSize);this._lastTimeBufferSize=n.byteLength;var r=this._totalRange.from+this._receivedLength;this._receivedLength+=i.byteLength,this._onDataArrival&&this._onDataArrival(i,r,this._receivedLength),n.byteLength>=this._bufferLimit&&(d.default.v(this.TAG,"MSStream buffer exceeded max size near "+(r+i.byteLength)+", reconnecting..."),this._doReconnectIfNeeded())}},{key:"_doReconnectIfNeeded",value:function(){if(null==this._contentLength||this._receivedLength=this._contentLength&&(n=this._range.from+this._contentLength-1),this._currentRequestRange={from:t,to:n},this._internalOpen(this._dataSource,this._currentRequestRange)}},{key:"_internalOpen",value:function(e,t){this._lastTimeLoaded=0;var n=e.url;this._config.reuseRedirectedURL&&(void 0!=this._currentRedirectedURL?n=this._currentRedirectedURL:void 0!=e.redirectedURL&&(n=e.redirectedURL));var i=this._seekHandler.getConfig(n,t);this._currentRequestURL=i.url;var r=this._xhr=new XMLHttpRequest;if(r.open("GET",i.url,!0),r.responseType="arraybuffer",r.onreadystatechange=this._onReadyStateChange.bind(this),r.onprogress=this._onProgress.bind(this),r.onload=this._onLoad.bind(this),r.onerror=this._onXhrError.bind(this),e.withCredentials&&r.withCredentials&&(r.withCredentials=!0),"object"===o(i.headers)){var s=i.headers;for(var a in s)s.hasOwnProperty(a)&&r.setRequestHeader(a,s[a])}r.send()}},{key:"abort",value:function(){this._requestAbort=!0,this._internalAbort(),this._status=_.LoaderStatus.kComplete}},{key:"_internalAbort",value:function(){this._xhr&&(this._xhr.onreadystatechange=null,this._xhr.onprogress=null,this._xhr.onload=null,this._xhr.onerror=null,this._xhr.abort(),this._xhr=null)}},{key:"_onReadyStateChange",value:function(e){var t=e.target;if(2===t.readyState){if(void 0!=t.responseURL){var n=this._seekHandler.removeURLParameters(t.responseURL);t.responseURL!==this._currentRequestURL&&n!==this._currentRedirectedURL&&(this._currentRedirectedURL=n,this._onURLRedirect&&this._onURLRedirect(n))}if(t.status>=200&&t.status<=299){if(this._waitForTotalLength)return;this._status=_.LoaderStatus.kBuffering}else{if(this._status=_.LoaderStatus.kError,!this._onError)throw new m.RuntimeException("RangeLoader: Http code invalid, "+t.status+" "+t.statusText);this._onError(_.LoaderErrors.HTTP_STATUS_CODE_INVALID,{code:t.status,msg:t.statusText})}}}},{key:"_onProgress",value:function(e){if(this._status!==_.LoaderStatus.kError){if(null===this._contentLength){var t=!1;if(this._waitForTotalLength){this._waitForTotalLength=!1,this._totalLengthReceived=!0,t=!0;var n=e.total;this._internalAbort(),null!=n&0!==n&&(this._totalLength=n)}if(-1===this._range.to?this._contentLength=this._totalLength-this._range.from:this._contentLength=this._range.to-this._range.from+1,t)return void this._openSubRange();this._onContentLengthKnown&&this._onContentLengthKnown(this._contentLength)}var i=e.loaded-this._lastTimeLoaded;this._lastTimeLoaded=e.loaded,this._speedSampler.addBytes(i)}}},{key:"_normalizeSpeed",value:function(e){var t=this._chunkSizeKBList,n=t.length-1,i=0,r=0,s=n;if(e=t[i]&&e=3&&(t=this._speedSampler.currentKBps),0!==t){var n=this._normalizeSpeed(t);this._currentSpeedNormalized!==n&&(this._currentSpeedNormalized=n,this._currentChunkSizeKB=n)}var i=e.target.response,r=this._range.from+this._receivedLength;this._receivedLength+=i.byteLength;var s=!1;null!=this._contentLength&&this._receivedLength0&&this._receivedLength0&&(this._requestSetTime=!0,this._mediaElement.currentTime=0),this._transmuxer=new p.default(this._mediaDataSource,this._config),this._transmuxer.on(g.default.INIT_SEGMENT,function(t,n){e._msectl.appendInitSegment(n)}),this._transmuxer.on(g.default.MEDIA_SEGMENT,function(t,n){if(e._msectl.appendMediaSegment(n),e._config.lazyLoad&&!e._config.isLive){var i=e._mediaElement.currentTime;n.info.endDts>=1e3*(i+e._config.lazyLoadMaxDuration)&&null==e._progressChecker&&(d.default.v(e.TAG,"Maximum buffering duration exceeded, suspend transmuxing task"),e._suspendTransmuxer())}}),this._transmuxer.on(g.default.LOADING_COMPLETE,function(){e._msectl.endOfStream(),e._emitter.emit(_.default.LOADING_COMPLETE)}),this._transmuxer.on(g.default.RECOVERED_EARLY_EOF,function(){e._emitter.emit(_.default.RECOVERED_EARLY_EOF)}),this._transmuxer.on(g.default.IO_ERROR,function(t,n){e._emitter.emit(_.default.ERROR,k.ErrorTypes.NETWORK_ERROR,t,n)}),this._transmuxer.on(g.default.DEMUX_ERROR,function(t,n){e._emitter.emit(_.default.ERROR,k.ErrorTypes.MEDIA_ERROR,t,{code:-1,msg:n})}), +this._transmuxer.on(g.default.MEDIA_INFO,function(t){e._mediaInfo=t,e._emitter.emit(_.default.MEDIA_INFO,Object.assign({},t))}),this._transmuxer.on(g.default.STATISTICS_INFO,function(t){e._statisticsInfo=e._fillStatisticsInfo(t),e._emitter.emit(_.default.STATISTICS_INFO,Object.assign({},e._statisticsInfo))}),this._transmuxer.on(g.default.RECOMMEND_SEEKPOINT,function(t){e._mediaElement&&!e._config.accurateSeek&&(e._requestSetTime=!0,e._mediaElement.currentTime=t/1e3)}),this._transmuxer.open()}}},{key:"unload",value:function(){this._mediaElement&&this._mediaElement.pause(),this._msectl&&this._msectl.seek(0),this._transmuxer&&(this._transmuxer.close(),this._transmuxer.destroy(),this._transmuxer=null)}},{key:"play",value:function(){return this._mediaElement.play()}},{key:"pause",value:function(){this._mediaElement.pause()}},{key:"_fillStatisticsInfo",value:function(e){if(e.playerType=this._type,!(this._mediaElement instanceof HTMLVideoElement))return e;var t=!0,n=0,i=0;if(this._mediaElement.getVideoPlaybackQuality){var r=this._mediaElement.getVideoPlaybackQuality();n=r.totalVideoFrames,i=r.droppedVideoFrames}else void 0!=this._mediaElement.webkitDecodedFrameCount?(n=this._mediaElement.webkitDecodedFrameCount,i=this._mediaElement.webkitDroppedFrameCount):t=!1;return t&&(e.decodedFrames=n,e.droppedFrames=i),e}},{key:"_onmseUpdateEnd",value:function(){if(this._config.lazyLoad&&!this._config.isLive){for(var e=this._mediaElement.buffered,t=this._mediaElement.currentTime,n=0,i=0;i=t+this._config.lazyLoadMaxDuration&&null==this._progressChecker&&(d.default.v(this.TAG,"Maximum buffering duration exceeded, suspend transmuxing task"),this._suspendTransmuxer())}}},{key:"_onmseBufferFull",value:function(){d.default.v(this.TAG,"MSE SourceBuffer is full, suspend transmuxing task"),null==this._progressChecker&&this._suspendTransmuxer()}},{key:"_suspendTransmuxer",value:function(){this._transmuxer&&(this._transmuxer.pause(),null==this._progressChecker&&(this._progressChecker=window.setInterval(this._checkProgressAndResume.bind(this),1e3)))}},{key:"_checkProgressAndResume",value:function(){for(var e=this._mediaElement.currentTime,t=this._mediaElement.buffered,n=!1,i=0;i=r&&e=s-this._config.lazyLoadRecoverDuration&&(n=!0);break}}n&&(window.clearInterval(this._progressChecker),this._progressChecker=null,n&&(d.default.v(this.TAG,"Continue loading from paused position"),this._transmuxer.resume()))}},{key:"_isTimepointBuffered",value:function(e){for(var t=this._mediaElement.buffered,n=0;n=i&&e0){var r=this._mediaElement.buffered.start(0);(r<1&&e0&&t.currentTime0){var i=n.start(0);if(i<1&&t0&&(this._mediaElement.currentTime=0),this._mediaElement.preload="auto",this._mediaElement.load(),this._statisticsReporter=window.setInterval(this._reportStatisticsInfo.bind(this),this._config.statisticsInfoReportInterval)}},{key:"unload",value:function(){this._mediaElement&&(this._mediaElement.src="",this._mediaElement.removeAttribute("src")),null!=this._statisticsReporter&&(window.clearInterval(this._statisticsReporter),this._statisticsReporter=null)}},{key:"play",value:function(){return this._mediaElement.play()}},{key:"pause",value:function(){this._mediaElement.pause()}},{key:"_onvLoadedMetadata",value:function(e){null!=this._pendingSeekTime&&(this._mediaElement.currentTime=this._pendingSeekTime,this._pendingSeekTime=null),this._emitter.emit(d.default.MEDIA_INFO,this.mediaInfo)}},{key:"_reportStatisticsInfo",value:function(){this._emitter.emit(d.default.STATISTICS_INFO,this.statisticsInfo)}},{key:"type",get:function(){return this._type}},{key:"buffered",get:function(){return this._mediaElement.buffered}},{key:"duration",get:function(){return this._mediaElement.duration}},{key:"volume",get:function(){return this._mediaElement.volume},set:function(e){this._mediaElement.volume=e}},{key:"muted",get:function(){return this._mediaElement.muted},set:function(e){this._mediaElement.muted=e}},{key:"currentTime",get:function(){return this._mediaElement?this._mediaElement.currentTime:0},set:function(e){this._mediaElement?this._mediaElement.currentTime=e:this._pendingSeekTime=e}},{key:"mediaInfo",get:function(){var e=this._mediaElement instanceof HTMLAudioElement?"audio/":"video/",t={mimeType:e+this._mediaDataSource.type};return this._mediaElement&&(t.duration=Math.floor(1e3*this._mediaElement.duration),this._mediaElement instanceof HTMLVideoElement&&(t.width=this._mediaElement.videoWidth,t.height=this._mediaElement.videoHeight)),t}},{key:"statisticsInfo",get:function(){var e={playerType:this._type,url:this._mediaDataSource.url};if(!(this._mediaElement instanceof HTMLVideoElement))return e;var t=!0,n=0,i=0;if(this._mediaElement.getVideoPlaybackQuality){var r=this._mediaElement.getVideoPlaybackQuality();n=r.totalVideoFrames,i=r.droppedVideoFrames}else void 0!=this._mediaElement.webkitDecodedFrameCount?(n=this._mediaElement.webkitDecodedFrameCount,i=this._mediaElement.webkitDroppedFrameCount):t=!1;return t&&(e.decodedFrames=n,e.droppedFrames=i),e}}]),e}();n.default=c},{"../config.js":5,"../utils/exception.js":40,"./player-events.js":35,events:2}],34:[function(e,t,n){"use strict";Object.defineProperty(n,"__esModule",{value:!0}),n.ErrorDetails=n.ErrorTypes=void 0;var i=e("../io/loader.js"),r=e("../demux/demux-errors.js"),s=function(e){return e&&e.__esModule?e:{default:e}}(r);n.ErrorTypes={NETWORK_ERROR:"NetworkError",MEDIA_ERROR:"MediaError",OTHER_ERROR:"OtherError"},n.ErrorDetails={NETWORK_EXCEPTION:i.LoaderErrors.EXCEPTION,NETWORK_STATUS_CODE_INVALID:i.LoaderErrors.HTTP_STATUS_CODE_INVALID,NETWORK_TIMEOUT:i.LoaderErrors.CONNECTING_TIMEOUT,NETWORK_UNRECOVERABLE_EARLY_EOF:i.LoaderErrors.UNRECOVERABLE_EARLY_EOF,MEDIA_MSE_ERROR:"MediaMSEError",MEDIA_FORMAT_ERROR:s.default.FORMAT_ERROR,MEDIA_FORMAT_UNSUPPORTED:s.default.FORMAT_UNSUPPORTED,MEDIA_CODEC_UNSUPPORTED:s.default.CODEC_UNSUPPORTED}},{"../demux/demux-errors.js":16,"../io/loader.js":24}],35:[function(e,t,n){"use strict";Object.defineProperty(n,"__esModule",{value:!0});var i={ERROR:"error",LOADING_COMPLETE:"loading_complete",RECOVERED_EARLY_EOF:"recovered_early_eof",MEDIA_INFO:"media_info",STATISTICS_INFO:"statistics_info"};n.default=i},{}],36:[function(e,t,n){"use strict";function i(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(n,"__esModule",{value:!0});var r=function(){function e(e,t){for(var n=0;n>>24&255,n[1]=t>>>16&255,n[2]=t>>>8&255,n[3]=255&t,n.set(e,4);for(var a=8,o=0;o>>24&255,t>>>16&255,t>>>8&255,255&t,n>>>24&255,n>>>16&255,n>>>8&255,255&n,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,64,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255]))}},{key:"trak",value:function(t){return e.box(e.types.trak,e.tkhd(t),e.mdia(t))}},{key:"tkhd",value:function(t){var n=t.id,i=t.duration,r=t.presentWidth,s=t.presentHeight;return e.box(e.types.tkhd,new Uint8Array([0,0,0,7,0,0,0,0,0,0,0,0,n>>>24&255,n>>>16&255,n>>>8&255,255&n,0,0,0,0,i>>>24&255,i>>>16&255,i>>>8&255,255&i,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,64,0,0,0,r>>>8&255,255&r,0,0,s>>>8&255,255&s,0,0]))}},{key:"mdia",value:function(t){return e.box(e.types.mdia,e.mdhd(t),e.hdlr(t),e.minf(t))}},{key:"mdhd",value:function(t){var n=t.timescale,i=t.duration;return e.box(e.types.mdhd,new Uint8Array([0,0,0,0,0,0,0,0,0,0,0,0,n>>>24&255,n>>>16&255,n>>>8&255,255&n,i>>>24&255,i>>>16&255,i>>>8&255,255&i,85,196,0,0]))}},{key:"hdlr",value:function(t){var n=null;return n="audio"===t.type?e.constants.HDLR_AUDIO:e.constants.HDLR_VIDEO,e.box(e.types.hdlr,n)}},{key:"minf",value:function(t){var n=null;return n="audio"===t.type?e.box(e.types.smhd,e.constants.SMHD):e.box(e.types.vmhd,e.constants.VMHD),e.box(e.types.minf,n,e.dinf(),e.stbl(t))}},{key:"dinf",value:function(){return e.box(e.types.dinf,e.box(e.types.dref,e.constants.DREF))}},{key:"stbl",value:function(t){return e.box(e.types.stbl,e.stsd(t),e.box(e.types.stts,e.constants.STTS),e.box(e.types.stsc,e.constants.STSC),e.box(e.types.stsz,e.constants.STSZ),e.box(e.types.stco,e.constants.STCO))}},{key:"stsd",value:function(t){return"audio"===t.type?"mp3"===t.codec?e.box(e.types.stsd,e.constants.STSD_PREFIX,e.mp3(t)):e.box(e.types.stsd,e.constants.STSD_PREFIX,e.mp4a(t)):e.box(e.types.stsd,e.constants.STSD_PREFIX,e.avc1(t))}},{key:"mp3",value:function(t){var n=t.channelCount,i=t.audioSampleRate,r=new Uint8Array([0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,n,0,16,0,0,0,0,i>>>8&255,255&i,0,0]);return e.box(e.types[".mp3"],r)}},{key:"mp4a",value:function(t){var n=t.channelCount,i=t.audioSampleRate,r=new Uint8Array([0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,n,0,16,0,0,0,0,i>>>8&255,255&i,0,0]);return e.box(e.types.mp4a,r,e.esds(t))}},{key:"esds",value:function(t){var n=t.config||[],i=n.length,r=new Uint8Array([0,0,0,0,3,23+i,0,1,0,4,15+i,64,21,0,0,0,0,0,0,0,0,0,0,0,5].concat([i]).concat(n).concat([6,1,2]));return e.box(e.types.esds,r)}},{key:"avc1",value:function(t){var n=t.avcc,i=t.codecWidth,r=t.codecHeight,s=new Uint8Array([0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,i>>>8&255,255&i,r>>>8&255,255&r,0,72,0,0,0,72,0,0,0,0,0,0,0,1,10,120,113,113,47,102,108,118,46,106,115,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,24,255,255]);return e.box(e.types.avc1,s,e.box(e.types.avcC,n))}},{key:"mvex",value:function(t){return e.box(e.types.mvex,e.trex(t))}},{key:"trex",value:function(t){var n=t.id,i=new Uint8Array([0,0,0,0,n>>>24&255,n>>>16&255,n>>>8&255,255&n,0,0,0,1,0,0,0,0,0,0,0,0,0,1,0,1]);return e.box(e.types.trex,i)}},{key:"moof",value:function(t,n){return e.box(e.types.moof,e.mfhd(t.sequenceNumber),e.traf(t,n))}},{key:"mfhd",value:function(t){var n=new Uint8Array([0,0,0,0,t>>>24&255,t>>>16&255,t>>>8&255,255&t]);return e.box(e.types.mfhd,n)}},{key:"traf",value:function(t,n){var i=t.id,r=e.box(e.types.tfhd,new Uint8Array([0,0,0,0,i>>>24&255,i>>>16&255,i>>>8&255,255&i])),s=e.box(e.types.tfdt,new Uint8Array([0,0,0,0,n>>>24&255,n>>>16&255,n>>>8&255,255&n])),a=e.sdtp(t),o=e.trun(t,a.byteLength+16+16+8+16+8+8);return e.box(e.types.traf,r,s,o,a)}},{key:"sdtp",value:function(t){for(var n=t.samples||[],i=n.length,r=new Uint8Array(4+i),s=0;s>>24&255,r>>>16&255,r>>>8&255,255&r,n>>>24&255,n>>>16&255,n>>>8&255,255&n],0);for(var o=0;o>>24&255,u>>>16&255,u>>>8&255,255&u,l>>>24&255,l>>>16&255,l>>>8&255,255&l,d.isLeading<<2|d.dependsOn,d.isDependedOn<<6|d.hasRedundancy<<4|d.isNonSync,0,0,h>>>24&255,h>>>16&255,h>>>8&255,255&h],12+16*o)}return e.box(e.types.trun,a)}},{key:"mdat",value:function(t){return e.box(e.types.mdat,t)}}]),e}();s.init(),n.default=s},{}],38:[function(e,t,n){"use strict";function i(e){return e&&e.__esModule?e:{default:e}}function r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(n,"__esModule",{value:!0});var s=function(){function e(e,t){for(var n=0;n=1?A[A.length-1].duration:Math.floor(a);var D=!1,B=null;if(M>1.5*a&&"mp3"!==this._audioMeta.codec&&this._fillAudioTimestampGap&&!c.default.safari){D=!0;var j=Math.abs(M-a),P=Math.ceil(j/a),U=x+a;o.default.w(this.TAG,"Large audio timestamp gap detected, may cause AV sync to drift. Silent frames will be generated to avoid unsync.\ndts: "+(x+M)+" ms, expected: "+(x+Math.round(a))+" ms, delta: "+Math.round(j)+" ms, generate: "+P+" frames");var N=h.default.getSilentFrame(this._audioMeta.originalCodec,this._audioMeta.channelCount);null==N&&(o.default.w(this.TAG,"Unable to generate silent frame for "+this._audioMeta.originalCodec+" with "+this._audioMeta.channelCount+" channels, repeat last frame"),N=C),B=[];for(var F=0;F0){var V=B[B.length-1];V.duration=G-V.dts}var z={dts:G,pts:G,cts:0,unit:N,size:N.byteLength,duration:0,originalDts:I,flags:{isLeading:0,dependsOn:1,isDependedOn:0,hasRedundancy:0}};B.push(z),v+=C.byteLength,U+=a}var H=B[B.length-1];H.duration=x+M-H.dts,M=Math.round(a)}A.push({dts:x,pts:x,cts:0,unit:T.unit,size:T.unit.byteLength,duration:M,originalDts:I,flags:{isLeading:0,dependsOn:1,isDependedOn:0,hasRedundancy:0}}),D&&A.push.apply(A,B)}u?p=new Uint8Array(v):(p=new Uint8Array(v),p[0]=v>>>24&255,p[1]=v>>>16&255,p[2]=v>>>8&255,p[3]=255&v,p.set(l.default.types.mdat,4));for(var K=0;K>>24&255,h[1]=d>>>16&255,h[2]=d>>>8&255,h[3]=255&d,h.set(l.default.types.mdat,4);var f=n[0].dts-this._dtsBase;if(this._videoNextDts)i=f-this._videoNextDts;else if(this._videoSegmentInfoList.isEmpty())i=0;else{var c=this._videoSegmentInfoList.getLastSampleBefore(f);if(null!=c){var m=f-(c.originalDts+c.duration);m<=3&&(m=0);var p=c.dts+c.duration+m;i=f-p}else i=0}for(var v=new _.MediaSegmentInfo,g=[],y=0;y=1?g[g.length-1].duration:Math.floor(this._videoMeta.refSampleDuration);if(S){var A=new _.SampleInfo(k,w,R,E.dts,!0);A.fileposition=E.fileposition,v.appendSyncPoint(A)}g.push({dts:k,pts:w,cts:L,units:E.units,size:E.length,isKeyframe:S,duration:R,originalDts:b,flags:{isLeading:0,dependsOn:S?2:1,isDependedOn:S?1:0,hasRedundancy:0,isNonSync:S?0:1}})}for(var O=0;O=0&&/(rv)(?::| )([\w.]+)/.exec(e)||e.indexOf("compatible")<0&&/(firefox)[ \/]([\w.]+)/.exec(e)||[],n=/(ipad)/.exec(e)||/(ipod)/.exec(e)||/(windows phone)/.exec(e)||/(iphone)/.exec(e)||/(kindle)/.exec(e)||/(android)/.exec(e)||/(windows)/.exec(e)||/(mac)/.exec(e)||/(linux)/.exec(e)||/(cros)/.exec(e)||[],r={browser:t[5]||t[3]||t[1]||"",version:t[2]||t[4]||"0",majorVersion:t[4]||t[2]||"0",platform:n[0]||""},s={};if(r.browser){s[r.browser]=!0;var a=r.majorVersion.split(".");s.version={major:parseInt(r.majorVersion,10),string:r.version},a.length>1&&(s.version.minor=parseInt(a[1],10)),a.length>2&&(s.version.build=parseInt(a[2],10))}r.platform&&(s[r.platform]=!0), +(s.chrome||s.opr||s.safari)&&(s.webkit=!0),(s.rv||s.iemobile)&&(s.rv&&delete s.rv,r.browser="msie",s.msie=!0),s.edge&&(delete s.edge,r.browser="msedge",s.msedge=!0),s.opr&&(r.browser="opera",s.opera=!0),s.safari&&s.android&&(r.browser="android",s.android=!0),s.name=r.browser,s.platform=r.platform;for(var o in i)i.hasOwnProperty(o)&&delete i[o];Object.assign(i,s)}(),n.default=i},{}],40:[function(e,t,n){"use strict";function i(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t}function r(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}function s(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(n,"__esModule",{value:!0});var a=function(){function e(e,t){for(var n=0;n "+n;e.ENABLE_CALLBACK&&e.emitter.emit("log","error",i),e.ENABLE_ERROR&&(console.error?console.error(i):console.warn?console.warn(i):console.log(i))}},{key:"i",value:function(t,n){t&&!e.FORCE_GLOBAL_TAG||(t=e.GLOBAL_TAG);var i="["+t+"] > "+n;e.ENABLE_CALLBACK&&e.emitter.emit("log","info",i),e.ENABLE_INFO&&(console.info?console.info(i):console.log(i))}},{key:"w",value:function(t,n){t&&!e.FORCE_GLOBAL_TAG||(t=e.GLOBAL_TAG);var i="["+t+"] > "+n;e.ENABLE_CALLBACK&&e.emitter.emit("log","warn",i),e.ENABLE_WARN&&(console.warn?console.warn(i):console.log(i))}},{key:"d",value:function(t,n){t&&!e.FORCE_GLOBAL_TAG||(t=e.GLOBAL_TAG);var i="["+t+"] > "+n;e.ENABLE_CALLBACK&&e.emitter.emit("log","debug",i),e.ENABLE_DEBUG&&(console.debug?console.debug(i):console.log(i))}},{key:"v",value:function(t,n){t&&!e.FORCE_GLOBAL_TAG||(t=e.GLOBAL_TAG);var i="["+t+"] > "+n;e.ENABLE_CALLBACK&&e.emitter.emit("log","verbose",i),e.ENABLE_VERBOSE&&console.log(i)}}]),e}();o.GLOBAL_TAG="flv.js",o.FORCE_GLOBAL_TAG=!1,o.ENABLE_ERROR=!0,o.ENABLE_INFO=!0,o.ENABLE_WARN=!0,o.ENABLE_DEBUG=!0,o.ENABLE_VERBOSE=!0,o.ENABLE_CALLBACK=!1,o.emitter=new a.default,n.default=o},{events:2}],42:[function(e,t,n){"use strict";function i(e){return e&&e.__esModule?e:{default:e}}function r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(n,"__esModule",{value:!0});var s=function(){function e(e,t){for(var n=0;n0){var n=e.getConfig();t.emit("change",n)}}},{key:"registerListener",value:function(t){e.emitter.addListener("change",t)}},{key:"removeListener",value:function(t){e.emitter.removeListener("change",t)}},{key:"addLogListener",value:function(t){l.default.emitter.addListener("log",t),l.default.emitter.listenerCount("log")>0&&(l.default.ENABLE_CALLBACK=!0,e._notifyChange())}},{key:"removeLogListener",value:function(t){l.default.emitter.removeListener("log",t),0===l.default.emitter.listenerCount("log")&&(l.default.ENABLE_CALLBACK=!1,e._notifyChange())}},{key:"forceGlobalTag",get:function(){return l.default.FORCE_GLOBAL_TAG},set:function(t){l.default.FORCE_GLOBAL_TAG=t,e._notifyChange()}},{key:"globalTag",get:function(){return l.default.GLOBAL_TAG},set:function(t){l.default.GLOBAL_TAG=t,e._notifyChange()}},{key:"enableAll",get:function(){return l.default.ENABLE_VERBOSE&&l.default.ENABLE_DEBUG&&l.default.ENABLE_INFO&&l.default.ENABLE_WARN&&l.default.ENABLE_ERROR},set:function(t){l.default.ENABLE_VERBOSE=t,l.default.ENABLE_DEBUG=t,l.default.ENABLE_INFO=t,l.default.ENABLE_WARN=t,l.default.ENABLE_ERROR=t,e._notifyChange()}},{key:"enableDebug",get:function(){return l.default.ENABLE_DEBUG},set:function(t){l.default.ENABLE_DEBUG=t,e._notifyChange()}},{key:"enableVerbose",get:function(){return l.default.ENABLE_VERBOSE},set:function(t){l.default.ENABLE_VERBOSE=t,e._notifyChange()}},{key:"enableInfo",get:function(){return l.default.ENABLE_INFO},set:function(t){l.default.ENABLE_INFO=t,e._notifyChange()}},{key:"enableWarn",get:function(){return l.default.ENABLE_WARN},set:function(t){l.default.ENABLE_WARN=t,e._notifyChange()}},{key:"enableError",get:function(){return l.default.ENABLE_ERROR},set:function(t){l.default.ENABLE_ERROR=t,e._notifyChange()}}]),e}();d.emitter=new o.default,n.default=d},{"./logger.js":41,events:2}],43:[function(e,t,n){"use strict";function i(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(n,"__esModule",{value:!0});var r=function(){function e(e,t){for(var n=0;n=128){t.push(String.fromCharCode(65535&a)),r+=2;continue}}}else if(n[r]<240){if(i(n,r,2)){var o=(15&n[r])<<12|(63&n[r+1])<<6|63&n[r+2];if(o>=2048&&55296!=(63488&o)){t.push(String.fromCharCode(65535&o)),r+=3;continue}}}else if(n[r]<248&&i(n,r,3)){var u=(7&n[r])<<18|(63&n[r+1])<<12|(63&n[r+2])<<6|63&n[r+3];if(u>65536&&u<1114112){u-=65536,t.push(String.fromCharCode(u>>>10|55296)),t.push(String.fromCharCode(1023&u|56320)),r+=4;continue}}t.push(String.fromCharCode(65533)),++r}return t.join("")}Object.defineProperty(n,"__esModule",{value:!0}),n.default=r},{}]},{},[21])(21)}); +//# sourceMappingURL=flv.min.js.map diff --git a/xz_mini/webview/flv/js/jquery-2.1.4.min.js b/xz_mini/webview/flv/js/jquery-2.1.4.min.js new file mode 100644 index 0000000..b31a789 --- /dev/null +++ b/xz_mini/webview/flv/js/jquery-2.1.4.min.js @@ -0,0 +1,3 @@ +!function(a,b){"object"==typeof module&&"object"==typeof module.exports?module.exports=a.document?b(a,!0):function(a){if(!a.document)throw new Error("jQuery requires a window with a document");return b(a)}:b(a)}("undefined"!=typeof window?window:this,function(a,b){var c=[],d=c.slice,e=c.concat,f=c.push,g=c.indexOf,h={},i=h.toString,j=h.hasOwnProperty,k={},l=a.document,m="2.1.4",n=function(a,b){return new n.fn.init(a,b)},o=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,p=/^-ms-/,q=/-([\da-z])/gi,r=function(a,b){return b.toUpperCase()};n.fn=n.prototype={jquery:m,constructor:n,selector:"",length:0,toArray:function(){return d.call(this)},get:function(a){return null!=a?0>a?this[a+this.length]:this[a]:d.call(this)},pushStack:function(a){var b=n.merge(this.constructor(),a);return b.prevObject=this,b.context=this.context,b},each:function(a,b){return n.each(this,a,b)},map:function(a){return this.pushStack(n.map(this,function(b,c){return a.call(b,c,b)}))},slice:function(){return this.pushStack(d.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(a){var b=this.length,c=+a+(0>a?b:0);return this.pushStack(c>=0&&b>c?[this[c]]:[])},end:function(){return this.prevObject||this.constructor(null)},push:f,sort:c.sort,splice:c.splice},n.extend=n.fn.extend=function(){var a,b,c,d,e,f,g=arguments[0]||{},h=1,i=arguments.length,j=!1;for("boolean"==typeof g&&(j=g,g=arguments[h]||{},h++),"object"==typeof g||n.isFunction(g)||(g={}),h===i&&(g=this,h--);i>h;h++)if(null!=(a=arguments[h]))for(b in a)c=g[b],d=a[b],g!==d&&(j&&d&&(n.isPlainObject(d)||(e=n.isArray(d)))?(e?(e=!1,f=c&&n.isArray(c)?c:[]):f=c&&n.isPlainObject(c)?c:{},g[b]=n.extend(j,f,d)):void 0!==d&&(g[b]=d));return g},n.extend({expando:"jQuery"+(m+Math.random()).replace(/\D/g,""),isReady:!0,error:function(a){throw new Error(a)},noop:function(){},isFunction:function(a){return"function"===n.type(a)},isArray:Array.isArray,isWindow:function(a){return null!=a&&a===a.window},isNumeric:function(a){return!n.isArray(a)&&a-parseFloat(a)+1>=0},isPlainObject:function(a){return"object"!==n.type(a)||a.nodeType||n.isWindow(a)?!1:a.constructor&&!j.call(a.constructor.prototype,"isPrototypeOf")?!1:!0},isEmptyObject:function(a){var b;for(b in a)return!1;return!0},type:function(a){return null==a?a+"":"object"==typeof a||"function"==typeof a?h[i.call(a)]||"object":typeof a},globalEval:function(a){var b,c=eval;a=n.trim(a),a&&(1===a.indexOf("use strict")?(b=l.createElement("script"),b.text=a,l.head.appendChild(b).parentNode.removeChild(b)):c(a))},camelCase:function(a){return a.replace(p,"ms-").replace(q,r)},nodeName:function(a,b){return a.nodeName&&a.nodeName.toLowerCase()===b.toLowerCase()},each:function(a,b,c){var d,e=0,f=a.length,g=s(a);if(c){if(g){for(;f>e;e++)if(d=b.apply(a[e],c),d===!1)break}else for(e in a)if(d=b.apply(a[e],c),d===!1)break}else if(g){for(;f>e;e++)if(d=b.call(a[e],e,a[e]),d===!1)break}else for(e in a)if(d=b.call(a[e],e,a[e]),d===!1)break;return a},trim:function(a){return null==a?"":(a+"").replace(o,"")},makeArray:function(a,b){var c=b||[];return null!=a&&(s(Object(a))?n.merge(c,"string"==typeof a?[a]:a):f.call(c,a)),c},inArray:function(a,b,c){return null==b?-1:g.call(b,a,c)},merge:function(a,b){for(var c=+b.length,d=0,e=a.length;c>d;d++)a[e++]=b[d];return a.length=e,a},grep:function(a,b,c){for(var d,e=[],f=0,g=a.length,h=!c;g>f;f++)d=!b(a[f],f),d!==h&&e.push(a[f]);return e},map:function(a,b,c){var d,f=0,g=a.length,h=s(a),i=[];if(h)for(;g>f;f++)d=b(a[f],f,c),null!=d&&i.push(d);else for(f in a)d=b(a[f],f,c),null!=d&&i.push(d);return e.apply([],i)},guid:1,proxy:function(a,b){var c,e,f;return"string"==typeof b&&(c=a[b],b=a,a=c),n.isFunction(a)?(e=d.call(arguments,2),f=function(){return a.apply(b||this,e.concat(d.call(arguments)))},f.guid=a.guid=a.guid||n.guid++,f):void 0},now:Date.now,support:k}),n.each("Boolean Number String Function Array Date RegExp Object Error".split(" "),function(a,b){h["[object "+b+"]"]=b.toLowerCase()});function s(a){var b="length"in a&&a.length,c=n.type(a);return"function"===c||n.isWindow(a)?!1:1===a.nodeType&&b?!0:"array"===c||0===b||"number"==typeof b&&b>0&&b-1 in a}var t=function(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u="sizzle"+1*new Date,v=a.document,w=0,x=0,y=ha(),z=ha(),A=ha(),B=function(a,b){return a===b&&(l=!0),0},C=1<<31,D={}.hasOwnProperty,E=[],F=E.pop,G=E.push,H=E.push,I=E.slice,J=function(a,b){for(var c=0,d=a.length;d>c;c++)if(a[c]===b)return c;return-1},K="checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",L="[\\x20\\t\\r\\n\\f]",M="(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+",N=M.replace("w","w#"),O="\\["+L+"*("+M+")(?:"+L+"*([*^$|!~]?=)"+L+"*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|("+N+"))|)"+L+"*\\]",P=":("+M+")(?:\\((('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|((?:\\\\.|[^\\\\()[\\]]|"+O+")*)|.*)\\)|)",Q=new RegExp(L+"+","g"),R=new RegExp("^"+L+"+|((?:^|[^\\\\])(?:\\\\.)*)"+L+"+$","g"),S=new RegExp("^"+L+"*,"+L+"*"),T=new RegExp("^"+L+"*([>+~]|"+L+")"+L+"*"),U=new RegExp("="+L+"*([^\\]'\"]*?)"+L+"*\\]","g"),V=new RegExp(P),W=new RegExp("^"+N+"$"),X={ID:new RegExp("^#("+M+")"),CLASS:new RegExp("^\\.("+M+")"),TAG:new RegExp("^("+M.replace("w","w*")+")"),ATTR:new RegExp("^"+O),PSEUDO:new RegExp("^"+P),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+L+"*(even|odd|(([+-]|)(\\d*)n|)"+L+"*(?:([+-]|)"+L+"*(\\d+)|))"+L+"*\\)|)","i"),bool:new RegExp("^(?:"+K+")$","i"),needsContext:new RegExp("^"+L+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+L+"*((?:-\\d)?\\d*)"+L+"*\\)|)(?=[^-]|$)","i")},Y=/^(?:input|select|textarea|button)$/i,Z=/^h\d$/i,$=/^[^{]+\{\s*\[native \w/,_=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,aa=/[+~]/,ba=/'|\\/g,ca=new RegExp("\\\\([\\da-f]{1,6}"+L+"?|("+L+")|.)","ig"),da=function(a,b,c){var d="0x"+b-65536;return d!==d||c?b:0>d?String.fromCharCode(d+65536):String.fromCharCode(d>>10|55296,1023&d|56320)},ea=function(){m()};try{H.apply(E=I.call(v.childNodes),v.childNodes),E[v.childNodes.length].nodeType}catch(fa){H={apply:E.length?function(a,b){G.apply(a,I.call(b))}:function(a,b){var c=a.length,d=0;while(a[c++]=b[d++]);a.length=c-1}}}function ga(a,b,d,e){var f,h,j,k,l,o,r,s,w,x;if((b?b.ownerDocument||b:v)!==n&&m(b),b=b||n,d=d||[],k=b.nodeType,"string"!=typeof a||!a||1!==k&&9!==k&&11!==k)return d;if(!e&&p){if(11!==k&&(f=_.exec(a)))if(j=f[1]){if(9===k){if(h=b.getElementById(j),!h||!h.parentNode)return d;if(h.id===j)return d.push(h),d}else if(b.ownerDocument&&(h=b.ownerDocument.getElementById(j))&&t(b,h)&&h.id===j)return d.push(h),d}else{if(f[2])return H.apply(d,b.getElementsByTagName(a)),d;if((j=f[3])&&c.getElementsByClassName)return H.apply(d,b.getElementsByClassName(j)),d}if(c.qsa&&(!q||!q.test(a))){if(s=r=u,w=b,x=1!==k&&a,1===k&&"object"!==b.nodeName.toLowerCase()){o=g(a),(r=b.getAttribute("id"))?s=r.replace(ba,"\\$&"):b.setAttribute("id",s),s="[id='"+s+"'] ",l=o.length;while(l--)o[l]=s+ra(o[l]);w=aa.test(a)&&pa(b.parentNode)||b,x=o.join(",")}if(x)try{return H.apply(d,w.querySelectorAll(x)),d}catch(y){}finally{r||b.removeAttribute("id")}}}return i(a.replace(R,"$1"),b,d,e)}function ha(){var a=[];function b(c,e){return a.push(c+" ")>d.cacheLength&&delete b[a.shift()],b[c+" "]=e}return b}function ia(a){return a[u]=!0,a}function ja(a){var b=n.createElement("div");try{return!!a(b)}catch(c){return!1}finally{b.parentNode&&b.parentNode.removeChild(b),b=null}}function ka(a,b){var c=a.split("|"),e=a.length;while(e--)d.attrHandle[c[e]]=b}function la(a,b){var c=b&&a,d=c&&1===a.nodeType&&1===b.nodeType&&(~b.sourceIndex||C)-(~a.sourceIndex||C);if(d)return d;if(c)while(c=c.nextSibling)if(c===b)return-1;return a?1:-1}function ma(a){return function(b){var c=b.nodeName.toLowerCase();return"input"===c&&b.type===a}}function na(a){return function(b){var c=b.nodeName.toLowerCase();return("input"===c||"button"===c)&&b.type===a}}function oa(a){return ia(function(b){return b=+b,ia(function(c,d){var e,f=a([],c.length,b),g=f.length;while(g--)c[e=f[g]]&&(c[e]=!(d[e]=c[e]))})})}function pa(a){return a&&"undefined"!=typeof a.getElementsByTagName&&a}c=ga.support={},f=ga.isXML=function(a){var b=a&&(a.ownerDocument||a).documentElement;return b?"HTML"!==b.nodeName:!1},m=ga.setDocument=function(a){var b,e,g=a?a.ownerDocument||a:v;return g!==n&&9===g.nodeType&&g.documentElement?(n=g,o=g.documentElement,e=g.defaultView,e&&e!==e.top&&(e.addEventListener?e.addEventListener("unload",ea,!1):e.attachEvent&&e.attachEvent("onunload",ea)),p=!f(g),c.attributes=ja(function(a){return a.className="i",!a.getAttribute("className")}),c.getElementsByTagName=ja(function(a){return a.appendChild(g.createComment("")),!a.getElementsByTagName("*").length}),c.getElementsByClassName=$.test(g.getElementsByClassName),c.getById=ja(function(a){return o.appendChild(a).id=u,!g.getElementsByName||!g.getElementsByName(u).length}),c.getById?(d.find.ID=function(a,b){if("undefined"!=typeof b.getElementById&&p){var c=b.getElementById(a);return c&&c.parentNode?[c]:[]}},d.filter.ID=function(a){var b=a.replace(ca,da);return function(a){return a.getAttribute("id")===b}}):(delete d.find.ID,d.filter.ID=function(a){var b=a.replace(ca,da);return function(a){var c="undefined"!=typeof a.getAttributeNode&&a.getAttributeNode("id");return c&&c.value===b}}),d.find.TAG=c.getElementsByTagName?function(a,b){return"undefined"!=typeof b.getElementsByTagName?b.getElementsByTagName(a):c.qsa?b.querySelectorAll(a):void 0}:function(a,b){var c,d=[],e=0,f=b.getElementsByTagName(a);if("*"===a){while(c=f[e++])1===c.nodeType&&d.push(c);return d}return f},d.find.CLASS=c.getElementsByClassName&&function(a,b){return p?b.getElementsByClassName(a):void 0},r=[],q=[],(c.qsa=$.test(g.querySelectorAll))&&(ja(function(a){o.appendChild(a).innerHTML="
",a.querySelectorAll("[msallowcapture^='']").length&&q.push("[*^$]="+L+"*(?:''|\"\")"),a.querySelectorAll("[selected]").length||q.push("\\["+L+"*(?:value|"+K+")"),a.querySelectorAll("[id~="+u+"-]").length||q.push("~="),a.querySelectorAll(":checked").length||q.push(":checked"),a.querySelectorAll("a#"+u+"+*").length||q.push(".#.+[+~]")}),ja(function(a){var b=g.createElement("input");b.setAttribute("type","hidden"),a.appendChild(b).setAttribute("name","D"),a.querySelectorAll("[name=d]").length&&q.push("name"+L+"*[*^$|!~]?="),a.querySelectorAll(":enabled").length||q.push(":enabled",":disabled"),a.querySelectorAll("*,:x"),q.push(",.*:")})),(c.matchesSelector=$.test(s=o.matches||o.webkitMatchesSelector||o.mozMatchesSelector||o.oMatchesSelector||o.msMatchesSelector))&&ja(function(a){c.disconnectedMatch=s.call(a,"div"),s.call(a,"[s!='']:x"),r.push("!=",P)}),q=q.length&&new RegExp(q.join("|")),r=r.length&&new RegExp(r.join("|")),b=$.test(o.compareDocumentPosition),t=b||$.test(o.contains)?function(a,b){var c=9===a.nodeType?a.documentElement:a,d=b&&b.parentNode;return a===d||!(!d||1!==d.nodeType||!(c.contains?c.contains(d):a.compareDocumentPosition&&16&a.compareDocumentPosition(d)))}:function(a,b){if(b)while(b=b.parentNode)if(b===a)return!0;return!1},B=b?function(a,b){if(a===b)return l=!0,0;var d=!a.compareDocumentPosition-!b.compareDocumentPosition;return d?d:(d=(a.ownerDocument||a)===(b.ownerDocument||b)?a.compareDocumentPosition(b):1,1&d||!c.sortDetached&&b.compareDocumentPosition(a)===d?a===g||a.ownerDocument===v&&t(v,a)?-1:b===g||b.ownerDocument===v&&t(v,b)?1:k?J(k,a)-J(k,b):0:4&d?-1:1)}:function(a,b){if(a===b)return l=!0,0;var c,d=0,e=a.parentNode,f=b.parentNode,h=[a],i=[b];if(!e||!f)return a===g?-1:b===g?1:e?-1:f?1:k?J(k,a)-J(k,b):0;if(e===f)return la(a,b);c=a;while(c=c.parentNode)h.unshift(c);c=b;while(c=c.parentNode)i.unshift(c);while(h[d]===i[d])d++;return d?la(h[d],i[d]):h[d]===v?-1:i[d]===v?1:0},g):n},ga.matches=function(a,b){return ga(a,null,null,b)},ga.matchesSelector=function(a,b){if((a.ownerDocument||a)!==n&&m(a),b=b.replace(U,"='$1']"),!(!c.matchesSelector||!p||r&&r.test(b)||q&&q.test(b)))try{var d=s.call(a,b);if(d||c.disconnectedMatch||a.document&&11!==a.document.nodeType)return d}catch(e){}return ga(b,n,null,[a]).length>0},ga.contains=function(a,b){return(a.ownerDocument||a)!==n&&m(a),t(a,b)},ga.attr=function(a,b){(a.ownerDocument||a)!==n&&m(a);var e=d.attrHandle[b.toLowerCase()],f=e&&D.call(d.attrHandle,b.toLowerCase())?e(a,b,!p):void 0;return void 0!==f?f:c.attributes||!p?a.getAttribute(b):(f=a.getAttributeNode(b))&&f.specified?f.value:null},ga.error=function(a){throw new Error("Syntax error, unrecognized expression: "+a)},ga.uniqueSort=function(a){var b,d=[],e=0,f=0;if(l=!c.detectDuplicates,k=!c.sortStable&&a.slice(0),a.sort(B),l){while(b=a[f++])b===a[f]&&(e=d.push(f));while(e--)a.splice(d[e],1)}return k=null,a},e=ga.getText=function(a){var b,c="",d=0,f=a.nodeType;if(f){if(1===f||9===f||11===f){if("string"==typeof a.textContent)return a.textContent;for(a=a.firstChild;a;a=a.nextSibling)c+=e(a)}else if(3===f||4===f)return a.nodeValue}else while(b=a[d++])c+=e(b);return c},d=ga.selectors={cacheLength:50,createPseudo:ia,match:X,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(a){return a[1]=a[1].replace(ca,da),a[3]=(a[3]||a[4]||a[5]||"").replace(ca,da),"~="===a[2]&&(a[3]=" "+a[3]+" "),a.slice(0,4)},CHILD:function(a){return a[1]=a[1].toLowerCase(),"nth"===a[1].slice(0,3)?(a[3]||ga.error(a[0]),a[4]=+(a[4]?a[5]+(a[6]||1):2*("even"===a[3]||"odd"===a[3])),a[5]=+(a[7]+a[8]||"odd"===a[3])):a[3]&&ga.error(a[0]),a},PSEUDO:function(a){var b,c=!a[6]&&a[2];return X.CHILD.test(a[0])?null:(a[3]?a[2]=a[4]||a[5]||"":c&&V.test(c)&&(b=g(c,!0))&&(b=c.indexOf(")",c.length-b)-c.length)&&(a[0]=a[0].slice(0,b),a[2]=c.slice(0,b)),a.slice(0,3))}},filter:{TAG:function(a){var b=a.replace(ca,da).toLowerCase();return"*"===a?function(){return!0}:function(a){return a.nodeName&&a.nodeName.toLowerCase()===b}},CLASS:function(a){var b=y[a+" "];return b||(b=new RegExp("(^|"+L+")"+a+"("+L+"|$)"))&&y(a,function(a){return b.test("string"==typeof a.className&&a.className||"undefined"!=typeof a.getAttribute&&a.getAttribute("class")||"")})},ATTR:function(a,b,c){return function(d){var e=ga.attr(d,a);return null==e?"!="===b:b?(e+="","="===b?e===c:"!="===b?e!==c:"^="===b?c&&0===e.indexOf(c):"*="===b?c&&e.indexOf(c)>-1:"$="===b?c&&e.slice(-c.length)===c:"~="===b?(" "+e.replace(Q," ")+" ").indexOf(c)>-1:"|="===b?e===c||e.slice(0,c.length+1)===c+"-":!1):!0}},CHILD:function(a,b,c,d,e){var f="nth"!==a.slice(0,3),g="last"!==a.slice(-4),h="of-type"===b;return 1===d&&0===e?function(a){return!!a.parentNode}:function(b,c,i){var j,k,l,m,n,o,p=f!==g?"nextSibling":"previousSibling",q=b.parentNode,r=h&&b.nodeName.toLowerCase(),s=!i&&!h;if(q){if(f){while(p){l=b;while(l=l[p])if(h?l.nodeName.toLowerCase()===r:1===l.nodeType)return!1;o=p="only"===a&&!o&&"nextSibling"}return!0}if(o=[g?q.firstChild:q.lastChild],g&&s){k=q[u]||(q[u]={}),j=k[a]||[],n=j[0]===w&&j[1],m=j[0]===w&&j[2],l=n&&q.childNodes[n];while(l=++n&&l&&l[p]||(m=n=0)||o.pop())if(1===l.nodeType&&++m&&l===b){k[a]=[w,n,m];break}}else if(s&&(j=(b[u]||(b[u]={}))[a])&&j[0]===w)m=j[1];else while(l=++n&&l&&l[p]||(m=n=0)||o.pop())if((h?l.nodeName.toLowerCase()===r:1===l.nodeType)&&++m&&(s&&((l[u]||(l[u]={}))[a]=[w,m]),l===b))break;return m-=e,m===d||m%d===0&&m/d>=0}}},PSEUDO:function(a,b){var c,e=d.pseudos[a]||d.setFilters[a.toLowerCase()]||ga.error("unsupported pseudo: "+a);return e[u]?e(b):e.length>1?(c=[a,a,"",b],d.setFilters.hasOwnProperty(a.toLowerCase())?ia(function(a,c){var d,f=e(a,b),g=f.length;while(g--)d=J(a,f[g]),a[d]=!(c[d]=f[g])}):function(a){return e(a,0,c)}):e}},pseudos:{not:ia(function(a){var b=[],c=[],d=h(a.replace(R,"$1"));return d[u]?ia(function(a,b,c,e){var f,g=d(a,null,e,[]),h=a.length;while(h--)(f=g[h])&&(a[h]=!(b[h]=f))}):function(a,e,f){return b[0]=a,d(b,null,f,c),b[0]=null,!c.pop()}}),has:ia(function(a){return function(b){return ga(a,b).length>0}}),contains:ia(function(a){return a=a.replace(ca,da),function(b){return(b.textContent||b.innerText||e(b)).indexOf(a)>-1}}),lang:ia(function(a){return W.test(a||"")||ga.error("unsupported lang: "+a),a=a.replace(ca,da).toLowerCase(),function(b){var c;do if(c=p?b.lang:b.getAttribute("xml:lang")||b.getAttribute("lang"))return c=c.toLowerCase(),c===a||0===c.indexOf(a+"-");while((b=b.parentNode)&&1===b.nodeType);return!1}}),target:function(b){var c=a.location&&a.location.hash;return c&&c.slice(1)===b.id},root:function(a){return a===o},focus:function(a){return a===n.activeElement&&(!n.hasFocus||n.hasFocus())&&!!(a.type||a.href||~a.tabIndex)},enabled:function(a){return a.disabled===!1},disabled:function(a){return a.disabled===!0},checked:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&!!a.checked||"option"===b&&!!a.selected},selected:function(a){return a.parentNode&&a.parentNode.selectedIndex,a.selected===!0},empty:function(a){for(a=a.firstChild;a;a=a.nextSibling)if(a.nodeType<6)return!1;return!0},parent:function(a){return!d.pseudos.empty(a)},header:function(a){return Z.test(a.nodeName)},input:function(a){return Y.test(a.nodeName)},button:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&"button"===a.type||"button"===b},text:function(a){var b;return"input"===a.nodeName.toLowerCase()&&"text"===a.type&&(null==(b=a.getAttribute("type"))||"text"===b.toLowerCase())},first:oa(function(){return[0]}),last:oa(function(a,b){return[b-1]}),eq:oa(function(a,b,c){return[0>c?c+b:c]}),even:oa(function(a,b){for(var c=0;b>c;c+=2)a.push(c);return a}),odd:oa(function(a,b){for(var c=1;b>c;c+=2)a.push(c);return a}),lt:oa(function(a,b,c){for(var d=0>c?c+b:c;--d>=0;)a.push(d);return a}),gt:oa(function(a,b,c){for(var d=0>c?c+b:c;++db;b++)d+=a[b].value;return d}function sa(a,b,c){var d=b.dir,e=c&&"parentNode"===d,f=x++;return b.first?function(b,c,f){while(b=b[d])if(1===b.nodeType||e)return a(b,c,f)}:function(b,c,g){var h,i,j=[w,f];if(g){while(b=b[d])if((1===b.nodeType||e)&&a(b,c,g))return!0}else while(b=b[d])if(1===b.nodeType||e){if(i=b[u]||(b[u]={}),(h=i[d])&&h[0]===w&&h[1]===f)return j[2]=h[2];if(i[d]=j,j[2]=a(b,c,g))return!0}}}function ta(a){return a.length>1?function(b,c,d){var e=a.length;while(e--)if(!a[e](b,c,d))return!1;return!0}:a[0]}function ua(a,b,c){for(var d=0,e=b.length;e>d;d++)ga(a,b[d],c);return c}function va(a,b,c,d,e){for(var f,g=[],h=0,i=a.length,j=null!=b;i>h;h++)(f=a[h])&&(!c||c(f,d,e))&&(g.push(f),j&&b.push(h));return g}function wa(a,b,c,d,e,f){return d&&!d[u]&&(d=wa(d)),e&&!e[u]&&(e=wa(e,f)),ia(function(f,g,h,i){var j,k,l,m=[],n=[],o=g.length,p=f||ua(b||"*",h.nodeType?[h]:h,[]),q=!a||!f&&b?p:va(p,m,a,h,i),r=c?e||(f?a:o||d)?[]:g:q;if(c&&c(q,r,h,i),d){j=va(r,n),d(j,[],h,i),k=j.length;while(k--)(l=j[k])&&(r[n[k]]=!(q[n[k]]=l))}if(f){if(e||a){if(e){j=[],k=r.length;while(k--)(l=r[k])&&j.push(q[k]=l);e(null,r=[],j,i)}k=r.length;while(k--)(l=r[k])&&(j=e?J(f,l):m[k])>-1&&(f[j]=!(g[j]=l))}}else r=va(r===g?r.splice(o,r.length):r),e?e(null,g,r,i):H.apply(g,r)})}function xa(a){for(var b,c,e,f=a.length,g=d.relative[a[0].type],h=g||d.relative[" "],i=g?1:0,k=sa(function(a){return a===b},h,!0),l=sa(function(a){return J(b,a)>-1},h,!0),m=[function(a,c,d){var e=!g&&(d||c!==j)||((b=c).nodeType?k(a,c,d):l(a,c,d));return b=null,e}];f>i;i++)if(c=d.relative[a[i].type])m=[sa(ta(m),c)];else{if(c=d.filter[a[i].type].apply(null,a[i].matches),c[u]){for(e=++i;f>e;e++)if(d.relative[a[e].type])break;return wa(i>1&&ta(m),i>1&&ra(a.slice(0,i-1).concat({value:" "===a[i-2].type?"*":""})).replace(R,"$1"),c,e>i&&xa(a.slice(i,e)),f>e&&xa(a=a.slice(e)),f>e&&ra(a))}m.push(c)}return ta(m)}function ya(a,b){var c=b.length>0,e=a.length>0,f=function(f,g,h,i,k){var l,m,o,p=0,q="0",r=f&&[],s=[],t=j,u=f||e&&d.find.TAG("*",k),v=w+=null==t?1:Math.random()||.1,x=u.length;for(k&&(j=g!==n&&g);q!==x&&null!=(l=u[q]);q++){if(e&&l){m=0;while(o=a[m++])if(o(l,g,h)){i.push(l);break}k&&(w=v)}c&&((l=!o&&l)&&p--,f&&r.push(l))}if(p+=q,c&&q!==p){m=0;while(o=b[m++])o(r,s,g,h);if(f){if(p>0)while(q--)r[q]||s[q]||(s[q]=F.call(i));s=va(s)}H.apply(i,s),k&&!f&&s.length>0&&p+b.length>1&&ga.uniqueSort(i)}return k&&(w=v,j=t),r};return c?ia(f):f}return h=ga.compile=function(a,b){var c,d=[],e=[],f=A[a+" "];if(!f){b||(b=g(a)),c=b.length;while(c--)f=xa(b[c]),f[u]?d.push(f):e.push(f);f=A(a,ya(e,d)),f.selector=a}return f},i=ga.select=function(a,b,e,f){var i,j,k,l,m,n="function"==typeof a&&a,o=!f&&g(a=n.selector||a);if(e=e||[],1===o.length){if(j=o[0]=o[0].slice(0),j.length>2&&"ID"===(k=j[0]).type&&c.getById&&9===b.nodeType&&p&&d.relative[j[1].type]){if(b=(d.find.ID(k.matches[0].replace(ca,da),b)||[])[0],!b)return e;n&&(b=b.parentNode),a=a.slice(j.shift().value.length)}i=X.needsContext.test(a)?0:j.length;while(i--){if(k=j[i],d.relative[l=k.type])break;if((m=d.find[l])&&(f=m(k.matches[0].replace(ca,da),aa.test(j[0].type)&&pa(b.parentNode)||b))){if(j.splice(i,1),a=f.length&&ra(j),!a)return H.apply(e,f),e;break}}}return(n||h(a,o))(f,b,!p,e,aa.test(a)&&pa(b.parentNode)||b),e},c.sortStable=u.split("").sort(B).join("")===u,c.detectDuplicates=!!l,m(),c.sortDetached=ja(function(a){return 1&a.compareDocumentPosition(n.createElement("div"))}),ja(function(a){return a.innerHTML="","#"===a.firstChild.getAttribute("href")})||ka("type|href|height|width",function(a,b,c){return c?void 0:a.getAttribute(b,"type"===b.toLowerCase()?1:2)}),c.attributes&&ja(function(a){return a.innerHTML="",a.firstChild.setAttribute("value",""),""===a.firstChild.getAttribute("value")})||ka("value",function(a,b,c){return c||"input"!==a.nodeName.toLowerCase()?void 0:a.defaultValue}),ja(function(a){return null==a.getAttribute("disabled")})||ka(K,function(a,b,c){var d;return c?void 0:a[b]===!0?b.toLowerCase():(d=a.getAttributeNode(b))&&d.specified?d.value:null}),ga}(a);n.find=t,n.expr=t.selectors,n.expr[":"]=n.expr.pseudos,n.unique=t.uniqueSort,n.text=t.getText,n.isXMLDoc=t.isXML,n.contains=t.contains;var u=n.expr.match.needsContext,v=/^<(\w+)\s*\/?>(?:<\/\1>|)$/,w=/^.[^:#\[\.,]*$/;function x(a,b,c){if(n.isFunction(b))return n.grep(a,function(a,d){return!!b.call(a,d,a)!==c});if(b.nodeType)return n.grep(a,function(a){return a===b!==c});if("string"==typeof b){if(w.test(b))return n.filter(b,a,c);b=n.filter(b,a)}return n.grep(a,function(a){return g.call(b,a)>=0!==c})}n.filter=function(a,b,c){var d=b[0];return c&&(a=":not("+a+")"),1===b.length&&1===d.nodeType?n.find.matchesSelector(d,a)?[d]:[]:n.find.matches(a,n.grep(b,function(a){return 1===a.nodeType}))},n.fn.extend({find:function(a){var b,c=this.length,d=[],e=this;if("string"!=typeof a)return this.pushStack(n(a).filter(function(){for(b=0;c>b;b++)if(n.contains(e[b],this))return!0}));for(b=0;c>b;b++)n.find(a,e[b],d);return d=this.pushStack(c>1?n.unique(d):d),d.selector=this.selector?this.selector+" "+a:a,d},filter:function(a){return this.pushStack(x(this,a||[],!1))},not:function(a){return this.pushStack(x(this,a||[],!0))},is:function(a){return!!x(this,"string"==typeof a&&u.test(a)?n(a):a||[],!1).length}});var y,z=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/,A=n.fn.init=function(a,b){var c,d;if(!a)return this;if("string"==typeof a){if(c="<"===a[0]&&">"===a[a.length-1]&&a.length>=3?[null,a,null]:z.exec(a),!c||!c[1]&&b)return!b||b.jquery?(b||y).find(a):this.constructor(b).find(a);if(c[1]){if(b=b instanceof n?b[0]:b,n.merge(this,n.parseHTML(c[1],b&&b.nodeType?b.ownerDocument||b:l,!0)),v.test(c[1])&&n.isPlainObject(b))for(c in b)n.isFunction(this[c])?this[c](b[c]):this.attr(c,b[c]);return this}return d=l.getElementById(c[2]),d&&d.parentNode&&(this.length=1,this[0]=d),this.context=l,this.selector=a,this}return a.nodeType?(this.context=this[0]=a,this.length=1,this):n.isFunction(a)?"undefined"!=typeof y.ready?y.ready(a):a(n):(void 0!==a.selector&&(this.selector=a.selector,this.context=a.context),n.makeArray(a,this))};A.prototype=n.fn,y=n(l);var B=/^(?:parents|prev(?:Until|All))/,C={children:!0,contents:!0,next:!0,prev:!0};n.extend({dir:function(a,b,c){var d=[],e=void 0!==c;while((a=a[b])&&9!==a.nodeType)if(1===a.nodeType){if(e&&n(a).is(c))break;d.push(a)}return d},sibling:function(a,b){for(var c=[];a;a=a.nextSibling)1===a.nodeType&&a!==b&&c.push(a);return c}}),n.fn.extend({has:function(a){var b=n(a,this),c=b.length;return this.filter(function(){for(var a=0;c>a;a++)if(n.contains(this,b[a]))return!0})},closest:function(a,b){for(var c,d=0,e=this.length,f=[],g=u.test(a)||"string"!=typeof a?n(a,b||this.context):0;e>d;d++)for(c=this[d];c&&c!==b;c=c.parentNode)if(c.nodeType<11&&(g?g.index(c)>-1:1===c.nodeType&&n.find.matchesSelector(c,a))){f.push(c);break}return this.pushStack(f.length>1?n.unique(f):f)},index:function(a){return a?"string"==typeof a?g.call(n(a),this[0]):g.call(this,a.jquery?a[0]:a):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(a,b){return this.pushStack(n.unique(n.merge(this.get(),n(a,b))))},addBack:function(a){return this.add(null==a?this.prevObject:this.prevObject.filter(a))}});function D(a,b){while((a=a[b])&&1!==a.nodeType);return a}n.each({parent:function(a){var b=a.parentNode;return b&&11!==b.nodeType?b:null},parents:function(a){return n.dir(a,"parentNode")},parentsUntil:function(a,b,c){return n.dir(a,"parentNode",c)},next:function(a){return D(a,"nextSibling")},prev:function(a){return D(a,"previousSibling")},nextAll:function(a){return n.dir(a,"nextSibling")},prevAll:function(a){return n.dir(a,"previousSibling")},nextUntil:function(a,b,c){return n.dir(a,"nextSibling",c)},prevUntil:function(a,b,c){return n.dir(a,"previousSibling",c)},siblings:function(a){return n.sibling((a.parentNode||{}).firstChild,a)},children:function(a){return n.sibling(a.firstChild)},contents:function(a){return a.contentDocument||n.merge([],a.childNodes)}},function(a,b){n.fn[a]=function(c,d){var e=n.map(this,b,c);return"Until"!==a.slice(-5)&&(d=c),d&&"string"==typeof d&&(e=n.filter(d,e)),this.length>1&&(C[a]||n.unique(e),B.test(a)&&e.reverse()),this.pushStack(e)}});var E=/\S+/g,F={};function G(a){var b=F[a]={};return n.each(a.match(E)||[],function(a,c){b[c]=!0}),b}n.Callbacks=function(a){a="string"==typeof a?F[a]||G(a):n.extend({},a);var b,c,d,e,f,g,h=[],i=!a.once&&[],j=function(l){for(b=a.memory&&l,c=!0,g=e||0,e=0,f=h.length,d=!0;h&&f>g;g++)if(h[g].apply(l[0],l[1])===!1&&a.stopOnFalse){b=!1;break}d=!1,h&&(i?i.length&&j(i.shift()):b?h=[]:k.disable())},k={add:function(){if(h){var c=h.length;!function g(b){n.each(b,function(b,c){var d=n.type(c);"function"===d?a.unique&&k.has(c)||h.push(c):c&&c.length&&"string"!==d&&g(c)})}(arguments),d?f=h.length:b&&(e=c,j(b))}return this},remove:function(){return h&&n.each(arguments,function(a,b){var c;while((c=n.inArray(b,h,c))>-1)h.splice(c,1),d&&(f>=c&&f--,g>=c&&g--)}),this},has:function(a){return a?n.inArray(a,h)>-1:!(!h||!h.length)},empty:function(){return h=[],f=0,this},disable:function(){return h=i=b=void 0,this},disabled:function(){return!h},lock:function(){return i=void 0,b||k.disable(),this},locked:function(){return!i},fireWith:function(a,b){return!h||c&&!i||(b=b||[],b=[a,b.slice?b.slice():b],d?i.push(b):j(b)),this},fire:function(){return k.fireWith(this,arguments),this},fired:function(){return!!c}};return k},n.extend({Deferred:function(a){var b=[["resolve","done",n.Callbacks("once memory"),"resolved"],["reject","fail",n.Callbacks("once memory"),"rejected"],["notify","progress",n.Callbacks("memory")]],c="pending",d={state:function(){return c},always:function(){return e.done(arguments).fail(arguments),this},then:function(){var a=arguments;return n.Deferred(function(c){n.each(b,function(b,f){var g=n.isFunction(a[b])&&a[b];e[f[1]](function(){var a=g&&g.apply(this,arguments);a&&n.isFunction(a.promise)?a.promise().done(c.resolve).fail(c.reject).progress(c.notify):c[f[0]+"With"](this===d?c.promise():this,g?[a]:arguments)})}),a=null}).promise()},promise:function(a){return null!=a?n.extend(a,d):d}},e={};return d.pipe=d.then,n.each(b,function(a,f){var g=f[2],h=f[3];d[f[1]]=g.add,h&&g.add(function(){c=h},b[1^a][2].disable,b[2][2].lock),e[f[0]]=function(){return e[f[0]+"With"](this===e?d:this,arguments),this},e[f[0]+"With"]=g.fireWith}),d.promise(e),a&&a.call(e,e),e},when:function(a){var b=0,c=d.call(arguments),e=c.length,f=1!==e||a&&n.isFunction(a.promise)?e:0,g=1===f?a:n.Deferred(),h=function(a,b,c){return function(e){b[a]=this,c[a]=arguments.length>1?d.call(arguments):e,c===i?g.notifyWith(b,c):--f||g.resolveWith(b,c)}},i,j,k;if(e>1)for(i=new Array(e),j=new Array(e),k=new Array(e);e>b;b++)c[b]&&n.isFunction(c[b].promise)?c[b].promise().done(h(b,k,c)).fail(g.reject).progress(h(b,j,i)):--f;return f||g.resolveWith(k,c),g.promise()}});var H;n.fn.ready=function(a){return n.ready.promise().done(a),this},n.extend({isReady:!1,readyWait:1,holdReady:function(a){a?n.readyWait++:n.ready(!0)},ready:function(a){(a===!0?--n.readyWait:n.isReady)||(n.isReady=!0,a!==!0&&--n.readyWait>0||(H.resolveWith(l,[n]),n.fn.triggerHandler&&(n(l).triggerHandler("ready"),n(l).off("ready"))))}});function I(){l.removeEventListener("DOMContentLoaded",I,!1),a.removeEventListener("load",I,!1),n.ready()}n.ready.promise=function(b){return H||(H=n.Deferred(),"complete"===l.readyState?setTimeout(n.ready):(l.addEventListener("DOMContentLoaded",I,!1),a.addEventListener("load",I,!1))),H.promise(b)},n.ready.promise();var J=n.access=function(a,b,c,d,e,f,g){var h=0,i=a.length,j=null==c;if("object"===n.type(c)){e=!0;for(h in c)n.access(a,b,h,c[h],!0,f,g)}else if(void 0!==d&&(e=!0,n.isFunction(d)||(g=!0),j&&(g?(b.call(a,d),b=null):(j=b,b=function(a,b,c){return j.call(n(a),c)})),b))for(;i>h;h++)b(a[h],c,g?d:d.call(a[h],h,b(a[h],c)));return e?a:j?b.call(a):i?b(a[0],c):f};n.acceptData=function(a){return 1===a.nodeType||9===a.nodeType||!+a.nodeType};function K(){Object.defineProperty(this.cache={},0,{get:function(){return{}}}),this.expando=n.expando+K.uid++}K.uid=1,K.accepts=n.acceptData,K.prototype={key:function(a){if(!K.accepts(a))return 0;var b={},c=a[this.expando];if(!c){c=K.uid++;try{b[this.expando]={value:c},Object.defineProperties(a,b)}catch(d){b[this.expando]=c,n.extend(a,b)}}return this.cache[c]||(this.cache[c]={}),c},set:function(a,b,c){var d,e=this.key(a),f=this.cache[e];if("string"==typeof b)f[b]=c;else if(n.isEmptyObject(f))n.extend(this.cache[e],b);else for(d in b)f[d]=b[d];return f},get:function(a,b){var c=this.cache[this.key(a)];return void 0===b?c:c[b]},access:function(a,b,c){var d;return void 0===b||b&&"string"==typeof b&&void 0===c?(d=this.get(a,b),void 0!==d?d:this.get(a,n.camelCase(b))):(this.set(a,b,c),void 0!==c?c:b)},remove:function(a,b){var c,d,e,f=this.key(a),g=this.cache[f];if(void 0===b)this.cache[f]={};else{n.isArray(b)?d=b.concat(b.map(n.camelCase)):(e=n.camelCase(b),b in g?d=[b,e]:(d=e,d=d in g?[d]:d.match(E)||[])),c=d.length;while(c--)delete g[d[c]]}},hasData:function(a){return!n.isEmptyObject(this.cache[a[this.expando]]||{})},discard:function(a){a[this.expando]&&delete this.cache[a[this.expando]]}};var L=new K,M=new K,N=/^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,O=/([A-Z])/g;function P(a,b,c){var d;if(void 0===c&&1===a.nodeType)if(d="data-"+b.replace(O,"-$1").toLowerCase(),c=a.getAttribute(d),"string"==typeof c){try{c="true"===c?!0:"false"===c?!1:"null"===c?null:+c+""===c?+c:N.test(c)?n.parseJSON(c):c}catch(e){}M.set(a,b,c)}else c=void 0;return c}n.extend({hasData:function(a){return M.hasData(a)||L.hasData(a)},data:function(a,b,c){ +return M.access(a,b,c)},removeData:function(a,b){M.remove(a,b)},_data:function(a,b,c){return L.access(a,b,c)},_removeData:function(a,b){L.remove(a,b)}}),n.fn.extend({data:function(a,b){var c,d,e,f=this[0],g=f&&f.attributes;if(void 0===a){if(this.length&&(e=M.get(f),1===f.nodeType&&!L.get(f,"hasDataAttrs"))){c=g.length;while(c--)g[c]&&(d=g[c].name,0===d.indexOf("data-")&&(d=n.camelCase(d.slice(5)),P(f,d,e[d])));L.set(f,"hasDataAttrs",!0)}return e}return"object"==typeof a?this.each(function(){M.set(this,a)}):J(this,function(b){var c,d=n.camelCase(a);if(f&&void 0===b){if(c=M.get(f,a),void 0!==c)return c;if(c=M.get(f,d),void 0!==c)return c;if(c=P(f,d,void 0),void 0!==c)return c}else this.each(function(){var c=M.get(this,d);M.set(this,d,b),-1!==a.indexOf("-")&&void 0!==c&&M.set(this,a,b)})},null,b,arguments.length>1,null,!0)},removeData:function(a){return this.each(function(){M.remove(this,a)})}}),n.extend({queue:function(a,b,c){var d;return a?(b=(b||"fx")+"queue",d=L.get(a,b),c&&(!d||n.isArray(c)?d=L.access(a,b,n.makeArray(c)):d.push(c)),d||[]):void 0},dequeue:function(a,b){b=b||"fx";var c=n.queue(a,b),d=c.length,e=c.shift(),f=n._queueHooks(a,b),g=function(){n.dequeue(a,b)};"inprogress"===e&&(e=c.shift(),d--),e&&("fx"===b&&c.unshift("inprogress"),delete f.stop,e.call(a,g,f)),!d&&f&&f.empty.fire()},_queueHooks:function(a,b){var c=b+"queueHooks";return L.get(a,c)||L.access(a,c,{empty:n.Callbacks("once memory").add(function(){L.remove(a,[b+"queue",c])})})}}),n.fn.extend({queue:function(a,b){var c=2;return"string"!=typeof a&&(b=a,a="fx",c--),arguments.lengthx",k.noCloneChecked=!!b.cloneNode(!0).lastChild.defaultValue}();var U="undefined";k.focusinBubbles="onfocusin"in a;var V=/^key/,W=/^(?:mouse|pointer|contextmenu)|click/,X=/^(?:focusinfocus|focusoutblur)$/,Y=/^([^.]*)(?:\.(.+)|)$/;function Z(){return!0}function $(){return!1}function _(){try{return l.activeElement}catch(a){}}n.event={global:{},add:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,o,p,q,r=L.get(a);if(r){c.handler&&(f=c,c=f.handler,e=f.selector),c.guid||(c.guid=n.guid++),(i=r.events)||(i=r.events={}),(g=r.handle)||(g=r.handle=function(b){return typeof n!==U&&n.event.triggered!==b.type?n.event.dispatch.apply(a,arguments):void 0}),b=(b||"").match(E)||[""],j=b.length;while(j--)h=Y.exec(b[j])||[],o=q=h[1],p=(h[2]||"").split(".").sort(),o&&(l=n.event.special[o]||{},o=(e?l.delegateType:l.bindType)||o,l=n.event.special[o]||{},k=n.extend({type:o,origType:q,data:d,handler:c,guid:c.guid,selector:e,needsContext:e&&n.expr.match.needsContext.test(e),namespace:p.join(".")},f),(m=i[o])||(m=i[o]=[],m.delegateCount=0,l.setup&&l.setup.call(a,d,p,g)!==!1||a.addEventListener&&a.addEventListener(o,g,!1)),l.add&&(l.add.call(a,k),k.handler.guid||(k.handler.guid=c.guid)),e?m.splice(m.delegateCount++,0,k):m.push(k),n.event.global[o]=!0)}},remove:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,o,p,q,r=L.hasData(a)&&L.get(a);if(r&&(i=r.events)){b=(b||"").match(E)||[""],j=b.length;while(j--)if(h=Y.exec(b[j])||[],o=q=h[1],p=(h[2]||"").split(".").sort(),o){l=n.event.special[o]||{},o=(d?l.delegateType:l.bindType)||o,m=i[o]||[],h=h[2]&&new RegExp("(^|\\.)"+p.join("\\.(?:.*\\.|)")+"(\\.|$)"),g=f=m.length;while(f--)k=m[f],!e&&q!==k.origType||c&&c.guid!==k.guid||h&&!h.test(k.namespace)||d&&d!==k.selector&&("**"!==d||!k.selector)||(m.splice(f,1),k.selector&&m.delegateCount--,l.remove&&l.remove.call(a,k));g&&!m.length&&(l.teardown&&l.teardown.call(a,p,r.handle)!==!1||n.removeEvent(a,o,r.handle),delete i[o])}else for(o in i)n.event.remove(a,o+b[j],c,d,!0);n.isEmptyObject(i)&&(delete r.handle,L.remove(a,"events"))}},trigger:function(b,c,d,e){var f,g,h,i,k,m,o,p=[d||l],q=j.call(b,"type")?b.type:b,r=j.call(b,"namespace")?b.namespace.split("."):[];if(g=h=d=d||l,3!==d.nodeType&&8!==d.nodeType&&!X.test(q+n.event.triggered)&&(q.indexOf(".")>=0&&(r=q.split("."),q=r.shift(),r.sort()),k=q.indexOf(":")<0&&"on"+q,b=b[n.expando]?b:new n.Event(q,"object"==typeof b&&b),b.isTrigger=e?2:3,b.namespace=r.join("."),b.namespace_re=b.namespace?new RegExp("(^|\\.)"+r.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,b.result=void 0,b.target||(b.target=d),c=null==c?[b]:n.makeArray(c,[b]),o=n.event.special[q]||{},e||!o.trigger||o.trigger.apply(d,c)!==!1)){if(!e&&!o.noBubble&&!n.isWindow(d)){for(i=o.delegateType||q,X.test(i+q)||(g=g.parentNode);g;g=g.parentNode)p.push(g),h=g;h===(d.ownerDocument||l)&&p.push(h.defaultView||h.parentWindow||a)}f=0;while((g=p[f++])&&!b.isPropagationStopped())b.type=f>1?i:o.bindType||q,m=(L.get(g,"events")||{})[b.type]&&L.get(g,"handle"),m&&m.apply(g,c),m=k&&g[k],m&&m.apply&&n.acceptData(g)&&(b.result=m.apply(g,c),b.result===!1&&b.preventDefault());return b.type=q,e||b.isDefaultPrevented()||o._default&&o._default.apply(p.pop(),c)!==!1||!n.acceptData(d)||k&&n.isFunction(d[q])&&!n.isWindow(d)&&(h=d[k],h&&(d[k]=null),n.event.triggered=q,d[q](),n.event.triggered=void 0,h&&(d[k]=h)),b.result}},dispatch:function(a){a=n.event.fix(a);var b,c,e,f,g,h=[],i=d.call(arguments),j=(L.get(this,"events")||{})[a.type]||[],k=n.event.special[a.type]||{};if(i[0]=a,a.delegateTarget=this,!k.preDispatch||k.preDispatch.call(this,a)!==!1){h=n.event.handlers.call(this,a,j),b=0;while((f=h[b++])&&!a.isPropagationStopped()){a.currentTarget=f.elem,c=0;while((g=f.handlers[c++])&&!a.isImmediatePropagationStopped())(!a.namespace_re||a.namespace_re.test(g.namespace))&&(a.handleObj=g,a.data=g.data,e=((n.event.special[g.origType]||{}).handle||g.handler).apply(f.elem,i),void 0!==e&&(a.result=e)===!1&&(a.preventDefault(),a.stopPropagation()))}return k.postDispatch&&k.postDispatch.call(this,a),a.result}},handlers:function(a,b){var c,d,e,f,g=[],h=b.delegateCount,i=a.target;if(h&&i.nodeType&&(!a.button||"click"!==a.type))for(;i!==this;i=i.parentNode||this)if(i.disabled!==!0||"click"!==a.type){for(d=[],c=0;h>c;c++)f=b[c],e=f.selector+" ",void 0===d[e]&&(d[e]=f.needsContext?n(e,this).index(i)>=0:n.find(e,this,null,[i]).length),d[e]&&d.push(f);d.length&&g.push({elem:i,handlers:d})}return h]*)\/>/gi,ba=/<([\w:]+)/,ca=/<|&#?\w+;/,da=/<(?:script|style|link)/i,ea=/checked\s*(?:[^=]|=\s*.checked.)/i,fa=/^$|\/(?:java|ecma)script/i,ga=/^true\/(.*)/,ha=/^\s*\s*$/g,ia={option:[1,""],thead:[1,"","
"],col:[2,"","
"],tr:[2,"","
"],td:[3,"","
"],_default:[0,"",""]};ia.optgroup=ia.option,ia.tbody=ia.tfoot=ia.colgroup=ia.caption=ia.thead,ia.th=ia.td;function ja(a,b){return n.nodeName(a,"table")&&n.nodeName(11!==b.nodeType?b:b.firstChild,"tr")?a.getElementsByTagName("tbody")[0]||a.appendChild(a.ownerDocument.createElement("tbody")):a}function ka(a){return a.type=(null!==a.getAttribute("type"))+"/"+a.type,a}function la(a){var b=ga.exec(a.type);return b?a.type=b[1]:a.removeAttribute("type"),a}function ma(a,b){for(var c=0,d=a.length;d>c;c++)L.set(a[c],"globalEval",!b||L.get(b[c],"globalEval"))}function na(a,b){var c,d,e,f,g,h,i,j;if(1===b.nodeType){if(L.hasData(a)&&(f=L.access(a),g=L.set(b,f),j=f.events)){delete g.handle,g.events={};for(e in j)for(c=0,d=j[e].length;d>c;c++)n.event.add(b,e,j[e][c])}M.hasData(a)&&(h=M.access(a),i=n.extend({},h),M.set(b,i))}}function oa(a,b){var c=a.getElementsByTagName?a.getElementsByTagName(b||"*"):a.querySelectorAll?a.querySelectorAll(b||"*"):[];return void 0===b||b&&n.nodeName(a,b)?n.merge([a],c):c}function pa(a,b){var c=b.nodeName.toLowerCase();"input"===c&&T.test(a.type)?b.checked=a.checked:("input"===c||"textarea"===c)&&(b.defaultValue=a.defaultValue)}n.extend({clone:function(a,b,c){var d,e,f,g,h=a.cloneNode(!0),i=n.contains(a.ownerDocument,a);if(!(k.noCloneChecked||1!==a.nodeType&&11!==a.nodeType||n.isXMLDoc(a)))for(g=oa(h),f=oa(a),d=0,e=f.length;e>d;d++)pa(f[d],g[d]);if(b)if(c)for(f=f||oa(a),g=g||oa(h),d=0,e=f.length;e>d;d++)na(f[d],g[d]);else na(a,h);return g=oa(h,"script"),g.length>0&&ma(g,!i&&oa(a,"script")),h},buildFragment:function(a,b,c,d){for(var e,f,g,h,i,j,k=b.createDocumentFragment(),l=[],m=0,o=a.length;o>m;m++)if(e=a[m],e||0===e)if("object"===n.type(e))n.merge(l,e.nodeType?[e]:e);else if(ca.test(e)){f=f||k.appendChild(b.createElement("div")),g=(ba.exec(e)||["",""])[1].toLowerCase(),h=ia[g]||ia._default,f.innerHTML=h[1]+e.replace(aa,"<$1>")+h[2],j=h[0];while(j--)f=f.lastChild;n.merge(l,f.childNodes),f=k.firstChild,f.textContent=""}else l.push(b.createTextNode(e));k.textContent="",m=0;while(e=l[m++])if((!d||-1===n.inArray(e,d))&&(i=n.contains(e.ownerDocument,e),f=oa(k.appendChild(e),"script"),i&&ma(f),c)){j=0;while(e=f[j++])fa.test(e.type||"")&&c.push(e)}return k},cleanData:function(a){for(var b,c,d,e,f=n.event.special,g=0;void 0!==(c=a[g]);g++){if(n.acceptData(c)&&(e=c[L.expando],e&&(b=L.cache[e]))){if(b.events)for(d in b.events)f[d]?n.event.remove(c,d):n.removeEvent(c,d,b.handle);L.cache[e]&&delete L.cache[e]}delete M.cache[c[M.expando]]}}}),n.fn.extend({text:function(a){return J(this,function(a){return void 0===a?n.text(this):this.empty().each(function(){(1===this.nodeType||11===this.nodeType||9===this.nodeType)&&(this.textContent=a)})},null,a,arguments.length)},append:function(){return this.domManip(arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=ja(this,a);b.appendChild(a)}})},prepend:function(){return this.domManip(arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=ja(this,a);b.insertBefore(a,b.firstChild)}})},before:function(){return this.domManip(arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this)})},after:function(){return this.domManip(arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this.nextSibling)})},remove:function(a,b){for(var c,d=a?n.filter(a,this):this,e=0;null!=(c=d[e]);e++)b||1!==c.nodeType||n.cleanData(oa(c)),c.parentNode&&(b&&n.contains(c.ownerDocument,c)&&ma(oa(c,"script")),c.parentNode.removeChild(c));return this},empty:function(){for(var a,b=0;null!=(a=this[b]);b++)1===a.nodeType&&(n.cleanData(oa(a,!1)),a.textContent="");return this},clone:function(a,b){return a=null==a?!1:a,b=null==b?a:b,this.map(function(){return n.clone(this,a,b)})},html:function(a){return J(this,function(a){var b=this[0]||{},c=0,d=this.length;if(void 0===a&&1===b.nodeType)return b.innerHTML;if("string"==typeof a&&!da.test(a)&&!ia[(ba.exec(a)||["",""])[1].toLowerCase()]){a=a.replace(aa,"<$1>");try{for(;d>c;c++)b=this[c]||{},1===b.nodeType&&(n.cleanData(oa(b,!1)),b.innerHTML=a);b=0}catch(e){}}b&&this.empty().append(a)},null,a,arguments.length)},replaceWith:function(){var a=arguments[0];return this.domManip(arguments,function(b){a=this.parentNode,n.cleanData(oa(this)),a&&a.replaceChild(b,this)}),a&&(a.length||a.nodeType)?this:this.remove()},detach:function(a){return this.remove(a,!0)},domManip:function(a,b){a=e.apply([],a);var c,d,f,g,h,i,j=0,l=this.length,m=this,o=l-1,p=a[0],q=n.isFunction(p);if(q||l>1&&"string"==typeof p&&!k.checkClone&&ea.test(p))return this.each(function(c){var d=m.eq(c);q&&(a[0]=p.call(this,c,d.html())),d.domManip(a,b)});if(l&&(c=n.buildFragment(a,this[0].ownerDocument,!1,this),d=c.firstChild,1===c.childNodes.length&&(c=d),d)){for(f=n.map(oa(c,"script"),ka),g=f.length;l>j;j++)h=c,j!==o&&(h=n.clone(h,!0,!0),g&&n.merge(f,oa(h,"script"))),b.call(this[j],h,j);if(g)for(i=f[f.length-1].ownerDocument,n.map(f,la),j=0;g>j;j++)h=f[j],fa.test(h.type||"")&&!L.access(h,"globalEval")&&n.contains(i,h)&&(h.src?n._evalUrl&&n._evalUrl(h.src):n.globalEval(h.textContent.replace(ha,"")))}return this}}),n.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){n.fn[a]=function(a){for(var c,d=[],e=n(a),g=e.length-1,h=0;g>=h;h++)c=h===g?this:this.clone(!0),n(e[h])[b](c),f.apply(d,c.get());return this.pushStack(d)}});var qa,ra={};function sa(b,c){var d,e=n(c.createElement(b)).appendTo(c.body),f=a.getDefaultComputedStyle&&(d=a.getDefaultComputedStyle(e[0]))?d.display:n.css(e[0],"display");return e.detach(),f}function ta(a){var b=l,c=ra[a];return c||(c=sa(a,b),"none"!==c&&c||(qa=(qa||n("