addUser.blade.php 30 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458
  1. @extends('admin.layouts')
  2. @section('css')
  3. <link href="/assets/global/plugins/select2/css/select2.min.css" rel="stylesheet" type="text/css" />
  4. <link href="/assets/global/plugins/select2/css/select2-bootstrap.min.css" rel="stylesheet" type="text/css" />
  5. @endsection
  6. @section('content')
  7. <!-- BEGIN CONTENT BODY -->
  8. <div class="page-content" style="padding-top:0;">
  9. <!-- BEGIN PAGE BASE CONTENT -->
  10. <div class="tab-pane">
  11. <div class="portlet light bordered">
  12. <div class="portlet-body form">
  13. <!-- BEGIN FORM-->
  14. <form action="{{url('admin/addUser')}}" method="post" class="form-horizontal" onsubmit="return do_submit();">
  15. <div class="form-body">
  16. <div class="row">
  17. <div class="col-md-6">
  18. <div class="portlet light bordered">
  19. <div class="portlet-title">
  20. <div class="caption">
  21. <span class="caption-subject font-dark bold uppercase">账号信息</span>
  22. </div>
  23. </div>
  24. <div class="portlet-body">
  25. <div class="form-group">
  26. <label for="username" class="col-md-3 control-label">用户名</label>
  27. <div class="col-md-8">
  28. <input type="text" class="form-control" name="username" id="username" placeholder="" autocomplete="off" autofocus required />
  29. </div>
  30. </div>
  31. <div class="form-group">
  32. <label for="password" class="col-md-3 control-label">密码</label>
  33. <div class="col-md-8">
  34. <input type="text" class="form-control" name="password" value="" id="password" placeholder="留空则自动生成随机密码" autocomplete="off" />
  35. </div>
  36. </div>
  37. <div class="form-group">
  38. <label class="col-md-3 control-label">用途</label>
  39. <div class="col-md-8">
  40. <div class="mt-checkbox-inline">
  41. <label class="mt-checkbox">
  42. <input type="checkbox" name="usage" value="1" checked /> 手机
  43. <span></span>
  44. </label>
  45. <label class="mt-checkbox">
  46. <input type="checkbox" name="usage" value="2" /> 电脑
  47. <span></span>
  48. </label>
  49. <label class="mt-checkbox">
  50. <input type="checkbox" name="usage" value="3" /> 路由器
  51. <span></span>
  52. </label>
  53. <label class="mt-checkbox">
  54. <input type="checkbox" name="usage" value="4" /> 平板
  55. <span></span>
  56. </label>
  57. </div>
  58. </div>
  59. </div>
  60. <div class="form-group">
  61. <label for="pay_way" class="col-md-3 control-label">付费方式</label>
  62. <div class="col-md-8">
  63. <div class="mt-radio-inline">
  64. <label class="mt-radio">
  65. <input type="radio" name="pay_way" value="0" /> 免费
  66. <span></span>
  67. </label>
  68. <label class="mt-radio">
  69. <input type="radio" name="pay_way" value="1" /> 月付
  70. <span></span>
  71. </label>
  72. <label class="mt-radio">
  73. <input type="radio" name="pay_way" value="2" /> 季付
  74. <span></span>
  75. </label>
  76. <label class="mt-radio">
  77. <input type="radio" name="pay_way" value="3" checked /> 半年付
  78. <span></span>
  79. </label>
  80. <label class="mt-radio">
  81. <input type="radio" name="pay_way" value="4" /> 年付
  82. <span></span>
  83. </label>
  84. </div>
  85. </div>
  86. </div>
  87. <div class="form-group">
  88. <label for="balance" class="col-md-3 control-label">级别</label>
  89. <div class="col-md-8">
  90. <select class="form-control" name="level" id="level">
  91. @if(!$level_list->isEmpty())
  92. @foreach($level_list as $ele)
  93. <option value="{{$ele->level}}">{{$ele->level_name}}</option>
  94. @endforeach
  95. @endif
  96. </select>
  97. </div>
  98. </div>
  99. <div class="form-group">
  100. <label class="col-md-3 control-label">有效期</label>
  101. <div class="col-md-8">
  102. <div class="input-group input-large input-daterange">
  103. <input type="text" class="form-control" name="enable_time" id="enable_time" autocomplete="off" />
  104. <span class="input-group-addon"> 至 </span>
  105. <input type="text" class="form-control" name="expire_time" id="expire_time" autocomplete="off" />
  106. </div>
  107. <span class="help-block"> 留空默认为一年 </span>
  108. </div>
  109. </div>
  110. <div class="form-group">
  111. <label for="status" class="col-md-3 control-label">账户状态</label>
  112. <div class="col-md-8">
  113. <div class="mt-radio-inline">
  114. <label class="mt-radio">
  115. <input type="radio" name="status" value="1" checked /> 正常
  116. <span></span>
  117. </label>
  118. <label class="mt-radio">
  119. <input type="radio" name="status" value="0" /> 未激活
  120. <span></span>
  121. </label>
  122. <label class="mt-radio">
  123. <input type="radio" name="status" value="-1" /> 禁用
  124. <span></span>
  125. </label>
  126. </div>
  127. </div>
  128. </div>
  129. <hr>
  130. <div class="form-group">
  131. <label for="labels" class="col-md-3 control-label">标签</label>
  132. <div class="col-md-8">
  133. <select id="labels" class="form-control select2-multiple" name="labels[]" multiple>
  134. @foreach($label_list as $label)
  135. <option value="{{$label->id}}" {{in_array($label->id, $initial_labels) ? 'selected' : ''}}>{{$label->name}}</option>
  136. @endforeach
  137. </select>
  138. </div>
  139. </div>
  140. <hr>
  141. <div class="form-group">
  142. <label for="gender" class="col-md-3 control-label">性别</label>
  143. <div class="col-md-8">
  144. <div class="mt-radio-inline">
  145. <label class="mt-radio">
  146. <input type="radio" name="gender" value="1" checked> 男
  147. <span></span>
  148. </label>
  149. <label class="mt-radio">
  150. <input type="radio" name="gender" value="0"> 女
  151. <span></span>
  152. </label>
  153. </div>
  154. </div>
  155. </div>
  156. <div class="form-group">
  157. <label for="wechat" class="col-md-3 control-label">微信</label>
  158. <div class="col-md-8">
  159. <input type="text" class="form-control" name="wechat" id="wechat" autocomplete="off" />
  160. </div>
  161. </div>
  162. <div class="form-group">
  163. <label for="qq" class="col-md-3 control-label">QQ</label>
  164. <div class="col-md-8">
  165. <input type="text" class="form-control" name="qq" id="qq" autocomplete="off" />
  166. </div>
  167. </div>
  168. <div class="form-group">
  169. <label for="remark" class="col-md-3 control-label">备注</label>
  170. <div class="col-md-8">
  171. <textarea class="form-control" rows="3" name="remark" id="remark"></textarea>
  172. </div>
  173. </div>
  174. </div>
  175. </div>
  176. </div>
  177. <div class="col-md-6">
  178. <div class="portlet light bordered">
  179. <div class="portlet-title">
  180. <div class="caption">
  181. <span class="caption-subject font-dark bold">代理信息</span>
  182. </div>
  183. </div>
  184. <div class="portlet-body">
  185. <div class="form-group">
  186. <label for="port" class="col-md-3 control-label">端口</label>
  187. <div class="col-md-8">
  188. @if(\App\Components\Helpers::systemConfig()['is_rand_port'])
  189. <div class="input-group">
  190. <input class="form-control" type="text" name="port" value="{{$last_port}}" id="port" autocomplete="off" />
  191. <span class="input-group-btn">
  192. <button class="btn btn-success" type="button" onclick="makePort()"> 生成 </button>
  193. </span>
  194. </div>
  195. @else
  196. <input type="text" class="form-control" name="port" value="{{$last_port}}" id="port" autocomplete="off" aria-required="true" aria-invalid="true" aria-describedby="number-error" required />
  197. @endif
  198. </div>
  199. </div>
  200. <div class="form-group">
  201. <label for="passwd" class="col-md-3 control-label">密码</label>
  202. <div class="col-md-8">
  203. <div class="input-group">
  204. <input class="form-control" type="text" name="passwd" id="passwd" placeholder="留空则自动生成随机密码" autocomplete="off" />
  205. <span class="input-group-btn">
  206. <button class="btn btn-success" type="button" onclick="makePasswd()"> 生成 </button>
  207. </span>
  208. </div>
  209. </div>
  210. </div>
  211. <div class="form-group">
  212. <label for="method" class="col-md-3 control-label">加密方式</label>
  213. <div class="col-md-8">
  214. <select class="form-control" name="method" id="method">
  215. @foreach ($method_list as $method)
  216. <option value="{{$method->name}}" @if($method->is_default) selected @endif>{{$method->name}}</option>
  217. @endforeach
  218. </select>
  219. </div>
  220. </div>
  221. <div class="form-group">
  222. <label for="transfer_enable" class="col-md-3 control-label">可用流量</label>
  223. <div class="col-md-8">
  224. <div class="input-group">
  225. <input type="text" class="form-control" name="transfer_enable" value="1024" id="transfer_enable" autocomplete="off" required>
  226. <span class="input-group-addon">GB</span>
  227. </div>
  228. </div>
  229. </div>
  230. <div class="form-group">
  231. <label for="enable" class="col-md-3 control-label">代理状态</label>
  232. <div class="col-md-8">
  233. <div class="mt-radio-inline">
  234. <label class="mt-radio">
  235. <input type="radio" name="enable" value="1" checked /> 启用
  236. <span></span>
  237. </label>
  238. <label class="mt-radio">
  239. <input type="radio" name="enable" value="0" /> 禁用
  240. <span></span>
  241. </label>
  242. </div>
  243. </div>
  244. </div>
  245. <hr>
  246. <div class="form-group">
  247. <label for="protocol" class="col-md-3 control-label">协议</label>
  248. <div class="col-md-8">
  249. <select class="form-control" name="protocol" id="protocol">
  250. @foreach ($protocol_list as $protocol)
  251. <option value="{{$protocol->name}}" @if($protocol->is_default) selected @endif>{{$protocol->name}}</option>
  252. @endforeach
  253. </select>
  254. </div>
  255. </div>
  256. <div class="form-group">
  257. <label for="obfs" class="col-md-3 control-label">混淆</label>
  258. <div class="col-md-8">
  259. <select class="form-control" name="obfs" id="obfs">
  260. @foreach ($obfs_list as $obfs)
  261. <option value="{{$obfs->name}}" @if($obfs->is_default) selected @endif>{{$obfs->name}}</option>
  262. @endforeach
  263. </select>
  264. </div>
  265. </div>
  266. <div class="form-group">
  267. <label for="protocol_param" class="col-md-3 control-label">协议参数</label>
  268. <div class="col-md-8">
  269. <input type="text" class="form-control" name="protocol_param" id="protocol_param" placeholder="节点单端口时无效" autocomplete="off" />
  270. </div>
  271. </div>
  272. <div class="form-group">
  273. <label for="obfs_param" class="col-md-3 control-label">混淆参数</label>
  274. <div class="col-md-8">
  275. <textarea class="form-control" rows="3" name="obfs_param" id="obfs_param" placeholder="不填则取节点自定义混淆参数"></textarea>
  276. </div>
  277. </div>
  278. <hr>
  279. <div class="form-group">
  280. <label for="speed_limit_per_con" class="col-md-3 control-label">单连接限速</label>
  281. <div class="col-md-8">
  282. <div class="input-group">
  283. <input type="text" class="form-control" name="speed_limit_per_con" value="10737418240" id="speed_limit_per_con" autocomplete="off" />
  284. <span class="input-group-addon">Byte</span>
  285. </div>
  286. <span class="help-block"> 为 0 时不限速 </span>
  287. </div>
  288. </div>
  289. <div class="form-group">
  290. <label for="speed_limit_per_user" class="col-md-3 control-label">单用户限速</label>
  291. <div class="col-md-8">
  292. <div class="input-group">
  293. <input type="text" class="form-control" name="speed_limit_per_user" value="10737418240" id="speed_limit_per_user" autocomplete="off" />
  294. <span class="input-group-addon">Byte</span>
  295. </div>
  296. <span class="help-block"> 为 0 时不限速 </span>
  297. </div>
  298. </div>
  299. <hr>
  300. <div class="form-group">
  301. <label for="vmess_id" class="col-md-3 control-label">VMess UUID</label>
  302. <div class="col-md-8">
  303. <div class="input-group">
  304. <input class="form-control" type="text" name="vmess_id" value="{{createGuid()}}" id="vmess_id" autocomplete="off" />
  305. <span class="input-group-btn">
  306. <button class="btn btn-success" type="button" onclick="makeVmessId()"> <i class="fa fa-refresh"></i> </button>
  307. </span>
  308. </div>
  309. <span class="help-block"> V2Ray的账户ID </span>
  310. </div>
  311. </div>
  312. </div>
  313. </div>
  314. </div>
  315. </div>
  316. </div>
  317. <div class="form-actions">
  318. <div class="row">
  319. <div class="col-md-12">
  320. <button type="submit" class="btn green">提 交</button>
  321. </div>
  322. </div>
  323. </div>
  324. </form>
  325. <!-- END FORM-->
  326. </div>
  327. </div>
  328. </div>
  329. <!-- END PAGE BASE CONTENT -->
  330. </div>
  331. <!-- END CONTENT BODY -->
  332. @endsection
  333. @section('script')
  334. <script src="/assets/global/plugins/select2/js/select2.full.min.js" type="text/javascript"></script>
  335. <script src="/assets/global/plugins/laydate/laydate.js" type="text/javascript"></script>
  336. <script type="text/javascript">
  337. // 用户标签选择器
  338. $('#labels').select2({
  339. theme: 'bootstrap',
  340. placeholder: '设置后则可见相同标签的节点',
  341. allowClear: true
  342. });
  343. // 有效期-开始
  344. laydate.render({
  345. elem: '#enable_time'
  346. });
  347. // 有效期-结束
  348. laydate.render({
  349. elem: '#expire_time'
  350. });
  351. // ajax同步提交
  352. function do_submit() {
  353. var _token = '{{csrf_token()}}';
  354. var username = $('#username').val();
  355. var password = $('#password').val();
  356. var pay_way = $("input:radio[name='pay_way']:checked").val();
  357. var status = $("input:radio[name='status']:checked").val();
  358. var labels = $('#labels').val();
  359. var enable_time = $('#enable_time').val();
  360. var expire_time = $('#expire_time').val();
  361. var gender = $("input:radio[name='gender']:checked").val();
  362. var wechat = $('#wechat').val();
  363. var qq = $('#qq').val();
  364. var remark = $('#remark').val();
  365. var level = $("#level option:selected").val();
  366. var port = $('#port').val();
  367. var passwd = $('#passwd').val();
  368. var method = $('#method').val();
  369. var transfer_enable = $('#transfer_enable').val();
  370. var enable = $("input:radio[name='enable']:checked").val();
  371. var protocol = $('#protocol').val();
  372. var protocol_param = $('#protocol_param').val();
  373. var obfs = $('#obfs').val();
  374. var obfs_param = $('#obfs_param').val();
  375. var speed_limit_per_con = $('#speed_limit_per_con').val();
  376. var speed_limit_per_user = $('#speed_limit_per_user').val();
  377. var vmess_id = $('#vmess_id').val();
  378. // 用途
  379. var usage = '';
  380. $.each($("input:checkbox[name='usage']"), function(){
  381. if (this.checked) {
  382. usage += $(this).val() + ',';
  383. }
  384. });
  385. usage = usage.substring(0, usage.length - 1);
  386. $.ajax({
  387. type: "POST",
  388. url: "{{url('admin/addUser')}}",
  389. async: false,
  390. data: {
  391. _token:_token,
  392. username: username,
  393. password:password,
  394. usage:usage,
  395. pay_way:pay_way,
  396. status:status,
  397. labels:labels,
  398. enable_time:enable_time,
  399. expire_time:expire_time,
  400. gender:gender,
  401. wechat:wechat,
  402. qq:qq,
  403. remark:remark,
  404. level:level,
  405. port:port,
  406. passwd:passwd,
  407. method:method,
  408. transfer_enable:transfer_enable,
  409. enable:enable,
  410. protocol:protocol,
  411. protocol_param:protocol_param,
  412. obfs:obfs,
  413. obfs_param:obfs_param,
  414. speed_limit_per_con:speed_limit_per_con,
  415. speed_limit_per_user:speed_limit_per_user,
  416. vmess_id:vmess_id
  417. },
  418. dataType: 'json',
  419. success: function (ret) {
  420. layer.msg(ret.message, {time:1000}, function() {
  421. if (ret.status == 'success') {
  422. window.location.href = '{{url('admin/userList')}}';
  423. }
  424. });
  425. }
  426. });
  427. return false;
  428. }
  429. // 生成随机端口
  430. function makePort() {
  431. $.get("{{url('admin/makePort')}}", function(ret) {
  432. $("#port").val(ret);
  433. });
  434. }
  435. // 生成随机VmessId
  436. function makeVmessId() {
  437. $.get("{{url('makeVmessId')}}", function(ret) {
  438. $("#vmess_id").val(ret);
  439. });
  440. }
  441. // 生成随机密码
  442. function makePasswd() {
  443. $.get("{{url('makePasswd')}}", function(ret) {
  444. $("#passwd").val(ret);
  445. });
  446. }
  447. </script>
  448. @endsection