nodeList.blade.php 8.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159
  1. @extends('admin.layouts')
  2. @section('css')
  3. <link href="/assets/global/plugins/datatables/datatables.min.css" rel="stylesheet" type="text/css" />
  4. <link href="/assets/global/plugins/datatables/plugins/bootstrap/datatables.bootstrap.css" rel="stylesheet" type="text/css" />
  5. @endsection
  6. @section('title', '控制面板')
  7. @section('content')
  8. <!-- BEGIN CONTENT BODY -->
  9. <div class="page-content" style="padding-top:0;">
  10. <!-- BEGIN PAGE BASE CONTENT -->
  11. <div class="row">
  12. <div class="col-md-12">
  13. <div class="note note-info">
  14. <p>如果负载显示宕机,可能是节点服务器宕机或者节点上的SSR(R)服务挂掉了,请重启节点服务器或者SSR(R)服务。</p>
  15. <p>宕机是因为节点服务器IDC母鸡超售过载导致,SSR(R)挂掉是因为节点服务器配置太渣。<a href="https://github.com/ssrpanel/ssrpanel/wiki/VPS%E6%8E%A8%E8%8D%90&%E8%B4%AD%E4%B9%B0%E7%BB%8F%E9%AA%8C" target="_blank" style="color:red;">[VPS推荐]</a></p>
  16. <p>如果还是无法解决,请检查各节点服务器的时间是否同步。<a href="https://github.com/ssrpanel/SSRPanel/wiki/%E5%8D%95%E7%AB%AF%E5%8F%A3%E5%A4%9A%E7%94%A8%E6%88%B7%E7%9A%84%E5%9D%91" target="_blank" style="color:red;">[时间校准]</a></p>
  17. </div>
  18. </div>
  19. </div>
  20. <div class="row">
  21. <div class="col-md-12">
  22. <!-- BEGIN EXAMPLE TABLE PORTLET-->
  23. <div class="portlet light bordered">
  24. <div class="portlet-title">
  25. <div class="caption font-dark">
  26. <i class="icon-list font-dark"></i>
  27. <span class="caption-subject bold uppercase"> 节点列表 </span>
  28. </div>
  29. <div class="actions">
  30. <div class="btn-group">
  31. <button class="btn sbold blue" onclick="addNode()"> 新增
  32. <i class="fa fa-plus"></i>
  33. </button>
  34. </div>
  35. </div>
  36. </div>
  37. <div class="portlet-body">
  38. <div class="table-scrollable">
  39. <table class="table table-striped table-bordered table-hover table-checkable order-column">
  40. <thead>
  41. <tr>
  42. <th> <span class="node-id"><a href="javascript:showIdTips();">ID</a></span> </th>
  43. <th> 节点名称 </th>
  44. <th> 负载 </th>
  45. <th> 在线 </th>
  46. <th> 产生流量/可用流量 </th>
  47. <th> 流量比例 </th>
  48. <th> 扩展 </th>
  49. <th> 协议 </th>
  50. <th> 混淆 </th>
  51. <th> 操作 </th>
  52. </tr>
  53. </thead>
  54. <tbody>
  55. @if($nodeList->isEmpty())
  56. <tr>
  57. <td colspan="10">暂无数据</td>
  58. </tr>
  59. @else
  60. @foreach($nodeList as $node)
  61. <tr class="odd gradeX">
  62. <td> {{$node->id}} </td>
  63. <td>
  64. @if(!$node->status)
  65. <span class="label label-warning" title="维护中">{{$node->name}}</span>
  66. @else
  67. {{$node->name}}
  68. @endif
  69. </td>
  70. <td> <span class="label label-danger">{{$node->load}}</span> </td>
  71. <td> <span class="label label-danger">{{$node->online_users}}</span> </td>
  72. <td> {{$node->transfer}} / {{$node->traffic}}G </td>
  73. <td> <span class="label label-danger">{{$node->traffic_rate}}</span> </td>
  74. <td>
  75. @if($node->compatible) <span class="label label-info">兼</span> @endif
  76. @if($node->single) <span class="label label-danger">单</span> @endif
  77. </td>
  78. <td> <span class="label label-info"> {{$node->protocol}} </span> </td>
  79. <td> <span class="label label-info"> {{$node->obfs}} </span> </td>
  80. <td>
  81. <button type="button" class="btn btn-sm blue btn-outline" onclick="editNode('{{$node->id}}')">
  82. <i class="fa fa-pencil"></i>
  83. </button>
  84. <button type="button" class="btn btn-sm purple btn-outline" onclick="nodeMonitor('{{$node->id}}')">
  85. <i class="fa fa-area-chart"></i>
  86. </button>
  87. <button type="button" class="btn btn-sm red btn-outline" onclick="delNode('{{$node->id}}')">
  88. <i class="fa fa-trash"></i>
  89. </button>
  90. </td>
  91. </tr>
  92. @endforeach
  93. @endif
  94. </tbody>
  95. </table>
  96. </div>
  97. <div class="row">
  98. <div class="col-md-4 col-sm-4">
  99. <div class="dataTables_info" role="status" aria-live="polite">共 {{$nodeList->total()}} 个节点</div>
  100. </div>
  101. <div class="col-md-8 col-sm-8">
  102. <div class="dataTables_paginate paging_bootstrap_full_number pull-right">
  103. {{ $nodeList->links() }}
  104. </div>
  105. </div>
  106. </div>
  107. </div>
  108. </div>
  109. <!-- END EXAMPLE TABLE PORTLET-->
  110. </div>
  111. </div>
  112. <!-- END PAGE BASE CONTENT -->
  113. </div>
  114. <!-- END CONTENT BODY -->
  115. @endsection
  116. @section('script')
  117. <script src="/js/layer/layer.js" type="text/javascript"></script>
  118. <script type="text/javascript">
  119. // 添加节点
  120. function addNode() {
  121. window.location.href = '{{url('admin/addNode')}}';
  122. }
  123. // 编辑节点
  124. function editNode(id) {
  125. window.location.href = '{{url('admin/editNode?id=')}}' + id + '&page=' + '{{Request::get('page', 1)}}';
  126. }
  127. // 删除节点
  128. function delNode(id) {
  129. layer.confirm('确定删除节点?', {icon: 2, title:'警告'}, function(index) {
  130. $.post("{{url('admin/delNode')}}", {id:id, _token:'{{csrf_token()}}'}, function(ret) {
  131. layer.msg(ret.message, {time:1000}, function() {
  132. if (ret.status == 'success') {
  133. window.location.reload();
  134. }
  135. });
  136. });
  137. layer.close(index);
  138. });
  139. }
  140. // 节点流量监控
  141. function nodeMonitor(id) {
  142. window.location.href = '{{url('admin/nodeMonitor?id=')}}' + id + '&page=' + '{{Request::get('page', 1)}}';
  143. }
  144. // 显示提示
  145. function showIdTips() {
  146. layer.tips('对应SSR后端usermysql.json中的nodeid', '.node-id', {
  147. tips: [3, '#3595CC'],
  148. time: 1200
  149. });
  150. }
  151. </script>
  152. @endsection