Răsfoiți Sursa

节点带上国家标志

bingo 8 ani în urmă
părinte
comite
2329bd1e19
100 a modificat fișierele cu 155 adăugiri și 21 ștergeri
  1. 132 19
      app/Http/Controllers/AdminController.php
  2. 1 2
      app/Http/Controllers/UserController.php
  3. 21 0
      app/Http/Models/Country.php
  4. 1 0
      app/Http/Models/SsNode.php
  5. BIN
      public/assets/images/country/au.png
  6. BIN
      public/assets/images/country/br.png
  7. BIN
      public/assets/images/country/ca.png
  8. BIN
      public/assets/images/country/ch.png
  9. BIN
      public/assets/images/country/cn.png
  10. BIN
      public/assets/images/country/de.png
  11. BIN
      public/assets/images/country/dk.png
  12. BIN
      public/assets/images/country/eg.png
  13. BIN
      public/assets/images/country/es.png
  14. BIN
      public/assets/images/country/fr.png
  15. BIN
      public/assets/images/country/gr.png
  16. BIN
      public/assets/images/country/hk.png
  17. BIN
      public/assets/images/country/id.png
  18. BIN
      public/assets/images/country/ie.png
  19. BIN
      public/assets/images/country/il.png
  20. BIN
      public/assets/images/country/in.png
  21. BIN
      public/assets/images/country/iq.png
  22. BIN
      public/assets/images/country/ir.png
  23. BIN
      public/assets/images/country/it.png
  24. BIN
      public/assets/images/country/jp.png
  25. BIN
      public/assets/images/country/kp.png
  26. BIN
      public/assets/images/country/kr.png
  27. BIN
      public/assets/images/country/kz.png
  28. BIN
      public/assets/images/country/mn.png
  29. BIN
      public/assets/images/country/mx.png
  30. BIN
      public/assets/images/country/my.png
  31. BIN
      public/assets/images/country/nl.png
  32. BIN
      public/assets/images/country/no.png
  33. BIN
      public/assets/images/country/nr.png
  34. BIN
      public/assets/images/country/nz.png
  35. BIN
      public/assets/images/country/ph.png
  36. BIN
      public/assets/images/country/pic_001.png
  37. BIN
      public/assets/images/country/pic_002.png
  38. BIN
      public/assets/images/country/pic_003.png
  39. BIN
      public/assets/images/country/pic_004.png
  40. BIN
      public/assets/images/country/pic_005.png
  41. BIN
      public/assets/images/country/pic_006.png
  42. BIN
      public/assets/images/country/pic_007.png
  43. BIN
      public/assets/images/country/pic_008.png
  44. BIN
      public/assets/images/country/pic_009.png
  45. BIN
      public/assets/images/country/pic_010.png
  46. BIN
      public/assets/images/country/pic_011.png
  47. BIN
      public/assets/images/country/pic_012.png
  48. BIN
      public/assets/images/country/pic_013.png
  49. BIN
      public/assets/images/country/pic_014.png
  50. BIN
      public/assets/images/country/pic_015.png
  51. BIN
      public/assets/images/country/pic_016.png
  52. BIN
      public/assets/images/country/pic_017.png
  53. BIN
      public/assets/images/country/pic_018.png
  54. BIN
      public/assets/images/country/pic_019.png
  55. BIN
      public/assets/images/country/pic_020.png
  56. BIN
      public/assets/images/country/pic_021.png
  57. BIN
      public/assets/images/country/pic_022.png
  58. BIN
      public/assets/images/country/pic_023.png
  59. BIN
      public/assets/images/country/pic_024.png
  60. BIN
      public/assets/images/country/pic_025.png
  61. BIN
      public/assets/images/country/pic_026.png
  62. BIN
      public/assets/images/country/pic_027.png
  63. BIN
      public/assets/images/country/pic_028.png
  64. BIN
      public/assets/images/country/pic_029.png
  65. BIN
      public/assets/images/country/pic_030.png
  66. BIN
      public/assets/images/country/pic_031.png
  67. BIN
      public/assets/images/country/pic_032.png
  68. BIN
      public/assets/images/country/pic_033.png
  69. BIN
      public/assets/images/country/pic_034.png
  70. BIN
      public/assets/images/country/pic_035.png
  71. BIN
      public/assets/images/country/pic_036.png
  72. BIN
      public/assets/images/country/pic_037.png
  73. BIN
      public/assets/images/country/pic_038.png
  74. BIN
      public/assets/images/country/pic_039.png
  75. BIN
      public/assets/images/country/pic_040.png
  76. BIN
      public/assets/images/country/pic_041.png
  77. BIN
      public/assets/images/country/pic_042.png
  78. BIN
      public/assets/images/country/pic_043.png
  79. BIN
      public/assets/images/country/pic_044.png
  80. BIN
      public/assets/images/country/pic_045.png
  81. BIN
      public/assets/images/country/pic_046.png
  82. BIN
      public/assets/images/country/pic_047.png
  83. BIN
      public/assets/images/country/pic_048.png
  84. BIN
      public/assets/images/country/pic_049.png
  85. BIN
      public/assets/images/country/pic_050.png
  86. BIN
      public/assets/images/country/pic_051.png
  87. BIN
      public/assets/images/country/pic_052.png
  88. BIN
      public/assets/images/country/pic_053.png
  89. BIN
      public/assets/images/country/pic_054.png
  90. BIN
      public/assets/images/country/pic_055.png
  91. BIN
      public/assets/images/country/pic_056.png
  92. BIN
      public/assets/images/country/pic_057.png
  93. BIN
      public/assets/images/country/pic_058.png
  94. BIN
      public/assets/images/country/pic_059.png
  95. BIN
      public/assets/images/country/pic_060.png
  96. BIN
      public/assets/images/country/pic_061.png
  97. BIN
      public/assets/images/country/pic_062.png
  98. BIN
      public/assets/images/country/pic_063.png
  99. BIN
      public/assets/images/country/pic_064.png
  100. BIN
      public/assets/images/country/pic_065.png

+ 132 - 19
app/Http/Controllers/AdminController.php

@@ -5,6 +5,7 @@ namespace App\Http\Controllers;
 use App\Http\Models\Article;
 use App\Http\Models\ArticleLog;
 use App\Http\Models\Config;
+use App\Http\Models\Country;
 use App\Http\Models\Invite;
 use App\Http\Models\Level;
 use App\Http\Models\OrderGoods;
@@ -347,6 +348,7 @@ class AdminController extends BaseController
         if ($request->method() == 'POST') {
             $name = $request->get('name');
             $group_id = $request->get('group_id');
+            $country_code = $request->get('country_code');
             $server = $request->get('server');
             $desc = $request->get('desc');
             $method = $request->get('method');
@@ -372,6 +374,7 @@ class AdminController extends BaseController
             $node = SsNode::query()->create([
                 'name' => $name,
                 'group_id' => $group_id,
+                'country_code' => $country_code,
                 'server' => $server,
                 'desc' => $desc,
                 'method' => $method,
@@ -405,12 +408,13 @@ class AdminController extends BaseController
 
             return Response::json(['status' => 'success', 'data' => '', 'message' => '添加成功']);
         } else {
-            // 加密方式、协议、混淆
+            // 加密方式、协议、混淆、等级、分组、国家地区
             $view['method_list'] = $this->methodList();
             $view['protocol_list'] = $this->protocolList();
             $view['obfs_list'] = $this->obfsList();
             $view['level_list'] = $this->levelList();
             $view['group_list'] = SsGroup::query()->get();
+            $view['country_list'] = Country::query()->get();
 
             return Response::view('admin/addNode', $view);
         }
@@ -423,6 +427,7 @@ class AdminController extends BaseController
         if ($request->method() == 'POST') {
             $name = $request->get('name');
             $group_id = $request->get('group_id');
+            $country_code = $request->get('country_code');
             $server = $request->get('server');
             $desc = $request->get('desc');
             $method = $request->get('method');
@@ -448,6 +453,7 @@ class AdminController extends BaseController
             $data = [
                 'name' => $name,
                 'group_id' => $group_id,
+                'country_code' => $country_code,
                 'server' => $server,
                 'desc' => $desc,
                 'method' => $method,
@@ -491,12 +497,13 @@ class AdminController extends BaseController
         } else {
             $view['node'] = SsNode::query()->where('id', $id)->first();
 
-            // 加密方式、协议、混淆
+            // 加密方式、协议、混淆、等级、分组、国家地区
             $view['method_list'] = $this->methodList();
             $view['protocol_list'] = $this->protocolList();
             $view['obfs_list'] = $this->obfsList();
             $view['level_list'] = $this->levelList();
             $view['group_list'] = SsGroup::query()->get();
+            $view['country_list'] = Country::query()->get();
 
             return Response::view('admin/editNode', $view);
         }
@@ -1118,12 +1125,12 @@ TXT;
         exit($this->makeRandStr());
     }
 
-    // 加密方式、混淆、协议、等级
+    // 加密方式、混淆、协议、等级、国家地区
     public function config(Request $request)
     {
         if ($request->method() == 'POST') {
             $name = $request->get('name');
-            $type = $request->get('type', 1); // 类型:1-加密方式(method)、2-协议(protocol)、3-混淆(obfs)、4 用户列表
+            $type = $request->get('type', 1); // 类型:1-加密方式(method)、2-协议(protocol)、3-混淆(obfs)
             $is_default = $request->get('is_default', 0);
             $sort = $request->get('sort', 0);
 
@@ -1132,7 +1139,7 @@ TXT;
             }
 
             // 校验是否已存在
-            $config = SsConfig::where('name', $name)->where('type', $type)->first();
+            $config = SsConfig::query()->where('name', $name)->where('type', $type)->first();
             if ($config) {
                 return Response::json(['status' => 'fail', 'data' => '', 'message' => '配置已经存在,请勿重复添加']);
             }
@@ -1150,6 +1157,7 @@ TXT;
             $view['protocol_list'] = SsConfig::query()->where('type', 2)->get();
             $view['obfs_list'] = SsConfig::query()->where('type', 3)->get();
             $view['level_list'] = $this->levelList();
+            $view['country_list'] = Country::query()->get();
 
             return Response::view('admin/config', $view);
         }
@@ -1226,7 +1234,40 @@ TXT;
         return Response::view('admin/analysis', $view);
     }
 
-    // 等级设置
+    // 添加等级
+    public function addLevel(Request $request)
+    {
+        $level = $request->get('level');
+        $level_name = $request->get('level_name');
+
+        if (empty($level)) {
+            return Response::json(['status' => 'fail', 'data' => '', 'message' => '等级不能为空']);
+        }
+
+        if (empty($level_name)) {
+            return Response::json(['status' => 'fail', 'data' => '', 'message' => '等级名称不能为空']);
+        }
+
+        try {
+            $exists = Level::query()->where('level', $level)->first();
+            if ($exists) {
+                return Response::json(['status' => 'fail', 'data' => '', 'message' => '该等级已存在,请勿重复添加']);
+            }
+
+            Level::query()->create([
+                'level' => $level,
+                'level_name' => $level_name
+            ]);
+
+            return Response::json(['status' => 'success', 'data' => '', 'message' => '提交成功']);
+        } catch (\Exception $e) {
+            Log::error($e->getMessage());
+
+            return Response::json(['status' => 'fail', 'data' => '', 'message' => '操作失败']);
+        }
+    }
+
+    // 编辑等级
     public function updateLevel(Request $request)
     {
         $id = $request->get('id');
@@ -1310,29 +1351,29 @@ TXT;
         }
     }
 
-    // 添加等级
-    public function addLevel(Request $request)
+    // 添加国家/地区
+    public function addCountry(Request $request)
     {
-        $level = $request->get('level');
-        $level_name = $request->get('level_name');
+        $country_name = $request->get('country_name');
+        $country_code = $request->get('country_code');
 
-        if (empty($level)) {
-            return Response::json(['status' => 'fail', 'data' => '', 'message' => '等级不能为空']);
+        if (empty($country_name)) {
+            return Response::json(['status' => 'fail', 'data' => '', 'message' => '国家/地区名称不能为空']);
         }
 
-        if (empty($level_name)) {
-            return Response::json(['status' => 'fail', 'data' => '', 'message' => '等级名称不能为空']);
+        if (empty($country_code)) {
+            return Response::json(['status' => 'fail', 'data' => '', 'message' => '国家/地区代码不能为空']);
         }
 
         try {
-            $exists = Level::query()->where('level', $level)->first();
+            $exists = Country::query()->where('country_name', $country_name)->first();
             if ($exists) {
-                return Response::json(['status' => 'fail', 'data' => '', 'message' => '该等级已存在,请勿重复添加']);
+                return Response::json(['status' => 'fail', 'data' => '', 'message' => '该国家/地区名称已存在,请勿重复添加']);
             }
 
-            Level::query()->create([
-                'level' => $level,
-                'level_name' => $level_name
+            Country::query()->create([
+                'country_name' => $country_name,
+                'country_code' => $country_code
             ]);
 
             return Response::json(['status' => 'success', 'data' => '', 'message' => '提交成功']);
@@ -1343,6 +1384,78 @@ TXT;
         }
     }
 
+    // 编辑国家/地区
+    public function updateCountry(Request $request)
+    {
+        $id = $request->get('id');
+        $country_name = $request->get('country_name');
+        $country_code = $request->get('country_code');
+
+        if (empty($id)) {
+            return Response::json(['status' => 'fail', 'data' => '', 'message' => 'ID不能为空']);
+        }
+
+        if (empty($country_name)) {
+            return Response::json(['status' => 'fail', 'data' => '', 'message' => '国家/地区名称不能为空']);
+        }
+
+        if (empty($country_code)) {
+            return Response::json(['status' => 'fail', 'data' => '', 'message' => '国家/地区代码不能为空']);
+        }
+
+        $country = Country::query()->where('id', $id)->first();
+        if (empty($country)) {
+            return Response::json(['status' => 'fail', 'data' => '', 'message' => '国家/地区不存在']);
+        }
+
+        // 校验该国家/地区下是否存在关联节点
+        $existNode = SsNode::query()->where('country_code', $country->country_code)->get();
+        if (!$existNode->isEmpty()) {
+            return Response::json(['status' => 'fail', 'data' => '', 'message' => '该国家/地区下存在关联节点,请先取消关联']);
+        }
+
+        try {
+            Country::query()->where('id', $id)->update(['country_name' => $country_name, 'country_code' => $country_code]);
+
+            return Response::json(['status' => 'success', 'data' => '', 'message' => '操作成功']);
+        } catch (\Exception $e) {
+            Log::error($e->getMessage());
+
+            return Response::json(['status' => 'fail', 'data' => '', 'message' => '操作失败']);
+        }
+    }
+
+    // 删除国家/地区
+    public function delCountry(Request $request)
+    {
+        $id = $request->get('id');
+
+        if (empty($id)) {
+            return Response::json(['status' => 'fail', 'data' => '', 'message' => 'ID不能为空']);
+        }
+
+        $country = Country::query()->where('id', $id)->first();
+        if (empty($country)) {
+            return Response::json(['status' => 'fail', 'data' => '', 'message' => '国家/地区不存在']);
+        }
+
+        // 校验该国家/地区下是否存在关联节点
+        $existNode = SsNode::query()->where('country_code', $country->country_code)->get();
+        if (!$existNode->isEmpty()) {
+            return Response::json(['status' => 'fail', 'data' => '', 'message' => '该国家/地区下存在关联节点,请先取消关联']);
+        }
+
+        try {
+            Country::query()->where('id', $id)->delete();
+
+            return Response::json(['status' => 'success', 'data' => '', 'message' => '操作成功']);
+        } catch (\Exception $e) {
+            Log::error($e->getMessage());
+
+            return Response::json(['status' => 'fail', 'data' => '', 'message' => '操作失败']);
+        }
+    }
+
     // 系统设置
     public function system(Request $request)
     {

+ 1 - 2
app/Http/Controllers/UserController.php

@@ -66,8 +66,7 @@ class UserController extends BaseController
             ->leftJoin('ss_group', 'ss_group.id', '=', 'ss_group_node.group_id')
             ->leftJoin('ss_node', 'ss_node.id', '=', 'ss_group_node.node_id')
             ->where('ss_group.level', '<=', $user->level)
-            ->paginate(10)
-            ->appends($request->except('page'));
+            ->get();
 
         foreach ($nodeList as &$node) {
             // 生成ssr scheme

+ 21 - 0
app/Http/Models/Country.php

@@ -0,0 +1,21 @@
+<?php
+
+namespace App\Http\Models;
+
+use Illuminate\Database\Eloquent\Model;
+
+/**
+ * 国家/地区
+ * Class Country
+ * @package App\Http\Models
+ */
+class Country extends Model
+{
+    protected $table = 'country';
+    protected $primaryKey = 'id';
+    public $timestamps = false;
+    protected $fillable = [
+        'country_name',
+        'country_code'
+    ];
+}

+ 1 - 0
app/Http/Models/SsNode.php

@@ -16,6 +16,7 @@ class SsNode extends Model
     protected $fillable = [
         'name',
         'group_id',
+        'country_code',
         'server',
         'desc',
         'method',

BIN
public/assets/images/country/au.png


BIN
public/assets/images/country/br.png


BIN
public/assets/images/country/ca.png


BIN
public/assets/images/country/ch.png


BIN
public/assets/images/country/cn.png


BIN
public/assets/images/country/de.png


BIN
public/assets/images/country/dk.png


BIN
public/assets/images/country/eg.png


BIN
public/assets/images/country/es.png


BIN
public/assets/images/country/fr.png


BIN
public/assets/images/country/gr.png


BIN
public/assets/images/country/hk.png


BIN
public/assets/images/country/id.png


BIN
public/assets/images/country/ie.png


BIN
public/assets/images/country/il.png


BIN
public/assets/images/country/in.png


BIN
public/assets/images/country/iq.png


BIN
public/assets/images/country/ir.png


BIN
public/assets/images/country/it.png


BIN
public/assets/images/country/jp.png


BIN
public/assets/images/country/kp.png


BIN
public/assets/images/country/kr.png


BIN
public/assets/images/country/kz.png


BIN
public/assets/images/country/mn.png


BIN
public/assets/images/country/mx.png


BIN
public/assets/images/country/my.png


BIN
public/assets/images/country/nl.png


BIN
public/assets/images/country/no.png


BIN
public/assets/images/country/nr.png


BIN
public/assets/images/country/nz.png


BIN
public/assets/images/country/ph.png


BIN
public/assets/images/country/pic_001.png


BIN
public/assets/images/country/pic_002.png


BIN
public/assets/images/country/pic_003.png


BIN
public/assets/images/country/pic_004.png


BIN
public/assets/images/country/pic_005.png


BIN
public/assets/images/country/pic_006.png


BIN
public/assets/images/country/pic_007.png


BIN
public/assets/images/country/pic_008.png


BIN
public/assets/images/country/pic_009.png


BIN
public/assets/images/country/pic_010.png


BIN
public/assets/images/country/pic_011.png


BIN
public/assets/images/country/pic_012.png


BIN
public/assets/images/country/pic_013.png


BIN
public/assets/images/country/pic_014.png


BIN
public/assets/images/country/pic_015.png


BIN
public/assets/images/country/pic_016.png


BIN
public/assets/images/country/pic_017.png


BIN
public/assets/images/country/pic_018.png


BIN
public/assets/images/country/pic_019.png


BIN
public/assets/images/country/pic_020.png


BIN
public/assets/images/country/pic_021.png


BIN
public/assets/images/country/pic_022.png


BIN
public/assets/images/country/pic_023.png


BIN
public/assets/images/country/pic_024.png


BIN
public/assets/images/country/pic_025.png


BIN
public/assets/images/country/pic_026.png


BIN
public/assets/images/country/pic_027.png


BIN
public/assets/images/country/pic_028.png


BIN
public/assets/images/country/pic_029.png


BIN
public/assets/images/country/pic_030.png


BIN
public/assets/images/country/pic_031.png


BIN
public/assets/images/country/pic_032.png


BIN
public/assets/images/country/pic_033.png


BIN
public/assets/images/country/pic_034.png


BIN
public/assets/images/country/pic_035.png


BIN
public/assets/images/country/pic_036.png


BIN
public/assets/images/country/pic_037.png


BIN
public/assets/images/country/pic_038.png


BIN
public/assets/images/country/pic_039.png


BIN
public/assets/images/country/pic_040.png


BIN
public/assets/images/country/pic_041.png


BIN
public/assets/images/country/pic_042.png


BIN
public/assets/images/country/pic_043.png


BIN
public/assets/images/country/pic_044.png


BIN
public/assets/images/country/pic_045.png


BIN
public/assets/images/country/pic_046.png


BIN
public/assets/images/country/pic_047.png


BIN
public/assets/images/country/pic_048.png


BIN
public/assets/images/country/pic_049.png


BIN
public/assets/images/country/pic_050.png


BIN
public/assets/images/country/pic_051.png


BIN
public/assets/images/country/pic_052.png


BIN
public/assets/images/country/pic_053.png


BIN
public/assets/images/country/pic_054.png


BIN
public/assets/images/country/pic_055.png


BIN
public/assets/images/country/pic_056.png


BIN
public/assets/images/country/pic_057.png


BIN
public/assets/images/country/pic_058.png


BIN
public/assets/images/country/pic_059.png


BIN
public/assets/images/country/pic_060.png


BIN
public/assets/images/country/pic_061.png


BIN
public/assets/images/country/pic_062.png


BIN
public/assets/images/country/pic_063.png


BIN
public/assets/images/country/pic_064.png


BIN
public/assets/images/country/pic_065.png


Unele fișiere nu au fost afișate deoarece prea multe fișiere au fost modificate în acest diff