| @@ -3,8 +3,10 @@ | ||
| 3 | 3 | from django.db import transaction | 
| 4 | 4 | from django.shortcuts import render | 
| 5 | 5 | from django_logit import logit | 
| 6 | +from django_query import get_query_value | |
| 6 | 7 | from json_render import json_render | 
| 7 | 8 |  | 
| 9 | +from account.models import UserInfo | |
| 8 | 10 | from utils.home_photo_utils import get_home_photos | 
| 9 | 11 |  | 
| 10 | 12 |  | 
| @@ -17,6 +19,13 @@ def mini_preview(request): | ||
| 17 | 19 | @logit | 
| 18 | 20 | @transaction.atomic | 
| 19 | 21 | def mini_preview2(request): | 
| 22 | + user_id = get_query_value(request, 'user_id') | |
| 23 | + | |
| 24 | + try: | |
| 25 | + user = UserInfo.objects.get(user_id=user_id) | |
| 26 | + except UserInfo.DoesNotExist: | |
| 27 | + user = None | |
| 28 | + | |
| 20 | 29 | photos, session_photos, left = get_home_photos(request) | 
| 21 | 30 |  | 
| 22 | 31 |      return json_render(request, 'page/mini_preview2.html', { | 
| @@ -25,4 +34,6 @@ def mini_preview2(request): | ||
| 25 | 34 |      }, unjsondumpsdict={ | 
| 26 | 35 | 'session_photos': session_photos, | 
| 27 | 36 | 'left': left, | 
| 37 | + 'user_id': user_id, | |
| 38 | + 'nickname': user.nickname if user else '', | |
| 28 | 39 | }) | 
| @@ -108,6 +108,20 @@ | ||
| 108 | 108 | box-sizing: border-box; | 
| 109 | 109 | z-index: 99999; | 
| 110 | 110 | } | 
| 111 | + | |
| 112 | +        .qrscan { | |
| 113 | + position: fixed; | |
| 114 | + right: 10px; | |
| 115 | + bottom: 10px; | |
| 116 | + width: 80px; | |
| 117 | + height: 80px; | |
| 118 | + z-index: 99999; | |
| 119 | + } | |
| 120 | + | |
| 121 | +        .qrscan > img { | |
| 122 | + width: 100%; | |
| 123 | + height: 100%; | |
| 124 | + } | |
| 111 | 125 | </style> | 
| 112 | 126 | </head> | 
| 113 | 127 | <body> | 
| @@ -129,6 +143,10 @@ | ||
| 129 | 143 | <div id="nomark" class="nomark-buy">去除水印</div> | 
| 130 | 144 |          {#        <div id="origin" class="origin-buy">购买原图</div>#} | 
| 131 | 145 | </div> | 
| 146 | + <!-- 扫一扫 --> | |
| 147 | + <div id="qrscan" class="qrscan"> | |
| 148 | + <img class="" src="../../static/img/qrscan.png"/> | |
| 149 | + </div> | |
| 132 | 150 | </div> | 
| 133 | 151 | <!-- Root element of PhotoSwipe. Must have class pswp. --> | 
| 134 | 152 | <div class="pswp" tabindex="-1" role="dialog" aria-hidden="true"> | 
| @@ -181,7 +199,8 @@ | ||
| 181 | 199 | <script src="//cdn.bootcss.com/jquery/3.2.1/jquery.min.js"></script> | 
| 182 | 200 | <script src="//cdn.bootcss.com/photoswipe/4.1.2/photoswipe.min.js"></script> | 
| 183 | 201 | <script src="//cdn.bootcss.com/photoswipe/4.1.2/photoswipe-ui-default.min.js"></script> | 
| 184 | -<script type="text/javascript" src="//res.wx.qq.com/open/js/jweixin-1.3.2.js"></script> | |
| 202 | +<script src="//res.wx.qq.com/open/js/jweixin-1.3.2.js"></script> | |
| 203 | +<script src="{% static 'pai2/js/jswe-0.0.4.js' %}"></script> | |
| 185 | 204 | <script> | 
| 186 | 205 |      $(function () { | 
| 187 | 206 | /** 格式化输入字符串 **/ | 
| @@ -236,6 +255,17 @@ | ||
| 236 | 255 | return result; | 
| 237 | 256 | } | 
| 238 | 257 |  | 
| 258 | +        function parse(paramstr) { | |
| 259 | +            var ret = {}, | |
| 260 | +                seg = paramstr.split('&'), | |
| 261 | + len = seg.length, i = 0, s; | |
| 262 | +            for (; i < len; i++) { | |
| 263 | +                s = seg[i].split('='); | |
| 264 | + ret[s[0]] = s[1]; | |
| 265 | + } | |
| 266 | + return ret | |
| 267 | + } | |
| 268 | + | |
| 239 | 269 | var GROUP_AVATAR_LIST = [ | 
| 240 | 270 | 'apple', | 
| 241 | 271 | 'banana', | 
| @@ -275,6 +305,9 @@ | ||
| 275 | 305 | var orderId = ''; | 
| 276 | 306 | var orderQueryTimer = null; | 
| 277 | 307 |  | 
| 308 | +        var user_id = '{{ user_id }}'; | |
| 309 | +        var nickname = '{{ nickname }}'; | |
| 310 | + | |
| 278 | 311 |          for (var i = 0; i < session_photos.length; i++) { | 
| 279 | 312 | var photos = session_photos[i].photos; | 
| 280 | 313 |              for (var j = 0; j < photos.length; j++) { | 
| @@ -339,6 +372,8 @@ | ||
| 339 | 372 |  | 
| 340 | 373 | // Initializes and opens PhotoSwipe | 
| 341 | 374 |          $('#photos img').click(function () { | 
| 375 | +            $('#qrscan').hide(); | |
| 376 | + | |
| 342 | 377 |              curIdx = parseInt($(this).attr('data-idx')); | 
| 343 | 378 | options['index'] = curIdx; | 
| 344 | 379 | var gallery = new PhotoSwipe(pswpElement, PhotoSwipeUI_Default, swipeItems, options); | 
| @@ -357,6 +392,7 @@ | ||
| 357 | 392 |  | 
| 358 | 393 | // Gallery starts closing | 
| 359 | 394 |              gallery.listen('close', function () { | 
| 395 | +                $('#qrscan').show(); | |
| 360 | 396 |                  $('#buy').hide(); | 
| 361 | 397 |                  $('#mask-thump').hide(); | 
| 362 | 398 | }); | 
| @@ -378,7 +414,7 @@ | ||
| 378 | 414 |                          $.ajax({ | 
| 379 | 415 | url: 'f/bought', | 
| 380 | 416 |                              data: { | 
| 381 | -                                user_id: '{{ request.GET.user_id }}', | |
| 417 | + user_id: user_id, | |
| 382 | 418 | photo_id: photoId, | 
| 383 | 419 | }, | 
| 384 | 420 |                              success: function (res) { | 
| @@ -444,6 +480,75 @@ | ||
| 444 | 480 | } | 
| 445 | 481 | }); | 
| 446 | 482 | }) | 
| 483 | + | |
| 484 | +        $('#qrscan').click(function (e) { | |
| 485 | +            V.scanQRCode({ | |
| 486 | + needResult: 1 | |
| 487 | + }); | |
| 488 | + }) | |
| 489 | + | |
| 490 | +        V.wxScanQRCodeSuccess = function (res) { | |
| 491 | + var qrcodeurl = V.parseScanQRCodeResultStr(res.resultStr); | |
| 492 | +            var matched = /(https{0,1}:\/\/[\w*.]+\w*)\/(\w*)\/(\w*)\?*(.*)/.exec(qrcodeurl); | |
| 493 | + // 如果匹配失败 | |
| 494 | +            if (!matched) { | |
| 495 | + return | |
| 496 | + } | |
| 497 | +            matchedInfo = { | |
| 498 | + uri: matched[1], | |
| 499 | + type: matched[2], | |
| 500 | + id: matched[3], | |
| 501 | + params: matched[4], | |
| 502 | + } | |
| 503 | +            if (matchedInfo.type == 's') { | |
| 504 | +                $.ajax({ | |
| 505 | + url: '/s/join', | |
| 506 | + type: 'POST', | |
| 507 | +                    data: { | |
| 508 | + session_id: matchedInfo.id, | |
| 509 | + user_id: user_id, | |
| 510 | + nickname: nickname, | |
| 511 | + lensman_id: parse.parse(matchedInfo.params).lensman_id, | |
| 512 | + }, | |
| 513 | +                    success: function (res) { | |
| 514 | +                        if (res.data.status == 200) { | |
| 515 | + window.location.reload(); | |
| 516 | + } | |
| 517 | + } | |
| 518 | + }) | |
| 519 | + } | |
| 520 | +            else if (matchedInfo.type == 'g') { | |
| 521 | +                requests.post({ | |
| 522 | + url: '/g/join', | |
| 523 | +                    data: { | |
| 524 | + group_id: matchedInfo.id, | |
| 525 | + user_id: user_id, | |
| 526 | + nickname: nickname, | |
| 527 | + }, | |
| 528 | +                    success: function (res) { | |
| 529 | +                        if (res.data.status == 200) { | |
| 530 | + // 刷新照片 | |
| 531 | + window.location.reload(); | |
| 532 | + } | |
| 533 | + } | |
| 534 | + }) | |
| 535 | + } | |
| 536 | +            else if (matchedInfo.type == 'tgu') { | |
| 537 | +                requests.post({ | |
| 538 | + url: '/tgu/join', | |
| 539 | +                    data: { | |
| 540 | + admin_id: matchedInfo.id, | |
| 541 | + user_id: user_id, | |
| 542 | + }, | |
| 543 | +                    success: function (res) { | |
| 544 | +                        if (res.data.status == 200) { | |
| 545 | + // 刷新照片 | |
| 546 | + window.location.reload(); | |
| 547 | + } | |
| 548 | + } | |
| 549 | + }) | |
| 550 | + } | |
| 551 | + } | |
| 447 | 552 | }) | 
| 448 | 553 | </script> | 
| 449 | 554 | </body> | 
| @@ -460,7 +460,7 @@ | ||
| 460 | 460 | // 9 微信原生接口 | 
| 461 | 461 | // 9.1.1 扫描二维码并返回结果 | 
| 462 | 462 | // 9.1.2 扫描二维码并返回结果 | 
| 463 | -    function scanQRCode(scan_params) { | |
| 463 | +    function scanQRCode(scan_params) { | |
| 464 | 464 |          if ('undefined' === typeof scan_params) scan_params = {} | 
| 465 | 465 |          wx.scanQRCode({ | 
| 466 | 466 | needResult: scan_params.needResult || 0, // 默认为0,0扫描结果由微信处理,1直接返回扫描结果 | 
| @@ -479,7 +479,7 @@ | ||
| 479 | 479 |  | 
| 480 | 480 | // 10 微信支付接口 | 
| 481 | 481 | // 10.1 发起一个支付请求 | 
| 482 | -    function chooseWXPay(wxpay_params) { | |
| 482 | +    function chooseWXPay(wxpay_params) { | |
| 483 | 483 |          wx.chooseWXPay({ | 
| 484 | 484 | timestamp: wxpay_params.timeStamp, // 支付签名时间戳,注意微信jssdk中的所有使用timestamp字段均为小写。但最新版的支付后台生成签名使用的timeStamp字段名需大写其中的S字符 | 
| 485 | 485 | nonceStr: wxpay_params.nonceStr, // 支付签名随机串,不长于 32 位 | 
| @@ -495,7 +495,7 @@ | ||
| 495 | 495 |  | 
| 496 | 496 | // xx 微信原生企业红包接口 | 
| 497 | 497 | // xx.1 发起一个发送原生企业红包请求 | 
| 498 | -    function openEnterpriseRedPacket(wxredpack_params) { | |
| 498 | +    function openEnterpriseRedPacket(wxredpack_params) { | |
| 499 | 499 |          wx.openEnterpriseRedPacket({ | 
| 500 | 500 | timeStamp: wxredpack_params.timeStamp, // 红包签名时间戳,注意原生企业红包接口timeStamp字段名需大写其中的S字符,而支付接口timeStamp字段名无需大写其中的S字符。但最新版的支付后台生成签名使用的timeStamp字段名需大写其中的S字符 | 
| 501 | 501 | nonceStr: wxredpack_params.nonceStr, // 红包签名随机串,不长于 32 位 | 
| @@ -22,7 +22,7 @@ from django.contrib import admin | ||
| 22 | 22 | from rest_framework import routers | 
| 23 | 23 |  | 
| 24 | 24 | from account import account_views | 
| 25 | -from group import group_views, grouppage_views | |
| 25 | +from group import group_views, grouppage_views, groupuser_views, tourguidegroupuser_views | |
| 26 | 26 | from miniapp import views as mini_views | 
| 27 | 27 | from pay import views as pay_views | 
| 28 | 28 | from photo import views as photo_views | 
| @@ -81,6 +81,10 @@ urlpatterns += [ | ||
| 81 | 81 | url(r'^mini/order_create$', pay_views.wx_order_create_api, name='wx_order_create_api'), # 订单创建 | 
| 82 | 82 | url(r'^mini/order_query$', pay_views.wx_order_query_api, name='wx_order_query_api'), # 订单查询补单 | 
| 83 | 83 |  | 
| 84 | + url(r'^s/join$', photo_views.session_join_api, name='session_join_api'), # Session 加群 | |
| 85 | + url(r'^g/join$', groupuser_views.group_user_join_api, name='group_join_api'), # 群成员加群 | |
| 86 | + url(r'^tgu/join$', tourguidegroupuser_views.tgu_group_user_join_api, name='tgu_group_user_join_api'), # 旅行团成员加团 | |
| 87 | + | |
| 84 | 88 | url(r'^f/bought$', group_views.lensman_photo_bought, name='lensman_photo_bought'), # 摄影师照片已购买 | 
| 85 | 89 | ] | 
| 86 | 90 |  |