doprint.blade.php 33 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803
  1. @extends('layouts.base')
  2. @section('content')
  3. @section('title', trans('单个打印'))
  4. <style>
  5. .mask {
  6. display: none;
  7. width: 100%;
  8. height: 100%;
  9. z-index: 1000;
  10. position: fixed;
  11. background-color: rgba(0, 0, 0, 0.6);
  12. top: 0;
  13. left: 0;
  14. }
  15. .mask .addDataNode {
  16. display: none;
  17. position: relative;
  18. left: 50%;
  19. top: 50%;
  20. color: white;
  21. }
  22. </style>
  23. <div class="rightlist">
  24. <div class="mask">
  25. <div class="addDataNode">正在推送打印任务...</div>
  26. {{-- <div class="addDataNode" onclick="cancel()">取消</div>--}}
  27. </div>
  28. <div class="panel panel-default">
  29. <div class="panel-heading">查找订单</div>
  30. <div style="padding: 10px; padding-bottom: 0px;" class="panel-body">
  31. <div class="alert alert-info">数据量大可能会引起卡顿,请在搜索前根据需要选择您的搜索条件。</div>
  32. <form id="form1" role="form" class="form-horizontal" method="post" action="">
  33. <div class="form-group">
  34. <div class="col-sm-8 col-lg-12 col-xs-12">
  35. <div class="input-group">
  36. <div class="input-group-addon">订单号</div>
  37. <input type="text" placeholder="订单号" value="" name="search[order_sn]" class="form-control">
  38. <div class="input-group-addon">快递单号</div>
  39. <input type="text" placeholder="快递单号" value="" name="search[express_sn]" class="form-control">
  40. <div class="input-group-addon">用户信息</div>
  41. <input type="text" placeholder="用户手机号/姓名/昵称" value="" name="search[member]" class="form-control">
  42. </div>
  43. </div>
  44. </div>
  45. <div class="form-group">
  46. <div class="col-sm-12 col-lg-12 col-xs-12">
  47. <div class="input-group">
  48. <div class="input-group-addon">订单状态</div>
  49. <select class="form-control" name="search[order_status]">
  50. <option value="">全部</option>
  51. <option value="0">待付款</option>
  52. <option value="1" selected="">待发货</option>
  53. <option value="2">已发货</option>
  54. <option value="3">已完成</option>
  55. <option value="-1">已关闭</option>
  56. </select>
  57. <div class="input-group-addon">快递单打印状态</div>
  58. <select class="form-control" name="search[express_print_status]">
  59. <option value="">全部</option>
  60. <option value="no">未打印</option>
  61. {{--<option value="1">部分打印</option>--}}
  62. <option value="end">打印完成</option>
  63. </select>
  64. <div class="input-group-addon">发货单打印状态</div>
  65. <select class="form-control" name="search[send_print_status]">
  66. <option selected="" value="">全部</option>
  67. <option value="no" >未打印</option>
  68. {{--<option value="1">部分打印</option>--}}
  69. <option value="end">打印完成</option>
  70. </select>
  71. <div class="input-group-addon">电子面单打印状态</div>
  72. <select class="form-control" name="search[panel_print_status]">
  73. <option selected="" value="">全部</option>
  74. <option value="no" >未打印</option>
  75. {{--<option value="1">部分打印</option>--}}
  76. <option value="end">打印完成</option>
  77. </select>
  78. </div>
  79. </div>
  80. </div>
  81. <div class="form-group">
  82. <div class="col-sm-8 col-lg-12 col-xs-12">
  83. <div class="input-group">
  84. @if($package_deliver)
  85. <div class="input-group-addon">自提点</div>
  86. <select class="form-control" name="search[deliver_name]" id="deliver_name">
  87. <option value="">请选择自提点</option>
  88. @foreach($deliver as $item)
  89. <option value="{{$item['id']}}">{{$item['deliver_name']}}</option>
  90. @endforeach
  91. </select>
  92. @endif
  93. <div class="input-group-addon">下单时间</div>
  94. <div class="col-sm-3">
  95. <label class="radio-inline">
  96. <input type="radio" name="search[create_order_time]" value="0" checked="checked">不搜索
  97. </label>
  98. <label class="radio-inline">
  99. <input type="radio" name="search[create_order_time]" value="1">搜索
  100. </label>
  101. </div>
  102. <div style="height: 34px; float: left;">
  103. <script type="text/javascript">
  104. require(["daterangepicker"], function($) {
  105. $(function() {
  106. $(".daterange.daterange-time").each(function() {
  107. var elm = this;
  108. $(this).daterangepicker({
  109. startDate: $(elm).prev().prev().val(),
  110. endDate: $(elm).prev().val(),
  111. format: "YYYY-MM-DD HH:mm",
  112. timePicker: true,
  113. timePicker12Hour: false,
  114. timePickerIncrement: 1,
  115. minuteStep: 1
  116. }, function(start, end) {
  117. $(elm).find(".date-title").html(start.toDateTimeStr() + " 至 " + end.toDateTimeStr());
  118. $(elm).prev().prev().val(start.toDateTimeStr());
  119. $(elm).prev().val(end.toDateTimeStr());
  120. });
  121. });
  122. });
  123. });
  124. </script>
  125. <input type="hidden" value="{!! date('Y-m-d H:m', strtotime('-1 month')) !!}" name="time[start]">
  126. <input type="hidden" value="{!! date('Y-m-d H:m') !!}" name="time[end]">
  127. <button type="button" class="btn btn-default daterange daterange-time" data-original-title="" title=""><span class="date-title"><?php echo date('Y-m-d H:i:s', strtotime("-1 month"))?> 至 <?php echo date('Y-m-d H:i:s',time())?></span> <i class="fa fa-calendar"></i></button>
  128. </div>
  129. <div style="height: 34px; width: 150px; float: left; padding-left: 5px;">
  130. <button id="search-btn" onclick="search()" class="btn btn-primary" type="button" data-original-title="" title=""><i class="fa fa-search"></i> 搜索</button>
  131. </div>
  132. </div>
  133. </div>
  134. </div>
  135. </form>
  136. </div>
  137. </div>
  138. <div id="orderresult" style="height: auto; overflow: hidden;"></div>
  139. </div>
  140. <div class="modal fade" id="errorModal" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true">
  141. <div class="modal-dialog">
  142. <div class="modal-content">
  143. <div class="modal-header">
  144. <button type="button" class="close" data-dismiss="modal" aria-hidden="true">&times;</button>
  145. <h4 class="modal-title" id="myModalLabel">未打印订单</h4>
  146. </div>
  147. <div class="modal-body">
  148. <table class="table table-bordered">
  149. <thead>
  150. <tr>
  151. <th>订单编号</th>
  152. <th>错误原因</th>
  153. </tr>
  154. </thead>
  155. <tbody id="errorMsg">
  156. {{--js填充--}}
  157. </tbody>
  158. </table>
  159. </div>
  160. <div class="modal-footer">
  161. <button type="button" class="btn btn-default" data-dismiss="modal">关闭</button>
  162. </div>
  163. </div><!-- /.modal-content -->
  164. </div><!-- /.modal -->
  165. </div>
  166. <object id="LODOP_OB" classid="clsid:2105C259-1E0C-4534-8141-A753534CB4CA" width="0"
  167. height="0">
  168. <embed id="LODOP_EM" type="application/x-print-lodop" width="0" height="0" pluginspage="{{resource_get('plugins/exhelper/src/common/lodop/install_lodop32.exe', 1)}}"></embed>
  169. </object>
  170. <script language='javascript' src="{{resource_get('plugins/exhelper/src/common/static/js/LodopFuncs.js', 1)}}"></script>
  171. </div>
  172. <!-- -->
  173. <script language='javascript'>
  174. $("#deliver_name").change(function () {
  175. var sel = $(this).find("option:selected").text();
  176. // var sel = $(this).find("option:selected").attr("data-name");
  177. $("#deliver_name").val(sel);
  178. });
  179. $('#deliver_name').select2();
  180. </script>
  181. <script language="javascript">
  182. var LODOP=getCLodop();
  183. // 执行搜索
  184. function search(){
  185. var data = {
  186. order_sn: $.trim($(":input[name='search[order_sn]']").val()),
  187. express_sn: $.trim($(":input[name='search[express_sn]']").val()),
  188. member: $.trim($(":input[name='search[member]']").val()),
  189. order_status: $.trim($("select[name='search[order_status]']").val()),
  190. express_print_status: $.trim($("select[name='search[express_print_status]']").val()),
  191. send_print_status: $.trim($("select[name='search[send_print_status]']").val()),
  192. panel_print_status: $.trim($("select[name='search[panel_print_status]']").val()),
  193. create_order_time: $(":input[name='search[create_order_time]']:checked").val(),
  194. time: {start: $(":input[name='time[start]']").val(),end: $(":input[name='time[end]']").val()},
  195. deliver_name: $.trim($("select[name='search[deliver_name]']").val()),
  196. };
  197. $('#search-btn').html("<i class='fa fa-spinner fa-spin'></i> 正在搜索...");
  198. $.ajax({
  199. url: "{!! yzWebUrl('plugin.exhelper.admin.print-once.search') !!}",
  200. data: {search:data},
  201. success:function(html){
  202. $('#search-btn').html("<i class='fa fa-search'></i> 搜索")
  203. $('#orderresult').html(html);
  204. setallPrintBtnState(false);
  205. $('.order_item').click(function(){
  206. setalldoprintDivIsShow(false)
  207. ordersDivIsShow(true)
  208. clearCheckBoxChange()
  209. $('#orders').find('.panel-body').html("<i class='fa fa-spinner fa-spin'></i> 正在加载...")
  210. $.ajax({
  211. url: "{!! yzWebUrl('plugin.exhelper.admin.print-once.detail') !!}",
  212. data: {orderids: $(this).data('orderids')},
  213. success:function(html){
  214. $('#orders').html(html);
  215. }
  216. });
  217. })
  218. //全选
  219. $("#allChange").click(function (){
  220. var oneChangeLen = $(".oneChange").length;
  221. if(oneChangeLen == 0){
  222. alert('暂无订单!');
  223. return false;
  224. }
  225. var _thisState = $(this).is(":checked");
  226. $(".oneChange").prop("checked",_thisState)
  227. setallPrintBtnState(_thisState);
  228. })
  229. //单选
  230. $(".oneChange").click(function () {
  231. setAllChangeState();
  232. var oneChangeState = $(".oneChange").is(":checked");
  233. setallPrintBtnState(oneChangeState);
  234. })
  235. //开始打印
  236. $('.alldoprint').click(function () {
  237. if($(this).attr('disabled')){
  238. return false;
  239. }else{
  240. var thisCate = $(this).data("cate");
  241. printAll(thisCate)
  242. }
  243. })
  244. }
  245. });
  246. }
  247. /**
  248. * 根据checkbox设置是否勾选全选按钮
  249. */
  250. function setAllChangeState()
  251. {
  252. var stateNum = 0;
  253. var oneChangeLen = $('.oneChange').length;
  254. $('.oneChange').each(function () {
  255. if( $(this).is(":checked")){
  256. stateNum++
  257. }else{
  258. stateNum--
  259. }
  260. });
  261. if(stateNum == oneChangeLen){
  262. $("#allChange").prop("checked",true)
  263. }else{
  264. $("#allChange").prop("checked",false)
  265. setallPrintBtnState(false);
  266. }
  267. }
  268. /**
  269. * 打开了详细信息就取消全部checkBox勾选
  270. */
  271. function clearCheckBoxChange()
  272. {
  273. $("#allChange").prop("checked",false)
  274. $(".oneChange").prop("checked",false)
  275. }
  276. /**
  277. * 多选打印显示控制
  278. * @param bool
  279. */
  280. function setalldoprintDivIsShow(bool)
  281. {
  282. if(bool){
  283. $('#alldoprintDiv').show();
  284. }else{
  285. $('#alldoprintDiv').hide();
  286. }
  287. }
  288. /**
  289. * 订单详情DIV展示控制
  290. * @param bool
  291. */
  292. function ordersDivIsShow(bool)
  293. {
  294. if(bool){
  295. $('#orders').show()
  296. }else{
  297. $('#orders').hide()
  298. }
  299. }
  300. /**
  301. * 控制打印按钮
  302. * @param _thisState
  303. */
  304. function setallPrintBtnState(_thisState){
  305. if(_thisState){
  306. // 正常
  307. console.log('ddddddddd')
  308. $("#alldoprint1").data("state",0).removeClass("btn-disabled").addClass("btn-primary").attr('disabled', false);
  309. $("#alldoprint2").data("state",0).removeClass("btn-disabled").addClass("btn-warning").attr('disabled', false);
  310. $("#alldoprint3").data("state",0).removeClass("btn-disabled").addClass("btn-default").attr('disabled', false);
  311. $("#alldosend").data("state",0).removeClass("btn-disabled").addClass("btn-success").attr('disabled', false);
  312. ordersDivIsShow(false)
  313. setalldoprintDivIsShow(true)
  314. }else{
  315. $("#alldoprint1").data("state",1).removeClass("btn-primary").addClass("btn-disabled").attr('disabled', true);
  316. $("#alldoprint2").data("state",1).removeClass("btn-warning").addClass("btn-disabled").attr('disabled', true);
  317. $("#alldoprint3").data("state",1).removeClass("btn-default").addClass("btn-disabled").attr('disabled', true);
  318. ordersDivIsShow(true)
  319. setalldoprintDivIsShow(false)
  320. }
  321. }
  322. /**
  323. * 全选打印
  324. * @param type
  325. * @returns {boolean}
  326. */
  327. function printAll(type)
  328. {
  329. if(confirm("多张单打印无预览效果,直接打印!确定吗?")){
  330. $('.mask,.addDataNode').show();
  331. }else{
  332. return false;
  333. }
  334. //打印快递单或发货单
  335. var url = "{!! yzWebUrl('plugin.exhelper.admin.print-once.print-all') !!}";
  336. var printDatasTemp;
  337. var printUser;
  338. var printTemp;
  339. var response;
  340. var orders;
  341. var ordersNum;
  342. var orderIds = getOrderIds();
  343. var printNum = 0; //打印次数
  344. if(type == 3){
  345. printElectronics();
  346. return;
  347. }
  348. var data = {
  349. type:type,
  350. order_ids:orderIds,
  351. };
  352. // 执行ajax获取打印模版
  353. $.ajax({
  354. type: 'POST',
  355. url: url,
  356. data: data,
  357. dataType:'json',
  358. async:false,
  359. success: function(data){
  360. response = data.data;
  361. if(data.result==1){
  362. // console.log('datadata',response);
  363. // return;
  364. printDatasTemp = response.temp.respDatas;
  365. printUser = response.temp.respUser;
  366. printTemp = response.temp.respTemp;
  367. orders = response.orders;
  368. ordersNum = orders.length;
  369. }else{
  370. cancel(data.msg);
  371. return;
  372. }
  373. }
  374. });
  375. //需要打印同地址的订单
  376. console.log('orders',orders);
  377. orders.forEach((order, orderIndex) => {
  378. /*打印的模板数据*/
  379. var rep_sendInfo = order.address.sendinfo;
  380. var rep_realName = order.address.realname;
  381. var rep_nickName = order.address.realname;
  382. var rep_mobile = order.address.mobile;
  383. var rep_province = order.addressInfo.province;
  384. var rep_city = order.addressInfo.city;
  385. var rep_area = order.address.district;
  386. var rep_address = order.address.address;
  387. var rep_ordersn = '';
  388. let price=0;
  389. let dispatchprice = 0;
  390. var info = [];
  391. //克隆对象
  392. var printDatas = $.extend(true, {}, printDatasTemp);
  393. /*打印的模板数据*/
  394. order.list.forEach(_order => {
  395. if(rep_ordersn){
  396. rep_ordersn += ", ";
  397. }
  398. rep_ordersn += _order.order_sn;
  399. price += Number(_order.price);
  400. dispatchprice += Number(_order.dispatch_price);
  401. _order.has_many_order_goods.forEach(goods => {
  402. info.push(setOrderInfos(_order, goods))
  403. });
  404. })
  405. saveSenderAll({rep_realName, rep_mobile, rep_province, rep_city, rep_area, rep_address, rep_ordersn})
  406. /*打印模板的初始化*/
  407. $.each(printDatas,function(tempIndex){
  408. this.items = this.items.replace("sendinfo",rep_sendInfo);
  409. this.items = this.items.replace("realname",rep_realName);
  410. this.items = this.items.replace("nickname",rep_nickName);
  411. this.items = this.items.replace("mobile",rep_mobile);
  412. this.items = this.items.replace("province",rep_province);
  413. this.items = this.items.replace("city",rep_city);
  414. this.items = this.items.replace("area",rep_area);
  415. this.items = this.items.replace("address",rep_address);
  416. this.items = this.items.replace("ordersn",rep_ordersn);
  417. this.items = this.items.replace("shopname",printTemp.shopname);
  418. });
  419. LODOP.PRINT_INITA(0,0,printTemp.width+"mm",printTemp.height+"mm","单据打印");
  420. LODOP.NewPageA();
  421. LODOP.SET_PRINT_PAGESIZE(1,printTemp.width+"mm",printTemp.height+"mm", "");
  422. if(printTemp.bg){
  423. // LODOP.ADD_PRINT_IMAGE(0,0,printTemp.width,printTemp.height,"<img border='0' src='"+printTemp.bg+"'>");
  424. LODOP.ADD_PRINT_SETUP_BKIMG("<img border='0' src='"+printTemp.bg+"'>");
  425. LODOP.SET_SHOW_MODE("BKIMG_IN_PREVIEW",true);//设置预览包含背景图
  426. LODOP.SET_SHOW_MODE("BKIMG_PRINT",true);//设置打印背景图
  427. LODOP.SET_SHOW_MODE("BKIMG_IN_PREVIEW",1);
  428. }
  429. LODOP.SET_PRINT_MODE("AUTO_CLOSE_PREWINDOW",true);
  430. /*打印模板的初始化*/
  431. let isMerge=false;
  432. let dispatchIsMerge=false;
  433. $.each(printDatas,function(i,d){
  434. //打印准备
  435. if(d.cate==1){
  436. LODOP.ADD_PRINT_TEXTA('"t_'+i+'"',d.top+"px",d.left+"px",d.width+"px",d.height+"px",d.pre+d.items+d.last);
  437. if(d.color){
  438. LODOP.SET_PRINT_STYLEA('"t_'+i+'"',"FontColor",d.color); // 文字颜色
  439. }
  440. if(d.bold){
  441. LODOP.SET_PRINT_STYLEA('"t_'+i+'"',"Bold",1); // 文字加粗
  442. }
  443. if(d.align){
  444. LODOP.SET_PRINT_STYLEA('"t_'+i+'"',"Alignment",d.align); // 对齐方式
  445. }
  446. var FontSize = !d.size?"12":d.size;
  447. LODOP.SET_PRINT_STYLEA('"t_'+i+'"',"FontSize",FontSize); //文字大小
  448. var FontName = !d.font?"微软雅黑":d.font;
  449. LODOP.SET_PRINT_STYLEA('"t_'+i+'"',"FontName",FontName); // 文字字体
  450. }
  451. if(d.cate==2){
  452. var strings = d.string.split(',');
  453. var values = d.items.split(',');
  454. var _html = '<table border style="width: '+d.width+'; display:table-fixed; border-collapse:collapse;border-spacing:0;border-left:1px solid '+d.color+';border-top:1px solid '+d.color+'; corlor:'+d.color+'; ';
  455. if(d.align==1){
  456. _html += "text-align:left;"
  457. }
  458. if(d.align==2){
  459. _html += "text-align:center;"
  460. }
  461. if(d.align==3){
  462. _html += "text-align:right;"
  463. }
  464. _html += '">';
  465. _html += '<tr>';
  466. $.each(strings, function(ii,s) {
  467. _html += '<td style="border-right:1px solid '+d.color+'; border-bottom:1px solid '+d.color+'; font-size:'+d.size+'pt; font-family:'+d.font+'; color:'+d.color+';">'+s;
  468. _html += '</td>';
  469. });
  470. order.list.forEach((_order, index) => {
  471. _html += '</tr>';
  472. $.each(values, function(iii,val) {
  473. str = '';
  474. dispatchStr='';
  475. if (val == 'price'){
  476. if(isMerge===false){
  477. str = 'rowspan='+rowLength+' style="text-align:center;"';
  478. _html += '<td '+str+' style="border-right:1px solid '+d.color+'; border-bottom:1px solid '+d.color+'; font-size:'+d.size+'pt; font-family:'+d.font+'; color:'+d.color+';">';
  479. _html += (price).toFixed(2);
  480. isMerge=true;
  481. }
  482. }else if (val == 'dispatchprice') {
  483. if (dispatchIsMerge ===false){
  484. dispatchStr = 'rowspan='+rowLength+' style="text-align:center;"';
  485. _html += '<td '+dispatchStr+' style="border-right:1px solid '+d.color+'; border-bottom:1px solid '+d.color+'; font-size:'+d.size+'pt; font-family:'+d.font+'; color:'+d.color+';">';
  486. _html += (dispatchprice).toFixed(2);
  487. dispatchIsMerge=true;
  488. }
  489. }else{
  490. _html += '<td style="border-right:1px solid '+d.color+'; border-bottom:1px solid '+d.color+'; font-size:'+d.size+'pt; font-family:'+d.font+'; color:'+d.color+';">';
  491. }
  492. // _html += '<td '+str+' style="border-right:1px solid '+d.color+'; border-bottom:1px solid '+d.color+'; font-size:'+d.size+'pt; font-family:'+d.font+'; color:'+d.color+';">';
  493. if(val=="printsn"){
  494. _html += index+1;
  495. }else{
  496. if (val == 'price'&&isMerge==true) {
  497. _html += '';
  498. }else if (val == 'dispatchprice'&&dispatchIsMerge==true){
  499. _html += '';
  500. }
  501. else {
  502. _html += info[index][val];
  503. }
  504. }
  505. _html += '</td>';
  506. });
  507. _html += '</tr>';
  508. })
  509. _html += '</table>';
  510. LODOP.ADD_PRINT_HTM(d.top+"px", d.left+"px", d.width+"px", d.height+"px", _html);
  511. }
  512. });
  513. //选择默认的打印机
  514. LODOP.SET_PRINTER_INDEX(-1)
  515. // 获取打印状态
  516. if (LODOP.CVERSION) {
  517. printNum++
  518. if(LODOP.PRINT()){
  519. console.log("打印次数", printNum)
  520. if(printNum == ordersNum){
  521. console.log('打印完成!')
  522. successHander();
  523. }
  524. }else{
  525. alert("打印已取消");
  526. return;
  527. }
  528. };
  529. });
  530. console.log('orderIdsorderIds', orderIds)
  531. }
  532. /**
  533. * 全部打印成功回调
  534. */
  535. function successHander()
  536. {
  537. setTimeout(function () {
  538. cancel("推送完成!");
  539. }, 1000); // 延时1秒
  540. }
  541. /**
  542. * 关闭loading
  543. */
  544. function cancel(msg)
  545. {
  546. $('.mask,.addDataNode').hide();
  547. alert(msg);
  548. }
  549. /**
  550. * 订单的详细信息
  551. * @param order
  552. * @param goods
  553. * @returns {*|{note: string, odsn: (*|string), goodname: *, productsn: *, changedispatchprice: *, goodssn: *, goodoption: string, goodshortname: (*|string), deductprice: *, deductenough: (*|string), discountprice: *, goodweight: string, goodunit: methods.form.goods.sku, dispatchprice: (*|number), total: number, goodsprice: *, allprice: string, price: (*|string), realprice: string, vipdiscount: (*|string), productprice: string, marketprice: string, couponprice: number}}
  554. */
  555. function setOrderInfos(order, goods)
  556. {
  557. var _ordersn = order.order_sn // 订单编号
  558. var _goodname = goods.title; // 商品名称
  559. if(goods.has_one_short){
  560. var _goodshortname = goods.has_one_short.short_title; // 商品简称
  561. }else{
  562. var _goodshortname = '-';
  563. }
  564. var _goodssn = goods.goods_sn; // 商品编码
  565. var _productsn = goods.product_sn; //商品条码
  566. var _marketprice = (goods.goods_price / Number(goods.total)).toFixed(2); //商品原价
  567. var _productprice = (goods.price / Number(goods.total)).toFixed(2); //商品原价
  568. var _allprice = _productprice * Number(goods.total); // 商品总价
  569. _allprice = _allprice.toFixed(2);
  570. var _total = Number(goods.total); // 商品数量
  571. var _note = '&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'; //备注栏
  572. var _goodoption = '-'
  573. if(goods.goods_option_title != ''){
  574. _goodoption = goods.goods_option_title; // 商品规格
  575. }
  576. var _goodunit = goods.goods.sku; // 商品单位
  577. var _goodweight = '-'; // 商品重量
  578. if(goods.goods.weight != ''){
  579. _goodweight = goods.goods.weight; // 商品规格
  580. }
  581. var _realprice = _productprice; // 商品折后价格
  582. //订单信息
  583. var _goodsprice = goods.goods_price; // 商品小计
  584. var _dispatchprice = order.dispatch_price; // 运费
  585. var _deductprice = goods.deduction_amount; // 抵扣金额
  586. var _discountprice = order.discount_price; // 优惠券金额
  587. var _vipdiscount = goods.price; // 会员折扣
  588. if(Number(goods.vip_price) > 0 ){
  589. _vipdiscount = goods.price - goods.vip_price
  590. }
  591. var _changeprice = order.change_price; // 改价优惠
  592. var _changedispatchprice = order.change_dispatch_price; // 运费改价
  593. var _couponprice = 0; // 优惠券优惠
  594. var _price = order.price; // 实付费
  595. info = {
  596. 'odsn':_ordersn,'goodname':_goodname,'goodshortname':_goodshortname,'goodssn':_goodssn,'productsn':_productsn,
  597. 'marketprice':_marketprice,
  598. 'productprice':_productprice,
  599. 'allprice':_allprice,
  600. 'total':_total,
  601. 'note':_note,
  602. 'goodoption':_goodoption,
  603. 'goodunit':_goodunit,
  604. 'goodweight':_goodweight,
  605. 'realprice':_realprice,
  606. 'goodsprice':_goodsprice,
  607. 'dispatchprice':_dispatchprice,
  608. 'discountprice':_discountprice,
  609. 'deductprice':_deductprice,
  610. 'vipdiscount':_vipdiscount,
  611. 'deductenough':_changeprice,'changedispatchprice':_changedispatchprice,'couponprice':_couponprice,
  612. 'price':_price
  613. };
  614. return info;
  615. }
  616. function getOrderIds()
  617. {
  618. let orderIds = [];
  619. $('.oneChange').each(function () {
  620. var _thisState = $(this).is(":checked");
  621. var _orderIds = $(this).data('orderids');
  622. if(_thisState){
  623. orderIds.push(_orderIds);
  624. }
  625. });
  626. return orderIds;
  627. }
  628. function saveSenderAll(data){
  629. // ajax 执行写入数据库
  630. $.ajax({
  631. type: 'POST',
  632. url: "{!! yzWebUrl('plugin.exhelper.admin.print-once.saveAddress') !!}",
  633. data: {
  634. realname:data.rep_realName,
  635. mobile:data.rep_mobile,
  636. province:data.rep_province,
  637. city:data.rep_city,
  638. area:data.rep_area,
  639. address:data.rep_address,
  640. ordersns:data.rep_ordersn.split(','),
  641. },
  642. dataType:'json',
  643. success: function (result){
  644. if(result.result=='error'){
  645. alert(result.resp);
  646. }
  647. }
  648. });
  649. }
  650. function printElectronics() {
  651. var orderIds = getOrderIds();
  652. var htmtList;
  653. var errors;
  654. var zipCode = prompt("发件地邮编(快递是EMS、邮政的必填否则报错,不是可不填)");
  655. $.ajax({
  656. type: 'POST',
  657. url: "{!! yzWebUrl('plugin.exhelper.admin.panel.print-electronics') !!}",
  658. data: {
  659. order_ids: orderIds,
  660. zip_code: zipCode,
  661. },
  662. dataType: 'json',
  663. success: function (result) {
  664. var data = result.data;
  665. if (result.result == 1) {
  666. htmtList = data.html_list;
  667. errors = data.errors;
  668. printStart(htmtList);
  669. alertError(errors);
  670. } else {
  671. cancel('推送失败。错误原因:' + result.msg);
  672. return;
  673. }
  674. }
  675. });
  676. }
  677. /**
  678. * 开始打印电子面单
  679. * @param htmtList
  680. */
  681. function printStart(htmtList)
  682. {
  683. var htmlListCount = htmtList.length;
  684. htmtList.forEach((html, htmlIdx) => {
  685. LODOP.PRINT_INITA(0, 0, "100mm", "150mm", "单据打印");
  686. LODOP.NewPageA();
  687. LODOP.SET_PRINT_PAGESIZE(1, "80mm", "130mm", "");
  688. LODOP.SET_PRINT_MODE("AUTO_CLOSE_PREWINDOW", true);
  689. LODOP.ADD_PRINT_HTM('0mm', '0mm', '150mm', '150mm', html);
  690. //选择默认的打印机
  691. LODOP.SET_PRINTER_INDEX(-1)
  692. //获取打印状态
  693. if (LODOP.CVERSION) {
  694. if(LODOP.PRINT()){
  695. if(htmlListCount == (htmlIdx + 1)){
  696. console.log('打印完成!')
  697. successHander();
  698. }
  699. }else{
  700. alert("打印已取消");
  701. return;
  702. }
  703. }
  704. })
  705. }
  706. /**
  707. * 打印错误的电子面单返回数据
  708. * @param alertError
  709. */
  710. function alertError(alertError)
  711. {
  712. var html = '';
  713. $("#errorMsg").html('');
  714. if(alertError.length > 0){
  715. alertError.forEach(error => {
  716. html += `
  717. <tr>
  718. <td>${error.order_sn}</td>
  719. <td style="width:50%;white-space:normal;word-wrap:break-word;word-break:break-all;">${error.msg}</td>
  720. </tr>
  721. `
  722. })
  723. $("#errorMsg").append(html);
  724. $('#errorModal').modal('show')
  725. }
  726. }
  727. </script>
  728. @endsection