From 7fc5da2bbd47c04de2db3fa2b0235e018de328f5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=85=94=E5=A7=AC=E6=A1=91?= Date: Fri, 2 Oct 2020 10:07:25 +0800 Subject: [PATCH] fixed #27 & #30 --- app/Components/Helpers.php | 2 +- app/Http/Controllers/Admin/UserController.php | 6 +- app/Http/Controllers/Gateway/PayPal.php | 2 +- app/Http/Controllers/PaymentController.php | 50 +++-- app/Http/Requests/Admin/ShopUpdateRequest.php | 6 +- app/Observers/ConfigObserver.php | 6 +- composer.json | 1 - composer.lock | 202 ++---------------- public/assets/custom/qart.min.js | 2 + resources/views/admin/user/export.blade.php | 68 +++--- resources/views/user/index.blade.php | 20 +- resources/views/user/payment.blade.php | 17 +- 12 files changed, 133 insertions(+), 249 deletions(-) create mode 100644 public/assets/custom/qart.min.js diff --git a/app/Components/Helpers.php b/app/Components/Helpers.php index fdeea1be..8907ef7c 100644 --- a/app/Components/Helpers.php +++ b/app/Components/Helpers.php @@ -148,7 +148,7 @@ class Helpers public static function cacheSysConfig($name) { if ($name === 'is_onlinePay') { - $value = !empty(array_filter(Cache::many(['is_AliPay', 'is_QQPay', 'is_WeChatPay', 'is_otherPay']))); + $value = !empty(array_filter(Cache::tags('sysConfig')->many(['is_AliPay', 'is_QQPay', 'is_WeChatPay', 'is_otherPay']))); Cache::tags('sysConfig')->put('is_onlinePay', $value); } else { $value = Config::find($name)->value; diff --git a/app/Http/Controllers/Admin/UserController.php b/app/Http/Controllers/Admin/UserController.php index 8220358a..58e7ec10 100644 --- a/app/Http/Controllers/Admin/UserController.php +++ b/app/Http/Controllers/Admin/UserController.php @@ -363,9 +363,9 @@ class UserController extends Controller return view('admin.user.export', $view); } - public function exportProxyConfig(Request $request, $id): JsonResponse + public function exportProxyConfig(Request $request, $uid): JsonResponse { - $node = Node::find($id); + $node = Node::find($request->input('id')); if ($node->type === 1) { if ($node->compatible) { $proxyType = 'SS'; @@ -376,7 +376,7 @@ class UserController extends Controller $proxyType = 'V2Ray'; } - $data = $this->getUserNodeInfo($id, $node->id, $request->input('type') !== 'text' ? 0 : 1); + $data = $this->getUserNodeInfo($uid, $node->id, $request->input('type') !== 'text' ? 0 : 1); return Response::json(['status' => 'success', 'data' => $data, 'title' => $proxyType]); } diff --git a/app/Http/Controllers/Gateway/PayPal.php b/app/Http/Controllers/Gateway/PayPal.php index 1c1e7692..f6a50fac 100644 --- a/app/Http/Controllers/Gateway/PayPal.php +++ b/app/Http/Controllers/Gateway/PayPal.php @@ -132,7 +132,7 @@ class PayPal extends AbstractPayment if ($response === 'VERIFIED' && $request['invoice']) { $payment = Payment::whereTradeNo($request['invoice'])->first(); - if ($payment && $payment->status == 0) { + if ($payment && $payment->status === 0) { $ret = $payment->order->update(['status' => 2]); if ($ret) { exit('success'); diff --git a/app/Http/Controllers/PaymentController.php b/app/Http/Controllers/PaymentController.php index 6d35af46..e3b3387a 100644 --- a/app/Http/Controllers/PaymentController.php +++ b/app/Http/Controllers/PaymentController.php @@ -14,8 +14,8 @@ use App\Models\Coupon; use App\Models\Goods; use App\Models\Order; use App\Models\Payment; -use App\Models\PaymentCallback; use Auth; +use Exception; use Illuminate\Http\JsonResponse; use Illuminate\Http\Request; use Log; @@ -164,32 +164,38 @@ class PaymentController extends Controller $orderSn = date('ymdHis').random_int(100000, 999999); // 生成订单 - $order = new Order(); - $order->order_sn = $orderSn; - $order->user_id = Auth::id(); - $order->goods_id = $credit ? 0 : $goods_id; - $order->coupon_id = $coupon->id ?? 0; - $order->origin_amount = $credit ?: $goods->price; - $order->amount = $amount; - $order->is_expire = 0; - $order->pay_type = $pay_type; - $order->pay_way = self::$method; - $order->status = 0; - $order->save(); + try { + $order = new Order(); + $order->order_sn = $orderSn; + $order->user_id = Auth::id(); + $order->goods_id = $credit ? 0 : $goods_id; + $order->coupon_id = $coupon->id ?? 0; + $order->origin_amount = $credit ?: $goods->price; + $order->amount = $amount; + $order->is_expire = 0; + $order->pay_type = $pay_type; + $order->pay_way = self::$method; + $order->status = 0; + $order->save(); - // 使用优惠券,减少可使用次数 - if (!empty($coupon)) { - if ($coupon->usable_times > 0) { - Coupon::whereId($coupon->id)->decrement('usable_times', 1); + // 使用优惠券,减少可使用次数 + if (!empty($coupon)) { + if ($coupon->usable_times > 0) { + Coupon::whereId($coupon->id)->decrement('usable_times', 1); + } + + Helpers::addCouponLog('订单支付使用', $coupon->id, $goods_id, $order->id); } - Helpers::addCouponLog('订单支付使用', $coupon->id, $goods_id, $order->id); + $request->merge(['id' => $order->id, 'type' => $pay_type, 'amount' => $amount]); + + // 生成支付单 + return self::getClient()->purchase($request); + } catch (Exception $e) { + Log::error('订单生成错误:'.$e->getMessage()); } - $request->merge(['id' => $order->id, 'type' => $pay_type, 'amount' => $amount]); - - // 生成支付单 - return self::getClient()->purchase($request); + return Response::json(['status' => 'fail', 'message' => '订单创建失败']); } public function close(Request $request): JsonResponse diff --git a/app/Http/Requests/Admin/ShopUpdateRequest.php b/app/Http/Requests/Admin/ShopUpdateRequest.php index bb75b721..4c55076e 100644 --- a/app/Http/Requests/Admin/ShopUpdateRequest.php +++ b/app/Http/Requests/Admin/ShopUpdateRequest.php @@ -9,9 +9,9 @@ class ShopUpdateRequest extends FormRequest public function rules(): array { return [ - 'name' => 'required', - 'price' => 'required|numeric|min:0', - 'renew' => 'required_unless:type,2|min:0', + 'name' => 'required', + 'price' => 'required|numeric|min:0', + 'renew' => 'required_unless:type,2|min:0', ]; } } diff --git a/app/Observers/ConfigObserver.php b/app/Observers/ConfigObserver.php index 9b0f193b..cd157c1b 100644 --- a/app/Observers/ConfigObserver.php +++ b/app/Observers/ConfigObserver.php @@ -2,6 +2,7 @@ namespace App\Observers; +use App\Components\Helpers; use App\Models\Config; use Cache; use Illuminate\Support\Arr; @@ -14,9 +15,8 @@ class ConfigObserver Cache::tags('sysConfig')->put($config->name, $config->value ?? 0); // 如果在线支付方式出现变动,改变 在线支付 设置状态 - if (Arr::exists(['is_AliPay', 'is_QQPay', 'is_WeChatPay', 'is_otherPay'], $config->name)) { - $value = !empty(array_filter(Cache::many(['is_AliPay', 'is_QQPay', 'is_WeChatPay', 'is_otherPay']))); - Cache::tags('sysConfig')->put('is_onlinePay', $value); + if (Arr::exists(['is_AliPay', 'is_QQPay', 'is_WeChatPay', 'is_otherPay'], $config->name) && Cache::tags('sysConfig')->has('is_onlinePay')) { + Helpers::cacheSysConfig('is_onlinePay'); } } } diff --git a/composer.json b/composer.json index 01274baf..8a726d39 100644 --- a/composer.json +++ b/composer.json @@ -27,7 +27,6 @@ "phpoffice/phpspreadsheet": "^1.14", "rap2hpoutre/laravel-log-viewer": "^1.6", "riverslei/payment": "^5.1", - "simplesoftwareio/simple-qrcode": "^3.0", "spatie/laravel-permission": "^3.16", "srmklive/paypal": "^1.7", "xhat/payjs": "^1.4", diff --git a/composer.lock b/composer.lock index 30a38d8d..d12297ce 100644 --- a/composer.lock +++ b/composer.lock @@ -4,7 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "e2db37b70aa19f8085179e48a19780f1", + "content-hash": "f9bb804b87de132a939ed87ee1aa87e0", "packages": [ { "name": "asm89/stack-cors", @@ -58,55 +58,6 @@ ], "time": "2020-05-31T07:17:05+00:00" }, - { - "name": "bacon/bacon-qr-code", - "version": "2.0.0", - "source": { - "type": "git", - "url": "https://github.com/Bacon/BaconQrCode.git", - "reference": "eaac909da3ccc32b748a65b127acd8918f58d9b0" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/Bacon/BaconQrCode/zipball/eaac909da3ccc32b748a65b127acd8918f58d9b0", - "reference": "eaac909da3ccc32b748a65b127acd8918f58d9b0", - "shasum": "" - }, - "require": { - "dasprid/enum": "^1.0", - "ext-iconv": "*", - "php": "^7.1" - }, - "require-dev": { - "phly/keep-a-changelog": "^1.4", - "phpunit/phpunit": "^6.4", - "squizlabs/php_codesniffer": "^3.1" - }, - "suggest": { - "ext-imagick": "to generate QR code images" - }, - "type": "library", - "autoload": { - "psr-4": { - "BaconQrCode\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-2-Clause" - ], - "authors": [ - { - "name": "Ben Scholzen 'DASPRiD'", - "email": "mail@dasprids.de", - "homepage": "http://www.dasprids.de", - "role": "Developer" - } - ], - "description": "BaconQrCode is a QR code generator for PHP.", - "homepage": "https://github.com/Bacon/BaconQrCode", - "time": "2018-04-25T17:53:56+00:00" - }, { "name": "brick/math", "version": "0.9.1", @@ -229,49 +180,6 @@ ], "time": "2020-08-23T12:54:47+00:00" }, - { - "name": "dasprid/enum", - "version": "1.0.2", - "source": { - "type": "git", - "url": "https://github.com/DASPRiD/Enum.git", - "reference": "6ccc0d7141a7f149e3c56cb0ce5f05d9152cfd07" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/DASPRiD/Enum/zipball/6ccc0d7141a7f149e3c56cb0ce5f05d9152cfd07", - "reference": "6ccc0d7141a7f149e3c56cb0ce5f05d9152cfd07", - "shasum": "" - }, - "require-dev": { - "phpunit/phpunit": "^7 | ^8 | ^9", - "squizlabs/php_codesniffer": "^3.4" - }, - "type": "library", - "autoload": { - "psr-4": { - "DASPRiD\\Enum\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-2-Clause" - ], - "authors": [ - { - "name": "Ben Scholzen 'DASPRiD'", - "email": "mail@dasprids.de", - "homepage": "https://dasprids.de/", - "role": "Developer" - } - ], - "description": "PHP 7.1 enum implementation", - "keywords": [ - "enum", - "map" - ], - "time": "2020-07-30T16:37:13+00:00" - }, { "name": "dnoegel/php-xdg-base-dir", "version": "v0.1.1", @@ -763,27 +671,27 @@ }, { "name": "geoip2/geoip2", - "version": "v2.10.0", + "version": "v2.11.0", "source": { "type": "git", "url": "https://github.com/maxmind/GeoIP2-php.git", - "reference": "419557cd21d9fe039721a83490701a58c8ce784a" + "reference": "d01be5894a5c1a3381c58c9b1795cd07f96c30f7" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/maxmind/GeoIP2-php/zipball/419557cd21d9fe039721a83490701a58c8ce784a", - "reference": "419557cd21d9fe039721a83490701a58c8ce784a", + "url": "https://api.github.com/repos/maxmind/GeoIP2-php/zipball/d01be5894a5c1a3381c58c9b1795cd07f96c30f7", + "reference": "d01be5894a5c1a3381c58c9b1795cd07f96c30f7", "shasum": "" }, "require": { "ext-json": "*", - "maxmind-db/reader": "~1.5", - "maxmind/web-service-common": "~0.6", - "php": ">=5.6" + "maxmind-db/reader": "~1.8", + "maxmind/web-service-common": "~0.8", + "php": ">=7.2" }, "require-dev": { "friendsofphp/php-cs-fixer": "2.*", - "phpunit/phpunit": "5.*", + "phpunit/phpunit": "^8.0 || ^9.0", "squizlabs/php_codesniffer": "3.*" }, "type": "library", @@ -812,7 +720,7 @@ "geolocation", "maxmind" ], - "time": "2019-12-12T18:48:39+00:00" + "time": "2020-10-01T18:48:34+00:00" }, { "name": "guzzlehttp/guzzle", @@ -2064,23 +1972,23 @@ }, { "name": "maxmind-db/reader", - "version": "v1.7.0", + "version": "v1.8.0", "source": { "type": "git", "url": "https://github.com/maxmind/MaxMind-DB-Reader-php.git", - "reference": "942553da239f12051275f9c666538b5dd09e2908" + "reference": "b566d429ac9aec10594b0935be8ff38302f8d5c8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/maxmind/MaxMind-DB-Reader-php/zipball/942553da239f12051275f9c666538b5dd09e2908", - "reference": "942553da239f12051275f9c666538b5dd09e2908", + "url": "https://api.github.com/repos/maxmind/MaxMind-DB-Reader-php/zipball/b566d429ac9aec10594b0935be8ff38302f8d5c8", + "reference": "b566d429ac9aec10594b0935be8ff38302f8d5c8", "shasum": "" }, "require": { "php": ">=7.2" }, "conflict": { - "ext-maxminddb": "<1.7.0,>=2.0.0" + "ext-maxminddb": "<1.8.0,>=2.0.0" }, "require-dev": { "friendsofphp/php-cs-fixer": "2.*", @@ -2120,31 +2028,31 @@ "geolocation", "maxmind" ], - "time": "2020-08-07T22:10:05+00:00" + "time": "2020-10-01T17:30:21+00:00" }, { "name": "maxmind/web-service-common", - "version": "v0.7.0", + "version": "v0.8.0", "source": { "type": "git", "url": "https://github.com/maxmind/web-service-common-php.git", - "reference": "74c996c218ada5c639c8c2f076756e059f5552fc" + "reference": "ba67d9532cfaf499bd71774b8170d05df4f75fb7" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/maxmind/web-service-common-php/zipball/74c996c218ada5c639c8c2f076756e059f5552fc", - "reference": "74c996c218ada5c639c8c2f076756e059f5552fc", + "url": "https://api.github.com/repos/maxmind/web-service-common-php/zipball/ba67d9532cfaf499bd71774b8170d05df4f75fb7", + "reference": "ba67d9532cfaf499bd71774b8170d05df4f75fb7", "shasum": "" }, "require": { "composer/ca-bundle": "^1.0.3", "ext-curl": "*", "ext-json": "*", - "php": ">=5.6" + "php": ">=7.2" }, "require-dev": { "friendsofphp/php-cs-fixer": "2.*", - "phpunit/phpunit": "^4.8.36 || ^5.7 || ^6.5 || ^7.0", + "phpunit/phpunit": "^8.0 || ^9.0", "squizlabs/php_codesniffer": "3.*" }, "type": "library", @@ -2166,7 +2074,7 @@ ], "description": "Internal MaxMind Web Service API", "homepage": "https://github.com/maxmind/web-service-common-php", - "time": "2020-05-06T14:07:26+00:00" + "time": "2020-10-01T15:28:36+00:00" }, { "name": "mews/captcha", @@ -3757,70 +3665,6 @@ ], "time": "2020-05-04T03:07:17+00:00" }, - { - "name": "simplesoftwareio/simple-qrcode", - "version": "3.0.0", - "source": { - "type": "git", - "url": "https://github.com/SimpleSoftwareIO/simple-qrcode.git", - "reference": "151dd397426d9a6c0507c96e61ddd2ca1290ce1e" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/SimpleSoftwareIO/simple-qrcode/zipball/151dd397426d9a6c0507c96e61ddd2ca1290ce1e", - "reference": "151dd397426d9a6c0507c96e61ddd2ca1290ce1e", - "shasum": "" - }, - "require": { - "bacon/bacon-qr-code": "2.0.0", - "ext-gd": "*", - "php": ">=7.2" - }, - "require-dev": { - "mockery/mockery": "~1", - "phpunit/phpunit": "~9" - }, - "suggest": { - "ext-imagick": "Allows the generation of PNG QrCodes.", - "illuminate/support": "Allows for use within Laravel." - }, - "type": "library", - "extra": { - "laravel": { - "providers": [ - "SimpleSoftwareIO\\QrCode\\ServiceProvider" - ], - "aliases": { - "QrCode": "SimpleSoftwareIO\\QrCode\\Facade" - } - } - }, - "autoload": { - "psr-4": { - "SimpleSoftwareIO\\QrCode\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Simple Software LLC", - "email": "support@simplesoftware.io" - } - ], - "description": "Simple QrCode is a QR code generator made for Laravel.", - "homepage": "http://www.simplesoftware.io", - "keywords": [ - "Simple", - "generator", - "laravel", - "qrcode", - "wrapper" - ], - "time": "2020-06-02T20:41:21+00:00" - }, { "name": "spatie/laravel-permission", "version": "3.17.0", diff --git a/public/assets/custom/qart.min.js b/public/assets/custom/qart.min.js new file mode 100644 index 00000000..cdf95205 --- /dev/null +++ b/public/assets/custom/qart.min.js @@ -0,0 +1,2 @@ +!function(e,n){"object"==typeof exports&&"object"==typeof module?module.exports=n():"function"==typeof define&&define.amd?define([],n):"object"==typeof exports?exports.qart=n():e.qart=n()}(window,function(){return function(e){var n={};function t(r){if(n[r])return n[r].exports;var i=n[r]={i:r,l:!1,exports:{}};return e[r].call(i.exports,i,i.exports,t),i.l=!0,i.exports}return t.m=e,t.c=n,t.d=function(e,n,r){t.o(e,n)||Object.defineProperty(e,n,{enumerable:!0,get:r})},t.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},t.t=function(e,n){if(1&n&&(e=t(e)),8&n)return e;if(4&n&&"object"==typeof e&&e&&e.__esModule)return e;var r=Object.create(null);if(t.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:e}),2&n&&"string"!=typeof e)for(var i in e)t.d(r,i,function(n){return e[n]}.bind(null,i));return r},t.n=function(e){var n=e&&e.__esModule?function(){return e.default}:function(){return e};return t.d(n,"a",n),n},t.o=function(e,n){return Object.prototype.hasOwnProperty.call(e,n)},t.p="../dist/",t(t.s=3)}([function(e,n,t){var r,i,o,a=function(){var e=function(e,t){var r=e,i=u[t],o=null,a=0,l=null,m=new Array,p={},Z=function(e,n){o=function(e){for(var n=new Array(e),t=0;t=7&&d(e),null==l&&(l=I(r,i,m)),j(l,n)},f=function(e,n){for(var t=-1;t<=7;t+=1)if(!(e+t<=-1||a<=e+t))for(var r=-1;r<=7;r+=1)n+r<=-1||a<=n+r||(o[e+t][n+r]=t>=0&&t<=6&&(0==r||6==r)||r>=0&&r<=6&&(0==t||6==t)||t>=2&&t<=4&&r>=2&&r<=4)},g=function(){for(var e=8;e>t&1);o[Math.floor(t/3)][t%3+a-8-3]=i}for(t=0;t<18;t+=1){i=!e&&1==(n>>t&1);o[t%3+a-8-3][Math.floor(t/3)]=i}},c=function(e,n){for(var t=i<<3|n,r=W.getBCHTypeInfo(t),l=0;l<15;l+=1){var m=!e&&1==(r>>l&1);l<6?o[l][8]=m:l<8?o[l+1][8]=m:o[a-15+l][8]=m}for(l=0;l<15;l+=1){m=!e&&1==(r>>l&1);l<8?o[8][a-l-1]=m:l<9?o[8][15-l-1+1]=m:o[8][15-l-1]=m}o[a-8][8]=!e},j=function(e,n){for(var t=-1,r=a-1,i=7,l=0,m=W.getMaskFunction(n),u=a-1;u>0;u-=2)for(6==u&&(u-=1);;){for(var p=0;p<2;p+=1)if(null==o[r][u-p]){var Z=!1;l>>i&1)),m(r,u-p)&&(Z=!Z),o[r][u-p]=Z,-1==(i-=1)&&(l+=1,i=7)}if((r+=t)<0||a<=r){r-=t,t=-t;break}}};function Y(e){this.message=e,this.name="CodeLengthOverflow"}var I=function(e,n,t){for(var r=J.getRSBlocks(e,n),i=O(),o=0;o8*l)throw new Y("code length overflow. ("+i.getLengthInBits()+">"+8*l+")");for(i.getLengthInBits()+4<=8*l&&i.put(0,4);i.getLengthInBits()%8!=0;)i.putBit(!1);for(;!(i.getLengthInBits()>=8*l||(i.put(236,8),i.getLengthInBits()>=8*l));)i.put(17,8);return function(e,n){for(var t=0,r=0,i=0,o=new Array(n.length),a=new Array(n.length),l=0;l=0?f.getAt(g):0}}var h=0;for(p=0;pr)&&(e=r,n=t)}return n}())},p.createTableTag=function(e,n){e=e||2;var t="";t+='',t+="";for(var r=0;r";for(var i=0;i';t+=""}return t+="",t+="
"},p.createSvgTag=function(e,n){e=e||2,n=void 0===n?4*e:n;var t,r,i,o,a=p.getModuleCount()*e+2*n,l="";for(o="l"+e+",0 0,"+e+" -"+e+",0 0,-"+e+"z ",l+=">>8),n.push(255&a)):n.push(r)}}return n}};var t,r,i,o=1,a=2,l=4,m=8,u={L:1,M:0,Q:3,H:2},p=0,Z=1,f=2,g=3,h=4,d=5,c=6,j=7,W=(t=[[],[6,18],[6,22],[6,26],[6,30],[6,34],[6,22,38],[6,24,42],[6,26,46],[6,28,50],[6,30,54],[6,32,58],[6,34,62],[6,26,46,66],[6,26,48,70],[6,26,50,74],[6,30,54,78],[6,30,56,82],[6,30,58,86],[6,34,62,90],[6,28,50,72,94],[6,26,50,74,98],[6,30,54,78,102],[6,28,54,80,106],[6,32,58,84,110],[6,30,58,86,114],[6,34,62,90,118],[6,26,50,74,98,122],[6,30,54,78,102,126],[6,26,52,78,104,130],[6,30,56,82,108,134],[6,34,60,86,112,138],[6,30,58,86,114,142],[6,34,62,90,118,146],[6,30,54,78,102,126,150],[6,24,50,76,102,128,154],[6,28,54,80,106,132,158],[6,32,58,84,110,136,162],[6,26,54,82,110,138,166],[6,30,58,86,114,142,170]],i=function(e){for(var n=0;0!=e;)n+=1,e>>>=1;return n},(r={}).getBCHTypeInfo=function(e){for(var n=e<<10;i(n)-i(1335)>=0;)n^=1335<=0;)n^=7973<=1&&n<10)switch(e){case o:return 10;case a:return 9;case l:case m:return 8;default:throw new Error("mode:"+e)}else if(n<27)switch(e){case o:return 12;case a:return 11;case l:return 16;case m:return 10;default:throw new Error("mode:"+e)}else{if(!(n<41))throw new Error("type:"+n);switch(e){case o:return 14;case a:return 13;case l:return 16;case m:return 12;default:throw new Error("mode:"+e)}}},r.getLostPoint=function(e){for(var n=e.getModuleCount(),t=0,r=0;r5&&(t+=3+o-5)}for(r=0;r=256;)n-=255;return e[n]}};return r}();function k(e,n){if(void 0===e.length)throw new Error(e.length+"/"+n);var t=function(){for(var t=0;t>>7-n%8&1)},put:function(e,n){for(var r=0;r>>n-r-1&1))},getLengthInBits:function(){return n},putBit:function(t){var r=Math.floor(n/8);e.length<=r&&e.push(0),t&&(e[r]|=128>>>n%8),n+=1}};return t},V=function(e){var n=o,t=e,r={getMode:function(){return n},getLength:function(e){return t.length},write:function(e){for(var n=t,r=0;r+2="0"&&e<="9")return e.charCodeAt(0)-"0".charCodeAt(0);throw"illegal char :"+e};return r},X=function(e){var n=a,t=e,r={getMode:function(){return n},getLength:function(e){return t.length},write:function(e){for(var n=t,r=0;r+1="0"&&e<="9")return e.charCodeAt(0)-"0".charCodeAt(0);if(e>="A"&&e<="Z")return e.charCodeAt(0)-"A".charCodeAt(0)+10;switch(e){case" ":return 36;case"$":return 37;case"%":return 38;case"*":return 39;case"+":return 40;case"-":return 41;case".":return 42;case"/":return 43;case":":return 44;default:throw"illegal char :"+e}};return r},s=function(n){var t=l,r=e.stringToBytes(n),i={getMode:function(){return t},getLength:function(e){return r.length},write:function(e){for(var n=0;n=33088&&i<=40956)i-=33088;else{if(!(i>=57408&&i<=60351))throw"illegal char at "+(t+1)+"/"+i;i-=49472}i=192*(i>>>8&255)+(255&i),e.put(i,13),t+=2}if(t>>8)},writeBytes:function(e,t,r){t=t||0,r=r||e.length;for(var i=0;i0&&(n+=","),n+=e[t];return n+="]"}};return n},A=function(){var e=0,n=0,t=0,r="",i={},o=function(e){r+=String.fromCharCode(a(63&e))},a=function(e){if(e<0);else{if(e<26)return 65+e;if(e<52)return e-26+97;if(e<62)return e-52+48;if(62==e)return 43;if(63==e)return 47}throw new Error("n:"+e)};return i.writeByte=function(r){for(e=e<<8|255&r,n+=8,t+=1;n>=6;)o(e>>>n-6),n-=6},i.flush=function(){if(n>0&&(o(e<<6-n),e=0,n=0),t%3!=0)for(var i=3-t%3,a=0;a=n.length){if(0==i)return-1;throw new Error("unexpected end of file./"+i)}var e=n.charAt(t);if(t+=1,"="==e)return i=0,-1;e.match(/^\s$/)||(r=r<<6|a(e.charCodeAt(0)),i+=6)}var o=r>>>i-8&255;return i-=8,o}},a=function(e){if(e>=65&&e<=90)return e-65;if(e>=97&&e<=122)return e-97+26;if(e>=48&&e<=57)return e-48+52;if(43==e)return 62;if(47==e)return 63;throw new Error("c:"+e)};return o},G=function(e,n){var t=e,r=n,i=new Array(e*n),o={setPixel:function(e,n,r){i[n*t+e]=r},write:function(e){e.writeString("GIF87a"),e.writeShort(t),e.writeShort(r),e.writeByte(128),e.writeByte(0),e.writeByte(0),e.writeByte(0),e.writeByte(0),e.writeByte(0),e.writeByte(255),e.writeByte(255),e.writeByte(255),e.writeString(","),e.writeShort(0),e.writeShort(0),e.writeShort(t),e.writeShort(r),e.writeByte(0);var n=a(2);e.writeByte(2);for(var i=0;n.length-i>255;)e.writeByte(255),e.writeBytes(n,i,255),i+=255;e.writeByte(n.length-i),e.writeBytes(n,i,n.length-i),e.writeByte(0),e.writeString(";")}},a=function(e){for(var n=1<>>n!=0)throw new Error("length over");for(;u+n>=8;)m.writeByte(255&(e<>>=8-u,p=0,u=0;p|=e<0&&m.writeByte(p)}});f.write(n,r);var g=0,h=String.fromCharCode(i[g]);for(g+=1;g>6,128|63&r):r<55296||r>=57344?n.push(224|r>>12,128|r>>6&63,128|63&r):(t++,r=65536+((1023&r)<<10|1023&e.charCodeAt(t)),n.push(240|r>>18,128|r>>12&63,128|r>>6&63,128|63&r))}return n}(e)},i=[],void 0===(o="function"==typeof(r=function(){return{QRCode:a.qrcode,QRUtil:a.QRUtil}})?r.apply(n,i):r)||(e.exports=o)},function(e,n,t){const r=t(2);n.parseFont=r,n.createCanvas=function(e,n){return Object.assign(document.createElement("canvas"),{width:e,height:n})},n.createImageData=function(e,n,t){switch(arguments.length){case 0:return new ImageData;case 1:return new ImageData(e);case 2:return new ImageData(e,n);default:return new ImageData(e,n,t)}},n.loadImage=function(e){return new Promise((n,t)=>{const r=document.createElement("img");function i(){r.onload=null,r.onerror=null}r.onload=(()=>{i(),n(r)}),r.onerror=(()=>{i(),t(new Error(`Failed to load the image "${e}"`))}),r.src=e})}},function(e,n,t){"use strict";const r="'([^']+)'|\"([^\"]+)\"|[\\w\\s-]+",i=new RegExp("(bold|bolder|lighter|[1-9]00) +","i"),o=new RegExp("(italic|oblique) +","i"),a=new RegExp("(small-caps) +","i"),l=new RegExp("(ultra-condensed|extra-condensed|condensed|semi-condensed|semi-expanded|expanded|extra-expanded|ultra-expanded) +","i"),m=new RegExp("([\\d\\.]+)(px|pt|pc|in|cm|mm|%|em|ex|ch|rem|q) *((?:"+r+")( *, *(?:"+r+"))*)"),u={};e.exports=function(e){if(u[e])return u[e];const n=m.exec(e);if(!n)return;const t={weight:"normal",style:"normal",stretch:"normal",variant:"normal",size:parseFloat(n[1]),unit:n[2],family:n[3].replace(/["']/g,"").replace(/ *, */g,",")};let r,p,Z,f,g=e.substring(0,n.index);switch((r=i.exec(g))&&(t.weight=r[1]),(p=o.exec(g))&&(t.style=p[1]),(Z=a.exec(g))&&(t.variant=Z[1]),(f=l.exec(g))&&(t.stretch=f[1]),t.unit){case"pt":t.size/=.75;break;case"pc":t.size*=16;break;case"in":t.size*=96;break;case"cm":t.size*=96/2.54;break;case"mm":t.size*=96/25.4;break;case"%":break;case"em":case"rem":t.size*=16/.75;break;case"q":t.size*=96/25.4/4}return u[e]=t}},function(e,n,t){"use strict";t.r(n);var r=t(0),i=t(1);var o=class{static createCanvas(e,n,t="fill"){var r=Object(i.createCanvas)();if(r.width=e,r.height=e,n)switch(t){case"fill":r.getContext("2d").drawImage(n,0,0,e,e);break;case"scale_to_fit":var o=n.width/n.height,a=r.width,l=a/o;l>r.height&&(a=(l=r.height)*o);var m=.5*(r.width-a),u=.5*(r.height-l);r.getContext("2d").drawImage(n,m,u,a,l)}return r}static threshold(e,n,t,r){return.2126*e+.7152*n+.0722*t>=r?255:0}};class a{constructor(e){if(void 0===e)throw new TypeError("QArt required `options`.");if(void 0===e.value)throw new TypeError("QArt required `value` option.");if(void 0===e.imagePath)throw new TypeError("QArt required `imagePath` option.");this.size=void 0===e.size?a.DEFAULTS.size:e.size,this.filter=void 0===e.filter?a.DEFAULTS.filter:e.filter,this.value=e.value,this.imagePath=e.imagePath,this.version=void 0===e.version?a.DEFAULTS.version:e.version,this.fillType=void 0===e.fillType?a.DEFAULTS.fillType:e.fillType,this.background=e.background}static get DEFAULTS(){return{size:195,value:"",filter:"threshold",version:10,fillType:"scale_to_fit"}}findWorkingVersion(e){var n=e;r.QRCode.stringToBytes=r.QRCode.stringToBytesFuncs["UTF-8"];for(var t=Object(r.QRCode)(e,"H"),i=e;i<=40;i++){try{(t=Object(r.QRCode)(n,"H")).addData(this.value),t.make()}catch(e){if(console.log("Error: ",e),"CodeLengthOverflow"===e.name){n+=1,console.log("Can't create QRCode need up version, current version",n);continue}throw e}return n}}make(e){var n=this.findWorkingVersion(this.version),t=Object(r.QRCode)(n,"H");t.addData(this.value),t.make(),r.QRCode.stringToBytes=r.QRCode.stringToBytesFuncs["UTF-8"];var i=t.createImgObject(3),a=75+12*n,l=12*this.size/a,m=this;i.onload=function(){var t=new Image;t.src=m.imagePath;var p=o.createCanvas(a,i),Z=o.createCanvas(a,i);if(void 0!==m.background){var f=o.createCanvas(m.size,new Image),g=f.getContext("2d");g.fillStyle=m.background,g.fillRect(0,0,f.width,f.height)}t.onload=function(){t.width=a-12||j>=a-12)h[d+3]=0;else if((c%3!=1||j%3!=1)&&!(c<36&&(j<36||j>=a-36)||c>=a-36&&j<36)){if("threshold"===m.filter){var W=o.threshold(u[d],u[d+1],u[d+2],127);h[d]=W,h[d+1]=W,h[d+2]=W}else"color"===m.filter&&(h[d]=u[d],h[d+1]=u[d+1],h[d+2]=u[d+2]);h[d+3]=u[d+3]}}p.getContext("2d").putImageData(g,0,0);var Y=r.QRUtil.getPatternPosition(n);for(d=0;d {{$loop->iteration}} - {{$node->name}} + {{$node->name}} @if($node->compatible) @endif @@ -75,38 +75,42 @@ @endsection diff --git a/resources/views/user/index.blade.php b/resources/views/user/index.blade.php index 146cade7..7f914a97 100644 --- a/resources/views/user/index.blade.php +++ b/resources/views/user/index.blade.php @@ -141,7 +141,7 @@
@if(sysConfig('is_push_bear') && sysConfig('push_bear_qrcode'))

微信公告推送

- 支付二维码 +
@else

交流群

@endif @@ -220,7 +220,6 @@
- @endsection @section('script') @@ -228,6 +227,21 @@ + @if(sysConfig('is_push_bear') && sysConfig('push_bear_qrcode')) + + + @endif + + @endif +