Ver código fonte

强化自定义订阅 添加前端

兔姬桑 4 anos atrás
pai
commit
4703394026

+ 1 - 1
app/Components/Client/QuantumultX.php

@@ -27,7 +27,7 @@ class QuantumultX
             "password={$server['passwd']}",
             "ssr-protocol={$server['protocol']}",
             "ssr-protocol-param={$server['protocol_param']}",
-            "obfs={$server['obs']}",
+            "obfs={$server['obfs']}",
             "obfs-host={$server['obfs_param']}",
             'fast-open=true',
             "udp-relay={$server['udp']}",

+ 1 - 1
app/Http/Controllers/User/SubscribeController.php

@@ -105,7 +105,7 @@ class SubscribeController extends Controller
         }
 
         if ($target) {
-            if (strpos($target, 'quantumult%20x') !== false) {
+            if (strpos($target, 'quantumult x') !== false) {
                 exit($this->quantumultX($user, $servers));
             }
             if (strpos($target, 'quantumult') !== false) {

+ 16 - 0
app/Http/Controllers/UserController.php

@@ -64,6 +64,22 @@ class UserController extends Controller
         //付费用户判断
         $view['paying_user'] = $user->activePayingUser();
         $view['userLoginLog'] = UserLoginLog::whereUserId($user->id)->latest()->first(); // 近期登录日志
+
+        $nodes = $user->userAccessNodes()->get();
+        $subType = [];
+        if ($nodes->whereIn('type', [1, 4])->isNotEmpty()) {
+            $subType[] = 'ss';
+        }
+        if ($nodes->where('type', 2)->isNotEmpty()) {
+            $subType[] = 'v2';
+        }
+        if ($nodes->where('type', 3)->isNotEmpty()) {
+            $subType[] = 'trojan';
+        }
+
+        $view['subscribe_status'] = $user->subscribe->status;
+        $view['subType'] = $subType;
+        $view['subUrl'] = route('sub', $user->subscribe->code);
         $view = array_merge($view, $this->dataFlowChart($user->id));
 
         return view('user.index', $view);

+ 0 - 1
resources/views/admin/logs/onlineIPMonitor.blade.php

@@ -95,7 +95,6 @@
 @section('javascript')
     <script src="/assets/global/vendor/bootstrap-table/bootstrap-table.min.js" type="text/javascript"></script>
     <script src="/assets/global/vendor/bootstrap-table/extensions/mobile/bootstrap-table-mobile.min.js" type="text/javascript"></script>
-    <script src="/assets/custom/Plugin/clipboardjs/clipboard.min.js" type="text/javascript"></script>
     <script type="text/javascript">
       //回车检测
       $(document).on('keypress', 'input', function(e) {

+ 1 - 3
resources/views/user/help.blade.php

@@ -56,9 +56,7 @@
                                                                     </button>
                                                                     <div class="dropdown-menu" aria-labelledby="sublink" role="menu">
                                                                         @if(in_array('ss',$sub))
-                                                                            <button class="dropdown-item" onclick="linkManager('1')" role="menuitem">
-                                                                                只订阅SS/SSR
-                                                                            </button>
+                                                                            <a class="dropdown-item" onclick="linkManager('1')" role="menuitem">只订阅SS/SSR</a>
                                                                         @endif
                                                                         @if(in_array('v2',$sub))
                                                                             <a class="dropdown-item" onclick="linkManager('2')" role="menuitem">只订阅V2Ray</a>

+ 116 - 3
resources/views/user/index.blade.php

@@ -1,5 +1,6 @@
 @extends('user.layouts')
 @section('css')
+    <link href="/assets/global/vendor/bootstrap-select/bootstrap-select.min.css" rel="stylesheet">
     <link href="/assets/global/fonts/font-awesome/font-awesome.min.css" type="text/css" rel="stylesheet">
     <link href="/assets/global/vendor/aspieprogress/asPieProgress.min.css" type="text/css" rel="stylesheet">
 @endsection
@@ -133,9 +134,64 @@
             </div>
             <div class="col-xxl-9 col-xl-8 col-lg-7 col-md-6 col-12">
                 <div class="row" data-plugin="matchHeight" data-by-row="true">
-                    <div class="col-xl-4 col-lg-6 mb-30">
+                    <div class="col-xl-4 mb-30">
                         <div class="card card-shadow h-full">
-                            <div class="card-block text-center p-20">
+                            <div class="card-block text-center">
+                                <h3 class="card-header-transparent"><i class="icon wb-link-intact"></i> 订 阅 链 接 </h3>
+                                @if($subscribe_status)
+                                    <div class="card-body">
+                                        @if(count($subType)>1)
+                                            <div class="form-group row">
+                                                <label class="col-md-auto col-form-label" for="subType">自定义订阅</label>
+                                                <div class="col">
+                                                    <select class="form-control" id="subType" name="subType" data-plugin="selectpicker" data-style="btn-outline btn-primary">
+                                                        <option value="" hidden>全 部</option>
+                                                        @if(in_array('ss',$subType))
+                                                            <option value="1">只订阅SS/SSR</option>
+                                                        @endif
+                                                        @if(in_array('v2',$subType))
+                                                            <option value="2">只订阅V2Ray</option>
+                                                        @endif
+                                                        @if(in_array('trojan',$subType))
+                                                            <option value="3">只订阅Trojan</option>
+                                                        @endif
+                                                    </select>
+                                                </div>
+                                            </div>
+                                        @endif
+                                        <div class="form-group row">
+                                            <label class="col-md-auto col-form-label" for="client">客户端 DIY</label>
+                                            <div class="col">
+                                                <select class="form-control" id="client" name="client" data-plugin="selectpicker" data-style="btn-outline btn-primary">
+                                                    <option value="" hidden>默 认</option>
+                                                    <option value="quantumult">圈 - Quantumult</option>
+                                                    <option value="quantumult x">圈X - QuantumultX</option>
+                                                    <option value="clash">Clash</option>
+                                                    <option value="surfboard">Surfboard</option>
+                                                    <option value="surge">Surge</option>
+                                                    <option value="shadowrocket">小火箭 - Shadowrocket</option>
+                                                    <option value="shadowsocks">SS路由器</option>
+                                                </select>
+                                            </div>
+                                        </div>
+                                    </div>
+                                    <div class="card-footer-transparent btn-group">
+                                        <button class="btn btn-outline-danger" onclick="exchangeSubscribe();">
+                                            <i class="icon wb-refresh" aria-hidden="true"></i>
+                                            {{trans('home.exchange_subscribe')}}</button>
+                                        <button class="btn btn-outline-info mt-clipboard" data-clipboard-action="copy">
+                                            <i class="icon wb-copy" aria-hidden="true"></i>
+                                            {{trans('home.copy_subscribe_address')}}</button>
+                                    </div>
+                                @else
+                                    <x-alert type="danger" :message="trans('home.subscribe_baned')"/>
+                                @endif
+                            </div>
+                        </div>
+                    </div>
+                    <div class="col-xl-4 mb-30">
+                        <div class="card card-shadow h-full">
+                            <div class="card-block text-center">
                                 <i class="font-size-40 wb-wrench"></i>
                                 <h4 class="card-title">客户端</h4>
                                 <p class="card-text">下载 & 教程 </p>
@@ -143,7 +199,7 @@
                             </div>
                         </div>
                     </div>
-                    <div class="col-xl-4 col-lg-6 mb-30">
+                    <div class="col-xl-4 mb-30">
                         <div class="card card-shadow text-center h-full">
                             <div class="card-block">
                                 @if(sysConfig('is_push_bear') && sysConfig('push_bear_qrcode'))
@@ -220,11 +276,14 @@
     </div>
 @endsection
 @section('javascript')
+    <script src="/assets/custom/Plugin/clipboardjs/clipboard.min.js" type="text/javascript"></script>
     <script src="/assets/global/vendor/aspieprogress/jquery-asPieProgress.js" type="text/javascript"></script>
     <script src="/assets/global/vendor/matchheight/jquery.matchHeight-min.js" type="text/javascript"></script>
     <script src="/assets/global/vendor/chart-js/Chart.min.js" type="text/javascript"></script>
+    <script src="/assets/global/vendor/bootstrap-select/bootstrap-select.min.js" type="text/javascript"></script>
     <script src="/assets/global/js/Plugin/aspieprogress.js" type="text/javascript"></script>
     <script src="/assets/global/js/Plugin/matchheight.js" type="text/javascript"></script>
+    <script src="/assets/global/js/Plugin/bootstrap-select.js" type="text/javascript"></script>
     @if(sysConfig('is_push_bear') && sysConfig('push_bear_qrcode'))
         <script src="/assets/custom/easy.qrcode.min.js"></script>
         <script type="text/javascript">
@@ -242,6 +301,60 @@
         </script>
     @endif
     <script type="text/javascript">
+      // 更换订阅地址
+      function exchangeSubscribe() {
+        swal.fire({
+          title: '警告',
+          text: '更换订阅地址将导致:\n1.旧地址立即失效\n2.连接密码被更改',
+          icon: 'warning',
+          showCancelButton: true,
+          cancelButtonText: '{{trans('home.ticket_close')}}',
+          confirmButtonText: '{{trans('home.ticket_confirm')}}',
+        }).then((result) => {
+          if (result.value) {
+            $.post('{{route('changeSub')}}', {_token: '{{csrf_token()}}'}, function(ret) {
+              if (ret.status === 'success') {
+                swal.fire({title: ret.message, icon: 'success', timer: 1000, showConfirmButton: false}).then(() => window.location.reload());
+              } else {
+                swal.fire({title: ret.message, icon: 'error'}).then(() => window.location.reload());
+              }
+            });
+          }
+        });
+      }
+
+      const clipboard = new ClipboardJS('.mt-clipboard', {
+        text: function(trigger) {
+          let base = @json($subUrl);
+          const client = $('#client').val();
+          const subType = $('#subType').val();
+          if (subType && client) {
+            base += '?target=' + client + '&type=' + subType;
+          } else if (subType) {
+            base += '?type=' + subType;
+          } else if (client) {
+            base += '?target=' + client;
+          }
+          return base;
+        },
+      });
+      clipboard.on('success', function() {
+        swal.fire({
+          title: '复制成功',
+          icon: 'success',
+          timer: 1300,
+          showConfirmButton: false,
+        });
+      });
+      clipboard.on('error', function() {
+        swal.fire({
+          title: '复制失败,请手动复制',
+          icon: 'error',
+          timer: 1500,
+          showConfirmButton: false,
+        });
+      });
+
       // 签到
       function checkIn() {
         $.post('{{route('checkIn')}}', {_token: '{{csrf_token()}}'}, function(ret) {