supplier_doprint.blade.php 32 KB

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