editUser.blade.php 36 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535
  1. @extends('admin.layouts')
  2. @section('css')
  3. <link href="/assets/global/plugins/bootstrap-datepicker/css/bootstrap-datepicker3.min.css" rel="stylesheet" type="text/css" />
  4. <link href="/assets/global/plugins/select2/css/select2.min.css" rel="stylesheet" type="text/css" />
  5. <link href="/assets/global/plugins/select2/css/select2-bootstrap.min.css" rel="stylesheet" type="text/css" />
  6. @endsection
  7. @section('title', '控制面板')
  8. @section('content')
  9. <!-- BEGIN CONTENT BODY -->
  10. <div class="page-content" style="padding-top:0;">
  11. <!-- BEGIN PAGE BASE CONTENT -->
  12. <div class="tab-pane active">
  13. <div class="portlet light bordered">
  14. <div class="portlet-body form">
  15. <!-- BEGIN FORM-->
  16. <form action="{{url('admin/editUser')}}" method="post" class="form-horizontal" onsubmit="return do_submit();">
  17. <div class="form-body">
  18. <div class="row">
  19. <div class="col-md-6">
  20. <!-- BEGIN SAMPLE FORM PORTLET-->
  21. <div class="portlet light bordered">
  22. <div class="portlet-title" style="width:100%">
  23. <div class="caption" style="width:100%">
  24. <div class="row">
  25. <span class="caption-subject font-dark bold uppercase col-md-4">账号信息</span>
  26. <div class="text-right col-md-8" style="">
  27. <button type="button" class="btn btn-sm btn-danger btn-outline" onclick="switchToUser()">切换身份</button>
  28. </div>
  29. </div>
  30. </div>
  31. </div>
  32. <div class="portlet-body">
  33. <div class="form-group">
  34. <label for="username" class="col-md-3 control-label">用户名</label>
  35. <div class="col-md-8">
  36. <input type="text" class="form-control" name="username" value="{{$user->username}}" id="username" placeholder="不填则不变" autofocus required>
  37. <input type="hidden" name="id" value="{{$user->id}}">
  38. <input type="hidden" name="_token" value="{{csrf_token()}}">
  39. </div>
  40. </div>
  41. <div class="form-group">
  42. <label for="password" class="col-md-3 control-label">密码</label>
  43. <div class="col-md-8">
  44. <input type="text" class="form-control" name="password" value="" id="password" placeholder="不填则不变">
  45. </div>
  46. </div>
  47. <div class="form-group">
  48. <label class="col-md-3 control-label">用途</label>
  49. <div class="col-md-8">
  50. <div class="mt-checkbox-inline">
  51. <label class="mt-checkbox">
  52. <input type="checkbox" name="usage" value="1" {{in_array(1, $user->usage) ? 'checked' : ''}}> 手机
  53. <span></span>
  54. </label>
  55. <label class="mt-checkbox">
  56. <input type="checkbox" name="usage" value="2" {{in_array(2, $user->usage) ? 'checked' : ''}}> 电脑
  57. <span></span>
  58. </label>
  59. <label class="mt-checkbox">
  60. <input type="checkbox" name="usage" value="3" {{in_array(3, $user->usage) ? 'checked' : ''}}> 路由器
  61. <span></span>
  62. </label>
  63. <label class="mt-checkbox">
  64. <input type="checkbox" name="usage" value="4" {{in_array(4, $user->usage) ? 'checked' : ''}}> 平板
  65. <span></span>
  66. </label>
  67. </div>
  68. </div>
  69. </div>
  70. <div class="form-group">
  71. <label for="pay_way" class="col-md-3 control-label">付费方式</label>
  72. <div class="col-md-8">
  73. <div class="mt-radio-inline">
  74. <label class="mt-radio">
  75. <input type="radio" name="pay_way" value="0" {{$user->pay_way == 0 ? 'checked' : ''}}> 免费
  76. <span></span>
  77. </label>
  78. <label class="mt-radio">
  79. <input type="radio" name="pay_way" value="1" {{$user->pay_way == 1 ? 'checked' : ''}}> 月付
  80. <span></span>
  81. </label>
  82. <label class="mt-radio">
  83. <input type="radio" name="pay_way" value="2" {{$user->pay_way == 2 ? 'checked' : ''}}> 季付
  84. <span></span>
  85. </label>
  86. <label class="mt-radio">
  87. <input type="radio" name="pay_way" value="3" {{$user->pay_way == 3 ? 'checked' : ''}}> 半年付
  88. <span></span>
  89. </label>
  90. <label class="mt-radio">
  91. <input type="radio" name="pay_way" value="4" {{$user->pay_way == 4 ? 'checked' : ''}}> 年付
  92. <span></span>
  93. </label>
  94. </div>
  95. </div>
  96. </div>
  97. <div class="form-group">
  98. <label for="level" class="col-md-3 control-label">级别</label>
  99. <div class="col-md-8">
  100. <select class="form-control" name="level" id="level">
  101. @if(!$level_list->isEmpty())
  102. @foreach($level_list as $level)
  103. <option value="{{$level->level}}" {{$user->level == $level->level ? 'selected' : ''}}>{{$level->level_name}}</option>
  104. @endforeach
  105. @endif
  106. </select>
  107. </div>
  108. </div>
  109. <div class="form-group">
  110. <label for="balance" class="col-md-3 control-label">余额</label>
  111. <div class="col-md-5">
  112. <p class="form-control-static"> {{$user->balance}} </p>
  113. </div>
  114. <div class="col-md-3">
  115. <div style="float:right;">
  116. <button type="button" class="btn btn-sm btn-danger" data-toggle="modal" data-target="#handle_user_balance">充值</button>
  117. </div>
  118. </div>
  119. </div>
  120. <!--
  121. <div class="form-group">
  122. <label for="score" class="col-md-3 control-label">积分</label>
  123. <div class="col-md-5">
  124. <p class="form-control-static"> {{$user->score}} </p>
  125. </div>
  126. <div class="col-md-3">
  127. <div style="float:right;">
  128. <button type="button" class="btn btn-sm btn-danger">操作</button>
  129. </div>
  130. </div>
  131. </div>
  132. -->
  133. <div class="form-group">
  134. <label class="col-md-3 control-label">有效期</label>
  135. <div class="col-md-8">
  136. <div class="input-group input-large input-daterange">
  137. <input type="text" class="form-control" name="enable_time" value="{{$user->enable_time}}" id="enable_time">
  138. <span class="input-group-addon"> 至 </span>
  139. <input type="text" class="form-control" name="expire_time" value="{{$user->expire_time}}" id="expire_time">
  140. </div>
  141. <span class="help-block"> 留空默认为一年 </span>
  142. </div>
  143. </div>
  144. <div class="form-group">
  145. <label for="status" class="col-md-3 control-label">状态</label>
  146. <div class="col-md-8">
  147. <select class="form-control" name="status" id="status">
  148. <option value="1" @if($user->status == '1') selected @endif>正常</option>
  149. <option value="0" @if($user->status == '0') selected @endif>未激活</option>
  150. <option value="-1" @if($user->status == '-1') selected @endif>禁用</option>
  151. </select>
  152. </div>
  153. </div>
  154. <hr>
  155. <div class="form-group">
  156. <label for="labels" class="col-md-3 control-label">标签</label>
  157. <div class="col-md-8">
  158. <select id="labels" class="form-control select2-multiple" name="labels[]" multiple>
  159. @foreach($label_list as $label)
  160. <option value="{{$label->id}}" @if(in_array($label->id, $user->labels)) selected @endif>{{$label->name}}</option>
  161. @endforeach
  162. </select>
  163. </div>
  164. </div>
  165. <hr>
  166. <div class="form-group">
  167. <label for="gender" class="col-md-3 control-label">性别</label>
  168. <div class="col-md-8">
  169. <div class="mt-radio-inline">
  170. <label class="mt-radio">
  171. <input type="radio" name="gender" value="1" {{$user->gender == '1' ? 'checked' : ''}}> 男
  172. <span></span>
  173. </label>
  174. <label class="mt-radio">
  175. <input type="radio" name="gender" value="0" {{$user->gender == '0' ? 'checked' : ''}}> 女
  176. <span></span>
  177. </label>
  178. </div>
  179. </div>
  180. </div>
  181. <div class="form-group">
  182. <label for="wechat" class="col-md-3 control-label">微信</label>
  183. <div class="col-md-8">
  184. <input type="text" class="form-control" name="wechat" value="{{$user->wechat}}" id="wechat" placeholder="">
  185. </div>
  186. </div>
  187. <div class="form-group">
  188. <label for="qq" class="col-md-3 control-label">QQ</label>
  189. <div class="col-md-8">
  190. <input type="text" class="form-control" name="qq" value="{{$user->qq}}" id="qq" placeholder="">
  191. </div>
  192. </div>
  193. <div class="form-group">
  194. <label for="is_admin" class="col-md-3 control-label">管理员</label>
  195. <div class="col-md-8">
  196. <select class="form-control" name="is_admin" id="is_admin">
  197. <option value="0" {{$user->is_admin == 0 ? 'selected' : ''}}>否</option>
  198. <option value="1" {{$user->is_admin == 1 ? 'selected' : ''}}>是</option>
  199. </select>
  200. </div>
  201. </div>
  202. <div class="form-group">
  203. <label for="remark" class="col-md-3 control-label">备注</label>
  204. <div class="col-md-8">
  205. <textarea class="form-control" rows="3" name="remark" id="remark">{{$user->remark}}</textarea>
  206. </div>
  207. </div>
  208. </div>
  209. </div>
  210. <!-- END SAMPLE FORM PORTLET-->
  211. </div>
  212. <div class="col-md-6">
  213. <!-- BEGIN SAMPLE FORM PORTLET-->
  214. <div class="portlet light bordered">
  215. <div class="portlet-title">
  216. <div class="caption">
  217. <span class="caption-subject font-dark bold">代理信息</span>
  218. </div>
  219. </div>
  220. <div class="portlet-body">
  221. <div class="form-group">
  222. <label for="port" class="col-md-3 control-label">端口</label>
  223. <div class="col-md-8">
  224. <div class="input-group">
  225. <input class="form-control" type="text" name="port" value="{{$user->port}}" id="port" />
  226. <span class="input-group-btn">
  227. <button class="btn btn-success" type="button" onclick="makePort()"> <i class="fa fa-refresh"></i> </button>
  228. </span>
  229. </div>
  230. </div>
  231. </div>
  232. <div class="form-group">
  233. <label for="passwd" class="col-md-3 control-label">密码</label>
  234. <div class="col-md-8">
  235. <div class="input-group">
  236. <input class="form-control" type="text" name="passwd" value="{{$user->passwd}}" id="passwd" />
  237. <span class="input-group-btn">
  238. <button class="btn btn-success" type="button" onclick="makePasswd()"> <i class="fa fa-refresh"></i> </button>
  239. </span>
  240. </div>
  241. </div>
  242. </div>
  243. <div class="form-group">
  244. <label for="method" class="col-md-3 control-label">加密方式</label>
  245. <div class="col-md-8">
  246. <select class="form-control" name="method" id="method">
  247. @foreach ($method_list as $method)
  248. <option value="{{$method->name}}" @if($method->name == $user->method) selected @endif>{{$method->name}}</option>
  249. @endforeach
  250. </select>
  251. </div>
  252. </div>
  253. <div class="form-group">
  254. <label for="transfer_enable" class="col-md-3 control-label">可用流量</label>
  255. <div class="col-md-8">
  256. <div class="input-group">
  257. <input type="text" class="form-control" name="transfer_enable" value="{{$user->transfer_enable}}" id="transfer_enable" placeholder="" required>
  258. <span class="input-group-addon">GiB</span>
  259. </div>
  260. </div>
  261. </div>
  262. <div class="form-group">
  263. <label for="enable" class="col-md-3 control-label">状态</label>
  264. <div class="col-md-8">
  265. <select class="form-control" name="enable" value="{{$user->enable}}" id="enable">
  266. <option value="1" {{$user->enable ? 'selected' : ''}}>启用</option>
  267. <option value="0" {{$user->enable ? '' : 'selected'}}>禁用</option>
  268. </select>
  269. </div>
  270. </div>
  271. <hr>
  272. <div class="form-group">
  273. <label for="protocol" class="col-md-3 control-label">协议</label>
  274. <div class="col-md-8">
  275. <select class="form-control" name="protocol" id="protocol">
  276. @foreach ($protocol_list as $protocol)
  277. <option value="{{$protocol->name}}" @if($protocol->name == $user->protocol) selected @endif>{{$protocol->name}}</option>
  278. @endforeach
  279. </select>
  280. </div>
  281. </div>
  282. <div class="form-group">
  283. <label for="obfs" class="col-md-3 control-label">混淆</label>
  284. <div class="col-md-8">
  285. <select class="form-control" name="obfs" id="obfs">
  286. @foreach ($obfs_list as $obfs)
  287. <option value="{{$obfs->name}}" @if($obfs->name == $user->obfs) selected @endif>{{$obfs->name}}</option>
  288. @endforeach
  289. </select>
  290. </div>
  291. </div>
  292. <div class="form-group">
  293. <label for="protocol_param" class="col-md-3 control-label">协议参数</label>
  294. <div class="col-md-8">
  295. <input type="text" class="form-control" name="protocol_param" value="{{$user->protocol_param}}" id="protocol_param" placeholder="节点单端口时无效">
  296. </div>
  297. </div>
  298. <div class="form-group">
  299. <label for="obfs_param" class="col-md-3 control-label">混淆参数</label>
  300. <div class="col-md-8">
  301. <textarea class="form-control" rows="5" name="obfs_param" id="obfs_param" placeholder="不填则取节点自定义混淆参数">{{$user->obfs_param}}</textarea>
  302. </div>
  303. </div>
  304. <hr>
  305. <div class="form-group">
  306. <label for="speed_limit_per_con" class="col-md-3 control-label">单连接限速</label>
  307. <div class="col-md-8">
  308. <div class="input-group">
  309. <input type="text" class="form-control" name="speed_limit_per_con" value="{{$user->speed_limit_per_con}}" id="speed_limit_per_con" placeholder="" disabled>
  310. <span class="input-group-addon">KB</span>
  311. </div>
  312. </div>
  313. </div>
  314. <div class="form-group">
  315. <label for="speed_limit_per_user" class="col-md-3 control-label">单用户限速</label>
  316. <div class="col-md-8">
  317. <div class="input-group">
  318. <input type="text" class="form-control" name="speed_limit_per_user" value="{{$user->speed_limit_per_user}}" id="speed_limit_per_user" placeholder="" disabled>
  319. <span class="input-group-addon">KB</span>
  320. </div>
  321. </div>
  322. </div>
  323. </div>
  324. </div>
  325. <!-- END SAMPLE FORM PORTLET-->
  326. </div>
  327. </div>
  328. </div>
  329. <div class="form-actions">
  330. <div class="row">
  331. <div class="col-md-12">
  332. <button type="submit" class="btn green">提 交</button>
  333. </div>
  334. </div>
  335. </div>
  336. </form>
  337. <!-- END FORM-->
  338. </div>
  339. </div>
  340. <!-- 余额充值 -->
  341. <div id="handle_user_balance" class="modal fade" tabindex="-1" data-focus-on="input:first" data-backdrop="static" data-keyboard="false">
  342. <div class="modal-dialog" style="width:300px;">
  343. <div class="modal-content">
  344. <div class="modal-header">
  345. <button type="button" class="close" data-dismiss="modal" aria-hidden="true"></button>
  346. <h4 class="modal-title">充值</h4>
  347. </div>
  348. <div class="modal-body">
  349. <div class="alert alert-danger" style="display: none;" id="msg"></div>
  350. <!-- BEGIN FORM-->
  351. <form action="#" method="post" class="form-horizontal">
  352. <div class="form-body">
  353. <div class="form-group">
  354. <label for="amount" class="col-md-4 control-label"> 充值金额 </label>
  355. <div class="col-md-8">
  356. <input type="text" class="form-control" name="amount" id="amount" placeholder="填入负值则会扣余额" onkeydown="if(event.keyCode==13){return false;}">
  357. </div>
  358. </div>
  359. </div>
  360. </form>
  361. <!-- END FORM-->
  362. </div>
  363. <div class="modal-footer">
  364. <button type="button" data-dismiss="modal" class="btn dark btn-outline">关闭</button>
  365. <button type="button" class="btn red btn-outline" onclick="return handleUserBalance();">充值</button>
  366. </div>
  367. </div>
  368. </div>
  369. </div>
  370. </div>
  371. <!-- END PAGE BASE CONTENT -->
  372. </div>
  373. <!-- END CONTENT BODY -->
  374. @endsection
  375. @section('script')
  376. <script src="/assets/global/plugins/bootstrap-datepicker/js/bootstrap-datepicker.min.js" type="text/javascript"></script>
  377. <script src="/assets/global/plugins/bootstrap-datepicker/locales/bootstrap-datepicker.zh-CN.min.js" type="text/javascript"></script>
  378. <script src="/assets/global/plugins/select2/js/select2.full.min.js" type="text/javascript"></script>
  379. <script src="/js/layer/layer.js" type="text/javascript"></script>
  380. <script type="text/javascript">
  381. // 用户标签选择器
  382. $('#labels').select2({
  383. theme: 'bootstrap',
  384. placeholder: '设置后则可见相同标签的节点',
  385. allowClear: true
  386. });
  387. // 切换用户身份
  388. function switchToUser() {
  389. $.ajax({
  390. 'url': "{{url("/admin/switchToUser")}}",
  391. 'data': {
  392. 'user_id': '{{$user->id}}',
  393. '_token': '{{csrf_token()}}'
  394. },
  395. 'dataType': "json",
  396. 'type': "POST",
  397. success: function (ret) {
  398. layer.msg(ret.message, {time: 1000}, function () {
  399. if (ret.status == 'success') {
  400. window.location.href = "/";
  401. }
  402. });
  403. }
  404. });
  405. }
  406. // 有效期
  407. $('.input-daterange input').each(function() {
  408. $(this).datepicker({
  409. language: 'zh-CN',
  410. autoclose: true,
  411. todayHighlight: true,
  412. format: 'yyyy-mm-dd'
  413. });
  414. });
  415. // ajax同步提交
  416. function do_submit() {
  417. var _token = '{{csrf_token()}}';
  418. var id = '{{Request::get('id')}}';
  419. var username = $('#username').val();
  420. var password = $('#password').val();
  421. var pay_way = $("input:radio[name='pay_way']:checked").val();
  422. var balance = $('#balance').val();
  423. var score = $('#score').val();
  424. var status = $('#status').val();
  425. var labels = $('#labels').val();
  426. var enable_time = $('#enable_time').val();
  427. var expire_time = $('#expire_time').val();
  428. var gender = $("input:radio[name='gender']:checked").val();
  429. var wechat = $('#wechat').val();
  430. var qq = $('#qq').val();
  431. var is_admin = $('#is_admin').val();
  432. var remark = $('#remark').val();
  433. var level = $("#level option:selected").val();
  434. var port = $('#port').val();
  435. var passwd = $('#passwd').val();
  436. var method = $('#method').val();
  437. var transfer_enable = $('#transfer_enable').val();
  438. var enable = $('#enable').val();
  439. var protocol = $('#protocol').val();
  440. var protocol_param = $('#protocol_param').val();
  441. var obfs = $('#obfs').val();
  442. var obfs_param = $('#obfs_param').val();
  443. var speed_limit_per_con = $('#speed_limit_per_con').val();
  444. var speed_limit_per_user = $('#speed_limit_per_user').val();
  445. // 用途
  446. var usage = '';
  447. $.each($("input:checkbox[name='usage']"), function(){
  448. if (this.checked) {
  449. usage += $(this).val() + ',';
  450. }
  451. });
  452. usage = usage.substring(0, usage.length - 1);
  453. $.ajax({
  454. type: "POST",
  455. url: "{{url('admin/editUser')}}",
  456. async: false,
  457. data: {_token:_token, id:id, username: username, password:password, usage:usage, pay_way:pay_way, balance:balance, score:score, status:status, labels:labels, enable_time:enable_time, expire_time:expire_time, gender:gender, wechat:wechat, qq:qq, is_admin:is_admin, remark:remark, level:level, port:port, passwd:passwd, method:method, transfer_enable:transfer_enable, enable:enable, protocol:protocol, protocol_param:protocol_param, obfs:obfs, obfs_param:obfs_param, speed_limit_per_con:speed_limit_per_con, speed_limit_per_user:speed_limit_per_user},
  458. dataType: 'json',
  459. success: function (ret) {
  460. if (ret.status == 'success') {
  461. layer.confirm('更新成功,是否返回?', {icon: 1, title:'提示'}, function(index) {
  462. window.location.href = '{{url('admin/userList?page=') . Request::get('page')}}';
  463. layer.close(index);
  464. });
  465. } else {
  466. layer.msg(ret.message, {time:1000});
  467. }
  468. }
  469. });
  470. return false;
  471. }
  472. // 生成随机端口
  473. function makePort() {
  474. $.get("{{url('admin/makePort')}}", function(ret) {
  475. $("#port").val(ret);
  476. });
  477. }
  478. // 生成随机密码
  479. function makePasswd() {
  480. $.get("{{url('admin/makePasswd')}}", function(ret) {
  481. $("#passwd").val(ret);
  482. });
  483. }
  484. // 余额充值
  485. function handleUserBalance() {
  486. var amount = $("#amount").val();
  487. var reg = /^(\-?)\d+(\.\d+)?$/; //只可以是正负数字
  488. if (amount == '' || amount == 0 || !reg.test(amount)) {
  489. $("#msg").show().html("请输入充值金额");
  490. $("#name").focus();
  491. return false;
  492. }
  493. $.ajax({
  494. url:'{{url('admin/handleUserBalance')}}',
  495. type:"POST",
  496. data:{_token:'{{csrf_token()}}', user_id:'{{Request::get('id')}}', amount:amount},
  497. beforeSend:function(){
  498. $("#msg").show().html("充值中...");
  499. },
  500. success:function(ret){
  501. if (ret.status == 'fail') {
  502. $("#msg").show().html(ret.message);
  503. return false;
  504. } else {
  505. layer.msg(ret.message, {time:1000}, function() {
  506. if (ret.status == 'success') {
  507. $("#handle_user_balance").modal("hide");
  508. window.location.reload();
  509. }
  510. });
  511. }
  512. },
  513. error:function(){
  514. $("#msg").show().html("请求错误,请重试");
  515. },
  516. complete:function(){}
  517. });
  518. }
  519. </script>
  520. @endsection