Răsfoiți Sursa

日常开发

admin 7 ani în urmă
părinte
comite
608e265025

+ 12 - 12
app/Components/Helpers.php

@@ -37,25 +37,25 @@ class Helpers
     // 获取默认加密方式
     public static function getDefaultMethod()
     {
-        $config = SsConfig::query()->where('type', 1)->where('is_default', 1)->first();
+        $config = SsConfig::default()->type(1)->first();
 
         return $config ? $config->name : 'aes-256-cfb';
     }
 
-    // 获取默认混淆
-    public static function getDefaultObfs()
+    // 获取默认协议
+    public static function getDefaultProtocol()
     {
-        $config = SsConfig::query()->where('type', 3)->where('is_default', 1)->first();
+        $config = SsConfig::default()->type(2)->first();
 
-        return $config ? $config->name : 'plain';
+        return $config ? $config->name : 'origin';
     }
 
-    // 获取默认协议
-    public static function getDefaultProtocol()
+    // 获取默认混淆
+    public static function getDefaultObfs()
     {
-        $config = SsConfig::query()->where('type', 2)->where('is_default', 1)->first();
+        $config = SsConfig::default()->type(3)->first();
 
-        return $config ? $config->name : 'origin';
+        return $config ? $config->name : 'plain';
     }
 
     // 获取一个随机端口
@@ -89,19 +89,19 @@ class Helpers
     // 加密方式
     public static function methodList()
     {
-        return SsConfig::query()->where('type', 1)->get();
+        return SsConfig::type(1)->get();
     }
 
     // 协议
     public static function protocolList()
     {
-        return SsConfig::query()->where('type', 2)->get();
+        return SsConfig::type(2)->get();
     }
 
     // 混淆
     public static function obfsList()
     {
-        return SsConfig::query()->where('type', 3)->get();
+        return SsConfig::type(3)->get();
     }
 
     // 等级

+ 5 - 5
app/Http/Controllers/AdminController.php

@@ -1629,7 +1629,7 @@ EOF;
             }
 
             // 校验是否已存在
-            $config = SsConfig::query()->where('name', $name)->where('type', $type)->first();
+            $config = SsConfig::type($type)->where('name', $name)->first();
             if ($config) {
                 return Response::json(['status' => 'fail', 'data' => '', 'message' => '配置已经存在,请勿重复添加']);
             }
@@ -1643,9 +1643,9 @@ EOF;
 
             return Response::json(['status' => 'success', 'data' => '', 'message' => '添加成功']);
         } else {
-            $view['method_list'] = SsConfig::query()->where('type', 1)->get();
-            $view['protocol_list'] = SsConfig::query()->where('type', 2)->get();
-            $view['obfs_list'] = SsConfig::query()->where('type', 3)->get();
+            $view['method_list'] = SsConfig::type(1)->get();
+            $view['protocol_list'] = SsConfig::type(2)->get();
+            $view['obfs_list'] = SsConfig::type(3)->get();
             $view['level_list'] = Helpers::levelList();
             $view['country_list'] = Country::query()->get();
 
@@ -1681,7 +1681,7 @@ EOF;
         }
 
         // 去除该配置所属类型的默认值
-        SsConfig::query()->where('type', $config->type)->where('is_default', 1)->update(['is_default' => 0]);
+        SsConfig::default()->type($config->type)->update(['is_default' => 0]);
 
         // 将该ID对应记录值置为默认值
         SsConfig::query()->where('id', $id)->update(['is_default' => 1]);

+ 0 - 58
app/Http/Controllers/MarketingController.php

@@ -33,64 +33,6 @@ class MarketingController extends Controller
         return Response::view('marketing.emailList', $view);
     }
 
-    // 消息通道群发列表
-    public function pushList(Request $request)
-    {
-        $status = $request->get('status');
-
-        $query = Marketing::query()->where('type', 2);
-
-        if ($status != '') {
-            $query->where('status', $status);
-        }
-
-        $view['list'] = $query->paginate(15);
-
-        return Response::view('marketing.pushList', $view);
-    }
-
-    // 添加推送消息
-    public function addPushMarketing(Request $request)
-    {
-        $title = trim($request->get('title'));
-        $content = $request->get('content');
-
-        if (!self::$systemConfig['is_push_bear']) {
-            return Response::json(['status' => 'fail', 'data' => '', 'message' => '推送失败:请先启用并配置PushBear']);
-        }
-
-        DB::beginTransaction();
-        try {
-            $client = new Client();
-            $response = $client->request('GET', 'https://pushbear.ftqq.com/sub', [
-                'query' => [
-                    'sendkey' => self::$systemConfig['push_bear_send_key'],
-                    'text'    => $title,
-                    'desp'    => $content
-                ]
-            ]);
-
-            $result = json_decode($response->getBody());
-            if ($result->code) { // 失败
-                $this->addMarketing(2, $title, $content, -1, $result->message);
-
-                throw new \Exception($result->message);
-            }
-
-            $this->addMarketing(2, $title, $content, 1);
-
-            DB::commit();
-
-            return Response::json(['status' => 'success', 'data' => '', 'message' => '推送成功']);
-        } catch (\Exception $e) {
-            Log::info('PushBear消息推送失败:' . $e->getMessage());
-
-            DB::rollBack();
-
-            return Response::json(['status' => 'fail', 'data' => '', 'message' => '推送失败:' . $e->getMessage()]);
-        }
-    }
-
     private function addMarketing($type = 1, $title = '', $content = '', $status = 1, $error = '', $receiver = '')
     {
         $marketing = new Marketing();

+ 10 - 0
app/Http/Models/SsConfig.php

@@ -16,4 +16,14 @@ class SsConfig extends Model
     protected $table = 'ss_config';
     protected $primaryKey = 'id';
     public $timestamps = false;
+
+    function scopeDefault($query)
+    {
+        $query->where('is_default', 1);
+    }
+
+    function scopeType($query, $type)
+    {
+        $query->where('type', $type);
+    }
 }

+ 5 - 5
resources/views/admin/config.blade.php

@@ -52,13 +52,13 @@
                                         @else
                                             @foreach($method_list as $method)
                                                 <tr class="odd gradeX">
-                                                    <td> {{$method->name}} @if($method->is_default) <small><span class='label label-info label-sm'>默认</span></small> @endif </td>
+                                                    <td> {{$method->name}} </td>
                                                     <td>
-                                                        @if(!$method->is_default)
+                                                        @if($method->is_default)
+                                                            <span class='label label-info'>默认</span>
+                                                        @else
                                                             <button type="button" class="btn btn-sm blue btn-outline" onclick="setDefault('1', '{{$method->id}}')">默认</button>
-                                                            <button type="button" class="btn btn-sm red btn-outline" onclick="delConfig('1', '{{$method->id}}')">
-                                                                <i class="fa fa-trash"></i>
-                                                            </button>
+                                                            <button type="button" class="btn btn-sm red btn-outline" onclick="delConfig('1', '{{$method->id}}')">删除</button>
                                                         @endif
                                                     </td>
                                                 </tr>

+ 0 - 6
resources/views/admin/layouts.blade.php

@@ -260,12 +260,6 @@
                                 <span class="title">邮件群发</span>
                             </a>
                         </li>
-                        <li class="nav-item {{in_array(Request::path(), ['marketing/pushList']) ? 'active open' : ''}}">
-                            <a href="{{url('marketing/pushList')}}" class="nav-link ">
-                                <i class="fa fa-rss"></i>
-                                <span class="title">消息推送</span>
-                            </a>
-                        </li>
                     </ul>
                 </li>
                 <li class="nav-item {{in_array(Request::path(), ['admin/decompile', 'admin/convert', 'admin/import', 'admin/trafficLog', 'admin/analysis', 'admin/emailLog', 'payment/callbackList', 'sensitiveWords/list', 'sensitiveWords/add']) ? 'active open' : ''}}">

+ 4 - 4
resources/views/admin/nodeList.blade.php

@@ -74,10 +74,10 @@
                                                     @endif
                                                 </td>
                                                 <td> <span class="label {{$node->status ? 'label-danger' : 'label-default'}}">{{$node->server}}</span> </td>
-                                                <td> <span class="label {{$node->status ? 'label-danger' : 'label-default'}}">{{$node->uptime}}</span> </td>
-                                                <td> <span class="label {{$node->status ? 'label-danger' : 'label-default'}}">{{$node->load}}</span> </td>
-                                                <td> <span class="label {{$node->status ? 'label-danger' : 'label-default'}}">{{$node->online_users}}</span> </td>
-                                                <td> {{$node->transfer}} </td>
+                                                <td> <span class="label {{$node->status ? 'label-danger' : 'label-default'}}">{{$node->is_transit ? '' : $node->uptime}}</span> </td>
+                                                <td> <span class="label {{$node->status ? 'label-danger' : 'label-default'}}">{{$node->is_transit ? '' : $node->load}}</span> </td>
+                                                <td> <span class="label {{$node->status ? 'label-danger' : 'label-default'}}">{{$node->is_transit ? '' : $node->online_users}}</span> </td>
+                                                <td> {{$node->is_transit ? '' : $node->transfer}} </td>
                                                 <td> <span class="label {{$node->status ? 'label-danger' : 'label-default'}}">{{$node->traffic_rate}}</span> </td>
                                                 <td>
                                                     @if($node->compatible) <span class="label label-info">兼</span> @endif

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

@@ -429,7 +429,7 @@
                                                             <label for="is_custom_subscribe" class="col-md-3 control-label">高级订阅</label>
                                                             <div class="col-md-9">
                                                                 <input type="checkbox" class="make-switch" @if($is_custom_subscribe) checked @endif id="is_custom_subscribe" data-on-color="success" data-off-color="danger" data-on-text="启用" data-off-text="关闭">
-                                                                <span class="help-block"> 启用后,订阅信息顶部将显示过期时间、剩余流量 </span>
+                                                                <span class="help-block"> 启用后,订阅信息顶部将显示过期时间、剩余流量(Quantumult有特殊效果) </span>
                                                             </div>
                                                         </div>
                                                         <div class="col-md-6 col-sm-6 col-xs-12"></div>

+ 0 - 184
resources/views/marketing/pushList.blade.php

@@ -1,184 +0,0 @@
-@extends('admin.layouts')
-@section('css')
-    <link href="/assets/global/plugins/datatables/datatables.min.css" rel="stylesheet" type="text/css" />
-    <link href="/assets/global/plugins/datatables/plugins/bootstrap/datatables.bootstrap.css" rel="stylesheet" type="text/css" />
-@endsection
-@section('content')
-    <!-- BEGIN CONTENT BODY -->
-    <div class="page-content" style="padding-top:0;">
-        <!-- BEGIN PAGE BASE CONTENT -->
-        <div class="row">
-            <div class="col-md-12">
-                <!-- BEGIN EXAMPLE TABLE PORTLET-->
-                <div class="portlet light bordered">
-                    <div class="portlet-title">
-                        <div class="caption font-dark">
-                            <span class="caption-subject bold uppercase"> 推送消息列表 </span>
-                        </div>
-                        <div class="actions">
-                            <div class="btn-group btn-group-devided">
-                                <button class="btn sbold blue" data-toggle="modal" data-target="#send_modal"> 推送消息 </button>
-                            </div>
-                        </div>
-                    </div>
-                    <div class="portlet-body">
-                        <div class="alert alert-info">
-                            <i class="fa fa-warning"></i> 仅会推送给关注了您的消息通道的用户 (<a href="{{url('admin/system')}}" target="_blank">设置PushBear</a>)
-                        </div>
-                        <div class="row">
-                            <div class="col-md-3 col-sm-4 col-xs-12">
-                                <select class="form-control" name="status" id="status" onChange="doSearch()">
-                                    <option value="" @if(Request::get('status') == '') selected @endif>状态</option>
-                                    <option value="0" @if(Request::get('status') == '0') selected @endif>待发送</option>
-                                    <option value="-1" @if(Request::get('status') == '-1') selected @endif>失败</option>
-                                    <option value="1" @if(Request::get('status') == '1') selected @endif>成功</option>
-                                </select>
-                            </div>
-                            <div class="col-md-3 col-sm-4 col-xs-12">
-                                <button type="button" class="btn blue" onclick="doSearch();">查询</button>
-                                <button type="button" class="btn grey" onclick="doReset();">重置</button>
-                            </div>
-                        </div>
-                        <div class="table-scrollable table-scrollable-borderless">
-                            <table class="table table-hover table-light">
-                                <thead>
-                                    <tr>
-                                        <th> # </th>
-                                        <th> 消息标题 </th>
-                                        <th> 消息内容 </th>
-                                        <th> 推送状态 </th>
-                                        <th> 推送时间 </th>
-                                        <th> 错误信息 </th>
-                                    </tr>
-                                </thead>
-                                <tbody>
-                                @if ($list->isEmpty())
-                                    <tr>
-                                        <td colspan="6" style="text-align: center;">暂无数据</td>
-                                    </tr>
-                                @else
-                                    @foreach($list as $vo)
-                                        <tr class="odd gradeX">
-                                            <td> {{$vo->id}} </td>
-                                            <td> {{$vo->title}} </td>
-                                            <td> {{$vo->content}} </td>
-                                            <td> {{$vo->status_label}} </td>
-                                            <td> {{$vo->created_at}} </td>
-                                            <td> {{$vo->error}} </td>
-                                        </tr>
-                                    @endforeach
-                                @endif
-                                </tbody>
-                            </table>
-                        </div>
-                        <div class="row">
-                            <div class="col-md-4 col-sm-4">
-                                <div class="dataTables_info" role="status" aria-live="polite">共 {{$list->total()}} 条推送消息</div>
-                            </div>
-                            <div class="col-md-8 col-sm-8">
-                                <div class="dataTables_paginate paging_bootstrap_full_number pull-right">
-                                    {{ $list->links() }}
-                                </div>
-                            </div>
-                        </div>
-
-                        <!-- 推送消息 -->
-                        <div id="send_modal" class="modal fade" tabindex="-1" data-focus-on="input:first" data-backdrop="static" data-keyboard="false">
-                            <div class="modal-dialog">
-                                <div class="modal-content">
-                                    <div class="modal-header">
-                                        <button type="button" class="close" data-dismiss="modal" aria-hidden="true"></button>
-                                        <h4 class="modal-title">推送消息</h4>
-                                    </div>
-                                    <div class="modal-body">
-                                        <div class="alert alert-danger" style="display: none;" id="msg"></div>
-                                        <!-- BEGIN FORM-->
-                                        <form action="#" method="post" class="form-horizontal">
-                                            <div class="form-body">
-                                                <div class="form-group">
-                                                    <label for="title" class="col-md-2 control-label"> 标题 </label>
-                                                    <div class="col-md-9">
-                                                        <input type="text" class="form-control" name="title" id="title" placeholder="">
-                                                    </div>
-                                                </div>
-                                                <div class="form-group">
-                                                    <label for="content" class="col-md-2 control-label"> 内容 </label>
-                                                    <div class="col-md-9">
-                                                        <textarea class="form-control" rows="6" name="content" id="content"></textarea>
-                                                        <span class="help-block"> 内容支持<a href="https://maxiang.io/" target="_blank">Markdown语法</a> </span>
-                                                    </div>
-                                                </div>
-                                            </div>
-                                        </form>
-                                        <!-- END FORM-->
-                                    </div>
-                                    <div class="modal-footer">
-                                        <button type="button" data-dismiss="modal" class="btn dark btn-outline">取消</button>
-                                        <button type="button" class="btn red btn-outline" onclick="return send();">推送</button>
-                                    </div>
-                                </div>
-                            </div>
-                        </div>
-                    </div>
-                </div>
-                <!-- END EXAMPLE TABLE PORTLET-->
-            </div>
-        </div>
-        <!-- END PAGE BASE CONTENT -->
-    </div>
-    <!-- END CONTENT BODY -->
-@endsection
-@section('script')
-    <script type="text/javascript">
-        // 发送通道消息
-        function send() {
-            var _token = '{{csrf_token()}}';
-            var title = $("#title").val();
-            var content = $("#content").val();
-
-            if (title == '') {
-                $("#msg").show().html("标题不能为空");
-                $("#title").focus();
-                return false;
-            }
-
-            $.ajax({
-                url:'{{url('marketing/addPushMarketing')}}',
-                type:"POST",
-                data:{_token:_token, title:title, content:content},
-                beforeSend:function(){
-                    $("#msg").show().html("正在添加...");
-                },
-                success:function(ret){
-                    if (ret.status == 'fail') {
-                        $("#msg").show().html(ret.message);
-                        return false;
-                    }
-
-                    $("#send_modal").modal("hide");
-
-                },
-                error:function(){
-                    $("#msg").show().html("请求错误,请重试");
-                },
-                complete:function(){}
-            });
-        }
-
-        // 关闭modal触发
-        $('#send_modal').on('hide.bs.modal', function () {
-            window.location.reload();
-        });
-
-
-        function doSearch() {
-            var status = $("#status").val();
-
-            window.location.href = "{{url('marketing/pushList?status=')}}" + status;
-        }
-
-        function doReset() {
-            window.location.href = "{{url('marketing/pushList')}}";
-        }
-    </script>
-@endsection

+ 1 - 8
resources/views/subscribe/deviceList.blade.php

@@ -29,12 +29,6 @@
                     </div>
                     <div class="portlet-body">
                         <div class="row">
-                            <div class="col-md-3 col-sm-4 col-xs-12">
-                                <input type="text" class="col-md-4 form-control" name="user_id" value="{{Request::get('user_id')}}" id="user_id" placeholder="用户ID" onkeydown="if(event.keyCode==13){doSearch();}">
-                            </div>
-                            <div class="col-md-3 col-sm-4 col-xs-12">
-                                <input type="text" class="col-md-4 form-control" name="username" value="{{Request::get('username')}}" id="username" placeholder="用户名" onkeydown="if(event.keyCode==13){doSearch();}">
-                            </div>
                             <div class="col-md-3 col-sm-4 col-xs-12">
                                 <select class="form-control" name="status" id="status" onChange="doSearch()">
                                     <option value="" @if(Request::get('status') == '') selected @endif>状态</option>
@@ -107,10 +101,9 @@
     <script type="text/javascript">
         // 搜索
         function doSearch() {
-            var name = $("#name").val();
             var status = $("#status option:checked").val();
 
-            window.location.href = '{{url('subscribe/deviceList')}}' + '?name=' + name + '&status=' + status;
+            window.location.href = '{{url('subscribe/deviceList')}}' + '?status=' + status;
         }
 
         // 重置

+ 0 - 2
routes/web.php

@@ -89,8 +89,6 @@ Route::group(['middleware' => ['isForbidden', 'isLogin', 'isAdmin']], function (
     Route::post('subscribe/setSubscribeStatus', 'SubscribeController@setSubscribeStatus'); // 启用禁用用户的订阅
     Route::post('subscribe/setDeviceStatus', 'SubscribeController@setDeviceStatus'); // 是否允许设备订阅
     Route::get("marketing/emailList", "MarketingController@emailList"); // 邮件消息列表
-    Route::get("marketing/pushList", "MarketingController@pushList"); // 推送消息列表
-    Route::post("marketing/addPushMarketing", "MarketingController@addPushMarketing"); // 推送消息
     Route::get("admin/onlineIPMonitor", "AdminController@onlineIPMonitor"); // 在线IP监控
     Route::any("admin/decompile", "AdminController@decompile"); // SS(R)链接反解析
     Route::get('admin/download', 'AdminController@download'); // 下载转换过的JSON配置