Browse Source

Code variables type declaration

BrettonYe 9 months ago
parent
commit
08d20d07b8
56 changed files with 695 additions and 796 deletions
  1. 2 2
      app/Helpers/ClientApiResponse.php
  2. 8 11
      app/Http/Controllers/Admin/AffiliateController.php
  3. 12 18
      app/Http/Controllers/Admin/ArticleController.php
  4. 5 4
      app/Http/Controllers/Admin/CertController.php
  5. 13 17
      app/Http/Controllers/Admin/Config/CategoryController.php
  6. 14 18
      app/Http/Controllers/Admin/Config/CountryController.php
  7. 12 15
      app/Http/Controllers/Admin/Config/EmailFilterController.php
  8. 12 16
      app/Http/Controllers/Admin/Config/LabelController.php
  9. 13 17
      app/Http/Controllers/Admin/Config/LevelController.php
  10. 11 15
      app/Http/Controllers/Admin/Config/SsConfigController.php
  11. 18 26
      app/Http/Controllers/Admin/CouponController.php
  12. 5 5
      app/Http/Controllers/Admin/InviteController.php
  13. 24 33
      app/Http/Controllers/Admin/LogsController.php
  14. 14 15
      app/Http/Controllers/Admin/MarketingController.php
  15. 13 17
      app/Http/Controllers/Admin/NodeAuthController.php
  16. 49 35
      app/Http/Controllers/Admin/NodeController.php
  17. 4 3
      app/Http/Controllers/Admin/PermissionController.php
  18. 3 3
      app/Http/Controllers/Admin/ReportController.php
  19. 4 3
      app/Http/Controllers/Admin/RoleController.php
  20. 18 23
      app/Http/Controllers/Admin/RuleController.php
  21. 5 4
      app/Http/Controllers/Admin/RuleGroupController.php
  22. 15 16
      app/Http/Controllers/Admin/ShopController.php
  23. 16 23
      app/Http/Controllers/Admin/SubscribeController.php
  24. 15 17
      app/Http/Controllers/Admin/SystemController.php
  25. 18 24
      app/Http/Controllers/Admin/TicketController.php
  26. 35 42
      app/Http/Controllers/Admin/ToolsController.php
  27. 39 41
      app/Http/Controllers/Admin/UserController.php
  28. 5 4
      app/Http/Controllers/Admin/UserGroupController.php
  29. 3 4
      app/Http/Controllers/AdminController.php
  30. 8 11
      app/Http/Controllers/Api/Client/ClientController.php
  31. 97 108
      app/Http/Controllers/AuthController.php
  32. 8 9
      app/Http/Controllers/MessageController.php
  33. 3 4
      app/Http/Controllers/OAuthController.php
  34. 21 21
      app/Http/Controllers/PaymentController.php
  35. 11 12
      app/Http/Controllers/User/AffiliateController.php
  36. 3 2
      app/Http/Controllers/User/ArticleController.php
  37. 8 8
      app/Http/Controllers/User/InviteController.php
  38. 10 10
      app/Http/Controllers/User/InvoiceController.php
  39. 7 12
      app/Http/Controllers/User/NodeController.php
  40. 12 12
      app/Http/Controllers/User/ShopController.php
  41. 2 3
      app/Http/Controllers/User/SubscribeController.php
  42. 13 14
      app/Http/Controllers/User/TicketController.php
  43. 36 46
      app/Http/Controllers/UserController.php
  44. 1 2
      app/Models/UserSubscribe.php
  45. 1 2
      app/Services/CouponService.php
  46. 5 5
      app/Utils/Clients/Protocols/Clash.php
  47. 6 6
      app/Utils/Clients/Protocols/QuantumultX.php
  48. 3 3
      app/Utils/Clients/Protocols/Surge.php
  49. 11 11
      app/Utils/Clients/Protocols/URLSchemes.php
  50. 2 2
      app/helpers.php
  51. 1 1
      resources/views/admin/layouts.blade.php
  52. 3 3
      resources/views/user/knowledge.blade.php
  53. 2 2
      resources/views/user/layouts.blade.php
  54. 5 5
      resources/views/user/nodeList.blade.php
  55. 10 10
      resources/views/user/profile.blade.php
  56. 1 1
      resources/views/user/services.blade.php

+ 2 - 2
app/Helpers/ClientApiResponse.php

@@ -21,12 +21,12 @@ trait ClientApiResponse
         self::$client = $client;
     }
 
-    public function succeed(?array $data = null, ?array $addition = null, array $codeResponse = ResponseEnum::HTTP_OK): JsonResponse
+    public function succeed(array|bool|null $data = null, ?array $addition = null, array $codeResponse = ResponseEnum::HTTP_OK): JsonResponse
     {
         return $this->jsonResponse(1, $codeResponse, $data, $addition);
     }
 
-    private function jsonResponse(int $status, array $codeResponse, array|string|null $data = null, ?array $addition = null): JsonResponse
+    private function jsonResponse(int $status, array $codeResponse, array|bool|null $data = null, ?array $addition = null): JsonResponse
     {
         [$code, $message] = $codeResponse;
         $code = $code > 1000 ? (int) ($code / 1000) : $code;

+ 8 - 11
app/Http/Controllers/Admin/AffiliateController.php

@@ -5,14 +5,14 @@ namespace App\Http\Controllers\Admin;
 use App\Http\Controllers\Controller;
 use App\Models\ReferralApply;
 use App\Models\ReferralLog;
+use Illuminate\Contracts\View\View;
 use Illuminate\Http\JsonResponse;
 use Illuminate\Http\Request;
 
 class AffiliateController extends Controller
 {
-    // 提现申请列表
-    public function index(Request $request)
-    {
+    public function index(Request $request): View
+    { // 提现申请列表
         $query = ReferralApply::with('user:id,username');
         $request->whenFilled('username', function ($username) use ($query) {
             $query->whereHas('user', function ($query) use ($username) {
@@ -27,18 +27,16 @@ class AffiliateController extends Controller
         return view('admin.aff.index', ['applyList' => $query->latest()->paginate(15)->appends($request->except('page'))]);
     }
 
-    // 提现申请详情
-    public function detail(Request $request, ReferralApply $aff)
-    {
+    public function detail(Request $request, ReferralApply $aff): View
+    { // 提现申请详情
         return view('admin.aff.detail', [
             'referral' => $aff->load('user:id,username'),
             'commissions' => $aff->referral_logs()->with(['invitee:id,username', 'order.goods:id,name'])->paginate()->appends($request->except('page')),
         ]);
     }
 
-    // 设置提现申请状态
     public function setStatus(Request $request, ReferralApply $aff): JsonResponse
-    {
+    { // 设置提现申请状态
         $status = (int) $request->input('status');
 
         if ($aff->update(['status' => $status])) {
@@ -55,9 +53,8 @@ class AffiliateController extends Controller
         return response()->json(['status' => 'fail', 'message' => trans('common.failed_item', ['attribute' => trans('common.action')])]);
     }
 
-    // 用户返利流水记录
-    public function rebate(Request $request)
-    {
+    public function rebate(Request $request): View
+    { // 用户返利流水记录
         $query = ReferralLog::with(['invitee:id,username', 'inviter:id,username'])->orderBy('status')->latest();
 
         $request->whenFilled('invitee_username', function ($username) use ($query) {

+ 12 - 18
app/Http/Controllers/Admin/ArticleController.php

@@ -7,6 +7,7 @@ use App\Http\Requests\Admin\ArticleRequest;
 use App\Models\Article;
 use App\Services\ArticleService;
 use Exception;
+use Illuminate\Contracts\View\View;
 use Illuminate\Http\JsonResponse;
 use Illuminate\Http\RedirectResponse;
 use Illuminate\Http\Request;
@@ -16,9 +17,8 @@ use Str;
 
 class ArticleController extends Controller
 {
-    public function index(Request $request)
-    {
-        // 文章列表
+    public function index(Request $request): View
+    { // 文章列表
         $categories = Article::whereNotNull('category')->distinct()->get('category');
         $articles = Article::query();
 
@@ -34,8 +34,7 @@ class ArticleController extends Controller
     }
 
     public function store(ArticleRequest $request): RedirectResponse
-    {
-        // 添加文章
+    { // 添加文章
         $data = $request->validated();
 
         try {
@@ -66,33 +65,29 @@ class ArticleController extends Controller
         return $file->storeAs('public', $fileName) ? 'upload/'.$fileName : false;
     }
 
-    public function create()
-    {
-        // 添加文章页面
+    public function create(): View
+    { // 添加文章页面
         $categories = Article::whereNotNull('category')->distinct()->get('category');
 
         return view('admin.article.info', compact('categories'));
     }
 
-    public function show(Article $article)
-    {
-        // 文章页面
+    public function show(Article $article): View
+    { // 文章页面
         $article->content = (new ArticleService($article))->getContent();
 
         return view('admin.article.show', compact('article'));
     }
 
-    public function edit(Article $article)
-    {
-        // 编辑文章页面
+    public function edit(Article $article): View
+    { // 编辑文章页面
         $categories = Article::whereNotNull('category')->distinct()->get('category');
 
         return view('admin.article.info', compact('article', 'categories'));
     }
 
     public function update(ArticleRequest $request, Article $article): RedirectResponse
-    {
-        // 编辑文章
+    { // 编辑文章
         $data = $request->validated();
 
         if ($data['type'] !== '4' && $request->hasFile('logo')) {
@@ -113,8 +108,7 @@ class ArticleController extends Controller
     }
 
     public function destroy(Article $article): JsonResponse
-    {
-        // 删除文章
+    { // 删除文章
         try {
             $article->delete();
         } catch (Exception $e) {

+ 5 - 4
app/Http/Controllers/Admin/CertController.php

@@ -6,13 +6,14 @@ use App\Http\Controllers\Controller;
 use App\Http\Requests\Admin\CertRequest;
 use App\Models\NodeCertificate;
 use Exception;
+use Illuminate\Contracts\View\View;
 use Illuminate\Http\JsonResponse;
 use Illuminate\Http\RedirectResponse;
 use Log;
 
 class CertController extends Controller
 {
-    public function index()
+    public function index(): View
     {
         $certs = NodeCertificate::orderBy('id')->paginate()->appends(request('page'));
         foreach ($certs as $cert) {
@@ -29,7 +30,7 @@ class CertController extends Controller
         return view('admin.node.cert.index', ['certs' => $certs]);
     }
 
-    public function store(CertRequest $request)
+    public function store(CertRequest $request): RedirectResponse
     {
         if ($cert = NodeCertificate::create($request->validated())) {
             return redirect(route('admin.node.cert.edit', $cert))->with('successMsg', trans('common.success_item', ['attribute' => trans('common.add')]));
@@ -38,12 +39,12 @@ class CertController extends Controller
         return redirect()->back()->withInput()->withErrors(trans('common.failed_item', ['attribute' => trans('common.add')]));
     }
 
-    public function create()
+    public function create(): View
     {
         return view('admin.node.cert.info');
     }
 
-    public function edit(NodeCertificate $cert)
+    public function edit(NodeCertificate $cert): View
     {
         return view('admin.node.cert.info', compact('cert'));
     }

+ 13 - 17
app/Http/Controllers/Admin/Config/CategoryController.php

@@ -8,63 +8,59 @@ use Exception;
 use Illuminate\Http\JsonResponse;
 use Illuminate\Http\Request;
 use Log;
-use Response;
 use Validator;
 
 class CategoryController extends Controller
 {
-    // 添加等级
     public function store(Request $request): JsonResponse
-    {
+    { // 添加等级
         $validator = Validator::make($request->all(), ['name' => 'required']);
 
         if ($validator->fails()) {
-            return Response::json(['status' => 'fail', 'message' => $validator->errors()->all()]);
+            return response()->json(['status' => 'fail', 'message' => $validator->errors()->all()]);
         }
 
         if (GoodsCategory::create($validator->validated())) {
-            return Response::json(['status' => 'success', 'message' => trans('common.success_item', ['attribute' => trans('common.add')])]);
+            return response()->json(['status' => 'success', 'message' => trans('common.success_item', ['attribute' => trans('common.add')])]);
         }
 
-        return Response::json(['status' => 'fail', 'message' => trans('common.failed_item', ['attribute' => trans('common.add')])]);
+        return response()->json(['status' => 'fail', 'message' => trans('common.failed_item', ['attribute' => trans('common.add')])]);
     }
 
-    // 编辑等级
     public function update(Request $request, GoodsCategory $category): JsonResponse
-    {
+    { // 编辑等级
         $validator = Validator::make($request->all(), [
             'name' => 'required',
             'sort' => 'required|numeric',
         ]);
 
         if ($validator->fails()) {
-            return Response::json(['status' => 'fail', 'message' => $validator->errors()->all()]);
+            return response()->json(['status' => 'fail', 'message' => $validator->errors()->all()]);
         }
         if ($category->update($validator->validated())) {
-            return Response::json(['status' => 'success', 'message' => trans('common.success_item', ['attribute' => trans('common.edit')])]);
+            return response()->json(['status' => 'success', 'message' => trans('common.success_item', ['attribute' => trans('common.edit')])]);
         }
 
-        return Response::json(['status' => 'fail', 'message' => trans('common.failed_item', ['attribute' => trans('common.edit')])]);
+        return response()->json(['status' => 'fail', 'message' => trans('common.failed_item', ['attribute' => trans('common.edit')])]);
     }
 
-    // 删除等级
     public function destroy(GoodsCategory $category): JsonResponse
-    {
+    { // 删除等级
         // 校验该等级下是否存在关联账号
         if ($category->goods()->exists()) {
-            return Response::json(['status' => 'fail', 'message' => trans('common.exists_error', ['attribute' => trans('model.goods.category')])]);
+            return response()->json(['status' => 'fail', 'message' => trans('common.exists_error', ['attribute' => trans('model.goods.category')])]);
         }
 
         try {
             if ($category->delete()) {
-                return Response::json(['status' => 'success', 'message' => trans('common.success_item', ['attribute' => trans('common.delete')])]);
+                return response()->json(['status' => 'success', 'message' => trans('common.success_item', ['attribute' => trans('common.delete')])]);
             }
         } catch (Exception $e) {
             Log::error(trans('common.error_action_item', ['action' => trans('common.delete'), 'attribute' => trans('model.common.level')]).': '.$e->getMessage());
 
-            return Response::json(['status' => 'fail', 'message' => trans('common.failed_item', ['attribute' => trans('common.delete')]).', '.$e->getMessage()]);
+            return response()->json(['status' => 'fail', 'message' => trans('common.failed_item', ['attribute' => trans('common.delete')]).', '.$e->getMessage()]);
         }
 
-        return Response::json(['status' => 'fail', 'message' => trans('common.failed_item', ['attribute' => trans('common.delete')])]);
+        return response()->json(['status' => 'fail', 'message' => trans('common.failed_item', ['attribute' => trans('common.delete')])]);
     }
 }

+ 14 - 18
app/Http/Controllers/Admin/Config/CountryController.php

@@ -8,70 +8,66 @@ use Exception;
 use Illuminate\Http\JsonResponse;
 use Illuminate\Http\Request;
 use Log;
-use Response;
 use Validator;
 
 class CountryController extends Controller
 {
-    // 添加国家/地区
     public function store(Request $request): JsonResponse
-    {
+    { // 添加国家/地区
         $validator = Validator::make($request->all(), [
             'code' => 'required|string|unique:country,code',
             'name' => 'required',
         ]);
 
         if ($validator->fails()) {
-            return Response::json(['status' => 'fail', 'message' => $validator->errors()->all()]);
+            return response()->json(['status' => 'fail', 'message' => $validator->errors()->all()]);
         }
 
         if (Country::create($validator->validated())) {
-            return Response::json(['status' => 'success', 'message' => trans('common.success_item', ['attribute' => trans('common.add')])]);
+            return response()->json(['status' => 'success', 'message' => trans('common.success_item', ['attribute' => trans('common.add')])]);
         }
 
-        return Response::json(['status' => 'fail', 'message' => trans('common.failed_item', ['attribute' => trans('common.add')])]);
+        return response()->json(['status' => 'fail', 'message' => trans('common.failed_item', ['attribute' => trans('common.add')])]);
     }
 
-    // 编辑国家/地区
     public function update(Request $request, Country $country): JsonResponse
-    {
+    { // 编辑国家/地区
         $validator = Validator::make($request->all(), ['name' => 'required']);
 
         if ($validator->fails()) {
-            return Response::json(['status' => 'fail', 'message' => $validator->errors()->all()]);
+            return response()->json(['status' => 'fail', 'message' => $validator->errors()->all()]);
         }
 
         try {
             if ($country->update($validator->validated())) {
-                return Response::json(['status' => 'success', 'message' => trans('common.success_item', ['attribute' => trans('common.edit')])]);
+                return response()->json(['status' => 'success', 'message' => trans('common.success_item', ['attribute' => trans('common.edit')])]);
             }
         } catch (Exception $e) {
             Log::error(trans('common.error_action_item', ['action' => trans('common.edit'), 'attribute' => trans('model.node.country')]).': '.$e->getMessage());
 
-            return Response::json(['status' => 'fail', 'message' => trans('common.failed_item', ['attribute' => trans('common.edit')]).', '.$e->getMessage()]);
+            return response()->json(['status' => 'fail', 'message' => trans('common.failed_item', ['attribute' => trans('common.edit')]).', '.$e->getMessage()]);
         }
 
-        return Response::json(['status' => 'fail', 'message' => trans('common.failed_item', ['attribute' => trans('common.edit')])]);
+        return response()->json(['status' => 'fail', 'message' => trans('common.failed_item', ['attribute' => trans('common.edit')])]);
     }
 
-    // 删除国家/地区
     public function destroy(Country $country): JsonResponse
-    {
+    { // 删除国家/地区
         // 校验该国家/地区下是否存在关联节点
         if ($country->nodes()->exists()) {
-            return Response::json(['status' => 'fail', 'message' => trans('common.exists_error', ['attribute' => trans('model.node.country')])]);
+            return response()->json(['status' => 'fail', 'message' => trans('common.exists_error', ['attribute' => trans('model.node.country')])]);
         }
 
         try {
             if ($country->delete()) {
-                return Response::json(['status' => 'success', 'message' => trans('common.success_item', ['attribute' => trans('common.delete')])]);
+                return response()->json(['status' => 'success', 'message' => trans('common.success_item', ['attribute' => trans('common.delete')])]);
             }
         } catch (Exception $e) {
             Log::error(trans('common.error_action_item', ['action' => trans('common.delete'), 'attribute' => trans('model.node.country')]).': '.$e->getMessage());
 
-            return Response::json(['status' => 'fail', 'message' => trans('common.failed_item', ['attribute' => trans('common.delete')]).', '.$e->getMessage()]);
+            return response()->json(['status' => 'fail', 'message' => trans('common.failed_item', ['attribute' => trans('common.delete')]).', '.$e->getMessage()]);
         }
 
-        return Response::json(['status' => 'fail', 'message' => trans('common.failed_item', ['attribute' => trans('common.delete')])]);
+        return response()->json(['status' => 'fail', 'message' => trans('common.failed_item', ['attribute' => trans('common.delete')])]);
     }
 }

+ 12 - 15
app/Http/Controllers/Admin/Config/EmailFilterController.php

@@ -5,58 +5,55 @@ namespace App\Http\Controllers\Admin\Config;
 use App\Http\Controllers\Controller;
 use App\Models\EmailFilter;
 use Exception;
+use Illuminate\Contracts\View\View;
 use Illuminate\Http\JsonResponse;
 use Illuminate\Http\Request;
 use Log;
-use Response;
 use Validator;
 
 class EmailFilterController extends Controller
 {
-    // 邮箱过滤列表
-    public function index()
-    {
+    public function index(): View
+    { // 邮箱过滤列表
         return view('admin.config.emailFilter', ['filters' => EmailFilter::orderByDesc('id')->paginate()]);
     }
 
-    // 添加邮箱后缀
     public function store(Request $request): JsonResponse
-    {
+    { // 添加邮箱后缀
         $validator = Validator::make($request->all(), [
             'type' => 'required|numeric|between:1,2',
             'words' => 'required|unique:email_filter',
         ]);
 
         if ($validator->fails()) {
-            return Response::json(['status' => 'fail', 'message' => $validator->errors()->all()]);
+            return response()->json(['status' => 'fail', 'message' => $validator->errors()->all()]);
         }
 
         try {
             if (EmailFilter::create($validator->validated())) {
-                return Response::json(['status' => 'success', 'message' => trans('common.success_item', ['attribute' => trans('common.add')])]);
+                return response()->json(['status' => 'success', 'message' => trans('common.success_item', ['attribute' => trans('common.add')])]);
             }
         } catch (Exception $e) {
             Log::error(trans('common.error_action_item', ['action' => trans('common.add'), 'attribute' => trans('admin.setting.email.tail')]).': '.$e->getMessage());
 
-            return Response::json(['status' => 'fail', 'message' => trans('common.failed_item', ['attribute' => trans('common.add')]).', '.$e->getMessage()]);
+            return response()->json(['status' => 'fail', 'message' => trans('common.failed_item', ['attribute' => trans('common.add')]).', '.$e->getMessage()]);
         }
 
-        return Response::json(['status' => 'fail', 'message' => trans('common.failed_item', ['attribute' => trans('common.add')])]);
+        return response()->json(['status' => 'fail', 'message' => trans('common.failed_item', ['attribute' => trans('common.add')])]);
     }
 
-    // 删除邮箱后缀
     public function destroy(EmailFilter $filter): JsonResponse
-    {
+    { // 删除邮箱后缀
         try {
             if ($filter->delete()) {
-                return Response::json(['status' => 'success', 'message' => trans('common.success_item', ['attribute' => trans('common.delete')])]);
+                return response()->json(['status' => 'success', 'message' => trans('common.success_item', ['attribute' => trans('common.delete')])]);
             }
         } catch (Exception $e) {
             Log::error(trans('common.error_action_item', ['action' => trans('common.delete'), 'attribute' => trans('admin.setting.email.tail')]).': '.$e->getMessage());
 
-            return Response::json(['status' => 'fail', 'message' => trans('common.failed_item', ['attribute' => trans('common.delete')]).', '.$e->getMessage()]);
+            return response()->json(['status' => 'fail', 'message' => trans('common.failed_item', ['attribute' => trans('common.delete')]).', '.$e->getMessage()]);
         }
 
-        return Response::json(['status' => 'fail', 'message' => trans('common.failed_item', ['attribute' => trans('common.delete')])]);
+        return response()->json(['status' => 'fail', 'message' => trans('common.failed_item', ['attribute' => trans('common.delete')])]);
     }
 }

+ 12 - 16
app/Http/Controllers/Admin/Config/LabelController.php

@@ -8,60 +8,56 @@ use Exception;
 use Illuminate\Http\JsonResponse;
 use Illuminate\Http\Request;
 use Log;
-use Response;
 use Validator;
 
 class LabelController extends Controller
 {
-    // 添加标签
     public function store(Request $request): JsonResponse
-    {
+    { // 添加标签
         $validator = Validator::make($request->all(), [
             'name' => 'required|string|unique:label,name',
             'sort' => 'required|numeric',
         ]);
 
         if ($validator->fails()) {
-            return Response::json(['status' => 'fail', 'message' => $validator->errors()->all()]);
+            return response()->json(['status' => 'fail', 'message' => $validator->errors()->all()]);
         }
 
         if (Label::create($validator->validated())) {
-            return Response::json(['status' => 'success', 'message' => trans('common.success_item', ['attribute' => trans('common.add')])]);
+            return response()->json(['status' => 'success', 'message' => trans('common.success_item', ['attribute' => trans('common.add')])]);
         }
 
-        return Response::json(['status' => 'fail', 'message' => trans('common.failed_item', ['attribute' => trans('common.add')])]);
+        return response()->json(['status' => 'fail', 'message' => trans('common.failed_item', ['attribute' => trans('common.add')])]);
     }
 
-    // 编辑标签
     public function update(Request $request, Label $label): JsonResponse
-    {
+    { // 编辑标签
         $validator = Validator::make($request->all(), [
             'name' => 'required|string|unique:label,name,'.$label->id,
             'sort' => 'required|numeric',
         ]);
 
         if ($validator->fails()) {
-            return Response::json(['status' => 'fail', 'message' => $validator->errors()->all()]);
+            return response()->json(['status' => 'fail', 'message' => $validator->errors()->all()]);
         }
 
         if ($label->update($validator->validated())) {
-            return Response::json(['status' => 'success', 'message' => trans('common.success_item', ['attribute' => trans('common.edit')])]);
+            return response()->json(['status' => 'success', 'message' => trans('common.success_item', ['attribute' => trans('common.edit')])]);
         }
 
-        return Response::json(['status' => 'fail', 'message' => trans('common.failed_item', ['attribute' => trans('common.edit')])]);
+        return response()->json(['status' => 'fail', 'message' => trans('common.failed_item', ['attribute' => trans('common.edit')])]);
     }
 
-    // 删除标签
-    public function destroy(Label $label): ?JsonResponse
-    {
+    public function destroy(Label $label): JsonResponse
+    { // 删除标签
         try {
             $label->delete();
 
-            return Response::json(['status' => 'success', 'message' => trans('common.success_item', ['attribute' => trans('common.delete')])]);
+            return response()->json(['status' => 'success', 'message' => trans('common.success_item', ['attribute' => trans('common.delete')])]);
         } catch (Exception $e) {
             Log::error(trans('common.error_action_item', ['action' => trans('common.delete'), 'attribute' => trans('model.node.label')]).': '.$e->getMessage());
 
-            return Response::json(['status' => 'fail', 'message' => trans('common.failed_item', ['attribute' => trans('common.delete')]).', '.$e->getMessage()]);
+            return response()->json(['status' => 'fail', 'message' => trans('common.failed_item', ['attribute' => trans('common.delete')]).', '.$e->getMessage()]);
         }
     }
 }

+ 13 - 17
app/Http/Controllers/Admin/Config/LevelController.php

@@ -8,67 +8,63 @@ use Exception;
 use Illuminate\Http\JsonResponse;
 use Illuminate\Http\Request;
 use Log;
-use Response;
 use Validator;
 
 class LevelController extends Controller
 {
-    // 添加等级
     public function store(Request $request): JsonResponse
-    {
+    { // 添加等级
         $validator = Validator::make($request->all(), [
             'level' => 'required|numeric|unique:level,level',
             'name' => 'required',
         ]);
 
         if ($validator->fails()) {
-            return Response::json(['status' => 'fail', 'message' => $validator->errors()->all()]);
+            return response()->json(['status' => 'fail', 'message' => $validator->errors()->all()]);
         }
 
         if (Level::create($validator->validated())) {
-            return Response::json(['status' => 'success', 'message' => trans('common.success_item', ['attribute' => trans('common.add')])]);
+            return response()->json(['status' => 'success', 'message' => trans('common.success_item', ['attribute' => trans('common.add')])]);
         }
 
-        return Response::json(['status' => 'fail', 'message' => trans('common.failed_item', ['attribute' => trans('common.add')])]);
+        return response()->json(['status' => 'fail', 'message' => trans('common.failed_item', ['attribute' => trans('common.add')])]);
     }
 
-    // 编辑等级
     public function update(Request $request, Level $level): JsonResponse
-    {
+    { // 编辑等级
         $validator = Validator::make($request->all(), [
             'level' => 'required|numeric|unique:level,level,'.$level->id,
             'name' => 'required',
         ]);
 
         if ($validator->fails()) {
-            return Response::json(['status' => 'fail', 'message' => $validator->errors()->all()]);
+            return response()->json(['status' => 'fail', 'message' => $validator->errors()->all()]);
         }
 
         if ($level->update($validator->validated())) {
-            return Response::json(['status' => 'success', 'message' => trans('common.success_item', ['attribute' => trans('common.edit')])]);
+            return response()->json(['status' => 'success', 'message' => trans('common.success_item', ['attribute' => trans('common.edit')])]);
         }
 
-        return Response::json(['status' => 'fail', 'message' => trans('common.failed_item', ['attribute' => trans('common.edit')])]);
+        return response()->json(['status' => 'fail', 'message' => trans('common.failed_item', ['attribute' => trans('common.edit')])]);
     }
 
-    // 删除等级
     public function destroy(Level $level): JsonResponse
-    {
+    { // 删除等级
         // 校验该等级下是否存在关联账号
         if ($level->users()->exists()) {
-            return Response::json(['status' => 'fail', 'message' => trans('common.exists_error', ['attribute' => trans('model.common.level')])]);
+            return response()->json(['status' => 'fail', 'message' => trans('common.exists_error', ['attribute' => trans('model.common.level')])]);
         }
 
         try {
             if ($level->delete()) {
-                return Response::json(['status' => 'success', 'message' => trans('common.success_item', ['attribute' => trans('common.delete')])]);
+                return response()->json(['status' => 'success', 'message' => trans('common.success_item', ['attribute' => trans('common.delete')])]);
             }
         } catch (Exception $e) {
             Log::error(trans('common.error_action_item', ['action' => trans('common.delete'), 'attribute' => trans('model.common.level')]).': '.$e->getMessage());
 
-            return Response::json(['status' => 'fail', 'message' => trans('common.failed_item', ['attribute' => trans('common.delete')]).', '.$e->getMessage()]);
+            return response()->json(['status' => 'fail', 'message' => trans('common.failed_item', ['attribute' => trans('common.delete')]).', '.$e->getMessage()]);
         }
 
-        return Response::json(['status' => 'fail', 'message' => trans('common.failed_item', ['attribute' => trans('common.delete')])]);
+        return response()->json(['status' => 'fail', 'message' => trans('common.failed_item', ['attribute' => trans('common.delete')])]);
     }
 }

+ 11 - 15
app/Http/Controllers/Admin/Config/SsConfigController.php

@@ -8,53 +8,49 @@ use Exception;
 use Illuminate\Http\JsonResponse;
 use Illuminate\Http\Request;
 use Log;
-use Response;
 use Validator;
 
 class SsConfigController extends Controller
 {
-    // 添加SS配置
     public function store(Request $request): JsonResponse
-    {
+    { // 添加SS配置
         $validator = Validator::make($request->all(), [
             'name' => 'required|string|unique:ss_config,name',
             'type' => 'required|numeric|between:1,3',
         ]);
 
         if ($validator->fails()) {
-            return Response::json(['status' => 'fail', 'message' => $validator->errors()->all()]);
+            return response()->json(['status' => 'fail', 'message' => $validator->errors()->all()]);
         }
 
         if (SsConfig::create($validator->validated())) {
-            return Response::json(['status' => 'success', 'message' => trans('common.success_item', ['attribute' => trans('common.add')])]);
+            return response()->json(['status' => 'success', 'message' => trans('common.success_item', ['attribute' => trans('common.add')])]);
         }
 
-        return Response::json(['status' => 'fail', 'message' => trans('common.failed_item', ['attribute' => trans('common.add')])]);
+        return response()->json(['status' => 'fail', 'message' => trans('common.failed_item', ['attribute' => trans('common.add')])]);
     }
 
-    // 设置SS默认配置
     public function update(SsConfig $ss): JsonResponse
-    {
+    { // 设置SS默认配置
         if ($ss->setDefault()) {
-            return Response::json(['status' => 'success', 'message' => trans('common.success_item', ['attribute' => trans('common.edit')])]);
+            return response()->json(['status' => 'success', 'message' => trans('common.success_item', ['attribute' => trans('common.edit')])]);
         }
 
-        return Response::json(['status' => 'fail', 'message' => trans('common.failed_item', ['attribute' => trans('common.edit')])]);
+        return response()->json(['status' => 'fail', 'message' => trans('common.failed_item', ['attribute' => trans('common.edit')])]);
     }
 
-    // 删除SS配置
     public function destroy(SsConfig $ss): JsonResponse
-    {
+    { // 删除SS配置
         try {
             if ($ss->delete()) {
-                return Response::json(['status' => 'success', 'message' => trans('common.success_item', ['attribute' => trans('common.delete')])]);
+                return response()->json(['status' => 'success', 'message' => trans('common.success_item', ['attribute' => trans('common.delete')])]);
             }
         } catch (Exception $e) {
             Log::error(trans('common.error_action_item', ['action' => trans('common.delete'), 'attribute' => trans('user.node.info')]).': '.$e->getMessage());
 
-            return Response::json(['status' => 'fail', 'message' => trans('common.failed_item', ['attribute' => trans('common.delete')]).', '.$e->getMessage()]);
+            return response()->json(['status' => 'fail', 'message' => trans('common.failed_item', ['attribute' => trans('common.delete')]).', '.$e->getMessage()]);
         }
 
-        return Response::json(['status' => 'fail', 'message' => trans('common.failed_item', ['attribute' => trans('common.delete')])]);
+        return response()->json(['status' => 'fail', 'message' => trans('common.failed_item', ['attribute' => trans('common.delete')])]);
     }
 }

+ 18 - 26
app/Http/Controllers/Admin/CouponController.php

@@ -9,21 +9,19 @@ use App\Models\Level;
 use App\Models\UserGroup;
 use App\Utils\Helpers;
 use Exception;
+use Illuminate\Contracts\View\View;
 use Illuminate\Http\JsonResponse;
 use Illuminate\Http\RedirectResponse;
 use Illuminate\Http\Request;
 use Log;
 use PhpOffice\PhpSpreadsheet\IOFactory;
 use PhpOffice\PhpSpreadsheet\Spreadsheet;
-use Redirect;
-use Response;
 use Str;
 
 class CouponController extends Controller
 {
-    // 优惠券列表
-    public function index(Request $request)
-    {
+    public function index(Request $request): View
+    { // 优惠券列表
         $query = Coupon::query();
 
         $request->whenFilled('sn', function ($sn) use ($query) {
@@ -39,9 +37,8 @@ class CouponController extends Controller
         return view('admin.coupon.index', ['couponList' => $query->latest()->paginate(15)->appends($request->except('page'))]);
     }
 
-    // 优惠券列表
-    public function show(Coupon $coupon)
-    {
+    public function show(Coupon $coupon): View
+    { // 优惠券列表
         return view('admin.coupon.show', [
             'coupon' => $coupon,
             'userGroups' => UserGroup::all()->pluck('name', 'id')->toArray(),
@@ -49,16 +46,14 @@ class CouponController extends Controller
         ]);
     }
 
-    // 添加优惠券
-    public function store(CouponRequest $request): ?RedirectResponse
-    {
-        // 优惠卷LOGO
+    public function store(CouponRequest $request): RedirectResponse
+    { // 添加优惠券
         $logo = null;
-        if ($request->hasFile('logo')) {
+        if ($request->hasFile('logo')) { // 优惠卷LOGO
             $file = $request->file('logo');
             $fileName = Str::random(8).time().'.'.$file->getClientOriginalExtension();
             if (! $file->storeAs('public', $fileName)) {
-                return Redirect::back()->withInput()->withErrors(trans('common.failed_action_item', ['action' => trans('common.store'), 'attribute' => trans('model.coupon.logo')]));
+                return redirect()->back()->withInput()->withErrors(trans('common.failed_action_item', ['action' => trans('common.store'), 'attribute' => trans('model.coupon.logo')]));
             }
             $logo = 'upload/'.$fileName;
         }
@@ -95,42 +90,39 @@ class CouponController extends Controller
                 Coupon::create($data);
             }
 
-            return Redirect::route('admin.coupon.index')->with('successMsg', trans('common.success_item', ['attribute' => trans('common.generate')]));
+            return redirect(route('admin.coupon.index'))->with('successMsg', trans('common.success_item', ['attribute' => trans('common.generate')]));
         } catch (Exception $e) {
             Log::error(trans('common.error_action_item', ['action' => trans('common.generate'), 'attribute' => trans('model.coupon.attribute')]).': '.$e->getMessage());
 
-            return Redirect::back()->withInput()->withInput()->withErrors(trans('common.failed_item', ['attribute' => trans('common.generate')]).', '.$e->getMessage());
+            return redirect()->back()->withInput()->withInput()->withErrors(trans('common.failed_item', ['attribute' => trans('common.generate')]).', '.$e->getMessage());
         }
     }
 
-    // 添加优惠券页面
-    public function create()
-    {
+    public function create(): View
+    { // 添加优惠券页面
         return view('admin.coupon.create', [
             'userGroups' => UserGroup::all()->pluck('name', 'id')->toArray(),
             'levels' => Level::all()->pluck('name', 'level')->toArray(),
         ]);
     }
 
-    // 删除优惠券
     public function destroy(Coupon $coupon): JsonResponse
-    {
+    { // 删除优惠券
         try {
             if ($coupon->delete()) {
-                return Response::json(['status' => 'success', 'message' => trans('common.success_item', ['attribute' => trans('common.delete')])]);
+                return response()->json(['status' => 'success', 'message' => trans('common.success_item', ['attribute' => trans('common.delete')])]);
             }
         } catch (Exception $e) {
             Log::error(trans('common.error_action_item', ['action' => trans('common.delete'), 'attribute' => trans('model.coupon.attribute')]).': '.$e->getMessage());
 
-            return Response::json(['status' => 'fail', 'message' => trans('common.failed_item', ['attribute' => trans('common.delete')]).', '.$e->getMessage()]);
+            return response()->json(['status' => 'fail', 'message' => trans('common.failed_item', ['attribute' => trans('common.delete')]).', '.$e->getMessage()]);
         }
 
-        return Response::json(['status' => 'fail', 'message' => trans('common.failed_item', ['attribute' => trans('common.delete')])]);
+        return response()->json(['status' => 'fail', 'message' => trans('common.failed_item', ['attribute' => trans('common.delete')])]);
     }
 
-    // 导出卡券
     public function exportCoupon(): void
-    {
+    { // 导出卡券
         $couponList = Coupon::whereStatus(0)->get();
 
         $filename = trans('model.coupon.attribute').'_'.date('Ymd').'.xlsx';

+ 5 - 5
app/Http/Controllers/Admin/InviteController.php

@@ -4,24 +4,24 @@ namespace App\Http\Controllers\Admin;
 
 use App\Http\Controllers\Controller;
 use App\Models\Invite;
+use Illuminate\Contracts\View\View;
 use Illuminate\Http\JsonResponse;
 use Log;
 use PhpOffice\PhpSpreadsheet\Exception;
 use PhpOffice\PhpSpreadsheet\Spreadsheet;
 use PhpOffice\PhpSpreadsheet\Writer\Xlsx;
-use Response;
 use Str;
 
 class InviteController extends Controller
 {
-    public function index(): \Illuminate\Http\Response
+    public function index(): View
     { // 邀请码列表
-        return Response::view('admin.aff.invite', [
+        return view('admin.aff.invite', [
             'inviteList' => Invite::with(['invitee:id,username', 'inviter:id,username'])->orderBy('status')->orderByDesc('id')->paginate(15)->appends(request('page')),
         ]);
     }
 
-    public function create(): JsonResponse
+    public function generate(): JsonResponse
     { // 生成邀请码
         for ($i = 0; $i < 10; $i++) {
             $obj = new Invite;
@@ -30,7 +30,7 @@ class InviteController extends Controller
             $obj->save();
         }
 
-        return Response::json(['status' => 'success', 'message' => trans('common.success_item', ['attribute' => trans('common.generate')])]);
+        return response()->json(['status' => 'success', 'message' => trans('common.success_item', ['attribute' => trans('common.generate')])]);
     }
 
     public function export(): void

+ 24 - 33
app/Http/Controllers/Admin/LogsController.php

@@ -15,16 +15,16 @@ use App\Models\UserCreditLog;
 use App\Models\UserDataFlowLog;
 use App\Models\UserDataModifyLog;
 use App\Utils\IP;
+use Illuminate\Contracts\View\View;
 use Illuminate\Http\JsonResponse;
 use Illuminate\Http\Request;
-use Response;
 
 class LogsController extends Controller
 {
     use DataChart;
 
-    public function orderList(Request $request) // 订单列表
-    {
+    public function orderList(Request $request): View
+    { // 订单列表
         $query = Order::with(['user:id,username', 'goods:id,name', 'coupon:id,name,sn']);
 
         $request->whenFilled('username', function ($username) use ($query) {
@@ -72,19 +72,18 @@ class LogsController extends Controller
         $status = (int) $request->input('status');
 
         if ($order->status === 3 && $status === 2 && $order->goods->type === 2 && Order::userActivePlan($order->user_id)->exists()) {
-            return Response::json(['status' => 'fail', 'message' => trans('admin.logs.order.update_conflict')]); // 防止预支付订单假激活
+            return response()->json(['status' => 'fail', 'message' => trans('admin.logs.order.update_conflict')]); // 防止预支付订单假激活
         }
 
         if ($order->update(['is_expire' => 0, 'expired_at' => null, 'status' => $status])) {
-            return Response::json(['status' => 'success', 'message' => trans('common.success_item', ['attribute' => trans('common.update')])]);
+            return response()->json(['status' => 'success', 'message' => trans('common.success_item', ['attribute' => trans('common.update')])]);
         }
 
-        return Response::json(['status' => 'fail', 'message' => trans('common.failed_item', ['attribute' => trans('common.update')])]);
+        return response()->json(['status' => 'fail', 'message' => trans('common.failed_item', ['attribute' => trans('common.update')])]);
     }
 
-    // 流量日志
-    public function trafficLog(Request $request)
-    {
+    public function trafficLog(Request $request): View
+    { // 流量日志
         $query = UserDataFlowLog::with(['user', 'node']);
 
         $request->whenFilled('port', function ($value) use ($query) {
@@ -125,9 +124,8 @@ class LogsController extends Controller
         return view('admin.logs.traffic', compact(['totalTraffic', 'dataFlowLogs', 'nodes']));
     }
 
-    // 邮件发送日志列表
-    public function notificationLog(Request $request)
-    {
+    public function notificationLog(Request $request): View
+    { // 邮件发送日志列表
         $query = NotificationLog::query();
 
         $request->whenFilled('username', function ($username) use ($query) {
@@ -141,9 +139,8 @@ class LogsController extends Controller
         return view('admin.logs.notification', ['notificationLogs' => $query->latest()->paginate(15)->appends($request->except('page'))]);
     }
 
-    // 在线IP监控(实时)
-    public function onlineIPMonitor(Request $request, ?int $id = null)
-    {
+    public function onlineIPMonitor(Request $request, ?int $id = null): View
+    { // 在线IP监控(实时)
         $query = NodeOnlineIp::with(['node:id,name', 'user:id,username'])->where('created_at', '>=', strtotime('-2 minutes'));
 
         if ($id !== null) {
@@ -191,9 +188,8 @@ class LogsController extends Controller
         ]);
     }
 
-    // 用户余额变动记录
-    public function userCreditLogList(Request $request)
-    {
+    public function userCreditLogList(Request $request): View
+    { // 用户余额变动记录
         $query = UserCreditLog::with('user:id,username')->latest();
 
         $request->whenFilled('username', function ($username) use ($query) {
@@ -205,9 +201,8 @@ class LogsController extends Controller
         return view('admin.logs.userCreditHistory', ['userCreditLogs' => $query->paginate(15)->appends($request->except('page'))]);
     }
 
-    // 用户封禁记录
-    public function userBanLogList(Request $request)
-    {
+    public function userBanLogList(Request $request): View
+    { // 用户封禁记录
         $query = UserBanedLog::with('user:id,username,t');
 
         $request->whenFilled('username', function ($username) use ($query) {
@@ -219,9 +214,8 @@ class LogsController extends Controller
         return view('admin.logs.userBanHistory', ['userBanLogs' => $query->latest()->paginate(15)->appends($request->except('page'))]);
     }
 
-    // 用户流量变动记录
-    public function userTrafficLogList(Request $request)
-    {
+    public function userTrafficLogList(Request $request): View
+    { // 用户流量变动记录
         $query = UserDataModifyLog::with(['user:id,username', 'order.goods:id,name']);
 
         $request->whenFilled('username', function ($username) use ($query) {
@@ -233,9 +227,8 @@ class LogsController extends Controller
         return view('admin.logs.userTraffic', ['userTrafficLogs' => $query->latest()->paginate(15)->appends($request->except('page'))]);
     }
 
-    // 用户在线IP记录
-    public function userOnlineIPList(Request $request)
-    {
+    public function userOnlineIPList(Request $request): View
+    { // 用户在线IP记录
         $query = User::activeUser();
 
         foreach (['username', 'wechat', 'qq'] as $field) {
@@ -261,15 +254,13 @@ class LogsController extends Controller
         return view('admin.logs.userOnlineIP', ['userList' => $userList]);
     }
 
-    // 用户流量监控
-    public function userTrafficMonitor(User $user)
-    {
+    public function userTrafficMonitor(User $user): View
+    { // 用户流量监控
         return view('admin.logs.userMonitor', array_merge(['username' => $user->username], $this->dataFlowChart($user->id)));
     }
 
-    // 回调日志
-    public function callbackList(Request $request)
-    {
+    public function callbackList(Request $request): View
+    { // 回调日志
         $query = PaymentCallback::query();
 
         foreach (['trade_no', 'out_trade_no', 'status'] as $field) {

+ 14 - 15
app/Http/Controllers/Admin/MarketingController.php

@@ -10,17 +10,17 @@ use App\Models\UserGroup;
 use App\Models\UserHourlyDataFlow;
 use App\Notifications\Custom;
 use Helpers;
+use Illuminate\Contracts\View\View;
+use Illuminate\Database\Eloquent\Collection;
 use Illuminate\Http\JsonResponse;
 use Illuminate\Http\Request;
 use Notification;
-use Response;
 use Validator;
 
 class MarketingController extends Controller
 {
-    // 群发消息列表
-    public function index(Request $request)
-    {
+    public function index(Request $request): View
+    { // 群发消息列表
         $query = Marketing::query();
 
         $request->whenFilled('status', function ($value) use ($query) {
@@ -34,17 +34,16 @@ class MarketingController extends Controller
         ]);
     }
 
-    // 推送消息
     public function create(string $type, Request $request): JsonResponse
-    {
+    { // 推送消息
         if ($request->isMethod('GET')) {
-            return Response::json(['status' => 'success', 'count' => $this->userStat($request)]);
+            return response()->json(['status' => 'success', 'count' => $this->userStat($request)]);
         }
 
         $validator = Validator::make($request->all(), ['title' => 'required|string', 'content' => 'required|string']);
 
         if ($validator->fails()) {
-            return Response::json(['status' => 'fail', 'message' => $validator->getMessageBag()->first()]);
+            return response()->json(['status' => 'fail', 'message' => $validator->getMessageBag()->first()]);
         }
 
         $title = $request->input('title');
@@ -52,12 +51,12 @@ class MarketingController extends Controller
 
         if ($type === 'push') {
             //            if (! sysConfig('is_push_bear')) {
-            //                return Response::json(['status' => 'fail', 'message' => '推送失败:请先启用并配置PushBear']);
+            //                return response()->json(['status' => 'fail', 'message' => '推送失败:请先启用并配置PushBear']);
             //            }
             //
             //            Notification::send(PushBearChannel::class, new Custom($title, $content));
-            //            return Response::json(['status' => 'success', 'message' => '发送完成']);
-            return Response::json(['status' => 'fail', 'message' => trans('common.developing')]);
+            //            return response()->json(['status' => 'success', 'message' => '发送完成']);
+            return response()->json(['status' => 'fail', 'message' => trans('common.developing')]);
         }
 
         if ($type === 'email') {
@@ -66,16 +65,16 @@ class MarketingController extends Controller
                 Notification::send($users, new Custom($title, $content, ['mail']));
                 Helpers::addMarketing($users->pluck('id')->toJson(), '1', $title, $content);
 
-                return Response::json(['status' => 'success', 'message' => trans('admin.marketing.processed')]);
+                return response()->json(['status' => 'success', 'message' => trans('admin.marketing.processed')]);
             }
 
-            return Response::json(['status' => 'fail', 'message' => trans('admin.marketing.targeted_users_not_found')]);
+            return response()->json(['status' => 'fail', 'message' => trans('admin.marketing.targeted_users_not_found')]);
         }
 
-        return Response::json(['status' => 'fail', 'message' => trans('admin.marketing.unknown_sending_type')]);
+        return response()->json(['status' => 'fail', 'message' => trans('admin.marketing.unknown_sending_type')]);
     }
 
-    private function userStat(Request $request)
+    private function userStat(Request $request): Collection|int
     {
         $users = User::query();
 

+ 13 - 17
app/Http/Controllers/Admin/NodeAuthController.php

@@ -6,57 +6,53 @@ use App\Http\Controllers\Controller;
 use App\Models\Node;
 use App\Models\NodeAuth;
 use Exception;
+use Illuminate\Contracts\View\View;
 use Illuminate\Http\JsonResponse;
 use Log;
-use Response;
 use Str;
 
 class NodeAuthController extends Controller
 {
-    // 节点授权列表
-    public function index()
-    {
+    public function index(): View
+    { // 节点授权列表
         return view('admin.node.auth', ['authorizations' => NodeAuth::with('node:id,name,type,server,ip,ipv6')->has('node')->orderBy('node_id')->paginate()->appends(request('page'))]);
     }
 
-    // 添加节点授权
     public function store(): JsonResponse
-    {
+    { // 添加节点授权
         $nodes = Node::whereStatus(1)->doesntHave('auth')->orderBy('id')->get();
 
         if ($nodes->isEmpty()) {
-            return Response::json(['status' => 'success', 'message' => trans('admin.node.auth.empty')]);
+            return response()->json(['status' => 'success', 'message' => trans('admin.node.auth.empty')]);
         }
         $nodes->each(function ($node) {
             $node->auth()->create(['key' => Str::random(), 'secret' => Str::random(8)]);
         });
 
-        return Response::json(['status' => 'success', 'message' => trans('common.success_item', ['attribute' => trans('common.generate')])]);
+        return response()->json(['status' => 'success', 'message' => trans('common.success_item', ['attribute' => trans('common.generate')])]);
     }
 
-    // 重置节点授权
     public function update(NodeAuth $auth): JsonResponse
-    {
+    { // 重置节点授权
         if ($auth->update(['key' => Str::random(), 'secret' => Str::random(8)])) {
-            return Response::json(['status' => 'success', 'message' => trans('common.success_item', ['attribute' => trans('common.reset')])]);
+            return response()->json(['status' => 'success', 'message' => trans('common.success_item', ['attribute' => trans('common.reset')])]);
         }
 
-        return Response::json(['status' => 'fail', 'message' => trans('common.failed_item', ['attribute' => trans('common.reset')])]);
+        return response()->json(['status' => 'fail', 'message' => trans('common.failed_item', ['attribute' => trans('common.reset')])]);
     }
 
-    // 删除节点授权
     public function destroy(NodeAuth $auth): JsonResponse
-    {
+    { // 删除节点授权
         try {
             if ($auth->delete()) {
-                return Response::json(['status' => 'success', 'message' => trans('common.success_item', ['attribute' => trans('common.delete')])]);
+                return response()->json(['status' => 'success', 'message' => trans('common.success_item', ['attribute' => trans('common.delete')])]);
             }
         } catch (Exception $e) {
             Log::error(trans('common.error_action_item', ['action' => trans('common.delete'), 'attribute' => trans('admin.menu.node.auth')]).': '.$e->getMessage());
 
-            return Response::json(['status' => 'fail', 'message' => trans('common.error_action_item', ['action' => trans('common.delete'), 'attribute' => trans('admin.menu.node.auth')]).', '.$e->getMessage()]);
+            return response()->json(['status' => 'fail', 'message' => trans('common.error_action_item', ['action' => trans('common.delete'), 'attribute' => trans('admin.menu.node.auth')]).', '.$e->getMessage()]);
         }
 
-        return Response::json(['status' => 'fail', 'message' => trans('common.failed_item', ['attribute' => trans('common.delete')])]);
+        return response()->json(['status' => 'fail', 'message' => trans('common.failed_item', ['attribute' => trans('common.delete')])]);
     }
 }

+ 49 - 35
app/Http/Controllers/Admin/NodeController.php

@@ -14,37 +14,51 @@ use App\Models\NodeCertificate;
 use App\Models\RuleGroup;
 use App\Utils\NetworkDetection;
 use Exception;
+use Illuminate\Contracts\View\View;
 use Illuminate\Http\JsonResponse;
 use Illuminate\Http\RedirectResponse;
 use Illuminate\Http\Request;
 use Log;
-use Response;
 
 class NodeController extends Controller
 {
     use DataChart;
 
-    public function index(Request $request) // 节点列表
-    {
-        $status = $request->input('status');
-
-        $query = Node::whereNull('relay_node_id')->with(['onlineLogs', 'dailyDataFlows:node_id,u,d', 'heartbeats', 'childNodes']);
-
-        if (isset($status)) {
-            $query->whereStatus($status);
-        }
+    public function index(Request $request): View
+    { // 节点列表
+        $query = Node::whereNull('relay_node_id')
+            ->with([
+                'dailyDataFlows:node_id,u,d',
+                'onlineLogs' => function ($query) {
+                    $query->where('log_time', '>=', strtotime('-5 minutes'))->orderBy('log_time', 'desc');
+                },
+                'heartbeats' => function ($query) {
+                    $query->where('log_time', '>=', strtotime(config('tasks.recently_heartbeat')))->orderBy('log_time', 'desc');
+                },
+                'childNodes',
+            ])
+            ->withCount('onlineLogs'); // 提前统计在线人数
+
+        $request->whenFilled('status', function ($value) use ($query) {
+            $query->where('status', $value);
+        });
 
         $nodeList = $query->orderByDesc('sort')->orderBy('id')->paginate(15)->appends($request->except('page'));
-        foreach ($nodeList as $node) {
-            $node->online_users = $node->onlineLogs->where('log_time', '>=', strtotime('-5 minutes'))->sortBy('log_time')->first()?->online_user; // 在线人数
+
+        // 预处理每个节点的数据
+        $nodeList->transform(function ($node) {
+            $node->online_users = $node->onlineLogs->first()?->online_user; // 在线人数
             $node->transfer = formatBytes($node->dailyDataFlows->sum('u') + $node->dailyDataFlows->sum('d')); // 已产生流量
-            $node_info = $node->heartbeats->where('log_time', '>=', strtotime(config('tasks.recently_heartbeat')))->sortBy('log_time')->first(); // 近期负载
+
+            $node_info = $node->heartbeats->first(); // 近期负载
             $node->isOnline = $node_info !== null && ! empty($node_info->load);
             $node->load = $node_info->load ?? false;
             $node->uptime = $node_info === null ? 0 : formatTime($node_info->uptime);
-        }
 
-        return view('admin.node.index', ['nodeList' => $nodeList]);
+            return $node;
+        });
+
+        return view('admin.node.index', compact('nodeList'));
     }
 
     public function store(NodeRequest $request): JsonResponse
@@ -55,18 +69,18 @@ class NodeController extends Controller
                     $node->labels()->attach($request->input('labels'));
                 }
 
-                return Response::json(['status' => 'success', 'message' => trans('common.success_item', ['attribute' => trans('common.add')])]);
+                return response()->json(['status' => 'success', 'message' => trans('common.success_item', ['attribute' => trans('common.add')])]);
             }
         } catch (Exception $e) {
             Log::error(trans('common.error_action_item', ['action' => trans('common.add'), 'attribute' => trans('model.node.attribute')]).': '.$e->getMessage());
 
-            return Response::json(['status' => 'fail', 'message' => trans('common.failed_item', ['attribute' => trans('common.add')]).', '.$e->getMessage()]);
+            return response()->json(['status' => 'fail', 'message' => trans('common.failed_item', ['attribute' => trans('common.add')]).', '.$e->getMessage()]);
         }
 
-        return Response::json(['status' => 'fail', 'message' => trans('common.failed_item', ['attribute' => trans('common.add')])]);
+        return response()->json(['status' => 'fail', 'message' => trans('common.failed_item', ['attribute' => trans('common.add')])]);
     }
 
-    public function create()
+    public function create(): View
     {
         return view('admin.node.info', [
             'nodes' => Node::orderBy('id')->pluck('id', 'name'),
@@ -164,10 +178,10 @@ class NodeController extends Controller
         $new = $node->replicate()->fill($clone);
         $new->save();
 
-        return redirect()->route('admin.node.edit', $new);
+        return redirect(route('admin.node.edit', $new));
     }
 
-    public function edit(Node $node)
+    public function edit(Node $node): View
     { // 编辑节点页面
         return view('admin.node.info', [
             'node' => $node->load('labels'),
@@ -187,30 +201,30 @@ class NodeController extends Controller
                 // 更新节点标签
                 $node->labels()->sync($request->input('labels'));
 
-                return Response::json(['status' => 'success', 'message' => trans('common.success_item', ['attribute' => trans('common.edit')])]);
+                return response()->json(['status' => 'success', 'message' => trans('common.success_item', ['attribute' => trans('common.edit')])]);
             }
         } catch (Exception $e) {
             Log::error(trans('common.error_action_item', ['action' => trans('common.edit'), 'attribute' => trans('model.node.attribute')]).': '.$e->getMessage());
 
-            return Response::json(['status' => 'fail', 'message' => trans('common.failed_item', ['attribute' => trans('common.edit')]).', '.$e->getMessage()]);
+            return response()->json(['status' => 'fail', 'message' => trans('common.failed_item', ['attribute' => trans('common.edit')]).', '.$e->getMessage()]);
         }
 
-        return Response::json(['status' => 'fail', 'message' => trans('common.failed_item', ['attribute' => trans('common.edit')])]);
+        return response()->json(['status' => 'fail', 'message' => trans('common.failed_item', ['attribute' => trans('common.edit')])]);
     }
 
     public function destroy(Node $node): JsonResponse
     { // 删除节点
         try {
             if ($node->delete()) {
-                return Response::json(['status' => 'success', 'message' => trans('common.success_item', ['attribute' => trans('common.delete')])]);
+                return response()->json(['status' => 'success', 'message' => trans('common.success_item', ['attribute' => trans('common.delete')])]);
             }
         } catch (Exception $e) {
             Log::error(trans('common.error_action_item', ['action' => trans('common.delete'), 'attribute' => trans('model.node.attribute')]).': '.$e->getMessage());
 
-            return Response::json(['status' => 'fail', 'message' => trans('common.failed_item', ['attribute' => trans('common.delete')]).', '.$e->getMessage()]);
+            return response()->json(['status' => 'fail', 'message' => trans('common.failed_item', ['attribute' => trans('common.delete')]).', '.$e->getMessage()]);
         }
 
-        return Response::json(['status' => 'fail', 'message' => trans('common.failed_item', ['attribute' => trans('common.delete')])]);
+        return response()->json(['status' => 'fail', 'message' => trans('common.failed_item', ['attribute' => trans('common.delete')])]);
     }
 
     public function checkNode(Node $node): JsonResponse
@@ -220,10 +234,10 @@ class NodeController extends Controller
             $data[$ip] = [config('common.network_status')[$status['icmp']], config('common.network_status')[$status['tcp']]];
         }
 
-        return Response::json(['status' => 'success', 'title' => '['.$node->name.'] '.trans('admin.node.connection_test'), 'message' => $data ?? []]);
+        return response()->json(['status' => 'success', 'title' => '['.$node->name.'] '.trans('admin.node.connection_test'), 'message' => $data ?? []]);
     }
 
-    public function refreshGeo($id): JsonResponse
+    public function refreshGeo(?int $id = null): JsonResponse
     { // 刷新节点地理位置
         $ret = false;
         if ($id) {
@@ -238,13 +252,13 @@ class NodeController extends Controller
         }
 
         if ($ret) {
-            return Response::json(['status' => 'success', 'message' => trans('common.success_item', ['attribute' => trans('common.update')])]);
+            return response()->json(['status' => 'success', 'message' => trans('common.success_item', ['attribute' => trans('common.update')])]);
         }
 
-        return Response::json(['status' => 'fail', 'message' => trans('common.failed_item', ['attribute' => trans('common.update')])]);
+        return response()->json(['status' => 'fail', 'message' => trans('common.failed_item', ['attribute' => trans('common.update')])]);
     }
 
-    public function reload($id): JsonResponse
+    public function reload(?int $id = null): JsonResponse
     { // 重载节点
         $ret = false;
         if ($id) {
@@ -260,13 +274,13 @@ class NodeController extends Controller
         }
 
         if ($ret) {
-            return Response::json(['status' => 'success', 'message' => trans('common.success_item', ['attribute' => trans('admin.node.reload')])]);
+            return response()->json(['status' => 'success', 'message' => trans('common.success_item', ['attribute' => trans('admin.node.reload')])]);
         }
 
-        return Response::json(['status' => 'fail', 'message' => trans('common.failed_item', ['attribute' => trans('admin.node.reload')])]);
+        return response()->json(['status' => 'fail', 'message' => trans('common.failed_item', ['attribute' => trans('admin.node.reload')])]);
     }
 
-    public function nodeMonitor(Node $node)
+    public function nodeMonitor(Node $node): View
     { // 节点流量监控
         return view('admin.node.monitor', array_merge(['nodeName' => $node->name, 'nodeServer' => $node->server], $this->DataFlowChart($node->id, true)));
     }

+ 4 - 3
app/Http/Controllers/Admin/PermissionController.php

@@ -5,6 +5,7 @@ namespace App\Http\Controllers\Admin;
 use App\Http\Controllers\Controller;
 use App\Http\Requests\Admin\PermissionRequest;
 use Exception;
+use Illuminate\Contracts\View\View;
 use Illuminate\Http\JsonResponse;
 use Illuminate\Http\RedirectResponse;
 use Illuminate\Http\Request;
@@ -13,7 +14,7 @@ use Spatie\Permission\Models\Permission;
 
 class PermissionController extends Controller
 {
-    public function index(Request $request)
+    public function index(Request $request): View
     {
         $query = Permission::query();
 
@@ -35,12 +36,12 @@ class PermissionController extends Controller
         return redirect()->back()->withInput()->withErrors(trans('common.failed_item', ['attribute' => trans('common.add')]));
     }
 
-    public function create()
+    public function create(): View
     {
         return view('admin.permission.info');
     }
 
-    public function edit(Permission $permission)
+    public function edit(Permission $permission): View
     {
         return view('admin.permission.info', compact('permission'));
     }

+ 3 - 3
app/Http/Controllers/Admin/ReportController.php

@@ -112,7 +112,7 @@ class ReportController extends Controller
             }
 
             // 处理小时数据
-            if ($hourlyDate->isToday() && $todayData) {
+            if ($todayData && $hourlyDate->isToday()) {
                 $hourlyFlows = $todayData->flatMap(fn ($item) => $item['hourly'])->values();
             } else {
                 $hourlyFlows = $user->hourlyDataFlows()
@@ -133,7 +133,7 @@ class ReportController extends Controller
                 ->get()
                 ->map(fn ($item) => $mapFlow($item, 'date'));
 
-            if ($endDate->isToday() && $todayData) {
+            if ($todayData && $endDate->isToday()) {
                 $dailyFlows = $dailyFlows->concat($todayData->map(fn ($item) => $item['daily']));
             }
 
@@ -153,7 +153,7 @@ class ReportController extends Controller
         return view('admin.report.userDataAnalysis', compact('data'));
     }
 
-    public function nodeAnalysis(Request $request)
+    public function nodeAnalysis(Request $request): View
     {
         $currentTime = now();
         $currentDate = $currentTime->format('m-d');

+ 4 - 3
app/Http/Controllers/Admin/RoleController.php

@@ -5,6 +5,7 @@ namespace App\Http\Controllers\Admin;
 use App\Http\Controllers\Controller;
 use App\Http\Requests\Admin\RoleRequest;
 use Exception;
+use Illuminate\Contracts\View\View;
 use Illuminate\Http\JsonResponse;
 use Illuminate\Http\RedirectResponse;
 use Log;
@@ -13,7 +14,7 @@ use Spatie\Permission\Models\Role;
 
 class RoleController extends Controller
 {
-    public function index()
+    public function index(): View
     {
         return view('admin.role.index', ['roles' => Role::with('permissions')->paginate(15)]);
     }
@@ -29,12 +30,12 @@ class RoleController extends Controller
         return redirect()->back()->withInput()->withErrors(trans('common.failed_item', ['attribute' => trans('common.add')]));
     }
 
-    public function create()
+    public function create(): View
     {
         return view('admin.role.info', ['permissions' => Permission::all()->pluck('description', 'name')]);
     }
 
-    public function edit(Role $role)
+    public function edit(Role $role): View
     {
         return view('admin.role.info', [
             'role' => $role->load('permissions'),

+ 18 - 23
app/Http/Controllers/Admin/RuleController.php

@@ -8,16 +8,15 @@ use App\Models\Node;
 use App\Models\Rule;
 use App\Models\RuleLog;
 use Exception;
+use Illuminate\Contracts\View\View;
 use Illuminate\Http\JsonResponse;
 use Illuminate\Http\Request;
 use Log;
-use Response;
 
 class RuleController extends Controller
 {
-    // 审计规则列表
-    public function index(Request $request)
-    {
+    public function index(Request $request): View
+    { // 审计规则列表
         $query = Rule::query();
 
         $request->whenFilled('type', function ($value) use ($query) {
@@ -27,45 +26,41 @@ class RuleController extends Controller
         return view('admin.rule.index', ['rules' => $query->paginate(15)->appends($request->except('page'))]);
     }
 
-    // 添加审计规则
     public function store(RuleRequest $request): JsonResponse
-    {
+    { // 添加审计规则
         if (Rule::create($request->validated())) {
-            return Response::json(['status' => 'success', 'message' => trans('common.success_item', ['attribute' => trans('common.add')])]);
+            return response()->json(['status' => 'success', 'message' => trans('common.success_item', ['attribute' => trans('common.add')])]);
         }
 
-        return Response::json(['status' => 'fail', 'message' => trans('common.failed_item', ['attribute' => trans('common.add')])]);
+        return response()->json(['status' => 'fail', 'message' => trans('common.failed_item', ['attribute' => trans('common.add')])]);
     }
 
-    // 编辑审计规则
     public function update(RuleRequest $request, Rule $rule): JsonResponse
-    {
+    { // 编辑审计规则
         if ($rule->update($request->validated())) {
-            return Response::json(['status' => 'success', 'message' => trans('common.success_item', ['attribute' => trans('common.edit')])]);
+            return response()->json(['status' => 'success', 'message' => trans('common.success_item', ['attribute' => trans('common.edit')])]);
         }
 
-        return Response::json(['status' => 'fail', 'message' => trans('common.failed_item', ['attribute' => trans('common.edit')])]);
+        return response()->json(['status' => 'fail', 'message' => trans('common.failed_item', ['attribute' => trans('common.edit')])]);
     }
 
-    // 删除审计规则
     public function destroy(Rule $rule): JsonResponse
-    {
+    { // 删除审计规则
         try {
             if ($rule->delete()) {
-                return Response::json(['status' => 'success', 'message' => trans('common.success_item', ['attribute' => trans('common.delete')])]);
+                return response()->json(['status' => 'success', 'message' => trans('common.success_item', ['attribute' => trans('common.delete')])]);
             }
         } catch (Exception $e) {
             Log::error(trans('common.error_action_item', ['action' => trans('common.delete'), 'attribute' => trans('model.rule.attribute')]).': '.$e->getMessage());
 
-            return Response::json(['status' => 'fail', 'message' => trans('common.failed_item', ['attribute' => trans('common.delete')]).', '.$e->getMessage()]);
+            return response()->json(['status' => 'fail', 'message' => trans('common.failed_item', ['attribute' => trans('common.delete')]).', '.$e->getMessage()]);
         }
 
-        return Response::json(['status' => 'fail', 'message' => trans('common.failed_item', ['attribute' => trans('common.delete')])]);
+        return response()->json(['status' => 'fail', 'message' => trans('common.failed_item', ['attribute' => trans('common.delete')])]);
     }
 
-    // 用户触发审计规则日志
-    public function ruleLogList(Request $request)
-    {
+    public function ruleLogList(Request $request): View
+    { // 用户触发审计规则日志
         $query = RuleLog::with(['node:id,name', 'user:id,username', 'rule:id,name']);
 
         foreach (['user_id', 'node_id', 'rule_id'] as $field) {
@@ -95,13 +90,13 @@ class RuleController extends Controller
         } catch (Exception $e) {
             Log::error(trans('common.error_action_item', ['action' => trans('common.delete'), 'attribute' => trans('admin.logs.rule.title')]).': '.$e->getMessage());
 
-            return Response::json(['status' => 'fail', 'message' => trans('common.failed_item', ['attribute' => trans('common.delete')]).', '.$e->getMessage()]);
+            return response()->json(['status' => 'fail', 'message' => trans('common.failed_item', ['attribute' => trans('common.delete')]).', '.$e->getMessage()]);
         }
 
         if ($ret || RuleLog::doesntExist()) {
-            return Response::json(['status' => 'success', 'message' => trans('common.success_item', ['attribute' => trans('common.delete')])]);
+            return response()->json(['status' => 'success', 'message' => trans('common.success_item', ['attribute' => trans('common.delete')])]);
         }
 
-        return Response::json(['status' => 'fail', 'message' => trans('common.failed_item', ['attribute' => trans('common.delete')])]);
+        return response()->json(['status' => 'fail', 'message' => trans('common.failed_item', ['attribute' => trans('common.delete')])]);
     }
 }

+ 5 - 4
app/Http/Controllers/Admin/RuleGroupController.php

@@ -7,18 +7,19 @@ use App\Http\Requests\Admin\RuleGroupRequest;
 use App\Models\Rule;
 use App\Models\RuleGroup;
 use Exception;
+use Illuminate\Contracts\View\View;
 use Illuminate\Http\JsonResponse;
 use Illuminate\Http\RedirectResponse;
 use Log;
 
 class RuleGroupController extends Controller
 {
-    public function index()
+    public function index(): View
     {
         return view('admin.rule.group.index', ['ruleGroups' => RuleGroup::paginate(15)->appends(request('page'))]);
     }
 
-    public function store(RuleGroupRequest $request)
+    public function store(RuleGroupRequest $request): RedirectResponse
     {
         if ($group = RuleGroup::create($request->only('name', 'type'))) {
             $group->rules()->attach($request->input('rules'));
@@ -29,12 +30,12 @@ class RuleGroupController extends Controller
         return redirect()->back()->withInput()->withErrors(trans('common.failed_item', ['attribute' => trans('common.add')]));
     }
 
-    public function create()
+    public function create(): View
     {
         return view('admin.rule.group.info', ['rules' => Rule::all()]);
     }
 
-    public function edit(RuleGroup $group)
+    public function edit(RuleGroup $group): View
     {
         return view('admin.rule.group.info', [
             'ruleGroup' => $group,

+ 15 - 16
app/Http/Controllers/Admin/ShopController.php

@@ -10,18 +10,17 @@ use App\Models\GoodsCategory;
 use App\Models\Level;
 use Arr;
 use Exception;
+use Illuminate\Contracts\View\View;
 use Illuminate\Http\JsonResponse;
 use Illuminate\Http\RedirectResponse;
 use Illuminate\Http\Request;
 use Illuminate\Http\UploadedFile;
 use Log;
-use Redirect;
-use Response;
 use Str;
 
 class ShopController extends Controller
 {
-    public function index(Request $request)
+    public function index(Request $request): View
     {
         $query = Goods::query();
 
@@ -62,33 +61,33 @@ class ShopController extends Controller
         }
         try {
             if ($good = Goods::create($data)) {
-                return Redirect::route('admin.goods.edit', $good)->with('successMsg', trans('common.success_item', ['attribute' => trans('common.add')]));
+                return redirect()->route('admin.goods.edit', $good)->with('successMsg', trans('common.success_item', ['attribute' => trans('common.add')]));
             }
         } catch (Exception $e) {
             Log::error(trans('common.error_action_item', ['action' => trans('common.add'), 'attribute' => trans('model.goods.attribute')]).': '.$e->getMessage());
 
-            return Redirect::back()->withInput()->withErrors(trans('common.failed_item', ['attribute' => trans('common.add')]).', '.$e->getMessage());
+            return redirect()->back()->withInput()->withErrors(trans('common.failed_item', ['attribute' => trans('common.add')]).', '.$e->getMessage());
         }
 
-        return Redirect::back()->withInput()->withErrors(trans('common.failed_item', ['attribute' => trans('common.add')]));
+        return redirect()->back()->withInput()->withErrors(trans('common.failed_item', ['attribute' => trans('common.add')]));
     }
 
-    public function fileUpload(UploadedFile $file)
+    public function fileUpload(UploadedFile $file): RedirectResponse|string
     { // 图片上传
         $fileName = Str::random(8).time().'.'.$file->getClientOriginalExtension();
         if (! $file->storeAs('public', $fileName)) {
-            return Redirect::back()->withInput()->withErrors(trans('common.failed_action_item', ['action' => trans('common.store'), 'attribute' => trans('model.goods.logo')]));
+            return redirect()->back()->withInput()->withErrors(trans('common.failed_action_item', ['action' => trans('common.store'), 'attribute' => trans('model.goods.logo')]));
         }
 
         return 'upload/'.$fileName;
     }
 
-    public function create()
+    public function create(): View
     {
         return view('admin.shop.info', ['levels' => Level::orderBy('level')->get(), 'categories' => GoodsCategory::all()]);
     }
 
-    public function edit(Goods $good)
+    public function edit(Goods $good): View
     {
         return view('admin.shop.info', [
             'good' => $good,
@@ -115,29 +114,29 @@ class ShopController extends Controller
             $data['is_hot'] = array_key_exists('is_hot', $data) ? 1 : 0;
             $data['status'] = array_key_exists('status', $data) ? 1 : 0;
             if ($good->update($data)) {
-                return Redirect::back()->with('successMsg', trans('common.success_item', ['attribute' => trans('common.edit')]));
+                return redirect()->back()->with('successMsg', trans('common.success_item', ['attribute' => trans('common.edit')]));
             }
         } catch (Exception $e) {
             Log::error(trans('common.error_action_item', ['action' => trans('common.edit'), 'attribute' => trans('model.goods.attribute')]).': '.$e->getMessage());
 
-            return Redirect::back()->withErrors(trans('common.failed_item', ['attribute' => trans('common.edit')]).', '.$e->getMessage());
+            return redirect()->back()->withErrors(trans('common.failed_item', ['attribute' => trans('common.edit')]).', '.$e->getMessage());
         }
 
-        return Redirect::back()->withInput()->withErrors(trans('common.failed_item', ['attribute' => trans('common.edit')]));
+        return redirect()->back()->withInput()->withErrors(trans('common.failed_item', ['attribute' => trans('common.edit')]));
     }
 
     public function destroy(Goods $good): JsonResponse
     {
         try {
             if ($good->delete()) {
-                return Response::json(['status' => 'success', 'message' => trans('common.success_item', ['attribute' => trans('common.delete')])]);
+                return response()->json(['status' => 'success', 'message' => trans('common.success_item', ['attribute' => trans('common.delete')])]);
             }
         } catch (Exception $e) {
             Log::error(trans('common.error_action_item', ['action' => trans('common.delete'), 'attribute' => trans('model.goods.attribute')]).': '.$e->getMessage());
 
-            return Response::json(['status' => 'fail', 'message' => trans('common.failed_item', ['attribute' => trans('common.delete')]).', '.$e->getMessage()]);
+            return response()->json(['status' => 'fail', 'message' => trans('common.failed_item', ['attribute' => trans('common.delete')]).', '.$e->getMessage()]);
         }
 
-        return Response::json(['status' => 'fail', 'message' => trans('common.failed_item', ['attribute' => trans('common.delete')])]);
+        return response()->json(['status' => 'fail', 'message' => trans('common.failed_item', ['attribute' => trans('common.delete')])]);
     }
 }

+ 16 - 23
app/Http/Controllers/Admin/SubscribeController.php

@@ -4,22 +4,15 @@ namespace App\Http\Controllers\Admin;
 
 use App\Http\Controllers\Controller;
 use App\Models\UserSubscribe;
-use App\Models\UserSubscribeLog;
 use App\Utils\IP;
+use Illuminate\Contracts\View\View;
 use Illuminate\Http\JsonResponse;
 use Illuminate\Http\Request;
-use Response;
 
-/**
- * 订阅控制器.
- *
- * Class SubscribeController
- */
 class SubscribeController extends Controller
 {
-    // 订阅码列表
-    public function index(Request $request)
-    {
+    public function index(Request $request): View
+    { // 订阅码列表
         $query = UserSubscribe::with(['user:id,username']);
 
         $request->whenFilled('username', function ($username) use ($query) {
@@ -37,10 +30,9 @@ class SubscribeController extends Controller
         return view('admin.subscribe.index', ['subscribeList' => $query->sortable(['id' => 'desc'])->paginate(20)->appends($request->except('page'))]);
     }
 
-    //订阅记录
-    public function subscribeLog(Request $request, $userSubscribeId)
-    {
-        $query = UserSubscribeLog::whereUserSubscribeId($userSubscribeId);
+    public function subscribeLog(Request $request, UserSubscribe $userSubscribe): View
+    { // 订阅记录
+        $query = $userSubscribe->userSubscribeLogs();
 
         $request->whenFilled('id', function ($value) use ($query) {
             $query->where('id', $value);
@@ -62,18 +54,19 @@ class SubscribeController extends Controller
             }
         }
 
-        return view('admin.subscribe.log', ['subscribeLog' => $subscribeLogs, 'subscribe' => UserSubscribe::find($userSubscribeId)]);
+        return view('admin.subscribe.log', ['subscribeLog' => $subscribeLogs, 'subscribe' => $userSubscribe]);
     }
 
-    // 设置用户的订阅的状态
-    public function setSubscribeStatus(UserSubscribe $subscribe): JsonResponse
+    public function setSubscribeStatus(UserSubscribe $userSubscribe): JsonResponse
     {
-        if ($subscribe->status) {
-            $subscribe->update(['status' => 0, 'ban_time' => strtotime(sysConfig('traffic_ban_time').' minutes'), 'ban_desc' => 'Your subscription has been disabled by the administrator, please contact the administrator to restore it']);
-        } else {
-            $subscribe->update(['status' => 1, 'ban_time' => null, 'ban_desc' => null]);
-        }
+        $data = $userSubscribe->status
+            ? ['status' => 0, 'ban_time' => strtotime(sysConfig('traffic_ban_time').' minutes'), 'ban_desc' => 'Your subscription has been disabled by the administrator, please contact the administrator to restore it']
+            : ['status' => 1, 'ban_time' => null, 'ban_desc' => null];
+
+        $ret = $userSubscribe->update($data)
+            ? ['status' => 'success', 'message' => trans('common.success_item', ['attribute' => trans('common.update')])]
+            : ['status' => 'fail', 'message' => trans('common.failed_item', ['attribute' => trans('common.update')])];
 
-        return Response::json(['status' => 'success', 'message' => trans('common.success_item', ['attribute' => trans('common.update')])]);
+        return response()->json($ret);
     }
 }

+ 15 - 17
app/Http/Controllers/Admin/SystemController.php

@@ -21,19 +21,17 @@ use App\Models\SsConfig;
 use App\Notifications\Custom;
 use App\Services\TelegramService;
 use App\Utils\DDNS;
-use Auth;
+use Illuminate\Contracts\View\View;
 use Illuminate\Http\JsonResponse;
 use Illuminate\Http\RedirectResponse;
 use Illuminate\Http\Request;
 use Notification;
 use NotificationChannels\Telegram\TelegramChannel;
-use Response;
 
 class SystemController extends Controller
 {
-    // 系统设置
-    public function index()
-    {
+    public function index(): View
+    { // 系统设置
         return view('admin.config.system', array_merge([
             'payments' => $this->getPayments(),
             'captcha' => $this->getCaptcha(),
@@ -60,7 +58,7 @@ class SystemController extends Controller
 
         // 遍历映射,检查配置项是否存在
         foreach ($paymentConfigs as $paymentName => $configKeys) {
-            $allConfigsExist = array_reduce($configKeys, function ($carry, $configKey) {
+            $allConfigsExist = array_reduce($configKeys, static function ($carry, $configKey) {
                 return $carry && sysConfig($configKey);
             }, true);
 
@@ -69,7 +67,7 @@ class SystemController extends Controller
             }
         }
 
-        return $payment;
+        return $payment ?? [];
     }
 
     private function getCaptcha(): bool
@@ -147,7 +145,7 @@ class SystemController extends Controller
                 }
                 $file = $request->file('alipay_qrcode');
                 $file->move('uploads/images', $file->getClientOriginalName());
-                if (Config::find('alipay_qrcode')->update(['value' => 'uploads/images/'.$file->getClientOriginalName()])) {
+                if (Config::findOrNew('alipay_qrcode')->update(['value' => 'uploads/images/'.$file->getClientOriginalName()])) {
                     return redirect()->route('admin.system.index', '#payment')->with('successMsg', trans('common.success_item', ['attribute' => trans('common.update')]));
                 }
             }
@@ -160,7 +158,7 @@ class SystemController extends Controller
                 }
                 $file = $request->file('wechat_qrcode');
                 $file->move('uploads/images', $file->getClientOriginalName());
-                if (Config::findOrFail('wechat_qrcode')->update(['value' => 'uploads/images/'.$file->getClientOriginalName()])) {
+                if (Config::findOrNew('wechat_qrcode')->update(['value' => 'uploads/images/'.$file->getClientOriginalName()])) {
                     return redirect()->route('admin.system.index', '#payment')->with('successMsg', trans('common.success_item', ['attribute' => trans('common.update')]));
                 }
             }
@@ -182,11 +180,11 @@ class SystemController extends Controller
 
         // 支付设置判断
         if ($value !== null && in_array($name, ['is_AliPay', 'is_QQPay', 'is_WeChatPay'], true) && ! in_array($value, $this->getPayments(), true)) {
-            return Response::json(['status' => 'fail', 'message' => trans('admin.system.params_required', ['attribute' => trans('admin.system.payment.attribute')])]);
+            return response()->json(['status' => 'fail', 'message' => trans('admin.system.params_required', ['attribute' => trans('admin.system.payment.attribute')])]);
         }
 
         if ($value > 1 && $name === 'is_captcha' && ! $this->getCaptcha()) {
-            return Response::json(['status' => 'fail', 'message' => trans('admin.system.params_required', ['attribute' => trans('auth.captcha.attribute')])]);
+            return response()->json(['status' => 'fail', 'message' => trans('admin.system.params_required', ['attribute' => trans('auth.captcha.attribute')])]);
         }
 
         // 演示环境禁止修改特定配置项
@@ -203,7 +201,7 @@ class SystemController extends Controller
             ];
 
             if (in_array($name, $denyConfig, true)) {
-                return Response::json(['status' => 'fail', 'message' => trans('admin.system.demo_restriction')]);
+                return response()->json(['status' => 'fail', 'message' => trans('admin.system.demo_restriction')]);
             }
         }
 
@@ -221,10 +219,10 @@ class SystemController extends Controller
 
         // 更新配置
         if (Config::findOrFail($name)->update(['value' => $value])) {
-            return Response::json(['status' => 'success', 'message' => trans('common.success_item', ['attribute' => trans('common.update')])]);
+            return response()->json(['status' => 'success', 'message' => trans('common.success_item', ['attribute' => trans('common.update')])]);
         }
 
-        return Response::json(['status' => 'fail', 'message' => trans('common.failed_item', ['attribute' => trans('common.update')])]);
+        return response()->json(['status' => 'fail', 'message' => trans('common.failed_item', ['attribute' => trans('common.update')])]);
     }
 
     public function sendTestNotification(): JsonResponse  // 推送通知测试
@@ -244,12 +242,12 @@ class SystemController extends Controller
         $selectedChannel = request('channel');
 
         if (! array_key_exists($selectedChannel, $channels)) {
-            return Response::json(['status' => 'fail', 'message' => trans('admin.system.notification.test.unknown_channel')]);
+            return response()->json(['status' => 'fail', 'message' => trans('admin.system.notification.test.unknown_channel')]);
         }
 
-        Notification::sendNow(Auth::getUser(), new Custom(trans('admin.system.notification.test.title'), sysConfig('website_name').' '.trans('admin.system.notification.test.content')), [$channels[$selectedChannel]]);
+        Notification::sendNow(auth()->user(), new Custom(trans('admin.system.notification.test.title'), sysConfig('website_name').' '.trans('admin.system.notification.test.content')), [$channels[$selectedChannel]]);
 
-        return Response::json(['status' => 'success', 'message' => trans('admin.system.notification.test.success')]);
+        return response()->json(['status' => 'success', 'message' => trans('admin.system.notification.test.success')]);
     }
 
     public function common(): View

+ 18 - 24
app/Http/Controllers/Admin/TicketController.php

@@ -9,18 +9,16 @@ use App\Models\User;
 use App\Notifications\TicketClosed;
 use App\Notifications\TicketCreated;
 use App\Notifications\TicketReplied;
-use Auth;
+use Illuminate\Contracts\View\View;
 use Illuminate\Http\JsonResponse;
 use Illuminate\Http\Request;
-use Response;
 
 class TicketController extends Controller
 {
-    // 工单列表
-    public function index(Request $request)
-    {
-        $query = Ticket::where(function ($query) {
-            $query->whereAdminId(Auth::id())->orwhere('admin_id');
+    public function index(Request $request): View
+    { // 工单列表
+        $query = Ticket::where(static function ($query) {
+            $query->whereAdminId(auth()->id())->orwhere('admin_id');
         })->with('user');
 
         $request->whenFilled('username', function ($username) use ($query) {
@@ -32,28 +30,26 @@ class TicketController extends Controller
         return view('admin.ticket.index', ['ticketList' => $query->orderBy('status')->latest()->paginate(10)->appends($request->except('page'))]);
     }
 
-    // 创建工单
     public function store(TicketRequest $request): JsonResponse
-    {
+    { // 创建工单
         $data = $request->validated();
         $user = User::find($data['uid']) ?: User::whereUsername($data['username'])->first();
 
-        if ($user === Auth::user()) {
-            return Response::json(['status' => 'fail', 'message' => trans('admin.ticket.self_send')]);
+        if ($user === auth()->user()) {
+            return response()->json(['status' => 'fail', 'message' => trans('admin.ticket.self_send')]);
         }
 
         if ($ticket = Ticket::create(['user_id' => $user->id, 'admin_id' => auth()->id(), 'title' => $data['title'], 'content' => clean($data['content'])])) {
             $user->notify(new TicketCreated($ticket, route('ticket.edit', $ticket)));
 
-            return Response::json(['status' => 'success', 'message' => trans('common.success_item', ['attribute' => trans('common.create')])]);
+            return response()->json(['status' => 'success', 'message' => trans('common.success_item', ['attribute' => trans('common.create')])]);
         }
 
-        return Response::json(['status' => 'fail', 'message' => trans('common.failed_item', ['attribute' => trans('common.create')])]);
+        return response()->json(['status' => 'fail', 'message' => trans('common.failed_item', ['attribute' => trans('common.create')])]);
     }
 
-    // 回复
-    public function edit(Ticket $ticket)
-    {
+    public function edit(Ticket $ticket): View
+    { // 回复
         return view('admin.ticket.reply', [
             'ticket' => $ticket,
             'user' => $ticket->user,
@@ -61,9 +57,8 @@ class TicketController extends Controller
         ]);
     }
 
-    // 回复工单
     public function update(Request $request, Ticket $ticket): JsonResponse
-    {
+    { // 回复工单
         $content = substr(str_replace(['atob', 'eval'], '', clean($request->input('content'))), 0, 300);
 
         $reply = $ticket->reply()->create(['admin_id' => Auth::id(), 'content' => $content]);
@@ -78,23 +73,22 @@ class TicketController extends Controller
                 $ticket->user->notify(new TicketReplied($reply, route('ticket.edit', $ticket), true));
             }
 
-            return Response::json(['status' => 'success', 'message' => trans('common.success_item', ['attribute' => trans('user.ticket.reply')])]);
+            return response()->json(['status' => 'success', 'message' => trans('common.success_item', ['attribute' => trans('user.ticket.reply')])]);
         }
 
-        return Response::json(['status' => 'fail', 'message' => trans('common.failed_item', ['attribute' => trans('user.ticket.reply')])]);
+        return response()->json(['status' => 'fail', 'message' => trans('common.failed_item', ['attribute' => trans('user.ticket.reply')])]);
     }
 
-    // 关闭工单
     public function destroy(Ticket $ticket): JsonResponse
-    {
+    { // 关闭工单
         if (! $ticket->close()) {
-            return Response::json(['status' => 'fail', 'message' => trans('common.failed_item', ['attribute' => trans('common.close')])]);
+            return response()->json(['status' => 'fail', 'message' => trans('common.failed_item', ['attribute' => trans('common.close')])]);
         }
         // 通知用户
         if (sysConfig('ticket_closed_notification')) {
             $ticket->user->notify(new TicketClosed($ticket->id, $ticket->title, route('ticket.edit', $ticket), \request('reason'), true));
         }
 
-        return Response::json(['status' => 'success', 'message' => trans('common.success_item', ['attribute' => trans('common.close')])]);
+        return response()->json(['status' => 'success', 'message' => trans('common.success_item', ['attribute' => trans('common.close')])]);
     }
 }

+ 35 - 42
app/Http/Controllers/Admin/ToolsController.php

@@ -7,21 +7,22 @@ use App\Models\User;
 use App\Utils\IP;
 use DB;
 use Exception;
+use Illuminate\Contracts\View\View;
+use Illuminate\Http\JsonResponse;
+use Illuminate\Http\RedirectResponse;
 use Illuminate\Http\Request;
-use Redirect;
-use Response;
-use Session;
+use Log;
+use Symfony\Component\HttpFoundation\BinaryFileResponse;
 
 class ToolsController extends Controller
 {
-    // SS(R)链接反解析
-    public function decompile(Request $request)
-    {
+    public function decompile(Request $request): JsonResponse|View
+    { // SS(R)链接反解析
         if ($request->isMethod('POST')) {
             $content = $request->input('content');
 
             if (empty($content)) {
-                return Response::json(['status' => 'fail', 'message' => trans('admin.tools.decompile.content_placeholder')]);
+                return response()->json(['status' => 'fail', 'message' => trans('admin.tools.decompile.content_placeholder')]);
             }
 
             // 反解析处理
@@ -43,15 +44,14 @@ class ToolsController extends Controller
             // 生成转换好的JSON文件
             //file_put_contents(public_path('downloads/decompile.json'), $txt);
 
-            return Response::json(['status' => 'success', 'data' => $txt, 'message' => trans('common.success_item', ['attribute' => trans('admin.tools.decompile.attribute')])]);
+            return response()->json(['status' => 'success', 'data' => $txt, 'message' => trans('common.success_item', ['attribute' => trans('admin.tools.decompile.attribute')])]);
         }
 
         return view('admin.tools.decompile');
     }
 
-    // 格式转换(SS转SSR)
-    public function convert(Request $request)
-    {
+    public function convert(Request $request): JsonResponse|View
+    { // 格式转换(SS转SSR)
         if ($request->isMethod('POST')) {
             $method = $request->input('method');
             $transfer_enable = $request->input('transfer_enable');
@@ -62,13 +62,13 @@ class ToolsController extends Controller
             $content = $request->input('content');
 
             if (empty($content)) {
-                return Response::json(['status' => 'fail', 'message' => trans('admin.tools.convert.content_placeholder')]);
+                return response()->json(['status' => 'fail', 'message' => trans('admin.tools.convert.content_placeholder')]);
             }
 
             // 校验格式
             $content = json_decode($content, true);
             if (empty($content->port_password)) {
-                return Response::json(['status' => 'fail', 'message' => trans('admin.tools.convert.missing_error')]);
+                return response()->json(['status' => 'fail', 'message' => trans('admin.tools.convert.missing_error')]);
             }
 
             // 转换成SSR格式JSON
@@ -95,18 +95,17 @@ class ToolsController extends Controller
             // 生成转换好的JSON文件
             file_put_contents(public_path('downloads/convert.json'), $json);
 
-            return Response::json(['status' => 'success', 'data' => $json, 'message' => trans('common.success_item', ['attribute' => trans('common.convert')])]);
+            return response()->json(['status' => 'success', 'data' => $json, 'message' => trans('common.success_item', ['attribute' => trans('common.convert')])]);
         }
 
         return view('admin.tools.convert');
     }
 
-    // 下载转换好的JSON文件
-    public function download(Request $request)
-    {
+    public function download(Request $request): BinaryFileResponse
+    { // 下载转换好的JSON文件
         $type = (int) $request->input('type');
         if (empty($type)) {
-            exit(trans('admin.tools.convert.params_unknown'));
+            abort(trans('admin.tools.convert.params_unknown'));
         }
 
         if ($type === 1) {
@@ -116,29 +115,28 @@ class ToolsController extends Controller
         }
 
         if (! file_exists($filePath)) {
-            exit(trans('admin.tools.convert.file_missing'));
+            abort(trans('admin.tools.convert.file_missing'));
         }
 
-        return Response::download($filePath);
+        return response()->download($filePath);
     }
 
-    // 数据导入
-    public function import(Request $request)
-    {
+    public function import(Request $request): RedirectResponse|View
+    { // 数据导入
         if ($request->isMethod('POST')) {
             if (! $request->hasFile('uploadFile')) {
-                return Redirect::back()->withErrors(trans('admin.tools.import.file_required'));
+                return redirect()->back()->withErrors(trans('admin.tools.import.file_required'));
             }
 
             $file = $request->file('uploadFile');
 
             // 只能上传JSON文件
             if ($file->getClientMimeType() !== 'application/json' || $file->getClientOriginalExtension() !== 'json') {
-                return Redirect::back()->withErrors(trans('admin.tools.import.file_type_error', ['type' => 'JSON']));
+                return redirect()->back()->withErrors(trans('admin.tools.import.file_type_error', ['type' => 'JSON']));
             }
 
             if (! $file->isValid()) {
-                return Redirect::back()->withErrors(trans('admin.tools.import.file_error'));
+                return redirect()->back()->withErrors(trans('admin.tools.import.file_error'));
             }
 
             $save_path = realpath(storage_path('uploads'));
@@ -149,7 +147,7 @@ class ToolsController extends Controller
             $data = file_get_contents($save_path.'/'.$new_name);
             $data = json_decode($data, true);
             if (! $data) {
-                return Redirect::back()->withErrors(trans('admin.tools.import.format_error', ['type' => 'JSON']));
+                return redirect()->back()->withErrors(trans('admin.tools.import.format_error', ['type' => 'JSON']));
             }
 
             try {
@@ -178,21 +176,20 @@ class ToolsController extends Controller
                 DB::rollBack();
                 Log::error(trans('common.error_action_item', ['action' => trans('common.import'), 'attribute' => trans('admin.menu.tools.import')]).': '.$e->getMessage());
 
-                return Redirect::back()->withErrors(trans('common.failed_item', ['attribute' => trans('common.import')]).', '.$e->getMessage());
+                return redirect()->back()->withErrors(trans('common.failed_item', ['attribute' => trans('common.import')]).', '.$e->getMessage());
             }
 
-            return Redirect::back()->with('successMsg', trans('common.success_item', ['attribute' => trans('common.import')]));
+            return redirect()->back()->with('successMsg', trans('common.success_item', ['attribute' => trans('common.import')]));
         }
 
         return view('admin.tools.import');
     }
 
-    // 日志分析
-    public function analysis()
-    {
+    public function analysis(): View
+    { // 日志分析
         $file = storage_path('app/ssserver.log');
         if (! file_exists($file)) {
-            Session::flash('analysisErrorMsg', trans('admin.tools.analysis.file_missing', ['file_name' => $file]));
+            session()->flash('analysisErrorMsg', trans('admin.tools.analysis.file_missing', ['file_name' => $file]));
 
             return view('admin.tools.analysis');
         }
@@ -223,9 +220,8 @@ class ToolsController extends Controller
         return view('admin.tools.analysis', ['urlList' => array_unique($url ?? [])]);
     }
 
-    // 类似Linux中的tail命令
-    private function tail($file, $n, $base = 5)
-    {
+    private function tail(string $file, int $n, int $base = 5): array|false
+    { // 类似Linux中的tail命令
         $fileLines = $this->countLine($file);
         if ($fileLines < 15000) {
             return false;
@@ -239,7 +235,7 @@ class ToolsController extends Controller
         while ($counts <= $n) {
             try {
                 fseek($fp, -$pos, SEEK_END);
-            } catch (Exception $e) {
+            } catch (Exception) {
                 break;
             }
 
@@ -253,11 +249,8 @@ class ToolsController extends Controller
         return array_slice($lines, 0, $n);
     }
 
-    /**
-     * 计算文件行数.
-     */
-    private function countLine($file): int
-    {
+    private function countLine(string $file): int
+    { // 计算文件行数
         $fp = fopen($file, 'rb');
         $i = 0;
         while (! feof($fp)) {

+ 39 - 41
app/Http/Controllers/Admin/UserController.php

@@ -17,19 +17,17 @@ use App\Services\ProxyService;
 use App\Utils\Helpers;
 use App\Utils\IP;
 use Arr;
-use Auth;
 use Exception;
+use Illuminate\Contracts\View\View;
 use Illuminate\Http\JsonResponse;
 use Illuminate\Http\Request;
 use Log;
-use Response;
-use Session;
 use Spatie\Permission\Models\Role;
 use Str;
 
 class UserController extends Controller
 {
-    public function index(Request $request)
+    public function index(Request $request): View
     {
         $query = User::with('subscribe');
 
@@ -101,7 +99,7 @@ class UserController extends Controller
 
         $roles = $request->input('roles');
         try {
-            $adminUser = Auth::getUser();
+            $adminUser = auth()->user();
             if ($roles && ($adminUser->can('give roles') || (in_array('Super Admin', $roles, true) && $adminUser->hasRole('Super Admin')))) {
                 // 编辑用户权限, 只有超级管理员才有赋予超级管理的权限
                 $user->assignRole($roles);
@@ -110,23 +108,23 @@ class UserController extends Controller
             if ($user) {
                 Helpers::addUserTrafficModifyLog($user->id, 0, $data['transfer_enable'], trans('Manually add in dashboard.'));
 
-                return Response::json(['status' => 'success', 'message' => trans('common.success_item', ['attribute' => trans('common.add')])]);
+                return response()->json(['status' => 'success', 'message' => trans('common.success_item', ['attribute' => trans('common.add')])]);
             }
         } catch (Exception $e) {
             Log::error(trans('common.error_action_item', ['action' => trans('common.add'), 'attribute' => trans('model.user.attribute')]).': '.$e->getMessage());
 
-            return Response::json(['status' => 'fail', 'message' => trans('common.failed_item', ['attribute' => trans('common.add')]).', '.$e->getMessage()]);
+            return response()->json(['status' => 'fail', 'message' => trans('common.failed_item', ['attribute' => trans('common.add')]).', '.$e->getMessage()]);
         }
 
-        return Response::json(['status' => 'fail', 'message' => trans('common.failed_item', ['attribute' => trans('common.add')])]);
+        return response()->json(['status' => 'fail', 'message' => trans('common.failed_item', ['attribute' => trans('common.add')])]);
     }
 
-    public function create()
+    public function create(): View
     {
-        if (Auth::getUser()->hasRole('Super Admin')) { // 超级管理员直接获取全部角色
+        if (auth()->user()->hasRole('Super Admin')) { // 超级管理员直接获取全部角色
             $roles = Role::all()->pluck('description', 'name');
-        } elseif (Auth::getUser()->can('give roles')) { // 有权者只能获得已有角色,防止权限泛滥
-            $roles = Auth::getUser()->roles()->pluck('description', 'name');
+        } elseif (auth()->user()->can('give roles')) { // 有权者只能获得已有角色,防止权限泛滥
+            $roles = auth()->user()->roles()->pluck('description', 'name');
         }
 
         return view('admin.user.info', [
@@ -136,12 +134,12 @@ class UserController extends Controller
         ]);
     }
 
-    public function edit(User $user)
+    public function edit(User $user): View
     {
-        if (Auth::getUser()->hasRole('Super Admin')) { // 超级管理员直接获取全部角色
+        if (auth()->user()->hasRole('Super Admin')) { // 超级管理员直接获取全部角色
             $roles = Role::all()->pluck('description', 'name');
-        } elseif (Auth::getUser()->can('give roles')) { // 有权者只能获得已有角色,防止权限泛滥
-            $roles = Auth::getUser()->roles()->pluck('description', 'name');
+        } elseif (auth()->user()->can('give roles')) { // 有权者只能获得已有角色,防止权限泛滥
+            $roles = auth()->user()->roles()->pluck('description', 'name');
         }
 
         return view('admin.user.info', [
@@ -155,23 +153,23 @@ class UserController extends Controller
     public function destroy(User $user): JsonResponse
     {
         if ($user->id === 1) {
-            return Response::json(['status' => 'fail', 'message' => trans('admin.user.admin_deletion')]);
+            return response()->json(['status' => 'fail', 'message' => trans('admin.user.admin_deletion')]);
         }
 
         try {
             if ($user->delete()) {
-                return Response::json(['status' => 'success', 'message' => trans('common.success_item', ['attribute' => trans('common.delete')])]);
+                return response()->json(['status' => 'success', 'message' => trans('common.success_item', ['attribute' => trans('common.delete')])]);
             }
         } catch (Exception $e) {
             Log::error(trans('common.error_action_item', ['action' => trans('common.delete'), 'attribute' => trans('model.user.attribute')]).': '.$e->getMessage());
 
-            return Response::json(['status' => 'fail', 'message' => trans('common.failed_item', ['attribute' => trans('common.delete')]).', '.$e->getMessage()]);
+            return response()->json(['status' => 'fail', 'message' => trans('common.failed_item', ['attribute' => trans('common.delete')]).', '.$e->getMessage()]);
         }
 
-        return Response::json(['status' => 'fail', 'message' => trans('common.failed_item', ['attribute' => trans('common.delete')])]);
+        return response()->json(['status' => 'fail', 'message' => trans('common.failed_item', ['attribute' => trans('common.delete')])]);
     }
 
-    public function batchAddUsers(): ?JsonResponse
+    public function batchAddUsers(): JsonResponse
     {
         try {
             for ($i = 0; $i < (int) request('amount', 1); $i++) {
@@ -179,36 +177,36 @@ class UserController extends Controller
                 Helpers::addUserTrafficModifyLog($user->id, 0, $user->transfer_enable, trans('Batch generate user accounts in dashboard.'));
             }
 
-            return Response::json(['status' => 'success', 'message' => trans('common.success_item', ['attribute' => trans('common.generate')])]);
+            return response()->json(['status' => 'success', 'message' => trans('common.success_item', ['attribute' => trans('common.generate')])]);
         } catch (Exception $e) {
             Log::error(trans('common.error_action_item', ['action' => trans('common.generate'), 'attribute' => trans('model.user.attribute')]).': '.$e->getMessage());
 
-            return Response::json(['status' => 'fail', 'message' => trans('common.failed_item', ['attribute' => trans('common.generate')]).', '.$e->getMessage()]);
+            return response()->json(['status' => 'fail', 'message' => trans('common.failed_item', ['attribute' => trans('common.generate')]).', '.$e->getMessage()]);
         }
     }
 
     public function switchToUser(User $user): JsonResponse
     {
         // 存储当前管理员ID,并将当前登录信息改成要切换的用户的身份信息
-        Session::put('admin', Auth::id());
-        Session::put('user', $user->id);
+        session()->put('admin', auth()->id());
+        session()->put('user', $user->id);
 
-        return Response::json(['status' => 'success', 'message' => trans('common.success_item', ['attribute' => trans('admin.user.info.switch')])]);
+        return response()->json(['status' => 'success', 'message' => trans('common.success_item', ['attribute' => trans('admin.user.info.switch')])]);
     }
 
     public function resetTraffic(User $user): JsonResponse
     {
         try {
             if ($user->update(['u' => 0, 'd' => 0])) {
-                return Response::json(['status' => 'success', 'message' => trans('common.success_item', ['attribute' => trans('common.reset')])]);
+                return response()->json(['status' => 'success', 'message' => trans('common.success_item', ['attribute' => trans('common.reset')])]);
             }
         } catch (Exception $e) {
             Log::error(trans('common.error_action_item', ['action' => trans('common.reset'), 'attribute' => trans('model.user.usable_traffic')]).': '.$e->getMessage());
 
-            return Response::json(['status' => 'fail', 'message' => trans('common.failed_item', ['attribute' => trans('common.reset').', '.$e->getMessage()])]);
+            return response()->json(['status' => 'fail', 'message' => trans('common.failed_item', ['attribute' => trans('common.reset').', '.$e->getMessage()])]);
         }
 
-        return Response::json(['status' => 'fail', 'message' => trans('common.failed_item', ['attribute' => trans('common.reset')])]);
+        return response()->json(['status' => 'fail', 'message' => trans('common.failed_item', ['attribute' => trans('common.reset')])]);
     }
 
     public function update(UserUpdateRequest $request, User $user): JsonResponse
@@ -226,9 +224,9 @@ class UserController extends Controller
         $roles = $request->input('roles');
         try {
             if (isset($roles)) {
-                $adminUser = Auth::getUser();
+                $adminUser = auth()->user();
                 if ($adminUser->can('give roles') || $adminUser->hasRole('Super Admin')
-                    || (in_array('Super Admin', $roles, true) && Auth::getUser()->hasRole('Super Admin'))) {
+                    || (in_array('Super Admin', $roles, true) && auth()->user()->hasRole('Super Admin'))) {
                     $user->syncRoles($roles);
                 }
             } else {
@@ -253,15 +251,15 @@ class UserController extends Controller
             }
 
             if ($user->update($data)) {
-                return Response::json(['status' => 'success', 'message' => trans('common.success_item', ['attribute' => trans('common.edit')])]);
+                return response()->json(['status' => 'success', 'message' => trans('common.success_item', ['attribute' => trans('common.edit')])]);
             }
         } catch (Exception $e) {
             Log::error(trans('common.error_action_item', ['action' => trans('common.edit'), 'attribute' => trans('model.user.attribute')]).': '.$e->getMessage());
 
-            return Response::json(['status' => 'fail', 'message' => trans('common.failed_item', ['attribute' => trans('common.edit').', '.$e->getMessage()])]);
+            return response()->json(['status' => 'fail', 'message' => trans('common.failed_item', ['attribute' => trans('common.edit').', '.$e->getMessage()])]);
         }
 
-        return Response::json(['status' => 'fail', 'message' => trans('common.failed_item', ['attribute' => trans('common.edit')])]);
+        return response()->json(['status' => 'fail', 'message' => trans('common.failed_item', ['attribute' => trans('common.edit')])]);
     }
 
     public function handleUserCredit(Request $request, User $user): JsonResponse
@@ -269,20 +267,20 @@ class UserController extends Controller
         $amount = $request->input('amount');
 
         if (empty($amount)) {
-            return Response::json(['status' => 'fail', 'message' => trans('common.error_item', ['attribute' => trans('user.recharge')])]);
+            return response()->json(['status' => 'fail', 'message' => trans('common.error_item', ['attribute' => trans('user.recharge')])]);
         }
 
         // 加减余额
         if ($user->updateCredit($amount)) {
             Helpers::addUserCreditLog($user->id, null, $user->credit - $amount, $user->credit, $amount, $request->input('description') ?? 'Manually edit in dashboard.');  // 写入余额变动日志
 
-            return Response::json(['status' => 'success', 'message' => trans('common.success_item', ['attribute' => trans('user.recharge')])]);
+            return response()->json(['status' => 'success', 'message' => trans('common.success_item', ['attribute' => trans('user.recharge')])]);
         }
 
-        return Response::json(['status' => 'fail', 'message' => trans('common.failed_item', ['attribute' => trans('user.recharge')])]);
+        return response()->json(['status' => 'fail', 'message' => trans('common.failed_item', ['attribute' => trans('user.recharge')])]);
     }
 
-    public function export(User $user)
+    public function export(User $user): View
     {
         return view('admin.user.export', [
             'user' => $user,
@@ -295,10 +293,10 @@ class UserController extends Controller
         $proxyServer = new ProxyService($user);
         $server = $proxyServer->getProxyConfig(Node::findOrFail($request->input('id')));
 
-        return Response::json(['status' => 'success', 'data' => $proxyServer->getUserProxyConfig($server, $request->input('type') !== 'text'), 'title' => $server['type']]);
+        return response()->json(['status' => 'success', 'data' => $proxyServer->getUserProxyConfig($server, $request->input('type') !== 'text'), 'title' => $server['type']]);
     }
 
-    public function oauth()
+    public function oauth(): View
     {
         $list = UserOauth::with('user:id,username')->paginate(15)->appends(\request('page'));
 
@@ -314,6 +312,6 @@ class UserController extends Controller
             $node->avaliable = in_array($node->id, $nodeList, true) ? '✔️' : '❌';
         }
 
-        return Response::json(['status' => 'success', 'data' => $nodes]);
+        return response()->json(['status' => 'success', 'data' => $nodes]);
     }
 }

+ 5 - 4
app/Http/Controllers/Admin/UserGroupController.php

@@ -7,18 +7,19 @@ use App\Http\Requests\Admin\UserGroupRequest;
 use App\Models\Node;
 use App\Models\UserGroup;
 use Exception;
+use Illuminate\Contracts\View\View;
 use Illuminate\Http\JsonResponse;
 use Illuminate\Http\RedirectResponse;
 use Log;
 
 class UserGroupController extends Controller
 {
-    public function index()
+    public function index(): View
     {
         return view('admin.user.group.index', ['groups' => UserGroup::paginate(15)->appends(request('page'))]);
     }
 
-    public function store(UserGroupRequest $request)
+    public function store(UserGroupRequest $request): RedirectResponse
     {
         if ($userGroup = UserGroup::create($request->only(['name']))) {
             $userGroup->nodes()->attach($request->input('nodes'));
@@ -29,12 +30,12 @@ class UserGroupController extends Controller
         return redirect()->back()->withInput()->withErrors(trans('common.failed_item', ['attribute' => trans('common.add')]));
     }
 
-    public function create()
+    public function create(): View
     {
         return view('admin.user.group.info', ['nodes' => Node::whereStatus(1)->pluck('name', 'id')]);
     }
 
-    public function edit(UserGroup $group)
+    public function edit(UserGroup $group): View
     {
         return view('admin.user.group.info', [
             'group' => $group,

+ 3 - 4
app/Http/Controllers/AdminController.php

@@ -10,18 +10,17 @@ use App\Models\ReferralApply;
 use App\Models\ReferralLog;
 use App\Models\User;
 use App\Models\UserHourlyDataFlow;
-use Cache;
 use DB;
-use Response;
+use Illuminate\Contracts\View\View;
 
 class AdminController extends Controller
 {
-    public function index()
+    public function index(): View
     {
         $past = strtotime('-'.sysConfig('expire_days').' days');
         $today = today();
 
-        $stats = Cache::remember('user_stats', now()->addMinutes(5), function () use ($today, $past) {
+        $stats = cache()->remember('user_stats', now()->addMinutes(5), function () use ($today, $past) {
             $dailyTrafficUsage = NodeHourlyDataFlow::whereDate('created_at', $today)->sum(DB::raw('u + d'));
 
             return [

+ 8 - 11
app/Http/Controllers/Api/Client/ClientController.php

@@ -33,7 +33,7 @@ class ClientController extends Controller
         }
     }
 
-    public function getUserInfo()
+    public function getUserInfo(): false|JsonResponse
     {
         $user = auth()->user();
 
@@ -79,8 +79,7 @@ class ClientController extends Controller
 
     public function getOrders(Request $request): JsonResponse
     {
-        $user = $request->user();
-        $orders = $user->orders()->orderByDesc('id')->limit(8)->get();
+        $orders = $request->user()->orders()->orderByDesc('id')->limit(8)->get();
         $data = [];
         foreach ($orders as $order) {
             $data[] = [
@@ -125,6 +124,7 @@ class ClientController extends Controller
     public function getInvite(): JsonResponse
     {
         $user = auth()->user();
+        $userService = new UserService;
 
         $referral_traffic = formatBytes(sysConfig('referral_traffic'), 'MiB');
         $referral_percent = sysConfig('referral_percent');
@@ -136,8 +136,6 @@ class ClientController extends Controller
             'referral_percent' => $referral_percent * 100,
         ]);
 
-        $userService = new UserService;
-
         $data['invite_code'] = $code ?? $userService->inviteURI(true);
         $data['invite_url'] = $userService->inviteURI();
         $data['invite_text'] = $data['invite_url'].'&(复制整段文字到浏览器打开即可访问),找梯子最重要的就是稳定,这个已经上线三年了,一直稳定没有被封过,赶紧下载备用吧!'.($code ? '安装后打开填写我的邀请码【'.$code.'】,你还能多得3天会员.' : '');
@@ -202,11 +200,10 @@ class ClientController extends Controller
 
     public function getProxyList(): JsonResponse
     {
-        $proxyServer = new ProxyService;
-
+        $proxyService = new ProxyService;
         $servers = [];
-        foreach ($proxyServer->getNodeList(null, false) as $node) {
-            $server = $proxyServer->getProxyConfig($node);
+        foreach ($proxyService->getNodeList(null, false) as $node) {
+            $server = $proxyService->getProxyConfig($node);
             if ($server['type'] === '`shadowsocks`' || $server['type'] === 'shadowsocksr') {
                 $server['type'] = 1;
             }
@@ -237,7 +234,7 @@ class ClientController extends Controller
         }
     }
 
-    public function getconfig(): JsonResponse
+    public function getConfig(): JsonResponse
     {
         $config = $this->clientConfig();
         Arr::forget($config, ['read', 'configured']);
@@ -245,7 +242,7 @@ class ClientController extends Controller
         return $this->succeed(null, ['config' => $config]);
     }
 
-    private function clientConfig(?string $key = null)
+    private function clientConfig(?string $key = null): array|bool|string|int
     {
         if (! config('client')) {
             Artisan::call('config:cache');

+ 97 - 108
app/Http/Controllers/AuthController.php

@@ -14,33 +14,29 @@ use App\Notifications\PasswordReset;
 use App\Notifications\Verification;
 use App\Utils\Helpers;
 use App\Utils\IP;
-use Auth;
-use Cache;
-use Cookie;
 use Hash;
 use Hashids\Hashids;
+use Illuminate\Contracts\View\View;
+use Illuminate\Http\JsonResponse;
 use Illuminate\Http\RedirectResponse;
 use Illuminate\Http\Request;
 use Notification;
-use Redirect;
-use Response;
 use romanzipp\Turnstile\Rules\TurnstileCaptcha;
-use Session;
 use Str;
 use Validator;
 
 class AuthController extends Controller
 {
     // 登录
-    public function showLoginForm()
+    public function showLoginForm(): RedirectResponse|View
     {
         // 根据权限跳转
-        if (Auth::check()) {
-            if (Auth::getUser()->can('admin.index')) {
-                return Redirect::route('admin.index');
+        if (auth()->check()) {
+            if (auth()->getUser()?->can('admin.index')) {
+                return redirect()->route('admin.index');
             }
 
-            return Redirect::route('home');
+            return redirect()->route('home');
         }
 
         return view('auth.login');
@@ -57,13 +53,13 @@ class AuthController extends Controller
         }
 
         // 验证账号并创建会话
-        if (! Auth::attempt($data, $request->has('remember'))) {
-            return Redirect::back()->withInput()->withErrors(trans('auth.error.login_failed'));
+        if (! auth()->attempt($data, $request->has('remember'))) {
+            return redirect()->back()->withInput()->withErrors(trans('auth.error.login_failed'));
         }
-        $user = Auth::getUser();
+        $user = auth()->getUser();
 
         if (! $user) {
-            return Redirect::back()->withInput()->withErrors(trans('auth.error.login_error'));
+            return redirect()->back()->withInput()->withErrors(trans('auth.error.login_error'));
         }
 
         if ($user->can('admin.index')) {
@@ -72,22 +68,22 @@ class AuthController extends Controller
 
         if ($request->routeIs('admin.login.post')) {
             // 管理页面登录, 非权限者清场
-            Auth::logout();
+            auth()->logout();
 
-            return Redirect::route('login')->withErrors(trans('common.failed_item', ['attribute' => trans('auth.login')]));
+            return redirect()->route('login')->withErrors(trans('common.failed_item', ['attribute' => trans('auth.login')]));
         }
 
         // 校验普通用户账号状态
         if ($user->status === -1) {
-            Auth::logout(); // 强制销毁会话,因为Auth::attempt的时候会产生会话
+            auth()->logout(); // 强制销毁会话,因为Auth::attempt的时候会产生会话
 
-            return Redirect::back()->withInput()->withErrors(trans('auth.error.account_baned'));
+            return redirect()->back()->withInput()->withErrors(trans('auth.error.account_baned'));
         }
 
         if ($user->status === 0 && sysConfig('is_activate_account')) {
-            Auth::logout(); // 强制销毁会话,因为Auth::attempt的时候会产生会话
+            auth()->logout(); // 强制销毁会话,因为Auth::attempt的时候会产生会话
 
-            return Redirect::back()->withInput()->withErrors(trans('auth.active.promotion',
+            return redirect()->back()->withInput()->withErrors(trans('auth.active.promotion',
                 ['action' => '<a href="'.route('active', ['username' => $user->username]).'" target="_blank">'.trans('common.active_item', ['attribute' => trans('common.account')]).'</a>']));
         }
 
@@ -115,7 +111,7 @@ class AuthController extends Controller
             $validator = Validator::make($request->all(), $rules[$captchaType]);
 
             if ($validator->fails()) {
-                return Redirect::back()->withInput()->withErrors(trans('auth.captcha.error.failed'));
+                return redirect()->back()->withInput()->withErrors(trans('auth.captcha.error.failed'));
             }
         }
 
@@ -124,21 +120,21 @@ class AuthController extends Controller
 
     public function logout(Request $request): RedirectResponse
     { // 退出
-        Auth::logout();
+        auth()->logout();
         $request->session()->invalidate();
         $request->session()->regenerateToken();
 
-        return Redirect::route('login');
+        return redirect()->route('login');
     }
 
-    public function showRegistrationForm()
+    public function showRegistrationForm(): View
     {
-        Session::put('register_token', Str::random());
+        session()->put('register_token', Str::random());
 
         return view('auth.register', ['emailList' => (int) sysConfig('is_email_filtering') !== 2 ? false : EmailFilter::whereType(2)->get()]);
     }
 
-    public function register(RegisterRequest $request)
+    public function register(RegisterRequest $request): RedirectResponse
     { // 注册
         $cacheKey = 'register_times_'.md5(IP::getClientIp()); // 注册限制缓存key
 
@@ -149,13 +145,13 @@ class AuthController extends Controller
         $aff = $request->input('aff');
 
         // 防止重复提交
-        if ($register_token !== Session::pull('register_token')) {
-            return Redirect::back()->withInput()->withErrors(trans('auth.error.repeat_request'));
+        if ($register_token !== session()->pull('register_token')) {
+            return redirect()->back()->withInput()->withErrors(trans('auth.error.repeat_request'));
         }
 
         // 是否开启注册
         if (! sysConfig('is_register')) {
-            return Redirect::back()->withErrors(trans('auth.register.error.disable'));
+            return redirect()->back()->withErrors(trans('auth.register.error.disable'));
         }
 
         // 校验域名邮箱黑白名单
@@ -171,22 +167,22 @@ class AuthController extends Controller
             // 校验邀请码合法性
             if ($invite_code) {
                 if (Invite::whereCode($invite_code)->whereStatus(0)->doesntExist()) {
-                    return Redirect::back()->withInput($request->except('code'))->withErrors(trans('auth.invite.unavailable'));
+                    return redirect()->back()->withInput($request->except('code'))->withErrors(trans('auth.invite.unavailable'));
                 }
             } elseif ((int) sysConfig('is_invite_register') === 2) { // 必须使用邀请码
-                return Redirect::back()->withInput()->withErrors(trans('validation.required', ['attribute' => trans('user.invite.attribute')]));
+                return redirect()->back()->withInput()->withErrors(trans('validation.required', ['attribute' => trans('user.invite.attribute')]));
             }
         }
 
         // 注册前发送激活码
         if ((int) sysConfig('is_activate_account') === 1) {
             if (! $verify_code) {
-                return Redirect::back()->withInput($request->except('verify_code'))->withErrors(trans('auth.captcha.required'));
+                return redirect()->back()->withInput($request->except('verify_code'))->withErrors(trans('auth.captcha.required'));
             }
 
             $verifyCode = VerifyCode::whereAddress($data['username'])->whereCode($verify_code)->whereStatus(0)->first();
             if (! $verifyCode) {
-                return Redirect::back()->withInput($request->except('verify_code'))->withErrors(trans('auth.captcha.error.timeout'));
+                return redirect()->back()->withInput($request->except('verify_code'))->withErrors(trans('auth.captcha.error.timeout'));
             }
 
             $verifyCode->status = 1;
@@ -200,17 +196,17 @@ class AuthController extends Controller
         }
 
         // 24小时内同IP注册限制
-        if (sysConfig('register_ip_limit') && Cache::has($cacheKey)) {
-            $registerTimes = Cache::get($cacheKey);
+        if (sysConfig('register_ip_limit') && cache()->has($cacheKey)) {
+            $registerTimes = cache()->get($cacheKey);
             if ($registerTimes >= sysConfig('register_ip_limit')) {
-                return Redirect::back()->withInput($request->except('code'))->withErrors(trans('auth.register.error.throttle'));
+                return redirect()->back()->withInput($request->except('code'))->withErrors(trans('auth.register.error.throttle'));
             }
         }
 
         // 获取可用端口
         $port = Helpers::getPort();
         if ($port > sysConfig('max_port')) {
-            return Redirect::back()->withInput()->withErrors(trans('auth.register.error.disable'));
+            return redirect()->back()->withInput()->withErrors(trans('auth.register.error.disable'));
         }
 
         // 获取aff
@@ -221,26 +217,23 @@ class AuthController extends Controller
 
         // 创建新用户
         if (! $user = Helpers::addUser($data['username'], $data['password'], $transfer_enable, (int) sysConfig('default_days'), $inviter_id, $data['nickname'])) { // 注册失败,抛出异常
-            return Redirect::back()->withInput()->withErrors(trans('auth.register.failed'));
+            return redirect()->back()->withInput()->withErrors(trans('auth.register.failed'));
         }
 
         // 注册次数+1
-        if (Cache::has($cacheKey)) {
-            Cache::increment($cacheKey);
+        if (cache()->has($cacheKey)) {
+            cache()->increment($cacheKey);
         } else {
-            Cache::put($cacheKey, 1, Day); // 24小时
+            cache()->put($cacheKey, 1, Day); // 24小时
         }
 
         // 更新邀请码
         if ($affArr['code_id'] && sysConfig('is_invite_register')) {
-            $invite = Invite::find($affArr['code_id']);
-            if ($invite) {
-                $invite->update(['invitee_id' => $user->id, 'status' => 1]);
-            }
+            Invite::find($affArr['code_id'])?->update(['invitee_id' => $user->id, 'status' => 1]);
         }
 
         // 清除邀请人Cookie
-        Cookie::unqueue('register_aff');
+        cookie()->unqueue('register_aff');
 
         // 注册后发送激活码
         if ((int) sysConfig('is_activate_account') === 2) {
@@ -250,7 +243,7 @@ class AuthController extends Controller
 
             $user->notifyNow(new AccountActivation($activeUserUrl));
 
-            Session::flash('successMsg',
+            session()->flash('successMsg',
                 __("Thank you for signing up! Before you start, you need to verify your email by clicking on the link we have just sent to your email! If you haven't received an email, we would be happy to send another one."));
         } else {
             // 则直接给推荐人加流量
@@ -265,13 +258,13 @@ class AuthController extends Controller
                 $user->update(['status' => 1]);
             }
 
-            Session::flash('successMsg', trans('common.success_item', ['attribute' => trans('auth.register.attribute')]));
+            session()->flash('successMsg', trans('common.success_item', ['attribute' => trans('auth.register.attribute')]));
         }
 
-        return Redirect::route('login')->withInput();
+        return redirect()->route('login')->withInput();
     }
 
-    private function emailChecker($email, $returnType = 0)
+    private function emailChecker(string $email, int $returnType = 0): RedirectResponse|JsonResponse|false
     { // 邮箱检查
         $emailFilterList = EmailFilter::whereType(sysConfig('is_email_filtering'))->pluck('words')->toArray();
         $emailSuffix = explode('@', $email); // 提取邮箱后缀
@@ -281,27 +274,27 @@ class AuthController extends Controller
                 case 1: // 黑名单
                     if (in_array(strtolower($emailSuffix[1]), $emailFilterList, true)) {
                         if ($returnType) {
-                            return Redirect::back()->withErrors(trans('auth.email.error.banned'));
+                            return redirect()->back()->withErrors(trans('auth.email.error.banned'));
                         }
 
-                        return Response::json(['status' => 'fail', 'message' => trans('auth.email.error.banned')]);
+                        return response()->json(['status' => 'fail', 'message' => trans('auth.email.error.banned')]);
                     }
                     break;
                 case 2: // 白名单
                     if (! in_array(strtolower($emailSuffix[1]), $emailFilterList, true)) {
                         if ($returnType) {
-                            return Redirect::back()->withErrors(trans('auth.email.error.invalid'));
+                            return redirect()->back()->withErrors(trans('auth.email.error.invalid'));
                         }
 
-                        return Response::json(['status' => 'fail', 'message' => trans('auth.email.error.invalid')]);
+                        return response()->json(['status' => 'fail', 'message' => trans('auth.email.error.invalid')]);
                     }
                     break;
                 default:
                     if ($returnType) {
-                        return Redirect::back()->withErrors(trans('auth.email.error.invalid'));
+                        return redirect()->back()->withErrors(trans('auth.email.error.invalid'));
                     }
 
-                    return Response::json(['status' => 'fail', 'message' => trans('auth.email.error.invalid')]);
+                    return response()->json(['status' => 'fail', 'message' => trans('auth.email.error.invalid')]);
             }
         }
 
@@ -347,7 +340,7 @@ class AuthController extends Controller
         return $uid && User::whereId($uid)->exists() ? $uid : null;
     }
 
-    private function addVerifyUrl($uid, $email): string
+    private function addVerifyUrl(int $uid, string $email): string
     { // 生成申请的请求地址
         $token = md5(sysConfig('website_name').$email.microtime());
         $verify = new Verify;
@@ -358,21 +351,21 @@ class AuthController extends Controller
         return $token;
     }
 
-    public function resetPassword(Request $request)
+    public function resetPassword(Request $request): RedirectResponse|View
     { // 重设密码页
         if ($request->isMethod('POST')) {
             // 校验请求
             $validator = Validator::make($request->all(), ['username' => 'required|'.(sysConfig('username_type') ?? 'email').'|exists:user,username']);
 
             if ($validator->fails()) {
-                return Redirect::back()->withInput()->withErrors($validator->errors());
+                return redirect()->back()->withInput()->withErrors($validator->errors());
             }
 
             $username = $request->input('username');
 
             // 是否开启重设密码
             if (! sysConfig('password_reset_notification')) {
-                return Redirect::back()->withErrors(trans('auth.password.reset.error.disabled', ['email' => sysConfig('webmaster_email')]));
+                return redirect()->back()->withErrors(trans('auth.password.reset.error.disabled', ['email' => sysConfig('webmaster_email')]));
             }
 
             // 查找账号
@@ -380,10 +373,10 @@ class AuthController extends Controller
 
             // 24小时内重设密码次数限制
             $resetTimes = 0;
-            if (Cache::has('resetPassword_'.md5($username))) {
-                $resetTimes = Cache::get('resetPassword_'.md5($username));
+            if (cache()->has('resetPassword_'.md5($username))) {
+                $resetTimes = cache()->get('resetPassword_'.md5($username));
                 if ($resetTimes >= sysConfig('reset_password_times')) {
-                    return Redirect::back()->withErrors(trans('auth.password.reset.error.throttle', ['time' => sysConfig('reset_password_times')]));
+                    return redirect()->back()->withErrors(trans('auth.password.reset.error.throttle', ['time' => sysConfig('reset_password_times')]));
                 }
             }
 
@@ -394,18 +387,18 @@ class AuthController extends Controller
             $resetUrl = route('resettingPasswd', $token);
             $user->notifyNow(new PasswordReset($resetUrl));
 
-            Cache::put('resetPassword_'.md5($username), $resetTimes + 1, Day);
+            cache()->put('resetPassword_'.md5($username), $resetTimes + 1, Day);
 
-            return Redirect::back()->with('successMsg', trans('auth.password.reset.sent'));
+            return redirect()->back()->with('successMsg', trans('auth.password.reset.sent'));
         }
 
         return view('auth.resetPassword');
     }
 
-    public function reset(Request $request, $token)
+    public function reset(Request $request, ?string $token): RedirectResponse|View
     { // 重设密码
         if (! $token) {
-            return Redirect::route('login');
+            return redirect()->route('login');
         }
 
         if ($request->isMethod('POST')) {
@@ -414,7 +407,7 @@ class AuthController extends Controller
             ]);
 
             if ($validator->fails()) {
-                return Redirect::back()->withInput()->withErrors($validator->errors());
+                return redirect()->back()->withInput()->withErrors($validator->errors());
             }
 
             $password = $request->input('password');
@@ -422,36 +415,36 @@ class AuthController extends Controller
             $verify = Verify::type(1)->whereToken($token)->firstOrFail();
             $user = $verify->user;
             if (! $verify) {
-                return Redirect::route('login');
+                return redirect()->route('login');
             }
 
             if ($user->status === -1) {
-                return Redirect::back()->withErrors(trans('auth.error.account_baned'));
+                return redirect()->back()->withErrors(trans('auth.error.account_baned'));
             }
 
             if ($verify->status === 1) {
-                return Redirect::back()->withErrors(trans('auth.error.url_timeout'));
+                return redirect()->back()->withErrors(trans('auth.error.url_timeout'));
             }
 
             if (Hash::check($password, $verify->user->password)) {
-                return Redirect::back()->withErrors(trans('auth.password.reset.error.same'));
+                return redirect()->back()->withErrors(trans('auth.password.reset.error.same'));
             }
 
             // 更新密码
             if (! $user->update(['password' => $password])) {
-                return Redirect::back()->withErrors(trans('common.failed_item', ['attribute' => trans('auth.password.reset.attribute')]));
+                return redirect()->back()->withErrors(trans('common.failed_item', ['attribute' => trans('auth.password.reset.attribute')]));
             }
 
             // 置为已使用
             $verify->status = 1;
             $verify->save();
 
-            return Redirect::route('login')->with('successMsg', trans('auth.password.reset.success'));
+            return redirect()->route('login')->with('successMsg', trans('auth.password.reset.success'));
         }
 
         $verify = Verify::type(1)->whereToken($token)->first();
         if (! $verify) {
-            return Redirect::route('login');
+            return redirect()->route('login');
         }
 
         if (time() - strtotime($verify->created_at) >= 1800) {
@@ -463,38 +456,38 @@ class AuthController extends Controller
         return view('auth.reset', ['verify' => Verify::type(1)->whereToken($token)->first()]); // 重新获取一遍verify
     }
 
-    public function activeUser(Request $request)
+    public function activeUser(Request $request): RedirectResponse|View
     { // 激活账号页
         if ($request->isMethod('POST')) {
             $validator = Validator::make($request->all(), ['username' => 'required|'.(sysConfig('username_type') ?? 'email').'|exists:user,username']);
 
             if ($validator->fails()) {
-                return Redirect::back()->withInput()->withErrors($validator->errors());
+                return redirect()->back()->withInput()->withErrors($validator->errors());
             }
 
             $username = $request->input('username');
 
             // 是否开启账号激活
             if (! sysConfig('is_activate_account')) {
-                return Redirect::back()->withInput()->withErrors(trans('auth.active.error.disable'));
+                return redirect()->back()->withInput()->withErrors(trans('auth.active.error.disable'));
             }
 
             // 查找账号
             $user = User::whereUsername($username)->firstOrFail();
             if ($user->status === -1) {
-                return Redirect::back()->withErrors(trans('auth.error.account_baned'));
+                return redirect()->back()->withErrors(trans('auth.error.account_baned'));
             }
 
             if ($user->status === 1) {
-                return Redirect::back()->withErrors(trans('auth.active.error.activated'));
+                return redirect()->back()->withErrors(trans('auth.active.error.activated'));
             }
 
             // 24小时内激活次数限制
             $activeTimes = 0;
-            if (Cache::has('activeUser_'.md5($username))) {
-                $activeTimes = Cache::get('activeUser_'.md5($username));
+            if (cache()->has('activeUser_'.md5($username))) {
+                $activeTimes = cache()->get('activeUser_'.md5($username));
                 if ($activeTimes >= sysConfig('active_times')) {
-                    return Redirect::back()->withErrors(trans('auth.active.error.throttle', ['email' => sysConfig('webmaster_email')]));
+                    return redirect()->back()->withErrors(trans('auth.active.error.throttle', ['email' => sysConfig('webmaster_email')]));
                 }
             }
 
@@ -506,40 +499,36 @@ class AuthController extends Controller
 
             Notification::route('mail', $username)->notifyNow(new AccountActivation($activeUserUrl));
 
-            Cache::put('activeUser_'.md5($username), $activeTimes + 1, Day);
+            cache()->put('activeUser_'.md5($username), $activeTimes + 1, Day);
 
-            return Redirect::back()->with('successMsg', trans('auth.active.sent'));
+            return redirect()->back()->with('successMsg', trans('auth.active.sent'));
         }
 
         return view('auth.activeUser');
     }
 
-    public function active($token)
+    public function active(string $token): RedirectResponse|View
     { // 激活账号
-        if (! $token) {
-            return Redirect::route('login');
-        }
-
         $verify = Verify::type(1)->with('user')->whereToken($token)->firstOrFail();
         $user = $verify->user;
         if (! $verify) {
-            return Redirect::route('login');
+            return redirect()->route('login');
         }
 
         if (empty($user) || $verify->status > 0) {
-            Session::flash('errorMsg', trans('auth.error.url_timeout'));
+            session()->flash('errorMsg', trans('auth.error.url_timeout'));
 
             return view('auth.active');
         }
 
         if ($user->status === 1) {
-            Session::flash('errorMsg', trans('auth.active.error.activated'));
+            session()->flash('errorMsg', trans('auth.active.error.activated'));
 
             return view('auth.active');
         }
 
         if (time() - strtotime($verify->created_at) >= 1800) {
-            Session::flash('errorMsg', trans('auth.error.url_timeout'));
+            session()->flash('errorMsg', trans('auth.error.url_timeout'));
 
             // 置为已失效
             $verify->status = 2;
@@ -550,9 +539,9 @@ class AuthController extends Controller
 
         // 更新账号状态
         if (! $user->update(['status' => 1])) {
-            Session::flash('errorMsg', trans('common.active_item', ['attribute' => trans('common.failed')]));
+            session()->flash('errorMsg', trans('common.active_item', ['attribute' => trans('common.failed')]));
 
-            return Redirect::back();
+            return redirect()->back();
         }
 
         // 置为已使用
@@ -565,17 +554,17 @@ class AuthController extends Controller
             $inviter->incrementData(sysConfig('referral_traffic') * MiB);
         }
 
-        Session::flash('successMsg', trans('common.active_item', ['attribute' => trans('common.success')]));
+        session()->flash('successMsg', trans('common.active_item', ['attribute' => trans('common.success')]));
 
         return view('auth.active');
     }
 
-    public function sendCode(Request $request)
+    public function sendCode(Request $request): JsonResponse
     { // 发送注册验证码
         $validator = Validator::make($request->all(), ['username' => 'required|'.(sysConfig('username_type') ?? 'email').'|unique:user,username']);
 
         if ($validator->fails()) {
-            return Response::json(['status' => 'fail', 'message' => $validator->getMessageBag()->first()]);
+            return response()->json(['status' => 'fail', 'message' => $validator->getMessageBag()->first()]);
         }
         $email = $request->input('username');
         $ip = IP::getClientIP();
@@ -590,12 +579,12 @@ class AuthController extends Controller
 
         // 是否开启注册发送验证码
         if ((int) sysConfig('is_activate_account') !== 1) {
-            return Response::json(['status' => 'fail', 'message' => trans('auth.active.error.disable')]);
+            return response()->json(['status' => 'fail', 'message' => trans('auth.active.error.disable')]);
         }
 
         // 防刷机制
-        if (Cache::has('send_verify_code_'.md5($ip))) {
-            return Response::json(['status' => 'fail', 'message' => trans('auth.register.error.throttle')]);
+        if (cache()->has('send_verify_code_'.md5($ip))) {
+            return response()->json(['status' => 'fail', 'message' => trans('auth.register.error.throttle')]);
         }
 
         // 发送邮件
@@ -604,12 +593,12 @@ class AuthController extends Controller
             Notification::route('mail', $email)->notifyNow(new Verification($code));
         }
 
-        Cache::put('send_verify_code_'.md5($ip), $ip, Minute);
+        cache()->put('send_verify_code_'.md5($ip), $ip, Minute);
 
-        return Response::json(['status' => 'success', 'message' => trans('auth.captcha.sent')]);
+        return response()->json(['status' => 'success', 'message' => trans('auth.captcha.sent')]);
     }
 
-    public function free()
+    public function free(): View
     { // 公开的邀请码列表
         return view('auth.free', ['inviteList' => Invite::whereInviterId(null)->whereStatus(0)->paginate()]);
     }
@@ -617,9 +606,9 @@ class AuthController extends Controller
     public function switchLang(string $locale): RedirectResponse
     { // 切换语言
         if (array_key_exists($locale, config('common.language'))) {
-            Session::put('locale', $locale);
+            session()->put('locale', $locale);
         }
 
-        return Redirect::back();
+        return redirect()->back();
     }
 }

+ 8 - 9
app/Http/Controllers/MessageController.php

@@ -3,20 +3,19 @@
 namespace App\Http\Controllers;
 
 use App\Models\NotificationLog;
+use Illuminate\Contracts\View\View;
 use Illuminate\Mail\Markdown;
 
 class MessageController extends Controller
 {
-    public function index(string $type, string $msgId)
+    public function index(string $type, string $msgId): View
     {
-        if ($type === 'markdown') {
-            $log = NotificationLog::whereMsgId($msgId)->latest()->firstOrFail();
-            $title = $log->title;
-            $content = Markdown::parse($log->content)->toHtml();
+        //if ($type === 'markdown') {
+        $log = NotificationLog::whereMsgId($msgId)->latest()->firstOrFail();
+        $title = $log->title;
+        $content = Markdown::parse($log->content)->toHtml();
 
-            return view('components.message', compact('title', 'content'));
-        }
-
-        return false;
+        return view('components.message', compact('title', 'content'));
+        //}
     }
 }

+ 3 - 4
app/Http/Controllers/OAuthController.php

@@ -6,7 +6,6 @@ use App\Models\User;
 use App\Models\UserOauth;
 use App\Utils\Helpers;
 use App\Utils\IP;
-use Auth;
 use Illuminate\Http\RedirectResponse;
 use Laravel\Socialite\Facades\Socialite;
 use Str;
@@ -15,7 +14,7 @@ class OAuthController extends Controller
 {
     public function unbind(string $provider): RedirectResponse
     {
-        $user = Auth::user();
+        $user = auth()->user();
 
         if ($user && $user->userAuths()->whereType($provider)->delete()) {
             return redirect()->back()->with('successMsg', trans('common.success_item', ['attribute' => trans('user.oauth.unbind')]));
@@ -33,7 +32,7 @@ class OAuthController extends Controller
             return redirect()->route('login')->withErrors(trans('auth.oauth.login_failed'));
         }
 
-        $user = Auth::user();
+        $user = auth()->user();
 
         if (! $user) {
             return redirect()->back()->withErrors(trans('common.failed_item', ['attribute' => trans('user.oauth.bind')]));
@@ -103,7 +102,7 @@ class OAuthController extends Controller
 
     private function handleLogin(User $user): RedirectResponse
     {
-        Auth::login($user);
+        auth()->login($user);
         Helpers::userLoginAction($user, IP::getClientIp());
 
         return redirect()->route('login');

+ 21 - 21
app/Http/Controllers/PaymentController.php

@@ -20,10 +20,10 @@ use App\Utils\Payments\PayPal;
 use App\Utils\Payments\Stripe;
 use App\Utils\Payments\THeadPay;
 use Exception;
+use Illuminate\Contracts\View\View;
 use Illuminate\Http\JsonResponse;
 use Illuminate\Http\Request;
 use Log;
-use Response;
 
 class PaymentController extends Controller
 {
@@ -70,21 +70,21 @@ class PaymentController extends Controller
         $payment = Payment::whereTradeNo($request->input('trade_no'))->first();
         if ($payment) {
             if ($payment->status === 1) {
-                return Response::json(['status' => 'success', 'message' => trans('common.success_item', ['attribute' => trans('user.pay')])]);
+                return response()->json(['status' => 'success', 'message' => trans('common.success_item', ['attribute' => trans('user.pay')])]);
             }
 
             if ($payment->status === -1) {
-                return Response::json(['status' => 'error', 'message' => trans('user.payment.order_creation.order_timeout')]);
+                return response()->json(['status' => 'error', 'message' => trans('user.payment.order_creation.order_timeout')]);
             }
 
-            return Response::json(['status' => 'fail', 'message' => trans('common.payment.status.wait')]);
+            return response()->json(['status' => 'fail', 'message' => trans('common.status.payment_pending')]);
         }
 
-        return Response::json(['status' => 'error', 'message' => trans('user.payment.order_creation.unknown_order')]);
+        return response()->json(['status' => 'error', 'message' => trans('user.payment.order_creation.unknown_order')]);
     }
 
-    public function purchase(Request $request) // 创建支付订单
-    {
+    public function purchase(Request $request): JsonResponse
+    { // 创建支付订单
         $goods_id = $request->input('goods_id');
         $coupon_sn = $request->input('coupon_sn');
         $coupon = null;
@@ -96,13 +96,13 @@ class PaymentController extends Controller
         // 充值余额
         if ($credit) {
             if (! is_numeric($credit) || $credit <= 0) {
-                return Response::json(['status' => 'fail', 'message' => trans('user.payment.error')]);
+                return response()->json(['status' => 'fail', 'message' => trans('user.payment.error')]);
             }
             $amount = $credit;
         } elseif ($goods_id && self::$method) { // 购买服务
             $goods = Goods::find($goods_id);
             if (! $goods || ! $goods->status) {
-                return Response::json(['status' => 'fail', 'message' => trans('user.payment.order_creation.product_unavailable')]);
+                return response()->json(['status' => 'fail', 'message' => trans('user.payment.order_creation.product_unavailable')]);
             }
             $amount = $goods->price;
 
@@ -111,14 +111,14 @@ class PaymentController extends Controller
 
             // 无生效套餐,禁止购买加油包
             if ($goods->type === 1 && $activePlan) {
-                return Response::json(['status' => 'fail', 'message' => trans('user.payment.order_creation.plan_required')]);
+                return response()->json(['status' => 'fail', 'message' => trans('user.payment.order_creation.plan_required')]);
             }
 
             // 单个商品限购
             if ($goods->limit_num) {
                 $count = Order::uid()->where('status', '>=', 0)->whereGoodsId($goods_id)->count();
                 if ($count >= $goods->limit_num) {
-                    return Response::json(['status' => 'fail', 'message' => trans('user.payment.order_creation.order_limit', ['limit_num' => $goods->limit_num, 'count' => $count])]);
+                    return response()->json(['status' => 'fail', 'message' => trans('user.payment.order_creation.order_limit', ['limit_num' => $goods->limit_num, 'count' => $count])]);
                 }
             }
 
@@ -139,24 +139,24 @@ class PaymentController extends Controller
             if (self::$method !== 'credit') {
                 // 判断是否开启在线支付
                 if (! sysConfig('is_onlinePay') && ! sysConfig('wechat_qrcode') && ! sysConfig('alipay_qrcode')) {
-                    return Response::json(['status' => 'fail', 'message' => trans('user.payment.order_creation.payment_disabled')]);
+                    return response()->json(['status' => 'fail', 'message' => trans('user.payment.order_creation.payment_disabled')]);
                 }
 
                 // 判断是否存在同个商品的未支付订单
                 if (Order::uid()->whereStatus(0)->exists()) {
-                    return Response::json(['status' => 'fail', 'message' => trans('user.payment.order_creation.pending_order')]);
+                    return response()->json(['status' => 'fail', 'message' => trans('user.payment.order_creation.pending_order')]);
                 }
             } elseif (auth()->user()->credit < $amount) { // 验证账号余额是否充足
-                return Response::json(['status' => 'fail', 'message' => trans('user.payment.insufficient_balance')]);
+                return response()->json(['status' => 'fail', 'message' => trans('user.payment.insufficient_balance')]);
             }
 
             // 价格异常判断
             if ($amount < 0) {
-                return Response::json(['status' => 'fail', 'message' => trans('user.payment.order_creation.price_issue')]);
+                return response()->json(['status' => 'fail', 'message' => trans('user.payment.order_creation.price_issue')]);
             }
 
             if ($amount === 0 && self::$method !== 'credit') {
-                return Response::json(['status' => 'fail', 'message' => trans('user.payment.order_creation.price_zero')]);
+                return response()->json(['status' => 'fail', 'message' => trans('user.payment.order_creation.price_zero')]);
             }
         }
 
@@ -190,20 +190,20 @@ class PaymentController extends Controller
             Log::emergency(trans('common.failed_action_item', ['action' => trans('common.create'), 'attribute' => trans('model.order.attribute')]).': '.$e->getMessage());
         }
 
-        return Response::json(['status' => 'fail', 'message' => trans('common.failed_action_item', ['action' => trans('common.create'), 'attribute' => trans('model.order.attribute')])]);
+        return response()->json(['status' => 'fail', 'message' => trans('common.failed_action_item', ['action' => trans('common.create'), 'attribute' => trans('model.order.attribute')])]);
     }
 
     public function close(Order $order): JsonResponse
     {
         if (! $order->close()) {
-            return Response::json(['status' => 'fail', 'message' => trans('common.failed_action_item', ['action' => trans('common.close'), 'attribute' => trans('model.order.attribute')])]);
+            return response()->json(['status' => 'fail', 'message' => trans('common.failed_action_item', ['action' => trans('common.close'), 'attribute' => trans('model.order.attribute')])]);
         }
 
-        return Response::json(['status' => 'success', 'message' => trans('common.success_action_item', ['action' => trans('common.close'), 'attribute' => trans('model.order.attribute')])]);
+        return response()->json(['status' => 'success', 'message' => trans('common.success_action_item', ['action' => trans('common.close'), 'attribute' => trans('model.order.attribute')])]);
     }
 
-    public function detail($trade_no) // 支付单详情
-    {
+    public function detail(string $trade_no): View
+    { // 支付单详情
         $payment = Payment::uid()->with(['order', 'order.goods'])->whereTradeNo($trade_no)->firstOrFail();
         $goods = $payment->order->goods;
 

+ 11 - 12
app/Http/Controllers/User/AffiliateController.php

@@ -8,17 +8,16 @@ use App\Models\ReferralApply;
 use App\Models\ReferralLog;
 use App\Services\UserService;
 use App\Utils\Helpers;
-use Auth;
+use Illuminate\Contracts\View\View;
 use Illuminate\Http\JsonResponse;
-use Response;
 
 class AffiliateController extends Controller
 {
     // 推广返利
-    public function index()
+    public function index(): View
     {
         if (ReferralLog::uid()->doesntExist() && Order::uid()->whereStatus(2)->doesntExist()) {
-            return Response::view('auth.error', ['message' => trans('user.purchase.required').'<a class="btn btn-sm btn-danger" href="/">'.trans('common.back').'</a>'], 402);
+            return view('auth.error', ['message' => trans('user.purchase.required').'<a class="btn btn-sm btn-danger" href="/">'.trans('common.back').'</a>'], 402);
         }
 
         return view('user.referral', [
@@ -30,7 +29,7 @@ class AffiliateController extends Controller
             'aff_link' => (new UserService)->inviteURI(),
             'referralLogList' => ReferralLog::uid()->with('invitee:id,username')->latest()->paginate(10, ['*'], 'log_page'),
             'referralApplyList' => ReferralApply::uid()->latest()->paginate(10, ['*'], 'apply_page'),
-            'referralUserList' => Auth::getUser()->invitees()->select(['username', 'created_at'])->latest()->paginate(10, ['*'], 'user_page'),
+            'referralUserList' => auth()->user()->invitees()->select(['username', 'created_at'])->latest()->paginate(10, ['*'], 'user_page'),
         ]);
     }
 
@@ -38,33 +37,33 @@ class AffiliateController extends Controller
     public function withdraw(): JsonResponse
     {
         // 判断账户是否过期
-        if (Auth::getUser()->expiration_date < date('Y-m-d')) {
-            return Response::json(['status' => 'fail', 'title' => trans('common.failed_item', ['attribute' => trans('common.request')]), 'message' => trans('user.referral.msg.account')]);
+        if (auth()->user()->expiration_date < date('Y-m-d')) {
+            return response()->json(['status' => 'fail', 'title' => trans('common.failed_item', ['attribute' => trans('common.request')]), 'message' => trans('user.referral.msg.account')]);
         }
 
         // 判断是否已存在申请
         if (ReferralApply::uid()->whereIn('status', [0, 1])->first()) {
-            return Response::json(['status' => 'fail', 'title' => trans('common.failed_item', ['attribute' => trans('common.request')]), 'message' => trans('user.referral.msg.applied')]);
+            return response()->json(['status' => 'fail', 'title' => trans('common.failed_item', ['attribute' => trans('common.request')]), 'message' => trans('user.referral.msg.applied')]);
         }
 
         // 校验可以提现金额是否超过系统设置的阀值
         $referrals = ReferralLog::uid()->whereStatus(0)->get();
         $commission = $referrals->sum('commission');
         if ($commission < sysConfig('referral_money')) {
-            return Response::json([
+            return response()->json([
                 'status' => 'fail', 'title' => trans('common.failed_item', ['attribute' => trans('common.request')]), 'message' => trans('user.referral.msg.unfulfilled', ['amount' => Helpers::getPriceTag(sysConfig('referral_money'))]),
             ]);
         }
 
         $ref = new ReferralApply;
-        $ref->user_id = Auth::id();
+        $ref->user_id = auth()->id();
         $ref->before = $commission;
         $ref->amount = $commission;
         $ref->link_logs = $referrals->pluck('id')->toArray();
         if ($ref->save()) {
-            return Response::json(['status' => 'success', 'title' => trans('common.success_item', ['attribute' => trans('common.request')]), 'message' => trans('user.referral.msg.wait')]);
+            return response()->json(['status' => 'success', 'title' => trans('common.success_item', ['attribute' => trans('common.request')]), 'message' => trans('user.referral.msg.wait')]);
         }
 
-        return Response::json(['status' => 'fail', 'title' => trans('common.failed_item', ['attribute' => trans('common.request')]), 'message' => trans('user.referral.msg.error')]);
+        return response()->json(['status' => 'fail', 'title' => trans('common.failed_item', ['attribute' => trans('common.request')]), 'message' => trans('user.referral.msg.error')]);
     }
 }

+ 3 - 2
app/Http/Controllers/User/ArticleController.php

@@ -6,11 +6,12 @@ use App\Http\Controllers\Controller;
 use App\Models\Article;
 use App\Services\ArticleService;
 use App\Services\NodeService;
+use Illuminate\Contracts\View\View;
 use Illuminate\Http\JsonResponse;
 
 class ArticleController extends Controller
 {
-    public function index(NodeService $nodeService)
+    public function index(NodeService $nodeService): View
     { // 帮助中心
         $subscribe = auth()->user()->subscribe;
 
@@ -19,7 +20,7 @@ class ArticleController extends Controller
             'subUrl' => route('sub', $subscribe->code),
             'subStatus' => $subscribe->status,
             'subMsg' => $subscribe->ban_desc,
-            'knowledges' => Article::type(1)->lang()->orderByDesc('sort')->latest()->get()->groupBy('category'),
+            'knowledge' => Article::type(1)->lang()->orderByDesc('sort')->latest()->get()->groupBy('category'),
         ]);
     }
 

+ 8 - 8
app/Http/Controllers/User/InviteController.php

@@ -5,19 +5,19 @@ namespace App\Http\Controllers\User;
 use App\Http\Controllers\Controller;
 use App\Models\Invite;
 use App\Models\Order;
+use Illuminate\Contracts\View\View;
 use Illuminate\Http\JsonResponse;
-use Response;
 use Str;
 
 class InviteController extends Controller
 {
-    public function index(): \Illuminate\Http\Response
+    public function index(): View
     { // 邀请页面
         if (Order::uid()->active()->where('origin_amount', '>', 0)->doesntExist()) {
-            return Response::view('auth.error', ['message' => trans('user.purchase.required').' <a class="btn btn-sm btn-danger" href="/">'.trans('common.back').'</a>'], 402);
+            return view('auth.error', ['message' => trans('user.purchase.required').' <a class="btn btn-sm btn-danger" href="/">'.trans('common.back').'</a>'], 402);
         }
 
-        return Response::view('user.invite', [
+        return view('user.invite', [
             'num' => auth()->user()->invite_num, // 还可以生成的邀请码数量
             'inviteList' => Invite::uid()->with('invitee')->paginate(10), // 邀请码列表
             'referral_traffic' => formatBytes(sysConfig('referral_traffic'), 'MiB'),
@@ -26,10 +26,10 @@ class InviteController extends Controller
     }
 
     public function store(): JsonResponse
-    {  // 生成邀请码
+    { // 生成邀请码
         $user = auth()->user();
         if ($user->invite_num <= 0) {
-            return Response::json(['status' => 'fail', 'message' => trans('user.invite.generate_failed')]);
+            return response()->json(['status' => 'fail', 'message' => trans('user.invite.generate_failed')]);
         }
         $invite = $user->invites()->create([
             'code' => strtoupper(mb_substr(md5(microtime().Str::random()), 8, 12)),
@@ -38,9 +38,9 @@ class InviteController extends Controller
         if ($invite) {
             $user->decrement('invite_num');
 
-            return Response::json(['status' => 'success', 'message' => trans('common.success_item', ['attribute' => trans('common.generate')])]);
+            return response()->json(['status' => 'success', 'message' => trans('common.success_item', ['attribute' => trans('common.generate')])]);
         }
 
-        return Response::json(['status' => 'fail', 'message' => trans('common.failed_item', ['attribute' => trans('common.generate')])]);
+        return response()->json(['status' => 'fail', 'message' => trans('common.failed_item', ['attribute' => trans('common.generate')])]);
     }
 }

+ 10 - 10
app/Http/Controllers/User/InvoiceController.php

@@ -4,23 +4,23 @@ namespace App\Http\Controllers\User;
 
 use App\Http\Controllers\Controller;
 use App\Models\Order;
+use Illuminate\Contracts\View\View;
 use Illuminate\Http\JsonResponse;
 use Illuminate\Http\Request;
-use Response;
 
 class InvoiceController extends Controller
 {
-    public function index(Request $request): \Illuminate\Http\Response
+    public function index(Request $request): View
     { // 订单列表
-        return Response::view('user.invoices', [
+        return view('user.invoices', [
             'orderList' => auth()->user()->orders()->with(['goods', 'payment'])->orderByDesc('id')->paginate(10)->appends($request->except('page')),
             'prepaidPlan' => Order::userPrepay()->exists(),
         ]);
     }
 
-    public function show(string $sn): \Illuminate\Http\Response
+    public function show(string $sn): View
     { // 订单明细
-        return Response::view('user.invoiceDetail', ['order' => Order::uid()->whereSn($sn)->with(['goods', 'coupon'])->firstOrFail()]);
+        return view('user.invoiceDetail', ['order' => Order::uid()->whereSn($sn)->with(['goods', 'coupon'])->firstOrFail()]);
     }
 
     public function activate(): JsonResponse
@@ -29,22 +29,22 @@ class InvoiceController extends Controller
         if ($activePlan) {
             if ($activePlan->expired()) { // 关闭先前套餐后,新套餐自动运行
                 if (Order::userActivePlan()->exists()) {
-                    return Response::json(['status' => 'success', 'message' => trans('common.active_item', ['attribute' => trans('common.success')])]);
+                    return response()->json(['status' => 'success', 'message' => trans('common.active_item', ['attribute' => trans('common.success')])]);
                 }
 
-                return Response::json(['status' => 'success', 'message' => trans('common.close')]);
+                return response()->json(['status' => 'success', 'message' => trans('common.close')]);
             }
         } else {
             $prepaidPlan = Order::userPrepay()->first();
             if ($prepaidPlan) { // 关闭先前套餐后,新套餐自动运行
                 if ($prepaidPlan->complete()) {
-                    return Response::json(['status' => 'success', 'message' => trans('common.active_item', ['attribute' => trans('common.success')])]);
+                    return response()->json(['status' => 'success', 'message' => trans('common.active_item', ['attribute' => trans('common.success')])]);
                 }
 
-                return Response::json(['status' => 'success', 'message' => trans('common.close')]);
+                return response()->json(['status' => 'success', 'message' => trans('common.close')]);
             }
         }
 
-        return Response::json(['status' => 'fail', 'message' => trans('common.failed_item', ['attribute' => trans('common.close')])]);
+        return response()->json(['status' => 'fail', 'message' => trans('common.failed_item', ['attribute' => trans('common.close')])]);
     }
 }

+ 7 - 12
app/Http/Controllers/User/NodeController.php

@@ -6,35 +6,30 @@ use App\Http\Controllers\Controller;
 use App\Models\Node;
 use App\Models\NodeHeartbeat;
 use App\Services\ProxyService;
+use Illuminate\Contracts\View\View;
 use Illuminate\Http\JsonResponse;
 use Illuminate\Http\Request;
-use Response;
 
 class NodeController extends Controller
 {
-    public function index(): \Illuminate\Http\Response
+    public function index(): View
     { // 节点列表
-        $user = auth()->user();
-
-        // 获取当前用户可用节点
-        $nodeList = $user->nodes()->whereIn('is_display', [1, 3])->with(['labels', 'level_table'])->get();
+        $nodeList = auth()->user()->nodes()->whereIn('is_display', [1, 3])->with(['labels', 'level_table'])->get(); // 获取当前用户可用节点
         $onlineNode = NodeHeartbeat::recently()->distinct()->pluck('node_id')->toArray();
         foreach ($nodeList as $node) {
-            // 节点在线状态
-            $node->offline = ! in_array($node->id, $onlineNode, true);
+            $node->offline = ! in_array($node->id, $onlineNode, true); // 节点在线状态
         }
 
-        return Response::view('user.nodeList', [
+        return view('user.nodeList', [
             'nodesGeo' => $nodeList->pluck('name', 'geo')->toArray(),
             'nodeList' => $nodeList,
         ]);
     }
 
-    public function show(Request $request, Node $node): JsonResponse
+    public function show(Request $request, Node $node, ProxyService $proxyServer): JsonResponse
     { // 节点详细
-        $proxyServer = new ProxyService;
         $server = $proxyServer->getProxyConfig($node);
 
-        return Response::json(['status' => 'success', 'data' => $proxyServer->getUserProxyConfig($server, $request->input('type') !== 'text'), 'title' => $server['type']]);
+        return response()->json(['status' => 'success', 'data' => $proxyServer->getUserProxyConfig($server, $request->input('type') !== 'text'), 'title' => $server['type']]);
     }
 }

+ 12 - 12
app/Http/Controllers/User/ShopController.php

@@ -9,15 +9,15 @@ use App\Models\Node;
 use App\Models\Order;
 use App\Services\CouponService;
 use App\Utils\Helpers;
+use Illuminate\Contracts\View\View;
 use Illuminate\Http\JsonResponse;
 use Illuminate\Http\Request;
 use Illuminate\Validation\Rule;
-use Response;
 use Validator;
 
 class ShopController extends Controller
 {
-    public function index(): \Illuminate\Http\Response
+    public function index(): View
     { // 商品列表
         $user = auth()->user();
         // 余额充值商品,只取10个
@@ -38,7 +38,7 @@ class ShopController extends Controller
             $goods->node_countries = $nodes->where('level', '<=', $goods->level)->pluck('country_code')->unique();
         }
 
-        return Response::view('user.services', [
+        return view('user.services', [
             'chargeGoodsList' => Goods::type(3)->orderBy('price')->get(),
             'goodsList' => $goodsList,
             'renewTraffic' => $renewPrice ? Helpers::getPriceTag($renewPrice) : 0,
@@ -52,7 +52,7 @@ class ShopController extends Controller
         $order = Order::userActivePlan()->firstOrFail();
         $renewCost = $order->goods->renew;
         if ($user->credit < $renewCost) {
-            return Response::json(['status' => 'fail', 'message' => trans('user.payment.insufficient_balance')]);
+            return response()->json(['status' => 'fail', 'message' => trans('user.payment.insufficient_balance')]);
         }
 
         $user->update(['u' => 0, 'd' => 0]);
@@ -63,7 +63,7 @@ class ShopController extends Controller
         // 扣余额
         $user->updateCredit(-$renewCost);
 
-        return Response::json(['status' => 'success', 'message' => trans('common.success_item', ['attribute' => trans('common.reset')])]);
+        return response()->json(['status' => 'success', 'message' => trans('common.success_item', ['attribute' => trans('common.reset')])]);
     }
 
     public function checkBonus(Request $request, Goods $good): JsonResponse
@@ -71,7 +71,7 @@ class ShopController extends Controller
         $coupon_sn = $request->input('coupon_sn');
 
         if (empty($coupon_sn)) {
-            return Response::json(['status' => 'fail', 'title' => trans('common.failed'), 'message' => trans('user.coupon.error.unknown')]);
+            return response()->json(['status' => 'fail', 'title' => trans('common.failed'), 'message' => trans('user.coupon.error.unknown')]);
         }
 
         $coupon = (new CouponService($coupon_sn))->search($good); // 检查券合规性
@@ -86,16 +86,16 @@ class ShopController extends Controller
             'value' => $coupon->type === 2 ? $coupon->value : Helpers::getPriceTag($coupon->value),
         ];
 
-        return Response::json(['status' => 'success', 'data' => $data, 'message' => trans('common.applied', ['attribute' => trans('model.coupon.attribute')])]);
+        return response()->json(['status' => 'success', 'data' => $data, 'message' => trans('common.applied', ['attribute' => trans('model.coupon.attribute')])]);
     }
 
-    public function show(Goods $good): \Illuminate\Http\Response
+    public function show(Goods $good): View
     { // 显示服务详细
         $user = auth()->user();
         // 有重置日时按照重置日为标准,否则就以过期日为标准
         $dataPlusDays = $user->reset_time ?? $user->expired_at;
 
-        return Response::view('user.buy', [
+        return view('user.buy', [
             'dataPlusDays' => $dataPlusDays > date('Y-m-d') ? $dataPlusDays->diffInDays() : 0,
             'activePlan' => Order::userActivePlan()->exists(),
             'goods' => $good,
@@ -113,13 +113,13 @@ class ShopController extends Controller
         ]);
 
         if ($validator->fails()) {
-            return Response::json(['status' => 'fail', 'message' => $validator->errors()->all()]);
+            return response()->json(['status' => 'fail', 'message' => $validator->errors()->all()]);
         }
 
         if ((new CouponService($request->input('coupon_sn')))->charge()) {
-            return Response::json(['status' => 'success', 'message' => trans('common.success_item', ['attribute' => trans('user.recharge')])]);
+            return response()->json(['status' => 'success', 'message' => trans('common.success_item', ['attribute' => trans('user.recharge')])]);
         }
 
-        return Response::json(['status' => 'fail', 'message' => trans('common.failed_item', ['attribute' => trans('user.recharge')])]);
+        return response()->json(['status' => 'fail', 'message' => trans('common.failed_item', ['attribute' => trans('user.recharge')])]);
     }
 }

+ 2 - 3
app/Http/Controllers/User/SubscribeController.php

@@ -9,7 +9,6 @@ use App\Services\ProxyService;
 use App\Utils\IP;
 use Illuminate\Http\RedirectResponse;
 use Illuminate\Http\Request;
-use Redirect;
 
 class SubscribeController extends Controller
 {
@@ -22,13 +21,13 @@ class SubscribeController extends Controller
         preg_match('/[0-9A-Za-z]+/', $code, $matches, PREG_UNMATCHED_AS_NULL);
 
         if (empty($matches) || empty($code)) {
-            return Redirect::route('login');
+            return redirect()->route('login');
         }
         $code = $matches[0];
         self::$subType = is_numeric($request->input('type')) ? $request->input('type') : null;
 
         // 检查订阅码是否有效
-        $subscribe = UserSubscribe::whereCode($code)->first();
+        $subscribe = UserSubscribe::whereCode($code)->firstOrFail();
         $this->proxyServer = new ProxyService;
 
         if (! $subscribe) {

+ 13 - 14
app/Http/Controllers/User/TicketController.php

@@ -7,41 +7,40 @@ use App\Models\Ticket;
 use App\Models\User;
 use App\Notifications\TicketCreated;
 use App\Notifications\TicketReplied;
+use Illuminate\Contracts\View\View;
 use Illuminate\Http\JsonResponse;
 use Illuminate\Http\Request;
 use Notification;
-use Response;
 
 class TicketController extends Controller
 {
-    public function index(Request $request)
+    public function index(Request $request): View
     { // 工单
         return view('user.tickets', [
             'tickets' => auth()->user()->tickets()->latest()->paginate(10)->appends($request->except('page')),
         ]);
     }
 
-    public function store(Request $request): ?JsonResponse
+    public function store(Request $request): JsonResponse
     { // 添加工单
-        $user = auth()->user();
         $title = $request->input('title');
         $content = substr(str_replace(['atob', 'eval'], '', clean($request->input('content'))), 0, 300);
 
         if (empty($title) || empty($content)) {
-            return Response::json([
+            return response()->json([
                 'status' => 'fail', 'message' => trans('validation.required', ['attribute' => ucfirst(trans('validation.attributes.title')).'&'.ucfirst(trans('validation.attributes.content'))]),
             ]);
         }
 
-        if ($ticket = $user->tickets()->create(compact('title', 'content'))) {
+        if ($ticket = auth()->user()->tickets()->create(compact('title', 'content'))) {
             // 通知相关管理员
             Notification::send(User::find(1), new TicketCreated($ticket, route('admin.ticket.edit', $ticket)));
         }
 
-        return Response::json(['status' => 'success', 'message' => trans('common.success_item', ['attribute' => trans('common.submit')])]);
+        return response()->json(['status' => 'success', 'message' => trans('common.success_item', ['attribute' => trans('common.submit')])]);
     }
 
-    public function edit(Ticket $ticket)
+    public function edit(Ticket $ticket): View
     { // 回复工单
         return view('user.replyTicket', [
             'ticket' => $ticket,
@@ -49,12 +48,12 @@ class TicketController extends Controller
         ]);
     }
 
-    public function reply(Request $request, Ticket $ticket)
+    public function reply(Request $request, Ticket $ticket): JsonResponse
     {
         $content = substr(str_replace(['atob', 'eval'], '', clean($request->input('content'))), 0, 300);
 
         if (empty($content)) {
-            return Response::json([
+            return response()->json([
                 'status' => 'fail', 'message' => trans('validation.required', ['attribute' => ucfirst(trans('validation.attributes.title')).'&'.ucfirst(trans('validation.attributes.content'))]),
             ]);
         }
@@ -69,18 +68,18 @@ class TicketController extends Controller
             // 通知相关管理员
             Notification::send(User::find(1), new TicketReplied($reply, route('admin.ticket.edit', $ticket)));
 
-            return Response::json(['status' => 'success', 'message' => trans('common.success_item', ['attribute' => trans('user.ticket.reply')])]);
+            return response()->json(['status' => 'success', 'message' => trans('common.success_item', ['attribute' => trans('user.ticket.reply')])]);
         }
 
-        return Response::json(['status' => 'fail', 'message' => trans('common.failed_item', ['attribute' => trans('user.ticket.reply')])]);
+        return response()->json(['status' => 'fail', 'message' => trans('common.failed_item', ['attribute' => trans('user.ticket.reply')])]);
     }
 
     public function close(Ticket $ticket): JsonResponse
     { // 关闭工单
         if ($ticket->close()) {
-            return Response::json(['status' => 'success', 'message' => trans('common.success_item', ['attribute' => trans('common.close')])]);
+            return response()->json(['status' => 'success', 'message' => trans('common.success_item', ['attribute' => trans('common.close')])]);
         }
 
-        return Response::json(['status' => 'fail', 'message' => trans('common.failed_item', ['attribute' => trans('common.close')])]);
+        return response()->json(['status' => 'fail', 'message' => trans('common.failed_item', ['attribute' => trans('common.close')])]);
     }
 }

+ 36 - 46
app/Http/Controllers/UserController.php

@@ -7,28 +7,25 @@ use App\Models\Article;
 use App\Services\NodeService;
 use App\Services\UserService;
 use App\Utils\Helpers;
-use Cache;
 use DB;
 use Exception;
 use Hash;
+use Illuminate\Contracts\View\View;
 use Illuminate\Http\JsonResponse;
 use Illuminate\Http\RedirectResponse;
 use Illuminate\Http\Request;
 use Log;
-use Redirect;
-use Response;
-use Session;
 use Str;
 
 class UserController extends Controller
 {
     use DataChart;
 
-    public function index(NodeService $nodeService)
+    public function index(NodeService $nodeService): View
     {
         // 用户转换
-        if (Session::has('user')) {
-            auth()->loginUsingId(Session::pull('user'));
+        if (session()->has('user')) {
+            auth()->loginUsingId(session()->pull('user'));
         }
         $user = auth()->user();
         $totalTransfer = $user->transfer_enable;
@@ -59,90 +56,83 @@ class UserController extends Controller
         $user = auth()->user();
         // 系统开启登录加积分功能才可以签到
         if (! sysConfig('is_checkin')) {
-            return Response::json(['status' => 'fail', 'title' => trans('common.failed'), 'message' => trans('user.home.attendance.disable')]);
+            return response()->json(['status' => 'fail', 'title' => trans('common.failed'), 'message' => trans('user.home.attendance.disable')]);
         }
 
         // 已签到过,验证是否有效
-        if (Cache::has('userCheckIn_'.$user->id)) {
-            return Response::json(['status' => 'success', 'title' => trans('common.success'), 'message' => trans('user.home.attendance.done')]);
+        if (cache()->has('userCheckIn_'.$user->id)) {
+            return response()->json(['status' => 'success', 'title' => trans('common.success'), 'message' => trans('user.home.attendance.done')]);
         }
 
         $traffic = random_int((int) sysConfig('min_rand_traffic'), (int) sysConfig('max_rand_traffic')) * MiB;
 
         if (! $user->incrementData($traffic)) {
-            return Response::json(['status' => 'fail', 'title' => trans('common.failed'), 'message' => trans('user.home.attendance.failed')]);
+            return response()->json(['status' => 'fail', 'title' => trans('common.failed'), 'message' => trans('user.home.attendance.failed')]);
         }
         Helpers::addUserTrafficModifyLog($user->id, $user->transfer_enable, $user->transfer_enable + $traffic, trans('user.home.attendance.attribute'));
 
-        // 多久后可以再签到
-        $ttl = sysConfig('traffic_limit_time') ? sysConfig('traffic_limit_time') * Minute : Day;
-        Cache::put('userCheckIn_'.$user->id, '1', $ttl);
+        cache()->put('userCheckIn_'.$user->id, '1', sysConfig('traffic_limit_time') ? sysConfig('traffic_limit_time') * Minute : Day); // 多久后可以再签到
 
-        return Response::json(['status' => 'success', 'message' => trans('user.home.attendance.success', ['data' => formatBytes($traffic)])]);
+        return response()->json(['status' => 'success', 'message' => trans('user.home.attendance.success', ['data' => formatBytes($traffic)])]);
     }
 
     // 修改个人资料
-    public function profile()
+    public function profile(): View
     {
-        $user = auth()->user();
-        $auth = $user->userAuths()->pluck('type')->toArray();
-
-        return view('user.profile', compact('auth'));
+        return view('user.profile', ['auth' => auth()->user()->userAuths()->pluck('type')->toArray()]);
     }
 
     public function updateProfile(Request $request): RedirectResponse
     {
         $user = auth()->user();
-        // 修改密码
-        if ($request->has(['password', 'new_password'])) {
+        $url = null;
+        if ($request->has(['password', 'new_password'])) { // 修改密码
+            $url = url()->previous().'#account';
             $data = $request->only(['password', 'new_password']);
 
             if (! Hash::check($data['password'], $user->password)) {
-                return Redirect::back()->withErrors(trans('auth.password.reset.error.wrong'));
+                return redirect($url)->withErrors(trans('auth.password.reset.error.wrong'));
             }
 
             if (Hash::check($data['new_password'], $user->password)) {
-                return Redirect::back()->withErrors(trans('auth.password.reset.error.same'));
+                return redirect($url)->withErrors(trans('auth.password.reset.error.same'));
             }
 
             // 演示环境禁止改管理员密码
             if ($user->id === 1 && config('app.env') === 'demo') {
-                return Redirect::back()->withErrors(trans('auth.password.reset.error.demo'));
+                return redirect($url)->withErrors(trans('auth.password.reset.error.demo'));
             }
 
             if (! $user->update(['password' => $data['new_password']])) {
-                return Redirect::back()->withErrors(trans('common.failed_item', ['attribute' => trans('common.update')]));
+                return redirect($url)->withErrors(trans('common.failed_item', ['attribute' => trans('common.update')]));
             }
-
-            return Redirect::back()->with('successMsg', trans('common.success_item', ['attribute' => trans('common.update')]));
-            // 修改代理密码
         }
 
-        if ($request->has('passwd')) {
+        if ($request->has('passwd')) { // 修改代理密码
+            $url = url()->previous().'#proxy';
             $passwd = $request->input('passwd');
             if (! $user->update(['passwd' => $passwd])) {
-                return Redirect::back()->withErrors(trans('common.failed_item', ['attribute' => trans('common.update')]));
+                return redirect($url)->withErrors(trans('common.failed_item', ['attribute' => trans('common.update')]));
             }
-
-            return Redirect::back()->with('successMsg', trans('common.success_item', ['attribute' => trans('common.update')]));
         }
 
         // 修改联系方式
         if ($request->has(['nickname', 'wechat', 'qq'])) {
+            $url = url()->previous().'#contact';
             $data = $request->only(['nickname', 'wechat', 'qq']);
             if (empty($data['nickname'])) {
-                return Redirect::back()->withErrors(trans('validation.required', ['attribute' => trans('model.user.nickname')]));
+                return redirect($url)->withErrors(trans('validation.required', ['attribute' => trans('model.user.nickname')]));
             }
 
             if (! $user->update($data)) {
-                return Redirect::back()->withErrors(trans('common.failed_item', ['attribute' => trans('common.update')]));
+                return redirect($url)->withErrors(trans('common.failed_item', ['attribute' => trans('common.update')]));
             }
         }
 
-        return Redirect::back()->with('successMsg', trans('common.success_item', ['attribute' => trans('common.update')]));
+        return redirect($url)->with('successMsg', trans('common.success_item', ['attribute' => trans('common.update')]));
     }
 
-    public function exchangeSubscribe(): ?JsonResponse
+    public function exchangeSubscribe(): JsonResponse
     { // 更换订阅地址
         try {
             DB::beginTransaction();
@@ -156,35 +146,35 @@ class UserController extends Controller
 
             DB::commit();
 
-            return Response::json(['status' => 'success', 'message' => trans('common.success_item', ['attribute' => trans('common.change')])]);
+            return response()->json(['status' => 'success', 'message' => trans('common.success_item', ['attribute' => trans('common.change')])]);
         } catch (Exception $e) {
             DB::rollBack();
 
             Log::error(trans('user.subscribe.error').':'.$e->getMessage());
 
-            return Response::json(['status' => 'fail', 'message' => trans('common.failed_item', ['attribute' => trans('common.change')]).$e->getMessage()]);
+            return response()->json(['status' => 'fail', 'message' => trans('common.failed_item', ['attribute' => trans('common.change')]).$e->getMessage()]);
         }
     }
 
     public function switchToAdmin(): JsonResponse
     { // 转换成管理员的身份
-        if (! Session::has('admin')) {
-            return Response::json(['status' => 'fail', 'message' => trans('http-statuses.401')]);
+        if (! session()->has('admin')) {
+            return response()->json(['status' => 'fail', 'message' => trans('http-statuses.401')]);
         }
 
         // 管理员信息重新写入user
-        $user = auth()->loginUsingId(Session::pull('admin'));
+        $user = auth()->loginUsingId(session()->pull('admin'));
         if ($user) {
-            return Response::json(['status' => 'success', 'message' => trans('common.success_item', ['attribute' => trans('common.toggle')])]);
+            return response()->json(['status' => 'success', 'message' => trans('common.success_item', ['attribute' => trans('common.toggle')])]);
         }
 
-        return Response::json(['status' => 'fail', 'message' => trans('common.failed_item', ['attribute' => trans('common.toggle')])]);
+        return response()->json(['status' => 'fail', 'message' => trans('common.failed_item', ['attribute' => trans('common.toggle')])]);
     }
 
     public function switchCurrency(string $code): RedirectResponse
     { // 切换语言
-        Session::put('currency', $code);
+        session()->put('currency', $code);
 
-        return Redirect::back();
+        return redirect()->back();
     }
 }

+ 1 - 2
app/Models/UserSubscribe.php

@@ -2,7 +2,6 @@
 
 namespace App\Models;
 
-use Auth;
 use Illuminate\Database\Eloquent\Builder;
 use Illuminate\Database\Eloquent\Model;
 use Illuminate\Database\Eloquent\Relations\BelongsTo;
@@ -24,7 +23,7 @@ class UserSubscribe extends Model
 
     public function scopeUid(Builder $query): Builder
     {
-        return $query->whereUserId(Auth::id());
+        return $query->whereUserId(auth()->id());
     }
 
     public function user(): BelongsTo

+ 1 - 2
app/Services/CouponService.php

@@ -6,7 +6,6 @@ use App\Models\Coupon;
 use App\Models\Goods;
 use App\Models\User;
 use App\Utils\Helpers;
-use Auth;
 use Exception;
 use Illuminate\Http\JsonResponse;
 use Illuminate\Support\Facades\Log;
@@ -18,7 +17,7 @@ class CouponService
 
     public function __construct(private readonly string $code)
     {
-        $this->user = Auth::getUser();
+        $this->user = auth()->user();
     }
 
     public function search(Goods $goods): JsonResponse|Coupon

+ 5 - 5
app/Utils/Clients/Protocols/Clash.php

@@ -46,9 +46,9 @@ class Clash implements Protocol
             'password' => $server['passwd'],
             'cipher' => $server['method'],
             'obfs' => $server['obfs'],
-            'obfs-param' => $server['obfs_param'],
+            'obfs-param' => $server['obfs_param'] ?? '',
             'protocol' => $server['protocol'],
-            'protocol-param' => $server['protocol_param'],
+            'protocol-param' => $server['protocol_param'] ?? '',
             'udp' => $server['udp'],
         ];
     }
@@ -66,13 +66,13 @@ class Clash implements Protocol
             'udp' => $server['udp'],
         ];
 
-        if ($server['v2_tls']) {
+        if (isset($server['v2_tls']) && $server['v2_tls']) {
             $array['tls'] = true;
             $array['servername'] = $server['v2_host'];
         }
         $array['network'] = $server['v2_net'];
 
-        if ($server['v2_net'] === 'ws') {
+        if (isset($server['v2_net']) && $server['v2_net'] === 'ws') {
             $array['ws-opts'] = [];
             $array['ws-opts']['path'] = $server['v2_path'];
             if ($server['v2_host']) {
@@ -98,7 +98,7 @@ class Clash implements Protocol
             'udp' => $server['udp'],
         ];
 
-        if (! empty($server['sni'])) {
+        if (isset($server['sni'])) {
             $array['sni'] = $server['sni'];
         }
 

+ 6 - 6
app/Utils/Clients/Protocols/QuantumultX.php

@@ -41,9 +41,9 @@ class QuantumultX implements Protocol
             "method={$server['method']}",
             "password={$server['passwd']}",
             "ssr-protocol={$server['protocol']}",
-            "ssr-protocol-param={$server['protocol_param']}",
+            'ssr-protocol-param='.($server['protocol_param'] ?? ''),
             "obfs={$server['obfs']}",
-            "obfs-host={$server['obfs_param']}",
+            'obfs-host='.($server['obfs_param'] ?? ''),
             'fast-open=true',
             "udp-relay={$server['udp']}",
             "tag={$server['name']}",
@@ -63,24 +63,24 @@ class QuantumultX implements Protocol
             "tag={$server['name']}",
         ];
 
-        if ($server['v2_tls']) {
+        if (isset($server['v2_tls']) && $server['v2_tls']) {
             if ($server['v2_net'] === 'tcp') {
                 $config[] = 'obfs=over-tls';
             } else {
                 $config[] = 'obfs=wss';
             }
-        } elseif ($server['v2_net'] === 'ws') {
+        } elseif (isset($server['v2_net']) && $server['v2_net'] === 'ws') {
             $config[] = 'obfs=ws';
         }
 
-        if ($server['v2_tls']) {
+        if (isset($server['v2_tls']) && $server['v2_tls']) {
             $config[] = 'tls-verification=true';
             if (! empty($server['v2_host'])) {
                 $config[] = "tls-host={$server['v2_host']}";
             }
         }
 
-        if ($server['v2_type'] === 'ws' && ! empty($server['v2_path'])) {
+        if (isset($server['v2_type']) && $server['v2_type'] === 'ws' && ! empty($server['v2_path'])) {
             $config[] = "obfs-uri={$server['v2_path']}";
             $config[] = "obfs-host={$server['v2_host']}";
         }

+ 3 - 3
app/Utils/Clients/Protocols/Surge.php

@@ -49,10 +49,10 @@ class Surge implements Protocol
             "udp-relay={$server['udp']}",
         ];
 
-        if ($server['v2_tls']) {
+        if (isset($server['v2_tls']) && $server['v2_tls']) {
             array_push($config, 'tls=true', "sni={$server['v2_host']}");
         }
-        if ($server['v2_net'] === 'ws') {
+        if (isset($server['v2_net']) && $server['v2_net'] === 'ws') {
             array_push($config, 'ws=true', "ws-path={$server['v2_path']}", "ws-headers=Host:{$server['v2_host']}");
         }
 
@@ -66,7 +66,7 @@ class Surge implements Protocol
             $server['host'],
             $server['port'],
             "password={$server['passwd']}",
-            $server['sni'] ? "sni={$server['sni']}" : '',
+            isset($server['sni']) ? "sni={$server['sni']}" : '',
             'tfo=true',
             "udp-relay={$server['udp']}",
             // "skip-cert-verify={$server['allow_insecure']}"

+ 11 - 11
app/Utils/Clients/Protocols/URLSchemes.php

@@ -33,11 +33,11 @@ class URLSchemes implements Protocol
         $setting = "{$server['host']}:{$server['port']}:{$server['protocol']}:{$server['method']}:{$server['obfs']}:";
 
         return 'ssr://'.base64url_encode($setting.base64url_encode($server['passwd']).'/?'.http_build_query([
-            'obfsparam' => $server['obfs_param'] ? base64url_encode($server['obfs_param']) : '',
-            'protoparam' => $server['protocol_param'] ? base64url_encode($server['protocol_param']) : '',
-            'remarks' => $server['name'] ? base64url_encode($server['name']) : '',
-            'group' => $server['group'] ? base64url_encode($server['group']) : '',
-            'udpport' => $server['udp'],
+            'obfsparam' => base64url_encode($server['obfs_param'] ?? ''),
+            'protoparam' => base64url_encode($server['protocol_param'] ?? ''),
+            'remarks' => base64url_encode($server['name']),
+            'group' => base64url_encode($server['group'] ?? ''),
+            'udpport' => $server['udp'] ?? 0,
             'uot' => 0,
         ])).PHP_EOL;
     }
@@ -51,12 +51,12 @@ class URLSchemes implements Protocol
             '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'],
+            'net' => $server['v2_net'] ?? '',
+            'type' => $server['v2_type'] ?? '',
+            'host' => $server['v2_host'] ?? '',
+            'path' => $server['v2_path'] ?? '',
+            'tls' => $server['v2_tls'] ?? '',
+            'sni' => $server['v2_sni'] ?? '',
             'remark' => $server['name'],
         ];
 

+ 2 - 2
app/helpers.php

@@ -58,7 +58,7 @@ if (! function_exists('formatTime')) {
 
 // 获取系统设置
 if (! function_exists('sysConfig')) {
-    function sysConfig(?string $key = null, ?string $default = null): array|string|null
+    function sysConfig(?string $key = null, ?string $default = null): array|null|string
     {
         return $key ? config("settings.$key", $default) : config('settings');
     }
@@ -83,7 +83,7 @@ if (! function_exists('array_clean')) {
 
 // string url safe sanitize
 if (! function_exists('string_urlsafe')) {
-    function string_urlsafe($string, $force_lowercase = true, $anal = false): string
+    function string_urlsafe(string $string, bool $force_lowercase = true, bool $anal = false): string
     {
         $clean = preg_replace('/[~`!@#$%^&*()_=+\[\]{}\\|;:"\'<>,.?\/]/', '_', strip_tags($string));
         $clean = preg_replace('/\s+/', '-', $clean);

+ 1 - 1
resources/views/admin/layouts.blade.php

@@ -57,7 +57,7 @@
                     <li class="nav-item dropdown">
                         <a class="nav-link navbar-avatar" data-toggle="dropdown" data-animation="scale-up" href="#" role="button" aria-expanded="false">
                             <span class="avatar avatar-online">
-                                <img data-uid="{{ Auth::getUser()->id }}" data-qq="{{ Auth::getUser()->qq }}" data-username="{{ Auth::getUser()->username }}"
+                                <img data-uid="{{ auth()->user()->id }}" data-qq="{{ auth()->user()->qq }}" data-username="{{ auth()->user()->username }}"
                                      src="" alt="{{ trans('common.avatar') }}" loading="lazy" />
                                 <i></i>
                             </span>

+ 3 - 3
resources/views/user/knowledge.blade.php

@@ -9,12 +9,12 @@
         <h1 class="page-title">{{ __('user.knowledge.title') }}</h1>
     </div>
     <div class="page-content container-fluid">
-        @if ($knowledges->isNotEmpty())
+        @if ($knowledge->isNotEmpty())
             <div class="row">
                 <div class="offset-xxl-1 col-xxl-2 col-xl-3 offset-lg-0 col-lg-4 offset-sm-2 col-sm-8">
                     <div class="panel">
                         <div class="list-group" role="tablist">
-                            @foreach ($knowledges as $category => $articles)
+                            @foreach ($knowledge as $category => $articles)
                                 @php $str = string_urlsafe($category) @endphp
                                 <a class="list-group-item @if ($loop->first) list-group-item-action active @endif" data-toggle="tab"
                                    href="#{{ $str }}" role="tab" aria-controls="{{ $str }}">{{ $category }}</a>
@@ -32,7 +32,7 @@
                         </div>
                         <div class="panel-body pt-30">
                             <div class="tab-content">
-                                @foreach ($knowledges as $category => $articles)
+                                @foreach ($knowledge as $category => $articles)
                                     <div class="tab-pane animation-fade @if ($loop->first) active @endif" id="{{ string_urlsafe($category) }}"
                                          role="tabpanel">
                                         <div class="panel-group panel-group-simple panel-group-continuous" role="tablist" aria-multiselectable="true">

+ 2 - 2
resources/views/user/layouts.blade.php

@@ -70,7 +70,7 @@
                     <li class="nav-item dropdown">
                         <a class="nav-link navbar-avatar" data-animation="scale-up" data-toggle="dropdown" href="#" role="button" aria-expanded="false">
                             <span class="avatar avatar-online">
-                                <img data-uid="{{ Auth::getUser()->id }}" data-qq="{{ Auth::getUser()->qq }}" data-username="{{ Auth::getUser()->username }}"
+                                <img data-uid="{{ auth()->user()->id }}" data-qq="{{ auth()->user()->qq }}" data-username="{{ auth()->user()->username }}"
                                      src="" alt="{{ trans('common.avatar') }}" loading="lazy" />
                             </span>
                         </a>
@@ -201,7 +201,7 @@
     @if (Session::has('admin'))
         <div class="panel panel-bordered w-300 bg-grey-200" style="position:fixed;right:20px;bottom:0;">
             <div class="panel-body text-right">
-                <h5>{{ trans('user.current_role') }}:{{ Auth::getUser()->username }}</h5>
+                <h5>{{ trans('user.current_role') }}:{{ auth()->user()->username }}</h5>
                 <button class="btn btn-danger btn-block mt-20" id="return_to_admin" type="button">
                     {{ trans('common.back_to', ['page' => trans('user.menu.admin_dashboard')]) }}
                 </button>

+ 5 - 5
resources/views/user/nodeList.blade.php

@@ -31,20 +31,20 @@
                                 <div class="counter-label text-uppercase font-size-16">{{ trans('user.account.level') }}</div>
                                 <div class="counter-number-group">
                                     <span class="counter-icon"><i class="icon wb-user-circle" aria-hidden="true"></i></span>
-                                    <span class="counter-number ml-10">{{ Auth::getUser()->level }}</span>
+                                    <span class="counter-number ml-10">{{ auth()->user()->level }}</span>
                                 </div>
-                                <div class="counter-label text-uppercase font-size-16">{{ Auth::getUser()->level_name }}</div>
+                                <div class="counter-label text-uppercase font-size-16">{{ auth()->user()->level_name }}</div>
                             </div>
                         </div>
                     </div>
-                    @if (Auth::getUser()->user_group_id)
+                    @if (auth()->user()->user_group_id)
                         <div class="col-md-12">
                             <div class="card card-block p-20 bg-indigo-500">
                                 <div class="counter counter-lg counter-inverse">
                                     <div class="counter-label text-uppercase font-size-16">{{ trans('user.account.group') }}</div>
                                     <div class="counter-number-group">
                                         <span class="counter-icon"><i class="icon wb-globe" aria-hidden="true"></i></span>
-                                        <span class="counter-number ml-10">{{ Auth::getUser()->userGroup->name }}</span>
+                                        <span class="counter-number ml-10">{{ auth()->user()->userGroup->name }}</span>
                                     </div>
                                 </div>
                             </div>
@@ -56,7 +56,7 @@
                                 <div class="counter-label text-uppercase font-size-16">{{ trans('user.account.speed_limit') }}</div>
                                 <div class="counter-number-group">
                                     <span class="counter-icon"><i class="icon wb-signal" aria-hidden="true"></i></span>
-                                    <span class="counter-number ml-10">{{ Auth::getUser()->speed_limit ?: trans('common.unlimited') }}</span>
+                                    <span class="counter-number ml-10">{{ auth()->user()->speed_limit ?: trans('common.unlimited') }}</span>
                                 </div>
                                 <div class="counter-label font-size-16">Mbps</div>
                             </div>

+ 10 - 10
resources/views/user/profile.blade.php

@@ -24,17 +24,17 @@
                 <div class="user-info card card-shadow text-center">
                     <div class="user-base card-block">
                         <a class="avatar img-bordered avatar-100" href="javascript:void(0)">
-                            <img data-uid="{{ Auth::getUser()->id }}" data-qq="{{ Auth::getUser()->qq }}" data-username="{{ Auth::getUser()->username }}"
-                                 src="" alt="{{ trans('common.avatar') }}" loading="lazy" />
+                            <img data-uid="{{ auth()->user()->id }}" data-qq="{{ auth()->user()->qq }}" data-username="{{ auth()->user()->username }}" src=""
+                                 alt="{{ trans('common.avatar') }}" loading="lazy" />
                         </a>
-                        <h4 class="user-name">{{ Auth::getUser()->nickname }}</h4>
+                        <h4 class="user-name">{{ auth()->user()->nickname }}</h4>
                         <p class="user-job">
                             <i class="fa-brands fa-weixin fa-lg mr-10" aria-hidden="true"></i>
-                            {{ trans('model.user.wechat') }}: {{ Auth::getUser()->wechat ?? trans('common.none') }}
+                            {{ trans('model.user.wechat') }}: {{ auth()->user()->wechat ?? trans('common.none') }}
                         </p>
                         <p class="user-location"><i class="fa-brands fa-qq fa-lg mr-10" aria-hidden="true"></i> QQ:
-                            @if (Auth::getUser()->qq)
-                                {{ Auth::getUser()->qq }}
+                            @if (auth()->user()->qq)
+                                {{ auth()->user()->qq }}
                             @else
                                 {{ trans('common.none') }}
                             @endif
@@ -118,17 +118,17 @@
                                     <div class="form-group row">
                                         <label class="col-md-5 col-form-label" for="nickname">{{ trans('model.user.nickname') }}</label>
                                         <input class="form-control col-md-6 round" id="nickname" name="nickname" type="text"
-                                               value="{{ Auth::getUser()->nickname }}" />
+                                               value="{{ auth()->user()->nickname }}" />
                                     </div>
                                     <div class="form-group row">
                                         <label class="col-md-5 col-form-label" for="wechat">{{ trans('model.user.wechat') }}</label>
                                         <input class="form-control col-md-6 round" id="wechat" name="wechat" type="text"
-                                               value="{{ Auth::getUser()->wechat }}" />
+                                               value="{{ auth()->user()->wechat }}" />
                                     </div>
                                     <div class="form-group row">
                                         <label class="col-md-5 col-form-label" for="qq">{{ trans('model.user.qq') }}</label>
                                         <input class="form-control col-md-6 round" id="qq" name="qq" type="number"
-                                               value="{{ Auth::getUser()->qq }}" />
+                                               value="{{ auth()->user()->qq }}" />
                                     </div>
                                     <div class="form-actions">
                                         <button class="btn btn-info float-right" type="submit">{{ trans('common.submit') }}</button>
@@ -141,7 +141,7 @@
                                     <div class="form-group row">
                                         <label class="col-md-5 col-form-label" for="passwd"> {{ trans('user.account.connect_password') }} </label>
                                         <input class="form-control col-md-5 round" id="passwd" name="passwd" type="text"
-                                               value="{{ Auth::getUser()->passwd }}" required />
+                                               value="{{ auth()->user()->passwd }}" required />
                                     </div>
                                     <div class="form-actions">
                                         <button class="btn btn-info float-right" type="submit"> {{ trans('common.submit') }} </button>

+ 1 - 1
resources/views/user/services.blade.php

@@ -13,7 +13,7 @@
                         </button>
                         <span class="font-weight-400">{{ trans('user.account.credit') }}</span>
                         <div class="content-text text-center mb-0">
-                            <span class="font-size-40 font-weight-100">{{ Auth::getUser()->credit_tag }}</span>
+                            <span class="font-size-40 font-weight-100">{{ auth()->user()->credit_tag }}</span>
                             <br />
                             <button class="btn btn-danger float-right mr-15" data-toggle="modal" data-target="#charge_modal">{{ trans('user.recharge') }}</button>
                         </div>