alroyso hace 1 año
padre
commit
3d4f3698bf

+ 1 - 1
.env

@@ -1,7 +1,7 @@
 APP_NAME=奈油
 APP_ENV=production
 APP_KEY=base64:Bw0+6tGVYIquLRQpK72+nk64mtqgkEPfJU3Ukf+4wvY=
-APP_DEBUG=false
+APP_DEBUG=true
 APP_DEMO=false
 APP_URL=https://user.naiyout.buzz/
 APP_TIMEZONE=Asia/Shanghai

+ 1 - 1
.idea/dataSources.local.xml

@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <project version="4">
-  <component name="dataSourceStorageLocal" created-in="PS-231.9161.47">
+  <component name="dataSourceStorageLocal" created-in="PS-231.9225.18">
     <data-source name="api_niubiyun_xyz@47.243.54.62" uuid="1e09a6f5-c562-4514-a27d-37e0d8ac0291">
       <database-info product="MySQL" version="5.7.37-log" jdbc-version="4.2" driver-name="MySQL Connector/J" driver-version="mysql-connector-java-8.0.25 (Revision: 08be9e9b4cba6aa115f9b27b215887af40b159e0)" dbms="MYSQL" exact-version="5.7.37" exact-driver-version="8.0">
         <extra-name-characters>#@</extra-name-characters>

+ 22 - 1
app/Components/Client/Clash.php

@@ -60,7 +60,7 @@ class Clash
             } else if(!empty($server['v2_host'])){
                 $array['servername'] = $server['v2_host'];
             }
-            
+
         }
         $array['network'] = $server['v2_net'];
 
@@ -72,6 +72,27 @@ class Clash
         return $array;
     }
 
+
+    public static function buildVless($server)
+    {
+        $array = [
+            'name' => $server['name'],
+            'type' => 'vless',
+            'server' => $server['host'],
+            'port' => $server['port'],
+            'uuid' => $server['uuid'],
+            'alterId' => $server['v2_alter_id'],
+            'udp' => $server['udp'],
+            'flow' => 'xtls-rprx-vision',
+            'servername' => $server['v2_sni'],
+            'tls' => true
+        ];
+        //'reality-opts' => $server['v2_sni'],
+        $array['reality-opts'] = ['public-key' => $server['vless_pulkey']];
+        $array['client-fingerprint'] = 'chrome';
+
+        return $array;
+    }
     public static function buildTrojan($server)
     {
         $array = [

+ 26 - 0
app/Components/Client/URLSchemes.php

@@ -56,6 +56,32 @@ class URLSchemes
         return 'vmess://'.base64_encode(json_encode($config)).PHP_EOL;
     }
 
+    //vless://6478f959-c97c-43a2-a7de-256167db0f70@93.179.124.145:51510?encryption=none&flow=xtls-rprx-vision&security=reality&sni=www.amazon.com&fp=chrome&pbk=qhTzYYIgBzDLNYR79oxftqdo1kzL-1_hGJKfqrOliCY&type=tcp&headerType=none#93.179.124.145
+    public static function buildVless($server)
+    {
+        $config = [
+            'v' => '2',
+            'ps' => $server['name'],
+            'add' => $server['host'],
+            'port' => $server['port'],
+            'id' => $server['uuid'],
+            'aid' => $server['v2_alter_id'],
+            'net' => $server['v2_net'],
+            'type' => $server['v2_type'],
+            'host' => $server['v2_host'],
+            'path' => $server['v2_path'],
+            'tls' => $server['v2_tls'],
+            'sni' =>  $server['v2_sni'],
+            'flow' => 'xtls-rprx-vision',
+            'security' => 'reality',
+            'fp' => 'chrome',
+            'pbk' => 'qhTzYYIgBzDLNYR79oxftqdo1kzL-1_hGJKfqrOliCY',
+            'headerType' => 'none',
+        ];
+      return "vless://{$server['uuid']}@{$server['host']}:{$server['port']}?encryption=none&flow=xtls-rprx-vision&security=reality&sni={$server['v2_sni']}&fp=chrome&pbk=qhTzYYIgBzDLNYR79oxftqdo1kzL-1_hGJKfqrOliCY&type=tcp&headerType=none#{$server['name']}".PHP_EOL;
+       // return 'vless://'.base64_encode(json_encode($config)).PHP_EOL;
+    }
+
     public static function buildTrojan($server)
     {
         $name = rawurlencode($server['name']);

+ 2 - 1
app/Http/Controllers/Admin/NodeController.php

@@ -47,7 +47,7 @@ class NodeController extends Controller
         if (isset($serverip)){
             $query->where("server","like",'%'.$serverip.'%');
         }
-        
+
         if (isset($v2_sni)){
             $query->Where("v2_sni","like",'%'.$v2_sni.'%');
         }
@@ -89,6 +89,7 @@ class NodeController extends Controller
     public function store(NodeRequest $request): JsonResponse
     {
         $array = $request->validated();
+
         Arr::forget($array, ['labels']);
         try {
             if ($node = Node::create($array)) {

+ 1 - 1
app/Http/Controllers/Api/Client/V1Controller.php

@@ -300,7 +300,7 @@ class V1Controller extends Controller
        // $nodes = $user->nodes()->get();
         $query = $user->nodes()->with(['labels', 'level_table','onlineLogs']);
         $nodeList = $query->where(function ($q){
-            $q->where('type','=',0)->orwhere('type','=',4);
+            $q->where('type','=',0)->orwhere('type','=',4)->orwhere('vless','=',0);
         })->orderByDesc('sort')->orderBy('id')->get();
 
         //$nodeList = $query->orderByDesc('sort')->orderBy('id')->get();

+ 1 - 1
app/Http/Controllers/Api/Client/V3Controller.php

@@ -357,7 +357,7 @@ class V3Controller  extends Controller
     {
         $user = auth()->user();
         $query = $user->nodes()->with(['labels', 'level_table','onlineLogs']);
-        $nodeList = $query->where("type",'!=',2)->orderByDesc('sort')->orderBy('id')->get();
+        $nodeList = $query->where("type",'!=',2)->where("vless",'=',0)->orderByDesc('sort')->orderBy('id')->get();
         //var_dump($nodes); die();
         if (isset($id)) {
             $nodes = $user->nodes()->get();

+ 14 - 2
app/Http/Controllers/Api/Client/V4Controller.php

@@ -95,16 +95,28 @@ class V4Controller  extends Controller
         return response()->json(['ret' => 1, 'data' => $servers], 200);
     }
 
+
     /**
      * 获取全部节点
      * @param int|null $id
      * @return \Illuminate\Http\JsonResponse
      */
-    public function nodeList(int $id = null)
+    public function nodeList(Request  $request,int $id = null)
     {
+
+        $isVless = $request->input("vless");
         $user = auth()->user();
         $query = $user->nodes()->with(['labels', 'level_table','onlineLogs']);
-        $nodeList = $query->orderByDesc('sort')->orderBy('id')->get();
+        if (empty($isVless)){
+            $isVless = 0;
+        }
+
+        if ($isVless == 1){
+            $nodeList = $query->orderByDesc('sort')->orderBy('id')->get();
+        } else {
+            $nodeList = $query->where("vless",'=',0)->orderByDesc('sort')->orderBy('id')->get();
+        }
+
         //var_dump($nodes); die();
         if (isset($id)) {
             $nodes = $user->nodes()->get();

+ 17 - 1
app/Http/Controllers/ClientController.php

@@ -33,6 +33,9 @@ class ClientController extends Controller
         if (strpos($target, 'shadowrocket') !== false) {
             return $this->shadowrocket($user, $servers);
         }
+//        if (strpos($target, 'clashmeta') !== false) {
+//            return $this->clash($servers);
+//        }
 //            if (strpos($target, 'shadowsocks') !== false) {
 //                exit($this->shaodowsocksSIP008($servers));
 //            }
@@ -83,7 +86,14 @@ class ClientController extends Controller
                 $uri .= URLSchemes::buildShadowsocksr($server);
             }
             if ($server['type'] === 'v2ray') {
-                $uri .= URLSchemes::buildVmess($server);
+                if ($server['vless'] == 1){
+                    $uri .= URLSchemes::buildVless($server);
+                }
+                else
+                {
+                    $uri .= URLSchemes::buildVmess($server);
+                }
+
             }
             if ($server['type'] === 'trojan') {
                 $uri .= URLSchemes::buildTrojan($server);
@@ -113,6 +123,12 @@ class ClientController extends Controller
                 $proxies[] = $server['name'];
             }
             if ($server['type'] === 'v2ray') {
+//                if ($server['vless'] == 1){
+//                    $proxy[] = Clash::buildVless($server);
+//                    $proxies[] = $server['name'];
+//                } else {
+//
+//                }
                 $proxy[] = Clash::buildVmess($server);
                 $proxies[] = $server['name'];
             }

+ 36 - 23
app/Http/Controllers/DownloadControllers.php

@@ -17,6 +17,12 @@ use App\Models\Sms;
 class DownloadControllers extends Controller
 {
     public  function index(){
+//
+        $Article =  new Article();
+        $articles =$Article->get();
+//        dump($articles);
+//        die();
+
         if(Auth::check()){
             // 用户转换
             if (Session::has('user')) {
@@ -47,11 +53,13 @@ class DownloadControllers extends Controller
             $subscribe_linkA = "https://user.vipsix.top" . "/s/" . $subscribe->code;
             $subscribe_linkB = "https://user.vipfive.top" . "/s/" . $subscribe->code;
             $subscribe_linkC = "http://user.vipfive.top" . "/s/" . $subscribe->code;
-
+            $subscribe_linkD = "http://user.vipfive.top" . "/s/" . $subscribe->code;
 //            $subarr = ["A"=>"","B"=>""];
 
+
+
             return view('down.dowload', [
-                "islogin"                 => 1,
+                "islogin"                 => 1 ,
                 'remainDays'       => $expireTime < date('Y-m-d') ? -1 : Helpers::daysToNow($expireTime),
                 'username'                  => $profile["account"],
                 'unusedTraffic'             => flowAutoShow($unusedTraffic),
@@ -59,15 +67,16 @@ class DownloadControllers extends Controller
                 'expireTime'                => $expireTime,
                 'banedTime'                 => $user->ban_time,
                 'unusedPercent'             => $totalTransfer > 0 ? round($unusedTraffic / $totalTransfer, 2) * 100 : 0,
-                "android"                 => Article::whereId(8)->first(),
-                "ios"                     => Article::whereId(7)->first(),
-                "windows"                 => Article::whereId(9)->first(),
-                "game"                 => Article::whereId(5)->first(),
-                "mac"                   => Article::whereId(6)->first(),
-                "wx"                   => Article::whereId(10)->first(),
-                "v2"                   => Article::whereId(11)->first(),
-                "pg"                   => Article::whereId(7)->first(),
-                "sp"                   => Article::whereId(13)->first(),
+                'articlelist'               =>$articles,
+//                "android"                 => Article::whereId(8)->first(),
+//                "ios"                     => Article::whereId(7)->first(),
+//                "windows"                 => Article::whereId(9)->first(),
+//                "game"                 => Article::whereId(5)->first(),
+//                "mac"                   => Article::whereId(6)->first(),
+//                "wx"                   => Article::whereId(10)->first(),
+//                "v2"                   => Article::whereId(11)->first(),
+//                "pg"                   => Article::whereId(7)->first(),
+//                "sp"                   => Article::whereId(13)->first(),
                 'subUrl'                  => sysConfig('subscribe_domain') . "/s/" . $subscribe->code,
                 'sub'                     => $data,
                 'paying_user'             => auth()->user()->activePayingUser(), // 付费用户判断
@@ -75,6 +84,7 @@ class DownloadControllers extends Controller
                 'Quantumult_install'      => 'itms-services://?action=download-manifest&url='.sysConfig('website_url').'/clients/Quantumult.plist', // 客户端安装
                 'subscribe_status'        => $subscribe->status, // 订阅连接
                 'link'                    => $subscribe_link,
+                'linkbak'                 => $subscribe_linkD,
                 'subscribe_link'          => 'sub://'.base64url_encode($subscribe_link),
                 'Shadowrocket_link'       => 'shadowrocket://add/sub://'.base64url_encode($subscribe_link).'?remarks='.sysConfig('website_name'),
                 'Shadowrocket_linkA'       => 'shadowrocket://add/sub://'.base64url_encode($subscribe_linkA).'?remarks='.sysConfig('website_name'),
@@ -95,19 +105,22 @@ class DownloadControllers extends Controller
                 'Quantumult_linkOut'      => 'quantumult://configuration?server='.base64url_encode($subscribe_link).'&filter='.base64url_encode('https://raw.githubusercontent.com/ZBrettonYe/VPN-Rules-Collection/master/Profiles/Quantumult/Pro.conf').'&rejection='.base64url_encode('https://raw.githubusercontent.com/ZBrettonYe/VPN-Rules-Collection/master/Profiles/Quantumult/Rejection.conf'),
                 'Quantumult_linkIn'       => 'quantumult://configuration?server='.base64url_encode($subscribe_link).'&filter='.base64url_encode('https://raw.githubusercontent.com/ZBrettonYe/VPN-Rules-Collection/master/Profiles/Quantumult/BacktoCN.conf').'&rejection='.base64url_encode('https://raw.githubusercontent.com/ZBrettonYe/VPN-Rules-Collection/master/Profiles/Quantumult/Rejection.conf'),
             ]);
-        } else {
-            return view('down.dowIndex',[
+        }
+        else {
+            return view('down.dowload',[
                 "islogin"  => 0,
-                "android"                 => Article::whereId(8)->first(),
-                "ios"                     => Article::whereId(7)->first(),
-                "windows"                 => Article::whereId(9)->first(),
-                 "game"                 => Article::whereId(5)->first(),
-                "mac"                   => Article::whereId(6)->first(),
-                  "wx"                   => Article::whereId(10)->first(),
-                  "v2"                   => Article::whereId(11)->first(),
-                "pg"                   => Article::whereId(7)->first(),
-                "sp"                   => Article::whereId(13)->first(),
-                ]);
+                "subUrl"   => "",
+                'articlelist'               =>$articles,
+//                "android"                 => Article::whereId(8)->first(),
+//                "ios"                     => Article::whereId(7)->first(),
+//                "windows"                 => Article::whereId(9)->first(),
+//                "game"                 => Article::whereId(5)->first(),
+//                "mac"                   => Article::whereId(6)->first(),
+//                "wx"                   => Article::whereId(10)->first(),
+//                "v2"                   => Article::whereId(11)->first(),
+//                "pg"                   => Article::whereId(7)->first(),
+//                "sp"                   => Article::whereId(13)->first(),
+            ]);
         }
     }
 

+ 5 - 4
app/Http/Controllers/UserController.php

@@ -370,15 +370,15 @@ class UserController extends Controller
     public function closeTicket(Request $request): ?JsonResponse
     {
             //   return Response::json(['status' => 'success', 'message' => trans('common.close_item', ['attribute' => trans('common.success')])]);
-         
+
         $id = $request->input('id');
 //   return Response::json(['status' => 'success', 'message' => $id]);
- 
+
         $ticket = Ticket::uid()->whereId($id)->first();
         if ($ticket) {
             $ticket->close();
            return Response::json(['status' => 'success', 'message' => trans('common.close_item', ['attribute' => trans('common.success')])]);
-        }  
+        }
         return Response::json(['status' => 'fail', 'message' => trans('common.close_item', ['attribute' => trans('common.failed')])]);
     }
 
@@ -506,7 +506,7 @@ class UserController extends Controller
         $subscribe = auth()->user()->subscribe;
         //$subscribe_link = route('sub', $subscribe->code);
         $subscribe_link = sysConfig('subscribe_domain') . "/s/" . $subscribe->code;
-
+        $subscribe_link_bak = "asdsadaa/s/".$subscribe->code;
         return view('user.help', [
             'sub'                     => $data,
             'paying_user'             => auth()->user()->activePayingUser(), // 付费用户判断
@@ -514,6 +514,7 @@ class UserController extends Controller
             'Quantumult_install'      => 'itms-services://?action=download-manifest&url='.sysConfig('website_url').'/clients/Quantumult.plist', // 客户端安装
             'subscribe_status'        => $subscribe->status, // 订阅连接
             'link'                    => $subscribe_link,
+            'link_bak'                => $subscribe_link_bak,
             'subscribe_link'          => 'sub://'.base64url_encode($subscribe_link),
             'Shadowrocket_link'       => 'shadowrocket://add/sub://'.base64url_encode($subscribe_link).'?remarks='.urlencode(sysConfig('website_name').' '.sysConfig('website_url')),
             'Shadowrocket_linkQrcode' => 'sub://'.base64url_encode($subscribe_link).'#'.base64url_encode(sysConfig('website_name')),

+ 10 - 1
app/Http/Middleware/isForbidden.php

@@ -28,14 +28,23 @@ class isForbidden
             return Response::view('auth.error', ['message' => trans('error.forbidden.bots')], 403);
         }
 
+       // Log::info('gethost------'.$request->getHost());
         // 拒绝通过订阅链接域名访问网站,防止网站被探测
-        if (false !== strpos(sysConfig('subscribe_domain'), $request->getHost())
+        if ( false !== strpos(sysConfig('subscribe_domain'), $request->getHost())
             && ! str_contains(sysConfig('subscribe_domain'), sysConfig('website_url'))) {
             Log::info('识别到通过订阅链接访问,强制跳转至百度('.IP::getClientIp().')');
 
             return redirect('https://www.baidu.com');
         }
 
+        if (false !== strpos('https://user.vipsix.top', $request->getHost())
+            && ! str_contains('https://user.vipsix.top', sysConfig('website_url'))) {
+            Log::info('识别到通过订阅链接访问,强制跳转至百度('.IP::getClientIp().')');
+
+            return redirect('https://www.baidu.com');
+        }
+
+
         $ip = IP::getClientIP();
         $ipLocation = IP::getIPInfo($ip);
 

+ 4 - 0
app/Http/Requests/Admin/NodeRequest.php

@@ -50,6 +50,10 @@ class NodeRequest extends FormRequest
             'is_relay' => 'required|boolean',
             'relay_server' => 'required_if:is_relay,1',
             'relay_port' => 'required_if:is_relay,1|numeric|between:1,65535',
+            'vless' => 'required_if:type,2|boolean',
+            'vless_privateKey' => 'string|nullable',
+            'vless_pulkey' => 'string|nullable',
+            'shortIds' => 'string|nullable',
         ];
     }
 

+ 2 - 0
app/Models/Node.php

@@ -133,6 +133,8 @@ class Node extends Model
                     'v2_tls'      => $this->v2_tls ? 'tls' : '',
                     'v2_sni'      => $this->v2_sni == null ? '':$this->v2_sni,
                     'udp'         => $this->is_udp,
+                    'vless'       => $this->vless,
+                    'vless_pulkey'=> $this->vless_pulkey,
                 ]);
                 break;
             case 3:

+ 44 - 0
resources/views/admin/node/info.blade.php

@@ -175,6 +175,13 @@
                                                     <label for="vnet">VNET</label>
                                                 </div>
                                             </li>
+
+{{--                                            <li class="list-inline-item">--}}
+{{--                                                <div class="radio-custom radio-primary">--}}
+{{--                                                    <input type="radio" id="vless" name="type" value="5">--}}
+{{--                                                    <label for="vless">vless</label>--}}
+{{--                                                </div>--}}
+{{--                                            </li>--}}
                                         </ul>
                                     </div>
                                     <hr/>
@@ -313,6 +320,25 @@
                                             <label for="v2_sni" class="col-md-3 col-form-label">SNI</label>
                                             <input type="text" class="form-control col-md-4" name="v2_sni" id="v2_sni">
                                         </div>
+                                        <div class="form-group row">
+                                            <label for="vless_privateKey" class="col-md-3 col-form-label">vless_privateKey</label>
+                                            <input type="text" class="form-control col-md-4" name="vless_privateKey" id="vless_privateKey">
+                                        </div>
+                                        <div class="form-group row">
+                                            <label for="vless_pulkey" class="col-md-3 col-form-label">vless_pulkey</label>
+                                            <input type="text" class="form-control col-md-4" name="vless_pulkey" id="vless_pulkey">
+                                        </div>
+
+                                        <div class="form-group row">
+                                            <label for="shortIds" class="col-md-3 col-form-label">shortIds</label>
+                                            <input type="text" class="form-control col-md-4" name="shortIds" id="shortIds">
+                                        </div>
+                                        <div class="form-group row">
+                                            <label for="v2_vless" class="col-md-3 col-form-label">vless</label>
+                                            <div class="col-md-9">
+                                                <input type="checkbox" id="v2_vless" name="v2_vless" data-plugin="switchery" onchange="switchSetting('v2_vless')">
+                                            </div>
+                                        </div>
                                         <div class="form-group row">
                                             <label for="v2_tls" class="col-md-3 col-form-label">连接TLS</label>
                                             <div class="col-md-9">
@@ -329,6 +355,9 @@
                                             </div>
                                         </div>
                                     </div>
+
+
+
                                     <!-- Trojan 设置部分 -->
                                     <div class="trojan-setting">
                                         <div class="form-group row">
@@ -479,6 +508,13 @@
                     @if($node->v2_tls)
                     $('#v2_tls').click();
                     @endif
+                    @if($node->vless)
+                    $('#v2_vless').click();
+                    @endif
+                    $('#vless_privateKey').val('{{$node->vless_privateKey}}');
+                    $('#vless_pulkey').val('{{$node->vless_pulkey}}');
+                    $('#shortIds').val('{{$node->shortIds}}');
+
                     $('#tls_provider').val('{!! $node->tls_provider !!}');
                     break;
                 case 3:
@@ -508,11 +544,15 @@
         // ajax同步提交
         function Submit() {
             const type = $('input[name=\'type\']:checked').val();
+
             let port;
             switch (type) {
                 case '2':
                     port = $('#v2_port').val();
                     break;
+                case '5':
+                    port = $('#v2_port').val();
+                    break;
                 case '3':
                     port = $('#trojan_port').val();
                     break;
@@ -570,6 +610,10 @@
                     is_relay: document.getElementById('is_relay').checked ? 1 : 0,
                     relay_port: $('#relay_port').val(),
                     relay_server: $('#relay_server').val(),
+                    vless: document.getElementById('v2_vless').checked ? 1 : 0,
+                    vless_privateKey: $('#vless_privateKey').val(),
+                    vless_pulkey: $('#vless_pulkey').val(),
+                    shortIds: $('#shortIds').val()
                 },
                 success: function(ret) {
                     if (ret.status === 'success') {

+ 0 - 6
resources/views/down/dowIndex.blade.php

@@ -7,13 +7,7 @@
 
       <div class="row" data-plugin="matchHeight" data-by-row="true">
             <div class="card" style="width: 208rem;">
-                <div class="card-body">
 
-                        <h5 class="card-title">未登录,登陆后可以查看您的订阅链接。</h5>
-                        <a href="/login" class="btn btn-primary">立即登陆或注册</a>
-
-
-                </div>
             </div>
         </div>
 

+ 71 - 121
resources/views/down/dowload.blade.php

@@ -3,141 +3,91 @@
     <link href="/assets/global/fonts/themify/themify.min.css" rel="stylesheet">
 @endsection
 @section('content')
-    <div class="page-content container-fluid">
-
-            <div class="row"  data-by-row="true">
-                <!--<div class="col-sm-2  info-panel">-->
-                <!--<div class="card" >-->
-                <!--    <div class="card-body">-->
-                <!--        <div class="card-block p-20">-->
-                <!--            <button type="button" class="btn btn-floating btn-sm btn-pure">-->
-                <!--                <i class="wb-heart red-500"></i>-->
-                <!--            </button>-->
-                <!--            <span class="font-weight-400">账号状态</span>-->
-                            <!--<div class="content-text text-md-left mb-0">-->
-                            <!--    <p class="card-text">用户名:{{$username}}  </p>-->
-                            <!--    <p class="card-text">剩余流量:{{$unusedTraffic}}</p>-->
-                            <!--    <p class="card-text">总流量:{{$totalTransfer}}</p>-->
-                            <!--    <h5 class="card-title"></h5>-->
-                            <!--    @if($remainDays !== -1)-->
-
-                            <!--        <p class="blue-grey-500 font-weight-300 m-0">到期时间:{{$expireTime}} -- 天数: {{$remainDays.' '.trans('validation.attributes.day')}}</p>-->
-                            <!--    @else-->
-                            <!--        <span class="font-size-20 font-weight-100">{{trans('user.status.expired')}}</span>-->
-                            <!--        <br/>-->
-                            <!--        <a href="{{route('shop')}}" class="btn btn-danger">{{trans('user.shop.buy')}}</a>-->
-                            <!--    @endif-->
-                            <!--</div>-->
-
-                            <!--<a href="https://user.vipone.xyz/services" class="btn btn-primary">购买套餐</a>-->
-
-                <!--        </div>-->
-                <!--    </div>-->
-                <!--</div>-->
-                <!--</div>-->
-                <div class="col-xl-6 col-md-6 info-panel">
-                    <div class="card" >
-                    <div class="card-body">
-                        <div class="card-block p-20">
-                            <!--<button type="button" class="btn btn-floating btn-sm btn-pure">-->
-                            <!--    <i class="wb-heart red-500"></i>-->
-                            <!--</button>-->
-                            <p class="card-text">用户名:{{$username}}  <a href="/userinfo">账号状态</a> <a href="/services">充值续费</a> </p>
-                            <!--<span class="font-weight-400">一键添加订阅地址</span>-->
-                            <h4 class="card-title cyan-600"><i class="icon wb-link"></i>
-                                    一键添加订阅地址
-                                </h4>
-                            <div class="content-text text-md-left mb-20">
-                                <a  href="{{$Clash_link}}" class="btn btn-primary ">一键导入Clash</a>
-                                <a  href="{{$Clash_linkA}}" class="btn btn-primary ">备用1一键导入Clash</a>
-                                <a  href="{{$Clash_linkB}}" class="btn btn-primary ">备用2一键导入Clash</a>
-                                <!--<a  href="{{$Clash_linkC}}" class="btn btn-primary ">备用C一键导入Clash</a>-->
-
-                                <a href="{{$Shadowrocket_link}}" class="btn btn-primary">一键导入Shadowrocket</a>
-                                <a href="{{$Shadowrocket_linkA}}" class="btn btn-primary">备用1一键导入Shadowrocket</a>
-                                <a href="{{$Shadowrocket_linkB}}" class="btn btn-primary">备用2一键导入Shadowrocket</a>
-                                <!--<a href="{{$Shadowrocket_linkC}}" class="btn btn-primary">备用C一键导入Shadowrocket</a>-->
+    <div class="row" data-by-row="true">
+
+        <div class="col-xl-4 col-md-4">
+            <div class="card">
+                <div class="card-body">
+                    @if($islogin == 0)
+                        <div class="card-body">
+
+                            <h5 class="card-title">未登录,登陆后可以查看您的订阅链接。</h5>
+                            <a href="/login" class="btn btn-primary">立即登陆或注册</a>
+
 
-                            </div>
                         </div>
-                        @if($subscribe_status)
-
-                            <div class="card-block">
-                                <h4 class="card-title cyan-600"><i class="icon wb-link"></i>
-                                    您的订阅地址
-                                </h4>
-                                <div class="card-text form">
-                                    <div class="mt-clipboard-container input-group">
-                                        <input type="text" class="form-control" id="sub_link" value="{{$link}}"/>
-                                       
-                                        <button class="btn btn-outline-info mt-clipboard" data-clipboard-action="copy" data-clipboard-target="#sub_link">
-                                            <i class="icon wb-copy" aria-hidden="true"></i>
-                                            {{trans('common.copy.attribute')}}</button>
-                                    </div>
-                                </div>
-                            </div>
+                    @else
+                        <h5 class="card-title">我的账号: {{$username}}</h5>
+                        <p class="card-text">
+                            <a href="/userinfo" class="btn btn-light text-success border-success">账号状态</a>
+                            <a href="/services" class="btn btn-light text-success border-success">购买VIP</a>
+                            <a href="/tickets" class="btn btn-light text-danger border-danger">人工客服</a>
+                            <!--<a href="/profile" class="btn btn-light text-success border-success">修改密码</a>-->
+                        </p>
+                    @endif
 
 
-                        @else
-                            <x-alert type="danger" :message="trans('user.subscribe.baned')"/>
-                        @endif
-                    </div>
                 </div>
+            </div>
+        </div>
+        @if($islogin == 1)
+        <div class="col-xl-4 col-md-4">
+            <div class="card">
+                <div class="card-body">
+                    <!--<h4 class="card-title cyan-600"><i class="icon wb-link"></i>一键添加订阅地址</h4>-->
+                    <div class="content-text text-md-left mb-20">
+                        <button class="btn btn-outline-success btn-block" data-toggle="collapse" data-target="#subscriptionOptions" aria-expanded="false" aria-controls="subscriptionOptions">
+                            一键导入订阅
+                        </button>
+                        <div class="collapse" id="subscriptionOptions">
+                            <h5><a href="{{$Clash_link}}" class="btn btn-primary">一键导入Clash</a></h5>
+                            <h5><a href="{{$Clash_linkA}}" class="btn btn-primary">备用1一键导入Clash</a></h5>
+                            <h5><a href="{{$Clash_linkB}}" class="btn btn-primary">备用2一键导入Clash</a></h5>
+                            <h5><a href="{{$Clash_linkC}}" class="btn btn-primary">备用3一键导入Clash</a></h5>
+
+                            <h5><a href="{{$Shadowrocket_link}}" class="btn btn-primary">一键导入Shadowrocket</a></h5>
+                            <h5><a href="{{$Shadowrocket_linkA}}" class="btn btn-primary">备用1一键导入Shadowrocket</a></h5>
+                            <h5><a href="{{$Shadowrocket_linkB}}" class="btn btn-primary">备用2一键导入Shadowrocket</a></h5>
+                            <h5><a href="{{$Shadowrocket_linkC}}" class="btn btn-primary">备用3一键导入Shadowrocket</a></h5>
+                        </div>
+                    </div>
                 </div>
-                
             </div>
+        </div>
+        @endif
 
 
+        @if($islogin == 1)
+        <div class="col-xl-4 col-md-4">
+            @if($subscribe_status)
+                <div class="card">
+                    <div class="card-body">
+                        <h4 class="card-title text-success"><i class="icon wb-link"></i>您的订阅地址</h4>
+
+                        <div class="card-text form">
+                            <div class="mt-clipboard-container input-group">
+                                <input type="text" class="form-control" id="sub_link" value="{{$link}}"/>
+                                <button class="btn btn-outline-info mt-clipboard" data-clipboard-action="copy"
+                                        data-clipboard-target="#sub_link">
+                                    <i class="icon wb-copy" aria-hidden="true"></i>
+                                    {{trans('common.copy.attribute')}}</button>
+                            </div>
 
 
+                        </div>
+                    </div>
+                </div>
+            @else
+                <x-alert type="danger" :message="trans('user.subscribe.baned')"/>
+            @endif
+        </div>
+        @endif
+    </div>
 
-
-
-
-        <!--<div class="row" data-plugin="matchHeight" data-by-row="true">-->
-        <!--    <div class="card" style="width: 208rem;">-->
-        <!--        <div class="card-body">-->
-        <!--            @if($islogin === 0)-->
-        <!--                <h5 class="card-title">未登录</h5>-->
-        <!--                <a href="https://user.vipone.xyz/login" class="btn btn-primary">立即登陆</a>-->
-        <!--            @else-->
-
-
-
-
-
-                        <!--@if($subscribe_status)-->
-
-                        <!--    <div class="card-block">-->
-                        <!--        <h4 class="card-title cyan-600"><i class="icon wb-link"></i>-->
-                        <!--            您的订阅地址-->
-                        <!--        </h4>-->
-                        <!--        <div class="card-text form">-->
-                        <!--            <div class="mt-clipboard-container input-group">-->
-                        <!--                <input type="text" class="form-control" id="sub_link" value="{{$link}}"/>-->
-                                       
-                        <!--                <button class="btn btn-outline-info mt-clipboard" data-clipboard-action="copy" data-clipboard-target="#sub_link">-->
-                        <!--                    <i class="icon wb-copy" aria-hidden="true"></i>-->
-                        <!--                    {{trans('common.copy.attribute')}}</button>-->
-                        <!--            </div>-->
-                        <!--        </div>-->
-                        <!--    </div>-->
-
-
-                        <!--@else-->
-                        <!--    <x-alert type="danger" :message="trans('user.subscribe.baned')"/>-->
-                        <!--@endif-->
-
-        <!--            @endif-->
-
-        <!--        </div>-->
-        <!--    </div>-->
-        <!--</div>-->
-
-        @include('down.help')
-
+    @include('down.help')
 
     </div>
+
 @endsection
 @section('javascript')
     <script src="/assets/custom/clipboardjs/clipboard.min.js"></script>

+ 29 - 99
resources/views/down/help.blade.php

@@ -6,111 +6,41 @@
                                     软件教程
                                 </h4>
             <div class="nav-tabs-horizontal" data-plugin="tabs">
-                <ul class="nav nav-tabs nav-tabs-line mr-25" role="tablist">
-                    <li class="nav-item" role="presentation">
-                        <a class="nav-link active" data-toggle="tab" href="#android_client" aria-controls="android_client" role="tab" aria-expanded="true">
-                            <i class="icon fa-android " aria-hidden="true"></i>安卓</a>
-                    </li>
-                    <li class="nav-item" role="presentation">
-                        <a class="nav-link" data-toggle="tab" href="#pg_client" aria-controls="quantumult_client" role="tab">
-                            <i class="icon fa-apple" aria-hidden="true"></i>iOS<span class="badge badge-danger up">苹果</span></a>
-                    </li>
-                     <li class="nav-item" role="presentation">
-                        <a class="nav-link" data-toggle="tab" href="#sp_client" aria-controls="pg_client" role="tab">
-                            <i class="icon fa-apple" aria-hidden="true"></i>Spectre<span class="badge badge-info up">苹果</span></a>
-                    </li>
-                    <li class="nav-item" role="presentation">
-                        <a class="nav-link" data-toggle="tab" href="#windows_client" aria-controls="windows_client" role="tab">
-                            <i class="icon fa-windows" aria-hidden="true"></i>Windows</a>
-                    </li>
-                    <!--<li class="nav-item" role="presentation">-->
-                    <!--    <a class="nav-link" data-toggle="tab" href="#game_client" aria-controls="game_client_sstap" role="tab">-->
-                    <!--        <i class="icon fa-windows" aria-hidden="true"></i>Clash<span class="badge badge-info up">win</span></a>-->
-                    <!--</li>-->
-                     <li class="nav-item" role="presentation">
-                        <a class="nav-link" data-toggle="tab" href="#v2_client" aria-controls="game_client_sstap" role="tab">
-                            <i class="icon fa-windows" aria-hidden="true"></i>V2RayN<span class="badge badge-info up">win备用</span></a>
-                    </li>
-                    <!--<li class="nav-item" role="presentation">-->
-                    <!--    <a class="nav-link" data-toggle="tab" href="#linux_client" aria-controls="game_client_netch" role="tab">-->
-                    <!--        <i class="icon fa-windows" aria-hidden="true"></i>Linux</a>-->
-                    <!--</li>-->
-                    <li class="nav-item" role="presentation">
-                        <a class="nav-link" data-toggle="tab" href="#mac_client" aria-controls="macos_client" role="tab">
-                            <i class="icon fa-apple" aria-hidden="true"></i>Mac</a>
-                    </li>
-                    <!-- <li class="nav-item" role="presentation">-->
-                    <!--    <a class="nav-link" data-toggle="tab" href="#wx_client" aria-controls="wx_client" role="tab">-->
-                    <!--        <i class="icon fa-apple" aria-hidden="true"></i>支付</a>-->
-                    <!--</li>-->
-                     
-                    <!--   <li class="nav-item" role="presentation">-->
-                    <!--    <a class="nav-link" data-toggle="tab" href="#sp_client" aria-controls="sp_client" role="tab">-->
-                    <!--        <i class="icon fa-apple" aria-hidden="true"></i>苹果</i><span class="badge badge-info up">IOS</span></a>-->
-                    <!--</li>-->
+                <ul class="nav nav-tabs nav-tabs-line mr-25" role="tablist" id="myTab">
+                    @foreach($articlelist as $key => $val)
+{{--                        <option value="{{$val}}">{{$val->title}}</option>--}}
+                        <li class="nav-item" role="presentation">
+                            <a class="nav-link  @if($val->id == 1) active @endif " data-toggle="tab" href="#{{$val->id}}" aria-controls="{{$val->id}}" role="tab" aria-expanded="true">
+                                <i class="icon fa-android " aria-hidden="true"></i>{{$val->title}}</a>
+                        </li>
+                    @endforeach
+
                 </ul>
+
                 <div class="tab-content py-15">
-                    <div class="tab-pane active" id="android_client" role="tabpanel">
-                        <h3 class="panel-title">{{$android->title}}</h3>
-                        <div class="panel-body pt-0 pb-60">
-                            {!! $android->content !!}
-                        </div>
-                        {{--                                <iframe id="bi_iframe" frameborder="no"  scrolling="auto" src="https://user.viptwo.xyz/downarticle?id=8" onload="adjustIframe();" ></iframe>--}}
-                    </div>
-                    <div class="tab-pane" id="ios_client" role="tabpanel">
-                        <h3 class="panel-title">{{$pg->title}}</h3>
-                        <div class="panel-body pt-0 pb-60">
-                            {!! $pg->content !!}
+                    @foreach($articlelist as $key => $val)
+                       <div class="tab-pane @if($val->id == 1) active @endif " id="{{$val->id}}" role="tabpanel">
+                            <h3 class="panel-title">{{$val->title}}</h3>
+                            <div class="panel-body pt-0 pb-60">
+                                {{$val->content}}
+                            </div>
                         </div>
-                    </div>
-                    <div class="tab-pane" id="windows_client" role="tabpanel">
-                        <h3 class="panel-title">{{$windows->title}}</h3>
-                        <div class="panel-body pt-0 pb-60">
-                            {!! $windows->content !!}
-                        </div>
-                    </div>
-                    <div class="tab-pane" id="game_client" role="tabpanel">
-                         <h3 class="panel-title">{{$game->title}}</h3>
-                        <div class="panel-body pt-0 pb-60">
-                            {!! $game->content !!}
-                       </div>
-                    </div>
-                       <div class="tab-pane" id="v2_client" role="tabpanel">
-                         <h3 class="panel-title">{{$v2->title}}</h3>
-                        <div class="panel-body pt-0 pb-60">
-                            {!! $v2->content !!}
-                       </div>
-                    </div>
-                    <div class="tab-pane" id="linux_client" role="tabpanel">
-                        <a href="https://blog.naiyout.com/article/?type=detail&id=32" class="btn btn-primary">查看详细教程和软件下载</a>
-                    </div>
-                    <div class="tab-pane" id="mac_client" role="tabpanel">
-                        <h3 class="panel-title">{{$mac->title}}</h3>
-                        <div class="panel-body pt-0 pb-60">
-                            {!! $mac->content !!}
-                      </div>
-                </div>
-                 <div class="tab-pane" id="wx_client" role="tabpanel">
-                        <h3 class="panel-title">{{$wx->title}}</h3>
-                        <div class="panel-body pt-0 pb-60">
-                            {!! $wx->content !!}
-                      </div>
+                    @endforeach
                 </div>
-                  <div class="tab-pane" id="pg_client" role="tabpanel">
-                        <h3 class="panel-title">{{$ios->title}}</h3>
-                        <div class="panel-body pt-0 pb-60">
-                            {!! $ios->content !!}
-                      </div>
-                </div>
-                 <div class="tab-pane" id="sp_client" role="tabpanel">
-                        <h3 class="panel-title">{{$sp->title}}</h3>
-                        <div class="panel-body pt-0 pb-60">
-                            {!! $sp->content !!}
-                      </div>
-                </div>
-            </div>
 
+            </div>
         </div>
     </div>
 </div>
+@section('javascript')
+    <script>
+        $(function () {
+            $('.nav-tabs a').click(function (e) {
+                e.preventDefault()
+                $(this).tab('show')
+            })
+        })
+
+    </script>
 
+@endsection