editUser.blade.php 34 KB

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