mirror of
https://github.com/ProxyPanel/ProxyPanel.git
synced 2026-04-03 02:58:42 +00:00
添加全部节点重载快捷按钮
This commit is contained in:
@@ -231,21 +231,34 @@ class NodeController extends Controller
|
||||
}
|
||||
}
|
||||
|
||||
if (! empty($ret)) {
|
||||
if ($ret) {
|
||||
return Response::json(['status' => 'success', 'message' => '获取地理位置更新成功!']);
|
||||
}
|
||||
|
||||
return Response::json(['status' => 'fail', 'message' => '获取地理位置更新失败!']);
|
||||
return Response::json(['status' => 'fail', 'message' => '【存在】获取地理位置更新失败!']);
|
||||
}
|
||||
|
||||
// 重载节点
|
||||
public function reload(Node $node): JsonResponse
|
||||
public function reload($id): JsonResponse
|
||||
{
|
||||
if (reloadNode::dispatchNow($node)) {
|
||||
$ret = false;
|
||||
if ($id) {
|
||||
$node = Node::findOrFail($id);
|
||||
$ret = reloadNode::dispatchNow($node);
|
||||
} else {
|
||||
foreach (Node::whereStatus(1)->whereType(4)->get() as $node) {
|
||||
$result = reloadNode::dispatchNow($node);
|
||||
if ($result && ! $ret) {
|
||||
$ret = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if ($ret) {
|
||||
return Response::json(['status' => 'success', 'message' => '重载成功!']);
|
||||
}
|
||||
|
||||
return Response::json(['status' => 'fail', 'message' => '重载失败!']);
|
||||
return Response::json(['status' => 'fail', 'message' => '【存在】重载失败!']);
|
||||
}
|
||||
|
||||
// 节点流量监控
|
||||
|
||||
@@ -18,9 +18,16 @@
|
||||
<h3 class="panel-title">节点列表</h3>
|
||||
@canany(['admin.node.geo', 'admin.node.create'])
|
||||
<div class="panel-actions btn-group">
|
||||
@can('admin.node.reload')
|
||||
@if($nodeList->where('type',4)->count())
|
||||
<button type="button" onclick="reload(0)" class="btn btn-info">
|
||||
<i id="reload_0" class="icon wb-reload" aria-hidden="true"></i> 重载【全部】后端
|
||||
</button>
|
||||
@endif
|
||||
@endcan
|
||||
@can('admin.node.geo')
|
||||
<button type="button" onclick="refreshGeo(0)" class="btn btn-info">
|
||||
<i id="geo0" class="icon wb-map" aria-hidden="true"></i> 刷新【全部】节点地理信息
|
||||
<button type="button" onclick="refreshGeo(0)" class="btn btn-outline-default">
|
||||
<i id="geo_0" class="icon wb-map" aria-hidden="true"></i> 刷新【全部】节点地理信息
|
||||
</button>
|
||||
@endcan
|
||||
@can('admin.node.create')
|
||||
@@ -84,16 +91,15 @@
|
||||
@endif
|
||||
@else
|
||||
@if ($node->status)
|
||||
{{-- 节点完全不可见 --}}
|
||||
<i class="red-600 fa-solid fa-cloud-question" aria-hidden="true"></i>
|
||||
<i class="red-600 fa-solid fa-gear" aria-hidden="true"></i>
|
||||
@else
|
||||
{{-- 节点 关闭 --}}
|
||||
<i class="red-600 fa-solid fa-cloud-exclamation" aria-hidden="true"></i>
|
||||
<i class="red-600 fa-solid fa-handshake-simple-slash" aria-hidden="true"></i>
|
||||
@endif
|
||||
@endif
|
||||
</td>
|
||||
<td>
|
||||
@canany(['admin.node.edit', 'admin.node.destroy', 'admin.node.monitor', 'admin.node.geo', 'admin.node.ping', 'admin.node.check', 'admin.node.reload'])
|
||||
@canany(['admin.node.edit', 'admin.node.clone', 'admin.node.destroy', 'admin.node.monitor', 'admin.node.geo', 'admin.node.ping', 'admin.node
|
||||
.check', 'admin.node.reload'])
|
||||
<button type="button" class="btn btn-primary dropdown-toggle" data-boundary="viewport" data-toggle="dropdown" aria-expanded="false">
|
||||
<i class="icon wb-wrench" aria-hidden="true"></i>
|
||||
</button>
|
||||
@@ -126,19 +132,19 @@
|
||||
@endcan
|
||||
@can('admin.node.ping')
|
||||
<a class="dropdown-item" href="javascript:pingNode('{{$node->id}}')" role="menuitem">
|
||||
<i id="ping{{$node->id}}" class="icon wb-order" aria-hidden="true"></i> 检测延迟
|
||||
<i id="ping_{{$node->id}}" class="icon wb-order" aria-hidden="true"></i> 检测延迟
|
||||
</a>
|
||||
@endcan
|
||||
@can('admin.node.check')
|
||||
<a class="dropdown-item" href="javascript:checkNode('{{$node->id}}')" role="menuitem">
|
||||
<i id="node{{$node->id}}" class="icon wb-signal" aria-hidden="true"></i> 连通性检测
|
||||
<i id="node_{{$node->id}}" class="icon wb-signal" aria-hidden="true"></i> 连通性检测
|
||||
</a>
|
||||
@endcan
|
||||
@if($node->type === 4)
|
||||
@can('admin.node.reload')
|
||||
<hr/>
|
||||
<a class="dropdown-item" href="javascript:reload('{{$node->id}}')" role="menuitem">
|
||||
<i id="reload{{$node->id}}" class="icon wb-reload" aria-hidden="true"></i> 重载后端
|
||||
<i id="reload_{{$node->id}}" class="icon wb-reload" aria-hidden="true"></i> 重载后端
|
||||
</a>
|
||||
@endcan
|
||||
@endif
|
||||
@@ -166,8 +172,13 @@
|
||||
<span class="badge badge-lg badge-danger"><i class="fa-solid fa-store-slash" aria-hidden="true"></i></span>
|
||||
@endif
|
||||
</td>
|
||||
<td colspan="5">
|
||||
@canany(['admin.node.edit', 'admin.node.destroy', 'admin.node.monitor', 'admin.node.geo', 'admin.node.ping', 'admin.node.check', 'admin.node.reload'])
|
||||
<td colspan="2">
|
||||
@if (!$childNode->status || !$node->status)
|
||||
<i class="red-600 fa-solid fa-handshake-simple-slash" aria-hidden="true"></i>
|
||||
@endif
|
||||
</td>
|
||||
<td colspan="3">
|
||||
@canany(['admin.node.edit', 'admin.node.clone', 'admin.node.destroy', 'admin.node.monitor', 'admin.node.geo', 'admin.node.ping', 'admin.node.check'])
|
||||
<button type="button" class="btn btn-primary dropdown-toggle" data-boundary="viewport" data-toggle="dropdown" aria-expanded="false">
|
||||
<i class="icon wb-wrench" aria-hidden="true"></i>
|
||||
</button>
|
||||
@@ -196,27 +207,19 @@
|
||||
<hr/>
|
||||
@can('admin.node.geo')
|
||||
<a class="dropdown-item" href="javascript:refreshGeo('{{$childNode->id}}')" role="menuitem">
|
||||
<i id="geo{{$childNode->id}}" class="icon wb-map" aria-hidden="true"></i> 刷新地理
|
||||
<i id="geo_{{$childNode->id}}" class="icon wb-map" aria-hidden="true"></i> 刷新地理
|
||||
</a>
|
||||
@endcan
|
||||
@can('admin.node.ping')
|
||||
<a class="dropdown-item" href="javascript:pingNode('{{$childNode->id}}')" role="menuitem">
|
||||
<i id="ping{{$childNode->id}}" class="icon wb-order" aria-hidden="true"></i> 检测延迟
|
||||
<i id="ping_{{$childNode->id}}" class="icon wb-order" aria-hidden="true"></i> 检测延迟
|
||||
</a>
|
||||
@endcan
|
||||
@can('admin.node.check')
|
||||
<a class="dropdown-item" href="javascript:checkNode('{{$childNode->id}}')" role="menuitem">
|
||||
<i id="node{{$childNode->id}}" class="icon wb-signal" aria-hidden="true"></i> 连通性检测
|
||||
<i id="node_{{$childNode->id}}" class="icon wb-signal" aria-hidden="true"></i> 连通性检测
|
||||
</a>
|
||||
@endcan
|
||||
@if($childNode->type === 4)
|
||||
@can('admin.node.reload')
|
||||
<hr/>
|
||||
<a class="dropdown-item" href="javascript:reload('{{$childNode->id}}')" role="menuitem">
|
||||
<i id="reload{{$childNode->id}}" class="icon wb-reload" aria-hidden="true"></i> 重载后端
|
||||
</a>
|
||||
@endcan
|
||||
@endif
|
||||
</div>
|
||||
@endcan
|
||||
</td>
|
||||
@@ -254,7 +257,7 @@
|
||||
url: '{{route('admin.node.check', '')}}/' + id,
|
||||
data: {_token: '{{csrf_token()}}'},
|
||||
beforeSend: function() {
|
||||
$('#node' + id).removeClass('wb-signal').addClass('wb-loop icon-spin');
|
||||
$('#node_' + id).removeClass('wb-signal').addClass('wb-loop icon-spin');
|
||||
},
|
||||
success: function(ret) {
|
||||
if (ret.status === 'success') {
|
||||
@@ -273,7 +276,7 @@
|
||||
}
|
||||
},
|
||||
complete: function() {
|
||||
$('#node' + id).removeClass('wb-loop icon-spin').addClass('wb-signal');
|
||||
$('#node_' + id).removeClass('wb-loop icon-spin').addClass('wb-signal');
|
||||
},
|
||||
});
|
||||
}
|
||||
@@ -287,7 +290,7 @@
|
||||
url: '{{route('admin.node.ping', '')}}/' + id,
|
||||
data: {_token: '{{csrf_token()}}'},
|
||||
beforeSend: function() {
|
||||
$('#ping' + id).removeClass('wb-order').addClass('wb-loop icon-spin');
|
||||
$('#ping_' + id).removeClass('wb-order').addClass('wb-loop icon-spin');
|
||||
},
|
||||
success: function(ret) {
|
||||
if (ret.status === 'success') {
|
||||
@@ -301,7 +304,7 @@
|
||||
}
|
||||
},
|
||||
complete: function() {
|
||||
$('#ping' + id).removeClass('wb-loop icon-spin').addClass('wb-order');
|
||||
$('#ping_' + id).removeClass('wb-loop icon-spin').addClass('wb-order');
|
||||
},
|
||||
});
|
||||
}
|
||||
@@ -323,7 +326,7 @@
|
||||
url: '{{route('admin.node.reload', '')}}/' + id,
|
||||
data: {_token: '{{csrf_token()}}'},
|
||||
beforeSend: function() {
|
||||
$('#reload' + id).removeClass('wb-reload').addClass('wb-loop icon-spin');
|
||||
$('#reload_' + id).removeClass('wb-reload').addClass('wb-loop icon-spin');
|
||||
},
|
||||
success: function(ret) {
|
||||
if (ret.status === 'success') {
|
||||
@@ -333,7 +336,7 @@
|
||||
}
|
||||
},
|
||||
complete: function() {
|
||||
$('#reload' + id).removeClass('wb-loop icon-spin').addClass('wb-reload');
|
||||
$('#reload_' + id).removeClass('wb-loop icon-spin').addClass('wb-reload');
|
||||
},
|
||||
});
|
||||
}
|
||||
@@ -349,7 +352,7 @@
|
||||
url: '{{route('admin.node.geo', '')}}/' + id,
|
||||
data: {_token: '{{csrf_token()}}'},
|
||||
beforeSend: function() {
|
||||
$('#geo' + id).removeClass('wb-map').addClass('wb-loop icon-spin');
|
||||
$('#geo_' + id).removeClass('wb-map').addClass('wb-loop icon-spin');
|
||||
},
|
||||
success: function(ret) {
|
||||
if (ret.status === 'success') {
|
||||
@@ -359,7 +362,7 @@
|
||||
}
|
||||
},
|
||||
complete: function() {
|
||||
$('#geo' + id).removeClass('wb-loop icon-spin').addClass('wb-map');
|
||||
$('#geo_' + id).removeClass('wb-loop icon-spin').addClass('wb-map');
|
||||
},
|
||||
});
|
||||
}
|
||||
|
||||
@@ -44,7 +44,7 @@ Route::prefix('admin')->name('admin.')->group(function () {
|
||||
Route::post('check/{node}', 'NodeController@checkNode')->name('check'); // 节点阻断检测
|
||||
Route::post('ping/{node}', 'NodeController@pingNode')->name('ping'); // 节点ping测速
|
||||
Route::get('refreshGeo/{id}', 'NodeController@refreshGeo')->name('geo'); // 更新节点
|
||||
Route::post('reload/{node}', 'NodeController@reload')->name('reload'); // 更新节点
|
||||
Route::post('reload/{id}', 'NodeController@reload')->name('reload'); // 更新节点
|
||||
|
||||
Route::resource('auth', 'NodeAuthController')->except(['create', 'show', 'edit']); // 节点授权相关
|
||||
Route::resource('cert', 'CertController')->except('show'); // 节点域名tls相关
|
||||
|
||||
Reference in New Issue
Block a user