edit.tpl 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236
  1. {include file='admin/header.tpl'}
  2. <script src="//cdn.jsdelivr.net/npm/jsoneditor@latest/dist/jsoneditor.min.js"></script>
  3. <link href="//cdn.jsdelivr.net/npm/jsoneditor@latest/dist/jsoneditor.min.css" rel="stylesheet" type="text/css">
  4. <div class="page-wrapper">
  5. <div class="container-xl">
  6. <div class="page-header d-print-none text-white">
  7. <div class="row align-items-center">
  8. <div class="col">
  9. <h2 class="page-title">
  10. <span class="home-title">节点 #{$node->id}</span>
  11. </h2>
  12. <div class="page-pretitle my-3">
  13. <span class="home-subtitle">编辑节点信息</span>
  14. </div>
  15. </div>
  16. <div class="col-auto ms-auto d-print-none">
  17. <div class="btn-list">
  18. <a id="save-node" href="#" class="btn btn-primary">
  19. <i class="icon ti ti-device-floppy"></i>
  20. 保存
  21. </a>
  22. </div>
  23. </div>
  24. </div>
  25. </div>
  26. </div>
  27. <div class="page-body">
  28. <div class="container-xl">
  29. <div class="row row-deck row-cards">
  30. <div class="col-md-6 col-sm-12">
  31. <div class="card">
  32. <div class="card-header card-header-light">
  33. <h3 class="card-title">基础信息</h3>
  34. </div>
  35. <div class="card-body">
  36. <div class="form-group mb-3 row">
  37. <label class="form-label col-3 col-form-label">名称</label>
  38. <div class="col">
  39. <input id="name" type="text" class="form-control" value="{$node->name}">
  40. </div>
  41. </div>
  42. <div class="form-group mb-3 row">
  43. <label class="form-label col-3 col-form-label">连接地址</label>
  44. <div class="col">
  45. <input id="server" type="text" class="form-control" value="{$node->server}">
  46. </div>
  47. </div>
  48. <div class="form-group mb-3 row">
  49. <label class="form-label col-3 col-form-label">服务器IP</label>
  50. <div class="col">
  51. <input id="node_ip" type="text" class="form-control" value="{$node->node_ip}">
  52. </div>
  53. </div>
  54. <div class="form-group mb-3 row">
  55. <label class="form-label col-3 col-form-label">流量倍率</label>
  56. <div class="col">
  57. <input id="traffic_rate" type="text" class="form-control"
  58. value="{$node->traffic_rate}">
  59. </div>
  60. </div>
  61. <div class="form-group mb-3 row">
  62. <label class="form-label col-3 col-form-label">接入类型</label>
  63. <div class="col">
  64. <select id="sort" class="col form-select" value="{$node->sort}">
  65. <option value="14" {if $node->sort === 14}selected{/if}>Trojan</option>
  66. <option value="11" {if $node->sort === 11}selected{/if}>V2Ray</option>
  67. <option value="0" {if $node->sort === 0}selected{/if}>Shadowsocks</option>
  68. </select>
  69. </div>
  70. </div>
  71. <div class="form-group mb-3 row">
  72. <label class="form-label col-3 col-form-label">自定义配置</label>
  73. <div id="custom_config"></div>
  74. <label class="form-label col-form-label">
  75. 请参考 <a href="//wiki.sspanel.org/#/custom-config" target="_blank">wiki.sspanel.org/#/custom-config</a> 修改节点自定义配置
  76. </label>
  77. </div>
  78. <div class="mb-3">
  79. <div class="divide-y">
  80. <div>
  81. <label class="row">
  82. <span class="col">显示此节点</span>
  83. <span class="col-auto">
  84. <label class="form-check form-check-single form-switch">
  85. <input id="type" class="form-check-input" type="checkbox"
  86. {if $node->type === 1}checked="" {/if}>
  87. </label>
  88. </span>
  89. </label>
  90. </div>
  91. </div>
  92. </div>
  93. </div>
  94. </div>
  95. </div>
  96. <div class="col-md-6 col-sm-12">
  97. <div class="card">
  98. <div class="card-header card-header-light">
  99. <h3 class="card-title">其他信息</h3>
  100. </div>
  101. <div class="card-body">
  102. <div class="form-group mb-3 row">
  103. <label class="form-label col-3 col-form-label">备注</label>
  104. <div class="col">
  105. <input id="info" type="text" class="form-control" value="{$node->info}">
  106. </div>
  107. </div>
  108. <div class="form-group mb-3 row">
  109. <label class="form-label col-3 col-form-label">等级</label>
  110. <div class="col">
  111. <input id="node_class" type="text" class="form-control" value="{$node->node_class}">
  112. </div>
  113. </div>
  114. <div class="form-group mb-3 row">
  115. <label class="form-label col-3 col-form-label">组别</label>
  116. <div class="col">
  117. <input id="node_group" type="text" class="form-control" value="{$node->node_group}">
  118. </div>
  119. </div>
  120. <div class="hr-text">
  121. <span>流量设置</span>
  122. </div>
  123. <div class="form-group mb-3 row">
  124. <label class="form-label col-3 col-form-label">已用流量 (GB)</label>
  125. <div class="col">
  126. <input id="node_bandwidth" type="text" class="form-control"
  127. value="{round($node->node_bandwidth / 1073741824, 2)}" disabled="">
  128. </div>
  129. </div>
  130. <div class="form-group mb-3 row">
  131. <label class="form-label col-3 col-form-label">可用流量 (GB)</label>
  132. <div class="col">
  133. <input id="node_bandwidth_limit" type="text" class="form-control"
  134. value="{round($node->node_bandwidth_limit / 1073741824, 2)}">
  135. </div>
  136. </div>
  137. <div class="form-group mb-3 row">
  138. <label class="form-label col-3 col-form-label">流量重置日</label>
  139. <div class="col">
  140. <input id="bandwidthlimit_resetday" type="text" class="form-control"
  141. value="{$node->bandwidthlimit_resetday}">
  142. </div>
  143. </div>
  144. <div class="form-group mb-3 row">
  145. <label class="form-label col-3 col-form-label">速率限制 (Mbps)</label>
  146. <div class="col">
  147. <input id="node_speedlimit" type="text" class="form-control"
  148. value="{$node->node_speedlimit}">
  149. </div>
  150. </div>
  151. <div class="hr-text">
  152. <span>高级选项</span>
  153. </div>
  154. <div class="form-group mb-3 row">
  155. <label class="form-label col-3 col-form-label">节点通讯密钥</label>
  156. <input type="text" class="form-control" id="password" value="{$node->password}" disabled="">
  157. <div class="row my-3">
  158. <div class="col">
  159. <button id="reset-node-password" class="btn btn-red">重置</button>
  160. <button id="copy-password" class="copy btn btn-primary" data-clipboard-text="{$node->password}">
  161. 复制
  162. </button>
  163. </div>
  164. </div>
  165. <label class="form-label col-form-label">
  166. 通讯密钥用于 WebAPI 节点模式鉴权,如需更改请点击重置
  167. </label>
  168. </div>
  169. </div>
  170. </div>
  171. </div>
  172. </div>
  173. </div>
  174. </div>
  175. </div>
  176. <script>
  177. var clipboard = new ClipboardJS('.copy');
  178. clipboard.on('success', function(e) {
  179. $('#success-noreload-message').text('已复制到剪切板');
  180. $('#success-noreload-dialog').modal('show');
  181. });
  182. const container = document.getElementById('custom_config');
  183. var options = {
  184. modes: ['code', 'tree'],
  185. };
  186. const editor = new JSONEditor(container, options);
  187. editor.set({$node->custom_config})
  188. $("#reset-node-password").click(function() {
  189. $.ajax({
  190. url: '/admin/node/{$node->id}/password_reset',
  191. type: 'POST',
  192. dataType: "json",
  193. success: function(data) {
  194. if (data.ret === 1) {
  195. $('#success-message').text(data.msg);
  196. $('#success-dialog').modal('show');
  197. } else {
  198. $('#fail-message').text(data.msg);
  199. $('#fail-dialog').modal('show');
  200. }
  201. }
  202. })
  203. });
  204. $("#save-node").click(function() {
  205. $.ajax({
  206. url: '/admin/node/{$node->id}',
  207. type: 'PUT',
  208. dataType: "json",
  209. data: {
  210. {foreach $update_field as $key}
  211. {$key}: $('#{$key}').val(),
  212. {/foreach}
  213. type: $("#type").is(":checked"),
  214. custom_config: JSON.stringify(editor.get()),
  215. },
  216. success: function(data) {
  217. if (data.ret === 1) {
  218. $('#success-message').text(data.msg);
  219. $('#success-dialog').modal('show');
  220. window.setTimeout("location.href=top.document.referrer", {$config['jump_delay']});
  221. } else {
  222. $('#fail-message').text(data.msg);
  223. $('#fail-dialog').modal('show');
  224. }
  225. }
  226. })
  227. });
  228. </script>
  229. {include file='admin/footer.tpl'}