convey.html 23 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594
  1. {extend name="common/common2" /}
  2. {block name="main"}
  3. <style>
  4. .ys-color1{
  5. color: #ffffff;
  6. background-color: #acb3d8;
  7. }
  8. .ys-color2{
  9. color: #ffffff;
  10. background-color: #fff500;
  11. }
  12. .ys-color3{
  13. color: #ffffff;
  14. background-color: #ec891a;
  15. }
  16. .ys-color4{
  17. color: #ffffff;
  18. background-color: #e45946;
  19. }
  20. .ys-yellow{
  21. /*color: #CC6600;*/
  22. }
  23. .input-group{
  24. margin-bottom: 10px;
  25. }
  26. .ui-jqgrid tr.jqgrow td {
  27. white-space: normal !important;
  28. height:auto;
  29. vertical-align:text-top;
  30. padding-top:10px;
  31. word-wrap: break-word!important;
  32. }
  33. .cur1{
  34. float: right;
  35. margin-left: 3px;
  36. cursor: auto;
  37. }
  38. .cur2{
  39. background: #0000!important;
  40. border-color: #0000;
  41. color: black;
  42. font-size: 20px;
  43. line-height: 20px;
  44. }
  45. .yd{
  46. color: #023894;
  47. }
  48. </style>
  49. <div class="ibox">
  50. <div class="ibox-content">
  51. <div class="row">
  52. <div class="col-xs-12" style="text-align: right;">
  53. <form class="form-inline" id="form-search" action="{:url('convey')}?mode={$mode}">
  54. <div class="input-group">
  55. <input type="text" class="form-control" name="ysname" placeholder="运送员">
  56. </div>
  57. <div class="input-group">
  58. <input class="form-control" id="start" readonly placeholder="需求时间" name="xqtime" >
  59. </div>
  60. <div class="input-group">
  61. <input class="form-control" id="end" readonly placeholder="应完成时间" name="ywctime" >
  62. </div>
  63. <div class="input-group">
  64. <select name="priority" class="form-control">
  65. <option value="">优先级</option>
  66. <option value="1">可延缓的</option>
  67. <option value="2">常规</option>
  68. <option value="3">紧急</option>
  69. <option value="4">预约</option>
  70. </select>
  71. </div>
  72. <div class="input-group">
  73. <select name="type" class="form-control">
  74. <option value="">运送类型</option>
  75. {foreach $order_type_list as $k=>$v}
  76. <option value="{$v['id']}">{$v['title']}</option>
  77. {/foreach}
  78. </select>
  79. </div>
  80. <div class="input-group">
  81. <select name="status" class="form-control">
  82. <option value="">选择状态</option>
  83. <option value="1">新任务</option>
  84. <option value="2">进行中</option>
  85. <option value="3">延时中</option>
  86. </select>
  87. </div>
  88. <div class="input-group">
  89. <select name="start" class="form-control">
  90. <option value="">开始地点</option>
  91. {foreach $address as $k=>$v}
  92. <option value="{$v['id']}">{$v['title']}</option>
  93. {/foreach}
  94. </select>
  95. </div>
  96. <div class="input-group">
  97. <select name="end" class="form-control">
  98. <option value="">结束地点</option>
  99. {foreach $address as $k=>$v}
  100. <option value="{$v['id']}">{$v['title']}</option>
  101. {/foreach}
  102. </select>
  103. </div>
  104. <div class="input-group">
  105. <span class="input-group-btn">
  106. <button class="btn-sm btn-primary" type="button" id ="search-btn" ><i class="fa fa-search"></i></button>
  107. </span> &nbsp;
  108. <span class="input-group-btn">
  109. <button class="btn-sm btn-warning" type="button" id="search-clear"><i class="fa fa-undo"></i></button>
  110. </span>
  111. </div>
  112. </form>
  113. </div>
  114. </div>
  115. </div>
  116. <div class="ibox-content">
  117. <a href="javascript:;" url="{:url('dispatchAdd',[],'')}/mode/3" data-title="创建运送订单" onclick="layer_open(this,1)" id="orderadd" class="btn btn-sm btn-primary">新增(shift+A)</a>
  118. <a href="javascript:;" url="{:url('batchsend',[],'')}/mode/3" data-title="派工" class="btn btn-sm btn-primary paiGong">派工(shift+S)</a>
  119. <a href="javascript:;" class="btn btn-sm btn-primary finish">完成(shift+Z)</a>
  120. <a href="javascript:;" class="btn btn-sm btn-primary quxiao">取消(shift+X)</a>
  121. <a href="javascript:;" class="btn btn-sm btn-primary yanchi">延迟</a>
  122. <a href="javascript:;" class="btn btn-sm btn-primary quxiaoyanchi">取消延迟</a>
  123. <a href="javascript:;" class="btn btn-sm btn-primary ysystatus">运送员状态</a>
  124. <a href="javascript:;" class="btn btn-sm btn-primary bhgd">驳回工单{if $count>0}({$count}){/if}</a>
  125. <a href="javascript:;" class="cur1 btn btn-sm btn-success">已取消(<span id="yqx">0</span>)</a>
  126. <a href="javascript:;" class="cur1 btn btn-sm btn-success">已完成(<span id="ywc">0</span>)</a>
  127. <a href="javascript:;" class="cur1 btn btn-sm btn-success">已派发(<span id="ypf">0</span>)</a>
  128. <a href="javascript:;" class="cur1 btn btn-sm btn-success">待处理(<span id="dcl">0</span>)</a>
  129. <a href="javascript:;" class="cur1 cur2 btn btn-sm btn-success">当日数据:</a>
  130. <br/>
  131. <br/>
  132. <div style="line-height: 30px; height: 30px;">
  133. <a style="float:left;" href="javascript:;" class="btn btn-sm btn-primary off">{if $refresh>0}关闭刷新{else}开启刷新{/if}</a>
  134. <span id="timermsglabel" {if $refresh==0} style="display: none" {else} style="color:black;margin-left: 10px" {/if} >{$sxJg}秒后自动刷新页面</>
  135. </div>
  136. </div>
  137. <div class="ibox-content">
  138. <div class="jqGrid_wrapper">
  139. <table id="table" style="border-collapse: collapse"></table>
  140. <div id="pager"></div>
  141. </div>
  142. </div>
  143. </div>
  144. {/block}
  145. {block name="script"}
  146. <script src="/static/layDate-v5.0.9/laydate.js"></script>
  147. <script>
  148. let $ppp= {$sxJg};
  149. console.log("11111");
  150. document.addEventListener('keydown', function(event) {
  151. var key = event.key;
  152. var code = event.code;
  153. if(event.shiftKey && event.key.toUpperCase() == "A"){
  154. console.log("shift+A");
  155. $('#orderadd').click();
  156. }
  157. if(event.shiftKey && event.key.toUpperCase() == "S"){
  158. $('.paiGong').click();
  159. }
  160. if(event.shiftKey && event.key.toUpperCase() == "Z"){
  161. $(".finish").click();
  162. }
  163. if(event.shiftKey && event.key.toUpperCase() == "X"){
  164. $(".quxiao").click();
  165. }
  166. // 使用 key 或 code
  167. // console.log(event);
  168. // console.log("key:"+key);
  169. // console.log("code:"+code);
  170. });
  171. // document.onkeyup = function(event) {
  172. // // 兼容FF和IE和Opera
  173. // var e = event || window.event;
  174. // var key = e.which || e.keyCode || e.charCode;
  175. // if (e.shiftKey && e.key === 'a') { // shift + a
  176. // /*Do something. 调用一些方法*/
  177. // console.log(key);
  178. // // $('#orderadd').click();
  179. // }else if(e.shiftKey && e.key === 's'){ // shift + s
  180. // /*Do something. 调用一些方法*/
  181. // console.log(key);
  182. // $('.paiGong').click();
  183. // }else if(e.shiftKey && e.key === 'd'){ // shift + d
  184. // /*Do something. 调用一些方法*/
  185. // console.log(key);
  186. // }else if(e.shiftKey && e.key === 'f'){ // shift + f
  187. // /*Do something. 调用一些方法*/
  188. // console.log(key);
  189. // }
  190. // };
  191. $(function () {
  192. laydate.render({
  193. elem: '#start',
  194. trigger: 'click' ,
  195. theme: '#148d8f',
  196. range:true
  197. });
  198. laydate.render({
  199. elem: '#end',
  200. trigger: 'click' ,
  201. theme: '#148d8f',
  202. range:true
  203. });
  204. $(window).bind("resize",function(){
  205. var width=$(".jqGrid_wrapper").width();
  206. $("#table").setGridWidth(width);
  207. });
  208. $.jgrid.defaults.styleUI="Bootstrap";
  209. $("#table").jqGrid({
  210. url:"{:url('convey')}?mode={$mode}",
  211. datatype: "json",
  212. colModel:[
  213. {label:'状态',name:'status',index:'status',width:55,editable: false,sortable: false,formatter: function (a, b, c) {
  214. if(a===1){
  215. if(c.ss >0){
  216. return '<span class="yd">●</span><span class="label ys-color'+c.ss+'">新订单</span>'
  217. }else {
  218. return '<span class="yd">●</span><span class="label">新订单<i class="fa fa-exclamation-triangle-fill"></i></span>'
  219. }
  220. }
  221. if(a===2){
  222. if(c.ss >0){
  223. return '<span class="label ys-color'+c.ss+'">进行中</span>'
  224. }else {
  225. return '<span class="label">进行中</span>'
  226. }
  227. }
  228. if(a===3){
  229. if(c.ss >0){
  230. return '<span class="label ys-color'+c.ss+'">延迟中</span>'
  231. }else {
  232. return '<span class="label">延迟中</span>'
  233. }
  234. }
  235. }},
  236. {label:'运送类型',name:'type_name',index:'type_name',width:70,editable: false,sortable: false},
  237. {label:'任务备注',name:'content',index:'content',width:70,sortable: false},
  238. {label:'开始地点',name:'start_name',index:'start_name',width:70,sortable: false},
  239. {label:'结束地点',name:'end_name',index:'end_name',width:70,sortable: false},
  240. {label:'运送员',name:'real_names',index:'real_names',width:60,sortable: false},
  241. {label:'需求',name:'xtime',index:'xtime',width:40,sortable: false},
  242. {label:'派工',name:'stime',index:'stime',width:40,sortable: false},
  243. {label:'接受',name:'ctime',index:'ctime',width:40,sortable: false},
  244. {label:'开始',name:'starttime',index:'starttime',width:40,sortable: false},
  245. {label:'优先级',name:'priorityName',index:'priorityName',width:60,editable: false,sortable: false,formatter: function (a, b, c) {
  246. if(c.priority==3){
  247. return "<span class='label' style='color: red'>"+a+"</span><img src='/admin/img/jj.png' style='width: 20px !important;height: 20px !important;' alt=''>";
  248. }else {
  249. return a;
  250. }
  251. }},
  252. {label:'床号',name:'bed_number',index:'bed_number',width:40,sortable: false},
  253. {label:'运送设备',name:'device_name',index:'device_name',width:60,sortable: false},
  254. {label:'创建人',name:'real_name',index:'real_name',width:50,sortable: false},
  255. {label:'延迟原因',name:'delay_reason',index:'delay_reason',width:50,sortable: false},
  256. {label:'延迟时间',name:'delay_diff',index:'delay_diff',width:50,sortable: false},
  257. {label:'剩余时间',name:'last_time',index:'last_time',width:50,sortable: false},
  258. {label:'操作',width:50,sortable: false,formatter: function (a, b, c) {
  259. var detail_url = "{:url('detail2',[],'')}/id/"+c.id;
  260. var print = "{:url('print',[],'')}/id/"+c.id;
  261. var btn = '<a url="'+detail_url+'" href="javascript:;" style="display: inline-block;margin-bottom: 2px" data-title="详情" onclick="layer_open(this,1)"><span class="label label-primary" title="详情">详情</span></a>&nbsp;<br/>';
  262. // var btn = '<a href="'+detail_url+'" ><span class="label label-primary" title="详情">详情</span></a>&nbsp;';
  263. btn += '<a url="'+print+'" href="javascript:;" onclick="layer_open(this,1)" ><span class="label label-success" data-title="打印">打印</span></a>';
  264. if(c.is_todo == 1){
  265. var reminder = "{:url('reminder',[],'')}/id/"+c.id;
  266. btn += '<a href="'+reminder+'" class="ajax-get" ><span class="label label-info" data-title="催单">催单</span></a>';
  267. }
  268. return btn;
  269. }},
  270. ],
  271. rowNum:1000,
  272. rowList:[1000],
  273. pager: '#pager',
  274. sortname: '',
  275. viewrecords: true,
  276. autowidth:true,
  277. mtype: 'post',
  278. height: 'auto',
  279. emptyrecords: "暂无数据",
  280. sortorder: "",
  281. multiselect: true,//可多选
  282. caption:"运送调度订单列表",
  283. loadComplete: function (xhr) {
  284. if(xhr.code==0){
  285. layer.msg(xhr.msg);
  286. return false;
  287. }
  288. $("#dcl").html(xhr.dcl);
  289. $("#ypf").html(xhr.ypf);
  290. $("#yqx").html(xhr.yqx);
  291. $("#ywc").html(xhr.ywc);
  292. },
  293. });
  294. var interval = function () {
  295. if($ppp<1)
  296. {
  297. // clearInterval(interval);
  298. $ppp = {$sxJg};
  299. $("#search-btn").click();
  300. }else{
  301. $("#timermsglabel").html($ppp+"秒后自动刷新页面");
  302. $ppp--;
  303. }
  304. }
  305. if(parseInt('{$refresh}') >0){
  306. var time1 = setInterval(interval,1000);
  307. }
  308. //派工
  309. $('.paiGong').click(function (res) {
  310. var rowIds = jQuery("#table").jqGrid('getGridParam', 'selarrrow'); //获取勾选记录的ID
  311. if(rowIds.length <=0){
  312. updateAlert('请选择订单','alert-danger');
  313. setTimeout(function(){
  314. $('#top-alert').find('button').click();
  315. },1500);
  316. return;
  317. }
  318. clearInterval(time1);
  319. var url = "{:url('batchsend',[],'')}/id/"+rowIds.join(',')+"/mode/3";
  320. var title = '派工';
  321. layer.open({
  322. type: 2,
  323. shade: 0.8,
  324. title: title,
  325. area: ['800px', '90%'],
  326. fix: false, //不固定
  327. maxmin: true,
  328. content: url,
  329. skin: 'layer-ext-moon',
  330. success: function(layero, index) {
  331. $("#search-btn").click();
  332. },
  333. end:function () {
  334. time1 = setInterval(interval,1000);
  335. $("#search-btn").click();
  336. }
  337. });
  338. })
  339. //完成
  340. $('.finish').click(function (res) {
  341. var rowIds = jQuery("#table").jqGrid('getGridParam', 'selarrrow'); //获取勾选记录的ID
  342. if(rowIds.length <=0){
  343. updateAlert('请选择订单','alert-danger');
  344. setTimeout(function(){
  345. $('#top-alert').find('button').click();
  346. },1500);
  347. return;
  348. }
  349. var url = "{:url('batchfinish',[],'')}/id/"+rowIds.join(',');
  350. layer.confirm('确定要完成选中的订单吗?', {
  351. icon: 3,
  352. btn: ['确定', '取消'],
  353. skin: 'layer-ext-moon'
  354. }, function(index) {
  355. $.post(url,{},function (res) {
  356. if(res.code==1){
  357. layer.msg('完成成功', {
  358. time: 2000 //2秒关闭(如果不配置,默认是3秒)
  359. }, function () {
  360. location.reload();
  361. });
  362. }else {
  363. layer.msg(res.msg);
  364. }
  365. })
  366. });
  367. })
  368. //取消
  369. $('.quxiao').click(function (res) {
  370. var rowIds = jQuery("#table").jqGrid('getGridParam', 'selarrrow'); //获取勾选记录的ID
  371. if(rowIds.length <=0){
  372. updateAlert('请选择订单','alert-danger');
  373. setTimeout(function(){
  374. $('#top-alert').find('button').click();
  375. },1500);
  376. return;
  377. }
  378. if(rowIds.length >1){
  379. updateAlert('每次只能取消一条','alert-danger');
  380. setTimeout(function(){
  381. $('#top-alert').find('button').click();
  382. },1500);
  383. return;
  384. }
  385. clearInterval(time1);
  386. var url = "{:url('disCancel',[],'')}/id/"+rowIds.join(',');
  387. var title = '取消';
  388. layer.open({
  389. type: 2,
  390. shade: 0.8,
  391. title: title,
  392. area: ['800px', '90%'],
  393. fix: false, //不固定
  394. maxmin: true,
  395. content: url,
  396. skin: 'layer-ext-moon',
  397. success: function(layero, index) {
  398. },
  399. end:function () {
  400. time1 = setInterval(interval,1000);
  401. }
  402. });
  403. })
  404. //延迟
  405. $('.yanchi').click(function (res) {
  406. var rowIds = jQuery("#table").jqGrid('getGridParam', 'selarrrow'); //获取勾选记录的ID
  407. if(rowIds.length <=0){
  408. updateAlert('请选择订单','alert-danger');
  409. setTimeout(function(){
  410. $('#top-alert').find('button').click();
  411. },1500);
  412. return;
  413. }
  414. clearInterval(time1);
  415. var url = "{:url('batchdelay',[],'')}/id/"+rowIds.join(',');
  416. var title = '延迟';
  417. layer.open({
  418. type: 2,
  419. shade: 0.8,
  420. title: title,
  421. area: ['800px', '90%'],
  422. fix: false, //不固定
  423. maxmin: true,
  424. content: url,
  425. skin: 'layer-ext-moon',
  426. success: function(layero, index) {
  427. },
  428. end:function () {
  429. time1 = setInterval(interval,1000);
  430. }
  431. });
  432. })
  433. //取消延迟
  434. $('.quxiaoyanchi').click(function (res) {
  435. var rowIds = jQuery("#table").jqGrid('getGridParam', 'selarrrow'); //获取勾选记录的ID
  436. if(rowIds.length <=0){
  437. updateAlert('请选择订单','alert-danger');
  438. setTimeout(function(){
  439. $('#top-alert').find('button').click();
  440. },1500);
  441. return;
  442. }
  443. var url = "{:url('batchcanceldelay',[],'')}/id/"+rowIds.join(',');
  444. layer.confirm('确定要取消延迟选中的订单吗?', {
  445. icon: 3,
  446. btn: ['确定', '取消'],
  447. skin: 'layer-ext-moon'
  448. }, function(index) {
  449. $.post(url,{},function (res) {
  450. if(res.code==1){
  451. layer.msg('取消成功', {
  452. time: 2000 //2秒关闭(如果不配置,默认是3秒)
  453. }, function () {
  454. location.reload();
  455. });
  456. }else {
  457. layer.msg(res.msg);
  458. }
  459. })
  460. });
  461. })
  462. //运送员状态
  463. $('.ysystatus').click(function (res) {
  464. var rowIds = jQuery("#table").jqGrid('getGridParam', 'selarrrow'); //获取勾选记录的ID
  465. // if(rowIds.length <=0){
  466. // updateAlert('请选择订单','alert-danger');
  467. // setTimeout(function(){
  468. // $('#top-alert').find('button').click();
  469. // },1500);
  470. // return;
  471. // }
  472. var url = "{:url('conveystatus',[],'')}/id/"+rowIds.join(',');
  473. var title = '运送员状态';
  474. clearInterval(time1);
  475. layer.open({
  476. type: 2,
  477. shade: 0.8,
  478. title: title,
  479. area: ['800px', '90%'],
  480. fix: false, //不固定
  481. maxmin: true,
  482. content: url,
  483. skin: 'layer-ext-moon',
  484. success: function(layero, index) {
  485. }, end:function () {
  486. time1 = setInterval(interval,1000);
  487. }
  488. });
  489. })
  490. //驳回工单
  491. $('.bhgd').click(function (res) {
  492. $ppp = 3000;
  493. var url = "{:url('bhTodoList')}";
  494. var title = '驳回工单';
  495. layer.open({
  496. type: 2,
  497. shade: 0.8,
  498. title: title,
  499. area: ['90%', '90%'],
  500. fix: false, //不固定
  501. maxmin: true,
  502. content: url,
  503. skin: 'layer-ext-moon',
  504. success: function(layero, index) {
  505. }
  506. });
  507. })
  508. $('.off').click(function () {
  509. $.post('{:url("orderRefreshOff")}',{},function (res) {
  510. if(res.code==1){
  511. if(res.data.status==1){
  512. time1 = setInterval(interval,1000);
  513. $("#timermsglabel").css('display','');
  514. $("#timermsglabel").css('margin-left','10px');
  515. $(".off").html('关闭刷新');
  516. }else {
  517. clearInterval(time1);
  518. $("#timermsglabel").css('display','none');
  519. $(".off").html('开启刷新');
  520. }
  521. }else {
  522. layer.msg(res.msg);
  523. }
  524. })
  525. })
  526. });
  527. window.alert=function(){
  528. return '';
  529. };
  530. </script>
  531. {/block}