convey.html 22 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593
  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:'priorityName',index:'priorityName',width:60,editable: false,sortable: false,formatter: function (a, b, c) {
  245. if(c.priority==3){
  246. return "<span class='label' style='color: red'>"+a+"</span><img src='/admin/img/jj.png' style='width: 20px !important;height: 20px !important;' alt=''>";
  247. }else {
  248. return a;
  249. }
  250. }},
  251. {label:'床号',name:'bed_number',index:'bed_number',width:40,sortable: false},
  252. {label:'运送设备',name:'device_name',index:'device_name',width:60,sortable: false},
  253. {label:'创建人',name:'real_name',index:'real_name',width:50,sortable: false},
  254. {label:'延迟原因',name:'delay_reason',index:'delay_reason',width:50,sortable: false},
  255. {label:'延迟时间',name:'delay_diff',index:'delay_diff',width:50,sortable: false},
  256. {label:'剩余时间',name:'last_time',index:'last_time',width:50,sortable: false},
  257. {label:'操作',width:50,sortable: false,formatter: function (a, b, c) {
  258. var detail_url = "{:url('detail2',[],'')}/id/"+c.id;
  259. var print = "{:url('print',[],'')}/id/"+c.id;
  260. 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/>';
  261. // var btn = '<a href="'+detail_url+'" ><span class="label label-primary" title="详情">详情</span></a>&nbsp;';
  262. btn += '<a url="'+print+'" href="javascript:;" onclick="layer_open(this,1)" ><span class="label label-success" data-title="打印">打印</span></a>';
  263. if(c.is_todo == 1){
  264. var reminder = "{:url('reminder',[],'')}/id/"+c.id;
  265. btn += '<a href="'+reminder+'" class="ajax-get" ><span class="label label-info" data-title="催单">催单</span></a>';
  266. }
  267. return btn;
  268. }},
  269. ],
  270. rowNum:1000,
  271. rowList:[1000],
  272. pager: '#pager',
  273. sortname: '',
  274. viewrecords: true,
  275. autowidth:true,
  276. mtype: 'post',
  277. height: 'auto',
  278. emptyrecords: "暂无数据",
  279. sortorder: "",
  280. multiselect: true,//可多选
  281. caption:"运送调度订单列表",
  282. loadComplete: function (xhr) {
  283. if(xhr.code==0){
  284. layer.msg(xhr.msg);
  285. return false;
  286. }
  287. $("#dcl").html(xhr.dcl);
  288. $("#ypf").html(xhr.ypf);
  289. $("#yqx").html(xhr.yqx);
  290. $("#ywc").html(xhr.ywc);
  291. },
  292. });
  293. var interval = function () {
  294. if($ppp<1)
  295. {
  296. // clearInterval(interval);
  297. $ppp = {$sxJg};
  298. $("#search-btn").click();
  299. }else{
  300. $("#timermsglabel").html($ppp+"秒后自动刷新页面");
  301. $ppp--;
  302. }
  303. }
  304. if(parseInt('{$refresh}') >0){
  305. var time1 = setInterval(interval,1000);
  306. }
  307. //派工
  308. $('.paiGong').click(function (res) {
  309. var rowIds = jQuery("#table").jqGrid('getGridParam', 'selarrrow'); //获取勾选记录的ID
  310. if(rowIds.length <=0){
  311. updateAlert('请选择订单','alert-danger');
  312. setTimeout(function(){
  313. $('#top-alert').find('button').click();
  314. },1500);
  315. return;
  316. }
  317. clearInterval(time1);
  318. var url = "{:url('batchsend',[],'')}/id/"+rowIds.join(',')+"/mode/3";
  319. var title = '派工';
  320. layer.open({
  321. type: 2,
  322. shade: 0.8,
  323. title: title,
  324. area: ['800px', '90%'],
  325. fix: false, //不固定
  326. maxmin: true,
  327. content: url,
  328. skin: 'layer-ext-moon',
  329. success: function(layero, index) {
  330. $("#search-btn").click();
  331. },
  332. end:function () {
  333. time1 = setInterval(interval,1000);
  334. $("#search-btn").click();
  335. }
  336. });
  337. })
  338. //完成
  339. $('.finish').click(function (res) {
  340. var rowIds = jQuery("#table").jqGrid('getGridParam', 'selarrrow'); //获取勾选记录的ID
  341. if(rowIds.length <=0){
  342. updateAlert('请选择订单','alert-danger');
  343. setTimeout(function(){
  344. $('#top-alert').find('button').click();
  345. },1500);
  346. return;
  347. }
  348. var url = "{:url('batchfinish',[],'')}/id/"+rowIds.join(',');
  349. layer.confirm('确定要完成选中的订单吗?', {
  350. icon: 3,
  351. btn: ['确定', '取消'],
  352. skin: 'layer-ext-moon'
  353. }, function(index) {
  354. $.post(url,{},function (res) {
  355. if(res.code==1){
  356. layer.msg('完成成功', {
  357. time: 2000 //2秒关闭(如果不配置,默认是3秒)
  358. }, function () {
  359. location.reload();
  360. });
  361. }else {
  362. layer.msg(res.msg);
  363. }
  364. })
  365. });
  366. })
  367. //取消
  368. $('.quxiao').click(function (res) {
  369. var rowIds = jQuery("#table").jqGrid('getGridParam', 'selarrrow'); //获取勾选记录的ID
  370. if(rowIds.length <=0){
  371. updateAlert('请选择订单','alert-danger');
  372. setTimeout(function(){
  373. $('#top-alert').find('button').click();
  374. },1500);
  375. return;
  376. }
  377. if(rowIds.length >1){
  378. updateAlert('每次只能取消一条','alert-danger');
  379. setTimeout(function(){
  380. $('#top-alert').find('button').click();
  381. },1500);
  382. return;
  383. }
  384. clearInterval(time1);
  385. var url = "{:url('disCancel',[],'')}/id/"+rowIds.join(',');
  386. var title = '取消';
  387. layer.open({
  388. type: 2,
  389. shade: 0.8,
  390. title: title,
  391. area: ['800px', '90%'],
  392. fix: false, //不固定
  393. maxmin: true,
  394. content: url,
  395. skin: 'layer-ext-moon',
  396. success: function(layero, index) {
  397. },
  398. end:function () {
  399. time1 = setInterval(interval,1000);
  400. }
  401. });
  402. })
  403. //延迟
  404. $('.yanchi').click(function (res) {
  405. var rowIds = jQuery("#table").jqGrid('getGridParam', 'selarrrow'); //获取勾选记录的ID
  406. if(rowIds.length <=0){
  407. updateAlert('请选择订单','alert-danger');
  408. setTimeout(function(){
  409. $('#top-alert').find('button').click();
  410. },1500);
  411. return;
  412. }
  413. clearInterval(time1);
  414. var url = "{:url('batchdelay',[],'')}/id/"+rowIds.join(',');
  415. var title = '延迟';
  416. layer.open({
  417. type: 2,
  418. shade: 0.8,
  419. title: title,
  420. area: ['800px', '90%'],
  421. fix: false, //不固定
  422. maxmin: true,
  423. content: url,
  424. skin: 'layer-ext-moon',
  425. success: function(layero, index) {
  426. },
  427. end:function () {
  428. time1 = setInterval(interval,1000);
  429. }
  430. });
  431. })
  432. //取消延迟
  433. $('.quxiaoyanchi').click(function (res) {
  434. var rowIds = jQuery("#table").jqGrid('getGridParam', 'selarrrow'); //获取勾选记录的ID
  435. if(rowIds.length <=0){
  436. updateAlert('请选择订单','alert-danger');
  437. setTimeout(function(){
  438. $('#top-alert').find('button').click();
  439. },1500);
  440. return;
  441. }
  442. var url = "{:url('batchcanceldelay',[],'')}/id/"+rowIds.join(',');
  443. layer.confirm('确定要取消延迟选中的订单吗?', {
  444. icon: 3,
  445. btn: ['确定', '取消'],
  446. skin: 'layer-ext-moon'
  447. }, function(index) {
  448. $.post(url,{},function (res) {
  449. if(res.code==1){
  450. layer.msg('取消成功', {
  451. time: 2000 //2秒关闭(如果不配置,默认是3秒)
  452. }, function () {
  453. location.reload();
  454. });
  455. }else {
  456. layer.msg(res.msg);
  457. }
  458. })
  459. });
  460. })
  461. //运送员状态
  462. $('.ysystatus').click(function (res) {
  463. var rowIds = jQuery("#table").jqGrid('getGridParam', 'selarrrow'); //获取勾选记录的ID
  464. // if(rowIds.length <=0){
  465. // updateAlert('请选择订单','alert-danger');
  466. // setTimeout(function(){
  467. // $('#top-alert').find('button').click();
  468. // },1500);
  469. // return;
  470. // }
  471. var url = "{:url('conveystatus',[],'')}/id/"+rowIds.join(',');
  472. var title = '运送员状态';
  473. clearInterval(time1);
  474. layer.open({
  475. type: 2,
  476. shade: 0.8,
  477. title: title,
  478. area: ['800px', '90%'],
  479. fix: false, //不固定
  480. maxmin: true,
  481. content: url,
  482. skin: 'layer-ext-moon',
  483. success: function(layero, index) {
  484. }, end:function () {
  485. time1 = setInterval(interval,1000);
  486. }
  487. });
  488. })
  489. //驳回工单
  490. $('.bhgd').click(function (res) {
  491. $ppp = 3000;
  492. var url = "{:url('bhTodoList')}";
  493. var title = '驳回工单';
  494. layer.open({
  495. type: 2,
  496. shade: 0.8,
  497. title: title,
  498. area: ['90%', '90%'],
  499. fix: false, //不固定
  500. maxmin: true,
  501. content: url,
  502. skin: 'layer-ext-moon',
  503. success: function(layero, index) {
  504. }
  505. });
  506. })
  507. $('.off').click(function () {
  508. $.post('{:url("orderRefreshOff")}',{},function (res) {
  509. if(res.code==1){
  510. if(res.data.status==1){
  511. time1 = setInterval(interval,1000);
  512. $("#timermsglabel").css('display','');
  513. $("#timermsglabel").css('margin-left','10px');
  514. $(".off").html('关闭刷新');
  515. }else {
  516. clearInterval(time1);
  517. $("#timermsglabel").css('display','none');
  518. $(".off").html('开启刷新');
  519. }
  520. }else {
  521. layer.msg(res.msg);
  522. }
  523. })
  524. })
  525. });
  526. window.alert=function(){
  527. return '';
  528. };
  529. </script>
  530. {/block}